Skip to content

Release beta: flexible width/height props, validated-events fix (TC3), dev-time misuse warnings (K-03/K-05), type-aware linting & playground redesign#73

Merged
Jaganath-MSJ merged 18 commits into
betafrom
dev
May 24, 2026
Merged

Release beta: flexible width/height props, validated-events fix (TC3), dev-time misuse warnings (K-03/K-05), type-aware linting & playground redesign#73
Jaganath-MSJ merged 18 commits into
betafrom
dev

Conversation

@Jaganath-MSJ

Copy link
Copy Markdown
Owner

Pull Request Checklist

  • My code follows the code guidelines of this project
  • I have updated the documentation accordingly (if applicable)
  • Tests and builds pass locally

Description

Promotes the accumulated dev work to beta. This batch covers library-facing
fixes and enhancements, developer-experience warnings, a full playground redesign,
and tooling/docs updates.

Library (src/)

  • width/height now accept CSS strings (e.g. "100%", "60vh") in addition
    to numbers. A new toCssLength() util normalizes values; string heights subtract
    the header via calc() so the content area stays a valid CSS length.
  • Closed the TC3 filter bypassCalendar now passes the validated validEvents
    into the context config instead of the raw events array.
  • Dev-time console.warns for misuse patterns: K-03 (unsorted array passed with
    eventsAreSorted) and K-05 (enableEnrichedEvents without enrichedEventsByDate).
  • Exported CalendarClassNames type from the public API.
  • Updated JSDoc on enrichedEventsByDate, enableEnrichedEvents, and eventsAreSorted
    to document the new warning behavior.

Playground

  • Redesigned to a single calendar with a full prop-control panel (ControlPanel),
    shared TestFixtures, and classNames prop support.
  • Fixed render-phase state updates and nested-button markup.

Tooling & Docs

  • Type-aware ESLint enabled; tsc errors now surfaced in the lint script.
  • Bundle visualizer gated behind an ANALYZE env flag.
  • Storybook stories default to the light color scheme.
  • Added the /playwright slash-command playbook; consolidated test docs into
    TEST_CASES.md; dependency updates.

Fixes # (N/A — promotion PR)

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • This change requires a documentation update

How Has This Been Tested?

  • Tested via Storybook
  • Tested via local playground application
  • Verified build bundle (npm run build)

Added/updated unit tests: Calendar.test.tsx, useEvents.test.ts,
useResizeObserver.test.ts, common.test.ts. Run with npm test.

Jaganath-MSJ and others added 18 commits May 10, 2026 11:13
- @actions/core 3.0.0 → 3.0.1
- @actions/http-client 4.0.0 → 4.0.1
- undici 6.24.1 → 6.25.0
- Additional transitive dependency updates
- Replace two-calendar layout with a single focused Calendar instance
- Rename kebab-case files to PascalCase (App, ControlPanel, TestFixtures)
- Rebuild ControlPanel with collapsible sections and modified-count badges
- Add per-section and global Reset buttons
- Add theme colour pickers and localeMessages label overrides
- Replace checkboxes with CSS toggle switches for boolean props
- Add Result + Notes columns to all test matrices (A–L) with current run data
- Merge 286 PASS, 4 FAIL, 19 N/A results from 2026-05-07 test session
- Update "Results file" reference to point to this file instead of TEST_REPORT.md
- Add TEST_REPORT.md to .gitignore (local-only artifact)
- Document G-12, K-03, K-05, TC3 failures and cross-cutting findings

PLAYWRIGHT_TEST_PLAN.md is now the single source of truth for both test spec and results.
Previously the bundle visualizer ran on every build, opening
dist/stats.html in the browser unconditionally. Wrap it in a
process.env.ANALYZE guard so it only activates when needed.

- visualizer now skipped unless ANALYZE=1 is set
- run with: $env:ANALYZE=1; npm run build
…script

- Switch from recommendedTypeChecked (was: recommended) in eslint.config.js;
  add parserOptions.project to enable type-aware rules
- Chain tsc --noEmit before eslint in lint and lint:fix scripts so all
  TypeScript compiler errors appear when running npm run lint
- Fix type-safety issues uncovered by stricter checking: replace non-null
  assertion with optional chaining in DayColumn, remove unnecessary HTMLElement
  cast in Popover, simplify config fallback cast in CalendarContext
- Fix useResizeObserver test: convert dynamic act import to static top-level
  import and move assertion outside the async callback
- Exclude eslint.config.js and vite.config.ts from type-aware linting as
  they are not part of tsconfig.json
- Add §1.2 Loading States (skeleton/overlay modes, RTL, console hygiene)
- Add §1.12–1.16: Color Scheme, i18n/RTL, Responsive Layout, Accessibility, Compound API
- Add §2.6–2.8: DST boundaries, year/month spanning, Unicode/XSS edge cases
- Add §3 Known Issues table tracking confirmed bugs (G-12, K-03, K-05, TC3)
- Expand §1.6 with creatable prop, testId, and popover focus/viewport tests
- Expand §1.7 with AllDayBanner expand/collapse toggle tests
- Renumber §1.2–1.10 → §1.3–1.11 to accommodate new Loading States section
- Clarify dayType prop: controls day-name format, not time bounds
…er bypass

useEvents() correctly filtered negative-duration events, but CalendarProvider
received the unfiltered allProps.events in its config prop. All sub-views read
events from that config via useCalendarProps(), bypassing the filter entirely.
Passing validEvents into the config spread closes the bypass for every view,
including compound-component children. Adds a regression test (TC3).
Consolidates the Playwright MCP test playbook into a Claude Code
slash command at .claude/commands/playwright.md. Captures the 310-case
test matrix (sweeps A-L), session init protocol, fixture/prop catalogs,
common selectors, and per-run result log.

- 12 sweeps x 309 executed cases with PASS/FAIL/N/A results
- TC3 negative-duration filter regression tracked through full
  discovery -> fix (commit 7e5714b) -> verified-closed lifecycle
- Known Issues and Open Follow-up Items tables updated through the
  2026-05-17 retest (only K-03 and K-05 remain as OPEN library FAILs)
- Run Log preserves 2026-05-07 / 05-16 / 05-17 (initial) / 05-17 (retest)
- Emit console.warn (K-03) when eventsAreSorted=true but the array is
  unsorted — surfaces silent render-order bugs at development time
- Emit console.warn (K-05) when enableEnrichedEvents=true but
  enrichedEventsByDate is absent — prevents silent multi-day fallback
- Thread enrichedEventsByDate into useEvents call in Calendar.tsx
- Add warnSpy guards to existing tests affected by the new warnings
- Add 6 new tests covering warn/no-warn branches for K-03 and K-05
Update TEST_CASES.md known-issues table to reflect that K-03 and K-05
are now resolved — both misuse patterns emit a console.warn instead of
failing silently.

Update JSDoc on enrichedEventsByDate, enableEnrichedEvents, and
eventsAreSorted props to document the console.warn contract so
consumers are aware at authoring time.
- Export CalendarClassNames from src/index.ts (was missing from public API)
- Add 20 cn* fields to PanelState, DEFAULTS, and SECTION_KEYS
- Assemble classNames object in toCalendarProps (undefined when all empty)
- Add "Class Names" section in JSX with text inputs grouped by view area
  (Global, Month, Events, Week/Day, Schedule) -- enables E-13--E-18 interactive re-run
Call onChange outside the setState updater in patch and resetSection so
the parent setState no longer fires during React's render phase, fixing
the "Cannot update a component while rendering" warning.

Change the Section header from a <button> to a div with role="button"
(tabIndex, onKeyDown, aria-expanded) so the reset control can be a real
nested button without invalid <button>-in-<button> markup.
Document Firefox/WebKit cross-browser testing and bring the playbook in
line with the 2026-05-19 and 2026-05-21 runs.

- Add `--browser=firefox|webkit` parsing, a Cross-Browser Sessions
  section (tool namespaces, 29-case CB subset, CB Known Issues), and a
  Browser column on the Test Run Log
- Record CB results: full parity across Firefox/WebKit/Chromium; D-17
  verified PASS via a scrollTo spy (headless Firefox no-ops smooth
  scroll); note the browser-independent "1280pxpx" preset quirk
- Close K-03/K-05 and follow-up items 3-10; mark all 20 VIS screenshots
  captured; refresh the Known Issues and Open Follow-up tables
Add a global `colorScheme: "light"` arg in the Storybook preview config so
every story renders light by default instead of following the OS
`prefers-color-scheme` (the library's `auto` default). Also exclude the
`.storybook` directory from typed ESLint linting, matching how `src/stories`
and `vite.config.ts` are handled, so the pre-commit hook stops failing on
`.storybook/preview.ts`.

- Applies the light default to all current and future stories from one point
- Explicit dark/auto demo stories override via their own args, so unaffected
- Adds `.storybook` to eslint.config.js ignores to fix typed-lint parse errors
feat: v2 hardening — event validation fix, DX warnings, playground & tooling
Previously, width and height were always interpolated as `${value}px`,
which doubled the unit for string inputs like "1280px" or "100%".

- Add `toCssLength` utility: passes strings verbatim, appends px to numbers
- Use `toCssLength` for `--calendar-width` and `--calendar-height` CSS vars
  in both CalendarContent and the compound-children code path
- Wrap string heights in `calc(${rawHeight} - ${HEADER_HEIGHT}px)` so the
  header is correctly subtracted for any CSS length string
- Add unit tests for `toCssLength` and regression tests for dimension vars
  (A-11/J-12 regression coverage)
All entries in the Known Issues, Cross-Browser Known Issues, and Open
Follow-up Items tables were CLOSED or RESOLVED, making them dead weight
in the command file. Removing them keeps the run instructions lean.

- Drop Known Issues table (G-12, K-03, K-05, TC3, TC3-ROOT — all closed)
- Drop Cross-Browser Known Issues table (D-17 resolved, A-11/J-12 fixed)
- Drop Open Follow-up Items table (all 10 items closed)
- Remove [KNOWN BUG] tagging instruction and Known Issues/Follow-up
  sections from the TEST_REPORT.md template
- Remove Known Issues section from TEST_CASES.md (same bugs, all fixed)
@Jaganath-MSJ Jaganath-MSJ merged commit c457479 into beta May 24, 2026
5 checks passed
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 2.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant