@streamoid/settings 0.3.3 → 0.3.4

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.d.mts CHANGED
@@ -588,8 +588,12 @@ type IconProps = Omit<SVGProps<SVGSVGElement>, 'color' | 'strokeWidth' | 'width'
588
588
  };
589
589
  declare const SiconKey: ({ color, strokeWidth, size, ...props }: IconProps) => react_jsx_runtime.JSX.Element;
590
590
 
591
- declare function BillingContent({ embedded, }?: {
591
+ declare function BillingContent({ embedded, showPlans: showPlansProp, onShowPlansChange, }?: {
592
592
  embedded?: boolean;
593
+ /** Controlled "plans" sub-view flag. When provided, the host (settings
594
+ * wrapper) owns it so it can hide the sub-nav + show the Plans breadcrumb. */
595
+ showPlans?: boolean;
596
+ onShowPlansChange?: (open: boolean) => void;
593
597
  }): react_jsx_runtime.JSX.Element;
594
598
 
595
599
  declare function TeamsContent({ embedded, onInviteOpen, onInviteOpenChange, }?: {
package/dist/index.d.ts CHANGED
@@ -588,8 +588,12 @@ type IconProps = Omit<SVGProps<SVGSVGElement>, 'color' | 'strokeWidth' | 'width'
588
588
  };
589
589
  declare const SiconKey: ({ color, strokeWidth, size, ...props }: IconProps) => react_jsx_runtime.JSX.Element;
590
590
 
591
- declare function BillingContent({ embedded, }?: {
591
+ declare function BillingContent({ embedded, showPlans: showPlansProp, onShowPlansChange, }?: {
592
592
  embedded?: boolean;
593
+ /** Controlled "plans" sub-view flag. When provided, the host (settings
594
+ * wrapper) owns it so it can hide the sub-nav + show the Plans breadcrumb. */
595
+ showPlans?: boolean;
596
+ onShowPlansChange?: (open: boolean) => void;
593
597
  }): react_jsx_runtime.JSX.Element;
594
598
 
595
599
  declare function TeamsContent({ embedded, onInviteOpen, onInviteOpenChange, }?: {
package/dist/index.js CHANGED
@@ -3394,6 +3394,90 @@ var import_react8 = require("react");
3394
3394
  var import_ui5 = require("@streamoid/ui");
3395
3395
  var import_icons5 = require("@streamoid/icons");
3396
3396
 
3397
+ // src/plan-comparison-data.ts
3398
+ var PLAN_COMPARISON_COLUMNS = ["Free", "Pro", "Enterprise"];
3399
+ var PLAN_COMPARISON_NOTE = "Credits roll over monthly and only expire if your plan is no longer active";
3400
+ var PLAN_COMPARISON_SECTIONS = [
3401
+ {
3402
+ rows: [{ label: "Usage volume", values: ["Limited", "Higher limits", "Unlimited"] }]
3403
+ },
3404
+ {
3405
+ header: "Artifax (Design & Insights)",
3406
+ rows: [
3407
+ { label: "Priority processing", values: ["Low", "Medium", "High"] },
3408
+ { label: "Tracked Brands", values: ["3 brands included", "5 brands included", "Unlimited"] },
3409
+ { label: "Custom brand scraping", values: ["-", "Included", "Included"] },
3410
+ { label: "Tracked news terms", values: ["-", "Up to 5 news terms", "Unlimited"] },
3411
+ { label: "Pattern, design & graphic generation", values: ["Up to 60 images", "Up to 200 images", "Unlimited"] },
3412
+ { label: "Vectorization & colorways", values: ["Up to 60 images", "Up to 200 images", "Unlimited"] },
3413
+ { label: "Background removal", values: ["Up to 300 images", "Up to 1,000 images", "Unlimited"] },
3414
+ { label: "Range planning", values: ["Up to 3 plans", "Up to 10 plans", "Unlimited"] },
3415
+ { label: "Tech packs", values: ["Manual fill", "Up to 5 tech packs", "Unlimited"] },
3416
+ { label: "Automated moodboards", values: ["Up to 20 moodboards", "Up to 66 moodboards", "Unlimited"] },
3417
+ { label: "Export & download vector assets", values: ["Free", "Free", "Free"] }
3418
+ ]
3419
+ },
3420
+ {
3421
+ header: "Photogenix (Imagery & Video)",
3422
+ rows: [
3423
+ { label: "Priority processing", values: ["Low", "Medium", "High"] },
3424
+ { label: "Image generation", values: ["Up to 60 images", "Up to 200 images", "Unlimited"] },
3425
+ { label: "Image watermarks", values: ["Watermarked", "No watermark", "No watermark"] },
3426
+ { label: "Image editing", values: ["Up to 300 edits", "Up to 1,000 edits", "Unlimited"] },
3427
+ { label: "Video generation from image", values: ["Up to 20 videos", "Up to 66 videos", "Unlimited"] },
3428
+ { label: "Video with background changes", values: ["Up to 15 videos", "Up to 50 videos", "Unlimited"] },
3429
+ { label: "Video Advertisement generation", values: ["-", "Included", "Included"] },
3430
+ { label: "Automated shoot configuration", values: ["Up to 300 products", "Up to 1,000 products", "Unlimited"] },
3431
+ { label: "UGC content creation", values: ["Up to 15 outputs", "Up to 50 outputs", "Unlimited"] },
3432
+ { label: "Marketplace exports", values: ["Up to 300 exports", "Up to 1,000 exports", "Unlimited"] }
3433
+ ]
3434
+ },
3435
+ {
3436
+ header: "Catalogix (Cataloging & Listing)",
3437
+ rows: [
3438
+ { label: "Priority processing", values: ["Low", "Medium", "High"] },
3439
+ { label: "Data import & mapping", values: ["Free", "Free", "Free"] },
3440
+ { label: "Attributes from images (express)", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3441
+ { label: "Attributes from images (precise)", values: ["Up to 42 styles", "Up to 142 styles", "Unlimited"] },
3442
+ // Blank-label sub-row per the design export (values present, no label).
3443
+ { label: "", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3444
+ { label: "Background removal", values: ["Up to 60 styles", "Up to 200 styles", "Unlimited"] },
3445
+ { label: "Identify image type (pose)", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3446
+ { label: "Extra images (detail shots)", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3447
+ // Blank-label sub-row per the design export.
3448
+ { label: "", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3449
+ { label: "Product titles & descriptions", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3450
+ { label: "SEO content", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3451
+ { label: "Size charts", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] },
3452
+ { label: "Translation (data & images)", values: ["Up to 100 styles", "Up to 333 styles", "Unlimited"] },
3453
+ { label: "Automated quality checks", values: ["Up to 150 styles", "Up to 500 styles", "Unlimited"] }
3454
+ ]
3455
+ },
3456
+ {
3457
+ header: "Security & Compliance",
3458
+ rows: [
3459
+ { label: "SSO / SAML", values: ["-", "-", "Included"] },
3460
+ { label: "Role-based access control", values: ["-", "-", "Included"] },
3461
+ { label: "Audit logs", values: ["-", "-", "Included"] },
3462
+ { label: "Data residency / region controls", values: ["-", "-", "Included"] },
3463
+ { label: "Custom data retention & DPA", values: ["-", "-", "Included"] }
3464
+ ]
3465
+ },
3466
+ {
3467
+ header: "Support",
3468
+ rows: [
3469
+ { label: "Support level", values: ["Community / docs", "Standard support", "Dedicated support + customer success manager"] },
3470
+ { label: "SLA", values: ["-", "-", "Custom SLA"] },
3471
+ { label: "Onboarding", values: ["Self-serve", "Self-serve", "Guided onboarding & training"] }
3472
+ ]
3473
+ }
3474
+ ];
3475
+ var PLAN_TAGLINES = {
3476
+ free: "Try the AI agents and automate your first workflows",
3477
+ pro: "Scale your team's output and get to market faster",
3478
+ enterprise: "For high-volume brands, agencies, and marketplaces that need custom scale, integrations, and support"
3479
+ };
3480
+
3397
3481
  // src/export-date-modal.tsx
3398
3482
  var import_react6 = require("react");
3399
3483
  var import_icons3 = require("@streamoid/icons");
@@ -4235,232 +4319,6 @@ function getCurrencySymbolByCountry(country) {
4235
4319
  function formatCredits(n) {
4236
4320
  return n.toLocaleString("en-US");
4237
4321
  }
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
4322
  function formatNextBillingDateLabel(iso) {
4465
4323
  if (iso) {
4466
4324
  const parsed = new Date(iso);
@@ -4795,8 +4653,10 @@ function UpdateSubscriptionModal({
4795
4653
  }
4796
4654
  );
4797
4655
  }
4656
+ var stripMonthly = (price) => price.replace(/\s*\/\s*month\s*$/i, "");
4798
4657
  function PlansView({
4799
4658
  onBack,
4659
+ hideHeader,
4800
4660
  products,
4801
4661
  currentPlanId,
4802
4662
  currentPlanEndDate,
@@ -4894,80 +4754,42 @@ function PlansView({
4894
4754
  backgroundSize: "24px 24px"
4895
4755
  },
4896
4756
  children: [
4897
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4757
+ !hideHeader && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4898
4758
  "div",
4899
4759
  {
4900
- className: "flex items-center shrink-0 w-full",
4760
+ className: "flex items-center justify-end shrink-0 w-full",
4901
4761
  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
- ]
4762
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4763
+ "div",
4764
+ {
4765
+ className: "flex items-center shrink-0 cursor-pointer",
4766
+ style: {
4767
+ gap: "var(--spacing-sm)",
4768
+ padding: "var(--spacing-xs) var(--spacing-lg)",
4769
+ borderRadius: "var(--radius-xl)",
4770
+ height: 32,
4771
+ border: "1px solid var(--alias-border-subtle)",
4772
+ backgroundColor: "var(--alias-surface-base)"
4773
+ },
4774
+ onClick: onBack,
4775
+ children: [
4776
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.SiconLeft, { className: "w-4 h-4", color: MUTED_COLOR }),
4777
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4778
+ "span",
4779
+ {
4780
+ style: {
4781
+ fontFamily: "var(--font-family-font-family-body)",
4782
+ fontSize: "var(--font-size-font-size-sm)",
4783
+ fontWeight: 500,
4784
+ lineHeight: "var(--line-height-line-height-sm)",
4785
+ color: "var(--alias-text---icons-muted)"
4786
+ },
4787
+ children: "Back to billing"
4788
+ }
4789
+ )
4790
+ ]
4791
+ }
4792
+ )
4971
4793
  }
4972
4794
  ),
4973
4795
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
@@ -4980,10 +4802,10 @@ function PlansView({
4980
4802
  import_ui5.ScPlanCard,
4981
4803
  {
4982
4804
  planName: freePlan?.planName || "Free",
4983
- price: freePlan?.price || `${workspaceCurrencySymbol}0`,
4805
+ price: stripMonthly(freePlan?.price || `${workspaceCurrencySymbol}0`),
4984
4806
  credits: freePlan?.credits || "3,000 credits",
4985
4807
  type: "free",
4986
- features: getPlanFeatures(freePlan?.amount ?? 0),
4808
+ tagline: PLAN_TAGLINES.free,
4987
4809
  buttonText: isFreeActionLoading ? "Processing..." : freePlan?.isCurrent ? "Current plan" : "Downgrade to free",
4988
4810
  buttonState: freePlan?.isCurrent || isFreeActionLoading ? "disabled" : "default",
4989
4811
  buttonVariant: "secondary",
@@ -5010,12 +4832,10 @@ function PlansView({
5010
4832
  import_ui5.ScPlanCard,
5011
4833
  {
5012
4834
  planName: "Pro",
5013
- price: selectedMiddlePlan?.price || "\u2014",
4835
+ price: stripMonthly(selectedMiddlePlan?.price || "\u2014"),
5014
4836
  credits: selectedMiddlePlan?.credits || "\u2014",
5015
4837
  type: "popular",
5016
- features: getPlanFeatures(
5017
- selectedMiddlePlan?.amount ?? middlePlans[0]?.amount ?? 4999
5018
- ),
4838
+ tagline: PLAN_TAGLINES.pro,
5019
4839
  buttonText: isMiddleActionLoading ? "Processing..." : !selectedMiddlePlan ? "Select a plan" : selectedMiddlePlan.isCurrent ? "Current plan" : selectedMiddlePlan.amount > currentPlanAmount ? "Upgrade" : "Downgrade",
5020
4840
  buttonState: selectedMiddlePlan?.isCurrent || isMiddleActionLoading || !selectedMiddlePlan ? "disabled" : "default",
5021
4841
  buttonVariant: selectedMiddlePlan?.isCurrent ? "outline" : selectedMiddlePlan && selectedMiddlePlan.amount > currentPlanAmount ? "primary" : "secondary",
@@ -5106,12 +4926,8 @@ function PlansView({
5106
4926
  {
5107
4927
  planName: "Enterprise",
5108
4928
  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",
4929
+ tagline: PLAN_TAGLINES.enterprise,
4930
+ buttonText: "Contact Sales",
5115
4931
  buttonVariant: "secondary",
5116
4932
  onUpgrade: () => {
5117
4933
  window.open("https://cal.com/streamoid/30min", "_blank");
@@ -5123,17 +4939,13 @@ function PlansView({
5123
4939
  }
5124
4940
  ),
5125
4941
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
5126
- "p",
4942
+ import_ui5.ScPlanComparison,
5127
4943
  {
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"
4944
+ layout: "table",
4945
+ columns: [...PLAN_COMPARISON_COLUMNS],
4946
+ note: PLAN_COMPARISON_NOTE,
4947
+ sections: PLAN_COMPARISON_SECTIONS,
4948
+ highlightColumnIndex: 1
5137
4949
  }
5138
4950
  ),
5139
4951
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
@@ -5523,7 +5335,9 @@ function UsageLogsTable({
5523
5335
  );
5524
5336
  }
5525
5337
  function BillingContent({
5526
- embedded = false
5338
+ embedded = false,
5339
+ showPlans: showPlansProp,
5340
+ onShowPlansChange
5527
5341
  } = {}) {
5528
5342
  const { auth, workspace, api, toast, navigation } = useSettingsAdapters();
5529
5343
  const user = auth.user;
@@ -5536,7 +5350,12 @@ function BillingContent({
5536
5350
  return `${window.location.origin}${window.location.pathname}`;
5537
5351
  };
5538
5352
  const [activeTab, setActiveTab] = (0, import_react8.useState)("invoice");
5539
- const [showPlans, setShowPlans] = (0, import_react8.useState)(false);
5353
+ const [showPlansInternal, setShowPlansInternal] = (0, import_react8.useState)(false);
5354
+ const showPlans = showPlansProp ?? showPlansInternal;
5355
+ const setShowPlans = (next) => {
5356
+ if (onShowPlansChange) onShowPlansChange(next);
5357
+ else setShowPlansInternal(next);
5358
+ };
5540
5359
  const [showExportModal, setShowExportModal] = (0, import_react8.useState)(false);
5541
5360
  const [showBuyCreditsModal, setShowBuyCreditsModal] = (0, import_react8.useState)(false);
5542
5361
  const [subscription, setSubscription] = (0, import_react8.useState)(null);
@@ -5999,6 +5818,7 @@ function BillingContent({
5999
5818
  PlansView,
6000
5819
  {
6001
5820
  onBack: () => setShowPlans(false),
5821
+ hideHeader: Boolean(onShowPlansChange),
6002
5822
  products,
6003
5823
  currentPlanId: subscription?.plan?.id,
6004
5824
  currentPlanEndDate: subscription?.plan?.subscriptionEndDate,
@@ -7843,6 +7663,11 @@ function SettingsContentInner({ activeTab }) {
7843
7663
  const [teamInviteOpen, setTeamInviteOpen] = (0, import_react10.useState)(false);
7844
7664
  const [tokenShowRevoked, setTokenShowRevoked] = (0, import_react10.useState)(false);
7845
7665
  const [tokenCreateOpen, setTokenCreateOpen] = (0, import_react10.useState)(false);
7666
+ const [billingShowPlans, setBillingShowPlans] = (0, import_react10.useState)(false);
7667
+ const isBillingPlans = activeTab === "billing" && billingShowPlans;
7668
+ (0, import_react10.useEffect)(() => {
7669
+ if (activeTab !== "billing") setBillingShowPlans(false);
7670
+ }, [activeTab]);
7846
7671
  const [localWorkspaces, setLocalWorkspaces] = (0, import_react10.useState)(null);
7847
7672
  const [wsModalOpen, setWsModalOpen] = (0, import_react10.useState)(false);
7848
7673
  const [wsModalMode, setWsModalMode] = (0, import_react10.useState)("create");
@@ -8135,8 +7960,55 @@ function SettingsContentInner({ activeTab }) {
8135
7960
  },
8136
7961
  children: TAB_LABELS[activeTab]
8137
7962
  }
8138
- )
7963
+ ),
7964
+ isBillingPlans && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
7965
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_icons7.SiconRight, { className: "w-6 h-6 shrink-0", color: "var(--alias-text---icons-primary)" }),
7966
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
7967
+ "span",
7968
+ {
7969
+ style: {
7970
+ fontFamily: "var(--font-family-font-family-body)",
7971
+ fontSize: "var(--font-size-font-size-xl)",
7972
+ fontWeight: 500,
7973
+ lineHeight: "var(--line-height-line-height-xl)",
7974
+ color: "var(--alias-text---icons-primary)"
7975
+ },
7976
+ children: "Plans"
7977
+ }
7978
+ )
7979
+ ] })
8139
7980
  ] }),
7981
+ isBillingPlans && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
7982
+ "div",
7983
+ {
7984
+ className: "flex items-center shrink-0 cursor-pointer",
7985
+ style: {
7986
+ gap: "var(--spacing-sm)",
7987
+ padding: "var(--spacing-xs) var(--spacing-lg)",
7988
+ borderRadius: "var(--radius-xl)",
7989
+ height: 32,
7990
+ border: "1px solid var(--alias-border-subtle)",
7991
+ backgroundColor: "var(--alias-surface-base)"
7992
+ },
7993
+ onClick: () => setBillingShowPlans(false),
7994
+ children: [
7995
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_icons7.SiconLeft, { className: "w-4 h-4", color: "var(--alias-text---icons-muted)" }),
7996
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
7997
+ "span",
7998
+ {
7999
+ style: {
8000
+ fontFamily: "var(--font-family-font-family-body)",
8001
+ fontSize: "var(--font-size-font-size-sm)",
8002
+ fontWeight: 500,
8003
+ lineHeight: "var(--line-height-line-height-sm)",
8004
+ color: "var(--alias-text---icons-muted)"
8005
+ },
8006
+ children: "Back to billing"
8007
+ }
8008
+ )
8009
+ ]
8010
+ }
8011
+ ),
8140
8012
  activeTab === "workspace" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8141
8013
  import_ui9.ScButton,
8142
8014
  {
@@ -8208,7 +8080,7 @@ function SettingsContentInner({ activeTab }) {
8208
8080
  className: "flex items-start flex-1 min-h-0 w-full overflow-hidden",
8209
8081
  style: { gap: 20 },
8210
8082
  children: [
8211
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SettingsNav, { activeTab, onTabChange: setActiveTab }),
8083
+ !isBillingPlans && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SettingsNav, { activeTab, onTabChange: setActiveTab }),
8212
8084
  activeTab === "profile" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ProfileTab, {}),
8213
8085
  activeTab === "workspace" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8214
8086
  WorkspaceTab,
@@ -8233,7 +8105,14 @@ function SettingsContentInner({ activeTab }) {
8233
8105
  ),
8234
8106
  activeTab === "referral" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ReferralTab, {}),
8235
8107
  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 }) }),
8108
+ 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)(
8109
+ BillingContent,
8110
+ {
8111
+ embedded: true,
8112
+ showPlans: billingShowPlans,
8113
+ onShowPlansChange: setBillingShowPlans
8114
+ }
8115
+ ) }),
8237
8116
  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
8117
  TokensContent,
8239
8118
  {