@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.
Files changed (190) hide show
  1. package/Accordion.d.ts +4 -0
  2. package/Accordion.d.ts.map +1 -0
  3. package/Accordion.js +13 -0
  4. package/Accordions.d.ts +19 -0
  5. package/Accordions.d.ts.map +1 -0
  6. package/Accordions.js +39 -0
  7. package/Background.d.ts +5 -0
  8. package/Background.d.ts.map +1 -0
  9. package/Background.js +18 -0
  10. package/BadgeOnMouseOver.d.ts +12 -0
  11. package/BadgeOnMouseOver.d.ts.map +1 -0
  12. package/BadgeOnMouseOver.js +40 -0
  13. package/BasicMenuButton.d.ts +17 -0
  14. package/BasicMenuButton.d.ts.map +1 -0
  15. package/BasicMenuButton.js +61 -0
  16. package/Button.d.ts +10 -0
  17. package/Button.d.ts.map +1 -0
  18. package/Button.js +15 -0
  19. package/Card.d.ts +6 -0
  20. package/Card.d.ts.map +1 -0
  21. package/Card.js +13 -0
  22. package/CardImage.d.ts +10 -0
  23. package/CardImage.d.ts.map +1 -0
  24. package/CardImage.js +34 -0
  25. package/Checkbox.d.ts +6 -0
  26. package/Checkbox.d.ts.map +1 -0
  27. package/Checkbox.js +13 -0
  28. package/Chip.d.ts +10 -0
  29. package/Chip.d.ts.map +1 -0
  30. package/Chip.js +41 -0
  31. package/DateTimePicker.d.ts +6 -0
  32. package/DateTimePicker.d.ts.map +1 -0
  33. package/DateTimePicker.js +45 -0
  34. package/DraggableBox.d.ts +39 -0
  35. package/DraggableBox.d.ts.map +1 -0
  36. package/DraggableBox.js +171 -0
  37. package/Form.d.ts +4 -0
  38. package/Form.d.ts.map +1 -0
  39. package/Form.js +8 -0
  40. package/FormDataProvider.d.ts +5 -0
  41. package/FormDataProvider.d.ts.map +1 -0
  42. package/FormDataProvider.js +6 -0
  43. package/IconButtonDelete.d.ts +6 -0
  44. package/IconButtonDelete.d.ts.map +1 -0
  45. package/IconButtonDelete.js +14 -0
  46. package/Input.d.ts +14 -0
  47. package/Input.d.ts.map +1 -0
  48. package/Input.js +84 -0
  49. package/InputClickField.d.ts +13 -0
  50. package/InputClickField.d.ts.map +1 -0
  51. package/InputClickField.js +21 -0
  52. package/InputColor.d.ts +12 -0
  53. package/InputColor.d.ts.map +1 -0
  54. package/InputColor.js +141 -0
  55. package/InputMultiple.d.ts +15 -0
  56. package/InputMultiple.d.ts.map +1 -0
  57. package/InputMultiple.js +55 -0
  58. package/InputSearch.d.ts +7 -0
  59. package/InputSearch.d.ts.map +1 -0
  60. package/InputSearch.js +28 -0
  61. package/Link.d.ts +6 -0
  62. package/Link.d.ts.map +1 -0
  63. package/Link.js +15 -0
  64. package/LinkCopy.d.ts +6 -0
  65. package/LinkCopy.d.ts.map +1 -0
  66. package/LinkCopy.js +17 -0
  67. package/Loading.d.ts +7 -0
  68. package/Loading.d.ts.map +1 -0
  69. package/Loading.js +29 -0
  70. package/LoadingBox.d.ts +12 -0
  71. package/LoadingBox.d.ts.map +1 -0
  72. package/LoadingBox.js +30 -0
  73. package/MediaTag.d.ts +9 -0
  74. package/MediaTag.d.ts.map +1 -0
  75. package/MediaTag.js +19 -0
  76. package/Modal.d.ts +11 -0
  77. package/Modal.d.ts.map +1 -0
  78. package/Modal.js +65 -0
  79. package/ModalConfirm.d.ts +8 -0
  80. package/ModalConfirm.d.ts.map +1 -0
  81. package/ModalConfirm.js +58 -0
  82. package/PopperMenu.d.ts +7 -0
  83. package/PopperMenu.d.ts.map +1 -0
  84. package/PopperMenu.js +6 -0
  85. package/README.md +292 -0
  86. package/Select.d.ts +21 -0
  87. package/Select.d.ts.map +1 -0
  88. package/Select.js +23 -0
  89. package/SelectAutocomplete.d.ts +1208 -0
  90. package/SelectAutocomplete.d.ts.map +1 -0
  91. package/SelectAutocomplete.js +113 -0
  92. package/SelectMultiple.d.ts +16 -0
  93. package/SelectMultiple.d.ts.map +1 -0
  94. package/SelectMultiple.js +28 -0
  95. package/SelectWPPost.d.ts +17 -0
  96. package/SelectWPPost.d.ts.map +1 -0
  97. package/SelectWPPost.js +98 -0
  98. package/SelectWPTaxonomy.d.ts +9 -0
  99. package/SelectWPTaxonomy.d.ts.map +1 -0
  100. package/SelectWPTaxonomy.js +35 -0
  101. package/SelectWPTerm.d.ts +13 -0
  102. package/SelectWPTerm.d.ts.map +1 -0
  103. package/SelectWPTerm.js +92 -0
  104. package/SelectWPTerms.d.ts +27 -0
  105. package/SelectWPTerms.d.ts.map +1 -0
  106. package/SelectWPTerms.js +105 -0
  107. package/SelectWPUser.d.ts +16 -0
  108. package/SelectWPUser.d.ts.map +1 -0
  109. package/SelectWPUser.js +101 -0
  110. package/SortableList.d.ts +28 -0
  111. package/SortableList.d.ts.map +1 -0
  112. package/SortableList.js +195 -0
  113. package/Tabs.d.ts +17 -0
  114. package/Tabs.d.ts.map +1 -0
  115. package/Tabs.js +35 -0
  116. package/ThemeRegistry.d.ts +13 -0
  117. package/ThemeRegistry.d.ts.map +1 -0
  118. package/ThemeRegistry.js +36 -0
  119. package/Typography.d.ts +9 -0
  120. package/Typography.d.ts.map +1 -0
  121. package/Typography.js +12 -0
  122. package/Viewport.d.ts +6 -0
  123. package/Viewport.d.ts.map +1 -0
  124. package/Viewport.js +10 -0
  125. package/hooks/use-form-data.d.ts +39 -0
  126. package/hooks/use-form-data.d.ts.map +1 -0
  127. package/hooks/use-form-data.js +91 -0
  128. package/hooks/use-media-selector.d.ts +10 -0
  129. package/hooks/use-media-selector.d.ts.map +1 -0
  130. package/hooks/use-media-selector.js +33 -0
  131. package/hooks/use-mouse-move.d.ts +18 -0
  132. package/hooks/use-mouse-move.d.ts.map +1 -0
  133. package/hooks/use-mouse-move.js +112 -0
  134. package/hooks/use-scheme-toggle.d.ts +6 -0
  135. package/hooks/use-scheme-toggle.d.ts.map +1 -0
  136. package/hooks/use-scheme-toggle.js +16 -0
  137. package/hooks/use-viewport.d.ts +5 -0
  138. package/hooks/use-viewport.d.ts.map +1 -0
  139. package/hooks/use-viewport.js +9 -0
  140. package/list/ListGrid.d.ts +12 -0
  141. package/list/ListGrid.d.ts.map +1 -0
  142. package/list/ListGrid.js +15 -0
  143. package/list/ListTable.d.ts +43 -0
  144. package/list/ListTable.d.ts.map +1 -0
  145. package/list/ListTable.js +143 -0
  146. package/list/Pagination.d.ts +5 -0
  147. package/list/Pagination.d.ts.map +1 -0
  148. package/list/Pagination.js +24 -0
  149. package/list/index.d.ts +4 -0
  150. package/list/index.d.ts.map +1 -0
  151. package/list/index.js +3 -0
  152. package/media/MediaGridForm.d.ts +5 -0
  153. package/media/MediaGridForm.d.ts.map +1 -0
  154. package/media/MediaGridForm.js +128 -0
  155. package/media/MediaThumbnail.d.ts +4 -0
  156. package/media/MediaThumbnail.d.ts.map +1 -0
  157. package/media/MediaThumbnail.js +17 -0
  158. package/media/MediaUpload.d.ts +7 -0
  159. package/media/MediaUpload.d.ts.map +1 -0
  160. package/media/MediaUpload.js +76 -0
  161. package/media/index.d.ts +4 -0
  162. package/media/index.d.ts.map +1 -0
  163. package/media/index.js +3 -0
  164. package/media-selector/MediaSelectorList.d.ts +2 -0
  165. package/media-selector/MediaSelectorList.d.ts.map +1 -0
  166. package/media-selector/MediaSelectorList.js +43 -0
  167. package/media-selector/MediaSelectorPreview.d.ts +2 -0
  168. package/media-selector/MediaSelectorPreview.d.ts.map +1 -0
  169. package/media-selector/MediaSelectorPreview.js +80 -0
  170. package/media-selector/index.d.ts +2 -0
  171. package/media-selector/index.d.ts.map +1 -0
  172. package/media-selector/index.js +49 -0
  173. package/package.json +33 -0
  174. package/portal/Portal.d.ts +6 -0
  175. package/portal/Portal.d.ts.map +1 -0
  176. package/portal/Portal.js +7 -0
  177. package/portal/index.d.ts +3 -0
  178. package/portal/index.d.ts.map +1 -0
  179. package/portal/index.js +2 -0
  180. package/portal/use-portal.d.ts +4 -0
  181. package/portal/use-portal.d.ts.map +1 -0
  182. package/portal/use-portal.js +11 -0
  183. package/types/global-state.d.ts +27 -0
  184. package/types/hooks/filters.d.ts +20 -0
  185. package/types/hooks/index.d.ts +1 -0
  186. package/types/index.d.ts +3 -0
  187. package/types/wp-theme.d.ts +49 -0
  188. package/wp-theme/index.d.ts +3 -0
  189. package/wp-theme/index.d.ts.map +1 -0
  190. 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
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./MediaGridForm";
2
+ export * from "./MediaThumbnail";
3
+ export * from "./MediaUpload";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from "./MediaGridForm";
2
+ export * from "./MediaThumbnail";
3
+ export * from "./MediaUpload";
@@ -0,0 +1,2 @@
1
+ export declare const MediaSelectorList: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MediaSelectorList.d.ts.map
@@ -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,2 @@
1
+ export declare const MediaSelectorPreview: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MediaSelectorPreview.d.ts.map
@@ -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,2 @@
1
+ export declare const MediaSelectorModal: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,6 @@
1
+ import React from "react";
2
+ export declare const Portal: (props: {
3
+ children: React.ReactNode;
4
+ target?: HTMLElement | null;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=Portal.d.ts.map
@@ -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"}
@@ -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,3 @@
1
+ export * from "./use-portal";
2
+ export * from "./Portal";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export * from "./use-portal";
2
+ export * from "./Portal";
@@ -0,0 +1,4 @@
1
+ export declare const usePortal: (props: {
2
+ target: HTMLElement | null;
3
+ }) => HTMLElement[];
4
+ //# sourceMappingURL=use-portal.d.ts.map
@@ -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";
@@ -0,0 +1,3 @@
1
+ export * from "./wp-theme";
2
+ export * from "./hooks";
3
+ export * from "./global-state";
@@ -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,3 @@
1
+ import type { WPTheme } from "../types";
2
+ export declare const wpTheme: WPTheme;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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
+ };