@dropins/storefront-quote-management 1.1.2 → 1.2.0-beta.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 (98) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/api.js +1172 -5
  3. package/api.js.map +1 -1
  4. package/chunks/ItemsQuoted.js +1 -1
  5. package/chunks/ItemsQuoted.js.map +1 -1
  6. package/chunks/ItemsQuotedTemplate.js +1 -1
  7. package/chunks/ItemsQuotedTemplate.js.map +1 -1
  8. package/chunks/QuoteCommentsList.js +1 -1
  9. package/chunks/QuoteCommentsList.js.map +1 -1
  10. package/chunks/QuoteHistoryLog.js +1 -1
  11. package/chunks/QuoteHistoryLog.js.map +1 -1
  12. package/chunks/QuoteTemplateCommentsList.js +1 -1
  13. package/chunks/QuoteTemplateCommentsList.js.map +1 -1
  14. package/chunks/QuoteTemplateHistoryLog.js +1 -1
  15. package/chunks/QuoteTemplateHistoryLog.js.map +1 -1
  16. package/chunks/ShippingAddressDisplay.js +1 -1
  17. package/chunks/ShippingAddressDisplay.js.map +1 -1
  18. package/chunks/components.js +4 -0
  19. package/chunks/components.js.map +1 -0
  20. package/containers/ItemsQuoted.js +1 -1
  21. package/containers/ItemsQuotedTemplate.js +1 -1
  22. package/containers/ManageNegotiableQuote.js +1 -1
  23. package/containers/ManageNegotiableQuote.js.map +1 -1
  24. package/containers/ManageNegotiableQuoteTemplate.js +2 -2
  25. package/containers/ManageNegotiableQuoteTemplate.js.map +1 -1
  26. package/containers/OrderSummary.js +1 -1
  27. package/containers/OrderSummary.js.map +1 -1
  28. package/containers/OrderSummaryLine.js +1 -1
  29. package/containers/QuoteCommentsList.js +1 -1
  30. package/containers/QuoteHistoryLog.js +1 -1
  31. package/containers/QuoteSummaryList.js +1 -1
  32. package/containers/QuoteSummaryList.js.map +1 -1
  33. package/containers/QuoteTemplateCommentsList.js +1 -1
  34. package/containers/QuoteTemplateHistoryLog.js +1 -1
  35. package/containers/QuoteTemplatesListTable.js +1 -1
  36. package/containers/QuoteTemplatesListTable.js.map +1 -1
  37. package/containers/QuotesListTable.js +1 -1
  38. package/containers/QuotesListTable.js.map +1 -1
  39. package/containers/RequestNegotiableQuoteForm.js +1 -1
  40. package/containers/RequestNegotiableQuoteForm.js.map +1 -1
  41. package/containers/ShippingAddressDisplay.js +1 -1
  42. package/package.json +1 -1
  43. package/render.js +2 -7
  44. package/render.js.map +1 -1
  45. package/chunks/AttachedFilesList.js +0 -4
  46. package/chunks/AttachedFilesList.js.map +0 -1
  47. package/chunks/CheckWithCircle.js +0 -4
  48. package/chunks/CheckWithCircle.js.map +0 -1
  49. package/chunks/ChevronDown.js +0 -4
  50. package/chunks/ChevronDown.js.map +0 -1
  51. package/chunks/ConfirmationModal.js +0 -4
  52. package/chunks/ConfirmationModal.js.map +0 -1
  53. package/chunks/LineItemNoteModal.js +0 -4
  54. package/chunks/LineItemNoteModal.js.map +0 -1
  55. package/chunks/NegotiableQuoteFragment.js +0 -396
  56. package/chunks/NegotiableQuoteFragment.js.map +0 -1
  57. package/chunks/NegotiableQuoteTemplateFragment.js +0 -342
  58. package/chunks/NegotiableQuoteTemplateFragment.js.map +0 -1
  59. package/chunks/OrderSummaryLine.js +0 -4
  60. package/chunks/OrderSummaryLine.js.map +0 -1
  61. package/chunks/QuoteCommentsList3.js +0 -4
  62. package/chunks/QuoteCommentsList3.js.map +0 -1
  63. package/chunks/QuoteHistoryLog3.js +0 -4
  64. package/chunks/QuoteHistoryLog3.js.map +0 -1
  65. package/chunks/RenameQuoteModal.js +0 -4
  66. package/chunks/RenameQuoteModal.js.map +0 -1
  67. package/chunks/WarningFilled.js +0 -4
  68. package/chunks/WarningFilled.js.map +0 -1
  69. package/chunks/addQuoteTemplateLineItemNote.js +0 -33
  70. package/chunks/addQuoteTemplateLineItemNote.js.map +0 -1
  71. package/chunks/dateUtils.js +0 -4
  72. package/chunks/dateUtils.js.map +0 -1
  73. package/chunks/duplicateNegotiableQuote.js +0 -109
  74. package/chunks/duplicateNegotiableQuote.js.map +0 -1
  75. package/chunks/generateQuoteFromTemplate.js +0 -12
  76. package/chunks/generateQuoteFromTemplate.js.map +0 -1
  77. package/chunks/getQuoteData.js +0 -16
  78. package/chunks/getQuoteData.js.map +0 -1
  79. package/chunks/getQuoteTemplateData.js +0 -28
  80. package/chunks/getQuoteTemplateData.js.map +0 -1
  81. package/chunks/getQuoteTemplates.js +0 -52
  82. package/chunks/getQuoteTemplates.js.map +0 -1
  83. package/chunks/negotiableQuotes.js +0 -77
  84. package/chunks/negotiableQuotes.js.map +0 -1
  85. package/chunks/openQuoteTemplate.js +0 -62
  86. package/chunks/openQuoteTemplate.js.map +0 -1
  87. package/chunks/requestNegotiableQuote.js +0 -25
  88. package/chunks/requestNegotiableQuote.js.map +0 -1
  89. package/chunks/setLineItemNote.js +0 -47
  90. package/chunks/setLineItemNote.js.map +0 -1
  91. package/chunks/state.js +0 -4
  92. package/chunks/state.js.map +0 -1
  93. package/chunks/transform-quote-template.js +0 -4
  94. package/chunks/transform-quote-template.js.map +0 -1
  95. package/chunks/transform-quote.js +0 -4
  96. package/chunks/transform-quote.js.map +0 -1
  97. package/chunks/uploadFile.js +0 -20
  98. package/chunks/uploadFile.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronDown.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronRight.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronUp.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Close.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Coupon.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Edit.svg","../../node_modules/@adobe-commerce/elsie/src/icons/WarningFilled.svg","/@dropins/storefront-quote-management/src/components/ShippingAddressDisplay/ShippingAddressDisplay.tsx","/@dropins/storefront-quote-management/src/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx","/@dropins/storefront-quote-management/src/components/ActionsBar/ActionsBar.tsx","/@dropins/storefront-quote-management/src/utils/fileUtils.ts","/@dropins/storefront-quote-management/src/components/AttachedFilesList/AttachedFilesList.tsx","/@dropins/storefront-quote-management/src/components/ItemsQuoted/ItemsQuoted.tsx","/@dropins/storefront-quote-management/src/components/ManageNegotiableQuote/ManageNegotiableQuote.tsx","/@dropins/storefront-quote-management/src/containers/OrderSummaryLine/OrderSummaryLine.tsx","/@dropins/storefront-quote-management/src/components/OrderSummary/OrderSummary.tsx","/@dropins/storefront-quote-management/src/components/OrderSummaryLine/OrderSummaryLine.tsx","/@dropins/storefront-quote-management/src/utils/dateUtils.ts","/@dropins/storefront-quote-management/src/components/ProductListTable/ProductListTable.tsx","/@dropins/storefront-quote-management/src/components/QuotePricesSummary/QuotePricesSummary.tsx","/@dropins/storefront-quote-management/src/components/QuoteSummaryList/QuoteSummaryList.tsx","/@dropins/storefront-quote-management/src/components/QuotesListTable/QuotesListTable.tsx","/@dropins/storefront-quote-management/src/components/QuoteTemplatesListTable/QuoteTemplatesListTable.tsx","/@dropins/storefront-quote-management/src/components/ConfirmationModal/ConfirmationModal.tsx","/@dropins/storefront-quote-management/src/components/QuoteHistoryLog/QuoteHistoryLog.tsx","/@dropins/storefront-quote-management/src/components/TabbedContent/TabbedContent.tsx","/@dropins/storefront-quote-management/src/components/QuoteCommentsList/QuoteCommentsList.tsx","/@dropins/storefront-quote-management/src/components/RenameQuoteModal/RenameQuoteModal.tsx","/@dropins/storefront-quote-management/src/components/ExpirationDateModal/ExpirationDateModal.tsx","/@dropins/storefront-quote-management/src/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.tsx","/@dropins/storefront-quote-management/src/components/LineItemNoteModal/LineItemNoteModal.tsx","/@dropins/storefront-quote-management/src/components/ReferenceDocumentFormModal/ReferenceDocumentFormModal.tsx","/@dropins/storefront-quote-management/src/components/ReferenceDocumentsList/ReferenceDocumentsList.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgCheckWithCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M6.75 12.762L10.2385 15.75L17.25 9\", stroke: \"currentColor\" }));\nexport default SvgCheckWithCircle;\n","import * as React from \"react\";\nconst SvgChevronDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronDown;\n","import * as React from \"react\";\nconst SvgChevronRight = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Chevron_right_Base\", \"data-name\": \"Icon \\\\u2013 Chevron right \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Chevron_right_icon\", \"data-name\": \"Chevron right icon\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", id: \"chevron\", d: \"M199.75,367.5l4.255,-4.255-4.255,-4.255\", transform: \"translate(-189.25 -351.0)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgChevronRight;\n","import * as React from \"react\";\nconst SvgChevronUp = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.74512 14.132L12.0001 9.87701L16.2551 14.132\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronUp;\n","import * as React from \"react\";\nconst SvgClose = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 5.64001L5.62988 18.37\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 18.37L5.62988 5.64001\", stroke: \"currentColor\" }));\nexport default SvgClose;\n","import * as React from \"react\";\nconst SvgCoupon = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M22 6.25H22.75C22.75 5.83579 22.4142 5.5 22 5.5V6.25ZM22 9.27L22.2514 9.97663C22.5503 9.87029 22.75 9.58731 22.75 9.27H22ZM20.26 12.92L19.5534 13.1714L19.5539 13.1728L20.26 12.92ZM22 14.66H22.75C22.75 14.3433 22.551 14.0607 22.2528 13.9539L22 14.66ZM22 17.68V18.43C22.4142 18.43 22.75 18.0942 22.75 17.68H22ZM2 17.68H1.25C1.25 18.0942 1.58579 18.43 2 18.43V17.68ZM2 14.66L1.74865 13.9534C1.44969 14.0597 1.25 14.3427 1.25 14.66H2ZM3.74 11.01L4.44663 10.7586L4.44611 10.7572L3.74 11.01ZM2 9.27H1.25C1.25 9.58675 1.44899 9.86934 1.7472 9.97611L2 9.27ZM2 6.25V5.5C1.58579 5.5 1.25 5.83579 1.25 6.25H2ZM21.25 6.25V9.27H22.75V6.25H21.25ZM21.7486 8.56337C19.8706 9.23141 18.8838 11.2889 19.5534 13.1714L20.9666 12.6686C20.5762 11.5711 21.1494 10.3686 22.2514 9.97663L21.7486 8.56337ZM19.5539 13.1728C19.9195 14.1941 20.7259 15.0005 21.7472 15.3661L22.2528 13.9539C21.6541 13.7395 21.1805 13.2659 20.9661 12.6672L19.5539 13.1728ZM21.25 14.66V17.68H22.75V14.66H21.25ZM22 16.93H2V18.43H22V16.93ZM2.75 17.68V14.66H1.25V17.68H2.75ZM2.25135 15.3666C4.12941 14.6986 5.11623 12.6411 4.44663 10.7586L3.03337 11.2614C3.42377 12.3589 2.85059 13.5614 1.74865 13.9534L2.25135 15.3666ZM4.44611 10.7572C4.08045 9.73588 3.27412 8.92955 2.2528 8.56389L1.7472 9.97611C2.34588 10.1905 2.81955 10.6641 3.03389 11.2628L4.44611 10.7572ZM2.75 9.27V6.25H1.25V9.27H2.75ZM2 7H22V5.5H2V7ZM7.31 6.74V18.17H8.81V6.74H7.31ZM17.0997 8.39967L11.0397 14.4597L12.1003 15.5203L18.1603 9.46033L17.0997 8.39967ZM12.57 9.67C12.57 9.87231 12.4159 10 12.27 10V11.5C13.2839 11.5 14.07 10.6606 14.07 9.67H12.57ZM12.27 10C12.1241 10 11.97 9.87231 11.97 9.67H10.47C10.47 10.6606 11.2561 11.5 12.27 11.5V10ZM11.97 9.67C11.97 9.46769 12.1241 9.34 12.27 9.34V7.84C11.2561 7.84 10.47 8.67938 10.47 9.67H11.97ZM12.27 9.34C12.4159 9.34 12.57 9.46769 12.57 9.67H14.07C14.07 8.67938 13.2839 7.84 12.27 7.84V9.34ZM17.22 14.32C17.22 14.5223 17.0659 14.65 16.92 14.65V16.15C17.9339 16.15 18.72 15.3106 18.72 14.32H17.22ZM16.92 14.65C16.7741 14.65 16.62 14.5223 16.62 14.32H15.12C15.12 15.3106 15.9061 16.15 16.92 16.15V14.65ZM16.62 14.32C16.62 14.1177 16.7741 13.99 16.92 13.99V12.49C15.9061 12.49 15.12 13.3294 15.12 14.32H16.62ZM16.92 13.99C17.0659 13.99 17.22 14.1177 17.22 14.32H18.72C18.72 13.3294 17.9339 12.49 16.92 12.49V13.99Z\", fill: \"currentColor\" }));\nexport default SvgCoupon;\n","import * as React from \"react\";\nconst SvgEdit = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"feather feather-edit-2\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\" }));\nexport default SvgEdit;\n","import * as React from \"react\";\nconst SvgWarningFilled = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M1 20.8953L12.1922 1.5L23.395 20.8953H1ZM13.0278 13.9638L13.25 10.0377V9H11.25V10.0377L11.4722 13.9638H13.0278ZM11.2994 16V17.7509H13.2253V16H11.2994Z\", fill: \"currentColor\" }));\nexport default SvgWarningFilled;\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { InLineAlert, Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\nimport { ShippingAddress } from '@/quote-management/data/models/negotiable-quote-model';\nimport '@/quote-management/components/ShippingAddressDisplay/ShippingAddressDisplay.css';\nimport { WarningFilled } from '@adobe-commerce/elsie/icons';\n\nexport interface ShippingAddressDisplayProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n shippingAddress?: ShippingAddress;\n loading?: boolean;\n noAddressMessage?: string;\n}\n\nexport const ShippingAddressDisplay: FunctionComponent<ShippingAddressDisplayProps> = ({\n className,\n shippingAddress,\n loading,\n noAddressMessage,\n ...props\n}) => {\n const dictionary = useText({\n noAddressHeading: 'NegotiableQuote.Manage.shippingAddress.noAddressHeading',\n noAddressDescription: 'NegotiableQuote.Manage.shippingAddress.noAddressDescription',\n });\n\n if (loading) {\n return <ShippingAddressDisplaySkeleton />;\n }\n\n if (!shippingAddress) {\n return (\n <div \n className={classes(['quote-management-shipping-address-display', 'quote-management-shipping-address-display--empty', className])}\n data-testid=\"shipping-address-display-empty\"\n {...props}\n >\n <InLineAlert\n type=\"warning\"\n variant=\"primary\"\n data-testid=\"shipping-address-display-empty-alert\"\n icon={<WarningFilled />}\n heading={dictionary.noAddressHeading}\n description={noAddressMessage || dictionary.noAddressDescription}\n />\n </div>\n );\n }\n\n return (\n <div \n className={classes(['quote-management-shipping-address-display', className])}\n data-testid=\"shipping-address-display\"\n {...props}\n >\n <div className=\"quote-management-shipping-address-display__field\" data-testid=\"address-name\">\n <span className=\"quote-management-shipping-address-display__name\">\n {shippingAddress.firstname} {shippingAddress.lastname}\n </span>\n </div>\n \n {shippingAddress.company && (\n <div className=\"quote-management-shipping-address-display__field\" data-testid=\"address-company\">\n {shippingAddress.company}\n </div>\n )}\n \n {shippingAddress.street.map((line, index) => (\n <div \n key={index} \n className=\"quote-management-shipping-address-display__field\" \n data-testid={`address-street-${index}`}\n >\n {line}\n </div>\n ))}\n \n <div className=\"quote-management-shipping-address-display__field\" data-testid=\"address-city-region\">\n {shippingAddress.city}\n {shippingAddress.region && `, ${shippingAddress.region.label}`}\n {' '}\n {shippingAddress.postcode}\n </div>\n \n <div className=\"quote-management-shipping-address-display__field\" data-testid=\"address-country\">\n {shippingAddress.country.label}\n </div>\n \n <div className=\"quote-management-shipping-address-display__field\" data-testid=\"address-telephone\">\n {shippingAddress.telephone}\n </div>\n </div>\n );\n};\n\nexport const ShippingAddressDisplaySkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"shipping-address-display-skeleton\">\n <SkeletonRow variant=\"row\" fullWidth={true} size=\"small\" lines={5} multilineGap='xsmall' />\n </Skeleton>\n );\n};\n\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.css';\n\nexport interface RequestNegotiableQuoteFormProps extends Omit<HTMLAttributes<HTMLFormElement>, 'title'> {\n title: VNode;\n banner?: VNode;\n commentField?: VNode;\n quoteNameField?: VNode;\n attachFile?: VNode;\n attachedFilesList?: VNode;\n requestButton?: VNode;\n saveButton?: VNode;\n onSubmit: (e: Event) => void;\n}\n\nexport const RequestNegotiableQuoteForm: FunctionComponent<RequestNegotiableQuoteFormProps> = ({\n className,\n title,\n banner,\n commentField,\n quoteNameField,\n attachFile,\n attachedFilesList,\n requestButton,\n saveButton,\n onSubmit,\n ...props\n}) => {\n return (\n <form {...props} className={classes(['request-negotiable-quote-form', className])} onSubmit={onSubmit}>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['request-negotiable-quote-form__banner'])}\n />\n }\n {title &&\n <VComponent\n node={title}\n className={classes(['request-negotiable-quote-form__title'])}\n />\n }\n {commentField &&\n <VComponent\n node={commentField}\n className={classes(['request-negotiable-quote-form__comment-field'])}\n />\n }\n {quoteNameField &&\n <VComponent\n node={quoteNameField}\n className={classes(['request-negotiable-quote-form__quote-name-field'])}\n />\n }\n {attachFile &&\n <VComponent\n node={attachFile}\n className={classes(['request-negotiable-quote-form__attach-file-field'])}\n />\n }\n {attachedFilesList &&\n <VComponent\n node={attachedFilesList}\n className={classes(['request-negotiable-quote-form__attached-files-list'])}\n />\n }\n <div className={classes(['request-negotiable-quote-form__actions'])}>\n {requestButton &&\n <VComponent\n node={requestButton}\n className={classes(['request-negotiable-quote-form__request-button'])}\n />\n }\n {saveButton &&\n <VComponent\n node={saveButton}\n className={classes(['request-negotiable-quote-form__save-button'])}\n />\n }\n </div>\n </form>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/ActionsBar/ActionsBar.css';\nimport { Picker } from '@adobe-commerce/elsie/components';\n\nexport interface ActionsBarProps extends HTMLAttributes<HTMLDivElement> {\n dropdownPlaceholder?: string;\n dropdownOptions?: {\n label: string;\n value: string;\n }[];\n dropdownValue?: string;\n handleDropdownChange?: (event: Event) => void;\n buttons?: VNode[];\n}\n\nexport const ActionsBar: FunctionComponent<ActionsBarProps> = ({\n className,\n dropdownPlaceholder,\n dropdownOptions,\n dropdownValue,\n handleDropdownChange,\n buttons,\n ...props\n}) => {\n const hasDropdown = dropdownOptions && dropdownOptions.length > 0;\n const hasButtons = buttons && buttons.length > 0;\n\n const pickerOptions =\n dropdownOptions?.map((option) => ({\n text: option.label,\n value: option.value,\n })) || [];\n pickerOptions.unshift({\n text: dropdownPlaceholder || '',\n value: '',\n });\n\n return (\n <div\n className=\"quote-management-actions-bar__container\"\n data-testid=\"actions-bar-container\"\n >\n <div\n className={classes(['quote-management-actions-bar', className])}\n data-testid=\"actions-bar\"\n {...props}\n >\n {hasDropdown && (\n <Picker\n key={`actions-bar-picker-${dropdownValue || 'empty'}`}\n name=\"dropdown\"\n id=\"dropdown\"\n handleSelect={handleDropdownChange}\n className=\"quote-management-actions-bar__dropdown\"\n data-testid=\"dropdown\"\n options={pickerOptions}\n value={dropdownValue || ''}\n />\n )}\n {hasButtons && (\n <div\n className=\"quote-management-actions-bar__buttons\"\n data-testid=\"buttons-container\"\n >\n {buttons?.map((button, index) => (\n <VComponent\n node={button}\n className={classes(['quote-management-actions-bar__button'])}\n key={index}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\n/**\n * Formats a file size in bytes to a human-readable string\n * @param bytes - The file size in bytes\n * @returns A formatted string with the appropriate unit (Bytes, KB, MB, GB)\n * \n * @example\n * formatFileSize(0) // '0 Bytes'\n * formatFileSize(1024) // '1 KB'\n * formatFileSize(1536) // '1.5 KB'\n * formatFileSize(1048576) // '1 MB'\n * formatFileSize(5242880) // '5 MB'\n */\nexport const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n \n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n // Ensure we don't go beyond our sizes array\n const sizeIndex = Math.min(i, sizes.length - 1);\n \n const size = bytes / Math.pow(k, sizeIndex);\n \n // Round to 2 decimal places\n const roundedSize = Math.round(size * 100) / 100;\n \n return `${roundedSize} ${sizes[sizeIndex]}`;\n};\n\n/**\n * Validates if a file type is accepted\n * @param fileType - The MIME type of the file\n * @param acceptedTypes - Array of accepted MIME types (e.g., ['image/png', 'application/pdf'])\n * @returns true if the file type is accepted, false otherwise\n * \n * @example\n * validateFileType('image/png', ['image/png', 'image/jpeg']) // true\n * validateFileType('application/pdf', ['image/png']) // false\n * validateFileType('image/png', []) // true (empty array means all types accepted)\n */\nexport const validateFileType = (\n fileType: string,\n acceptedTypes?: string[]\n): boolean => {\n if (!acceptedTypes || acceptedTypes.length === 0) {\n return true;\n }\n \n return acceptedTypes.includes(fileType);\n};\n\n/**\n * Validates if a file size is within the maximum limit\n * @param fileSize - The file size in bytes\n * @param maxSize - Maximum allowed file size in bytes\n * @returns true if the file size is within the limit, false otherwise\n * \n * @example\n * validateFileSize(1024, 2048) // true\n * validateFileSize(3072, 2048) // false\n * validateFileSize(1024, undefined) // true (no limit)\n */\nexport const validateFileSize = (\n fileSize: number,\n maxSize?: number\n): boolean => {\n if (maxSize === undefined || maxSize === null) {\n return true;\n }\n \n return fileSize <= maxSize;\n};\n\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { Close, CheckWithCircle, WarningFilled } from '@adobe-commerce/elsie/icons';\nimport { formatFileSize } from '@/quote-management/utils/fileUtils';\nimport './AttachedFilesList.css';\n\nexport interface AttachedFile {\n key: string;\n name: string;\n size: number;\n status: 'uploading' | 'success' | 'error';\n error?: string;\n}\n\nexport interface AttachedFilesListProps {\n files: AttachedFile[];\n onRemove: (key: string) => void;\n disabled?: boolean;\n}\n\nexport const AttachedFilesList: FunctionComponent<AttachedFilesListProps> = ({\n files,\n onRemove,\n disabled = false,\n}) => {\n const dictionary = useText({\n removeFile: 'NegotiableQuote.Manage.removeFile',\n uploading: 'NegotiableQuote.Manage.uploading',\n uploadSuccess: 'NegotiableQuote.Manage.uploadSuccess',\n uploadError: 'NegotiableQuote.Manage.uploadError',\n });\n\n if (!files || files.length === 0) {\n return null;\n }\n\n return (\n <div className=\"attached-files-list\" data-testid=\"attached-files-list\">\n {files.map((file) => {\n const isUploading = file.status === 'uploading';\n const isError = file.status === 'error';\n const isSuccess = file.status === 'success';\n const canRemove = !disabled && !isUploading;\n\n return (\n <div\n key={file.key}\n className={`attached-files-list__item attached-files-list__item--${file.status}`}\n data-testid={`attached-file-${file.key}`}\n >\n <div className=\"attached-files-list__item-main\">\n <div className=\"attached-files-list__item-icon\">\n {isUploading && (\n <div\n className=\"attached-files-list__spinner\"\n data-testid=\"file-uploading-spinner\"\n aria-label={dictionary.uploading}\n />\n )}\n {isSuccess && (\n <CheckWithCircle\n data-testid=\"file-success-icon\"\n aria-label={dictionary.uploadSuccess}\n className=\"attached-files-list__success-icon\"\n />\n )}\n {isError && (\n <WarningFilled\n data-testid=\"file-error-icon\"\n aria-label={dictionary.uploadError}\n color=\"var(--color-error)\"\n className=\"attached-files-list__error-icon\"\n />\n )}\n </div>\n\n <div className=\"attached-files-list__item-info\">\n <div className=\"attached-files-list__item-name\" data-testid=\"file-name\">\n {file.name}\n </div>\n <div className=\"attached-files-list__item-size\" data-testid=\"file-size\">\n {formatFileSize(file.size)}\n {isUploading && ` - ${dictionary.uploading}`}\n </div>\n </div>\n\n <Button\n variant=\"tertiary\"\n onClick={() => onRemove(file.key)}\n disabled={!canRemove}\n type=\"button\"\n aria-label={`${dictionary.removeFile}: ${file.name}`}\n data-testid={`remove-file-${file.key}`}\n className=\"attached-files-list__remove-button\"\n >\n <Close />\n </Button>\n </div>\n\n {isError && file.error && (\n <div\n className=\"attached-files-list__item-error\"\n data-testid=\"file-error-message\"\n >\n {file.error}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/ItemsQuoted/ItemsQuoted.css';\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nexport interface ItemsQuotedProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n loading?: boolean;\n table?: VNode;\n pricesSummary?: VNode;\n}\n\nexport const ItemsQuoted: FunctionComponent<ItemsQuotedProps> = ({\n className,\n loading,\n table,\n pricesSummary,\n ...props\n}) => {\n if (loading) {\n return <ItemsQuotedSkeleton />;\n }\n\n return (\n <div className={classes(['quote-management-items-quoted', className])} {...props}>\n {table && (\n <VComponent\n node={table}\n className={classes(['quote-management-items-quoted__table'])}\n data-testid=\"quote-management-items-quoted__table\"\n />\n )}\n {pricesSummary && (\n <VComponent\n node={pricesSummary}\n className={classes(['quote-management-items-quoted__prices-summary'])}\n data-testid=\"quote-management-items-quoted__prices-summary\"\n />\n )}\n </div>\n );\n};\n\nexport const ItemsQuotedSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"items-quoted-skeleton\">\n <SkeletonRow variant=\"row\" fullWidth={true} size=\"medium\" lines={4} multilineGap='xsmall' />\n </Skeleton>\n );\n};","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/ManageNegotiableQuote/ManageNegotiableQuote.css';\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nexport interface ManageNegotiableQuoteProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n loading?: boolean;\n quoteName: VNode;\n quoteStatus: VNode;\n banner?: VNode;\n details?: VNode;\n actionBar?: VNode;\n quoteContent: VNode;\n shippingInformationTitle: VNode;\n shippingInformation: VNode;\n quoteCommentsTitle: VNode;\n quoteComments: VNode;\n attachFilesField?: VNode;\n attachedFilesList?: VNode;\n footer: VNode;\n}\n\nexport const ManageNegotiableQuote: FunctionComponent<ManageNegotiableQuoteProps> = ({\n className,\n loading,\n quoteName,\n quoteStatus,\n banner,\n details,\n actionBar,\n quoteContent,\n shippingInformationTitle,\n shippingInformation,\n quoteCommentsTitle,\n quoteComments,\n attachFilesField,\n attachedFilesList,\n footer,\n ...props\n}) => {\n if (loading) {\n return <ManageNegotiableQuoteSkeleton />;\n }\n\n return (\n <div {...props} className={classes(['quote-management-manage-negotiable-quote', className])}>\n <div className={classes(['quote-management-manage-negotiable-quote__header'])}>\n {quoteName &&\n <VComponent\n node={quoteName}\n className={classes(['quote-management-manage-negotiable-quote__quote-name'])}\n />\n }\n {quoteStatus &&\n <VComponent\n node={quoteStatus}\n className={classes(['quote-management-manage-negotiable-quote__quote-status'])}\n />\n }\n </div>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['quote-management-manage-negotiable-quote__banner'])}\n />\n }\n {details &&\n <VComponent\n node={details}\n className={classes(['quote-management-manage-negotiable-quote__details'])}\n />\n }\n {actionBar &&\n <VComponent\n node={actionBar}\n className={classes(['quote-management-manage-negotiable-quote__action-bar'])}\n />\n }\n {quoteContent &&\n <VComponent\n node={quoteContent}\n className={classes(['quote-management-manage-negotiable-quote__quote-content'])}\n />\n }\n <div data-testid=\"quote-shipping-information-container\" className={classes(['quote-management-manage-negotiable-quote__shipping-information-container'])}>\n {shippingInformationTitle &&\n <VComponent\n node={shippingInformationTitle}\n className={classes(['quote-management-manage-negotiable-quote__shipping-information-title'])}\n />\n }\n {shippingInformation &&\n <VComponent\n node={shippingInformation}\n className={classes(['quote-management-manage-negotiable-quote__shipping-information'])}\n />\n }\n </div>\n <div data-testid=\"quote-comments-container\" className={classes(['quote-management-manage-negotiable-quote__quote-comments-container'])}>\n {quoteCommentsTitle &&\n <VComponent\n node={quoteCommentsTitle}\n className={classes(['quote-management-manage-negotiable-quote__quote-comments-title'])}\n />\n }\n {quoteComments &&\n <VComponent\n node={quoteComments}\n className={classes(['quote-management-manage-negotiable-quote__quote-comments'])}\n />\n }\n {attachFilesField &&\n <VComponent\n node={attachFilesField}\n className={classes(['quote-management-manage-negotiable-quote__attach-files-field'])}\n />\n }\n {attachedFilesList &&\n <VComponent\n node={attachedFilesList}\n className={classes(['quote-management-manage-negotiable-quote__attached-files-list'])}\n />\n }\n </div>\n <VComponent\n node={footer}\n className={classes(['quote-management-manage-negotiable-quote__footer'])}\n />\n </div>\n );\n};\n\nexport const ManageNegotiableQuoteSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"manage-negotiable-quote-skeleton\">\n <SkeletonRow variant=\"heading\" fullWidth={true} size=\"large\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} size=\"xlarge\" lines={2} />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { HTMLAttributes } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { VNode } from 'preact';\nimport { OrderSummaryLine as OrderSummaryLineComponent } from '@/quote-management/components';\n\nexport interface OrderSummaryLineProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'label'> {\n label: VNode | string;\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n classSuffixes?: Array<string>;\n labelClassSuffix?: string;\n testId?: string;\n children?: any;\n}\n\nexport const OrderSummaryLine: Container<OrderSummaryLineProps> = ({\n label,\n price,\n classSuffixes = [],\n labelClassSuffix,\n testId,\n children,\n ...props\n}) => {\n return (\n <OrderSummaryLineComponent\n {...props}\n label={label}\n price={price}\n classSuffixes={classSuffixes}\n labelClassSuffix={labelClassSuffix}\n testId={testId}\n >\n {children}\n </OrderSummaryLineComponent>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport '@/quote-management/components/OrderSummary/OrderSummary.css';\nimport { OrderSummaryLine } from '@/quote-management/containers/OrderSummaryLine/OrderSummaryLine';\nimport {\n Accordion,\n AccordionSection,\n Divider,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { ChevronDown, ChevronUp } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport { JSXInternal } from 'preact/src/jsx';\n\nexport interface OrderSummaryLineItem {\n key: string;\n title?: string;\n className?: string;\n sortOrder: number;\n content:\n | string\n | JSXInternal.Element\n | VNode<HTMLAttributes<HTMLDivElement>>\n | OrderSummaryLineItem[]\n | undefined;\n}\n\nexport interface OrderSummaryProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'primary' | 'secondary';\n heading?: VNode<HTMLAttributes<HTMLDivElement>>;\n subTotal?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceExcludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n taxIncluded?: boolean;\n taxExcluded?: boolean;\n };\n shipping?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceExcludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n taxIncluded?: boolean;\n taxExcluded?: boolean;\n };\n discounts?: {\n label: string;\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n caption?: VNode<HTMLAttributes<HTMLDivElement>>;\n coupon?: VNode<HTMLAttributes<HTMLSpanElement>>;\n }[];\n taxTotal?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n };\n taxesApplied?: {\n label: string;\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n }[];\n total?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceWithoutTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n };\n totalSaved?: VNode<HTMLAttributes<HTMLSpanElement>>;\n updateLineItems?: (\n lineItems: Array<OrderSummaryLineItem>\n ) => Array<OrderSummaryLineItem>;\n}\n\nexport const OrderSummary: FunctionComponent<OrderSummaryProps> = ({\n className,\n children,\n variant = 'primary',\n heading,\n subTotal,\n shipping,\n discounts,\n taxTotal,\n taxesApplied,\n total,\n totalSaved,\n updateLineItems = (lineItems) => lineItems,\n ...props\n}) => {\n const [showTaxBreakdown, setShowTaxBreakdown] = useState(false);\n\n const translations = useText({\n // Taxes\n taxesBreakdownTitle: 'NegotiableQuote.PriceSummary.taxes.breakdown',\n taxTotal: 'NegotiableQuote.PriceSummary.taxes.total',\n taxTotalOnly: 'NegotiableQuote.PriceSummary.taxes.totalOnly',\n showTaxBreakdown: 'NegotiableQuote.PriceSummary.taxes.showBreakdown',\n hideTaxBreakdown: 'NegotiableQuote.PriceSummary.taxes.hideBreakdown',\n\n // Subtotal\n subtotalLabel: 'NegotiableQuote.PriceSummary.subTotal.label',\n subtotalWithTaxes: 'NegotiableQuote.PriceSummary.subTotal.withTaxes',\n subtotalWithoutTaxes: 'NegotiableQuote.PriceSummary.subTotal.withoutTaxes',\n\n // Shipping\n shippingLabel: 'NegotiableQuote.PriceSummary.shipping.label',\n shippingWithTaxes: 'NegotiableQuote.PriceSummary.shipping.withTaxes',\n shippingWithoutTaxes: 'NegotiableQuote.PriceSummary.shipping.withoutTaxes',\n\n // Total\n totalLabel: 'NegotiableQuote.PriceSummary.total.label',\n totalWithoutTax: 'NegotiableQuote.PriceSummary.total.withoutTax',\n totalSaved: 'NegotiableQuote.PriceSummary.total.saved',\n });\n\n const subTotalContent = subTotal && (\n <OrderSummaryLine\n key={translations.subtotalLabel}\n label={translations.subtotalLabel}\n price={subTotal.price}\n classSuffixes={['subTotal']}\n >\n {subTotal.taxIncluded && (\n <div\n data-testid=\"sub-total-tax-caption\"\n className=\"quote-order-summary__caption\"\n >\n <span>{translations.subtotalWithTaxes}</span>\n </div>\n )}\n\n {subTotal.taxExcluded ? (\n <div\n data-testid=\"sub-total-tax-caption-excluded\"\n className=\"quote-order-summary__caption\"\n >\n <span>\n {subTotal.priceExcludingTax}\n &nbsp;\n {translations.subtotalWithoutTaxes}\n </span>\n </div>\n ) : undefined}\n </OrderSummaryLine>\n );\n\n const shippingContent = shipping && (\n <OrderSummaryLine\n key={translations.shippingLabel}\n label={translations.shippingLabel}\n price={shipping.price}\n classSuffixes={['shipping']}\n >\n {shipping.taxIncluded && (\n <div\n data-testid=\"shipping-tax-caption\"\n className=\"quote-order-summary__caption\"\n >\n <span>{translations.shippingWithTaxes}</span>\n </div>\n )}\n\n {shipping.taxExcluded ? (\n <div\n data-testid=\"shipping-tax-caption-excluded\"\n className=\"quote-order-summary__caption\"\n >\n <span>\n {shipping.priceExcludingTax}\n &nbsp;\n {translations.shippingWithoutTaxes}\n </span>\n </div>\n ) : undefined}\n </OrderSummaryLine>\n );\n\n const discountsContent = discounts && discounts.length > 0 && (\n <>\n {discounts.map((discount) => (\n <OrderSummaryLine\n key={discount.label}\n label={discount.label}\n price={discount.price}\n classSuffixes={['discount']}\n >\n {discount.coupon && (\n <VComponent\n node={discount.coupon}\n className=\"quote-order-summary__coupon__code\"\n />\n )}\n\n {discount.caption && (\n <VComponent\n node={discount.caption}\n className=\"quote-order-summary__caption\"\n />\n )}\n </OrderSummaryLine>\n ))}\n </>\n );\n\n const taxContent =\n taxesApplied && taxesApplied.length > 0 ? (\n /* Show breakdown if provided */\n <Accordion\n data-testid=\"tax-breakdown\"\n className=\"quote-order-summary__taxes\"\n iconOpen={ChevronDown}\n iconClose={ChevronUp}\n >\n <AccordionSection\n ariaLabelTitle={translations.taxesBreakdownTitle}\n title={translations.taxesBreakdownTitle}\n secondaryText={\n !showTaxBreakdown && taxTotal ? (\n <VComponent\n node={taxTotal.price}\n className=\"quote-order-summary__price\"\n />\n ) : undefined\n }\n renderContentWhenClosed={false}\n onStateChange={setShowTaxBreakdown}\n >\n <div className=\"quote-order-summary__appliedTaxes\">\n {taxesApplied.map((tax) => (\n <OrderSummaryLine\n key={tax.label}\n label={tax.label}\n price={tax.price}\n classSuffixes={['taxEntry']}\n labelClassSuffix=\"muted\"\n />\n ))}\n </div>\n\n {taxTotal && (\n <OrderSummaryLine\n label={translations.taxTotal}\n price={taxTotal.price}\n classSuffixes={['taxTotal']}\n labelClassSuffix=\"muted\"\n />\n )}\n </AccordionSection>\n </Accordion>\n ) : (\n taxTotal && (\n <OrderSummaryLine\n label={translations.taxTotalOnly}\n price={taxTotal.price}\n classSuffixes={['taxTotal']}\n testId=\"tax-total-only\"\n />\n )\n );\n\n const lineItems: Array<OrderSummaryLineItem> = [\n {\n key: 'subTotalContent',\n sortOrder: 100,\n content: subTotalContent,\n },\n {\n key: 'shippingContent',\n sortOrder: 200,\n content: shippingContent,\n },\n {\n key: 'discountsContent',\n sortOrder: 600,\n content: discountsContent,\n },\n {\n key: 'taxContent',\n sortOrder: 800,\n content: taxContent,\n },\n ...(total\n ? [\n {\n key: 'totalContent',\n sortOrder: 900,\n content: (\n <OrderSummaryLine\n label={translations.totalLabel}\n price={total.price}\n classSuffixes={['total', 'total--padded']}\n testId=\"total-content\"\n labelClassSuffix=\"bold\"\n />\n ),\n },\n ]\n : []),\n ...(total?.priceWithoutTax\n ? [\n {\n key: 'totalWithoutTaxContent',\n sortOrder: 1000,\n content: (\n <OrderSummaryLine\n label={translations.totalWithoutTax}\n price={total.priceWithoutTax}\n classSuffixes={['totalWithoutTax']}\n testId=\"total-without-tax\"\n labelClassSuffix=\"muted\"\n />\n ),\n },\n ]\n : []),\n ...(totalSaved\n ? [\n {\n key: 'totalSavedContent',\n sortOrder: 1100,\n content: (\n <OrderSummaryLine\n label={translations.totalSaved}\n price={totalSaved}\n classSuffixes={['saved']}\n testId=\"total-saved\"\n labelClassSuffix=\"muted\"\n />\n ),\n },\n ]\n : []),\n ];\n\n const updatedLineItems: Array<OrderSummaryLineItem> = updateLineItems(\n lineItems\n ).sort(\n (currentLine: OrderSummaryLineItem, nextLine: OrderSummaryLineItem) => {\n return currentLine.sortOrder - nextLine.sortOrder;\n }\n );\n\n return (\n <div\n {...props}\n className={classes([\n 'quote-order-summary',\n [`quote-order-summary__${variant}`, variant],\n className,\n ])}\n >\n <div className=\"quote-order-summary__heading\">\n {heading && (\n <VComponent\n node={heading}\n className=\"quote-order-summary__heading-text\"\n />\n )}\n\n <Divider\n variant=\"primary\"\n className=\"quote-order-summary__divider-primary\"\n />\n </div>\n\n <div className=\"quote-order-summary__content\">\n {updatedLineItems.map((line: OrderSummaryLineItem) => {\n if (Array.isArray(line.content)) {\n return (\n <Accordion\n key={line.key}\n className={line.className}\n actionIconPosition={'right'}\n iconOpen={ChevronDown}\n iconClose={ChevronUp}\n >\n <AccordionSection\n defaultOpen={false}\n title={line.title}\n renderContentWhenClosed={false}\n >\n {line.content.map((innerLine) => {\n return innerLine.content;\n })}\n </AccordionSection>\n </Accordion>\n );\n }\n return line.content;\n })}\n </div>\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport '@/quote-management/components/OrderSummaryLine/OrderSummaryLine.css';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nexport interface OrderSummaryLineComponentProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'label'> {\n label: VNode | string;\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n classSuffixes?: Array<string>;\n labelClassSuffix?: string;\n testId?: string;\n children?: any;\n}\n\nexport const OrderSummaryLine: FunctionComponent<\n OrderSummaryLineComponentProps\n> = ({\n label,\n price,\n classSuffixes = [],\n labelClassSuffix,\n testId,\n children,\n ...props\n}) => {\n const labelClass = 'quote-order-summary__label';\n const priceClass = 'quote-order-summary__price';\n return (\n <div\n {...props}\n {...(testId ? { 'data-testid': testId } : {})}\n className={classes([\n 'quote-order-summary__entry',\n ...classSuffixes.map(\n (classSuffix) => `quote-order-summary__${classSuffix}`\n ),\n ])}\n >\n <span\n className={classes([\n labelClass,\n ...(labelClassSuffix ? [`${labelClass}--${labelClassSuffix}`] : []),\n ])}\n >\n {label}\n </span>\n\n <VComponent\n node={price}\n className={classes([\n priceClass,\n ...(labelClassSuffix ? [`${priceClass}--${labelClassSuffix}`] : []),\n ])}\n />\n\n {children}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { getGlobalLocale } from \"@adobe-commerce/elsie/lib\";\n\n/**\n * Gets the user's timezone with fallback to UTC if detection fails\n * @returns The user's timezone string (e.g., 'America/New_York') or 'UTC' as fallback\n */\nexport function getUserTimezone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (error) {\n console.warn('Failed to detect user timezone, falling back to UTC:', error);\n return 'UTC';\n }\n}\n\n/**\n * Checks if a date string is a valid date\n * @param dateString - The date string to check\n * @returns True if the date string is a valid date, false otherwise\n */\nexport function isValidDate(dateString: string): boolean {\n const date = new Date(dateString);\n return !isNaN(date.getTime());\n}\n\n/**\n * Formats a date string to locale date string, returning \"–\" for invalid dates\n * @param dateString - The date string to format\n * @returns Formatted date string or \"–\" for invalid dates\n */\nexport function formattedDate(dateString: string, type: 'short' | 'long' = 'short'): string {\n if (!isValidDate(dateString)) {\n return '–';\n }\n\n const locale = getGlobalLocale() || 'en-US';\n \n // For dates in YYYY-MM-DD format (like expiration dates), parse as local date to avoid timezone issues\n // This prevents dates from shifting when displayed in different timezones\n let date: Date;\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(dateString)) {\n // Parse as local date (not UTC) to avoid timezone conversion\n const [year, month, day] = dateString.split('-').map(Number);\n date = new Date(year, month - 1, day);\n } else {\n // For ISO timestamps or other formats, parse normally\n date = new Date(dateString);\n }\n\n if (type === 'short') {\n return date.toLocaleDateString(locale, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n });\n }\n\n return date.toLocaleDateString(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n });\n}\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, h } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useState, useEffect } from 'preact/hooks';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport {\n Table,\n Checkbox,\n Picker,\n Price,\n Button,\n Input,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { getUserTimezone } from '@/quote-management/utils/dateUtils';\nimport { CartItemModel } from '@/quote-management/data/models/negotiable-quote-model';\n\nimport '@/quote-management/components/ProductListTable/ProductListTable.css';\nimport { WarningFilled } from '@adobe-commerce/elsie/icons';\n\nexport interface ProductListTableProps\n extends HTMLAttributes<HTMLDivElement | HTMLFormElement> {\n items: CartItemModel[];\n canEdit: boolean;\n readOnly?: boolean;\n showActions?: boolean;\n onItemCheckboxChange?: (\n item: CartItemModel,\n isSelected: boolean\n ) => void;\n onItemDropdownChange?: (item: CartItemModel, action: string) => void;\n onQuantityChange?: (item: CartItemModel, newQuantity: number) => void;\n onUpdate?: (e: SubmitEvent) => void;\n dropdownSelections?: Record<string, string | undefined>;\n}\n\nexport const ProductListTable: FunctionComponent<ProductListTableProps> = ({\n className,\n items,\n canEdit,\n readOnly = false,\n showActions,\n onItemCheckboxChange,\n onItemDropdownChange,\n onQuantityChange,\n onUpdate,\n dropdownSelections,\n ...props\n}) => {\n // Track original quantities to detect changes\n const [originalQuantities, setOriginalQuantities] = useState<\n Record<string, number>\n >({});\n const [currentQuantities, setCurrentQuantities] = useState<\n Record<string, number>\n >({});\n\n // Initialize quantities when items change\n useEffect(() => {\n const quantities: Record<string, number> = {};\n items.forEach((item) => {\n quantities[item.uid] = item.quantity;\n });\n setOriginalQuantities(quantities);\n setCurrentQuantities(quantities);\n }, [items]);\n\n // Check if any quantities have changed\n const hasQuantityChanges = Object.keys(currentQuantities).some(\n (uid) => currentQuantities[uid] !== originalQuantities[uid]\n );\n\n const dictionary = useText({\n updateButton: 'NegotiableQuote.Manage.productListTable.submitButton',\n productNameHeader:\n 'NegotiableQuote.Manage.productListTable.headers.productName',\n skuHeader: 'NegotiableQuote.Manage.productListTable.headers.sku',\n priceHeader: 'NegotiableQuote.Manage.productListTable.headers.price',\n quantityHeader: 'NegotiableQuote.Manage.productListTable.headers.quantity',\n discountHeader: 'NegotiableQuote.Manage.productListTable.headers.discount',\n subtotalHeader: 'NegotiableQuote.Manage.productListTable.headers.subtotal',\n actionsHeader: 'NegotiableQuote.Manage.productListTable.headers.actions',\n editNoteToSeller:\n 'NegotiableQuote.Manage.productListTable.actions.editNoteToSeller',\n remove: 'NegotiableQuote.Manage.productListTable.actions.remove',\n notesHeader: 'NegotiableQuote.Manage.productListTable.notes.header',\n leftANote: 'NegotiableQuote.Manage.productListTable.notes.leftANote',\n buyer: 'NegotiableQuote.Manage.productListTable.notes.buyer',\n seller: 'NegotiableQuote.Manage.productListTable.notes.seller',\n outOfStock: 'NegotiableQuote.Manage.productListTable.outOfStock',\n outOfStockMessage:\n 'NegotiableQuote.Manage.productListTable.outOfStockMessage',\n });\n\n const columns = [\n {\n label: dictionary.productNameHeader,\n key: 'productName',\n },\n {\n label: dictionary.skuHeader,\n key: 'sku',\n },\n {\n label: dictionary.priceHeader,\n key: 'price',\n },\n {\n label: dictionary.quantityHeader,\n key: 'quantity',\n },\n {\n label: dictionary.discountHeader,\n key: 'discount',\n },\n {\n label: dictionary.subtotalHeader,\n key: 'subtotal',\n },\n ];\n\n // Add checkbox column when canEdit (for bulk operations)\n if (canEdit && !readOnly) {\n columns.unshift({\n label: '',\n key: 'checkbox',\n });\n }\n\n // Add actions column when showActions is explicitly true, or when canEdit is true and showActions is not explicitly false\n const shouldShowActions = showActions ?? canEdit;\n if (shouldShowActions && !readOnly) {\n columns.push({\n label: dictionary.actionsHeader,\n key: 'actions',\n });\n }\n\n const handleItemCheckboxChange = (\n event: Event,\n item: CartItemModel\n ) => {\n const isSelected = (event.target as HTMLInputElement).checked;\n onItemCheckboxChange?.(item, isSelected);\n };\n\n const handleItemDropdownChange = (\n event: Event,\n item: CartItemModel\n ) => {\n const action = (event.target as HTMLSelectElement).value;\n onItemDropdownChange?.(item, action);\n };\n\n const handleQuantityChange = (event: Event, item: CartItemModel) => {\n const newQuantity = parseInt((event.target as HTMLInputElement).value, 10);\n if (!isNaN(newQuantity) && newQuantity > 0) {\n setCurrentQuantities((prev) => ({\n ...prev,\n [item.uid]: newQuantity,\n }));\n onQuantityChange?.(item, newQuantity);\n }\n };\n\n const handleUpdate = (event: SubmitEvent) => {\n event.preventDefault();\n onUpdate?.(event);\n };\n\n const discountElement = (amountOff: number, percentOff: number) => {\n return amountOff > 0 ? (\n <div className=\"quote-management-product-list-table__discount-container\">\n <span className=\"quote-management-product-list-table__discount-percent\">\n {percentOff}%\n </span>\n <span className=\"quote-management-product-list-table__discount-price\">\n (<Price amount={amountOff} />)\n </span>\n </div>\n ) : undefined;\n };\n\n const getProductNameContent = (item: CartItemModel) => {\n const configurableOptions = item.configurableOptions?.map((option) => (\n <div\n key={option.optionLabel}\n className=\"quote-management-product-list-table__configurable-option\"\n >\n <span className=\"quote-management-product-list-table__configurable-option-label\">\n {option.optionLabel}:\n </span>\n <span className=\"quote-management-product-list-table__configurable-option-value\">\n {option.valueLabel}\n </span>\n </div>\n ));\n\n const bundleOptions = item.bundleOptions?.map((option) => (\n <div\n key={option.label}\n className=\"quote-management-product-list-table__bundle-option\"\n >\n <span className=\"quote-management-product-list-table__bundle-option-label\">\n {option.label}\n </span>\n <div className=\"quote-management-product-list-table__bundle-option-values\">\n {option.values.map((value) => (\n <span\n key={value.label}\n className=\"quote-management-product-list-table__bundle-option-value\"\n >\n <span className=\"quote-management-product-list-table__bundle-option-value-quantity\">\n {value.quantity} x\n </span>\n <span className=\"quote-management-product-list-table__bundle-option-value-label\">\n {value.label}\n </span>\n <Price\n className=\"quote-management-product-list-table__bundle-option-value-original-price\"\n amount={value.originalPrice.value}\n currency={value.originalPrice.currency}\n weight=\"normal\"\n />\n </span>\n ))}\n </div>\n </div>\n ));\n\n return (\n <div className=\"quote-management-product-list-table__product-name-container\">\n <span className=\"quote-management-product-list-table__product-name\">\n {item.product.name}\n </span>\n {configurableOptions}\n {bundleOptions}\n </div>\n );\n };\n\n const formatNoteTimestamp = (timestamp: string) => {\n const date = new Date(timestamp);\n return date.toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n timeZone: getUserTimezone(),\n });\n };\n\n const getNotesContent = (item: CartItemModel) => {\n const validNotesFromBuyer = item.noteFromBuyer?.filter(\n (note) => note && note.note && note.note.trim() !== ''\n ) || [];\n\n const validNotesFromSeller = item.noteFromSeller?.filter(\n (note) => note && note.note && note.note.trim() !== ''\n ) || [];\n\n const validNotes = [...validNotesFromBuyer, ...validNotesFromSeller];\n\n if (validNotes.length === 0) {\n return null;\n }\n\n return (\n <div\n className=\"quote-management-product-list-table__notes-container\"\n data-testid={`item-notes-${item.product.sku}`}\n >\n <div className=\"quote-management-product-list-table__notes-header\">\n {dictionary.notesHeader}\n </div>\n <div className=\"quote-management-product-list-table__notes-list\">\n {validNotes.map((note, index) => (\n <div\n key={note.noteUid || index}\n className=\"quote-management-product-list-table__note-item\"\n >\n <div className=\"quote-management-product-list-table__note-content\">\n <strong className=\"quote-management-product-list-table__note-meta\">\n {/* TODO: When backend exposes creator_name for notes, replace (Buyer) with the actual name */}\n {formatNoteTimestamp(note.createdAt)} ({validNotesFromBuyer.includes(note) ? dictionary.buyer : dictionary.seller})\n </strong>{' '}\n {dictionary.leftANote}\n </div>\n <div className=\"quote-management-product-list-table__note-text\">\n {note.note}{' '}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n const expandedRows = new Set<number>();\n const rowData = items.flatMap((item, index) => {\n const notes = getNotesContent(item);\n if (notes || item.outOfStock) {\n expandedRows.add(index);\n }\n\n const quantityElement = canEdit ? (\n <Input\n className=\"quote-management-product-list-table__quantity-input\"\n type=\"number\"\n min=\"1\"\n value={\n currentQuantities[item.uid]?.toString() || item.quantity.toString()\n }\n onChange={(e) => handleQuantityChange(e, item)}\n disabled={readOnly || !canEdit}\n data-testid={`quantity-input-${item.product.sku}`}\n />\n ) : (\n <span className=\"quote-management-product-list-table__quantity\">\n {item.quantity}\n </span>\n );\n\n const productRow = {\n checkbox: (\n <Checkbox\n className=\"quote-management-product-list-table__checkbox\"\n name=\"itemSelected\"\n data-testid={`item-checkbox-${item.product.sku}`}\n onChange={(e) => handleItemCheckboxChange(e, item)}\n value={item.product.sku}\n />\n ),\n productName: getProductNameContent(item),\n sku: (\n <span className=\"quote-management-product-list-table__sku\">\n {item.product.sku}\n </span>\n ),\n price: (\n <Price\n className=\"quote-management-product-list-table__price\"\n amount={item.prices.originalItemPrice.value}\n currency={item.prices.originalItemPrice.currency}\n />\n ),\n quantity: quantityElement,\n discount: item.rowCatalogDiscount\n ? discountElement(\n item.rowCatalogDiscount.amountOff,\n item.rowCatalogDiscount.percentOff\n )\n : undefined,\n subtotal: (\n <Price\n className=\"quote-management-product-list-table__subtotal\"\n amount={item.prices.rowTotal.value}\n currency={item.prices.rowTotal.currency}\n />\n ),\n actions: (\n <Picker\n className=\"quote-management-product-list-table__actions\"\n data-testid={`item-dropdown-${item.product.sku}`}\n name={`item-dropdown-${item.product.sku}`}\n handleSelect={(e) => handleItemDropdownChange(e, item)}\n placeholder=\"Select\"\n value={dropdownSelections?.[item.uid] ?? ''}\n options={[\n { text: dictionary.editNoteToSeller, value: 'edit' },\n { text: dictionary.remove, value: 'remove' },\n ]}\n />\n ),\n _rowDetails: <>\n {/* If the item is out of stock, show a message */}\n {item.outOfStock && (\n <div className=\"quote-management-product-list-table__out-of-stock-message\">\n <InLineAlert\n type=\"warning\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.outOfStock}\n description={dictionary.outOfStockMessage}\n />\n </div>\n )}\n {/* If there are notes, create a notes details */}\n {notes && (\n <div className=\"quote-management-product-list-table__notes-row-wrapper\">\n {notes}\n </div>\n )}\n </>\n };\n\n return [productRow];\n });\n\n const table = (\n <Table\n columns={columns}\n rowData={rowData}\n data-testid=\"product-list-table\"\n mobileLayout=\"stacked\"\n expandedRows={expandedRows}\n />\n );\n\n // if can edit, the wrapper node should use the form element, else use the div element\n const wrapperNode = canEdit ? h('form', {}) : h('div', {});\n const wrapperProps = canEdit\n ? {\n onSubmit: handleUpdate,\n ...props,\n }\n : props;\n\n const submitButton = (\n <Button\n type=\"submit\"\n disabled={readOnly || !canEdit || !hasQuantityChanges}\n data-testid=\"product-list-table-submit-button\"\n >\n {dictionary.updateButton}\n </Button>\n );\n\n return (\n <VComponent\n node={wrapperNode}\n className={classes([\n 'quote-management-product-list-table-container',\n className,\n ])}\n data-testid=\"product-list-table-container\"\n {...wrapperProps}\n >\n {table}\n <div className=\"quote-management-product-list-table-container__submit-container\">\n {submitButton}\n </div>\n </VComponent>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n \nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/QuotePricesSummary/QuotePricesSummary.css';\nimport { Accordion, AccordionSection } from '@adobe-commerce/elsie/components';\n\ninterface Entry {\n label: string;\n id: string;\n value: VNode;\n strong?: boolean;\n children?: Entry[];\n}\n\nexport interface QuotePricesSummaryProps extends HTMLAttributes<HTMLDivElement> {\n entries?: Entry[];\n}\n\nexport const QuotePricesSummary: FunctionComponent<QuotePricesSummaryProps> = ({\n className,\n entries,\n ...props\n}) => {\n const createEntry = (entry: Entry) => {\n const children = entry.children?.map(createEntry);\n return (\n <div key={entry.id} className=\"quote-management-quote-prices-summary__entry\" data-testid={`quote-prices-summary-entry-${entry.id}`}>\n {children ? <Accordion\n className=\"quote-management-quote-prices-summary__accordion\"\n data-testid={`quote-prices-summary-entry-accordion-${entry.id}`}\n >\n <AccordionSection className=\"quote-management-quote-prices-summary__accordion-section\" title={entry.label} ariaLabelTitle={entry.label} secondaryText={entry.value}>\n {children}\n </AccordionSection>\n </Accordion>\n :\n <>\n <span className={classes(['quote-management-quote-prices-summary__label', ['quote-management-quote-prices-summary__label--strong', entry.strong]])} data-testid={`quote-prices-summary-entry-label-${entry.id}`}>{entry.label}</span>\n <span className=\"quote-management-quote-prices-summary__value\" data-testid={`quote-prices-summary-entry-value-${entry.id}`}>{entry.value}</span>\n </>\n }\n </div>\n );\n };\n\n return (\n <div className={classes(['quote-management-quote-prices-summary', className])} data-testid=\"quote-prices-summary\" {...props}>\n {entries?.map(createEntry)}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport {\n Divider,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport '@/quote-management/components/QuoteSummaryList/QuoteSummaryList.css';\n\nexport interface QuoteSummaryListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n heading?: VNode | null;\n footer?: VNode | null;\n products?: VNode | null;\n outOfStockMessage?: VNode | null;\n loading?: boolean;\n variant?: 'primary' | 'secondary';\n}\n\nexport const QuoteSummaryList: FunctionComponent<QuoteSummaryListProps> = ({\n className,\n children,\n heading,\n footer,\n products,\n outOfStockMessage,\n loading = true,\n variant = 'primary',\n ...props\n}) => {\n return (\n <div\n {...props}\n className={classes([\n 'quote-management-quote-summary-list',\n className,\n `quote-management-quote-summary-list__background--${variant}`,\n ])}\n >\n {loading ? (\n <QuoteSummaryListSkeleton />\n ) : (\n <>\n {(heading || outOfStockMessage) && (\n <div\n data-testid=\"quote-summary-list-heading-wrapper\"\n className={classes([\n 'quote-management-quote-summary-list__heading',\n [\n 'quote-management-quote-summary-list__heading--full-width',\n !products,\n ],\n ])}\n >\n {heading && (\n <>\n <VComponent\n node={heading}\n className=\"quote-management-quote-summary-list__heading-text\"\n />\n <Divider\n variant=\"primary\"\n className={classes([\n 'quote-management-quote-summary-list__heading-divider',\n ])}\n />\n </>\n )}\n\n {outOfStockMessage && (\n <VComponent\n node={outOfStockMessage}\n className=\"quote-management-quote-summary-list__out-of-stock-message\"\n />\n )}\n </div>\n )}\n <div\n className={classes([\n 'quote-management-quote-summary-list__content',\n ])}\n >\n {products}\n </div>\n\n {footer && (\n <>\n <Divider\n variant=\"primary\"\n className={classes([\n 'quote-management-quote-summary-list__footer-divider',\n ])}\n />\n <VComponent\n node={footer}\n className=\"quote-management-quote-summary-list__footer-text\"\n />\n </>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst QuoteSummaryListSkeleton: FunctionComponent = () => {\n return (\n <Skeleton\n data-testid=\"quote-summary-list-skeleton\"\n className=\"quote-management-quote-summary-list__skeleton\"\n rowGap=\"medium\"\n >\n <SkeletonRow\n variant=\"row\"\n size=\"xlarge\"\n fullWidth={true}\n lines={3}\n multilineGap=\"small\"\n />\n </Skeleton>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Table } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/QuotesListTable/QuotesListTable.css';\n\ntype Column = {\n key: string;\n label: string;\n};\n\nexport interface QuotesListTableProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading' | 'children'> {\n rowData: QuoteRowData[];\n loading?: boolean;\n className?: string;\n emptyStateMessage?: VNode;\n showItemRange?: boolean;\n itemRangeMessage?: VNode;\n showPageSizePicker?: boolean;\n pageSizePickerMessage?: VNode;\n showPagination?: boolean;\n paginationMessage?: VNode;\n}\n\nexport type QuoteRowData = {\n id: string;\n quoteName: VNode;\n created: VNode;\n createdBy: VNode;\n status: VNode;\n lastUpdated: VNode;\n quoteTemplate: VNode;\n quoteTotal: VNode;\n actions: VNode;\n [key: string]: VNode | string | number | undefined;\n};\n\nexport const QuotesListTable: FunctionComponent<QuotesListTableProps> = ({\n rowData = [],\n loading = false,\n className,\n emptyStateMessage,\n showItemRange = true,\n itemRangeMessage,\n showPageSizePicker = true,\n pageSizePickerMessage,\n showPagination = true,\n paginationMessage,\n ...props\n}) => {\n const dictionary = useText({\n quoteName: 'QuoteManagement.QuotesListTable.quoteName',\n created: 'QuoteManagement.QuotesListTable.created',\n createdBy: 'QuoteManagement.QuotesListTable.createdBy',\n status: 'QuoteManagement.QuotesListTable.status',\n lastUpdated: 'QuoteManagement.QuotesListTable.lastUpdated',\n quoteTemplate: 'QuoteManagement.QuotesListTable.quoteTemplate',\n quoteTotal: 'QuoteManagement.QuotesListTable.quoteTotal',\n actions: 'QuoteManagement.QuotesListTable.actions',\n });\n\n const columns: Column[] = [\n { key: 'quoteName', label: dictionary.quoteName },\n { key: 'created', label: dictionary.created },\n { key: 'createdBy', label: dictionary.createdBy },\n { key: 'status', label: dictionary.status },\n { key: 'lastUpdated', label: dictionary.lastUpdated },\n { key: 'quoteTemplate', label: dictionary.quoteTemplate },\n { key: 'quoteTotal', label: dictionary.quoteTotal },\n { key: 'actions', label: dictionary.actions },\n ];\n\n // Check if should show the table when loading or there is data\n const shouldShowTable = loading || rowData.length > 0;\n\n // Check if we should show empty state\n const shouldShowEmptyState =\n !loading && rowData.length === 0 && emptyStateMessage;\n\n // Show item range if requested and message is provided\n const shouldShowItemRange = showItemRange && itemRangeMessage;\n\n // Show page size picker if requested and message is provided\n const shouldShowPageSizePicker = showPageSizePicker && pageSizePickerMessage;\n\n // Show pagination if requested and message is provided\n const shouldShowPagination = showPagination && paginationMessage;\n\n // Show footer if any pagination element should be shown\n const shouldShowFooter =\n shouldShowItemRange || shouldShowPageSizePicker || shouldShowPagination;\n\n return (\n <div\n {...props}\n className={classes(['quote-management-quotes-list-table', className])}\n >\n {shouldShowTable && (\n <Table\n columns={columns}\n rowData={rowData}\n loading={loading}\n mobileLayout=\"none\"\n className=\"quote-management-quotes-list-table__table\"\n />\n )}\n {shouldShowEmptyState && (\n <div className=\"quotes-list-table__empty-state\">\n {emptyStateMessage}\n </div>\n )}\n {shouldShowFooter && (\n <div className=\"quotes-list-table__footer\">\n <div className=\"quotes-list-table__item-range\">\n {shouldShowItemRange && itemRangeMessage}\n </div>\n <div className=\"quotes-list-table__pagination\">\n {shouldShowPagination && paginationMessage}\n </div>\n <div className=\"quotes-list-table__page-size-picker\">\n {shouldShowPageSizePicker && pageSizePickerMessage}\n </div>\n </div>\n )}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Table } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/QuoteTemplatesListTable/QuoteTemplatesListTable.css';\n\ntype Column = {\n key: string;\n label: string;\n};\n\nexport interface QuoteTemplatesListTableProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading' | 'children'> {\n rowData: QuoteTemplateRowData[];\n loading?: boolean;\n className?: string;\n emptyStateMessage?: VNode;\n showItemRange?: boolean;\n itemRangeMessage?: VNode;\n showPageSizePicker?: boolean;\n pageSizePickerMessage?: VNode;\n showPagination?: boolean;\n paginationMessage?: VNode;\n}\n\nexport type QuoteTemplateRowData = {\n id: string;\n name: VNode;\n state: VNode;\n status: VNode;\n validUntil: VNode;\n minQuoteTotal: VNode;\n ordersPlaced: VNode;\n lastOrdered: VNode;\n actions: VNode;\n [key: string]: VNode | string | number | undefined;\n};\n\nexport const QuoteTemplatesListTable: FunctionComponent<\n QuoteTemplatesListTableProps\n> = ({\n rowData = [],\n loading = false,\n className,\n emptyStateMessage,\n showItemRange = true,\n itemRangeMessage,\n showPageSizePicker = true,\n pageSizePickerMessage,\n showPagination = true,\n paginationMessage,\n ...props\n}) => {\n const dictionary = useText({\n name: 'QuoteManagement.QuoteTemplatesListTable.name',\n state: 'QuoteManagement.QuoteTemplatesListTable.state',\n status: 'QuoteManagement.QuoteTemplatesListTable.status',\n validUntil: 'QuoteManagement.QuoteTemplatesListTable.validUntil',\n minQuoteTotal: 'QuoteManagement.QuoteTemplatesListTable.minQuoteTotal',\n ordersPlaced: 'QuoteManagement.QuoteTemplatesListTable.ordersPlaced',\n lastOrdered: 'QuoteManagement.QuoteTemplatesListTable.lastOrdered',\n actions: 'QuoteManagement.QuoteTemplatesListTable.actions',\n });\n\n const columns: Column[] = [\n { key: 'name', label: dictionary.name },\n { key: 'state', label: dictionary.state },\n { key: 'status', label: dictionary.status },\n { key: 'validUntil', label: dictionary.validUntil },\n { key: 'minQuoteTotal', label: dictionary.minQuoteTotal },\n { key: 'ordersPlaced', label: dictionary.ordersPlaced },\n { key: 'lastOrdered', label: dictionary.lastOrdered },\n { key: 'actions', label: dictionary.actions },\n ];\n\n // Check if should show the table when loading or there is data\n const shouldShowTable = loading || rowData.length > 0;\n\n // Check if we should show empty state\n const shouldShowEmptyState =\n !loading && rowData.length === 0 && emptyStateMessage;\n\n // Show item range if requested and message is provided\n const shouldShowItemRange = showItemRange && itemRangeMessage;\n\n // Show page size picker if requested and message is provided\n const shouldShowPageSizePicker = showPageSizePicker && pageSizePickerMessage;\n\n // Show pagination if requested and message is provided\n const shouldShowPagination = showPagination && paginationMessage;\n\n // Show footer if any pagination element should be shown\n const shouldShowFooter =\n shouldShowItemRange || shouldShowPageSizePicker || shouldShowPagination;\n\n return (\n <div\n {...props}\n className={classes([\n 'quote-management-quote-templates-list-table',\n className,\n ])}\n >\n {shouldShowTable && (\n <Table\n columns={columns}\n rowData={rowData}\n loading={loading}\n mobileLayout=\"none\"\n className=\"quote-management-quote-templates-list-table__table\"\n />\n )}\n {shouldShowEmptyState && (\n <div className=\"quote-templates-list-table__empty-state\">\n {emptyStateMessage}\n </div>\n )}\n {shouldShowFooter && (\n <div className=\"quote-templates-list-table__footer\">\n <div className=\"quote-templates-list-table__item-range\">\n {shouldShowItemRange && itemRangeMessage}\n </div>\n <div className=\"quote-templates-list-table__pagination\">\n {shouldShowPagination && paginationMessage}\n </div>\n <div className=\"quote-templates-list-table__page-size-picker\">\n {shouldShowPageSizePicker && pageSizePickerMessage}\n </div>\n </div>\n )}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { Button, Modal } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/ConfirmationModal/ConfirmationModal.css';\n\nexport interface ConfirmationModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open?: boolean;\n title?: VNode | string;\n message?: VNode | string;\n cancelLabel?: VNode | string;\n confirmLabel?: VNode | string;\n onCancel?: () => void;\n onConfirm?: () => void;\n onClose?: () => void;\n showCloseButton?: boolean;\n confirmationBanner?: VNode | null;\n}\n\nexport const ConfirmationModal: FunctionComponent<ConfirmationModalProps> = ({\n open = false,\n title,\n message,\n cancelLabel,\n confirmLabel,\n onCancel,\n onConfirm,\n onClose,\n showCloseButton,\n confirmationBanner,\n ...props\n}) => {\n const dictionary = useText({\n cancel: 'ConfirmationModal.cancel',\n confirm: 'ConfirmationModal.confirm',\n });\n\n if (!open) {\n return null;\n }\n\n const { className, ...restProps } = props;\n\n return (\n <Modal\n {...restProps}\n size={'medium'}\n onClose={onClose || onCancel}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n data-testid=\"confirmation-modal\"\n className={className}\n >\n <div className=\"confirmation-modal__content\">\n {confirmationBanner && (\n <div\n className=\"confirmation-modal__banner\"\n data-testid=\"confirmation-modal-banner\"\n >\n {confirmationBanner}\n </div>\n )}\n {title && (\n <div\n className=\"confirmation-modal__title\"\n data-testid=\"confirmation-modal-title\"\n >\n {title}\n </div>\n )}\n {message && (\n <div\n className=\"confirmation-modal__message\"\n data-testid=\"confirmation-modal-message\"\n >\n {message}\n </div>\n )}\n <div\n className=\"confirmation-modal__actions\"\n data-testid=\"confirmation-modal-actions\"\n >\n {onCancel && (\n <Button\n variant=\"secondary\"\n onClick={onCancel}\n data-testid=\"confirmation-modal-cancel\"\n >\n {cancelLabel ?? dictionary.cancel}\n </Button>\n )}\n <Button\n variant=\"primary\"\n onClick={onConfirm}\n data-testid=\"confirmation-modal-confirm\"\n >\n {confirmLabel ?? dictionary.confirm}\n </Button>\n </div>\n </div>\n </Modal>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { formattedDate } from '@/quote-management/utils/dateUtils';\nimport '@/quote-management/components/QuoteHistoryLog/QuoteHistoryLog.css';\n\nexport interface HistoryEntry {\n uid: string;\n createdAt: string;\n author: {\n firstname: string;\n lastname: string;\n };\n changeType: string;\n changes: {\n commentAdded?: { comment: string };\n statuses?: { changes: Array<{ oldStatus?: string; newStatus?: string }> };\n expiration?: { oldExpiration?: string; newExpiration?: string };\n total?: {\n oldPrice?: { value: number; currency: string };\n newPrice?: { value: number; currency: string };\n };\n customChanges?: { title: string; old_value: string; new_value: string };\n productsRemoved?: {\n productsRemovedFromCatalog?: string[];\n productsRemovedFromQuote?: Array<{ name?: string; sku?: string; uid: string }>;\n };\n };\n}\n\nexport interface ItemNote {\n createdAt: string;\n creatorId: number;\n creatorType: number;\n negotiableQuoteItemUid: string;\n note: string;\n noteUid: string;\n}\n\nexport interface QuoteItem {\n product: {\n name: string;\n sku: string;\n };\n noteFromBuyer?: ItemNote[];\n noteFromSeller?: ItemNote[];\n}\n\nexport interface QuoteHistoryLogProps extends HTMLAttributes<HTMLDivElement> {\n history?: HistoryEntry[];\n items?: QuoteItem[];\n buyer: {\n firstname: string;\n lastname: string;\n };\n salesRepName: string;\n}\n\nexport const QuoteHistoryLog: FunctionComponent<QuoteHistoryLogProps> = ({\n className,\n children,\n history,\n items,\n buyer,\n salesRepName,\n ...props\n}) => {\n const dictionary = useText({\n quoteCreated: 'historyLog.changeTypes.created',\n quoteUpdated: 'historyLog.changeTypes.updated',\n statusChanged: 'historyLog.changeTypes.statusChanged',\n commentAdded: 'historyLog.changeTypes.commentAdded',\n expirationChanged: 'historyLog.changeTypes.expirationChanged',\n buyerNoteAdded: 'historyLog.noteTypes.buyerNoteAdded',\n sellerNoteAdded: 'historyLog.noteTypes.sellerNoteAdded',\n buyerLabel: 'historyLog.authorLabels.buyer',\n sellerLabel: 'historyLog.authorLabels.seller',\n commentDetail: 'historyLog.changeDetails.comment',\n statusChangedFromTo: 'historyLog.changeDetails.statusChangedFromTo',\n statusSetTo: 'historyLog.changeDetails.statusSetTo',\n expirationChangedFromTo: 'historyLog.changeDetails.expirationChangedFromTo',\n expirationSetTo: 'historyLog.changeDetails.expirationSetTo',\n totalChangedFromTo: 'historyLog.changeDetails.totalChangedFromTo',\n customChange: 'historyLog.changeDetails.customChange',\n productsRemovedFromCatalog: 'historyLog.changeDetails.productsRemovedFromCatalog',\n productsRemovedFromQuote: 'historyLog.changeDetails.productsRemovedFromQuote',\n noDetailsAvailable: 'historyLog.changeDetails.noDetailsAvailable',\n emptyState: 'historyLog.emptyState',\n never: 'dateUtils.never',\n });\n\n\n const formatChangeType = (changeType: string) => {\n switch (changeType) {\n case 'CREATED':\n return dictionary.quoteCreated;\n case 'UPDATED':\n return dictionary.quoteUpdated;\n case 'STATUS_CHANGED':\n return dictionary.statusChanged;\n case 'COMMENT_ADDED':\n return dictionary.commentAdded;\n case 'EXPIRATION_CHANGED':\n return dictionary.expirationChanged;\n default:\n return changeType\n .replace(/_/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (l) => l.toUpperCase());\n }\n };\n\n // Handle status or expiration changes\n const formatChanges = (changes: any) => {\n const changeDetails = [];\n\n if (changes?.commentAdded?.comment) {\n changeDetails.push(\n dictionary.commentDetail.replace(\n '{comment}',\n changes.commentAdded.comment\n )\n );\n }\n\n if (changes?.statuses?.changes) {\n changes.statuses.changes.forEach((statusChange: any) => {\n if (statusChange.oldStatus && statusChange.newStatus) {\n changeDetails.push(\n dictionary.statusChangedFromTo\n .replace('{oldStatus}', statusChange.oldStatus)\n .replace('{newStatus}', statusChange.newStatus)\n );\n } else if (statusChange.newStatus) {\n changeDetails.push(\n dictionary.statusSetTo.replace(\n '{newStatus}',\n statusChange.newStatus\n )\n );\n }\n });\n }\n\n if (\n changes?.expiration?.newExpiration &&\n changes?.expiration?.oldExpiration\n ) {\n const newDateFormatted = formattedDate(changes.expiration.newExpiration);\n const oldDateFormatted = formattedDate(changes.expiration.oldExpiration);\n changeDetails.push(\n dictionary.expirationChangedFromTo\n .replace('{oldExpiration}', oldDateFormatted)\n .replace('{newExpiration}', newDateFormatted)\n );\n } else if (changes?.expiration?.newExpiration) {\n const newDateFormatted = formattedDate(changes.expiration.newExpiration);\n changeDetails.push(\n dictionary.expirationSetTo.replace('{newExpiration}', newDateFormatted)\n );\n }\n\n if (changes?.total?.newPrice && changes?.total?.oldPrice) {\n const newTotal = `${changes.total.newPrice.currency} ${changes.total.newPrice.value}`;\n const oldTotal = `${changes.total.oldPrice.currency} ${changes.total.oldPrice.value}`;\n changeDetails.push(\n dictionary.totalChangedFromTo\n .replace('{oldTotal}', oldTotal)\n .replace('{newTotal}', newTotal)\n );\n }\n\n if (changes?.customChanges?.title && changes?.customChanges?.old_value && changes?.customChanges?.new_value) {\n changeDetails.push(\n dictionary.customChange\n .replace('{title}', changes.customChanges.title)\n .replace('{oldValue}', changes.customChanges.old_value)\n .replace('{newValue}', changes.customChanges.new_value)\n );\n }\n\n if (changes?.productsRemoved?.productsRemovedFromCatalog && changes.productsRemoved.productsRemovedFromCatalog.length > 0) {\n changeDetails.push(\n dictionary.productsRemovedFromCatalog.replace(\n '{products}',\n changes.productsRemoved.productsRemovedFromCatalog.join(', ')\n )\n );\n }\n\n if (changes?.productsRemoved?.productsRemovedFromQuote && changes.productsRemoved.productsRemovedFromQuote.length > 0) {\n const productNames = changes.productsRemoved.productsRemovedFromQuote.map((product: any) =>\n product.name || product.sku || product.uid\n ).join(', ');\n changeDetails.push(\n dictionary.productsRemovedFromQuote.replace('{products}', productNames)\n );\n }\n\n return changeDetails.length > 0\n ? changeDetails\n : [dictionary.noDetailsAvailable];\n };\n\n // Get item notes outside of history entries\n const getItemNotes = () => {\n const notes: Array<{\n createdAt: string;\n creatorId: number;\n creatorType: number;\n negotiableQuoteItemUid: string;\n note: string;\n noteUid: string;\n type: 'buyer' | 'seller';\n productName: string;\n productSku: string;\n authorName: string;\n }> = [];\n\n const processNotes = (\n noteArray: ItemNote[] | undefined,\n type: 'buyer' | 'seller',\n authorName: string,\n item: QuoteItem\n ) => {\n if (noteArray && Array.isArray(noteArray)) {\n noteArray.forEach((note) => {\n if (note && note.note && note.note.trim()) {\n notes.push({\n ...note,\n type,\n productName: item.product.name,\n productSku: item.product.sku,\n authorName,\n });\n }\n });\n }\n };\n\n if (items) {\n items.forEach((item) => {\n processNotes(\n item.noteFromBuyer,\n 'buyer',\n `${buyer.firstname} ${buyer.lastname} ${dictionary.buyerLabel}`,\n item\n );\n\n processNotes(\n item.noteFromSeller,\n 'seller',\n `${salesRepName} ${dictionary.sellerLabel}`,\n item\n );\n });\n }\n\n return notes;\n };\n\n const itemNotes = getItemNotes();\n\n // Get history entries\n const historyEntries = (history || []).map((entry) => ({\n ...entry,\n entryType: 'history' as const,\n }));\n const noteEntries = itemNotes.map((note) => ({\n ...note,\n entryType: 'note' as const,\n }));\n\n // Combine history and item notes without sorting\n const allEntries = [...historyEntries, ...noteEntries];\n\n return (\n <div\n {...props}\n className={classes(['quote-management-quote-history-log', className])}\n >\n {allEntries.length > 0 ? (\n <div className=\"quote-management-quote-history-log__entries\">\n {allEntries.map((entry, index) => (\n <div\n key={\n entry.entryType === 'history'\n ? entry.uid\n : `${entry.noteUid}-${index}`\n }\n className=\"quote-management-quote-history-log__entry\"\n >\n <div className=\"quote-management-quote-history-log__entry-header\">\n <div className=\"quote-management-quote-history-log__entry-meta\">\n <span className=\"quote-management-quote-history-log__entry-date\">\n {formattedDate(entry.createdAt, 'long')}\n </span>\n <span className=\"quote-management-quote-history-log__entry-author\">\n {entry.entryType === 'history'\n ? `by ${entry.author.firstname} ${entry.author.lastname\n } ${entry.author.firstname === buyer.firstname &&\n entry.author.lastname === buyer.lastname\n ? dictionary.buyerLabel\n : dictionary.sellerLabel\n }`\n : `by ${entry.authorName}`}\n </span>\n </div>\n <div className=\"quote-management-quote-history-log__entry-type\">\n {entry.entryType === 'history'\n ? formatChangeType(entry.changeType)\n : entry.type === 'buyer'\n ? dictionary.buyerNoteAdded\n : dictionary.sellerNoteAdded}\n </div>\n </div>\n <div className=\"quote-management-quote-history-log__entry-changes\">\n {entry.entryType === 'history' ? (\n formatChanges(entry.changes).map((change, changeIndex) => (\n <div\n key={changeIndex}\n className=\"quote-management-quote-history-log__entry-change\"\n >\n {change}\n </div>\n ))\n ) : (\n <div className=\"quote-management-quote-history-log__entry-change\">\n <div>\n {entry.productName}({entry.productSku})\n </div>\n <div>\"{entry.note}\"</div>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"quote-management-quote-history-log__empty\">\n {dictionary.emptyState}\n </div>\n )}\n {children}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useMemo, useState } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/TabbedContent/TabbedContent.css';\n\nexport interface TabbedContentProps extends HTMLAttributes<HTMLDivElement> {\n tabs: Map<string, string>;\n tabsContent: Map<string, VNode>;\n defaultActiveTab?: string;\n}\n\nexport const TabbedContent: FunctionComponent<TabbedContentProps> = ({\n className,\n tabs,\n tabsContent,\n defaultActiveTab,\n ...props\n}) => {\n const [activeTabId, setActiveTabId] = useState<string>(\n defaultActiveTab || Array.from(tabs.keys())[0]\n );\n\n const handleTabClick = (tabId: string) => {\n setActiveTabId(tabId);\n };\n\n const activeTabContent = useMemo(() => {\n return tabsContent.get(activeTabId);\n }, [activeTabId, tabsContent]);\n\n return (\n <div {...props} className={classes(['quote-management-tabbed-content', className])}>\n {tabs &&\n <div data-testid=\"tabbed-content-tabs\" className={classes(['quote-management-tabbed-content__tabs'])}>\n {Array.from(tabs.entries()).map(([tabId, tabLabel]) => (\n <button\n className={\n classes([\n 'quote-management-tabbed-content__tab',\n ['quote-management-tabbed-content__tab--active', tabId === activeTabId]\n ])}\n key={tabId}\n onClick={() => handleTabClick(tabId)}\n >\n {tabLabel}\n </button>\n ))}\n </div>\n }\n {\n activeTabContent &&\n <div className={classes(['quote-management-tabbed-content__active-tab-content'])}>\n <VComponent\n node={activeTabContent as VNode}\n />\n </div>\n }\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/QuoteCommentsList/QuoteCommentsList.css';\n\nexport interface QuoteCommentsListProps\n extends HTMLAttributes<HTMLUListElement> {\n comments: Array<{\n uid: string;\n createdAt: VNode;\n author: VNode;\n text: VNode;\n attachments?: Array<{\n name: string;\n url: string;\n }>;\n }>;\n}\n\nexport const QuoteCommentsList: FunctionComponent<QuoteCommentsListProps> = ({\n className,\n comments,\n ...props\n}) => {\n const dictionary = useText({\n emptyState: 'NegotiableQuote.Manage.quoteComments.emptyState',\n by: 'NegotiableQuote.Manage.quoteComments.by',\n attachments: 'NegotiableQuote.Manage.quoteComments.attachments',\n });\n\n if (!comments || comments.length === 0) {\n return (\n <ul\n {...props}\n className={classes([\n 'quote-management-quote-comments-list',\n 'quote-management-quote-comments-list--empty',\n className,\n ])}\n data-testid=\"quote-comments-list\"\n >\n <li\n className=\"quote-management-quote-comments-list__empty-state\"\n data-testid=\"quote-comments-empty-state\"\n >\n {dictionary.emptyState}\n </li>\n </ul>\n );\n }\n\n return (\n <ul\n {...props}\n className={classes(['quote-management-quote-comments-list', className])}\n data-testid=\"quote-comments-list\"\n >\n {comments.map((comment) => (\n <li\n key={comment.uid}\n className=\"quote-management-quote-comments-list__item\"\n data-testid={`quote-comment-${comment.uid}`}\n >\n <div className=\"quote-management-quote-comments-list__header\">\n <VComponent\n className=\"quote-management-quote-comments-list__date\"\n node={comment.createdAt}\n data-testid={`quote-comment-date-${comment.uid}`}\n />\n <span className=\"quote-management-quote-comments-list__by\">\n {dictionary.by}\n </span>\n <VComponent\n className=\"quote-management-quote-comments-list__author\"\n node={comment.author}\n data-testid={`quote-comment-author-${comment.uid}`}\n />\n </div>\n <VComponent\n className=\"quote-management-quote-comments-list__text\"\n node={comment.text}\n data-testid={`quote-comment-text-${comment.uid}`}\n />\n {comment.attachments && comment.attachments.length > 0 && (\n <div\n className=\"quote-management-quote-comments-list__attachments\"\n data-testid={`quote-comment-attachments-${comment.uid}`}\n >\n <span className=\"quote-management-quote-comments-list__attachments-label\">\n {dictionary.attachments}\n </span>\n {comment.attachments.map((attachment, index) => (\n <a\n key={`${comment.uid}-attachment-${index}`}\n href={attachment.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"quote-management-quote-comments-list__attachment-link\"\n data-testid={`quote-comment-attachment-${comment.uid}-${index}`}\n >\n {attachment.name}\n </a>\n ))}\n </div>\n )}\n </li>\n ))}\n </ul>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Button, Input, TextArea, Modal } from '@adobe-commerce/elsie/components';\nimport '@/quote-management/components/RenameQuoteModal/RenameQuoteModal.css';\n\nexport interface RenameQuoteModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n quoteName: string;\n renameReason: string;\n quoteNameError?: string;\n errorBanner?: VNode;\n successBanner?: VNode;\n showCloseButton?: boolean;\n onQuoteNameChange: (value: string) => void;\n onRenameReasonChange: (value: string) => void;\n onSave: () => void;\n onClose?: () => void;\n}\n\nexport const RenameQuoteModal: FunctionComponent<RenameQuoteModalProps> = ({\n className,\n open,\n quoteName,\n renameReason,\n quoteNameError,\n errorBanner,\n successBanner,\n showCloseButton = true,\n onQuoteNameChange,\n onRenameReasonChange,\n onSave,\n onClose,\n}) => {\n const dictionary = useText({\n title: 'NegotiableQuote.Manage.rename.title',\n quoteNameLabel: 'NegotiableQuote.Manage.rename.quoteNameLabel',\n reasonLabel: 'NegotiableQuote.Manage.rename.reasonLabel',\n renameButton: 'NegotiableQuote.Manage.rename.renameButton',\n cancelButton: 'NegotiableQuote.Manage.rename.cancelButton',\n });\n\n if (!open) {\n return null;\n }\n\n return (\n <Modal\n open={open}\n size=\"medium\"\n title={<>{dictionary.title}</>}\n onClose={onClose}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n className={classes(['quote-management-rename-quote-modal', className])}\n data-testid=\"rename-quote-modal\"\n >\n {errorBanner && (\n <div className={classes(['quote-management-rename-quote-modal__error-banner'])} data-testid=\"rename-quote-modal-error-banner\">\n {errorBanner}\n </div>\n )}\n\n {successBanner && (\n <div className={classes(['quote-management-rename-quote-modal__success-banner'])} data-testid=\"rename-quote-modal-success-banner\">\n {successBanner}\n </div>\n )}\n\n <div className={classes(['quote-management-rename-quote-modal__content'])}>\n <div>\n <Input\n name=\"quoteName\"\n type=\"text\"\n value={quoteName}\n onInput={(e: any) => onQuoteNameChange(e.target.value)}\n floatingLabel={dictionary.quoteNameLabel}\n required\n error={!!quoteNameError}\n />\n {quoteNameError && (\n <span className={classes(['quote-management-rename-quote-modal__error-text'])}>\n {quoteNameError}\n </span>\n )}\n </div>\n\n <TextArea\n name=\"quoteComment\"\n value={renameReason}\n onInput={(e: any) => onRenameReasonChange(e.target.value)}\n label={dictionary.reasonLabel}\n rows={3}\n />\n </div>\n\n <div className={classes(['quote-management-rename-quote-modal__actions'])}>\n <Button \n variant=\"secondary\"\n size=\"medium\"\n onClick={onClose}\n className={classes(['quote-management-rename-quote-modal__cancel-button'])}\n >\n {dictionary.cancelButton}\n </Button>\n <Button \n variant=\"primary\"\n size=\"medium\"\n onClick={onSave}\n className={classes(['quote-management-rename-quote-modal__save-button'])}\n >\n {dictionary.renameButton}\n </Button>\n </div>\n </Modal>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Button, InputDate, Modal } from '@adobe-commerce/elsie/components';\nimport '@/quote-management/components/ExpirationDateModal/ExpirationDateModal.css';\n\nexport interface ExpirationDateModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n expirationDate: string;\n expirationDateError?: string;\n errorBanner?: VNode;\n successBanner?: VNode;\n showCloseButton?: boolean;\n onExpirationDateChange: (value: string) => void;\n onSave: () => void | Promise<void> | Promise<boolean>;\n onClose?: () => void;\n}\n\nexport const ExpirationDateModal: FunctionComponent<ExpirationDateModalProps> = ({\n className,\n open,\n expirationDate,\n expirationDateError,\n errorBanner,\n successBanner,\n showCloseButton = true,\n onExpirationDateChange,\n onSave,\n onClose,\n}) => {\n const dictionary = useText({\n title: 'NegotiableQuoteTemplate.Manage.expirationDate.title',\n expirationDateLabel: 'NegotiableQuoteTemplate.Manage.expirationDate.expirationDateLabel',\n saveButton: 'NegotiableQuoteTemplate.Manage.expirationDate.saveButton',\n cancelButton: 'NegotiableQuoteTemplate.Manage.expirationDate.cancelButton',\n });\n\n if (!open) {\n return null;\n }\n\n return (\n <Modal\n open={open}\n size=\"medium\"\n title={<>{dictionary.title}</>}\n onClose={onClose}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n className={classes(['quote-management-expiration-date-modal', className])}\n data-testid=\"expiration-date-modal\"\n >\n {errorBanner && (\n <div className={classes(['quote-management-expiration-date-modal__error-banner'])} data-testid=\"expiration-date-modal-error-banner\">\n {errorBanner}\n </div>\n )}\n\n {successBanner && (\n <div className={classes(['quote-management-expiration-date-modal__success-banner'])} data-testid=\"expiration-date-modal-success-banner\">\n {successBanner}\n </div>\n )}\n\n <div className={classes(['quote-management-expiration-date-modal__content'])}>\n <div>\n <InputDate\n name=\"expirationDate\"\n value={expirationDate}\n onChange={(e: any) => onExpirationDateChange(e.target.value)}\n floatingLabel={dictionary.expirationDateLabel}\n required\n error={expirationDateError}\n data-testid=\"expiration-date-input\"\n />\n </div>\n </div>\n\n <div className={classes(['quote-management-expiration-date-modal__actions'])}>\n <Button \n variant=\"secondary\"\n size=\"medium\"\n onClick={onClose}\n className={classes(['quote-management-expiration-date-modal__cancel-button'])}\n >\n {dictionary.cancelButton}\n </Button>\n <Button \n variant=\"primary\"\n size=\"medium\"\n onClick={onSave}\n className={classes(['quote-management-expiration-date-modal__save-button'])}\n >\n {dictionary.saveButton}\n </Button>\n </div>\n </Modal>\n );\n};\n\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nimport '@/quote-management/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.css';\n\nexport interface ManageNegotiableQuoteTemplateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n loading?: boolean;\n templateName: VNode;\n templateStatus: VNode;\n banner?: VNode;\n details?: VNode;\n actionBar?: VNode;\n referenceDocuments?: VNode;\n itemsTable: VNode;\n shippingInformationTitle?: VNode;\n shippingInformation?: VNode;\n commentsTitle: VNode;\n comments: VNode;\n attachFilesField?: VNode;\n attachedFilesList?: VNode;\n footer?: VNode;\n}\n\nexport const ManageNegotiableQuoteTemplate: FunctionComponent<ManageNegotiableQuoteTemplateProps> = ({\n className,\n loading,\n templateName,\n templateStatus,\n banner,\n details,\n actionBar,\n referenceDocuments,\n itemsTable,\n shippingInformationTitle,\n shippingInformation,\n commentsTitle,\n comments,\n attachFilesField,\n attachedFilesList,\n footer,\n ...props\n}) => {\n if (loading) {\n return <ManageNegotiableQuoteTemplateSkeleton />;\n }\n\n return (\n <div {...props} className={classes(['quote-management-manage-negotiable-quote-template', className])}>\n <div className={classes(['quote-management-manage-negotiable-quote-template__header'])}>\n {templateName &&\n <VComponent\n node={templateName}\n className={classes(['quote-management-manage-negotiable-quote-template__template-name'])}\n />\n }\n {templateStatus &&\n <VComponent\n node={templateStatus}\n className={classes(['quote-management-manage-negotiable-quote-template__template-status'])}\n />\n }\n </div>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['quote-management-manage-negotiable-quote-template__banner'])}\n />\n }\n {details &&\n <VComponent\n node={details}\n className={classes(['quote-management-manage-negotiable-quote-template__details'])}\n />\n }\n {actionBar &&\n <VComponent\n node={actionBar}\n className={classes(['quote-management-manage-negotiable-quote-template__action-bar'])}\n />\n }\n {referenceDocuments &&\n <div data-testid=\"reference-documents-container\" className={classes(['quote-management-manage-negotiable-quote-template__reference-documents-container'])}>\n <VComponent\n node={referenceDocuments}\n className={classes(['quote-management-manage-negotiable-quote-template__reference-documents'])}\n />\n </div>\n }\n {itemsTable &&\n <VComponent\n node={itemsTable}\n className={classes(['quote-management-manage-negotiable-quote-template__items-table'])}\n />\n }\n <div data-testid=\"template-shipping-information-container\" className={classes(['quote-management-manage-negotiable-quote-template__shipping-information-container'])}>\n {shippingInformationTitle &&\n <VComponent\n node={shippingInformationTitle}\n className={classes(['quote-management-manage-negotiable-quote-template__shipping-information-title'])}\n />\n }\n {shippingInformation &&\n <VComponent\n node={shippingInformation}\n className={classes(['quote-management-manage-negotiable-quote-template__shipping-information'])}\n />\n }\n </div>\n <div data-testid=\"comments-container\" className={classes(['quote-management-manage-negotiable-quote-template__comments-container'])}>\n {commentsTitle &&\n <VComponent\n node={commentsTitle}\n className={classes(['quote-management-manage-negotiable-quote-template__comments-title'])}\n />\n }\n {comments &&\n <VComponent\n node={comments}\n className={classes(['quote-management-manage-negotiable-quote-template__comments'])}\n />\n }\n {attachFilesField &&\n <VComponent\n node={attachFilesField}\n className={classes(['quote-management-manage-negotiable-quote-template__attach-files-field'])}\n />\n }\n {attachedFilesList &&\n <VComponent\n node={attachedFilesList}\n className={classes(['quote-management-manage-negotiable-quote-template__attached-files-list'])}\n />\n }\n </div>\n {footer &&\n <VComponent\n node={footer}\n className={classes(['quote-management-manage-negotiable-quote-template__footer'])}\n />\n }\n </div>\n );\n};\n\nexport const ManageNegotiableQuoteTemplateSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"manage-negotiable-quote-template-skeleton\">\n <SkeletonRow variant=\"heading\" fullWidth={true} size=\"large\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} size=\"xlarge\" lines={2} />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useState,\n} from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n Button,\n TextArea,\n Input,\n Modal,\n Price,\n Table,\n} from '@adobe-commerce/elsie/components';\nimport { CartItemModel } from '@/quote-management/data/models/negotiable-quote-model';\nimport '@/quote-management/components/LineItemNoteModal/LineItemNoteModal.css';\n\nexport interface LineItemNoteModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n item: CartItemModel;\n onClose?: () => void;\n onConfirm: (note: string, quantity: number) => void;\n isSubmitting?: boolean;\n errorBanner?: VNode;\n successBanner?: VNode;\n showCloseButton?: boolean;\n readOnlyQuantity?: boolean;\n}\n\nexport const LineItemNoteModal: FunctionComponent<LineItemNoteModalProps> = ({\n className,\n open,\n item,\n onClose,\n onConfirm,\n isSubmitting = false,\n errorBanner,\n successBanner,\n showCloseButton = true,\n readOnlyQuantity = false,\n}) => {\n const [note, setNote] = useState('');\n const [quantity, setQuantity] = useState(item.quantity);\n const [errors, setErrors] = useState<{ note?: string; quantity?: string }>(\n {}\n );\n\n const dictionary = useText({\n title: 'NegotiableQuote.Manage.lineItemNote.title',\n productLabel: 'NegotiableQuote.Manage.lineItemNote.productLabel',\n skuLabel: 'NegotiableQuote.Manage.lineItemNote.skuLabel',\n priceLabel: 'NegotiableQuote.Manage.lineItemNote.priceLabel',\n stockLabel: 'NegotiableQuote.Manage.lineItemNote.stockLabel',\n quantityLabel: 'NegotiableQuote.Manage.lineItemNote.quantityLabel',\n discountLabel: 'NegotiableQuote.Manage.lineItemNote.discountLabel',\n subtotalLabel: 'NegotiableQuote.Manage.lineItemNote.subtotalLabel',\n noteLabel: 'NegotiableQuote.Manage.lineItemNote.noteLabel',\n notePlaceholder: 'NegotiableQuote.Manage.lineItemNote.notePlaceholder',\n noteHelper: 'NegotiableQuote.Manage.lineItemNote.noteHelper',\n confirmButton: 'NegotiableQuote.Manage.lineItemNote.confirmButton',\n cancelButton: 'NegotiableQuote.Manage.lineItemNote.cancelButton',\n noteError: 'NegotiableQuote.Manage.lineItemNote.noteError',\n quantityError: 'NegotiableQuote.Manage.lineItemNote.quantityError',\n });\n\n // Reset form when modal opens with new item\n useEffect(() => {\n if (open) {\n // Get the most recent valid note from buyer (if exists)\n const validNotes =\n item.noteFromBuyer?.filter((note) => note && note.note) || [];\n const existingNote = validNotes.length > 0 ? validNotes[0].note : '';\n setNote(existingNote || '');\n setQuantity(item.quantity);\n setErrors({});\n }\n }, [open, item.quantity, item.noteFromBuyer]);\n\n const handleConfirm = useCallback(() => {\n const newErrors: { note?: string; quantity?: string } = {};\n\n // Check if the note field is empty\n if (!note.trim()) {\n newErrors.note = dictionary.noteError;\n }\n\n // Only validate quantity if it's editable\n if (!readOnlyQuantity && quantity <= 0) {\n newErrors.quantity = dictionary.quantityError;\n }\n\n if (Object.keys(newErrors).length > 0) {\n setErrors(newErrors);\n return;\n }\n\n onConfirm(note.trim(), quantity);\n }, [note, quantity, onConfirm, dictionary, readOnlyQuantity]);\n\n const handleCancel = useCallback(() => {\n setNote('');\n setQuantity(item.quantity);\n setErrors({});\n onClose?.();\n }, [onClose, item.quantity]);\n\n if (!open) {\n return null;\n }\n\n // Calculate discount display\n const hasDiscount = item.discounts && item.discounts.length > 0;\n const discountDisplay = hasDiscount\n ? item.discounts.map((d) => d.label).join(', ')\n : '-';\n\n // Define table columns\n const columns = [\n {\n label: dictionary.productLabel,\n key: 'productName',\n },\n {\n label: dictionary.priceLabel,\n key: 'price',\n },\n {\n label: dictionary.stockLabel,\n key: 'stock',\n },\n {\n label: dictionary.quantityLabel,\n key: 'quantity',\n },\n {\n label: dictionary.discountLabel,\n key: 'discount',\n },\n {\n label: dictionary.subtotalLabel,\n key: 'subtotal',\n },\n ];\n\n // Define table row data\n const rowData = [\n {\n productName: (\n <div className=\"quote-management-line-item-note-modal__product-info\">\n <div className=\"quote-management-line-item-note-modal__product-name\">\n {item.product.name}\n </div>\n <div className=\"quote-management-line-item-note-modal__product-sku\">\n {dictionary.skuLabel}: {item.product.sku}\n </div>\n </div>\n ),\n price: (\n <Price\n amount={item.prices.originalItemPrice.value}\n currency={item.prices.originalItemPrice.currency}\n />\n ),\n stock: (\n <span className=\"quote-management-line-item-note-modal__stock\">\n {item.stockStatus}\n </span>\n ),\n quantity: readOnlyQuantity ? (\n <span className=\"quote-management-line-item-note-modal__quantity-readonly\">\n {item.quantity}\n </span>\n ) : (\n <Input\n name=\"quantity\"\n type=\"number\"\n min=\"1\"\n value={quantity.toString()}\n onInput={(e: any) => {\n const newQuantity = parseInt(e.target.value, 10) || 0;\n setQuantity(newQuantity);\n setErrors({ ...errors, quantity: undefined });\n }}\n disabled={isSubmitting}\n error={!!errors.quantity}\n required\n data-testid=\"line-item-note-quantity-input\"\n className=\"quote-management-line-item-note-modal__quantity-input\"\n />\n ),\n discount: (\n <span className=\"quote-management-line-item-note-modal__discount\">\n {discountDisplay}\n </span>\n ),\n subtotal: (\n <Price\n amount={item.prices.rowTotal.value}\n currency={item.prices.rowTotal.currency}\n />\n ),\n },\n ];\n\n return (\n <Modal\n open={open}\n size=\"medium\"\n title={<>{dictionary.title}</>}\n onClose={handleCancel}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n className={classes(['quote-management-line-item-note-modal', className])}\n data-testid=\"line-item-note-modal\"\n >\n {errorBanner && (\n <div\n className=\"quote-management-line-item-note-modal__error-banner\"\n data-testid=\"line-item-note-modal-error-banner\"\n >\n {errorBanner}\n </div>\n )}\n\n {successBanner && (\n <div\n className=\"quote-management-line-item-note-modal__success-banner\"\n data-testid=\"line-item-note-modal-success-banner\"\n >\n {successBanner}\n </div>\n )}\n\n <div className=\"quote-management-line-item-note-modal__content\">\n {/* Product Details Table */}\n <div className=\"quote-management-line-item-note-modal__details\">\n <Table\n columns={columns}\n rowData={rowData}\n data-testid=\"line-item-note-table\"\n mobileLayout=\"stacked\"\n className=\"quote-management-line-item-note-modal__details-table\"\n />\n {errors.quantity && (\n <div className=\"quote-management-line-item-note-modal__table-error\">\n {errors.quantity}\n </div>\n )}\n </div>\n\n {/* Note TextArea */}\n <div className=\"quote-management-line-item-note-modal__form-field\">\n <TextArea\n name=\"note\"\n placeholder={dictionary.notePlaceholder}\n rows={4}\n value={note}\n onInput={(e: any) => {\n setNote(e.target.value);\n setErrors({ ...errors, note: undefined });\n }}\n label={dictionary.noteLabel}\n disabled={isSubmitting}\n data-testid=\"line-item-note-textarea\"\n />\n {!errors.note && (\n <span className=\"quote-management-line-item-note-modal__helper-text\">\n {dictionary.noteHelper}\n </span>\n )}\n {errors.note && (\n <span className=\"quote-management-line-item-note-modal__error-text\">\n {errors.note}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"quote-management-line-item-note-modal__actions\">\n <Button\n variant=\"secondary\"\n size=\"medium\"\n onClick={handleCancel}\n disabled={isSubmitting}\n className=\"quote-management-line-item-note-modal__cancel-button\"\n data-testid=\"line-item-note-cancel-button\"\n >\n {dictionary.cancelButton}\n </Button>\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={handleConfirm}\n disabled={isSubmitting}\n className=\"quote-management-line-item-note-modal__confirm-button\"\n data-testid=\"line-item-note-confirm-button\"\n >\n {dictionary.confirmButton}\n </Button>\n </div>\n </Modal>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, useCallback, useEffect, useState, HTMLAttributes } from 'preact/compat';\nimport { VNode } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Button, Input, Modal, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { WarningFilled } from '@adobe-commerce/elsie/icons';\nimport '@/quote-management/components/ReferenceDocumentFormModal/ReferenceDocumentFormModal.css';\n\nexport interface ReferenceDocument {\n uid?: string;\n name: string;\n identifier?: string;\n url: string;\n}\n\nexport interface ReferenceDocumentFormModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n document?: ReferenceDocument;\n /**\n * Optional error message string. If provided, automatically creates an InLineAlert error banner.\n * If both errorMessage and errorBanner are provided, errorBanner takes precedence.\n */\n errorMessage?: string;\n /**\n * Optional custom error banner VNode. Provides full control over error banner rendering.\n * If both errorMessage and errorBanner are provided, errorBanner takes precedence.\n */\n errorBanner?: VNode;\n successBanner?: VNode;\n showCloseButton?: boolean;\n isSubmitting?: boolean;\n onSave: (document: ReferenceDocument) => void;\n onClose?: () => void;\n}\n\nexport const ReferenceDocumentFormModal: FunctionComponent<ReferenceDocumentFormModalProps> = ({\n className,\n open,\n document,\n errorMessage,\n errorBanner,\n successBanner,\n showCloseButton = true,\n isSubmitting = false,\n onSave,\n onClose,\n}) => {\n const [documentName, setDocumentName] = useState('');\n const [documentIdentifier, setDocumentIdentifier] = useState('');\n const [referenceUrl, setReferenceUrl] = useState('');\n const [errors, setErrors] = useState<{\n documentName?: string;\n documentIdentifier?: string;\n referenceUrl?: string;\n }>({});\n\n const dictionary = useText({\n title: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.title',\n documentNameLabel: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.documentNameLabel',\n documentIdentifierLabel: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.documentIdentifierLabel',\n referenceUrlLabel: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.referenceUrlLabel',\n addButton: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.addButton',\n updateButton: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.updateButton',\n cancelButton: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.cancelButton',\n documentNameRequired: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.documentNameRequired',\n documentIdentifierRequired: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.documentIdentifierRequired',\n referenceUrlRequired: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.referenceUrlRequired',\n invalidUrl: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.invalidUrl',\n errorHeading: 'NegotiableQuoteTemplate.Manage.referenceDocuments.form.errorHeading',\n });\n\n // Create error banner from errorMessage if errorBanner is not provided\n const displayErrorBanner = errorBanner || (errorMessage ? (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.errorHeading}\n description={errorMessage}\n data-testid=\"reference-document-form-modal-error-banner-inline\"\n />\n ) : null);\n\n // Determine if we're in edit mode (document prop is provided)\n const isEditMode = !!document;\n\n // Reset form when modal opens or document changes\n useEffect(() => {\n if (open) {\n if (document) {\n setDocumentName(document.name || '');\n setDocumentIdentifier(document.identifier || '');\n setReferenceUrl(document.url || '');\n } else {\n setDocumentName('');\n setDocumentIdentifier('');\n setReferenceUrl('');\n }\n setErrors({});\n }\n }, [open, document]);\n\n const validateUrl = useCallback((url: string): boolean => {\n // istanbul ignore if - whitespace-only URL are caught before this function is called, but leaving this here for defensive programming.\n if (!url.trim()) {\n return false;\n }\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }, []);\n\n const handleSave = useCallback(() => {\n const newErrors: { documentName?: string; documentIdentifier?: string; referenceUrl?: string } = {};\n\n if (!documentName.trim()) {\n newErrors.documentName = dictionary.documentNameRequired;\n }\n\n if (!referenceUrl.trim()) {\n newErrors.referenceUrl = dictionary.referenceUrlRequired;\n } else if (!validateUrl(referenceUrl.trim())) {\n newErrors.referenceUrl = dictionary.invalidUrl;\n }\n\n if (!documentIdentifier.trim()) {\n newErrors.documentIdentifier = dictionary.documentIdentifierRequired;\n }\n\n if (Object.keys(newErrors).length > 0) {\n setErrors(newErrors);\n return;\n }\n\n onSave({\n uid: document?.uid,\n name: documentName.trim(),\n identifier: documentIdentifier.trim(),\n url: referenceUrl.trim(),\n });\n }, [documentName, documentIdentifier, referenceUrl, document, dictionary, validateUrl, onSave]);\n\n const handleClose = useCallback(() => {\n setDocumentName('');\n setDocumentIdentifier('');\n setReferenceUrl('');\n setErrors({});\n onClose?.();\n }, [onClose]);\n\n if (!open) {\n return null;\n }\n\n return (\n <Modal\n open={open}\n size=\"medium\"\n title={<>{dictionary.title}</>}\n onClose={handleClose}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n className={classes(['quote-management-reference-document-form-modal', className])}\n data-testid=\"reference-document-form-modal\"\n >\n {displayErrorBanner && (\n <div\n className={classes(['quote-management-reference-document-form-modal__error-banner'])}\n data-testid=\"reference-document-form-modal-error-banner\"\n >\n {displayErrorBanner}\n </div>\n )}\n\n {successBanner && (\n <div\n className={classes(['quote-management-reference-document-form-modal__success-banner'])}\n data-testid=\"reference-document-form-modal-success-banner\"\n >\n {successBanner}\n </div>\n )}\n\n <div className={classes(['quote-management-reference-document-form-modal__content'])}>\n <div>\n <Input\n name=\"documentName\"\n type=\"text\"\n value={documentName}\n onInput={(e: any) => {\n setDocumentName(e.target.value);\n setErrors({ ...errors, documentName: undefined });\n }}\n floatingLabel={dictionary.documentNameLabel}\n required\n error={!!errors.documentName}\n disabled={isSubmitting}\n data-testid=\"reference-document-name-input\"\n />\n {errors.documentName && (\n <span\n className={classes(['quote-management-reference-document-form-modal__error-text'])}\n data-testid=\"reference-document-name-error\"\n >\n {errors.documentName}\n </span>\n )}\n </div>\n\n <div>\n <Input\n name=\"documentIdentifier\"\n type=\"text\"\n value={documentIdentifier}\n onInput={(e: any) => {\n setDocumentIdentifier(e.target.value);\n setErrors({ ...errors, documentIdentifier: undefined });\n }}\n floatingLabel={dictionary.documentIdentifierLabel}\n error={!!errors.documentIdentifier}\n disabled={isSubmitting}\n data-testid=\"reference-document-identifier-input\"\n />\n {errors.documentIdentifier && (\n <span\n className={classes(['quote-management-reference-document-form-modal__error-text'])}\n data-testid=\"reference-document-identifier-error\"\n >\n {errors.documentIdentifier}\n </span>\n )}\n </div>\n\n <div>\n <Input\n name=\"referenceUrl\"\n type=\"url\"\n value={referenceUrl}\n onInput={(e: any) => {\n setReferenceUrl(e.target.value);\n setErrors({ ...errors, referenceUrl: undefined });\n }}\n floatingLabel={dictionary.referenceUrlLabel}\n required\n error={!!errors.referenceUrl}\n disabled={isSubmitting}\n data-testid=\"reference-document-url-input\"\n />\n {errors.referenceUrl && (\n <span\n className={classes(['quote-management-reference-document-form-modal__error-text'])}\n data-testid=\"reference-document-url-error\"\n >\n {errors.referenceUrl}\n </span>\n )}\n </div>\n </div>\n\n <div className={classes(['quote-management-reference-document-form-modal__actions'])}>\n <Button\n variant=\"secondary\"\n size=\"medium\"\n onClick={handleClose}\n disabled={isSubmitting}\n className={classes(['quote-management-reference-document-form-modal__cancel-button'])}\n data-testid=\"reference-document-form-cancel-button\"\n >\n {dictionary.cancelButton}\n </Button>\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={handleSave}\n disabled={isSubmitting}\n className={classes(['quote-management-reference-document-form-modal__save-button'])}\n data-testid=\"reference-document-form-save-button\"\n >\n {isEditMode ? dictionary.updateButton : dictionary.addButton}\n </Button>\n </div>\n </Modal>\n );\n};\n\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport '@/quote-management/components/ReferenceDocumentsList/ReferenceDocumentsList.css';\n\nexport interface ReferenceDocument {\n uid?: string;\n name: string;\n identifier?: string;\n url: string;\n}\n\nexport interface ReferenceDocumentsListProps extends HTMLAttributes<HTMLDivElement> {\n documents: ReferenceDocument[];\n isEditable?: boolean;\n onAdd?: () => void;\n onEdit?: (document: ReferenceDocument) => void;\n onRemove?: (document: ReferenceDocument) => void;\n}\n\nexport const ReferenceDocumentsList: FunctionComponent<ReferenceDocumentsListProps> = ({\n className,\n documents,\n isEditable = false,\n onAdd,\n onEdit,\n onRemove,\n ...props\n}) => {\n const dictionary = useText({\n add: 'NegotiableQuoteTemplate.Manage.referenceDocuments.add',\n edit: 'NegotiableQuoteTemplate.Manage.referenceDocuments.edit',\n remove: 'NegotiableQuoteTemplate.Manage.referenceDocuments.remove',\n noReferenceDocuments: 'NegotiableQuoteTemplate.Manage.referenceDocuments.noReferenceDocuments',\n });\n\n const formatDocumentDisplay = (doc: ReferenceDocument): string => {\n if (doc.identifier) {\n return `${doc.name}, ${doc.identifier}`;\n }\n return `${doc.name} ${doc.url}`;\n };\n\n const handleDocumentClick = (e: Event, url: string) => {\n e.preventDefault();\n window.open(url, '_blank', 'noopener,noreferrer');\n };\n\n return (\n <div\n className={classes(['quote-management-reference-documents-list', className])}\n data-testid=\"reference-documents-list\"\n {...props}\n >\n <div className=\"quote-management-reference-documents-list__content\">\n {documents.map((doc) => (\n <div\n key={doc.uid || doc.url}\n className=\"quote-management-reference-documents-list__document\"\n data-testid={`reference-document-${doc.uid || doc.url}`}\n >\n <a\n href={doc.url}\n onClick={(e) => handleDocumentClick(e, doc.url)}\n className=\"quote-management-reference-documents-list__document-link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid={`reference-document-link-${doc.uid || doc.url}`}\n >\n {formatDocumentDisplay(doc)}\n </a>\n {isEditable && (\n <div className=\"quote-management-reference-documents-list__document-actions\">\n <Button\n variant=\"tertiary\"\n onClick={() => onEdit?.(doc)}\n className=\"quote-management-reference-documents-list__edit-button\"\n data-testid={`reference-document-edit-${doc.uid || doc.url}`}\n >\n {dictionary.edit}\n </Button>\n <span className=\"quote-management-reference-documents-list__separator\">|</span>\n <Button\n variant=\"tertiary\"\n onClick={() => onRemove?.(doc)}\n className=\"quote-management-reference-documents-list__remove-button\"\n data-testid={`reference-document-remove-${doc.uid || doc.url}`}\n >\n {dictionary.remove}\n </Button>\n </div>\n )}\n </div>\n ))}\n {isEditable && (\n <Button\n variant=\"tertiary\"\n onClick={onAdd}\n className=\"quote-management-reference-documents-list__add-button\"\n data-testid=\"reference-documents-add-button\"\n >\n + {dictionary.add}\n </Button>\n )}\n {documents.length === 0 && !isEditable && (\n <div className=\"quote-management-reference-documents-list__empty\">\n {dictionary.noReferenceDocuments}\n </div>\n )}\n </div>\n </div>\n );\n};\n\n"],"names":["SvgAdd","props","React","SvgCheckWithCircle","SvgChevronDown","SvgChevronRight","SvgChevronUp","SvgClose","SvgCoupon","SvgEdit","SvgWarningFilled","ShippingAddressDisplay","className","shippingAddress","loading","noAddressMessage","dictionary","useText","ShippingAddressDisplaySkeleton","jsxs","classes","jsx","line","index","InLineAlert","WarningFilled","Skeleton","SkeletonRow","RequestNegotiableQuoteForm","title","banner","commentField","quoteNameField","attachFile","attachedFilesList","requestButton","saveButton","onSubmit","VComponent","ActionsBar","dropdownPlaceholder","dropdownOptions","dropdownValue","handleDropdownChange","buttons","hasDropdown","hasButtons","pickerOptions","option","Picker","button","formatFileSize","bytes","k","sizes","i","sizeIndex","size","validateFileType","fileType","acceptedTypes","validateFileSize","fileSize","maxSize","AttachedFilesList","files","onRemove","disabled","file","isUploading","isError","isSuccess","canRemove","CheckWithCircle","Button","Close","ItemsQuoted","table","pricesSummary","ItemsQuotedSkeleton","ManageNegotiableQuote","quoteName","quoteStatus","details","actionBar","quoteContent","shippingInformationTitle","shippingInformation","quoteCommentsTitle","quoteComments","attachFilesField","footer","ManageNegotiableQuoteSkeleton","OrderSummaryLine","label","price","classSuffixes","labelClassSuffix","testId","children","OrderSummaryLineComponent","OrderSummary","variant","heading","subTotal","shipping","discounts","taxTotal","taxesApplied","total","totalSaved","updateLineItems","lineItems","showTaxBreakdown","setShowTaxBreakdown","useState","translations","subTotalContent","shippingContent","discountsContent","Fragment","discount","taxContent","Accordion","ChevronDown","ChevronUp","AccordionSection","tax","updatedLineItems","currentLine","nextLine","Divider","innerLine","labelClass","priceClass","classSuffix","getUserTimezone","error","isValidDate","dateString","date","formattedDate","type","locale","getGlobalLocale","year","month","day","ProductListTable","items","canEdit","readOnly","showActions","onItemCheckboxChange","onItemDropdownChange","onQuantityChange","onUpdate","dropdownSelections","originalQuantities","setOriginalQuantities","currentQuantities","setCurrentQuantities","useEffect","quantities","item","hasQuantityChanges","uid","columns","handleItemCheckboxChange","event","isSelected","handleItemDropdownChange","action","handleQuantityChange","newQuantity","prev","handleUpdate","discountElement","amountOff","percentOff","Price","getProductNameContent","configurableOptions","_a","bundleOptions","_b","value","formatNoteTimestamp","timestamp","getNotesContent","validNotesFromBuyer","note","validNotesFromSeller","validNotes","expandedRows","rowData","notes","quantityElement","Input","e","Checkbox","Table","wrapperNode","h","wrapperProps","submitButton","QuotePricesSummary","entries","createEntry","entry","QuoteSummaryList","products","outOfStockMessage","QuoteSummaryListSkeleton","QuotesListTable","emptyStateMessage","showItemRange","itemRangeMessage","showPageSizePicker","pageSizePickerMessage","showPagination","paginationMessage","shouldShowTable","shouldShowEmptyState","shouldShowItemRange","shouldShowPageSizePicker","shouldShowPagination","shouldShowFooter","QuoteTemplatesListTable","ConfirmationModal","open","message","cancelLabel","confirmLabel","onCancel","onConfirm","onClose","showCloseButton","confirmationBanner","restProps","Modal","QuoteHistoryLog","history","buyer","salesRepName","formatChangeType","changeType","l","formatChanges","changes","changeDetails","statusChange","_c","_d","newDateFormatted","oldDateFormatted","_e","_f","_g","newTotal","oldTotal","_h","_i","_j","_k","_l","productNames","product","itemNotes","processNotes","noteArray","authorName","historyEntries","noteEntries","allEntries","change","changeIndex","TabbedContent","tabs","tabsContent","defaultActiveTab","activeTabId","setActiveTabId","handleTabClick","tabId","activeTabContent","useMemo","tabLabel","QuoteCommentsList","comments","comment","attachment","RenameQuoteModal","renameReason","quoteNameError","errorBanner","successBanner","onQuoteNameChange","onRenameReasonChange","onSave","TextArea","ExpirationDateModal","expirationDate","expirationDateError","onExpirationDateChange","InputDate","ManageNegotiableQuoteTemplate","templateName","templateStatus","referenceDocuments","itemsTable","commentsTitle","ManageNegotiableQuoteTemplateSkeleton","LineItemNoteModal","isSubmitting","readOnlyQuantity","setNote","quantity","setQuantity","errors","setErrors","existingNote","handleConfirm","useCallback","newErrors","handleCancel","discountDisplay","d","ReferenceDocumentFormModal","document","errorMessage","documentName","setDocumentName","documentIdentifier","setDocumentIdentifier","referenceUrl","setReferenceUrl","displayErrorBanner","isEditMode","validateUrl","url","handleSave","handleClose","ReferenceDocumentsList","documents","isEditable","onAdd","onEdit","formatDocumentDisplay","doc","handleDocumentClick"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2026 Adobe
2
2
  All Rights Reserved. */
3
- import{I as q,I as v}from"../chunks/ItemsQuoted.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/components.js";/* empty css */import"../chunks/LineItemNoteModal.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import"../chunks/dateUtils.js";import"../chunks/WarningFilled.js";import"@dropins/tools/i18n.js";import"../chunks/ConfirmationModal.js";/* empty css *//* empty css */import"../chunks/state.js";import"../chunks/setLineItemNote.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/CheckWithCircle.js";export{q as ItemsQuoted,v as default};
3
+ import{I as l,I as x}from"../chunks/ItemsQuoted.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/components.js";import"../chunks/components.js";import"@dropins/tools/i18n.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import"../api.js";import"@dropins/tools/fetch-graphql.js";export{l as ItemsQuoted,x as default};
4
4
  //# sourceMappingURL=ItemsQuoted.js.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2026 Adobe
2
2
  All Rights Reserved. */
3
- import{I as q,I as v}from"../chunks/ItemsQuotedTemplate.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/components.js";/* empty css */import"../chunks/LineItemNoteModal.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import"../chunks/dateUtils.js";import"../chunks/WarningFilled.js";import"@dropins/tools/i18n.js";import"../chunks/ConfirmationModal.js";/* empty css *//* empty css */import"../chunks/state.js";import"../chunks/addQuoteTemplateLineItemNote.js";import"../chunks/transform-quote-template.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteTemplateFragment.js";import"../chunks/CheckWithCircle.js";export{q as ItemsQuotedTemplate,v as default};
3
+ import{I as u,I as x}from"../chunks/ItemsQuotedTemplate.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/components.js";import"../chunks/components.js";import"@dropins/tools/i18n.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import"../api.js";import"@dropins/tools/fetch-graphql.js";export{u as ItemsQuotedTemplate,x as default};
4
4
  //# sourceMappingURL=ItemsQuotedTemplate.js.map