diff --git a/.changeset/accordion-base-ui-migration.md b/.changeset/accordion-base-ui-migration.md new file mode 100644 index 0000000000..c9bede9838 --- /dev/null +++ b/.changeset/accordion-base-ui-migration.md @@ -0,0 +1,10 @@ +--- +'@toptal/picasso-accordion': patch +--- + +### Accordion + +- Re-implement on `@base-ui/react/accordion` + Tailwind with behavioral parity for `children`, `content`, `expanded`, `defaultExpanded`, `disabled`, `expandIcon`, `borders`, `onChange`, `testIds` and `transitionProps` +- The expand/collapse animation is now CSS-driven. `transitionProps.timeout` (number, or `enter`/`exit`) sets the transition duration in ms (the previous height-dependent `timeout: 'auto'` default is approximated by a fixed 300ms); `transitionProps.onExited` still fires after the collapse transition completes +- Drop the vestigial `classes` prop (a no-op since the `@mui/base` / `@material-ui/core` internals were removed) — style overrides go through `className` / `style` +- Remove the `@material-ui/core` peer dependency and lift the React `< 19.0.0` peer cap diff --git a/.changeset/accordion-migration.md b/.changeset/accordion-migration.md new file mode 100644 index 0000000000..b340abbaf8 --- /dev/null +++ b/.changeset/accordion-migration.md @@ -0,0 +1,7 @@ +--- +'@toptal/picasso-page': patch +--- + +### Page + +- `SidebarItemAccordion` routes its Accordion slot styling through `className` instead of the removed `classes` prop; no visual change diff --git a/.changeset/backdrop-migration.md b/.changeset/backdrop-migration.md new file mode 100644 index 0000000000..4973b9fcd0 --- /dev/null +++ b/.changeset/backdrop-migration.md @@ -0,0 +1,8 @@ +--- +'@toptal/picasso-backdrop': patch +--- + +### Backdrop + +- Replace `@mui/base/Modal` `ModalBackdropSlotProps` import with a local `React.HTMLAttributes`-based Props type; public Props surface and runtime behavior unchanged +- Lift React peer-dependency cap (drop `< 19.0.0`) diff --git a/.changeset/badge-migration.md b/.changeset/badge-migration.md new file mode 100644 index 0000000000..b65bd0acc1 --- /dev/null +++ b/.changeset/badge-migration.md @@ -0,0 +1,17 @@ +--- +'@toptal/picasso-badge': major +--- + +### Badge + +- Replace the `@mui/base/Badge` wrapper with a plain `` composition (no `@base-ui/react` equivalent — Picasso was already mostly custom; see migration plan v3 §9.9) +- Lift React peer-dependency cap (drop `< 19.0.0`) + +## Intentional visual changes + +Storybook Happo: clean (all Badge stories byte-identical to master). + +Cypress Happo diffs are not Badge regressions — neither component below imports `@toptal/picasso-badge`. The shifts are environmental/render variability triggered by the dependency-graph change (dropping `@mui/base`): + +- `PageTopBarMenu / width-1441` — `color-delta: 0.01377`, `ssim: 0.00035`. Sub-perceptual (well under Happo's compare-threshold). PageTopBarMenu composes `Page.TopBar` + `UserBadge`; no `Badge` consumer chain. +- `CategoriesChart / default/with-column-hover` — `color-delta: 0.69023`, `ssim: 0.05961`. Recharts SVG tooltip hover screenshot; the test file already documents existing flakiness ("sometimes the screenshot was taken with mouse over the bar and it triggered tooltip"). CategoriesChart lives under `topkit-analytics-charts` and has no Badge reference anywhere in its module graph. diff --git a/.changeset/container-migration.md b/.changeset/container-migration.md new file mode 100644 index 0000000000..b9219387d7 --- /dev/null +++ b/.changeset/container-migration.md @@ -0,0 +1,9 @@ +--- +'@toptal/picasso-container': patch +--- + +### Container + +- Drop residual `@material-ui/core` type import (`PropTypes.Alignment`) in favor of an explicit literal union on the `align` prop. Public API and behavior unchanged. +- Migrate the props interface to `extends BaseProps`, dropping the vestigial `classes` prop from the public type. The prop was inherited from `StandardProps` but was never read in source and had zero internal / external consumer usage per the cross-tier audit. +- Lift `react` peer cap to `>=16.12.0` so the package is compatible with React 19. diff --git a/.changeset/container-tier1-mui-cleanup.md b/.changeset/container-tier1-mui-cleanup.md new file mode 100644 index 0000000000..6a65480bca --- /dev/null +++ b/.changeset/container-tier1-mui-cleanup.md @@ -0,0 +1,11 @@ +--- +'@toptal/picasso-container': patch +--- + +### Container + +Duplicate of `container-migration.md` (orchestrator expected that filename). Safe to delete during release cleanup — version coalesces to a single patch bump and the CHANGELOG entry below is the same. + +- Drop residual `@material-ui/core` type import (`PropTypes.Alignment`) in favor of an explicit literal union on the `align` prop. Public API and behavior unchanged. +- Migrate the props interface to `extends BaseProps`, dropping the vestigial `classes` prop from the public type. The prop was inherited from `StandardProps` but was never read in source and had zero internal / external consumer usage per the cross-tier audit. +- Lift `react` peer cap to `>=16.12.0` so the package is compatible with React 19. diff --git a/.changeset/drawer-migration.md b/.changeset/drawer-migration.md new file mode 100644 index 0000000000..21c7ec9756 --- /dev/null +++ b/.changeset/drawer-migration.md @@ -0,0 +1,8 @@ +--- +'@toptal/picasso-drawer': patch +--- + +### Drawer + +- Re-implement on `@base-ui/react/dialog` (`Dialog.Root` + `Dialog.Portal` + `Dialog.Backdrop` + `Dialog.Popup`), replacing the `@mui/base/Modal` backing. The Dialog primitive (not `@base-ui/react/drawer`) backs Picasso's Drawer because Drawer has no swipe affordance and `@base-ui/react/drawer` always enables swipe-to-dismiss. The public Props API and behavior are unchanged — backdrop-click and Escape dismissal are preserved; `disableBackdrop` keeps page content interactive and disables outside-press dismissal. +- Slide/backdrop transitions are now driven by `@base-ui/react` `data-[starting-style]`/`data-[ending-style]` instead of `@toptal/picasso-slide` and `@toptal/picasso-backdrop`. The rendered DOM changes from the `@mui/base` Modal shape; internal `base-Modal-*` markup (never part of the public API) is gone, so tests asserting on it need new selectors. diff --git a/.changeset/dropdown-migration.md b/.changeset/dropdown-migration.md new file mode 100644 index 0000000000..1001c83a6f --- /dev/null +++ b/.changeset/dropdown-migration.md @@ -0,0 +1,10 @@ +--- +'@toptal/picasso-dropdown': patch +--- + +### Dropdown +- Remove the `@mui/base` (`ClickAwayListener`) and `@material-ui/core` (`Grow`, `PopperPlacementType`) dependencies; public API and behavioral parity unchanged. +- Click-away dismissal now uses the shared `@toptal/picasso-utils` `ClickAwayListener` (the MUI-free replacement already used by DatePicker and Menu), instead of `@mui/base`'s listener. +- The open grow transition moves from MUI `Grow` to a CSS `@starting-style` entry animation (`transition-[opacity,scale]` + `starting:scale-75 starting:opacity-0`), resting at `scale-100`. +- The `placement` prop type is now imported from `@toptal/picasso-popper` (`PopperPlacementType`) instead of being redefined locally — same 12 members as `@material-ui/core`'s, no removed values, no consumer-visible narrowing. +- The locally narrowed `classes?: { popper?, content? }` surface is preserved unchanged (used by external consumers). diff --git a/.changeset/file-input-migration.md b/.changeset/file-input-migration.md new file mode 100644 index 0000000000..3416316c13 --- /dev/null +++ b/.changeset/file-input-migration.md @@ -0,0 +1,11 @@ +--- +'@toptal/picasso-file-input': patch +--- + +### FileInput + +- re-implement FileInput, FileList, FileListItem and ProgressBar on plain + `` + Tailwind; remove `@material-ui/core` JSS + (`makeStyles` / `createStyles`) and drop the `@material-ui/core` peer + dependency. Public prop API and behavior are unchanged. +- widen the `react` peer range (drop the `< 19.0.0` upper bound). diff --git a/.changeset/form-label-migration.md b/.changeset/form-label-migration.md new file mode 100644 index 0000000000..c7e5f67b64 --- /dev/null +++ b/.changeset/form-label-migration.md @@ -0,0 +1,7 @@ +--- +'@toptal/picasso-form-label': patch +--- + +### FormLabel + +- Drop `@material-ui/core` from `peerDependencies`; widen React peer range to `>=16.12.0` (drop `<19.0.0` upper bound). Replace the lone `import type { FormControlLabelProps } from '@material-ui/core/FormControlLabel'` with a local `onChange` type. Public API unchanged; `FormControlLabel`'s narrowed `classes?: { root?, label? }` slot surface preserved for Switch/Radio/Checkbox consumers. diff --git a/.changeset/form-layout-migration.md b/.changeset/form-layout-migration.md new file mode 100644 index 0000000000..f89d2cb0b8 --- /dev/null +++ b/.changeset/form-layout-migration.md @@ -0,0 +1,7 @@ +--- +'@toptal/picasso-form-layout': patch +--- + +### FormLayout + +- Drop `@material-ui/core` peer dependency and lift the `react` peer cap to `>=16.12.0`. Source was already MUI-free; public API unchanged, behavioral parity preserved. diff --git a/.changeset/form-migration.md b/.changeset/form-migration.md new file mode 100644 index 0000000000..b29ff14523 --- /dev/null +++ b/.changeset/form-migration.md @@ -0,0 +1,7 @@ +--- +'@toptal/picasso-form': patch +--- + +### Form + +- Drop `@material-ui/core` from `peerDependencies`; widen React peer range to `>=16.12.0` (drop `<19.0.0` upper bound). Source already MUI-clean; public API unchanged. diff --git a/.changeset/grid-migration.md b/.changeset/grid-migration.md new file mode 100644 index 0000000000..dc000d3890 --- /dev/null +++ b/.changeset/grid-migration.md @@ -0,0 +1,8 @@ +--- +'@toptal/picasso-grid': patch +--- + +### Grid + +- Replace the MUI v4 `GridSize` type re-export with the Picasso-native `GridSize` union; public API unchanged, behavioral parity preserved. +- Drop `@material-ui/core` peer dependency and widen the React peer range to `>=16.12.0`. diff --git a/.changeset/modal-context-migration.md b/.changeset/modal-context-migration.md new file mode 100644 index 0000000000..8bf99687c4 --- /dev/null +++ b/.changeset/modal-context-migration.md @@ -0,0 +1,7 @@ +--- +'@toptal/picasso-modal-context': patch +--- + +### ModalContext + +- Drop the vestigial `@material-ui/core` peer-dependency (source is a React context provider that imports nothing from MUI) and lift the `react` peer cap to `>=16.12.0`. Public API unchanged; behavioral parity. diff --git a/.changeset/modal-migration.md b/.changeset/modal-migration.md new file mode 100644 index 0000000000..26d7d94384 --- /dev/null +++ b/.changeset/modal-migration.md @@ -0,0 +1,10 @@ +--- +'@toptal/picasso-modal': patch +--- + +### Modal + +- re-implement on `@base-ui/react`'s `Dialog` (`Dialog.Root` + `Dialog.Portal` + `Dialog.Backdrop` + `Dialog.Popup`), replacing `@mui/base/Modal`. Public Props API is unchanged — `open`, `onClose`, `onOpen`, `onBackdropClick`, `disableBackdropClick`, `hideBackdrop`, `container`, `size`, `align`, `transitionProps`, `transitionDuration`, `paperProps`, `testIds` and the narrowed `classes?: { closeButton }` are all preserved, with behavioral parity (custom focus management, page scroll lock, multi-modal coexistence, backdrop-click and escape close). +- internally the dim overlay is now a `Dialog.Backdrop` element instead of the composed `@toptal/picasso-backdrop` component, and the open/close fade is driven by `data-starting-style`/`data-ending-style` Tailwind transitions instead of `@toptal/picasso-fade`. +- the `@mui/base`, `@toptal/picasso-backdrop` and `@toptal/picasso-fade` are dropped from dependencies; the `react` peer cap is lifted to `>=16.12.0`. +- the `ModalContent` scroll shades now fade in and out via CSS opacity (`data-active` + `transition-opacity`) instead of being conditionally mounted; no API change. diff --git a/.changeset/note-migration.md b/.changeset/note-migration.md new file mode 100644 index 0000000000..28d363adde --- /dev/null +++ b/.changeset/note-migration.md @@ -0,0 +1,7 @@ +--- +'@toptal/picasso-note': patch +--- + +### Note + +- Drop `@material-ui/core` from `peerDependencies`; widen React peer range to `>=16.12.0` (drop `<19.0.0` upper bound). Source already MUI-clean; public API unchanged. diff --git a/.changeset/notification-migration.md b/.changeset/notification-migration.md new file mode 100644 index 0000000000..09a1ed2726 --- /dev/null +++ b/.changeset/notification-migration.md @@ -0,0 +1,8 @@ +--- +'@toptal/picasso-notification': major +--- + +### Notification +- Replace the `@material-ui/core/Snackbar` `SnackbarOrigin` type import with a Picasso-native structural type; behavioral parity, `notistack` integration unchanged. +- Drop the vestigial public `classes` prop (audit-verified 0 internal/external usage) via `Omit`. Removing the prop from the public type is the breaking surface. +- Widen the `react` peer range to `>=16.12.0` (drop the `< 19.0.0` upper bound). diff --git a/.changeset/outlined-input-migration.md b/.changeset/outlined-input-migration.md new file mode 100644 index 0000000000..0c9c2cbc67 --- /dev/null +++ b/.changeset/outlined-input-migration.md @@ -0,0 +1,7 @@ +--- +'@toptal/picasso-outlined-input': patch +--- + +### OutlinedInput +- Re-implement on native elements + `react-textarea-autosize`, removing `@mui/base` (`Input` / `TextareaAutosize`) and the `@material-ui/core` `InputBaseComponentProps` type; public API unchanged. +- Behavioral parity: outline root, `startAdornment` / `endAdornment`, `inputComponent`, `multiline` (`rows` / `rowsMax`), `error` / `warning` / `success` states, the narrowed `classes?: { input?, root? }` slots, and root-click-to-focus are all preserved. diff --git a/.changeset/page-migration.md b/.changeset/page-migration.md new file mode 100644 index 0000000000..ffe49f42b0 --- /dev/null +++ b/.changeset/page-migration.md @@ -0,0 +1,9 @@ +--- +'@toptal/picasso-page': patch +--- + +### Page + +- Re-implement the `Page` root shell styling on Tailwind; behavioral parity with the JSS implementation, public Props API unchanged +- Remove `@material-ui/core` from `peerDependencies` — consumers no longer need it installed for this package +- Widen the `react` peer range to `>=16.12.0` (React 19 cap lifted) diff --git a/.changeset/picasso-charts-migration.md b/.changeset/picasso-charts-migration.md new file mode 100644 index 0000000000..9789cbbc1d --- /dev/null +++ b/.changeset/picasso-charts-migration.md @@ -0,0 +1,9 @@ +--- +'@toptal/picasso-charts': major +--- + +### LineChart + +- Re-implement styling without `@material-ui/core` + JSS; behavioral and visual parity preserved. The bottom-Y-axis-label rule now lives in `LineChart`'s self-contained `