@tutti-os/commerce 0.0.253 → 0.0.255
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/assets/titi-run.png +0 -0
- package/dist/assets/titi-run.png.d.ts +2 -0
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +24 -13
- package/dist/react/index.js.map +1 -1
- package/dist/runtime-assets/titi-run-url.d.ts +3 -0
- package/dist/runtime-assets/titi-run-url.js +6 -0
- package/dist/runtime-assets/titi-run-url.js.map +1 -0
- package/package.json +8 -2
|
Binary file
|
package/dist/react/index.d.ts
CHANGED
|
@@ -15,11 +15,12 @@ interface AgentConfigCommerceLabels {
|
|
|
15
15
|
}
|
|
16
16
|
interface AgentConfigCommerceContentProps {
|
|
17
17
|
accountName: string | null;
|
|
18
|
+
showAccountIdentity?: boolean;
|
|
18
19
|
state: CommerceMenuState;
|
|
19
20
|
labels: AgentConfigCommerceLabels;
|
|
20
21
|
onRefresh(): void;
|
|
21
22
|
}
|
|
22
|
-
declare function AgentConfigCommerceContent({ accountName, state, labels, onRefresh }: AgentConfigCommerceContentProps): React.JSX.Element;
|
|
23
|
+
declare function AgentConfigCommerceContent({ accountName, showAccountIdentity, state, labels, onRefresh }: AgentConfigCommerceContentProps): React.JSX.Element;
|
|
23
24
|
|
|
24
25
|
interface CommerceMenuLabels {
|
|
25
26
|
member: string;
|
|
@@ -54,7 +55,6 @@ declare function MembershipTierIcon({ tierKey, className }: MembershipTierIconPr
|
|
|
54
55
|
interface RegistrationCreditsToastLabels {
|
|
55
56
|
title: string;
|
|
56
57
|
creditsUnit: string;
|
|
57
|
-
description: string;
|
|
58
58
|
close: string;
|
|
59
59
|
}
|
|
60
60
|
interface RegistrationCreditsToastProps {
|
package/dist/react/index.js
CHANGED
|
@@ -46,11 +46,12 @@ function useCommerceOpenExternal(state) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// src/react/AgentConfigCommerceContent.tsx
|
|
49
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
49
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
50
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
51
|
var menuItemClassName = `${menuItemBaseClassName} w-full px-2`;
|
|
52
52
|
function AgentConfigCommerceContent({
|
|
53
53
|
accountName,
|
|
54
|
+
showAccountIdentity = true,
|
|
54
55
|
state,
|
|
55
56
|
labels,
|
|
56
57
|
onRefresh
|
|
@@ -65,14 +66,16 @@ function AgentConfigCommerceContent({
|
|
|
65
66
|
className: "flex min-w-0 flex-col gap-1",
|
|
66
67
|
"data-testid": "agent-config-commerce-content",
|
|
67
68
|
children: [
|
|
68
|
-
/* @__PURE__ */ jsxs(
|
|
69
|
-
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
-
|
|
69
|
+
showAccountIdentity ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
70
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1 p-2", children: [
|
|
71
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
72
|
+
/* @__PURE__ */ jsx(UserLinedIcon, { "aria-hidden": "true", size: 16 }),
|
|
73
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-[13px] font-semibold leading-4", children: labels.account })
|
|
74
|
+
] }),
|
|
75
|
+
/* @__PURE__ */ jsx("span", { className: "truncate pl-6 text-[13px] leading-5 text-[var(--text-secondary)]", children: accountNameLabel })
|
|
72
76
|
] }),
|
|
73
|
-
/* @__PURE__ */ jsx("
|
|
74
|
-
] }),
|
|
75
|
-
/* @__PURE__ */ jsx("div", { className: "px-2", children: /* @__PURE__ */ jsx("span", { className: "block h-px bg-[var(--border-1)]" }) }),
|
|
77
|
+
/* @__PURE__ */ jsx("div", { className: "px-2", children: /* @__PURE__ */ jsx("span", { className: "block h-px bg-[var(--border-1)]" }) })
|
|
78
|
+
] }) : null,
|
|
76
79
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center", children: [
|
|
77
80
|
/* @__PURE__ */ jsxs(
|
|
78
81
|
"button",
|
|
@@ -314,7 +317,8 @@ function MembershipBadge({
|
|
|
314
317
|
// src/react/RegistrationCreditsToast.tsx
|
|
315
318
|
import { memo, useEffect } from "react";
|
|
316
319
|
import registrationCreditsBackgroundUrl from "@tutti-os/commerce/assets/registration-credits-bg.png";
|
|
317
|
-
import
|
|
320
|
+
import titiRunUrl from "@tutti-os/commerce/assets/titi-run.png";
|
|
321
|
+
import { CloseIcon } from "@tutti-os/ui-system";
|
|
318
322
|
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
319
323
|
var defaultAutoDismissMs = 12e4;
|
|
320
324
|
var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
@@ -338,7 +342,7 @@ var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
|
338
342
|
return /* @__PURE__ */ jsxs4(
|
|
339
343
|
"div",
|
|
340
344
|
{
|
|
341
|
-
className: "nodrag relative mx-3 mb-1 w-[calc(100%-24px)] max-w-[calc(100%-24px)] overflow-hidden rounded-[
|
|
345
|
+
className: "nodrag relative mx-3 mb-1 w-[calc(100%-24px)] max-w-[calc(100%-24px)] overflow-hidden rounded-[16px] p-2.5 pr-9 text-white [-webkit-app-region:no-drag]",
|
|
342
346
|
"data-testid": "commerce-registration-credits-toast",
|
|
343
347
|
role: "status",
|
|
344
348
|
style: {
|
|
@@ -352,7 +356,15 @@ var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
|
352
356
|
children: [
|
|
353
357
|
/* @__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
358
|
/* @__PURE__ */ jsxs4("div", { className: "relative flex min-w-0 items-center gap-2.5", children: [
|
|
355
|
-
/* @__PURE__ */ jsx5(
|
|
359
|
+
/* @__PURE__ */ jsx5(
|
|
360
|
+
"img",
|
|
361
|
+
{
|
|
362
|
+
alt: "",
|
|
363
|
+
"aria-hidden": "true",
|
|
364
|
+
className: "h-14 w-14 shrink-0 object-contain",
|
|
365
|
+
src: titiRunUrl
|
|
366
|
+
}
|
|
367
|
+
),
|
|
356
368
|
/* @__PURE__ */ jsxs4("span", { className: "min-w-0 flex-1", children: [
|
|
357
369
|
/* @__PURE__ */ jsx5("span", { className: "block truncate text-[12px] font-semibold leading-4 text-white", children: labels.title }),
|
|
358
370
|
/* @__PURE__ */ jsxs4("span", { className: "block truncate text-[20px] font-semibold leading-6 text-white", children: [
|
|
@@ -360,8 +372,7 @@ var RegistrationCreditsToast = memo(function RegistrationCreditsToast2({
|
|
|
360
372
|
toast.creditsLabel,
|
|
361
373
|
" ",
|
|
362
374
|
labels.creditsUnit
|
|
363
|
-
] })
|
|
364
|
-
/* @__PURE__ */ jsx5("span", { className: "block truncate text-[11px] font-medium leading-4 text-white/88", children: labels.description })
|
|
375
|
+
] })
|
|
365
376
|
] })
|
|
366
377
|
] }),
|
|
367
378
|
/* @__PURE__ */ jsx5(
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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 showAccountIdentity?: boolean;\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 showAccountIdentity = true,\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 {showAccountIdentity ? (\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 </>\n ) : null}\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 titiRunUrl from \"@tutti-os/commerce/assets/titi-run.png\";\nimport { CloseIcon } from \"@tutti-os/ui-system\";\nimport type { RegistrationCreditsToastState } from \"../index\";\n\nexport interface RegistrationCreditsToastLabels {\n title: string;\n creditsUnit: 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-[16px] p-2.5 pr-9 text-white [-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 <img\n alt=\"\"\n aria-hidden=\"true\"\n className=\"h-14 w-14 shrink-0 object-contain\"\n src={titiRunUrl}\n />\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>\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","jsx","jsxs","RegistrationCreditsToast"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/runtime-assets/titi-run-url.ts"],"sourcesContent":["export default new URL(\"../assets/titi-run.png\", import.meta.url).href;\n"],"mappings":";AAAA,IAAO,uBAAQ,IAAI,IAAI,0BAA0B,YAAY,GAAG,EAAE;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tutti-os/commerce",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.255",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -42,6 +42,12 @@
|
|
|
42
42
|
"browser": "./dist/assets/registration-credits-bg.png",
|
|
43
43
|
"node": "./dist/runtime-assets/registration-credits-bg-url.js",
|
|
44
44
|
"default": "./dist/assets/registration-credits-bg.png"
|
|
45
|
+
},
|
|
46
|
+
"./assets/titi-run.png": {
|
|
47
|
+
"types": "./dist/assets/titi-run.png.d.ts",
|
|
48
|
+
"browser": "./dist/assets/titi-run.png",
|
|
49
|
+
"node": "./dist/runtime-assets/titi-run-url.js",
|
|
50
|
+
"default": "./dist/assets/titi-run.png"
|
|
45
51
|
}
|
|
46
52
|
},
|
|
47
53
|
"files": [
|
|
@@ -54,7 +60,7 @@
|
|
|
54
60
|
"directory": "packages/commerce/web"
|
|
55
61
|
},
|
|
56
62
|
"dependencies": {
|
|
57
|
-
"@tutti-os/ui-system": "0.0.
|
|
63
|
+
"@tutti-os/ui-system": "0.0.255"
|
|
58
64
|
},
|
|
59
65
|
"devDependencies": {
|
|
60
66
|
"@testing-library/jest-dom": "^6.9.1",
|