+const CodeSection = ({
+ className,
+ title,
+ description,
+ button,
+ containerClassName,
+ textContentClassName,
+ code,
+ codePosition,
+ codeClassName,
+ isPriorityImageLoading,
+ btnStyle,
+}) => (
+
+
+
(
alt=""
width={482}
height={206}
+ loading={isPriorityImageLoading ? 'eager' : 'lazy'}
/>
(
(
{button && (
-
- {description}
-
+
{leftItem.code && (
(
@@ -29,16 +28,12 @@ const TextWithPicture = ({
)}
>
)}
-
{image}
+
{image}
{button && theme === 'imageFullWidth' && (
+ }
+ imageClassName="relative w-full h-full !overflow-visible"
+ button={{
+ label: 'Complete Control',
+ link: 'https://docs.novu.co/framework/overview?utm_campaign?ws_framework',
+ }}
+ theme="imageRight"
+ />
+
+
+
+ }
+ imageClassName="relative w-full h-full !overflow-visible"
+ button={{
+ label: 'Do More With Controls',
+ link: 'https://docs.novu.co/framework/controls?utm_campaign?ws_framework',
+ }}
+ />
+
+
+
+ }
+ imageClassName="relative w-full h-full !overflow-visible"
+ button={{
+ label: 'Reuse my content',
+ link: 'https://docs.novu.co/framework/content/react-email',
+ }}
+ theme="imageRight"
+ />
+
+
+
+ }
+ imageClassName="relative w-full h-full !overflow-visible"
+ button={{
+ label: 'Local Studio',
+ link: 'https://docs.novu.co/framework/studio?utm_campaign=ws_framework',
+ }}
+ />
+
+
+);
+
+export default FrameworkPage;
+
+export const Head = () => {
+ const pageMetadata = {
+ slug: '/framework/',
+ title: 'Complete Control Over Notifications with Novu Framework',
+ description:
+ 'Novu Framework gives developers code-backed workflows, full control, and seamless integration, while empowering non-technical teams to make safe updates.',
+ };
+ return ;
+};
diff --git a/src/styles/global.css b/src/styles/global.css
index 144f1069..21bbfbc9 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -12,6 +12,31 @@
color-scheme: light;
}
+ .code-block-bg {
+ background: linear-gradient(135deg, #16222e, #080c1a 54%, #05050b),
+ radial-gradient(
+ circle at 41.5% 0%,
+ rgba(135, 188, 195, 0.15),
+ #1e2438 49%,
+ rgba(30, 36, 56, 0.5) 100%
+ ),
+ radial-gradient(
+ circle at 22.5% 5.4%,
+ #ffffff,
+ #bee0ff 33.2%,
+ rgba(134, 204, 255, 0.5) 50.5%,
+ rgba(67, 64, 74, 0) 100%
+ );
+ }
+
+ .border-linear {
+ @apply border border-transparent;
+ mask:
+ linear-gradient(#fff 0 0) padding-box,
+ linear-gradient(#fff 0 0);
+ mask-composite: exclude;
+ }
+
.menu-btn:focus-within + .menu,
.menu-btn:has(+ .menu button:focus-visible) + .menu {
visibility: visible;
diff --git a/tailwind.config.js b/tailwind.config.js
index 4593361e..d0bddf0d 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -135,8 +135,16 @@ module.exports = {
'linear-gradient(168.3deg, #1B2137 6.29%, #111522 91.42%), radial-gradient(67.44% 45.73% at 27.61% 0%, rgba(194, 209, 255, 0.09) 0%, rgba(194, 209, 255, 0) 76.65%)',
'code-block-border':
'radial-gradient(83.26% 102.85% at 61.61% -2.85%, #6B7DB3 6.8%, #1A1E2E 65.55%)',
+ 'code-underlay-border':
+ 'radial-gradient(83.26% 102.85% at 61.61% -2.85%, rgba(135, 188, 195, 0.15) 0%, #1E2438 49%, #05050b 100%)',
'testimonials-text':
'linear-gradient(98.67deg, rgba(255, 255, 255, 0.85) 9.63%, rgba(255, 255, 255, 0.6) 113.79%)',
+ 'code-underlay-green':
+ 'linear-gradient(168.3deg, #1B2137 6.29%, #111522 91.42%), radial-gradient(67.44% 45.73% at 27.61% 0%, rgba(194, 209, 255, 0.09) 0%, rgba(194, 209, 255, 0) 76.65%)',
+ 'inside-code-underlay-green':
+ 'radial-gradient(78.44% 46.25% at 27.61% 0%, rgba(194, 229, 255, 0.08) 0%, rgba(194, 240, 255, 0.00) 76.65%), linear-gradient(168deg, rgba(38, 45, 60, 0.45) 6.29%, rgba(38, 40, 60, 0.18) 91.42%)',
+ 'green-code-border':
+ 'radial-gradient(83.26% 102.85% at 61.61% -2.85%, rgba(212, 250, 255, 0.5) 8%, rgba(212, 250, 255, 0.22) 42%, rgba(212, 250, 255, 0.08) 74%, rgba(212, 250, 255, 0.05) 100%)',
'gray-btn':
'linear-gradient(258deg, rgba(176, 166, 191, 0.06) -8.62%, rgba(176, 166, 191, 0.03) 113.79%)',
'white-gray-gradient':