peak6-x-publishing-plugin 0.1.2

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.
@@ -0,0 +1,151 @@
1
+ // src/ui/index.tsx
2
+ import { usePluginData } from "@paperclipai/plugin-sdk/ui";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ function DashboardWidget(_props) {
5
+ const { data, loading, error } = usePluginData("dashboard-summary");
6
+ if (loading) return /* @__PURE__ */ jsx("div", { style: { padding: "1rem" }, children: "Loading X Publishing..." });
7
+ if (error) return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem", color: "#ef4444" }, children: [
8
+ "Error: ",
9
+ error.message
10
+ ] });
11
+ return /* @__PURE__ */ jsxs("div", { style: { display: "grid", gap: "0.75rem", padding: "0.5rem" }, children: [
12
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [
13
+ /* @__PURE__ */ jsx("strong", { children: "X Publishing" }),
14
+ /* @__PURE__ */ jsxs("span", { style: { fontSize: "0.75rem", opacity: 0.5 }, children: [
15
+ "Token: ",
16
+ data?.token_health ?? "unknown"
17
+ ] })
18
+ ] }),
19
+ /* @__PURE__ */ jsxs("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: "0.5rem" }, children: [
20
+ /* @__PURE__ */ jsx(StatCard, { label: "Today", value: `${data?.today_post_count ?? 0}/${data?.daily_limit ?? 25}` }),
21
+ /* @__PURE__ */ jsx(StatCard, { label: "Pending", value: data?.pending_drafts ?? 0 }),
22
+ /* @__PURE__ */ jsx(StatCard, { label: "Token", value: data?.token_health === "valid" ? "OK" : "!" })
23
+ ] }),
24
+ data?.recent_posts && data.recent_posts.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
25
+ /* @__PURE__ */ jsx("div", { style: { fontSize: "0.75rem", fontWeight: 600, marginBottom: "0.25rem" }, children: "Recent Posts" }),
26
+ data.recent_posts.slice(0, 3).map((post) => /* @__PURE__ */ jsxs(
27
+ "div",
28
+ {
29
+ style: {
30
+ padding: "0.4rem",
31
+ marginBottom: "0.25rem",
32
+ background: "rgba(128,128,128,0.1)",
33
+ borderRadius: "4px",
34
+ fontSize: "0.8rem"
35
+ },
36
+ children: [
37
+ /* @__PURE__ */ jsx("div", { style: { opacity: 0.7 }, children: post.text.length > 100 ? `${post.text.slice(0, 100)}...` : post.text || `[${post.format}]` }),
38
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "0.5rem", fontSize: "0.7rem", opacity: 0.5, marginTop: "0.15rem" }, children: [
39
+ /* @__PURE__ */ jsx("span", { children: post.format }),
40
+ post.metrics && /* @__PURE__ */ jsxs("span", { children: [
41
+ post.metrics.likes,
42
+ "L ",
43
+ post.metrics.retweets,
44
+ "RT ",
45
+ post.metrics.replies,
46
+ "Re"
47
+ ] }),
48
+ /* @__PURE__ */ jsx(
49
+ "a",
50
+ {
51
+ href: `https://x.com/i/status/${post.tweet_id}`,
52
+ target: "_blank",
53
+ rel: "noopener noreferrer",
54
+ style: { color: "#2563eb", textDecoration: "none" },
55
+ children: "View"
56
+ }
57
+ )
58
+ ] })
59
+ ]
60
+ },
61
+ post.tweet_id
62
+ ))
63
+ ] }),
64
+ (!data?.recent_posts || data.recent_posts.length === 0) && /* @__PURE__ */ jsx("div", { style: { opacity: 0.5, fontSize: "0.85rem" }, children: "No posts yet. Use draft-post or publish-post tools to get started." })
65
+ ] });
66
+ }
67
+ function SettingsPage() {
68
+ const { data, loading, error } = usePluginData("plugin-config");
69
+ if (loading) return /* @__PURE__ */ jsx("div", { children: "Loading settings..." });
70
+ if (error) return /* @__PURE__ */ jsxs("div", { children: [
71
+ "Error: ",
72
+ error.message
73
+ ] });
74
+ return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem" }, children: [
75
+ /* @__PURE__ */ jsx("h2", { children: "X Publishing Settings" }),
76
+ /* @__PURE__ */ jsx("p", { style: { opacity: 0.5 }, children: "Configure OAuth, approval modes, and publishing limits via the plugin configuration panel." }),
77
+ /* @__PURE__ */ jsx("pre", { style: { background: "rgba(128,128,128,0.1)", padding: "1rem", borderRadius: "4px", overflow: "auto", fontSize: "0.8rem" }, children: JSON.stringify(data, null, 2) })
78
+ ] });
79
+ }
80
+ function ContentPage() {
81
+ const { data, loading, error } = usePluginData("content-queue");
82
+ if (loading) return /* @__PURE__ */ jsx("div", { style: { padding: "1rem" }, children: "Loading content queue..." });
83
+ if (error) return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem", color: "#ef4444" }, children: [
84
+ "Error: ",
85
+ error.message
86
+ ] });
87
+ return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem", display: "grid", gap: "1.5rem" }, children: [
88
+ /* @__PURE__ */ jsx("h2", { children: "Content Queue" }),
89
+ /* @__PURE__ */ jsxs("section", { children: [
90
+ /* @__PURE__ */ jsx("h3", { style: { fontSize: "0.9rem", fontWeight: 600, marginBottom: "0.5rem" }, children: "Pending Drafts" }),
91
+ data?.drafts && data.drafts.length > 0 ? data.drafts.map((d) => /* @__PURE__ */ jsxs(
92
+ "div",
93
+ {
94
+ style: {
95
+ padding: "0.5rem",
96
+ marginBottom: "0.25rem",
97
+ background: "rgba(128,128,128,0.1)",
98
+ borderRadius: "4px",
99
+ fontSize: "0.85rem"
100
+ },
101
+ children: [
102
+ /* @__PURE__ */ jsx("div", { children: d.text.length > 120 ? `${d.text.slice(0, 120)}...` : d.text }),
103
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: "0.7rem", opacity: 0.5, marginTop: "0.15rem" }, children: [
104
+ d.format,
105
+ " \xB7 ",
106
+ d.status,
107
+ d.schedule_at ? ` · scheduled ${d.schedule_at}` : ""
108
+ ] })
109
+ ]
110
+ },
111
+ d.id
112
+ )) : /* @__PURE__ */ jsx("div", { style: { opacity: 0.5, fontSize: "0.85rem" }, children: "No pending drafts." })
113
+ ] }),
114
+ /* @__PURE__ */ jsxs("section", { children: [
115
+ /* @__PURE__ */ jsx("h3", { style: { fontSize: "0.9rem", fontWeight: 600, marginBottom: "0.5rem" }, children: "Scheduled Posts" }),
116
+ data?.scheduled && data.scheduled.length > 0 ? data.scheduled.map((s) => /* @__PURE__ */ jsxs(
117
+ "div",
118
+ {
119
+ style: {
120
+ padding: "0.5rem",
121
+ marginBottom: "0.25rem",
122
+ background: "rgba(128,128,128,0.1)",
123
+ borderRadius: "4px",
124
+ fontSize: "0.85rem"
125
+ },
126
+ children: [
127
+ /* @__PURE__ */ jsx("div", { children: s.text.length > 120 ? `${s.text.slice(0, 120)}...` : s.text }),
128
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: "0.7rem", opacity: 0.5, marginTop: "0.15rem" }, children: [
129
+ "Scheduled: ",
130
+ s.schedule_at
131
+ ] })
132
+ ]
133
+ },
134
+ s.id
135
+ )) : /* @__PURE__ */ jsx("div", { style: { opacity: 0.5, fontSize: "0.85rem" }, children: "No scheduled posts." })
136
+ ] }),
137
+ /* @__PURE__ */ jsx("p", { style: { opacity: 0.4, fontSize: "0.75rem" }, children: "Approve/reject actions will be available in a future release. Use the Paperclip issue board for approvals." })
138
+ ] });
139
+ }
140
+ function StatCard({ label, value }) {
141
+ return /* @__PURE__ */ jsxs("div", { style: { textAlign: "center", padding: "0.5rem", background: "rgba(128,128,128,0.1)", borderRadius: "4px" }, children: [
142
+ /* @__PURE__ */ jsx("div", { style: { fontSize: "1.1rem", fontWeight: 600 }, children: value }),
143
+ /* @__PURE__ */ jsx("div", { style: { fontSize: "0.7rem", opacity: 0.5 }, children: label })
144
+ ] });
145
+ }
146
+ export {
147
+ ContentPage,
148
+ DashboardWidget,
149
+ SettingsPage
150
+ };
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ui/index.tsx"],
4
+ "sourcesContent": ["import { usePluginData, type PluginWidgetProps } from \"@paperclipai/plugin-sdk/ui\";\nimport type { PublishedPostData } from \"../types.js\";\n\ntype DashboardData = {\n today_post_count: number;\n daily_limit: number;\n pending_drafts: number;\n token_health: string;\n recent_posts: PublishedPostData[];\n};\n\nexport function DashboardWidget(_props: PluginWidgetProps) {\n const { data, loading, error } = usePluginData<DashboardData>(\"dashboard-summary\");\n\n if (loading) return <div style={{ padding: \"1rem\" }}>Loading X Publishing...</div>;\n if (error) return <div style={{ padding: \"1rem\", color: \"#ef4444\" }}>Error: {error.message}</div>;\n\n return (\n <div style={{ display: \"grid\", gap: \"0.75rem\", padding: \"0.5rem\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <strong>X Publishing</strong>\n <span style={{ fontSize: \"0.75rem\", opacity: 0.5 }}>\n Token: {data?.token_health ?? \"unknown\"}\n </span>\n </div>\n\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr 1fr\", gap: \"0.5rem\" }}>\n <StatCard label=\"Today\" value={`${data?.today_post_count ?? 0}/${data?.daily_limit ?? 25}`} />\n <StatCard label=\"Pending\" value={data?.pending_drafts ?? 0} />\n <StatCard label=\"Token\" value={data?.token_health === \"valid\" ? \"OK\" : \"!\"} />\n </div>\n\n {data?.recent_posts && data.recent_posts.length > 0 && (\n <div>\n <div style={{ fontSize: \"0.75rem\", fontWeight: 600, marginBottom: \"0.25rem\" }}>Recent Posts</div>\n {data.recent_posts.slice(0, 3).map((post) => (\n <div\n key={post.tweet_id}\n style={{\n padding: \"0.4rem\",\n marginBottom: \"0.25rem\",\n background: \"rgba(128,128,128,0.1)\",\n borderRadius: \"4px\",\n fontSize: \"0.8rem\",\n }}\n >\n <div style={{ opacity: 0.7 }}>\n {post.text.length > 100 ? `${post.text.slice(0, 100)}...` : post.text || `[${post.format}]`}\n </div>\n <div style={{ display: \"flex\", gap: \"0.5rem\", fontSize: \"0.7rem\", opacity: 0.5, marginTop: \"0.15rem\" }}>\n <span>{post.format}</span>\n {post.metrics && (\n <span>\n {post.metrics.likes}L {post.metrics.retweets}RT {post.metrics.replies}Re\n </span>\n )}\n <a\n href={`https://x.com/i/status/${post.tweet_id}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: \"#2563eb\", textDecoration: \"none\" }}\n >\n View\n </a>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {(!data?.recent_posts || data.recent_posts.length === 0) && (\n <div style={{ opacity: 0.5, fontSize: \"0.85rem\" }}>\n No posts yet. Use draft-post or publish-post tools to get started.\n </div>\n )}\n </div>\n );\n}\n\nexport function SettingsPage() {\n const { data, loading, error } = usePluginData<Record<string, unknown>>(\"plugin-config\");\n\n if (loading) return <div>Loading settings...</div>;\n if (error) return <div>Error: {error.message}</div>;\n\n return (\n <div style={{ padding: \"1rem\" }}>\n <h2>X Publishing Settings</h2>\n <p style={{ opacity: 0.5 }}>\n Configure OAuth, approval modes, and publishing limits via the plugin configuration panel.\n </p>\n <pre style={{ background: \"rgba(128,128,128,0.1)\", padding: \"1rem\", borderRadius: \"4px\", overflow: \"auto\", fontSize: \"0.8rem\" }}>\n {JSON.stringify(data, null, 2)}\n </pre>\n </div>\n );\n}\n\ntype ContentData = {\n drafts: Array<{ id: string; text: string; format: string; status: string; schedule_at?: string }>;\n scheduled: Array<{ id: string; text: string; schedule_at: string }>;\n};\n\nexport function ContentPage() {\n const { data, loading, error } = usePluginData<ContentData>(\"content-queue\");\n\n if (loading) return <div style={{ padding: \"1rem\" }}>Loading content queue...</div>;\n if (error) return <div style={{ padding: \"1rem\", color: \"#ef4444\" }}>Error: {error.message}</div>;\n\n return (\n <div style={{ padding: \"1rem\", display: \"grid\", gap: \"1.5rem\" }}>\n <h2>Content Queue</h2>\n\n <section>\n <h3 style={{ fontSize: \"0.9rem\", fontWeight: 600, marginBottom: \"0.5rem\" }}>Pending Drafts</h3>\n {data?.drafts && data.drafts.length > 0 ? (\n data.drafts.map((d) => (\n <div\n key={d.id}\n style={{\n padding: \"0.5rem\",\n marginBottom: \"0.25rem\",\n background: \"rgba(128,128,128,0.1)\",\n borderRadius: \"4px\",\n fontSize: \"0.85rem\",\n }}\n >\n <div>{d.text.length > 120 ? `${d.text.slice(0, 120)}...` : d.text}</div>\n <div style={{ fontSize: \"0.7rem\", opacity: 0.5, marginTop: \"0.15rem\" }}>\n {d.format} &middot; {d.status}{d.schedule_at ? ` &middot; scheduled ${d.schedule_at}` : \"\"}\n </div>\n </div>\n ))\n ) : (\n <div style={{ opacity: 0.5, fontSize: \"0.85rem\" }}>No pending drafts.</div>\n )}\n </section>\n\n <section>\n <h3 style={{ fontSize: \"0.9rem\", fontWeight: 600, marginBottom: \"0.5rem\" }}>Scheduled Posts</h3>\n {data?.scheduled && data.scheduled.length > 0 ? (\n data.scheduled.map((s) => (\n <div\n key={s.id}\n style={{\n padding: \"0.5rem\",\n marginBottom: \"0.25rem\",\n background: \"rgba(128,128,128,0.1)\",\n borderRadius: \"4px\",\n fontSize: \"0.85rem\",\n }}\n >\n <div>{s.text.length > 120 ? `${s.text.slice(0, 120)}...` : s.text}</div>\n <div style={{ fontSize: \"0.7rem\", opacity: 0.5, marginTop: \"0.15rem\" }}>\n Scheduled: {s.schedule_at}\n </div>\n </div>\n ))\n ) : (\n <div style={{ opacity: 0.5, fontSize: \"0.85rem\" }}>No scheduled posts.</div>\n )}\n </section>\n\n <p style={{ opacity: 0.4, fontSize: \"0.75rem\" }}>\n Approve/reject actions will be available in a future release. Use the Paperclip issue board for approvals.\n </p>\n </div>\n );\n}\n\nfunction StatCard({ label, value }: { label: string; value: string | number }) {\n return (\n <div style={{ textAlign: \"center\", padding: \"0.5rem\", background: \"rgba(128,128,128,0.1)\", borderRadius: \"4px\" }}>\n <div style={{ fontSize: \"1.1rem\", fontWeight: 600 }}>{value}</div>\n <div style={{ fontSize: \"0.7rem\", opacity: 0.5 }}>{label}</div>\n </div>\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }