@feelflow/ffid-sdk 2.10.0 → 2.12.0

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.
@@ -457,9 +457,118 @@ function createBillingMethods(deps) {
457
457
  var EXT_PLANS_ENDPOINT = "/api/v1/subscriptions/ext/plans";
458
458
  var EXT_SUBSCRIPTION_ENDPOINT = "/api/v1/subscriptions/ext";
459
459
  var EXT_SUBSCRIBE_ENDPOINT = "/api/v1/subscriptions/ext/subscribe";
460
+ var FFIDSDKError = class extends Error {
461
+ code;
462
+ constructor(code, message) {
463
+ super(message);
464
+ this.name = "FFIDSDKError";
465
+ this.code = code;
466
+ }
467
+ };
460
468
  function isBlankString(value) {
461
469
  return typeof value !== "string" || value.trim() === "";
462
470
  }
471
+ var MALFORMED_PREVIEW_CODE = "MALFORMED_PLAN_CHANGE_PREVIEW";
472
+ var MALFORMED_SEAT_PREVIEW_CODE = "MALFORMED_SEAT_CHANGE_PREVIEW";
473
+ var SEAT_ESTIMATE_REASONS = /* @__PURE__ */ new Set(["no_stripe_data", "custom_pricing", "stripe_error"]);
474
+ function validatePlanChangePreview(preview) {
475
+ if (preview === null || typeof preview !== "object") {
476
+ throw new FFIDSDKError(
477
+ MALFORMED_PREVIEW_CODE,
478
+ "SDK: server returned malformed PlanChangePreview \u2014 expected object, got " + (preview === null ? "null" : typeof preview)
479
+ );
480
+ }
481
+ const p = preview;
482
+ const flag = p.willApplyAtPeriodEnd;
483
+ if (typeof flag !== "boolean") {
484
+ throw new FFIDSDKError(
485
+ MALFORMED_PREVIEW_CODE,
486
+ `SDK: server returned malformed PlanChangePreview \u2014 willApplyAtPeriodEnd must be boolean (got ${typeof flag})`
487
+ );
488
+ }
489
+ const { proratedAmount, effectiveDate } = p;
490
+ if (flag === true) {
491
+ if (proratedAmount !== 0) {
492
+ throw new FFIDSDKError(
493
+ MALFORMED_PREVIEW_CODE,
494
+ `SDK: server returned malformed PlanChangePreview \u2014 willApplyAtPeriodEnd=true requires proratedAmount=0 (got ${JSON.stringify(proratedAmount)})`
495
+ );
496
+ }
497
+ if (effectiveDate !== null && typeof effectiveDate !== "string") {
498
+ throw new FFIDSDKError(
499
+ MALFORMED_PREVIEW_CODE,
500
+ `SDK: server returned malformed PlanChangePreview \u2014 willApplyAtPeriodEnd=true requires effectiveDate to be string or null (got ${typeof effectiveDate})`
501
+ );
502
+ }
503
+ return;
504
+ }
505
+ if (effectiveDate !== null) {
506
+ throw new FFIDSDKError(
507
+ MALFORMED_PREVIEW_CODE,
508
+ `SDK: server returned malformed PlanChangePreview \u2014 willApplyAtPeriodEnd=false requires effectiveDate=null (got ${JSON.stringify(effectiveDate)})`
509
+ );
510
+ }
511
+ if (typeof proratedAmount !== "number") {
512
+ throw new FFIDSDKError(
513
+ MALFORMED_PREVIEW_CODE,
514
+ `SDK: server returned malformed PlanChangePreview \u2014 willApplyAtPeriodEnd=false requires proratedAmount to be a number (got ${typeof proratedAmount})`
515
+ );
516
+ }
517
+ }
518
+ function validateSeatChangePreview(preview) {
519
+ if (preview === null || typeof preview !== "object") {
520
+ throw new FFIDSDKError(
521
+ MALFORMED_SEAT_PREVIEW_CODE,
522
+ "SDK: server returned malformed SeatChangePreview \u2014 expected object, got " + (preview === null ? "null" : typeof preview)
523
+ );
524
+ }
525
+ const p = preview;
526
+ if (p.type !== "seat-change") {
527
+ throw new FFIDSDKError(
528
+ MALFORMED_SEAT_PREVIEW_CODE,
529
+ `SDK: server returned malformed SeatChangePreview \u2014 type must be 'seat-change' (got ${JSON.stringify(p.type)})`
530
+ );
531
+ }
532
+ const numericFields = [
533
+ "currentQuantity",
534
+ "newQuantity",
535
+ "unitPrice",
536
+ "proratedAmount",
537
+ "nextInvoiceAmount"
538
+ ];
539
+ for (const key of numericFields) {
540
+ if (typeof p[key] !== "number") {
541
+ throw new FFIDSDKError(
542
+ MALFORMED_SEAT_PREVIEW_CODE,
543
+ `SDK: server returned malformed SeatChangePreview \u2014 ${key} must be a number (got ${typeof p[key]})`
544
+ );
545
+ }
546
+ }
547
+ if (p.nextInvoiceDate !== null && typeof p.nextInvoiceDate !== "string") {
548
+ throw new FFIDSDKError(
549
+ MALFORMED_SEAT_PREVIEW_CODE,
550
+ `SDK: server returned malformed SeatChangePreview \u2014 nextInvoiceDate must be string or null (got ${typeof p.nextInvoiceDate})`
551
+ );
552
+ }
553
+ if (typeof p.isEstimate !== "boolean") {
554
+ throw new FFIDSDKError(
555
+ MALFORMED_SEAT_PREVIEW_CODE,
556
+ `SDK: server returned malformed SeatChangePreview \u2014 isEstimate must be boolean (got ${typeof p.isEstimate})`
557
+ );
558
+ }
559
+ if (p.estimateReason !== void 0 && !SEAT_ESTIMATE_REASONS.has(p.estimateReason)) {
560
+ throw new FFIDSDKError(
561
+ MALFORMED_SEAT_PREVIEW_CODE,
562
+ `SDK: server returned malformed SeatChangePreview \u2014 estimateReason must be one of 'no_stripe_data' | 'custom_pricing' | 'stripe_error' (got ${JSON.stringify(p.estimateReason)})`
563
+ );
564
+ }
565
+ if (!Array.isArray(p.lineItems)) {
566
+ throw new FFIDSDKError(
567
+ MALFORMED_SEAT_PREVIEW_CODE,
568
+ `SDK: server returned malformed SeatChangePreview \u2014 lineItems must be an array (got ${typeof p.lineItems})`
569
+ );
570
+ }
571
+ }
463
572
  function createSubscriptionMethods(deps) {
464
573
  const { fetchWithAuth, createError } = deps;
465
574
  async function listPlans() {
@@ -546,7 +655,7 @@ function createSubscriptionMethods(deps) {
546
655
  error: createError("VALIDATION_ERROR", "subscriptionId \u3068 planCode \u306F\u5FC5\u9808\u3067\u3059")
547
656
  };
548
657
  }
549
- return fetchWithAuth(
658
+ const response = await fetchWithAuth(
550
659
  `${EXT_SUBSCRIPTION_ENDPOINT}/${encodeURIComponent(params.subscriptionId)}/plan/preview`,
551
660
  {
552
661
  method: "POST",
@@ -556,6 +665,36 @@ function createSubscriptionMethods(deps) {
556
665
  })
557
666
  }
558
667
  );
668
+ if (response.data !== void 0) {
669
+ validatePlanChangePreview(response.data.preview);
670
+ }
671
+ return response;
672
+ }
673
+ async function previewSeatChange(params) {
674
+ if (isBlankString(params.subscriptionId)) {
675
+ return {
676
+ error: createError("VALIDATION_ERROR", "subscriptionId \u306F\u5FC5\u9808\u3067\u3059")
677
+ };
678
+ }
679
+ if (typeof params.quantity !== "number" || !Number.isInteger(params.quantity) || params.quantity < 1) {
680
+ return {
681
+ error: createError(
682
+ "VALIDATION_ERROR",
683
+ `quantity \u306F 1 \u4EE5\u4E0A\u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059 (received: ${String(params.quantity)})`
684
+ )
685
+ };
686
+ }
687
+ const response = await fetchWithAuth(
688
+ `${EXT_SUBSCRIPTION_ENDPOINT}/${encodeURIComponent(params.subscriptionId)}/seats/preview`,
689
+ {
690
+ method: "POST",
691
+ body: JSON.stringify({ quantity: params.quantity })
692
+ }
693
+ );
694
+ if (response.data !== void 0) {
695
+ validateSeatChangePreview(response.data.preview);
696
+ }
697
+ return response;
559
698
  }
560
699
  return {
561
700
  listPlans,
@@ -564,7 +703,8 @@ function createSubscriptionMethods(deps) {
564
703
  changePlan,
565
704
  cancelSubscription,
566
705
  cancelPendingDowngrade,
567
- previewPlanChange
706
+ previewPlanChange,
707
+ previewSeatChange
568
708
  };
569
709
  }
570
710
 
@@ -621,7 +761,7 @@ function createMembersMethods(deps) {
621
761
  }
622
762
 
623
763
  // src/client/version-check.ts
624
- var SDK_VERSION = "2.10.0";
764
+ var SDK_VERSION = "2.12.0";
625
765
  var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
626
766
  var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
627
767
  function sdkHeaders() {
@@ -1958,7 +2098,8 @@ function createFFIDClient(config) {
1958
2098
  changePlan,
1959
2099
  cancelSubscription,
1960
2100
  cancelPendingDowngrade,
1961
- previewPlanChange
2101
+ previewPlanChange,
2102
+ previewSeatChange
1962
2103
  } = createSubscriptionMethods({
1963
2104
  fetchWithAuth,
1964
2105
  createError
@@ -2048,6 +2189,7 @@ function createFFIDClient(config) {
2048
2189
  cancelSubscription,
2049
2190
  cancelPendingDowngrade,
2050
2191
  previewPlanChange,
2192
+ previewSeatChange,
2051
2193
  verifyAccessToken,
2052
2194
  getSubscribeUrl,
2053
2195
  redirectToSubscribe,
@@ -3422,43 +3564,9 @@ var FFID_INQUIRY_CATEGORIES = [
3422
3564
  "press",
3423
3565
  "other"
3424
3566
  ];
3425
- var DEFAULT_CATEGORY_LABELS_JA = {
3426
- general: "\u4E00\u822C\u7684\u306A\u304A\u554F\u3044\u5408\u308F\u305B",
3427
- sales: "\u3054\u5C0E\u5165\u30FB\u304A\u898B\u7A4D\u3082\u308A",
3428
- support: "\u30B5\u30DD\u30FC\u30C8",
3429
- partnership: "\u30D1\u30FC\u30C8\u30CA\u30FC\u30B7\u30C3\u30D7",
3430
- press: "\u53D6\u6750\u30FB\u30D7\u30EC\u30B9",
3431
- other: "\u305D\u306E\u4ED6"
3432
- };
3433
- function defaultCategories() {
3434
- return FFID_INQUIRY_CATEGORIES.map((value) => ({
3435
- value,
3436
- label: DEFAULT_CATEGORY_LABELS_JA[value]
3437
- }));
3438
- }
3439
- function renderCategoryOptions(options) {
3440
- const hasAnyGroup = options.some((o) => !!o.group);
3441
- if (!hasAnyGroup) {
3442
- return options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value));
3443
- }
3444
- const ungrouped = options.filter((o) => !o.group);
3445
- const groupKeys = [];
3446
- const groupLabelByKey = /* @__PURE__ */ new Map();
3447
- const itemsByKey = /* @__PURE__ */ new Map();
3448
- for (const opt of options) {
3449
- if (!opt.group) continue;
3450
- if (!itemsByKey.has(opt.group)) {
3451
- groupKeys.push(opt.group);
3452
- itemsByKey.set(opt.group, []);
3453
- groupLabelByKey.set(opt.group, opt.groupLabel ?? opt.group);
3454
- }
3455
- itemsByKey.get(opt.group).push(opt);
3456
- }
3457
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3458
- ungrouped.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value)),
3459
- groupKeys.map((key) => /* @__PURE__ */ jsxRuntime.jsx("optgroup", { label: groupLabelByKey.get(key) ?? key, children: itemsByKey.get(key).map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value)) }, key))
3460
- ] });
3461
- }
3567
+ var CATEGORY_PLACEHOLDER_LABEL_JA = "\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044";
3568
+ var CATEGORY_REQUIRED_ERROR_JA = "\u304A\u554F\u3044\u5408\u308F\u305B\u7A2E\u5225\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
3569
+ var SUBMIT_BUTTON_OPACITY_PENDING = 0.6;
3462
3570
  var labelStyle = {
3463
3571
  display: "block",
3464
3572
  fontSize: FONT_SIZE_SM,
@@ -3498,7 +3606,58 @@ var submitButtonStyle = {
3498
3606
  borderRadius: BORDER_RADIUS_MD,
3499
3607
  cursor: "pointer"
3500
3608
  };
3501
- var SUBMIT_BUTTON_OPACITY_PENDING = 0.6;
3609
+ var successBlockStyle = {
3610
+ padding: SPACING_LG,
3611
+ border: BORDER_DEFAULT,
3612
+ borderRadius: BORDER_RADIUS_MD,
3613
+ background: "#f0fdf4",
3614
+ color: "#166534",
3615
+ fontSize: FONT_SIZE_SM
3616
+ };
3617
+ function cx(...parts) {
3618
+ const joined = parts.filter((p) => !!p).join(" ");
3619
+ return joined.length > 0 ? joined : void 0;
3620
+ }
3621
+ function styleOrUndefined(style, unstyled) {
3622
+ return unstyled ? void 0 : style;
3623
+ }
3624
+ var DEFAULT_CATEGORY_LABELS_JA = {
3625
+ general: "\u4E00\u822C\u7684\u306A\u304A\u554F\u3044\u5408\u308F\u305B",
3626
+ sales: "\u3054\u5C0E\u5165\u30FB\u304A\u898B\u7A4D\u3082\u308A",
3627
+ support: "\u30B5\u30DD\u30FC\u30C8",
3628
+ partnership: "\u30D1\u30FC\u30C8\u30CA\u30FC\u30B7\u30C3\u30D7",
3629
+ press: "\u53D6\u6750\u30FB\u30D7\u30EC\u30B9",
3630
+ other: "\u305D\u306E\u4ED6"
3631
+ };
3632
+ function defaultCategories() {
3633
+ return FFID_INQUIRY_CATEGORIES.map((value) => ({
3634
+ value,
3635
+ label: DEFAULT_CATEGORY_LABELS_JA[value]
3636
+ }));
3637
+ }
3638
+ function renderCategoryOptions(options) {
3639
+ const hasAnyGroup = options.some((o) => !!o.group);
3640
+ if (!hasAnyGroup) {
3641
+ return options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value));
3642
+ }
3643
+ const ungrouped = options.filter((o) => !o.group);
3644
+ const groupKeys = [];
3645
+ const groupLabelByKey = /* @__PURE__ */ new Map();
3646
+ const itemsByKey = /* @__PURE__ */ new Map();
3647
+ for (const opt of options) {
3648
+ if (!opt.group) continue;
3649
+ if (!itemsByKey.has(opt.group)) {
3650
+ groupKeys.push(opt.group);
3651
+ itemsByKey.set(opt.group, []);
3652
+ groupLabelByKey.set(opt.group, opt.groupLabel ?? opt.group);
3653
+ }
3654
+ itemsByKey.get(opt.group).push(opt);
3655
+ }
3656
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3657
+ ungrouped.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value)),
3658
+ groupKeys.map((key) => /* @__PURE__ */ jsxRuntime.jsx("optgroup", { label: groupLabelByKey.get(key) ?? key, children: itemsByKey.get(key).map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value)) }, key))
3659
+ ] });
3660
+ }
3502
3661
  function FFIDInquiryForm({
3503
3662
  mode,
3504
3663
  prefill,
@@ -3515,6 +3674,9 @@ function FFIDInquiryForm({
3515
3674
  onChange,
3516
3675
  separateLegalCheckboxes = false,
3517
3676
  messagePlaceholder,
3677
+ requireCategorySelection = false,
3678
+ unstyled = false,
3679
+ classNames,
3518
3680
  locale = "ja",
3519
3681
  className
3520
3682
  }) {
@@ -3532,11 +3694,20 @@ function FFIDInquiryForm({
3532
3694
  return null;
3533
3695
  }, [isAuth, organizations, preselectedOrganizationId]);
3534
3696
  const initialCategory = react.useMemo(() => {
3535
- const fallback = categoryOptions[0]?.value ?? "general";
3536
3697
  const requested = prefill?.category;
3537
- if (!requested) return fallback;
3538
- return categoryOptions.some((opt) => opt.value === requested) ? requested : fallback;
3539
- }, [categoryOptions, prefill?.category]);
3698
+ if (requested && categoryOptions.some((opt) => opt.value === requested)) {
3699
+ return requested;
3700
+ }
3701
+ if (requireCategorySelection) return "";
3702
+ const first = categoryOptions[0]?.value;
3703
+ if (first === void 0) {
3704
+ console.error(
3705
+ "[FFIDInquiryForm] categoryOptions is empty; set requireCategorySelection=true or provide at least one category. Submits will be blocked until a value is picked."
3706
+ );
3707
+ return "";
3708
+ }
3709
+ return first;
3710
+ }, [categoryOptions, prefill?.category, requireCategorySelection]);
3540
3711
  const [name, setName] = react.useState(prefill?.name ?? "");
3541
3712
  const [email, setEmail] = react.useState(prefill?.email ?? "");
3542
3713
  const [company, setCompany] = react.useState(isAuth ? "" : prefill?.company ?? "");
@@ -3555,7 +3726,7 @@ function FFIDInquiryForm({
3555
3726
  const resolvedMessagePlaceholder = react.useMemo(() => {
3556
3727
  if (messagePlaceholder === void 0) return void 0;
3557
3728
  if (typeof messagePlaceholder === "string") return messagePlaceholder;
3558
- return messagePlaceholder({ category });
3729
+ return messagePlaceholder({ category: category === "" ? null : category });
3559
3730
  }, [messagePlaceholder, category]);
3560
3731
  const [hydrated, setHydrated] = react.useState(false);
3561
3732
  react.useEffect(() => {
@@ -3566,6 +3737,7 @@ function FFIDInquiryForm({
3566
3737
  onChangeRef.current = onChange;
3567
3738
  }, [onChange]);
3568
3739
  react.useEffect(() => {
3740
+ if (category === "") return;
3569
3741
  onChangeRef.current?.({
3570
3742
  name: name.trim(),
3571
3743
  email: email.trim(),
@@ -3596,6 +3768,7 @@ function FFIDInquiryForm({
3596
3768
  turnstileToken,
3597
3769
  locale
3598
3770
  ]);
3771
+ const s = (style) => styleOrUndefined(style, unstyled);
3599
3772
  async function handleSubmit(e) {
3600
3773
  e.preventDefault();
3601
3774
  setFormError(null);
@@ -3616,15 +3789,17 @@ function FFIDInquiryForm({
3616
3789
  setFormError("\u5229\u7528\u898F\u7D04\u3068\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC\u3078\u306E\u540C\u610F\u304C\u5FC5\u8981\u3067\u3059\u3002");
3617
3790
  return;
3618
3791
  }
3792
+ if (requireCategorySelection && !category) {
3793
+ setFormError(CATEGORY_REQUIRED_ERROR_JA);
3794
+ return;
3795
+ }
3619
3796
  if (!message.trim()) {
3620
3797
  setFormError("\u304A\u554F\u3044\u5408\u308F\u305B\u5185\u5BB9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
3621
3798
  return;
3622
3799
  }
3623
- if (!isAuth) {
3624
- if (!name.trim() || !email.trim()) {
3625
- setFormError("\u304A\u540D\u524D\u3068\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
3626
- return;
3627
- }
3800
+ if (!isAuth && (!name.trim() || !email.trim())) {
3801
+ setFormError("\u304A\u540D\u524D\u3068\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
3802
+ return;
3628
3803
  }
3629
3804
  setSubmitting(true);
3630
3805
  try {
@@ -3649,9 +3824,7 @@ function FFIDInquiryForm({
3649
3824
  );
3650
3825
  setMessage("");
3651
3826
  } else {
3652
- setFormError(
3653
- result.message ?? "\u9001\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u6642\u9593\u3092\u304A\u3044\u3066\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002"
3654
- );
3827
+ setFormError(result.message ?? "\u9001\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u6642\u9593\u3092\u304A\u3044\u3066\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002");
3655
3828
  }
3656
3829
  } catch (err) {
3657
3830
  console.error("[FFIDInquiryForm] onSubmit threw", err);
@@ -3665,35 +3838,56 @@ function FFIDInquiryForm({
3665
3838
  "div",
3666
3839
  {
3667
3840
  role: "status",
3668
- className,
3669
- style: {
3670
- padding: SPACING_LG,
3671
- border: BORDER_DEFAULT,
3672
- borderRadius: BORDER_RADIUS_MD,
3673
- background: "#f0fdf4",
3674
- color: "#166534",
3675
- fontSize: FONT_SIZE_SM
3676
- },
3841
+ className: cx(className, classNames?.form, classNames?.successBlock),
3842
+ style: s(successBlockStyle),
3677
3843
  children: successMessage
3678
3844
  }
3679
3845
  );
3680
3846
  }
3681
3847
  const showOrgBlock = isAuth && organizations.length >= 1;
3848
+ const rowStyle = { display: "flex", alignItems: "center", gap: SPACING_SM, marginBottom: SPACING_SM };
3849
+ const rowStyleLast = { display: "flex", alignItems: "center", gap: SPACING_SM };
3850
+ const legalRowFirst = { display: "flex", alignItems: "flex-start", gap: SPACING_SM, marginBottom: SPACING_SM };
3851
+ const legalRowLast = { display: "flex", alignItems: "flex-start", gap: SPACING_SM };
3852
+ const spanStyle = { fontSize: FONT_SIZE_SM };
3853
+ function renderTermsLink() {
3854
+ return termsHref ? /* @__PURE__ */ jsxRuntime.jsxs("a", { href: termsHref, target: "_blank", rel: "noopener noreferrer", className: classNames?.legalLink, children: [
3855
+ "\u5229\u7528\u898F\u7D04 (v",
3856
+ termsVersion,
3857
+ ")"
3858
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3859
+ "\u5229\u7528\u898F\u7D04 (v",
3860
+ termsVersion,
3861
+ ")"
3862
+ ] });
3863
+ }
3864
+ function renderPrivacyLink() {
3865
+ return privacyHref ? /* @__PURE__ */ jsxRuntime.jsxs("a", { href: privacyHref, target: "_blank", rel: "noopener noreferrer", className: classNames?.legalLink, children: [
3866
+ "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC (v",
3867
+ privacyVersion,
3868
+ ")"
3869
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3870
+ "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC (v",
3871
+ privacyVersion,
3872
+ ")"
3873
+ ] });
3874
+ }
3682
3875
  return /* @__PURE__ */ jsxRuntime.jsxs(
3683
3876
  "form",
3684
3877
  {
3685
3878
  onSubmit: handleSubmit,
3686
- className,
3879
+ className: cx(className, classNames?.form),
3687
3880
  noValidate: true,
3688
3881
  "data-hydrated": hydrated ? "true" : void 0,
3689
3882
  children: [
3690
- showOrgBlock && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3691
- /* @__PURE__ */ jsxRuntime.jsx("label", { style: labelStyle, htmlFor: "ffid-inquiry-org", children: "\u554F\u3044\u5408\u308F\u305B\u308B\u7ACB\u5834" }),
3883
+ showOrgBlock && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: cx(classNames?.field, classNames?.orgSelectWrapper), children: [
3884
+ /* @__PURE__ */ jsxRuntime.jsx("label", { style: s(labelStyle), className: classNames?.label, htmlFor: "ffid-inquiry-org", children: "\u554F\u3044\u5408\u308F\u305B\u308B\u7ACB\u5834" }),
3692
3885
  /* @__PURE__ */ jsxRuntime.jsxs(
3693
3886
  "select",
3694
3887
  {
3695
3888
  id: "ffid-inquiry-org",
3696
- style: inputStyle,
3889
+ style: s(inputStyle),
3890
+ className: classNames?.select,
3697
3891
  value: organizationId ?? "",
3698
3892
  onChange: (e) => setOrganizationId(e.target.value || null),
3699
3893
  children: [
@@ -3706,13 +3900,14 @@ function FFIDInquiryForm({
3706
3900
  }
3707
3901
  )
3708
3902
  ] }),
3709
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3710
- /* @__PURE__ */ jsxRuntime.jsx("label", { style: labelStyle, htmlFor: "ffid-inquiry-name", children: "\u304A\u540D\u524D" }),
3903
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.field, children: [
3904
+ /* @__PURE__ */ jsxRuntime.jsx("label", { style: s(labelStyle), className: classNames?.label, htmlFor: "ffid-inquiry-name", children: "\u304A\u540D\u524D" }),
3711
3905
  /* @__PURE__ */ jsxRuntime.jsx(
3712
3906
  "input",
3713
3907
  {
3714
3908
  id: "ffid-inquiry-name",
3715
- style: isNameReadOnly ? readOnlyStyle : inputStyle,
3909
+ style: s(isNameReadOnly ? readOnlyStyle : inputStyle),
3910
+ className: cx(classNames?.input, isNameReadOnly ? classNames?.readOnlyInput : void 0),
3716
3911
  type: "text",
3717
3912
  value: name,
3718
3913
  onChange: (e) => setName(e.target.value),
@@ -3721,13 +3916,14 @@ function FFIDInquiryForm({
3721
3916
  }
3722
3917
  )
3723
3918
  ] }),
3724
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3725
- /* @__PURE__ */ jsxRuntime.jsx("label", { style: labelStyle, htmlFor: "ffid-inquiry-email", children: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9" }),
3919
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.field, children: [
3920
+ /* @__PURE__ */ jsxRuntime.jsx("label", { style: s(labelStyle), className: classNames?.label, htmlFor: "ffid-inquiry-email", children: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9" }),
3726
3921
  /* @__PURE__ */ jsxRuntime.jsx(
3727
3922
  "input",
3728
3923
  {
3729
3924
  id: "ffid-inquiry-email",
3730
- style: isEmailReadOnly ? readOnlyStyle : inputStyle,
3925
+ style: s(isEmailReadOnly ? readOnlyStyle : inputStyle),
3926
+ className: cx(classNames?.input, isEmailReadOnly ? classNames?.readOnlyInput : void 0),
3731
3927
  type: "email",
3732
3928
  value: email,
3733
3929
  onChange: (e) => setEmail(e.target.value),
@@ -3737,26 +3933,28 @@ function FFIDInquiryForm({
3737
3933
  )
3738
3934
  ] }),
3739
3935
  !isAuth && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3740
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3741
- /* @__PURE__ */ jsxRuntime.jsx("label", { style: labelStyle, htmlFor: "ffid-inquiry-company", children: "\u4F1A\u793E\u540D (\u4EFB\u610F)" }),
3936
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.field, children: [
3937
+ /* @__PURE__ */ jsxRuntime.jsx("label", { style: s(labelStyle), className: classNames?.label, htmlFor: "ffid-inquiry-company", children: "\u4F1A\u793E\u540D (\u4EFB\u610F)" }),
3742
3938
  /* @__PURE__ */ jsxRuntime.jsx(
3743
3939
  "input",
3744
3940
  {
3745
3941
  id: "ffid-inquiry-company",
3746
- style: inputStyle,
3942
+ style: s(inputStyle),
3943
+ className: classNames?.input,
3747
3944
  type: "text",
3748
3945
  value: company,
3749
3946
  onChange: (e) => setCompany(e.target.value)
3750
3947
  }
3751
3948
  )
3752
3949
  ] }),
3753
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3754
- /* @__PURE__ */ jsxRuntime.jsx("label", { style: labelStyle, htmlFor: "ffid-inquiry-phone", children: "\u96FB\u8A71\u756A\u53F7 (\u4EFB\u610F)" }),
3950
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.field, children: [
3951
+ /* @__PURE__ */ jsxRuntime.jsx("label", { style: s(labelStyle), className: classNames?.label, htmlFor: "ffid-inquiry-phone", children: "\u96FB\u8A71\u756A\u53F7 (\u4EFB\u610F)" }),
3755
3952
  /* @__PURE__ */ jsxRuntime.jsx(
3756
3953
  "input",
3757
3954
  {
3758
3955
  id: "ffid-inquiry-phone",
3759
- style: inputStyle,
3956
+ style: s(inputStyle),
3957
+ className: classNames?.input,
3760
3958
  type: "tel",
3761
3959
  value: phone,
3762
3960
  onChange: (e) => setPhone(e.target.value)
@@ -3764,26 +3962,32 @@ function FFIDInquiryForm({
3764
3962
  )
3765
3963
  ] })
3766
3964
  ] }),
3767
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3768
- /* @__PURE__ */ jsxRuntime.jsx("label", { style: labelStyle, htmlFor: "ffid-inquiry-category", children: "\u304A\u554F\u3044\u5408\u308F\u305B\u7A2E\u5225" }),
3769
- /* @__PURE__ */ jsxRuntime.jsx(
3965
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.field, children: [
3966
+ /* @__PURE__ */ jsxRuntime.jsx("label", { style: s(labelStyle), className: classNames?.label, htmlFor: "ffid-inquiry-category", children: "\u304A\u554F\u3044\u5408\u308F\u305B\u7A2E\u5225" }),
3967
+ /* @__PURE__ */ jsxRuntime.jsxs(
3770
3968
  "select",
3771
3969
  {
3772
3970
  id: "ffid-inquiry-category",
3773
- style: inputStyle,
3971
+ style: s(inputStyle),
3972
+ className: classNames?.select,
3774
3973
  value: category,
3775
3974
  onChange: (e) => setCategory(e.target.value),
3776
- children: renderCategoryOptions(categoryOptions)
3975
+ required: requireCategorySelection,
3976
+ children: [
3977
+ requireCategorySelection && /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: true, className: classNames?.categoryPlaceholderOption, children: CATEGORY_PLACEHOLDER_LABEL_JA }),
3978
+ renderCategoryOptions(categoryOptions)
3979
+ ]
3777
3980
  }
3778
3981
  )
3779
3982
  ] }),
3780
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3781
- /* @__PURE__ */ jsxRuntime.jsx("label", { style: labelStyle, htmlFor: "ffid-inquiry-message", children: "\u304A\u554F\u3044\u5408\u308F\u305B\u5185\u5BB9" }),
3983
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.field, children: [
3984
+ /* @__PURE__ */ jsxRuntime.jsx("label", { style: s(labelStyle), className: classNames?.label, htmlFor: "ffid-inquiry-message", children: "\u304A\u554F\u3044\u5408\u308F\u305B\u5185\u5BB9" }),
3782
3985
  /* @__PURE__ */ jsxRuntime.jsx(
3783
3986
  "textarea",
3784
3987
  {
3785
3988
  id: "ffid-inquiry-message",
3786
- style: { ...inputStyle, minHeight: 180, resize: "vertical" },
3989
+ style: s({ ...inputStyle, minHeight: 180, resize: "vertical" }),
3990
+ className: classNames?.textarea,
3787
3991
  value: message,
3788
3992
  onChange: (e) => setMessage(e.target.value),
3789
3993
  placeholder: resolvedMessagePlaceholder,
@@ -3792,138 +3996,118 @@ function FFIDInquiryForm({
3792
3996
  }
3793
3997
  )
3794
3998
  ] }),
3795
- /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { style: { ...fieldsetStyle, border: "none", padding: 0 }, children: [
3796
- /* @__PURE__ */ jsxRuntime.jsx("legend", { style: { ...labelStyle, marginBottom: SPACING_SM }, children: "\u30CB\u30E5\u30FC\u30B9\u30EC\u30BF\u30FC\u8CFC\u8AAD (\u4EFB\u610F)" }),
3797
- /* @__PURE__ */ jsxRuntime.jsxs("label", { style: { display: "flex", alignItems: "center", gap: SPACING_SM, marginBottom: SPACING_SM }, children: [
3999
+ /* @__PURE__ */ jsxRuntime.jsxs(
4000
+ "fieldset",
4001
+ {
4002
+ style: s({ ...fieldsetStyle, border: "none", padding: 0 }),
4003
+ className: classNames?.newsletterFieldset,
4004
+ children: [
4005
+ /* @__PURE__ */ jsxRuntime.jsx(
4006
+ "legend",
4007
+ {
4008
+ style: s({ ...labelStyle, marginBottom: SPACING_SM }),
4009
+ className: cx(classNames?.label, classNames?.newsletterLegend),
4010
+ children: "\u30CB\u30E5\u30FC\u30B9\u30EC\u30BF\u30FC\u8CFC\u8AAD (\u4EFB\u610F)"
4011
+ }
4012
+ ),
4013
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { style: s(rowStyle), className: classNames?.newsletterRow, children: [
4014
+ /* @__PURE__ */ jsxRuntime.jsx(
4015
+ "input",
4016
+ {
4017
+ type: "checkbox",
4018
+ className: classNames?.newsletterCheckbox,
4019
+ checked: inquiryFollowup,
4020
+ onChange: (e) => setInquiryFollowup(e.target.checked)
4021
+ }
4022
+ ),
4023
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: s(spanStyle), children: "\u304A\u554F\u3044\u5408\u308F\u305B\u306B\u95A2\u9023\u3059\u308B\u6848\u5185\u3092\u53D7\u3051\u53D6\u308B" })
4024
+ ] }),
4025
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { style: s(rowStyleLast), className: classNames?.newsletterRow, children: [
4026
+ /* @__PURE__ */ jsxRuntime.jsx(
4027
+ "input",
4028
+ {
4029
+ type: "checkbox",
4030
+ className: classNames?.newsletterCheckbox,
4031
+ checked: general,
4032
+ onChange: (e) => setGeneral(e.target.checked)
4033
+ }
4034
+ ),
4035
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: s(spanStyle), children: "\u5B9A\u671F\u30CB\u30E5\u30FC\u30B9\u30EC\u30BF\u30FC\u3092\u53D7\u3051\u53D6\u308B" })
4036
+ ] })
4037
+ ]
4038
+ }
4039
+ ),
4040
+ separateLegalCheckboxes ? /* @__PURE__ */ jsxRuntime.jsxs("div", { style: s(fieldsetStyle), className: classNames?.legalBlock, children: [
4041
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { style: s(legalRowFirst), className: classNames?.legalRow, children: [
3798
4042
  /* @__PURE__ */ jsxRuntime.jsx(
3799
4043
  "input",
3800
4044
  {
3801
4045
  type: "checkbox",
3802
- checked: inquiryFollowup,
3803
- onChange: (e) => setInquiryFollowup(e.target.checked)
4046
+ className: classNames?.legalCheckbox,
4047
+ checked: agreedTerms,
4048
+ onChange: (e) => setAgreedTerms(e.target.checked),
4049
+ required: true
3804
4050
  }
3805
4051
  ),
3806
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: FONT_SIZE_SM }, children: "\u304A\u554F\u3044\u5408\u308F\u305B\u306B\u95A2\u9023\u3059\u308B\u6848\u5185\u3092\u53D7\u3051\u53D6\u308B" })
4052
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: s(spanStyle), children: [
4053
+ renderTermsLink(),
4054
+ " \u306B\u540C\u610F\u3057\u307E\u3059\u3002"
4055
+ ] })
3807
4056
  ] }),
3808
- /* @__PURE__ */ jsxRuntime.jsxs("label", { style: { display: "flex", alignItems: "center", gap: SPACING_SM }, children: [
3809
- /* @__PURE__ */ jsxRuntime.jsx(
3810
- "input",
3811
- {
3812
- type: "checkbox",
3813
- checked: general,
3814
- onChange: (e) => setGeneral(e.target.checked)
3815
- }
3816
- ),
3817
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: FONT_SIZE_SM }, children: "\u5B9A\u671F\u30CB\u30E5\u30FC\u30B9\u30EC\u30BF\u30FC\u3092\u53D7\u3051\u53D6\u308B" })
3818
- ] })
3819
- ] }),
3820
- separateLegalCheckboxes ? /* @__PURE__ */ jsxRuntime.jsxs("div", { style: fieldsetStyle, children: [
3821
- /* @__PURE__ */ jsxRuntime.jsxs(
3822
- "label",
3823
- {
3824
- style: {
3825
- display: "flex",
3826
- alignItems: "flex-start",
3827
- gap: SPACING_SM,
3828
- marginBottom: SPACING_SM
3829
- },
3830
- children: [
3831
- /* @__PURE__ */ jsxRuntime.jsx(
3832
- "input",
3833
- {
3834
- type: "checkbox",
3835
- checked: agreedTerms,
3836
- onChange: (e) => setAgreedTerms(e.target.checked),
3837
- required: true
3838
- }
3839
- ),
3840
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: FONT_SIZE_SM }, children: [
3841
- termsHref ? /* @__PURE__ */ jsxRuntime.jsxs("a", { href: termsHref, target: "_blank", rel: "noopener noreferrer", children: [
3842
- "\u5229\u7528\u898F\u7D04 (v",
3843
- termsVersion,
3844
- ")"
3845
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3846
- "\u5229\u7528\u898F\u7D04 (v",
3847
- termsVersion,
3848
- ")"
3849
- ] }),
3850
- " ",
3851
- "\u306B\u540C\u610F\u3057\u307E\u3059\u3002"
3852
- ] })
3853
- ]
3854
- }
3855
- ),
3856
- /* @__PURE__ */ jsxRuntime.jsxs("label", { style: { display: "flex", alignItems: "flex-start", gap: SPACING_SM }, children: [
4057
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { style: s(legalRowLast), className: classNames?.legalRow, children: [
3857
4058
  /* @__PURE__ */ jsxRuntime.jsx(
3858
4059
  "input",
3859
4060
  {
3860
4061
  type: "checkbox",
4062
+ className: classNames?.legalCheckbox,
3861
4063
  checked: agreedPrivacy,
3862
4064
  onChange: (e) => setAgreedPrivacy(e.target.checked),
3863
4065
  required: true
3864
4066
  }
3865
4067
  ),
3866
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: FONT_SIZE_SM }, children: [
3867
- privacyHref ? /* @__PURE__ */ jsxRuntime.jsxs("a", { href: privacyHref, target: "_blank", rel: "noopener noreferrer", children: [
3868
- "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC (v",
3869
- privacyVersion,
3870
- ")"
3871
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3872
- "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC (v",
3873
- privacyVersion,
3874
- ")"
3875
- ] }),
3876
- " ",
3877
- "\u306B\u540C\u610F\u3057\u307E\u3059\u3002"
4068
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: s(spanStyle), children: [
4069
+ renderPrivacyLink(),
4070
+ " \u306B\u540C\u610F\u3057\u307E\u3059\u3002"
3878
4071
  ] })
3879
4072
  ] })
3880
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { style: fieldsetStyle, children: /* @__PURE__ */ jsxRuntime.jsxs("label", { style: { display: "flex", alignItems: "flex-start", gap: SPACING_SM }, children: [
4073
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { style: s(fieldsetStyle), className: classNames?.legalBlock, children: /* @__PURE__ */ jsxRuntime.jsxs("label", { style: s(legalRowLast), className: classNames?.legalRow, children: [
3881
4074
  /* @__PURE__ */ jsxRuntime.jsx(
3882
4075
  "input",
3883
4076
  {
3884
4077
  type: "checkbox",
4078
+ className: classNames?.legalCheckbox,
3885
4079
  checked: agreedLegal,
3886
4080
  onChange: (e) => setAgreedLegal(e.target.checked),
3887
4081
  required: true
3888
4082
  }
3889
4083
  ),
3890
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: FONT_SIZE_SM }, children: [
3891
- termsHref ? /* @__PURE__ */ jsxRuntime.jsxs("a", { href: termsHref, target: "_blank", rel: "noopener noreferrer", children: [
3892
- "\u5229\u7528\u898F\u7D04 (v",
3893
- termsVersion,
3894
- ")"
3895
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3896
- "\u5229\u7528\u898F\u7D04 (v",
3897
- termsVersion,
3898
- ")"
3899
- ] }),
3900
- " ",
3901
- "\u3068",
3902
- " ",
3903
- privacyHref ? /* @__PURE__ */ jsxRuntime.jsxs("a", { href: privacyHref, target: "_blank", rel: "noopener noreferrer", children: [
3904
- "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC (v",
3905
- privacyVersion,
3906
- ")"
3907
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3908
- "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC (v",
3909
- privacyVersion,
3910
- ")"
3911
- ] }),
3912
- " ",
3913
- "\u306B\u540C\u610F\u3057\u307E\u3059\u3002"
4084
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: s(spanStyle), children: [
4085
+ renderTermsLink(),
4086
+ " \u3068 ",
4087
+ renderPrivacyLink(),
4088
+ " \u306B\u540C\u610F\u3057\u307E\u3059\u3002"
3914
4089
  ] })
3915
4090
  ] }) }),
3916
- !isAuth && turnstileSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { style: fieldsetStyle, children: turnstileSlot }),
3917
- formError && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", style: { ...errorTextStyle, marginBottom: SPACING_MD }, children: formError }),
4091
+ !isAuth && turnstileSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { style: s(fieldsetStyle), className: classNames?.field, children: turnstileSlot }),
4092
+ formError && /* @__PURE__ */ jsxRuntime.jsx(
4093
+ "p",
4094
+ {
4095
+ role: "alert",
4096
+ style: s({ ...errorTextStyle, marginBottom: SPACING_MD }),
4097
+ className: classNames?.errorText,
4098
+ children: formError
4099
+ }
4100
+ ),
3918
4101
  /* @__PURE__ */ jsxRuntime.jsx(
3919
4102
  "button",
3920
4103
  {
3921
4104
  type: "submit",
3922
- style: {
4105
+ style: s({
3923
4106
  ...submitButtonStyle,
3924
4107
  opacity: submitting ? SUBMIT_BUTTON_OPACITY_PENDING : 1,
3925
4108
  cursor: submitting ? "not-allowed" : "pointer"
3926
- },
4109
+ }),
4110
+ className: classNames?.submitButton,
3927
4111
  disabled: submitting,
3928
4112
  children: submitting ? "\u9001\u4FE1\u4E2D..." : "\u9001\u4FE1\u3059\u308B"
3929
4113
  }
@@ -3940,6 +4124,7 @@ exports.FFIDInquiryForm = FFIDInquiryForm;
3940
4124
  exports.FFIDLoginButton = FFIDLoginButton;
3941
4125
  exports.FFIDOrganizationSwitcher = FFIDOrganizationSwitcher;
3942
4126
  exports.FFIDProvider = FFIDProvider;
4127
+ exports.FFIDSDKError = FFIDSDKError;
3943
4128
  exports.FFIDSubscriptionBadge = FFIDSubscriptionBadge;
3944
4129
  exports.FFIDUserMenu = FFIDUserMenu;
3945
4130
  exports.FFID_ANNOUNCEMENTS_ERROR_CODES = FFID_ANNOUNCEMENTS_ERROR_CODES;