@mj-biz-apps/orders-ng 5.21.0 → 5.23.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.
Files changed (39) hide show
  1. package/dist/checkout-element/main.js +284 -33
  2. package/dist/lib/checkout-widget/checkout-public-host.component.d.ts.map +1 -1
  3. package/dist/lib/checkout-widget/checkout-public-host.component.js +1 -0
  4. package/dist/lib/checkout-widget/checkout-public-host.component.js.map +1 -1
  5. package/dist/lib/checkout-widget/checkout-widget.component.d.ts +18 -0
  6. package/dist/lib/checkout-widget/checkout-widget.component.d.ts.map +1 -1
  7. package/dist/lib/checkout-widget/checkout-widget.component.js +120 -33
  8. package/dist/lib/checkout-widget/checkout-widget.component.js.map +1 -1
  9. package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts +10 -1
  10. package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts.map +1 -1
  11. package/dist/lib/custom/OrderHeader/order-header-form.component.js +31 -9
  12. package/dist/lib/custom/OrderHeader/order-header-form.component.js.map +1 -1
  13. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderConcession/mjbizappsordersorderconcession.form.component.d.ts +10 -0
  14. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderConcession/mjbizappsordersorderconcession.form.component.d.ts.map +1 -0
  15. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderConcession/mjbizappsordersorderconcession.form.component.js +95 -0
  16. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderConcession/mjbizappsordersorderconcession.form.component.js.map +1 -0
  17. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.d.ts.map +1 -1
  18. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js +37 -19
  19. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js.map +1 -1
  20. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.d.ts.map +1 -1
  21. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js +35 -17
  22. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js.map +1 -1
  23. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentTermsType/mjbizappsorderspaymenttermstype.form.component.d.ts.map +1 -1
  24. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentTermsType/mjbizappsorderspaymenttermstype.form.component.js +42 -6
  25. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentTermsType/mjbizappsorderspaymenttermstype.form.component.js.map +1 -1
  26. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.d.ts.map +1 -1
  27. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.js +38 -14
  28. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.js.map +1 -1
  29. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.d.ts.map +1 -1
  30. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.js +24 -5
  31. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.js.map +1 -1
  32. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionTerm/mjbizappsorderssubscriptionterm.form.component.d.ts.map +1 -1
  33. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionTerm/mjbizappsorderssubscriptionterm.form.component.js +23 -5
  34. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionTerm/mjbizappsorderssubscriptionterm.form.component.js.map +1 -1
  35. package/dist/lib/generated/generated-forms.module.d.ts +2 -1
  36. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  37. package/dist/lib/generated/generated-forms.module.js +5 -2
  38. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  39. package/package.json +20 -20
@@ -36506,13 +36506,114 @@ function CheckAnswersAgainstQuestions(questions, answers) {
36506
36506
  return { Answers: resolved };
36507
36507
  }
36508
36508
 
36509
+ // ../Entities/dist/checkout-choices.js
36510
+ var MAX_CHECKOUT_CHOICE_KEY_LENGTH = 100;
36511
+ var MAX_CHECKOUT_CHOICE_LABEL_LENGTH = 500;
36512
+ var INVALID_CHECKOUT_CHOICE_GROUPS_MESSAGE = "This checkout is not configured correctly (its choices are invalid).";
36513
+ function CheckoutChoiceOptionValue(option) {
36514
+ return typeof option === "string" ? option : option.value;
36515
+ }
36516
+ function CheckoutChoiceOptionLabel(option) {
36517
+ return typeof option === "string" ? option : option.label;
36518
+ }
36519
+ function ReadCheckoutChoiceGroups(raw) {
36520
+ if (raw === void 0 || raw === null)
36521
+ return { Groups: [] };
36522
+ if (!Array.isArray(raw))
36523
+ return { Groups: [], Error: INVALID_CHECKOUT_CHOICE_GROUPS_MESSAGE };
36524
+ const keys = /* @__PURE__ */ new Set();
36525
+ for (const g of raw) {
36526
+ if (!IsValidChoiceGroup(g) || keys.has(g.key)) {
36527
+ return { Groups: [], Error: INVALID_CHECKOUT_CHOICE_GROUPS_MESSAGE };
36528
+ }
36529
+ keys.add(g.key);
36530
+ }
36531
+ return { Groups: raw };
36532
+ }
36533
+ function IsValidChoiceGroup(g) {
36534
+ if (!g || typeof g !== "object")
36535
+ return false;
36536
+ const c = g;
36537
+ if (typeof c.key !== "string" || !c.key.trim() || c.key.length > MAX_CHECKOUT_CHOICE_KEY_LENGTH)
36538
+ return false;
36539
+ if (typeof c.label !== "string" || !c.label.trim() || c.label.length > MAX_CHECKOUT_CHOICE_LABEL_LENGTH)
36540
+ return false;
36541
+ if (!Array.isArray(c.options) || c.options.length === 0)
36542
+ return false;
36543
+ const values = /* @__PURE__ */ new Set();
36544
+ for (const o of c.options) {
36545
+ const value = typeof o === "string" ? o : o && typeof o === "object" ? o.value : void 0;
36546
+ const label = typeof o === "string" ? o : o && typeof o === "object" ? o.label : void 0;
36547
+ if (typeof value !== "string" || !value || value.length > MAX_CHECKOUT_CHOICE_KEY_LENGTH || values.has(value))
36548
+ return false;
36549
+ if (typeof label !== "string" || !label || label.length > MAX_CHECKOUT_CHOICE_LABEL_LENGTH)
36550
+ return false;
36551
+ values.add(value);
36552
+ }
36553
+ if (!Number.isInteger(c.min) || !Number.isInteger(c.max))
36554
+ return false;
36555
+ const min = c.min;
36556
+ const max = c.max;
36557
+ return min >= 0 && max >= 1 && min <= max && max <= values.size;
36558
+ }
36559
+ function DescribeChoiceCount(group) {
36560
+ if (group.min === group.max)
36561
+ return `exactly ${group.min}`;
36562
+ if (group.min === 0)
36563
+ return `up to ${group.max}`;
36564
+ return `${group.min} to ${group.max}`;
36565
+ }
36566
+ function CheckChoicesAgainstGroups(groups, picks, options) {
36567
+ const refuse = (error) => ({ Choices: [], Error: error });
36568
+ if (picks !== void 0 && picks !== null && (typeof picks !== "object" || Array.isArray(picks))) {
36569
+ return refuse("The checkout choices could not be read.");
36570
+ }
36571
+ const input2 = picks ?? {};
36572
+ const offered = new Set(groups.map((g) => g.key));
36573
+ for (const key of Object.keys(input2)) {
36574
+ if (!offered.has(key))
36575
+ return refuse("A choice was sent for a group this checkout does not offer.");
36576
+ }
36577
+ const resolved = [];
36578
+ for (const g of groups) {
36579
+ const raw = input2[g.key];
36580
+ if (raw !== void 0 && raw !== null && !Array.isArray(raw)) {
36581
+ return refuse(`The choices for "${g.label}" could not be read.`);
36582
+ }
36583
+ const chosen = /* @__PURE__ */ new Set();
36584
+ for (const v of raw ?? []) {
36585
+ if (typeof v !== "string")
36586
+ return refuse(`The choices for "${g.label}" could not be read.`);
36587
+ chosen.add(v);
36588
+ }
36589
+ for (const v of chosen) {
36590
+ if (!g.options.some((o) => CheckoutChoiceOptionValue(o) === v)) {
36591
+ return refuse(`"${v}" is not one of the options for "${g.label}".`);
36592
+ }
36593
+ }
36594
+ if (chosen.size > g.max || !options?.partial && chosen.size < g.min) {
36595
+ return refuse(`Please choose ${DescribeChoiceCount(g)} for "${g.label}".`);
36596
+ }
36597
+ for (const o of g.options) {
36598
+ const value = CheckoutChoiceOptionValue(o);
36599
+ if (!chosen.has(value))
36600
+ continue;
36601
+ resolved.push({ GroupKey: g.key, GroupLabel: g.label, OptionValue: value, OptionLabel: CheckoutChoiceOptionLabel(o) });
36602
+ }
36603
+ }
36604
+ return { Choices: resolved };
36605
+ }
36606
+
36509
36607
  // dist/lib/checkout-widget/checkout-widget.component.js
36510
- var _forTrack0 = ($index, $item) => $item.name;
36511
- var _forTrack1 = ($index, $item) => $item.value;
36512
- var _forTrack2 = ($index, $item) => $item.key;
36608
+ var _forTrack0 = ($index, $item) => $item.key;
36609
+ var _forTrack1 = ($index, $item) => $item.name;
36610
+ var _forTrack2 = ($index, $item) => $item.value;
36513
36611
  function _forTrack3($index, $item) {
36514
36612
  return this.optionValue($item);
36515
36613
  }
36614
+ function _forTrack4($index, $item) {
36615
+ return this.choiceValue($item);
36616
+ }
36516
36617
  function MJCheckoutWidgetComponent_Conditional_4_Template(rf, ctx) {
36517
36618
  if (rf & 1) {
36518
36619
  \u0275\u0275elementStart(0, "p", 3);
@@ -36659,7 +36760,7 @@ function MJCheckoutWidgetComponent_Conditional_17_For_4_Case_5_Template(rf, ctx)
36659
36760
  \u0275\u0275elementStart(1, "option", 37);
36660
36761
  \u0275\u0275text(2);
36661
36762
  \u0275\u0275elementEnd();
36662
- \u0275\u0275repeaterCreate(3, MJCheckoutWidgetComponent_Conditional_17_For_4_Case_5_For_4_Template, 2, 2, "option", 37, _forTrack1);
36763
+ \u0275\u0275repeaterCreate(3, MJCheckoutWidgetComponent_Conditional_17_For_4_Case_5_For_4_Template, 2, 2, "option", 37, _forTrack2);
36663
36764
  \u0275\u0275elementEnd();
36664
36765
  }
36665
36766
  if (rf & 2) {
@@ -36784,7 +36885,7 @@ function MJCheckoutWidgetComponent_Conditional_17_Template(rf, ctx) {
36784
36885
  \u0275\u0275text(1, "Details");
36785
36886
  \u0275\u0275elementEnd();
36786
36887
  \u0275\u0275elementStart(2, "div", 24);
36787
- \u0275\u0275repeaterCreate(3, MJCheckoutWidgetComponent_Conditional_17_For_4_Template, 10, 5, "div", 25, _forTrack0);
36888
+ \u0275\u0275repeaterCreate(3, MJCheckoutWidgetComponent_Conditional_17_For_4_Template, 10, 5, "div", 25, _forTrack1);
36788
36889
  \u0275\u0275elementEnd();
36789
36890
  }
36790
36891
  if (rf & 2) {
@@ -36849,7 +36950,7 @@ function MJCheckoutWidgetComponent_Conditional_18_For_7_For_5_Case_5_Template(rf
36849
36950
  \u0275\u0275elementStart(1, "option", 37);
36850
36951
  \u0275\u0275text(2);
36851
36952
  \u0275\u0275elementEnd();
36852
- \u0275\u0275repeaterCreate(3, MJCheckoutWidgetComponent_Conditional_18_For_7_For_5_Case_5_For_4_Template, 2, 2, "option", 37, _forTrack1);
36953
+ \u0275\u0275repeaterCreate(3, MJCheckoutWidgetComponent_Conditional_18_For_7_For_5_Case_5_For_4_Template, 2, 2, "option", 37, _forTrack2);
36853
36954
  \u0275\u0275elementEnd();
36854
36955
  }
36855
36956
  if (rf & 2) {
@@ -36977,7 +37078,7 @@ function MJCheckoutWidgetComponent_Conditional_18_For_7_Template(rf, ctx) {
36977
37078
  \u0275\u0275text(2);
36978
37079
  \u0275\u0275elementEnd();
36979
37080
  \u0275\u0275elementStart(3, "div", 24);
36980
- \u0275\u0275repeaterCreate(4, MJCheckoutWidgetComponent_Conditional_18_For_7_For_5_Template, 10, 5, "div", 25, _forTrack0);
37081
+ \u0275\u0275repeaterCreate(4, MJCheckoutWidgetComponent_Conditional_18_For_7_For_5_Template, 10, 5, "div", 25, _forTrack1);
36981
37082
  \u0275\u0275elementEnd()();
36982
37083
  }
36983
37084
  if (rf & 2) {
@@ -37131,7 +37232,7 @@ function MJCheckoutWidgetComponent_Conditional_19_Template(rf, ctx) {
37131
37232
  \u0275\u0275text(2, "A few questions");
37132
37233
  \u0275\u0275elementEnd();
37133
37234
  \u0275\u0275elementStart(3, "div", 24);
37134
- \u0275\u0275repeaterCreate(4, MJCheckoutWidgetComponent_Conditional_19_For_5_Template, 6, 4, "div", 47, _forTrack2);
37235
+ \u0275\u0275repeaterCreate(4, MJCheckoutWidgetComponent_Conditional_19_For_5_Template, 6, 4, "div", 47, _forTrack0);
37135
37236
  \u0275\u0275elementEnd()();
37136
37237
  }
37137
37238
  if (rf & 2) {
@@ -37140,23 +37241,82 @@ function MJCheckoutWidgetComponent_Conditional_19_Template(rf, ctx) {
37140
37241
  \u0275\u0275repeater(ctx_r0.questions());
37141
37242
  }
37142
37243
  }
37143
- function MJCheckoutWidgetComponent_Conditional_20_Template(rf, ctx) {
37244
+ function MJCheckoutWidgetComponent_For_21_Conditional_6_Template(rf, ctx) {
37245
+ if (rf & 1) {
37246
+ \u0275\u0275elementStart(0, "span", 28);
37247
+ \u0275\u0275text(1, "*");
37248
+ \u0275\u0275elementEnd();
37249
+ }
37250
+ }
37251
+ function MJCheckoutWidgetComponent_For_21_For_9_Template(rf, ctx) {
37252
+ if (rf & 1) {
37253
+ const _r29 = \u0275\u0275getCurrentView();
37254
+ \u0275\u0275elementStart(0, "label", 31)(1, "input", 57);
37255
+ \u0275\u0275listener("change", function MJCheckoutWidgetComponent_For_21_For_9_Template_input_change_1_listener() {
37256
+ const opt_r30 = \u0275\u0275restoreView(_r29).$implicit;
37257
+ const group_r31 = \u0275\u0275nextContext().$implicit;
37258
+ const ctx_r0 = \u0275\u0275nextContext();
37259
+ return \u0275\u0275resetView(ctx_r0.toggleChoice(group_r31, ctx_r0.choiceValue(opt_r30)));
37260
+ });
37261
+ \u0275\u0275elementEnd();
37262
+ \u0275\u0275elementStart(2, "span");
37263
+ \u0275\u0275text(3);
37264
+ \u0275\u0275elementEnd()();
37265
+ }
37266
+ if (rf & 2) {
37267
+ const opt_r30 = ctx.$implicit;
37268
+ const group_r31 = \u0275\u0275nextContext().$implicit;
37269
+ const ctx_r0 = \u0275\u0275nextContext();
37270
+ \u0275\u0275classProp("is-disabled", ctx_r0.isGroupFull(group_r31) && !ctx_r0.isChosen(group_r31.key, ctx_r0.choiceValue(opt_r30)));
37271
+ \u0275\u0275advance();
37272
+ \u0275\u0275property("checked", ctx_r0.isChosen(group_r31.key, ctx_r0.choiceValue(opt_r30)))("disabled", ctx_r0.isGroupFull(group_r31) && !ctx_r0.isChosen(group_r31.key, ctx_r0.choiceValue(opt_r30)));
37273
+ \u0275\u0275advance(2);
37274
+ \u0275\u0275textInterpolate(ctx_r0.choiceLabel(opt_r30));
37275
+ }
37276
+ }
37277
+ function MJCheckoutWidgetComponent_For_21_Template(rf, ctx) {
37144
37278
  if (rf & 1) {
37145
- \u0275\u0275elementStart(0, "section", 53)(1, "h3", 23);
37279
+ \u0275\u0275elementStart(0, "section", 14)(1, "fieldset", 53)(2, "legend", 23);
37280
+ \u0275\u0275text(3);
37281
+ \u0275\u0275elementStart(4, "span", 54);
37282
+ \u0275\u0275text(5);
37283
+ \u0275\u0275elementEnd();
37284
+ \u0275\u0275conditionalCreate(6, MJCheckoutWidgetComponent_For_21_Conditional_6_Template, 2, 0, "span", 28);
37285
+ \u0275\u0275elementEnd();
37286
+ \u0275\u0275elementStart(7, "div", 55);
37287
+ \u0275\u0275repeaterCreate(8, MJCheckoutWidgetComponent_For_21_For_9_Template, 4, 5, "label", 56, _forTrack4, true);
37288
+ \u0275\u0275elementEnd()()();
37289
+ }
37290
+ if (rf & 2) {
37291
+ const group_r31 = ctx.$implicit;
37292
+ const ctx_r0 = \u0275\u0275nextContext();
37293
+ \u0275\u0275advance(3);
37294
+ \u0275\u0275textInterpolate1(" ", group_r31.label, " ");
37295
+ \u0275\u0275advance(2);
37296
+ \u0275\u0275textInterpolate1("(choose ", ctx_r0.choiceCount(group_r31), ")");
37297
+ \u0275\u0275advance();
37298
+ \u0275\u0275conditional(group_r31.min > 0 ? 6 : -1);
37299
+ \u0275\u0275advance(2);
37300
+ \u0275\u0275repeater(group_r31.options);
37301
+ }
37302
+ }
37303
+ function MJCheckoutWidgetComponent_Conditional_22_Template(rf, ctx) {
37304
+ if (rf & 1) {
37305
+ \u0275\u0275elementStart(0, "section", 58)(1, "h3", 23);
37146
37306
  \u0275\u0275text(2, "Payment");
37147
37307
  \u0275\u0275elementEnd();
37148
- \u0275\u0275elementStart(3, "div", 54);
37149
- \u0275\u0275element(4, "div", 55);
37150
- \u0275\u0275elementStart(5, "div", 56)(6, "span", 57);
37308
+ \u0275\u0275elementStart(3, "div", 59);
37309
+ \u0275\u0275element(4, "div", 60);
37310
+ \u0275\u0275elementStart(5, "div", 61)(6, "span", 62);
37151
37311
  \u0275\u0275text(7, "\u{1F512}");
37152
37312
  \u0275\u0275elementEnd();
37153
37313
  \u0275\u0275elementStart(8, "span");
37154
37314
  \u0275\u0275text(9, "Secured by Stripe \u2022 PCI-DSS Level 1 Certified \u2022 End-to-end Encrypted");
37155
37315
  \u0275\u0275elementEnd()()()();
37156
- \u0275\u0275elementStart(10, "div", 58)(11, "span", 59);
37316
+ \u0275\u0275elementStart(10, "div", 63)(11, "span", 64);
37157
37317
  \u0275\u0275text(12, "Total Due");
37158
37318
  \u0275\u0275elementEnd();
37159
- \u0275\u0275elementStart(13, "span", 60);
37319
+ \u0275\u0275elementStart(13, "span", 65);
37160
37320
  \u0275\u0275text(14);
37161
37321
  \u0275\u0275elementEnd()();
37162
37322
  }
@@ -37166,22 +37326,22 @@ function MJCheckoutWidgetComponent_Conditional_20_Template(rf, ctx) {
37166
37326
  \u0275\u0275textInterpolate2("", ctx_r0.currencySymbol(), "", ctx_r0.totalGross().toFixed(2));
37167
37327
  }
37168
37328
  }
37169
- function MJCheckoutWidgetComponent_Conditional_23_Template(rf, ctx) {
37329
+ function MJCheckoutWidgetComponent_Conditional_25_Template(rf, ctx) {
37170
37330
  if (rf & 1) {
37171
- \u0275\u0275element(0, "span", 61);
37331
+ \u0275\u0275element(0, "span", 66);
37172
37332
  \u0275\u0275elementStart(1, "span");
37173
37333
  \u0275\u0275text(2, "Processing...");
37174
37334
  \u0275\u0275elementEnd();
37175
37335
  }
37176
37336
  }
37177
- function MJCheckoutWidgetComponent_Conditional_24_Template(rf, ctx) {
37337
+ function MJCheckoutWidgetComponent_Conditional_26_Template(rf, ctx) {
37178
37338
  if (rf & 1) {
37179
37339
  \u0275\u0275elementStart(0, "span");
37180
37340
  \u0275\u0275text(1, "Complete Free Registration");
37181
37341
  \u0275\u0275elementEnd();
37182
37342
  }
37183
37343
  }
37184
- function MJCheckoutWidgetComponent_Conditional_25_Template(rf, ctx) {
37344
+ function MJCheckoutWidgetComponent_Conditional_27_Template(rf, ctx) {
37185
37345
  if (rf & 1) {
37186
37346
  \u0275\u0275elementStart(0, "span");
37187
37347
  \u0275\u0275text(1);
@@ -37250,6 +37410,38 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37250
37410
  answersAreComplete() {
37251
37411
  return !CheckAnswersAgainstQuestions(this.questions(), this.answers()).Error;
37252
37412
  }
37413
+ /** The widget's choice groups. A malformed list shows none here; the server refuses the checkout. */
37414
+ choiceGroups = computed(() => ReadCheckoutChoiceGroups(this._config()?.choiceGroups).Groups, ...ngDevMode ? [{ debugName: "choiceGroups" }] : []);
37415
+ choices = signal({}, ...ngDevMode ? [{ debugName: "choices" }] : []);
37416
+ choiceValue = CheckoutChoiceOptionValue;
37417
+ choiceLabel = CheckoutChoiceOptionLabel;
37418
+ choiceCount = DescribeChoiceCount;
37419
+ isChosen(groupKey, value) {
37420
+ return (this.choices()[groupKey] ?? []).includes(value);
37421
+ }
37422
+ /**
37423
+ * Pick or unpick an option. A group of one swaps the pick, as a radio would; a larger group
37424
+ * stops at its maximum, and the template disables the rest until one is unpicked.
37425
+ */
37426
+ toggleChoice(group, value) {
37427
+ this.choices.update((current) => {
37428
+ const picked = current[group.key] ?? [];
37429
+ if (picked.includes(value))
37430
+ return { ...current, [group.key]: picked.filter((v) => v !== value) };
37431
+ if (group.max === 1)
37432
+ return { ...current, [group.key]: [value] };
37433
+ if (picked.length >= group.max)
37434
+ return current;
37435
+ return { ...current, [group.key]: [...picked, value] };
37436
+ });
37437
+ }
37438
+ /** True when the group is full, so its unpicked options are disabled. */
37439
+ isGroupFull(group) {
37440
+ return group.max > 1 && (this.choices()[group.key] ?? []).length >= group.max;
37441
+ }
37442
+ choicesAreComplete() {
37443
+ return !CheckChoicesAgainstGroups(this.choiceGroups(), this.choices()).Error;
37444
+ }
37253
37445
  // Form state signals
37254
37446
  email = signal("", ...ngDevMode ? [{ debugName: "email" }] : []);
37255
37447
  firstName = signal("", ...ngDevMode ? [{ debugName: "firstName" }] : []);
@@ -37532,6 +37724,8 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37532
37724
  return false;
37533
37725
  if (!this.answersAreComplete())
37534
37726
  return false;
37727
+ if (!this.choicesAreComplete())
37728
+ return false;
37535
37729
  if (!this.isFree() && !this.isPaymentReady)
37536
37730
  return false;
37537
37731
  return true;
@@ -37569,7 +37763,7 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37569
37763
  }
37570
37764
  }
37571
37765
  }
37572
- if (!this.answersAreComplete()) {
37766
+ if (!this.answersAreComplete() || !this.choicesAreComplete()) {
37573
37767
  return false;
37574
37768
  }
37575
37769
  if (!this.isFree() && !this.isPaymentReady) {
@@ -37595,6 +37789,7 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37595
37789
  },
37596
37790
  totalGross: this.totalGross(),
37597
37791
  answers: this.answers(),
37792
+ choices: this.choices(),
37598
37793
  stripePaymentMethodId: this.isFree() ? void 0 : this.stripePaymentMethodId ?? void 0,
37599
37794
  sessionKey: finalSessionKey
37600
37795
  };
@@ -37614,7 +37809,7 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37614
37809
  static \u0275fac = function MJCheckoutWidgetComponent_Factory(__ngFactoryType__) {
37615
37810
  return new (__ngFactoryType__ || _MJCheckoutWidgetComponent)(\u0275\u0275directiveInject(ElementRef), \u0275\u0275directiveInject(Renderer2));
37616
37811
  };
37617
- static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _MJCheckoutWidgetComponent, selectors: [["mj-checkout-widget"]], inputs: { config: "config", distributionSlug: "distributionSlug", sessionKey: "sessionKey", isProcessing: "isProcessing", errorMessage: "errorMessage", isPaymentReady: "isPaymentReady", stripePaymentMethodId: "stripePaymentMethodId", prefillEmail: "prefillEmail" }, outputs: { submitted: "submitted", cancelled: "cancelled" }, features: [\u0275\u0275NgOnChangesFeature], decls: 28, vars: 25, consts: [[1, "mj-checkout-widget-container"], [1, "mj-widget-header"], [1, "mj-widget-title"], [1, "mj-widget-description"], ["role", "alert", 1, "mj-widget-error-banner"], [1, "mj-widget-summary-card"], [1, "mj-summary-row"], [1, "mj-summary-item-info"], [1, "mj-product-name"], [1, "mj-badge-free"], [1, "mj-summary-price"], [1, "mj-price-free"], [1, "mj-price-amount"], [1, "mj-quantity-selector-row"], [1, "mj-widget-form-section"], [1, "mj-widget-actions"], ["type", "button", 1, "mj-btn-submit", 3, "click", "disabled"], ["type", "button", 1, "mj-btn-cancel", 3, "click", "disabled"], [1, "mj-error-icon"], ["for", "quantityInput", 1, "mj-label"], [1, "mj-qty-controls"], ["type", "button", 1, "mj-qty-btn", 3, "click", "disabled"], ["id", "quantityInput", "type", "number", "min", "1", 1, "mj-qty-input", 3, "ngModelChange", "ngModel", "max"], [1, "mj-section-title"], [1, "mj-form-grid"], [1, "mj-form-group", 3, "full-width"], [1, "mj-form-group"], [1, "mj-label"], [1, "mj-required"], [1, "mj-input", "mj-textarea", 3, "ngModel", "placeholder", "required"], [1, "mj-select", 3, "ngModel", "required"], [1, "mj-checkbox-label"], ["type", "number", 1, "mj-input", 3, "ngModel", "placeholder", "required"], ["type", "date", 1, "mj-input", 3, "ngModel", "required"], [1, "mj-input", 3, "type", "ngModel", "placeholder", "required"], [1, "mj-input", "mj-textarea", 3, "ngModelChange", "ngModel", "placeholder", "required"], [1, "mj-select", 3, "ngModelChange", "ngModel", "required"], [3, "ngValue"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], ["type", "number", 1, "mj-input", 3, "ngModelChange", "ngModel", "placeholder", "required"], ["type", "date", 1, "mj-input", 3, "ngModelChange", "ngModel", "required"], [1, "mj-input", 3, "ngModelChange", "type", "ngModel", "placeholder", "required"], [1, "mj-multi-attendee-header"], ["type", "button", 1, "mj-btn-link", 3, "click"], [1, "mj-attendee-matrix"], [1, "mj-attendee-card"], [1, "mj-attendee-card-title"], [1, "mj-form-group", "full-width"], ["type", "text", 1, "mj-input", 3, "id", "ngModel", "required"], [1, "mj-select", 3, "ngModelChange", "id", "ngModel", "required"], ["type", "text", "placeholder", "Please specify", "required", "", 1, "mj-input", "mj-question-other", 3, "ngModel"], ["type", "text", "placeholder", "Please specify", "required", "", 1, "mj-input", "mj-question-other", 3, "ngModelChange", "ngModel"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "id", "ngModel", "required"], [1, "mj-widget-payment-section"], [1, "mj-stripe-container"], ["id", "stripe-card-element", 1, "mj-stripe-mount-point"], [1, "mj-stripe-badge"], [1, "mj-stripe-lock-icon"], [1, "mj-checkout-total-row"], [1, "mj-total-label"], [1, "mj-total-amount"], [1, "mj-spinner"]], template: function MJCheckoutWidgetComponent_Template(rf, ctx) {
37812
+ static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _MJCheckoutWidgetComponent, selectors: [["mj-checkout-widget"]], inputs: { config: "config", distributionSlug: "distributionSlug", sessionKey: "sessionKey", isProcessing: "isProcessing", errorMessage: "errorMessage", isPaymentReady: "isPaymentReady", stripePaymentMethodId: "stripePaymentMethodId", prefillEmail: "prefillEmail" }, outputs: { submitted: "submitted", cancelled: "cancelled" }, features: [\u0275\u0275NgOnChangesFeature], decls: 30, vars: 25, consts: [[1, "mj-checkout-widget-container"], [1, "mj-widget-header"], [1, "mj-widget-title"], [1, "mj-widget-description"], ["role", "alert", 1, "mj-widget-error-banner"], [1, "mj-widget-summary-card"], [1, "mj-summary-row"], [1, "mj-summary-item-info"], [1, "mj-product-name"], [1, "mj-badge-free"], [1, "mj-summary-price"], [1, "mj-price-free"], [1, "mj-price-amount"], [1, "mj-quantity-selector-row"], [1, "mj-widget-form-section"], [1, "mj-widget-actions"], ["type", "button", 1, "mj-btn-submit", 3, "click", "disabled"], ["type", "button", 1, "mj-btn-cancel", 3, "click", "disabled"], [1, "mj-error-icon"], ["for", "quantityInput", 1, "mj-label"], [1, "mj-qty-controls"], ["type", "button", 1, "mj-qty-btn", 3, "click", "disabled"], ["id", "quantityInput", "type", "number", "min", "1", 1, "mj-qty-input", 3, "ngModelChange", "ngModel", "max"], [1, "mj-section-title"], [1, "mj-form-grid"], [1, "mj-form-group", 3, "full-width"], [1, "mj-form-group"], [1, "mj-label"], [1, "mj-required"], [1, "mj-input", "mj-textarea", 3, "ngModel", "placeholder", "required"], [1, "mj-select", 3, "ngModel", "required"], [1, "mj-checkbox-label"], ["type", "number", 1, "mj-input", 3, "ngModel", "placeholder", "required"], ["type", "date", 1, "mj-input", 3, "ngModel", "required"], [1, "mj-input", 3, "type", "ngModel", "placeholder", "required"], [1, "mj-input", "mj-textarea", 3, "ngModelChange", "ngModel", "placeholder", "required"], [1, "mj-select", 3, "ngModelChange", "ngModel", "required"], [3, "ngValue"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], ["type", "number", 1, "mj-input", 3, "ngModelChange", "ngModel", "placeholder", "required"], ["type", "date", 1, "mj-input", 3, "ngModelChange", "ngModel", "required"], [1, "mj-input", 3, "ngModelChange", "type", "ngModel", "placeholder", "required"], [1, "mj-multi-attendee-header"], ["type", "button", 1, "mj-btn-link", 3, "click"], [1, "mj-attendee-matrix"], [1, "mj-attendee-card"], [1, "mj-attendee-card-title"], [1, "mj-form-group", "full-width"], ["type", "text", 1, "mj-input", 3, "id", "ngModel", "required"], [1, "mj-select", 3, "ngModelChange", "id", "ngModel", "required"], ["type", "text", "placeholder", "Please specify", "required", "", 1, "mj-input", "mj-question-other", 3, "ngModel"], ["type", "text", "placeholder", "Please specify", "required", "", 1, "mj-input", "mj-question-other", 3, "ngModelChange", "ngModel"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "id", "ngModel", "required"], [1, "mj-choice-group"], [1, "mj-choice-count"], [1, "mj-choice-options"], [1, "mj-checkbox-label", 3, "is-disabled"], ["type", "checkbox", 3, "change", "checked", "disabled"], [1, "mj-widget-payment-section"], [1, "mj-stripe-container"], ["id", "stripe-card-element", 1, "mj-stripe-mount-point"], [1, "mj-stripe-badge"], [1, "mj-stripe-lock-icon"], [1, "mj-checkout-total-row"], [1, "mj-total-label"], [1, "mj-total-amount"], [1, "mj-spinner"]], template: function MJCheckoutWidgetComponent_Template(rf, ctx) {
37618
37813
  if (rf & 1) {
37619
37814
  \u0275\u0275elementStart(0, "div", 0)(1, "header", 1)(2, "h2", 2);
37620
37815
  \u0275\u0275text(3);
@@ -37636,18 +37831,19 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37636
37831
  \u0275\u0275conditionalCreate(17, MJCheckoutWidgetComponent_Conditional_17_Template, 5, 0)(18, MJCheckoutWidgetComponent_Conditional_18_Template, 8, 1);
37637
37832
  \u0275\u0275elementEnd();
37638
37833
  \u0275\u0275conditionalCreate(19, MJCheckoutWidgetComponent_Conditional_19_Template, 6, 0, "section", 14);
37639
- \u0275\u0275conditionalCreate(20, MJCheckoutWidgetComponent_Conditional_20_Template, 15, 2);
37640
- \u0275\u0275elementStart(21, "div", 15)(22, "button", 16);
37641
- \u0275\u0275listener("click", function MJCheckoutWidgetComponent_Template_button_click_22_listener() {
37834
+ \u0275\u0275repeaterCreate(20, MJCheckoutWidgetComponent_For_21_Template, 10, 3, "section", 14, _forTrack0);
37835
+ \u0275\u0275conditionalCreate(22, MJCheckoutWidgetComponent_Conditional_22_Template, 15, 2);
37836
+ \u0275\u0275elementStart(23, "div", 15)(24, "button", 16);
37837
+ \u0275\u0275listener("click", function MJCheckoutWidgetComponent_Template_button_click_24_listener() {
37642
37838
  return ctx.handleSubmit();
37643
37839
  });
37644
- \u0275\u0275conditionalCreate(23, MJCheckoutWidgetComponent_Conditional_23_Template, 3, 0)(24, MJCheckoutWidgetComponent_Conditional_24_Template, 2, 0, "span")(25, MJCheckoutWidgetComponent_Conditional_25_Template, 2, 2, "span");
37840
+ \u0275\u0275conditionalCreate(25, MJCheckoutWidgetComponent_Conditional_25_Template, 3, 0)(26, MJCheckoutWidgetComponent_Conditional_26_Template, 2, 0, "span")(27, MJCheckoutWidgetComponent_Conditional_27_Template, 2, 2, "span");
37645
37841
  \u0275\u0275elementEnd();
37646
- \u0275\u0275elementStart(26, "button", 17);
37647
- \u0275\u0275listener("click", function MJCheckoutWidgetComponent_Template_button_click_26_listener() {
37842
+ \u0275\u0275elementStart(28, "button", 17);
37843
+ \u0275\u0275listener("click", function MJCheckoutWidgetComponent_Template_button_click_28_listener() {
37648
37844
  return ctx.cancelled.emit();
37649
37845
  });
37650
- \u0275\u0275text(27, " Cancel ");
37846
+ \u0275\u0275text(29, " Cancel ");
37651
37847
  \u0275\u0275elementEnd()()();
37652
37848
  }
37653
37849
  if (rf & 2) {
@@ -37677,15 +37873,17 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37677
37873
  \u0275\u0275advance(2);
37678
37874
  \u0275\u0275conditional(ctx.questions().length > 0 ? 19 : -1);
37679
37875
  \u0275\u0275advance();
37680
- \u0275\u0275conditional(!ctx.isFree() ? 20 : -1);
37876
+ \u0275\u0275repeater(ctx.choiceGroups());
37877
+ \u0275\u0275advance(2);
37878
+ \u0275\u0275conditional(!ctx.isFree() ? 22 : -1);
37681
37879
  \u0275\u0275advance(2);
37682
37880
  \u0275\u0275property("disabled", !ctx.isFormValid() || ctx.isProcessing);
37683
37881
  \u0275\u0275advance();
37684
- \u0275\u0275conditional(ctx.isProcessing ? 23 : ctx.isFree() ? 24 : 25);
37882
+ \u0275\u0275conditional(ctx.isProcessing ? 25 : ctx.isFree() ? 26 : 27);
37685
37883
  \u0275\u0275advance(3);
37686
37884
  \u0275\u0275property("disabled", ctx.isProcessing);
37687
37885
  }
37688
- }, dependencies: [CommonModule, FormsModule, NgSelectOption, \u0275NgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, NgControlStatus, RequiredValidator, MinValidator, MaxValidator, NgModel], styles: ['[_nghost-%COMP%] {\n display: block;\n font-family: var(--mj-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);\n color: var(--mj-text-color, #1e293b);\n}\n\n.mj-checkout-widget-container[_ngcontent-%COMP%] {\n max-width: 560px;\n margin: 0 auto;\n background: var(--mj-bg-color, #ffffff);\n border: 1px solid #e2e8f0;\n border-radius: var(--mj-border-radius, 8px);\n padding: 24px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05);\n}\n\n.mj-widget-header[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.mj-widget-title[_ngcontent-%COMP%] {\n margin: 0 0 6px 0;\n font-size: 1.35rem;\n font-weight: 700;\n color: var(--mj-text-color, #0f172a);\n}\n\n.mj-widget-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9rem;\n color: #64748b;\n line-height: 1.4;\n}\n\n.mj-widget-error-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #fef2f2;\n border: 1px solid #f87171;\n color: #991b1b;\n padding: 10px 14px;\n border-radius: 6px;\n margin-bottom: 18px;\n font-size: 0.875rem;\n}\n\n.mj-error-icon[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n\n.mj-widget-summary-card[_ngcontent-%COMP%] {\n background: #f8fafc;\n border: 1px solid #e2e8f0;\n border-radius: 6px;\n padding: 14px 16px;\n margin-bottom: 20px;\n}\n\n.mj-summary-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.mj-summary-price[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.mj-widget-form-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.mj-summary-item-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.mj-product-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 1rem;\n color: #1e293b;\n}\n\n.mj-badge-free[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n font-size: 0.75rem;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n.mj-price-free[_ngcontent-%COMP%] {\n font-weight: 700;\n color: #166534;\n font-size: 1.1rem;\n}\n\n.mj-price-amount[_ngcontent-%COMP%] {\n font-weight: 700;\n color: #0f172a;\n font-size: 1.1rem;\n}\n\n.mj-quantity-selector-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px dashed #cbd5e1;\n}\n\n.mj-qty-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.mj-qty-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n background: #ffffff;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n cursor: pointer;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mj-qty-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.mj-qty-input[_ngcontent-%COMP%] {\n width: 44px;\n height: 28px;\n text-align: center;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.mj-section-title[_ngcontent-%COMP%] {\n font-size: 1rem;\n font-weight: 600;\n margin: 0 0 12px 0;\n color: #334155;\n}\n\n.mj-form-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n margin-bottom: 18px;\n}\n\n.mj-form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.mj-form-group.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.mj-label[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-weight: 500;\n color: #475569;\n}\n\n.mj-required[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.mj-input[_ngcontent-%COMP%], .mj-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n font-size: 0.9rem;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n background: #ffffff;\n color: #1e293b;\n outline: none;\n transition: border-color 0.15s ease;\n width: 100%;\n box-sizing: border-box;\n}\n\n.mj-textarea[_ngcontent-%COMP%] {\n min-height: 70px;\n resize: vertical;\n font-family: inherit;\n}\n\n.mj-select[_ngcontent-%COMP%] {\n min-height: 38px;\n}\n\n.mj-checkbox-label[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 0.9rem;\n color: #334155;\n margin-top: 4px;\n}\n\n\n\n.mj-question-other[_ngcontent-%COMP%] {\n margin-top: 8px;\n}\n\n.mj-input[_ngcontent-%COMP%]:focus, .mj-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-primary-color, #2563eb);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);\n}\n\n.mj-multi-attendee-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.mj-btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-primary-color, #2563eb);\n font-size: 0.8rem;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.mj-attendee-matrix[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 14px;\n margin-bottom: 20px;\n}\n\n.mj-attendee-card[_ngcontent-%COMP%] {\n background: #f8fafc;\n border: 1px solid #e2e8f0;\n border-radius: 6px;\n padding: 12px 14px;\n}\n\n.mj-attendee-card-title[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 600;\n color: #475569;\n margin-bottom: 10px;\n}\n\n\n\n.mj-widget-payment-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e2e8f0;\n}\n\n.mj-stripe-container[_ngcontent-%COMP%] {\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 6px;\n padding: 14px;\n margin-bottom: 16px;\n}\n\n.mj-stripe-mount-point[_ngcontent-%COMP%] {\n min-height: 40px;\n}\n\n.mj-stripe-badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 10px;\n font-size: 0.75rem;\n color: #64748b;\n}\n\n.mj-stripe-lock-icon[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n}\n\n.mj-checkout-total-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-top: 1px solid #e2e8f0;\n margin-top: 10px;\n margin-bottom: 18px;\n}\n\n.mj-total-label[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 1.05rem;\n color: #0f172a;\n}\n\n.mj-total-amount[_ngcontent-%COMP%] {\n font-weight: 800;\n font-size: 1.25rem;\n color: var(--mj-primary-color, #2563eb);\n}\n\n.mj-widget-actions[_ngcontent-%COMP%] {\n margin-top: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mj-btn-submit[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px;\n background: var(--mj-primary-color, #2563eb);\n color: #ffffff;\n font-size: 1rem;\n font-weight: 600;\n border: none;\n border-radius: var(--mj-border-radius, 8px);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: opacity 0.15s ease;\n}\n\n.mj-btn-submit[_ngcontent-%COMP%]:hover:not(:disabled) {\n opacity: 0.92;\n}\n\n.mj-btn-submit[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-btn-cancel[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n color: #64748b;\n font-size: 0.875rem;\n font-weight: 500;\n border: none;\n cursor: pointer;\n text-align: center;\n}\n\n.mj-btn-cancel[_ngcontent-%COMP%]:hover:not(:disabled) {\n color: #334155;\n text-decoration: underline;\n}\n\n.mj-spinner[_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n border: 2px solid #ffffff;\n border-top-color: transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_mj-spin 0.8s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_mj-spin {\n to { transform: rotate(360deg); }\n}'], changeDetection: 0 });
37886
+ }, dependencies: [CommonModule, FormsModule, NgSelectOption, \u0275NgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, NgControlStatus, RequiredValidator, MinValidator, MaxValidator, NgModel], styles: ['[_nghost-%COMP%] {\n display: block;\n font-family: var(--mj-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);\n color: var(--mj-text-color, #1e293b);\n}\n\n.mj-checkout-widget-container[_ngcontent-%COMP%] {\n max-width: 560px;\n margin: 0 auto;\n background: var(--mj-bg-color, #ffffff);\n border: 1px solid #e2e8f0;\n border-radius: var(--mj-border-radius, 8px);\n padding: 24px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05);\n}\n\n.mj-widget-header[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.mj-widget-title[_ngcontent-%COMP%] {\n margin: 0 0 6px 0;\n font-size: 1.35rem;\n font-weight: 700;\n color: var(--mj-text-color, #0f172a);\n}\n\n.mj-widget-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9rem;\n color: #64748b;\n line-height: 1.4;\n}\n\n.mj-widget-error-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #fef2f2;\n border: 1px solid #f87171;\n color: #991b1b;\n padding: 10px 14px;\n border-radius: 6px;\n margin-bottom: 18px;\n font-size: 0.875rem;\n}\n\n.mj-error-icon[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n\n.mj-widget-summary-card[_ngcontent-%COMP%] {\n background: #f8fafc;\n border: 1px solid #e2e8f0;\n border-radius: 6px;\n padding: 14px 16px;\n margin-bottom: 20px;\n}\n\n.mj-summary-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.mj-summary-price[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.mj-widget-form-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.mj-summary-item-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.mj-product-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 1rem;\n color: #1e293b;\n}\n\n.mj-badge-free[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n font-size: 0.75rem;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n.mj-price-free[_ngcontent-%COMP%] {\n font-weight: 700;\n color: #166534;\n font-size: 1.1rem;\n}\n\n.mj-price-amount[_ngcontent-%COMP%] {\n font-weight: 700;\n color: #0f172a;\n font-size: 1.1rem;\n}\n\n.mj-quantity-selector-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px dashed #cbd5e1;\n}\n\n.mj-qty-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.mj-qty-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n background: #ffffff;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n cursor: pointer;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mj-qty-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.mj-qty-input[_ngcontent-%COMP%] {\n width: 44px;\n height: 28px;\n text-align: center;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.mj-section-title[_ngcontent-%COMP%] {\n font-size: 1rem;\n font-weight: 600;\n margin: 0 0 12px 0;\n color: #334155;\n}\n\n.mj-form-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n margin-bottom: 18px;\n}\n\n.mj-form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.mj-form-group.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.mj-label[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-weight: 500;\n color: #475569;\n}\n\n.mj-required[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.mj-input[_ngcontent-%COMP%], .mj-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n font-size: 0.9rem;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n background: #ffffff;\n color: #1e293b;\n outline: none;\n transition: border-color 0.15s ease;\n width: 100%;\n box-sizing: border-box;\n}\n\n.mj-textarea[_ngcontent-%COMP%] {\n min-height: 70px;\n resize: vertical;\n font-family: inherit;\n}\n\n.mj-select[_ngcontent-%COMP%] {\n min-height: 38px;\n}\n\n.mj-checkbox-label[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 0.9rem;\n color: #334155;\n margin-top: 4px;\n}\n\n\n\n.mj-question-other[_ngcontent-%COMP%] {\n margin-top: 8px;\n}\n\n\n\n.mj-choice-group[_ngcontent-%COMP%] {\n border: 0;\n margin: 0;\n padding: 0;\n}\n\n.mj-choice-count[_ngcontent-%COMP%] {\n font-weight: normal;\n color: #64748b;\n}\n\n.mj-choice-options[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.mj-checkbox-label.is-disabled[_ngcontent-%COMP%] {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.mj-input[_ngcontent-%COMP%]:focus, .mj-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-primary-color, #2563eb);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);\n}\n\n.mj-multi-attendee-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.mj-btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-primary-color, #2563eb);\n font-size: 0.8rem;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.mj-attendee-matrix[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 14px;\n margin-bottom: 20px;\n}\n\n.mj-attendee-card[_ngcontent-%COMP%] {\n background: #f8fafc;\n border: 1px solid #e2e8f0;\n border-radius: 6px;\n padding: 12px 14px;\n}\n\n.mj-attendee-card-title[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 600;\n color: #475569;\n margin-bottom: 10px;\n}\n\n\n\n.mj-widget-payment-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e2e8f0;\n}\n\n.mj-stripe-container[_ngcontent-%COMP%] {\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 6px;\n padding: 14px;\n margin-bottom: 16px;\n}\n\n.mj-stripe-mount-point[_ngcontent-%COMP%] {\n min-height: 40px;\n}\n\n.mj-stripe-badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 10px;\n font-size: 0.75rem;\n color: #64748b;\n}\n\n.mj-stripe-lock-icon[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n}\n\n.mj-checkout-total-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-top: 1px solid #e2e8f0;\n margin-top: 10px;\n margin-bottom: 18px;\n}\n\n.mj-total-label[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 1.05rem;\n color: #0f172a;\n}\n\n.mj-total-amount[_ngcontent-%COMP%] {\n font-weight: 800;\n font-size: 1.25rem;\n color: var(--mj-primary-color, #2563eb);\n}\n\n.mj-widget-actions[_ngcontent-%COMP%] {\n margin-top: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mj-btn-submit[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px;\n background: var(--mj-primary-color, #2563eb);\n color: #ffffff;\n font-size: 1rem;\n font-weight: 600;\n border: none;\n border-radius: var(--mj-border-radius, 8px);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: opacity 0.15s ease;\n}\n\n.mj-btn-submit[_ngcontent-%COMP%]:hover:not(:disabled) {\n opacity: 0.92;\n}\n\n.mj-btn-submit[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-btn-cancel[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n color: #64748b;\n font-size: 0.875rem;\n font-weight: 500;\n border: none;\n cursor: pointer;\n text-align: center;\n}\n\n.mj-btn-cancel[_ngcontent-%COMP%]:hover:not(:disabled) {\n color: #334155;\n text-decoration: underline;\n}\n\n.mj-spinner[_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n border: 2px solid #ffffff;\n border-top-color: transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_mj-spin 0.8s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_mj-spin {\n to { transform: rotate(360deg); }\n}'], changeDetection: 0 });
37689
37887
  };
37690
37888
  (() => {
37691
37889
  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MJCheckoutWidgetComponent, [{
@@ -37960,6 +38158,35 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
37960
38158
  </section>
37961
38159
  }
37962
38160
 
38161
+ <!-- Choice groups from the widget's Configuration; the picks are recorded on the order line -->
38162
+ @for (group of choiceGroups(); track group.key) {
38163
+ <section class="mj-widget-form-section">
38164
+ <fieldset class="mj-choice-group">
38165
+ <legend class="mj-section-title">
38166
+ {{ group.label }}
38167
+ <span class="mj-choice-count">(choose {{ choiceCount(group) }})</span>
38168
+ @if (group.min > 0) {
38169
+ <span class="mj-required">*</span>
38170
+ }
38171
+ </legend>
38172
+ <div class="mj-choice-options">
38173
+ @for (opt of group.options; track choiceValue(opt)) {
38174
+ <label
38175
+ class="mj-checkbox-label"
38176
+ [class.is-disabled]="isGroupFull(group) && !isChosen(group.key, choiceValue(opt))">
38177
+ <input
38178
+ type="checkbox"
38179
+ [checked]="isChosen(group.key, choiceValue(opt))"
38180
+ [disabled]="isGroupFull(group) && !isChosen(group.key, choiceValue(opt))"
38181
+ (change)="toggleChoice(group, choiceValue(opt))" />
38182
+ <span>{{ choiceLabel(opt) }}</span>
38183
+ </label>
38184
+ }
38185
+ </div>
38186
+ </fieldset>
38187
+ </section>
38188
+ }
38189
+
37963
38190
  <!-- Stripe Embedded Payment Section -->
37964
38191
  @if (!isFree()) {
37965
38192
  <section class="mj-widget-payment-section">
@@ -38221,6 +38448,29 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
38221
38448
  margin-top: 8px;
38222
38449
  }
38223
38450
 
38451
+ /* A choice group: its options stacked, with how many to pick beside the heading. */
38452
+ .mj-choice-group {
38453
+ border: 0;
38454
+ margin: 0;
38455
+ padding: 0;
38456
+ }
38457
+
38458
+ .mj-choice-count {
38459
+ font-weight: normal;
38460
+ color: #64748b;
38461
+ }
38462
+
38463
+ .mj-choice-options {
38464
+ display: flex;
38465
+ flex-direction: column;
38466
+ gap: 2px;
38467
+ }
38468
+
38469
+ .mj-checkbox-label.is-disabled {
38470
+ cursor: not-allowed;
38471
+ opacity: 0.55;
38472
+ }
38473
+
38224
38474
  .mj-input:focus, .mj-select:focus {
38225
38475
  border-color: var(--mj-primary-color, #2563eb);
38226
38476
  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);
@@ -38404,7 +38654,7 @@ var MJCheckoutWidgetComponent = class _MJCheckoutWidgetComponent {
38404
38654
  }] });
38405
38655
  })();
38406
38656
  (() => {
38407
- (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(MJCheckoutWidgetComponent, { className: "MJCheckoutWidgetComponent", filePath: "lib/checkout-widget/checkout-widget.component.ts", lineNumber: 130 });
38657
+ (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(MJCheckoutWidgetComponent, { className: "MJCheckoutWidgetComponent", filePath: "lib/checkout-widget/checkout-widget.component.ts", lineNumber: 142 });
38408
38658
  })();
38409
38659
 
38410
38660
  // dist/lib/checkout-widget/checkout-draft-line.js
@@ -38867,7 +39117,8 @@ var CheckoutPublicHostComponent = class _CheckoutPublicHostComponent {
38867
39117
  email: event.email,
38868
39118
  lines: [line],
38869
39119
  answers: event.answers,
38870
- ...this.attributionSource ? { attribution: { source: this.attributionSource, reference: this.attributionReference } } : {}
39120
+ ...this.attributionSource ? { attribution: { source: this.attributionSource, reference: this.attributionReference } } : {},
39121
+ choices: event.choices
38871
39122
  });
38872
39123
  if (!draft?.Success) {
38873
39124
  throw new Error(this.str(draft?.ErrorMessage, "Could not price this checkout."));
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-public-host.component.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-public-host.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkout-public-host.component.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-public-host.component.ts"],"names":[],"mappings":"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"}
@@ -380,6 +380,7 @@ export class CheckoutPublicHostComponent {
380
380
  ...(this.attributionSource
381
381
  ? { attribution: { source: this.attributionSource, reference: this.attributionReference } }
382
382
  : {}),
383
+ choices: event.choices,
383
384
  });
384
385
  if (!draft?.Success) {
385
386
  throw new Error(this.str(draft?.ErrorMessage, 'Could not price this checkout.'));