|  | import { globSync } from 'fast-glob'; | 
					
						
						|  | import fs from 'node:fs/promises'; | 
					
						
						|  | import { basename } from 'node:path'; | 
					
						
						|  | import { defineConfig, presetIcons, presetUno, transformerDirectives } from 'unocss'; | 
					
						
						|  |  | 
					
						
						|  | const iconPaths = globSync('./icons/*.svg'); | 
					
						
						|  |  | 
					
						
						|  | const collectionName = 'bolt'; | 
					
						
						|  |  | 
					
						
						|  | const customIconCollection = iconPaths.reduce( | 
					
						
						|  | (acc, iconPath) => { | 
					
						
						|  | const [iconName] = basename(iconPath).split('.'); | 
					
						
						|  |  | 
					
						
						|  | acc[collectionName] ??= {}; | 
					
						
						|  | acc[collectionName][iconName] = async () => fs.readFile(iconPath, 'utf8'); | 
					
						
						|  |  | 
					
						
						|  | return acc; | 
					
						
						|  | }, | 
					
						
						|  | {} as Record<string, Record<string, () => Promise<string>>>, | 
					
						
						|  | ); | 
					
						
						|  |  | 
					
						
						|  | const BASE_COLORS = { | 
					
						
						|  | white: '#FFFFFF', | 
					
						
						|  | gray: { | 
					
						
						|  | 50: '#FAFAFA', | 
					
						
						|  | 100: '#F5F5F5', | 
					
						
						|  | 200: '#E5E5E5', | 
					
						
						|  | 300: '#D4D4D4', | 
					
						
						|  | 400: '#A3A3A3', | 
					
						
						|  | 500: '#737373', | 
					
						
						|  | 600: '#525252', | 
					
						
						|  | 700: '#404040', | 
					
						
						|  | 800: '#262626', | 
					
						
						|  | 900: '#171717', | 
					
						
						|  | 950: '#0A0A0A', | 
					
						
						|  | }, | 
					
						
						|  | accent: { | 
					
						
						|  | 50: '#F8F5FF', | 
					
						
						|  | 100: '#F0EBFF', | 
					
						
						|  | 200: '#E1D6FF', | 
					
						
						|  | 300: '#CEBEFF', | 
					
						
						|  | 400: '#B69EFF', | 
					
						
						|  | 500: '#9C7DFF', | 
					
						
						|  | 600: '#8A5FFF', | 
					
						
						|  | 700: '#7645E8', | 
					
						
						|  | 800: '#6234BB', | 
					
						
						|  | 900: '#502D93', | 
					
						
						|  | 950: '#2D1959', | 
					
						
						|  | }, | 
					
						
						|  | green: { | 
					
						
						|  | 50: '#F0FDF4', | 
					
						
						|  | 100: '#DCFCE7', | 
					
						
						|  | 200: '#BBF7D0', | 
					
						
						|  | 300: '#86EFAC', | 
					
						
						|  | 400: '#4ADE80', | 
					
						
						|  | 500: '#22C55E', | 
					
						
						|  | 600: '#16A34A', | 
					
						
						|  | 700: '#15803D', | 
					
						
						|  | 800: '#166534', | 
					
						
						|  | 900: '#14532D', | 
					
						
						|  | 950: '#052E16', | 
					
						
						|  | }, | 
					
						
						|  | orange: { | 
					
						
						|  | 50: '#FFFAEB', | 
					
						
						|  | 100: '#FEEFC7', | 
					
						
						|  | 200: '#FEDF89', | 
					
						
						|  | 300: '#FEC84B', | 
					
						
						|  | 400: '#FDB022', | 
					
						
						|  | 500: '#F79009', | 
					
						
						|  | 600: '#DC6803', | 
					
						
						|  | 700: '#B54708', | 
					
						
						|  | 800: '#93370D', | 
					
						
						|  | 900: '#792E0D', | 
					
						
						|  | }, | 
					
						
						|  | red: { | 
					
						
						|  | 50: '#FEF2F2', | 
					
						
						|  | 100: '#FEE2E2', | 
					
						
						|  | 200: '#FECACA', | 
					
						
						|  | 300: '#FCA5A5', | 
					
						
						|  | 400: '#F87171', | 
					
						
						|  | 500: '#EF4444', | 
					
						
						|  | 600: '#DC2626', | 
					
						
						|  | 700: '#B91C1C', | 
					
						
						|  | 800: '#991B1B', | 
					
						
						|  | 900: '#7F1D1D', | 
					
						
						|  | 950: '#450A0A', | 
					
						
						|  | }, | 
					
						
						|  | }; | 
					
						
						|  |  | 
					
						
						|  | const COLOR_PRIMITIVES = { | 
					
						
						|  | ...BASE_COLORS, | 
					
						
						|  | alpha: { | 
					
						
						|  | white: generateAlphaPalette(BASE_COLORS.white), | 
					
						
						|  | gray: generateAlphaPalette(BASE_COLORS.gray[900]), | 
					
						
						|  | red: generateAlphaPalette(BASE_COLORS.red[500]), | 
					
						
						|  | accent: generateAlphaPalette(BASE_COLORS.accent[500]), | 
					
						
						|  | }, | 
					
						
						|  | }; | 
					
						
						|  |  | 
					
						
						|  | export default defineConfig({ | 
					
						
						|  | safelist: [ | 
					
						
						|  | ...Object.keys(customIconCollection[collectionName]||{}).map(x=>`i-bolt:${x}`) | 
					
						
						|  | ], | 
					
						
						|  | shortcuts: { | 
					
						
						|  | 'bolt-ease-cubic-bezier': 'ease-[cubic-bezier(0.4,0,0.2,1)]', | 
					
						
						|  | 'transition-theme': 'transition-[background-color,border-color,color] duration-150 bolt-ease-cubic-bezier', | 
					
						
						|  | kdb: 'bg-bolt-elements-code-background text-bolt-elements-code-text py-1 px-1.5 rounded-md', | 
					
						
						|  | 'max-w-chat': 'max-w-[var(--chat-max-width)]', | 
					
						
						|  | }, | 
					
						
						|  | rules: [ | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | ['b', {}], | 
					
						
						|  | ], | 
					
						
						|  | theme: { | 
					
						
						|  | colors: { | 
					
						
						|  | ...COLOR_PRIMITIVES, | 
					
						
						|  | bolt: { | 
					
						
						|  | elements: { | 
					
						
						|  | borderColor: 'var(--bolt-elements-borderColor)', | 
					
						
						|  | borderColorActive: 'var(--bolt-elements-borderColorActive)', | 
					
						
						|  | background: { | 
					
						
						|  | depth: { | 
					
						
						|  | 1: 'var(--bolt-elements-bg-depth-1)', | 
					
						
						|  | 2: 'var(--bolt-elements-bg-depth-2)', | 
					
						
						|  | 3: 'var(--bolt-elements-bg-depth-3)', | 
					
						
						|  | 4: 'var(--bolt-elements-bg-depth-4)', | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | textPrimary: 'var(--bolt-elements-textPrimary)', | 
					
						
						|  | textSecondary: 'var(--bolt-elements-textSecondary)', | 
					
						
						|  | textTertiary: 'var(--bolt-elements-textTertiary)', | 
					
						
						|  | code: { | 
					
						
						|  | background: 'var(--bolt-elements-code-background)', | 
					
						
						|  | text: 'var(--bolt-elements-code-text)', | 
					
						
						|  | }, | 
					
						
						|  | button: { | 
					
						
						|  | primary: { | 
					
						
						|  | background: 'var(--bolt-elements-button-primary-background)', | 
					
						
						|  | backgroundHover: 'var(--bolt-elements-button-primary-backgroundHover)', | 
					
						
						|  | text: 'var(--bolt-elements-button-primary-text)', | 
					
						
						|  | }, | 
					
						
						|  | secondary: { | 
					
						
						|  | background: 'var(--bolt-elements-button-secondary-background)', | 
					
						
						|  | backgroundHover: 'var(--bolt-elements-button-secondary-backgroundHover)', | 
					
						
						|  | text: 'var(--bolt-elements-button-secondary-text)', | 
					
						
						|  | }, | 
					
						
						|  | danger: { | 
					
						
						|  | background: 'var(--bolt-elements-button-danger-background)', | 
					
						
						|  | backgroundHover: 'var(--bolt-elements-button-danger-backgroundHover)', | 
					
						
						|  | text: 'var(--bolt-elements-button-danger-text)', | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | item: { | 
					
						
						|  | contentDefault: 'var(--bolt-elements-item-contentDefault)', | 
					
						
						|  | contentActive: 'var(--bolt-elements-item-contentActive)', | 
					
						
						|  | contentAccent: 'var(--bolt-elements-item-contentAccent)', | 
					
						
						|  | contentDanger: 'var(--bolt-elements-item-contentDanger)', | 
					
						
						|  | backgroundDefault: 'var(--bolt-elements-item-backgroundDefault)', | 
					
						
						|  | backgroundActive: 'var(--bolt-elements-item-backgroundActive)', | 
					
						
						|  | backgroundAccent: 'var(--bolt-elements-item-backgroundAccent)', | 
					
						
						|  | backgroundDanger: 'var(--bolt-elements-item-backgroundDanger)', | 
					
						
						|  | }, | 
					
						
						|  | actions: { | 
					
						
						|  | background: 'var(--bolt-elements-actions-background)', | 
					
						
						|  | code: { | 
					
						
						|  | background: 'var(--bolt-elements-actions-code-background)', | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | artifacts: { | 
					
						
						|  | background: 'var(--bolt-elements-artifacts-background)', | 
					
						
						|  | backgroundHover: 'var(--bolt-elements-artifacts-backgroundHover)', | 
					
						
						|  | borderColor: 'var(--bolt-elements-artifacts-borderColor)', | 
					
						
						|  | inlineCode: { | 
					
						
						|  | background: 'var(--bolt-elements-artifacts-inlineCode-background)', | 
					
						
						|  | text: 'var(--bolt-elements-artifacts-inlineCode-text)', | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | messages: { | 
					
						
						|  | background: 'var(--bolt-elements-messages-background)', | 
					
						
						|  | linkColor: 'var(--bolt-elements-messages-linkColor)', | 
					
						
						|  | code: { | 
					
						
						|  | background: 'var(--bolt-elements-messages-code-background)', | 
					
						
						|  | }, | 
					
						
						|  | inlineCode: { | 
					
						
						|  | background: 'var(--bolt-elements-messages-inlineCode-background)', | 
					
						
						|  | text: 'var(--bolt-elements-messages-inlineCode-text)', | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | icon: { | 
					
						
						|  | success: 'var(--bolt-elements-icon-success)', | 
					
						
						|  | error: 'var(--bolt-elements-icon-error)', | 
					
						
						|  | primary: 'var(--bolt-elements-icon-primary)', | 
					
						
						|  | secondary: 'var(--bolt-elements-icon-secondary)', | 
					
						
						|  | tertiary: 'var(--bolt-elements-icon-tertiary)', | 
					
						
						|  | }, | 
					
						
						|  | preview: { | 
					
						
						|  | addressBar: { | 
					
						
						|  | background: 'var(--bolt-elements-preview-addressBar-background)', | 
					
						
						|  | backgroundHover: 'var(--bolt-elements-preview-addressBar-backgroundHover)', | 
					
						
						|  | backgroundActive: 'var(--bolt-elements-preview-addressBar-backgroundActive)', | 
					
						
						|  | text: 'var(--bolt-elements-preview-addressBar-text)', | 
					
						
						|  | textActive: 'var(--bolt-elements-preview-addressBar-textActive)', | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | terminals: { | 
					
						
						|  | background: 'var(--bolt-elements-terminals-background)', | 
					
						
						|  | buttonBackground: 'var(--bolt-elements-terminals-buttonBackground)', | 
					
						
						|  | }, | 
					
						
						|  | dividerColor: 'var(--bolt-elements-dividerColor)', | 
					
						
						|  | loader: { | 
					
						
						|  | background: 'var(--bolt-elements-loader-background)', | 
					
						
						|  | progress: 'var(--bolt-elements-loader-progress)', | 
					
						
						|  | }, | 
					
						
						|  | prompt: { | 
					
						
						|  | background: 'var(--bolt-elements-prompt-background)', | 
					
						
						|  | }, | 
					
						
						|  | sidebar: { | 
					
						
						|  | dropdownShadow: 'var(--bolt-elements-sidebar-dropdownShadow)', | 
					
						
						|  | buttonBackgroundDefault: 'var(--bolt-elements-sidebar-buttonBackgroundDefault)', | 
					
						
						|  | buttonBackgroundHover: 'var(--bolt-elements-sidebar-buttonBackgroundHover)', | 
					
						
						|  | buttonText: 'var(--bolt-elements-sidebar-buttonText)', | 
					
						
						|  | }, | 
					
						
						|  | cta: { | 
					
						
						|  | background: 'var(--bolt-elements-cta-background)', | 
					
						
						|  | text: 'var(--bolt-elements-cta-text)', | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | }, | 
					
						
						|  | transformers: [transformerDirectives()], | 
					
						
						|  | presets: [ | 
					
						
						|  | presetUno({ | 
					
						
						|  | dark: { | 
					
						
						|  | light: '[data-theme="light"]', | 
					
						
						|  | dark: '[data-theme="dark"]', | 
					
						
						|  | }, | 
					
						
						|  | }), | 
					
						
						|  | presetIcons({ | 
					
						
						|  | warn: true, | 
					
						
						|  | collections: { | 
					
						
						|  | ...customIconCollection, | 
					
						
						|  | }, | 
					
						
						|  | unit: 'em', | 
					
						
						|  | }), | 
					
						
						|  | ], | 
					
						
						|  | }); | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | function generateAlphaPalette(hex: string) { | 
					
						
						|  | return [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100].reduce( | 
					
						
						|  | (acc, opacity) => { | 
					
						
						|  | const alpha = Math.round((opacity / 100) * 255) | 
					
						
						|  | .toString(16) | 
					
						
						|  | .padStart(2, '0'); | 
					
						
						|  |  | 
					
						
						|  | acc[opacity] = `${hex}${alpha}`; | 
					
						
						|  |  | 
					
						
						|  | return acc; | 
					
						
						|  | }, | 
					
						
						|  | {} as Record<number, string>, | 
					
						
						|  | ); | 
					
						
						|  | } | 
					
						
						|  |  |