@xanui/ui 1.1.21 → 1.1.22
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/Badge/index.d.ts +7 -0
- package/Badge/index.js +80 -47
- package/Badge/index.js.map +1 -1
- package/Badge/index.mjs +82 -49
- package/Badge/index.mjs.map +1 -1
- package/Portal/index.js +1 -1
- package/Portal/index.js.map +1 -1
- package/Portal/index.mjs +1 -1
- package/Portal/index.mjs.map +1 -1
- package/Select/index.d.ts +1 -0
- package/Select/index.js +4 -6
- package/Select/index.js.map +1 -1
- package/Select/index.mjs +4 -6
- package/Select/index.mjs.map +1 -1
- package/package.json +1 -1
package/Badge/index.d.ts
CHANGED
|
@@ -6,8 +6,15 @@ type BadgeProps<T extends TagComponentType = "div"> = Omit<TagProps<T>, "baseCla
|
|
|
6
6
|
color?: useBreakpointPropsType<UseColorTemplateColor>;
|
|
7
7
|
placement?: useBreakpointPropsType<"left-top" | "left-bottom" | "right-top" | "right-bottom">;
|
|
8
8
|
visible?: useBreakpointPropsType<boolean>;
|
|
9
|
+
disableTransition?: boolean;
|
|
10
|
+
disableSpace?: boolean;
|
|
9
11
|
slotProps?: {
|
|
10
12
|
transition?: Omit<TransitionProps, "open">;
|
|
13
|
+
content?: Omit<TagProps<"span">, "children">;
|
|
14
|
+
};
|
|
15
|
+
refs?: {
|
|
16
|
+
content?: React.Ref<any>;
|
|
17
|
+
transition?: React.Ref<any>;
|
|
11
18
|
};
|
|
12
19
|
};
|
|
13
20
|
declare const Badge: React.ForwardRefExoticComponent<Omit<BadgeProps<TagComponentType>, "ref"> & React.RefAttributes<any>>;
|
package/Badge/index.js
CHANGED
|
@@ -6,71 +6,104 @@ var React = require('react');
|
|
|
6
6
|
var core = require('@xanui/core');
|
|
7
7
|
|
|
8
8
|
const Badge = React.forwardRef((_a, ref) => {
|
|
9
|
-
var { children, content } = _a, rest = tslib.__rest(_a, ["children", "content"]);
|
|
10
|
-
let [_b] = core.useInterface("Badge", rest, {}), { color, placement, visible, slotProps } = _b, props = tslib.__rest(_b, ["color", "placement", "visible", "slotProps"]);
|
|
9
|
+
var { children, content, refs } = _a, rest = tslib.__rest(_a, ["children", "content", "refs"]);
|
|
10
|
+
let [_b] = core.useInterface("Badge", rest, {}), { color, placement, visible, slotProps, disableTransition, disableSpace } = _b, props = tslib.__rest(_b, ["color", "placement", "visible", "slotProps", "disableTransition", "disableSpace"]);
|
|
11
11
|
color !== null && color !== void 0 ? color : (color = "danger");
|
|
12
12
|
visible !== null && visible !== void 0 ? visible : (visible = true);
|
|
13
13
|
placement !== null && placement !== void 0 ? placement : (placement = "right-top");
|
|
14
|
+
disableTransition !== null && disableTransition !== void 0 ? disableTransition : (disableTransition = false);
|
|
15
|
+
disableSpace !== null && disableSpace !== void 0 ? disableSpace : (disableSpace = false);
|
|
14
16
|
const _p = {};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
_p.placement = placement;
|
|
21
|
-
if (visible)
|
|
22
|
-
_p.visible = visible;
|
|
17
|
+
_p.content = content;
|
|
18
|
+
_p.color = color;
|
|
19
|
+
_p.placement = placement;
|
|
20
|
+
_p.visible = visible;
|
|
21
|
+
_p.disableTransition = disableTransition !== null && disableTransition !== void 0 ? disableTransition : false;
|
|
23
22
|
const p = core.useBreakpointProps(_p);
|
|
24
23
|
content = p.content;
|
|
25
24
|
color = p.color;
|
|
26
25
|
placement = p.placement;
|
|
27
26
|
visible = p.visible;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
let
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
else if (content.toString().length > 2) {
|
|
36
|
-
pos = -8;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
27
|
+
disableTransition = p.disableTransition;
|
|
28
|
+
const isReactElement = React.isValidElement(content);
|
|
29
|
+
let template = core.useColorTemplate(color, "fill");
|
|
30
|
+
let _css = {
|
|
31
|
+
position: "absolute",
|
|
32
|
+
};
|
|
33
|
+
let translate = '';
|
|
39
34
|
switch (placement) {
|
|
40
|
-
case "left-top":
|
|
41
|
-
_css = { top: content ? pos : 0, left: content ? pos : 0 };
|
|
42
|
-
break;
|
|
43
|
-
case "left-bottom":
|
|
44
|
-
_css = { bottom: content ? pos : 0, left: content ? pos : 0 };
|
|
45
|
-
break;
|
|
46
35
|
case "right-top":
|
|
47
|
-
_css =
|
|
36
|
+
_css.top = 0;
|
|
37
|
+
_css.right = 0;
|
|
38
|
+
if (!disableSpace) {
|
|
39
|
+
translate = "translate(50%, -50%)";
|
|
40
|
+
}
|
|
48
41
|
break;
|
|
49
42
|
case "right-bottom":
|
|
50
|
-
_css =
|
|
43
|
+
_css.bottom = 0;
|
|
44
|
+
_css.right = 0;
|
|
45
|
+
if (!disableSpace) {
|
|
46
|
+
translate = "translate(50%, 50%)";
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
case "left-top":
|
|
50
|
+
_css.top = 0;
|
|
51
|
+
_css.left = 0;
|
|
52
|
+
if (!disableSpace) {
|
|
53
|
+
translate = "translate(-50%, -50%)";
|
|
54
|
+
}
|
|
55
|
+
break;
|
|
56
|
+
case "left-bottom":
|
|
57
|
+
_css.bottom = 0;
|
|
58
|
+
_css.left = 0;
|
|
59
|
+
if (!disableSpace) {
|
|
60
|
+
translate = "translate(-50%, 50%)";
|
|
61
|
+
}
|
|
51
62
|
break;
|
|
52
63
|
}
|
|
53
|
-
if (
|
|
54
|
-
_css.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
if (disableTransition) {
|
|
65
|
+
_css.transform = translate;
|
|
66
|
+
}
|
|
67
|
+
if (!isReactElement) {
|
|
68
|
+
if (content !== undefined) {
|
|
69
|
+
_css.minWidth = 16;
|
|
70
|
+
_css.height = 16;
|
|
71
|
+
_css.p = .8;
|
|
72
|
+
_css.px = .4;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
_css.width = 8;
|
|
76
|
+
_css.height = 8;
|
|
77
|
+
}
|
|
59
78
|
}
|
|
60
79
|
else {
|
|
61
|
-
|
|
62
|
-
_css.height = 8;
|
|
80
|
+
template = {};
|
|
63
81
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
const _badge = jsxRuntime.jsx(core.Tag, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { ref: refs === null || refs === void 0 ? void 0 : refs.content, component: 'span', baseClass: 'badge-content', sxr: {
|
|
83
|
+
position: "absolute",
|
|
84
|
+
zIndex: 1,
|
|
85
|
+
radius: 2,
|
|
86
|
+
display: 'flex',
|
|
87
|
+
justifyContent: "center",
|
|
88
|
+
alignItems: 'center',
|
|
89
|
+
fontWeight: 500,
|
|
90
|
+
fontSize: 11,
|
|
91
|
+
userSelect: "none",
|
|
92
|
+
pointerEvents: "none",
|
|
93
|
+
lineHeight: 1,
|
|
94
|
+
} }, template.primary, _css, { children: typeof content === 'number' ? (content >= 100 ? "99+" : content) : content }));
|
|
95
|
+
return (jsxRuntime.jsxs(core.Tag, Object.assign({}, props, { position: "relative", display: "inline-block", baseClass: 'badge', ref: ref, children: [!disableTransition ? (jsxRuntime.jsx(core.Transition, Object.assign({ open: content !== undefined && visible }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.transition, { variant: () => {
|
|
96
|
+
return {
|
|
97
|
+
from: {
|
|
98
|
+
opacity: 0,
|
|
99
|
+
transform: `scale(0) ${translate}`.trim(),
|
|
100
|
+
},
|
|
101
|
+
to: {
|
|
102
|
+
opacity: 1,
|
|
103
|
+
transform: `scale(1) ${translate}`.trim(),
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}, ref: refs === null || refs === void 0 ? void 0 : refs.transition, children: _badge }))) : jsxRuntime.jsx(jsxRuntime.Fragment, { children: (content !== undefined && visible) && _badge }), children] })));
|
|
74
107
|
});
|
|
75
108
|
|
|
76
109
|
module.exports = Badge;
|
package/Badge/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Badge/index.tsx"],"sourcesContent":["import React, { ReactElement } from 'react';\nimport { Tag, TagProps, TagComponentType, useInterface, UseColorTemplateColor, useColorTemplate, useBreakpointPropsType, useBreakpointProps, TransitionProps } from '@xanui/core';\n\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Badge/index.tsx"],"sourcesContent":["import React, { ReactElement } from 'react';\nimport { Tag, TagProps, TagComponentType, Transition, useInterface, UseColorTemplateColor, useColorTemplate, useBreakpointPropsType, useBreakpointProps, TransitionProps } from '@xanui/core';\n\nexport type BadgeProps<T extends TagComponentType = \"div\"> = Omit<TagProps<T>, \"baseClass\" | \"content\"> & {\n content?: useBreakpointPropsType<number | ReactElement>;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n placement?: useBreakpointPropsType<\"left-top\" | \"left-bottom\" | \"right-top\" | \"right-bottom\">;\n visible?: useBreakpointPropsType<boolean>;\n disableTransition?: boolean;\n disableSpace?: boolean;\n slotProps?: {\n transition?: Omit<TransitionProps, \"open\">;\n content?: Omit<TagProps<\"span\">, \"children\">;\n },\n refs?: {\n content?: React.Ref<any>;\n transition?: React.Ref<any>;\n };\n}\n\nconst Badge = React.forwardRef(<T extends TagComponentType = \"div\">({ children, content, refs, ...rest }: BadgeProps<T>, ref: React.Ref<any>) => {\n let [{ color, placement, visible, slotProps, disableTransition, disableSpace, ...props }] = useInterface<any>(\"Badge\", rest, {})\n color ??= \"danger\"\n visible ??= true\n placement ??= \"right-top\"\n disableTransition ??= false\n disableSpace ??= false\n\n const _p: any = {}\n\n _p.content = content\n _p.color = color\n _p.placement = placement\n _p.visible = visible\n _p.disableTransition = disableTransition ?? false\n\n const p: any = useBreakpointProps(_p)\n\n content = p.content\n color = p.color\n placement = p.placement\n visible = p.visible\n disableTransition = p.disableTransition\n\n const isReactElement = React.isValidElement(content);\n\n let template: any = useColorTemplate(color, \"fill\")\n let _css: any = {\n position: \"absolute\",\n }\n\n let translate = ''\n\n switch (placement) {\n case \"right-top\":\n _css.top = 0;\n _css.right = 0;\n if (!disableSpace) {\n translate = \"translate(50%, -50%)\";\n }\n break;\n case \"right-bottom\":\n _css.bottom = 0;\n _css.right = 0;\n if (!disableSpace) {\n translate = \"translate(50%, 50%)\";\n }\n break;\n case \"left-top\":\n _css.top = 0;\n _css.left = 0;\n if (!disableSpace) {\n translate = \"translate(-50%, -50%)\";\n }\n break;\n case \"left-bottom\":\n _css.bottom = 0;\n _css.left = 0;\n if (!disableSpace) {\n translate = \"translate(-50%, 50%)\";\n }\n break;\n }\n\n if (disableTransition) {\n _css.transform = translate\n }\n\n if (!isReactElement) {\n if (content !== undefined) {\n _css.minWidth = 16\n _css.height = 16\n _css.p = .8\n _css.px = .4\n } else {\n _css.width = 8\n _css.height = 8\n }\n } else {\n template = {}\n }\n\n const _badge = <Tag\n {...slotProps?.content}\n ref={refs?.content}\n component='span'\n baseClass='badge-content'\n sxr={{\n position: \"absolute\",\n zIndex: 1,\n radius: 2,\n display: 'flex',\n justifyContent: \"center\",\n alignItems: 'center',\n fontWeight: 500,\n fontSize: 11,\n userSelect: \"none\",\n pointerEvents: \"none\",\n lineHeight: 1,\n }}\n {...template.primary}\n {..._css}\n >\n {typeof content === 'number' ? (content >= 100 ? \"99+\" : content) : content}\n </Tag>\n\n return (\n <Tag\n {...props}\n position=\"relative\"\n display=\"inline-block\"\n baseClass='badge'\n ref={ref}\n >\n {\n !disableTransition ? (<Transition\n open={content !== undefined && visible}\n {...slotProps?.transition}\n variant={() => {\n return {\n from: {\n opacity: 0,\n transform: `scale(0) ${translate}`.trim(),\n },\n to: {\n opacity: 1,\n transform: `scale(1) ${translate}`.trim(),\n },\n }\n }}\n ref={refs?.transition}\n >\n {_badge}\n </Transition>) : <>{(content !== undefined && visible) && _badge}</>\n }\n\n {children}\n </Tag>\n )\n})\n\nexport default Badge\n\n"],"names":["__rest","useInterface","useBreakpointProps","useColorTemplate","_jsx","Tag","_jsxs","Transition","_Fragment"],"mappings":"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"}
|
package/Badge/index.mjs
CHANGED
|
@@ -1,74 +1,107 @@
|
|
|
1
1
|
import { __rest } from 'tslib';
|
|
2
|
-
import { jsxs,
|
|
2
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import { useInterface, useBreakpointProps, useColorTemplate, Tag } from '@xanui/core';
|
|
4
|
+
import { useInterface, useBreakpointProps, useColorTemplate, Tag, Transition } from '@xanui/core';
|
|
5
5
|
|
|
6
6
|
const Badge = React.forwardRef((_a, ref) => {
|
|
7
|
-
var { children, content } = _a, rest = __rest(_a, ["children", "content"]);
|
|
8
|
-
let [_b] = useInterface("Badge", rest, {}), { color, placement, visible, slotProps } = _b, props = __rest(_b, ["color", "placement", "visible", "slotProps"]);
|
|
7
|
+
var { children, content, refs } = _a, rest = __rest(_a, ["children", "content", "refs"]);
|
|
8
|
+
let [_b] = useInterface("Badge", rest, {}), { color, placement, visible, slotProps, disableTransition, disableSpace } = _b, props = __rest(_b, ["color", "placement", "visible", "slotProps", "disableTransition", "disableSpace"]);
|
|
9
9
|
color !== null && color !== void 0 ? color : (color = "danger");
|
|
10
10
|
visible !== null && visible !== void 0 ? visible : (visible = true);
|
|
11
11
|
placement !== null && placement !== void 0 ? placement : (placement = "right-top");
|
|
12
|
+
disableTransition !== null && disableTransition !== void 0 ? disableTransition : (disableTransition = false);
|
|
13
|
+
disableSpace !== null && disableSpace !== void 0 ? disableSpace : (disableSpace = false);
|
|
12
14
|
const _p = {};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
_p.placement = placement;
|
|
19
|
-
if (visible)
|
|
20
|
-
_p.visible = visible;
|
|
15
|
+
_p.content = content;
|
|
16
|
+
_p.color = color;
|
|
17
|
+
_p.placement = placement;
|
|
18
|
+
_p.visible = visible;
|
|
19
|
+
_p.disableTransition = disableTransition !== null && disableTransition !== void 0 ? disableTransition : false;
|
|
21
20
|
const p = useBreakpointProps(_p);
|
|
22
21
|
content = p.content;
|
|
23
22
|
color = p.color;
|
|
24
23
|
placement = p.placement;
|
|
25
24
|
visible = p.visible;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
let
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
else if (content.toString().length > 2) {
|
|
34
|
-
pos = -8;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
25
|
+
disableTransition = p.disableTransition;
|
|
26
|
+
const isReactElement = React.isValidElement(content);
|
|
27
|
+
let template = useColorTemplate(color, "fill");
|
|
28
|
+
let _css = {
|
|
29
|
+
position: "absolute",
|
|
30
|
+
};
|
|
31
|
+
let translate = '';
|
|
37
32
|
switch (placement) {
|
|
38
|
-
case "left-top":
|
|
39
|
-
_css = { top: content ? pos : 0, left: content ? pos : 0 };
|
|
40
|
-
break;
|
|
41
|
-
case "left-bottom":
|
|
42
|
-
_css = { bottom: content ? pos : 0, left: content ? pos : 0 };
|
|
43
|
-
break;
|
|
44
33
|
case "right-top":
|
|
45
|
-
_css =
|
|
34
|
+
_css.top = 0;
|
|
35
|
+
_css.right = 0;
|
|
36
|
+
if (!disableSpace) {
|
|
37
|
+
translate = "translate(50%, -50%)";
|
|
38
|
+
}
|
|
46
39
|
break;
|
|
47
40
|
case "right-bottom":
|
|
48
|
-
_css =
|
|
41
|
+
_css.bottom = 0;
|
|
42
|
+
_css.right = 0;
|
|
43
|
+
if (!disableSpace) {
|
|
44
|
+
translate = "translate(50%, 50%)";
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
case "left-top":
|
|
48
|
+
_css.top = 0;
|
|
49
|
+
_css.left = 0;
|
|
50
|
+
if (!disableSpace) {
|
|
51
|
+
translate = "translate(-50%, -50%)";
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
case "left-bottom":
|
|
55
|
+
_css.bottom = 0;
|
|
56
|
+
_css.left = 0;
|
|
57
|
+
if (!disableSpace) {
|
|
58
|
+
translate = "translate(-50%, 50%)";
|
|
59
|
+
}
|
|
49
60
|
break;
|
|
50
61
|
}
|
|
51
|
-
if (
|
|
52
|
-
_css.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
if (disableTransition) {
|
|
63
|
+
_css.transform = translate;
|
|
64
|
+
}
|
|
65
|
+
if (!isReactElement) {
|
|
66
|
+
if (content !== undefined) {
|
|
67
|
+
_css.minWidth = 16;
|
|
68
|
+
_css.height = 16;
|
|
69
|
+
_css.p = .8;
|
|
70
|
+
_css.px = .4;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
_css.width = 8;
|
|
74
|
+
_css.height = 8;
|
|
75
|
+
}
|
|
57
76
|
}
|
|
58
77
|
else {
|
|
59
|
-
|
|
60
|
-
_css.height = 8;
|
|
78
|
+
template = {};
|
|
61
79
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
80
|
+
const _badge = jsx(Tag, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { ref: refs === null || refs === void 0 ? void 0 : refs.content, component: 'span', baseClass: 'badge-content', sxr: {
|
|
81
|
+
position: "absolute",
|
|
82
|
+
zIndex: 1,
|
|
83
|
+
radius: 2,
|
|
84
|
+
display: 'flex',
|
|
85
|
+
justifyContent: "center",
|
|
86
|
+
alignItems: 'center',
|
|
87
|
+
fontWeight: 500,
|
|
88
|
+
fontSize: 11,
|
|
89
|
+
userSelect: "none",
|
|
90
|
+
pointerEvents: "none",
|
|
91
|
+
lineHeight: 1,
|
|
92
|
+
} }, template.primary, _css, { children: typeof content === 'number' ? (content >= 100 ? "99+" : content) : content }));
|
|
93
|
+
return (jsxs(Tag, Object.assign({}, props, { position: "relative", display: "inline-block", baseClass: 'badge', ref: ref, children: [!disableTransition ? (jsx(Transition, Object.assign({ open: content !== undefined && visible }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.transition, { variant: () => {
|
|
94
|
+
return {
|
|
95
|
+
from: {
|
|
96
|
+
opacity: 0,
|
|
97
|
+
transform: `scale(0) ${translate}`.trim(),
|
|
98
|
+
},
|
|
99
|
+
to: {
|
|
100
|
+
opacity: 1,
|
|
101
|
+
transform: `scale(1) ${translate}`.trim(),
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}, ref: refs === null || refs === void 0 ? void 0 : refs.transition, children: _badge }))) : jsx(Fragment, { children: (content !== undefined && visible) && _badge }), children] })));
|
|
72
105
|
});
|
|
73
106
|
|
|
74
107
|
export { Badge as default };
|
package/Badge/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/Badge/index.tsx"],"sourcesContent":["import React, { ReactElement } from 'react';\nimport { Tag, TagProps, TagComponentType, useInterface, UseColorTemplateColor, useColorTemplate, useBreakpointPropsType, useBreakpointProps, TransitionProps } from '@xanui/core';\n\
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/Badge/index.tsx"],"sourcesContent":["import React, { ReactElement } from 'react';\nimport { Tag, TagProps, TagComponentType, Transition, useInterface, UseColorTemplateColor, useColorTemplate, useBreakpointPropsType, useBreakpointProps, TransitionProps } from '@xanui/core';\n\nexport type BadgeProps<T extends TagComponentType = \"div\"> = Omit<TagProps<T>, \"baseClass\" | \"content\"> & {\n content?: useBreakpointPropsType<number | ReactElement>;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n placement?: useBreakpointPropsType<\"left-top\" | \"left-bottom\" | \"right-top\" | \"right-bottom\">;\n visible?: useBreakpointPropsType<boolean>;\n disableTransition?: boolean;\n disableSpace?: boolean;\n slotProps?: {\n transition?: Omit<TransitionProps, \"open\">;\n content?: Omit<TagProps<\"span\">, \"children\">;\n },\n refs?: {\n content?: React.Ref<any>;\n transition?: React.Ref<any>;\n };\n}\n\nconst Badge = React.forwardRef(<T extends TagComponentType = \"div\">({ children, content, refs, ...rest }: BadgeProps<T>, ref: React.Ref<any>) => {\n let [{ color, placement, visible, slotProps, disableTransition, disableSpace, ...props }] = useInterface<any>(\"Badge\", rest, {})\n color ??= \"danger\"\n visible ??= true\n placement ??= \"right-top\"\n disableTransition ??= false\n disableSpace ??= false\n\n const _p: any = {}\n\n _p.content = content\n _p.color = color\n _p.placement = placement\n _p.visible = visible\n _p.disableTransition = disableTransition ?? false\n\n const p: any = useBreakpointProps(_p)\n\n content = p.content\n color = p.color\n placement = p.placement\n visible = p.visible\n disableTransition = p.disableTransition\n\n const isReactElement = React.isValidElement(content);\n\n let template: any = useColorTemplate(color, \"fill\")\n let _css: any = {\n position: \"absolute\",\n }\n\n let translate = ''\n\n switch (placement) {\n case \"right-top\":\n _css.top = 0;\n _css.right = 0;\n if (!disableSpace) {\n translate = \"translate(50%, -50%)\";\n }\n break;\n case \"right-bottom\":\n _css.bottom = 0;\n _css.right = 0;\n if (!disableSpace) {\n translate = \"translate(50%, 50%)\";\n }\n break;\n case \"left-top\":\n _css.top = 0;\n _css.left = 0;\n if (!disableSpace) {\n translate = \"translate(-50%, -50%)\";\n }\n break;\n case \"left-bottom\":\n _css.bottom = 0;\n _css.left = 0;\n if (!disableSpace) {\n translate = \"translate(-50%, 50%)\";\n }\n break;\n }\n\n if (disableTransition) {\n _css.transform = translate\n }\n\n if (!isReactElement) {\n if (content !== undefined) {\n _css.minWidth = 16\n _css.height = 16\n _css.p = .8\n _css.px = .4\n } else {\n _css.width = 8\n _css.height = 8\n }\n } else {\n template = {}\n }\n\n const _badge = <Tag\n {...slotProps?.content}\n ref={refs?.content}\n component='span'\n baseClass='badge-content'\n sxr={{\n position: \"absolute\",\n zIndex: 1,\n radius: 2,\n display: 'flex',\n justifyContent: \"center\",\n alignItems: 'center',\n fontWeight: 500,\n fontSize: 11,\n userSelect: \"none\",\n pointerEvents: \"none\",\n lineHeight: 1,\n }}\n {...template.primary}\n {..._css}\n >\n {typeof content === 'number' ? (content >= 100 ? \"99+\" : content) : content}\n </Tag>\n\n return (\n <Tag\n {...props}\n position=\"relative\"\n display=\"inline-block\"\n baseClass='badge'\n ref={ref}\n >\n {\n !disableTransition ? (<Transition\n open={content !== undefined && visible}\n {...slotProps?.transition}\n variant={() => {\n return {\n from: {\n opacity: 0,\n transform: `scale(0) ${translate}`.trim(),\n },\n to: {\n opacity: 1,\n transform: `scale(1) ${translate}`.trim(),\n },\n }\n }}\n ref={refs?.transition}\n >\n {_badge}\n </Transition>) : <>{(content !== undefined && visible) && _badge}</>\n }\n\n {children}\n </Tag>\n )\n})\n\nexport default Badge\n\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
package/Portal/index.js
CHANGED
package/Portal/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Portal/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useMemo } from 'react'\nimport ReactDOM from 'react-dom';\nimport { useTheme, ThemeProvider } from '@xanui/core';\nexport type PortalProps = {\n children?: React.ReactNode;\n appendTo?: HTMLElement;\n container?: HTMLElement;\n}\n\nconst Portal = ({ children, appendTo, container }: PortalProps) => {\n const theme = useTheme()\n appendTo = appendTo || document.body\n\n const c = useMemo(() => {\n let _con: HTMLElement = container || document.createElement(\"div\");\n appendTo.appendChild(_con);\n _con.className = \"xui-portal\"\n return _con\n }, [])\n\n useEffect(() => {\n return () => {\n (appendTo as any).removeChild(c);\n }\n }, [])\n\n return ReactDOM.createPortal(\n <ThemeProvider theme={theme.name}>\n {children}\n </ThemeProvider>,\n c,\n );\n}\n\nexport default Portal"],"names":[],"mappings":";;;;;;;;AAUA;AACI;AACA;AAEA;;AAEI;AACA;AACA
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Portal/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useMemo } from 'react'\nimport ReactDOM from 'react-dom';\nimport { useTheme, ThemeProvider } from '@xanui/core';\nexport type PortalProps = {\n children?: React.ReactNode;\n appendTo?: HTMLElement;\n container?: HTMLElement;\n}\n\nconst Portal = ({ children, appendTo, container }: PortalProps) => {\n const theme = useTheme()\n appendTo = appendTo || document.body\n\n const c = useMemo(() => {\n let _con: HTMLElement = container || document.createElement(\"div\");\n appendTo.appendChild(_con);\n _con.className = \"xui-portal\"\n return _con\n }, [container])\n\n useEffect(() => {\n return () => {\n (appendTo as any).removeChild(c);\n }\n }, [])\n\n return ReactDOM.createPortal(\n <ThemeProvider theme={theme.name}>\n {children}\n </ThemeProvider>,\n c,\n );\n}\n\nexport default Portal"],"names":[],"mappings":";;;;;;;;AAUA;AACI;AACA;AAEA;;AAEI;AACA;AACA;AACJ;;AAGI;AACK;AACL;;AAGJ;AAMJ;;"}
|
package/Portal/index.mjs
CHANGED
package/Portal/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/Portal/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useMemo } from 'react'\nimport ReactDOM from 'react-dom';\nimport { useTheme, ThemeProvider } from '@xanui/core';\nexport type PortalProps = {\n children?: React.ReactNode;\n appendTo?: HTMLElement;\n container?: HTMLElement;\n}\n\nconst Portal = ({ children, appendTo, container }: PortalProps) => {\n const theme = useTheme()\n appendTo = appendTo || document.body\n\n const c = useMemo(() => {\n let _con: HTMLElement = container || document.createElement(\"div\");\n appendTo.appendChild(_con);\n _con.className = \"xui-portal\"\n return _con\n }, [])\n\n useEffect(() => {\n return () => {\n (appendTo as any).removeChild(c);\n }\n }, [])\n\n return ReactDOM.createPortal(\n <ThemeProvider theme={theme.name}>\n {children}\n </ThemeProvider>,\n c,\n );\n}\n\nexport default Portal"],"names":[],"mappings":";;;;;;AAUA;AACI;AACA;AAEA;;AAEI;AACA;AACA
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/Portal/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect, useMemo } from 'react'\nimport ReactDOM from 'react-dom';\nimport { useTheme, ThemeProvider } from '@xanui/core';\nexport type PortalProps = {\n children?: React.ReactNode;\n appendTo?: HTMLElement;\n container?: HTMLElement;\n}\n\nconst Portal = ({ children, appendTo, container }: PortalProps) => {\n const theme = useTheme()\n appendTo = appendTo || document.body\n\n const c = useMemo(() => {\n let _con: HTMLElement = container || document.createElement(\"div\");\n appendTo.appendChild(_con);\n _con.className = \"xui-portal\"\n return _con\n }, [container])\n\n useEffect(() => {\n return () => {\n (appendTo as any).removeChild(c);\n }\n }, [])\n\n return ReactDOM.createPortal(\n <ThemeProvider theme={theme.name}>\n {children}\n </ThemeProvider>,\n c,\n );\n}\n\nexport default Portal"],"names":[],"mappings":";;;;;;AAUA;AACI;AACA;AAEA;;AAEI;AACA;AACA;AACJ;;AAGI;AACK;AACL;;AAGJ;AAMJ;;"}
|
package/Select/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ type SelectProps = {
|
|
|
12
12
|
placeholder?: useBreakpointPropsType<string>;
|
|
13
13
|
color?: useBreakpointPropsType<UseColorTemplateColor>;
|
|
14
14
|
variant?: useBreakpointPropsType<UseColorTemplateType>;
|
|
15
|
+
fullWidth?: boolean;
|
|
15
16
|
refs?: {
|
|
16
17
|
input?: React.Ref<any>;
|
|
17
18
|
menu?: React.Ref<any>;
|
package/Select/index.js
CHANGED
|
@@ -13,9 +13,9 @@ var UpIcon = require('@xanui/icons/KeyboardArrowUp');
|
|
|
13
13
|
var core = require('@xanui/core');
|
|
14
14
|
|
|
15
15
|
const Select = React.forwardRef((_a, ref) => {
|
|
16
|
-
var _b, _c, _d, _e, _f;
|
|
16
|
+
var _b, _c, _d, _e, _f, _g;
|
|
17
17
|
var { onChange, value, children, refs } = _a, props = tslib.__rest(_a, ["onChange", "value", "children", "refs"]);
|
|
18
|
-
let [{ slotProps, color, variant, placeholder }] = core.useInterface("Select", props, {});
|
|
18
|
+
let [{ slotProps, color, variant, fullWidth, placeholder }] = core.useInterface("Select", props, {});
|
|
19
19
|
color !== null && color !== void 0 ? color : (color = "brand");
|
|
20
20
|
variant !== null && variant !== void 0 ? variant : (variant = "fill");
|
|
21
21
|
const [target, setTarget] = React.useState();
|
|
@@ -42,11 +42,9 @@ const Select = React.forwardRef((_a, ref) => {
|
|
|
42
42
|
}, [children, value]);
|
|
43
43
|
const mergeRefs = core.useMergeRefs(ref, conRef);
|
|
44
44
|
const toggleMenu = () => setTarget(target ? null : conRef.current);
|
|
45
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(index, Object.assign({ ref: mergeRefs, color: color, variant: variant === "soft" ? "fill" : variant, endIcon: jsxRuntime.jsxs(index$1, { flexDirection: "row", component: "span", children: [" ", (target ? jsxRuntime.jsx(UpIcon, {}) : jsxRuntime.jsx(DownIcon, {}))] }), readOnly: true, value: typeof selectedProps.children === 'string' ? selectedProps.children : value, cursor: "pointer", userSelect: "none", startIcon: selectedProps.startIcon, focused: !!target, placeholder: placeholder }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.input, { refs: Object.assign({ input: refs === null || refs === void 0 ? void 0 : refs.input }, (_b = slotProps === null || slotProps === void 0 ? void 0 : slotProps.input) === null || _b === void 0 ? void 0 : _b.refs), slotProps: {
|
|
45
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(index, Object.assign({ ref: mergeRefs, color: color, variant: variant === "soft" ? "fill" : variant, endIcon: jsxRuntime.jsxs(index$1, { flexDirection: "row", component: "span", children: [" ", (target ? jsxRuntime.jsx(UpIcon, {}) : jsxRuntime.jsx(DownIcon, {}))] }), readOnly: true, value: typeof selectedProps.children === 'string' ? selectedProps.children : value, cursor: "pointer", userSelect: "none", startIcon: selectedProps.startIcon, focused: !!target, placeholder: placeholder, fullWidth: fullWidth }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.input, { refs: Object.assign({ input: refs === null || refs === void 0 ? void 0 : refs.input }, (_b = slotProps === null || slotProps === void 0 ? void 0 : slotProps.input) === null || _b === void 0 ? void 0 : _b.refs), slotProps: {
|
|
46
46
|
rootContainer: Object.assign(Object.assign({ cursor: "pointer", userSelect: "none" }, (((_d = (_c = slotProps === null || slotProps === void 0 ? void 0 : slotProps.input) === null || _c === void 0 ? void 0 : _c.slotProps) === null || _d === void 0 ? void 0 : _d.container) || {})), { onClick: toggleMenu })
|
|
47
|
-
} })), jsxRuntime.jsx(index$2, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.menu, target: target, placement: "bottom-left" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu, { slotProps: {
|
|
48
|
-
content: Object.assign(Object.assign({ mt: .5 }, (_e = slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu) === null || _e === void 0 ? void 0 : _e.content), { width: conRef && ((_f = conRef === null || conRef === void 0 ? void 0 : conRef.current) === null || _f === void 0 ? void 0 : _f.clientWidth) })
|
|
49
|
-
}, onClickOutside: toggleMenu, children: jsxRuntime.jsx(index$3, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.list }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.list, { color: color, variant: variant, children: childs })) }))] }));
|
|
47
|
+
} })), jsxRuntime.jsx(index$2, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.menu, target: target, placement: "bottom-left" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu, { slotProps: Object.assign(Object.assign({}, (_e = slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu) === null || _e === void 0 ? void 0 : _e.slotProps), { content: Object.assign(Object.assign({ mt: .5 }, (_f = slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu) === null || _f === void 0 ? void 0 : _f.content), { width: conRef && ((_g = conRef === null || conRef === void 0 ? void 0 : conRef.current) === null || _g === void 0 ? void 0 : _g.clientWidth) }) }), onClickOutside: toggleMenu, children: jsxRuntime.jsx(index$3, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.list }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.list, { color: color, variant: variant, children: childs })) }))] }));
|
|
50
48
|
});
|
|
51
49
|
|
|
52
50
|
module.exports = Select;
|
package/Select/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Select/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { ReactElement, useMemo, cloneElement, useState, Children, useRef } from 'react'\nimport Input, { InputProps } from '../Input'\nimport List, { ListProps } from '../List'\nimport Menu, { MenuProps } from '../Menu'\nimport Stack from '../Stack'\nimport { OptionProps } from '../Option'\nimport DownIcon from '@xanui/icons/KeyboardArrowDown';\nimport UpIcon from '@xanui/icons/KeyboardArrowUp';\nimport { UseColorTemplateColor, UseColorTemplateType, useInterface, useBreakpointPropsType, useMergeRefs } from '@xanui/core'\n\n\nexport type SelectProps = {\n value?: string | number;\n onChange?: (value: string | number) => void;\n children: ReactElement<OptionProps> | ReactElement<OptionProps>[];\n placeholder?: useBreakpointPropsType<string>;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: useBreakpointPropsType<UseColorTemplateType>;\n refs?: {\n input?: React.Ref<any>;\n menu?: React.Ref<any>;\n list?: React.Ref<any>;\n };\n slotProps?: {\n menu?: Omit<MenuProps, 'children' | 'target'>;\n input?: Omit<InputProps, \"onChange\" | \"value\">;\n list?: Omit<ListProps, \"children\">\n }\n}\n\nconst Select = React.forwardRef(({ onChange, value, children, refs, ...props }: SelectProps, ref: React.Ref<any>) => {\n let [{ slotProps, color, variant, placeholder }] = useInterface<any>(\"Select\", props, {})\n color ??= \"brand\"\n variant ??= \"fill\"\n const [target, setTarget] = useState<any>()\n const conRef = useRef(null)\n const { childs, selectedProps } = useMemo(() => {\n let sProps: any = {}\n const c = Children.map(children, (child: any) => {\n let selected = child.props.value === value\n if (selected) sProps = child.props\n return cloneElement(child, {\n value: undefined,\n selected,\n onClick: () => {\n setTarget(null)\n onChange && onChange(child.props.value)\n }\n })\n })\n return {\n childs: c,\n selectedProps: sProps as OptionProps\n }\n }, [children, value])\n\n const mergeRefs = useMergeRefs(ref, conRef)\n const toggleMenu = () => setTarget(target ? null : conRef.current)\n\n return (\n <>\n <Input\n ref={mergeRefs}\n color={color}\n variant={variant === \"soft\" ? \"fill\" : variant}\n endIcon={<Stack flexDirection=\"row\" component=\"span\" > {(target ? <UpIcon /> : <DownIcon />)}</Stack>}\n readOnly\n value={typeof selectedProps.children === 'string' ? selectedProps.children : value}\n cursor=\"pointer\"\n userSelect=\"none\"\n startIcon={selectedProps.startIcon}\n focused={!!target}\n placeholder={placeholder}\n {...slotProps?.input}\n refs={{\n input: refs?.input,\n ...slotProps?.input?.refs\n }}\n slotProps={{\n rootContainer: {\n cursor: \"pointer\",\n userSelect: \"none\",\n ...(slotProps?.input?.slotProps?.container || {}),\n onClick: toggleMenu,\n }\n }}\n />\n <Menu\n ref={refs?.menu}\n target={target}\n placement=\"bottom-left\"\n {...slotProps?.menu}\n slotProps={{\n content: {\n mt: .5,\n ...slotProps?.menu?.content,\n width: conRef && (conRef?.current as any)?.clientWidth,\n }\n }}\n onClickOutside={toggleMenu}\n >\n <List\n ref={refs?.list}\n {...slotProps?.list}\n color={color}\n variant={variant}\n >\n {childs}\n </List>\n </Menu>\n </>\n )\n})\n\nexport default Select"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Select/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { ReactElement, useMemo, cloneElement, useState, Children, useRef } from 'react'\nimport Input, { InputProps } from '../Input'\nimport List, { ListProps } from '../List'\nimport Menu, { MenuProps } from '../Menu'\nimport Stack from '../Stack'\nimport { OptionProps } from '../Option'\nimport DownIcon from '@xanui/icons/KeyboardArrowDown';\nimport UpIcon from '@xanui/icons/KeyboardArrowUp';\nimport { UseColorTemplateColor, UseColorTemplateType, useInterface, useBreakpointPropsType, useMergeRefs } from '@xanui/core'\n\n\nexport type SelectProps = {\n value?: string | number;\n onChange?: (value: string | number) => void;\n children: ReactElement<OptionProps> | ReactElement<OptionProps>[];\n placeholder?: useBreakpointPropsType<string>;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: useBreakpointPropsType<UseColorTemplateType>;\n fullWidth?: boolean;\n refs?: {\n input?: React.Ref<any>;\n menu?: React.Ref<any>;\n list?: React.Ref<any>;\n };\n slotProps?: {\n menu?: Omit<MenuProps, 'children' | 'target'>;\n input?: Omit<InputProps, \"onChange\" | \"value\">;\n list?: Omit<ListProps, \"children\">\n }\n}\n\nconst Select = React.forwardRef(({ onChange, value, children, refs, ...props }: SelectProps, ref: React.Ref<any>) => {\n let [{ slotProps, color, variant, fullWidth, placeholder }] = useInterface<any>(\"Select\", props, {})\n color ??= \"brand\"\n variant ??= \"fill\"\n const [target, setTarget] = useState<any>()\n const conRef = useRef(null)\n const { childs, selectedProps } = useMemo(() => {\n let sProps: any = {}\n const c = Children.map(children, (child: any) => {\n let selected = child.props.value === value\n if (selected) sProps = child.props\n return cloneElement(child, {\n value: undefined,\n selected,\n onClick: () => {\n setTarget(null)\n onChange && onChange(child.props.value)\n }\n })\n })\n return {\n childs: c,\n selectedProps: sProps as OptionProps\n }\n }, [children, value])\n\n const mergeRefs = useMergeRefs(ref, conRef)\n const toggleMenu = () => setTarget(target ? null : conRef.current)\n\n return (\n <>\n <Input\n ref={mergeRefs}\n color={color}\n variant={variant === \"soft\" ? \"fill\" : variant}\n endIcon={<Stack flexDirection=\"row\" component=\"span\" > {(target ? <UpIcon /> : <DownIcon />)}</Stack>}\n readOnly\n value={typeof selectedProps.children === 'string' ? selectedProps.children : value}\n cursor=\"pointer\"\n userSelect=\"none\"\n startIcon={selectedProps.startIcon}\n focused={!!target}\n placeholder={placeholder}\n fullWidth={fullWidth}\n {...slotProps?.input}\n refs={{\n input: refs?.input,\n ...slotProps?.input?.refs\n }}\n slotProps={{\n rootContainer: {\n cursor: \"pointer\",\n userSelect: \"none\",\n ...(slotProps?.input?.slotProps?.container || {}),\n onClick: toggleMenu,\n }\n }}\n />\n <Menu\n ref={refs?.menu}\n target={target}\n placement=\"bottom-left\"\n {...slotProps?.menu}\n slotProps={{\n ...slotProps?.menu?.slotProps,\n content: {\n mt: .5,\n ...slotProps?.menu?.content,\n width: conRef && (conRef?.current as any)?.clientWidth,\n }\n }}\n onClickOutside={toggleMenu}\n >\n <List\n ref={refs?.list}\n {...slotProps?.list}\n color={color}\n variant={variant}\n >\n {childs}\n </List>\n </Menu>\n </>\n )\n})\n\nexport default Select"],"names":[],"mappings":";;;;;;;;;;;;;;AAiCA;;AAAiC;;;;;AAK7B;;;;;AAKQ;AAAc;;AAEV;;;;;;AAMH;AACL;;AAEI;AACA;;AAER;;AAGA;AAEA;AAqBgB;;AAkCpB;;"}
|
package/Select/index.mjs
CHANGED
|
@@ -11,9 +11,9 @@ import UpIcon from '@xanui/icons/KeyboardArrowUp';
|
|
|
11
11
|
import { useInterface, useMergeRefs } from '@xanui/core';
|
|
12
12
|
|
|
13
13
|
const Select = React.forwardRef((_a, ref) => {
|
|
14
|
-
var _b, _c, _d, _e, _f;
|
|
14
|
+
var _b, _c, _d, _e, _f, _g;
|
|
15
15
|
var { onChange, value, children, refs } = _a, props = __rest(_a, ["onChange", "value", "children", "refs"]);
|
|
16
|
-
let [{ slotProps, color, variant, placeholder }] = useInterface("Select", props, {});
|
|
16
|
+
let [{ slotProps, color, variant, fullWidth, placeholder }] = useInterface("Select", props, {});
|
|
17
17
|
color !== null && color !== void 0 ? color : (color = "brand");
|
|
18
18
|
variant !== null && variant !== void 0 ? variant : (variant = "fill");
|
|
19
19
|
const [target, setTarget] = useState();
|
|
@@ -40,11 +40,9 @@ const Select = React.forwardRef((_a, ref) => {
|
|
|
40
40
|
}, [children, value]);
|
|
41
41
|
const mergeRefs = useMergeRefs(ref, conRef);
|
|
42
42
|
const toggleMenu = () => setTarget(target ? null : conRef.current);
|
|
43
|
-
return (jsxs(Fragment, { children: [jsx(Input, Object.assign({ ref: mergeRefs, color: color, variant: variant === "soft" ? "fill" : variant, endIcon: jsxs(Stack, { flexDirection: "row", component: "span", children: [" ", (target ? jsx(UpIcon, {}) : jsx(DownIcon, {}))] }), readOnly: true, value: typeof selectedProps.children === 'string' ? selectedProps.children : value, cursor: "pointer", userSelect: "none", startIcon: selectedProps.startIcon, focused: !!target, placeholder: placeholder }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.input, { refs: Object.assign({ input: refs === null || refs === void 0 ? void 0 : refs.input }, (_b = slotProps === null || slotProps === void 0 ? void 0 : slotProps.input) === null || _b === void 0 ? void 0 : _b.refs), slotProps: {
|
|
43
|
+
return (jsxs(Fragment, { children: [jsx(Input, Object.assign({ ref: mergeRefs, color: color, variant: variant === "soft" ? "fill" : variant, endIcon: jsxs(Stack, { flexDirection: "row", component: "span", children: [" ", (target ? jsx(UpIcon, {}) : jsx(DownIcon, {}))] }), readOnly: true, value: typeof selectedProps.children === 'string' ? selectedProps.children : value, cursor: "pointer", userSelect: "none", startIcon: selectedProps.startIcon, focused: !!target, placeholder: placeholder, fullWidth: fullWidth }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.input, { refs: Object.assign({ input: refs === null || refs === void 0 ? void 0 : refs.input }, (_b = slotProps === null || slotProps === void 0 ? void 0 : slotProps.input) === null || _b === void 0 ? void 0 : _b.refs), slotProps: {
|
|
44
44
|
rootContainer: Object.assign(Object.assign({ cursor: "pointer", userSelect: "none" }, (((_d = (_c = slotProps === null || slotProps === void 0 ? void 0 : slotProps.input) === null || _c === void 0 ? void 0 : _c.slotProps) === null || _d === void 0 ? void 0 : _d.container) || {})), { onClick: toggleMenu })
|
|
45
|
-
} })), jsx(Menu, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.menu, target: target, placement: "bottom-left" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu, { slotProps: {
|
|
46
|
-
content: Object.assign(Object.assign({ mt: .5 }, (_e = slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu) === null || _e === void 0 ? void 0 : _e.content), { width: conRef && ((_f = conRef === null || conRef === void 0 ? void 0 : conRef.current) === null || _f === void 0 ? void 0 : _f.clientWidth) })
|
|
47
|
-
}, onClickOutside: toggleMenu, children: jsx(List, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.list }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.list, { color: color, variant: variant, children: childs })) }))] }));
|
|
45
|
+
} })), jsx(Menu, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.menu, target: target, placement: "bottom-left" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu, { slotProps: Object.assign(Object.assign({}, (_e = slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu) === null || _e === void 0 ? void 0 : _e.slotProps), { content: Object.assign(Object.assign({ mt: .5 }, (_f = slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu) === null || _f === void 0 ? void 0 : _f.content), { width: conRef && ((_g = conRef === null || conRef === void 0 ? void 0 : conRef.current) === null || _g === void 0 ? void 0 : _g.clientWidth) }) }), onClickOutside: toggleMenu, children: jsx(List, Object.assign({ ref: refs === null || refs === void 0 ? void 0 : refs.list }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.list, { color: color, variant: variant, children: childs })) }))] }));
|
|
48
46
|
});
|
|
49
47
|
|
|
50
48
|
export { Select as default };
|
package/Select/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/Select/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { ReactElement, useMemo, cloneElement, useState, Children, useRef } from 'react'\nimport Input, { InputProps } from '../Input'\nimport List, { ListProps } from '../List'\nimport Menu, { MenuProps } from '../Menu'\nimport Stack from '../Stack'\nimport { OptionProps } from '../Option'\nimport DownIcon from '@xanui/icons/KeyboardArrowDown';\nimport UpIcon from '@xanui/icons/KeyboardArrowUp';\nimport { UseColorTemplateColor, UseColorTemplateType, useInterface, useBreakpointPropsType, useMergeRefs } from '@xanui/core'\n\n\nexport type SelectProps = {\n value?: string | number;\n onChange?: (value: string | number) => void;\n children: ReactElement<OptionProps> | ReactElement<OptionProps>[];\n placeholder?: useBreakpointPropsType<string>;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: useBreakpointPropsType<UseColorTemplateType>;\n refs?: {\n input?: React.Ref<any>;\n menu?: React.Ref<any>;\n list?: React.Ref<any>;\n };\n slotProps?: {\n menu?: Omit<MenuProps, 'children' | 'target'>;\n input?: Omit<InputProps, \"onChange\" | \"value\">;\n list?: Omit<ListProps, \"children\">\n }\n}\n\nconst Select = React.forwardRef(({ onChange, value, children, refs, ...props }: SelectProps, ref: React.Ref<any>) => {\n let [{ slotProps, color, variant, placeholder }] = useInterface<any>(\"Select\", props, {})\n color ??= \"brand\"\n variant ??= \"fill\"\n const [target, setTarget] = useState<any>()\n const conRef = useRef(null)\n const { childs, selectedProps } = useMemo(() => {\n let sProps: any = {}\n const c = Children.map(children, (child: any) => {\n let selected = child.props.value === value\n if (selected) sProps = child.props\n return cloneElement(child, {\n value: undefined,\n selected,\n onClick: () => {\n setTarget(null)\n onChange && onChange(child.props.value)\n }\n })\n })\n return {\n childs: c,\n selectedProps: sProps as OptionProps\n }\n }, [children, value])\n\n const mergeRefs = useMergeRefs(ref, conRef)\n const toggleMenu = () => setTarget(target ? null : conRef.current)\n\n return (\n <>\n <Input\n ref={mergeRefs}\n color={color}\n variant={variant === \"soft\" ? \"fill\" : variant}\n endIcon={<Stack flexDirection=\"row\" component=\"span\" > {(target ? <UpIcon /> : <DownIcon />)}</Stack>}\n readOnly\n value={typeof selectedProps.children === 'string' ? selectedProps.children : value}\n cursor=\"pointer\"\n userSelect=\"none\"\n startIcon={selectedProps.startIcon}\n focused={!!target}\n placeholder={placeholder}\n {...slotProps?.input}\n refs={{\n input: refs?.input,\n ...slotProps?.input?.refs\n }}\n slotProps={{\n rootContainer: {\n cursor: \"pointer\",\n userSelect: \"none\",\n ...(slotProps?.input?.slotProps?.container || {}),\n onClick: toggleMenu,\n }\n }}\n />\n <Menu\n ref={refs?.menu}\n target={target}\n placement=\"bottom-left\"\n {...slotProps?.menu}\n slotProps={{\n content: {\n mt: .5,\n ...slotProps?.menu?.content,\n width: conRef && (conRef?.current as any)?.clientWidth,\n }\n }}\n onClickOutside={toggleMenu}\n >\n <List\n ref={refs?.list}\n {...slotProps?.list}\n color={color}\n variant={variant}\n >\n {childs}\n </List>\n </Menu>\n </>\n )\n})\n\nexport default Select"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/Select/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { ReactElement, useMemo, cloneElement, useState, Children, useRef } from 'react'\nimport Input, { InputProps } from '../Input'\nimport List, { ListProps } from '../List'\nimport Menu, { MenuProps } from '../Menu'\nimport Stack from '../Stack'\nimport { OptionProps } from '../Option'\nimport DownIcon from '@xanui/icons/KeyboardArrowDown';\nimport UpIcon from '@xanui/icons/KeyboardArrowUp';\nimport { UseColorTemplateColor, UseColorTemplateType, useInterface, useBreakpointPropsType, useMergeRefs } from '@xanui/core'\n\n\nexport type SelectProps = {\n value?: string | number;\n onChange?: (value: string | number) => void;\n children: ReactElement<OptionProps> | ReactElement<OptionProps>[];\n placeholder?: useBreakpointPropsType<string>;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: useBreakpointPropsType<UseColorTemplateType>;\n fullWidth?: boolean;\n refs?: {\n input?: React.Ref<any>;\n menu?: React.Ref<any>;\n list?: React.Ref<any>;\n };\n slotProps?: {\n menu?: Omit<MenuProps, 'children' | 'target'>;\n input?: Omit<InputProps, \"onChange\" | \"value\">;\n list?: Omit<ListProps, \"children\">\n }\n}\n\nconst Select = React.forwardRef(({ onChange, value, children, refs, ...props }: SelectProps, ref: React.Ref<any>) => {\n let [{ slotProps, color, variant, fullWidth, placeholder }] = useInterface<any>(\"Select\", props, {})\n color ??= \"brand\"\n variant ??= \"fill\"\n const [target, setTarget] = useState<any>()\n const conRef = useRef(null)\n const { childs, selectedProps } = useMemo(() => {\n let sProps: any = {}\n const c = Children.map(children, (child: any) => {\n let selected = child.props.value === value\n if (selected) sProps = child.props\n return cloneElement(child, {\n value: undefined,\n selected,\n onClick: () => {\n setTarget(null)\n onChange && onChange(child.props.value)\n }\n })\n })\n return {\n childs: c,\n selectedProps: sProps as OptionProps\n }\n }, [children, value])\n\n const mergeRefs = useMergeRefs(ref, conRef)\n const toggleMenu = () => setTarget(target ? null : conRef.current)\n\n return (\n <>\n <Input\n ref={mergeRefs}\n color={color}\n variant={variant === \"soft\" ? \"fill\" : variant}\n endIcon={<Stack flexDirection=\"row\" component=\"span\" > {(target ? <UpIcon /> : <DownIcon />)}</Stack>}\n readOnly\n value={typeof selectedProps.children === 'string' ? selectedProps.children : value}\n cursor=\"pointer\"\n userSelect=\"none\"\n startIcon={selectedProps.startIcon}\n focused={!!target}\n placeholder={placeholder}\n fullWidth={fullWidth}\n {...slotProps?.input}\n refs={{\n input: refs?.input,\n ...slotProps?.input?.refs\n }}\n slotProps={{\n rootContainer: {\n cursor: \"pointer\",\n userSelect: \"none\",\n ...(slotProps?.input?.slotProps?.container || {}),\n onClick: toggleMenu,\n }\n }}\n />\n <Menu\n ref={refs?.menu}\n target={target}\n placement=\"bottom-left\"\n {...slotProps?.menu}\n slotProps={{\n ...slotProps?.menu?.slotProps,\n content: {\n mt: .5,\n ...slotProps?.menu?.content,\n width: conRef && (conRef?.current as any)?.clientWidth,\n }\n }}\n onClickOutside={toggleMenu}\n >\n <List\n ref={refs?.list}\n {...slotProps?.list}\n color={color}\n variant={variant}\n >\n {childs}\n </List>\n </Menu>\n </>\n )\n})\n\nexport default Select"],"names":[],"mappings":";;;;;;;;;;;;AAiCA;;AAAiC;;;;;AAK7B;;;;;AAKQ;AAAc;;AAEV;;;;;;AAMH;AACL;;AAEI;AACA;;AAER;;AAGA;AAEA;AAqBgB;;AAkCpB;;"}
|