@tecsinapse/cortex-react 1.9.24 → 1.9.25-beta.1
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/cjs/components/DatePicker/DateField.js +22 -15
- package/dist/cjs/components/Popover/Provider.js +7 -1
- package/dist/cjs/components/Select/Root.js +9 -1
- package/dist/cjs/components/Select/Trigger.js +23 -3
- package/dist/cjs/hooks/useFloatingElement.js +3 -2
- package/dist/esm/components/DatePicker/DateField.js +22 -15
- package/dist/esm/components/Popover/Provider.js +7 -1
- package/dist/esm/components/Select/Root.js +9 -1
- package/dist/esm/components/Select/Trigger.js +24 -4
- package/dist/esm/hooks/useFloatingElement.js +3 -2
- package/dist/types/components/Popover/Provider.d.ts +3 -1
- package/dist/types/components/Popover/index.d.ts +1 -1
- package/dist/types/hooks/useFloatingElement.d.ts +2 -1
- package/package.json +2 -2
|
@@ -6,6 +6,9 @@ var reactAria = require('react-aria');
|
|
|
6
6
|
var reactStately = require('react-stately');
|
|
7
7
|
var DateSegment = require('./DateSegment.js');
|
|
8
8
|
|
|
9
|
+
const formatLiteralSegment = (text) => {
|
|
10
|
+
return text.includes(",") ? text.replace(/,/g, " ") : text;
|
|
11
|
+
};
|
|
9
12
|
const DateField = ({
|
|
10
13
|
onClickDate,
|
|
11
14
|
onClickTime,
|
|
@@ -23,11 +26,18 @@ const DateField = ({
|
|
|
23
26
|
state,
|
|
24
27
|
ref
|
|
25
28
|
);
|
|
26
|
-
const handleOnClickSegment = React.useCallback(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const handleOnClickSegment = React.useCallback(
|
|
30
|
+
(segment) => {
|
|
31
|
+
if (!segment.isEditable || state.isDisabled) return;
|
|
32
|
+
if (["hour", "minute", "second"].includes(segment.type)) {
|
|
33
|
+
onClickTime?.();
|
|
34
|
+
}
|
|
35
|
+
if (["year", "month", "day"].includes(segment.type)) {
|
|
36
|
+
onClickDate?.();
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
[onClickDate, onClickTime, state.isDisabled]
|
|
40
|
+
);
|
|
31
41
|
return /* @__PURE__ */ React.createElement(
|
|
32
42
|
"div",
|
|
33
43
|
{
|
|
@@ -36,16 +46,13 @@ const DateField = ({
|
|
|
36
46
|
className: "flex flex-row",
|
|
37
47
|
"data-testid": "date-field-div"
|
|
38
48
|
},
|
|
39
|
-
state.segments.map((segment, i) =>
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
key: i,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
},
|
|
47
|
-
/* @__PURE__ */ React.createElement(DateSegment.DateSegment, { segment, state })
|
|
48
|
-
))
|
|
49
|
+
state.segments.map((segment, i) => {
|
|
50
|
+
if (segment.type === "literal") {
|
|
51
|
+
const text = formatLiteralSegment(segment.text);
|
|
52
|
+
return /* @__PURE__ */ React.createElement("span", { key: i, style: { whiteSpace: "pre" } }, text);
|
|
53
|
+
}
|
|
54
|
+
return /* @__PURE__ */ React.createElement("div", { key: i, onClick: () => handleOnClickSegment(segment) }, /* @__PURE__ */ React.createElement(DateSegment.DateSegment, { segment, state }));
|
|
55
|
+
})
|
|
49
56
|
);
|
|
50
57
|
};
|
|
51
58
|
|
|
@@ -14,9 +14,15 @@ const PopoverProvider = ({
|
|
|
14
14
|
children,
|
|
15
15
|
placement,
|
|
16
16
|
trigger,
|
|
17
|
+
fallbackPlacements,
|
|
17
18
|
...props
|
|
18
19
|
}) => {
|
|
19
|
-
const floatingLogic = useFloatingElement.useFloatingElement({
|
|
20
|
+
const floatingLogic = useFloatingElement.useFloatingElement({
|
|
21
|
+
placement,
|
|
22
|
+
trigger,
|
|
23
|
+
fallbackPlacements,
|
|
24
|
+
...props
|
|
25
|
+
});
|
|
20
26
|
return /* @__PURE__ */ React.createElement(Context.Context.Provider, { value: { ...floatingLogic } }, children);
|
|
21
27
|
};
|
|
22
28
|
|
|
@@ -12,7 +12,15 @@ const SelectRoot = ({
|
|
|
12
12
|
labelExtractor,
|
|
13
13
|
className
|
|
14
14
|
}) => {
|
|
15
|
-
return /* @__PURE__ */ React.createElement(
|
|
15
|
+
return /* @__PURE__ */ React.createElement(
|
|
16
|
+
index.Popover.Root,
|
|
17
|
+
{
|
|
18
|
+
fallbackPlacements: ["bottom", "top"],
|
|
19
|
+
placement: "bottom",
|
|
20
|
+
trigger: "click"
|
|
21
|
+
},
|
|
22
|
+
/* @__PURE__ */ React.createElement(context.SelectContext.Provider, { value: { value, keyExtractor, labelExtractor } }, /* @__PURE__ */ React.createElement(Content.Content, { className }, children))
|
|
23
|
+
);
|
|
16
24
|
};
|
|
17
25
|
|
|
18
26
|
exports.SelectRoot = SelectRoot;
|
|
@@ -5,6 +5,7 @@ var React = require('react');
|
|
|
5
5
|
var io5 = require('react-icons/io5');
|
|
6
6
|
var index = require('../Popover/index.js');
|
|
7
7
|
var context = require('./context.js');
|
|
8
|
+
var clsx = require('clsx');
|
|
8
9
|
|
|
9
10
|
const { button } = cortexCore.selectVariants();
|
|
10
11
|
const SelectTrigger = ({
|
|
@@ -23,7 +24,8 @@ const SelectTrigger = ({
|
|
|
23
24
|
return labelExtractor(value);
|
|
24
25
|
}, [label, value]);
|
|
25
26
|
const { className } = rest;
|
|
26
|
-
|
|
27
|
+
const hasValue = Array.isArray(value) ? value.length > 0 : !!value;
|
|
28
|
+
return /* @__PURE__ */ React.createElement(index.Popover.Trigger, { disabled }, /* @__PURE__ */ React.createElement("div", { className: "w-full gap-mili" }, /* @__PURE__ */ React.createElement(
|
|
27
29
|
"button",
|
|
28
30
|
{
|
|
29
31
|
className: button({ className }),
|
|
@@ -31,9 +33,27 @@ const SelectTrigger = ({
|
|
|
31
33
|
role: "button",
|
|
32
34
|
...rest
|
|
33
35
|
},
|
|
34
|
-
/* @__PURE__ */ React.createElement(
|
|
36
|
+
/* @__PURE__ */ React.createElement(
|
|
37
|
+
"span",
|
|
38
|
+
{
|
|
39
|
+
className: clsx({ "mt-mili": hasValue && label }),
|
|
40
|
+
"data-testid": "select-placeholder"
|
|
41
|
+
},
|
|
42
|
+
_placeholder
|
|
43
|
+
),
|
|
35
44
|
/* @__PURE__ */ React.createElement(io5.IoChevronDownOutline, null)
|
|
36
|
-
)
|
|
45
|
+
), hasValue && label ? /* @__PURE__ */ React.createElement(
|
|
46
|
+
"label",
|
|
47
|
+
{
|
|
48
|
+
htmlFor: "select-trigger",
|
|
49
|
+
className: clsx(
|
|
50
|
+
"ml-centi",
|
|
51
|
+
cortexCore.labelStyle({ intent: "default", placeholder })
|
|
52
|
+
),
|
|
53
|
+
"data-testid": "input-label"
|
|
54
|
+
},
|
|
55
|
+
label
|
|
56
|
+
) : /* @__PURE__ */ React.createElement(React.Fragment, null)));
|
|
37
57
|
};
|
|
38
58
|
|
|
39
59
|
exports.SelectTrigger = SelectTrigger;
|
|
@@ -10,7 +10,8 @@ const useFloatingElement = ({
|
|
|
10
10
|
arrowRef,
|
|
11
11
|
controlled,
|
|
12
12
|
isOpen,
|
|
13
|
-
setIsOpen
|
|
13
|
+
setIsOpen,
|
|
14
|
+
fallbackPlacements = ["right", "bottom", "left", "top"]
|
|
14
15
|
}) => {
|
|
15
16
|
const [openUncontrolled, onOpenChangeUncontrolled] = React.useState(false);
|
|
16
17
|
const { x, y, strategy, refs, update, context, floatingStyles } = react.useFloating(
|
|
@@ -23,7 +24,7 @@ const useFloatingElement = ({
|
|
|
23
24
|
react.offset(10),
|
|
24
25
|
react.flip({
|
|
25
26
|
flipAlignment: true,
|
|
26
|
-
fallbackPlacements
|
|
27
|
+
fallbackPlacements
|
|
27
28
|
}),
|
|
28
29
|
react.shift(),
|
|
29
30
|
...arrowRef ? [react.arrow({ element: arrowRef })] : []
|
|
@@ -4,6 +4,9 @@ import { useLocale, useDateField } from 'react-aria';
|
|
|
4
4
|
import { useDateFieldState } from 'react-stately';
|
|
5
5
|
import { DateSegment } from './DateSegment.js';
|
|
6
6
|
|
|
7
|
+
const formatLiteralSegment = (text) => {
|
|
8
|
+
return text.includes(",") ? text.replace(/,/g, " ") : text;
|
|
9
|
+
};
|
|
7
10
|
const DateField = ({
|
|
8
11
|
onClickDate,
|
|
9
12
|
onClickTime,
|
|
@@ -21,11 +24,18 @@ const DateField = ({
|
|
|
21
24
|
state,
|
|
22
25
|
ref
|
|
23
26
|
);
|
|
24
|
-
const handleOnClickSegment = useCallback(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const handleOnClickSegment = useCallback(
|
|
28
|
+
(segment) => {
|
|
29
|
+
if (!segment.isEditable || state.isDisabled) return;
|
|
30
|
+
if (["hour", "minute", "second"].includes(segment.type)) {
|
|
31
|
+
onClickTime?.();
|
|
32
|
+
}
|
|
33
|
+
if (["year", "month", "day"].includes(segment.type)) {
|
|
34
|
+
onClickDate?.();
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
[onClickDate, onClickTime, state.isDisabled]
|
|
38
|
+
);
|
|
29
39
|
return /* @__PURE__ */ React__default.createElement(
|
|
30
40
|
"div",
|
|
31
41
|
{
|
|
@@ -34,16 +44,13 @@ const DateField = ({
|
|
|
34
44
|
className: "flex flex-row",
|
|
35
45
|
"data-testid": "date-field-div"
|
|
36
46
|
},
|
|
37
|
-
state.segments.map((segment, i) =>
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
key: i,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
},
|
|
45
|
-
/* @__PURE__ */ React__default.createElement(DateSegment, { segment, state })
|
|
46
|
-
))
|
|
47
|
+
state.segments.map((segment, i) => {
|
|
48
|
+
if (segment.type === "literal") {
|
|
49
|
+
const text = formatLiteralSegment(segment.text);
|
|
50
|
+
return /* @__PURE__ */ React__default.createElement("span", { key: i, style: { whiteSpace: "pre" } }, text);
|
|
51
|
+
}
|
|
52
|
+
return /* @__PURE__ */ React__default.createElement("div", { key: i, onClick: () => handleOnClickSegment(segment) }, /* @__PURE__ */ React__default.createElement(DateSegment, { segment, state }));
|
|
53
|
+
})
|
|
47
54
|
);
|
|
48
55
|
};
|
|
49
56
|
|
|
@@ -12,9 +12,15 @@ const PopoverProvider = ({
|
|
|
12
12
|
children,
|
|
13
13
|
placement,
|
|
14
14
|
trigger,
|
|
15
|
+
fallbackPlacements,
|
|
15
16
|
...props
|
|
16
17
|
}) => {
|
|
17
|
-
const floatingLogic = useFloatingElement({
|
|
18
|
+
const floatingLogic = useFloatingElement({
|
|
19
|
+
placement,
|
|
20
|
+
trigger,
|
|
21
|
+
fallbackPlacements,
|
|
22
|
+
...props
|
|
23
|
+
});
|
|
18
24
|
return /* @__PURE__ */ React__default.createElement(Context.Provider, { value: { ...floatingLogic } }, children);
|
|
19
25
|
};
|
|
20
26
|
|
|
@@ -10,7 +10,15 @@ const SelectRoot = ({
|
|
|
10
10
|
labelExtractor,
|
|
11
11
|
className
|
|
12
12
|
}) => {
|
|
13
|
-
return /* @__PURE__ */ React__default.createElement(
|
|
13
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
14
|
+
Popover.Root,
|
|
15
|
+
{
|
|
16
|
+
fallbackPlacements: ["bottom", "top"],
|
|
17
|
+
placement: "bottom",
|
|
18
|
+
trigger: "click"
|
|
19
|
+
},
|
|
20
|
+
/* @__PURE__ */ React__default.createElement(SelectContext.Provider, { value: { value, keyExtractor, labelExtractor } }, /* @__PURE__ */ React__default.createElement(Content, { className }, children))
|
|
21
|
+
);
|
|
14
22
|
};
|
|
15
23
|
|
|
16
24
|
export { SelectRoot };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { selectVariants } from '@tecsinapse/cortex-core';
|
|
1
|
+
import { selectVariants, labelStyle } from '@tecsinapse/cortex-core';
|
|
2
2
|
import React__default, { useContext, useMemo } from 'react';
|
|
3
3
|
import { IoChevronDownOutline } from 'react-icons/io5';
|
|
4
4
|
import { Popover } from '../Popover/index.js';
|
|
5
5
|
import { SelectContext } from './context.js';
|
|
6
|
+
import clsx from 'clsx';
|
|
6
7
|
|
|
7
8
|
const { button } = selectVariants();
|
|
8
9
|
const SelectTrigger = ({
|
|
@@ -21,7 +22,8 @@ const SelectTrigger = ({
|
|
|
21
22
|
return labelExtractor(value);
|
|
22
23
|
}, [label, value]);
|
|
23
24
|
const { className } = rest;
|
|
24
|
-
|
|
25
|
+
const hasValue = Array.isArray(value) ? value.length > 0 : !!value;
|
|
26
|
+
return /* @__PURE__ */ React__default.createElement(Popover.Trigger, { disabled }, /* @__PURE__ */ React__default.createElement("div", { className: "w-full gap-mili" }, /* @__PURE__ */ React__default.createElement(
|
|
25
27
|
"button",
|
|
26
28
|
{
|
|
27
29
|
className: button({ className }),
|
|
@@ -29,9 +31,27 @@ const SelectTrigger = ({
|
|
|
29
31
|
role: "button",
|
|
30
32
|
...rest
|
|
31
33
|
},
|
|
32
|
-
/* @__PURE__ */ React__default.createElement(
|
|
34
|
+
/* @__PURE__ */ React__default.createElement(
|
|
35
|
+
"span",
|
|
36
|
+
{
|
|
37
|
+
className: clsx({ "mt-mili": hasValue && label }),
|
|
38
|
+
"data-testid": "select-placeholder"
|
|
39
|
+
},
|
|
40
|
+
_placeholder
|
|
41
|
+
),
|
|
33
42
|
/* @__PURE__ */ React__default.createElement(IoChevronDownOutline, null)
|
|
34
|
-
)
|
|
43
|
+
), hasValue && label ? /* @__PURE__ */ React__default.createElement(
|
|
44
|
+
"label",
|
|
45
|
+
{
|
|
46
|
+
htmlFor: "select-trigger",
|
|
47
|
+
className: clsx(
|
|
48
|
+
"ml-centi",
|
|
49
|
+
labelStyle({ intent: "default", placeholder })
|
|
50
|
+
),
|
|
51
|
+
"data-testid": "input-label"
|
|
52
|
+
},
|
|
53
|
+
label
|
|
54
|
+
) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null)));
|
|
35
55
|
};
|
|
36
56
|
|
|
37
57
|
export { SelectTrigger };
|
|
@@ -8,7 +8,8 @@ const useFloatingElement = ({
|
|
|
8
8
|
arrowRef,
|
|
9
9
|
controlled,
|
|
10
10
|
isOpen,
|
|
11
|
-
setIsOpen
|
|
11
|
+
setIsOpen,
|
|
12
|
+
fallbackPlacements = ["right", "bottom", "left", "top"]
|
|
12
13
|
}) => {
|
|
13
14
|
const [openUncontrolled, onOpenChangeUncontrolled] = useState(false);
|
|
14
15
|
const { x, y, strategy, refs, update, context, floatingStyles } = useFloating(
|
|
@@ -21,7 +22,7 @@ const useFloatingElement = ({
|
|
|
21
22
|
offset(10),
|
|
22
23
|
flip({
|
|
23
24
|
flipAlignment: true,
|
|
24
|
-
fallbackPlacements
|
|
25
|
+
fallbackPlacements
|
|
25
26
|
}),
|
|
26
27
|
shift(),
|
|
27
28
|
...arrowRef ? [arrow({ element: arrowRef })] : []
|
|
@@ -4,14 +4,16 @@ export interface ControlledProps {
|
|
|
4
4
|
controlled: true;
|
|
5
5
|
isOpen: boolean;
|
|
6
6
|
setIsOpen: Dispatch<SetStateAction<boolean>>;
|
|
7
|
+
fallbackPlacements?: Array<Placement>;
|
|
7
8
|
}
|
|
8
9
|
export interface UncontrolledProviderProps {
|
|
9
10
|
children: ReactNode;
|
|
10
11
|
placement?: Placement;
|
|
12
|
+
fallbackPlacements?: Array<Placement>;
|
|
11
13
|
trigger?: 'hover' | 'click';
|
|
12
14
|
controlled?: false;
|
|
13
15
|
}
|
|
14
16
|
export interface ControlledPopoverProviderProps extends Omit<UncontrolledProviderProps, 'controlled'>, ControlledProps {
|
|
15
17
|
}
|
|
16
18
|
export type PopoverProviderProps = UncontrolledProviderProps | ControlledPopoverProviderProps;
|
|
17
|
-
export declare const PopoverProvider: ({ children, placement, trigger, ...props }: PopoverProviderProps) => React.JSX.Element;
|
|
19
|
+
export declare const PopoverProvider: ({ children, placement, trigger, fallbackPlacements, ...props }: PopoverProviderProps) => React.JSX.Element;
|
|
@@ -2,5 +2,5 @@ export declare const Popover: {
|
|
|
2
2
|
Root: ({ children, placement, trigger, ...props }: import("./Root").PopoverRootProps) => import("react").JSX.Element;
|
|
3
3
|
Trigger: ({ children, disabled }: import("./Trigger").PopoverTriggerProps) => import("react").FunctionComponentElement<any>;
|
|
4
4
|
Content: ({ children, className, modal, ...rest }: import("./Content").PopoverContentProps) => import("react").JSX.Element;
|
|
5
|
-
Provider: ({ children, placement, trigger, ...props }: import("./Provider").PopoverProviderProps) => import("react").JSX.Element;
|
|
5
|
+
Provider: ({ children, placement, trigger, fallbackPlacements, ...props }: import("./Provider").PopoverProviderProps) => import("react").JSX.Element;
|
|
6
6
|
};
|
|
@@ -12,8 +12,9 @@ export interface FloatingElementProps {
|
|
|
12
12
|
controlled?: boolean;
|
|
13
13
|
isOpen?: boolean;
|
|
14
14
|
setIsOpen?: Dispatch<SetStateAction<boolean>> | undefined;
|
|
15
|
+
fallbackPlacements?: Array<Placement>;
|
|
15
16
|
}
|
|
16
|
-
export declare const useFloatingElement: ({ placement, trigger, delay, arrowRef, controlled, isOpen, setIsOpen, }: FloatingElementProps) => {
|
|
17
|
+
export declare const useFloatingElement: ({ placement, trigger, delay, arrowRef, controlled, isOpen, setIsOpen, fallbackPlacements, }: FloatingElementProps) => {
|
|
17
18
|
isOpen: boolean;
|
|
18
19
|
setIsOpen: Dispatch<SetStateAction<boolean>>;
|
|
19
20
|
x: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tecsinapse/cortex-react",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.25-beta.1",
|
|
4
4
|
"description": "React components based in @tecsinapse/cortex-core",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"react-dom": ">=18.0.0",
|
|
49
49
|
"tailwind": ">=3.3.0"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "8ad668edb728e76faf94ce2ec5d8feee5a51f912"
|
|
52
52
|
}
|