@taprootio/site-authoring 0.10.3 → 0.10.8

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taprootio/site-authoring",
3
- "version": "0.10.3",
3
+ "version": "0.10.8",
4
4
  "description": "Taproot site authoring CLI: sign in once in the browser, then pull, validate, push, preview, approve, and deploy a site from the terminal",
5
5
  "type": "module",
6
6
  "license": "ISC",
@@ -28,7 +28,7 @@
28
28
  "README.md"
29
29
  ],
30
30
  "dependencies": {
31
- "@taprootio/espalier": "4.19.0"
31
+ "@taprootio/espalier": "4.20.1"
32
32
  },
33
33
  "scripts": {
34
34
  "test": "node --test",
package/src/constants.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export const CLI_NAME = "@taprootio/site-authoring";
2
- export const CLI_VERSION = "0.10.3";
2
+ export const CLI_VERSION = "0.10.8";
3
3
  export const CLI_BINARY_NAME = "taproot-site";
4
4
  export const RESULT_SCHEMA_VERSION = 1;
5
5
  export const CONFIG_FILE_NAME = "taproot-site.json";
@@ -157,6 +157,10 @@ const CTA = Object.freeze({
157
157
  }),
158
158
  imagePosition: enumOf("top", "left", "right"),
159
159
  mediaImage: image(),
160
+ // TR00890: "waitlist" replaces the link button with an email-capture form
161
+ // that posts to the platform's public waitlist endpoint. buttonUrl is
162
+ // ignored in that mode; buttonText becomes the submit button's label.
163
+ formMode: enumOf("none", "waitlist"),
160
164
  });
161
165
 
162
166
  /** `FeatureGridData`. */
@@ -203,14 +207,25 @@ const TESTIMONIAL = Object.freeze({
203
207
 
204
208
  /** `LatestPostsData` — resolved at generation time. */
205
209
  const LATEST_POSTS = Object.freeze({
206
- count: num({ values: Object.freeze([3, 6, 9, 12]) }),
207
- columns: num({ values: Object.freeze([2, 3, 4]) }),
210
+ count: num({
211
+ integer: true,
212
+ minimum: 1,
213
+ maximum: 12,
214
+ description: "How many posts to show, 1 to 12; a single post spans the full width.",
215
+ }),
216
+ columns: num({ values: Object.freeze([1, 2, 3, 4]) }),
208
217
  pageTypes: list(enumOf(...LATEST_POST_PAGE_TYPES)),
209
218
  showPinned: bool(),
210
219
  highlightFirst: bool(),
211
220
  showDescription: bool(),
212
221
  showDate: bool(),
213
222
  showAuthor: bool(),
223
+ borderWidth: num({
224
+ integer: true,
225
+ minimum: 0,
226
+ description: "Pixel border around each card, as on a card grid; the grid itself is never framed. 0 boxes nothing; omitted publishes 1.",
227
+ }),
228
+ bannerScheme: enumOf("auto", "light", "dark"),
214
229
  });
215
230
 
216
231
  /** `CardGridData`. `cropState` is the one genuinely optional field in types.ts. */
@@ -348,10 +363,12 @@ const COMPONENT_DEFINITIONS = Object.freeze({
348
363
  borderWidth: 0,
349
364
  imagePosition: "top",
350
365
  mediaImage: null,
366
+ formMode: "none",
351
367
  },
352
368
  [
353
369
  "Button text must describe its action or destination.",
354
370
  "Give meaningful media a descriptive alt value and decorative media an empty alt value.",
371
+ "formMode \"waitlist\" renders an email-capture form instead of the link button; leave buttonUrl empty and use buttonText for the submit label.",
355
372
  ],
356
373
  {
357
374
  heading: "Ready to begin?",
@@ -435,6 +452,8 @@ const COMPONENT_DEFINITIONS = Object.freeze({
435
452
  showDescription: true,
436
453
  showDate: true,
437
454
  showAuthor: false,
455
+ borderWidth: 1,
456
+ bannerScheme: "auto",
438
457
  },
439
458
  ["Keep descriptions enabled when titles alone do not make each destination clear."],
440
459
  {
@@ -446,6 +465,8 @@ const COMPONENT_DEFINITIONS = Object.freeze({
446
465
  showDescription: true,
447
466
  showDate: true,
448
467
  showAuthor: false,
468
+ borderWidth: 1,
469
+ bannerScheme: "dark",
449
470
  },
450
471
  ),
451
472
  "card-grid": component(
@@ -732,10 +732,10 @@ function renderSection(
732
732
  "--esp-section-padding-block: 0",
733
733
  );
734
734
  }
735
- if (kind === "explicit") {
736
- const decorationStyle = normalizedSectionDecorationStyle(attrs.decoration);
737
- if (decorationStyle) sectionStyleParts.push(...decorationStyle);
738
- }
735
+ // Espalier paints the decoration plane only on a section carrying the
736
+ // `decoration` attribute, so the hooks and the attribute travel together.
737
+ const decorationStyle = kind === "explicit" ? normalizedSectionDecorationStyle(attrs.decoration) : undefined;
738
+ if (decorationStyle) sectionStyleParts.push(...decorationStyle);
739
739
  const background = kind === "explicit" ? normalizeSectionBackground(attrs.background) : undefined;
740
740
  const backgroundPicture = background
741
741
  ? renderSectionBackgroundPicture(background, options.claimSectionBackgroundImage?.() === true)
@@ -773,6 +773,7 @@ function renderSection(
773
773
  "data-entrance": entrance,
774
774
  "data-entrance-stagger": entranceStagger,
775
775
  context,
776
+ decoration: decorationStyle ? true : undefined,
776
777
  style: sectionStyle,
777
778
  },
778
779
  surfaced,
@@ -51,7 +51,7 @@ import {
51
51
 
52
52
  export { getAppearanceReference, getFooterReference, getThemeReference };
53
53
 
54
- export const REFERENCE_VERSION = 24;
54
+ export const REFERENCE_VERSION = 26;
55
55
  export const PAGE_TYPES = Object.freeze(["free-form"]);
56
56
 
57
57
  function deepFreeze(value) {
@@ -177,7 +177,7 @@ const DESIGN_BLUEPRINTS = deepFreeze([
177
177
  section: { entrance: "fade", entranceStagger: "tight" },
178
178
  components: [
179
179
  { type: "image-banner", properties: { ratio: "2/1", heightMode: "ratio", contentPosition: "bottom-start", scrim: "bottom", imageMotion: "none" } },
180
- { type: "latest-posts", properties: { count: 6, columns: 3, highlightFirst: false, showDescription: true, showDate: true } },
180
+ { type: "latest-posts", properties: { count: 5, columns: 3, highlightFirst: false, showDescription: true, showDate: true, borderWidth: 1, bannerScheme: "auto" } },
181
181
  ],
182
182
  },
183
183
  {