Commit 076579b
refactor(web): migrate styled-components to Tailwind (#1873)
* docs: design tailwind migration
* test(web): characterize theme tokens
* refactor(web): migrate shared primitives to tailwind
* refactor(web): migrate shared composites to tailwind
* refactor(web): migrate event forms to tailwind
* refactor(web): migrate planner sidebar to tailwind
* refactor(web): migrate calendar grid to tailwind
* refactor(web): remove styled theme provider
* refactor(web): remove styled components dependency
* fix(web): restore role=form on event forms
The styled-to-tailwind migration replaced <StyledEventForm role="form">
with a bare <form>, dropping the explicit ARIA role. A <form> without an
accessible name exposes no "form" role, so getByRole("form") stopped
matching and broke the event-form e2e flows (19 specs). Restore role="form"
on both the timed and someday event forms.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* docs: remove styled-components references from cursorrules
Describe Tailwind as the sole styling system and document the hybrid
inline-utility + c-* recipe convention. Note that semantic attributes
(role, aria-*) must be preserved when restyling.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* docs: remove styled-components migration design spec
Drop the internal design spec so it is not carried into the repo.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore: cleanup
* test: delete temp styled-components tests
* refactor(web): remove dead reminder CSS utilities
The reminder feature was deleted (#1875); its c-reminder-* utilities and
keyframes in index.css had no remaining consumers. Remove 7 utilities and
4 keyframes (~138 lines).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor(web): inline one-off layout utilities
Replace single-use c-* layout recipes with inline Tailwind utilities,
removing the global-CSS indirection for styling used in exactly one place:
c-floating-form-container, c-calendar-main-grid, c-calendar-grid-rows,
c-calendar-timed-columns, c-week-columns, c-week-grid-track.
No visual change; theme tokens and semantic attributes unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor(web): inline variant-based someday utilities
Convert single-use c-someday-event and c-someday-recurrence-value recipes
to inline Tailwind utilities using data-[...]/hover: variants. Keep
c-week-edge-zone (its dual data-position gradient variants are a coherent,
complex treatment better expressed as a named recipe).
No visual change.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor(web): inline calendar grid layout utilities
Push descendant-selector recipes onto their child elements and inline the
remaining single-use calendar grid layout:
- c-week-day-labels: clamp font sizes moved onto the Text children
- c-calendar-grid-row: inlined (its '& > span' rule was dead)
- c-calendar-day-times: child height/display moved onto mapped children
- c-calendar-now-line: inlined (trivial)
- c-calendar-all-day-columns: inlined; pseudo grid-line via before: variant
Keep c-calendar-date-column (2 consumers) and c-week-edge-zone (gradient
variant set). No visual change; verified with web unit + 50/50 e2e.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* docs: encode the inline-first c-* decision test in styling rules
Document that inline is the default and a c-* recipe is justified only when
inline can't express it (third-party descendant selectors, pseudo-elements,
keyframe bundles, or genuine reuse). Refresh stale examples.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor(web): inline rarely-reused c-* utilities
Move single-use (or feature-local) recipes out of index.css to their call
sites as inline Tailwind, trading minor duplication for a leaner global
stylesheet: c-actions-menu(-item), c-recurrence-row/weekday/interval/caret,
c-week-grid-scroller, c-week-edge-zone, c-calendar-date-column. Pseudo-element
and data-state styling use arbitrary/data- variants.
Kept c-time-picker and c-planner-month-picker as global recipes: they style
third-party DOM (react-select/react-datepicker) that can't take Tailwind
classes, and the test harness already special-cases them.
Verified: web unit (1041) + 50/50 e2e + type-check + lint + build.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor: rename 'compass-scroll' to 'c-scroll'
* refactor(web): inline c-not-found-back-button utility
Single-use button recipe with no descendant selectors; inline at its call
site in NotFound.tsx and drop from index.css.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(web): restore timepicker dropdown styling
The styled-components migration moved the timepicker overrides into an
@Utility (c-time-picker), which Tailwind places in @layer utilities.
react-select injects its default styles unlayered at runtime, and unlayered
rules beat any cascade layer regardless of specificity — so the dropdown
rendered with react-select's defaults.
Make .c-time-picker a plain (unlayered) rule so it competes with react-select
on specificity again, as the original styled-component did. Verified the menu
background now resolves to the themed --time-picker-bg.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* style: fix datepicker widgets
* docs(web): design event form actions row
* fix(web): align event descriptions with actions
* fix(web): align event titles with actions
* docs(web): design inline event form styles
* style: simplify form styles
* fix(web): unlayer c-planner-month-picker datepicker recipe
Same cascade-layer bug as the timepicker: as an @Utility it landed in
@layer utilities and lost to react-datepicker's unlayered defaults. The
recipe had worked around this with !important on nearly every rule.
Make it a plain unlayered rule (defined after c-date-picker, so it wins on
source order) and drop the now-redundant !important hacks. Verified the
sidebar selected-day pill renders: ::before background resolves to the accent
color and the day background is transparent as intended.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* style: adjust datepicker styles
* fix(web): restore role=form dropped by form-style simplification
Commit 565e166 inlined c-event-form and dropped role="form" from both
the timed and someday event forms (the same regression fixed earlier in
59091ce). A bare <form> exposes no ARIA form role without an accessible
name, so getByRole("form") stopped matching and 16 event-form e2e specs
failed in CI (create/update/delete for timed, allday, someday).
Restore role="form" on both forms. Full e2e back to green apart from known
timing flakes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: remove project from github templates
* style: DayLabels
* style: fix font sizes
* refactor: cleanup grid, form, picker styles
* chore: untrack superpowers specs from git
docs/superpowers/ is already gitignored; these two spec files were
force-added previously. Remove them from tracking so the directory
stays local-only. Files remain on disk.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent 614fb0b commit 076579b
131 files changed
Lines changed: 2122 additions & 2805 deletions
File tree
- .cursorrules
- .github/ISSUE_TEMPLATE
- docs/frontend
- packages/web
- src
- common
- calendar-grid/components
- styles
- animations
- components
- AbsoluteOverflowLoader
- Button
- CompassProvider
- ContextMenu
- DatePicker
- Divider
- Flex
- Focusable
- IconButton
- Icons
- Input
- LoginAbsoluteOverflowLoader
- PlannerSidebar
- PlannerMonthPicker
- SomedayEventSections/SomedayEvents
- SomedayEventContainer
- SomedayEventsContainer
- SomedayEvent
- Textarea
- Text
- Tooltip
- Description
- views
- Day
- components/Calendar
- view
- Forms
- ActionsMenu
- EventForm
- DateControlsSection
- DateControlsSection
- DateTimeSection
- DatePickers
- TimePicker
- RecurrenceSection
- components
- PrioritySection
- SaveSection
- SomedayEventForm
- SomedayRecurrenceSection
- SomedayRecurrenceSelect
- Life
- NotFound
- Week
- components
- Draft/grid
- Grid
- AllDayRow
- Columns
- MainGrid
- Header
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
64 | | - | |
65 | | - | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
66 | 102 | | |
67 | 103 | | |
68 | 104 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
| 3 | + | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
271 | 271 | | |
272 | 272 | | |
273 | 273 | | |
274 | | - | |
| 274 | + | |
275 | 275 | | |
276 | 276 | | |
277 | 277 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | 7 | | |
0 commit comments