@mj-biz-apps/orders-ng 0.0.1 → 5.2.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 (597) hide show
  1. package/LICENSE +183 -0
  2. package/README.md +34 -2
  3. package/dist/checkout-element/main.js +38080 -0
  4. package/dist/lib/checkout-widget/checkout-draft-line.d.ts +25 -0
  5. package/dist/lib/checkout-widget/checkout-draft-line.d.ts.map +1 -0
  6. package/dist/lib/checkout-widget/checkout-draft-line.js +46 -0
  7. package/dist/lib/checkout-widget/checkout-draft-line.js.map +1 -0
  8. package/dist/lib/checkout-widget/checkout-public-host.component.d.ts +80 -0
  9. package/dist/lib/checkout-widget/checkout-public-host.component.d.ts.map +1 -0
  10. package/dist/lib/checkout-widget/checkout-public-host.component.js +360 -0
  11. package/dist/lib/checkout-widget/checkout-public-host.component.js.map +1 -0
  12. package/dist/lib/checkout-widget/checkout-widget.component.d.ts +143 -0
  13. package/dist/lib/checkout-widget/checkout-widget.component.d.ts.map +1 -0
  14. package/dist/lib/checkout-widget/checkout-widget.component.js +873 -0
  15. package/dist/lib/checkout-widget/checkout-widget.component.js.map +1 -0
  16. package/dist/lib/custom/OrderHeader/line-extension-cache.d.ts +22 -0
  17. package/dist/lib/custom/OrderHeader/line-extension-cache.d.ts.map +1 -0
  18. package/dist/lib/custom/OrderHeader/line-extension-cache.js +46 -0
  19. package/dist/lib/custom/OrderHeader/line-extension-cache.js.map +1 -0
  20. package/dist/lib/custom/OrderHeader/line-extension-fields.d.ts +58 -0
  21. package/dist/lib/custom/OrderHeader/line-extension-fields.d.ts.map +1 -0
  22. package/dist/lib/custom/OrderHeader/line-extension-fields.js +137 -0
  23. package/dist/lib/custom/OrderHeader/line-extension-fields.js.map +1 -0
  24. package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts +127 -0
  25. package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts.map +1 -0
  26. package/dist/lib/custom/OrderHeader/order-header-form.component.js +1429 -0
  27. package/dist/lib/custom/OrderHeader/order-header-form.component.js.map +1 -0
  28. package/dist/lib/custom/OrderHeader/order-header-prefs.d.ts +18 -0
  29. package/dist/lib/custom/OrderHeader/order-header-prefs.d.ts.map +1 -0
  30. package/dist/lib/custom/OrderHeader/order-header-prefs.js +20 -0
  31. package/dist/lib/custom/OrderHeader/order-header-prefs.js.map +1 -0
  32. package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts +72 -0
  33. package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts.map +1 -0
  34. package/dist/lib/custom/OrderHeader/order-lines-editor.component.js +621 -0
  35. package/dist/lib/custom/OrderHeader/order-lines-editor.component.js.map +1 -0
  36. package/dist/lib/custom/PaymentHeader/payment-header-form.component.d.ts +135 -0
  37. package/dist/lib/custom/PaymentHeader/payment-header-form.component.d.ts.map +1 -0
  38. package/dist/lib/custom/PaymentHeader/payment-header-form.component.js +2169 -0
  39. package/dist/lib/custom/PaymentHeader/payment-header-form.component.js.map +1 -0
  40. package/dist/lib/custom/PriceList/price-list-form.component.d.ts +46 -0
  41. package/dist/lib/custom/PriceList/price-list-form.component.d.ts.map +1 -0
  42. package/dist/lib/custom/PriceList/price-list-form.component.js +363 -0
  43. package/dist/lib/custom/PriceList/price-list-form.component.js.map +1 -0
  44. package/dist/lib/custom/Product/product-form.component.d.ts +81 -0
  45. package/dist/lib/custom/Product/product-form.component.d.ts.map +1 -0
  46. package/dist/lib/custom/Product/product-form.component.js +665 -0
  47. package/dist/lib/custom/Product/product-form.component.js.map +1 -0
  48. package/dist/lib/custom/Product/widgets/product-accounting-widget.component.d.ts +16 -0
  49. package/dist/lib/custom/Product/widgets/product-accounting-widget.component.d.ts.map +1 -0
  50. package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js +55 -0
  51. package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js.map +1 -0
  52. package/dist/lib/custom/Product/widgets/product-fulfillment-widget.component.d.ts +16 -0
  53. package/dist/lib/custom/Product/widgets/product-fulfillment-widget.component.d.ts.map +1 -0
  54. package/dist/lib/custom/Product/widgets/product-fulfillment-widget.component.js +65 -0
  55. package/dist/lib/custom/Product/widgets/product-fulfillment-widget.component.js.map +1 -0
  56. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.d.ts +103 -0
  57. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.d.ts.map +1 -0
  58. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.js +950 -0
  59. package/dist/lib/custom/Product/widgets/product-pricing-widget.component.js.map +1 -0
  60. package/dist/lib/custom/Product/widgets/product-promotions-widget.component.d.ts +21 -0
  61. package/dist/lib/custom/Product/widgets/product-promotions-widget.component.d.ts.map +1 -0
  62. package/dist/lib/custom/Product/widgets/product-promotions-widget.component.js +67 -0
  63. package/dist/lib/custom/Product/widgets/product-promotions-widget.component.js.map +1 -0
  64. package/dist/lib/custom/Product/widgets/product-subscription-widget.component.d.ts +18 -0
  65. package/dist/lib/custom/Product/widgets/product-subscription-widget.component.d.ts.map +1 -0
  66. package/dist/lib/custom/Product/widgets/product-subscription-widget.component.js +55 -0
  67. package/dist/lib/custom/Product/widgets/product-subscription-widget.component.js.map +1 -0
  68. package/dist/lib/custom/Promotion/promotion-form.component.d.ts +33 -0
  69. package/dist/lib/custom/Promotion/promotion-form.component.d.ts.map +1 -0
  70. package/dist/lib/custom/Promotion/promotion-form.component.js +350 -0
  71. package/dist/lib/custom/Promotion/promotion-form.component.js.map +1 -0
  72. package/dist/lib/custom/Subscription/subscription-form.component.d.ts +96 -0
  73. package/dist/lib/custom/Subscription/subscription-form.component.d.ts.map +1 -0
  74. package/dist/lib/custom/Subscription/subscription-form.component.js +885 -0
  75. package/dist/lib/custom/Subscription/subscription-form.component.js.map +1 -0
  76. package/dist/lib/custom/SubscriptionTerm/subscription-term-form.component.d.ts +60 -0
  77. package/dist/lib/custom/SubscriptionTerm/subscription-term-form.component.d.ts.map +1 -0
  78. package/dist/lib/custom/SubscriptionTerm/subscription-term-form.component.js +567 -0
  79. package/dist/lib/custom/SubscriptionTerm/subscription-term-form.component.js.map +1 -0
  80. package/dist/lib/custom/custom-forms.module.d.ts +29 -0
  81. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -0
  82. package/dist/lib/custom/custom-forms.module.js +127 -0
  83. package/dist/lib/custom/custom-forms.module.js.map +1 -0
  84. package/dist/lib/custom/form-navigation-helper.d.ts +10 -0
  85. package/dist/lib/custom/form-navigation-helper.d.ts.map +1 -0
  86. package/dist/lib/custom/form-navigation-helper.js +51 -0
  87. package/dist/lib/custom/form-navigation-helper.js.map +1 -0
  88. package/dist/lib/data/entity-names.d.ts +84 -0
  89. package/dist/lib/data/entity-names.d.ts.map +1 -0
  90. package/dist/lib/data/entity-names.js +85 -0
  91. package/dist/lib/data/entity-names.js.map +1 -0
  92. package/dist/lib/data/orders-queries.d.ts +394 -0
  93. package/dist/lib/data/orders-queries.d.ts.map +1 -0
  94. package/dist/lib/data/orders-queries.js +897 -0
  95. package/dist/lib/data/orders-queries.js.map +1 -0
  96. package/dist/lib/form-panels/catalog-overviews.panels.d.ts +36 -0
  97. package/dist/lib/form-panels/catalog-overviews.panels.d.ts.map +1 -0
  98. package/dist/lib/form-panels/catalog-overviews.panels.js +443 -0
  99. package/dist/lib/form-panels/catalog-overviews.panels.js.map +1 -0
  100. package/dist/lib/form-panels/commercial-overviews.panels.d.ts +30 -0
  101. package/dist/lib/form-panels/commercial-overviews.panels.d.ts.map +1 -0
  102. package/dist/lib/form-panels/commercial-overviews.panels.js +315 -0
  103. package/dist/lib/form-panels/commercial-overviews.panels.js.map +1 -0
  104. package/dist/lib/form-panels/document-form.helpers.d.ts +38 -0
  105. package/dist/lib/form-panels/document-form.helpers.d.ts.map +1 -0
  106. package/dist/lib/form-panels/document-form.helpers.js +183 -0
  107. package/dist/lib/form-panels/document-form.helpers.js.map +1 -0
  108. package/dist/lib/form-panels/document-forms.module.d.ts +34 -0
  109. package/dist/lib/form-panels/document-forms.module.d.ts.map +1 -0
  110. package/dist/lib/form-panels/document-forms.module.js +183 -0
  111. package/dist/lib/form-panels/document-forms.module.js.map +1 -0
  112. package/dist/lib/form-panels/document-hero.component.d.ts +28 -0
  113. package/dist/lib/form-panels/document-hero.component.d.ts.map +1 -0
  114. package/dist/lib/form-panels/document-hero.component.js +167 -0
  115. package/dist/lib/form-panels/document-hero.component.js.map +1 -0
  116. package/dist/lib/form-panels/document-overviews.panels.d.ts +42 -0
  117. package/dist/lib/form-panels/document-overviews.panels.d.ts.map +1 -0
  118. package/dist/lib/form-panels/document-overviews.panels.js +457 -0
  119. package/dist/lib/form-panels/document-overviews.panels.js.map +1 -0
  120. package/dist/lib/form-panels/lookup-headers.panels.d.ts +68 -0
  121. package/dist/lib/form-panels/lookup-headers.panels.d.ts.map +1 -0
  122. package/dist/lib/form-panels/lookup-headers.panels.js +399 -0
  123. package/dist/lib/form-panels/lookup-headers.panels.js.map +1 -0
  124. package/dist/lib/form-panels/organization-header.panel.d.ts +15 -0
  125. package/dist/lib/form-panels/organization-header.panel.d.ts.map +1 -0
  126. package/dist/lib/form-panels/organization-header.panel.js +77 -0
  127. package/dist/lib/form-panels/organization-header.panel.js.map +1 -0
  128. package/dist/lib/form-panels/organization-orders-overview.panel.d.ts +13 -0
  129. package/dist/lib/form-panels/organization-orders-overview.panel.d.ts.map +1 -0
  130. package/dist/lib/form-panels/organization-orders-overview.panel.js +77 -0
  131. package/dist/lib/form-panels/organization-orders-overview.panel.js.map +1 -0
  132. package/dist/lib/form-panels/organization-orders.panel.d.ts +16 -0
  133. package/dist/lib/form-panels/organization-orders.panel.d.ts.map +1 -0
  134. package/dist/lib/form-panels/organization-orders.panel.js +88 -0
  135. package/dist/lib/form-panels/organization-orders.panel.js.map +1 -0
  136. package/dist/lib/form-panels/overview-cards.component.d.ts +30 -0
  137. package/dist/lib/form-panels/overview-cards.component.d.ts.map +1 -0
  138. package/dist/lib/form-panels/overview-cards.component.js +250 -0
  139. package/dist/lib/form-panels/overview-cards.component.js.map +1 -0
  140. package/dist/lib/form-panels/overview-load.d.ts +7 -0
  141. package/dist/lib/form-panels/overview-load.d.ts.map +1 -0
  142. package/dist/lib/form-panels/overview-load.js +31 -0
  143. package/dist/lib/form-panels/overview-load.js.map +1 -0
  144. package/dist/lib/form-panels/party-headers.module.d.ts +18 -0
  145. package/dist/lib/form-panels/party-headers.module.d.ts.map +1 -0
  146. package/dist/lib/form-panels/party-headers.module.js +63 -0
  147. package/dist/lib/form-panels/party-headers.module.js.map +1 -0
  148. package/dist/lib/form-panels/party-order-stats.d.ts +26 -0
  149. package/dist/lib/form-panels/party-order-stats.d.ts.map +1 -0
  150. package/dist/lib/form-panels/party-order-stats.js +149 -0
  151. package/dist/lib/form-panels/party-order-stats.js.map +1 -0
  152. package/dist/lib/form-panels/payment-header.panel.d.ts +21 -0
  153. package/dist/lib/form-panels/payment-header.panel.d.ts.map +1 -0
  154. package/dist/lib/form-panels/payment-header.panel.js +111 -0
  155. package/dist/lib/form-panels/payment-header.panel.js.map +1 -0
  156. package/dist/lib/form-panels/payment-journals.panel.d.ts +32 -0
  157. package/dist/lib/form-panels/payment-journals.panel.d.ts.map +1 -0
  158. package/dist/lib/form-panels/payment-journals.panel.js +332 -0
  159. package/dist/lib/form-panels/payment-journals.panel.js.map +1 -0
  160. package/dist/lib/form-panels/person-header.panel.d.ts +15 -0
  161. package/dist/lib/form-panels/person-header.panel.d.ts.map +1 -0
  162. package/dist/lib/form-panels/person-header.panel.js +77 -0
  163. package/dist/lib/form-panels/person-header.panel.js.map +1 -0
  164. package/dist/lib/form-panels/person-orders-overview.panel.d.ts +13 -0
  165. package/dist/lib/form-panels/person-orders-overview.panel.d.ts.map +1 -0
  166. package/dist/lib/form-panels/person-orders-overview.panel.js +77 -0
  167. package/dist/lib/form-panels/person-orders-overview.panel.js.map +1 -0
  168. package/dist/lib/form-panels/person-orders.panel.d.ts +17 -0
  169. package/dist/lib/form-panels/person-orders.panel.d.ts.map +1 -0
  170. package/dist/lib/form-panels/person-orders.panel.js +89 -0
  171. package/dist/lib/form-panels/person-orders.panel.js.map +1 -0
  172. package/dist/lib/form-panels/price-list-header.panel.d.ts +11 -0
  173. package/dist/lib/form-panels/price-list-header.panel.d.ts.map +1 -0
  174. package/dist/lib/form-panels/price-list-header.panel.js +76 -0
  175. package/dist/lib/form-panels/price-list-header.panel.js.map +1 -0
  176. package/dist/lib/form-panels/price-list-simulator.panel.d.ts +19 -0
  177. package/dist/lib/form-panels/price-list-simulator.panel.d.ts.map +1 -0
  178. package/dist/lib/form-panels/price-list-simulator.panel.js +125 -0
  179. package/dist/lib/form-panels/price-list-simulator.panel.js.map +1 -0
  180. package/dist/lib/form-panels/product-category-hierarchy.panel.d.ts +23 -0
  181. package/dist/lib/form-panels/product-category-hierarchy.panel.d.ts.map +1 -0
  182. package/dist/lib/form-panels/product-category-hierarchy.panel.js +118 -0
  183. package/dist/lib/form-panels/product-category-hierarchy.panel.js.map +1 -0
  184. package/dist/lib/form-panels/product-header.panel.d.ts +14 -0
  185. package/dist/lib/form-panels/product-header.panel.d.ts.map +1 -0
  186. package/dist/lib/form-panels/product-header.panel.js +105 -0
  187. package/dist/lib/form-panels/product-header.panel.js.map +1 -0
  188. package/dist/lib/form-panels/product-widget.panels.d.ts +24 -0
  189. package/dist/lib/form-panels/product-widget.panels.d.ts.map +1 -0
  190. package/dist/lib/form-panels/product-widget.panels.js +253 -0
  191. package/dist/lib/form-panels/product-widget.panels.js.map +1 -0
  192. package/dist/lib/form-panels/promotion-header.panel.d.ts +14 -0
  193. package/dist/lib/form-panels/promotion-header.panel.d.ts.map +1 -0
  194. package/dist/lib/form-panels/promotion-header.panel.js +112 -0
  195. package/dist/lib/form-panels/promotion-header.panel.js.map +1 -0
  196. package/dist/lib/form-panels/subscription-header.panel.d.ts +17 -0
  197. package/dist/lib/form-panels/subscription-header.panel.d.ts.map +1 -0
  198. package/dist/lib/form-panels/subscription-header.panel.js +127 -0
  199. package/dist/lib/form-panels/subscription-header.panel.js.map +1 -0
  200. package/dist/lib/form-panels/subscription-revrec.panel.d.ts +32 -0
  201. package/dist/lib/form-panels/subscription-revrec.panel.d.ts.map +1 -0
  202. package/dist/lib/form-panels/subscription-revrec.panel.js +184 -0
  203. package/dist/lib/form-panels/subscription-revrec.panel.js.map +1 -0
  204. package/dist/lib/form-panels/subscription-term-header.panel.d.ts +13 -0
  205. package/dist/lib/form-panels/subscription-term-header.panel.d.ts.map +1 -0
  206. package/dist/lib/form-panels/subscription-term-header.panel.js +113 -0
  207. package/dist/lib/form-panels/subscription-term-header.panel.js.map +1 -0
  208. package/dist/lib/form-panels/subscription-term-revrec.panel.d.ts +23 -0
  209. package/dist/lib/form-panels/subscription-term-revrec.panel.d.ts.map +1 -0
  210. package/dist/lib/form-panels/subscription-term-revrec.panel.js +144 -0
  211. package/dist/lib/form-panels/subscription-term-revrec.panel.js.map +1 -0
  212. package/dist/lib/form-panels/subscription-terms.panel.d.ts +25 -0
  213. package/dist/lib/form-panels/subscription-terms.panel.d.ts.map +1 -0
  214. package/dist/lib/form-panels/subscription-terms.panel.js +173 -0
  215. package/dist/lib/form-panels/subscription-terms.panel.js.map +1 -0
  216. package/dist/lib/generated/Entities/mjBizAppsOrdersChargeType/mjbizappsorderschargetype.form.component.d.ts +10 -0
  217. package/dist/lib/generated/Entities/mjBizAppsOrdersChargeType/mjbizappsorderschargetype.form.component.d.ts.map +1 -0
  218. package/dist/lib/generated/Entities/mjBizAppsOrdersChargeType/mjbizappsorderschargetype.form.component.js +102 -0
  219. package/dist/lib/generated/Entities/mjBizAppsOrdersChargeType/mjbizappsorderschargetype.form.component.js.map +1 -0
  220. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.d.ts +10 -0
  221. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.d.ts.map +1 -0
  222. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.js +103 -0
  223. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.js.map +1 -0
  224. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.d.ts +10 -0
  225. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.d.ts.map +1 -0
  226. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.js +136 -0
  227. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.js.map +1 -0
  228. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.d.ts +10 -0
  229. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.d.ts.map +1 -0
  230. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.js +106 -0
  231. package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.js.map +1 -0
  232. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentMethod/mjbizappsorderscustomerpaymentmethod.form.component.d.ts +10 -0
  233. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentMethod/mjbizappsorderscustomerpaymentmethod.form.component.d.ts.map +1 -0
  234. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentMethod/mjbizappsorderscustomerpaymentmethod.form.component.js +98 -0
  235. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentMethod/mjbizappsorderscustomerpaymentmethod.form.component.js.map +1 -0
  236. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentTerms/mjbizappsorderscustomerpaymentterms.form.component.d.ts +10 -0
  237. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentTerms/mjbizappsorderscustomerpaymentterms.form.component.d.ts.map +1 -0
  238. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentTerms/mjbizappsorderscustomerpaymentterms.form.component.js +89 -0
  239. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerPaymentTerms/mjbizappsorderscustomerpaymentterms.form.component.js.map +1 -0
  240. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerTaxExemption/mjbizappsorderscustomertaxexemption.form.component.d.ts +10 -0
  241. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerTaxExemption/mjbizappsorderscustomertaxexemption.form.component.d.ts.map +1 -0
  242. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerTaxExemption/mjbizappsorderscustomertaxexemption.form.component.js +103 -0
  243. package/dist/lib/generated/Entities/mjBizAppsOrdersCustomerTaxExemption/mjbizappsorderscustomertaxexemption.form.component.js.map +1 -0
  244. package/dist/lib/generated/Entities/mjBizAppsOrdersEntitlementGrant/mjbizappsordersentitlementgrant.form.component.d.ts +10 -0
  245. package/dist/lib/generated/Entities/mjBizAppsOrdersEntitlementGrant/mjbizappsordersentitlementgrant.form.component.d.ts.map +1 -0
  246. package/dist/lib/generated/Entities/mjBizAppsOrdersEntitlementGrant/mjbizappsordersentitlementgrant.form.component.js +107 -0
  247. package/dist/lib/generated/Entities/mjBizAppsOrdersEntitlementGrant/mjbizappsordersentitlementgrant.form.component.js.map +1 -0
  248. package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.d.ts +10 -0
  249. package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.d.ts.map +1 -0
  250. package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.js +139 -0
  251. package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.js.map +1 -0
  252. package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.d.ts +10 -0
  253. package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.d.ts.map +1 -0
  254. package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.js +129 -0
  255. package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.js.map +1 -0
  256. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustment/mjbizappsordersorderadjustment.form.component.d.ts +10 -0
  257. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustment/mjbizappsordersorderadjustment.form.component.d.ts.map +1 -0
  258. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustment/mjbizappsordersorderadjustment.form.component.js +122 -0
  259. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustment/mjbizappsordersorderadjustment.form.component.js.map +1 -0
  260. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustmentAllocation/mjbizappsordersorderadjustmentallocation.form.component.d.ts +10 -0
  261. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustmentAllocation/mjbizappsordersorderadjustmentallocation.form.component.d.ts.map +1 -0
  262. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustmentAllocation/mjbizappsordersorderadjustmentallocation.form.component.js +67 -0
  263. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderAdjustmentAllocation/mjbizappsordersorderadjustmentallocation.form.component.js.map +1 -0
  264. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCharge/mjbizappsordersordercharge.form.component.d.ts +10 -0
  265. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCharge/mjbizappsordersordercharge.form.component.d.ts.map +1 -0
  266. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCharge/mjbizappsordersordercharge.form.component.js +132 -0
  267. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCharge/mjbizappsordersordercharge.form.component.js.map +1 -0
  268. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderChargeAllocation/mjbizappsordersorderchargeallocation.form.component.d.ts +10 -0
  269. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderChargeAllocation/mjbizappsordersorderchargeallocation.form.component.d.ts.map +1 -0
  270. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderChargeAllocation/mjbizappsordersorderchargeallocation.form.component.js +67 -0
  271. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderChargeAllocation/mjbizappsordersorderchargeallocation.form.component.js.map +1 -0
  272. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.d.ts +10 -0
  273. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.d.ts.map +1 -0
  274. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.js +85 -0
  275. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.js.map +1 -0
  276. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.d.ts +10 -0
  277. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.d.ts.map +1 -0
  278. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js +342 -0
  279. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js.map +1 -0
  280. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.d.ts +10 -0
  281. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.d.ts.map +1 -0
  282. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js +378 -0
  283. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js.map +1 -0
  284. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLineDimension/mjbizappsordersorderlinedimension.form.component.d.ts +10 -0
  285. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLineDimension/mjbizappsordersorderlinedimension.form.component.d.ts.map +1 -0
  286. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLineDimension/mjbizappsordersorderlinedimension.form.component.js +71 -0
  287. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLineDimension/mjbizappsordersorderlinedimension.form.component.js.map +1 -0
  288. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLinePriceComponent/mjbizappsordersorderlinepricecomponent.form.component.d.ts +10 -0
  289. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLinePriceComponent/mjbizappsordersorderlinepricecomponent.form.component.d.ts.map +1 -0
  290. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLinePriceComponent/mjbizappsordersorderlinepricecomponent.form.component.js +89 -0
  291. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLinePriceComponent/mjbizappsordersorderlinepricecomponent.form.component.js.map +1 -0
  292. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderSequence/mjbizappsordersordersequence.form.component.d.ts +10 -0
  293. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderSequence/mjbizappsordersordersequence.form.component.d.ts.map +1 -0
  294. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderSequence/mjbizappsordersordersequence.form.component.js +63 -0
  295. package/dist/lib/generated/Entities/mjBizAppsOrdersOrderSequence/mjbizappsordersordersequence.form.component.js.map +1 -0
  296. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentDetail/mjbizappsorderspaymentdetail.form.component.d.ts +10 -0
  297. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentDetail/mjbizappsorderspaymentdetail.form.component.d.ts.map +1 -0
  298. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentDetail/mjbizappsorderspaymentdetail.form.component.js +180 -0
  299. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentDetail/mjbizappsorderspaymentdetail.form.component.js.map +1 -0
  300. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.d.ts +10 -0
  301. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.d.ts.map +1 -0
  302. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.js +206 -0
  303. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.js.map +1 -0
  304. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentIntent/mjbizappsorderspaymentintent.form.component.d.ts +10 -0
  305. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentIntent/mjbizappsorderspaymentintent.form.component.d.ts.map +1 -0
  306. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentIntent/mjbizappsorderspaymentintent.form.component.js +128 -0
  307. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentIntent/mjbizappsorderspaymentintent.form.component.js.map +1 -0
  308. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentLine/mjbizappsorderspaymentline.form.component.d.ts +10 -0
  309. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentLine/mjbizappsorderspaymentline.form.component.d.ts.map +1 -0
  310. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentLine/mjbizappsorderspaymentline.form.component.js +87 -0
  311. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentLine/mjbizappsorderspaymentline.form.component.js.map +1 -0
  312. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProvider/mjbizappsorderspaymentprovider.form.component.d.ts +10 -0
  313. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProvider/mjbizappsorderspaymentprovider.form.component.d.ts.map +1 -0
  314. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProvider/mjbizappsorderspaymentprovider.form.component.js +158 -0
  315. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProvider/mjbizappsorderspaymentprovider.form.component.js.map +1 -0
  316. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProviderType/mjbizappsorderspaymentprovidertype.form.component.d.ts +10 -0
  317. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProviderType/mjbizappsorderspaymentprovidertype.form.component.d.ts.map +1 -0
  318. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProviderType/mjbizappsorderspaymentprovidertype.form.component.js +110 -0
  319. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProviderType/mjbizappsorderspaymentprovidertype.form.component.js.map +1 -0
  320. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentSequence/mjbizappsorderspaymentsequence.form.component.d.ts +10 -0
  321. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentSequence/mjbizappsorderspaymentsequence.form.component.d.ts.map +1 -0
  322. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentSequence/mjbizappsorderspaymentsequence.form.component.js +63 -0
  323. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentSequence/mjbizappsorderspaymentsequence.form.component.js.map +1 -0
  324. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentTermsType/mjbizappsorderspaymenttermstype.form.component.d.ts +10 -0
  325. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentTermsType/mjbizappsorderspaymenttermstype.form.component.d.ts.map +1 -0
  326. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentTermsType/mjbizappsorderspaymenttermstype.form.component.js +108 -0
  327. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentTermsType/mjbizappsorderspaymenttermstype.form.component.js.map +1 -0
  328. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentType/mjbizappsorderspaymenttype.form.component.d.ts +10 -0
  329. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentType/mjbizappsorderspaymenttype.form.component.d.ts.map +1 -0
  330. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentType/mjbizappsorderspaymenttype.form.component.js +144 -0
  331. package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentType/mjbizappsorderspaymenttype.form.component.js.map +1 -0
  332. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceList/mjbizappsorderspricelist.form.component.d.ts +10 -0
  333. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceList/mjbizappsorderspricelist.form.component.d.ts.map +1 -0
  334. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceList/mjbizappsorderspricelist.form.component.js +134 -0
  335. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceList/mjbizappsorderspricelist.form.component.js.map +1 -0
  336. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceListAssignment/mjbizappsorderspricelistassignment.form.component.d.ts +10 -0
  337. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceListAssignment/mjbizappsorderspricelistassignment.form.component.d.ts.map +1 -0
  338. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceListAssignment/mjbizappsorderspricelistassignment.form.component.js +89 -0
  339. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceListAssignment/mjbizappsorderspricelistassignment.form.component.js.map +1 -0
  340. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceTier/mjbizappsorderspricetier.form.component.d.ts +10 -0
  341. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceTier/mjbizappsorderspricetier.form.component.d.ts.map +1 -0
  342. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceTier/mjbizappsorderspricetier.form.component.js +71 -0
  343. package/dist/lib/generated/Entities/mjBizAppsOrdersPriceTier/mjbizappsorderspricetier.form.component.js.map +1 -0
  344. package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.d.ts +10 -0
  345. package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.d.ts.map +1 -0
  346. package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js +294 -0
  347. package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js.map +1 -0
  348. package/dist/lib/generated/Entities/mjBizAppsOrdersProductBundleItem/mjbizappsordersproductbundleitem.form.component.d.ts +10 -0
  349. package/dist/lib/generated/Entities/mjBizAppsOrdersProductBundleItem/mjbizappsordersproductbundleitem.form.component.d.ts.map +1 -0
  350. package/dist/lib/generated/Entities/mjBizAppsOrdersProductBundleItem/mjbizappsordersproductbundleitem.form.component.js +83 -0
  351. package/dist/lib/generated/Entities/mjBizAppsOrdersProductBundleItem/mjbizappsordersproductbundleitem.form.component.js.map +1 -0
  352. package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.d.ts +10 -0
  353. package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.d.ts.map +1 -0
  354. package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.js +168 -0
  355. package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.js.map +1 -0
  356. package/dist/lib/generated/Entities/mjBizAppsOrdersProductEntitlement/mjbizappsordersproductentitlement.form.component.d.ts +10 -0
  357. package/dist/lib/generated/Entities/mjBizAppsOrdersProductEntitlement/mjbizappsordersproductentitlement.form.component.d.ts.map +1 -0
  358. package/dist/lib/generated/Entities/mjBizAppsOrdersProductEntitlement/mjbizappsordersproductentitlement.form.component.js +114 -0
  359. package/dist/lib/generated/Entities/mjBizAppsOrdersProductEntitlement/mjbizappsordersproductentitlement.form.component.js.map +1 -0
  360. package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.d.ts +10 -0
  361. package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.d.ts.map +1 -0
  362. package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.js +162 -0
  363. package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.js.map +1 -0
  364. package/dist/lib/generated/Entities/mjBizAppsOrdersProductType/mjbizappsordersproducttype.form.component.d.ts +10 -0
  365. package/dist/lib/generated/Entities/mjBizAppsOrdersProductType/mjbizappsordersproducttype.form.component.d.ts.map +1 -0
  366. package/dist/lib/generated/Entities/mjBizAppsOrdersProductType/mjbizappsordersproducttype.form.component.js +136 -0
  367. package/dist/lib/generated/Entities/mjBizAppsOrdersProductType/mjbizappsordersproducttype.form.component.js.map +1 -0
  368. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotion/mjbizappsorderspromotion.form.component.d.ts +10 -0
  369. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotion/mjbizappsorderspromotion.form.component.d.ts.map +1 -0
  370. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotion/mjbizappsorderspromotion.form.component.js +182 -0
  371. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotion/mjbizappsorderspromotion.form.component.js.map +1 -0
  372. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionCode/mjbizappsorderspromotioncode.form.component.d.ts +10 -0
  373. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionCode/mjbizappsorderspromotioncode.form.component.d.ts.map +1 -0
  374. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionCode/mjbizappsorderspromotioncode.form.component.js +108 -0
  375. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionCode/mjbizappsorderspromotioncode.form.component.js.map +1 -0
  376. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionTarget/mjbizappsorderspromotiontarget.form.component.d.ts +10 -0
  377. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionTarget/mjbizappsorderspromotiontarget.form.component.d.ts.map +1 -0
  378. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionTarget/mjbizappsorderspromotiontarget.form.component.js +75 -0
  379. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionTarget/mjbizappsorderspromotiontarget.form.component.js.map +1 -0
  380. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionType/mjbizappsorderspromotiontype.form.component.d.ts +10 -0
  381. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionType/mjbizappsorderspromotiontype.form.component.d.ts.map +1 -0
  382. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionType/mjbizappsorderspromotiontype.form.component.js +90 -0
  383. package/dist/lib/generated/Entities/mjBizAppsOrdersPromotionType/mjbizappsorderspromotiontype.form.component.js.map +1 -0
  384. package/dist/lib/generated/Entities/mjBizAppsOrdersRevenueRecognitionType/mjbizappsordersrevenuerecognitiontype.form.component.d.ts +10 -0
  385. package/dist/lib/generated/Entities/mjBizAppsOrdersRevenueRecognitionType/mjbizappsordersrevenuerecognitiontype.form.component.d.ts.map +1 -0
  386. package/dist/lib/generated/Entities/mjBizAppsOrdersRevenueRecognitionType/mjbizappsordersrevenuerecognitiontype.form.component.js +138 -0
  387. package/dist/lib/generated/Entities/mjBizAppsOrdersRevenueRecognitionType/mjbizappsordersrevenuerecognitiontype.form.component.js.map +1 -0
  388. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.d.ts +10 -0
  389. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.d.ts.map +1 -0
  390. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.js +98 -0
  391. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.js.map +1 -0
  392. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.d.ts +10 -0
  393. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.d.ts.map +1 -0
  394. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.js +87 -0
  395. package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.js.map +1 -0
  396. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueAccount/mjbizappsordersstoredvalueaccount.form.component.d.ts +10 -0
  397. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueAccount/mjbizappsordersstoredvalueaccount.form.component.d.ts.map +1 -0
  398. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueAccount/mjbizappsordersstoredvalueaccount.form.component.js +134 -0
  399. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueAccount/mjbizappsordersstoredvalueaccount.form.component.js.map +1 -0
  400. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueTransaction/mjbizappsordersstoredvaluetransaction.form.component.d.ts +10 -0
  401. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueTransaction/mjbizappsordersstoredvaluetransaction.form.component.d.ts.map +1 -0
  402. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueTransaction/mjbizappsordersstoredvaluetransaction.form.component.js +87 -0
  403. package/dist/lib/generated/Entities/mjBizAppsOrdersStoredValueTransaction/mjbizappsordersstoredvaluetransaction.form.component.js.map +1 -0
  404. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscription/mjbizappsorderssubscription.form.component.d.ts +10 -0
  405. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscription/mjbizappsorderssubscription.form.component.d.ts.map +1 -0
  406. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscription/mjbizappsorderssubscription.form.component.js +234 -0
  407. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscription/mjbizappsorderssubscription.form.component.js.map +1 -0
  408. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionEvent/mjbizappsorderssubscriptionevent.form.component.d.ts +10 -0
  409. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionEvent/mjbizappsorderssubscriptionevent.form.component.d.ts.map +1 -0
  410. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionEvent/mjbizappsorderssubscriptionevent.form.component.js +87 -0
  411. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionEvent/mjbizappsorderssubscriptionevent.form.component.js.map +1 -0
  412. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionSequence/mjbizappsorderssubscriptionsequence.form.component.d.ts +10 -0
  413. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionSequence/mjbizappsorderssubscriptionsequence.form.component.d.ts.map +1 -0
  414. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionSequence/mjbizappsorderssubscriptionsequence.form.component.js +63 -0
  415. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionSequence/mjbizappsorderssubscriptionsequence.form.component.js.map +1 -0
  416. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionTerm/mjbizappsorderssubscriptionterm.form.component.d.ts +10 -0
  417. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionTerm/mjbizappsorderssubscriptionterm.form.component.d.ts.map +1 -0
  418. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionTerm/mjbizappsorderssubscriptionterm.form.component.js +122 -0
  419. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionTerm/mjbizappsorderssubscriptionterm.form.component.js.map +1 -0
  420. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionType/mjbizappsorderssubscriptiontype.form.component.d.ts +10 -0
  421. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionType/mjbizappsorderssubscriptiontype.form.component.d.ts.map +1 -0
  422. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionType/mjbizappsorderssubscriptiontype.form.component.js +188 -0
  423. package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionType/mjbizappsorderssubscriptiontype.form.component.js.map +1 -0
  424. package/dist/lib/generated/class-registrations-manifest.d.ts +7 -0
  425. package/dist/lib/generated/class-registrations-manifest.d.ts.map +1 -0
  426. package/dist/lib/generated/class-registrations-manifest.js +7 -0
  427. package/dist/lib/generated/class-registrations-manifest.js.map +1 -0
  428. package/dist/lib/generated/generated-forms.module.d.ts +79 -0
  429. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -0
  430. package/dist/lib/generated/generated-forms.module.js +276 -0
  431. package/dist/lib/generated/generated-forms.module.js.map +1 -0
  432. package/dist/lib/pages/catalog/pricing.page.d.ts +81 -0
  433. package/dist/lib/pages/catalog/pricing.page.d.ts.map +1 -0
  434. package/dist/lib/pages/catalog/pricing.page.js +555 -0
  435. package/dist/lib/pages/catalog/pricing.page.js.map +1 -0
  436. package/dist/lib/pages/catalog/products.page.d.ts +98 -0
  437. package/dist/lib/pages/catalog/products.page.d.ts.map +1 -0
  438. package/dist/lib/pages/catalog/products.page.js +877 -0
  439. package/dist/lib/pages/catalog/products.page.js.map +1 -0
  440. package/dist/lib/pages/orders/fulfillment.page.d.ts +54 -0
  441. package/dist/lib/pages/orders/fulfillment.page.d.ts.map +1 -0
  442. package/dist/lib/pages/orders/fulfillment.page.js +279 -0
  443. package/dist/lib/pages/orders/fulfillment.page.js.map +1 -0
  444. package/dist/lib/pages/orders/order-document.page.d.ts +71 -0
  445. package/dist/lib/pages/orders/order-document.page.d.ts.map +1 -0
  446. package/dist/lib/pages/orders/order-document.page.js +573 -0
  447. package/dist/lib/pages/orders/order-document.page.js.map +1 -0
  448. package/dist/lib/pages/orders/orders-dashboard.page.d.ts +79 -0
  449. package/dist/lib/pages/orders/orders-dashboard.page.d.ts.map +1 -0
  450. package/dist/lib/pages/orders/orders-dashboard.page.js +819 -0
  451. package/dist/lib/pages/orders/orders-dashboard.page.js.map +1 -0
  452. package/dist/lib/pages/orders/orders-list.page.d.ts +21 -0
  453. package/dist/lib/pages/orders/orders-list.page.d.ts.map +1 -0
  454. package/dist/lib/pages/orders/orders-list.page.js +74 -0
  455. package/dist/lib/pages/orders/orders-list.page.js.map +1 -0
  456. package/dist/lib/pages/orders/return.page.d.ts +96 -0
  457. package/dist/lib/pages/orders/return.page.d.ts.map +1 -0
  458. package/dist/lib/pages/orders/return.page.js +549 -0
  459. package/dist/lib/pages/orders/return.page.js.map +1 -0
  460. package/dist/lib/pages/payments/account-credit.page.d.ts +96 -0
  461. package/dist/lib/pages/payments/account-credit.page.d.ts.map +1 -0
  462. package/dist/lib/pages/payments/account-credit.page.js +463 -0
  463. package/dist/lib/pages/payments/account-credit.page.js.map +1 -0
  464. package/dist/lib/pages/payments/payments-dashboard.page.d.ts +61 -0
  465. package/dist/lib/pages/payments/payments-dashboard.page.d.ts.map +1 -0
  466. package/dist/lib/pages/payments/payments-dashboard.page.js +359 -0
  467. package/dist/lib/pages/payments/payments-dashboard.page.js.map +1 -0
  468. package/dist/lib/pages/payments/payments-list.page.d.ts +18 -0
  469. package/dist/lib/pages/payments/payments-list.page.d.ts.map +1 -0
  470. package/dist/lib/pages/payments/payments-list.page.js +71 -0
  471. package/dist/lib/pages/payments/payments-list.page.js.map +1 -0
  472. package/dist/lib/pages/payments/refund.page.d.ts +74 -0
  473. package/dist/lib/pages/payments/refund.page.d.ts.map +1 -0
  474. package/dist/lib/pages/payments/refund.page.js +477 -0
  475. package/dist/lib/pages/payments/refund.page.js.map +1 -0
  476. package/dist/lib/pages/receivables/customer-ar.page.d.ts +102 -0
  477. package/dist/lib/pages/receivables/customer-ar.page.d.ts.map +1 -0
  478. package/dist/lib/pages/receivables/customer-ar.page.js +782 -0
  479. package/dist/lib/pages/receivables/customer-ar.page.js.map +1 -0
  480. package/dist/lib/pages/receivables/overdue.page.d.ts +71 -0
  481. package/dist/lib/pages/receivables/overdue.page.d.ts.map +1 -0
  482. package/dist/lib/pages/receivables/overdue.page.js +338 -0
  483. package/dist/lib/pages/receivables/overdue.page.js.map +1 -0
  484. package/dist/lib/pages/receivables/subscriptions.page.d.ts +115 -0
  485. package/dist/lib/pages/receivables/subscriptions.page.d.ts.map +1 -0
  486. package/dist/lib/pages/receivables/subscriptions.page.js +632 -0
  487. package/dist/lib/pages/receivables/subscriptions.page.js.map +1 -0
  488. package/dist/lib/panels/aging-bar.component.d.ts +59 -0
  489. package/dist/lib/panels/aging-bar.component.d.ts.map +1 -0
  490. package/dist/lib/panels/aging-bar.component.js +180 -0
  491. package/dist/lib/panels/aging-bar.component.js.map +1 -0
  492. package/dist/lib/panels/allocation-grid.component.d.ts +90 -0
  493. package/dist/lib/panels/allocation-grid.component.d.ts.map +1 -0
  494. package/dist/lib/panels/allocation-grid.component.js +425 -0
  495. package/dist/lib/panels/allocation-grid.component.js.map +1 -0
  496. package/dist/lib/panels/allocation-math.d.ts +59 -0
  497. package/dist/lib/panels/allocation-math.d.ts.map +1 -0
  498. package/dist/lib/panels/allocation-math.js +99 -0
  499. package/dist/lib/panels/allocation-math.js.map +1 -0
  500. package/dist/lib/panels/chips.component.d.ts +104 -0
  501. package/dist/lib/panels/chips.component.d.ts.map +1 -0
  502. package/dist/lib/panels/chips.component.js +274 -0
  503. package/dist/lib/panels/chips.component.js.map +1 -0
  504. package/dist/lib/panels/day-bars.component.d.ts +64 -0
  505. package/dist/lib/panels/day-bars.component.d.ts.map +1 -0
  506. package/dist/lib/panels/day-bars.component.js +143 -0
  507. package/dist/lib/panels/day-bars.component.js.map +1 -0
  508. package/dist/lib/panels/decomposition-ladder.component.d.ts +68 -0
  509. package/dist/lib/panels/decomposition-ladder.component.d.ts.map +1 -0
  510. package/dist/lib/panels/decomposition-ladder.component.js +217 -0
  511. package/dist/lib/panels/decomposition-ladder.component.js.map +1 -0
  512. package/dist/lib/panels/index.d.ts +46 -0
  513. package/dist/lib/panels/index.d.ts.map +1 -0
  514. package/dist/lib/panels/index.js +58 -0
  515. package/dist/lib/panels/index.js.map +1 -0
  516. package/dist/lib/panels/journal-entry-preview.component.d.ts +71 -0
  517. package/dist/lib/panels/journal-entry-preview.component.d.ts.map +1 -0
  518. package/dist/lib/panels/journal-entry-preview.component.js +281 -0
  519. package/dist/lib/panels/journal-entry-preview.component.js.map +1 -0
  520. package/dist/lib/panels/money-format.d.ts +182 -0
  521. package/dist/lib/panels/money-format.d.ts.map +1 -0
  522. package/dist/lib/panels/money-format.js +297 -0
  523. package/dist/lib/panels/money-format.js.map +1 -0
  524. package/dist/lib/panels/money-strip.component.d.ts +69 -0
  525. package/dist/lib/panels/money-strip.component.d.ts.map +1 -0
  526. package/dist/lib/panels/money-strip.component.js +233 -0
  527. package/dist/lib/panels/money-strip.component.js.map +1 -0
  528. package/dist/lib/panels/order-stages.d.ts +75 -0
  529. package/dist/lib/panels/order-stages.d.ts.map +1 -0
  530. package/dist/lib/panels/order-stages.js +100 -0
  531. package/dist/lib/panels/order-stages.js.map +1 -0
  532. package/dist/lib/panels/party-orders-overview.component.d.ts +79 -0
  533. package/dist/lib/panels/party-orders-overview.component.d.ts.map +1 -0
  534. package/dist/lib/panels/party-orders-overview.component.js +906 -0
  535. package/dist/lib/panels/party-orders-overview.component.js.map +1 -0
  536. package/dist/lib/panels/stat-tile.component.d.ts +75 -0
  537. package/dist/lib/panels/stat-tile.component.d.ts.map +1 -0
  538. package/dist/lib/panels/stat-tile.component.js +214 -0
  539. package/dist/lib/panels/stat-tile.component.js.map +1 -0
  540. package/dist/lib/panels/status-stepper.component.d.ts +60 -0
  541. package/dist/lib/panels/status-stepper.component.d.ts.map +1 -0
  542. package/dist/lib/panels/status-stepper.component.js +160 -0
  543. package/dist/lib/panels/status-stepper.component.js.map +1 -0
  544. package/dist/lib/panels/summary-strip.component.d.ts +48 -0
  545. package/dist/lib/panels/summary-strip.component.d.ts.map +1 -0
  546. package/dist/lib/panels/summary-strip.component.js +100 -0
  547. package/dist/lib/panels/summary-strip.component.js.map +1 -0
  548. package/dist/lib/panels/worklist-table.component.d.ts +127 -0
  549. package/dist/lib/panels/worklist-table.component.d.ts.map +1 -0
  550. package/dist/lib/panels/worklist-table.component.js +444 -0
  551. package/dist/lib/panels/worklist-table.component.js.map +1 -0
  552. package/dist/lib/sections/orders-sections.component.d.ts +282 -0
  553. package/dist/lib/sections/orders-sections.component.d.ts.map +1 -0
  554. package/dist/lib/sections/orders-sections.component.js +1117 -0
  555. package/dist/lib/sections/orders-sections.component.js.map +1 -0
  556. package/dist/lib/sections/section-nav.model.d.ts +74 -0
  557. package/dist/lib/sections/section-nav.model.d.ts.map +1 -0
  558. package/dist/lib/sections/section-nav.model.js +114 -0
  559. package/dist/lib/sections/section-nav.model.js.map +1 -0
  560. package/dist/lib/sections/section-shell.component.d.ts +70 -0
  561. package/dist/lib/sections/section-shell.component.d.ts.map +1 -0
  562. package/dist/lib/sections/section-shell.component.js +193 -0
  563. package/dist/lib/sections/section-shell.component.js.map +1 -0
  564. package/dist/lib/services/pricing-scheduler.service.d.ts +181 -0
  565. package/dist/lib/services/pricing-scheduler.service.d.ts.map +1 -0
  566. package/dist/lib/services/pricing-scheduler.service.js +292 -0
  567. package/dist/lib/services/pricing-scheduler.service.js.map +1 -0
  568. package/dist/lib/services/save-error.d.ts +24 -0
  569. package/dist/lib/services/save-error.d.ts.map +1 -0
  570. package/dist/lib/services/save-error.js +47 -0
  571. package/dist/lib/services/save-error.js.map +1 -0
  572. package/dist/lib/styles/orders-kit.css +841 -0
  573. package/dist/lib/transfer-pending/workspace-tabs/workspace-card.component.d.ts +55 -0
  574. package/dist/lib/transfer-pending/workspace-tabs/workspace-card.component.d.ts.map +1 -0
  575. package/dist/lib/transfer-pending/workspace-tabs/workspace-card.component.js +243 -0
  576. package/dist/lib/transfer-pending/workspace-tabs/workspace-card.component.js.map +1 -0
  577. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-store.d.ts +47 -0
  578. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-store.d.ts.map +1 -0
  579. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-store.js +112 -0
  580. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-store.js.map +1 -0
  581. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-strip.component.d.ts +36 -0
  582. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-strip.component.d.ts.map +1 -0
  583. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-strip.component.js +179 -0
  584. package/dist/lib/transfer-pending/workspace-tabs/workspace-tab-strip.component.js.map +1 -0
  585. package/dist/lib/transfer-pending/workspace-tabs/workspace-tabs.types.d.ts +36 -0
  586. package/dist/lib/transfer-pending/workspace-tabs/workspace-tabs.types.d.ts.map +1 -0
  587. package/dist/lib/transfer-pending/workspace-tabs/workspace-tabs.types.js +9 -0
  588. package/dist/lib/transfer-pending/workspace-tabs/workspace-tabs.types.js.map +1 -0
  589. package/dist/lib/transfer-pending/workspace-tabs/workspace-tip.directive.d.ts +35 -0
  590. package/dist/lib/transfer-pending/workspace-tabs/workspace-tip.directive.d.ts.map +1 -0
  591. package/dist/lib/transfer-pending/workspace-tabs/workspace-tip.directive.js +124 -0
  592. package/dist/lib/transfer-pending/workspace-tabs/workspace-tip.directive.js.map +1 -0
  593. package/dist/public-api.d.ts +80 -0
  594. package/dist/public-api.d.ts.map +1 -0
  595. package/dist/public-api.js +98 -0
  596. package/dist/public-api.js.map +1 -0
  597. package/package.json +78 -5
@@ -0,0 +1,193 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MJLeftNavComponent, MJLeftNavContentComponent, MJPageBodyComponent, MJPageBodyInteriorComponent, MJPageHeaderComponent, MJPageLayoutComponent, } from '@memberjunction/ng-ui-components';
4
+ import * as i0 from "@angular/core";
5
+ const _c0 = [[["", "meta", ""]], [["", "actions", ""]], "*"];
6
+ const _c1 = ["[meta]", "[actions]", "*"];
7
+ /**
8
+ * `mjo-section-shell` — the frame every Orders section renders inside.
9
+ *
10
+ * One of the four top-level sections (Orders, Payments, Receivables, Catalog)
11
+ * occupies a tab in MJ Explorer; each owns a LEFT rail over its own sub-pages.
12
+ * This component is that frame: MJ's chrome trio plus `<mj-left-nav>`, with the
13
+ * active sub-page projected into the content pane.
14
+ *
15
+ * Composition rather than inheritance, deliberately. Angular does not inherit
16
+ * templates, so a base *class* would have forced four copies of this markup — and
17
+ * four copies of a frame is four places for the frame to drift. Each section is a
18
+ * thin component that hands this one a rail and projects a page.
19
+ *
20
+ * Nothing here is bespoke chrome: the header, body, rail and content pane all come
21
+ * from `@memberjunction/ng-ui-components`. A section that wanted its own gradient
22
+ * header would be a section that no longer looks like MJ.
23
+ *
24
+ * ## Example
25
+ *
26
+ * ```html
27
+ * <mjo-section-shell
28
+ * Title="Orders"
29
+ * Icon="fa-solid fa-file-invoice-dollar"
30
+ * Subtitle="Take an order, then work the ones you have"
31
+ * [NavSections]="NavSections"
32
+ * [ActivePageId]="ActivePageId"
33
+ * [Loading]="IsLoading"
34
+ * [Error]="LoadError"
35
+ * (PageSelected)="OnPageSelected($event)">
36
+ *
37
+ * <div meta><mj-stat-badge [Count]="OpenCount" Label="open" /></div>
38
+ * <div actions><button mjButton variant="primary">New order</button></div>
39
+ *
40
+ * <ng-container #pageHost />
41
+ * </mjo-section-shell>
42
+ * ```
43
+ */
44
+ export class MJOSectionShellComponent {
45
+ /** Section title — the identity of the whole tab, so sub-pages never restate it. */
46
+ Title = '';
47
+ /** Font Awesome class for the title. */
48
+ Icon = '';
49
+ /** One line saying what this section is for. */
50
+ Subtitle = '';
51
+ /** The rail, built by {@link BuildLeftNavSections} from the section's page list. */
52
+ NavSections = [];
53
+ /** Which sub-page is showing. Drives the rail's active state. */
54
+ ActivePageId = null;
55
+ /** Rail width in pixels. 232 matches the mockups. */
56
+ RailWidth = 232;
57
+ /** Shows the content pane's built-in spinner instead of the projected page. */
58
+ Loading = false;
59
+ /** Shows the content pane's built-in error state. Null clears it. */
60
+ Error = null;
61
+ /**
62
+ * A rail item was chosen. Emits the page id.
63
+ *
64
+ * Emitted rather than acted on: this component does not know how the host
65
+ * loads a page, and a shell that routed would stop being reusable outside
66
+ * the one app that taught it how.
67
+ */
68
+ PageSelected = new EventEmitter();
69
+ onItemClicked(item) {
70
+ if (item.disabled)
71
+ return;
72
+ // Re-selecting the current page is a no-op rather than a reload — people
73
+ // click the rail item they are already on surprisingly often.
74
+ if (item.id === this.ActivePageId)
75
+ return;
76
+ this.PageSelected.emit(item.id);
77
+ }
78
+ static ɵfac = function MJOSectionShellComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MJOSectionShellComponent)(); };
79
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJOSectionShellComponent, selectors: [["mjo-section-shell"]], inputs: { Title: "Title", Icon: "Icon", Subtitle: "Subtitle", NavSections: "NavSections", ActivePageId: "ActivePageId", RailWidth: "RailWidth", Loading: "Loading", Error: "Error" }, outputs: { PageSelected: "PageSelected" }, ngContentSelectors: _c1, decls: 11, vars: 12, consts: [[3, "Title", "Icon", "Subtitle"], ["meta", ""], ["actions", ""], ["Direction", "row", 3, "Flex", "Padding"], [3, "ItemClicked", "Sections", "ActiveId", "Width", "MobileTitle"], [3, "Loading", "Error"], [3, "Padding"]], template: function MJOSectionShellComponent_Template(rf, ctx) { if (rf & 1) {
80
+ i0.ɵɵprojectionDef(_c0);
81
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
82
+ i0.ɵɵprojection(3);
83
+ i0.ɵɵelementEnd();
84
+ i0.ɵɵelementStart(4, "div", 2);
85
+ i0.ɵɵprojection(5, 1);
86
+ i0.ɵɵelementEnd()();
87
+ i0.ɵɵelementStart(6, "mj-page-body", 3)(7, "mj-left-nav", 4);
88
+ i0.ɵɵlistener("ItemClicked", function MJOSectionShellComponent_Template_mj_left_nav_ItemClicked_7_listener($event) { return ctx.onItemClicked($event); });
89
+ i0.ɵɵelementEnd();
90
+ i0.ɵɵelementStart(8, "mj-left-nav-content", 5)(9, "mj-page-body-interior", 6);
91
+ i0.ɵɵprojection(10, 2);
92
+ i0.ɵɵelementEnd()()()();
93
+ } if (rf & 2) {
94
+ i0.ɵɵadvance();
95
+ i0.ɵɵproperty("Title", ctx.Title)("Icon", ctx.Icon)("Subtitle", ctx.Subtitle);
96
+ i0.ɵɵadvance(5);
97
+ i0.ɵɵproperty("Flex", true)("Padding", false);
98
+ i0.ɵɵadvance();
99
+ i0.ɵɵproperty("Sections", ctx.NavSections)("ActiveId", ctx.ActivePageId)("Width", ctx.RailWidth)("MobileTitle", ctx.Title);
100
+ i0.ɵɵadvance();
101
+ i0.ɵɵproperty("Loading", ctx.Loading)("Error", ctx.Error);
102
+ i0.ɵɵadvance();
103
+ i0.ɵɵproperty("Padding", false);
104
+ } }, dependencies: [CommonModule,
105
+ MJPageLayoutComponent,
106
+ MJPageHeaderComponent,
107
+ MJPageBodyComponent,
108
+ MJLeftNavComponent,
109
+ MJLeftNavContentComponent,
110
+ MJPageBodyInteriorComponent], styles: ["/* ============================================================================\n BizApps Orders \u2014 component kit\n ============================================================================\n THE CANONICAL SOURCE for this app's own component CSS. Both consumers read\n THIS FILE, so the mockups and the shipped UI cannot drift:\n\n \u00B7 packages/Angular/src/lib/styles/orders-kit.css \u2190 you are here\n \u00B7 mockups/assets/app.css @imports it\n\n Only classes MJ does NOT ship live here. Page chrome, buttons, inputs, chips,\n collapsible panels, overlays and tab navigation all come from\n @memberjunction/ng-ui-components and @memberjunction/ng-base-forms at runtime;\n the mockups shim those separately because they have no Angular to provide them.\n\n Every value resolves through MJ's semantic tokens. No literal colours, with one\n documented exception: the deepest aging step, whose ramp was chosen by running\n the palette validator (see mockups/PROVENANCE.md).\n\n NAMING. These share MJ's `mj-` prefix deliberately, so a reader cannot tell\n whether `mj-money-strip` came from the framework or from us \u2014 which is the\n point when the goal is one visual system. The cost is a possible future\n collision if MJ ships a class of the same name; that would be a mechanical\n rename caught by a build, and it has not happened yet.\n ============================================================================ */\n\n/* ============================================================================\n 16. LAYOUT & TEXT HELPERS\n ============================================================================\n These were authored in `mockups/assets/app.css` \u00A716 and never migrated here,\n so the two consumers DID drift despite the promise at the top of this file:\n the mockups styled them, the shipped app did not. 267 applications of `small`,\n `muted`, `row`, `wrap`, `strong`, `mono`, `tiny`, `spacer` and `sec-label`\n across the pages resolved to nothing \u2014 every caption rendered at full body\n size in full-strength ink and every `.row` collapsed from a flex row to a\n block stack. That single omission is most of the gap between the approved\n mockups and what shipped.\n\n Unprefixed on purpose \u2014 renaming ~267 call sites to `mj-` would buy nothing\n and would break parity with the mockup markup they mirror.\n\n TYPE SCALE \u2014 12px is the floor, and we do NOT want a sub-12px token.\n These arrived as raw px below MJ's smallest step: `small` 11.5px and `tiny`\n 10.5px. Both now resolve to `--mj-text-xs` (12px), MJ's own token, so the app\n shares one scale instead of carrying two private sizes.\n\n The obvious alternative \u2014 asking for a `--mj-text-xxs` \u2014 is the wrong ask, and\n we should not raise it. 12px is the practical legibility floor for secondary\n text (Material and Apple HIG both bottom out at 11\u201312px and reserve it for\n non-essential labels), and `small` here is not decoration: it carries amounts,\n counts and statuses on 120 elements. Shrinking DATA below the floor is exactly\n the case the floor exists for, and a token would institutionalise it across\n every app that adopts it.\n\n Hierarchy that used to come from size now comes from COLOUR (`muted`) and\n WEIGHT (`strong`) \u2014 both of which preserve the distinction at a legible size.\n Size is the bluntest hierarchy tool available and the only one that costs\n legibility, so it is the right one to give up.\n ============================================================================ */\n\n.row { display: flex; align-items: center; gap: var(--mj-space-2); }\n.row-t { display: flex; align-items: flex-start; gap: var(--mj-space-2); }\n.col { display: flex; flex-direction: column; gap: var(--mj-space-2); }\n.wrap { flex-wrap: wrap; }\n.spacer { margin-left: auto; }\n.stack-2 > * + * { margin-top: var(--mj-space-2); }\n.stack-3 > * + * { margin-top: var(--mj-space-3); }\n.stack-4 > * + * { margin-top: var(--mj-space-4); }\n.stack-6 > * + * { margin-top: var(--mj-space-6); }\n.grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--mj-space-4); }\n.grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--mj-space-4); }\n.muted { color: var(--mj-text-muted); }\n/* 12px floor, on MJ's own token \u2014 see the TYPE SCALE note above. `small` and\n `tiny` were 11.5px and 10.5px; both now resolve to --mj-text-xs and the\n small/tiny distinction is carried by COLOUR and WEIGHT instead of size. */\n.small { font-size: var(--mj-text-xs); }\n.tiny { font-size: var(--mj-text-xs); }\n.strong { font-weight: var(--mj-font-semibold); }\n.mono { font-family: var(--mj-font-family-mono); font-size: .92em; }\n.center { text-align: center; }\n.nowrap { white-space: nowrap; }\n.hidden { display: none !important; }\n\n/* Numeric input modifier \u2014 pairs with `mj-input` on the five money fields\n (payment, refund, credit, return qty, allocation). Undefined until now, so\n amounts typed into them left-aligned against right-aligned totals directly\n beside them. Same treatment as `.mj-num`, which is what those totals use. */\n.is-num {\n text-align: right;\n font-variant-numeric: tabular-nums; font-feature-settings: \"tnum\";\n}\n.sec-label {\n font-size: var(--mj-text-xs); font-weight: var(--mj-font-bold); letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted); margin-bottom: var(--mj-space-2);\n}\n\n/* Explanatory notes under a chart, table or panel. 51 of these across 14\n `mjo-<page>__note` hooks were authored with NO rule anywhere, so every one sat\n flush against the element above it \u2014 the note read as a wrapped continuation\n of the legend rather than a separate caption. Prefix-scoped so the unrelated\n `fe-books__note` (which sets its own padding) is untouched. */\n[class*=\"mjo-\"][class*=\"__note\"] { margin-top: var(--mj-space-2); }\n\n/* Two-pane working layout (payment entry, subscriptions, catalog) */\n.mj-split { display: flex; gap: var(--mj-space-4); align-items: flex-start; min-height: 0; }\n.mj-split > .left { flex: 0 0 380px; min-width: 0; }\n.mj-split > .right { flex: 1; min-width: 0; }\n.mj-split--narrow-left > .left { flex: 0 0 300px; }\n\n@media (max-width: 1100px) {\n .mj-split { flex-direction: column; }\n .mj-split > .left, .mj-split > .right { flex: 1 1 auto; width: 100%; }\n .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n@media (max-width: 760px) {\n .grid-2, .grid-3 { grid-template-columns: 1fr; }\n}\n\n/* ============================================================================\n PAGE HEADER \u2014 three stacked rows compressed into two\n ============================================================================\n MJ stacks the identity column title -> subtitle -> meta, so our \"as of 2:31 PM\"\n capsule landed on a third line of its own and the header stood 138px tall on\n every section. The capsule is a timestamp for the subtitle, not a peer of it,\n so it belongs BESIDE the subtitle rather than under it.\n\n Done without restructuring MJ's template, so a future MJ header fix still\n lands for us. Scoped to our shell \u2014 this is our editorial choice about our own\n capsule, not an opinion about how every MJ header should read.\n\n GRID, not flex-wrap. The first attempt used a wrapping flex row with order to\n reseat the capsule; every child claimed its own line and the whole block\n centred, because a full-width flex item forces a line break and the remaining\n items had nothing to sit beside. Grid with EXPLICIT row and column placement\n is deterministic \u2014 and it makes MJ's DOM order (title, subtitle, meta)\n irrelevant, so the capsule renders to the LEFT of a subtitle that precedes it\n in the markup, without touching the template. */\nmjo-section-shell .mj-page-header .mj-page-header-text {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n align-items: center;\n justify-items: start;\n column-gap: var(--mj-space-2);\n row-gap: 2px;\n}\nmjo-section-shell .mj-page-header .mj-page-header-title { grid-row: 1; grid-column: 1 / -1; }\nmjo-section-shell .mj-page-header .mj-page-header-meta { grid-row: 2; grid-column: 1; margin-top: 0; }\nmjo-section-shell .mj-page-header .mj-page-header-subtitle { grid-row: 2; grid-column: 2; margin-top: 0; }\n\n/* Reclaim the rest vertically. space-3 still clears the 40px icon tile with\n room to spare; going tighter starts to crowd it. */\nmjo-section-shell .mj-page-header .mj-page-header-row--primary {\n padding-top: var(--mj-space-3);\n padding-bottom: var(--mj-space-3);\n}\n\n/* ============================================================================\n CARD HOVER \u2014 undo MJ's ungated lift on cards that do nothing\n ============================================================================\n MJ lifts EVERY `.mj-card` on hover \u2014 `transform: translateY(-4px)` plus a\n large shadow \u2014 from `explorer-app/src/lib/styles/_common.scss`. The selector\n there is bare `.mj-card:hover`, with no gate on whether the card is\n interactive, so a read-only dashboard panel rises under the cursor and\n promises a click it will not accept.\n\n This is not MJ's intent. `_shared-patterns.scss`, in the same package, heads\n its own card-hover block \"for clickable cards\" and gates it properly on\n `a.mj-card` / `.mj-card.clickable` \u2014 then weakens it with an ungated\n `.mj-card:hover` of its own. Two competing rules, both ungated in practice.\n Filed upstream; DELETE this block once MJ gates its own.\n\n Scoped to the orders shell so it cannot alter any other app, and written the\n way MJ says it means it: keep the lift where the card is genuinely a link or\n is marked clickable, drop it everywhere else.\n\n The values re-assert MJ's own RESTING state for `.mj-card` so that hovering a\n non-interactive card is a true NO-OP rather than a different effect \u2014 an\n earlier pass set a smaller shadow here, which only traded a card that rises\n for one that flattens. `--mj-shadow-sm` is used rather than `_common.scss`'s\n `var(--shadow)`: that variable is private to explorer-app and does not resolve\n from here, so the declaration was silently dropped. */\nmjo-section-shell .mj-card:not(.clickable):not(a):hover {\n transform: none;\n box-shadow: var(--mj-shadow-sm);\n border-color: transparent;\n}\n\n/* ============================================================================\n 7. MONEY (U7)\n ============================================================================ */\n\n.mj-num, .mj-money {\n font-variant-numeric: tabular-nums; font-feature-settings: \"tnum\";\n text-align: right; white-space: nowrap;\n}\n.mj-money--hero { font-size: 22px; font-weight: var(--mj-font-bold); letter-spacing: -0.01em; }\n.mj-money--lg { font-size: 16px; font-weight: var(--mj-font-semibold); }\n.mj-money--neg { color: var(--mj-status-error-text); }\n.mj-money--credit { color: var(--mj-status-success-text); }\n.mj-money--muted { color: var(--mj-text-muted); }\n\n/* The money strip \u2014 TotalGross / AmountPaid / Balance / status */\n/* Columns follow the CELLS THAT EXIST rather than a fixed three-plus-note.\n Paid is conditional (drafts have none) and the note is optional, so the fixed\n template left one or two empty panels sitting in the strip \u2014 which reads as a\n figure that failed to load rather than a figure that does not apply. */\n.mj-money-strip {\n display: grid; grid-auto-flow: column; grid-auto-columns: 1fr;\n border: 1px solid var(--mj-border-default); border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface); overflow: hidden;\n}\n.mj-money-strip > div {\n padding: var(--mj-space-3) var(--mj-space-4);\n border-right: 1px solid var(--mj-border-default);\n}\n/* The chip row is the STATUS cell specifically \u2014 not whatever happens to be last.\n Keyed on :last-child, this flex rule landed on BALANCE as soon as the status cell\n stopped rendering (a draft has no PaymentStatus), which laid its label and value\n side by side while TOTAL beside it stayed stacked. */\n.mj-money-strip > div:last-child { border-right: none; }\n.mj-money-strip > .mj-money-strip__status {\n display: flex; align-items: center; gap: var(--mj-space-2);\n}\n.mj-money-strip .l {\n font-size: 10px; font-weight: var(--mj-font-bold); letter-spacing: .07em;\n text-transform: uppercase; color: var(--mj-text-muted); display: block; margin-bottom: 2px;\n}\n.mj-money-strip .v { font-size: 17px; font-weight: var(--mj-font-bold); font-variant-numeric: tabular-nums; }\n\n/* Decomposition ladder \u2014 net \u2192 promos \u2192 charges \u2192 tax \u2192 gross */\n.mj-ladder { font-size: 13px; }\n.mj-ladder-row {\n display: flex; align-items: baseline; gap: var(--mj-space-2);\n padding: 6px 0; border-bottom: 1px dashed var(--mj-border-subtle);\n}\n.mj-ladder-row > .label { color: var(--mj-text-secondary); display: flex; align-items: center; gap: 6px; }\n.mj-ladder-row > .amt { margin-left: auto; font-variant-numeric: tabular-nums; font-weight: var(--mj-font-medium); }\n.mj-ladder-row.is-sub { padding-left: var(--mj-space-4); font-size: 12px; color: var(--mj-text-muted); }\n.mj-ladder-row.is-sub > .amt { font-weight: var(--mj-font-normal); }\n.mj-ladder-row.is-discount > .amt { color: var(--mj-status-success-text); }\n.mj-ladder-row.is-total {\n border-bottom: none; border-top: 2px solid var(--mj-border-strong);\n margin-top: var(--mj-space-2); padding-top: var(--mj-space-3);\n}\n.mj-ladder-row.is-total > .label { font-weight: var(--mj-font-semibold); color: var(--mj-text-primary); }\n.mj-ladder-row.is-total > .amt { font-size: 18px; font-weight: var(--mj-font-bold); }\n.mj-ladder-note {\n font-size: 11.5px; color: var(--mj-text-muted); padding: var(--mj-space-2) 0 0;\n display: flex; gap: 6px; align-items: flex-start;\n}\n.mj-ladder-note i { margin-top: 2px; color: var(--mj-status-info); }\n\n/* The \"why\" disclosure \u2014 U2. A bare number is never acceptable. */\n.mj-why {\n border: none; background: none; cursor: pointer; padding: 0 2px;\n color: var(--mj-text-disabled); font-size: 10.5px;\n}\n.mj-why:hover { color: var(--mj-brand-primary); }\n.mj-why-body {\n font-size: 11.5px; color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken); border-left: 2px solid var(--mj-brand-primary);\n border-radius: 0 var(--mj-radius-sm) var(--mj-radius-sm) 0;\n padding: var(--mj-space-2) var(--mj-space-3); margin: var(--mj-space-2) 0;\n}\n.mj-why-body ol, .mj-why-body ul { margin: 4px 0 0; padding-left: var(--mj-space-4); }\n.mj-why-body li { margin: 2px 0; }\n.mj-why-body code {\n font-family: var(--mj-font-family-mono); font-size: 10.5px;\n background: var(--mj-bg-surface); padding: 1px 4px; border-radius: 3px;\n}\n\n/* ============================================================================\n 9. STATUS STEPPER (D9 \u2014 order fixed, forward skip legal)\n ============================================================================ */\n\n.mj-stepper { display: flex; align-items: center; gap: var(--mj-space-1); flex-wrap: wrap; }\n.mj-stepper .step {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 4px 11px; border-radius: var(--mj-radius-full);\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n font-size: 11.5px; font-weight: var(--mj-font-semibold); color: var(--mj-text-muted);\n cursor: pointer;\n}\n.mj-stepper .step i { font-size: 9px; }\n.mj-stepper .step.is-done {\n background: var(--mj-status-success-bg); border-color: color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n color: var(--mj-status-success-text);\n}\n.mj-stepper .step.is-current {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: var(--mj-brand-primary); color: var(--mj-brand-primary);\n}\n.mj-stepper .step.is-blocked { opacity: .45; cursor: not-allowed; }\n.mj-stepper .sep { color: var(--mj-text-disabled); font-size: 9px; }\n\n/* ============================================================================\n 13. STAT TILES (cheap counts only \u2014 U11)\n ============================================================================ */\n\n.mj-stat-grid {\n display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));\n gap: var(--mj-space-4);\n}\n.mj-stat {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); padding: var(--mj-space-4);\n display: flex; flex-direction: column; gap: 2px; min-width: 0;\n}\n.mj-stat .l {\n font-size: 11px; font-weight: var(--mj-font-semibold); letter-spacing: .04em;\n text-transform: uppercase; color: var(--mj-text-muted);\n display: flex; align-items: center; gap: 6px;\n}\n.mj-stat .v {\n font-size: 25px; font-weight: var(--mj-font-bold); font-variant-numeric: tabular-nums;\n letter-spacing: -0.02em; line-height: 1.15;\n}\n.mj-stat .d { font-size: 11.5px; color: var(--mj-text-muted); }\n.mj-stat.is-alert .v { color: var(--mj-status-error-text); }\n.mj-stat .spark { margin-top: var(--mj-space-2); height: 30px; }\n.mj-stat .spark svg { width: 100%; height: 30px; display: block; overflow: visible; }\n\n/* ============================================================================\n 14. AGING BAR\n ============================================================================ */\n\n.mj-aging { display: flex; flex-direction: column; gap: 6px; }\n.mj-aging-bar {\n display: flex; height: 26px; border-radius: var(--mj-radius-sm);\n overflow: hidden; background: var(--mj-bg-surface-sunken);\n}\n.mj-aging-bar > span {\n display: flex; align-items: center; justify-content: center;\n font-size: 10.5px; font-weight: var(--mj-font-semibold); color: #fff;\n min-width: 0; overflow: hidden; white-space: nowrap;\n}\n/* Aging severity ramp \u2014 VALIDATED, do not eyeball-substitute.\n #64748b, #f59e0b, #ef4444, #991b1b passes CVD separation (worst adjacent\n \u0394E 13.9 deutan) and the normal-vision floor (\u0394E 19.8) on BOTH the light and\n dark surfaces. The earlier set used warning-700 next to error-600, which sat\n at \u0394E 2.8 deutan \u2014 the 60-day and 90-day buckets were indistinguishable.\n The neutral first step is deliberate: \"not late\" is not a severity.\n Every segment carries a visible amount and a legend, which is what discharges\n the low-contrast warning on the amber step. See PROVENANCE.md. */\n.mj-aging-bar .b-cur { background: var(--mj-color-neutral-500); }\n.mj-aging-bar .b-30 { background: var(--mj-color-warning-500); }\n.mj-aging-bar .b-60 { background: var(--mj-color-error-500); }\n/* Was the literal #991b1b, because MJ's error ramp stops at -700. Now fully\n tokenised, and the reasoning is worth keeping because the first instinct was\n the wrong one.\n\n Re-measured independently (CIE76 + a Brettel deuteranope simulation) rather\n than trusting the numbers above, whose validator script is NOT in this repo\n and cannot be re-run. Worst adjacent pair, 31-60 vs 61+:\n\n #991b1b (literal) normal dE 26.6 deuteranope dE 23.8\n --mj-color-error-700 normal dE 16.3 deuteranope dE 15.5\n the REJECTED first attempt normal dE 31.9 deuteranope dE 3.1\n\n So the token step is a modest perceptual step DOWN, not a failure: dE 15 is\n far above the ~2.3 just-noticeable difference, and nothing like the 3.1 that\n made the original attempt genuinely unreadable. And the bar is never the sole\n carrier \u2014 every segment shows its amount and the legend lists all four \u2014 so\n WCAG 1.4.1 holds either way.\n\n The token wins on a functional point the literal cannot match: a hardcoded\n hex does not follow dark mode or a white-label rebrand, while every other\n step of this ramp does. Trading ~10 dE of headroom for a ramp that themes\n correctly is the right trade. */\n.mj-aging-bar .b-90 { background: var(--mj-color-error-700); }\n[data-theme=\"dark\"] .mj-aging-bar .b-cur { background: var(--mj-color-neutral-500); }\n.mj-aging-bar > span.is-empty { display: none; }\n/* row-gap is explicit: the legend wraps to two rows in a narrow column, and a\n single `gap` shorthand left the wrapped rows tighter than the note beneath\n them, so the four buckets read as two unrelated pairs. */\n.mj-aging-legend { display: flex; gap: var(--mj-space-2) var(--mj-space-4); font-size: 11.5px; flex-wrap: wrap; }\n.mj-aging-legend > span { display: flex; align-items: center; gap: 6px; color: var(--mj-text-secondary); }\n.mj-aging-legend i { width: 9px; height: 9px; border-radius: 2px; display: inline-block; }\n\n/* ============================================================================\n 15. TIMELINE (subscription terms)\n ============================================================================ */\n\n.mj-timeline { position: relative; padding: var(--mj-space-4) 0 var(--mj-space-2); }\n.mj-timeline-track {\n position: relative; height: 34px;\n background: var(--mj-bg-surface-sunken); border-radius: var(--mj-radius-sm);\n}\n.mj-timeline-term {\n position: absolute; top: 4px; bottom: 4px; border-radius: var(--mj-radius-sm);\n display: flex; align-items: center; padding: 0 var(--mj-space-2);\n font-size: 11px; font-weight: var(--mj-font-semibold); color: #fff;\n overflow: hidden; white-space: nowrap;\n}\n.mj-timeline-term.is-past { background: var(--mj-color-neutral-400); }\n.mj-timeline-term.is-active { background: var(--mj-brand-primary); }\n.mj-timeline-term.is-future { background: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-bg-surface)); color: var(--mj-text-primary); }\n.mj-timeline-now {\n position: absolute; top: -6px; bottom: -6px; width: 2px;\n background: var(--mj-status-error);\n}\n.mj-timeline-now::after {\n content: \"today\"; position: absolute; top: -16px; left: -14px;\n font-size: 9.5px; font-weight: var(--mj-font-bold); color: var(--mj-status-error-text);\n}\n.mj-timeline-scale {\n display: flex; justify-content: space-between; font-size: 10.5px;\n color: var(--mj-text-muted); margin-top: 6px;\n}\n\n/* ============================================================================\n 17. KEYBOARD HINT STRIP (U20 \u2014 shortcuts are visible, not hidden)\n ============================================================================ */\n\n.mj-keys {\n display: flex; align-items: center; gap: var(--mj-space-4); flex-wrap: wrap;\n font-size: 11.5px; color: var(--mj-text-muted);\n}\n.mj-keys > span { display: inline-flex; align-items: center; gap: 5px; }\nkbd {\n font-family: var(--mj-font-family); font-size: 10.5px; font-weight: var(--mj-font-semibold);\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-strong);\n border-bottom-width: 2px; border-radius: var(--mj-radius-sm);\n padding: 1px 5px; color: var(--mj-text-secondary); line-height: 1.5;\n}\n\n/* ============================================================================\n 19. TYPE-AHEAD (fast entry)\n ============================================================================ */\n\n/*\n * The wrapper needs a STACKING CONTEXT, not just a positioning one.\n *\n * `position: relative` alone anchors the list under the input but leaves it in the\n * parent's stacking order, so later siblings paint on top of it: the customer\n * results rendered in the right place and were covered by the next section.\n * `elementFromPoint` at the centre of the first option returned the section, not\n * the option \u2014 the list was visible to the DOM and invisible to a person.\n */\n.mj-typeahead { position: relative; z-index: 20; }\n.mj-typeahead-list {\n position: absolute; top: calc(100% + 4px); left: 0; right: 0;\n z-index: var(--mj-z-popover); max-height: 320px; overflow: auto;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); box-shadow: var(--mj-shadow-lg);\n display: none;\n}\n.mj-typeahead-list.is-open { display: block; }\n.mj-typeahead-item {\n display: flex; align-items: center; gap: var(--mj-space-3);\n padding: var(--mj-space-2) var(--mj-space-3); cursor: pointer;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.mj-typeahead-item:last-child { border-bottom: none; }\n.mj-typeahead-item:hover, .mj-typeahead-item.is-cursor { background: var(--mj-bg-surface-hover); }\n.mj-typeahead-item .name { font-size: 13px; font-weight: var(--mj-font-medium); }\n.mj-typeahead-item .sub { font-size: 11.5px; color: var(--mj-text-muted); }\n.mj-typeahead-item .end { margin-left: auto; text-align: right; }\n.mj-typeahead-group {\n padding: 5px var(--mj-space-3); font-size: 10px; font-weight: var(--mj-font-bold);\n letter-spacing: .07em; text-transform: uppercase; color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card); border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n/* ============================================================================\n 20. LINE ROW CARD (fast entry)\n ============================================================================ */\n\n.mj-linecard {\n border: 1px solid var(--mj-border-default); border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface); padding: var(--mj-space-3);\n}\n.mj-linecard + .mj-linecard { margin-top: var(--mj-space-2); }\n.mj-linecard-top { display: flex; align-items: flex-start; gap: var(--mj-space-3); }\n.mj-linecard-top .id { flex: 1; min-width: 0; }\n.mj-linecard-top .nm { font-size: 13.5px; font-weight: var(--mj-font-semibold); }\n.mj-linecard-top .mt { font-size: 11.5px; color: var(--mj-text-muted); margin-top: 1px; }\n.mj-linecard-top .qty { flex: none; }\n.mj-linecard-top .price { flex: none; width: 118px; text-align: right; }\n.mj-linecard-top .tot { flex: none; width: 104px; text-align: right; font-variant-numeric: tabular-nums; font-weight: var(--mj-font-semibold); font-size: 14px; }\n.mj-linecard-conseq { display: flex; gap: 6px; flex-wrap: wrap; margin-top: var(--mj-space-2); }\n\n/* ============================================================================\n 21. DOCUMENT (the bill) \u2014 U6\n ============================================================================ */\n\n.mj-doc {\n background: var(--mj-bg-surface); color: var(--mj-text-primary);\n max-width: 860px; margin: 0 auto; padding: 56px 60px;\n border: 1px solid var(--mj-border-default); border-radius: var(--mj-radius-md);\n}\n.mj-doc-head { display: flex; align-items: flex-start; gap: var(--mj-space-6); margin-bottom: var(--mj-space-10); }\n.mj-doc-head .issuer { flex: 1; }\n.mj-doc-head .issuer .co { font-size: 17px; font-weight: var(--mj-font-bold); display: flex; align-items: center; gap: 8px; }\n.mj-doc-head .issuer .co i { color: var(--mj-brand-primary); }\n.mj-doc-head .issuer .addr { font-size: 12px; color: var(--mj-text-muted); margin-top: 6px; line-height: 1.6; }\n.mj-doc-head .docmeta { text-align: right; flex: none; }\n.mj-doc-head .docmeta .kind {\n font-size: 11px; font-weight: var(--mj-font-bold); letter-spacing: .12em;\n text-transform: uppercase; color: var(--mj-text-muted);\n}\n.mj-doc-head .docmeta .num { font-size: 22px; font-weight: var(--mj-font-bold); letter-spacing: -0.01em; }\n.mj-doc-meta-grid {\n display: grid; grid-template-columns: auto auto; gap: 3px var(--mj-space-4);\n font-size: 12px; margin-top: var(--mj-space-3); text-align: right;\n}\n.mj-doc-meta-grid dt { color: var(--mj-text-muted); }\n.mj-doc-meta-grid dd { margin: 0; font-variant-numeric: tabular-nums; font-weight: var(--mj-font-medium); }\n.mj-doc-parties { display: grid; grid-template-columns: 1fr 1fr; gap: var(--mj-space-8); margin-bottom: var(--mj-space-8); }\n.mj-doc-parties .lbl {\n font-size: 10px; font-weight: var(--mj-font-bold); letter-spacing: .1em;\n text-transform: uppercase; color: var(--mj-text-muted); margin-bottom: 6px;\n}\n.mj-doc-parties .who { font-size: 13px; line-height: 1.7; }\n.mj-doc-parties .who .nm { font-weight: var(--mj-font-semibold); }\n.mj-doc table.mj-table thead th { background: transparent; border-bottom: 2px solid var(--mj-text-primary); }\n.mj-doc-totals { display: flex; justify-content: flex-end; margin-top: var(--mj-space-5); }\n.mj-doc-totals .box { width: min(340px, 100%); }\n.mj-doc-due {\n display: flex; align-items: baseline; justify-content: space-between;\n margin-top: var(--mj-space-3); padding-top: var(--mj-space-3);\n border-top: 2px solid var(--mj-text-primary);\n}\n.mj-doc-due .l { font-size: 13px; font-weight: var(--mj-font-bold); text-transform: uppercase; letter-spacing: .06em; }\n.mj-doc-due .v { font-size: 24px; font-weight: var(--mj-font-bold); font-variant-numeric: tabular-nums; }\n.mj-doc-foot {\n margin-top: var(--mj-space-10); padding-top: var(--mj-space-5);\n border-top: 1px solid var(--mj-border-default);\n font-size: 11.5px; color: var(--mj-text-muted); line-height: 1.7;\n}\n/*\n * The paid/void stamp.\n *\n * ANCHORED TO THE BOTTOM, not the top. Top-right is where the invoice number and\n * the date block already live, and the head's height varies with how many meta\n * rows a document has \u2014 so no fixed `top` clears it in every render. It sat on\n * top of the order number until a browser screenshot caught it. The footer band\n * is a single line of small print on the left, leaving the right reliably empty.\n */\n.mj-doc-stamp {\n position: absolute; bottom: 96px; right: 64px; transform: rotate(-14deg);\n border: 3px solid var(--mj-status-success); color: var(--mj-status-success-text);\n border-radius: var(--mj-radius-md); padding: 6px 18px;\n font-size: 22px; font-weight: var(--mj-font-bold); letter-spacing: .1em;\n text-transform: uppercase; opacity: .85; pointer-events: none;\n}\n\n@media print {\n .mj-topnav, .mj-rail, .mj-page-header, .mj-keys, .no-print { display: none !important; }\n .mj-app, .mj-page-layout, .mj-page-body { height: auto; overflow: visible; display: block; }\n .mj-page-body { padding: 0; }\n .mj-doc { border: none; max-width: none; padding: 0; }\n body { background: #fff; }\n}\n\n\n/* ============================================================================\n CHROME THIS APP MUST SHIP ITSELF\n ============================================================================\n These were shimmed in mockups/assets/app.css on the assumption that MJ supplies\n them at runtime, the way it supplies .mj-card, .mj-btn and .mj-input. It does\n not. Loading the real app proved it: chips, banners, tabs, panels, the table\n frame and the slide-in were all completely unstyled in MJ Explorer while\n looking perfect in the mockups, because the mockups were reading the shim.\n\n Anything a component of ours renders has to live HERE, in the stylesheet the\n package ships, or it exists only in the mockups. The rule to apply when adding\n a class: if our markup writes it, it belongs in this file. Only classes MJ\n genuinely owns (.mj-page-layout, .mj-btn, .mj-input, .mj-card) stay as\n mockup-side shims.\n\n Names keep the mj- prefix deliberately \u2014 a reader should not have to care\n whether a class came from the framework or from us.\n ============================================================================ */\n\n.mj-iconbtn {\n border: none; background: none; cursor: pointer;\n color: var(--mj-text-secondary); font-size: 14px;\n padding: var(--mj-space-2); border-radius: var(--mj-radius-md);\n line-height: 1; display: inline-flex; align-items: center; justify-content: center;\n}\n.mj-iconbtn:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.mj-avatar {\n width: 30px; height: 30px; border-radius: var(--mj-radius-full);\n background: var(--mj-brand-primary); color: var(--mj-brand-on-primary);\n display: flex; align-items: center; justify-content: center;\n font-size: 11.5px; font-weight: var(--mj-font-semibold); flex: none;\n}\n/* `.mj-input` is deliberately NOT defined here \u2014 MJ owns it.\n MJ ships it globally in ui-components/input/input.scss (`.mj-input, .mj-textarea`),\n and this file is now global too (the section shell loads it with\n ViewEncapsulation.None), so redefining it meant two global rules of equal\n specificity fighting, with the winner decided by stylesheet LOAD ORDER \u2014 MJ's\n happens to win today, which is luck, not design. It also differed from MJ's\n (13px/6-10px/radius-md vs 14px/8-12px/radius-sm/min-height 38px), so whichever\n won changed how every input in the app looked.\n\n `.mj-select` stays: MJ styles `.mj-input, .mj-textarea` but ships no select rule,\n so this is ours to own. Values match MJ's input so the two sit level. */\n.mj-select {\n font-family: inherit; font-size: var(--mj-text-sm); color: var(--mj-text-primary);\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm); padding: 8px 12px; width: 100%;\n min-height: 38px;\n}\n.mj-select:focus {\n outline: none; border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n}\n.mj-field { display: block; margin-bottom: var(--mj-space-3); }\n.mj-field > label {\n display: block; font-size: 11px; font-weight: var(--mj-font-semibold);\n letter-spacing: .04em; text-transform: uppercase;\n color: var(--mj-text-muted); margin-bottom: 5px;\n}\n.mj-field .hint { font-size: 11.5px; color: var(--mj-text-muted); margin-top: 4px; }\n.mj-stated {\n display: flex; align-items: baseline; gap: var(--mj-space-2);\n padding: 6px 0;\n}\n.mj-stated .value { font-size: 13px; font-weight: var(--mj-font-medium); }\n.mj-stated .from {\n font-size: 11px; color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken); border-radius: var(--mj-radius-sm);\n padding: 1px 6px;\n}\n.mj-stepper-num {\n display: inline-flex; align-items: center; border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md); overflow: hidden; background: var(--mj-bg-surface);\n}\n.mj-stepper-num button {\n border: none; background: none; cursor: pointer; color: var(--mj-text-secondary);\n width: 26px; height: 28px; font-size: 11px;\n}\n.mj-stepper-num button:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.mj-stepper-num input {\n border: none; outline: none; background: none; width: 46px; text-align: center;\n font-family: inherit; font-size: 13px; font-variant-numeric: tabular-nums; color: inherit;\n}\n.mj-chip {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 2px 9px; border-radius: var(--mj-radius-full);\n font-size: 11.5px; font-weight: var(--mj-font-semibold);\n background: var(--mj-status-neutral-bg); color: var(--mj-status-neutral-text);\n white-space: nowrap;\n}\n.mj-chip i { font-size: 10px; }\n.mj-filter-chip {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 5px 11px; border-radius: var(--mj-radius-full);\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n font-family: inherit; font-size: 12.5px; font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary); cursor: pointer; white-space: nowrap;\n}\n.mj-filter-chip:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.mj-filter-chip .count {\n font-variant-numeric: tabular-nums; font-size: 11px;\n background: var(--mj-bg-surface-sunken); border-radius: var(--mj-radius-full); padding: 0 6px;\n}\n.mj-filter-chip.is-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, transparent);\n color: var(--mj-brand-primary); font-weight: var(--mj-font-semibold);\n}\n.mj-filter-chip.is-active .count { background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent); }\n.mj-consequence {\n display: inline-flex; align-items: center; gap: 6px;\n font-size: 11.5px; color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm); padding: 3px 8px;\n}\n.mj-consequence i { font-size: 10px; color: var(--mj-text-muted); }\n.mj-consequence.is-sub i { color: var(--mj-color-violet-500); }\n.mj-consequence.is-event i { color: var(--mj-status-info); }\n.mj-consequence.is-defer i { color: var(--mj-status-warning); }\n.mj-card-pad { padding: var(--mj-space-4); }\n.mj-card-head {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.mj-card-head h3 { font-size: 13px; letter-spacing: .01em; }\n.mj-card-head i { color: var(--mj-text-muted); font-size: 12px; }\n.mj-card-head .right { margin-left: auto; display: flex; gap: var(--mj-space-2); align-items: center; }\n.mj-panel {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); margin-bottom: var(--mj-space-4);\n}\n.mj-panel > summary {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4); cursor: pointer;\n font-size: 13px; font-weight: var(--mj-font-semibold);\n list-style: none;\n}\n.mj-panel > summary::-webkit-details-marker { display: none; }\n.mj-panel > summary::before {\n content: \"\\f105\"; font-family: \"Font Awesome 6 Free\"; font-weight: 900;\n font-size: 11px; color: var(--mj-text-muted); width: 10px;\n transition: transform .14s ease;\n}\n.mj-panel[open] > summary::before { transform: rotate(90deg); }\n.mj-panel > summary > i:first-of-type { color: var(--mj-text-muted); font-size: 12px; }\n.mj-panel > summary .right { margin-left: auto; display: flex; gap: var(--mj-space-2); align-items: center; font-weight: var(--mj-font-normal); }\n.mj-panel-body { padding: 0 var(--mj-space-4) var(--mj-space-4); }\n.mj-panel-body.no-pad { padding: 0; }\n/* MJ ALREADY OWNS `.mj-table`. It is defined in ng-explorer-app's shared patterns, which\n Explorer loads before this kit \u2014 so `width`, `border-collapse` and the base type were being\n restated here purely to override MJ with the same thing, except in hardcoded pixels. Those\n declarations are gone; what stays below is only what MJ's table does NOT do.\n\n The one base property worth keeping is the SIZE: MJ's `--mj-text-sm` is 14px, and a dense\n worklist reads better a step down. That is a deliberate deviation, so it is written as a token\n rather than as 13px. */\n.mj-table { font-size: var(--mj-text-xs); }\n\n/* Additive, not a restatement: MJ's header has no sticky behaviour, and a worklist that scrolls\n inside a card needs one \u2014 losing the column names on row 20 is what makes a long queue\n unreadable. */\n.mj-table thead th {\n text-align: left; font-size: var(--mj-text-xs); font-weight: var(--mj-font-bold);\n letter-spacing: .06em; text-transform: uppercase; color: var(--mj-text-muted);\n padding: var(--mj-space-2) var(--mj-space-3);\n border-bottom: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface); position: sticky; top: 0; z-index: 1;\n white-space: nowrap;\n}\n.mj-table thead th.num, .mj-table td.num { text-align: right; font-variant-numeric: tabular-nums; }\n.mj-table thead th .sortable { cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }\n.mj-table thead th .sortable i { font-size: var(--mj-text-xs); opacity: .5; }\n.mj-table tbody td {\n padding: var(--mj-space-3); border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n/* Scoped to `.is-clickable`, which the worklist applies only when something is\n actually listening (`[class.is-clickable]=\"RowClicked.observed\"`). Unscoped,\n EVERY table highlighted on hover \u2014 including read-only ones \u2014 which is a\n promise of interactivity the row cannot keep. A highlight is the same\n affordance as a lift: offer it only where a click does something. */\n.mj-table tbody tr.is-clickable:hover { background: var(--mj-bg-surface-hover); }\n.mj-table tbody tr.is-selected { background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent); }\n.mj-table tbody tr.is-clickable { cursor: pointer; }\n.mj-table tbody tr.is-total { background: var(--mj-bg-surface-card); font-weight: var(--mj-font-semibold); }\n.mj-table tbody tr.is-total td { border-bottom: none; border-top: 2px solid var(--mj-border-strong); }\n.mj-table .primary { font-weight: var(--mj-font-semibold); }\n.mj-table .secondary { font-size: var(--mj-text-xs); color: var(--mj-text-muted); }\n.mj-table-wrap {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); overflow: auto;\n}\n/* The hand-rolled .mj-tabs / .mj-tab block lived here and is gone. The order\n editor's five tabs now use MJ's own <mj-tab-nav>, which is the shipped,\n tokenized component for exactly this job \u2014 a pane switcher over one record.\n\n Not accounting's mj-workspace-card, despite the surface similarity: that models\n OPEN DOCUMENTS, so its strip closes, reorders and adds tabs and carries a New\n button \u2014 affordances that would be lies over five fixed panes of one order. It\n also lives in accounting's transfer-pending/ folder, code explicitly parked for\n another home, so depending on it would have bought a migration later.\n\n The old red dot became an error-variant badge in the same slot the count uses.\n A bare dot was a signifier with no meaning attached; only its aria-label said\n what it meant, so a sighted user saw a dot and guessed. */\n\n.mj-slide-in {\n position: fixed; top: 0; right: 0; bottom: 0; z-index: var(--mj-z-modal);\n width: min(560px, 100vw); display: flex; flex-direction: column;\n background: var(--mj-bg-surface); border-left: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-xl);\n transform: translateX(100%); transition: transform .18s ease;\n}\n.mj-slide-in.is-open { transform: translateX(0); }\n.mj-empty {\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n gap: var(--mj-space-2); padding: var(--mj-space-12) var(--mj-space-6);\n color: var(--mj-text-muted); text-align: center;\n}\n.mj-empty i { font-size: 26px; color: var(--mj-text-disabled); }\n.mj-empty .t { font-size: 14px; font-weight: var(--mj-font-semibold); color: var(--mj-text-secondary); }\n\n/* Status variants for the chrome above. */\n.mj-chip--success { background: var(--mj-status-success-bg); color: var(--mj-status-success-text); }\n.mj-chip--warning { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.mj-chip--error { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.mj-chip--info { background: var(--mj-status-info-bg); color: var(--mj-status-info-text); }\n.mj-chip--violet { background: var(--mj-status-violet-bg); color: var(--mj-status-violet-text); }\n.mj-chip--brand { background: color-mix(in srgb, var(--mj-brand-primary) 13%, transparent); color: var(--mj-brand-primary); }\n.mj-chip--outline { background: transparent; border: 1px solid var(--mj-border-default); color: var(--mj-text-secondary); font-weight: var(--mj-font-medium); }\n.mj-table--compact tbody td { padding: 7px var(--mj-space-3); }\n.mj-table--lines tbody td { padding: var(--mj-space-2) var(--mj-space-3); }\n.mj-slide-in-head {\n display: flex; align-items: center; gap: var(--mj-space-3); flex: none;\n padding: var(--mj-space-4) var(--mj-space-5);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.mj-slide-in-head h2 { font-size: 15px; }\n.mj-slide-in-head .right { margin-left: auto; display: flex; gap: var(--mj-space-1); align-items: center; }\n.mj-slide-in-body { flex: 1; min-height: 0; overflow: auto; padding: var(--mj-space-5); }\n.mj-slide-in-foot {\n flex: none; display: flex; gap: var(--mj-space-2); align-items: center;\n padding: var(--mj-space-3) var(--mj-space-5);\n border-top: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card);\n}\n\n/*\n * The table filter box.\n *\n * NAMED mjo-, NOT mj-. MJ defines its own `.mj-search` for Explorer's global\n * search bar in the top chrome \u2014 a different control with different metrics \u2014 and\n * ours inherited it, which is why the filter box rendered as a bare underline\n * instead of a bordered field. Sharing the framework's prefix is right for\n * classes MJ does not define; it is actively wrong for one it does.\n */\n.mjo-search {\n display: flex; align-items: center; gap: var(--mj-space-2);\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md); padding: 6px 10px; min-width: 260px;\n}\n.mjo-search i { color: var(--mj-text-muted); font-size: 12px; }\n.mjo-search input {\n border: none; outline: none; background: none; font-family: inherit;\n font-size: 13px; color: inherit; width: 100%;\n}\n\n/* \u2500\u2500 A standing explanation, not an alert \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n `mj-alert` is for something that HAPPENED or needs attention. Screens that permanently\n explain how they work were using it, which put a full-width coloured card above the work\n on every visit \u2014 read once, then scrolled past forever. This is the quiet form: same\n information, one line's worth of weight, no dismissal to manage. */\n.mjo-note {\n display: flex;\n align-items: baseline;\n gap: var(--mj-space-2);\n margin: 0 0 var(--mj-space-3);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-xs);\n line-height: var(--mj-leading-relaxed, 1.6);\n}\n\n.mjo-note > i {\n color: var(--mj-text-tertiary);\n flex: 0 0 auto;\n}\n"], encapsulation: 2 });
111
+ }
112
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJOSectionShellComponent, [{
113
+ type: Component,
114
+ args: [{ selector: 'mjo-section-shell', standalone: true, encapsulation: ViewEncapsulation.None, imports: [
115
+ CommonModule,
116
+ MJPageLayoutComponent,
117
+ MJPageHeaderComponent,
118
+ MJPageBodyComponent,
119
+ MJLeftNavComponent,
120
+ MJLeftNavContentComponent,
121
+ MJPageBodyInteriorComponent,
122
+ ], template: `
123
+ <mj-page-layout>
124
+ <mj-page-header [Title]="Title" [Icon]="Icon" [Subtitle]="Subtitle">
125
+ <div meta><ng-content select="[meta]"></ng-content></div>
126
+ <div actions><ng-content select="[actions]"></ng-content></div>
127
+ <!--
128
+ NO toolbar slot, deliberately. MJ hides its toolbar row when empty
129
+ (the :empty rule on mj-page-header-row--toolbar), but a wrapper div
130
+ carrying the toolbar attribute is itself a child node, so the row
131
+ stopped counting as empty and rendered its border plus 28px of padding
132
+ on every section — a measured 29px of dead space under the header, on
133
+ all four, forever. No section projects a toolbar, so the slot only ever
134
+ cost height.
135
+
136
+ A section that needs one should add the wrapper back AND guard it with
137
+ an @if, or the same dead row returns for everyone.
138
+ -->
139
+ </mj-page-header>
140
+
141
+ <mj-page-body [Flex]="true" [Padding]="false" Direction="row">
142
+ <mj-left-nav
143
+ [Sections]="NavSections"
144
+ [ActiveId]="ActivePageId"
145
+ [Width]="RailWidth"
146
+ [MobileTitle]="Title"
147
+ (ItemClicked)="onItemClicked($event)" />
148
+
149
+ <!--
150
+ The interior is what makes the sub-pages SCROLL, and it is required.
151
+
152
+ mj-left-nav-content deliberately forces every DIRECT child to
153
+ flex + height:100% + overflow:hidden via a ::ng-deep child rule, and that
154
+ rule outranks a sub-page's own :host overflow:auto. Projected straight in,
155
+ every page became a fixed-height box with its overflow hidden: anything past
156
+ the fold — the lower card headings on Catalog and Receivables — was clipped
157
+ and unreachable, because a mouse wheel cannot scroll overflow:hidden.
158
+
159
+ mj-page-body-interior is MJ's own answer to exactly this: it is named in
160
+ that rule's :not() exemption list and self-declares flex:1 1 auto plus
161
+ overflow-y:auto. Wrapping here restores scrolling for every section at once
162
+ and keeps the sub-pages as grandchildren, so their own :host layout applies
163
+ as written. Padding stays off because each page supplies its own.
164
+ -->
165
+ <mj-left-nav-content [Loading]="Loading" [Error]="Error">
166
+ <mj-page-body-interior [Padding]="false">
167
+ <ng-content></ng-content>
168
+ </mj-page-body-interior>
169
+ </mj-left-nav-content>
170
+ </mj-page-body>
171
+ </mj-page-layout>
172
+ `, styles: ["/* ============================================================================\n BizApps Orders \u2014 component kit\n ============================================================================\n THE CANONICAL SOURCE for this app's own component CSS. Both consumers read\n THIS FILE, so the mockups and the shipped UI cannot drift:\n\n \u00B7 packages/Angular/src/lib/styles/orders-kit.css \u2190 you are here\n \u00B7 mockups/assets/app.css @imports it\n\n Only classes MJ does NOT ship live here. Page chrome, buttons, inputs, chips,\n collapsible panels, overlays and tab navigation all come from\n @memberjunction/ng-ui-components and @memberjunction/ng-base-forms at runtime;\n the mockups shim those separately because they have no Angular to provide them.\n\n Every value resolves through MJ's semantic tokens. No literal colours, with one\n documented exception: the deepest aging step, whose ramp was chosen by running\n the palette validator (see mockups/PROVENANCE.md).\n\n NAMING. These share MJ's `mj-` prefix deliberately, so a reader cannot tell\n whether `mj-money-strip` came from the framework or from us \u2014 which is the\n point when the goal is one visual system. The cost is a possible future\n collision if MJ ships a class of the same name; that would be a mechanical\n rename caught by a build, and it has not happened yet.\n ============================================================================ */\n\n/* ============================================================================\n 16. LAYOUT & TEXT HELPERS\n ============================================================================\n These were authored in `mockups/assets/app.css` \u00A716 and never migrated here,\n so the two consumers DID drift despite the promise at the top of this file:\n the mockups styled them, the shipped app did not. 267 applications of `small`,\n `muted`, `row`, `wrap`, `strong`, `mono`, `tiny`, `spacer` and `sec-label`\n across the pages resolved to nothing \u2014 every caption rendered at full body\n size in full-strength ink and every `.row` collapsed from a flex row to a\n block stack. That single omission is most of the gap between the approved\n mockups and what shipped.\n\n Unprefixed on purpose \u2014 renaming ~267 call sites to `mj-` would buy nothing\n and would break parity with the mockup markup they mirror.\n\n TYPE SCALE \u2014 12px is the floor, and we do NOT want a sub-12px token.\n These arrived as raw px below MJ's smallest step: `small` 11.5px and `tiny`\n 10.5px. Both now resolve to `--mj-text-xs` (12px), MJ's own token, so the app\n shares one scale instead of carrying two private sizes.\n\n The obvious alternative \u2014 asking for a `--mj-text-xxs` \u2014 is the wrong ask, and\n we should not raise it. 12px is the practical legibility floor for secondary\n text (Material and Apple HIG both bottom out at 11\u201312px and reserve it for\n non-essential labels), and `small` here is not decoration: it carries amounts,\n counts and statuses on 120 elements. Shrinking DATA below the floor is exactly\n the case the floor exists for, and a token would institutionalise it across\n every app that adopts it.\n\n Hierarchy that used to come from size now comes from COLOUR (`muted`) and\n WEIGHT (`strong`) \u2014 both of which preserve the distinction at a legible size.\n Size is the bluntest hierarchy tool available and the only one that costs\n legibility, so it is the right one to give up.\n ============================================================================ */\n\n.row { display: flex; align-items: center; gap: var(--mj-space-2); }\n.row-t { display: flex; align-items: flex-start; gap: var(--mj-space-2); }\n.col { display: flex; flex-direction: column; gap: var(--mj-space-2); }\n.wrap { flex-wrap: wrap; }\n.spacer { margin-left: auto; }\n.stack-2 > * + * { margin-top: var(--mj-space-2); }\n.stack-3 > * + * { margin-top: var(--mj-space-3); }\n.stack-4 > * + * { margin-top: var(--mj-space-4); }\n.stack-6 > * + * { margin-top: var(--mj-space-6); }\n.grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--mj-space-4); }\n.grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--mj-space-4); }\n.muted { color: var(--mj-text-muted); }\n/* 12px floor, on MJ's own token \u2014 see the TYPE SCALE note above. `small` and\n `tiny` were 11.5px and 10.5px; both now resolve to --mj-text-xs and the\n small/tiny distinction is carried by COLOUR and WEIGHT instead of size. */\n.small { font-size: var(--mj-text-xs); }\n.tiny { font-size: var(--mj-text-xs); }\n.strong { font-weight: var(--mj-font-semibold); }\n.mono { font-family: var(--mj-font-family-mono); font-size: .92em; }\n.center { text-align: center; }\n.nowrap { white-space: nowrap; }\n.hidden { display: none !important; }\n\n/* Numeric input modifier \u2014 pairs with `mj-input` on the five money fields\n (payment, refund, credit, return qty, allocation). Undefined until now, so\n amounts typed into them left-aligned against right-aligned totals directly\n beside them. Same treatment as `.mj-num`, which is what those totals use. */\n.is-num {\n text-align: right;\n font-variant-numeric: tabular-nums; font-feature-settings: \"tnum\";\n}\n.sec-label {\n font-size: var(--mj-text-xs); font-weight: var(--mj-font-bold); letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted); margin-bottom: var(--mj-space-2);\n}\n\n/* Explanatory notes under a chart, table or panel. 51 of these across 14\n `mjo-<page>__note` hooks were authored with NO rule anywhere, so every one sat\n flush against the element above it \u2014 the note read as a wrapped continuation\n of the legend rather than a separate caption. Prefix-scoped so the unrelated\n `fe-books__note` (which sets its own padding) is untouched. */\n[class*=\"mjo-\"][class*=\"__note\"] { margin-top: var(--mj-space-2); }\n\n/* Two-pane working layout (payment entry, subscriptions, catalog) */\n.mj-split { display: flex; gap: var(--mj-space-4); align-items: flex-start; min-height: 0; }\n.mj-split > .left { flex: 0 0 380px; min-width: 0; }\n.mj-split > .right { flex: 1; min-width: 0; }\n.mj-split--narrow-left > .left { flex: 0 0 300px; }\n\n@media (max-width: 1100px) {\n .mj-split { flex-direction: column; }\n .mj-split > .left, .mj-split > .right { flex: 1 1 auto; width: 100%; }\n .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n@media (max-width: 760px) {\n .grid-2, .grid-3 { grid-template-columns: 1fr; }\n}\n\n/* ============================================================================\n PAGE HEADER \u2014 three stacked rows compressed into two\n ============================================================================\n MJ stacks the identity column title -> subtitle -> meta, so our \"as of 2:31 PM\"\n capsule landed on a third line of its own and the header stood 138px tall on\n every section. The capsule is a timestamp for the subtitle, not a peer of it,\n so it belongs BESIDE the subtitle rather than under it.\n\n Done without restructuring MJ's template, so a future MJ header fix still\n lands for us. Scoped to our shell \u2014 this is our editorial choice about our own\n capsule, not an opinion about how every MJ header should read.\n\n GRID, not flex-wrap. The first attempt used a wrapping flex row with order to\n reseat the capsule; every child claimed its own line and the whole block\n centred, because a full-width flex item forces a line break and the remaining\n items had nothing to sit beside. Grid with EXPLICIT row and column placement\n is deterministic \u2014 and it makes MJ's DOM order (title, subtitle, meta)\n irrelevant, so the capsule renders to the LEFT of a subtitle that precedes it\n in the markup, without touching the template. */\nmjo-section-shell .mj-page-header .mj-page-header-text {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n align-items: center;\n justify-items: start;\n column-gap: var(--mj-space-2);\n row-gap: 2px;\n}\nmjo-section-shell .mj-page-header .mj-page-header-title { grid-row: 1; grid-column: 1 / -1; }\nmjo-section-shell .mj-page-header .mj-page-header-meta { grid-row: 2; grid-column: 1; margin-top: 0; }\nmjo-section-shell .mj-page-header .mj-page-header-subtitle { grid-row: 2; grid-column: 2; margin-top: 0; }\n\n/* Reclaim the rest vertically. space-3 still clears the 40px icon tile with\n room to spare; going tighter starts to crowd it. */\nmjo-section-shell .mj-page-header .mj-page-header-row--primary {\n padding-top: var(--mj-space-3);\n padding-bottom: var(--mj-space-3);\n}\n\n/* ============================================================================\n CARD HOVER \u2014 undo MJ's ungated lift on cards that do nothing\n ============================================================================\n MJ lifts EVERY `.mj-card` on hover \u2014 `transform: translateY(-4px)` plus a\n large shadow \u2014 from `explorer-app/src/lib/styles/_common.scss`. The selector\n there is bare `.mj-card:hover`, with no gate on whether the card is\n interactive, so a read-only dashboard panel rises under the cursor and\n promises a click it will not accept.\n\n This is not MJ's intent. `_shared-patterns.scss`, in the same package, heads\n its own card-hover block \"for clickable cards\" and gates it properly on\n `a.mj-card` / `.mj-card.clickable` \u2014 then weakens it with an ungated\n `.mj-card:hover` of its own. Two competing rules, both ungated in practice.\n Filed upstream; DELETE this block once MJ gates its own.\n\n Scoped to the orders shell so it cannot alter any other app, and written the\n way MJ says it means it: keep the lift where the card is genuinely a link or\n is marked clickable, drop it everywhere else.\n\n The values re-assert MJ's own RESTING state for `.mj-card` so that hovering a\n non-interactive card is a true NO-OP rather than a different effect \u2014 an\n earlier pass set a smaller shadow here, which only traded a card that rises\n for one that flattens. `--mj-shadow-sm` is used rather than `_common.scss`'s\n `var(--shadow)`: that variable is private to explorer-app and does not resolve\n from here, so the declaration was silently dropped. */\nmjo-section-shell .mj-card:not(.clickable):not(a):hover {\n transform: none;\n box-shadow: var(--mj-shadow-sm);\n border-color: transparent;\n}\n\n/* ============================================================================\n 7. MONEY (U7)\n ============================================================================ */\n\n.mj-num, .mj-money {\n font-variant-numeric: tabular-nums; font-feature-settings: \"tnum\";\n text-align: right; white-space: nowrap;\n}\n.mj-money--hero { font-size: 22px; font-weight: var(--mj-font-bold); letter-spacing: -0.01em; }\n.mj-money--lg { font-size: 16px; font-weight: var(--mj-font-semibold); }\n.mj-money--neg { color: var(--mj-status-error-text); }\n.mj-money--credit { color: var(--mj-status-success-text); }\n.mj-money--muted { color: var(--mj-text-muted); }\n\n/* The money strip \u2014 TotalGross / AmountPaid / Balance / status */\n/* Columns follow the CELLS THAT EXIST rather than a fixed three-plus-note.\n Paid is conditional (drafts have none) and the note is optional, so the fixed\n template left one or two empty panels sitting in the strip \u2014 which reads as a\n figure that failed to load rather than a figure that does not apply. */\n.mj-money-strip {\n display: grid; grid-auto-flow: column; grid-auto-columns: 1fr;\n border: 1px solid var(--mj-border-default); border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface); overflow: hidden;\n}\n.mj-money-strip > div {\n padding: var(--mj-space-3) var(--mj-space-4);\n border-right: 1px solid var(--mj-border-default);\n}\n/* The chip row is the STATUS cell specifically \u2014 not whatever happens to be last.\n Keyed on :last-child, this flex rule landed on BALANCE as soon as the status cell\n stopped rendering (a draft has no PaymentStatus), which laid its label and value\n side by side while TOTAL beside it stayed stacked. */\n.mj-money-strip > div:last-child { border-right: none; }\n.mj-money-strip > .mj-money-strip__status {\n display: flex; align-items: center; gap: var(--mj-space-2);\n}\n.mj-money-strip .l {\n font-size: 10px; font-weight: var(--mj-font-bold); letter-spacing: .07em;\n text-transform: uppercase; color: var(--mj-text-muted); display: block; margin-bottom: 2px;\n}\n.mj-money-strip .v { font-size: 17px; font-weight: var(--mj-font-bold); font-variant-numeric: tabular-nums; }\n\n/* Decomposition ladder \u2014 net \u2192 promos \u2192 charges \u2192 tax \u2192 gross */\n.mj-ladder { font-size: 13px; }\n.mj-ladder-row {\n display: flex; align-items: baseline; gap: var(--mj-space-2);\n padding: 6px 0; border-bottom: 1px dashed var(--mj-border-subtle);\n}\n.mj-ladder-row > .label { color: var(--mj-text-secondary); display: flex; align-items: center; gap: 6px; }\n.mj-ladder-row > .amt { margin-left: auto; font-variant-numeric: tabular-nums; font-weight: var(--mj-font-medium); }\n.mj-ladder-row.is-sub { padding-left: var(--mj-space-4); font-size: 12px; color: var(--mj-text-muted); }\n.mj-ladder-row.is-sub > .amt { font-weight: var(--mj-font-normal); }\n.mj-ladder-row.is-discount > .amt { color: var(--mj-status-success-text); }\n.mj-ladder-row.is-total {\n border-bottom: none; border-top: 2px solid var(--mj-border-strong);\n margin-top: var(--mj-space-2); padding-top: var(--mj-space-3);\n}\n.mj-ladder-row.is-total > .label { font-weight: var(--mj-font-semibold); color: var(--mj-text-primary); }\n.mj-ladder-row.is-total > .amt { font-size: 18px; font-weight: var(--mj-font-bold); }\n.mj-ladder-note {\n font-size: 11.5px; color: var(--mj-text-muted); padding: var(--mj-space-2) 0 0;\n display: flex; gap: 6px; align-items: flex-start;\n}\n.mj-ladder-note i { margin-top: 2px; color: var(--mj-status-info); }\n\n/* The \"why\" disclosure \u2014 U2. A bare number is never acceptable. */\n.mj-why {\n border: none; background: none; cursor: pointer; padding: 0 2px;\n color: var(--mj-text-disabled); font-size: 10.5px;\n}\n.mj-why:hover { color: var(--mj-brand-primary); }\n.mj-why-body {\n font-size: 11.5px; color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken); border-left: 2px solid var(--mj-brand-primary);\n border-radius: 0 var(--mj-radius-sm) var(--mj-radius-sm) 0;\n padding: var(--mj-space-2) var(--mj-space-3); margin: var(--mj-space-2) 0;\n}\n.mj-why-body ol, .mj-why-body ul { margin: 4px 0 0; padding-left: var(--mj-space-4); }\n.mj-why-body li { margin: 2px 0; }\n.mj-why-body code {\n font-family: var(--mj-font-family-mono); font-size: 10.5px;\n background: var(--mj-bg-surface); padding: 1px 4px; border-radius: 3px;\n}\n\n/* ============================================================================\n 9. STATUS STEPPER (D9 \u2014 order fixed, forward skip legal)\n ============================================================================ */\n\n.mj-stepper { display: flex; align-items: center; gap: var(--mj-space-1); flex-wrap: wrap; }\n.mj-stepper .step {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 4px 11px; border-radius: var(--mj-radius-full);\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n font-size: 11.5px; font-weight: var(--mj-font-semibold); color: var(--mj-text-muted);\n cursor: pointer;\n}\n.mj-stepper .step i { font-size: 9px; }\n.mj-stepper .step.is-done {\n background: var(--mj-status-success-bg); border-color: color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n color: var(--mj-status-success-text);\n}\n.mj-stepper .step.is-current {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: var(--mj-brand-primary); color: var(--mj-brand-primary);\n}\n.mj-stepper .step.is-blocked { opacity: .45; cursor: not-allowed; }\n.mj-stepper .sep { color: var(--mj-text-disabled); font-size: 9px; }\n\n/* ============================================================================\n 13. STAT TILES (cheap counts only \u2014 U11)\n ============================================================================ */\n\n.mj-stat-grid {\n display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));\n gap: var(--mj-space-4);\n}\n.mj-stat {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); padding: var(--mj-space-4);\n display: flex; flex-direction: column; gap: 2px; min-width: 0;\n}\n.mj-stat .l {\n font-size: 11px; font-weight: var(--mj-font-semibold); letter-spacing: .04em;\n text-transform: uppercase; color: var(--mj-text-muted);\n display: flex; align-items: center; gap: 6px;\n}\n.mj-stat .v {\n font-size: 25px; font-weight: var(--mj-font-bold); font-variant-numeric: tabular-nums;\n letter-spacing: -0.02em; line-height: 1.15;\n}\n.mj-stat .d { font-size: 11.5px; color: var(--mj-text-muted); }\n.mj-stat.is-alert .v { color: var(--mj-status-error-text); }\n.mj-stat .spark { margin-top: var(--mj-space-2); height: 30px; }\n.mj-stat .spark svg { width: 100%; height: 30px; display: block; overflow: visible; }\n\n/* ============================================================================\n 14. AGING BAR\n ============================================================================ */\n\n.mj-aging { display: flex; flex-direction: column; gap: 6px; }\n.mj-aging-bar {\n display: flex; height: 26px; border-radius: var(--mj-radius-sm);\n overflow: hidden; background: var(--mj-bg-surface-sunken);\n}\n.mj-aging-bar > span {\n display: flex; align-items: center; justify-content: center;\n font-size: 10.5px; font-weight: var(--mj-font-semibold); color: #fff;\n min-width: 0; overflow: hidden; white-space: nowrap;\n}\n/* Aging severity ramp \u2014 VALIDATED, do not eyeball-substitute.\n #64748b, #f59e0b, #ef4444, #991b1b passes CVD separation (worst adjacent\n \u0394E 13.9 deutan) and the normal-vision floor (\u0394E 19.8) on BOTH the light and\n dark surfaces. The earlier set used warning-700 next to error-600, which sat\n at \u0394E 2.8 deutan \u2014 the 60-day and 90-day buckets were indistinguishable.\n The neutral first step is deliberate: \"not late\" is not a severity.\n Every segment carries a visible amount and a legend, which is what discharges\n the low-contrast warning on the amber step. See PROVENANCE.md. */\n.mj-aging-bar .b-cur { background: var(--mj-color-neutral-500); }\n.mj-aging-bar .b-30 { background: var(--mj-color-warning-500); }\n.mj-aging-bar .b-60 { background: var(--mj-color-error-500); }\n/* Was the literal #991b1b, because MJ's error ramp stops at -700. Now fully\n tokenised, and the reasoning is worth keeping because the first instinct was\n the wrong one.\n\n Re-measured independently (CIE76 + a Brettel deuteranope simulation) rather\n than trusting the numbers above, whose validator script is NOT in this repo\n and cannot be re-run. Worst adjacent pair, 31-60 vs 61+:\n\n #991b1b (literal) normal dE 26.6 deuteranope dE 23.8\n --mj-color-error-700 normal dE 16.3 deuteranope dE 15.5\n the REJECTED first attempt normal dE 31.9 deuteranope dE 3.1\n\n So the token step is a modest perceptual step DOWN, not a failure: dE 15 is\n far above the ~2.3 just-noticeable difference, and nothing like the 3.1 that\n made the original attempt genuinely unreadable. And the bar is never the sole\n carrier \u2014 every segment shows its amount and the legend lists all four \u2014 so\n WCAG 1.4.1 holds either way.\n\n The token wins on a functional point the literal cannot match: a hardcoded\n hex does not follow dark mode or a white-label rebrand, while every other\n step of this ramp does. Trading ~10 dE of headroom for a ramp that themes\n correctly is the right trade. */\n.mj-aging-bar .b-90 { background: var(--mj-color-error-700); }\n[data-theme=\"dark\"] .mj-aging-bar .b-cur { background: var(--mj-color-neutral-500); }\n.mj-aging-bar > span.is-empty { display: none; }\n/* row-gap is explicit: the legend wraps to two rows in a narrow column, and a\n single `gap` shorthand left the wrapped rows tighter than the note beneath\n them, so the four buckets read as two unrelated pairs. */\n.mj-aging-legend { display: flex; gap: var(--mj-space-2) var(--mj-space-4); font-size: 11.5px; flex-wrap: wrap; }\n.mj-aging-legend > span { display: flex; align-items: center; gap: 6px; color: var(--mj-text-secondary); }\n.mj-aging-legend i { width: 9px; height: 9px; border-radius: 2px; display: inline-block; }\n\n/* ============================================================================\n 15. TIMELINE (subscription terms)\n ============================================================================ */\n\n.mj-timeline { position: relative; padding: var(--mj-space-4) 0 var(--mj-space-2); }\n.mj-timeline-track {\n position: relative; height: 34px;\n background: var(--mj-bg-surface-sunken); border-radius: var(--mj-radius-sm);\n}\n.mj-timeline-term {\n position: absolute; top: 4px; bottom: 4px; border-radius: var(--mj-radius-sm);\n display: flex; align-items: center; padding: 0 var(--mj-space-2);\n font-size: 11px; font-weight: var(--mj-font-semibold); color: #fff;\n overflow: hidden; white-space: nowrap;\n}\n.mj-timeline-term.is-past { background: var(--mj-color-neutral-400); }\n.mj-timeline-term.is-active { background: var(--mj-brand-primary); }\n.mj-timeline-term.is-future { background: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-bg-surface)); color: var(--mj-text-primary); }\n.mj-timeline-now {\n position: absolute; top: -6px; bottom: -6px; width: 2px;\n background: var(--mj-status-error);\n}\n.mj-timeline-now::after {\n content: \"today\"; position: absolute; top: -16px; left: -14px;\n font-size: 9.5px; font-weight: var(--mj-font-bold); color: var(--mj-status-error-text);\n}\n.mj-timeline-scale {\n display: flex; justify-content: space-between; font-size: 10.5px;\n color: var(--mj-text-muted); margin-top: 6px;\n}\n\n/* ============================================================================\n 17. KEYBOARD HINT STRIP (U20 \u2014 shortcuts are visible, not hidden)\n ============================================================================ */\n\n.mj-keys {\n display: flex; align-items: center; gap: var(--mj-space-4); flex-wrap: wrap;\n font-size: 11.5px; color: var(--mj-text-muted);\n}\n.mj-keys > span { display: inline-flex; align-items: center; gap: 5px; }\nkbd {\n font-family: var(--mj-font-family); font-size: 10.5px; font-weight: var(--mj-font-semibold);\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-strong);\n border-bottom-width: 2px; border-radius: var(--mj-radius-sm);\n padding: 1px 5px; color: var(--mj-text-secondary); line-height: 1.5;\n}\n\n/* ============================================================================\n 19. TYPE-AHEAD (fast entry)\n ============================================================================ */\n\n/*\n * The wrapper needs a STACKING CONTEXT, not just a positioning one.\n *\n * `position: relative` alone anchors the list under the input but leaves it in the\n * parent's stacking order, so later siblings paint on top of it: the customer\n * results rendered in the right place and were covered by the next section.\n * `elementFromPoint` at the centre of the first option returned the section, not\n * the option \u2014 the list was visible to the DOM and invisible to a person.\n */\n.mj-typeahead { position: relative; z-index: 20; }\n.mj-typeahead-list {\n position: absolute; top: calc(100% + 4px); left: 0; right: 0;\n z-index: var(--mj-z-popover); max-height: 320px; overflow: auto;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); box-shadow: var(--mj-shadow-lg);\n display: none;\n}\n.mj-typeahead-list.is-open { display: block; }\n.mj-typeahead-item {\n display: flex; align-items: center; gap: var(--mj-space-3);\n padding: var(--mj-space-2) var(--mj-space-3); cursor: pointer;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.mj-typeahead-item:last-child { border-bottom: none; }\n.mj-typeahead-item:hover, .mj-typeahead-item.is-cursor { background: var(--mj-bg-surface-hover); }\n.mj-typeahead-item .name { font-size: 13px; font-weight: var(--mj-font-medium); }\n.mj-typeahead-item .sub { font-size: 11.5px; color: var(--mj-text-muted); }\n.mj-typeahead-item .end { margin-left: auto; text-align: right; }\n.mj-typeahead-group {\n padding: 5px var(--mj-space-3); font-size: 10px; font-weight: var(--mj-font-bold);\n letter-spacing: .07em; text-transform: uppercase; color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card); border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n/* ============================================================================\n 20. LINE ROW CARD (fast entry)\n ============================================================================ */\n\n.mj-linecard {\n border: 1px solid var(--mj-border-default); border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface); padding: var(--mj-space-3);\n}\n.mj-linecard + .mj-linecard { margin-top: var(--mj-space-2); }\n.mj-linecard-top { display: flex; align-items: flex-start; gap: var(--mj-space-3); }\n.mj-linecard-top .id { flex: 1; min-width: 0; }\n.mj-linecard-top .nm { font-size: 13.5px; font-weight: var(--mj-font-semibold); }\n.mj-linecard-top .mt { font-size: 11.5px; color: var(--mj-text-muted); margin-top: 1px; }\n.mj-linecard-top .qty { flex: none; }\n.mj-linecard-top .price { flex: none; width: 118px; text-align: right; }\n.mj-linecard-top .tot { flex: none; width: 104px; text-align: right; font-variant-numeric: tabular-nums; font-weight: var(--mj-font-semibold); font-size: 14px; }\n.mj-linecard-conseq { display: flex; gap: 6px; flex-wrap: wrap; margin-top: var(--mj-space-2); }\n\n/* ============================================================================\n 21. DOCUMENT (the bill) \u2014 U6\n ============================================================================ */\n\n.mj-doc {\n background: var(--mj-bg-surface); color: var(--mj-text-primary);\n max-width: 860px; margin: 0 auto; padding: 56px 60px;\n border: 1px solid var(--mj-border-default); border-radius: var(--mj-radius-md);\n}\n.mj-doc-head { display: flex; align-items: flex-start; gap: var(--mj-space-6); margin-bottom: var(--mj-space-10); }\n.mj-doc-head .issuer { flex: 1; }\n.mj-doc-head .issuer .co { font-size: 17px; font-weight: var(--mj-font-bold); display: flex; align-items: center; gap: 8px; }\n.mj-doc-head .issuer .co i { color: var(--mj-brand-primary); }\n.mj-doc-head .issuer .addr { font-size: 12px; color: var(--mj-text-muted); margin-top: 6px; line-height: 1.6; }\n.mj-doc-head .docmeta { text-align: right; flex: none; }\n.mj-doc-head .docmeta .kind {\n font-size: 11px; font-weight: var(--mj-font-bold); letter-spacing: .12em;\n text-transform: uppercase; color: var(--mj-text-muted);\n}\n.mj-doc-head .docmeta .num { font-size: 22px; font-weight: var(--mj-font-bold); letter-spacing: -0.01em; }\n.mj-doc-meta-grid {\n display: grid; grid-template-columns: auto auto; gap: 3px var(--mj-space-4);\n font-size: 12px; margin-top: var(--mj-space-3); text-align: right;\n}\n.mj-doc-meta-grid dt { color: var(--mj-text-muted); }\n.mj-doc-meta-grid dd { margin: 0; font-variant-numeric: tabular-nums; font-weight: var(--mj-font-medium); }\n.mj-doc-parties { display: grid; grid-template-columns: 1fr 1fr; gap: var(--mj-space-8); margin-bottom: var(--mj-space-8); }\n.mj-doc-parties .lbl {\n font-size: 10px; font-weight: var(--mj-font-bold); letter-spacing: .1em;\n text-transform: uppercase; color: var(--mj-text-muted); margin-bottom: 6px;\n}\n.mj-doc-parties .who { font-size: 13px; line-height: 1.7; }\n.mj-doc-parties .who .nm { font-weight: var(--mj-font-semibold); }\n.mj-doc table.mj-table thead th { background: transparent; border-bottom: 2px solid var(--mj-text-primary); }\n.mj-doc-totals { display: flex; justify-content: flex-end; margin-top: var(--mj-space-5); }\n.mj-doc-totals .box { width: min(340px, 100%); }\n.mj-doc-due {\n display: flex; align-items: baseline; justify-content: space-between;\n margin-top: var(--mj-space-3); padding-top: var(--mj-space-3);\n border-top: 2px solid var(--mj-text-primary);\n}\n.mj-doc-due .l { font-size: 13px; font-weight: var(--mj-font-bold); text-transform: uppercase; letter-spacing: .06em; }\n.mj-doc-due .v { font-size: 24px; font-weight: var(--mj-font-bold); font-variant-numeric: tabular-nums; }\n.mj-doc-foot {\n margin-top: var(--mj-space-10); padding-top: var(--mj-space-5);\n border-top: 1px solid var(--mj-border-default);\n font-size: 11.5px; color: var(--mj-text-muted); line-height: 1.7;\n}\n/*\n * The paid/void stamp.\n *\n * ANCHORED TO THE BOTTOM, not the top. Top-right is where the invoice number and\n * the date block already live, and the head's height varies with how many meta\n * rows a document has \u2014 so no fixed `top` clears it in every render. It sat on\n * top of the order number until a browser screenshot caught it. The footer band\n * is a single line of small print on the left, leaving the right reliably empty.\n */\n.mj-doc-stamp {\n position: absolute; bottom: 96px; right: 64px; transform: rotate(-14deg);\n border: 3px solid var(--mj-status-success); color: var(--mj-status-success-text);\n border-radius: var(--mj-radius-md); padding: 6px 18px;\n font-size: 22px; font-weight: var(--mj-font-bold); letter-spacing: .1em;\n text-transform: uppercase; opacity: .85; pointer-events: none;\n}\n\n@media print {\n .mj-topnav, .mj-rail, .mj-page-header, .mj-keys, .no-print { display: none !important; }\n .mj-app, .mj-page-layout, .mj-page-body { height: auto; overflow: visible; display: block; }\n .mj-page-body { padding: 0; }\n .mj-doc { border: none; max-width: none; padding: 0; }\n body { background: #fff; }\n}\n\n\n/* ============================================================================\n CHROME THIS APP MUST SHIP ITSELF\n ============================================================================\n These were shimmed in mockups/assets/app.css on the assumption that MJ supplies\n them at runtime, the way it supplies .mj-card, .mj-btn and .mj-input. It does\n not. Loading the real app proved it: chips, banners, tabs, panels, the table\n frame and the slide-in were all completely unstyled in MJ Explorer while\n looking perfect in the mockups, because the mockups were reading the shim.\n\n Anything a component of ours renders has to live HERE, in the stylesheet the\n package ships, or it exists only in the mockups. The rule to apply when adding\n a class: if our markup writes it, it belongs in this file. Only classes MJ\n genuinely owns (.mj-page-layout, .mj-btn, .mj-input, .mj-card) stay as\n mockup-side shims.\n\n Names keep the mj- prefix deliberately \u2014 a reader should not have to care\n whether a class came from the framework or from us.\n ============================================================================ */\n\n.mj-iconbtn {\n border: none; background: none; cursor: pointer;\n color: var(--mj-text-secondary); font-size: 14px;\n padding: var(--mj-space-2); border-radius: var(--mj-radius-md);\n line-height: 1; display: inline-flex; align-items: center; justify-content: center;\n}\n.mj-iconbtn:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.mj-avatar {\n width: 30px; height: 30px; border-radius: var(--mj-radius-full);\n background: var(--mj-brand-primary); color: var(--mj-brand-on-primary);\n display: flex; align-items: center; justify-content: center;\n font-size: 11.5px; font-weight: var(--mj-font-semibold); flex: none;\n}\n/* `.mj-input` is deliberately NOT defined here \u2014 MJ owns it.\n MJ ships it globally in ui-components/input/input.scss (`.mj-input, .mj-textarea`),\n and this file is now global too (the section shell loads it with\n ViewEncapsulation.None), so redefining it meant two global rules of equal\n specificity fighting, with the winner decided by stylesheet LOAD ORDER \u2014 MJ's\n happens to win today, which is luck, not design. It also differed from MJ's\n (13px/6-10px/radius-md vs 14px/8-12px/radius-sm/min-height 38px), so whichever\n won changed how every input in the app looked.\n\n `.mj-select` stays: MJ styles `.mj-input, .mj-textarea` but ships no select rule,\n so this is ours to own. Values match MJ's input so the two sit level. */\n.mj-select {\n font-family: inherit; font-size: var(--mj-text-sm); color: var(--mj-text-primary);\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm); padding: 8px 12px; width: 100%;\n min-height: 38px;\n}\n.mj-select:focus {\n outline: none; border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n}\n.mj-field { display: block; margin-bottom: var(--mj-space-3); }\n.mj-field > label {\n display: block; font-size: 11px; font-weight: var(--mj-font-semibold);\n letter-spacing: .04em; text-transform: uppercase;\n color: var(--mj-text-muted); margin-bottom: 5px;\n}\n.mj-field .hint { font-size: 11.5px; color: var(--mj-text-muted); margin-top: 4px; }\n.mj-stated {\n display: flex; align-items: baseline; gap: var(--mj-space-2);\n padding: 6px 0;\n}\n.mj-stated .value { font-size: 13px; font-weight: var(--mj-font-medium); }\n.mj-stated .from {\n font-size: 11px; color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken); border-radius: var(--mj-radius-sm);\n padding: 1px 6px;\n}\n.mj-stepper-num {\n display: inline-flex; align-items: center; border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md); overflow: hidden; background: var(--mj-bg-surface);\n}\n.mj-stepper-num button {\n border: none; background: none; cursor: pointer; color: var(--mj-text-secondary);\n width: 26px; height: 28px; font-size: 11px;\n}\n.mj-stepper-num button:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.mj-stepper-num input {\n border: none; outline: none; background: none; width: 46px; text-align: center;\n font-family: inherit; font-size: 13px; font-variant-numeric: tabular-nums; color: inherit;\n}\n.mj-chip {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 2px 9px; border-radius: var(--mj-radius-full);\n font-size: 11.5px; font-weight: var(--mj-font-semibold);\n background: var(--mj-status-neutral-bg); color: var(--mj-status-neutral-text);\n white-space: nowrap;\n}\n.mj-chip i { font-size: 10px; }\n.mj-filter-chip {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 5px 11px; border-radius: var(--mj-radius-full);\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n font-family: inherit; font-size: 12.5px; font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary); cursor: pointer; white-space: nowrap;\n}\n.mj-filter-chip:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.mj-filter-chip .count {\n font-variant-numeric: tabular-nums; font-size: 11px;\n background: var(--mj-bg-surface-sunken); border-radius: var(--mj-radius-full); padding: 0 6px;\n}\n.mj-filter-chip.is-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, transparent);\n color: var(--mj-brand-primary); font-weight: var(--mj-font-semibold);\n}\n.mj-filter-chip.is-active .count { background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent); }\n.mj-consequence {\n display: inline-flex; align-items: center; gap: 6px;\n font-size: 11.5px; color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm); padding: 3px 8px;\n}\n.mj-consequence i { font-size: 10px; color: var(--mj-text-muted); }\n.mj-consequence.is-sub i { color: var(--mj-color-violet-500); }\n.mj-consequence.is-event i { color: var(--mj-status-info); }\n.mj-consequence.is-defer i { color: var(--mj-status-warning); }\n.mj-card-pad { padding: var(--mj-space-4); }\n.mj-card-head {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.mj-card-head h3 { font-size: 13px; letter-spacing: .01em; }\n.mj-card-head i { color: var(--mj-text-muted); font-size: 12px; }\n.mj-card-head .right { margin-left: auto; display: flex; gap: var(--mj-space-2); align-items: center; }\n.mj-panel {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); margin-bottom: var(--mj-space-4);\n}\n.mj-panel > summary {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4); cursor: pointer;\n font-size: 13px; font-weight: var(--mj-font-semibold);\n list-style: none;\n}\n.mj-panel > summary::-webkit-details-marker { display: none; }\n.mj-panel > summary::before {\n content: \"\\f105\"; font-family: \"Font Awesome 6 Free\"; font-weight: 900;\n font-size: 11px; color: var(--mj-text-muted); width: 10px;\n transition: transform .14s ease;\n}\n.mj-panel[open] > summary::before { transform: rotate(90deg); }\n.mj-panel > summary > i:first-of-type { color: var(--mj-text-muted); font-size: 12px; }\n.mj-panel > summary .right { margin-left: auto; display: flex; gap: var(--mj-space-2); align-items: center; font-weight: var(--mj-font-normal); }\n.mj-panel-body { padding: 0 var(--mj-space-4) var(--mj-space-4); }\n.mj-panel-body.no-pad { padding: 0; }\n/* MJ ALREADY OWNS `.mj-table`. It is defined in ng-explorer-app's shared patterns, which\n Explorer loads before this kit \u2014 so `width`, `border-collapse` and the base type were being\n restated here purely to override MJ with the same thing, except in hardcoded pixels. Those\n declarations are gone; what stays below is only what MJ's table does NOT do.\n\n The one base property worth keeping is the SIZE: MJ's `--mj-text-sm` is 14px, and a dense\n worklist reads better a step down. That is a deliberate deviation, so it is written as a token\n rather than as 13px. */\n.mj-table { font-size: var(--mj-text-xs); }\n\n/* Additive, not a restatement: MJ's header has no sticky behaviour, and a worklist that scrolls\n inside a card needs one \u2014 losing the column names on row 20 is what makes a long queue\n unreadable. */\n.mj-table thead th {\n text-align: left; font-size: var(--mj-text-xs); font-weight: var(--mj-font-bold);\n letter-spacing: .06em; text-transform: uppercase; color: var(--mj-text-muted);\n padding: var(--mj-space-2) var(--mj-space-3);\n border-bottom: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface); position: sticky; top: 0; z-index: 1;\n white-space: nowrap;\n}\n.mj-table thead th.num, .mj-table td.num { text-align: right; font-variant-numeric: tabular-nums; }\n.mj-table thead th .sortable { cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }\n.mj-table thead th .sortable i { font-size: var(--mj-text-xs); opacity: .5; }\n.mj-table tbody td {\n padding: var(--mj-space-3); border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n/* Scoped to `.is-clickable`, which the worklist applies only when something is\n actually listening (`[class.is-clickable]=\"RowClicked.observed\"`). Unscoped,\n EVERY table highlighted on hover \u2014 including read-only ones \u2014 which is a\n promise of interactivity the row cannot keep. A highlight is the same\n affordance as a lift: offer it only where a click does something. */\n.mj-table tbody tr.is-clickable:hover { background: var(--mj-bg-surface-hover); }\n.mj-table tbody tr.is-selected { background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent); }\n.mj-table tbody tr.is-clickable { cursor: pointer; }\n.mj-table tbody tr.is-total { background: var(--mj-bg-surface-card); font-weight: var(--mj-font-semibold); }\n.mj-table tbody tr.is-total td { border-bottom: none; border-top: 2px solid var(--mj-border-strong); }\n.mj-table .primary { font-weight: var(--mj-font-semibold); }\n.mj-table .secondary { font-size: var(--mj-text-xs); color: var(--mj-text-muted); }\n.mj-table-wrap {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); overflow: auto;\n}\n/* The hand-rolled .mj-tabs / .mj-tab block lived here and is gone. The order\n editor's five tabs now use MJ's own <mj-tab-nav>, which is the shipped,\n tokenized component for exactly this job \u2014 a pane switcher over one record.\n\n Not accounting's mj-workspace-card, despite the surface similarity: that models\n OPEN DOCUMENTS, so its strip closes, reorders and adds tabs and carries a New\n button \u2014 affordances that would be lies over five fixed panes of one order. It\n also lives in accounting's transfer-pending/ folder, code explicitly parked for\n another home, so depending on it would have bought a migration later.\n\n The old red dot became an error-variant badge in the same slot the count uses.\n A bare dot was a signifier with no meaning attached; only its aria-label said\n what it meant, so a sighted user saw a dot and guessed. */\n\n.mj-slide-in {\n position: fixed; top: 0; right: 0; bottom: 0; z-index: var(--mj-z-modal);\n width: min(560px, 100vw); display: flex; flex-direction: column;\n background: var(--mj-bg-surface); border-left: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-xl);\n transform: translateX(100%); transition: transform .18s ease;\n}\n.mj-slide-in.is-open { transform: translateX(0); }\n.mj-empty {\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n gap: var(--mj-space-2); padding: var(--mj-space-12) var(--mj-space-6);\n color: var(--mj-text-muted); text-align: center;\n}\n.mj-empty i { font-size: 26px; color: var(--mj-text-disabled); }\n.mj-empty .t { font-size: 14px; font-weight: var(--mj-font-semibold); color: var(--mj-text-secondary); }\n\n/* Status variants for the chrome above. */\n.mj-chip--success { background: var(--mj-status-success-bg); color: var(--mj-status-success-text); }\n.mj-chip--warning { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.mj-chip--error { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.mj-chip--info { background: var(--mj-status-info-bg); color: var(--mj-status-info-text); }\n.mj-chip--violet { background: var(--mj-status-violet-bg); color: var(--mj-status-violet-text); }\n.mj-chip--brand { background: color-mix(in srgb, var(--mj-brand-primary) 13%, transparent); color: var(--mj-brand-primary); }\n.mj-chip--outline { background: transparent; border: 1px solid var(--mj-border-default); color: var(--mj-text-secondary); font-weight: var(--mj-font-medium); }\n.mj-table--compact tbody td { padding: 7px var(--mj-space-3); }\n.mj-table--lines tbody td { padding: var(--mj-space-2) var(--mj-space-3); }\n.mj-slide-in-head {\n display: flex; align-items: center; gap: var(--mj-space-3); flex: none;\n padding: var(--mj-space-4) var(--mj-space-5);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.mj-slide-in-head h2 { font-size: 15px; }\n.mj-slide-in-head .right { margin-left: auto; display: flex; gap: var(--mj-space-1); align-items: center; }\n.mj-slide-in-body { flex: 1; min-height: 0; overflow: auto; padding: var(--mj-space-5); }\n.mj-slide-in-foot {\n flex: none; display: flex; gap: var(--mj-space-2); align-items: center;\n padding: var(--mj-space-3) var(--mj-space-5);\n border-top: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card);\n}\n\n/*\n * The table filter box.\n *\n * NAMED mjo-, NOT mj-. MJ defines its own `.mj-search` for Explorer's global\n * search bar in the top chrome \u2014 a different control with different metrics \u2014 and\n * ours inherited it, which is why the filter box rendered as a bare underline\n * instead of a bordered field. Sharing the framework's prefix is right for\n * classes MJ does not define; it is actively wrong for one it does.\n */\n.mjo-search {\n display: flex; align-items: center; gap: var(--mj-space-2);\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md); padding: 6px 10px; min-width: 260px;\n}\n.mjo-search i { color: var(--mj-text-muted); font-size: 12px; }\n.mjo-search input {\n border: none; outline: none; background: none; font-family: inherit;\n font-size: 13px; color: inherit; width: 100%;\n}\n\n/* \u2500\u2500 A standing explanation, not an alert \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n `mj-alert` is for something that HAPPENED or needs attention. Screens that permanently\n explain how they work were using it, which put a full-width coloured card above the work\n on every visit \u2014 read once, then scrolled past forever. This is the quiet form: same\n information, one line's worth of weight, no dismissal to manage. */\n.mjo-note {\n display: flex;\n align-items: baseline;\n gap: var(--mj-space-2);\n margin: 0 0 var(--mj-space-3);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-xs);\n line-height: var(--mj-leading-relaxed, 1.6);\n}\n\n.mjo-note > i {\n color: var(--mj-text-tertiary);\n flex: 0 0 auto;\n}\n"] }]
173
+ }], null, { Title: [{
174
+ type: Input
175
+ }], Icon: [{
176
+ type: Input
177
+ }], Subtitle: [{
178
+ type: Input
179
+ }], NavSections: [{
180
+ type: Input
181
+ }], ActivePageId: [{
182
+ type: Input
183
+ }], RailWidth: [{
184
+ type: Input
185
+ }], Loading: [{
186
+ type: Input
187
+ }], Error: [{
188
+ type: Input
189
+ }], PageSelected: [{
190
+ type: Output
191
+ }] }); })();
192
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJOSectionShellComponent, { className: "MJOSectionShellComponent", filePath: "lib/sections/section-shell.component.ts", lineNumber: 129 }); })();
193
+ //# sourceMappingURL=section-shell.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-shell.component.js","sourceRoot":"","sources":["../../../src/lib/sections/section-shell.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACH,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,GAGxB,MAAM,kCAAkC,CAAC;;;;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AA+EH,MAAM,OAAO,wBAAwB;IACjC,oFAAoF;IAC3E,KAAK,GAAG,EAAE,CAAC;IAEpB,wCAAwC;IAC/B,IAAI,GAAG,EAAE,CAAC;IAEnB,gDAAgD;IACvC,QAAQ,GAAG,EAAE,CAAC;IAEvB,oFAAoF;IAC3E,WAAW,GAAuB,EAAE,CAAC;IAE9C,iEAAiE;IACxD,YAAY,GAAkB,IAAI,CAAC;IAE5C,qDAAqD;IAC5C,SAAS,GAAG,GAAG,CAAC;IAEzB,+EAA+E;IACtE,OAAO,GAAG,KAAK,CAAC;IAEzB,qEAAqE;IAC5D,KAAK,GAAkB,IAAI,CAAC;IAErC;;;;;;OAMG;IACO,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;IAE1C,aAAa,CAAC,IAAmB;QACvC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,yEAAyE;QACzE,8DAA8D;QAC9D,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;kHAxCQ,wBAAwB;6DAAxB,wBAAwB;;YAjDrB,AADJ,AADJ,sCAAgB,wBACwD,aACtD;YAAA,kBAAyC;YAAA,iBAAM;YACzD,8BAAa;YAAA,qBAA4C;YAa7D,AAb6D,iBAAM,EAalD;YAGb,AADJ,uCAA8D,qBAMd;YAAxC,4HAAe,yBAAqB,IAAC;YALzC,iBAK4C;YAmBxC,AADJ,8CAAyD,+BACZ;YACrC,sBAAyB;YAIzC,AADI,AADI,AADI,iBAAwB,EACN,EACX,EACF;;YA/CG,cAAe;YAAe,AAAd,AAAhB,iCAAe,kBAAc,0BAAsB;YAiBrD,eAAa;YAAC,AAAd,2BAAa,kBAAkB;YAErC,cAAwB;YAGxB,AADA,AADA,AADA,0CAAwB,8BACC,wBACN,0BACE;YAmBJ,cAAmB;YAAC,AAApB,qCAAmB,oBAAgB;YAC7B,cAAiB;YAAjB,+BAAiB;4BApDpD,YAAY;YACZ,qBAAqB;YACrB,qBAAqB;YACrB,mBAAmB;YACnB,kBAAkB;YAClB,yBAAyB;YACzB,2BAA2B;;iFAsDtB,wBAAwB;cA9EpC,SAAS;2BACI,mBAAmB,cACjB,IAAI,iBAaD,iBAAiB,CAAC,IAAI,WAE5B;oBACL,YAAY;oBACZ,qBAAqB;oBACrB,qBAAqB;oBACrB,mBAAmB;oBACnB,kBAAkB;oBAClB,yBAAyB;oBACzB,2BAA2B;iBAC9B,YACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkDT;;kBAIA,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBASL,MAAM;;kFAhCE,wBAAwB"}
@@ -0,0 +1,181 @@
1
+ import { OrderHeaderEntity, type PreviewComponent } from '@mj-biz-apps/orders-entities';
2
+ import * as i0 from "@angular/core";
3
+ /** The entity every order screen binds to. */
4
+ /**
5
+ * What the pricing pipeline said about ONE draft line.
6
+ *
7
+ * `Error` is a refusal with a reason — "No price is configured for X" — and it is
8
+ * rendered on the row instead of a number. A missing price must never present as
9
+ * `0.00`: a free line and an unpriced line look identical on screen and only one
10
+ * of them is what the user meant.
11
+ */
12
+ export interface MJOLinePrice {
13
+ ClientKey: string;
14
+ /** Quantity × unit price, before this line's own discount. */
15
+ ExtendedAmount: number | null;
16
+ UnitPrice: number | null;
17
+ /** After `DiscountPct`. The figure the line strip shows. */
18
+ NetAmount: number | null;
19
+ PriceListName: string | null;
20
+ /**
21
+ * WHERE the price came from, in the words the badge shows: the price list's name,
22
+ * or `'base price'` when the winning rule belonged to no list. Null ONLY when no
23
+ * price resolved at all.
24
+ *
25
+ * Distinct from `PriceListName` on purpose. The badge treats a null source as
26
+ * "pricing finished and found nothing" and says *no price rule* — so feeding it
27
+ * `PriceListName` labelled every base-priced line as unpriced while showing its
28
+ * resolved price two inches to the left. Caught in the browser on 2026-08-07:
29
+ * both demo products price from base rules, so BOTH read "no price rule".
30
+ */
31
+ PriceSource: string | null;
32
+ /** The resolution walk, so a price can be explained rather than asserted. */
33
+ Components: PreviewComponent[];
34
+ /** True when the user typed the price rather than the engine resolving one. */
35
+ WasStated: boolean;
36
+ Error: string | null;
37
+ }
38
+ /**
39
+ * What the entry screens may say about an order's money BEFORE it is confirmed.
40
+ *
41
+ * DELIBERATELY INCOMPLETE, and the omissions are the point. There is no
42
+ * `GrossTotal`, no `TaxTotal`, no `ChargeTotal` — charges, tax and promotions are
43
+ * decided inside `OrderEntityServer.Save()` and have no read-only entry point yet.
44
+ * Reporting them as `0` would be a lie that reads as a number, and it is exactly
45
+ * the failure the old pre-flight had (it once showed tax and discount as $0 on the
46
+ * one screen whose whole job is saying what you are about to commit to).
47
+ *
48
+ * So the screens show a NET SUBTOTAL and say what it excludes. The engine remains
49
+ * the authority on what the order actually comes to.
50
+ */
51
+ export interface MJOEstimatedTotals {
52
+ ListSubtotal: number;
53
+ DiscountTotal: number;
54
+ NetTotal: number;
55
+ /**
56
+ * What the customer actually pays — net plus charges plus tax.
57
+ *
58
+ * The client could not know this before: only a full booking walk produced it, and the only
59
+ * thing that ran one was a preview inside a transaction that always rolled back. `PriceOrder`
60
+ * returns it from the same engine the booking uses, which is what lets "pay in full" offer the
61
+ * real figure instead of the net subtotal.
62
+ */
63
+ GrossTotal: number;
64
+ }
65
+ export interface MJOPricingResult {
66
+ Lines: MJOLinePrice[];
67
+ Totals: MJOEstimatedTotals;
68
+ /** True when any line could not be priced — the subtotal is incomplete. */
69
+ HasUnpricedLines: boolean;
70
+ }
71
+ /** What the last pricing attempt produced. */
72
+ export interface MJOPricingState {
73
+ /** Line prices + subtotal, or null before the first successful attempt. */
74
+ Result: MJOPricingResult | null;
75
+ /** A pricing pass is in flight. */
76
+ Loading: boolean;
77
+ /** Why the last attempt failed — the CALL not completing, not a refusal to price. */
78
+ Error: string | null;
79
+ }
80
+ /**
81
+ * `MJOPricingScheduler` — the seam between a draft and the engine.
82
+ *
83
+ * Every screen that composes an order goes through here, so the debounce, the
84
+ * out-of-order guard and the staleness bookkeeping exist once instead of in each
85
+ * screen that happens to need them.
86
+ *
87
+ * ## How pricing works here, and why it is not a preview
88
+ *
89
+ * This used to call `Orders.PreviewOrder`, which performed a REAL save inside a
90
+ * transaction that always rolled back and read the computed values off the
91
+ * entities before they vanished. It fired on every keystroke, so composing one
92
+ * order ran the full booking walk — journal entries, subscription decisions,
93
+ * entitlement grants, sequence numbers — dozens of times and discarded all of it.
94
+ * And the confirm was gated on the result, so a failure in a run nobody would ever
95
+ * read blocked the run that mattered.
96
+ *
97
+ * It now calls **`Orders.PriceOrder`**, which runs `OrderPricingService` — the same
98
+ * walk `Save()` uses — and writes nothing. `Orders.PreviewPrice` is a one-line
99
+ * wrapper around that same service, not a second resolver.
100
+ *
101
+ * WHY DEBOUNCE AND SEQUENCE-GUARD (unchanged, and still necessary). Pricing is a
102
+ * server round trip fired as the user types. Two things go wrong without care, and
103
+ * both show a wrong number rather than an obvious failure:
104
+ *
105
+ * - **Too many calls.** Un-debounced, every keystroke prices every line.
106
+ * - **Out-of-order responses.** Request 3 can return after request 4. Applying it
107
+ * would show prices for a draft the user has already moved past — stale money
108
+ * presented as current. Every response carries the sequence number it was issued
109
+ * with, and anything not from the newest request is discarded.
110
+ *
111
+ * Provided in root: the debounce state is per-draft, not per-service, so one
112
+ * instance serves the whole app.
113
+ *
114
+ * ## Example
115
+ *
116
+ * ```typescript
117
+ * const order = await md.GetEntityObject<OrderHeaderEntity>(MJO_ENTITIES.OrderHeader);
118
+ * this.stop = draft.Subscribe(() => this.orders.SchedulePricing(draft, s => this.Pricing = s));
119
+ * ```
120
+ */
121
+ export declare class MJOPricingScheduler {
122
+ /** Milliseconds of quiet before a pricing pass fires. */
123
+ DebounceMs: number;
124
+ private sequence;
125
+ private applied;
126
+ private timer;
127
+ /**
128
+ * Price a draft's lines after a quiet period, calling back with each state change.
129
+ *
130
+ * Calling again before the timer elapses replaces the pending request rather
131
+ * than queueing another — the user is still typing, and only the final state
132
+ * is worth asking about.
133
+ */
134
+ SchedulePricing(order: OrderHeaderEntity, onState: (state: MJOPricingState) => void): void;
135
+ /**
136
+ * Price a draft's lines immediately, bypassing the debounce.
137
+ *
138
+ * ## Locally when it can, on the server when it must
139
+ *
140
+ * `OrderPricingService` runs in this browser — it lives in the entities package and uses nothing
141
+ * but `RunView`, which is network-transparent. So the common order prices with no round trip at
142
+ * all: the metadata walk reads price rules, tiers, charge types and tax tables through the
143
+ * provider and answers immediately.
144
+ *
145
+ * Two things it cannot do here, and both must ESCALATE rather than be approximated:
146
+ *
147
+ * · a **pricing plugin**. `BasePriceResolver` subclasses are server-side code, and the class
148
+ * factory on this tier has none of them registered — so `ResolvePrice` would fall through to
149
+ * the DEFAULT resolver and return a confident, wrong number. `CanPriceOrderLocally` reads the
150
+ * `PricingDriverClass` metadata to find out before that happens.
151
+ * · a **promotion code**. Whether a code still applies depends on redemption counts that change
152
+ * with orders other people are placing right now. No staleness is acceptable for that, so any
153
+ * code at all sends the whole pass to the server.
154
+ *
155
+ * The escalation is all-or-nothing because pricing is not per-line arithmetic: promotions stack
156
+ * against order totals, charges apportion across lines, tax computes on the discounted amount. An
157
+ * order half-priced here and half there would disagree with itself about the same totals.
158
+ *
159
+ * Either way the answer comes from ONE implementation, which is the property the whole
160
+ * arrangement exists to preserve.
161
+ */
162
+ PriceNow(order: OrderHeaderEntity, onState: (state: MJOPricingState) => void): Promise<void>;
163
+ /**
164
+ * Run the real pricing walk in this browser, or report that it cannot.
165
+ *
166
+ * @returns True when it priced and reported state; false when the caller must escalate.
167
+ */
168
+ private priceLocally;
169
+ /**
170
+ * Turn the engine's answer into what the strip renders.
171
+ *
172
+ * Totals come from the SERVER's figures rather than being re-added here. Summing on the client
173
+ * is how the screen and the ledger drift: the engine apportions discounts and charges across
174
+ * lines with its own rounding, and a second addition in a different order lands a penny out.
175
+ */
176
+ private summarize;
177
+ CancelPending(): void;
178
+ static ɵfac: i0.ɵɵFactoryDeclaration<MJOPricingScheduler, never>;
179
+ static ɵprov: i0.ɵɵInjectableDeclaration<MJOPricingScheduler>;
180
+ }
181
+ //# sourceMappingURL=pricing-scheduler.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-scheduler.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/pricing-scheduler.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,iBAAiB,EAAkD,KAAK,gBAAgB,EAAuC,MAAM,8BAA8B,CAAC;;AAEnM,8CAA8C;AAE9C;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;;;;;;OAUG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6EAA6E;IAC7E,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,+EAA+E;IAC/E,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,2EAA2E;IAC3E,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC5B,2EAA2E;IAC3E,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,mBAAmB;IAC5B,yDAAyD;IAClD,UAAU,SAAO;IAExB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAA8C;IAE3D;;;;;;OAMG;IACI,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAYjG;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACU,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEzG;;;;OAIG;YACW,YAAY;IAuF1B;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IA2CV,aAAa,IAAI,IAAI;yCAtQnB,mBAAmB;6CAAnB,mBAAmB;CA0Q/B"}