diff --git a/assets/images/simple-illustrations/simple-illustration__hotdogstand.svg b/assets/images/simple-illustrations/simple-illustration__hotdogstand.svg
new file mode 100644
index 000000000000..732c16a75a2b
--- /dev/null
+++ b/assets/images/simple-illustrations/simple-illustration__hotdogstand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/DatePicker/CalendarPicker/index.js b/src/components/DatePicker/CalendarPicker/index.js
index a404c4746397..bbdeda6ef84f 100644
--- a/src/components/DatePicker/CalendarPicker/index.js
+++ b/src/components/DatePicker/CalendarPicker/index.js
@@ -236,7 +236,7 @@ class CalendarPicker extends React.PureComponent {
diff --git a/src/components/Icon/Illustrations.ts b/src/components/Icon/Illustrations.ts
index 440350895826..c8a14c7aba03 100644
--- a/src/components/Icon/Illustrations.ts
+++ b/src/components/Icon/Illustrations.ts
@@ -35,6 +35,7 @@ import ConciergeNew from '@assets/images/simple-illustrations/simple-illustratio
import CreditCardsNew from '@assets/images/simple-illustrations/simple-illustration__credit-cards.svg';
import EmailAddress from '@assets/images/simple-illustrations/simple-illustration__email-address.svg';
import HandEarth from '@assets/images/simple-illustrations/simple-illustration__handearth.svg';
+import HotDogStand from '@assets/images/simple-illustrations/simple-illustration__hotdogstand.svg';
import InvoiceBlue from '@assets/images/simple-illustrations/simple-illustration__invoice.svg';
import LockOpen from '@assets/images/simple-illustrations/simple-illustration__lockopen.svg';
import Luggage from '@assets/images/simple-illustrations/simple-illustration__luggage.svg';
@@ -60,6 +61,7 @@ export {
ConciergeExclamation,
CreditCardsBlue,
EmailAddress,
+ HotDogStand,
InvoiceOrange,
JewelBoxBlue,
JewelBoxGreen,
diff --git a/src/components/MenuItem.tsx b/src/components/MenuItem.tsx
index c2cc4abce6c5..96e6ea0bbc44 100644
--- a/src/components/MenuItem.tsx
+++ b/src/components/MenuItem.tsx
@@ -531,7 +531,7 @@ function MenuItem(
{badgeText && (
)}
{/* Since subtitle can be of type number, we should allow 0 to be shown */}
diff --git a/src/components/Section/IconSection.js b/src/components/Section/IconSection.js
new file mode 100644
index 000000000000..21dc458f2c76
--- /dev/null
+++ b/src/components/Section/IconSection.js
@@ -0,0 +1,40 @@
+import PropTypes from 'prop-types';
+import React from 'react';
+import {View} from 'react-native';
+import Icon from '@components/Icon';
+import useThemeStyles from '@hooks/useThemeStyles';
+
+const iconSectionPropTypes = {
+ icon: PropTypes.icon,
+ IconComponent: PropTypes.IconComponent,
+ iconContainerStyles: PropTypes.iconContainerStyles,
+};
+
+const defaultIconSectionPropTypes = {
+ icon: null,
+ IconComponent: null,
+ iconContainerStyles: [],
+};
+
+function IconSection({icon, IconComponent, iconContainerStyles}) {
+ const styles = useThemeStyles();
+
+ return (
+
+ {Boolean(icon) && (
+
+ )}
+ {Boolean(IconComponent) && }
+
+ );
+}
+
+IconSection.displayName = 'IconSection';
+IconSection.propTypes = iconSectionPropTypes;
+IconSection.defaultProps = defaultIconSectionPropTypes;
+
+export default IconSection;
diff --git a/src/components/Section.js b/src/components/Section/index.js
similarity index 61%
rename from src/components/Section.js
rename to src/components/Section/index.js
index a59476fb0c05..cadadfe94b39 100644
--- a/src/components/Section.js
+++ b/src/components/Section/index.js
@@ -1,11 +1,16 @@
import PropTypes from 'prop-types';
import React from 'react';
import {View} from 'react-native';
+import MenuItemList from '@components/MenuItemList';
+import menuItemPropTypes from '@components/menuItemPropTypes';
+import Text from '@components/Text';
import useThemeStyles from '@hooks/useThemeStyles';
-import Icon from './Icon';
-import MenuItemList from './MenuItemList';
-import menuItemPropTypes from './menuItemPropTypes';
-import Text from './Text';
+import IconSection from './IconSection';
+
+const CARD_LAYOUT = {
+ ICON_ON_TOP: 'iconOnTop',
+ ICON_ON_RIGHT: 'iconOnRight',
+};
const propTypes = {
/** An array of props that are pass to individual MenuItem components */
@@ -23,6 +28,10 @@ const propTypes = {
/** Icon component */
IconComponent: PropTypes.func,
+ /** Card layout that affects icon positioning, margins, sizes. */
+ // eslint-disable-next-line rulesdir/prefer-underscore-method
+ cardLayout: PropTypes.oneOf(Object.values(CARD_LAYOUT)),
+
/** Contents to display inside the section */
children: PropTypes.node,
@@ -38,6 +47,9 @@ const propTypes = {
// eslint-disable-next-line react/forbid-prop-types
subtitleStyles: PropTypes.arrayOf(PropTypes.object),
+ /** Whether the subtitle should have a muted style */
+ subtitleMuted: PropTypes.bool,
+
/** Customize the Section container */
// eslint-disable-next-line react/forbid-prop-types
childrenStyles: PropTypes.arrayOf(PropTypes.object),
@@ -52,38 +64,45 @@ const defaultProps = {
children: null,
icon: null,
IconComponent: null,
+ cardLayout: CARD_LAYOUT.ICON_ON_RIGHT,
containerStyles: [],
iconContainerStyles: [],
titleStyles: [],
subtitleStyles: [],
+ subtitleMuted: false,
childrenStyles: [],
subtitle: null,
};
-function Section({children, childrenStyles, containerStyles, icon, IconComponent, iconContainerStyles, menuItems, subtitle, subtitleStyles, title, titleStyles}) {
+function Section({children, childrenStyles, containerStyles, icon, IconComponent, cardLayout, iconContainerStyles, menuItems, subtitle, subtitleStyles, subtitleMuted, title, titleStyles}) {
const styles = useThemeStyles();
+
return (
<>
-
+ {cardLayout === CARD_LAYOUT.ICON_ON_TOP && (
+
+ )}
+
{title}
-
- {Boolean(icon) && (
-
- )}
- {Boolean(IconComponent) && }
-
+ {cardLayout === CARD_LAYOUT.ICON_ON_RIGHT && (
+
+ )}
{Boolean(subtitle) && (
-
- {subtitle}
+
+ {subtitle}
)}
@@ -94,9 +113,9 @@ function Section({children, childrenStyles, containerStyles, icon, IconComponent
>
);
}
-
Section.displayName = 'Section';
Section.propTypes = propTypes;
Section.defaultProps = defaultProps;
+export {CARD_LAYOUT};
export default Section;
diff --git a/src/languages/en.ts b/src/languages/en.ts
index fec747ae253b..71d27e341cac 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -1489,8 +1489,9 @@ export default {
mustBeOnlineToViewMembers: 'You must be online in order to view members of this workspace.',
},
emptyWorkspace: {
- title: 'Create a new workspace',
- subtitle: "Workspaces are where you'll chat with your team, reimburse expenses, issue cards, send invoices, pay bills, and more — all in one place.",
+ title: 'Create a workspace',
+ subtitle: 'Manage business expenses, issue cards, send invoices, and more.',
+ createAWorkspaceCTA: 'Get Started',
features: {
trackAndCollect: 'Track and collect receipts',
companyCards: 'Company credit cards',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 73ee616d57bb..85223c559f81 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -1512,8 +1512,9 @@ export default {
mustBeOnlineToViewMembers: 'Debes estar en línea para poder ver los miembros de este espacio de trabajo.',
},
emptyWorkspace: {
- title: 'Crear un nuevo espacio de trabajo',
- subtitle: 'En los espacios de trabajo es donde puedes chatear con tu equipo, reembolsar gastos, emitir tarjetas, enviar y pagar facturas y mas — todo en un mismo lugar',
+ title: 'Crea un espacio de trabajo',
+ subtitle: 'Administra gastos de empresa, emite tarjetas, envía facturas y mucho más.',
+ createAWorkspaceCTA: 'Comenzar',
features: {
trackAndCollect: 'Organiza recibos',
companyCards: 'Tarjetas de crédito corporativas',
diff --git a/src/pages/workspace/card/WorkspaceCardCreateAWorkspace.tsx b/src/pages/workspace/card/WorkspaceCardCreateAWorkspace.tsx
new file mode 100644
index 000000000000..9e45bd143e7e
--- /dev/null
+++ b/src/pages/workspace/card/WorkspaceCardCreateAWorkspace.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import Button from '@components/Button';
+import * as Illustrations from '@components/Icon/Illustrations';
+import Section, {CARD_LAYOUT} from '@components/Section';
+import useLocalize from '@hooks/useLocalize';
+import useThemeStyles from '@hooks/useThemeStyles';
+
+function WorkspaceCardCreateAWorkspace() {
+ const styles = useThemeStyles();
+ const {translate} = useLocalize();
+
+ return (
+
+ );
+}
+
+WorkspaceCardCreateAWorkspace.displayName = 'WorkspaceCardNoVBAView';
+
+export default WorkspaceCardCreateAWorkspace;
diff --git a/src/styles/index.ts b/src/styles/index.ts
index aececf93beb9..074e70622dac 100644
--- a/src/styles/index.ts
+++ b/src/styles/index.ts
@@ -938,10 +938,14 @@ const styles = (theme: ThemeColors) =>
overflow: 'hidden',
},
- calendarDayContainerSelected: {
+ buttonDefaultBG: {
backgroundColor: theme.buttonDefaultBG,
},
+ buttonHoveredBG: {
+ backgroundColor: theme.buttonHoveredBG,
+ },
+
autoGrowHeightInputContainer: (textInputHeight: number, minHeight: number, maxHeight: number) =>
({
height: lodashClamp(textInputHeight, minHeight, maxHeight),
@@ -1952,10 +1956,6 @@ const styles = (theme: ThemeColors) =>
alignSelf: 'flex-end',
},
- hoveredButton: {
- backgroundColor: theme.buttonHoveredBG,
- },
-
composerSizeButton: {
alignSelf: 'center',
height: 32,