@burdenoff/microfe-devportal 2026.830.1 → 2026.830.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.
- package/dist/devportal/AdminDevportalRoot.d.ts.map +1 -1
- package/dist/devportal/AdminDevportalRoot.js +16 -19
- package/dist/devportal/AdminDevportalRoot.js.map +1 -1
- package/dist/devportal/DevportalRoot.d.ts.map +1 -1
- package/dist/devportal/DevportalRoot.js +36 -39
- package/dist/devportal/DevportalRoot.js.map +1 -1
- package/dist/devportal/components/AppCard.js +41 -41
- package/dist/devportal/components/ConfirmDialog.d.ts.map +1 -1
- package/dist/devportal/components/ConfirmDialog.js +19 -22
- package/dist/devportal/components/ConfirmDialog.js.map +1 -1
- package/dist/devportal/components/DataTable.d.ts.map +1 -1
- package/dist/devportal/components/DataTable.js +31 -34
- package/dist/devportal/components/DataTable.js.map +1 -1
- package/dist/devportal/components/FeatureFlaggedRoute.js +8 -8
- package/dist/devportal/components/FormField.d.ts.map +1 -1
- package/dist/devportal/components/FormField.js +26 -32
- package/dist/devportal/components/FormField.js.map +1 -1
- package/dist/devportal/components/GrantDelegationModal.js +64 -64
- package/dist/devportal/components/GrantDelegationModal.js.map +1 -1
- package/dist/devportal/components/LoadingState.d.ts.map +1 -1
- package/dist/devportal/components/LoadingState.js +5 -8
- package/dist/devportal/components/LoadingState.js.map +1 -1
- package/dist/devportal/components/PageLayout.d.ts.map +1 -1
- package/dist/devportal/components/PageLayout.js +10 -13
- package/dist/devportal/components/PageLayout.js.map +1 -1
- package/dist/devportal/components/PermissionGuard.d.ts.map +1 -1
- package/dist/devportal/components/PermissionGuard.js +11 -14
- package/dist/devportal/components/PermissionGuard.js.map +1 -1
- package/dist/devportal/components/SecretDisplay.d.ts.map +1 -1
- package/dist/devportal/components/SecretDisplay.js +24 -30
- package/dist/devportal/components/SecretDisplay.js.map +1 -1
- package/dist/devportal/components/SectionNav.d.ts.map +1 -1
- package/dist/devportal/components/SectionNav.js +24 -27
- package/dist/devportal/components/SectionNav.js.map +1 -1
- package/dist/devportal/components/StatusBadge.d.ts.map +1 -1
- package/dist/devportal/components/StatusBadge.js +24 -33
- package/dist/devportal/components/StatusBadge.js.map +1 -1
- package/dist/devportal/index.d.ts +1 -0
- package/dist/devportal/index.d.ts.map +1 -1
- package/dist/devportal/index.js +1 -0
- package/dist/devportal/pages/AdminReviewPage.js +172 -172
- package/dist/devportal/pages/AnalyticsDashboardPage.js +43 -43
- package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
- package/dist/devportal/pages/ApiKeysPage.js +119 -119
- package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
- package/dist/devportal/pages/AppLogsPage.js +45 -45
- package/dist/devportal/pages/ApplicationDetailPage.js +607 -607
- package/dist/devportal/pages/ApplicationVersionsPage.js +13 -13
- package/dist/devportal/pages/ApplicationsPage.d.ts.map +1 -1
- package/dist/devportal/pages/ApplicationsPage.js +104 -101
- package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
- package/dist/devportal/pages/CreateApiKeyPage.js +45 -45
- package/dist/devportal/pages/CreateApplicationPage.js +38 -38
- package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
- package/dist/devportal/pages/CreateOAuthClientPage.js +52 -52
- package/dist/devportal/pages/CreateOrganizationPage.js +26 -26
- package/dist/devportal/pages/CreateWebhookPage.d.ts.map +1 -1
- package/dist/devportal/pages/CreateWebhookPage.js +48 -48
- package/dist/devportal/pages/CreateWebhookPage.js.map +1 -1
- package/dist/devportal/pages/DashboardPage.d.ts.map +1 -1
- package/dist/devportal/pages/DashboardPage.js +66 -72
- package/dist/devportal/pages/DashboardPage.js.map +1 -1
- package/dist/devportal/pages/DelegationsPage.js +174 -174
- package/dist/devportal/pages/DocumentationPage.js +93 -93
- package/dist/devportal/pages/EditApplicationPage.js +14 -14
- package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
- package/dist/devportal/pages/ListingPreviewPage.js +76 -76
- package/dist/devportal/pages/OAuthClientDetailPage.js +75 -75
- package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
- package/dist/devportal/pages/OAuthClientsPage.js +64 -64
- package/dist/devportal/pages/OrganizationDetailPage.js +189 -189
- package/dist/devportal/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationMembersPage.js +10 -10
- package/dist/devportal/pages/OrganizationsPage.d.ts.map +1 -1
- package/dist/devportal/pages/OrganizationsPage.js +163 -154
- package/dist/devportal/pages/OrganizationsPage.js.map +1 -1
- package/dist/devportal/pages/PublishPage.js +104 -104
- package/dist/devportal/pages/PublishPage.js.map +1 -1
- package/dist/devportal/pages/PublisherProfilePage.js +55 -55
- package/dist/devportal/pages/ResourcesPage.js +60 -60
- package/dist/devportal/pages/RevenueDashboardPage.js +60 -60
- package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -1
- package/dist/devportal/pages/SellerDashboardPage.js +83 -83
- package/dist/devportal/pages/SellerItemsPage.js +163 -163
- package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
- package/dist/devportal/pages/SellerOrdersPage.js +63 -63
- package/dist/devportal/pages/SettingsPage.js +21 -21
- package/dist/devportal/pages/SetupPage.js +183 -183
- package/dist/devportal/pages/SetupPage.js.map +1 -1
- package/dist/devportal/pages/StoreSubmissionPage.js +5 -5
- package/dist/devportal/pages/WebhookDetailPage.js +123 -123
- package/dist/devportal/pages/WebhookDetailPage.js.map +1 -1
- package/dist/devportal/pages/WebhooksPage.js +118 -118
- package/dist/devportal/pages/WebhooksPage.js.map +1 -1
- package/dist/devportal/utils/i18n.d.ts +9 -2
- package/dist/devportal/utils/i18n.d.ts.map +1 -1
- package/dist/devportal/utils/i18n.js +13 -10
- package/dist/devportal/utils/i18n.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/translations/en.d.ts +1251 -0
- package/dist/translations/en.d.ts.map +1 -0
- package/dist/translations/en.js +1235 -0
- package/dist/translations/en.js.map +1 -0
- package/package.json +1 -1
|
@@ -3,16 +3,16 @@ import { EmptyState as t } from "../components/EmptyState.js";
|
|
|
3
3
|
import { PageLayout as n, PageSection as r } from "../components/PageLayout.js";
|
|
4
4
|
import { nativeCopyText as i, nativeImpact as a, nativeNotify as o } from "../../utils/nativeBridge.js";
|
|
5
5
|
import { useMemo as s, useState as c } from "react";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { BookOpen as l, CalendarClock as u, Code2 as d, ExternalLink as f, FileCode as p, HelpCircle as m, KeyRound as h, Layers as g, Network as _, Plug as v, Rocket as y, Search as b, Webhook as x } from "lucide-react";
|
|
7
|
+
import { jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
8
|
+
import { useI18n as w } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
9
9
|
import { EmphasisPanel as T } from "@burdenoff/fe-libs/ui";
|
|
10
10
|
//#region src/devportal/pages/ResourcesPage.tsx
|
|
11
11
|
var E = "https://docs.burdenoff.com/developers", D = {
|
|
12
12
|
id: "sdks",
|
|
13
13
|
name: "SDKs",
|
|
14
14
|
description: "Official client libraries for building on the Burdenoff platform. See the SDKs documentation for supported languages and installation.",
|
|
15
|
-
icon: /* @__PURE__ */
|
|
15
|
+
icon: /* @__PURE__ */ S(d, { size: 24 }),
|
|
16
16
|
url: `${E}/build/sdks`,
|
|
17
17
|
installCommand: "npm install @burdenoff/sdk-node"
|
|
18
18
|
}, O = [
|
|
@@ -20,97 +20,97 @@ var E = "https://docs.burdenoff.com/developers", D = {
|
|
|
20
20
|
id: "graphql-api",
|
|
21
21
|
name: "GraphQL API",
|
|
22
22
|
description: "Query and mutate platform data through the federated GraphQL API.",
|
|
23
|
-
icon: /* @__PURE__ */
|
|
23
|
+
icon: /* @__PURE__ */ S(_, { size: 24 }),
|
|
24
24
|
url: `${E}/build/graphql-api`
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
id: "plugins",
|
|
28
28
|
name: "Plugins",
|
|
29
29
|
description: "Extend the platform with plugins that add new capabilities and surfaces.",
|
|
30
|
-
icon: /* @__PURE__ */
|
|
30
|
+
icon: /* @__PURE__ */ S(v, { size: 24 }),
|
|
31
31
|
url: `${E}/build/plugins`
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
id: "webhooks",
|
|
35
35
|
name: "Webhooks",
|
|
36
36
|
description: "Receive real-time platform events in your own services via webhooks.",
|
|
37
|
-
icon: /* @__PURE__ */
|
|
37
|
+
icon: /* @__PURE__ */ S(x, { size: 24 }),
|
|
38
38
|
url: `${E}/build/webhooks`
|
|
39
39
|
}
|
|
40
40
|
], k = [{
|
|
41
41
|
id: "scheduler",
|
|
42
42
|
name: "Scheduler & Workflows",
|
|
43
43
|
description: "Schedule jobs and orchestrate long-running workflows on the platform.",
|
|
44
|
-
icon: /* @__PURE__ */
|
|
44
|
+
icon: /* @__PURE__ */ S(u, { size: 24 }),
|
|
45
45
|
url: `${E}/extend/scheduler/`
|
|
46
46
|
}], A = [
|
|
47
47
|
{
|
|
48
48
|
id: "platform-overview",
|
|
49
49
|
name: "Platform Overview",
|
|
50
50
|
description: "Understand the building blocks of the Burdenoff developer platform.",
|
|
51
|
-
icon: /* @__PURE__ */
|
|
51
|
+
icon: /* @__PURE__ */ S(l, { size: 24 }),
|
|
52
52
|
url: `${E}/platform-overview`
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
id: "quick-start",
|
|
56
56
|
name: "Quick Start",
|
|
57
57
|
description: "Get up and running with the platform in a few steps.",
|
|
58
|
-
icon: /* @__PURE__ */
|
|
58
|
+
icon: /* @__PURE__ */ S(y, { size: 24 }),
|
|
59
59
|
url: `${E}/quick-start`
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
id: "authentication",
|
|
63
63
|
name: "Authentication",
|
|
64
64
|
description: "Learn how to authenticate requests and manage actor identity.",
|
|
65
|
-
icon: /* @__PURE__ */
|
|
65
|
+
icon: /* @__PURE__ */ S(h, { size: 24 }),
|
|
66
66
|
url: `${E}/authentication`
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
id: "relationship-graphs",
|
|
70
70
|
name: "Relationship Graphs",
|
|
71
71
|
description: "Model and traverse connected data with relationship graphs.",
|
|
72
|
-
icon: /* @__PURE__ */
|
|
72
|
+
icon: /* @__PURE__ */ S(g, { size: 24 }),
|
|
73
73
|
url: `${E}/concepts/relationship-graphs`
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
id: "examples",
|
|
77
77
|
name: "Examples",
|
|
78
78
|
description: "Browse worked examples covering common integration tasks.",
|
|
79
|
-
icon: /* @__PURE__ */
|
|
79
|
+
icon: /* @__PURE__ */ S(p, { size: 24 }),
|
|
80
80
|
url: `${E}/examples`
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
id: "faq",
|
|
84
84
|
name: "FAQ",
|
|
85
85
|
description: "Answers to frequently asked developer questions.",
|
|
86
|
-
icon: /* @__PURE__ */
|
|
86
|
+
icon: /* @__PURE__ */ S(m, { size: 24 }),
|
|
87
87
|
url: `${E}/faq`
|
|
88
88
|
}
|
|
89
89
|
], j = (e, t) => t ? `${e.name} ${e.description}`.toLowerCase().includes(t.toLowerCase()) : !0, M = ({ sdk: e, copyLabel: t, copiedLabel: n }) => {
|
|
90
90
|
let [r, s] = c(!1);
|
|
91
|
-
return /* @__PURE__ */
|
|
91
|
+
return /* @__PURE__ */ C("div", {
|
|
92
92
|
className: "flex flex-col rounded-card border border-border-seam bg-bg-surface p-5",
|
|
93
93
|
children: [
|
|
94
|
-
/* @__PURE__ */
|
|
94
|
+
/* @__PURE__ */ C("div", {
|
|
95
95
|
className: "flex items-center gap-3",
|
|
96
|
-
children: [/* @__PURE__ */
|
|
96
|
+
children: [/* @__PURE__ */ S("div", {
|
|
97
97
|
className: "rounded-lg bg-action-primary-bg/10 p-2.5 text-primary",
|
|
98
98
|
children: e.icon
|
|
99
|
-
}), /* @__PURE__ */
|
|
99
|
+
}), /* @__PURE__ */ S("div", { children: /* @__PURE__ */ S("h3", {
|
|
100
100
|
className: "font-semibold",
|
|
101
101
|
children: e.name
|
|
102
102
|
}) })]
|
|
103
103
|
}),
|
|
104
|
-
/* @__PURE__ */
|
|
104
|
+
/* @__PURE__ */ S("p", {
|
|
105
105
|
className: "mt-3 text-sm text-text-secondary",
|
|
106
106
|
children: e.description
|
|
107
107
|
}),
|
|
108
|
-
/* @__PURE__ */
|
|
108
|
+
/* @__PURE__ */ C("div", {
|
|
109
109
|
className: "mt-4 flex items-center gap-2 rounded-md bg-bg-sunken/50 p-2",
|
|
110
|
-
children: [/* @__PURE__ */
|
|
110
|
+
children: [/* @__PURE__ */ S("code", {
|
|
111
111
|
className: "flex-1 text-xs",
|
|
112
112
|
children: e.installCommand
|
|
113
|
-
}), /* @__PURE__ */
|
|
113
|
+
}), /* @__PURE__ */ S("button", {
|
|
114
114
|
type: "button",
|
|
115
115
|
onClick: async () => {
|
|
116
116
|
a("light"), await i(e.installCommand) ? (s(!0), o("success"), setTimeout(() => s(!1), 2e3)) : o("error");
|
|
@@ -119,14 +119,14 @@ var E = "https://docs.burdenoff.com/developers", D = {
|
|
|
119
119
|
children: r ? n : t
|
|
120
120
|
})]
|
|
121
121
|
}),
|
|
122
|
-
/* @__PURE__ */
|
|
122
|
+
/* @__PURE__ */ S("div", {
|
|
123
123
|
className: "mt-4 flex items-center justify-end text-sm",
|
|
124
|
-
children: /* @__PURE__ */
|
|
124
|
+
children: /* @__PURE__ */ C("a", {
|
|
125
125
|
href: e.url,
|
|
126
126
|
target: "_blank",
|
|
127
127
|
rel: "noopener noreferrer",
|
|
128
128
|
className: "flex items-center gap-1 text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
129
|
-
children: ["Docs ", /* @__PURE__ */
|
|
129
|
+
children: ["Docs ", /* @__PURE__ */ S(f, {
|
|
130
130
|
size: 12,
|
|
131
131
|
"aria-hidden": "true"
|
|
132
132
|
})]
|
|
@@ -134,70 +134,70 @@ var E = "https://docs.burdenoff.com/developers", D = {
|
|
|
134
134
|
})
|
|
135
135
|
]
|
|
136
136
|
});
|
|
137
|
-
}, N = ({ resource: e }) => /* @__PURE__ */
|
|
137
|
+
}, N = ({ resource: e }) => /* @__PURE__ */ C("a", {
|
|
138
138
|
href: e.url,
|
|
139
139
|
target: "_blank",
|
|
140
140
|
rel: "noopener noreferrer",
|
|
141
141
|
className: "group flex items-start gap-4 rounded-card border border-border-seam bg-bg-surface p-4 shadow-[var(--shadow-pop)] transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-[var(--shadow-pop-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
142
142
|
children: [
|
|
143
|
-
/* @__PURE__ */
|
|
143
|
+
/* @__PURE__ */ S("div", {
|
|
144
144
|
className: "rounded-lg bg-action-primary-bg/10 p-2.5 text-primary",
|
|
145
145
|
children: e.icon
|
|
146
146
|
}),
|
|
147
|
-
/* @__PURE__ */
|
|
147
|
+
/* @__PURE__ */ C("div", {
|
|
148
148
|
className: "flex-1",
|
|
149
|
-
children: [/* @__PURE__ */
|
|
149
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
150
150
|
className: "font-semibold group-hover:text-primary",
|
|
151
151
|
children: e.name
|
|
152
|
-
}), /* @__PURE__ */
|
|
152
|
+
}), /* @__PURE__ */ S("p", {
|
|
153
153
|
className: "mt-1 text-sm text-text-secondary",
|
|
154
154
|
children: e.description
|
|
155
155
|
})]
|
|
156
156
|
}),
|
|
157
|
-
/* @__PURE__ */
|
|
157
|
+
/* @__PURE__ */ S(f, {
|
|
158
158
|
size: 16,
|
|
159
159
|
"aria-hidden": "true",
|
|
160
160
|
className: "text-text-secondary opacity-0 transition-opacity group-hover:opacity-100"
|
|
161
161
|
})
|
|
162
162
|
]
|
|
163
163
|
}), P = () => {
|
|
164
|
-
let { t: i } =
|
|
164
|
+
let { t: i } = w(), a = (e, t) => {
|
|
165
165
|
let n = i(e);
|
|
166
166
|
return n === e ? t : n;
|
|
167
|
-
}, [o,
|
|
168
|
-
return /* @__PURE__ */
|
|
167
|
+
}, [o, l] = c(""), [u, d] = c("all"), f = u === "all" || u === "build", p = u === "all" || u === "learn", m = s(() => f && j(D, o), [f, o]), h = s(() => f ? O.filter((e) => j(e, o)) : [], [f, o]), g = s(() => f ? k.filter((e) => j(e, o)) : [], [f, o]), _ = s(() => p ? A.filter((e) => j(e, o)) : [], [p, o]), v = m || h.length > 0 || g.length > 0 || _.length > 0;
|
|
168
|
+
return /* @__PURE__ */ C(n, {
|
|
169
169
|
title: a("devportal.developerResources", "Developer Resources"),
|
|
170
170
|
description: a("devportal.resourcesDescription", "Documentation for building, extending, and learning the Burdenoff platform"),
|
|
171
171
|
purpose: a("devportal.resourcesPurpose", "A jumping-off point for building on the platform — SDKs, API references, integration guides, and learning material in one place. Start with the SDK for your language, then follow the build and learn paths."),
|
|
172
172
|
children: [
|
|
173
|
-
/* @__PURE__ */
|
|
173
|
+
/* @__PURE__ */ C("div", {
|
|
174
174
|
role: "status",
|
|
175
175
|
className: "mb-6 rounded-lg border border-status-warning-border bg-status-warning-bg p-4 text-sm text-status-warning-text",
|
|
176
|
-
children: [/* @__PURE__ */
|
|
176
|
+
children: [/* @__PURE__ */ S("strong", {
|
|
177
177
|
className: "font-semibold",
|
|
178
178
|
children: a("devportal.resources.comingSoon.title", "Coming soon")
|
|
179
|
-
}), /* @__PURE__ */
|
|
179
|
+
}), /* @__PURE__ */ S("span", {
|
|
180
180
|
className: "ml-2",
|
|
181
181
|
children: a("devportal.resources.comingSoon.description", "An in-product resources hub is on the way. For now, these cards link to the official Burdenoff developer documentation.")
|
|
182
182
|
})]
|
|
183
183
|
}),
|
|
184
|
-
/* @__PURE__ */
|
|
184
|
+
/* @__PURE__ */ C("div", {
|
|
185
185
|
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
186
|
-
children: [/* @__PURE__ */
|
|
186
|
+
children: [/* @__PURE__ */ C("div", {
|
|
187
187
|
className: "relative flex-1 max-w-md",
|
|
188
|
-
children: [/* @__PURE__ */
|
|
188
|
+
children: [/* @__PURE__ */ S(b, {
|
|
189
189
|
size: 16,
|
|
190
190
|
"aria-hidden": "true",
|
|
191
191
|
className: "absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary"
|
|
192
|
-
}), /* @__PURE__ */
|
|
192
|
+
}), /* @__PURE__ */ S("input", {
|
|
193
193
|
type: "text",
|
|
194
194
|
"aria-label": a("devportal.searchResources", "Search resources..."),
|
|
195
195
|
placeholder: a("devportal.searchResources", "Search resources..."),
|
|
196
196
|
value: o,
|
|
197
|
-
onChange: (e) =>
|
|
197
|
+
onChange: (e) => l(e.target.value),
|
|
198
198
|
className: "w-full rounded-md border bg-bg-surface pl-9 pr-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary"
|
|
199
199
|
})]
|
|
200
|
-
}), /* @__PURE__ */
|
|
200
|
+
}), /* @__PURE__ */ S("div", {
|
|
201
201
|
role: "group",
|
|
202
202
|
"aria-label": a("devportal.filterResources", "Filter resources"),
|
|
203
203
|
className: "flex items-center gap-1 rounded-md border p-1",
|
|
@@ -214,52 +214,52 @@ var E = "https://docs.burdenoff.com/developers", D = {
|
|
|
214
214
|
id: "learn",
|
|
215
215
|
label: a("devportal.filterLearn", "Learn")
|
|
216
216
|
}
|
|
217
|
-
].map((t) => /* @__PURE__ */
|
|
217
|
+
].map((t) => /* @__PURE__ */ S("button", {
|
|
218
218
|
type: "button",
|
|
219
|
-
"aria-pressed":
|
|
220
|
-
onClick: () =>
|
|
221
|
-
className: e("rounded px-3 py-1.5 text-sm font-medium transition-colors",
|
|
219
|
+
"aria-pressed": u === t.id,
|
|
220
|
+
onClick: () => d(t.id),
|
|
221
|
+
className: e("rounded px-3 py-1.5 text-sm font-medium transition-colors", u === t.id ? "bg-action-primary-bg text-action-primary-text" : "hover:bg-bg-sunken"),
|
|
222
222
|
children: t.label
|
|
223
223
|
}, t.id))
|
|
224
224
|
})]
|
|
225
225
|
}),
|
|
226
|
-
|
|
226
|
+
m && /* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(r, {
|
|
227
227
|
title: a("devportal.sdks", "SDKs"),
|
|
228
228
|
description: a("devportal.sdksDescription", "Client libraries for building on the platform"),
|
|
229
|
-
children: /* @__PURE__ */
|
|
229
|
+
children: /* @__PURE__ */ S("div", {
|
|
230
230
|
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
231
|
-
children: /* @__PURE__ */
|
|
231
|
+
children: /* @__PURE__ */ S(M, {
|
|
232
232
|
sdk: D,
|
|
233
233
|
copyLabel: a("devportal.copy", "Copy"),
|
|
234
234
|
copiedLabel: a("devportal.copied", "Copied!")
|
|
235
235
|
})
|
|
236
236
|
})
|
|
237
237
|
}) }),
|
|
238
|
-
|
|
238
|
+
h.length > 0 && /* @__PURE__ */ S(r, {
|
|
239
239
|
title: a("devportal.build", "Build"),
|
|
240
240
|
description: a("devportal.buildDescription", "APIs and integration surfaces"),
|
|
241
|
-
children: /* @__PURE__ */
|
|
241
|
+
children: /* @__PURE__ */ S("div", {
|
|
242
242
|
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
243
|
-
children:
|
|
243
|
+
children: h.map((e) => /* @__PURE__ */ S(N, { resource: e }, e.id))
|
|
244
244
|
})
|
|
245
245
|
}),
|
|
246
|
-
|
|
246
|
+
g.length > 0 && /* @__PURE__ */ S(r, {
|
|
247
247
|
title: a("devportal.extend", "Extend"),
|
|
248
248
|
description: a("devportal.extendDescription", "Schedule jobs and orchestrate workflows"),
|
|
249
|
-
children: /* @__PURE__ */
|
|
249
|
+
children: /* @__PURE__ */ S("div", {
|
|
250
250
|
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
251
|
-
children:
|
|
251
|
+
children: g.map((e) => /* @__PURE__ */ S(N, { resource: e }, e.id))
|
|
252
252
|
})
|
|
253
253
|
}),
|
|
254
|
-
|
|
254
|
+
_.length > 0 && /* @__PURE__ */ S(r, {
|
|
255
255
|
title: a("devportal.learn", "Learn"),
|
|
256
256
|
description: a("devportal.learnDescription", "Guides and concepts to get you started"),
|
|
257
|
-
children: /* @__PURE__ */
|
|
257
|
+
children: /* @__PURE__ */ S("div", {
|
|
258
258
|
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
259
|
-
children:
|
|
259
|
+
children: _.map((e) => /* @__PURE__ */ S(N, { resource: e }, e.id))
|
|
260
260
|
})
|
|
261
261
|
}),
|
|
262
|
-
!
|
|
262
|
+
!v && /* @__PURE__ */ S(t, {
|
|
263
263
|
illustration: "empty-search",
|
|
264
264
|
title: a("devportal.noResourcesFoundTitle", "No matching resources"),
|
|
265
265
|
description: a("devportal.noResourcesFound", "No resources match your search.")
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { useDevportal as e } from "../providers/DevportalProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { useTr as t } from "../utils/i18n.js";
|
|
3
|
+
import { cn as n } from "../utils/cn.js";
|
|
4
|
+
import { EmptyState as r } from "../components/EmptyState.js";
|
|
4
5
|
import { useGetBillingAccountsByOrgQuery as ee, useGetMyOrganizationsQuery as te, useGetRevenueDashboardDataQuery as ne, useLinkDevOrgBillingAccountMutation as re } from "../../generated/global-operations.js";
|
|
5
|
-
import { getErrorMessage as
|
|
6
|
-
import { PageLayout as
|
|
7
|
-
import { StatusBadge as
|
|
8
|
-
import { StatCard as
|
|
9
|
-
import { DataTable as
|
|
6
|
+
import { getErrorMessage as i } from "../hooks/useGraphQL.js";
|
|
7
|
+
import { PageLayout as a, PageSection as o } from "../components/PageLayout.js";
|
|
8
|
+
import { StatusBadge as s } from "../components/StatusBadge.js";
|
|
9
|
+
import { StatCard as c, StatCardGrid as ie } from "../components/StatCard.js";
|
|
10
|
+
import { DataTable as l } from "../components/DataTable.js";
|
|
10
11
|
import "../hooks/index.js";
|
|
11
|
-
import { Tooltip as
|
|
12
|
-
import { ResponsiveContainer as
|
|
12
|
+
import { Tooltip as u } from "../../node_modules/recharts/es6/component/Tooltip.js";
|
|
13
|
+
import { ResponsiveContainer as d } from "../../node_modules/recharts/es6/component/ResponsiveContainer.js";
|
|
13
14
|
import { Bar as ae } from "../../node_modules/recharts/es6/cartesian/Bar.js";
|
|
14
|
-
import { CartesianGrid as
|
|
15
|
-
import { Line as
|
|
16
|
-
import { XAxis as
|
|
17
|
-
import { YAxis as
|
|
18
|
-
import { LineChart as
|
|
19
|
-
import { BarChart as
|
|
20
|
-
import { useTr as se } from "../utils/i18n.js";
|
|
15
|
+
import { CartesianGrid as f } from "../../node_modules/recharts/es6/cartesian/CartesianGrid.js";
|
|
16
|
+
import { Line as p } from "../../node_modules/recharts/es6/cartesian/Line.js";
|
|
17
|
+
import { XAxis as m } from "../../node_modules/recharts/es6/cartesian/XAxis.js";
|
|
18
|
+
import { YAxis as h } from "../../node_modules/recharts/es6/cartesian/YAxis.js";
|
|
19
|
+
import { LineChart as oe } from "../../node_modules/recharts/es6/chart/LineChart.js";
|
|
20
|
+
import { BarChart as se } from "../../node_modules/recharts/es6/chart/BarChart.js";
|
|
21
21
|
import { useMemo as g, useState as _ } from "react";
|
|
22
22
|
import { AlertCircle as v, ArrowDownToLine as ce, Building2 as y, Check as b, CreditCard as x, DollarSign as S, Link2 as C, Loader2 as w, Wallet as le } from "lucide-react";
|
|
23
23
|
import { useSearchParams as T } from "react-router";
|
|
@@ -33,7 +33,7 @@ var k = {
|
|
|
33
33
|
"90d": 90,
|
|
34
34
|
"12m": 365
|
|
35
35
|
}, A = () => {
|
|
36
|
-
let A =
|
|
36
|
+
let A = t(), { activeOrgId: j, tenantId: pe } = e(), [M, me] = _("90d"), [N, P] = _(!1), [F, I] = _(null), [he] = re(), [L, R] = _(!1), [z, B] = _(null), [ge] = T(), V = g(() => /* @__PURE__ */ new Date(), []), { data: _e, loading: H } = ee({
|
|
37
37
|
fetchPolicy: "cache-and-network",
|
|
38
38
|
context: { headers: { "x-org-id": pe ?? "" } }
|
|
39
39
|
}), ve = g(() => {
|
|
@@ -82,36 +82,36 @@ var k = {
|
|
|
82
82
|
refunds: e.refunds,
|
|
83
83
|
salesCount: e.salesCount
|
|
84
84
|
}));
|
|
85
|
-
return ye && !U ? /* @__PURE__ */ E(
|
|
85
|
+
return ye && !U ? /* @__PURE__ */ E(a, {
|
|
86
86
|
title: A("devportal.revenue.title", "Revenue"),
|
|
87
87
|
description: A("devportal.revenue.description", "Track real revenue, sales, and payout activity for your developer organizations"),
|
|
88
88
|
children: /* @__PURE__ */ E("div", {
|
|
89
89
|
className: "flex items-center justify-center py-16 text-text-secondary",
|
|
90
90
|
children: /* @__PURE__ */ E(w, { className: "h-8 w-8 animate-spin" })
|
|
91
91
|
})
|
|
92
|
-
}) : W ? /* @__PURE__ */ E(
|
|
92
|
+
}) : W ? /* @__PURE__ */ E(a, {
|
|
93
93
|
title: A("devportal.revenue.title", "Revenue"),
|
|
94
94
|
description: A("devportal.revenue.description", "Track real revenue, sales, and payout activity for your developer organizations"),
|
|
95
|
-
children: /* @__PURE__ */ E(
|
|
95
|
+
children: /* @__PURE__ */ E(r, {
|
|
96
96
|
icon: /* @__PURE__ */ E(v, {
|
|
97
97
|
size: 32,
|
|
98
98
|
className: "text-status-error-text"
|
|
99
99
|
}),
|
|
100
100
|
title: A("devportal.revenue.errorLoadOrgs", "Unable to load organizations"),
|
|
101
|
-
description:
|
|
101
|
+
description: i(W)
|
|
102
102
|
})
|
|
103
|
-
}) : j ? K ? /* @__PURE__ */ E(
|
|
103
|
+
}) : j ? K ? /* @__PURE__ */ E(a, {
|
|
104
104
|
title: A("devportal.revenue.title", "Revenue"),
|
|
105
105
|
description: A("devportal.revenue.description", "Track real revenue, sales, and payout activity for your developer organizations"),
|
|
106
|
-
children: /* @__PURE__ */ E(
|
|
106
|
+
children: /* @__PURE__ */ E(r, {
|
|
107
107
|
icon: /* @__PURE__ */ E(v, {
|
|
108
108
|
size: 32,
|
|
109
109
|
className: "text-status-error-text"
|
|
110
110
|
}),
|
|
111
111
|
title: A("devportal.revenue.errorLoadData", "Unable to load revenue data"),
|
|
112
|
-
description:
|
|
112
|
+
description: i(K)
|
|
113
113
|
})
|
|
114
|
-
}) : /* @__PURE__ */ D(
|
|
114
|
+
}) : /* @__PURE__ */ D(a, {
|
|
115
115
|
title: A("devportal.revenue.title", "Revenue"),
|
|
116
116
|
description: q ? `${A("devportal.revenue.financialPerformanceFor", "Financial performance for")} ${q.name}` : A("devportal.revenue.shortDescription", "Track revenue, sales, and payouts"),
|
|
117
117
|
purpose: A("devportal.revenue.purpose", "Revenue tracks the money your paid apps earn — gross sales, platform fees, and what gets paid out to your organization. Link a billing account, then use this to reconcile payouts and watch growth across time ranges."),
|
|
@@ -194,10 +194,10 @@ var k = {
|
|
|
194
194
|
children: J.map((e) => /* @__PURE__ */ D("button", {
|
|
195
195
|
type: "button",
|
|
196
196
|
onClick: () => B(e.id ?? null),
|
|
197
|
-
className:
|
|
197
|
+
className: n("flex w-full items-center gap-3 rounded-md border px-3 py-2.5 text-sm text-left transition-colors", z === e.id ? "border-primary bg-action-primary-bg/5 text-text-primary" : "border-border-subtle hover:bg-accent text-text-primary"),
|
|
198
198
|
children: [/* @__PURE__ */ E(b, {
|
|
199
199
|
size: 14,
|
|
200
|
-
className:
|
|
200
|
+
className: n("flex-shrink-0", z === e.id ? "opacity-100 text-primary" : "opacity-0")
|
|
201
201
|
}), /* @__PURE__ */ D("div", {
|
|
202
202
|
className: "flex-1 min-w-0",
|
|
203
203
|
children: [/* @__PURE__ */ E("p", {
|
|
@@ -273,10 +273,10 @@ var k = {
|
|
|
273
273
|
children: J.map((e) => /* @__PURE__ */ D("button", {
|
|
274
274
|
type: "button",
|
|
275
275
|
onClick: () => B(e.id ?? null),
|
|
276
|
-
className:
|
|
276
|
+
className: n("flex w-full items-center gap-3 rounded-md border px-3 py-2.5 text-sm text-left transition-colors", z === e.id ? "border-primary bg-action-primary-bg/5 text-text-primary" : "border-border-subtle hover:bg-accent text-text-primary"),
|
|
277
277
|
children: [/* @__PURE__ */ E(b, {
|
|
278
278
|
size: 14,
|
|
279
|
-
className:
|
|
279
|
+
className: n("flex-shrink-0", z === e.id ? "opacity-100 text-primary" : "opacity-0")
|
|
280
280
|
}), /* @__PURE__ */ D("div", {
|
|
281
281
|
className: "flex-1 min-w-0",
|
|
282
282
|
children: [/* @__PURE__ */ E("p", {
|
|
@@ -325,23 +325,23 @@ var k = {
|
|
|
325
325
|
children: /* @__PURE__ */ D(ie, {
|
|
326
326
|
columns: 4,
|
|
327
327
|
children: [
|
|
328
|
-
/* @__PURE__ */ E(
|
|
328
|
+
/* @__PURE__ */ E(c, {
|
|
329
329
|
title: A("devportal.revenue.grossRevenue", "Gross Revenue"),
|
|
330
330
|
value: `$${Q.totalGrossRevenue.toLocaleString()}`,
|
|
331
331
|
icon: /* @__PURE__ */ E(S, { size: 20 })
|
|
332
332
|
}),
|
|
333
|
-
/* @__PURE__ */ E(
|
|
333
|
+
/* @__PURE__ */ E(c, {
|
|
334
334
|
title: A("devportal.revenue.netRevenue", "Net Revenue"),
|
|
335
335
|
value: `$${Q.totalNetRevenue.toLocaleString()}`,
|
|
336
336
|
icon: /* @__PURE__ */ E(le, { size: 20 })
|
|
337
337
|
}),
|
|
338
|
-
/* @__PURE__ */ E(
|
|
338
|
+
/* @__PURE__ */ E(c, {
|
|
339
339
|
title: A("devportal.revenue.pendingBalance", "Pending Balance"),
|
|
340
340
|
value: `$${Q.pendingBalance.toLocaleString()}`,
|
|
341
341
|
icon: /* @__PURE__ */ E(x, { size: 20 }),
|
|
342
342
|
description: Q.nextPayoutDate ? `${A("devportal.revenue.nextPayout", "Next payout")} ${new Date(Q.nextPayoutDate).toLocaleDateString()}` : A("devportal.revenue.noPayoutScheduled", "No payout scheduled")
|
|
343
343
|
}),
|
|
344
|
-
/* @__PURE__ */ E(
|
|
344
|
+
/* @__PURE__ */ E(c, {
|
|
345
345
|
title: A("devportal.revenue.platformFees", "Platform Fees"),
|
|
346
346
|
value: `$${Q.totalPlatformFees.toLocaleString()}`,
|
|
347
347
|
icon: /* @__PURE__ */ E(ce, { size: 20 }),
|
|
@@ -352,43 +352,43 @@ var k = {
|
|
|
352
352
|
}),
|
|
353
353
|
/* @__PURE__ */ D("div", {
|
|
354
354
|
className: "grid gap-6 xl:grid-cols-2",
|
|
355
|
-
children: [/* @__PURE__ */ E(
|
|
355
|
+
children: [/* @__PURE__ */ E(o, {
|
|
356
356
|
title: A("devportal.revenue.revenueTrend", "Revenue trend"),
|
|
357
357
|
children: /* @__PURE__ */ E(O, {
|
|
358
358
|
treatment: "insight",
|
|
359
359
|
className: "p-4",
|
|
360
|
-
children: $.length > 0 ? /* @__PURE__ */ E(
|
|
360
|
+
children: $.length > 0 ? /* @__PURE__ */ E(d, {
|
|
361
361
|
width: "100%",
|
|
362
362
|
height: 300,
|
|
363
|
-
children: /* @__PURE__ */ D(
|
|
363
|
+
children: /* @__PURE__ */ D(oe, {
|
|
364
364
|
data: $,
|
|
365
365
|
children: [
|
|
366
|
-
/* @__PURE__ */ E(
|
|
366
|
+
/* @__PURE__ */ E(f, {
|
|
367
367
|
strokeDasharray: "3 3",
|
|
368
368
|
stroke: "var(--color-chart-grid)"
|
|
369
369
|
}),
|
|
370
|
-
/* @__PURE__ */ E(
|
|
370
|
+
/* @__PURE__ */ E(m, {
|
|
371
371
|
dataKey: "date",
|
|
372
372
|
stroke: "var(--color-chart-axis)",
|
|
373
373
|
fontSize: 12
|
|
374
374
|
}),
|
|
375
|
-
/* @__PURE__ */ E(
|
|
375
|
+
/* @__PURE__ */ E(h, {
|
|
376
376
|
stroke: "var(--color-chart-axis)",
|
|
377
377
|
fontSize: 12
|
|
378
378
|
}),
|
|
379
|
-
/* @__PURE__ */ E(
|
|
379
|
+
/* @__PURE__ */ E(u, { contentStyle: {
|
|
380
380
|
backgroundColor: "var(--color-card)",
|
|
381
381
|
border: "1px solid var(--color-border-default)",
|
|
382
382
|
borderRadius: 12
|
|
383
383
|
} }),
|
|
384
|
-
/* @__PURE__ */ E(
|
|
384
|
+
/* @__PURE__ */ E(p, {
|
|
385
385
|
type: "monotone",
|
|
386
386
|
dataKey: "grossRevenue",
|
|
387
387
|
stroke: k.primary,
|
|
388
388
|
strokeWidth: 2,
|
|
389
389
|
dot: !1
|
|
390
390
|
}),
|
|
391
|
-
/* @__PURE__ */ E(
|
|
391
|
+
/* @__PURE__ */ E(p, {
|
|
392
392
|
type: "monotone",
|
|
393
393
|
dataKey: "netRevenue",
|
|
394
394
|
stroke: k.secondary,
|
|
@@ -408,7 +408,7 @@ var k = {
|
|
|
408
408
|
})]
|
|
409
409
|
})
|
|
410
410
|
})
|
|
411
|
-
}), /* @__PURE__ */ E(
|
|
411
|
+
}), /* @__PURE__ */ E(o, {
|
|
412
412
|
title: A("devportal.revenue.topApps", "Top applications by revenue"),
|
|
413
413
|
children: Q.topApps.length > 0 ? /* @__PURE__ */ E("div", {
|
|
414
414
|
className: "space-y-2",
|
|
@@ -443,7 +443,7 @@ var k = {
|
|
|
443
443
|
})]
|
|
444
444
|
})
|
|
445
445
|
}, e.applicationId))
|
|
446
|
-
}) : /* @__PURE__ */ E(
|
|
446
|
+
}) : /* @__PURE__ */ E(r, {
|
|
447
447
|
illustration: "empty-data",
|
|
448
448
|
icon: /* @__PURE__ */ E(y, { size: 24 }),
|
|
449
449
|
title: A("devportal.revenue.noLeadersTitle", "No revenue leaders yet"),
|
|
@@ -451,31 +451,31 @@ var k = {
|
|
|
451
451
|
})
|
|
452
452
|
})]
|
|
453
453
|
}),
|
|
454
|
-
/* @__PURE__ */ E(
|
|
454
|
+
/* @__PURE__ */ E(o, {
|
|
455
455
|
title: A("devportal.revenue.salesVolume", "Sales volume"),
|
|
456
456
|
children: /* @__PURE__ */ E(O, {
|
|
457
457
|
treatment: "insight",
|
|
458
458
|
className: "p-4",
|
|
459
|
-
children: $.length > 0 ? /* @__PURE__ */ E(
|
|
459
|
+
children: $.length > 0 ? /* @__PURE__ */ E(d, {
|
|
460
460
|
width: "100%",
|
|
461
461
|
height: 280,
|
|
462
|
-
children: /* @__PURE__ */ D(
|
|
462
|
+
children: /* @__PURE__ */ D(se, {
|
|
463
463
|
data: $,
|
|
464
464
|
children: [
|
|
465
|
-
/* @__PURE__ */ E(
|
|
465
|
+
/* @__PURE__ */ E(f, {
|
|
466
466
|
strokeDasharray: "3 3",
|
|
467
467
|
stroke: "var(--color-chart-grid)"
|
|
468
468
|
}),
|
|
469
|
-
/* @__PURE__ */ E(
|
|
469
|
+
/* @__PURE__ */ E(m, {
|
|
470
470
|
dataKey: "date",
|
|
471
471
|
stroke: "var(--color-chart-axis)",
|
|
472
472
|
fontSize: 12
|
|
473
473
|
}),
|
|
474
|
-
/* @__PURE__ */ E(
|
|
474
|
+
/* @__PURE__ */ E(h, {
|
|
475
475
|
stroke: "var(--color-chart-axis)",
|
|
476
476
|
fontSize: 12
|
|
477
477
|
}),
|
|
478
|
-
/* @__PURE__ */ E(
|
|
478
|
+
/* @__PURE__ */ E(u, { contentStyle: {
|
|
479
479
|
backgroundColor: "var(--color-card)",
|
|
480
480
|
border: "1px solid var(--color-border-default)",
|
|
481
481
|
borderRadius: 12
|
|
@@ -506,9 +506,9 @@ var k = {
|
|
|
506
506
|
}),
|
|
507
507
|
/* @__PURE__ */ D("div", {
|
|
508
508
|
className: "grid gap-6 xl:grid-cols-2",
|
|
509
|
-
children: [/* @__PURE__ */ E(
|
|
509
|
+
children: [/* @__PURE__ */ E(o, {
|
|
510
510
|
title: A("devportal.revenue.recentSales", "Recent sales"),
|
|
511
|
-
children: /* @__PURE__ */ E(
|
|
511
|
+
children: /* @__PURE__ */ E(l, {
|
|
512
512
|
data: Se,
|
|
513
513
|
keyField: "id",
|
|
514
514
|
columns: [
|
|
@@ -530,16 +530,16 @@ var k = {
|
|
|
530
530
|
{
|
|
531
531
|
key: "status",
|
|
532
532
|
header: A("devportal.revenue.status", "Status"),
|
|
533
|
-
render: (e) => /* @__PURE__ */ E(
|
|
533
|
+
render: (e) => /* @__PURE__ */ E(s, {
|
|
534
534
|
status: e.status,
|
|
535
535
|
type: "app"
|
|
536
536
|
})
|
|
537
537
|
}
|
|
538
538
|
]
|
|
539
539
|
})
|
|
540
|
-
}), /* @__PURE__ */ E(
|
|
540
|
+
}), /* @__PURE__ */ E(o, {
|
|
541
541
|
title: A("devportal.revenue.payoutHistory", "Payout history"),
|
|
542
|
-
children: /* @__PURE__ */ E(
|
|
542
|
+
children: /* @__PURE__ */ E(l, {
|
|
543
543
|
data: Ce,
|
|
544
544
|
keyField: "id",
|
|
545
545
|
columns: [
|
|
@@ -556,7 +556,7 @@ var k = {
|
|
|
556
556
|
{
|
|
557
557
|
key: "status",
|
|
558
558
|
header: A("devportal.revenue.status", "Status"),
|
|
559
|
-
render: (e) => /* @__PURE__ */ E(
|
|
559
|
+
render: (e) => /* @__PURE__ */ E(s, {
|
|
560
560
|
status: e.status,
|
|
561
561
|
type: "app"
|
|
562
562
|
})
|
|
@@ -565,17 +565,17 @@ var k = {
|
|
|
565
565
|
})
|
|
566
566
|
})]
|
|
567
567
|
})
|
|
568
|
-
] }) : /* @__PURE__ */ E(
|
|
568
|
+
] }) : /* @__PURE__ */ E(r, {
|
|
569
569
|
illustration: "empty-data",
|
|
570
570
|
icon: /* @__PURE__ */ E(S, { size: 32 }),
|
|
571
571
|
title: A("devportal.revenue.noDataTitle", "No revenue data yet"),
|
|
572
572
|
description: A("devportal.revenue.noDataDescription", "Revenue metrics will appear after this organization starts recording marketplace sales.")
|
|
573
573
|
})
|
|
574
574
|
]
|
|
575
|
-
}) : /* @__PURE__ */ E(
|
|
575
|
+
}) : /* @__PURE__ */ E(a, {
|
|
576
576
|
title: A("devportal.revenue.title", "Revenue"),
|
|
577
577
|
description: A("devportal.revenue.description", "Track real revenue, sales, and payout activity for your developer organizations"),
|
|
578
|
-
children: /* @__PURE__ */ E(
|
|
578
|
+
children: /* @__PURE__ */ E(r, {
|
|
579
579
|
illustration: "empty-people",
|
|
580
580
|
icon: /* @__PURE__ */ E(y, {
|
|
581
581
|
size: 32,
|