+
{/*------------ Customer email -----------*/}
}
- inline={true}
+ inline
+ fill
>
-
+
{/*------------ Phone number -----------*/}
}
- inline={true}
+ inline
+ fill
>
-
+
+
-
{/*------------ Customer website -----------*/}
- } inline={true}>
-
+ }
+ inline
+ fill
+ >
+
);
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormBasicSection.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormBasicSection.tsx
new file mode 100644
index 000000000..8860301b6
--- /dev/null
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormBasicSection.tsx
@@ -0,0 +1,138 @@
+// @ts-nocheck
+import React from 'react';
+import intl from 'react-intl-universal';
+import { ControlGroup, Divider, Icon as BlueprintIcon } from '@blueprintjs/core';
+import {
+ Hint,
+ FieldRequiredHint,
+ SalutationList,
+ DisplayNameList,
+ FormattedMessage as T,
+ FInputGroup,
+ FFormGroup,
+ Box,
+ Icon,
+ Stack,
+} from '@/components';
+import { CustomerTypeRadioField } from './CustomerTypeRadioField';
+import { CustomerFormSectionTitle } from './CustomerFormSectionTitle';
+import { useAutofocus } from '@/hooks';
+
+export function CustomerFormBasicSection({}) {
+ const firstNameFieldRef = useAutofocus();
+
+ return (
+
+ Customer details
+
+ {/**-----------Customer type. -----------*/}
+
+
+ {/**----------- Contact name -----------*/}
+ }
+ inline
+ fill
+ >
+
+
+ (firstNameFieldRef.current = ref)}
+ fill
+ />
+
+
+
+
+
+
+
+
+ {/*----------- Company Name -----------*/}
+ }
+ inline
+ fill
+ >
+
+
+
+ {/*----------- Display Name -----------*/}
+ }
+ helperText="This is the name that appears on invoices and emails."
+ inline
+ fill
+ >
+
+
+
+
+
+ {/*------------ Vendor email -----------*/}
+ }
+ inline
+ >
+ }
+ />
+
+
+ {/*------------ Phone number -----------*/}
+ }
+ inline={true}
+ >
+
+
+
+
+
+
+ {/*------------ Vendor website -----------*/}
+ } inline={true}>
+ }
+ />
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormContent.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormContent.tsx
new file mode 100644
index 000000000..a857528d7
--- /dev/null
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormContent.tsx
@@ -0,0 +1,45 @@
+import { Tab } from "@blueprintjs/core";
+import { Card, Group } from "@/components";
+import { Tabs } from "@blueprintjs/core";
+import { useState } from "react";
+import { css } from '@emotion/css';
+import { CustomerFloatingActions } from "./CustomerFloatingActions";
+import { CustomerFormSections } from "./CustomerFormFields";
+
+export function CustomerFormContent() {
+ const [selectedTabId, setSelectedTabId] = useState('primary');
+
+ const handleTabChange = (tabId: string) => {
+ const sectionId = String(tabId);
+ setSelectedTabId(sectionId);
+
+ const section = document.querySelector(
+ `[data-section-id="${sectionId}"]`,
+ );
+ if (section) {
+ section.scrollIntoView({ behavior: 'smooth', block: 'start' });
+ }
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFields.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFields.tsx
new file mode 100644
index 000000000..e681a5866
--- /dev/null
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFields.tsx
@@ -0,0 +1,33 @@
+import { Divider } from '@blueprintjs/core';
+import { css } from '@emotion/css';
+import { Box } from '@/components';
+
+import { CustomerFormBasicSection } from './CustomerFormBasicSection';
+import { CustomerFormFinancialSection } from './CustomerFormFinancialSection';
+import { CustomerBillingAddress } from './CustomerBillingAddress';
+import { CustomerShippingAddress } from './CustomerShippingAddress';
+import { CustomerFormNotesSection } from './CustomerFormNotesSection';
+
+const customerFormSectionDividerClass = css`
+ margin: 20px 0;
+`;
+
+export function CustomerFormSections() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFinancialPanel.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFinancialSection.tsx
similarity index 73%
rename from packages/webapp/src/containers/Customers/CustomerForm/CustomerFinancialPanel.tsx
rename to packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFinancialSection.tsx
index 39466dd5c..b9ac52d79 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFinancialPanel.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFinancialSection.tsx
@@ -1,8 +1,7 @@
// @ts-nocheck
import React from 'react';
-import classNames from 'classnames';
-import { FormGroup, Position, Classes, ControlGroup } from '@blueprintjs/core';
-import { FastField, ErrorMessage, useFormikContext } from 'formik';
+import { Position, ControlGroup } from '@blueprintjs/core';
+import { ErrorMessage, useFormikContext } from 'formik';
import { Features } from '@/constants';
import {
FFormGroup,
@@ -11,11 +10,11 @@ import {
CurrencySelectList,
BranchSelect,
FeatureCan,
- Row,
- Col,
FMoneyInputGroup,
ExchangeRateInputGroup,
FDateInput,
+ Icon,
+ Box,
} from '@/components';
import { useCustomerFormContext } from './CustomerFormProvider';
import {
@@ -24,67 +23,56 @@ import {
useSetPrimaryBranchToForm,
} from './utils';
import { useCurrentOrganization } from '@/hooks/state';
+import { CustomerFormSectionTitle } from './CustomerFormSectionTitle';
-/**
- * Customer financial panel.
- */
-export default function CustomerFinancialPanel() {
+export function CustomerFormFinancialSection() {
const { currencies, customerId, branches } = useCustomerFormContext();
// Sets the primary branch to form.
useSetPrimaryBranchToForm();
return (
-
-
-
- {/*------------ Currency -----------*/}
+
+
+
+
+
}
fastField
inline
- >
+ fill
+ >
+ />
- {/*------------ Opening balance -----------*/}
-
- {/*------ Opening Balance Exchange Rate -----*/}
-
- {/*------------ Opening balance at -----------*/}
-
- {/*------------ Opening branch -----------*/}
+
}
name={'opening_balance_branch_id'}
- inline={true}
+ inline
>
-
-
-
+
);
}
-/**
- * Customer opening balance at date field.
- * @returns {JSX.Element}
- */
function CustomerOpeningBalanceAtField() {
const { customerId } = useCustomerFormContext();
@@ -92,10 +80,11 @@ function CustomerOpeningBalanceAtField() {
if (customerId) return null;
return (
-
}
- inline={true}
+ inline
+ fill
helperText={
}
>
date.toLocaleDateString()}
parseDate={(str) => new Date(str)}
+ inputProps={{
+ leftIcon: ,
+ }}
fill={true}
/>
-
+
);
}
-/**
- * Customer opening balance field.
- * @returns {JSX.Element}
- */
function CustomerOpeningBalanceField() {
const { customerId } = useCustomerFormContext();
const { values } = useFormikContext();
@@ -125,15 +113,17 @@ function CustomerOpeningBalanceField() {
}
name={'opening_balance'}
- inline={true}
+ inline
shouldUpdate={openingBalanceFieldShouldUpdate}
shouldUpdateDeps={{ currencyCode: values.currency_code }}
fastField={true}
+ fill
>
-
+
@@ -141,11 +131,6 @@ function CustomerOpeningBalanceField() {
);
}
-/**
- * Customer opening balance exchange rate field if the customer has foreign
- * currency.
- * @returns {JSX.Element}
- */
function CustomerOpeningBalanceExchangeRateField() {
const { values } = useFormikContext();
const { customerId } = useCustomerFormContext();
@@ -158,16 +143,14 @@ function CustomerOpeningBalanceExchangeRateField() {
return null;
}
return (
-
+
{}}
+ onCancel={() => {}}
+ formGroupProps={{ label: ' ' }}
/>
-
);
}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFormik.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFormik.tsx
index e8192963a..57b798727 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFormik.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormFormik.tsx
@@ -1,40 +1,95 @@
-// @ts-nocheck
-import React, { useMemo } from 'react';
+import { useMemo } from 'react';
import intl from 'react-intl-universal';
-import classNames from 'classnames';
-import { Formik, Form } from 'formik';
+import { Formik, Form, FormikHelpers } from 'formik';
import { Intent } from '@blueprintjs/core';
import styled from 'styled-components';
-
-import { CLASSES } from '@/constants/classes';
import { CreateCustomerForm, EditCustomerForm } from './CustomerForm.schema';
-import { compose, transformToForm, saveInvoke } from '@/utils';
+import { compose, transformToForm, saveInvoke, parseBoolean } from '@/utils';
import { useCustomerFormContext } from './CustomerFormProvider';
import { defaultInitialValues } from './utils';
-
import { AppToaster } from '@/components';
-import CustomerFormPrimarySection from './CustomerFormPrimarySection';
-import CustomerFormAfterPrimarySection from './CustomerFormAfterPrimarySection';
-import CustomersTabs from './CustomersTabs';
-import CustomerFloatingActions from './CustomerFloatingActions';
-
import { withCurrentOrganization } from '@/containers/Organization/withCurrentOrganization';
+import { CustomerFormContent } from './CustomerFormContent';
-import '@/style/pages/Customers/Form.scss';
+type CustomerFormValues = {
+ customer_type: string;
+ salutation: string;
+ first_name: string;
+ last_name: string;
+ company_name: string;
+ display_name: string;
-/**
- * Customer form.
- */
-function CustomerFormFormik({
+ email?: string;
+ work_phone?: string;
+ personal_phone?: string;
+ website?: string;
+ note?: string;
+ active: boolean | string;
+
+ billing_address_country: string;
+ billing_address1: string;
+ billing_address2: string;
+ billing_address_city: string;
+ billing_address_state: string;
+ billing_address_postcode?: string;
+ billing_address_phone?: string;
+
+ shipping_address_country: string;
+ shipping_address1: string;
+ shipping_address2: string;
+ shipping_address_city: string;
+ shipping_address_state: string;
+ shipping_address_postcode?: string;
+ shipping_address_phone?: string;
+
+ currency_code: string;
+ opening_balance?: string | number;
+ opening_balance_at?: string;
+ opening_balance_exchange_rate?: string;
+ opening_balance_branch_id?: string;
+
+ [key: string]: any;
+};
+
+type CustomerFormSubmitPayload = {
+ noRedirect?: boolean;
+};
+
+type CustomerFormFormikRootProps = {
+ organization: {
+ base_currency: string;
+ };
+
+ // #ownProps
+ initialValues?: Partial;
+ onSubmitSuccess?: (
+ values: CustomerFormValues,
+ formArgs: FormikHelpers,
+ submitPayload: CustomerFormSubmitPayload,
+ responseData?: unknown,
+ ) => void;
+ onSubmitError?: (
+ values: CustomerFormValues,
+ formArgs: FormikHelpers,
+ submitPayload: CustomerFormSubmitPayload,
+ errorData?: unknown,
+ ) => void;
+ onCancel?: () => void;
+ className?: string;
+};
+
+const EMPTY_INITIAL_VALUES: Partial = {};
+
+function CustomerFormFormikRoot({
organization: { base_currency },
// #ownProps
- initialValues: initialCustomerValues,
+ initialValues: initialCustomerValues = EMPTY_INITIAL_VALUES,
onSubmitSuccess,
onSubmitError,
- onCancel,
+ // `onCancel` is accepted for compatibility but currently not used.
className,
-}) {
+}: CustomerFormFormikRootProps) {
const {
customer,
submitPayload,
@@ -44,25 +99,28 @@ function CustomerFormFormik({
isNewMode,
} = useCustomerFormContext();
- /**
- * Initial values in create and edit mode.
- */
- const initialValues = useMemo(
+ const initialValues = useMemo(
() => ({
...defaultInitialValues,
currency_code: base_currency,
- ...transformToForm(contactDuplicate || customer, defaultInitialValues),
+ ...transformToForm(contactDuplicate ?? customer ?? {}, defaultInitialValues),
...transformToForm(initialCustomerValues, defaultInitialValues),
- }),
+ }) as CustomerFormValues,
[customer, contactDuplicate, base_currency, initialCustomerValues],
);
// Handles the form submit.
- const handleFormSubmit = (values, formArgs) => {
+ const handleFormSubmit = (
+ values: CustomerFormValues,
+ formArgs: FormikHelpers,
+ ) => {
const { setSubmitting, resetForm } = formArgs;
- const formValues = { ...values };
+ const formValues = {
+ ...values,
+ active: parseBoolean(values.active, true),
+ };
- const onSuccess = (res) => {
+ const onSuccess = (res: { data?: unknown }) => {
AppToaster.show({
message: intl.get(
isNewMode
@@ -80,60 +138,40 @@ function CustomerFormFormik({
setSubmitting(false);
saveInvoke(onSubmitError, values, formArgs, submitPayload);
};
-
if (isNewMode) {
createCustomerMutate(formValues).then(onSuccess).catch(onError);
} else {
- editCustomerMutate([customer.id, formValues])
- .then(onSuccess)
- .catch(onError);
+ if (!customer) return;
+ editCustomerMutate([customer.id, formValues]).then(onSuccess).catch(onError);
}
};
return (
-
-
validationSchema={isNewMode ? CreateCustomerForm : EditCustomerForm}
initialValues={initialValues}
onSubmit={handleFormSubmit}
>
-
);
}
-export const CustomerFormHeaderPrimary = styled.div`
- --x-border: #e4e4e4;
-
- .bp4-dark & {
- --x-border: var(--color-dark-gray3);
+const CustomerFormFields = styled.div`
+ .bp4-form-content,
+ .bp6-form-content {
+ min-width: 300px;
+ }
+ .bp4-form-group{
+ margin-bottom: 20px;
+ }
+ .bp4-form-group.bp4-inline label.bp4-label {
+ min-width: 140px;
}
- padding: 10px 0 0;
- margin: 0 0 20px;
- overflow: hidden;
- border-bottom: 1px solid var(--x-border);
- max-width: 1000px;
`;
-export default compose(withCurrentOrganization())(CustomerFormFormik);
+export const CustomerFormFormik = compose(withCurrentOrganization(undefined))(CustomerFormFormikRoot);
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormNotesSection.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormNotesSection.tsx
new file mode 100644
index 000000000..e7b80a8ee
--- /dev/null
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormNotesSection.tsx
@@ -0,0 +1,16 @@
+import { Box, FFormGroup, FormattedMessage as T, FTextArea } from '@/components';
+import { CustomerFormSectionTitle } from './CustomerFormSectionTitle';
+
+export function CustomerFormNotesSection() {
+ return (
+
+
+
+
+
+ } inline>
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormPage.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormPage.tsx
index d19a5802a..c71702cfb 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormPage.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormPage.tsx
@@ -2,73 +2,53 @@
import React from 'react';
import { useParams, useHistory } from 'react-router-dom';
import styled from 'styled-components';
-
-import { DashboardCard, DashboardInsider } from '@/components';
-
-import CustomerFormFormik from './CustomerFormFormik';
+import { Box, DashboardCard, DashboardInsider } from '@/components';
+import { CustomerFormFormik, ustomerFormFormik } from './CustomerFormFormik';
import {
CustomerFormProvider,
useCustomerFormContext,
} from './CustomerFormProvider';
-/**
- * Customer form page loading.
- * @returns {JSX}
- */
-function CustomerFormPageLoading({ children }) {
- const { isFormLoading } = useCustomerFormContext();
-
- return (
-
- {children}
-
- );
-}
-
/**
* Customer form page.
* @returns {JSX}
*/
export default function CustomerFormPage() {
- const history = useHistory();
const { id } = useParams();
-
const customerId = parseInt(id, 10);
-
- // Handle the form submit success.
- const handleSubmitSuccess = (values, formArgs, submitPayload) => {
- if (!submitPayload.noRedirect) {
- history.push('/customers');
- }
- };
- // Handle the form cancel button click.
- const handleFormCancel = () => {
- history.goBack();
- };
-
+
return (
-
-
-
-
-
+
);
}
-const CustomerFormPageFormik = styled(CustomerFormFormik)`
- .page-form {
- &__floating-actions {
- margin-left: -40px;
- margin-right: -40px;
+function CustomerFormPageContent() {
+ const history = useHistory();
+ const { isFormLoading } = useCustomerFormContext();
+
+
+ const handleSubmitSuccess = (values, formArgs, submitPayload) => {
+ if (!submitPayload.noRedirect) {
+ history.push('/customers');
}
}
-`;
-const CustomerDashboardInsider = styled(DashboardInsider)`
- padding-bottom: 64px;
-`;
+ // Handle the form cancel button click.
+ const handleFormCancel = () => {
+ history.goBack();
+ };
+
+
+ return (
+
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormPrimarySection.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormPrimarySection.tsx
deleted file mode 100644
index 2f23a3a97..000000000
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormPrimarySection.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-// @ts-nocheck
-import React from 'react';
-import intl from 'react-intl-universal';
-import classNames from 'classnames';
-import { FormGroup, InputGroup, ControlGroup } from '@blueprintjs/core';
-import { FastField, Field, ErrorMessage } from 'formik';
-import {
- Hint,
- FieldRequiredHint,
- SalutationList,
- DisplayNameList,
- FormattedMessage as T,
- FInputGroup,
- FFormGroup,
-} from '@/components';
-import CustomerTypeRadioField from './CustomerTypeRadioField';
-import { CLASSES } from '@/constants/classes';
-import { inputIntent } from '@/utils';
-import { useAutofocus } from '@/hooks';
-
-/**
- * Customer form primary section.
- */
-export default function CustomerFormPrimarySection({}) {
- const firstNameFieldRef = useAutofocus();
-
- return (
-
- {/**-----------Customer type. -----------*/}
-
-
- {/**----------- Contact name -----------*/}
- }
- inline={true}
- >
-
-
- (firstNameFieldRef.current = ref)}
- />
-
-
-
-
- {/*----------- Company Name -----------*/}
- }
- inline={true}
- >
-
-
-
- {/*----------- Display Name -----------*/}
-
-
-
-
- >
- }
- inline={true}
- >
-
-
-
- );
-}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormProvider.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormProvider.tsx
index aeb767068..f982c83da 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormProvider.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormProvider.tsx
@@ -1,5 +1,4 @@
-// @ts-nocheck
-import React, { useState, createContext } from 'react';
+import React, { createContext, useState } from 'react';
import { useLocation } from 'react-router-dom';
import {
useCustomer,
@@ -12,10 +11,60 @@ import {
import { Features } from '@/constants';
import { useFeatureCan } from '@/hooks/state';
-const CustomerFormContext = createContext();
+type CustomerFormSubmitPayload = {
+ noRedirect?: boolean;
+};
-function CustomerFormProvider({ query, customerId, ...props }) {
- const { state } = useLocation();
+type Customer = {
+ id: number;
+ [key: string]: any;
+};
+
+type Currency = {
+ currency_code: string;
+ [key: string]: any;
+};
+
+type Branch = {
+ id: number;
+ primary?: boolean;
+ [key: string]: any;
+};
+
+type CustomerFormContextValue = {
+ customerId?: number;
+ customer?: Customer;
+ currencies: Currency[];
+ branches: Branch[];
+ contactDuplicate?: Customer;
+ submitPayload: CustomerFormSubmitPayload;
+ isNewMode: boolean;
+
+ isCustomerLoading: boolean;
+ isCurrenciesLoading: boolean;
+ isBranchesSuccess: boolean;
+ isFormLoading: boolean;
+
+ setSubmitPayload: React.Dispatch<
+ React.SetStateAction
+ >;
+
+ editCustomerMutate: (args: [number, any]) => Promise;
+ createCustomerMutate: (values: any) => Promise;
+};
+
+type CustomerFormProviderProps = {
+ query?: unknown;
+ customerId?: number;
+ children?: React.ReactNode;
+};
+
+const CustomerFormContext = createContext(
+ undefined,
+);
+
+export function CustomerFormProvider({ query, customerId, children }: CustomerFormProviderProps) {
+ const { state } = useLocation<{ action?: number | string }>();
const contactId = state?.action;
// Features guard.
@@ -33,7 +82,7 @@ function CustomerFormProvider({ query, customerId, ...props }) {
{ enabled: !!contactId },
);
// Handle fetch Currencies data table
- const { data: currencies, isLoading: isCurrenciesLoading } = useCurrencies();
+ const { data: currencies, isLoading: isCurrenciesLoading } = useCurrencies(undefined);
// Fetches the branches list.
const {
@@ -43,23 +92,26 @@ function CustomerFormProvider({ query, customerId, ...props }) {
} = useBranches(query, { enabled: isBranchFeatureCan });
// Form submit payload.
- const [submitPayload, setSubmitPayload] = useState({});
+ const [submitPayload, setSubmitPayload] = useState({});
- const { mutateAsync: editCustomerMutate } = useEditCustomer();
- const { mutateAsync: createCustomerMutate } = useCreateCustomer();
+ const editCustomerMutation = useEditCustomer(undefined) as any;
+ const createCustomerMutation = useCreateCustomer(undefined) as any;
+ const editCustomerMutate = editCustomerMutation.mutateAsync as CustomerFormContextValue['editCustomerMutate'];
+ const createCustomerMutate =
+ createCustomerMutation.mutateAsync as CustomerFormContextValue['createCustomerMutate'];
// determines whether the form new or duplicate mode.
- const isNewMode = contactId || !customerId;
+ const isNewMode = Boolean(contactId) || !customerId;
const isFormLoading =
isCustomerLoading || isCurrenciesLoading || isBranchesLoading;
- const provider = {
+ const provider: CustomerFormContextValue = {
customerId,
- customer,
- currencies,
- branches,
- contactDuplicate,
+ customer: customer as Customer | undefined,
+ currencies: (currencies as Currency[]) ?? [],
+ branches: (branches as Branch[]) ?? [],
+ contactDuplicate: contactDuplicate as Customer | undefined,
submitPayload,
isNewMode,
@@ -73,9 +125,19 @@ function CustomerFormProvider({ query, customerId, ...props }) {
createCustomerMutate,
};
- return ;
+ return (
+
+ {children}
+
+ );
}
-const useCustomerFormContext = () => React.useContext(CustomerFormContext);
-
-export { CustomerFormProvider, useCustomerFormContext };
+export const useCustomerFormContext = () => {
+ const ctx = React.useContext(CustomerFormContext);
+ if (!ctx) {
+ throw new Error(
+ 'useCustomerFormContext must be used within a CustomerFormProvider',
+ );
+ }
+ return ctx;
+};
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormSectionTitle.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormSectionTitle.tsx
new file mode 100644
index 000000000..826d139f6
--- /dev/null
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerFormSectionTitle.tsx
@@ -0,0 +1,13 @@
+import React from 'react';
+import { css } from '@emotion/css';
+
+const customerFormSectionTitleClass = css`
+ font-size: 14px;
+ color: #8f99a8;
+ margin-bottom: 18px;
+ margin-top: 10px;
+`;
+
+export function CustomerFormSectionTitle({ children }: { children: React.ReactNode | string }) {
+ return {children}
;
+}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerNotePanel.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerNotePanel.tsx
index e3577a38c..c8783954d 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerNotePanel.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerNotePanel.tsx
@@ -1,15 +1,11 @@
// @ts-nocheck
import React from 'react';
-import classNames from 'classnames';
-import { Classes } from '@blueprintjs/core';
import { FormattedMessage as T, FFormGroup, FTextArea } from '@/components';
export default function CustomerNotePanel({ errors, touched, getFieldProps }) {
return (
-
- } inline={false}>
-
-
-
+ } inline={false} fill>
+
+
);
}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerShippingAddress.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerShippingAddress.tsx
new file mode 100644
index 000000000..6607c3033
--- /dev/null
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerShippingAddress.tsx
@@ -0,0 +1,82 @@
+// @ts-nocheck
+import React from 'react';
+import { Box } from '@/components';
+import {
+ FormattedMessage as T,
+ FFormGroup,
+ FInputGroup,
+ FTextArea,
+} from '@/components';
+import { CustomerFormSectionTitle } from './CustomerFormSectionTitle';
+
+export function CustomerShippingAddress() {
+ return (
+
+
+
+
+ }
+ inline
+ fill
+ >
+
+
+
+ }
+ inline
+ fill
+ >
+
+
+
+ }
+ inline
+ fill
+ >
+
+
+
+ }
+ inline
+ fill
+ >
+
+
+
+ }
+ inline
+ fill
+ >
+
+
+
+ }
+ inline
+ fill
+ >
+
+
+
+ }
+ inline
+ fill
+ >
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerTypeRadioField.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerTypeRadioField.tsx
index 78aff5782..866d56977 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerTypeRadioField.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerTypeRadioField.tsx
@@ -1,27 +1,52 @@
// @ts-nocheck
import React from 'react';
import intl from 'react-intl-universal';
-import classNames from 'classnames';
-import { Radio } from '@blueprintjs/core';
-import { FormattedMessage as T, FFormGroup, FRadioGroup } from '@/components';
-
-import { handleStringChange, saveInvoke } from '@/utils';
+import { Button, ButtonGroup } from '@blueprintjs/core';
+import { FastField } from 'formik';
+import { FormattedMessage as T, FFormGroup } from '@/components';
/**
- * Customer type radio field.
+ * Customer type selector (button group).
*/
-export default function RadioCustomer() {
+export function CustomerTypeRadioField() {
return (
}
inline
+ fill
fastField
>
-
-
-
-
+
+ {({ field, form }) => (
+
+
+
+
+ )}
+
);
}
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomersTabs.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomersTabs.tsx
index 02ecd39ac..893a2cd8f 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomersTabs.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomersTabs.tsx
@@ -5,7 +5,7 @@ import { Tabs, Tab } from '@blueprintjs/core';
import CustomerAddressTabs from './CustomerAddressTabs';
import CustomerAttachmentTabs from './CustomerAttachmentTabs';
-import CustomerFinancialPanel from './CustomerFinancialPanel';
+import CustomerFinancialPanel from './CustomerFormFinancialSection';
import CustomerNotePanel from './CustomerNotePanel';
export default function CustomersTabs() {
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/utils.tsx b/packages/webapp/src/containers/Customers/CustomerForm/utils.tsx
index a6d17c45c..458ff1a3f 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/utils.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/utils.tsx
@@ -14,6 +14,7 @@ export const defaultInitialValues = {
last_name: '',
company_name: '',
display_name: '',
+ code: '',
email: '',
work_phone: '',
@@ -23,16 +24,16 @@ export const defaultInitialValues = {
active: true,
billing_address_country: '',
- billing_address_1: '',
- billing_address_2: '',
+ billing_address1: '',
+ billing_address2: '',
billing_address_city: '',
billing_address_state: '',
billing_address_postcode: '',
billing_address_phone: '',
shipping_address_country: '',
- shipping_address_1: '',
- shipping_address_2: '',
+ shipping_address1: '',
+ shipping_address2: '',
shipping_address_city: '',
shipping_address_state: '',
shipping_address_postcode: '',
diff --git a/packages/webapp/src/containers/Dialogs/AccountDialog/utils.tsx b/packages/webapp/src/containers/Dialogs/AccountDialog/utils.tsx
index 3bb43df16..852e3f18d 100644
--- a/packages/webapp/src/containers/Dialogs/AccountDialog/utils.tsx
+++ b/packages/webapp/src/containers/Dialogs/AccountDialog/utils.tsx
@@ -15,10 +15,16 @@ export const AccountDialogAction = {
*/
export const transformApiErrors = (errors) => {
const fields = {};
+ if (errors.find((e) => e.type === 'account_code_required')) {
+ fields.code = intl.get('account_code_is_required');
+ }
if (errors.find((e) => e.type === 'NOT_UNIQUE_CODE')) {
fields.code = intl.get('account_code_is_not_unique');
}
- if (errors.find((e) => e.type === 'ACCOUNT.NAME.NOT.UNIQUE')) {
+ if (errors.find((e) => e.type === 'account_code_not_unique')) {
+ fields.code = intl.get('account_code_is_not_unique');
+ }
+ if (errors.find((e) => e.type === 'account_name_not_unqiue')) {
fields.name = intl.get('account_name_is_already_used');
}
if (
diff --git a/packages/webapp/src/containers/Drawers/AccountDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/AccountDrawer/utils.tsx
index 1a0312a20..9ed26bc71 100644
--- a/packages/webapp/src/containers/Drawers/AccountDrawer/utils.tsx
+++ b/packages/webapp/src/containers/Drawers/AccountDrawer/utils.tsx
@@ -2,7 +2,6 @@
import intl from 'react-intl-universal';
import React from 'react';
-import { FormatDateCell } from '@/components';
import { useAccountDrawerTableOptionsContext } from './AccountDrawerTableOptionsProvider';
/**
@@ -15,8 +14,7 @@ export const useAccountReadEntriesColumns = () => {
() => [
{
Header: intl.get('transaction_date'),
- accessor: 'date',
- Cell: FormatDateCell,
+ accessor: 'formatted_date',
width: 110,
textOverview: true,
},
diff --git a/packages/webapp/src/containers/Drawers/ContactDetailDrawer/ContactDetailActionsBar.tsx b/packages/webapp/src/containers/Drawers/ContactDetailDrawer/ContactDetailActionsBar.tsx
index 27f767133..dfa09477b 100644
--- a/packages/webapp/src/containers/Drawers/ContactDetailDrawer/ContactDetailActionsBar.tsx
+++ b/packages/webapp/src/containers/Drawers/ContactDetailDrawer/ContactDetailActionsBar.tsx
@@ -15,7 +15,7 @@ import { useContactDetailDrawerContext } from './ContactDetailDrawerProvider';
import { withAlertActions } from '@/containers/Alert/withAlertActions';
import { withDrawerActions } from '@/containers/Drawer/withDrawerActions';
-import { DashboardActionsBar, Icon, FormattedMessage as T } from '@/components';
+import { DrawerActionsBar, Icon, FormattedMessage as T } from '@/components';
import { safeCallback, compose } from '@/utils';
@@ -46,7 +46,7 @@ function ContactDetailActionsBar({
};
return (
-
+
-
+
);
}
diff --git a/packages/webapp/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.tsx b/packages/webapp/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.tsx
index cc9487c79..9dbfa395a 100644
--- a/packages/webapp/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.tsx
+++ b/packages/webapp/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.tsx
@@ -23,7 +23,6 @@ import { withDialogActions } from '@/containers/Dialog/withDialogActions';
import { withDrawerActions } from '@/containers/Drawer/withDrawerActions';
import {
- DashboardActionsBar,
Can,
Icon,
FormattedMessage as T,
diff --git a/packages/webapp/src/containers/Drawers/QuickCreateCustomerDrawer/QuickCustomerFormDrawer.tsx b/packages/webapp/src/containers/Drawers/QuickCreateCustomerDrawer/QuickCustomerFormDrawer.tsx
index be033fa2c..7c4330a91 100644
--- a/packages/webapp/src/containers/Drawers/QuickCreateCustomerDrawer/QuickCustomerFormDrawer.tsx
+++ b/packages/webapp/src/containers/Drawers/QuickCreateCustomerDrawer/QuickCustomerFormDrawer.tsx
@@ -8,9 +8,7 @@ import {
CustomerFormProvider,
useCustomerFormContext,
} from '@/containers/Customers/CustomerForm/CustomerFormProvider';
-import CustomerFormFormik, {
- CustomerFormHeaderPrimary,
-} from '@/containers/Customers/CustomerForm/CustomerFormFormik';
+import { CustomerFormFormik } from '@/containers/Customers/CustomerForm/CustomerFormFormik';
import { withDrawerActions } from '@/containers/Drawer/withDrawerActions';
import { DRAWERS } from '@/constants/drawers';
@@ -55,34 +53,14 @@ function QuickCustomerFormDrawer({
return (
-
-
);
}
export default R.compose(withDrawerActions)(QuickCustomerFormDrawer);
-
-const CustomerFormCard = styled(Card)`
- margin: 15px;
- padding: 25px;
- margin-bottom: calc(15px + 65px);
-
- ${CustomerFormHeaderPrimary} {
- padding-top: 0;
- }
- .page-form {
- padding: 0;
-
- &__floating-actions {
- margin-left: -41px;
- margin-right: -41px;
- }
- }
-`;
diff --git a/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickVendorFormDrawer.tsx b/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickVendorFormDrawer.tsx
index 56e09c17b..bd5957016 100644
--- a/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickVendorFormDrawer.tsx
+++ b/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickVendorFormDrawer.tsx
@@ -8,8 +8,8 @@ import {
VendorFormProvider,
useVendorFormContext,
} from '@/containers/Vendors/VendorForm/VendorFormProvider';
-import VendorFormFormik, {
- VendorFormHeaderPrimary,
+import {
+ VendorFormFormik,
} from '@/containers/Vendors/VendorForm/VendorFormFormik';
import { withDrawerActions } from '@/containers/Drawer/withDrawerActions';
@@ -62,13 +62,11 @@ function QuickVendorFormDrawer({
return (
-
-
);
@@ -79,20 +77,3 @@ export default R.compose(
withDashboardActions,
)(QuickVendorFormDrawer);
-const VendorFormCard = styled(Card)`
- margin: 15px;
- padding: 25px;
- margin-bottom: calc(15px + 65px);
-
- ${VendorFormHeaderPrimary} {
- padding-top: 0;
- }
- .page-form {
- padding: 0;
-
- &__floating-actions {
- margin-left: -41px;
- margin-right: -41px;
- }
- }
-`;
diff --git a/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickWriteVendorDrawerContent.tsx b/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickWriteVendorDrawerContent.tsx
index de4e7fe3b..2f75f99b7 100644
--- a/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickWriteVendorDrawerContent.tsx
+++ b/packages/webapp/src/containers/Drawers/QuickWriteVendorDrawer/QuickWriteVendorDrawerContent.tsx
@@ -18,7 +18,6 @@ export default function QuickWriteVendorDrawerContent({ displayName, autofillRef
}
-
/>
diff --git a/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailActionsBar.tsx b/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailActionsBar.tsx
index c6c312b6c..70ec99f1d 100644
--- a/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailActionsBar.tsx
+++ b/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailActionsBar.tsx
@@ -20,7 +20,7 @@ import {
If,
Icon,
FormattedMessage as T,
- DashboardActionsBar,
+ DrawerActionsBar,
Can,
} from '@/components';
@@ -63,7 +63,7 @@ function VendorCreditDetailActionsBar({
};
return (
-
+
-
+
);
}
diff --git a/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx b/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx
index 19cb5ab0a..2e5ac09cf 100644
--- a/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx
+++ b/packages/webapp/src/containers/Expenses/ExpenseForm/utils.tsx
@@ -152,17 +152,17 @@ export const transformFormValuesToRequest = (values) => {
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = useExpenseFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = useExpenseFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/GlobalErrors/GlobalErrors.tsx b/packages/webapp/src/containers/GlobalErrors/GlobalErrors.tsx
index 70e895801..5e882bf0e 100644
--- a/packages/webapp/src/containers/GlobalErrors/GlobalErrors.tsx
+++ b/packages/webapp/src/containers/GlobalErrors/GlobalErrors.tsx
@@ -57,7 +57,7 @@ function GlobalErrors({
if (globalErrors.access_denied) {
toastKeySomethingWrong = AppToaster.show(
{
- message: intl.get('global_error.you_dont_have_permissions'),
+ message: globalErrors.access_denied.message || intl.get('global_error.you_dont_have_permissions'),
intent: Intent.DANGER,
onDismiss: () => {
globalErrorsSet({ access_denied: false });
diff --git a/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx b/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx
index 3caecb50c..f31872534 100644
--- a/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx
+++ b/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx
@@ -111,12 +111,12 @@ export default function PreferencesGeneralForm({ isSubmitting }) {
>
diff --git a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx
index b570b132c..2641172f6 100644
--- a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx
+++ b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx
@@ -231,25 +231,25 @@ export const handleErrors = (errors, { setErrors }) => {
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = useBillFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = useBillFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
export const useSetPrimaryWarehouseToForm = () => {
const { setFieldValue } = useFormikContext();
- const { warehouses, isWarehousesSuccess } = useBillFormContext();
+ const { warehouses, isWarehousesSuccess, isNewMode } = useBillFormContext();
React.useEffect(() => {
- if (isWarehousesSuccess) {
+ if (isWarehousesSuccess && isNewMode) {
const primaryWarehouse =
warehouses.find((b) => b.primary) || first(warehouses);
@@ -257,7 +257,7 @@ export const useSetPrimaryWarehouseToForm = () => {
setFieldValue('warehouse_id', primaryWarehouse.id);
}
}
- }, [isWarehousesSuccess, setFieldValue, warehouses]);
+ }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Purchases/Bills/BillUniversalSearch.tsx b/packages/webapp/src/containers/Purchases/Bills/BillUniversalSearch.tsx
index b54ced67d..cabc7b353 100644
--- a/packages/webapp/src/containers/Purchases/Bills/BillUniversalSearch.tsx
+++ b/packages/webapp/src/containers/Purchases/Bills/BillUniversalSearch.tsx
@@ -1,10 +1,10 @@
// @ts-nocheck
import React from 'react';
import intl from 'react-intl-universal';
-import { MenuItem } from '@blueprintjs/core';
+import { MenuItem, Intent } from '@blueprintjs/core';
import { formattedAmount } from '@/utils';
-import { T, Icon, Choose, If } from '@/components';
+import { T, Icon, Choose, If, TextStatus } from '@/components';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
import { AbilitySubject, BillAction } from '@/constants/abilityOption';
@@ -41,35 +41,35 @@ export function BillStatus({ bill }) {
return (
-
+
-
+
-
+
{intl.get('overdue_by', { overdue: bill.overdue_days })}
-
+
-
+
{intl.get('due_in', { due: bill.remaining_days })}
-
+
-
+
{intl.get('day_partially_paid', {
due: formattedAmount(bill.due_amount, bill.currency_code),
})}
-
+
-
+
-
+
);
diff --git a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx
index 7724629be..720fd5f36 100644
--- a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx
+++ b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx
@@ -156,25 +156,25 @@ export const useObserveVendorCreditNoSettings = (prefix, nextNumber) => {
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = useVendorCreditNoteFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = useVendorCreditNoteFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
export const useSetPrimaryWarehouseToForm = () => {
const { setFieldValue } = useFormikContext();
- const { warehouses, isWarehousesSuccess } = useVendorCreditNoteFormContext();
+ const { warehouses, isWarehousesSuccess, isNewMode } = useVendorCreditNoteFormContext();
React.useEffect(() => {
- if (isWarehousesSuccess) {
+ if (isWarehousesSuccess && isNewMode) {
const primaryWarehouse =
warehouses.find((b) => b.primary) || first(warehouses);
@@ -182,7 +182,7 @@ export const useSetPrimaryWarehouseToForm = () => {
setFieldValue('warehouse_id', primaryWarehouse.id);
}
}
- }, [isWarehousesSuccess, setFieldValue, warehouses]);
+ }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx b/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx
index 1bd2f3c01..6bdf0c609 100644
--- a/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx
+++ b/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/utils.tsx
@@ -115,17 +115,17 @@ export const transformFormToRequest = (form) => {
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = usePaymentMadeFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = usePaymentMadeFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteCustomize/CreditNoteCustomizeContent.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteCustomize/CreditNoteCustomizeContent.tsx
index 08efc0897..03104ced0 100644
--- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteCustomize/CreditNoteCustomizeContent.tsx
+++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteCustomize/CreditNoteCustomizeContent.tsx
@@ -16,6 +16,7 @@ import { useDrawerActions } from '@/hooks/state';
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
+import { Box } from '@/components';
export function CreditNoteCustomizeContent() {
const { payload, name } = useDrawerContext();
@@ -45,7 +46,9 @@ function CreditNoteCustomizeFormContent() {
return (
-
+
+
+
diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx
index 470cc3f5c..b02903d4f 100644
--- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx
+++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx
@@ -148,25 +148,25 @@ export const entriesFieldShouldUpdate = (newProps, oldProps) => {
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = useCreditNoteFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = useCreditNoteFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
export const useSetPrimaryWarehouseToForm = () => {
const { setFieldValue } = useFormikContext();
- const { warehouses, isWarehousesSuccess } = useCreditNoteFormContext();
+ const { warehouses, isWarehousesSuccess, isNewMode } = useCreditNoteFormContext();
React.useEffect(() => {
- if (isWarehousesSuccess) {
+ if (isWarehousesSuccess && isNewMode) {
const primaryWarehouse =
warehouses.find((b) => b.primary) || first(warehouses);
@@ -174,7 +174,7 @@ export const useSetPrimaryWarehouseToForm = () => {
setFieldValue('warehouse_id', primaryWarehouse.id);
}
}
- }, [isWarehousesSuccess, setFieldValue, warehouses]);
+ }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateCustomize/EstimateCustomizeContent.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateCustomize/EstimateCustomizeContent.tsx
index 4a3424417..5c8c3425b 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateCustomize/EstimateCustomizeContent.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateCustomize/EstimateCustomizeContent.tsx
@@ -16,6 +16,7 @@ import { useDrawerActions } from '@/hooks/state';
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
+import { Box } from '@/components';
export function EstimateCustomizeContent() {
const { payload, name } = useDrawerContext();
@@ -44,7 +45,9 @@ function EstimateCustomizeFormContent() {
return (
-
+
+
+
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx
index 1bca08342..49b268747 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx
@@ -182,10 +182,10 @@ export const transfromsFormValuesToRequest = (values) => {
export const useSetPrimaryWarehouseToForm = () => {
const { setFieldValue } = useFormikContext();
- const { warehouses, isWarehousesSuccess } = useEstimateFormContext();
+ const { warehouses, isWarehousesSuccess, isNewMode } = useEstimateFormContext();
React.useEffect(() => {
- if (isWarehousesSuccess) {
+ if (isWarehousesSuccess && isNewMode) {
const primaryWarehouse =
warehouses.find((b) => b.primary) || first(warehouses);
@@ -193,22 +193,22 @@ export const useSetPrimaryWarehouseToForm = () => {
setFieldValue('warehouse_id', primaryWarehouse.id);
}
}
- }, [isWarehousesSuccess, setFieldValue, warehouses]);
+ }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]);
};
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = useEstimateFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = useEstimateFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailReceiptPreview.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailReceiptPreview.tsx
index 8ca38db20..32b47d00a 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailReceiptPreview.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendMailReceiptPreview.tsx
@@ -18,7 +18,7 @@ const estimatePreviewCss = css`
export const EstimateSendMailReceiptPreview = () => {
return (
-
+
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendPdfPreviewConnected.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendPdfPreviewConnected.tsx
index eb57273a0..c2b4f17b0 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendPdfPreviewConnected.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSendPdfPreviewConnected.tsx
@@ -7,7 +7,7 @@ import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
export function EstimateSendPdfPreviewConnected() {
return (
-
+
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimateUniversalSearch.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimateUniversalSearch.tsx
index fbdda4f4a..ef6e24bd3 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimateUniversalSearch.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimateUniversalSearch.tsx
@@ -1,9 +1,9 @@
// @ts-nocheck
import React from 'react';
import intl from 'react-intl-universal';
-import { MenuItem } from '@blueprintjs/core';
+import { MenuItem, Intent } from '@blueprintjs/core';
-import { Choose, T, Icon } from '@/components';
+import { Choose, T, Icon, TextStatus } from '@/components';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
import { AbilitySubject, SaleEstimateAction } from '@/constants/abilityOption';
@@ -37,28 +37,28 @@ export const EstimateUniversalSearchSelect = withDrawerActions(
export const EstimateStatus = ({ estimate }) => (
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx
index 1e9fb0537..59e776d8c 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx
@@ -264,10 +264,10 @@ const transformPaymentMethodsToForm = (
export const useSetPrimaryWarehouseToForm = () => {
const { setFieldValue } = useFormikContext();
- const { warehouses, isWarehousesSuccess } = useInvoiceFormContext();
+ const { warehouses, isWarehousesSuccess, isNewMode } = useInvoiceFormContext();
React.useEffect(() => {
- if (isWarehousesSuccess) {
+ if (isWarehousesSuccess && isNewMode) {
const primaryWarehouse =
warehouses.find((b) => b.primary) || first(warehouses);
@@ -275,22 +275,22 @@ export const useSetPrimaryWarehouseToForm = () => {
setFieldValue('warehouse_id', primaryWarehouse.id);
}
}
- }, [isWarehousesSuccess, setFieldValue, warehouses]);
+ }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]);
};
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = useInvoiceFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = useInvoiceFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceUniversalSearch.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceUniversalSearch.tsx
index aa76f2481..879ccf2d8 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceUniversalSearch.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceUniversalSearch.tsx
@@ -1,9 +1,9 @@
// @ts-nocheck
import React from 'react';
import intl from 'react-intl-universal';
-import { MenuItem } from '@blueprintjs/core';
+import { MenuItem, Intent } from '@blueprintjs/core';
-import { T, Choose, Icon } from '@/components';
+import { T, Choose, Icon, TextStatus } from '@/components';
import { highlightText } from '@/utils';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
@@ -39,29 +39,29 @@ function InvoiceStatus({ customer }) {
return (
-
+
-
+
-
+
{intl.get('overdue_by', { overdue: customer.overdue_days })}
-
+
-
+
{intl.get('due_in', { due: customer.remaining_days })}
-
+
-
+
-
+
);
@@ -94,7 +94,6 @@ export function InvoiceUniversalSearchItem(
>
}
onClick={handleClick}
- className={'universal-search__item--invoice'}
/>
);
}
diff --git a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx
index 4464b8ea9..f398ece32 100644
--- a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx
+++ b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/utils.tsx
@@ -177,17 +177,17 @@ export const transformFormToRequest = (form) => {
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = usePaymentReceiveFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = usePaymentReceiveFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedCustomize/PaymentReceivedCustomizeContent.tsx b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedCustomize/PaymentReceivedCustomizeContent.tsx
index 10eea4c87..f64dee669 100644
--- a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedCustomize/PaymentReceivedCustomizeContent.tsx
+++ b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedCustomize/PaymentReceivedCustomizeContent.tsx
@@ -19,6 +19,7 @@ import { useDrawerActions } from '@/hooks/state';
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
+import { Box } from '@/components';
export function PaymentReceivedCustomizeContent() {
const { payload, name } = useDrawerContext();
@@ -51,7 +52,9 @@ function PaymentReceivedCustomizeFormContent() {
return (
-
+
+
+
diff --git a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewPdf.tsx b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewPdf.tsx
index 18eb69fec..4a18d05bb 100644
--- a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewPdf.tsx
+++ b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewPdf.tsx
@@ -7,7 +7,7 @@ import { PaymentReceivedMailPreviewHeader } from './PaymentReceivedMailPreviewHe
export function PaymentReceivedSendMailPreviewPdf() {
return (
-
+
@@ -22,7 +22,6 @@ function PaymentReceivedSendPdfPreviewIframe() {
const { data, isLoading } = useGetPaymentReceiveHtml(
payload?.paymentReceivedId,
);
-
if (isLoading && data) {
return ;
}
diff --git a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewReceipt.tsx b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewReceipt.tsx
index fd783b24a..2c619e247 100644
--- a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewReceipt.tsx
+++ b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceivedMailDrawer/PaymentReceivedMailPreviewReceipt.tsx
@@ -18,7 +18,7 @@ const mailReceiptCss = css`
export function PaymentReceivedMailPreviewReceipt() {
return (
-
+
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptCustomize/ReceiptCustomizeContent.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptCustomize/ReceiptCustomizeContent.tsx
index baf816735..324c9881f 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptCustomize/ReceiptCustomizeContent.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptCustomize/ReceiptCustomizeContent.tsx
@@ -16,6 +16,7 @@ import { useDrawerActions } from '@/hooks/state';
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
+import { Box } from '@/components';
export function ReceiptCustomizeContent() {
const { payload, name } = useDrawerContext();
@@ -44,7 +45,9 @@ function ReceiptCustomizeFormContent() {
return (
-
+
+
+
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx
index bca99c9f6..0eca60ca3 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx
@@ -173,10 +173,10 @@ export const transformFormValuesToRequest = (values) => {
export const useSetPrimaryWarehouseToForm = () => {
const { setFieldValue } = useFormikContext();
- const { warehouses, isWarehousesSuccess } = useReceiptFormContext();
+ const { warehouses, isWarehousesSuccess, isNewMode } = useReceiptFormContext();
React.useEffect(() => {
- if (isWarehousesSuccess) {
+ if (isWarehousesSuccess && isNewMode) {
const primaryWarehouse =
warehouses.find((b) => b.primary) || first(warehouses);
@@ -184,22 +184,22 @@ export const useSetPrimaryWarehouseToForm = () => {
setFieldValue('warehouse_id', primaryWarehouse.id);
}
}
- }, [isWarehousesSuccess, setFieldValue, warehouses]);
+ }, [isWarehousesSuccess, setFieldValue, warehouses, isNewMode]);
};
export const useSetPrimaryBranchToForm = () => {
const { setFieldValue } = useFormikContext();
- const { branches, isBranchesSuccess } = useReceiptFormContext();
+ const { branches, isBranchesSuccess, isNewMode } = useReceiptFormContext();
React.useEffect(() => {
- if (isBranchesSuccess) {
+ if (isBranchesSuccess && isNewMode) {
const primaryBranch = branches.find((b) => b.primary) || first(branches);
if (primaryBranch) {
setFieldValue('branch_id', primaryBranch.id);
}
}
- }, [isBranchesSuccess, setFieldValue, branches]);
+ }, [isBranchesSuccess, setFieldValue, branches, isNewMode]);
};
/**
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPdfPreview.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPdfPreview.tsx
index 54d81ab37..ac360aa5e 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPdfPreview.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPdfPreview.tsx
@@ -7,7 +7,7 @@ import { SendMailViewPreviewPdfIframe } from '../../Estimates/SendMailViewDrawer
export function ReceiptSendMailPdfPreview() {
return (
-
+
@@ -26,7 +26,5 @@ function ReceiptSendPdfPreviewIframe() {
}
const iframeSrcDoc = data?.htmlContent;
- console.log(data, 'data');
-
return ;
}
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreview.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreview.tsx
index 7eadc43a5..789e2c63e 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreview.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptSendMailDrawer/ReceiptSendMailPreview.tsx
@@ -13,7 +13,7 @@ const receiptPreviewCss = css`
export function ReceiptSendMailPreview() {
return (
-
+
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptUniversalSearch.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptUniversalSearch.tsx
index 7b7c645d8..9c1aca8be 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptUniversalSearch.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptUniversalSearch.tsx
@@ -1,9 +1,8 @@
// @ts-nocheck
import React from 'react';
import intl from 'react-intl-universal';
-import { MenuItem } from '@blueprintjs/core';
-
-import { Icon, Choose, T } from '@/components';
+import { MenuItem, Intent } from '@blueprintjs/core';
+import { Icon, Choose, T, TextStatus } from '@/components';
import { RESOURCES_TYPES } from '@/constants/resourcesTypes';
import { AbilitySubject, SaleReceiptAction } from '@/constants/abilityOption';
import { withDrawerActions } from '@/containers/Drawer/withDrawerActions';
@@ -39,15 +38,15 @@ function ReceiptStatus({ receipt }) {
return (
-
+
-
+
-
+
-
+
);
diff --git a/packages/webapp/src/containers/TaxRates/containers/_utils.tsx b/packages/webapp/src/containers/TaxRates/containers/_utils.tsx
index 29fe64649..fb752e5bf 100644
--- a/packages/webapp/src/containers/TaxRates/containers/_utils.tsx
+++ b/packages/webapp/src/containers/TaxRates/containers/_utils.tsx
@@ -1,8 +1,8 @@
// @ts-nocheck
import React from 'react';
-import { Intent, Tag } from '@blueprintjs/core';
+import { Intent, Tag, Classes } from '@blueprintjs/core';
import { Align } from '@/constants';
-import styled from 'styled-components';
+import clsx from 'classnames';
const codeAccessor = (taxRate) => {
return (
@@ -28,13 +28,17 @@ const nameAccessor = (taxRate) => {
return (
<>
{taxRate.name}
- {!!taxRate.is_compound && (Compound tax)}
+ {!!taxRate.is_compound && (
+ (Compound tax)
+ )}
>
);
};
const DescriptionAccessor = (taxRate) => {
- return {taxRate.description};
+ return (
+ {taxRate.description}
+ );
};
/**
@@ -72,11 +76,3 @@ export const useTaxRatesTableColumns = () => {
];
};
-const CompoundText = styled('span')`
- color: #738091;
- margin-left: 5px;
-`;
-
-const DescriptionText = styled('span')`
- color: #5f6b7c;
-`;
diff --git a/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentActionsBar.tsx b/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentActionsBar.tsx
index 1fcf96aa6..051d03128 100644
--- a/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentActionsBar.tsx
+++ b/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentActionsBar.tsx
@@ -13,7 +13,7 @@ import {
Position,
} from '@blueprintjs/core';
import * as R from 'ramda';
-import { AppToaster, Can, DashboardActionsBar, Icon } from '@/components';
+import { AppToaster, Can, DrawerActionsBar, Icon } from '@/components';
import { AbilitySubject, TaxRateAction } from '@/constants/abilityOption';
import { withDrawerActions } from '@/containers/Drawer/withDrawerActions';
import { withAlertActions } from '@/containers/Alert/withAlertActions';
@@ -83,7 +83,7 @@ function TaxRateDetailsContentActionsBar({
};
return (
-
+
-
+
);
}
diff --git a/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentDetails.tsx b/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentDetails.tsx
index e145ddaef..ac6e9dd69 100644
--- a/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentDetails.tsx
+++ b/packages/webapp/src/containers/TaxRates/drawers/TaxRateDetailsDrawer/TaxRateDetailsContentDetails.tsx
@@ -74,9 +74,13 @@ const TaxRateHeader = styled(`div`)`
const TaxRateAmount = styled('div')`
line-height: 1;
font-size: 30px;
- color: #565b71;
font-weight: 600;
display: inline-block;
+ color: var(--x-color-amount-text, #565b71);
+
+ .bp4-dark & {
+ color: rgba(255, 255, 255, 0.9);
+ }
`;
const TaxRateActiveTag = styled(Tag)`
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorAttachmentTab.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorAttachmentTab.tsx
index 7cbb5735f..325b32f35 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorAttachmentTab.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorAttachmentTab.tsx
@@ -5,7 +5,7 @@ import { Dragzone, FormattedMessage as T } from '@/components';
/**
* Vendor Attachment Tab.
*/
-function VendorAttachmentTab() {
+export function VendorAttachmentTab() {
return (
);
}
-
-export default VendorAttachmentTab;
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorBillingAddress.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorBillingAddress.tsx
new file mode 100644
index 000000000..f199b5279
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorBillingAddress.tsx
@@ -0,0 +1,88 @@
+// @ts-nocheck
+import { Box } from '@/components';
+import {
+ FormattedMessage as T,
+ FFormGroup,
+ FInputGroup,
+ FTextArea,
+} from '@/components';
+import { VendorFormSectionTitle } from './VendorFormSectionTitle';
+
+export function VendorBillingAddress() {
+ return (
+
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFinanicalPanelTab.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFinanicalPanelTab.tsx
index 9c0616664..738d1b799 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorFinanicalPanelTab.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFinanicalPanelTab.tsx
@@ -28,7 +28,7 @@ import { useCurrentOrganization } from '@/hooks/state';
/**
* Vendor Finaniceal Panel Tab.
*/
-export default function VendorFinanicalPanelTab() {
+export function VendorFinanicalPanelTab() {
const { currencies, branches } = useVendorFormContext();
// Sets the primary branch to form.
@@ -44,10 +44,12 @@ export default function VendorFinanicalPanelTab() {
label={}
fastField
inline
+ fastField
>
@@ -93,16 +95,17 @@ function VendorOpeningBalanceField() {
}
- inline={true}
shouldUpdate={openingBalanceFieldShouldUpdate}
shouldUpdateDeps={{ currencyCode: values.currency_code }}
- fastField={true}
+ inline
+ fastField
>
@@ -123,8 +126,9 @@ function VendorOpeningBalanceAtField() {
}
- inline={true}
helperText={}
+ inline
+ fastField
>
date.toLocaleDateString()}
parseDate={(str) => new Date(str)}
- fill={true}
+ fill
+ fastField
/>
);
@@ -156,12 +161,14 @@ function VendorOpeningBalanceExchangeRateField() {
);
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFloatingActions.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFloatingActions.tsx
index 99fbf0b96..6dd38334e 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorFloatingActions.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFloatingActions.tsx
@@ -1,5 +1,4 @@
// @ts-nocheck
-import React from 'react';
import {
Intent,
Button,
@@ -11,53 +10,37 @@ import {
MenuItem,
} from '@blueprintjs/core';
import styled from 'styled-components';
-import classNames from 'classnames';
import { useFormikContext } from 'formik';
import { Group, Icon, FormattedMessage as T } from '@/components';
-import { CLASSES } from '@/constants/classes';
import { useVendorFormContext } from './VendorFormProvider';
-import { safeInvoke } from '@/utils';
/**
* Vendor floating actions bar.
*/
-export default function VendorFloatingActions({ onCancel }) {
+export function VendorFloatingActions() {
// Formik context.
- const { resetForm, isSubmitting, submitForm } = useFormikContext();
+ const { isSubmitting, submitForm } = useFormikContext();
// Vendor form context.
const { isNewMode, setSubmitPayload } = useVendorFormContext();
// Handle the submit button.
- const handleSubmitBtnClick = (event) => {
+ const handleSubmitBtnClick = () => {
setSubmitPayload({ noRedirect: false });
};
// Handle the submit & new button click.
- const handleSubmitAndNewClick = (event) => {
+ const handleSubmitAndNewClick = () => {
submitForm();
setSubmitPayload({ noRedirect: true });
};
- // Handle cancel button click.
- const handleCancelBtnClick = (event) => {
- safeInvoke(onCancel, event);
- };
-
- // Handle clear button click.
- const handleClearBtnClick = (event) => {
- resetForm();
- };
-
return (
-
+
{/* ----------- Save and New ----------- */}
-
}
- minimal={true}
interactionKind={PopoverInteractionKind.CLICK}
- position={Position.BOTTOM_LEFT}
+ position={Position.BOTTOM_RIGHT}
+ minimal
>
- {/* ----------- Clear & Reset----------- */}
- : }
- />
- {/* ----------- Cancel ----------- */}
- }
- />
-
+
);
}
-const SaveButton = styled(Button)`
- min-width: 100px;
-`;
+const FloatingActionsGroup = styled(Group)`
+ padding: 10px 0;
+ padding-left: 165px;
+ border-top: 1px solid #50555a;
+ position: sticky;
+ bottom: 0;
+ background: var(--color-card-background);
+ z-index: 1;
+`;
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx
index 5e64c61f0..891d415a8 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx
@@ -10,28 +10,28 @@ const Schema = Yup.object().shape({
display_name: Yup.string().trim().required().label(intl.get('display_name_')),
email: Yup.string().email().nullable(),
- work_phone: Yup.number(),
- personal_phone: Yup.number(),
+ work_phone: Yup.string().nullable(),
+ personal_phone: Yup.string().nullable(),
website: Yup.string().url().nullable(),
active: Yup.boolean(),
note: Yup.string().trim(),
billing_address_country: Yup.string().trim(),
- billing_address_1: Yup.string().trim(),
- billing_address_2: Yup.string().trim(),
+ billing_address1: Yup.string().trim(),
+ billing_address2: Yup.string().trim(),
billing_address_city: Yup.string().trim(),
billing_address_state: Yup.string().trim(),
billing_address_postcode: Yup.string().nullable(),
- billing_address_phone: Yup.number(),
+ billing_address_phone: Yup.string().nullable(),
shipping_address_country: Yup.string().trim(),
- shipping_address_1: Yup.string().trim(),
- shipping_address_2: Yup.string().trim(),
+ shipping_address1: Yup.string().trim(),
+ shipping_address2: Yup.string().trim(),
shipping_address_city: Yup.string().trim(),
shipping_address_state: Yup.string().trim(),
shipping_address_postcode: Yup.string().nullable(),
- shipping_address_phone: Yup.number(),
+ shipping_address_phone: Yup.string().nullable(),
opening_balance: Yup.number().nullable(),
currency_code: Yup.string(),
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormAfterPrimarySection.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormAfterPrimarySection.tsx
index 050275ba5..a5d031d32 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormAfterPrimarySection.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormAfterPrimarySection.tsx
@@ -2,21 +2,22 @@
import React from 'react';
import intl from 'react-intl-universal';
import { ControlGroup } from '@blueprintjs/core';
-import { FormattedMessage as T, FFormGroup, FInputGroup } from '@/components';
+import { FormattedMessage as T, FFormGroup, FInputGroup, Box } from '@/components';
/**
* Vendor form after primary section.
*/
-function VendorFormAfterPrimarySection() {
+export function VendorFormAfterPrimarySection() {
return (
-
+
{/*------------ Vendor email -----------*/}
}
- inline={true}
+ inline
+ fastField
>
-
+
{/*------------ Phone number -----------*/}
@@ -24,23 +25,23 @@ function VendorFormAfterPrimarySection() {
name={'work_phone'}
className={'form-group--phone-number'}
label={}
- inline={true}
+ inline
+ fastField
>
-
+
{/*------------ Vendor website -----------*/}
- } inline={true}>
-
+ } inline fastField>
+
-
+
);
}
-
-export default VendorFormAfterPrimarySection;
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormBasicSection.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormBasicSection.tsx
new file mode 100644
index 000000000..9f32c44bb
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormBasicSection.tsx
@@ -0,0 +1,141 @@
+// @ts-nocheck
+import intl from 'react-intl-universal';
+import { ControlGroup, Divider, Icon as BlueprintIcon } from '@blueprintjs/core';
+import {
+ Hint,
+ FieldRequiredHint,
+ SalutationList,
+ DisplayNameList,
+ FormattedMessage as T,
+ FInputGroup,
+ FFormGroup,
+ Box,
+ Icon,
+ Stack,
+} from '@/components';
+import { VendorFormSectionTitle } from './VendorFormSectionTitle';
+import { useAutofocus } from '@/hooks';
+
+export function VendorFormBasicSection({}) {
+ const firstNameFieldRef = useAutofocus();
+
+ return (
+
+ Vendor details
+
+ {/**----------- Contact name -----------*/}
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+ (firstNameFieldRef.current = ref)}
+ fill
+ fastField
+ />
+
+
+
+
+
+
+
+
+ {/*----------- Company Name -----------*/}
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ {/*----------- Display Name -----------*/}
+ }
+ helperText="This is the name that appears on invoices and emails."
+ inline
+ fill
+ fastField
+ >
+
+
+
+
+
+ {/*------------ Vendor email -----------*/}
+ }
+ inline
+ fastField
+ >
+ }
+ fastField
+ />
+
+
+ {/*------------ Phone number -----------*/}
+ }
+ inline
+ fastField
+ >
+
+
+
+
+
+
+ {/*------------ Vendor website -----------*/}
+ } inline fastField>
+ }
+ fastField
+ />
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormContent.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormContent.tsx
new file mode 100644
index 000000000..d92569db6
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormContent.tsx
@@ -0,0 +1,45 @@
+// @ts-nocheck
+import { Tab } from "@blueprintjs/core";
+import { Card, Group } from "@/components";
+import { Tabs } from "@blueprintjs/core";
+import { useState } from "react";
+import { css } from '@emotion/css';
+import { VendorFloatingActions } from "./VendorFloatingActions";
+import { VendorFormSections } from "./VendorFormFields";
+
+export function VendorFormContent() {
+ const [selectedTabId, setSelectedTabId] = useState('primary');
+
+ const handleTabChange = (tabId: string) => {
+ const sectionId = String(tabId);
+ setSelectedTabId(sectionId);
+
+ const section = document.querySelector(
+ `[data-section-id="${sectionId}"]`,
+ );
+ if (section) {
+ section.scrollIntoView({ behavior: 'smooth', block: 'start' });
+ }
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFields.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFields.tsx
new file mode 100644
index 000000000..63fbbf624
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFields.tsx
@@ -0,0 +1,34 @@
+// @ts-nocheck
+import { Divider } from '@blueprintjs/core';
+import { css } from '@emotion/css';
+import { Box } from '@/components';
+
+import { VendorFormBasicSection } from './VendorFormBasicSection';
+import { VendorFormFinancialSection } from './VendorFormFinancialSection';
+import { VendorBillingAddress } from './VendorBillingAddress';
+import { VendorShippingAddress } from './VendorShippingAddress';
+import { VendorFormNotesSection } from './VendorFormNotesSection';
+
+const vendorFormSectionDividerClass = css`
+ margin: 20px 0;
+`;
+
+export function VendorFormSections() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFinancialSection.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFinancialSection.tsx
new file mode 100644
index 000000000..b1ee2abfa
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFinancialSection.tsx
@@ -0,0 +1,159 @@
+// @ts-nocheck
+import { FormGroup, Position, ControlGroup } from '@blueprintjs/core';
+import { ErrorMessage, useFormikContext } from 'formik';
+import { Features } from '@/constants';
+import {
+ FFormGroup,
+ FormattedMessage as T,
+ InputPrependText,
+ CurrencySelectList,
+ BranchSelect,
+ FeatureCan,
+ FMoneyInputGroup,
+ ExchangeRateInputGroup,
+ FDateInput,
+ Icon,
+ Box,
+} from '@/components';
+import { useVendorFormContext } from './VendorFormProvider';
+import {
+ openingBalanceFieldShouldUpdate,
+ useIsVendorForeignCurrency,
+ useSetPrimaryBranchToForm,
+} from './utils';
+import { useCurrentOrganization } from '@/hooks/state';
+import { VendorFormSectionTitle } from './VendorFormSectionTitle';
+
+export function VendorFormFinancialSection() {
+ const { currencies, vendorId, branches } = useVendorFormContext();
+
+ // Sets the primary branch to form.
+ useSetPrimaryBranchToForm();
+
+ return (
+
+
+
+
+
+ }
+ fastField
+ inline
+ fill
+ >
+
+
+
+
+
+
+
+
+ }
+ name={'opening_balance_branch_id'}
+ inline
+ fill
+ >
+
+
+
+
+ );
+}
+
+/**
+ * Vendor opening balance at date field.
+ * @returns {JSX.Element}
+ */
+function VendorOpeningBalanceAtField() {
+ const { vendorId } = useVendorFormContext();
+
+ // Cannot continue if the vendor id is defined.
+ if (vendorId) return null;
+
+ return (
+ }
+ inline
+ fill
+ helperText={}
+ >
+ date.toLocaleDateString()}
+ parseDate={(str) => new Date(str)}
+ inputProps={{
+ leftIcon: ,
+ }}
+ fill={true}
+ />
+
+ );
+}
+
+function VendorOpeningBalanceField() {
+ const { vendorId } = useVendorFormContext();
+ const { values } = useFormikContext();
+
+ // Cannot continue if the vendor id is defined.
+ if (vendorId) return null;
+
+ return (
+ }
+ name={'opening_balance'}
+ inline
+ shouldUpdate={openingBalanceFieldShouldUpdate}
+ shouldUpdateDeps={{ currencyCode: values.currency_code }}
+ fastField={true}
+ fill
+ >
+
+
+
+
+
+ );
+}
+
+function VendorOpeningBalanceExchangeRateField() {
+ const { values } = useFormikContext();
+ const { vendorId } = useVendorFormContext();
+ const currentOrganization = useCurrentOrganization();
+
+ const isForeignVendor = useIsVendorForeignCurrency();
+
+ // Can't continue if the vendor is not foreign.
+ if (!isForeignVendor || vendorId) {
+ return null;
+ }
+ return (
+ {}}
+ onCancel={() => {}}
+ formGroupProps={{ label: ' ' }}
+ />
+ );
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFormik.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFormik.tsx
index 51cfa1eff..bbf090964 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFormik.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormFormik.tsx
@@ -1,5 +1,5 @@
// @ts-nocheck
-import React, { useMemo } from 'react';
+import { useMemo } from 'react';
import intl from 'react-intl-universal';
import { Formik, Form } from 'formik';
import { Intent } from '@blueprintjs/core';
@@ -7,29 +7,24 @@ import classNames from 'classnames';
import styled from 'styled-components';
import { CLASSES } from '@/constants/classes';
-import { AppToaster } from '@/components';
+import { AppToaster, Box } from '@/components';
import {
CreateVendorFormSchema,
EditVendorFormSchema,
} from './VendorForm.schema';
-import VendorTabs from './VendorsTabs';
-import VendorFormPrimarySection from './VendorFormPrimarySection';
-import VendorFormAfterPrimarySection from './VendorFormAfterPrimarySection';
-import VendorFloatingActions from './VendorFloatingActions';
+import { VendorFormContent } from './VendorFormContent';
import { withCurrentOrganization } from '@/containers/Organization/withCurrentOrganization';
import { useVendorFormContext } from './VendorFormProvider';
-import { compose, transformToForm, safeInvoke } from '@/utils';
+import { compose, transformToForm, safeInvoke, parseBoolean } from '@/utils';
import { defaultInitialValues } from './utils';
-import '@/style/pages/Vendors/Form.scss';
-
/**
* Vendor form.
*/
-function VendorFormFormik({
+function VendorFormFormikBase({
// #withCurrentOrganization
organization: { base_currency },
@@ -52,9 +47,6 @@ function VendorFormFormik({
isNewMode,
} = useVendorFormContext();
- /**
- * Initial values in create and edit mode.
- */
const initialFormValues = useMemo(
() => ({
...defaultInitialValues,
@@ -69,7 +61,10 @@ function VendorFormFormik({
// Handles the form submit.
const handleFormSubmit = (values, form) => {
const { setSubmitting, resetForm } = form;
- const requestForm = { ...values };
+ const requestForm = {
+ ...values,
+ active: parseBoolean(values.active, true),
+ };
setSubmitting(true);
@@ -103,51 +98,34 @@ function VendorFormFormik({
};
return (
-
+
);
}
-export const VendorFormHeaderPrimary = styled.div`
- --x-color-border: #e4e4e4;
- .bp4-dark & {
- --x-color-border: var(--color-dark-gray3);
+const VendorFormFields = styled.div`
+ .bp4-form-content,
+ .bp6-form-content {
+ min-width: 300px;
+ }
+ .bp4-form-group{
+ margin-bottom: 20px;
+ }
+ .bp4-form-group.bp4-inline label.bp4-label {
+ min-width: 140px;
}
- padding: 10px 0 0;
- margin: 0 0 20px;
- overflow: hidden;
- border-bottom: 1px solid var(--x-color-border);
- max-width: 1000px;
`;
-export default compose(withCurrentOrganization())(VendorFormFormik);
+export const VendorFormFormik = compose(withCurrentOrganization())(VendorFormFormikBase);
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormNotesSection.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormNotesSection.tsx
new file mode 100644
index 000000000..1e19517a8
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormNotesSection.tsx
@@ -0,0 +1,17 @@
+// @ts-nocheck
+import { Box, FFormGroup, FormattedMessage as T, FTextArea } from '@/components';
+import { VendorFormSectionTitle } from './VendorFormSectionTitle';
+
+export function VendorFormNotesSection() {
+ return (
+
+
+
+
+
+ } inline fill fastField>
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormPage.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormPage.tsx
index 9d51ed764..ec5fdf3c0 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormPage.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormPage.tsx
@@ -2,12 +2,9 @@
import React from 'react';
import styled from 'styled-components';
import { useParams, useHistory } from 'react-router-dom';
-
-import '@/style/pages/Vendors/PageForm.scss';
-
-import { DashboardCard, DashboardInsider } from '@/components';
+import { Box, DashboardCard, DashboardInsider } from '@/components';
import { VendorFormProvider, useVendorFormContext } from './VendorFormProvider';
-import VendorFormFormik from './VendorFormFormik';
+import { VendorFormFormik } from './VendorFormFormik';
/**
* Vendor form page loading wrapper.
@@ -17,16 +14,16 @@ function VendorFormPageLoading({ children }) {
const { isFormLoading } = useVendorFormContext();
return (
-
+
{children}
-
+
);
}
/**
* Vendor form page.
*/
-export default function VendorFormPage() {
+export function VendorFormPage() {
const history = useHistory();
const { id } = useParams();
@@ -44,26 +41,13 @@ export default function VendorFormPage() {
return (
-
-
+
-
+ />
+
);
}
-
-const VendorFormPageFormik = styled(VendorFormFormik)`
- .page-form {
- &__floating-actions {
- margin-left: -40px;
- margin-right: -40px;
- }
- }
-`;
-
-const VendorDashboardInsider = styled(DashboardInsider)`
- padding-bottom: 64px;
-`;
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormPrimarySection.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormPrimarySection.tsx
deleted file mode 100644
index dcdac551e..000000000
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormPrimarySection.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-// @ts-nocheck
-import React from 'react';
-import intl from 'react-intl-universal';
-import classNames from 'classnames';
-import { ControlGroup } from '@blueprintjs/core';
-import {
- FormattedMessage as T,
- FFormGroup,
- FInputGroup,
- Hint,
- FieldRequiredHint,
- SalutationList,
- DisplayNameList,
-} from '@/components';
-import { CLASSES } from '@/constants/classes';
-import { useAutofocus } from '@/hooks';
-
-/**
- * Vendor form primary section.
- */
-function VendorFormPrimarySection() {
- const firstNameFieldRef = useAutofocus();
-
- return (
-
- {/**----------- Vendor name -----------*/}
- }
- inline={true}
- >
-
-
- (firstNameFieldRef.current = ref)}
- />
-
-
-
-
- {/*----------- Company Name -----------*/}
- }
- inline={true}
- >
-
-
-
- {/*----------- Display Name -----------*/}
-
-
-
-
- >
- }
- fastField
- inline
- >
-
-
-
- );
-}
-
-export default VendorFormPrimarySection;
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormProvider.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormProvider.tsx
index 0d44267c7..4d47e6867 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormProvider.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormProvider.tsx
@@ -33,7 +33,6 @@ function VendorFormProvider({ query, vendorId, ...props }) {
const { data: vendor, isLoading: isVendorLoading } = useVendor(vendorId, {
enabled: !!vendorId,
});
-
// Handle fetch contact duplicate details.
const { data: contactDuplicate, isLoading: isContactLoading } = useContact(
contactId,
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorFormSectionTitle.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormSectionTitle.tsx
new file mode 100644
index 000000000..6717884fd
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorFormSectionTitle.tsx
@@ -0,0 +1,12 @@
+import { css } from '@emotion/css';
+
+const vendorFormSectionTitleClass = css`
+ font-size: 14px;
+ color: #8f99a8;
+ margin-bottom: 18px;
+ margin-top: 10px;
+`;
+
+export function VendorFormSectionTitle({ children }: { children: React.ReactNode | string }) {
+ return {children}
;
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorShippingAddress.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorShippingAddress.tsx
new file mode 100644
index 000000000..bca86e2fd
--- /dev/null
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorShippingAddress.tsx
@@ -0,0 +1,88 @@
+// @ts-nocheck
+import { Box } from '@/components';
+import {
+ FormattedMessage as T,
+ FFormGroup,
+ FInputGroup,
+ FTextArea,
+} from '@/components';
+import { VendorFormSectionTitle } from './VendorFormSectionTitle';
+
+export function VendorShippingAddress() {
+ return (
+
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ }
+ inline
+ fill
+ fastField
+ >
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorsTabs.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorsTabs.tsx
deleted file mode 100644
index 7870c4000..000000000
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorsTabs.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-// @ts-nocheck
-import React from 'react';
-import intl from 'react-intl-universal';
-import classNames from 'classnames';
-import { Tabs, Tab } from '@blueprintjs/core';
-import { CLASSES } from '@/constants/classes';
-
-import VendorFinanicalPanelTab from './VendorFinanicalPanelTab';
-
-import CustomerAddressTabs from '@/containers/Customers/CustomerForm/CustomerAddressTabs';
-import CustomerNotePanel from '@/containers/Customers/CustomerForm/CustomerNotePanel';
-
-/**
- * Vendor form tabs.
- */
-export default function VendorTabs() {
- return (
-
-
- }
- />
- }
- />
- }
- />
-
-
- );
-}
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/utils.tsx b/packages/webapp/src/containers/Vendors/VendorForm/utils.tsx
index 5be562763..b14183930 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/utils.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/utils.tsx
@@ -13,6 +13,7 @@ export const defaultInitialValues = {
last_name: '',
company_name: '',
display_name: '',
+ code: '',
email: '',
work_phone: '',
@@ -22,16 +23,16 @@ export const defaultInitialValues = {
active: true,
billing_address_country: '',
- billing_address_1: '',
- billing_address_2: '',
+ billing_address1: '',
+ billing_address2: '',
billing_address_city: '',
billing_address_state: '',
billing_address_postcode: '',
billing_address_phone: '',
shipping_address_country: '',
- shipping_address_1: '',
- shipping_address_2: '',
+ shipping_address1: '',
+ shipping_address2: '',
shipping_address_city: '',
shipping_address_state: '',
shipping_address_postcode: '',
diff --git a/packages/webapp/src/hooks/query/GenericResource/index.tsx b/packages/webapp/src/hooks/query/GenericResource/index.tsx
index 70cfb2f2f..348202312 100644
--- a/packages/webapp/src/hooks/query/GenericResource/index.tsx
+++ b/packages/webapp/src/hooks/query/GenericResource/index.tsx
@@ -32,19 +32,19 @@ export function useResourceData(type, query, props) {
*/
function getResourceUrlFromType(type) {
const config = {
- [RESOURCES_TYPES.INVOICE]: '/sales/invoices',
- [RESOURCES_TYPES.ESTIMATE]: '/sales/estimates',
+ [RESOURCES_TYPES.INVOICE]: '/sale-invoices',
+ [RESOURCES_TYPES.ESTIMATE]: '/sale-estimates',
[RESOURCES_TYPES.ITEM]: '/items',
- [RESOURCES_TYPES.RECEIPT]: '/sales/receipts',
- [RESOURCES_TYPES.BILL]: '/purchases/bills',
- [RESOURCES_TYPES.PAYMENT_RECEIVE]: '/sales/payment_receives',
- [RESOURCES_TYPES.PAYMENT_MADE]: '/purchases/bill_payments',
+ [RESOURCES_TYPES.RECEIPT]: '/sale-receipts',
+ [RESOURCES_TYPES.BILL]: '/bills',
+ [RESOURCES_TYPES.PAYMENT_RECEIVE]: '/payments-received',
+ [RESOURCES_TYPES.PAYMENT_MADE]: '/bill-payments',
[RESOURCES_TYPES.CUSTOMER]: '/customers',
[RESOURCES_TYPES.VENDOR]: '/vendors',
[RESOURCES_TYPES.MANUAL_JOURNAL]: '/manual-journals',
[RESOURCES_TYPES.ACCOUNT]: '/accounts',
- [RESOURCES_TYPES.CREDIT_NOTE]: '/sales/credit_notes',
- [RESOURCES_TYPES.VENDOR_CREDIT]: '/purchases/vendor-credit',
+ [RESOURCES_TYPES.CREDIT_NOTE]: '/credit-notes',
+ [RESOURCES_TYPES.VENDOR_CREDIT]: '/vendor-credits',
};
return config[type] || '';
}
diff --git a/packages/webapp/src/hooks/query/authentication.tsx b/packages/webapp/src/hooks/query/authentication.tsx
index 657729d31..c6aa42df8 100644
--- a/packages/webapp/src/hooks/query/authentication.tsx
+++ b/packages/webapp/src/hooks/query/authentication.tsx
@@ -128,7 +128,7 @@ export const useAuthMetadata = (props = {}) => {
* Resend the mail of signup verification.
*/
export const useAuthSignUpVerifyResendMail = (props) => {
- const apiRequest = useAuthApiRequest();
+ const apiRequest = useApiRequest();
return useMutation(
() => apiRequest.post(AuthRoute.SignupVerifyResend),
diff --git a/packages/webapp/src/hooks/query/bank-transactions.ts b/packages/webapp/src/hooks/query/bank-transactions.ts
index 166d79447..f90ac812e 100644
--- a/packages/webapp/src/hooks/query/bank-transactions.ts
+++ b/packages/webapp/src/hooks/query/bank-transactions.ts
@@ -37,8 +37,8 @@ export function useUncategorizeTransactionsBulkAction(
UncategorizeTransactionsBulkValues
>(
(value) =>
- apiRequest.post(`/cashflow/transactions/uncategorize/bulk`, {
- ids: value.ids,
+ apiRequest.delete(`/banking/categorize/bulk`, {
+ params: { uncategorizedTransactionIds: value.ids },
}),
{
onSuccess: (res, values) => {
diff --git a/packages/webapp/src/hooks/query/creditNote.tsx b/packages/webapp/src/hooks/query/creditNote.tsx
index 5611185f0..678897037 100644
--- a/packages/webapp/src/hooks/query/creditNote.tsx
+++ b/packages/webapp/src/hooks/query/creditNote.tsx
@@ -58,16 +58,13 @@ export function useCreateCreditNote(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
- return useMutation(
- (values) => apiRequest.post('credit-notes', values),
- {
- onSuccess: (res, values) => {
- // Common invalidate queries.
- commonInvalidateQueries(queryClient);
- },
- ...props,
+ return useMutation((values) => apiRequest.post('credit-notes', values), {
+ onSuccess: (res, values) => {
+ // Common invalidate queries.
+ commonInvalidateQueries(queryClient);
},
- );
+ ...props,
+ });
}
/**
@@ -218,8 +215,7 @@ export function useCreateRefundCreditNote(props) {
const apiRequest = useApiRequest();
return useMutation(
- ([id, values]) =>
- apiRequest.post(`credit-notes/${id}/refunds`, values),
+ ([id, values]) => apiRequest.post(`credit-notes/${id}/refunds`, values),
{
onSuccess: (res, [id, values]) => {
// Common invalidate queries.
@@ -240,19 +236,16 @@ export function useDeleteRefundCreditNote(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
- return useMutation(
- (id) => apiRequest.delete(`credit-notes/refunds/${id}`),
- {
- onSuccess: (res, id) => {
- // Common invalidate queries.
- commonInvalidateQueries(queryClient);
+ return useMutation((id) => apiRequest.delete(`credit-notes/refunds/${id}`), {
+ onSuccess: (res, id) => {
+ // Common invalidate queries.
+ commonInvalidateQueries(queryClient);
- // Invalidate vendor credit query.
- queryClient.invalidateQueries([t.CREDIT_NOTE, id]);
- },
- ...props,
+ // Invalidate vendor credit query.
+ queryClient.invalidateQueries([t.CREDIT_NOTE, id]);
},
- );
+ ...props,
+ });
}
/**
@@ -301,7 +294,7 @@ export function useReconcileCreditNote(id, props, requestProps) {
[t.RECONCILE_CREDIT_NOTE, id],
{
method: 'get',
- url: `credit-notes/${id}/applied-invoices`,
+ url: `credit-notes/${id}/apply-invoices`,
...requestProps,
},
{
diff --git a/packages/webapp/src/hooks/query/invite.tsx b/packages/webapp/src/hooks/query/invite.tsx
index 9d7de9ed4..6466d616a 100644
--- a/packages/webapp/src/hooks/query/invite.tsx
+++ b/packages/webapp/src/hooks/query/invite.tsx
@@ -2,6 +2,7 @@
import { useMutation } from 'react-query';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
+import { transformToCamelCase } from '@/utils';
/**
* Authentication invite accept.
@@ -22,9 +23,9 @@ export const useAuthInviteAccept = (props) => {
export const useInviteMetaByToken = (token, props) => {
return useRequestQuery(
['INVITE_META', token],
- { method: 'get', url: `invite/invited/${token}` },
+ { method: 'get', url: `invite/check/${token}` },
{
- select: (res) => res.data,
+ select: (res) => transformToCamelCase(res.data),
...props
}
);
diff --git a/packages/webapp/src/hooks/query/taxRates.ts b/packages/webapp/src/hooks/query/taxRates.ts
index a026d4387..add6f7928 100644
--- a/packages/webapp/src/hooks/query/taxRates.ts
+++ b/packages/webapp/src/hooks/query/taxRates.ts
@@ -37,10 +37,10 @@ export function useTaxRate(taxRateId: string, props) {
[QUERY_TYPES.TAX_RATES, taxRateId],
{
method: 'get',
- url: `tax-rates/${taxRateId}}`,
+ url: `tax-rates/${taxRateId}`,
},
{
- select: (res) => res.data.data,
+ select: (res) => res.data,
...props,
},
);
@@ -106,7 +106,7 @@ export function useActivateTaxRate(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
- return useMutation((id) => apiRequest.post(`tax-rates/${id}/active`), {
+ return useMutation((id) => apiRequest.put(`tax-rates/${id}/activate`), {
onSuccess: (res, id) => {
commonInvalidateQueries(queryClient);
queryClient.invalidateQueries([QUERY_TYPES.TAX_RATES, id]);
@@ -122,7 +122,7 @@ export function useInactivateTaxRate(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
- return useMutation((id) => apiRequest.post(`tax-rates/${id}/inactive`), {
+ return useMutation((id) => apiRequest.put(`tax-rates/${id}/inactivate`), {
onSuccess: (res, id) => {
commonInvalidateQueries(queryClient);
queryClient.invalidateQueries([QUERY_TYPES.TAX_RATES, id]);
diff --git a/packages/webapp/src/hooks/useRequest.tsx b/packages/webapp/src/hooks/useRequest.tsx
index fd7f087ac..f337458cb 100644
--- a/packages/webapp/src/hooks/useRequest.tsx
+++ b/packages/webapp/src/hooks/useRequest.tsx
@@ -58,7 +58,7 @@ export default function useApiRequest() {
setLogout();
}
if (status === 403) {
- setGlobalErrors({ access_denied: true });
+ setGlobalErrors({ access_denied: { message: data.message } });
}
if (status === 429) {
setGlobalErrors({ too_many_requests: true });
diff --git a/packages/webapp/src/hooks/useRequestPdf.tsx b/packages/webapp/src/hooks/useRequestPdf.tsx
index 48fbbf687..987b9dd68 100644
--- a/packages/webapp/src/hooks/useRequestPdf.tsx
+++ b/packages/webapp/src/hooks/useRequestPdf.tsx
@@ -1,6 +1,7 @@
// @ts-nocheck
import React from 'react';
import useApiRequest from './useRequest';
+import { normalizeApiPath } from '../utils';
export const useRequestPdf = (httpProps) => {
const apiRequest = useApiRequest();
@@ -17,7 +18,7 @@ export const useRequestPdf = (httpProps) => {
headers: { accept: 'application/pdf' },
responseType: 'blob',
...httpProps,
- url: `/api/${httpProps?.url}`,
+ url: `/api/${normalizeApiPath(httpProps?.url)}`,
})
.then((response) => {
// Create a Blob from the PDF Stream.
diff --git a/packages/webapp/src/lang/en/index.json b/packages/webapp/src/lang/en/index.json
index c64b7dd38..b0faa1e30 100644
--- a/packages/webapp/src/lang/en/index.json
+++ b/packages/webapp/src/lang/en/index.json
@@ -482,6 +482,7 @@
"should_total_of_credit_and_debit_be_equal": "Should total of credit and debit be equal.",
"no_accounts": "No Accounts",
"the_accounts_have_been_successfully_inactivated": "The accounts have been successfully inactivated.",
+ "account_code_is_required": "Account code is required.",
"account_code_is_not_unique": "Account code is not unique.",
"are_sure_to_publish_this_expense": "Are you sure you want to publish this expense?",
"once_delete_these_journals_you_will_not_able_restore_them": "Once you delete these journals, you won't be able to retrieve them later. Are you sure you want to delete them?",
@@ -1961,8 +1962,8 @@
"vendor_opening_balance.label": "Edit Vendor Opening Balance",
"vendor_opening_balance.label.opening_balance": "Opening balance",
"vendor_opening_balance.label.opening_balance_at": "Opening balance at",
- "customer.label.opening_branch": "Opening Balance Branch",
- "vendor.label.opening_branch": "Opening Balance Branch",
+ "customer.label.opening_branch": "Balance Branch",
+ "vendor.label.opening_branch": "Balance Branch",
"warehouse.error.warehouse_code_not_unique": "Warehouse code not unique",
"warehouse.error.warehouse_has_associated_transactions": "You could not delete the warehouse that has associated transactions.",
"branche.error.warehouse_code_not_unique": "Branch code not unique",
diff --git a/packages/webapp/src/routes/dashboard.tsx b/packages/webapp/src/routes/dashboard.tsx
index e6f31c447..3c8d8b6fb 100644
--- a/packages/webapp/src/routes/dashboard.tsx
+++ b/packages/webapp/src/routes/dashboard.tsx
@@ -630,7 +630,7 @@ export const getDashboardRoutes = () => [
{
path: `/vendors/:id/edit`,
component: lazy(
- () => import('@/containers/Vendors/VendorForm/VendorFormPage'),
+ () => import('@/containers/Vendors/VendorForm/VendorFormPage').then(module => ({ default: module.VendorFormPage })),
),
name: 'vendor-edit',
breadcrumb: intl.get('edit_vendor'),
@@ -642,7 +642,7 @@ export const getDashboardRoutes = () => [
{
path: `/vendors/new`,
component: lazy(
- () => import('@/containers/Vendors/VendorForm/VendorFormPage'),
+ () => import('@/containers/Vendors/VendorForm/VendorFormPage').then(module => ({ default: module.VendorFormPage })),
),
name: 'vendor-new',
breadcrumb: intl.get('new_vendor'),
diff --git a/packages/webapp/src/style/App.scss b/packages/webapp/src/style/App.scss
index e6f046584..ecebc0c5c 100644
--- a/packages/webapp/src/style/App.scss
+++ b/packages/webapp/src/style/App.scss
@@ -31,7 +31,6 @@
@import 'components/Overlay';
@import 'components/Menu';
@import 'components/SidebarOverlay';
-@import 'components/UniversalSearch';
// Pages
@import 'pages/view-form';
diff --git a/packages/webapp/src/style/_variables.scss b/packages/webapp/src/style/_variables.scss
index 40df32901..9cf20f6a7 100644
--- a/packages/webapp/src/style/_variables.scss
+++ b/packages/webapp/src/style/_variables.scss
@@ -7,6 +7,27 @@ $ns: bp4;
--color-primary: #8abbff;
--color-danger: red;
+ // Green colors
+ --color-green-500: #165a36;
+ --color-green-400: #1c6e42;
+ --color-green-300: #238551;
+ --color-green-200: #32a467;
+ --color-green-100: #72ca9b;
+
+ // Red colors
+ --color-red-500: #8e292c;
+ --color-red-400: #ac2f33;
+ --color-red-300: #cd4246;
+ --color-red-200: #e76a6e;
+ --color-red-100: #fa999c;
+
+ // Orange colors
+ --color-orange-500: #77450d;
+ --color-orange-400: #935610;
+ --color-orange-300: #c87619;
+ --color-orange-200: #ec9a3c;
+ --color-orange-100: #fbb360;
+
--color-dark-gray5: #404854;
--color-dark-gray4: #383e47;
--color-dark-gray3: #2f343c;
@@ -301,6 +322,27 @@ body.bp4-dark {
--color-primary: #8abbff;
--color-danger: rgb(213, 103, 103);
+ // Green colors (dark mode - lighter variants)
+ --color-green-500: #72ca9b;
+ --color-green-400: #32a467;
+ --color-green-300: #238551;
+ --color-green-200: #1c6e42;
+ --color-green-100: #165a36;
+
+ // Red colors (dark mode - lighter variants)
+ --color-red-500: #fa999c;
+ --color-red-400: #e76a6e;
+ --color-red-300: #cd4246;
+ --color-red-200: #ac2f33;
+ --color-red-100: #8e292c;
+
+ // Orange colors (dark mode - lighter variants)
+ --color-orange-500: #fbb360;
+ --color-orange-400: #ec9a3c;
+ --color-orange-300: #c87619;
+ --color-orange-200: #935610;
+ --color-orange-100: #77450d;
+
--color-dark-gray5: #404854;
--color-dark-gray4: #383e47;
--color-dark-gray3: #2f343c;
diff --git a/packages/webapp/src/style/components/UniversalSearch.scss b/packages/webapp/src/style/components/UniversalSearch.scss
deleted file mode 100644
index a9562e096..000000000
--- a/packages/webapp/src/style/components/UniversalSearch.scss
+++ /dev/null
@@ -1,200 +0,0 @@
-.universal-search {
- position: fixed;
- filter: blur(0);
- opacity: 1;
- background-color: var(--color-universal-search-background);
- border-radius: 3px;
- box-shadow: 0 0 0 1px rgba(16, 22, 26, 0.1),
- 0 4px 8px rgba(16, 22, 26, 0.2),
- 0 18px 46px 6px rgba(16, 22, 26, 0.2);
- left: calc(50% - 250px);
- top: 20vh;
- width: 500px;
- z-index: 20;
-
- &.bp4-overlay-appear,
- &.bp4-overlay-enter {
- filter: blur(20px);
- opacity: 0.2;
- }
- &.bp4-overlay-appear-active,
- &.bp4-overlay-enter-active {
- filter: blur(0);
- opacity: 1;
- transition-delay: 0;
- transition-duration: 0.2s;
- transition-property: filter, opacity;
- transition-timing-function: cubic-bezier(0.4, 1, 0.75, 0.9);
- }
- &.bp4-overlay-exit {
- filter: blur(0);
- opacity: 1;
- }
- &.bp4-overlay-exit-active {
- filter: blur(20px);
- opacity: 0.2;
- transition-delay: 0;
- transition-duration: 0.2s;
- transition-property: filter, opacity;
- transition-timing-function: cubic-bezier(0.4, 1, 0.75, 0.9);
- }
-
- &__omnibar {
- .bp4-input-group {
- .bp4-icon {
- svg {
- stroke: currentColor;
- fill: none;
- fill-rule: evenodd;
- stroke-linecap: round;
- stroke-linejoin: round;
- }
- }
- }
-
- .bp4-input-group .bp4-input {
- border: 0;
- box-shadow: 0 0 0 0;
- height: 50px;
- line-height: 50px;
- font-size: 20px;
- }
- .bp4-input-group.bp4-large .bp4-input:not(:first-child) {
- padding-left: 50px !important;
- }
- .bp4-input-group.bp4-large .bp4-input:not(:last-child) {
- padding-right: 130px !important;
- }
-
- .bp4-input-group {
- .bp4-icon {
- margin: 16px;
- color: var(--color-universal-search-icon);
-
- svg {
- stroke-width: 2;
- --text-opacity: 1;
- }
- }
- }
-
- .bp4-menu {
- border-top: 1px solid var(--color-universal-search-menu-border);
- max-height: calc(60vh - 20px);
- overflow: auto;
-
- .bp4-menu-item {
- .bp4-text-muted {
- font-size: 12px;
-
- .bp4-icon {
- color: #8499a7;
- }
- }
- &.bp4-intent-primary {
- &.bp4-active {
- background-color: rgb(235, 241, 246);
- color: #252b30;
-
- .bp4-menu-item-label {
- color: #5c7080;
- }
- }
- }
-
- &-label {
- flex-direction: row;
- text-align: right;
- }
- }
- }
-
- .bp4-input-action {
- height: 100%;
- display: flex;
- flex-direction: row;
- align-items: center;
- }
- }
-
- &__type-select-overlay {
- .bp4-button {
- margin: 0 !important;
- }
- }
-
- &__footer {
- padding: 12px 12px;
- border-top: 1px solid var(--color-universal-search-footer-divider);
- }
-
- &__actions {
- display: flex;
- }
-
- &__action {
- &:not(:first-of-type) {
- margin-left: 14px;
- }
-
- .bp4-tag {
- background: var(--color-universal-search-tag-background);
- color: var(--color-universal-search-tag-text);
- }
- &--arrows {
- .bp4-tag {
- padding: 0;
- text-align: center;
- line-height: 16px;
- margin-left: 4px;
-
- svg {
- fill: var(--color-universal-search-tag-text);
- height: 100%;
- display: block;
- width: 100%;
- padding: 2px;
- }
- }
- }
-
- .text {
- margin-left: 6px;
- }
- }
-
- &__footer {
- }
-
- &-input-right-elements {
- display: flex;
- margin: 10px;
-
- .bp4-spinner {
- margin-right: 6px;
- }
- }
-
- &__item {
- &--invoice,
- &--estimate,
- &--bill,
- &--receipt {
- .amount {
- color: #252b30;
- }
-
- .status {
- font-size: 13px;
-
- &.status-warning {
- color: rgb(236, 91, 10);
- }
-
- &.status-success {
- color: #249017;
- }
- }
- }
- }
-}
diff --git a/packages/webapp/src/style/objects/buttons.scss b/packages/webapp/src/style/objects/buttons.scss
index 2840e0a1b..05c811809 100644
--- a/packages/webapp/src/style/objects/buttons.scss
+++ b/packages/webapp/src/style/objects/buttons.scss
@@ -8,6 +8,12 @@
min-height: 32px;
padding-left: 12px;
padding-right: 12px;
+
+ &.bp4-outlined {
+ .bp4-dark & {
+ border-color: rgba(255, 255, 255, 0.2);
+ }
+ }
}
.bp4-button:not([class*='bp4-intent-']) {
diff --git a/packages/webapp/src/style/pages/Customers/Form.scss b/packages/webapp/src/style/pages/Customers/Form.scss
deleted file mode 100644
index 5048aa1b5..000000000
--- a/packages/webapp/src/style/pages/Customers/Form.scss
+++ /dev/null
@@ -1,156 +0,0 @@
-@import '../../_base.scss';
-
-.page-form--customer {
- $self: '.page-form';
- padding: 20px;
-
- --x-color-tabs-border: #f0f0f0;
-
- .bp4-dark & {
- --x-color-tabs-border: var(--color-dark-gray3);
- }
-
- #{$self}__header {
- padding: 0;
- }
- #{$self}__primary-section {
- padding: 10px 0 0;
- margin: 0 0 20px;
- overflow: hidden;
- border-bottom: 1px solid #e4e4e4;
- max-width: 1000px;
- }
-
- .bp4-form-group {
- max-width: 500px;
-
- .bp4-control {
- margin-top: 8px;
- margin-bottom: 8px;
- }
-
- &.bp4-inline {
- .bp4-label {
- min-width: 150px;
- }
- }
- .bp4-form-content {
- width: 100%;
- }
- }
-
- .form-group--contact_name {
- max-width: 600px;
-
- .bp4-control-group > * {
- flex-shrink: unset;
-
- &:not(:last-child) {
- padding-right: 10px;
- }
- &.input-group--salutation-list {
- width: 25%;
- }
- &.input-group--first-name,
- &.input-group--last-name {
- width: 37%;
- }
- }
- }
-
- .bp4-form-group {
- margin-bottom: 14px;
- }
-
- .bp4-tab-panel {
- margin-top: 26px;
- }
-
- .form-group--phone-number {
- .bp4-control-group > * {
- flex-shrink: unset;
- padding-right: 5px;
- padding-left: 5px;
-
- &:first-child {
- padding-left: 0;
- }
- &:last-child {
- padding-right: 0;
- }
- }
- }
-
- #{$self}__tabs {
- margin-top: 20px;
- max-width: 1000px;
-
- h4 {
- font-weight: 500;
- color: #888;
- margin-bottom: 1.2rem;
- font-size: 14px;
- }
- // Tab panels.
- .tab-panel {
- &--address {
- .bp4-form-group {
- max-width: 440px;
-
- &.bp4-inline {
- .bp4-label {
- min-width: 145px;
- }
- }
-
- .bp4-form-content {
- width: 100%;
- }
-
- textarea.bp4-input {
- max-width: 100%;
- width: 100%;
- min-height: 50px;
- }
- }
- }
- &--note {
- .form-group--note {
- .bp4-form-group {
- max-width: 600px;
- }
- textarea {
- width: 100%;
- min-height: 100px;
- }
- }
- }
- }
-
- .dropzone-container {
- max-width: 600px;
- }
- }
-
- .bp4-tabs {
- .bp4-tab-list {
- position: relative;
-
- &:before {
- content: '';
- position: absolute;
- bottom: 0;
- width: 100%;
- height: 2px;
- background: var(--x-color-tabs-border);
- }
-
- > *:not(:last-child) {
- margin-right: 25px;
- }
- &.bp4-large > .bp4-tab {
- font-size: 15px;
- }
- }
- }
-}
diff --git a/packages/webapp/src/utils/index.tsx b/packages/webapp/src/utils/index.tsx
index 24d7597ac..e579da0e8 100644
--- a/packages/webapp/src/utils/index.tsx
+++ b/packages/webapp/src/utils/index.tsx
@@ -84,6 +84,20 @@ export const handleBooleanChange = (handler) => {
return (event) => handler(event.target.checked);
};
+/**
+ * Parses a value to boolean (handles 1, 0, '1', '0', true, false).
+ * @param {*} value
+ * @param {boolean} defaultValue - value when empty/unknown
+ * @returns {boolean}
+ */
+export const parseBoolean = (value, defaultValue = false) => {
+ if (typeof value === 'boolean') return value;
+ if (value === 1 || value === '1') return true;
+ if (value === 0 || value === '0') return false;
+ if (value == null || value === '') return defaultValue;
+ return Boolean(value);
+};
+
/** Event handler that exposes the target element's value as a string. */
export const handleStringChange = (handler) => {
return (event) => handler(event.target.value);
diff --git a/playwright.config.ts b/playwright.config.ts
index 90ed1b6f2..9b285fa68 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -11,6 +11,8 @@ const config: PlaywrightTestConfig = {
workers: 1,
// Test directory
testDir: path.join(__dirname, 'e2e'),
+ // Only run authentication tests
+ testMatch: 'authentication.spec.ts',
// If a test fails, retry it additional 2 times
retries: 0,
// Artifacts folder where screenshots, videos, and traces are stored.
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 989f1022b..5bb4421f5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -51,6 +51,9 @@ importers:
'@bigcapital/pdf-templates':
specifier: workspace:*
version: link:../../shared/pdf-templates
+ '@bigcapital/sdk-ts':
+ specifier: workspace:*
+ version: link:../../shared/sdk-ts
'@bigcapital/utils':
specifier: workspace:*
version: link:../../shared/bigcapital-utils
@@ -62,7 +65,7 @@ importers:
version: 5.23.0
'@bull-board/nestjs':
specifier: ^5.22.0
- version: 5.23.0(@bull-board/api@5.23.0(@bull-board/ui@5.23.0))(@bull-board/express@5.23.0)(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1)
+ version: 5.23.0(@bull-board/api@5.23.0(@bull-board/ui@5.23.0))(@bull-board/express@5.23.0)(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@casl/ability':
specifier: ^5.4.3
version: 5.4.4
@@ -71,19 +74,19 @@ importers:
version: 2.2.0
'@liaoliaots/nestjs-redis':
specifier: ^10.0.0
- version: 10.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(ioredis@5.6.0)
+ version: 10.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(ioredis@5.6.0)
'@nest-lab/throttler-storage-redis':
specifier: ^1.1.0
- version: 1.1.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/throttler@6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2))(ioredis@5.6.0)(reflect-metadata@0.2.2)
+ version: 1.1.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/throttler@6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2))(ioredis@5.6.0)(reflect-metadata@0.2.2)
'@nestjs/bull':
specifier: ^10.2.1
- version: 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(bull@4.16.4)
+ version: 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(bull@4.16.4)
'@nestjs/bullmq':
specifier: ^10.2.2
- version: 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(bullmq@5.25.6)
+ version: 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(bullmq@5.25.6)
'@nestjs/cache-manager':
specifier: ^2.2.2
- version: 2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(cache-manager@6.1.3)(rxjs@7.8.1)
+ version: 2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@6.1.3)(rxjs@7.8.1)
'@nestjs/common':
specifier: ^10.0.0
version: 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -95,7 +98,7 @@ importers:
version: 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/event-emitter':
specifier: ^2.0.4
- version: 2.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
+ version: 2.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))
'@nestjs/jwt':
specifier: ^10.2.0
version: 10.2.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))
@@ -110,16 +113,16 @@ importers:
version: 10.4.20(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/websockets@10.4.20)(rxjs@7.8.1)
'@nestjs/schedule':
specifier: ^4.1.2
- version: 4.1.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
+ version: 4.1.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))
'@nestjs/serve-static':
specifier: ^5.0.3
- version: 5.0.3(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
+ version: 5.0.3(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))
'@nestjs/swagger':
specifier: ^7.4.2
- version: 7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)
+ version: 7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)
'@nestjs/throttler':
specifier: ^6.2.1
- version: 6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)
+ version: 6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)
'@nestjs/websockets':
specifier: ^10.0.0
version: 10.4.20(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-socket.io@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -154,7 +157,7 @@ importers:
specifier: ^1.6.0
version: 1.7.2
bcrypt:
- specifier: 5.1.1
+ specifier: ^5.1.1
version: 5.1.1(encoding@0.1.13)
bcryptjs:
specifier: ^2.4.3
@@ -242,16 +245,16 @@ importers:
version: 3.11.4
nest-commander:
specifier: ^3.20.1
- version: 3.20.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@types/inquirer@8.2.12)(@types/node@20.5.1)(typescript@5.6.3)
+ version: 3.20.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@types/inquirer@8.2.12)(@types/node@20.5.1)(typescript@5.6.3)
nestjs-cls:
specifier: ^5.2.0
- version: 5.2.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1)
+ version: 5.2.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)(rxjs@7.8.1)
nestjs-i18n:
specifier: ^10.4.9
- version: 10.5.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-validator@0.14.1)(rxjs@7.8.1)
+ version: 10.5.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-validator@0.14.1)(rxjs@7.8.1)
nestjs-redis:
specifier: ^1.3.3
- version: 1.3.3(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(encoding@0.1.13)
+ version: 1.3.3(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))(@nestjs/websockets@10.4.20(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-socket.io@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(encoding@0.1.13)
nodemailer:
specifier: ^6.3.0
version: 6.9.13
@@ -339,7 +342,7 @@ importers:
version: 10.2.3(chokidar@3.6.0)(typescript@5.6.3)
'@nestjs/testing':
specifier: ^10.0.0
- version: 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)
+ version: 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))
'@types/express':
specifier: ^5.0.0
version: 5.0.0
@@ -412,15 +415,18 @@ importers:
'@bigcapital/pdf-templates':
specifier: workspace:*
version: link:../../shared/pdf-templates
+ '@bigcapital/sdk-ts':
+ specifier: workspace:*
+ version: link:../../shared/sdk-ts
'@bigcapital/utils':
specifier: workspace:*
version: link:../../shared/bigcapital-utils
'@blueprintjs-formik/core':
specifier: ^0.3.7
- version: 0.3.7(@babel/core@7.28.5)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ version: 0.3.7(@babel/core@7.26.0)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
'@blueprintjs-formik/datetime':
specifier: ^0.4.0
- version: 0.4.0(@babel/core@7.28.5)(@blueprintjs-formik/core@0.3.7(@babel/core@7.28.5)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime2@0.9.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime@4.4.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ version: 0.4.0(@babel/core@7.26.0)(@blueprintjs-formik/core@0.3.7(@babel/core@7.26.0)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime2@0.9.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime@4.4.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
'@blueprintjs-formik/select':
specifier: ^0.4.5
version: 0.4.5(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -759,7 +765,7 @@ importers:
version: 0.23.1
styled-components:
specifier: ^5.3.1
- version: 5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ version: 5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
stylis-rtlcss:
specifier: ^2.1.1
version: 2.1.1
@@ -781,7 +787,7 @@ importers:
version: 4.7.0(vite@5.4.10(@types/node@20.19.25)(less@4.2.0)(sass@1.77.2)(terser@5.31.0))
eslint-config-react-app:
specifier: ^7.0.1
- version: 7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.28.5))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5))(eslint@8.57.0)(typescript@4.9.5)
+ version: 7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.26.0))(eslint@8.57.0)(typescript@4.9.5)
vite:
specifier: ^5.1.6
version: 5.4.10(@types/node@20.19.25)(less@4.2.0)(sass@1.77.2)(terser@5.31.0)
@@ -907,13 +913,13 @@ importers:
version: 2.5.1
css-loader:
specifier: ^6.x
- version: 6.11.0(webpack@5.91.0)
+ version: 6.11.0(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
declaration-bundler-webpack-plugin:
specifier: ^1.0.3
version: 1.0.3
fork-ts-checker-webpack-plugin:
specifier: ^9.0.2
- version: 9.0.2(typescript@5.6.3)(webpack@5.91.0)
+ version: 9.0.2(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
lodash:
specifier: ^4.17.15
version: 4.17.21
@@ -925,16 +931,16 @@ importers:
version: 18.3.1(react@18.3.1)
style-loader:
specifier: ^3.x
- version: 3.3.4(webpack@5.91.0)
+ version: 3.3.4(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
tailwindcss:
specifier: ^3.4.14
- version: 3.4.14(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.6.3))
+ version: 3.4.14(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3))
ts-loader:
specifier: ^9.x
- version: 9.5.1(typescript@5.6.3)(webpack@5.91.0)
+ version: 9.5.1(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
webpack:
specifier: ^5.x
- version: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ version: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
webpack-cli:
specifier: ^5.x
version: 5.1.4(webpack@5.91.0)
@@ -953,7 +959,7 @@ importers:
version: 7.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@storybook/addon-styling':
specifier: 1.3.6
- version: 1.3.6(@types/react-dom@18.3.0)(@types/react@18.3.4)(encoding@0.1.13)(less@4.2.0)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2)(typescript@5.6.3)(webpack@5.91.0)
+ version: 1.3.6(@types/react-dom@18.3.0)(@types/react@18.3.4)(encoding@0.1.13)(less@4.2.0)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2)(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
'@storybook/blocks':
specifier: 7.2.2
version: 7.2.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -994,6 +1000,22 @@ importers:
specifier: ^8.10.0
version: 8.11.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3)
+ shared/sdk-ts:
+ dependencies:
+ openapi-typescript-fetch:
+ specifier: ^2.2.1
+ version: 2.2.1
+ devDependencies:
+ openapi-typescript:
+ specifier: ^7.0.0
+ version: 7.13.0(typescript@5.6.3)
+ tsup:
+ specifier: ^8.3.0
+ version: 8.3.0(@microsoft/api-extractor@7.47.11(@types/node@20.5.1))(jiti@1.21.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.4.2)
+ typescript:
+ specifier: ^5.1.3
+ version: 5.6.3
+
packages:
'@alloc/quick-lru@5.2.0':
@@ -3578,28 +3600,24 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- libc: [glibc]
'@nx/nx-linux-arm64-musl@19.0.7':
resolution: {integrity: sha512-d0a3iIobeYJY4b8HdwsohGt1d7TMKQJM0nWI3xcbqotLSovFoL6CqNn3g7uZhZPhNwQXNtSEwaXfQRZcH9Nr1g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- libc: [musl]
'@nx/nx-linux-x64-gnu@19.0.7':
resolution: {integrity: sha512-C75zX747Fwc/oH8Xk6+U4xBG97BYka5hGU57034cQVMHKaDfivVHKfwBuROVkj3Mg96QbAS3rAAfMtaCthMLTA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- libc: [glibc]
'@nx/nx-linux-x64-musl@19.0.7':
resolution: {integrity: sha512-OzPtwGp4ENsRI5J35kbjXE0hDbTNF1QwnK3O7R7H1Ew9WJjZi3tEm1cTsq0/SssI6YbZqRhzrNBd/N7Mkjd2dA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- libc: [musl]
'@nx/nx-win32-arm64-msvc@19.0.7':
resolution: {integrity: sha512-G17tdQEjE6eAWRO4XFGpoFHZ55M1AVmj+CJwaTowzXDSk26y3waoDUGOy75ft1LLoz5i8Q9CWFG4Fnyno4Bv/g==}
@@ -4261,6 +4279,16 @@ packages:
peerDependencies:
'@redis/client': ^1.0.0
+ '@redocly/ajv@8.11.2':
+ resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==}
+
+ '@redocly/config@0.22.0':
+ resolution: {integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==}
+
+ '@redocly/openapi-core@1.34.10':
+ resolution: {integrity: sha512-XCBR/9WHJ0cpezuunHMZjuFMl4KqUo7eiFwzrQrvm7lTXt0EBd3No8UY+9OyzXpDfreGEMMtxmaLZ+ksVw378g==}
+ engines: {node: '>=18.17.0', npm: '>=9.5.0'}
+
'@reduxjs/toolkit@1.9.7':
resolution: {integrity: sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==}
peerDependencies:
@@ -4311,55 +4339,46 @@ packages:
resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==}
cpu: [arm]
os: [linux]
- libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.24.0':
resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==}
cpu: [arm]
os: [linux]
- libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.24.0':
resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==}
cpu: [arm64]
os: [linux]
- libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.24.0':
resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==}
cpu: [arm64]
os: [linux]
- libc: [musl]
'@rollup/rollup-linux-powerpc64le-gnu@4.24.0':
resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==}
cpu: [ppc64]
os: [linux]
- libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.24.0':
resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==}
cpu: [riscv64]
os: [linux]
- libc: [glibc]
'@rollup/rollup-linux-s390x-gnu@4.24.0':
resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==}
cpu: [s390x]
os: [linux]
- libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.24.0':
resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==}
cpu: [x64]
os: [linux]
- libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.24.0':
resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==}
cpu: [x64]
os: [linux]
- libc: [musl]
'@rollup/rollup-win32-arm64-msvc@4.24.0':
resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==}
@@ -6093,6 +6112,10 @@ packages:
resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
engines: {node: '>= 14'}
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
agentkeepalive@4.5.0:
resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
engines: {node: '>= 8.0.0'}
@@ -6774,6 +6797,9 @@ packages:
change-case@4.1.2:
resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==}
+ change-case@5.4.4:
+ resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
+
char-regex@1.0.2:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
@@ -6911,6 +6937,9 @@ packages:
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
hasBin: true
+ colorette@1.4.0:
+ resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==}
+
colorette@2.0.19:
resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
@@ -8693,6 +8722,10 @@ packages:
resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==}
engines: {node: '>= 14'}
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
@@ -8781,6 +8814,10 @@ packages:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
+ index-to-position@1.2.0:
+ resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==}
+ engines: {node: '>=18'}
+
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
@@ -9303,6 +9340,10 @@ packages:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
+ js-levenshtein@1.1.6:
+ resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==}
+ engines: {node: '>=0.10.0'}
+
js-money@0.6.3:
resolution: {integrity: sha512-B+1RjjusKUribtW1Bs9uoNN32SgXBxLPQ+pF7ldg8V6+QR8cOOhRx3HIChK4v0fQegnijigBetNozjjc5B4+iw==}
@@ -9323,6 +9364,10 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
@@ -9883,6 +9928,10 @@ packages:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
+ minimatch@5.1.9:
+ resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
+ engines: {node: '>=10'}
+
minimatch@8.0.4:
resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -10386,6 +10435,16 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
+ openapi-typescript-fetch@2.2.1:
+ resolution: {integrity: sha512-aBp1cR5FTNxp4HA8bb2ST53aIqEiJgoOMyXiyzKi6YF7vogW8KkyyUQ1FeDz8D05uspxFrKvFbkVU2YiiKkULA==}
+ engines: {node: '>= 12.0.0', npm: '>= 7.0.0'}
+
+ openapi-typescript@7.13.0:
+ resolution: {integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: ^5.x
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -10503,6 +10562,10 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
+ parse-json@8.3.0:
+ resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==}
+ engines: {node: '>=18'}
+
parse-node-version@1.0.1:
resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
engines: {node: '>= 0.10'}
@@ -12273,6 +12336,10 @@ packages:
resolution: {integrity: sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==}
engines: {node: '>=14.18.0'}
+ supports-color@10.2.2:
+ resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
+ engines: {node: '>=18'}
+
supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
@@ -12680,6 +12747,10 @@ packages:
resolution: {integrity: sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==}
engines: {node: '>=16'}
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
+
type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
@@ -12869,6 +12940,9 @@ packages:
upper-case@2.0.2:
resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
+ uri-js-replace@1.0.1:
+ resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==}
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -13294,6 +13368,9 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ yaml-ast-parser@0.0.43:
+ resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==}
+
yaml@1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
@@ -13962,11 +14039,11 @@ snapshots:
'@babel/helpers': 7.28.4
'@babel/parser': 7.28.5
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
'@babel/types': 7.28.5
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -14062,7 +14139,7 @@ snapshots:
'@babel/helper-optimise-call-expression': 7.27.1
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.0)
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -14075,7 +14152,7 @@ snapshots:
'@babel/helper-optimise-call-expression': 7.27.1
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -14099,7 +14176,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
lodash.debounce: 4.0.8
resolve: 1.22.8
transitivePeerDependencies:
@@ -14110,7 +14187,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
lodash.debounce: 4.0.8
resolve: 1.22.11
transitivePeerDependencies:
@@ -14121,7 +14198,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
lodash.debounce: 4.0.8
resolve: 1.22.11
transitivePeerDependencies:
@@ -14146,7 +14223,7 @@ snapshots:
'@babel/helper-member-expression-to-functions@7.28.5':
dependencies:
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
'@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14155,6 +14232,13 @@ snapshots:
dependencies:
'@babel/types': 7.24.5
+ '@babel/helper-module-imports@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-module-imports@7.25.9(supports-color@5.5.0)':
dependencies:
'@babel/traverse': 7.28.5(supports-color@5.5.0)
@@ -14164,7 +14248,7 @@ snapshots:
'@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
'@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14172,9 +14256,9 @@ snapshots:
'@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0)
+ '@babel/helper-module-imports': 7.25.9
'@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14183,7 +14267,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-module-imports': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14192,7 +14276,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-module-imports': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14211,7 +14295,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-wrap-function': 7.28.3
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14220,7 +14304,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-wrap-function': 7.28.3
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14243,7 +14327,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-member-expression-to-functions': 7.28.5
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14252,7 +14336,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-member-expression-to-functions': 7.28.5
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14262,7 +14346,7 @@ snapshots:
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
'@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14284,7 +14368,7 @@ snapshots:
'@babel/helper-wrap-function@7.28.3':
dependencies:
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
'@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14315,7 +14399,7 @@ snapshots:
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14323,7 +14407,7 @@ snapshots:
dependencies:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14369,7 +14453,7 @@ snapshots:
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14377,7 +14461,7 @@ snapshots:
dependencies:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14514,6 +14598,11 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -14524,11 +14613,6 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
-
'@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -14621,7 +14705,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.0)
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14630,7 +14714,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14712,7 +14796,7 @@ snapshots:
'@babel/helper-globals': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.0)
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14724,7 +14808,7 @@ snapshots:
'@babel/helper-globals': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14744,7 +14828,7 @@ snapshots:
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14752,7 +14836,7 @@ snapshots:
dependencies:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14869,7 +14953,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14878,7 +14962,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14960,7 +15044,7 @@ snapshots:
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.0)
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -14970,7 +15054,7 @@ snapshots:
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -15039,7 +15123,7 @@ snapshots:
'@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.26.0)
'@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.26.0)
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -15050,7 +15134,7 @@ snapshots:
'@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
'@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
@@ -15208,17 +15292,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
- '@babel/types': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
'@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -15260,7 +15333,7 @@ snapshots:
'@babel/plugin-transform-runtime@7.24.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0)
+ '@babel/helper-module-imports': 7.25.9
'@babel/helper-plugin-utils': 7.27.1
babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0)
babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.26.0)
@@ -15651,11 +15724,23 @@ snapshots:
'@babel/parser': 7.28.5
'@babel/template': 7.25.9
'@babel/types': 7.28.5
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
+ '@babel/traverse@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+ debug: 4.4.3(supports-color@10.2.2)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/traverse@7.28.5(supports-color@5.5.0)':
dependencies:
'@babel/code-frame': 7.27.1
@@ -15688,7 +15773,7 @@ snapshots:
'@bcoe/v8-coverage@0.2.3': {}
- '@blueprintjs-formik/core@0.3.7(@babel/core@7.28.5)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)':
+ '@blueprintjs-formik/core@0.3.7(@babel/core@7.26.0)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)':
dependencies:
'@blueprintjs/core': 4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@blueprintjs/select': 4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -15697,15 +15782,15 @@ snapshots:
lodash.keyby: 4.6.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- styled-components: 5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ styled-components: 5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
web-vitals: 2.1.4
transitivePeerDependencies:
- '@babel/core'
- react-is
- '@blueprintjs-formik/datetime@0.4.0(@babel/core@7.28.5)(@blueprintjs-formik/core@0.3.7(@babel/core@7.28.5)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime2@0.9.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime@4.4.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)':
+ '@blueprintjs-formik/datetime@0.4.0(@babel/core@7.26.0)(@blueprintjs-formik/core@0.3.7(@babel/core@7.26.0)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime2@0.9.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/datetime@4.4.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)':
dependencies:
- '@blueprintjs-formik/core': 0.3.7(@babel/core@7.28.5)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ '@blueprintjs-formik/core': 0.3.7(@babel/core@7.26.0)(@blueprintjs/core@4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@blueprintjs/select@4.9.24(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(formik@2.4.6(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
'@blueprintjs/core': 4.20.2(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@blueprintjs/datetime': 4.4.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@blueprintjs/datetime2': 0.9.37(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -15715,7 +15800,7 @@ snapshots:
lodash.keyby: 4.6.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- styled-components: 5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ styled-components: 5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
web-vitals: 2.1.4
transitivePeerDependencies:
- '@babel/core'
@@ -15854,11 +15939,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@bull-board/nestjs@5.23.0(@bull-board/api@5.23.0(@bull-board/ui@5.23.0))(@bull-board/express@5.23.0)(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1)':
+ '@bull-board/nestjs@5.23.0(@bull-board/api@5.23.0(@bull-board/ui@5.23.0))(@bull-board/express@5.23.0)(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)(rxjs@7.8.1)':
dependencies:
'@bull-board/api': 5.23.0(@bull-board/ui@5.23.0)
'@bull-board/express': 5.23.0
- '@nestjs/bull-shared': 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
+ '@nestjs/bull-shared': 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
reflect-metadata: 0.2.2
@@ -16017,7 +16102,7 @@ snapshots:
'@emotion/babel-plugin@11.12.0':
dependencies:
- '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0)
+ '@babel/helper-module-imports': 7.25.9
'@babel/runtime': 7.24.5
'@emotion/hash': 0.9.2
'@emotion/memoize': 0.9.0
@@ -16400,7 +16485,7 @@ snapshots:
'@eslint/config-array@0.18.0':
dependencies:
'@eslint/object-schema': 2.1.4
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -16424,7 +16509,7 @@ snapshots:
'@eslint/eslintrc@3.1.0':
dependencies:
ajv: 6.12.6
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
espree: 10.2.0
globals: 14.0.0
ignore: 5.3.1
@@ -16477,7 +16562,7 @@ snapshots:
'@formatjs/intl-utils@2.3.0': {}
- '@golevelup/nestjs-discovery@5.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)':
+ '@golevelup/nestjs-discovery@5.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -16882,7 +16967,7 @@ snapshots:
dependencies:
npmlog: 6.0.2
- '@liaoliaots/nestjs-redis@10.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(ioredis@5.6.0)':
+ '@liaoliaots/nestjs-redis@10.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(ioredis@5.6.0)':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -17003,38 +17088,38 @@ snapshots:
pump: 3.0.0
tar-fs: 2.1.1
- '@nest-lab/throttler-storage-redis@1.1.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/throttler@6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2))(ioredis@5.6.0)(reflect-metadata@0.2.2)':
+ '@nest-lab/throttler-storage-redis@1.1.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/throttler@6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2))(ioredis@5.6.0)(reflect-metadata@0.2.2)':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
- '@nestjs/throttler': 6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)
+ '@nestjs/throttler': 6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)
ioredis: 5.6.0
reflect-metadata: 0.2.2
tslib: 2.8.1
- '@nestjs/bull-shared@10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)':
+ '@nestjs/bull-shared@10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
tslib: 2.8.0
- '@nestjs/bull@10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(bull@4.16.4)':
+ '@nestjs/bull@10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(bull@4.16.4)':
dependencies:
- '@nestjs/bull-shared': 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
+ '@nestjs/bull-shared': 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
bull: 4.16.4
tslib: 2.8.0
- '@nestjs/bullmq@10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(bullmq@5.25.6)':
+ '@nestjs/bullmq@10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(bullmq@5.25.6)':
dependencies:
- '@nestjs/bull-shared': 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
+ '@nestjs/bull-shared': 10.2.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
bullmq: 5.25.6
tslib: 2.8.0
- '@nestjs/cache-manager@2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(cache-manager@6.1.3)(rxjs@7.8.1)':
+ '@nestjs/cache-manager@2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@6.1.3)(rxjs@7.8.1)':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -17133,7 +17218,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- '@nestjs/core@7.6.18(@nestjs/common@7.6.18(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@6.6.7))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@6.6.7)':
+ '@nestjs/core@7.6.18(@nestjs/common@7.6.18(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@6.6.7))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))(@nestjs/websockets@10.4.20(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-socket.io@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.1))(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@6.6.7)':
dependencies:
'@nestjs/common': 7.6.18(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@6.6.7)
'@nuxtjs/opencollective': 0.3.2(encoding@0.1.13)
@@ -17151,7 +17236,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- '@nestjs/event-emitter@2.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)':
+ '@nestjs/event-emitter@2.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -17200,7 +17285,7 @@ snapshots:
- supports-color
- utf-8-validate
- '@nestjs/schedule@4.1.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)':
+ '@nestjs/schedule@4.1.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -17218,13 +17303,13 @@ snapshots:
transitivePeerDependencies:
- chokidar
- '@nestjs/serve-static@5.0.3(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)':
+ '@nestjs/serve-static@5.0.3(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
path-to-regexp: 8.2.0
- '@nestjs/swagger@7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)':
+ '@nestjs/swagger@7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)':
dependencies:
'@microsoft/tsdoc': 0.15.0
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -17239,7 +17324,7 @@ snapshots:
class-transformer: 0.5.1
class-validator: 0.14.1
- '@nestjs/testing@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)':
+ '@nestjs/testing@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -17247,7 +17332,7 @@ snapshots:
optionalDependencies:
'@nestjs/platform-express': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
- '@nestjs/throttler@6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)':
+ '@nestjs/throttler@6.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)':
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -18014,6 +18099,29 @@ snapshots:
dependencies:
'@redis/client': 1.6.0
+ '@redocly/ajv@8.11.2':
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js-replace: 1.0.1
+
+ '@redocly/config@0.22.0': {}
+
+ '@redocly/openapi-core@1.34.10(supports-color@10.2.2)':
+ dependencies:
+ '@redocly/ajv': 8.11.2
+ '@redocly/config': 0.22.0
+ colorette: 1.4.0
+ https-proxy-agent: 7.0.6(supports-color@10.2.2)
+ js-levenshtein: 1.1.6
+ js-yaml: 4.1.1
+ minimatch: 5.1.9
+ pluralize: 8.0.0
+ yaml-ast-parser: 0.0.43
+ transitivePeerDependencies:
+ - supports-color
+
'@reduxjs/toolkit@1.9.7(react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies:
immer: 9.0.21
@@ -18740,7 +18848,7 @@ snapshots:
- '@types/react'
- '@types/react-dom'
- '@storybook/addon-styling@1.3.6(@types/react-dom@18.3.0)(@types/react@18.3.4)(encoding@0.1.13)(less@4.2.0)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2)(typescript@5.6.3)(webpack@5.91.0)':
+ '@storybook/addon-styling@1.3.6(@types/react-dom@18.3.0)(@types/react@18.3.4)(encoding@0.1.13)(less@4.2.0)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2)(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))':
dependencies:
'@babel/template': 7.25.9
'@babel/types': 7.26.0
@@ -18753,19 +18861,19 @@ snapshots:
'@storybook/preview-api': 7.6.20
'@storybook/theming': 7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@storybook/types': 7.6.20
- css-loader: 6.11.0(webpack@5.91.0)
- less-loader: 11.1.4(less@4.2.0)(webpack@5.91.0)
- postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.6.3)(webpack@5.91.0)
+ css-loader: 6.11.0(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
+ less-loader: 11.1.4(less@4.2.0)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
+ postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
prettier: 2.8.8
resolve-url-loader: 5.0.0
- sass-loader: 13.3.3(sass@1.77.2)(webpack@5.91.0)
- style-loader: 3.3.4(webpack@5.91.0)
+ sass-loader: 13.3.3(sass@1.77.2)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
+ style-loader: 3.3.4(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
optionalDependencies:
less: 4.2.0
postcss: 8.4.47
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
transitivePeerDependencies:
- '@rspack/core'
- '@types/react'
@@ -19216,7 +19324,7 @@ snapshots:
dependencies:
'@babel/generator': 7.28.5
'@babel/parser': 7.28.5
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
'@babel/types': 7.28.5
'@storybook/csf': 0.1.11
'@storybook/types': 7.2.2
@@ -20073,7 +20181,7 @@ snapshots:
'@types/nodemailer@6.4.17':
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.5.1
'@types/normalize-package-data@2.4.4': {}
@@ -20376,7 +20484,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
'@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5)
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
eslint: 8.57.0
tsutils: 3.21.0(typescript@4.9.5)
optionalDependencies:
@@ -20388,7 +20496,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3)
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3)
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.3
@@ -20418,7 +20526,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.3
@@ -20432,7 +20540,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.3
@@ -20446,7 +20554,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 8.11.0
'@typescript-eslint/visitor-keys': 8.11.0
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.4
@@ -20736,19 +20844,19 @@ snapshots:
'@webassemblyjs/ast': 1.12.1
'@xtuc/long': 4.2.2
- '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.91.0)':
+ '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))':
dependencies:
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack@5.91.0)
- '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.91.0)':
+ '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))':
dependencies:
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack@5.91.0)
- '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.91.0)':
+ '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))':
dependencies:
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack@5.91.0)
'@welldone-software/why-did-you-render@6.2.3(react@18.3.1)':
@@ -20867,16 +20975,18 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
agent-base@7.1.1:
dependencies:
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
+ agent-base@7.1.4: {}
+
agentkeepalive@4.5.0:
dependencies:
humanize-ms: 1.2.1
@@ -21196,7 +21306,7 @@ snapshots:
babel-plugin-emotion@10.2.2:
dependencies:
- '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0)
+ '@babel/helper-module-imports': 7.25.9
'@emotion/hash': 0.8.0
'@emotion/memoize': 0.7.4
'@emotion/serialize': 0.11.16
@@ -21310,14 +21420,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- babel-plugin-styled-components@2.1.4(@babel/core@7.28.5)(styled-components@5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0):
+ babel-plugin-styled-components@2.1.4(@babel/core@7.26.0)(styled-components@5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0):
dependencies:
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-module-imports': 7.25.9(supports-color@5.5.0)
- '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.26.0)
lodash: 4.17.21
picomatch: 2.3.1
- styled-components: 5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ styled-components: 5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
transitivePeerDependencies:
- '@babel/core'
- supports-color
@@ -21781,6 +21891,8 @@ snapshots:
snake-case: 3.0.4
tslib: 2.8.1
+ change-case@5.4.4: {}
+
char-regex@1.0.2: {}
character-parser@2.2.0:
@@ -21897,6 +22009,8 @@ snapshots:
color-support@1.1.3: {}
+ colorette@1.4.0: {}
+
colorette@2.0.19: {}
colorette@2.0.20: {}
@@ -22205,7 +22319,7 @@ snapshots:
dependencies:
hyphenate-style-name: 1.0.5
- css-loader@6.11.0(webpack@5.91.0):
+ css-loader@6.11.0(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
dependencies:
icss-utils: 5.1.0(postcss@8.4.47)
postcss: 8.4.47
@@ -22216,7 +22330,7 @@ snapshots:
postcss-value-parser: 4.2.0
semver: 7.6.3
optionalDependencies:
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
css-loader@6.11.0(webpack@5.96.1(esbuild@0.18.20)):
dependencies:
@@ -22309,6 +22423,12 @@ snapshots:
optionalDependencies:
supports-color: 5.5.0
+ debug@4.4.3(supports-color@10.2.2):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 10.2.2
+
debug@4.4.3(supports-color@5.5.0):
dependencies:
ms: 2.1.3
@@ -22448,7 +22568,7 @@ snapshots:
detect-port@1.6.1:
dependencies:
address: 1.2.2
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -22806,7 +22926,7 @@ snapshots:
esbuild-register@3.6.0(esbuild@0.18.20):
dependencies:
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
esbuild: 0.18.20
transitivePeerDependencies:
- supports-color
@@ -22915,7 +23035,7 @@ snapshots:
dependencies:
eslint: 9.13.0(jiti@1.21.0)
- eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.28.5))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5))(eslint@8.57.0)(typescript@4.9.5):
+ eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.26.0))(eslint@8.57.0)(typescript@4.9.5):
dependencies:
'@babel/core': 7.26.0
'@babel/eslint-parser': 7.24.5(@babel/core@7.26.0)(eslint@8.57.0)
@@ -22925,7 +23045,7 @@ snapshots:
babel-preset-react-app: 10.0.1
confusing-browser-globals: 1.0.11
eslint: 8.57.0
- eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.28.5))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5))(eslint@8.57.0)
+ eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.26.0))(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)
eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
@@ -22960,10 +23080,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.28.5))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5))(eslint@8.57.0):
+ eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.26.0))(eslint@8.57.0):
dependencies:
- '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0)
+ '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.26.0)
eslint: 8.57.0
lodash: 4.17.21
string-natural-compare: 3.0.1
@@ -23237,7 +23357,7 @@ snapshots:
estree-to-babel@3.2.1:
dependencies:
- '@babel/traverse': 7.28.5(supports-color@5.5.0)
+ '@babel/traverse': 7.28.5
'@babel/types': 7.28.5
c8: 7.14.0
transitivePeerDependencies:
@@ -23546,7 +23666,7 @@ snapshots:
cross-spawn: 7.0.3
signal-exit: 4.1.0
- fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.3)(webpack@5.91.0):
+ fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
dependencies:
'@babel/code-frame': 7.26.0
chalk: 4.1.2
@@ -23561,7 +23681,7 @@ snapshots:
semver: 7.6.2
tapable: 2.2.1
typescript: 5.6.3
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.3)(webpack@5.96.1(esbuild@0.23.1)):
dependencies:
@@ -24051,35 +24171,42 @@ snapshots:
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
https-proxy-agent@4.0.0:
dependencies:
agent-base: 5.1.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.4:
dependencies:
agent-base: 7.1.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ https-proxy-agent@7.0.6(supports-color@10.2.2):
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -24148,6 +24275,8 @@ snapshots:
indent-string@4.0.0: {}
+ index-to-position@1.2.0: {}
+
inflight@1.0.6:
dependencies:
once: 1.4.0
@@ -24257,7 +24386,7 @@ snapshots:
dependencies:
'@ioredis/commands': 1.2.0
cluster-key-slot: 1.1.2
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
denque: 1.5.1
lodash.defaults: 4.2.0
lodash.flatten: 4.4.0
@@ -24522,7 +24651,7 @@ snapshots:
istanbul-lib-source-maps@4.0.1:
dependencies:
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
istanbul-lib-coverage: 3.2.2
source-map: 0.6.1
transitivePeerDependencies:
@@ -24927,6 +25056,8 @@ snapshots:
js-cookie@3.0.5: {}
+ js-levenshtein@1.1.6: {}
+
js-money@0.6.3:
dependencies:
lodash: 4.17.21
@@ -24946,6 +25077,10 @@ snapshots:
dependencies:
argparse: 2.0.1
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
jsbn@1.1.0: {}
jscodeshift@0.14.0(@babel/preset-env@7.28.5(@babel/core@7.28.5)):
@@ -25191,10 +25326,10 @@ snapshots:
- encoding
- supports-color
- less-loader@11.1.4(less@4.2.0)(webpack@5.91.0):
+ less-loader@11.1.4(less@4.2.0)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
dependencies:
less: 4.2.0
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
less-loader@11.1.4(less@4.2.0)(webpack@5.96.1(esbuild@0.18.20)):
dependencies:
@@ -25599,6 +25734,10 @@ snapshots:
dependencies:
brace-expansion: 2.0.1
+ minimatch@5.1.9:
+ dependencies:
+ brace-expansion: 2.0.1
+
minimatch@8.0.4:
dependencies:
brace-expansion: 2.0.1
@@ -25834,10 +25973,10 @@ snapshots:
neo-async@2.6.2: {}
- nest-commander@3.20.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@types/inquirer@8.2.12)(@types/node@20.5.1)(typescript@5.6.3):
+ nest-commander@3.20.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@types/inquirer@8.2.12)(@types/node@20.5.1)(typescript@5.6.3):
dependencies:
'@fig/complete-commander': 3.2.0(commander@11.1.0)
- '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)
+ '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@types/inquirer': 8.2.12
@@ -25848,14 +25987,14 @@ snapshots:
- '@types/node'
- typescript
- nestjs-cls@5.2.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1):
+ nestjs-cls@5.2.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)(rxjs@7.8.1):
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
reflect-metadata: 0.2.2
rxjs: 7.8.1
- nestjs-i18n@10.5.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-validator@0.14.1)(rxjs@7.8.1):
+ nestjs-i18n@10.5.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-validator@0.14.1)(rxjs@7.8.1):
dependencies:
'@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -25868,10 +26007,10 @@ snapshots:
rxjs: 7.8.1
string-format: 2.0.0
- nestjs-redis@1.3.3(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(encoding@0.1.13):
+ nestjs-redis@1.3.3(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))(@nestjs/websockets@10.4.20(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-socket.io@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(encoding@0.1.13):
dependencies:
'@nestjs/common': 7.6.18(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@6.6.7)
- '@nestjs/core': 7.6.18(@nestjs/common@7.6.18(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@6.6.7))(@nestjs/platform-express@10.4.7)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@6.6.7)
+ '@nestjs/core': 7.6.18(@nestjs/common@7.6.18(cache-manager@6.1.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@6.6.7))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))(@nestjs/websockets@10.4.20(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-socket.io@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.1))(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@6.6.7)
'@types/ioredis': 5.0.0
'@types/uuid': 10.0.0
ioredis: 4.29.1
@@ -26243,6 +26382,18 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
+ openapi-typescript-fetch@2.2.1: {}
+
+ openapi-typescript@7.13.0(typescript@5.6.3):
+ dependencies:
+ '@redocly/openapi-core': 1.34.10(supports-color@10.2.2)
+ ansi-colors: 4.1.3
+ change-case: 5.4.4
+ parse-json: 8.3.0
+ supports-color: 10.2.2
+ typescript: 5.6.3
+ yargs-parser: 21.1.1
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -26387,6 +26538,12 @@ snapshots:
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
+ parse-json@8.3.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ index-to-position: 1.2.0
+ type-fest: 4.41.0
+
parse-node-version@1.0.1: {}
parse-path@7.0.0:
@@ -26610,6 +26767,14 @@ snapshots:
postcss: 8.4.47
ts-node: 10.9.2(@types/node@20.19.25)(typescript@5.6.3)
+ postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3)):
+ dependencies:
+ lilconfig: 3.1.1
+ yaml: 2.4.2
+ optionalDependencies:
+ postcss: 8.4.47
+ ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.6.3)
+
postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.4.47)(yaml@2.4.2):
dependencies:
lilconfig: 3.1.1
@@ -26618,13 +26783,13 @@ snapshots:
postcss: 8.4.47
yaml: 2.4.2
- postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.6.3)(webpack@5.91.0):
+ postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
dependencies:
cosmiconfig: 8.3.6(typescript@5.6.3)
jiti: 1.21.0
postcss: 8.4.47
semver: 7.6.3
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
transitivePeerDependencies:
- typescript
@@ -26978,7 +27143,7 @@ snapshots:
puppeteer-core@2.1.1:
dependencies:
'@types/mime-types': 2.1.4
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
extract-zip: 1.7.0
https-proxy-agent: 4.0.0
mime: 2.6.0
@@ -27863,10 +28028,10 @@ snapshots:
safer-buffer@2.1.2: {}
- sass-loader@13.3.3(sass@1.77.2)(webpack@5.91.0):
+ sass-loader@13.3.3(sass@1.77.2)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
dependencies:
neo-async: 2.6.2
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
optionalDependencies:
sass: 1.77.2
@@ -28130,7 +28295,7 @@ snapshots:
socks-proxy-agent@7.0.0:
dependencies:
agent-base: 6.0.2
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
socks: 2.8.3
transitivePeerDependencies:
- supports-color
@@ -28138,7 +28303,7 @@ snapshots:
socks-proxy-agent@8.0.3:
dependencies:
agent-base: 7.1.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
socks: 2.8.3
transitivePeerDependencies:
- supports-color
@@ -28376,7 +28541,7 @@ snapshots:
stripe@16.10.0:
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.5.1
qs: 6.14.0
strnum@1.0.5: {}
@@ -28392,22 +28557,22 @@ snapshots:
loader-utils: 1.4.2
schema-utils: 1.0.0
- style-loader@3.3.4(webpack@5.91.0):
+ style-loader@3.3.4(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
dependencies:
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
style-loader@3.3.4(webpack@5.96.1(esbuild@0.18.20)):
dependencies:
webpack: 5.96.1(esbuild@0.18.20)
- styled-components@5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1):
+ styled-components@5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1):
dependencies:
'@babel/helper-module-imports': 7.24.3
'@babel/traverse': 7.24.5(supports-color@5.5.0)
'@emotion/is-prop-valid': 1.2.2
'@emotion/stylis': 0.8.5
'@emotion/unitless': 0.7.5
- babel-plugin-styled-components: 2.1.4(@babel/core@7.28.5)(styled-components@5.3.11(@babel/core@7.28.5)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0)
+ babel-plugin-styled-components: 2.1.4(@babel/core@7.26.0)(styled-components@5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0)
css-to-react-native: 3.2.0
hoist-non-react-statics: 3.3.2
react: 18.3.1
@@ -28456,7 +28621,7 @@ snapshots:
dependencies:
component-emitter: 1.3.1
cookiejar: 2.1.4
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
fast-safe-stringify: 2.1.1
form-data: 4.0.0
formidable: 3.5.2
@@ -28473,6 +28638,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ supports-color@10.2.2: {}
+
supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
@@ -28529,6 +28696,33 @@ snapshots:
transitivePeerDependencies:
- ts-node
+ tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3)):
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.2
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.0
+ lilconfig: 2.1.0
+ micromatch: 4.0.7
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.4.47
+ postcss-import: 15.1.0(postcss@8.4.47)
+ postcss-js: 4.0.1(postcss@8.4.47)
+ postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3))
+ postcss-nested: 6.0.1(postcss@8.4.47)
+ postcss-selector-parser: 6.1.0
+ resolve: 1.22.8
+ sucrase: 3.35.0
+ transitivePeerDependencies:
+ - ts-node
+
tapable@2.2.1: {}
tar-fs@2.1.1:
@@ -28577,6 +28771,17 @@ snapshots:
type-fest: 0.16.0
unique-string: 2.0.0
+ terser-webpack-plugin@5.3.10(esbuild@0.18.20)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 3.3.0
+ serialize-javascript: 6.0.2
+ terser: 5.31.0
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
+ optionalDependencies:
+ esbuild: 0.18.20
+
terser-webpack-plugin@5.3.10(esbuild@0.18.20)(webpack@5.96.1(esbuild@0.18.20)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
@@ -28588,17 +28793,6 @@ snapshots:
optionalDependencies:
esbuild: 0.18.20
- terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.91.0):
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- jest-worker: 27.5.1
- schema-utils: 3.3.0
- serialize-javascript: 6.0.2
- terser: 5.31.0
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
- optionalDependencies:
- esbuild: 0.23.1
-
terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.96.1(esbuild@0.23.1)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
@@ -28755,7 +28949,7 @@ snapshots:
babel-jest: 29.7.0(@babel/core@7.28.5)
esbuild: 0.23.1
- ts-loader@9.5.1(typescript@5.6.3)(webpack@5.91.0):
+ ts-loader@9.5.1(typescript@5.6.3)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)):
dependencies:
chalk: 4.1.2
enhanced-resolve: 5.17.1
@@ -28763,7 +28957,7 @@ snapshots:
semver: 7.6.3
source-map: 0.7.4
typescript: 5.6.3
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
ts-loader@9.5.1(typescript@5.6.3)(webpack@5.96.1(esbuild@0.23.1)):
dependencies:
@@ -28892,7 +29086,7 @@ snapshots:
tuf-js@1.1.7:
dependencies:
'@tufjs/models': 1.0.4
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
make-fetch-happen: 11.1.1
transitivePeerDependencies:
- supports-color
@@ -28900,7 +29094,7 @@ snapshots:
tuf-js@2.2.1:
dependencies:
'@tufjs/models': 2.0.1
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
make-fetch-happen: 13.0.1
transitivePeerDependencies:
- supports-color
@@ -28929,6 +29123,8 @@ snapshots:
type-fest@4.32.0: {}
+ type-fest@4.41.0: {}
+
type-is@1.6.18:
dependencies:
media-typer: 0.3.0
@@ -29111,6 +29307,8 @@ snapshots:
dependencies:
tslib: 2.8.1
+ uri-js-replace@1.0.1: {}
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
@@ -29186,7 +29384,7 @@ snapshots:
vite-node@2.1.3(@types/node@20.19.25)(less@4.2.0)(sass@1.77.2)(terser@5.31.0):
dependencies:
cac: 6.7.14
- debug: 4.4.3(supports-color@5.5.0)
+ debug: 4.4.3(supports-color@10.2.2)
pathe: 1.1.2
vite: 5.4.10(@types/node@20.19.25)(less@4.2.0)(sass@1.77.2)(terser@5.31.0)
transitivePeerDependencies:
@@ -29299,9 +29497,9 @@ snapshots:
webpack-cli@5.1.4(webpack@5.91.0):
dependencies:
'@discoveryjs/json-ext': 0.5.7
- '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.91.0)
- '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.91.0)
- '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.91.0)
+ '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
+ '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
+ '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
colorette: 2.0.20
commander: 10.0.1
cross-spawn: 7.0.3
@@ -29310,7 +29508,7 @@ snapshots:
import-local: 3.1.0
interpret: 3.1.1
rechoir: 0.8.0
- webpack: 5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4)
+ webpack: 5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4)
webpack-merge: 5.10.0
webpack-merge@5.10.0:
@@ -29325,7 +29523,7 @@ snapshots:
webpack-virtual-modules@0.6.2: {}
- webpack@5.91.0(esbuild@0.23.1)(webpack-cli@5.1.4):
+ webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.5
@@ -29348,7 +29546,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.91.0)
+ terser-webpack-plugin: 5.3.10(esbuild@0.18.20)(webpack@5.91.0(esbuild@0.18.20)(webpack-cli@5.1.4))
watchpack: 2.4.1
webpack-sources: 3.2.3
optionalDependencies:
@@ -29614,6 +29812,8 @@ snapshots:
yallist@4.0.0: {}
+ yaml-ast-parser@0.0.43: {}
+
yaml@1.10.2: {}
yaml@2.4.2: {}
diff --git a/shared/sdk-ts/.gitignore b/shared/sdk-ts/.gitignore
new file mode 100644
index 000000000..3e2212924
--- /dev/null
+++ b/shared/sdk-ts/.gitignore
@@ -0,0 +1 @@
+/dist
\ No newline at end of file
diff --git a/shared/sdk-ts/openapi.json b/shared/sdk-ts/openapi.json
new file mode 100644
index 000000000..51ce6bb5f
--- /dev/null
+++ b/shared/sdk-ts/openapi.json
@@ -0,0 +1,40101 @@
+{
+ "openapi": "3.0.0",
+ "paths": {
+ "/api/system_db": {
+ "get": {
+ "operationId": "SystemDatabaseController_ping",
+ "parameters": [],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ }
+ }
+ },
+ "/api/auth/signin": {
+ "post": {
+ "operationId": "AuthController_signin",
+ "summary": "Sign in a user",
+ "parameters": [],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthSigninDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Sign-in successful. Returns access token and tenant/organization IDs.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthSigninResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/auth/signup": {
+ "post": {
+ "operationId": "AuthController_signup",
+ "summary": "Sign up a new user",
+ "parameters": [],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthSignupDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Sign-up initiated. Check email for confirmation."
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/auth/signup/verify": {
+ "post": {
+ "operationId": "AuthController_signupConfirm",
+ "summary": "Confirm user signup",
+ "parameters": [],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthSignupVerifyDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Signup confirmed successfully."
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/auth/send_reset_password": {
+ "post": {
+ "operationId": "AuthController_sendResetPassword",
+ "summary": "Send reset password email",
+ "parameters": [],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthSendResetPasswordDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Reset password email sent if the account exists."
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/auth/reset_password/{token}": {
+ "post": {
+ "operationId": "AuthController_resetPassword",
+ "summary": "Reset password using token",
+ "parameters": [
+ {
+ "name": "token",
+ "required": true,
+ "in": "path",
+ "description": "Reset password token from email link",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthResetPasswordDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Password reset successfully."
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/auth/meta": {
+ "get": {
+ "operationId": "AuthController_meta",
+ "summary": "Get auth metadata (e.g. signup disabled)",
+ "parameters": [],
+ "responses": {
+ "200": {
+ "description": "Auth metadata for the login/signup page.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthMetaResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/auth/signup/verify/resend": {
+ "post": {
+ "operationId": "AuthedController_resendSignupConfirm",
+ "summary": "Resend the signup confirmation message",
+ "parameters": [],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "number",
+ "example": 200
+ },
+ "message": {
+ "type": "string",
+ "example": "resent successfully."
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/auth/account": {
+ "get": {
+ "operationId": "AuthedController_getAuthedAcccount",
+ "summary": "Retrieve the authenticated account",
+ "parameters": [],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "tags": [
+ "Auth"
+ ]
+ }
+ },
+ "/api/api-keys/generate": {
+ "post": {
+ "operationId": "AuthApiKeysController_generate",
+ "summary": "Generate a new API key",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerateApiKeyDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "The generated API key",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiKeyResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Api keys"
+ ]
+ }
+ },
+ "/api/api-keys/{id}/revoke": {
+ "put": {
+ "operationId": "AuthApiKeysController_revoke",
+ "summary": "Revoke an API key",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "API key ID",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "API key revoked",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiKeyRevokeResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Api keys"
+ ]
+ }
+ },
+ "/api/api-keys": {
+ "get": {
+ "operationId": "AuthApiKeysController_getApiKeys",
+ "summary": "Get all API keys for the current tenant",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "List of API keys",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ApiKeyListItemDto"
+ }
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Api keys"
+ ]
+ }
+ },
+ "/api/items": {
+ "get": {
+ "operationId": "ItemsController_getItems",
+ "summary": "Retrieves the item list.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "page",
+ "required": false,
+ "in": "query",
+ "description": "Page number for pagination",
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "pageSize",
+ "required": false,
+ "in": "query",
+ "description": "Number of items per page",
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "customViewId",
+ "required": false,
+ "in": "query",
+ "description": "Custom view ID for filtering",
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "filterRoles",
+ "required": false,
+ "in": "query",
+ "description": "Array of filter roles",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "name": "columnSortBy",
+ "required": false,
+ "in": "query",
+ "description": "Column sort direction",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "sortOrder",
+ "required": false,
+ "in": "query",
+ "description": "Sort order direction",
+ "schema": {
+ "enum": [
+ "DESC",
+ "ASC"
+ ],
+ "type": "string"
+ }
+ },
+ {
+ "name": "stringifiedFilterRoles",
+ "required": false,
+ "in": "query",
+ "description": "Stringified filter roles",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "searchKeyword",
+ "required": false,
+ "in": "query",
+ "description": "Search keyword",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "viewSlug",
+ "required": false,
+ "in": "query",
+ "description": "View slug for filtering",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "inactiveMode",
+ "required": false,
+ "in": "query",
+ "description": "Filter for inactive items",
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item list has been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaginatedResponseDto"
+ },
+ {
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ItemResponseDto"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ },
+ "post": {
+ "operationId": "ItemsController_createItem",
+ "summary": "Create a new item (product or service).",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateItemDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The item has been successfully created."
+ },
+ "400": {
+ "description": "Validation error. Possible error types: ITEM_NAME_EXISTS, ITEM_CATEOGRY_NOT_FOUND, COST_ACCOUNT_NOT_COGS, SELL_ACCOUNT_NOT_INCOME, INVENTORY_ACCOUNT_NOT_INVENTORY, INCOME_ACCOUNT_REQUIRED_WITH_SELLABLE_ITEM, COST_ACCOUNT_REQUIRED_WITH_PURCHASABLE_ITEM, etc.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ItemApiErrorResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/{id}": {
+ "put": {
+ "operationId": "ItemsController_editItem",
+ "summary": "Edit the given item (product or service).",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EditItemDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The item has been successfully updated."
+ },
+ "400": {
+ "description": "Validation error. Possible error types: ITEM_NAME_EXISTS, INVENTORY_ACCOUNT_CANNOT_MODIFIED, TYPE_CANNOT_CHANGE_WITH_ITEM_HAS_TRANSACTIONS, etc.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ItemApiErrorResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ },
+ "delete": {
+ "operationId": "ItemsController_deleteItem",
+ "summary": "Delete the given item (product or service).",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item has been successfully deleted."
+ },
+ "400": {
+ "description": "Cannot delete item. Possible error types: ITEM_HAS_ASSOCIATED_TRANSACTINS, ITEM_HAS_ASSOCIATED_INVENTORY_ADJUSTMENT, etc.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ItemApiErrorResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ },
+ "get": {
+ "operationId": "ItemsController_getItem",
+ "summary": "Get the given item (product or service).",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item details have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ItemResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/validate-bulk-delete": {
+ "post": {
+ "operationId": "ItemsController_validateBulkDeleteItems",
+ "summary": "Validates which items can be deleted and returns counts of deletable and non-deletable items.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BulkDeleteItemsDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Validation completed. Returns counts and IDs of deletable and non-deletable items.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ValidateBulkDeleteItemsResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/bulk-delete": {
+ "post": {
+ "operationId": "ItemsController_bulkDeleteItems",
+ "summary": "Deletes multiple items in bulk.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BulkDeleteItemsDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The items have been successfully deleted."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/{id}/inactivate": {
+ "patch": {
+ "operationId": "ItemsController_inactivateItem",
+ "summary": "Inactivate the given item (product or service).",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item has been successfully inactivated."
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/{id}/activate": {
+ "patch": {
+ "operationId": "ItemsController_activateItem",
+ "summary": "Activate the given item (product or service).",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item has been successfully activated."
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/{id}/invoices": {
+ "get": {
+ "operationId": "ItemsController_getItemInvoicesTransactions",
+ "summary": "Retrieves the item associated invoices transactions.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item associated invoices transactions have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ItemInvoiceResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/{id}/bills": {
+ "get": {
+ "operationId": "ItemsController_getItemBillTransactions",
+ "summary": "Retrieves the item associated bills transactions.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item associated bills transactions have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ItemBillsResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/{id}/estimates": {
+ "get": {
+ "operationId": "ItemsController_getItemEstimatesTransactions",
+ "summary": "Retrieves the item associated estimates transactions.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item associated estimate transactions have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ItemEstimatesResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/items/{id}/receipts": {
+ "get": {
+ "operationId": "ItemsController_getItemReceiptTransactions",
+ "summary": "Retrieves the item associated receipts transactions.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "The item id",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The item associated receipts transactions have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ItemReceiptsResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The item not found."
+ }
+ },
+ "tags": [
+ "Items"
+ ]
+ }
+ },
+ "/api/inventory-adjustments/quick": {
+ "post": {
+ "operationId": "InventoryAdjustmentsController_createQuickInventoryAdjustment",
+ "summary": "Create a quick inventory adjustment.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateQuickInventoryAdjustmentDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The inventory adjustment has been successfully created."
+ }
+ },
+ "tags": [
+ "Inventory Adjustments"
+ ]
+ }
+ },
+ "/api/inventory-adjustments/{id}": {
+ "delete": {
+ "operationId": "InventoryAdjustmentsController_deleteInventoryAdjustment",
+ "summary": "Delete the given inventory adjustment.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The inventory adjustment has been successfully deleted."
+ }
+ },
+ "tags": [
+ "Inventory Adjustments"
+ ]
+ },
+ "get": {
+ "operationId": "InventoryAdjustmentsController_getInventoryAdjustment",
+ "summary": "Retrieves the inventory adjustment details.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The inventory adjustment details have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InventoryAdjustmentResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Inventory Adjustments"
+ ]
+ }
+ },
+ "/api/inventory-adjustments": {
+ "get": {
+ "operationId": "InventoryAdjustmentsController_getInventoryAdjustments",
+ "summary": "Retrieves the inventory adjustments.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "page",
+ "required": false,
+ "in": "query",
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
+ },
+ {
+ "name": "pageSize",
+ "required": false,
+ "in": "query",
+ "schema": {
+ "example": 12,
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The inventory adjustments have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InventoryAdjustmentsListResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Inventory Adjustments"
+ ]
+ }
+ },
+ "/api/inventory-adjustments/{id}/publish": {
+ "put": {
+ "operationId": "InventoryAdjustmentsController_publishInventoryAdjustment",
+ "summary": "Publish the given inventory adjustment.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The inventory adjustment has been successfully published."
+ }
+ },
+ "tags": [
+ "Inventory Adjustments"
+ ]
+ }
+ },
+ "/api/branches": {
+ "get": {
+ "operationId": "BranchesController_getBranches",
+ "summary": "Retrieves the branches.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The branches have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BranchResponseDto"
+ }
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ "Branches"
+ ]
+ },
+ "post": {
+ "operationId": "BranchesController_createBranch",
+ "summary": "Create a new branch.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateBranchDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The branch has been successfully created.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BranchResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The branch not found."
+ }
+ },
+ "tags": [
+ "Branches"
+ ]
+ }
+ },
+ "/api/branches/{id}": {
+ "get": {
+ "operationId": "BranchesController_getBranch",
+ "summary": "Retrieves the branch details.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The branch details have been successfully retrieved.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BranchResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The branch not found."
+ }
+ },
+ "tags": [
+ "Branches"
+ ]
+ },
+ "put": {
+ "operationId": "BranchesController_editBranch",
+ "summary": "Edit the given branch.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EditBranchDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The branch has been successfully edited.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BranchResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The branch not found."
+ }
+ },
+ "tags": [
+ "Branches"
+ ]
+ },
+ "delete": {
+ "operationId": "BranchesController_deleteBranch",
+ "summary": "Delete the given branch.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The branch has been successfully deleted."
+ },
+ "404": {
+ "description": "The branch not found."
+ }
+ },
+ "tags": [
+ "Branches"
+ ]
+ }
+ },
+ "/api/branches/activate": {
+ "post": {
+ "operationId": "BranchesController_activateBranches",
+ "summary": "Activate the branches feature.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The branches feature has been successfully activated."
+ }
+ },
+ "tags": [
+ "Branches"
+ ]
+ }
+ },
+ "/api/branches/{id}/mark-as-primary": {
+ "put": {
+ "operationId": "BranchesController_markBranchAsPrimary",
+ "summary": "Mark the given branch as primary.",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The branch has been successfully marked as primary.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BranchResponseDto"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The branch not found."
+ }
+ },
+ "tags": [
+ "Branches"
+ ]
+ }
+ },
+ "/api/warehouses": {
+ "post": {
+ "operationId": "WarehousesController_createWarehouse",
+ "summary": "Create a warehouse",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where is an API key prefixed with 'bc_' or a JWT token.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "example": "Bearer bc_1234567890abcdef"
+ }
+ },
+ {
+ "name": "organization-id",
+ "in": "header",
+ "description": "Required if Authorization is a JWT token. The organization ID to operate within.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateWarehouseDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "tags": [
+ "Warehouses"
+ ]
+ },
+ "get": {
+ "operationId": "WarehousesController_getWarehouses",
+ "summary": "Get all warehouses",
+ "parameters": [
+ {
+ "name": "Authorization",
+ "in": "header",
+ "description": "Value must be 'Bearer ' where