@sanity/ui 2.15.9 → 2.15.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -2594,7 +2594,6 @@ export declare const TooltipDelayGroupContext: Context<TooltipDelayGroupContextV
2594
2594
  * @beta
2595
2595
  */
2596
2596
  export declare interface TooltipDelayGroupContextValue {
2597
- isGroupActive: boolean
2598
2597
  setIsGroupActive: (nextState: React.SetStateAction<boolean>, delay?: number | undefined) => void
2599
2598
  setOpenTooltipId: (nextId: string | null, delay?: number | undefined) => void
2600
2599
  openDelay: number
package/dist/index.d.ts CHANGED
@@ -2594,7 +2594,6 @@ export declare const TooltipDelayGroupContext: Context<TooltipDelayGroupContextV
2594
2594
  * @beta
2595
2595
  */
2596
2596
  export declare interface TooltipDelayGroupContextValue {
2597
- isGroupActive: boolean
2598
2597
  setIsGroupActive: (nextState: React.SetStateAction<boolean>, delay?: number | undefined) => void
2599
2598
  setOpenTooltipId: (nextId: string | null, delay?: number | undefined) => void
2600
2599
  openDelay: number
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/ui",
3
- "version": "2.15.9",
3
+ "version": "2.15.11",
4
4
  "keywords": [
5
5
  "sanity",
6
6
  "ui",
@@ -119,7 +119,7 @@
119
119
  "@sanity/color": "^3.0.6",
120
120
  "@sanity/icons": "^3.7.0",
121
121
  "csstype": "^3.1.3",
122
- "framer-motion": "^12.5.0",
122
+ "framer-motion": "^12.6.2",
123
123
  "react-compiler-runtime": "19.0.0-beta-e993439-20250328",
124
124
  "react-refractor": "^2.2.0",
125
125
  "use-effect-event": "^1.0.2"
@@ -128,28 +128,28 @@
128
128
  "@babel/core": "^7.26.10",
129
129
  "@babel/preset-env": "^7.26.9",
130
130
  "@babel/preset-react": "^7.26.3",
131
- "@babel/preset-typescript": "^7.26.0",
131
+ "@babel/preset-typescript": "^7.27.0",
132
132
  "@commitlint/cli": "^19.8.0",
133
133
  "@commitlint/config-conventional": "^19.8.0",
134
134
  "@eslint/js": "^9.23.0",
135
- "@sanity/pkg-utils": "^7.1.1",
135
+ "@sanity/pkg-utils": "^7.2.2",
136
136
  "@sanity/prettier-config": "^1.0.3",
137
137
  "@sanity/semantic-release-preset": "^5.0.0",
138
138
  "@sanity/ui-workshop": "^2.0.33",
139
- "@storybook/addon-a11y": "^8.6.8",
140
- "@storybook/addon-docs": "^8.6.8",
141
- "@storybook/addon-essentials": "^8.6.8",
142
- "@storybook/addon-interactions": "^8.6.8",
143
- "@storybook/addon-links": "^8.6.8",
144
- "@storybook/addon-mdx-gfm": "^8.6.8",
145
- "@storybook/addon-storysource": "^8.6.8",
146
- "@storybook/addon-themes": "^8.6.8",
147
- "@storybook/blocks": "^8.6.8",
148
- "@storybook/manager-api": "^8.6.8",
149
- "@storybook/react": "^8.6.8",
150
- "@storybook/react-vite": "^8.6.8",
151
- "@storybook/test": "^8.6.8",
152
- "@storybook/theming": "^8.6.8",
139
+ "@storybook/addon-a11y": "^8.6.11",
140
+ "@storybook/addon-docs": "^8.6.11",
141
+ "@storybook/addon-essentials": "^8.6.11",
142
+ "@storybook/addon-interactions": "^8.6.11",
143
+ "@storybook/addon-links": "^8.6.11",
144
+ "@storybook/addon-mdx-gfm": "^8.6.11",
145
+ "@storybook/addon-storysource": "^8.6.11",
146
+ "@storybook/addon-themes": "^8.6.11",
147
+ "@storybook/blocks": "^8.6.11",
148
+ "@storybook/manager-api": "^8.6.11",
149
+ "@storybook/react": "^8.6.11",
150
+ "@storybook/react-vite": "^8.6.11",
151
+ "@storybook/test": "^8.6.11",
152
+ "@storybook/theming": "^8.6.11",
153
153
  "@testing-library/dom": "^10.4.0",
154
154
  "@testing-library/jest-dom": "^6.6.3",
155
155
  "@testing-library/react": "^16.2.0",
@@ -190,14 +190,14 @@
190
190
  "module-alias": "^2.2.3",
191
191
  "npm-run-all2": "^5.0.2",
192
192
  "prettier": "^3.5.3",
193
- "react": "^19.0.0",
194
- "react-dom": "^19.0.0",
195
- "react-is": "^19.0.0",
193
+ "react": "^19.1.0",
194
+ "react-dom": "^19.1.0",
195
+ "react-is": "^19.1.0",
196
196
  "refractor": "^4.9.0",
197
197
  "rimraf": "^5.0.5",
198
198
  "semantic-release": "^24.2.3",
199
199
  "start-server-and-test": "^2.0.11",
200
- "storybook": "^8.6.8",
200
+ "storybook": "^8.6.11",
201
201
  "styled-components": "^6.1.16",
202
202
  "tsconfig-paths": "^4.2.0",
203
203
  "typescript": "5.8.2",
@@ -184,6 +184,7 @@ export const Tooltip = forwardRef(function Tooltip(
184
184
  const tooltipId = useId()
185
185
  const [isOpen, setIsOpen] = useDelayedState(false)
186
186
  const delayGroupContext = useTooltipDelayGroup()
187
+ const {setIsGroupActive, setOpenTooltipId} = delayGroupContext || {}
187
188
  const showTooltip = isOpen || delayGroupContext?.openTooltipId === tooltipId
188
189
 
189
190
  const isInsideGroup = delayGroupContext !== null
@@ -200,15 +201,15 @@ export const Tooltip = forwardRef(function Tooltip(
200
201
  if (open) {
201
202
  const groupedOpenDelay = immediate ? 0 : openDelay
202
203
 
203
- delayGroupContext.setIsGroupActive(open, groupedOpenDelay)
204
- delayGroupContext.setOpenTooltipId(tooltipId, groupedOpenDelay)
204
+ setIsGroupActive?.(open, groupedOpenDelay)
205
+ setOpenTooltipId?.(tooltipId, groupedOpenDelay)
205
206
  } else {
206
207
  const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.
207
208
  const groupDeactivateDelay =
208
209
  closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay
209
210
 
210
- delayGroupContext.setIsGroupActive(open, groupDeactivateDelay)
211
- delayGroupContext.setOpenTooltipId(null, immediate ? 0 : closeDelay)
211
+ setIsGroupActive?.(open, groupDeactivateDelay)
212
+ setOpenTooltipId?.(null, immediate ? 0 : closeDelay)
212
213
  }
213
214
  } else {
214
215
  const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay
@@ -217,7 +218,15 @@ export const Tooltip = forwardRef(function Tooltip(
217
218
  setIsOpen(open, standaloneDelay)
218
219
  }
219
220
  },
220
- [isInsideGroup, delayGroupContext, openDelay, tooltipId, closeDelay, setIsOpen],
221
+ [
222
+ isInsideGroup,
223
+ openDelay,
224
+ setIsGroupActive,
225
+ setOpenTooltipId,
226
+ tooltipId,
227
+ closeDelay,
228
+ setIsOpen,
229
+ ],
221
230
  )
222
231
 
223
232
  const handleBlur = useCallback(
@@ -264,7 +273,7 @@ export const Tooltip = forwardRef(function Tooltip(
264
273
  )
265
274
 
266
275
  // Handle closing the tooltip when the mouse leaves the referenceElement
267
- useCloseOnMouseLeave({handleIsOpenChange, referenceElement, showTooltip})
276
+ useCloseOnMouseLeave({handleIsOpenChange, referenceElement, showTooltip, isInsideGroup})
268
277
 
269
278
  // Close when `disabled` changes to `true`
270
279
  useEffect(() => {
@@ -416,10 +425,12 @@ function useCloseOnMouseLeave({
416
425
  handleIsOpenChange,
417
426
  referenceElement,
418
427
  showTooltip,
428
+ isInsideGroup,
419
429
  }: {
420
430
  handleIsOpenChange: (open: boolean, immediate?: boolean) => void
421
431
  referenceElement: HTMLElement | null
422
432
  showTooltip: boolean
433
+ isInsideGroup: boolean
423
434
  }) {
424
435
  // Since we don't want the `mouseevent` events to be attached and removed if the `referenceElement` is changed
425
436
  // we use a "effect event" (https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)
@@ -441,7 +452,7 @@ function useCloseOnMouseLeave({
441
452
  // necessary, because the tooltip might not always close as it should (e.g. when clicking
442
453
  // the reference element triggers a CPU-heavy operation.)
443
454
  useEffect(() => {
444
- if (!showTooltip) return
455
+ if (!showTooltip || isInsideGroup) return
445
456
 
446
457
  const handleMouseMove = (event: MouseEvent) => {
447
458
  onMouseMove(event.target, () => window.removeEventListener('mousemove', handleMouseMove))
@@ -450,5 +461,5 @@ function useCloseOnMouseLeave({
450
461
  window.addEventListener('mousemove', handleMouseMove)
451
462
 
452
463
  return () => window.removeEventListener('mousemove', handleMouseMove)
453
- }, [showTooltip])
464
+ }, [isInsideGroup, showTooltip])
454
465
  }
@@ -39,7 +39,6 @@ export function TooltipDelayGroupProvider(
39
39
 
40
40
  const value: TooltipDelayGroupContextValue = useMemo(
41
41
  () => ({
42
- isGroupActive: isGroupActive,
43
42
  setIsGroupActive: setIsGroupActive,
44
43
  openTooltipId: openTooltipId,
45
44
  setOpenTooltipId: setOpenTooltipId,
@@ -2,7 +2,6 @@
2
2
  * @beta
3
3
  */
4
4
  export interface TooltipDelayGroupContextValue {
5
- isGroupActive: boolean
6
5
  setIsGroupActive: (nextState: React.SetStateAction<boolean>, delay?: number | undefined) => void
7
6
  setOpenTooltipId: (nextId: string | null, delay?: number | undefined) => void
8
7
  openDelay: number