@wistia/ui 0.22.7 → 0.22.8

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.js CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  /*
3
- * @license @wistia/ui v0.22.7
3
+ * @license @wistia/ui v0.22.8
4
4
  *
5
5
  * Copyright (c) 2024-2026, Wistia, Inc. and its affiliates.
6
6
  *
@@ -22,7 +22,7 @@ import { Content as Content$1, Root as Root$1, Trigger as Trigger$1 } from "@rad
22
22
  import { Item, Root as Root$2 } from "@radix-ui/react-radio-group";
23
23
  import { differenceEuclidean, easingSmootherstep, formatHex, interpolate, modeHsv, modeLrgb, modeRgb, parseHex, useMode, wcagContrast } from "culori/fn";
24
24
  import { Item as Item$1, Root as Root$3 } from "@radix-ui/react-toggle-group";
25
- import { Close, Content as Content$2, PopoverArrow, Portal as Portal$1, Root as Root$4, Trigger as Trigger$2 } from "@radix-ui/react-popover";
25
+ import { Anchor, Close, Content as Content$2, PopoverArrow as PopoverArrow$1, Portal as Portal$1, Root as Root$4, Trigger as Trigger$2 } from "@radix-ui/react-popover";
26
26
  import { Range, Root as Root$5, Thumb, Track } from "@radix-ui/react-slider";
27
27
  import * as Ariakit from "@ariakit/react";
28
28
  import { matchSorter } from "match-sorter";
@@ -1410,7 +1410,7 @@ const noOpFn = () => {};
1410
1410
  //#endregion
1411
1411
  //#region src/private/hooks/useEvent/useEvent.ts
1412
1412
  const isEventTargetSupported = (eventTarget) => Boolean(typeof eventTarget === "object" && eventTarget?.addEventListener);
1413
- const useEvent = (eventName, eventHandler, eventTarget = window, eventOptions = {}) => {
1413
+ const useEvent = (eventName, eventHandler, eventTarget = typeof document !== "undefined" ? window : void 0, eventOptions = {}) => {
1414
1414
  const savedEventHandler = useRef(void 0);
1415
1415
  const savedEventOptions = useRef(void 0);
1416
1416
  useEffect(() => {
@@ -8329,6 +8329,13 @@ const StyledInputContainer = styled.div`
8329
8329
  transform: translateY(-50%);
8330
8330
  }
8331
8331
 
8332
+ /* Presentational icons shouldn't swallow clicks meant for the input.
8333
+ Scoped to svg so interactive decorations (e.g. IconButton) still work. */
8334
+ svg.wui-input-left-icon,
8335
+ svg.wui-input-right-icon {
8336
+ pointer-events: none;
8337
+ }
8338
+
8332
8339
  &:has(.wui-input-left-icon) input,
8333
8340
  &:has(.wui-input-left-icon) textarea {
8334
8341
  padding-left: 32px;
@@ -11551,10 +11558,12 @@ const keyToString = (key) => {
11551
11558
  case "ArrowUp": return "↑";
11552
11559
  case "Alt": return "Alt";
11553
11560
  case "Cmd":
11554
- case "Meta":
11555
- if (/Mac|iPhone|iPad/.test(window.navigator.userAgent)) return "";
11556
- if (window.navigator.userAgent.includes("Win")) return "";
11561
+ case "Meta": {
11562
+ const userAgent = typeof document !== "undefined" ? window.navigator.userAgent : "";
11563
+ if (/Mac|iPhone|iPad/.test(userAgent)) return "";
11564
+ if (userAgent.includes("Win")) return "⊞";
11557
11565
  return "^";
11566
+ }
11558
11567
  case "Ctrl": return "Ctrl";
11559
11568
  case "Option": return "⌥";
11560
11569
  case "Shift": return "⇧";
@@ -12334,13 +12343,112 @@ const ModalCallout = ({ title, image, children }) => {
12334
12343
  };
12335
12344
  ModalCallout.displayName = "ModalCallout_UI";
12336
12345
  //#endregion
12337
- //#region src/private/helpers/getControls/getControlProps.tsx
12338
- const getControlProps = (isOpen, onOpenChange) => {
12339
- return isNotNil(onOpenChange) && isNotNil(isOpen) ? {
12340
- open: isOpen,
12341
- onOpenChange
12342
- } : {};
12343
- };
12346
+ //#region src/components/Popover/PopoverRoot.tsx
12347
+ /**
12348
+ * The root of a composable popover. Wrap `PopoverTrigger` (or `PopoverAnchor`)
12349
+ * and `PopoverContent` inside it.
12350
+ *
12351
+ * For the common "button opens a panel" case, prefer the bundled `Popover`.
12352
+ */
12353
+ const PopoverRoot = ({ isOpen, ...props }) => /* @__PURE__ */ jsx(Root$4, {
12354
+ ...props,
12355
+ ...isOpen !== void 0 ? { open: isOpen } : {}
12356
+ });
12357
+ PopoverRoot.displayName = "PopoverRoot_UI";
12358
+ //#endregion
12359
+ //#region src/components/Popover/PopoverTrigger.tsx
12360
+ /**
12361
+ * The button that toggles the popover open and closed. By default it renders a
12362
+ * `<button>` wrapping its children; pass `asChild` to merge the trigger
12363
+ * behavior onto a single child element (e.g. a `Button` or `IconButton`).
12364
+ */
12365
+ const PopoverTrigger = forwardRef((props, forwardedRef) => /* @__PURE__ */ jsx(Trigger$2, {
12366
+ ref: forwardedRef,
12367
+ ...props
12368
+ }));
12369
+ PopoverTrigger.displayName = "PopoverTrigger_UI";
12370
+ //#endregion
12371
+ //#region src/components/Popover/PopoverPortal.tsx
12372
+ /**
12373
+ * Portals the popover content out of the DOM hierarchy of its trigger so it can
12374
+ * escape clipping ancestors (`overflow: hidden`, transformed containers, etc.).
12375
+ */
12376
+ const PopoverPortal = (props) => /* @__PURE__ */ jsx(Portal$1, { ...props });
12377
+ PopoverPortal.displayName = "PopoverPortal_UI";
12378
+ //#endregion
12379
+ //#region src/components/Popover/PopoverContent.tsx
12380
+ const StyledContent$1 = styled(Content$2)`
12381
+ z-index: var(--wui-zindex-popover);
12382
+ ${({ $colorScheme }) => getColorScheme($colorScheme)};
12383
+ ${({ $unstyled }) => !$unstyled && css`
12384
+ border-radius: var(--wui-border-radius-02);
12385
+ padding: var(--wui-space-04);
12386
+ max-width: var(--wui-popover-max-width);
12387
+ max-height: var(--wui-popover-max-height);
12388
+ background-color: var(--wui-color-bg-surface);
12389
+ box-shadow: var(--wui-elevation-01);
12390
+ border: 1px solid var(--wui-color-border);
12391
+ overflow: auto;
12392
+ `}
12393
+
12394
+ [data-wui-popover-close] {
12395
+ position: absolute;
12396
+ top: var(--wui-space-02);
12397
+ right: var(--wui-space-02);
12398
+ }
12399
+ `;
12400
+ const DEFAULT_SIDE_OFFSET = 8;
12401
+ const DEFAULT_MAX_WIDTH = "320px";
12402
+ const DEFAULT_MAX_HEIGHT = "auto";
12403
+ /**
12404
+ * The styled popover surface. Place inside a `PopoverRoot` (typically wrapped
12405
+ * in a `PopoverPortal`). Forwards all Radix Content props, including
12406
+ * dismissal/focus event handlers such as `onPointerDownOutside`,
12407
+ * `onOpenAutoFocus`, and `onCloseAutoFocus`.
12408
+ */
12409
+ const PopoverContent = forwardRef(({ colorScheme = "inherit", unstyled = false, maxWidth = DEFAULT_MAX_WIDTH, maxHeight = DEFAULT_MAX_HEIGHT, sideOffset = DEFAULT_SIDE_OFFSET, style, ...props }, forwardedRef) => {
12410
+ return /* @__PURE__ */ jsx(StyledContent$1, {
12411
+ ref: forwardedRef,
12412
+ $colorScheme: colorScheme,
12413
+ $unstyled: unstyled,
12414
+ sideOffset,
12415
+ style: {
12416
+ "--wui-popover-max-width": maxWidth,
12417
+ "--wui-popover-max-height": maxHeight,
12418
+ ...style
12419
+ },
12420
+ ...props
12421
+ });
12422
+ });
12423
+ PopoverContent.displayName = "PopoverContent_UI";
12424
+ //#endregion
12425
+ //#region src/components/Popover/PopoverClose.tsx
12426
+ /**
12427
+ * An element that closes the popover when activated. Defaults to a `<button>`;
12428
+ * pass `asChild` to merge the close behavior onto a single child element. For
12429
+ * a pre-styled icon close button, use `PopoverCloseButton`.
12430
+ */
12431
+ const PopoverClose = forwardRef((props, forwardedRef) => /* @__PURE__ */ jsx(Close, {
12432
+ ref: forwardedRef,
12433
+ ...props
12434
+ }));
12435
+ PopoverClose.displayName = "PopoverClose_UI";
12436
+ //#endregion
12437
+ //#region src/components/Popover/PopoverCloseButton.tsx
12438
+ /**
12439
+ * A pre-styled close button intended to be placed inside a `PopoverContent`.
12440
+ * For a custom close control, use `PopoverClose` directly.
12441
+ */
12442
+ const PopoverCloseButton = ({ label = "Close" } = {}) => /* @__PURE__ */ jsx(PopoverClose, {
12443
+ asChild: true,
12444
+ children: /* @__PURE__ */ jsx(IconButton, {
12445
+ "data-wui-popover-close": true,
12446
+ label,
12447
+ variant: "ghost",
12448
+ children: /* @__PURE__ */ jsx(Icon, { type: "close" })
12449
+ })
12450
+ });
12451
+ PopoverCloseButton.displayName = "PopoverCloseButton_UI";
12344
12452
  //#endregion
12345
12453
  //#region src/components/Popover/PopoverArrow.tsx
12346
12454
  const StyledPath = styled.path`
@@ -12380,8 +12488,8 @@ const StyledCircle = styled.circle`
12380
12488
  `}
12381
12489
  }
12382
12490
  `;
12383
- const PopoverArrow$1 = ({ isAnimated }) => {
12384
- return /* @__PURE__ */ jsx(PopoverArrow, {
12491
+ const PopoverArrow = ({ isAnimated }) => {
12492
+ return /* @__PURE__ */ jsx(PopoverArrow$1, {
12385
12493
  asChild: true,
12386
12494
  children: /* @__PURE__ */ jsxs("svg", {
12387
12495
  fill: "none",
@@ -12411,61 +12519,38 @@ const PopoverArrow$1 = ({ isAnimated }) => {
12411
12519
  })
12412
12520
  });
12413
12521
  };
12414
- PopoverArrow$1.displayName = "PopoverArrow_UI";
12522
+ PopoverArrow.displayName = "PopoverArrow_UI";
12415
12523
  //#endregion
12416
12524
  //#region src/components/Popover/Popover.tsx
12417
- const StyledContent$1 = styled(Content$2)`
12418
- z-index: var(--wui-zindex-popover);
12419
- ${({ $colorScheme }) => getColorScheme($colorScheme)};
12420
- ${({ $unstyled }) => !$unstyled && css`
12421
- border-radius: var(--wui-border-radius-02);
12422
- padding: var(--wui-space-04);
12423
- max-width: var(--wui-popover-max-width, 320px);
12424
- max-height: var(--wui-popover-max-height, auto);
12425
- background-color: var(--wui-color-bg-surface);
12426
- box-shadow: var(--wui-elevation-01);
12427
- border: 1px solid var(--wui-color-border);
12428
- overflow: auto;
12429
- `}
12430
-
12431
- [data-wui-popover-close] {
12432
- position: absolute;
12433
- top: var(--wui-space-02);
12434
- right: var(--wui-space-02);
12435
- }
12436
- `;
12437
12525
  /**
12438
12526
  * Displays rich content in a portal, triggered by a button.
12527
+ *
12528
+ * For more control — custom anchor, access to event handlers like
12529
+ * `onPointerDownOutside`, no injected close button, etc. — compose the
12530
+ * primitives directly: `PopoverRoot`, `PopoverTrigger`, `PopoverAnchor`,
12531
+ * `PopoverPortal`, `PopoverContent`, `PopoverClose`.
12439
12532
  */
12440
- const Popover = ({ children, trigger, isOpen = false, hideCloseButton = false, maxWidth = "320px", maxHeight = "auto", onOpenChange, unstyled = false, withArrow = false, isAnimated = false, colorScheme = "inherit", style, ...props }) => {
12533
+ const Popover = ({ children, trigger, isOpen, hideCloseButton = false, maxWidth, maxHeight, onOpenChange, unstyled = false, withArrow = false, isAnimated = false, colorScheme = "inherit", style, ...props }) => {
12441
12534
  const sideOffset = withArrow ? -24 : 8;
12442
- const mergedStyle = {
12443
- "--wui-popover-max-width": maxWidth,
12444
- "--wui-popover-max-height": maxHeight,
12445
- ...style
12446
- };
12447
- return /* @__PURE__ */ jsxs(Root$4, {
12448
- ...getControlProps(isOpen, onOpenChange),
12449
- children: [/* @__PURE__ */ jsx(Trigger$2, {
12535
+ return /* @__PURE__ */ jsxs(PopoverRoot, {
12536
+ ...isOpen !== void 0 ? {
12537
+ isOpen,
12538
+ onOpenChange
12539
+ } : {},
12540
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, {
12450
12541
  asChild: true,
12451
12542
  children: trigger
12452
- }), /* @__PURE__ */ jsx(Portal$1, { children: /* @__PURE__ */ jsxs(StyledContent$1, {
12453
- $colorScheme: colorScheme,
12543
+ }), /* @__PURE__ */ jsx(PopoverPortal, { children: /* @__PURE__ */ jsxs(PopoverContent, {
12544
+ colorScheme,
12545
+ ...maxHeight !== void 0 ? { maxHeight } : {},
12546
+ ...maxWidth !== void 0 ? { maxWidth } : {},
12454
12547
  sideOffset,
12548
+ unstyled,
12455
12549
  ...props,
12456
- $unstyled: unstyled,
12457
- style: mergedStyle,
12550
+ style,
12458
12551
  children: [
12459
- !hideCloseButton && /* @__PURE__ */ jsx(Close, {
12460
- asChild: true,
12461
- children: /* @__PURE__ */ jsx(IconButton, {
12462
- "data-wui-popover-close": true,
12463
- label: "Close",
12464
- variant: "ghost",
12465
- children: /* @__PURE__ */ jsx(Icon, { type: "close" })
12466
- })
12467
- }),
12468
- withArrow ? /* @__PURE__ */ jsx(PopoverArrow$1, { isAnimated }) : null,
12552
+ !hideCloseButton && /* @__PURE__ */ jsx(PopoverCloseButton, {}),
12553
+ withArrow ? /* @__PURE__ */ jsx(PopoverArrow, { isAnimated }) : null,
12469
12554
  /* @__PURE__ */ jsx("div", { children })
12470
12555
  ]
12471
12556
  }) })]
@@ -12473,6 +12558,18 @@ const Popover = ({ children, trigger, isOpen = false, hideCloseButton = false, m
12473
12558
  };
12474
12559
  Popover.displayName = "Popover_UI";
12475
12560
  //#endregion
12561
+ //#region src/components/Popover/PopoverAnchor.tsx
12562
+ /**
12563
+ * Positions the popover relative to an element other than the trigger. Useful
12564
+ * when the element the user interacts with (e.g. a text input) is separate
12565
+ * from what the popover attaches to.
12566
+ */
12567
+ const PopoverAnchor = forwardRef((props, forwardedRef) => /* @__PURE__ */ jsx(Anchor, {
12568
+ ref: forwardedRef,
12569
+ ...props
12570
+ }));
12571
+ PopoverAnchor.displayName = "PopoverAnchor_UI";
12572
+ //#endregion
12476
12573
  //#region src/components/ProgressBar/ProgressBar.tsx
12477
12574
  const ProgressBarWrapper = styled.div`
12478
12575
  --progress-bar-height: 8px;
@@ -14419,6 +14516,6 @@ const WistiaLogo = ({ description = void 0, height = 100, hoverColor = void 0, h
14419
14516
  };
14420
14517
  WistiaLogo.displayName = "WistiaLogo_UI";
14421
14518
  //#endregion
14422
- export { ActionButton, Avatar, Badge, Banner, Box, Breadcrumb, Breadcrumbs, Button, ButtonGroup, Card, Center, Checkbox, CheckboxGroup, CheckboxMenuItem, ClickRegion, Collapsible, CollapsibleContent, CollapsibleTrigger, CollapsibleTriggerIcon, ColorGrid, ColorGridOption, ColorList, ColorListGroup, ColorListOption, ColorPicker, ColorPickerPopoverContent, ColorPickerSection, ColorPickerTrigger, ColorSchemeWrapper, Combobox, ComboboxOption, ContextMenu, ContrastControls, CustomizableThemeWrapper, DataCard, DataCardHoverArrow, DataCardTrend, DataCards, DataList, DataListItem, DataListItemLabel, DataListItemValue, Divider, EditableHeading, EditableText, EditableTextCancelButton, EditableTextContext, EditableTextDisplay, EditableTextInput, EditableTextLabel, EditableTextRoot, EditableTextSubmitButton, EditableTextTrigger, Ellipsis, FeatureCard, FeatureCardImage, FileAmountLimitValidator, FileSizeValidator, FileTypeValidator, FilterMenu, FilterMenuItem, Form, FormErrorSummary, FormField, FormGroup, Grid, Heading, HexColorInput, HueSlider, Icon, IconButton, Image, ImageDimensionsValidator, Input, InputClickToCopy, InputPassword, KeyboardShortcut, Label, Link, List, ListItem, Mark, Markdown, Menu, MenuItem, MenuItemDescription, MenuItemLabel, MenuLabel, MenuRadioGroup, Meter, Modal, ModalCallout, ModalCallouts, PersistentFileAmountLimitValidator, Popover, PreviewCard, ProgressBar, Radio, RadioCard, RadioCardImage, RadioGroup, RadioMenuItem, SaturationAndValuePicker, ScreenReaderOnly, ScrollArea, SegmentedControl, SegmentedControlItem, Select, SelectOption, SelectOptionGroup, Slider, SplitButton, Stack, SubMenu, Switch, Table, TableBody, TableCell, TableFoot, TableHead, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, Text, Thumbnail, ThumbnailBadge, ThumbnailCollage, Tooltip, UIProvider, ValueNameOrHexCode, ValueSwatch, WistiaLogo, calculateContrast, coerceToBoolean, colorSchemeOptions, copyToClipboard, dateTime, iconSizeMap, isKeyboardKey, mergeRefs, mq, useActiveMq, useAriaLive, useBoolean, useClipboard, useElementObserver, useFilePicker, useFocusTrap, useForceUpdate, useFormState, useImperativeFilePicker, useIsHovered, useKey, useKeyPress, useLocalStorage, useLockBodyScroll, useMq, useOnClickOutside, usePreviousValue, useToast, useWindowSize, validateWithYup };
14519
+ export { ActionButton, Avatar, Badge, Banner, Box, Breadcrumb, Breadcrumbs, Button, ButtonGroup, Card, Center, Checkbox, CheckboxGroup, CheckboxMenuItem, ClickRegion, Collapsible, CollapsibleContent, CollapsibleTrigger, CollapsibleTriggerIcon, ColorGrid, ColorGridOption, ColorList, ColorListGroup, ColorListOption, ColorPicker, ColorPickerPopoverContent, ColorPickerSection, ColorPickerTrigger, ColorSchemeWrapper, Combobox, ComboboxOption, ContextMenu, ContrastControls, CustomizableThemeWrapper, DataCard, DataCardHoverArrow, DataCardTrend, DataCards, DataList, DataListItem, DataListItemLabel, DataListItemValue, Divider, EditableHeading, EditableText, EditableTextCancelButton, EditableTextContext, EditableTextDisplay, EditableTextInput, EditableTextLabel, EditableTextRoot, EditableTextSubmitButton, EditableTextTrigger, Ellipsis, FeatureCard, FeatureCardImage, FileAmountLimitValidator, FileSizeValidator, FileTypeValidator, FilterMenu, FilterMenuItem, Form, FormErrorSummary, FormField, FormGroup, Grid, Heading, HexColorInput, HueSlider, Icon, IconButton, Image, ImageDimensionsValidator, Input, InputClickToCopy, InputPassword, KeyboardShortcut, Label, Link, List, ListItem, Mark, Markdown, Menu, MenuItem, MenuItemDescription, MenuItemLabel, MenuLabel, MenuRadioGroup, Meter, Modal, ModalCallout, ModalCallouts, PersistentFileAmountLimitValidator, Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverCloseButton, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger, PreviewCard, ProgressBar, Radio, RadioCard, RadioCardImage, RadioGroup, RadioMenuItem, SaturationAndValuePicker, ScreenReaderOnly, ScrollArea, SegmentedControl, SegmentedControlItem, Select, SelectOption, SelectOptionGroup, Slider, SplitButton, Stack, SubMenu, Switch, Table, TableBody, TableCell, TableFoot, TableHead, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, Text, Thumbnail, ThumbnailBadge, ThumbnailCollage, Tooltip, UIProvider, ValueNameOrHexCode, ValueSwatch, WistiaLogo, calculateContrast, coerceToBoolean, colorSchemeOptions, copyToClipboard, dateTime, iconSizeMap, isKeyboardKey, mergeRefs, mq, useActiveMq, useAriaLive, useBoolean, useClipboard, useElementObserver, useFilePicker, useFocusTrap, useForceUpdate, useFormState, useImperativeFilePicker, useIsHovered, useKey, useKeyPress, useLocalStorage, useLockBodyScroll, useMq, useOnClickOutside, usePreviousValue, useToast, useWindowSize, validateWithYup };
14423
14520
 
14424
14521
  //# sourceMappingURL=index.js.map