From d23a182650bbbf611367c078b76efd48a6d30ca3 Mon Sep 17 00:00:00 2001 From: Dave Date: Tue, 24 Mar 2026 10:54:42 -0400 Subject: [PATCH 01/16] IO-3624 Refresh shop config list rows and color UX --- .../form-fields-changed-alert.component.jsx | 2 +- .../phone-form-item.component.jsx | 85 +- .../form-list-item-title.utils.js | 30 + .../layout-form-row.component.jsx | 26 +- .../layout-form-row.styles.scss | 23 + .../parts-order-modal.component.jsx | 57 +- .../parts-receive-modal.component.jsx | 54 +- .../parts-email-presets.component.jsx | 66 +- .../parts-locations.component.jsx | 70 +- .../parts-order-comments.component.jsx | 99 +- .../shop-employees-form.component.jsx | 122 +- .../shop-info/shop-info.color.utils.js | 304 ++++ .../shop-info/shop-info.color.utils.test.js | 52 + .../shop-info/shop-info.general.component.jsx | 1396 ++++++++++------- .../shop-info/shop-info.intake.component.jsx | 429 ++--- .../shop-info.laborrates.component.jsx | 47 +- .../shop-info/shop-info.parts-scan.jsx | 280 ++-- ...p-info.responsibilitycenters.component.jsx | 840 ++++++---- .../shop-info.rostatus.component.jsx | 142 +- .../shop-info.scheduling.component.jsx | 337 ++-- .../shop-info.speedprint.component.jsx | 134 +- .../shop-info.task-presets.component.jsx | 314 ++-- 22 files changed, 3100 insertions(+), 1809 deletions(-) create mode 100644 client/src/components/form-list-move-arrows/form-list-item-title.utils.js create mode 100644 client/src/components/shop-info/shop-info.color.utils.js create mode 100644 client/src/components/shop-info/shop-info.color.utils.test.js diff --git a/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx b/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx index 0f265d7db..3254c9f74 100644 --- a/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx +++ b/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx @@ -17,7 +17,7 @@ export default function FormsFieldChanged({ form, skipPrompt }) { const errors = form.getFieldsError().filter((e) => e.errors.length > 0); if (form.isFieldsTouched()) return ( - + ; -} +/** + * Formats a phone number for display purposes. If the input value is a valid phone number, it will be formatted in a + * national format (e.g., (123) 456-7890 for US/CA). If the input is not a valid phone number, it will be returned as-is. + * @param value + * @returns {*} + */ +const formatPhoneDisplayValue = (value) => { + if (!value) return value; + + try { + const parsedPhone = parsePhoneNumber(value, "CA"); + return parsedPhone?.isValid() ? parsedPhone.formatNational() : value; + } catch { + return value; + } +}; + +/** + * Generates a "tel:" URL for a phone number if it's valid. If the input value is a valid phone number, it will return a + * URL in the format "tel:+1234567890". If the input is not a valid phone number, it will attempt to trim whitespace and + * return a "tel:" URL with the raw value, or null if the trimmed value is empty. + * @param value + * @returns {string|null} + */ +const getPhoneActionHref = (value) => { + if (!value) return null; + + try { + const parsedPhone = parsePhoneNumber(value, "CA"); + if (parsedPhone?.isValid()) return `tel:${parsedPhone.number}`; + } catch { + // Fall back to the raw value below. + } + + const trimmedValue = String(value).trim(); + return trimmedValue ? `tel:${trimmedValue}` : null; +}; + +const FormItemPhone = forwardRef(function FormItemPhone( + { formatDisplayOnly = false, showPhoneAction = false, value, onBlur, onFocus, ...props }, + ref +) { + const [isFocused, setIsFocused] = useState(false); + const displayValue = useMemo(() => { + if (!formatDisplayOnly || isFocused) return value; + return formatPhoneDisplayValue(value); + }, [formatDisplayOnly, isFocused, value]); + const phoneActionHref = useMemo(() => (showPhoneAction ? getPhoneActionHref(value) : null), [showPhoneAction, value]); + + const input = ( + { + setIsFocused(true); + onFocus?.(event); + }} + onBlur={(event) => { + setIsFocused(false); + onBlur?.(event); + }} + /> + ); + + if (!showPhoneAction) return input; + + return ( + + {input} + {phoneActionHref ? ( + } > - - history({ - search: `?tab=${search.tab}&subtab=${key}` - }) - } - items={tabItems} - /> +
+ + history({ + search: `?tab=${search.tab}&subtab=${key}` + }) + } + items={tabItems} + /> +
); } diff --git a/client/src/components/shop-info/shop-info.section-navigator.component.jsx b/client/src/components/shop-info/shop-info.section-navigator.component.jsx new file mode 100644 index 000000000..69fd36e85 --- /dev/null +++ b/client/src/components/shop-info/shop-info.section-navigator.component.jsx @@ -0,0 +1,137 @@ +import { Select } from "antd"; +import { useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import "./shop-info.section-navigator.styles.scss"; + +const HIGHLIGHT_CLASS = "shop-info-section-navigator__target--active"; + +export default function ShopInfoSectionNavigator({ tabsRef, activeTabKey }) { + const { t } = useTranslation(); + const targetMapRef = useRef(new Map()); + const highlightedTargetRef = useRef(null); + const [options, setOptions] = useState([]); + const [selectedSection, setSelectedSection] = useState(undefined); + + useEffect(() => { + const tabsContainer = tabsRef.current; + if (!tabsContainer) return undefined; + + let animationFrameId = 0; + + const refreshOptions = () => { + const activePane = tabsContainer.querySelector(".ant-tabs-tabpane-active"); + if (!activePane) { + targetMapRef.current = new Map(); + setOptions([]); + return; + } + + const nextTargetMap = new Map(); + const nextOptions = Array.from(activePane.querySelectorAll(".imex-form-row")) + .filter((card) => { + const titleNode = getOwnCardTitleNode(card); + if (!titleNode?.textContent?.trim()) return false; + + const ancestorCard = card.parentElement?.closest(".imex-form-row"); + return !ancestorCard || !activePane.contains(ancestorCard); + }) + .map((card, index) => { + const label = getOwnCardTitleNode(card)?.textContent?.trim(); + const value = `${activeTabKey}-shop-info-section-${index}`; + + nextTargetMap.set(value, card); + + return { + label, + value + }; + }); + + targetMapRef.current = nextTargetMap; + setOptions((currentOptions) => (areOptionsEqual(currentOptions, nextOptions) ? currentOptions : nextOptions)); + }; + + const scheduleRefresh = () => { + cancelAnimationFrame(animationFrameId); + animationFrameId = requestAnimationFrame(refreshOptions); + }; + + scheduleRefresh(); + + const observer = new MutationObserver(scheduleRefresh); + observer.observe(tabsContainer, { + childList: true, + subtree: true, + characterData: true, + attributes: true, + attributeFilter: ["class"] + }); + + return () => { + cancelAnimationFrame(animationFrameId); + observer.disconnect(); + }; + }, [activeTabKey, tabsRef]); + + useEffect(() => { + clearHighlightedTarget(highlightedTargetRef); + setSelectedSection(undefined); + }, [activeTabKey]); + + const handleSectionChange = (value) => { + setSelectedSection(value); + + clearHighlightedTarget(highlightedTargetRef); + if (!value) return; + + const target = targetMapRef.current.get(value); + if (target) { + target.classList.add(HIGHLIGHT_CLASS); + highlightedTargetRef.current = target; + target.scrollIntoView({ + behavior: "smooth", + block: "start" + }); + } + + window.setTimeout(() => { + setSelectedSection(undefined); + }, 0); + }; + + return ( +
+ - - - - - - - - - - - - - - {bodyshop.pbs_serialnumber && ( + +
+ + {bodyshop.rr_dealerid && ( + + {form.getFieldValue("rr_dealerid")} + + )} + {bodyshop.cdk_dealerid && ( + + {form.getFieldValue("cdk_dealerid")} + + )} + {bodyshop.pbs_serialnumber && ( + + {form.getFieldValue("pbs_serialnumber")} + + )} + + - + - )} - {bodyshop.pbs_serialnumber && ( - + - )} - {bodyshop.pbs_serialnumber && ( - + - )} - {bodyshop.pbs_serialnumber && ( - - )} - {bodyshop.pbs_serialnumber && ( - - + + )} + {bodyshop.pbs_serialnumber && ( + + + + + + + + - - - - - - - { - remove(field.name); - }} - /> - + ))} + + - ))} - - - -
- ); - }} - -
- - )} - +
+ ); + }} + + + + )} + + )} {HasFeatureAccess({ featureName: "export", bodyshop }) && ( <> @@ -919,1255 +923,1275 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { {(fields, { add, remove }) => { return (
- {fields.map((field, index) => ( - -
- 0 ? false : true}> - - - - - - - { - remove(field.name); - }} - /> + {fields.map((field, index) => { + const dmsDefault = form.getFieldValue([ + "md_responsibility_centers", + "dms_defaults", + field.name + ]) || { name: undefined }; + + return ( + + } + onClick={() => { + remove(field.name); + }} + /> + } + > +
+ + + + + + + + + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-ats`} + name={[field.name, "costs", "ATS"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-LAB`} + name={[field.name, "costs", "LAB"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-LAE`} + name={[field.name, "costs", "LAE"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-LAG`} + name={[field.name, "costs", "LAG"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-LAR`} + name={[field.name, "costs", "LAR"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-LAU`} + name={[field.name, "costs", "LAU"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-LA2`} + name={[field.name, "costs", "LA2"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-LA4`} + name={[field.name, "costs", "LA4"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-PAC`} + name={[field.name, "costs", "PAC"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-PAL`} + name={[field.name, "costs", "PAL"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-PAN`} + name={[field.name, "costs", "PAN"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-PAP`} + name={[field.name, "costs", "PAP"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-PAS`} + name={[field.name, "costs", "PAS"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-TOW`} + name={[field.name, "costs", "TOW"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}costs-MASH`} + name={[field.name, "costs", "MASH"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-LAA`} + name={[field.name, "profits", "LAA"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-LAD`} + name={[field.name, "profits", "LAD"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-LAF`} + name={[field.name, "profits", "LAF"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-LAM`} + name={[field.name, "profits", "LAM"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-LAS`} + name={[field.name, "profits", "LAS"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-LA1`} + name={[field.name, "profits", "LA1"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-LA3`} + name={[field.name, "profits", "LA3"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-PAA`} + name={[field.name, "profits", "PAA"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-PAG`} + name={[field.name, "profits", "PAG"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-PAM`} + name={[field.name, "profits", "PAM"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-PAO`} + name={[field.name, "profits", "PAO"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-PAR`} + name={[field.name, "profits", "PAR"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-PASL`} + name={[field.name, "profits", "PASL"]} + > + ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); + } + }) + ]} + key={`${index}profits-MAPA`} + name={[field.name, "profits", "MAPA"]} + > + ({ value: item, label: item }))} + /> + + +
- - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-ats`} - name={[field.name, "costs", "ATS"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAB`} - name={[field.name, "costs", "LAB"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAE`} - name={[field.name, "costs", "LAE"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAG`} - name={[field.name, "costs", "LAG"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAR`} - name={[field.name, "costs", "LAR"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAU`} - name={[field.name, "costs", "LAU"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LA2`} - name={[field.name, "costs", "LA2"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LA4`} - name={[field.name, "costs", "LA4"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAC`} - name={[field.name, "costs", "PAC"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAL`} - name={[field.name, "costs", "PAL"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAN`} - name={[field.name, "costs", "PAN"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAP`} - name={[field.name, "costs", "PAP"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAS`} - name={[field.name, "costs", "PAS"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-TOW`} - name={[field.name, "costs", "TOW"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-MASH`} - name={[field.name, "costs", "MASH"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAA`} - name={[field.name, "profits", "LAA"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAD`} - name={[field.name, "profits", "LAD"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAF`} - name={[field.name, "profits", "LAF"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAM`} - name={[field.name, "profits", "LAM"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAS`} - name={[field.name, "profits", "LAS"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LA1`} - name={[field.name, "profits", "LA1"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LA3`} - name={[field.name, "profits", "LA3"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAA`} - name={[field.name, "profits", "PAA"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAG`} - name={[field.name, "profits", "PAG"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAM`} - name={[field.name, "profits", "PAM"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAO`} - name={[field.name, "profits", "PAO"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAR`} - name={[field.name, "profits", "PAR"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PASL`} - name={[field.name, "profits", "PASL"]} - > - ({ value: item, label: item }))} - /> - - ({ - validator(rule, value) { - if (profitOptions.includes(value)) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-MAPA`} - name={[field.name, "profits", "MAPA"]} - > - ({ value: item, label: item }))} - /> - - -
-
- ))} + + ); + })}
+ } + wrapTitle extra={ - - } - key={`${index}color`} - name={[field.name, "color"]} - > - - + /> + + +
+ } + {...schedulingBucketSurfaceStyles} + > +
+
+ + + + + + + + + + + +
+
+ + + +
+
); diff --git a/client/src/components/shop-info/shop-info.scheduling.styles.scss b/client/src/components/shop-info/shop-info.scheduling.styles.scss new file mode 100644 index 000000000..b04a92e15 --- /dev/null +++ b/client/src/components/shop-info/shop-info.scheduling.styles.scss @@ -0,0 +1,58 @@ +.shop-info-scheduling__bucket-card-body { + display: flex; + gap: 12px; + align-items: stretch; +} + +.shop-info-scheduling__bucket-card-fields { + flex: 1 1 0; + min-width: 0; + display: grid; + grid-template-columns: repeat(3, minmax(92px, 1fr)); + gap: 0 12px; +} + +.shop-info-scheduling__bucket-card-fields .ant-form-item { + margin-bottom: 10px; +} + +.shop-info-scheduling__bucket-card-color { + flex: 0 0 360px; + min-width: 360px; + max-width: 360px; + display: flex; + align-items: stretch; +} + +.shop-info-scheduling__bucket-card-color .ant-form-item { + margin-bottom: 0; + width: 100%; +} + +.shop-info-scheduling__bucket-card-color .ant-form-item-control, +.shop-info-scheduling__bucket-card-color .ant-form-item-control-input, +.shop-info-scheduling__bucket-card-color .ant-form-item-control-input-content { + height: 100%; +} + +@media (max-width: 1199px) { + .shop-info-scheduling__bucket-card-body { + flex-direction: column; + } + + .shop-info-scheduling__bucket-card-fields { + grid-template-columns: repeat(2, minmax(120px, 1fr)); + } + + .shop-info-scheduling__bucket-card-color { + flex-basis: auto; + min-width: 0; + max-width: none; + } +} + +@media (max-width: 575px) { + .shop-info-scheduling__bucket-card-fields { + grid-template-columns: minmax(0, 1fr); + } +} diff --git a/client/src/components/shop-info/shop-info.speedprint.component.jsx b/client/src/components/shop-info/shop-info.speedprint.component.jsx index 4b9f919a8..062bea41e 100644 --- a/client/src/components/shop-info/shop-info.speedprint.component.jsx +++ b/client/src/components/shop-info/shop-info.speedprint.component.jsx @@ -1,17 +1,22 @@ -import { DeleteFilled } from "@ant-design/icons"; +import { DeleteFilled, HolderOutlined } from "@ant-design/icons"; import { Button, Form, Input, Select, Space } from "antd"; import { useTranslation } from "react-i18next"; import { TemplateList } from "../../utils/TemplateConstants"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; -import { getFormListItemTitle } from "../form-list-move-arrows/form-list-item-title.utils"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; +import { + INLINE_TITLE_GROUP_STYLE, + INLINE_TITLE_HANDLE_STYLE, + INLINE_TITLE_INPUT_STYLE, + INLINE_TITLE_LABEL_STYLE, + INLINE_TITLE_ROW_STYLE, + INLINE_TITLE_SEPARATOR_STYLE +} from "../layout-form-row/inline-form-row-title.utils.js"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; export default function ShopInfoSpeedPrint() { const { t } = useTranslation(); - const form = Form.useFormInstance(); const allTemplates = TemplateList("job"); - const speedPrintItems = Form.useWatch(["speedprint"], form) || []; const TemplateListGenerated = InstanceRenderManager({ imex: Object.fromEntries(Object.entries(allTemplates).filter(([, { enhanced_payroll }]) => !enhanced_payroll)), rome: allTemplates @@ -24,18 +29,71 @@ export default function ShopInfoSpeedPrint() { return (
{fields.map((field, index) => { - const speedPrintItem = speedPrintItems[field.name] || {}; - return ( + +
+
{t("bodyshop.fields.speedprint.id")}
+ + + +
+
+
+
{t("bodyshop.fields.speedprint.label")}
+ + + +
+
+ } + wrapTitle extra={ } > @@ -229,8 +233,7 @@ export function ShopEmployeesFormComponent({ bodyshop }) {
{t("employees.labels.active")}
@@ -241,8 +244,7 @@ export function ShopEmployeesFormComponent({ bodyshop }) {
{t("employees.fields.flat_rate")}
@@ -396,147 +398,141 @@ export function ShopEmployeesFormComponent({ bodyshop }) { - - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }} + id="add-employee-rate-button" + > + {t("employees.actions.addrate")} + + ]} + >
- {fields.map((field, index) => { - return ( - - - -
-
{t("employees.fields.cost_center")}
- - ({ + value: c.name, + label: c.name + }))) + ]} + style={{ width: "100%" }} + styles={{ + selector: INLINE_TITLE_INPUT_STYLE + }} + /> + +
-
-
-
{t("employees.fields.rate")}
- - - -
-
- } - wrapTitle - extra={ - - - + } + wrapTitle + extra={ + +
- ); - }} - - + + ); + }} + - -
- -
- + {(data?.employees_by_pk?.employee_vacations ?? []).length === 0 ? ( + + ) : ( +
+
-
+ )} ); diff --git a/client/src/components/shop-employees/shop-employees-list.component.jsx b/client/src/components/shop-employees/shop-employees-list.component.jsx index e6ecda6cf..787554877 100644 --- a/client/src/components/shop-employees/shop-employees-list.component.jsx +++ b/client/src/components/shop-employees/shop-employees-list.component.jsx @@ -4,6 +4,8 @@ import { useState } from "react"; import { useTranslation } from "react-i18next"; import { useLocation, useNavigate } from "react-router-dom"; import { alphaSort } from "../../utils/sorters"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; +import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import ResponsiveTable from "../responsive-table/responsive-table.component"; export default function ShopEmployeesListComponent({ loading, employees }) { @@ -16,13 +18,28 @@ export default function ShopEmployeesListComponent({ loading, employees }) { filteredInfo: { text: "" } }); + const navigateToEmployee = (employeeId) => { + history({ + search: queryString.stringify({ + ...search, + employeeId + }) + }); + }; + + const clearEmployeeSelection = () => { + const { employeeId, ...nextSearch } = search; + void employeeId; + history({ + search: queryString.stringify(nextSearch) + }); + }; + const handleOnRowClick = (record) => { if (record) { - search.employeeId = record.id; - history({ search: queryString.stringify(search) }); + navigateToEmployee(record.id); } else { - delete search.employeeId; - history({ search: queryString.stringify(search) }); + clearEmployeeSelection(); } }; const handleTableChange = (pagination, filters, sorter) => { @@ -89,44 +106,39 @@ export default function ShopEmployeesListComponent({ loading, employees }) { } ]; return ( -
- { - return ( - - ); - }} - loading={loading} - pagination={{ placement: "top" }} - columns={columns} - mobileColumnKeys={["employee_number", "employee_name", "active"]} - rowKey="id" - dataSource={employees} - rowSelection={{ - onSelect: (props) => { - search.employeeId = props.id; - history({ search: queryString.stringify(search) }); - }, - type: "radio", - selectedRowKeys: [search.employeeId] - }} - onChange={handleTableChange} - onRow={(record) => { - return { - onClick: () => { - handleOnRowClick(record); - } - }; - }} - /> -
+ navigateToEmployee("new")}> + {t("employees.actions.new")} + + ]} + > + {employees.length === 0 ? ( + + ) : ( + navigateToEmployee(props.id), + type: "radio", + selectedRowKeys: [search.employeeId] + }} + onChange={handleTableChange} + onRow={(record) => { + return { + onClick: () => { + handleOnRowClick(record); + } + }; + }} + /> + )} + ); } diff --git a/client/src/components/shop-info/shop-info.component.jsx b/client/src/components/shop-info/shop-info.component.jsx index c74427724..ee7e40bd9 100644 --- a/client/src/components/shop-info/shop-info.component.jsx +++ b/client/src/components/shop-info/shop-info.component.jsx @@ -163,8 +163,14 @@ export function ShopInfoComponent({ bodyshop, form, saveLoading }) { } extra={ - } > diff --git a/client/src/components/shop-info/shop-info.general.component.jsx b/client/src/components/shop-info/shop-info.general.component.jsx index 00006c1f2..55ce20351 100644 --- a/client/src/components/shop-info/shop-info.general.component.jsx +++ b/client/src/components/shop-info/shop-info.general.component.jsx @@ -8,6 +8,7 @@ import CurrencyInput from "../form-items-formatted/currency-form-item.component" import FormItemEmail from "../form-items-formatted/email-form-item.component"; import PhoneFormItem, { PhoneItemFormatterValidation } from "../form-items-formatted/phone-form-item.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -15,7 +16,8 @@ import { INLINE_TITLE_INPUT_STYLE, INLINE_TITLE_LABEL_STYLE, INLINE_TITLE_ROW_STYLE, - INLINE_TITLE_SEPARATOR_STYLE + INLINE_TITLE_SEPARATOR_STYLE, + INLINE_TITLE_SWITCH_GROUP_STYLE } from "../layout-form-row/inline-form-row-title.utils.js"; const timeZonesList = Intl.supportedValuesOf("timeZone"); @@ -28,6 +30,13 @@ export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoGeneral); export function ShopInfoGeneral({ form }) { const { t } = useTranslation(); + const buildSectionActionButton = (key, label, onClick, id) => ( + + ); + const renderListOrEmpty = (fields, actionLabel, renderItems) => + fields.length === 0 ? : renderItems(); return (
@@ -449,715 +458,22 @@ export function ShopInfoGeneral({ form }) { - - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + >
- {fields.map((field, index) => { - return ( - - - -
-
{t("bodyshop.fields.messaginglabel_short")}
- - - -
-
-
-
{t("bodyshop.fields.messagingtext_short")}
- - - -
-
- } - extra={ - - -
-
- ); - }} -
-
- - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("bodyshop.fields.noteslabel_short")}
- - - -
-
-
-
{t("bodyshop.fields.notestext_short")}
- - - -
-
- } - extra={ - - -
-
- ); - }} -
-
- - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("bodyshop.fields.partslocation")}
- - - -
-
- } - extra={ - - - -
- ); - }} - - - - {/*Start Insurance Provider Row */} - {t("bodyshop.labels.insurancecos")}} - id="insurancecos" - > - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("bodyshop.fields.md_ins_co.name")}
- ({ - validator: async (_, value) => { - const normalizedValue = (value ?? "").toString().trim().toLowerCase(); - if (!normalizedValue) return Promise.resolve(); - - const list = getFieldValue(["md_ins_cos"]) || []; - const normalizedNames = list - .map((c) => (c?.name ?? "").toString().trim().toLowerCase()) - .filter(Boolean); - - const count = normalizedNames.filter((n) => n === normalizedValue).length; - - if (count > 1) { - throw new Error(t("bodyshop.errors.duplicate_insurance_company")); - } - - return Promise.resolve(); - } - }) - ]} - > - - -
-
-
-
{t("bodyshop.fields.md_ins_co.private")}
- - - -
-
- } - wrapTitle - extra={ - - -
-
- ); - }} -
-
- {/*End Insurance Provider Row */} - - - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("jobs.fields.est_ct_fn_short")}
- - - -
-
-
-
{t("jobs.fields.est_ct_ln_short")}
- - - -
-
-
-
{t("jobs.fields.est_co_nm_short")}
- - - -
-
- } - wrapTitle - extra={ - - - -
- ); - }} - -
- - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("jobs.fields.ins_ct_fn_short")}
- - - -
-
-
-
{t("jobs.fields.ins_ct_ln_short")}
- - - -
-
- } - wrapTitle - extra={ - - -
-
- ); - }} -
-
- null}> - - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { + {renderListOrEmpty(fields, t("bodyshop.actions.add_messaging_preset"), () => + fields.map((field, index) => { return ( -
+
{t("bodyshop.fields.messaginglabel_short")}
+ + + +
+
+ } + extra={ + +
+
+ ); + }} + + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_note_preset"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("bodyshop.fields.noteslabel_short")}
+ + + +
+
+ } + extra={ + +
+
+ ); + }} + + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.addpartslocation"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("bodyshop.fields.partslocation")}
+ + + +
+
+ } + extra={ + +
+ + ); + }} + + + {/*Start Insurance Provider Row */} + + {(fields, { add, remove, move }) => { + return ( + {t("bodyshop.labels.insurancecos")}} + id="insurancecos" + actions={[ + buildSectionActionButton( + "add-insurance-company", + t("bodyshop.actions.add_insurance_company"), + () => { + add(); + }, + "insurancecos-add-button" + ) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_insurance_company"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("bodyshop.fields.md_ins_co.name")}
+ ({ + validator: async (_, value) => { + const normalizedValue = (value ?? "").toString().trim().toLowerCase(); + if (!normalizedValue) return Promise.resolve(); + + const list = getFieldValue(["md_ins_cos"]) || []; + const normalizedNames = list + .map((c) => (c?.name ?? "").toString().trim().toLowerCase()) + .filter(Boolean); + + const count = normalizedNames.filter((n) => n === normalizedValue).length; + + if (count > 1) { + throw new Error(t("bodyshop.errors.duplicate_insurance_company")); + } + + return Promise.resolve(); + } + }) + ]} + > + + +
+
+
+
{t("bodyshop.fields.md_ins_co.private")}
+ + + +
+
+ } + wrapTitle + extra={ + +
+
+ ); + }} +
+ {/*End Insurance Provider Row */} + + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_estimator"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("jobs.fields.est_ct_fn_short")}
+ + + +
+
+
+
{t("jobs.fields.est_ct_ln_short")}
+ + + +
+
+
+
{t("jobs.fields.est_co_nm_short")}
+ + + +
+
+ } + wrapTitle + extra={ + +
+
+ ); + }} + + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_adjuster"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("jobs.fields.ins_ct_fn_short")}
+ + + +
+
+
+
{t("jobs.fields.ins_ct_ln_short")}
+ + + +
+
+ } + wrapTitle + extra={ + +
+
+ ); + }} +
+ null}> + + {(fields, { add, remove, move }) => { + return ( + { + add(); + } + ) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_courtesy_car_rate_preset"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("general.labels.label")}
+ + + +
+
+ } + wrapTitle + extra={ + +
+
+ ); + }} +
+ + + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_jobline_preset"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("general.labels.label")}
+ + + +
+
+
+
{t("joblines.fields.line_desc")}
+ + + +
+
+ } + wrapTitle + extra={ + +
+
+ ); + }} +
+ + {(fields, { add, remove, move }) => { + return ( + { + add(); + } + ) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_parts_order_comment"), () => + fields.map((field, index) => { + return ( + + + +
{t("general.labels.label")}
- -
- ); - }} - -
- - - - - {(fields, { add, remove, move }) => { - return ( + }) + )} +
+
+ ); + }} +
+ + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + >
- {fields.map((field, index) => { - return ( - - - -
-
{t("general.labels.label")}
- - - + {renderListOrEmpty(fields, t("bodyshop.actions.add_to_email_preset"), () => + fields.map((field, index) => { + return ( + + + +
+
{t("general.labels.label")}
+ + + +
-
-
-
{t("joblines.fields.line_desc")}
- - - -
-
- } - wrapTitle - extra={ - - -
+ style={{ marginBottom: 0 }} + > + + + + + ); + }) + )}
- ); - }} -
- - - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("general.labels.label")}
- - - -
-
-
-
{t("parts_orders.fields.comments")}
- - - -
-
- } - wrapTitle - extra={ - - -
-
- ); - }} -
-
- - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("general.labels.label")}
- - - -
-
-
-
{t("bodyshop.labels.md_to_emails_emails")}
- - - -
-
- } - wrapTitle - extra={ - - -
-
- ); - }} -
-
+ + ); + }} +
); } diff --git a/client/src/components/shop-info/shop-info.intake.component.jsx b/client/src/components/shop-info/shop-info.intake.component.jsx index 4a938f873..182b4c878 100644 --- a/client/src/components/shop-info/shop-info.intake.component.jsx +++ b/client/src/components/shop-info/shop-info.intake.component.jsx @@ -5,6 +5,7 @@ import styled from "styled-components"; import { TemplateList } from "../../utils/TemplateConstants"; import ConfigFormTypes from "../config-form-components/config-form-types"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -12,7 +13,8 @@ import { INLINE_TITLE_INPUT_STYLE, INLINE_TITLE_LABEL_STYLE, INLINE_TITLE_ROW_STYLE, - INLINE_TITLE_SEPARATOR_STYLE + INLINE_TITLE_SEPARATOR_STYLE, + INLINE_TITLE_SWITCH_GROUP_STYLE } from "../layout-form-row/inline-form-row-title.utils.js"; const SelectorDiv = styled.div` @@ -87,320 +89,318 @@ export default function ShopInfoIntakeChecklistComponent({ form }) { - - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }} + > + {t("bodyshop.actions.add_intake_checklist_item")} + + ]} + >
- {fields.map((field, index) => { - return ( - - - -
-
{t("jobs.fields.intake.name")}
- - - -
-
-
-
{t("jobs.fields.intake.required")}
- - - -
-
- } - wrapTitle - extra={ - -
+
+ ); + }} +
+ + {(fields, { add, remove, move }) => { + return ( + { + add(); + }} + > + {t("bodyshop.actions.add_delivery_checklist_item")} + + ]} + > +
+ {fields.length === 0 ? ( + + ) : ( + fields.map((field, index) => { + return ( + + + +
+
{t("jobs.fields.intake.name")}
- + - - ); - }} - - - - ); - })} - - - -
- ); - }} - -
- - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - return ( - - - -
-
{t("jobs.fields.intake.name")}
- - - +
+
+
+
{t("jobs.fields.intake.required")}
+ + + +
-
-
-
{t("jobs.fields.intake.required")}
- - - -
-
- } - wrapTitle - extra={ - - -
+ + {() => { + if (form.getFieldValue(["deliverchecklist", "form", index, "type"]) !== "slider") + return null; + return ( + <> + + + + + + + + ); + }} + + + + ); + }) + )}
- ); - }} -
-
+ + ); + }} +
); } diff --git a/client/src/components/shop-info/shop-info.laborrates.component.jsx b/client/src/components/shop-info/shop-info.laborrates.component.jsx index bb61db15b..3e1b16705 100644 --- a/client/src/components/shop-info/shop-info.laborrates.component.jsx +++ b/client/src/components/shop-info/shop-info.laborrates.component.jsx @@ -3,6 +3,7 @@ import { Button, Form, Input, Space } from "antd"; import { useTranslation } from "react-i18next"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -25,361 +26,364 @@ export default function ShopInfoLaborRates() {
- - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }} + > + {t("bodyshop.actions.newlaborrate")} + + ]} + >
- {fields.map((field, index) => { - return ( - - - -
-
{t("jobs.fields.labor_rate_desc")}
- - - + {fields.length === 0 ? ( + + ) : ( + fields.map((field, index) => { + return ( + + + +
+
{t("jobs.fields.labor_rate_desc")}
+ + + +
-
- } - wrapTitle - extra={ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + // + // + // + // + // + // + } + + + + + + +
+ + ); + }) + )}
- ); - }} - -
+ + ); + }} + ); } diff --git a/client/src/components/shop-info/shop-info.parts-scan.jsx b/client/src/components/shop-info/shop-info.parts-scan.jsx index 3f7e94906..64a038479 100644 --- a/client/src/components/shop-info/shop-info.parts-scan.jsx +++ b/client/src/components/shop-info/shop-info.parts-scan.jsx @@ -3,6 +3,7 @@ import { Button, Col, Form, Input, Row, Select, Space, Switch } from "antd"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -10,7 +11,8 @@ import { INLINE_TITLE_INPUT_STYLE, INLINE_TITLE_LABEL_STYLE, INLINE_TITLE_ROW_STYLE, - INLINE_TITLE_SEPARATOR_STYLE + INLINE_TITLE_SEPARATOR_STYLE, + INLINE_TITLE_SWITCH_GROUP_STYLE } from "../layout-form-row/inline-form-row-title.utils.js"; import i18n from "i18next"; @@ -76,229 +78,221 @@ export default function ShopInfoPartsScan({ form }) { return (
- - - {(fields, { add, remove, move }) => ( + + {(fields, { add, remove, move }) => ( + + add({ + field: "line_desc", + operation: "contains", + mark_critical: true, + caseInsensitive: true + }) + } + > + {t("bodyshop.actions.addpartsrule")} + + ]} + >
- {fields.map((field, index) => { - const selectedField = watchedFields?.[index]?.field || "line_desc"; - const fieldType = getFieldType(selectedField); + {fields.length === 0 ? ( + + ) : ( + fields.map((field, index) => { + const selectedField = watchedFields?.[index]?.field || "line_desc"; + const fieldType = getFieldType(selectedField); - return ( - - - -
-
{t("bodyshop.fields.md_parts_scan.field")}
+ return ( + + + +
+
{t("bodyshop.fields.md_parts_scan.field")}
+ + + + + )} + + {/* Value */} + {fieldType && ( + + + {fieldType === "predefined" ? ( + + )} + + + )} + + {/* Update Field */} + + - )} - - {/* Value */} - {fieldType && ( - - - {fieldType === "predefined" ? ( - - )} - - - )} - - {/* Update Field */} - - - - - - - - - ); - })} - - - - + + + + ); + }) + )}
- )} - -
+ + )} +
); } diff --git a/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx b/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx index 48550c24c..965c406e3 100644 --- a/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx +++ b/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx @@ -12,6 +12,7 @@ import DataLabel from "../data-label/data-label.component"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import { getFormListItemTitle } from "../form-list-move-arrows/form-list-item-title.utils"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -42,6 +43,13 @@ export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoResponsibili export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { const { t } = useTranslation(); const dmsPayers = Form.useWatch(["cdk_configuration", "payers"], form) || []; + const buildSectionActionButton = (key, label, onClick) => ( + + ); + const renderListOrEmpty = (fields, actionLabel, renderItems) => + fields.length === 0 ? : renderItems(); const hasDMSKey = bodyshopHasDmsKey(bodyshop); @@ -513,42 +521,116 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { {!bodyshop.rr_dealerid && ( <> - - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + >
- {fields.map((field, index) => { - const dmsPayer = dmsPayers[field.name] || {}; + {renderListOrEmpty(fields, t("jobs.actions.addpayer"), () => + fields.map((field, index) => { + const dmsPayer = dmsPayers[field.name] || {}; - return ( + return ( + + + - -
- ); - }} -
-
+
+ ); + }} + )}
@@ -659,142 +671,266 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { )} {HasFeatureAccess({ featureName: "export", bodyshop }) && ( <> - - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + >
- {fields.map((field, index) => { - const hasProfitCenterBodyFields = - (hasDMSKey && !bodyshop.rr_dealerid) || bodyshop.cdk_dealerid || bodyshop.rr_dealerid; - - return ( - - - -
-
- {t("bodyshop.fields.responsibilitycenter")} -
- - - -
-
-
-
- {t("bodyshop.fields.responsibilitycenter_accountname")} -
- - - -
-
-
-
- {t("bodyshop.fields.responsibilitycenter_accountdesc")} -
- - - -
- {!hasDMSKey && ( - <> -
-
-
- {t("bodyshop.fields.responsibilitycenter_accountitem")} -
- - - + {renderListOrEmpty(fields, t("bodyshop.actions.add_cost_center"), () => + fields.map((field, index) => { + return ( + + + +
+
+ {t("bodyshop.fields.responsibilitycenter")}
- - )} -
- } - wrapTitle - extra={ - -
+
+
+
+ {t("bodyshop.fields.responsibilitycenter_accountdesc")} +
+ + + +
+
+ } + wrapTitle + extra={ + +
+ + ); + }} + + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }) + ]} + > +
+ {renderListOrEmpty(fields, t("bodyshop.actions.add_profit_center"), () => + fields.map((field, index) => { + return ( + + + +
+
+ {t("bodyshop.fields.responsibilitycenter")} +
+ + + +
+
+
+
+ {t("bodyshop.fields.responsibilitycenter_accountdesc")} +
+ + + +
+
+ } + wrapTitle + extra={ + + -
-
- ); - }} -
- - - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - const hasProfitCenterBodyFields = - (hasDMSKey && !bodyshop.rr_dealerid) || bodyshop.cdk_dealerid || bodyshop.rr_dealerid; - - return ( - - - -
-
- {t("bodyshop.fields.responsibilitycenter")} -
- - - -
-
-
+ , + -
- {t("bodyshop.fields.responsibilitycenter_accountdesc")} -
- - - -
- {!hasDMSKey && ( - <> -
-
-
- {t("bodyshop.fields.responsibilitycenter_accountitem")} -
- - - -
- - )} - {bodyshop.rr_dealerid && ( - <> -
-
-
- {t("bodyshop.fields.responsibilitycenters.item_type")} -
- - - - )} - {bodyshop.cdk_dealerid && ( - - - - )} - {bodyshop.rr_dealerid && [ - - - , - - + + ]} + + + ); + }) + )}
- ); - }} - - + + ); + }} + {hasDMSKey && ( - - - {(fields, { add, remove }) => { - return ( + + {(fields, { add, remove }) => { + return ( + { + add(); + } + ) + ]} + >
- {fields.map((field, index) => { - const dmsDefault = form.getFieldValue([ - "md_responsibility_centers", - "dms_defaults", - field.name - ]) || { name: undefined }; + {renderListOrEmpty(fields, t("bodyshop.actions.add_dms_allocation"), () => + fields.map((field, index) => { + const dmsDefault = form.getFieldValue([ + "md_responsibility_centers", + "dms_defaults", + field.name + ]) || { name: undefined }; - return ( - - } - onClick={() => { - remove(field.name); - }} - /> - } - > -
- - - - - - - - - - ({ - validator(rule, value) { - if (costOptions.includes(value)) { - return Promise.resolve(); + return ( + + } + onClick={() => { + remove(field.name); + }} + /> + } + > +
+ + + + + + + + + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-ats`} - name={[field.name, "costs", "ATS"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAA`} - name={[field.name, "costs", "LAA"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAB`} - name={[field.name, "costs", "LAB"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAD`} - name={[field.name, "costs", "LAD"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAE`} - name={[field.name, "costs", "LAE"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAF`} - name={[field.name, "costs", "LAF"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAG`} - name={[field.name, "costs", "LAG"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAM`} - name={[field.name, "costs", "LAM"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAR`} - name={[field.name, "costs", "LAR"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAS`} - name={[field.name, "costs", "LAS"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LAU`} - name={[field.name, "costs", "LAU"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LA1`} - name={[field.name, "costs", "LA1"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LA2`} - name={[field.name, "costs", "LA2"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LA3`} - name={[field.name, "costs", "LA3"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-LA4`} - name={[field.name, "costs", "LA4"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAA`} - name={[field.name, "costs", "PAA"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAC`} - name={[field.name, "costs", "PAC"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAG`} - name={[field.name, "costs", "PAG"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAL`} - name={[field.name, "costs", "PAL"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAM`} - name={[field.name, "costs", "PAM"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAN`} - name={[field.name, "costs", "PAN"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAO`} - name={[field.name, "costs", "PAO"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAP`} - name={[field.name, "costs", "PAP"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAR`} - name={[field.name, "costs", "PAR"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PAS`} - name={[field.name, "costs", "PAS"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-PASL`} - name={[field.name, "costs", "PASL"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-TOW`} - name={[field.name, "costs", "TOW"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-MAPA`} - name={[field.name, "costs", "MAPA"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (costOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}costs-MASH`} - name={[field.name, "costs", "MASH"]} - > - ({ value: item, label: item }))} + /> + + + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-ATS`} - name={[field.name, "profits", "ATS"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAA`} - name={[field.name, "profits", "LAA"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAB`} - name={[field.name, "profits", "LAB"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAD`} - name={[field.name, "profits", "LAD"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAE`} - name={[field.name, "profits", "LAE"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAF`} - name={[field.name, "profits", "LAF"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAG`} - name={[field.name, "profits", "LAG"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAM`} - name={[field.name, "profits", "LAM"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAR`} - name={[field.name, "profits", "LAR"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAS`} - name={[field.name, "profits", "LAS"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LAU`} - name={[field.name, "profits", "LAU"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LA1`} - name={[field.name, "profits", "LA1"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LA2`} - name={[field.name, "profits", "LA2"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LA3`} - name={[field.name, "profits", "LA3"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-LA4`} - name={[field.name, "profits", "LA4"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAA`} - name={[field.name, "profits", "PAA"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAC`} - name={[field.name, "profits", "PAC"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAG`} - name={[field.name, "profits", "PAG"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAL`} - name={[field.name, "profits", "PAL"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAM`} - name={[field.name, "profits", "PAM"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAN`} - name={[field.name, "profits", "PAN"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAO`} - name={[field.name, "profits", "PAO"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAP`} - name={[field.name, "profits", "PAP"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAR`} - name={[field.name, "profits", "PAR"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PAS`} - name={[field.name, "profits", "PAS"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-PASL`} - name={[field.name, "profits", "PASL"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-TOW`} - name={[field.name, "profits", "TOW"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-MAPA`} - name={[field.name, "profits", "MAPA"]} - > - ({ value: item, label: item }))} + /> + + ({ + validator(rule, value) { + if (profitOptions.includes(value)) { + return Promise.resolve(); + } + return Promise.reject(t("bodyshop.validation.centermustexist")); } - return Promise.reject(t("bodyshop.validation.centermustexist")); - } - }) - ]} - key={`${index}profits-MASH`} - name={[field.name, "profits", "MASH"]} - > - ({ value: item, label: item }))} + /> + + +
+
+
+ ); + }) + )}
- ); - }} - -
+ + ); + }} + )} @@ -3601,121 +3525,114 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
)} - - - {(fields, { add, remove }) => { - return ( + + {(fields, { add, remove }) => { + return ( + { + add(); + }) + ]} + >
- {fields.map((field, index) => { - return ( - - - -
-
- {t("bodyshop.fields.responsibilitycenters.sales_tax_codes.description")} + {renderListOrEmpty(fields, t("bodyshop.actions.newsalestaxcode"), () => + fields.map((field, index) => { + return ( + + + +
+
+ {t("bodyshop.fields.responsibilitycenters.sales_tax_codes.description")} +
+ + +
- - - -
-
-
-
- {t("bodyshop.fields.responsibilitycenters.sales_tax_codes.code")} +
+
+
+ {t("bodyshop.fields.responsibilitycenters.sales_tax_codes.code")} +
+ + +
- - -
-
- } - wrapTitle - extra={ - - + + + + + + + + + + + + ); + }) + )}
- ); - }} - - + + ); + }} + )} diff --git a/client/src/components/shop-info/shop-info.rostatus.component.jsx b/client/src/components/shop-info/shop-info.rostatus.component.jsx index 273d04bae..05fe27305 100644 --- a/client/src/components/shop-info/shop-info.rostatus.component.jsx +++ b/client/src/components/shop-info/shop-info.rostatus.component.jsx @@ -7,6 +7,7 @@ import { ChromePicker } from "react-color"; import { useTranslation } from "react-i18next"; import styled from "styled-components"; import { getFormListItemTitle } from "../form-list-move-arrows/form-list-item-title.utils"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { DEFAULT_TRANSLUCENT_CARD_COLOR, getTintedCardSurfaceStyles } from "./shop-info.color.utils"; @@ -405,106 +406,116 @@ export function ShopInfoROStatusComponent({ bodyshop, form }) { {Production_List_Status_Colors.treatment === "on" && ( - - - {(fields, { add, remove }) => { - return ( + + {(fields, { add, remove }) => { + return ( + { + add({ + color: { ...DEFAULT_TRANSLUCENT_CARD_COLOR } + }); + }} + > + {t("bodyshop.actions.add_production_status_color")} + + ]} + >
- - {fields.map((field, index) => { - const productionColor = productionColors[field.name] || {}; - const productionColorSurfaceStyles = getTintedCardSurfaceStyles(productionColor.color); - const selectedProductionColorStatuses = productionColors - .map((item) => item?.status) - .filter(Boolean); - const productionColorStatusOptions = [ - ...new Set([productionColor.status, ...availableProductionStatuses]) - ] - .filter(Boolean) - .filter( - (status) => - status === productionColor.status || !selectedProductionColorStatuses.includes(status) - ); + {fields.length === 0 ? ( + + ) : ( + + {fields.map((field, index) => { + const productionColor = productionColors[field.name] || {}; + const productionColorSurfaceStyles = getTintedCardSurfaceStyles(productionColor.color); + const selectedProductionColorStatuses = productionColors + .map((item) => item?.status) + .filter(Boolean); + const productionColorStatusOptions = [ + ...new Set([productionColor.status, ...availableProductionStatuses]) + ] + .filter(Boolean) + .filter( + (status) => + status === productionColor.status || !selectedProductionColorStatuses.includes(status) + ); - return ( - - ({ + value: item, + label: item + }))} + /> + + } + extra={ + - + } + {...productionColorSurfaceStyles} + style={{ width: 260, marginBottom: 0 }} + > +
+ + + +
+
+ ); + })} +
+ )}
- ); - }} -
-
+ + ); + }} + )} ); diff --git a/client/src/components/shop-info/shop-info.scheduling.component.jsx b/client/src/components/shop-info/shop-info.scheduling.component.jsx index 12d998d01..8ee367304 100644 --- a/client/src/components/shop-info/shop-info.scheduling.component.jsx +++ b/client/src/components/shop-info/shop-info.scheduling.component.jsx @@ -7,6 +7,7 @@ import { selectBodyshop } from "../../redux/user/user.selectors"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import ColorpickerFormItemComponent from "../form-items-formatted/colorpicker-form-item.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { ColorPicker } from "./shop-info.rostatus.component"; import { @@ -227,195 +228,74 @@ export function ShopInfoSchedulingComponent({ form, bodyshop }) { ))} - - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add({ + color: { + ...DEFAULT_TRANSLUCENT_PICKER_COLOR, + rgb: { ...DEFAULT_TRANSLUCENT_PICKER_COLOR.rgb } + } + }); + }} + > + {t("bodyshop.actions.addapptcolor")} + + ]} + >
- {fields.map((field, index) => { - const appointmentColor = - appointmentColors[field.name] || form.getFieldValue(["appt_colors", field.name]) || {}; - const appointmentColorSurfaceStyles = getTintedCardSurfaceStyles(appointmentColor.color); - - return ( - - - - - -
- } - extra={ - - - -
- ); - }} - - - {HasFeatureAccess({ featureName: "smartscheduling", bodyshop }) && ( - - - {(fields, { add, remove, move }) => { - return ( -
- {fields.map((field, index) => { - const schedulingBucket = - schedulingBuckets[field.name] || form.getFieldValue(["ssbuckets", field.name]) || {}; - const schedulingBucketSurfaceStyles = getTintedCardSurfaceStyles(schedulingBucket.color); + {fields.length === 0 ? ( + + ) : ( + fields.map((field, index) => { + const appointmentColor = + appointmentColors[field.name] || form.getFieldValue(["appt_colors", field.name]) || {}; + const appointmentColorSurfaceStyles = getTintedCardSurfaceStyles(appointmentColor.color); return ( -
-
{t("bodyshop.fields.ssbuckets.id")}
- - - -
-
+ -
- {t("bodyshop.fields.ssbuckets.label")} -
- - - -
+ +
} extra={ - + }) + )} +
+
+ ); + }} + + {HasFeatureAccess({ featureName: "smartscheduling", bodyshop }) && ( + + {(fields, { add, remove, move }) => { + return ( + { + add({ + color: { ...DEFAULT_TRANSLUCENT_CARD_COLOR } + }); + }} + > + {t("bodyshop.actions.addbucket")} + + ]} + > +
+ {fields.length === 0 ? ( + + ) : ( + fields.map((field, index) => { + const schedulingBucket = + schedulingBuckets[field.name] || form.getFieldValue(["ssbuckets", field.name]) || {}; + const schedulingBucketSurfaceStyles = getTintedCardSurfaceStyles(schedulingBucket.color); + + return ( + + +
+
{t("bodyshop.fields.ssbuckets.id")}
+ + + +
+
+
+ {t("bodyshop.fields.ssbuckets.label")} +
+ + + +
+
+ } + extra={ + +
- ); - }} -
-
+ + ); + }} + )}
); diff --git a/client/src/components/shop-info/shop-info.speedprint.component.jsx b/client/src/components/shop-info/shop-info.speedprint.component.jsx index 062bea41e..33b5e55fe 100644 --- a/client/src/components/shop-info/shop-info.speedprint.component.jsx +++ b/client/src/components/shop-info/shop-info.speedprint.component.jsx @@ -3,6 +3,7 @@ import { Button, Form, Input, Select, Space } from "antd"; import { useTranslation } from "react-i18next"; import { TemplateList } from "../../utils/TemplateConstants"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -23,133 +24,131 @@ export default function ShopInfoSpeedPrint() { }); return ( - - - {(fields, { add, remove, move }) => { - return ( + + {(fields, { add, remove, move }) => { + return ( + { + add(); + }} + > + {t("bodyshop.actions.addspeedprint")} + + ]} + >
- {fields.map((field, index) => { - return ( - - - -
-
{t("bodyshop.fields.speedprint.id")}
- - - + {fields.length === 0 ? ( + + ) : ( + fields.map((field, index) => { + return ( + + + +
+
{t("bodyshop.fields.speedprint.id")}
+ + + +
+
+
+
{t("bodyshop.fields.speedprint.label")}
+ + + +
-
-
-
{t("bodyshop.fields.speedprint.label")}
- - - -
-
- } - wrapTitle - extra={ - -
- ); - }} - -
+ + ); + }} + ); } diff --git a/client/src/components/shop-info/shop-info.task-presets.component.jsx b/client/src/components/shop-info/shop-info.task-presets.component.jsx index dfc12adfb..d3d3cb66a 100644 --- a/client/src/components/shop-info/shop-info.task-presets.component.jsx +++ b/client/src/components/shop-info/shop-info.task-presets.component.jsx @@ -3,6 +3,7 @@ import { Button, Checkbox, Col, Form, Input, InputNumber, Row, Select, Space, Sw import { useTranslation } from "react-i18next"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import { getFormListItemTitle } from "../form-list-move-arrows/form-list-item-title.utils"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { connect } from "react-redux"; @@ -78,208 +79,216 @@ export function ShopInfoTaskPresets({ bodyshop }) {
- - { - const allocationErrors = getTaskPresetAllocationErrors(presets, t); + { + const allocationErrors = getTaskPresetAllocationErrors(presets, t); - if (allocationErrors.length > 0) { - throw new Error(allocationErrors.join(" ")); - } + if (allocationErrors.length > 0) { + throw new Error(allocationErrors.join(" ")); } } - ]} - > - {(fields, { add, remove, move }, { errors }) => { - return ( + } + ]} + > + {(fields, { add, remove, move }, { errors }) => { + return ( + { + add(); + }} + > + {t("bodyshop.actions.add_task_preset")} + + ]} + >
- {fields.map((field, index) => { - const taskPreset = taskPresets[field.name] || {}; + {fields.length === 0 ? ( + + ) : ( + fields.map((field, index) => { + const taskPreset = taskPresets[field.name] || {}; - return ( - - - - + + {payoutMethod === "commission" ? ( + + ) : ( + + )} + + + ))} + + ); + }} + +
+
+ + ); + }) + )}
- ); - }} -
-
+
+ ); + }} +
)} diff --git a/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx b/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx index b7239dbde..da20b74c5 100644 --- a/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx +++ b/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx @@ -42,9 +42,11 @@ vi.mock("react-i18next", () => ({ "employee_teams.options.commission": "Commission", "employee_teams.options.commission_percentage": "Commission", "employee_teams.actions.newmember": "New Team Member", + "employee_teams.actions.save_team": "Save Employee Team", "employee_teams.errors.minimum_one_member": "Add at least one team member.", "employee_teams.errors.duplicate_member": "Team members must be unique.", "employee_teams.errors.allocation_total_exact": "Allocation must total exactly 100%.", + "general.labels.click_to_begin": `Click ${values.action ?? ""} to begin`, "general.actions.save": "Save", "employees.successes.save": "Saved" }; @@ -101,11 +103,12 @@ vi.mock("../form-items-formatted/currency-form-item.component", () => ({ })); vi.mock("../layout-form-row/layout-form-row.component", () => ({ - default: ({ title, extra, children }) => ( + default: ({ title, extra, actions, children }) => (
{title} {extra} {children} + {actions}
) })); @@ -211,7 +214,7 @@ describe("ShopEmployeeTeamsFormComponent", () => { rate: 27.5 }); - fireEvent.click(screen.getByRole("button", { name: "Save" })); + fireEvent.click(screen.getByRole("button", { name: "Save Employee Team" })); await waitFor(() => { expect(insertEmployeeTeamMock).toHaveBeenCalledWith({ diff --git a/client/src/components/shop-teams/shop-employee-teams.list.jsx b/client/src/components/shop-teams/shop-employee-teams.list.jsx index 4c0ac837b..8cd351201 100644 --- a/client/src/components/shop-teams/shop-employee-teams.list.jsx +++ b/client/src/components/shop-teams/shop-employee-teams.list.jsx @@ -2,6 +2,8 @@ import { Button } from "antd"; import queryString from "query-string"; import { useTranslation } from "react-i18next"; import { useLocation, useNavigate } from "react-router-dom"; +import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; +import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import ResponsiveTable from "../responsive-table/responsive-table.component"; export default function ShopEmployeeTeamsListComponent({ loading, employee_teams }) { @@ -9,13 +11,28 @@ export default function ShopEmployeeTeamsListComponent({ loading, employee_teams const history = useNavigate(); const search = queryString.parse(useLocation().search); + const navigateToTeam = (employeeTeamId) => { + history({ + search: queryString.stringify({ + ...search, + employeeTeamId + }) + }); + }; + + const clearTeamSelection = () => { + const { employeeTeamId, ...nextSearch } = search; + void employeeTeamId; + history({ + search: queryString.stringify(nextSearch) + }); + }; + const handleOnRowClick = (record) => { if (record) { - search.employeeTeamId = record.id; - history({ search: queryString.stringify(search) }); + navigateToTeam(record.id); } else { - delete search.employeeTeamId; - history({ search: queryString.stringify(search) }); + clearTeamSelection(); } }; const columns = [ @@ -27,43 +44,38 @@ export default function ShopEmployeeTeamsListComponent({ loading, employee_teams ]; return ( -
- { - return ( - - ); - }} - loading={loading} - pagination={{ placement: "top" }} - columns={columns} - mobileColumnKeys={["name"]} - rowKey="id" - dataSource={employee_teams} - rowSelection={{ - onSelect: (props) => { - search.employeeTeamId = props.id; - history({ search: queryString.stringify(search) }); - }, - type: "radio", - selectedRowKeys: [search.employeeTeamId] - }} - onRow={(record) => { - return { - onClick: () => { - handleOnRowClick(record); - } - }; - }} - /> -
+ navigateToTeam("new")}> + {t("employee_teams.actions.new")} + + ]} + > + {employee_teams.length === 0 ? ( + + ) : ( + navigateToTeam(props.id), + type: "radio", + selectedRowKeys: [search.employeeTeamId] + }} + onRow={(record) => { + return { + onClick: () => { + handleOnRowClick(record); + } + }; + }} + /> + )} + ); } diff --git a/client/src/components/shop-users/shop-users.component.jsx b/client/src/components/shop-users/shop-users.component.jsx index d3fd16b45..d4e972b11 100644 --- a/client/src/components/shop-users/shop-users.component.jsx +++ b/client/src/components/shop-users/shop-users.component.jsx @@ -6,6 +6,7 @@ import { createStructuredSelector } from "reselect"; import { QUERY_SHOP_ASSOCIATIONS } from "../../graphql/user.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; import AlertComponent from "../alert/alert.component"; +import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component"; import ResponsiveTable from "../responsive-table/responsive-table.component"; import ShopUsersAuthEdit from "../shop-users-auth-edit/shop-users-auth-edit.component"; @@ -66,7 +67,7 @@ export function ShopInfoUsersComponent({ bodyshop }) { return ; } return ( -
+ -
+
); } diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index d2584bea0..428894541 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -292,7 +292,23 @@ }, "bodyshop": { "actions": { + "add_adjuster": "Add Adjuster", + "add_control_number": "Add Control Number", + "add_cost_center": "Add Cost Center", + "add_courtesy_car_rate_preset": "Add Courtesy Car Contract Rate Preset", + "add_delivery_checklist_item": "Add Delivery Checklist Item", + "add_dms_allocation": "Add DMS Allocation", + "add_estimator": "Add Estimator", + "add_insurance_company": "Add Insurance Company", + "add_intake_checklist_item": "Add Intake Checklist Item", + "add_jobline_preset": "Add Jobline Preset", + "add_messaging_preset": "Add Messaging Preset", + "add_note_preset": "Add Note Preset", + "add_parts_order_comment": "Add Parts Order Comment", + "add_production_status_color": "Add Production Status Color", + "add_profit_center": "Add Profit Center", "add_task_preset": "Add Task Preset", + "add_to_email_preset": "Add To Email Preset", "addapptcolor": "Add Appointment Color", "addbucket": "Add Definition", "addpartslocation": "Add Parts Location", @@ -301,6 +317,7 @@ "addtemplate": "Add Template", "newlaborrate": "New Labor Rate", "newsalestaxcode": "New Sales Tax Code", + "save_shop_information": "Save Shop Information", "newstatus": "Add Status", "testrender": "Test Render" }, @@ -1206,7 +1223,8 @@ "employee_teams": { "actions": { "new": "New Team", - "newmember": "New Team Member" + "newmember": "New Team Member", + "save_team": "Save Employee Team" }, "errors": { "allocation_total_exact": "Team allocation must total exactly 100%.", @@ -1236,9 +1254,11 @@ }, "employees": { "actions": { + "addrate": "Add Rate", "addvacation": "Add Vacation", "new": "New Employee", "newrate": "New Rate", + "save_employee": "Save Employee", "select": "Select Employee" }, "errors": { @@ -1403,6 +1423,7 @@ "beta": "BETA", "cancel": "Are you sure you want to cancel? Your changes will not be saved.", "changelog": "Change Log", + "click_to_begin": "Click {{action}} to begin", "clear": "Clear", "confirmpassword": "Confirm Password", "created_at": "Created At", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 0fd4e9622..4a12af3c8 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -292,7 +292,23 @@ }, "bodyshop": { "actions": { + "add_adjuster": "", + "add_control_number": "", + "add_cost_center": "", + "add_courtesy_car_rate_preset": "", + "add_delivery_checklist_item": "", + "add_dms_allocation": "", + "add_estimator": "", + "add_insurance_company": "", + "add_intake_checklist_item": "", + "add_jobline_preset": "", + "add_messaging_preset": "", + "add_note_preset": "", + "add_parts_order_comment": "", + "add_production_status_color": "", + "add_profit_center": "", "add_task_preset": "", + "add_to_email_preset": "", "addapptcolor": "", "addbucket": "", "addpartslocation": "", @@ -301,6 +317,7 @@ "addtemplate": "", "newlaborrate": "", "newsalestaxcode": "", + "save_shop_information": "", "newstatus": "", "testrender": "" }, @@ -1206,7 +1223,8 @@ "employee_teams": { "actions": { "new": "", - "newmember": "" + "newmember": "", + "save_team": "" }, "errors": { "allocation_total_exact": "", @@ -1236,9 +1254,11 @@ }, "employees": { "actions": { + "addrate": "", "addvacation": "", "new": "Nuevo empleado", "newrate": "", + "save_employee": "", "select": "" }, "errors": { @@ -1403,6 +1423,7 @@ "beta": "", "cancel": "", "changelog": "", + "click_to_begin": "", "clear": "", "confirmpassword": "", "created_at": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 11b4fdc7f..b0391e190 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -292,7 +292,23 @@ }, "bodyshop": { "actions": { + "add_adjuster": "", + "add_control_number": "", + "add_cost_center": "", + "add_courtesy_car_rate_preset": "", + "add_delivery_checklist_item": "", + "add_dms_allocation": "", + "add_estimator": "", + "add_insurance_company": "", + "add_intake_checklist_item": "", + "add_jobline_preset": "", + "add_messaging_preset": "", + "add_note_preset": "", + "add_parts_order_comment": "", + "add_production_status_color": "", + "add_profit_center": "", "add_task_preset": "", + "add_to_email_preset": "", "addapptcolor": "", "addbucket": "", "addpartslocation": "", @@ -301,6 +317,7 @@ "addtemplate": "", "newlaborrate": "", "newsalestaxcode": "", + "save_shop_information": "", "newstatus": "", "testrender": "" }, @@ -1206,7 +1223,8 @@ "employee_teams": { "actions": { "new": "", - "newmember": "" + "newmember": "", + "save_team": "" }, "errors": { "allocation_total_exact": "", @@ -1236,9 +1254,11 @@ }, "employees": { "actions": { + "addrate": "", "addvacation": "", "new": "Nouvel employé", "newrate": "", + "save_employee": "", "select": "" }, "errors": { @@ -1403,6 +1423,7 @@ "beta": "", "cancel": "", "changelog": "", + "click_to_begin": "", "clear": "", "confirmpassword": "", "created_at": "", From e49500887d63b213d74236f0ee0e3befc06755cd Mon Sep 17 00:00:00 2001 From: Dave Date: Wed, 25 Mar 2026 15:25:59 -0400 Subject: [PATCH 12/16] IO-3624 Finalize admin config UX and validation polish --- .../src/components/alert/alert.component.jsx | 4 +- .../form-fields-changed-alert.component.jsx | 220 ++++- .../form-fields-changed.styles.scss | 43 + .../url-form-item.component.jsx | 34 + .../config-list-actions.utils.jsx | 17 + .../inline-validated-form-row.component.jsx | 47 + .../layout-form-row.styles.scss | 22 + .../shop-employees-form.component.jsx | 86 +- .../shop-employees-list.component.jsx | 14 +- .../shop-employees.container.jsx | 41 +- .../shop-info/shop-info.component.jsx | 3 +- .../shop-info/shop-info.container.jsx | 21 +- .../shop-info/shop-info.general.component.jsx | 758 +++++++++------- .../shop-info/shop-info.intake.component.jsx | 61 +- .../shop-info.laborrates.component.jsx | 52 +- .../shop-info/shop-info.parts-scan.jsx | 9 +- ...p-info.responsibilitycenters.component.jsx | 837 ++++++++++-------- ....responsibilitycenters.taxes.component.jsx | 44 +- .../shop-info/shop-info.roguard.component.jsx | 2 +- .../shop-info.rostatus.component.jsx | 244 ++++- .../shop-info.scheduling.component.jsx | 192 ++-- .../shop-info.section-navigator.component.jsx | 94 +- .../shop-info.section-navigator.styles.scss | 26 + .../shop-info.speedprint.component.jsx | 13 +- .../shop-info.task-presets.component.jsx | 2 +- .../shop-employee-teams.form.component.jsx | 125 ++- ...hop-employee-teams.form.component.test.jsx | 4 + .../shop-teams/shop-employee-teams.list.jsx | 14 +- .../shop-teams/shop-teams.container.jsx | 32 +- .../hooks/useConfirmDirtyFormNavigation.jsx | 11 + client/src/translations/en_us/common.json | 37 + client/src/translations/es/common.json | 37 + client/src/translations/fr/common.json | 37 + 33 files changed, 2223 insertions(+), 960 deletions(-) create mode 100644 client/src/components/form-items-formatted/url-form-item.component.jsx create mode 100644 client/src/components/layout-form-row/config-list-actions.utils.jsx create mode 100644 client/src/components/layout-form-row/inline-validated-form-row.component.jsx create mode 100644 client/src/hooks/useConfirmDirtyFormNavigation.jsx diff --git a/client/src/components/alert/alert.component.jsx b/client/src/components/alert/alert.component.jsx index 439822f68..f57dcb5fd 100644 --- a/client/src/components/alert/alert.component.jsx +++ b/client/src/components/alert/alert.component.jsx @@ -1,5 +1,5 @@ import { Alert } from "antd"; -export default function AlertComponent(props) { - return ; +export default function AlertComponent({ title, message, ...props }) { + return ; } diff --git a/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx b/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx index 3254c9f74..69c5a1831 100644 --- a/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx +++ b/client/src/components/form-fields-changed-alert/form-fields-changed-alert.component.jsx @@ -4,17 +4,200 @@ import AlertComponent from "../alert/alert.component"; import "./form-fields-changed.styles.scss"; import Prompt from "../../utils/prompt"; -export default function FormsFieldChanged({ form, skipPrompt }) { +export default function FormsFieldChanged({ form, skipPrompt, onErrorNavigate, onReset, onDirtyChange }) { const { t } = useTranslation(); + const normalizeNamePath = (namePath) => (Array.isArray(namePath) ? namePath.filter((part) => part !== undefined) : [namePath]); + + const getFieldIdCandidates = (namePath) => { + const normalizedNamePath = normalizeNamePath(namePath).map((part) => String(part)); + const underscoreId = normalizedNamePath.join("_"); + const dashId = normalizedNamePath.join("-"); + const dotName = normalizedNamePath.join("."); + + return [underscoreId, dashId, dotName].filter(Boolean); + }; + + const clearFormMeta = () => { + const fieldMeta = form.getFieldsError().map(({ name }) => ({ + name, + touched: false, + validating: false, + errors: [], + warnings: [] + })); + + if (fieldMeta.length > 0) { + form.setFields(fieldMeta); + } + + onDirtyChange?.(false); + }; + const handleReset = () => { - form.resetFields(); + if (onReset) { + onReset(); + } else { + form.resetFields(); + } + + window.requestAnimationFrame(() => { + clearFormMeta(); + }); + }; + + const getFieldDomNode = (namePath) => { + const fieldInstance = form.getFieldInstance?.(namePath); + const fieldIdCandidates = getFieldIdCandidates(namePath); + const domCandidates = [ + fieldInstance?.nativeElement, + fieldInstance?.input, + fieldInstance?.resizableTextArea?.textArea, + fieldInstance + ]; + + fieldIdCandidates.forEach((fieldId) => { + const escapedFieldId = CSS.escape(fieldId); + const directNode = document.getElementById(fieldId) || document.querySelector(`#${escapedFieldId}`); + const labelNode = document.querySelector(`label[for="${escapedFieldId}"]`); + const namedNode = document.querySelector(`[name="${escapedFieldId}"]`); + const formItemNode = + directNode?.closest?.(".ant-form-item") || + labelNode?.closest?.(".ant-form-item") || + namedNode?.closest?.(".ant-form-item"); + + domCandidates.push(directNode); + domCandidates.push(namedNode); + domCandidates.push(formItemNode); + domCandidates.push(formItemNode?.querySelector?.("input, textarea, select, .ant-select-selector")); + }); + + return domCandidates.find((candidate) => candidate instanceof HTMLElement) ?? null; + }; + + const waitForAnimationFrames = (frameCount = 1) => + new Promise((resolve) => { + let remainingFrames = frameCount; + const nextFrame = () => { + if (remainingFrames <= 0) { + resolve(); + return; + } + remainingFrames -= 1; + window.requestAnimationFrame(nextFrame); + }; + window.requestAnimationFrame(nextFrame); + }); + + const getFieldOwningTabMeta = (namePath) => { + const fieldDomNode = getFieldDomNode(namePath); + const owningTabPane = fieldDomNode?.closest?.(".ant-tabs-tabpane"); + const paneId = owningTabPane?.getAttribute?.("id") || null; + const owningTabButton = paneId + ? document.querySelector(`[role="tab"][aria-controls="${paneId.replace(/"/g, '\\"')}"]`) + : null; + const tabLabel = owningTabButton?.textContent?.trim() || null; + + return { + owningTabPane, + owningTabButton, + tabLabel + }; + }; + + const openFieldOwningTab = async (namePath) => { + const { owningTabPane, owningTabButton } = getFieldOwningTabMeta(namePath); + if (!owningTabPane || owningTabPane.classList.contains("ant-tabs-tabpane-active")) return false; + + if (!(owningTabButton instanceof HTMLElement)) return false; + + owningTabButton.click(); + + for (let index = 0; index < 24; index += 1) { + await waitForAnimationFrames(); + if (owningTabPane.classList.contains("ant-tabs-tabpane-active")) return true; + } + + return owningTabPane.classList.contains("ant-tabs-tabpane-active"); + }; + + const scrollToErrorField = (namePath) => { + const normalizedNamePath = normalizeNamePath(namePath); + if (!normalizedNamePath.length) return; + + try { + form.scrollToField(normalizedNamePath, { + behavior: "smooth", + block: "center", + focus: true + }); + window.requestAnimationFrame(() => { + const fallbackNode = getFieldDomNode(normalizedNamePath); + fallbackNode?.focus?.(); + }); + return; + } catch { + const fallbackTarget = document.getElementById(normalizedNamePath[0]?.toString?.() ?? ""); + fallbackTarget?.scrollIntoView({ + behavior: "smooth", + block: "center" + }); + } + }; + + const handleErrorClick = async (namePath) => { + const normalizedNamePath = normalizeNamePath(namePath); + if (!normalizedNamePath.length) return; + + const switchedTab = await openFieldOwningTab(normalizedNamePath); + if (!switchedTab) { + const navigationDelayMs = onErrorNavigate?.(normalizedNamePath) ?? 0; + if (navigationDelayMs > 0) { + window.setTimeout(() => { + window.requestAnimationFrame(() => { + scrollToErrorField(normalizedNamePath); + }); + }, navigationDelayMs); + return; + } + } + + await waitForAnimationFrames(switchedTab ? 2 : 1); + scrollToErrorField(normalizedNamePath); }; //if (!form.isFieldsTouched()) return <>; return ( {() => { - const errors = form.getFieldsError().filter((e) => e.errors.length > 0); + const errors = form + .getFieldsError() + .filter((fieldError) => fieldError.errors.length > 0) + .flatMap((fieldError) => { + const tabMeta = getFieldOwningTabMeta(fieldError.name); + + return fieldError.errors.map((errorMessage, errorIndex) => ({ + key: `${(fieldError.name || []).join(".")}-${errorIndex}-${errorMessage}`, + message: errorMessage, + namePath: fieldError.name, + tabLabel: tabMeta.tabLabel + })); + }); + + const groupedErrors = errors.reduce((groups, error) => { + const groupKey = error.tabLabel || "__ungrouped__"; + if (!groups[groupKey]) { + groups[groupKey] = { + key: groupKey, + label: error.tabLabel, + errors: [] + }; + } + groups[groupKey].errors.push(error); + return groups; + }, {}); + const errorGroups = Object.values(groupedErrors); + const hasTabbedErrorGroups = errorGroups.some((group) => Boolean(group.label)); + if (form.isFieldsTouched()) return ( @@ -39,10 +222,35 @@ export default function FormsFieldChanged({ form, skipPrompt }) { {errors.length > 0 && ( -
    {errors.map((e, idx) => e.errors.map((e2, idx2) =>
  • {e2}
  • ))}
+
+ {errorGroups.map((group) => ( +
+ {hasTabbedErrorGroups && group.label ? ( +
{group.label}
+ ) : null} +
    + {group.errors.map((error) => ( +
  • + {Array.isArray(error.namePath) && error.namePath.length > 0 ? ( + + ) : ( + error.message + )} +
  • + ))} +
+
+ ))}
} showIcon diff --git a/client/src/components/form-fields-changed-alert/form-fields-changed.styles.scss b/client/src/components/form-fields-changed-alert/form-fields-changed.styles.scss index 155407907..cb3e3940f 100644 --- a/client/src/components/form-fields-changed-alert/form-fields-changed.styles.scss +++ b/client/src/components/form-fields-changed-alert/form-fields-changed.styles.scss @@ -4,4 +4,47 @@ min-height: unset !important; } } + + &__error-list { + margin: 0; + padding-left: 18px; + } + + &__error-groups { + display: grid; + gap: 10px; + } + + &__error-group { + display: grid; + gap: 4px; + } + + &__error-group-title { + font-weight: 600; + } + + &__error-link { + display: inline; + padding: 0; + border: 0; + background: none; + color: inherit; + font: inherit; + line-height: inherit; + text-align: left; + cursor: pointer; + text-decoration: underline; + text-underline-offset: 2px; + + &:hover { + color: color-mix(in srgb, var(--ant-color-error) 82%, var(--ant-color-text)); + } + + &:focus-visible { + outline: 2px solid color-mix(in srgb, var(--ant-color-error) 32%, transparent); + outline-offset: 2px; + border-radius: 4px; + } + } } diff --git a/client/src/components/form-items-formatted/url-form-item.component.jsx b/client/src/components/form-items-formatted/url-form-item.component.jsx new file mode 100644 index 000000000..c038442fc --- /dev/null +++ b/client/src/components/form-items-formatted/url-form-item.component.jsx @@ -0,0 +1,34 @@ +import { LinkOutlined } from "@ant-design/icons"; +import { Button, Input, Space } from "antd"; +import { forwardRef, useMemo } from "react"; + +const HAS_URL_PROTOCOL_REGEX = /^[a-zA-Z][a-zA-Z\d+.-]*:/; +const LOCALHOST_OR_IP_REGEX = /^(localhost|127(?:\.\d{1,3}){3}|\d{1,3}(?:\.\d{1,3}){3})(:\d+)?(\/.*)?$/i; + +const getUrlActionHref = (value) => { + const trimmedValue = String(value ?? "").trim(); + if (!trimmedValue) return null; + + if (HAS_URL_PROTOCOL_REGEX.test(trimmedValue)) return trimmedValue; + if (trimmedValue.startsWith("//")) return `https:${trimmedValue}`; + if (LOCALHOST_OR_IP_REGEX.test(trimmedValue)) return `http://${trimmedValue}`; + + return `https://${trimmedValue}`; +}; + +const FormItemUrl = forwardRef(function FormItemUrl({ value, defaultValue, ...props }, ref) { + const urlActionHref = useMemo(() => getUrlActionHref(value ?? defaultValue), [defaultValue, value]); + + return ( + + + {urlActionHref ? ( + +); + +export const renderConfigListOrEmpty = ({ fields, actionLabel, renderItems }) => + fields.length === 0 ? : renderItems(); + +export const buildSectionActionButton = (key, label, onClick, id) => + buildConfigListActionButton({ key, label, onClick, id }); + +export const renderListOrEmpty = (fields, actionLabel, renderItems) => + renderConfigListOrEmpty({ fields, actionLabel, renderItems }); diff --git a/client/src/components/layout-form-row/inline-validated-form-row.component.jsx b/client/src/components/layout-form-row/inline-validated-form-row.component.jsx new file mode 100644 index 000000000..70910856b --- /dev/null +++ b/client/src/components/layout-form-row/inline-validated-form-row.component.jsx @@ -0,0 +1,47 @@ +import { Form } from "antd"; +import LayoutFormRow from "./layout-form-row.component"; + +export default function InlineValidatedFormRow({ actions, errorNames = [], extraErrors = [], form, ...layoutFormRowProps }) { + const normalizedErrorNames = Array.isArray(errorNames) ? errorNames : [errorNames]; + const normalizedExtraErrors = Array.isArray(extraErrors) ? extraErrors.filter(Boolean) : [extraErrors].filter(Boolean); + + return ( + + {() => { + const fieldErrors = normalizedErrorNames.flatMap((name) => form?.getFieldError?.(name) || []); + const errors = [...new Set([...fieldErrors, ...normalizedExtraErrors])]; + const resolvedClassName = [ + layoutFormRowProps.className, + errors.length > 0 ? "imex-form-row--error" : null + ] + .filter(Boolean) + .join(" "); + + const normalizedActions = Array.isArray(actions) ? actions.filter(Boolean) : [actions].filter(Boolean); + const resolvedActions = + errors.length > 0 + ? [ +
0 ? 8 : 0, + width: "100%", + textAlign: "left" + }} + > + + {normalizedActions.length > 0 ?
{normalizedActions}
: null} +
+ ] + : normalizedActions.length > 0 + ? normalizedActions + : undefined; + + return ; + }} +
+ ); +} diff --git a/client/src/components/layout-form-row/layout-form-row.styles.scss b/client/src/components/layout-form-row/layout-form-row.styles.scss index 3e8674362..2c95c7973 100644 --- a/client/src/components/layout-form-row/layout-form-row.styles.scss +++ b/client/src/components/layout-form-row/layout-form-row.styles.scss @@ -50,11 +50,23 @@ html[data-theme="dark"] { border-color: var(--imex-form-surface-border); } + &.imex-form-row--error.ant-card { + border-color: var(--ant-color-error); + box-shadow: 0 0 0 1px color-mix(in srgb, var(--ant-color-error) 24%, transparent); + } + .ant-card-head { background: var(--imex-form-surface-head); border-bottom-color: var(--imex-form-surface-border); } + &.imex-form-row--error { + .ant-card-head, + .ant-card-actions { + border-color: color-mix(in srgb, var(--ant-color-error) 34%, var(--imex-form-surface-border)); + } + } + &.imex-form-row--compact { .ant-card-head { min-height: 40px; @@ -189,3 +201,13 @@ html[data-theme="dark"] { font-size: var(--ant-font-size); line-height: 1.5; } + +.imex-inline-form-row-errors { + color: var(--ant-color-error); + + .ant-form-item-explain, + .ant-form-item-explain-error, + .ant-form-item-additional { + color: var(--ant-color-error); + } +} diff --git a/client/src/components/shop-employees/shop-employees-form.component.jsx b/client/src/components/shop-employees/shop-employees-form.component.jsx index cd677e6d1..a47e577b3 100644 --- a/client/src/components/shop-employees/shop-employees-form.component.jsx +++ b/client/src/components/shop-employees/shop-employees-form.component.jsx @@ -3,9 +3,8 @@ import { useApolloClient, useMutation, useQuery } from "@apollo/client/react"; import { useTreatmentsWithConfig } from "@splitsoftware/splitio-react"; import { Button, Card, Col, Form, Input, InputNumber, Row, Select, Space, Switch } from "antd"; import ResponsiveTable from "../responsive-table/responsive-table.component"; -import { useForm } from "antd/es/form/Form"; import queryString from "query-string"; -import { useEffect } from "react"; +import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { useLocation, useNavigate } from "react-router-dom"; @@ -26,8 +25,10 @@ import { DateFormatter } from "../../utils/DateFormatter"; import dayjs from "../../utils/day"; import AlertComponent from "../alert/alert.component"; import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; +import FormsFieldChanged from "../form-fields-changed-alert/form-fields-changed-alert.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; +import InlineValidatedFormRow from "../layout-form-row/inline-validated-form-row.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -49,9 +50,10 @@ const mapDispatchToProps = () => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); -export function ShopEmployeesFormComponent({ bodyshop }) { +export function ShopEmployeesFormComponent({ bodyshop, form, onDirtyChange, isDirty }) { const { t } = useTranslation(); - const [form] = useForm(); + const [internalIsDirty, setInternalIsDirty] = useState(false); + const resolvedIsDirty = typeof isDirty === "boolean" ? isDirty : internalIsDirty; const employeeNumber = Form.useWatch("employee_number", form); const firstName = Form.useWatch("first_name", form); const lastName = Form.useWatch("last_name", form); @@ -66,17 +68,19 @@ export function ShopEmployeesFormComponent({ bodyshop }) { const history = useNavigate(); const search = queryString.parse(useLocation().search); const [deleteVacation] = useMutation(DELETE_VACATION); - const { error, data } = useQuery(QUERY_EMPLOYEE_BY_ID, { + const { error, data, refetch } = useQuery(QUERY_EMPLOYEE_BY_ID, { variables: { id: search.employeeId }, skip: !search.employeeId || search.employeeId === "new", fetchPolicy: "network-only", nextFetchPolicy: "network-only" }); const notification = useNotification(); + const isNewEmployee = search.employeeId === "new"; + const currentEmployeeData = data?.employees_by_pk?.id === search.employeeId ? data.employees_by_pk : null; const employeeTitleName = [firstName, lastName].filter(Boolean).join(" ").trim(); const employeeCardTitle = [employeeNumber, employeeTitleName].filter(Boolean).join(" - ") || - (search.employeeId === "new" ? t("employees.actions.new") : t("bodyshop.labels.employees")); + (isNewEmployee ? t("employees.actions.new") : t("bodyshop.labels.employees")); const { treatments: { Enhanced_Payroll } @@ -86,13 +90,49 @@ export function ShopEmployeesFormComponent({ bodyshop }) { splitKey: bodyshop.imexshopid }); + const updateDirtyState = useCallback( + (nextDirtyState) => { + if (typeof isDirty !== "boolean") { + setInternalIsDirty(nextDirtyState); + } + + onDirtyChange?.(nextDirtyState); + }, + [isDirty, onDirtyChange] + ); + const client = useApolloClient(); - useEffect(() => { - if (data && data.employees_by_pk) form.setFieldsValue(data.employees_by_pk); - else { - form.resetFields(); + const clearEmployeeFormMeta = useCallback(() => { + const fieldMeta = form.getFieldsError().map(({ name }) => ({ + name, + touched: false, + validating: false, + errors: [], + warnings: [] + })); + + if (fieldMeta.length > 0) { + form.setFields(fieldMeta); } - }, [form, data, search.employeeId]); + + updateDirtyState(false); + }, [form, updateDirtyState]); + + const resetEmployeeFormToCurrentData = useCallback(() => { + form.resetFields(); + + if (currentEmployeeData) { + form.setFieldsValue(currentEmployeeData); + } + + window.requestAnimationFrame(() => { + clearEmployeeFormMeta(); + }); + }, [clearEmployeeFormMeta, currentEmployeeData, form]); + + useEffect(() => { + resetEmployeeFormToCurrentData(); + }, [resetEmployeeFormToCurrentData, search.employeeId]); const [updateEmployee] = useMutation(UPDATE_EMPLOYEE); const [insertEmployees] = useMutation(INSERT_EMPLOYEES); @@ -112,6 +152,8 @@ export function ShopEmployeesFormComponent({ bodyshop }) { } }) .then(() => { + updateDirtyState(false); + void refetch(); notification.success({ title: t("employees.successes.save") }); @@ -131,6 +173,7 @@ export function ShopEmployeesFormComponent({ bodyshop }) { variables: { employees: [{ ...values, shopid: bodyshop.id }] }, refetchQueries: ["QUERY_EMPLOYEES"] }).then((r) => { + updateDirtyState(false); search.employeeId = r.data.insert_employees.returning[0].id; history({ search: queryString.stringify(search) }); notification.success({ @@ -199,12 +242,21 @@ export function ShopEmployeesFormComponent({ bodyshop }) { form.submit()} style={{ minWidth: 170 }}> + } > -
+ { + updateDirtyState(form.isFieldsTouched()); + }} + > + { return ( - - + @@ -495,7 +549,7 @@ export function ShopEmployeesFormComponent({ bodyshop }) { > - + ); }) diff --git a/client/src/components/shop-employees/shop-employees-list.component.jsx b/client/src/components/shop-employees/shop-employees-list.component.jsx index 787554877..45e434b5a 100644 --- a/client/src/components/shop-employees/shop-employees-list.component.jsx +++ b/client/src/components/shop-employees/shop-employees-list.component.jsx @@ -8,7 +8,12 @@ import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.com import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import ResponsiveTable from "../responsive-table/responsive-table.component"; -export default function ShopEmployeesListComponent({ loading, employees }) { +export default function ShopEmployeesListComponent({ + loading, + employees, + onRequestEmployeeChange, + selectedEmployeeId +}) { const { t } = useTranslation(); const history = useNavigate(); const search = queryString.parse(useLocation().search); @@ -19,6 +24,11 @@ export default function ShopEmployeesListComponent({ loading, employees }) { }); const navigateToEmployee = (employeeId) => { + if (onRequestEmployeeChange) { + onRequestEmployeeChange(employeeId); + return; + } + history({ search: queryString.stringify({ ...search, @@ -127,7 +137,7 @@ export default function ShopEmployeesListComponent({ loading, employees }) { rowSelection={{ onSelect: (props) => navigateToEmployee(props.id), type: "radio", - selectedRowKeys: [search.employeeId] + selectedRowKeys: [selectedEmployeeId || search.employeeId] }} onChange={handleTableChange} onRow={(record) => { diff --git a/client/src/components/shop-employees/shop-employees.container.jsx b/client/src/components/shop-employees/shop-employees.container.jsx index 59ab1a611..3582ee40c 100644 --- a/client/src/components/shop-employees/shop-employees.container.jsx +++ b/client/src/components/shop-employees/shop-employees.container.jsx @@ -1,10 +1,12 @@ -import { Drawer, Grid } from "antd"; +import { Drawer, Form, Grid } from "antd"; import { useQuery } from "@apollo/client/react"; import queryString from "query-string"; import { connect } from "react-redux"; +import { useState } from "react"; import { useLocation, useNavigate } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import { QUERY_EMPLOYEES } from "../../graphql/employees.queries"; +import useConfirmDirtyFormNavigation from "../../hooks/useConfirmDirtyFormNavigation.jsx"; import AlertComponent from "../alert/alert.component"; import ShopEmployeesFormComponent from "./shop-employees-form.component"; import ShopEmployeesListComponent from "./shop-employees-list.component"; @@ -14,6 +16,8 @@ import "./shop-employees.styles.scss"; const mapStateToProps = createStructuredSelector({}); function ShopEmployeesContainer() { + const [form] = Form.useForm(); + const [isEmployeeFormDirty, setIsEmployeeFormDirty] = useState(false); const location = useLocation(); const navigate = useNavigate(); const search = queryString.parse(location.search); @@ -41,10 +45,28 @@ function ShopEmployeesContainer() { else if (screens.sm) drawerPercentage = bpoints.sm; else if (screens.xs) drawerPercentage = bpoints.xs; - const handleDrawerClose = () => { - delete search.employeeId; + const hasDirtyEmployeeForm = Boolean(search.employeeId) && (isEmployeeFormDirty || form.isFieldsTouched()); + const confirmCloseDirtyEmployee = useConfirmDirtyFormNavigation(hasDirtyEmployeeForm); + + const navigateToEmployee = (employeeId) => { + if (employeeId === search.employeeId) return; + if (!confirmCloseDirtyEmployee()) return; + + const nextSearch = { ...search, employeeId }; + setIsEmployeeFormDirty(false); navigate({ - search: queryString.stringify(search) + search: queryString.stringify(nextSearch) + }); + }; + + const handleDrawerClose = () => { + if (!confirmCloseDirtyEmployee()) return; + + const nextSearch = { ...search }; + delete nextSearch.employeeId; + setIsEmployeeFormDirty(false); + navigate({ + search: queryString.stringify(nextSearch) }); }; @@ -54,7 +76,12 @@ function ShopEmployeesContainer() {
- +
- {hasSelectedEmployee ? : null} + {hasSelectedEmployee ? ( + + ) : null}
); diff --git a/client/src/components/shop-info/shop-info.component.jsx b/client/src/components/shop-info/shop-info.component.jsx index ee7e40bd9..901a14afe 100644 --- a/client/src/components/shop-info/shop-info.component.jsx +++ b/client/src/components/shop-info/shop-info.component.jsx @@ -35,7 +35,7 @@ const mapDispatchToProps = () => ({ }); export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoComponent); -export function ShopInfoComponent({ bodyshop, form, saveLoading }) { +export function ShopInfoComponent({ bodyshop, form, saveLoading, isDirty }) { const { treatments: { CriticalPartsScanning, Enhanced_Payroll } } = useTreatmentsWithConfig({ @@ -165,6 +165,7 @@ export function ShopInfoComponent({ bodyshop, form, saveLoading }) { extra={ - ); - const renderListOrEmpty = (fields, actionLabel, renderItems) => - fields.length === 0 ? : renderItems(); + const insuranceCompanies = Form.useWatch(["md_ins_cos"], form) || []; + const duplicateInsuranceCompanyIndexes = getDuplicateIndexSetByNormalizedName(insuranceCompanies, "name"); return (
@@ -99,7 +96,7 @@ export function ShopInfoGeneral({ form }) { - + - + - + - + - + - + - + null}> - + +
+ {t("bodyshop.labels.scoreboardsetup")} +
+
+
+
+
{t("bodyshop.fields.scoreboard_setup.ignore_blocked_days")}
+ + + +
+
+
+ } + wrapTitle + > - + - - - - +
- {[ + <> - , - - - , - - - , - - - , - - - , - - - , - ({ - validator(rule, value) { - if (!value && !getFieldValue(["md_hour_split", "paint"])) { - return Promise.resolve(); - } - if (value + getFieldValue(["md_hour_split", "paint"]) === 1) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.larsplit")); - } - }) - ]} - > - - , - ({ - validator(rule, value) { - if (!value && !getFieldValue(["md_hour_split", "paint"])) { - return Promise.resolve(); - } - if (value + getFieldValue(["md_hour_split", "prep"]) === 1) { - return Promise.resolve(); - } - return Promise.reject(t("bodyshop.validation.larsplit")); - } - }) - ]} - > - - , - - - , - - - , - - - , - - - , - - - , - - - , - - - , - - - , - - - , - - - , - - - , - - - ]} - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ {t("bodyshop.labels.localmediaserver")} +
+
+
+
+
+ {t("bodyshop.fields.system_settings.local_media_server.enabled")} +
+ + + +
+
+
+ } + wrapTitle + > + + + + + + + + + +
+ + + + + + + + + + - + ); }) @@ -882,8 +1001,14 @@ export function ShopInfoGeneral({ form }) { {renderListOrEmpty(fields, t("bodyshop.actions.add_estimator"), () => fields.map((field, index) => { return ( - - + @@ -974,7 +1099,7 @@ export function ShopInfoGeneral({ form }) { > - + ); }) @@ -1001,7 +1126,7 @@ export function ShopInfoGeneral({ form }) { {renderListOrEmpty(fields, t("bodyshop.actions.add_adjuster"), () => fields.map((field, index) => { return ( - + fields.map((field, index) => { return ( - - + @@ -1166,7 +1293,7 @@ export function ShopInfoGeneral({ form }) { key={`${index}actax`} name={[field.name, "actax"]} > - + - + - + - + - + - + - + - + - + - + ); }) @@ -1260,8 +1387,13 @@ export function ShopInfoGeneral({ form }) { {renderListOrEmpty(fields, t("bodyshop.actions.add_jobline_preset"), () => fields.map((field, index) => { return ( - - + @@ -1355,7 +1487,7 @@ export function ShopInfoGeneral({ form }) { key={`${index}mod_lb_hrs`} name={[field.name, "mod_lb_hrs"]} > - + - + - + - + ); }) @@ -1444,8 +1576,10 @@ export function ShopInfoGeneral({ form }) { {renderListOrEmpty(fields, t("bodyshop.actions.add_parts_order_comment"), () => fields.map((field, index) => { return ( - - + - + ); }) @@ -1538,8 +1672,10 @@ export function ShopInfoGeneral({ form }) { {renderListOrEmpty(fields, t("bodyshop.actions.add_to_email_preset"), () => fields.map((field, index) => { return ( - - + @@ -1601,7 +1737,7 @@ export function ShopInfoGeneral({ form }) { > - + ); }) @@ -1614,3 +1750,23 @@ export function ShopInfoGeneral({ form }) {
); } + +function getDuplicateIndexSetByNormalizedName(list, key) { + const indexes = new Set(); + const firstIndexByValue = new Map(); + + (Array.isArray(list) ? list : []).forEach((item, index) => { + const normalizedValue = (item?.[key] ?? "").toString().trim().toLowerCase(); + if (!normalizedValue) return; + + if (firstIndexByValue.has(normalizedValue)) { + indexes.add(firstIndexByValue.get(normalizedValue)); + indexes.add(index); + return; + } + + firstIndexByValue.set(normalizedValue, index); + }); + + return indexes; +} diff --git a/client/src/components/shop-info/shop-info.intake.component.jsx b/client/src/components/shop-info/shop-info.intake.component.jsx index 182b4c878..cd0d80033 100644 --- a/client/src/components/shop-info/shop-info.intake.component.jsx +++ b/client/src/components/shop-info/shop-info.intake.component.jsx @@ -6,6 +6,7 @@ import { TemplateList } from "../../utils/TemplateConstants"; import ConfigFormTypes from "../config-form-components/config-form-types"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; +import InlineValidatedFormRow from "../layout-form-row/inline-validated-form-row.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -32,6 +33,7 @@ export default function ShopInfoIntakeChecklistComponent({ form }) { - ({ + value: TemplateListGenerated[i].key, + label: TemplateListGenerated[i].title + }))} + /> + - , - - - 2 - 3 - - , - - {() => { - return ( - - - {t("bodyshop.labels.2tiername")} - {t("bodyshop.labels.2tiersource")} - - - ); - }} - , - - - , - - - , - - {ReceivableCustomFieldSelect} - , - - {ReceivableCustomFieldSelect} - , - - {ReceivableCustomFieldSelect} - , - { - return { - required: getFieldValue("enforce_class"), - //message: t("general.validation.required"), - type: "array" - }; - } - ]} - > - - , - - - , - InstanceRenderManager({ - imex: ( - - - - ) - }), - - - , - ...(HasFeatureAccess({ featureName: "bills", bodyshop }) - ? [ - InstanceRenderManager({ - imex: ( - - - - ) - }), - - - , - - - - ] - : []), + <> - ] - : []), - ...(HasFeatureAccess({ featureName: "bills", bodyshop }) - ? [ + + - - , - - + - ] - : []), - ...(HasFeatureAccess({ featureName: "export", bodyshop }) - ? [ - ...(ClosingPeriod.treatment === "on" - ? [ - - + + {InstanceRenderManager({ + imex: ( + + + + + + ) + })} + + + + + + {HasFeatureAccess({ featureName: "export", bodyshop }) && + ClosingPeriod.treatment === "on" && ( + + + + + + )} + {HasFeatureAccess({ featureName: "export", bodyshop }) && + ADPPayroll.treatment === "on" && ( + + + + + + )} + {HasFeatureAccess({ featureName: "export", bodyshop }) && + ADPPayroll.treatment === "on" && ( + + + + + + )} + {HasFeatureAccess({ featureName: "export", bodyshop }) && !hasDMSKey && ( + <> + + + + 2 + 3 + + + + + + {() => { + return ( + + + {t("bodyshop.labels.2tiername")} + {t("bodyshop.labels.2tiersource")} + + + ); + }} + + + + { + return { + required: getFieldValue("enforce_class"), + //message: t("general.validation.required"), + type: "array" + }; + } + ]} + > + - - ] - : []), - ...(ADPPayroll.treatment === "on" - ? [ - - - - ] - : []) - ] - : []) - ]} +
+ {InstanceRenderManager({ + imex: ( +
+ {t("bodyshop.labels.qbo_usa")} + + {() => ( + + + + )} + +
+ ) + })} +
+ } + > + + + + + {ReceivableCustomFieldSelect} + + + {ReceivableCustomFieldSelect} + + + {ReceivableCustomFieldSelect} + + + )} + + {HasFeatureAccess({ featureName: "bills", bodyshop }) && ( + + {InstanceRenderManager({ + imex: ( + + + + ) + })} + + + + + + + + )} +
+ {hasDMSKey && ( @@ -465,7 +509,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { label={t("bodyshop.fields.dms.sendmaterialscosting")} name={["cdk_configuration", "sendmaterialscosting"]} > - + {bodyshop.pbs_serialnumber && ( fields.map((field, index) => { return ( - - + @@ -804,7 +853,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { )} - + ); }) @@ -830,8 +879,13 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { {renderListOrEmpty(fields, t("bodyshop.actions.add_profit_center"), () => fields.map((field, index) => { return ( - - + @@ -974,7 +1028,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { /> ]} - + ); }) @@ -3277,90 +3331,110 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { )} - - - - - - - - - - {hasDMSKey && ( - + - - - )} - - - - {InstanceRenderManager({ - imex: [ - , + - , + - , - hasDMSKey ? ( + + + + + {hasDMSKey && ( - ) : null, - - - - ], - rome: null - })} + )} + + + {InstanceRenderManager({ + imex: ( + + + + + + + + + + + + + + {hasDMSKey && ( + + + + )} + + ), + rome: null + })} +
{DmsAp.treatment === "on" && ( @@ -3400,7 +3474,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { rules={[{ required: true }]} name={["md_responsibility_centers", "taxes", "federal_itc", "rate"]} > - + )} @@ -3541,8 +3615,13 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { {renderListOrEmpty(fields, t("bodyshop.actions.newsalestaxcode"), () => fields.map((field, index) => { return ( - - + - + ); }) diff --git a/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx b/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx index cfa0f589d..d742628eb 100644 --- a/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx +++ b/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx @@ -112,7 +112,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAB", "lbr_adjp"]} > - + - + ); }} @@ -185,7 +185,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAD", "lbr_adjp"]} > - + - + ); }} @@ -258,7 +258,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAE", "lbr_adjp"]} > - + - + ); }} @@ -331,7 +331,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAF", "lbr_adjp"]} > - + - + ); }} @@ -404,7 +404,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAG", "lbr_adjp"]} > - + - + ); }} @@ -477,7 +477,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAM", "lbr_adjp"]} > - + - + ); }} @@ -550,7 +550,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAR", "lbr_adjp"]} > - + - + ); }} @@ -623,7 +623,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.cieca_pfl.lbr_adjp")} name={["md_responsibility_centers", "cieca_pfl", "LAS", "lbr_adjp"]} > - + - + ); }} @@ -790,7 +790,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.materials.mat_adjp")} name={["md_responsibility_centers", "cieca_pfm", "MAPA", "mat_adjp"]} > - + - + ); }} @@ -875,7 +875,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { label={t("jobs.fields.materials.mat_adjp")} name={["md_responsibility_centers", "cieca_pfm", "MASH", "mat_adjp"]} > - + - + ); }} @@ -2318,7 +2318,7 @@ function getTierTaxFormItems({ typeNum, typeNumIterator, t }) { ]} name={["md_responsibility_centers", "taxes", `tax_ty${typeNum}`, `ty${typeNum}_rate${typeNumIterator}`]} > - + , - + ]; } diff --git a/client/src/components/shop-info/shop-info.roguard.component.jsx b/client/src/components/shop-info/shop-info.roguard.component.jsx index 117f5e92a..66638a9f5 100644 --- a/client/src/components/shop-info/shop-info.roguard.component.jsx +++ b/client/src/components/shop-info/shop-info.roguard.component.jsx @@ -32,7 +32,7 @@ export default function ShopInfoRoGuard({ form }) { } ]} > - + [...new Set((statuses || []).map((item) => item?.trim()).filter(Boolean))]; +const getTranslatedDragRect = (active, delta) => { + const rect = active?.rect?.current?.initial || active?.rect?.current?.translated; + + if (!rect) return null; + + const x = delta?.x || 0; + const y = delta?.y || 0; + + return { + left: rect.left + x, + right: rect.right + x, + top: rect.top + y, + bottom: rect.bottom + y, + width: rect.width, + height: rect.height + }; +}; + +const isPointWithinRect = (point, rect) => { + if (!point || !rect) return false; + + return point.x >= rect.left && point.x <= rect.right && point.y >= rect.top && point.y <= rect.bottom; +}; + const DraggableStatusTag = ({ label, value, closable, onClose }) => { const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: value @@ -99,11 +163,13 @@ const DraggableStatusTag = ({ label, value, closable, onClose }) => { { - if (event.target.closest(".ant-tag-close-icon")) { - event.stopPropagation(); - } + onMouseDown={(event) => { + event.stopPropagation(); + }} + onClick={(event) => { + event.stopPropagation(); }} {...attributes} {...listeners} @@ -117,9 +183,21 @@ const DraggableStatusTag = ({ label, value, closable, onClose }) => { } event.preventDefault(); + event.stopPropagation(); + }} + onClick={(event) => { + if (event.target.closest(".ant-select-selection-item-remove")) { + event.stopPropagation(); + return; + } + + event.stopPropagation(); }} title={labelText} > + + + {labelText} {closable ? ( { ); }; -const SortableStatusesSelect = ({ value, onChange }) => { +const SortableStatusesSelect = ({ value, onChange, mode = "tags", options = [] }) => { const statuses = normalizeStatuses(value); + const isTagsMode = mode === "tags"; + const [knownStatuses, setKnownStatuses] = useState(statuses); + const selectWrapperRef = useRef(null); + const dragRectRef = useRef(null); const tagSensors = useSensors( useSensor(PointerSensor, { activationConstraint: { @@ -151,16 +233,75 @@ const SortableStatusesSelect = ({ value, onChange }) => { ); const handleStatusesChange = (nextValues) => { - onChange?.(normalizeStatuses(nextValues)); + const normalizedNextValues = normalizeStatuses(nextValues); + if (isTagsMode) { + setKnownStatuses((currentKnownStatuses) => normalizeStatuses([...currentKnownStatuses, ...normalizedNextValues])); + } + onChange?.(normalizedNextValues); }; - const handleStatusSortEnd = ({ active, over }) => { - if (!over || active.id === over.id) return; + useEffect(() => { + if (isTagsMode) { + setKnownStatuses((currentKnownStatuses) => normalizeStatuses([...currentKnownStatuses, ...statuses])); + } + }, [isTagsMode, statuses]); + const shouldMoveStatusToEnd = (activeId, dragRect) => { + const selectRect = + selectWrapperRef.current?.querySelector?.(".ant-select-selector")?.getBoundingClientRect?.() || + selectWrapperRef.current?.getBoundingClientRect?.(); + if (!dragRect || !selectRect) return false; + + const dragLeadingPoint = { + x: dragRect.left, + y: dragRect.top + }; + const dragTrailingPoint = { + x: dragRect.right, + y: dragRect.bottom + }; + + if (!isPointWithinRect(dragLeadingPoint, selectRect) && !isPointWithinRect(dragTrailingPoint, selectRect)) { + return false; + } + + const trailingStatus = statuses.filter((status) => status !== activeId).at(-1); + if (!trailingStatus) return false; + + const trailingTagNode = selectWrapperRef.current?.querySelector?.( + `.job-statuses-source-tag-wrapper[data-status-tag-value="${CSS.escape(String(trailingStatus))}"]` + ); + const trailingTagRect = trailingTagNode?.getBoundingClientRect?.(); + + if (!trailingTagRect) return false; + + const isOnTrailingRow = dragRect.bottom >= trailingTagRect.top && dragRect.top <= trailingTagRect.bottom; + if (isOnTrailingRow) { + return dragRect.left >= trailingTagRect.right - 4; + } + + return dragRect.top >= trailingTagRect.bottom - 4; + }; + + const handleStatusSortEnd = ({ active, over, delta }) => { const oldIndex = statuses.indexOf(active.id); + const dragRect = dragRectRef.current || getTranslatedDragRect(active, delta); + dragRectRef.current = null; + + if (oldIndex < 0) return; + + if (!over) { + if (oldIndex !== statuses.length - 1 && shouldMoveStatusToEnd(active.id, dragRect)) { + onChange?.(arrayMove(statuses, oldIndex, statuses.length - 1)); + } + return; + } + + if (active.id === over.id) return; + const newIndex = statuses.indexOf(over.id); - if (oldIndex < 0 || newIndex < 0) return; + if (newIndex < 0) return; onChange?.(arrayMove(statuses, oldIndex, newIndex)); }; @@ -169,18 +310,50 @@ const SortableStatusesSelect = ({ value, onChange }) => { return ; }; + const statusSelectOptions = isTagsMode + ? knownStatuses.map((status) => ({ + value: status, + label: status + })) + : options; + + if (statuses.length === 0) { + return ( + - - +
+ { + dragRectRef.current = null; + }} + onDragEnd={handleStatusSortEnd} + onDragMove={({ active, delta }) => { + dragRectRef.current = getTranslatedDragRect(active, delta); + }} + sensors={tagSensors} + > + + + - + - + - - - - - - - - - - + + + option?.searchLabel?.toLowerCase().includes(input.toLowerCase())} onChange={handleSectionChange} />
@@ -120,6 +120,77 @@ function getOwnCardTitleNode(card) { return headNode?.querySelector(".ant-card-head-title"); } +function getOwnCardTitle(card) { + return getOwnCardTitleNode(card)?.textContent?.trim(); +} + +function getAncestorCards(card, activePane) { + const ancestors = []; + let currentCard = card.parentElement?.closest(".imex-form-row"); + + while (currentCard && activePane.contains(currentCard)) { + ancestors.push(currentCard); + currentCard = currentCard.parentElement?.closest(".imex-form-row"); + } + + return ancestors.reverse(); +} + +function getCardDepth(card, activePane) { + return getAncestorCards(card, activePane).length; +} + +function isVisibleCard(card) { + return card.offsetParent !== null; +} + +function isNavigatorEligibleSubsection(card) { + return ( + !card.classList.contains("imex-form-row--compact") && + !card.classList.contains("imex-form-row--title-only") && + !card.querySelector(":scope > .ant-card-actions") + ); +} + +function shouldIncludeCardInNavigator(card, activePane) { + const title = getOwnCardTitle(card); + if (!title || !isVisibleCard(card)) return false; + + const depth = getCardDepth(card, activePane); + if (depth === 0) return true; + if (depth === 1) return isNavigatorEligibleSubsection(card); + + return false; +} + +function getCardNavigatorInfo(card, activePane) { + const title = getOwnCardTitle(card); + const ancestors = getAncestorCards(card, activePane); + const depth = ancestors.length; + const parentTitle = depth === 1 ? getOwnCardTitle(ancestors[0]) : null; + + return { + title, + depth, + searchLabel: parentTitle ? `${parentTitle} ${title}` : title + }; +} + +function renderNavigatorOptionLabel(title, depth) { + return ( + 0 ? "shop-info-section-navigator__option--subsection" : null + ] + .filter(Boolean) + .join(" ")} + > + {title} + + ); +} + function clearHighlightedTarget(highlightedTargetRef) { if (highlightedTargetRef.current) { highlightedTargetRef.current.classList.remove(HIGHLIGHT_CLASS); @@ -132,6 +203,11 @@ function areOptionsEqual(currentOptions, nextOptions) { return currentOptions.every((option, index) => { const nextOption = nextOptions[index]; - return option.label === nextOption.label && option.value === nextOption.value; + return ( + option.labelText === nextOption.labelText && + option.searchLabel === nextOption.searchLabel && + option.depth === nextOption.depth && + option.value === nextOption.value + ); }); } diff --git a/client/src/components/shop-info/shop-info.section-navigator.styles.scss b/client/src/components/shop-info/shop-info.section-navigator.styles.scss index eff4d1a0f..ba9a1b9d0 100644 --- a/client/src/components/shop-info/shop-info.section-navigator.styles.scss +++ b/client/src/components/shop-info/shop-info.section-navigator.styles.scss @@ -7,6 +7,32 @@ } } +.shop-info-section-navigator__option { + display: inline-flex; + align-items: center; + min-height: 24px; +} + +.shop-info-section-navigator__option--subsection { + position: relative; + padding-left: 18px; +} + +.shop-info-section-navigator__option--subsection::before { + content: ""; + position: absolute; + left: 6px; + top: 50%; + width: 8px; + height: 1px; + background: var(--ant-colorTextDescription); + transform: translateY(-50%); +} + +.shop-info-section-navigator__option-label { + display: inline-block; +} + .imex-form-row.shop-info-section-navigator__target--active.ant-card { border-color: color-mix( in srgb, diff --git a/client/src/components/shop-info/shop-info.speedprint.component.jsx b/client/src/components/shop-info/shop-info.speedprint.component.jsx index 33b5e55fe..4498170d1 100644 --- a/client/src/components/shop-info/shop-info.speedprint.component.jsx +++ b/client/src/components/shop-info/shop-info.speedprint.component.jsx @@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next"; import { TemplateList } from "../../utils/TemplateConstants"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.component.jsx"; +import InlineValidatedFormRow from "../layout-form-row/inline-validated-form-row.component.jsx"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { INLINE_TITLE_GROUP_STYLE, @@ -17,6 +18,7 @@ import InstanceRenderManager from "../../utils/instanceRenderMgr"; export default function ShopInfoSpeedPrint() { const { t } = useTranslation(); + const form = Form.useFormInstance(); const allTemplates = TemplateList("job"); const TemplateListGenerated = InstanceRenderManager({ imex: Object.fromEntries(Object.entries(allTemplates).filter(([, { enhanced_payroll }]) => !enhanced_payroll)), @@ -48,8 +50,13 @@ export default function ShopInfoSpeedPrint() { ) : ( fields.map((field, index) => { return ( - - + @@ -140,7 +147,7 @@ export default function ShopInfoSpeedPrint() { }))} /> - +
); }) diff --git a/client/src/components/shop-info/shop-info.task-presets.component.jsx b/client/src/components/shop-info/shop-info.task-presets.component.jsx index d3d3cb66a..987451f5e 100644 --- a/client/src/components/shop-info/shop-info.task-presets.component.jsx +++ b/client/src/components/shop-info/shop-info.task-presets.component.jsx @@ -257,7 +257,7 @@ export function ShopInfoTaskPresets({ bodyshop }) { ]} name={[field.name, "percent"]} > - + { return `${numericValue.toFixed(2).replace(/\.?0+$/, "")}%`; }; -export function ShopEmployeeTeamsFormComponent({ bodyshop }) { +export function ShopEmployeeTeamsFormComponent({ bodyshop, form, onDirtyChange, isDirty }) { const { t } = useTranslation(); - const [form] = Form.useForm(); + const [internalForm] = Form.useForm(); + const [internalIsDirty, setInternalIsDirty] = useState(false); + const teamForm = form ?? internalForm; + const resolvedIsDirty = typeof isDirty === "boolean" ? isDirty : internalIsDirty; const history = useNavigate(); const search = querystring.parse(useLocation().search); const notification = useNotification(); const [hydratedTeamId, setHydratedTeamId] = useState(search.employeeTeamId === "new" ? "new" : null); const isNewTeam = search.employeeTeamId === "new"; - const { error, data, loading } = useQuery(QUERY_EMPLOYEE_TEAM_BY_ID, { + const { error, data, loading, refetch } = useQuery(QUERY_EMPLOYEE_TEAM_BY_ID, { variables: { id: search.employeeTeamId }, skip: !search.employeeTeamId || isNewTeam, fetchPolicy: "network-only", @@ -78,38 +83,71 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { notifyOnNetworkStatusChange: true }); - useEffect(() => { - if (!search.employeeTeamId) return; + const currentTeamData = data?.employee_teams_by_pk?.id === search.employeeTeamId ? data.employee_teams_by_pk : null; + + const updateDirtyState = useCallback( + (nextDirtyState) => { + if (typeof isDirty !== "boolean") { + setInternalIsDirty(nextDirtyState); + } + + onDirtyChange?.(nextDirtyState); + }, + [isDirty, onDirtyChange] + ); + + const clearTeamFormMeta = useCallback(() => { + const fieldMeta = teamForm.getFieldsError().map(({ name }) => ({ + name, + touched: false, + validating: false, + errors: [], + warnings: [] + })); + + if (fieldMeta.length > 0) { + teamForm.setFields(fieldMeta); + } + + updateDirtyState(false); + }, [teamForm, updateDirtyState]); + + const resetTeamFormToCurrentData = useCallback(() => { + let hydrationFrameId; + + teamForm.resetFields(); if (isNewTeam) { - form.resetFields(); setHydratedTeamId("new"); - return; + hydrationFrameId = window.requestAnimationFrame(() => { + clearTeamFormMeta(); + }); + return () => { + if (hydrationFrameId) window.cancelAnimationFrame(hydrationFrameId); + }; } setHydratedTeamId(null); - }, [form, isNewTeam, search.employeeTeamId]); - useEffect(() => { - if (!search.employeeTeamId || isNewTeam || loading) return; - let hydrationFrameId; - - if (data?.employee_teams_by_pk?.id === search.employeeTeamId) { - form.setFieldsValue(normalizeEmployeeTeam(data.employee_teams_by_pk)); - hydrationFrameId = window.requestAnimationFrame(() => { - setHydratedTeamId(search.employeeTeamId); - }); - } else { - form.resetFields(); - hydrationFrameId = window.requestAnimationFrame(() => { - setHydratedTeamId(search.employeeTeamId); - }); + if (loading) { + return undefined; } + if (currentTeamData) { + teamForm.setFieldsValue(normalizeEmployeeTeam(currentTeamData)); + } + + hydrationFrameId = window.requestAnimationFrame(() => { + setHydratedTeamId(search.employeeTeamId); + clearTeamFormMeta(); + }); + return () => { if (hydrationFrameId) window.cancelAnimationFrame(hydrationFrameId); }; - }, [data, form, isNewTeam, loading, search.employeeTeamId]); + }, [clearTeamFormMeta, currentTeamData, isNewTeam, loading, search.employeeTeamId, teamForm]); + + useEffect(() => resetTeamFormToCurrentData(), [resetTeamFormToCurrentData]); const [updateEmployeeTeam] = useMutation(UPDATE_EMPLOYEE_TEAM); const [insertEmployeeTeam] = useMutation(INSERT_EMPLOYEE_TEAM); @@ -117,8 +155,8 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { label: t(labelKey), value })); - const teamName = Form.useWatch("name", form); - const teamMembers = Form.useWatch(["employee_team_members"], form) || []; + const teamName = Form.useWatch("name", teamForm); + const teamMembers = Form.useWatch(["employee_team_members"], teamForm) || []; const isTeamHydrating = !isNewTeam && Boolean(search.employeeTeamId) && hydratedTeamId !== search.employeeTeamId; const isAllocationTotalExact = hasExactSplitTotal(teamMembers); const allocationTotalValue = formatAllocationPercentage(getSplitTotal(teamMembers))?.replace("%", "") || "0"; @@ -172,6 +210,8 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { }); if (!result.errors) { + updateDirtyState(false); + void refetch(); notification.success({ title: t("employees.successes.save") }); @@ -195,6 +235,7 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { }, refetchQueries: ["QUERY_TEAMS"] }).then((response) => { + updateDirtyState(false); search.employeeTeamId = response.data.insert_employee_teams_one.id; history({ search: querystring.stringify(search) }); notification.success({ @@ -211,7 +252,12 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { form.submit()} disabled={isTeamHydrating} style={{ minWidth: 190 }}> + } @@ -219,7 +265,16 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { {isTeamHydrating ? ( ) : ( -
+ { + updateDirtyState(teamForm.isFieldsTouched()); + }} + > + { return ( - + - @@ -410,7 +471,7 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { > {() => { const payoutMethod = - form.getFieldValue(["employee_team_members", field.name, "payout_method"]) || + teamForm.getFieldValue(["employee_team_members", field.name, "payout_method"]) || "hourly"; const fieldName = payoutMethod === "commission" ? "commission_rates" : "labor_rates"; @@ -443,7 +504,7 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop }) { }}
-
+
); }) diff --git a/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx b/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx index da20b74c5..9208b6a64 100644 --- a/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx +++ b/client/src/components/shop-teams/shop-employee-teams.form.component.test.jsx @@ -68,6 +68,10 @@ vi.mock("../../contexts/Notifications/notificationContext.jsx", () => ({ useNotification: () => notification })); +vi.mock("../form-fields-changed-alert/form-fields-changed-alert.component.jsx", () => ({ + default: () => null +})); + vi.mock("../../firebase/firebase.utils", () => ({ logImEXEvent: vi.fn() })); diff --git a/client/src/components/shop-teams/shop-employee-teams.list.jsx b/client/src/components/shop-teams/shop-employee-teams.list.jsx index 8cd351201..6acb89f45 100644 --- a/client/src/components/shop-teams/shop-employee-teams.list.jsx +++ b/client/src/components/shop-teams/shop-employee-teams.list.jsx @@ -6,12 +6,22 @@ import ConfigListEmptyState from "../layout-form-row/config-list-empty-state.com import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import ResponsiveTable from "../responsive-table/responsive-table.component"; -export default function ShopEmployeeTeamsListComponent({ loading, employee_teams }) { +export default function ShopEmployeeTeamsListComponent({ + loading, + employee_teams, + onRequestTeamChange, + selectedTeamId +}) { const { t } = useTranslation(); const history = useNavigate(); const search = queryString.parse(useLocation().search); const navigateToTeam = (employeeTeamId) => { + if (onRequestTeamChange) { + onRequestTeamChange(employeeTeamId); + return; + } + history({ search: queryString.stringify({ ...search, @@ -65,7 +75,7 @@ export default function ShopEmployeeTeamsListComponent({ loading, employee_teams rowSelection={{ onSelect: (props) => navigateToTeam(props.id), type: "radio", - selectedRowKeys: [search.employeeTeamId] + selectedRowKeys: [selectedTeamId || search.employeeTeamId] }} onRow={(record) => { return { diff --git a/client/src/components/shop-teams/shop-teams.container.jsx b/client/src/components/shop-teams/shop-teams.container.jsx index 997cc309d..b55534b2d 100644 --- a/client/src/components/shop-teams/shop-teams.container.jsx +++ b/client/src/components/shop-teams/shop-teams.container.jsx @@ -1,9 +1,12 @@ +import { Form } from "antd"; import { useQuery } from "@apollo/client/react"; import queryString from "query-string"; import { connect } from "react-redux"; -import { useLocation } from "react-router-dom"; +import { useState } from "react"; +import { useLocation, useNavigate } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import { QUERY_TEAMS } from "../../graphql/employee_teams.queries"; +import useConfirmDirtyFormNavigation from "../../hooks/useConfirmDirtyFormNavigation.jsx"; import AlertComponent from "../alert/alert.component"; import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component"; import ShopEmployeeTeamsListComponent from "./shop-employee-teams.list"; @@ -13,12 +16,30 @@ import "./shop-teams.styles.scss"; const mapStateToProps = createStructuredSelector({}); function ShopTeamsContainer() { + const [form] = Form.useForm(); + const [isTeamFormDirty, setIsTeamFormDirty] = useState(false); + const navigate = useNavigate(); const search = queryString.parse(useLocation().search); const { loading, error, data } = useQuery(QUERY_TEAMS, { fetchPolicy: "network-only", nextFetchPolicy: "network-only" }); const hasSelectedTeam = Boolean(search.employeeTeamId); + const hasDirtyTeamForm = Boolean(search.employeeTeamId) && isTeamFormDirty; + const confirmCloseDirtyTeam = useConfirmDirtyFormNavigation(hasDirtyTeamForm); + + const navigateToTeam = (employeeTeamId) => { + if (employeeTeamId === search.employeeTeamId) return; + if (!confirmCloseDirtyTeam()) return; + + setIsTeamFormDirty(false); + navigate({ + search: queryString.stringify({ + ...search, + employeeTeamId + }) + }); + }; if (error) return ; @@ -30,11 +51,16 @@ function ShopTeamsContainer() { .join(" ")} >
- +
{hasSelectedTeam ? (
- +
) : null}
diff --git a/client/src/hooks/useConfirmDirtyFormNavigation.jsx b/client/src/hooks/useConfirmDirtyFormNavigation.jsx new file mode 100644 index 000000000..5b77bbf88 --- /dev/null +++ b/client/src/hooks/useConfirmDirtyFormNavigation.jsx @@ -0,0 +1,11 @@ +import { useCallback } from "react"; +import { useTranslation } from "react-i18next"; + +export default function useConfirmDirtyFormNavigation(isDirty) { + const { t } = useTranslation(); + + return useCallback(() => { + if (!isDirty) return true; + return window.confirm(t("general.messages.unsavedchangespopup")); + }, [isDirty, t]); +} diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 428894541..b4cfffcf4 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -421,6 +421,35 @@ "logo_img_path": "Shop Logo", "logo_img_path_height": "Logo Image Height", "logo_img_path_width": "Logo Image Width", + "scoreboard_setup": { + "daily_body_target": "Daily Body Target", + "daily_paint_target": "Daily Paint Target", + "ignore_blocked_days": "Ignore Blocked Days", + "last_number_working_days": "Last Number of Working Days", + "production_target_hours": "Production Target Hours" + }, + "system_settings": { + "auto_email": { + "attach_pdf_to_email": "Attach PDF to Sent Emails?", + "from_emails": "Additional From Emails", + "parts_order_cc": "Parts Orders CC", + "parts_return_slip_cc": "Parts Returns CC" + }, + "job_costing": { + "paint_hour_split": "Paint Hour Split", + "paint_materials_hourly_cost_rate": "Paint Materials Hourly Cost Rate", + "prep_hour_split": "Prep Hour Split", + "shop_materials_hourly_cost_rate": "Shop Materials Hourly Cost Rate", + "target_touch_time": "Target Touch Time", + "use_paint_scale_data": "Use Paint Scale Data" + }, + "local_media_server": { + "enabled": "Enabled", + "http_path": "HTTP Path", + "network_path": "Network Path", + "token": "Token" + } + }, "md_categories": "Categories", "md_ccc_rates": "Courtesy Car Contract Rate Presets", "md_classes": "Classes", @@ -621,6 +650,9 @@ "federal_tax_itc": "Federal Tax Credit", "gogcode": "GOG Code (BreakOut)", "gst_override": "GST Override Account #", + "invoice_federal_tax_rate_short": "Federal Tax Rate", + "invoice_local_tax_rate_short": "Local Tax Rate", + "invoice_state_tax_rate_short": "State Tax Rate", "invoiceexemptcode": "QuickBooks US - Invoice Tax Exempt Code", "invoiceexemptcode_short": "Invoice Tax Exempt Code", "item_type": "Item Type", @@ -806,7 +838,9 @@ "responsibilitycenters": { "costs": "Cost Centers", "default_tax_setup": "Default Tax Setup", + "invoices": "Invoices", "profits": "Profit Centers", + "quickbooks_qbd": "QuickBooks / QBD", "quickbooks_us": "QuickBooks US", "sales_tax_codes": "Sales Tax Codes", "tax_accounts": "Tax Accounts", @@ -823,6 +857,9 @@ "roguard": { "title": "RO Guard" }, + "autoemail": "Auto Email", + "jobcosting": "Job Costing", + "localmediaserver": "Local Media Server", "romepay": "Rome Pay", "scheduling": "SMART Scheduling", "scoreboardsetup": "Scoreboard Setup", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 4a12af3c8..55de91164 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -421,6 +421,35 @@ "logo_img_path": "", "logo_img_path_height": "", "logo_img_path_width": "", + "scoreboard_setup": { + "daily_body_target": "", + "daily_paint_target": "", + "ignore_blocked_days": "", + "last_number_working_days": "", + "production_target_hours": "" + }, + "system_settings": { + "auto_email": { + "attach_pdf_to_email": "", + "from_emails": "", + "parts_order_cc": "", + "parts_return_slip_cc": "" + }, + "job_costing": { + "paint_hour_split": "", + "paint_materials_hourly_cost_rate": "", + "prep_hour_split": "", + "shop_materials_hourly_cost_rate": "", + "target_touch_time": "", + "use_paint_scale_data": "" + }, + "local_media_server": { + "enabled": "", + "http_path": "", + "network_path": "", + "token": "" + } + }, "md_categories": "", "md_ccc_rates": "", "md_classes": "", @@ -621,6 +650,9 @@ "federal_tax_itc": "", "gogcode": "", "gst_override": "", + "invoice_federal_tax_rate_short": "", + "invoice_local_tax_rate_short": "", + "invoice_state_tax_rate_short": "", "invoiceexemptcode": "", "invoiceexemptcode_short": "", "item_type": "Item Type", @@ -806,7 +838,9 @@ "responsibilitycenters": { "costs": "", "default_tax_setup": "", + "invoices": "", "profits": "", + "quickbooks_qbd": "", "quickbooks_us": "", "sales_tax_codes": "", "tax_accounts": "", @@ -823,6 +857,9 @@ "roguard": { "title": "" }, + "autoemail": "", + "jobcosting": "", + "localmediaserver": "", "romepay": "", "scheduling": "", "scoreboardsetup": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index b0391e190..76030002e 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -421,6 +421,35 @@ "logo_img_path": "", "logo_img_path_height": "", "logo_img_path_width": "", + "scoreboard_setup": { + "daily_body_target": "", + "daily_paint_target": "", + "ignore_blocked_days": "", + "last_number_working_days": "", + "production_target_hours": "" + }, + "system_settings": { + "auto_email": { + "attach_pdf_to_email": "", + "from_emails": "", + "parts_order_cc": "", + "parts_return_slip_cc": "" + }, + "job_costing": { + "paint_hour_split": "", + "paint_materials_hourly_cost_rate": "", + "prep_hour_split": "", + "shop_materials_hourly_cost_rate": "", + "target_touch_time": "", + "use_paint_scale_data": "" + }, + "local_media_server": { + "enabled": "", + "http_path": "", + "network_path": "", + "token": "" + } + }, "md_categories": "", "md_ccc_rates": "", "md_classes": "", @@ -621,6 +650,9 @@ "federal_tax_itc": "", "gogcode": "", "gst_override": "", + "invoice_federal_tax_rate_short": "", + "invoice_local_tax_rate_short": "", + "invoice_state_tax_rate_short": "", "invoiceexemptcode": "", "invoiceexemptcode_short": "", "item_type": "Item Type", @@ -806,7 +838,9 @@ "responsibilitycenters": { "costs": "", "default_tax_setup": "", + "invoices": "", "profits": "", + "quickbooks_qbd": "", "quickbooks_us": "", "sales_tax_codes": "", "tax_accounts": "", @@ -823,6 +857,9 @@ "roguard": { "title": "" }, + "autoemail": "", + "jobcosting": "", + "localmediaserver": "", "romepay": "", "scheduling": "", "scoreboardsetup": "", From d497ec9f7daf77cf6745cde831b7870d1f683cb6 Mon Sep 17 00:00:00 2001 From: Dave Date: Wed, 25 Mar 2026 15:58:51 -0400 Subject: [PATCH 13/16] feature/IO-3624-Shop-Config-UX-Refresh -Final Push! --- .../inline-form-row-title.utils.js | 3 +++ .../shop-employees-form.component.jsx | 14 +++++------ .../shop-info/shop-info.general.component.jsx | 25 ++++++++++--------- .../shop-info/shop-info.intake.component.jsx | 9 ++++--- .../shop-info.laborrates.component.jsx | 7 +++--- .../shop-info/shop-info.parts-scan.jsx | 7 +++--- ...p-info.responsibilitycenters.component.jsx | 11 ++++---- .../shop-info.speedprint.component.jsx | 7 +++--- .../shop-employee-teams.form.component.jsx | 14 +++++------ 9 files changed, 51 insertions(+), 46 deletions(-) diff --git a/client/src/components/layout-form-row/inline-form-row-title.utils.js b/client/src/components/layout-form-row/inline-form-row-title.utils.js index 1647422c1..70c0e8dd2 100644 --- a/client/src/components/layout-form-row/inline-form-row-title.utils.js +++ b/client/src/components/layout-form-row/inline-form-row-title.utils.js @@ -1,3 +1,5 @@ +import { UnorderedListOutlined } from "@ant-design/icons"; + export const inlineFormRowTitleStyles = Object.freeze({ input: Object.freeze({ background: "transparent", @@ -68,6 +70,7 @@ export const inlineFormRowTitleStyles = Object.freeze({ export const INLINE_TITLE_INPUT_STYLE = inlineFormRowTitleStyles.input; export const INLINE_TITLE_ROW_STYLE = inlineFormRowTitleStyles.row; export const INLINE_TITLE_GROUP_STYLE = inlineFormRowTitleStyles.group; +export const InlineTitleListIcon = UnorderedListOutlined; export const INLINE_TITLE_SWITCH_GROUP_STYLE = Object.freeze({ ...inlineFormRowTitleStyles.group, flex: "0 0 auto" diff --git a/client/src/components/shop-employees/shop-employees-form.component.jsx b/client/src/components/shop-employees/shop-employees-form.component.jsx index a47e577b3..5aed82b8e 100644 --- a/client/src/components/shop-employees/shop-employees-form.component.jsx +++ b/client/src/components/shop-employees/shop-employees-form.component.jsx @@ -1,4 +1,4 @@ -import { DeleteFilled, HolderOutlined } from "@ant-design/icons"; +import { DeleteFilled } from "@ant-design/icons"; import { useApolloClient, useMutation, useQuery } from "@apollo/client/react"; import { useTreatmentsWithConfig } from "@splitsoftware/splitio-react"; import { Button, Card, Col, Form, Input, InputNumber, Row, Select, Space, Switch } from "antd"; @@ -38,7 +38,8 @@ import { INLINE_TITLE_ROW_STYLE, INLINE_TITLE_SEPARATOR_STYLE, INLINE_TITLE_SWITCH_GROUP_STYLE, - INLINE_TITLE_TEXT_STYLE + INLINE_TITLE_TEXT_STYLE, + InlineTitleListIcon } from "../layout-form-row/inline-form-row-title.utils.js"; import ShopEmployeeAddVacation from "./shop-employees-add-vacation.component"; import FormItemEmail from "../form-items-formatted/email-form-item.component.jsx"; @@ -92,13 +93,10 @@ export function ShopEmployeesFormComponent({ bodyshop, form, onDirtyChange, isDi const updateDirtyState = useCallback( (nextDirtyState) => { - if (typeof isDirty !== "boolean") { - setInternalIsDirty(nextDirtyState); - } - + setInternalIsDirty(nextDirtyState); onDirtyChange?.(nextDirtyState); }, - [isDirty, onDirtyChange] + [onDirtyChange] ); const client = useApolloClient(); @@ -482,7 +480,7 @@ export function ShopEmployeesFormComponent({ bodyshop, form, onDirtyChange, isDi noDivider title={
- +
{t("employees.fields.cost_center")}
- +
{t("bodyshop.fields.messaginglabel_short")}
- +
{t("bodyshop.fields.noteslabel_short")}
- +
{t("bodyshop.fields.partslocation")}
- +
{t("bodyshop.fields.md_ins_co.name")}
- +
{t("jobs.fields.est_ct_fn_short")}
@@ -1131,7 +1132,7 @@ export function ShopInfoGeneral({ form }) { noDivider title={
- +
{t("jobs.fields.ins_ct_fn_short")}
@@ -1243,7 +1244,7 @@ export function ShopInfoGeneral({ form }) { noDivider title={
- +
{t("general.labels.label")}
- +
{t("general.labels.label")}
- +
{t("general.labels.label")}
- +
{t("general.labels.label")}
- +
{t("jobs.fields.intake.name")}
- +
{t("jobs.fields.intake.name")}
- +
{t("jobs.fields.labor_rate_desc")}
- +
{t("bodyshop.fields.md_parts_scan.field")}
- +
{t("bodyshop.fields.responsibilitycenter")} @@ -889,7 +890,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { noDivider title={
- +
{t("bodyshop.fields.responsibilitycenter")} @@ -3626,7 +3627,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) { noDivider title={
- +
{t("bodyshop.fields.responsibilitycenters.sales_tax_codes.description")} diff --git a/client/src/components/shop-info/shop-info.speedprint.component.jsx b/client/src/components/shop-info/shop-info.speedprint.component.jsx index 4498170d1..7dedf39c4 100644 --- a/client/src/components/shop-info/shop-info.speedprint.component.jsx +++ b/client/src/components/shop-info/shop-info.speedprint.component.jsx @@ -1,4 +1,4 @@ -import { DeleteFilled, HolderOutlined } from "@ant-design/icons"; +import { DeleteFilled } from "@ant-design/icons"; import { Button, Form, Input, Select, Space } from "antd"; import { useTranslation } from "react-i18next"; import { TemplateList } from "../../utils/TemplateConstants"; @@ -12,7 +12,8 @@ import { INLINE_TITLE_INPUT_STYLE, INLINE_TITLE_LABEL_STYLE, INLINE_TITLE_ROW_STYLE, - INLINE_TITLE_SEPARATOR_STYLE + INLINE_TITLE_SEPARATOR_STYLE, + InlineTitleListIcon } from "../layout-form-row/inline-form-row-title.utils.js"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; @@ -60,7 +61,7 @@ export default function ShopInfoSpeedPrint() { noDivider title={
- +
{t("bodyshop.fields.speedprint.id")}
{ - if (typeof isDirty !== "boolean") { - setInternalIsDirty(nextDirtyState); - } - + setInternalIsDirty(nextDirtyState); onDirtyChange?.(nextDirtyState); }, - [isDirty, onDirtyChange] + [onDirtyChange] ); const clearTeamFormMeta = useCallback(() => { @@ -376,7 +374,7 @@ export function ShopEmployeeTeamsFormComponent({ bodyshop, form, onDirtyChange, grow title={
- +
{t("employee_teams.fields.employeeid")}
Date: Fri, 27 Mar 2026 13:46:28 -0400 Subject: [PATCH 14/16] Bump deps --- client/package-lock.json | 450 ++++++++++++++++++++------------------- client/package.json | 28 +-- package-lock.json | 434 ++++++++++++++++++------------------- package.json | 24 +-- 4 files changed, 457 insertions(+), 479 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index e9c5f52b6..9e8d4ef46 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,7 +9,7 @@ "version": "0.2.1", "hasInstallScript": true, "dependencies": { - "@amplitude/analytics-browser": "^2.37.0", + "@amplitude/analytics-browser": "^2.37.2", "@ant-design/pro-layout": "^7.22.6", "@apollo/client": "^4.1.6", "@dnd-kit/core": "^6.3.1", @@ -25,26 +25,26 @@ "@firebase/messaging": "^0.12.25", "@jsreport/browser-client": "^3.1.0", "@reduxjs/toolkit": "^2.11.2", - "@sentry/cli": "^3.3.3", - "@sentry/react": "^10.45.0", + "@sentry/cli": "^3.3.4", + "@sentry/react": "^10.46.0", "@sentry/vite-plugin": "^4.9.1", "@splitsoftware/splitio-react": "^2.6.1", "@tanem/react-nprogress": "^5.0.63", - "antd": "^6.3.3", + "antd": "^6.3.4", "apollo-link-logger": "^3.0.0", "autosize": "^6.0.1", "axios": "^1.13.6", "classnames": "^2.5.1", "css-box-model": "^1.2.1", "dayjs": "^1.11.20", - "dayjs-business-days2": "^1.3.2", + "dayjs-business-days2": "^1.3.3", "dinero.js": "^1.9.1", "dotenv": "^17.3.1", "env-cmd": "^11.0.0", "exifr": "^7.1.3", - "graphql": "^16.13.1", + "graphql": "^16.13.2", "graphql-ws": "^6.0.7", - "i18next": "^25.10.5", + "i18next": "^25.10.10", "i18next-browser-languagedetector": "^8.2.1", "immutability-helper": "^3.1.1", "libphonenumber-js": "^1.12.40", @@ -55,7 +55,7 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.71", - "posthog-js": "^1.363.2", + "posthog-js": "^1.363.6", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", @@ -65,8 +65,8 @@ "react-cookie": "^8.0.1", "react-dom": "^19.2.4", "react-grid-gallery": "^1.0.1", - "react-grid-layout": "^2.2.2", - "react-i18next": "^16.6.2", + "react-grid-layout": "^2.2.3", + "react-i18next": "^16.6.6", "react-icons": "^5.6.0", "react-image-lightbox": "^5.1.4", "react-markdown": "^10.1.0", @@ -78,7 +78,7 @@ "react-router-dom": "^7.13.2", "react-sticky": "^6.0.3", "react-virtuoso": "^4.18.3", - "recharts": "^3.8.0", + "recharts": "^3.8.1", "redux": "^5.0.1", "redux-actions": "^3.0.3", "redux-persist": "^6.0.0", @@ -90,10 +90,10 @@ "socket.io-client": "^4.8.3", "styled-components": "^6.3.12", "vite-plugin-ejs": "^1.7.0", - "web-vitals": "^5.1.0" + "web-vitals": "^5.2.0" }, "devDependencies": { - "@ant-design/icons": "^6.1.0", + "@ant-design/icons": "^6.1.1", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-react": "^7.28.5", "@dotenvx/dotenvx": "^1.57.2", @@ -126,7 +126,7 @@ "vite-plugin-node-polyfills": "^0.25.0", "vite-plugin-pwa": "^1.2.0", "vite-plugin-style-import": "^2.0.0", - "vitest": "^4.1.0", + "vitest": "^4.1.2", "workbox-window": "^7.4.0" }, "engines": { @@ -151,18 +151,18 @@ "license": "MIT" }, "node_modules/@amplitude/analytics-browser": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-browser/-/analytics-browser-2.37.0.tgz", - "integrity": "sha512-/BWDneHRfq6+9bcPQC09Ep79SEj7aRJLZ1jJrPHtxA9KZJUz2au2COlJc1ReCaNzCcrA1xXv/MQ0Fv7TwoBglg==", + "version": "2.37.2", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-browser/-/analytics-browser-2.37.2.tgz", + "integrity": "sha512-4us5NDIsxsVVi9s6ojS94CO7D5CGcxSpAQg+cPmnATtxCFagxfXfO9I59h2veQ0ohL2nO45nVTKR7RrOyGxA/A==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.0", - "@amplitude/plugin-autocapture-browser": "1.24.1", - "@amplitude/plugin-custom-enrichment-browser": "0.1.0", - "@amplitude/plugin-network-capture-browser": "1.9.9", - "@amplitude/plugin-page-url-enrichment-browser": "0.7.0", - "@amplitude/plugin-page-view-tracking-browser": "2.9.1", - "@amplitude/plugin-web-vitals-browser": "1.1.24", + "@amplitude/analytics-core": "2.43.1", + "@amplitude/plugin-autocapture-browser": "1.24.2", + "@amplitude/plugin-custom-enrichment-browser": "0.1.1", + "@amplitude/plugin-network-capture-browser": "1.9.10", + "@amplitude/plugin-page-url-enrichment-browser": "0.7.2", + "@amplitude/plugin-page-view-tracking-browser": "2.9.3", + "@amplitude/plugin-web-vitals-browser": "1.1.25", "tslib": "^2.4.1" } }, @@ -173,9 +173,9 @@ "license": "MIT" }, "node_modules/@amplitude/analytics-core": { - "version": "2.43.0", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-core/-/analytics-core-2.43.0.tgz", - "integrity": "sha512-rcDqi4cmI9Ro7hN5wjAuTm92IdN2i0lhIDAj+JOd9BP3SRMrhhiw2lzcScj3owig8CiV9X7EHPTuZe6XCTfIgQ==", + "version": "2.43.1", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-core/-/analytics-core-2.43.1.tgz", + "integrity": "sha512-8Qi0SZ49wNAcLOmtvk6/+a5FvV351G7ctMPyP9A2saZb5I106gb00VWiz1ENQdUG3cNse0iedSlNCjRbX0eksg==", "license": "MIT", "dependencies": { "@amplitude/analytics-connector": "^1.6.4", @@ -186,66 +186,72 @@ } }, "node_modules/@amplitude/plugin-autocapture-browser": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-autocapture-browser/-/plugin-autocapture-browser-1.24.1.tgz", - "integrity": "sha512-cvjOFew2MFNBDTbk3+H7WNi3D0Jdp476m6faCaVhY99M5zqRCHDMRS7dC4HczvL9zYXlAcW9jAWucwES2m3TiQ==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-autocapture-browser/-/plugin-autocapture-browser-1.24.2.tgz", + "integrity": "sha512-IXcCEpd0J5M+Cz1u7RbAANfKr5D5jqkpVrumcOA+zYdmvrd7/1quuFHvR1Dnhk1fipeSwU5TEpadE/RBS80VvQ==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.0", + "@amplitude/analytics-core": "2.43.1", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-custom-enrichment-browser": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-custom-enrichment-browser/-/plugin-custom-enrichment-browser-0.1.0.tgz", - "integrity": "sha512-y3VmqZvCP1Z3jNgo/mtKVHON9L0P2SyqkMmUsbbFuLu1+TKIkicotnVq/lzlLU1TrW68mkInOM+We8JngasZBA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-custom-enrichment-browser/-/plugin-custom-enrichment-browser-0.1.1.tgz", + "integrity": "sha512-RacUi5M9h1bDUvfRCK3561NP8gK7VuNycvXLPpY/2LDIdzkLMe9sNowghKbr/uLdIySiVcPa+KHCBRfFaJzfJA==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.0", + "@amplitude/analytics-core": "2.43.1", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-network-capture-browser": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-network-capture-browser/-/plugin-network-capture-browser-1.9.9.tgz", - "integrity": "sha512-SJIOQN04Mk9vCsnVd9QRcIvkMV7XSGZIKfbaKNQY5O3ueV33Kc8opm7YjPg2sWcxdzTcJijbCkOI0wCwOaRolg==", + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-network-capture-browser/-/plugin-network-capture-browser-1.9.10.tgz", + "integrity": "sha512-HubSKD8uzb5cLCGWeiLekC9Qv9NHcIwDQiV34Ju1cFrhTON78xfcg1Wz91aIFX+Hub94zqRv8kE/vjZ1ZU+B6Q==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.0", + "@amplitude/analytics-core": "2.43.1", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-page-url-enrichment-browser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-url-enrichment-browser/-/plugin-page-url-enrichment-browser-0.7.0.tgz", - "integrity": "sha512-MkM7TDq24k7ilUDNZISqjDSkVfmDJxWcnUagwYEXjLILhno5hGm7wdgFvVXXzKlZQHEogBxkbnq7wZXS9/YsMw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-url-enrichment-browser/-/plugin-page-url-enrichment-browser-0.7.2.tgz", + "integrity": "sha512-CLcK/e9O0oa5eWruWe6UHhcqyVYK3JG4wsHR+WShG200VqLpNgsDxEM+qNWVYp5Q+aadVYOusik7exxkQayjUg==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.0", + "@amplitude/analytics-core": "2.43.1", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-page-view-tracking-browser": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.9.1.tgz", - "integrity": "sha512-jkxz2lkJDAfsjj7mpbPUZx9N3qJssC3uYyv8Nk73z+p+v0wjBikWdOoKuNQkcuP09701zRdXp9ziU8+qwkGusw==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.9.3.tgz", + "integrity": "sha512-bhsQkGI7D2AQ5EwPLYtZKxdI1jrA/la41ClUX2nHjvmDpY6i7zHVmi7L7xEce4JIF0tb5wUHIvnMt/C2yPBJvA==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.0", + "@amplitude/analytics-core": "2.43.1", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-web-vitals-browser": { - "version": "1.1.24", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-web-vitals-browser/-/plugin-web-vitals-browser-1.1.24.tgz", - "integrity": "sha512-7AaytUK78RKdyDsblYJCKYan1lQi3Qzsp1WHItHJ+RSXPccmi4mCcvNtx0e8T9LmNJlUnsmYeEGR/6FaWvyvFg==", + "version": "1.1.25", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-web-vitals-browser/-/plugin-web-vitals-browser-1.1.25.tgz", + "integrity": "sha512-Ror17zbsSx4uroXdAn+53agTqaZ865U/gjwTgoAb9SdOKPmFGC6Xy+ntxaDCSSQYYayb/0+/g0NYe8WC3OuwCQ==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.0", + "@amplitude/analytics-core": "2.43.1", "tslib": "^2.4.1", "web-vitals": "5.1.0" } }, + "node_modules/@amplitude/plugin-web-vitals-browser/node_modules/web-vitals": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.1.0.tgz", + "integrity": "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==", + "license": "Apache-2.0" + }, "node_modules/@ant-design/colors": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-8.0.1.tgz", @@ -327,9 +333,9 @@ } }, "node_modules/@ant-design/icons": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-6.1.0.tgz", - "integrity": "sha512-KrWMu1fIg3w/1F2zfn+JlfNDU8dDqILfA5Tg85iqs1lf8ooyGlbkA+TkwfOKKgqpUmAiRY1PTFpuOU2DAIgSUg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-6.1.1.tgz", + "integrity": "sha512-AMT4N2y++TZETNHiM77fs4a0uPVCJGuL5MTonk13Pvv7UN7sID1cNEZOc1qNqx6zLKAOilTEFAdAoAFKa0U//Q==", "license": "MIT", "dependencies": { "@ant-design/colors": "^8.0.0", @@ -4873,9 +4879,9 @@ } }, "node_modules/@posthog/types": { - "version": "1.363.2", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.363.2.tgz", - "integrity": "sha512-UcUwHEd2LXxWq4bW/I4TbwYcA+BHO/cSuHcNpGXjRCp76eJk1eOuQnm/a3MrfHtbt2X11CQu+eWpqiSgcv+X6A==", + "version": "1.363.6", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.363.6.tgz", + "integrity": "sha512-SPU8psjrpK8prfFyYwvb25F1AgqSM32zdU1XPVIhUa107Cyw+VGw38Gv+AeqkEoAYQE2TFlWJT8DWUrw/mNDoQ==", "license": "MIT" }, "node_modules/@protobufjs/aspromise": { @@ -5139,9 +5145,9 @@ } }, "node_modules/@rc-component/form": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@rc-component/form/-/form-1.7.2.tgz", - "integrity": "sha512-5C90rXH7aZvvvxB4M5ew+QxROvimdL/lqhSshR8NsyiR7HKOoGQYSitxdfENnH6/0KNFxEy2ranVe2LrTnHZIw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@rc-component/form/-/form-1.8.0.tgz", + "integrity": "sha512-eUD5KKYnIZWmJwRA0vnyO/ovYUfHGU1svydY1OrqU5fw8Oz9Tdqvxvrlh0wl6xI/EW69dT7II49xpgOWzK3T5A==", "license": "MIT", "dependencies": { "@rc-component/async-validator": "^5.1.0", @@ -5166,14 +5172,14 @@ } }, "node_modules/@rc-component/image": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@rc-component/image/-/image-1.6.0.tgz", - "integrity": "sha512-tSfn2ZE/oP082g4QIOxeehkmgnXB7R+5AFj/lIFr4k7pEuxHBdyGIq9axoCY9qea8NN0DY6p4IB/F07tLqaT5A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@rc-component/image/-/image-1.8.0.tgz", + "integrity": "sha512-Dr41bFevLB5NgVaJhEUmNvbEf+ynAhim6W98ZW2xvCsdFISc2TYP4ZvCVdie3eaZdum2kieVcvpNHu+UrzAAHA==", "license": "MIT", "dependencies": { "@rc-component/motion": "^1.0.0", "@rc-component/portal": "^2.1.2", - "@rc-component/util": "^1.3.0", + "@rc-component/util": "^1.10.0", "clsx": "^2.1.1" }, "peerDependencies": { @@ -5938,9 +5944,9 @@ } }, "node_modules/@rc-component/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@rc-component/util/-/util-1.9.0.tgz", - "integrity": "sha512-5uW6AfhIigCWeEQDthTozlxiT4Prn6xYQWeO0xokjcaa186OtwPRHBZJ2o0T0FhbjGhZ3vXdbkv0sx3gAYW7Vg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rc-component/util/-/util-1.10.0.tgz", + "integrity": "sha512-aY9GLBuiUdpyfIUpAWSYer4Tu3mVaZCo5A0q9NtXcazT3MRiI3/WNHCR+DUn5VAtR6iRRf0ynCqQUcHli5UdYw==", "license": "MIT", "dependencies": { "is-mobile": "^5.0.0", @@ -6712,50 +6718,50 @@ ] }, "node_modules/@sentry-internal/browser-utils": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.45.0.tgz", - "integrity": "sha512-ZPZpeIarXKScvquGx2AfNKcYiVNDA4wegMmjyGVsTA2JPmP0TrJoO3UybJS6KGDeee8V3I3EfD/ruauMm7jOFQ==", + "version": "10.46.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.46.0.tgz", + "integrity": "sha512-WB1gBT9G13V02ekZ6NpUhoI1aGHV2eNfjEPthkU2bGBvFpQKnstwzjg7waIRGR7cu+YSW2Q6UI6aQLgBeOPD1g==", "license": "MIT", "dependencies": { - "@sentry/core": "10.45.0" + "@sentry/core": "10.46.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/feedback": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.45.0.tgz", - "integrity": "sha512-vCSurazFVq7RUeYiM5X326jA5gOVrWYD6lYX2fbjBOMcyCEhDnveNxMT62zKkZDyNT/jyD194nz/cjntBUkyWA==", + "version": "10.46.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.46.0.tgz", + "integrity": "sha512-c4pI/z9nZCQXe9GYEw/hE/YTY9AxGBp8/wgKI+T8zylrN35SGHaXv63szzE1WbI8lacBY8lBF7rstq9bQVCaHw==", "license": "MIT", "dependencies": { - "@sentry/core": "10.45.0" + "@sentry/core": "10.46.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.45.0.tgz", - "integrity": "sha512-vjosRoGA1bzhVAEO1oce+CsRdd70quzBeo7WvYqpcUnoLe/Rv8qpOMqWX3j26z7XfFHMExWQNQeLxmtYOArvlw==", + "version": "10.46.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.46.0.tgz", + "integrity": "sha512-JBsWeXG6bRbxBFK8GzWymWGOB9QE7Kl57BeF3jzgdHTuHSWZ2mRnAmb1K05T4LU+gVygk6yW0KmdC8Py9Qzg9A==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.45.0", - "@sentry/core": "10.45.0" + "@sentry-internal/browser-utils": "10.46.0", + "@sentry/core": "10.46.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.45.0.tgz", - "integrity": "sha512-nvq/AocdZTuD7y0KSiWi3gVaY0s5HOFy86mC/v1kDZmT/jsBAzN5LDkk/f1FvsWma1peqQmpUqxvhC+YIW294Q==", + "version": "10.46.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.46.0.tgz", + "integrity": "sha512-ub314MWUsekVCuoH0/HJbbimlI24SkV745UW2pj9xRbxOAEf1wjkmIzxKrMDbTgJGuEunug02XZVdJFJUzOcDw==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "10.45.0", - "@sentry/core": "10.45.0" + "@sentry-internal/replay": "10.46.0", + "@sentry/core": "10.46.0" }, "engines": { "node": ">=18" @@ -6771,16 +6777,16 @@ } }, "node_modules/@sentry/browser": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.45.0.tgz", - "integrity": "sha512-e/a8UMiQhqqv706McSIcG6XK+AoQf9INthi2pD+giZfNRTzXTdqHzUT5OIO5hg8Am6eF63nDJc+vrYNPhzs51Q==", + "version": "10.46.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.46.0.tgz", + "integrity": "sha512-80DmGlTk5Z2/OxVOzLNxwolMyouuAYKqG8KUcoyintZqHbF6kO1RulI610HmyUt3OagKeBCqt9S7w0VIfCRL+Q==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.45.0", - "@sentry-internal/feedback": "10.45.0", - "@sentry-internal/replay": "10.45.0", - "@sentry-internal/replay-canvas": "10.45.0", - "@sentry/core": "10.45.0" + "@sentry-internal/browser-utils": "10.46.0", + "@sentry-internal/feedback": "10.46.0", + "@sentry-internal/replay": "10.46.0", + "@sentry-internal/replay-canvas": "10.46.0", + "@sentry/core": "10.46.0" }, "engines": { "node": ">=18" @@ -7004,9 +7010,9 @@ } }, "node_modules/@sentry/cli": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.3.3.tgz", - "integrity": "sha512-4CZtfgiOraX+BntMjYQhfLDArXwpqt3sEo5Zdj2pqWSZSd4yI3ncfQ21CsxLcI/sUQrjmD5Vzidu4/1OShyxtA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.3.4.tgz", + "integrity": "sha512-r97H1GTdaRs1qhTvbzyomclPesrt4vpjY2W7KGtgSOa5ynQsXKajsM5oJOtNW99O1pNNMZFlR1mmGDMHOxYm4g==", "hasInstallScript": true, "license": "FSL-1.1-MIT", "dependencies": { @@ -7022,20 +7028,20 @@ "node": ">= 18" }, "optionalDependencies": { - "@sentry/cli-darwin": "3.3.3", - "@sentry/cli-linux-arm": "3.3.3", - "@sentry/cli-linux-arm64": "3.3.3", - "@sentry/cli-linux-i686": "3.3.3", - "@sentry/cli-linux-x64": "3.3.3", - "@sentry/cli-win32-arm64": "3.3.3", - "@sentry/cli-win32-i686": "3.3.3", - "@sentry/cli-win32-x64": "3.3.3" + "@sentry/cli-darwin": "3.3.4", + "@sentry/cli-linux-arm": "3.3.4", + "@sentry/cli-linux-arm64": "3.3.4", + "@sentry/cli-linux-i686": "3.3.4", + "@sentry/cli-linux-x64": "3.3.4", + "@sentry/cli-win32-arm64": "3.3.4", + "@sentry/cli-win32-i686": "3.3.4", + "@sentry/cli-win32-x64": "3.3.4" } }, "node_modules/@sentry/cli-darwin": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.3.3.tgz", - "integrity": "sha512-P8DoL79eX5fhKCfBHHl7xwwTShDPOb2drJC8lizZ3v1iS1JLPrNweM1KEzDefR30zH1wghbLSwsYv/svWdM3wA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.3.4.tgz", + "integrity": "sha512-1cFHgwJq0yJ4lAvxQISag2R5R/wRtY7e4YX54Da4n+Isw1WHdF2CLmdT0ufOyT04iiF406UD2d7qsPEVDniAmw==", "license": "FSL-1.1-MIT", "optional": true, "os": [ @@ -7046,9 +7052,9 @@ } }, "node_modules/@sentry/cli-linux-arm": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.3.3.tgz", - "integrity": "sha512-a7o/huozveLIImXHe0HDwEMVhvDopOP2tLcopvV7sQsVE8f/QOShR5FudKjmiaZz2opdLzPJO9pv5WuF9jAZPg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.3.4.tgz", + "integrity": "sha512-8XDDmUZ/4X7Dw2hoSU6T9tpD8qMwtVKHYLQjcY+xNBQujPrSq+YCrNXK/iIN9UgX8Rza2q4IftsIkJADOxLFow==", "cpu": [ "arm" ], @@ -7064,9 +7070,9 @@ } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.3.3.tgz", - "integrity": "sha512-9jaX9RGyTpjo9u2urNi5ciBDpRdTt107YJpFXev+BFHJ6Lwz/owgRuYzPRfAen8hKkOOFheZ3iy07kl576eZzw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.3.4.tgz", + "integrity": "sha512-SD9YQjUPXjIBkt4q41lHMopeL9lKskaxc7qpt1ZuQpoHOszDOUNP3WPvxpeiaMjFMmgMkGojyDBk2XY9eyfGNQ==", "cpu": [ "arm64" ], @@ -7082,9 +7088,9 @@ } }, "node_modules/@sentry/cli-linux-i686": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.3.3.tgz", - "integrity": "sha512-VngQYzR2kDm2oojCuYF20ebLTK8HKvEwxe785J6gxob8Ef9JvZkERyUqENYppBa9aVgN0pandqPAqOECWykTMA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.3.4.tgz", + "integrity": "sha512-LNQlRDPrHLTDgxxJsAzT+1+sJ8Kv/Lq8E4Ob8RjqkwuZxl/wR6QJ4O83cxYGJPPnmjEAT+lOUQt1pTPXAwIwLQ==", "cpu": [ "x86", "ia32" @@ -7101,9 +7107,9 @@ } }, "node_modules/@sentry/cli-linux-x64": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.3.3.tgz", - "integrity": "sha512-rBxXQeIYGefUNI2cXHxEr0y3bhxDQjOD4G6j/gqLz/Dj+l8gJ/iKP64kTudnoViNIpn0pdYccG69th7zmzM/Fg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.3.4.tgz", + "integrity": "sha512-yEOVI4a0RTBYcHJBEaiFU2s4GzcfkXDToMUeLlUg4B3Bgz8AX76163RTEJH5dKavKkoMLKzOrKgVylXPxo1JLQ==", "cpu": [ "x64" ], @@ -7119,9 +7125,9 @@ } }, "node_modules/@sentry/cli-win32-arm64": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.3.3.tgz", - "integrity": "sha512-c52g+YS6BO0rzH8AEHqQPmpqZrw0GJjMWqy0tQ5jcqaGdaLVnxk0mMEubv8R6Dv5MR2LShoKjiNsaeVfrWIMUg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.3.4.tgz", + "integrity": "sha512-aLGgnIf7FHK+yRsemXGQ1yF0Q4R3D/jwCf/20k1miUgFP9fn5mZt+fArGDHr5k3vFfh3bUTf22Ga4CUwXqwkvQ==", "cpu": [ "arm64" ], @@ -7135,9 +7141,9 @@ } }, "node_modules/@sentry/cli-win32-i686": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.3.3.tgz", - "integrity": "sha512-DygYzSY/+tS7oFj/mfeg/yzYxsQx3fO8cI+IWc2pns/at+JcJ9O5xyM/x/q55wOxpnwla7RL1D3rsqK2mqkYfg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.3.4.tgz", + "integrity": "sha512-mLD5NpgI3G3+f1iBWGqTTC1kvdQ0CzmkvM9aIRiXUYWXZiaZVd4YuqhoDvTU6zNFEUXI+9jUEp84VF171B0Pqg==", "cpu": [ "x86", "ia32" @@ -7152,9 +7158,9 @@ } }, "node_modules/@sentry/cli-win32-x64": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.3.3.tgz", - "integrity": "sha512-i0glPcHwkqbVA2Y+0Yz7CD/l8TSkfft1a+lTU9yk/+DDU8WGkyArEAxAji9bGo4p+k5HIFC8OC2MwpKdcdFM4Q==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.3.4.tgz", + "integrity": "sha512-dNWifGo3VLx7n3N3/m+7+rLGNZEb7JmnLwLLAHoz11DneCa6OTBSMCKFABArxqLinlzTbiSOYc8QbvCTcLk5FA==", "cpu": [ "x64" ], @@ -7189,22 +7195,22 @@ } }, "node_modules/@sentry/core": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.45.0.tgz", - "integrity": "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q==", + "version": "10.46.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.46.0.tgz", + "integrity": "sha512-N3fj4zqBQOhXliS1Ne9euqIKuciHCGOJfPGQLwBoW9DNz03jF+NB8+dUKtrJ79YLoftjVgf8nbgwtADK7NR+2Q==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/react": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.45.0.tgz", - "integrity": "sha512-jLezuxi4BUIU3raKyAPR5xMbQG/nhwnWmKo5p11NCbLmWzkS+lxoyDTUB4B8TAKZLfdtdkKLOn1S0tFc8vbUHw==", + "version": "10.46.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.46.0.tgz", + "integrity": "sha512-Rb1S+9OuUPVwsz7GWnQ6Kgf3azbsseUymIegg3JZHNcW/fM1nPpaljzTBnuineia113DH0pgMBcdrrZDLaosFQ==", "license": "MIT", "dependencies": { - "@sentry/browser": "10.45.0", - "@sentry/core": "10.45.0" + "@sentry/browser": "10.46.0", + "@sentry/core": "10.46.0" }, "engines": { "node": ">=18" @@ -7751,31 +7757,31 @@ } }, "node_modules/@vitest/expect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.0.tgz", - "integrity": "sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", + "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.0", - "@vitest/utils": "4.1.0", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", "chai": "^6.2.2", - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/mocker": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.0.tgz", - "integrity": "sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", + "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.0", + "@vitest/spy": "4.1.2", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -7784,7 +7790,7 @@ }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "msw": { @@ -7816,26 +7822,26 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.0.tgz", - "integrity": "sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.0.tgz", - "integrity": "sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", + "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.0", + "@vitest/utils": "4.1.2", "pathe": "^2.0.3" }, "funding": { @@ -7850,14 +7856,14 @@ "license": "MIT" }, "node_modules/@vitest/snapshot": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.0.tgz", - "integrity": "sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", + "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.0", - "@vitest/utils": "4.1.0", + "@vitest/pretty-format": "4.1.2", + "@vitest/utils": "4.1.2", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -7883,9 +7889,9 @@ "license": "MIT" }, "node_modules/@vitest/spy": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.0.tgz", - "integrity": "sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", + "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", "dev": true, "license": "MIT", "funding": { @@ -7893,15 +7899,15 @@ } }, "node_modules/@vitest/utils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.0.tgz", - "integrity": "sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.0", + "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -8036,9 +8042,9 @@ } }, "node_modules/antd": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/antd/-/antd-6.3.3.tgz", - "integrity": "sha512-T8FAQelw36zS96cZw2U/qEjpYny5yFc7hg+1W7DvVr8xMoSXWvyB8WvmiDVH0nS0LPYV4y2sxetsJoGZt7rhhw==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/antd/-/antd-6.3.4.tgz", + "integrity": "sha512-Bu6JivPP7bFfYIdVj+61dxhwSOz+A3m0W7PlDasFGC3H3sNMYQ9gJXZoo11/rQh7pTlOQa351q5Ig/zjI98XYw==", "license": "MIT", "dependencies": { "@ant-design/colors": "^8.0.1", @@ -8055,8 +8061,8 @@ "@rc-component/dialog": "~1.8.4", "@rc-component/drawer": "~1.4.2", "@rc-component/dropdown": "~1.0.2", - "@rc-component/form": "~1.7.2", - "@rc-component/image": "~1.6.0", + "@rc-component/form": "~1.8.0", + "@rc-component/image": "~1.8.0", "@rc-component/input": "~1.1.2", "@rc-component/input-number": "~1.6.2", "@rc-component/mentions": "~1.6.0", @@ -8071,7 +8077,7 @@ "@rc-component/rate": "~1.0.1", "@rc-component/resize-observer": "^1.1.1", "@rc-component/segmented": "~1.3.0", - "@rc-component/select": "~1.6.14", + "@rc-component/select": "~1.6.15", "@rc-component/slider": "~1.0.1", "@rc-component/steps": "~1.2.2", "@rc-component/switch": "~1.0.3", @@ -8084,7 +8090,7 @@ "@rc-component/tree-select": "~1.8.0", "@rc-component/trigger": "^3.9.0", "@rc-component/upload": "~1.1.0", - "@rc-component/util": "^1.9.0", + "@rc-component/util": "^1.10.0", "clsx": "^2.1.1", "dayjs": "^1.11.11", "scroll-into-view-if-needed": "^3.1.0", @@ -9738,12 +9744,12 @@ "license": "MIT" }, "node_modules/dayjs-business-days2": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dayjs-business-days2/-/dayjs-business-days2-1.3.2.tgz", - "integrity": "sha512-UDJcMw5tM6hoIu8QgP4ASKuVPrnFqB8WMbtfmLe2WNMX/n6zmXfPKwULJS2CKpS+N/+Jdq5Vmo8dkke0sIaV1A==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/dayjs-business-days2/-/dayjs-business-days2-1.3.3.tgz", + "integrity": "sha512-ogedXtGep3W1rl/rhzrSbZU7cOA7Cr3s9HY7iiXDqkDv/LarERc1AEI3kvQ+sF43K1HLoXfByu2XQvU7jfqF9w==", "license": "MIT", "dependencies": { - "dayjs": "^1.11.19" + "dayjs": "^1.11.20" } }, "node_modules/debug": { @@ -11411,9 +11417,9 @@ "license": "ISC" }, "node_modules/graphql": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.1.tgz", - "integrity": "sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==", + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -11784,9 +11790,9 @@ } }, "node_modules/i18next": { - "version": "25.10.5", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.10.5.tgz", - "integrity": "sha512-jRnF7eRNsdcnh7AASSgaU3lj/8lJZuHkfsouetnLEDH0xxE1vVi7qhiJ9RhdSPUyzg4ltb7P7aXsFlTk9sxL2w==", + "version": "25.10.10", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.10.10.tgz", + "integrity": "sha512-cqUW2Z3EkRx7NqSyywjkgCLK7KLCL6IFVFcONG7nVYIJ3ekZ1/N5jUsihHV6Bq37NfhgtczxJcxduELtjTwkuQ==", "funding": [ { "type": "individual", @@ -11806,7 +11812,7 @@ "@babel/runtime": "^7.29.2" }, "peerDependencies": { - "typescript": "^5" + "typescript": "^5 || ^6" }, "peerDependenciesMeta": { "typescript": { @@ -15070,9 +15076,9 @@ "license": "MIT" }, "node_modules/posthog-js": { - "version": "1.363.2", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.363.2.tgz", - "integrity": "sha512-4ZEWMrymlFzjgDSmh25VeJQT//2XUFbfKqEPDNUW4dxcqWiVMo1+gJFy5YhJgVYS46OAXLbMcJgmuZBCnDIgVg==", + "version": "1.363.6", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.363.6.tgz", + "integrity": "sha512-eQ+Ypml3JOEMQWt21XEea6J8vD77TNyoz4Yv/xxjlTRja+ilmJtQw/SuVAB3BobjgHKYUomXX7Fc4gH/zTVpbg==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -15081,7 +15087,7 @@ "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-logs": "^0.208.0", "@posthog/core": "1.24.1", - "@posthog/types": "1.363.2", + "@posthog/types": "1.363.6", "core-js": "^3.38.1", "dompurify": "^3.3.2", "fflate": "^0.4.8", @@ -15512,16 +15518,16 @@ } }, "node_modules/react-grid-layout": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-2.2.2.tgz", - "integrity": "sha512-yNo9pxQWoxHWRAwHGSVT4DEGELYPyQ7+q9lFclb5jcqeFzva63/2F72CryS/jiTIr/SBIlTaDdyjqH+ODg8oBw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-2.2.3.tgz", + "integrity": "sha512-OAEJHBxmfuxQfVtZwRzmsokijGlBgzYIJ7MUlLk/VSa43SaGzu15w5D0P2RDrfX5EvP9POMbL6bFrai/huDzbQ==", "license": "MIT", "dependencies": { "clsx": "^2.1.1", "fast-equals": "^4.0.3", "prop-types": "^15.8.1", "react-draggable": "^4.4.6", - "react-resizable": "^3.0.5", + "react-resizable": "^3.1.3", "resize-observer-polyfill": "^1.5.1" }, "peerDependencies": { @@ -15545,9 +15551,9 @@ "license": "MIT" }, "node_modules/react-i18next": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.6.2.tgz", - "integrity": "sha512-/S/GPzElTqEi5o2kzd0/O2627hPDmE6OGhJCCwCfUaQ3syyu+kaYH8/PYFtZeWc25NzfxTN/2fD1QjvrTgrFfA==", + "version": "16.6.6", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.6.6.tgz", + "integrity": "sha512-ZgL2HUoW34UKUkOV7uSQFE1CDnRPD+tCR3ywSuWH7u2iapnz86U8Bi3Vrs620qNDzCf1F47NxglCEkchCTDOHw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", @@ -15555,9 +15561,9 @@ "use-sync-external-store": "^1.6.0" }, "peerDependencies": { - "i18next": ">= 25.6.2", + "i18next": ">= 25.10.9", "react": ">= 16.8.0", - "typescript": "^5" + "typescript": "^5 || ^6" }, "peerDependenciesMeta": { "react-dom": { @@ -15858,9 +15864,9 @@ } }, "node_modules/recharts": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.8.0.tgz", - "integrity": "sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.8.1.tgz", + "integrity": "sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg==", "license": "MIT", "workspaces": [ "www" @@ -18613,19 +18619,19 @@ } }, "node_modules/vitest": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.0.tgz", - "integrity": "sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", + "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.0", - "@vitest/mocker": "4.1.0", - "@vitest/pretty-format": "4.1.0", - "@vitest/runner": "4.1.0", - "@vitest/snapshot": "4.1.0", - "@vitest/spy": "4.1.0", - "@vitest/utils": "4.1.0", + "@vitest/expect": "4.1.2", + "@vitest/mocker": "4.1.2", + "@vitest/pretty-format": "4.1.2", + "@vitest/runner": "4.1.2", + "@vitest/snapshot": "4.1.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -18636,8 +18642,8 @@ "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.0.3", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "bin": { @@ -18653,13 +18659,13 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.0", - "@vitest/browser-preview": "4.1.0", - "@vitest/browser-webdriverio": "4.1.0", - "@vitest/ui": "4.1.0", + "@vitest/browser-playwright": "4.1.2", + "@vitest/browser-preview": "4.1.2", + "@vitest/browser-webdriverio": "4.1.2", + "@vitest/ui": "4.1.2", "happy-dom": "*", "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -18757,9 +18763,9 @@ } }, "node_modules/web-vitals": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.1.0.tgz", - "integrity": "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.2.0.tgz", + "integrity": "sha512-i2z98bEmaCqSDiHEDu+gHl/dmR4Q+TxFmG3/13KkMO+o8UxQzCqWaDRCiLgEa41nlO4VpXSI0ASa1xWmO9sBlA==", "license": "Apache-2.0" }, "node_modules/webidl-conversions": { diff --git a/client/package.json b/client/package.json index 4f03ad75d..295da31ab 100644 --- a/client/package.json +++ b/client/package.json @@ -8,7 +8,7 @@ "private": true, "proxy": "http://localhost:4000", "dependencies": { - "@amplitude/analytics-browser": "^2.37.0", + "@amplitude/analytics-browser": "^2.37.2", "@ant-design/pro-layout": "^7.22.6", "@apollo/client": "^4.1.6", "@dnd-kit/core": "^6.3.1", @@ -24,26 +24,26 @@ "@firebase/messaging": "^0.12.25", "@jsreport/browser-client": "^3.1.0", "@reduxjs/toolkit": "^2.11.2", - "@sentry/cli": "^3.3.3", - "@sentry/react": "^10.45.0", + "@sentry/cli": "^3.3.4", + "@sentry/react": "^10.46.0", "@sentry/vite-plugin": "^4.9.1", "@splitsoftware/splitio-react": "^2.6.1", "@tanem/react-nprogress": "^5.0.63", - "antd": "^6.3.3", + "antd": "^6.3.4", "apollo-link-logger": "^3.0.0", "autosize": "^6.0.1", "axios": "^1.13.6", "classnames": "^2.5.1", "css-box-model": "^1.2.1", "dayjs": "^1.11.20", - "dayjs-business-days2": "^1.3.2", + "dayjs-business-days2": "^1.3.3", "dinero.js": "^1.9.1", "dotenv": "^17.3.1", "env-cmd": "^11.0.0", "exifr": "^7.1.3", - "graphql": "^16.13.1", + "graphql": "^16.13.2", "graphql-ws": "^6.0.7", - "i18next": "^25.10.5", + "i18next": "^25.10.10", "i18next-browser-languagedetector": "^8.2.1", "immutability-helper": "^3.1.1", "libphonenumber-js": "^1.12.40", @@ -54,7 +54,7 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.71", - "posthog-js": "^1.363.2", + "posthog-js": "^1.363.6", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", @@ -64,8 +64,8 @@ "react-cookie": "^8.0.1", "react-dom": "^19.2.4", "react-grid-gallery": "^1.0.1", - "react-grid-layout": "^2.2.2", - "react-i18next": "^16.6.2", + "react-grid-layout": "^2.2.3", + "react-i18next": "^16.6.6", "react-icons": "^5.6.0", "react-image-lightbox": "^5.1.4", "react-markdown": "^10.1.0", @@ -77,7 +77,7 @@ "react-router-dom": "^7.13.2", "react-sticky": "^6.0.3", "react-virtuoso": "^4.18.3", - "recharts": "^3.8.0", + "recharts": "^3.8.1", "redux": "^5.0.1", "redux-actions": "^3.0.3", "redux-persist": "^6.0.0", @@ -89,7 +89,7 @@ "socket.io-client": "^4.8.3", "styled-components": "^6.3.12", "vite-plugin-ejs": "^1.7.0", - "web-vitals": "^5.1.0" + "web-vitals": "^5.2.0" }, "scripts": { "postinstall": "echo 'when updating react-big-calendar, remember to check to localizer in the calendar wrapper'", @@ -137,7 +137,7 @@ "@rollup/rollup-linux-x64-gnu": "4.6.1" }, "devDependencies": { - "@ant-design/icons": "^6.1.0", + "@ant-design/icons": "^6.1.1", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-react": "^7.28.5", "@dotenvx/dotenvx": "^1.57.2", @@ -170,7 +170,7 @@ "vite-plugin-node-polyfills": "^0.25.0", "vite-plugin-pwa": "^1.2.0", "vite-plugin-style-import": "^2.0.0", - "vitest": "^4.1.0", + "vitest": "^4.1.2", "workbox-window": "^7.4.0" } } diff --git a/package-lock.json b/package-lock.json index 53ba01a44..1aeb8663b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,16 @@ "version": "0.2.0", "license": "UNLICENSED", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.1016.0", - "@aws-sdk/client-elasticache": "^3.1016.0", - "@aws-sdk/client-s3": "^3.1016.0", - "@aws-sdk/client-secrets-manager": "^3.1016.0", - "@aws-sdk/client-ses": "^3.1016.0", - "@aws-sdk/client-sqs": "^3.1016.0", - "@aws-sdk/client-textract": "^3.1016.0", - "@aws-sdk/credential-provider-node": "^3.972.25", - "@aws-sdk/lib-storage": "^3.1016.0", - "@aws-sdk/s3-request-presigner": "^3.1016.0", + "@aws-sdk/client-cloudwatch-logs": "^3.1018.0", + "@aws-sdk/client-elasticache": "^3.1018.0", + "@aws-sdk/client-s3": "^3.1017.0", + "@aws-sdk/client-secrets-manager": "^3.1018.0", + "@aws-sdk/client-ses": "^3.1017.0", + "@aws-sdk/client-sqs": "^3.1017.0", + "@aws-sdk/client-textract": "^3.1017.0", + "@aws-sdk/credential-provider-node": "^3.972.26", + "@aws-sdk/lib-storage": "^3.1017.0", + "@aws-sdk/s3-request-presigner": "^3.1017.0", "@opensearch-project/opensearch": "^2.13.0", "@socket.io/admin-ui": "^0.5.1", "@socket.io/redis-adapter": "^8.3.0", @@ -27,7 +27,7 @@ "axios": "^1.13.6", "axios-curlirize": "^2.0.0", "better-queue": "^3.8.12", - "bullmq": "^5.71.0", + "bullmq": "^5.71.1", "chart.js": "^4.5.1", "cloudinary": "^2.9.0", "compression": "^1.8.1", @@ -82,7 +82,7 @@ "p-limit": "^3.1.0", "prettier": "^3.8.1", "supertest": "^7.2.2", - "vitest": "^4.1.1" + "vitest": "^4.1.2" }, "engines": { "node": ">=22.13.0", @@ -292,24 +292,24 @@ } }, "node_modules/@aws-sdk/client-cloudwatch-logs": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.1016.0.tgz", - "integrity": "sha512-ufI94kxGQDZJ+0EsnOjF3ZtTBYF2ZArfb5a8lExFRPwat99pBBAWny8tVpBT1bRfjlxnbBjUTH+ZThmzw1VgJw==", + "version": "3.1018.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.1018.0.tgz", + "integrity": "sha512-y1Siaj4PP7PRDtUyjYHQnEl6l2uU2h8zApqcxZnP/ThTy745JFRAKbJRMoAzmV9dPPub3ymCuxVnXm3XYWFbtg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-node": "^3.972.25", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-node": "^3.972.26", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/eventstream-serde-browser": "^4.2.12", @@ -345,24 +345,24 @@ } }, "node_modules/@aws-sdk/client-elasticache": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.1016.0.tgz", - "integrity": "sha512-Y9hbJsU7QWX1dFMch1zOLRr7Ym6u8jAStP2rKluF9CQAkDSJGIO0xa6IdA2vjnrKh5H2tjC3A35zKJ8dKeJ9fQ==", + "version": "3.1018.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.1018.0.tgz", + "integrity": "sha512-SPkP6CZ8C6CPZmyz0CithnX+Q/GztW0AbjbuUyQkycHSkEAZ7H+DeH+CzzwN1/8rWMd7WJEF7CjE5WFatYh4Qg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-node": "^3.972.25", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-node": "^3.972.26", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", @@ -396,9 +396,9 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1016.0.tgz", - "integrity": "sha512-E9umet1PolP6I8TpjQQ2W88aIIguyiRQJE98ag6N6QeLgjSZsF+h9l3KclwCRvqUFU68x+HRwrgXxvbIBVFLbA==", + "version": "3.1017.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1017.0.tgz", + "integrity": "sha512-WmmPn2NEfkxxzDA0D7rlf3f32gqmqpaTABhlz4EnZbg/RfNWaOu3ecaI5xY0ragrLhvPB+1aPN9GRDnivJukvg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", @@ -413,11 +413,11 @@ "@aws-sdk/middleware-location-constraint": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-sdk-s3": "^3.972.24", + "@aws-sdk/middleware-sdk-s3": "^3.972.25", "@aws-sdk/middleware-ssec": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/region-config-resolver": "^3.972.9", - "@aws-sdk/signature-v4-multi-region": "^3.996.12", + "@aws-sdk/signature-v4-multi-region": "^3.996.13", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", @@ -462,24 +462,24 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.1016.0.tgz", - "integrity": "sha512-gDo0HdDDSUVJZICI5eYSkiTrDyKfzZhul88j0+1+JSQhiB6Yld+xVSsRHewkU0yc3w1adbHjQ9p9b0gv9sz04A==", + "version": "3.1018.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.1018.0.tgz", + "integrity": "sha512-svV2NpjS+SfMVk8O0b1thuzNlQ5GhIgxAawIPOUCuLf1fLpGhGNgFcgUXlTnkcAoytZpfFdJTBq5JxtV0AgL/A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-node": "^3.972.25", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-node": "^3.972.26", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", @@ -512,9 +512,9 @@ } }, "node_modules/@aws-sdk/client-ses": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.1016.0.tgz", - "integrity": "sha512-vIGhTe07ihJs80SIvtWqETrFC0oLVJZ9+mtNuTs1WFeDg8YBGQU1ryaExi9spH2dibE/s4gKhBMFitWcTh1vUQ==", + "version": "3.1017.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.1017.0.tgz", + "integrity": "sha512-2PWXGyniy/j1TZ9sixv5fbudedXV9RihJGq+RjmmNEnlse+oGN7XByFCPLACAvi7Mgr9jjW8Vj1iWB9ezS1zJQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -563,9 +563,9 @@ } }, "node_modules/@aws-sdk/client-sqs": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1016.0.tgz", - "integrity": "sha512-31OP7m98ZXuHF7DbOapmjp2hJyrduwwNaZPYrPyDcSTZ+60Qg+F/AUA6snw+QpOPfVnxFqkofhxyBKPPbaQWig==", + "version": "3.1017.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1017.0.tgz", + "integrity": "sha512-Y5FRcAo1lkeOMp6+q7bGSAP3NUdR61VLYzW9J+ksz1KhHLQfCQEzNaTzjwIJyEW2FjJ8w08b/tcScG0Fde0NiA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -615,9 +615,9 @@ } }, "node_modules/@aws-sdk/client-textract": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.1016.0.tgz", - "integrity": "sha512-OvG7BO0oBNX2t684v3gB00oL19cm7zxcA00RuacirVciLmhEEokqbcfHa00aa8X1aeiM89q1ZoEKOcd1BnSTFQ==", + "version": "3.1017.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.1017.0.tgz", + "integrity": "sha512-uGwy8wO3qLlvO8OSfnjchBlDYAQx6iHmCOPlEPDF+hhBpd3IUAOXImd0MXK1fbn9gZ/i1i8//1f2UC/PxEah4w==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -665,13 +665,13 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.973.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.24.tgz", - "integrity": "sha512-vvf82RYQu2GidWAuQq+uIzaPz9V0gSCXVqdVzRosgl5rXcspXOpSD3wFreGGW6AYymPr97Z69kjVnLePBxloDw==", + "version": "3.973.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.25.tgz", + "integrity": "sha512-TNrx7eq6nKNOO62HWPqoBqPLXEkW6nLZQGwjL6lq1jZtigWYbK1NbCnT7mKDzbLMHZfuOECUt3n6CzxjUW9HWQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", - "@aws-sdk/xml-builder": "^3.972.15", + "@aws-sdk/xml-builder": "^3.972.16", "@smithy/core": "^3.23.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", @@ -702,12 +702,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.22", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.22.tgz", - "integrity": "sha512-cXp0VTDWT76p3hyK5D51yIKEfpf6/zsUvMfaB8CkyqadJxMQ8SbEeVroregmDlZbtG31wkj9ei0WnftmieggLg==", + "version": "3.972.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.23.tgz", + "integrity": "sha512-EamaclJcCEaPHp6wiVknNMM2RlsPMjAHSsYSFLNENBM8Wz92QPc6cOn3dif6vPDQt0Oo4IEghDy3NMDCzY/IvA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", + "@aws-sdk/core": "^3.973.25", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", @@ -718,12 +718,12 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.24.tgz", - "integrity": "sha512-h694K7+tRuepSRJr09wTvQfaEnjzsKZ5s7fbESrVds02GT/QzViJ94/HCNwM7bUfFxqpPXHxulZfL6Cou0dwPg==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.25.tgz", + "integrity": "sha512-qPymamdPcLp6ugoVocG1y5r69ScNiRzb0hogX25/ij+Wz7c7WnsgjLTaz7+eB5BfRxeyUwuw5hgULMuwOGOpcw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", + "@aws-sdk/core": "^3.973.25", "@aws-sdk/types": "^3.973.6", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.5.0", @@ -739,19 +739,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.24.tgz", - "integrity": "sha512-O46fFmv0RDFWiWEA9/e6oW92BnsyAXuEgTTasxHligjn2RCr9L/DK773m/NoFaL3ZdNAUz8WxgxunleMnHAkeQ==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.25.tgz", + "integrity": "sha512-G/v/PicYn4qs7xCv4vT6I4QKdvMyRvsgIFNBkUueCGlbLo7/PuKcNKgUozmLSsaYnE7jIl6UrfkP07EUubr48w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-env": "^3.972.22", - "@aws-sdk/credential-provider-http": "^3.972.24", - "@aws-sdk/credential-provider-login": "^3.972.24", - "@aws-sdk/credential-provider-process": "^3.972.22", - "@aws-sdk/credential-provider-sso": "^3.972.24", - "@aws-sdk/credential-provider-web-identity": "^3.972.24", - "@aws-sdk/nested-clients": "^3.996.14", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-env": "^3.972.23", + "@aws-sdk/credential-provider-http": "^3.972.25", + "@aws-sdk/credential-provider-login": "^3.972.25", + "@aws-sdk/credential-provider-process": "^3.972.23", + "@aws-sdk/credential-provider-sso": "^3.972.25", + "@aws-sdk/credential-provider-web-identity": "^3.972.25", + "@aws-sdk/nested-clients": "^3.996.15", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -764,13 +764,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.24.tgz", - "integrity": "sha512-sIk8oa6AzDoUhxsR11svZESqvzGuXesw62Rl2oW6wguZx8i9cdGCvkFg+h5K7iucUZP8wyWibUbJMc+J66cu5g==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.25.tgz", + "integrity": "sha512-bUdmyJeVua7SmD+g2a65x2/0YqsGn4K2k4GawI43js0odaNaIzpIhLtHehUnPnfLuyhPWbJR1NyuIO4iMVfM0w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/nested-clients": "^3.996.14", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/nested-clients": "^3.996.15", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", @@ -783,17 +783,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.25.tgz", - "integrity": "sha512-m7dR0Dsva2P+VUpL+VkC0WwiDby5pgmWXkRVDB5rlwv0jXJrQJf7YMtCoM8Wjk0H9jPeCYOxOXXcIgp/qp5Alg==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.26.tgz", + "integrity": "sha512-5XSK74rCXxCNj+UWv5bjq1EccYkiyW4XOHFU9NXnsCcQF8dJuHdua1qFg0m/LIwVOWklbKsrcnMtfxIXwgvwzQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.22", - "@aws-sdk/credential-provider-http": "^3.972.24", - "@aws-sdk/credential-provider-ini": "^3.972.24", - "@aws-sdk/credential-provider-process": "^3.972.22", - "@aws-sdk/credential-provider-sso": "^3.972.24", - "@aws-sdk/credential-provider-web-identity": "^3.972.24", + "@aws-sdk/credential-provider-env": "^3.972.23", + "@aws-sdk/credential-provider-http": "^3.972.25", + "@aws-sdk/credential-provider-ini": "^3.972.25", + "@aws-sdk/credential-provider-process": "^3.972.23", + "@aws-sdk/credential-provider-sso": "^3.972.25", + "@aws-sdk/credential-provider-web-identity": "^3.972.25", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -806,12 +806,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.22", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.22.tgz", - "integrity": "sha512-Os32s8/4gTZjBk5BtoS/cuTILaj+K72d0dVG7TCJX/fC4598cxwLDmf1AEHEpER5oL3K//yETjvFaz0V8oO5Xw==", + "version": "3.972.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.23.tgz", + "integrity": "sha512-IL/TFW59++b7MpHserjUblGrdP5UXy5Ekqqx1XQkERXBFJcZr74I7VaSrQT5dxdRMU16xGK4L0RQ5fQG1pMgnA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", + "@aws-sdk/core": "^3.973.25", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -823,14 +823,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.24.tgz", - "integrity": "sha512-PaFv7snEfypU2yXkpvfyWgddEbDLtgVe51wdZlinhc2doubBjUzJZZpgwuF2Jenl1FBydMhNpMjD6SBUM3qdSA==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.25.tgz", + "integrity": "sha512-r4OGAfHmlEa1QBInHWz+/dOD4tRljcjVNQe9wJ/AJNXEj1d2WdsRLppvRFImRV6FIs+bTpjtL0a23V5ELQpRPw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/nested-clients": "^3.996.14", - "@aws-sdk/token-providers": "3.1015.0", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/nested-clients": "^3.996.15", + "@aws-sdk/token-providers": "3.1018.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -842,13 +842,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.24.tgz", - "integrity": "sha512-J6H4R1nvr3uBTqD/EeIPAskrBtET4WFfNhpFySr2xW7bVZOXpQfPjrLSIx65jcNjBmLXzWq8QFLdVoGxiGG/SA==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.25.tgz", + "integrity": "sha512-uM1OtoJgj+yK3MlAmda8uR9WJJCdm5HB25JyCeFL5a5q1Fbafalf4uKidFO3/L0Pgd+Fsflkb4cM6jHIswi3QQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/nested-clients": "^3.996.14", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/nested-clients": "^3.996.15", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -860,14 +860,16 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.1016.0.tgz", - "integrity": "sha512-zSHj28SAKCinrxUiJp2fsAFMqc4AWM9WNOOMayysTgOAAticMip9nVcsbcDJCh0PCB9U+ikZdW7OWSCuw7E5xA==", + "version": "3.1017.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.1017.0.tgz", + "integrity": "sha512-sWUsr3c46WWZxmBAFSYpI+Gr8tFhP+L3h4XmXZxAyWimHpIeW5+A4wR9SAYohBL/+pPMlN9PEYj3H+KfsYCAyA==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", + "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", + "@smithy/types": "^4.13.1", "buffer": "5.6.0", "events": "3.3.0", "stream-browserify": "3.0.0", @@ -877,7 +879,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.1016.0" + "@aws-sdk/client-s3": "^3.1017.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { @@ -982,9 +984,9 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.8.tgz", - "integrity": "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.9.tgz", + "integrity": "sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -998,12 +1000,12 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.24.tgz", - "integrity": "sha512-4sXxVC/enYgMkZefNMOzU6C6KtAXEvwVJLgNcUx1dvROH6GvKB5Sm2RGnGzTp0/PwkibIyMw4kOzF8tbLfaBAQ==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.26.tgz", + "integrity": "sha512-5q7UGSTtt7/KF0Os8wj2VZtlLxeWJVb0e2eDrDJlWot2EIxUNKDDMPFq/FowUqrwZ40rO2bu6BypxaKNvQhI+g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", + "@aws-sdk/core": "^3.973.25", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-arn-parser": "^3.972.3", "@smithy/core": "^3.23.12", @@ -1054,12 +1056,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.25.tgz", - "integrity": "sha512-QxiMPofvOt8SwSynTOmuZfvvPM1S9QfkESBxB22NMHTRXCJhR5BygLl8IXfC4jELiisQgwsgUby21GtXfX3f/g==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.26.tgz", + "integrity": "sha512-AilFIh4rI/2hKyyGN6XrB0yN96W2o7e7wyrPWCM6QjZM1mcC/pVkW3IWWRvuBWMpVP8Fg+rMpbzeLQ6dTM4gig==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", + "@aws-sdk/core": "^3.973.25", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.12", @@ -1073,23 +1075,23 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.996.14", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.14.tgz", - "integrity": "sha512-fSESKvh1VbfjtV3QMnRkCPZWkUbQof6T/DOpiLp33yP2wA+rbwwnZeG3XT3Ekljgw2I8X4XaQPnw+zSR8yxJ5Q==", + "version": "3.996.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.15.tgz", + "integrity": "sha512-k6WAVNkub5DrU46iPQvH1m0xc1n+0dX79+i287tYJzf5g1yU2rX3uf4xNeL5JvK1NtYgfwMnsxHqhOXFBn367A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", + "@aws-sdk/core": "^3.973.25", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", @@ -1122,9 +1124,9 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.9", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.9.tgz", - "integrity": "sha512-eQ+dFU05ZRC/lC2XpYlYSPlXtX3VT8sn5toxN2Fv7EXlMoA2p9V7vUBKqHunfD4TRLpxUq8Y8Ol/nCqiv327Ng==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.10.tgz", + "integrity": "sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1138,12 +1140,12 @@ } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.1016.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1016.0.tgz", - "integrity": "sha512-BROPno9Y8xYltQu5k1AupDPaWdFR9Ig8zfDSZzTE+MTvKpif6wyAHFJRW0C0xIwZckaHya2oFoTZbPHtyIlQkg==", + "version": "3.1017.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1017.0.tgz", + "integrity": "sha512-PSR8VJEkCy53uhAeuvht6ub3kzfdqoTAmLliQJ63MkC/1FuMmrmqWRGoZuzZvAbpzTcZtuibSGvawDa47gsckA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/signature-v4-multi-region": "^3.996.12", + "@aws-sdk/signature-v4-multi-region": "^3.996.13", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-format-url": "^3.972.8", "@smithy/middleware-endpoint": "^4.4.27", @@ -1157,12 +1159,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.12", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.12.tgz", - "integrity": "sha512-abRObSqjVeKUUHIZfAp78PTYrEsxCgVKDs/YET357pzT5C02eDDEvmWyeEC2wglWcYC4UTbBFk22gd2YJUlCQg==", + "version": "3.996.14", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.14.tgz", + "integrity": "sha512-4nZSrBr1NO+48HCM/6BRU8mnRjuHZjcpziCvLXZk5QVftwWz5Mxqbhwdz4xf7WW88buaTB8uRO2MHklSX1m0vg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.24", + "@aws-sdk/middleware-sdk-s3": "^3.972.26", "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", @@ -1174,13 +1176,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.1015.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1015.0.tgz", - "integrity": "sha512-3OSD4y110nisRhHzFOjoEeHU4GQL4KpzkX9PxzWaiZe0Yg2+thZKM0Pn9DjYwezH5JYfh/K++xK/SE0IHGrmCQ==", + "version": "3.1018.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1018.0.tgz", + "integrity": "sha512-97OPNJHy37wmGOX44xAcu6E9oSTiqK9uPcy/fWpmN5uB3JuEp1f6x60Xot/jp+FxwhQWIFUsVJFnm3QKqt7T6Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/nested-clients": "^3.996.14", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/nested-clients": "^3.996.15", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -1272,12 +1274,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.973.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.11.tgz", - "integrity": "sha512-1qdXbXo2s5MMLpUvw00284LsbhtlQ4ul7Zzdn5n+7p4WVgCMLqhxImpHIrjSoc72E/fyc4Wq8dLtUld2Gsh+lA==", + "version": "3.973.12", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.12.tgz", + "integrity": "sha512-8phW0TS8ntENJgDcFewYT/Q8dOmarpvSxEjATu2GUBAutiHr++oEGCiBUwxslCMNvwW2cAPZNT53S/ym8zm/gg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.25", + "@aws-sdk/middleware-user-agent": "^3.972.26", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", @@ -1297,9 +1299,9 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.15.tgz", - "integrity": "sha512-PxMRlCFNiQnke9YR29vjFQwz4jq+6Q04rOVFeTDR2K7Qpv9h9FOWOxG+zJjageimYbWqE3bTuLjmryWHAWbvaA==", + "version": "3.972.16", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.16.tgz", + "integrity": "sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -3984,31 +3986,31 @@ "license": "MIT" }, "node_modules/@vitest/expect": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.1.tgz", - "integrity": "sha512-xAV0fqBTk44Rn6SjJReEQkHP3RrqbJo6JQ4zZ7/uVOiJZRarBtblzrOfFIZeYUrukp2YD6snZG6IBqhOoHTm+A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", + "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.1", - "@vitest/utils": "4.1.1", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", "chai": "^6.2.2", - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/mocker": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.1.tgz", - "integrity": "sha512-h3BOylsfsCLPeceuCPAAJ+BvNwSENgJa4hXoXu4im0bs9Lyp4URc4JYK4pWLZ4pG/UQn7AT92K6IByi6rE6g3A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", + "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.1", + "@vitest/spy": "4.1.2", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -4029,26 +4031,26 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.1.tgz", - "integrity": "sha512-GM+TEQN5WhOygr1lp7skeVjdLPqqWMHsfzXrcHAqZJi/lIVh63H0kaRCY8MDhNWikx19zBUK8ceaLB7X5AH9NQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.1.tgz", - "integrity": "sha512-f7+FPy75vN91QGWsITueq0gedwUZy1fLtHOCMeQpjs8jTekAHeKP80zfDEnhrleviLHzVSDXIWuCIOFn3D3f8A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", + "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.1", + "@vitest/utils": "4.1.2", "pathe": "^2.0.3" }, "funding": { @@ -4056,14 +4058,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.1.tgz", - "integrity": "sha512-kMVSgcegWV2FibXEx9p9WIKgje58lcTbXgnJixfcg15iK8nzCXhmalL0ZLtTWLW9PH1+1NEDShiFFedB3tEgWg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", + "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.1", - "@vitest/utils": "4.1.1", + "@vitest/pretty-format": "4.1.2", + "@vitest/utils": "4.1.2", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -4072,9 +4074,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.1.tgz", - "integrity": "sha512-6Ti/KT5OVaiupdIZEuZN7l3CZcR0cxnxt70Z0//3CtwgObwA6jZhmVBA3yrXSVN3gmwjgd7oDNLlsXz526gpRA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", + "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", "dev": true, "license": "MIT", "funding": { @@ -4082,15 +4084,15 @@ } }, "node_modules/@vitest/utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.1.tgz", - "integrity": "sha512-cNxAlaB3sHoCdL6pj6yyUXv9Gry1NHNg0kFTXdvSIZXLHsqKH7chiWOkwJ5s5+d/oMwcoG9T0bKU38JZWKusrQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.1", + "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -4719,13 +4721,13 @@ } }, "node_modules/bullmq": { - "version": "5.71.0", - "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.71.0.tgz", - "integrity": "sha512-aeNWh4drsafSKnAJeiNH/nZP/5O8ZdtdMbnOPZmpjXj7NZUP5YC901U3bIH41iZValm7d1i3c34ojv7q31m30w==", + "version": "5.71.1", + "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.71.1.tgz", + "integrity": "sha512-kOBfdcsHmO6wwmIjpersoVdYQ7jkjTgky4Yop0loc7QwSdgxliSzD69U9ijZuRrkyCJwz5p5eqxeGeQkJ0YGZQ==", "license": "MIT", "dependencies": { "cron-parser": "4.9.0", - "ioredis": "5.9.3", + "ioredis": "5.10.1", "msgpackr": "1.11.5", "node-abort-controller": "3.1.1", "semver": "7.7.4", @@ -4733,36 +4735,6 @@ "uuid": "11.1.0" } }, - "node_modules/bullmq/node_modules/@ioredis/commands": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.0.tgz", - "integrity": "sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==", - "license": "MIT" - }, - "node_modules/bullmq/node_modules/ioredis": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.9.3.tgz", - "integrity": "sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA==", - "license": "MIT", - "dependencies": { - "@ioredis/commands": "1.5.0", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -11620,19 +11592,19 @@ } }, "node_modules/vitest": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.1.tgz", - "integrity": "sha512-yF+o4POL41rpAzj5KVILUxm1GCjKnELvaqmU9TLLUbMfDzuN0UpUR9uaDs+mCtjPe+uYPksXDRLQGGPvj1cTmA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", + "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.1", - "@vitest/mocker": "4.1.1", - "@vitest/pretty-format": "4.1.1", - "@vitest/runner": "4.1.1", - "@vitest/snapshot": "4.1.1", - "@vitest/spy": "4.1.1", - "@vitest/utils": "4.1.1", + "@vitest/expect": "4.1.2", + "@vitest/mocker": "4.1.2", + "@vitest/pretty-format": "4.1.2", + "@vitest/runner": "4.1.2", + "@vitest/snapshot": "4.1.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -11643,7 +11615,7 @@ "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.0.3", + "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, @@ -11660,10 +11632,10 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.1", - "@vitest/browser-preview": "4.1.1", - "@vitest/browser-webdriverio": "4.1.1", - "@vitest/ui": "4.1.1", + "@vitest/browser-playwright": "4.1.2", + "@vitest/browser-preview": "4.1.2", + "@vitest/browser-webdriverio": "4.1.2", + "@vitest/ui": "4.1.2", "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" diff --git a/package.json b/package.json index 0c9d30c2f..3e144902c 100644 --- a/package.json +++ b/package.json @@ -18,16 +18,16 @@ "job-totals-fixtures:local": "docker exec node-app /usr/bin/node /app/download-job-totals-fixtures.js" }, "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.1016.0", - "@aws-sdk/client-elasticache": "^3.1016.0", - "@aws-sdk/client-s3": "^3.1016.0", - "@aws-sdk/client-secrets-manager": "^3.1016.0", - "@aws-sdk/client-ses": "^3.1016.0", - "@aws-sdk/client-sqs": "^3.1016.0", - "@aws-sdk/client-textract": "^3.1016.0", - "@aws-sdk/credential-provider-node": "^3.972.25", - "@aws-sdk/lib-storage": "^3.1016.0", - "@aws-sdk/s3-request-presigner": "^3.1016.0", + "@aws-sdk/client-cloudwatch-logs": "^3.1018.0", + "@aws-sdk/client-elasticache": "^3.1018.0", + "@aws-sdk/client-s3": "^3.1017.0", + "@aws-sdk/client-secrets-manager": "^3.1018.0", + "@aws-sdk/client-ses": "^3.1017.0", + "@aws-sdk/client-sqs": "^3.1017.0", + "@aws-sdk/client-textract": "^3.1017.0", + "@aws-sdk/credential-provider-node": "^3.972.26", + "@aws-sdk/lib-storage": "^3.1017.0", + "@aws-sdk/s3-request-presigner": "^3.1017.0", "@opensearch-project/opensearch": "^2.13.0", "@socket.io/admin-ui": "^0.5.1", "@socket.io/redis-adapter": "^8.3.0", @@ -36,7 +36,7 @@ "axios": "^1.13.6", "axios-curlirize": "^2.0.0", "better-queue": "^3.8.12", - "bullmq": "^5.71.0", + "bullmq": "^5.71.1", "chart.js": "^4.5.1", "cloudinary": "^2.9.0", "compression": "^1.8.1", @@ -91,6 +91,6 @@ "p-limit": "^3.1.0", "prettier": "^3.8.1", "supertest": "^7.2.2", - "vitest": "^4.1.1" + "vitest": "^4.1.2" } } From 5d95275c0b0df96034858cf2fb69760547544013 Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 30 Mar 2026 15:07:57 -0400 Subject: [PATCH 15/16] feature/IO-3624-Shop-Config-UX-Refresh - bump deps --- client/package-lock.json | 251 ++++++++++++++++++++------------------- client/package.json | 18 +-- package-lock.json | 234 ++++++++++++++++++------------------ package.json | 22 ++-- 4 files changed, 268 insertions(+), 257 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 9e8d4ef46..11e3ce3bd 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,7 +9,7 @@ "version": "0.2.1", "hasInstallScript": true, "dependencies": { - "@amplitude/analytics-browser": "^2.37.2", + "@amplitude/analytics-browser": "^2.38.0", "@ant-design/pro-layout": "^7.22.6", "@apollo/client": "^4.1.6", "@dnd-kit/core": "^6.3.1", @@ -25,15 +25,15 @@ "@firebase/messaging": "^0.12.25", "@jsreport/browser-client": "^3.1.0", "@reduxjs/toolkit": "^2.11.2", - "@sentry/cli": "^3.3.4", + "@sentry/cli": "^3.3.5", "@sentry/react": "^10.46.0", "@sentry/vite-plugin": "^4.9.1", "@splitsoftware/splitio-react": "^2.6.1", "@tanem/react-nprogress": "^5.0.63", - "antd": "^6.3.4", + "antd": "^6.3.5", "apollo-link-logger": "^3.0.0", "autosize": "^6.0.1", - "axios": "^1.13.6", + "axios": "^1.14.0", "classnames": "^2.5.1", "css-box-model": "^1.2.1", "dayjs": "^1.11.20", @@ -43,11 +43,11 @@ "env-cmd": "^11.0.0", "exifr": "^7.1.3", "graphql": "^16.13.2", - "graphql-ws": "^6.0.7", + "graphql-ws": "^6.0.8", "i18next": "^25.10.10", "i18next-browser-languagedetector": "^8.2.1", "immutability-helper": "^3.1.1", - "libphonenumber-js": "^1.12.40", + "libphonenumber-js": "^1.12.41", "lightningcss": "^1.32.0", "logrocket": "^12.1.0", "markerjs2": "^2.32.7", @@ -55,7 +55,7 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.71", - "posthog-js": "^1.363.6", + "posthog-js": "^1.364.2", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", @@ -96,7 +96,7 @@ "@ant-design/icons": "^6.1.1", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-react": "^7.28.5", - "@dotenvx/dotenvx": "^1.57.2", + "@dotenvx/dotenvx": "^1.59.1", "@emotion/babel-plugin": "^11.13.5", "@emotion/react": "^11.14.0", "@eslint/js": "^9.39.2", @@ -123,7 +123,7 @@ "vite": "^7.3.1", "vite-plugin-babel": "^1.6.0", "vite-plugin-eslint": "^1.8.1", - "vite-plugin-node-polyfills": "^0.25.0", + "vite-plugin-node-polyfills": "^0.26.0", "vite-plugin-pwa": "^1.2.0", "vite-plugin-style-import": "^2.0.0", "vitest": "^4.1.2", @@ -151,18 +151,18 @@ "license": "MIT" }, "node_modules/@amplitude/analytics-browser": { - "version": "2.37.2", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-browser/-/analytics-browser-2.37.2.tgz", - "integrity": "sha512-4us5NDIsxsVVi9s6ojS94CO7D5CGcxSpAQg+cPmnATtxCFagxfXfO9I59h2veQ0ohL2nO45nVTKR7RrOyGxA/A==", + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-browser/-/analytics-browser-2.38.0.tgz", + "integrity": "sha512-MhqyEkr1gGAR4s4GSSflDhFVheIx9Nv3FfElQu9NlNrXB2Hh3BEOyVgdK7hgfi6NJwFyfw30+t5lym+njtA8hA==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.1", - "@amplitude/plugin-autocapture-browser": "1.24.2", - "@amplitude/plugin-custom-enrichment-browser": "0.1.1", - "@amplitude/plugin-network-capture-browser": "1.9.10", - "@amplitude/plugin-page-url-enrichment-browser": "0.7.2", - "@amplitude/plugin-page-view-tracking-browser": "2.9.3", - "@amplitude/plugin-web-vitals-browser": "1.1.25", + "@amplitude/analytics-core": "2.44.0", + "@amplitude/plugin-autocapture-browser": "1.25.0", + "@amplitude/plugin-custom-enrichment-browser": "0.1.2", + "@amplitude/plugin-network-capture-browser": "1.9.11", + "@amplitude/plugin-page-url-enrichment-browser": "0.7.3", + "@amplitude/plugin-page-view-tracking-browser": "2.9.4", + "@amplitude/plugin-web-vitals-browser": "1.1.26", "tslib": "^2.4.1" } }, @@ -173,9 +173,9 @@ "license": "MIT" }, "node_modules/@amplitude/analytics-core": { - "version": "2.43.1", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-core/-/analytics-core-2.43.1.tgz", - "integrity": "sha512-8Qi0SZ49wNAcLOmtvk6/+a5FvV351G7ctMPyP9A2saZb5I106gb00VWiz1ENQdUG3cNse0iedSlNCjRbX0eksg==", + "version": "2.44.0", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-core/-/analytics-core-2.44.0.tgz", + "integrity": "sha512-z9QuTxLqEQ8KIeAT6Vmy6K48rP9TUmjnb4GwUMYoV/fxu3B9ClTaN18zqXQMmDw9HwUiIreHiVbwTb7OQRN5aA==", "license": "MIT", "dependencies": { "@amplitude/analytics-connector": "^1.6.4", @@ -186,62 +186,62 @@ } }, "node_modules/@amplitude/plugin-autocapture-browser": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-autocapture-browser/-/plugin-autocapture-browser-1.24.2.tgz", - "integrity": "sha512-IXcCEpd0J5M+Cz1u7RbAANfKr5D5jqkpVrumcOA+zYdmvrd7/1quuFHvR1Dnhk1fipeSwU5TEpadE/RBS80VvQ==", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-autocapture-browser/-/plugin-autocapture-browser-1.25.0.tgz", + "integrity": "sha512-YuWsz8XmJuKu3NlMxkvlhLey/5tGCeOwwfsROHficR0yDWO9gNG0WtHl7A0Pw1PUc9iaXjqfG2AjYumAtiq16Q==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.1", + "@amplitude/analytics-core": "2.44.0", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-custom-enrichment-browser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-custom-enrichment-browser/-/plugin-custom-enrichment-browser-0.1.1.tgz", - "integrity": "sha512-RacUi5M9h1bDUvfRCK3561NP8gK7VuNycvXLPpY/2LDIdzkLMe9sNowghKbr/uLdIySiVcPa+KHCBRfFaJzfJA==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-custom-enrichment-browser/-/plugin-custom-enrichment-browser-0.1.2.tgz", + "integrity": "sha512-ZX9BKqs1E1OI7l7QCGu9JnB/1kqLN+zqIePgM2tuEhZNFQJaw4NhAMUaMRqvNnaCkHlmpVRISzSj/4D3tWMRtA==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.1", + "@amplitude/analytics-core": "2.44.0", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-network-capture-browser": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-network-capture-browser/-/plugin-network-capture-browser-1.9.10.tgz", - "integrity": "sha512-HubSKD8uzb5cLCGWeiLekC9Qv9NHcIwDQiV34Ju1cFrhTON78xfcg1Wz91aIFX+Hub94zqRv8kE/vjZ1ZU+B6Q==", + "version": "1.9.11", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-network-capture-browser/-/plugin-network-capture-browser-1.9.11.tgz", + "integrity": "sha512-49o3zYnKUmRdrxgAEcr1iHnXR1um40e1icO0hzugSq04k19hs27zcl3zpEk9geO+nNKwO744ryE1q93gqVbHrQ==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.1", + "@amplitude/analytics-core": "2.44.0", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-page-url-enrichment-browser": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-url-enrichment-browser/-/plugin-page-url-enrichment-browser-0.7.2.tgz", - "integrity": "sha512-CLcK/e9O0oa5eWruWe6UHhcqyVYK3JG4wsHR+WShG200VqLpNgsDxEM+qNWVYp5Q+aadVYOusik7exxkQayjUg==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-url-enrichment-browser/-/plugin-page-url-enrichment-browser-0.7.3.tgz", + "integrity": "sha512-3UZq/zKg4lcsRgziWAPSEeaUsNsbyjjxmsAE9kSDi/hIj5RaWnwWhY6TGhv45UAReugTA4vVZyFRg9btf3c/Fg==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.1", + "@amplitude/analytics-core": "2.44.0", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-page-view-tracking-browser": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.9.3.tgz", - "integrity": "sha512-bhsQkGI7D2AQ5EwPLYtZKxdI1jrA/la41ClUX2nHjvmDpY6i7zHVmi7L7xEce4JIF0tb5wUHIvnMt/C2yPBJvA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.9.4.tgz", + "integrity": "sha512-J16zmEadnzNpkHSmzpTiQN2q9pGJ/4SkHONA9O8KxUsMU/MYTDgof3rAYY/w5B5rmvdxfMRCjqWtvnkizzgZ6w==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.1", + "@amplitude/analytics-core": "2.44.0", "tslib": "^2.4.1" } }, "node_modules/@amplitude/plugin-web-vitals-browser": { - "version": "1.1.25", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-web-vitals-browser/-/plugin-web-vitals-browser-1.1.25.tgz", - "integrity": "sha512-Ror17zbsSx4uroXdAn+53agTqaZ865U/gjwTgoAb9SdOKPmFGC6Xy+ntxaDCSSQYYayb/0+/g0NYe8WC3OuwCQ==", + "version": "1.1.26", + "resolved": "https://registry.npmjs.org/@amplitude/plugin-web-vitals-browser/-/plugin-web-vitals-browser-1.1.26.tgz", + "integrity": "sha512-wiD4vy+f2fepr+8Lnn26TYYjDEnWsmlGhJog99x+xfbZ/D+stGdaCIOz5AOjU1TpTRvxvamEu2XuOh+8EZOCSA==", "license": "MIT", "dependencies": { - "@amplitude/analytics-core": "2.43.1", + "@amplitude/analytics-core": "2.44.0", "tslib": "^2.4.1", "web-vitals": "5.1.0" } @@ -2594,9 +2594,9 @@ } }, "node_modules/@dotenvx/dotenvx": { - "version": "1.57.2", - "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.57.2.tgz", - "integrity": "sha512-lv9+UZPnl/KOvShepevLWm3+/wc1It5kgO5Q580evnvOFMZcgKVEYFwxlL7Ohl9my1yjTsWo28N3PJYUEO8wFQ==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.59.1.tgz", + "integrity": "sha512-Qg+meC+XFxliuVSDlEPkKnaUjdaJKK6FNx/Wwl2UxhQR8pyPIuLhMavsF7ePdB9qFZUWV1jEK3ckbJir/WmF4w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4870,18 +4870,18 @@ } }, "node_modules/@posthog/core": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.24.1.tgz", - "integrity": "sha512-e8AciAnc6MRFws89ux8lJKFAaI03yEon0ASDoUO7yS91FVqbUGXYekObUUR3LHplcg+pmyiJBI0jolY0SFbGRA==", + "version": "1.24.4", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.24.4.tgz", + "integrity": "sha512-S+TolwBHSSJz7WWtgaELQWQqXviSm3uf1e+qorWUts0bZcgPwWzhnmhCUZAhvn0NVpTQHDJ3epv+hHbPLl5dHg==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6" } }, "node_modules/@posthog/types": { - "version": "1.363.6", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.363.6.tgz", - "integrity": "sha512-SPU8psjrpK8prfFyYwvb25F1AgqSM32zdU1XPVIhUa107Cyw+VGw38Gv+AeqkEoAYQE2TFlWJT8DWUrw/mNDoQ==", + "version": "1.364.2", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.364.2.tgz", + "integrity": "sha512-SMTdaYanvRmatgheXtu2XkewhuhdXe8C3JCi7m/Hd2n+sa2DaJphcwg3nAkPtfV69JHMxJLe/gyOt7yFtbQSjQ==", "license": "MIT" }, "node_modules/@protobufjs/aspromise": { @@ -5309,9 +5309,9 @@ } }, "node_modules/@rc-component/motion": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@rc-component/motion/-/motion-1.3.1.tgz", - "integrity": "sha512-Wo1mkd0tCcHtvYvpPOmlYJz546z16qlsiwaygmW7NPJpOZOF9GBjhGzdzZSsC2lEJ1IUkWLF4gMHlRA1aSA+Yw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@rc-component/motion/-/motion-1.3.2.tgz", + "integrity": "sha512-itfd+GztzJYAb04Z4RkEub1TbJAfZc2Iuy8p44U44xD1F5+fNYFKI3897ijlbIyfvXkTmMm+KGcjkQQGMHywEQ==", "license": "MIT", "dependencies": { "@rc-component/util": "^1.2.0", @@ -5561,9 +5561,9 @@ } }, "node_modules/@rc-component/resize-observer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@rc-component/resize-observer/-/resize-observer-1.1.1.tgz", - "integrity": "sha512-NfXXMmiR+SmUuKE1NwJESzEUYUFWIDUn2uXpxCTOLwiRUUakd62DRNFjRJArgzyFW8S5rsL4aX5XlyIXyC/vRA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/resize-observer/-/resize-observer-1.1.2.tgz", + "integrity": "sha512-t/Bb0W8uvL4PYKAB3YcChC+DlHh0Wt5kM7q/J+0qpVEUMLe7Hk5zuvc9km0hMnTFPSx5Z7Wu/fzCLN6erVLE8Q==", "license": "MIT", "dependencies": { "@rc-component/util": "^1.2.0" @@ -7010,9 +7010,9 @@ } }, "node_modules/@sentry/cli": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.3.4.tgz", - "integrity": "sha512-r97H1GTdaRs1qhTvbzyomclPesrt4vpjY2W7KGtgSOa5ynQsXKajsM5oJOtNW99O1pNNMZFlR1mmGDMHOxYm4g==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.3.5.tgz", + "integrity": "sha512-eyLHTj0rpeCsOUX+1ZU8UEWRXy6nXvTXNdhtAt1t6YXan9gSsAexZf28zVmDcYcP8WRbK0D2JMLp7NcaQCQgEA==", "hasInstallScript": true, "license": "FSL-1.1-MIT", "dependencies": { @@ -7028,20 +7028,20 @@ "node": ">= 18" }, "optionalDependencies": { - "@sentry/cli-darwin": "3.3.4", - "@sentry/cli-linux-arm": "3.3.4", - "@sentry/cli-linux-arm64": "3.3.4", - "@sentry/cli-linux-i686": "3.3.4", - "@sentry/cli-linux-x64": "3.3.4", - "@sentry/cli-win32-arm64": "3.3.4", - "@sentry/cli-win32-i686": "3.3.4", - "@sentry/cli-win32-x64": "3.3.4" + "@sentry/cli-darwin": "3.3.5", + "@sentry/cli-linux-arm": "3.3.5", + "@sentry/cli-linux-arm64": "3.3.5", + "@sentry/cli-linux-i686": "3.3.5", + "@sentry/cli-linux-x64": "3.3.5", + "@sentry/cli-win32-arm64": "3.3.5", + "@sentry/cli-win32-i686": "3.3.5", + "@sentry/cli-win32-x64": "3.3.5" } }, "node_modules/@sentry/cli-darwin": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.3.4.tgz", - "integrity": "sha512-1cFHgwJq0yJ4lAvxQISag2R5R/wRtY7e4YX54Da4n+Isw1WHdF2CLmdT0ufOyT04iiF406UD2d7qsPEVDniAmw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.3.5.tgz", + "integrity": "sha512-E/SIY6+j2nt6Ri9nMt78sYle3LiF6uZyz4HGmvcEMU6HXjegmAayhy0J10JST+vZTzN6VixD8sUsa5UeJiOPcg==", "license": "FSL-1.1-MIT", "optional": true, "os": [ @@ -7052,9 +7052,9 @@ } }, "node_modules/@sentry/cli-linux-arm": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.3.4.tgz", - "integrity": "sha512-8XDDmUZ/4X7Dw2hoSU6T9tpD8qMwtVKHYLQjcY+xNBQujPrSq+YCrNXK/iIN9UgX8Rza2q4IftsIkJADOxLFow==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.3.5.tgz", + "integrity": "sha512-EGuEIvC2OQyar/vu+jAQEmovTMgxpoxdx5knnzL5dLhIemjEUNqwv/sXq+m/Aj+ThqCMofcTWB2TOZXsTtl0Tw==", "cpu": [ "arm" ], @@ -7070,9 +7070,9 @@ } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.3.4.tgz", - "integrity": "sha512-SD9YQjUPXjIBkt4q41lHMopeL9lKskaxc7qpt1ZuQpoHOszDOUNP3WPvxpeiaMjFMmgMkGojyDBk2XY9eyfGNQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.3.5.tgz", + "integrity": "sha512-/W7HTk2OFKD0bguTvQR1ue6pkFQWaGiqPafOSIQKyq0aGfbZhBn/Uj+IRefgMZMhJQ29xRz0y/iGRGKE+ef4Vg==", "cpu": [ "arm64" ], @@ -7088,9 +7088,9 @@ } }, "node_modules/@sentry/cli-linux-i686": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.3.4.tgz", - "integrity": "sha512-LNQlRDPrHLTDgxxJsAzT+1+sJ8Kv/Lq8E4Ob8RjqkwuZxl/wR6QJ4O83cxYGJPPnmjEAT+lOUQt1pTPXAwIwLQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.3.5.tgz", + "integrity": "sha512-qODMEWLEeUNp3IUlwwISB37EXSo8qgMmHQuLKfxDjpIKw+7NAFfptOloqPrHkLWK3TzFr+Nv643wIKZaYrz28Q==", "cpu": [ "x86", "ia32" @@ -7107,9 +7107,9 @@ } }, "node_modules/@sentry/cli-linux-x64": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.3.4.tgz", - "integrity": "sha512-yEOVI4a0RTBYcHJBEaiFU2s4GzcfkXDToMUeLlUg4B3Bgz8AX76163RTEJH5dKavKkoMLKzOrKgVylXPxo1JLQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.3.5.tgz", + "integrity": "sha512-DCz7lQ4PySjQ1WvWOQ/uTdwauRo1D7hSHazxZ+fUAnK/epSPM9qLkjDMlD8uM5CaLoR8+ZTs7N94vV5LZs2QpA==", "cpu": [ "x64" ], @@ -7125,9 +7125,9 @@ } }, "node_modules/@sentry/cli-win32-arm64": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.3.4.tgz", - "integrity": "sha512-aLGgnIf7FHK+yRsemXGQ1yF0Q4R3D/jwCf/20k1miUgFP9fn5mZt+fArGDHr5k3vFfh3bUTf22Ga4CUwXqwkvQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.3.5.tgz", + "integrity": "sha512-VMNsHiyZcP8Ft3fcK/1zoO4L66soe1eSfXg2tglFQSc/2MYA5v1Br9B1GtjBwDIc3EmdPtFZhOGLyqIzszMxJw==", "cpu": [ "arm64" ], @@ -7141,9 +7141,9 @@ } }, "node_modules/@sentry/cli-win32-i686": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.3.4.tgz", - "integrity": "sha512-mLD5NpgI3G3+f1iBWGqTTC1kvdQ0CzmkvM9aIRiXUYWXZiaZVd4YuqhoDvTU6zNFEUXI+9jUEp84VF171B0Pqg==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.3.5.tgz", + "integrity": "sha512-BE6aHOIpsm4jgavsvvXNcSikAr/8NSva3rk1N3BzoOLuX+dcFxBI60K1i2VzB1vsgtivJJo9YySNCi60dBgWTg==", "cpu": [ "x86", "ia32" @@ -7158,9 +7158,9 @@ } }, "node_modules/@sentry/cli-win32-x64": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.3.4.tgz", - "integrity": "sha512-dNWifGo3VLx7n3N3/m+7+rLGNZEb7JmnLwLLAHoz11DneCa6OTBSMCKFABArxqLinlzTbiSOYc8QbvCTcLk5FA==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.3.5.tgz", + "integrity": "sha512-MSU+PtBuiLjEbiPFOvxk4CI3TCagwkIg9kvJ+DrI3+pBY0Sga/dOyeWKTIgb01xSVcfjdw0UkpU52VCvzTT9ew==", "cpu": [ "x64" ], @@ -8042,16 +8042,16 @@ } }, "node_modules/antd": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/antd/-/antd-6.3.4.tgz", - "integrity": "sha512-Bu6JivPP7bFfYIdVj+61dxhwSOz+A3m0W7PlDasFGC3H3sNMYQ9gJXZoo11/rQh7pTlOQa351q5Ig/zjI98XYw==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/antd/-/antd-6.3.5.tgz", + "integrity": "sha512-8BPz9lpZWQm42PTx7yL4KxWAotVuqINiKcoYRcLtdd5BFmAcAZicVyFTnBJyRDlzGZFZeRW3foGu6jXYFnej6Q==", "license": "MIT", "dependencies": { "@ant-design/colors": "^8.0.1", "@ant-design/cssinjs": "^2.1.2", "@ant-design/cssinjs-utils": "^2.1.2", "@ant-design/fast-color": "^3.0.1", - "@ant-design/icons": "^6.1.0", + "@ant-design/icons": "^6.1.1", "@ant-design/react-slick": "~2.0.0", "@babel/runtime": "^7.28.4", "@rc-component/cascader": "~1.14.0", @@ -8067,7 +8067,7 @@ "@rc-component/input-number": "~1.6.2", "@rc-component/mentions": "~1.6.0", "@rc-component/menu": "~1.2.0", - "@rc-component/motion": "^1.3.1", + "@rc-component/motion": "^1.3.2", "@rc-component/mutate-observer": "^2.0.1", "@rc-component/notification": "~1.2.0", "@rc-component/pagination": "~1.2.0", @@ -8075,7 +8075,7 @@ "@rc-component/progress": "~1.0.2", "@rc-component/qrcode": "~1.1.1", "@rc-component/rate": "~1.0.1", - "@rc-component/resize-observer": "^1.1.1", + "@rc-component/resize-observer": "^1.1.2", "@rc-component/segmented": "~1.3.0", "@rc-component/select": "~1.6.15", "@rc-component/slider": "~1.0.1", @@ -8426,14 +8426,23 @@ } }, "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz", + "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" } }, "node_modules/babel-plugin-macros": { @@ -11441,9 +11450,9 @@ } }, "node_modules/graphql-ws": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.7.tgz", - "integrity": "sha512-yoLRW+KRlDmnnROdAu7sX77VNLC0bsFoZyGQJLy1cF+X/SkLg/fWkRGrEEYQK8o2cafJ2wmEaMqMEZB3U3DYDg==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.8.tgz", + "integrity": "sha512-m3EOaNsUBXwAnkBWbzPfe0Nq8pXUfxsWnolC54sru3FzHvhTZL0Ouf/BoQsaGAXqM+YPerXOJ47BUnmgmoupCw==", "license": "MIT", "engines": { "node": ">=20" @@ -12933,9 +12942,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.12.40", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.40.tgz", - "integrity": "sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg==", + "version": "1.12.41", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.41.tgz", + "integrity": "sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==", "license": "MIT" }, "node_modules/lightningcss": { @@ -15076,9 +15085,9 @@ "license": "MIT" }, "node_modules/posthog-js": { - "version": "1.363.6", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.363.6.tgz", - "integrity": "sha512-eQ+Ypml3JOEMQWt21XEea6J8vD77TNyoz4Yv/xxjlTRja+ilmJtQw/SuVAB3BobjgHKYUomXX7Fc4gH/zTVpbg==", + "version": "1.364.2", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.364.2.tgz", + "integrity": "sha512-ryeCFcaORLouVI5wsKxnraIDvKFM6RAxbbKlKuqo+A8VFZ9JvvRpwzfiMQR2trGsJUYcn6B3R4Rn0Xht9NrhAQ==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -15086,8 +15095,8 @@ "@opentelemetry/exporter-logs-otlp-http": "^0.208.0", "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-logs": "^0.208.0", - "@posthog/core": "1.24.1", - "@posthog/types": "1.363.6", + "@posthog/core": "1.24.4", + "@posthog/types": "1.364.2", "core-js": "^3.38.1", "dompurify": "^3.3.2", "fflate": "^0.4.8", @@ -18513,9 +18522,9 @@ } }, "node_modules/vite-plugin-node-polyfills": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.25.0.tgz", - "integrity": "sha512-rHZ324W3LhfGPxWwQb2N048TThB6nVvnipsqBUJEzh3R9xeK9KI3si+GMQxCuAcpPJBVf0LpDtJ+beYzB3/chg==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.26.0.tgz", + "integrity": "sha512-BAe5YzJf368XGev02hDvioidx4uVH8dqEJlG73bjQSxM26/AQnGcKFomq9n3vGq5yqpSHKN4h1XQNxx9l98mBg==", "dev": true, "license": "MIT", "dependencies": { @@ -18526,7 +18535,7 @@ "url": "https://github.com/sponsors/davidmyersdev" }, "peerDependencies": { - "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/vite-plugin-pwa": { diff --git a/client/package.json b/client/package.json index 295da31ab..dfa8f4de2 100644 --- a/client/package.json +++ b/client/package.json @@ -8,7 +8,7 @@ "private": true, "proxy": "http://localhost:4000", "dependencies": { - "@amplitude/analytics-browser": "^2.37.2", + "@amplitude/analytics-browser": "^2.38.0", "@ant-design/pro-layout": "^7.22.6", "@apollo/client": "^4.1.6", "@dnd-kit/core": "^6.3.1", @@ -24,15 +24,15 @@ "@firebase/messaging": "^0.12.25", "@jsreport/browser-client": "^3.1.0", "@reduxjs/toolkit": "^2.11.2", - "@sentry/cli": "^3.3.4", + "@sentry/cli": "^3.3.5", "@sentry/react": "^10.46.0", "@sentry/vite-plugin": "^4.9.1", "@splitsoftware/splitio-react": "^2.6.1", "@tanem/react-nprogress": "^5.0.63", - "antd": "^6.3.4", + "antd": "^6.3.5", "apollo-link-logger": "^3.0.0", "autosize": "^6.0.1", - "axios": "^1.13.6", + "axios": "^1.14.0", "classnames": "^2.5.1", "css-box-model": "^1.2.1", "dayjs": "^1.11.20", @@ -42,11 +42,11 @@ "env-cmd": "^11.0.0", "exifr": "^7.1.3", "graphql": "^16.13.2", - "graphql-ws": "^6.0.7", + "graphql-ws": "^6.0.8", "i18next": "^25.10.10", "i18next-browser-languagedetector": "^8.2.1", "immutability-helper": "^3.1.1", - "libphonenumber-js": "^1.12.40", + "libphonenumber-js": "^1.12.41", "lightningcss": "^1.32.0", "logrocket": "^12.1.0", "markerjs2": "^2.32.7", @@ -54,7 +54,7 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.71", - "posthog-js": "^1.363.6", + "posthog-js": "^1.364.2", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", @@ -140,7 +140,7 @@ "@ant-design/icons": "^6.1.1", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-react": "^7.28.5", - "@dotenvx/dotenvx": "^1.57.2", + "@dotenvx/dotenvx": "^1.59.1", "@emotion/babel-plugin": "^11.13.5", "@emotion/react": "^11.14.0", "@eslint/js": "^9.39.2", @@ -167,7 +167,7 @@ "vite": "^7.3.1", "vite-plugin-babel": "^1.6.0", "vite-plugin-eslint": "^1.8.1", - "vite-plugin-node-polyfills": "^0.25.0", + "vite-plugin-node-polyfills": "^0.26.0", "vite-plugin-pwa": "^1.2.0", "vite-plugin-style-import": "^2.0.0", "vitest": "^4.1.2", diff --git a/package-lock.json b/package-lock.json index 1aeb8663b..8d4aad6aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,22 +9,22 @@ "version": "0.2.0", "license": "UNLICENSED", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.1018.0", - "@aws-sdk/client-elasticache": "^3.1018.0", - "@aws-sdk/client-s3": "^3.1017.0", - "@aws-sdk/client-secrets-manager": "^3.1018.0", - "@aws-sdk/client-ses": "^3.1017.0", - "@aws-sdk/client-sqs": "^3.1017.0", - "@aws-sdk/client-textract": "^3.1017.0", - "@aws-sdk/credential-provider-node": "^3.972.26", - "@aws-sdk/lib-storage": "^3.1017.0", - "@aws-sdk/s3-request-presigner": "^3.1017.0", + "@aws-sdk/client-cloudwatch-logs": "^3.1019.0", + "@aws-sdk/client-elasticache": "^3.1019.0", + "@aws-sdk/client-s3": "^3.1019.0", + "@aws-sdk/client-secrets-manager": "^3.1019.0", + "@aws-sdk/client-ses": "^3.1019.0", + "@aws-sdk/client-sqs": "^3.1019.0", + "@aws-sdk/client-textract": "^3.1019.0", + "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/lib-storage": "^3.1019.0", + "@aws-sdk/s3-request-presigner": "^3.1019.0", "@opensearch-project/opensearch": "^2.13.0", "@socket.io/admin-ui": "^0.5.1", "@socket.io/redis-adapter": "^8.3.0", "archiver": "^7.0.1", "aws4": "^1.13.2", - "axios": "^1.13.6", + "axios": "^1.14.0", "axios-curlirize": "^2.0.0", "better-queue": "^3.8.12", "bullmq": "^5.71.1", @@ -292,15 +292,15 @@ } }, "node_modules/@aws-sdk/client-cloudwatch-logs": { - "version": "3.1018.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.1018.0.tgz", - "integrity": "sha512-y1Siaj4PP7PRDtUyjYHQnEl6l2uU2h8zApqcxZnP/ThTy745JFRAKbJRMoAzmV9dPPub3ymCuxVnXm3XYWFbtg==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.1019.0.tgz", + "integrity": "sha512-1sXELLPuRMg0x2RWXJrLeMvXLkRtDQjk/1qf9b2trusbf/Z+8+vb+NGXZo2y9xsvl+zd03ZVXrGJ9jWrbEgnfQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.26", + "@aws-sdk/credential-provider-node": "^3.972.27", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", @@ -345,15 +345,15 @@ } }, "node_modules/@aws-sdk/client-elasticache": { - "version": "3.1018.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.1018.0.tgz", - "integrity": "sha512-SPkP6CZ8C6CPZmyz0CithnX+Q/GztW0AbjbuUyQkycHSkEAZ7H+DeH+CzzwN1/8rWMd7WJEF7CjE5WFatYh4Qg==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.1019.0.tgz", + "integrity": "sha512-QAv2UF61rXboCsdcGhsnj14m73Xf2Vh44vbNwp0c/CjculBe80XmJh6d7GQX0AmAWDM2EG9+pCJDJ2turq00Kw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.26", + "@aws-sdk/credential-provider-node": "^3.972.27", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", @@ -396,32 +396,32 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.1017.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1017.0.tgz", - "integrity": "sha512-WmmPn2NEfkxxzDA0D7rlf3f32gqmqpaTABhlz4EnZbg/RfNWaOu3ecaI5xY0ragrLhvPB+1aPN9GRDnivJukvg==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1019.0.tgz", + "integrity": "sha512-0pb9x7PPhS4oEi4c0rL3vzQQoXA4cWKtPuGga/UfVYLZ68yrqdq0NDKg0fr55qzdhNvWFCpmGx73g9Iyy03kkA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-node": "^3.972.25", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-node": "^3.972.27", "@aws-sdk/middleware-bucket-endpoint": "^3.972.8", "@aws-sdk/middleware-expect-continue": "^3.972.8", - "@aws-sdk/middleware-flexible-checksums": "^3.974.4", + "@aws-sdk/middleware-flexible-checksums": "^3.974.5", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-location-constraint": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-sdk-s3": "^3.972.25", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", + "@aws-sdk/middleware-sdk-s3": "^3.972.26", "@aws-sdk/middleware-ssec": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", - "@aws-sdk/signature-v4-multi-region": "^3.996.13", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", + "@aws-sdk/signature-v4-multi-region": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/eventstream-serde-browser": "^4.2.12", @@ -462,15 +462,15 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.1018.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.1018.0.tgz", - "integrity": "sha512-svV2NpjS+SfMVk8O0b1thuzNlQ5GhIgxAawIPOUCuLf1fLpGhGNgFcgUXlTnkcAoytZpfFdJTBq5JxtV0AgL/A==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.1019.0.tgz", + "integrity": "sha512-pocE77Q7wmnt8grxi0qNKUIq05GW1USIqZ6jwr/pC9zd5lwp9BHIFWxg/pkJ4ffNPbX9LekimpoL8IYl3ScWbQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.26", + "@aws-sdk/credential-provider-node": "^3.972.27", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", @@ -512,24 +512,24 @@ } }, "node_modules/@aws-sdk/client-ses": { - "version": "3.1017.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.1017.0.tgz", - "integrity": "sha512-2PWXGyniy/j1TZ9sixv5fbudedXV9RihJGq+RjmmNEnlse+oGN7XByFCPLACAvi7Mgr9jjW8Vj1iWB9ezS1zJQ==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.1019.0.tgz", + "integrity": "sha512-O7WfdVfl6OEo2b/aS7J6XaEsJvDbAKelFG6GfNpVHSi0OU2buYmpApjkeikw69tafCGBdd+rye5Hs+8M9BFLUQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-node": "^3.972.25", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-node": "^3.972.27", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", @@ -563,25 +563,25 @@ } }, "node_modules/@aws-sdk/client-sqs": { - "version": "3.1017.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1017.0.tgz", - "integrity": "sha512-Y5FRcAo1lkeOMp6+q7bGSAP3NUdR61VLYzW9J+ksz1KhHLQfCQEzNaTzjwIJyEW2FjJ8w08b/tcScG0Fde0NiA==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1019.0.tgz", + "integrity": "sha512-6QEA/YWHV6Zd0J32YTsWzkWNziIiYbEZDw+xAsU9JyfT1JSA+kPZ7rbDP4LoV80ltEnoACLEODzdSoFTaUHW7A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-node": "^3.972.25", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-node": "^3.972.27", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", "@aws-sdk/middleware-sdk-sqs": "^3.972.17", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", @@ -615,24 +615,24 @@ } }, "node_modules/@aws-sdk/client-textract": { - "version": "3.1017.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.1017.0.tgz", - "integrity": "sha512-uGwy8wO3qLlvO8OSfnjchBlDYAQx6iHmCOPlEPDF+hhBpd3IUAOXImd0MXK1fbn9gZ/i1i8//1f2UC/PxEah4w==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.1019.0.tgz", + "integrity": "sha512-5NG2gBu8X7noIUcj20L6k2cAYNl4ptafTpJbxRxeGKK1i0w8SY1W9Nv/doFRaI5GlyNZHx3y7QAukRMbhJv4jw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.24", - "@aws-sdk/credential-provider-node": "^3.972.25", + "@aws-sdk/core": "^3.973.25", + "@aws-sdk/credential-provider-node": "^3.972.27", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", - "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.25", - "@aws-sdk/region-config-resolver": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.9", + "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.11", + "@aws-sdk/util-user-agent-node": "^3.973.12", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", @@ -739,19 +739,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.25.tgz", - "integrity": "sha512-G/v/PicYn4qs7xCv4vT6I4QKdvMyRvsgIFNBkUueCGlbLo7/PuKcNKgUozmLSsaYnE7jIl6UrfkP07EUubr48w==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.26.tgz", + "integrity": "sha512-xKxEAMuP6GYx2y5GET+d3aGEroax3AgGfwBE65EQAUe090lzyJ/RzxPX9s8v7Z6qAk0XwfQl+LrmH05X7YvTeg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", "@aws-sdk/credential-provider-env": "^3.972.23", "@aws-sdk/credential-provider-http": "^3.972.25", - "@aws-sdk/credential-provider-login": "^3.972.25", + "@aws-sdk/credential-provider-login": "^3.972.26", "@aws-sdk/credential-provider-process": "^3.972.23", - "@aws-sdk/credential-provider-sso": "^3.972.25", - "@aws-sdk/credential-provider-web-identity": "^3.972.25", - "@aws-sdk/nested-clients": "^3.996.15", + "@aws-sdk/credential-provider-sso": "^3.972.26", + "@aws-sdk/credential-provider-web-identity": "^3.972.26", + "@aws-sdk/nested-clients": "^3.996.16", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -764,13 +764,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.25.tgz", - "integrity": "sha512-bUdmyJeVua7SmD+g2a65x2/0YqsGn4K2k4GawI43js0odaNaIzpIhLtHehUnPnfLuyhPWbJR1NyuIO4iMVfM0w==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.26.tgz", + "integrity": "sha512-EFcM8RM3TUxnZOfMJo++3PnyxFu1fL/huzmn3Vh+8IWRgqZawUD3cRwwOr+/4bE9DpyHaLOWFAjY0lfK5X9ZkQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.15", + "@aws-sdk/nested-clients": "^3.996.16", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", @@ -783,17 +783,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.26", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.26.tgz", - "integrity": "sha512-5XSK74rCXxCNj+UWv5bjq1EccYkiyW4XOHFU9NXnsCcQF8dJuHdua1qFg0m/LIwVOWklbKsrcnMtfxIXwgvwzQ==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.27.tgz", + "integrity": "sha512-jXpxSolfFnPVj6GCTtx3xIdWNoDR7hYC/0SbetGZxOC9UnNmipHeX1k6spVstf7eWJrMhXNQEgXC0pD1r5tXIg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.23", "@aws-sdk/credential-provider-http": "^3.972.25", - "@aws-sdk/credential-provider-ini": "^3.972.25", + "@aws-sdk/credential-provider-ini": "^3.972.26", "@aws-sdk/credential-provider-process": "^3.972.23", - "@aws-sdk/credential-provider-sso": "^3.972.25", - "@aws-sdk/credential-provider-web-identity": "^3.972.25", + "@aws-sdk/credential-provider-sso": "^3.972.26", + "@aws-sdk/credential-provider-web-identity": "^3.972.26", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -823,14 +823,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.25.tgz", - "integrity": "sha512-r4OGAfHmlEa1QBInHWz+/dOD4tRljcjVNQe9wJ/AJNXEj1d2WdsRLppvRFImRV6FIs+bTpjtL0a23V5ELQpRPw==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.26.tgz", + "integrity": "sha512-c6ghvRb6gTlMznWhGxn/bpVCcp0HRaz4DobGVD9kI4vwHq186nU2xN/S7QGkm0lo0H2jQU8+dgpUFLxfTcwCOg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.15", - "@aws-sdk/token-providers": "3.1018.0", + "@aws-sdk/nested-clients": "^3.996.16", + "@aws-sdk/token-providers": "3.1019.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -842,13 +842,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.25.tgz", - "integrity": "sha512-uM1OtoJgj+yK3MlAmda8uR9WJJCdm5HB25JyCeFL5a5q1Fbafalf4uKidFO3/L0Pgd+Fsflkb4cM6jHIswi3QQ==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.26.tgz", + "integrity": "sha512-cXcS3+XD3iwhoXkM44AmxjmbcKueoLCINr1e+IceMmCySda5ysNIfiGBGe9qn5EMiQ9Jd7pP0AGFtcd6OV3Lvg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.15", + "@aws-sdk/nested-clients": "^3.996.16", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -860,12 +860,11 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.1017.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.1017.0.tgz", - "integrity": "sha512-sWUsr3c46WWZxmBAFSYpI+Gr8tFhP+L3h4XmXZxAyWimHpIeW5+A4wR9SAYohBL/+pPMlN9PEYj3H+KfsYCAyA==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.1019.0.tgz", + "integrity": "sha512-btVQ5wp4VWzP1A1RpCB1MYGyblMxj+uDs07tQa8LGQEml0QTdKxfsYypcGMKGlsV0PN1es3XGnMSjlfWSFO0kQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", @@ -879,7 +878,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.1017.0" + "@aws-sdk/client-s3": "^3.1019.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { @@ -916,15 +915,15 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.974.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.4.tgz", - "integrity": "sha512-fhCbZXPAyy8btnNbnBlR7Cc1nD54cETSvGn2wey71ehsM89AKPO8Dpco9DBAAgvrUdLrdHQepBXcyX4vxC5OwA==", + "version": "3.974.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.5.tgz", + "integrity": "sha512-SPSvF0G1t8m8CcB0L+ClNFszzQOvXaxmRj25oRWDf6aU+TuN2PXPFAJ9A6lt1IvX4oGAqqbTdMPTYs/SSHUYYQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.973.24", + "@aws-sdk/core": "^3.973.25", "@aws-sdk/crc64-nvme": "^3.972.5", "@aws-sdk/types": "^3.973.6", "@smithy/is-array-buffer": "^4.2.2", @@ -1075,9 +1074,9 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.996.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.15.tgz", - "integrity": "sha512-k6WAVNkub5DrU46iPQvH1m0xc1n+0dX79+i287tYJzf5g1yU2rX3uf4xNeL5JvK1NtYgfwMnsxHqhOXFBn367A==", + "version": "3.996.16", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.16.tgz", + "integrity": "sha512-L7Qzoj/qQU1cL5GnYLQP5LbI+wlLCLoINvcykR3htKcQ4tzrPf2DOs72x933BM7oArYj1SKrkb2lGlsJHIic3g==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1140,12 +1139,12 @@ } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.1017.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1017.0.tgz", - "integrity": "sha512-PSR8VJEkCy53uhAeuvht6ub3kzfdqoTAmLliQJ63MkC/1FuMmrmqWRGoZuzZvAbpzTcZtuibSGvawDa47gsckA==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1019.0.tgz", + "integrity": "sha512-KFv5UaIORIF6MTmEc79MQTPQSnRZjUmOIaOzXn9g6ujtViQLIrNYJiaSmVw8LqK1ebcndS6L6s4bBdLd9AQVJA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/signature-v4-multi-region": "^3.996.13", + "@aws-sdk/signature-v4-multi-region": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-format-url": "^3.972.8", "@smithy/middleware-endpoint": "^4.4.27", @@ -1176,13 +1175,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.1018.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1018.0.tgz", - "integrity": "sha512-97OPNJHy37wmGOX44xAcu6E9oSTiqK9uPcy/fWpmN5uB3JuEp1f6x60Xot/jp+FxwhQWIFUsVJFnm3QKqt7T6Q==", + "version": "3.1019.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1019.0.tgz", + "integrity": "sha512-OF+2RfRmUKyjzrRWlDcyju3RBsuqcrYDQ8TwrJg8efcOotMzuZN4U9mpVTIdATpmEc4lWNZBMSjPzrGm6JPnAQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.15", + "@aws-sdk/nested-clients": "^3.996.16", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -4527,14 +4526,14 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz", + "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "proxy-from-env": "^2.1.0" } }, "node_modules/axios-curlirize": { @@ -9634,10 +9633,13 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/punycode": { "version": "2.3.1", diff --git a/package.json b/package.json index 3e144902c..116300433 100644 --- a/package.json +++ b/package.json @@ -18,22 +18,22 @@ "job-totals-fixtures:local": "docker exec node-app /usr/bin/node /app/download-job-totals-fixtures.js" }, "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.1018.0", - "@aws-sdk/client-elasticache": "^3.1018.0", - "@aws-sdk/client-s3": "^3.1017.0", - "@aws-sdk/client-secrets-manager": "^3.1018.0", - "@aws-sdk/client-ses": "^3.1017.0", - "@aws-sdk/client-sqs": "^3.1017.0", - "@aws-sdk/client-textract": "^3.1017.0", - "@aws-sdk/credential-provider-node": "^3.972.26", - "@aws-sdk/lib-storage": "^3.1017.0", - "@aws-sdk/s3-request-presigner": "^3.1017.0", + "@aws-sdk/client-cloudwatch-logs": "^3.1019.0", + "@aws-sdk/client-elasticache": "^3.1019.0", + "@aws-sdk/client-s3": "^3.1019.0", + "@aws-sdk/client-secrets-manager": "^3.1019.0", + "@aws-sdk/client-ses": "^3.1019.0", + "@aws-sdk/client-sqs": "^3.1019.0", + "@aws-sdk/client-textract": "^3.1019.0", + "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/lib-storage": "^3.1019.0", + "@aws-sdk/s3-request-presigner": "^3.1019.0", "@opensearch-project/opensearch": "^2.13.0", "@socket.io/admin-ui": "^0.5.1", "@socket.io/redis-adapter": "^8.3.0", "archiver": "^7.0.1", "aws4": "^1.13.2", - "axios": "^1.13.6", + "axios": "^1.14.0", "axios-curlirize": "^2.0.0", "better-queue": "^3.8.12", "bullmq": "^5.71.1", From d2dd276ce71d531dc82356847df16b6ed3d6b53c Mon Sep 17 00:00:00 2001 From: Dave Date: Tue, 31 Mar 2026 16:16:14 -0400 Subject: [PATCH 16/16] feature/.feature/IO-3624-Shop-Config-UX-Refresh - Bump Deps --- client/package-lock.json | 143 +++++----- client/package.json | 8 +- package-lock.json | 575 +++++++++++++++++++-------------------- package.json | 20 +- 4 files changed, 367 insertions(+), 379 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 11e3ce3bd..8ff1ef726 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -26,7 +26,7 @@ "@jsreport/browser-client": "^3.1.0", "@reduxjs/toolkit": "^2.11.2", "@sentry/cli": "^3.3.5", - "@sentry/react": "^10.46.0", + "@sentry/react": "^10.47.0", "@sentry/vite-plugin": "^4.9.1", "@splitsoftware/splitio-react": "^2.6.1", "@tanem/react-nprogress": "^5.0.63", @@ -55,14 +55,14 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.71", - "posthog-js": "^1.364.2", + "posthog-js": "^1.364.4", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", "react": "^19.2.4", "react-big-calendar": "^1.19.4", "react-color": "^2.19.3", - "react-cookie": "^8.0.1", + "react-cookie": "^8.1.0", "react-dom": "^19.2.4", "react-grid-gallery": "^1.0.1", "react-grid-layout": "^2.2.3", @@ -106,7 +106,7 @@ "@testing-library/react": "^16.3.2", "@vitejs/plugin-react": "^5.1.4", "babel-plugin-react-compiler": "^1.0.0", - "browserslist": "^4.28.1", + "browserslist": "^4.28.2", "browserslist-to-esbuild": "^2.1.1", "chalk": "^5.6.2", "eslint": "^9.39.2", @@ -4879,9 +4879,9 @@ } }, "node_modules/@posthog/types": { - "version": "1.364.2", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.364.2.tgz", - "integrity": "sha512-SMTdaYanvRmatgheXtu2XkewhuhdXe8C3JCi7m/Hd2n+sa2DaJphcwg3nAkPtfV69JHMxJLe/gyOt7yFtbQSjQ==", + "version": "1.364.4", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.364.4.tgz", + "integrity": "sha512-U7NpIy9XWrzz1q/66xyDu8Wm12a7avNRKRn5ISPT5kuCJQRaeAaHuf+dpgrFnuqjCCgxg+oIY/ReJdlZ+8/z4Q==", "license": "MIT" }, "node_modules/@protobufjs/aspromise": { @@ -6718,50 +6718,50 @@ ] }, "node_modules/@sentry-internal/browser-utils": { - "version": "10.46.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.46.0.tgz", - "integrity": "sha512-WB1gBT9G13V02ekZ6NpUhoI1aGHV2eNfjEPthkU2bGBvFpQKnstwzjg7waIRGR7cu+YSW2Q6UI6aQLgBeOPD1g==", + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.47.0.tgz", + "integrity": "sha512-bVFRAeJWMBcBCvJKIFCMJ1/yQToL4vPGqfmlnDZeypcxkqUDKQ/Y3ziLHXoDL2sx0lagcgU2vH1QhCQ67Aujjw==", "license": "MIT", "dependencies": { - "@sentry/core": "10.46.0" + "@sentry/core": "10.47.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/feedback": { - "version": "10.46.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.46.0.tgz", - "integrity": "sha512-c4pI/z9nZCQXe9GYEw/hE/YTY9AxGBp8/wgKI+T8zylrN35SGHaXv63szzE1WbI8lacBY8lBF7rstq9bQVCaHw==", + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.47.0.tgz", + "integrity": "sha512-pdvMmi4dQpX5S/vAAzrhHPIw3T3HjUgDNgUiCBrlp7N9/6zGO2gNPhUnNekP+CjgI/z0rvf49RLqlDenpNrMOg==", "license": "MIT", "dependencies": { - "@sentry/core": "10.46.0" + "@sentry/core": "10.47.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay": { - "version": "10.46.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.46.0.tgz", - "integrity": "sha512-JBsWeXG6bRbxBFK8GzWymWGOB9QE7Kl57BeF3jzgdHTuHSWZ2mRnAmb1K05T4LU+gVygk6yW0KmdC8Py9Qzg9A==", + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.47.0.tgz", + "integrity": "sha512-ScdovxP7hJxgMt70+7hFvwT02GIaIUAxdEM/YPsayZBeCoAukPW8WiwztJfoKtsfPyKJ5A6f0H3PIxTPcA9Row==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.46.0", - "@sentry/core": "10.46.0" + "@sentry-internal/browser-utils": "10.47.0", + "@sentry/core": "10.47.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "10.46.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.46.0.tgz", - "integrity": "sha512-ub314MWUsekVCuoH0/HJbbimlI24SkV745UW2pj9xRbxOAEf1wjkmIzxKrMDbTgJGuEunug02XZVdJFJUzOcDw==", + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.47.0.tgz", + "integrity": "sha512-A5OY8friSe6g8WAK4L8IeOPiEd9D3Ps40DzRH5j2f6SUja0t90mKMvHRcRf8zq0d4BkdB+JM7tjOkwxpuv8heA==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "10.46.0", - "@sentry/core": "10.46.0" + "@sentry-internal/replay": "10.47.0", + "@sentry/core": "10.47.0" }, "engines": { "node": ">=18" @@ -6777,16 +6777,16 @@ } }, "node_modules/@sentry/browser": { - "version": "10.46.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.46.0.tgz", - "integrity": "sha512-80DmGlTk5Z2/OxVOzLNxwolMyouuAYKqG8KUcoyintZqHbF6kO1RulI610HmyUt3OagKeBCqt9S7w0VIfCRL+Q==", + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.47.0.tgz", + "integrity": "sha512-rC0agZdxKA5XWfL4VwPOr/rJMogXDqZgnVzr93YWpFn9DMZT/7LzxSJVPIJwRUjx3bFEby3PcTa3YaX7pxm1AA==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.46.0", - "@sentry-internal/feedback": "10.46.0", - "@sentry-internal/replay": "10.46.0", - "@sentry-internal/replay-canvas": "10.46.0", - "@sentry/core": "10.46.0" + "@sentry-internal/browser-utils": "10.47.0", + "@sentry-internal/feedback": "10.47.0", + "@sentry-internal/replay": "10.47.0", + "@sentry-internal/replay-canvas": "10.47.0", + "@sentry/core": "10.47.0" }, "engines": { "node": ">=18" @@ -7195,22 +7195,22 @@ } }, "node_modules/@sentry/core": { - "version": "10.46.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.46.0.tgz", - "integrity": "sha512-N3fj4zqBQOhXliS1Ne9euqIKuciHCGOJfPGQLwBoW9DNz03jF+NB8+dUKtrJ79YLoftjVgf8nbgwtADK7NR+2Q==", + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.47.0.tgz", + "integrity": "sha512-nsYRAx3EWezDut+Zl+UwwP07thh9uY7CfSAi2whTdcJl5hu1nSp2z8bba7Vq/MGbNLnazkd3A+GITBEML924JA==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/react": { - "version": "10.46.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.46.0.tgz", - "integrity": "sha512-Rb1S+9OuUPVwsz7GWnQ6Kgf3azbsseUymIegg3JZHNcW/fM1nPpaljzTBnuineia113DH0pgMBcdrrZDLaosFQ==", + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.47.0.tgz", + "integrity": "sha512-ZtJV6xxF8jUVE9e3YQUG3Do0XapG1GjniyLyqMPgN6cNvs/HaRJODf7m60By+VGqcl5XArEjEPTvx8CdPUXDfA==", "license": "MIT", "dependencies": { - "@sentry/browser": "10.46.0", - "@sentry/core": "10.46.0" + "@sentry/browser": "10.47.0", + "@sentry/core": "10.47.0" }, "engines": { "node": ">=18" @@ -8560,12 +8560,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.12", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.12.tgz", - "integrity": "sha512-Mij6Lij93pTAIsSYy5cyBQ975Qh9uLEc5rwGTpomiZeXZL9yIS6uORJakb3ScHgfs0serMMfIbXzokPMuEiRyw==", + "version": "2.10.12", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz", + "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==", "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/bidi-js": { @@ -8797,9 +8800,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "funding": [ { "type": "opencollective", @@ -8816,11 +8819,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -8987,9 +8990,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001762", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", - "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "version": "1.0.30001782", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz", + "integrity": "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==", "funding": [ { "type": "opencollective", @@ -10103,9 +10106,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.329", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.329.tgz", + "integrity": "sha512-/4t+AS1l4S3ZC0Ja7PHFIWeBIxGA3QGqV8/yKsP36v7NcyUCl+bIcmw6s5zVuMIECWwBrAK/6QLzTmbJChBboQ==", "license": "ISC" }, "node_modules/elliptic": { @@ -14325,9 +14328,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", "license": "MIT" }, "node_modules/node-stdlib-browser": { @@ -15085,9 +15088,9 @@ "license": "MIT" }, "node_modules/posthog-js": { - "version": "1.364.2", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.364.2.tgz", - "integrity": "sha512-ryeCFcaORLouVI5wsKxnraIDvKFM6RAxbbKlKuqo+A8VFZ9JvvRpwzfiMQR2trGsJUYcn6B3R4Rn0Xht9NrhAQ==", + "version": "1.364.4", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.364.4.tgz", + "integrity": "sha512-T71zr06gH5YcrjS7c+sdzqfZKMxqqXC/a0w++zMQIPbL1ejvF9PdfUi0Kyd6Sy78Ocbb2smobdzBh8vXLwC+lQ==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -15096,7 +15099,7 @@ "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-logs": "^0.208.0", "@posthog/core": "1.24.4", - "@posthog/types": "1.364.2", + "@posthog/types": "1.364.4", "core-js": "^3.38.1", "dompurify": "^3.3.2", "fflate": "^0.4.8", @@ -15462,12 +15465,12 @@ } }, "node_modules/react-cookie": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-8.0.1.tgz", - "integrity": "sha512-QNdAd0MLuAiDiLcDU/2s/eyKmmfMHtjPUKJ2dZ/5CcQ9QKUium4B3o61/haq6PQl/YWFqC5PO8GvxeHKhy3GFA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-8.1.0.tgz", + "integrity": "sha512-Qs+gD3gpQmUXnJUZafhJtNWhhNdi8OYbOAF5YQRAZa/D171ILOIEMfXDz/tmhkE+nOthllmqryHH6I/qmvIYWQ==", "license": "MIT", "dependencies": { - "@types/hoist-non-react-statics": "^3.3.6", + "@types/hoist-non-react-statics": "^3.3.7", "hoist-non-react-statics": "^3.3.2", "universal-cookie": "^8.0.0" }, diff --git a/client/package.json b/client/package.json index dfa8f4de2..7e95380a6 100644 --- a/client/package.json +++ b/client/package.json @@ -25,7 +25,7 @@ "@jsreport/browser-client": "^3.1.0", "@reduxjs/toolkit": "^2.11.2", "@sentry/cli": "^3.3.5", - "@sentry/react": "^10.46.0", + "@sentry/react": "^10.47.0", "@sentry/vite-plugin": "^4.9.1", "@splitsoftware/splitio-react": "^2.6.1", "@tanem/react-nprogress": "^5.0.63", @@ -54,14 +54,14 @@ "normalize-url": "^8.1.1", "object-hash": "^3.0.0", "phone": "^3.1.71", - "posthog-js": "^1.364.2", + "posthog-js": "^1.364.4", "prop-types": "^15.8.1", "query-string": "^9.3.1", "raf-schd": "^4.0.3", "react": "^19.2.4", "react-big-calendar": "^1.19.4", "react-color": "^2.19.3", - "react-cookie": "^8.0.1", + "react-cookie": "^8.1.0", "react-dom": "^19.2.4", "react-grid-gallery": "^1.0.1", "react-grid-layout": "^2.2.3", @@ -150,7 +150,7 @@ "@testing-library/react": "^16.3.2", "@vitejs/plugin-react": "^5.1.4", "babel-plugin-react-compiler": "^1.0.0", - "browserslist": "^4.28.1", + "browserslist": "^4.28.2", "browserslist-to-esbuild": "^2.1.1", "chalk": "^5.6.2", "eslint": "^9.39.2", diff --git a/package-lock.json b/package-lock.json index 8d4aad6aa..3354b9ed7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,16 @@ "version": "0.2.0", "license": "UNLICENSED", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.1019.0", - "@aws-sdk/client-elasticache": "^3.1019.0", - "@aws-sdk/client-s3": "^3.1019.0", - "@aws-sdk/client-secrets-manager": "^3.1019.0", - "@aws-sdk/client-ses": "^3.1019.0", - "@aws-sdk/client-sqs": "^3.1019.0", - "@aws-sdk/client-textract": "^3.1019.0", - "@aws-sdk/credential-provider-node": "^3.972.27", - "@aws-sdk/lib-storage": "^3.1019.0", - "@aws-sdk/s3-request-presigner": "^3.1019.0", + "@aws-sdk/client-cloudwatch-logs": "^3.1020.0", + "@aws-sdk/client-elasticache": "^3.1020.0", + "@aws-sdk/client-s3": "^3.1020.0", + "@aws-sdk/client-secrets-manager": "^3.1020.0", + "@aws-sdk/client-ses": "^3.1020.0", + "@aws-sdk/client-sqs": "^3.1020.0", + "@aws-sdk/client-textract": "^3.1020.0", + "@aws-sdk/credential-provider-node": "^3.972.28", + "@aws-sdk/lib-storage": "^3.1020.0", + "@aws-sdk/s3-request-presigner": "^3.1020.0", "@opensearch-project/opensearch": "^2.13.0", "@socket.io/admin-ui": "^0.5.1", "@socket.io/redis-adapter": "^8.3.0", @@ -292,26 +292,26 @@ } }, "node_modules/@aws-sdk/client-cloudwatch-logs": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.1019.0.tgz", - "integrity": "sha512-1sXELLPuRMg0x2RWXJrLeMvXLkRtDQjk/1qf9b2trusbf/Z+8+vb+NGXZo2y9xsvl+zd03ZVXrGJ9jWrbEgnfQ==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.1020.0.tgz", + "integrity": "sha512-ezS+wZbSJYbncXtfO0BOyNdqeRnKPSRPZNq111aydoZoW0Q/FnTiRbISZoMLqOCnwJVOX3EZMGNGpUvVyJ+CGQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-node": "^3.972.28", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", @@ -319,21 +319,21 @@ "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -345,50 +345,50 @@ } }, "node_modules/@aws-sdk/client-elasticache": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.1019.0.tgz", - "integrity": "sha512-QAv2UF61rXboCsdcGhsnj14m73Xf2Vh44vbNwp0c/CjculBe80XmJh6d7GQX0AmAWDM2EG9+pCJDJ2turq00Kw==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.1020.0.tgz", + "integrity": "sha512-cuYpuMTjsXXbQrrWuqMCZID+oi4D8w3w8aixdVe4Yri//x++mcebxe+oZGRZlKGWZPKQYg1GpCTm+bu8CWygYA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-node": "^3.972.28", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.2.13", + "@smithy/util-waiter": "^4.2.14", "tslib": "^2.6.2" }, "engines": { @@ -396,34 +396,34 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1019.0.tgz", - "integrity": "sha512-0pb9x7PPhS4oEi4c0rL3vzQQoXA4cWKtPuGga/UfVYLZ68yrqdq0NDKg0fr55qzdhNvWFCpmGx73g9Iyy03kkA==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1020.0.tgz", + "integrity": "sha512-ibfxjP5zLUqpujLE0OTgD+jZ3KStx9dTASL7d7Eekw4sv7ZHv1UN6CPDcKnCNXdPzlBWi5Wc5lWJ4sU1M8ygEQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-node": "^3.972.28", "@aws-sdk/middleware-bucket-endpoint": "^3.972.8", "@aws-sdk/middleware-expect-continue": "^3.972.8", - "@aws-sdk/middleware-flexible-checksums": "^3.974.5", + "@aws-sdk/middleware-flexible-checksums": "^3.974.6", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-location-constraint": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-sdk-s3": "^3.972.26", + "@aws-sdk/middleware-sdk-s3": "^3.972.27", "@aws-sdk/middleware-ssec": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", - "@aws-sdk/signature-v4-multi-region": "^3.996.14", + "@aws-sdk/signature-v4-multi-region": "^3.996.15", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", @@ -434,27 +434,27 @@ "@smithy/invalid-dependency": "^4.2.12", "@smithy/md5-js": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", - "@smithy/util-stream": "^4.5.20", + "@smithy/util-stream": "^4.5.21", "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.2.13", + "@smithy/util-waiter": "^4.2.14", "tslib": "^2.6.2" }, "engines": { @@ -462,45 +462,45 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.1019.0.tgz", - "integrity": "sha512-pocE77Q7wmnt8grxi0qNKUIq05GW1USIqZ6jwr/pC9zd5lwp9BHIFWxg/pkJ4ffNPbX9LekimpoL8IYl3ScWbQ==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.1020.0.tgz", + "integrity": "sha512-FRQUPEAeRWK/DO/IJWWVQdmfVYifeNQksrToREokbGjJbCD912eNP5szOtqP7kd52QweznXlfLqv3OeTVnP5Ew==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-node": "^3.972.28", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -512,50 +512,50 @@ } }, "node_modules/@aws-sdk/client-ses": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.1019.0.tgz", - "integrity": "sha512-O7WfdVfl6OEo2b/aS7J6XaEsJvDbAKelFG6GfNpVHSi0OU2buYmpApjkeikw69tafCGBdd+rye5Hs+8M9BFLUQ==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.1020.0.tgz", + "integrity": "sha512-UfksKJVrZp4esWxF8GuIBCth++jYpGLqkINj0lQaHq/6kz6u6/Md/q8PlTVmLRQo38NCcb9XKg4G0sKOYN7+Hw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-node": "^3.972.28", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.2.13", + "@smithy/util-waiter": "^4.2.14", "tslib": "^2.6.2" }, "engines": { @@ -563,47 +563,47 @@ } }, "node_modules/@aws-sdk/client-sqs": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1019.0.tgz", - "integrity": "sha512-6QEA/YWHV6Zd0J32YTsWzkWNziIiYbEZDw+xAsU9JyfT1JSA+kPZ7rbDP4LoV80ltEnoACLEODzdSoFTaUHW7A==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1020.0.tgz", + "integrity": "sha512-DDKv7bucz6usrvOZ+O6f8mCrm5mTD1yOC9rYDjbUmUPP50S0HLCT6ZVqcXlKaucHcO0l9sWBx8K4jrvMTCkfDg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-node": "^3.972.28", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-sdk-sqs": "^3.972.17", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-sdk-sqs": "^3.972.18", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/md5-js": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -615,45 +615,45 @@ } }, "node_modules/@aws-sdk/client-textract": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.1019.0.tgz", - "integrity": "sha512-5NG2gBu8X7noIUcj20L6k2cAYNl4ptafTpJbxRxeGKK1i0w8SY1W9Nv/doFRaI5GlyNZHx3y7QAukRMbhJv4jw==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.1020.0.tgz", + "integrity": "sha512-7aVLbqnrDeom8Zygv04kcDYdwZR450X4pvR1vF4w6LNZxIBjt4VGhZ4I0Tlvri0KV9aeOPy97xDEKwktDGEgBQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-node": "^3.972.27", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-node": "^3.972.28", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -665,19 +665,19 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.973.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.25.tgz", - "integrity": "sha512-TNrx7eq6nKNOO62HWPqoBqPLXEkW6nLZQGwjL6lq1jZtigWYbK1NbCnT7mKDzbLMHZfuOECUt3n6CzxjUW9HWQ==", + "version": "3.973.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.26.tgz", + "integrity": "sha512-A/E6n2W42ruU+sfWk+mMUOyVXbsSgGrY3MJ9/0Az5qUdG67y8I6HYzzoAa+e/lzxxl1uCYmEL6BTMi9ZiZnplQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.16", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", @@ -702,12 +702,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.23", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.23.tgz", - "integrity": "sha512-EamaclJcCEaPHp6wiVknNMM2RlsPMjAHSsYSFLNENBM8Wz92QPc6cOn3dif6vPDQt0Oo4IEghDy3NMDCzY/IvA==", + "version": "3.972.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.24.tgz", + "integrity": "sha512-FWg8uFmT6vQM7VuzELzwVo5bzExGaKHdubn0StjgrcU5FvuLExUe+k06kn/40uKv59rYzhez8eFNM4yYE/Yb/w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", + "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", @@ -718,20 +718,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.25.tgz", - "integrity": "sha512-qPymamdPcLp6ugoVocG1y5r69ScNiRzb0hogX25/ij+Wz7c7WnsgjLTaz7+eB5BfRxeyUwuw5hgULMuwOGOpcw==", + "version": "3.972.26", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.26.tgz", + "integrity": "sha512-CY4ppZ+qHYqcXqBVi//sdHST1QK3KzOEiLtpLsc9W2k2vfZPKExGaQIsOwcyvjpjUEolotitmd3mUNY56IwDEA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", + "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@smithy/fetch-http-handler": "^5.3.15", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", - "@smithy/util-stream": "^4.5.20", + "@smithy/util-stream": "^4.5.21", "tslib": "^2.6.2" }, "engines": { @@ -739,19 +739,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.26", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.26.tgz", - "integrity": "sha512-xKxEAMuP6GYx2y5GET+d3aGEroax3AgGfwBE65EQAUe090lzyJ/RzxPX9s8v7Z6qAk0XwfQl+LrmH05X7YvTeg==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.27.tgz", + "integrity": "sha512-Um26EsNSUfVUX0wUXnUA1W3wzKhVy6nviEElsh5lLZUYj9bk6DXOPnpte0gt+WHubcVfVsRk40bbm4KaroTEag==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/credential-provider-env": "^3.972.23", - "@aws-sdk/credential-provider-http": "^3.972.25", - "@aws-sdk/credential-provider-login": "^3.972.26", - "@aws-sdk/credential-provider-process": "^3.972.23", - "@aws-sdk/credential-provider-sso": "^3.972.26", - "@aws-sdk/credential-provider-web-identity": "^3.972.26", - "@aws-sdk/nested-clients": "^3.996.16", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/credential-provider-env": "^3.972.24", + "@aws-sdk/credential-provider-http": "^3.972.26", + "@aws-sdk/credential-provider-login": "^3.972.27", + "@aws-sdk/credential-provider-process": "^3.972.24", + "@aws-sdk/credential-provider-sso": "^3.972.27", + "@aws-sdk/credential-provider-web-identity": "^3.972.27", + "@aws-sdk/nested-clients": "^3.996.17", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -764,13 +764,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.26", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.26.tgz", - "integrity": "sha512-EFcM8RM3TUxnZOfMJo++3PnyxFu1fL/huzmn3Vh+8IWRgqZawUD3cRwwOr+/4bE9DpyHaLOWFAjY0lfK5X9ZkQ==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.27.tgz", + "integrity": "sha512-t3ehEtHomGZwg5Gixw4fYbYtG9JBnjfAjSDabxhPEu/KLLUp0BB37/APX7MSKXQhX6ZH7pseuACFJ19NrAkNdg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.16", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/nested-clients": "^3.996.17", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", @@ -783,17 +783,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.27", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.27.tgz", - "integrity": "sha512-jXpxSolfFnPVj6GCTtx3xIdWNoDR7hYC/0SbetGZxOC9UnNmipHeX1k6spVstf7eWJrMhXNQEgXC0pD1r5tXIg==", + "version": "3.972.28", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.28.tgz", + "integrity": "sha512-rren+P6k5rShG5PX61iVi40kKdueyuMLBRTctQbyR5LooO9Ygr5L6R7ilG7RF1957NSH3KC3TU206fZuKwjSpQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.23", - "@aws-sdk/credential-provider-http": "^3.972.25", - "@aws-sdk/credential-provider-ini": "^3.972.26", - "@aws-sdk/credential-provider-process": "^3.972.23", - "@aws-sdk/credential-provider-sso": "^3.972.26", - "@aws-sdk/credential-provider-web-identity": "^3.972.26", + "@aws-sdk/credential-provider-env": "^3.972.24", + "@aws-sdk/credential-provider-http": "^3.972.26", + "@aws-sdk/credential-provider-ini": "^3.972.27", + "@aws-sdk/credential-provider-process": "^3.972.24", + "@aws-sdk/credential-provider-sso": "^3.972.27", + "@aws-sdk/credential-provider-web-identity": "^3.972.27", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -806,12 +806,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.23", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.23.tgz", - "integrity": "sha512-IL/TFW59++b7MpHserjUblGrdP5UXy5Ekqqx1XQkERXBFJcZr74I7VaSrQT5dxdRMU16xGK4L0RQ5fQG1pMgnA==", + "version": "3.972.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.24.tgz", + "integrity": "sha512-Q2k/XLrFXhEztPHqj4SLCNID3hEPdlhh1CDLBpNnM+1L8fq7P+yON9/9M1IGN/dA5W45v44ylERfXtDAlmMNmw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", + "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -823,14 +823,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.26", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.26.tgz", - "integrity": "sha512-c6ghvRb6gTlMznWhGxn/bpVCcp0HRaz4DobGVD9kI4vwHq186nU2xN/S7QGkm0lo0H2jQU8+dgpUFLxfTcwCOg==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.27.tgz", + "integrity": "sha512-CWXeGjlbBuHcm9appZUgXKP2zHDyTti0/+gXpSFJ2J3CnSwf1KWjicjN0qG2ozkMH6blrrzMrimeIOEYNl238Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.16", - "@aws-sdk/token-providers": "3.1019.0", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/nested-clients": "^3.996.17", + "@aws-sdk/token-providers": "3.1020.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -842,13 +842,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.26", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.26.tgz", - "integrity": "sha512-cXcS3+XD3iwhoXkM44AmxjmbcKueoLCINr1e+IceMmCySda5ysNIfiGBGe9qn5EMiQ9Jd7pP0AGFtcd6OV3Lvg==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.27.tgz", + "integrity": "sha512-CUY4hQIFswdQNEsRGEzGBUKGMK5KpqmNDdu2ROMgI+45PLFS8H0y3Tm7kvM16uvvw3n1pVxk85tnRVUTgtaa1w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.16", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/nested-clients": "^3.996.17", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -860,14 +860,14 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.1019.0.tgz", - "integrity": "sha512-btVQ5wp4VWzP1A1RpCB1MYGyblMxj+uDs07tQa8LGQEml0QTdKxfsYypcGMKGlsV0PN1es3XGnMSjlfWSFO0kQ==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.1020.0.tgz", + "integrity": "sha512-SvFM+jukgDkCCeszTtGTJ59kAvWeCI5vnBV0eMau4Uj1w0KItwahDVGDo+xQa+r7pp3kolZF1vDmdv37A5+J8A==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^4.4.27", + "@smithy/middleware-endpoint": "^4.4.28", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "buffer": "5.6.0", "events": "3.3.0", @@ -878,7 +878,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.1019.0" + "@aws-sdk/client-s3": "^3.1020.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { @@ -915,15 +915,15 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.974.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.5.tgz", - "integrity": "sha512-SPSvF0G1t8m8CcB0L+ClNFszzQOvXaxmRj25oRWDf6aU+TuN2PXPFAJ9A6lt1IvX4oGAqqbTdMPTYs/SSHUYYQ==", + "version": "3.974.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.6.tgz", + "integrity": "sha512-YckB8k1ejbyCg/g36gUMFLNzE4W5cERIa4MtsdO+wpTmJEP0+TB7okWIt7d8TDOvnb7SwvxJ21E4TGOBxFpSWQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.973.25", + "@aws-sdk/core": "^3.973.26", "@aws-sdk/crc64-nvme": "^3.972.5", "@aws-sdk/types": "^3.973.6", "@smithy/is-array-buffer": "^4.2.2", @@ -931,7 +931,7 @@ "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-middleware": "^4.2.12", - "@smithy/util-stream": "^4.5.20", + "@smithy/util-stream": "^4.5.21", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, @@ -999,23 +999,23 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.26", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.26.tgz", - "integrity": "sha512-5q7UGSTtt7/KF0Os8wj2VZtlLxeWJVb0e2eDrDJlWot2EIxUNKDDMPFq/FowUqrwZ40rO2bu6BypxaKNvQhI+g==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.27.tgz", + "integrity": "sha512-gomO6DZwx+1D/9mbCpcqO5tPBqYBK7DtdgjTIjZ4yvfh/S7ETwAPS0XbJgP2JD8Ycr5CwVrEkV1sFtu3ShXeOw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", + "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-middleware": "^4.2.12", - "@smithy/util-stream": "^4.5.20", + "@smithy/util-stream": "^4.5.21", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, @@ -1024,13 +1024,13 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sqs": { - "version": "3.972.17", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.972.17.tgz", - "integrity": "sha512-LnzPRRoDXGtlFV2G1p2rsY6fRKrbf6Pvvc21KliSLw3+NmQca2+Aa1QIMRbpQvZYedsSqkGYwxe+qvXwQ2uxDw==", + "version": "3.972.18", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.972.18.tgz", + "integrity": "sha512-BdsGFuBJUX5PnuZkEV6JRB5g/6ts7iGmN3pXwyoiGCCM2HHXrlFqjkBs+iPX7yO884WqYeQJpme7nwn4DzU5xw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", @@ -1055,15 +1055,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.26", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.26.tgz", - "integrity": "sha512-AilFIh4rI/2hKyyGN6XrB0yN96W2o7e7wyrPWCM6QjZM1mcC/pVkW3IWWRvuBWMpVP8Fg+rMpbzeLQ6dTM4gig==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.27.tgz", + "integrity": "sha512-TIRLO5UR2+FVUGmhYoAwVkKhcVzywEDX/5LzR9tjy1h8FQAXOtFg2IqgmwvxU7y933rkTn9rl6AdgcAUgQ1/Kg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", + "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", @@ -1074,44 +1074,44 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.996.16", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.16.tgz", - "integrity": "sha512-L7Qzoj/qQU1cL5GnYLQP5LbI+wlLCLoINvcykR3htKcQ4tzrPf2DOs72x933BM7oArYj1SKrkb2lGlsJHIic3g==", + "version": "3.996.17", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.17.tgz", + "integrity": "sha512-7B0HIX0tEFmOSJuWzdHZj1WhMXSryM+h66h96ZkqSncoY7J6wq61KOu4Kr57b/YnJP3J/EeQYVFulgR281h+7A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.25", + "@aws-sdk/core": "^3.973.26", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.12", + "@aws-sdk/util-user-agent-node": "^3.973.13", "@smithy/config-resolver": "^4.4.13", - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.27", - "@smithy/middleware-retry": "^4.4.44", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-retry": "^4.4.45", + "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.43", - "@smithy/util-defaults-mode-node": "^4.2.47", + "@smithy/util-defaults-mode-browser": "^4.3.44", + "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -1139,17 +1139,17 @@ } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1019.0.tgz", - "integrity": "sha512-KFv5UaIORIF6MTmEc79MQTPQSnRZjUmOIaOzXn9g6ujtViQLIrNYJiaSmVw8LqK1ebcndS6L6s4bBdLd9AQVJA==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1020.0.tgz", + "integrity": "sha512-13slasDcOC+Dfi252bcB6MCDavfLP11DsAAxROKr3fyvMTWOh/gFZJyE1a5sBhKAQElzMyqlOLvxPp8cyqvEQQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/signature-v4-multi-region": "^3.996.14", + "@aws-sdk/signature-v4-multi-region": "^3.996.15", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-format-url": "^3.972.8", - "@smithy/middleware-endpoint": "^4.4.27", + "@smithy/middleware-endpoint": "^4.4.28", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" }, @@ -1158,12 +1158,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.14", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.14.tgz", - "integrity": "sha512-4nZSrBr1NO+48HCM/6BRU8mnRjuHZjcpziCvLXZk5QVftwWz5Mxqbhwdz4xf7WW88buaTB8uRO2MHklSX1m0vg==", + "version": "3.996.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.15.tgz", + "integrity": "sha512-Ukw2RpqvaL96CjfH/FgfBmy/ZosHBqoHBCFsN61qGg99F33vpntIVii8aNeh65XuOja73arSduskoa4OJea9RQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.26", + "@aws-sdk/middleware-sdk-s3": "^3.972.27", "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", @@ -1175,13 +1175,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.1019.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1019.0.tgz", - "integrity": "sha512-OF+2RfRmUKyjzrRWlDcyju3RBsuqcrYDQ8TwrJg8efcOotMzuZN4U9mpVTIdATpmEc4lWNZBMSjPzrGm6JPnAQ==", + "version": "3.1020.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1020.0.tgz", + "integrity": "sha512-T61KA/VKl0zVUubdxigr1ut7SEpwE1/4CIKb14JDLyTAOne2yWKtQE1dDCSHl0UqrZNwW/bTt+EBHfQbslZJdw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.25", - "@aws-sdk/nested-clients": "^3.996.16", + "@aws-sdk/core": "^3.973.26", + "@aws-sdk/nested-clients": "^3.996.17", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -1273,12 +1273,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.973.12", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.12.tgz", - "integrity": "sha512-8phW0TS8ntENJgDcFewYT/Q8dOmarpvSxEjATu2GUBAutiHr++oEGCiBUwxslCMNvwW2cAPZNT53S/ym8zm/gg==", + "version": "3.973.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.13.tgz", + "integrity": "sha512-s1dCJ0J9WU9UPkT3FFqhKTSquYTkqWXGRaapHFyWwwJH86ZussewhNST5R5TwXVL1VSHq4aJVl9fWK+svaRVCQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.26", + "@aws-sdk/middleware-user-agent": "^3.972.27", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", @@ -2936,19 +2936,6 @@ "win32" ] }, - "node_modules/@smithy/abort-controller": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.12.tgz", - "integrity": "sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/chunked-blob-reader": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.2.tgz", @@ -2992,9 +2979,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.23.12", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.12.tgz", - "integrity": "sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w==", + "version": "3.23.13", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.13.tgz", + "integrity": "sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.3.12", @@ -3003,7 +2990,7 @@ "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.12", - "@smithy/util-stream": "^4.5.20", + "@smithy/util-stream": "^4.5.21", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" @@ -3212,13 +3199,13 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.27", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.27.tgz", - "integrity": "sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA==", + "version": "4.4.28", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.28.tgz", + "integrity": "sha512-p1gfYpi91CHcs5cBq982UlGlDrxoYUX6XdHSo91cQ2KFuz6QloHosO7Jc60pJiVmkWrKOV8kFYlGFFbQ2WUKKQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.12", - "@smithy/middleware-serde": "^4.2.15", + "@smithy/core": "^3.23.13", + "@smithy/middleware-serde": "^4.2.16", "@smithy/node-config-provider": "^4.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", @@ -3231,15 +3218,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.44", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.44.tgz", - "integrity": "sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA==", + "version": "4.4.45", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.45.tgz", + "integrity": "sha512-td1PxpwDIaw5/oP/xIRxBGxJKoF1L4DBAwbZ8wjMuXBYOP/r2ZE/Ocou+mBHx/yk9knFEtDBwhSrYVn+Mz4pHw==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/service-error-classification": "^4.2.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -3251,12 +3238,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.15", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.15.tgz", - "integrity": "sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg==", + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.16.tgz", + "integrity": "sha512-beqfV+RZ9RSv+sQqor3xroUUYgRFCGRw6niGstPG8zO9LgTl0B0MCucxjmrH/2WwksQN7UUgI7KNANoZv+KALA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.12", + "@smithy/core": "^3.23.13", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" @@ -3294,12 +3281,11 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.0.tgz", - "integrity": "sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.1.tgz", + "integrity": "sha512-ejjxdAXjkPIs9lyYyVutOGNOraqUE9v/NjGMKwwFrfOM354wfSD8lmlj8hVwUzQmlLLF4+udhfCX9Exnbmvfzw==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", @@ -3407,17 +3393,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.12.7", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.7.tgz", - "integrity": "sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ==", + "version": "4.12.8", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.8.tgz", + "integrity": "sha512-aJaAX7vHe5i66smoSSID7t4rKY08PbD8EBU7DOloixvhOozfYWdcSYE4l6/tjkZ0vBZhGjheWzB2mh31sLgCMA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.12", - "@smithy/middleware-endpoint": "^4.4.27", + "@smithy/core": "^3.23.13", + "@smithy/middleware-endpoint": "^4.4.28", "@smithy/middleware-stack": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", - "@smithy/util-stream": "^4.5.20", + "@smithy/util-stream": "^4.5.21", "tslib": "^2.6.2" }, "engines": { @@ -3514,13 +3500,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.43", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.43.tgz", - "integrity": "sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ==", + "version": "4.3.44", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.44.tgz", + "integrity": "sha512-eZg6XzaCbVr2S5cAErU5eGBDaOVTuTo1I65i4tQcHENRcZ8rMWhQy1DaIYUSLyZjsfXvmCqZrstSMYyGFocvHA==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" }, @@ -3529,16 +3515,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.47", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.47.tgz", - "integrity": "sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ==", + "version": "4.2.48", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.48.tgz", + "integrity": "sha512-FqOKTlqSaoV3nzO55pMs5NBnZX8EhoI0DGmn9kbYeXWppgHD6dchyuj2HLqp4INJDJbSrj6OFYJkAh/WhSzZPg==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.4.13", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", - "@smithy/smithy-client": "^4.12.7", + "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" }, @@ -3600,13 +3586,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.20", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.20.tgz", - "integrity": "sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw==", + "version": "4.5.21", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.21.tgz", + "integrity": "sha512-KzSg+7KKywLnkoKejRtIBXDmwBfjGvg1U1i/etkC7XSWUyFCoLno1IohV2c74IzQqdhX5y3uE44r/8/wuK+A7Q==", "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^5.3.15", - "@smithy/node-http-handler": "^4.5.0", + "@smithy/node-http-handler": "^4.5.1", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", @@ -3644,12 +3630,11 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.2.13", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.13.tgz", - "integrity": "sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.14.tgz", + "integrity": "sha512-2zqq5o/oizvMaFUlNiTyZ7dbgYv1a893aGut2uaxtbzTx/VYYnRxWzDHuD/ftgcw94ffenua+ZNLrbqwUYE+Bg==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" }, diff --git a/package.json b/package.json index 116300433..35c2d8f33 100644 --- a/package.json +++ b/package.json @@ -18,16 +18,16 @@ "job-totals-fixtures:local": "docker exec node-app /usr/bin/node /app/download-job-totals-fixtures.js" }, "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.1019.0", - "@aws-sdk/client-elasticache": "^3.1019.0", - "@aws-sdk/client-s3": "^3.1019.0", - "@aws-sdk/client-secrets-manager": "^3.1019.0", - "@aws-sdk/client-ses": "^3.1019.0", - "@aws-sdk/client-sqs": "^3.1019.0", - "@aws-sdk/client-textract": "^3.1019.0", - "@aws-sdk/credential-provider-node": "^3.972.27", - "@aws-sdk/lib-storage": "^3.1019.0", - "@aws-sdk/s3-request-presigner": "^3.1019.0", + "@aws-sdk/client-cloudwatch-logs": "^3.1020.0", + "@aws-sdk/client-elasticache": "^3.1020.0", + "@aws-sdk/client-s3": "^3.1020.0", + "@aws-sdk/client-secrets-manager": "^3.1020.0", + "@aws-sdk/client-ses": "^3.1020.0", + "@aws-sdk/client-sqs": "^3.1020.0", + "@aws-sdk/client-textract": "^3.1020.0", + "@aws-sdk/credential-provider-node": "^3.972.28", + "@aws-sdk/lib-storage": "^3.1020.0", + "@aws-sdk/s3-request-presigner": "^3.1020.0", "@opensearch-project/opensearch": "^2.13.0", "@socket.io/admin-ui": "^0.5.1", "@socket.io/redis-adapter": "^8.3.0",