diff --git a/genai-cookbook/.gitignore b/genai-cookbook/.gitignore
index f088e34..0bc7c6a 100644
--- a/genai-cookbook/.gitignore
+++ b/genai-cookbook/.gitignore
@@ -1,7 +1,7 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
-node_modules/
+**/node_modules/
.pnp
.pnp.js
.yarn/install-state.gz
diff --git a/genai-cookbook/apps/cookbook/app/layout.tsx b/genai-cookbook/apps/cookbook/app/layout.tsx
index 371151c..e959f95 100644
--- a/genai-cookbook/apps/cookbook/app/layout.tsx
+++ b/genai-cookbook/apps/cookbook/app/layout.tsx
@@ -1,5 +1,5 @@
import '@mantine/core/styles.css'
-import '@/styles/globals.css'
+import '@/styles/globals.scss'
import type { Metadata } from 'next'
import { MantineProvider } from '@mantine/core'
diff --git a/genai-cookbook/apps/cookbook/components/ThemeToggle.tsx b/genai-cookbook/apps/cookbook/components/ThemeToggle.tsx
index 6226c5c..74b322d 100644
--- a/genai-cookbook/apps/cookbook/components/ThemeToggle.tsx
+++ b/genai-cookbook/apps/cookbook/components/ThemeToggle.tsx
@@ -2,48 +2,24 @@
import { ActionIcon, Tooltip, useMantineColorScheme } from '@mantine/core'
import { IconMoon, IconSun } from '@tabler/icons-react'
-import { useEffect, useState } from 'react'
-
-const STORAGE_KEY = 'color-scheme'
export function ThemeToggle({ stroke }: { stroke: number }): JSX.Element {
- const { colorScheme, setColorScheme } = useMantineColorScheme()
- const [mounted, setMounted] = useState(false)
-
- useEffect(() => {
- setMounted(true)
- }, [])
-
- useEffect(() => {
- const root = document.documentElement
- if (colorScheme === 'dark') {
- root.classList.add('dark')
- } else {
- root.classList.remove('dark')
- }
-
- try {
- localStorage.setItem(STORAGE_KEY, colorScheme)
- } catch {}
- }, [colorScheme])
+ const { setColorScheme, colorScheme } = useMantineColorScheme()
- const toggle = (): void => {
- setColorScheme(colorScheme === 'dark' ? 'light' : 'dark')
+ function toggleColorScheme() {
+ const result = colorScheme === 'dark' ? 'light' : 'dark'
+ return setColorScheme(result)
}
const label = colorScheme === 'dark' ? 'Switch to light' : 'Switch to dark'
- if (!mounted) {
- return (
-
-
-
- )
- }
-
return (
-
+
{colorScheme === 'dark' ? (
) : (
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/acorn b/genai-cookbook/apps/cookbook/node_modules/.bin/acorn
deleted file mode 100755
index cb2e415..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/acorn
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/acorn@8.15.0/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/acorn@8.15.0/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/bin/acorn" "$@"
-else
- exec node "$basedir/../../../../node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/bin/acorn" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/eslint b/genai-cookbook/apps/cookbook/node_modules/.bin/eslint
deleted file mode 100755
index 30bebab..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/eslint
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/eslint@8.57.1/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/eslint@8.57.1/node_modules/eslint/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/eslint@8.57.1/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
-else
- exec node "$basedir/../eslint/bin/eslint.js" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/jiti b/genai-cookbook/apps/cookbook/node_modules/.bin/jiti
deleted file mode 100755
index 51bf0f2..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/jiti
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/jiti@1.21.7/node_modules/jiti/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/jiti@1.21.7/node_modules/jiti/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/jiti@1.21.7/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/jiti@1.21.7/node_modules/jiti/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/jiti@1.21.7/node_modules/jiti/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/jiti@1.21.7/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/jiti@1.21.7/node_modules/jiti/bin/jiti.js" "$@"
-else
- exec node "$basedir/../../../../node_modules/.pnpm/jiti@1.21.7/node_modules/jiti/bin/jiti.js" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/nanoid b/genai-cookbook/apps/cookbook/node_modules/.bin/nanoid
deleted file mode 100755
index 1b793c7..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/nanoid
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.js" "$@"
-else
- exec node "$basedir/../nanoid/bin/nanoid.js" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/next b/genai-cookbook/apps/cookbook/node_modules/.bin/next
deleted file mode 100755
index 7a47f1e..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/next
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../next/dist/bin/next" "$@"
-else
- exec node "$basedir/../next/dist/bin/next" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/openai b/genai-cookbook/apps/cookbook/node_modules/.bin/openai
deleted file mode 100755
index c70c040..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/openai
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../openai/bin/cli" "$@"
-else
- exec node "$basedir/../openai/bin/cli" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/tailwind b/genai-cookbook/apps/cookbook/node_modules/.bin/tailwind
deleted file mode 100755
index ffcacd0..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/tailwind
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/lib/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/lib/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
-else
- exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/tailwindcss b/genai-cookbook/apps/cookbook/node_modules/.bin/tailwindcss
deleted file mode 100755
index ffcacd0..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/tailwindcss
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/lib/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/lib/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/tailwindcss@3.4.18/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
-else
- exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/tsc b/genai-cookbook/apps/cookbook/node_modules/.bin/tsc
deleted file mode 100755
index 88482de..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/tsc
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
-else
- exec node "$basedir/../typescript/bin/tsc" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/.bin/tsserver b/genai-cookbook/apps/cookbook/node_modules/.bin/tsserver
deleted file mode 100755
index 58023e4..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/.bin/tsserver
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
-else
- exec node "$basedir/../typescript/bin/tsserver" "$@"
-fi
diff --git a/genai-cookbook/apps/cookbook/node_modules/@ai-sdk/openai b/genai-cookbook/apps/cookbook/node_modules/@ai-sdk/openai
deleted file mode 120000
index 9b955f6..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@ai-sdk/openai
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@ai-sdk+openai@2.0.44_zod@3.25.76/node_modules/@ai-sdk/openai
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@ai-sdk/react b/genai-cookbook/apps/cookbook/node_modules/@ai-sdk/react
deleted file mode 120000
index f071763..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@ai-sdk/react
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@ai-sdk+react@2.0.60_react@18.3.1_zod@3.25.76/node_modules/@ai-sdk/react
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@mantine/core b/genai-cookbook/apps/cookbook/node_modules/@mantine/core
deleted file mode 120000
index 0c8fe76..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@mantine/core
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@mantine+core@7.17.8_@mantine+hooks@7.17.8_react@18.3.1__@types+react@18.3.26_react-dom_6f3948a0c11e6a4091bd75adea59c67c/node_modules/@mantine/core
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@mantine/dropzone b/genai-cookbook/apps/cookbook/node_modules/@mantine/dropzone
deleted file mode 120000
index 674bd41..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@mantine/dropzone
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@mantine+dropzone@7.17.8_@mantine+core@7.17.8_@mantine+hooks@7.17.8_react@18.3.1__@type_98208ed6c684caf08919e6fce9ce9980/node_modules/@mantine/dropzone
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@mantine/hooks b/genai-cookbook/apps/cookbook/node_modules/@mantine/hooks
deleted file mode 120000
index 4bd43f8..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@mantine/hooks
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@mantine+hooks@7.17.8_react@18.3.1/node_modules/@mantine/hooks
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@modular/recipes b/genai-cookbook/apps/cookbook/node_modules/@modular/recipes
deleted file mode 120000
index 503afb0..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@modular/recipes
+++ /dev/null
@@ -1 +0,0 @@
-../../../../packages/recipes
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@tabler/icons-react b/genai-cookbook/apps/cookbook/node_modules/@tabler/icons-react
deleted file mode 120000
index f032931..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@tabler/icons-react
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@tabler+icons-react@3.35.0_react@18.3.1/node_modules/@tabler/icons-react
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@types/node b/genai-cookbook/apps/cookbook/node_modules/@types/node
deleted file mode 120000
index 7a1c86a..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@types/node
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@types+node@20.19.19/node_modules/@types/node
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@types/react b/genai-cookbook/apps/cookbook/node_modules/@types/react
deleted file mode 120000
index 229e85a..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@types/react
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@types+react@18.3.26/node_modules/@types/react
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@types/react-dom b/genai-cookbook/apps/cookbook/node_modules/@types/react-dom
deleted file mode 120000
index 03155b9..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@types/react-dom
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@types+react-dom@18.3.7_@types+react@18.3.26/node_modules/@types/react-dom
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/@types/react-syntax-highlighter b/genai-cookbook/apps/cookbook/node_modules/@types/react-syntax-highlighter
deleted file mode 120000
index 8617091..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/@types/react-syntax-highlighter
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@types+react-syntax-highlighter@15.5.13/node_modules/@types/react-syntax-highlighter
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/ai b/genai-cookbook/apps/cookbook/node_modules/ai
deleted file mode 120000
index 6eed3c5..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/ai
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/ai@5.0.60_zod@3.25.76/node_modules/ai
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/eslint b/genai-cookbook/apps/cookbook/node_modules/eslint
deleted file mode 120000
index ca8777e..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/eslint
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/eslint-config-next b/genai-cookbook/apps/cookbook/node_modules/eslint-config-next
deleted file mode 120000
index 5e43fcb..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/eslint-config-next
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/eslint-config-next@14.2.31_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-next
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/nanoid b/genai-cookbook/apps/cookbook/node_modules/nanoid
deleted file mode 120000
index 7eb0542..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/nanoid
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/next b/genai-cookbook/apps/cookbook/node_modules/next
deleted file mode 120000
index e74684e..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/next
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/next@14.2.33_@opentelemetry+api@1.9.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/openai b/genai-cookbook/apps/cookbook/node_modules/openai
deleted file mode 120000
index b723b0a..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/openai
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/postcss b/genai-cookbook/apps/cookbook/node_modules/postcss
deleted file mode 120000
index e43057f..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/postcss
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/react b/genai-cookbook/apps/cookbook/node_modules/react
deleted file mode 120000
index b816850..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/react
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/react@18.3.1/node_modules/react
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/react-dom b/genai-cookbook/apps/cookbook/node_modules/react-dom
deleted file mode 120000
index bf3739a..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/react-dom
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/react-syntax-highlighter b/genai-cookbook/apps/cookbook/node_modules/react-syntax-highlighter
deleted file mode 120000
index e85f089..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/react-syntax-highlighter
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/react-syntax-highlighter@15.6.6_react@18.3.1/node_modules/react-syntax-highlighter
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/tailwindcss b/genai-cookbook/apps/cookbook/node_modules/tailwindcss
deleted file mode 120000
index 969f4c9..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/tailwindcss
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/node_modules/typescript b/genai-cookbook/apps/cookbook/node_modules/typescript
deleted file mode 120000
index 949dba4..0000000
--- a/genai-cookbook/apps/cookbook/node_modules/typescript
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript
\ No newline at end of file
diff --git a/genai-cookbook/apps/cookbook/package.json b/genai-cookbook/apps/cookbook/package.json
index 949a6c3..90e3501 100644
--- a/genai-cookbook/apps/cookbook/package.json
+++ b/genai-cookbook/apps/cookbook/package.json
@@ -25,7 +25,8 @@
"react": "^18",
"react-dom": "^18",
"react-syntax-highlighter": "^15.6.6",
- "streamdown": "^1.3.0"
+ "streamdown": "^1.3.0",
+ "sass": "^1.93.2"
},
"devDependencies": {
"@types/node": "^20",
diff --git a/genai-cookbook/apps/cookbook/styles/globals.css b/genai-cookbook/apps/cookbook/styles/globals.scss
similarity index 100%
rename from genai-cookbook/apps/cookbook/styles/globals.css
rename to genai-cookbook/apps/cookbook/styles/globals.scss
diff --git a/genai-cookbook/apps/cookbook/utils/theme.ts b/genai-cookbook/apps/cookbook/utils/theme.ts
index 810c2ef..101220f 100644
--- a/genai-cookbook/apps/cookbook/utils/theme.ts
+++ b/genai-cookbook/apps/cookbook/utils/theme.ts
@@ -1,7 +1,34 @@
import type { MantineThemeOverride } from '@mantine/core'
export const theme: MantineThemeOverride = {
- primaryColor: 'indigo',
+ primaryColor: 'nebula',
+ colors: {
+ nebula: [
+ '#637bff',
+ '#8799ff',
+ '#b5c0f6',
+ '#bcc6f7',
+ '#c4cdf8',
+ '#cbd3f9',
+ '#d3d9fa',
+ '#dadffb',
+ '#e1e6fb',
+ '#e9ecfc',
+ ],
+ twilight: [
+ '#020c13',
+ '#181c1f',
+ '#262c30',
+ '#353d42',
+ '#676d71',
+ '#9a9eaa',
+ '#b3b8c2',
+ '#d4dae4',
+ '#e5e9ef',
+ '#eef0f4',
+ ],
+ },
+ primaryShade: 0,
defaultRadius: 'xs',
fontFamily:
'Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, Apple Color Emoji, Segoe UI Emoji',
diff --git a/genai-cookbook/packages/recipes/node_modules/.bin/nanoid b/genai-cookbook/packages/recipes/node_modules/.bin/nanoid
deleted file mode 100755
index 1b793c7..0000000
--- a/genai-cookbook/packages/recipes/node_modules/.bin/nanoid
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/nanoid@5.1.6/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.js" "$@"
-else
- exec node "$basedir/../nanoid/bin/nanoid.js" "$@"
-fi
diff --git a/genai-cookbook/packages/recipes/node_modules/.bin/openai b/genai-cookbook/packages/recipes/node_modules/.bin/openai
deleted file mode 100755
index c70c040..0000000
--- a/genai-cookbook/packages/recipes/node_modules/.bin/openai
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../openai/bin/cli" "$@"
-else
- exec node "$basedir/../openai/bin/cli" "$@"
-fi
diff --git a/genai-cookbook/packages/recipes/node_modules/.bin/tsc b/genai-cookbook/packages/recipes/node_modules/.bin/tsc
deleted file mode 100755
index 88482de..0000000
--- a/genai-cookbook/packages/recipes/node_modules/.bin/tsc
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
-else
- exec node "$basedir/../typescript/bin/tsc" "$@"
-fi
diff --git a/genai-cookbook/packages/recipes/node_modules/.bin/tsserver b/genai-cookbook/packages/recipes/node_modules/.bin/tsserver
deleted file mode 100755
index 58023e4..0000000
--- a/genai-cookbook/packages/recipes/node_modules/.bin/tsserver
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*)
- if command -v cygpath > /dev/null 2>&1; then
- basedir=`cygpath -w "$basedir"`
- fi
- ;;
-esac
-
-if [ -z "$NODE_PATH" ]; then
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules"
-else
- export NODE_PATH="/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/billw/Developer/max-recipes/genai-cookbook/node_modules/.pnpm/node_modules:$NODE_PATH"
-fi
-if [ -x "$basedir/node" ]; then
- exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
-else
- exec node "$basedir/../typescript/bin/tsserver" "$@"
-fi
diff --git a/genai-cookbook/packages/recipes/node_modules/@ai-sdk/openai b/genai-cookbook/packages/recipes/node_modules/@ai-sdk/openai
deleted file mode 120000
index 9b955f6..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@ai-sdk/openai
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@ai-sdk+openai@2.0.44_zod@3.25.76/node_modules/@ai-sdk/openai
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@ai-sdk/react b/genai-cookbook/packages/recipes/node_modules/@ai-sdk/react
deleted file mode 120000
index f071763..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@ai-sdk/react
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@ai-sdk+react@2.0.60_react@18.3.1_zod@3.25.76/node_modules/@ai-sdk/react
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@mantine/core b/genai-cookbook/packages/recipes/node_modules/@mantine/core
deleted file mode 120000
index 0c8fe76..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@mantine/core
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@mantine+core@7.17.8_@mantine+hooks@7.17.8_react@18.3.1__@types+react@18.3.26_react-dom_6f3948a0c11e6a4091bd75adea59c67c/node_modules/@mantine/core
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@mantine/dropzone b/genai-cookbook/packages/recipes/node_modules/@mantine/dropzone
deleted file mode 120000
index 674bd41..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@mantine/dropzone
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@mantine+dropzone@7.17.8_@mantine+core@7.17.8_@mantine+hooks@7.17.8_react@18.3.1__@type_98208ed6c684caf08919e6fce9ce9980/node_modules/@mantine/dropzone
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@mantine/hooks b/genai-cookbook/packages/recipes/node_modules/@mantine/hooks
deleted file mode 120000
index 4bd43f8..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@mantine/hooks
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@mantine+hooks@7.17.8_react@18.3.1/node_modules/@mantine/hooks
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@tabler/icons-react b/genai-cookbook/packages/recipes/node_modules/@tabler/icons-react
deleted file mode 120000
index f032931..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@tabler/icons-react
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@tabler+icons-react@3.35.0_react@18.3.1/node_modules/@tabler/icons-react
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@types/node b/genai-cookbook/packages/recipes/node_modules/@types/node
deleted file mode 120000
index 7a1c86a..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@types/node
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@types+node@20.19.19/node_modules/@types/node
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@types/react b/genai-cookbook/packages/recipes/node_modules/@types/react
deleted file mode 120000
index 229e85a..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@types/react
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@types+react@18.3.26/node_modules/@types/react
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/@types/react-dom b/genai-cookbook/packages/recipes/node_modules/@types/react-dom
deleted file mode 120000
index 03155b9..0000000
--- a/genai-cookbook/packages/recipes/node_modules/@types/react-dom
+++ /dev/null
@@ -1 +0,0 @@
-../../../../node_modules/.pnpm/@types+react-dom@18.3.7_@types+react@18.3.26/node_modules/@types/react-dom
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/ai b/genai-cookbook/packages/recipes/node_modules/ai
deleted file mode 120000
index 6eed3c5..0000000
--- a/genai-cookbook/packages/recipes/node_modules/ai
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/ai@5.0.60_zod@3.25.76/node_modules/ai
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/nanoid b/genai-cookbook/packages/recipes/node_modules/nanoid
deleted file mode 120000
index 7eb0542..0000000
--- a/genai-cookbook/packages/recipes/node_modules/nanoid
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/nanoid@5.1.6/node_modules/nanoid
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/openai b/genai-cookbook/packages/recipes/node_modules/openai
deleted file mode 120000
index b723b0a..0000000
--- a/genai-cookbook/packages/recipes/node_modules/openai
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/openai@5.23.2_zod@3.25.76/node_modules/openai
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/react b/genai-cookbook/packages/recipes/node_modules/react
deleted file mode 120000
index b816850..0000000
--- a/genai-cookbook/packages/recipes/node_modules/react
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/react@18.3.1/node_modules/react
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/react-dom b/genai-cookbook/packages/recipes/node_modules/react-dom
deleted file mode 120000
index bf3739a..0000000
--- a/genai-cookbook/packages/recipes/node_modules/react-dom
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom
\ No newline at end of file
diff --git a/genai-cookbook/packages/recipes/node_modules/typescript b/genai-cookbook/packages/recipes/node_modules/typescript
deleted file mode 120000
index 949dba4..0000000
--- a/genai-cookbook/packages/recipes/node_modules/typescript
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript
\ No newline at end of file
diff --git a/genai-cookbook/pnpm-lock.yaml b/genai-cookbook/pnpm-lock.yaml
index cbeb8cb..7e31c38 100644
--- a/genai-cookbook/pnpm-lock.yaml
+++ b/genai-cookbook/pnpm-lock.yaml
@@ -46,7 +46,7 @@ importers:
version: 5.1.6
next:
specifier: ^14
- version: 14.2.33(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 14.2.33(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.93.2)
openai:
specifier: ^5.20.2
version: 5.23.2(zod@3.25.76)
@@ -59,6 +59,9 @@ importers:
react-syntax-highlighter:
specifier: ^15.6.6
version: 15.6.6(react@18.3.1)
+ sass:
+ specifier: ^1.93.2
+ version: 1.93.2
streamdown:
specifier: ^1.3.0
version: 1.3.0(@types/react@18.3.26)(react@18.3.1)
@@ -399,6 +402,88 @@ packages:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
+ '@parcel/watcher-android-arm64@2.5.1':
+ resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.5.1':
+ resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
+ engines: {node: '>= 10.0.0'}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -950,6 +1035,10 @@ packages:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
@@ -1221,6 +1310,11 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
+ detect-libc@1.0.3:
+ resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
@@ -1674,6 +1768,9 @@ packages:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
+ immutable@5.1.4:
+ resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==}
+
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
@@ -2184,6 +2281,9 @@ packages:
sass:
optional: true
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
@@ -2569,6 +2669,10 @@ packages:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
@@ -2665,6 +2769,11 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ sass@1.93.2:
+ resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
scheduler@0.23.2:
resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
@@ -3377,6 +3486,67 @@ snapshots:
'@opentelemetry/api@1.9.0': {}
+ '@parcel/watcher-android-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher@2.5.1':
+ dependencies:
+ detect-libc: 1.0.3
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ node-addon-api: 7.1.1
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.1
+ '@parcel/watcher-darwin-arm64': 2.5.1
+ '@parcel/watcher-darwin-x64': 2.5.1
+ '@parcel/watcher-freebsd-x64': 2.5.1
+ '@parcel/watcher-linux-arm-glibc': 2.5.1
+ '@parcel/watcher-linux-arm-musl': 2.5.1
+ '@parcel/watcher-linux-arm64-glibc': 2.5.1
+ '@parcel/watcher-linux-arm64-musl': 2.5.1
+ '@parcel/watcher-linux-x64-glibc': 2.5.1
+ '@parcel/watcher-linux-x64-musl': 2.5.1
+ '@parcel/watcher-win32-arm64': 2.5.1
+ '@parcel/watcher-win32-ia32': 2.5.1
+ '@parcel/watcher-win32-x64': 2.5.1
+ optional: true
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -3983,6 +4153,10 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
client-only@0.0.1: {}
clsx@2.1.1: {}
@@ -4265,6 +4439,9 @@ snapshots:
dequal@2.0.3: {}
+ detect-libc@1.0.3:
+ optional: true
+
detect-node-es@1.1.0: {}
devlop@1.1.0:
@@ -4449,7 +4626,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
@@ -4471,7 +4648,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1))(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -4947,6 +5124,8 @@ snapshots:
ignore@7.0.5: {}
+ immutable@5.1.4: {}
+
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
@@ -5678,7 +5857,7 @@ snapshots:
natural-compare@1.4.0: {}
- next@14.2.33(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@14.2.33(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.93.2):
dependencies:
'@next/env': 14.2.33
'@swc/helpers': 0.5.5
@@ -5700,10 +5879,14 @@ snapshots:
'@next/swc-win32-ia32-msvc': 14.2.33
'@next/swc-win32-x64-msvc': 14.2.33
'@opentelemetry/api': 1.9.0
+ sass: 1.93.2
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
+ node-addon-api@7.1.1:
+ optional: true
+
normalize-path@3.0.0: {}
object-assign@4.1.1: {}
@@ -6037,6 +6220,8 @@ snapshots:
dependencies:
picomatch: 2.3.1
+ readdirp@4.1.2: {}
+
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
@@ -6192,6 +6377,14 @@ snapshots:
safer-buffer@2.1.2: {}
+ sass@1.93.2:
+ dependencies:
+ chokidar: 4.0.3
+ immutable: 5.1.4
+ source-map-js: 1.2.1
+ optionalDependencies:
+ '@parcel/watcher': 2.5.1
+
scheduler@0.23.2:
dependencies:
loose-envify: 1.4.0