@xanui/ui 1.2.6 → 1.2.7
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/Accordion/index.cjs +5 -5
- package/Accordion/index.cjs.map +1 -1
- package/Accordion/index.d.ts +3 -3
- package/Accordion/index.js +5 -5
- package/Accordion/index.js.map +1 -1
- package/Alert/index.cjs +19 -17
- package/Alert/index.cjs.map +1 -1
- package/Alert/index.d.ts +2 -2
- package/Alert/index.js +19 -17
- package/Alert/index.js.map +1 -1
- package/Autocomplete/index.cjs +2 -2
- package/Autocomplete/index.cjs.map +1 -1
- package/Autocomplete/index.d.ts +7 -7
- package/Autocomplete/index.js +2 -2
- package/Autocomplete/index.js.map +1 -1
- package/Avatar/index.cjs +2 -2
- package/Avatar/index.cjs.map +1 -1
- package/Avatar/index.d.ts +2 -2
- package/Avatar/index.js +2 -2
- package/Avatar/index.js.map +1 -1
- package/AvatarBox/index.cjs +19 -0
- package/AvatarBox/index.cjs.map +1 -0
- package/AvatarBox/index.d.ts +19 -0
- package/AvatarBox/index.js +17 -0
- package/AvatarBox/index.js.map +1 -0
- package/AvatarPicker/index.cjs +80 -0
- package/AvatarPicker/index.cjs.map +1 -0
- package/AvatarPicker/index.d.ts +27 -0
- package/AvatarPicker/index.js +78 -0
- package/AvatarPicker/index.js.map +1 -0
- package/Badge/index.cjs +1 -1
- package/Badge/index.cjs.map +1 -1
- package/Badge/index.d.ts +4 -4
- package/Badge/index.js +1 -1
- package/Badge/index.js.map +1 -1
- package/Box/index.d.ts +2 -2
- package/Button/index.cjs +5 -3
- package/Button/index.cjs.map +1 -1
- package/Button/index.d.ts +2 -2
- package/Button/index.js +5 -3
- package/Button/index.js.map +1 -1
- package/ButtonGroup/index.cjs +3 -2
- package/ButtonGroup/index.cjs.map +1 -1
- package/ButtonGroup/index.d.ts +2 -2
- package/ButtonGroup/index.js +3 -2
- package/ButtonGroup/index.js.map +1 -1
- package/Calendar/index.cjs +10 -10
- package/Calendar/index.cjs.map +1 -1
- package/Calendar/index.js +10 -10
- package/Calendar/index.js.map +1 -1
- package/CalendarInput/index.cjs +1 -1
- package/CalendarInput/index.cjs.map +1 -1
- package/CalendarInput/index.js +1 -1
- package/CalendarInput/index.js.map +1 -1
- package/Carousel/index.cjs +231 -0
- package/Carousel/index.cjs.map +1 -0
- package/Carousel/index.d.ts +28 -0
- package/Carousel/index.js +229 -0
- package/Carousel/index.js.map +1 -0
- package/Checkbox/index.cjs +2 -2
- package/Checkbox/index.cjs.map +1 -1
- package/Checkbox/index.d.ts +2 -2
- package/Checkbox/index.js +2 -2
- package/Checkbox/index.js.map +1 -1
- package/Chip/index.cjs +3 -3
- package/Chip/index.cjs.map +1 -1
- package/Chip/index.d.ts +2 -2
- package/Chip/index.js +3 -3
- package/Chip/index.js.map +1 -1
- package/CircleProgress/index.cjs +10 -10
- package/CircleProgress/index.cjs.map +1 -1
- package/CircleProgress/index.d.ts +2 -2
- package/CircleProgress/index.js +10 -10
- package/CircleProgress/index.js.map +1 -1
- package/ClickOutside/index.cjs +3 -12
- package/ClickOutside/index.cjs.map +1 -1
- package/ClickOutside/index.d.ts +3 -3
- package/ClickOutside/index.js +4 -13
- package/ClickOutside/index.js.map +1 -1
- package/Collaps/index.cjs +5 -5
- package/Collaps/index.cjs.map +1 -1
- package/Collaps/index.d.ts +2 -2
- package/Collaps/index.js +5 -5
- package/Collaps/index.js.map +1 -1
- package/Container/index.d.ts +2 -2
- package/DataFilter/index.d.ts +2 -2
- package/DataFilter/options/DateFilter.cjs +3 -3
- package/DataFilter/options/DateFilter.cjs.map +1 -1
- package/DataFilter/options/DateFilter.js +3 -3
- package/DataFilter/options/DateFilter.js.map +1 -1
- package/DataFilter/options/DateRangeFilter.cjs +2 -2
- package/DataFilter/options/DateRangeFilter.cjs.map +1 -1
- package/DataFilter/options/DateRangeFilter.js +2 -2
- package/DataFilter/options/DateRangeFilter.js.map +1 -1
- package/DataFilter/options/MultiSelectFilter.cjs +3 -3
- package/DataFilter/options/MultiSelectFilter.cjs.map +1 -1
- package/DataFilter/options/MultiSelectFilter.js +3 -3
- package/DataFilter/options/MultiSelectFilter.js.map +1 -1
- package/DataFilter/options/NumberFilter.cjs +2 -2
- package/DataFilter/options/NumberFilter.cjs.map +1 -1
- package/DataFilter/options/NumberFilter.js +2 -2
- package/DataFilter/options/NumberFilter.js.map +1 -1
- package/DataFilter/options/NumberRangeFilter.cjs +2 -2
- package/DataFilter/options/NumberRangeFilter.cjs.map +1 -1
- package/DataFilter/options/NumberRangeFilter.js +2 -2
- package/DataFilter/options/NumberRangeFilter.js.map +1 -1
- package/DataFilter/options/SelectFilter.cjs +3 -3
- package/DataFilter/options/SelectFilter.cjs.map +1 -1
- package/DataFilter/options/SelectFilter.js +3 -3
- package/DataFilter/options/SelectFilter.js.map +1 -1
- package/DataFilter/options/TextFilter.cjs +2 -2
- package/DataFilter/options/TextFilter.cjs.map +1 -1
- package/DataFilter/options/TextFilter.js +2 -2
- package/DataFilter/options/TextFilter.js.map +1 -1
- package/Datatable/FilterBox.cjs +2 -2
- package/Datatable/FilterBox.cjs.map +1 -1
- package/Datatable/FilterBox.js +2 -2
- package/Datatable/FilterBox.js.map +1 -1
- package/Datatable/Row.cjs +2 -2
- package/Datatable/Row.cjs.map +1 -1
- package/Datatable/Row.js +2 -2
- package/Datatable/Row.js.map +1 -1
- package/Datatable/SelectedBox.cjs +2 -2
- package/Datatable/SelectedBox.cjs.map +1 -1
- package/Datatable/SelectedBox.js +2 -2
- package/Datatable/SelectedBox.js.map +1 -1
- package/Datatable/Table.cjs +1 -1
- package/Datatable/Table.cjs.map +1 -1
- package/Datatable/Table.js +1 -1
- package/Datatable/Table.js.map +1 -1
- package/Datatable/TableHead.cjs +3 -3
- package/Datatable/TableHead.cjs.map +1 -1
- package/Datatable/TableHead.js +3 -3
- package/Datatable/TableHead.js.map +1 -1
- package/Datatable/index.cjs +1 -1
- package/Datatable/index.cjs.map +1 -1
- package/Datatable/index.d.ts +2 -2
- package/Datatable/index.js +1 -1
- package/Datatable/index.js.map +1 -1
- package/Divider/index.cjs +3 -3
- package/Divider/index.cjs.map +1 -1
- package/Divider/index.d.ts +2 -2
- package/Divider/index.js +3 -3
- package/Divider/index.js.map +1 -1
- package/Drawer/index.cjs +2 -2
- package/Drawer/index.cjs.map +1 -1
- package/Drawer/index.js +2 -2
- package/Drawer/index.js.map +1 -1
- package/FilePicker/index.cjs +115 -0
- package/FilePicker/index.cjs.map +1 -0
- package/FilePicker/index.d.ts +23 -0
- package/FilePicker/index.js +113 -0
- package/FilePicker/index.js.map +1 -0
- package/Form/index.cjs +1 -1
- package/Form/index.cjs.map +1 -1
- package/Form/index.d.ts +2 -2
- package/Form/index.js +1 -1
- package/Form/index.js.map +1 -1
- package/GalleryPicker/index.cjs +88 -0
- package/GalleryPicker/index.cjs.map +1 -0
- package/GalleryPicker/index.d.ts +26 -0
- package/GalleryPicker/index.js +86 -0
- package/GalleryPicker/index.js.map +1 -0
- package/GridContainer/index.d.ts +2 -2
- package/GridItem/index.d.ts +2 -2
- package/IconButton/index.cjs +6 -3
- package/IconButton/index.cjs.map +1 -1
- package/IconButton/index.d.ts +2 -2
- package/IconButton/index.js +6 -3
- package/IconButton/index.js.map +1 -1
- package/Image/index.cjs +2 -14
- package/Image/index.cjs.map +1 -1
- package/Image/index.d.ts +3 -5
- package/Image/index.js +3 -15
- package/Image/index.js.map +1 -1
- package/Input/index.cjs +10 -10
- package/Input/index.cjs.map +1 -1
- package/Input/index.d.ts +14 -14
- package/Input/index.js +10 -10
- package/Input/index.js.map +1 -1
- package/InputNumber/index.d.ts +2 -2
- package/Label/index.cjs +1 -1
- package/Label/index.cjs.map +1 -1
- package/Label/index.d.ts +2 -2
- package/Label/index.js +1 -1
- package/Label/index.js.map +1 -1
- package/Layer/index.cjs +12 -13
- package/Layer/index.cjs.map +1 -1
- package/Layer/index.d.ts +5 -5
- package/Layer/index.js +13 -14
- package/Layer/index.js.map +1 -1
- package/LineProgress/index.cjs +6 -6
- package/LineProgress/index.cjs.map +1 -1
- package/LineProgress/index.d.ts +2 -2
- package/LineProgress/index.js +6 -6
- package/LineProgress/index.js.map +1 -1
- package/Link/index.cjs +41 -0
- package/Link/index.cjs.map +1 -0
- package/Link/index.d.ts +17 -0
- package/Link/index.js +39 -0
- package/Link/index.js.map +1 -0
- package/List/index.cjs +1 -1
- package/List/index.cjs.map +1 -1
- package/List/index.d.ts +2 -2
- package/List/index.js +1 -1
- package/List/index.js.map +1 -1
- package/ListItem/index.cjs +8 -8
- package/ListItem/index.cjs.map +1 -1
- package/ListItem/index.d.ts +2 -2
- package/ListItem/index.js +8 -8
- package/ListItem/index.js.map +1 -1
- package/LoadingBox/index.cjs +2 -2
- package/LoadingBox/index.cjs.map +1 -1
- package/LoadingBox/index.d.ts +2 -2
- package/LoadingBox/index.js +2 -2
- package/LoadingBox/index.js.map +1 -1
- package/Menu/index.cjs +6 -21
- package/Menu/index.cjs.map +1 -1
- package/Menu/index.d.ts +6 -4
- package/Menu/index.js +6 -21
- package/Menu/index.js.map +1 -1
- package/Modal/index.cjs +5 -5
- package/Modal/index.cjs.map +1 -1
- package/Modal/index.js +5 -5
- package/Modal/index.js.map +1 -1
- package/Option/index.d.ts +2 -2
- package/PasswordInput/index.cjs +21 -0
- package/PasswordInput/index.cjs.map +1 -0
- package/PasswordInput/index.d.ts +11 -0
- package/PasswordInput/index.js +19 -0
- package/PasswordInput/index.js.map +1 -0
- package/Portal/index.d.ts +3 -3
- package/Radio/index.d.ts +2 -2
- package/RangeSlider/index.cjs +158 -0
- package/RangeSlider/index.cjs.map +1 -0
- package/RangeSlider/index.d.ts +24 -0
- package/RangeSlider/index.js +156 -0
- package/RangeSlider/index.js.map +1 -0
- package/Scrollbar/index.cjs +6 -6
- package/Scrollbar/index.cjs.map +1 -1
- package/Scrollbar/index.d.ts +3 -3
- package/Scrollbar/index.js +6 -6
- package/Scrollbar/index.js.map +1 -1
- package/Select/index.cjs +2 -2
- package/Select/index.cjs.map +1 -1
- package/Select/index.d.ts +5 -5
- package/Select/index.js +2 -2
- package/Select/index.js.map +1 -1
- package/Skeleton/index.cjs +7 -5
- package/Skeleton/index.cjs.map +1 -1
- package/Skeleton/index.js +7 -5
- package/Skeleton/index.js.map +1 -1
- package/Stack/index.d.ts +2 -2
- package/Switch/index.cjs +2 -2
- package/Switch/index.cjs.map +1 -1
- package/Switch/index.d.ts +3 -3
- package/Switch/index.js +2 -2
- package/Switch/index.js.map +1 -1
- package/Tab/index.cjs +23 -2
- package/Tab/index.cjs.map +1 -1
- package/Tab/index.d.ts +2 -2
- package/Tab/index.js +25 -4
- package/Tab/index.js.map +1 -1
- package/Table/index.cjs +9 -9
- package/Table/index.cjs.map +1 -1
- package/Table/index.d.ts +2 -2
- package/Table/index.js +9 -9
- package/Table/index.js.map +1 -1
- package/TableBody/index.d.ts +2 -2
- package/TableCell/index.cjs +1 -1
- package/TableCell/index.cjs.map +1 -1
- package/TableCell/index.d.ts +2 -2
- package/TableCell/index.js +1 -1
- package/TableCell/index.js.map +1 -1
- package/TableFooter/index.d.ts +2 -2
- package/TableHead/index.d.ts +2 -2
- package/TablePagination/index.cjs +2 -2
- package/TablePagination/index.cjs.map +1 -1
- package/TablePagination/index.d.ts +2 -2
- package/TablePagination/index.js +2 -2
- package/TablePagination/index.js.map +1 -1
- package/TableRow/index.d.ts +2 -2
- package/Tabs/context.cjs +11 -0
- package/Tabs/context.cjs.map +1 -0
- package/Tabs/context.js +8 -0
- package/Tabs/context.js.map +1 -0
- package/Tabs/index.cjs +83 -168
- package/Tabs/index.cjs.map +1 -1
- package/Tabs/index.d.ts +4 -22
- package/Tabs/index.js +86 -171
- package/Tabs/index.js.map +1 -1
- package/Tabs/types.d.ts +16 -0
- package/Text/index.cjs +1 -1
- package/Text/index.cjs.map +1 -1
- package/Text/index.d.ts +2 -2
- package/Text/index.js +1 -1
- package/Text/index.js.map +1 -1
- package/Toast/index.cjs +15 -16
- package/Toast/index.cjs.map +1 -1
- package/Toast/index.js +16 -17
- package/Toast/index.js.map +1 -1
- package/Tooltip/index.cjs +2 -2
- package/Tooltip/index.cjs.map +1 -1
- package/Tooltip/index.js +2 -2
- package/Tooltip/index.js.map +1 -1
- package/ViewBox/index.d.ts +2 -2
- package/index.cjs +124 -110
- package/index.cjs.map +1 -1
- package/index.d.ts +8 -1
- package/index.js +8 -1
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/readme.md +1 -1
- package/useBlurCss/index.cjs +1 -2
- package/useBlurCss/index.cjs.map +1 -1
- package/useBlurCss/index.js +1 -2
- package/useBlurCss/index.js.map +1 -1
- package/useContextMenu/index.cjs +2 -2
- package/useContextMenu/index.cjs.map +1 -1
- package/useContextMenu/index.d.ts +1 -1
- package/useContextMenu/index.js +2 -2
- package/useContextMenu/index.js.map +1 -1
- package/Paper/index.cjs +0 -16
- package/Paper/index.cjs.map +0 -1
- package/Paper/index.d.ts +0 -8
- package/Paper/index.js +0 -14
- package/Paper/index.js.map +0 -1
package/Link/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { TagComponentType, TagProps } from '@xanui/core';
|
|
3
|
+
|
|
4
|
+
type LinkProps<T extends TagComponentType = "a"> = Omit<TagProps<T>, "component"> & {
|
|
5
|
+
component?: TagComponentType;
|
|
6
|
+
href?: string;
|
|
7
|
+
target?: React__default.HTMLAttributeAnchorTarget;
|
|
8
|
+
rel?: string;
|
|
9
|
+
underline?: "none" | "hover" | "always";
|
|
10
|
+
external?: boolean;
|
|
11
|
+
isActive?: boolean;
|
|
12
|
+
isDisabled?: boolean;
|
|
13
|
+
};
|
|
14
|
+
declare const Link: React__default.ForwardRefExoticComponent<Omit<LinkProps<TagComponentType>, "ref"> & React__default.RefAttributes<any>>;
|
|
15
|
+
|
|
16
|
+
export { Link as default };
|
|
17
|
+
export type { LinkProps };
|
package/Link/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { __rest } from 'tslib';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import React, { useMemo } from 'react';
|
|
5
|
+
import { Tag } from '@xanui/core';
|
|
6
|
+
|
|
7
|
+
const Link = React.forwardRef((_a, ref) => {
|
|
8
|
+
var { children, component, href, target, rel, underline = "hover", external, isActive, isDisabled } = _a, props = __rest(_a, ["children", "component", "href", "target", "rel", "underline", "external", "isActive", "isDisabled"]);
|
|
9
|
+
const Component = component || "a";
|
|
10
|
+
const isExternal = useMemo(() => {
|
|
11
|
+
if (external !== undefined)
|
|
12
|
+
return external;
|
|
13
|
+
if (!href)
|
|
14
|
+
return false;
|
|
15
|
+
return /^https?:\/\//.test(href);
|
|
16
|
+
}, [external, href]);
|
|
17
|
+
const computedRel = useMemo(() => {
|
|
18
|
+
if (isExternal && target === "_blank") {
|
|
19
|
+
return rel || "noopener noreferrer";
|
|
20
|
+
}
|
|
21
|
+
return rel;
|
|
22
|
+
}, [isExternal, target, rel]);
|
|
23
|
+
return (jsx(Tag, Object.assign({}, props, { ref: ref, component: Component, href: href, target: isExternal ? "_blank" : target, rel: computedRel, "aria-disabled": isDisabled || undefined, baseClass: "link", "data-active": isActive || undefined, "data-disabled": isDisabled || undefined, sxr: {
|
|
24
|
+
textDecoration: underline === "always" ? "underline" : "none",
|
|
25
|
+
cursor: isDisabled ? "not-allowed" : "pointer",
|
|
26
|
+
opacity: isDisabled ? 0.6 : 1,
|
|
27
|
+
"&:hover": {
|
|
28
|
+
textDecoration: underline === "hover" ? "underline" : undefined,
|
|
29
|
+
},
|
|
30
|
+
"&:focus-visible": {
|
|
31
|
+
outline: "2px solid var(--color-primary)",
|
|
32
|
+
outlineOffset: "2px",
|
|
33
|
+
},
|
|
34
|
+
}, children: children })));
|
|
35
|
+
});
|
|
36
|
+
Link.displayName = "Link";
|
|
37
|
+
|
|
38
|
+
export { Link as default };
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Link/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useMemo } from \"react\";\nimport { Tag, TagProps, TagComponentType } from \"@xanui/core\";\n\nexport type LinkProps<T extends TagComponentType = \"a\"> = Omit<TagProps<T>, \"component\"> & {\n component?: TagComponentType;\n\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n rel?: string;\n\n underline?: \"none\" | \"hover\" | \"always\";\n external?: boolean;\n\n isActive?: boolean;\n isDisabled?: boolean;\n};\n\nconst Link = React.forwardRef(<T extends TagComponentType = \"a\">({ children, component, href, target, rel, underline = \"hover\", external, isActive, isDisabled, ...props }: LinkProps<T>, ref: React.Ref<any>) => {\n const Component = component || \"a\";\n\n const isExternal = useMemo(() => {\n if (external !== undefined) return external;\n if (!href) return false;\n return /^https?:\\/\\//.test(href);\n }, [external, href]);\n\n const computedRel = useMemo(() => {\n if (isExternal && target === \"_blank\") {\n return rel || \"noopener noreferrer\";\n }\n return rel;\n }, [isExternal, target, rel]);\n\n return (\n <Tag\n {...props}\n ref={ref}\n component={Component}\n href={href}\n target={isExternal ? \"_blank\" : target}\n rel={computedRel}\n aria-disabled={isDisabled || undefined}\n baseClass=\"link\"\n data-active={isActive || undefined}\n data-disabled={isDisabled || undefined}\n sxr={{\n textDecoration: underline === \"always\" ? \"underline\" : \"none\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n opacity: isDisabled ? 0.6 : 1,\n \"&:hover\": {\n textDecoration:\n underline === \"hover\" ? \"underline\" : undefined,\n },\n \"&:focus-visible\": {\n outline: \"2px solid var(--color-primary)\",\n outlineOffset: \"2px\",\n },\n }}\n >\n {children}\n </Tag>\n );\n}\n);\n\nLink.displayName = \"Link\";\n\nexport default Link;"],"names":[],"mappings":";;;;;;AAkBA;;AACI;AAEA;;AACgC;AAC5B;AAAW;AACX;AACJ;AAEA;AACI;;;AAGA;;;;;;AAmBQ;;AAGC;AACD;AACI;AACA;AACH;;AAMjB;AAGA;;"}
|
package/List/index.cjs
CHANGED
|
@@ -23,7 +23,7 @@ const List = React.forwardRef((_a, ref) => {
|
|
|
23
23
|
if (size)
|
|
24
24
|
_p.size = size;
|
|
25
25
|
const p = core.useBreakpointProps(_p);
|
|
26
|
-
color = (_b = p.color) !== null && _b !== void 0 ? _b : "
|
|
26
|
+
color = (_b = p.color) !== null && _b !== void 0 ? _b : "primary";
|
|
27
27
|
variant = (_c = p.variant) !== null && _c !== void 0 ? _c : "fill";
|
|
28
28
|
size = (_d = p.size) !== null && _d !== void 0 ? _d : "medium";
|
|
29
29
|
return (jsxRuntime.jsx(ListContext.ListContext.Provider, { value: { color, variant, size, listItem: slotProps === null || slotProps === void 0 ? void 0 : slotProps.listItem }, children: jsxRuntime.jsx(core.Tag, Object.assign({ component: 'ul' }, props, { baseClass: 'list', sxr: Object.assign({ listStyle: "none", p: 0, m: 0 }, (sx || {})), ref: ref, children: children })) }));
|
package/List/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/List/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, UseColorTemplateType, UseColorTemplateColor, useBreakpointProps, useBreakpointPropsType } from '@xanui/core'\nimport { ListContext } from './ListContext';\nimport { ListItemProps } from '../ListItem';\n\nexport type ListProps<T extends TagComponentType = \"ul\"> = Omit<TagProps<T>, 'color' | \"size\"> & {\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: Omit<useBreakpointPropsType<UseColorTemplateType>, \"outline\">;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n slotProps?: {\n listItem?: Omit<ListItemProps, \"children\">\n }\n}\n\n\nconst List = React.forwardRef(<T extends TagComponentType = \"ul\">({ children, slotProps, ...rest }: ListProps<T>, ref: React.Ref<any>) => {\n let [{ sx, color, variant, hoverColor, hoverVariant, size, ...props }] = useInterface<any>(\"List\", rest, {})\n const _p: any = {}\n if (color) _p.color = color\n if (variant) _p.variant = variant\n if (hoverColor) _p.hoverColor = hoverColor\n if (hoverVariant) _p.hoverVariant = hoverVariant\n if (size) _p.size = size\n const p: any = useBreakpointProps(_p)\n\n color = p.color ?? \"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/List/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, UseColorTemplateType, UseColorTemplateColor, useBreakpointProps, useBreakpointPropsType } from '@xanui/core'\nimport { ListContext } from './ListContext';\nimport { ListItemProps } from '../ListItem';\n\nexport type ListProps<T extends TagComponentType = \"ul\"> = Omit<TagProps<T>, 'color' | \"size\"> & {\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: Omit<useBreakpointPropsType<UseColorTemplateType>, \"outline\">;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n slotProps?: {\n listItem?: Omit<ListItemProps, \"children\">\n }\n}\n\n\nconst List = React.forwardRef(<T extends TagComponentType = \"ul\">({ children, slotProps, ...rest }: ListProps<T>, ref: React.Ref<any>) => {\n let [{ sx, color, variant, hoverColor, hoverVariant, size, ...props }] = useInterface<any>(\"List\", rest, {})\n const _p: any = {}\n if (color) _p.color = color\n if (variant) _p.variant = variant\n if (hoverColor) _p.hoverColor = hoverColor\n if (hoverVariant) _p.hoverVariant = hoverVariant\n if (size) _p.size = size\n const p: any = useBreakpointProps(_p)\n\n color = p.color ?? \"primary\"\n variant = p.variant ?? \"fill\"\n size = p.size ?? \"medium\"\n\n return (\n <ListContext.Provider value={{ color, variant, size, listItem: slotProps?.listItem }}>\n <Tag\n component='ul'\n {...props}\n baseClass='list'\n sxr={{\n listStyle: \"none\",\n p: 0,\n m: 0,\n ...(sx || {} as any)\n }}\n ref={ref}\n >\n {children}\n </Tag>\n </ListContext.Provider>\n )\n})\n\nexport default List"],"names":[],"mappings":";;;;;;;;;AAgBA;;;AACI;;AAEA;AAAW;AACX;AAAa;AACb;AAAgB;AAChB;AAAkB;AAClB;AAAU;AACV;AAEA;AACA;AACA;AAEA;AAkBJ;;"}
|
package/List/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React__default from 'react';
|
|
2
2
|
import { TagComponentType, TagProps, useBreakpointPropsType, UseColorTemplateColor, UseColorTemplateType } from '@xanui/core';
|
|
3
3
|
import { ListItemProps } from '../ListItem/index.js';
|
|
4
4
|
|
|
@@ -10,7 +10,7 @@ type ListProps<T extends TagComponentType = "ul"> = Omit<TagProps<T>, 'color' |
|
|
|
10
10
|
listItem?: Omit<ListItemProps, "children">;
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
|
-
declare const List:
|
|
13
|
+
declare const List: React__default.ForwardRefExoticComponent<Omit<ListProps<TagComponentType>, "ref"> & React__default.RefAttributes<any>>;
|
|
14
14
|
|
|
15
15
|
export { List as default };
|
|
16
16
|
export type { ListProps };
|
package/List/index.js
CHANGED
|
@@ -21,7 +21,7 @@ const List = React.forwardRef((_a, ref) => {
|
|
|
21
21
|
if (size)
|
|
22
22
|
_p.size = size;
|
|
23
23
|
const p = useBreakpointProps(_p);
|
|
24
|
-
color = (_b = p.color) !== null && _b !== void 0 ? _b : "
|
|
24
|
+
color = (_b = p.color) !== null && _b !== void 0 ? _b : "primary";
|
|
25
25
|
variant = (_c = p.variant) !== null && _c !== void 0 ? _c : "fill";
|
|
26
26
|
size = (_d = p.size) !== null && _d !== void 0 ? _d : "medium";
|
|
27
27
|
return (jsx(ListContext.Provider, { value: { color, variant, size, listItem: slotProps === null || slotProps === void 0 ? void 0 : slotProps.listItem }, children: jsx(Tag, Object.assign({ component: 'ul' }, props, { baseClass: 'list', sxr: Object.assign({ listStyle: "none", p: 0, m: 0 }, (sx || {})), ref: ref, children: children })) }));
|
package/List/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/List/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, UseColorTemplateType, UseColorTemplateColor, useBreakpointProps, useBreakpointPropsType } from '@xanui/core'\nimport { ListContext } from './ListContext';\nimport { ListItemProps } from '../ListItem';\n\nexport type ListProps<T extends TagComponentType = \"ul\"> = Omit<TagProps<T>, 'color' | \"size\"> & {\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: Omit<useBreakpointPropsType<UseColorTemplateType>, \"outline\">;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n slotProps?: {\n listItem?: Omit<ListItemProps, \"children\">\n }\n}\n\n\nconst List = React.forwardRef(<T extends TagComponentType = \"ul\">({ children, slotProps, ...rest }: ListProps<T>, ref: React.Ref<any>) => {\n let [{ sx, color, variant, hoverColor, hoverVariant, size, ...props }] = useInterface<any>(\"List\", rest, {})\n const _p: any = {}\n if (color) _p.color = color\n if (variant) _p.variant = variant\n if (hoverColor) _p.hoverColor = hoverColor\n if (hoverVariant) _p.hoverVariant = hoverVariant\n if (size) _p.size = size\n const p: any = useBreakpointProps(_p)\n\n color = p.color ?? \"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/List/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, UseColorTemplateType, UseColorTemplateColor, useBreakpointProps, useBreakpointPropsType } from '@xanui/core'\nimport { ListContext } from './ListContext';\nimport { ListItemProps } from '../ListItem';\n\nexport type ListProps<T extends TagComponentType = \"ul\"> = Omit<TagProps<T>, 'color' | \"size\"> & {\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n variant?: Omit<useBreakpointPropsType<UseColorTemplateType>, \"outline\">;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n slotProps?: {\n listItem?: Omit<ListItemProps, \"children\">\n }\n}\n\n\nconst List = React.forwardRef(<T extends TagComponentType = \"ul\">({ children, slotProps, ...rest }: ListProps<T>, ref: React.Ref<any>) => {\n let [{ sx, color, variant, hoverColor, hoverVariant, size, ...props }] = useInterface<any>(\"List\", rest, {})\n const _p: any = {}\n if (color) _p.color = color\n if (variant) _p.variant = variant\n if (hoverColor) _p.hoverColor = hoverColor\n if (hoverVariant) _p.hoverVariant = hoverVariant\n if (size) _p.size = size\n const p: any = useBreakpointProps(_p)\n\n color = p.color ?? \"primary\"\n variant = p.variant ?? \"fill\"\n size = p.size ?? \"medium\"\n\n return (\n <ListContext.Provider value={{ color, variant, size, listItem: slotProps?.listItem }}>\n <Tag\n component='ul'\n {...props}\n baseClass='list'\n sxr={{\n listStyle: \"none\",\n p: 0,\n m: 0,\n ...(sx || {} as any)\n }}\n ref={ref}\n >\n {children}\n </Tag>\n </ListContext.Provider>\n )\n})\n\nexport default List"],"names":[],"mappings":";;;;;;;AAgBA;;;AACI;;AAEA;AAAW;AACX;AAAa;AACb;AAAgB;AAChB;AAAkB;AAClB;AAAU;AACV;AAEA;AACA;AACA;AAEA;AAkBJ;;"}
|
package/ListItem/index.cjs
CHANGED
|
@@ -21,8 +21,8 @@ const ListItem = React.forwardRef((_a, ref) => {
|
|
|
21
21
|
const p = core.useBreakpointProps(_p);
|
|
22
22
|
const listProps = ListContext.useListContext();
|
|
23
23
|
const template = core.useColorTemplate(listProps.color, listProps.variant);
|
|
24
|
-
const defaultTemplate = core.useColorTemplate("
|
|
25
|
-
const hoverTemplate = core.useColorTemplate('
|
|
24
|
+
const defaultTemplate = core.useColorTemplate("surface", "text");
|
|
25
|
+
const hoverTemplate = core.useColorTemplate('surface', "fill");
|
|
26
26
|
subtitle = p.subtitle;
|
|
27
27
|
startIcon = p.startIcon;
|
|
28
28
|
endIcon = p.endIcon;
|
|
@@ -47,17 +47,17 @@ const ListItem = React.forwardRef((_a, ref) => {
|
|
|
47
47
|
minHeight: 48,
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
|
-
const hoversx = Object.assign(Object.assign({}, hoverTemplate.
|
|
51
|
-
color: hoverTemplate.
|
|
50
|
+
const hoversx = Object.assign(Object.assign({}, hoverTemplate.main), { "& .list-item-icon": {
|
|
51
|
+
color: hoverTemplate.main.color
|
|
52
52
|
}, "& .list-item-text": {
|
|
53
|
-
color: hoverTemplate.
|
|
53
|
+
color: hoverTemplate.main.color
|
|
54
54
|
}, "& .list-item-subtitle": {
|
|
55
|
-
color: hoverTemplate.
|
|
55
|
+
color: hoverTemplate.main.color
|
|
56
56
|
} });
|
|
57
57
|
let sx = {
|
|
58
|
-
item: selected ? template.
|
|
58
|
+
item: selected ? template.main : defaultTemplate.main,
|
|
59
59
|
text: {
|
|
60
|
-
color: selected ? template.
|
|
60
|
+
color: selected ? template.main.color : defaultTemplate.main.color
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
return (jsxRuntime.jsxs(core.Tag, Object.assign({ component: 'li' }, listProps === null || listProps === void 0 ? void 0 : listProps.listItem, props, { sxr: Object.assign(Object.assign(Object.assign({ alignItems: "center", display: "flex", flexDirection: "row", userSelect: "none", cursor: "pointer", lineHeight: 1.4, whiteSpace: "nowrap", flexShrink: "0" }, sx.item), sizes[size]), { border: 0, "&:hover:not(.list-item-selected)": hoversx }), baseClass: 'list-item', classNames: [{ "list-item-selected": selected }, ...(props.classNames || [])], ref: ref, children: [startIcon && jsxRuntime.jsx(core.Tag, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.startIcon, { component: "span", baseClass: 'list-item-icon', sxr: Object.assign(Object.assign({}, sx.text), { mr: 1, display: "inline-block" }), children: startIcon })), jsxRuntime.jsxs(core.Tag, { flex: 1, children: [jsxRuntime.jsx(index, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { variant: "text", className: 'list-item-text', component: typeof children === "string" || typeof children === "number" ? "p" : "div", sx: sx.text, children: children })), subtitle && jsxRuntime.jsx(index, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.subtititle, { variant: "text", fontSize: "button", className: 'list-item-subtitle', component: typeof subtitle === "string" || typeof subtitle === "number" ? "p" : "div", sx: sx.text, children: subtitle }))] }), endIcon && jsxRuntime.jsx(core.Tag, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.endIcon, { component: "span", baseClass: 'list-item-icon', sxr: {
|
package/ListItem/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/ListItem/index.tsx"],"sourcesContent":["\"use client\"\nimport React, { ReactElement } from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, useBreakpointProps, useBreakpointPropsType, useColorTemplate } from '@xanui/core'\nimport Text, { TextProps } from '../Text';\nimport { useListContext } from '../List/ListContext';\n\n\nexport type ListItemProps<T extends TagComponentType = \"li\"> = TagProps<T> & {\n selected?: boolean;\n subtitle?: useBreakpointPropsType<string | ReactElement>;\n startIcon?: useBreakpointPropsType<ReactElement>;\n endIcon?: useBreakpointPropsType<ReactElement>;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n\n slotProps?: {\n content: Omit<TextProps, \"children\">;\n startIcon: Omit<TagProps, \"children\">;\n endIcon: Omit<TagProps, \"children\">;\n subtititle: Omit<TextProps, \"children\">;\n }\n}\n\nconst ListItem = React.forwardRef(<T extends TagComponentType = \"li\">({ children, startIcon, endIcon, subtitle, slotProps, ...rest }: ListItemProps<T>, ref: React.Ref<any>) => {\n let [{ selected, ...props }] = useInterface<any>(\"ListItem\", rest, {})\n const _p: any = {}\n if (subtitle) _p.subtitle = subtitle\n if (startIcon) _p.startIcon = startIcon\n if (endIcon) _p.endIcon = endIcon\n const p: any = useBreakpointProps(_p)\n const listProps = useListContext()\n const template = useColorTemplate(listProps.color, listProps.variant)\n const defaultTemplate = useColorTemplate(\"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/ListItem/index.tsx"],"sourcesContent":["\"use client\"\nimport React, { ReactElement } from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, useBreakpointProps, useBreakpointPropsType, useColorTemplate } from '@xanui/core'\nimport Text, { TextProps } from '../Text';\nimport { useListContext } from '../List/ListContext';\n\n\nexport type ListItemProps<T extends TagComponentType = \"li\"> = TagProps<T> & {\n selected?: boolean;\n subtitle?: useBreakpointPropsType<string | ReactElement>;\n startIcon?: useBreakpointPropsType<ReactElement>;\n endIcon?: useBreakpointPropsType<ReactElement>;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n\n slotProps?: {\n content: Omit<TextProps, \"children\">;\n startIcon: Omit<TagProps, \"children\">;\n endIcon: Omit<TagProps, \"children\">;\n subtititle: Omit<TextProps, \"children\">;\n }\n}\n\nconst ListItem = React.forwardRef(<T extends TagComponentType = \"li\">({ children, startIcon, endIcon, subtitle, slotProps, ...rest }: ListItemProps<T>, ref: React.Ref<any>) => {\n let [{ selected, ...props }] = useInterface<any>(\"ListItem\", rest, {})\n const _p: any = {}\n if (subtitle) _p.subtitle = subtitle\n if (startIcon) _p.startIcon = startIcon\n if (endIcon) _p.endIcon = endIcon\n const p: any = useBreakpointProps(_p)\n const listProps = useListContext()\n const template = useColorTemplate(listProps.color, listProps.variant)\n const defaultTemplate = useColorTemplate(\"surface\", \"text\")\n const hoverTemplate = useColorTemplate('surface', \"fill\")\n\n subtitle = p.subtitle\n startIcon = p.startIcon\n endIcon = p.endIcon\n const size = listProps?.size\n\n let sizes: any = {\n small: {\n fontSize: \"button\",\n py: 0.5,\n px: 1,\n minHeight: 32,\n },\n medium: {\n fontSize: \"text\",\n py: 1,\n px: 1.5,\n minHeight: 40,\n },\n large: {\n fontSize: \"h6\",\n py: 1.5,\n px: 2,\n minHeight: 48,\n }\n }\n\n const hoversx = {\n ...hoverTemplate.main,\n \"& .list-item-icon\": {\n color: hoverTemplate.main.color\n },\n \"& .list-item-text\": {\n color: hoverTemplate.main.color\n },\n \"& .list-item-subtitle\": {\n color: hoverTemplate.main.color\n }\n }\n\n let sx = {\n item: selected ? template.main : defaultTemplate.main,\n text: {\n color: selected ? template.main.color : defaultTemplate.main.color\n }\n }\n\n return (\n <Tag\n component='li'\n {...listProps?.listItem}\n {...props}\n sxr={{\n alignItems: \"center\",\n display: \"flex\",\n flexDirection: \"row\",\n userSelect: \"none\",\n cursor: \"pointer\",\n lineHeight: 1.4,\n whiteSpace: \"nowrap\",\n flexShrink: \"0\",\n ...sx.item,\n ...sizes[size as any],\n border: 0,\n \"&:hover:not(.list-item-selected)\": hoversx\n }}\n baseClass='list-item'\n classNames={[{ \"list-item-selected\": selected as boolean }, ...(props.classNames || [])]}\n ref={ref}\n >\n {startIcon && <Tag\n {...slotProps?.startIcon}\n component=\"span\"\n baseClass='list-item-icon'\n sxr={{\n ...sx.text,\n mr: 1,\n display: \"inline-block\"\n }}\n >{startIcon as any}</Tag>}\n <Tag flex={1}>\n <Text\n {...slotProps?.content}\n variant=\"text\"\n className='list-item-text'\n component={typeof children === \"string\" || typeof children === \"number\" ? \"p\" : \"div\"}\n sx={sx.text}\n >\n {children}\n </Text>\n {\n subtitle && <Text\n {...slotProps?.subtititle}\n variant=\"text\"\n fontSize=\"button\"\n className='list-item-subtitle'\n component={typeof subtitle === \"string\" || typeof subtitle === \"number\" ? \"p\" : \"div\"}\n sx={sx.text}\n >{subtitle as any}</Text>\n }\n </Tag>\n {endIcon && <Tag\n {...slotProps?.endIcon}\n component=\"span\"\n baseClass='list-item-icon'\n sxr={{\n ml: 1,\n display: \"inline-block\"\n }}\n >{endIcon as any}</Tag>}\n </Tag>\n )\n})\n\nexport default ListItem"],"names":[],"mappings":";;;;;;;;;;AAsBA;AAAsE;AAClE;;AAEA;AAAc;AACd;AAAe;AACf;AAAa;AACb;AACA;AACA;;;AAIA;AACA;AACA;;AAGA;AACI;AACI;AACA;AACA;AACA;AACH;AACD;AACI;AACA;AACA;AACA;AACH;AACD;AACI;AACA;AACA;AACA;AACH;;AAGL;AAGQ;AACH;AAEG;AACH;AAEG;AACH;AAGL;AACI;AACA;AACI;AACH;;AAGL;AA2DgB;AACA;AACH;AAIjB;;"}
|
package/ListItem/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React__default, { ReactElement } from 'react';
|
|
2
2
|
import { TagComponentType, TagProps, useBreakpointPropsType } from '@xanui/core';
|
|
3
3
|
import { TextProps } from '../Text/index.js';
|
|
4
4
|
|
|
@@ -15,7 +15,7 @@ type ListItemProps<T extends TagComponentType = "li"> = TagProps<T> & {
|
|
|
15
15
|
subtititle: Omit<TextProps, "children">;
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
|
-
declare const ListItem:
|
|
18
|
+
declare const ListItem: React__default.ForwardRefExoticComponent<Omit<ListItemProps<TagComponentType>, "ref"> & React__default.RefAttributes<any>>;
|
|
19
19
|
|
|
20
20
|
export { ListItem as default };
|
|
21
21
|
export type { ListItemProps };
|
package/ListItem/index.js
CHANGED
|
@@ -19,8 +19,8 @@ const ListItem = React.forwardRef((_a, ref) => {
|
|
|
19
19
|
const p = useBreakpointProps(_p);
|
|
20
20
|
const listProps = useListContext();
|
|
21
21
|
const template = useColorTemplate(listProps.color, listProps.variant);
|
|
22
|
-
const defaultTemplate = useColorTemplate("
|
|
23
|
-
const hoverTemplate = useColorTemplate('
|
|
22
|
+
const defaultTemplate = useColorTemplate("surface", "text");
|
|
23
|
+
const hoverTemplate = useColorTemplate('surface', "fill");
|
|
24
24
|
subtitle = p.subtitle;
|
|
25
25
|
startIcon = p.startIcon;
|
|
26
26
|
endIcon = p.endIcon;
|
|
@@ -45,17 +45,17 @@ const ListItem = React.forwardRef((_a, ref) => {
|
|
|
45
45
|
minHeight: 48,
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
const hoversx = Object.assign(Object.assign({}, hoverTemplate.
|
|
49
|
-
color: hoverTemplate.
|
|
48
|
+
const hoversx = Object.assign(Object.assign({}, hoverTemplate.main), { "& .list-item-icon": {
|
|
49
|
+
color: hoverTemplate.main.color
|
|
50
50
|
}, "& .list-item-text": {
|
|
51
|
-
color: hoverTemplate.
|
|
51
|
+
color: hoverTemplate.main.color
|
|
52
52
|
}, "& .list-item-subtitle": {
|
|
53
|
-
color: hoverTemplate.
|
|
53
|
+
color: hoverTemplate.main.color
|
|
54
54
|
} });
|
|
55
55
|
let sx = {
|
|
56
|
-
item: selected ? template.
|
|
56
|
+
item: selected ? template.main : defaultTemplate.main,
|
|
57
57
|
text: {
|
|
58
|
-
color: selected ? template.
|
|
58
|
+
color: selected ? template.main.color : defaultTemplate.main.color
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
return (jsxs(Tag, Object.assign({ component: 'li' }, listProps === null || listProps === void 0 ? void 0 : listProps.listItem, props, { sxr: Object.assign(Object.assign(Object.assign({ alignItems: "center", display: "flex", flexDirection: "row", userSelect: "none", cursor: "pointer", lineHeight: 1.4, whiteSpace: "nowrap", flexShrink: "0" }, sx.item), sizes[size]), { border: 0, "&:hover:not(.list-item-selected)": hoversx }), baseClass: 'list-item', classNames: [{ "list-item-selected": selected }, ...(props.classNames || [])], ref: ref, children: [startIcon && jsx(Tag, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.startIcon, { component: "span", baseClass: 'list-item-icon', sxr: Object.assign(Object.assign({}, sx.text), { mr: 1, display: "inline-block" }), children: startIcon })), jsxs(Tag, { flex: 1, children: [jsx(Text, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { variant: "text", className: 'list-item-text', component: typeof children === "string" || typeof children === "number" ? "p" : "div", sx: sx.text, children: children })), subtitle && jsx(Text, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.subtititle, { variant: "text", fontSize: "button", className: 'list-item-subtitle', component: typeof subtitle === "string" || typeof subtitle === "number" ? "p" : "div", sx: sx.text, children: subtitle }))] }), endIcon && jsx(Tag, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.endIcon, { component: "span", baseClass: 'list-item-icon', sxr: {
|
package/ListItem/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/ListItem/index.tsx"],"sourcesContent":["\"use client\"\nimport React, { ReactElement } from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, useBreakpointProps, useBreakpointPropsType, useColorTemplate } from '@xanui/core'\nimport Text, { TextProps } from '../Text';\nimport { useListContext } from '../List/ListContext';\n\n\nexport type ListItemProps<T extends TagComponentType = \"li\"> = TagProps<T> & {\n selected?: boolean;\n subtitle?: useBreakpointPropsType<string | ReactElement>;\n startIcon?: useBreakpointPropsType<ReactElement>;\n endIcon?: useBreakpointPropsType<ReactElement>;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n\n slotProps?: {\n content: Omit<TextProps, \"children\">;\n startIcon: Omit<TagProps, \"children\">;\n endIcon: Omit<TagProps, \"children\">;\n subtititle: Omit<TextProps, \"children\">;\n }\n}\n\nconst ListItem = React.forwardRef(<T extends TagComponentType = \"li\">({ children, startIcon, endIcon, subtitle, slotProps, ...rest }: ListItemProps<T>, ref: React.Ref<any>) => {\n let [{ selected, ...props }] = useInterface<any>(\"ListItem\", rest, {})\n const _p: any = {}\n if (subtitle) _p.subtitle = subtitle\n if (startIcon) _p.startIcon = startIcon\n if (endIcon) _p.endIcon = endIcon\n const p: any = useBreakpointProps(_p)\n const listProps = useListContext()\n const template = useColorTemplate(listProps.color, listProps.variant)\n const defaultTemplate = useColorTemplate(\"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/ListItem/index.tsx"],"sourcesContent":["\"use client\"\nimport React, { ReactElement } from 'react'\nimport { Tag, TagProps, TagComponentType, useInterface, useBreakpointProps, useBreakpointPropsType, useColorTemplate } from '@xanui/core'\nimport Text, { TextProps } from '../Text';\nimport { useListContext } from '../List/ListContext';\n\n\nexport type ListItemProps<T extends TagComponentType = \"li\"> = TagProps<T> & {\n selected?: boolean;\n subtitle?: useBreakpointPropsType<string | ReactElement>;\n startIcon?: useBreakpointPropsType<ReactElement>;\n endIcon?: useBreakpointPropsType<ReactElement>;\n size?: useBreakpointPropsType<\"small\" | \"medium\" | \"large\">;\n\n slotProps?: {\n content: Omit<TextProps, \"children\">;\n startIcon: Omit<TagProps, \"children\">;\n endIcon: Omit<TagProps, \"children\">;\n subtititle: Omit<TextProps, \"children\">;\n }\n}\n\nconst ListItem = React.forwardRef(<T extends TagComponentType = \"li\">({ children, startIcon, endIcon, subtitle, slotProps, ...rest }: ListItemProps<T>, ref: React.Ref<any>) => {\n let [{ selected, ...props }] = useInterface<any>(\"ListItem\", rest, {})\n const _p: any = {}\n if (subtitle) _p.subtitle = subtitle\n if (startIcon) _p.startIcon = startIcon\n if (endIcon) _p.endIcon = endIcon\n const p: any = useBreakpointProps(_p)\n const listProps = useListContext()\n const template = useColorTemplate(listProps.color, listProps.variant)\n const defaultTemplate = useColorTemplate(\"surface\", \"text\")\n const hoverTemplate = useColorTemplate('surface', \"fill\")\n\n subtitle = p.subtitle\n startIcon = p.startIcon\n endIcon = p.endIcon\n const size = listProps?.size\n\n let sizes: any = {\n small: {\n fontSize: \"button\",\n py: 0.5,\n px: 1,\n minHeight: 32,\n },\n medium: {\n fontSize: \"text\",\n py: 1,\n px: 1.5,\n minHeight: 40,\n },\n large: {\n fontSize: \"h6\",\n py: 1.5,\n px: 2,\n minHeight: 48,\n }\n }\n\n const hoversx = {\n ...hoverTemplate.main,\n \"& .list-item-icon\": {\n color: hoverTemplate.main.color\n },\n \"& .list-item-text\": {\n color: hoverTemplate.main.color\n },\n \"& .list-item-subtitle\": {\n color: hoverTemplate.main.color\n }\n }\n\n let sx = {\n item: selected ? template.main : defaultTemplate.main,\n text: {\n color: selected ? template.main.color : defaultTemplate.main.color\n }\n }\n\n return (\n <Tag\n component='li'\n {...listProps?.listItem}\n {...props}\n sxr={{\n alignItems: \"center\",\n display: \"flex\",\n flexDirection: \"row\",\n userSelect: \"none\",\n cursor: \"pointer\",\n lineHeight: 1.4,\n whiteSpace: \"nowrap\",\n flexShrink: \"0\",\n ...sx.item,\n ...sizes[size as any],\n border: 0,\n \"&:hover:not(.list-item-selected)\": hoversx\n }}\n baseClass='list-item'\n classNames={[{ \"list-item-selected\": selected as boolean }, ...(props.classNames || [])]}\n ref={ref}\n >\n {startIcon && <Tag\n {...slotProps?.startIcon}\n component=\"span\"\n baseClass='list-item-icon'\n sxr={{\n ...sx.text,\n mr: 1,\n display: \"inline-block\"\n }}\n >{startIcon as any}</Tag>}\n <Tag flex={1}>\n <Text\n {...slotProps?.content}\n variant=\"text\"\n className='list-item-text'\n component={typeof children === \"string\" || typeof children === \"number\" ? \"p\" : \"div\"}\n sx={sx.text}\n >\n {children}\n </Text>\n {\n subtitle && <Text\n {...slotProps?.subtititle}\n variant=\"text\"\n fontSize=\"button\"\n className='list-item-subtitle'\n component={typeof subtitle === \"string\" || typeof subtitle === \"number\" ? \"p\" : \"div\"}\n sx={sx.text}\n >{subtitle as any}</Text>\n }\n </Tag>\n {endIcon && <Tag\n {...slotProps?.endIcon}\n component=\"span\"\n baseClass='list-item-icon'\n sxr={{\n ml: 1,\n display: \"inline-block\"\n }}\n >{endIcon as any}</Tag>}\n </Tag>\n )\n})\n\nexport default ListItem"],"names":[],"mappings":";;;;;;;;AAsBA;AAAsE;AAClE;;AAEA;AAAc;AACd;AAAe;AACf;AAAa;AACb;AACA;AACA;;;AAIA;AACA;AACA;;AAGA;AACI;AACI;AACA;AACA;AACA;AACH;AACD;AACI;AACA;AACA;AACA;AACH;AACD;AACI;AACA;AACA;AACA;AACH;;AAGL;AAGQ;AACH;AAEG;AACH;AAEG;AACH;AAGL;AACI;AACA;AACI;AACH;;AAGL;AA2DgB;AACA;AACH;AAIjB;;"}
|
package/LoadingBox/index.cjs
CHANGED
|
@@ -15,7 +15,7 @@ const LoadingBox = React.forwardRef((_a, ref) => {
|
|
|
15
15
|
if (color)
|
|
16
16
|
_p.color = color;
|
|
17
17
|
const p = core.useBreakpointProps(_p);
|
|
18
|
-
color = (_b = p.color) !== null && _b !== void 0 ? _b : "
|
|
18
|
+
color = (_b = p.color) !== null && _b !== void 0 ? _b : "primary";
|
|
19
19
|
return (jsxRuntime.jsxs(core.Tag, Object.assign({ baseClass: 'loading-box' }, rest, { sxr: Object.assign({ position: "relative", display: "inline-block", overflow: "hidden" }, (rest.sx || {})), ref: ref, children: [loading && jsxRuntime.jsx(core.Tag, { baseClass: "loading-box-container", sxr: {
|
|
20
20
|
position: "absolute",
|
|
21
21
|
top: 0,
|
|
@@ -26,7 +26,7 @@ const LoadingBox = React.forwardRef((_a, ref) => {
|
|
|
26
26
|
display: "flex",
|
|
27
27
|
justifyContent: "center",
|
|
28
28
|
alignItems: "center",
|
|
29
|
-
}, children: jsxRuntime.jsx(index, Object.assign({ color: "
|
|
29
|
+
}, children: jsxRuntime.jsx(index, Object.assign({ color: "primary", hideTrack: true }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.CircleProgress)) }), jsxRuntime.jsx(core.Tag, { disabled: loading, children: children })] })));
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
module.exports = LoadingBox;
|
package/LoadingBox/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/LoadingBox/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react';\nimport { Tag, TagProps, TagComponentType, UseColorTemplateColor, useInterface, useBreakpointProps, useBreakpointPropsType } from '@xanui/core';\nimport CircleProgress, { CircleProgressProps } from '../CircleProgress';\n\n\nexport type LoadingBoxProps<T extends TagComponentType = \"div\"> = Omit<TagProps<T>, \"color\"> & {\n loading?: boolean;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n slotProps?: {\n CircleProgress?: Omit<CircleProgressProps, \"value\">\n }\n\n}\n\nconst LoadingBox = React.forwardRef(<T extends TagComponentType = \"div\">({ children, ...props }: LoadingBoxProps<T>, ref: React.Ref<any>) => {\n let [{ loading, color, slotProps, ...rest }] = useInterface<any>(\"LoadingBox\", props, {})\n const _p: any = {}\n if (color) _p.color = color\n const p: any = useBreakpointProps(_p)\n color = p.color ?? \"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/LoadingBox/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react';\nimport { Tag, TagProps, TagComponentType, UseColorTemplateColor, useInterface, useBreakpointProps, useBreakpointPropsType } from '@xanui/core';\nimport CircleProgress, { CircleProgressProps } from '../CircleProgress';\n\n\nexport type LoadingBoxProps<T extends TagComponentType = \"div\"> = Omit<TagProps<T>, \"color\"> & {\n loading?: boolean;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n slotProps?: {\n CircleProgress?: Omit<CircleProgressProps, \"value\">\n }\n\n}\n\nconst LoadingBox = React.forwardRef(<T extends TagComponentType = \"div\">({ children, ...props }: LoadingBoxProps<T>, ref: React.Ref<any>) => {\n let [{ loading, color, slotProps, ...rest }] = useInterface<any>(\"LoadingBox\", props, {})\n const _p: any = {}\n if (color) _p.color = color\n const p: any = useBreakpointProps(_p)\n color = p.color ?? \"primary\"\n\n return (\n <Tag\n baseClass='loading-box'\n {...rest}\n sxr={{\n position: \"relative\",\n display: \"inline-block\",\n overflow: \"hidden\",\n ...((rest as any).sx || {})\n }}\n ref={ref}\n >\n {loading && <Tag\n baseClass=\"loading-box-container\"\n sxr={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <CircleProgress\n color=\"primary\"\n hideTrack\n {...slotProps?.CircleProgress}\n />\n </Tag>}\n <Tag\n disabled={loading}\n >\n {children}\n </Tag>\n </Tag>\n )\n})\n\nexport default LoadingBox\n\n"],"names":[],"mappings":";;;;;;;;;AAeA;;AAAyE;;;AAGrE;AAAW;AACX;AACA;;AAiBgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH;AAejB;;"}
|
package/LoadingBox/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React__default from 'react';
|
|
2
2
|
import { TagComponentType, TagProps, useBreakpointPropsType, UseColorTemplateColor } from '@xanui/core';
|
|
3
3
|
import { CircleProgressProps } from '../CircleProgress/index.js';
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ type LoadingBoxProps<T extends TagComponentType = "div"> = Omit<TagProps<T>, "co
|
|
|
9
9
|
CircleProgress?: Omit<CircleProgressProps, "value">;
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
|
-
declare const LoadingBox:
|
|
12
|
+
declare const LoadingBox: React__default.ForwardRefExoticComponent<Omit<LoadingBoxProps<TagComponentType>, "ref"> & React__default.RefAttributes<any>>;
|
|
13
13
|
|
|
14
14
|
export { LoadingBox as default };
|
|
15
15
|
export type { LoadingBoxProps };
|
package/LoadingBox/index.js
CHANGED
|
@@ -13,7 +13,7 @@ const LoadingBox = React.forwardRef((_a, ref) => {
|
|
|
13
13
|
if (color)
|
|
14
14
|
_p.color = color;
|
|
15
15
|
const p = useBreakpointProps(_p);
|
|
16
|
-
color = (_b = p.color) !== null && _b !== void 0 ? _b : "
|
|
16
|
+
color = (_b = p.color) !== null && _b !== void 0 ? _b : "primary";
|
|
17
17
|
return (jsxs(Tag, Object.assign({ baseClass: 'loading-box' }, rest, { sxr: Object.assign({ position: "relative", display: "inline-block", overflow: "hidden" }, (rest.sx || {})), ref: ref, children: [loading && jsx(Tag, { baseClass: "loading-box-container", sxr: {
|
|
18
18
|
position: "absolute",
|
|
19
19
|
top: 0,
|
|
@@ -24,7 +24,7 @@ const LoadingBox = React.forwardRef((_a, ref) => {
|
|
|
24
24
|
display: "flex",
|
|
25
25
|
justifyContent: "center",
|
|
26
26
|
alignItems: "center",
|
|
27
|
-
}, children: jsx(CircleProgress, Object.assign({ color: "
|
|
27
|
+
}, children: jsx(CircleProgress, Object.assign({ color: "primary", hideTrack: true }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.CircleProgress)) }), jsx(Tag, { disabled: loading, children: children })] })));
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
export { LoadingBox as default };
|
package/LoadingBox/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/LoadingBox/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react';\nimport { Tag, TagProps, TagComponentType, UseColorTemplateColor, useInterface, useBreakpointProps, useBreakpointPropsType } from '@xanui/core';\nimport CircleProgress, { CircleProgressProps } from '../CircleProgress';\n\n\nexport type LoadingBoxProps<T extends TagComponentType = \"div\"> = Omit<TagProps<T>, \"color\"> & {\n loading?: boolean;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n slotProps?: {\n CircleProgress?: Omit<CircleProgressProps, \"value\">\n }\n\n}\n\nconst LoadingBox = React.forwardRef(<T extends TagComponentType = \"div\">({ children, ...props }: LoadingBoxProps<T>, ref: React.Ref<any>) => {\n let [{ loading, color, slotProps, ...rest }] = useInterface<any>(\"LoadingBox\", props, {})\n const _p: any = {}\n if (color) _p.color = color\n const p: any = useBreakpointProps(_p)\n color = p.color ?? \"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/LoadingBox/index.tsx"],"sourcesContent":["\"use client\"\nimport React from 'react';\nimport { Tag, TagProps, TagComponentType, UseColorTemplateColor, useInterface, useBreakpointProps, useBreakpointPropsType } from '@xanui/core';\nimport CircleProgress, { CircleProgressProps } from '../CircleProgress';\n\n\nexport type LoadingBoxProps<T extends TagComponentType = \"div\"> = Omit<TagProps<T>, \"color\"> & {\n loading?: boolean;\n color?: useBreakpointPropsType<UseColorTemplateColor>;\n slotProps?: {\n CircleProgress?: Omit<CircleProgressProps, \"value\">\n }\n\n}\n\nconst LoadingBox = React.forwardRef(<T extends TagComponentType = \"div\">({ children, ...props }: LoadingBoxProps<T>, ref: React.Ref<any>) => {\n let [{ loading, color, slotProps, ...rest }] = useInterface<any>(\"LoadingBox\", props, {})\n const _p: any = {}\n if (color) _p.color = color\n const p: any = useBreakpointProps(_p)\n color = p.color ?? \"primary\"\n\n return (\n <Tag\n baseClass='loading-box'\n {...rest}\n sxr={{\n position: \"relative\",\n display: \"inline-block\",\n overflow: \"hidden\",\n ...((rest as any).sx || {})\n }}\n ref={ref}\n >\n {loading && <Tag\n baseClass=\"loading-box-container\"\n sxr={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <CircleProgress\n color=\"primary\"\n hideTrack\n {...slotProps?.CircleProgress}\n />\n </Tag>}\n <Tag\n disabled={loading}\n >\n {children}\n </Tag>\n </Tag>\n )\n})\n\nexport default LoadingBox\n\n"],"names":[],"mappings":";;;;;;;AAeA;;AAAyE;;;AAGrE;AAAW;AACX;AACA;;AAiBgB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH;AAejB;;"}
|
package/Menu/index.cjs
CHANGED
|
@@ -83,21 +83,6 @@ const isOffScreen = (menu) => {
|
|
|
83
83
|
const { x, y, width, height } = menu.getBoundingClientRect();
|
|
84
84
|
return x < 0 || y < 0 || x + width > window.innerWidth || y + height > window.innerHeight;
|
|
85
85
|
};
|
|
86
|
-
// Try to place menu and fallback if off-screen
|
|
87
|
-
// const placeMenu = (placement: PlacementTypes, menu: HTMLElement, target: HTMLElement) => {
|
|
88
|
-
// let pos = computePosition(placement, menu, target);
|
|
89
|
-
// menu.style.top = pos.top + "px";
|
|
90
|
-
// menu.style.left = pos.left + "px";
|
|
91
|
-
// if (isOffScreen(menu)) {
|
|
92
|
-
// for (const p of placements) {
|
|
93
|
-
// const fallbackPos = computePosition(p, menu, target);
|
|
94
|
-
// menu.style.top = fallbackPos.top + "px";
|
|
95
|
-
// menu.style.left = fallbackPos.left + "px";
|
|
96
|
-
// if (!isOffScreen(menu)) return p;
|
|
97
|
-
// }
|
|
98
|
-
// }
|
|
99
|
-
// return placement;
|
|
100
|
-
// };
|
|
101
86
|
const placeMenu = (placement, menu, target) => {
|
|
102
87
|
let finalPlacement = placement;
|
|
103
88
|
let pos = computePosition(placement, menu, target);
|
|
@@ -120,9 +105,9 @@ const placeMenu = (placement, menu, target) => {
|
|
|
120
105
|
return finalPlacement;
|
|
121
106
|
};
|
|
122
107
|
const Menu = (_a) => {
|
|
123
|
-
var _b;
|
|
108
|
+
var _b, _c;
|
|
124
109
|
var { children, target } = _a, props = tslib.__rest(_a, ["children", "target"]);
|
|
125
|
-
let [{ onClickOutside, variant, duration,
|
|
110
|
+
let [{ onClickOutside, variant, duration, onEnter, onEntered, onExit, onExited, placement, zIndex, slotProps }] = core.useInterface("Menu", props, {});
|
|
126
111
|
const _p = {};
|
|
127
112
|
if (placement)
|
|
128
113
|
_p.placement = placement;
|
|
@@ -159,16 +144,16 @@ const Menu = (_a) => {
|
|
|
159
144
|
}, [closed, target, placement]);
|
|
160
145
|
if (closed)
|
|
161
146
|
return null;
|
|
162
|
-
return (jsxRuntime.jsx(index, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.portal, { children: jsxRuntime.jsx(index$1, { onClickOutside: (e) => {
|
|
147
|
+
return (jsxRuntime.jsx(index, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.portal, { children: jsxRuntime.jsx(index$1, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.clickOutSide, { onClickOutside: (e) => {
|
|
163
148
|
if (target === null || target === void 0 ? void 0 : target.contains(e.target))
|
|
164
149
|
return;
|
|
165
150
|
if (e.target !== target) {
|
|
166
151
|
onClickOutside && onClickOutside(e);
|
|
167
152
|
}
|
|
168
|
-
}, ref: menuRef, sx: { position: "fixed", zIndex: 1500 + (zIndex || 0) }, children: jsxRuntime.jsx(core.Transition, Object.assign({ duration: duration !== null && duration !== void 0 ? duration : 200, easing: "fast", variant: variant !== null && variant !== void 0 ? variant : "grow" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.transition, { open: isOpen,
|
|
153
|
+
}, ref: menuRef, sx: Object.assign({ position: "fixed", zIndex: 1500 + (zIndex || 0) }, (_b = slotProps === null || slotProps === void 0 ? void 0 : slotProps.clickOutSide) === null || _b === void 0 ? void 0 : _b.sx), children: jsxRuntime.jsx(core.Transition, Object.assign({ duration: duration !== null && duration !== void 0 ? duration : 200, easing: "fast", variant: variant !== null && variant !== void 0 ? variant : "grow" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.transition, { open: isOpen, onEnter: onEnter, onEntered: onEntered, onExit: onExit, onExited: () => {
|
|
169
154
|
setClosed(true);
|
|
170
|
-
|
|
171
|
-
}, children: jsxRuntime.jsx(core.Tag, Object.assign({ baseClass: "menu-content" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { sxr: Object.assign({ overflow: "hidden", bgcolor: "
|
|
155
|
+
onExited && onExited();
|
|
156
|
+
}, children: jsxRuntime.jsx(core.Tag, Object.assign({ baseClass: "menu-content" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { sxr: Object.assign({ overflow: "hidden", bgcolor: "surface.main", shadow: 2, radius: 1, transformOrigin: getTransformOrigin(placed) }, (_c = slotProps === null || slotProps === void 0 ? void 0 : slotProps.content) === null || _c === void 0 ? void 0 : _c.sx), children: children })) })) })) })));
|
|
172
157
|
};
|
|
173
158
|
|
|
174
159
|
module.exports = Menu;
|
package/Menu/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/Menu/index.tsx"],"sourcesContent":["\"use client\";\nimport { ReactNode, useEffect, useState, useRef } from \"react\";\nimport { Tag, TagProps, useBreakpointProps, useBreakpointPropsType, useInterface, TransitionProps, Transition } from \"@xanui/core\";\nimport Portal, { PortalProps } from \"../Portal\";\nimport ClickOutside from \"../ClickOutside\";\n\nexport type PlacementTypes =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"right\"\n | \"right-top\"\n | \"right-bottom\"\n | \"left\"\n | \"left-top\"\n | \"left-bottom\";\n\nexport type MenuProps = {\n children?: ReactNode;\n target?: HTMLElement;\n placement?: useBreakpointPropsType<PlacementTypes>;\n zIndex?: number;\n\n variant?: TransitionProps['variant'];\n duration?: TransitionProps['duration'];\n
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/Menu/index.tsx"],"sourcesContent":["\"use client\";\nimport { ReactNode, useEffect, useState, useRef } from \"react\";\nimport { Tag, TagProps, useBreakpointProps, useBreakpointPropsType, useInterface, TransitionProps, Transition } from \"@xanui/core\";\nimport Portal, { PortalProps } from \"../Portal\";\nimport ClickOutside, { ClickOutsideProps } from \"../ClickOutside\";\n\nexport type PlacementTypes =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"right\"\n | \"right-top\"\n | \"right-bottom\"\n | \"left\"\n | \"left-top\"\n | \"left-bottom\";\n\nexport type MenuProps = {\n children?: ReactNode;\n target?: HTMLElement;\n placement?: useBreakpointPropsType<PlacementTypes>;\n zIndex?: number;\n\n variant?: TransitionProps['variant'];\n duration?: TransitionProps['duration'];\n onEnter?: TransitionProps['onEnter'];\n onEntered?: TransitionProps['onEntered'];\n onExit?: TransitionProps['onExit'];\n onExited?: TransitionProps['onExited'];\n\n onClickOutside?: (e: MouseEvent) => void;\n\n slotProps?: {\n transition?: Omit<TransitionProps, \"open\">;\n portal?: Omit<PortalProps, \"children\">;\n content?: Omit<TagProps<\"div\">, \"children\">;\n clickOutSide?: Omit<ClickOutsideProps, \"children\">\n };\n};\n\nconst placements: PlacementTypes[] = [\n \"top\",\n \"top-left\",\n \"top-right\",\n \"bottom\",\n \"bottom-left\",\n \"bottom-right\",\n \"right\",\n \"right-top\",\n \"right-bottom\",\n \"left\",\n \"left-top\",\n \"left-bottom\",\n];\n\nconst getTransformOrigin = (placement: PlacementTypes) => {\n switch (placement) {\n case \"top\":\n return \"bottom\";\n case \"top-left\":\n return \"bottom left\";\n case \"top-right\":\n return \"bottom right\";\n case \"bottom\":\n return \"top\";\n case \"bottom-left\":\n return \"top left\";\n case \"bottom-right\":\n return \"top right\";\n case \"left\":\n return \"right\";\n case \"left-top\":\n return \"top right\";\n case \"left-bottom\":\n return \"bottom right\";\n case \"right\":\n return \"left\";\n case \"right-top\":\n return \"top left\";\n case \"right-bottom\":\n return \"bottom left\";\n default:\n return \"top\";\n }\n};\n\nconst clampToViewport = (menu: HTMLElement, top: number, left: number) => {\n const { width, height } = menu.getBoundingClientRect();\n\n const clampedTop = Math.max(0, Math.min(top, window.innerHeight - height));\n const clampedLeft = Math.max(0, Math.min(left, window.innerWidth - width));\n\n return { top: clampedTop, left: clampedLeft };\n};\n\n// Compute coordinates for each placement\nconst computePosition = (\n placement: PlacementTypes,\n menu: HTMLElement,\n target: HTMLElement\n) => {\n const { width: mw, height: mh } = menu.getBoundingClientRect();\n const {\n top: tt,\n left: tl,\n bottom: tb,\n right: tr,\n width: tw,\n height: th,\n } = target.getBoundingClientRect();\n\n const positions: Record<PlacementTypes, { top: number; left: number }> = {\n \"bottom-left\": { top: tb, left: tl },\n \"bottom-right\": { top: tb, left: tr - mw },\n bottom: { top: tb, left: tl + (tw - mw) / 2 },\n\n \"top-left\": { top: tt - mh, left: tl },\n \"top-right\": { top: tt - mh, left: tr - mw },\n top: { top: tt - mh, left: tl + (tw - mw) / 2 },\n\n left: { top: tt + (th - mh) / 2, left: tl - mw },\n \"left-top\": { top: tt, left: tl - mw },\n \"left-bottom\": { top: tb - mh, left: tl - mw },\n\n right: { top: tt + (th - mh) / 2, left: tr },\n \"right-top\": { top: tt, left: tr },\n \"right-bottom\": { top: tb - mh, left: tr },\n };\n\n return positions[placement];\n};\n\n\n// Check if menu is off-screen\nconst isOffScreen = (menu: HTMLElement) => {\n const { x, y, width, height } = menu.getBoundingClientRect();\n return x < 0 || y < 0 || x + width > window.innerWidth || y + height > window.innerHeight;\n};\n\nconst placeMenu = (\n placement: PlacementTypes,\n menu: HTMLElement,\n target: HTMLElement\n) => {\n let finalPlacement = placement;\n\n let pos = computePosition(placement, menu, target);\n let clamped = clampToViewport(menu, pos.top, pos.left);\n\n menu.style.top = clamped.top + \"px\";\n menu.style.left = clamped.left + \"px\";\n\n // Try better placements\n if (isOffScreen(menu)) {\n for (const p of placements) {\n const fallbackPos = computePosition(p, menu, target);\n const fallbackClamped = clampToViewport(menu, fallbackPos.top, fallbackPos.left);\n\n menu.style.top = fallbackClamped.top + \"px\";\n menu.style.left = fallbackClamped.left + \"px\";\n\n if (!isOffScreen(menu)) {\n finalPlacement = p;\n break;\n }\n }\n }\n\n return finalPlacement;\n};\n\n\n\nconst Menu = ({ children, target, ...props }: MenuProps) => {\n let [{ onClickOutside, variant, duration, onEnter, onEntered, onExit, onExited, placement, zIndex, slotProps }] = useInterface<any>(\"Menu\", props, {});\n const _p: any = {};\n if (placement) _p.placement = placement;\n const p: any = useBreakpointProps(_p);\n placement = p.placement || \"bottom-left\";\n\n const isOpen = Boolean(target);\n const [closed, setClosed] = useState(!isOpen);\n const [placed, setPlaced] = useState<PlacementTypes>(placement);\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Open/close effect\n useEffect(() => {\n if (closed && isOpen) setClosed(false);\n }, [isOpen]);\n\n\n useEffect(() => {\n if (!closed && target && menuRef.current) {\n const updatePosition = () => {\n if (menuRef.current && target) {\n requestAnimationFrame(() => {\n const p = placeMenu(placement!, menuRef.current as any, target);\n setPlaced(p);\n });\n }\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }\n return\n }, [closed, target, placement]);\n\n if (closed) return null;\n\n return (\n <Portal {...slotProps?.portal}>\n <ClickOutside\n {...slotProps?.clickOutSide}\n onClickOutside={(e: MouseEvent) => {\n if (target?.contains(e.target as any)) return;\n if (e.target !== target) {\n onClickOutside && onClickOutside(e);\n }\n }}\n ref={menuRef}\n sx={{\n position: \"fixed\",\n zIndex: 1500 + (zIndex || 0),\n ...slotProps?.clickOutSide?.sx\n }}\n >\n <Transition\n duration={duration ?? 200}\n easing=\"fast\"\n variant={variant ?? \"grow\"}\n {...slotProps?.transition}\n open={isOpen}\n onEnter={onEnter}\n onEntered={onEntered}\n onExit={onExit}\n onExited={() => {\n setClosed(true);\n onExited && onExited()\n }}\n >\n <Tag\n baseClass=\"menu-content\"\n {...slotProps?.content}\n sxr={{\n overflow: \"hidden\",\n bgcolor: \"surface.main\",\n shadow: 2,\n radius: 1,\n transformOrigin: getTransformOrigin(placed),\n ...slotProps?.content?.sx,\n }}\n >\n {children}\n </Tag>\n </Transition>\n </ClickOutside>\n </Portal>\n );\n};\n\nexport default Menu;\n"],"names":[],"mappings":";;;;;;;;;;AA2CA;;;;;;;;;;;;;;AAeA;;AAEQ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;AACJ;AACI;;AAEZ;AAEA;;;;;AAOA;AAEA;AACA;AAKI;AACA;AASA;;;AAGI;;AAGA;AACA;AAEA;;AAEA;AAEA;;;;AAKJ;AACJ;AAGA;AACA;AACI;;AAEJ;AAEA;;;AAQI;;;;AAMA;AACI;;AAEI;;;AAKA;;;;;;AAOR;AACJ;AAIA;;;AACI;;AAEA;AAAe;AACf;AACA;AAEA;;;AAGA;;;;;AAKA;;;;AAMY;;AAEQ;;AAEJ;;AAER;AAEA;AACA;;AAGA;AACI;;AAEJ;;;;AAKR;AAAY;AAEZ;;;AAMgB;AACI;;AAER;;;;AAwChB;;"}
|
package/Menu/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { useBreakpointPropsType, TransitionProps, TagProps } from '@xanui/core';
|
|
4
4
|
import { PortalProps } from '../Portal/index.js';
|
|
5
|
+
import { ClickOutsideProps } from '../ClickOutside/index.js';
|
|
5
6
|
|
|
6
7
|
type PlacementTypes = "top" | "top-left" | "top-right" | "bottom" | "bottom-left" | "bottom-right" | "right" | "right-top" | "right-bottom" | "left" | "left-top" | "left-bottom";
|
|
7
8
|
type MenuProps = {
|
|
@@ -11,15 +12,16 @@ type MenuProps = {
|
|
|
11
12
|
zIndex?: number;
|
|
12
13
|
variant?: TransitionProps['variant'];
|
|
13
14
|
duration?: TransitionProps['duration'];
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
onEnter?: TransitionProps['onEnter'];
|
|
16
|
+
onEntered?: TransitionProps['onEntered'];
|
|
17
|
+
onExit?: TransitionProps['onExit'];
|
|
18
|
+
onExited?: TransitionProps['onExited'];
|
|
18
19
|
onClickOutside?: (e: MouseEvent) => void;
|
|
19
20
|
slotProps?: {
|
|
20
21
|
transition?: Omit<TransitionProps, "open">;
|
|
21
22
|
portal?: Omit<PortalProps, "children">;
|
|
22
23
|
content?: Omit<TagProps<"div">, "children">;
|
|
24
|
+
clickOutSide?: Omit<ClickOutsideProps, "children">;
|
|
23
25
|
};
|
|
24
26
|
};
|
|
25
27
|
declare const Menu: ({ children, target, ...props }: MenuProps) => react_jsx_runtime.JSX.Element | null;
|
package/Menu/index.js
CHANGED
|
@@ -81,21 +81,6 @@ const isOffScreen = (menu) => {
|
|
|
81
81
|
const { x, y, width, height } = menu.getBoundingClientRect();
|
|
82
82
|
return x < 0 || y < 0 || x + width > window.innerWidth || y + height > window.innerHeight;
|
|
83
83
|
};
|
|
84
|
-
// Try to place menu and fallback if off-screen
|
|
85
|
-
// const placeMenu = (placement: PlacementTypes, menu: HTMLElement, target: HTMLElement) => {
|
|
86
|
-
// let pos = computePosition(placement, menu, target);
|
|
87
|
-
// menu.style.top = pos.top + "px";
|
|
88
|
-
// menu.style.left = pos.left + "px";
|
|
89
|
-
// if (isOffScreen(menu)) {
|
|
90
|
-
// for (const p of placements) {
|
|
91
|
-
// const fallbackPos = computePosition(p, menu, target);
|
|
92
|
-
// menu.style.top = fallbackPos.top + "px";
|
|
93
|
-
// menu.style.left = fallbackPos.left + "px";
|
|
94
|
-
// if (!isOffScreen(menu)) return p;
|
|
95
|
-
// }
|
|
96
|
-
// }
|
|
97
|
-
// return placement;
|
|
98
|
-
// };
|
|
99
84
|
const placeMenu = (placement, menu, target) => {
|
|
100
85
|
let finalPlacement = placement;
|
|
101
86
|
let pos = computePosition(placement, menu, target);
|
|
@@ -118,9 +103,9 @@ const placeMenu = (placement, menu, target) => {
|
|
|
118
103
|
return finalPlacement;
|
|
119
104
|
};
|
|
120
105
|
const Menu = (_a) => {
|
|
121
|
-
var _b;
|
|
106
|
+
var _b, _c;
|
|
122
107
|
var { children, target } = _a, props = __rest(_a, ["children", "target"]);
|
|
123
|
-
let [{ onClickOutside, variant, duration,
|
|
108
|
+
let [{ onClickOutside, variant, duration, onEnter, onEntered, onExit, onExited, placement, zIndex, slotProps }] = useInterface("Menu", props, {});
|
|
124
109
|
const _p = {};
|
|
125
110
|
if (placement)
|
|
126
111
|
_p.placement = placement;
|
|
@@ -157,16 +142,16 @@ const Menu = (_a) => {
|
|
|
157
142
|
}, [closed, target, placement]);
|
|
158
143
|
if (closed)
|
|
159
144
|
return null;
|
|
160
|
-
return (jsx(Portal, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.portal, { children: jsx(ClickOutside, { onClickOutside: (e) => {
|
|
145
|
+
return (jsx(Portal, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.portal, { children: jsx(ClickOutside, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.clickOutSide, { onClickOutside: (e) => {
|
|
161
146
|
if (target === null || target === void 0 ? void 0 : target.contains(e.target))
|
|
162
147
|
return;
|
|
163
148
|
if (e.target !== target) {
|
|
164
149
|
onClickOutside && onClickOutside(e);
|
|
165
150
|
}
|
|
166
|
-
}, ref: menuRef, sx: { position: "fixed", zIndex: 1500 + (zIndex || 0) }, children: jsx(Transition, Object.assign({ duration: duration !== null && duration !== void 0 ? duration : 200, easing: "fast", variant: variant !== null && variant !== void 0 ? variant : "grow" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.transition, { open: isOpen,
|
|
151
|
+
}, ref: menuRef, sx: Object.assign({ position: "fixed", zIndex: 1500 + (zIndex || 0) }, (_b = slotProps === null || slotProps === void 0 ? void 0 : slotProps.clickOutSide) === null || _b === void 0 ? void 0 : _b.sx), children: jsx(Transition, Object.assign({ duration: duration !== null && duration !== void 0 ? duration : 200, easing: "fast", variant: variant !== null && variant !== void 0 ? variant : "grow" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.transition, { open: isOpen, onEnter: onEnter, onEntered: onEntered, onExit: onExit, onExited: () => {
|
|
167
152
|
setClosed(true);
|
|
168
|
-
|
|
169
|
-
}, children: jsx(Tag, Object.assign({ baseClass: "menu-content" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { sxr: Object.assign({ overflow: "hidden", bgcolor: "
|
|
153
|
+
onExited && onExited();
|
|
154
|
+
}, children: jsx(Tag, Object.assign({ baseClass: "menu-content" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.content, { sxr: Object.assign({ overflow: "hidden", bgcolor: "surface.main", shadow: 2, radius: 1, transformOrigin: getTransformOrigin(placed) }, (_c = slotProps === null || slotProps === void 0 ? void 0 : slotProps.content) === null || _c === void 0 ? void 0 : _c.sx), children: children })) })) })) })));
|
|
170
155
|
};
|
|
171
156
|
|
|
172
157
|
export { Menu as default };
|