- Shipped
- August 3, 2026 at 3:36 AM UTC
- Author
- kamo
- Commit
- ccc17bc
Completes the quote/estimate system: staff can now build a quote, price it, mint a share link and email it, all from the pipeline. app/lib/quotesApi.ts typed client for the SecurityService surface **************** proxy, mirrors the POS one (X-***-Token passthrough) PipelineQuotesTab list + status filter, wired as a RETAIL sub-tab app/commerce/quotes/[uid] detail route QuoteEditor PipelineRecordLayout with details/sharing/activity tabs QuoteLineItemEditor reusable line-item grid QuoteShareLinkPanel mint, copy, email, revoke, view counts QuoteLineItemEditor is deliberately its own component. The pipeline already carries five separate hand-rolled line-item editors (orders/new, OrderEditDialog, the subscription order grid, the procurement table, work-order labor/parts) with nothing shared between them; new work should build on this rather than adding a sixth. The editor's totals are a LOCAL PREVIEW and are labelled as such while dirty. They mirror QuoteTotals exactly — line discounts first, then the quote-level discount, then tax and shipping — so the preview never disagrees with the saved document, and the server's response replaces them on every save. Nothing here can set a total. Tax stays honest in the UI too: ENGINE mode renders "Not configured" rather than a fabricated figure, matching what the API reports. A freshly minted share link is shown once with a copy-now warning, because only its SHA-256 is persisted and the URL genuinely cannot be recovered. The list can show a token prefix and nothing more. Rights-gated throughout: MANAGE_QUOTES to create/edit, SEND_QUOTES to mint or revoke links. Terminal quotes **************** lock the editor and offer a revision instead. Wired live to the API from the start — no generateMock fixtures, unlike several sibling pipeline tabs. If the quote tables do not exist yet the error surfaces honestly rather than being masked by placeholder rows.