diff --git a/docs/css/styles.css b/docs/css/styles.css index dfd1d02..ed5ea45 100644 --- a/docs/css/styles.css +++ b/docs/css/styles.css @@ -13,7 +13,8 @@ @theme { --font-sans: 'Inter'; --font-mono: 'JetBrains Mono'; - } -/* @import "./themes/claude.css"; */ +@import "./themes/claude.css"; +@import "./themes/doom-64.css"; +@import "./themes/supabase.css"; \ No newline at end of file diff --git a/docs/css/themes/claude.css b/docs/css/themes/claude.css index 0be9307..fbb6019 100644 --- a/docs/css/themes/claude.css +++ b/docs/css/themes/claude.css @@ -1,146 +1,95 @@ -:root { - --background: oklch(0.98 0.01 95.10); - --foreground: oklch(0.34 0.03 95.72); - --card: oklch(0.98 0.01 95.10); - --card-foreground: oklch(0.19 0.00 106.59); - --popover: oklch(1.00 0 0); - --popover-foreground: oklch(0.27 0.02 98.94); - --primary: oklch(0.62 0.14 39.04); - --primary-foreground: oklch(1.00 0 0); - --secondary: oklch(0.92 0.01 92.99); - --secondary-foreground: oklch(0.43 0.02 98.60); - --muted: oklch(0.93 0.02 90.24); - --muted-foreground: oklch(0.61 0.01 97.42); - --accent: oklch(0.92 0.01 92.99); - --accent-foreground: oklch(0.27 0.02 98.94); - --destructive: oklch(0.19 0.00 106.59); - --destructive-foreground: oklch(1.00 0 0); - --border: oklch(0.88 0.01 97.36); - --input: oklch(0.76 0.02 98.35); - --ring: oklch(0.59 0.17 253.06); - --chart-1: oklch(0.56 0.13 43.00); - --chart-2: oklch(0.69 0.16 290.41); - --chart-3: oklch(0.88 0.03 93.13); - --chart-4: oklch(0.88 0.04 298.18); - --chart-5: oklch(0.56 0.13 42.06); - --sidebar: oklch(0.97 0.01 98.88); - --sidebar-foreground: oklch(0.36 0.01 106.65); - --sidebar-primary: oklch(0.62 0.14 39.04); - --sidebar-primary-foreground: oklch(0.99 0 0); - --sidebar-accent: oklch(0.92 0.01 92.99); - --sidebar-accent-foreground: oklch(0.33 0 0); - --sidebar-border: oklch(0.94 0 0); - --sidebar-ring: oklch(0.77 0 0); - --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --radius: 0.5rem; - --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); - --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); - --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); - --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); -} +.theme-claude { + &:root { + --background: oklch(0.98 0.01 95.10); + --foreground: oklch(0.34 0.03 95.72); + --card: oklch(0.98 0.01 95.10); + --card-foreground: oklch(0.19 0.00 106.59); + --popover: oklch(1.00 0 0); + --popover-foreground: oklch(0.27 0.02 98.94); + --primary: oklch(0.62 0.14 39.04); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.92 0.01 92.99); + --secondary-foreground: oklch(0.43 0.02 98.60); + --muted: oklch(0.93 0.02 90.24); + --muted-foreground: oklch(0.61 0.01 97.42); + --accent: oklch(0.92 0.01 92.99); + --accent-foreground: oklch(0.27 0.02 98.94); + --destructive: oklch(0.19 0.00 106.59); + --destructive-foreground: oklch(1.00 0 0); + --border: oklch(0.88 0.01 97.36); + --input: oklch(0.76 0.02 98.35); + --ring: oklch(0.59 0.17 253.06); + --chart-1: oklch(0.56 0.13 43.00); + --chart-2: oklch(0.69 0.16 290.41); + --chart-3: oklch(0.88 0.03 93.13); + --chart-4: oklch(0.88 0.04 298.18); + --chart-5: oklch(0.56 0.13 42.06); + --sidebar: oklch(0.97 0.01 98.88); + --sidebar-foreground: oklch(0.36 0.01 106.65); + --sidebar-primary: oklch(0.62 0.14 39.04); + --sidebar-primary-foreground: oklch(0.99 0 0); + --sidebar-accent: oklch(0.92 0.01 92.99); + --sidebar-accent-foreground: oklch(0.33 0 0); + --sidebar-border: oklch(0.94 0 0); + --sidebar-ring: oklch(0.77 0 0); + --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --radius: 0.5rem; + --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); + --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); + --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); + --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); + } -.dark { - --background: oklch(0.27 0.00 106.64); - --foreground: oklch(0.81 0.01 93.01); - --card: oklch(0.27 0.00 106.64); - --card-foreground: oklch(0.98 0.01 95.10); - --popover: oklch(0.31 0.00 106.60); - --popover-foreground: oklch(0.92 0.00 106.48); - --primary: oklch(0.67 0.13 38.76); - --primary-foreground: oklch(1.00 0 0); - --secondary: oklch(0.98 0.01 95.10); - --secondary-foreground: oklch(0.31 0.00 106.60); - --muted: oklch(0.22 0.00 106.71); - --muted-foreground: oklch(0.77 0.02 99.07); - --accent: oklch(0.21 0.01 95.42); - --accent-foreground: oklch(0.97 0.01 98.88); - --destructive: oklch(0.64 0.21 25.33); - --destructive-foreground: oklch(1.00 0 0); - --border: oklch(0.36 0.01 106.89); - --input: oklch(0.43 0.01 100.22); - --ring: oklch(0.59 0.17 253.06); - --chart-1: oklch(0.56 0.13 43.00); - --chart-2: oklch(0.69 0.16 290.41); - --chart-3: oklch(0.21 0.01 95.42); - --chart-4: oklch(0.31 0.05 289.32); - --chart-5: oklch(0.56 0.13 42.06); - --sidebar: oklch(0.24 0.00 67.71); - --sidebar-foreground: oklch(0.81 0.01 93.01); - --sidebar-primary: oklch(0.33 0 0); - --sidebar-primary-foreground: oklch(0.99 0 0); - --sidebar-accent: oklch(0.17 0.00 106.62); - --sidebar-accent-foreground: oklch(0.81 0.01 93.01); - --sidebar-border: oklch(0.94 0 0); - --sidebar-ring: oklch(0.77 0 0); - --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --radius: 0.5rem; - --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); - --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); - --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); - --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); - --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); - --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); -} - -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --color-card: var(--card); - --color-card-foreground: var(--card-foreground); - --color-popover: var(--popover); - --color-popover-foreground: var(--popover-foreground); - --color-primary: var(--primary); - --color-primary-foreground: var(--primary-foreground); - --color-secondary: var(--secondary); - --color-secondary-foreground: var(--secondary-foreground); - --color-muted: var(--muted); - --color-muted-foreground: var(--muted-foreground); - --color-accent: var(--accent); - --color-accent-foreground: var(--accent-foreground); - --color-destructive: var(--destructive); - --color-destructive-foreground: var(--destructive-foreground); - --color-border: var(--border); - --color-input: var(--input); - --color-ring: var(--ring); - --color-chart-1: var(--chart-1); - --color-chart-2: var(--chart-2); - --color-chart-3: var(--chart-3); - --color-chart-4: var(--chart-4); - --color-chart-5: var(--chart-5); - --color-sidebar: var(--sidebar); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-ring: var(--sidebar-ring); - - --font-sans: var(--font-sans); - --font-mono: var(--font-mono); - --font-serif: var(--font-serif); - - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); - - --shadow-2xs: var(--shadow-2xs); - --shadow-xs: var(--shadow-xs); - --shadow-sm: var(--shadow-sm); - --shadow: var(--shadow); - --shadow-md: var(--shadow-md); - --shadow-lg: var(--shadow-lg); - --shadow-xl: var(--shadow-xl); - --shadow-2xl: var(--shadow-2xl); + &.dark { + --background: oklch(0.27 0.00 106.64); + --foreground: oklch(0.81 0.01 93.01); + --card: oklch(0.27 0.00 106.64); + --card-foreground: oklch(0.98 0.01 95.10); + --popover: oklch(0.31 0.00 106.60); + --popover-foreground: oklch(0.92 0.00 106.48); + --primary: oklch(0.67 0.13 38.76); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.98 0.01 95.10); + --secondary-foreground: oklch(0.31 0.00 106.60); + --muted: oklch(0.22 0.00 106.71); + --muted-foreground: oklch(0.77 0.02 99.07); + --accent: oklch(0.21 0.01 95.42); + --accent-foreground: oklch(0.97 0.01 98.88); + --destructive: oklch(0.64 0.21 25.33); + --destructive-foreground: oklch(1.00 0 0); + --border: oklch(0.36 0.01 106.89); + --input: oklch(0.43 0.01 100.22); + --ring: oklch(0.59 0.17 253.06); + --chart-1: oklch(0.56 0.13 43.00); + --chart-2: oklch(0.69 0.16 290.41); + --chart-3: oklch(0.21 0.01 95.42); + --chart-4: oklch(0.31 0.05 289.32); + --chart-5: oklch(0.56 0.13 42.06); + --sidebar: oklch(0.24 0.00 67.71); + --sidebar-foreground: oklch(0.81 0.01 93.01); + --sidebar-primary: oklch(0.33 0 0); + --sidebar-primary-foreground: oklch(0.99 0 0); + --sidebar-accent: oklch(0.17 0.00 106.62); + --sidebar-accent-foreground: oklch(0.81 0.01 93.01); + --sidebar-border: oklch(0.94 0 0); + --sidebar-ring: oklch(0.77 0 0); + --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --radius: 0.5rem; + --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); + --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); + --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); + --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); + } } \ No newline at end of file diff --git a/docs/css/themes/doom-64.css b/docs/css/themes/doom-64.css new file mode 100644 index 0000000..7f73560 --- /dev/null +++ b/docs/css/themes/doom-64.css @@ -0,0 +1,95 @@ +.theme-doom-64 { + &:root { + --background: oklch(0.85 0 0); + --foreground: oklch(0.24 0 0); + --card: oklch(0.76 0 0); + --card-foreground: oklch(0.24 0 0); + --popover: oklch(0.76 0 0); + --popover-foreground: oklch(0.24 0 0); + --primary: oklch(0.50 0.19 27.48); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.50 0.09 126.19); + --secondary-foreground: oklch(1.00 0 0); + --muted: oklch(0.78 0 0); + --muted-foreground: oklch(0.41 0 0); + --accent: oklch(0.59 0.10 245.74); + --accent-foreground: oklch(1.00 0 0); + --destructive: oklch(0.71 0.20 46.46); + --destructive-foreground: oklch(0 0 0); + --border: oklch(0.43 0 0); + --input: oklch(0.43 0 0); + --ring: oklch(0.50 0.19 27.48); + --chart-1: oklch(0.50 0.19 27.48); + --chart-2: oklch(0.50 0.09 126.19); + --chart-3: oklch(0.59 0.10 245.74); + --chart-4: oklch(0.71 0.20 46.46); + --chart-5: oklch(0.57 0.04 40.43); + --sidebar: oklch(0.76 0 0); + --sidebar-foreground: oklch(0.24 0 0); + --sidebar-primary: oklch(0.50 0.19 27.48); + --sidebar-primary-foreground: oklch(1.00 0 0); + --sidebar-accent: oklch(0.59 0.10 245.74); + --sidebar-accent-foreground: oklch(1.00 0 0); + --sidebar-border: oklch(0.43 0 0); + --sidebar-ring: oklch(0.50 0.19 27.48); + --font-sans: "Oxanium", sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: "Source Code Pro", monospace; + --radius: 0px; + --shadow-2xs: 0px 2px 4px 0px hsl(0 0% 0% / 0.20); + --shadow-xs: 0px 2px 4px 0px hsl(0 0% 0% / 0.20); + --shadow-sm: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 1px 2px -1px hsl(0 0% 0% / 0.40); + --shadow: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 1px 2px -1px hsl(0 0% 0% / 0.40); + --shadow-md: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 2px 4px -1px hsl(0 0% 0% / 0.40); + --shadow-lg: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 4px 6px -1px hsl(0 0% 0% / 0.40); + --shadow-xl: 0px 2px 4px 0px hsl(0 0% 0% / 0.40), 0px 8px 10px -1px hsl(0 0% 0% / 0.40); + --shadow-2xl: 0px 2px 4px 0px hsl(0 0% 0% / 1.00); + } + + &.dark { + --background: oklch(0.22 0 0); + --foreground: oklch(0.91 0 0); + --card: oklch(0.29 0 0); + --card-foreground: oklch(0.91 0 0); + --popover: oklch(0.29 0 0); + --popover-foreground: oklch(0.91 0 0); + --primary: oklch(0.61 0.21 27.03); + --primary-foreground: oklch(1.00 0 0); + --secondary: oklch(0.64 0.15 133.01); + --secondary-foreground: oklch(0 0 0); + --muted: oklch(0.26 0 0); + --muted-foreground: oklch(0.71 0 0); + --accent: oklch(0.75 0.12 244.75); + --accent-foreground: oklch(0 0 0); + --destructive: oklch(0.78 0.17 68.09); + --destructive-foreground: oklch(0 0 0); + --border: oklch(0.41 0 0); + --input: oklch(0.41 0 0); + --ring: oklch(0.61 0.21 27.03); + --chart-1: oklch(0.61 0.21 27.03); + --chart-2: oklch(0.64 0.15 133.01); + --chart-3: oklch(0.75 0.12 244.75); + --chart-4: oklch(0.78 0.17 68.09); + --chart-5: oklch(0.65 0.03 40.80); + --sidebar: oklch(0.19 0 0); + --sidebar-foreground: oklch(0.91 0 0); + --sidebar-primary: oklch(0.61 0.21 27.03); + --sidebar-primary-foreground: oklch(1.00 0 0); + --sidebar-accent: oklch(0.75 0.12 244.75); + --sidebar-accent-foreground: oklch(0 0 0); + --sidebar-border: oklch(0.41 0 0); + --sidebar-ring: oklch(0.61 0.21 27.03); + --font-sans: "Oxanium", sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: "Source Code Pro", monospace; + --radius: 0px; + --shadow-2xs: 0px 2px 5px 0px hsl(0 0% 0% / 0.30); + --shadow-xs: 0px 2px 5px 0px hsl(0 0% 0% / 0.30); + --shadow-sm: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 1px 2px -1px hsl(0 0% 0% / 0.60); + --shadow: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 1px 2px -1px hsl(0 0% 0% / 0.60); + --shadow-md: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 2px 4px -1px hsl(0 0% 0% / 0.60); + --shadow-lg: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 4px 6px -1px hsl(0 0% 0% / 0.60); + --shadow-xl: 0px 2px 5px 0px hsl(0 0% 0% / 0.60), 0px 8px 10px -1px hsl(0 0% 0% / 0.60); + --shadow-2xl: 0px 2px 5px 0px hsl(0 0% 0% / 1.50); + } +} \ No newline at end of file diff --git a/docs/css/themes/supabase.css b/docs/css/themes/supabase.css new file mode 100644 index 0000000..bf45cc8 --- /dev/null +++ b/docs/css/themes/supabase.css @@ -0,0 +1,160 @@ +.theme-supabase { + &:root { + --background: oklch(0.99 0 0); + --foreground: oklch(0.20 0 0); + --card: oklch(0.99 0 0); + --card-foreground: oklch(0.20 0 0); + --popover: oklch(0.99 0 0); + --popover-foreground: oklch(0.44 0 0); + --primary: oklch(0.83 0.13 160.91); + --primary-foreground: oklch(0.26 0.01 166.46); + --secondary: oklch(0.99 0 0); + --secondary-foreground: oklch(0.20 0 0); + --muted: oklch(0.95 0 0); + --muted-foreground: oklch(0.24 0 0); + --accent: oklch(0.95 0 0); + --accent-foreground: oklch(0.24 0 0); + --destructive: oklch(0.55 0.19 32.73); + --destructive-foreground: oklch(0.99 0.00 17.21); + --border: oklch(0.90 0 0); + --input: oklch(0.90 0 0); + --ring: oklch(0.83 0.13 160.91); + --chart-1: oklch(0.83 0.13 160.91); + --chart-2: oklch(0.62 0.19 259.81); + --chart-3: oklch(0.61 0.22 292.72); + --chart-4: oklch(0.77 0.16 70.08); + --chart-5: oklch(0.70 0.15 162.48); + --sidebar: oklch(0.99 0 0); + --sidebar-foreground: oklch(0.55 0 0); + --sidebar-primary: oklch(0.83 0.13 160.91); + --sidebar-primary-foreground: oklch(0.26 0.01 166.46); + --sidebar-accent: oklch(0.95 0 0); + --sidebar-accent-foreground: oklch(0.24 0 0); + --sidebar-border: oklch(0.90 0 0); + --sidebar-ring: oklch(0.83 0.13 160.91); + --font-sans: Outfit, sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: monospace; + --radius: 0.5rem; + --shadow-2xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-sm: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow-md: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 2px 4px -1px hsl(0 0% 0% / 0.17); + --shadow-lg: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 4px 6px -1px hsl(0 0% 0% / 0.17); + --shadow-xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 8px 10px -1px hsl(0 0% 0% / 0.17); + --shadow-2xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.43); + --tracking-normal: 0.025em; + } + + &.dark { + --background: oklch(0.18 0 0); + --foreground: oklch(0.93 0.01 255.51); + --card: oklch(0.20 0 0); + --card-foreground: oklch(0.93 0.01 255.51); + --popover: oklch(0.26 0 0); + --popover-foreground: oklch(0.73 0 0); + --primary: oklch(0.44 0.10 156.76); + --primary-foreground: oklch(0.92 0.01 167.16); + --secondary: oklch(0.26 0 0); + --secondary-foreground: oklch(0.99 0 0); + --muted: oklch(0.24 0 0); + --muted-foreground: oklch(0.71 0 0); + --accent: oklch(0.31 0 0); + --accent-foreground: oklch(0.99 0 0); + --destructive: oklch(0.31 0.09 29.79); + --destructive-foreground: oklch(0.94 0.00 34.31); + --border: oklch(0.28 0 0); + --input: oklch(0.28 0 0); + --ring: oklch(0.80 0.18 151.71); + --chart-1: oklch(0.80 0.18 151.71); + --chart-2: oklch(0.71 0.14 254.62); + --chart-3: oklch(0.71 0.16 293.54); + --chart-4: oklch(0.84 0.16 84.43); + --chart-5: oklch(0.78 0.13 181.91); + --sidebar: oklch(0.18 0 0); + --sidebar-foreground: oklch(0.63 0 0); + --sidebar-primary: oklch(0.44 0.10 156.76); + --sidebar-primary-foreground: oklch(0.92 0.01 167.16); + --sidebar-accent: oklch(0.31 0 0); + --sidebar-accent-foreground: oklch(0.99 0 0); + --sidebar-border: oklch(0.28 0 0); + --sidebar-ring: oklch(0.80 0.18 151.71); + --font-sans: Outfit, sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: monospace; + --radius: 0.5rem; + --shadow-2xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09); + --shadow-sm: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17); + --shadow-md: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 2px 4px -1px hsl(0 0% 0% / 0.17); + --shadow-lg: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 4px 6px -1px hsl(0 0% 0% / 0.17); + --shadow-xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 8px 10px -1px hsl(0 0% 0% / 0.17); + --shadow-2xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.43); + } + + @theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + + --font-sans: var(--font-sans); + --font-mono: var(--font-mono); + --font-serif: var(--font-serif); + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + + --shadow-2xs: var(--shadow-2xs); + --shadow-xs: var(--shadow-xs); + --shadow-sm: var(--shadow-sm); + --shadow: var(--shadow); + --shadow-md: var(--shadow-md); + --shadow-lg: var(--shadow-lg); + --shadow-xl: var(--shadow-xl); + --shadow-2xl: var(--shadow-2xl); + + --tracking-tighter: calc(var(--tracking-normal) - 0.05em); + --tracking-tight: calc(var(--tracking-normal) - 0.025em); + --tracking-normal: var(--tracking-normal); + --tracking-wide: calc(var(--tracking-normal) + 0.025em); + --tracking-wider: calc(var(--tracking-normal) + 0.05em); + --tracking-widest: calc(var(--tracking-normal) + 0.1em); + } + + body { + letter-spacing: var(--tracking-normal); + } +} \ No newline at end of file diff --git a/docs/src/_includes/layouts/base.njk b/docs/src/_includes/layouts/base.njk index 302f625..cab432b 100644 --- a/docs/src/_includes/layouts/base.njk +++ b/docs/src/_includes/layouts/base.njk @@ -4,19 +4,37 @@ {% endset %} + +{% endset %} {{ code_preview("alert-dialog", code_script | prettyHtml ~ code_html | prettyHtml) }} diff --git a/docs/src/components/chart.njk b/docs/src/components/chart.njk index 4381b7a..09b9308 100644 --- a/docs/src/components/chart.njk +++ b/docs/src/components/chart.njk @@ -7,61 +7,79 @@ toc: id: usage ---
-
-
-

Area Chart

-

Showing total visitors for the last 6 months

-
-
- -
- -
+ +
-
-
-

Area Chart - Stacked

-

Showing total visitors for the last 6 months

-
-
- -
- -
+ + -
-
-

Bar Chart - Multiple

-

Showing total visitors for the last 6 months

-
-
- -
- + +
+ +
+
+

Doughnut Chart

+

Showing total visitors for the last 6 months

+
+
+
+
+
1,125
+
Visitors
+
+ +
+
+
@@ -79,21 +97,11 @@ toc:

Bar Chart - Interactive

Showing total visitors for the last 6 months

-
+
-
-
-

Doughnut Chart

-

Showing total visitors for the last 6 months

-
-
- -
-
- @@ -147,10 +155,10 @@ toc: const tooltipHTML = ` `; const parser = new DOMParser(); const doc = parser.parseFromString(tooltipHTML.trim(), 'text/html'); @@ -162,6 +170,7 @@ toc: const externalTooltipHandler = (context) => { const {chart, tooltip} = context; + const chartType = chart.config._config.type; const tooltipEl = getOrCreateTooltip(chart); const titleEl = tooltipEl.querySelector('h3'); const bodyEl = tooltipEl.querySelector('ul'); @@ -178,20 +187,36 @@ toc: const titleLines = tooltip.title || []; const bodyLines = tooltip.body.map(b => b.lines); - if (titleEl) titleEl.textContent = titleLines[0] || ''; - if (titleEl) titleEl.className = titleLines.length > 0 ? 'font-medium' : ''; + if (titleEl) { + if (chartType === 'doughnut') { + titleEl.remove(); + } else { + titleEl.textContent = titleLines[0] || ''; + } + } bodyLines.forEach((body, i) => { const colors = tooltip.labelColors[i]; const parts = body[0].split(': '); - const label = parts[0] || ''; + const label = chartType === 'doughnut' + ? titleLines[0] || '' + : parts[0] || ''; const value = parts[1] || ''; - console.log(colors) + let color; + switch (chartType) { + case 'doughnut': + case 'pie': + case 'bar': + color = colors.backgroundColor; + break; + default: + color = colors.borderColor; + } bodyHtml += `
  • -
    +
    ${label}
    ${value} @@ -250,7 +275,7 @@ toc: let ctx = document.getElementById('chart-area-default'); let data = { - labels: ['January', 'February', 'March', 'April', 'May', 'June'], + labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'], datasets: [{ label: 'Desktop', data: [186, 305, 237, 73, 209, 214], @@ -306,7 +331,7 @@ toc: ctx = document.getElementById('chart-area-stacked'); data = { - labels: ['January', 'February', 'March', 'April', 'May', 'June'], + labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'], datasets: [{ label: 'Desktop', data: [186, 305, 237, 73, 209, 214], @@ -373,7 +398,7 @@ toc: ctx = document.getElementById('chart-bar-multiple'); data = { - labels: ['January', 'February', 'March', 'April', 'May', 'June'], + labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'], datasets: [{ label: 'Desktop', data: [186, 305, 237, 73, 209, 214], @@ -749,28 +774,6 @@ const chartDataDoughnut = [ { browser: "other", visitors: 190, fill: themeColors.chart5 }, ] -const totalVisitors = chartDataDoughnut.reduce((sum, item) => sum + item.visitors, 0); - -// Plugin to draw text in the center -const centerTextPlugin = { - id: 'centerText', - afterDraw: (chart) => { - const { ctx, chartArea } = chart; - if (!chartArea) return; - - const centerX = chartArea.left + (chartArea.right - chartArea.left) / 2; - const centerY = chartArea.top + (chartArea.bottom - chartArea.top) / 2; - - ctx.save(); - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.font = '1.5rem sans-serif'; // Adjust font size as needed - ctx.fillStyle = themeColors.foreground; // Use foreground color - ctx.fillText(totalVisitors.toLocaleString(), centerX, centerY); // Format number if desired - ctx.restore(); - } -}; - // Prepare data for the doughnut chart const doughnutData = { labels: chartDataDoughnut.map(d => d.browser), @@ -790,7 +793,7 @@ const doughnutConfig = { type: 'doughnut', data: doughnutData, options: { - cutout: '80%', // Adjust hole size + cutout: '50%', // Adjust hole size plugins: { legend: { display: false, // Hide default legend @@ -802,8 +805,7 @@ const doughnutConfig = { }, centerText: {} // Keep the custom plugin for center text } - }, - plugins: [centerTextPlugin] // Register the plugin + } }; // Assume you have a canvas with id="chart-doughnut" in your HTML diff --git a/docs/src/installation.njk b/docs/src/installation.njk index 10b61c9..f454e61 100644 --- a/docs/src/installation.njk +++ b/docs/src/installation.njk @@ -1,13 +1,13 @@ --- layout: layouts/page.njk title: Installation -description: How to install Basecoat in your app. +description: How to install and use Basecoat in your app. toc: - label: Installing the CSS id: install-css children: - label: Add Tailwind CSS - id: install-css-tailwind + id: install-css - label: Add Basecoat id: install-css-basecoat - label: Import basecoat in your CSS @@ -22,11 +22,16 @@ toc: {% from "macros/code_block.njk" import code_block %} -

    Installing the CSS

    +

    Install the CSS

    + +
    + {% lucide "circle-alert" %} +

    If you don't want to use npm, you can follow the manual installation instructions.

    +
    1. -

      Add Tailwind CSS

      +

      Add Tailwind CSS

      Basecoat uses Tailwind CSS. You need to install it in your project.

      Follow the Tailwind CSS installation instructions to get started.

      @@ -39,6 +44,9 @@ toc:
      {% set code %}npm install hunvreus/basecoat{% endset %} {{ code_block(code, "bash") }} +
      +

      Alternatively, you can directly copy the basecoat.css file into your project.

      +
    2. Import basecoat in your CSS

      @@ -50,6 +58,7 @@ toc:

      That's it

      You can now use any of the Basecoat classes in your project (e.g. btn, card, input, etc). Read the documentation about each component to get started (e.g. button, card, input, etc).

      +

      Some components (e.g. Select) require Javascript code to work.

    @@ -60,15 +69,40 @@ toc:

    Some components require Javascript code to work.

    The documentation provides Alpine.js code snippets to cover that. Make sure to install Alpine.js if you decide to use them.

    For simple components like Accordion or Slider, you will notice some inline Alpine.js code that you can just copy along with the rest of the HTML.

    -

    For more complex components (Dialog, Dropdown Menu, Popover, Select, Tabs and Toast), we provide a separate <script> code snippet that must be included anywhere before the HTML for the component.

    +

    For more complex components (Dialog, Dropdown Menu, Popover, Select, Tabs and Toast), you have one of 2 options: +

    You are also welcome to write your own Javascript.

    All of the components try and implement WAI-ARIA standards to make them accessible.

    +

    Use the CLI

    + +
    +

    If you're using Nunjucks or Jinja, you can use the CLI to install the CSS and macros for any of the complex components(e.g. Dialog). It will copy the JS and `.html.jinja or .njk macros into your code.

    +

    For example, to add the Dialog component, run:

    + {% set code %}npx basecoatui add dialog{% endset %} + {{ code_block(code, "bash") }} +

    You will be asked to confirm the template engine and destination directory for the Javascript and macros.

    +
    +

    Use Nunjucks or Jinja macros

    For more complex components, you can use Nunjucks or Jinja macros to help you generate the HTML and Javascript code.

    +

    To install them, either copy them directly from the GitHub repository or use the CLI to do the work for you.

    For example, here's how you could use the select() macro to generate the HTML and Javascript code for a Select component:

    {% set code %}{% raw %}{% call select() %}
    @@ -95,7 +129,7 @@ toc:

    Theming

    -

    You can import any shadcn/ui compatible theme. For example:

    +

    You can import any shadcn/ui compatible theme (e.g. tweakcn). For example:

    • Go to ui.shadcn.com/themes and select a theme.
    • Click "Copy code" and save the theme variables in a file (e.g. theme.css).
    • diff --git a/docs/src/introduction.njk b/docs/src/introduction.njk new file mode 100644 index 0000000..f32c90f --- /dev/null +++ b/docs/src/introduction.njk @@ -0,0 +1,6 @@ +--- +layout: layouts/page.njk +title: Introduction +description: Basecoat is a set of beautifully-designed, accessible components and a code distribution platform. Works with your favorite frameworks and AI models. Open Source. Open Code. +--- + diff --git a/docs/src/kitchen-sink.njk b/docs/src/kitchen-sink.njk index 7e29069..00f3ea5 100644 --- a/docs/src/kitchen-sink.njk +++ b/docs/src/kitchen-sink.njk @@ -1,30 +1,44 @@ --- layout: layouts/base.njk --- -{% include "partials/kitchen-sink/accordion.njk" %} -{% include "partials/kitchen-sink/alert.njk" %} -{% include "partials/kitchen-sink/alert-dialog.njk" %} -{% include "partials/kitchen-sink/avatar.njk" %} -{% include "partials/kitchen-sink/badge.njk" %} -{% include "partials/kitchen-sink/breadcrumb.njk" %} -{% include "partials/kitchen-sink/button.njk" %} -{% include "partials/kitchen-sink/card.njk" %} -{% include "partials/kitchen-sink/checkbox.njk" %} -{% include "partials/kitchen-sink/combobox.njk" %} -{% include "partials/kitchen-sink/dialog.njk" %} -{% include "partials/kitchen-sink/dropdown-menu.njk" %} -{% include "partials/kitchen-sink/form.njk" %} -{% include "partials/kitchen-sink/input.njk" %} -{% include "partials/kitchen-sink/label.njk" %} -{% include "partials/kitchen-sink/pagination.njk" %} -{% include "partials/kitchen-sink/popover.njk" %} -{% include "partials/kitchen-sink/radio-group.njk" %} -{% include "partials/kitchen-sink/select.njk" %} -{% include "partials/kitchen-sink/skeleton.njk" %} -{% include "partials/kitchen-sink/slider.njk" %} -{% include "partials/kitchen-sink/switch.njk" %} -{% include "partials/kitchen-sink/table.njk" %} -{% include "partials/kitchen-sink/tabs.njk" %} -{% include "partials/kitchen-sink/textarea.njk" %} -{% include "partials/kitchen-sink/toast.njk" %} -{% include "partials/kitchen-sink/tooltip.njk" %} \ No newline at end of file +{% set components = [ + { label: "Accordion", id: "accordion" }, + { label: "Alert", id: "alert" }, + { label: "Alert Dialog", id: "alert-dialog" }, + { label: "Avatar", id: "avatar" }, + { label: "Badge", id: "badge" }, + { label: "Breadcrumb", id: "breadcrumb" }, + { label: "Button", id: "button" }, + { label: "Card", id: "card" }, + { label: "Checkbox", id: "checkbox" }, + { label: "Combobox", id: "combobox" }, + { label: "Dialog", id: "dialog" }, + { label: "Dropdown Menu", id: "dropdown-menu" }, + { label: "Form", id: "form" }, + { label: "Input", id: "input" }, + { label: "Label", id: "label" }, + { label: "Pagination", id: "pagination" }, + { label: "Popover", id: "popover" }, + { label: "Radio Group", id: "radio-group" }, + { label: "Select", id: "select" }, + { label: "Skeleton", id: "skeleton" }, + { label: "Slider", id: "slider" }, + { label: "Switch", id: "switch" }, + { label: "Table", id: "table" }, + { label: "Tabs", id: "tabs" }, + { label: "Textarea", id: "textarea" }, + { label: "Toast", id: "toast" }, + { label: "Tooltip", id: "tooltip" } +] %} + +
      +
      + {% for component in components %} + {% include "partials/kitchen-sink/" ~ component.id ~ ".njk" %} + {% endfor %} +
      + +
      diff --git a/src/css/basecoat.css b/src/css/basecoat.css index ec63d35..64f355e 100644 --- a/src/css/basecoat.css +++ b/src/css/basecoat.css @@ -526,18 +526,6 @@ @apply focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]; @apply aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive; } - .form input[type='date'], - .form input[type='datetime-local'], - .form input[type='month'], - .form input[type='week'], - .form input[type='time'], - .input[type='date'], - .input[type='datetime-local'], - .input[type='month'], - .input[type='week'], - .input[type='time'] { - - } } /* Label */ diff --git a/src/js/dropdown-menu.js b/src/js/dropdown-menu.js index 68e7cd8..449a107 100644 --- a/src/js/dropdown-menu.js +++ b/src/js/dropdown-menu.js @@ -83,7 +83,7 @@ window.basecoat.registerDropdownMenu = function(Alpine) { '@keydown.up.prevent'() { this.moveMenuitemFocus(-1); }, '@keydown.home.prevent'() { this.focusMenuitem(0) }, '@keydown.end.prevent'() { this.focusMenuitem(this.menuItems.length - 1) }, - '@mousemove'(e) { this.handleMenuitemMousemove(e) }, + '@mouseover'(e) { this.handleMenuitemMousemove(e) }, ':aria-hidden'() { return !this.open }, 'x-cloak': '' }, diff --git a/src/js/select.js b/src/js/select.js index c7b5c7b..dacb8a1 100644 --- a/src/js/select.js +++ b/src/js/select.js @@ -130,7 +130,7 @@ window.basecoat.registerSelect = function(Alpine) { }, $content: { '@click'(e) { this.handleOptionClick(e) }, - '@mousemove'(e) { this.handleOptionMousemove(e) }, + '@mouseover'(e) { this.handleOptionMousemove(e) }, ':aria-hidden'() { return !this.open }, 'x-cloak': '' },