@choice-ui/react 1.6.0 → 1.6.2
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/components/calendar/dist/index.d.ts +5 -12
- package/dist/components/calendar/dist/index.js +200 -82
- package/dist/components/calendar/src/utils/parsers/parsers.js +40 -23
- package/dist/components/dialog/dist/index.d.ts +2 -1
- package/dist/components/dialog/dist/index.js +5 -1
- package/dist/components/dialog/src/dialog.d.ts +2 -1
- package/dist/components/dialog/src/dialog.js +5 -1
- package/dist/components/dropdown/dist/index.js +16 -41
- package/dist/components/list/dist/index.d.ts +8 -3
- package/dist/components/list/src/components/list-content.d.ts +3 -2
- package/dist/components/list/src/components/list-content.js +2 -2
- package/dist/components/list/src/components/list-item.d.ts +3 -0
- package/dist/components/list/src/list.d.ts +2 -1
- package/dist/components/list/src/list.js +4 -2
- package/dist/components/md-render/src/tv.js +1 -1
- package/dist/components/menus/dist/index.js +20 -25
- package/dist/components/modal/dist/index.d.ts +2 -1
- package/dist/components/modal/dist/index.js +2 -2
- package/dist/components/modal/src/modal.d.ts +2 -1
- package/dist/components/modal/src/modal.js +2 -2
- package/dist/components/multi-select/dist/index.js +11 -16
- package/dist/components/popover/dist/index.d.ts +11 -10
- package/dist/components/popover/dist/index.js +5 -1
- package/dist/components/popover/src/popover.d.ts +2 -1
- package/dist/components/popover/src/popover.js +5 -1
- package/dist/components/scroll-area/dist/index.d.ts +6 -1
- package/dist/components/scroll-area/dist/index.js +2 -2
- package/dist/components/scroll-area/src/components/scroll-area-content.d.ts +4 -1
- package/dist/components/scroll-area/src/components/scroll-area-content.js +2 -2
- package/dist/components/scroll-area/src/scroll-area.d.ts +1 -1
- package/dist/components/select/dist/index.js +15 -47
- package/dist/components/slot/dist/index.d.ts +10 -6
- package/dist/components/slot/dist/index.js +51 -45
- package/dist/components/tooltip/dist/index.js +2 -7
- package/dist/components/virtual-select/dist/index.d.ts +48 -0
- package/dist/styles/components.css +220 -193
- package/dist/styles/markdown.css +362 -360
- package/package.json +1 -1
- package/dist/styles/preflight.css +0 -97
- package/dist/styles/stories.css +0 -5
- package/dist/styles/theme.css +0 -597
|
@@ -3,11 +3,12 @@ import { MenuValue } from '../../menus/src';
|
|
|
3
3
|
import { KbdKey } from '../../kbd/src';
|
|
4
4
|
import * as react from 'react';
|
|
5
5
|
|
|
6
|
-
interface ListContentProps extends React.
|
|
6
|
+
interface ListContentProps extends Omit<React.HTMLAttributes<HTMLElement>, "as"> {
|
|
7
|
+
as?: React.ElementType;
|
|
7
8
|
children: React.ReactNode;
|
|
8
9
|
parentId?: string;
|
|
9
10
|
}
|
|
10
|
-
declare const ListContent: react.ForwardRefExoticComponent<
|
|
11
|
+
declare const ListContent: react.ForwardRefExoticComponent<ListContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
11
12
|
|
|
12
13
|
declare const ListDivider: react.ForwardRefExoticComponent<Omit<react.HTMLProps<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
13
14
|
|
|
@@ -21,6 +22,7 @@ interface ListItemProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
21
22
|
shortcut?: string;
|
|
22
23
|
};
|
|
23
24
|
disabled?: boolean;
|
|
25
|
+
href?: string;
|
|
24
26
|
id?: string;
|
|
25
27
|
parentId?: string;
|
|
26
28
|
prefixElement?: ReactNode;
|
|
@@ -30,6 +32,8 @@ interface ListItemProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
30
32
|
modifier?: KbdKey | KbdKey[] | undefined;
|
|
31
33
|
};
|
|
32
34
|
suffixElement?: ReactNode;
|
|
35
|
+
target?: string;
|
|
36
|
+
rel?: string;
|
|
33
37
|
}
|
|
34
38
|
declare const ListItem: react.MemoExoticComponent<react.ForwardRefExoticComponent<ListItemProps & react.RefAttributes<HTMLElement>>>;
|
|
35
39
|
|
|
@@ -56,7 +60,8 @@ interface ListSubTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {
|
|
|
56
60
|
}
|
|
57
61
|
declare const ListSubTrigger: react.MemoExoticComponent<react.ForwardRefExoticComponent<ListSubTriggerProps & react.RefAttributes<HTMLButtonElement>>>;
|
|
58
62
|
|
|
59
|
-
interface ListProps extends Omit<HTMLProps<HTMLDivElement>, "size"> {
|
|
63
|
+
interface ListProps extends Omit<HTMLProps<HTMLDivElement>, "size" | "as"> {
|
|
64
|
+
as?: React.ElementType;
|
|
60
65
|
children: React.ReactNode;
|
|
61
66
|
interactive?: boolean;
|
|
62
67
|
selection?: boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export interface ListContentProps extends React.
|
|
1
|
+
export interface ListContentProps extends Omit<React.HTMLAttributes<HTMLElement>, "as"> {
|
|
2
|
+
as?: React.ElementType;
|
|
2
3
|
children: React.ReactNode;
|
|
3
4
|
parentId?: string;
|
|
4
5
|
}
|
|
5
|
-
export declare const ListContent: import('react').ForwardRefExoticComponent<
|
|
6
|
+
export declare const ListContent: import('react').ForwardRefExoticComponent<ListContentProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
@@ -4,7 +4,7 @@ import { ListContentTv } from "../tv.js";
|
|
|
4
4
|
import { useExpandContext, useStructureContext, LevelContext } from "../context/list-context.js";
|
|
5
5
|
import { tcx } from "../../../../shared/utils/tcx/tcx.js";
|
|
6
6
|
const ListContent = forwardRef((props, ref) => {
|
|
7
|
-
const { children, className, parentId, ...rest } = props;
|
|
7
|
+
const { as: As = "div", children, className, parentId, ...rest } = props;
|
|
8
8
|
const { isSubListExpanded } = useExpandContext();
|
|
9
9
|
const { itemsMap, shouldShowReferenceLine, size } = useStructureContext();
|
|
10
10
|
const level = useMemo(() => {
|
|
@@ -35,7 +35,7 @@ const ListContent = forwardRef((props, ref) => {
|
|
|
35
35
|
size
|
|
36
36
|
});
|
|
37
37
|
return /* @__PURE__ */ jsx(LevelContext.Provider, { value: { level: safeLevel }, children: /* @__PURE__ */ jsx(
|
|
38
|
-
|
|
38
|
+
As,
|
|
39
39
|
{
|
|
40
40
|
ref,
|
|
41
41
|
role: "group",
|
|
@@ -10,6 +10,7 @@ export interface ListItemProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
10
10
|
shortcut?: string;
|
|
11
11
|
};
|
|
12
12
|
disabled?: boolean;
|
|
13
|
+
href?: string;
|
|
13
14
|
id?: string;
|
|
14
15
|
parentId?: string;
|
|
15
16
|
prefixElement?: ReactNode;
|
|
@@ -19,5 +20,7 @@ export interface ListItemProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
19
20
|
modifier?: KbdKey | KbdKey[] | undefined;
|
|
20
21
|
};
|
|
21
22
|
suffixElement?: ReactNode;
|
|
23
|
+
target?: string;
|
|
24
|
+
rel?: string;
|
|
22
25
|
}
|
|
23
26
|
export declare const ListItem: import('react').MemoExoticComponent<import('react').ForwardRefExoticComponent<ListItemProps & import('react').RefAttributes<HTMLElement>>>;
|
|
@@ -5,7 +5,8 @@ import { ListDivider } from './components/list-divider';
|
|
|
5
5
|
import { ListItem } from './components/list-item';
|
|
6
6
|
import { ListLabel } from './components/list-label';
|
|
7
7
|
import { ListSubTrigger } from './components/list-sub-trigger';
|
|
8
|
-
export interface ListProps extends Omit<HTMLProps<HTMLDivElement>, "size"> {
|
|
8
|
+
export interface ListProps extends Omit<HTMLProps<HTMLDivElement>, "size" | "as"> {
|
|
9
|
+
as?: React.ElementType;
|
|
9
10
|
children: React.ReactNode;
|
|
10
11
|
interactive?: boolean;
|
|
11
12
|
selection?: boolean;
|
|
@@ -13,6 +13,7 @@ import { useActiveItemContext } from "./context/list-context.js";
|
|
|
13
13
|
import { tcx } from "../../../shared/utils/tcx/tcx.js";
|
|
14
14
|
const ListBase = forwardRef((props, ref) => {
|
|
15
15
|
const {
|
|
16
|
+
as,
|
|
16
17
|
children,
|
|
17
18
|
className,
|
|
18
19
|
interactive = true,
|
|
@@ -34,6 +35,7 @@ const ListBase = forwardRef((props, ref) => {
|
|
|
34
35
|
ListRoot,
|
|
35
36
|
{
|
|
36
37
|
ref,
|
|
38
|
+
as,
|
|
37
39
|
className,
|
|
38
40
|
...rest,
|
|
39
41
|
children
|
|
@@ -43,12 +45,12 @@ const ListBase = forwardRef((props, ref) => {
|
|
|
43
45
|
);
|
|
44
46
|
});
|
|
45
47
|
const ListRoot = forwardRef((props, ref) => {
|
|
46
|
-
const { children, className, ...rest } = props;
|
|
48
|
+
const { as: As = "div", children, className, ...rest } = props;
|
|
47
49
|
const handleKeyDown = useListKeyboard();
|
|
48
50
|
const { setActiveItem } = useActiveItemContext();
|
|
49
51
|
const tv = ListTv();
|
|
50
52
|
return /* @__PURE__ */ jsx(
|
|
51
|
-
|
|
53
|
+
As,
|
|
52
54
|
{
|
|
53
55
|
ref,
|
|
54
56
|
role: "list",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Button } from "../../button/dist/index.js";
|
|
2
|
-
import React__default, { memo, forwardRef,
|
|
2
|
+
import React__default, { memo, forwardRef, useContext, createContext, useMemo, startTransition, useCallback, useRef, useState, useEffect, Children, isValidElement, Fragment as Fragment$1 } from "react";
|
|
3
3
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
4
4
|
import { ChevronDownSmall, Check, ChevronRightSmall, ChevronUpSmall } from "@choiceform/icons-react";
|
|
5
5
|
import { Kbd } from "../../kbd/dist/index.js";
|
|
6
6
|
import { flushSync } from "react-dom";
|
|
7
7
|
import { SearchInput } from "../../search-input/dist/index.js";
|
|
8
8
|
import { Slot } from "../../slot/dist/index.js";
|
|
9
|
-
import { useEventCallback } from "usehooks-ts";
|
|
10
9
|
import { Input } from "../../input/dist/index.js";
|
|
10
|
+
import { useEventCallback } from "usehooks-ts";
|
|
11
11
|
import { useListItem, useFloatingTree, useFloatingNodeId, useFloatingParentNodeId } from "@floating-ui/react";
|
|
12
12
|
import { useIsomorphicLayoutEffect } from "../../../shared/hooks/use-isomorphic-layout-effect/use-isomorphic-layout-effect.js";
|
|
13
13
|
import { tcv, tcx } from "../../../shared/utils/tcx/tcx.js";
|
|
@@ -638,29 +638,24 @@ var MenuTrigger = memo(
|
|
|
638
638
|
isEmpty: empty,
|
|
639
639
|
size: size2
|
|
640
640
|
});
|
|
641
|
-
const
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
selected,
|
|
653
|
-
disabled,
|
|
654
|
-
onClick: handleClick
|
|
655
|
-
};
|
|
641
|
+
const slotProps = enterForwardedProps ? {
|
|
642
|
+
...rest,
|
|
643
|
+
active,
|
|
644
|
+
selected,
|
|
645
|
+
disabled,
|
|
646
|
+
onClick: (e) => {
|
|
647
|
+
e.stopPropagation();
|
|
648
|
+
e.preventDefault();
|
|
649
|
+
if (rest.onClick) {
|
|
650
|
+
rest.onClick(e);
|
|
651
|
+
}
|
|
656
652
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
}, [enterForwardedProps, rest, active, selected, disabled, handleClick]);
|
|
653
|
+
} : {
|
|
654
|
+
...rest,
|
|
655
|
+
...active !== void 0 ? { "data-active": active } : {},
|
|
656
|
+
...selected !== void 0 ? { "data-selected": selected } : {},
|
|
657
|
+
...disabled !== void 0 ? { "data-disabled": disabled } : {}
|
|
658
|
+
};
|
|
664
659
|
return asChild ? /* @__PURE__ */ jsx(
|
|
665
660
|
Slot,
|
|
666
661
|
{
|
|
@@ -722,7 +717,7 @@ var MenuValue = memo(({ children, ...rest }) => {
|
|
|
722
717
|
});
|
|
723
718
|
MenuValue.displayName = "MenuValue";
|
|
724
719
|
var MenusBase = forwardRef((props, ref) => {
|
|
725
|
-
const { children, className, matchTriggerWidth, variant
|
|
720
|
+
const { children, className, matchTriggerWidth, variant, ...rest } = props;
|
|
726
721
|
const tv = MenusTv({ matchTriggerWidth, variant });
|
|
727
722
|
const processChildren = (children2) => {
|
|
728
723
|
return Children.map(children2, (child) => {
|
|
@@ -45,7 +45,8 @@ interface ModalTextareaProps extends Omit<TextareaProps, "children" | "label"> {
|
|
|
45
45
|
}
|
|
46
46
|
declare const ModalTextarea: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<ModalTextareaProps, "ref"> & react.RefAttributes<HTMLTextAreaElement>>>;
|
|
47
47
|
|
|
48
|
-
interface ModalProps extends Omit<HTMLProps<HTMLDivElement>, "title"> {
|
|
48
|
+
interface ModalProps extends Omit<HTMLProps<HTMLDivElement>, "title" | "as"> {
|
|
49
|
+
as?: React.ElementType;
|
|
49
50
|
className?: string;
|
|
50
51
|
onClose?: () => void;
|
|
51
52
|
title?: ReactNode;
|
|
@@ -186,10 +186,10 @@ var ModalTextarea = memo(
|
|
|
186
186
|
);
|
|
187
187
|
ModalTextarea.displayName = "ModalTextarea";
|
|
188
188
|
var ModalBase = forwardRef((props, ref) => {
|
|
189
|
-
const { className, title, onClose, ...rest } = props;
|
|
189
|
+
const { as: As = "div", className, title, onClose, ...rest } = props;
|
|
190
190
|
const tv = ModalTv();
|
|
191
191
|
return /* @__PURE__ */ jsx(
|
|
192
|
-
|
|
192
|
+
As,
|
|
193
193
|
{
|
|
194
194
|
ref,
|
|
195
195
|
className: tcx(tv.root(), className),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HTMLProps, ReactNode } from 'react';
|
|
2
2
|
import { ModalBackdrop, ModalContent, ModalFooter, ModalHeader, ModalInput, ModalSelect, ModalTextarea } from './components';
|
|
3
|
-
interface ModalProps extends Omit<HTMLProps<HTMLDivElement>, "title"> {
|
|
3
|
+
interface ModalProps extends Omit<HTMLProps<HTMLDivElement>, "title" | "as"> {
|
|
4
|
+
as?: React.ElementType;
|
|
4
5
|
className?: string;
|
|
5
6
|
onClose?: () => void;
|
|
6
7
|
title?: ReactNode;
|
|
@@ -10,10 +10,10 @@ import { ModalTextarea } from "./components/modal-textarea.js";
|
|
|
10
10
|
import { ModalBackdrop } from "./components/modal-backdrop.js";
|
|
11
11
|
import { tcx } from "../../../shared/utils/tcx/tcx.js";
|
|
12
12
|
const ModalBase = forwardRef((props, ref) => {
|
|
13
|
-
const { className, title, onClose, ...rest } = props;
|
|
13
|
+
const { as: As = "div", className, title, onClose, ...rest } = props;
|
|
14
14
|
const tv = ModalTv();
|
|
15
15
|
return /* @__PURE__ */ jsx(
|
|
16
|
-
|
|
16
|
+
As,
|
|
17
17
|
{
|
|
18
18
|
ref,
|
|
19
19
|
className: tcx(tv.root(), className),
|
|
@@ -740,21 +740,6 @@ var MultiSelectComponent = memo(
|
|
|
740
740
|
chipVariant,
|
|
741
741
|
valueDisabledMap
|
|
742
742
|
]);
|
|
743
|
-
const handleTouchStart = useEventCallback(() => {
|
|
744
|
-
setTouch(true);
|
|
745
|
-
});
|
|
746
|
-
const handlePointerMove = useEventCallback(({ pointerType }) => {
|
|
747
|
-
if (pointerType !== "touch") {
|
|
748
|
-
setTouch(false);
|
|
749
|
-
}
|
|
750
|
-
});
|
|
751
|
-
const slotProps = useMemo(() => {
|
|
752
|
-
return getReferenceProps({
|
|
753
|
-
disabled,
|
|
754
|
-
onTouchStart: handleTouchStart,
|
|
755
|
-
onPointerMove: handlePointerMove
|
|
756
|
-
});
|
|
757
|
-
}, [getReferenceProps, disabled, handleTouchStart, handlePointerMove]);
|
|
758
743
|
if (!triggerElement || !contentElement) {
|
|
759
744
|
console.error(
|
|
760
745
|
"MultiSelect requires both MultiSelect.Trigger and MultiSelect.Content components as children"
|
|
@@ -766,7 +751,17 @@ var MultiSelectComponent = memo(
|
|
|
766
751
|
Slot,
|
|
767
752
|
{
|
|
768
753
|
ref: refs.setReference,
|
|
769
|
-
...
|
|
754
|
+
...getReferenceProps({
|
|
755
|
+
disabled,
|
|
756
|
+
onTouchStart() {
|
|
757
|
+
setTouch(true);
|
|
758
|
+
},
|
|
759
|
+
onPointerMove({ pointerType }) {
|
|
760
|
+
if (pointerType !== "touch") {
|
|
761
|
+
setTouch(false);
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
}),
|
|
770
765
|
children: enhancedTriggerElement
|
|
771
766
|
}
|
|
772
767
|
),
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { ModalHeaderProps, ModalContent, ModalFooter } from '../../modal/src';
|
|
2
2
|
import { FloatingFocusManagerProps, OffsetOptions, Placement } from '@floating-ui/react';
|
|
3
|
-
import { default as
|
|
4
|
-
import * as
|
|
3
|
+
import { default as React__default } from 'react';
|
|
4
|
+
import * as React$1 from 'react';
|
|
5
5
|
|
|
6
|
-
declare const PopoverHeader:
|
|
6
|
+
declare const PopoverHeader: React$1.MemoExoticComponent<React$1.ForwardRefExoticComponent<Omit<ModalHeaderProps, "ref"> & React$1.RefAttributes<HTMLDivElement>>>;
|
|
7
7
|
|
|
8
|
-
declare const PopoverTrigger:
|
|
8
|
+
declare const PopoverTrigger: React$1.MemoExoticComponent<React$1.ForwardRefExoticComponent<{
|
|
9
9
|
children: React.ReactNode;
|
|
10
|
-
} &
|
|
10
|
+
} & React$1.RefAttributes<HTMLElement>>>;
|
|
11
11
|
|
|
12
|
-
interface PopoverProps {
|
|
12
|
+
interface PopoverProps extends Omit<React__default.HTMLAttributes<HTMLElement>, "title"> {
|
|
13
|
+
as?: React__default.ElementType;
|
|
13
14
|
autoSize?: boolean;
|
|
14
15
|
autoUpdate?: boolean;
|
|
15
|
-
children?:
|
|
16
|
+
children?: React__default.ReactNode;
|
|
16
17
|
className?: string;
|
|
17
18
|
closeOnEscape?: boolean;
|
|
18
|
-
contentRef?:
|
|
19
|
+
contentRef?: React__default.RefObject<HTMLDivElement>;
|
|
19
20
|
defaultOpen?: boolean;
|
|
20
21
|
delay?: {
|
|
21
22
|
close?: number;
|
|
@@ -39,9 +40,9 @@ interface PopoverProps {
|
|
|
39
40
|
* If not specified, will auto-detect from triggerRef's ownerDocument.
|
|
40
41
|
*/
|
|
41
42
|
root?: HTMLElement | null;
|
|
42
|
-
triggerRef?:
|
|
43
|
+
triggerRef?: React__default.RefObject<HTMLElement>;
|
|
43
44
|
}
|
|
44
|
-
interface PopoverComponent extends
|
|
45
|
+
interface PopoverComponent extends React__default.FC<PopoverProps> {
|
|
45
46
|
Content: typeof ModalContent;
|
|
46
47
|
Footer: typeof ModalFooter;
|
|
47
48
|
Header: typeof PopoverHeader;
|
|
@@ -405,6 +405,7 @@ function useFloatingPopover({
|
|
|
405
405
|
var PORTAL_ROOT_ID = "floating-popover-root";
|
|
406
406
|
var DEFAULT_OFFSET = { mainAxis: 8, crossAxis: 0 };
|
|
407
407
|
var DragPopover = memo(function DragPopover2({
|
|
408
|
+
as,
|
|
408
409
|
className,
|
|
409
410
|
children,
|
|
410
411
|
triggerRef: externalTriggerRef,
|
|
@@ -430,7 +431,8 @@ var DragPopover = memo(function DragPopover2({
|
|
|
430
431
|
autoSize = true,
|
|
431
432
|
rememberPosition = false,
|
|
432
433
|
maxWidth,
|
|
433
|
-
matchTriggerWidth = false
|
|
434
|
+
matchTriggerWidth = false,
|
|
435
|
+
...restProps
|
|
434
436
|
}) {
|
|
435
437
|
const titleId = useId();
|
|
436
438
|
const descriptionId = useId();
|
|
@@ -564,6 +566,7 @@ var DragPopover = memo(function DragPopover2({
|
|
|
564
566
|
Modal,
|
|
565
567
|
{
|
|
566
568
|
ref: handleFloatingRef,
|
|
569
|
+
as,
|
|
567
570
|
style: combinedStyles,
|
|
568
571
|
className: tcx(matchTriggerWidth && "max-w-none", className),
|
|
569
572
|
"data-state": floating.positionReady ? "open" : "opening",
|
|
@@ -571,6 +574,7 @@ var DragPopover = memo(function DragPopover2({
|
|
|
571
574
|
"data-draggable": draggable ? "true" : void 0,
|
|
572
575
|
"data-closing": floating.isClosing ? "true" : void 0,
|
|
573
576
|
...floating.getFloatingProps(),
|
|
577
|
+
...restProps,
|
|
574
578
|
role: "dialog",
|
|
575
579
|
"aria-modal": "true",
|
|
576
580
|
"aria-labelledby": titleId,
|
|
@@ -2,7 +2,8 @@ import { ModalContent, ModalFooter } from '../../modal/src';
|
|
|
2
2
|
import { FloatingFocusManagerProps, Placement, OffsetOptions } from '@floating-ui/react';
|
|
3
3
|
import { default as React } from 'react';
|
|
4
4
|
import { PopoverHeader, PopoverTrigger } from './components';
|
|
5
|
-
export interface PopoverProps {
|
|
5
|
+
export interface PopoverProps extends Omit<React.HTMLAttributes<HTMLElement>, "title"> {
|
|
6
|
+
as?: React.ElementType;
|
|
6
7
|
autoSize?: boolean;
|
|
7
8
|
autoUpdate?: boolean;
|
|
8
9
|
children?: React.ReactNode;
|
|
@@ -14,6 +14,7 @@ import { tcx } from "../../../shared/utils/tcx/tcx.js";
|
|
|
14
14
|
const PORTAL_ROOT_ID = "floating-popover-root";
|
|
15
15
|
const DEFAULT_OFFSET = { mainAxis: 8, crossAxis: 0 };
|
|
16
16
|
const DragPopover = memo(function DragPopover2({
|
|
17
|
+
as,
|
|
17
18
|
className,
|
|
18
19
|
children,
|
|
19
20
|
triggerRef: externalTriggerRef,
|
|
@@ -39,7 +40,8 @@ const DragPopover = memo(function DragPopover2({
|
|
|
39
40
|
autoSize = true,
|
|
40
41
|
rememberPosition = false,
|
|
41
42
|
maxWidth,
|
|
42
|
-
matchTriggerWidth = false
|
|
43
|
+
matchTriggerWidth = false,
|
|
44
|
+
...restProps
|
|
43
45
|
}) {
|
|
44
46
|
const titleId = useId();
|
|
45
47
|
const descriptionId = useId();
|
|
@@ -173,6 +175,7 @@ const DragPopover = memo(function DragPopover2({
|
|
|
173
175
|
Modal,
|
|
174
176
|
{
|
|
175
177
|
ref: handleFloatingRef,
|
|
178
|
+
as,
|
|
176
179
|
style: combinedStyles,
|
|
177
180
|
className: tcx(matchTriggerWidth && "max-w-none", className),
|
|
178
181
|
"data-state": floating.positionReady ? "open" : "opening",
|
|
@@ -180,6 +183,7 @@ const DragPopover = memo(function DragPopover2({
|
|
|
180
183
|
"data-draggable": draggable ? "true" : void 0,
|
|
181
184
|
"data-closing": floating.isClosing ? "true" : void 0,
|
|
182
185
|
...floating.getFloatingProps(),
|
|
186
|
+
...restProps,
|
|
183
187
|
role: "dialog",
|
|
184
188
|
"aria-modal": "true",
|
|
185
189
|
"aria-labelledby": titleId,
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import { default as react__default } from 'react';
|
|
1
2
|
import * as react from 'react';
|
|
2
3
|
|
|
4
|
+
interface ScrollAreaContentProps extends Omit<react__default.HTMLAttributes<HTMLElement>, "as"> {
|
|
5
|
+
as?: react__default.ElementType;
|
|
6
|
+
}
|
|
7
|
+
|
|
3
8
|
type ScrollbarVisibilityType = "auto" | "always" | "scroll" | "hover";
|
|
4
9
|
type ScrollbarMode = "default" | "padding-y" | "padding-x" | "padding-b" | "padding-t" | "padding-l" | "padding-r";
|
|
5
10
|
type ScrollAreaVariant = "default" | "light" | "dark";
|
|
@@ -49,7 +54,7 @@ interface ThumbProps extends React.ComponentPropsWithoutRef<"div"> {
|
|
|
49
54
|
declare const ScrollArea: react.ForwardRefExoticComponent<ScrollAreaProps & react.RefAttributes<HTMLDivElement>> & {
|
|
50
55
|
Root: react.ForwardRefExoticComponent<ScrollAreaProps & react.RefAttributes<HTMLDivElement>>;
|
|
51
56
|
Viewport: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
52
|
-
Content: react.ForwardRefExoticComponent<
|
|
57
|
+
Content: react.ForwardRefExoticComponent<ScrollAreaContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
53
58
|
Scrollbar: react.ForwardRefExoticComponent<ScrollbarProps & react.RefAttributes<HTMLDivElement>>;
|
|
54
59
|
Thumb: react.ForwardRefExoticComponent<ThumbProps & react.RefAttributes<HTMLDivElement>>;
|
|
55
60
|
Corner: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
@@ -917,7 +917,7 @@ var ScrollAreaViewport = forwardRef(
|
|
|
917
917
|
);
|
|
918
918
|
ScrollAreaViewport.displayName = "ScrollArea.Viewport";
|
|
919
919
|
var ScrollAreaContent = forwardRef(
|
|
920
|
-
({ className, children, ...props }, ref) => {
|
|
920
|
+
({ as: As = "div", className, children, ...props }, ref) => {
|
|
921
921
|
const { setContent, orientation } = useScrollAreaContext();
|
|
922
922
|
const setRef = useCallback(
|
|
923
923
|
(node) => {
|
|
@@ -943,7 +943,7 @@ var ScrollAreaContent = forwardRef(
|
|
|
943
943
|
}
|
|
944
944
|
}, [orientation]);
|
|
945
945
|
return /* @__PURE__ */ jsx(
|
|
946
|
-
|
|
946
|
+
As,
|
|
947
947
|
{
|
|
948
948
|
ref: setRef,
|
|
949
949
|
className: tcx(sizeClasses, className),
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
export
|
|
2
|
+
export interface ScrollAreaContentProps extends Omit<React.HTMLAttributes<HTMLElement>, "as"> {
|
|
3
|
+
as?: React.ElementType;
|
|
4
|
+
}
|
|
5
|
+
export declare const ScrollAreaContent: React.ForwardRefExoticComponent<ScrollAreaContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -3,7 +3,7 @@ import { forwardRef, useCallback, useMemo } from "react";
|
|
|
3
3
|
import { useScrollAreaContext } from "../context/scroll-area-context.js";
|
|
4
4
|
import { tcx } from "../../../../shared/utils/tcx/tcx.js";
|
|
5
5
|
const ScrollAreaContent = forwardRef(
|
|
6
|
-
({ className, children, ...props }, ref) => {
|
|
6
|
+
({ as: As = "div", className, children, ...props }, ref) => {
|
|
7
7
|
const { setContent, orientation } = useScrollAreaContext();
|
|
8
8
|
const setRef = useCallback(
|
|
9
9
|
(node) => {
|
|
@@ -29,7 +29,7 @@ const ScrollAreaContent = forwardRef(
|
|
|
29
29
|
}
|
|
30
30
|
}, [orientation]);
|
|
31
31
|
return /* @__PURE__ */ jsx(
|
|
32
|
-
|
|
32
|
+
As,
|
|
33
33
|
{
|
|
34
34
|
ref: setRef,
|
|
35
35
|
className: tcx(sizeClasses, className),
|
|
@@ -2,7 +2,7 @@ import { ScrollAreaProps, ScrollbarProps, ThumbProps } from './types';
|
|
|
2
2
|
export declare const ScrollArea: import('react').ForwardRefExoticComponent<ScrollAreaProps & import('react').RefAttributes<HTMLDivElement>> & {
|
|
3
3
|
Root: import('react').ForwardRefExoticComponent<ScrollAreaProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
4
4
|
Viewport: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
5
|
-
Content: import('react').ForwardRefExoticComponent<
|
|
5
|
+
Content: import('react').ForwardRefExoticComponent<import('./components/scroll-area-content').ScrollAreaContentProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
6
6
|
Scrollbar: import('react').ForwardRefExoticComponent<ScrollbarProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
7
7
|
Thumb: import('react').ForwardRefExoticComponent<ThumbProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
8
8
|
Corner: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
@@ -94,7 +94,6 @@ var SelectComponent = memo(function SelectComponent2(props) {
|
|
|
94
94
|
const allowMouseUpRef = useRef(true);
|
|
95
95
|
const selectTimeoutRef = useRef();
|
|
96
96
|
const scrollRef = useRef(null);
|
|
97
|
-
const isMouseDownFromTriggerRef = useRef(false);
|
|
98
97
|
const refs = useMemo(
|
|
99
98
|
() => ({
|
|
100
99
|
list: listRef,
|
|
@@ -103,8 +102,7 @@ var SelectComponent = memo(function SelectComponent2(props) {
|
|
|
103
102
|
allowSelect: allowSelectRef,
|
|
104
103
|
allowMouseUp: allowMouseUpRef,
|
|
105
104
|
selectTimeout: selectTimeoutRef,
|
|
106
|
-
scroll: scrollRef
|
|
107
|
-
isMouseDownFromTrigger: isMouseDownFromTriggerRef
|
|
105
|
+
scroll: scrollRef
|
|
108
106
|
}),
|
|
109
107
|
[]
|
|
110
108
|
// refs are stable references, no dependencies needed
|
|
@@ -234,7 +232,6 @@ var SelectComponent = memo(function SelectComponent2(props) {
|
|
|
234
232
|
} else {
|
|
235
233
|
refs.allowSelect.current = false;
|
|
236
234
|
refs.allowMouseUp.current = true;
|
|
237
|
-
refs.isMouseDownFromTrigger.current = false;
|
|
238
235
|
}
|
|
239
236
|
}, [isControlledOpen]);
|
|
240
237
|
const { handleArrowScroll, handleArrowHide, scrollProps } = useMenuScroll({
|
|
@@ -322,13 +319,6 @@ var SelectComponent = memo(function SelectComponent2(props) {
|
|
|
322
319
|
},
|
|
323
320
|
onMouseUp: () => {
|
|
324
321
|
if (!refs.allowMouseUp.current || customActive) return;
|
|
325
|
-
if (refs.isMouseDownFromTrigger.current) {
|
|
326
|
-
refs.isMouseDownFromTrigger.current = false;
|
|
327
|
-
if (!isDisabled) {
|
|
328
|
-
handleSelect(currentSelectableIndex);
|
|
329
|
-
}
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
322
|
if (refs.allowSelect.current) {
|
|
333
323
|
handleSelect(currentSelectableIndex);
|
|
334
324
|
}
|
|
@@ -373,38 +363,6 @@ var SelectComponent = memo(function SelectComponent2(props) {
|
|
|
373
363
|
size: sizeProp
|
|
374
364
|
});
|
|
375
365
|
}, [triggerElement, isControlledOpen, sizeProp]);
|
|
376
|
-
const handleTouchStart = useEventCallback(() => {
|
|
377
|
-
setTouch(true);
|
|
378
|
-
});
|
|
379
|
-
const handleMouseDown = useEventCallback(() => {
|
|
380
|
-
refs.isMouseDownFromTrigger.current = true;
|
|
381
|
-
});
|
|
382
|
-
const handlePointerMove = useEventCallback(({ pointerType }) => {
|
|
383
|
-
if (pointerType !== "touch") {
|
|
384
|
-
setTouch(false);
|
|
385
|
-
}
|
|
386
|
-
});
|
|
387
|
-
const slotProps = useMemo(() => {
|
|
388
|
-
return {
|
|
389
|
-
"aria-haspopup": "listbox",
|
|
390
|
-
"aria-expanded": isControlledOpen,
|
|
391
|
-
"aria-controls": menuId,
|
|
392
|
-
...getReferenceProps({
|
|
393
|
-
disabled,
|
|
394
|
-
onTouchStart: handleTouchStart,
|
|
395
|
-
onMouseDown: handleMouseDown,
|
|
396
|
-
onPointerMove: handlePointerMove
|
|
397
|
-
})
|
|
398
|
-
};
|
|
399
|
-
}, [
|
|
400
|
-
isControlledOpen,
|
|
401
|
-
menuId,
|
|
402
|
-
getReferenceProps,
|
|
403
|
-
disabled,
|
|
404
|
-
handleTouchStart,
|
|
405
|
-
handleMouseDown,
|
|
406
|
-
handlePointerMove
|
|
407
|
-
]);
|
|
408
366
|
if (!triggerElement || !contentElement) {
|
|
409
367
|
console.error("Select requires both Select.Trigger and Select.Content components as children");
|
|
410
368
|
return null;
|
|
@@ -414,7 +372,20 @@ var SelectComponent = memo(function SelectComponent2(props) {
|
|
|
414
372
|
Slot,
|
|
415
373
|
{
|
|
416
374
|
ref: floating.refs.setReference,
|
|
417
|
-
|
|
375
|
+
"aria-haspopup": "listbox",
|
|
376
|
+
"aria-expanded": isControlledOpen,
|
|
377
|
+
"aria-controls": menuId,
|
|
378
|
+
...getReferenceProps({
|
|
379
|
+
disabled,
|
|
380
|
+
onTouchStart() {
|
|
381
|
+
setTouch(true);
|
|
382
|
+
},
|
|
383
|
+
onPointerMove({ pointerType }) {
|
|
384
|
+
if (pointerType !== "touch") {
|
|
385
|
+
setTouch(false);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}),
|
|
418
389
|
children: enhancedTriggerElement
|
|
419
390
|
}
|
|
420
391
|
),
|
|
@@ -428,9 +399,6 @@ var SelectComponent = memo(function SelectComponent2(props) {
|
|
|
428
399
|
{
|
|
429
400
|
lockScroll: !touch,
|
|
430
401
|
className: tcx("z-menu", focusManagerProps.modal ? "" : "pointer-events-none"),
|
|
431
|
-
onMouseUp: () => {
|
|
432
|
-
refs.isMouseDownFromTrigger.current = false;
|
|
433
|
-
},
|
|
434
402
|
children: /* @__PURE__ */ jsx(
|
|
435
403
|
FloatingFocusManager,
|
|
436
404
|
{
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { default as React } from 'react';
|
|
3
2
|
interface SlotProps extends React.HTMLAttributes<HTMLElement> {
|
|
4
3
|
children?: React.ReactNode;
|
|
5
4
|
}
|
|
6
5
|
/**
|
|
7
|
-
* Slot component
|
|
6
|
+
* Optimized Slot component implementation
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Compared to performance optimization of @radix-ui/react-slot:
|
|
9
|
+
* 1. Use useMemo to cache children processing results
|
|
10
|
+
* 2. Simplify props merging logic
|
|
11
|
+
* 3. Avoid unnecessary deep traversal
|
|
12
|
+
* 4. Better type safety
|
|
11
13
|
*/
|
|
12
14
|
declare const Slot: React.ForwardRefExoticComponent<SlotProps & React.RefAttributes<HTMLElement>>;
|
|
13
15
|
/**
|
|
14
16
|
* Hook version of Slot logic
|
|
17
|
+
* Used for scenarios that require more granular control
|
|
15
18
|
*/
|
|
16
19
|
declare function useSlot(children: React.ReactNode, slotProps: Record<string, unknown>, forwardedRef?: React.Ref<unknown>): string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined;
|
|
17
20
|
/**
|
|
18
|
-
* asChild
|
|
21
|
+
* Performance optimized asChild mode Hook
|
|
22
|
+
* Used to replace `const Component = asChild ? Slot : "button"` mode
|
|
19
23
|
*/
|
|
20
24
|
declare function useAsChild<T extends React.ElementType = "button">(asChild: boolean | undefined, defaultElement: T): T | typeof Slot;
|
|
21
25
|
|