@aglyn/plugins-ai 1.0.0-beta.246 → 1.0.0-beta.249

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/package.json +17 -17
  2. package/src/lib/activity/ai-activity-actions.js +5 -1
  3. package/src/lib/activity/ai-activity-actions.js.map +1 -1
  4. package/src/lib/components/ai-job-links.js +14 -0
  5. package/src/lib/components/ai-job-links.js.map +1 -1
  6. package/src/lib/components/ai-site-start-card.component.d.ts +1 -1
  7. package/src/lib/components/ai-site-start-card.component.js +92 -19
  8. package/src/lib/components/ai-site-start-card.component.js.map +1 -1
  9. package/src/lib/declarations.server.js +12 -0
  10. package/src/lib/declarations.server.js.map +1 -1
  11. package/src/lib/jobs/ai-build-capabilities.js +56 -2
  12. package/src/lib/jobs/ai-build-capabilities.js.map +1 -1
  13. package/src/lib/jobs/ai-job-build-step.d.ts +3 -8
  14. package/src/lib/jobs/ai-job-build-step.js +49 -12
  15. package/src/lib/jobs/ai-job-build-step.js.map +1 -1
  16. package/src/lib/jobs/ai-job-form-dataset.d.ts +8 -5
  17. package/src/lib/jobs/ai-job-form-dataset.js +28 -10
  18. package/src/lib/jobs/ai-job-form-dataset.js.map +1 -1
  19. package/src/lib/jobs/ai-job-form-step.d.ts +20 -4
  20. package/src/lib/jobs/ai-job-form-step.js +98 -28
  21. package/src/lib/jobs/ai-job-form-step.js.map +1 -1
  22. package/src/lib/jobs/ai-job-layout-language.d.ts +6 -2
  23. package/src/lib/jobs/ai-job-layout-language.js +16 -5
  24. package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
  25. package/src/lib/jobs/ai-job-layout-step.js +4 -1
  26. package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
  27. package/src/lib/jobs/ai-job-media-step.d.ts +239 -0
  28. package/src/lib/jobs/ai-job-media-step.js +610 -0
  29. package/src/lib/jobs/ai-job-media-step.js.map +1 -0
  30. package/src/lib/jobs/ai-job-page-language.d.ts +2 -0
  31. package/src/lib/jobs/ai-job-page-language.js +9 -0
  32. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  33. package/src/lib/jobs/ai-job-page-sections.js +4 -3
  34. package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
  35. package/src/lib/jobs/ai-job-page-step.js +3 -2
  36. package/src/lib/jobs/ai-job-page-step.js.map +1 -1
  37. package/src/lib/jobs/ai-job-plan-step.d.ts +10 -1
  38. package/src/lib/jobs/ai-job-plan-step.js +73 -15
  39. package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
  40. package/src/lib/jobs/ai-job-settings-step.d.ts +0 -4
  41. package/src/lib/jobs/ai-job-settings-step.js +2 -7
  42. package/src/lib/jobs/ai-job-settings-step.js.map +1 -1
  43. package/src/lib/jobs/ai-job-site-content.d.ts +2 -2
  44. package/src/lib/jobs/ai-job-site-content.js +5 -3
  45. package/src/lib/jobs/ai-job-site-content.js.map +1 -1
  46. package/src/lib/jobs/ai-job-site-datasets.d.ts +1 -1
  47. package/src/lib/jobs/ai-job-site-datasets.js +3 -2
  48. package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
  49. package/src/lib/jobs/ai-job-site-events.d.ts +148 -0
  50. package/src/lib/jobs/ai-job-site-events.js +313 -0
  51. package/src/lib/jobs/ai-job-site-events.js.map +1 -0
  52. package/src/lib/jobs/ai-job-site-step.d.ts +9 -3
  53. package/src/lib/jobs/ai-job-site-step.js +63 -17
  54. package/src/lib/jobs/ai-job-site-step.js.map +1 -1
  55. package/src/lib/jobs/ai-job-tracking-step.d.ts +184 -0
  56. package/src/lib/jobs/ai-job-tracking-step.js +501 -0
  57. package/src/lib/jobs/ai-job-tracking-step.js.map +1 -0
  58. package/src/lib/jobs/ai-layout-stock-photos.d.ts +41 -0
  59. package/src/lib/jobs/ai-layout-stock-photos.js +71 -3
  60. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  61. package/src/lib/jobs/ai-site-publish.js +2 -3
  62. package/src/lib/jobs/ai-site-publish.js.map +1 -1
  63. package/src/lib/jobs/ai-stock-photo-picker.d.ts +24 -0
  64. package/src/lib/jobs/ai-stock-photo-picker.js +108 -0
  65. package/src/lib/jobs/ai-stock-photo-picker.js.map +1 -0
  66. package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.d.ts +37 -0
  67. package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.js +47 -0
  68. package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.js.map +1 -0
  69. package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.d.ts +21 -0
  70. package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.js +128 -0
  71. package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.js.map +1 -0
  72. package/src/lib/jobs/fixtures/ai-stock-photo-agl3769-recordings.d.ts +21 -0
  73. package/src/lib/jobs/fixtures/ai-stock-photo-agl3769-recordings.js +126 -0
  74. package/src/lib/jobs/fixtures/ai-stock-photo-agl3769-recordings.js.map +1 -0
  75. package/src/lib/layout-language/ai-layout-compiler.d.ts +10 -4
  76. package/src/lib/layout-language/ai-layout-compiler.js +38 -19
  77. package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
  78. package/src/lib/layout-language/ai-layout-frame.d.ts +7 -5
  79. package/src/lib/layout-language/ai-layout-frame.js +12 -9
  80. package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
  81. package/src/lib/layout-language/ai-layout-gaps.js +3 -1
  82. package/src/lib/layout-language/ai-layout-gaps.js.map +1 -1
  83. package/src/lib/layout-language/ai-layout-labels.d.ts +70 -0
  84. package/src/lib/layout-language/ai-layout-labels.js +162 -0
  85. package/src/lib/layout-language/ai-layout-labels.js.map +1 -0
  86. package/src/lib/layout-language/ai-layout-links.js +5 -2
  87. package/src/lib/layout-language/ai-layout-links.js.map +1 -1
  88. package/src/lib/layout-language/ai-layout-listings.d.ts +14 -1
  89. package/src/lib/layout-language/ai-layout-listings.js +32 -5
  90. package/src/lib/layout-language/ai-layout-listings.js.map +1 -1
  91. package/src/lib/model/ai-build-event-page.d.ts +70 -0
  92. package/src/lib/model/ai-build-event-page.js +145 -0
  93. package/src/lib/model/ai-build-event-page.js.map +1 -0
  94. package/src/lib/model/ai-build-job.d.ts +21 -0
  95. package/src/lib/model/ai-build-job.js +39 -0
  96. package/src/lib/model/ai-build-job.js.map +1 -1
  97. package/src/lib/model/ai-build-plan.d.ts +25 -14
  98. package/src/lib/model/ai-build-plan.js +33 -23
  99. package/src/lib/model/ai-build-plan.js.map +1 -1
  100. package/src/lib/model/ai-job-activity.js +3 -1
  101. package/src/lib/model/ai-job-activity.js.map +1 -1
  102. package/src/lib/model/ai-jobs.types.d.ts +10 -2
  103. package/src/lib/model/ai-jobs.types.js +3 -1
  104. package/src/lib/model/ai-jobs.types.js.map +1 -1
  105. package/src/lib/model/ai-plan-capabilities.d.ts +8 -0
  106. package/src/lib/model/ai-plan-capabilities.js.map +1 -1
  107. package/src/lib/model/ai-site-inventory.d.ts +2 -0
  108. package/src/lib/model/ai-site-inventory.js +5 -0
  109. package/src/lib/model/ai-site-inventory.js.map +1 -1
  110. package/src/lib/model/ai-site-job.d.ts +2 -2
  111. package/src/lib/model/ai-site-job.js +3 -3
  112. package/src/lib/model/ai-site-job.js.map +1 -1
  113. package/src/lib/runtime/ai-doctrine-validators.d.ts +25 -3
  114. package/src/lib/runtime/ai-doctrine-validators.js +53 -6
  115. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
  116. package/src/lib/runtime/ai-doctrine.d.ts +6 -1
  117. package/src/lib/runtime/ai-doctrine.js +13 -9
  118. package/src/lib/runtime/ai-doctrine.js.map +1 -1
  119. package/src/lib/runtime/ai-eval-live.d.ts +1 -1
  120. package/src/lib/runtime/ai-eval-live.js +1 -1
  121. package/src/lib/runtime/ai-eval-live.js.map +1 -1
  122. package/src/lib/runtime/ai-palette.d.ts +3 -1
  123. package/src/lib/runtime/ai-palette.generated.js +498 -10
  124. package/src/lib/runtime/ai-palette.generated.js.map +1 -1
  125. package/src/lib/runtime/ai-palette.js +5 -3
  126. package/src/lib/runtime/ai-palette.js.map +1 -1
  127. package/src/lib/runtime/ai-template-examples.js +8 -2
  128. package/src/lib/runtime/ai-template-examples.js.map +1 -1
  129. package/src/lib/server.js +8 -0
  130. package/src/lib/server.js.map +1 -1
@@ -25,6 +25,7 @@ import { AI_LAYOUT_GROUP_KINDS, AI_LAYOUT_MAX_ITEMS } from "./ai-layout-language
25
25
  import { aiLayoutDesignChoices, aiLayoutFamily, aiLayoutGroupVariant } from "./ai-layout-design.js";
26
26
  import { AI_LAYOUT_FEATURED_RECORDS, AI_LAYOUT_LISTING_ELEMENTS, aiLayoutListingAt, aiLayoutRecordHref } from "./ai-layout-listings.js";
27
27
  import { aiStorefrontItemIcons } from "./ai-layout-storefront.js";
28
+ import { AI_LAYOUT_LABELS_EN, aiLayoutLabel } from "./ai-layout-labels.js";
28
29
  import { aiLayoutRenamedLabel, aiLayoutResolveLink } from "./ai-layout-links.js";
29
30
  import { aiLayoutSpans, AI_LAYOUT_FRAMES, AiLayoutTreeBuilder } from "./ai-layout-tree.js";
30
31
  /**
@@ -2017,15 +2018,16 @@ function instances(scope, placed, items, perRow) {
2017
2018
  '{{entry.coverImage}}'
2018
2019
  ];
2019
2020
  /** The button under a featured band that opens the whole list, where the site has one and the design gave none. */ function listingAllButton(page, listing) {
2021
+ const language = page.options.language;
2020
2022
  if (listing.kind === 'posts') return listing.href ? {
2021
2023
  kind: 'button',
2022
- text: 'All posts',
2024
+ text: aiLayoutLabel('allPosts', language),
2023
2025
  to: listing.href,
2024
2026
  style: 'secondary'
2025
2027
  } : null;
2026
2028
  const index = listing.placements.find((placement)=>placement.role === 'index' && placement.screenId !== page.targets.pageId);
2027
2029
  if (!index) return null;
2028
- const text = listing.kind === 'tracks' ? 'All music' : listing.kind === 'records' ? 'See all' : 'Shop all';
2030
+ const text = aiLayoutLabel(listing.kind === 'tracks' ? 'allMusic' : listing.kind === 'events' ? 'allEvents' : listing.kind === 'records' ? 'seeAll' : 'shopAll', language);
2029
2031
  return {
2030
2032
  kind: 'button',
2031
2033
  text,
@@ -2138,7 +2140,7 @@ function listingSection(scope, blocks, placed) {
2138
2140
  container
2139
2141
  ], 'section', (_ref = (_page_options_sectionIds = page.options.sectionIds) == null ? void 0 : _page_options_sectionIds[index]) != null ? _ref : sectionIdOf(index));
2140
2142
  }
2141
- /** What a store's reviews are headed with where neither the design nor the plan says. */ export const AI_LAYOUT_REVIEWS_HEADING = 'What our customers say';
2143
+ /** What a store's reviews are headed with where neither the design nor the plan says. */ export const AI_LAYOUT_REVIEWS_HEADING = AI_LAYOUT_LABELS_EN.reviewsHeading;
2142
2144
  /**
2143
2145
  * A store's own customer reviews (AGL-3676): the commerce plugin's Product
2144
2146
  * reviews in its store-wide scope, carrying the section's heading itself.
@@ -2151,7 +2153,7 @@ function listingSection(scope, blocks, placed) {
2151
2153
  const { page, index, at } = scope;
2152
2154
  const tree = page.tree;
2153
2155
  const given = blocks.find((block)=>speaksHeading(scope, block));
2154
- 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') || AI_LAYOUT_REVIEWS_HEADING;
2156
+ const heading = aiLayoutWords(given == null ? void 0 : given.text, 'heading', page.targets.facts) || aiLayoutFitText((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name, 'heading') || aiLayoutLabel('reviewsHeading', page.options.language);
2155
2157
  page.settled.push({
2156
2158
  at,
2157
2159
  what: "the store's own reviews placed: shown once shoppers leave them, never written for them"
@@ -2178,7 +2180,7 @@ function listingSection(scope, blocks, placed) {
2178
2180
  container
2179
2181
  ], bandSx(scope.band), scope.band === 'dark');
2180
2182
  }
2181
- /** What a store's sign-up is headed with where neither the design nor the plan says. */ export const AI_LAYOUT_SIGNUP_HEADING = 'Join our newsletter';
2183
+ /** What a store's sign-up is headed with where neither the design nor the plan says. */ export const AI_LAYOUT_SIGNUP_HEADING = AI_LAYOUT_LABELS_EN.signupHeading;
2182
2184
  /**
2183
2185
  * A store's newsletter sign-up (AGL-3676): the design's heading and words
2184
2186
  * beside the commerce plugin's Newsletter signup field, or over it on a
@@ -2196,7 +2198,7 @@ function listingSection(scope, blocks, placed) {
2196
2198
  var _page_plan_sections_index;
2197
2199
  flow.unshift({
2198
2200
  kind: 'heading',
2199
- text: ((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name) || AI_LAYOUT_SIGNUP_HEADING
2201
+ text: ((_page_plan_sections_index = page.plan.sections[index]) == null ? void 0 : _page_plan_sections_index.name) || aiLayoutLabel('signupHeading', page.options.language)
2200
2202
  });
2201
2203
  }
2202
2204
  page.settled.push({
@@ -2204,7 +2206,7 @@ function listingSection(scope, blocks, placed) {
2204
2206
  what: "the store's newsletter sign-up placed"
2205
2207
  });
2206
2208
  const field = tree.add(AI_LAYOUT_LISTING_ELEMENTS.signup, {
2207
- buttonLabel: 'Subscribe'
2209
+ buttonLabel: aiLayoutLabel('subscribe', page.options.language)
2208
2210
  }, null, null, 'signup');
2209
2211
  noted(scope, [
2210
2212
  field,
@@ -2338,9 +2340,10 @@ function listingSection(scope, blocks, placed) {
2338
2340
  style: 'secondary'
2339
2341
  });
2340
2342
  }
2343
+ const text = aiLayoutLabel('shopAll', scope.page.options.language);
2341
2344
  const shopAll = {
2342
2345
  kind: 'button',
2343
- text: AI_LAYOUT_SHOP_ALL,
2346
+ text,
2344
2347
  to: `page:${shop}`,
2345
2348
  style: 'primary'
2346
2349
  };
@@ -2348,10 +2351,10 @@ function listingSection(scope, blocks, placed) {
2348
2351
  else flow.splice(firstButton, 0, shopAll);
2349
2352
  scope.page.settled.push({
2350
2353
  at: scope.at,
2351
- what: `the hero opens the shop: "${AI_LAYOUT_SHOP_ALL}" leads its buttons`
2354
+ what: `the hero opens the shop: "${text}" leads its buttons`
2352
2355
  });
2353
2356
  }
2354
- /** The button a storefront's hero opens its shop with. */ export const AI_LAYOUT_SHOP_ALL = 'Shop all';
2357
+ /** The button a storefront's hero opens its shop with. */ export const AI_LAYOUT_SHOP_ALL = AI_LAYOUT_LABELS_EN.shopAll;
2355
2358
  /**
2356
2359
  * A storefront's reasons to buy as open columns, each led by an icon over its
2357
2360
  * title and words (AGL-3676): the icon the design named for it, else one its
@@ -2423,6 +2426,22 @@ function listingSection(scope, blocks, placed) {
2423
2426
  ]);
2424
2427
  return id;
2425
2428
  }
2429
+ if (listing.kind === 'events') {
2430
+ // The site's published events (AGL-3755), each with its date, place and
2431
+ // cover: the section's heading is the model's, so the list adds none.
2432
+ id = tree.add(element, featured ? {
2433
+ maxItems: String(shown)
2434
+ } : null, null, null, 'events');
2435
+ page.settled.push({
2436
+ at: scope.at,
2437
+ what: 'the site’s events listed by the Event List'
2438
+ });
2439
+ noted(scope, [
2440
+ id,
2441
+ id
2442
+ ]);
2443
+ return id;
2444
+ }
2426
2445
  if (listing.kind === 'products') {
2427
2446
  id = tree.add(element, _extends({
2428
2447
  source: 'all',
@@ -2441,10 +2460,10 @@ function listingSection(scope, blocks, placed) {
2441
2460
  quickAdd: true,
2442
2461
  // A store that opens before its first products are in says so, with a
2443
2462
  // way to hear when they land (AGL-3676): never placeholder products.
2444
- emptyTitle: AI_LAYOUT_STORE_EMPTY.title,
2445
- emptyText: listing.emptyAction ? AI_LAYOUT_STORE_EMPTY.text : AI_LAYOUT_STORE_EMPTY.textAlone
2463
+ emptyTitle: aiLayoutLabel('storeEmptyTitle', page.options.language),
2464
+ emptyText: aiLayoutLabel(listing.emptyAction ? 'storeEmptyText' : 'storeEmptyTextAlone', page.options.language)
2446
2465
  }, listing.emptyAction ? {
2447
- emptyActionLabel: listing.emptyAction.label,
2466
+ emptyActionLabel: listing.emptyAction.label === AI_LAYOUT_LABELS_EN.getInTouch ? aiLayoutLabel('getInTouch', page.options.language) : listing.emptyAction.label,
2448
2467
  emptyActionHref: listing.emptyAction.href
2449
2468
  } : {}), null, null, 'products');
2450
2469
  } else if (listing.kind === 'records') {
@@ -2460,9 +2479,9 @@ function listingSection(scope, blocks, placed) {
2460
2479
  return id;
2461
2480
  }
2462
2481
  /** What a store's Product grid says while the store lists nothing yet (AGL-3676). */ export const AI_LAYOUT_STORE_EMPTY = {
2463
- title: 'New pieces are on the way',
2464
- text: 'Our first pieces are being finished now. Get in touch and we will let you know the moment they land.',
2465
- /** Said where the site has no page to get in touch on. */ textAlone: 'Our first pieces are being finished now. Check back soon.'
2482
+ title: AI_LAYOUT_LABELS_EN.storeEmptyTitle,
2483
+ text: AI_LAYOUT_LABELS_EN.storeEmptyText,
2484
+ /** Said where the site has no page to get in touch on. */ textAlone: AI_LAYOUT_LABELS_EN.storeEmptyTextAlone
2466
2485
  };
2467
2486
  /** The most posts a page of the site lists where it is the writing's own page. */ const COLLECTION_INDEX_POSTS = 9;
2468
2487
  /** The blog's posts as the site's design lists them: a grid of covers, or a ruled list with the dates. */ function postsElement(scope, listing, limit) {
@@ -2494,7 +2513,7 @@ function listingSection(scope, blocks, placed) {
2494
2513
  variant: 'body2'
2495
2514
  }, muted(scope), null, 'postExcerpt');
2496
2515
  const more = tree.add('muiScreenLink', {
2497
- children: 'Read the post',
2516
+ children: aiLayoutLabel('readPost', page.options.language),
2498
2517
  href: '{{entry.url}}',
2499
2518
  renderAs: 'link',
2500
2519
  color: 'inherit'
@@ -2566,7 +2585,7 @@ function listingSection(scope, blocks, placed) {
2566
2585
  ], 'posts');
2567
2586
  }
2568
2587
  // ── A dataset's records (AGL-3616) ───────────────────────────────────────
2569
- /** The words of the link under each record's card to its own page (AGL-3727). */ export const AI_LAYOUT_RECORD_LINK_LABEL = 'View details';
2588
+ /** The words of the link under each record's card to its own page (AGL-3727). */ export const AI_LAYOUT_RECORD_LINK_LABEL = AI_LAYOUT_LABELS_EN.viewDetails;
2570
2589
  /** A field whose name says it is a record's kicker: its category, role, time or place. */ const RECORD_KICKER = /\b(category|categories|type|kind|role|title|position|section|course|date|dates|time|times|when|day|days|location|place|where|venue|city|duration|level|tag|tags)\b/i;
2571
2590
  /** A field whose name says it is a record's words: its description, bio or answer. */ const RECORD_BODY = /\b(description|summary|details?|about|bio|biography|answer|text|notes?|body|blurb|overview|excerpt|ingredients|includes)\b/i;
2572
2591
  /** A dataset of questions and answers, listed as a ruled list rather than cards. */ const RECORD_QUESTIONS = /\b(faqs?|questions?|q ?& ?a)\b/i;
@@ -2644,7 +2663,7 @@ function listingSection(scope, blocks, placed) {
2644
2663
  borderRadius: 2
2645
2664
  }, null, 'recordImage') : null;
2646
2665
  const more = recordHref ? tree.add('muiScreenLink', {
2647
- children: AI_LAYOUT_RECORD_LINK_LABEL,
2666
+ children: aiLayoutLabel('viewDetails', page.options.language),
2648
2667
  href: recordHref,
2649
2668
  renderAs: 'link',
2650
2669
  color: 'inherit'