diff --git a/packages/webapp/package.json b/packages/webapp/package.json index d7bd5702e..effb13ba1 100644 --- a/packages/webapp/package.json +++ b/packages/webapp/package.json @@ -17,6 +17,8 @@ "@casl/ability": "^5.4.3", "@casl/react": "^2.3.0", "@craco/craco": "^5.9.0", + "@emotion/css": "^11.13.4", + "@emotion/react": "^11.13.3", "@reduxjs/toolkit": "^1.2.5", "@stripe/connect-js": "^3.3.12", "@stripe/react-connect-js": "^3.3.13", @@ -48,6 +50,7 @@ "@typescript-eslint/eslint-plugin": "^2.10.0", "@typescript-eslint/parser": "^2.10.0", "@welldone-software/why-did-you-render": "^6.0.0-rc.1", + "@xstyled/emotion": "^3.8.1", "accounting": "^0.4.1", "axios": "^1.6.0", "basscss": "^8.0.2", @@ -124,6 +127,7 @@ "style-loader": "0.23.1", "styled-components": "^5.3.1", "stylis-rtlcss": "^2.1.1", + "theme-ui": "^0.16.2", "typescript": "^4.8.3", "yup": "^0.28.1" }, diff --git a/packages/webapp/src/components/App.tsx b/packages/webapp/src/components/App.tsx index 5c62605f9..a962d88f7 100644 --- a/packages/webapp/src/components/App.tsx +++ b/packages/webapp/src/components/App.tsx @@ -1,4 +1,5 @@ // @ts-nocheck +import { defaultTheme, ThemeProvider } from '@xstyled/emotion'; import { lazy, Suspense } from 'react'; import { Router, Switch, Route } from 'react-router'; import { createBrowserHistory } from 'history'; @@ -35,6 +36,13 @@ const OneClickDemoPage = lazy( const PaymentPortalPage = lazy( () => import('@/containers/PaymentPortal/PaymentPortalPage'), ); + + +const theme = { + ...defaultTheme, + // Customize your theme here +} + /** * App inner. */ @@ -42,30 +50,38 @@ function AppInsider({ history }) { return (
- - - - } /> - - - - - - - + + + + + } + /> + + + + + + + - } - /> - } /> - } /> - } /> - - - + } + /> + } /> + } + /> + } /> + + + - + +
); diff --git a/packages/webapp/src/components/Dashboard/DashboardInsider.tsx b/packages/webapp/src/components/Dashboard/DashboardInsider.tsx index f46dae7bb..3b1217816 100644 --- a/packages/webapp/src/components/Dashboard/DashboardInsider.tsx +++ b/packages/webapp/src/components/Dashboard/DashboardInsider.tsx @@ -2,6 +2,7 @@ import React from 'react'; import classnames from 'classnames'; import { LoadingIndicator } from '../Indicator'; +import { css } from '@emotion/css'; export function DashboardInsider({ loading, @@ -9,6 +10,7 @@ export function DashboardInsider({ name, mount = false, className, + style }) { return (
{children} diff --git a/packages/webapp/src/components/PageForm/PageForm.tsx b/packages/webapp/src/components/PageForm/PageForm.tsx new file mode 100644 index 000000000..2a37e8376 --- /dev/null +++ b/packages/webapp/src/components/PageForm/PageForm.tsx @@ -0,0 +1,90 @@ +import React, { FC } from 'react'; +import clsx from 'classnames'; +import { x, SystemProps } from '@xstyled/emotion'; +import { css } from '@emotion/css'; +import { Group, GroupProps } from '@/components'; + +interface PageFormProps extends SystemProps { + children: React.ReactNode; +} + +/** + * + * @returns {React.ReactNode} + */ +export const PageForm = ({ children, ...props }: PageFormProps) => { + return ( + + {children} + + ); +}; +PageForm.displayName = 'PageFormBody'; + +/** + * + * @returns {React.ReactNode} + */ +const PageFormBody: FC<{ children: React.ReactNode } & SystemProps> = ({ + children, +}) => { + return ( + + {children}{' '} + + ); +}; +PageFormBody.displayName = 'PageFormBody'; + +/** + * + * @returns {React.ReactNode} + */ +const PageFormFooter: FC<{ children: React.ReactNode } & SystemProps> = ({ children }) => { + return {children} ; +}; + +PageFormFooter.displayName = 'PageFormFooter'; + +const footerActionsStyle = ` + width: 100%; + background: #fff; + padding: 14px 18px; + border-top: 1px solid rgb(210, 221, 226); + box-shadow: 0px -1px 4px 0px rgba(0, 0, 0, 0.05); + + .bp4-button-group{ + .bp4-button{ + &:not(:last-child), + &.bp4-popover-wrapper:not(:last-child) { + border-right: 1px solid rgba(92, 112, 127, 0.3); + margin-right: 0; + + &.bp4-intent-primary{ + border-right: 1px solid rgba(255, 255, 255, 0.3); + } + } + } + } +`; + +const PageFormFooterActions: FC = ({ + children, + className, + ...restProps +}) => { + return ( + + {children} + + ); +}; +PageFormFooterActions.displayName = 'PageFormFooterActions'; + +PageForm.Body = PageFormBody; +PageForm.Footer = PageFormFooter; +PageForm.FooterActions = PageFormFooterActions; diff --git a/packages/webapp/src/components/PageForm/index.ts b/packages/webapp/src/components/PageForm/index.ts index 56a507b60..90dc6f8e7 100644 --- a/packages/webapp/src/components/PageForm/index.ts +++ b/packages/webapp/src/components/PageForm/index.ts @@ -2,3 +2,4 @@ export * from './FormTopbar'; export * from './FormTopbarSelectInputs'; export * from './PageFormBigNumber'; +export * from './PageForm'; \ No newline at end of file diff --git a/packages/webapp/src/components/Paper/Paper.tsx b/packages/webapp/src/components/Paper/Paper.tsx index e8fe82bc5..91c9c7d2d 100644 --- a/packages/webapp/src/components/Paper/Paper.tsx +++ b/packages/webapp/src/components/Paper/Paper.tsx @@ -1,13 +1,20 @@ -// @ts-nocheck import React from 'react'; -import styled from 'styled-components'; +import { x, SystemProps } from '@xstyled/emotion'; -export function Paper({ children, className }) { - return {children}; +interface PaperProps extends SystemProps { + children: React.ReactNode; } -const PaperRoot = styled.div` - border: 1px solid #d2dce2; - background: #fff; - padding: 10px; -`; +export const Paper = ({ children, ...props }: PaperProps) => { + return ( + + {children} + + ); +}; +Paper.displayName = 'Paper'; diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.tsx index 85bd40d93..9fa8baec9 100644 --- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.tsx +++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFloatingActions.tsx @@ -12,9 +12,14 @@ import { Menu, MenuItem, } from '@blueprintjs/core'; -import { If, Icon, FormattedMessage as T, Group, FSelect } from '@/components'; -import { CLASSES } from '@/constants/classes'; -import classNames from 'classnames'; +import { + If, + Icon, + FormattedMessage as T, + Group, + FSelect, + PageForm, +} from '@/components'; import { useCreditNoteFormContext } from './CreditNoteFormProvider'; import { BrandingThemeFormGroup, @@ -82,140 +87,141 @@ export default function CreditNoteFloatingActions() { const brandingTemplatesOptions = useCreditNoteFormBrandingTemplatesOptions(); return ( - - {/* ----------- Save And Open ----------- */} - - -