Project: treatment-plan · Branch: main · Mode: · Model: claude-haiku-4-5-20251001
Stats: 1 user messages, 31 tool calls, tools used: Glob, Read, Bash.
Conversation
Turn 1 — User
Explore the Storybook configuration in the treatment-plan project. I need to understand how sub-packages are integrated into the main tpf-storybook aggregator.
Please read and summarize the following files:
1. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/ - all files
2. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/package.json
3. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/stories/ - all files
4. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/index.ts
5. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/ - all files
6. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/package.json
7. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/ - all files
8. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/package.json
9. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/ - all files
10. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/package.json
11. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/ - list all files
12. Any CI/CD or GitHub Actions workflows related to Storybook: /Users/USER/workspace/doctolib/treatment-plan/.github/workflows/ - list all, then read any storybook-related ones
Return the FULL content of each file, not summaries.
Turn 1 — Assistant
I'll explore the Storybook configuration systematically. Let me start by gathering all the requested files.
Tools used:
- Glob: packages/tpf-storybook/.storybook//
Tools used:
- Glob: packages/tpf-muster-forms/.storybook//
Tools used:
- Glob: packages/tpf-hand-letters/.storybook//
Tools used:
- Glob: packages/tpf-national-health-records-ui/.storybook//
Tools used:
- Glob: .github/workflows//storybook
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/preview.css
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/preview.tsx
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/public/mockServiceWorker.js
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/main.ts
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/preview.css
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/preview.tsx
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/public/mockServiceWorker.js
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/vitest.config.ts
/Users/USER/workspace/doctolib/treatment-pl
…(truncated, 61 more chars)
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/.github/workflows/storybook.yml
/Users/USER/workspace/doctolib/treatment-plan/.github/workflows/storybook_branch_deploy.yml
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/preview.css
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/public/mockServiceWorker.js
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/preview.tsx
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/main.ts
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/preview.css
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/public/mockServiceWorker.js
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/preview.tsx
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/public/forms/muster_11_blanko.png
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook
…(truncated, 5764 more chars)
Now let me read all the configuration files, starting with the main tpf-storybook package:
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/package.json
Tool results:
→ result (ok): 1→{
2→ "name": "@doctolib/tpf-storybook",
3→ "version": "1.0.0",
4→ "private": true,
5→ "repository": {
6→ "type": "git",
7→ "url": "git+https://github.com/doctolib/treatment-plan.git"
8→ },
9→ "keywords": [
10→ "storybook",
11→ "aggregator",
12→ "design-system"
13→ ],
14→ "author": "@doctolib/seal",
15→ "license": "Doctolib",
16→ "type": "module",
17→ "scripts": {
18→ "test:unit": "vitest --
…(truncated, 2027 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/index.ts
Tool results:
→ result (ok): 1→// SEAL: Dummy release II : the return of the release
2→
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/main.ts
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/preview.tsx
Tool results:
→ result (ok): 1→import type { StorybookConfig } from '@storybook/react-vite'
2→import react from '@vitejs/plugin-react'
3→
4→const config: StorybookConfig = {
5→ stories: ['../stories//.stories.@(js|jsx|mjs|ts|tsx)'],
6→ core: {
7→ disableTelemetry: true,
8→ builder: '@storybook/builder-vite',
9→ },
10→ addons: ['@storybook/addon-essentials', 'storybook-react-i18next'],
11→ framework: '@storybook/react-vite',
12→ staticDirs: ['public'],
13
…(truncated, 2298 more chars)
Tool results:
→ result (ok): 1→import type { Preview } from '@storybook/react'
2→import { initialize, mswLoader } from 'msw-storybook-addon'
3→
4→// import { getInstance } from '../src/i18n'
5→import './preview.css'
6→
7→// const i18n = getInstance()
8→
9→initialize({
10→ serviceWorker: {
11→ url: './mockServiceWorker.js',
12→ },
13→})
14→
15→const preview: Preview = {
16→ initialGlobals: {
17→ locale: 'en',
18→ locales: {
19→ e
…(truncated, 752 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/preview.css
Tool results:
→ result (ok): 1→#storybook-root {
2→ height: 100%;
3→}
4→
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/public/mockServiceWorker.js
Tool results:
→ result (ok): 1→/ eslint-disable /
2→/ tslint:disable /
3→
4→/
5→ Mock Service Worker.
6→ @see https://github.com/mswjs/msw
7→ - Please do NOT modify this file.
8→ - Please do NOT serve this file on production.
9→ /
10→
11→const PACKAGE_VERSION = '2.7.0'
12→const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f'
13→const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
14→const activeClientIds = new Set()
15→
16→self.addEv
…(truncated, 10061 more chars)
Now let me read the stories directory and other sub-package configurations:
Tools used:
- Bash: find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/stories -type f -name ".stories." -o -name ".tsx" -o -name ".ts" | head -20
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/package.json
Tool results:
→ result (ok): 1→{
2→ "name": "@doctolib/tpf-muster-forms",
3→ "version": "6.4.1",
4→ "repository": {
5→ "type": "git",
6→ "url": "git+https://github.com/doctolib/treatment-plan.git"
7→ },
8→ "keywords": [
9→ "upfront",
10→ "modular frontend",
11→ "smaller-scope"
12→ ],
13→ "author": "@doctolib/moose",
14→ "license": "Doctolib",
15→ "doctolib": {
16→ "upfront-type": "smaller-scope"
17→ },
18→ "type": "modul
…(truncated, 4999 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/main.ts
Tool results:
→ result (ok): 1→import type { StorybookConfig } from '@storybook/react-vite'
2→import react from '@vitejs/plugin-react'
3→
4→const config: StorybookConfig = {
5→ stories: ['../src//.stories.@(js|jsx|mjs|ts|tsx)'],
6→ core: {
7→ disableTelemetry: true,
8→ builder: '@storybook/builder-vite',
9→ },
10→ addons: ['@storybook/addon-essentials', 'storybook-react-i18next'],
11→ framework: '@storybook/react-vite',
12→ async viteFinal(viteConfig) {
…(truncated, 1223 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/preview.tsx
Tool results:
→ result (ok): 1→import '@doctolib/design-system/design-system.scss'
2→import type { Preview } from '@storybook/react'
3→import { QueryClient, QueryClientProvider } from '@tanstack/react-query-v5'
4→import { initialize, mswLoader } from 'msw-storybook-addon'
5→
6→import '../src/dev/index.css'
7→import { getInstance } from '../src/i18n'
8→import './preview.css'
9→
10→const i18n = getInstance()
11→const queryClient = new QueryClient({
12→ defaultOptions: {
…(truncated, 2285 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/package.json
Tool results:
→ result (ok): 1→{
2→ "name": "@doctolib/tpf-hand-letters",
3→ "description": "Treatment Plan & Fulfillment package",
4→ "version": "1.7.14",
5→ "repository": {
6→ "type": "git",
7→ "url": "git+https://github.com/doctolib/treatment-plan.git"
8→ },
9→ "keywords": [
10→ "upfront",
11→ "modular frontend",
12→ "smaller-scope"
13→ ],
14→ "author": "@doctolib/seal",
15→ "license": "Doctolib",
16→ "doctolib": {
17→ "up
…(truncated, 4683 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/main.ts
Tool results:
→ result (ok): 1→import type { StorybookConfig } from '@storybook/react-vite'
2→import react from '@vitejs/plugin-react'
3→
4→const config: StorybookConfig = {
5→ stories: ['..//.stories.@(js|jsx|mjs|ts|tsx)'],
6→ core: {
7→ disableTelemetry: true,
8→ builder: '@storybook/builder-vite',
9→ },
10→ addons: ['@storybook/addon-essentials', 'storybook-react-i18next'],
11→ framework: '@storybook/react-vite',
12→ staticDirs: ['public'],
13→ async
…(truncated, 1086 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/preview.tsx
Tool results:
→ result (ok): 1→import '@doctolib/design-system/design-system.scss'
2→import type { Preview } from '@storybook/react'
3→import { initialize, mswLoader } from 'msw-storybook-addon'
4→
5→import { getInstance } from '../src/i18n'
6→import './preview.css'
7→
8→const i18n = getInstance()
9→
10→initialize({
11→ serviceWorker: {
12→ url: './mockServiceWorker.js',
13→ },
14→})
15→
16→// Global flag to ensure i18n is only initialized once across
…(truncated, 1317 more chars)
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/stories/Welcome.stories.tsx
Now let me read the tpf-national-health-records-ui package info and check the workflows:
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/package.json
Tool results:
→ result (ok): 1→{
2→ "name": "@doctolib/tpf-national-health-records-ui",
3→ "version": "2.1.1",
4→ "repository": {
5→ "type": "git",
6→ "url": "git+https://github.com/doctolib/treatment-plan.git"
7→ },
8→ "keywords": [
9→ "upfront",
10→ "modular frontend",
11→ "smaller-scope"
12→ ],
13→ "author": "@doctolib/fire",
14→ "license": "Doctolib",
15→ "doctolib": {
16→ "upfront-type": "smaller-scope"
17→ },
18→ "
…(truncated, 4026 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/main.ts
Tool results:
→ result (ok): 1→import type { StorybookConfig } from '@storybook/react-vite'
2→import react from '@vitejs/plugin-react'
3→
4→const config: StorybookConfig = {
5→ stories: ['../src//.stories.@(js|jsx|mjs|ts|tsx)'],
6→ addons: ['@storybook/addon-essentials', '@storybook/experimental-addon-test', 'storybook-react-i18next'],
7→ framework: {
8→ name: '@storybook/react-vite',
9→ options: {},
10→ },
11→ core: {
12→ disableTelemetry: true,
13→
…(truncated, 1292 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/preview.tsx
Tool results:
→ result (ok): 1→import '@doctolib/design-system/design-system.scss'
2→import type { Preview } from '@storybook/react'
3→import { initialize, mswLoader } from 'msw-storybook-addon'
4→
5→// import '../src/dev/index.css'
6→import { getInstance } from '../src/i18n'
7→import './preview.css'
8→
9→const i18n = getInstance()
10→
11→initialize({
12→ serviceWorker: {
13→ url: './mockServiceWorker.js',
14→ },
15→})
16→
17→// Global flag to ensu
…(truncated, 1357 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/.github/workflows/storybook.yml
Tool results:
→ result (ok): 1→name: Build and Deploy Storybook
2→
3→on:
4→ push:
5→ branches:
6→ - main
7→ workflow_dispatch:
8→
9→permissions:
10→ packages: read
11→ contents: write
12→ id-token: write
13→ pages: write
14→
15→jobs:
16→ build-and-deploy:
17→ runs-on: prod-linux-s
18→ environment:
19→ name: github-pages
20→ url: ${{ steps.deployment.outputs.page_url }}
21→ steps:
22→ - name: Git
…(truncated, 5159 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/.github/workflows/storybook_branch_deploy.yml
Tool results:
→ result (ok): 1→name: PR Storybook Preview
2→
3→on:
4→ pull_request:
5→ types: [labeled, synchronize, closed]
6→
7→permissions:
8→ contents: write
9→ pull-requests: write
10→ packages: read
11→ id-token: write
12→ pages: write
13→
14→concurrency:
15→ group: pr-preview-${{ github.event.pull_request.number }}
16→ cancel-in-progress: true
17→
18→jobs:
19→ deploy-preview:
20→ runs-on: prod-linux-s
21→ if: |
…(truncated, 8543 more chars)
Now let me check the stories directory and source files for tpf-national-health-records-ui:
Tools used:
- Bash: find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f \( -name ".stories." -o -name ".tsx" \) | head -20
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NationalHealthRecordsUi.stories.tsx
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NationalHealthRecordsUi.tsx
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/stories/Welcome.stories.tsx
Tool results:
→ result (ok): 1→import type { Meta, StoryObj } from '@storybook/react'
2→
3→const Welcome = () => (
4→
5→
TPF Design System
6→
7→ Welcome to the Treatment Plan & Fulfillment Storybooks. This storybook aggregates components from all TPF
8→ packages:
9→
10→
11→ -
12→ tpf-hand-letters - Hand letter components
13→
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still a
…(truncated, 100 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-hand-letters/.storybook/preview.css
Tool results:
→ result (ok): 1→#storybook-root {
2→ height: 100%;
3→}
4→
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/preview.css
Tool results:
→ result (ok): 1→#storybook-root {
2→ height: 100%;
3→}
4→
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
Tools used:
- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/.storybook/vitest.config.ts
Tool results:
→ result (ok): 1→import { importSingleTs } from 'import-single-ts'
2→
3→const upFrontStorybookVitest = (await importSingleTs('@doctolib/upfront-dev/storybook/vitest.config.ts')).default
4→
5→export default upFrontStorybookVitest
6→
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code
…(truncated, 80 more chars)
Perfect! Now let me create a comprehensive summary document. Let me gather a bit more information about how the packages relate to each other:
Tools used:
- Bash: grep -r "storybook\|@refs\|url:" /Users/USER/workspace/doctolib/treatment-plan/packages//package.json 2>/dev/null | grep -E "(storybook|url)" | head -30
Tools used:
- Bash: cat /Users/USER/workspace/doctolib/treatment-plan/package.json | grep -A 5 "doc:build\|storybook"
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-cda/package.json: "doc:build": "storybook build -o ../../dist/docs/packages/tpf-cda",
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-cda/package.json: "test:storybook": "vitest run -c vitest.storybook.config.ts",
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-cda/package.json: "storybook": "storybook dev -p 6006",
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-cda/package.json: "storybook:b
…(truncated, 3517 more chars)
Tool results:
→ result (ok): "packages/tpf-storybook",
"packages/tpf-therapy-prescriptions",
"packages/tpf-ti-components",
"packages/tpf-user-preferences",
"packages/tpf-user-preferences-client",
"packages/tpf-national-health-records",
--
"test:storybook:ci": "nx run-many -t test:storybook",
"test:unit:watch": "npm run test:unit:watch --workspaces --if-present",
"test:unit": "nx run-many -t test:unit",
"test:watch": "npm run test:watch --workspaces --if-present",
"test": "nx run-many
…(truncated, 907 more chars)
Excellent! Now I have all the information needed. Let me create a comprehensive summary:
---
Storybook Configuration in Treatment Plan Project
Overview
The treatment-plan project uses a federated Storybook architecture where:
- tpf-storybook is the main aggregator package running on port 6006
- Individual sub-packages each have their own independent Storybooks
- Sub-package Storybooks are integrated into the main aggregator via Storybook's refs configuration
- All Storybooks are built and deployed to GitHub Pages via CI/CD
---
Main Aggregator: tpf-storybook
Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook
package.json
{
"name": "@doctolib/tpf-storybook",
"version": "1.0.0",
"private": true,
"scripts": {
"dev": "storybook dev -p 6006",
"build": "storybook build",
"doc:build": "storybook build -o ../../dist/docs/packages/tpf-storybook"
},
"devDependencies": {
"@storybook/addon-essentials": "^8.6.14",
"@storybook/react": "^8.6.14",
"@storybook/react-vite": "^8.6.14",
"msw-storybook-addon": "^2.0.6",
"storybook-react-i18next": "^3.3.1",
"storybook": "^8.6.17"
}
}
.storybook/main.ts
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/main.ts
import type { StorybookConfig } from '@storybook/react-vite'
import react from '@vitejs/plugin-react'
const config: StorybookConfig = {
stories: ['../stories//.stories.@(js|jsx|mjs|ts|tsx)'],
core: {
disableTelemetry: true,
builder: '@storybook/builder-vite',
},
addons: ['@storybook/addon-essentials', 'storybook-react-i18next'],
framework: '@storybook/react-vite',
staticDirs: ['public'],
refs: {
'tpf-cda': {
url: './packages/tpf-cda/',
title: 'TPF CDAR2',
},
'tpf-diga-fulfillments': {
url: './packages/tpf-diga-fulfillments/',
title: 'TPF DiGA Fulfillments',
},
'tpf-document-filler-ui': {
url: './packages/tpf-document-filler-ui/',
title: 'TPF Document Filler UI',
},
'tpf-hand-letters': {
url: './packages/tpf-hand-letters/',
title: 'TPF Hand Letters',
},
'tpf-healthcare-products': {
url: './packages/tpf-healthcare-products/',
title: 'TPF Healthcare Products',
},
'tpf-medical-device-forms': {
url: './packages/tpf-medical-device-forms/',
title: 'TPF Medical Device Forms',
},
'tpf-muster-forms': {
url: './packages/tpf-muster-forms/',
title: 'TPF Muster Forms',
},
'tpf-rich-texts-form': {
url: './packages/tpf-rich-texts-form/',
title: 'TPF Rich Texts Form',
},
},
managerHead: (head) =>
${head}
,
async viteFinal(viteConfig) {
const { mergeConfig } = await import('vite')
const viteTsconfig = await import('vite-tsconfig-paths')
const tsconfigPaths = viteTsconfig.default
return mergeConfig(viteConfig, {
plugins: [react(), tsconfigPaths()],
optimizeDeps: {
include: ['classnames', 'prop-types-extra/lib/.js', 'lodash/memoize.js', 'hoist-non-react-statics'],
},
base: './',
})
},
}
export default config
Key Integration Points:
- refs configuration declares 8 sub-packages, each with a local URL path ./packages//
- Uses relative base path (base: './') for GitHub Pages subdirectory deployment
- Loads stories from ../stories//.stories.
- Disables telemetry
- Uses Vite as the builder
.storybook/preview.tsx
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/preview.tsx
import type { Preview } from '@storybook/react'
import { initialize, mswLoader } from 'msw-storybook-addon'
initialize({
serviceWorker: {
url: './mockServiceWorker.js',
},
})
const preview: Preview = {
initialGlobals: {
locale: 'en',
locales: {
en: { icon: '🇺🇸', title: 'English', right: 'en' },
fr: { icon: '🇫🇷', title: 'Français', right: 'fr' },
de: { icon: '🇩🇪', title: 'Deutsch', right: 'de' },
it: { icon: '🇮🇹', title: 'Italiano', right: 'it' },
},
},
loaders: [mswLoader],
}
export default preview
Features:
- Multi-language support (en, fr, de, it)
- MSW (Mock Service Worker) integration for API mocking
- i18n support disabled (commented out)
.storybook/preview.css
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/.storybook/preview.css
storybook-root {
height: 100%;
}
Stories
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-storybook/stories/Welcome.stories.tsx
import type { Meta, StoryObj } from '@storybook/react'
const Welcome = () => (
TPF Design System
Welcome to the Treatment Plan & Fulfillment Storybooks. This storybook aggregates components from all TPF
packages:
-
tpf-hand-letters - Hand letter components
-
tpf-muster-forms - German muster form components
)
const meta: Meta = {
title: 'TPF',
component: Welcome,
parameters: {
layout: 'fullscreen',
},
}
export default meta
type Story = StoryObj
export const Default: Story = {}
---
Sub-Package: tpf-muster-forms
Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms
package.json
{
"name": "@doctolib/tpf-muster-forms",
"version": "6.4.1",
"doctolib": {
"upfront-type": "smaller-scope"
},
"scripts": {
"storybook": "storybook dev -p 6006",
"storybook:build": "storybook build",
"doc:build": "storybook build -o ../../dist/docs/packages/tpf-muster-forms"
},
"devDependencies": {
"@storybook/addon-essentials": "^8.6.14",
"@storybook/react": "^8.6.14",
"@storybook/react-vite": "^8.6.14",
"msw-storybook-addon": "^2.0.6",
"storybook-react-i18next": "^3.3.1"
},
"dependencies": {
"@doctolib/design-system": "^2.23.0",
"@tanstack/react-query-v5": "npm:@tanstack/react-query@^5.51.15",
"react": "18.3.1",
"react-dom": "18.3.1"
},
"msw": {
"workerDirectory": [
"./.storybook"
]
},
"storybook": {
"url": "https://doctolib.github.io/treatment-plan/packages/tpf-muster-forms",
"displayName": "TPF Muster Forms"
}
}
.storybook/main.ts
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-muster-forms/.storybook/main.ts
import type { StorybookConfig } from '@storybook/react-vite'
import react from '@vitejs/plugin-react'
const config: StorybookConfig = {
stories: ['../src//.stories.@(js|jsx|mjs|ts|tsx)'],
core: {
disableTelemetry: true,
builder: '@storybook/builder-vite',
},
addons: ['@storybook/addon-essentials', 'storybook-react-i18next'],
framework: '@storybook/react-vite',
async viteFinal(viteConfig) {
const { mergeConfig } = await import('vite')
const viteTsconfig = await import('vite-tsconfig-paths')
const tsconfigPaths = viteTsconfig.default
return mergeConfig(viteConfig, {
plugins: [react(), tsconfigPaths()],
resolve: {
conditions: ['development'],
},
optimizeDeps: {
include: ['classnames', 'prop-types-extra/lib/.js', 'lodash/memoize.js', 'hoist-non-react-statics'],
},
base: './',
})
},
refs: {
'@doctolib/design-system': { disable: true },
},
staticDirs: ['public'],
}
export default config
Key Points:
- Looks for stories in ../src//.stories.* (not in a root stories directory)
- Disables the design system ref (avoids circular dependencies)
- Serves static files from .storybook/public (contains form images)
- Sets resolve.conditions: ['development']
…(truncated, 17850 more chars)