@aglyn/plugins-ai 1.0.0-beta.244 → 1.0.0-beta.247
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/activity/ai-activity-actions.js +7 -1
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-job-links.js +21 -0
- package/src/lib/components/ai-job-links.js.map +1 -1
- package/src/lib/components/ai-product-zones.d.ts +3 -1
- package/src/lib/components/ai-product-zones.js.map +1 -1
- package/src/lib/components/ai-products-hub-card.component.js +1 -1
- package/src/lib/components/ai-products-hub-card.component.js.map +1 -1
- package/src/lib/components/ai-products-proposals.component.js +17 -9
- package/src/lib/components/ai-products-proposals.component.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.d.ts +1 -1
- package/src/lib/components/ai-site-start-card.component.js +98 -23
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-upsell-dialog.component.js +1 -1
- package/src/lib/components/ai-upsell-dialog.component.js.map +1 -1
- package/src/lib/declarations.server.js +12 -0
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/jobs/ai-build-capabilities.js +216 -2
- package/src/lib/jobs/ai-build-capabilities.js.map +1 -1
- package/src/lib/jobs/ai-job-build-step.d.ts +3 -1
- package/src/lib/jobs/ai-job-build-step.js +124 -18
- package/src/lib/jobs/ai-job-build-step.js.map +1 -1
- package/src/lib/jobs/ai-job-duplicate-step.d.ts +123 -0
- package/src/lib/jobs/ai-job-duplicate-step.js +269 -0
- package/src/lib/jobs/ai-job-duplicate-step.js.map +1 -0
- package/src/lib/jobs/ai-job-form-dataset.d.ts +8 -5
- package/src/lib/jobs/ai-job-form-dataset.js +28 -10
- package/src/lib/jobs/ai-job-form-dataset.js.map +1 -1
- package/src/lib/jobs/ai-job-form-step.d.ts +20 -4
- package/src/lib/jobs/ai-job-form-step.js +98 -28
- package/src/lib/jobs/ai-job-form-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +6 -2
- package/src/lib/jobs/ai-job-layout-language.js +29 -5
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.js +4 -1
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-media-step.d.ts +239 -0
- package/src/lib/jobs/ai-job-media-step.js +610 -0
- package/src/lib/jobs/ai-job-media-step.js.map +1 -0
- package/src/lib/jobs/ai-job-navigation-step.d.ts +157 -0
- package/src/lib/jobs/ai-job-navigation-step.js +439 -0
- package/src/lib/jobs/ai-job-navigation-step.js.map +1 -0
- package/src/lib/jobs/ai-job-page-language.d.ts +4 -1
- package/src/lib/jobs/ai-job-page-language.js +30 -5
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-sections.js +5 -4
- package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +3 -2
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +14 -3
- package/src/lib/jobs/ai-job-plan-step.js +87 -20
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-products-step.d.ts +2 -2
- package/src/lib/jobs/ai-job-products-step.js +2 -2
- package/src/lib/jobs/ai-job-products-step.js.map +1 -1
- package/src/lib/jobs/ai-job-settings-step.d.ts +268 -0
- package/src/lib/jobs/ai-job-settings-step.js +690 -0
- package/src/lib/jobs/ai-job-settings-step.js.map +1 -0
- package/src/lib/jobs/ai-job-site-content.d.ts +22 -8
- package/src/lib/jobs/ai-job-site-content.js +33 -15
- package/src/lib/jobs/ai-job-site-content.js.map +1 -1
- package/src/lib/jobs/ai-job-site-datasets.d.ts +3 -1
- package/src/lib/jobs/ai-job-site-datasets.js +13 -5
- package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
- package/src/lib/jobs/ai-job-site-events.d.ts +148 -0
- package/src/lib/jobs/ai-job-site-events.js +313 -0
- package/src/lib/jobs/ai-job-site-events.js.map +1 -0
- package/src/lib/jobs/ai-job-site-step.d.ts +12 -4
- package/src/lib/jobs/ai-job-site-step.js +132 -26
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-job-tracking-step.d.ts +184 -0
- package/src/lib/jobs/ai-job-tracking-step.js +501 -0
- package/src/lib/jobs/ai-job-tracking-step.js.map +1 -0
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +21 -0
- package/src/lib/jobs/ai-layout-stock-photos.js +41 -4
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
- package/src/lib/jobs/ai-site-publish.d.ts +62 -4
- package/src/lib/jobs/ai-site-publish.js +202 -56
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/ai-stock-photo-picker.d.ts +24 -0
- package/src/lib/jobs/ai-stock-photo-picker.js +108 -0
- package/src/lib/jobs/ai-stock-photo-picker.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.d.ts +37 -0
- package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.js +47 -0
- package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.d.ts +21 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.js +128 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.js.map +1 -0
- package/src/lib/layout-language/ai-layout-compiler.d.ts +16 -7
- package/src/lib/layout-language/ai-layout-compiler.js +62 -42
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame-hollows.d.ts +41 -0
- package/src/lib/layout-language/ai-layout-frame-hollows.js +330 -0
- package/src/lib/layout-language/ai-layout-frame-hollows.js.map +1 -0
- package/src/lib/layout-language/ai-layout-frame.d.ts +24 -5
- package/src/lib/layout-language/ai-layout-frame.js +93 -20
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-gaps.js +3 -1
- package/src/lib/layout-language/ai-layout-gaps.js.map +1 -1
- package/src/lib/layout-language/ai-layout-labels.d.ts +70 -0
- package/src/lib/layout-language/ai-layout-labels.js +162 -0
- package/src/lib/layout-language/ai-layout-labels.js.map +1 -0
- package/src/lib/layout-language/ai-layout-links.js +5 -2
- package/src/lib/layout-language/ai-layout-links.js.map +1 -1
- package/src/lib/layout-language/ai-layout-listings.d.ts +49 -1
- package/src/lib/layout-language/ai-layout-listings.js +66 -5
- package/src/lib/layout-language/ai-layout-listings.js.map +1 -1
- package/src/lib/layout-language/ai-layout-tree.d.ts +2 -0
- package/src/lib/layout-language/ai-layout-tree.js +17 -0
- package/src/lib/layout-language/ai-layout-tree.js.map +1 -1
- package/src/lib/model/ai-build-event-page.d.ts +70 -0
- package/src/lib/model/ai-build-event-page.js +145 -0
- package/src/lib/model/ai-build-event-page.js.map +1 -0
- package/src/lib/model/ai-build-job.d.ts +44 -0
- package/src/lib/model/ai-build-job.js +141 -13
- package/src/lib/model/ai-build-job.js.map +1 -1
- package/src/lib/model/ai-build-plan.d.ts +39 -3
- package/src/lib/model/ai-build-plan.js +59 -5
- package/src/lib/model/ai-build-plan.js.map +1 -1
- package/src/lib/model/ai-credit-estimate.d.ts +52 -0
- package/src/lib/model/ai-credit-estimate.js +51 -0
- package/src/lib/model/ai-credit-estimate.js.map +1 -1
- package/src/lib/model/ai-job-activity.js +6 -1
- package/src/lib/model/ai-job-activity.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +18 -2
- package/src/lib/model/ai-jobs.types.js +6 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-layout-menus.d.ts +104 -0
- package/src/lib/model/ai-layout-menus.js +518 -0
- package/src/lib/model/ai-layout-menus.js.map +1 -0
- package/src/lib/model/ai-plan-capabilities.d.ts +8 -0
- package/src/lib/model/ai-plan-capabilities.js.map +1 -1
- package/src/lib/model/ai-products.d.ts +31 -1
- package/src/lib/model/ai-products.js +34 -1
- package/src/lib/model/ai-products.js.map +1 -1
- package/src/lib/model/ai-site-inventory.d.ts +17 -0
- package/src/lib/model/ai-site-inventory.js +5 -0
- package/src/lib/model/ai-site-inventory.js.map +1 -1
- package/src/lib/model/ai-site-job.d.ts +12 -2
- package/src/lib/model/ai-site-job.js +39 -12
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-store-pages.js +1 -1
- package/src/lib/model/ai-site-store-pages.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +78 -3
- package/src/lib/runtime/ai-doctrine-validators.js +219 -31
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.d.ts +6 -1
- package/src/lib/runtime/ai-doctrine.js +16 -7
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-eval-live.d.ts +1 -1
- package/src/lib/runtime/ai-eval-live.js +1 -1
- package/src/lib/runtime/ai-eval-live.js.map +1 -1
- package/src/lib/runtime/ai-palette.d.ts +3 -1
- package/src/lib/runtime/ai-palette.generated.js +499 -11
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/runtime/ai-palette.js +5 -3
- package/src/lib/runtime/ai-palette.js.map +1 -1
- package/src/lib/runtime/ai-products-generation.d.ts +4 -2
- package/src/lib/runtime/ai-products-generation.js +12 -6
- package/src/lib/runtime/ai-products-generation.js.map +1 -1
- package/src/lib/runtime/ai-template-examples.js +8 -2
- package/src/lib/runtime/ai-template-examples.js.map +1 -1
- package/src/lib/runtime/site-inventory.d.ts +12 -0
- package/src/lib/runtime/site-inventory.js +29 -1
- package/src/lib/runtime/site-inventory.js.map +1 -1
- package/src/lib/server.js +20 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/testing/stand-in-dataset-index.js +37 -3
- package/src/lib/testing/stand-in-dataset-index.js.map +1 -1
- package/src/lib/tools/ai-products-tool.d.ts +3 -1
- package/src/lib/tools/ai-products-tool.js +15 -5
- package/src/lib/tools/ai-products-tool.js.map +1 -1
|
@@ -0,0 +1,128 @@
|
|
|
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
|
+
* PIXABAY'S RECORDED ANSWERS FOR TWO beta.246 HEROES (AGL-3760): what
|
|
18
|
+
* production's `stockPhotoSearches` cache held for the searches the starts
|
|
19
|
+
* sent, read back from the cache, never searched again. Ids, sizes, page
|
|
20
|
+
* slugs and tags are Pixabay's own, in its order; the contributor is left out.
|
|
21
|
+
*
|
|
22
|
+
* - Panadería Sol de Oaxaca (job ODSFzsGM91, 2026-10-13), a Spanish guided
|
|
23
|
+
* start: "Una panadería familiar de San Antonio con pan dulce, conchas y
|
|
24
|
+
* pasteles de tres leches al estilo de Oaxaca". Its business read as "con
|
|
25
|
+
* pan dulce", and all eight photos the site's library copied came from that
|
|
26
|
+
* one search: four of the Río Dulce in Guatemala at dusk (3619205–3619208),
|
|
27
|
+
* the home hero among them; a pan of vegetables, a ship off Côn Island, a
|
|
28
|
+
* rusted weight; and one cake (3147645, tagged "dulce").
|
|
29
|
+
* - Copper Fern Candle Co (job UoGN1DHzur, 2026-10-13): "An online shop for
|
|
30
|
+
* hand-poured soy candles, wax melts and candle gift sets". Its home hero
|
|
31
|
+
* ← 9380550, a latte with a candle blurred behind it, taken because its
|
|
32
|
+
* fifth tag and its page slug said "candle".
|
|
33
|
+
*/ const hit = (id, width, height, slug, tags)=>({
|
|
34
|
+
provider: 'pixabay',
|
|
35
|
+
id: String(id),
|
|
36
|
+
width,
|
|
37
|
+
height,
|
|
38
|
+
pageUrl: `https://pixabay.com/photos/${slug}/`,
|
|
39
|
+
photographer: 'A Pixabay contributor',
|
|
40
|
+
tags: tags.split(', '),
|
|
41
|
+
downloadUrl: `https://pixabay.com/get/g${id}_1280.jpg`
|
|
42
|
+
});
|
|
43
|
+
/** `con pan dulce` (horizontal, min_width 1600): the Panadería hero, answered 2026-10-13T15:29:37.726Z. */ export const CON_PAN_DULCE_HERO = [
|
|
44
|
+
hit(2011373, 1280, 878, 'deadvlei-namibia-africa-desert-2011373', 'deadvlei, namibia, africa, desert, dryness, tree, dead vlei, sand, dried up, nature, burned, namib'),
|
|
45
|
+
hit(3238173, 1280, 930, 'fried-egg-pan-meal-grill-egg-yolk-3238173', 'fried egg, pan, meal, grill, egg yolk, food, fried eggs, frying pan, protein, cook, yolk, eggs, kitchen, egg, fried, yummy, tasty, eggs, eggs, eggs'),
|
|
46
|
+
hit(6472033, 1280, 853, 'choclo-maiz-choclo-con-queso-6472033', 'choclo, maiz, choclo con queso, choclo, choclo, choclo, choclo, choclo, maiz'),
|
|
47
|
+
hit(3147645, 1280, 719, 'dulce-sweet-fruit-cake-pastry-3147645', 'dulce, sweet, fruit, cake, pastry, sugar, italy'),
|
|
48
|
+
hit(4506703, 1280, 720, 'dumpling-gyoza-frying-pan-skillet-4506703', 'dumpling, gyoza, frying pan, skillet, pan, gyoza, gyoza, gyoza, gyoza, gyoza'),
|
|
49
|
+
hit(9565430, 1280, 853, 'acacia-nature-tree-africa-etosha-9565430', 'acacia, nature, tree, africa, etosha, salt pan, scenery, panorama'),
|
|
50
|
+
hit(1979272, 1280, 853, 'happy-valentines-day-woman-man-1979272', 'happy valentines day, woman, man, kitchen, food preparation, couple, relationship, together, cooking, pair, cutting, chopping, everyday life, blonde, cutting board, vegetables, happy couple, stove, cook, knife'),
|
|
51
|
+
hit(5921491, 1280, 854, 'meal-food-tofu-rice-dish-cooked-5921491', 'meal, food, tofu, rice, dish, cooked, fried, tasty, delicious, cuisine, pan, bowls, kaiseki, flat lay, meal, food, tofu, tofu, rice, rice'),
|
|
52
|
+
hit(3475625, 1280, 853, 'cireșe-cireșele-dulci-fructe-roșu-3475625', 'cireșe, cireșele dulci, fructe, roșu, dulce, delicios, creangă, frunze, cireșe, fructe, fructe, fructe, fructe, fructe, roșu, roșu, roșu, roșu, roșu, delicios'),
|
|
53
|
+
hit(64310, 1280, 850, 'tree-desert-namibia-clay-pan-64310', 'tree, desert, namibia, nature, clay pan, drought, africa, sand, sky, dunes, outdoors, discovery'),
|
|
54
|
+
hit(7887696, 1280, 853, 'weight-metal-old-rusted-pan-weigh-7887696', 'weight, metal, old, rusted, pan, weigh, weight, weight, weight, weight, weight'),
|
|
55
|
+
hit(8027678, 1280, 853, 'vegetable-pan-grilled-vegetables-8027678', 'vegetable pan, grilled vegetables, cooking, healthy, zucchini, broccoli, paprika, grilling, nourishment, cooking, cooking, cooking, healthy, healthy, healthy, healthy, healthy, zucchini'),
|
|
56
|
+
hit(729069, 1280, 853, 'con-racehorse-gallop-running-horse-729069', 'con, racehorse, gallop, running horse, sport, racehorse, racehorse, racehorse, racehorse, racehorse, running horse'),
|
|
57
|
+
hit(3060093, 1280, 854, 'salt-harvesting-vietnam-water-salt-3060093', 'salt harvesting, vietnam, water, salt, work, people, nature, reflection, hon khoi, salt field, salina, tropical, agriculture, asia, harvest, asian, hats, traditional'),
|
|
58
|
+
hit(9384171, 1280, 853, 'food-japanese-meal-class-b-gourmet-9384171', 'food, japanese meal, class b gourmet, takoyaki, cooking, shop'),
|
|
59
|
+
hit(8295778, 1280, 853, 'sweet-potatoes-potatoes-cook-meal-8295778', 'sweet potatoes, potatoes, cook, meal, food, grill, pan, food, food, food, food, food'),
|
|
60
|
+
hit(3619206, 1280, 847, 'central-america-guatemala-rio-dulce-3619206', 'central america, guatemala, rio dulce, water, heaven, nature, clouds, landscape'),
|
|
61
|
+
hit(1835369, 1280, 726, 'cooking-wok-chinese-asian-food-1835369', 'cooking, wok, chinese, asian, food, frying pan, meal, pan, vegetables, stir fry, frying, cook, cooking food, cooking vegetables, cooking, cooking, cooking, cooking, cooking, wok'),
|
|
62
|
+
hit(6286592, 1280, 853, 'meatballs-cook-frying-pan-6286592', 'meatballs, cook, frying pan, minced meat, meat, food, meal, delicious, fry, sear, pan, closeup, meatballs, meatballs, meatballs, meatballs, meatballs'),
|
|
63
|
+
hit(4926211, 1280, 853, 'girl-the-sea-con-beach-summer-4926211', 'girl, the sea, con, beach, summer, nature, rider, sport, race, animals'),
|
|
64
|
+
hit(3619207, 1280, 848, 'central-america-guatemala-rio-dulce-3619207', 'central america, guatemala, rio dulce, water, nature, heaven, clouds, landscape'),
|
|
65
|
+
hit(4813261, 1280, 853, 'meat-duck-duck-breast-raw-fry-4813261', 'meat, duck, duck breast, raw, fry, court, tasty, fried, sear, recipe, roast duck, food, poultry, food photo, kitchen, cook, meat, meat, meat, duck'),
|
|
66
|
+
hit(4644941, 1280, 853, 'fat-frying-pan-4644941', 'fat, frying, pan'),
|
|
67
|
+
hit(4937535, 1280, 960, 'stroller-beach-the-sea-ocean-sand-4937535', 'stroller, beach, the sea, nature, ocean, sand, con, rider, woman, umbrella, blue, red'),
|
|
68
|
+
hit(1838785, 1280, 1280, 'avocado-chopping-board-ingredients-1838785', 'avocado, chopping board, ingredients, produce, groceries, fresh produce, food preparation, vegetables, cut, chop, kitchen, cooking, eggs, food, frying pan, healthy, knife, mushrooms, kitchen, cooking'),
|
|
69
|
+
hit(4937541, 1280, 853, 'rider-con-arena-saddle-helmet-4937541', 'rider, con, arena, saddle, helmet, costume, wall, sand'),
|
|
70
|
+
hit(6380762, 1280, 853, 'panpipe-musician-guatemalan-6380762', 'panpipe, musician, guatemalan, traditional costume, culture, man, pan flute, instrument, music, musical instrument, portrait, musician, musician, culture, pan flute, music, music, music, music, music'),
|
|
71
|
+
hit(3246189, 1280, 853, 'food-pan-cooking-frying-pan-meal-3246189', 'food, pan, cooking, frying pan, meal, camping, breakfast, fire pit, morning, cook, outdoors, pit, fire, campfire, grill, scrambled, smoke, spatula, outside, skillet'),
|
|
72
|
+
hit(2119027, 1280, 853, 'country-life-pan-kitchen-2119027', 'country life, pan, kitchen, preparation, frying pan, farmer, kitchen appliances, farm yard, country life, country life, pan, kitchen, kitchen, kitchen, kitchen, farmer, kitchen appliances, kitchen appliances, kitchen appliances, kitchen appliances'),
|
|
73
|
+
hit(1927783, 1280, 853, 'pan-cook-fire-boiling-water-food-1927783', 'pan, cook, fire, boiling water, food, picture, free image, cook, boiling water, boiling water, boiling water, boiling water, boiling water'),
|
|
74
|
+
hit(2106825, 1280, 853, 'carrots-yellow-beets-vegetables-2106825', 'carrots, yellow beets, vegetables, carrot, food, vitamins, meal, fresh, bio, cook, yummy, vegetarian, vegetable plants, market fresh vegetables, orange, healthy, nourishment, vegan, ingredients, vegetable pan'),
|
|
75
|
+
hit(3619208, 1280, 847, 'central-america-guatemale-rio-dulce-3619208', 'central america, guatemale, rio dulce, water, heaven, clouds, nature, landscape'),
|
|
76
|
+
hit(5095290, 1280, 853, 'bug-deep-con-infections-spike-5095290', 'bug, deep, con, nature, infections, spike, tree, black'),
|
|
77
|
+
hit(3125689, 1280, 853, 'cook-figure-fried-egg-food-3125689', 'cook, figure, fried egg, food, frying pan, fried eggs, pan, yummy, eggs, grill, egg yolk, yolk, kitchen, fun'),
|
|
78
|
+
hit(3619205, 1280, 847, 'central-america-guatemala-rio-dulce-3619205', 'central america, guatemala, rio dulce, nature, water, heaven, clouds, landscape'),
|
|
79
|
+
hit(3941617, 1280, 853, 'meal-pan-chicken-tomato-3941617', 'meal, pan, chicken, tomato'),
|
|
80
|
+
hit(5650205, 1280, 853, 'cosplay-clown-costume-scary-creepy-5650205', 'cosplay, clown, costume, scary, creepy, evil clown, cosplayer, character, portrait, comic con, clown, clown, clown, clown, clown, evil clown, evil clown, evil clown, evil clown'),
|
|
81
|
+
hit(1583152, 1280, 905, 'pan-vegetables-cook-1583152', 'pan, vegetables, cook, pan, pan, pan, pan, pan, cook'),
|
|
82
|
+
hit(7478482, 1280, 853, 'sea-ship-con-island-ocean-vietnam-7478482', 'sea, ship, con island, ocean, vietnam, nature, fishing boat, blue, minimalism, tran thang nhat, 5 plus english'),
|
|
83
|
+
hit(5427775, 1280, 853, 'sea-vung-tau-beach-sky-dawn-5427775', 'sea, vung tau beach, sky, nature, dawn, con heo hill')
|
|
84
|
+
];
|
|
85
|
+
/** `candle shop` (vertical, min_width 1600): the Copper Fern hero, answered 2026-10-13T15:42:26.770Z. */ export const CANDLE_SHOP_TALL_HERO = [
|
|
86
|
+
hit(2692556, 937, 1280, 'tea-light-light-worships-2692556', 'tea light, light, worships, candlelight, flame, meditation, prayer, candle, contemplative, memorial candle, ecclesiastical, shining, memorial lights, sacrificial candle, sacrificial light, reflection, warmth, burn, grief, seem'),
|
|
87
|
+
hit(4597415, 853, 1280, 'camera-book-candle-read-cozy-bed-4597415', 'camera, book, candle, read, cozy, bed, lamp, bokeh, light, home, comfort, reading, cold, camera, book, book, book, candle, candle, candle'),
|
|
88
|
+
hit(5850280, 853, 1280, 'candle-christmas-candle-advent-5850280', 'candle, christmas candle, advent, advent candle, candlelight, flame, christmas decoration, christmas decor, decoration, decor, closeup, candle, candle, candle, candle, candle, christmas candle, christmas candle, christmas candle, advent'),
|
|
89
|
+
hit(9874140, 853, 1280, 'candles-candlelight-tea-lights-9874140', 'candles, candlelight, tea lights, church, prayer, faith, religion, light, burn, all saints, advent'),
|
|
90
|
+
hit(6942931, 853, 1280, 'candle-book-read-study-fiction-6942931', 'candle, book, read, study, fiction, story, pages, candle, candle, candle, candle, book, study, study, study, study, study, story'),
|
|
91
|
+
hit(4870097, 853, 1280, 'white-candle-candlelight-dark-4870097', 'white candle, candlelight, dark, blue flame, black candle, black candles'),
|
|
92
|
+
hit(5181374, 857, 1280, 'candle-candlelight-flame-5181374', 'candle, candlelight, flame, candle flame, fire, black background, wick, burning candle, black candle, black candles, iphone wallpaper'),
|
|
93
|
+
hit(1584711, 848, 1280, 'massage-therapy-candles-relaxation-1584711', 'massage therapy, candles, relaxation, treatment, luxury, spa, massage, towels, tea candles, candlelight, spa treatment, spa, spa, spa, spa, spa, massage'),
|
|
94
|
+
hit(4222263, 868, 1280, 'table-candle-decoration-interior-4222263', 'table, candle, decoration, interior, romantic, celebration, candlestick, candlelight, living room, table, table, table, candle, candle, candle, candle, candle, living room, living room, living room'),
|
|
95
|
+
hit(6668364, 853, 1280, 'lemon-candle-scented-candle-6668364', 'lemon candle, scented candle, blackberry candle, scented candle, scented candle, scented candle, scented candle, scented candle'),
|
|
96
|
+
hit(4829516, 960, 1280, 'candlestick-classic-antique-candle-4829516', 'candlestick, classic, antique, candle, decorative, brown candle, brown candles, candlestick, candlestick, candlestick, candlestick, candlestick'),
|
|
97
|
+
hit(2738532, 853, 1280, 'candle-tea-light-hand-church-light-2738532', 'candle, tea light, hand, church, light, worships, candlelight, faith, religion, christianity, flame, commemorate, meditation, prayer, contemplative, memorial candle, ecclesiastical, mood, shining, the atmosphere'),
|
|
98
|
+
hit(8104677, 850, 1280, 'woman-manequin-shop-hat-hat-shop-8104677', 'woman, manequin, shop, hat, hat shop, store window, monochromatic'),
|
|
99
|
+
hit(6145811, 850, 1280, 'bags-shop-gift-shop-establishment-6145811', 'bags, shop, gift shop, establishment, tourist shop, france, monaco, destination, vacation, travel'),
|
|
100
|
+
hit(397965, 809, 1280, 'candle-candle-wax-candlelight-397965', 'candle, candle wax, candlelight, candlestick, flame, wax, illuminated, fire, burning, romantic, candle, candle, candle, candle, candle, candle wax, candlestick, wax'),
|
|
101
|
+
hit(7581472, 853, 1280, 'candle-pine-christmas-tree-holidays-7581472', 'candle, pine, christmas tree, holidays, decoration, the background, pictures, image, burn, fire, heat, light, symbol, cozy, wax, night, black, hot, religion, meditation'),
|
|
102
|
+
hit(7131604, 853, 1280, 'vintage-aesthetic-vintage-fashion-7131604', 'vintage aesthetic, vintage fashion, restaurant, interior, vintage interior, restaurant, restaurant, restaurant, restaurant, restaurant, interior'),
|
|
103
|
+
hit(999370, 853, 1280, 'marrakesh-morocco-market-travel-999370', 'marrakesh, morocco, market, travel, colorful plates, morocco, morocco, morocco, morocco, morocco'),
|
|
104
|
+
hit(5960786, 960, 1280, 'candle-holly-decorative-5960786', 'candle, holly, decorative, beeswax candle, wax candle, scented candle, scented candle, scented candle, scented candle, scented candle, scented candle'),
|
|
105
|
+
hit(4126234, 853, 1280, 'girl-portrait-candle-smoke-4126234', 'girl, portrait, candle, smoke, brown smoke, brown candle, brown candles'),
|
|
106
|
+
hit(4832387, 915, 1280, 'candlelight-candle-flame-dark-4832387', 'candlelight, candle, flame, dark, black candle, black candles'),
|
|
107
|
+
hit(4725958, 1024, 1280, 'string-light-street-lights-violin-4725958', 'string, light, street, lights, violin, candle, christmas, woman, strings, brown candle, brown candles'),
|
|
108
|
+
hit(6805045, 853, 1280, 'christmas-christmas-decoration-6805045', 'christmas, christmas decoration, christmas background, holiday, happychristmas, iphone wallpaper, christmas, christmas, christmas, christmas, christmas, christmas background, christmas background, christmas background, christmas background, christmas background'),
|
|
109
|
+
hit(4368774, 853, 1280, 'street-building-historic-travel-4368774', 'street, building, historic, travel, trogir, architecture, mediterranean, croatia, old, culture, street, street, street, mediterranean, croatia, croatia, croatia, croatia, croatia'),
|
|
110
|
+
hit(4068284, 862, 1280, 'girl-istanbul-shop-shopping-4068284', 'girl, istanbul, shop, shopping, turkish, turkish, turkish, turkish, turkish, turkish'),
|
|
111
|
+
hit(9380550, 854, 1280, 'coffee-latte-art-candle-cozy-drink-9380550', 'coffee, mobile wallpaper 4k, latte art, samsung wallpaper, candle, cozy, drink, relaxation, ipad wallpaper, iphone wallpaper, aroma, beautiful wallpaper, coffee time, lock screen wallpaper, 4k, mobile wallpaper, wallpaper, phone wallpaper, background'),
|
|
112
|
+
hit(4670035, 853, 1280, 'lantern-street-hoi-an-night-4670035', 'lantern, street, hoi an, night, old quarter, lantern, lantern, lantern, lantern, lantern, street, street, street, street, street, hoi an, hoi an, night, night, night'),
|
|
113
|
+
hit(3358546, 960, 1280, 'burnt-flame-candle-dark-wax-burn-3358546', 'burnt, flame, candle, dark, wax, burn, heat, black candle, black candles'),
|
|
114
|
+
hit(3992893, 894, 1280, 'flowers-table-setting-theme-wedding-3992893', 'flowers, table setting, theme, flower background, flower wallpaper, nature, wedding, beautiful flowers, bouquets, romantic, party, love'),
|
|
115
|
+
hit(4523695, 960, 1280, 'candle-light-burnt-black-wight-4523695', 'candle, light, burnt, black, wight, black candle, black candles'),
|
|
116
|
+
hit(5409069, 854, 1280, 'ice-cream-candy-food-dessert-sweet-5409069', 'ice cream, candy, food, dessert, sweet, ice cream, ice cream, ice cream, ice cream, ice cream, candy'),
|
|
117
|
+
hit(8167776, 1024, 1280, 'shopping-shop-store-market-8167776', 'shopping, shop, store, market, supermarket, bakery, window'),
|
|
118
|
+
hit(4562179, 853, 1280, 'candle-candlelight-shiny-mourning-4562179', 'candle, candlelight, shiny, mourning, romantic, mood, decoration, deco, flame, bright, brown candle, brown candles, candle, candle, candle, candle, candle, candlelight'),
|
|
119
|
+
hit(2996627, 960, 1280, 'advent-christmas-time-advent-season-2996627', 'advent, christmas time, advent season, advent wreath, 3advent, advent greeting, greeting card, candles, candlelight, contemplative, decoration, flower arrangement, christmas jewelry, christmas, third candle, advent candle, advent, advent, advent, advent'),
|
|
120
|
+
hit(6783665, 853, 1280, 'mulled-wine-christmas-drink-6783665', 'mulled wine, christmas drink, christmas decor, alcoholic beverage, mulled wine, mulled wine, mulled wine, mulled wine, mulled wine, christmas drink'),
|
|
121
|
+
hit(5196603, 960, 1280, 'candle-shadow-light-mood-fire-5196603', 'candle, shadow, light, mood, fire, reflection, remember, brown candle, brown candles'),
|
|
122
|
+
hit(4449673, 853, 1280, 'bokeh-night-dark-lights-candle-4449673', 'bokeh, night, dark, lights, candle, darkness, mood, black candle, black candles, black bokeh, bokeh, bokeh, bokeh, bokeh, bokeh'),
|
|
123
|
+
hit(4220874, 853, 1280, 'candles-table-mood-candle-light-4220874', 'candles, table, mood, candle, light, candlelight, the atmosphere, lights, warm, candles, candles, candles, candles, candles, table, table, table, candle, light, candlelight'),
|
|
124
|
+
hit(4518366, 960, 1280, 'taiwan-candle-temple-4518366', 'taiwan, candle, temple'),
|
|
125
|
+
hit(4713126, 1024, 1280, 'berlin-germany-city-shopping-4713126', 'berlin, germany, city, shopping, blackandwhite, facade, black city, black shopping, gray shopping, black shop, gray shop')
|
|
126
|
+
];
|
|
127
|
+
|
|
128
|
+
//# sourceMappingURL=ai-stock-photo-agl3760-recordings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.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 { StockPhoto } from '@aglyn/aglyn/plugin-manager/stock-photo-provider'\n\n/**\n * PIXABAY'S RECORDED ANSWERS FOR TWO beta.246 HEROES (AGL-3760): what\n * production's `stockPhotoSearches` cache held for the searches the starts\n * sent, read back from the cache, never searched again. Ids, sizes, page\n * slugs and tags are Pixabay's own, in its order; the contributor is left out.\n *\n * - Panadería Sol de Oaxaca (job ODSFzsGM91, 2026-10-13), a Spanish guided\n * start: \"Una panadería familiar de San Antonio con pan dulce, conchas y\n * pasteles de tres leches al estilo de Oaxaca\". Its business read as \"con\n * pan dulce\", and all eight photos the site's library copied came from that\n * one search: four of the Río Dulce in Guatemala at dusk (3619205–3619208),\n * the home hero among them; a pan of vegetables, a ship off Côn Island, a\n * rusted weight; and one cake (3147645, tagged \"dulce\").\n * - Copper Fern Candle Co (job UoGN1DHzur, 2026-10-13): \"An online shop for\n * hand-poured soy candles, wax melts and candle gift sets\". Its home hero\n * ← 9380550, a latte with a candle blurred behind it, taken because its\n * fifth tag and its page slug said \"candle\".\n */\n\nconst hit = (\n id: number,\n width: number,\n height: number,\n slug: string,\n tags: string,\n): StockPhoto =>\n ({\n provider: 'pixabay',\n id: String(id),\n width,\n height,\n pageUrl: `https://pixabay.com/photos/${slug}/`,\n photographer: 'A Pixabay contributor',\n tags: tags.split(', '),\n downloadUrl: `https://pixabay.com/get/g${id}_1280.jpg`,\n }) as StockPhoto\n\n/** `con pan dulce` (horizontal, min_width 1600): the Panadería hero, answered 2026-10-13T15:29:37.726Z. */\nexport const CON_PAN_DULCE_HERO: StockPhoto[] = [\n hit(\n 2011373,\n 1280,\n 878,\n 'deadvlei-namibia-africa-desert-2011373',\n 'deadvlei, namibia, africa, desert, dryness, tree, dead vlei, sand, dried up, nature, burned, namib',\n ),\n hit(\n 3238173,\n 1280,\n 930,\n 'fried-egg-pan-meal-grill-egg-yolk-3238173',\n 'fried egg, pan, meal, grill, egg yolk, food, fried eggs, frying pan, protein, cook, yolk, eggs, kitchen, egg, fried, yummy, tasty, eggs, eggs, eggs',\n ),\n hit(\n 6472033,\n 1280,\n 853,\n 'choclo-maiz-choclo-con-queso-6472033',\n 'choclo, maiz, choclo con queso, choclo, choclo, choclo, choclo, choclo, maiz',\n ),\n hit(\n 3147645,\n 1280,\n 719,\n 'dulce-sweet-fruit-cake-pastry-3147645',\n 'dulce, sweet, fruit, cake, pastry, sugar, italy',\n ),\n hit(\n 4506703,\n 1280,\n 720,\n 'dumpling-gyoza-frying-pan-skillet-4506703',\n 'dumpling, gyoza, frying pan, skillet, pan, gyoza, gyoza, gyoza, gyoza, gyoza',\n ),\n hit(\n 9565430,\n 1280,\n 853,\n 'acacia-nature-tree-africa-etosha-9565430',\n 'acacia, nature, tree, africa, etosha, salt pan, scenery, panorama',\n ),\n hit(\n 1979272,\n 1280,\n 853,\n 'happy-valentines-day-woman-man-1979272',\n 'happy valentines day, woman, man, kitchen, food preparation, couple, relationship, together, cooking, pair, cutting, chopping, everyday life, blonde, cutting board, vegetables, happy couple, stove, cook, knife',\n ),\n hit(\n 5921491,\n 1280,\n 854,\n 'meal-food-tofu-rice-dish-cooked-5921491',\n 'meal, food, tofu, rice, dish, cooked, fried, tasty, delicious, cuisine, pan, bowls, kaiseki, flat lay, meal, food, tofu, tofu, rice, rice',\n ),\n hit(\n 3475625,\n 1280,\n 853,\n 'cireșe-cireșele-dulci-fructe-roșu-3475625',\n 'cireșe, cireșele dulci, fructe, roșu, dulce, delicios, creangă, frunze, cireșe, fructe, fructe, fructe, fructe, fructe, roșu, roșu, roșu, roșu, roșu, delicios',\n ),\n hit(\n 64310,\n 1280,\n 850,\n 'tree-desert-namibia-clay-pan-64310',\n 'tree, desert, namibia, nature, clay pan, drought, africa, sand, sky, dunes, outdoors, discovery',\n ),\n hit(\n 7887696,\n 1280,\n 853,\n 'weight-metal-old-rusted-pan-weigh-7887696',\n 'weight, metal, old, rusted, pan, weigh, weight, weight, weight, weight, weight',\n ),\n hit(\n 8027678,\n 1280,\n 853,\n 'vegetable-pan-grilled-vegetables-8027678',\n 'vegetable pan, grilled vegetables, cooking, healthy, zucchini, broccoli, paprika, grilling, nourishment, cooking, cooking, cooking, healthy, healthy, healthy, healthy, healthy, zucchini',\n ),\n hit(\n 729069,\n 1280,\n 853,\n 'con-racehorse-gallop-running-horse-729069',\n 'con, racehorse, gallop, running horse, sport, racehorse, racehorse, racehorse, racehorse, racehorse, running horse',\n ),\n hit(\n 3060093,\n 1280,\n 854,\n 'salt-harvesting-vietnam-water-salt-3060093',\n 'salt harvesting, vietnam, water, salt, work, people, nature, reflection, hon khoi, salt field, salina, tropical, agriculture, asia, harvest, asian, hats, traditional',\n ),\n hit(\n 9384171,\n 1280,\n 853,\n 'food-japanese-meal-class-b-gourmet-9384171',\n 'food, japanese meal, class b gourmet, takoyaki, cooking, shop',\n ),\n hit(\n 8295778,\n 1280,\n 853,\n 'sweet-potatoes-potatoes-cook-meal-8295778',\n 'sweet potatoes, potatoes, cook, meal, food, grill, pan, food, food, food, food, food',\n ),\n hit(\n 3619206,\n 1280,\n 847,\n 'central-america-guatemala-rio-dulce-3619206',\n 'central america, guatemala, rio dulce, water, heaven, nature, clouds, landscape',\n ),\n hit(\n 1835369,\n 1280,\n 726,\n 'cooking-wok-chinese-asian-food-1835369',\n 'cooking, wok, chinese, asian, food, frying pan, meal, pan, vegetables, stir fry, frying, cook, cooking food, cooking vegetables, cooking, cooking, cooking, cooking, cooking, wok',\n ),\n hit(\n 6286592,\n 1280,\n 853,\n 'meatballs-cook-frying-pan-6286592',\n 'meatballs, cook, frying pan, minced meat, meat, food, meal, delicious, fry, sear, pan, closeup, meatballs, meatballs, meatballs, meatballs, meatballs',\n ),\n hit(\n 4926211,\n 1280,\n 853,\n 'girl-the-sea-con-beach-summer-4926211',\n 'girl, the sea, con, beach, summer, nature, rider, sport, race, animals',\n ),\n hit(\n 3619207,\n 1280,\n 848,\n 'central-america-guatemala-rio-dulce-3619207',\n 'central america, guatemala, rio dulce, water, nature, heaven, clouds, landscape',\n ),\n hit(\n 4813261,\n 1280,\n 853,\n 'meat-duck-duck-breast-raw-fry-4813261',\n 'meat, duck, duck breast, raw, fry, court, tasty, fried, sear, recipe, roast duck, food, poultry, food photo, kitchen, cook, meat, meat, meat, duck',\n ),\n hit(\n 4644941,\n 1280,\n 853,\n 'fat-frying-pan-4644941',\n 'fat, frying, pan',\n ),\n hit(\n 4937535,\n 1280,\n 960,\n 'stroller-beach-the-sea-ocean-sand-4937535',\n 'stroller, beach, the sea, nature, ocean, sand, con, rider, woman, umbrella, blue, red',\n ),\n hit(\n 1838785,\n 1280,\n 1280,\n 'avocado-chopping-board-ingredients-1838785',\n 'avocado, chopping board, ingredients, produce, groceries, fresh produce, food preparation, vegetables, cut, chop, kitchen, cooking, eggs, food, frying pan, healthy, knife, mushrooms, kitchen, cooking',\n ),\n hit(\n 4937541,\n 1280,\n 853,\n 'rider-con-arena-saddle-helmet-4937541',\n 'rider, con, arena, saddle, helmet, costume, wall, sand',\n ),\n hit(\n 6380762,\n 1280,\n 853,\n 'panpipe-musician-guatemalan-6380762',\n 'panpipe, musician, guatemalan, traditional costume, culture, man, pan flute, instrument, music, musical instrument, portrait, musician, musician, culture, pan flute, music, music, music, music, music',\n ),\n hit(\n 3246189,\n 1280,\n 853,\n 'food-pan-cooking-frying-pan-meal-3246189',\n 'food, pan, cooking, frying pan, meal, camping, breakfast, fire pit, morning, cook, outdoors, pit, fire, campfire, grill, scrambled, smoke, spatula, outside, skillet',\n ),\n hit(\n 2119027,\n 1280,\n 853,\n 'country-life-pan-kitchen-2119027',\n 'country life, pan, kitchen, preparation, frying pan, farmer, kitchen appliances, farm yard, country life, country life, pan, kitchen, kitchen, kitchen, kitchen, farmer, kitchen appliances, kitchen appliances, kitchen appliances, kitchen appliances',\n ),\n hit(\n 1927783,\n 1280,\n 853,\n 'pan-cook-fire-boiling-water-food-1927783',\n 'pan, cook, fire, boiling water, food, picture, free image, cook, boiling water, boiling water, boiling water, boiling water, boiling water',\n ),\n hit(\n 2106825,\n 1280,\n 853,\n 'carrots-yellow-beets-vegetables-2106825',\n 'carrots, yellow beets, vegetables, carrot, food, vitamins, meal, fresh, bio, cook, yummy, vegetarian, vegetable plants, market fresh vegetables, orange, healthy, nourishment, vegan, ingredients, vegetable pan',\n ),\n hit(\n 3619208,\n 1280,\n 847,\n 'central-america-guatemale-rio-dulce-3619208',\n 'central america, guatemale, rio dulce, water, heaven, clouds, nature, landscape',\n ),\n hit(\n 5095290,\n 1280,\n 853,\n 'bug-deep-con-infections-spike-5095290',\n 'bug, deep, con, nature, infections, spike, tree, black',\n ),\n hit(\n 3125689,\n 1280,\n 853,\n 'cook-figure-fried-egg-food-3125689',\n 'cook, figure, fried egg, food, frying pan, fried eggs, pan, yummy, eggs, grill, egg yolk, yolk, kitchen, fun',\n ),\n hit(\n 3619205,\n 1280,\n 847,\n 'central-america-guatemala-rio-dulce-3619205',\n 'central america, guatemala, rio dulce, nature, water, heaven, clouds, landscape',\n ),\n hit(\n 3941617,\n 1280,\n 853,\n 'meal-pan-chicken-tomato-3941617',\n 'meal, pan, chicken, tomato',\n ),\n hit(\n 5650205,\n 1280,\n 853,\n 'cosplay-clown-costume-scary-creepy-5650205',\n 'cosplay, clown, costume, scary, creepy, evil clown, cosplayer, character, portrait, comic con, clown, clown, clown, clown, clown, evil clown, evil clown, evil clown, evil clown',\n ),\n hit(\n 1583152,\n 1280,\n 905,\n 'pan-vegetables-cook-1583152',\n 'pan, vegetables, cook, pan, pan, pan, pan, pan, cook',\n ),\n hit(\n 7478482,\n 1280,\n 853,\n 'sea-ship-con-island-ocean-vietnam-7478482',\n 'sea, ship, con island, ocean, vietnam, nature, fishing boat, blue, minimalism, tran thang nhat, 5 plus english',\n ),\n hit(\n 5427775,\n 1280,\n 853,\n 'sea-vung-tau-beach-sky-dawn-5427775',\n 'sea, vung tau beach, sky, nature, dawn, con heo hill',\n ),\n]\n\n/** `candle shop` (vertical, min_width 1600): the Copper Fern hero, answered 2026-10-13T15:42:26.770Z. */\nexport const CANDLE_SHOP_TALL_HERO: StockPhoto[] = [\n hit(\n 2692556,\n 937,\n 1280,\n 'tea-light-light-worships-2692556',\n 'tea light, light, worships, candlelight, flame, meditation, prayer, candle, contemplative, memorial candle, ecclesiastical, shining, memorial lights, sacrificial candle, sacrificial light, reflection, warmth, burn, grief, seem',\n ),\n hit(\n 4597415,\n 853,\n 1280,\n 'camera-book-candle-read-cozy-bed-4597415',\n 'camera, book, candle, read, cozy, bed, lamp, bokeh, light, home, comfort, reading, cold, camera, book, book, book, candle, candle, candle',\n ),\n hit(\n 5850280,\n 853,\n 1280,\n 'candle-christmas-candle-advent-5850280',\n 'candle, christmas candle, advent, advent candle, candlelight, flame, christmas decoration, christmas decor, decoration, decor, closeup, candle, candle, candle, candle, candle, christmas candle, christmas candle, christmas candle, advent',\n ),\n hit(\n 9874140,\n 853,\n 1280,\n 'candles-candlelight-tea-lights-9874140',\n 'candles, candlelight, tea lights, church, prayer, faith, religion, light, burn, all saints, advent',\n ),\n hit(\n 6942931,\n 853,\n 1280,\n 'candle-book-read-study-fiction-6942931',\n 'candle, book, read, study, fiction, story, pages, candle, candle, candle, candle, book, study, study, study, study, study, story',\n ),\n hit(\n 4870097,\n 853,\n 1280,\n 'white-candle-candlelight-dark-4870097',\n 'white candle, candlelight, dark, blue flame, black candle, black candles',\n ),\n hit(\n 5181374,\n 857,\n 1280,\n 'candle-candlelight-flame-5181374',\n 'candle, candlelight, flame, candle flame, fire, black background, wick, burning candle, black candle, black candles, iphone wallpaper',\n ),\n hit(\n 1584711,\n 848,\n 1280,\n 'massage-therapy-candles-relaxation-1584711',\n 'massage therapy, candles, relaxation, treatment, luxury, spa, massage, towels, tea candles, candlelight, spa treatment, spa, spa, spa, spa, spa, massage',\n ),\n hit(\n 4222263,\n 868,\n 1280,\n 'table-candle-decoration-interior-4222263',\n 'table, candle, decoration, interior, romantic, celebration, candlestick, candlelight, living room, table, table, table, candle, candle, candle, candle, candle, living room, living room, living room',\n ),\n hit(\n 6668364,\n 853,\n 1280,\n 'lemon-candle-scented-candle-6668364',\n 'lemon candle, scented candle, blackberry candle, scented candle, scented candle, scented candle, scented candle, scented candle',\n ),\n hit(\n 4829516,\n 960,\n 1280,\n 'candlestick-classic-antique-candle-4829516',\n 'candlestick, classic, antique, candle, decorative, brown candle, brown candles, candlestick, candlestick, candlestick, candlestick, candlestick',\n ),\n hit(\n 2738532,\n 853,\n 1280,\n 'candle-tea-light-hand-church-light-2738532',\n 'candle, tea light, hand, church, light, worships, candlelight, faith, religion, christianity, flame, commemorate, meditation, prayer, contemplative, memorial candle, ecclesiastical, mood, shining, the atmosphere',\n ),\n hit(\n 8104677,\n 850,\n 1280,\n 'woman-manequin-shop-hat-hat-shop-8104677',\n 'woman, manequin, shop, hat, hat shop, store window, monochromatic',\n ),\n hit(\n 6145811,\n 850,\n 1280,\n 'bags-shop-gift-shop-establishment-6145811',\n 'bags, shop, gift shop, establishment, tourist shop, france, monaco, destination, vacation, travel',\n ),\n hit(\n 397965,\n 809,\n 1280,\n 'candle-candle-wax-candlelight-397965',\n 'candle, candle wax, candlelight, candlestick, flame, wax, illuminated, fire, burning, romantic, candle, candle, candle, candle, candle, candle wax, candlestick, wax',\n ),\n hit(\n 7581472,\n 853,\n 1280,\n 'candle-pine-christmas-tree-holidays-7581472',\n 'candle, pine, christmas tree, holidays, decoration, the background, pictures, image, burn, fire, heat, light, symbol, cozy, wax, night, black, hot, religion, meditation',\n ),\n hit(\n 7131604,\n 853,\n 1280,\n 'vintage-aesthetic-vintage-fashion-7131604',\n 'vintage aesthetic, vintage fashion, restaurant, interior, vintage interior, restaurant, restaurant, restaurant, restaurant, restaurant, interior',\n ),\n hit(\n 999370,\n 853,\n 1280,\n 'marrakesh-morocco-market-travel-999370',\n 'marrakesh, morocco, market, travel, colorful plates, morocco, morocco, morocco, morocco, morocco',\n ),\n hit(\n 5960786,\n 960,\n 1280,\n 'candle-holly-decorative-5960786',\n 'candle, holly, decorative, beeswax candle, wax candle, scented candle, scented candle, scented candle, scented candle, scented candle, scented candle',\n ),\n hit(\n 4126234,\n 853,\n 1280,\n 'girl-portrait-candle-smoke-4126234',\n 'girl, portrait, candle, smoke, brown smoke, brown candle, brown candles',\n ),\n hit(\n 4832387,\n 915,\n 1280,\n 'candlelight-candle-flame-dark-4832387',\n 'candlelight, candle, flame, dark, black candle, black candles',\n ),\n hit(\n 4725958,\n 1024,\n 1280,\n 'string-light-street-lights-violin-4725958',\n 'string, light, street, lights, violin, candle, christmas, woman, strings, brown candle, brown candles',\n ),\n hit(\n 6805045,\n 853,\n 1280,\n 'christmas-christmas-decoration-6805045',\n 'christmas, christmas decoration, christmas background, holiday, happychristmas, iphone wallpaper, christmas, christmas, christmas, christmas, christmas, christmas background, christmas background, christmas background, christmas background, christmas background',\n ),\n hit(\n 4368774,\n 853,\n 1280,\n 'street-building-historic-travel-4368774',\n 'street, building, historic, travel, trogir, architecture, mediterranean, croatia, old, culture, street, street, street, mediterranean, croatia, croatia, croatia, croatia, croatia',\n ),\n hit(\n 4068284,\n 862,\n 1280,\n 'girl-istanbul-shop-shopping-4068284',\n 'girl, istanbul, shop, shopping, turkish, turkish, turkish, turkish, turkish, turkish',\n ),\n hit(\n 9380550,\n 854,\n 1280,\n 'coffee-latte-art-candle-cozy-drink-9380550',\n 'coffee, mobile wallpaper 4k, latte art, samsung wallpaper, candle, cozy, drink, relaxation, ipad wallpaper, iphone wallpaper, aroma, beautiful wallpaper, coffee time, lock screen wallpaper, 4k, mobile wallpaper, wallpaper, phone wallpaper, background',\n ),\n hit(\n 4670035,\n 853,\n 1280,\n 'lantern-street-hoi-an-night-4670035',\n 'lantern, street, hoi an, night, old quarter, lantern, lantern, lantern, lantern, lantern, street, street, street, street, street, hoi an, hoi an, night, night, night',\n ),\n hit(\n 3358546,\n 960,\n 1280,\n 'burnt-flame-candle-dark-wax-burn-3358546',\n 'burnt, flame, candle, dark, wax, burn, heat, black candle, black candles',\n ),\n hit(\n 3992893,\n 894,\n 1280,\n 'flowers-table-setting-theme-wedding-3992893',\n 'flowers, table setting, theme, flower background, flower wallpaper, nature, wedding, beautiful flowers, bouquets, romantic, party, love',\n ),\n hit(\n 4523695,\n 960,\n 1280,\n 'candle-light-burnt-black-wight-4523695',\n 'candle, light, burnt, black, wight, black candle, black candles',\n ),\n hit(\n 5409069,\n 854,\n 1280,\n 'ice-cream-candy-food-dessert-sweet-5409069',\n 'ice cream, candy, food, dessert, sweet, ice cream, ice cream, ice cream, ice cream, ice cream, candy',\n ),\n hit(\n 8167776,\n 1024,\n 1280,\n 'shopping-shop-store-market-8167776',\n 'shopping, shop, store, market, supermarket, bakery, window',\n ),\n hit(\n 4562179,\n 853,\n 1280,\n 'candle-candlelight-shiny-mourning-4562179',\n 'candle, candlelight, shiny, mourning, romantic, mood, decoration, deco, flame, bright, brown candle, brown candles, candle, candle, candle, candle, candle, candlelight',\n ),\n hit(\n 2996627,\n 960,\n 1280,\n 'advent-christmas-time-advent-season-2996627',\n 'advent, christmas time, advent season, advent wreath, 3advent, advent greeting, greeting card, candles, candlelight, contemplative, decoration, flower arrangement, christmas jewelry, christmas, third candle, advent candle, advent, advent, advent, advent',\n ),\n hit(\n 6783665,\n 853,\n 1280,\n 'mulled-wine-christmas-drink-6783665',\n 'mulled wine, christmas drink, christmas decor, alcoholic beverage, mulled wine, mulled wine, mulled wine, mulled wine, mulled wine, christmas drink',\n ),\n hit(\n 5196603,\n 960,\n 1280,\n 'candle-shadow-light-mood-fire-5196603',\n 'candle, shadow, light, mood, fire, reflection, remember, brown candle, brown candles',\n ),\n hit(\n 4449673,\n 853,\n 1280,\n 'bokeh-night-dark-lights-candle-4449673',\n 'bokeh, night, dark, lights, candle, darkness, mood, black candle, black candles, black bokeh, bokeh, bokeh, bokeh, bokeh, bokeh',\n ),\n hit(\n 4220874,\n 853,\n 1280,\n 'candles-table-mood-candle-light-4220874',\n 'candles, table, mood, candle, light, candlelight, the atmosphere, lights, warm, candles, candles, candles, candles, candles, table, table, table, candle, light, candlelight',\n ),\n hit(\n 4518366,\n 960,\n 1280,\n 'taiwan-candle-temple-4518366',\n 'taiwan, candle, temple',\n ),\n hit(\n 4713126,\n 1024,\n 1280,\n 'berlin-germany-city-shopping-4713126',\n 'berlin, germany, city, shopping, blackandwhite, facade, black city, black shopping, gray shopping, black shop, gray shop',\n ),\n]\n"],"names":["hit","id","width","height","slug","tags","provider","String","pageUrl","photographer","split","downloadUrl","CON_PAN_DULCE_HERO","CANDLE_SHOP_TALL_HERO"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAID;;;;;;;;;;;;;;;;;CAiBC,GAED,MAAMA,MAAM,CACVC,IACAC,OACAC,QACAC,MACAC,OAEC,CAAA;QACCC,UAAU;QACVL,IAAIM,OAAON;QACXC;QACAC;QACAK,SAAS,CAAC,2BAA2B,EAAEJ,KAAK,CAAC,CAAC;QAC9CK,cAAc;QACdJ,MAAMA,KAAKK,KAAK,CAAC;QACjBC,aAAa,CAAC,yBAAyB,EAAEV,GAAG,SAAS,CAAC;IACxD,CAAA;AAEF,yGAAyG,GACzG,OAAO,MAAMW,qBAAmC;IAC9CZ,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,wCACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,OACA,MACA,KACA,sCACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,QACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,+CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,qCACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,+CACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,0BACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,MACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,uCACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,oCACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,+CACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,sCACA;IAEFA,IACE,SACA,MACA,KACA,+CACA;IAEFA,IACE,SACA,MACA,KACA,mCACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,+BACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,uCACA;CAEH,CAAA;AAED,uGAAuG,GACvG,OAAO,MAAMa,wBAAsC;IACjDb,IACE,SACA,KACA,MACA,oCACA;IAEFA,IACE,SACA,KACA,MACA,4CACA;IAEFA,IACE,SACA,KACA,MACA,0CACA;IAEFA,IACE,SACA,KACA,MACA,0CACA;IAEFA,IACE,SACA,KACA,MACA,0CACA;IAEFA,IACE,SACA,KACA,MACA,yCACA;IAEFA,IACE,SACA,KACA,MACA,oCACA;IAEFA,IACE,SACA,KACA,MACA,8CACA;IAEFA,IACE,SACA,KACA,MACA,4CACA;IAEFA,IACE,SACA,KACA,MACA,uCACA;IAEFA,IACE,SACA,KACA,MACA,8CACA;IAEFA,IACE,SACA,KACA,MACA,8CACA;IAEFA,IACE,SACA,KACA,MACA,4CACA;IAEFA,IACE,SACA,KACA,MACA,6CACA;IAEFA,IACE,QACA,KACA,MACA,wCACA;IAEFA,IACE,SACA,KACA,MACA,+CACA;IAEFA,IACE,SACA,KACA,MACA,6CACA;IAEFA,IACE,QACA,KACA,MACA,0CACA;IAEFA,IACE,SACA,KACA,MACA,mCACA;IAEFA,IACE,SACA,KACA,MACA,sCACA;IAEFA,IACE,SACA,KACA,MACA,yCACA;IAEFA,IACE,SACA,MACA,MACA,6CACA;IAEFA,IACE,SACA,KACA,MACA,0CACA;IAEFA,IACE,SACA,KACA,MACA,2CACA;IAEFA,IACE,SACA,KACA,MACA,uCACA;IAEFA,IACE,SACA,KACA,MACA,8CACA;IAEFA,IACE,SACA,KACA,MACA,uCACA;IAEFA,IACE,SACA,KACA,MACA,4CACA;IAEFA,IACE,SACA,KACA,MACA,+CACA;IAEFA,IACE,SACA,KACA,MACA,0CACA;IAEFA,IACE,SACA,KACA,MACA,8CACA;IAEFA,IACE,SACA,MACA,MACA,sCACA;IAEFA,IACE,SACA,KACA,MACA,6CACA;IAEFA,IACE,SACA,KACA,MACA,+CACA;IAEFA,IACE,SACA,KACA,MACA,uCACA;IAEFA,IACE,SACA,KACA,MACA,yCACA;IAEFA,IACE,SACA,KACA,MACA,0CACA;IAEFA,IACE,SACA,KACA,MACA,2CACA;IAEFA,IACE,SACA,KACA,MACA,gCACA;IAEFA,IACE,SACA,MACA,MACA,wCACA;CAEH,CAAA"}
|
|
@@ -18,7 +18,7 @@ import { type AiIconLibraryEntry } from '../runtime/ai-icon-library';
|
|
|
18
18
|
import { type AiLayoutBand, type AiLayoutBlock, type AiLayoutSection, type AiLayoutSettlement } from './ai-layout-language';
|
|
19
19
|
import { type AiLayoutDesign, type AiLayoutDesignChoices, type AiLayoutGroupVariant } from './ai-layout-design';
|
|
20
20
|
import { type AiLayoutDestination, type AiLayoutLinkScope, type AiLayoutTargets } from './ai-layout-links';
|
|
21
|
-
import { AiLayoutTreeBuilder, type AiLayoutRawTree } from './ai-layout-tree';
|
|
21
|
+
import { aiLayoutSpans, AiLayoutTreeBuilder, type AiLayoutRawTree } from './ai-layout-tree';
|
|
22
22
|
/**
|
|
23
23
|
* The layout language compiler (AGL-3660): a page designed in the language
|
|
24
24
|
* (`ai-layout-language.ts`) becomes the element tree the page stores — built
|
|
@@ -84,6 +84,12 @@ export interface AiLayoutCompileOptions {
|
|
|
84
84
|
* uneven grid of pictures. Absent, the compiler's first design.
|
|
85
85
|
*/
|
|
86
86
|
design?: AiLayoutDesign;
|
|
87
|
+
/**
|
|
88
|
+
* The site's language (AGL-3760), a code such as `es`: the words the
|
|
89
|
+
* compiler writes itself — "See all", a post's link — are in it where it is
|
|
90
|
+
* one `ai-layout-labels.ts` lists. Absent, English.
|
|
91
|
+
*/
|
|
92
|
+
language?: string;
|
|
87
93
|
}
|
|
88
94
|
export interface AiLayoutCompiledPage {
|
|
89
95
|
tree: AiLayoutRawTree;
|
|
@@ -171,12 +177,13 @@ export interface SectionScope {
|
|
|
171
177
|
export declare function aiCompileLayoutPage(sections: readonly AiLayoutSection[], plan: AiLayoutPagePlan, targets: AiLayoutTargets, options: AiLayoutCompileOptions): AiLayoutCompiledPage;
|
|
172
178
|
/** A band's own colors, as palette roles: the dark band pins the scheme instead. */
|
|
173
179
|
export declare function bandSx(band: AiLayoutBand): Record<string, unknown> | null;
|
|
174
|
-
|
|
175
|
-
export declare function aiLayoutSpans(weights: readonly number[]): number[];
|
|
180
|
+
export { aiLayoutSpans };
|
|
176
181
|
export declare function compileRow(scope: SectionScope, columns: Array<{
|
|
177
182
|
column: AiLayoutBlock[];
|
|
178
183
|
weight: number;
|
|
179
|
-
}
|
|
184
|
+
}>,
|
|
185
|
+
/** How the columns sit against each other: centered on a page, top-aligned in a footer (AGL-3735). */
|
|
186
|
+
alignItems?: 'center' | 'flex-start'): string;
|
|
180
187
|
export type Room = 'full' | 'half' | 'narrow';
|
|
181
188
|
/** A column of blocks, top to bottom, with buttons side by side; `null` when nothing in it compiles. */
|
|
182
189
|
export declare function compileFlow(scope: SectionScope, blocks: readonly AiLayoutBlock[], room: Room): string | null;
|
|
@@ -208,11 +215,11 @@ export declare const AI_LAYOUT_POST_CARD_TOKENS: readonly ["{{entry.title}}", "{
|
|
|
208
215
|
/** The tokens a post's card puts in a link or a picture, which the page's store admits whole. */
|
|
209
216
|
export declare const AI_LAYOUT_POST_ADDRESS_TOKENS: readonly string[];
|
|
210
217
|
/** What a store's reviews are headed with where neither the design nor the plan says. */
|
|
211
|
-
export declare const AI_LAYOUT_REVIEWS_HEADING
|
|
218
|
+
export declare const AI_LAYOUT_REVIEWS_HEADING: "What our customers say";
|
|
212
219
|
/** What a store's sign-up is headed with where neither the design nor the plan says. */
|
|
213
|
-
export declare const AI_LAYOUT_SIGNUP_HEADING
|
|
220
|
+
export declare const AI_LAYOUT_SIGNUP_HEADING: "Join our newsletter";
|
|
214
221
|
/** The button a storefront's hero opens its shop with. */
|
|
215
|
-
export declare const AI_LAYOUT_SHOP_ALL
|
|
222
|
+
export declare const AI_LAYOUT_SHOP_ALL: "Shop all";
|
|
216
223
|
/** What a store's Product grid says while the store lists nothing yet (AGL-3676). */
|
|
217
224
|
export declare const AI_LAYOUT_STORE_EMPTY: {
|
|
218
225
|
readonly title: "New pieces are on the way";
|
|
@@ -220,6 +227,8 @@ export declare const AI_LAYOUT_STORE_EMPTY: {
|
|
|
220
227
|
/** Said where the site has no page to get in touch on. */
|
|
221
228
|
readonly textAlone: "Our first pieces are being finished now. Check back soon.";
|
|
222
229
|
};
|
|
230
|
+
/** The words of the link under each record's card to its own page (AGL-3727). */
|
|
231
|
+
export declare const AI_LAYOUT_RECORD_LINK_LABEL: "View details";
|
|
223
232
|
/** The fields a record's card shows: its name, a kicker line and its words, each by id. */
|
|
224
233
|
export declare function aiLayoutRecordCardFields(fields: readonly {
|
|
225
234
|
id: string;
|
|
@@ -23,10 +23,11 @@ import { aiPageScrollInteraction } from "../runtime/ai-page-links.js";
|
|
|
23
23
|
import { aiLayoutFitText, aiLayoutQuoteGap, aiLayoutWords } from "./ai-layout-copy.js";
|
|
24
24
|
import { AI_LAYOUT_GROUP_KINDS, AI_LAYOUT_MAX_ITEMS } from "./ai-layout-language.js";
|
|
25
25
|
import { aiLayoutDesignChoices, aiLayoutFamily, aiLayoutGroupVariant } from "./ai-layout-design.js";
|
|
26
|
-
import { AI_LAYOUT_FEATURED_RECORDS, AI_LAYOUT_LISTING_ELEMENTS, aiLayoutListingAt } from "./ai-layout-listings.js";
|
|
26
|
+
import { AI_LAYOUT_FEATURED_RECORDS, AI_LAYOUT_LISTING_ELEMENTS, aiLayoutListingAt, aiLayoutRecordHref } from "./ai-layout-listings.js";
|
|
27
27
|
import { aiStorefrontItemIcons } from "./ai-layout-storefront.js";
|
|
28
|
+
import { AI_LAYOUT_LABELS_EN, aiLayoutLabel } from "./ai-layout-labels.js";
|
|
28
29
|
import { aiLayoutRenamedLabel, aiLayoutResolveLink } from "./ai-layout-links.js";
|
|
29
|
-
import { AI_LAYOUT_FRAMES, AiLayoutTreeBuilder } from "./ai-layout-tree.js";
|
|
30
|
+
import { aiLayoutSpans, AI_LAYOUT_FRAMES, AiLayoutTreeBuilder } from "./ai-layout-tree.js";
|
|
30
31
|
/**
|
|
31
32
|
* What a section is called to a screen reader: its plan name, with any note
|
|
32
33
|
* the plan left in brackets taken out. A live blog plan (2026-10-09) named a
|
|
@@ -579,24 +580,9 @@ function sameShape(columns) {
|
|
|
579
580
|
};
|
|
580
581
|
}
|
|
581
582
|
// ── A row of columns ──────────────────────────────────────────────────────
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
let over = spans.reduce((sum, span)=>sum + span, 0) - 12;
|
|
586
|
-
while(over !== 0){
|
|
587
|
-
// Take from (or give to) the widest column that can spare it.
|
|
588
|
-
const order = spans.map((span, position)=>({
|
|
589
|
-
span,
|
|
590
|
-
position
|
|
591
|
-
})).sort((a, b)=>over > 0 ? b.span - a.span : a.span - b.span);
|
|
592
|
-
const pick = order.find((entry)=>over > 0 ? entry.span > 3 : true);
|
|
593
|
-
if (!pick) break;
|
|
594
|
-
spans[pick.position] += over > 0 ? -1 : 1;
|
|
595
|
-
over += over > 0 ? -1 : 1;
|
|
596
|
-
}
|
|
597
|
-
return spans;
|
|
598
|
-
}
|
|
599
|
-
export function compileRow(scope, columns) {
|
|
583
|
+
// Spans out of twelve live with the tree, so a frame's repair reads them without the compiler (AGL-3735).
|
|
584
|
+
export { aiLayoutSpans };
|
|
585
|
+
export function compileRow(scope, columns, /** How the columns sit against each other: centered on a page, top-aligned in a footer (AGL-3735). */ alignItems = 'center') {
|
|
600
586
|
const tree = scope.page.tree;
|
|
601
587
|
const spans = aiLayoutSpans(columns.map((entry)=>entry.weight));
|
|
602
588
|
const items = columns.map((entry, position)=>{
|
|
@@ -613,7 +599,7 @@ export function compileRow(scope, columns) {
|
|
|
613
599
|
container: true,
|
|
614
600
|
spacing: columns.length >= 3 ? '4' : '6'
|
|
615
601
|
}, {
|
|
616
|
-
alignItems
|
|
602
|
+
alignItems
|
|
617
603
|
}, items, 'row');
|
|
618
604
|
}
|
|
619
605
|
/** A column of blocks, top to bottom, with buttons side by side; `null` when nothing in it compiles. */ export function compileFlow(scope, blocks, room) {
|
|
@@ -2032,15 +2018,16 @@ function instances(scope, placed, items, perRow) {
|
|
|
2032
2018
|
'{{entry.coverImage}}'
|
|
2033
2019
|
];
|
|
2034
2020
|
/** The button under a featured band that opens the whole list, where the site has one and the design gave none. */ function listingAllButton(page, listing) {
|
|
2021
|
+
const language = page.options.language;
|
|
2035
2022
|
if (listing.kind === 'posts') return listing.href ? {
|
|
2036
2023
|
kind: 'button',
|
|
2037
|
-
text: '
|
|
2024
|
+
text: aiLayoutLabel('allPosts', language),
|
|
2038
2025
|
to: listing.href,
|
|
2039
2026
|
style: 'secondary'
|
|
2040
2027
|
} : null;
|
|
2041
2028
|
const index = listing.placements.find((placement)=>placement.role === 'index' && placement.screenId !== page.targets.pageId);
|
|
2042
2029
|
if (!index) return null;
|
|
2043
|
-
const text = listing.kind === 'tracks' ? '
|
|
2030
|
+
const text = aiLayoutLabel(listing.kind === 'tracks' ? 'allMusic' : listing.kind === 'events' ? 'allEvents' : listing.kind === 'records' ? 'seeAll' : 'shopAll', language);
|
|
2044
2031
|
return {
|
|
2045
2032
|
kind: 'button',
|
|
2046
2033
|
text,
|
|
@@ -2153,7 +2140,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2153
2140
|
container
|
|
2154
2141
|
], 'section', (_ref = (_page_options_sectionIds = page.options.sectionIds) == null ? void 0 : _page_options_sectionIds[index]) != null ? _ref : sectionIdOf(index));
|
|
2155
2142
|
}
|
|
2156
|
-
/** What a store's reviews are headed with where neither the design nor the plan says. */ export const AI_LAYOUT_REVIEWS_HEADING =
|
|
2143
|
+
/** What a store's reviews are headed with where neither the design nor the plan says. */ export const AI_LAYOUT_REVIEWS_HEADING = AI_LAYOUT_LABELS_EN.reviewsHeading;
|
|
2157
2144
|
/**
|
|
2158
2145
|
* A store's own customer reviews (AGL-3676): the commerce plugin's Product
|
|
2159
2146
|
* reviews in its store-wide scope, carrying the section's heading itself.
|
|
@@ -2166,7 +2153,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2166
2153
|
const { page, index, at } = scope;
|
|
2167
2154
|
const tree = page.tree;
|
|
2168
2155
|
const given = blocks.find((block)=>speaksHeading(scope, block));
|
|
2169
|
-
const heading = aiLayoutWords(given == null ? void 0 : given.text, 'heading', page.targets.facts) || aiLayoutFitText((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name, 'heading') ||
|
|
2156
|
+
const heading = aiLayoutWords(given == null ? void 0 : given.text, 'heading', page.targets.facts) || aiLayoutFitText((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name, 'heading') || aiLayoutLabel('reviewsHeading', page.options.language);
|
|
2170
2157
|
page.settled.push({
|
|
2171
2158
|
at,
|
|
2172
2159
|
what: "the store's own reviews placed: shown once shoppers leave them, never written for them"
|
|
@@ -2193,7 +2180,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2193
2180
|
container
|
|
2194
2181
|
], bandSx(scope.band), scope.band === 'dark');
|
|
2195
2182
|
}
|
|
2196
|
-
/** What a store's sign-up is headed with where neither the design nor the plan says. */ export const AI_LAYOUT_SIGNUP_HEADING =
|
|
2183
|
+
/** What a store's sign-up is headed with where neither the design nor the plan says. */ export const AI_LAYOUT_SIGNUP_HEADING = AI_LAYOUT_LABELS_EN.signupHeading;
|
|
2197
2184
|
/**
|
|
2198
2185
|
* A store's newsletter sign-up (AGL-3676): the design's heading and words
|
|
2199
2186
|
* beside the commerce plugin's Newsletter signup field, or over it on a
|
|
@@ -2211,7 +2198,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2211
2198
|
var _page_plan_sections_index;
|
|
2212
2199
|
flow.unshift({
|
|
2213
2200
|
kind: 'heading',
|
|
2214
|
-
text: ((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name) ||
|
|
2201
|
+
text: ((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name) || aiLayoutLabel('signupHeading', page.options.language)
|
|
2215
2202
|
});
|
|
2216
2203
|
}
|
|
2217
2204
|
page.settled.push({
|
|
@@ -2219,7 +2206,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2219
2206
|
what: "the store's newsletter sign-up placed"
|
|
2220
2207
|
});
|
|
2221
2208
|
const field = tree.add(AI_LAYOUT_LISTING_ELEMENTS.signup, {
|
|
2222
|
-
buttonLabel: '
|
|
2209
|
+
buttonLabel: aiLayoutLabel('subscribe', page.options.language)
|
|
2223
2210
|
}, null, null, 'signup');
|
|
2224
2211
|
noted(scope, [
|
|
2225
2212
|
field,
|
|
@@ -2353,9 +2340,10 @@ function listingSection(scope, blocks, placed) {
|
|
|
2353
2340
|
style: 'secondary'
|
|
2354
2341
|
});
|
|
2355
2342
|
}
|
|
2343
|
+
const text = aiLayoutLabel('shopAll', scope.page.options.language);
|
|
2356
2344
|
const shopAll = {
|
|
2357
2345
|
kind: 'button',
|
|
2358
|
-
text
|
|
2346
|
+
text,
|
|
2359
2347
|
to: `page:${shop}`,
|
|
2360
2348
|
style: 'primary'
|
|
2361
2349
|
};
|
|
@@ -2363,10 +2351,10 @@ function listingSection(scope, blocks, placed) {
|
|
|
2363
2351
|
else flow.splice(firstButton, 0, shopAll);
|
|
2364
2352
|
scope.page.settled.push({
|
|
2365
2353
|
at: scope.at,
|
|
2366
|
-
what: `the hero opens the shop: "${
|
|
2354
|
+
what: `the hero opens the shop: "${text}" leads its buttons`
|
|
2367
2355
|
});
|
|
2368
2356
|
}
|
|
2369
|
-
/** The button a storefront's hero opens its shop with. */ export const AI_LAYOUT_SHOP_ALL =
|
|
2357
|
+
/** The button a storefront's hero opens its shop with. */ export const AI_LAYOUT_SHOP_ALL = AI_LAYOUT_LABELS_EN.shopAll;
|
|
2370
2358
|
/**
|
|
2371
2359
|
* A storefront's reasons to buy as open columns, each led by an icon over its
|
|
2372
2360
|
* title and words (AGL-3676): the icon the design named for it, else one its
|
|
@@ -2438,6 +2426,22 @@ function listingSection(scope, blocks, placed) {
|
|
|
2438
2426
|
]);
|
|
2439
2427
|
return id;
|
|
2440
2428
|
}
|
|
2429
|
+
if (listing.kind === 'events') {
|
|
2430
|
+
// The site's published events (AGL-3755), each with its date, place and
|
|
2431
|
+
// cover: the section's heading is the model's, so the list adds none.
|
|
2432
|
+
id = tree.add(element, featured ? {
|
|
2433
|
+
maxItems: String(shown)
|
|
2434
|
+
} : null, null, null, 'events');
|
|
2435
|
+
page.settled.push({
|
|
2436
|
+
at: scope.at,
|
|
2437
|
+
what: 'the site’s events listed by the Event List'
|
|
2438
|
+
});
|
|
2439
|
+
noted(scope, [
|
|
2440
|
+
id,
|
|
2441
|
+
id
|
|
2442
|
+
]);
|
|
2443
|
+
return id;
|
|
2444
|
+
}
|
|
2441
2445
|
if (listing.kind === 'products') {
|
|
2442
2446
|
id = tree.add(element, _extends({
|
|
2443
2447
|
source: 'all',
|
|
@@ -2456,10 +2460,10 @@ function listingSection(scope, blocks, placed) {
|
|
|
2456
2460
|
quickAdd: true,
|
|
2457
2461
|
// A store that opens before its first products are in says so, with a
|
|
2458
2462
|
// way to hear when they land (AGL-3676): never placeholder products.
|
|
2459
|
-
emptyTitle:
|
|
2460
|
-
emptyText: listing.emptyAction ?
|
|
2463
|
+
emptyTitle: aiLayoutLabel('storeEmptyTitle', page.options.language),
|
|
2464
|
+
emptyText: aiLayoutLabel(listing.emptyAction ? 'storeEmptyText' : 'storeEmptyTextAlone', page.options.language)
|
|
2461
2465
|
}, listing.emptyAction ? {
|
|
2462
|
-
emptyActionLabel: listing.emptyAction.label,
|
|
2466
|
+
emptyActionLabel: listing.emptyAction.label === AI_LAYOUT_LABELS_EN.getInTouch ? aiLayoutLabel('getInTouch', page.options.language) : listing.emptyAction.label,
|
|
2463
2467
|
emptyActionHref: listing.emptyAction.href
|
|
2464
2468
|
} : {}), null, null, 'products');
|
|
2465
2469
|
} else if (listing.kind === 'records') {
|
|
@@ -2475,9 +2479,9 @@ function listingSection(scope, blocks, placed) {
|
|
|
2475
2479
|
return id;
|
|
2476
2480
|
}
|
|
2477
2481
|
/** What a store's Product grid says while the store lists nothing yet (AGL-3676). */ export const AI_LAYOUT_STORE_EMPTY = {
|
|
2478
|
-
title:
|
|
2479
|
-
text:
|
|
2480
|
-
/** Said where the site has no page to get in touch on. */ textAlone:
|
|
2482
|
+
title: AI_LAYOUT_LABELS_EN.storeEmptyTitle,
|
|
2483
|
+
text: AI_LAYOUT_LABELS_EN.storeEmptyText,
|
|
2484
|
+
/** Said where the site has no page to get in touch on. */ textAlone: AI_LAYOUT_LABELS_EN.storeEmptyTextAlone
|
|
2481
2485
|
};
|
|
2482
2486
|
/** The most posts a page of the site lists where it is the writing's own page. */ const COLLECTION_INDEX_POSTS = 9;
|
|
2483
2487
|
/** The blog's posts as the site's design lists them: a grid of covers, or a ruled list with the dates. */ function postsElement(scope, listing, limit) {
|
|
@@ -2509,7 +2513,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2509
2513
|
variant: 'body2'
|
|
2510
2514
|
}, muted(scope), null, 'postExcerpt');
|
|
2511
2515
|
const more = tree.add('muiScreenLink', {
|
|
2512
|
-
children: '
|
|
2516
|
+
children: aiLayoutLabel('readPost', page.options.language),
|
|
2513
2517
|
href: '{{entry.url}}',
|
|
2514
2518
|
renderAs: 'link',
|
|
2515
2519
|
color: 'inherit'
|
|
@@ -2581,6 +2585,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2581
2585
|
], 'posts');
|
|
2582
2586
|
}
|
|
2583
2587
|
// ── A dataset's records (AGL-3616) ───────────────────────────────────────
|
|
2588
|
+
/** The words of the link under each record's card to its own page (AGL-3727). */ export const AI_LAYOUT_RECORD_LINK_LABEL = AI_LAYOUT_LABELS_EN.viewDetails;
|
|
2584
2589
|
/** A field whose name says it is a record's kicker: its category, role, time or place. */ const RECORD_KICKER = /\b(category|categories|type|kind|role|title|position|section|course|date|dates|time|times|when|day|days|location|place|where|venue|city|duration|level|tag|tags)\b/i;
|
|
2585
2590
|
/** A field whose name says it is a record's words: its description, bio or answer. */ const RECORD_BODY = /\b(description|summary|details?|about|bio|biography|answer|text|notes?|body|blurb|overview|excerpt|ingredients|includes)\b/i;
|
|
2586
2591
|
/** A dataset of questions and answers, listed as a ruled list rather than cards. */ const RECORD_QUESTIONS = /\b(faqs?|questions?|q ?& ?a)\b/i;
|
|
@@ -2639,6 +2644,9 @@ function listingSection(scope, blocks, placed) {
|
|
|
2639
2644
|
}, textAlign), muted(scope), null, 'recordBody') : null;
|
|
2640
2645
|
const photoField = !questions && listing.imageField ? listing.imageField : null;
|
|
2641
2646
|
const opens = Boolean(photoField) && aiOpensGalleriesInLightbox(page);
|
|
2647
|
+
// Each card opens its record's own page where the dataset has one (AGL-3727):
|
|
2648
|
+
// `/{base}/{{item.<address>}}`, filled per record as the card repeats.
|
|
2649
|
+
const recordHref = aiLayoutRecordHref(listing);
|
|
2642
2650
|
const portrait = ((_page_design = page.design) == null ? void 0 : _page_design.input.kind) === 'photography' || RECORD_PEOPLE.test(listing.name);
|
|
2643
2651
|
const picture = photoField ? tree.add('image', _extends({
|
|
2644
2652
|
src: `{{item.${photoField}}}`,
|
|
@@ -2648,13 +2656,23 @@ function listingSection(scope, blocks, placed) {
|
|
|
2648
2656
|
loading: 'lazy'
|
|
2649
2657
|
}, opens ? _extends({}, lightboxProps(scope), fields.title ? {
|
|
2650
2658
|
lightboxCaption: `{{item.${fields.title}}}`
|
|
2651
|
-
} : {}) : {}
|
|
2659
|
+
} : {}) : {}, recordHref && !opens ? {
|
|
2660
|
+
href: recordHref
|
|
2661
|
+
} : {}), {
|
|
2652
2662
|
aspectRatio: portrait ? '4 / 5' : '4 / 3',
|
|
2653
2663
|
borderRadius: 2
|
|
2654
2664
|
}, null, 'recordImage') : null;
|
|
2665
|
+
const more = recordHref ? tree.add('muiScreenLink', {
|
|
2666
|
+
children: aiLayoutLabel('viewDetails', page.options.language),
|
|
2667
|
+
href: recordHref,
|
|
2668
|
+
renderAs: 'link',
|
|
2669
|
+
color: 'inherit'
|
|
2670
|
+
}, {
|
|
2671
|
+
alignSelf: scope.centered && !questions ? 'center' : 'flex-start'
|
|
2672
|
+
}, null, 'recordLink') : null;
|
|
2655
2673
|
page.settled.push({
|
|
2656
2674
|
at: scope.at,
|
|
2657
|
-
what: `${listing.name} listed from its dataset${questions ? ' as a ruled list' : picture ? ' as picture cards' : ' as cards'}`
|
|
2675
|
+
what: `${listing.name} listed from its dataset${questions ? ' as a ruled list' : picture ? ' as picture cards' : ' as cards'}${recordHref ? `, each linking its page under /${listing.recordBase}` : ''}`
|
|
2658
2676
|
});
|
|
2659
2677
|
const card = questions ? tree.add('muiStack', {
|
|
2660
2678
|
spacing: '1'
|
|
@@ -2663,7 +2681,8 @@ function listingSection(scope, blocks, placed) {
|
|
|
2663
2681
|
pt: 3
|
|
2664
2682
|
}, [
|
|
2665
2683
|
title,
|
|
2666
|
-
body
|
|
2684
|
+
body,
|
|
2685
|
+
more
|
|
2667
2686
|
], 'record') : tree.add('muiStack', _extends({
|
|
2668
2687
|
spacing: picture ? '1.5' : '1'
|
|
2669
2688
|
}, scope.centered ? {
|
|
@@ -2672,7 +2691,8 @@ function listingSection(scope, blocks, placed) {
|
|
|
2672
2691
|
picture,
|
|
2673
2692
|
kicker,
|
|
2674
2693
|
title,
|
|
2675
|
-
body
|
|
2694
|
+
body,
|
|
2695
|
+
more
|
|
2676
2696
|
], 'record');
|
|
2677
2697
|
return tree.add(AI_LAYOUT_LISTING_ELEMENTS.records, _extends({
|
|
2678
2698
|
repeatDataset: listing.datasetId
|