@machinemetrics/mm-react-components 0.2.3-3 → 0.2.3-31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -31
- package/agent-docs/agent-documentation-reference.md +401 -0
- package/agent-docs/ai-agent-guide.md +558 -0
- package/agent-docs/ai-agent-init-guide.md +465 -0
- package/agent-docs/chakra-migration-readme.md +265 -0
- package/agent-docs/chakra-migration-troubleshooting.md +649 -0
- package/agent-docs/component-mapping-reference.md +466 -0
- package/agent-docs/init-readme.md +283 -0
- package/agent-docs/init-troubleshooting.md +550 -0
- package/agent-docs/setup-reference.md +365 -0
- package/dist/App.d.ts.map +1 -1
- package/dist/README.md +90 -31
- package/dist/components/shadcn/accordion.d.ts +8 -0
- package/dist/components/shadcn/accordion.d.ts.map +1 -0
- package/dist/components/shadcn/alert-dialog.d.ts +15 -0
- package/dist/components/shadcn/alert-dialog.d.ts.map +1 -0
- package/dist/components/shadcn/alert.d.ts +10 -0
- package/dist/components/shadcn/alert.d.ts.map +1 -0
- package/dist/components/shadcn/avatar.d.ts +7 -0
- package/dist/components/shadcn/avatar.d.ts.map +1 -0
- package/dist/components/shadcn/badge.d.ts +10 -0
- package/dist/components/shadcn/badge.d.ts.map +1 -0
- package/dist/components/shadcn/breadcrumb.d.ts +12 -0
- package/dist/components/shadcn/breadcrumb.d.ts.map +1 -0
- package/dist/components/shadcn/button.d.ts +11 -0
- package/dist/components/shadcn/button.d.ts.map +1 -0
- package/dist/components/shadcn/calendar.d.ts +9 -0
- package/dist/components/shadcn/calendar.d.ts.map +1 -0
- package/dist/components/shadcn/card.d.ts +10 -0
- package/dist/components/shadcn/card.d.ts.map +1 -0
- package/dist/components/shadcn/chart.d.ts +41 -0
- package/dist/components/shadcn/chart.d.ts.map +1 -0
- package/dist/components/shadcn/checkbox.d.ts +5 -0
- package/dist/components/shadcn/checkbox.d.ts.map +1 -0
- package/dist/components/shadcn/collapsible.d.ts +7 -0
- package/dist/components/shadcn/collapsible.d.ts.map +1 -0
- package/dist/components/shadcn/command.d.ts +19 -0
- package/dist/components/shadcn/command.d.ts.map +1 -0
- package/dist/components/shadcn/dialog.d.ts +16 -0
- package/dist/components/shadcn/dialog.d.ts.map +1 -0
- package/dist/components/shadcn/drawer.d.ts +14 -0
- package/dist/components/shadcn/drawer.d.ts.map +1 -0
- package/dist/components/shadcn/dropdown-menu.d.ts +26 -0
- package/dist/components/shadcn/dropdown-menu.d.ts.map +1 -0
- package/dist/components/shadcn/form.d.ts +25 -0
- package/dist/components/shadcn/form.d.ts.map +1 -0
- package/dist/components/shadcn/input.d.ts +4 -0
- package/dist/components/shadcn/input.d.ts.map +1 -0
- package/dist/components/shadcn/label.d.ts +5 -0
- package/dist/components/shadcn/label.d.ts.map +1 -0
- package/dist/components/shadcn/pagination.d.ts +14 -0
- package/dist/components/shadcn/pagination.d.ts.map +1 -0
- package/dist/components/shadcn/popover.d.ts +8 -0
- package/dist/components/shadcn/popover.d.ts.map +1 -0
- package/dist/components/shadcn/progress.d.ts +5 -0
- package/dist/components/shadcn/progress.d.ts.map +1 -0
- package/dist/components/shadcn/radio-group.d.ts +6 -0
- package/dist/components/shadcn/radio-group.d.ts.map +1 -0
- package/dist/components/shadcn/select.d.ts +16 -0
- package/dist/components/shadcn/select.d.ts.map +1 -0
- package/dist/components/shadcn/separator.d.ts +5 -0
- package/dist/components/shadcn/separator.d.ts.map +1 -0
- package/dist/components/shadcn/sheet.d.ts +14 -0
- package/dist/components/shadcn/sheet.d.ts.map +1 -0
- package/dist/components/shadcn/skeleton.d.ts +4 -0
- package/dist/components/shadcn/skeleton.d.ts.map +1 -0
- package/dist/components/shadcn/slider.d.ts +5 -0
- package/dist/components/shadcn/slider.d.ts.map +1 -0
- package/dist/components/shadcn/sonner.d.ts +4 -0
- package/dist/components/shadcn/sonner.d.ts.map +1 -0
- package/dist/components/shadcn/spinner.d.ts +4 -0
- package/dist/components/shadcn/spinner.d.ts.map +1 -0
- package/dist/components/shadcn/switch.d.ts +5 -0
- package/dist/components/shadcn/switch.d.ts.map +1 -0
- package/dist/components/shadcn/table.d.ts +11 -0
- package/dist/components/shadcn/table.d.ts.map +1 -0
- package/dist/components/shadcn/tabs.d.ts +8 -0
- package/dist/components/shadcn/tabs.d.ts.map +1 -0
- package/dist/components/shadcn/textarea.d.ts +4 -0
- package/dist/components/shadcn/textarea.d.ts.map +1 -0
- package/dist/components/shadcn/toggle.d.ts +10 -0
- package/dist/components/shadcn/toggle.d.ts.map +1 -0
- package/dist/components/shadcn/tooltip.d.ts +8 -0
- package/dist/components/shadcn/tooltip.d.ts.map +1 -0
- package/dist/components/ui/accordion.d.ts +5 -6
- package/dist/components/ui/accordion.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +7 -11
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/alert.d.ts +8 -5
- package/dist/components/ui/alert.d.ts.map +1 -1
- package/dist/components/ui/avatar.d.ts +1 -6
- package/dist/components/ui/avatar.d.ts.map +1 -1
- package/dist/components/ui/badge.d.ts +4 -3
- package/dist/components/ui/badge.d.ts.map +1 -1
- package/dist/components/ui/breadcrumb.d.ts +1 -11
- package/dist/components/ui/breadcrumb.d.ts.map +1 -1
- package/dist/components/ui/button.d.ts +6 -6
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/calendar.d.ts +1 -1
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/card.d.ts +1 -9
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/checkbox.d.ts +1 -1
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/collapsible.d.ts +1 -6
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/command.d.ts +19 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/data-table/TableView.d.ts +2 -1
- package/dist/components/ui/data-table/TableView.d.ts.map +1 -1
- package/dist/components/ui/data-table/cards/ResponsiveTable.d.ts +1 -1
- package/dist/components/ui/data-table/cards/ResponsiveTable.d.ts.map +1 -1
- package/dist/components/ui/data-table/cards/RowCard.d.ts +2 -1
- package/dist/components/ui/data-table/cards/RowCard.d.ts.map +1 -1
- package/dist/components/ui/data-table/index.d.ts +3 -1
- package/dist/components/ui/data-table/index.d.ts.map +1 -1
- package/dist/components/ui/data-table/pagination.d.ts +14 -1
- package/dist/components/ui/data-table/pagination.d.ts.map +1 -1
- package/dist/components/ui/data-table/parts/BatchActionsToolbar.d.ts +7 -0
- package/dist/components/ui/data-table/parts/BatchActionsToolbar.d.ts.map +1 -0
- package/dist/components/ui/data-table/parts/CellContent.d.ts +7 -0
- package/dist/components/ui/data-table/parts/CellContent.d.ts.map +1 -0
- package/dist/components/ui/data-table/parts/ColGroup.d.ts +7 -0
- package/dist/components/ui/data-table/parts/ColGroup.d.ts.map +1 -0
- package/dist/components/ui/data-table/parts/SortableHeader.d.ts +13 -0
- package/dist/components/ui/data-table/parts/SortableHeader.d.ts.map +1 -0
- package/dist/components/ui/data-table/parts/TableBody.d.ts +22 -0
- package/dist/components/ui/data-table/parts/TableBody.d.ts.map +1 -0
- package/dist/components/ui/data-table/parts/TableHeader.d.ts +15 -0
- package/dist/components/ui/data-table/parts/TableHeader.d.ts.map +1 -0
- package/dist/components/ui/data-table/toolbar/DataTableToolbar.d.ts +2 -1
- package/dist/components/ui/data-table/toolbar/DataTableToolbar.d.ts.map +1 -1
- package/dist/components/ui/data-table/types.d.ts +61 -11
- package/dist/components/ui/data-table/types.d.ts.map +1 -1
- package/dist/components/ui/data-table/useDragAndDrop.d.ts +23 -0
- package/dist/components/ui/data-table/useDragAndDrop.d.ts.map +1 -0
- package/dist/components/ui/data-table/useTableController.d.ts +24 -1
- package/dist/components/ui/data-table/useTableController.d.ts.map +1 -1
- package/dist/components/ui/data-table/utils.d.ts +2 -0
- package/dist/components/ui/data-table/utils.d.ts.map +1 -1
- package/dist/components/ui/date-picker.d.ts +36 -0
- package/dist/components/ui/date-picker.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +6 -10
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/drawer.d.ts +3 -11
- package/dist/components/ui/drawer.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.d.ts +15 -23
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/hero-metric-card/HeroMetricCard.d.ts +4 -0
- package/dist/components/ui/hero-metric-card/HeroMetricCard.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/HeroMetricCardItem.d.ts +4 -0
- package/dist/components/ui/hero-metric-card/HeroMetricCardItem.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/constants.d.ts +13 -0
- package/dist/components/ui/hero-metric-card/constants.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/grid.d.ts +4 -0
- package/dist/components/ui/hero-metric-card/grid.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/hooks.d.ts +6 -0
- package/dist/components/ui/hero-metric-card/hooks.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/index.d.ts +5 -0
- package/dist/components/ui/hero-metric-card/index.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/parsing.d.ts +11 -0
- package/dist/components/ui/hero-metric-card/parsing.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/refs.d.ts +3 -0
- package/dist/components/ui/hero-metric-card/refs.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/trend.d.ts +4 -0
- package/dist/components/ui/hero-metric-card/trend.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/types.d.ts +60 -0
- package/dist/components/ui/hero-metric-card/types.d.ts.map +1 -0
- package/dist/components/ui/hero-metric-card/utils.d.ts +10 -0
- package/dist/components/ui/hero-metric-card/utils.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +3 -2
- package/dist/components/ui/input.d.ts.map +1 -1
- package/dist/components/ui/label.d.ts +1 -4
- package/dist/components/ui/label.d.ts.map +1 -1
- package/dist/components/ui/pagination.d.ts +14 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/popover.d.ts +3 -5
- package/dist/components/ui/popover.d.ts.map +1 -1
- package/dist/components/ui/progress.d.ts +2 -1
- package/dist/components/ui/progress.d.ts.map +1 -1
- package/dist/components/ui/radio-group.d.ts +3 -3
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/select.d.ts +6 -13
- package/dist/components/ui/select.d.ts.map +1 -1
- package/dist/components/ui/separator.d.ts +1 -4
- package/dist/components/ui/separator.d.ts.map +1 -1
- package/dist/components/ui/sheet-banner.d.ts +10 -0
- package/dist/components/ui/sheet-banner.d.ts.map +1 -0
- package/dist/components/ui/sheet.d.ts +18 -9
- package/dist/components/ui/sheet.d.ts.map +1 -1
- package/dist/components/ui/simple-pagination.d.ts +8 -0
- package/dist/components/ui/simple-pagination.d.ts.map +1 -0
- package/dist/components/ui/skeleton.d.ts +1 -3
- package/dist/components/ui/skeleton.d.ts.map +1 -1
- package/dist/components/ui/sonner.d.ts +2 -1
- package/dist/components/ui/sonner.d.ts.map +1 -1
- package/dist/components/ui/spinner-carbide.d.ts +5 -0
- package/dist/components/ui/spinner-carbide.d.ts.map +1 -0
- package/dist/components/ui/spinner.d.ts +2 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/switch.d.ts +1 -1
- package/dist/components/ui/switch.d.ts.map +1 -1
- package/dist/components/ui/table/Table.d.ts.map +1 -1
- package/dist/components/ui/table.d.ts +4 -9
- package/dist/components/ui/table.d.ts.map +1 -1
- package/dist/components/ui/tabs.d.ts +16 -2
- package/dist/components/ui/tabs.d.ts.map +1 -1
- package/dist/components/ui/textarea.d.ts +1 -3
- package/dist/components/ui/textarea.d.ts.map +1 -1
- package/dist/components/ui/toggle.d.ts +1 -9
- package/dist/components/ui/toggle.d.ts.map +1 -1
- package/dist/components/ui/tooltip.d.ts +1 -7
- package/dist/components/ui/tooltip.d.ts.map +1 -1
- package/dist/docs/GETTING_STARTED.md +14 -6
- package/dist/docs/TAILWIND_SETUP.md +5 -1
- package/dist/index.d.ts +16 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/fonts/inconsolata-latin-400-normal.7bb81ff1.woff +0 -0
- package/dist/lib/fonts/inconsolata-latin-400-normal.eb50e0cc.woff2 +0 -0
- package/dist/lib/fonts/inconsolata-latin-ext-400-normal.8c9bd94c.woff +0 -0
- package/dist/lib/fonts/inconsolata-latin-ext-400-normal.e91396bf.woff2 +0 -0
- package/dist/lib/fonts/inconsolata-vietnamese-400-normal.0fdec2a6.woff +0 -0
- package/dist/lib/fonts/inconsolata-vietnamese-400-normal.788ea873.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-cyrillic-ext-wght-normal.ced7f40b.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-cyrillic-wght-normal.56471747.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-devanagari-wght-normal.90412b4c.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-greek-ext-wght-normal.6a0bbd3e.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-greek-wght-normal.dc06dc3b.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-latin-ext-wght-normal.15bcee04.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-latin-wght-normal.20625185.woff2 +0 -0
- package/dist/lib/fonts/noto-sans-vietnamese-wght-normal.d0a8e686.woff2 +0 -0
- package/dist/lib/mm-react-components.css +1 -0
- package/dist/main.d.ts +1 -2
- package/dist/main.d.ts.map +1 -1
- package/dist/mm-react-components.es.js +8015 -5939
- package/dist/mm-react-components.es.js.map +1 -1
- package/dist/mm-react-components.umd.js +13 -13
- package/dist/mm-react-components.umd.js.map +1 -1
- package/dist/preview/ColorsPreview.d.ts +7 -0
- package/dist/preview/ColorsPreview.d.ts.map +1 -0
- package/dist/preview/CommandPreview.d.ts +2 -0
- package/dist/preview/CommandPreview.d.ts.map +1 -0
- package/dist/preview/DataTablePreview.d.ts +1 -1
- package/dist/preview/DataTablePreview.d.ts.map +1 -1
- package/dist/preview/DatePickerPreview.d.ts +2 -0
- package/dist/preview/DatePickerPreview.d.ts.map +1 -0
- package/dist/preview/DateRangePickerPreview.d.ts.map +1 -1
- package/dist/preview/HeroMetricCardPreview.d.ts +2 -0
- package/dist/preview/HeroMetricCardPreview.d.ts.map +1 -0
- package/dist/preview/PaginationPreview.d.ts +2 -0
- package/dist/preview/PaginationPreview.d.ts.map +1 -0
- package/dist/preview/SheetBannerPreview.d.ts +2 -0
- package/dist/preview/SheetBannerPreview.d.ts.map +1 -0
- package/dist/preview/SheetPreview.d.ts.map +1 -1
- package/dist/preview/SpinnerPreview.d.ts +2 -0
- package/dist/preview/SpinnerPreview.d.ts.map +1 -0
- package/dist/preview/TabsPreview.d.ts.map +1 -1
- package/dist/scripts/chakra-to-shadcn-migrator/chakra-to-shadcn.config.json +577 -0
- package/dist/scripts/chakra-to-shadcn-migrator/lib/args.js +63 -0
- package/dist/scripts/chakra-to-shadcn-migrator/lib/colors.js +14 -0
- package/dist/scripts/chakra-to-shadcn-migrator/lib/config.js +15 -0
- package/dist/scripts/chakra-to-shadcn-migrator/lib/deps.js +125 -0
- package/dist/scripts/chakra-to-shadcn-migrator/lib/file-io.js +44 -0
- package/dist/scripts/chakra-to-shadcn-migrator/lib/render.js +89 -0
- package/dist/scripts/chakra-to-shadcn-migrator/lib/transform.js +550 -0
- package/dist/scripts/chakra-to-shadcn-migrator/package.json +11 -0
- package/dist/scripts/init.cjs +216 -0
- package/dist/scripts/npx-init.cjs +418 -0
- package/dist/tailwind.base.config.js +89 -0
- package/dist/themes/carbide.css +464 -90
- package/docs/TAILWIND_SETUP.md +5 -1
- package/package.json +39 -12
- package/src/index.css +111 -489
- package/dist/index.css +0 -527
- package/dist/themes/base.css +0 -536
- package/dist/themes/complete.css +0 -8
- package/scripts/README.md +0 -171
- package/scripts/chakra-to-shadcn-migrator/README.md +0 -107
- package/src/themes/base.css +0 -536
- package/src/themes/carbide.css +0 -1257
- package/src/themes/complete.css +0 -8
- /package/{scripts → dist/scripts}/chakra-to-shadcn-migrator/bin/chakra-to-shadcn.js +0 -0
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
# AI Agent Guide: Chakra UI to MachineMetrics React Components Migration
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide provides AI agents with comprehensive instructions for migrating Chakra UI components to the MachineMetrics React Components library.
|
|
6
|
+
|
|
7
|
+
**Important:** MachineMetrics React Components is built on **[shadcn/ui](https://ui.shadcn.com/)**, which uses Radix UI primitives and Tailwind CSS. This means you're migrating from Chakra UI → shadcn/ui-based components with the Carbide industrial theme.
|
|
8
|
+
|
|
9
|
+
This guide includes automated script usage, manual conversion procedures, and troubleshooting guidance.
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
### 1. Automated Migration (Preferred)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Run the migration script
|
|
17
|
+
node scripts/chakra-to-shadcn-migrator/chakra-to-shadcn.js --apply
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 2. Manual Migration (When Script Fails)
|
|
21
|
+
|
|
22
|
+
If the automated script fails, follow the manual conversion guide below.
|
|
23
|
+
|
|
24
|
+
## Configuration File Reference
|
|
25
|
+
|
|
26
|
+
The migration configuration is located at `scripts/chakra-to-shadcn-migrator/chakra-to-shadcn.config.json` and contains:
|
|
27
|
+
|
|
28
|
+
- **Dependencies to Remove**: Chakra UI packages to uninstall
|
|
29
|
+
- **Dependencies to Add**: New packages required for MachineMetrics components
|
|
30
|
+
- **Component Mappings**: Direct component replacements
|
|
31
|
+
- **Compound Components**: Complex component structure mappings
|
|
32
|
+
- **Manual Migration Instructions**: Fallback conversion steps
|
|
33
|
+
|
|
34
|
+
## Component Migration Mappings
|
|
35
|
+
|
|
36
|
+
### Layout Components (Manual Replacement Required)
|
|
37
|
+
|
|
38
|
+
| Chakra Component | Replacement | Notes |
|
|
39
|
+
| ---------------- | ------------------------------------------------------------------------ | ---------------------------------- |
|
|
40
|
+
| `Box` | `<div>` | Add appropriate Tailwind classes |
|
|
41
|
+
| `Flex` | `<div className="flex">` | Add flex-related Tailwind classes |
|
|
42
|
+
| `VStack` | `<div className="flex flex-col gap-4">` | Adjust spacing as needed |
|
|
43
|
+
| `HStack` | `<div className="flex flex-row gap-4">` | Adjust spacing as needed |
|
|
44
|
+
| `Stack` | `<div className="flex flex-col gap-4">` | Adjust direction/spacing as needed |
|
|
45
|
+
| `Container` | `<div className="container mx-auto px-4">` | Adjust max-width as needed |
|
|
46
|
+
| `Center` | `<div className="flex items-center justify-center">` | - |
|
|
47
|
+
| `SimpleGrid` | `<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">` | Adjust columns as needed |
|
|
48
|
+
|
|
49
|
+
### Typography Components (Manual Replacement Required)
|
|
50
|
+
|
|
51
|
+
| Chakra Component | Replacement | Notes |
|
|
52
|
+
| ---------------- | ---------------------------- | -------------------------------------------------- |
|
|
53
|
+
| `Heading` | `<h1>`, `<h2>`, `<h3>`, etc. | Use semantic HTML with Tailwind typography classes |
|
|
54
|
+
| `Text` | `<p>`, `<span>`, etc. | Use semantic HTML with Tailwind typography classes |
|
|
55
|
+
|
|
56
|
+
### Form Components (Manual Replacement Required)
|
|
57
|
+
|
|
58
|
+
| Chakra Component | Replacement | Notes |
|
|
59
|
+
| ---------------- | ----------------------- | --------------------------------------------- |
|
|
60
|
+
| `Field` | `<div>` wrapper | Use shadcn/ui form components for inputs |
|
|
61
|
+
| `NumberInput` | `<input type="number">` | Add Tailwind classes, or use shadcn/ui Input |
|
|
62
|
+
| `Slider` | `<input type="range">` | Add Tailwind classes, or use shadcn/ui Slider |
|
|
63
|
+
| `NativeSelect` | `<select>` | Add Tailwind classes, or use shadcn/ui Select |
|
|
64
|
+
|
|
65
|
+
### UI Components (Direct Mappings Available)
|
|
66
|
+
|
|
67
|
+
| Chakra Component | MachineMetrics Component | Import Path |
|
|
68
|
+
| ---------------- | ------------------------ | ------------------------------------- |
|
|
69
|
+
| `Badge` | `Badge` | `@machinemetrics/mm-react-components` |
|
|
70
|
+
| `Button` | `Button` | `@machinemetrics/mm-react-components` |
|
|
71
|
+
| `Modal` | `Dialog` | `@machinemetrics/mm-react-components` |
|
|
72
|
+
| `Input` | `Input` | `@machinemetrics/mm-react-components` |
|
|
73
|
+
| `Menu` | `DropdownMenu` | `@machinemetrics/mm-react-components` |
|
|
74
|
+
| `Select` | `Select` | `@machinemetrics/mm-react-components` |
|
|
75
|
+
| `Table` | `Table` | `@machinemetrics/mm-react-components` |
|
|
76
|
+
| `Tabs` | `Tabs` | `@machinemetrics/mm-react-components` |
|
|
77
|
+
| `Tooltip` | `Tooltip` | `@machinemetrics/mm-react-components` |
|
|
78
|
+
| `Drawer` | `Drawer` | `@machinemetrics/mm-react-components` |
|
|
79
|
+
| `Switch` | `Switch` | `@machinemetrics/mm-react-components` |
|
|
80
|
+
| `Checkbox` | `Checkbox` | `@machinemetrics/mm-react-components` |
|
|
81
|
+
| `Radio` | `RadioGroupItem` | `@machinemetrics/mm-react-components` |
|
|
82
|
+
| `RadioGroup` | `RadioGroup` | `@machinemetrics/mm-react-components` |
|
|
83
|
+
| `Label` | `Label` | `@machinemetrics/mm-react-components` |
|
|
84
|
+
| `FormLabel` | `Label` | `@machinemetrics/mm-react-components` |
|
|
85
|
+
| `Sheet` | `Sheet` | `@machinemetrics/mm-react-components` |
|
|
86
|
+
| `Skeleton` | `Skeleton` | `@machinemetrics/mm-react-components` |
|
|
87
|
+
| `Collapse` | `Collapsible` | `@machinemetrics/mm-react-components` |
|
|
88
|
+
| `Accordion` | `Accordion` | `@machinemetrics/mm-react-components` |
|
|
89
|
+
| `Progress` | `Progress` | `@machinemetrics/mm-react-components` |
|
|
90
|
+
| `Slider` | `Slider` | `@machinemetrics/mm-react-components` |
|
|
91
|
+
| `Popover` | `Popover` | `@machinemetrics/mm-react-components` |
|
|
92
|
+
|
|
93
|
+
### New Components (Recently Added)
|
|
94
|
+
|
|
95
|
+
| Chakra Component | MachineMetrics Component | Import Path |
|
|
96
|
+
| ----------------- | -------------------------------------- | ------------------------------------- |
|
|
97
|
+
| `Alert` | `Alert` | `@machinemetrics/mm-react-components` |
|
|
98
|
+
| `AlertDialog` | `AlertDialog` | `@machinemetrics/mm-react-components` |
|
|
99
|
+
| `Avatar` | `Avatar` | `@machinemetrics/mm-react-components` |
|
|
100
|
+
| `Breadcrumb` | `Breadcrumb` | `@machinemetrics/mm-react-components` |
|
|
101
|
+
| `Calendar` | `Calendar` | `@machinemetrics/mm-react-components` |
|
|
102
|
+
| `DateRangePicker` | `DateRangePicker` | `@machinemetrics/mm-react-components` |
|
|
103
|
+
| `Form` | `Form` | `@machinemetrics/mm-react-components` |
|
|
104
|
+
| `Separator` | `Separator` | `@machinemetrics/mm-react-components` |
|
|
105
|
+
| `Textarea` | `Textarea` | `@machinemetrics/mm-react-components` |
|
|
106
|
+
| `Toaster` | `Toaster` | `@machinemetrics/mm-react-components` |
|
|
107
|
+
| `Chart` | `ChartContainer`, `ChartTooltip`, etc. | `@machinemetrics/mm-react-components` |
|
|
108
|
+
| `Dropzone` | `Dropzone` | `@machinemetrics/mm-react-components` |
|
|
109
|
+
| `SearchInput` | `SearchInput` | `@machinemetrics/mm-react-components` |
|
|
110
|
+
|
|
111
|
+
## Compound Component Mappings
|
|
112
|
+
|
|
113
|
+
### Modal/Dialog Components
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
// Chakra UI
|
|
117
|
+
<Modal>
|
|
118
|
+
<ModalOverlay />
|
|
119
|
+
<ModalContent>
|
|
120
|
+
<ModalHeader>Title</ModalHeader>
|
|
121
|
+
<ModalBody>Content</ModalBody>
|
|
122
|
+
<ModalFooter>Footer</ModalFooter>
|
|
123
|
+
</ModalContent>
|
|
124
|
+
</Modal>
|
|
125
|
+
|
|
126
|
+
// MachineMetrics Components
|
|
127
|
+
<Dialog>
|
|
128
|
+
<DialogTrigger>Open</DialogTrigger>
|
|
129
|
+
<DialogContent>
|
|
130
|
+
<DialogHeader>
|
|
131
|
+
<DialogTitle>Title</DialogTitle>
|
|
132
|
+
</DialogHeader>
|
|
133
|
+
Content
|
|
134
|
+
<DialogFooter>Footer</DialogFooter>
|
|
135
|
+
</DialogContent>
|
|
136
|
+
</Dialog>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Drawer Components
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
// Chakra UI
|
|
143
|
+
<Drawer>
|
|
144
|
+
<DrawerOverlay />
|
|
145
|
+
<DrawerContent>
|
|
146
|
+
<DrawerHeader>Title</DrawerHeader>
|
|
147
|
+
<DrawerBody>Content</DrawerBody>
|
|
148
|
+
<DrawerFooter>Footer</DrawerFooter>
|
|
149
|
+
</DrawerContent>
|
|
150
|
+
</Drawer>
|
|
151
|
+
|
|
152
|
+
// MachineMetrics Components
|
|
153
|
+
<Drawer>
|
|
154
|
+
<DrawerTrigger>Open</DrawerTrigger>
|
|
155
|
+
<DrawerContent>
|
|
156
|
+
<DrawerHeader>
|
|
157
|
+
<DrawerTitle>Title</DrawerTitle>
|
|
158
|
+
</DrawerHeader>
|
|
159
|
+
Content
|
|
160
|
+
<DrawerFooter>Footer</DrawerFooter>
|
|
161
|
+
</DrawerContent>
|
|
162
|
+
</Drawer>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Accordion Components
|
|
166
|
+
|
|
167
|
+
```tsx
|
|
168
|
+
// Chakra UI
|
|
169
|
+
<Accordion>
|
|
170
|
+
<AccordionItem>
|
|
171
|
+
<AccordionButton>Header</AccordionButton>
|
|
172
|
+
<AccordionPanel>Content</AccordionPanel>
|
|
173
|
+
</AccordionItem>
|
|
174
|
+
</Accordion>
|
|
175
|
+
|
|
176
|
+
// MachineMetrics Components
|
|
177
|
+
<Accordion>
|
|
178
|
+
<AccordionItem>
|
|
179
|
+
<AccordionTrigger>Header</AccordionTrigger>
|
|
180
|
+
<AccordionContent>Content</AccordionContent>
|
|
181
|
+
</AccordionItem>
|
|
182
|
+
</Accordion>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Card Components
|
|
186
|
+
|
|
187
|
+
```tsx
|
|
188
|
+
// Chakra UI
|
|
189
|
+
<Card>
|
|
190
|
+
<CardHeader>Header</CardHeader>
|
|
191
|
+
<CardBody>Content</CardBody>
|
|
192
|
+
<CardFooter>Footer</CardFooter>
|
|
193
|
+
</Card>
|
|
194
|
+
|
|
195
|
+
// MachineMetrics Components
|
|
196
|
+
<Card>
|
|
197
|
+
<CardHeader>
|
|
198
|
+
<CardTitle>Title</CardTitle>
|
|
199
|
+
<CardDescription>Description</CardDescription>
|
|
200
|
+
</CardHeader>
|
|
201
|
+
<CardContent>Content</CardContent>
|
|
202
|
+
<CardFooter>Footer</CardFooter>
|
|
203
|
+
</Card>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Manual Conversion Process
|
|
207
|
+
|
|
208
|
+
### Step 1: Update Dependencies
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Remove Chakra UI packages
|
|
212
|
+
npm uninstall @chakra-ui/react @chakra-ui/icons @chakra-ui/system @emotion/react @emotion/styled
|
|
213
|
+
|
|
214
|
+
# Install MachineMetrics components
|
|
215
|
+
npm install @machinemetrics/mm-react-components
|
|
216
|
+
|
|
217
|
+
# Install additional dependencies
|
|
218
|
+
npm install class-variance-authority tailwind-merge lucide-react
|
|
219
|
+
npm install react-day-picker date-fns recharts react-dropzone sonner vaul
|
|
220
|
+
npm install @radix-ui/react-avatar @radix-ui/react-breadcrumb @radix-ui/react-calendar
|
|
221
|
+
npm install @radix-ui/react-alert-dialog @radix-ui/react-separator @radix-ui/react-form
|
|
222
|
+
npm install @radix-ui/react-textarea @radix-ui/react-toast
|
|
223
|
+
|
|
224
|
+
# Install dev dependencies
|
|
225
|
+
npm install -D tailwindcss postcss autoprefixer
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Step 2: Update Theme Configuration
|
|
229
|
+
|
|
230
|
+
```tsx
|
|
231
|
+
// Remove ChakraProvider from your app root
|
|
232
|
+
// Before
|
|
233
|
+
import { ChakraProvider } from '@chakra-ui/react';
|
|
234
|
+
|
|
235
|
+
function App() {
|
|
236
|
+
return (
|
|
237
|
+
<ChakraProvider>
|
|
238
|
+
<YourApp />
|
|
239
|
+
</ChakraProvider>
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// After
|
|
244
|
+
import '@machinemetrics/mm-react-components/themes/carbide';
|
|
245
|
+
|
|
246
|
+
function App() {
|
|
247
|
+
return (
|
|
248
|
+
<div className="carbide">
|
|
249
|
+
<YourApp />
|
|
250
|
+
</div>
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Step 3: Update Component Imports
|
|
256
|
+
|
|
257
|
+
```tsx
|
|
258
|
+
// Before
|
|
259
|
+
import { Button, Input, Modal, Box, Flex } from '@chakra-ui/react';
|
|
260
|
+
|
|
261
|
+
// After
|
|
262
|
+
import { Button, Input, Dialog } from '@machinemetrics/mm-react-components';
|
|
263
|
+
// Layout components become generic HTML elements with Tailwind classes
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Step 4: Convert Layout Components
|
|
267
|
+
|
|
268
|
+
```tsx
|
|
269
|
+
// Before
|
|
270
|
+
<Box p={4} bg="gray.100">
|
|
271
|
+
<Flex direction="column" gap={4}>
|
|
272
|
+
<VStack spacing={4}>
|
|
273
|
+
<HStack spacing={2}>
|
|
274
|
+
Content
|
|
275
|
+
</HStack>
|
|
276
|
+
</VStack>
|
|
277
|
+
</Flex>
|
|
278
|
+
</Box>
|
|
279
|
+
|
|
280
|
+
// After
|
|
281
|
+
<div className="p-4 bg-gray-100">
|
|
282
|
+
<div className="flex flex-col gap-4">
|
|
283
|
+
<div className="flex flex-col gap-4">
|
|
284
|
+
<div className="flex flex-row gap-2">
|
|
285
|
+
Content
|
|
286
|
+
</div>
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Step 5: Convert Typography Components
|
|
293
|
+
|
|
294
|
+
```tsx
|
|
295
|
+
// Before
|
|
296
|
+
<Heading size="lg" color="blue.500">
|
|
297
|
+
Title
|
|
298
|
+
</Heading>
|
|
299
|
+
<Text fontSize="sm" color="gray.600">
|
|
300
|
+
Description
|
|
301
|
+
</Text>
|
|
302
|
+
|
|
303
|
+
// After
|
|
304
|
+
<h2 className="text-lg font-semibold text-blue-500">
|
|
305
|
+
Title
|
|
306
|
+
</h2>
|
|
307
|
+
<p className="text-sm text-gray-600">
|
|
308
|
+
Description
|
|
309
|
+
</p>
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Step 6: Convert Form Components
|
|
313
|
+
|
|
314
|
+
```tsx
|
|
315
|
+
// Before
|
|
316
|
+
<Field>
|
|
317
|
+
<FormLabel>Name</FormLabel>
|
|
318
|
+
<Input placeholder="Enter name" />
|
|
319
|
+
</Field>
|
|
320
|
+
|
|
321
|
+
// After
|
|
322
|
+
<div>
|
|
323
|
+
<Label>Name</Label>
|
|
324
|
+
<Input placeholder="Enter name" />
|
|
325
|
+
</div>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Step 7: Convert UI Components
|
|
329
|
+
|
|
330
|
+
```tsx
|
|
331
|
+
// Before
|
|
332
|
+
<Modal isOpen={isOpen} onClose={onClose}>
|
|
333
|
+
<ModalOverlay />
|
|
334
|
+
<ModalContent>
|
|
335
|
+
<ModalHeader>Title</ModalHeader>
|
|
336
|
+
<ModalBody>Content</ModalBody>
|
|
337
|
+
<ModalFooter>
|
|
338
|
+
<Button onClick={onClose}>Close</Button>
|
|
339
|
+
</ModalFooter>
|
|
340
|
+
</ModalContent>
|
|
341
|
+
</Modal>
|
|
342
|
+
|
|
343
|
+
// After
|
|
344
|
+
<Dialog open={isOpen} onOpenChange={setIsOpen}>
|
|
345
|
+
<DialogTrigger>Open</DialogTrigger>
|
|
346
|
+
<DialogContent>
|
|
347
|
+
<DialogHeader>
|
|
348
|
+
<DialogTitle>Title</DialogTitle>
|
|
349
|
+
</DialogHeader>
|
|
350
|
+
Content
|
|
351
|
+
<DialogFooter>
|
|
352
|
+
<Button onClick={() => setIsOpen(false)}>Close</Button>
|
|
353
|
+
</DialogFooter>
|
|
354
|
+
</DialogContent>
|
|
355
|
+
</Dialog>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Icon Migration
|
|
359
|
+
|
|
360
|
+
### Replace Chakra Icons with Lucide React
|
|
361
|
+
|
|
362
|
+
```tsx
|
|
363
|
+
// Before
|
|
364
|
+
import { AddIcon, DeleteIcon } from '@chakra-ui/icons'
|
|
365
|
+
|
|
366
|
+
// After
|
|
367
|
+
import { Plus, Trash2 } from 'lucide-react'
|
|
368
|
+
|
|
369
|
+
// Usage remains the same
|
|
370
|
+
<Button>
|
|
371
|
+
<AddIcon />
|
|
372
|
+
Add Item
|
|
373
|
+
</Button>
|
|
374
|
+
|
|
375
|
+
<Button>
|
|
376
|
+
<Plus />
|
|
377
|
+
Add Item
|
|
378
|
+
</Button>
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Common Migration Patterns
|
|
382
|
+
|
|
383
|
+
### 1. Spacing and Layout
|
|
384
|
+
|
|
385
|
+
```tsx
|
|
386
|
+
// Chakra UI spacing
|
|
387
|
+
<Box p={4} m={2} gap={4}>
|
|
388
|
+
|
|
389
|
+
// Tailwind CSS spacing
|
|
390
|
+
<div className="p-4 m-2 gap-4">
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### 2. Colors
|
|
394
|
+
|
|
395
|
+
```tsx
|
|
396
|
+
// Chakra UI colors
|
|
397
|
+
<Box bg="blue.500" color="white">
|
|
398
|
+
|
|
399
|
+
// Tailwind CSS colors
|
|
400
|
+
<div className="bg-blue-500 text-white">
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### 3. Responsive Design
|
|
404
|
+
|
|
405
|
+
```tsx
|
|
406
|
+
// Chakra UI responsive
|
|
407
|
+
<Box display={{ base: 'block', md: 'flex' }}>
|
|
408
|
+
|
|
409
|
+
// Tailwind CSS responsive
|
|
410
|
+
<div className="block md:flex">
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### 4. State Management
|
|
414
|
+
|
|
415
|
+
```tsx
|
|
416
|
+
// Chakra UI state
|
|
417
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
418
|
+
|
|
419
|
+
// MachineMetrics state (same pattern)
|
|
420
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
## Troubleshooting Common Issues
|
|
424
|
+
|
|
425
|
+
### 1. Missing Dependencies
|
|
426
|
+
|
|
427
|
+
**Error**: `Module not found: Can't resolve '@machinemetrics/mm-react-components'`
|
|
428
|
+
|
|
429
|
+
**Solution**: Install the package
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
npm install @machinemetrics/mm-react-components
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### 2. Theme Not Applied
|
|
436
|
+
|
|
437
|
+
**Error**: Components don't have the expected styling
|
|
438
|
+
|
|
439
|
+
**Solution**: Ensure theme is imported and applied
|
|
440
|
+
|
|
441
|
+
```tsx
|
|
442
|
+
import '@machinemetrics/mm-react-components/themes/carbide';
|
|
443
|
+
|
|
444
|
+
// Add to your app root
|
|
445
|
+
<div className="carbide">
|
|
446
|
+
<YourApp />
|
|
447
|
+
</div>;
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### 3. Layout Components Not Working
|
|
451
|
+
|
|
452
|
+
**Error**: Layout components like `Box`, `Flex` not found
|
|
453
|
+
|
|
454
|
+
**Solution**: Replace with generic HTML elements and Tailwind classes
|
|
455
|
+
|
|
456
|
+
```tsx
|
|
457
|
+
// Instead of <Box>, use <div>
|
|
458
|
+
// Instead of <Flex>, use <div className="flex">
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### 4. Icons Not Displaying
|
|
462
|
+
|
|
463
|
+
**Error**: Icons not showing after migration
|
|
464
|
+
|
|
465
|
+
**Solution**: Update icon imports to Lucide React
|
|
466
|
+
|
|
467
|
+
```tsx
|
|
468
|
+
// Before
|
|
469
|
+
import { AddIcon } from '@chakra-ui/icons';
|
|
470
|
+
|
|
471
|
+
// After
|
|
472
|
+
import { Plus } from 'lucide-react';
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### 5. Form Components Not Working
|
|
476
|
+
|
|
477
|
+
**Error**: Form components not functioning properly
|
|
478
|
+
|
|
479
|
+
**Solution**: Use the new Form components from MachineMetrics
|
|
480
|
+
|
|
481
|
+
```tsx
|
|
482
|
+
import {
|
|
483
|
+
Form,
|
|
484
|
+
FormField,
|
|
485
|
+
FormItem,
|
|
486
|
+
FormLabel,
|
|
487
|
+
FormControl,
|
|
488
|
+
} from '@machinemetrics/mm-react-components';
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
## Validation Checklist
|
|
492
|
+
|
|
493
|
+
After migration, verify:
|
|
494
|
+
|
|
495
|
+
- [ ] All Chakra UI imports removed
|
|
496
|
+
- [ ] MachineMetrics components imported correctly
|
|
497
|
+
- [ ] Theme applied with `carbide` class
|
|
498
|
+
- [ ] Layout components converted to HTML + Tailwind
|
|
499
|
+
- [ ] Icons updated to Lucide React
|
|
500
|
+
- [ ] Form components working correctly
|
|
501
|
+
- [ ] Modal/Dialog components functioning
|
|
502
|
+
- [ ] Styling matches original design
|
|
503
|
+
- [ ] No console errors
|
|
504
|
+
- [ ] All functionality preserved
|
|
505
|
+
|
|
506
|
+
## Advanced Migration Scenarios
|
|
507
|
+
|
|
508
|
+
### Custom Chakra Components
|
|
509
|
+
|
|
510
|
+
If you have custom components built on Chakra UI:
|
|
511
|
+
|
|
512
|
+
1. Identify the base Chakra component used
|
|
513
|
+
2. Replace with equivalent MachineMetrics component
|
|
514
|
+
3. Update styling to use Tailwind classes
|
|
515
|
+
4. Test functionality thoroughly
|
|
516
|
+
|
|
517
|
+
### Complex Layout Migrations
|
|
518
|
+
|
|
519
|
+
For complex layouts:
|
|
520
|
+
|
|
521
|
+
1. Break down into smaller components
|
|
522
|
+
2. Convert each part individually
|
|
523
|
+
3. Use Tailwind's flexbox and grid utilities
|
|
524
|
+
4. Test responsive behavior
|
|
525
|
+
|
|
526
|
+
### Animation Migrations
|
|
527
|
+
|
|
528
|
+
For animations:
|
|
529
|
+
|
|
530
|
+
1. Replace Chakra's `Fade`, `Slide` with CSS transitions
|
|
531
|
+
2. Use Tailwind's animation utilities
|
|
532
|
+
3. Consider Framer Motion for complex animations
|
|
533
|
+
|
|
534
|
+
## Support and Resources
|
|
535
|
+
|
|
536
|
+
- **Documentation**: [MachineMetrics Components Docs](https://components.machinemetrics.com)
|
|
537
|
+
- **GitHub**: [Component Library Repository](https://github.com/machinemetrics/mm-react-components)
|
|
538
|
+
- **Issues**: Report migration issues on GitHub
|
|
539
|
+
- **Community**: Join the MachineMetrics developer community
|
|
540
|
+
|
|
541
|
+
## Migration Script Usage
|
|
542
|
+
|
|
543
|
+
The automated migration script can be run with:
|
|
544
|
+
|
|
545
|
+
```bash
|
|
546
|
+
# Preview changes (dry run)
|
|
547
|
+
node scripts/chakra-to-shadcn-migrator/chakra-to-shadcn.js
|
|
548
|
+
|
|
549
|
+
# Apply changes
|
|
550
|
+
node scripts/chakra-to-shadcn-migrator/chakra-to-shadcn.js --apply
|
|
551
|
+
|
|
552
|
+
# With verbose output
|
|
553
|
+
node scripts/chakra-to-shadcn-migrator/chakra-to-shadcn.js --apply --verbose
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
## Conclusion
|
|
557
|
+
|
|
558
|
+
This guide provides comprehensive instructions for migrating from Chakra UI to MachineMetrics React Components. The automated script handles most cases, but manual conversion may be necessary for complex scenarios. Always test thoroughly after migration to ensure functionality is preserved.
|