@tutti-os/commerce 0.0.233 → 0.0.234
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/README.md +6 -1
- package/dist/react/index.d.ts +21 -1
- package/dist/react/index.js +205 -55
- package/dist/react/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -9,7 +9,11 @@ provide normalized data, labels, links, and callbacks.
|
|
|
9
9
|
|
|
10
10
|
The Account shell (avatar, popover, sign-in/out, settings, and UID copy)
|
|
11
11
|
belongs to each Host. `CommerceMenuContent` renders only membership, credits,
|
|
12
|
-
and account-center rows.
|
|
12
|
+
and account-center rows. `AgentConfigCommerceContent` is the compact account,
|
|
13
|
+
clickable credits balance with inline refresh, membership, and account-center
|
|
14
|
+
presentation for an Agent config menu. Clicking Credits opens the Host-provided
|
|
15
|
+
`usageUrl`. The Host still supplies the account name, state, labels, refresh
|
|
16
|
+
command, and navigation.
|
|
13
17
|
|
|
14
18
|
Host actions may be asynchronous. `CommerceMenuContent` catches rejected
|
|
15
19
|
external-link actions and forwards them to the optional `onActionError`
|
|
@@ -21,6 +25,7 @@ import {
|
|
|
21
25
|
resolveMembershipAction
|
|
22
26
|
} from "@tutti-os/commerce";
|
|
23
27
|
import {
|
|
28
|
+
AgentConfigCommerceContent,
|
|
24
29
|
CommerceMenuContent,
|
|
25
30
|
MembershipTierIcon
|
|
26
31
|
} from "@tutti-os/commerce/react";
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
import { a as CommerceMenuState, R as RegistrationCreditsToastState } from '../contracts-I0M2ZTJA.js';
|
|
2
2
|
import * as react from 'react';
|
|
3
3
|
|
|
4
|
+
interface AgentConfigCommerceLabels {
|
|
5
|
+
account: string;
|
|
6
|
+
membership: string;
|
|
7
|
+
creditsBalance: string;
|
|
8
|
+
refresh: string;
|
|
9
|
+
refreshing: string;
|
|
10
|
+
freeMembership: string;
|
|
11
|
+
accountCenter: string;
|
|
12
|
+
loading: string;
|
|
13
|
+
unavailable: string;
|
|
14
|
+
dataUnavailable: string;
|
|
15
|
+
}
|
|
16
|
+
interface AgentConfigCommerceContentProps {
|
|
17
|
+
accountName: string | null;
|
|
18
|
+
state: CommerceMenuState;
|
|
19
|
+
labels: AgentConfigCommerceLabels;
|
|
20
|
+
onRefresh(): void;
|
|
21
|
+
}
|
|
22
|
+
declare function AgentConfigCommerceContent({ accountName, state, labels, onRefresh }: AgentConfigCommerceContentProps): React.JSX.Element;
|
|
23
|
+
|
|
4
24
|
interface CommerceMenuLabels {
|
|
5
25
|
member: string;
|
|
6
26
|
upgradeMembership: string;
|
|
@@ -43,4 +63,4 @@ interface RegistrationCreditsToastProps {
|
|
|
43
63
|
}
|
|
44
64
|
declare const RegistrationCreditsToast: react.NamedExoticComponent<RegistrationCreditsToastProps>;
|
|
45
65
|
|
|
46
|
-
export { CommerceMenuContent, type CommerceMenuContentProps, type CommerceMenuLabels, MembershipBadge, type MembershipBadgeProps, MembershipTierIcon, type MembershipTierIconProps, RegistrationCreditsToast, type RegistrationCreditsToastLabels, type RegistrationCreditsToastProps };
|
|
66
|
+
export { AgentConfigCommerceContent, type AgentConfigCommerceContentProps, type AgentConfigCommerceLabels, CommerceMenuContent, type CommerceMenuContentProps, type CommerceMenuLabels, MembershipBadge, type MembershipBadgeProps, MembershipTierIcon, type MembershipTierIconProps, RegistrationCreditsToast, type RegistrationCreditsToastLabels, type RegistrationCreditsToastProps };
|
package/dist/react/index.js
CHANGED
|
@@ -3,21 +3,29 @@ import {
|
|
|
3
3
|
resolveMembershipTierVisual
|
|
4
4
|
} from "../chunk-L6YQE3QG.js";
|
|
5
5
|
|
|
6
|
-
// src/react/
|
|
7
|
-
import { useCallback } from "react";
|
|
6
|
+
// src/react/AgentConfigCommerceContent.tsx
|
|
8
7
|
import {
|
|
9
8
|
BillingIcon,
|
|
10
9
|
CreditsIcon,
|
|
11
10
|
LaunchIcon,
|
|
11
|
+
RefreshIcon,
|
|
12
12
|
UserLinedIcon
|
|
13
13
|
} from "@tutti-os/ui-system";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
|
|
15
|
+
// src/react/commerceMenuPresentation.ts
|
|
16
|
+
import { useCallback } from "react";
|
|
17
|
+
function resolveCommerceMembershipActionLabel(state, labels) {
|
|
18
|
+
switch (resolveMembershipAction(state.membershipAccess)) {
|
|
19
|
+
case "upgrade-membership":
|
|
20
|
+
return labels.upgradeMembership;
|
|
21
|
+
case "recharge-credits":
|
|
22
|
+
return labels.rechargeCredits;
|
|
23
|
+
case "view-credit-plans":
|
|
24
|
+
return labels.viewCreditPlans;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function useCommerceOpenExternal(state) {
|
|
28
|
+
return useCallback(
|
|
21
29
|
(url) => {
|
|
22
30
|
if (!url.trim()) {
|
|
23
31
|
return;
|
|
@@ -35,9 +43,160 @@ function CommerceMenuContent({
|
|
|
35
43
|
},
|
|
36
44
|
[state]
|
|
37
45
|
);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// src/react/AgentConfigCommerceContent.tsx
|
|
49
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
50
|
+
var menuItemBaseClassName = "nodrag flex h-7 items-center gap-2 rounded-[6px] text-[13px] text-[var(--text-primary)] transition-colors hover:bg-[var(--transparency-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] disabled:cursor-not-allowed disabled:text-[var(--text-disabled)] disabled:hover:bg-transparent [-webkit-app-region:no-drag]";
|
|
51
|
+
var menuItemClassName = `${menuItemBaseClassName} w-full px-2`;
|
|
52
|
+
function AgentConfigCommerceContent({
|
|
53
|
+
accountName,
|
|
54
|
+
state,
|
|
55
|
+
labels,
|
|
56
|
+
onRefresh
|
|
57
|
+
}) {
|
|
58
|
+
const openExternal = useCommerceOpenExternal(state);
|
|
59
|
+
const accountNameLabel = accountName?.trim() || (state.loading ? labels.loading : labels.unavailable);
|
|
60
|
+
const creditsLabel = state.loading && !state.creditsLabel ? labels.loading : state.creditsLabel ?? labels.unavailable;
|
|
61
|
+
const membershipLabel = state.membershipLabel.trim() || (state.membershipAccess === "free" ? labels.freeMembership : state.loading ? labels.loading : labels.unavailable);
|
|
62
|
+
return /* @__PURE__ */ jsxs(
|
|
63
|
+
"div",
|
|
64
|
+
{
|
|
65
|
+
className: "flex min-w-0 flex-col gap-1",
|
|
66
|
+
"data-testid": "agent-config-commerce-content",
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1 p-2", children: [
|
|
69
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
70
|
+
/* @__PURE__ */ jsx(UserLinedIcon, { "aria-hidden": "true", size: 16 }),
|
|
71
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-[13px] font-semibold leading-4", children: labels.account })
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ jsx("span", { className: "truncate pl-6 text-[13px] leading-5 text-[var(--text-secondary)]", children: accountNameLabel })
|
|
74
|
+
] }),
|
|
75
|
+
/* @__PURE__ */ jsx("div", { className: "px-2", children: /* @__PURE__ */ jsx("span", { className: "block h-px bg-[var(--border-1)]" }) }),
|
|
76
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center", children: [
|
|
77
|
+
/* @__PURE__ */ jsxs(
|
|
78
|
+
"button",
|
|
79
|
+
{
|
|
80
|
+
type: "button",
|
|
81
|
+
className: `${menuItemBaseClassName} min-w-0 flex-1 px-2`,
|
|
82
|
+
disabled: !state.links.usageUrl.trim(),
|
|
83
|
+
"aria-label": `${labels.creditsBalance} ${creditsLabel}`,
|
|
84
|
+
onClick: () => openExternal(state.links.usageUrl),
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ jsx(CreditsIcon, { "aria-hidden": "true", size: 16 }),
|
|
87
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.creditsBalance }),
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
"span",
|
|
90
|
+
{
|
|
91
|
+
className: "max-w-[120px] truncate text-[var(--text-secondary)] tabular-nums",
|
|
92
|
+
"data-testid": "agent-config-commerce-credits",
|
|
93
|
+
"aria-live": "polite",
|
|
94
|
+
children: creditsLabel
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
),
|
|
100
|
+
/* @__PURE__ */ jsxs(
|
|
101
|
+
"button",
|
|
102
|
+
{
|
|
103
|
+
type: "button",
|
|
104
|
+
className: `${menuItemBaseClassName} shrink-0 px-2`,
|
|
105
|
+
"data-testid": "agent-config-commerce-refresh",
|
|
106
|
+
disabled: state.loading,
|
|
107
|
+
"aria-label": state.loading ? labels.refreshing : labels.refresh,
|
|
108
|
+
onClick: onRefresh,
|
|
109
|
+
children: [
|
|
110
|
+
/* @__PURE__ */ jsx(
|
|
111
|
+
RefreshIcon,
|
|
112
|
+
{
|
|
113
|
+
"aria-hidden": "true",
|
|
114
|
+
className: state.loading ? "motion-safe:animate-spin" : void 0,
|
|
115
|
+
size: 14
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
/* @__PURE__ */ jsx("span", { children: state.loading ? labels.refreshing : labels.refresh })
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
] }),
|
|
123
|
+
/* @__PURE__ */ jsxs(
|
|
124
|
+
"button",
|
|
125
|
+
{
|
|
126
|
+
type: "button",
|
|
127
|
+
className: menuItemClassName,
|
|
128
|
+
disabled: !state.links.planUrl.trim(),
|
|
129
|
+
"aria-label": `${labels.membership} ${membershipLabel}`,
|
|
130
|
+
onClick: () => openExternal(state.links.planUrl),
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsx(BillingIcon, { "aria-hidden": "true", size: 16 }),
|
|
133
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.membership }),
|
|
134
|
+
/* @__PURE__ */ jsx("span", { className: "max-w-[72px] truncate text-[var(--text-secondary)]", children: membershipLabel }),
|
|
135
|
+
/* @__PURE__ */ jsx(
|
|
136
|
+
LaunchIcon,
|
|
137
|
+
{
|
|
138
|
+
"aria-hidden": "true",
|
|
139
|
+
className: "text-[var(--text-secondary)]",
|
|
140
|
+
size: 14
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
),
|
|
146
|
+
/* @__PURE__ */ jsxs(
|
|
147
|
+
"button",
|
|
148
|
+
{
|
|
149
|
+
type: "button",
|
|
150
|
+
className: menuItemClassName,
|
|
151
|
+
disabled: !state.links.settingsUrl.trim(),
|
|
152
|
+
onClick: () => openExternal(state.links.settingsUrl),
|
|
153
|
+
children: [
|
|
154
|
+
/* @__PURE__ */ jsx(UserLinedIcon, { "aria-hidden": "true", size: 16 }),
|
|
155
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.accountCenter }),
|
|
156
|
+
/* @__PURE__ */ jsx(
|
|
157
|
+
LaunchIcon,
|
|
158
|
+
{
|
|
159
|
+
"aria-hidden": "true",
|
|
160
|
+
className: "text-[var(--text-secondary)]",
|
|
161
|
+
size: 14
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
),
|
|
167
|
+
state.dataUnavailable ? /* @__PURE__ */ jsx(
|
|
168
|
+
"span",
|
|
169
|
+
{
|
|
170
|
+
className: "px-2 py-1 text-[11px] leading-4 text-[var(--state-danger)]",
|
|
171
|
+
role: "status",
|
|
172
|
+
children: labels.dataUnavailable
|
|
173
|
+
}
|
|
174
|
+
) : null
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// src/react/CommerceMenuContent.tsx
|
|
181
|
+
import {
|
|
182
|
+
BillingIcon as BillingIcon2,
|
|
183
|
+
CreditsIcon as CreditsIcon2,
|
|
184
|
+
LaunchIcon as LaunchIcon2,
|
|
185
|
+
UserLinedIcon as UserLinedIcon2
|
|
186
|
+
} from "@tutti-os/ui-system";
|
|
187
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
188
|
+
function CommerceMenuContent({
|
|
189
|
+
state,
|
|
190
|
+
labels
|
|
191
|
+
}) {
|
|
192
|
+
const creditsLabel = state.loading && !state.creditsLabel ? labels.loading : state.creditsLabel ?? labels.unavailable;
|
|
193
|
+
const openExternal = useCommerceOpenExternal(state);
|
|
194
|
+
const membershipActionLabel = resolveCommerceMembershipActionLabel(
|
|
195
|
+
state,
|
|
196
|
+
labels
|
|
197
|
+
);
|
|
198
|
+
return /* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-col", "data-testid": "commerce-menu-content", children: [
|
|
199
|
+
/* @__PURE__ */ jsxs2(
|
|
41
200
|
"button",
|
|
42
201
|
{
|
|
43
202
|
type: "button",
|
|
@@ -45,13 +204,13 @@ function CommerceMenuContent({
|
|
|
45
204
|
disabled: !state.links.planUrl.trim(),
|
|
46
205
|
onClick: () => openExternal(state.links.planUrl),
|
|
47
206
|
children: [
|
|
48
|
-
/* @__PURE__ */
|
|
49
|
-
/* @__PURE__ */
|
|
50
|
-
/* @__PURE__ */
|
|
207
|
+
/* @__PURE__ */ jsx2(BillingIcon2, { "aria-hidden": "true", size: 15 }),
|
|
208
|
+
/* @__PURE__ */ jsx2("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.member }),
|
|
209
|
+
/* @__PURE__ */ jsx2("span", { className: "shrink-0 text-[12px] text-[var(--tutti-purple)]", children: membershipActionLabel })
|
|
51
210
|
]
|
|
52
211
|
}
|
|
53
212
|
),
|
|
54
|
-
/* @__PURE__ */
|
|
213
|
+
/* @__PURE__ */ jsxs2(
|
|
55
214
|
"button",
|
|
56
215
|
{
|
|
57
216
|
type: "button",
|
|
@@ -59,13 +218,13 @@ function CommerceMenuContent({
|
|
|
59
218
|
disabled: !state.links.usageUrl.trim(),
|
|
60
219
|
onClick: () => openExternal(state.links.usageUrl),
|
|
61
220
|
children: [
|
|
62
|
-
/* @__PURE__ */
|
|
63
|
-
/* @__PURE__ */
|
|
64
|
-
/* @__PURE__ */
|
|
221
|
+
/* @__PURE__ */ jsx2(CreditsIcon2, { "aria-hidden": "true", size: 15 }),
|
|
222
|
+
/* @__PURE__ */ jsx2("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.creditsBalance }),
|
|
223
|
+
/* @__PURE__ */ jsx2("span", { className: "truncate text-[var(--text-secondary)]", children: creditsLabel })
|
|
65
224
|
]
|
|
66
225
|
}
|
|
67
226
|
),
|
|
68
|
-
/* @__PURE__ */
|
|
227
|
+
/* @__PURE__ */ jsxs2(
|
|
69
228
|
"button",
|
|
70
229
|
{
|
|
71
230
|
type: "button",
|
|
@@ -73,10 +232,10 @@ function CommerceMenuContent({
|
|
|
73
232
|
disabled: !state.links.settingsUrl.trim(),
|
|
74
233
|
onClick: () => openExternal(state.links.settingsUrl),
|
|
75
234
|
children: [
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
-
|
|
235
|
+
/* @__PURE__ */ jsx2(UserLinedIcon2, { "aria-hidden": "true", size: 15 }),
|
|
236
|
+
/* @__PURE__ */ jsx2("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.accountCenter }),
|
|
237
|
+
/* @__PURE__ */ jsx2(
|
|
238
|
+
LaunchIcon2,
|
|
80
239
|
{
|
|
81
240
|
"aria-hidden": "true",
|
|
82
241
|
className: "text-[var(--text-secondary)]",
|
|
@@ -86,29 +245,19 @@ function CommerceMenuContent({
|
|
|
86
245
|
]
|
|
87
246
|
}
|
|
88
247
|
),
|
|
89
|
-
state.dataUnavailable ? /* @__PURE__ */
|
|
248
|
+
state.dataUnavailable ? /* @__PURE__ */ jsx2("span", { className: "px-2 py-1 text-[11px] leading-4 text-[var(--text-danger)]", children: labels.dataUnavailable }) : null
|
|
90
249
|
] });
|
|
91
250
|
}
|
|
92
|
-
function resolveMembershipActionLabel(state, labels) {
|
|
93
|
-
switch (resolveMembershipAction(state.membershipAccess)) {
|
|
94
|
-
case "upgrade-membership":
|
|
95
|
-
return labels.upgradeMembership;
|
|
96
|
-
case "recharge-credits":
|
|
97
|
-
return labels.rechargeCredits;
|
|
98
|
-
case "view-credit-plans":
|
|
99
|
-
return labels.viewCreditPlans;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
251
|
|
|
103
252
|
// src/react/MembershipBadge.tsx
|
|
104
|
-
import { BillingIcon as
|
|
253
|
+
import { BillingIcon as BillingIcon3 } from "@tutti-os/ui-system";
|
|
105
254
|
|
|
106
255
|
// src/react/MembershipTierIcon.tsx
|
|
107
256
|
import freeIconUrl from "@tutti-os/commerce/assets/star-free.png";
|
|
108
257
|
import liteIconUrl from "@tutti-os/commerce/assets/star-lite.png";
|
|
109
258
|
import proIconUrl from "@tutti-os/commerce/assets/star-pro.png";
|
|
110
259
|
import ultraIconUrl from "@tutti-os/commerce/assets/star-ultra.png";
|
|
111
|
-
import { jsx as
|
|
260
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
112
261
|
var ICON_URLS = {
|
|
113
262
|
free: freeIconUrl,
|
|
114
263
|
lite: liteIconUrl,
|
|
@@ -123,7 +272,7 @@ function MembershipTierIcon({
|
|
|
123
272
|
if (!visual) {
|
|
124
273
|
return null;
|
|
125
274
|
}
|
|
126
|
-
return /* @__PURE__ */
|
|
275
|
+
return /* @__PURE__ */ jsx3(
|
|
127
276
|
"img",
|
|
128
277
|
{
|
|
129
278
|
alt: "",
|
|
@@ -137,26 +286,26 @@ function MembershipTierIcon({
|
|
|
137
286
|
}
|
|
138
287
|
|
|
139
288
|
// src/react/MembershipBadge.tsx
|
|
140
|
-
import { jsx as
|
|
289
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
141
290
|
function MembershipBadge({
|
|
142
291
|
label,
|
|
143
292
|
tierKey = null,
|
|
144
293
|
className = ""
|
|
145
294
|
}) {
|
|
146
|
-
return /* @__PURE__ */
|
|
295
|
+
return /* @__PURE__ */ jsxs3(
|
|
147
296
|
"span",
|
|
148
297
|
{
|
|
149
298
|
className: `inline-flex max-w-full items-center gap-1 rounded-[5px] py-0.5 text-[11px] font-normal leading-3 text-[var(--text-secondary)] ${className}`,
|
|
150
299
|
"data-commerce-membership-badge": "true",
|
|
151
300
|
children: [
|
|
152
|
-
tierKey ? /* @__PURE__ */
|
|
301
|
+
tierKey ? /* @__PURE__ */ jsx4(
|
|
153
302
|
MembershipTierIcon,
|
|
154
303
|
{
|
|
155
304
|
className: "size-3.5 shrink-0 object-contain",
|
|
156
305
|
tierKey
|
|
157
306
|
}
|
|
158
|
-
) : /* @__PURE__ */
|
|
159
|
-
/* @__PURE__ */
|
|
307
|
+
) : /* @__PURE__ */ jsx4(BillingIcon3, { "aria-hidden": "true", size: 11 }),
|
|
308
|
+
/* @__PURE__ */ jsx4("span", { className: "min-w-0 truncate", children: label })
|
|
160
309
|
]
|
|
161
310
|
}
|
|
162
311
|
);
|
|
@@ -165,8 +314,8 @@ function MembershipBadge({
|
|
|
165
314
|
// src/react/RegistrationCreditsToast.tsx
|
|
166
315
|
import { memo, useEffect } from "react";
|
|
167
316
|
import registrationCreditsBackgroundUrl from "@tutti-os/commerce/assets/registration-credits-bg.png";
|
|
168
|
-
import { CloseIcon, CreditsIcon as
|
|
169
|
-
import { jsx as
|
|
317
|
+
import { CloseIcon, CreditsIcon as CreditsIcon3 } from "@tutti-os/ui-system";
|
|
318
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
170
319
|
var defaultAutoDismissMs = 12e4;
|
|
171
320
|
var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
172
321
|
toast,
|
|
@@ -186,7 +335,7 @@ var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
|
186
335
|
if (!toast.visible) {
|
|
187
336
|
return null;
|
|
188
337
|
}
|
|
189
|
-
return /* @__PURE__ */
|
|
338
|
+
return /* @__PURE__ */ jsxs4(
|
|
190
339
|
"div",
|
|
191
340
|
{
|
|
192
341
|
className: "nodrag relative mx-3 mb-1 w-[calc(100%-24px)] max-w-[calc(100%-24px)] overflow-hidden rounded-[14px] border border-[rgba(218,233,255,0.62)] p-2.5 pr-9 text-white shadow-[0_14px_28px_rgba(0,0,0,0.2),inset_0_0_0_1px_rgba(255,255,255,0.24)] [-webkit-app-region:no-drag]",
|
|
@@ -201,28 +350,28 @@ var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
|
201
350
|
backgroundSize: "cover"
|
|
202
351
|
},
|
|
203
352
|
children: [
|
|
204
|
-
/* @__PURE__ */
|
|
205
|
-
/* @__PURE__ */
|
|
206
|
-
/* @__PURE__ */
|
|
207
|
-
/* @__PURE__ */
|
|
208
|
-
/* @__PURE__ */
|
|
209
|
-
/* @__PURE__ */
|
|
353
|
+
/* @__PURE__ */ jsx5("div", { className: "pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/90 to-transparent" }),
|
|
354
|
+
/* @__PURE__ */ jsxs4("div", { className: "relative flex min-w-0 items-center gap-2.5", children: [
|
|
355
|
+
/* @__PURE__ */ jsx5("span", { className: "grid h-10 w-10 shrink-0 place-items-center rounded-[12px] bg-[rgba(250,255,236,0.78)] text-emerald-400 shadow-[0_9px_18px_rgba(20,184,166,0.18),0_0_0_1px_rgba(255,255,255,0.5)_inset]", children: /* @__PURE__ */ jsx5(CreditsIcon3, { "aria-hidden": "true", size: 23 }) }),
|
|
356
|
+
/* @__PURE__ */ jsxs4("span", { className: "min-w-0 flex-1", children: [
|
|
357
|
+
/* @__PURE__ */ jsx5("span", { className: "block truncate text-[12px] font-semibold leading-4 text-white", children: labels.title }),
|
|
358
|
+
/* @__PURE__ */ jsxs4("span", { className: "block truncate text-[20px] font-semibold leading-6 text-white", children: [
|
|
210
359
|
"+",
|
|
211
360
|
toast.creditsLabel,
|
|
212
361
|
" ",
|
|
213
362
|
labels.creditsUnit
|
|
214
363
|
] }),
|
|
215
|
-
/* @__PURE__ */
|
|
364
|
+
/* @__PURE__ */ jsx5("span", { className: "block truncate text-[11px] font-medium leading-4 text-white/88", children: labels.description })
|
|
216
365
|
] })
|
|
217
366
|
] }),
|
|
218
|
-
/* @__PURE__ */
|
|
367
|
+
/* @__PURE__ */ jsx5(
|
|
219
368
|
"button",
|
|
220
369
|
{
|
|
221
370
|
type: "button",
|
|
222
371
|
"aria-label": labels.close,
|
|
223
372
|
className: "nodrag absolute right-2.5 top-2.5 grid h-6 w-6 place-items-center rounded-[7px] text-white/85 hover:bg-white/18 hover:text-white [-webkit-app-region:no-drag]",
|
|
224
373
|
onClick: toast.onDismiss,
|
|
225
|
-
children: /* @__PURE__ */
|
|
374
|
+
children: /* @__PURE__ */ jsx5(CloseIcon, { "aria-hidden": "true", size: 16 })
|
|
226
375
|
}
|
|
227
376
|
)
|
|
228
377
|
]
|
|
@@ -230,6 +379,7 @@ var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
|
230
379
|
);
|
|
231
380
|
});
|
|
232
381
|
export {
|
|
382
|
+
AgentConfigCommerceContent,
|
|
233
383
|
CommerceMenuContent,
|
|
234
384
|
MembershipBadge,
|
|
235
385
|
MembershipTierIcon,
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/CommerceMenuContent.tsx","../../src/react/MembershipBadge.tsx","../../src/react/MembershipTierIcon.tsx","../../src/react/RegistrationCreditsToast.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport {\n BillingIcon,\n CreditsIcon,\n LaunchIcon,\n UserLinedIcon\n} from \"@tutti-os/ui-system\";\nimport { resolveMembershipAction, type CommerceMenuState } from \"../index\";\n\nexport interface CommerceMenuLabels {\n member: string;\n upgradeMembership: string;\n rechargeCredits: string;\n viewCreditPlans: string;\n creditsBalance: string;\n accountCenter: string;\n loading: string;\n unavailable: string;\n dataUnavailable: string;\n}\n\nexport interface CommerceMenuContentProps {\n state: CommerceMenuState;\n labels: CommerceMenuLabels;\n}\n\nexport function CommerceMenuContent({\n state,\n labels\n}: CommerceMenuContentProps): React.JSX.Element {\n const creditsLabel =\n state.loading && !state.creditsLabel\n ? labels.loading\n : (state.creditsLabel ?? labels.unavailable);\n const openExternal = useCallback(\n (url: string) => {\n if (!url.trim()) {\n return;\n }\n try {\n const result = state.onOpenExternal(url);\n if (result) {\n void result.catch((error: unknown) => {\n state.onActionError?.(error);\n });\n }\n } catch (error) {\n state.onActionError?.(error);\n }\n },\n [state]\n );\n const membershipActionLabel = resolveMembershipActionLabel(state, labels);\n\n return (\n <div className=\"flex min-w-0 flex-col\" data-testid=\"commerce-menu-content\">\n <button\n type=\"button\"\n className=\"nodrag flex h-8 items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] hover:bg-[var(--transparency-hover)] disabled:cursor-not-allowed disabled:opacity-50 [-webkit-app-region:no-drag]\"\n disabled={!state.links.planUrl.trim()}\n onClick={() => openExternal(state.links.planUrl)}\n >\n <BillingIcon aria-hidden=\"true\" size={15} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.member}\n </span>\n <span className=\"shrink-0 text-[12px] text-[var(--tutti-purple)]\">\n {membershipActionLabel}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"nodrag flex h-8 items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] hover:bg-[var(--transparency-hover)] disabled:cursor-not-allowed disabled:opacity-50 [-webkit-app-region:no-drag]\"\n disabled={!state.links.usageUrl.trim()}\n onClick={() => openExternal(state.links.usageUrl)}\n >\n <CreditsIcon aria-hidden=\"true\" size={15} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.creditsBalance}\n </span>\n <span className=\"truncate text-[var(--text-secondary)]\">\n {creditsLabel}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"nodrag flex h-8 items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] hover:bg-[var(--transparency-hover)] disabled:cursor-not-allowed disabled:opacity-50 [-webkit-app-region:no-drag]\"\n disabled={!state.links.settingsUrl.trim()}\n onClick={() => openExternal(state.links.settingsUrl)}\n >\n <UserLinedIcon aria-hidden=\"true\" size={15} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.accountCenter}\n </span>\n <LaunchIcon\n aria-hidden=\"true\"\n className=\"text-[var(--text-secondary)]\"\n size={14}\n />\n </button>\n {state.dataUnavailable ? (\n <span className=\"px-2 py-1 text-[11px] leading-4 text-[var(--text-danger)]\">\n {labels.dataUnavailable}\n </span>\n ) : null}\n </div>\n );\n}\n\nfunction resolveMembershipActionLabel(\n state: CommerceMenuState,\n labels: Pick<\n CommerceMenuLabels,\n \"upgradeMembership\" | \"rechargeCredits\" | \"viewCreditPlans\"\n >\n): string {\n switch (resolveMembershipAction(state.membershipAccess)) {\n case \"upgrade-membership\":\n return labels.upgradeMembership;\n case \"recharge-credits\":\n return labels.rechargeCredits;\n case \"view-credit-plans\":\n return labels.viewCreditPlans;\n }\n}\n","import { BillingIcon } from \"@tutti-os/ui-system\";\nimport { MembershipTierIcon } from \"./MembershipTierIcon\";\n\nexport interface MembershipBadgeProps {\n label: string;\n tierKey?: string | null;\n className?: string;\n}\n\nexport function MembershipBadge({\n label,\n tierKey = null,\n className = \"\"\n}: MembershipBadgeProps): React.JSX.Element {\n return (\n <span\n className={`inline-flex max-w-full items-center gap-1 rounded-[5px] py-0.5 text-[11px] font-normal leading-3 text-[var(--text-secondary)] ${className}`}\n data-commerce-membership-badge=\"true\"\n >\n {tierKey ? (\n <MembershipTierIcon\n className=\"size-3.5 shrink-0 object-contain\"\n tierKey={tierKey}\n />\n ) : (\n <BillingIcon aria-hidden=\"true\" size={11} />\n )}\n <span className=\"min-w-0 truncate\">{label}</span>\n </span>\n );\n}\n","import freeIconUrl from \"@tutti-os/commerce/assets/star-free.png\";\nimport liteIconUrl from \"@tutti-os/commerce/assets/star-lite.png\";\nimport proIconUrl from \"@tutti-os/commerce/assets/star-pro.png\";\nimport ultraIconUrl from \"@tutti-os/commerce/assets/star-ultra.png\";\nimport {\n resolveMembershipTierVisual,\n type MembershipTierVisual\n} from \"../index\";\n\nconst ICON_URLS: Readonly<Record<MembershipTierVisual, string>> = {\n free: freeIconUrl,\n lite: liteIconUrl,\n pro: proIconUrl,\n ultra: ultraIconUrl\n};\n\nexport interface MembershipTierIconProps {\n tierKey: string | null | undefined;\n className?: string;\n}\n\nexport function MembershipTierIcon({\n tierKey,\n className = \"\"\n}: MembershipTierIconProps): React.JSX.Element | null {\n const visual = resolveMembershipTierVisual(tierKey);\n if (!visual) {\n return null;\n }\n return (\n <img\n alt=\"\"\n aria-hidden=\"true\"\n draggable={false}\n src={ICON_URLS[visual]}\n className={className}\n data-membership-tier-visual={visual}\n />\n );\n}\n","import { memo, useEffect } from \"react\";\nimport registrationCreditsBackgroundUrl from \"@tutti-os/commerce/assets/registration-credits-bg.png\";\nimport { CloseIcon, CreditsIcon } from \"@tutti-os/ui-system\";\nimport type { RegistrationCreditsToastState } from \"../index\";\n\nexport interface RegistrationCreditsToastLabels {\n title: string;\n creditsUnit: string;\n description: string;\n close: string;\n}\n\nexport interface RegistrationCreditsToastProps {\n toast: RegistrationCreditsToastState;\n labels: RegistrationCreditsToastLabels;\n}\n\nconst defaultAutoDismissMs = 120_000;\n\nexport const RegistrationCreditsToast = memo(function RegistrationCreditsToast({\n toast,\n labels\n}: RegistrationCreditsToastProps): React.JSX.Element | null {\n \"use memo\";\n useEffect(() => {\n if (!toast.visible) {\n return;\n }\n const timeout = window.setTimeout(\n toast.onDismiss,\n toast.autoDismissMs ?? defaultAutoDismissMs\n );\n return () => window.clearTimeout(timeout);\n }, [toast.autoDismissMs, toast.onDismiss, toast.visible]);\n\n if (!toast.visible) {\n return null;\n }\n\n return (\n <div\n className=\"nodrag relative mx-3 mb-1 w-[calc(100%-24px)] max-w-[calc(100%-24px)] overflow-hidden rounded-[14px] border border-[rgba(218,233,255,0.62)] p-2.5 pr-9 text-white shadow-[0_14px_28px_rgba(0,0,0,0.2),inset_0_0_0_1px_rgba(255,255,255,0.24)] [-webkit-app-region:no-drag]\"\n data-testid=\"commerce-registration-credits-toast\"\n role=\"status\"\n style={{\n backgroundImage: `linear-gradient(90deg, rgba(18, 60, 142, 0.08), rgba(20, 66, 160, 0.2) 58%, rgba(12, 32, 92, 0.34)), url(${JSON.stringify(\n registrationCreditsBackgroundUrl\n )})`,\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\"\n }}\n >\n <div className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/90 to-transparent\" />\n <div className=\"relative flex min-w-0 items-center gap-2.5\">\n <span className=\"grid h-10 w-10 shrink-0 place-items-center rounded-[12px] bg-[rgba(250,255,236,0.78)] text-emerald-400 shadow-[0_9px_18px_rgba(20,184,166,0.18),0_0_0_1px_rgba(255,255,255,0.5)_inset]\">\n <CreditsIcon aria-hidden=\"true\" size={23} />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[12px] font-semibold leading-4 text-white\">\n {labels.title}\n </span>\n <span className=\"block truncate text-[20px] font-semibold leading-6 text-white\">\n +{toast.creditsLabel} {labels.creditsUnit}\n </span>\n <span className=\"block truncate text-[11px] font-medium leading-4 text-white/88\">\n {labels.description}\n </span>\n </span>\n </div>\n <button\n type=\"button\"\n aria-label={labels.close}\n className=\"nodrag absolute right-2.5 top-2.5 grid h-6 w-6 place-items-center rounded-[7px] text-white/85 hover:bg-white/18 hover:text-white [-webkit-app-region:no-drag]\"\n onClick={toast.onDismiss}\n >\n <CloseIcon aria-hidden=\"true\" size={16} />\n </button>\n </div>\n );\n});\n"],"mappings":"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","names":["BillingIcon","jsx","jsx","jsxs","BillingIcon","CreditsIcon","jsx","jsxs","RegistrationCreditsToast"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/AgentConfigCommerceContent.tsx","../../src/react/commerceMenuPresentation.ts","../../src/react/CommerceMenuContent.tsx","../../src/react/MembershipBadge.tsx","../../src/react/MembershipTierIcon.tsx","../../src/react/RegistrationCreditsToast.tsx"],"sourcesContent":["import {\n BillingIcon,\n CreditsIcon,\n LaunchIcon,\n RefreshIcon,\n UserLinedIcon\n} from \"@tutti-os/ui-system\";\nimport type { CommerceMenuState } from \"../index\";\nimport { useCommerceOpenExternal } from \"./commerceMenuPresentation\";\n\nexport interface AgentConfigCommerceLabels {\n account: string;\n membership: string;\n creditsBalance: string;\n refresh: string;\n refreshing: string;\n freeMembership: string;\n accountCenter: string;\n loading: string;\n unavailable: string;\n dataUnavailable: string;\n}\n\nexport interface AgentConfigCommerceContentProps {\n accountName: string | null;\n state: CommerceMenuState;\n labels: AgentConfigCommerceLabels;\n onRefresh(): void;\n}\n\nconst menuItemBaseClassName =\n \"nodrag flex h-7 items-center gap-2 rounded-[6px] text-[13px] text-[var(--text-primary)] transition-colors hover:bg-[var(--transparency-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] disabled:cursor-not-allowed disabled:text-[var(--text-disabled)] disabled:hover:bg-transparent [-webkit-app-region:no-drag]\";\nconst menuItemClassName = `${menuItemBaseClassName} w-full px-2`;\n\nexport function AgentConfigCommerceContent({\n accountName,\n state,\n labels,\n onRefresh\n}: AgentConfigCommerceContentProps): React.JSX.Element {\n const openExternal = useCommerceOpenExternal(state);\n const accountNameLabel =\n accountName?.trim() ||\n (state.loading ? labels.loading : labels.unavailable);\n const creditsLabel =\n state.loading && !state.creditsLabel\n ? labels.loading\n : (state.creditsLabel ?? labels.unavailable);\n const membershipLabel =\n state.membershipLabel.trim() ||\n (state.membershipAccess === \"free\"\n ? labels.freeMembership\n : state.loading\n ? labels.loading\n : labels.unavailable);\n return (\n <div\n className=\"flex min-w-0 flex-col gap-1\"\n data-testid=\"agent-config-commerce-content\"\n >\n <div className=\"flex min-w-0 flex-col gap-1 p-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <UserLinedIcon aria-hidden=\"true\" size={16} />\n <span className=\"truncate text-[13px] font-semibold leading-4\">\n {labels.account}\n </span>\n </div>\n <span className=\"truncate pl-6 text-[13px] leading-5 text-[var(--text-secondary)]\">\n {accountNameLabel}\n </span>\n </div>\n <div className=\"px-2\">\n <span className=\"block h-px bg-[var(--border-1)]\" />\n </div>\n <div className=\"flex min-w-0 items-center\">\n <button\n type=\"button\"\n className={`${menuItemBaseClassName} min-w-0 flex-1 px-2`}\n disabled={!state.links.usageUrl.trim()}\n aria-label={`${labels.creditsBalance} ${creditsLabel}`}\n onClick={() => openExternal(state.links.usageUrl)}\n >\n <CreditsIcon aria-hidden=\"true\" size={16} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.creditsBalance}\n </span>\n <span\n className=\"max-w-[120px] truncate text-[var(--text-secondary)] tabular-nums\"\n data-testid=\"agent-config-commerce-credits\"\n aria-live=\"polite\"\n >\n {creditsLabel}\n </span>\n </button>\n <button\n type=\"button\"\n className={`${menuItemBaseClassName} shrink-0 px-2`}\n data-testid=\"agent-config-commerce-refresh\"\n disabled={state.loading}\n aria-label={state.loading ? labels.refreshing : labels.refresh}\n onClick={onRefresh}\n >\n <RefreshIcon\n aria-hidden=\"true\"\n className={state.loading ? \"motion-safe:animate-spin\" : undefined}\n size={14}\n />\n <span>{state.loading ? labels.refreshing : labels.refresh}</span>\n </button>\n </div>\n <button\n type=\"button\"\n className={menuItemClassName}\n disabled={!state.links.planUrl.trim()}\n aria-label={`${labels.membership} ${membershipLabel}`}\n onClick={() => openExternal(state.links.planUrl)}\n >\n <BillingIcon aria-hidden=\"true\" size={16} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.membership}\n </span>\n <span className=\"max-w-[72px] truncate text-[var(--text-secondary)]\">\n {membershipLabel}\n </span>\n <LaunchIcon\n aria-hidden=\"true\"\n className=\"text-[var(--text-secondary)]\"\n size={14}\n />\n </button>\n <button\n type=\"button\"\n className={menuItemClassName}\n disabled={!state.links.settingsUrl.trim()}\n onClick={() => openExternal(state.links.settingsUrl)}\n >\n <UserLinedIcon aria-hidden=\"true\" size={16} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.accountCenter}\n </span>\n <LaunchIcon\n aria-hidden=\"true\"\n className=\"text-[var(--text-secondary)]\"\n size={14}\n />\n </button>\n {state.dataUnavailable ? (\n <span\n className=\"px-2 py-1 text-[11px] leading-4 text-[var(--state-danger)]\"\n role=\"status\"\n >\n {labels.dataUnavailable}\n </span>\n ) : null}\n </div>\n );\n}\n","import { useCallback } from \"react\";\nimport { resolveMembershipAction, type CommerceMenuState } from \"../index\";\n\nexport interface CommerceMembershipActionLabels {\n upgradeMembership: string;\n rechargeCredits: string;\n viewCreditPlans: string;\n}\n\nexport function resolveCommerceMembershipActionLabel(\n state: CommerceMenuState,\n labels: CommerceMembershipActionLabels\n): string {\n switch (resolveMembershipAction(state.membershipAccess)) {\n case \"upgrade-membership\":\n return labels.upgradeMembership;\n case \"recharge-credits\":\n return labels.rechargeCredits;\n case \"view-credit-plans\":\n return labels.viewCreditPlans;\n }\n}\n\nexport function useCommerceOpenExternal(\n state: CommerceMenuState\n): (url: string) => void {\n return useCallback(\n (url: string) => {\n if (!url.trim()) {\n return;\n }\n try {\n const result = state.onOpenExternal(url);\n if (result) {\n void result.catch((error: unknown) => {\n state.onActionError?.(error);\n });\n }\n } catch (error) {\n state.onActionError?.(error);\n }\n },\n [state]\n );\n}\n","import {\n BillingIcon,\n CreditsIcon,\n LaunchIcon,\n UserLinedIcon\n} from \"@tutti-os/ui-system\";\nimport type { CommerceMenuState } from \"../index\";\nimport {\n resolveCommerceMembershipActionLabel,\n useCommerceOpenExternal\n} from \"./commerceMenuPresentation\";\n\nexport interface CommerceMenuLabels {\n member: string;\n upgradeMembership: string;\n rechargeCredits: string;\n viewCreditPlans: string;\n creditsBalance: string;\n accountCenter: string;\n loading: string;\n unavailable: string;\n dataUnavailable: string;\n}\n\nexport interface CommerceMenuContentProps {\n state: CommerceMenuState;\n labels: CommerceMenuLabels;\n}\n\nexport function CommerceMenuContent({\n state,\n labels\n}: CommerceMenuContentProps): React.JSX.Element {\n const creditsLabel =\n state.loading && !state.creditsLabel\n ? labels.loading\n : (state.creditsLabel ?? labels.unavailable);\n const openExternal = useCommerceOpenExternal(state);\n const membershipActionLabel = resolveCommerceMembershipActionLabel(\n state,\n labels\n );\n\n return (\n <div className=\"flex min-w-0 flex-col\" data-testid=\"commerce-menu-content\">\n <button\n type=\"button\"\n className=\"nodrag flex h-8 items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] hover:bg-[var(--transparency-hover)] disabled:cursor-not-allowed disabled:opacity-50 [-webkit-app-region:no-drag]\"\n disabled={!state.links.planUrl.trim()}\n onClick={() => openExternal(state.links.planUrl)}\n >\n <BillingIcon aria-hidden=\"true\" size={15} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.member}\n </span>\n <span className=\"shrink-0 text-[12px] text-[var(--tutti-purple)]\">\n {membershipActionLabel}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"nodrag flex h-8 items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] hover:bg-[var(--transparency-hover)] disabled:cursor-not-allowed disabled:opacity-50 [-webkit-app-region:no-drag]\"\n disabled={!state.links.usageUrl.trim()}\n onClick={() => openExternal(state.links.usageUrl)}\n >\n <CreditsIcon aria-hidden=\"true\" size={15} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.creditsBalance}\n </span>\n <span className=\"truncate text-[var(--text-secondary)]\">\n {creditsLabel}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"nodrag flex h-8 items-center gap-2 rounded-[6px] px-2 text-[13px] text-[var(--text-primary)] hover:bg-[var(--transparency-hover)] disabled:cursor-not-allowed disabled:opacity-50 [-webkit-app-region:no-drag]\"\n disabled={!state.links.settingsUrl.trim()}\n onClick={() => openExternal(state.links.settingsUrl)}\n >\n <UserLinedIcon aria-hidden=\"true\" size={15} />\n <span className=\"min-w-0 flex-1 truncate text-left\">\n {labels.accountCenter}\n </span>\n <LaunchIcon\n aria-hidden=\"true\"\n className=\"text-[var(--text-secondary)]\"\n size={14}\n />\n </button>\n {state.dataUnavailable ? (\n <span className=\"px-2 py-1 text-[11px] leading-4 text-[var(--text-danger)]\">\n {labels.dataUnavailable}\n </span>\n ) : null}\n </div>\n );\n}\n","import { BillingIcon } from \"@tutti-os/ui-system\";\nimport { MembershipTierIcon } from \"./MembershipTierIcon\";\n\nexport interface MembershipBadgeProps {\n label: string;\n tierKey?: string | null;\n className?: string;\n}\n\nexport function MembershipBadge({\n label,\n tierKey = null,\n className = \"\"\n}: MembershipBadgeProps): React.JSX.Element {\n return (\n <span\n className={`inline-flex max-w-full items-center gap-1 rounded-[5px] py-0.5 text-[11px] font-normal leading-3 text-[var(--text-secondary)] ${className}`}\n data-commerce-membership-badge=\"true\"\n >\n {tierKey ? (\n <MembershipTierIcon\n className=\"size-3.5 shrink-0 object-contain\"\n tierKey={tierKey}\n />\n ) : (\n <BillingIcon aria-hidden=\"true\" size={11} />\n )}\n <span className=\"min-w-0 truncate\">{label}</span>\n </span>\n );\n}\n","import freeIconUrl from \"@tutti-os/commerce/assets/star-free.png\";\nimport liteIconUrl from \"@tutti-os/commerce/assets/star-lite.png\";\nimport proIconUrl from \"@tutti-os/commerce/assets/star-pro.png\";\nimport ultraIconUrl from \"@tutti-os/commerce/assets/star-ultra.png\";\nimport {\n resolveMembershipTierVisual,\n type MembershipTierVisual\n} from \"../index\";\n\nconst ICON_URLS: Readonly<Record<MembershipTierVisual, string>> = {\n free: freeIconUrl,\n lite: liteIconUrl,\n pro: proIconUrl,\n ultra: ultraIconUrl\n};\n\nexport interface MembershipTierIconProps {\n tierKey: string | null | undefined;\n className?: string;\n}\n\nexport function MembershipTierIcon({\n tierKey,\n className = \"\"\n}: MembershipTierIconProps): React.JSX.Element | null {\n const visual = resolveMembershipTierVisual(tierKey);\n if (!visual) {\n return null;\n }\n return (\n <img\n alt=\"\"\n aria-hidden=\"true\"\n draggable={false}\n src={ICON_URLS[visual]}\n className={className}\n data-membership-tier-visual={visual}\n />\n );\n}\n","import { memo, useEffect } from \"react\";\nimport registrationCreditsBackgroundUrl from \"@tutti-os/commerce/assets/registration-credits-bg.png\";\nimport { CloseIcon, CreditsIcon } from \"@tutti-os/ui-system\";\nimport type { RegistrationCreditsToastState } from \"../index\";\n\nexport interface RegistrationCreditsToastLabels {\n title: string;\n creditsUnit: string;\n description: string;\n close: string;\n}\n\nexport interface RegistrationCreditsToastProps {\n toast: RegistrationCreditsToastState;\n labels: RegistrationCreditsToastLabels;\n}\n\nconst defaultAutoDismissMs = 120_000;\n\nexport const RegistrationCreditsToast = memo(function RegistrationCreditsToast({\n toast,\n labels\n}: RegistrationCreditsToastProps): React.JSX.Element | null {\n \"use memo\";\n useEffect(() => {\n if (!toast.visible) {\n return;\n }\n const timeout = window.setTimeout(\n toast.onDismiss,\n toast.autoDismissMs ?? defaultAutoDismissMs\n );\n return () => window.clearTimeout(timeout);\n }, [toast.autoDismissMs, toast.onDismiss, toast.visible]);\n\n if (!toast.visible) {\n return null;\n }\n\n return (\n <div\n className=\"nodrag relative mx-3 mb-1 w-[calc(100%-24px)] max-w-[calc(100%-24px)] overflow-hidden rounded-[14px] border border-[rgba(218,233,255,0.62)] p-2.5 pr-9 text-white shadow-[0_14px_28px_rgba(0,0,0,0.2),inset_0_0_0_1px_rgba(255,255,255,0.24)] [-webkit-app-region:no-drag]\"\n data-testid=\"commerce-registration-credits-toast\"\n role=\"status\"\n style={{\n backgroundImage: `linear-gradient(90deg, rgba(18, 60, 142, 0.08), rgba(20, 66, 160, 0.2) 58%, rgba(12, 32, 92, 0.34)), url(${JSON.stringify(\n registrationCreditsBackgroundUrl\n )})`,\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\"\n }}\n >\n <div className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/90 to-transparent\" />\n <div className=\"relative flex min-w-0 items-center gap-2.5\">\n <span className=\"grid h-10 w-10 shrink-0 place-items-center rounded-[12px] bg-[rgba(250,255,236,0.78)] text-emerald-400 shadow-[0_9px_18px_rgba(20,184,166,0.18),0_0_0_1px_rgba(255,255,255,0.5)_inset]\">\n <CreditsIcon aria-hidden=\"true\" size={23} />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[12px] font-semibold leading-4 text-white\">\n {labels.title}\n </span>\n <span className=\"block truncate text-[20px] font-semibold leading-6 text-white\">\n +{toast.creditsLabel} {labels.creditsUnit}\n </span>\n <span className=\"block truncate text-[11px] font-medium leading-4 text-white/88\">\n {labels.description}\n </span>\n </span>\n </div>\n <button\n type=\"button\"\n aria-label={labels.close}\n className=\"nodrag absolute right-2.5 top-2.5 grid h-6 w-6 place-items-center rounded-[7px] text-white/85 hover:bg-white/18 hover:text-white [-webkit-app-region:no-drag]\"\n onClick={toast.onDismiss}\n >\n <CloseIcon aria-hidden=\"true\" size={16} />\n </button>\n </div>\n );\n});\n"],"mappings":"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","names":["BillingIcon","CreditsIcon","LaunchIcon","UserLinedIcon","jsx","jsxs","BillingIcon","CreditsIcon","UserLinedIcon","LaunchIcon","BillingIcon","jsx","jsx","jsxs","BillingIcon","CreditsIcon","jsx","jsxs","RegistrationCreditsToast"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tutti-os/commerce",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.234",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"directory": "packages/commerce/web"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@tutti-os/ui-system": "0.0.
|
|
57
|
+
"@tutti-os/ui-system": "0.0.234"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@testing-library/jest-dom": "^6.9.1",
|