Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .changeset/eight-glasses-warn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
"@ultraviolet/ui": major
---

⚠️ BREAKING CHANGES ⚠️
In order to start using the new style, you will need to import new `<ThemeProvider />` and import new CSS generated at build time:

```tsx
import { ThemeProvider } from '@emotion/react'
import { consoleLightTheme } from '@ultraviolet/themes'

import { ThemeProvider as ThemeProviderUV } from "@ultraviolet/ui" // ThemeProvider that generate the theme applied to components
import "@ultraviolet/ui/styles" // Generated CSS used by components

export const App = (children) => {
<ThemeProvider theme={consoleLightTheme}>
<ThemeProviderUV>
{children}
</ThemeProviderUV>
</ThemeProvider>
}
```
4 changes: 2 additions & 2 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
"import/no-named-as-default-member": "error",
"import/no-named-as-default": "error",
"import/no-self-import": "error",
"import/no-unassigned-import": "error",
"import/no-unassigned-import": "off",
"import/no-unused-modules": "off",
"import/prefer-default-export": "off",
"import/no-namespace": "off",
Expand Down Expand Up @@ -241,7 +241,7 @@
"react_perf/jsx-no-new-array-as-prop": "error",
"react_perf/jsx-no-new-function-as-props": "error",
"react_perf/jsx-no-new-object-as-prop": "error",
"react/button-has-type": "error",
"react/button-has-type": "off",
"react/exhaustive-deps": "error",
"react/jsx-filename-extension": [
"error",
Expand Down
48 changes: 25 additions & 23 deletions .storybook/components/DocsContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import type { ReactNode } from 'react'
import { cloneElement, isValidElement, useState } from 'react'
import { globalStyles } from './globalStyle'
import '@ultraviolet/fonts/fonts.css'
import { GlobalAlert } from '@ultraviolet/ui'
import { GlobalAlert, ThemeProvider as ThemeProviderUV } from '@ultraviolet/ui'

type ExtraProps = {
/**
Expand Down Expand Up @@ -66,28 +66,30 @@ const DocsContainer = ({ children, context }: DocsContainerProps) => {

return (
<Unstyled>
<ThemeProvider theme={lightTheme}>
{isBeta ?
<GlobalAlert
buttonText="Access to Beta"
onClickButton={() => window.top?.location.assign('https://beta.storybook.ultraviolet.scaleway.com')}
closable={false}
>
A Beta version is available. Please use this version if your dependencies include the Beta release.
</GlobalAlert> : null}
<Global styles={[globalStyles]} />
<BaseContainer context={context}>
{isValidElement<ExtraProps>(children)
? cloneElement(children, {
deprecated: parameters?.deprecated,
deprecatedReason: parameters?.deprecatedReason,
migrationLink: parameters?.migrationLink,
hideArgsTable: parameters?.hideArgsTable,
experimental: isPlusLibrary ? true : parameters?.experimental,
})
: children}
</BaseContainer>
</ThemeProvider>
<ThemeProviderUV>
<ThemeProvider theme={lightTheme}>
{isBeta ?
<GlobalAlert
buttonText="Access to Beta"
onClickButton={() => window.top?.location.assign('https://beta.storybook.ultraviolet.scaleway.com')}
closable={false}
>
A Beta version is available. Please use this version if your dependencies include the Beta release.
</GlobalAlert> : null}
<Global styles={[globalStyles]} />
<BaseContainer context={context}>
{isValidElement<ExtraProps>(children)
? cloneElement(children, {
deprecated: parameters?.deprecated,
deprecatedReason: parameters?.deprecatedReason,
migrationLink: parameters?.migrationLink,
hideArgsTable: parameters?.hideArgsTable,
experimental: isPlusLibrary ? true : parameters?.experimental,
})
: children}
</BaseContainer>
</ThemeProvider>
</ThemeProviderUV>
</Unstyled>
)
}
Expand Down
2 changes: 1 addition & 1 deletion .storybook/storybookThemes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ const generateStorybookTheme = ({

// Toolbar default and active colors
barTextColor: theme.colors.neutral.textWeak,
barSelectedColor: theme.colors.primary.textWeak,
barSelectedColor: theme.colors.primary.text,
barBg: theme.colors.neutral.backgroundWeak,

buttonBg: theme.colors.neutral.background,
Expand Down
2 changes: 2 additions & 0 deletions .storybook/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { resolve } from 'path'
import svgr from '@svgr/rollup'
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite'
import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin';

// https://vitejs.dev/config/
export default defineConfig({
Expand Down Expand Up @@ -42,5 +43,6 @@ export default defineConfig({
plugins: ['@emotion/babel-plugin'],
},
}),
vanillaExtractPlugin({})
],
})
3 changes: 2 additions & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
"!**/build/**",
"!**/.turbo/**",
"!**/prebuild.ts",
"!**/index.stories.tsx"
"!**/index.stories.tsx",
"!**/*.css.ts"
]
},
"css": {
Expand Down
5 changes: 4 additions & 1 deletion eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ export default [
'**/__stories__/**/*.{ts,tsx}',
'**/__tests__/**/*.{ts,tsx}',
'**/vite.config.*',
'**/vitest.config.*',
'utils/test/**/*.{ts,tsx}',
'**/vitest.setup.ts',
],
Expand Down Expand Up @@ -136,6 +137,7 @@ export default [
'**/__stories__/**/*.{ts,tsx}',
'**/__tests__/**/*.{ts,tsx}',
'**/vite.config.*',
'**/vitest.config.*',
'utils/test/**/*.{ts,tsx}',
'**/vitest.setup.ts',
'.storybook/**',
Expand All @@ -160,7 +162,8 @@ export default [
},
})),
{
files: ['**/*.d.ts', '**/vite.config.ts'],
files: ['**/*.d.ts', '**/vite.config.ts', '**/vitest.config.*',
],

rules: {
'import/no-extraneous-dependencies': 'off',
Expand Down
52 changes: 34 additions & 18 deletions examples/vite/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,43 @@
import { PlusIcon } from '@ultraviolet/icons'
import { Alert, Button, Card, Row, Stack, Text } from '@ultraviolet/ui'
import {
Alert,
Button,
Card,
Row,
Stack,
Text,
ThemeProvider,
} from '@ultraviolet/ui'
import { useState } from 'react'
import '@ultraviolet/ui/styles' // Import styles for the UI components
import { consoleDarkTheme, consoleLightTheme } from '@ultraviolet/themes'

export const App = () => {
const [count, setCount] = useState(0)
const [darkMode, setDarkMode] = useState(false)

return (
<Row gap="3" templateColumns="9fr 3fr">
<Card>
<Text as="h1" variant="headingSmall">
Classic
</Text>
<Stack direction="row" gap="2">
<Button onClick={() => setCount(prevCount => prevCount + 1)}>
<PlusIcon />
</Button>
<Button onClick={() => setCount(0)}>Reset</Button>
</Stack>
<Text as="p" variant="body">
Count:{count}
</Text>
</Card>
<Alert sentiment="info">Alert</Alert>
</Row>
<ThemeProvider theme={darkMode ? consoleDarkTheme : consoleLightTheme}>
<Row gap="3" templateColumns="9fr 3fr">
<Card>
<Text as="h1" variant="headingSmall">
Classic
</Text>
<Stack direction="row" gap="2">
<Button onClick={() => setCount(prevCount => prevCount + 1)}>
<PlusIcon />
</Button>
<Button onClick={() => setCount(0)}>Reset</Button>
<Button onClick={() => setDarkMode(!darkMode)} sentiment="danger">
Switch Theme
</Button>
</Stack>
<Text as="p" variant="body">
Count:{count}
</Text>
</Card>
<Alert sentiment="info">Alert</Alert>
</Row>
</ThemeProvider>
)
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@
"@ultraviolet/fonts": "workspace:*",
"@ultraviolet/themes": "workspace:*",
"@ultraviolet/ui": "workspace:*",
"@vanilla-extract/vite-plugin": "5.1.1",
"@vitejs/plugin-react": "4.7.0",
"@vitest/coverage-istanbul": "3.2.4",
"@vitest/ui": "3.2.4",
Expand Down
Loading
Loading