reshaped 3.5.3 → 3.6.0-canary.0
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/CHANGELOG.md +11 -21
- package/dist/bundle.css +1 -1
- package/dist/bundle.d.ts +36 -31
- package/dist/bundle.js +10 -10
- package/dist/components/Autocomplete/tests/Autocomplete.stories.js +0 -1
- package/dist/components/Button/Button.types.d.ts +1 -1
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.module.css +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.js +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +1 -1
- package/dist/components/DropdownMenu/tests/DropdownMenu.stories.d.ts +1 -1
- package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.d.ts +1 -1
- package/dist/components/Flyout/Flyout.constants.d.ts +6 -0
- package/dist/components/Flyout/Flyout.constants.js +19 -0
- package/dist/components/{_private/Flyout → Flyout}/Flyout.types.d.ts +3 -3
- package/dist/components/{_private/Flyout → Flyout}/FlyoutContent.js +25 -20
- package/dist/components/{_private/Flyout → Flyout}/FlyoutControlled.js +9 -9
- package/dist/components/{_private/Flyout → Flyout}/tests/Flyout.stories.d.ts +6 -4
- package/dist/components/{_private/Flyout → Flyout}/tests/Flyout.stories.js +128 -118
- package/dist/components/{_private/Flyout → Flyout}/useFlyout.d.ts +1 -1
- package/dist/components/Flyout/useFlyout.js +116 -0
- package/dist/components/Flyout/utilities/calculatePosition.d.ts +30 -0
- package/dist/components/Flyout/utilities/calculatePosition.js +129 -0
- package/dist/components/Flyout/utilities/flyout.d.ts +11 -0
- package/dist/components/Flyout/utilities/flyout.js +79 -0
- package/dist/components/Flyout/utilities/isFullyVisible.d.ts +10 -0
- package/dist/components/Flyout/utilities/isFullyVisible.js +24 -0
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/Popover/Popover.d.ts +1 -1
- package/dist/components/Popover/Popover.js +1 -1
- package/dist/components/Popover/Popover.types.d.ts +2 -1
- package/dist/components/Popover/tests/Popover.stories.d.ts +2 -2
- package/dist/components/Popover/tests/Popover.test.stories.d.ts +2 -2
- package/dist/components/Radio/Radio.module.css +1 -1
- package/dist/components/ScrollArea/ScrollArea.js +6 -3
- package/dist/components/ScrollArea/tests/ScrollArea.stories.d.ts +4 -13
- package/dist/components/ScrollArea/tests/ScrollArea.stories.js +30 -129
- package/dist/components/ScrollArea/tests/ScrollArea.test.stories.d.ts +23 -0
- package/dist/components/ScrollArea/tests/ScrollArea.test.stories.js +66 -0
- package/dist/components/Tabs/TabsContext.d.ts +2 -2
- package/dist/components/Tooltip/Tooltip.js +1 -1
- package/dist/components/Tooltip/Tooltip.types.d.ts +1 -1
- package/dist/config/tailwind.d.ts +1 -1
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts +1 -1
- package/dist/index.d.ts +36 -31
- package/dist/index.js +20 -16
- package/dist/utilities/dom/find.d.ts +6 -9
- package/dist/utilities/dom/find.js +17 -15
- package/dist/utilities/dom/index.d.ts +1 -1
- package/dist/utilities/dom/index.js +1 -1
- package/dist/utilities/scroll/lock.js +4 -3
- package/package.json +10 -9
- package/CHANGELOG-old.md +0 -14
- package/dist/components/_private/Flyout/Flyout.constants.d.ts +0 -3
- package/dist/components/_private/Flyout/Flyout.constants.js +0 -3
- package/dist/components/_private/Flyout/useFlyout.js +0 -211
- package/dist/components/_private/Flyout/utilities/calculatePosition.d.ts +0 -19
- package/dist/components/_private/Flyout/utilities/calculatePosition.js +0 -102
- package/dist/components/_private/Flyout/utilities/isFullyVisible.d.ts +0 -8
- package/dist/components/_private/Flyout/utilities/isFullyVisible.js +0 -16
- /package/dist/components/{_private/Flyout → Flyout}/Flyout.context.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/Flyout.context.js +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/Flyout.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/Flyout.js +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/Flyout.module.css +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/Flyout.types.js +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/FlyoutContent.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/FlyoutControlled.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/FlyoutTrigger.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/FlyoutTrigger.js +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/FlyoutUncontrolled.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/FlyoutUncontrolled.js +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/index.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/index.js +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/utilities/cooldown.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/utilities/cooldown.js +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/utilities/getPositionFallbacks.d.ts +0 -0
- /package/dist/components/{_private/Flyout → Flyout}/utilities/getPositionFallbacks.js +0 -0
@@ -56,7 +56,6 @@ export const active = {
|
|
56
56
|
expect(args.handleClose).toHaveBeenCalledTimes(1);
|
57
57
|
expect(args.handleClose).toHaveBeenLastCalledWith();
|
58
58
|
});
|
59
|
-
await sleep(500);
|
60
59
|
await userEvent.click(input);
|
61
60
|
await waitFor(() => {
|
62
61
|
expect(args.handleOpen).toHaveBeenCalledTimes(1);
|
@@ -9,7 +9,7 @@ declare const Card: React.ForwardRefExoticComponent<{
|
|
9
9
|
href?: string;
|
10
10
|
as?: keyof React.JSX.IntrinsicElements | undefined;
|
11
11
|
className?: import("../../types/global").ClassName;
|
12
|
-
attributes?: (import("../../types/global").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../../types/global").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "form" | "slot" | "style" | "title" | "disabled" | "
|
12
|
+
attributes?: (import("../../types/global").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../../types/global").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "form" | "slot" | "style" | "title" | "disabled" | "color" | "children" | "className" | "hidden" | "content" | "ref" | "aria-orientation" | "role" | "suppressHydrationWarning" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value" | "dir" | "name" | "key" | "type" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "draggable" | "enterKeyHint" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture"> & {
|
13
13
|
ref?: React.RefObject<HTMLButtonElement | HTMLAnchorElement | null>;
|
14
14
|
}) | undefined)) | undefined;
|
15
15
|
} & Pick<import("../View").ViewProps, "height"> & React.RefAttributes<HTMLElement>>;
|
@@ -1 +1 @@
|
|
1
|
-
.root{align-items:center;cursor:pointer;display:inline-flex;gap:var(--rs-checkbox-gap);user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}.root:hover .decorator{background:var(--rs-color-background-neutral-faded)}.field{position:relative}.decorator{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:var(--rs-radius-small);color:var(--rs-color-on-background-primary);height:var(--rs-checkbox-line-height);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-checkbox-line-height)}.decorator:before{background:var(--rs-color-on-background-primary);border-radius:999px;content:"";height:1.5px;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-checkbox-line-height) * .5)}.--size-small{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}.icon{left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform}[data-rs-keyboard] .input:focus-visible+.decorator{box-shadow:var(--rs-focus-shadow)}.root.--error .decorator{border-color:var(--rs-color-border-critical)}.input:checked+.decorator,.input:indeterminate+.decorator{background:var(--rs-color-background-primary);border-color:var(--rs-color-background-primary)}.input:checked+.decorator .icon,.input:indeterminate+.decorator:before{opacity:1;transform:translate(-50%,-50%) scale(1)}.root.--disabled{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.root.--disabled .decorator{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled);color:var(--rs-color-foreground-disabled)}.root.--disabled .input:checked+.decorator,.root.--disabled .input:indeterminate+.decorator{background:var(--rs-color-background-disabled);border-color:transparent}.root.--disabled .input:checked+.decorator:before,.root.--disabled .input:indeterminate+.decorator:before{background-color:var(--rs-color-foreground-disabled)}@media (--rs-viewport-m ){.--size-small--m{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--m{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--m{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--l{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--l{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--xl{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--xl{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}
|
1
|
+
@layer rs.checkbox.base;@layer rs.checkbox.error;@layer rs.checkbox.checked;@layer rs.checkbox.disabled;@layer rs.checkbox.base{.root{align-items:center;cursor:pointer;display:inline-flex;gap:var(--rs-checkbox-gap);user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}.root:hover .decorator{background:var(--rs-color-background-neutral-faded)}.field{position:relative}.decorator{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:var(--rs-radius-small);color:var(--rs-color-on-background-primary);height:var(--rs-checkbox-line-height);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-checkbox-line-height)}.decorator:before{background:var(--rs-color-on-background-primary);border-radius:999px;content:"";height:1.5px;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-checkbox-line-height) * .5)}.--size-small{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}.icon{left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform}[data-rs-keyboard] .input:focus-visible+.decorator{box-shadow:var(--rs-focus-shadow)}}@layer rs.checkbox.error{.root.--error .decorator{border-color:var(--rs-color-border-critical)}}@layer rs.checkbox.checked{.input:checked+.decorator,.input:indeterminate+.decorator{background:var(--rs-color-background-primary);border-color:var(--rs-color-background-primary)}.input:checked+.decorator .icon,.input:indeterminate+.decorator:before{opacity:1;transform:translate(-50%,-50%) scale(1)}}@layer rs.checkbox.disabled{.root.--disabled{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.root.--disabled .decorator{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled);color:var(--rs-color-foreground-disabled)}.root.--disabled .input:checked+.decorator,.root.--disabled .input:indeterminate+.decorator{background:var(--rs-color-background-disabled);border-color:transparent}.root.--disabled .input:checked+.decorator:before,.root.--disabled .input:indeterminate+.decorator:before{background-color:var(--rs-color-foreground-disabled)}}@media (--rs-viewport-m ){.--size-small--m{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--m{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--m{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--l{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--l{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--xl{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--xl{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}
|
@@ -4,7 +4,7 @@ import React from "react";
|
|
4
4
|
import Popover from "../Popover/index.js";
|
5
5
|
import MenuItem from "../MenuItem/index.js";
|
6
6
|
import Icon from "../Icon/index.js";
|
7
|
-
import { useFlyoutContext } from "../
|
7
|
+
import { useFlyoutContext } from "../Flyout/index.js";
|
8
8
|
import IconChevronRight from "../../icons/ChevronRight.js";
|
9
9
|
import useHotkeys from "../../hooks/useHotkeys.js";
|
10
10
|
import useRTL from "../../hooks/useRTL.js";
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type React from "react";
|
2
2
|
import type { PopoverProps, PopoverInstance } from "../Popover";
|
3
3
|
import type { MenuItemProps } from "../MenuItem";
|
4
|
-
import type { FlyoutContentProps } from "../
|
4
|
+
import type { FlyoutContentProps } from "../Flyout";
|
5
5
|
export type Instance = PopoverInstance;
|
6
6
|
export type Props = Pick<PopoverProps, "children" | "position" | "forcePosition" | "fallbackPositions" | "triggerType" | "contentGap" | "contentShift" | "onOpen" | "onClose" | "active" | "defaultActive" | "width" | "disableHideAnimation" | "disableCloseOnOutsideClick" | "instanceRef" | "containerRef" | "originCoordinates"> & {
|
7
7
|
trapFocusMode?: Extract<PopoverProps["trapFocusMode"], "action-menu" | "selection-menu">;
|
@@ -2,7 +2,7 @@ declare const _default: {
|
|
2
2
|
title: string;
|
3
3
|
component: import("react").FC<import("./..").DropdownMenuProps> & {
|
4
4
|
Dismissible: import("react").FC<import("../../Dismissible").DismissibleProps>;
|
5
|
-
Trigger: import("react").FC<import("../../
|
5
|
+
Trigger: import("react").FC<import("../../Flyout").FlyoutTriggerProps>;
|
6
6
|
Content: import("react").FC<import("../DropdownMenu.types").ContentProps>;
|
7
7
|
Section: import("react").FC<import("../DropdownMenu.types").SectionProps>;
|
8
8
|
Item: import("react").FC<import("../DropdownMenu.types").ItemProps>;
|
@@ -4,7 +4,7 @@ declare const _default: {
|
|
4
4
|
title: string;
|
5
5
|
component: import("react").FC<import("./..").DropdownMenuProps> & {
|
6
6
|
Dismissible: import("react").FC<import("../../Dismissible").DismissibleProps>;
|
7
|
-
Trigger: import("react").FC<import("../../
|
7
|
+
Trigger: import("react").FC<import("../../Flyout").FlyoutTriggerProps>;
|
8
8
|
Content: import("react").FC<import("../DropdownMenu.types").ContentProps>;
|
9
9
|
Section: import("react").FC<import("../DropdownMenu.types").SectionProps>;
|
10
10
|
Item: import("react").FC<import("../DropdownMenu.types").ItemProps>;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
export const mouseEnter = 800;
|
2
|
+
export const mouseEnterShort = 100;
|
3
|
+
export const mouseLeave = 150;
|
4
|
+
export const defaultStyles = {
|
5
|
+
left: 0,
|
6
|
+
top: 0,
|
7
|
+
width: "auto",
|
8
|
+
height: "auto",
|
9
|
+
zIndex: "var(--rs-z-index-flyout)",
|
10
|
+
};
|
11
|
+
export const resetStyles = {
|
12
|
+
left: 0,
|
13
|
+
top: 0,
|
14
|
+
position: "absolute",
|
15
|
+
visibility: "hidden",
|
16
|
+
animation: "none",
|
17
|
+
transition: "none",
|
18
|
+
zIndex: "var(--rs-z-index-flyout)",
|
19
|
+
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from "react";
|
2
|
-
import type * as G from "
|
3
|
-
import type { TrapMode } from "
|
2
|
+
import type * as G from "../../types/global";
|
3
|
+
import type { TrapMode } from "../../utilities/a11y";
|
4
4
|
/**
|
5
5
|
* Utility
|
6
6
|
*/
|
@@ -82,7 +82,7 @@ type BaseProps = {
|
|
82
82
|
groupTimeouts?: boolean;
|
83
83
|
position?: Position;
|
84
84
|
/**
|
85
|
-
* @deprecated Use fallbackPosition={false} instead
|
85
|
+
* @deprecated Use fallbackPosition={false} instead, will be removed in v4
|
86
86
|
*/
|
87
87
|
forcePosition?: boolean;
|
88
88
|
fallbackPositions?: Position[] | false;
|
@@ -1,30 +1,33 @@
|
|
1
1
|
"use client";
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
3
3
|
import React from "react";
|
4
|
-
import { classNames, throttleHandler } from "
|
5
|
-
import useIsomorphicLayoutEffect from "
|
6
|
-
import Portal from "../Portal/index.js";
|
7
|
-
import {
|
4
|
+
import { classNames, throttleHandler } from "../../utilities/helpers.js";
|
5
|
+
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
6
|
+
import Portal from "../_private/Portal/index.js";
|
7
|
+
import { findClosestPositionContainer, findClosestScrollableContainer } from "../../utilities/dom/index.js";
|
8
8
|
import cooldown from "./utilities/cooldown.js";
|
9
9
|
import { useFlyoutContext, ContentProvider } from "./Flyout.context.js";
|
10
10
|
import s from "./Flyout.module.css";
|
11
11
|
const FlyoutContent = (props) => {
|
12
12
|
const { children, className, attributes } = props;
|
13
|
-
const { flyout, id, flyoutElRef, triggerElRef, handleClose, handleTransitionEnd, handleTransitionStart, triggerType, handleMouseEnter, handleMouseLeave, handleContentMouseDown, handleContentMouseUp, contentGap, contentClassName, contentAttributes, trapFocusMode, disableContentHover, width, containerRef, isSubmenu, } = useFlyoutContext();
|
13
|
+
const { flyout, id, flyoutElRef, triggerElRef, handleClose, handleTransitionEnd, handleTransitionStart, triggerType, handleMouseEnter, handleMouseLeave, handleContentMouseDown, handleContentMouseUp, contentGap, contentClassName, contentAttributes, trapFocusMode, disableContentHover, width, containerRef: passedContainerRef, isSubmenu, } = useFlyoutContext();
|
14
14
|
const { styles, status, position } = flyout;
|
15
15
|
const [mounted, setMounted] = React.useState(false);
|
16
|
-
const
|
16
|
+
const closestFixedContainer = React.useMemo(() => {
|
17
|
+
if (!mounted)
|
18
|
+
return null;
|
19
|
+
if (!triggerElRef)
|
20
|
+
return null;
|
21
|
+
return findClosestPositionContainer({ el: triggerElRef.current });
|
22
|
+
}, [mounted, triggerElRef]);
|
23
|
+
const closestScrollableContainer = React.useMemo(() => {
|
17
24
|
if (!mounted)
|
18
25
|
return;
|
19
26
|
if (!triggerElRef)
|
20
27
|
return;
|
21
|
-
return
|
28
|
+
return findClosestScrollableContainer({ el: triggerElRef.current });
|
22
29
|
}, [mounted, triggerElRef]);
|
23
|
-
const
|
24
|
-
!closestContainer?.el ||
|
25
|
-
closestContainer.scrollable
|
26
|
-
? undefined
|
27
|
-
: { current: closestContainer.el };
|
30
|
+
const containerRef = passedContainerRef || { current: closestFixedContainer };
|
28
31
|
useIsomorphicLayoutEffect(() => {
|
29
32
|
setMounted(true);
|
30
33
|
}, []);
|
@@ -39,10 +42,12 @@ const FlyoutContent = (props) => {
|
|
39
42
|
return () => el.removeEventListener("transitionstart", handleTransitionStart);
|
40
43
|
}, [handleTransitionStart, flyoutElRef, status]);
|
41
44
|
React.useEffect(() => {
|
42
|
-
if (
|
45
|
+
if (closestScrollableContainer === document.body)
|
46
|
+
return;
|
47
|
+
if (!closestScrollableContainer)
|
43
48
|
return;
|
44
49
|
const triggerEl = triggerElRef?.current;
|
45
|
-
const containerEl =
|
50
|
+
const containerEl = closestScrollableContainer;
|
46
51
|
const handleScroll = throttleHandler(() => {
|
47
52
|
const triggerBounds = triggerEl?.getBoundingClientRect();
|
48
53
|
const containerBounds = containerEl.getBoundingClientRect();
|
@@ -57,12 +62,12 @@ const FlyoutContent = (props) => {
|
|
57
62
|
flyout.updatePosition({ sync: true });
|
58
63
|
}
|
59
64
|
}, 16);
|
60
|
-
|
61
|
-
return () =>
|
62
|
-
}, [
|
65
|
+
closestScrollableContainer.addEventListener("scroll", handleScroll, { passive: true });
|
66
|
+
return () => closestScrollableContainer.removeEventListener("scroll", handleScroll);
|
67
|
+
}, [closestScrollableContainer, flyout, handleClose, triggerElRef]);
|
63
68
|
if (status === "idle" || !mounted)
|
64
69
|
return null;
|
65
|
-
const
|
70
|
+
const rootClassNames = classNames(s.content, triggerType === "hover" && s["--hover"], status === "visible" && s["--visible"],
|
66
71
|
// animating only when we're opening the first flyout or closing the last flyout within the same cooldown
|
67
72
|
// content is rendered only once flyout is already warm so checking for timer instead
|
68
73
|
(cooldown.status === "cooling" || !cooldown.timer || isSubmenu || triggerType !== "hover") &&
|
@@ -85,11 +90,11 @@ const FlyoutContent = (props) => {
|
|
85
90
|
else if (trapFocusMode === "action-bar") {
|
86
91
|
role = "menubar";
|
87
92
|
}
|
88
|
-
const content = (_jsx(ContentProvider, { value: { elRef: flyoutElRef }, children: _jsx("div", { className:
|
93
|
+
const content = (_jsx(ContentProvider, { value: { elRef: flyoutElRef }, children: _jsx("div", { className: rootClassNames, style: {
|
89
94
|
...styles,
|
90
95
|
"--rs-flyout-gap": contentGap,
|
91
96
|
}, ref: flyoutElRef, onTransitionEnd: handleTransitionEnd, onMouseEnter: triggerType === "hover" ? handleMouseEnter : undefined, onMouseLeave: triggerType === "hover" ? handleMouseLeave : undefined, onMouseDown: handleContentMouseDown, onTouchStart: handleContentMouseDown, onMouseUp: handleContentMouseUp, onTouchEnd: handleContentMouseUp, children: _jsx("div", { role: role, ...attributes, id: id, "aria-modal": role === "dialog" ? true : undefined, style: contentAttributes?.style, className: innerClassNames, children: children }) }) }));
|
92
|
-
return _jsx(Portal, { targetRef: containerRef
|
97
|
+
return _jsx(Portal, { targetRef: containerRef, children: content });
|
93
98
|
};
|
94
99
|
FlyoutContent.displayName = "Flyout.Content";
|
95
100
|
export default FlyoutContent;
|
@@ -1,19 +1,19 @@
|
|
1
1
|
"use client";
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
3
3
|
import React from "react";
|
4
|
-
import { TrapFocus, checkKeyboardMode } from "
|
5
|
-
import useIsDismissible from "
|
6
|
-
import useElementId from "
|
7
|
-
import useIsomorphicLayoutEffect from "
|
8
|
-
import useHotkeys from "
|
9
|
-
import useOnClickOutside from "
|
10
|
-
import useRTL from "
|
11
|
-
import { checkTransitions, onNextFrame } from "
|
4
|
+
import { TrapFocus, checkKeyboardMode } from "../../utilities/a11y/index.js";
|
5
|
+
import useIsDismissible from "../../hooks/_private/useIsDismissible.js";
|
6
|
+
import useElementId from "../../hooks/useElementId.js";
|
7
|
+
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
8
|
+
import useHotkeys from "../../hooks/useHotkeys.js";
|
9
|
+
import useOnClickOutside from "../../hooks/useOnClickOutside.js";
|
10
|
+
import useRTL from "../../hooks/useRTL.js";
|
11
|
+
import { checkTransitions, onNextFrame } from "../../utilities/animation.js";
|
12
12
|
import useFlyout from "./useFlyout.js";
|
13
13
|
import * as timeouts from "./Flyout.constants.js";
|
14
14
|
import cooldown from "./utilities/cooldown.js";
|
15
15
|
import { Provider, useFlyoutTriggerContext, useFlyoutContext, useFlyoutContentContext, } from "./Flyout.context.js";
|
16
|
-
import useHandlerRef from "
|
16
|
+
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
17
17
|
const FlyoutControlled = (props) => {
|
18
18
|
const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, trapFocusMode, width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
|
19
19
|
const fallbackPositions = props.fallbackPositions === false || forcePosition ? [] : props.fallbackPositions;
|
@@ -45,10 +45,7 @@ export declare const contentShift: {
|
|
45
45
|
name: string;
|
46
46
|
render: () => React.JSX.Element;
|
47
47
|
};
|
48
|
-
export declare const disableContentHover:
|
49
|
-
name: string;
|
50
|
-
render: () => React.JSX.Element;
|
51
|
-
};
|
48
|
+
export declare const disableContentHover: StoryObj;
|
52
49
|
export declare const disableCloseOnOutsideClick: StoryObj;
|
53
50
|
export declare const disableHideAnimation: {
|
54
51
|
name: string;
|
@@ -82,3 +79,8 @@ export declare const testScopedTheming: {
|
|
82
79
|
name: string;
|
83
80
|
render: () => React.JSX.Element;
|
84
81
|
};
|
82
|
+
export declare const testWithoutFocusable: StoryObj;
|
83
|
+
export declare const testChangeSize: {
|
84
|
+
name: string;
|
85
|
+
render: () => React.JSX.Element;
|
86
|
+
};
|