@happyvertical/smrt-commerce 0.55.7 → 0.55.9

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 (47) hide show
  1. package/AGENTS.md +4 -0
  2. package/README.md +34 -0
  3. package/agents/customer-vendor-ui.md +31 -0
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +642 -240
  7. package/dist/index.js.map +1 -1
  8. package/dist/manifest.json +1449 -109
  9. package/dist/models/Contract.d.ts.map +1 -1
  10. package/dist/models/ContractLineItem.d.ts.map +1 -1
  11. package/dist/models/Customer.d.ts.map +1 -1
  12. package/dist/models/Fulfillment.d.ts.map +1 -1
  13. package/dist/models/FulfillmentLineItem.d.ts.map +1 -1
  14. package/dist/models/Invoice.d.ts.map +1 -1
  15. package/dist/models/InvoiceLineItem.d.ts.map +1 -1
  16. package/dist/models/Payment.d.ts.map +1 -1
  17. package/dist/models/PaymentAllocation.d.ts.map +1 -1
  18. package/dist/models/Vendor.d.ts.map +1 -1
  19. package/dist/playground.js +19 -0
  20. package/dist/playground.js.map +1 -1
  21. package/dist/recipes.d.ts +733 -19
  22. package/dist/recipes.d.ts.map +1 -1
  23. package/dist/smrt-knowledge.json +1147 -123
  24. package/dist/svelte/components/CustomerSelect.svelte +53 -0
  25. package/dist/svelte/components/CustomerSelect.svelte.d.ts +47 -0
  26. package/dist/svelte/components/CustomerSelect.svelte.d.ts.map +1 -0
  27. package/dist/svelte/components/PartySelect.svelte +138 -0
  28. package/dist/svelte/components/PartySelect.svelte.d.ts +70 -0
  29. package/dist/svelte/components/PartySelect.svelte.d.ts.map +1 -0
  30. package/dist/svelte/components/VendorSelect.svelte +53 -0
  31. package/dist/svelte/components/VendorSelect.svelte.d.ts +47 -0
  32. package/dist/svelte/components/VendorSelect.svelte.d.ts.map +1 -0
  33. package/dist/svelte/i18n.d.ts +8 -0
  34. package/dist/svelte/i18n.d.ts.map +1 -1
  35. package/dist/svelte/i18n.js +8 -0
  36. package/dist/svelte/index.d.ts +6 -0
  37. package/dist/svelte/index.d.ts.map +1 -1
  38. package/dist/svelte/index.js +6 -0
  39. package/dist/svelte/playground/PartySelectPreview.svelte +108 -0
  40. package/dist/svelte/playground/PartySelectPreview.svelte.d.ts +8 -0
  41. package/dist/svelte/playground/PartySelectPreview.svelte.d.ts.map +1 -0
  42. package/dist/svelte/playground.d.ts.map +1 -1
  43. package/dist/svelte/playground.js +19 -0
  44. package/dist/ui.d.ts.map +1 -1
  45. package/dist/ui.js +20 -0
  46. package/dist/ui.js.map +1 -1
  47. package/package.json +16 -12
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ /** Selects the in-memory customer or vendor selector demonstration. */
3
+ kind: 'customer' | 'vendor';
4
+ }
5
+ declare const PartySelectPreview: import("svelte").Component<Props, {}, "">;
6
+ type PartySelectPreview = ReturnType<typeof PartySelectPreview>;
7
+ export default PartySelectPreview;
8
+ //# sourceMappingURL=PartySelectPreview.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PartySelectPreview.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/playground/PartySelectPreview.svelte.ts"],"names":[],"mappings":"AAUA,UAAU,KAAK;IACb,uEAAuE;IACvE,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC7B;AAuFD,QAAA,MAAM,kBAAkB,2CAAwC,CAAC;AACjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChE,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../src/svelte/playground.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHA,wBAkNE"}
1
+ {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../src/svelte/playground.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHA,wBAsOE"}
@@ -98,6 +98,7 @@ const sampleVendor = {
98
98
  };
99
99
  const loadCustomerDirectory = () => import('./components/CustomerDirectory.svelte');
100
100
  const loadCustomerDetail = () => import('./components/CustomerDetail.svelte');
101
+ const loadPartySelectPreview = () => import('./playground/PartySelectPreview.svelte');
101
102
  const loadPartyFormPreview = () => import('./playground/PartyFormPreview.svelte');
102
103
  const loadInvoiceActions = () => import('./components/InvoiceActions.svelte');
103
104
  const loadInvoiceCard = () => import('./components/InvoiceCard.svelte');
@@ -233,6 +234,24 @@ export default {
233
234
  props: { kind: 'vendor' },
234
235
  modes: { mock: { label: 'Mock' } },
235
236
  },
237
+ {
238
+ id: 'customer-select',
239
+ title: 'Customer Select',
240
+ description: 'Searchable customer picker with status and type, resolving the current value and offering a new-customer action.',
241
+ loadComponent: loadPartySelectPreview,
242
+ order: 10,
243
+ props: { kind: 'customer' },
244
+ modes: { mock: { label: 'Mock' } },
245
+ },
246
+ {
247
+ id: 'vendor-select',
248
+ title: 'Vendor Select',
249
+ description: 'Searchable vendor picker with status; the caller supplies the lookup.',
250
+ loadComponent: loadPartySelectPreview,
251
+ order: 11,
252
+ props: { kind: 'vendor' },
253
+ modes: { mock: { label: 'Mock' } },
254
+ },
236
255
  {
237
256
  id: 'invoice-preparation',
238
257
  title: 'Invoice Preparation',
package/dist/ui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA4M1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAuBlC,CAAC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAkO1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAuBlC,CAAC"}
package/dist/ui.js CHANGED
@@ -117,6 +117,26 @@ var COMMERCE_UI_SLOTS = {
117
117
  order: 6,
118
118
  propsInterface: "VendorFormProps"
119
119
  },
120
+ "customer-select": {
121
+ id: "customer-select",
122
+ label: "Customer Select",
123
+ description: "Searchable customer picker for relation fields; the caller supplies the lookup",
124
+ icon: "users",
125
+ category: "form",
126
+ order: 10,
127
+ propsInterface: "CustomerSelectProps",
128
+ selects: "@happyvertical/smrt-commerce:Customer"
129
+ },
130
+ "vendor-select": {
131
+ id: "vendor-select",
132
+ label: "Vendor Select",
133
+ description: "Searchable vendor picker for relation fields; the caller supplies the lookup",
134
+ icon: "building",
135
+ category: "form",
136
+ order: 11,
137
+ propsInterface: "VendorSelectProps",
138
+ selects: "@happyvertical/smrt-commerce:Vendor"
139
+ },
120
140
  "party-contact-fields": {
121
141
  id: "party-contact-fields",
122
142
  label: "Party Contact Fields",
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","names":[],"sources":["../src/ui.ts"],"sourcesContent":["/**\n * Commerce Module UI Slot Declarations\n *\n * This file defines the UI extension points for the commerce module.\n * UI components are implemented in the ./svelte subpath.\n *\n * @example Usage\n * ```typescript\n * // In application code\n * import { COMMERCE_MODULE_META } from '@happyvertical/smrt-commerce';\n * console.log(COMMERCE_MODULE_META.uiSlots);\n * ```\n */\n\nimport type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\n/**\n * Commerce module UI slots\n */\nexport const COMMERCE_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'purchase-order-editor': {\n id: 'purchase-order-editor',\n label: 'Purchase / Award Editor',\n description:\n 'Native allocation preparation, review and explicit confirmation',\n icon: 'file-text',\n category: 'form',\n order: 30,\n propsInterface: 'PurchaseOrderEditorProps',\n },\n 'purchase-source-selector': {\n id: 'purchase-source-selector',\n label: 'Purchasing Source',\n description: 'Caller-authorized vendor and source selection',\n icon: 'list',\n category: 'form',\n order: 31,\n propsInterface: 'PurchaseSourceSelectorProps',\n },\n\n 'quote-editor': {\n id: 'quote-editor',\n label: 'Quotation / Estimate Editor',\n description:\n 'Native retained-value document editor with caller-owned actions',\n icon: 'file-text',\n category: 'form',\n order: 20,\n propsInterface: 'QuoteEditorProps',\n },\n 'quote-revision-history': {\n id: 'quote-revision-history',\n label: 'Quote Revision History',\n description: 'Read-only retained quotation and estimate revisions',\n icon: 'clock',\n category: 'list',\n order: 21,\n propsInterface: 'QuoteRevisionHistoryProps',\n },\n 'quote-revision-comparison': {\n id: 'quote-revision-comparison',\n label: 'Quote Revision Comparison',\n description: 'Compare explicit minor-unit revision totals and scope',\n icon: 'file-text',\n category: 'display',\n order: 22,\n propsInterface: 'QuoteRevisionComparisonProps',\n },\n\n 'pricing-version-summary': {\n id: 'pricing-version-summary',\n label: 'Pricing Version Summary',\n description: 'Retained estimate version and source amounts',\n icon: 'file-text',\n category: 'display',\n order: 30,\n propsInterface: 'PricingVersionSummaryProps',\n },\n 'pricing-version-decision': {\n id: 'pricing-version-decision',\n label: 'Pricing Version Decision',\n description: 'Caller-owned native decisions over retained pricing',\n icon: 'file-text',\n category: 'form',\n order: 31,\n propsInterface: 'PricingVersionDecisionProps',\n },\n 'customer-directory': {\n id: 'customer-directory',\n label: 'Customer Directory',\n description: 'Searchable and paginated customer directory',\n icon: 'users',\n category: 'list',\n order: 1,\n propsInterface: 'CustomerDirectoryProps',\n },\n 'customer-detail': {\n id: 'customer-detail',\n label: 'Customer Detail',\n description: 'Customer identity, terms, addresses, and contacts',\n icon: 'user',\n category: 'display',\n order: 2,\n propsInterface: 'CustomerDetailProps',\n },\n 'customer-form': {\n id: 'customer-form',\n label: 'Customer Form',\n description: 'Native create and edit form for customer data',\n icon: 'edit',\n category: 'form',\n order: 3,\n propsInterface: 'CustomerFormProps',\n },\n 'vendor-directory': {\n id: 'vendor-directory',\n label: 'Vendor Directory',\n description: 'Searchable and paginated vendor directory',\n icon: 'users',\n category: 'list',\n order: 4,\n propsInterface: 'VendorDirectoryProps',\n },\n 'vendor-detail': {\n id: 'vendor-detail',\n label: 'Vendor Detail',\n description: 'Vendor identity, purchasing terms, and contacts',\n icon: 'building',\n category: 'display',\n order: 5,\n propsInterface: 'VendorDetailProps',\n },\n 'vendor-form': {\n id: 'vendor-form',\n label: 'Vendor Form',\n description: 'Native create and edit form for vendor data',\n icon: 'edit',\n category: 'form',\n order: 6,\n propsInterface: 'VendorFormProps',\n },\n 'party-contact-fields': {\n id: 'party-contact-fields',\n label: 'Party Contact Fields',\n description: 'Repeatable native contact editor shared by party forms',\n icon: 'contact',\n category: 'form',\n order: 7,\n propsInterface: 'PartyContactFieldsProps',\n },\n 'invoice-editor': {\n id: 'invoice-editor',\n label: 'Invoice Preparation',\n description:\n 'General invoice lines, exact totals and optional allocation fields',\n icon: 'file-text',\n category: 'form',\n order: 8,\n propsInterface: 'InvoiceEditorProps',\n },\n 'invoice-review': {\n id: 'invoice-review',\n label: 'Invoice Review',\n description: 'Caller-authoritative review and approval presentation',\n icon: 'file-text',\n category: 'display',\n order: 9,\n propsInterface: 'InvoiceReviewProps',\n },\n 'invoice-card': {\n id: 'invoice-card',\n label: 'Invoice Card',\n description: 'Compact invoice display with status and amount',\n icon: 'file-text',\n category: 'display',\n order: 20,\n propsInterface: 'InvoiceCardProps',\n },\n 'invoice-header': {\n id: 'invoice-header',\n label: 'Invoice Header',\n description: 'Invoice header with customer and date information',\n icon: 'file-text',\n category: 'display',\n order: 21,\n propsInterface: 'InvoiceHeaderProps',\n },\n 'invoice-line-items': {\n id: 'invoice-line-items',\n label: 'Invoice Line Items',\n description: 'Table of invoice line items',\n icon: 'list',\n category: 'list',\n order: 22,\n propsInterface: 'InvoiceLineItemsProps',\n },\n 'invoice-totals': {\n id: 'invoice-totals',\n label: 'Invoice Totals',\n description: 'Invoice subtotal, tax, and total display',\n icon: 'calculator',\n category: 'display',\n order: 23,\n propsInterface: 'InvoiceTotalsProps',\n },\n 'invoice-actions': {\n id: 'invoice-actions',\n label: 'Invoice Actions',\n description: 'Action buttons for invoice operations',\n icon: 'more-horizontal',\n category: 'action',\n order: 24,\n propsInterface: 'InvoiceActionsProps',\n },\n 'unbilled-items': {\n id: 'unbilled-items',\n label: 'Unbilled Items',\n description: 'List of items ready for billing',\n icon: 'clock',\n category: 'list',\n order: 25,\n propsInterface: 'UnbilledItemsProps',\n },\n};\n\n/**\n * Commerce module metadata\n */\nexport const COMMERCE_MODULE_META: SmrtModuleMeta = {\n name: '@happyvertical/smrt-commerce',\n displayName: 'Commerce',\n description: 'Commerce models: contracts, invoices, payments',\n uiSlots: COMMERCE_UI_SLOTS,\n models: [\n 'Customer',\n 'Vendor',\n 'Contract',\n 'ContractLineItem',\n 'Fulfillment',\n 'FulfillmentLineItem',\n 'Payment',\n ],\n collections: [\n 'CustomerCollection',\n 'VendorCollection',\n 'ContractCollection',\n 'ContractLineItemCollection',\n 'FulfillmentCollection',\n 'FulfillmentLineItemCollection',\n 'PaymentCollection',\n ],\n};\n"],"mappings":";AAmBO,IAAM,oBAAkD;CAC7D,yBAAyB;EACvB,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,4BAA4B;EAC1B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CAEA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,0BAA0B;EACxB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,6BAA6B;EAC3B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CAEA,2BAA2B;EACzB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,4BAA4B;EAC1B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,sBAAsB;EACpB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,iBAAiB;EACf,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,oBAAoB;EAClB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,iBAAiB;EACf,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,eAAe;EACb,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,wBAAwB;EACtB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,sBAAsB;EACpB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;AACF;AAKO,IAAM,uBAAuC;CAClD,MAAM;CACN,aAAa;CACb,aAAa;CACb,SAAS;CACT,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,aAAa;EACX;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"ui.js","names":[],"sources":["../src/ui.ts"],"sourcesContent":["/**\n * Commerce Module UI Slot Declarations\n *\n * This file defines the UI extension points for the commerce module.\n * UI components are implemented in the ./svelte subpath.\n *\n * @example Usage\n * ```typescript\n * // In application code\n * import { COMMERCE_MODULE_META } from '@happyvertical/smrt-commerce';\n * console.log(COMMERCE_MODULE_META.uiSlots);\n * ```\n */\n\nimport type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\n/**\n * Commerce module UI slots\n */\nexport const COMMERCE_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'purchase-order-editor': {\n id: 'purchase-order-editor',\n label: 'Purchase / Award Editor',\n description:\n 'Native allocation preparation, review and explicit confirmation',\n icon: 'file-text',\n category: 'form',\n order: 30,\n propsInterface: 'PurchaseOrderEditorProps',\n },\n 'purchase-source-selector': {\n id: 'purchase-source-selector',\n label: 'Purchasing Source',\n description: 'Caller-authorized vendor and source selection',\n icon: 'list',\n category: 'form',\n order: 31,\n propsInterface: 'PurchaseSourceSelectorProps',\n },\n\n 'quote-editor': {\n id: 'quote-editor',\n label: 'Quotation / Estimate Editor',\n description:\n 'Native retained-value document editor with caller-owned actions',\n icon: 'file-text',\n category: 'form',\n order: 20,\n propsInterface: 'QuoteEditorProps',\n },\n 'quote-revision-history': {\n id: 'quote-revision-history',\n label: 'Quote Revision History',\n description: 'Read-only retained quotation and estimate revisions',\n icon: 'clock',\n category: 'list',\n order: 21,\n propsInterface: 'QuoteRevisionHistoryProps',\n },\n 'quote-revision-comparison': {\n id: 'quote-revision-comparison',\n label: 'Quote Revision Comparison',\n description: 'Compare explicit minor-unit revision totals and scope',\n icon: 'file-text',\n category: 'display',\n order: 22,\n propsInterface: 'QuoteRevisionComparisonProps',\n },\n\n 'pricing-version-summary': {\n id: 'pricing-version-summary',\n label: 'Pricing Version Summary',\n description: 'Retained estimate version and source amounts',\n icon: 'file-text',\n category: 'display',\n order: 30,\n propsInterface: 'PricingVersionSummaryProps',\n },\n 'pricing-version-decision': {\n id: 'pricing-version-decision',\n label: 'Pricing Version Decision',\n description: 'Caller-owned native decisions over retained pricing',\n icon: 'file-text',\n category: 'form',\n order: 31,\n propsInterface: 'PricingVersionDecisionProps',\n },\n 'customer-directory': {\n id: 'customer-directory',\n label: 'Customer Directory',\n description: 'Searchable and paginated customer directory',\n icon: 'users',\n category: 'list',\n order: 1,\n propsInterface: 'CustomerDirectoryProps',\n },\n 'customer-detail': {\n id: 'customer-detail',\n label: 'Customer Detail',\n description: 'Customer identity, terms, addresses, and contacts',\n icon: 'user',\n category: 'display',\n order: 2,\n propsInterface: 'CustomerDetailProps',\n },\n 'customer-form': {\n id: 'customer-form',\n label: 'Customer Form',\n description: 'Native create and edit form for customer data',\n icon: 'edit',\n category: 'form',\n order: 3,\n propsInterface: 'CustomerFormProps',\n },\n 'vendor-directory': {\n id: 'vendor-directory',\n label: 'Vendor Directory',\n description: 'Searchable and paginated vendor directory',\n icon: 'users',\n category: 'list',\n order: 4,\n propsInterface: 'VendorDirectoryProps',\n },\n 'vendor-detail': {\n id: 'vendor-detail',\n label: 'Vendor Detail',\n description: 'Vendor identity, purchasing terms, and contacts',\n icon: 'building',\n category: 'display',\n order: 5,\n propsInterface: 'VendorDetailProps',\n },\n 'vendor-form': {\n id: 'vendor-form',\n label: 'Vendor Form',\n description: 'Native create and edit form for vendor data',\n icon: 'edit',\n category: 'form',\n order: 6,\n propsInterface: 'VendorFormProps',\n },\n 'customer-select': {\n id: 'customer-select',\n label: 'Customer Select',\n description:\n 'Searchable customer picker for relation fields; the caller supplies the lookup',\n icon: 'users',\n category: 'form',\n order: 10,\n propsInterface: 'CustomerSelectProps',\n selects: '@happyvertical/smrt-commerce:Customer',\n },\n 'vendor-select': {\n id: 'vendor-select',\n label: 'Vendor Select',\n description:\n 'Searchable vendor picker for relation fields; the caller supplies the lookup',\n icon: 'building',\n category: 'form',\n order: 11,\n propsInterface: 'VendorSelectProps',\n selects: '@happyvertical/smrt-commerce:Vendor',\n },\n 'party-contact-fields': {\n id: 'party-contact-fields',\n label: 'Party Contact Fields',\n description: 'Repeatable native contact editor shared by party forms',\n icon: 'contact',\n category: 'form',\n order: 7,\n propsInterface: 'PartyContactFieldsProps',\n },\n 'invoice-editor': {\n id: 'invoice-editor',\n label: 'Invoice Preparation',\n description:\n 'General invoice lines, exact totals and optional allocation fields',\n icon: 'file-text',\n category: 'form',\n order: 8,\n propsInterface: 'InvoiceEditorProps',\n },\n 'invoice-review': {\n id: 'invoice-review',\n label: 'Invoice Review',\n description: 'Caller-authoritative review and approval presentation',\n icon: 'file-text',\n category: 'display',\n order: 9,\n propsInterface: 'InvoiceReviewProps',\n },\n 'invoice-card': {\n id: 'invoice-card',\n label: 'Invoice Card',\n description: 'Compact invoice display with status and amount',\n icon: 'file-text',\n category: 'display',\n order: 20,\n propsInterface: 'InvoiceCardProps',\n },\n 'invoice-header': {\n id: 'invoice-header',\n label: 'Invoice Header',\n description: 'Invoice header with customer and date information',\n icon: 'file-text',\n category: 'display',\n order: 21,\n propsInterface: 'InvoiceHeaderProps',\n },\n 'invoice-line-items': {\n id: 'invoice-line-items',\n label: 'Invoice Line Items',\n description: 'Table of invoice line items',\n icon: 'list',\n category: 'list',\n order: 22,\n propsInterface: 'InvoiceLineItemsProps',\n },\n 'invoice-totals': {\n id: 'invoice-totals',\n label: 'Invoice Totals',\n description: 'Invoice subtotal, tax, and total display',\n icon: 'calculator',\n category: 'display',\n order: 23,\n propsInterface: 'InvoiceTotalsProps',\n },\n 'invoice-actions': {\n id: 'invoice-actions',\n label: 'Invoice Actions',\n description: 'Action buttons for invoice operations',\n icon: 'more-horizontal',\n category: 'action',\n order: 24,\n propsInterface: 'InvoiceActionsProps',\n },\n 'unbilled-items': {\n id: 'unbilled-items',\n label: 'Unbilled Items',\n description: 'List of items ready for billing',\n icon: 'clock',\n category: 'list',\n order: 25,\n propsInterface: 'UnbilledItemsProps',\n },\n};\n\n/**\n * Commerce module metadata\n */\nexport const COMMERCE_MODULE_META: SmrtModuleMeta = {\n name: '@happyvertical/smrt-commerce',\n displayName: 'Commerce',\n description: 'Commerce models: contracts, invoices, payments',\n uiSlots: COMMERCE_UI_SLOTS,\n models: [\n 'Customer',\n 'Vendor',\n 'Contract',\n 'ContractLineItem',\n 'Fulfillment',\n 'FulfillmentLineItem',\n 'Payment',\n ],\n collections: [\n 'CustomerCollection',\n 'VendorCollection',\n 'ContractCollection',\n 'ContractLineItemCollection',\n 'FulfillmentCollection',\n 'FulfillmentLineItemCollection',\n 'PaymentCollection',\n ],\n};\n"],"mappings":";AAmBO,IAAM,oBAAkD;CAC7D,yBAAyB;EACvB,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,4BAA4B;EAC1B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CAEA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,0BAA0B;EACxB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,6BAA6B;EAC3B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CAEA,2BAA2B;EACzB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,4BAA4B;EAC1B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,sBAAsB;EACpB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,iBAAiB;EACf,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,oBAAoB;EAClB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,iBAAiB;EACf,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,eAAe;EACb,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;EAChB,SAAS;CACX;CACA,iBAAiB;EACf,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;EAChB,SAAS;CACX;CACA,wBAAwB;EACtB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aACE;EACF,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,sBAAsB;EACpB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;AACF;AAKO,IAAM,uBAAuC;CAClD,MAAM;CACN,aAAa;CACb,aAAa;CACb,SAAS;CACT,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,aAAa;EACX;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-commerce",
3
- "version": "0.55.7",
3
+ "version": "0.55.9",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Commerce models for the SMRT framework - contracts, fulfillments, payments",
6
6
  "type": "module",
@@ -55,15 +55,15 @@
55
55
  "access": "public"
56
56
  },
57
57
  "dependencies": {
58
- "@happyvertical/accounting": "^0.102.5",
59
- "@happyvertical/payments": "^0.102.5",
60
- "@happyvertical/smrt-core": "0.55.7",
61
- "@happyvertical/smrt-jobs": "0.55.7",
62
- "@happyvertical/smrt-ledgers": "0.55.7",
63
- "@happyvertical/smrt-subscriptions": "0.55.7",
64
- "@happyvertical/smrt-tenancy": "0.55.7",
65
- "@happyvertical/smrt-types": "0.55.7",
66
- "@happyvertical/smrt-ui": "0.55.7"
58
+ "@happyvertical/accounting": "^0.103.1",
59
+ "@happyvertical/payments": "^0.103.1",
60
+ "@happyvertical/smrt-core": "0.55.9",
61
+ "@happyvertical/smrt-jobs": "0.55.9",
62
+ "@happyvertical/smrt-ledgers": "0.55.9",
63
+ "@happyvertical/smrt-subscriptions": "0.55.9",
64
+ "@happyvertical/smrt-tenancy": "0.55.9",
65
+ "@happyvertical/smrt-types": "0.55.9",
66
+ "@happyvertical/smrt-ui": "0.55.9"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "svelte": "^5.57.0"
@@ -74,10 +74,14 @@
74
74
  }
75
75
  },
76
76
  "devDependencies": {
77
- "@happyvertical/smrt-vitest": "0.55.7",
77
+ "@happyvertical/smrt-vitest": "0.55.9",
78
78
  "@sveltejs/package": "^2.5.8",
79
79
  "@sveltejs/vite-plugin-svelte": "^7.3.0",
80
+ "@testing-library/jest-dom": "^7.0.1",
81
+ "@testing-library/svelte": "^5.4.2",
82
+ "@testing-library/user-event": "^14.6.7",
80
83
  "@types/node": "24.13.6",
84
+ "axe-core": "^4.13.0",
81
85
  "fast-glob": "^3.3.3",
82
86
  "svelte": "^5.57.1",
83
87
  "svelte-check": "^4.7.6",
@@ -95,7 +99,7 @@
95
99
  "typecheck": "tsc --noEmit && node ../../scripts/svelte-check-a11y.mjs --tsconfig ./tsconfig.svelte.json",
96
100
  "check": "pnpm exec svelte-check --tsconfig ./tsconfig.svelte.json",
97
101
  "verify:pack": "node ../../scripts/verify-package-types-exports.js .",
98
- "test:ui": "vitest run --config vitest.parties.config.ts && vitest run --config vitest.quotes.config.ts && vitest run --config vitest.invoices.config.ts && vitest run --config vitest.pricing.config.ts && vitest run --config vitest.purchasing.config.ts",
102
+ "test:ui": "vitest run --config vitest.parties.config.ts && vitest run --config vitest.selects.config.ts && vitest run --config vitest.quotes.config.ts && vitest run --config vitest.invoices.config.ts && vitest run --config vitest.pricing.config.ts && vitest run --config vitest.purchasing.config.ts",
99
103
  "test:e2e": "pnpm run test:e2e:parties && pnpm run test:e2e:quotes && pnpm run test:e2e:invoices && pnpm run test:e2e:pricing && pnpm run test:e2e:purchasing",
100
104
  "test:e2e:parties": "playwright test -c playwright.parties.config.ts",
101
105
  "test:e2e:quotes": "cd ../.. && node packages/commerce/test-support/quote-browser.mjs",