@aglyn/plugins-ai 1.0.0-beta.256 → 1.0.0-beta.258
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/assist-panel.component.js +21 -8
- package/src/lib/components/assist-panel.component.js.map +1 -1
- package/src/lib/insights/ai-figure-readers.js +15 -8
- package/src/lib/insights/ai-figure-readers.js.map +1 -1
- package/src/lib/jobs/ai-job-build-step.d.ts +9 -0
- package/src/lib/jobs/ai-job-build-step.js +19 -3
- package/src/lib/jobs/ai-job-build-step.js.map +1 -1
- package/src/lib/jobs/ai-job-form-step.js +3 -3
- package/src/lib/jobs/ai-job-form-step.js.map +1 -1
- package/src/lib/jobs/ai-job-insight-step.js +1 -1
- package/src/lib/jobs/ai-job-insight-step.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +19 -0
- package/src/lib/jobs/ai-job-page-language.js +24 -4
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-sections.js +12 -1
- package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.d.ts +14 -0
- package/src/lib/jobs/ai-job-page-step.js +69 -20
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-seo-step.js +3 -2
- package/src/lib/jobs/ai-job-seo-step.js.map +1 -1
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +10 -5
- package/src/lib/jobs/ai-layout-stock-photos.js +89 -7
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
- package/src/lib/jobs/fixtures/ai-stock-photo-copper-kettle-recordings.d.ts +21 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-copper-kettle-recordings.js +126 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-copper-kettle-recordings.js.map +1 -0
- package/src/lib/layout-language/ai-layout-compiler.js +52 -52
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-copy.d.ts +9 -5
- package/src/lib/layout-language/ai-layout-copy.js +22 -14
- package/src/lib/layout-language/ai-layout-copy.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame.js +4 -4
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-pictures.d.ts +44 -15
- package/src/lib/layout-language/ai-layout-pictures.js +29 -8
- package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
- package/src/lib/model/ai-build-job.js +14 -0
- package/src/lib/model/ai-build-job.js.map +1 -1
- package/src/lib/model/ai-host-publish-context.d.ts +6 -0
- package/src/lib/model/ai-host-publish-context.js +15 -2
- package/src/lib/model/ai-host-publish-context.js.map +1 -1
- package/src/lib/model/assist-follow-up.d.ts +35 -0
- package/src/lib/model/assist-follow-up.js +44 -4
- package/src/lib/model/assist-follow-up.js.map +1 -1
- package/src/lib/providers/anthropic.js +17 -4
- package/src/lib/providers/anthropic.js.map +1 -1
- package/src/lib/providers/cache-write-hour.d.ts +37 -0
- package/src/lib/providers/cache-write-hour.js +46 -0
- package/src/lib/providers/cache-write-hour.js.map +1 -0
- package/src/lib/providers/contract.d.ts +16 -3
- package/src/lib/providers/contract.js.map +1 -1
- package/src/lib/providers/routing.d.ts +13 -0
- package/src/lib/providers/routing.js +27 -11
- package/src/lib/providers/routing.js.map +1 -1
- package/src/lib/runtime/ai-dev-env.d.ts +13 -3
- package/src/lib/runtime/ai-dev-env.js +17 -3
- package/src/lib/runtime/ai-dev-env.js.map +1 -1
- package/src/lib/runtime/ai-dev-replay.js +4 -2
- package/src/lib/runtime/ai-dev-replay.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +41 -1
- package/src/lib/runtime/ai-doctrine-validators.js +263 -2
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.js +7 -1
- package/src/lib/runtime/ai-doctrine.js.map +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-eval.d.ts +1 -1
- package/src/lib/runtime/ai-eval.js +18 -1
- package/src/lib/runtime/ai-eval.js.map +1 -1
- package/src/lib/runtime/ai-palette.generated.js +162 -2
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/runtime/ai-placeholder-tokens.d.ts +70 -0
- package/src/lib/runtime/ai-placeholder-tokens.js +169 -0
- package/src/lib/runtime/ai-placeholder-tokens.js.map +1 -0
- package/src/lib/runtime/ai-repeated-items.js +5 -2
- package/src/lib/runtime/ai-repeated-items.js.map +1 -1
- package/src/lib/runtime/ai-runtime.js +2 -3
- package/src/lib/runtime/ai-runtime.js.map +1 -1
- package/src/lib/server/assist-chat.js +8 -3
- package/src/lib/server/assist-chat.js.map +1 -1
- package/src/lib/server/assist-view-context.d.ts +5 -1
- package/src/lib/server/assist-view-context.js +8 -3
- package/src/lib/server/assist-view-context.js.map +1 -1
- package/src/lib/usage/assist-usage.d.ts +2 -0
- package/src/lib/usage/assist-usage.js +8 -3
- package/src/lib/usage/assist-usage.js.map +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import type { StockPhoto } from '@aglyn/aglyn/plugin-manager/stock-photo-provider';
|
|
18
|
+
/** `family-run austin caterer` (horizontal, min_width 1600), answered 2026-10-15T18:47:45.010Z. */
|
|
19
|
+
export declare const FAMILY_RUN_AUSTIN_CATERER: StockPhoto[];
|
|
20
|
+
/** `caterer` (horizontal, min_width 1600), answered 2026-10-15T18:47:45.261Z. */
|
|
21
|
+
export declare const CATERER: StockPhoto[];
|
|
@@ -0,0 +1,126 @@
|
|
|
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 THE COPPER KETTLE CATERING HERO (AGL-3831):
|
|
18
|
+
* what production's `stockPhotoSearches` cache held for the two searches the
|
|
19
|
+
* beta.257 restaurant site "Copper Kettle Catering" ("Family-run Austin
|
|
20
|
+
* caterer: Texas barbecue and Tex-Mex for weddings, office lunches and
|
|
21
|
+
* parties", job mRxC_v18aH, 2026-10-15) sent for its home hero, read back
|
|
22
|
+
* from the cache, never searched again. Ids, sizes, page slugs and tags are
|
|
23
|
+
* Pixabay's own, in its order; the contributor is left out. Each search was
|
|
24
|
+
* matched to its cache entry by the entry's key.
|
|
25
|
+
*
|
|
26
|
+
* The hero was held to the craft "caterer", and a photo of catering is
|
|
27
|
+
* tagged "catering", "buffet", "bbq": only three hits said "caterer", none
|
|
28
|
+
* first, so nothing was accepted and the starter pottery photo filled the
|
|
29
|
+
* hero under the model's words "A spread of smoked brisket, fajitas and sides
|
|
30
|
+
* on a long catering table".
|
|
31
|
+
*/ const hit = (id, width, height, slug, tags)=>({
|
|
32
|
+
provider: 'pixabay',
|
|
33
|
+
id: String(id),
|
|
34
|
+
width,
|
|
35
|
+
height,
|
|
36
|
+
pageUrl: `https://pixabay.com/photos/${slug}/`,
|
|
37
|
+
photographer: 'A Pixabay contributor',
|
|
38
|
+
tags: tags.split(', '),
|
|
39
|
+
downloadUrl: `https://pixabay.com/get/g${id}_1280.jpg`
|
|
40
|
+
});
|
|
41
|
+
/** `family-run austin caterer` (horizontal, min_width 1600), answered 2026-10-15T18:47:45.010Z. */ export const FAMILY_RUN_AUSTIN_CATERER = [
|
|
42
|
+
hit(3860567, 1280, 853, 'austin-healey-car-automobile-3860567', 'austin healey, car, automobile, vehicle, austin, retro, healey, vintage, chromium, car wallpapers, speed'),
|
|
43
|
+
hit(2999867, 1280, 853, 'traffic-automobile-antique-car-2999867', 'traffic, automobile, car wallpapers, antique car, austin, austin healey, convertible, sports car, headlights, grille, parrot, composing, blue, car, driving a car'),
|
|
44
|
+
hit(5276620, 1280, 853, 'old-buda-texas-city-park-entrance-5276620', 'old buda texas city park entrance, vintage, historical, park, buda, buda texas, atx, texas, central texas, austin, austin texas, city park, texas, central texas, austin texas, austin texas, austin texas, austin texas, austin texas'),
|
|
45
|
+
hit(4877118, 1280, 853, 'cypress-tree-roots-nature-texas-4877118', 'cypress, tree, roots, nature, texas, austin, atx, river, forest, natural, landscape, waterway, cypress, cypress, cypress, cypress, texas, texas, austin, austin'),
|
|
46
|
+
hit(4066441, 1280, 901, 'texas-state-capitol-austin-america-4066441', 'texas state capitol, austin, america, architecture, government, dome, landscape, mood, hdr, landmark, historic, austin, austin, austin, austin, austin'),
|
|
47
|
+
hit(3345327, 1280, 914, 'water-nature-river-landscape-lake-3345327', 'water, nature, river, landscape, lake, bats, austin, reflection, sunset, tranquil, united states, austin, texas'),
|
|
48
|
+
hit(5029318, 1280, 853, 'chinese-rose-rose-flower-rose-5029318', 'chinese rose, rose flower, rose, gold celebration, austin, chinese rose, chinese rose, chinese rose, chinese rose, chinese rose, rose, austin'),
|
|
49
|
+
hit(3967304, 1280, 852, 'macaroon-caterer-plateau-food-3967304', 'macaroon, caterer, plateau, food, cocktail'),
|
|
50
|
+
hit(5357325, 1280, 854, 'river-austin-viewing-bats-texas-5357325', 'river, austin, nature, viewing, bats, texas, water, landscape, bridge'),
|
|
51
|
+
hit(4549223, 1280, 853, 'transport-traffic-automobile-4549223', 'transport, traffic, automobile, sports car, austin, blue, cabriolet, antique car, car wallpapers, car'),
|
|
52
|
+
hit(3409985, 1280, 853, 'texas-art-wall-street-art-urban-3409985', 'texas, art, wall, street art, urban, austin, blue art, blue wall, blue street, austin, austin, austin, austin, austin'),
|
|
53
|
+
hit(4699178, 1280, 960, 'austin-healey-car-classic-sport-4699178', 'austin healey, car, classic, sport, car wallpapers, coupe, austin healey 3000, motot, calender, hood, detail, design, red'),
|
|
54
|
+
hit(7933399, 1280, 670, 'austin-texas-river-buildings-city-7933399', 'austin, texas, river, buildings, city, urban, cityscape, travel, architecture, usa, nature, spring, austin, austin, austin, austin, austin'),
|
|
55
|
+
hit(1566254, 1280, 848, 'table-wedding-table-covered-wedding-1566254', 'table, wedding table, covered, wedding, event, knives, fork, napkin, butterfly, restaurant, caterer, decoration, table decoration, wedding decoration, reception'),
|
|
56
|
+
hit(173907, 1280, 960, 'austin-texas-architecture-skyline-173907', 'austin, texas, architecture, skyline, city, cityscape, tower, skyscraper, building, landmark, urban, scenic, scenery, downtown, metropolis, buildings, metropolitan, austin, austin, austin'),
|
|
57
|
+
hit(4064427, 1280, 853, 'austin-texas-bridge-bats-sunset-4064427', 'austin, texas, bridge, bats, sunset, river, lake, downtown, nature, cityscape, tx, sky'),
|
|
58
|
+
hit(3178752, 1280, 851, 'architecture-city-skyline-3178752', 'architecture, city, nature, skyline, skyscraper, cityscape, austin, texas, lake, blue, buildings, reflections, panorama, downtown, tourism'),
|
|
59
|
+
hit(4874473, 1280, 853, 'windmill-water-tanks-ranch-rural-4874473', 'windmill, water tanks, ranch, rural, farm, old windmill, water storage, meadow, landscape, countryside, austin, texas, old windmill, water storage, water storage, texas, texas, texas, texas, texas'),
|
|
60
|
+
hit(3468795, 1280, 847, 'austin-texas-tx-bridge-lake-3468795', 'austin, texas, nature, tx, bridge, lake, skyline, city, lady bird lake, congress avenue bridge'),
|
|
61
|
+
hit(4874396, 1280, 853, 'texas-scenic-landscape-countryside-4874396', 'texas, scenic, landscape, countryside, shed, cactus, country, outdoors, rural, travel, austin, tx'),
|
|
62
|
+
hit(4822547, 1280, 757, 'flower-yellow-rose-david-austin-4822547', 'flower, yellow, rose, flower background, david austin, flower wallpaper, beautiful flowers, greeting card, decoration, rose flower, cut out, isolated, garden, nature'),
|
|
63
|
+
hit(4357790, 1280, 857, 'shepherd-dog-dog-domestic-animal-4357790', 'shepherd dog, nature, dog, domestic animal, animal, dog puppy, baby dog, young and old, pet, old german shepherd dog, puppy'),
|
|
64
|
+
hit(4681969, 1280, 853, 'cars-malta-classic-cars-vintage-4681969', 'cars, malta, classic cars, vintage, auto, automobile, austin, healey, collectable'),
|
|
65
|
+
hit(1461727, 1280, 856, 'automobile-flower-car-planted-car-1461727', 'automobile, flower car, beautiful flowers, planted car, flower wallpaper, planted, red, flower, flower background, deco, nature, red car, austin, austin-mini'),
|
|
66
|
+
hit(3545794, 1280, 640, 'traffic-automobile-antique-car-3545794', 'traffic, automobile, antique car, austin, blue, sports car, animals, peacock, bird, proudly, composing, feathers, vehicle, nature, to travel, luxury'),
|
|
67
|
+
hit(5313570, 1280, 853, 'nature-flower-blossoms-roses-5313570', 'nature, flower, blossoms, flower background, roses, english rose, flower wallpaper, beautiful flowers, austin rose, garden roses'),
|
|
68
|
+
hit(6885081, 1280, 854, 'knives-cutlery-kitchen-cooking-6885081', 'knives, cutlery, kitchen, cooking, tools, fork, silver, caterer, chop, ladle, metal, cut, kettle, spoon, baking, sharp, knives, knives, knives, knives'),
|
|
69
|
+
hit(3345330, 1280, 960, 'water-lake-river-tree-landscape-3345330', 'water, lake, river, tree, landscape, austin, ladybird, dam, sky, nature, scenery, united states, austin, texas'),
|
|
70
|
+
hit(1756159, 1280, 853, 'austin-texas-austin-tx-texas-1756159', 'austin texas, austin, tx, texas, cityscape, downtown, skyline, urban, america, usa, corporate, austin texas, austin texas, austin texas, austin texas, austin, austin, austin, austin, austin'),
|
|
71
|
+
hit(931131, 1280, 853, 'sisters-girls-field-running-931131', 'sisters, girls, field, running, playing, play, children, childhood, nature, sisterhood, summer, fun, children playing, siblings, young, happy, happiness, outdoors'),
|
|
72
|
+
hit(5756718, 1280, 719, 'buildings-lake-city-skyline-5756718', 'buildings, lake, city, skyline, skyscrapers, nature, downtown, urban, cityscape, austin, texas, usa, aerial view'),
|
|
73
|
+
hit(3255280, 1280, 1002, 'rose-red-david-austin-plant-garden-3255280', 'rose, rose flower, red, david austin, plant, garden, nature, isolated, cut out'),
|
|
74
|
+
hit(3176081, 1280, 851, 'architecture-city-water-reflection-3176081', 'architecture, nature, city, water, reflection, sky, austin, texas, lake, downtown, river, sunlight, scenic, forest, landscape, travel'),
|
|
75
|
+
hit(4477874, 1280, 853, 'family-game-fun-outdoors-playing-4477874', 'family, game, fun, outdoors, playing, family, family, family, family, family'),
|
|
76
|
+
hit(4059507, 1280, 541, 'texas-history-museum-education-4059507', 'texas history museum, education, attractions, tourism, landscape, austin, texas, panorama, building, sky, clouds, nature, trees, hdr, mood, landmark, america'),
|
|
77
|
+
hit(5739040, 1280, 853, 'pat-austin-rose-flower-petals-bloom-5739040', 'pat austin rose, flower, petals, flower wallpaper, flower background, beautiful flowers, bloom, nature, blossom, plant, flora, closeup'),
|
|
78
|
+
hit(4686574, 1280, 960, 'car-coupe-vintage-ancient-4686574', 'car, car wallpapers, coupe, vintage, ancient, austin-healey 3000, wheel, radio, detail'),
|
|
79
|
+
hit(5301421, 1280, 887, 'roses-nature-flower-english-roses-5301421', 'roses, nature, flower, english roses, romance, garden, close up, flower wallpaper, blossoms, rose blossom, austin rose, romantic, flower background, beautiful flowers, fragrance'),
|
|
80
|
+
hit(3468800, 1280, 863, 'austin-texas-tx-city-skyline-3468800', 'austin, texas, nature, tx, city, skyline, buildings, bridge, lake, lady bird lake, congress avenue bridge, blue bridge, blue lady'),
|
|
81
|
+
hit(210403, 1280, 960, 'catering-airport-plane-ever-entry-210403', 'catering, airport, plane, ever, entry, hull, aviation, air traffic, vacations, arrival, rear, charge, meal, food, nourishment, enjoy the meal, airfield, dusseldorf, airport düsseldorf, catering')
|
|
82
|
+
];
|
|
83
|
+
/** `caterer` (horizontal, min_width 1600), answered 2026-10-15T18:47:45.261Z. */ export const CATERER = [
|
|
84
|
+
hit(3967304, 1280, 852, 'macaroon-caterer-plateau-food-3967304', 'macaroon, caterer, plateau, food, cocktail'),
|
|
85
|
+
hit(1566254, 1280, 848, 'table-wedding-table-covered-wedding-1566254', 'table, wedding table, covered, wedding, event, knives, fork, napkin, butterfly, restaurant, caterer, decoration, table decoration, wedding decoration, reception'),
|
|
86
|
+
hit(6885081, 1280, 854, 'knives-cutlery-kitchen-cooking-6885081', 'knives, cutlery, kitchen, cooking, tools, fork, silver, caterer, chop, ladle, metal, cut, kettle, spoon, baking, sharp, knives, knives, knives, knives'),
|
|
87
|
+
hit(210403, 1280, 960, 'catering-airport-plane-ever-entry-210403', 'catering, airport, plane, ever, entry, hull, aviation, air traffic, vacations, arrival, rear, charge, meal, food, nourishment, enjoy the meal, airfield, dusseldorf, airport düsseldorf, catering'),
|
|
88
|
+
hit(2009590, 1280, 854, 'christmas-wallpaper-platter-food-2009590', 'christmas wallpaper, platter, food, starters, meal, feast, dining table, table, eat, delicious food, restaurant, dining, cuisine, catering, buffet, flat lay'),
|
|
89
|
+
hit(1283608, 1280, 853, 'drinks-alcohol-glasses-champagne-1283608', 'drinks, alcohol, glasses, champagne, wine, serving trays, alcoholic drinks, beverage, refreshment, catering, wedding, party, event, celebration, alcohol, alcohol, champagne, champagne, champagne, champagne'),
|
|
90
|
+
hit(352475, 1280, 853, 'dessert-cupcakes-food-352475', 'dessert, cupcakes, food, strawberry cupcakes, snacks, sweets, confections, baked goods, pastries, tasty, delicious, cake stand, close up, eat, food photography, dessert, dessert, cupcakes, food, food'),
|
|
91
|
+
hit(2175326, 1280, 853, 'hors-doeuvre-starters-appetizers-2175326', "hors d'oeuvre, starters, appetizers, charcuterie, delicatessen, food platter, catering, cheese, salami, smoked beef, tomato, snack, bread, plate, cuisine, protein, antipasto, meat, tasty, platter"),
|
|
92
|
+
hit(5582984, 1280, 853, 'dessert-chocolate-food-sweets-nuts-5582984', 'dessert, chocolate, food, sweets, nuts, tasty, delicious, dessert buffet, glasses, chocolate, chocolate, chocolate, chocolate, chocolate'),
|
|
93
|
+
hit(179046, 1280, 852, 'catering-buffet-food-olives-179046', 'catering, buffet, food, olives, restaurant, cater, party, table, banquet, decoration, catering, catering, catering, catering, buffet, olives, restaurant, restaurant, restaurant, party'),
|
|
94
|
+
hit(176991, 1280, 1024, 'wine-glasses-stemware-crystal-party-176991', 'wine glasses, stemware, crystal, party, glasses, elegant, restaurant, blue wine, blue restaurant, blue party, blue glass, blue glasses, party, party, restaurant, restaurant, restaurant, restaurant, restaurant'),
|
|
95
|
+
hit(594496, 1280, 806, 'chunks-to-dish-out-menu-gastronomy-594496', 'chunks, to dish out, menu, gastronomy, gourmet, meal, greetings from the kitchen, amuse gueule, menu, menu, menu, menu, menu, gastronomy, gastronomy, gastronomy, gourmet, gourmet, gourmet, gourmet'),
|
|
96
|
+
hit(3604064, 1280, 853, 'table-setting-table-arrangement-3604064', 'table setting, table arrangement, tableware, glassware, glasses, banquet table, table decoration, dining, table setting, tableware, banquet table, dining, dining, dining, dining, dining'),
|
|
97
|
+
hit(1206687, 1280, 853, 'skewers-food-party-chunks-1206687', 'skewers, food, party, chunks, mozzarella, olives, celebration, appetizer, vegetables, dish, table, party, party, party, party, party'),
|
|
98
|
+
hit(6657853, 1280, 854, 'table-restaurant-plate-cafe-fork-6657853', 'table, restaurant, plate, cafe, fork, knife, napkin, garden, nature, ornament, decor, decoration, decorative'),
|
|
99
|
+
hit(5993768, 1280, 855, 'eggs-egg-shells-tray-food-catering-5993768', 'eggs, egg shells, tray, food, catering, ingredients'),
|
|
100
|
+
hit(4511335, 1280, 854, 'food-catering-africa-4511335', 'food, catering, africa, catering, catering, catering, catering, catering'),
|
|
101
|
+
hit(5109778, 1280, 1280, 'pizza-italian-delivery-catering-5109778', 'pizza, italian, delivery, catering, home party, dinner'),
|
|
102
|
+
hit(5981612, 1280, 720, 'tunnel-greenhouse-cultivation-5981612', 'tunnel greenhouse, cultivation, nature, kitchen, garden, vegetables, vegetable land, gardening, self catering'),
|
|
103
|
+
hit(4118085, 1280, 853, 'rolls-kaiser-rolls-catering-baked-4118085', 'rolls, kaiser rolls, catering, baked, food, baker, kaiser rolls, kaiser rolls, kaiser rolls, kaiser rolls, kaiser rolls, catering'),
|
|
104
|
+
hit(2534606, 1280, 751, 'antique-car-classic-automobile-2534606', 'antique car, classic, automobile, vehicles, old, snack, hot dog, kiosk, foot truck, truck, food, meal, hunger, coffee, green, old vehicle, transporter, vintage car automobile, street food, rarity'),
|
|
105
|
+
hit(7438072, 1280, 854, 'vegetables-cook-catering-cooking-7438072', 'vegetables, cook, catering, cooking, benchtops, supplier, manufacturer, manufacturing, catering, catering, catering, catering, catering'),
|
|
106
|
+
hit(2655778, 1280, 853, 'food-buffet-restaurant-lunch-2655778', 'food, buffet, restaurant, lunch, catering, plate, cuisine, people, dining, party, dinner, meal, celebration, table, event, dish, gray food, gray restaurant, gray party, gray table'),
|
|
107
|
+
hit(8044946, 1280, 853, 'historic-center-alley-restaurant-8044946', 'historic center, alley, restaurant, historic centre, local, gastronomy, outdoor catering, greece'),
|
|
108
|
+
hit(4625940, 1280, 960, 'food-meat-catering-meal-bbq-4625940', 'food, meat, catering, meal, bbq, barbecue, grilled, catering, catering, catering, catering, catering, bbq, bbq, bbq, bbq, bbq'),
|
|
109
|
+
hit(4235910, 1280, 854, 'sashimi-platter-dinner-4235910', 'sashimi, platter, dinner, japanese meal, catering, delicious, cooking, sound, sashimi, sashimi, sashimi, sashimi, sashimi, catering, catering, sound'),
|
|
110
|
+
hit(4082705, 1280, 848, 'street-cafe-outdoors-restaurant-4082705', 'street cafe, outdoors, restaurant, gastronomy, outdoor catering'),
|
|
111
|
+
hit(7073759, 1280, 960, 'bun-tomatoes-snack-loaf-healthy-7073759', 'bun, tomatoes, snack, loaf, healthy, catering, chunks, food, catering, catering, catering, catering, catering'),
|
|
112
|
+
hit(3911154, 1280, 853, 'breakfast-banquet-catering-table-3911154', 'breakfast, banquet, catering, table, meal, restaurant, serving, dine, plate, wooden, juice, pepper'),
|
|
113
|
+
hit(4003652, 1280, 853, 'wings-bbq-barbecue-chicken-food-4003652', 'wings, bbq, barbecue, chicken, food, meat, delicious, grill, tasty, eat, restaurant, sauce, grilled, dinner, spicy, fried, appetizer, catering, wing, cuisine'),
|
|
114
|
+
hit(3728754, 1280, 853, 'hotel-breakfast-breakfast-buffet-3728754', 'hotel, breakfast, breakfast buffet, gastronomy, fruit, nourishment, enjoy the meal, restaurant, fresh, yummy, tasty, enjoyment, bio, comfortable, in the morning, kitchen, space, room, hotel, kitchen'),
|
|
115
|
+
hit(3393433, 1280, 720, 'moscow-cateral-russia-religion-3393433', 'moscow, cateral, russia, religion, dome, orthodox'),
|
|
116
|
+
hit(315691, 1280, 853, 'buffet-indian-food-spices-lunch-315691', 'buffet, indian, food, spices, lunch, restaurant, cuisine, dinner, spicy, cooking, eating, meal, gourmet, delicious, traditional, india, catering, dining, tasty, brown food'),
|
|
117
|
+
hit(1812772, 1280, 853, 'exclusive-banquet-adoption-1812772', 'exclusive banquet, adoption, business meeting, wedding, the ceremony, restaurant, dinner, party, table, flower wallpaper, eat, bouquet, arrangement, alcohol, wine, flowers, tablecloth, decoration, composition, cutlery'),
|
|
118
|
+
hit(3592178, 1280, 853, 'glass-catering-architecture-3592178', 'glass, catering, architecture, building, urban, passage, people'),
|
|
119
|
+
hit(3393435, 1280, 850, 'moscow-cateral-russia-religion-3393435', 'moscow, cateral, russia, religion, dome, orthodox, gold, cathedral dome, kremlin'),
|
|
120
|
+
hit(3393436, 1280, 720, 'moscow-cateral-russia-religion-3393436', 'moscow, cateral, russia, religion, dome, orthodox, gold, cathedral dome, kremlin'),
|
|
121
|
+
hit(4589759, 1280, 853, 'chicken-and-waffles-fried-chicken-4589759', 'chicken and waffles, fried chicken, chicken, food, meat, table, catering, skewers, waffles, picnic, outdoor dining, dining, bbq, barbeque, fried chicken, catering, catering, catering, catering, catering'),
|
|
122
|
+
hit(8388203, 1280, 853, 'meal-food-party-buffet-cold-buffet-8388203', 'meal, food, party, buffet, cold buffet, yummy, catering, sausage'),
|
|
123
|
+
hit(3354402, 1280, 914, 'people-adult-indoors-restaurant-3354402', 'people, adult, indoors, restaurant, woman, service, table, catering, gray restaurant, gray table, gray service, catering, catering, catering, catering, catering')
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=ai-stock-photo-copper-kettle-recordings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-stock-photo-copper-kettle-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 THE COPPER KETTLE CATERING HERO (AGL-3831):\n * what production's `stockPhotoSearches` cache held for the two searches the\n * beta.257 restaurant site \"Copper Kettle Catering\" (\"Family-run Austin\n * caterer: Texas barbecue and Tex-Mex for weddings, office lunches and\n * parties\", job mRxC_v18aH, 2026-10-15) sent for its home hero, read back\n * from the cache, never searched again. Ids, sizes, page slugs and tags are\n * Pixabay's own, in its order; the contributor is left out. Each search was\n * matched to its cache entry by the entry's key.\n *\n * The hero was held to the craft \"caterer\", and a photo of catering is\n * tagged \"catering\", \"buffet\", \"bbq\": only three hits said \"caterer\", none\n * first, so nothing was accepted and the starter pottery photo filled the\n * hero under the model's words \"A spread of smoked brisket, fajitas and sides\n * on a long catering table\".\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/** `family-run austin caterer` (horizontal, min_width 1600), answered 2026-10-15T18:47:45.010Z. */\nexport const FAMILY_RUN_AUSTIN_CATERER: StockPhoto[] = [\n hit(\n 3860567,\n 1280,\n 853,\n 'austin-healey-car-automobile-3860567',\n 'austin healey, car, automobile, vehicle, austin, retro, healey, vintage, chromium, car wallpapers, speed',\n ),\n hit(\n 2999867,\n 1280,\n 853,\n 'traffic-automobile-antique-car-2999867',\n 'traffic, automobile, car wallpapers, antique car, austin, austin healey, convertible, sports car, headlights, grille, parrot, composing, blue, car, driving a car',\n ),\n hit(\n 5276620,\n 1280,\n 853,\n 'old-buda-texas-city-park-entrance-5276620',\n 'old buda texas city park entrance, vintage, historical, park, buda, buda texas, atx, texas, central texas, austin, austin texas, city park, texas, central texas, austin texas, austin texas, austin texas, austin texas, austin texas',\n ),\n hit(\n 4877118,\n 1280,\n 853,\n 'cypress-tree-roots-nature-texas-4877118',\n 'cypress, tree, roots, nature, texas, austin, atx, river, forest, natural, landscape, waterway, cypress, cypress, cypress, cypress, texas, texas, austin, austin',\n ),\n hit(\n 4066441,\n 1280,\n 901,\n 'texas-state-capitol-austin-america-4066441',\n 'texas state capitol, austin, america, architecture, government, dome, landscape, mood, hdr, landmark, historic, austin, austin, austin, austin, austin',\n ),\n hit(\n 3345327,\n 1280,\n 914,\n 'water-nature-river-landscape-lake-3345327',\n 'water, nature, river, landscape, lake, bats, austin, reflection, sunset, tranquil, united states, austin, texas',\n ),\n hit(\n 5029318,\n 1280,\n 853,\n 'chinese-rose-rose-flower-rose-5029318',\n 'chinese rose, rose flower, rose, gold celebration, austin, chinese rose, chinese rose, chinese rose, chinese rose, chinese rose, rose, austin',\n ),\n hit(\n 3967304,\n 1280,\n 852,\n 'macaroon-caterer-plateau-food-3967304',\n 'macaroon, caterer, plateau, food, cocktail',\n ),\n hit(\n 5357325,\n 1280,\n 854,\n 'river-austin-viewing-bats-texas-5357325',\n 'river, austin, nature, viewing, bats, texas, water, landscape, bridge',\n ),\n hit(\n 4549223,\n 1280,\n 853,\n 'transport-traffic-automobile-4549223',\n 'transport, traffic, automobile, sports car, austin, blue, cabriolet, antique car, car wallpapers, car',\n ),\n hit(\n 3409985,\n 1280,\n 853,\n 'texas-art-wall-street-art-urban-3409985',\n 'texas, art, wall, street art, urban, austin, blue art, blue wall, blue street, austin, austin, austin, austin, austin',\n ),\n hit(\n 4699178,\n 1280,\n 960,\n 'austin-healey-car-classic-sport-4699178',\n 'austin healey, car, classic, sport, car wallpapers, coupe, austin healey 3000, motot, calender, hood, detail, design, red',\n ),\n hit(\n 7933399,\n 1280,\n 670,\n 'austin-texas-river-buildings-city-7933399',\n 'austin, texas, river, buildings, city, urban, cityscape, travel, architecture, usa, nature, spring, austin, austin, austin, austin, austin',\n ),\n hit(\n 1566254,\n 1280,\n 848,\n 'table-wedding-table-covered-wedding-1566254',\n 'table, wedding table, covered, wedding, event, knives, fork, napkin, butterfly, restaurant, caterer, decoration, table decoration, wedding decoration, reception',\n ),\n hit(\n 173907,\n 1280,\n 960,\n 'austin-texas-architecture-skyline-173907',\n 'austin, texas, architecture, skyline, city, cityscape, tower, skyscraper, building, landmark, urban, scenic, scenery, downtown, metropolis, buildings, metropolitan, austin, austin, austin',\n ),\n hit(\n 4064427,\n 1280,\n 853,\n 'austin-texas-bridge-bats-sunset-4064427',\n 'austin, texas, bridge, bats, sunset, river, lake, downtown, nature, cityscape, tx, sky',\n ),\n hit(\n 3178752,\n 1280,\n 851,\n 'architecture-city-skyline-3178752',\n 'architecture, city, nature, skyline, skyscraper, cityscape, austin, texas, lake, blue, buildings, reflections, panorama, downtown, tourism',\n ),\n hit(\n 4874473,\n 1280,\n 853,\n 'windmill-water-tanks-ranch-rural-4874473',\n 'windmill, water tanks, ranch, rural, farm, old windmill, water storage, meadow, landscape, countryside, austin, texas, old windmill, water storage, water storage, texas, texas, texas, texas, texas',\n ),\n hit(\n 3468795,\n 1280,\n 847,\n 'austin-texas-tx-bridge-lake-3468795',\n 'austin, texas, nature, tx, bridge, lake, skyline, city, lady bird lake, congress avenue bridge',\n ),\n hit(\n 4874396,\n 1280,\n 853,\n 'texas-scenic-landscape-countryside-4874396',\n 'texas, scenic, landscape, countryside, shed, cactus, country, outdoors, rural, travel, austin, tx',\n ),\n hit(\n 4822547,\n 1280,\n 757,\n 'flower-yellow-rose-david-austin-4822547',\n 'flower, yellow, rose, flower background, david austin, flower wallpaper, beautiful flowers, greeting card, decoration, rose flower, cut out, isolated, garden, nature',\n ),\n hit(\n 4357790,\n 1280,\n 857,\n 'shepherd-dog-dog-domestic-animal-4357790',\n 'shepherd dog, nature, dog, domestic animal, animal, dog puppy, baby dog, young and old, pet, old german shepherd dog, puppy',\n ),\n hit(\n 4681969,\n 1280,\n 853,\n 'cars-malta-classic-cars-vintage-4681969',\n 'cars, malta, classic cars, vintage, auto, automobile, austin, healey, collectable',\n ),\n hit(\n 1461727,\n 1280,\n 856,\n 'automobile-flower-car-planted-car-1461727',\n 'automobile, flower car, beautiful flowers, planted car, flower wallpaper, planted, red, flower, flower background, deco, nature, red car, austin, austin-mini',\n ),\n hit(\n 3545794,\n 1280,\n 640,\n 'traffic-automobile-antique-car-3545794',\n 'traffic, automobile, antique car, austin, blue, sports car, animals, peacock, bird, proudly, composing, feathers, vehicle, nature, to travel, luxury',\n ),\n hit(\n 5313570,\n 1280,\n 853,\n 'nature-flower-blossoms-roses-5313570',\n 'nature, flower, blossoms, flower background, roses, english rose, flower wallpaper, beautiful flowers, austin rose, garden roses',\n ),\n hit(\n 6885081,\n 1280,\n 854,\n 'knives-cutlery-kitchen-cooking-6885081',\n 'knives, cutlery, kitchen, cooking, tools, fork, silver, caterer, chop, ladle, metal, cut, kettle, spoon, baking, sharp, knives, knives, knives, knives',\n ),\n hit(\n 3345330,\n 1280,\n 960,\n 'water-lake-river-tree-landscape-3345330',\n 'water, lake, river, tree, landscape, austin, ladybird, dam, sky, nature, scenery, united states, austin, texas',\n ),\n hit(\n 1756159,\n 1280,\n 853,\n 'austin-texas-austin-tx-texas-1756159',\n 'austin texas, austin, tx, texas, cityscape, downtown, skyline, urban, america, usa, corporate, austin texas, austin texas, austin texas, austin texas, austin, austin, austin, austin, austin',\n ),\n hit(\n 931131,\n 1280,\n 853,\n 'sisters-girls-field-running-931131',\n 'sisters, girls, field, running, playing, play, children, childhood, nature, sisterhood, summer, fun, children playing, siblings, young, happy, happiness, outdoors',\n ),\n hit(\n 5756718,\n 1280,\n 719,\n 'buildings-lake-city-skyline-5756718',\n 'buildings, lake, city, skyline, skyscrapers, nature, downtown, urban, cityscape, austin, texas, usa, aerial view',\n ),\n hit(\n 3255280,\n 1280,\n 1002,\n 'rose-red-david-austin-plant-garden-3255280',\n 'rose, rose flower, red, david austin, plant, garden, nature, isolated, cut out',\n ),\n hit(\n 3176081,\n 1280,\n 851,\n 'architecture-city-water-reflection-3176081',\n 'architecture, nature, city, water, reflection, sky, austin, texas, lake, downtown, river, sunlight, scenic, forest, landscape, travel',\n ),\n hit(\n 4477874,\n 1280,\n 853,\n 'family-game-fun-outdoors-playing-4477874',\n 'family, game, fun, outdoors, playing, family, family, family, family, family',\n ),\n hit(\n 4059507,\n 1280,\n 541,\n 'texas-history-museum-education-4059507',\n 'texas history museum, education, attractions, tourism, landscape, austin, texas, panorama, building, sky, clouds, nature, trees, hdr, mood, landmark, america',\n ),\n hit(\n 5739040,\n 1280,\n 853,\n 'pat-austin-rose-flower-petals-bloom-5739040',\n 'pat austin rose, flower, petals, flower wallpaper, flower background, beautiful flowers, bloom, nature, blossom, plant, flora, closeup',\n ),\n hit(\n 4686574,\n 1280,\n 960,\n 'car-coupe-vintage-ancient-4686574',\n 'car, car wallpapers, coupe, vintage, ancient, austin-healey 3000, wheel, radio, detail',\n ),\n hit(\n 5301421,\n 1280,\n 887,\n 'roses-nature-flower-english-roses-5301421',\n 'roses, nature, flower, english roses, romance, garden, close up, flower wallpaper, blossoms, rose blossom, austin rose, romantic, flower background, beautiful flowers, fragrance',\n ),\n hit(\n 3468800,\n 1280,\n 863,\n 'austin-texas-tx-city-skyline-3468800',\n 'austin, texas, nature, tx, city, skyline, buildings, bridge, lake, lady bird lake, congress avenue bridge, blue bridge, blue lady',\n ),\n hit(\n 210403,\n 1280,\n 960,\n 'catering-airport-plane-ever-entry-210403',\n 'catering, airport, plane, ever, entry, hull, aviation, air traffic, vacations, arrival, rear, charge, meal, food, nourishment, enjoy the meal, airfield, dusseldorf, airport düsseldorf, catering',\n ),\n]\n/** `caterer` (horizontal, min_width 1600), answered 2026-10-15T18:47:45.261Z. */\nexport const CATERER: StockPhoto[] = [\n hit(\n 3967304,\n 1280,\n 852,\n 'macaroon-caterer-plateau-food-3967304',\n 'macaroon, caterer, plateau, food, cocktail',\n ),\n hit(\n 1566254,\n 1280,\n 848,\n 'table-wedding-table-covered-wedding-1566254',\n 'table, wedding table, covered, wedding, event, knives, fork, napkin, butterfly, restaurant, caterer, decoration, table decoration, wedding decoration, reception',\n ),\n hit(\n 6885081,\n 1280,\n 854,\n 'knives-cutlery-kitchen-cooking-6885081',\n 'knives, cutlery, kitchen, cooking, tools, fork, silver, caterer, chop, ladle, metal, cut, kettle, spoon, baking, sharp, knives, knives, knives, knives',\n ),\n hit(\n 210403,\n 1280,\n 960,\n 'catering-airport-plane-ever-entry-210403',\n 'catering, airport, plane, ever, entry, hull, aviation, air traffic, vacations, arrival, rear, charge, meal, food, nourishment, enjoy the meal, airfield, dusseldorf, airport düsseldorf, catering',\n ),\n hit(\n 2009590,\n 1280,\n 854,\n 'christmas-wallpaper-platter-food-2009590',\n 'christmas wallpaper, platter, food, starters, meal, feast, dining table, table, eat, delicious food, restaurant, dining, cuisine, catering, buffet, flat lay',\n ),\n hit(\n 1283608,\n 1280,\n 853,\n 'drinks-alcohol-glasses-champagne-1283608',\n 'drinks, alcohol, glasses, champagne, wine, serving trays, alcoholic drinks, beverage, refreshment, catering, wedding, party, event, celebration, alcohol, alcohol, champagne, champagne, champagne, champagne',\n ),\n hit(\n 352475,\n 1280,\n 853,\n 'dessert-cupcakes-food-352475',\n 'dessert, cupcakes, food, strawberry cupcakes, snacks, sweets, confections, baked goods, pastries, tasty, delicious, cake stand, close up, eat, food photography, dessert, dessert, cupcakes, food, food',\n ),\n hit(\n 2175326,\n 1280,\n 853,\n 'hors-doeuvre-starters-appetizers-2175326',\n \"hors d'oeuvre, starters, appetizers, charcuterie, delicatessen, food platter, catering, cheese, salami, smoked beef, tomato, snack, bread, plate, cuisine, protein, antipasto, meat, tasty, platter\",\n ),\n hit(\n 5582984,\n 1280,\n 853,\n 'dessert-chocolate-food-sweets-nuts-5582984',\n 'dessert, chocolate, food, sweets, nuts, tasty, delicious, dessert buffet, glasses, chocolate, chocolate, chocolate, chocolate, chocolate',\n ),\n hit(\n 179046,\n 1280,\n 852,\n 'catering-buffet-food-olives-179046',\n 'catering, buffet, food, olives, restaurant, cater, party, table, banquet, decoration, catering, catering, catering, catering, buffet, olives, restaurant, restaurant, restaurant, party',\n ),\n hit(\n 176991,\n 1280,\n 1024,\n 'wine-glasses-stemware-crystal-party-176991',\n 'wine glasses, stemware, crystal, party, glasses, elegant, restaurant, blue wine, blue restaurant, blue party, blue glass, blue glasses, party, party, restaurant, restaurant, restaurant, restaurant, restaurant',\n ),\n hit(\n 594496,\n 1280,\n 806,\n 'chunks-to-dish-out-menu-gastronomy-594496',\n 'chunks, to dish out, menu, gastronomy, gourmet, meal, greetings from the kitchen, amuse gueule, menu, menu, menu, menu, menu, gastronomy, gastronomy, gastronomy, gourmet, gourmet, gourmet, gourmet',\n ),\n hit(\n 3604064,\n 1280,\n 853,\n 'table-setting-table-arrangement-3604064',\n 'table setting, table arrangement, tableware, glassware, glasses, banquet table, table decoration, dining, table setting, tableware, banquet table, dining, dining, dining, dining, dining',\n ),\n hit(\n 1206687,\n 1280,\n 853,\n 'skewers-food-party-chunks-1206687',\n 'skewers, food, party, chunks, mozzarella, olives, celebration, appetizer, vegetables, dish, table, party, party, party, party, party',\n ),\n hit(\n 6657853,\n 1280,\n 854,\n 'table-restaurant-plate-cafe-fork-6657853',\n 'table, restaurant, plate, cafe, fork, knife, napkin, garden, nature, ornament, decor, decoration, decorative',\n ),\n hit(\n 5993768,\n 1280,\n 855,\n 'eggs-egg-shells-tray-food-catering-5993768',\n 'eggs, egg shells, tray, food, catering, ingredients',\n ),\n hit(\n 4511335,\n 1280,\n 854,\n 'food-catering-africa-4511335',\n 'food, catering, africa, catering, catering, catering, catering, catering',\n ),\n hit(\n 5109778,\n 1280,\n 1280,\n 'pizza-italian-delivery-catering-5109778',\n 'pizza, italian, delivery, catering, home party, dinner',\n ),\n hit(\n 5981612,\n 1280,\n 720,\n 'tunnel-greenhouse-cultivation-5981612',\n 'tunnel greenhouse, cultivation, nature, kitchen, garden, vegetables, vegetable land, gardening, self catering',\n ),\n hit(\n 4118085,\n 1280,\n 853,\n 'rolls-kaiser-rolls-catering-baked-4118085',\n 'rolls, kaiser rolls, catering, baked, food, baker, kaiser rolls, kaiser rolls, kaiser rolls, kaiser rolls, kaiser rolls, catering',\n ),\n hit(\n 2534606,\n 1280,\n 751,\n 'antique-car-classic-automobile-2534606',\n 'antique car, classic, automobile, vehicles, old, snack, hot dog, kiosk, foot truck, truck, food, meal, hunger, coffee, green, old vehicle, transporter, vintage car automobile, street food, rarity',\n ),\n hit(\n 7438072,\n 1280,\n 854,\n 'vegetables-cook-catering-cooking-7438072',\n 'vegetables, cook, catering, cooking, benchtops, supplier, manufacturer, manufacturing, catering, catering, catering, catering, catering',\n ),\n hit(\n 2655778,\n 1280,\n 853,\n 'food-buffet-restaurant-lunch-2655778',\n 'food, buffet, restaurant, lunch, catering, plate, cuisine, people, dining, party, dinner, meal, celebration, table, event, dish, gray food, gray restaurant, gray party, gray table',\n ),\n hit(\n 8044946,\n 1280,\n 853,\n 'historic-center-alley-restaurant-8044946',\n 'historic center, alley, restaurant, historic centre, local, gastronomy, outdoor catering, greece',\n ),\n hit(\n 4625940,\n 1280,\n 960,\n 'food-meat-catering-meal-bbq-4625940',\n 'food, meat, catering, meal, bbq, barbecue, grilled, catering, catering, catering, catering, catering, bbq, bbq, bbq, bbq, bbq',\n ),\n hit(\n 4235910,\n 1280,\n 854,\n 'sashimi-platter-dinner-4235910',\n 'sashimi, platter, dinner, japanese meal, catering, delicious, cooking, sound, sashimi, sashimi, sashimi, sashimi, sashimi, catering, catering, sound',\n ),\n hit(\n 4082705,\n 1280,\n 848,\n 'street-cafe-outdoors-restaurant-4082705',\n 'street cafe, outdoors, restaurant, gastronomy, outdoor catering',\n ),\n hit(\n 7073759,\n 1280,\n 960,\n 'bun-tomatoes-snack-loaf-healthy-7073759',\n 'bun, tomatoes, snack, loaf, healthy, catering, chunks, food, catering, catering, catering, catering, catering',\n ),\n hit(\n 3911154,\n 1280,\n 853,\n 'breakfast-banquet-catering-table-3911154',\n 'breakfast, banquet, catering, table, meal, restaurant, serving, dine, plate, wooden, juice, pepper',\n ),\n hit(\n 4003652,\n 1280,\n 853,\n 'wings-bbq-barbecue-chicken-food-4003652',\n 'wings, bbq, barbecue, chicken, food, meat, delicious, grill, tasty, eat, restaurant, sauce, grilled, dinner, spicy, fried, appetizer, catering, wing, cuisine',\n ),\n hit(\n 3728754,\n 1280,\n 853,\n 'hotel-breakfast-breakfast-buffet-3728754',\n 'hotel, breakfast, breakfast buffet, gastronomy, fruit, nourishment, enjoy the meal, restaurant, fresh, yummy, tasty, enjoyment, bio, comfortable, in the morning, kitchen, space, room, hotel, kitchen',\n ),\n hit(\n 3393433,\n 1280,\n 720,\n 'moscow-cateral-russia-religion-3393433',\n 'moscow, cateral, russia, religion, dome, orthodox',\n ),\n hit(\n 315691,\n 1280,\n 853,\n 'buffet-indian-food-spices-lunch-315691',\n 'buffet, indian, food, spices, lunch, restaurant, cuisine, dinner, spicy, cooking, eating, meal, gourmet, delicious, traditional, india, catering, dining, tasty, brown food',\n ),\n hit(\n 1812772,\n 1280,\n 853,\n 'exclusive-banquet-adoption-1812772',\n 'exclusive banquet, adoption, business meeting, wedding, the ceremony, restaurant, dinner, party, table, flower wallpaper, eat, bouquet, arrangement, alcohol, wine, flowers, tablecloth, decoration, composition, cutlery',\n ),\n hit(\n 3592178,\n 1280,\n 853,\n 'glass-catering-architecture-3592178',\n 'glass, catering, architecture, building, urban, passage, people',\n ),\n hit(\n 3393435,\n 1280,\n 850,\n 'moscow-cateral-russia-religion-3393435',\n 'moscow, cateral, russia, religion, dome, orthodox, gold, cathedral dome, kremlin',\n ),\n hit(\n 3393436,\n 1280,\n 720,\n 'moscow-cateral-russia-religion-3393436',\n 'moscow, cateral, russia, religion, dome, orthodox, gold, cathedral dome, kremlin',\n ),\n hit(\n 4589759,\n 1280,\n 853,\n 'chicken-and-waffles-fried-chicken-4589759',\n 'chicken and waffles, fried chicken, chicken, food, meat, table, catering, skewers, waffles, picnic, outdoor dining, dining, bbq, barbeque, fried chicken, catering, catering, catering, catering, catering',\n ),\n hit(\n 8388203,\n 1280,\n 853,\n 'meal-food-party-buffet-cold-buffet-8388203',\n 'meal, food, party, buffet, cold buffet, yummy, catering, sausage',\n ),\n hit(\n 3354402,\n 1280,\n 914,\n 'people-adult-indoors-restaurant-3354402',\n 'people, adult, indoors, restaurant, woman, service, table, catering, gray restaurant, gray table, gray service, catering, catering, catering, catering, catering',\n ),\n]\n"],"names":["hit","id","width","height","slug","tags","provider","String","pageUrl","photographer","split","downloadUrl","FAMILY_RUN_AUSTIN_CATERER","CATERER"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAID;;;;;;;;;;;;;;;CAeC,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,iGAAiG,GACjG,OAAO,MAAMW,4BAA0C;IACrDZ,IACE,SACA,MACA,KACA,wCACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,wCACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,+CACA;IAEFA,IACE,QACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,qCACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,uCACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,wCACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,wCACA;IAEFA,IACE,QACA,MACA,KACA,sCACA;IAEFA,IACE,SACA,MACA,KACA,uCACA;IAEFA,IACE,SACA,MACA,MACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,+CACA;IAEFA,IACE,SACA,MACA,KACA,qCACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,wCACA;IAEFA,IACE,QACA,MACA,KACA,4CACA;CAEH,CAAA;AACD,+EAA+E,GAC/E,OAAO,MAAMa,UAAwB;IACnCb,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,+CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,QACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,QACA,MACA,KACA,gCACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,QACA,MACA,KACA,sCACA;IAEFA,IACE,QACA,MACA,MACA,8CACA;IAEFA,IACE,QACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,qCACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,gCACA;IAEFA,IACE,SACA,MACA,MACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,yCACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,wCACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,uCACA;IAEFA,IACE,SACA,MACA,KACA,kCACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;IAEFA,IACE,SACA,MACA,KACA,4CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,QACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,sCACA;IAEFA,IACE,SACA,MACA,KACA,uCACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,0CACA;IAEFA,IACE,SACA,MACA,KACA,6CACA;IAEFA,IACE,SACA,MACA,KACA,8CACA;IAEFA,IACE,SACA,MACA,KACA,2CACA;CAEH,CAAA"}
|
|
@@ -33,8 +33,8 @@ import { aiLayoutSpans, AI_LAYOUT_FRAMES, AiLayoutTreeBuilder } from "./ai-layou
|
|
|
33
33
|
* the plan left in brackets taken out. A live blog plan (2026-10-09) named a
|
|
34
34
|
* section "reader notes and kind words [to be added by owner]"; carried into
|
|
35
35
|
* the label it read as a gap, and the page's gap pass took the section out.
|
|
36
|
-
*/ function sectionLabel(name, index) {
|
|
37
|
-
return aiLayoutFitText(name.replace(/\[[^\]]*\]/g, ' ').replace(/\s+/g, ' ').trim(), 'note') || `Section ${index + 1}`;
|
|
36
|
+
*/ function sectionLabel(name, index, language) {
|
|
37
|
+
return aiLayoutFitText(name.replace(/\[[^\]]*\]/g, ' ').replace(/\s+/g, ' ').trim(), 'note', language) || `Section ${index + 1}`;
|
|
38
38
|
}
|
|
39
39
|
/** A section root's id where the caller gives none. */ function sectionIdOf(index) {
|
|
40
40
|
return `section-${index + 1}`;
|
|
@@ -262,7 +262,7 @@ function compileSection(page, raw, index) {
|
|
|
262
262
|
// heading, the first section always carries the page's one h1, and a
|
|
263
263
|
// heading written after a group whose titles sit under it moves above it.
|
|
264
264
|
const inOrder = ()=>head.concat(filled.flatMap((entry)=>entry.column), tail);
|
|
265
|
-
const speaks = (block)=>block.kind === 'heading' && !!aiLayoutWords(block.text, 'heading', page.targets.facts);
|
|
265
|
+
const speaks = (block)=>block.kind === 'heading' && !!aiLayoutWords(block.text, 'heading', page.targets.facts, page.options.language);
|
|
266
266
|
for (const list of [
|
|
267
267
|
head,
|
|
268
268
|
tail,
|
|
@@ -357,7 +357,7 @@ function compileSection(page, raw, index) {
|
|
|
357
357
|
const name = ((_page_plan_sections_index1 = page.plan.sections[index]) == null ? void 0 : (_page_plan_sections_index_name = _page_plan_sections_index1.name) == null ? void 0 : _page_plan_sections_index_name.trim()) || `Section ${index + 1}`;
|
|
358
358
|
return tree.add('section', _extends({
|
|
359
359
|
element: 'section',
|
|
360
|
-
ariaLabel: sectionLabel(name, index)
|
|
360
|
+
ariaLabel: sectionLabel(name, index, page.options.language)
|
|
361
361
|
}, band === 'dark' ? {
|
|
362
362
|
colorScheme: 'dark'
|
|
363
363
|
} : {}), bandSx(band), [
|
|
@@ -700,7 +700,7 @@ function align(scope) {
|
|
|
700
700
|
} : {};
|
|
701
701
|
}
|
|
702
702
|
function words(scope, block, place, variant, props, sx) {
|
|
703
|
-
const text = aiLayoutWords(block.text, place, scope.page.targets.facts);
|
|
703
|
+
const text = aiLayoutWords(block.text, place, scope.page.targets.facts, scope.page.options.language);
|
|
704
704
|
if (!text) return null;
|
|
705
705
|
return scope.page.tree.add('muiTypography', _extends({
|
|
706
706
|
children: text,
|
|
@@ -709,7 +709,7 @@ function words(scope, block, place, variant, props, sx) {
|
|
|
709
709
|
}
|
|
710
710
|
/** A heading at its place in the outline: the section's own, or one under it. */ function heading(scope, block) {
|
|
711
711
|
if (scope.frame) {
|
|
712
|
-
const label = aiLayoutWords(block.text, 'itemTitle', scope.page.targets.facts);
|
|
712
|
+
const label = aiLayoutWords(block.text, 'itemTitle', scope.page.targets.facts, scope.page.options.language);
|
|
713
713
|
return label ? scope.page.tree.add('muiTypography', _extends({
|
|
714
714
|
children: label,
|
|
715
715
|
variant: 'subtitle1',
|
|
@@ -719,7 +719,7 @@ function words(scope, block, place, variant, props, sx) {
|
|
|
719
719
|
const own = !scope.headed;
|
|
720
720
|
const level = own ? scope.level : scope.level + 1;
|
|
721
721
|
const place = level === 1 ? 'title' : own ? 'heading' : 'itemTitle';
|
|
722
|
-
const text = aiLayoutWords(block.text, place, scope.page.targets.facts);
|
|
722
|
+
const text = aiLayoutWords(block.text, place, scope.page.targets.facts, scope.page.options.language);
|
|
723
723
|
if (!text) return null;
|
|
724
724
|
scope.headed = scope.headed || own;
|
|
725
725
|
const variant = level === 1 ? block.style === 'large' ? 'displayXl' : 'h1' : own ? 'h2' : 'h4';
|
|
@@ -737,7 +737,7 @@ function words(scope, block, place, variant, props, sx) {
|
|
|
737
737
|
}
|
|
738
738
|
function compileButton(scope, block) {
|
|
739
739
|
var _block_style;
|
|
740
|
-
const asked = aiLayoutFitText(block.text, 'label');
|
|
740
|
+
const asked = aiLayoutFitText(block.text, 'label', scope.page.options.language);
|
|
741
741
|
if (!asked) return null;
|
|
742
742
|
const destination = aiLayoutResolveLink(block.to, asked, scope.link, scope.page.targets);
|
|
743
743
|
if (!destination) {
|
|
@@ -834,8 +834,8 @@ export function destinationProps(destination) {
|
|
|
834
834
|
* item's title as its caption. The Image element reads exactly these.
|
|
835
835
|
*/ function lightboxProps(scope, caption) {
|
|
836
836
|
var _scope_page_plan_sections_scope_index;
|
|
837
|
-
const name = aiLayoutFitText(scope.heading, 'alt') || aiLayoutFitText((_scope_page_plan_sections_scope_index = scope.page.plan.sections[scope.index]) == null ? void 0 : _scope_page_plan_sections_scope_index.name, 'alt') || `Gallery ${scope.index + 1}`;
|
|
838
|
-
const words = aiLayoutFitText(caption, 'alt');
|
|
837
|
+
const name = aiLayoutFitText(scope.heading, 'alt', scope.page.options.language) || aiLayoutFitText((_scope_page_plan_sections_scope_index = scope.page.plan.sections[scope.index]) == null ? void 0 : _scope_page_plan_sections_scope_index.name, 'alt', scope.page.options.language) || `Gallery ${scope.index + 1}`;
|
|
838
|
+
const words = aiLayoutFitText(caption, 'alt', scope.page.options.language);
|
|
839
839
|
return _extends({
|
|
840
840
|
lightbox: true,
|
|
841
841
|
lightboxGallery: name
|
|
@@ -847,7 +847,7 @@ function image(scope, block, room) {
|
|
|
847
847
|
var _aiIconOfWord;
|
|
848
848
|
var _block_to;
|
|
849
849
|
const { page } = scope;
|
|
850
|
-
const alt = aiLayoutFitText(block.text, 'alt');
|
|
850
|
+
const alt = aiLayoutFitText(block.text, 'alt', scope.page.options.language);
|
|
851
851
|
if (!alt) return null;
|
|
852
852
|
if (page.images >= maxImages(page)) {
|
|
853
853
|
page.settled.push({
|
|
@@ -923,14 +923,14 @@ function image(scope, block, room) {
|
|
|
923
923
|
const values = {};
|
|
924
924
|
for (const item of (_block_items = block.items) != null ? _block_items : []){
|
|
925
925
|
const name = item.title.trim();
|
|
926
|
-
if (name in declared.props && item.text.trim()) values[name] = aiLayoutWords(item.text, 'text', scope.page.targets.facts);
|
|
926
|
+
if (name in declared.props && item.text.trim()) values[name] = aiLayoutWords(item.text, 'text', scope.page.targets.facts, scope.page.options.language);
|
|
927
927
|
}
|
|
928
928
|
// An instance fills at least one prop (rule 1): the block's words, else the
|
|
929
929
|
// name its section has in the plan, rather than the component's placeholder.
|
|
930
930
|
if (!Object.values(values).some(Boolean)) {
|
|
931
931
|
var _scope_page_plan_sections_scope_index;
|
|
932
932
|
const first = textProps(declared.props)[0];
|
|
933
|
-
const words = aiLayoutWords(block.text, 'text', scope.page.targets.facts) || aiLayoutWords((_scope_page_plan_sections_scope_index = scope.page.plan.sections[scope.index]) == null ? void 0 : _scope_page_plan_sections_scope_index.name, 'itemTitle', scope.page.targets.facts);
|
|
933
|
+
const words = aiLayoutWords(block.text, 'text', scope.page.targets.facts, scope.page.options.language) || aiLayoutWords((_scope_page_plan_sections_scope_index = scope.page.plan.sections[scope.index]) == null ? void 0 : _scope_page_plan_sections_scope_index.name, 'itemTitle', scope.page.targets.facts, scope.page.options.language);
|
|
934
934
|
if (first && words) values[first] = words;
|
|
935
935
|
}
|
|
936
936
|
for (const [name, value] of Object.entries(values))if (!value) delete values[name];
|
|
@@ -943,16 +943,16 @@ function image(scope, block, room) {
|
|
|
943
943
|
function textProps(props) {
|
|
944
944
|
return Object.entries(props).filter(([, type])=>type === 'text' || type === 'richText').map(([name])=>name);
|
|
945
945
|
}
|
|
946
|
-
/** An item's words as the props of the component that draws it. */ function instanceValues(props, item, facts) {
|
|
946
|
+
/** An item's words as the props of the component that draws it. */ function instanceValues(props, item, facts, language) {
|
|
947
947
|
var _texts_find, _texts_find1;
|
|
948
948
|
const texts = textProps(props);
|
|
949
949
|
const titleProp = (_texts_find = texts.find((name)=>/title|name|heading|label|question|figure|value/i.test(name))) != null ? _texts_find : texts[0];
|
|
950
950
|
const textProp = (_texts_find1 = texts.find((name)=>name !== titleProp && /text|description|body|summary|copy|answer|detail|caption/i.test(name))) != null ? _texts_find1 : texts.find((name)=>name !== titleProp);
|
|
951
951
|
const values = {};
|
|
952
|
-
if (titleProp && item.title.trim()) values[titleProp] = aiLayoutWords(item.title, 'itemTitle', facts);
|
|
953
|
-
if (textProp && item.text.trim()) values[textProp] = aiLayoutWords(item.text, 'itemText', facts);
|
|
952
|
+
if (titleProp && item.title.trim()) values[titleProp] = aiLayoutWords(item.title, 'itemTitle', facts, language);
|
|
953
|
+
if (textProp && item.text.trim()) values[textProp] = aiLayoutWords(item.text, 'itemText', facts, language);
|
|
954
954
|
const first = titleProp != null ? titleProp : textProp;
|
|
955
|
-
if (!Object.values(values).some(Boolean) && first) values[first] = aiLayoutWords(item.title || item.text, 'itemTitle', facts);
|
|
955
|
+
if (!Object.values(values).some(Boolean) && first) values[first] = aiLayoutWords(item.title || item.text, 'itemTitle', facts, language);
|
|
956
956
|
return values;
|
|
957
957
|
}
|
|
958
958
|
// ── Groups ────────────────────────────────────────────────────────────────
|
|
@@ -1009,7 +1009,7 @@ function itemSize(perRow) {
|
|
|
1009
1009
|
* a section, across all its groups, since eight are a list typed by hand.
|
|
1010
1010
|
*/ /** Whether an item has words left once they are cleaned and fitted: an item with none is no item. */ function speaks(scope, item) {
|
|
1011
1011
|
const facts = scope.page.targets.facts;
|
|
1012
|
-
return !!(aiLayoutWords(item.title, 'itemTitle', facts) || aiLayoutWords(item.text, 'itemText', facts));
|
|
1012
|
+
return !!(aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language) || aiLayoutWords(item.text, 'itemText', facts, scope.page.options.language));
|
|
1013
1013
|
}
|
|
1014
1014
|
/** A group's items with every part that has no words left once cleaned emptied, and wordless items left out. */ /** A title that only names the kind of thing it is: "Card", "Item 2", "Title". */ const AI_LAYOUT_PLACEHOLDER_TITLE = /^(?:card|item|title|heading|placeholder|tile|box|feature|service|post|article|entry)\s*\d*$/i;
|
|
1015
1015
|
function cleanItems(scope, items) {
|
|
@@ -1021,8 +1021,8 @@ function cleanItems(scope, items) {
|
|
|
1021
1021
|
component.id
|
|
1022
1022
|
]).map((name)=>name.trim().toLowerCase()));
|
|
1023
1023
|
return items.map((item)=>_extends({}, item, {
|
|
1024
|
-
title: aiLayoutWords(item.title, 'itemTitle', facts) && !references.has(item.title.trim().toLowerCase()) && !AI_LAYOUT_PLACEHOLDER_TITLE.test(item.title.trim()) ? item.title : '',
|
|
1025
|
-
text: aiLayoutWords(item.text, 'itemText', facts) ? item.text : ''
|
|
1024
|
+
title: aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language) && !references.has(item.title.trim().toLowerCase()) && !AI_LAYOUT_PLACEHOLDER_TITLE.test(item.title.trim()) ? item.title : '',
|
|
1025
|
+
text: aiLayoutWords(item.text, 'itemText', facts, scope.page.options.language) ? item.text : ''
|
|
1026
1026
|
})).filter((item)=>speaks(scope, item));
|
|
1027
1027
|
}
|
|
1028
1028
|
function takeItems(scope, items) {
|
|
@@ -1089,7 +1089,7 @@ function group(scope, block, room) {
|
|
|
1089
1089
|
function instances(scope, placed, items, perRow) {
|
|
1090
1090
|
const tree = scope.page.tree;
|
|
1091
1091
|
const ids = items.map((item)=>{
|
|
1092
|
-
const values = instanceValues(placed.props, item, scope.page.targets.facts);
|
|
1092
|
+
const values = instanceValues(placed.props, item, scope.page.targets.facts, scope.page.options.language);
|
|
1093
1093
|
return tree.add(REUSABLE_INSTANCE_COMPONENT_ID, _extends({
|
|
1094
1094
|
[AI_INSTANCE_REF_PROP]: placed.id
|
|
1095
1095
|
}, Object.keys(values).length ? {
|
|
@@ -1105,8 +1105,8 @@ function instances(scope, placed, items, perRow) {
|
|
|
1105
1105
|
const tree = scope.page.tree;
|
|
1106
1106
|
const facts = scope.page.targets.facts;
|
|
1107
1107
|
const pairs = items.map((item, position)=>{
|
|
1108
|
-
const title = block.kind === 'quotes' ? aiLayoutQuoteGap(item.text || item.title) : block.kind === 'stats' ? aiLayoutWords(item.title, 'stat', facts) : `${block.kind === 'steps' ? `${position + 1}. ` : ''}${aiLayoutWords(item.title, 'itemTitle', facts)}`;
|
|
1109
|
-
const text = block.kind === 'quotes' ? '[Customer name]' : aiLayoutWords(item.text, block.kind === 'stats' ? 'statLabel' : 'itemText', facts);
|
|
1108
|
+
const title = block.kind === 'quotes' ? aiLayoutQuoteGap(item.text || item.title, scope.page.options.language) : block.kind === 'stats' ? aiLayoutWords(item.title, 'stat', facts, scope.page.options.language) : `${block.kind === 'steps' ? `${position + 1}. ` : ''}${aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language)}`;
|
|
1109
|
+
const text = block.kind === 'quotes' ? '[Customer name]' : aiLayoutWords(item.text, block.kind === 'stats' ? 'statLabel' : 'itemText', facts, scope.page.options.language);
|
|
1110
1110
|
return tree.add('muiListItemText', _extends({
|
|
1111
1111
|
primary: title
|
|
1112
1112
|
}, text ? {
|
|
@@ -1128,12 +1128,12 @@ function instances(scope, placed, items, perRow) {
|
|
|
1128
1128
|
color: 'primary.main'
|
|
1129
1129
|
}, null, 'icon') : null,
|
|
1130
1130
|
item.title.trim() ? tree.add('muiTypography', {
|
|
1131
|
-
children: aiLayoutWords(item.title, 'itemTitle', facts),
|
|
1131
|
+
children: aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language),
|
|
1132
1132
|
variant: 'h5',
|
|
1133
1133
|
component: itemElement(scope)
|
|
1134
1134
|
}, null, null, 'title') : null,
|
|
1135
1135
|
item.text.trim() ? tree.add('muiTypography', {
|
|
1136
|
-
children: aiLayoutWords(item.text, 'itemText', facts),
|
|
1136
|
+
children: aiLayoutWords(item.text, 'itemText', facts, scope.page.options.language),
|
|
1137
1137
|
variant: 'body1'
|
|
1138
1138
|
}, {
|
|
1139
1139
|
color: 'text.secondary'
|
|
@@ -1168,12 +1168,12 @@ function instances(scope, placed, items, perRow) {
|
|
|
1168
1168
|
component: 'p'
|
|
1169
1169
|
}, accent(scope), null, 'number'),
|
|
1170
1170
|
item.title.trim() ? tree.add('muiTypography', {
|
|
1171
|
-
children: aiLayoutWords(item.title, 'itemTitle', facts),
|
|
1171
|
+
children: aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language),
|
|
1172
1172
|
variant: 'h5',
|
|
1173
1173
|
component: itemElement(scope)
|
|
1174
1174
|
}, null, null, 'title') : null,
|
|
1175
1175
|
item.text.trim() ? tree.add('muiTypography', {
|
|
1176
|
-
children: aiLayoutWords(item.text, 'itemText', facts),
|
|
1176
|
+
children: aiLayoutWords(item.text, 'itemText', facts, scope.page.options.language),
|
|
1177
1177
|
variant: 'body1'
|
|
1178
1178
|
}, muted(scope), null, 'text') : null
|
|
1179
1179
|
], 'step');
|
|
@@ -1187,20 +1187,20 @@ function instances(scope, placed, items, perRow) {
|
|
|
1187
1187
|
alignItems: 'center'
|
|
1188
1188
|
} : {}), null, [
|
|
1189
1189
|
tree.add('muiTypography', _extends({
|
|
1190
|
-
children: aiLayoutWords(item.title, 'stat', facts) || '[figure]',
|
|
1190
|
+
children: aiLayoutWords(item.title, 'stat', facts, scope.page.options.language) || '[figure]',
|
|
1191
1191
|
variant: 'h2',
|
|
1192
1192
|
component: 'p'
|
|
1193
1193
|
}, align(scope)), accent(scope), null, 'figure'),
|
|
1194
1194
|
item.text.trim() ? tree.add('muiTypography', _extends({
|
|
1195
|
-
children: aiLayoutWords(item.text, 'statLabel', facts),
|
|
1195
|
+
children: aiLayoutWords(item.text, 'statLabel', facts, scope.page.options.language),
|
|
1196
1196
|
variant: 'body2'
|
|
1197
1197
|
}, align(scope)), muted(scope), null, 'label') : null
|
|
1198
1198
|
], 'stat');
|
|
1199
1199
|
}
|
|
1200
1200
|
/** A quote slot: what a customer should be quoted saying, as the gap the owner fills. */ function quote(scope, item) {
|
|
1201
1201
|
const tree = scope.page.tree;
|
|
1202
|
-
const words = aiLayoutQuoteGap(item.text || item.title);
|
|
1203
|
-
const who = item.text && item.title ? aiLayoutFitText(item.title, 'statLabel') : '';
|
|
1202
|
+
const words = aiLayoutQuoteGap(item.text || item.title, scope.page.options.language);
|
|
1203
|
+
const who = item.text && item.title ? aiLayoutFitText(item.title, 'statLabel', scope.page.options.language) : '';
|
|
1204
1204
|
const stack = tree.add('muiStack', {
|
|
1205
1205
|
spacing: '2'
|
|
1206
1206
|
}, null, [
|
|
@@ -1215,7 +1215,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1215
1215
|
variant: 'body1'
|
|
1216
1216
|
}, null, null, 'quote'),
|
|
1217
1217
|
tree.add('muiTypography', {
|
|
1218
|
-
children: aiLayoutFitText(who ? `[Customer name], ${who.replace(/^\[|\]$/g, '')}` : '', 'note') || '[Customer name]',
|
|
1218
|
+
children: aiLayoutFitText(who ? `[Customer name], ${who.replace(/^\[|\]$/g, '')}` : '', 'note', scope.page.options.language) || '[Customer name]',
|
|
1219
1219
|
variant: 'subtitle2',
|
|
1220
1220
|
component: 'p'
|
|
1221
1221
|
}, null, null, 'attribution')
|
|
@@ -1240,7 +1240,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1240
1240
|
if (((_block_items = block.items) != null ? _block_items : []).some((item)=>item.to)) {
|
|
1241
1241
|
var _block_items2;
|
|
1242
1242
|
const links = ((_block_items2 = block.items) != null ? _block_items2 : []).flatMap((item)=>{
|
|
1243
|
-
const label = aiLayoutFitText(item.title || item.text, 'label');
|
|
1243
|
+
const label = aiLayoutFitText(item.title || item.text, 'label', scope.page.options.language);
|
|
1244
1244
|
const destination = label ? aiLayoutResolveLink(item.to, label, scope.link, scope.page.targets) : null;
|
|
1245
1245
|
if (!destination) return [];
|
|
1246
1246
|
const id = tree.add('muiScreenLink', _extends({
|
|
@@ -1260,7 +1260,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1260
1260
|
const lines = cleanItems(scope, (_block_items1 = block.items) != null ? _block_items1 : []).map((item)=>aiLayoutWords([
|
|
1261
1261
|
item.title,
|
|
1262
1262
|
item.text
|
|
1263
|
-
].filter((part)=>part.trim()).join(' — '), 'listItem', facts)).filter(Boolean);
|
|
1263
|
+
].filter((part)=>part.trim()).join(' — '), 'listItem', facts, scope.page.options.language)).filter(Boolean);
|
|
1264
1264
|
takeItemsInPlace(scope, lines);
|
|
1265
1265
|
if (!lines.length) return null;
|
|
1266
1266
|
if (rule1(scope)) {
|
|
@@ -1298,7 +1298,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1298
1298
|
var _block_items;
|
|
1299
1299
|
const tree = scope.page.tree;
|
|
1300
1300
|
const facts = scope.page.targets.facts;
|
|
1301
|
-
const items = takeItems(scope, cleanItems(scope, (_block_items = block.items) != null ? _block_items : []).filter((item)=>!!aiLayoutWords(item.title, 'question', facts)));
|
|
1301
|
+
const items = takeItems(scope, cleanItems(scope, (_block_items = block.items) != null ? _block_items : []).filter((item)=>!!aiLayoutWords(item.title, 'question', facts, scope.page.options.language)));
|
|
1302
1302
|
if (!items.length) return null;
|
|
1303
1303
|
if (rule1(scope)) {
|
|
1304
1304
|
const rows = items.map((item)=>tree.add('muiListItem', {
|
|
@@ -1306,9 +1306,9 @@ function instances(scope, placed, items, perRow) {
|
|
|
1306
1306
|
divider: true
|
|
1307
1307
|
}, null, [
|
|
1308
1308
|
tree.add('muiListItemText', _extends({
|
|
1309
|
-
primary: aiLayoutWords(item.title, 'question', facts)
|
|
1309
|
+
primary: aiLayoutWords(item.title, 'question', facts, scope.page.options.language)
|
|
1310
1310
|
}, item.text.trim() ? {
|
|
1311
|
-
secondary: aiLayoutWords(item.text, 'answer', facts)
|
|
1311
|
+
secondary: aiLayoutWords(item.text, 'answer', facts, scope.page.options.language)
|
|
1312
1312
|
} : {}), null, null, 'qa')
|
|
1313
1313
|
], 'row'));
|
|
1314
1314
|
return tree.add('muiList', {
|
|
@@ -1321,11 +1321,11 @@ function instances(scope, placed, items, perRow) {
|
|
|
1321
1321
|
defaultExpanded: true
|
|
1322
1322
|
} : {}), null, [
|
|
1323
1323
|
tree.add('muiAccordionSummary', {
|
|
1324
|
-
children: aiLayoutWords(item.title, 'question', facts)
|
|
1324
|
+
children: aiLayoutWords(item.title, 'question', facts, scope.page.options.language)
|
|
1325
1325
|
}, null, null, 'question'),
|
|
1326
1326
|
item.text.trim() ? tree.add('muiAccordionDetails', null, null, [
|
|
1327
1327
|
tree.add('muiTypography', {
|
|
1328
|
-
children: aiLayoutWords(item.text, 'answer', facts),
|
|
1328
|
+
children: aiLayoutWords(item.text, 'answer', facts, scope.page.options.language),
|
|
1329
1329
|
variant: 'body1'
|
|
1330
1330
|
}, {
|
|
1331
1331
|
color: 'text.secondary'
|
|
@@ -1356,7 +1356,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1356
1356
|
return AI_LAYOUT_MAX_DESIGN_PICTURES - page.images - page.pictures;
|
|
1357
1357
|
}
|
|
1358
1358
|
/** Whether a heading block has words left once fitted: one with none is no heading. */ function speaksHeading(scope, block) {
|
|
1359
|
-
return block.kind === 'heading' && !!aiLayoutWords(block.text, 'heading', scope.page.targets.facts);
|
|
1359
|
+
return block.kind === 'heading' && !!aiLayoutWords(block.text, 'heading', scope.page.targets.facts, scope.page.options.language);
|
|
1360
1360
|
}
|
|
1361
1361
|
/** The section root every designed section is written under, as `compileSection` writes its own. */ function designedRoot(scope, children, sx, dark) {
|
|
1362
1362
|
var _ref;
|
|
@@ -1365,7 +1365,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1365
1365
|
const name = ((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : (_page_plan_sections_index_name = _page_plan_sections_index.name) == null ? void 0 : _page_plan_sections_index_name.trim()) || `Section ${index + 1}`;
|
|
1366
1366
|
return page.tree.add('section', _extends({
|
|
1367
1367
|
element: 'section',
|
|
1368
|
-
ariaLabel: sectionLabel(name, index)
|
|
1368
|
+
ariaLabel: sectionLabel(name, index, page.options.language)
|
|
1369
1369
|
}, dark ? {
|
|
1370
1370
|
colorScheme: 'dark'
|
|
1371
1371
|
} : {}, index === 0 && scope.overPhoto ? {
|
|
@@ -1409,7 +1409,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1409
1409
|
}
|
|
1410
1410
|
/** What a stand-in picture is of, for a stock search: the section's subject, else the site's. */ function standInAlt(scope, words) {
|
|
1411
1411
|
var _scope_page_plan_sections_scope_index;
|
|
1412
|
-
return aiLayoutFitText(words, 'alt') || aiLayoutFitText(scope.heading, 'alt') || aiLayoutFitText((_scope_page_plan_sections_scope_index = scope.page.plan.sections[scope.index]) == null ? void 0 : _scope_page_plan_sections_scope_index.name, 'alt') || aiLayoutFitText(scope.page.plan.title, 'alt') || 'A photo';
|
|
1412
|
+
return aiLayoutFitText(words, 'alt', scope.page.options.language) || aiLayoutFitText(scope.heading, 'alt', scope.page.options.language) || aiLayoutFitText((_scope_page_plan_sections_scope_index = scope.page.plan.sections[scope.index]) == null ? void 0 : _scope_page_plan_sections_scope_index.name, 'alt', scope.page.options.language) || aiLayoutFitText(scope.page.plan.title, 'alt', scope.page.options.language) || 'A photo';
|
|
1413
1413
|
}
|
|
1414
1414
|
/** A grid row of sized cells, as `compileRow` writes one, from ids already compiled. */ function designRow(scope, cells, spacing, alignItems = 'center') {
|
|
1415
1415
|
const tree = scope.page.tree;
|
|
@@ -1462,7 +1462,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1462
1462
|
style: 'large'
|
|
1463
1463
|
});
|
|
1464
1464
|
sellingHero(scope, flow);
|
|
1465
|
-
const given = images[0] ? aiLayoutFitText(images[0].text, 'alt') : '';
|
|
1465
|
+
const given = images[0] ? aiLayoutFitText(images[0].text, 'alt', scope.page.options.language) : '';
|
|
1466
1466
|
return hero(scope, raw, flow, given ? {
|
|
1467
1467
|
alt: given,
|
|
1468
1468
|
given: true
|
|
@@ -1838,12 +1838,12 @@ function instances(scope, placed, items, perRow) {
|
|
|
1838
1838
|
spacing: '1'
|
|
1839
1839
|
}, null, [
|
|
1840
1840
|
item.title.trim() ? tree.add('muiTypography', {
|
|
1841
|
-
children: aiLayoutWords(item.title, 'itemTitle', facts),
|
|
1841
|
+
children: aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language),
|
|
1842
1842
|
variant: 'h5',
|
|
1843
1843
|
component: itemElement(scope)
|
|
1844
1844
|
}, null, null, 'title') : null,
|
|
1845
1845
|
item.text.trim() ? tree.add('muiTypography', {
|
|
1846
|
-
children: aiLayoutWords(item.text, 'itemText', facts),
|
|
1846
|
+
children: aiLayoutWords(item.text, 'itemText', facts, scope.page.options.language),
|
|
1847
1847
|
variant: 'body1'
|
|
1848
1848
|
}, muted(scope), null, 'text') : null
|
|
1849
1849
|
], 'stepWords')
|
|
@@ -1855,12 +1855,12 @@ function instances(scope, placed, items, perRow) {
|
|
|
1855
1855
|
const tree = page.tree;
|
|
1856
1856
|
const facts = page.targets.facts;
|
|
1857
1857
|
const title = (item, type = 'h5')=>item.title.trim() ? tree.add('muiTypography', {
|
|
1858
|
-
children: aiLayoutWords(item.title, 'itemTitle', facts),
|
|
1858
|
+
children: aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language),
|
|
1859
1859
|
variant: type,
|
|
1860
1860
|
component: itemElement(scope)
|
|
1861
1861
|
}, null, null, 'title') : null;
|
|
1862
1862
|
const words = (item, type = 'body1')=>item.text.trim() ? tree.add('muiTypography', {
|
|
1863
|
-
children: aiLayoutWords(item.text, 'itemText', facts),
|
|
1863
|
+
children: aiLayoutWords(item.text, 'itemText', facts, scope.page.options.language),
|
|
1864
1864
|
variant: type
|
|
1865
1865
|
}, muted(scope), null, 'text') : null;
|
|
1866
1866
|
if (variant === 'cards') return null;
|
|
@@ -2133,7 +2133,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2133
2133
|
const name = ((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : (_page_plan_sections_index_name = _page_plan_sections_index.name) == null ? void 0 : _page_plan_sections_index_name.trim()) || `Section ${index + 1}`;
|
|
2134
2134
|
return tree.add('section', _extends({
|
|
2135
2135
|
element: 'section',
|
|
2136
|
-
ariaLabel: sectionLabel(name, index)
|
|
2136
|
+
ariaLabel: sectionLabel(name, index, page.options.language)
|
|
2137
2137
|
}, scope.band === 'dark' ? {
|
|
2138
2138
|
colorScheme: 'dark'
|
|
2139
2139
|
} : {}), underTitle ? null : bandSx(scope.band), [
|
|
@@ -2153,7 +2153,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2153
2153
|
const { page, index, at } = scope;
|
|
2154
2154
|
const tree = page.tree;
|
|
2155
2155
|
const given = blocks.find((block)=>speaksHeading(scope, block));
|
|
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);
|
|
2156
|
+
const heading = aiLayoutWords(given == null ? void 0 : given.text, 'heading', page.targets.facts, scope.page.options.language) || aiLayoutFitText((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name, 'heading', scope.page.options.language) || aiLayoutLabel('reviewsHeading', page.options.language);
|
|
2157
2157
|
page.settled.push({
|
|
2158
2158
|
at,
|
|
2159
2159
|
what: "the store's own reviews placed: shown once shoppers leave them, never written for them"
|
|
@@ -2387,12 +2387,12 @@ function listingSection(scope, blocks, placed) {
|
|
|
2387
2387
|
size: '32'
|
|
2388
2388
|
}, accent(scope), null, 'icon'),
|
|
2389
2389
|
item.title.trim() ? tree.add('muiTypography', _extends({
|
|
2390
|
-
children: aiLayoutWords(item.title, 'itemTitle', facts),
|
|
2390
|
+
children: aiLayoutWords(item.title, 'itemTitle', facts, scope.page.options.language),
|
|
2391
2391
|
variant: 'h6',
|
|
2392
2392
|
component: itemElement(scope)
|
|
2393
2393
|
}, textAlign), null, null, 'title') : null,
|
|
2394
2394
|
item.text.trim() ? tree.add('muiTypography', _extends({
|
|
2395
|
-
children: aiLayoutWords(item.text, 'itemText', facts),
|
|
2395
|
+
children: aiLayoutWords(item.text, 'itemText', facts, scope.page.options.language),
|
|
2396
2396
|
variant: 'body2'
|
|
2397
2397
|
}, textAlign), muted(scope), null, 'text') : null
|
|
2398
2398
|
], 'iconItem');
|
|
@@ -2650,7 +2650,7 @@ function listingSection(scope, blocks, placed) {
|
|
|
2650
2650
|
const portrait = ((_page_design = page.design) == null ? void 0 : _page_design.input.kind) === 'photography' || RECORD_PEOPLE.test(listing.name);
|
|
2651
2651
|
const picture = photoField ? tree.add('image', _extends({
|
|
2652
2652
|
src: `{{item.${photoField}}}`,
|
|
2653
|
-
alt: fields.title ? `{{item.${fields.title}}}` : aiLayoutFitText(listing.name, 'alt') || 'A photo',
|
|
2653
|
+
alt: fields.title ? `{{item.${fields.title}}}` : aiLayoutFitText(listing.name, 'alt', scope.page.options.language) || 'A photo',
|
|
2654
2654
|
objectFit: 'cover',
|
|
2655
2655
|
width: '100%',
|
|
2656
2656
|
loading: 'lazy'
|