@aglyn/plugins-ai 1.0.0-beta.270 → 1.0.0-beta.271
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.d.ts +1 -1
- package/src/lib/activity/ai-activity-actions.js +1 -0
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/assets/site-styles/beauty.webp +0 -0
- package/src/lib/assets/site-styles/blog.webp +0 -0
- package/src/lib/assets/site-styles/business.webp +0 -0
- package/src/lib/assets/site-styles/coming-soon.webp +0 -0
- package/src/lib/assets/site-styles/education.webp +0 -0
- package/src/lib/assets/site-styles/events.webp +0 -0
- package/src/lib/assets/site-styles/fitness.webp +0 -0
- package/src/lib/assets/site-styles/landing.webp +0 -0
- package/src/lib/assets/site-styles/music.webp +0 -0
- package/src/lib/assets/site-styles/nonprofit.webp +0 -0
- package/src/lib/assets/site-styles/personal.webp +0 -0
- package/src/lib/assets/site-styles/photography.webp +0 -0
- package/src/lib/assets/site-styles/portfolio.webp +0 -0
- package/src/lib/assets/site-styles/professional.webp +0 -0
- package/src/lib/assets/site-styles/realestate.webp +0 -0
- package/src/lib/assets/site-styles/restaurant.webp +0 -0
- package/src/lib/assets/site-styles/store.webp +0 -0
- package/src/lib/assets/site-styles/studio.webp +0 -0
- package/src/lib/assets/site-styles/trades.webp +0 -0
- package/src/lib/assets/site-styles/wellness.webp +0 -0
- package/src/lib/assets/site-styles/yoga.webp +0 -0
- package/src/lib/components/ai-credits-card.component.d.ts +4 -3
- package/src/lib/components/ai-credits-card.component.js +15 -15
- package/src/lib/components/ai-credits-card.component.js.map +1 -1
- package/src/lib/components/ai-job-input-form.component.d.ts +36 -0
- package/src/lib/components/ai-job-input-form.component.js +100 -0
- package/src/lib/components/ai-job-input-form.component.js.map +1 -0
- package/src/lib/components/ai-job-requests.d.ts +4 -0
- package/src/lib/components/ai-job-requests.js +4 -0
- package/src/lib/components/ai-job-requests.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 +99 -31
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-site-start-steps.component.d.ts +43 -2
- package/src/lib/components/ai-site-start-steps.component.js +651 -15
- package/src/lib/components/ai-site-start-steps.component.js.map +1 -1
- package/src/lib/components/ai-site-start-tracking.d.ts +10 -0
- package/src/lib/components/ai-site-start-tracking.js +14 -0
- package/src/lib/components/ai-site-start-tracking.js.map +1 -1
- package/src/lib/components/ai-site-style-previews.js +26 -22
- package/src/lib/components/ai-site-style-previews.js.map +1 -1
- package/src/lib/components/ai-upsell-dialog.component.d.ts +7 -5
- package/src/lib/components/ai-upsell-dialog.component.js +8 -6
- package/src/lib/components/ai-upsell-dialog.component.js.map +1 -1
- package/src/lib/components/assist-build-card.component.js +11 -1
- package/src/lib/components/assist-build-card.component.js.map +1 -1
- package/src/lib/components/assist-jobs-drawer.component.js +9 -1
- package/src/lib/components/assist-jobs-drawer.component.js.map +1 -1
- package/src/lib/components/assist-panel.component.js +8 -4
- package/src/lib/components/assist-panel.component.js.map +1 -1
- package/src/lib/components/staff-org-ai-card.component.js +4 -7
- package/src/lib/components/staff-org-ai-card.component.js.map +1 -1
- package/src/lib/declarations.d.ts +2 -2
- package/src/lib/declarations.js +9 -5
- package/src/lib/declarations.js.map +1 -1
- package/src/lib/jobs/ai-build-capabilities.js +3 -1
- package/src/lib/jobs/ai-build-capabilities.js.map +1 -1
- package/src/lib/jobs/ai-business-profile-prefill.d.ts +1 -1
- package/src/lib/jobs/ai-business-profile-prefill.js +14 -3
- package/src/lib/jobs/ai-business-profile-prefill.js.map +1 -1
- package/src/lib/jobs/ai-job-build-step.js +5 -3
- package/src/lib/jobs/ai-job-build-step.js.map +1 -1
- package/src/lib/jobs/ai-job-form-step.d.ts +15 -1
- package/src/lib/jobs/ai-job-form-step.js +75 -8
- package/src/lib/jobs/ai-job-form-step.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +13 -0
- package/src/lib/jobs/ai-job-page-language.js +37 -1
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.d.ts +17 -0
- package/src/lib/jobs/ai-job-page-step.js +37 -16
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +25 -2
- package/src/lib/jobs/ai-job-plan-step.js +103 -29
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-settings-step.js +4 -3
- package/src/lib/jobs/ai-job-settings-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-datasets.d.ts +27 -0
- package/src/lib/jobs/ai-job-site-datasets.js +140 -14
- package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
- package/src/lib/jobs/ai-job-site-look.js +18 -5
- package/src/lib/jobs/ai-job-site-look.js.map +1 -1
- package/src/lib/jobs/ai-job-site-step.d.ts +16 -1
- package/src/lib/jobs/ai-job-site-step.js +95 -22
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-job-text-step.d.ts +8 -1
- package/src/lib/jobs/ai-job-text-step.js.map +1 -1
- package/src/lib/jobs/ai-job-tracking-step.d.ts +14 -3
- package/src/lib/jobs/ai-job-tracking-step.js +28 -5
- package/src/lib/jobs/ai-job-tracking-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs.d.ts +8 -1
- package/src/lib/jobs/ai-jobs.js +63 -8
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +27 -2
- package/src/lib/jobs/ai-layout-stock-photos.js +190 -19
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
- package/src/lib/jobs/ai-site-inspiration-signals.d.ts +98 -0
- package/src/lib/jobs/ai-site-inspiration-signals.js +585 -0
- package/src/lib/jobs/ai-site-inspiration-signals.js.map +1 -0
- package/src/lib/jobs/ai-site-inspiration.d.ts +157 -0
- package/src/lib/jobs/ai-site-inspiration.js +346 -0
- package/src/lib/jobs/ai-site-inspiration.js.map +1 -0
- package/src/lib/jobs/ai-site-publish.d.ts +26 -1
- package/src/lib/jobs/ai-site-publish.js +162 -13
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/ai-theme-brand-inputs.d.ts +16 -0
- package/src/lib/jobs/ai-theme-brand-inputs.js +18 -4
- package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -1
- package/src/lib/jobs/fixtures/ai-candle-shop-free-plan-recording.d.ts +97 -0
- package/src/lib/jobs/fixtures/ai-candle-shop-free-plan-recording.js +137 -0
- package/src/lib/jobs/fixtures/ai-candle-shop-free-plan-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-site-inspiration-pages.d.ts +38 -0
- package/src/lib/jobs/fixtures/ai-site-inspiration-pages.js +103 -0
- package/src/lib/jobs/fixtures/ai-site-inspiration-pages.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3988-recordings.d.ts +25 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3988-recordings.js +174 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3988-recordings.js.map +1 -0
- package/src/lib/layout-language/ai-layout-compiler.d.ts +1 -1
- package/src/lib/layout-language/ai-layout-compiler.js +438 -25
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-contact.d.ts +57 -0
- package/src/lib/layout-language/ai-layout-contact.js +137 -0
- package/src/lib/layout-language/ai-layout-contact.js.map +1 -0
- package/src/lib/layout-language/ai-layout-copy.d.ts +12 -0
- package/src/lib/layout-language/ai-layout-copy.js +34 -2
- package/src/lib/layout-language/ai-layout-copy.js.map +1 -1
- package/src/lib/layout-language/ai-layout-design.d.ts +65 -8
- package/src/lib/layout-language/ai-layout-design.js +411 -97
- package/src/lib/layout-language/ai-layout-design.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame.js +23 -0
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-labels.d.ts +2 -0
- package/src/lib/layout-language/ai-layout-labels.js +12 -6
- package/src/lib/layout-language/ai-layout-labels.js.map +1 -1
- package/src/lib/layout-language/ai-layout-language.d.ts +3 -2
- package/src/lib/layout-language/ai-layout-language.js +4 -3
- package/src/lib/layout-language/ai-layout-language.js.map +1 -1
- package/src/lib/layout-language/ai-layout-links.d.ts +13 -0
- package/src/lib/layout-language/ai-layout-links.js +30 -0
- package/src/lib/layout-language/ai-layout-links.js.map +1 -1
- package/src/lib/layout-language/ai-layout-pictures.d.ts +49 -6
- package/src/lib/layout-language/ai-layout-pictures.js +145 -22
- package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
- package/src/lib/model/ai-build-job.d.ts +16 -1
- package/src/lib/model/ai-build-job.js +40 -0
- package/src/lib/model/ai-build-job.js.map +1 -1
- package/src/lib/model/ai-job-input.d.ts +33 -0
- package/src/lib/model/ai-job-input.js +59 -0
- package/src/lib/model/ai-job-input.js.map +1 -0
- package/src/lib/model/ai-job-notice.d.ts +4 -0
- package/src/lib/model/ai-job-notice.js +11 -1
- package/src/lib/model/ai-job-notice.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +40 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-site-details.d.ts +122 -0
- package/src/lib/model/ai-site-details.js +300 -0
- package/src/lib/model/ai-site-details.js.map +1 -0
- package/src/lib/model/ai-site-entity.d.ts +181 -0
- package/src/lib/model/ai-site-entity.js +390 -0
- package/src/lib/model/ai-site-entity.js.map +1 -0
- package/src/lib/model/ai-site-inspiration.d.ts +72 -0
- package/src/lib/model/ai-site-inspiration.js +109 -0
- package/src/lib/model/ai-site-inspiration.js.map +1 -0
- package/src/lib/model/ai-site-job.d.ts +13 -1
- package/src/lib/model/ai-site-job.js +15 -2
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-kinds.js +109 -21
- package/src/lib/model/ai-site-kinds.js.map +1 -1
- package/src/lib/model/ai-site-look.d.ts +10 -0
- package/src/lib/model/ai-site-look.js +24 -0
- package/src/lib/model/ai-site-look.js.map +1 -1
- package/src/lib/model/ai-site-start-seo.d.ts +19 -5
- package/src/lib/model/ai-site-start-seo.js +25 -7
- package/src/lib/model/ai-site-start-seo.js.map +1 -1
- package/src/lib/model/ai-site-start-steps.d.ts +9 -3
- package/src/lib/model/ai-site-start-steps.js +67 -5
- package/src/lib/model/ai-site-start-steps.js.map +1 -1
- package/src/lib/model/ai-site-start.d.ts +68 -4
- package/src/lib/model/ai-site-start.js +166 -13
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/model/ai-upsell-copy.js +4 -1
- package/src/lib/model/ai-upsell-copy.js.map +1 -1
- package/src/lib/plan-entitlements.d.ts +4 -3
- package/src/lib/plan-entitlements.js +3 -8
- package/src/lib/plan-entitlements.js.map +1 -1
- package/src/lib/runtime/ai-dataset-generation.d.ts +8 -1
- package/src/lib/runtime/ai-dataset-generation.js +12 -2
- package/src/lib/runtime/ai-dataset-generation.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +26 -33
- package/src/lib/runtime/ai-doctrine-validators.js +54 -44
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.js +1 -1
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-node-tree.d.ts +7 -0
- package/src/lib/runtime/ai-node-tree.js +9 -1
- package/src/lib/runtime/ai-node-tree.js.map +1 -1
- package/src/lib/server/ai-create-route.d.ts +1 -1
- package/src/lib/server/ai-create-route.js +3 -4
- package/src/lib/server/ai-create-route.js.map +1 -1
- package/src/lib/server/ai-jobs-resume.js +27 -3
- package/src/lib/server/ai-jobs-resume.js.map +1 -1
- package/src/lib/server/ai-jobs-route.js +7 -0
- package/src/lib/server/ai-jobs-route.js.map +1 -1
- package/src/lib/usage/assist-credits.d.ts +4 -4
- package/src/lib/usage/assist-credits.js +4 -4
- package/src/lib/usage/assist-credits.js.map +1 -1
- package/src/lib/usage/staff-org-ai-view.js +6 -3
- package/src/lib/usage/staff-org-ai-view.js.map +1 -1
- package/src/lib/usage/staff-org-ai.d.ts +4 -2
- package/src/lib/usage/staff-org-ai.js +7 -7
- package/src/lib/usage/staff-org-ai.js.map +1 -1
- package/src/lib/usage/staff-org-usage-ai.js +2 -2
- package/src/lib/usage/staff-org-usage-ai.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-stock-photo-agl3988-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 BETA.270 SUGAR HOLLOW PHOTOGRAPHY\n * GUIDED START (AGL-3988): host MBuUDI70oE, job DQ9pZupq6M, 2026-10-19\n * 19:01Z, \"a wedding and family photographer in the Blue Ridge Mountains\n * who books sessions and elopements\". What production's `stockPhotoSearches`\n * cache held for the searches its \"Gallery collections\" covers and its home\n * and contact heroes sent, read back by each search's key, never searched\n * again. Ids, sizes, page slugs and tags are Pixabay's own, in its order;\n * the contributor is left out, and one contributor stands for all. Its\n * `wedding couple mountains` answer is the beta.267 Copper Hollow cache\n * entry (`ai-stock-photo-agl3942-recordings.ts`).\n */\n\nconst hit = (id: number, width: number, height: number, slug: string, tags: string): 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 ? tags.split(', ') : [],\n downloadUrl: `https://pixabay.com/get/g${id}_1280.jpg`,\n }) as StockPhoto\n\n/** `couple mountains` (horizontal, min_width 900), sent by the \"Gallery collections\" covers; answered 2026-10-19T19:03:23.174Z. */\nexport const COUPLE_MOUNTAINS_0919: StockPhoto[] = [\n hit(7126126, 1280, 853, 'sunset-couple-sky-clouds-mountain-7126126', 'sunset, couple, sky, clouds, mountain, love, nature, couple, love, love, love, love, love'),\n hit(7490522, 1280, 853, 'sunset-silhouettes-romantic-7490522', 'sunset, silhouettes, nature, romantic, together, love, romance, couple'),\n hit(2179256, 1280, 855, 'couple-lake-mountains-point-2179256', 'couple, lake, mountains, point, pointing, lovers, together, hikers, mountaineers, sit, sitting, adventure, mountain lake, alps, daylight, fir trees, hike, hiking, idyllic, landscape'),\n hit(6561172, 1280, 853, 'boat-lake-few-to-travel-tourism-6561172', 'boat, lake, nature, few, to travel, tourism, outdoors, exploration, adventure, sunset, ship, sail, sea, ocean, horizon, seascape, dusk, sailing ship, masts, windjammer'),\n hit(6017739, 1280, 853, 'couple-lovers-kiss-wedding-love-6017739', 'couple, lovers, kiss, wedding, love, romantic, happy, joy, affection, pier, couple, lovers, lovers, kiss, kiss, wedding, wedding, wedding, wedding, wedding'),\n hit(6704262, 1280, 853, 'couple-love-romance-wedding-bride-6704262', 'couple, love, romance, wedding, bride, groom, marriage, affection, together, couple, couple, couple, love, love, love, wedding, wedding, wedding, wedding, wedding'),\n hit(4329036, 1280, 848, 'loves-couple-romantic-sky-sun-4329036', 'loves, couple, romantic, sky, sun, nature, outdoors, together'),\n hit(4900493, 1280, 853, 'road-couple-travel-dessert-4900493', 'road, couple, travel, dessert, road, couple, couple, couple, couple, couple, travel'),\n hit(8574590, 1280, 854, 'morning-sunshine-sunrise-nature-8574590', 'morning, sunshine, sunrise, beautiful flowers, nature, couple, love, sunray, tree, bench, bush, flower background, flower wallpaper, flower, lake, mountain'),\n hit(8497575, 1280, 851, 'mountains-mountain-peak-8497575', 'mountains, mountain peak, cortina d\\'ampezzo, italy, winding road, pine forest, forest, clouds, nature, people, walking, hike, people, people, people, people, people'),\n hit(9215839, 1280, 853, 'couple-boat-shore-lake-coast-love-9215839', 'couple, nature, boat, shore, lake, coast, love, portrait'),\n hit(7144049, 1280, 853, 'valentines-day-background-wedding-7144049', 'valentines day background, wedding, happy, love, nature, sunset, mountain, cloud, forest, wife, husband, pair'),\n hit(7061929, 1280, 853, 'couple-love-nature-sunset-meadow-7061929', 'couple, love, nature, sunset, meadow, romantic, romance, together, man, woman, happiness, couple, love, love, love, love, love, sunset'),\n hit(6562725, 1280, 853, 'couple-sunset-silhouette-love-6562725', 'couple, sunset, silhouette, love, romance, lovers, romantic, relationship, nature, together, man, woman, dusk, dark'),\n hit(5267726, 1280, 853, 'couple-guy-girl-dog-mountain-5267726', 'couple, guy, girl, dog, mountain, mountains, nature, people, hug, pet, romantic, friendship, look, far, future, trail, destiny, animal, open, trip'),\n hit(6230410, 1280, 949, 'bride-groom-wedding-6230410', 'bride, groom, wedding, wedding photography, bridal gown, bridal dress, couple, pair, together, love, lovers, newlyweds, bridal, wedding dress, marriage, woman, fashion, dress, man, people'),\n hit(6770226, 1280, 854, 'couple-countryside-garden-tourists-6770226', 'couple, flower wallpaper, beautiful flowers, countryside, garden, flower background, nature, tourists, flowers'),\n hit(7130484, 1280, 849, 'beach-sea-ocean-love-couple-sand-7130484', 'beach, sea, ocean, love, couple, sand, holiday, nature, outdoors'),\n hit(8028185, 1280, 853, 'bride-groom-wedding-marriage-8028185', 'bride, groom, wedding, marriage, couple, love, bridal gown, model, natural, girl, woman, beautiful, wedding, natural, natural, natural, natural, natural'),\n hit(10480224, 1280, 853, 'sunset-lake-couple-paddling-dusk-10480224', 'sunset, lake, couple, paddling, dusk, romantic, red sky, mountains, silhouette, water sport, tranquility, nature, blue, evening, rowing, silence, evening sky, calm water, fiery sunset, symmetry'),\n hit(5693164, 1280, 853, 'couple-newlyweds-bride-groom-5693164', 'couple, newlyweds, bride, groom, holding hands, pair, love, people, relationship, together, couple, couple, couple, couple, couple, bride, holding hands'),\n hit(9553864, 1280, 854, 'utliberg-switzerland-nature-9553864', 'utliberg, switzerland, nature, landscape, alps, hike, swiss, winter, uetliberg, zurich, excursion'),\n hit(7003291, 1280, 853, 'wedding-snow-prenup-shoot-winter-7003291', 'wedding, snow, prenup shoot, winter, mountains, bride, groom, marriage, man, woman, couple, together, love, garden, nature, snowscape, landscape'),\n hit(6935359, 1280, 853, 'couple-river-holding-hands-mountain-6935359', 'couple, river, holding hands, mountain, walking, man, woman, sky, romantic, love, nature, holding hands, holding hands, holding hands, holding hands, holding hands'),\n hit(4650819, 1280, 619, 'mountain-landscape-nature-4650819', 'mountain, landscape, nature, kiss in the mountains, couple, love, scenic, darling, composition'),\n hit(7140471, 1280, 853, 'monkeys-primates-animals-wildlife-7140471', 'monkeys, primates, animals, wildlife, pair, couple, portrait, mountain, nature, gibraltar'),\n hit(7162791, 1280, 797, 'couple-outdoors-mountain-7162791', 'couple, outdoors, mountain, mountain peak, resting, relaxing, nature, cold, hiking'),\n hit(4388267, 1280, 853, 'manipulation-crescent-moon-couple-4388267', 'manipulation, crescent, moon, couple, romantic, love, sunset, landscape, hill, mountain, nature, birds'),\n hit(2521221, 1280, 761, 'fantasy-dream-cartoon-drawing-2521221', 'fantasy, dream, cartoon, drawing, design, magic, flower background, sweet, girl, nature, animal, fairytale, beautiful flowers, princess, cloud, landscape, happy, mountain, flower wallpaper, night sky'),\n hit(2597270, 1280, 853, 'clouds-sky-mountain-people-woman-2597270', 'clouds, sky, mountain, people, woman, holding hands, guy, nature, dating, blue nature, blue sky, blue mountain, blue clouds, dating, dating, dating, dating, dating'),\n hit(4897535, 1280, 853, 'mountain-snow-winter-cold-couple-4897535', 'mountain, snow, winter, cold, couple, color, landscape, nature, outdoors, happy'),\n hit(2560893, 1280, 854, 'mountain-highland-cloud-sky-peak-2560893', 'mountain, highland, cloud, sky, peak, landscape, nature, valley, people, couple, man, girl, hug, kiss, couple, couple, couple, couple, hug, hug'),\n hit(3916295, 1280, 856, 'landscape-mountain-summit-clouds-3916295', 'landscape, mountain, summit, clouds, sunset, sun, silhouette, couple, countryside, nature, winter, freedom, clermont ferrand, puy de dôme, france, europe, brown mountain'),\n hit(4855390, 1280, 853, 'ninh-binh-couple-travel-boat-4855390', 'ninh binh, nature, couple, travel, boat, mountain'),\n hit(3385783, 1280, 1070, 'silhouette-night-tree-dog-star-3385783', 'silhouette, pet, night, tree, dog, star, animal, starry sky, mountain, couple, nature, bank'),\n hit(2567022, 1280, 853, 'people-woman-man-hug-love-couple-2567022', 'people, woman, man, hug, nature, love, couple, sunset'),\n hit(2506868, 1280, 768, 'wedding-marriage-day-fancy-colored-2506868', 'wedding, marriage, day, fancy, colored, month, rainbow, mountain, couple, nature, tree, castle, fog, forest, could, sky, kiss'),\n hit(4010627, 1280, 720, 'beach-couple-mountain-cloud-ride-4010627', 'beach, couple, nature, mountain, cloud, ride, ocean, umbrella, valentine'),\n hit(7612157, 1280, 816, 'couple-the-glacier-mountains-7612157', 'couple, the glacier, mountains, trekking, tour, jungfrau, switzerland, top, together, tourist, walk together, backpack, mountain hike, mountain path, travel with a backpack, recreation, fresh air, nature, wanderers, adventure'),\n hit(3732779, 1280, 856, 'mountain-top-adventure-hiking-3732779', 'mountain, top, adventure, hiking, travel, couple, freedom, hiker, trekking, man, silhouette, backpacker, nature, blue sky, sky, blue, sunset, sunrise, landscape, fitness'),\n]\n\n/** `family mountains` (horizontal, min_width 900), sent by the \"Gallery collections\" covers; answered 2026-10-19T19:03:23.576Z. */\nexport const FAMILY_MOUNTAINS_0919: StockPhoto[] = [\n hit(920131, 1280, 814, 'children-hug-siblings-brother-920131', 'children, hug, siblings, brother, sister, kiss, affection, affectionate, hugging, embrace, love, relationship, together, portrait, little boy, little girl, friends, childhood, cute, people'),\n hit(4610864, 1280, 853, 'family-hike-travel-alps-4610864', 'family, hike, nature, travel, alps, distant view, hochwald, fir trees, mountains, wallberg, summit, picnic, hiking area, recreation, leisure time, mood, bavaria'),\n hit(4355469, 1280, 853, 'children-girl-hiking-trail-4355469', 'children, girl, hiking, trail, forest road, three, nature, landscape, path, forest, away, woman, person, wanderer, tourism, vacations, sunny, sunny day, mountain hiking, hiking'),\n hit(9822301, 1280, 831, 'viet-nam-flag-country-family-9822301', 'viet nam, flag, country, family, portrait, cute, girl, mother'),\n hit(6775216, 1280, 853, 'hike-nature-travel-adventure-6775216', 'hike, nature, travel, adventure, family, outdoors, forest, drought, pico ruivo, trekking, adventure, adventure, family, family, family, drought, drought, drought, drought, drought'),\n hit(5483516, 1280, 853, 'great-wall-of-china-beijing-china-5483516', 'great wall of china, beijing, china, asia, chinese, travel, adventure, visit, destination, family, great wall, architecture, historical, landmark, tourist attraction, history, places of interest, stone wall, china, china'),\n hit(6935341, 1280, 853, 'mother-daughter-outdoors-parent-6935341', 'mother, daughter, outdoors, parent, baby, child, people, family, love, closeup'),\n hit(3071287, 1280, 853, 'lake-waters-reflection-flow-3071287', 'lake, waters, reflection, flow, nature, mountain, web, family, mountains'),\n hit(7843738, 1280, 853, 'family-travel-mountain-forest-tree-7843738', 'family, travel, mountain, forest, nature, tree, thai nguyen, fun, vietnam'),\n hit(9605495, 1280, 853, 'spring-field-kids-sun-clouds-bird-9605495', 'spring, field, kids, nature, sun, clouds, bird, moutains, meadow'),\n hit(1807560, 1280, 777, 'teddy-bear-toys-asia-bali-kids-1807560', 'teddy bear, toys, asia, bali, kids, china, daughter, family, nature, farm, farmer, harvesting, mountains, people, plant, countryside, sewing, fabrics, woman, mother'),\n hit(1822446, 1280, 821, 'agriculture-rice-field-farming-asia-1822446', 'agriculture, rice field, farming, asia, cambodia, culture, farm, farmers, harvest, terrain, laos, happy mothers day, mountain, countryside, sa pa, valley, vietnam, village, thailand, county'),\n hit(3238401, 1280, 853, 'lifestyle-nature-ease-funny-family-3238401', 'lifestyle, nature, ease, funny, family, kid, union, girl, young, outdoors, joy, love, friendship, kids, smile, happiness, happy kids, family, kids, kids'),\n hit(165077, 1280, 837, 'sunset-sundown-da-nang-bay-165077', 'sunset, sundown, nature, da nang bay, danang city, vietnam, beach'),\n hit(4574003, 1280, 853, 'mountain-mint-clinopodium-nepeta-4574003', 'mountain mint, clinopodium nepeta, small-flowered mountain mint, kölme, lamiaceae, lip flower family, steinquendel, blossoms, blue, violet, alpine plant, mountain mint, mountain mint, mountain mint, mountain mint, mountain mint'),\n hit(6883668, 1280, 853, 'goat-mammal-mother-baby-family-6883668', 'goat, mammal, mother, baby, family, animal, nature, mountain, gerês, portugal'),\n hit(7420557, 1280, 853, 'snow-mountain-trillium-lake-7420557', 'snow mountain, trillium lake, paddle board, nature, child, childhood, summer, family, portland, oregon'),\n hit(275998, 1280, 844, 'sunset-sundown-da-nang-bay-275998', 'sunset, sundown, da nang bay, danang city, central vietnam, vietnam, nature, brown city, brown sunset'),\n hit(854005, 1280, 854, 'people-papa-man-child-girl-meadow-854005', 'people, papa, man, child, girl, meadow, wheelbarrows, mountains, in height, country life, nature, outdoors, sunset, lighting mood, people, papa, country life, country life, country life, country life'),\n hit(3218863, 1280, 853, 'man-child-father-lake-early-fog-3218863', 'man, child, father, lake, early fog, fog, mountains, web, fathers day, waters, people, nature, water, buoy, landscape, fathers day, fathers day, fathers day, fathers day, fathers day'),\n hit(10386423, 1280, 853, 'monkey-macaque-family-interaction-10386423', 'monkey, macaque, family, interaction, dialogue, friendly, nature, cliff, companionship, tourist path, natural habitat, curiosity, group, undershirt, bun, excursion, natural beauty, summer time, observation'),\n hit(838221, 1280, 853, 'boys-brothers-child-fun-little-838221', 'boys, brothers, child, fun, little, childhood, toddler, kid, people, together, young, happiness, siblings, two, play, adorable, outdoor, road, brown happy, brown road'),\n hit(1576456, 1280, 820, 'father-son-family-mountain-1576456', 'father, son, family, mountain, happiness, couple, field, mount, landscape, stone, child portrait, nature, child, smiles, play, family photo, happy, walk, fathers day'),\n hit(868394, 1280, 720, 'father-child-family-love-toddler-868394', 'father, child, family, love, toddler, dad, daughter, mountains, holiday, landscape, nature, view, rest, summer, beauty, the national park, top view, the height of the, ocean, relaxation'),\n hit(845235, 1280, 843, 'capricorn-mountains-alps-boy-cub-845235', 'capricorn, mountains, alps, boy, cub, animal, nature, horns'),\n hit(1837263, 1280, 853, 'child-clouds-dad-dock-father-lake-1837263', 'child, clouds, dad, dock, father, lake, mountain range, mountains, nature, outdoors, parent, pier, relaxation, sky, water, dad, dock, dock, father, father'),\n hit(2106625, 1280, 768, 'landscapedesign-photomanipulations-2106625', 'landscapedesign, photomanipulations, digitalart, art, landscape, landscapephotography, photoshop, design, digital art, art, art, art, art, art, photoshop, photoshop, photoshop, photoshop'),\n hit(7488520, 1280, 854, 'father-and-son-coast-football-wave-7488520', 'father and son, coast, football, nature, wave, playing, mountain, sea, sky, family, classic, love and cherish, romantic, minimalism'),\n hit(4333589, 1280, 689, 'consolation-tears-sad-cry-pain-4333589', 'consolation, tears, sad, cry, pain, help, compassion, suffering, elephants, children, people, compassion, compassion, compassion, compassion, compassion, suffering'),\n hit(2388636, 1280, 969, 'chamois-with-young-animals-2388636', 'chamois with young animals, rupicapra rupicapra, high mountains, switzerland, greina'),\n hit(1044383, 1280, 854, 'alp-canton-of-glarus-mountains-1044383', 'alp, canton of glarus, mountains, glarus, girl, glarus alps, switzerland, nature, glärnisch, child, glarus, switzerland, switzerland, switzerland, switzerland, switzerland, child, child, child'),\n hit(3717770, 1280, 854, 'man-son-people-person-family-3717770', 'man, son, people, person, family, parent, parenthood, walking, beach, mountains, cloudy, phuket, thailand, nature, people, phuket, phuket, phuket, phuket, phuket'),\n hit(10042132, 1280, 720, 'mountainous-area-mountain-10042132', 'mountainous area, mountain, nature, butt people, butt, ethnic minority, number, people'),\n hit(1147499, 1280, 960, 'mountain-avens-alpine-flower-1147499', 'mountain avens, alpine flower, alpine flora, alpine plant, dryas octopetala, blossom, flower background, nature, bloom, flower, roses, trellis shrub, dryas, beautiful flowers, inflorescence, flower wallpaper, seed stand'),\n hit(515532, 1280, 854, 'mother-and-daughter-family-happy-515532', 'mother and daughter, family, happy, outdoors, women, female, people, smile, cheerful'),\n hit(4445289, 1280, 853, 'bellflower-flower-blossom-bloom-4445289', 'bellflower, flower, flower background, blossom, bloom, violet, plant, flower wallpaper, bluebell family, petals, beautiful flowers, flora, wildflower, mountain flower, summer, nature'),\n hit(2592704, 1280, 853, 'family-people-parent-mother-mom-2592704', 'family, people, nature, parent, mother, mom, baby, kid, child, cute, sweet, windmill, plants, mountain'),\n hit(4383859, 1280, 852, 'plant-leaf-rainforest-4383859', 'plant, leaf, nature, rainforest, the transmitted light, spines there, palm family, harry the salak mountain national park, java island, indonesia'),\n hit(3167588, 1280, 652, 'children-ski-lessons-exercise-hills-3167588', 'children, ski lessons, exercise hills, black forest, ski slope, children hill, beginners, hill, nature, snow, winter, forest, landscape, mountain, heaven, cold, hike, travel, vacations, piste'),\n hit(2465836, 1280, 960, 'swan-chick-cute-bird-young-animals-2465836', 'swan, chick, cute, nature, bird, young animals, white, swans, water bird, new burger, lake, switzerland'),\n]\n\n/** `wedding` (horizontal, min_width 1600), sent by the home and contact heroes; answered 2026-10-19T19:04:24.193Z. */\nexport const WEDDING_HERO: StockPhoto[] = [\n hit(1837148, 1280, 853, 'bride-couple-groom-hands-1837148', 'bride, couple, groom, hands, holding hands, wedding, wedding rings, wedding bands, lovers, husband and wife, bride and groom, love, man, marriage, partners, people, trust, woman, wedding, wedding'),\n hit(3611277, 1280, 800, 'wedding-rings-engagement-rings-3611277', 'wedding rings, engagement rings, marriage, jewelry, gold, wedding rings, wedding rings, marriage, marriage, marriage, jewelry, jewelry, gold, gold, gold, gold, gold'),\n hit(2595862, 1280, 853, 'valentines-day-background-wedding-2595862', 'valentines day background, wedding, marriage, husband, wife, bride, groom, bridal gown, bridal dress, bridal bouquet, suit, man, woman, couple, lovers, together, love, people, guy, female'),\n hit(5574694, 1280, 853, 'hand-wedding-marriage-couple-love-5574694', 'hand, wedding, marriage, couple, love, romance, romantic, celebration, family, togetherness, commitment, diamond, honeymoon, relationship, gold, jewelry, fiance, wedding ring, horizontal, touching'),\n hit(260894, 1280, 853, 'flowers-rings-bouquet-260894', 'flowers, flower wallpaper, rings, bouquet, nature, wedding bouquet, wedding rings, bridal bouquet, wedding bands, wedding, marriage, flower background, flower arrangement, beautiful flowers, close up'),\n hit(10320741, 1280, 853, 'wedding-bride-groom-beach-love-10320741', 'wedding, bride, groom, beach, love, beautiful flowers, romance, kiss, nature, couple, wedding dress, suit, tenderness, happiness, marriage, flower wallpaper, flowers, bouquet, special day, bridal bouquet'),\n hit(7744547, 1280, 853, 'church-catholic-cathedral-aisle-7744547', 'church, catholic, cathedral, aisle, pews, religion, altar, christian, faith, wedding, ceremony, wedding ceremony, couple, marriage, chapel, architecture, church, church, church, church'),\n hit(4615557, 1280, 853, 'happy-valentines-day-couple-wedding-4615557', 'happy valentines day, couple, wedding, marriage, bridal, double, nature, love, people, man, woman, romance, happy, romantic, dress, married, male, big, girl, happiness'),\n hit(1284225, 1280, 851, 'wedding-rings-marriage-wedding-1284225', 'wedding rings, marriage, wedding, open bible, golden rings, couple, love, rings, book, bible, vows, love wallpaper, wedding rings, marriage, marriage, marriage, wedding, wedding, wedding, wedding'),\n hit(1836315, 1280, 838, 'wedding-couple-marriage-1836315', 'wedding, beautiful flowers, couple, marriage, bridal bouquet, wedding ceremony, matrimony, husband and wife, bride and groom, bloom, blossom, bouquet, bride, flower background, ceremony, flowers, groom, flower wallpaper, people, nature'),\n hit(8220935, 1280, 853, 'rings-marriage-gold-love-family-8220935', 'rings, marriage, gold, love, family, marriage, marriage, marriage, marriage, marriage, gold, love, love, family'),\n hit(1485984, 1280, 864, 'wedding-dress-bride-extravagant-1485984', 'wedding dress, bride, extravagant, fancy, luxury, dress, white, wedding, wedding gown, fashion, style, modeling, pose, posing, portrait, wedding dress, wedding dress, wedding dress, bride, bride'),\n hit(10397634, 1280, 853, 'couple-hands-wedding-ring-love-10397634', 'couple, hands, wedding, ring, love, wedding rings, vow, delicate, feeling, connection, closeness, romance, skin, ceremony, softness, close, symbol, marriage, holding hands, support'),\n hit(3061485, 1280, 852, 'paper-page-ring-romantic-love-3061485', 'paper, page, ring, romantic, love, valentine, heart, book, read, getting married, rings, proposing, ring, ring, ring, ring, ring, love, love, love'),\n hit(6230420, 1280, 853, 'bride-groom-wedding-marriage-6230420', 'bride, groom, wedding, marriage, wedding photography, bridal gown, bridal dress, couple, love, lovers, bridal, together, man, wedding dress, woman, people, in love, romantic, romance, relationship'),\n hit(6552057, 1280, 762, 'bride-groom-wedding-6552057', 'bride, groom, wedding, wedding photography, bridal gown, bridal dress, couple, pair, together, love, lovers, newlyweds, bridal, wedding dress, marriage, woman, fashion, dress, man, people'),\n hit(698501, 1280, 852, 'sunset-wedding-silhouettes-marriage-698501', 'sunset, wedding, silhouettes, marriage, newlyweds, bride, groom, holding hands, couple, bridal, sky, clouds, dusk, romantic, nature, love, romance, man, woman, relationship'),\n hit(10119091, 1280, 853, 'classic-bike-old-house-kiss-love-10119091', 'classic, bike, old house, kiss, love, couple, romantic, relationship, wedding, wedding ring'),\n hit(5955351, 1280, 853, 'wedding-couple-bouquet-marriage-5955351', 'wedding, couple, bouquet, marriage, love, romantic, bride, groom, man, woman, together, relationship, romance, hands, bridal, wedding dress, happiness, closeup, wedding, wedding'),\n hit(8176869, 1280, 853, 'couple-wedding-marriage-love-8176869', 'couple, wedding, marriage, love, romance, man, woman, portrait, groom, bride'),\n hit(1486005, 1280, 853, 'wedding-dresses-bride-wedding-1486005', 'wedding dresses, bride, wedding, elegant, white, female, bride, wedding, wedding, wedding, wedding, wedding'),\n hit(1846114, 1280, 854, 'wedding-aisle-flower-arrangement-1846114', 'wedding, aisle, flower arrangement, bloom, blossom, bouquet, celebration, chairs, decoration, beautiful flowers, flower background, nature, flora, flowers, roses, event, flower wallpaper, wedding photography, wedding preparations'),\n hit(1854076, 1280, 852, 'beach-wedding-reception-1854076', 'beach, flower wallpaper, wedding, flower background, reception, table setting, centerpieces, flower vases, event, beach wedding, wedding photography, wedding preparations, bunch of flowers, celebration, chairs, decorations, flowers, beautiful flowers, sea, summer'),\n hit(2162950, 1280, 853, 'couple-wedding-love-back-lovers-2162950', 'couple, wedding, love, back, lovers, relationship, newlyweds, marriage, bride, groom, sit, sitting, together, man, woman, dress, female, romantic, pier, jetty'),\n hit(4066022, 1280, 853, 'bride-groom-wedding-4066022', 'bride, groom, wedding, wedding photography, bridal gown, bridal dress, couple, pair, together, love, lovers, newlyweds, bridal, wedding dress, marriage, woman, fashion, dress, man, people'),\n hit(260899, 1280, 853, 'happy-valentines-day-couple-marriage-260899', 'happy valentines day, couple, marriage, bench, married couple, bride, groom, sit, sitting, together, relationship, lovers, love, wedding, rest'),\n hit(443600, 1280, 853, 'couple-wedding-park-newlyweds-443600', 'couple, wedding, park, newlyweds, wedding day, husband, wife, man, woman, bride, groom, romantic, love, happy, relationship, outdoors, wedding photography, portrait, couple, wedding'),\n hit(1183271, 1280, 853, 'wedding-bride-married-ceremony-1183271', 'wedding, bride, married, ceremony, romance, couple, romantic, love, wedding dress, event, white, lovers, marriage, beautiful, woman, brown love, brown beauty, brown wedding, brown event, wedding'),\n hit(1355473, 1280, 850, 'bride-wedding-redhead-red-hair-1355473', 'bride, beautiful flowers, wedding, redhead, flower wallpaper, red hair, floral wreath, hairstyle, flowers, flower background, marriage, decoration, nature, woman'),\n hit(1745240, 1280, 853, 'wedding-beach-young-couple-couple-1745240', 'wedding, beach, young couple, couple, portrait, lovers, husband and wife, bride and groom, beach wedding, marriage, pair, together, romantic couple, couple portrait, love, romantic, ocean, nature, seashore, shore'),\n hit(458119, 1280, 853, 'newlyweds-bride-groom-wedding-458119', 'newlyweds, bride, groom, wedding, bride and groom, husband and wife, wedding photography, wedding day, wedding dress, wedding details, couple, love, man, woman, marriage, happy couple, happy, happiness, together, bridal'),\n hit(1255520, 1280, 852, 'bride-groom-wedding-1255520', 'bride, groom, wedding, wedding photography, bridal gown, bridal dress, couple, pair, together, love, lovers, newlyweds, bridal, wedding dress, marriage, woman, fashion, dress, man, people'),\n hit(9490176, 1280, 853, 'pre-wedding-couple-love-wedding-9490176', 'pre-wedding, couple, love, wedding'),\n hit(1854074, 1280, 852, 'wedding-reception-table-banquet-1854074', 'wedding, reception, table, banquet, centerpieces, flower vases, table setting, bouquets, nature, celebration, flower wallpaper, event, decorations, elegant, flower background, flower arrangements, flowers, roses, beautiful flowers, table set-up'),\n hit(5582980, 1280, 853, 'wedding-photography-wedding-details-5582980', 'wedding photography, wedding details, wedding preparations, flower background, wedding, table set-up, flower arrangement, nature, flowers, table, glassware, candles, dining table, decoration, decorative, flower wallpaper, beautiful flowers, floral'),\n hit(529607, 1280, 852, 'heart-wedding-marriage-529607', 'heart, 4k wallpaper 1920x1080, wedding, marriage, hd wallpaper, valentines day, hands, romantic, wallpaper hd, marry, laptop wallpaper, beautiful wallpaper, mac wallpaper, couple, free background, together, wallpaper 4k, free wallpaper, husband, desktop backgrounds'),\n hit(4226896, 1280, 853, 'marriage-couple-wedding-love-4226896', 'marriage, couple, wedding, love, family, romantic, romance, relationship, happy, together, grooms, husband, wife, wedding, wedding, wedding, wedding, wedding, family'),\n hit(7389356, 1280, 851, 'jewel-diamond-ring-fashion-jewelry-7389356', 'jewel, diamond, ring, fashion, jewelry, wedding, diamond, diamond, ring, ring, ring, jewelry, jewelry, jewelry, jewelry, jewelry'),\n hit(7407081, 1280, 854, 'park-rain-wedding-couple-7407081', 'park, rain, wedding, couple, wedding day, nature, wedding photography, raining, trees, forest, landscape, rain, rain, rain, rain, rain, wedding, raining'),\n hit(8628797, 1280, 853, 'wedding-marriage-couple-love-8628797', 'wedding, marriage, couple, love, relationship, romance, bridal'),\n]\n\n/** The photos production placed whose alt text read as tag soup, by Pixabay id, as their searches answered them. */\nexport const SUGAR_HOLLOW_PLACED: StockPhoto[] = [\n hit(9140142, 853, 1280, 'father-girl-care-love-worry-9140142', 'father, girl, care, love, worry, children, palm, autumn, fall, baby, child, model, nature, park, trees, leaves, family, outdoors'),\n hit(10140688, 854, 1280, 'couple-on-bench-autumn-romance-10140688', 'couple on bench, ipad wallpaper, autumn romance, beautiful wallpaper, lakeside view, phone wallpaper, lock screen wallpaper, cozy moment, fall season, nature love, scenic beauty, peaceful retreat, mobile wallpaper 4k, relationship goals, outdoor date, tranquil forest, serene landscape, iphone wallpa'),\n hit(6071186, 853, 1280, 'family-tourists-sightseeing-6071186', 'family, tourists, sightseeing, mountain, landscape, vacation, holiday, leisure, mother, daughter, women, baby, child, girl, young, people, together, cute, happy, outdoors'),\n hit(7065652, 853, 1280, 'couple-wedding-fog-forest-bride-7065652', 'couple, wedding, fog, forest, bride, groom, romantic, newly married, nature, wedding day, husband, wife, man, woman, love, park, happy, relationship, outdoors, portrait'),\n hit(4897535, 1280, 853, 'mountain-snow-winter-cold-couple-4897535', 'mountain, snow, winter, cold, couple, color, landscape, nature, outdoors, happy'),\n hit(7126126, 1280, 853, 'sunset-couple-sky-clouds-mountain-7126126', 'sunset, couple, sky, clouds, mountain, love, nature, couple, love, love, love, love, love'),\n hit(2191390, 853, 1280, 'couple-sky-evening-sunset-romantic-2191390', 'couple, sky, evening, sunset, romantic, engaged, newy wed, nature, silhouette, happy, love'),\n hit(1837263, 1280, 853, 'child-clouds-dad-dock-father-lake-1837263', 'child, clouds, dad, dock, father, lake, mountain range, mountains, nature, outdoors, parent, pier, relaxation, sky, water, dad, dock, dock, father, father'),\n]\n"],"names":["hit","id","width","height","slug","tags","provider","String","pageUrl","photographer","split","downloadUrl","COUPLE_MOUNTAINS_0919","FAMILY_MOUNTAINS_0919","WEDDING_HERO","SUGAR_HOLLOW_PLACED"],"mappings":"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"}
|
|
@@ -174,7 +174,7 @@ export interface SectionScope {
|
|
|
174
174
|
groupStyle?: AiLayoutGroupVariant;
|
|
175
175
|
}
|
|
176
176
|
/** Compiles a page designed in the layout language into the tree it stores. */
|
|
177
|
-
export declare function aiCompileLayoutPage(
|
|
177
|
+
export declare function aiCompileLayoutPage(designed: readonly AiLayoutSection[], plan: AiLayoutPagePlan, targets: AiLayoutTargets, options: AiLayoutCompileOptions): AiLayoutCompiledPage;
|
|
178
178
|
/** A band's own colors, as palette roles: the dark band pins the scheme instead. */
|
|
179
179
|
export declare function bandSx(band: AiLayoutBand): Record<string, unknown> | null;
|
|
180
180
|
export { aiLayoutSpans };
|
|
@@ -22,9 +22,10 @@ import { AI_INSTANCE_REF_PROP } from "../runtime/ai-node-tree.js";
|
|
|
22
22
|
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
|
-
import { aiLayoutDesignChoices, aiLayoutFamily, aiLayoutGroupVariant } from "./ai-layout-design.js";
|
|
25
|
+
import { AI_LAYOUT_HALF_HEROES, aiLayoutDesignChoices, aiLayoutFamily, aiLayoutGroupVariant } from "./ai-layout-design.js";
|
|
26
26
|
import { AI_LAYOUT_FEATURED_RECORDS, AI_LAYOUT_LISTING_ELEMENTS, aiLayoutIsRecordImageAlt, aiLayoutListingAt, aiLayoutRecordHref, aiLayoutRecordImageAltField, aiLayoutRepeatFilterOf } from "./ai-layout-listings.js";
|
|
27
27
|
import { aiStorefrontItemIcons } from "./ai-layout-storefront.js";
|
|
28
|
+
import { aiLayoutContactLabel, aiLayoutWithContactLines } from "./ai-layout-contact.js";
|
|
28
29
|
import { AI_LAYOUT_LABELS_EN, aiLayoutLabel } from "./ai-layout-labels.js";
|
|
29
30
|
import { aiLayoutRenamedLabel, aiLayoutResolveLink } from "./ai-layout-links.js";
|
|
30
31
|
import { aiLayoutSpans, AI_LAYOUT_FRAMES, AiLayoutTreeBuilder } from "./ai-layout-tree.js";
|
|
@@ -69,8 +70,12 @@ function formSectionOf(sections, plan, targets) {
|
|
|
69
70
|
const designed = sections.findIndex((section)=>section.blocks.some((block)=>block.kind === 'form' && (!block.to || forms.has(block.to))));
|
|
70
71
|
return designed === -1 ? null : designed;
|
|
71
72
|
}
|
|
72
|
-
/** Compiles a page designed in the layout language into the tree it stores. */ export function aiCompileLayoutPage(
|
|
73
|
+
/** Compiles a page designed in the layout language into the tree it stores. */ export function aiCompileLayoutPage(designed, plan, targets, options) {
|
|
73
74
|
const tree = new AiLayoutTreeBuilder();
|
|
75
|
+
const formSection = formSectionOf(designed, plan, targets);
|
|
76
|
+
// The page a visitor opens to get in touch shows the phone and email the
|
|
77
|
+
// business gave, as links, wherever the design did not (AGL-3979).
|
|
78
|
+
const sections = aiLayoutWithContactLines(designed, formSection, targets.contact);
|
|
74
79
|
const page = {
|
|
75
80
|
tree,
|
|
76
81
|
plan,
|
|
@@ -83,7 +88,7 @@ function formSectionOf(sections, plan, targets) {
|
|
|
83
88
|
brand: 0,
|
|
84
89
|
dark: 0
|
|
85
90
|
},
|
|
86
|
-
formSection
|
|
91
|
+
formSection,
|
|
87
92
|
pageIcon: pageIconOf(sections),
|
|
88
93
|
formsPlaced: new Set(),
|
|
89
94
|
itemIds: plan.sections.map(()=>[]),
|
|
@@ -251,7 +256,7 @@ function compileSection(page, raw, index) {
|
|
|
251
256
|
// A row whose columns all say the same kind of thing, three or more across,
|
|
252
257
|
// is a group of cards: one design, the words the columns gave.
|
|
253
258
|
if (filled.length >= 3 && sameShape(filled.map((entry)=>entry.column))) {
|
|
254
|
-
head.push(columnsAsCards(filled.map((entry)=>entry.column)));
|
|
259
|
+
head.push(...columnsAsCards(filled.map((entry)=>entry.column)));
|
|
255
260
|
page.settled.push({
|
|
256
261
|
at,
|
|
257
262
|
what: `${filled.length} like columns drawn as cards`
|
|
@@ -577,19 +582,37 @@ function compileSection(page, raw, index) {
|
|
|
577
582
|
/** The block kinds a column holds, as a column's shape is compared. */ function shapeOf(column) {
|
|
578
583
|
return column.map((block)=>block.kind).join(',');
|
|
579
584
|
}
|
|
580
|
-
|
|
585
|
+
/** What a like column may hold and still be read as a card: its words, a picture and one button. */ const CARD_COLUMN_KINDS = new Set([
|
|
586
|
+
'heading',
|
|
587
|
+
'text',
|
|
588
|
+
'lede',
|
|
589
|
+
'eyebrow',
|
|
590
|
+
'image',
|
|
591
|
+
'note',
|
|
592
|
+
'button'
|
|
593
|
+
]);
|
|
594
|
+
/** The words of a column a card says: its heading, or its first words. */ const WORDS_KINDS = new Set([
|
|
595
|
+
'heading',
|
|
596
|
+
'text',
|
|
597
|
+
'lede',
|
|
598
|
+
'note'
|
|
599
|
+
]);
|
|
600
|
+
/**
|
|
601
|
+
* Whether a row's columns all say the same kind of thing (AGL-3660): the
|
|
602
|
+
* same blocks in the same order, words among them, one button at most. The
|
|
603
|
+
* beta.270 Sugar Hollow Galleries page (AGL-3988) was refused for rule 1,
|
|
604
|
+
* "The same Grid block appears 4 times": four like columns this read did not
|
|
605
|
+
* fold, each of them drawn as a Grid cell of its own.
|
|
606
|
+
*/ function sameShape(columns) {
|
|
581
607
|
const first = shapeOf(columns[0]);
|
|
582
|
-
return columns.every((column)=>shapeOf(column) === first) && columns[0].some((block)=>block.kind
|
|
583
|
-
'heading',
|
|
584
|
-
'text',
|
|
585
|
-
'lede',
|
|
586
|
-
'eyebrow',
|
|
587
|
-
'image',
|
|
588
|
-
'note'
|
|
589
|
-
].includes(block.kind));
|
|
608
|
+
return columns.every((column)=>shapeOf(column) === first) && columns[0].some((block)=>WORDS_KINDS.has(block.kind)) && columns[0].every((block)=>CARD_COLUMN_KINDS.has(block.kind)) && columns[0].filter((block)=>block.kind === 'button').length <= 1;
|
|
590
609
|
}
|
|
591
|
-
/**
|
|
592
|
-
|
|
610
|
+
/**
|
|
611
|
+
* Like columns as one group of cards: each column's heading its title, its
|
|
612
|
+
* words its text. Their buttons follow the group (AGL-3988): one, where they
|
|
613
|
+
* all go to the same place, else a list of links, each named by its card.
|
|
614
|
+
*/ function columnsAsCards(columns) {
|
|
615
|
+
const cards = {
|
|
593
616
|
kind: 'cards',
|
|
594
617
|
items: columns.map((column)=>{
|
|
595
618
|
var _ref;
|
|
@@ -608,6 +631,52 @@ function sameShape(columns) {
|
|
|
608
631
|
} : {});
|
|
609
632
|
})
|
|
610
633
|
};
|
|
634
|
+
const buttons = columns.flatMap((column)=>{
|
|
635
|
+
var _button_to;
|
|
636
|
+
const button = column.find((block)=>block.kind === 'button');
|
|
637
|
+
return (button == null ? void 0 : (_button_to = button.to) == null ? void 0 : _button_to.trim()) ? [
|
|
638
|
+
{
|
|
639
|
+
button,
|
|
640
|
+
column
|
|
641
|
+
}
|
|
642
|
+
] : [];
|
|
643
|
+
});
|
|
644
|
+
if (!buttons.length) return [
|
|
645
|
+
cards
|
|
646
|
+
];
|
|
647
|
+
const places = new Set(buttons.map(({ button })=>{
|
|
648
|
+
var _button_to;
|
|
649
|
+
return ((_button_to = button.to) != null ? _button_to : '').trim().toLowerCase();
|
|
650
|
+
}));
|
|
651
|
+
if (places.size === 1) {
|
|
652
|
+
var _button_text;
|
|
653
|
+
const { button } = buttons[0];
|
|
654
|
+
return [
|
|
655
|
+
cards,
|
|
656
|
+
_extends({
|
|
657
|
+
kind: 'button',
|
|
658
|
+
text: (_button_text = button.text) != null ? _button_text : '',
|
|
659
|
+
to: button.to
|
|
660
|
+
}, button.style ? {
|
|
661
|
+
style: button.style
|
|
662
|
+
} : {})
|
|
663
|
+
];
|
|
664
|
+
}
|
|
665
|
+
return [
|
|
666
|
+
cards,
|
|
667
|
+
{
|
|
668
|
+
kind: 'list',
|
|
669
|
+
items: buttons.map(({ button, column })=>{
|
|
670
|
+
var _button_to;
|
|
671
|
+
var _column_find;
|
|
672
|
+
return {
|
|
673
|
+
title: ((_column_find = column.find((block)=>block.kind === 'heading')) == null ? void 0 : _column_find.text) || button.text || '',
|
|
674
|
+
text: '',
|
|
675
|
+
to: (_button_to = button.to) != null ? _button_to : ''
|
|
676
|
+
};
|
|
677
|
+
})
|
|
678
|
+
}
|
|
679
|
+
];
|
|
611
680
|
}
|
|
612
681
|
// ── A row of columns ──────────────────────────────────────────────────────
|
|
613
682
|
// Spans out of twelve live with the tree, so a frame's repair reads them without the compiler (AGL-3735).
|
|
@@ -776,7 +845,8 @@ function words(scope, block, place, variant, props, sx) {
|
|
|
776
845
|
}
|
|
777
846
|
function compileButton(scope, block) {
|
|
778
847
|
var _block_style;
|
|
779
|
-
|
|
848
|
+
// Words that carry the phone or the email are kept whole (AGL-3979).
|
|
849
|
+
const asked = aiLayoutContactLabel(block.text, scope.page.targets.contact) || aiLayoutFitText(block.text, 'label', scope.page.options.language);
|
|
780
850
|
if (!asked) return null;
|
|
781
851
|
const destination = aiLayoutResolveLink(block.to, asked, scope.link, scope.page.targets);
|
|
782
852
|
if (!destination) {
|
|
@@ -844,6 +914,10 @@ export function destinationProps(destination) {
|
|
|
844
914
|
if (destination.kind === 'path') return {
|
|
845
915
|
href: destination.href
|
|
846
916
|
};
|
|
917
|
+
// A call or an email opens the phone or the mail app, never a new tab (AGL-3979).
|
|
918
|
+
if (destination.kind === 'contact') return {
|
|
919
|
+
href: destination.href
|
|
920
|
+
};
|
|
847
921
|
return {};
|
|
848
922
|
}
|
|
849
923
|
/**
|
|
@@ -1284,7 +1358,7 @@ function instances(scope, placed, items, perRow) {
|
|
|
1284
1358
|
if (((_block_items = block.items) != null ? _block_items : []).some((item)=>item.to)) {
|
|
1285
1359
|
var _block_items2;
|
|
1286
1360
|
const links = ((_block_items2 = block.items) != null ? _block_items2 : []).flatMap((item)=>{
|
|
1287
|
-
const label = aiLayoutFitText(item.title || item.text, 'label', scope.page.options.language);
|
|
1361
|
+
const label = aiLayoutContactLabel(item.title || item.text, scope.page.targets.contact) || aiLayoutFitText(item.title || item.text, 'label', scope.page.options.language);
|
|
1288
1362
|
const destination = label ? aiLayoutResolveLink(item.to, label, scope.link, scope.page.targets) : null;
|
|
1289
1363
|
if (!destination) return [];
|
|
1290
1364
|
const id = tree.add('muiScreenLink', _extends({
|
|
@@ -1502,12 +1576,12 @@ function instances(scope, placed, items, perRow) {
|
|
|
1502
1576
|
const _flow_lead = flow[lead], { style: _style } = _flow_lead, title = _object_without_properties_loose(_flow_lead, [
|
|
1503
1577
|
"style"
|
|
1504
1578
|
]);
|
|
1505
|
-
flow[lead] = design.choices.hero
|
|
1579
|
+
flow[lead] = AI_LAYOUT_HALF_HEROES.has(design.choices.hero) ? title : _extends({}, title, {
|
|
1506
1580
|
style: 'large'
|
|
1507
1581
|
});
|
|
1508
1582
|
sellingHero(scope, flow);
|
|
1509
1583
|
const given = images[0] ? aiLayoutFitText(images[0].text, 'alt', scope.page.options.language) : '';
|
|
1510
|
-
return hero(scope,
|
|
1584
|
+
return hero(scope, flow, given ? {
|
|
1511
1585
|
alt: given,
|
|
1512
1586
|
given: true
|
|
1513
1587
|
} : {
|
|
@@ -1536,32 +1610,51 @@ function instances(scope, placed, items, perRow) {
|
|
|
1536
1610
|
const group = words[at];
|
|
1537
1611
|
const tail = words.slice(at + 1);
|
|
1538
1612
|
const variant = aiLayoutGroupVariant(design.input, design.choices, (_scope_words = scope.words) != null ? _scope_words : '');
|
|
1539
|
-
if (!head.every((block)=>WORD_KINDS.has(block.kind) && block.kind !== 'button') || !head.some((block)=>speaksHeading(scope, block)) || !tail.every((block)=>WORD_KINDS.has(block.kind)) || ((_ref = (_group_items = group.items) == null ? void 0 : _group_items.length) != null ? _ref : 0) < 2 || ((_ref1 = (_group_items1 = group.items) == null ? void 0 : _group_items1.length) != null ? _ref1 : 0) > 6 || group.to || group.kind === 'cards' && variant !== 'cards' && variant !== 'ruled')
|
|
1613
|
+
if (!head.every((block)=>WORD_KINDS.has(block.kind) && block.kind !== 'button') || !head.some((block)=>speaksHeading(scope, block)) || !tail.every((block)=>WORD_KINDS.has(block.kind)) || ((_ref = (_group_items = group.items) == null ? void 0 : _group_items.length) != null ? _ref : 0) < 2 || ((_ref1 = (_group_items1 = group.items) == null ? void 0 : _group_items1.length) != null ? _ref1 : 0) > 6 || group.to || group.kind === 'cards' && variant !== 'cards' && variant !== 'ruled' || // A store's making is shown as pictures across the page (AGL-3676), never
|
|
1614
|
+
// ruled words in half of it: set beside its heading, a seed that splits
|
|
1615
|
+
// headings left a storefront's "how it is made" a band of text (AGL-3985).
|
|
1616
|
+
group.kind === 'steps' && aiLayoutFamily(design.input.kind) === 'retail') {
|
|
1540
1617
|
return null;
|
|
1541
1618
|
}
|
|
1542
1619
|
return splitSection(scope, head, group, tail);
|
|
1543
1620
|
}
|
|
1544
|
-
/** The first section, in the site's hero arrangement. */ function hero(scope,
|
|
1621
|
+
/** The first section, in the site's hero arrangement. */ function hero(scope, flow, picture) {
|
|
1545
1622
|
const { page } = scope;
|
|
1546
1623
|
const tree = page.tree;
|
|
1547
1624
|
const design = page.design;
|
|
1548
1625
|
const home = design.input.home;
|
|
1549
|
-
|
|
1626
|
+
// A collage holds two pictures: on a page with room for one, it is drawn split.
|
|
1627
|
+
const chosen = design.choices.hero;
|
|
1628
|
+
const variant = chosen === 'collage' && picturesLeft(page) < 2 ? 'split' : chosen;
|
|
1550
1629
|
page.settled.push({
|
|
1551
1630
|
at: scope.at,
|
|
1552
1631
|
what: `drawn as a ${variant} hero`
|
|
1553
1632
|
});
|
|
1554
|
-
if (variant === 'cover') {
|
|
1633
|
+
if (variant === 'cover' || variant === 'poster') {
|
|
1555
1634
|
scope.band = 'dark';
|
|
1556
|
-
|
|
1557
|
-
|
|
1635
|
+
// A cover sets its words at the start of the page; a poster centers them,
|
|
1636
|
+
// taller, as a restaurant's or a band's opening does (AGL-3985).
|
|
1637
|
+
scope.centered = variant === 'poster';
|
|
1638
|
+
const tall = variant === 'poster';
|
|
1639
|
+
return cover(scope, flow, picture, home ? tall ? {
|
|
1640
|
+
xs: '84vh',
|
|
1641
|
+
md: '94vh'
|
|
1642
|
+
} : {
|
|
1558
1643
|
xs: '78vh',
|
|
1559
1644
|
md: '86vh'
|
|
1645
|
+
} : tall ? {
|
|
1646
|
+
xs: '52vh',
|
|
1647
|
+
md: '62vh'
|
|
1560
1648
|
} : {
|
|
1561
1649
|
xs: '46vh',
|
|
1562
1650
|
md: '54vh'
|
|
1563
1651
|
});
|
|
1564
1652
|
}
|
|
1653
|
+
if (variant === 'bleed') return bleedHero(scope, flow, picture, home);
|
|
1654
|
+
if (variant === 'column') return columnHero(scope, flow, picture, home);
|
|
1655
|
+
if (variant === 'collage') return collageHero(scope, flow, picture, home);
|
|
1656
|
+
if (variant === 'panel') return panelHero(scope, flow, picture, home);
|
|
1657
|
+
if (variant === 'portrait') return portraitHero(scope, flow, picture);
|
|
1565
1658
|
const band = scope.band;
|
|
1566
1659
|
scope.centered = false;
|
|
1567
1660
|
if (variant === 'split') {
|
|
@@ -1724,6 +1817,326 @@ function instances(scope, placed, items, perRow) {
|
|
|
1724
1817
|
minHeight
|
|
1725
1818
|
}, true);
|
|
1726
1819
|
}
|
|
1820
|
+
/** The surface a band paints, as a palette role: what a picture laid over another is edged in. */ function bandSurface(band) {
|
|
1821
|
+
if (band === 'soft') return 'background.paper';
|
|
1822
|
+
if (band === 'brand') return 'primary.main';
|
|
1823
|
+
return 'background.default';
|
|
1824
|
+
}
|
|
1825
|
+
/**
|
|
1826
|
+
* A bleed hero (AGL-3985): the band in two halves, a photo filling one of
|
|
1827
|
+
* them edge to edge, top to bottom, and the words in the other, centered in
|
|
1828
|
+
* its height. On a phone the photo sits over the words.
|
|
1829
|
+
*/ function bleedHero(scope, flow, picture, home) {
|
|
1830
|
+
const { page } = scope;
|
|
1831
|
+
const tree = page.tree;
|
|
1832
|
+
const design = page.design;
|
|
1833
|
+
const band = scope.band;
|
|
1834
|
+
scope.centered = false;
|
|
1835
|
+
const words = compileFlow(scope, flow, 'half');
|
|
1836
|
+
const measure = tree.add('muiBox', null, {
|
|
1837
|
+
maxWidth: {
|
|
1838
|
+
xs: '100%',
|
|
1839
|
+
md: '88%'
|
|
1840
|
+
},
|
|
1841
|
+
px: {
|
|
1842
|
+
xs: 3,
|
|
1843
|
+
sm: 6,
|
|
1844
|
+
md: 8
|
|
1845
|
+
},
|
|
1846
|
+
py: {
|
|
1847
|
+
xs: 6,
|
|
1848
|
+
md: 10
|
|
1849
|
+
}
|
|
1850
|
+
}, [
|
|
1851
|
+
words
|
|
1852
|
+
], 'measure');
|
|
1853
|
+
const photo = designPicture(scope, picture, {
|
|
1854
|
+
height: '100%',
|
|
1855
|
+
minHeight: home ? {
|
|
1856
|
+
xs: '46vh',
|
|
1857
|
+
md: '84vh'
|
|
1858
|
+
} : {
|
|
1859
|
+
xs: '36vh',
|
|
1860
|
+
md: '56vh'
|
|
1861
|
+
}
|
|
1862
|
+
}, 'bleedPhoto');
|
|
1863
|
+
const right = design.choices.featureLeft;
|
|
1864
|
+
const row = tree.add('muiGrid', {
|
|
1865
|
+
container: true,
|
|
1866
|
+
spacing: '0'
|
|
1867
|
+
}, {
|
|
1868
|
+
alignItems: 'stretch'
|
|
1869
|
+
}, [
|
|
1870
|
+
tree.add('muiGrid', {
|
|
1871
|
+
size: 'xs:12 md:6'
|
|
1872
|
+
}, right ? {
|
|
1873
|
+
order: {
|
|
1874
|
+
xs: 0,
|
|
1875
|
+
md: 1
|
|
1876
|
+
}
|
|
1877
|
+
} : null, [
|
|
1878
|
+
photo
|
|
1879
|
+
], 'column'),
|
|
1880
|
+
tree.add('muiGrid', {
|
|
1881
|
+
size: 'xs:12 md:6'
|
|
1882
|
+
}, {
|
|
1883
|
+
display: 'flex',
|
|
1884
|
+
alignItems: 'center',
|
|
1885
|
+
justifyContent: right ? 'flex-end' : 'flex-start'
|
|
1886
|
+
}, [
|
|
1887
|
+
measure
|
|
1888
|
+
], 'column')
|
|
1889
|
+
], 'row');
|
|
1890
|
+
return designedRoot(scope, [
|
|
1891
|
+
row
|
|
1892
|
+
], bandSx(band), band === 'dark');
|
|
1893
|
+
}
|
|
1894
|
+
/**
|
|
1895
|
+
* A masthead (AGL-3985): the words centered in a narrow column, as a journal
|
|
1896
|
+
* or a quiet practice opens, and a wide photo under them.
|
|
1897
|
+
*/ function columnHero(scope, flow, picture, home) {
|
|
1898
|
+
const tree = scope.page.tree;
|
|
1899
|
+
const band = scope.band;
|
|
1900
|
+
scope.centered = true;
|
|
1901
|
+
const words = compileFlow(scope, flow, 'full');
|
|
1902
|
+
const measure = tree.add('muiBox', null, {
|
|
1903
|
+
maxWidth: {
|
|
1904
|
+
xs: '100%',
|
|
1905
|
+
md: '72%'
|
|
1906
|
+
},
|
|
1907
|
+
mx: 'auto'
|
|
1908
|
+
}, [
|
|
1909
|
+
words
|
|
1910
|
+
], 'measure');
|
|
1911
|
+
const photo = designPicture(scope, picture, {
|
|
1912
|
+
aspectRatio: home ? {
|
|
1913
|
+
xs: '4 / 3',
|
|
1914
|
+
md: '16 / 7'
|
|
1915
|
+
} : {
|
|
1916
|
+
xs: '16 / 9',
|
|
1917
|
+
md: '3 / 1'
|
|
1918
|
+
},
|
|
1919
|
+
borderRadius: 2
|
|
1920
|
+
});
|
|
1921
|
+
const stack = tree.add('muiStack', {
|
|
1922
|
+
spacing: '8',
|
|
1923
|
+
useFlexGap: true
|
|
1924
|
+
}, null, [
|
|
1925
|
+
measure,
|
|
1926
|
+
photo
|
|
1927
|
+
], 'content');
|
|
1928
|
+
const container = tree.add('muiContainer', {
|
|
1929
|
+
maxWidth: 'lg'
|
|
1930
|
+
}, {
|
|
1931
|
+
pt: {
|
|
1932
|
+
xs: 8,
|
|
1933
|
+
md: 12
|
|
1934
|
+
},
|
|
1935
|
+
pb: {
|
|
1936
|
+
xs: 6,
|
|
1937
|
+
md: 10
|
|
1938
|
+
}
|
|
1939
|
+
}, [
|
|
1940
|
+
stack
|
|
1941
|
+
], 'container');
|
|
1942
|
+
return designedRoot(scope, [
|
|
1943
|
+
container
|
|
1944
|
+
], bandSx(band), band === 'dark');
|
|
1945
|
+
}
|
|
1946
|
+
/**
|
|
1947
|
+
* A collage hero (AGL-3985): the words beside two pictures, a tall one and a
|
|
1948
|
+
* smaller one laid over its lower corner, edged in the band's own surface, as
|
|
1949
|
+
* a shop shows two of its things or an event two moments of its day.
|
|
1950
|
+
*/ function collageHero(scope, flow, picture, home) {
|
|
1951
|
+
var _page_plan_sections_scope_index;
|
|
1952
|
+
const { page } = scope;
|
|
1953
|
+
const tree = page.tree;
|
|
1954
|
+
const design = page.design;
|
|
1955
|
+
const band = scope.band;
|
|
1956
|
+
scope.centered = false;
|
|
1957
|
+
const words = compileFlow(scope, flow, 'half');
|
|
1958
|
+
const tall = designPicture(scope, picture, {
|
|
1959
|
+
width: {
|
|
1960
|
+
xs: '78%',
|
|
1961
|
+
md: '76%'
|
|
1962
|
+
},
|
|
1963
|
+
aspectRatio: home ? '4 / 5' : '1 / 1',
|
|
1964
|
+
borderRadius: 2
|
|
1965
|
+
});
|
|
1966
|
+
const small = designPicture(scope, {
|
|
1967
|
+
alt: standInAlt(scope, (_page_plan_sections_scope_index = page.plan.sections[scope.index]) == null ? void 0 : _page_plan_sections_scope_index.name),
|
|
1968
|
+
given: false
|
|
1969
|
+
}, {
|
|
1970
|
+
position: 'absolute',
|
|
1971
|
+
right: 0,
|
|
1972
|
+
bottom: 0,
|
|
1973
|
+
width: {
|
|
1974
|
+
xs: '48%',
|
|
1975
|
+
md: '50%'
|
|
1976
|
+
},
|
|
1977
|
+
aspectRatio: '1 / 1',
|
|
1978
|
+
borderRadius: 2,
|
|
1979
|
+
border: 6,
|
|
1980
|
+
borderColor: bandSurface(band)
|
|
1981
|
+
}, 'collagePhoto');
|
|
1982
|
+
const pictures = tree.add('muiBox', null, {
|
|
1983
|
+
position: 'relative',
|
|
1984
|
+
pb: {
|
|
1985
|
+
xs: 6,
|
|
1986
|
+
md: 10
|
|
1987
|
+
}
|
|
1988
|
+
}, [
|
|
1989
|
+
tall,
|
|
1990
|
+
small
|
|
1991
|
+
], 'collage');
|
|
1992
|
+
const right = design.choices.featureLeft;
|
|
1993
|
+
const row = designRow(scope, [
|
|
1994
|
+
_extends({
|
|
1995
|
+
id: words,
|
|
1996
|
+
size: 'xs:12 md:5'
|
|
1997
|
+
}, right ? {
|
|
1998
|
+
sx: {
|
|
1999
|
+
order: {
|
|
2000
|
+
xs: 0,
|
|
2001
|
+
md: 1
|
|
2002
|
+
}
|
|
2003
|
+
}
|
|
2004
|
+
} : {}),
|
|
2005
|
+
{
|
|
2006
|
+
id: pictures,
|
|
2007
|
+
size: 'xs:12 md:7'
|
|
2008
|
+
}
|
|
2009
|
+
], '8');
|
|
2010
|
+
const container = tree.add('muiContainer', {
|
|
2011
|
+
maxWidth: 'lg'
|
|
2012
|
+
}, {
|
|
2013
|
+
py: {
|
|
2014
|
+
xs: 6,
|
|
2015
|
+
md: 10
|
|
2016
|
+
}
|
|
2017
|
+
}, [
|
|
2018
|
+
row
|
|
2019
|
+
], 'container');
|
|
2020
|
+
return designedRoot(scope, [
|
|
2021
|
+
container
|
|
2022
|
+
], bandSx(band), band === 'dark');
|
|
2023
|
+
}
|
|
2024
|
+
/**
|
|
2025
|
+
* A panel hero (AGL-3985): a full-bleed photo shown as it is, undimmed, and
|
|
2026
|
+
* the words on a card of the page's own surface over its lower corner, as an
|
|
2027
|
+
* agent's listing or a firm's office opens. The card carries its own colors,
|
|
2028
|
+
* so the words read whatever the photo is.
|
|
2029
|
+
*/ function panelHero(scope, flow, picture, home) {
|
|
2030
|
+
const tree = scope.page.tree;
|
|
2031
|
+
// The words sit on the card, never on the band the model chose.
|
|
2032
|
+
scope.band = 'plain';
|
|
2033
|
+
scope.centered = false;
|
|
2034
|
+
const photo = designPicture(scope, picture, {
|
|
2035
|
+
position: 'absolute',
|
|
2036
|
+
top: 0,
|
|
2037
|
+
left: 0,
|
|
2038
|
+
width: '100%',
|
|
2039
|
+
height: '100%'
|
|
2040
|
+
}, 'panelPhoto');
|
|
2041
|
+
const words = compileFlow(scope, flow, 'half');
|
|
2042
|
+
const card = tree.add('muiBox', null, {
|
|
2043
|
+
bgcolor: 'background.paper',
|
|
2044
|
+
color: 'text.primary',
|
|
2045
|
+
borderRadius: 2,
|
|
2046
|
+
boxShadow: 3,
|
|
2047
|
+
p: {
|
|
2048
|
+
xs: 4,
|
|
2049
|
+
md: 6
|
|
2050
|
+
},
|
|
2051
|
+
maxWidth: {
|
|
2052
|
+
xs: '100%',
|
|
2053
|
+
md: '52%'
|
|
2054
|
+
}
|
|
2055
|
+
}, [
|
|
2056
|
+
words
|
|
2057
|
+
], 'panel');
|
|
2058
|
+
const container = tree.add('muiContainer', {
|
|
2059
|
+
maxWidth: 'lg'
|
|
2060
|
+
}, {
|
|
2061
|
+
position: 'relative',
|
|
2062
|
+
zIndex: 1,
|
|
2063
|
+
pt: {
|
|
2064
|
+
xs: 28,
|
|
2065
|
+
md: 36
|
|
2066
|
+
},
|
|
2067
|
+
pb: {
|
|
2068
|
+
xs: 4,
|
|
2069
|
+
md: 8
|
|
2070
|
+
}
|
|
2071
|
+
}, [
|
|
2072
|
+
card
|
|
2073
|
+
], 'container');
|
|
2074
|
+
return designedRoot(scope, [
|
|
2075
|
+
photo,
|
|
2076
|
+
container
|
|
2077
|
+
], {
|
|
2078
|
+
position: 'relative',
|
|
2079
|
+
overflow: 'hidden',
|
|
2080
|
+
display: 'flex',
|
|
2081
|
+
alignItems: 'flex-end',
|
|
2082
|
+
minHeight: home ? {
|
|
2083
|
+
xs: '72vh',
|
|
2084
|
+
md: '84vh'
|
|
2085
|
+
} : {
|
|
2086
|
+
xs: '48vh',
|
|
2087
|
+
md: '56vh'
|
|
2088
|
+
}
|
|
2089
|
+
}, false);
|
|
2090
|
+
}
|
|
2091
|
+
/**
|
|
2092
|
+
* A portrait hero (AGL-3985): a person's own page opens on their round
|
|
2093
|
+
* photo, the words centered under it.
|
|
2094
|
+
*/ function portraitHero(scope, flow, picture) {
|
|
2095
|
+
const tree = scope.page.tree;
|
|
2096
|
+
const band = scope.band;
|
|
2097
|
+
scope.centered = true;
|
|
2098
|
+
const photo = designPicture(scope, picture, {
|
|
2099
|
+
width: {
|
|
2100
|
+
xs: '44%',
|
|
2101
|
+
sm: '30%',
|
|
2102
|
+
md: '22%'
|
|
2103
|
+
},
|
|
2104
|
+
aspectRatio: '1 / 1',
|
|
2105
|
+
borderRadius: '50%',
|
|
2106
|
+
flexShrink: 0
|
|
2107
|
+
});
|
|
2108
|
+
const words = compileFlow(scope, flow, 'full');
|
|
2109
|
+
const measure = tree.add('muiBox', null, {
|
|
2110
|
+
maxWidth: {
|
|
2111
|
+
xs: '100%',
|
|
2112
|
+
md: '72%'
|
|
2113
|
+
},
|
|
2114
|
+
mx: 'auto'
|
|
2115
|
+
}, [
|
|
2116
|
+
words
|
|
2117
|
+
], 'measure');
|
|
2118
|
+
const stack = tree.add('muiStack', {
|
|
2119
|
+
spacing: '5',
|
|
2120
|
+
useFlexGap: true,
|
|
2121
|
+
alignItems: 'center'
|
|
2122
|
+
}, null, [
|
|
2123
|
+
photo,
|
|
2124
|
+
measure
|
|
2125
|
+
], 'content');
|
|
2126
|
+
const container = tree.add('muiContainer', {
|
|
2127
|
+
maxWidth: 'lg'
|
|
2128
|
+
}, {
|
|
2129
|
+
py: {
|
|
2130
|
+
xs: 8,
|
|
2131
|
+
md: 12
|
|
2132
|
+
}
|
|
2133
|
+
}, [
|
|
2134
|
+
stack
|
|
2135
|
+
], 'container');
|
|
2136
|
+
return designedRoot(scope, [
|
|
2137
|
+
container
|
|
2138
|
+
], bandSx(band), band === 'dark');
|
|
2139
|
+
}
|
|
1727
2140
|
/** A closing section of words over a photo. */ function coverBand(scope, words) {
|
|
1728
2141
|
scope.band = 'dark';
|
|
1729
2142
|
scope.centered = true;
|