Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
5749589
added the changes
May 13, 2026
81bad38
added mobile rider in auto block
May 13, 2026
9a572c8
Added trigger
May 13, 2026
594b363
change
May 14, 2026
23845a2
css changes
May 14, 2026
2387896
autoblock pattern
May 14, 2026
8d71c64
change the style
May 14, 2026
cce3840
removed the call
May 14, 2026
144e371
rewrite the Autoblock logic to rendering match the Milo pattern
May 15, 2026
71f428d
Figma to block claude skill
sharmeebuilds May 18, 2026
c9bbd22
multiple Xf loading fix
May 20, 2026
46578a3
asl stream end check
May 21, 2026
07a0ce4
asl stream end check
May 21, 2026
8cc70a6
change
May 22, 2026
c2897a7
change
May 22, 2026
215be5d
Merge remote-tracking branch 'origin/dev' into added-autoblock
May 28, 2026
ccf9e1a
Fix for StreamEnd ASL
May 28, 2026
d5abc7a
Deleted the playlist related md files
May 28, 2026
b84410f
commit fix
Jun 5, 2026
7c6d27e
fising the review comments
Jun 5, 2026
0d4ba35
Review comments fix
Jun 15, 2026
2bb5df5
Review comment fix
Jun 15, 2026
1068858
Review comment fix
Jun 16, 2026
54ae789
docs(skill): add git add for WTR test files and mock fixtures in remo…
sharmeebuilds Jun 16, 2026
2d3c892
review comments fix
Jun 17, 2026
ce48d95
Merge branch 'dev' into added-autoblock
hnvadobe Jun 17, 2026
e1aef62
Merge branch 'dev' of github.com:adobecom/event-libs into claude/figm…
sharmeebuilds Jun 22, 2026
5bd45e3
[MWPW-199065] fix(sessions-guide): scope My Sessions/Favorites to act…
dol-iva Jun 22, 2026
3f9f669
[MWPW-199065] feat(sessions-guide): add featured sessions functionality
dol-iva Jun 22, 2026
e6141a5
feat(sessions-guide): enhance LiveUpcomingView and SessionCard for pr…
dol-iva Jun 22, 2026
ca768ee
[MWPW-199065] fix(sessions-guide): use outlined play icon in SessionC…
dol-iva Jun 22, 2026
4bcc554
[MWPW-199065] style(sessions-guide): solid/on-dark action buttons, fr…
dol-iva Jun 22, 2026
2471e9c
[MWPW-199065] fix(sessions-guide): mobile touch fixes, hover suppress…
dol-iva Jun 23, 2026
95c35e0
[MWPW-199065] fix(sessions-guide): adjust drawer peek breakpoint and …
dol-iva Jun 23, 2026
a1878fa
feat(event-agenda): derive time format from event locale
sharmeebuilds Jun 23, 2026
f0e0ffe
Check locale in default locale first
sharmeebuilds Jun 23, 2026
66239dd
Read locale from metadata first
sharmeebuilds Jun 23, 2026
f1dc1af
refactor(event-agenda): move locale formatters to date-time-helper
sharmeebuilds Jun 23, 2026
c368b9f
fix(event-agenda): restore 24h class override and move locale formatt…
sharmeebuilds Jun 23, 2026
2006875
[MWPW-199065] fix(sessions-guide): always navigate on-demand/previous…
dol-iva Jun 24, 2026
14eab97
[MWPW-199065] feat(sessions-guide): smart tab visibility and empty st…
dol-iva Jun 24, 2026
740f0eb
[MWPW-199065] feat(sessions-guide): group on-demand sessions by track…
dol-iva Jun 24, 2026
017bb22
[MWPW-199065] style(sessions-guide): sentence case for view dropdown …
dol-iva Jun 24, 2026
85d5574
[MWPW-199065] style(sessions-guide): uppercase ON DEMAND label in Ses…
dol-iva Jun 24, 2026
77240e1
[MWPW-199065] feat(sessions-guide): apply My Sessions logic and style…
dol-iva Jun 24, 2026
07bd45d
fix(timing-framework): skip dead MR on load and fix MR→MR underrun
michaelready Jun 24, 2026
6fbcaef
[MWPW-199065] refactor(sessions-guide): rename sg-live-section to sg-…
dol-iva Jun 24, 2026
2be7f21
[MWPW-199065] feat(sessions-guide): context-aware primary CTA in feat…
dol-iva Jun 24, 2026
9818c5e
[MWPW-199065] style(sessions-guide): update widget CTA button to matc…
dol-iva Jun 24, 2026
96be406
[MWPW-199065] style(sessions-guide): add play icon to Watch on demand…
dol-iva Jun 24, 2026
2381729
[MWPW-199065] style(sessions-guide): use SessionCard schedule icons f…
dol-iva Jun 24, 2026
4a22827
[MWPW-199065] refactor(sessions-guide): extract shared SVG icons into…
dol-iva Jun 24, 2026
2dcdb6e
[MWPW-199065] fix(sessions-guide): reset TimeSlotRow scroll offset on…
dol-iva Jun 24, 2026
5c96854
[MWPW-199065] fix(sessions-guide): key TimeSlotRow by startTimeUtc to…
dol-iva Jun 24, 2026
a512eed
[MWPW-199065] feat(sessions-guide): color category badge icons from c…
dol-iva Jun 25, 2026
84bdaa4
Merge pull request #175 from adobecom/mobilerider-timing-framework-fix
qiyundai Jun 25, 2026
0c523f9
Merge pull request #153 from adobecom/claude/figma-to-block
qiyundai Jun 25, 2026
7362a2f
[MWPW-199065] style(sessions-guide): rename widget CTA to 'View all s…
dol-iva Jun 25, 2026
5503680
[MWPW-199065] style(sessions-guide): rename featured time slot label …
dol-iva Jun 25, 2026
ccc1fbc
[MWPW-199065] style(sessions-guide): update Design & Illustration cat…
dol-iva Jun 25, 2026
d6f7ed8
feat(sessions-guide): animate heart slide-down and schedule fade-in o…
dol-iva Jun 25, 2026
4eb0b3b
[MWPW-199065] feat(sessions-guide): animate card and row dismiss in M…
dol-iva Jun 25, 2026
97af3ce
[MWPW-199065] chore: ignore sessions-guide prototype directory
dol-iva Jun 25, 2026
08b8070
[MWPW-199065] docs(sessions-guide): update PLAN.md to reflect current…
dol-iva Jun 25, 2026
68c6719
[MWPW-199065] fix(sessions-guide): address code review findings
dol-iva Jun 25, 2026
2f6319e
[MWPW-199065] fix(sessions-guide): accurate arrow paging for variable…
dol-iva Jun 25, 2026
df684f0
[MWPW-199065] fix(sessions-guide): keep next arrow visible until last…
dol-iva Jun 25, 2026
196ab13
[MWPW-199065] fix(sessions-guide): remeasure row carousel when card s…
dol-iva Jun 25, 2026
317494f
[MWPW-199065] fix(sessions-guide): sync card and row dismiss animations
dol-iva Jun 25, 2026
80f5832
[MWPW-199065] fix(sessions-guide): simultaneous card dismiss and adja…
dol-iva Jun 25, 2026
456df40
[MWPW-199065] style(sessions-guide): sentence case for On demand tab …
dol-iva Jun 26, 2026
d5700b3
[MWPW-199065] style(sessions-guide): sentence case for empty state CTA
dol-iva Jun 26, 2026
1f8c42c
[MWPW-199065] style(sessions-guide): use red (#eb1000) for live secti…
dol-iva Jun 26, 2026
5c2a1f7
[MWPW-199065] feat(sessions-guide): on-demand view uses TrackRow caro…
dol-iva Jun 26, 2026
5163262
[MWPW-199065] feat(sessions-guide): show duration instead of start ti…
dol-iva Jun 26, 2026
e5d17f9
[MWPW-199065] test(sessions-guide): add test speaker photo for detail…
dol-iva Jun 26, 2026
45d52cb
[MWPW-199065] style(sessions-guide): add intermediate tablet breakpoi…
dol-iva Jun 26, 2026
8d839c6
feat(events-form): inject submit button when rsvp-config has no submi…
sharmeebuilds Jul 1, 2026
dec2ed0
Merge pull request #147 from adobecom/added-autoblock
hnvadobe Jul 2, 2026
c511764
fix(events-form): prevent phone field detection false-positive on pho…
sharmeebuilds Jul 6, 2026
ac49a58
fix(events-form): skip name-based phone detection when field has expl…
sharmeebuilds Jul 6, 2026
7eb7885
fix(mobile-rider): re-attach streamend listener on every ASL toggle
michaelready Jul 8, 2026
f31927e
test(mobile-rider): cover ASL toggle streamend re-attachment
michaelready Jul 8, 2026
523be30
[MWPW-199065] refactor(sessions-guide): promote session state, toast,…
dol-iva Jul 8, 2026
d9c25d8
fix(promotional-content): rehydrate custom-attribute promotional items
sharmeebuilds Jul 8, 2026
5214d6f
Merge pull request #176 from adobecom/MWPW-194614
qiyundai Jul 8, 2026
5ac342a
Merge pull request #180 from adobecom/MWPW-200188
sharmeebuilds Jul 8, 2026
1149f45
Revert "fix(promotional-content): rehydrate custom-attribute promotio…
sharmeebuilds Jul 8, 2026
aea2646
Merge pull request #181 from adobecom/revert-180-MWPW-200188
sharmeebuilds Jul 8, 2026
9d7f932
fix(promotional-content): match custom-attribute promotionalItems by …
sharmeebuilds Jul 8, 2026
02927a6
Merge pull request #179 from adobecom/mobilerider-asl-fix
michaelready Jul 8, 2026
c7205d3
fix(promotional-content): match custom-attribute promotionalItems by …
sharmeebuilds Jul 8, 2026
28997ee
fix(promotional-content): use custom-attribute fragment paths as-is, …
sharmeebuilds Jul 8, 2026
e0437d4
[MWPW-199065] refactor(sessions-guide): migrate conflict modal to Mil…
dol-iva Jul 8, 2026
b53c2f2
[MWPW-199065] fix(sessions-guide): upgrade vendored preact/signals bu…
dol-iva Jul 8, 2026
616cabe
fix(event-agenda): apply event timezone in fallback time formatting
sharmeebuilds Jul 9, 2026
c2e3122
[MWPW-199065] perf(sessions-guide): memoize view derivations; probe r…
dol-iva Jul 9, 2026
20c1f50
[MWPW-199065] fix(sessions-guide): fix flaky day-boundary test and CS…
dol-iva Jul 9, 2026
18ecfdb
[MWPW-199065] fix(sessions-guide): gate shared session-store bootstra…
danielnoliva Jul 9, 2026
f1c6b69
[MWPW-199065] docs(sessions-guide): add shared session-state usage guide
danielnoliva Jul 9, 2026
1197164
[MWPW-199065] docs(sessions-guide): move shared-state usage guide nex…
danielnoliva Jul 9, 2026
8483fc1
[MWPW-199065] docs(sessions-guide): fix cross-references after moving…
danielnoliva Jul 9, 2026
1cbb3d5
Merge pull request #169 from adobecom/MWPW-199299
sharmeebuilds Jul 9, 2026
b1d3041
Merge pull request #183 from adobecom/MWPW-200188-v2
sharmeebuilds Jul 9, 2026
319033f
[MWPW-199065] test(session-state-demo): add vanilla JS block demoing …
danielnoliva Jul 9, 2026
43b1b7f
[MWPW-199065] style(session-state-demo): add basic card styling
danielnoliva Jul 9, 2026
3a66f23
Merge pull request #184 from adobecom/MWPW-199065
qiyundai Jul 9, 2026
0b91e76
Merge pull request #186 from adobecom/dev
qiyundai Jul 9, 2026
882178b
fix(events-form): honor RSVP displayAs to restore multi-select/radio …
qiyundai Jul 10, 2026
82788c4
fix(events-form): collapse radio-group payload to string, not array
qiyundai Jul 10, 2026
92b9bd4
Merge pull request #187 from adobecom/fix/rsvp-multi-select-displayas
qiyundai Jul 10, 2026
8db5764
Merge pull request #188 from adobecom/dev
qiyundai Jul 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Accessibility Check Subagent

This script is delegated from Phase 6 of the main SKILL.md.
Run **only after** the visual comparison loop (Phase 5) is complete.

---

## Target

**WCAG 2.2 AA** — full compliance. No violations, no incomplete
checks left unresolved.

---

## Tool

Uses `@axe-core/playwright` (installed as a project dev dependency).
Axe-core is injected into the page via Playwright MCP.

---

## Procedure

1. **Navigate** to the preview URL using Playwright MCP.
2. **Set viewport** to 1360 px wide (desktop) for the initial scan.
3. **Inject and run axe-core** scoped to the block's root element:
```js
const { AxeBuilder } = require('@axe-core/playwright');

const results = await new AxeBuilder({ page })
.include('.<block-name>')
.withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
.analyze();
```
4. **Repeat** the scan at mobile viewport (375 px) to catch
responsive-specific issues (touch target sizes, focus visibility).

---

## Processing results

### Violations (must fix)

For each violation in `results.violations`:

1. **Log** the rule ID, impact level, description, and affected nodes.
2. **Fix** the violation:
- CSS issue (contrast, focus indicator, sizing) → update the block's
CSS file.
- HTML/DOM issue (missing alt text, incorrect ARIA, missing labels) →
update the block's JS file (JS is responsible for DOM manipulation at
init time).
- Authoring issue (e.g. missing alt text from authored content) → note
as an authoring concern but do not modify authored content.
3. **Re-run** axe-core to confirm the fix.
4. **Repeat** until zero violations.

### Incomplete checks (review)

For each item in `results.incomplete`:
- Assess whether the block can resolve it or whether it requires manual
review (e.g. colour contrast on complex backgrounds).
- If resolvable, fix it. If not, document it in Obstacles Encountered.

### Common block-level a11y issues to watch for

- **Missing focus indicators** on interactive elements.
- **Insufficient colour contrast** between text and background, especially
on dark/gradient backgrounds.
- **Touch target size** — interactive elements must be at least 24×24 px
(WCAG 2.2 AA).
- **Missing or decorative alt text** — `<img>` elements need appropriate
`alt` attributes; decorative images should have `alt=""` and
`aria-hidden="true"`.
- **Heading hierarchy** — no skipped levels within the block's content.
- **Keyboard navigation** — interactive elements must be reachable and
operable via keyboard.

---

## Iteration limits

- Maximum **3 fix-and-rerun cycles**.
- If violations persist after 3 cycles, document them and move on.

---

## Obstacles Encountered

Compile and surface back to the main skill:

- List of violations found and fixed (rule ID + description).
- List of violations that could not be fixed, with explanation.
- List of incomplete checks that require manual review.
- Any authoring-level concerns (content the block cannot control).
115 changes: 115 additions & 0 deletions .claude/skills/build-block-from-figma/agents/performance-check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Performance Check Subagent

This script is delegated from Phase 7 of the main SKILL.md.
Run **only after** the visual comparison loop (Phase 5) and the
accessibility audit (Phase 6) are complete.

---

## Target thresholds

| Metric | Target | Why it matters |
|--------|--------|----------------|
| **Overall score** | ≥ 90 | Composite performance health |
| **LCP** | ≤ 2.5 s | Perceived load speed |
| **CLS** | ≤ 0.1 | Layout stability |
| **INP** | ≤ 200 ms | Responsiveness |
| **TBT** | ≤ 200 ms | Main-thread availability |

---

## Tool

Uses the `lighthouse` CLI executed via shell commands.

---

## Procedure

1. **Run Lighthouse** against the preview URL:
```bash
npx lighthouse <preview-url> \
--output=json \
--output-path=/tmp/lighthouse-report.json \
--chrome-flags="--headless --no-sandbox" \
--only-categories=performance
```
2. **Parse** the JSON output and extract:
- `categories.performance.score` × 100
- `audits['largest-contentful-paint'].numericValue` (ms)
- `audits['cumulative-layout-shift'].numericValue`
- `audits['total-blocking-time'].numericValue` (ms)
- `audits['interaction-to-next-paint'].numericValue` (ms, if available)
3. **Assess** each metric against the target thresholds.

---

## LCP-specific assessment

1. **Identify the LCP element** from the Lighthouse report:
`audits['largest-contentful-paint'].details`.
2. **Check if the LCP element is inside the new block.**
- If yes, the block directly impacts LCP — assess whether block CSS or
JS is delaying the paint.
- If no, verify the block doesn't add blocking resources.
3. **Common LCP pitfalls**:
- Synchronous JS running before block content is visible.
- CSS hiding content on initial load then revealing it with a transition.
- Large un-optimised images loaded eagerly above the fold (use
`createOptimizedPicture` from Milo instead of bare `<img>` tags).
- Web fonts blocking text rendering.

---

## What to check beyond Lighthouse

Using Playwright MCP, also verify:

1. **No render-blocking resources** — the block's CSS is loaded
asynchronously by the EDS framework (verify, don't assume).
The block's JS must not introduce synchronous `<script>` tags.
2. **No excessive DOM size** — the block should not generate more DOM
nodes than necessary.
3. **No unnecessary reflows** — if the block's JS modifies layout
properties, it must batch reads and writes.

---

## Regression detection

If any metric is worse than the target threshold:

1. Determine if the block is the cause — temporarily hide the block
(`display: none`) and re-run Lighthouse to get a baseline.
2. If the block is the cause, identify the specific resource or code path.
3. **Suggest fixes** but do not apply them automatically — performance
fixes may require architectural decisions. Surface them to the user.

---

## Output format

```
Performance Report
──────────────────
Overall score: XX / 100 [PASS/FAIL]
LCP: X.Xs [PASS/FAIL]
CLS: X.XX [PASS/FAIL]
INP: XXX ms [PASS/FAIL] (or N/A)
TBT: XXX ms [PASS/FAIL]

LCP element: <element description>
LCP in block: Yes / No
```

---

## Obstacles Encountered

Compile and surface back to the main skill:

- Metrics that failed thresholds, with root cause analysis.
- Whether the new block is the cause of any regression.
- Suggested fixes for any performance issues.
- Any measurement limitations (e.g. INP requires interaction, localhost
vs production differences).
119 changes: 119 additions & 0 deletions .claude/skills/build-block-from-figma/agents/visual-comparison.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Visual Comparison Subagent

This script is delegated from Phase 5 of the main SKILL.md.
Use **Playwright MCP** for all browser interactions.

---

## Viewport → width mapping

| Viewport | Playwright width | Figma input |
|----------|-----------------|-------------|
| Mobile | 375 px | Figma Mobile URL |
| Tablet | 1024 px | Figma Tablet URL |
| Desktop | 1360 px | Figma Desktop URL |

Only test viewports for which a Figma frame was provided.

---

## Comparison procedure (per breakpoint)

For each breakpoint:

1. **Navigate** to the preview URL.
2. **Set viewport width** to the value from the table above.
Set height to a generous value (e.g. 900 px) to avoid scroll clipping.
3. **Wait** for the block to finish rendering — wait for the block's root
element to be visible and for any images inside it to load.
4. **Screenshot** the block's bounding box (not the full page).
Use Playwright's element screenshot to capture just the component.
5. **Load the cached Figma frame** for this breakpoint from
`/tmp/build-block-figma/<viewport>.png` (saved during Phase 3).
Do **not** re-fetch from the Figma MCP — the cached file is the source of
truth. If the cache file is missing for a breakpoint, skip that breakpoint
and document it in Obstacles Encountered.
6. **Compare** the screenshot against the Figma frame.

---

## What to assess

For each breakpoint, evaluate:

### Layout & stacking
- Are elements stacked vertically vs placed side-by-side correctly?
This is the most common error — if Figma shows mobile stacking with
heading above image, the implementation must match, not place them in a row.
- Flex/grid direction, wrapping, and alignment.
- Element ordering matches Figma layer order.

### Spacing
- Padding, margins, and gaps between elements.
- Spacing between the block and its container edges.
- Spacing between text elements (heading → body → CTA).

### Typography
- Font size, weight, and line height are visually consistent.
- Heading vs body font family is correct.
- Text colour matches the design.

### Colours & backgrounds
- Background colours, gradients, or images match Figma.
- Foreground element colours (text, icons, borders) match.
- Verify colours against `--color-*` CSS tokens.

### Media
- **Element presence check (critical)**: cross-reference the per-breakpoint
element inventory from Phase 3. If an image or media element exists in
the Figma frame for this breakpoint, it **must** be visible in the
implementation screenshot. A missing image at tablet/desktop when it
exists at mobile is the most common failure — flag this immediately.
- Images are positioned correctly relative to text content.
- Image aspect ratios are preserved.
- Image sizing fills or fits the container as shown in Figma.

### Overall fidelity
- The implementation looks like the Figma design at a glance.
- No missing elements, no extra elements.
- No overflow or clipping issues.

---

## Iteration loop

If a breakpoint differs meaningfully from the Figma design:

1. **Identify** the specific CSS properties causing the discrepancy.
Be precise — e.g. "the flex-direction should be column on mobile but is
currently row" or "the gap between heading and body is 8px but Figma
shows 24px (--spacing-m)".
2. **Update** the local CSS file (and JS if DOM restructuring is needed).
3. **Make changes visible**:
- **Localhost mode:** reload the page in Playwright.
- **Remote-branch-mode:** the main skill (Phase 5d) handles pushing
updated files to the feature branch and force-refreshing the CDN via
`?eventlibs=<branch-name>`. Follow those instructions rather than
simply reloading.
4. **Re-screenshot** and **re-assess** the breakpoint.
5. **Repeat** until fidelity is high.

### Iteration limits

- Maximum **5 passes** per breakpoint.
- If after 5 passes there are still discrepancies, **stop iterating** and
document the remaining issues in the **Obstacles Encountered** section.

---

## Obstacles Encountered

At the end of the visual comparison phase, compile a list of:

- Breakpoints that reached high fidelity (pass).
- Breakpoints that still have discrepancies after 5 passes, with specific
details of what differs and which CSS properties were attempted.
- Any Figma ambiguities (e.g. unclear auto-layout settings, unusual spacing
that doesn't match any token).

Surface this list back to the main skill for inclusion in the final summary.
Loading
Loading