@rimelight/ui 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/package.json +14 -13
  2. package/src/components/astro/RLAAccordion.astro +2 -6
  3. package/src/components/astro/RLAButton.astro +7 -23
  4. package/src/components/astro/RLAEmbedYoutube.astro +34 -25
  5. package/src/components/astro/RLAFooter.astro +2 -10
  6. package/src/components/astro/RLAHeader.astro +2 -14
  7. package/src/components/astro/RLAIcon.astro +2 -11
  8. package/src/components/astro/RLALogo.astro +2 -12
  9. package/src/components/astro/RLAPlaceholder.astro +2 -8
  10. package/src/components/astro/RLAScrollToTop.astro +2 -14
  11. package/src/components/astro/RLASection.astro +24 -82
  12. package/src/components/vue/RLVButton.vue +2 -64
  13. package/src/components/vue/RLVFooter.vue +2 -9
  14. package/src/components/vue/RLVHeader.vue +2 -13
  15. package/src/components/vue/RLVIcon.vue +2 -10
  16. package/src/components/vue/RLVLogo.vue +13 -21
  17. package/src/components/vue/RLVPlaceholder.vue +2 -8
  18. package/src/components/vue/RLVScrollToTop.vue +2 -13
  19. package/src/components/vue/RLVSection.vue +2 -19
  20. package/src/env.d.ts +1 -1
  21. package/src/integrations/ui.ts +17 -1
  22. package/src/presets/index.ts +63 -193
  23. package/src/themes/button.theme.ts +180 -511
  24. package/src/themes/embedYoutube.theme.ts +14 -0
  25. package/src/types/components/accordion.ts +15 -0
  26. package/src/types/components/button.ts +71 -0
  27. package/src/types/components/embed-youtube.ts +27 -0
  28. package/src/types/components/footer.ts +15 -0
  29. package/src/types/components/header.ts +31 -0
  30. package/src/types/components/icon.ts +19 -0
  31. package/src/types/components/index.ts +12 -0
  32. package/src/types/components/link.ts +23 -0
  33. package/src/types/components/logo.ts +27 -0
  34. package/src/types/components/navigation.ts +34 -0
  35. package/src/types/components/placeholder.ts +11 -0
  36. package/src/types/components/scroll-to-top.ts +31 -0
  37. package/src/types/components/section.ts +63 -0
  38. package/src/types/index.ts +1 -0
  39. package/src/nuxt-types.ts +0 -3
@@ -2,72 +2,10 @@
2
2
  import { computed, useSlots } from "vue"
3
3
  import { scv } from "css-variants"
4
4
  import { useUi, resolveClasses } from "../../utils"
5
- import type { ComponentVariants, ComponentSlots } from "../../types"
5
+ import type { ButtonProps } from "../../types/components/button"
6
6
  import buttonTheme from "../../themes/button.theme"
7
7
 
8
8
  const button = scv(buttonTheme)
9
- type ButtonVariants = ComponentVariants<typeof buttonTheme>
10
-
11
- export interface RLVButtonProps {
12
- /**
13
- * The visual style variant of the button
14
- */
15
- variant?: ButtonVariants["variant"]
16
- /**
17
- * The color scheme applied to the button
18
- */
19
- color?: ButtonVariants["color"]
20
- /**
21
- * The size scale of the button
22
- */
23
- size?: ButtonVariants["size"]
24
- /**
25
- * When provided, renders the button as an anchor link
26
- */
27
- href?: string
28
- /**
29
- * The text label displayed inside the button
30
- */
31
- label?: string
32
- /**
33
- * Icon name displayed before the label
34
- */
35
- leadingIcon?: string
36
- /**
37
- * Icon name displayed after the label
38
- */
39
- trailingIcon?: string
40
- /**
41
- * Shows a loading spinner animation
42
- */
43
- loading?: boolean
44
- /**
45
- * Renders a square button with equal padding
46
- */
47
- square?: boolean
48
- /**
49
- * Makes the button stretch to full width
50
- */
51
- block?: boolean
52
- /**
53
- * Applies active state styling
54
- */
55
- active?: boolean
56
- /**
57
- * Color used when button is in active state
58
- */
59
- activeColor?: ButtonVariants["color"]
60
- /**
61
- * Variant used when button is in active state
62
- */
63
- activeVariant?: ButtonVariants["variant"]
64
- /**
65
- * Component-specific CSS class overrides
66
- */
67
- ui?: ComponentSlots<typeof buttonTheme>
68
- class?: any
69
- [key: string]: unknown
70
- }
71
9
 
72
10
  const {
73
11
  variant = "solid",
@@ -85,7 +23,7 @@ const {
85
23
  activeVariant,
86
24
  ui: uiProp,
87
25
  class: className
88
- } = defineProps<RLVButtonProps>()
26
+ } = defineProps<ButtonProps>()
89
27
 
90
28
  const slots = useSlots()
91
29
 
@@ -2,19 +2,12 @@
2
2
  import { computed } from "vue"
3
3
  import { scv } from "css-variants"
4
4
  import { useUi, resolveClasses } from "../../utils"
5
- import type { ComponentVariants, ComponentSlots } from "../../types"
5
+ import type { FooterProps } from "../../types/components/footer"
6
6
  import footerTheme from "../../themes/footer.theme"
7
7
 
8
8
  const footer = scv(footerTheme)
9
- type FooterVariants = ComponentVariants<typeof footerTheme>
10
9
 
11
- export interface RLVFooterProps {
12
- contain?: FooterVariants["contain"]
13
- ui?: ComponentSlots<typeof footerTheme>
14
- class?: any
15
- }
16
-
17
- const { contain = false, ui: uiProp, class: className } = defineProps<RLVFooterProps>()
10
+ const { contain = false, ui: uiProp, class: className } = defineProps<FooterProps>()
18
11
 
19
12
  defineSlots<{
20
13
  left(props: {}): any
@@ -2,22 +2,11 @@
2
2
  import { computed, onMounted, onUnmounted, ref } from "vue"
3
3
  import { scv } from "css-variants"
4
4
  import { useUi, resolveClasses } from "../../utils"
5
- import type { ComponentVariants, ComponentSlots } from "../../types"
5
+ import type { HeaderProps } from "../../types/components/header"
6
6
  import headerTheme from "../../themes/header.theme"
7
7
  import { getHeaderStack } from "../../utils/headerStack"
8
8
 
9
9
  const header = scv(headerTheme)
10
- type HeaderVariants = ComponentVariants<typeof headerTheme>
11
-
12
- export interface RLVHeaderProps {
13
- contain?: HeaderVariants["contain"]
14
- sticky?: HeaderVariants["sticky"]
15
- fixed?: HeaderVariants["fixed"]
16
- stackIndex?: number
17
- hideOnScroll?: boolean
18
- ui?: ComponentSlots<typeof headerTheme>
19
- class?: any
20
- }
21
10
 
22
11
  const {
23
12
  contain = true,
@@ -27,7 +16,7 @@ const {
27
16
  hideOnScroll = false,
28
17
  ui: uiProp,
29
18
  class: className
30
- } = defineProps<RLVHeaderProps>()
19
+ } = defineProps<HeaderProps>()
31
20
 
32
21
  defineSlots<{
33
22
  left(props: {}): any
@@ -2,20 +2,12 @@
2
2
  import { computed } from "vue"
3
3
  import { scv } from "css-variants"
4
4
  import { useUi, resolveClasses } from "../../utils"
5
- import type { ComponentVariants, ComponentSlots } from "../../types"
5
+ import type { IconProps } from "../../types/components/icon"
6
6
  import iconTheme from "../../themes/icon.theme"
7
7
 
8
8
  const icon = scv(iconTheme)
9
- type IconVariants = ComponentVariants<typeof iconTheme>
10
9
 
11
- export interface RLVIconProps {
12
- name: string
13
- size?: IconVariants["size"]
14
- ui?: ComponentSlots<typeof iconTheme>
15
- class?: any
16
- }
17
-
18
- const { name, size = "md", ui: uiProp, class: className } = defineProps<RLVIconProps>()
10
+ const { name, size = "md", ui: uiProp, class: className } = defineProps<IconProps>()
19
11
 
20
12
  const resolvedClasses = computed(() =>
21
13
  resolveClasses(icon, { size }, useUi("icon", uiProp), className)
@@ -2,34 +2,26 @@
2
2
  import { computed } from "vue"
3
3
  import { scv } from "css-variants"
4
4
  import { useUi, resolveClasses } from "../../utils"
5
- import type { ComponentSlots } from "../../types"
5
+ import type { LogoProps } from "../../types/components/logo"
6
6
  import logoTheme from "../../themes/logo.theme"
7
7
  import { getUIConfig } from "virtual:rimelight-ui"
8
8
 
9
9
  const logo = scv(logoTheme)
10
10
 
11
- export interface RLVLogoProps {
12
- variant?: string
13
- mode?: "color" | "white" | "black"
14
- href?: string
15
- alt?: string
16
- ui?: ComponentSlots<typeof logoTheme>
17
- class?: any
18
- [key: string]: unknown
19
- }
20
-
21
- const props = withDefaults(defineProps<RLVLogoProps>(), {
22
- variant: "logomark",
23
- href: "/"
24
- })
11
+ const {
12
+ variant = "logomark",
13
+ mode,
14
+ href = "/",
15
+ alt,
16
+ ui: uiProp,
17
+ class: className
18
+ } = defineProps<LogoProps>()
25
19
 
26
20
  defineSlots<{
27
21
  default(props: {}): any
28
22
  }>()
29
23
 
30
- const resolvedClasses = computed(() =>
31
- resolveClasses(logo, {}, useUi("logo", props.ui), props.class)
32
- )
24
+ const resolvedClasses = computed(() => resolveClasses(logo, {}, useUi("logo", uiProp), className))
33
25
 
34
26
  const logoSrc = computed<string | null>(() => {
35
27
  const globalConfig = getUIConfig()
@@ -37,9 +29,9 @@ const logoSrc = computed<string | null>(() => {
37
29
  let src: any = null
38
30
 
39
31
  if (rcLogos && typeof rcLogos === "object") {
40
- src = rcLogos[props.variant]
32
+ src = rcLogos[variant]
41
33
  if (src && typeof src === "object") {
42
- src = src[props.mode || "color"] || src.black || src.color
34
+ src = src[mode || "color"] || src.black || src.color
43
35
  }
44
36
  }
45
37
 
@@ -55,7 +47,7 @@ const isIcon = computed(() => {
55
47
  return src.includes(":") || src.startsWith("i-")
56
48
  })
57
49
 
58
- const Tag = computed(() => (props.href ? "a" : "div"))
50
+ const Tag = computed(() => (href ? "a" : "div"))
59
51
  </script>
60
52
 
61
53
  <template>
@@ -2,18 +2,12 @@
2
2
  import { computed } from "vue"
3
3
  import { scv } from "css-variants"
4
4
  import { useUi, resolveClasses } from "../../utils"
5
- import type { ComponentSlots } from "../../types"
5
+ import type { PlaceholderProps } from "../../types/components/placeholder"
6
6
  import placeholderTheme from "../../themes/placeholder.theme"
7
7
 
8
8
  const placeholder = scv(placeholderTheme)
9
9
 
10
- export interface RLVPlaceholderProps {
11
- ui?: ComponentSlots<typeof placeholderTheme>
12
- class?: any
13
- [key: string]: unknown
14
- }
15
-
16
- const { ui: uiProp, class: className } = defineProps<RLVPlaceholderProps>()
10
+ const { ui: uiProp, class: className } = defineProps<PlaceholderProps>()
17
11
 
18
12
  defineSlots<{
19
13
  /**
@@ -1,23 +1,12 @@
1
1
  <script setup lang="ts">
2
2
  import { scv } from "css-variants"
3
3
  import { useUi, resolveClasses } from "../../utils"
4
- import type { ComponentVariants, ComponentSlots } from "../../types"
4
+ import type { ScrollToTopProps } from "../../types/components/scroll-to-top"
5
5
  import scrollToTopTheme from "../../themes/scroll-to-top.theme"
6
6
  import { useScrollToTop } from "../../composables/useScrollToTop"
7
7
  import { computed } from "vue"
8
8
 
9
9
  const scrollToTop = scv(scrollToTopTheme)
10
- type ScrollToTopVariants = ComponentVariants<typeof scrollToTopTheme>
11
-
12
- export interface RLVScrollToTopProps {
13
- color?: ScrollToTopVariants["color"]
14
- progressWidth?: number
15
- duration?: number
16
- threshold?: number
17
- showProgress?: boolean
18
- ui?: ComponentSlots<typeof scrollToTopTheme>
19
- class?: any
20
- }
21
10
 
22
11
  const {
23
12
  color = "primary",
@@ -27,7 +16,7 @@ const {
27
16
  showProgress = false,
28
17
  ui: uiProp,
29
18
  class: className
30
- } = defineProps<RLVScrollToTopProps>()
19
+ } = defineProps<ScrollToTopProps>()
31
20
 
32
21
  const classes = resolveClasses(scrollToTop, { color }, useUi("scrollToTop", uiProp), className)
33
22
 
@@ -2,29 +2,12 @@
2
2
  import { computed, useSlots } from "vue"
3
3
  import { scv } from "css-variants"
4
4
  import { useUi, resolveClasses } from "../../utils"
5
- import type { ComponentVariants, ComponentSlots } from "../../types"
5
+ import type { SectionProps } from "../../types/components/section"
6
6
  import sectionTheme from "../../themes/section.theme"
7
- import type { RLVButtonProps } from "./RLVButton.vue"
8
7
  import RLVIcon from "./RLVIcon.vue"
9
8
  import RLVButton from "./RLVButton.vue"
10
9
 
11
10
  const section = scv(sectionTheme)
12
- type SectionVariants = ComponentVariants<typeof sectionTheme>
13
-
14
- export interface RLVSectionProps {
15
- as?: any
16
- variant?: SectionVariants["variant"]
17
- headline?: string
18
- icon?: string
19
- title?: string
20
- description?: string
21
- links?: RLVButtonProps[]
22
- orientation?: SectionVariants["orientation"]
23
- reverse?: boolean
24
- ctaVariant?: SectionVariants["ctaVariant"]
25
- ui?: ComponentSlots<typeof sectionTheme>
26
- class?: any
27
- }
28
11
 
29
12
  const {
30
13
  as = "div",
@@ -38,7 +21,7 @@ const {
38
21
  title,
39
22
  description,
40
23
  links
41
- } = defineProps<RLVSectionProps>()
24
+ } = defineProps<SectionProps>()
42
25
 
43
26
  const slots = useSlots()
44
27
 
package/src/env.d.ts CHANGED
@@ -9,7 +9,7 @@ declare module "virtual:nuxt-ui-plugins" {
9
9
  declare module "virtual:rimelight-ui" {
10
10
  import type { DefaultUIConfig } from "../themes"
11
11
 
12
- export function getUIConfig(): DefaultUIConfig
12
+ export function getUIConfig(): DefaultUIConfig & { colors?: string[] }
13
13
  }
14
14
 
15
15
  interface StarlightAddonsConfig {
@@ -33,6 +33,10 @@ export interface UIOptions {
33
33
  * wins).
34
34
  */
35
35
  ui?: UIConfigOverrides
36
+ /**
37
+ * Custom color names to dynamically generate variants for.
38
+ */
39
+ colors?: string[]
36
40
  }
37
41
 
38
42
  /**
@@ -59,7 +63,19 @@ export interface UIOptions {
59
63
  */
60
64
  export function ui(options: UIOptions = {}): AstroIntegration[] {
61
65
  const resolvedUI = defu(options.ui ?? {}, defaultUIConfig)
62
- const resolvedConfig = { ...resolvedUI, logos: options.logos ?? {} }
66
+ const coreColors = [
67
+ "primary",
68
+ "secondary",
69
+ "info",
70
+ "success",
71
+ "warning",
72
+ "error",
73
+ "commentary",
74
+ "ideation",
75
+ "source"
76
+ ]
77
+ const mergedColors = [...new Set([...coreColors, ...(options.colors || [])])]
78
+ const resolvedConfig = { ...resolvedUI, logos: options.logos ?? {}, colors: mergedColors }
63
79
 
64
80
  const virtualModuleId = "virtual:rimelight-ui"
65
81
  const resolvedVirtualModuleId = "\0" + virtualModuleId
@@ -1,3 +1,5 @@
1
+ import { dirname, join } from "node:path"
2
+ import { fileURLToPath } from "node:url"
1
3
  import {
2
4
  definePreset,
3
5
  presetTypography,
@@ -7,9 +9,65 @@ import {
7
9
  transformerVariantGroup
8
10
  } from "unocss"
9
11
 
10
- export default definePreset(() => {
12
+ const __dirname = dirname(fileURLToPath(import.meta.url))
13
+ const uiSrcGlob = join(__dirname, "../**/*.{js,ts,jsx,tsx,vue,svelte,astro}")
14
+ const uiFilesystemGlob = join(__dirname, "../**/*")
15
+
16
+ const createScale = (colorName: string) => ({
17
+ "DEFAULT": `var(--${colorName})`,
18
+ "foreground": `var(--${colorName}-foreground)`,
19
+ "accent": `var(--${colorName}-accent)`,
20
+ "50": `var(--color-${colorName}-50)`,
21
+ "100": `var(--color-${colorName}-100)`,
22
+ "200": `var(--color-${colorName}-200)`,
23
+ "300": `var(--color-${colorName}-300)`,
24
+ "400": `var(--color-${colorName}-400)`,
25
+ "500": `var(--color-${colorName}-500)`,
26
+ "600": `var(--color-${colorName}-600)`,
27
+ "700": `var(--color-${colorName}-700)`,
28
+ "800": `var(--color-${colorName}-800)`,
29
+ "900": `var(--color-${colorName}-900)`,
30
+ "950": `var(--color-${colorName}-950)`
31
+ })
32
+
33
+ export interface RimelightPresetOptions {
34
+ colors?: string[]
35
+ }
36
+
37
+ export default definePreset((options?: RimelightPresetOptions) => {
38
+ const customColors = options?.colors || []
39
+ const coreColors = [
40
+ "primary",
41
+ "secondary",
42
+ "info",
43
+ "success",
44
+ "warning",
45
+ "error",
46
+ "commentary",
47
+ "ideation",
48
+ "source"
49
+ ]
50
+ const allColors = [...new Set([...coreColors, ...customColors])]
51
+
52
+ const safelist = allColors.flatMap((color) => [
53
+ `bg-${color}-500`,
54
+ `hover:bg-${color}-600`,
55
+ `focus-visible:ring-${color}-500/50`,
56
+ `border-${color}-500/20`,
57
+ `text-${color}-600`,
58
+ `bg-${color}-500/5`,
59
+ `hover:bg-${color}-500/10`,
60
+ `hover:border-${color}-500/30`,
61
+ `focus-visible:ring-${color}-500/40`,
62
+ `bg-${color}-500/10`,
63
+ `hover:bg-${color}-500/20`,
64
+ `hover:underline`,
65
+ `hover:decoration-${color}-300`
66
+ ])
67
+
11
68
  return {
12
69
  name: "rimelight-ui",
70
+ safelist,
13
71
  presets: [
14
72
  presetWind4(),
15
73
  presetTypography({
@@ -47,10 +105,11 @@ export default definePreset(() => {
47
105
  include: [
48
106
  /\.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|\?)/,
49
107
  "src/**/*.{js,ts,jsx,tsx,vue,svelte,astro}",
108
+ uiSrcGlob,
50
109
  "../ui/src/**/*.{js,ts,jsx,tsx,vue,svelte,astro}"
51
110
  ]
52
111
  },
53
- filesystem: ["../ui/src/**/*", "src/components/**/*", "src/pages/**/*"]
112
+ filesystem: [uiFilesystemGlob, "../ui/src/**/*", "src/components/**/*", "src/pages/**/*"]
54
113
  },
55
114
 
56
115
  shortcuts: {
@@ -94,16 +153,7 @@ export default definePreset(() => {
94
153
  DEFAULT: "var(--popover)",
95
154
  foreground: "var(--popover-foreground)"
96
155
  },
97
- "primary": {
98
- DEFAULT: "var(--primary)",
99
- foreground: "var(--primary-foreground)",
100
- accent: "var(--primary-accent)"
101
- },
102
- "secondary": {
103
- DEFAULT: "var(--secondary)",
104
- foreground: "var(--secondary-foreground)",
105
- accent: "var(--secondary-accent)"
106
- },
156
+ ...Object.fromEntries(allColors.map((color) => [color, createScale(color)])),
107
157
  "muted": {
108
158
  DEFAULT: "var(--muted)",
109
159
  foreground: "var(--muted-foreground)"
@@ -112,34 +162,6 @@ export default definePreset(() => {
112
162
  DEFAULT: "var(--accent)",
113
163
  foreground: "var(--accent-foreground)"
114
164
  },
115
- "info": {
116
- DEFAULT: "var(--info)",
117
- foreground: "var(--info-foreground)"
118
- },
119
- "success": {
120
- DEFAULT: "var(--success)",
121
- foreground: "var(--success-foreground)"
122
- },
123
- "warning": {
124
- DEFAULT: "var(--warning)",
125
- foreground: "var(--warning-foreground)"
126
- },
127
- "error": {
128
- DEFAULT: "var(--error)",
129
- foreground: "var(--error-foreground)"
130
- },
131
- "commentary": {
132
- DEFAULT: "var(--commentary)",
133
- foreground: "var(--commentary-foreground)"
134
- },
135
- "ideation": {
136
- DEFAULT: "var(--ideation)",
137
- foreground: "var(--ideation-foreground)"
138
- },
139
- "source": {
140
- DEFAULT: "var(--source)",
141
- foreground: "var(--source-foreground)"
142
- },
143
165
  "border": "var(--border)",
144
166
  "input": "var(--input)",
145
167
  "outline": "var(--outline)",
@@ -209,159 +231,7 @@ export default definePreset(() => {
209
231
  }
210
232
  },
211
233
 
212
- preflights: [
213
- {
214
- getCSS: () => `
215
- :root {
216
- --background: #ffffff;
217
- --foreground: #030712;
218
- --card: #ffffff;
219
- --card-foreground: #030712;
220
- --popover: #ffffff;
221
- --popover-foreground: #030712;
222
- --primary: #f97316;
223
- --primary-foreground: #f9fafb;
224
- --primary-accent: #ea580c;
225
- --secondary: #8b5cf6;
226
- --secondary-foreground: #f9fafb;
227
- --secondary-accent: #7c3aed;
228
- --muted: #f3f4f6;
229
- --muted-foreground: #4b5563;
230
- --accent: #f3f4f6;
231
- --accent-foreground: #111827;
232
- --info: #3b82f6;
233
- --info-foreground: #ffffff;
234
- --success: #22c55e;
235
- --success-foreground: #ffffff;
236
- --warning: #f59e0b;
237
- --warning-foreground: #000000;
238
- --error: #ef4444;
239
- --error-foreground: #f9fafb;
240
- --commentary: #ec4899;
241
- --commentary-foreground: #f9fafb;
242
- --ideation: #8b5cf6;
243
- --ideation-foreground: #f9fafb;
244
- --source: #38bdf8;
245
- --source-foreground: #0f172a;
246
- --border: #e5e7eb;
247
- --input: #e5e7eb;
248
- --outline: #9ca3af;
249
- --ring: #9ca3af;
250
- --radius: 0.625rem;
251
- --sidebar: #f9fafb;
252
- --sidebar-foreground: #030712;
253
- --sidebar-primary: #1d4ed8;
254
- --sidebar-primary-foreground: #f9fafb;
255
- --sidebar-accent: #f3f4f6;
256
- --sidebar-accent-foreground: #111827;
257
- --sidebar-border: #e5e7eb;
258
- --sidebar-ring: #9ca3af;
259
- --chart-1: #3b82f6;
260
- --chart-2: #6366f1;
261
- --chart-3: #8b5cf6;
262
- --chart-4: #a855f7;
263
- --chart-5: #ec4899;
264
- --destructive: #ef4444;
265
- --color-surface: #ffffff;
266
- --color-muted-strong: #e5e7eb;
267
- --color-foreground-secondary: #4b5563;
268
- --color-foreground-tertiary: #6b7280;
269
- --color-placeholder: #9ca3af;
270
- --color-input-border: #d1d5db;
271
- --color-hover: #f3f4f6;
272
- --color-destructive-subtle: #fef2f2;
273
- --color-accent-subtle: #eff6ff;
274
- --font-sans: "Noto Sans", sans-serif;
275
- --font-serif: "Noto Serif", serif;
276
- --font-mono: "Noto Sans Mono", monospace;
277
- }
278
-
279
- .dark {
280
- --background: #030712;
281
- --foreground: #f9fafb;
282
- --card: #111827;
283
- --card-foreground: #f9fafb;
284
- --popover: #1f2937;
285
- --popover-foreground: #f9fafb;
286
- --primary: #f97316;
287
- --primary-foreground: #f9fafb;
288
- --primary-accent: #fb923c;
289
- --secondary: #8b5cf6;
290
- --secondary-foreground: #f9fafb;
291
- --secondary-accent: #a78bfa;
292
- --muted: #1f2937;
293
- --muted-foreground: #9ca3af;
294
- --accent: #374151;
295
- --accent-foreground: #f3f4f6;
296
- --info: #3b82f6;
297
- --info-foreground: #ffffff;
298
- --success: #22c55e;
299
- --success-foreground: #ffffff;
300
- --warning: #f59e0b;
301
- --warning-foreground: #000000;
302
- --error: #ef4444;
303
- --error-foreground: #f9fafb;
304
- --commentary: #f472b6;
305
- --commentary-foreground: #0f172a;
306
- --ideation: #a78bfa;
307
- --ideation-foreground: #0f172a;
308
- --source: #7dd3fc;
309
- --source-foreground: #0f172a;
310
- --border: rgba(249, 250, 251, 0.1);
311
- --input: rgba(249, 250, 251, 0.15);
312
- --outline: #6b7280;
313
- --ring: #6b7280;
314
- --sidebar: #111827;
315
- --sidebar-foreground: #f9fafb;
316
- --sidebar-primary: #1d4ed8;
317
- --sidebar-primary-foreground: #f9fafb;
318
- --sidebar-accent: #1f2937;
319
- --sidebar-accent-foreground: #f3f4f6;
320
- --sidebar-border: #1f2937;
321
- --sidebar-ring: #6b7280;
322
- --chart-1: #60a5fa;
323
- --chart-2: #818cf8;
324
- --chart-3: #a78bfa;
325
- --chart-4: #c084fc;
326
- --chart-5: #f472b6;
327
- --destructive: #f87171;
328
- --color-surface: #1f2937;
329
- --color-muted-strong: #374151;
330
- --color-foreground-secondary: #d1d5db;
331
- --color-foreground-tertiary: #9ca3af;
332
- --color-placeholder: #6b7280;
333
- --color-input-border: #4b5563;
334
- --color-hover: #374151;
335
- --color-destructive-subtle: #451a1a;
336
- --color-accent-subtle: #1e293b;
337
- }
338
-
339
- * {
340
- border-color: var(--border);
341
- outline-color: rgba(156, 163, 175, 0.5);
342
- }
343
-
344
- body {
345
- background-color: var(--background);
346
- color: var(--foreground);
347
- font-family: var(--font-sans);
348
- }
349
-
350
- button {
351
- cursor: pointer;
352
- }
353
-
354
- ::selection {
355
- background-color: var(--primary);
356
- color: var(--primary-foreground);
357
- }
358
-
359
- @view-transition {
360
- navigation: auto;
361
- }
362
- `
363
- }
364
- ],
234
+ preflights: [],
365
235
 
366
236
  async configResolved(config) {
367
237
  if (process.env.NODE_ENV === "development" && !process.env.UNO_CONFIG_LOGGED) {