@streamoid/settings 0.3.3 → 0.3.5

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/index.js CHANGED
@@ -1237,7 +1237,11 @@ var T4 = {
1237
1237
  tertiary: "var(--alias-text---icons-tertiary)",
1238
1238
  muted: "var(--alias-text---icons-muted)",
1239
1239
  inverse: "var(--alias-text---icons-inverse)",
1240
- surface: "var(--alias-surface-subtleraised)",
1240
+ // Grey modal shell so the nested white panels (app rows, store access) separate
1241
+ // from it — matches Create Workspace (workspace-modal). Dark-identical: both
1242
+ // surface-subtleraised and neutral-825 are #1f1f1f in dark; in light it's
1243
+ // #dbdbdb (grey) instead of #ffffff (white).
1244
+ surface: "var(--primitives-neutral-825)",
1241
1245
  base: "var(--alias-surface-base)",
1242
1246
  canvasBase: "var(--alias-surface-canvasbase)",
1243
1247
  fillPlus: "var(--alias-fill-neutral-neutralplus)",
@@ -3394,6 +3398,90 @@ var import_react8 = require("react");
3394
3398
  var import_ui5 = require("@streamoid/ui");
3395
3399
  var import_icons5 = require("@streamoid/icons");
3396
3400
 
3401
+ // src/plan-comparison-data.ts
3402
+ var PLAN_COMPARISON_COLUMNS = ["Free", "Pro", "Enterprise"];
3403
+ var PLAN_COMPARISON_NOTE = "Credits roll over monthly and only expire if your plan is no longer active";
3404
+ var PLAN_COMPARISON_SECTIONS = [
3405
+ {
3406
+ rows: [{ label: "Usage volume", values: ["Limited", "Higher limits", "Unlimited"] }]
3407
+ },
3408
+ {
3409
+ header: "Artifax (Design & Insights)",
3410
+ rows: [
3411
+ { label: "Priority processing", values: ["Low", "Medium", "High"] },
3412
+ { label: "Tracked Brands", values: ["3 brands included", "5 brands included", "Unlimited"] },
3413
+ { label: "Custom brand scraping", values: ["-", "Included", "Included"] },
3414
+ { label: "Tracked news terms", values: ["-", "Up to 5 news terms", "Unlimited"] },
3415
+ { label: "Pattern, design & graphic generation", values: ["Up to 60 images", "Up to 200 images", "Unlimited"] },
3416
+ { label: "Vectorization & colorways", values: ["Up to 60 images", "Up to 200 images", "Unlimited"] },
3417
+ { label: "Background removal", values: ["Up to 300 images", "Up to 1,000 images", "Unlimited"] },
3418
+ { label: "Range planning", values: ["Up to 3 plans", "Up to 10 plans", "Unlimited"] },
3419
+ { label: "Tech packs", values: ["Manual fill", "Up to 5 tech packs", "Unlimited"] },
3420
+ { label: "Automated moodboards", values: ["Up to 20 moodboards", "Up to 66 moodboards", "Unlimited"] },
3421
+ { label: "Export & download vector assets", values: ["Free", "Free", "Free"] }
3422
+ ]
3423
+ },
3424
+ {
3425
+ header: "Photogenix (Imagery & Video)",
3426
+ rows: [
3427
+ { label: "Priority processing", values: ["Low", "Medium", "High"] },
3428
+ { label: "Image generation", values: ["Up to 60 images", "Up to 200 images", "Unlimited"] },
3429
+ { label: "Image watermarks", values: ["Watermarked", "No watermark", "No watermark"] },
3430
+ { label: "Image editing", values: ["Up to 300 edits", "Up to 1,000 edits", "Unlimited"] },
3431
+ { label: "Video generation from image", values: ["Up to 20 videos", "Up to 66 videos", "Unlimited"] },
3432
+ { label: "Video with background changes", values: ["Up to 15 videos", "Up to 50 videos", "Unlimited"] },
3433
+ { label: "Video Advertisement generation", values: ["-", "Included", "Included"] },
3434
+ { label: "Automated shoot configuration", values: ["Up to 300 products", "Up to 1,000 products", "Unlimited"] },
3435
+ { label: "UGC content creation", values: ["Up to 15 outputs", "Up to 50 outputs", "Unlimited"] },
3436
+ { label: "Marketplace exports", values: ["Up to 300 exports", "Up to 1,000 exports", "Unlimited"] }
3437
+ ]
3438
+ },
3439
+ {
3440
+ header: "Catalogix (Cataloging & Listing)",
3441
+ rows: [
3442
+ { label: "Priority processing", values: ["Low", "Medium", "High"] },
3443
+ { label: "Data import & mapping", values: ["Free", "Free", "Free"] },
3444
+ { label: "Attributes from images (express)", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3445
+ { label: "Attributes from images (precise)", values: ["Up to 42 styles", "Up to 142 styles", "Unlimited"] },
3446
+ // Blank-label sub-row per the design export (values present, no label).
3447
+ { label: "", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3448
+ { label: "Background removal", values: ["Up to 60 styles", "Up to 200 styles", "Unlimited"] },
3449
+ { label: "Identify image type (pose)", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3450
+ { label: "Extra images (detail shots)", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3451
+ // Blank-label sub-row per the design export.
3452
+ { label: "", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3453
+ { label: "Product titles & descriptions", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3454
+ { label: "SEO content", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3455
+ { label: "Size charts", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3456
+ { label: "Translation (data & images)", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3457
+ { label: "Automated quality checks", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] }
3458
+ ]
3459
+ },
3460
+ {
3461
+ header: "Security & Compliance",
3462
+ rows: [
3463
+ { label: "SSO / SAML", values: ["-", "-", "Included"] },
3464
+ { label: "Role-based access control", values: ["-", "-", "Included"] },
3465
+ { label: "Audit logs", values: ["-", "-", "Included"] },
3466
+ { label: "Data residency / region controls", values: ["-", "-", "Included"] },
3467
+ { label: "Custom data retention & DPA", values: ["-", "-", "Included"] }
3468
+ ]
3469
+ },
3470
+ {
3471
+ header: "Support",
3472
+ rows: [
3473
+ { label: "Support level", values: ["Community / docs", "Standard support", "Dedicated support + customer success manager"] },
3474
+ { label: "SLA", values: ["-", "-", "Custom SLA"] },
3475
+ { label: "Onboarding", values: ["Self-serve", "Self-serve", "Guided onboarding & training"] }
3476
+ ]
3477
+ }
3478
+ ];
3479
+ var PLAN_TAGLINES = {
3480
+ free: "Try the AI agents and automate your first workflows",
3481
+ pro: "Scale your team's output and get to market faster",
3482
+ enterprise: "For high-volume brands, agencies, and marketplaces that need custom scale, integrations, and support"
3483
+ };
3484
+
3397
3485
  // src/export-date-modal.tsx
3398
3486
  var import_react6 = require("react");
3399
3487
  var import_icons3 = require("@streamoid/icons");
@@ -3913,9 +4001,9 @@ function BuyCreditsModal({
3913
4001
  {
3914
4002
  className: "flex flex-col relative",
3915
4003
  style: {
3916
- backgroundColor: "var(--alias-surface-subtle)",
4004
+ backgroundColor: "var(--primitives-neutral-825)",
3917
4005
  borderRadius: "var(--radius-4xl)",
3918
- border: "1px solid var(--alias-border-divider)",
4006
+ border: "1px solid var(--alias-border-subtle)",
3919
4007
  width: 480,
3920
4008
  maxWidth: "90vw"
3921
4009
  },
@@ -3977,6 +4065,7 @@ function BuyCreditsModal({
3977
4065
  {
3978
4066
  className: "flex items-center flex-1 min-w-0",
3979
4067
  style: {
4068
+ backgroundColor: "var(--alias-fill-neutral-neutralplus)",
3980
4069
  borderRadius: "var(--radius-xl)",
3981
4070
  padding: "var(--spacing-xl) var(--spacing-3xl)",
3982
4071
  border: "1.25px solid var(--alias-border-default)",
@@ -4235,232 +4324,6 @@ function getCurrencySymbolByCountry(country) {
4235
4324
  function formatCredits(n) {
4236
4325
  return n.toLocaleString("en-US");
4237
4326
  }
4238
- var SECTION_ICON_PROPS = {
4239
- color: "var(--alias-text---icons-tertiary)",
4240
- size: 24,
4241
- strokeWidth: 1.5
4242
- };
4243
- var PLAN_FEATURES_BY_AMOUNT = {
4244
- // Free — 300 credits
4245
- 0: [
4246
- {
4247
- section: "Artifax",
4248
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconArtifacts, { ...SECTION_ICON_PROPS }),
4249
- features: [
4250
- "Generate up to 60 images",
4251
- "Fill techpacks manually",
4252
- "Monitor up to 3 essential brands"
4253
- ]
4254
- },
4255
- {
4256
- section: "Photogenix",
4257
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconPhotogenix, { ...SECTION_ICON_PROPS }),
4258
- features: [
4259
- "Generate up to 60 images",
4260
- "Generate up to 18 videos (8s)",
4261
- "Retouch up to 300 images"
4262
- ]
4263
- },
4264
- {
4265
- section: "Catalogix",
4266
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconCatalogix, { ...SECTION_ICON_PROPS }),
4267
- features: [
4268
- "Upload 50 products per store",
4269
- "Catalog up to 75 products",
4270
- "List up to 30 template files"
4271
- ]
4272
- }
4273
- ],
4274
- // PRO $49.99 — 1,000 credits
4275
- 4999: [
4276
- {
4277
- section: "Artifax",
4278
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconArtifacts, { ...SECTION_ICON_PROPS }),
4279
- features: [
4280
- "Generate up to 200 images",
4281
- "Autofill up to 5 techpacks",
4282
- "Monitor up to 10 custom brands"
4283
- ]
4284
- },
4285
- {
4286
- section: "Photogenix",
4287
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconPhotogenix, { ...SECTION_ICON_PROPS }),
4288
- features: [
4289
- "Generate up to 200 images",
4290
- "Generate up to 60 videos (8s)",
4291
- "Retouch up to 1,000 images"
4292
- ]
4293
- },
4294
- {
4295
- section: "Catalogix",
4296
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconCatalogix, { ...SECTION_ICON_PROPS }),
4297
- features: [
4298
- "Upload 100k products per store",
4299
- "Catalog up to 250 products",
4300
- "List up to 100 template files"
4301
- ]
4302
- }
4303
- ],
4304
- // PRO $149.99 — 3,000 credits
4305
- 14999: [
4306
- {
4307
- section: "Artifax",
4308
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconArtifacts, { ...SECTION_ICON_PROPS }),
4309
- features: [
4310
- "Generate up to 600 images",
4311
- "Autofill up to 15 techpacks",
4312
- "Monitor up to 30 custom brands"
4313
- ]
4314
- },
4315
- {
4316
- section: "Photogenix",
4317
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconPhotogenix, { ...SECTION_ICON_PROPS }),
4318
- features: [
4319
- "Generate up to 600 images",
4320
- "Generate up to 180 videos (8s)",
4321
- "Retouch up to 3,000 images"
4322
- ]
4323
- },
4324
- {
4325
- section: "Catalogix",
4326
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconCatalogix, { ...SECTION_ICON_PROPS }),
4327
- features: [
4328
- "Upload 100k products per store",
4329
- "Catalog up to 750 products",
4330
- "List up to 300 template files"
4331
- ]
4332
- }
4333
- ],
4334
- // PRO $349.99 — 8,000 credits
4335
- 34999: [
4336
- {
4337
- section: "Artifax",
4338
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconArtifacts, { ...SECTION_ICON_PROPS }),
4339
- features: [
4340
- "Generate up to 1,600 images",
4341
- "Autofill up to 40 techpacks",
4342
- "Monitor up to 80 custom brands"
4343
- ]
4344
- },
4345
- {
4346
- section: "Photogenix",
4347
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconPhotogenix, { ...SECTION_ICON_PROPS }),
4348
- features: [
4349
- "Generate up to 1,600 images",
4350
- "Generate up to 480 videos (8s)",
4351
- "Retouch up to 8,000 images"
4352
- ]
4353
- },
4354
- {
4355
- section: "Catalogix",
4356
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconCatalogix, { ...SECTION_ICON_PROPS }),
4357
- features: [
4358
- "Upload 100k products per store",
4359
- "Catalog up to 2,000 products",
4360
- "List up to 800 template files"
4361
- ]
4362
- }
4363
- ],
4364
- // PRO $549.99 — 15,000 credits
4365
- 54999: [
4366
- {
4367
- section: "Artifax",
4368
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconArtifacts, { ...SECTION_ICON_PROPS }),
4369
- features: [
4370
- "Generate up to 3,000 images",
4371
- "Autofill up to 75 techpacks",
4372
- "Monitor up to 150 custom brands"
4373
- ]
4374
- },
4375
- {
4376
- section: "Photogenix",
4377
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconPhotogenix, { ...SECTION_ICON_PROPS }),
4378
- features: [
4379
- "Generate up to 3,000 images",
4380
- "Generate up to 900 videos (8s)",
4381
- "Retouch up to 15,000 images"
4382
- ]
4383
- },
4384
- {
4385
- section: "Catalogix",
4386
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconCatalogix, { ...SECTION_ICON_PROPS }),
4387
- features: [
4388
- "Upload 100k products per store",
4389
- "Catalog up to 3,750 products",
4390
- "List up to 1,500 template files"
4391
- ]
4392
- }
4393
- ],
4394
- // PRO $1,049.99 — 30,000 credits
4395
- 104999: [
4396
- {
4397
- section: "Artifax",
4398
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconArtifacts, { ...SECTION_ICON_PROPS }),
4399
- features: [
4400
- "Generate up to 6,000 images",
4401
- "Autofill up to 150 techpacks",
4402
- "Monitor up to 300 custom brands"
4403
- ]
4404
- },
4405
- {
4406
- section: "Photogenix",
4407
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconPhotogenix, { ...SECTION_ICON_PROPS }),
4408
- features: [
4409
- "Generate up to 6,000 images",
4410
- "Generate up to 1,800 videos (8s)",
4411
- "Retouch up to 30,000 images"
4412
- ]
4413
- },
4414
- {
4415
- section: "Catalogix",
4416
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconCatalogix, { ...SECTION_ICON_PROPS }),
4417
- features: [
4418
- "Upload 100k products per store",
4419
- "Catalog up to 7,500 products",
4420
- "List up to 3,000 template files"
4421
- ]
4422
- }
4423
- ]
4424
- };
4425
- var ENTERPRISE_FEATURES = [
4426
- {
4427
- section: "Artifax",
4428
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconArtifacts, { ...SECTION_ICON_PROPS }),
4429
- features: [
4430
- "Custom image generations",
4431
- "Custom techpack autofilled",
4432
- "Custom number of brands"
4433
- ]
4434
- },
4435
- {
4436
- section: "Photogenix",
4437
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconPhotogenix, { ...SECTION_ICON_PROPS }),
4438
- features: [
4439
- "Custom image generations",
4440
- "Custom video generations",
4441
- "Custom image retouches"
4442
- ]
4443
- },
4444
- {
4445
- section: "Catalogix",
4446
- icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconCatalogix, { ...SECTION_ICON_PROPS }),
4447
- features: [
4448
- "Custom product uploads",
4449
- "Custom product cataloging",
4450
- "Custom template file listings"
4451
- ]
4452
- }
4453
- ];
4454
- function getPlanFeatures(amount) {
4455
- if (PLAN_FEATURES_BY_AMOUNT[amount]) return PLAN_FEATURES_BY_AMOUNT[amount];
4456
- const tiers = Object.keys(PLAN_FEATURES_BY_AMOUNT).map(Number).sort((a, b) => a - b);
4457
- let best = tiers[0];
4458
- for (const t of tiers) {
4459
- if (t <= amount) best = t;
4460
- else break;
4461
- }
4462
- return PLAN_FEATURES_BY_AMOUNT[best] ?? [];
4463
- }
4464
4327
  function formatNextBillingDateLabel(iso) {
4465
4328
  if (iso) {
4466
4329
  const parsed = new Date(iso);
@@ -4490,6 +4353,22 @@ function formatEffectiveDateLabel(value) {
4490
4353
  year: "numeric"
4491
4354
  });
4492
4355
  }
4356
+ function useIsLightTheme() {
4357
+ const read = () => typeof document !== "undefined" && document.documentElement.getAttribute("data-theme") === "Light";
4358
+ const [isLight, setIsLight] = (0, import_react8.useState)(read);
4359
+ (0, import_react8.useEffect)(() => {
4360
+ if (typeof document === "undefined") return;
4361
+ const target = document.documentElement;
4362
+ const observer = new MutationObserver(() => setIsLight(read()));
4363
+ observer.observe(target, {
4364
+ attributes: true,
4365
+ attributeFilter: ["data-theme"]
4366
+ });
4367
+ setIsLight(read());
4368
+ return () => observer.disconnect();
4369
+ }, []);
4370
+ return isLight;
4371
+ }
4493
4372
  function UpdateSubscriptionModal({
4494
4373
  open,
4495
4374
  currentPlanName,
@@ -4501,6 +4380,9 @@ function UpdateSubscriptionModal({
4501
4380
  onClose,
4502
4381
  onProceed
4503
4382
  }) {
4383
+ const isLight = useIsLightTheme();
4384
+ const modalSurface = isLight ? "#ffffff" : "var(--alias-surface-base)";
4385
+ const cardBorder = isLight ? "1px solid var(--alias-border-subtle)" : "1px solid var(--alias-border-divider)";
4504
4386
  if (!open) return null;
4505
4387
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4506
4388
  "div",
@@ -4515,7 +4397,7 @@ function UpdateSubscriptionModal({
4515
4397
  {
4516
4398
  className: "flex flex-col w-full max-w-xl",
4517
4399
  style: {
4518
- backgroundColor: "var(--alias-surface-base)",
4400
+ backgroundColor: modalSurface,
4519
4401
  borderRadius: "var(--radius-3xl)",
4520
4402
  border: "1px solid var(--alias-border-subtle)",
4521
4403
  padding: "var(--spacing-6xl)",
@@ -4584,6 +4466,7 @@ function UpdateSubscriptionModal({
4584
4466
  className: "flex items-center w-full",
4585
4467
  style: {
4586
4468
  backgroundColor: "var(--alias-fill-neutral-neutral)",
4469
+ border: cardBorder,
4587
4470
  borderRadius: "var(--radius-3xl)",
4588
4471
  padding: "var(--spacing-3xl)"
4589
4472
  },
@@ -4641,7 +4524,8 @@ function UpdateSubscriptionModal({
4641
4524
  width: 36,
4642
4525
  height: 36,
4643
4526
  borderRadius: "var(--radius-xl)",
4644
- backgroundColor: "var(--alias-fill-neutral-neutral)"
4527
+ backgroundColor: "var(--alias-fill-neutral-neutral)",
4528
+ border: cardBorder
4645
4529
  },
4646
4530
  children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconDoubleArrow, { className: "w-4 h-4", color: MUTED_COLOR })
4647
4531
  }
@@ -4668,6 +4552,7 @@ function UpdateSubscriptionModal({
4668
4552
  className: "flex items-center w-full",
4669
4553
  style: {
4670
4554
  backgroundColor: "var(--alias-fill-neutral-neutral)",
4555
+ border: cardBorder,
4671
4556
  borderRadius: "var(--radius-3xl)",
4672
4557
  padding: "var(--spacing-3xl)"
4673
4558
  },
@@ -4683,7 +4568,7 @@ function UpdateSubscriptionModal({
4683
4568
  lineHeight: "var(--line-height-line-height-xxl)",
4684
4569
  color: "var(--alias-text---icons-primary)"
4685
4570
  },
4686
- children: "Pro"
4571
+ children: nextPlanName || "Pro"
4687
4572
  }
4688
4573
  ),
4689
4574
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-col items-end", children: [
@@ -4795,8 +4680,10 @@ function UpdateSubscriptionModal({
4795
4680
  }
4796
4681
  );
4797
4682
  }
4683
+ var stripMonthly = (price) => price.replace(/\s*\/\s*month\s*$/i, "");
4798
4684
  function PlansView({
4799
4685
  onBack,
4686
+ hideHeader,
4800
4687
  products,
4801
4688
  currentPlanId,
4802
4689
  currentPlanEndDate,
@@ -4894,96 +4781,58 @@ function PlansView({
4894
4781
  backgroundSize: "24px 24px"
4895
4782
  },
4896
4783
  children: [
4897
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4784
+ !hideHeader && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4898
4785
  "div",
4899
4786
  {
4900
- className: "flex items-center shrink-0 w-full",
4787
+ className: "flex items-center justify-end shrink-0 w-full",
4901
4788
  style: { gap: "var(--spacing-lg)" },
4902
- children: [
4903
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4904
- "div",
4905
- {
4906
- className: "flex flex-col",
4907
- style: { gap: "var(--spacing-xs)", flex: 1, minWidth: 0 },
4908
- children: [
4909
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4910
- "p",
4911
- {
4912
- className: "min-w-0 truncate",
4913
- style: {
4914
- fontFamily: "var(--font-family-font-family-display)",
4915
- fontSize: "var(--font-size-font-size-xxl)",
4916
- fontWeight: 700,
4917
- lineHeight: "var(--line-height-line-height-xxl)",
4918
- color: "var(--alias-text---icons-primary)"
4919
- },
4920
- children: "Upgrade Plans"
4921
- }
4922
- ),
4923
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4924
- "p",
4925
- {
4926
- style: {
4927
- fontFamily: "var(--font-family-font-family-body)",
4928
- fontSize: "var(--font-size-font-size-sm)",
4929
- fontWeight: 400,
4930
- lineHeight: "var(--line-height-line-height-sm)",
4931
- color: "var(--alias-text---icons-muted)"
4932
- },
4933
- children: "Pick a plan based on your monthly usage and credit needs."
4934
- }
4935
- )
4936
- ]
4937
- }
4938
- ),
4939
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4940
- "div",
4941
- {
4942
- className: "flex items-center shrink-0 cursor-pointer",
4943
- style: {
4944
- gap: "var(--spacing-sm)",
4945
- padding: "var(--spacing-xs) var(--spacing-lg)",
4946
- borderRadius: "var(--radius-xl)",
4947
- height: 32,
4948
- border: "1px solid var(--alias-border-subtle)",
4949
- backgroundColor: "var(--alias-surface-base)"
4950
- },
4951
- onClick: onBack,
4952
- children: [
4953
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconLeft, { className: "w-4 h-4", color: MUTED_COLOR }),
4954
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4955
- "span",
4956
- {
4957
- style: {
4958
- fontFamily: "var(--font-family-font-family-body)",
4959
- fontSize: "var(--font-size-font-size-sm)",
4960
- fontWeight: 500,
4961
- lineHeight: "var(--line-height-line-height-sm)",
4962
- color: "var(--alias-text---icons-muted)"
4963
- },
4964
- children: "Back to billing"
4965
- }
4966
- )
4967
- ]
4968
- }
4969
- )
4970
- ]
4789
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4790
+ "div",
4791
+ {
4792
+ className: "flex items-center shrink-0 cursor-pointer",
4793
+ style: {
4794
+ gap: "var(--spacing-sm)",
4795
+ padding: "var(--spacing-xs) var(--spacing-lg)",
4796
+ borderRadius: "var(--radius-xl)",
4797
+ height: 32,
4798
+ border: "1px solid var(--alias-border-subtle)",
4799
+ backgroundColor: "var(--alias-surface-base)"
4800
+ },
4801
+ onClick: onBack,
4802
+ children: [
4803
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconLeft, { className: "w-4 h-4", color: MUTED_COLOR }),
4804
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4805
+ "span",
4806
+ {
4807
+ style: {
4808
+ fontFamily: "var(--font-family-font-family-body)",
4809
+ fontSize: "var(--font-size-font-size-sm)",
4810
+ fontWeight: 500,
4811
+ lineHeight: "var(--line-height-line-height-sm)",
4812
+ color: "var(--alias-text---icons-muted)"
4813
+ },
4814
+ children: "Back to billing"
4815
+ }
4816
+ )
4817
+ ]
4818
+ }
4819
+ )
4971
4820
  }
4972
4821
  ),
4973
4822
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4974
4823
  "div",
4975
4824
  {
4976
4825
  className: "grid w-full grid-cols-1 md:grid-cols-2 xl:grid-cols-3 items-stretch",
4977
- style: { gap: "var(--spacing-6xl)" },
4826
+ style: { gap: "var(--spacing-8xl)" },
4978
4827
  children: [
4979
4828
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4980
4829
  import_ui5.ScPlanCard,
4981
4830
  {
4982
4831
  planName: freePlan?.planName || "Free",
4983
- price: freePlan?.price || `${workspaceCurrencySymbol}0`,
4832
+ price: stripMonthly(freePlan?.price || `${workspaceCurrencySymbol}0`),
4984
4833
  credits: freePlan?.credits || "3,000 credits",
4985
4834
  type: "free",
4986
- features: getPlanFeatures(freePlan?.amount ?? 0),
4835
+ tagline: PLAN_TAGLINES.free,
4987
4836
  buttonText: isFreeActionLoading ? "Processing..." : freePlan?.isCurrent ? "Current plan" : "Downgrade to free",
4988
4837
  buttonState: freePlan?.isCurrent || isFreeActionLoading ? "disabled" : "default",
4989
4838
  buttonVariant: "secondary",
@@ -5010,12 +4859,10 @@ function PlansView({
5010
4859
  import_ui5.ScPlanCard,
5011
4860
  {
5012
4861
  planName: "Pro",
5013
- price: selectedMiddlePlan?.price || "\u2014",
4862
+ price: stripMonthly(selectedMiddlePlan?.price || "\u2014"),
5014
4863
  credits: selectedMiddlePlan?.credits || "\u2014",
5015
4864
  type: "popular",
5016
- features: getPlanFeatures(
5017
- selectedMiddlePlan?.amount ?? middlePlans[0]?.amount ?? 4999
5018
- ),
4865
+ tagline: PLAN_TAGLINES.pro,
5019
4866
  buttonText: isMiddleActionLoading ? "Processing..." : !selectedMiddlePlan ? "Select a plan" : selectedMiddlePlan.isCurrent ? "Current plan" : selectedMiddlePlan.amount > currentPlanAmount ? "Upgrade" : "Downgrade",
5020
4867
  buttonState: selectedMiddlePlan?.isCurrent || isMiddleActionLoading || !selectedMiddlePlan ? "disabled" : "default",
5021
4868
  buttonVariant: selectedMiddlePlan?.isCurrent ? "outline" : selectedMiddlePlan && selectedMiddlePlan.amount > currentPlanAmount ? "primary" : "secondary",
@@ -5106,12 +4953,8 @@ function PlansView({
5106
4953
  {
5107
4954
  planName: "Enterprise",
5108
4955
  type: "custom",
5109
- description: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
5110
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { style: { marginBottom: 0 }, children: "The Enterprise plan is for teams operating at scale." }),
5111
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("br", {}),
5112
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { style: { marginBottom: 0 }, children: "Get expanded capacity, flexible usage options, and dedicated support to manage large production volumes and complex catalogs with confidence." })
5113
- ] }),
5114
- buttonText: "Contact us",
4956
+ tagline: PLAN_TAGLINES.enterprise,
4957
+ buttonText: "Contact Sales",
5115
4958
  buttonVariant: "secondary",
5116
4959
  onUpgrade: () => {
5117
4960
  window.open("https://cal.com/streamoid/30min", "_blank");
@@ -5123,17 +4966,13 @@ function PlansView({
5123
4966
  }
5124
4967
  ),
5125
4968
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
5126
- "p",
4969
+ import_ui5.ScPlanComparison,
5127
4970
  {
5128
- className: "w-full text-center",
5129
- style: {
5130
- fontFamily: "var(--font-family-font-family-body)",
5131
- fontSize: "var(--font-size-font-size-sm)",
5132
- fontWeight: 400,
5133
- lineHeight: "var(--line-height-line-height-sm)",
5134
- color: "var(--alias-text---icons-muted)"
5135
- },
5136
- children: "Credits expire monthly"
4971
+ layout: "table",
4972
+ columns: [...PLAN_COMPARISON_COLUMNS],
4973
+ note: PLAN_COMPARISON_NOTE,
4974
+ sections: PLAN_COMPARISON_SECTIONS,
4975
+ highlightColumnIndex: 1
5137
4976
  }
5138
4977
  ),
5139
4978
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
@@ -5523,7 +5362,9 @@ function UsageLogsTable({
5523
5362
  );
5524
5363
  }
5525
5364
  function BillingContent({
5526
- embedded = false
5365
+ embedded = false,
5366
+ showPlans: showPlansProp,
5367
+ onShowPlansChange
5527
5368
  } = {}) {
5528
5369
  const { auth, workspace, api, toast, navigation } = useSettingsAdapters();
5529
5370
  const user = auth.user;
@@ -5536,7 +5377,12 @@ function BillingContent({
5536
5377
  return `${window.location.origin}${window.location.pathname}`;
5537
5378
  };
5538
5379
  const [activeTab, setActiveTab] = (0, import_react8.useState)("invoice");
5539
- const [showPlans, setShowPlans] = (0, import_react8.useState)(false);
5380
+ const [showPlansInternal, setShowPlansInternal] = (0, import_react8.useState)(false);
5381
+ const showPlans = showPlansProp ?? showPlansInternal;
5382
+ const setShowPlans = (next) => {
5383
+ if (onShowPlansChange) onShowPlansChange(next);
5384
+ else setShowPlansInternal(next);
5385
+ };
5540
5386
  const [showExportModal, setShowExportModal] = (0, import_react8.useState)(false);
5541
5387
  const [showBuyCreditsModal, setShowBuyCreditsModal] = (0, import_react8.useState)(false);
5542
5388
  const [subscription, setSubscription] = (0, import_react8.useState)(null);
@@ -5999,6 +5845,7 @@ function BillingContent({
5999
5845
  PlansView,
6000
5846
  {
6001
5847
  onBack: () => setShowPlans(false),
5848
+ hideHeader: Boolean(onShowPlansChange),
6002
5849
  products,
6003
5850
  currentPlanId: subscription?.plan?.id,
6004
5851
  currentPlanEndDate: subscription?.plan?.subscriptionEndDate,
@@ -7843,6 +7690,11 @@ function SettingsContentInner({ activeTab }) {
7843
7690
  const [teamInviteOpen, setTeamInviteOpen] = (0, import_react10.useState)(false);
7844
7691
  const [tokenShowRevoked, setTokenShowRevoked] = (0, import_react10.useState)(false);
7845
7692
  const [tokenCreateOpen, setTokenCreateOpen] = (0, import_react10.useState)(false);
7693
+ const [billingShowPlans, setBillingShowPlans] = (0, import_react10.useState)(false);
7694
+ const isBillingPlans = activeTab === "billing" && billingShowPlans;
7695
+ (0, import_react10.useEffect)(() => {
7696
+ if (activeTab !== "billing") setBillingShowPlans(false);
7697
+ }, [activeTab]);
7846
7698
  const [localWorkspaces, setLocalWorkspaces] = (0, import_react10.useState)(null);
7847
7699
  const [wsModalOpen, setWsModalOpen] = (0, import_react10.useState)(false);
7848
7700
  const [wsModalMode, setWsModalMode] = (0, import_react10.useState)("create");
@@ -8135,8 +7987,55 @@ function SettingsContentInner({ activeTab }) {
8135
7987
  },
8136
7988
  children: TAB_LABELS[activeTab]
8137
7989
  }
8138
- )
7990
+ ),
7991
+ isBillingPlans && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
7992
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_icons7.SiconRight, { className: "w-6 h-6 shrink-0", color: "var(--alias-text---icons-primary)" }),
7993
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
7994
+ "span",
7995
+ {
7996
+ style: {
7997
+ fontFamily: "var(--font-family-font-family-body)",
7998
+ fontSize: "var(--font-size-font-size-xl)",
7999
+ fontWeight: 500,
8000
+ lineHeight: "var(--line-height-line-height-xl)",
8001
+ color: "var(--alias-text---icons-primary)"
8002
+ },
8003
+ children: "Plans"
8004
+ }
8005
+ )
8006
+ ] })
8139
8007
  ] }),
8008
+ isBillingPlans && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
8009
+ "div",
8010
+ {
8011
+ className: "flex items-center shrink-0 cursor-pointer",
8012
+ style: {
8013
+ gap: "var(--spacing-sm)",
8014
+ padding: "var(--spacing-xs) var(--spacing-lg)",
8015
+ borderRadius: "var(--radius-xl)",
8016
+ height: 32,
8017
+ border: "1px solid var(--alias-border-subtle)",
8018
+ backgroundColor: "var(--alias-surface-base)"
8019
+ },
8020
+ onClick: () => setBillingShowPlans(false),
8021
+ children: [
8022
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_icons7.SiconLeft, { className: "w-4 h-4", color: "var(--alias-text---icons-muted)" }),
8023
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8024
+ "span",
8025
+ {
8026
+ style: {
8027
+ fontFamily: "var(--font-family-font-family-body)",
8028
+ fontSize: "var(--font-size-font-size-sm)",
8029
+ fontWeight: 500,
8030
+ lineHeight: "var(--line-height-line-height-sm)",
8031
+ color: "var(--alias-text---icons-muted)"
8032
+ },
8033
+ children: "Back to billing"
8034
+ }
8035
+ )
8036
+ ]
8037
+ }
8038
+ ),
8140
8039
  activeTab === "workspace" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8141
8040
  import_ui9.ScButton,
8142
8041
  {
@@ -8208,7 +8107,7 @@ function SettingsContentInner({ activeTab }) {
8208
8107
  className: "flex items-start flex-1 min-h-0 w-full overflow-hidden",
8209
8108
  style: { gap: 20 },
8210
8109
  children: [
8211
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SettingsNav, { activeTab, onTabChange: setActiveTab }),
8110
+ !isBillingPlans && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SettingsNav, { activeTab, onTabChange: setActiveTab }),
8212
8111
  activeTab === "profile" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ProfileTab, {}),
8213
8112
  activeTab === "workspace" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8214
8113
  WorkspaceTab,
@@ -8233,7 +8132,14 @@ function SettingsContentInner({ activeTab }) {
8233
8132
  ),
8234
8133
  activeTab === "referral" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ReferralTab, {}),
8235
8134
  activeTab === "team" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col flex-1 min-w-0 min-h-0 h-full", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TeamsContent, { embedded: true, onInviteOpen: teamInviteOpen, onInviteOpenChange: setTeamInviteOpen }) }),
8236
- activeTab === "billing" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col flex-1 min-w-0 min-h-0 h-full", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BillingContent, { embedded: true }) }),
8135
+ activeTab === "billing" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col flex-1 min-w-0 min-h-0 h-full", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8136
+ BillingContent,
8137
+ {
8138
+ embedded: true,
8139
+ showPlans: billingShowPlans,
8140
+ onShowPlansChange: setBillingShowPlans
8141
+ }
8142
+ ) }),
8237
8143
  activeTab === "apikey" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col flex-1 min-w-0 min-h-0 h-full", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8238
8144
  TokensContent,
8239
8145
  {