-
-
Notifications
You must be signed in to change notification settings - Fork 2k
fix(toast): show animation when closing all modals #5637
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(toast): show animation when closing all modals #5637
Conversation
|
@anshumandev2025 is attempting to deploy a commit to the HeroUI Inc Team on Vercel. A member of the Team first needs to authorize it. |
🦋 Changeset detectedLatest commit: a255ed0 The changes in this PR will be included in the next version bump. This PR includes changesets to release 2 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
WalkthroughImplements staggered asynchronous closing in toast closeAll by introducing per-toast timeouts; adds a changeset entry bumping @heroui/toast with a patch description. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant App as App
participant ToastProvider as ToastProvider
participant Queue as globalToastQueue
User->>App: Trigger closeAll()
App->>ToastProvider: closeAll()
ToastProvider->>Queue: Read visibleToasts (keys)
loop For each key with index i
Note over ToastProvider: schedule close with delay = i × 100ms
ToastProvider-->>ToastProvider: setTimeout(i × 100ms)
ToastProvider->>Queue: close(key) (after delay)
end
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Suggested labels
Suggested reviewers
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. 📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 💡 Knowledge Base configuration:
You can enable these sources in your CodeRabbit configuration. 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
✨ Finishing Touches🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
Status, Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/components/toast/src/toast-provider.tsx (1)
71-76: Ensure exit animations for single-toast close pathThe current implementation in
toast-provider.tsxonly renders<ToastRegion>whentoastQueue.visibleToasts.length > 0, so closing the last toast unmounts the region immediately and skips its exit animation.• File:
packages/components/toast/src/toast-provider.tsx, lines 48–51return ( <LazyMotion features={loadFeatures}> - {toastQueue.visibleToasts.length > 0 && ( - <ToastRegion - …props - /> - )} + <AnimatePresence> + {toastQueue.visibleToasts.length > 0 && ( + <ToastRegion + …props + /> + )} + </AnimatePresence> </LazyMotion> );Wrap the region in
<AnimatePresence>(or introduce akeepMountedflag) so it isn’t removed before its exit animation runs.• File:
packages/components/toast/src/toast-region.tsx
Ensure the region usesexitvariants and calls anonExitComplete(or similar) callback to delay unmount until the animation finishes.Add a Jest test with fake timers to confirm exit behavior:
- Render a single toast, call
closeToast(key), advance timers past the animation duration, and assert the<ToastRegion>(and underlying DOM) remains until exit completes.- (Optional) Render multiple toasts, call
closeAll(), advance timers, and assert staggered close timings.
🧹 Nitpick comments (1)
packages/components/toast/src/toast-provider.tsx (1)
85-89: Avoid magic number, allow cancellation, and short-circuit when staggering isn’t needed.
- The hardcoded 100ms should be a named constant (and ideally configurable).
- Repeated calls to
closeAllcan stack timeouts; clear pending ones first.- Short-circuit when
keys.length <= 1—no need to stagger.Apply this diff within
closeAll:@@ - keys.forEach((key, index) => { - setTimeout(() => { - globalToastQueue?.close(key); - }, index * 100); - }); + // Fast path: nothing (or only one) to close; avoids unnecessary timers + if (keys.length <= 1) { + keys.forEach((k) => globalToastQueue?.close(k)); + return; + } + + // Cancel any previously scheduled closeAll timers + pendingCloseAllTimers.forEach(clearTimeout); + pendingCloseAllTimers = []; + + keys.forEach((key, index) => { + const timerId = window.setTimeout(() => { + globalToastQueue?.close(key); + }, index * CLOSE_ALL_STAGGER_MS); + pendingCloseAllTimers.push(timerId); + });And add these module-level declarations (near the other module-level vars):
// module-level let pendingCloseAllTimers: number[] = []; const CLOSE_ALL_STAGGER_MS = 100; // consider reading from a motion token/themeOptional: Skip staggering entirely when animations are disabled (e.g., via Provider/global setting) to keep behavior snappy in non-animated environments. If you want, I can wire a shared “animationsEnabled” flag that
ToastProvidersets and helpers read.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (2)
.changeset/twelve-needles-bathe.md(1 hunks)packages/components/toast/src/toast-provider.tsx(1 hunks)
🔇 Additional comments (1)
packages/components/toast/src/toast-provider.tsx (1)
85-89: Keep ToastRegion Mounted to Preserve Exit AnimationsThe
<ToastRegion>component already wraps its children in Framer Motion’sAnimatePresence, and whenvisibleToastsis empty it simply renders no<Toast>instances—so keeping the region mounted incurs no visible “shell” when there are no toasts. However, because we currently unmount<ToastRegion>as soon as the last toast closes, the exit animation never has a chance to play.Apply the following change in
packages/components/toast/src/toast-provider.tsxto always render<ToastRegion>and letAnimatePresencehandle mounting/unmounting of individual toasts:@@ packages/components/toast/src/toast-provider.tsx - {toastQueue.visibleToasts.length > 0 && ( - <ToastRegion - disableAnimation={disableAnimation} - maxVisibleToasts={maxVisibleToasts} - placement={placement} - toastOffset={toastOffset} - toastProps={toastProps} - toastQueue={toastQueue} - {...regionProps} - /> - )} + {/* Always keep the region mounted so exit animations can run */} + <ToastRegion + disableAnimation={disableAnimation} + maxVisibleToasts={maxVisibleToasts} + placement={placement} + toastOffset={toastOffset} + toastProps={toastProps} + toastQueue={toastQueue} + {...regionProps} + />
- Why this matters: Unmounting the region on the last toast prevents Framer Motion from animating the toast’s exit. Keeping it mounted allows
AnimatePresenceintoast-region.tsxto detect and animate the final unmount of the last toast.- Verified:
ToastRegionimports and usesAnimatePresencearound the list ofvisibleToasts(so empty arrays render nothing but keep the wrapper)- With the conditional removed, the region persists in the DOM, ensuring exit animations play even when closing the sole toast
Please integrate this change to fully resolve Issue #5620.
Likely an incorrect or invalid review comment.
@heroui/accordion
@heroui/alert
@heroui/autocomplete
@heroui/avatar
@heroui/badge
@heroui/breadcrumbs
@heroui/button
@heroui/calendar
@heroui/card
@heroui/checkbox
@heroui/chip
@heroui/code
@heroui/date-input
@heroui/date-picker
@heroui/divider
@heroui/drawer
@heroui/dropdown
@heroui/form
@heroui/image
@heroui/input
@heroui/input-otp
@heroui/kbd
@heroui/link
@heroui/listbox
@heroui/menu
@heroui/modal
@heroui/navbar
@heroui/number-input
@heroui/pagination
@heroui/popover
@heroui/progress
@heroui/radio
@heroui/ripple
@heroui/scroll-shadow
@heroui/select
@heroui/skeleton
@heroui/slider
@heroui/snippet
@heroui/spacer
@heroui/spinner
@heroui/switch
@heroui/table
@heroui/tabs
@heroui/toast
@heroui/tooltip
@heroui/user
@heroui/react
@heroui/system
@heroui/system-rsc
@heroui/theme
@heroui/use-aria-accordion
@heroui/use-aria-accordion-item
@heroui/use-aria-button
@heroui/use-aria-link
@heroui/use-aria-modal-overlay
@heroui/use-aria-multiselect
@heroui/use-aria-overlay
@heroui/use-callback-ref
@heroui/use-clipboard
@heroui/use-data-scroll-overflow
@heroui/use-disclosure
@heroui/use-draggable
@heroui/use-form-reset
@heroui/use-image
@heroui/use-infinite-scroll
@heroui/use-intersection-observer
@heroui/use-is-mobile
@heroui/use-is-mounted
@heroui/use-measure
@heroui/use-pagination
@heroui/use-real-shape
@heroui/use-ref-state
@heroui/use-resize
@heroui/use-safe-layout-effect
@heroui/use-scroll-position
@heroui/use-ssr
@heroui/use-theme
@heroui/use-update-effect
@heroui/use-viewport-size
@heroui/aria-utils
@heroui/dom-animation
@heroui/framer-utils
@heroui/react-rsc-utils
@heroui/react-utils
@heroui/shared-icons
@heroui/shared-utils
@heroui/stories-utils
@heroui/test-utils
commit: |
wingkwong
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
closing a single toast does't have animation
|
I noticed this issue a few days ago. This is because there is no way to control the internal state of toast component due to the current design of toast component. The However, So a good solution would be providing a way to control the internal state of toast component, specifically |
|
@wingkwong I don't see the point of merging this PR.
Therefore, my point is this PR should be reverted and the original issue #5620 should be reopen until the |
|
@ChaserZ98 thanks for pointing out. I missed slide-out transition as I was using Close the last one as a reference. I've created another PR for that. |
* fix(date-picker): error state (#5317) * fix(date-range-picker): fixed the error state in preset * Update giant-sloths-shop.md * Removed if statement * chore(date-picker): prettier --------- Co-authored-by: WK Wong <[email protected]> * fix(theme): clear button in mobile (#5252) * fix(toast): fixed close button hover position * fix(input): fixed the clear button rendering on smaller devices * Delete .changeset/soft-spoons-march.md * Update input.ts * Undo unrelated toast changes * fix(toast): icons (#5246) * feat(shared-icons): add loading icon * fix(toast): icons * chore(toast): revise types for icons * chore(changeset): add changeset * refactor: migrate eslint to v9 (#5267) * refactor: migrate eslint to v9 * chore: lint * chore: update eslint command * chore: fix lint warnings * chore: separate lint and lint:fix * chore: exclude contentlayer generated code * fix(scripts): add missing await * fix(autocomplete): persist last selected item position (#5286) * refactor(select): remove unnecessary code * fix(autocomplete): persist last selected item position * chore(changeset): add changeset * chore(deps): bump framer-motion version (#5287) * chore(deps): bump framer-motion version * fix: typing issues * chore(changeset): add changeset --------- Co-authored-by: Junior Garcia <[email protected]> * chore(docs): supplement onAction & selectionBehavior (#5289) * fix(autocomplete): ensure focused item matches selected item after filter, selection (#5290) * fix(autocomplete): ensure focused item matches selected item after filter, selection * chore: apply type and default value * chore: add perpose coment in updated code * test: add focuskey management testcode * docs: add changeset * docs: update changeset * chore: remove comment * fix: broken components in stories (#5291) * chore(switch): remove xl size * chore(docs): remove xl size * chore(system-rsc): remove xl size * chore(circular-progress): remove xl size * chore: undo * chore(deps): bump RA versions (#5310) * chore(deps): ra version bump * chore(changeset): add changeset * fix(scripts): incorrect docs path --------- Co-authored-by: Junior Garcia <[email protected]> * chore(docs): update meta data (#5311) * docs(layout.tsx): added text-foreground (#5316) * feat(tabs): add click handling for tab items in tests and implementation (#3917) Co-authored-by: WK Wong <[email protected]> * fix issues in tabs examples (#2405) Co-authored-by: WK Wong <[email protected]> * chore(docs): add missing onValueChange in CheckboxGroup (#5332) * ci(changesets): version packages (#5323) Co-authored-by: Junior Garcia <[email protected]> * chore(deps): bump RA versions (#5361) * chore(deps): bump RA versions * chore(deps): bump RA versions * chore(deps): bump RA versions * chore: changeset * refactor(listbox): already extends in AriaListBoxProps * chore(docs): remove herohack announcement (#5363) * chore: remove herohack announcement * Update carbon-ad.tsx * chore(docs): fixed lint errors * chore(docs): requested changes * Update carbon-ad.tsx * Update carbon-ad.tsx * fix(theme): consistent faded styling for isInvalid in InputOtp and DateInput (#5349) * fix(input-otp): remove bg and border styles from faded variant when isInvalid * fix(date-input): remove bg styles from faded variant when isInvalid * chore(changeset): add changeset * chore: bump theme peerDependencies * chore: bump theme peerDependencies * fix: wrong version * chore: extra line --------- Co-authored-by: WK Wong <[email protected]> * fix(theme): helperWrapper padding (#5350) * fix(number-input): decreased helperWrapper padding to maintain consistency * Update beige-laws-heal.md * chore(theme): change to p-1 * chore(deps): bump peerDependencies for theme pkg * fix(number-input): incorrect versions * chore(changeset): include number input --------- Co-authored-by: WK Wong <[email protected]> * fix(autocomplete): onClear (#5365) * fix(autocomplete): add onClear * feat(autocomplete): add test case for onClear * chore(changeset): add changeset * fix(number-input): only allow number type (#5368) * refactor(number-input): avoid non number type passing to number input * chore(changeset): add changeset * refactor: optimization (#5362) * chore(deps): bump RA versions * chore(deps): bump RA versions * chore(deps): bump RA versions * chore: changeset * chore(deps): remove unnecessary dependencies * fix(calendar): typing issue * refactor(system): remove unused SupportedCalendars * refactor(system): move I18nProviderProps to type * refactor: use `spectrumCalendarProps<DateValue>["createCalendar"]` * feat: add consistent-type-imports * fix: eslint * chore: add changeset * refactor: remove unused deps * ci(changesets): version packages (#5364) Co-authored-by: Junior Garcia <[email protected]> * chore(deps): bump RA versions (#5382) * fix(tabs): onClick (#5378) * fix(tabs): handleClick * chore(changeset): add changeset * refactor: remove `@interationalized/date` from system (#5374) * refactor(calendar): createCalendar typing * refactor(system): ditch `@react-types/calendar` * feat(system): include the required types or interfaces * chore(deps): pnpm-lock.yaml * fix: cast DateValue * fix: minValue & maxValue typing * chore(changeset): add changeset * refactor(system): abstract class * chore(deps): bump system peer dependency * chore(changeset): add changeset * fix(docs): correct display of the "Toast" component in the Safari browser (#5400) * ci(changesets): version packages (#5394) Co-authored-by: Junior Garcia <[email protected]> * docs: replace invalid yarn command (#5422) * chore: remove ph banner (#5437) * feat: 2.8.0 beta changes (#5473) * ci(changesets): 📦 version packages (beta) (#5254) * chore(pre-release): enter pre-release mode * feat: support tailwindcss v4 (#4656) * feat: upgrade tailwindcssv4 * feat: upgrade tailwindcssv4 * feat: update config * feat: first init tailwindcss v4 * fix: update shadow xs to sm * fix: update rounded xs to sm * fix: variant issues * fix: variant shadow etc issues * fix: variant shadow issues * fix: redundant shadow issues * fix: redundant blur-sm issues * fix: redundant blur-sm issues * fix: redundant blur-sm shadow issues * fix: remove redundant rename * fix: role button issues * fix: role button issues * fix: font size * fix: alpha color value * fix: support text utilities in plugin * feat: upgrade tailwind-merge * fix: pkg package scope (cherry picked from commit 6e82323) * fix: button base ui add cursor pointer * fix: tailwindcss experimental * feat: upgrade tailwindcss version * fix: input step 1 * fix: input transition issue * fix: theme to var function * ci: run QA in beta branch * fix: var to the theme and incorrect var usage MER-3261 * feat: upgrade tailwind-variants --------- Co-authored-by: WK Wong <[email protected]> Co-authored-by: Junior Garcia <[email protected]> * feat: changeset for tailwindcss v4 * fix: changeset * fix: changeset * ci(changesets): version packages (beta) (#5008) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * chore: tw 4 docs * fix: select tests * chore: timeout * ci(changesets): version packages (beta) * ci(changesets): version packages (beta) * fix: deployment * ci(changesets): version packages (beta) (#5009) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * chore: add the cli to upgrade the packages to beta * fix: cli command * fix: revert to use previous version (#5012) * fix: revert to use previous version * fix: revert to use previous version * fix: revert * fix: revert to use previous tailwind-merge version * ci(changesets): version packages (beta) (#5015) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix: adapt tailwind merger config (#5016) * Revert "fix: revert to use previous version (#5012)" This reverts commit 1d01df2. * fix: adapt tailwind merge config * fix: adapt tailwind merge config * fix: adapt tailwind merge config * fix: changeset * ci(changesets): version packages (beta) * fix(tailwind): add missing values config for bg-grid plugin * fix: remove useless tw config * fix: add default styles * docs: changeset * docs: typo * chore: merge origin canary to beta * ci(changesets): version packages (beta) * chore: remove changeset & pre.json * chore: change to minor * chore(pre-release): enter pre-release mode * chore(deps): fix versions * chore(deps): revise changed packages * chore(deps): update tailwindcss version * ci(changesets): 📦 version packages (beta) (#5166) * ci(changesets): version packages (beta) * fix: add missing delimiter --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: winches <[email protected]> * fix(docs): add missing semicolon * fix: animate about skeleton (#5198) * chore: pre release * ci(changesets): version packages (beta) (#5199) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * docs: blurred hover button style * fix: language selector blur (#5208) * fix: skeleton animate translate value (#5207) * fix: open in remote repo (#5214) * chore: upgrade tw version * fix: open in remote repo * fix: update lock * fix: select translate styles (#5219) * chore: pre release * ci(changesets): version packages (beta) (#5222) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore: remove changeset * chore(pre-release): enter pre-release mode * chore(react): continue from 2.8.0-beta.2 * chore(changeset): add changeset * fix(changeset): use patch * ci(changesets): version packages (beta) * fix(docs): beta docs --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: winches <[email protected]> Co-authored-by: WK Wong <[email protected]> Co-authored-by: Junior Garcia <[email protected]> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Charlotte21110 <[email protected]> * fix(workflow): check_if_pre_json_exists order * chore(changeset): redeploy * chore(changeset): changeset (#5263) * ci(changesets): version packages (beta) (#5264) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(docs): mdx in beta (#5261) * chore(docs): add lint:fix * fix(docs): slug requires promise in next 15 * fix(docs): useMDXComponent * fix(docs): typing issue * docs: typography style error (#5274) * chore(pre-release): enter pre-release mode * feat: support tailwindcss v4 (#4656) * feat: upgrade tailwindcssv4 * feat: upgrade tailwindcssv4 * feat: update config * feat: first init tailwindcss v4 * fix: update shadow xs to sm * fix: update rounded xs to sm * fix: variant issues * fix: variant shadow etc issues * fix: variant shadow issues * fix: redundant shadow issues * fix: redundant blur-sm issues * fix: redundant blur-sm issues * fix: redundant blur-sm shadow issues * fix: remove redundant rename * fix: role button issues * fix: role button issues * fix: font size * fix: alpha color value * fix: support text utilities in plugin * feat: upgrade tailwind-merge * fix: pkg package scope (cherry picked from commit 6e82323) * fix: button base ui add cursor pointer * fix: tailwindcss experimental * feat: upgrade tailwindcss version * fix: input step 1 * fix: input transition issue * fix: theme to var function * ci: run QA in beta branch * fix: var to the theme and incorrect var usage MER-3261 * feat: upgrade tailwind-variants --------- Co-authored-by: WK Wong <[email protected]> Co-authored-by: Junior Garcia <[email protected]> * feat: changeset for tailwindcss v4 * fix: changeset * fix: changeset * ci(changesets): version packages (beta) (#5008) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * chore: tw 4 docs * fix: select tests * chore: timeout * ci(changesets): version packages (beta) * ci(changesets): version packages (beta) * fix: deployment * ci(changesets): version packages (beta) (#5009) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * chore: add the cli to upgrade the packages to beta * fix: cli command * fix: revert to use previous version (#5012) * fix: revert to use previous version * fix: revert to use previous version * fix: revert * fix: revert to use previous tailwind-merge version * ci(changesets): version packages (beta) (#5015) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix: adapt tailwind merger config (#5016) * Revert "fix: revert to use previous version (#5012)" This reverts commit 1d01df2. * fix: adapt tailwind merge config * fix: adapt tailwind merge config * fix: adapt tailwind merge config * fix: changeset * ci(changesets): version packages (beta) * fix(tailwind): add missing values config for bg-grid plugin * fix: remove useless tw config * fix: add default styles * docs: changeset * docs: typo * chore: merge origin canary to beta * ci(changesets): version packages (beta) * chore: remove changeset & pre.json * chore: change to minor * chore(pre-release): enter pre-release mode * chore(deps): fix versions * chore(deps): revise changed packages * chore(deps): update tailwindcss version * ci(changesets): 📦 version packages (beta) (#5166) * ci(changesets): version packages (beta) * fix: add missing delimiter --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: winches <[email protected]> * fix(docs): add missing semicolon * fix: animate about skeleton (#5198) * chore: pre release * ci(changesets): version packages (beta) (#5199) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * docs: blurred hover button style * fix: language selector blur (#5208) * fix: skeleton animate translate value (#5207) * fix: open in remote repo (#5214) * chore: upgrade tw version * fix: open in remote repo * fix: update lock * fix: select translate styles * Merge branch beta/release-next of github.com:heroui-inc/heroui into beta/release-next-original --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: WK Wong <[email protected]> Co-authored-by: Junior Garcia <[email protected]> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Charlotte21110 <[email protected]> * fix: transition scale (#5284) * feat(toast): enable programatically closing a toast with a specific key (#5125) * feat(toast): add closeToast method * docs(toast): add example for programmatically closing toast * refactor: change button title in doc * refactor: add type for key * test: sync storybook example with the one in docs * chore: add changeset * refactor: fix grammar * chore: update toast package version change to patch * Merge branch 'canary' into pr/5125 * chore(changeset): add ref number * refactor(toast): export hooks * chore(docs): use flat buttons --------- Co-authored-by: WK Wong <[email protected]> * ci(changesets): version packages (beta) (#5285) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(input): prevent accessibility label duplication (#5161) * fix(input): prevent accessibility label duplication * chore(chageset): add changeset * chore(changeset): include issue number --------- Co-authored-by: WK <[email protected]> * refactor: overlay & interactOutside (#5100) * fix: remove ariaShouldCloseOnInteractOutside usage * feat: add `@heroui/use-aria-overlay` * chore(popover): remove ariaHideOutside * fix(use-aria-modal-overlay): use useAriaOverlay instead * fix(use-aira-overlay): revise onInteractOutside * chore(deps): pnpm-lock.yaml * feat(modal): add ModalWithAutocompleteTemplate * chore(modal): remove state.close as handled by useInteractOutside * fix(use-aria-multiselect): add menuTriggerProps.onPressStart and change domProps to triggerProps * chore(use-aria-button): support onPressUp * chore(deps): pnpm-lock.yaml * chore(use-aria-multiselect): join by commas * fix(tooltip): use useAriaOverlay instead * fix(autocomplete): jest timeout issue * chore(deps): pnpm-lock.yaml * chore(changset): add changeset * chore(deps): bump versions * refactor(tooltip): move to type * chore(deps): bump RA versions (#5315) * chore(deps): bump RA versions * fix(scripts): incorrect docs path * chore(changeset): add changeset for bumping RA versions * fix(docs): incorrect import path * refactor(modal): use a simple example * ci(changesets): version packages (beta) (#5303) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * feat(input): adding outside-top prop (#4775) * feat(input): adding outside-top prop * chore(input): add outside-top to use-label-placement hook * refactor(input): use old method for computing labelPlacement in 'use-input' * fix(input): fix focus behaviouir and alignment for 'outside-top' * Merge branch 'canary' into pr/4775 * chore(changeset): include issue number * feat(system): useInputLabelPlacement * refactor(input): use useInputLabelPlacement * chore(changeset): add changeset --------- Co-authored-by: WK Wong <[email protected]> * chore: sync latest changes to beta (#5347) * chore: add herohack announcement * fix(date-picker): error state (#5317) * fix(date-range-picker): fixed the error state in preset * Update giant-sloths-shop.md * Removed if statement * chore(date-picker): prettier --------- Co-authored-by: WK Wong <[email protected]> * chore: banner replacement * fix(theme): clear button in mobile (#5252) * fix(toast): fixed close button hover position * fix(input): fixed the clear button rendering on smaller devices * Delete .changeset/soft-spoons-march.md * Update input.ts * Undo unrelated toast changes * fix(toast): icons (#5246) * feat(shared-icons): add loading icon * fix(toast): icons * chore(toast): revise types for icons * chore(changeset): add changeset * refactor: migrate eslint to v9 (#5267) * refactor: migrate eslint to v9 * chore: lint * chore: update eslint command * chore: fix lint warnings * chore: separate lint and lint:fix * chore: exclude contentlayer generated code * fix(scripts): add missing await * fix(autocomplete): persist last selected item position (#5286) * refactor(select): remove unnecessary code * fix(autocomplete): persist last selected item position * chore(changeset): add changeset * chore(deps): bump framer-motion version (#5287) * chore(deps): bump framer-motion version * fix: typing issues * chore(changeset): add changeset --------- Co-authored-by: Junior Garcia <[email protected]> * chore(docs): supplement onAction & selectionBehavior (#5289) * fix(autocomplete): ensure focused item matches selected item after filter, selection (#5290) * fix(autocomplete): ensure focused item matches selected item after filter, selection * chore: apply type and default value * chore: add perpose coment in updated code * test: add focuskey management testcode * docs: add changeset * docs: update changeset * chore: remove comment * fix: broken components in stories (#5291) * chore(switch): remove xl size * chore(docs): remove xl size * chore(system-rsc): remove xl size * chore(circular-progress): remove xl size * chore: undo * chore(deps): bump RA versions (#5310) * chore(deps): ra version bump * chore(changeset): add changeset * fix(scripts): incorrect docs path --------- Co-authored-by: Junior Garcia <[email protected]> * chore(docs): update meta data (#5311) * docs(layout.tsx): added text-foreground (#5316) * feat(tabs): add click handling for tab items in tests and implementation (#3917) Co-authored-by: WK Wong <[email protected]> * fix issues in tabs examples (#2405) Co-authored-by: WK Wong <[email protected]> * chore(docs): add missing onValueChange in CheckboxGroup (#5332) * ci(changesets): version packages (#5323) Co-authored-by: Junior Garcia <[email protected]> * chore: remove pre.json --------- Co-authored-by: Junior Garcia <[email protected]> Co-authored-by: Vishv Salvi <[email protected]> Co-authored-by: KumJungMin <[email protected]> Co-authored-by: liaoyinglong <[email protected]> Co-authored-by: zhengjitf <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(pre-release): enter pre-release mode * chore: update changesets * chore: remove changesets * chore: add changeset * chore: update `@heroui/react` pre version * fix(deps): add missing `@heroui/use-aria-overlay` import * fix: lock file (#5351) * ci(changesets): 📦 version packages (beta) (#5348) * ci(changesets): version packages (beta) * Merge branch 'beta/release-next' into changeset-release/beta/release-next --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: WK Wong <[email protected]> * chore: sync 2.8.0 to beta (#5388) * chore: remove outdated changeset * chore(pre-release): enter pre-release mode * chore(deps): bump RA versions (beta) (#5392) * chore(deps): bump RA versions * chore: add changeset * ci(changesets): version packages (beta) (#5393) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * refactor: remove RA dependencies (overaly & utils) (#5398) * refactor(system): remove `@react-aria/utils` package * refactor(system): remove `@react-aria/overlays` package * ci(changesets): version packages (beta) (#5399) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * refactor: RA optimization (#5401) * refactor(shared-utils): add common functions from `@react-aria/utils` * feat(system): add shouldClientNavigate & useRouter * refactor(deps): remove `@react-aria/utils` * feat(shared-utils): include common functions from RA * refactor: import functions from `@heroui/shared-utils` instead * chore(deps): pnpm-lock.yaml * chore: add changeset * chore(shared-utils): update directory * fix(shared-utils): add use client directive * feat: add `@heroui/use-viewport-size` * feat: add `@heroui/use-form-reset` * feat(use-resize): add hasResizeObserver & RefObject * feat(form): add useObjectRef * chore: update import * chore(deps): update dependencies * refactor(shared-utils): only keep utils * chore(deps): pnpm-lock.yaml * chore(changeset): add changeset * ci(changesets): version packages (beta) (#5406) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix: transitions (#5409) * chore(changeset): add changeset * fix: outline style (#5421) * fix: outline style * chore(changeset): add changeset --------- Co-authored-by: WK Wong <[email protected]> * fix(toast): Renaming the loadingIcon to loadingComponent (#4919) * fix: toast should be above the modal * fix: renaming the loadingIcon to loadingComponent * chore: adding changeset * chore: fixing conflicts * chore: adding the region props * fix: adding Marcus' suggestions * fix: marcus' suggestions * Revert all commits except 4c6bf32 * chore(toast): bump `@heroui/theme` in peerDependencies * chore: nits * chore: applying marcus' suggestions * chore(toast): update story --------- Co-authored-by: WK Wong <[email protected]> * chore: use beta version * chore: delete pre.json * chore(pre-release): enter pre-release mode * chore(changeset): trigger release * chore(changeset): trigger release * chore: keep previous changesets * ci(changesets): version packages (beta) (#5429) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(table): header and isStriped missing radius (#5062) * fix(table): tableheader and isStriped missing radius * chore: add changeset * fix: fix missing radius styles * chore(changeset): update message * fix(theme): reorder radius --------- Co-authored-by: WK Wong <[email protected]> * fix(slider): prevent NaN error for equal min / max values (#5044) * fix(slider): prevent NaN error for equal min/max values * fix: restore isdisabled code * fix(slider): perf prevent NaN error for equal min max values * refactor: slider code * fix(slider): prevent NaN error for equal min max values & add test * fix(slider): perf prevent NaN error for equal min max values * fix: remove redundant code * chore: add changeset * Revert "chore: add changeset" This reverts commit f31de4a. * chore(slider): add missing warn * refactor(slider): remove unnecessary line --------- Co-authored-by: WK Wong <[email protected]> * fix: double fetch img src (#5417) * fix(image): double fetch when using custom image component * fix(avatar): avoid passing disableAnimation to dom & double fetch source * chore(changeset): include avatar * fix(autocomplete): empty button when selectorIcon is null (#5427) * fix(toast): Toast items close in reverse order (#5405) * fix(toast): correct closing order to implement proper FIFO behavior * chore(changeset): add changeset * fix(changeset): update issue number * chore(toast): use `!==` instead * feat(toast): apply exit animation to auto-close timeout --------- Co-authored-by: WK Wong <[email protected]> * fix(table): remove removeWrapper on virtualized table (#5428) * fix(table): remove `removeWrapper` for virtualized table * chore(docs): update description for removeWrapper * chore(changeset): add changeset * fix(toast): fixed close button hover position (#5245) * fix(toast): fixed close button hover position * Update soft-spoons-march.md * Update toast.ts * chore(theme): prettier * Using "placement" to apply the top and bottom extension * fix(toast): modified hover for expanded region * update dependancy array * lint fix * Merge branch 'canary' into pr/5245 * chore(theme): remove line breaks * chore(changeset): add missing package * static extension size * fix(toast): static extension fix --------- Co-authored-by: WK Wong <[email protected]> * feat(table): support custom sort icon (#5243) * feat(shared-icons): add SortIcon * feat(table): add CustomSortIcon story * feat(table): support custom sort icon * fix(table): handle functional sortIcon * chore(changeset): add changeset * chore(table): update type * feat(docs): add sortIcon to table * fix(docs): broken object * chore(shared-icons): lint * feat(docs): add example for sort icon * chore: bump pnpm & node version (#5442) * refactor: bump pnpm & node version * chore(deps): bump `@types/node` * fix(calendar): improve month and year picker selection for different zoom levels (#5151) * fix(calendar): improve month and year picker selection for different zoom levels * fix(calendar): improve month and year picker selection for different zoom levels * fix(calendar): prevent stale values while scrolling both year and month pickers simultaneously * docs: replace invalid yarn command (#5422) * chore: remove ph banner (#5437) * chore(changeset): update changeset message * chore: add line breaks --------- Co-authored-by: Nicolas Cappabianca <[email protected]> Co-authored-by: WK <[email protected]> * feat(select): adding isClearable to select (#4785) * feat(select): adding isClearable to select * chore(select): add changeset * test(select): add tests for isClearable * chore(select): add theme package patch, improve the testcase, rename nextui package to heroui * fix(select): fixing alignment for clear button for different cases * Merge branch 'canary' into pr/4785 * Merge branch 'canary' into pr/4785 * fix(select): remove component level styling * fix(select): fix the alignment and focus behaviour * fix(select): shift clear buttojn close to trigger * fix(select): fix alignment for different variants * feat(select): add data-has-end-content * fix(theme): revise select styles with clear button and end content * feat(docs): add end content --------- Co-authored-by: WK Wong <[email protected]> * fix(select): use span instead as trigger is button * fix(docs): add ToastProvider for blog post * ci(changesets): version packages (beta) (#5430) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(select): clear button test cases * fix(modal): draggable modal, scrollable on mobile (#5444) Co-authored-by: Vishv Salvi <[email protected]> * chore: trigger release * ci(changesets): version packages (beta) (#5445) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(theme): table header sorting icon transition (#5449) * fix: table header sorcting icon transition * chore(changeset): add changeset --------- Co-authored-by: WK Wong <[email protected]> * fix(table): allow text selection with cursor in table cells (#5454) * fix(table): allow text selection with cursor in table cells * chore(changeset): add changeset --------- Co-authored-by: WK Wong <[email protected]> * ci(changesets): version packages (beta) (#5450) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore: add back RA deps (#5466) * chore(deps): bump testing-library & jest versions (#5468) * refactor: revise test cases * chore(deps): bump testing-library & jest versions * ci(changesets): version packages (beta) (#5467) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * refactor(autocomplete): test cases * fix(use-theme): incorrect target theme * ci(changesets): version packages (beta) (#5470) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(use-theme): remove all theme values and add the new one * ci(changesets): version packages (beta) (#5472) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * docs: 2.8.0 (#5443) * chore(docs): update routes.json * chore(docs): bump versions * chore(docs): initial draft * chore(docs): add examples * chore(Docs): update credits and community * chore(docs): update date & what's next * chore(docs): update meta data * chore(docs): add update tags * chore(docs): add tableSortIcon example * chore(docs): revise sidebar width * chore(docs): remove package size optimization * chore(docs): update meta * ci(changesets): exit pre-release mode * chore: update package versions * chore(changeset): remove unrelated changeset * chore(deps): remove unused autoprefixer * chore(docs): update tailwind v4 content * chore(docs): update template doc content * chore(docs): update formatting * chore(toast): export getToastQueue (#5476) * chore(docs): add hydration issue handling to page router example (#5474) * docs(dark-mode): add hydration handling to page router example * chore(docs): format --------- Co-authored-by: WK Wong <[email protected]> * chore(deps): bump tw4 versions * fix: handle files with paths containing empty space (#5478) * chore(docs): revise wordings in 2.8.0 blog * feat(slider): add getTooltipValue prop for custom tooltip value (#5384) * feat(slider): add getTooltipValue prop for custom tooltip value * feat(slider): fix coderabbit highlights * feat(slider): fixed wingkwong highlights * feat(slider): added custom-tooltip.raw.tsx?raw * feat(slider): improved custom-tooltip.raw.tsx * chore: undo README.md * chore(slider): use normal $ sign * chore(changeset): add changeset * chore(docs): formatting --------- Co-authored-by: andartadev1 <[email protected]> Co-authored-by: WK Wong <[email protected]> * chore(docs): revise custom tooltip example * chore(docs): add custom tooltip example for slider * chore(deps): bump contentlayer2 & next-contentlayer2 * chore(docs): fix formatting * chore(docs): update metadata * chore: add v2.8.0 image --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: winches <[email protected]> Co-authored-by: Junior Garcia <[email protected]> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Charlotte21110 <[email protected]> Co-authored-by: Feiyu Zheng <[email protected]> Co-authored-by: Dmytro Klymenko <[email protected]> Co-authored-by: Abhinav Agarwal <[email protected]> Co-authored-by: Vishv Salvi <[email protected]> Co-authored-by: KumJungMin <[email protected]> Co-authored-by: liaoyinglong <[email protected]> Co-authored-by: zhengjitf <[email protected]> Co-authored-by: Maharshi Alpesh <[email protected]> Co-authored-by: Yohan <[email protected]> Co-authored-by: Aditya Ray <[email protected]> Co-authored-by: Aakash Patel <[email protected]> Co-authored-by: Nicolas Cappabianca <[email protected]> Co-authored-by: Vishv Salvi <[email protected]> Co-authored-by: Priyadharshini S <[email protected]> Co-authored-by: arar <[email protected]> Co-authored-by: andartadev1 <[email protected]> * chore: consolidated version part 2 * ci(changesets): version packages (#5482) Co-authored-by: Junior Garcia <[email protected]> * fix(theme): use `outline-hidden` which is equivalent to `outline-none` (#5486) * fix: use `outline-hidden` which is equivalent to `outline-none` in v3 * chore: add changeset * ci(changesets): version packages (#5487) Co-authored-by: Junior Garcia <[email protected]> * fix(number-input): label class being incorrectly mixed into the description (#5484) * fix(number-input): label class being incorrectly mixed into the description * chore: add issue number --------- Co-authored-by: wulimaomao <[email protected]> Co-authored-by: WK Wong <[email protected]> * fix(docs): broken link in custom variants page (#5522) * refactor(alert): vertically center alert icon / endContent (#5512) * chore(deps): bump RA dependencies (#5517) * chore(deps): sync with RA release * fix(tabs): duplicate onClick * chore(docs): update tanstack content * chore(docs): set updated flag * chore(docs): update meta * fix(use-aria-overlay): sync with RA's overlay logic (#5529) * fix(use-aria-overlay): sync with RA logic * fix(use-aria-overlay): add onHide on onInteractOutsideStart * chore(changeset): add changeset * fix(popover): arrow glitch in popover content (#5504) * fix(popover): make PopoverContent children prop optional to fix TS error * chore(changeset): created changeset * fix(popover): do not show content when children is null / undefined * fix(popover): add test case * chore(changeset): update changeset message --------- Co-authored-by: i_nicck <[email protected]> Co-authored-by: WK Wong <[email protected]> * fix(avatar): broken fallbacks (#5519) * fix(toast): toastRegion leftover in DOM (#5508) * fix(theme): focus ring styles (#5531) * chore(deps): bump tailwind-variants version (#5538) * chore(deps): bump tailwind-variants version * chore(deps): add tailwind-merge * ci(changesets): version packages (#5516) Co-authored-by: Junior Garcia <[email protected]> * chore(docs): remove unused or deprecated info in autocomplete (#5581) * fix(docs): default value of radius in image (#5580) * fix(theme): clear button disabled inputs (#5607) * fix(input): disable pointer events on clear button when inactive * chore(changeset): add changeset * chore(docs): update TanStack routing (#5629) * fix(theme): stepperButton when labelPlacement is outside in NumberInput (#5628) * fix(theme): set stepperButton height when labelPlacement=outside in NumberInput component * chore(changeset): add issue number --------- Co-authored-by: WK <[email protected]> * refactor: use handleLinkClick from RA's utils (#5632) * chore(deps): bump tailwindcss version (#5636) * chore(deps): bump tailwind-variants version (#5635) * chore: bump tailwind-variants version * chore(deps): bump tailwind-variants to 3.1.0 * chore(deps): rollback TW to 4.1.11 (#5644) * chore: rollback tailwindcss to 4.1.11 * chore(deps): bump RA versions (aug 2025) (#5640) * chore(deps): bump RA versions (aug 2025) * chore: add changeset * chore(deps): update versions * chore(deps): bump @internationalized/date * chore(deps): bump @react-types * fix(popover): missing triggerAnchorPoint return * fix: triggerAnchorPoint * chore: sync with canary * fix(theme): dropdown-item has no ellipsis when it has a width and desc (#5638) * fix(theme): dropdown-item where the text was too long without an ellipsis when there was a desc * chore(changeset): update message --------- Co-authored-by: WK <[email protected]> * fix(toast): show animation when closing all modals (#5637) * fix(toast): show animation when closing all modals * chore(changeset): add issue number --------- Co-authored-by: WK <[email protected]> * refactor(toast): animation & toast region (#5647) * fix(toast): unexpected gap after closing a toast * refactor(toast): animation * fix(toast): close toast when disableAnimation is set to true * refactor: coderabbit comment * fix(use-aria-overlay): prevent modal/drawer from closing on press instead (#5624) * fix(modal/drawer): prevent modal/drawer from closing on press instead * refactor(useAriaOverlay): improve getOverlayTypeFromRef with ARIA checks and hoist * refactor(useAriaOverlay): add alertdialog & fallback to modal when aria-modal is missing * Merge branch 'canary' into pr/5624 * chore(changeset): add issue number * refactor(use-aria-overlay): getOverlayInteractionType --------- Co-authored-by: WK Wong <[email protected]> * refactor(ui): standardize copy code feedback across all tabs (#5584) * fix(select): use space as aria-labelledby separator (#5587) * fix(select): use space as aria-labelledby separator * chore(chageset): add changeset (#5586) * chore(changeset): add issue number and remove select --------- Co-authored-by: WK Wong <[email protected]> * fix(tabs): unresponsive modal after switching tabs inside (#5582) * fix(tabs): unresponsive modal after switching tabs inside * chore(deps): remove self * refactor: improve type safety (#5539) * refactor(popover): consolidate imports from aria-utils module * refactor(popover): remove unnecessary type assertion for child ref * refactor: remove unnecessary type assertions and improve type safety * chore(changeset): add changeset * ci(changesets): version packages (#5610) Co-authored-by: Junior Garcia <[email protected]> --------- Co-authored-by: Vishv Salvi <[email protected]> Co-authored-by: Junior Garcia <[email protected]> Co-authored-by: KumJungMin <[email protected]> Co-authored-by: liaoyinglong <[email protected]> Co-authored-by: zhengjitf <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Anuj Kuralkar <[email protected]> Co-authored-by: Poli Sour <[email protected]> Co-authored-by: Nicolas Cappabianca <[email protected]> Co-authored-by: winches <[email protected]> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Charlotte21110 <[email protected]> Co-authored-by: Feiyu Zheng <[email protected]> Co-authored-by: Dmytro Klymenko <[email protected]> Co-authored-by: Abhinav Agarwal <[email protected]> Co-authored-by: Maharshi Alpesh <[email protected]> Co-authored-by: Yohan <[email protected]> Co-authored-by: Aditya Ray <[email protected]> Co-authored-by: Aakash Patel <[email protected]> Co-authored-by: Vishv Salvi <[email protected]> Co-authored-by: Priyadharshini S <[email protected]> Co-authored-by: arar <[email protected]> Co-authored-by: andartadev1 <[email protected]> Co-authored-by: wulimao49 <[email protected]> Co-authored-by: wulimaomao <[email protected]> Co-authored-by: Shagun Sharma <[email protected]> Co-authored-by: i_nicck <[email protected]> Co-authored-by: luis angel lopez huari <[email protected]> Co-authored-by: doki- <[email protected]> Co-authored-by: Anshuman Singh Rathore <[email protected]> Co-authored-by: Igor Moraes <[email protected]> Co-authored-by: Dmytro Klymenko <[email protected]>
Closes #5620
📝 Description
The modals were not closing with animation because they were all closing simultaneously. I added a slight delay between each modal's closing to allow the animations to play smoothly.
Screen.Recording.2025-08-26.at.9.14.23.AM.mov
Summary by CodeRabbit