Skip to content

T3-26.26 Prod Release - #173

Merged
qiyundai merged 22 commits into
mainfrom
stage
Jun 24, 2026
Merged

T3-26.26 Prod Release#173
qiyundai merged 22 commits into
mainfrom
stage

Conversation

@sharmeebuilds

@sharmeebuilds sharmeebuilds commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

T3-26.26 Prod Release — stage → main

Sessions Hub

Overhauled the filter UX for desktop and mobile:

  • Filter panel has been fully redesigned with active filter tags and a See all / See less toggle for managing selected filters at a glance
  • Mobile users now get a full-screen drill-in panel for filters, with a pinned Save button at the bottom for committing selections
  • Toolbar has been visually redesigned to match the latest Figma specs
  • Session conflict modal has been redesigned for clarity
  • Register button is disabled when a session has reached capacity

Profile Cards

Extended speaker card display and sorting capabilities:

  • Cards can now be filtered by speaker type; omitting a type value shows all speakers
  • A new order config row enables explicit field-based sort, giving authors control over card ordering beyond the default alpha sort
  • Sort comparisons use deterministic locale-aware comparison to prevent inconsistent ordering across environments

Timing Framework

Improved reliability of the timed-content scheduling system:

  • toggleTime is now respected when avoidStreamEndFlag is set, preventing timed items from firing at the wrong moment
  • Null toggleTime items no longer override the schedule position of valid timed items
  • Traditional worker behaviour now matches module worker behaviour for consistent cross-environment timing
  • Added a fast-path for schedules with no toggleTime items to reduce unnecessary processing

Event Agenda

  • Fixed an overflow issue where long session titles overlap the expand/collapse toggle button

Mobile Rider

  • Fixed a race condition where the stream-end listener was incorrectly triggered when avoidStreamEndFlag was set

Test plan

  • Sessions hub filter panel opens/closes correctly on mobile drill-in; Save button is pinned to bottom
  • Active filter tags reflect current selections; See all / See less toggle works
  • Register button is disabled for full sessions
  • Profile cards filter by type; all speakers shown when type is omitted
  • Profile card order config row correctly overrides default sort
  • Timed content fires at the right time with toggleTime and avoidStreamEndFlag combinations
  • Event agenda title does not overlap toggle button on long titles
  • Mobile rider does not trigger streamend when avoidStreamEndFlag is active

🤖 Generated with Claude Code

sharmeebuilds and others added 20 commits June 17, 2026 11:04
…bile

- Truncate session description to 4 lines on screens ≤768px (tablet/mobile)
- Add 16px row-gap between left content and description when card stacks to single column

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…px, desktop ≥900px

- Consolidate and rename all media queries to match Figma breakpoint spec
- Filter icon-only at ≤899px; 2-column card grid at ≥900px
- Mobile bottom-sheet filter restored to max-width: 767px
- Toolbar actions right-aligned on mobile via justify-content: flex-end

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Mobile (≤767px): column layout, padding 0 32px, full-width button, title 24px
- Tablet (768–899px): column layout, padding 0 40px, full-width button, title 28px
- Desktop (≥900px): row layout, flex-wrap nowrap, gap 56px, auto-width button

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ne 13/14)

Add overflow: hidden and min-width: 0 to .sh-card-desc to give older WebKit
a hard clip boundary for -webkit-line-clamp inside a flex: 1 container.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Keep PM-spec breakpoints: mobile <600px, tablet 600-899px, desktop ≥900px.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… view

Re-add dev branch rules that expand the filter button to full width with
label text when the view dropdown is hidden (My Sessions mode), scoped to
max-width: 899px to match PM breakpoint spec.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…iOS 15/16

Add max-height hard clip to sh-card-desh-text as a fallback for older WebKit
where -webkit-line-clamp breaks with multiple block-level children (p, ul).
8 lines base, 4 lines at tablet/mobile, none when expanded.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Move horizontal padding to sh-session-area (matching sh-toolbar-inner's
max-width: 1200px + margin: 0 auto + content-box model) so card edges
land at the same x position as toolbar content at all viewport widths.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[Mwpw 198650] : Session hub spacing and breakpoint fixes
…and core interactions (#164)

* Update .gitignore and add new Claude skills for Figma integration

- Updated .gitignore to include PIM local state and Claude project settings.
- Added new skills for building blocks and content from Figma designs, including detailed README and SKILL documentation.
- Introduced a new command for building CSS-driven scroll animations for C2 blocks.
- Implemented a structured interview skill to facilitate design discussions and decision-making.

These changes enhance the integration with Figma and improve the workflow for building and managing components in the C2 design system.

* Add Sessions Guide Block with Widget and Full Page Variants

- Introduced a new Sessions Guide block, including both widget and full-page surfaces.
- Added demo HTML for the Sessions Guide, showcasing its functionality.
- Implemented a comprehensive implementation plan detailing architecture, state management, and user interactions.
- Created necessary components such as DrawerShell, DateTabs, and ConflictModal to support the block's features.
- Included CSS for styling the Sessions Guide, ensuring a cohesive design.

These additions enhance the event experience by providing users with a robust tool for navigating sessions.

* Refactor Sessions Guide CSS and TimeSlotRow component for improved viewport handling

- Added a new viewport wrapper in the TimeSlotRow component to enhance mobile and desktop scrolling behavior.
- Updated CSS to ensure proper overflow management and visibility for the session cards.
- Adjusted z-index for better layering of elements within the sessions guide.

These changes improve the user experience by allowing smoother interactions with the session cards in both mobile and desktop views.

* Enhance Sessions Guide with UI improvements and new features

- Updated CSS for better spacing, padding, and font sizes across various components in the Sessions Guide.
- Added a register URL to the configuration for improved user registration flow.
- Enhanced the Carousel component to optimize edge detection for scrolling.
- Modified the DrawerHeader to provide a more descriptive title.
- Improved LiveCard and SessionCard components with better handling of session data and user authentication prompts.
- Updated Toast component to support additional action buttons and customizable durations.

These changes collectively enhance the user experience by improving the visual layout and functionality of the Sessions Guide.

* Fix sessions-guide Phase 1 bugs and cleanups

- Fix operator precedence bug in liveSessions() — `!fn() === day` was
  always false, so MR sessions ignored the active day tab entirely
- Remove double-fetch: gate Provider useEffect on initialSessions.length
- Fix poller singleton leak: stopPolling() at top of startPolling()
- Remove overloaded call-signature shims from upcomingSessions/onDemandSessions
- Remove unused trackIcon variable and trackIcons destructuring in LiveCard
- Remove console.log from sessions-api (production logging via lana only)
- Add eslint-disable to rainfocus/mobile-rider stub params
- Update test mock Provider to evaluate function children after setting
  _current, ensuring correct context ordering in stub environment
- Restore _current assignment in SessionGuideProvider with explanatory
  comment: App is called outside Preact's reconciler so normal context
  propagation does not apply; _current is the only working path

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Refactor sessions-guide Phase 2: extract shared mutation logic and stabilize popstate listener

- Extract hasTimeConflict, scheduleAction, and favoriteAction into new
  services/session-actions.js, eliminating ~150 lines of duplication
  between SessionCard and LiveCard
- Standardize auth guard to check isLoggedIn before isRegistered with
  toast notifications (LiveCard previously only checked isRegistered
  via a modal prompt)
- Stabilize DrawerShell popstate listener with a sessionsRef so it
  registers once instead of re-registering on every 30s poll cycle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Refactor sessions-guide Phase 3: vendor htm-preact and remove factory pattern

Vendors Preact+htm+signals from Milo (commit a48e4f277) into
event-libs/v1/deps/htm-preact.js. Converts all 22 component files and
the store from buildX(preact, store) factory closures to plain named
exports with static imports. Removes the dynamic loadPreact() call from
sessions-guide.js. Adds a WTR middleware to serve the test mock in
place of the vendored file, and excludes the vendored file from ESLint.
Fixes a syntax error (unescaped apostrophe) in DrawerHeader.js.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Enhance Sessions Guide UI and functionality

- Updated CSS styles for improved typography, spacing, and layout across various components, including adjustments to font sizes and paddings.
- Enhanced Carousel component with SVG icons for navigation buttons, improving accessibility and visual consistency.
- Modified CategoryBadge component to accept a size prop for responsive design.
- Integrated CategoryBadge into SessionCard for better categorization of sessions.
- Updated Toast component to include new icons for different notification types, enhancing user feedback.
- Refined session action notifications to use more descriptive variants, improving clarity in user interactions.

These changes collectively enhance the user experience by improving the visual layout and functionality of the Sessions Guide.

* Update stylelint configuration and refactor sessions-guide CSS

- Added a new rule to the stylelint configuration to enforce kebab-case or BEM naming conventions for class selectors.
- Refactored sessions-guide CSS by removing extensive variable definitions and replacing them with imports from dedicated token and overlay files, streamlining the stylesheet and improving maintainability.
- Adjusted background color property syntax for better compatibility.

These changes enhance code quality and maintainability while ensuring adherence to styling conventions.

* Enhance sessions-guide CSS for improved layout and styling

- Added new styles for upcoming titles and time slot rows, including margin, padding, and border properties for better visual separation.
- Introduced flexbox layout for time slot rows to enhance alignment and spacing between elements.

These updates improve the overall user interface and maintain consistency in the Sessions Guide design.

* Fix hover color inversion for category badge and icon buttons on desktop cards

- Live card: target .sg-live-card__track-row (not __track) so CategoryBadge
  inherits white color on hover; add background:transparent to favorite button
  hover so white text isn't invisible against white background
- Session card: explicitly invert .sg-category-badge and icon buttons
  (.sg-icon-btn--outlined.sg-icon-btn--on-light) to on-dark styling on hover,
  with matching hover/active backgrounds; reset both in @media (hover:none)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Replace text glyph arrows in TimeSlotRow with SVG icons matching Carousel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Apply frosted glass blur to sg-backdrop per Figma spec

Replace dark dim with backdrop-filter: blur(12px) and rgb(255 255 255 / 10%)
tint, matching the design node 9145:44389.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add dev mock auth, session state icons, and scheduled/favorited hover fix

- SessionCard swaps calendar→checkmark and outline→filled heart based on
  scheduled/favorited state (icons were previously static inline SVGs)
- store/index.js self-bootstraps dev auth on localhost so scheduling and
  favoriting work without any manual setup or hard refresh
- sg:dev-auth localStorage key takes priority over Milo's guest IMS profile
  so the dev user is never overwritten by unauthenticated page loads
- is-scheduled/is-favorited cards now get the dark hover background on desktop
  (specificity fix: new :hover rule with higher specificity overrides base state)
- dev-mock.js loaded via dynamic import so it is never fetched in production
- REAL-API-CHECKLIST.md documents every mock to remove when real APIs land

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Show only active state buttons on desktop non-hover cards

- IconButton gains optional extraClass prop for external targeting
- SessionCard passes sg-card__btn--schedule and sg-card__btn--favorite
  so the existing CSS visibility rules can take effect
- Remove dead ::after mask-image blocks that doubled icons once the
  classes were wired up (icons are inline SVGs in JS, not pseudo-elements)
- On desktop, only the filled heart shows when favorited-only, only the
  checkmark shows when scheduled-only; hover reveals all buttons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix toast flash and add favorited state to live card

Rewrote Toast to use CSS transitions + double rAF instead of @Keyframes
animations, eliminating the one-frame flash on mount. The element is now
painted in its hidden/offset state before the transition fires, and the
exit animation runs before HIDE_TOAST is dispatched.

LiveCard favorite button now swaps to a filled heart SVG and adds an
is-favorited class when active, with desktop showing an inverted
(filled) button style to match the session card treatment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Set auth-aware default view and fix desktop peek height

Widget now opens to My Sessions for registered users and Live & Upcoming
for guests/unauthenticated users. The default is applied both at initial
state build and on every drawer open so IMS resolution timing doesn't
affect which tab the user lands on.

Desktop peek height is now fixed by viewport width: 500px for ≤1440px
screens and 890px for >1440px (1920px), replacing the content-derived
calculation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Default full-page surface to light theme

The dark-token selector (.sessions-guide[data-theme="dark"]) only fires on
the block element, which is what the full-page variant renders into.  The
widget renders into .sg-portal appended to body, so it was never affected
and has always shown in light mode.

Changing the full-page default from 'dark' to 'light' aligns it with the
widget's actual appearance. All CSS already uses tokens so no other changes
are needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix full-page block failing to render

The init function was using two factory patterns that no longer exist:
buildStore(preact) (which stopped returning SessionGuideProvider after the
factory pattern was removed) and buildApp(preact, store) (which was never
re-added to App.js after the refactor).

Replace both with direct named imports of SessionGuideProvider and App,
matching the pattern used by the widget entry point.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix full-page dark bleed-through from host page background

.sg-full-page had no background, so the dark Adobe MAX page background
showed through transparent areas (My Sessions greeting row, time rows).
The widget is immune because .sg-drawer has an explicit white background.
Adding background: var(--s2a-color-background-default) to .sg-full-page
covers all transparent children the same way the drawer does.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Preserve unrelated query params in full-page URL sync

The URL sync effect was constructing a fresh URLSearchParams(), which
wiped every param not owned by this component (milolibs, eccEnv, etc.)
on every state change.

Start from window.location.search instead, and use set/delete on only
the three owned params (view, search, filter) so external params are
left untouched.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Move download button to header controls and fix page surface dark theme

- DownloadButton relocated from sg-my-sessions-header (in MySessionsView) to
  sg-right-controls (in DrawerHeader), rendering only when activeView === 'my-sessions'
- Removed sg-my-sessions-header wrapper, greeting, and their CSS rules entirely
- Fixed sessions-guide.js defaulting theme to 'dark' regardless of surface; page
  surface now defaults to 'light' so dark CSS tokens don't cascade into full-page layout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Redesign session detail overlay with two-column layout and personalized header

- SessionDetailOverlay: remove sticky header, move back button into body as a
  floating sticky left strip; split content into main col (summary, products,
  resources) and side col (speakers sidebar) matching Figma 9145:41090
- DrawerShell: pass hideControls to DrawerHeader when a session is active
- DrawerHeader: hide sg-header-controls and mobile search row when detail is
  open so only the title + close button remain; personalize title with
  "[Name], see what's happening" for logged-in users
- sessions-guide-overlays.css: mobile-first back-wrap (full-width sticky) +
  cols layout; 768px+ two-column flex with 60px back column and 383px speakers
  sidebar, both sticky

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Enforce 20px side margins on desktop drawer

Use calc(100% - 40px) instead of 100% so the fixed+translateX(-50%) centering
distributes the 40px evenly — 20px per side — at all viewports above 1280px.
margin-right has no effect on position:fixed elements, so width is the only
reliable lever.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Enhance session card description styling for improved readability

- Added -webkit-line-clamp and -webkit-box-orient properties to limit the description to two lines and ensure proper overflow handling.
- Changed overflow property to hidden to prevent text overflow beyond the designated area.

This update aims to enhance the visual presentation of session card descriptions, aligning with user experience improvements.

* Remove prototype files for sessions guide

- Deleted index.html, index.js, and style.css files from the sessions guide prototype, streamlining the project structure and removing unused components.

This cleanup is part of ongoing efforts to enhance code maintainability and reduce clutter.

* Add temporary comment for future API integration in scripts.js

* Move auth mock to sessions-guide entry point and enable on all environments

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix store test failures caused by dev-mock localStorage bleed-through

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Daniel Oliva <doliva@adobe.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…li clipping

max-height combined with -webkit-line-clamp caused list item content to render
incorrectly. Relying solely on -webkit-line-clamp matches main branch behaviour
and clips cleanly at line boundaries.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…n iPhone 12/13

Removing max-height globally caused text overlap on mobile (iPhone 12/13).
Restore it only in the ≤899px breakpoint where it is needed as a fallback,
keeping desktop free of max-height so ul/li content clips correctly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(sessions-hub): remove max-height from description to fix ul/li clipping
If a page sets `old-campaign-id` and `new-campaign-id` meta tags, and the
`?campaign=` query param matches the old ID, `getValidCampaignIdFromUrl`
now transparently returns the new ID instead — enabling campaign traffic
rerouting without URL changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the two-field approach with a single `campaign-id` meta tag
accepting a JSON array of {old, new} routing rules. The first rule whose
`old` value matches the URL campaign param wins.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…uting

Covers: valid ID passthrough, absent/invalid params, routing rule match,
multiple rules, first-match wins, invalid new ID, and malformed metadata.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces metadata-based campaign routing with a fetch from
/event-libs/assets/configs/campaign-map.json. Rules are cached
per page load. getValidCampaignIdFromUrl is now async; all call
sites updated with await.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Keeps getValidCampaignIdFromUrl sync for invite-only gate checks.
Adds async resolveRoutedCampaignId that applies campaign-map.json
routing rules — called only at RSVP submit time in submitForm.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@aem-code-sync

aem-code-sync Bot commented Jun 24, 2026

Copy link
Copy Markdown

Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch and validate page speed.
In case there are problems, just click a checkbox below to rerun the respective action.

  • Re-run all PSI checks
  • Re-run failed PSI checks
  • Re-sync branch
Commits

@sharmeebuilds

Copy link
Copy Markdown
Collaborator Author

Huge PR! Please glance through

feat(utils): route campaign ID via campaign-map.json
T3-26.26 Stage Release Cut 3 - Temporary Fix

@qiyundai qiyundai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Also seems to be largely greenfield stuff.

@qiyundai
qiyundai merged commit bd2664a into main Jun 24, 2026
9 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants