Project: doctolib-doctolib · Branch: master · Mode: · Model: claude-haiku-4-5-20251001 Stats: 1 user messages, 24 tool calls, tools used: Bash, Read. Conversation Turn 1 — User Explore the Oxygen design system at /Users/USER/workspace/doctolib/oxygen/packages to find all available UI components. I need a comprehensive list of components with their: 1. Component name (exported identifier) 2. File path 3. Brief description of what it does (from prop types or JSDoc) 4. Key props (especially any related to: tables, modals, badges, buttons, forms, filters, checkboxes, date pickers, selects, pagination) Focus especially on components that would be useful for: - Modal/dialog containers - Data tables with sortable columns and row selection - Status badges/chips/tags - Action buttons (with disabled state) - Filter panels (checkboxes, date range pickers, select dropdowns) - Error banners/alerts - Loading states/spinners - Pagination controls - Headers/titles Look in /Users/USER/workspace/doctolib/oxygen/packages//src/ and find the main index.ts exports. Please be thorough - list ALL component names that are exported from the design system's main index files. Also note if there's a Storybook or README with usage examples. Turn 1 — Assistant I'll help you explore the Oxygen design system and compile a comprehensive list of UI components. Let me start by examining the package structure. Tools used: - Bash: find /Users/USER/workspace/doctolib/oxygen/packages -type f -name "index.ts" | head -20 Tool results: → result (ok): /Users/USER/workspace/doctolib/oxygen/packages/core/src/tokens/index.ts /Users/USER/workspace/doctolib/oxygen/packages/toast/src/components/Toast/index.ts /Users/USER/workspace/doctolib/oxygen/packages/toast/src/components/ToastCard/index.ts /Users/USER/workspace/doctolib/oxygen/packages/toast/src/index.ts /Users/USER/workspace/doctolib/oxygen/packages/storybook-config/components/index.ts /Users/USER/workspace/doctolib/oxygen/packages/codemods/src/bin/index.ts /Users/USER/workspace/doctolib/oxyg …(truncated, 117 more chars) Let me explore the package structure more systematically. Tools used: - Bash: ls -la /Users/USER/workspace/doctolib/oxygen/packages/ Tool results: → result (ok): drwxr-xr-x clertonra staff 384 B Wed Feb 25 13:12:45 2026 . drwxr-xr-x clertonra staff 1.3 KB Wed Feb 25 13:12:45 2026 .. drwxr-xr-x clertonra staff 608 B Wed Feb 25 13:12:44 2026 b2b drwxr-xr-x clertonra staff 576 B Wed Feb 25 13:12:44 2026 b2c drwxr-xr-x clertonra staff 448 B Wed Feb 25 13:12:44 2026 codemods drwxr-xr-x clertonra staff 832 B Wed Feb 25 13:12:44 2026 core drwxr-xr-x clertonra staff 480 B Wed Feb 25 13:12:45 2026 icons drwxr-xr-x clertonra staff 416 B Wed Feb 25 13:12:45 …(truncated, 303 more chars) Now let me check the main component packages. Let me explore each one: Tools used: - Bash: find /Users/USER/workspace/doctolib/oxygen/packages -type d -maxdepth 2 -name src Tool results: → result (ok): /Users/USER/workspace/doctolib/oxygen/packages/illustrative-icons/src /Users/USER/workspace/doctolib/oxygen/packages/core/src /Users/USER/workspace/doctolib/oxygen/packages/toast/src /Users/USER/workspace/doctolib/oxygen/packages/b2b/src /Users/USER/workspace/doctolib/oxygen/packages/b2c/src /Users/USER/workspace/doctolib/oxygen/packages/icons/src /Users/USER/workspace/doctolib/oxygen/packages/tokens/src /Users/USER/workspace/doctolib/oxygen/packages/codemods/src Let me check the main index files for each package: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src Tool results: → result (ERROR): EISDIR: illegal operation on a directory, read '/Users/USER/workspace/doctolib/oxygen/packages/core/src' Tools used: - Bash: find /Users/USER/workspace/doctolib/oxygen/packages/core/src -maxdepth 1 -name "index.ts" -o -name "index.tsx" Tool results: → result (ok) Tools used: - Bash: ls -la /Users/USER/workspace/doctolib/oxygen/packages/core/src/ | head -30 Tool results: → result (ok): drwxr-xr-x clertonra staff 1.1 KB Wed Feb 25 13:12:44 2026 . drwxr-xr-x clertonra staff 832 B Wed Feb 25 13:12:44 2026 .. drwxr-xr-x clertonra staff 224 B Wed Feb 25 13:12:44 2026 a11y drwxr-xr-x clertonra staff 256 B Wed Feb 25 13:12:44 2026 actions drwxr-xr-x clertonra staff 96 B Wed Feb 25 13:12:44 2026 collection drwxr-xr-x clertonra staff 256 B Wed Feb 25 13:12:44 2026 common .rw-r--r-- clertonra staff 45 B Wed Feb 25 13:12:44 2026 constants.ts drwxr-xr-x clertonra staff 832 B Wed …(truncated, 1604 more chars) Good! Now let me check for the main exports. Let me look for index files in the core package: Tools used: - Bash: find /Users/USER/workspace/doctolib/oxygen/packages/core -name "index.ts" -o -name "index.tsx" | sort Tool results: → result (ok): /Users/USER/workspace/doctolib/oxygen/packages/core/src/tokens/index.ts Let me check if there's a main entry point at the root level: Tools used: - Bash: ls -la /Users/USER/workspace/doctolib/oxygen/packages/core/ | grep -E "index|package" Tool results: → result (ok): .rw-r--r-- clertonra staff 41 KB Wed Feb 25 13:12:44 2026 package.json Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/package.json Tool results: → result (ok): 1→{ 2→ "name": "@doctolib/design-system", 3→ "version": "2.27.2", 4→ "license": "Doctolib", 5→ "description": "Doctolib's design system", 6→ "type": "module", 7→ "scripts": { 8→ "clean": "rm -rf node_modules/", 9→ "build": "rimraf dist/ && npm run -s sync-style-files && tsc --project tsconfig.build.json && tsc-alias --project tsconfig.build.json", 10→ "check-exports": "tsx ../../scripts/check-exports.ts", 11→ "dev": "nx run storyb …(truncated, 48648 more chars) Perfect! Now I have the main exports. Let me check the source files for component descriptions. Let me check a few key components to get their descriptions: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Table/Table.tsx (1–50) Tool results: → result (ok): 1→import './Table.scss' 2→ 3→import classNames from 'classnames' 4→import type { ComponentPropsWithoutRef, ReactNode } from 'react' 5→ 6→import type { SkeletonLoaderProps } from './TableSkeletonLoader' 7→import { TableSkeletonLoader } from './TableSkeletonLoader' 8→ 9→type Props = { 10→ fixedLayout?: boolean | undefined 11→ className?: string | undefined 12→ children?: ReactNode 13→ loading?: boolean | undefined 14→ skeletonLoaderP …(truncated, 1458 more chars) Excellent! Now let me check some more components to get their prop descriptions. Let me check Modal, Dialog, Badge, Button, etc.: Tools used: - Bash: head -50 /Users/USER/workspace/doctolib/oxygen/packages/core/src/overlays/Modal/Modal.tsx Tool results: → result (ok): import { forwardRef, useRef, type ReactElement, type ReactEventHandler, type ReactNode, type SyntheticEvent, } from 'react' import MaterialModal from '@mui/material/Modal' import classNames from 'classnames' import { v4 as uuidv4 } from 'uuid' import { _Transition as Transition } from '../_ModalTransition/_ModalTransition' import { IconButton } from '../../actions/IconButton/v2/IconButton' import { Button } from '../../actions/Button/Button' import type { DrawerProps } from '../Drawe …(truncated, 1023 more chars) Let me gather prop info by checking several component files systematically: Tools used: - Bash: grep -n "^\s/\\" /Users/USER/workspace/doctolib/oxygen/packages/core/src/actions/Button/Button.tsx | head -5 Tool results: → result (ok): 102:/ Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/actions/Button/Button.tsx (1–130) Tool results: → result (ok): 1→import './Button.scss' 2→ 3→import classNames from 'classnames' 4→import { 5→ type ComponentPropsWithoutRef, 6→ type ComponentType, 7→ forwardRef, 8→ type MouseEventHandler, 9→ type TouchEventHandler, 10→} from 'react' 11→import type { DesignSystemIconComponent } from '@doctolib/design-system-icons' 12→import { Link } from 'react-router-dom' 13→ 14→import { getIconByNameOrComponent } from '../../helpers/icons' 15→import type …(truncated, 4605 more chars) Let me now systematically gather component info by looking at multiple source files. Let me check several components in parallel: Tools used: - Bash: for file in Badge Dialog Checkbox Select Pagination Alert EmptyState; do echo "=== $file ==="; head -40 /Users/USER/workspace/doctolib/oxygen/packages/core/src//$file/$file.tsx 2>/dev/null | gre …(truncated, 34 more chars) Tool results: → result (ok): === Badge === / A Badge is a small visual indicator component used to show notifications counts and/or highlight new or updated content. / === Dialog === / A Dialog is a modal window that appears above the page content to deliver important information or request user confirmation for a specific action. To capture the user's full attention, the page content is inaccessible and hidden behind a Backdrop. === Checkbox === === Select === / display mode of the field / uiStyle?: ' …(truncated, 306 more chars) Good! Now let me systematically extract the full component list and their descriptions. Let me read multiple component source files: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge/Badge.tsx (1–60) Tool results: → result (ok): 1→import type { ReactNode } from 'react' 2→import classNames from 'classnames' 3→import { Span } from '../text/Span' 4→import './Badge.scss' 5→ 6→export type BadgeStyle = 7→ | 'info' 8→ | 'error' 9→ | 'success' 10→ | 'warning' 11→ | 'dark-info' 12→ | 'mute' 13→ | 'no-background' 14→ | 'neutral' 15→ | 'disabled' 16→ 17→export type BadgeProps = { 18→ walkmeId?: string | undefined 19→ 'aria-label'?: string | …(truncated, 1648 more chars) Let me now check additional important components and create a comprehensive list. Let me check more files in parallel: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/overlays/Dialog/Dialog.tsx (1–60) Tool results: → result (ok): 1→import './Dialog.scss' 2→ 3→import classNames from 'classnames' 4→import type { DesignSystemIconComponent } from '@doctolib/design-system-icons' 5→import type { ReactEventHandler, ReactNode } from 'react' 6→ 7→import { Button } from '../../actions/Button/Button' 8→import type { IconName } from '../../dataDisplay/Icon/Icon' 9→import { Modal, type ModalProps } from '../Modal/Modal' 10→import { ModalBody } from '../ModalBody/ModalBody' 11→import { M …(truncated, 2103 more chars) Let me check a few more critical components and gather more information about props: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/feedbacks/Alert/Alert.tsx (1–80) Tool results: → result (ok): 1→import './Alert.scss' 2→ 3→import classNames from 'classnames' 4→import type { DesignSystemIconComponent } from '@doctolib/design-system-icons' 5→import type { MouseEventHandler, ReactElement, ReactNode } from 'react' 6→ 7→import { Button } from '../../actions/Button/Button' 8→import { getIconByNameOrComponent } from '../../helpers/icons' 9→import { IconButton } from '../../actions/IconButton/v2/IconButton' 10→import type { IconName } from '../../dat …(truncated, 3027 more chars) Let me check the forms components now: Tools used: - Bash: head -50 /Users/USER/workspace/doctolib/oxygen/packages/core/src/forms/Checkbox/Checkbox.tsx | grep -A 5 "/\\" Tool results: → result (ok) Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/forms/Checkbox/Checkbox.tsx (1–70) Tool results: → result (ok): 1→import './Checkbox.scss' 2→ 3→import type { ChangeEventHandler, FocusEventHandler, MouseEventHandler, ReactNode } from 'react' 4→import classNames from 'classnames' 5→import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react' 6→import { v4 as uuidv4 } from 'uuid' 7→ 8→import { computeAriaDescribedBy } from '../private/aria' 9→import type { FieldState } from '../private/Field' 10→import { Icon } from '../../dataDisplay/Icon/Ic …(truncated, 2468 more chars) Now let me check pagination and a few more important components: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/navigation/Pagination/Pagination.tsx (1–70) Tool results: → result (ok): 1→import './Pagination.scss' 2→ 3→import type { MouseEvent, MouseEventHandler, ReactNode } from 'react' 4→ 5→import { Button } from '../../actions/Button/Button' 6→import { Icon } from '../../dataDisplay/Icon/Icon' 7→import classNames from 'classnames' 8→import { range } from 'lodash-es' 9→import { useTranslations } from '../../i18n/useTranslations' 10→ 11→type PaginationButtonProps = { 12→ children?: ReactNode 13→ active?: boolean 14 …(truncated, 1944 more chars) Let me check a few more components and also look for the Storybook documentation: Tools used: - Bash: find /Users/USER/workspace/doctolib/oxygen/packages/core -name ".storybook" -o -name "README*" | head -10 Tool results: → result (ok): /Users/USER/workspace/doctolib/oxygen/packages/core/.storybook /Users/USER/workspace/doctolib/oxygen/packages/core/README.md /Users/USER/workspace/doctolib/oxygen/packages/core/public/emoji_picker_data/README.md /Users/USER/workspace/doctolib/oxygen/packages/core/src/README.mdx Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/README.md Tool results: → result (ok): 1→# Oxygen 2→ 3→## Storybook 4→ 5→- Last release 6→- 🔐 Next release 7→ 8→## Contributing 9→ 10→Run this command line at the root to launch Storybook: 11→ 12→ 13→npm run dev 14→ 15→ 16→Add a new story to the component you want to work on. 17→ 18→For instance, if you're making changes to the Textarea component, you c …(truncated, 5461 more chars) Great! Now let me check Select and a few more form components to complete the picture: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/forms/Select/Select.tsx (1–80) Tool results: → result (ok): 1→import type { ChangeEventHandler, ComponentProps, ReactNode } from 'react' 2→import { forwardRef, useId, useMemo } from 'react' 3→ 4→import { computeAriaDescribedBy } from '../private/aria' 5→import type { ContextualPopover } from '../../overlays/ContextualPopover/ContextualPopover' 6→import type { DataAttribute } from '../../common/DataAttribute/DataAttribute' 7→import type { FieldState } from '../private/Field' 8→import { getFieldInputId, getFieldLabelId } …(truncated, 3490 more chars) Perfect! Now let me quickly check a few more key components and then compile the comprehensive list: Tools used: - Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/feedbacks/SpinnerLoader/SpinnerLoader.tsx (1–50) Tool results: → result (ok): 1→import type { ReactElement } from 'react' 2→import classNames from 'classnames' 3→import './SpinnerLoader.scss' 4→import { useTranslations } from '../../i18n/useTranslations' 5→ 6→const SPINNER_SIZES = { xsmall: 8, small: 12, medium: 16, large: 24 } as const 7→const STROKE_WIDTH = 2 8→ 9→export type SpinnerSize = keyof typeof SPINNER_SIZES 10→ 11→const viewboxSize = (size: SpinnerSize): string => 0 0 ${SPINNER_SIZES[size] + 1} ${SPINNER_SIZES[si …(truncated, 1867 more chars) Perfect! Now I have enough information. Let me compile the comprehensive list of all Oxygen design system components based on the package.json exports I found earlier. Let me create a detailed report for the user: Comprehensive Oxygen Design System Component List I've analyzed the Oxygen design system at /Users/USER/workspace/doctolib/oxygen/packages/core/ and extracted all exported components. Here's the complete list organized by category: OVERVIEW - Package Name: @doctolib/design-system - Version: 2.27.2 - Storybook: https://doctolib.github.io/storybook/ (Last release) | https://doctolib.github.io/storybook-ephemerals/next (Next release) - Source Location: /Users/USER/workspace/doctolib/oxygen/packages/core/src/ - Setup: Run npm run dev at the root to launch Storybook locally on port 9001 --- COMPONENT CATEGORIES ACTIONS (Button-like Components) 1. Button (/dist/actions/Button/Button.js) - Allows users to perform actions in pages, areas, modals - Props: uiStyle (primary, primary-danger, secondary, tertiary-primary, tertiary-danger, tertiary-neutral, small-primary, small-neutral, small-danger, small-white, link-primary, link-danger, neutral), size (small, medium), disabled, loading, success, leftIcon, rightIcon, block, circle, square, floating - Status: Deprecated - use Button/v2 instead 2. Button/v2 (/dist/actions/Button/v2/Button.js) - Modern button component version 3. IconButton (/dist/actions/IconButton/IconButton.js) - Button displaying only an icon 4. IconButton/v2 (/dist/actions/IconButton/v2/IconButton.js) - Modern icon button version 5. ButtonFloating (/dist/actions/ButtonFloating/ButtonFloating.js) - Floating action button 6. ButtonWithLinkStyle (/dist/actions/ButtonWithLinkStyle/ButtonWithLinkStyle.js) - Button styled as a link 7. Dropdown (/dist/actions/Dropdown/Dropdown.js) - Dropdown menu component 8. DropdownTrigger (/dist/actions/Dropdown/DropdownTrigger.js) - Trigger for dropdown menus 9. Switch (/dist/actions/Switch/Switch.js) - Toggle switch component - Props: checked, disabled, onChange --- DATA DISPLAY (Tables, Cards, Badges, Text) 1. Table (/dist/dataDisplay/Table/Table.js) - Displays sets of data in tabular format - Props: fixedLayout, loading, skeletonLoaderProps, size (xsmall, small, medium) 2. TableBody (/dist/dataDisplay/Table/TableBody.js) - Table body container 3. TableHead (/dist/dataDisplay/Table/TableHead.js) - Table header container 4. TableRow (/dist/dataDisplay/Table/TableRow.js) - Table row component 5. TableCell (/dist/dataDisplay/Table/TableCell.js) - Table cell component 6. TableHeadCell (/dist/dataDisplay/Table/TableHeadCell.js) - Table header cell component 7. TableHeadSelectAllCell (/dist/dataDisplay/Table/TableHeadSelectAllCell.js) - Checkbox cell for selecting all rows 8. TableSelectCell (/dist/dataDisplay/Table/TableSelectCell.js) - Checkbox cell for row selection 9. TableSkeletonLoader (/dist/dataDisplay/Table/TableSkeletonLoader.js) - Loading skeleton for tables 10. BulkSelect (/dist/dataDisplay/Table/Utils/BulkSelect.js) - Utility for bulk row selection 11. useTableSort (/dist/dataDisplay/Table/hooks/useTableSort.js) - Hook for handling sortable columns 12. Badge (/dist/dataDisplay/Badge/Badge.js) - Small visual indicator for notifications/highlights - Props: uiStyle (info, error, success, warning, dark-info, mute, no-background, neutral, disabled), size (small, medium, large), children 13. Pill (/dist/dataDisplay/Pill/Pill.js) - Pill-shaped badge component 14. Card (/dist/dataDisplay/Card/Card.js) - Generic card container 15. CardSolid (/dist/dataDisplay/Card/v2/CardSolid/CardSolid.js) - Solid card variant (v2) 16. CardElevated (/dist/dataDisplay/Card/v2/CardElevated/CardElevated.js) - Elevated card variant (v2) 17. CardOutlined (/dist/dataDisplay/Card/v2/CardOutlined/CardOutlined.js) - Outlined card variant (v2) 18. CardCollapsible (/dist/dataDisplay/CardCollapsible/CardCollapsible.js) - Collapsible card component 19. Avatar (/dist/dataDisplay/Avatar/Avatar.js) - User avatar component 20. AvatarGroup (/dist/dataDisplay/AvatarGroup/AvatarGroup.js) - Group of avatars 21. Accordion (/dist/dataDisplay/Accordion/Accordion.js) - Expandable/collapsible sections 22. Divider (/dist/dataDisplay/Divider/Divider.js) - Visual separator 23. Icon (/dist/dataDisplay/Icon/Icon.js) - Icon display component 24. IllustrativeIcon (/dist/dataDisplay/IllustrativeIcon/IllustrativeIcon.js) - Large illustrative icons 25. Image (/dist/dataDisplay/Image/Image.js) - Image display component 26. Picture (/dist/dataDisplay/Picture/Picture.js) - Picture/responsive image component 27. EmojiPicker (/dist/dataDisplay/EmojiPicker/EmojiPicker.js) - Emoji picker component 28. FormattedDate (/dist/dataDisplay/FormattedDate/FormattedDate.js) - Display formatted dates 29. FormattedTime (/dist/dataDisplay/FormattedTime/FormattedTime.js) - Display formatted times 30. HTML (/dist/dataDisplay/HTML/HTML.js) - Safely render HTML content 31. LottieAnimation (/dist/dataDisplay/LottieAnimation/LottieAnimation.js) - Lottie animation player 32. CensorEmail (/dist/dataDisplay/privacy/CensorEmail.js) - Privacy-aware email display 33. CensorPhoneNumber (/dist/dataDisplay/privacy/CensorPhoneNumber.js) - Privacy-aware phone number display Text Components 34. Text (/dist/dataDisplay/text/Text/Text.js) - Generic text component 35. Heading (/dist/dataDisplay/text/Heading.js) - Heading/h1-h6 component 36. Paragraph (/dist/dataDisplay/text/Paragraph.js) - Paragraph text component 37. Span (/dist/dataDisplay/text/Span.js) - Span text component --- FORMS (Input Fields, Checkboxes, Selects, etc.) 1. InputText (/dist/forms/InputText/InputText.js) - Text input field - Props: value, onChange, disabled, label, placeholder, required, state (error/success), message 2. RawInputText (/dist/forms/InputText/RawInputText.js) - Unstyled text input 3. InputPassword (/dist/forms/InputPassword/InputPassword.js) - Password input field 4. InputNumber (/dist/forms/InputNumber/InputNumber.js) - Number input field 5. InputDate (/dist/forms/InputDate/InputDate.js) - Date picker input 6. InputDateNoPicker (/dist/forms/InputDateNoPicker/InputDateNoPicker.js) - Date input without picker 7. InputColor (/dist/forms/InputColor/InputColor.js) - Color picker input 8. InputColor/v2 (/dist/forms/InputColor/v2/InputColor.js) - Modern color picker (v2) 9. Textarea (/dist/forms/Textarea/Textarea.js) - Multi-line text input 10. Checkbox (/dist/forms/Checkbox/Checkbox.js) - Single checkbox - Props: checked, disabled, onChange, label, indeterminate, state (error/success), message 11. Checkbox/v2 (/dist/forms/Checkbox/v2/Checkbox.js) - Modern checkbox version 12. CheckboxGroup (/dist/forms/Checkbox/v2/CheckboxGroup.js) - Group of checkboxes 13. Radio (/dist/forms/Radio/Radio.js) - Single radio button 14. Radio/v2 (/dist/forms/RadioGroup/Radio.js) - Modern radio button 15. RadioGroup (/dist/forms/RadioGroup/RadioGroup.js) - Group of radio buttons 16. Select (/dist/forms/Select/Select.js) - Dropdown select field - Props: name, value, onChange, disabled, options, label, required, state, message, hint, placeholder, uiStyle (default/floating), renderO …(truncated, 9987 more chars)