Conversation
…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>
T3-26.26 Stage Release
…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
T3-26.26 Stage Take 2
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>
|
Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch and validate page speed.
|
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
approved these changes
Jun 24, 2026
qiyundai
left a comment
Collaborator
There was a problem hiding this comment.
LGTM. Also seems to be largely greenfield stuff.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
T3-26.26 Prod Release — stage → main
Sessions Hub
Overhauled the filter UX for desktop and mobile:
Profile Cards
Extended speaker card display and sorting capabilities:
orderconfig row enables explicit field-based sort, giving authors control over card ordering beyond the default alpha sortTiming Framework
Improved reliability of the timed-content scheduling system:
toggleTimeis now respected whenavoidStreamEndFlagis set, preventing timed items from firing at the wrong momenttoggleTimeitems no longer override the schedule position of valid timed itemstoggleTimeitems to reduce unnecessary processingEvent Agenda
Mobile Rider
avoidStreamEndFlagwas setTest plan
orderconfig row correctly overrides default sorttoggleTimeandavoidStreamEndFlagcombinationsavoidStreamEndFlagis active🤖 Generated with Claude Code