| import React from 'react'; | |
| export * from './map'; | |
| export * from './json'; | |
| export * from './files'; | |
| export * from './latex'; | |
| export * from './forms'; | |
| export * from './agents'; | |
| export * from './drafts'; | |
| export * from './convos'; | |
| export * from './routes'; | |
| export * from './presets'; | |
| export * from './prompts'; | |
| export * from './textarea'; | |
| export * from './messages'; | |
| export * from './languages'; | |
| export * from './endpoints'; | |
| export * from './resources'; | |
| export * from './roles'; | |
| export * from './localStorage'; | |
| export * from './promptGroups'; | |
| export * from './email'; | |
| export * from './timestamps'; | |
| export { default as cn } from './cn'; | |
| export { default as logger } from './logger'; | |
| export { default as scaleImage } from './scaleImage'; | |
| export { default as getLoginError } from './getLoginError'; | |
| export { default as cleanupPreset } from './cleanupPreset'; | |
| export { default as buildDefaultConvo } from './buildDefaultConvo'; | |
| export { default as getDefaultEndpoint } from './getDefaultEndpoint'; | |
| export { default as createChatSearchParams } from './createChatSearchParams'; | |
| export { getThemeFromEnv } from './getThemeFromEnv'; | |
| export const languages = [ | |
| 'java', | |
| 'c', | |
| 'markdown', | |
| 'css', | |
| 'html', | |
| 'xml', | |
| 'bash', | |
| 'json', | |
| 'yaml', | |
| 'jsx', | |
| 'python', | |
| 'c++', | |
| 'javascript', | |
| 'csharp', | |
| 'php', | |
| 'typescript', | |
| 'swift', | |
| 'objectivec', | |
| 'sql', | |
| 'r', | |
| 'kotlin', | |
| 'ruby', | |
| 'go', | |
| 'x86asm', | |
| 'matlab', | |
| 'perl', | |
| 'pascal', | |
| ]; | |
| export const removeFocusOutlines = ''; | |
| export const removeFocusRings = | |
| 'focus:outline-none focus:ring-0 focus:ring-opacity-0 focus:ring-offset-0'; | |
| export const cardStyle = | |
| 'transition-colors rounded-md min-w-[75px] border font-normal bg-white hover:bg-gray-50 dark:border-gray-700 dark:hover:bg-gray-700 dark:bg-gray-800 text-black dark:text-gray-600 focus:outline-none data-[state=open]:bg-gray-50 dark:data-[state=open]:bg-gray-700'; | |
| export const defaultTextProps = | |
| 'rounded-md border border-gray-200 focus:border-gray-400 focus:bg-gray-50 bg-transparent text-sm shadow-[0_0_10px_rgba(0,0,0,0.05)] outline-none focus-within:placeholder:text-text-primary focus:placeholder:text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-gray-400 focus:ring-opacity-20 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:border-gray-600 dark:focus:bg-gray-600 dark:focus:border-gray-600 dark:text-gray-50 dark:shadow-[0_0_15px_rgba(0,0,0,0.10)] dark:focus:outline-none'; | |
| export const optionText = | |
| 'p-0 shadow-none text-right pr-1 h-8 border-transparent hover:bg-gray-800/10 dark:hover:bg-white/10 dark:focus:bg-white/10 transition-colors'; | |
| export const defaultTextPropsLabel = | |
| 'rounded-md border border-gray-300 bg-transparent text-sm shadow-[0_0_10px_rgba(0,0,0,0.10)] outline-none focus-within:placeholder:text-text-primary focus:placeholder:text-text-primary placeholder:text-text-secondary focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-700 dark:bg-gray-700 dark:text-gray-50 dark:shadow-[0_0_15px_rgba(0,0,0,0.10)] dark:focus:border-gray-600 dark:focus:outline-none'; | |
| export function capitalizeFirstLetter(string: string) { | |
| return string.charAt(0).toUpperCase() + string.slice(1); | |
| } | |
| export const handleDoubleClick: React.MouseEventHandler<HTMLElement> = (event) => { | |
| const range = document.createRange(); | |
| range.selectNodeContents(event.target as Node); | |
| const selection = window.getSelection(); | |
| if (!selection) { | |
| return; | |
| } | |
| selection.removeAllRanges(); | |
| selection.addRange(range); | |
| }; | |
| export const extractContent = ( | |
| children: React.ReactNode | { props: { children: React.ReactNode } } | string, | |
| ): string => { | |
| if (typeof children === 'string') { | |
| return children; | |
| } | |
| if (React.isValidElement(children)) { | |
| return extractContent((children.props as { children?: React.ReactNode }).children); | |
| } | |
| if (Array.isArray(children)) { | |
| return children.map(extractContent).join(''); | |
| } | |
| return ''; | |
| }; | |
| export const normalizeLayout = (layout: number[]) => { | |
| const sum = layout.reduce((acc, size) => acc + size, 0); | |
| if (Math.abs(sum - 100) < 0.01) { | |
| return layout.map((size) => Number(size.toFixed(2))); | |
| } | |
| const factor = 100 / sum; | |
| const normalizedLayout = layout.map((size) => Number((size * factor).toFixed(2))); | |
| const adjustedSum = normalizedLayout.reduce( | |
| (acc, size, index) => (index === layout.length - 1 ? acc : acc + size), | |
| 0, | |
| ); | |
| normalizedLayout[normalizedLayout.length - 1] = Number((100 - adjustedSum).toFixed(2)); | |
| return normalizedLayout; | |
| }; | |