@rnaga/wp-next-ui 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Accordion.d.ts +4 -0
- package/Accordion.d.ts.map +1 -0
- package/Accordion.js +13 -0
- package/Accordions.d.ts +19 -0
- package/Accordions.d.ts.map +1 -0
- package/Accordions.js +39 -0
- package/Background.d.ts +5 -0
- package/Background.d.ts.map +1 -0
- package/Background.js +18 -0
- package/BadgeOnMouseOver.d.ts +12 -0
- package/BadgeOnMouseOver.d.ts.map +1 -0
- package/BadgeOnMouseOver.js +40 -0
- package/BasicMenuButton.d.ts +17 -0
- package/BasicMenuButton.d.ts.map +1 -0
- package/BasicMenuButton.js +61 -0
- package/Button.d.ts +10 -0
- package/Button.d.ts.map +1 -0
- package/Button.js +15 -0
- package/Card.d.ts +6 -0
- package/Card.d.ts.map +1 -0
- package/Card.js +13 -0
- package/CardImage.d.ts +10 -0
- package/CardImage.d.ts.map +1 -0
- package/CardImage.js +34 -0
- package/Checkbox.d.ts +6 -0
- package/Checkbox.d.ts.map +1 -0
- package/Checkbox.js +13 -0
- package/Chip.d.ts +10 -0
- package/Chip.d.ts.map +1 -0
- package/Chip.js +41 -0
- package/DateTimePicker.d.ts +6 -0
- package/DateTimePicker.d.ts.map +1 -0
- package/DateTimePicker.js +45 -0
- package/DraggableBox.d.ts +39 -0
- package/DraggableBox.d.ts.map +1 -0
- package/DraggableBox.js +171 -0
- package/Form.d.ts +4 -0
- package/Form.d.ts.map +1 -0
- package/Form.js +8 -0
- package/FormDataProvider.d.ts +5 -0
- package/FormDataProvider.d.ts.map +1 -0
- package/FormDataProvider.js +6 -0
- package/IconButtonDelete.d.ts +6 -0
- package/IconButtonDelete.d.ts.map +1 -0
- package/IconButtonDelete.js +14 -0
- package/Input.d.ts +14 -0
- package/Input.d.ts.map +1 -0
- package/Input.js +84 -0
- package/InputClickField.d.ts +13 -0
- package/InputClickField.d.ts.map +1 -0
- package/InputClickField.js +21 -0
- package/InputColor.d.ts +12 -0
- package/InputColor.d.ts.map +1 -0
- package/InputColor.js +141 -0
- package/InputMultiple.d.ts +15 -0
- package/InputMultiple.d.ts.map +1 -0
- package/InputMultiple.js +55 -0
- package/InputSearch.d.ts +7 -0
- package/InputSearch.d.ts.map +1 -0
- package/InputSearch.js +28 -0
- package/Link.d.ts +6 -0
- package/Link.d.ts.map +1 -0
- package/Link.js +15 -0
- package/LinkCopy.d.ts +6 -0
- package/LinkCopy.d.ts.map +1 -0
- package/LinkCopy.js +17 -0
- package/Loading.d.ts +7 -0
- package/Loading.d.ts.map +1 -0
- package/Loading.js +29 -0
- package/LoadingBox.d.ts +12 -0
- package/LoadingBox.d.ts.map +1 -0
- package/LoadingBox.js +30 -0
- package/MediaTag.d.ts +9 -0
- package/MediaTag.d.ts.map +1 -0
- package/MediaTag.js +19 -0
- package/Modal.d.ts +11 -0
- package/Modal.d.ts.map +1 -0
- package/Modal.js +65 -0
- package/ModalConfirm.d.ts +8 -0
- package/ModalConfirm.d.ts.map +1 -0
- package/ModalConfirm.js +58 -0
- package/PopperMenu.d.ts +7 -0
- package/PopperMenu.d.ts.map +1 -0
- package/PopperMenu.js +6 -0
- package/README.md +292 -0
- package/Select.d.ts +21 -0
- package/Select.d.ts.map +1 -0
- package/Select.js +23 -0
- package/SelectAutocomplete.d.ts +1208 -0
- package/SelectAutocomplete.d.ts.map +1 -0
- package/SelectAutocomplete.js +113 -0
- package/SelectMultiple.d.ts +16 -0
- package/SelectMultiple.d.ts.map +1 -0
- package/SelectMultiple.js +28 -0
- package/SelectWPPost.d.ts +17 -0
- package/SelectWPPost.d.ts.map +1 -0
- package/SelectWPPost.js +98 -0
- package/SelectWPTaxonomy.d.ts +9 -0
- package/SelectWPTaxonomy.d.ts.map +1 -0
- package/SelectWPTaxonomy.js +35 -0
- package/SelectWPTerm.d.ts +13 -0
- package/SelectWPTerm.d.ts.map +1 -0
- package/SelectWPTerm.js +92 -0
- package/SelectWPTerms.d.ts +27 -0
- package/SelectWPTerms.d.ts.map +1 -0
- package/SelectWPTerms.js +105 -0
- package/SelectWPUser.d.ts +16 -0
- package/SelectWPUser.d.ts.map +1 -0
- package/SelectWPUser.js +101 -0
- package/SortableList.d.ts +28 -0
- package/SortableList.d.ts.map +1 -0
- package/SortableList.js +195 -0
- package/Tabs.d.ts +17 -0
- package/Tabs.d.ts.map +1 -0
- package/Tabs.js +35 -0
- package/ThemeRegistry.d.ts +13 -0
- package/ThemeRegistry.d.ts.map +1 -0
- package/ThemeRegistry.js +36 -0
- package/Typography.d.ts +9 -0
- package/Typography.d.ts.map +1 -0
- package/Typography.js +12 -0
- package/Viewport.d.ts +6 -0
- package/Viewport.d.ts.map +1 -0
- package/Viewport.js +10 -0
- package/hooks/use-form-data.d.ts +39 -0
- package/hooks/use-form-data.d.ts.map +1 -0
- package/hooks/use-form-data.js +91 -0
- package/hooks/use-media-selector.d.ts +10 -0
- package/hooks/use-media-selector.d.ts.map +1 -0
- package/hooks/use-media-selector.js +33 -0
- package/hooks/use-mouse-move.d.ts +18 -0
- package/hooks/use-mouse-move.d.ts.map +1 -0
- package/hooks/use-mouse-move.js +112 -0
- package/hooks/use-scheme-toggle.d.ts +6 -0
- package/hooks/use-scheme-toggle.d.ts.map +1 -0
- package/hooks/use-scheme-toggle.js +16 -0
- package/hooks/use-viewport.d.ts +5 -0
- package/hooks/use-viewport.d.ts.map +1 -0
- package/hooks/use-viewport.js +9 -0
- package/list/ListGrid.d.ts +12 -0
- package/list/ListGrid.d.ts.map +1 -0
- package/list/ListGrid.js +15 -0
- package/list/ListTable.d.ts +43 -0
- package/list/ListTable.d.ts.map +1 -0
- package/list/ListTable.js +143 -0
- package/list/Pagination.d.ts +5 -0
- package/list/Pagination.d.ts.map +1 -0
- package/list/Pagination.js +24 -0
- package/list/index.d.ts +4 -0
- package/list/index.d.ts.map +1 -0
- package/list/index.js +3 -0
- package/media/MediaGridForm.d.ts +5 -0
- package/media/MediaGridForm.d.ts.map +1 -0
- package/media/MediaGridForm.js +128 -0
- package/media/MediaThumbnail.d.ts +4 -0
- package/media/MediaThumbnail.d.ts.map +1 -0
- package/media/MediaThumbnail.js +17 -0
- package/media/MediaUpload.d.ts +7 -0
- package/media/MediaUpload.d.ts.map +1 -0
- package/media/MediaUpload.js +76 -0
- package/media/index.d.ts +4 -0
- package/media/index.d.ts.map +1 -0
- package/media/index.js +3 -0
- package/media-selector/MediaSelectorList.d.ts +2 -0
- package/media-selector/MediaSelectorList.d.ts.map +1 -0
- package/media-selector/MediaSelectorList.js +43 -0
- package/media-selector/MediaSelectorPreview.d.ts +2 -0
- package/media-selector/MediaSelectorPreview.d.ts.map +1 -0
- package/media-selector/MediaSelectorPreview.js +80 -0
- package/media-selector/index.d.ts +2 -0
- package/media-selector/index.d.ts.map +1 -0
- package/media-selector/index.js +49 -0
- package/package.json +33 -0
- package/portal/Portal.d.ts +6 -0
- package/portal/Portal.d.ts.map +1 -0
- package/portal/Portal.js +7 -0
- package/portal/index.d.ts +3 -0
- package/portal/index.d.ts.map +1 -0
- package/portal/index.js +2 -0
- package/portal/use-portal.d.ts +4 -0
- package/portal/use-portal.d.ts.map +1 -0
- package/portal/use-portal.js +11 -0
- package/types/global-state.d.ts +27 -0
- package/types/hooks/filters.d.ts +20 -0
- package/types/hooks/index.d.ts +1 -0
- package/types/index.d.ts +3 -0
- package/types/wp-theme.d.ts +49 -0
- package/wp-theme/index.d.ts +3 -0
- package/wp-theme/index.d.ts.map +1 -0
- package/wp-theme/index.js +86 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import DocumentScannerOutlinedIcon from "@mui/icons-material/DocumentScannerOutlined";
|
|
3
|
+
import MusicVideoIcon from "@mui/icons-material/MusicVideo";
|
|
4
|
+
import VideoFileOutlinedIcon from "@mui/icons-material/VideoFileOutlined";
|
|
5
|
+
import { Icon } from "@mui/material";
|
|
6
|
+
import { getMimeType } from "@rnaga/wp-next-core/client/utils/media";
|
|
7
|
+
export const MediaThumbnail = (props) => {
|
|
8
|
+
const { uri } = props;
|
|
9
|
+
if (!uri) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const mediaType = getMimeType(uri).split("/")[0];
|
|
13
|
+
const iconSx = { transform: "scale(2)" };
|
|
14
|
+
return mediaType == "image" ? (
|
|
15
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
16
|
+
_jsx("img", { "data-first-child": true, src: uri, loading: "lazy", alt: "" })) : (_jsx(Icon, { "data-first-child": true, children: mediaType == "audio" ? (_jsx(MusicVideoIcon, { sx: iconSx })) : mediaType == "video" ? (_jsx(VideoFileOutlinedIcon, { sx: iconSx })) : (_jsx(DocumentScannerOutlinedIcon, { sx: iconSx })) }));
|
|
17
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare const MediaUpload: (props?: Partial<{
|
|
3
|
+
showCloseButton: boolean;
|
|
4
|
+
style: React.CSSProperties | undefined;
|
|
5
|
+
onUploadComplete?: () => void;
|
|
6
|
+
}>) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=MediaUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaUpload.d.ts","sourceRoot":"","sources":["../../src/media/MediaUpload.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAWvD,eAAO,MAAM,WAAW,GACtB,QAAQ,OAAO,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAC,4CA+GH,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useTransition } from "react";
|
|
4
|
+
import CloseIcon from "@mui/icons-material/Close";
|
|
5
|
+
import { Box, IconButton, LinearProgress } from "@mui/material";
|
|
6
|
+
import { Button } from "../Button";
|
|
7
|
+
import { useWPTheme } from "../ThemeRegistry";
|
|
8
|
+
import { Typography } from "../Typography";
|
|
9
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
10
|
+
import { useWP } from "@rnaga/wp-next-core/client/wp";
|
|
11
|
+
export const MediaUpload = (props) => {
|
|
12
|
+
const { showCloseButton = false, style = {}, onUploadComplete } = props ?? {};
|
|
13
|
+
const { error, viewport, globalState } = useWP();
|
|
14
|
+
const { actions, safeParse } = useServerActions();
|
|
15
|
+
const { wpTheme } = useWPTheme();
|
|
16
|
+
const [dragBoxColor, setDragBoxColor] = useState(wpTheme.colorScale[100]);
|
|
17
|
+
const [loading, startTransition] = useTransition();
|
|
18
|
+
const handleUpload = (files) => {
|
|
19
|
+
if (!files) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const form = new FormData();
|
|
23
|
+
for (const [k, file] of Object.entries(files)) {
|
|
24
|
+
form.append(`file_${k}`, file);
|
|
25
|
+
}
|
|
26
|
+
startTransition(async () => {
|
|
27
|
+
const response = await actions.media.upload(form).then(safeParse);
|
|
28
|
+
if (response.success) {
|
|
29
|
+
// overlay.snackbar.open(
|
|
30
|
+
// "success",
|
|
31
|
+
// "New media has been successfully added"
|
|
32
|
+
// );
|
|
33
|
+
// refresh(["main"]);
|
|
34
|
+
onUploadComplete?.();
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
error.throw(response.error ?? "Failed to upload media");
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
return (_jsxs(Box, { sx: {
|
|
42
|
+
position: "relative",
|
|
43
|
+
width: "100%",
|
|
44
|
+
border: "1px solid",
|
|
45
|
+
backgroundColor: dragBoxColor,
|
|
46
|
+
borderColor: (theme) => theme.palette.divider,
|
|
47
|
+
minHeight: 150,
|
|
48
|
+
maxHeight: 200,
|
|
49
|
+
display: "flex",
|
|
50
|
+
alignItems: "center",
|
|
51
|
+
justifyContent: "center",
|
|
52
|
+
padding: 10,
|
|
53
|
+
marginBottom: 20,
|
|
54
|
+
...style,
|
|
55
|
+
}, onDragOver: (e) => {
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
dragBoxColor === wpTheme.colorScale[100] &&
|
|
58
|
+
setDragBoxColor(wpTheme.colorScale[300]);
|
|
59
|
+
}, onDragLeave: (e) => {
|
|
60
|
+
dragBoxColor === wpTheme.colorScale[300] &&
|
|
61
|
+
setDragBoxColor(wpTheme.colorScale[100]);
|
|
62
|
+
}, onDrop: (e) => {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
e.stopPropagation();
|
|
65
|
+
dragBoxColor === wpTheme.colorScale[300] &&
|
|
66
|
+
setDragBoxColor(wpTheme.colorScale[100]);
|
|
67
|
+
handleUpload(e.dataTransfer.files);
|
|
68
|
+
}, children: [showCloseButton && (_jsx(Box, { sx: { position: "absolute", right: 0, top: 0 }, children: _jsx(IconButton, { children: _jsx(CloseIcon, { onClick: () => {
|
|
69
|
+
globalState.set("media-upload", { open: false });
|
|
70
|
+
} }) }) })), _jsx(Box, { textAlign: "center", sx: { display: "grid", rowGap: 1 }, children: loading ? (_jsxs(_Fragment, { children: [_jsx(Typography, { children: "Uploading..." }), _jsx(LinearProgress, {})] })) : (_jsxs(_Fragment, { children: [_jsx(Typography, { fontWeight: 500, children: "Drop files to upload" }), _jsx(Typography, { children: "or" }), _jsxs(Button, { component: "label", role: undefined, children: ["Browse files", _jsx("input", { style: {
|
|
71
|
+
width: "1px",
|
|
72
|
+
}, onChange: (e) => {
|
|
73
|
+
console.log(e.target.files);
|
|
74
|
+
handleUpload(e.target.files);
|
|
75
|
+
}, type: "file" })] })] })) })] }));
|
|
76
|
+
};
|
package/media/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/media/index.tsx"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
package/media/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaSelectorList.d.ts","sourceRoot":"","sources":["../../src/media-selector/MediaSelectorList.tsx"],"names":[],"mappings":"AAWA,eAAO,MAAM,iBAAiB,+CAwF7B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState, useTransition } from "react";
|
|
3
|
+
import { Box, Grid, LinearProgress, Pagination } from "@mui/material";
|
|
4
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
5
|
+
import { CardImage } from "../CardImage";
|
|
6
|
+
import { InputSearch } from "../InputSearch";
|
|
7
|
+
import { Typography } from "../Typography";
|
|
8
|
+
import { useWP } from "@rnaga/wp-next-core/client/wp";
|
|
9
|
+
export const MediaSelectorList = () => {
|
|
10
|
+
const { viewport, globalState } = useWP();
|
|
11
|
+
const { actions, parse } = useServerActions();
|
|
12
|
+
const mimeTypes = globalState.get("media-selector-modal")?.mimeTypes;
|
|
13
|
+
const [loading, startTransition] = useTransition();
|
|
14
|
+
const [query, setQuery] = useState({});
|
|
15
|
+
const [{ posts, info }, setPosts] = useState({
|
|
16
|
+
posts: undefined,
|
|
17
|
+
info: undefined,
|
|
18
|
+
});
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
startTransition(async () => {
|
|
21
|
+
const [posts, info] = await actions.post
|
|
22
|
+
.list({ ...query, status: ["inherit"], per_page: 20 }, { postTypes: ["attachment"], mimeTypes })
|
|
23
|
+
.then(parse);
|
|
24
|
+
setPosts({ posts, info });
|
|
25
|
+
});
|
|
26
|
+
}, [query]);
|
|
27
|
+
return (_jsxs(_Fragment, { children: [_jsx(Box, { sx: { my: 2 }, children: _jsxs(Box, { sx: { display: "flex", justifyContent: "flex-end" }, children: [_jsx(InputSearch, { size: "medium", sx: { flexGrow: viewport.isMobile ? 1 : 0 }, onChange: (value) => setQuery({ ...query, search: value, page: 1 }) }), _jsx(Pagination, { page: parseInt(query.page?.toString() ?? "1"), count: info?.pagination?.totalPage ?? 0, siblingCount: 0, onChange: (e, page) => setQuery({ ...query, page }), variant: "outlined", shape: "rounded" })] }) }), _jsx(Grid, { container: true, spacing: 1, columns: { xs: 2, sm: 12, md: 12, xl: 12 }, children: loading ? (_jsxs(Box, { sx: {
|
|
28
|
+
pt: 10,
|
|
29
|
+
width: "100%",
|
|
30
|
+
display: "grid",
|
|
31
|
+
justifyContent: "center",
|
|
32
|
+
alignItems: "center",
|
|
33
|
+
}, children: [_jsx(Typography, { children: "Loading..." }), _jsx(LinearProgress, {})] })) : (posts?.map((post) => (_jsx(Grid, { size: { xs: 1, sm: 4, md: 3, xl: 2 }, gap: 0, children: _jsx(Box, { children: _jsx(CardImage, { src: post.guid, alt: post.post_title, sx: {
|
|
34
|
+
width: "100%",
|
|
35
|
+
maxHeight: 150,
|
|
36
|
+
cursor: "pointer",
|
|
37
|
+
}, onClick: () => {
|
|
38
|
+
globalState.set({
|
|
39
|
+
"media-target-item": { post },
|
|
40
|
+
"media-selector-preview": { open: true },
|
|
41
|
+
});
|
|
42
|
+
} }) }) }, post.ID)))) })] }));
|
|
43
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaSelectorPreview.d.ts","sourceRoot":"","sources":["../../src/media-selector/MediaSelectorPreview.tsx"],"names":[],"mappings":"AAeA,eAAO,MAAM,oBAAoB,+CAiIhC,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import CloseIcon from "@mui/icons-material/Close";
|
|
4
|
+
import { Box, ClickAwayListener, Grid, IconButton } from "@mui/material";
|
|
5
|
+
import { useUser } from "@rnaga/wp-next-core/client/hooks/use-user";
|
|
6
|
+
import { Button } from "../Button";
|
|
7
|
+
import { CardImage } from "../CardImage";
|
|
8
|
+
import { useWPTheme } from "../ThemeRegistry";
|
|
9
|
+
import { Typography } from "../Typography";
|
|
10
|
+
import { getMetadaList } from "@rnaga/wp-next-core/client/utils/media";
|
|
11
|
+
import { MediaGridForm } from "../media/MediaGridForm";
|
|
12
|
+
import { useWP } from "@rnaga/wp-next-core/client/wp";
|
|
13
|
+
import { useMediaSelector } from "../hooks/use-media-selector";
|
|
14
|
+
export const MediaSelectorPreview = () => {
|
|
15
|
+
const { globalState, viewport } = useWP();
|
|
16
|
+
const mediaSelector = useMediaSelector();
|
|
17
|
+
const { user } = useUser();
|
|
18
|
+
const { wpTheme } = useWPTheme();
|
|
19
|
+
const mediaTargetItemState = globalState.get("media-target-item");
|
|
20
|
+
const previewState = globalState.get("media-selector-preview");
|
|
21
|
+
const open = previewState?.open;
|
|
22
|
+
const post = mediaTargetItemState?.post;
|
|
23
|
+
const [metadataList, setMedataList] = useState();
|
|
24
|
+
const canEdit = useMemo(() => user?.role.capabilities.has("edit_others_posts"), [post?.ID]);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (!post)
|
|
27
|
+
return;
|
|
28
|
+
getMetadaList(post).then((medataList) => {
|
|
29
|
+
setMedataList(medataList);
|
|
30
|
+
});
|
|
31
|
+
//return () => globalState.set("media-selector-preview", { open: false });
|
|
32
|
+
}, [post?.ID]);
|
|
33
|
+
if (!open || !post) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return (_jsx(ClickAwayListener, { onClickAway: () => {
|
|
37
|
+
globalState.set("media-selector-preview", { open: false });
|
|
38
|
+
}, children: _jsxs(Box, { sx: {
|
|
39
|
+
borderLeft: 1,
|
|
40
|
+
borderColor: (theme) => theme.palette.divider,
|
|
41
|
+
display: open ? "block" : "none",
|
|
42
|
+
position: "absolute",
|
|
43
|
+
zIndex: 1000,
|
|
44
|
+
width: viewport.isMobile ? "100%" : "40vw",
|
|
45
|
+
minHeight: "100%",
|
|
46
|
+
maxHeight: "calc(100% - 2 * var(--Card-padding))",
|
|
47
|
+
overflowY: "auto",
|
|
48
|
+
top: 0,
|
|
49
|
+
right: 0,
|
|
50
|
+
borderRadius: "var(--Card-childRadius)",
|
|
51
|
+
backgroundColor: wpTheme.colorScale[100],
|
|
52
|
+
}, children: [_jsxs(Box, { sx: {
|
|
53
|
+
display: "flex",
|
|
54
|
+
justifyContent: "space-between",
|
|
55
|
+
px: 2,
|
|
56
|
+
}, children: [_jsxs(Button, { size: "medium", onClick: () => {
|
|
57
|
+
mediaSelector.select(post);
|
|
58
|
+
globalState.set("media-selector-preview", { open: false });
|
|
59
|
+
mediaSelector.close();
|
|
60
|
+
}, children: ["Select", " "] }), _jsx(IconButton, { onClick: () => {
|
|
61
|
+
globalState.set("media-selector-preview", { open: false });
|
|
62
|
+
}, children: _jsx(CloseIcon, {}) })] }), _jsxs(Box, { sx: {
|
|
63
|
+
gap: 2,
|
|
64
|
+
display: "grid",
|
|
65
|
+
gridTemplateColumns: "1fr 1fr",
|
|
66
|
+
padding: 2,
|
|
67
|
+
alignItems: "top",
|
|
68
|
+
justifyContent: "center",
|
|
69
|
+
//overflow: "auto",
|
|
70
|
+
}, children: [_jsx(CardImage, { src: post.guid, alt: post.post_title }), _jsx(Box, { sx: {
|
|
71
|
+
display: "grid",
|
|
72
|
+
gridTemplateColumns: "0.4fr 1fr",
|
|
73
|
+
gap: 0,
|
|
74
|
+
}, children: metadataList &&
|
|
75
|
+
metadataList
|
|
76
|
+
.filter(([key]) => !["Uploaded on", "Uploaded by"].includes(key))
|
|
77
|
+
.map(([key, value]) => (_jsxs(Fragment, { children: [_jsxs(Typography, { children: [key, ":"] }), _jsx(Typography, { fontWeight: 300, sx: {
|
|
78
|
+
overflowWrap: "break-word",
|
|
79
|
+
}, children: value })] }, key))) })] }), canEdit && (_jsx(Grid, { sx: { mx: 2 }, children: _jsx(MediaGridForm, {}) }))] }) }));
|
|
80
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/media-selector/index.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,kBAAkB,+CAmE9B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { Box } from "@mui/material";
|
|
5
|
+
import { Modal, ModalContent } from "../Modal";
|
|
6
|
+
import { Tabs } from "../Tabs";
|
|
7
|
+
import { Typography } from "../Typography";
|
|
8
|
+
import { MediaUpload } from "../media/MediaUpload";
|
|
9
|
+
import { MediaSelectorList } from "./MediaSelectorList";
|
|
10
|
+
import { MediaSelectorPreview } from "./MediaSelectorPreview";
|
|
11
|
+
import { useWP } from "@rnaga/wp-next-core/client/wp";
|
|
12
|
+
import { useMediaSelector } from "../hooks/use-media-selector";
|
|
13
|
+
export const MediaSelectorModal = () => {
|
|
14
|
+
const { globalState } = useWP();
|
|
15
|
+
const mediaSelector = useMediaSelector();
|
|
16
|
+
const [tabIndex, setTabIndex] = useState(0);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
return () => {
|
|
19
|
+
handleClose();
|
|
20
|
+
};
|
|
21
|
+
}, []);
|
|
22
|
+
const handleClose = () => {
|
|
23
|
+
globalState.set({
|
|
24
|
+
"media-selector-preview": { open: false },
|
|
25
|
+
});
|
|
26
|
+
mediaSelector.close();
|
|
27
|
+
};
|
|
28
|
+
return (_jsx(Modal, { open: mediaSelector.isOpen, onClose: handleClose, children: _jsxs(ModalContent, { minWidth: "95%", sx: {
|
|
29
|
+
minHeight: "90%",
|
|
30
|
+
maxHeight: "90%",
|
|
31
|
+
overflowY: "auto",
|
|
32
|
+
}, children: [_jsx(Typography, { size: "large", bold: true, children: "Select or Upload Media" }), _jsxs(Box, { children: [_jsx(MediaSelectorPreview, {}), _jsx(Tabs, { size: "medium", tabIndex: tabIndex, onChange: (index) => {
|
|
33
|
+
setTabIndex(index);
|
|
34
|
+
}, items: [
|
|
35
|
+
{
|
|
36
|
+
label: "Media Library",
|
|
37
|
+
content: _jsx(MediaSelectorList, {}),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
label: "Upload files",
|
|
41
|
+
content: (_jsx(MediaUpload, { style: {
|
|
42
|
+
minHeight: "50dvh",
|
|
43
|
+
}, onUploadComplete: () => {
|
|
44
|
+
// Switch to the first tab after upload
|
|
45
|
+
setTabIndex(0);
|
|
46
|
+
} })),
|
|
47
|
+
},
|
|
48
|
+
] })] })] }) }));
|
|
49
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rnaga/wp-next-ui",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"build": "node ../../scripts/build-ui.mjs",
|
|
6
|
+
"release-old": "node ../../scripts/release.mjs",
|
|
7
|
+
"release": "../../scripts/release.sh"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"ui",
|
|
11
|
+
"user interface",
|
|
12
|
+
"components",
|
|
13
|
+
"material ui",
|
|
14
|
+
"wordpress"
|
|
15
|
+
],
|
|
16
|
+
"author": "Ryohei Nagatsuka",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"description": "User Interface components for WP Next",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@mui/material": "^7.0.2",
|
|
21
|
+
"@rnaga/wp-next-core": "^1.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"eslint": "^9.25.1"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/rnaga/wp-next.git"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"registry": "https://npm.pkg.github.com"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Portal.d.ts","sourceRoot":"","sources":["../../src/portal/Portal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,MAAM,GAAI,OAAO;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B,4CAIA,CAAC"}
|
package/portal/Portal.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createPortal } from "react-dom";
|
|
3
|
+
import { usePortal } from "./use-portal";
|
|
4
|
+
export const Portal = (props) => {
|
|
5
|
+
const [target] = usePortal({ target: props.target || document.body });
|
|
6
|
+
return _jsx(_Fragment, { children: target && createPortal(props.children, target) });
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/portal/index.tsx"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
|
package/portal/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-portal.d.ts","sourceRoot":"","sources":["../../src/portal/use-portal.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,kBAU9D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
export const usePortal = (props) => {
|
|
3
|
+
const { target = document.body } = props;
|
|
4
|
+
const [targetState, setTargetState] = useState(null);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
if (target) {
|
|
7
|
+
setTargetState(target);
|
|
8
|
+
}
|
|
9
|
+
}, [target]);
|
|
10
|
+
return [targetState];
|
|
11
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
import type * as wpCoreTypes from "@rnaga/wp-next-core/types";
|
|
3
|
+
|
|
4
|
+
declare module "@rnaga/wp-next-core/types/client" {
|
|
5
|
+
export interface GlobalState {
|
|
6
|
+
"media-target-item"?: {
|
|
7
|
+
post?: wpCoreTypes.actions.Posts[number];
|
|
8
|
+
};
|
|
9
|
+
"media-upload"?: {
|
|
10
|
+
open: boolean;
|
|
11
|
+
};
|
|
12
|
+
"media-selector-modal"?:
|
|
13
|
+
| {
|
|
14
|
+
open: true;
|
|
15
|
+
onSelected: (post: wpCoreTypes.actions.Posts[number]) => void;
|
|
16
|
+
mimeTypes?: string[];
|
|
17
|
+
}
|
|
18
|
+
| {
|
|
19
|
+
open: false;
|
|
20
|
+
onSelected: undefined;
|
|
21
|
+
mimeTypes: undefined;
|
|
22
|
+
};
|
|
23
|
+
"media-selector-preview"?: {
|
|
24
|
+
open: boolean;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
extendTheme as materialExtendTheme,
|
|
3
|
+
createTheme,
|
|
4
|
+
} from "@mui/material/styles";
|
|
5
|
+
import type { CSSProperties } from "react";
|
|
6
|
+
import type { WPTheme } from "../wp-theme";
|
|
7
|
+
|
|
8
|
+
export {};
|
|
9
|
+
|
|
10
|
+
declare module "@rnaga/wp-next-core/types/hooks/filters.d" {
|
|
11
|
+
export interface Filters {
|
|
12
|
+
next_ui_theme: (options: {
|
|
13
|
+
mui: Parameters<typeof materialExtendTheme>;
|
|
14
|
+
wp: WPTheme;
|
|
15
|
+
}) => {
|
|
16
|
+
mui: Parameters<typeof materialExtendTheme>;
|
|
17
|
+
wp: WPTheme;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./filters";
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface WPThemeNamespace {
|
|
2
|
+
global: true;
|
|
3
|
+
dark: true;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface WPThemeProps {
|
|
7
|
+
text: {
|
|
8
|
+
color: string;
|
|
9
|
+
colorWhite: string;
|
|
10
|
+
linkHoverColor: string;
|
|
11
|
+
};
|
|
12
|
+
background: {
|
|
13
|
+
color: string;
|
|
14
|
+
error: string;
|
|
15
|
+
hoverColor: string;
|
|
16
|
+
};
|
|
17
|
+
colors: {
|
|
18
|
+
primary: string;
|
|
19
|
+
secondary: string;
|
|
20
|
+
tertiary: string;
|
|
21
|
+
success: string;
|
|
22
|
+
warning: string;
|
|
23
|
+
danger: string;
|
|
24
|
+
error: string;
|
|
25
|
+
info: string;
|
|
26
|
+
};
|
|
27
|
+
colorScale: {
|
|
28
|
+
100: string;
|
|
29
|
+
200: string;
|
|
30
|
+
300: string;
|
|
31
|
+
400: string;
|
|
32
|
+
500: string;
|
|
33
|
+
600: string;
|
|
34
|
+
700: string;
|
|
35
|
+
800: string;
|
|
36
|
+
900: string;
|
|
37
|
+
};
|
|
38
|
+
border: {
|
|
39
|
+
color: string;
|
|
40
|
+
};
|
|
41
|
+
table: {
|
|
42
|
+
header: {
|
|
43
|
+
backgroundColor: string;
|
|
44
|
+
color: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type WPTheme = Record<keyof WPThemeNamespace, WPThemeProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wp-theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,OAAO,EAAE,OAsFrB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export const wpTheme = {
|
|
2
|
+
global: {
|
|
3
|
+
text: {
|
|
4
|
+
color: "#000", // black text for light theme
|
|
5
|
+
colorWhite: "#000", // white text for dark theme
|
|
6
|
+
linkHoverColor: "rgba(0, 0, 0, 0.04)", // blue color for link hover
|
|
7
|
+
},
|
|
8
|
+
colors: {
|
|
9
|
+
primary: "#0073aa", // blue
|
|
10
|
+
secondary: "#005177", // dark blue
|
|
11
|
+
tertiary: "#004166", // darker blue
|
|
12
|
+
success: "#28a745", // green
|
|
13
|
+
warning: "#ffc107", // yellow
|
|
14
|
+
danger: "#dc3545", // red
|
|
15
|
+
error: "#dc3545", // red
|
|
16
|
+
info: "#17a2b8", // cyan
|
|
17
|
+
},
|
|
18
|
+
colorScale: {
|
|
19
|
+
100: "#ffffff", // pure white
|
|
20
|
+
200: "#d9d9d9",
|
|
21
|
+
300: "#b3b3b3",
|
|
22
|
+
400: "#8c8c8c",
|
|
23
|
+
500: "#666666",
|
|
24
|
+
600: "#404040",
|
|
25
|
+
700: "#1a1a1a",
|
|
26
|
+
800: "#0d0d0d",
|
|
27
|
+
900: "#000000", // pure black
|
|
28
|
+
},
|
|
29
|
+
background: {
|
|
30
|
+
color: "#fff", // dark background
|
|
31
|
+
error: "#f8d7da", // light red for error background
|
|
32
|
+
hoverColor: "#f5f5f5", // light gray for hover
|
|
33
|
+
},
|
|
34
|
+
border: {
|
|
35
|
+
color: "rgb(189, 189, 189)", // gray border
|
|
36
|
+
},
|
|
37
|
+
table: {
|
|
38
|
+
header: {
|
|
39
|
+
backgroundColor: "#dbdadaff", //"rgba(54, 45, 45, 1)", // dark background for table header
|
|
40
|
+
color: "rgba(0, 0, 0, 1)", // white text for table header
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
dark: {
|
|
45
|
+
text: {
|
|
46
|
+
color: "#fff", // white text for dark theme
|
|
47
|
+
colorWhite: "#fff", // black text for light theme
|
|
48
|
+
linkHoverColor: "rgba(248, 244, 244, 0.45)", // white color for link hover
|
|
49
|
+
},
|
|
50
|
+
colors: {
|
|
51
|
+
primary: "#0073aa", // blue
|
|
52
|
+
secondary: "#005177", // dark blue
|
|
53
|
+
tertiary: "#004166", // darker blue
|
|
54
|
+
success: "#28a745", // green
|
|
55
|
+
warning: "#ffc107", // yellow
|
|
56
|
+
danger: "#dc3545", // red
|
|
57
|
+
error: "#dc3545", // red
|
|
58
|
+
info: "#17a2b8", // cyan
|
|
59
|
+
},
|
|
60
|
+
colorScale: {
|
|
61
|
+
100: "#000000", // lightest in dark mode
|
|
62
|
+
200: "#0d0d0d",
|
|
63
|
+
300: "#1a1a1a",
|
|
64
|
+
400: "#404040",
|
|
65
|
+
500: "#666666",
|
|
66
|
+
600: "#8c8c8c",
|
|
67
|
+
700: "#b3b3b3",
|
|
68
|
+
800: "#d9d9d9",
|
|
69
|
+
900: "#ffffff", // darkest in dark mode
|
|
70
|
+
},
|
|
71
|
+
background: {
|
|
72
|
+
color: "#0d0d0d", // dark background
|
|
73
|
+
error: "#f8d7da", // light red for error background
|
|
74
|
+
hoverColor: "#1a1a1a", // slightly lighter for hover
|
|
75
|
+
},
|
|
76
|
+
border: {
|
|
77
|
+
color: "rgb(189, 189, 189", // gray border
|
|
78
|
+
},
|
|
79
|
+
table: {
|
|
80
|
+
header: {
|
|
81
|
+
backgroundColor: "rgba(10, 10, 10, 1)", // light background for table header
|
|
82
|
+
color: "rgba(255, 255, 255, 1)", // black text for table header
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
};
|