@dropins/storefront-quote-management 0.0.1-alpha14 → 0.0.1-alpha15

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 (62) hide show
  1. package/api/graphql/NegotiableQuoteFragment.d.ts +1 -1
  2. package/api/index.d.ts +1 -0
  3. package/api/requestNegotiableQuote/requestNegotiableQuote.d.ts +3 -0
  4. package/api/uploadFile/graphql/FinishUploadMutation.d.ts +10 -0
  5. package/api/uploadFile/graphql/InitiateUploadMutation.d.ts +10 -0
  6. package/api/uploadFile/index.d.ts +10 -0
  7. package/api/uploadFile/uploadFile.d.ts +12 -0
  8. package/api.js +8 -8
  9. package/api.js.map +1 -1
  10. package/chunks/ItemsQuoted.js +4 -0
  11. package/chunks/ItemsQuoted.js.map +1 -0
  12. package/chunks/NegotiableQuoteFragment.js +67 -21
  13. package/chunks/NegotiableQuoteFragment.js.map +1 -1
  14. package/chunks/QuoteCommentsList.js +4 -0
  15. package/chunks/QuoteCommentsList.js.map +1 -0
  16. package/chunks/QuoteHistoryLog.js +4 -0
  17. package/chunks/QuoteHistoryLog.js.map +1 -0
  18. package/chunks/ShippingAddressDisplay.js +4 -0
  19. package/chunks/ShippingAddressDisplay.js.map +1 -0
  20. package/chunks/transform-quote.js +1 -1
  21. package/chunks/transform-quote.js.map +1 -1
  22. package/chunks/uploadFile.js +41 -0
  23. package/chunks/uploadFile.js.map +1 -0
  24. package/components/QuoteCommentsList/QuoteCommentsList.d.ts +13 -0
  25. package/components/QuoteCommentsList/index.d.ts +11 -0
  26. package/components/QuoteHistoryLog/QuoteHistoryLog.d.ts +9 -0
  27. package/components/QuoteHistoryLog/index.d.ts +11 -0
  28. package/components/index.d.ts +2 -0
  29. package/containers/ItemsQuoted.js +1 -1
  30. package/containers/ItemsQuoted.js.map +1 -1
  31. package/containers/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +10 -2
  32. package/containers/ManageNegotiableQuote.js +1 -1
  33. package/containers/ManageNegotiableQuote.js.map +1 -1
  34. package/containers/QuoteCommentsList/QuoteCommentsList.d.ts +9 -0
  35. package/containers/QuoteCommentsList/index.d.ts +11 -0
  36. package/containers/QuoteCommentsList.d.ts +3 -0
  37. package/containers/QuoteCommentsList.js +4 -0
  38. package/containers/QuoteCommentsList.js.map +1 -0
  39. package/containers/QuoteHistoryLog/QuoteHistoryLog.d.ts +9 -0
  40. package/containers/QuoteHistoryLog/index.d.ts +11 -0
  41. package/containers/QuoteHistoryLog.d.ts +3 -0
  42. package/containers/QuoteHistoryLog.js +4 -0
  43. package/containers/QuoteHistoryLog.js.map +1 -0
  44. package/containers/QuotesListTable.js +1 -1
  45. package/containers/QuotesListTable.js.map +1 -1
  46. package/containers/RequestNegotiableQuoteForm.js +1 -1
  47. package/containers/RequestNegotiableQuoteForm.js.map +1 -1
  48. package/containers/ShippingAddressDisplay/ShippingAddressDisplay.d.ts +10 -0
  49. package/containers/ShippingAddressDisplay/index.d.ts +11 -0
  50. package/containers/ShippingAddressDisplay.d.ts +1 -0
  51. package/containers/ShippingAddressDisplay.js +4 -0
  52. package/containers/ShippingAddressDisplay.js.map +1 -0
  53. package/containers/index.d.ts +3 -0
  54. package/data/models/negotiable-quote-model.d.ts +64 -0
  55. package/data/transforms/__fixtures__/negotiableQuoteData.d.ts +66 -0
  56. package/i18n/en_US.json.d.ts +41 -1
  57. package/package.json +1 -1
  58. package/render.js +7 -5
  59. package/render.js.map +1 -1
  60. package/utils/dateUtils.d.ts +15 -0
  61. package/chunks/requestNegotiableQuote.js +0 -25
  62. package/chunks/requestNegotiableQuote.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RequestNegotiableQuoteForm.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","/@dropins/storefront-quote-management/src/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx","/@dropins/storefront-quote-management/src/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.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","/********************************************************************\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 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 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 <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 { HTMLAttributes, useCallback, useEffect, useState } from 'preact/compat';\nimport { Container, getFormErrors, getFormValues, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { InLineAlert, Button, InputFile, TextArea, Input, Field, InLineAlertProps } from '@adobe-commerce/elsie/components';\nimport { WarningFilled, CheckWithCircle, Add } from '@adobe-commerce/elsie/icons';\nimport RequestNegotiableQuoteFormComponent from '@/quote-management/components/RequestNegotiableQuoteForm';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { requestNegotiableQuote, RequestNegotiableQuoteInput } from '@/quote-management/api';\nimport { state } from '@/quote-management/lib/state';\n\nexport type RequestNegotiableQuoteHandlers = {\n onAttachFiles?: (files: File[]) => Promise<void>;\n onRequestNegotiableQuote?: typeof requestNegotiableQuote;\n onSaveNegotiableQuote?: typeof requestNegotiableQuote;\n onSubmitErrors?: (errors: Record<string, string>) => void;\n onError?: (props: {\n error: string,\n isFormDisabled: boolean,\n setIsFormDisabled: (isFormDisabled: boolean) => void,\n }) => void;\n};\n\nexport interface RequestNegotiableQuoteFormProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onError'>,\n RequestNegotiableQuoteHandlers {\n cartId: string;\n slots?: {\n ErrorBanner?: SlotProps<{\n message: string,\n }>;\n SuccessBanner?: SlotProps<{\n message: string,\n }>;\n Title?: SlotProps<{\n text: string,\n }>;\n CommentField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n QuoteNameField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n AttachFileField?: SlotProps<{\n onChange: (files: File[]) => void, formErrors: Record<string, string>,\n isFormDisabled: boolean\n }>;\n RequestButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n SaveDraftButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n };\n}\n\nexport const RequestNegotiableQuoteForm: Container<RequestNegotiableQuoteFormProps> = ({\n cartId,\n slots,\n onRequestNegotiableQuote,\n onSaveNegotiableQuote,\n onAttachFiles,\n onSubmitErrors,\n onError,\n className,\n}) => {\n const [comment, setComment] = useState<string | undefined>(undefined);\n const [quoteName, setQuoteName] = useState<string | undefined>(undefined);\n const [, setAttachments] = useState<File[]>([]);\n const [error, setError] = useState<string | undefined>(undefined);\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [success, setSuccess] = useState<string | undefined>(undefined);\n const [isFormDisabled, setIsFormDisabled] = useState<boolean>(false);\n\n const dictionary = useText({\n title: 'NegotiableQuote.Request.title',\n comment: 'NegotiableQuote.Request.comment',\n commentError: 'NegotiableQuote.Request.commentError',\n quoteName: 'NegotiableQuote.Request.quoteName',\n quoteNameError: 'NegotiableQuote.Request.quoteNameError',\n attachmentsError: 'NegotiableQuote.Request.attachmentsError',\n requestCta: 'NegotiableQuote.Request.requestCta',\n saveDraftCta: 'NegotiableQuote.Request.saveDraftCta',\n errorHeader: 'NegotiableQuote.Request.error.header',\n unauthenticated: 'NegotiableQuote.Request.error.unauthenticated',\n unauthorized: 'NegotiableQuote.Request.error.unauthorized',\n missingCart: 'NegotiableQuote.Request.error.missingCart',\n successHeader: 'NegotiableQuote.Request.success.header',\n submitSuccess: 'NegotiableQuote.Request.success.submitted',\n draftSuccess: 'NegotiableQuote.Request.success.draftSaved',\n });\n\n useEffect(() => {\n const permissionsEvent = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n setError(undefined);\n if (!permissions.requestQuote) {\n setError(dictionary.unauthorized);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => permissionsEvent?.off();\n }, [dictionary.unauthorized]);\n\n useEffect(() => {\n const authenticatedEvent = events.on(\n 'authenticated',\n (authenticated: boolean) => {\n setError(undefined);\n if (!authenticated) {\n setError(dictionary.unauthenticated);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => authenticatedEvent?.off();\n }, [dictionary.unauthenticated]);\n\n useEffect(() => {\n if (!cartId) {\n setError(dictionary.missingCart);\n setIsFormDisabled(true);\n }\n }, [cartId, dictionary.missingCart]);\n\n useEffect(() => {\n if (error) {\n onError?.({ error, isFormDisabled, setIsFormDisabled });\n }\n }, [error, onError, isFormDisabled]);\n\n const handleAttachFiles = useCallback(async (files: File[]) => {\n setFormErrors(prev => ({ ...prev, attachments: '' }));\n setAttachments(files);\n onAttachFiles?.(files)?.catch(() => {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n });\n }, [onAttachFiles, dictionary]);\n\n /*\n * This function is used to get the banner node.\n * It can be used to render a success or error banner depending on the success or error state.\n */\n const getBannerNode = () => {\n let inlineAlertProps: InLineAlertProps | undefined;\n let slotProps: any | undefined;\n\n if (success) {\n slotProps = {\n name: 'SuccessBanner',\n slot: slots?.SuccessBanner,\n context: {\n message: success,\n },\n 'data-testid': 'form-success-banner',\n };\n inlineAlertProps = {\n type: 'success',\n variant: 'primary',\n icon: <CheckWithCircle />,\n heading: dictionary.successHeader,\n description: success,\n className: 'request-negotiable-quote-form__success-banner',\n };\n }\n else if (error) {\n slotProps = {\n name: 'ErrorBanner',\n slot: slots?.ErrorBanner,\n context: {\n message: error,\n },\n 'data-testid': 'form-error-banner',\n };\n inlineAlertProps = {\n type: 'error',\n variant: 'primary',\n icon: <WarningFilled />,\n heading: dictionary.errorHeader,\n description: error,\n className: 'request-negotiable-quote-form__error-banner',\n };\n }\n\n if (slotProps && inlineAlertProps) {\n return <Slot {...slotProps}>\n <InLineAlert {...inlineAlertProps} />\n </Slot>;\n }\n\n return undefined;\n }\n\n /*\n * This function is used to validate the parent form of the button that was clicked.\n */\n const validateParentForm = (e: Event) => {\n setFormErrors({});\n const closestForm = (e.target as HTMLElement).closest('form') as HTMLFormElement;\n const formErrors = getFormErrors(closestForm);\n if (Object.keys(formErrors).length > 0) {\n setFormErrors(formErrors);\n onSubmitErrors?.(formErrors);\n }\n };\n\n const formSubmitHandler = (e: Event) => {\n e.preventDefault();\n setIsFormDisabled(true);\n\n const form = (e.target as HTMLFormElement);\n\n const currentFormErrors = getFormErrors(form);\n\n const mergedFormErrors = { ...currentFormErrors, ...formErrors };\n\n if (Object.keys(mergedFormErrors).length > 0) {\n onSubmitErrors?.(mergedFormErrors)\n return;\n }\n\n // Since we have multiple submit buttons, we need to determine which one was clicked.\n const buttonTarget = (e as SubmitEvent).submitter as HTMLButtonElement;\n\n const formValues = getFormValues(form);\n\n setComment(formValues.comment);\n setQuoteName(formValues.quoteName);\n\n const isDraft = buttonTarget?.dataset?.draft === 'true' || false;\n\n const contextData: RequestNegotiableQuoteInput = {\n cartId: cartId!,\n quoteName: formValues.quoteName,\n comment: formValues.comment,\n isDraft,\n }\n\n let submitHandler;\n let successMessage;\n\n if (isDraft) {\n submitHandler = onSaveNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.draftSuccess;\n } else {\n submitHandler = onRequestNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.submitSuccess;\n }\n\n submitHandler(contextData).then(() => {\n setSuccess(successMessage);\n })\n .catch(error => {\n setError(error.message);\n })\n };\n\n const titleNode = (\n <Slot name=\"Title\" slot={slots?.Title} context={{ text: dictionary.title }}>\n <span data-testid=\"form-title\">{dictionary.title}</span>\n </Slot>\n );\n\n const commentFieldNode = (\n <Slot\n name=\"CommentField\"\n slot={slots?.CommentField}\n context={{\n value: comment,\n required: true,\n errorMessage: formErrors.comment,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <TextArea\n name=\"comment\"\n value={comment}\n label={dictionary.comment}\n required\n autoComplete=\"off\"\n data-testid=\"form-comment-field\"\n errorMessage={formErrors.comment}\n disabled={isFormDisabled}\n />\n </Slot>\n );\n\n const quoteNameFieldNode = (\n <Slot\n name=\"QuoteNameField\"\n slot={slots?.QuoteNameField}\n context={{\n value: quoteName,\n required: true,\n errorMessage: formErrors.quoteName,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <Field\n error={formErrors.quoteName}\n disabled={isFormDisabled}\n >\n <Input\n value={quoteName}\n name=\"quoteName\"\n floatingLabel={dictionary.quoteName}\n required\n autoComplete=\"off\"\n data-testid=\"form-quote-name-field\"\n />\n </Field>\n </Slot>\n );\n\n const attachFileNode = (\n <Slot\n name=\"AttachFileField\"\n slot={slots?.AttachFileField}\n context={{ onChange: handleAttachFiles, formErrors, isFormDisabled }}\n >\n <InputFile\n onChange={(e: any) => {\n const files = Array.from(((e.target as HTMLInputElement).files!));\n\n if (files.length > 0) {\n handleAttachFiles(files)\n }\n }}\n icon={<Add />}\n disabled={isFormDisabled}\n data-testid=\"form-attach-file-field\"\n />\n </Slot>\n );\n\n const requestButtonNode = (\n <Slot\n name=\"RequestButton\"\n slot={slots?.RequestButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-testid=\"form-request-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.requestCta}\n </Button>\n </Slot>\n );\n\n const saveButtonNode = (\n <Slot\n name=\"SaveDraftButton\"\n slot={slots?.SaveDraftButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-draft=\"true\"\n variant=\"secondary\"\n data-testid=\"form-save-draft-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.saveDraftCta}\n </Button>\n </Slot>\n );\n\n return (\n <RequestNegotiableQuoteFormComponent\n title={titleNode}\n banner={getBannerNode()}\n commentField={commentFieldNode}\n quoteNameField={quoteNameFieldNode}\n attachFile={attachFileNode}\n requestButton={requestButtonNode}\n saveButton={saveButtonNode}\n onSubmit={formSubmitHandler}\n className={className}\n disabled={isFormDisabled}\n data-testid=\"form-container\"\n />\n );\n};\n"],"names":["SvgAdd","props","React","SvgCheckWithCircle","RequestNegotiableQuoteForm","className","title","banner","commentField","quoteNameField","attachFile","requestButton","saveButton","onSubmit","jsxs","classes","jsx","VComponent","cartId","slots","onRequestNegotiableQuote","onSaveNegotiableQuote","onAttachFiles","onSubmitErrors","onError","comment","setComment","useState","quoteName","setQuoteName","setAttachments","error","setError","formErrors","setFormErrors","success","setSuccess","isFormDisabled","setIsFormDisabled","dictionary","useText","useEffect","permissionsEvent","events","permissions","authenticatedEvent","authenticated","handleAttachFiles","useCallback","files","prev","_a","getBannerNode","inlineAlertProps","slotProps","CheckWithCircle","WarningFilled","Slot","InLineAlert","validateParentForm","e","closestForm","getFormErrors","formSubmitHandler","form","mergedFormErrors","buttonTarget","formValues","getFormValues","isDraft","contextData","submitHandler","successMessage","requestNegotiableQuote","titleNode","commentFieldNode","TextArea","quoteNameFieldNode","Field","Input","attachFileNode","InputFile","Add","requestButtonNode","Button","saveButtonNode","RequestNegotiableQuoteFormComponent"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"RequestNegotiableQuoteForm.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","/@dropins/storefront-quote-management/src/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx","/@dropins/storefront-quote-management/src/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.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","/********************************************************************\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 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 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 <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 { HTMLAttributes, useCallback, useEffect, useState } from 'preact/compat';\nimport { Container, getFormErrors, getFormValues, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { InLineAlert, Button, InputFile, TextArea, Input, Field, InLineAlertProps } from '@adobe-commerce/elsie/components';\nimport { WarningFilled, CheckWithCircle, Add } from '@adobe-commerce/elsie/icons';\nimport RequestNegotiableQuoteFormComponent from '@/quote-management/components/RequestNegotiableQuoteForm';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { requestNegotiableQuote, RequestNegotiableQuoteInput, uploadFile } from '@/quote-management/api';\nimport { state } from '@/quote-management/lib/state';\n\nexport type RequestNegotiableQuoteHandlers = {\n onAttachFiles?: (files: File[]) => Promise<void>;\n onRequestNegotiableQuote?: typeof requestNegotiableQuote;\n onSaveNegotiableQuote?: typeof requestNegotiableQuote;\n onSubmitErrors?: (errors: Record<string, string>) => void;\n onError?: (props: {\n error: string,\n isFormDisabled: boolean,\n setIsFormDisabled: (isFormDisabled: boolean) => void,\n }) => void;\n};\n\nexport interface RequestNegotiableQuoteFormProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onError'>,\n RequestNegotiableQuoteHandlers {\n cartId: string;\n slots?: {\n ErrorBanner?: SlotProps<{\n message: string,\n }>;\n SuccessBanner?: SlotProps<{\n message: string,\n }>;\n Title?: SlotProps<{\n text: string,\n }>;\n CommentField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n QuoteNameField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n AttachFileField?: SlotProps<{\n onChange: (files: File[]) => void, formErrors: Record<string, string>,\n isFormDisabled: boolean\n }>;\n RequestButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n SaveDraftButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n };\n}\n\nexport const RequestNegotiableQuoteForm: Container<RequestNegotiableQuoteFormProps> = ({\n cartId,\n slots,\n onRequestNegotiableQuote,\n onSaveNegotiableQuote,\n onAttachFiles,\n onSubmitErrors,\n onError,\n className,\n}) => {\n const [comment, setComment] = useState<string | undefined>(undefined);\n const [quoteName, setQuoteName] = useState<string | undefined>(undefined);\n const [attachmentKeys, setAttachmentKeys] = useState<{ key: string }[]>([]);\n const [error, setError] = useState<string | undefined>(undefined);\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [success, setSuccess] = useState<string | undefined>(undefined);\n const [isFormDisabled, setIsFormDisabled] = useState<boolean>(false);\n\n const dictionary = useText({\n title: 'NegotiableQuote.Request.title',\n comment: 'NegotiableQuote.Request.comment',\n commentError: 'NegotiableQuote.Request.commentError',\n quoteName: 'NegotiableQuote.Request.quoteName',\n quoteNameError: 'NegotiableQuote.Request.quoteNameError',\n attachmentsError: 'NegotiableQuote.Request.attachmentsError',\n requestCta: 'NegotiableQuote.Request.requestCta',\n saveDraftCta: 'NegotiableQuote.Request.saveDraftCta',\n errorHeader: 'NegotiableQuote.Request.error.header',\n unauthenticated: 'NegotiableQuote.Request.error.unauthenticated',\n unauthorized: 'NegotiableQuote.Request.error.unauthorized',\n missingCart: 'NegotiableQuote.Request.error.missingCart',\n successHeader: 'NegotiableQuote.Request.success.header',\n submitSuccess: 'NegotiableQuote.Request.success.submitted',\n draftSuccess: 'NegotiableQuote.Request.success.draftSaved',\n });\n\n useEffect(() => {\n const permissionsEvent = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n setError(undefined);\n if (!permissions.requestQuote) {\n setError(dictionary.unauthorized);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => permissionsEvent?.off();\n }, [dictionary.unauthorized]);\n\n useEffect(() => {\n const authenticatedEvent = events.on(\n 'authenticated',\n (authenticated: boolean) => {\n setError(undefined);\n if (!authenticated) {\n setError(dictionary.unauthenticated);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => authenticatedEvent?.off();\n }, [dictionary.unauthenticated]);\n\n useEffect(() => {\n if (!cartId) {\n setError(dictionary.missingCart);\n setIsFormDisabled(true);\n }\n }, [cartId, dictionary.missingCart]);\n\n useEffect(() => {\n if (error) {\n onError?.({ error, isFormDisabled, setIsFormDisabled });\n }\n }, [error, onError, isFormDisabled]);\n\n const handleAttachFiles = useCallback(async (files: File[]) => {\n /* istanbul ignore next: defensive guard; */\n if (!files?.length) return;\n\n setFormErrors(prev => ({ ...prev, attachments: '' }));\n\n if (onAttachFiles) {\n try {\n await onAttachFiles(files);\n } catch {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n }\n return;\n }\n\n try {\n const uploaded = await Promise.all(files.map(uploadFile));\n setAttachmentKeys(uploaded.map(({ key }) => ({ key })));\n } catch {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n }\n }, [onAttachFiles, dictionary]);\n\n /*\n * This function is used to get the banner node.\n * It can be used to render a success or error banner depending on the success or error state.\n */\n const getBannerNode = () => {\n let inlineAlertProps: InLineAlertProps | undefined;\n let slotProps: any | undefined;\n\n if (success) {\n slotProps = {\n name: 'SuccessBanner',\n slot: slots?.SuccessBanner,\n context: {\n message: success,\n },\n 'data-testid': 'form-success-banner',\n };\n inlineAlertProps = {\n type: 'success',\n variant: 'primary',\n icon: <CheckWithCircle />,\n heading: dictionary.successHeader,\n description: success,\n className: 'request-negotiable-quote-form__success-banner',\n };\n }\n else if (error) {\n slotProps = {\n name: 'ErrorBanner',\n slot: slots?.ErrorBanner,\n context: {\n message: error,\n },\n 'data-testid': 'form-error-banner',\n };\n inlineAlertProps = {\n type: 'error',\n variant: 'primary',\n icon: <WarningFilled />,\n heading: dictionary.errorHeader,\n description: error,\n className: 'request-negotiable-quote-form__error-banner',\n };\n }\n\n if (slotProps && inlineAlertProps) {\n return <Slot {...slotProps}>\n <InLineAlert {...inlineAlertProps} />\n </Slot>;\n }\n\n return undefined;\n }\n\n /*\n * This function is used to validate the parent form of the button that was clicked.\n */\n const validateParentForm = (e: Event) => {\n setFormErrors({});\n const closestForm = (e.target as HTMLElement).closest('form') as HTMLFormElement;\n const formErrors = getFormErrors(closestForm);\n if (Object.keys(formErrors).length > 0) {\n setFormErrors(formErrors);\n onSubmitErrors?.(formErrors);\n }\n };\n\n const formSubmitHandler = (e: Event) => {\n e.preventDefault();\n setIsFormDisabled(true);\n\n const form = (e.target as HTMLFormElement);\n\n const currentFormErrors = getFormErrors(form);\n\n const mergedFormErrors = { ...currentFormErrors, ...formErrors };\n\n if (Object.keys(mergedFormErrors).length > 0) {\n onSubmitErrors?.(mergedFormErrors)\n return;\n }\n\n // Since we have multiple submit buttons, we need to determine which one was clicked.\n const buttonTarget = (e as SubmitEvent).submitter as HTMLButtonElement;\n\n const formValues = getFormValues(form);\n\n setComment(formValues.comment);\n setQuoteName(formValues.quoteName);\n\n const isDraft = buttonTarget?.dataset?.draft === 'true' || false;\n\n const contextData: RequestNegotiableQuoteInput = {\n cartId: cartId!,\n quoteName: formValues.quoteName,\n comment: formValues.comment,\n attachments: attachmentKeys,\n isDraft,\n }\n\n let submitHandler;\n let successMessage;\n\n if (isDraft) {\n submitHandler = onSaveNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.draftSuccess;\n } else {\n submitHandler = onRequestNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.submitSuccess;\n }\n\n submitHandler(contextData).then(() => {\n setSuccess(successMessage);\n })\n .catch(error => {\n setError(error.message);\n })\n };\n\n const titleNode = (\n <Slot name=\"Title\" slot={slots?.Title} context={{ text: dictionary.title }}>\n <span data-testid=\"form-title\">{dictionary.title}</span>\n </Slot>\n );\n\n const commentFieldNode = (\n <Slot\n name=\"CommentField\"\n slot={slots?.CommentField}\n context={{\n value: comment,\n required: true,\n errorMessage: formErrors.comment,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <TextArea\n name=\"comment\"\n value={comment}\n label={dictionary.comment}\n required\n autoComplete=\"off\"\n data-testid=\"form-comment-field\"\n errorMessage={formErrors.comment}\n disabled={isFormDisabled}\n />\n </Slot>\n );\n\n const quoteNameFieldNode = (\n <Slot\n name=\"QuoteNameField\"\n slot={slots?.QuoteNameField}\n context={{\n value: quoteName,\n required: true,\n errorMessage: formErrors.quoteName,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <Field\n error={formErrors.quoteName}\n disabled={isFormDisabled}\n >\n <Input\n value={quoteName}\n name=\"quoteName\"\n floatingLabel={dictionary.quoteName}\n required\n autoComplete=\"off\"\n data-testid=\"form-quote-name-field\"\n />\n </Field>\n </Slot>\n );\n\n const attachFileNode = (\n <Slot\n name=\"AttachFileField\"\n slot={slots?.AttachFileField}\n context={{ onChange: handleAttachFiles, formErrors, isFormDisabled }}\n >\n <InputFile\n onChange={(e: Event) => {\n const target = e.target as HTMLInputElement;\n const fileList = target?.files;\n const files = fileList ? Array.from(fileList) : [];\n\n if (files.length > 0) {\n void handleAttachFiles(files);\n }\n }}\n icon={<Add />}\n disabled={isFormDisabled}\n data-testid=\"form-attach-file-field\"\n />\n </Slot>\n );\n\n const requestButtonNode = (\n <Slot\n name=\"RequestButton\"\n slot={slots?.RequestButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-testid=\"form-request-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.requestCta}\n </Button>\n </Slot>\n );\n\n const saveButtonNode = (\n <Slot\n name=\"SaveDraftButton\"\n slot={slots?.SaveDraftButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-draft=\"true\"\n variant=\"secondary\"\n data-testid=\"form-save-draft-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.saveDraftCta}\n </Button>\n </Slot>\n );\n\n return (\n <RequestNegotiableQuoteFormComponent\n title={titleNode}\n banner={getBannerNode()}\n commentField={commentFieldNode}\n quoteNameField={quoteNameFieldNode}\n attachFile={attachFileNode}\n requestButton={requestButtonNode}\n saveButton={saveButtonNode}\n onSubmit={formSubmitHandler}\n className={className}\n disabled={isFormDisabled}\n data-testid=\"form-container\"\n />\n );\n};\n"],"names":["SvgAdd","props","React","SvgCheckWithCircle","RequestNegotiableQuoteForm","className","title","banner","commentField","quoteNameField","attachFile","requestButton","saveButton","onSubmit","jsxs","classes","jsx","VComponent","cartId","slots","onRequestNegotiableQuote","onSaveNegotiableQuote","onAttachFiles","onSubmitErrors","onError","comment","setComment","useState","quoteName","setQuoteName","attachmentKeys","setAttachmentKeys","error","setError","formErrors","setFormErrors","success","setSuccess","isFormDisabled","setIsFormDisabled","dictionary","useText","useEffect","permissionsEvent","events","permissions","authenticatedEvent","authenticated","handleAttachFiles","useCallback","files","prev","uploaded","uploadFile","key","getBannerNode","inlineAlertProps","slotProps","CheckWithCircle","WarningFilled","Slot","InLineAlert","validateParentForm","e","closestForm","getFormErrors","formSubmitHandler","form","mergedFormErrors","buttonTarget","formValues","getFormValues","isDraft","_a","contextData","submitHandler","successMessage","requestNegotiableQuote","titleNode","commentFieldNode","TextArea","quoteNameFieldNode","Field","Input","attachFileNode","InputFile","target","fileList","Add","requestButtonNode","Button","saveButtonNode","RequestNegotiableQuoteFormComponent"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -0,0 +1,10 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container } from '@dropins/tools/types/elsie/src/lib';
3
+ import { NegotiableQuoteModel } from '../../data/models/negotiable-quote-model';
4
+
5
+ export interface ShippingAddressDisplayProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {
6
+ quoteData?: NegotiableQuoteModel;
7
+ loading?: boolean;
8
+ }
9
+ export declare const ShippingAddressDisplay: Container<ShippingAddressDisplayProps>;
10
+ //# sourceMappingURL=ShippingAddressDisplay.d.ts.map
@@ -0,0 +1,11 @@
1
+ /********************************************************************
2
+ * Copyright 2025 Adobe
3
+ * All Rights Reserved.
4
+ *
5
+ * NOTICE: Adobe permits you to use, modify, and distribute this
6
+ * file in accordance with the terms of the Adobe license agreement
7
+ * accompanying it.
8
+ *******************************************************************/
9
+ export { ShippingAddressDisplay } from './ShippingAddressDisplay';
10
+ export type { ShippingAddressDisplayProps } from './ShippingAddressDisplay';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export * from './ShippingAddressDisplay/index'
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{S as d}from"../chunks/ShippingAddressDisplay.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/components.js";import"@dropins/tools/i18n.js";import"@dropins/tools/event-bus.js";export{d as ShippingAddressDisplay};
4
+ //# sourceMappingURL=ShippingAddressDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShippingAddressDisplay.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -2,4 +2,7 @@ export * from './RequestNegotiableQuoteForm';
2
2
  export * from './ManageNegotiableQuote';
3
3
  export * from './ItemsQuoted';
4
4
  export * from './QuotesListTable';
5
+ export * from './QuoteHistoryLog';
6
+ export * from './ShippingAddressDisplay';
7
+ export * from './QuoteCommentsList';
5
8
  //# sourceMappingURL=index.d.ts.map
@@ -40,7 +40,13 @@ export interface NegotiableQuoteModel {
40
40
  firstname: string;
41
41
  lastname: string;
42
42
  };
43
+ text: string;
44
+ attachments?: {
45
+ name: string;
46
+ url: string;
47
+ }[];
43
48
  }[];
49
+ history?: NegotiableQuoteHistoryEntry[];
44
50
  prices: {
45
51
  subtotalExcludingTax?: Currency;
46
52
  subtotalIncludingTax?: Currency;
@@ -99,6 +105,16 @@ export interface NegotiableQuoteCartItem {
99
105
  price: Currency;
100
106
  }[];
101
107
  }[];
108
+ noteFromBuyer?: ItemNote[];
109
+ noteFromSeller?: ItemNote[];
110
+ }
111
+ export interface ItemNote {
112
+ createdAt: string;
113
+ creatorId: number;
114
+ creatorType: number;
115
+ negotiableQuoteItemUid: string;
116
+ note: string;
117
+ noteUid: string;
102
118
  }
103
119
  export interface Currency {
104
120
  value: number;
@@ -136,6 +152,54 @@ export interface NegotiableQuotesListModel {
136
152
  }>;
137
153
  };
138
154
  }
155
+ export interface NegotiableQuoteHistoryEntry {
156
+ author: {
157
+ firstname: string;
158
+ lastname: string;
159
+ };
160
+ changeType: NegotiableQuoteHistoryEntryChangeType;
161
+ changes: {
162
+ commentAdded?: {
163
+ comment: string;
164
+ };
165
+ customChanges?: {
166
+ new_value: string;
167
+ old_value: string;
168
+ title: string;
169
+ };
170
+ expiration?: {
171
+ newExpiration: string;
172
+ oldExpiration: string;
173
+ };
174
+ productsRemoved?: {
175
+ productsRemovedFromCatalog: string[];
176
+ productsRemovedFromQuote?: {
177
+ uid: string;
178
+ name: string;
179
+ sku: string;
180
+ quantity: number;
181
+ }[];
182
+ };
183
+ statuses?: {
184
+ changes: {
185
+ newStatus: string;
186
+ oldStatus: string;
187
+ }[];
188
+ };
189
+ total?: {
190
+ newPrice: Currency;
191
+ oldPrice: Currency;
192
+ };
193
+ };
194
+ createdAt: string;
195
+ uid: string;
196
+ }
197
+ export declare enum NegotiableQuoteHistoryEntryChangeType {
198
+ CREATED = "CREATED",
199
+ UPDATED = "UPDATED",
200
+ CLOSED = "CLOSED",
201
+ UPDATED_BY_SYSTEM = "UPDATED_BY_SYSTEM"
202
+ }
139
203
  export declare enum NegotiableQuoteStatus {
140
204
  NEW = "NEW",
141
205
  SUBMITTED = "SUBMITTED",
@@ -35,6 +35,22 @@ export declare const mockGraphQLResponse: {
35
35
  };
36
36
  };
37
37
  quantity: number;
38
+ note_from_buyer: {
39
+ created_at: string;
40
+ creator_id: number;
41
+ creator_type: number;
42
+ negotiable_quote_item_uid: string;
43
+ note: string;
44
+ note_uid: string;
45
+ }[];
46
+ note_from_seller: {
47
+ created_at: string;
48
+ creator_id: number;
49
+ creator_type: number;
50
+ negotiable_quote_item_uid: string;
51
+ note: string;
52
+ note_uid: string;
53
+ }[];
38
54
  }[];
39
55
  prices: {
40
56
  subtotal_excluding_tax: {
@@ -124,6 +140,22 @@ export declare const mockQuoteData: {
124
140
  }[];
125
141
  };
126
142
  quantity: number;
143
+ note_from_buyer: {
144
+ created_at: string;
145
+ creator_id: number;
146
+ creator_type: number;
147
+ negotiable_quote_item_uid: string;
148
+ note: string;
149
+ note_uid: string;
150
+ }[];
151
+ note_from_seller: {
152
+ created_at: string;
153
+ creator_id: number;
154
+ creator_type: number;
155
+ negotiable_quote_item_uid: string;
156
+ note: string;
157
+ note_uid: string;
158
+ }[];
127
159
  configurable_options?: undefined;
128
160
  bundle_options?: undefined;
129
161
  } | {
@@ -169,6 +201,15 @@ export declare const mockQuoteData: {
169
201
  option_label: string;
170
202
  value_label: string;
171
203
  }[];
204
+ note_from_buyer: {
205
+ created_at: string;
206
+ creator_id: number;
207
+ creator_type: number;
208
+ negotiable_quote_item_uid: string;
209
+ note: string;
210
+ note_uid: string;
211
+ }[];
212
+ note_from_seller: never[];
172
213
  bundle_options?: undefined;
173
214
  } | {
174
215
  product: {
@@ -231,6 +272,22 @@ export declare const mockQuoteData: {
231
272
  };
232
273
  }[];
233
274
  }[];
275
+ note_from_buyer: {
276
+ created_at: string;
277
+ creator_id: number;
278
+ creator_type: number;
279
+ negotiable_quote_item_uid: string;
280
+ note: string;
281
+ note_uid: string;
282
+ }[];
283
+ note_from_seller: {
284
+ created_at: string;
285
+ creator_id: number;
286
+ creator_type: number;
287
+ negotiable_quote_item_uid: string;
288
+ note: string;
289
+ note_uid: string;
290
+ }[];
234
291
  configurable_options?: undefined;
235
292
  })[];
236
293
  history: {
@@ -331,6 +388,15 @@ export declare const mockNegotiableQuotesResponse: {
331
388
  };
332
389
  };
333
390
  quantity: number;
391
+ note_from_buyer: {
392
+ created_at: string;
393
+ creator_id: number;
394
+ creator_type: number;
395
+ negotiable_quote_item_uid: string;
396
+ note: string;
397
+ note_uid: string;
398
+ }[];
399
+ note_from_seller: never[];
334
400
  }[];
335
401
  prices: {
336
402
  subtotal_excluding_tax: {
@@ -51,7 +51,9 @@ declare const _default: {
51
51
  },
52
52
  "quoteComments": {
53
53
  "title": "Quote Comments",
54
- "placeholder": "Add your comment"
54
+ "placeholder": "Add your comment",
55
+ "emptyState": "No comments yet",
56
+ "by": "by"
55
57
  },
56
58
  "productListTable": {
57
59
  "headers": {
@@ -69,6 +71,11 @@ declare const _default: {
69
71
  "remove": "Remove"
70
72
  }
71
73
  },
74
+ "tabbedContent": {
75
+ "itemsQuoted": "Items quoted",
76
+ "comments": "Comments",
77
+ "historyLog": "History log"
78
+ },
72
79
  "quotePricesSummary": {
73
80
  "subtotal": {
74
81
  "excludingTax": "Quote Subtotal (excluding tax)"
@@ -116,6 +123,39 @@ declare const _default: {
116
123
  }
117
124
  }
118
125
  },
126
+ "historyLog": {
127
+ "changeTypes": {
128
+ "created": "Quote Created",
129
+ "updated": "Quote Updated",
130
+ "statusChanged": "Status Changed",
131
+ "commentAdded": "Comment Added",
132
+ "expirationChanged": "Expiration Changed"
133
+ },
134
+ "noteTypes": {
135
+ "buyerNoteAdded": "Buyer Note Added",
136
+ "sellerNoteAdded": "Seller Note Added"
137
+ },
138
+ "authorLabels": {
139
+ "buyer": "(Buyer)",
140
+ "seller": "(Seller)"
141
+ },
142
+ "changeDetails": {
143
+ "comment": "Comment: \"{comment}\"",
144
+ "statusChangedFromTo": "Status changed from {oldStatus} to {newStatus}",
145
+ "statusSetTo": "Status set to {newStatus}",
146
+ "expirationChangedFromTo": "Expiration changed from {oldExpiration} to {newExpiration}",
147
+ "expirationSetTo": "Expiration set to {newExpiration}",
148
+ "totalChangedFromTo": "Total changed from {oldTotal} to {newTotal}",
149
+ "customChange": "{title}: changed from \"{oldValue}\" to \"{newValue}\"",
150
+ "productsRemovedFromCatalog": "Products removed from catalog: {products}",
151
+ "productsRemovedFromQuote": "Products removed from quote: {products}",
152
+ "noDetailsAvailable": "No details available"
153
+ },
154
+ "emptyState": "No history available for this quote."
155
+ },
156
+ "dateUtils": {
157
+ "never": "Never"
158
+ },
119
159
  "QuoteManagement": {
120
160
  "QuotesListTable": {
121
161
  "quoteName": "Quote Name",
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name": "@dropins/storefront-quote-management", "version": "0.0.1-alpha14", "@dropins/tools": "^1.5.1", "license": "SEE LICENSE IN LICENSE.md"}
1
+ {"name": "@dropins/storefront-quote-management", "version": "0.0.1-alpha15", "@dropins/tools": "1.6.0-beta1", "license": "SEE LICENSE IN LICENSE.md"}
package/render.js CHANGED
@@ -1,8 +1,10 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- (function(o,a){try{if(typeof document<"u"){const e=document.createElement("style"),i=a.styleId;for(const t in a.attributes)e.setAttribute(t,a.attributes[t]);e.setAttribute("data-dropin",i),e.appendChild(document.createTextNode(o));const n=document.querySelector('style[data-dropin="sdk"]');if(n)n.after(e);else{const t=document.querySelector('link[rel="stylesheet"], style');t?t.before(e):document.head.append(e)}}}catch(e){console.error("dropin-styles (injectCodeFunction)",e)}})(`.quote-management-shipping-address-display{display:flex;flex-direction:column;gap:var(--spacing-xsmall, 4px);font-size:var(--font-size-body, 14px);line-height:var(--line-height-body, 1.5);color:var(--color-text-primary, #2d2d2d)}.quote-management-shipping-address-display__field{margin:0;word-wrap:break-word;overflow-wrap:break-word}.quote-management-shipping-address-display__name{font-weight:var(--font-weight-semibold, 600)}.quote-management-shipping-address-display--empty{padding:var(--spacing-medium, 16px);background-color:var(--color-background-subtle, #f5f5f5);border-radius:var(--border-radius-medium, 4px)}.quote-management-shipping-address-display__no-address{margin:0;color:var(--color-text-secondary, #6d6d6d);font-style:italic}
4
- .quote-management-actions-bar__container{container-type:inline-size;container-name:actions-bar-container}.quote-management-actions-bar{background:var(--color-neutral-200);padding:var(--spacing-xsmall);display:flex;gap:var(--spacing-small);justify-content:space-between;align-items:center}.quote-management-actions-bar__dropdown{width:max-content}.quote-management-actions-bar__buttons{display:flex}.quote-management-actions-bar__button>span{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}@container actions-bar-container (max-width: 768px){.quote-management-actions-bar{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall)}.quote-management-actions-bar__dropdown{width:100%}.quote-management-actions-bar__buttons{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall);width:100%}.quote-management-actions-bar__button{width:100%}}.quote-management-manage-negotiable-quote{display:grid;gap:var(--spacing-small);color:var(--color-neutral-800);width:100%;container-type:inline-size}.quote-management-manage-negotiable-quote__header{display:flex;gap:var(--spacing-big);align-items:center}.quote-management-manage-negotiable-quote__quote-name>*{font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-status>*{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing);border:2px solid var(--color-neutral-300);padding:var(--spacing-xxsmall)}.quote-management-manage-negotiable-quote__banner{width:100%}.quote-management-manage-negotiable-quote__details{display:flex;flex-direction:row;gap:var(--spacing-xsmall);justify-content:space-between;align-items:center;flex-wrap:wrap}.quote-management-manage-negotiable-quote__detail{display:flex;flex-wrap:wrap;gap:var(--spacing-xxsmall);align-items:baseline}.quote-management-manage-negotiable-quote__detail-title{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing)}.quote-management-manage-negotiable-quote__detail-content{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-manage-negotiable-quote__item-actions{justify-content:flex-start}.quote-management-manage-negotiable-quote__quote-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-comments-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__quote-comments-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__footer{display:flex;gap:var(--spacing-small);justify-content:flex-start}@container (max-width: 768px){.quote-management-manage-negotiable-quote__header{flex-direction:column}.quote-management-manage-negotiable-quote__action-bar{flex-direction:column;align-items:flex-start}.quote-management-manage-negotiable-quote__quote-actions{justify-content:flex-start}}.negotiable-quote-summary{display:grid;position:relative;grid-auto-flow:row;padding:var(--spacing-medium)}.negotiable-quote-summary__primary{background-color:var(--color-neutral-200)}.negotiable-quote-summary__secondary{background-color:var(--color-neutral-50)}.negotiable-quote-summary__content{display:grid;gap:var(--spacing-xsmall);margin-top:var(--spacing-small)}.negotiable-quote-summary__heading{display:grid;font:var(--type-headline-2-strong-font);letter-spacing:var(--type-headline-2-strong-letter-spacing);color:var(--color-neutral-800);gap:var(--spacing-small)}.negotiable-quote-summary__discount .negotiable-quote-summary__label,.negotiable-quote-summary__discount .negotiable-quote-summary__price{color:var(--color-warning-800)}.negotiable-quote-summary__taxes .dropin-divider:last-child{margin-bottom:0}.negotiable-quote-summary__total{margin-top:var(--spacing-medium)}.negotiable-quote-summary__divider-primary,.negotiable-quote-summary__divider-secondary{width:100%;margin:0}.negotiable-quote-summary__divider-secondary{margin:0}.negotiable-quote-summary__taxEntry.negotiable-quote-summary__entry{margin-top:0}.negotiable-quote-summary__entry,.negotiable-quote-summary__taxEntry{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-xxsmall);align-items:center;color:var(--color-neutral-800)}.negotiable-quote-summary__caption{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing);grid-column:span 2;color:var(--color-neutral-700)}.negotiable-quote-summary__primaryAction{margin-top:var(--spacing-small);grid-template-columns:1fr}.negotiable-quote-summary__shipping--edit{display:grid;grid-column:1 / span 2;gap:var(--spacing-small);padding-top:var(--spacing-small);padding-left:var(--spacing-small)}a.negotiable-quote-summary__shippingLink{text-decoration:underline}.negotiable-quote-summary__shipping--hide{display:none!important}.negotiable-quote-summary__shipping--edit button{width:var(--spacing-huge);justify-self:end}.negotiable-quote-summary__shipping--zip,.negotiable-quote-summary__shipping--state{background-color:var(--color-neutral-50)}.negotiable-quote-summary__taxes .dropin-accordion-section__content-container{gap:var(--spacing-small);margin:var(--spacing-small) 0}.negotiable-quote-summary--loading{opacity:.4;pointer-events:none}.negotiable-quote-summary__spinner{margin:0 auto;position:absolute;z-index:999;left:0;right:0;top:calc(50% - (var(--size) / 2));bottom:0}.negotiable-quote-summary__label,.negotiable-quote-summary__price{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.negotiable-quote-summary__price{text-align:right;text-transform:uppercase}.negotiable-quote-summary__label--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing);color:var(--color-neutral-700)}.negotiable-quote-summary__price--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.negotiable-quote-summary__label--bold,.negotiable-quote-summary__price--bold{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.quote-management-quote-summary-list{container-type:inline-size;container-name:quote-summary-list}.quote-management-quote-summary-list__background--secondary{background-color:var(--color-neutral-200)}.quote-management-quote-summary-list__heading{display:grid;row-gap:var(--spacing-xsmall);padding:var(--spacing-medium) 0 0 0;font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-summary-list__heading--full-width{width:100%}.quote-management-quote-summary-list__heading-divider{width:100%;margin:var(--spacing-xxsmall) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list__content{display:grid;grid-template-columns:1fr;padding:0}.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-xsmall)) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list-footer__action,.quote-management-quote-summary-list-footer__action:focus .quote-management-quote-summary-list-footer__action:active,.quote-management-quote-summary-list-footer__action:link{font:var(--type-body-2-strong-font);margin:0 auto;width:auto;margin-top:var(--spacing-medium);margin-bottom:var(--spacing-medium)}.quote-management-quote-summary-list-footer__action:hover{text-decoration:underline;text-underline-offset:var(--spacing-xxsmall);background:transparent;color:var(--color-brand-700)}.quote-management-quote-summary-list-footer__action:visited{background-color:transparent}.quote-management-quote-summary-list-accordion{border-left:var(--shape-border-width-2) solid var(--color-neutral-400);border-right:var(--shape-border-width-2) solid var(--color-neutral-400)}.quote-management-quote-summary-list-accordion__section{margin:var(--spacing-medium)}.dropin-cart-item__quantity{width:fit-content}@container quote-summary-list (width >= 768px){.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-small)) 0 var(--spacing-xxbig) 0}}@container quote-summary-list (width >= 1024px){.quote-management-quote-summary-list__content,.quote-management-quote-summary-list__heading{grid-column:1 / span 8}.quote-management-quote-summary-list__heading--full-width{grid-column:1 / span 12}.quote-management-quote-summary-list__content{padding:0}}.quotes-list-table__empty-state{padding:var(--spacing-large);text-align:center;color:var(--color-neutral-600);border-top:var(--shape-border-width-1) solid var(--color-neutral-200)}.quotes-list-table__footer{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-medium);border-top:var(--shape-border-width-1) solid var(--color-neutral-200);gap:var(--spacing-medium)}.quotes-list-table__item-range{flex:1;color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__pagination{flex:0 0 auto;display:flex;justify-content:center}.quotes-list-table__page-size-picker{flex:1;display:flex;justify-content:flex-end;align-items:center;gap:var(--spacing-small);color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__page-size-picker>span{display:inline-flex;align-items:baseline}.quotes-list-table__page-size-picker .dropin-picker{display:inline-flex;align-items:center;margin:0 var(--spacing-xsmall);vertical-align:center}.quotes-list-table__page-size-picker .dropin-picker__select{height:auto;min-height:var(--sizing-medium);line-height:1.2;vertical-align:baseline}.quote-management-tabbed-content{width:100%}.quote-management-tabbed-content__tabs{display:flex;margin-bottom:-1px}.quote-management-tabbed-content__tab{background:var(--color-neutral-100);color:var(--color-neutral-700);border:solid 1px var(--color-neutral-400);padding:var(--spacing-xsmall) var(--spacing-medium);margin-left:-1px;cursor:pointer;font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-tabbed-content__tab:first-child{margin-left:unset}.quote-management-tabbed-content__tab:hover{background:var(--color-neutral-300);color:var(--color-neutral-700)}.quote-management-tabbed-content__tab--active{background:var(--color-neutral-50);color:var(--color-neutral-800);border-bottom:none}.quote-management-tabbed-content__tab--active:hover{background:var(--color-neutral-50);color:var(--color-neutral-800)}.quote-management-tabbed-content__active-tab-content{background:var(--color-neutral-50);padding:var(--spacing-small);border:solid 1px var(--color-neutral-400)}
5
- .request-negotiable-quote-form{display:grid;gap:var(--spacing-small);align-items:flex-end;color:var(--color-neutral-800);width:100%}.request-negotiable-quote-form input:user-invalid,.request-negotiable-quote-form textarea:user-invalid{border-color:var(--color-alert-800)}.request-negotiable-quote-form__title{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.request-negotiable-quote-form__actions,.request-negotiable-quote-form [data-slot=AttachFileField]{display:flex;gap:var(--spacing-small)}.request-negotiable-quote-form__actions{justify-content:flex-start}.request-negotiable-quote-form__attach-file-field{justify-content:end}.request-negotiable-quote-form__attach-file-field label{background:none;color:var(--color-brand-500);font:var(--type-body-1-strong-font)}.request-negotiable-quote-form__attach-file-field label:hover{background:none}.request-negotiable-quote-form__error-banner svg{color:var(--color-alert-800)}
6
- .quote-management-items-quoted{display:flex;flex-direction:column;gap:var(--spacing-big)}.quote-management-product-list-table-container{display:flex;flex-direction:column;gap:var(--spacing-small)}.quote-management-product-list-table__checkbox{align-self:center;justify-self:center}.quote-management-product-list-table__product-name-container{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__product-name{font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing)}.quote-management-product-list-table__configurable-option{display:flex;flex-direction:row;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__configurable-option-label{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__configurable-option-value{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__bundle-option{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__bundle-option-label{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__bundle-option-values{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__bundle-option-value{display:flex;flex-direction:row;align-items:center;gap:var(--spacing-xxsmall);font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__bundle-option-value-original-price{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__sku{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__quantity{font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing);display:block;justify-self:center}.quote-management-product-list-table__discount-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--spacing-xxsmall);align-items:baseline}.quote-management-product-list-table-container__submit-container{display:flex;justify-content:flex-end}.quote-management-quote-prices-summary{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.quote-management-quote-prices-summary__entry{display:flex;flex-direction:row;justify-content:space-between;gap:10px;width:100%}.quote-management-quote-prices-summary__accordion,.quote-management-quote-prices-summary__label{flex-grow:1}.quote-management-quote-prices-summary__label--strong{font:var(--type-body-1-strong-font);letter-spacing:var(--type-body-1-strong-letter-spacing)}.quote-management-quote-prices-summary__value{flex-grow:1;text-align:right}`,{styleId:"quote-management"});
7
- import{jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{Render as i}from"@dropins/tools/lib.js";import{useState as s,useEffect as u}from"@dropins/tools/preact-hooks.js";import{UIProvider as l}from"@dropins/tools/components.js";import{events as d}from"@dropins/tools/event-bus.js";const c={Request:{title:"Request a Quote",comment:"Comment",commentError:"Please add your comment",quoteName:"Quote name",quoteNameError:"Please add a quote name",attachmentsError:"Error uploading attachments",requestCta:"Request a Quote",saveDraftCta:"Save as draft",error:{header:"Error",unauthenticated:"Please sign in to request a quote.",unauthorized:"You are not authorized to request a quote.",missingCart:"Could not find a valid cart."},success:{header:"Success",submitted:"Quote request submitted successfully!",draftSaved:"Quote saved as draft successfully!"}},Manage:{createdLabel:"Created:",salesRepLabel:"Sales Rep:",expiresLabel:"Expires:",actionsLabel:"Actions",actions:{remove:"Remove"},bannerTitle:"Alert",bannerStatusMessages:{submitted:"This quote is currently locked for editing. It will become available once released by the Merchant.",pending:"This quote is currently locked for editing. It will become available once released by the Merchant.",expired:"Your quote has expired and the product prices have been updated as per the latest prices in your catalog. You can either re-submit the quote to seller for further negotiation or go to checkout."},actionButtons:{close:"Close quote",delete:"Delete quote",print:"Print quote",createTemplate:"Create quote template",createCopy:"Create copy",sendForReview:"Send for review"},shippingInformation:{title:"Shipping Information"},shippingAddress:{noAddress:"No shipping address has been set for this quote."},quoteComments:{title:"Quote Comments",placeholder:"Add your comment"},productListTable:{headers:{productName:"Product name",sku:"SKU",price:"Price",quantity:"Quantity",discount:"Discount",subtotal:"Subtotal",actions:"Actions"},submitButton:"Update",actions:{editNoteToSeller:"Edit note to seller",remove:"Remove"}},quotePricesSummary:{subtotal:{excludingTax:"Quote Subtotal (excluding tax)"},appliedTaxes:"Applied Taxes",grandTotal:{includingTax:"Quote Grand Total (including tax)"}}},PriceSummary:{giftOptionsTax:{printedCard:{title:"Printed card",inclTax:"Including taxes",exclTax:"excluding taxes"},itemGiftWrapping:{title:"Item gift wrapping",inclTax:"Including taxes",exclTax:"excluding taxes"},orderGiftWrapping:{title:"Order gift wrapping",inclTax:"Including taxes",exclTax:"excluding taxes"}},subTotal:{label:"Subtotal",withTaxes:"Including taxes",withoutTaxes:"excluding taxes"},taxes:{total:"Tax Total",totalOnly:"Tax",breakdown:"Taxes",showBreakdown:"Show Tax Breakdown",hideBreakdown:"Hide Tax Breakdown"},total:{label:"Total",withoutTax:"Total excluding taxes",saved:"Total saved"}}},m={QuotesListTable:{quoteName:"Quote Name",created:"Created",createdBy:"Created By",status:"Status",lastUpdated:"Last Updated",quoteTemplate:"Quote Template",quoteTotal:"Quote Total",actions:"Action"}},p={NegotiableQuote:c,QuoteManagement:m},x={default:p},g=({children:a})=>{const[o,r]=s("en_US");return u(()=>{const e=d.on("locale",n=>{r(n)},{eager:!0});return()=>{e==null||e.off()}},[]),t(l,{lang:o,langDefinitions:x,children:a})},S=new i(t(g,{}));export{S as render};
3
+ (function(o,a){try{if(typeof document<"u"){const e=document.createElement("style"),r=a.styleId;for(const t in a.attributes)e.setAttribute(t,a.attributes[t]);e.setAttribute("data-dropin",r),e.appendChild(document.createTextNode(o));const n=document.querySelector('style[data-dropin="sdk"]');if(n)n.after(e);else{const t=document.querySelector('link[rel="stylesheet"], style');t?t.before(e):document.head.append(e)}}}catch(e){console.error("dropin-styles (injectCodeFunction)",e)}})(`.request-negotiable-quote-form{display:grid;gap:var(--spacing-small);align-items:flex-end;color:var(--color-neutral-800);width:100%}.request-negotiable-quote-form input:user-invalid,.request-negotiable-quote-form textarea:user-invalid{border-color:var(--color-alert-800)}.request-negotiable-quote-form__title{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.request-negotiable-quote-form__actions,.request-negotiable-quote-form [data-slot=AttachFileField]{display:flex;gap:var(--spacing-small)}.request-negotiable-quote-form__actions{justify-content:flex-start}.request-negotiable-quote-form__attach-file-field{justify-content:end}.request-negotiable-quote-form__attach-file-field label{background:none;color:var(--color-brand-500);font:var(--type-body-1-strong-font)}.request-negotiable-quote-form__attach-file-field label:hover{background:none}.request-negotiable-quote-form__error-banner svg{color:var(--color-alert-800)}
4
+ .quote-management-quote-history-log{padding:var(--spacing-small)}.quote-management-quote-history-log__entries{display:flex;flex-direction:column;gap:var(--spacing-small)}.quote-management-quote-history-log__entry{border:1px solid var(--color-neutral-400);padding:var(--spacing-small);background-color:var(--color-neutral-50)}.quote-management-quote-history-log__entry-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:var(--spacing-xsmall);flex-wrap:wrap;gap:var(--spacing-xsmall)}.quote-management-quote-history-log__entry-meta{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-quote-history-log__entry-date,.quote-management-quote-history-log__entry-author{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-history-log__entry-type{background-color:var(--color-neutral-200);color:var(--color-neutral-800);padding:var(--spacing-xxsmall) var(--spacing-xsmall);font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing);white-space:nowrap;border:1px solid var(--color-neutral-300)}.quote-management-quote-history-log__entry-changes{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-quote-history-log__entry-change{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing);color:var(--color-neutral-700);padding-left:var(--spacing-small);position:relative}.quote-management-quote-history-log__entry-change:before{position:absolute;left:0;color:var(--color-neutral-600);font-weight:700}.quote-management-quote-history-log__empty{text-align:center;color:var(--color-neutral-700);font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing);font-style:italic;padding:var(--spacing-big)}@media only screen and (min-width: 768px){.quote-management-quote-history-log__entry-header{flex-wrap:nowrap}.quote-management-quote-history-log__entry-meta{flex-direction:row;gap:var(--spacing-xsmall);align-items:center}}
5
+ .quote-management-quote-comments-list{list-style:none;padding:0;margin:0}.quote-management-quote-comments-list__empty-state{color:var(--color-neutral-800);font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing);padding:var(--spacing-small) 0;margin:0;list-style:none}.quote-management-quote-comments-list__item{padding:var(--spacing-small) 0;border-bottom:1px solid var(--color-neutral-300)}.quote-management-quote-comments-list__item:last-child{border-bottom:none}.quote-management-quote-comments-list__header{display:flex;align-items:baseline;margin-bottom:var(--spacing-xxsmall);gap:var(--spacing-xxsmall)}.quote-management-quote-comments-list__date,.quote-management-quote-comments-list__by,.quote-management-quote-comments-list__author{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-comments-list__date{white-space:nowrap}.quote-management-quote-comments-list__text{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing);color:var(--color-neutral-800);margin:0;word-wrap:break-word}@media only screen and (min-width: 768px){.quote-management-quote-comments-list__item{padding:var(--spacing-medium) 0}}
6
+ .quote-management-shipping-address-display{display:flex;flex-direction:column;gap:var(--spacing-xsmall);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing);color:var(--color-neutral-800)}.quote-management-shipping-address-display__field{margin:0;word-wrap:break-word;overflow-wrap:break-word}.quote-management-shipping-address-display__name{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing)}.quote-management-shipping-address-display--empty{padding:var(--spacing-medium);background-color:var(--color-neutral-50)}.quote-management-shipping-address-display__no-address{margin:0;color:var(--color-neutral-700);font-style:italic}
7
+ .quote-management-items-quoted{display:flex;flex-direction:column;gap:var(--spacing-big)}.quote-management-product-list-table-container{display:flex;flex-direction:column;gap:var(--spacing-small)}.quote-management-product-list-table__checkbox{align-self:center;justify-self:center}.quote-management-product-list-table__product-name-container{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__product-name{font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing)}.quote-management-product-list-table__configurable-option{display:flex;flex-direction:row;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__configurable-option-label{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__configurable-option-value{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__bundle-option{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__bundle-option-label{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__bundle-option-values{display:flex;flex-direction:column;gap:var(--spacing-xxsmall)}.quote-management-product-list-table__bundle-option-value{display:flex;flex-direction:row;align-items:center;gap:var(--spacing-xxsmall);font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__bundle-option-value-original-price{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing)}.quote-management-product-list-table__sku{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing)}.quote-management-product-list-table__quantity{font:var(--type-body-1-font);letter-spacing:var(--type-body-1-letter-spacing);display:block;justify-self:center}.quote-management-product-list-table__discount-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--spacing-xxsmall);align-items:baseline}.quote-management-product-list-table-container__submit-container{display:flex;justify-content:flex-end}.quote-management-quote-prices-summary{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.quote-management-quote-prices-summary__entry{display:flex;flex-direction:row;justify-content:space-between;gap:10px;width:100%}.quote-management-quote-prices-summary__accordion,.quote-management-quote-prices-summary__label{flex-grow:1}.quote-management-quote-prices-summary__label--strong{font:var(--type-body-1-strong-font);letter-spacing:var(--type-body-1-strong-letter-spacing)}.quote-management-quote-prices-summary__value{flex-grow:1;text-align:right}
8
+ .quote-management-actions-bar__container{container-type:inline-size;container-name:actions-bar-container}.quote-management-actions-bar{background:var(--color-neutral-200);padding:var(--spacing-xsmall);display:flex;gap:var(--spacing-small);justify-content:space-between;align-items:center}.quote-management-actions-bar__dropdown{width:max-content}.quote-management-actions-bar__buttons{display:flex}.quote-management-actions-bar__button>span{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}@container actions-bar-container (max-width: 768px){.quote-management-actions-bar{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall)}.quote-management-actions-bar__dropdown{width:100%}.quote-management-actions-bar__buttons{flex-direction:column;align-items:flex-start;gap:var(--spacing-xsmall);width:100%}.quote-management-actions-bar__button{width:100%}}.quote-management-manage-negotiable-quote{display:grid;gap:var(--spacing-small);color:var(--color-neutral-800);width:100%;container-type:inline-size}.quote-management-manage-negotiable-quote__header{display:flex;gap:var(--spacing-big);align-items:center}.quote-management-manage-negotiable-quote__quote-name>*{font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-status>*{font:var(--type-details-caption-1-font);letter-spacing:var(--type-details-caption-1-letter-spacing);border:2px solid var(--color-neutral-300);padding:var(--spacing-xxsmall)}.quote-management-manage-negotiable-quote__banner{width:100%}.quote-management-manage-negotiable-quote__details{display:flex;flex-direction:row;gap:var(--spacing-xsmall);justify-content:space-between;align-items:center;flex-wrap:wrap}.quote-management-manage-negotiable-quote__detail{display:flex;flex-wrap:wrap;gap:var(--spacing-xxsmall);align-items:baseline}.quote-management-manage-negotiable-quote__detail-title{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing)}.quote-management-manage-negotiable-quote__detail-content{font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-manage-negotiable-quote__item-actions{justify-content:flex-start}.quote-management-manage-negotiable-quote__quote-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__shipping-information-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__quote-comments-container{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.quote-management-manage-negotiable-quote__quote-comments-title>*{font:var(--type-body-2-emphasized-font);letter-spacing:var(--type-body-2-emphasized-letter-spacing);margin:0}.quote-management-manage-negotiable-quote__footer{display:flex;gap:var(--spacing-small);justify-content:flex-start}@container (max-width: 768px){.quote-management-manage-negotiable-quote__header{flex-direction:column}.quote-management-manage-negotiable-quote__action-bar{flex-direction:column;align-items:flex-start}.quote-management-manage-negotiable-quote__quote-actions{justify-content:flex-start}}.negotiable-quote-summary{display:grid;position:relative;grid-auto-flow:row;padding:var(--spacing-medium)}.negotiable-quote-summary__primary{background-color:var(--color-neutral-200)}.negotiable-quote-summary__secondary{background-color:var(--color-neutral-50)}.negotiable-quote-summary__content{display:grid;gap:var(--spacing-xsmall);margin-top:var(--spacing-small)}.negotiable-quote-summary__heading{display:grid;font:var(--type-headline-2-strong-font);letter-spacing:var(--type-headline-2-strong-letter-spacing);color:var(--color-neutral-800);gap:var(--spacing-small)}.negotiable-quote-summary__discount .negotiable-quote-summary__label,.negotiable-quote-summary__discount .negotiable-quote-summary__price{color:var(--color-warning-800)}.negotiable-quote-summary__taxes .dropin-divider:last-child{margin-bottom:0}.negotiable-quote-summary__total{margin-top:var(--spacing-medium)}.negotiable-quote-summary__divider-primary,.negotiable-quote-summary__divider-secondary{width:100%;margin:0}.negotiable-quote-summary__divider-secondary{margin:0}.negotiable-quote-summary__taxEntry.negotiable-quote-summary__entry{margin-top:0}.negotiable-quote-summary__entry,.negotiable-quote-summary__taxEntry{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-xxsmall);align-items:center;color:var(--color-neutral-800)}.negotiable-quote-summary__caption{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing);grid-column:span 2;color:var(--color-neutral-700)}.negotiable-quote-summary__primaryAction{margin-top:var(--spacing-small);grid-template-columns:1fr}.negotiable-quote-summary__shipping--edit{display:grid;grid-column:1 / span 2;gap:var(--spacing-small);padding-top:var(--spacing-small);padding-left:var(--spacing-small)}a.negotiable-quote-summary__shippingLink{text-decoration:underline}.negotiable-quote-summary__shipping--hide{display:none!important}.negotiable-quote-summary__shipping--edit button{width:var(--spacing-huge);justify-self:end}.negotiable-quote-summary__shipping--zip,.negotiable-quote-summary__shipping--state{background-color:var(--color-neutral-50)}.negotiable-quote-summary__taxes .dropin-accordion-section__content-container{gap:var(--spacing-small);margin:var(--spacing-small) 0}.negotiable-quote-summary--loading{opacity:.4;pointer-events:none}.negotiable-quote-summary__spinner{margin:0 auto;position:absolute;z-index:999;left:0;right:0;top:calc(50% - (var(--size) / 2));bottom:0}.negotiable-quote-summary__label,.negotiable-quote-summary__price{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.negotiable-quote-summary__price{text-align:right;text-transform:uppercase}.negotiable-quote-summary__label--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing);color:var(--color-neutral-700)}.negotiable-quote-summary__price--muted{font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.negotiable-quote-summary__label--bold,.negotiable-quote-summary__price--bold{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.quote-management-quote-summary-list{container-type:inline-size;container-name:quote-summary-list}.quote-management-quote-summary-list__background--secondary{background-color:var(--color-neutral-200)}.quote-management-quote-summary-list__heading{display:grid;row-gap:var(--spacing-xsmall);padding:var(--spacing-medium) 0 0 0;font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing);color:var(--color-neutral-800)}.quote-management-quote-summary-list__heading--full-width{width:100%}.quote-management-quote-summary-list__heading-divider{width:100%;margin:var(--spacing-xxsmall) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list__content{display:grid;grid-template-columns:1fr;padding:0}.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-xsmall)) 0 var(--spacing-medium) 0}.quote-management-quote-summary-list-footer__action,.quote-management-quote-summary-list-footer__action:focus .quote-management-quote-summary-list-footer__action:active,.quote-management-quote-summary-list-footer__action:link{font:var(--type-body-2-strong-font);margin:0 auto;width:auto;margin-top:var(--spacing-medium);margin-bottom:var(--spacing-medium)}.quote-management-quote-summary-list-footer__action:hover{text-decoration:underline;text-underline-offset:var(--spacing-xxsmall);background:transparent;color:var(--color-brand-700)}.quote-management-quote-summary-list-footer__action:visited{background-color:transparent}.quote-management-quote-summary-list-accordion{border-left:var(--shape-border-width-2) solid var(--color-neutral-400);border-right:var(--shape-border-width-2) solid var(--color-neutral-400)}.quote-management-quote-summary-list-accordion__section{margin:var(--spacing-medium)}.dropin-cart-item__quantity{width:fit-content}@container quote-summary-list (width >= 768px){.quote-management-quote-summary-list__out-of-stock-message{margin:calc(-1 * var(--spacing-small)) 0 var(--spacing-xxbig) 0}}@container quote-summary-list (width >= 1024px){.quote-management-quote-summary-list__content,.quote-management-quote-summary-list__heading{grid-column:1 / span 8}.quote-management-quote-summary-list__heading--full-width{grid-column:1 / span 12}.quote-management-quote-summary-list__content{padding:0}}.quotes-list-table__empty-state{padding:var(--spacing-large);text-align:center;color:var(--color-neutral-600);border-top:var(--shape-border-width-1) solid var(--color-neutral-200)}.quotes-list-table__footer{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-medium);border-top:var(--shape-border-width-1) solid var(--color-neutral-200);gap:var(--spacing-medium)}.quotes-list-table__item-range{flex:1;color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__pagination{flex:0 0 auto;display:flex;justify-content:center}.quotes-list-table__page-size-picker{flex:1;display:flex;justify-content:flex-end;align-items:center;gap:var(--spacing-small);color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}.quotes-list-table__page-size-picker>span{display:inline-flex;align-items:baseline}.quotes-list-table__page-size-picker .dropin-picker{display:inline-flex;align-items:center;margin:0 var(--spacing-xsmall);vertical-align:center}.quotes-list-table__page-size-picker .dropin-picker__select{height:auto;min-height:var(--sizing-medium);line-height:1.2;vertical-align:baseline}.quote-management-tabbed-content{width:100%}.quote-management-tabbed-content__tabs{display:flex;margin-bottom:-1px}.quote-management-tabbed-content__tab{background:var(--color-neutral-100);color:var(--color-neutral-700);border:solid 1px var(--color-neutral-400);padding:var(--spacing-xsmall) var(--spacing-medium);margin-left:-1px;cursor:pointer;font:var(--type-body-2-font);letter-spacing:var(--type-body-2-letter-spacing)}.quote-management-tabbed-content__tab:first-child{margin-left:unset}.quote-management-tabbed-content__tab:hover{background:var(--color-neutral-300);color:var(--color-neutral-700)}.quote-management-tabbed-content__tab--active{background:var(--color-neutral-50);color:var(--color-neutral-800);border-bottom:none}.quote-management-tabbed-content__tab--active:hover{background:var(--color-neutral-50);color:var(--color-neutral-800)}.quote-management-tabbed-content__active-tab-content{background:var(--color-neutral-50);padding:var(--spacing-small);border:solid 1px var(--color-neutral-400)}`,{styleId:"quote-management"});
9
+ import{jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{Render as s}from"@dropins/tools/lib.js";import{useState as i,useEffect as d}from"@dropins/tools/preact-hooks.js";import{UIProvider as u}from"@dropins/tools/components.js";import{events as l}from"@dropins/tools/event-bus.js";const c={Request:{title:"Request a Quote",comment:"Comment",commentError:"Please add your comment",quoteName:"Quote name",quoteNameError:"Please add a quote name",attachmentsError:"Error uploading attachments",requestCta:"Request a Quote",saveDraftCta:"Save as draft",error:{header:"Error",unauthenticated:"Please sign in to request a quote.",unauthorized:"You are not authorized to request a quote.",missingCart:"Could not find a valid cart."},success:{header:"Success",submitted:"Quote request submitted successfully!",draftSaved:"Quote saved as draft successfully!"}},Manage:{createdLabel:"Created:",salesRepLabel:"Sales Rep:",expiresLabel:"Expires:",actionsLabel:"Actions",actions:{remove:"Remove"},bannerTitle:"Alert",bannerStatusMessages:{submitted:"This quote is currently locked for editing. It will become available once released by the Merchant.",pending:"This quote is currently locked for editing. It will become available once released by the Merchant.",expired:"Your quote has expired and the product prices have been updated as per the latest prices in your catalog. You can either re-submit the quote to seller for further negotiation or go to checkout."},actionButtons:{close:"Close quote",delete:"Delete quote",print:"Print quote",createTemplate:"Create quote template",createCopy:"Create copy",sendForReview:"Send for review"},shippingInformation:{title:"Shipping Information"},shippingAddress:{noAddress:"No shipping address has been set for this quote."},quoteComments:{title:"Quote Comments",placeholder:"Add your comment",emptyState:"No comments yet",by:"by"},productListTable:{headers:{productName:"Product name",sku:"SKU",price:"Price",quantity:"Quantity",discount:"Discount",subtotal:"Subtotal",actions:"Actions"},submitButton:"Update",actions:{editNoteToSeller:"Edit note to seller",remove:"Remove"}},tabbedContent:{itemsQuoted:"Items quoted",comments:"Comments",historyLog:"History log"},quotePricesSummary:{subtotal:{excludingTax:"Quote Subtotal (excluding tax)"},appliedTaxes:"Applied Taxes",grandTotal:{includingTax:"Quote Grand Total (including tax)"}}},PriceSummary:{giftOptionsTax:{printedCard:{title:"Printed card",inclTax:"Including taxes",exclTax:"excluding taxes"},itemGiftWrapping:{title:"Item gift wrapping",inclTax:"Including taxes",exclTax:"excluding taxes"},orderGiftWrapping:{title:"Order gift wrapping",inclTax:"Including taxes",exclTax:"excluding taxes"}},subTotal:{label:"Subtotal",withTaxes:"Including taxes",withoutTaxes:"excluding taxes"},taxes:{total:"Tax Total",totalOnly:"Tax",breakdown:"Taxes",showBreakdown:"Show Tax Breakdown",hideBreakdown:"Hide Tax Breakdown"},total:{label:"Total",withoutTax:"Total excluding taxes",saved:"Total saved"}}},m={changeTypes:{created:"Quote Created",updated:"Quote Updated",statusChanged:"Status Changed",commentAdded:"Comment Added",expirationChanged:"Expiration Changed"},noteTypes:{buyerNoteAdded:"Buyer Note Added",sellerNoteAdded:"Seller Note Added"},authorLabels:{buyer:"(Buyer)",seller:"(Seller)"},changeDetails:{comment:'Comment: "{comment}"',statusChangedFromTo:"Status changed from {oldStatus} to {newStatus}",statusSetTo:"Status set to {newStatus}",expirationChangedFromTo:"Expiration changed from {oldExpiration} to {newExpiration}",expirationSetTo:"Expiration set to {newExpiration}",totalChangedFromTo:"Total changed from {oldTotal} to {newTotal}",customChange:'{title}: changed from "{oldValue}" to "{newValue}"',productsRemovedFromCatalog:"Products removed from catalog: {products}",productsRemovedFromQuote:"Products removed from quote: {products}",noDetailsAvailable:"No details available"},emptyState:"No history available for this quote."},p={never:"Never"},g={QuotesListTable:{quoteName:"Quote Name",created:"Created",createdBy:"Created By",status:"Status",lastUpdated:"Last Updated",quoteTemplate:"Quote Template",quoteTotal:"Quote Total",actions:"Action"}},x={NegotiableQuote:c,historyLog:m,dateUtils:p,QuoteManagement:g},h={default:x},T=({children:o})=>{const[a,r]=i("en_US");return d(()=>{const e=l.on("locale",n=>{r(n)},{eager:!0});return()=>{e==null||e.off()}},[]),t(u,{lang:a,langDefinitions:h,children:o})},C=new s(t(T,{}));export{C as render};
8
10
  //# sourceMappingURL=render.js.map
package/render.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["/@dropins/storefront-quote-management/src/render/Provider.tsx","/@dropins/storefront-quote-management/src/render/render.tsx"],"sourcesContent":["import { FunctionComponent } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport { UIProvider } from '@adobe-commerce/elsie/components';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\n\nimport en_US from '../i18n/en_US.json';\n\n// Langs\nconst langDefinitions = {\n default: en_US,\n};\n\ninterface CartProviderProps {\n children?: any;\n}\n\nexport const Provider: FunctionComponent<CartProviderProps> = ({\n children,\n}) => {\n const [lang, setLang] = useState<Lang>('en_US');\n\n // Events\n useEffect(() => {\n const localeEvent = events.on(\n 'locale',\n (locale: string) => {\n setLang(locale as Lang);\n },\n { eager: true }\n );\n return () => {\n localeEvent?.off();\n };\n }, []);\n\n return (\n <UIProvider lang={lang} langDefinitions={langDefinitions}>\n {children}\n </UIProvider>\n );\n};\n","import { Render } from '@adobe-commerce/elsie/lib';\nimport { Provider } from './Provider';\n\nexport const render = new Render(<Provider />);\n"],"names":["langDefinitions","en_US","Provider","children","lang","setLang","useState","useEffect","localeEvent","events","locale","jsx","UIProvider","render","Render"],"mappings":"iiGASMA,EAAkB,CACtB,QAASC,CACX,EAMaC,EAAiD,CAAC,CAC7D,SAAAC,CACF,IAAM,CACJ,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAe,OAAO,EAG9C,OAAAC,EAAU,IAAM,CACd,MAAMC,EAAcC,EAAO,GACzB,SACCC,GAAmB,CAClBL,EAAQK,CAAc,CACxB,EACA,CAAE,MAAO,EAAA,CAAK,EAEhB,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAGHG,EAACC,EAAA,CAAW,KAAAR,EAAY,gBAAAJ,EACrB,SAAAG,CAAA,CACH,CAEJ,ECtCaU,EAAS,IAAIC,EAAOH,EAACT,IAAS,CAAE"}
1
+ {"version":3,"file":"render.js","sources":["/@dropins/storefront-quote-management/src/render/Provider.tsx","/@dropins/storefront-quote-management/src/render/render.tsx"],"sourcesContent":["import { FunctionComponent } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport { UIProvider } from '@adobe-commerce/elsie/components';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\n\nimport en_US from '../i18n/en_US.json';\n\n// Langs\nconst langDefinitions = {\n default: en_US,\n};\n\ninterface CartProviderProps {\n children?: any;\n}\n\nexport const Provider: FunctionComponent<CartProviderProps> = ({\n children,\n}) => {\n const [lang, setLang] = useState<Lang>('en_US');\n\n // Events\n useEffect(() => {\n const localeEvent = events.on(\n 'locale',\n (locale: string) => {\n setLang(locale as Lang);\n },\n { eager: true }\n );\n return () => {\n localeEvent?.off();\n };\n }, []);\n\n return (\n <UIProvider lang={lang} langDefinitions={langDefinitions}>\n {children}\n </UIProvider>\n );\n};\n","import { Render } from '@adobe-commerce/elsie/lib';\nimport { Provider } from './Provider';\n\nexport const render = new Render(<Provider />);\n"],"names":["langDefinitions","en_US","Provider","children","lang","setLang","useState","useEffect","localeEvent","events","locale","jsx","UIProvider","render","Render"],"mappings":"+nIASMA,EAAkB,CACtB,QAASC,CACX,EAMaC,EAAiD,CAAC,CAC7D,SAAAC,CACF,IAAM,CACJ,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAe,OAAO,EAG9C,OAAAC,EAAU,IAAM,CACd,MAAMC,EAAcC,EAAO,GACzB,SACCC,GAAmB,CAClBL,EAAQK,CAAc,CACxB,EACA,CAAE,MAAO,EAAA,CAAK,EAEhB,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAa,KACf,CACF,EAAG,CAAA,CAAE,EAGHG,EAACC,EAAA,CAAW,KAAAR,EAAY,gBAAAJ,EACrB,SAAAG,CAAA,CACH,CAEJ,ECtCaU,EAAS,IAAIC,EAAOH,EAACT,IAAS,CAAE"}
@@ -0,0 +1,15 @@
1
+ /********************************************************************
2
+ * Copyright 2025 Adobe
3
+ * All Rights Reserved.
4
+ *
5
+ * NOTICE: Adobe permits you to use, modify, and distribute this
6
+ * file in accordance with the terms of the Adobe license agreement
7
+ * accompanying it.
8
+ *******************************************************************/
9
+ /**
10
+ * Gets the user's timezone with fallback to UTC if detection fails
11
+ * @returns The user's timezone string (e.g., 'America/New_York') or 'UTC' as fallback
12
+ */
13
+ export declare function formatExpirationDate(date: string, dateFormatter: Intl.DateTimeFormat): string;
14
+ export declare function getUserTimezone(): string;
15
+ //# sourceMappingURL=dateUtils.d.ts.map
@@ -1,25 +0,0 @@
1
- /*! Copyright 2025 Adobe
2
- All Rights Reserved. */
3
- import{fetchGraphQl as c}from"@dropins/tools/fetch-graphql.js";import{events as f}from"@dropins/tools/event-bus.js";import{N}from"./NegotiableQuoteFragment.js";import{t as d}from"./transform-quote.js";const l=`
4
- mutation REQUEST_NEGOTIABLE_QUOTE_MUTATION(
5
- $cartId: ID!
6
- $quoteName: String!
7
- $comment: NegotiableQuoteCommentInput!
8
- $isDraft: Boolean
9
- ) {
10
- requestNegotiableQuote(
11
- input: {
12
- cart_id: $cartId
13
- quote_name: $quoteName
14
- comment: $comment
15
- is_draft: $isDraft
16
- }
17
- ) {
18
- quote {
19
- ...NegotiableQuoteFragment
20
- }
21
- }
22
- }
23
- ${N}
24
- `,_=async s=>{const{cartId:e,quoteName:t,comment:r,isDraft:a}=s;if(!e)throw new Error("Cart ID is required");if(!t)throw new Error("Quote name is required");if(!r)throw new Error("Comment is required");return c(l,{variables:{cartId:e,quoteName:t,comment:{comment:r},isDraft:a}}).then(n=>{var m,u;const{errors:i}=n;if(i){const q=i.map(E=>E.message).join("; ");throw new Error(`Failed to request negotiable quote: ${q}`)}const o=d((u=(m=n.data)==null?void 0:m.requestNegotiableQuote)==null?void 0:u.quote);if(!o)throw new Error("Failed to transform quote data: Invalid response structure");return f.emit("quote-management/negotiable-quote-requested",{quote:o,input:{cartId:e,quoteName:t,comment:r,isDraft:a}}),o})};export{_ as r};
25
- //# sourceMappingURL=requestNegotiableQuote.js.map