@uniformdev/design-system 20.72.3 → 20.72.4-alpha.13

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/esm/index.js CHANGED
@@ -3158,6 +3158,13 @@ function useShortcut({
3158
3158
  import { Tooltip as BaseUITooltip } from "@base-ui/react/tooltip";
3159
3159
  import { useState as useState3 } from "react";
3160
3160
 
3161
+ // src/components/Modal/ModalPortalContext.ts
3162
+ import { createContext as createContext2, useContext as useContext2 } from "react";
3163
+ var ModalPortalContext = createContext2(null);
3164
+ function useModalPortalContainer() {
3165
+ return useContext2(ModalPortalContext);
3166
+ }
3167
+
3161
3168
  // src/components/parsePlacement.ts
3162
3169
  function parsePlacement(placement) {
3163
3170
  const [side, alignment] = placement.split("-");
@@ -3252,6 +3259,7 @@ function Tooltip({
3252
3259
  ...popupProps
3253
3260
  }) {
3254
3261
  const [inlineContainer, setInlineContainer] = useState3(null);
3262
+ const modalContainer = useModalPortalContainer();
3255
3263
  if (!title) {
3256
3264
  return children;
3257
3265
  }
@@ -3269,7 +3277,7 @@ function Tooltip({
3269
3277
  style: { position: "absolute", width: 0, height: 0, overflow: "visible" }
3270
3278
  }
3271
3279
  ),
3272
- /* @__PURE__ */ jsx15(BaseUITooltip.Portal, { container: withoutPortal ? inlineContainer : void 0, children: positionerContent })
3280
+ /* @__PURE__ */ jsx15(BaseUITooltip.Portal, { container: withoutPortal ? inlineContainer : modalContainer != null ? modalContainer : void 0, children: positionerContent })
3273
3281
  ] });
3274
3282
  }
3275
3283
 
@@ -4943,13 +4951,6 @@ import { Menu as BaseUIMenu } from "@base-ui/react/menu";
4943
4951
  import * as React8 from "react";
4944
4952
  import { createContext as createContext3, useContext as useContext3, useState as useState5 } from "react";
4945
4953
 
4946
- // src/components/Modal/ModalPortalContext.ts
4947
- import { createContext as createContext2, useContext as useContext2 } from "react";
4948
- var ModalPortalContext = createContext2(null);
4949
- function useModalPortalContainer() {
4950
- return useContext2(ModalPortalContext);
4951
- }
4952
-
4953
4954
  // src/components/Menu/filterMenuSeparators.ts
4954
4955
  import React7, { isValidElement as isValidElement2 } from "react";
4955
4956
 
@@ -13284,6 +13285,20 @@ var ObjectGridItemSubtitle = css85`
13284
13285
  text-overflow: ellipsis;
13285
13286
  max-width: 100%;
13286
13287
  `;
13288
+ var ObjectGridItemRevealMenu = css85`
13289
+ display: inline-flex;
13290
+ opacity: 0;
13291
+ transition: opacity var(--duration-fast) var(--timing-ease-out);
13292
+
13293
+ [data-object-grid-item]:hover &,
13294
+ [data-object-grid-item]:focus-within &,
13295
+ &:hover,
13296
+ &:focus-within,
13297
+ &:has([aria-expanded='true']),
13298
+ &:has([data-popup-open]) {
13299
+ opacity: 1;
13300
+ }
13301
+ `;
13287
13302
 
13288
13303
  // src/components/Objects/ObjectGridItem.tsx
13289
13304
  import { jsx as jsx112, jsxs as jsxs77 } from "@emotion/react/jsx-runtime";
@@ -13295,6 +13310,7 @@ var ObjectGridItem2 = ({
13295
13310
  isSelected,
13296
13311
  children,
13297
13312
  menuTestId,
13313
+ revealMenuOnHover,
13298
13314
  ...props
13299
13315
  }) => {
13300
13316
  const hasOnClick = props.onClick;
@@ -13331,14 +13347,14 @@ var ObjectGridItem2 = ({
13331
13347
  onClick: hasOnClick ? onStopPropagation : void 0,
13332
13348
  children: [
13333
13349
  rightSlot,
13334
- menuItems ? /* @__PURE__ */ jsx112(
13350
+ menuItems ? /* @__PURE__ */ jsx112("span", { css: revealMenuOnHover ? ObjectGridItemRevealMenu : void 0, children: /* @__PURE__ */ jsx112(
13335
13351
  Menu,
13336
13352
  {
13337
13353
  menuTrigger: /* @__PURE__ */ jsx112(MenuThreeDots, { "data-testid": menuTestId != null ? menuTestId : "object-grid-item-menu-btn" }),
13338
13354
  placement: "bottom-end",
13339
13355
  children: menuItems
13340
13356
  }
13341
- ) : null
13357
+ ) }) : null
13342
13358
  ]
13343
13359
  }
13344
13360
  ) : null
package/dist/index.d.mts CHANGED
@@ -3715,6 +3715,9 @@ type ObjectGridItemProps = Omit<ObjectItemProps, 'leftSlot'> & {
3715
3715
  * @default 'object-grid-item-menu-btn'
3716
3716
  */
3717
3717
  menuTestId?: string;
3718
+ /** When true, the context menu is hidden at rest and revealed on card
3719
+ * hover/focus (and while the menu is open), matching the favorite star. */
3720
+ revealMenuOnHover?: boolean;
3718
3721
  } & HTMLAttributes<HTMLDivElement>;
3719
3722
  /**
3720
3723
  * A card-style grid item for displaying an object with cover media, heading, subtitle, and optional context menu.
@@ -3734,7 +3737,7 @@ type ObjectGridItemProps = Omit<ObjectItemProps, 'leftSlot'> & {
3734
3737
  * />
3735
3738
  * ```
3736
3739
  */
3737
- declare const ObjectGridItem: ({ header, cover, rightSlot, menuItems, isSelected, children, menuTestId, ...props }: ObjectGridItemProps) => _emotion_react_jsx_runtime.JSX.Element;
3740
+ declare const ObjectGridItem: ({ header, cover, rightSlot, menuItems, isSelected, children, menuTestId, revealMenuOnHover, ...props }: ObjectGridItemProps) => _emotion_react_jsx_runtime.JSX.Element;
3738
3741
 
3739
3742
  /**
3740
3743
  * Props for {@link ObjectGridItemCardCover}.
package/dist/index.d.ts CHANGED
@@ -3715,6 +3715,9 @@ type ObjectGridItemProps = Omit<ObjectItemProps, 'leftSlot'> & {
3715
3715
  * @default 'object-grid-item-menu-btn'
3716
3716
  */
3717
3717
  menuTestId?: string;
3718
+ /** When true, the context menu is hidden at rest and revealed on card
3719
+ * hover/focus (and while the menu is open), matching the favorite star. */
3720
+ revealMenuOnHover?: boolean;
3718
3721
  } & HTMLAttributes<HTMLDivElement>;
3719
3722
  /**
3720
3723
  * A card-style grid item for displaying an object with cover media, heading, subtitle, and optional context menu.
@@ -3734,7 +3737,7 @@ type ObjectGridItemProps = Omit<ObjectItemProps, 'leftSlot'> & {
3734
3737
  * />
3735
3738
  * ```
3736
3739
  */
3737
- declare const ObjectGridItem: ({ header, cover, rightSlot, menuItems, isSelected, children, menuTestId, ...props }: ObjectGridItemProps) => _emotion_react_jsx_runtime.JSX.Element;
3740
+ declare const ObjectGridItem: ({ header, cover, rightSlot, menuItems, isSelected, children, menuTestId, revealMenuOnHover, ...props }: ObjectGridItemProps) => _emotion_react_jsx_runtime.JSX.Element;
3738
3741
 
3739
3742
  /**
3740
3743
  * Props for {@link ObjectGridItemCardCover}.
package/dist/index.js CHANGED
@@ -3021,7 +3021,7 @@ var buttonSoftAccentPrimary = import_react12.css`
3021
3021
 
3022
3022
  // src/components/Input/styles/Inputs.styles.ts
3023
3023
  init_emotion_jsx_shim();
3024
- var import_react22 = require("@emotion/react");
3024
+ var import_react23 = require("@emotion/react");
3025
3025
 
3026
3026
  // src/components/Button/Button.tsx
3027
3027
  init_emotion_jsx_shim();
@@ -4919,7 +4919,15 @@ function useShortcut({
4919
4919
  // src/components/Tooltip/Tooltip.tsx
4920
4920
  init_emotion_jsx_shim();
4921
4921
  var import_tooltip = require("@base-ui/react/tooltip");
4922
- var import_react20 = require("react");
4922
+ var import_react21 = require("react");
4923
+
4924
+ // src/components/Modal/ModalPortalContext.ts
4925
+ init_emotion_jsx_shim();
4926
+ var import_react19 = require("react");
4927
+ var ModalPortalContext = (0, import_react19.createContext)(null);
4928
+ function useModalPortalContainer() {
4929
+ return (0, import_react19.useContext)(ModalPortalContext);
4930
+ }
4923
4931
 
4924
4932
  // src/components/parsePlacement.ts
4925
4933
  init_emotion_jsx_shim();
@@ -4933,11 +4941,11 @@ function parsePlacement(placement) {
4933
4941
 
4934
4942
  // src/components/Tooltip/Tooltip.styles.ts
4935
4943
  init_emotion_jsx_shim();
4936
- var import_react19 = require("@emotion/react");
4937
- var TooltipPositionerStyles = import_react19.css`
4944
+ var import_react20 = require("@emotion/react");
4945
+ var TooltipPositionerStyles = import_react20.css`
4938
4946
  z-index: var(--z-tooltip);
4939
4947
  `;
4940
- var TooltipContainer = import_react19.css`
4948
+ var TooltipContainer = import_react20.css`
4941
4949
  border: 2px solid var(--gray-300);
4942
4950
  border-radius: var(--rounded-base);
4943
4951
  padding: var(--spacing-xs) var(--spacing-sm);
@@ -4946,7 +4954,7 @@ var TooltipContainer = import_react19.css`
4946
4954
  background: var(--white);
4947
4955
  position: relative;
4948
4956
  `;
4949
- var TooltipArrowStyles = import_react19.css`
4957
+ var TooltipArrowStyles = import_react20.css`
4950
4958
  display: flex;
4951
4959
 
4952
4960
  &[data-side='top'] {
@@ -4969,13 +4977,13 @@ var TooltipArrowStyles = import_react19.css`
4969
4977
  rotate: -90deg;
4970
4978
  }
4971
4979
  `;
4972
- var TooltipArrowFill = import_react19.css`
4980
+ var TooltipArrowFill = import_react20.css`
4973
4981
  fill: var(--gray-300);
4974
4982
  `;
4975
- var TooltipArrowOuterStroke = import_react19.css`
4983
+ var TooltipArrowOuterStroke = import_react20.css`
4976
4984
  fill: var(--gray-300);
4977
4985
  `;
4978
- var TooltipArrowInnerStroke = import_react19.css`
4986
+ var TooltipArrowInnerStroke = import_react20.css`
4979
4987
  fill: var(--gray-300);
4980
4988
  `;
4981
4989
 
@@ -5016,7 +5024,8 @@ function Tooltip({
5016
5024
  gutter = 10,
5017
5025
  ...popupProps
5018
5026
  }) {
5019
- const [inlineContainer, setInlineContainer] = (0, import_react20.useState)(null);
5027
+ const [inlineContainer, setInlineContainer] = (0, import_react21.useState)(null);
5028
+ const modalContainer = useModalPortalContainer();
5020
5029
  if (!title) {
5021
5030
  return children;
5022
5031
  }
@@ -5034,7 +5043,7 @@ function Tooltip({
5034
5043
  style: { position: "absolute", width: 0, height: 0, overflow: "visible" }
5035
5044
  }
5036
5045
  ),
5037
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_tooltip.Tooltip.Portal, { container: withoutPortal ? inlineContainer : void 0, children: positionerContent })
5046
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_tooltip.Tooltip.Portal, { container: withoutPortal ? inlineContainer : modalContainer != null ? modalContainer : void 0, children: positionerContent })
5038
5047
  ] });
5039
5048
  }
5040
5049
 
@@ -5142,8 +5151,8 @@ var React6 = __toESM(require("react"));
5142
5151
 
5143
5152
  // src/components/Button/LinkButton.styles.ts
5144
5153
  init_emotion_jsx_shim();
5145
- var import_react21 = require("@emotion/react");
5146
- var linkButton = import_react21.css`
5154
+ var import_react22 = require("@emotion/react");
5155
+ var linkButton = import_react22.css`
5147
5156
  background: transparent;
5148
5157
  border: none;
5149
5158
  padding: 0;
@@ -5161,13 +5170,13 @@ var linkButton = import_react21.css`
5161
5170
  outline: none;
5162
5171
  }
5163
5172
  `;
5164
- var linkButtonDisabled = import_react21.css`
5173
+ var linkButtonDisabled = import_react22.css`
5165
5174
  opacity: var(--opacity-50);
5166
5175
  filter: saturate(0.5);
5167
5176
  cursor: default;
5168
5177
  pointer-events: none;
5169
5178
  `;
5170
- var linkButtonTruncated = import_react21.css`
5179
+ var linkButtonTruncated = import_react22.css`
5171
5180
  display: block;
5172
5181
  width: 100%;
5173
5182
  overflow: hidden;
@@ -5197,15 +5206,15 @@ var LinkButton = React6.forwardRef(
5197
5206
  );
5198
5207
 
5199
5208
  // src/components/Input/styles/Inputs.styles.ts
5200
- var inputContainer = import_react22.css`
5209
+ var inputContainer = import_react23.css`
5201
5210
  position: relative;
5202
5211
  `;
5203
- var labelText = import_react22.css`
5212
+ var labelText = import_react23.css`
5204
5213
  display: flex;
5205
5214
  margin: 0 0 var(--spacing-xs);
5206
5215
  align-items: center;
5207
5216
  `;
5208
- var input = (whiteSpaceWrap) => import_react22.css`
5217
+ var input = (whiteSpaceWrap) => import_react23.css`
5209
5218
  --input-padding: 12px var(--spacing-base) 12px var(--spacing-sm);
5210
5219
  appearance: none;
5211
5220
  background-color: var(--white);
@@ -5290,7 +5299,7 @@ var input = (whiteSpaceWrap) => import_react22.css`
5290
5299
  }
5291
5300
  }
5292
5301
  `;
5293
- var inputError = import_react22.css`
5302
+ var inputError = import_react23.css`
5294
5303
  border-color: var(--action-destructive-default);
5295
5304
  box-shadow: var(--elevation-100);
5296
5305
 
@@ -5298,7 +5307,7 @@ var inputError = import_react22.css`
5298
5307
  border-color: var(--action-destructive-hover);
5299
5308
  }
5300
5309
  `;
5301
- var inputPrefixGroup = import_react22.css`
5310
+ var inputPrefixGroup = import_react23.css`
5302
5311
  align-items: center;
5303
5312
  background-color: var(--white);
5304
5313
  border: 1px solid var(--gray-200);
@@ -5330,7 +5339,7 @@ var inputPrefixGroup = import_react22.css`
5330
5339
  color: var(--gray-300);
5331
5340
  }
5332
5341
  `;
5333
- var inputPrefixGroupError = import_react22.css`
5342
+ var inputPrefixGroupError = import_react23.css`
5334
5343
  border-color: var(--action-destructive-default);
5335
5344
  box-shadow: var(--elevation-100);
5336
5345
 
@@ -5338,7 +5347,7 @@ var inputPrefixGroupError = import_react22.css`
5338
5347
  border-color: var(--action-destructive-hover);
5339
5348
  }
5340
5349
  `;
5341
- var inputPrefixSlot = import_react22.css`
5350
+ var inputPrefixSlot = import_react23.css`
5342
5351
  color: var(--gray-300);
5343
5352
  flex: none;
5344
5353
  font-size: 1rem;
@@ -5346,7 +5355,7 @@ var inputPrefixSlot = import_react22.css`
5346
5355
  pointer-events: none;
5347
5356
  white-space: nowrap;
5348
5357
  `;
5349
- var inputInPrefixGroup = import_react22.css`
5358
+ var inputInPrefixGroup = import_react23.css`
5350
5359
  appearance: none;
5351
5360
  background: transparent;
5352
5361
  border: 0;
@@ -5376,19 +5385,19 @@ var inputInPrefixGroup = import_react22.css`
5376
5385
  color: var(--gray-300);
5377
5386
  }
5378
5387
  `;
5379
- var inputInPrefixGroupWithIcon = import_react22.css`
5388
+ var inputInPrefixGroupWithIcon = import_react23.css`
5380
5389
  padding-right: var(--spacing-2xl);
5381
5390
  `;
5382
- var inputIcon = import_react22.css`
5391
+ var inputIcon = import_react23.css`
5383
5392
  align-items: center;
5384
5393
  display: flex;
5385
5394
  position: absolute;
5386
5395
  inset: 0 var(--spacing-base) 0 auto;
5387
5396
  `;
5388
- var inputWithIcon = import_react22.css`
5397
+ var inputWithIcon = import_react23.css`
5389
5398
  padding-right: var(--spacing-2xl);
5390
5399
  `;
5391
- var inputSelect = import_react22.css`
5400
+ var inputSelect = import_react23.css`
5392
5401
  background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%0A%3E%3Cpath d='M6.34317 7.75732L4.92896 9.17154L12 16.2426L19.0711 9.17157L17.6569 7.75735L12 13.4142L6.34317 7.75732Z' fill='currentColor' /%3E%3C/svg%3E");
5393
5402
  background-position: right var(--spacing-sm) center;
5394
5403
  background-repeat: no-repeat;
@@ -5399,13 +5408,13 @@ var inputSelect = import_react22.css`
5399
5408
  color: var(--gray-300);
5400
5409
  }
5401
5410
  `;
5402
- var inputSearchCloseBtn = import_react22.css`
5411
+ var inputSearchCloseBtn = import_react23.css`
5403
5412
  background: none;
5404
5413
  border: none;
5405
5414
  padding: 0;
5406
5415
  pointer-events: all;
5407
5416
  `;
5408
- var inputToggleLabel = import_react22.css`
5417
+ var inputToggleLabel = import_react23.css`
5409
5418
  align-items: flex-start;
5410
5419
  cursor: pointer;
5411
5420
  display: inline-flex;
@@ -5416,7 +5425,7 @@ var inputToggleLabel = import_react22.css`
5416
5425
  position: relative;
5417
5426
  min-height: var(--spacing-md);
5418
5427
  `;
5419
- var toggleInput = import_react22.css`
5428
+ var toggleInput = import_react23.css`
5420
5429
  appearance: none;
5421
5430
  border: 1px solid var(--gray-200);
5422
5431
  background: var(--white);
@@ -5462,7 +5471,7 @@ var toggleInput = import_react22.css`
5462
5471
  no-repeat center center;
5463
5472
  }
5464
5473
  `;
5465
- var inlineLabel = import_react22.css`
5474
+ var inlineLabel = import_react23.css`
5466
5475
  padding-left: var(--spacing-lg);
5467
5476
 
5468
5477
  > a {
@@ -5473,20 +5482,20 @@ var inlineLabel = import_react22.css`
5473
5482
  }
5474
5483
  }
5475
5484
  `;
5476
- var labelNormal = import_react22.css`
5485
+ var labelNormal = import_react23.css`
5477
5486
  font-weight: var(--fw-regular);
5478
5487
  `;
5479
- var labelMedium = import_react22.css`
5488
+ var labelMedium = import_react23.css`
5480
5489
  font-weight: var(--fw-medium);
5481
5490
  `;
5482
- var labelBold = import_react22.css`
5491
+ var labelBold = import_react23.css`
5483
5492
  font-weight: var(--fw-bold);
5484
5493
  `;
5485
- var inputDisabled = import_react22.css`
5494
+ var inputDisabled = import_react23.css`
5486
5495
  cursor: not-allowed;
5487
5496
  color: var(--gray-400);
5488
5497
  `;
5489
- var inputToggleMessageContainer = import_react22.css`
5498
+ var inputToggleMessageContainer = import_react23.css`
5490
5499
  display: flex;
5491
5500
  flex-direction: column;
5492
5501
  flex-basis: 100%;
@@ -5494,11 +5503,11 @@ var inputToggleMessageContainer = import_react22.css`
5494
5503
  margin-top: -0.5rem;
5495
5504
  line-height: 1.15;
5496
5505
  `;
5497
- var textarea = import_react22.css`
5506
+ var textarea = import_react23.css`
5498
5507
  ${input("wrap")};
5499
5508
  display: block;
5500
5509
  `;
5501
- var inputSelectCompact = import_react22.css`
5510
+ var inputSelectCompact = import_react23.css`
5502
5511
  font-size: var(--fs-xs);
5503
5512
  padding: var(--spacing-2xs) var(--spacing-md) var(--spacing-2xs) var(--spacing-xs);
5504
5513
  border-color: var(--gray-200);
@@ -5508,8 +5517,8 @@ var inputSelectCompact = import_react22.css`
5508
5517
 
5509
5518
  // src/styles/Accessibility.styles.ts
5510
5519
  init_emotion_jsx_shim();
5511
- var import_react23 = require("@emotion/react");
5512
- var accessibleHidden = import_react23.css`
5520
+ var import_react24 = require("@emotion/react");
5521
+ var accessibleHidden = import_react24.css`
5513
5522
  clip: rect(0, 0, 0, 0);
5514
5523
  position: absolute;
5515
5524
  width: 1px;
@@ -5519,17 +5528,17 @@ var accessibleHidden = import_react23.css`
5519
5528
 
5520
5529
  // src/hooks/useImageLoadFallback.ts
5521
5530
  init_emotion_jsx_shim();
5522
- var import_react24 = require("react");
5531
+ var import_react25 = require("react");
5523
5532
  function useImageLoadFallback({
5524
5533
  src,
5525
5534
  srcSet,
5526
5535
  errorFallbackSrc,
5527
5536
  logContext
5528
5537
  }) {
5529
- const [currentSrc, setCurrentSrc] = (0, import_react24.useState)(src);
5530
- const [currentSrcSet, setCurrentSrcSet] = (0, import_react24.useState)(srcSet);
5531
- const [usedFallback, setUsedFallback] = (0, import_react24.useState)(false);
5532
- (0, import_react24.useEffect)(() => {
5538
+ const [currentSrc, setCurrentSrc] = (0, import_react25.useState)(src);
5539
+ const [currentSrcSet, setCurrentSrcSet] = (0, import_react25.useState)(srcSet);
5540
+ const [usedFallback, setUsedFallback] = (0, import_react25.useState)(false);
5541
+ (0, import_react25.useEffect)(() => {
5533
5542
  setCurrentSrc(src);
5534
5543
  setCurrentSrcSet(srcSet);
5535
5544
  setUsedFallback(false);
@@ -5551,8 +5560,8 @@ function useImageLoadFallback({
5551
5560
 
5552
5561
  // src/styles/Animations.styles.ts
5553
5562
  init_emotion_jsx_shim();
5554
- var import_react25 = require("@emotion/react");
5555
- var growSubtle = import_react25.keyframes`
5563
+ var import_react26 = require("@emotion/react");
5564
+ var growSubtle = import_react26.keyframes`
5556
5565
  0%,
5557
5566
  100% {
5558
5567
  transform: scale(1);
@@ -5563,7 +5572,7 @@ var growSubtle = import_react25.keyframes`
5563
5572
  opacity: 1;
5564
5573
  }
5565
5574
  `;
5566
- var fadeInBottom = import_react25.keyframes`
5575
+ var fadeInBottom = import_react26.keyframes`
5567
5576
  0% {
5568
5577
  opacity: 0;
5569
5578
  transform: translateY(10px);
@@ -5573,7 +5582,7 @@ var fadeInBottom = import_react25.keyframes`
5573
5582
  transform: translateY(0);
5574
5583
  }
5575
5584
  `;
5576
- var fadeInTop = import_react25.keyframes`
5585
+ var fadeInTop = import_react26.keyframes`
5577
5586
  0% {
5578
5587
  opacity: 0;
5579
5588
  transform: translateY(-10px);
@@ -5583,7 +5592,7 @@ var fadeInTop = import_react25.keyframes`
5583
5592
  transform: translateY(0);
5584
5593
  }
5585
5594
  `;
5586
- var fadeOutBottom = import_react25.keyframes`
5595
+ var fadeOutBottom = import_react26.keyframes`
5587
5596
  0% {
5588
5597
  opacity: 1;
5589
5598
  transform: translateY(0);
@@ -5593,7 +5602,7 @@ var fadeOutBottom = import_react25.keyframes`
5593
5602
  transform: translateY(10px);
5594
5603
  }
5595
5604
  `;
5596
- var fadeIn = import_react25.keyframes`
5605
+ var fadeIn = import_react26.keyframes`
5597
5606
  0% {
5598
5607
  opacity: 0;
5599
5608
  }
@@ -5601,11 +5610,11 @@ var fadeIn = import_react25.keyframes`
5601
5610
  opacity: 1;
5602
5611
  }
5603
5612
  `;
5604
- var ripple = import_react25.keyframes`
5613
+ var ripple = import_react26.keyframes`
5605
5614
  to {
5606
5615
  transform: scale(4);
5607
5616
  }`;
5608
- var skeletonLoading = import_react25.keyframes`
5617
+ var skeletonLoading = import_react26.keyframes`
5609
5618
  0% {
5610
5619
  background-color: var(--gray-100);
5611
5620
  }
@@ -5613,7 +5622,7 @@ var skeletonLoading = import_react25.keyframes`
5613
5622
  background-color: var(--gray-200);
5614
5623
  }
5615
5624
  `;
5616
- var fadeInLtr = import_react25.keyframes`
5625
+ var fadeInLtr = import_react26.keyframes`
5617
5626
  from {
5618
5627
  opacity: 0;
5619
5628
  transform: translateX(-10px);
@@ -5623,7 +5632,7 @@ to {
5623
5632
  transform: translateX(0);
5624
5633
  }
5625
5634
  `;
5626
- var fadeInRtl = import_react25.keyframes`
5635
+ var fadeInRtl = import_react26.keyframes`
5627
5636
  from {
5628
5637
  opacity: 0;
5629
5638
  transform: translateX(10px);
@@ -5633,7 +5642,7 @@ to {
5633
5642
  transform: translateX(0);
5634
5643
  }
5635
5644
  `;
5636
- var slideInTtb = import_react25.keyframes`
5645
+ var slideInTtb = import_react26.keyframes`
5637
5646
  from {
5638
5647
  transform: translateY(-100%);
5639
5648
  }
@@ -5641,7 +5650,7 @@ to {
5641
5650
  transform: translateY(0);
5642
5651
  }
5643
5652
  `;
5644
- var slideInRtl = import_react25.keyframes`
5653
+ var slideInRtl = import_react26.keyframes`
5645
5654
  from {
5646
5655
  transform: translateX(100%);
5647
5656
  }
@@ -5649,7 +5658,7 @@ to {
5649
5658
  transform: translateX(0);
5650
5659
  }
5651
5660
  `;
5652
- var spin2 = import_react25.keyframes`
5661
+ var spin2 = import_react26.keyframes`
5653
5662
  from {
5654
5663
  transform: rotateZ(0deg);
5655
5664
  }
@@ -5663,8 +5672,8 @@ init_emotion_jsx_shim();
5663
5672
 
5664
5673
  // src/components/AddButton/AddButton.styles.ts
5665
5674
  init_emotion_jsx_shim();
5666
- var import_react26 = require("@emotion/react");
5667
- var addButton = import_react26.css`
5675
+ var import_react27 = require("@emotion/react");
5676
+ var addButton = import_react27.css`
5668
5677
  --max-size: clamp(2.5rem, 100vw, 3.5rem);
5669
5678
  align-items: center;
5670
5679
  box-shadow: var(--shadow-base);
@@ -5750,8 +5759,8 @@ var import_CgMathPlus2 = require("@react-icons/all-files/cg/CgMathPlus");
5750
5759
 
5751
5760
  // src/components/AddListButton/AddListButton.styles.ts
5752
5761
  init_emotion_jsx_shim();
5753
- var import_react27 = require("@emotion/react");
5754
- var AddListButtonBtn = import_react27.css`
5762
+ var import_react28 = require("@emotion/react");
5763
+ var AddListButtonBtn = import_react28.css`
5755
5764
  align-items: center;
5756
5765
  background: transparent;
5757
5766
  border: none;
@@ -5770,20 +5779,20 @@ var AddListButtonBtn = import_react27.css`
5770
5779
  box-shadow: var(--shadow-base);
5771
5780
  }
5772
5781
  `;
5773
- var AddListButtonTheme = (theme) => import_react27.css`
5782
+ var AddListButtonTheme = (theme) => import_react28.css`
5774
5783
  color: ${theme};
5775
5784
  `;
5776
- var AddListButtonBtnSmall = import_react27.css`
5785
+ var AddListButtonBtnSmall = import_react28.css`
5777
5786
  font-size: var(--fs-xs);
5778
5787
  font-weight: var(--fw-regular);
5779
5788
  `;
5780
- var AddListButtonIconMathPlus = (disabled2, theme) => import_react27.css`
5789
+ var AddListButtonIconMathPlus = (disabled2, theme) => import_react28.css`
5781
5790
  box-sizing: border-box;
5782
5791
  background: ${disabled2 ? "var(--gray-300)" : theme};
5783
5792
  color: var(--white);
5784
5793
  padding: calc(var(--spacing-xs) - 0.15rem);
5785
5794
  `;
5786
- var AddListButtonIcon = import_react27.css`
5795
+ var AddListButtonIcon = import_react28.css`
5787
5796
  border-radius: var(--rounded-full);
5788
5797
  transition: box-shadow var(--duration-fast) var(--timing-ease-out);
5789
5798
  `;
@@ -5839,7 +5848,7 @@ var import_CgProfile2 = require("@react-icons/all-files/cg/CgProfile");
5839
5848
 
5840
5849
  // src/components/Avatar/Avatar.styles.ts
5841
5850
  init_emotion_jsx_shim();
5842
- var import_react28 = require("@emotion/react");
5851
+ var import_react29 = require("@emotion/react");
5843
5852
  var AVATAR_SIZE_2XS = "1rem";
5844
5853
  var AVATAR_SIZE_XS = "1.5rem";
5845
5854
  var AVATAR_SIZE_SM = "2rem";
@@ -5848,7 +5857,7 @@ var AVATAR_SIZE_LG = "3rem";
5848
5857
  var AVATAR_SIZE_XL = "4rem";
5849
5858
  var AVATAR_SIZE_2XL = "5rem";
5850
5859
  var AVATAR_SIZE_3XL = "6rem";
5851
- var avatarStyles = import_react28.css`
5860
+ var avatarStyles = import_react29.css`
5852
5861
  display: flex;
5853
5862
  justify-content: center;
5854
5863
  align-items: center;
@@ -5862,33 +5871,33 @@ var avatarStyles = import_react28.css`
5862
5871
  font-weight: var(--fw-bold);
5863
5872
  overflow: hidden;
5864
5873
  `;
5865
- var avatarImageStyles = import_react28.css`
5874
+ var avatarImageStyles = import_react29.css`
5866
5875
  width: 100%;
5867
5876
  height: 100%;
5868
5877
  object-fit: cover;
5869
5878
  `;
5870
- var avatarSize2xsStyles = import_react28.css`
5879
+ var avatarSize2xsStyles = import_react29.css`
5871
5880
  width: ${AVATAR_SIZE_2XS};
5872
5881
  `;
5873
- var avatarSizeXsStyles = import_react28.css`
5882
+ var avatarSizeXsStyles = import_react29.css`
5874
5883
  width: ${AVATAR_SIZE_XS};
5875
5884
  `;
5876
- var avatarSizeSmStyles = import_react28.css`
5885
+ var avatarSizeSmStyles = import_react29.css`
5877
5886
  width: ${AVATAR_SIZE_SM};
5878
5887
  `;
5879
- var avatarSizeMdStyles = import_react28.css`
5888
+ var avatarSizeMdStyles = import_react29.css`
5880
5889
  width: ${AVATAR_SIZE_MD};
5881
5890
  `;
5882
- var avatarSizeLgStyles = import_react28.css`
5891
+ var avatarSizeLgStyles = import_react29.css`
5883
5892
  width: ${AVATAR_SIZE_LG};
5884
5893
  `;
5885
- var avatarSizeXlStyles = import_react28.css`
5894
+ var avatarSizeXlStyles = import_react29.css`
5886
5895
  width: ${AVATAR_SIZE_XL};
5887
5896
  `;
5888
- var avatarSize2xlStyles = import_react28.css`
5897
+ var avatarSize2xlStyles = import_react29.css`
5889
5898
  width: ${AVATAR_SIZE_2XL};
5890
5899
  `;
5891
- var avatarSize3xlStyles = import_react28.css`
5900
+ var avatarSize3xlStyles = import_react29.css`
5892
5901
  width: ${AVATAR_SIZE_3XL};
5893
5902
  `;
5894
5903
 
@@ -5926,8 +5935,8 @@ init_emotion_jsx_shim();
5926
5935
 
5927
5936
  // src/components/Avatar/AvatarGroup.styles.ts
5928
5937
  init_emotion_jsx_shim();
5929
- var import_react29 = require("@emotion/react");
5930
- var avatarGroupStyles = import_react29.css`
5938
+ var import_react30 = require("@emotion/react");
5939
+ var avatarGroupStyles = import_react30.css`
5931
5940
  display: flex;
5932
5941
  flex-wrap: nowrap;
5933
5942
 
@@ -5935,7 +5944,7 @@ var avatarGroupStyles = import_react29.css`
5935
5944
  margin-left: calc(-1 * var(--spacing-sm));
5936
5945
  }
5937
5946
  `;
5938
- var avatarGroupMaxStyles = (numberOfItemsToRender) => import_react29.css`
5947
+ var avatarGroupMaxStyles = (numberOfItemsToRender) => import_react30.css`
5939
5948
  & > *:nth-of-type(n + ${numberOfItemsToRender + 1}) {
5940
5949
  display: none;
5941
5950
  }
@@ -5997,8 +6006,8 @@ var import_CgClose3 = require("@react-icons/all-files/cg/CgClose");
5997
6006
 
5998
6007
  // src/components/Banner/Banner.styles.ts
5999
6008
  init_emotion_jsx_shim();
6000
- var import_react30 = require("@emotion/react");
6001
- var bannerStyles = import_react30.css`
6009
+ var import_react31 = require("@emotion/react");
6010
+ var bannerStyles = import_react31.css`
6002
6011
  ${functionalColors}
6003
6012
 
6004
6013
  --border-color: var(--utility-caution-icon);
@@ -6032,11 +6041,11 @@ var bannerStyles = import_react30.css`
6032
6041
  --background-color: var(--utility-success-container);
6033
6042
  }
6034
6043
  `;
6035
- var bannerAnimatedStyles = import_react30.css`
6044
+ var bannerAnimatedStyles = import_react31.css`
6036
6045
  animation: ${slideInTtb} var(--duration-xfast) ease-out;
6037
6046
  `;
6038
- var bannerContentStyles = import_react30.css``;
6039
- var bannerDismissButtonStyles = import_react30.css`
6047
+ var bannerContentStyles = import_react31.css``;
6048
+ var bannerDismissButtonStyles = import_react31.css`
6040
6049
  display: flex;
6041
6050
  align-items: center;
6042
6051
  justify-content: center;
@@ -6089,15 +6098,15 @@ init_emotion_jsx_shim();
6089
6098
 
6090
6099
  // src/components/Brand/UniformLogo.styles.ts
6091
6100
  init_emotion_jsx_shim();
6092
- var import_react31 = require("@emotion/react");
6093
- var SVG = import_react31.css`
6101
+ var import_react32 = require("@emotion/react");
6102
+ var SVG = import_react32.css`
6094
6103
  display: block;
6095
6104
  `;
6096
- var SVGLight = import_react31.css`
6105
+ var SVGLight = import_react32.css`
6097
6106
  background: transparent;
6098
6107
  color: var(--typography-base);
6099
6108
  `;
6100
- var SVGDark = import_react31.css`
6109
+ var SVGDark = import_react32.css`
6101
6110
  background: var(--gray-800);
6102
6111
  color: var(--white);
6103
6112
  `;
@@ -6310,36 +6319,36 @@ init_emotion_jsx_shim();
6310
6319
 
6311
6320
  // src/components/LoadingOverlay/LoadingOverlay.styles.ts
6312
6321
  init_emotion_jsx_shim();
6313
- var import_react32 = require("@emotion/react");
6314
- var loadingOverlayContainer = import_react32.css`
6322
+ var import_react33 = require("@emotion/react");
6323
+ var loadingOverlayContainer = import_react33.css`
6315
6324
  inset: 0;
6316
6325
  overflow: hidden;
6317
6326
  justify-content: center;
6318
6327
  padding: var(--spacing-xl);
6319
6328
  overflow-y: auto;
6320
6329
  `;
6321
- var loadingOverlayVisible = import_react32.css`
6330
+ var loadingOverlayVisible = import_react33.css`
6322
6331
  display: flex;
6323
6332
  `;
6324
- var loadingOverlayHidden = import_react32.css`
6333
+ var loadingOverlayHidden = import_react33.css`
6325
6334
  display: none;
6326
6335
  `;
6327
- var loadingOverlayBackground = (bgColor) => import_react32.css`
6336
+ var loadingOverlayBackground = (bgColor) => import_react33.css`
6328
6337
  background: ${bgColor};
6329
6338
  opacity: 0.92;
6330
6339
  position: absolute;
6331
6340
  inset: 0 0;
6332
6341
  `;
6333
- var loadingOverlayBody = import_react32.css`
6342
+ var loadingOverlayBody = import_react33.css`
6334
6343
  align-items: center;
6335
6344
  display: flex;
6336
6345
  flex-direction: column;
6337
6346
  `;
6338
- var loadingOverlayMessage = import_react32.css`
6347
+ var loadingOverlayMessage = import_react33.css`
6339
6348
  color: var(--gray-600);
6340
6349
  margin: var(--spacing-base) 0 0;
6341
6350
  `;
6342
- var loaderAnimationContainer = import_react32.css`
6351
+ var loaderAnimationContainer = import_react33.css`
6343
6352
  aspect-ratio: 1/1;
6344
6353
  position: relative;
6345
6354
  transition: filter var(--duration-xslow) ease-in-out;
@@ -6667,17 +6676,17 @@ var LoadingIcon = ({ height, width, ...props }) => {
6667
6676
 
6668
6677
  // src/components/Menu/DropdownStyleMenuTrigger.tsx
6669
6678
  init_emotion_jsx_shim();
6670
- var import_react33 = require("@emotion/react");
6679
+ var import_react34 = require("@emotion/react");
6671
6680
  var import_CgChevronDown2 = require("@react-icons/all-files/cg/CgChevronDown");
6672
- var import_react34 = require("react");
6681
+ var import_react35 = require("react");
6673
6682
  var import_jsx_runtime25 = require("@emotion/react/jsx-runtime");
6674
- var buttonStyle = (bgColor) => import_react33.css`
6683
+ var buttonStyle = (bgColor) => import_react34.css`
6675
6684
  background-color: ${bgColor};
6676
6685
  display: block;
6677
6686
  font-size: var(--fs-sm);
6678
6687
  line-height: 1.5;
6679
6688
  `;
6680
- var ghostButtonStyle = import_react33.css`
6689
+ var ghostButtonStyle = import_react34.css`
6681
6690
  border: 0;
6682
6691
  transition:
6683
6692
  background-color var(--duration-fast) var(--timing-ease-out),
@@ -6694,7 +6703,7 @@ var ghostButtonStyle = import_react33.css`
6694
6703
  color: var(--gray-400);
6695
6704
  }
6696
6705
  `;
6697
- var outlineButtonStyle = import_react33.css`
6706
+ var outlineButtonStyle = import_react34.css`
6698
6707
  align-items: center;
6699
6708
  border: 1px solid var(--gray-200);
6700
6709
  border-radius: var(--rounded-sm);
@@ -6715,7 +6724,7 @@ var outlineButtonStyle = import_react33.css`
6715
6724
  }
6716
6725
  `;
6717
6726
  var DropdownStyleMenuTrigger = markNativeButton(
6718
- (0, import_react34.forwardRef)(function DropdownStyleMenuTrigger2({ bgColor = "var(--white)", variant = "ghost", children, ...buttonProps }, ref) {
6727
+ (0, import_react35.forwardRef)(function DropdownStyleMenuTrigger2({ bgColor = "var(--white)", variant = "ghost", children, ...buttonProps }, ref) {
6719
6728
  var _a;
6720
6729
  const buttonVariantStyle = variant === "ghost" ? ghostButtonStyle : outlineButtonStyle;
6721
6730
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
@@ -6740,14 +6749,6 @@ var import_menu = require("@base-ui/react/menu");
6740
6749
  var React8 = __toESM(require("react"));
6741
6750
  var import_react40 = require("react");
6742
6751
 
6743
- // src/components/Modal/ModalPortalContext.ts
6744
- init_emotion_jsx_shim();
6745
- var import_react35 = require("react");
6746
- var ModalPortalContext = (0, import_react35.createContext)(null);
6747
- function useModalPortalContainer() {
6748
- return (0, import_react35.useContext)(ModalPortalContext);
6749
- }
6750
-
6751
6752
  // src/components/Menu/filterMenuSeparators.ts
6752
6753
  init_emotion_jsx_shim();
6753
6754
  var import_react38 = __toESM(require("react"));
@@ -15251,6 +15252,20 @@ var ObjectGridItemSubtitle = import_react133.css`
15251
15252
  text-overflow: ellipsis;
15252
15253
  max-width: 100%;
15253
15254
  `;
15255
+ var ObjectGridItemRevealMenu = import_react133.css`
15256
+ display: inline-flex;
15257
+ opacity: 0;
15258
+ transition: opacity var(--duration-fast) var(--timing-ease-out);
15259
+
15260
+ [data-object-grid-item]:hover &,
15261
+ [data-object-grid-item]:focus-within &,
15262
+ &:hover,
15263
+ &:focus-within,
15264
+ &:has([aria-expanded='true']),
15265
+ &:has([data-popup-open]) {
15266
+ opacity: 1;
15267
+ }
15268
+ `;
15254
15269
 
15255
15270
  // src/components/Objects/ObjectGridItem.tsx
15256
15271
  var import_jsx_runtime112 = require("@emotion/react/jsx-runtime");
@@ -15262,6 +15277,7 @@ var ObjectGridItem2 = ({
15262
15277
  isSelected,
15263
15278
  children,
15264
15279
  menuTestId,
15280
+ revealMenuOnHover,
15265
15281
  ...props
15266
15282
  }) => {
15267
15283
  const hasOnClick = props.onClick;
@@ -15298,14 +15314,14 @@ var ObjectGridItem2 = ({
15298
15314
  onClick: hasOnClick ? onStopPropagation : void 0,
15299
15315
  children: [
15300
15316
  rightSlot,
15301
- menuItems ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
15317
+ menuItems ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { css: revealMenuOnHover ? ObjectGridItemRevealMenu : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
15302
15318
  Menu,
15303
15319
  {
15304
15320
  menuTrigger: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(MenuThreeDots, { "data-testid": menuTestId != null ? menuTestId : "object-grid-item-menu-btn" }),
15305
15321
  placement: "bottom-end",
15306
15322
  children: menuItems
15307
15323
  }
15308
- ) : null
15324
+ ) }) : null
15309
15325
  ]
15310
15326
  }
15311
15327
  ) : null
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/design-system",
3
- "version": "20.72.3",
3
+ "version": "20.72.4-alpha.13+a24dcae01b",
4
4
  "description": "Uniform design system components",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "exports": {
@@ -34,8 +34,8 @@
34
34
  "@storybook/react-vite": "10.4.6",
35
35
  "@types/react": "19.2.17",
36
36
  "@types/react-dom": "19.2.3",
37
- "@uniformdev/canvas": "^20.72.3",
38
- "@uniformdev/richtext": "^20.72.3",
37
+ "@uniformdev/canvas": "^20.72.4-alpha.13+a24dcae01b",
38
+ "@uniformdev/richtext": "^20.72.4-alpha.13+a24dcae01b",
39
39
  "autoprefixer": "10.5.0",
40
40
  "hygen": "6.2.11",
41
41
  "jsdom": "29.1.1",
@@ -82,5 +82,5 @@
82
82
  "publishConfig": {
83
83
  "access": "public"
84
84
  },
85
- "gitHead": "184e00fccf2a16deebbcf5865e2b39ca1380f745"
85
+ "gitHead": "a24dcae01b019225974c60290cfef988f1405ea8"
86
86
  }