From 9efdd3bc8188eb4117759b55ecb197cf17bca0b8 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Wed, 29 Jan 2025 11:32:52 -0800 Subject: [PATCH] feat: Update to Tailwind v4 (#7669) * initial upgrade * Update plugin, homepage, and examples * fix jest resolver * Update tailwind starter * Update rac-tailwind example app * Update rac-spectrum-tailwind example * enable verdaccio build * update tailwind-variants * patch * update lockfile * missing dependency * copy patches when building website * dedupe lightningcss * Update styling page * Fix TextField focus state * revert verdaccio * fix typo --- ...ilwind-variants-npm-0.3.1-48888516de.patch | 19 + examples/rac-spectrum-tailwind/.postcssrc | 2 +- examples/rac-spectrum-tailwind/package.json | 5 +- .../src/components/GenInputField.tsx | 6 +- .../src/components/NavigationBox.tsx | 2 +- .../src/components/SelectBoxGroup.tsx | 2 +- .../src/components/SentimentRatingGroup.tsx | 2 +- examples/rac-spectrum-tailwind/src/style.css | 6 +- examples/rac-tailwind/.postcssrc | 2 +- examples/rac-tailwind/package.json | 5 +- .../rac-tailwind/src/AnimatedCalendar.tsx | 6 +- examples/rac-tailwind/src/App.js | 124 ++-- examples/rac-tailwind/src/style.css | 5 +- examples/rac-tailwind/tailwind.config.js | 12 - lib/jestResolver.js | 6 +- package.json | 5 +- packages/dev/docs/pages/react-aria/.postcssrc | 2 +- .../dev/docs/pages/react-aria/home.global.css | 49 +- .../dev/docs/pages/react-aria/home/A11y.tsx | 6 +- .../docs/pages/react-aria/home/ExampleApp.tsx | 38 +- .../dev/docs/pages/react-aria/home/I18n.tsx | 2 +- .../pages/react-aria/home/KanbanExample.tsx | 8 +- .../docs/pages/react-aria/home/Keyboard.tsx | 2 +- .../dev/docs/pages/react-aria/home/Styles.tsx | 8 +- .../pages/react-aria/home/SwitchAnimation.tsx | 4 +- .../docs/pages/react-aria/home/components.tsx | 6 +- packages/dev/docs/pages/react-aria/index.mdx | 28 +- .../docs/pages/react-aria/tailwind.config.js | 29 - .../docs/examples/.postcssrc | 2 +- .../docs/examples/account-menu.mdx | 33 +- .../docs/examples/action-menu.mdx | 29 +- .../docs/examples/category-tabs.mdx | 28 +- .../docs/examples/contact-list.mdx | 24 +- .../docs/examples/datepicker.mdx | 29 +- .../docs/examples/destructive-dialog.mdx | 27 +- .../docs/examples/framer-modal-sheet.mdx | 26 +- .../docs/examples/image-grid.mdx | 28 +- .../docs/examples/ios-list.mdx | 28 +- .../docs/examples/loading-progress.mdx | 22 +- .../docs/examples/notifications-popover.mdx | 27 +- .../docs/examples/opacity-slider.mdx | 22 +- .../docs/examples/ripple-button.mdx | 24 +- .../docs/examples/shipping-radio.mdx | 22 +- .../docs/examples/status-select.mdx | 29 +- .../docs/examples/stock-table.mdx | 32 +- .../docs/examples/swipeable-tabs.mdx | 22 +- .../docs/examples/tailwind.config.js | 18 - .../docs/examples/tailwind.global.css | 11 +- .../docs/examples/user-combobox.mdx | 31 +- .../docs/examples/wifi-switch.mdx | 24 +- .../react-aria-components/docs/styling.mdx | 32 +- packages/react-aria-components/package.json | 3 + .../fixtures/prefix.html | 1 + .../fixtures/variants.html | 1 + .../package.json | 7 +- .../src/index.js | 40 +- .../src/index.test.js | 554 ---------------- .../test/__snapshots__/index.test.js.snap | 615 ++++++++++++++++++ .../test/index.test.js | 44 ++ scripts/buildWebsite.js | 2 + starters/tailwind/.postcssrc | 3 +- starters/tailwind/package.json | 7 +- starters/tailwind/src/Calendar.tsx | 2 +- starters/tailwind/src/Checkbox.tsx | 10 +- starters/tailwind/src/ColorPicker.tsx | 2 +- starters/tailwind/src/ColorSwatch.tsx | 2 +- starters/tailwind/src/ColorSwatchPicker.tsx | 4 +- starters/tailwind/src/ColorWheel.tsx | 2 +- starters/tailwind/src/ComboBox.tsx | 4 +- starters/tailwind/src/DateField.tsx | 2 +- starters/tailwind/src/DatePicker.tsx | 2 +- starters/tailwind/src/DateRangePicker.tsx | 4 +- starters/tailwind/src/Disclosure.tsx | 4 +- starters/tailwind/src/GridList.tsx | 2 +- starters/tailwind/src/Link.tsx | 2 +- starters/tailwind/src/ListBox.tsx | 2 +- starters/tailwind/src/Menu.tsx | 2 +- starters/tailwind/src/Modal.tsx | 2 +- starters/tailwind/src/ProgressBar.tsx | 2 +- starters/tailwind/src/RadioGroup.tsx | 6 +- starters/tailwind/src/RangeCalendar.tsx | 2 +- starters/tailwind/src/Select.tsx | 4 +- starters/tailwind/src/Switch.tsx | 6 +- starters/tailwind/src/Table.tsx | 10 +- starters/tailwind/src/TextField.tsx | 3 +- starters/tailwind/src/ToggleButton.tsx | 6 +- starters/tailwind/src/Tooltip.tsx | 2 +- starters/tailwind/src/index.css | 6 +- starters/tailwind/tailwind.config.js | 12 - yarn.lock | 491 +++++++------- 90 files changed, 1622 insertions(+), 1214 deletions(-) create mode 100644 .yarn/patches/tailwind-variants-npm-0.3.1-48888516de.patch delete mode 100644 examples/rac-tailwind/tailwind.config.js delete mode 100644 packages/dev/docs/pages/react-aria/tailwind.config.js delete mode 100644 packages/react-aria-components/docs/examples/tailwind.config.js create mode 100644 packages/tailwindcss-react-aria-components/fixtures/prefix.html create mode 100644 packages/tailwindcss-react-aria-components/fixtures/variants.html delete mode 100644 packages/tailwindcss-react-aria-components/src/index.test.js create mode 100644 packages/tailwindcss-react-aria-components/test/__snapshots__/index.test.js.snap create mode 100644 packages/tailwindcss-react-aria-components/test/index.test.js delete mode 100644 starters/tailwind/tailwind.config.js diff --git a/.yarn/patches/tailwind-variants-npm-0.3.1-48888516de.patch b/.yarn/patches/tailwind-variants-npm-0.3.1-48888516de.patch new file mode 100644 index 00000000000..63ede244385 --- /dev/null +++ b/.yarn/patches/tailwind-variants-npm-0.3.1-48888516de.patch @@ -0,0 +1,19 @@ +diff --git a/dist/transformer.d.ts b/dist/transformer.d.ts +index 508be4d8176486bfbbccd0b8cf297465c8efd15a..afbd775c60f09c8a9c35e30c79f286fddc7c7018 100644 +--- a/dist/transformer.d.ts ++++ b/dist/transformer.d.ts +@@ -1,10 +1,10 @@ +-import type {Config} from "tailwindcss/types/config"; +-import type {DefaultTheme} from "tailwindcss/types/generated/default-theme"; ++// import type {Config} from "tailwindcss/types/config"; ++// import type {DefaultTheme} from "tailwindcss/types/generated/default-theme"; + +-export type DefaultScreens = keyof DefaultTheme["screens"]; ++export type DefaultScreens = any; + + export type WithTV = { +- (tvConfig: C, config?: TVTransformerConfig): C; ++ (tvConfig: C, config?: TVTransformerConfig): C; + }; + + export declare const withTV: WithTV; diff --git a/examples/rac-spectrum-tailwind/.postcssrc b/examples/rac-spectrum-tailwind/.postcssrc index 0985cb2aab0..e092dc7c1ef 100644 --- a/examples/rac-spectrum-tailwind/.postcssrc +++ b/examples/rac-spectrum-tailwind/.postcssrc @@ -1,5 +1,5 @@ { "plugins": { - "tailwindcss": {} + "@tailwindcss/postcss": {} } } diff --git a/examples/rac-spectrum-tailwind/package.json b/examples/rac-spectrum-tailwind/package.json index 744d53bf0fa..306f345637b 100644 --- a/examples/rac-spectrum-tailwind/package.json +++ b/examples/rac-spectrum-tailwind/package.json @@ -12,13 +12,14 @@ "@react-spectrum/provider": "^3.9.7", "@spectrum-icons/illustrations": "^3.6.3", "@spectrum-icons/workflow": "^4.2.12", + "@tailwindcss/postcss": "^4.0.0", "parcel": "^2.13.0", "postcss": "^8.2.1", "react": "^18.2.0", - "react-aria-components": "^1.0.0-alpha.4", + "react-aria-components": "^1.6.0", "react-dom": "^18.2.0", "react-stately": "^3.23.0", - "tailwindcss": "^3.3.0", + "tailwindcss": "^4.0.0", "tailwindcss-animate": "^1.0.5" }, "devDependencies": { diff --git a/examples/rac-spectrum-tailwind/src/components/GenInputField.tsx b/examples/rac-spectrum-tailwind/src/components/GenInputField.tsx index 82f2510d583..717d00334c4 100644 --- a/examples/rac-spectrum-tailwind/src/components/GenInputField.tsx +++ b/examples/rac-spectrum-tailwind/src/components/GenInputField.tsx @@ -16,13 +16,13 @@ export function GenInputField() { value={value} onChange={setValue} aria-label="Prompt" - className="flex-grow h-full p-150" + className="grow h-full p-150" > - + diff --git a/examples/rac-spectrum-tailwind/src/components/NavigationBox.tsx b/examples/rac-spectrum-tailwind/src/components/NavigationBox.tsx index a0ffe3ee7b3..0d1482ebead 100644 --- a/examples/rac-spectrum-tailwind/src/components/NavigationBox.tsx +++ b/examples/rac-spectrum-tailwind/src/components/NavigationBox.tsx @@ -9,7 +9,7 @@ export function NavigationBox({ children, src, ...other }: NavigationBoxProps) { return (
{({ isSelected }) => (
diff --git a/examples/rac-spectrum-tailwind/src/components/SentimentRatingGroup.tsx b/examples/rac-spectrum-tailwind/src/components/SentimentRatingGroup.tsx index d4d451b8ad4..47da1fd8a54 100644 --- a/examples/rac-spectrum-tailwind/src/components/SentimentRatingGroup.tsx +++ b/examples/rac-spectrum-tailwind/src/components/SentimentRatingGroup.tsx @@ -40,7 +40,7 @@ export function SentimentRating({ rating }: { rating: string }) { return ( {rating} diff --git a/examples/rac-spectrum-tailwind/src/style.css b/examples/rac-spectrum-tailwind/src/style.css index 00488ea27fa..a6d617bf484 100644 --- a/examples/rac-spectrum-tailwind/src/style.css +++ b/examples/rac-spectrum-tailwind/src/style.css @@ -1,6 +1,6 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import 'tailwindcss' source("./"); + +@config '../tailwind.config.js'; * { -webkit-tap-highlight-color: transparent; diff --git a/examples/rac-tailwind/.postcssrc b/examples/rac-tailwind/.postcssrc index 0985cb2aab0..e092dc7c1ef 100644 --- a/examples/rac-tailwind/.postcssrc +++ b/examples/rac-tailwind/.postcssrc @@ -1,5 +1,5 @@ { "plugins": { - "tailwindcss": {} + "@tailwindcss/postcss": {} } } diff --git a/examples/rac-tailwind/package.json b/examples/rac-tailwind/package.json index 722cf5ea8cb..dc4c1a444f0 100644 --- a/examples/rac-tailwind/package.json +++ b/examples/rac-tailwind/package.json @@ -10,14 +10,15 @@ "dependencies": { "@heroicons/react": "^2.0.16", "@react-aria/parcel-resolver-optimize-locales": "^1.0.0", + "@tailwindcss/postcss": "^4.0.0", "framer-motion": "^10.12.16", "parcel": "^2.13.0", "postcss": "^8.4.21", "react": "^18.2.0", - "react-aria-components": "^1.0.0-alpha.4", + "react-aria-components": "^1.6.0", "react-dom": "^18.2.0", "react-stately": "^3.23.0", - "tailwindcss": "^3.3.0", + "tailwindcss": "^4.0.0", "tailwindcss-animate": "^1.0.5" }, "devDependencies": { diff --git a/examples/rac-tailwind/src/AnimatedCalendar.tsx b/examples/rac-tailwind/src/AnimatedCalendar.tsx index d6389c374cd..0438a31b480 100644 --- a/examples/rac-tailwind/src/AnimatedCalendar.tsx +++ b/examples/rac-tailwind/src/AnimatedCalendar.tsx @@ -34,7 +34,7 @@ export function AnimatedCalendar() { state.focusPreviousPage(); setPageOffset(pageOffset - 1); }} - className="w-12 h-12 sm:w-9 sm:h-9 ml-4 outline-none cursor-default rounded-full flex items-center justify-center data-[hovered]:bg-gray-100 data-[pressed]:bg-gray-200 data-[focus-visible]:ring data-[focus-visible]:ring-black data-[focus-visible]:ring-offset-2"> + className="w-12 h-12 sm:w-9 sm:h-9 ml-4 outline-hidden cursor-default rounded-full flex items-center justify-center data-hovered:bg-gray-100 data-pressed:bg-gray-200 data-focus-visible:ring-3 data-focus-visible:ring-black data-focus-visible:ring-offset-2"> @@ -81,7 +81,7 @@ function Month({offset}: { offset: number }) { {(date) => ( + className="w-12 h-12 sm:w-9 sm:h-9 outline-hidden cursor-default rounded-full text-md sm:text-sm flex items-center justify-center data-outside-month:text-gray-300 data-hovered:bg-gray-100 data-pressed:bg-gray-200 data-selected:data-hovered:bg-black data-selected:bg-black data-selected:text-white data-focus-visible:ring-3 data-focus-visible:ring-black data-focus-visible:ring-offset-2" /> )} diff --git a/examples/rac-tailwind/src/App.js b/examples/rac-tailwind/src/App.js index 319a67f9dc6..eaa3055629a 100644 --- a/examples/rac-tailwind/src/App.js +++ b/examples/rac-tailwind/src/App.js @@ -37,11 +37,11 @@ export function App() { function MenuExample() { return ( -
+
- - + + New… Open… @@ -58,28 +58,28 @@ function MenuExample() { function MyMenuItem(props) { return ` - group flex w-full items-center rounded-md px-3 py-2 sm:text-sm outline-none cursor-default + group flex w-full items-center rounded-md px-3 py-2 sm:text-sm outline-hidden cursor-default ${isFocused ? 'bg-violet-500 text-white' : 'text-gray-900'} `} />; } function OverlayButton(props) { - return
- - + + Aardvark Cat Dog @@ -144,7 +144,7 @@ function ComboBoxExample() { function TabsExample() { return ( -
+
Blog @@ -182,15 +182,15 @@ function MyTab(props) { ` - w-full rounded-full py-2.5 sm:text-sm font-medium leading-5 text-center cursor-default ring-black outline-none transition-colors + w-full rounded-full py-2.5 sm:text-sm font-medium leading-5 text-center cursor-default ring-black outline-hidden transition-colors ${isFocusVisible ? 'ring-2' : ''} - ${isSelected ? 'text-emerald-700 bg-white shadow' : 'text-lime-50 data-[hovered]:bg-white/[0.12] data-[hovered]:text-white data-[pressed]:bg-white/[0.12] data-[pressed]:text-white'} + ${isSelected ? 'text-emerald-700 bg-white shadow-sm' : 'text-lime-50 data-hovered:bg-white/[0.12] data-hovered:text-white data-pressed:bg-white/[0.12] data-pressed:text-white'} `} /> ); } function MyTabPanel(props) { - return ; + return ; } function Article({title, summary}) { @@ -204,7 +204,7 @@ function Article({title, summary}) { function RadioGroupExample() { return ( -
+
@@ -218,7 +218,7 @@ function RadioGroupExample() { function MyRadio({name, time, price}) { return ( ` - relative flex cursor-default rounded-lg px-4 py-3 shadow-lg focus:outline-none bg-clip-padding border border-transparent + relative flex cursor-default rounded-lg px-4 py-3 shadow-lg focus:outline-hidden bg-clip-padding border border-transparent ${isFocusVisible ? 'ring-2 ring-blue-600 ring-offset-1 ring-offset-white/80' : ''} ${isSelected ? 'bg-blue-600 border-white/30 text-white' : ''} ${isPressed && !isSelected ? 'bg-blue-50' : ''} @@ -244,11 +244,11 @@ function MyRadio({name, time, price}) { function ModalExample() { return ( -
+
Open dialog ` - fixed inset-0 z-10 overflow-y-auto bg-black bg-opacity-25 flex min-h-full items-center justify-center p-4 text-center backdrop-blur + fixed inset-0 z-10 overflow-y-auto bg-black/25 flex min-h-full items-center justify-center p-4 text-center backdrop-blur ${isEntering ? 'animate-in fade-in duration-300 ease-out fill-mode-forwards' : ''} ${isExiting ? 'animate-out fade-out duration-200 ease-in fill-mode-forwards' : ''} `}> @@ -257,7 +257,7 @@ function ModalExample() { ${isEntering ? 'animate-in fade-in zoom-in-95 ease-out duration-300 fill-mode-forwards' : ''} ${isExiting ? 'animate-out fade-out zoom-out-95 ease-in duration-200 fill-mode-forwards' : ''} `}> - + {({ close }) => (<> Delete folder @@ -266,13 +266,13 @@ function ModalExample() {

Cancel Delete @@ -288,12 +288,12 @@ function ModalExample() { } function DialogButton({className, ...props}) { - return