Skip to content

feat(webkit): [ENG-49886] add article and content page sections - #1151

Merged
robson-junior-azion merged 9 commits into
mainfrom
feat/ENG-49886-sections-content
Nov 6, 2026
Merged

robson-junior-azion merged 9 commits into
mainfrom
feat/ENG-49886-sections-content

Conversation

@isaque-bock-azion

Copy link
Copy Markdown
Contributor

Summary

  • Nine article and content blocks become @aziontech/webkit/sections/* components with spec, browser-mode test, component story and size budget: article-body, article-cards, article-highlight, article-index-blog, article-index-resource-hub, resource-grid, story-library, subject-library, faq-section.
  • article-index splits into a blog block and a resource-hub block, because their filters and item shapes differ. Filters, search and tabs are local state.
  • faq-section answers accept block markdown (paragraphs, - lists) with no v-html, so RichAnswers renders the component.

How to test

  1. PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN=false CI= pnpm --filter @aziontech/webkit exec vitest run src/components/sections → all pass in Chromium.
  2. pnpm storybook:dev, then open Templates/Marketing/Content/FaqSection → RichAnswers: answers show paragraphs and bullet lists with working links.
  3. Open StoryLibrary and type in the search: the grid filters, and NoResults shows the EmptyState with a clear action.

Notes

  • Minor release of @aziontech/webkit. Stacked on feat(webkit): [ENG-49885] add comparison and pricing page sections #1150 (ENG-49886).
  • Site JSON changes (the site must follow):
    • article-cards: article-cards-articles / -success-cases / -centered → _id: 'article-cards', with kind: 'left' (the first two) or kind: 'centered'.
    • resource-grid: gains eyebrow, description and primaryAction.
    • article-highlight: anchor: 'articles' is added.
    • article-index-resource-hub: rowKind and the unused items[].categories are removed.
    • story-library:
      • search.shortPlaceholder is removed;
      • linkLabel, moreLabel and ariaLabel are added.
    • article-body: eyebrow is added, share.copyFeed is removed, and article is required.
    • subject-library: closing.actions[] → closing.primaryAction / secondaryAction.
    • faq-section: anchor: 'faq' is added. answer may hold blank-line paragraphs and - lists; a single-paragraph answer renders as before.
  • Known gaps:
    • "Load more" (blog, resource hub, story library) has no paging contract yet.
    • article-body renders block markdown only.
    • The article-body axe check with SplitButton is it.skip (nested-interactive, a known SplitButton defect).

…vocabulary

The marketing site places whole bands on a page from JSON, so each band
becomes a webkit component under the new sections category. SECTIONS.md
records the convention the blocks follow: props are exactly the site
JSON keys, kind changes layout only, one landmark per band, and the
data module under _sections/ is the single source for the template
story, the component story and the MDX. There is no registry or
dispatcher: the site imports each block and maps _id to it itself.

Forms are the one exception to props-only: they emit submit with the
values and the site posts them, reporting back through loading,
submitted and error, so the package never fetches nor fakes a send.

imports.md documents sections/ as the only category whose public path
keeps a prefix, so the import path matches the section _id. The
anchor concept enters the prop vocabulary (rule and engine together),
and catalog.json is regenerated because it stamps the vocabulary.
…ory helpers

Registers sections in the hook category registry and the spec schema
so a block under src/components/sections/<name>/ resolves its spec,
testid and story like any other category.

build-catalog resolves the spec of a nested export by its last
segment, so ./sections/use-cases reads .specs/use-cases.md; with no
section exported yet the catalog is unchanged.

Two Storybook helpers back the section stories: sectionMarkup turns a
section's site-JSON props into concrete markup for a runnable Show
code SFC (structured values become script-setup consts, a form's
submit wiring can be added), and withStoryAssets swaps the site's
/marketing-components/ URLs for the package assets on the canvas only,
so the documented JSON keeps the site paths while images render.
Seven page-frame blocks become @aziontech/webkit/sections/* components,
each with a spec, a browser-mode test, a component story and a size
budget, and their Templates/Marketing stories now render the component
from the shared _sections data modules instead of composing the band.

hero-band merges the five hero _ids that share one data model and
differ only in layout (kind centered, title-band, pixel-floor,
copy-beside-art, plus size for the small title band);
hero-copy-on-top-art keeps its own topology model.

hero-form never posts: it validates on submit only, following the
webkit-form pattern (persistent Required tag on the label, amber
required state for an empty field and red invalid for a malformed one,
both only after a submit), and emits submit with the values by field
name. The site posts them using the entry's submission block and sets
loading, submitted or error. Its budget is high because the phone field
inlines the country-flags sprite.
Thirteen feature and solution blocks become
@aziontech/webkit/sections/* components with spec, browser-mode test,
component story and size budget; their Templates/Marketing stories
render the component from the shared _sections data modules.

Variants that share one data model merge into one block: the three
code-split _ids become code-split, and media-split-stack-solutions and
-alternating become media-split-stack with kind media-end or
alternating. architecture-tabs tabs carry their diagram name, and the
Platform page is the same block with other data. cli-terminal shows the
session through CodeBlock's line entrance instead of typing it live.

Blocks that compose Illustration or Diagram are budgeted on the entry
chunk only, since those registries split into async chunks.
Eight social-proof blocks become @aziontech/webkit/sections/*
components with spec, browser-mode test, component story and size
budget; their Templates/Marketing stories render the component from the
shared _sections data modules.

The two mosaic layouts carry disjoint data, so they are two blocks:
client-mosaic derives its bento placement from the data and
client-mosaic-columns gets its own _id. Logos and badges keep the
site's URLs in the documented JSON and are resolved to the package
assets on the Storybook canvas only.
comparison-table, compare-plans, compare-support-tiers and
pricing-plans become @aziontech/webkit/sections/* components with spec,
browser-mode test, component story and size budget; their
Templates/Marketing stories render the component from the shared
_sections data modules.

Plans and support tiers stay two blocks because their row and closing
models differ. The plan or tier picked on small screens and the billing
period are local state. Picker and column labels move to the ariaLabel
vocabulary, closing links to primaryAction or a per-section action, and
anchor replaces the ids the templates hard-coded.
Nine article and content blocks become @aziontech/webkit/sections/*
components with spec, browser-mode test, component story and size
budget; their Templates/Marketing stories render the component from the
shared _sections data modules.

The three article-cards _ids share one item model, so they merge into
article-cards with kind left or centered. The blog and resource-hub
indexes differ in filters and item shape, so article-index splits into
article-index-blog and article-index-resource-hub. Filtering, search
and tab state are local.

faq-section answers accept block markdown (blank-line paragraphs and
dash lists) on top of inline links and emphasis, rendered without
v-html, so the rich-answers story renders the component instead of a
hand-built Faq slot.
@robson-junior-azion
robson-junior-azion merged commit a85ff2a into main Nov 6, 2026
20 checks passed
@robson-junior-azion
robson-junior-azion deleted the feat/ENG-49886-sections-content branch November 6, 2026 20:32
@github-actions github-actions Bot mentioned this pull request Nov 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants