diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index b0317ff7c..ae2d22998 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -27,6 +27,7 @@
"@radix-ui/react-progress": "^1.0.1",
"@radix-ui/react-select": "^1.2.0",
"@radix-ui/react-switch": "^1.0.1",
+ "@radix-ui/react-tabs": "^1.0.2",
"@radix-ui/react-toast": "^1.1.2",
"@reduxjs/toolkit": "^1.8.3",
"@stripe/react-stripe-js": "^1.10.0",
@@ -4271,6 +4272,26 @@
"react-dom": "^16.8 || ^17.0 || ^18.0"
}
},
+ "node_modules/@radix-ui/react-tabs": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.2.tgz",
+ "integrity": "sha512-gOUwh+HbjCuL0UCo8kZ+kdUEG8QtpdO4sMQduJ34ZEz0r4922g9REOBM+vIsfwtGxSug4Yb1msJMJYN2Bk8TpQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-direction": "1.0.0",
+ "@radix-ui/react-id": "1.0.0",
+ "@radix-ui/react-presence": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.1",
+ "@radix-ui/react-roving-focus": "1.0.2",
+ "@radix-ui/react-use-controllable-state": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
"node_modules/@radix-ui/react-toast": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.2.tgz",
@@ -25552,6 +25573,22 @@
"@radix-ui/react-use-size": "1.0.0"
}
},
+ "@radix-ui/react-tabs": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.2.tgz",
+ "integrity": "sha512-gOUwh+HbjCuL0UCo8kZ+kdUEG8QtpdO4sMQduJ34ZEz0r4922g9REOBM+vIsfwtGxSug4Yb1msJMJYN2Bk8TpQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-direction": "1.0.0",
+ "@radix-ui/react-id": "1.0.0",
+ "@radix-ui/react-presence": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.1",
+ "@radix-ui/react-roving-focus": "1.0.2",
+ "@radix-ui/react-use-controllable-state": "1.0.0"
+ }
+ },
"@radix-ui/react-toast": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.2.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 4e2e3e585..28f45a5d6 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -34,6 +34,7 @@
"@radix-ui/react-progress": "^1.0.1",
"@radix-ui/react-select": "^1.2.0",
"@radix-ui/react-switch": "^1.0.1",
+ "@radix-ui/react-tabs": "^1.0.2",
"@radix-ui/react-toast": "^1.1.2",
"@reduxjs/toolkit": "^1.8.3",
"@stripe/react-stripe-js": "^1.10.0",
diff --git a/frontend/public/images/dragon-book.svg b/frontend/public/images/dragon-book.svg
new file mode 100644
index 000000000..31f51eb8d
--- /dev/null
+++ b/frontend/public/images/dragon-book.svg
@@ -0,0 +1,235 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/components/basic/dialog/AddUserDialog.tsx b/frontend/src/components/basic/dialog/AddUserDialog.tsx
index 100ed3025..68ce24696 100644
--- a/frontend/src/components/basic/dialog/AddUserDialog.tsx
+++ b/frontend/src/components/basic/dialog/AddUserDialog.tsx
@@ -1,7 +1,5 @@
import { Fragment } from 'react';
-import { useRouter } from 'next/router';
import { Dialog, Transition } from '@headlessui/react';
-import { plans } from 'public/data/frequentConstants';
import Button from '../buttons/Button';
import InputField from '../InputField';
@@ -12,7 +10,6 @@ type Props = {
submitModal: (email: string) => void;
email: string;
setEmail: (email: string) => void;
- currentPlan: string;
orgName: string;
};
@@ -22,13 +19,11 @@ const AddUserDialog = ({
submitModal,
email,
setEmail,
- currentPlan,
orgName,
}: Props) => {
const submit = () => {
submitModal(email);
};
- const router = useRouter();
return (
@@ -81,28 +76,6 @@ const AddUserDialog = ({
isRequired
/>
- {currentPlan === plans.starter && (
-
-
- router.push(`/settings/billing/${ router.query.id}`)
- }
- >
- You can add up to 5 members on the Starter plan.
-
-
- router.push(`/settings/billing/${ router.query.id}`)
- }
- >
- Upgrade now.
-
-
- )}
void) {
+ // Get the text field
+ const copyText = document.getElementById(id) as HTMLInputElement;
+
+ // Select the text field
+ copyText.select();
+ copyText.setSelectionRange(0, 99999); // For mobile devices
+
+ // Copy the text inside the text field
+ navigator.clipboard.writeText(copyText.value);
+
+ setState(true);
+ setTimeout(() => setState(false), 2000);
+ // Alert the copied text
+ // alert("Copied the text: " + copyText.value);
+}
+
+const CodeItem = ({isCopied, setIsCopied, textExplanation, code, id}: {isCopied: boolean, setIsCopied: (value: boolean) => void, textExplanation: string, code: string, id: string}) => {
+ return <>
+
+ {textExplanation}
+
+
+
+ copyToClipboard(id, setIsCopied)}
+ className='h-full pl-3.5 pr-2 text-bunker-300 hover:text-primary-200 duration-200'
+ >
+ {isCopied ? (
+
+ ) : (
+
+ )}
+
+
+ >
+}
+
+export const TabsObject = () => {
+ const [downloadCodeCopied, setDownloadCodeCopied] = useState(false);
+ const [downloadCode2Copied, setDownloadCode2Copied] = useState(false);
+ const [loginCodeCopied, setLoginCodeCopied] = useState(false);
+ const [initCodeCopied, setInitCodeCopied] = useState(false);
+ const [runCodeCopied, setRunCodeCopied] = useState(false);
+
+ return
+
+
+ MacOS
+
+
+ Windows
+
+
+ Arch Linux
+
+
+ Other Platforms
+
+
+
+
+
+
+
+ You can find example of start commands for different frameworks
+ here
+ .
+
+
+
+
+
+ copyToClipboard("downloadCodeW2", setDownloadCode2Copied)}
+ className='h-full pl-3.5 pr-2 text-bunker-300 hover:text-primary-200 duration-200'
+ >
+ {downloadCode2Copied ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+ You can find example of start commands for different frameworks
+ here
+ .
+
+
+
+
+
+
+ You can find example of start commands for different frameworks
+ here
+ .
+
+
+};
\ No newline at end of file
diff --git a/frontend/src/components/v2/Tabs/index.tsx b/frontend/src/components/v2/Tabs/index.tsx
new file mode 100644
index 000000000..57f78a430
--- /dev/null
+++ b/frontend/src/components/v2/Tabs/index.tsx
@@ -0,0 +1,4 @@
+export type {
+ TabsProps
+} from './Tabs';
+export { TabsObject } from './Tabs';
diff --git a/frontend/src/pages/home/[id].tsx b/frontend/src/pages/home/[id].tsx
index 44427084e..84862f91d 100644
--- a/frontend/src/pages/home/[id].tsx
+++ b/frontend/src/pages/home/[id].tsx
@@ -1,5 +1,6 @@
import { useEffect, useState } from 'react';
import Head from 'next/head';
+import Image from 'next/image';
import { useRouter } from 'next/router';
import { IconProp } from '@fortawesome/fontawesome-svg-core';
import { faSlack } from '@fortawesome/free-brands-svg-icons';
@@ -16,6 +17,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import onboardingCheck from '@app/components/utilities/checks/OnboardingCheck';
import { getTranslatedServerSideProps } from '@app/components/utilities/withTranslateProps';
+import { TabsObject } from '@app/components/v2/Tabs';
import registerUserAction from '../api/userActions/registerUserAction';
@@ -43,7 +45,7 @@ const learningItem = ({
{complete && (
-
-
+
+
)}
@@ -72,11 +74,11 @@ const learningItem = ({
{complete ? 'Complete!' : `About ${time}`}
- {complete &&
}
+ {complete &&
}
);
@@ -101,7 +103,7 @@ const learningItem = ({
)}
@@ -110,10 +112,10 @@ const learningItem = ({
{subText}
-
+
{complete ? 'Complete!' : `About ${time}`}
- {complete &&
}
+ {complete &&
}
);
};
@@ -142,16 +144,17 @@ export default function Home() {
}, []);
return (
-
+
Infisical Guide
-
-
Your quick start guide
-
+
+
Your quick start guide
+
Click on the items below and follow the instructions.
+
{learningItem({
text: 'Get to know Infisical',
subText: '',
@@ -170,14 +173,29 @@ export default function Home() {
userAction: 'first_time_secrets_pushed',
link: `/dashboard/${router.query.id}`
})}
- {learningItem({
- text: 'Inject secrets locally',
- subText: 'Replace .env files with a more secure and efficient alternative.',
- complete: false,
- icon: faNetworkWired,
- time: '8 min',
- link: 'https://infisical.com/docs/getting-started/quickstart'
- })}
+
+
+
+
+ {false && (
+
+
+
+ )}
+
+
Inject secrets locally
+
Replace .env files with a more secure and efficient alternative.
+
+
+
+ About 2 min
+
+
+
+ {false &&
}
+
{learningItem({
text: 'Integrate Infisical with your infrastructure',
subText: 'Only a few integrations are currently available. Many more coming soon!',
diff --git a/frontend/src/pages/requestnewinvite.tsx b/frontend/src/pages/requestnewinvite.tsx
index be345d7e7..40f4b0c27 100644
--- a/frontend/src/pages/requestnewinvite.tsx
+++ b/frontend/src/pages/requestnewinvite.tsx
@@ -20,7 +20,7 @@ export default function RequestNewInvite() {
doesn't work, please reach out to us at support@infisical.com
-
+
diff --git a/frontend/src/pages/settings/org/[id].tsx b/frontend/src/pages/settings/org/[id].tsx
index e0d970c91..562c45c9b 100644
--- a/frontend/src/pages/settings/org/[id].tsx
+++ b/frontend/src/pages/settings/org/[id].tsx
@@ -222,7 +222,6 @@ export default function SettingsOrg() {
submitModal={submitAddUserModal}
email={emailUser}
setEmail={setEmailUser}
- currentPlan={currentPlan}
orgName={orgName}
/>