@happyvertical/smrt-commerce 0.53.3 → 0.53.5

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 (158) hide show
  1. package/AGENTS.md +19 -3
  2. package/README.md +29 -1
  3. package/agents/commercial-ui.md +78 -0
  4. package/agents/customer-vendor-ui.md +76 -0
  5. package/agents/invoice-calculations.md +17 -0
  6. package/agents/invoice-preparation.md +86 -0
  7. package/agents/invoice-quantity.md +46 -0
  8. package/agents/pricing-versions.md +28 -0
  9. package/agents/purchasing-ui.md +82 -0
  10. package/agents/quote-ui.md +82 -0
  11. package/dist/billing/units.d.ts +1 -7
  12. package/dist/billing/units.d.ts.map +1 -1
  13. package/dist/chunks/calculations-DPuldr1J.js +242 -0
  14. package/dist/chunks/calculations-DPuldr1J.js.map +1 -0
  15. package/dist/chunks/types-CRnln577.js.map +1 -1
  16. package/dist/chunks/{units-CpBepqG1.js → units-CJcAOQm1.js} +3 -39
  17. package/dist/chunks/units-CJcAOQm1.js.map +1 -0
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +164 -44
  21. package/dist/index.js.map +1 -1
  22. package/dist/invoices.d.ts +3 -0
  23. package/dist/invoices.d.ts.map +1 -0
  24. package/dist/invoices.js +2 -0
  25. package/dist/manifest.json +66 -8
  26. package/dist/migrations/invoiceEditorStorage.d.ts +39 -0
  27. package/dist/migrations/invoiceEditorStorage.d.ts.map +1 -0
  28. package/dist/models/ContractLineItem.d.ts +1 -1
  29. package/dist/models/InvoiceLineItem.d.ts +18 -36
  30. package/dist/models/InvoiceLineItem.d.ts.map +1 -1
  31. package/dist/playground.js +201 -3
  32. package/dist/playground.js.map +1 -1
  33. package/dist/smrt-knowledge.json +109 -7
  34. package/dist/svelte/components/CustomerDetail.svelte +150 -0
  35. package/dist/svelte/components/CustomerDetail.svelte.d.ts +28 -0
  36. package/dist/svelte/components/CustomerDetail.svelte.d.ts.map +1 -0
  37. package/dist/svelte/components/CustomerDirectory.svelte +177 -0
  38. package/dist/svelte/components/CustomerDirectory.svelte.d.ts +42 -0
  39. package/dist/svelte/components/CustomerDirectory.svelte.d.ts.map +1 -0
  40. package/dist/svelte/components/CustomerForm.svelte +234 -0
  41. package/dist/svelte/components/CustomerForm.svelte.d.ts +44 -0
  42. package/dist/svelte/components/CustomerForm.svelte.d.ts.map +1 -0
  43. package/dist/svelte/components/InvoiceAllocationFields.svelte +72 -0
  44. package/dist/svelte/components/InvoiceAllocationFields.svelte.d.ts +8 -0
  45. package/dist/svelte/components/InvoiceAllocationFields.svelte.d.ts.map +1 -0
  46. package/dist/svelte/components/InvoiceCard.svelte +2 -2
  47. package/dist/svelte/components/InvoiceEditor.svelte +134 -0
  48. package/dist/svelte/components/InvoiceEditor.svelte.d.ts +8 -0
  49. package/dist/svelte/components/InvoiceEditor.svelte.d.ts.map +1 -0
  50. package/dist/svelte/components/InvoiceLineEditor.svelte +85 -0
  51. package/dist/svelte/components/InvoiceLineEditor.svelte.d.ts +8 -0
  52. package/dist/svelte/components/InvoiceLineEditor.svelte.d.ts.map +1 -0
  53. package/dist/svelte/components/InvoiceReview.svelte +23 -0
  54. package/dist/svelte/components/InvoiceReview.svelte.d.ts +10 -0
  55. package/dist/svelte/components/InvoiceReview.svelte.d.ts.map +1 -0
  56. package/dist/svelte/components/PartyAddressFields.svelte +95 -0
  57. package/dist/svelte/components/PartyAddressFields.svelte.d.ts +25 -0
  58. package/dist/svelte/components/PartyAddressFields.svelte.d.ts.map +1 -0
  59. package/dist/svelte/components/PartyContactFields.svelte +153 -0
  60. package/dist/svelte/components/PartyContactFields.svelte.d.ts +28 -0
  61. package/dist/svelte/components/PartyContactFields.svelte.d.ts.map +1 -0
  62. package/dist/svelte/components/PricingVersionDecision.svelte +88 -0
  63. package/dist/svelte/components/PricingVersionDecision.svelte.d.ts +35 -0
  64. package/dist/svelte/components/PricingVersionDecision.svelte.d.ts.map +1 -0
  65. package/dist/svelte/components/PricingVersionSummary.svelte +46 -0
  66. package/dist/svelte/components/PricingVersionSummary.svelte.d.ts +9 -0
  67. package/dist/svelte/components/PricingVersionSummary.svelte.d.ts.map +1 -0
  68. package/dist/svelte/components/PurchaseOrderEditor.svelte +210 -0
  69. package/dist/svelte/components/PurchaseOrderEditor.svelte.d.ts +79 -0
  70. package/dist/svelte/components/PurchaseOrderEditor.svelte.d.ts.map +1 -0
  71. package/dist/svelte/components/PurchaseSourceSelector.svelte +56 -0
  72. package/dist/svelte/components/PurchaseSourceSelector.svelte.d.ts +30 -0
  73. package/dist/svelte/components/PurchaseSourceSelector.svelte.d.ts.map +1 -0
  74. package/dist/svelte/components/PurchasingPlayground.svelte +133 -0
  75. package/dist/svelte/components/PurchasingPlayground.svelte.d.ts +9 -0
  76. package/dist/svelte/components/PurchasingPlayground.svelte.d.ts.map +1 -0
  77. package/dist/svelte/components/QuoteEditor.svelte +177 -0
  78. package/dist/svelte/components/QuoteEditor.svelte.d.ts +76 -0
  79. package/dist/svelte/components/QuoteEditor.svelte.d.ts.map +1 -0
  80. package/dist/svelte/components/QuotePlayground.svelte +108 -0
  81. package/dist/svelte/components/QuotePlayground.svelte.d.ts +10 -0
  82. package/dist/svelte/components/QuotePlayground.svelte.d.ts.map +1 -0
  83. package/dist/svelte/components/QuoteRevisionComparison.svelte +44 -0
  84. package/dist/svelte/components/QuoteRevisionComparison.svelte.d.ts +14 -0
  85. package/dist/svelte/components/QuoteRevisionComparison.svelte.d.ts.map +1 -0
  86. package/dist/svelte/components/QuoteRevisionHistory.svelte +55 -0
  87. package/dist/svelte/components/QuoteRevisionHistory.svelte.d.ts +15 -0
  88. package/dist/svelte/components/QuoteRevisionHistory.svelte.d.ts.map +1 -0
  89. package/dist/svelte/components/VendorDetail.svelte +134 -0
  90. package/dist/svelte/components/VendorDetail.svelte.d.ts +26 -0
  91. package/dist/svelte/components/VendorDetail.svelte.d.ts.map +1 -0
  92. package/dist/svelte/components/VendorDirectory.svelte +178 -0
  93. package/dist/svelte/components/VendorDirectory.svelte.d.ts +42 -0
  94. package/dist/svelte/components/VendorDirectory.svelte.d.ts.map +1 -0
  95. package/dist/svelte/components/VendorForm.svelte +224 -0
  96. package/dist/svelte/components/VendorForm.svelte.d.ts +42 -0
  97. package/dist/svelte/components/VendorForm.svelte.d.ts.map +1 -0
  98. package/dist/svelte/i18n.d.ts +102 -0
  99. package/dist/svelte/i18n.d.ts.map +1 -1
  100. package/dist/svelte/i18n.js +102 -0
  101. package/dist/svelte/index.d.ts +52 -0
  102. package/dist/svelte/index.d.ts.map +1 -1
  103. package/dist/svelte/index.js +49 -0
  104. package/dist/svelte/invoices/calculations.d.ts +121 -0
  105. package/dist/svelte/invoices/calculations.d.ts.map +1 -0
  106. package/dist/svelte/invoices/calculations.js +259 -0
  107. package/dist/svelte/invoices/currency.d.ts +9 -0
  108. package/dist/svelte/invoices/currency.d.ts.map +1 -0
  109. package/dist/svelte/invoices/currency.js +55 -0
  110. package/dist/svelte/invoices/fields.d.ts +6 -0
  111. package/dist/svelte/invoices/fields.d.ts.map +1 -0
  112. package/dist/svelte/invoices/fields.js +22 -0
  113. package/dist/svelte/invoices/messages.d.ts +53 -0
  114. package/dist/svelte/invoices/messages.d.ts.map +1 -0
  115. package/dist/svelte/invoices/messages.js +53 -0
  116. package/dist/svelte/invoices/types.d.ts +194 -0
  117. package/dist/svelte/invoices/types.d.ts.map +1 -0
  118. package/dist/svelte/invoices/types.js +1 -0
  119. package/dist/svelte/party-types.d.ts +203 -0
  120. package/dist/svelte/party-types.d.ts.map +1 -0
  121. package/dist/svelte/party-types.js +82 -0
  122. package/dist/svelte/playground/InvoicePreparationPreview.svelte +116 -0
  123. package/dist/svelte/playground/InvoicePreparationPreview.svelte.d.ts +4 -0
  124. package/dist/svelte/playground/InvoicePreparationPreview.svelte.d.ts.map +1 -0
  125. package/dist/svelte/playground/PartyFormPreview.svelte +211 -0
  126. package/dist/svelte/playground/PartyFormPreview.svelte.d.ts +8 -0
  127. package/dist/svelte/playground/PartyFormPreview.svelte.d.ts.map +1 -0
  128. package/dist/svelte/playground/PricingVersionPreview.svelte +55 -0
  129. package/dist/svelte/playground/PricingVersionPreview.svelte.d.ts +4 -0
  130. package/dist/svelte/playground/PricingVersionPreview.svelte.d.ts.map +1 -0
  131. package/dist/svelte/playground.d.ts +442 -3
  132. package/dist/svelte/playground.d.ts.map +1 -1
  133. package/dist/svelte/playground.js +199 -3
  134. package/dist/svelte/pricing-i18n.d.ts +10 -0
  135. package/dist/svelte/pricing-i18n.d.ts.map +1 -0
  136. package/dist/svelte/pricing-i18n.js +10 -0
  137. package/dist/svelte/pricing-types.d.ts +38 -0
  138. package/dist/svelte/pricing-types.d.ts.map +1 -0
  139. package/dist/svelte/pricing-types.js +1 -0
  140. package/dist/svelte/purchasing-i18n.d.ts +53 -0
  141. package/dist/svelte/purchasing-i18n.d.ts.map +1 -0
  142. package/dist/svelte/purchasing-i18n.js +53 -0
  143. package/dist/svelte/purchasing-types.d.ts +91 -0
  144. package/dist/svelte/purchasing-types.d.ts.map +1 -0
  145. package/dist/svelte/purchasing-types.js +13 -0
  146. package/dist/svelte/quote-i18n.d.ts +49 -0
  147. package/dist/svelte/quote-i18n.d.ts.map +1 -0
  148. package/dist/svelte/quote-i18n.js +49 -0
  149. package/dist/svelte/quote-types.d.ts +81 -0
  150. package/dist/svelte/quote-types.d.ts.map +1 -0
  151. package/dist/svelte/quote-types.js +51 -0
  152. package/dist/types/index.d.ts +13 -3
  153. package/dist/types/index.d.ts.map +1 -1
  154. package/dist/ui.d.ts.map +1 -1
  155. package/dist/ui.js +150 -6
  156. package/dist/ui.js.map +1 -1
  157. package/package.json +25 -13
  158. package/dist/chunks/units-CpBepqG1.js.map +0 -1
@@ -37,21 +37,217 @@ const sampleUnbilledItems = [
37
37
  category: 'QA',
38
38
  },
39
39
  ];
40
+ const sampleCustomer = {
41
+ id: 'customer-riverstone',
42
+ profileId: 'profile-riverstone',
43
+ profile: {
44
+ id: 'profile-riverstone',
45
+ name: 'Riverstone Newsroom',
46
+ email: 'accounts@riverstone.example',
47
+ description: 'Independent newsroom and publishing customer.',
48
+ identityKind: 'business',
49
+ },
50
+ status: 'active',
51
+ customerType: 'wholesale',
52
+ creditLimitMinor: 250000,
53
+ paymentTerms: 'Net 30',
54
+ taxExempt: false,
55
+ defaultShippingAddress: {
56
+ street1: '88 River Avenue',
57
+ city: 'Edmonton',
58
+ state: 'AB',
59
+ postalCode: 'T5J 0K1',
60
+ country: 'Canada',
61
+ },
62
+ contacts: [
63
+ {
64
+ id: 'contact-avery',
65
+ name: 'Avery Chen',
66
+ label: 'Accounts payable',
67
+ email: 'avery@riverstone.example',
68
+ phone: '+1 780 555 0142',
69
+ },
70
+ ],
71
+ };
72
+ const sampleVendor = {
73
+ id: 'vendor-northstar',
74
+ profileId: 'profile-northstar',
75
+ profile: {
76
+ id: 'profile-northstar',
77
+ name: 'Northstar Supply',
78
+ email: 'orders@northstar.example',
79
+ description: 'Regional materials and equipment supplier.',
80
+ identityKind: 'business',
81
+ },
82
+ status: 'active',
83
+ leadTimeDays: 7,
84
+ minimumOrderMinor: 50000,
85
+ paymentTerms: 'Net 45',
86
+ currency: 'CAD',
87
+ defaultContactEmail: 'orders@northstar.example',
88
+ defaultContactPhone: '+1 403 555 0188',
89
+ contacts: [
90
+ {
91
+ id: 'contact-morgan',
92
+ name: 'Morgan Lee',
93
+ label: 'Order desk',
94
+ email: 'morgan@northstar.example',
95
+ phone: '+1 403 555 0117',
96
+ },
97
+ ],
98
+ };
99
+ const loadCustomerDirectory = () => import('./components/CustomerDirectory.svelte');
100
+ const loadCustomerDetail = () => import('./components/CustomerDetail.svelte');
101
+ const loadPartyFormPreview = () => import('./playground/PartyFormPreview.svelte');
40
102
  const loadInvoiceActions = () => import('./components/InvoiceActions.svelte');
41
103
  const loadInvoiceCard = () => import('./components/InvoiceCard.svelte');
42
104
  const loadUnbilledItems = () => import('./components/UnbilledItems.svelte');
105
+ const loadVendorDirectory = () => import('./components/VendorDirectory.svelte');
106
+ const loadVendorDetail = () => import('./components/VendorDetail.svelte');
43
107
  export default {
44
108
  packageName: '@happyvertical/smrt-commerce',
45
109
  displayName: COMMERCE_MODULE_META.displayName,
46
110
  description: COMMERCE_MODULE_META.description,
47
111
  moduleMeta: COMMERCE_MODULE_META,
48
112
  entries: [
113
+ {
114
+ id: 'purchase-order-editor',
115
+ title: 'Purchase and award preparation',
116
+ description: 'Native allocation entry, review and retained uncertain-response recovery.',
117
+ loadComponent: () => import('./components/PurchasingPlayground.svelte'),
118
+ order: 30,
119
+ props: { reduction: false },
120
+ modes: { mock: { label: 'Interactive demo' } },
121
+ },
122
+ {
123
+ id: 'purchase-reduction',
124
+ title: 'Explicit allocation reduction',
125
+ description: 'Every retained allocation remains present; zero is explicit, never inferred from blank.',
126
+ loadComponent: () => import('./components/PurchasingPlayground.svelte'),
127
+ order: 31,
128
+ props: { reduction: true },
129
+ modes: { mock: { label: 'Interactive demo' } },
130
+ },
131
+ {
132
+ id: 'quote-editor',
133
+ title: 'Vendor quotation editor',
134
+ description: 'Edit, add/remove rows and recover a simulated rejected native submission.',
135
+ loadComponent: () => import('./components/QuotePlayground.svelte'),
136
+ order: 20,
137
+ props: { kind: 'vendor-quotation' },
138
+ modes: { mock: { label: 'Interactive demo' } },
139
+ },
140
+ {
141
+ id: 'customer-estimate-editor',
142
+ title: 'Customer estimate editor',
143
+ description: 'Customer estimate draft and retained revision comparison, without acceptance or budget writes.',
144
+ loadComponent: () => import('./components/QuotePlayground.svelte'),
145
+ order: 21,
146
+ props: { kind: 'customer-estimate' },
147
+ modes: { mock: { label: 'Interactive demo' } },
148
+ },
149
+ {
150
+ id: 'pricing-version-decision',
151
+ title: 'Pricing version decisions',
152
+ description: 'Compare retained estimates and rehearse a rejected decision without losing input.',
153
+ loadComponent: () => import('./playground/PricingVersionPreview.svelte'),
154
+ order: 30,
155
+ props: {},
156
+ modes: { mock: { label: 'Mock' } },
157
+ },
158
+ {
159
+ id: 'customer-directory',
160
+ title: 'Customer Directory',
161
+ description: 'Search, paging, responsive cards, and consumer-owned links.',
162
+ loadComponent: loadCustomerDirectory,
163
+ order: 1,
164
+ props: {
165
+ items: [{ data: sampleCustomer, href: '#customer-detail' }],
166
+ total: 26,
167
+ page: 1,
168
+ pageSize: 25,
169
+ nextHref: '#customer-page-2',
170
+ addHref: '#add-customer',
171
+ canCreate: true,
172
+ },
173
+ modes: { mock: { label: 'Mock' } },
174
+ },
175
+ {
176
+ id: 'customer-detail',
177
+ title: 'Customer Detail',
178
+ description: 'Profile identity, commercial terms, addresses, and contacts.',
179
+ loadComponent: loadCustomerDetail,
180
+ order: 2,
181
+ props: {
182
+ customer: sampleCustomer,
183
+ currency: 'CAD',
184
+ backHref: '#customers',
185
+ editHref: '#edit-customer',
186
+ canEdit: true,
187
+ },
188
+ modes: { mock: { label: 'Mock' } },
189
+ },
190
+ {
191
+ id: 'customer-form',
192
+ title: 'Customer Form',
193
+ description: 'Native create/edit submission with retained values and contacts.',
194
+ loadComponent: loadPartyFormPreview,
195
+ order: 3,
196
+ props: { kind: 'customer' },
197
+ modes: { mock: { label: 'Mock' } },
198
+ },
199
+ {
200
+ id: 'vendor-directory',
201
+ title: 'Vendor Directory',
202
+ description: 'Search, paging, empty/error states, and consumer-owned links.',
203
+ loadComponent: loadVendorDirectory,
204
+ order: 4,
205
+ props: {
206
+ items: [{ data: sampleVendor, href: '#vendor-detail' }],
207
+ total: 1,
208
+ addHref: '#add-vendor',
209
+ canCreate: true,
210
+ },
211
+ modes: { mock: { label: 'Mock' } },
212
+ },
213
+ {
214
+ id: 'vendor-detail',
215
+ title: 'Vendor Detail',
216
+ description: 'Profile identity, purchasing terms, and contact composition.',
217
+ loadComponent: loadVendorDetail,
218
+ order: 5,
219
+ props: {
220
+ vendor: sampleVendor,
221
+ backHref: '#vendors',
222
+ editHref: '#edit-vendor',
223
+ canEdit: true,
224
+ },
225
+ modes: { mock: { label: 'Mock' } },
226
+ },
227
+ {
228
+ id: 'vendor-form',
229
+ title: 'Vendor Form',
230
+ description: 'Native create/edit submission with retained currency text and contacts.',
231
+ loadComponent: loadPartyFormPreview,
232
+ order: 6,
233
+ props: { kind: 'vendor' },
234
+ modes: { mock: { label: 'Mock' } },
235
+ },
236
+ {
237
+ id: 'invoice-preparation',
238
+ title: 'Invoice Preparation',
239
+ description: 'Edit invoice lines, prices, discounts and tax, with optional source allocations and retained rejection recovery.',
240
+ loadComponent: () => import('./playground/InvoicePreparationPreview.svelte'),
241
+ order: 7,
242
+ props: {},
243
+ modes: { mock: { label: 'Mock' } },
244
+ },
49
245
  {
50
246
  id: 'invoice-card',
51
247
  title: 'Invoice Card',
52
248
  description: 'Compact invoice summary card used in billing and receivables views.',
53
249
  loadComponent: loadInvoiceCard,
54
- order: 1,
250
+ order: 20,
55
251
  props: {
56
252
  invoice: sampleInvoice,
57
253
  currency: 'CAD',
@@ -68,7 +264,7 @@ export default {
68
264
  title: 'Invoice Actions',
69
265
  description: 'Status-aware billing actions for sending, printing, exporting, and payment confirmation.',
70
266
  loadComponent: loadInvoiceActions,
71
- order: 2,
267
+ order: 21,
72
268
  props: {
73
269
  status: 'sent',
74
270
  onmarkpaid: noop,
@@ -86,7 +282,7 @@ export default {
86
282
  title: 'Unbilled Items',
87
283
  description: 'Selectable unbilled work list for creating a new invoice from accumulated items.',
88
284
  loadComponent: loadUnbilledItems,
89
- order: 3,
285
+ order: 22,
90
286
  props: {
91
287
  items: sampleUnbilledItems,
92
288
  currency: 'CAD',
@@ -0,0 +1,10 @@
1
+ export declare const PRICING_MESSAGES: {
2
+ readonly 'commerce.pricing.total': "commerce.pricing.total";
3
+ readonly 'commerce.pricing.unknown': "commerce.pricing.unknown";
4
+ readonly 'commerce.pricing.sources': "commerce.pricing.sources";
5
+ readonly 'commerce.pricing.no_sources': "commerce.pricing.no_sources";
6
+ readonly 'commerce.pricing.reason': "commerce.pricing.reason";
7
+ readonly 'commerce.pricing.read_only': "commerce.pricing.read_only";
8
+ readonly 'commerce.pricing.no_actions': "commerce.pricing.no_actions";
9
+ };
10
+ //# sourceMappingURL=pricing-i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/pricing-i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB;;;;;;;;CAQ3B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { defineMessages } from '@happyvertical/smrt-ui/i18n';
2
+ export const PRICING_MESSAGES = defineMessages({
3
+ 'commerce.pricing.total': 'Total',
4
+ 'commerce.pricing.unknown': 'Amount unavailable',
5
+ 'commerce.pricing.sources': 'Retained pricing sources',
6
+ 'commerce.pricing.no_sources': 'No pricing sources supplied.',
7
+ 'commerce.pricing.reason': 'Decision reason',
8
+ 'commerce.pricing.read_only': 'This version is read-only.',
9
+ 'commerce.pricing.no_actions': 'No decisions are currently available.',
10
+ });
@@ -0,0 +1,38 @@
1
+ import type { QuoteRevision } from './quote-types.js';
2
+ /** A retained pricing source; application policy owns selection and eligibility. */
3
+ export interface PricingVersionSource {
4
+ /** Stable retained source identity. */
5
+ id: string;
6
+ /** Human-readable source label supplied by the consumer. */
7
+ label: string;
8
+ /** Included amount in the version currency's integer minor units; null is unknown. */
9
+ amountMinor: number | null;
10
+ /** Retained explanation, scope or exclusion text. */
11
+ description?: string;
12
+ }
13
+ /** Pricing version snapshot reuses the quote/estimate revision contract. */
14
+ export interface PricingVersionData extends QuoteRevision {
15
+ /** Retained pricing sources, already authorized for this viewer. */
16
+ sources?: readonly PricingVersionSource[];
17
+ }
18
+ /** Native submitter contract; the UI does not infer available decisions. */
19
+ export interface PricingDecisionAction {
20
+ /** Visible localized action label supplied by the application. */
21
+ label: string;
22
+ /** Exact native submitter field name. */
23
+ name: string;
24
+ /** Exact native submitter intent value. */
25
+ value: string;
26
+ /** Whether this action is unavailable in the current server-owned state. */
27
+ disabled?: boolean;
28
+ /** Optional native action URL overriding the enclosing form action. */
29
+ formAction?: string;
30
+ }
31
+ /** Caller-owned hidden entry; arrays preserve repeated names and order. */
32
+ export interface PricingHiddenField {
33
+ /** Exact native field name, including request/tenant/version identity if needed. */
34
+ name: string;
35
+ /** Exact retained value; never generated or rotated by the component. */
36
+ value: string;
37
+ }
38
+ //# sourceMappingURL=pricing-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-types.d.ts","sourceRoot":"","sources":["../../src/svelte/pricing-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,oFAAoF;AACpF,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC3C;AAED,4EAA4E;AAC5E,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ /** Localizable purchasing presentation text; domain names and policy remain caller-owned. */
2
+ export declare const P: {
3
+ readonly 'commerce.purchase.source': "commerce.purchase.source";
4
+ readonly 'commerce.purchase.choose': "commerce.purchase.choose";
5
+ readonly 'commerce.purchase.use': "commerce.purchase.use";
6
+ readonly 'commerce.purchase.empty_sources': "commerce.purchase.empty_sources";
7
+ readonly 'commerce.purchase.create': "commerce.purchase.create";
8
+ readonly 'commerce.purchase.amend': "commerce.purchase.amend";
9
+ readonly 'commerce.purchase.reduce': "commerce.purchase.reduce";
10
+ readonly 'commerce.purchase.boundary': "commerce.purchase.boundary";
11
+ readonly 'commerce.purchase.reduction_hint': "commerce.purchase.reduction_hint";
12
+ readonly 'commerce.purchase.instrument': "commerce.purchase.instrument";
13
+ readonly 'commerce.purchase.choose_instrument': "commerce.purchase.choose_instrument";
14
+ readonly 'commerce.purchase.allocations': "commerce.purchase.allocations";
15
+ readonly 'commerce.purchase.source_amount': "commerce.purchase.source_amount";
16
+ readonly 'commerce.purchase.minimum': "commerce.purchase.minimum";
17
+ readonly 'commerce.purchase.maximum': "commerce.purchase.maximum";
18
+ readonly 'commerce.purchase.unavailable': "commerce.purchase.unavailable";
19
+ readonly 'commerce.purchase.unknown': "commerce.purchase.unknown";
20
+ readonly 'commerce.purchase.empty_allocations': "commerce.purchase.empty_allocations";
21
+ readonly 'commerce.purchase.tax': "commerce.purchase.tax";
22
+ readonly 'commerce.purchase.scope': "commerce.purchase.scope";
23
+ readonly 'commerce.purchase.inclusions': "commerce.purchase.inclusions";
24
+ readonly 'commerce.purchase.exclusions': "commerce.purchase.exclusions";
25
+ readonly 'commerce.purchase.reason': "commerce.purchase.reason";
26
+ readonly 'commerce.purchase.review': "commerce.purchase.review";
27
+ readonly 'commerce.purchase.review_button': "commerce.purchase.review_button";
28
+ readonly 'commerce.purchase.confirm': "commerce.purchase.confirm";
29
+ readonly 'commerce.purchase.record': "commerce.purchase.record";
30
+ readonly 'commerce.purchase.edit': "commerce.purchase.edit";
31
+ readonly 'commerce.purchase.cancel': "commerce.purchase.cancel";
32
+ readonly 'commerce.purchase.add': "commerce.purchase.add";
33
+ readonly 'commerce.purchase.remove': "commerce.purchase.remove";
34
+ readonly 'commerce.purchase.readonly': "commerce.purchase.readonly";
35
+ readonly 'commerce.purchase.total': "commerce.purchase.total";
36
+ readonly 'commerce.purchase.uncertain': "commerce.purchase.uncertain";
37
+ readonly 'commerce.purchase.demo_added': "commerce.purchase.demo_added";
38
+ readonly 'commerce.purchase.demo_removed': "commerce.purchase.demo_removed";
39
+ readonly 'commerce.purchase.demo_invalid': "commerce.purchase.demo_invalid";
40
+ readonly 'commerce.purchase.demo_authority': "commerce.purchase.demo_authority";
41
+ readonly 'commerce.purchase.demo_review': "commerce.purchase.demo_review";
42
+ readonly 'commerce.purchase.demo_edit': "commerce.purchase.demo_edit";
43
+ readonly 'commerce.purchase.demo_uncertain': "commerce.purchase.demo_uncertain";
44
+ readonly 'commerce.purchase.demo_source': "commerce.purchase.demo_source";
45
+ readonly 'commerce.purchase.demo_notice': "commerce.purchase.demo_notice";
46
+ readonly 'commerce.purchase.demo_amendment': "commerce.purchase.demo_amendment";
47
+ readonly 'commerce.purchase.demo_reduction': "commerce.purchase.demo_reduction";
48
+ readonly 'commerce.purchase.demo_unavailable': "commerce.purchase.demo_unavailable";
49
+ readonly 'commerce.purchase.demo_order': "commerce.purchase.demo_order";
50
+ readonly 'commerce.purchase.demo_agreement': "commerce.purchase.demo_agreement";
51
+ readonly 'commerce.purchase.demo_additional': "commerce.purchase.demo_additional";
52
+ };
53
+ //# sourceMappingURL=purchasing-i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchasing-i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/purchasing-i18n.ts"],"names":[],"mappings":"AACA,6FAA6F;AAC7F,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DZ,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { defineMessages } from '@happyvertical/smrt-ui/i18n';
2
+ /** Localizable purchasing presentation text; domain names and policy remain caller-owned. */
3
+ export const P = defineMessages({
4
+ 'commerce.purchase.source': 'Purchasing source',
5
+ 'commerce.purchase.choose': 'Choose a vendor and source',
6
+ 'commerce.purchase.use': 'Use this source',
7
+ 'commerce.purchase.empty_sources': 'No sources available.',
8
+ 'commerce.purchase.create': 'Prepare purchase or award',
9
+ 'commerce.purchase.amend': 'Amend purchase or award',
10
+ 'commerce.purchase.reduce': 'Reduce or close retained allocations',
11
+ 'commerce.purchase.boundary': 'Selecting a source does not record a commitment. Recording requires a separate reviewed decision.',
12
+ 'commerce.purchase.reduction_hint': 'Enter every retained allocation explicitly. Enter zero to close an allocation; leaving it blank does not mean zero.',
13
+ 'commerce.purchase.instrument': 'Instrument',
14
+ 'commerce.purchase.choose_instrument': 'Choose an instrument',
15
+ 'commerce.purchase.allocations': 'Explicit allocation amounts, including tax',
16
+ 'commerce.purchase.source_amount': 'Source amount',
17
+ 'commerce.purchase.minimum': 'Minimum',
18
+ 'commerce.purchase.maximum': 'Maximum',
19
+ 'commerce.purchase.unavailable': 'Amount unavailable',
20
+ 'commerce.purchase.unknown': 'Unknown',
21
+ 'commerce.purchase.empty_allocations': 'No allocations supplied.',
22
+ 'commerce.purchase.tax': 'Included tax',
23
+ 'commerce.purchase.scope': 'Ordered or awarded scope',
24
+ 'commerce.purchase.inclusions': 'Inclusions',
25
+ 'commerce.purchase.exclusions': 'Exclusions',
26
+ 'commerce.purchase.reason': 'Decision evidence or amendment reason',
27
+ 'commerce.purchase.review': 'Review before recording',
28
+ 'commerce.purchase.review_button': 'Review purchase or award',
29
+ 'commerce.purchase.confirm': 'I explicitly authorize this purchase, award or recorded amendment.',
30
+ 'commerce.purchase.record': 'Record reviewed decision',
31
+ 'commerce.purchase.edit': 'Back to details',
32
+ 'commerce.purchase.cancel': 'Cancel',
33
+ 'commerce.purchase.add': 'Add allocation',
34
+ 'commerce.purchase.remove': 'Remove {label}',
35
+ 'commerce.purchase.readonly': 'Read only',
36
+ 'commerce.purchase.total': 'Reviewed total',
37
+ 'commerce.purchase.uncertain': 'Retry the same reviewed submission. Its request identity and review fingerprint are retained.',
38
+ 'commerce.purchase.demo_added': 'Demo: allocation added; entered values retained.',
39
+ 'commerce.purchase.demo_removed': 'Demo: allocation removed.',
40
+ 'commerce.purchase.demo_invalid': 'Demo validation: enter valid CAD amounts and included tax no greater than the total. Your values are retained.',
41
+ 'commerce.purchase.demo_authority': 'Local CAD demonstration only; the application server owns validation and authorization.',
42
+ 'commerce.purchase.demo_review': 'Demo review of supplied source evidence.',
43
+ 'commerce.purchase.demo_edit': 'Demo: return to editing; request identity retained.',
44
+ 'commerce.purchase.demo_uncertain': 'Demo uncertain response. Values, request identity and review fingerprint retained; no financial record was written.',
45
+ 'commerce.purchase.demo_source': 'Demo source selected; no commitment recorded.',
46
+ 'commerce.purchase.demo_notice': 'This demonstration simulates preparation, review and an uncertain response. No purchase or award is written.',
47
+ 'commerce.purchase.demo_amendment': 'Preview ordinary amendment',
48
+ 'commerce.purchase.demo_reduction': 'Preview explicit reduction',
49
+ 'commerce.purchase.demo_unavailable': 'Unavailable source',
50
+ 'commerce.purchase.demo_order': 'Purchase order',
51
+ 'commerce.purchase.demo_agreement': 'Agreement',
52
+ 'commerce.purchase.demo_additional': 'Additional allocation {number}',
53
+ });
@@ -0,0 +1,91 @@
1
+ import type { QuoteMoneyMinor } from './quote-types.js';
2
+ /** Caller-owned purchasing source identity and display evidence. */
3
+ export interface PurchaseSourceOption {
4
+ /** Stable source selection value, interpreted by the server. */
5
+ id: string;
6
+ /** Human source label. */
7
+ label: string;
8
+ /** Vendor display name; no identity migration is implied. */
9
+ vendor: string;
10
+ /** Caller-selected source availability; never an authorization grant. */
11
+ disabled?: boolean;
12
+ /** Reason unavailable, expiry/supersession or other evidence. */
13
+ notice?: string;
14
+ }
15
+ /** Fixed retained allocation or a caller-added draft row. */
16
+ export interface PurchaseAllocationDraft {
17
+ /** Stable allocation identity posted even for explicit zero. */
18
+ id: string;
19
+ /** Caller-provided allocation label; no construction-specific semantics. */
20
+ label: string;
21
+ /** Raw major-unit input string, including invalid rejected input. */
22
+ amount: string;
23
+ /** Whether this row exists in the predecessor; reductions must retain it. */
24
+ retained?: boolean;
25
+ /** Caller-selected requirement for non-reduction editing. */
26
+ required?: boolean;
27
+ /** Optional retained/source amount; null means unknown, not zero. */
28
+ sourceMinor?: number | null;
29
+ /** Optional caller-calculated lower bound, displayed in currency units. */
30
+ minimumMinor?: number;
31
+ /** Optional caller-calculated upper bound, displayed in currency units. */
32
+ maximumMinor?: number;
33
+ }
34
+ /** Input values remain strings until the application validates them. */
35
+ export interface PurchaseDraftValues {
36
+ /** Caller-defined instrument (e.g. purchase-order or subcontract). */
37
+ instrument: string;
38
+ /** Tax included in allocation amounts, as raw major-unit text. */
39
+ tax: string;
40
+ /** Explicit awarded or ordered scope. */
41
+ scope: string;
42
+ /** Included goods or services. */
43
+ inclusions: string;
44
+ /** Excluded goods or services. */
45
+ exclusions: string;
46
+ /** Human decision evidence or amendment reason. */
47
+ reason: string;
48
+ /** Every retained allocation, even when its submitted amount is empty or zero. */
49
+ allocations: PurchaseAllocationDraft[];
50
+ }
51
+ /** A server-produced review snapshot; rendering it never approves the command. */
52
+ export interface PurchaseReviewSnapshot {
53
+ /** Caller-owned fingerprint that the server validates against submitted values. */
54
+ fingerprint: string;
55
+ /** Human vendor/source label retained by the reviewed command. */
56
+ sourceLabel: string;
57
+ /** Exact reviewed total. */
58
+ total: QuoteMoneyMinor;
59
+ /** Included tax in the same currency and scale as total. */
60
+ taxMinor: number;
61
+ /** Retained awarded scope. */
62
+ scope: string;
63
+ /** Caller-owned status, exceptions or historical-source notices. */
64
+ notices?: string[];
65
+ }
66
+ /** Native POST field-name adaptation without changing an existing route contract. */
67
+ export interface PurchaseFieldNames {
68
+ /** Instrument field name. */
69
+ instrument: string;
70
+ /** Included tax field name. */
71
+ tax: string;
72
+ /** Scope field name. */
73
+ scope: string;
74
+ /** Inclusions field name. */
75
+ inclusions: string;
76
+ /** Exclusions field name. */
77
+ exclusions: string;
78
+ /** Decision/amendment reason field name. */
79
+ reason: string;
80
+ /** Repeated allocation ID and major-unit amount fields. */
81
+ allocationId: string;
82
+ /** Repeated major-unit input field. */
83
+ allocationAmount: string;
84
+ /** Caller review fingerprint name. */
85
+ fingerprint: string;
86
+ /** Explicit confirmation checkbox name. */
87
+ confirmation: string;
88
+ }
89
+ /** Conventional defaults; existing consumers can adapt every payload field. */
90
+ export declare const purchaseFieldNames: PurchaseFieldNames;
91
+ //# sourceMappingURL=purchasing-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchasing-types.d.ts","sourceRoot":"","sources":["../../src/svelte/purchasing-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wEAAwE;AACxE,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,kFAAkF;AAClF,MAAM,WAAW,sBAAsB;IACrC,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,KAAK,EAAE,eAAe,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,EAAE,kBAWhC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Conventional defaults; existing consumers can adapt every payload field. */
2
+ export const purchaseFieldNames = {
3
+ instrument: 'instrument',
4
+ tax: 'tax',
5
+ scope: 'scope',
6
+ inclusions: 'inclusions',
7
+ exclusions: 'exclusions',
8
+ reason: 'reason',
9
+ allocationId: 'allocationId',
10
+ allocationAmount: 'allocationAmount',
11
+ fingerprint: 'reviewFingerprint',
12
+ confirmation: 'confirm',
13
+ };
@@ -0,0 +1,49 @@
1
+ /** Localizable quotation and estimate presentation messages. */
2
+ export declare const Q: {
3
+ readonly 'commerce.quote.vendor': "commerce.quote.vendor";
4
+ readonly 'commerce.quote.estimate': "commerce.quote.estimate";
5
+ readonly 'commerce.quote.vendor_party': "commerce.quote.vendor_party";
6
+ readonly 'commerce.quote.customer_party': "commerce.quote.customer_party";
7
+ readonly 'commerce.quote.choose': "commerce.quote.choose";
8
+ readonly 'commerce.quote.reference': "commerce.quote.reference";
9
+ readonly 'commerce.quote.date': "commerce.quote.date";
10
+ readonly 'commerce.quote.expiry': "commerce.quote.expiry";
11
+ readonly 'commerce.quote.currency': "commerce.quote.currency";
12
+ readonly 'commerce.quote.total': "commerce.quote.total";
13
+ readonly 'commerce.quote.tax': "commerce.quote.tax";
14
+ readonly 'commerce.quote.scope': "commerce.quote.scope";
15
+ readonly 'commerce.quote.inclusions': "commerce.quote.inclusions";
16
+ readonly 'commerce.quote.exclusions': "commerce.quote.exclusions";
17
+ readonly 'commerce.quote.reason': "commerce.quote.reason";
18
+ readonly 'commerce.quote.lines': "commerce.quote.lines";
19
+ readonly 'commerce.quote.line': "commerce.quote.line";
20
+ readonly 'commerce.quote.description': "commerce.quote.description";
21
+ readonly 'commerce.quote.quantity': "commerce.quote.quantity";
22
+ readonly 'commerce.quote.rate': "commerce.quote.rate";
23
+ readonly 'commerce.quote.add': "commerce.quote.add";
24
+ readonly 'commerce.quote.remove': "commerce.quote.remove";
25
+ readonly 'commerce.quote.save': "commerce.quote.save";
26
+ readonly 'commerce.quote.cancel': "commerce.quote.cancel";
27
+ readonly 'commerce.quote.empty_lines': "commerce.quote.empty_lines";
28
+ readonly 'commerce.quote.vendor_hint': "commerce.quote.vendor_hint";
29
+ readonly 'commerce.quote.estimate_hint': "commerce.quote.estimate_hint";
30
+ readonly 'commerce.quote.history': "commerce.quote.history";
31
+ readonly 'commerce.quote.empty_history': "commerce.quote.empty_history";
32
+ readonly 'commerce.quote.unavailable': "commerce.quote.unavailable";
33
+ readonly 'commerce.quote.unknown': "commerce.quote.unknown";
34
+ readonly 'commerce.quote.compare': "commerce.quote.compare";
35
+ readonly 'commerce.quote.before': "commerce.quote.before";
36
+ readonly 'commerce.quote.after': "commerce.quote.after";
37
+ readonly 'commerce.quote.delta': "commerce.quote.delta";
38
+ readonly 'commerce.quote.incomparable': "commerce.quote.incomparable";
39
+ readonly 'commerce.quote.view': "commerce.quote.view";
40
+ readonly 'commerce.quote.readonly': "commerce.quote.readonly";
41
+ readonly 'commerce.quote.demo_notice': "commerce.quote.demo_notice";
42
+ readonly 'commerce.quote.demo_enable': "commerce.quote.demo_enable";
43
+ readonly 'commerce.quote.demo_readonly': "commerce.quote.demo_readonly";
44
+ readonly 'commerce.quote.demo_added': "commerce.quote.demo_added";
45
+ readonly 'commerce.quote.demo_removed': "commerce.quote.demo_removed";
46
+ readonly 'commerce.quote.demo_error': "commerce.quote.demo_error";
47
+ readonly 'commerce.quote.demo_rejected': "commerce.quote.demo_rejected";
48
+ };
49
+ //# sourceMappingURL=quote-i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/quote-i18n.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDZ,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { defineMessages } from '@happyvertical/smrt-ui/i18n';
2
+ /** Localizable quotation and estimate presentation messages. */
3
+ export const Q = defineMessages({
4
+ 'commerce.quote.vendor': 'Vendor quotation',
5
+ 'commerce.quote.estimate': 'Customer estimate',
6
+ 'commerce.quote.vendor_party': 'Vendor',
7
+ 'commerce.quote.customer_party': 'Customer',
8
+ 'commerce.quote.choose': 'Choose a counterparty',
9
+ 'commerce.quote.reference': 'Reference',
10
+ 'commerce.quote.date': 'Document date',
11
+ 'commerce.quote.expiry': 'Valid until',
12
+ 'commerce.quote.currency': 'Currency',
13
+ 'commerce.quote.total': 'Total, including tax',
14
+ 'commerce.quote.tax': 'Tax included in total',
15
+ 'commerce.quote.scope': 'Scope',
16
+ 'commerce.quote.inclusions': 'Inclusions',
17
+ 'commerce.quote.exclusions': 'Exclusions',
18
+ 'commerce.quote.reason': 'Reason for revision',
19
+ 'commerce.quote.lines': 'Source lines',
20
+ 'commerce.quote.line': 'Line {number}',
21
+ 'commerce.quote.description': 'Description',
22
+ 'commerce.quote.quantity': 'Quantity',
23
+ 'commerce.quote.rate': 'Unit rate',
24
+ 'commerce.quote.add': 'Add line',
25
+ 'commerce.quote.remove': 'Remove line {number}',
26
+ 'commerce.quote.save': 'Save draft',
27
+ 'commerce.quote.cancel': 'Cancel',
28
+ 'commerce.quote.empty_lines': 'No source lines supplied.',
29
+ 'commerce.quote.vendor_hint': 'Recording a quotation does not select pricing or award work.',
30
+ 'commerce.quote.estimate_hint': 'Preparing an estimate does not accept it or change an approved budget.',
31
+ 'commerce.quote.history': 'Revision history',
32
+ 'commerce.quote.empty_history': 'No revisions yet.',
33
+ 'commerce.quote.unavailable': 'Amount unavailable',
34
+ 'commerce.quote.unknown': 'Unknown',
35
+ 'commerce.quote.compare': 'Revision comparison',
36
+ 'commerce.quote.before': 'Previous',
37
+ 'commerce.quote.after': 'Current',
38
+ 'commerce.quote.delta': 'Change in total',
39
+ 'commerce.quote.incomparable': 'Totals cannot be compared across document kinds, currencies, scales or unknown pricing.',
40
+ 'commerce.quote.view': 'View revision',
41
+ 'commerce.quote.readonly': 'Read only',
42
+ 'commerce.quote.demo_notice': 'This demo simulates validation failure locally. It does not save a quotation or estimate.',
43
+ 'commerce.quote.demo_enable': 'Enable editing',
44
+ 'commerce.quote.demo_readonly': 'Preview read only',
45
+ 'commerce.quote.demo_added': 'Demo: line added; entered values retained.',
46
+ 'commerce.quote.demo_removed': 'Demo: line removed; entered values retained.',
47
+ 'commerce.quote.demo_error': 'Demo server validation: confirm the total.',
48
+ 'commerce.quote.demo_rejected': 'Demo rejected submission. Values and request identity remain available for retry.',
49
+ });