@mj-biz-apps/orders-ng 5.6.0 → 5.7.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 (59) hide show
  1. package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts +0 -4
  2. package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/OrderHeader/order-header-form.component.js +139 -284
  4. package/dist/lib/custom/OrderHeader/order-header-form.component.js.map +1 -1
  5. package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts +38 -1
  6. package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts.map +1 -1
  7. package/dist/lib/custom/OrderHeader/order-lines-editor.component.js +526 -112
  8. package/dist/lib/custom/OrderHeader/order-lines-editor.component.js.map +1 -1
  9. package/dist/lib/custom/OrderHeader/party-address-picker.component.d.ts +67 -0
  10. package/dist/lib/custom/OrderHeader/party-address-picker.component.d.ts.map +1 -0
  11. package/dist/lib/custom/OrderHeader/party-address-picker.component.js +430 -0
  12. package/dist/lib/custom/OrderHeader/party-address-picker.component.js.map +1 -0
  13. package/dist/lib/custom/Product/product-form.component.d.ts +1 -3
  14. package/dist/lib/custom/Product/product-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/Product/product-form.component.js +6 -7
  16. package/dist/lib/custom/Product/product-form.component.js.map +1 -1
  17. package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js +4 -9
  18. package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js.map +1 -1
  19. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.d.ts +69 -4
  20. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.d.ts.map +1 -1
  21. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.js +845 -314
  22. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.js.map +1 -1
  23. package/dist/lib/custom/custom-forms.module.d.ts +10 -7
  24. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  25. package/dist/lib/custom/custom-forms.module.js +12 -0
  26. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  27. package/dist/lib/data/entity-names.d.ts +2 -0
  28. package/dist/lib/data/entity-names.d.ts.map +1 -1
  29. package/dist/lib/data/entity-names.js +2 -0
  30. package/dist/lib/data/entity-names.js.map +1 -1
  31. package/dist/lib/data/orders-queries.d.ts +11 -2
  32. package/dist/lib/data/orders-queries.d.ts.map +1 -1
  33. package/dist/lib/data/orders-queries.js +29 -41
  34. package/dist/lib/data/orders-queries.js.map +1 -1
  35. package/dist/lib/form-panels/catalog-overviews.panels.d.ts.map +1 -1
  36. package/dist/lib/form-panels/catalog-overviews.panels.js +7 -6
  37. package/dist/lib/form-panels/catalog-overviews.panels.js.map +1 -1
  38. package/dist/lib/form-panels/commercial-overviews.panels.js +1 -1
  39. package/dist/lib/form-panels/commercial-overviews.panels.js.map +1 -1
  40. package/dist/lib/form-panels/product-header.panel.d.ts +4 -0
  41. package/dist/lib/form-panels/product-header.panel.d.ts.map +1 -1
  42. package/dist/lib/form-panels/product-header.panel.js +17 -4
  43. package/dist/lib/form-panels/product-header.panel.js.map +1 -1
  44. package/dist/lib/form-panels/product-widget.panels.d.ts.map +1 -1
  45. package/dist/lib/form-panels/product-widget.panels.js +8 -5
  46. package/dist/lib/form-panels/product-widget.panels.js.map +1 -1
  47. package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js +4 -4
  48. package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js.map +1 -1
  49. package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.d.ts.map +1 -1
  50. package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.js +39 -27
  51. package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.js.map +1 -1
  52. package/dist/lib/panels/catalog-list-price.d.ts +4 -0
  53. package/dist/lib/panels/catalog-list-price.d.ts.map +1 -0
  54. package/dist/lib/panels/catalog-list-price.js +23 -0
  55. package/dist/lib/panels/catalog-list-price.js.map +1 -0
  56. package/dist/lib/services/pricing-scheduler.service.d.ts.map +1 -1
  57. package/dist/lib/services/pricing-scheduler.service.js +6 -3
  58. package/dist/lib/services/pricing-scheduler.service.js.map +1 -1
  59. package/package.json +6 -4
@@ -1,10 +1,10 @@
1
- import { ChangeDetectorRef, Component, EventEmitter, Input, Output, inject } from '@angular/core';
1
+ import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
- import { CompositeKey, Metadata, } from '@memberjunction/core';
4
+ import { CompositeKey, Metadata, RunView, } from '@memberjunction/core';
5
5
  import { UUIDsEqual } from '@memberjunction/global';
6
6
  import { BaseFormsModule, } from '@memberjunction/ng-base-forms';
7
- import { OrderLineEntity, ClampLineQuantity, } from '@mj-biz-apps/orders-entities';
7
+ import { OrderLineEntity, ClampLineQuantity, ListApplicablePrices, LoadOrdersEngine, OrdersEngine, loadApplicabilityContext, moneyEqual, priceOverrideCatalogInstalled, userPriceOverrideKind, } from '@mj-biz-apps/orders-entities';
8
8
  import { MJOConsequenceChipComponent, MJOPriceSourceBadgeComponent } from '../../panels/chips.component.js';
9
9
  import { MJOMoneyPipe } from '../../panels/money-format.js';
10
10
  import { MJO_ENTITIES } from '../../data/entity-names.js';
@@ -12,9 +12,11 @@ import { GetCatalogOptions } from '../../data/orders-queries.js';
12
12
  import { MJOPricingScheduler } from '../../services/pricing-scheduler.service.js';
13
13
  import { ExtensionCollapsedHint, ExtensionToggleLabel, } from './line-extension-fields.js';
14
14
  import { CachedExtensionEntityInfo, CachedExtensionFormConfig } from './line-extension-cache.js';
15
+ import { anyFieldIsDirty } from '@mj-biz-apps/orders-entities';
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "@angular/forms";
17
18
  import * as i2 from "@memberjunction/ng-base-forms";
19
+ const _c0 = ["pickerHost"];
18
20
  const _forTrack0 = ($index, $item) => $item.ID;
19
21
  function MJOOrderLinesEditorComponent_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
20
22
  i0.ɵɵtext(0);
@@ -26,14 +28,14 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_7_Template(rf, ctx) { if
26
28
  } }
27
29
  function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
28
30
  const _r4 = i0.ɵɵgetCurrentView();
29
- i0.ɵɵelementStart(0, "button", 18);
31
+ i0.ɵɵelementStart(0, "button", 24);
30
32
  i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Bump(line_r2, -1)); });
31
33
  i0.ɵɵtext(1, "\u2212");
32
34
  i0.ɵɵelementEnd();
33
- i0.ɵɵelementStart(2, "input", 19);
35
+ i0.ɵɵelementStart(2, "input", 25);
34
36
  i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template_input_change_2_listener($event) { i0.ɵɵrestoreView(_r4); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SetQuantity(line_r2, $event)); });
35
37
  i0.ɵɵelementEnd();
36
- i0.ɵɵelementStart(3, "button", 20);
38
+ i0.ɵɵelementStart(3, "button", 26);
37
39
  i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Bump(line_r2, 1)); });
38
40
  i0.ɵɵtext(4, "+");
39
41
  i0.ɵɵelementEnd();
@@ -46,7 +48,7 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template(rf, ctx) { if
46
48
  i0.ɵɵproperty("disabled", ctx_r2.QuantityAtMax(line_r2));
47
49
  } }
48
50
  function MJOOrderLinesEditorComponent_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
49
- i0.ɵɵelementStart(0, "span", 9);
51
+ i0.ɵɵelementStart(0, "span", 10);
50
52
  i0.ɵɵtext(1);
51
53
  i0.ɵɵelementEnd();
52
54
  } if (rf & 2) {
@@ -55,18 +57,42 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_10_Template(rf, ctx) { i
55
57
  i0.ɵɵtextInterpolate(line_r2.Quantity);
56
58
  } }
57
59
  function MJOOrderLinesEditorComponent_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
58
- i0.ɵɵelementStart(0, "div", 13);
60
+ const _r5 = i0.ɵɵgetCurrentView();
61
+ i0.ɵɵelementStart(0, "button", 27);
62
+ i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_16_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleOverrideEditor(line_r2)); });
63
+ i0.ɵɵelement(1, "i", 28);
64
+ i0.ɵɵelementEnd();
65
+ } if (rf & 2) {
66
+ const line_r2 = i0.ɵɵnextContext().$implicit;
67
+ const ctx_r2 = i0.ɵɵnextContext();
68
+ i0.ɵɵattribute("aria-expanded", ctx_r2.IsOverrideEditorOpen(line_r2))("aria-label", ctx_r2.IsOverridden(line_r2) ? "Edit price override" : "Override price");
69
+ } }
70
+ function MJOOrderLinesEditorComponent_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵelementStart(0, "span", 15);
72
+ i0.ɵɵtext(1, "overridden");
73
+ i0.ɵɵelementEnd();
74
+ } }
75
+ function MJOOrderLinesEditorComponent_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
76
+ i0.ɵɵelement(0, "mjo-price-source-badge", 16);
77
+ } if (rf & 2) {
78
+ let tmp_11_0;
79
+ const line_r2 = i0.ɵɵnextContext().$implicit;
80
+ const ctx_r2 = i0.ɵɵnextContext();
81
+ i0.ɵɵproperty("Source", ((tmp_11_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_11_0.PriceSource) ?? null)("Settled", !ctx_r2.Pricing.Loading)("Overridden", false);
82
+ } }
83
+ function MJOOrderLinesEditorComponent_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
84
+ i0.ɵɵelementStart(0, "div", 17);
59
85
  i0.ɵɵtext(1);
60
86
  i0.ɵɵelementEnd();
61
87
  } if (rf & 2) {
62
88
  i0.ɵɵadvance();
63
89
  i0.ɵɵtextInterpolate(ctx);
64
90
  } }
65
- function MJOOrderLinesEditorComponent_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
66
- const _r5 = i0.ɵɵgetCurrentView();
67
- i0.ɵɵelementStart(0, "button", 21);
68
- i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Remove(line_r2)); });
69
- i0.ɵɵelement(1, "i", 22);
91
+ function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
92
+ const _r6 = i0.ɵɵgetCurrentView();
93
+ i0.ɵɵelementStart(0, "button", 29);
94
+ i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Remove(line_r2)); });
95
+ i0.ɵɵelement(1, "i", 30);
70
96
  i0.ɵɵelementEnd();
71
97
  } if (rf & 2) {
72
98
  let tmp_11_0;
@@ -74,39 +100,121 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_20_Template(rf, ctx) { i
74
100
  const ctx_r2 = i0.ɵɵnextContext();
75
101
  i0.ɵɵattribute("aria-label", "Remove " + (((tmp_11_0 = ctx_r2.ProductFor(line_r2)) == null ? null : tmp_11_0.Name) ?? "line"));
76
102
  } }
77
- function MJOOrderLinesEditorComponent_For_2_Conditional_22_Conditional_0_Template(rf, ctx) { if (rf & 1) {
78
- i0.ɵɵelementStart(0, "mjo-consequence-chip", 23);
103
+ function MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
104
+ i0.ɵɵelementStart(0, "option", 34);
105
+ i0.ɵɵtext(1, "Custom amount");
106
+ i0.ɵɵelementEnd();
107
+ } }
108
+ function MJOOrderLinesEditorComponent_For_2_Conditional_24_For_7_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelementStart(0, "option", 35);
110
+ i0.ɵɵtext(1);
111
+ i0.ɵɵpipe(2, "mjoMoney");
112
+ i0.ɵɵelementEnd();
113
+ } if (rf & 2) {
114
+ const price_r8 = ctx.$implicit;
115
+ i0.ɵɵproperty("value", price_r8.ID);
116
+ i0.ɵɵadvance();
117
+ i0.ɵɵtextInterpolate2("", price_r8.Name, " \u00B7 ", i0.ɵɵpipeBind1(2, 3, price_r8.UnitPrice));
118
+ } }
119
+ function MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_8_Template(rf, ctx) { if (rf & 1) {
120
+ const _r9 = i0.ɵɵgetCurrentView();
121
+ i0.ɵɵelementStart(0, "input", 42);
122
+ i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_8_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r9); const line_r2 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.TypeAmount(line_r2, $event)); });
123
+ i0.ɵɵelementEnd();
124
+ } if (rf & 2) {
125
+ const line_r2 = i0.ɵɵnextContext(2).$implicit;
126
+ const ctx_r2 = i0.ɵɵnextContext();
127
+ i0.ɵɵproperty("value", ctx_r2.DisplayUnit(line_r2));
128
+ } }
129
+ function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
130
+ const _r7 = i0.ɵɵgetCurrentView();
131
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 31)(2, "select", 32);
132
+ i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_select_change_2_listener($event) { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.PickNamedPrice(line_r2, $event)); });
133
+ i0.ɵɵelementStart(3, "option", 33);
134
+ i0.ɵɵtext(4);
135
+ i0.ɵɵelementEnd();
136
+ i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_5_Template, 2, 0, "option", 34);
137
+ i0.ɵɵrepeaterCreate(6, MJOOrderLinesEditorComponent_For_2_Conditional_24_For_7_Template, 3, 5, "option", 35, _forTrack0);
138
+ i0.ɵɵelementEnd();
139
+ i0.ɵɵconditionalCreate(8, MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_8_Template, 1, 1, "input", 36);
140
+ i0.ɵɵelementEnd();
141
+ i0.ɵɵelementStart(9, "label", 37)(10, "span");
142
+ i0.ɵɵtext(11, "Override Explanation");
143
+ i0.ɵɵelementEnd();
144
+ i0.ɵɵelementStart(12, "textarea", 38);
145
+ i0.ɵɵlistener("input", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_textarea_input_12_listener($event) { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SetOverrideReason(line_r2, $event)); });
146
+ i0.ɵɵelementEnd()();
147
+ i0.ɵɵelementStart(13, "div", 39)(14, "button", 40);
148
+ i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.DoneOverrideEditor(line_r2)); });
149
+ i0.ɵɵtext(15, "Done");
150
+ i0.ɵɵelementEnd();
151
+ i0.ɵɵelementStart(16, "button", 41);
152
+ i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetOverride(line_r2)); });
153
+ i0.ɵɵtext(17, "Use Default Price");
154
+ i0.ɵɵelementEnd()()();
155
+ } if (rf & 2) {
156
+ let tmp_11_0;
157
+ const line_r2 = i0.ɵɵnextContext().$implicit;
158
+ const ctx_r2 = i0.ɵɵnextContext();
159
+ i0.ɵɵattribute("aria-label", "Override price for " + (((tmp_11_0 = ctx_r2.ProductFor(line_r2)) == null ? null : tmp_11_0.Name) ?? "line"));
160
+ i0.ɵɵadvance(2);
161
+ i0.ɵɵproperty("value", ctx_r2.SelectedPriceID(line_r2));
162
+ i0.ɵɵadvance(2);
163
+ i0.ɵɵtextInterpolate(ctx_r2.DefaultLabel(line_r2));
164
+ i0.ɵɵadvance();
165
+ i0.ɵɵconditional(ctx_r2.OverrideKind === "any" ? 5 : -1);
166
+ i0.ɵɵadvance();
167
+ i0.ɵɵrepeater(ctx_r2.ApplicableFor(line_r2));
168
+ i0.ɵɵadvance(2);
169
+ i0.ɵɵconditional(ctx_r2.ShowCustomAmount(line_r2) ? 8 : -1);
170
+ i0.ɵɵadvance();
171
+ i0.ɵɵclassProp("is-off", !ctx_r2.CanExplainOverride(line_r2));
172
+ i0.ɵɵadvance(3);
173
+ i0.ɵɵproperty("disabled", !ctx_r2.CanExplainOverride(line_r2))("value", ctx_r2.OverrideReasonText(line_r2));
174
+ } }
175
+ function MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_0_Template(rf, ctx) { if (rf & 1) {
176
+ i0.ɵɵelementStart(0, "mjo-consequence-chip", 43);
79
177
  i0.ɵɵtext(1, "Ships \u2014 holds the order at Posted");
80
178
  i0.ɵɵelementEnd();
81
179
  } }
82
- function MJOOrderLinesEditorComponent_For_2_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
83
- i0.ɵɵelementStart(0, "mjo-consequence-chip", 24);
180
+ function MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_1_Template(rf, ctx) { if (rf & 1) {
181
+ i0.ɵɵelementStart(0, "mjo-consequence-chip", 44);
84
182
  i0.ɵɵtext(1, "Untaxable");
85
183
  i0.ɵɵelementEnd();
86
184
  } }
87
- function MJOOrderLinesEditorComponent_For_2_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
88
- i0.ɵɵelementStart(0, "mjo-consequence-chip", 25);
185
+ function MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_2_Template(rf, ctx) { if (rf & 1) {
186
+ i0.ɵɵelementStart(0, "mjo-consequence-chip", 45);
89
187
  i0.ɵɵtext(1);
90
188
  i0.ɵɵelementEnd();
91
189
  } if (rf & 2) {
92
- const product_r6 = i0.ɵɵnextContext();
190
+ const product_r10 = i0.ɵɵnextContext();
93
191
  i0.ɵɵadvance();
94
- i0.ɵɵtextInterpolate1("Revenue to ", product_r6.CompanyName);
192
+ i0.ɵɵtextInterpolate1("Revenue to ", product_r10.CompanyName);
95
193
  } }
96
- function MJOOrderLinesEditorComponent_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
97
- i0.ɵɵconditionalCreate(0, MJOOrderLinesEditorComponent_For_2_Conditional_22_Conditional_0_Template, 2, 0, "mjo-consequence-chip", 23);
98
- i0.ɵɵconditionalCreate(1, MJOOrderLinesEditorComponent_For_2_Conditional_22_Conditional_1_Template, 2, 0, "mjo-consequence-chip", 24);
99
- i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_For_2_Conditional_22_Conditional_2_Template, 2, 1, "mjo-consequence-chip", 25);
194
+ function MJOOrderLinesEditorComponent_For_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
195
+ i0.ɵɵconditionalCreate(0, MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_0_Template, 2, 0, "mjo-consequence-chip", 43);
196
+ i0.ɵɵconditionalCreate(1, MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_1_Template, 2, 0, "mjo-consequence-chip", 44);
197
+ i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_2_Template, 2, 1, "mjo-consequence-chip", 45);
100
198
  } if (rf & 2) {
101
- const product_r6 = ctx;
102
- i0.ɵɵconditional(product_r6.TypeName === "Goods" ? 0 : -1);
199
+ const product_r10 = ctx;
200
+ const line_r2 = i0.ɵɵnextContext().$implicit;
201
+ const ctx_r2 = i0.ɵɵnextContext();
202
+ i0.ɵɵconditional(product_r10.TypeName === "Goods" ? 0 : -1);
203
+ i0.ɵɵadvance();
204
+ i0.ɵɵconditional(!product_r10.Taxable ? 1 : -1);
103
205
  i0.ɵɵadvance();
104
- i0.ɵɵconditional(!product_r6.Taxable ? 1 : -1);
206
+ i0.ɵɵconditional(ctx_r2.ShowsForeignRevenue(line_r2) ? 2 : -1);
207
+ } }
208
+ function MJOOrderLinesEditorComponent_For_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
209
+ i0.ɵɵelementStart(0, "div", 22);
210
+ i0.ɵɵtext(1);
211
+ i0.ɵɵelementEnd();
212
+ } if (rf & 2) {
105
213
  i0.ɵɵadvance();
106
- i0.ɵɵconditional(product_r6.CompanyName ? 2 : -1);
214
+ i0.ɵɵtextInterpolate(ctx);
107
215
  } }
108
- function MJOOrderLinesEditorComponent_For_2_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵelementStart(0, "span", 30);
216
+ function MJOOrderLinesEditorComponent_For_2_Conditional_28_Conditional_5_Template(rf, ctx) { if (rf & 1) {
217
+ i0.ɵɵelementStart(0, "span", 50);
110
218
  i0.ɵɵtext(1);
111
219
  i0.ɵɵelementEnd();
112
220
  } if (rf & 2) {
@@ -115,18 +223,18 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_23_Conditional_5_Templat
115
223
  i0.ɵɵadvance();
116
224
  i0.ɵɵtextInterpolate(ctx_r2.ExtensionHint(line_r2));
117
225
  } }
118
- function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
119
- const _r7 = i0.ɵɵgetCurrentView();
120
- i0.ɵɵelementStart(0, "div", 26)(1, "button", 27);
121
- i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleExtension(line_r2)); });
122
- i0.ɵɵelement(2, "i", 28);
123
- i0.ɵɵelementStart(3, "span", 29);
226
+ function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
227
+ const _r11 = i0.ɵɵgetCurrentView();
228
+ i0.ɵɵelementStart(0, "div", 46)(1, "button", 47);
229
+ i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleExtension(line_r2)); });
230
+ i0.ɵɵelement(2, "i", 48);
231
+ i0.ɵɵelementStart(3, "span", 49);
124
232
  i0.ɵɵtext(4);
125
233
  i0.ɵɵelementEnd();
126
- i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_2_Conditional_23_Conditional_5_Template, 2, 1, "span", 30);
234
+ i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_2_Conditional_28_Conditional_5_Template, 2, 1, "span", 50);
127
235
  i0.ɵɵelementEnd();
128
- i0.ɵɵelementStart(6, "div", 31)(7, "div", 32)(8, "mj-entity-form-host", 33);
129
- i0.ɵɵlistener("FormCreated", function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template_mj_entity_form_host_FormCreated_8_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnExtensionFormCreated($event)); })("Navigate", function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template_mj_entity_form_host_Navigate_8_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnExtensionNavigate($event)); });
236
+ i0.ɵɵelementStart(6, "div", 51)(7, "div", 52)(8, "mj-entity-form-host", 53);
237
+ i0.ɵɵlistener("FormCreated", function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template_mj_entity_form_host_FormCreated_8_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnExtensionFormCreated($event)); })("Navigate", function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template_mj_entity_form_host_Navigate_8_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnExtensionNavigate($event)); });
130
238
  i0.ɵɵelementEnd()()()();
131
239
  } if (rf & 2) {
132
240
  const line_r2 = i0.ɵɵnextContext().$implicit;
@@ -146,46 +254,48 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template(rf, ctx) { i
146
254
  } }
147
255
  function MJOOrderLinesEditorComponent_For_2_Template(rf, ctx) { if (rf & 1) {
148
256
  const _r1 = i0.ɵɵgetCurrentView();
149
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 4)(2, "div", 5)(3, "button", 6);
257
+ i0.ɵɵelementStart(0, "div", 2)(1, "div", 5)(2, "div", 6)(3, "button", 7);
150
258
  i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Template_button_click_3_listener($event) { const line_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenProduct(line_r2, $event)); });
151
259
  i0.ɵɵtext(4);
152
260
  i0.ɵɵelementEnd();
153
- i0.ɵɵelementStart(5, "div", 7);
261
+ i0.ɵɵelementStart(5, "div", 8);
154
262
  i0.ɵɵtext(6);
155
263
  i0.ɵɵconditionalCreate(7, MJOOrderLinesEditorComponent_For_2_Conditional_7_Template, 1, 1);
156
264
  i0.ɵɵelementEnd()();
157
- i0.ɵɵelementStart(8, "div", 8);
158
- i0.ɵɵconditionalCreate(9, MJOOrderLinesEditorComponent_For_2_Conditional_9_Template, 5, 2)(10, MJOOrderLinesEditorComponent_For_2_Conditional_10_Template, 2, 1, "span", 9);
265
+ i0.ɵɵelementStart(8, "div", 9);
266
+ i0.ɵɵconditionalCreate(9, MJOOrderLinesEditorComponent_For_2_Conditional_9_Template, 5, 2)(10, MJOOrderLinesEditorComponent_For_2_Conditional_10_Template, 2, 1, "span", 10);
159
267
  i0.ɵɵelementEnd();
160
- i0.ɵɵelementStart(11, "div", 10)(12, "div", 11);
161
- i0.ɵɵtext(13);
162
- i0.ɵɵpipe(14, "mjoMoney");
268
+ i0.ɵɵelementStart(11, "div", 11)(12, "div", 12)(13, "div", 13);
269
+ i0.ɵɵtext(14);
270
+ i0.ɵɵpipe(15, "mjoMoney");
163
271
  i0.ɵɵelementEnd();
164
- i0.ɵɵelement(15, "mjo-price-source-badge", 12);
165
- i0.ɵɵconditionalCreate(16, MJOOrderLinesEditorComponent_For_2_Conditional_16_Template, 2, 1, "div", 13);
272
+ i0.ɵɵconditionalCreate(16, MJOOrderLinesEditorComponent_For_2_Conditional_16_Template, 2, 2, "button", 14);
166
273
  i0.ɵɵelementEnd();
167
- i0.ɵɵelementStart(17, "div", 14);
168
- i0.ɵɵtext(18);
169
- i0.ɵɵpipe(19, "mjoMoney");
274
+ i0.ɵɵconditionalCreate(17, MJOOrderLinesEditorComponent_For_2_Conditional_17_Template, 2, 0, "span", 15)(18, MJOOrderLinesEditorComponent_For_2_Conditional_18_Template, 1, 3, "mjo-price-source-badge", 16);
275
+ i0.ɵɵconditionalCreate(19, MJOOrderLinesEditorComponent_For_2_Conditional_19_Template, 2, 1, "div", 17);
170
276
  i0.ɵɵelementEnd();
171
- i0.ɵɵconditionalCreate(20, MJOOrderLinesEditorComponent_For_2_Conditional_20_Template, 2, 1, "button", 15);
277
+ i0.ɵɵelementStart(20, "div", 18);
278
+ i0.ɵɵtext(21);
279
+ i0.ɵɵpipe(22, "mjoMoney");
172
280
  i0.ɵɵelementEnd();
173
- i0.ɵɵelementStart(21, "div", 16);
174
- i0.ɵɵconditionalCreate(22, MJOOrderLinesEditorComponent_For_2_Conditional_22_Template, 3, 3);
281
+ i0.ɵɵconditionalCreate(23, MJOOrderLinesEditorComponent_For_2_Conditional_23_Template, 2, 1, "button", 19);
175
282
  i0.ɵɵelementEnd();
176
- i0.ɵɵconditionalCreate(23, MJOOrderLinesEditorComponent_For_2_Conditional_23_Template, 9, 12, "div", 17);
283
+ i0.ɵɵconditionalCreate(24, MJOOrderLinesEditorComponent_For_2_Conditional_24_Template, 18, 9, "div", 20);
284
+ i0.ɵɵelementStart(25, "div", 21);
285
+ i0.ɵɵconditionalCreate(26, MJOOrderLinesEditorComponent_For_2_Conditional_26_Template, 3, 3);
286
+ i0.ɵɵelementEnd();
287
+ i0.ɵɵconditionalCreate(27, MJOOrderLinesEditorComponent_For_2_Conditional_27_Template, 2, 1, "div", 22);
288
+ i0.ɵɵconditionalCreate(28, MJOOrderLinesEditorComponent_For_2_Conditional_28_Template, 9, 12, "div", 23);
177
289
  i0.ɵɵelementEnd();
178
290
  } if (rf & 2) {
179
291
  let tmp_10_0;
180
292
  let tmp_11_0;
181
293
  let tmp_12_0;
182
- let tmp_15_0;
183
- let tmp_16_0;
184
294
  let tmp_18_0;
185
295
  let tmp_19_0;
186
- let tmp_20_0;
187
296
  let tmp_22_0;
188
297
  let tmp_23_0;
298
+ let tmp_24_0;
189
299
  const line_r2 = ctx.$implicit;
190
300
  const ctx_r2 = i0.ɵɵnextContext();
191
301
  i0.ɵɵadvance(4);
@@ -198,110 +308,117 @@ function MJOOrderLinesEditorComponent_For_2_Template(rf, ctx) { if (rf & 1) {
198
308
  i0.ɵɵclassProp("is-locked", !ctx_r2.EditMode || ctx_r2.QuantityCappedToOne(line_r2));
199
309
  i0.ɵɵadvance();
200
310
  i0.ɵɵconditional(ctx_r2.EditMode && !ctx_r2.QuantityCappedToOne(line_r2) ? 9 : 10);
201
- i0.ɵɵadvance(4);
202
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 15, (tmp_15_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_15_0.UnitPrice));
311
+ i0.ɵɵadvance(5);
312
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(15, 16, ctx_r2.DisplayUnit(line_r2)));
203
313
  i0.ɵɵadvance(2);
204
- i0.ɵɵproperty("Source", ((tmp_16_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_16_0.PriceSource) ?? null)("Settled", !ctx_r2.Pricing.Loading)("Overridden", !!((tmp_18_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_18_0.WasStated));
314
+ i0.ɵɵconditional(ctx_r2.CanOverride ? 16 : -1);
205
315
  i0.ɵɵadvance();
206
- i0.ɵɵconditional((tmp_19_0 = (tmp_19_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_19_0.Error) ? 16 : -1, tmp_19_0);
316
+ i0.ɵɵconditional(ctx_r2.IsOverridden(line_r2) ? 17 : 18);
207
317
  i0.ɵɵadvance(2);
208
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(19, 17, (tmp_20_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_20_0.NetAmount));
318
+ i0.ɵɵconditional((tmp_18_0 = (tmp_18_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_18_0.Error) ? 19 : -1, tmp_18_0);
209
319
  i0.ɵɵadvance(2);
210
- i0.ɵɵconditional(ctx_r2.EditMode ? 20 : -1);
320
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(22, 18, (tmp_19_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_19_0.NetAmount));
211
321
  i0.ɵɵadvance(2);
212
- i0.ɵɵconditional((tmp_22_0 = ctx_r2.ProductFor(line_r2)) ? 22 : -1, tmp_22_0);
322
+ i0.ɵɵconditional(ctx_r2.EditMode ? 23 : -1);
213
323
  i0.ɵɵadvance();
214
- i0.ɵɵconditional((tmp_23_0 = ctx_r2.ExtensionFor(line_r2)) ? 23 : -1, tmp_23_0);
324
+ i0.ɵɵconditional(ctx_r2.IsOverrideEditorOpen(line_r2) ? 24 : -1);
325
+ i0.ɵɵadvance(2);
326
+ i0.ɵɵconditional((tmp_22_0 = ctx_r2.ProductFor(line_r2)) ? 26 : -1, tmp_22_0);
327
+ i0.ɵɵadvance();
328
+ i0.ɵɵconditional((tmp_23_0 = ctx_r2.OverrideReasonText(line_r2)) ? 27 : -1, tmp_23_0);
329
+ i0.ɵɵadvance();
330
+ i0.ɵɵconditional((tmp_24_0 = ctx_r2.ExtensionFor(line_r2)) ? 28 : -1, tmp_24_0);
215
331
  } }
216
332
  function MJOOrderLinesEditorComponent_ForEmpty_3_Template(rf, ctx) { if (rf & 1) {
217
- i0.ɵɵelementStart(0, "div", 2);
218
- i0.ɵɵelement(1, "i", 34);
219
- i0.ɵɵelementStart(2, "div", 35);
333
+ i0.ɵɵelementStart(0, "div", 3);
334
+ i0.ɵɵelement(1, "i", 54);
335
+ i0.ɵɵelementStart(2, "div", 55);
220
336
  i0.ɵɵtext(3, "Nothing on this order yet");
221
337
  i0.ɵɵelementEnd();
222
338
  i0.ɵɵelementStart(4, "div");
223
339
  i0.ɵɵtext(5, "Search the catalog to add the first line.");
224
340
  i0.ɵɵelementEnd()();
225
341
  } }
226
- function MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
227
- const _r9 = i0.ɵɵgetCurrentView();
228
- i0.ɵɵelementStart(0, "button", 42);
229
- i0.ɵɵlistener("mousedown", function MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_For_2_Template_button_mousedown_0_listener() { const product_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.AddProduct(product_r10)); });
230
- i0.ɵɵelementStart(1, "span", 43)(2, "span", 44);
342
+ function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
343
+ const _r13 = i0.ɵɵgetCurrentView();
344
+ i0.ɵɵelementStart(0, "button", 63);
345
+ i0.ɵɵlistener("mousedown", function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_For_2_Template_button_mousedown_0_listener() { const product_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.AddProduct(product_r14)); });
346
+ i0.ɵɵelementStart(1, "span", 64)(2, "span", 65);
231
347
  i0.ɵɵtext(3);
232
348
  i0.ɵɵelementEnd();
233
- i0.ɵɵelementStart(4, "span", 45);
349
+ i0.ɵɵelementStart(4, "span", 66);
234
350
  i0.ɵɵtext(5);
235
351
  i0.ɵɵelementEnd()();
236
- i0.ɵɵelementStart(6, "span", 46)(7, "span", 47);
352
+ i0.ɵɵelementStart(6, "span", 67)(7, "span", 68);
237
353
  i0.ɵɵtext(8);
238
354
  i0.ɵɵpipe(9, "mjoMoney");
239
355
  i0.ɵɵelementEnd();
240
- i0.ɵɵelementStart(10, "span", 45);
356
+ i0.ɵɵelementStart(10, "span", 66);
241
357
  i0.ɵɵtext(11);
242
358
  i0.ɵɵelementEnd()()();
243
359
  } if (rf & 2) {
244
- const product_r10 = ctx.$implicit;
245
- const ɵ$index_112_r11 = ctx.$index;
360
+ const product_r14 = ctx.$implicit;
361
+ const ɵ$index_165_r15 = ctx.$index;
246
362
  const ctx_r2 = i0.ɵɵnextContext(3);
247
- i0.ɵɵclassProp("is-cursor", ɵ$index_112_r11 === ctx_r2.PickerCursor);
248
- i0.ɵɵattribute("aria-selected", ɵ$index_112_r11 === ctx_r2.PickerCursor);
363
+ i0.ɵɵclassProp("is-cursor", ɵ$index_165_r15 === ctx_r2.PickerCursor);
364
+ i0.ɵɵattribute("aria-selected", ɵ$index_165_r15 === ctx_r2.PickerCursor);
249
365
  i0.ɵɵadvance(3);
250
- i0.ɵɵtextInterpolate(product_r10.Name);
366
+ i0.ɵɵtextInterpolate(product_r14.Name);
251
367
  i0.ɵɵadvance(2);
252
- i0.ɵɵtextInterpolate3("", product_r10.SKU, " \u00B7 ", product_r10.TypeName, " \u00B7 ", product_r10.CompanyName);
368
+ i0.ɵɵtextInterpolate3("", product_r14.SKU, " \u00B7 ", product_r14.TypeName, " \u00B7 ", product_r14.CompanyName);
253
369
  i0.ɵɵadvance(3);
254
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 9, product_r10.ListPrice));
370
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 9, product_r14.ListPrice));
255
371
  i0.ɵɵadvance(3);
256
- i0.ɵɵtextInterpolate(product_r10.Taxable ? "taxable" : "untaxable");
372
+ i0.ɵɵtextInterpolate(product_r14.Taxable ? "taxable" : "untaxable");
257
373
  } }
258
- function MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
374
+ function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
259
375
  i0.ɵɵtext(0);
260
376
  } if (rf & 2) {
261
377
  const ctx_r2 = i0.ɵɵnextContext(4);
262
378
  i0.ɵɵtextInterpolate1(" ", ctx_r2.CatalogError, " ");
263
379
  } }
264
- function MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
380
+ function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
265
381
  i0.ɵɵtext(0, " Loading catalog\u2026 ");
266
382
  } }
267
- function MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
383
+ function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
268
384
  i0.ɵɵtext(0, " No product matches that. ");
269
385
  } }
270
- function MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Template(rf, ctx) { if (rf & 1) {
271
- i0.ɵɵelementStart(0, "div", 41)(1, "span", 48);
272
- i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Conditional_2_Template, 1, 1)(3, MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Conditional_3_Template, 1, 0)(4, MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Conditional_4_Template, 1, 0);
386
+ function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Template(rf, ctx) { if (rf & 1) {
387
+ i0.ɵɵelementStart(0, "div", 62)(1, "span", 69);
388
+ i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_2_Template, 1, 1)(3, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_3_Template, 1, 0)(4, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_4_Template, 1, 0);
273
389
  i0.ɵɵelementEnd()();
274
390
  } if (rf & 2) {
275
391
  const ctx_r2 = i0.ɵɵnextContext(3);
276
392
  i0.ɵɵadvance(2);
277
393
  i0.ɵɵconditional(ctx_r2.CatalogError ? 2 : ctx_r2.Catalog.length === 0 ? 3 : 4);
278
394
  } }
279
- function MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_Template(rf, ctx) { if (rf & 1) {
280
- i0.ɵɵelementStart(0, "div", 39);
281
- i0.ɵɵrepeaterCreate(1, MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_For_2_Template, 12, 11, "button", 40, _forTrack0, false, MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_ForEmpty_3_Template, 5, 1, "div", 41);
395
+ function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
396
+ i0.ɵɵelementStart(0, "div", 60);
397
+ i0.ɵɵrepeaterCreate(1, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_For_2_Template, 12, 11, "button", 61, _forTrack0, false, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Template, 5, 1, "div", 62);
282
398
  i0.ɵɵelementEnd();
283
399
  } if (rf & 2) {
284
400
  const ctx_r2 = i0.ɵɵnextContext(2);
401
+ i0.ɵɵclassProp("is-up", ctx_r2.PickerOpensUp);
285
402
  i0.ɵɵadvance();
286
403
  i0.ɵɵrepeater(ctx_r2.PickerResults);
287
404
  } }
288
405
  function MJOOrderLinesEditorComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
289
- const _r8 = i0.ɵɵgetCurrentView();
290
- i0.ɵɵelementStart(0, "div", 3)(1, "div", 36);
291
- i0.ɵɵelement(2, "i", 37);
292
- i0.ɵɵelementStart(3, "input", 38);
293
- i0.ɵɵtwoWayListener("ngModelChange", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.ProductQuery, $event) || (ctx_r2.ProductQuery = $event); return i0.ɵɵresetView($event); });
294
- i0.ɵɵlistener("focus", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_focus_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenPicker()); })("blur", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_blur_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ClosePickerSoon()); })("keydown", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_keydown_3_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnPickerKey($event)); });
406
+ const _r12 = i0.ɵɵgetCurrentView();
407
+ i0.ɵɵelementStart(0, "div", 4, 0)(2, "div", 56);
408
+ i0.ɵɵelement(3, "i", 57);
409
+ i0.ɵɵelementStart(4, "input", 58);
410
+ i0.ɵɵtwoWayListener("ngModelChange", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.ProductQuery, $event) || (ctx_r2.ProductQuery = $event); return i0.ɵɵresetView($event); });
411
+ i0.ɵɵlistener("ngModelChange", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_ngModelChange_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnProductQueryChange()); })("focus", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_focus_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenPicker()); })("blur", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_blur_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ClosePickerSoon()); })("keydown", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_keydown_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnPickerKey($event)); });
295
412
  i0.ɵɵelementEnd()();
296
- i0.ɵɵconditionalCreate(4, MJOOrderLinesEditorComponent_Conditional_4_Conditional_4_Template, 4, 1, "div", 39);
413
+ i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_Template, 4, 3, "div", 59);
297
414
  i0.ɵɵelementEnd();
298
415
  } if (rf & 2) {
299
416
  const ctx_r2 = i0.ɵɵnextContext();
300
- i0.ɵɵadvance(3);
417
+ i0.ɵɵadvance(4);
301
418
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ProductQuery);
302
419
  i0.ɵɵattribute("aria-expanded", ctx_r2.PickerOpen);
303
420
  i0.ɵɵadvance();
304
- i0.ɵɵconditional(ctx_r2.PickerOpen ? 4 : -1);
421
+ i0.ɵɵconditional(ctx_r2.PickerOpen ? 5 : -1);
305
422
  } }
306
423
  /**
307
424
  * Inline catalog picker + line cards for an order header.
@@ -335,7 +452,16 @@ export class MJOOrderLinesEditorComponent {
335
452
  ProductQuery = '';
336
453
  PickerCursor = 0;
337
454
  PickerOpen = false;
455
+ /** True when the catalog list would overflow the viewport below the search box. */
456
+ PickerOpensUp = false;
338
457
  CatalogError = null;
458
+ pickerHost;
459
+ /** 'none' hides the picker; 'list' is named prices only; 'any' also types an amount. */
460
+ OverrideKind = 'none';
461
+ applicableByLine = new Map();
462
+ overrideEditorLineIds = new Set();
463
+ customAmountLineIds = new Set();
464
+ defaultUnitByLine = new Map();
339
465
  get Lines() {
340
466
  return [...(this._order?.Lines.Items ?? [])];
341
467
  }
@@ -347,10 +473,16 @@ export class MJOOrderLinesEditorComponent {
347
473
  OpenPicker() {
348
474
  this.PickerOpen = true;
349
475
  this.PickerCursor = 0;
476
+ this.updatePickerFlip();
477
+ }
478
+ OnProductQueryChange() {
479
+ if (this.PickerOpen)
480
+ this.updatePickerFlip();
350
481
  }
351
482
  ClosePickerSoon() {
352
483
  setTimeout(() => {
353
484
  this.PickerOpen = false;
485
+ this.PickerOpensUp = false;
354
486
  this.cdr.detectChanges();
355
487
  }, 140);
356
488
  }
@@ -391,12 +523,14 @@ export class MJOOrderLinesEditorComponent {
391
523
  this.PickerCursor = 0;
392
524
  this.PickerOpen = false;
393
525
  this.schedulePricing();
526
+ void this.refreshAllApplicable();
394
527
  this.cdr.detectChanges();
395
528
  }
396
529
  Bump(line, delta) {
397
530
  if (!this.EditMode)
398
531
  return;
399
532
  line.Quantity = this.clampQuantity(line, Number(line.Quantity ?? 0) + delta);
533
+ void this.refreshApplicable(line);
400
534
  this.schedulePricing();
401
535
  }
402
536
  SetQuantity(line, event) {
@@ -406,6 +540,7 @@ export class MJOOrderLinesEditorComponent {
406
540
  if (!(target instanceof HTMLInputElement))
407
541
  return;
408
542
  line.Quantity = this.clampQuantity(line, Number.parseFloat(target.value));
543
+ void this.refreshApplicable(line);
409
544
  this.schedulePricing();
410
545
  }
411
546
  QuantityAtMax(line) {
@@ -419,15 +554,163 @@ export class MJOOrderLinesEditorComponent {
419
554
  if (!this.EditMode)
420
555
  return;
421
556
  this.expandedLineIds.delete(line.ID);
557
+ this.overrideEditorLineIds.delete(line.ID);
558
+ this.customAmountLineIds.delete(line.ID);
422
559
  this._order?.Lines.Remove(line);
423
560
  this.schedulePricing();
424
561
  }
425
562
  ProductFor(line) {
426
563
  return this.Catalog.find((p) => UUIDsEqual(p.ID, line.ProductID));
427
564
  }
565
+ /** True when the line books to a different company than the order's selling company. */
566
+ ShowsForeignRevenue(line) {
567
+ const product = this.ProductFor(line);
568
+ if (!product?.CompanyName)
569
+ return false;
570
+ const sellingID = this._order?.CompanyID;
571
+ if (product.CompanyID && sellingID)
572
+ return !UUIDsEqual(product.CompanyID, sellingID);
573
+ const sellingName = this._order?.Company;
574
+ if (!sellingName)
575
+ return true;
576
+ return product.CompanyName.trim().toLowerCase() !== String(sellingName).trim().toLowerCase();
577
+ }
428
578
  PricedLine(line) {
429
579
  return this.Pricing.Result?.Lines.find((priced) => UUIDsEqual(priced.ClientKey, line.ID));
430
580
  }
581
+ get CanOverride() {
582
+ return this.EditMode && this.OverrideKind !== 'none';
583
+ }
584
+ ApplicableFor(line) {
585
+ return this.applicableByLine.get(line.ID) ?? [];
586
+ }
587
+ SelectedPriceID(line) {
588
+ if (this.customAmountLineIds.has(line.ID))
589
+ return '__custom__';
590
+ if (!this.IsOverridden(line))
591
+ return '';
592
+ if (line.ProductPriceID)
593
+ return String(line.ProductPriceID);
594
+ return this.OverrideKind === 'any' ? '__custom__' : '';
595
+ }
596
+ DisplayUnit(line) {
597
+ if (this.IsOverridden(line))
598
+ return Number(line.UnitPrice ?? 0);
599
+ return this.PricedLine(line)?.UnitPrice ?? null;
600
+ }
601
+ DefaultLabel(line) {
602
+ const unit = this.DefaultUnit(line);
603
+ return unit == null ? 'Default price' : `Default · ${unit.toFixed(2)}`;
604
+ }
605
+ ShowCustomAmount(line) {
606
+ return this.OverrideKind === 'any' && this.SelectedPriceID(line) === '__custom__';
607
+ }
608
+ CanExplainOverride(line) {
609
+ const picked = this.SelectedPriceID(line);
610
+ if (picked && picked !== '__custom__')
611
+ return true;
612
+ if (picked === '__custom__') {
613
+ const typed = this.DisplayUnit(line);
614
+ const def = this.DefaultUnit(line);
615
+ if (typed == null || def == null)
616
+ return typed != null;
617
+ return !moneyEqual(typed, def);
618
+ }
619
+ return false;
620
+ }
621
+ DefaultUnit(line) {
622
+ if (this.defaultUnitByLine.has(line.ID))
623
+ return this.defaultUnitByLine.get(line.ID) ?? null;
624
+ return this.IsOverridden(line) ? null : (this.PricedLine(line)?.UnitPrice ?? null);
625
+ }
626
+ PickNamedPrice(line, event) {
627
+ if (!this.CanOverride)
628
+ return;
629
+ const target = event.target;
630
+ if (!(target instanceof HTMLSelectElement))
631
+ return;
632
+ const id = target.value;
633
+ if (!id) {
634
+ this.ResetOverride(line);
635
+ return;
636
+ }
637
+ if (id === '__custom__') {
638
+ this.customAmountLineIds.add(line.ID);
639
+ this.stamp(line, 'ProductPriceID', null);
640
+ this.markOverridden(line);
641
+ this.cdr.detectChanges();
642
+ return;
643
+ }
644
+ this.customAmountLineIds.delete(line.ID);
645
+ const hit = this.ApplicableFor(line).find((p) => UUIDsEqual(p.ID, id));
646
+ if (!hit)
647
+ return;
648
+ this.stamp(line, 'ProductPriceID', hit.ID);
649
+ this.stamp(line, 'UnitPrice', hit.UnitPrice);
650
+ this.markOverridden(line);
651
+ this.schedulePricing();
652
+ this.cdr.detectChanges();
653
+ }
654
+ TypeAmount(line, event) {
655
+ if (!this.CanOverride || this.OverrideKind !== 'any')
656
+ return;
657
+ const target = event.target;
658
+ if (!(target instanceof HTMLInputElement))
659
+ return;
660
+ const amount = Number.parseFloat(target.value);
661
+ if (!Number.isFinite(amount) || amount < 0)
662
+ return;
663
+ this.customAmountLineIds.add(line.ID);
664
+ this.stamp(line, 'ProductPriceID', null);
665
+ this.stamp(line, 'UnitPrice', amount);
666
+ this.markOverridden(line);
667
+ this.schedulePricing();
668
+ }
669
+ IsOverrideEditorOpen(line) {
670
+ return this.overrideEditorLineIds.has(line.ID);
671
+ }
672
+ ToggleOverrideEditor(line) {
673
+ if (!this.CanOverride)
674
+ return;
675
+ if (this.overrideEditorLineIds.has(line.ID)) {
676
+ this.overrideEditorLineIds.delete(line.ID);
677
+ return;
678
+ }
679
+ this.overrideEditorLineIds.add(line.ID);
680
+ if (this.OverrideKind === 'any' && this.IsOverridden(line) && !line.ProductPriceID) {
681
+ this.customAmountLineIds.add(line.ID);
682
+ }
683
+ void this.refreshApplicable(line);
684
+ }
685
+ DoneOverrideEditor(line) {
686
+ this.overrideEditorLineIds.delete(line.ID);
687
+ }
688
+ ResetOverride(line) {
689
+ this.clearOverride(line);
690
+ this.customAmountLineIds.delete(line.ID);
691
+ this.overrideEditorLineIds.delete(line.ID);
692
+ this.schedulePricing();
693
+ }
694
+ IsOverridden(line) {
695
+ const flag = line.GetFieldByName('PriceOverridden');
696
+ if (flag && (flag.Value === true || flag.Value === 1 || flag.Value === '1'))
697
+ return true;
698
+ return anyFieldIsDirty(line, ['UnitPrice', 'ProductPriceID']);
699
+ }
700
+ OverrideReasonText(line) {
701
+ const field = line.GetFieldByName('PriceOverrideReason');
702
+ return field?.Value == null ? '' : String(field.Value);
703
+ }
704
+ SetOverrideReason(line, event) {
705
+ if (!this.CanExplainOverride(line))
706
+ return;
707
+ const target = event.target;
708
+ if (!(target instanceof HTMLTextAreaElement))
709
+ return;
710
+ const reason = target.value.trim();
711
+ this.stamp(line, 'PriceOverridden', true);
712
+ this.stamp(line, 'PriceOverrideReason', reason === '' ? null : reason);
713
+ }
431
714
  OpenProduct(line, event) {
432
715
  event.preventDefault();
433
716
  event.stopPropagation();
@@ -497,12 +780,19 @@ export class MJOOrderLinesEditorComponent {
497
780
  await this._order.Lines.Load();
498
781
  }
499
782
  await this.hydrateExtensions();
783
+ await this.resolveOverrideKind();
500
784
  this.schedulePricing();
785
+ void this.refreshAllApplicable();
501
786
  this.cdr.detectChanges();
502
787
  }
503
788
  unbindOrder() {
504
789
  this.expandedLineIds.clear();
505
790
  this.hydratingLineIds.clear();
791
+ this.applicableByLine.clear();
792
+ this.overrideEditorLineIds.clear();
793
+ this.customAmountLineIds.clear();
794
+ this.defaultUnitByLine.clear();
795
+ this.OverrideKind = 'none';
506
796
  }
507
797
  async addPlainLine(product) {
508
798
  if (!this._order)
@@ -571,20 +861,141 @@ export class MJOOrderLinesEditorComponent {
571
861
  this.CatalogError = error instanceof Error ? error.message : String(error);
572
862
  }
573
863
  }
864
+ updatePickerFlip() {
865
+ // Measure after the list is in the DOM so max-height (240px) is the right budget.
866
+ requestAnimationFrame(() => {
867
+ const host = this.pickerHost?.nativeElement;
868
+ if (!host || !this.PickerOpen) {
869
+ this.PickerOpensUp = false;
870
+ return;
871
+ }
872
+ const rect = host.getBoundingClientRect();
873
+ const spaceBelow = window.innerHeight - rect.bottom;
874
+ const spaceAbove = rect.top;
875
+ const listHeight = 240;
876
+ this.PickerOpensUp = spaceBelow < listHeight && spaceAbove > spaceBelow;
877
+ this.cdr.detectChanges();
878
+ });
879
+ }
574
880
  schedulePricing() {
575
881
  if (!this._order)
576
882
  return;
577
883
  this.pricing.SchedulePricing(this._order, (state) => {
578
884
  this.Pricing = state;
579
885
  this.PricingChanged.emit(state);
886
+ for (const line of this.Lines) {
887
+ if (!this.IsOverridden(line)) {
888
+ this.defaultUnitByLine.set(line.ID, this.PricedLine(line)?.UnitPrice ?? null);
889
+ }
890
+ }
580
891
  this.cdr.detectChanges();
581
892
  });
582
893
  }
894
+ stamp(line, fieldName, value) {
895
+ const field = line.GetFieldByName(fieldName);
896
+ if (!field)
897
+ return;
898
+ const baseline = field.OldValue;
899
+ field.Value = value;
900
+ if (!field.Dirty)
901
+ field.RestoreOldValue(baseline);
902
+ }
903
+ clearOverride(line) {
904
+ const unit = line.GetFieldByName('UnitPrice');
905
+ const named = line.GetFieldByName('ProductPriceID');
906
+ if (unit)
907
+ unit.Value = unit.OldValue;
908
+ if (named)
909
+ named.Value = named.OldValue;
910
+ this.stamp(line, 'PriceOverridden', false);
911
+ this.stamp(line, 'PriceOverrideReason', null);
912
+ }
913
+ markOverridden(line) {
914
+ this.stamp(line, 'PriceOverridden', true);
915
+ }
916
+ async resolveOverrideKind() {
917
+ const user = this.metadata.CurrentUser;
918
+ this.OverrideKind = userPriceOverrideKind(user, this.metadata);
919
+ if (this.OverrideKind !== 'none')
920
+ return;
921
+ if (!priceOverrideCatalogInstalled(this.metadata))
922
+ return;
923
+ this.OverrideKind = await this.overrideKindFromLiveRoles(user);
924
+ }
925
+ async overrideKindFromLiveRoles(user) {
926
+ const roleIDs = (user?.UserRoles ?? []).map((r) => r.RoleID).filter(Boolean);
927
+ if (!roleIDs.length)
928
+ return 'none';
929
+ const quoted = roleIDs.map((id) => `'${String(id).replace(/'/g, "''")}'`).join(',');
930
+ const rv = new RunView();
931
+ const res = await rv.RunView({
932
+ EntityName: 'MJ: Authorization Roles',
933
+ ExtraFilter: `RoleID IN (${quoted}) AND Type LIKE 'Allow%' AND Authorization LIKE 'MJ.BizApps.Orders.Price.Override%'`,
934
+ ResultType: 'simple',
935
+ });
936
+ const names = (res.Success ? res.Results : [])
937
+ .map((row) => String(row.Authorization ?? ''))
938
+ .filter(Boolean);
939
+ if (names.some((n) => n === 'MJ.BizApps.Orders.Price.OverrideAny' || n === 'MJ.BizApps.Orders.Price.Override')) {
940
+ return 'any';
941
+ }
942
+ if (names.includes('MJ.BizApps.Orders.Price.OverrideList'))
943
+ return 'list';
944
+ return 'none';
945
+ }
946
+ async refreshAllApplicable() {
947
+ if (!this.CanOverride)
948
+ return;
949
+ await Promise.all(this.Lines.map((line) => this.refreshApplicable(line)));
950
+ this.cdr.detectChanges();
951
+ }
952
+ async refreshApplicable(line) {
953
+ if (!this.CanOverride || !this._order || !line.ProductID)
954
+ return;
955
+ const user = this.metadata.CurrentUser;
956
+ if (!user)
957
+ return;
958
+ try {
959
+ await LoadOrdersEngine(this.metadata, user);
960
+ const product = OrdersEngine.Instance.ProductByID(line.ProductID);
961
+ const companyID = product?.CompanyID ?? this._order.CompanyID;
962
+ if (!companyID)
963
+ return;
964
+ const ctx = {
965
+ ProductID: line.ProductID,
966
+ ProductCategoryID: product?.ProductCategoryID ?? null,
967
+ CompanyID: companyID,
968
+ Quantity: Number(line.Quantity ?? 0),
969
+ AsOf: this._order.OrderDate ? new Date(this._order.OrderDate) : new Date(),
970
+ OrganizationID: this._order.BillToOrganizationID ?? null,
971
+ PersonID: this._order.BillToPersonID ?? null,
972
+ ApplicabilityContext: await loadApplicabilityContext({
973
+ OrderHeaderID: this._order.ID ?? null,
974
+ ProductID: line.ProductID,
975
+ BillToPersonID: this._order.BillToPersonID ?? null,
976
+ BillToOrganizationID: this._order.BillToOrganizationID ?? null,
977
+ ShipToPersonID: this._order.ShipToPersonID ?? null,
978
+ ShipToOrganizationID: this._order.ShipToOrganizationID ?? null,
979
+ BillToAddressID: this._order.BillToAddressID ?? null,
980
+ ShipToAddressID: this._order.ShipToAddressID ?? null,
981
+ }, this.metadata, user),
982
+ };
983
+ this.applicableByLine.set(line.ID, await ListApplicablePrices(ctx, this.metadata, user));
984
+ }
985
+ catch {
986
+ this.applicableByLine.set(line.ID, []);
987
+ }
988
+ }
583
989
  static ɵfac = function MJOOrderLinesEditorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MJOOrderLinesEditorComponent)(); };
584
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJOOrderLinesEditorComponent, selectors: [["mjo-order-lines-editor"]], inputs: { Provider: "Provider", EditMode: "EditMode", Order: "Order" }, outputs: { PricingChanged: "PricingChanged", Navigate: "Navigate" }, decls: 5, vars: 2, consts: [[1, "mjo-ol"], [1, "mjo-ol-card"], [1, "mjo-ol-empty"], [1, "mj-typeahead", "mjo-ol-picker"], [1, "mjo-ol-card__top"], [1, "mjo-ol-card__id"], ["type", "button", 1, "mjo-ol-card__name", 3, "click"], [1, "mjo-ol-card__meta"], [1, "mjo-ol-qty"], [1, "mjo-ol-qty__value"], [1, "mjo-ol-card__price"], [1, "mjo-ol-card__amt"], [3, "Source", "Settled", "Overridden"], [1, "mjo-ol-card__err"], [1, "mjo-ol-card__tot"], ["type", "button", 1, "mjo-ol-iconbtn"], [1, "mjo-ol-card__conseq"], [1, "mjo-ol-ext", 3, "is-open"], ["type", "button", "aria-label", "Decrease quantity", 3, "click"], ["aria-label", "Quantity", 3, "change", "value"], ["type", "button", "aria-label", "Increase quantity", 3, "click", "disabled"], ["type", "button", 1, "mjo-ol-iconbtn", 3, "click"], ["aria-hidden", "true", 1, "fa-regular", "fa-trash-can"], ["Kind", "fulfillment"], ["Kind", "untaxable"], ["Kind", "company"], [1, "mjo-ol-ext"], ["type", "button", 1, "mjo-ol-ext__toggle", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-right", "mjo-ol-ext__chev"], [1, "mjo-ol-ext__label"], [1, "mjo-ol-ext__hint"], [1, "mjo-ol-ext__body", 3, "id"], [1, "mjo-ol-ext__clip"], [3, "FormCreated", "Navigate", "Record", "EditMode", "Config"], ["aria-hidden", "true", 1, "fa-solid", "fa-cart-plus"], [1, "mjo-ol-empty__title"], [1, "mjo-search"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["placeholder", "Add product \u2014 type a name or SKU\u2026", "autocomplete", "off", "role", "combobox", "aria-label", "Add a product", 3, "ngModelChange", "focus", "blur", "keydown", "ngModel"], ["role", "listbox", 1, "mj-typeahead-list", "is-open"], ["type", "button", "role", "option", 1, "mj-typeahead-item", "mjo-ol-pick", 3, "is-cursor"], [1, "mj-typeahead-item"], ["type", "button", "role", "option", 1, "mj-typeahead-item", "mjo-ol-pick", 3, "mousedown"], [1, "mjo-ol-pick__body"], [1, "name"], [1, "sub"], [1, "end"], [1, "mjo-ol-pick__price"], [1, "muted", "small"]], template: function MJOOrderLinesEditorComponent_Template(rf, ctx) { if (rf & 1) {
585
- i0.ɵɵelementStart(0, "div", 0);
586
- i0.ɵɵrepeaterCreate(1, MJOOrderLinesEditorComponent_For_2_Template, 24, 19, "div", 1, _forTrack0, false, MJOOrderLinesEditorComponent_ForEmpty_3_Template, 6, 0, "div", 2);
587
- i0.ɵɵconditionalCreate(4, MJOOrderLinesEditorComponent_Conditional_4_Template, 5, 3, "div", 3);
990
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJOOrderLinesEditorComponent, selectors: [["mjo-order-lines-editor"]], viewQuery: function MJOOrderLinesEditorComponent_Query(rf, ctx) { if (rf & 1) {
991
+ i0.ɵɵviewQuery(_c0, 5);
992
+ } if (rf & 2) {
993
+ let _t;
994
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pickerHost = _t.first);
995
+ } }, inputs: { Provider: "Provider", EditMode: "EditMode", Order: "Order" }, outputs: { PricingChanged: "PricingChanged", Navigate: "Navigate" }, decls: 5, vars: 2, consts: [["pickerHost", ""], [1, "mjo-ol"], [1, "mjo-ol-card"], [1, "mjo-ol-empty"], [1, "mj-typeahead", "mjo-ol-picker"], [1, "mjo-ol-card__top"], [1, "mjo-ol-card__id"], ["type", "button", 1, "mjo-ol-card__name", 3, "click"], [1, "mjo-ol-card__meta"], [1, "mjo-ol-qty"], [1, "mjo-ol-qty__value"], [1, "mjo-ol-card__price"], [1, "mjo-ol-card__price-row"], [1, "mjo-ol-card__amt"], ["type", "button", 1, "mjo-ol-iconbtn", "mjo-ol-price__pencil"], [1, "mjo-ol-overpill"], [3, "Source", "Settled", "Overridden"], [1, "mjo-ol-card__err"], [1, "mjo-ol-card__tot"], ["type", "button", 1, "mjo-ol-iconbtn"], ["role", "region", 1, "mjo-ol-override"], [1, "mjo-ol-card__conseq"], [1, "mjo-ol-card__why"], [1, "mjo-ol-ext", 3, "is-open"], ["type", "button", "aria-label", "Decrease quantity", 3, "click"], ["aria-label", "Quantity", 3, "change", "value"], ["type", "button", "aria-label", "Increase quantity", 3, "click", "disabled"], ["type", "button", 1, "mjo-ol-iconbtn", "mjo-ol-price__pencil", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-pencil"], ["type", "button", 1, "mjo-ol-iconbtn", 3, "click"], ["aria-hidden", "true", 1, "fa-regular", "fa-trash-can"], [1, "mjo-ol-override__row"], ["aria-label", "Named price", 1, "mjo-ol-price__pick", 3, "change", "value"], ["value", ""], ["value", "__custom__"], [3, "value"], ["type", "number", "step", "0.01", "min", "0", "aria-label", "Custom unit price", 1, "mjo-ol-price__amt", 3, "value"], [1, "mjo-ol-override__reason"], ["rows", "2", "placeholder", "Optional \u2014 why this price differs from the default", 3, "input", "disabled", "value"], [1, "mjo-ol-override__actions"], ["type", "button", 1, "mjo-ol-override__done", 3, "click"], ["type", "button", 1, "mjo-ol-override__reset", 3, "click"], ["type", "number", "step", "0.01", "min", "0", "aria-label", "Custom unit price", 1, "mjo-ol-price__amt", 3, "change", "value"], ["Kind", "fulfillment"], ["Kind", "untaxable"], ["Kind", "company"], [1, "mjo-ol-ext"], ["type", "button", 1, "mjo-ol-ext__toggle", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-right", "mjo-ol-ext__chev"], [1, "mjo-ol-ext__label"], [1, "mjo-ol-ext__hint"], [1, "mjo-ol-ext__body", 3, "id"], [1, "mjo-ol-ext__clip"], [3, "FormCreated", "Navigate", "Record", "EditMode", "Config"], ["aria-hidden", "true", 1, "fa-solid", "fa-cart-plus"], [1, "mjo-ol-empty__title"], [1, "mjo-search"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["placeholder", "Add product \u2014 type a name or SKU\u2026", "autocomplete", "off", "role", "combobox", "aria-label", "Add a product", 3, "ngModelChange", "focus", "blur", "keydown", "ngModel"], ["role", "listbox", 1, "mj-typeahead-list", "is-open", 3, "is-up"], ["role", "listbox", 1, "mj-typeahead-list", "is-open"], ["type", "button", "role", "option", 1, "mj-typeahead-item", "mjo-ol-pick", 3, "is-cursor"], [1, "mj-typeahead-item"], ["type", "button", "role", "option", 1, "mj-typeahead-item", "mjo-ol-pick", 3, "mousedown"], [1, "mjo-ol-pick__body"], [1, "name"], [1, "sub"], [1, "end"], [1, "mjo-ol-pick__price"], [1, "muted", "small"]], template: function MJOOrderLinesEditorComponent_Template(rf, ctx) { if (rf & 1) {
996
+ i0.ɵɵelementStart(0, "div", 1);
997
+ i0.ɵɵrepeaterCreate(1, MJOOrderLinesEditorComponent_For_2_Template, 29, 20, "div", 2, _forTrack0, false, MJOOrderLinesEditorComponent_ForEmpty_3_Template, 6, 0, "div", 3);
998
+ i0.ɵɵconditionalCreate(4, MJOOrderLinesEditorComponent_Conditional_4_Template, 6, 3, "div", 4);
588
999
  i0.ɵɵelementEnd();
589
1000
  } if (rf & 2) {
590
1001
  i0.ɵɵadvance();
@@ -592,9 +1003,9 @@ export class MJOOrderLinesEditorComponent {
592
1003
  i0.ɵɵadvance(3);
593
1004
  i0.ɵɵconditional(ctx.EditMode ? 4 : -1);
594
1005
  } }, dependencies: [CommonModule,
595
- FormsModule, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, BaseFormsModule, i2.MjEntityFormHostComponent, MJOConsequenceChipComponent,
1006
+ FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, BaseFormsModule, i2.MjEntityFormHostComponent, MJOConsequenceChipComponent,
596
1007
  MJOPriceSourceBadgeComponent,
597
- MJOMoneyPipe], styles: ["[_nghost-%COMP%] { display: block; }\n\n.mjo-ol[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%]:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name[_ngcontent-%COMP%] {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value[_ngcontent-%COMP%] {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price[_ngcontent-%COMP%] {\n flex: none;\n width: 118px;\n text-align: right;\n}\n\n.mjo-ol-card__amt[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-card__err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot[_ngcontent-%COMP%] {\n flex: none;\n width: 104px;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%] {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%]:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list[_ngcontent-%COMP%] {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open[_ngcontent-%COMP%] { display: block; }\n\n.mj-typeahead-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item[_ngcontent-%COMP%]:last-child { border-bottom: 0; }\n\n.mj-typeahead-item[_ngcontent-%COMP%]:hover, \n.mj-typeahead-item.is-cursor[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%] { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick[_ngcontent-%COMP%] .end[_ngcontent-%COMP%] {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev[_ngcontent-%COMP%] {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__chev[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body[_ngcontent-%COMP%] {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__body[_ngcontent-%COMP%] {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip[_ngcontent-%COMP%] {\n overflow: hidden;\n min-height: 0;\n}\n\n\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-toolbar, \n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-body, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-field:last-child, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top[_ngcontent-%COMP%] { flex-wrap: wrap; }\n .mjo-ol-card__price[_ngcontent-%COMP%], .mjo-ol-card__tot[_ngcontent-%COMP%] { width: auto; }\n}"] });
1008
+ MJOMoneyPipe], styles: ["[_nghost-%COMP%] { display: block; }\n\n.mjo-ol[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%]:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name[_ngcontent-%COMP%] {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value[_ngcontent-%COMP%] {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price[_ngcontent-%COMP%] {\n flex: none;\n min-width: 108px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.mjo-ol-card__price-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 2px;\n height: 28px;\n}\n\n.mjo-ol-price__pencil[_ngcontent-%COMP%] {\n flex: none;\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-price__pencil[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-link);\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-price__pick[_ngcontent-%COMP%], \n.mjo-ol-price__amt[_ngcontent-%COMP%], \n.mjo-ol-override__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-price__pick[_ngcontent-%COMP%] {\n height: 28px;\n padding: 0 6px;\n text-align: left;\n flex: 1 1 180px;\n max-width: 240px;\n width: auto;\n}\n\n.mjo-ol-price__amt[_ngcontent-%COMP%] {\n height: 28px;\n padding: 0 8px;\n text-align: right;\n font-weight: var(--mj-font-semibold);\n width: 108px;\n flex: none;\n}\n\n.mjo-ol-override[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n padding: var(--mj-space-2);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-override__reason[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.mjo-ol-override__reason.is-off[_ngcontent-%COMP%] {\n opacity: 0.55;\n}\n\n.mjo-ol-override__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:disabled {\n cursor: not-allowed;\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\n text-align: left;\n font-variant-numeric: normal;\n}\n\n.mjo-ol-override__actions[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n justify-content: flex-end;\n}\n\n.mjo-ol-override__done[_ngcontent-%COMP%], \n.mjo-ol-override__reset[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n cursor: pointer;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-override__done[_ngcontent-%COMP%] {\n color: var(--mj-text-link);\n}\n\n.mjo-ol-override__reset[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-override__done[_ngcontent-%COMP%]:hover, \n.mjo-ol-override__reset[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-card__amt[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-overpill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-top: 4px;\n padding: 1px 8px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--mj-status-warning-text);\n background: color-mix(in srgb, var(--mj-status-warning-text) 16%, transparent);\n}\n\n.mjo-ol-card__err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot[_ngcontent-%COMP%] {\n flex: none;\n min-width: 104px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-card__why[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n line-height: 1.35;\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%] {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%]:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list[_ngcontent-%COMP%] {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open[_ngcontent-%COMP%] { display: block; }\n\n.mj-typeahead-list.is-up[_ngcontent-%COMP%] {\n top: auto;\n bottom: calc(100% + 4px);\n}\n\n.mj-typeahead-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item[_ngcontent-%COMP%]:last-child { border-bottom: 0; }\n\n.mj-typeahead-item[_ngcontent-%COMP%]:hover, \n.mj-typeahead-item.is-cursor[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%] { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick[_ngcontent-%COMP%] .end[_ngcontent-%COMP%] {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev[_ngcontent-%COMP%] {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__chev[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body[_ngcontent-%COMP%] {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__body[_ngcontent-%COMP%] {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip[_ngcontent-%COMP%] {\n overflow: hidden;\n min-height: 0;\n}\n\n\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-toolbar, \n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-body, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-field:last-child, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top[_ngcontent-%COMP%] { flex-wrap: wrap; }\n .mjo-ol-card__price[_ngcontent-%COMP%], .mjo-ol-card__tot[_ngcontent-%COMP%] { width: auto; }\n}"] });
598
1009
  }
599
1010
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJOOrderLinesEditorComponent, [{
600
1011
  type: Component,
@@ -605,7 +1016,7 @@ export class MJOOrderLinesEditorComponent {
605
1016
  MJOConsequenceChipComponent,
606
1017
  MJOPriceSourceBadgeComponent,
607
1018
  MJOMoneyPipe,
608
- ], template: "<div class=\"mjo-ol\">\n @for (line of Lines; track line.ID) {\n <div class=\"mjo-ol-card\">\n <div class=\"mjo-ol-card__top\">\n <div class=\"mjo-ol-card__id\">\n <button type=\"button\" class=\"mjo-ol-card__name\" (click)=\"OpenProduct(line, $event)\">\n {{ ProductFor(line)?.Name ?? 'Product' }}\n </button>\n <div class=\"mjo-ol-card__meta\">\n {{ ProductFor(line)?.SKU }}\n @if (ProductFor(line)?.TypeName) {\n \u00B7 {{ ProductFor(line)?.TypeName }}\n }\n </div>\n </div>\n\n <div class=\"mjo-ol-qty\" [class.is-locked]=\"!EditMode || QuantityCappedToOne(line)\">\n @if (EditMode && !QuantityCappedToOne(line)) {\n <button type=\"button\" (click)=\"Bump(line, -1)\" aria-label=\"Decrease quantity\">\u2212</button>\n <input\n [value]=\"line.Quantity\"\n (change)=\"SetQuantity(line, $event)\"\n aria-label=\"Quantity\">\n <button type=\"button\" (click)=\"Bump(line, 1)\" [disabled]=\"QuantityAtMax(line)\" aria-label=\"Increase quantity\">+</button>\n } @else {\n <span class=\"mjo-ol-qty__value\">{{ line.Quantity }}</span>\n }\n </div>\n\n <div class=\"mjo-ol-card__price\">\n <div class=\"mjo-ol-card__amt\">{{ PricedLine(line)?.UnitPrice | mjoMoney }}</div>\n <mjo-price-source-badge\n [Source]=\"PricedLine(line)?.PriceSource ?? null\"\n [Settled]=\"!Pricing.Loading\"\n [Overridden]=\"!!PricedLine(line)?.WasStated\" />\n @if (PricedLine(line)?.Error; as why) {\n <div class=\"mjo-ol-card__err\">{{ why }}</div>\n }\n </div>\n\n <div class=\"mjo-ol-card__tot\">{{ PricedLine(line)?.NetAmount | mjoMoney }}</div>\n\n @if (EditMode) {\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn\"\n (click)=\"Remove(line)\"\n [attr.aria-label]=\"'Remove ' + (ProductFor(line)?.Name ?? 'line')\">\n <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <div class=\"mjo-ol-card__conseq\">\n @if (ProductFor(line); as product) {\n @if (product.TypeName === 'Goods') {\n <mjo-consequence-chip Kind=\"fulfillment\">Ships \u2014 holds the order at Posted</mjo-consequence-chip>\n }\n @if (!product.Taxable) {\n <mjo-consequence-chip Kind=\"untaxable\">Untaxable</mjo-consequence-chip>\n }\n @if (product.CompanyName) {\n <mjo-consequence-chip Kind=\"company\">Revenue to {{ product.CompanyName }}</mjo-consequence-chip>\n }\n }\n </div>\n\n @if (ExtensionFor(line); as ext) {\n <div class=\"mjo-ol-ext\" [class.is-open]=\"IsExtensionOpen(line)\">\n <button\n type=\"button\"\n class=\"mjo-ol-ext__toggle\"\n (click)=\"ToggleExtension(line)\"\n [attr.aria-expanded]=\"IsExtensionOpen(line)\"\n [attr.aria-controls]=\"'mjo-ol-ext-' + line.ID\">\n <i class=\"fa-solid fa-chevron-right mjo-ol-ext__chev\" aria-hidden=\"true\"></i>\n <span class=\"mjo-ol-ext__label\">{{ ExtensionLabel(line) }}</span>\n @if (!IsExtensionOpen(line)) {\n <span class=\"mjo-ol-ext__hint\">{{ ExtensionHint(line) }}</span>\n }\n </button>\n <div\n class=\"mjo-ol-ext__body\"\n [id]=\"'mjo-ol-ext-' + line.ID\"\n [attr.inert]=\"IsExtensionOpen(line) ? null : ''\"\n [attr.aria-hidden]=\"!IsExtensionOpen(line)\">\n <div class=\"mjo-ol-ext__clip\">\n <mj-entity-form-host\n [Record]=\"ext\"\n [EditMode]=\"EditMode\"\n [Config]=\"ExtensionFormConfigFor(line)\"\n (FormCreated)=\"OnExtensionFormCreated($event)\"\n (Navigate)=\"OnExtensionNavigate($event)\">\n </mj-entity-form-host>\n </div>\n </div>\n </div>\n }\n </div>\n } @empty {\n <div class=\"mjo-ol-empty\">\n <i class=\"fa-solid fa-cart-plus\" aria-hidden=\"true\"></i>\n <div class=\"mjo-ol-empty__title\">Nothing on this order yet</div>\n <div>Search the catalog to add the first line.</div>\n </div>\n }\n\n @if (EditMode) {\n <div class=\"mj-typeahead mjo-ol-picker\">\n <div class=\"mjo-search\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <input\n [(ngModel)]=\"ProductQuery\"\n (focus)=\"OpenPicker()\"\n (blur)=\"ClosePickerSoon()\"\n (keydown)=\"OnPickerKey($event)\"\n placeholder=\"Add product \u2014 type a name or SKU\u2026\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-label=\"Add a product\"\n [attr.aria-expanded]=\"PickerOpen\">\n </div>\n\n @if (PickerOpen) {\n <div class=\"mj-typeahead-list is-open\" role=\"listbox\">\n @for (product of PickerResults; track product.ID; let i = $index) {\n <button\n type=\"button\"\n class=\"mj-typeahead-item mjo-ol-pick\"\n [class.is-cursor]=\"i === PickerCursor\"\n role=\"option\"\n [attr.aria-selected]=\"i === PickerCursor\"\n (mousedown)=\"AddProduct(product)\">\n <span class=\"mjo-ol-pick__body\">\n <span class=\"name\">{{ product.Name }}</span>\n <span class=\"sub\">{{ product.SKU }} \u00B7 {{ product.TypeName }} \u00B7 {{ product.CompanyName }}</span>\n </span>\n <span class=\"end\">\n <span class=\"mjo-ol-pick__price\">{{ product.ListPrice | mjoMoney }}</span>\n <span class=\"sub\">{{ product.Taxable ? 'taxable' : 'untaxable' }}</span>\n </span>\n </button>\n } @empty {\n <div class=\"mj-typeahead-item\">\n <span class=\"muted small\">\n @if (CatalogError) { {{ CatalogError }} }\n @else if (Catalog.length === 0) { Loading catalog\u2026 }\n @else { No product matches that. }\n </span>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host { display: block; }\n\n.mjo-ol {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty button {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty button:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty button:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty input {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price {\n flex: none;\n width: 118px;\n text-align: right;\n}\n\n.mjo-ol-card__amt {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-card__err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot {\n flex: none;\n width: 104px;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n}\n\n.mjo-ol-iconbtn {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty i {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search i { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search input {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open { display: block; }\n\n.mj-typeahead-item {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item:last-child { border-bottom: 0; }\n\n.mj-typeahead-item:hover,\n.mj-typeahead-item.is-cursor {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick .name { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick .sub { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick .end {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__chev {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__body {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip {\n overflow: hidden;\n min-height: 0;\n}\n\n/* Flatten the embedded extension form so its fields sit in the line card. */\n.mjo-ol-ext ::ng-deep mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-toolbar,\n.mjo-ol-ext ::ng-deep mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-body,\n.mjo-ol-ext ::ng-deep .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-form-field:last-child,\n.mjo-ol-ext ::ng-deep .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top { flex-wrap: wrap; }\n .mjo-ol-card__price, .mjo-ol-card__tot { width: auto; }\n}\n"] }]
1019
+ ], template: "<div class=\"mjo-ol\">\n @for (line of Lines; track line.ID) {\n <div class=\"mjo-ol-card\">\n <div class=\"mjo-ol-card__top\">\n <div class=\"mjo-ol-card__id\">\n <button type=\"button\" class=\"mjo-ol-card__name\" (click)=\"OpenProduct(line, $event)\">\n {{ ProductFor(line)?.Name ?? 'Product' }}\n </button>\n <div class=\"mjo-ol-card__meta\">\n {{ ProductFor(line)?.SKU }}\n @if (ProductFor(line)?.TypeName) {\n \u00B7 {{ ProductFor(line)?.TypeName }}\n }\n </div>\n </div>\n\n <div class=\"mjo-ol-qty\" [class.is-locked]=\"!EditMode || QuantityCappedToOne(line)\">\n @if (EditMode && !QuantityCappedToOne(line)) {\n <button type=\"button\" (click)=\"Bump(line, -1)\" aria-label=\"Decrease quantity\">\u2212</button>\n <input\n [value]=\"line.Quantity\"\n (change)=\"SetQuantity(line, $event)\"\n aria-label=\"Quantity\">\n <button type=\"button\" (click)=\"Bump(line, 1)\" [disabled]=\"QuantityAtMax(line)\" aria-label=\"Increase quantity\">+</button>\n } @else {\n <span class=\"mjo-ol-qty__value\">{{ line.Quantity }}</span>\n }\n </div>\n\n <div class=\"mjo-ol-card__price\">\n <div class=\"mjo-ol-card__price-row\">\n <div class=\"mjo-ol-card__amt\">{{ DisplayUnit(line) | mjoMoney }}</div>\n @if (CanOverride) {\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn mjo-ol-price__pencil\"\n (click)=\"ToggleOverrideEditor(line)\"\n [attr.aria-expanded]=\"IsOverrideEditorOpen(line)\"\n [attr.aria-label]=\"IsOverridden(line) ? 'Edit price override' : 'Override price'\">\n <i class=\"fa-solid fa-pencil\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n @if (IsOverridden(line)) {\n <span class=\"mjo-ol-overpill\">overridden</span>\n } @else {\n <mjo-price-source-badge\n [Source]=\"PricedLine(line)?.PriceSource ?? null\"\n [Settled]=\"!Pricing.Loading\"\n [Overridden]=\"false\" />\n }\n @if (PricedLine(line)?.Error; as why) {\n <div class=\"mjo-ol-card__err\">{{ why }}</div>\n }\n </div>\n\n <div class=\"mjo-ol-card__tot\">{{ PricedLine(line)?.NetAmount | mjoMoney }}</div>\n\n @if (EditMode) {\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn\"\n (click)=\"Remove(line)\"\n [attr.aria-label]=\"'Remove ' + (ProductFor(line)?.Name ?? 'line')\">\n <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n @if (IsOverrideEditorOpen(line)) {\n <div class=\"mjo-ol-override\" role=\"region\" [attr.aria-label]=\"'Override price for ' + (ProductFor(line)?.Name ?? 'line')\">\n <div class=\"mjo-ol-override__row\">\n <select\n class=\"mjo-ol-price__pick\"\n [value]=\"SelectedPriceID(line)\"\n (change)=\"PickNamedPrice(line, $event)\"\n aria-label=\"Named price\">\n <option value=\"\">{{ DefaultLabel(line) }}</option>\n @if (OverrideKind === 'any') {\n <option value=\"__custom__\">Custom amount</option>\n }\n @for (price of ApplicableFor(line); track price.ID) {\n <option [value]=\"price.ID\">{{ price.Name }} \u00B7 {{ price.UnitPrice | mjoMoney }}</option>\n }\n </select>\n @if (ShowCustomAmount(line)) {\n <input\n class=\"mjo-ol-price__amt\"\n type=\"number\"\n step=\"0.01\"\n min=\"0\"\n [value]=\"DisplayUnit(line)\"\n (change)=\"TypeAmount(line, $event)\"\n aria-label=\"Custom unit price\">\n }\n </div>\n <label class=\"mjo-ol-override__reason\" [class.is-off]=\"!CanExplainOverride(line)\">\n <span>Override Explanation</span>\n <textarea\n rows=\"2\"\n [disabled]=\"!CanExplainOverride(line)\"\n [value]=\"OverrideReasonText(line)\"\n (input)=\"SetOverrideReason(line, $event)\"\n placeholder=\"Optional \u2014 why this price differs from the default\"></textarea>\n </label>\n <div class=\"mjo-ol-override__actions\">\n <button type=\"button\" class=\"mjo-ol-override__done\" (click)=\"DoneOverrideEditor(line)\">Done</button>\n <button type=\"button\" class=\"mjo-ol-override__reset\" (click)=\"ResetOverride(line)\">Use Default Price</button>\n </div>\n </div>\n }\n\n <div class=\"mjo-ol-card__conseq\">\n @if (ProductFor(line); as product) {\n @if (product.TypeName === 'Goods') {\n <mjo-consequence-chip Kind=\"fulfillment\">Ships \u2014 holds the order at Posted</mjo-consequence-chip>\n }\n @if (!product.Taxable) {\n <mjo-consequence-chip Kind=\"untaxable\">Untaxable</mjo-consequence-chip>\n }\n @if (ShowsForeignRevenue(line)) {\n <mjo-consequence-chip Kind=\"company\">Revenue to {{ product.CompanyName }}</mjo-consequence-chip>\n }\n }\n </div>\n @if (OverrideReasonText(line); as why) {\n <div class=\"mjo-ol-card__why\">{{ why }}</div>\n }\n\n @if (ExtensionFor(line); as ext) {\n <div class=\"mjo-ol-ext\" [class.is-open]=\"IsExtensionOpen(line)\">\n <button\n type=\"button\"\n class=\"mjo-ol-ext__toggle\"\n (click)=\"ToggleExtension(line)\"\n [attr.aria-expanded]=\"IsExtensionOpen(line)\"\n [attr.aria-controls]=\"'mjo-ol-ext-' + line.ID\">\n <i class=\"fa-solid fa-chevron-right mjo-ol-ext__chev\" aria-hidden=\"true\"></i>\n <span class=\"mjo-ol-ext__label\">{{ ExtensionLabel(line) }}</span>\n @if (!IsExtensionOpen(line)) {\n <span class=\"mjo-ol-ext__hint\">{{ ExtensionHint(line) }}</span>\n }\n </button>\n <div\n class=\"mjo-ol-ext__body\"\n [id]=\"'mjo-ol-ext-' + line.ID\"\n [attr.inert]=\"IsExtensionOpen(line) ? null : ''\"\n [attr.aria-hidden]=\"!IsExtensionOpen(line)\">\n <div class=\"mjo-ol-ext__clip\">\n <mj-entity-form-host\n [Record]=\"ext\"\n [EditMode]=\"EditMode\"\n [Config]=\"ExtensionFormConfigFor(line)\"\n (FormCreated)=\"OnExtensionFormCreated($event)\"\n (Navigate)=\"OnExtensionNavigate($event)\">\n </mj-entity-form-host>\n </div>\n </div>\n </div>\n }\n </div>\n } @empty {\n <div class=\"mjo-ol-empty\">\n <i class=\"fa-solid fa-cart-plus\" aria-hidden=\"true\"></i>\n <div class=\"mjo-ol-empty__title\">Nothing on this order yet</div>\n <div>Search the catalog to add the first line.</div>\n </div>\n }\n\n @if (EditMode) {\n <div class=\"mj-typeahead mjo-ol-picker\" #pickerHost>\n <div class=\"mjo-search\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <input\n [(ngModel)]=\"ProductQuery\"\n (ngModelChange)=\"OnProductQueryChange()\"\n (focus)=\"OpenPicker()\"\n (blur)=\"ClosePickerSoon()\"\n (keydown)=\"OnPickerKey($event)\"\n placeholder=\"Add product \u2014 type a name or SKU\u2026\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-label=\"Add a product\"\n [attr.aria-expanded]=\"PickerOpen\">\n </div>\n\n @if (PickerOpen) {\n <div class=\"mj-typeahead-list is-open\" [class.is-up]=\"PickerOpensUp\" role=\"listbox\">\n @for (product of PickerResults; track product.ID; let i = $index) {\n <button\n type=\"button\"\n class=\"mj-typeahead-item mjo-ol-pick\"\n [class.is-cursor]=\"i === PickerCursor\"\n role=\"option\"\n [attr.aria-selected]=\"i === PickerCursor\"\n (mousedown)=\"AddProduct(product)\">\n <span class=\"mjo-ol-pick__body\">\n <span class=\"name\">{{ product.Name }}</span>\n <span class=\"sub\">{{ product.SKU }} \u00B7 {{ product.TypeName }} \u00B7 {{ product.CompanyName }}</span>\n </span>\n <span class=\"end\">\n <span class=\"mjo-ol-pick__price\">{{ product.ListPrice | mjoMoney }}</span>\n <span class=\"sub\">{{ product.Taxable ? 'taxable' : 'untaxable' }}</span>\n </span>\n </button>\n } @empty {\n <div class=\"mj-typeahead-item\">\n <span class=\"muted small\">\n @if (CatalogError) { {{ CatalogError }} }\n @else if (Catalog.length === 0) { Loading catalog\u2026 }\n @else { No product matches that. }\n </span>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host { display: block; }\n\n.mjo-ol {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty button {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty button:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty button:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty input {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price {\n flex: none;\n min-width: 108px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.mjo-ol-card__price-row {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 2px;\n height: 28px;\n}\n\n.mjo-ol-price__pencil {\n flex: none;\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-price__pencil:hover {\n color: var(--mj-text-link);\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-price__pick,\n.mjo-ol-price__amt,\n.mjo-ol-override__reason textarea {\n display: block;\n width: 100%;\n box-sizing: border-box;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-price__pick {\n height: 28px;\n padding: 0 6px;\n text-align: left;\n flex: 1 1 180px;\n max-width: 240px;\n width: auto;\n}\n\n.mjo-ol-price__amt {\n height: 28px;\n padding: 0 8px;\n text-align: right;\n font-weight: var(--mj-font-semibold);\n width: 108px;\n flex: none;\n}\n\n.mjo-ol-override {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n padding: var(--mj-space-2);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__row {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-override__reason span {\n display: block;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.mjo-ol-override__reason.is-off {\n opacity: 0.55;\n}\n\n.mjo-ol-override__reason textarea:disabled {\n cursor: not-allowed;\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__reason textarea {\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\n text-align: left;\n font-variant-numeric: normal;\n}\n\n.mjo-ol-override__actions {\n display: flex;\n gap: var(--mj-space-2);\n justify-content: flex-end;\n}\n\n.mjo-ol-override__done,\n.mjo-ol-override__reset {\n border: 0;\n background: transparent;\n cursor: pointer;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-override__done {\n color: var(--mj-text-link);\n}\n\n.mjo-ol-override__reset {\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-override__done:hover,\n.mjo-ol-override__reset:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-card__amt {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-overpill {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-top: 4px;\n padding: 1px 8px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--mj-status-warning-text);\n background: color-mix(in srgb, var(--mj-status-warning-text) 16%, transparent);\n}\n\n.mjo-ol-card__err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot {\n flex: none;\n min-width: 104px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-iconbtn {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-card__why {\n margin-top: 6px;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n line-height: 1.35;\n}\n\n.mjo-ol-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty i {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search i { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search input {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open { display: block; }\n\n.mj-typeahead-list.is-up {\n top: auto;\n bottom: calc(100% + 4px);\n}\n\n.mj-typeahead-item {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item:last-child { border-bottom: 0; }\n\n.mj-typeahead-item:hover,\n.mj-typeahead-item.is-cursor {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick .name { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick .sub { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick .end {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__chev {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__body {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip {\n overflow: hidden;\n min-height: 0;\n}\n\n/* Flatten the embedded extension form so its fields sit in the line card. */\n.mjo-ol-ext ::ng-deep mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-toolbar,\n.mjo-ol-ext ::ng-deep mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-body,\n.mjo-ol-ext ::ng-deep .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-form-field:last-child,\n.mjo-ol-ext ::ng-deep .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top { flex-wrap: wrap; }\n .mjo-ol-card__price, .mjo-ol-card__tot { width: auto; }\n}\n"] }]
609
1020
  }], null, { Provider: [{
610
1021
  type: Input
611
1022
  }], EditMode: [{
@@ -616,6 +1027,9 @@ export class MJOOrderLinesEditorComponent {
616
1027
  type: Output
617
1028
  }], Navigate: [{
618
1029
  type: Output
1030
+ }], pickerHost: [{
1031
+ type: ViewChild,
1032
+ args: ['pickerHost']
619
1033
  }] }); })();
620
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJOOrderLinesEditorComponent, { className: "MJOOrderLinesEditorComponent", filePath: "lib/custom/OrderHeader/order-lines-editor.component.ts", lineNumber: 57 }); })();
1034
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJOOrderLinesEditorComponent, { className: "MJOOrderLinesEditorComponent", filePath: "lib/custom/OrderHeader/order-lines-editor.component.ts", lineNumber: 69 }); })();
621
1035
  //# sourceMappingURL=order-lines-editor.component.js.map