项目文件夹

文件
wehub-resource-sync bf2343b7e4
Integration Tests - MySQL + Elasticsearch / Detect Changes (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / integration-tests-mysql-elasticsearch (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / integration-tests-postgres-elasticsearch-redis (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / integration-tests-postgres-opensearch (push) Has been cancelled
Java Checkstyle / java-checkstyle (push) Has been cancelled
Maven Collate Tests / maven-collate-ci (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests-status (push) Has been cancelled
Publish Package to Maven Central Repository / publish-maven-packages (push) Has been cancelled
OpenMetadata Service Unit Tests / Detect Changes (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests (push) Has been cancelled
OpenMetadata Service Unit Tests / k8s_operator-unit-tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:35:45 +08:00

141 行
6.5 KiB
Markdown

# @openmetadata/ui-core-components
Shared UI component library for OpenMetadata, built on UntitledUI design system patterns with React Aria Components as the accessibility foundation.
## Package Overview
- **Package name**: `@openmetadata/ui-core-components`
- **Source root**: `src/main/resources/ui/src/`
- **Build tool**: Vite (library mode) with `vite-plugin-dts` for type declarations
- **Styling**: Tailwind CSS v4 with `tw:` prefix to avoid conflicts with the main app's Less/Ant Design styles
- **Component foundation**: `react-aria-components` (NOT MUI or Ant Design)
- **Icons**: `@untitledui/icons`
## Development Commands
```bash
cd openmetadata-ui-core-components/src/main/resources/ui
yarn build # Production build to dist/
yarn dev # Watch mode build
yarn type-check # TypeScript type checking (tsc --noEmit)
yarn storybook # Launch Storybook on port 6006
yarn clean # Remove dist/
```
## Architecture
### Export Structure (package.json `exports`)
| Import path | Description |
| --------------------------------------------- | -------------------------------------------- |
| `@openmetadata/ui-core-components` | Main entry - re-exports everything |
| `@openmetadata/ui-core-components/components` | All UI components |
| `@openmetadata/ui-core-components/theme` | MUI theme, `createMuiTheme` |
| `@openmetadata/ui-core-components/colors` | Color utilities, `generateMuiPalettes` |
| `@openmetadata/ui-core-components/utils` | `cx`, `sortCx`, utilities |
| `@openmetadata/ui-core-components/styles.css` | Compiled CSS (must be imported by consumers) |
### Source Directory Layout
```
src/
├── components/
│ ├── base/ # Primitive building blocks
│ │ ├── avatar/ # Avatar, AvatarLabelGroup, AvatarProfilePhoto
│ │ ├── badges/ # Badge, BadgeGroup
│ │ ├── buttons/ # Button, CloseButton, ButtonUtility, SocialButton
│ │ ├── button-group/ # ButtonGroup
│ │ ├── checkbox/ # Checkbox
│ │ ├── dropdown/ # Dropdown
│ │ ├── form/ # Form, HookForm
│ │ ├── input/ # Input, InputGroup, Label, HintText
│ │ ├── select/ # Select, MultiSelect, Combobox, Popover
│ │ ├── slider/ # Slider
│ │ ├── tags/ # Tags
│ │ ├── textarea/ # Textarea
│ │ ├── toggle/ # Toggle
│ │ └── tooltip/ # Tooltip
│ ├── application/ # Composite/application-level components
│ │ ├── date-picker/ # DatePicker, DateRangePicker, Calendar
│ │ ├── modals/ # ModalOverlay, Modal, Dialog, DeleteModal
│ │ ├── pagination/ # Pagination
│ │ ├── slideout-menus/ # SlideoutMenu
│ │ ├── table/ # Table
│ │ └── tabs/ # Tabs
│ └── foundations/ # Design tokens as components
│ ├── dot-icon.tsx
│ ├── featured-icon.tsx # FeaturedIcon (light, outline themes)
│ └── payment-icons/
├── styles/
│ ├── globals.css # Shared Tailwind-facing CSS entry (tokens, typography, shared styles)
│ └── typography.css # Typography prose rules
├── theme/ # MUI theme configuration
├── colors/ # Color generation utilities
├── utils/ # cx, sortCx, isReactComponent
├── types/ # Shared TypeScript types
├── constants/ # Button constants, etc.
└── hooks/ # Shared hooks
```
### Component Export Registration
All public components must be exported from `src/components/index.ts`. Add new exports there when creating components.
## Key Conventions
### Tailwind CSS Prefix
All Tailwind classes use the `tw:` prefix: `tw:flex`, `tw:bg-primary`, `tw:text-sm`, etc. This is mandatory to scope styles and prevent collisions with the main app's existing Less/Ant Design CSS.
### CSS Custom Properties (Design Tokens)
Theme colors are defined as CSS custom properties in `src/styles/globals.css` with light and dark mode variants. Components reference these semantic tokens:
- **Backgrounds**: `bg-primary`, `bg-secondary`, `bg-error-secondary`, `bg-error-solid`
- **Text**: `text-primary`, `text-secondary`, `text-tertiary`, `text-fg-error-primary`
- **Featured icon**: `text-featured-icon-light-fg-{brand,error,gray,success,warning}`
- **Utility colors**: `border-utility-{brand,error,gray,success,warning}-{50-900}`
### Style Patterns
- Use `sortCx({})` to define style variant objects (enables Tailwind IntelliSense sorting)
- Use `cx()` (from `tailwind-merge`) to merge class names with conflict resolution
- Use `isReactComponent()` to type-guard icon props that accept both `FC` and `ReactNode`
### Button Color Variants
The `Button` component supports these `color` values:
- `primary`, `secondary`, `tertiary`, `link-gray`, `link-color`
- `primary-destructive`, `secondary-destructive`, `tertiary-destructive`, `link-destructive`
### Dark Mode
Dark mode uses a custom variant: `@custom-variant dark (&:where(.dark-mode, .dark-mode *))`. Toggle by adding `.dark-mode` class to a parent element.
### Externalized Dependencies (Vite rollup)
These are externalized in the build and must be provided by the consuming app:
- `react`, `react-dom`, `react/jsx-runtime`
- `@mui/material`, `@mui/system`, `@mui/material/styles`, `@mui/material/Chip`, `@mui/icons-material`, `@mui/x-date-pickers`
- `@emotion/react`, `@emotion/styled`
- `@material/material-color-utilities`
- `@untitledui/icons`
- `react-aria`, `react-aria-components`, `react-stately`
- `react-hook-form`
- `tailwind-merge`
- `input-otp`
- `@react-aria/utils`, `@react-stately/utils`, `@react-types/shared`
- `@internationalized/date`
- `tailwindcss-react-aria-components`
## Adding New Components
1. Create the component file in the appropriate directory (`base/` for primitives, `application/` for composites, `foundations/` for design-token components)
2. Use `tw:` prefix on all Tailwind classes
3. Use `cx()` for class merging and `sortCx()` for style variant maps
4. Build on `react-aria-components` for accessibility
5. Export from `src/components/index.ts`
6. Run `yarn build` to verify compilation