mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(ui): add storybook
This commit is contained in:
parent
5140056b59
commit
5902a52e40
@ -11,6 +11,7 @@ module.exports = {
|
|||||||
'plugin:react-hooks/recommended',
|
'plugin:react-hooks/recommended',
|
||||||
'plugin:react/jsx-runtime',
|
'plugin:react/jsx-runtime',
|
||||||
'prettier',
|
'prettier',
|
||||||
|
'plugin:storybook/recommended',
|
||||||
],
|
],
|
||||||
parser: '@typescript-eslint/parser',
|
parser: '@typescript-eslint/parser',
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
|
18
invokeai/frontend/web/.storybook/main.ts
Normal file
18
invokeai/frontend/web/.storybook/main.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import type { StorybookConfig } from '@storybook/react-vite';
|
||||||
|
|
||||||
|
const config: StorybookConfig = {
|
||||||
|
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
|
||||||
|
addons: [
|
||||||
|
'@storybook/addon-links',
|
||||||
|
'@storybook/addon-essentials',
|
||||||
|
'@storybook/addon-interactions',
|
||||||
|
],
|
||||||
|
framework: {
|
||||||
|
name: '@storybook/react-vite',
|
||||||
|
options: {},
|
||||||
|
},
|
||||||
|
docs: {
|
||||||
|
autodocs: 'tag',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
export default config;
|
6
invokeai/frontend/web/.storybook/manager.ts
Normal file
6
invokeai/frontend/web/.storybook/manager.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { addons } from '@storybook/manager-api';
|
||||||
|
import { themes } from '@storybook/theming';
|
||||||
|
|
||||||
|
addons.setConfig({
|
||||||
|
theme: themes.dark,
|
||||||
|
});
|
47
invokeai/frontend/web/.storybook/preview.tsx
Normal file
47
invokeai/frontend/web/.storybook/preview.tsx
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import { Preview } from '@storybook/react';
|
||||||
|
import { themes } from '@storybook/theming';
|
||||||
|
import i18n from 'i18next';
|
||||||
|
import React from 'react';
|
||||||
|
import { initReactI18next } from 'react-i18next';
|
||||||
|
import { Provider } from 'react-redux';
|
||||||
|
import GlobalHotkeys from '../src/app/components/GlobalHotkeys';
|
||||||
|
import ThemeLocaleProvider from '../src/app/components/ThemeLocaleProvider';
|
||||||
|
import { createStore } from '../src/app/store/store';
|
||||||
|
// TODO: Disabled for IDE performance issues with our translation JSON
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
|
import translationEN from '../public/locales/en.json';
|
||||||
|
|
||||||
|
i18n.use(initReactI18next).init({
|
||||||
|
lng: 'en',
|
||||||
|
resources: {
|
||||||
|
en: { translation: translationEN },
|
||||||
|
},
|
||||||
|
debug: true,
|
||||||
|
interpolation: {
|
||||||
|
escapeValue: false,
|
||||||
|
},
|
||||||
|
returnNull: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const store = createStore(undefined, false);
|
||||||
|
|
||||||
|
const preview: Preview = {
|
||||||
|
decorators: [
|
||||||
|
(Story) => (
|
||||||
|
<Provider store={store}>
|
||||||
|
<ThemeLocaleProvider>
|
||||||
|
<GlobalHotkeys />
|
||||||
|
<Story />
|
||||||
|
</ThemeLocaleProvider>
|
||||||
|
</Provider>
|
||||||
|
),
|
||||||
|
],
|
||||||
|
parameters: {
|
||||||
|
docs: {
|
||||||
|
theme: themes.dark,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default preview;
|
@ -33,7 +33,9 @@
|
|||||||
"preinstall": "npx only-allow pnpm",
|
"preinstall": "npx only-allow pnpm",
|
||||||
"postinstall": "patch-package && pnpm run theme",
|
"postinstall": "patch-package && pnpm run theme",
|
||||||
"theme": "chakra-cli tokens src/theme/theme.ts",
|
"theme": "chakra-cli tokens src/theme/theme.ts",
|
||||||
"theme:watch": "chakra-cli tokens src/theme/theme.ts --watch"
|
"theme:watch": "chakra-cli tokens src/theme/theme.ts --watch",
|
||||||
|
"storybook": "storybook dev -p 6006",
|
||||||
|
"build-storybook": "storybook build"
|
||||||
},
|
},
|
||||||
"madge": {
|
"madge": {
|
||||||
"detectiveOptions": {
|
"detectiveOptions": {
|
||||||
@ -116,6 +118,13 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@chakra-ui/cli": "^2.4.1",
|
"@chakra-ui/cli": "^2.4.1",
|
||||||
|
"@storybook/addon-essentials": "^7.6.4",
|
||||||
|
"@storybook/addon-interactions": "^7.6.4",
|
||||||
|
"@storybook/addon-links": "^7.6.4",
|
||||||
|
"@storybook/blocks": "^7.6.4",
|
||||||
|
"@storybook/react": "^7.6.4",
|
||||||
|
"@storybook/react-vite": "^7.6.4",
|
||||||
|
"@storybook/test": "^7.6.4",
|
||||||
"@types/dateformat": "^5.0.2",
|
"@types/dateformat": "^5.0.2",
|
||||||
"@types/lodash-es": "^4.17.11",
|
"@types/lodash-es": "^4.17.11",
|
||||||
"@types/node": "^20.9.0",
|
"@types/node": "^20.9.0",
|
||||||
@ -133,11 +142,13 @@
|
|||||||
"eslint-plugin-path": "^1.2.2",
|
"eslint-plugin-path": "^1.2.2",
|
||||||
"eslint-plugin-react": "^7.33.2",
|
"eslint-plugin-react": "^7.33.2",
|
||||||
"eslint-plugin-react-hooks": "^4.6.0",
|
"eslint-plugin-react-hooks": "^4.6.0",
|
||||||
|
"eslint-plugin-storybook": "^0.6.15",
|
||||||
"madge": "^6.1.0",
|
"madge": "^6.1.0",
|
||||||
"openapi-types": "^12.1.3",
|
"openapi-types": "^12.1.3",
|
||||||
"openapi-typescript": "^6.7.0",
|
"openapi-typescript": "^6.7.0",
|
||||||
"prettier": "^3.0.3",
|
"prettier": "^3.0.3",
|
||||||
"rollup-plugin-visualizer": "^5.9.2",
|
"rollup-plugin-visualizer": "^5.9.2",
|
||||||
|
"storybook": "^7.6.4",
|
||||||
"ts-toolbelt": "^9.6.0",
|
"ts-toolbelt": "^9.6.0",
|
||||||
"typescript": "^5.2.2",
|
"typescript": "^5.2.2",
|
||||||
"vite": "^4.5.1",
|
"vite": "^4.5.1",
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -87,12 +87,13 @@ const idbKeyValDriver: Driver = {
|
|||||||
setItem: (key, value) => set(key, value, idbKeyValStore),
|
setItem: (key, value) => set(key, value, idbKeyValStore),
|
||||||
};
|
};
|
||||||
|
|
||||||
export const createStore = (uniqueStoreKey?: string) =>
|
export const createStore = (uniqueStoreKey?: string, persist = true) =>
|
||||||
configureStore({
|
configureStore({
|
||||||
reducer: rememberedRootReducer,
|
reducer: rememberedRootReducer,
|
||||||
enhancers: (existingEnhancers) => {
|
enhancers: (existingEnhancers) => {
|
||||||
return existingEnhancers
|
const _enhancers = existingEnhancers.concat(autoBatchEnhancer());
|
||||||
.concat(
|
if (persist) {
|
||||||
|
_enhancers.push(
|
||||||
rememberEnhancer(idbKeyValDriver, rememberedKeys, {
|
rememberEnhancer(idbKeyValDriver, rememberedKeys, {
|
||||||
persistDebounce: 300,
|
persistDebounce: 300,
|
||||||
serialize,
|
serialize,
|
||||||
@ -101,8 +102,9 @@ export const createStore = (uniqueStoreKey?: string) =>
|
|||||||
? `${STORAGE_PREFIX}${uniqueStoreKey}-`
|
? `${STORAGE_PREFIX}${uniqueStoreKey}-`
|
||||||
: STORAGE_PREFIX,
|
: STORAGE_PREFIX,
|
||||||
})
|
})
|
||||||
)
|
);
|
||||||
.concat(autoBatchEnhancer());
|
}
|
||||||
|
return _enhancers;
|
||||||
},
|
},
|
||||||
middleware: (getDefaultMiddleware) =>
|
middleware: (getDefaultMiddleware) =>
|
||||||
getDefaultMiddleware({
|
getDefaultMiddleware({
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"*": ["./src/*"]
|
"*": ["./src/*"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": ["src/**/*.ts", "src/**/*.tsx", "*.d.ts"],
|
"include": ["src/**/*.ts", "src/**/*.tsx", "*.d.ts", ".ladle"],
|
||||||
"exclude": ["src/services/fixtures/*", "node_modules", "dist"],
|
"exclude": ["src/services/fixtures/*", "node_modules", "dist"],
|
||||||
"references": [{ "path": "./tsconfig.node.json" }],
|
"references": [{ "path": "./tsconfig.node.json" }],
|
||||||
"ts-node": {
|
"ts-node": {
|
||||||
|
Loading…
Reference in New Issue
Block a user