@capillarytech/blaze-ui 5.20.0 → 5.22.0
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/CapAskAira/CapAiMediaGeneration/saga.js +1446 -0
- package/CapAskAira/CapAiMediaGeneration/saga.js.map +1 -0
- package/CapCollapsibleLeftNavigation/saga.js +1441 -0
- package/CapCollapsibleLeftNavigation/saga.js.map +1 -0
- package/CapLanguageProvider/actions.js +125 -0
- package/CapLanguageProvider/actions.js.map +1 -0
- package/CapLanguageProvider/constants.js +37 -0
- package/CapLanguageProvider/constants.js.map +1 -0
- package/CapLanguageProvider/reducer.js +130 -0
- package/CapLanguageProvider/reducer.js.map +1 -0
- package/CapLanguageProvider/saga.js +1457 -0
- package/CapLanguageProvider/saga.js.map +1 -0
- package/CapLanguageProvider/selector.js +186 -0
- package/CapLanguageProvider/selector.js.map +1 -0
- package/CapSupportVideosWrapper/utils.js +34 -0
- package/CapSupportVideosWrapper/utils.js.map +1 -0
- package/package.json +1 -1
- package/CapActionBar/README.md +0 -11
- package/CapAdvancedIcon/README.md +0 -185
- package/CapAdvancedIcon/use-cases.md +0 -44
- package/CapAlert/README.md +0 -144
- package/CapAppNotEnabled/README.md +0 -84
- package/CapAskAira/README.md +0 -328
- package/CapBanner/README.md +0 -4
- package/CapBlock/README.md +0 -175
- package/CapBorderedBox/Status.md +0 -40
- package/CapCSVFileUploader/README.md +0 -124
- package/CapCSVFileUploader/Status.md +0 -47
- package/CapCard/README.md +0 -85
- package/CapCard/Status.md +0 -41
- package/CapCardBox/README.md +0 -169
- package/CapCardBox/Status.md +0 -52
- package/CapCarousel/README.md +0 -190
- package/CapCarousel/Status.md +0 -73
- package/CapCheckbox/README.md +0 -254
- package/CapCheckbox/Status.md +0 -41
- package/CapColorPicker/README.md +0 -112
- package/CapColorPicker/Status.md +0 -52
- package/CapColorPicker/tests/USE_CASES_ANALYSIS.md +0 -92
- package/CapColoredTag/README.md +0 -167
- package/CapColoredTag/Status.md +0 -49
- package/CapConditionPreview/MIGRATION_ANALYSIS.md +0 -70
- package/CapConditionPreview/README.md +0 -40
- package/CapConditionPreview/tests/USE_CASES_CapConditionPreview.md +0 -65
- package/CapCustomCard/README.md +0 -182
- package/CapCustomCard/Status.md +0 -40
- package/CapCustomCarousel/Status.md +0 -69
- package/CapCustomCheckboxList/README.md +0 -178
- package/CapCustomCheckboxList/Status.md +0 -52
- package/CapCustomCheckboxList/tests/USE_CASES_ANALYSIS.md +0 -174
- package/CapCustomList/README.md +0 -117
- package/CapCustomList/Status.md +0 -77
- package/CapCustomList/tests/USE_CASES_ANALYSIS.md +0 -124
- package/CapCustomSelect/README.md +0 -38
- package/CapDatePicker/README.md +0 -139
- package/CapDateRangePicker/README.md +0 -159
- package/CapDateTimePicker/README.md +0 -136
- package/CapDateTimeRangePicker/README.md +0 -243
- package/CapDivider/README.md +0 -122
- package/CapDrawer/README.md +0 -207
- package/CapDrawer/Status.md +0 -52
- package/CapDrawer/tests/MISSING_USE_CASES.md +0 -170
- package/CapDropdown/README.md +0 -515
- package/CapDropdown/Status.md +0 -45
- package/CapDropdown/tests/USE_CASES_ANALYSIS.md +0 -137
- package/CapError/README.md +0 -88
- package/CapErrorBoundary/CapErrorBoundary-use-cases.md +0 -89
- package/CapErrorBoundary/README.md +0 -150
- package/CapErrorStateIllustration/README.md +0 -222
- package/CapErrorStateIllustration/USE_CASES.md +0 -33
- package/CapExpressionEditor/README.md +0 -32
- package/CapForm/README.md +0 -132
- package/CapForm/Status.md +0 -40
- package/CapForm/tests/PHASE1_UNFULFILLED_USE_CASES.md +0 -113
- package/CapForm/tests/USE_CASES_ANALYSIS.md +0 -119
- package/CapFormItem/README.md +0 -320
- package/CapFormItem/Status.md +0 -73
- package/CapFormItem/tests/USE_CASES_ANALYSIS.md +0 -84
- package/CapGraph/README.md +0 -69
- package/CapGraph/USE_CASES.md +0 -66
- package/CapHamburgerMenu/README.md +0 -234
- package/CapHamburgerMenu/USE_CASES.md +0 -48
- package/CapHeader/Status.md +0 -41
- package/CapHeading/README.md +0 -220
- package/CapHeading/Status.md +0 -41
- package/CapIcon/README.md +0 -207
- package/CapIllustration/Status.md +0 -41
- package/CapImage/README.md +0 -50
- package/CapImportMFEComponent/README.md +0 -121
- package/CapInfoNote/Status.md +0 -40
- package/CapInfoNote/tests/USE_CASES_ANALYSIS.md +0 -114
- package/CapInput/README.md +0 -196
- package/CapInput/Status.md +0 -123
- package/CapInput/tests/USE_CASES_ANALYSIS.md +0 -169
- package/CapLanguageProvider/CapLanguageProvider-use-cases.md +0 -56
- package/CapLanguageProvider/README.md +0 -206
- package/CapLevelGraphRenderer/CapLevelGraphRenderer-test-cases.md +0 -50
- package/CapLevelGraphRenderer/README.md +0 -123
- package/CapLevelGraphRenderer/Tooltip_MIGRATION_ANALYSIS.md +0 -120
- package/CapLink/README.md +0 -203
- package/CapLink/Status.md +0 -32
- package/CapLink/tests/CapLink.missingUseCases.md +0 -95
- package/CapList/README.md +0 -129
- package/CapList/Status.md +0 -69
- package/CapListLayout/README.md +0 -7
- package/CapLogin/README.md +0 -7
- package/CapMenu/README.md +0 -86
- package/CapModal/README.md +0 -357
- package/CapModal/Status.md +0 -52
- package/CapModal/tests/USE_CASES_GAPS.md +0 -207
- package/CapMultiSelect/README.md +0 -170
- package/CapMultiSelect/tests/USE_CASES_ANALYSIS.md +0 -29
- package/CapMultiSelectDatePicker/README.md +0 -11
- package/CapNavigation/README.md +0 -72
- package/CapNotification/README.md +0 -228
- package/CapNotificationDropdown/README.md +0 -5
- package/CapPopover/README.md +0 -234
- package/CapProgress/Status.md +0 -40
- package/CapRadio/Status.md +0 -54
- package/CapRadioButton/README.md +0 -152
- package/CapRadioButton/Status.md +0 -70
- package/CapRadioButton/tests/USE_CASES_ANALYSIS.md +0 -120
- package/CapRadioCard/README.md +0 -161
- package/CapRadioCard/Status.md +0 -78
- package/CapRadioGroup/README.md +0 -141
- package/CapRadioGroup/Status.md +0 -59
- package/CapReorderComponent/README.md +0 -179
- package/CapReorderComponent/Status.md +0 -41
- package/CapRoadMap/README.md +0 -126
- package/CapRoadMap/Status.md +0 -53
- package/CapRoadMap/tests/USE_CASE_GAPS.md +0 -92
- package/CapRow/README.md +0 -424
- package/CapSKUUploader/README.md +0 -189
- package/CapSKUUploader/Status.md +0 -66
- package/CapSecondaryTopBar/README.md +0 -7
- package/CapSelect/README.md +0 -243
- package/CapSelectFilter/README.md +0 -121
- package/CapShape/README.md +0 -96
- package/CapShape/Status.md +0 -36
- package/CapShape/tests/USE_CASES_ANALYSIS.md +0 -120
- package/CapSideBar/README.md +0 -298
- package/CapSideBar/Status.md +0 -5
- package/CapSlideBox/README.md +0 -68
- package/CapSlider/README.md +0 -423
- package/CapSlider/Status.md +0 -48
- package/CapSlider/tests/TEST_COVERAGE.md +0 -118
- package/CapSnackBar/README.md +0 -222
- package/CapSnackBar/Status.md +0 -41
- package/CapSomethingWentWrong/README.md +0 -97
- package/CapSplit/README.md +0 -19
- package/CapStatisticCard/README.md +0 -138
- package/CapStatus/README.md +0 -148
- package/CapStatus/Status.md +0 -40
- package/CapSteps/Status.md +0 -40
- package/CapStepsAccordian/README.md +0 -305
- package/CapStepsAccordian/Status.md +0 -48
- package/CapSupportVideosWrapper/README.md +0 -14
- package/CapSwitch/README.md +0 -351
- package/CapTab/README.md +0 -406
- package/CapTab/Status.md +0 -104
- package/CapTab/tests/USE_CASE_GAPS.md +0 -143
- package/CapTabV3/ANALYSIS.md +0 -60
- package/CapTabV3/README.md +0 -156
- package/CapTabV3/Status.md +0 -52
- package/CapTabV3/tests/USE_CASE_GAPS.md +0 -149
- package/CapTable/README.md +0 -160
- package/CapTable/Status.md +0 -41
- package/CapTag/README.md +0 -16
- package/CapTagDropdown/README.md +0 -171
- package/CapTagDropdown/Status.md +0 -55
- package/CapTimePicker/README.md +0 -170
- package/CapTooltip/README.md +0 -336
- package/CapTooltipWithInfo/Status.md +0 -75
- package/CapTopBar/README.md +0 -146
- package/CapTree/README.md +0 -124
- package/CapTree/Status.md +0 -48
- package/CapTree/tests/STATUS.md +0 -154
- package/CapTreeSelect/README.md +0 -217
- package/CapTreeSelect/Status.md +0 -52
- package/CapTruncateList/README.md +0 -13
- package/CapUnifiedSelect/README.md +0 -40
- package/CapUploader/README.md +0 -313
- package/CapUploader/Status.md +0 -76
- package/CapUploader/tests/USE_CASES_ANALYSIS.md +0 -225
- package/CapUserProfile/README.md +0 -105
- package/CapUserProfile/Status.md +0 -95
- package/CapVirtualList/README.md +0 -162
- package/CapVirtualList/Status.md +0 -71
- package/assets/HOCs/ComponentWithLabelHOC/README.md +0 -230
package/CapDropdown/README.md
DELETED
|
@@ -1,515 +0,0 @@
|
|
|
1
|
-
# CapDropdown Migration Guide
|
|
2
|
-
|
|
3
|
-
## Summary
|
|
4
|
-
|
|
5
|
-
CapDropdown has been migrated from `cap-ui-library` to `blaze-ui` with the following changes:
|
|
6
|
-
|
|
7
|
-
- Converted from JavaScript to TypeScript
|
|
8
|
-
- Converted from styled-components to SCSS modules
|
|
9
|
-
- Migrated to Ant Design v6 APIs
|
|
10
|
-
- Added backward compatibility for deprecated props
|
|
11
|
-
- Added TypeScript interfaces for props
|
|
12
|
-
- Maintained backward compatibility with the existing API
|
|
13
|
-
|
|
14
|
-
## Breaking Changes
|
|
15
|
-
|
|
16
|
-
**No breaking changes from cap-ui-library v8.x**
|
|
17
|
-
|
|
18
|
-
The component maintains backward compatibility with deprecated props. However, deprecated props will show console warnings in development mode and should be migrated to the new API.
|
|
19
|
-
|
|
20
|
-
## Prop Changes
|
|
21
|
-
|
|
22
|
-
### New Props (v6 API)
|
|
23
|
-
|
|
24
|
-
| Prop | Type | Default | Description |
|
|
25
|
-
|------|------|---------|-------------|
|
|
26
|
-
| `open` | `boolean` | `undefined` | Whether the dropdown menu is open (v6 API) |
|
|
27
|
-
| `onOpenChange` | `(open: boolean) => void` | `undefined` | Callback when dropdown open state changes (v6 API) |
|
|
28
|
-
| `classNames` | `DropdownProps['classNames']` | `undefined` | Custom class names for dropdown parts (v6 API) |
|
|
29
|
-
|
|
30
|
-
### Deprecated Props (Still Supported)
|
|
31
|
-
|
|
32
|
-
| Prop | Type | Status | Migration |
|
|
33
|
-
|------|------|--------|-----------|
|
|
34
|
-
| `visible` | `boolean` | ⚠️ Deprecated | Use `open` instead |
|
|
35
|
-
| `onVisibleChange` | `(visible: boolean) => void` | ⚠️ Deprecated | Use `onOpenChange` instead |
|
|
36
|
-
| `overlayClassName` | `string` | ⚠️ Deprecated | Use `classNames.root` instead |
|
|
37
|
-
| `overlayStyle` | `React.CSSProperties` | ⚠️ Deprecated | Use `styles.root` instead |
|
|
38
|
-
| `overlay` | `React.ReactNode` | ⚠️ Deprecated | Use `menu` prop for menu configurations or `dropdownRender` for custom ReactNodes |
|
|
39
|
-
| `placement` (topCenter/bottomCenter) | `string` | ⚠️ Deprecated | Use `top`/`bottom` instead |
|
|
40
|
-
|
|
41
|
-
### Placement Values
|
|
42
|
-
|
|
43
|
-
**Deprecated placements:**
|
|
44
|
-
- `topCenter` → Use `top` instead
|
|
45
|
-
- `bottomCenter` → Use `bottom` instead
|
|
46
|
-
|
|
47
|
-
**Valid placements:**
|
|
48
|
-
- `topLeft`, `top`, `topRight`
|
|
49
|
-
- `bottomLeft`, `bottom`, `bottomRight`
|
|
50
|
-
|
|
51
|
-
### Other Props
|
|
52
|
-
|
|
53
|
-
| Prop | Type | Default | Description |
|
|
54
|
-
|------|------|---------|-------------|
|
|
55
|
-
| `className` | `string` | `undefined` | Additional CSS class name |
|
|
56
|
-
| `menu` | `DropdownProps['menu']` | `undefined` | Menu configuration object |
|
|
57
|
-
| `trigger` | `Array<'click' \| 'hover' \| 'contextMenu'>` | `['hover']` | Trigger actions |
|
|
58
|
-
| `placement` | `DeprecatedPlacement \| V6Placement` | `'bottomLeft'` | Dropdown placement |
|
|
59
|
-
| `disabled` | `boolean` | `false` | Whether dropdown is disabled |
|
|
60
|
-
| `children` | `React.ReactNode` | - | Trigger element |
|
|
61
|
-
|
|
62
|
-
## CapDropdown.Button
|
|
63
|
-
|
|
64
|
-
CapDropdown includes a `Button` subcomponent that replaces the deprecated `Dropdown.Button` from Ant Design v3.
|
|
65
|
-
|
|
66
|
-
### CapDropdown.Button Props
|
|
67
|
-
|
|
68
|
-
| Prop | Type | Default | Description |
|
|
69
|
-
|------|------|---------|-------------|
|
|
70
|
-
| `children` | `React.ReactNode` | - | Button content |
|
|
71
|
-
| `onClick` | `ButtonProps['onClick']` | `undefined` | Click handler for main button |
|
|
72
|
-
| `type` | `ButtonProps['type']` | `'default'` | Button type |
|
|
73
|
-
| `size` | `ButtonProps['size']` | `undefined` | Button size |
|
|
74
|
-
| `danger` | `boolean` | `false` | Danger button style |
|
|
75
|
-
| `loading` | `boolean` | `false` | Loading state |
|
|
76
|
-
| `icon` | `React.ReactNode` | `'▼'` | Icon for dropdown trigger button |
|
|
77
|
-
| `menu` | `DropdownProps['menu']` | `undefined` | Dropdown menu configuration |
|
|
78
|
-
| `disabled` | `boolean` | `false` | Disabled state |
|
|
79
|
-
| `buttonsRender` | `(buttons: [React.ReactNode, React.ReactNode]) => [React.ReactNode, React.ReactNode]` | `undefined` | Custom render function for buttons |
|
|
80
|
-
| `...dropdownProps` | `CapDropdownProps` | - | All other CapDropdown props |
|
|
81
|
-
|
|
82
|
-
## API Changes
|
|
83
|
-
|
|
84
|
-
### Controlled Open State (v6 API)
|
|
85
|
-
|
|
86
|
-
```tsx
|
|
87
|
-
// New v6 API (recommended)
|
|
88
|
-
const [open, setOpen] = useState(false);
|
|
89
|
-
|
|
90
|
-
<CapDropdown
|
|
91
|
-
open={open}
|
|
92
|
-
onOpenChange={setOpen}
|
|
93
|
-
menu={menu}
|
|
94
|
-
>
|
|
95
|
-
<Button>Hover me</Button>
|
|
96
|
-
</CapDropdown>
|
|
97
|
-
|
|
98
|
-
// Old API (deprecated, still works)
|
|
99
|
-
const [visible, setVisible] = useState(false);
|
|
100
|
-
|
|
101
|
-
<CapDropdown
|
|
102
|
-
visible={visible}
|
|
103
|
-
onVisibleChange={setVisible}
|
|
104
|
-
menu={menu}
|
|
105
|
-
>
|
|
106
|
-
<Button>Hover me</Button>
|
|
107
|
-
</CapDropdown>
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Overlay Class Names (v6 API)
|
|
111
|
-
|
|
112
|
-
```tsx
|
|
113
|
-
// New v6 API (recommended)
|
|
114
|
-
<CapDropdown
|
|
115
|
-
classNames={{
|
|
116
|
-
root: 'custom-overlay-class'
|
|
117
|
-
}}
|
|
118
|
-
menu={menu}
|
|
119
|
-
>
|
|
120
|
-
<Button>Hover me</Button>
|
|
121
|
-
</CapDropdown>
|
|
122
|
-
|
|
123
|
-
// Old API (deprecated, still works)
|
|
124
|
-
<CapDropdown
|
|
125
|
-
overlayClassName="custom-overlay-class"
|
|
126
|
-
menu={menu}
|
|
127
|
-
>
|
|
128
|
-
<Button>Hover me</Button>
|
|
129
|
-
</CapDropdown>
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Placement Values
|
|
133
|
-
|
|
134
|
-
```tsx
|
|
135
|
-
// New v6 API (recommended)
|
|
136
|
-
<CapDropdown placement="top" menu={menu}>
|
|
137
|
-
<Button>Hover me</Button>
|
|
138
|
-
</CapDropdown>
|
|
139
|
-
|
|
140
|
-
// Old API (deprecated, still works but mapped to new values)
|
|
141
|
-
<CapDropdown placement="topCenter" menu={menu}>
|
|
142
|
-
<Button>Hover me</Button>
|
|
143
|
-
</CapDropdown>
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Behavioral Changes
|
|
147
|
-
|
|
148
|
-
### Development Warnings
|
|
149
|
-
|
|
150
|
-
When using deprecated props in development mode, console warnings will be displayed:
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
[CapDropdown] "visible" prop is deprecated. Use "open" instead.
|
|
154
|
-
[CapDropdown] "onVisibleChange" prop is deprecated. Use "onOpenChange" instead.
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### CapDropdown.Button Implementation
|
|
158
|
-
|
|
159
|
-
The `CapDropdown.Button` component uses the `Space.Compact` pattern recommended by Ant Design v6, replacing the deprecated `Dropdown.Button` component.
|
|
160
|
-
|
|
161
|
-
## Migration Steps
|
|
162
|
-
|
|
163
|
-
### 1. Update Import
|
|
164
|
-
|
|
165
|
-
```tsx
|
|
166
|
-
// Before (cap-ui-library)
|
|
167
|
-
import CapDropdown from '@capillarytech/cap-ui-library/CapDropdown';
|
|
168
|
-
|
|
169
|
-
// After (blaze-ui)
|
|
170
|
-
import { CapDropdown } from '@capillarytech/blaze-ui';
|
|
171
|
-
// or
|
|
172
|
-
import CapDropdown from '@capillarytech/blaze-ui/CapDropdown';
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### 2. Update Controlled State Props
|
|
176
|
-
|
|
177
|
-
```tsx
|
|
178
|
-
// Before (deprecated)
|
|
179
|
-
const [visible, setVisible] = useState(false);
|
|
180
|
-
|
|
181
|
-
<CapDropdown
|
|
182
|
-
visible={visible}
|
|
183
|
-
onVisibleChange={setVisible}
|
|
184
|
-
menu={menu}
|
|
185
|
-
>
|
|
186
|
-
<Button>Hover me</Button>
|
|
187
|
-
</CapDropdown>
|
|
188
|
-
|
|
189
|
-
// After (v6 API)
|
|
190
|
-
const [open, setOpen] = useState(false);
|
|
191
|
-
|
|
192
|
-
<CapDropdown
|
|
193
|
-
open={open}
|
|
194
|
-
onOpenChange={setOpen}
|
|
195
|
-
menu={menu}
|
|
196
|
-
>
|
|
197
|
-
<Button>Hover me</Button>
|
|
198
|
-
</CapDropdown>
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### 3. Update Overlay Class Names
|
|
202
|
-
|
|
203
|
-
```tsx
|
|
204
|
-
// Before (deprecated)
|
|
205
|
-
<CapDropdown overlayClassName="custom-class" menu={menu}>
|
|
206
|
-
<Button>Hover me</Button>
|
|
207
|
-
</CapDropdown>
|
|
208
|
-
|
|
209
|
-
// After (v6 API)
|
|
210
|
-
<CapDropdown classNames={{ root: 'custom-class' }} menu={menu}>
|
|
211
|
-
<Button>Hover me</Button>
|
|
212
|
-
</CapDropdown>
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### 4. Update Placement Values
|
|
216
|
-
|
|
217
|
-
```tsx
|
|
218
|
-
// Before (deprecated)
|
|
219
|
-
<CapDropdown placement="topCenter" menu={menu}>
|
|
220
|
-
<Button>Hover me</Button>
|
|
221
|
-
</CapDropdown>
|
|
222
|
-
|
|
223
|
-
// After (v6 API)
|
|
224
|
-
<CapDropdown placement="top" menu={menu}>
|
|
225
|
-
<Button>Hover me</Button>
|
|
226
|
-
</CapDropdown>
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### 5. Migrate from `overlay` Prop to `menu` Prop
|
|
230
|
-
|
|
231
|
-
The `overlay` prop is deprecated but still supported for backward compatibility. It will show deprecation warnings in development mode.
|
|
232
|
-
|
|
233
|
-
```tsx
|
|
234
|
-
// Before (deprecated - using overlay with CapMenu)
|
|
235
|
-
import { CapDropdown, CapMenu, CapIcon } from '@capillarytech/blaze-ui';
|
|
236
|
-
|
|
237
|
-
<CapDropdown
|
|
238
|
-
overlay={
|
|
239
|
-
<CapMenu>
|
|
240
|
-
<CapMenu.Item onClick={handleEdit}>Edit</CapMenu.Item>
|
|
241
|
-
<CapMenu.Item onClick={handleRemove}>Remove</CapMenu.Item>
|
|
242
|
-
</CapMenu>
|
|
243
|
-
}
|
|
244
|
-
placement="bottomRight"
|
|
245
|
-
>
|
|
246
|
-
<CapIcon type="more" />
|
|
247
|
-
</CapDropdown>
|
|
248
|
-
|
|
249
|
-
// After (v6 API - recommended)
|
|
250
|
-
import { CapDropdown, CapIcon } from '@capillarytech/blaze-ui';
|
|
251
|
-
import type { MenuProps } from 'antd-v5';
|
|
252
|
-
|
|
253
|
-
const menu: MenuProps = {
|
|
254
|
-
items: [
|
|
255
|
-
{
|
|
256
|
-
key: 'edit',
|
|
257
|
-
label: 'Edit',
|
|
258
|
-
onClick: handleEdit,
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
key: 'remove',
|
|
262
|
-
label: 'Remove',
|
|
263
|
-
onClick: handleRemove,
|
|
264
|
-
},
|
|
265
|
-
],
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
<CapDropdown menu={menu} placement="bottomRight">
|
|
269
|
-
<CapIcon type="more" />
|
|
270
|
-
</CapDropdown>
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
**Note**: The `overlay` prop is still functional and will continue to work, but it uses the deprecated `dropdownRender` API internally. For custom ReactNodes that don't fit the menu structure, consider using `dropdownRender` directly or migrating to `Popover` component for more flexibility.
|
|
274
|
-
|
|
275
|
-
### 5. TypeScript Support (New Benefit)
|
|
276
|
-
|
|
277
|
-
If using TypeScript, you now get full type checking:
|
|
278
|
-
|
|
279
|
-
```tsx
|
|
280
|
-
import { CapDropdown, CapDropdownProps, CapDropdownButtonProps } from '@capillarytech/blaze-ui';
|
|
281
|
-
|
|
282
|
-
// Type-safe props
|
|
283
|
-
const props: CapDropdownProps = {
|
|
284
|
-
open: true,
|
|
285
|
-
onOpenChange: (open) => console.log(open),
|
|
286
|
-
menu: { items: [{ key: '1', label: 'Item 1' }] }
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
// Type-safe button props
|
|
290
|
-
const buttonProps: CapDropdownButtonProps = {
|
|
291
|
-
children: 'Actions',
|
|
292
|
-
onClick: () => console.log('clicked'),
|
|
293
|
-
menu: { items: [{ key: '1', label: 'Item 1' }] }
|
|
294
|
-
};
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
## Examples
|
|
298
|
-
|
|
299
|
-
### Basic Usage
|
|
300
|
-
|
|
301
|
-
```tsx
|
|
302
|
-
import { CapDropdown } from '@capillarytech/blaze-ui';
|
|
303
|
-
import { Button } from 'antd-v5';
|
|
304
|
-
|
|
305
|
-
const menu = {
|
|
306
|
-
items: [
|
|
307
|
-
{ key: '1', label: 'Item 1' },
|
|
308
|
-
{ key: '2', label: 'Item 2' },
|
|
309
|
-
{ key: '3', label: 'Item 3' },
|
|
310
|
-
],
|
|
311
|
-
};
|
|
312
|
-
|
|
313
|
-
function App() {
|
|
314
|
-
return (
|
|
315
|
-
<CapDropdown menu={menu}>
|
|
316
|
-
<Button>Hover me</Button>
|
|
317
|
-
</CapDropdown>
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
### Controlled Open State
|
|
323
|
-
|
|
324
|
-
```tsx
|
|
325
|
-
import { CapDropdown } from '@capillarytech/blaze-ui';
|
|
326
|
-
import { Button } from 'antd-v5';
|
|
327
|
-
import { useState } from 'react';
|
|
328
|
-
|
|
329
|
-
function App() {
|
|
330
|
-
const [open, setOpen] = useState(false);
|
|
331
|
-
const menu = {
|
|
332
|
-
items: [
|
|
333
|
-
{ key: '1', label: 'Item 1' },
|
|
334
|
-
{ key: '2', label: 'Item 2' },
|
|
335
|
-
],
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
return (
|
|
339
|
-
<CapDropdown
|
|
340
|
-
open={open}
|
|
341
|
-
onOpenChange={setOpen}
|
|
342
|
-
menu={menu}
|
|
343
|
-
trigger={['click']}
|
|
344
|
-
>
|
|
345
|
-
<Button>Click me</Button>
|
|
346
|
-
</CapDropdown>
|
|
347
|
-
);
|
|
348
|
-
}
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
### CapDropdown.Button Usage
|
|
352
|
-
|
|
353
|
-
```tsx
|
|
354
|
-
import { CapDropdown } from '@capillarytech/blaze-ui';
|
|
355
|
-
|
|
356
|
-
function App() {
|
|
357
|
-
const menu = {
|
|
358
|
-
items: [
|
|
359
|
-
{ key: '1', label: 'Action 1' },
|
|
360
|
-
{ key: '2', label: 'Action 2' },
|
|
361
|
-
],
|
|
362
|
-
};
|
|
363
|
-
|
|
364
|
-
return (
|
|
365
|
-
<CapDropdown.Button
|
|
366
|
-
onClick={() => console.log('Main button clicked')}
|
|
367
|
-
menu={menu}
|
|
368
|
-
>
|
|
369
|
-
Actions
|
|
370
|
-
</CapDropdown.Button>
|
|
371
|
-
);
|
|
372
|
-
}
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
### With Custom Overlay Styling
|
|
376
|
-
|
|
377
|
-
```tsx
|
|
378
|
-
import { CapDropdown } from '@capillarytech/blaze-ui';
|
|
379
|
-
import { Button } from 'antd-v5';
|
|
380
|
-
|
|
381
|
-
function App() {
|
|
382
|
-
const menu = {
|
|
383
|
-
items: [
|
|
384
|
-
{ key: '1', label: 'Item 1' },
|
|
385
|
-
{ key: '2', label: 'Item 2' },
|
|
386
|
-
],
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
return (
|
|
390
|
-
<CapDropdown
|
|
391
|
-
menu={menu}
|
|
392
|
-
classNames={{
|
|
393
|
-
root: 'custom-dropdown-overlay'
|
|
394
|
-
}}
|
|
395
|
-
>
|
|
396
|
-
<Button>Hover me</Button>
|
|
397
|
-
</CapDropdown>
|
|
398
|
-
);
|
|
399
|
-
}
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
### With Menu Item Handlers
|
|
403
|
-
|
|
404
|
-
```tsx
|
|
405
|
-
import { CapDropdown } from '@capillarytech/blaze-ui';
|
|
406
|
-
import { Button } from 'antd-v5';
|
|
407
|
-
import type { MenuProps } from 'antd-v5';
|
|
408
|
-
|
|
409
|
-
function App() {
|
|
410
|
-
const menu: MenuProps = {
|
|
411
|
-
items: [
|
|
412
|
-
{
|
|
413
|
-
key: '1',
|
|
414
|
-
label: 'Item 1',
|
|
415
|
-
onClick: () => console.log('Item 1 clicked'),
|
|
416
|
-
},
|
|
417
|
-
{
|
|
418
|
-
key: '2',
|
|
419
|
-
label: 'Item 2',
|
|
420
|
-
onClick: () => console.log('Item 2 clicked'),
|
|
421
|
-
},
|
|
422
|
-
],
|
|
423
|
-
};
|
|
424
|
-
|
|
425
|
-
return (
|
|
426
|
-
<CapDropdown menu={menu}>
|
|
427
|
-
<Button>Hover me</Button>
|
|
428
|
-
</CapDropdown>
|
|
429
|
-
);
|
|
430
|
-
}
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
### Legacy Overlay Prop (Deprecated)
|
|
434
|
-
|
|
435
|
-
The `overlay` prop is supported for backward compatibility but is deprecated. It will show console warnings in development mode.
|
|
436
|
-
|
|
437
|
-
```tsx
|
|
438
|
-
import { CapDropdown, CapMenu, CapIcon } from '@capillarytech/blaze-ui';
|
|
439
|
-
|
|
440
|
-
function App() {
|
|
441
|
-
const handleEdit = () => {
|
|
442
|
-
console.log('Edit clicked');
|
|
443
|
-
};
|
|
444
|
-
|
|
445
|
-
const handleRemove = () => {
|
|
446
|
-
console.log('Remove clicked');
|
|
447
|
-
};
|
|
448
|
-
|
|
449
|
-
return (
|
|
450
|
-
<CapDropdown
|
|
451
|
-
overlay={
|
|
452
|
-
<CapMenu>
|
|
453
|
-
<CapMenu.Item onClick={handleEdit}>Edit</CapMenu.Item>
|
|
454
|
-
<CapMenu.Item onClick={handleRemove}>Remove</CapMenu.Item>
|
|
455
|
-
</CapMenu>
|
|
456
|
-
}
|
|
457
|
-
placement="bottomRight"
|
|
458
|
-
trigger={['click']}
|
|
459
|
-
>
|
|
460
|
-
<CapIcon type="more" />
|
|
461
|
-
</CapDropdown>
|
|
462
|
-
);
|
|
463
|
-
}
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
**Migration**: Convert `overlay` with `CapMenu` to the `menu` prop format shown in the "With Menu Item Handlers" example above.
|
|
467
|
-
|
|
468
|
-
## TypeScript Types
|
|
469
|
-
|
|
470
|
-
```typescript
|
|
471
|
-
import type {
|
|
472
|
-
CapDropdownProps,
|
|
473
|
-
CapDropdownButtonProps,
|
|
474
|
-
DeprecatedPlacement,
|
|
475
|
-
V6Placement,
|
|
476
|
-
} from '@capillarytech/blaze-ui/CapDropdown';
|
|
477
|
-
|
|
478
|
-
// Main component props
|
|
479
|
-
interface CapDropdownProps extends Omit<DropdownProps, 'menu' | 'visible' | 'onVisibleChange' | 'overlayClassName' | 'placement' | 'overlay' | 'overlayStyle'> {
|
|
480
|
-
className?: string;
|
|
481
|
-
classNames?: DropdownProps['classNames'];
|
|
482
|
-
styles?: DropdownProps['styles'];
|
|
483
|
-
overlayClassName?: string; // @deprecated
|
|
484
|
-
overlayStyle?: React.CSSProperties; // @deprecated
|
|
485
|
-
menu?: DropdownProps['menu'];
|
|
486
|
-
overlay?: React.ReactNode; // @deprecated - Use menu prop for menu configurations or dropdownRender for custom ReactNodes
|
|
487
|
-
trigger?: Array<'click' | 'hover' | 'contextMenu'>;
|
|
488
|
-
placement?: DeprecatedPlacement | V6Placement;
|
|
489
|
-
open?: boolean;
|
|
490
|
-
onOpenChange?: (open: boolean) => void;
|
|
491
|
-
visible?: boolean; // @deprecated
|
|
492
|
-
onVisibleChange?: (visible: boolean) => void; // @deprecated
|
|
493
|
-
disabled?: boolean;
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
// Button subcomponent props
|
|
497
|
-
interface CapDropdownButtonProps extends Omit<CapDropdownProps, 'children'> {
|
|
498
|
-
children?: React.ReactNode;
|
|
499
|
-
onClick?: ButtonProps['onClick'];
|
|
500
|
-
type?: ButtonProps['type'];
|
|
501
|
-
size?: ButtonProps['size'];
|
|
502
|
-
danger?: boolean;
|
|
503
|
-
loading?: boolean;
|
|
504
|
-
icon?: React.ReactNode;
|
|
505
|
-
buttonsRender?: (buttons: [React.ReactNode, React.ReactNode]) => [React.ReactNode, React.ReactNode];
|
|
506
|
-
}
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
## Notes
|
|
510
|
-
|
|
511
|
-
- The component uses SCSS modules for styling to avoid style conflicts
|
|
512
|
-
- All deprecated props are backward compatible but will show console warnings in development
|
|
513
|
-
- The component uses Ant Design v6 APIs internally
|
|
514
|
-
- `CapDropdown.Button` replaces the deprecated `Dropdown.Button` pattern
|
|
515
|
-
- Placement values `topCenter` and `bottomCenter` are automatically mapped to `top` and `bottom`
|
package/CapDropdown/Status.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Migration Status: CapDropdown
|
|
2
|
-
|
|
3
|
-
**Last Updated**: 2026-01-19 03:33:12
|
|
4
|
-
|
|
5
|
-
## Migration Steps
|
|
6
|
-
|
|
7
|
-
- [x] **Step 0**: Setup branch and remote tracking
|
|
8
|
-
- [x] **Step 1**: Migration Prompt 1 (Main migration)
|
|
9
|
-
- [x] **Step 2**: Migration Prompt 2 (Storybook support)
|
|
10
|
-
- [x] **Step 3**: Migration Prompt 3 (Unit tests)
|
|
11
|
-
- [x] **Step 4**: Linting (ESLint)
|
|
12
|
-
- [x] **Step 5**: Pre-build Validation
|
|
13
|
-
- [x] **Step 6**: Build blaze-ui
|
|
14
|
-
- [x] **Step 7**: Visual Testing
|
|
15
|
-
- [x] **Step 8**: CSS Analysis (if mismatches found)
|
|
16
|
-
- [x] **Step 8.5**: CSS Analysis Completed
|
|
17
|
-
- [x] **Step 9**: Git Commit & Push to branch (pre-commit hook will run tests)
|
|
18
|
-
- [x] **Step 10**: Create Pull Request
|
|
19
|
-
|
|
20
|
-
## Visual Testing Results
|
|
21
|
-
|
|
22
|
-
**Last Test**: 2026-01-19 03:31:42
|
|
23
|
-
**Maximum Mismatch**: 3.60%
|
|
24
|
-
|
|
25
|
-
### Mismatched Variants:
|
|
26
|
-
- default:2.04%
|
|
27
|
-
- placement-top:2.35%
|
|
28
|
-
- trigger-click:2.60%
|
|
29
|
-
- disabled:3.60%
|
|
30
|
-
- open (with 2 interactions):3.41%
|
|
31
|
-
- hover-open (with 2 interactions):3.41%
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## CSS Fixes Applied
|
|
35
|
-
|
|
36
|
-
**Date**: 2026-01-19 03:32:15
|
|
37
|
-
**Summary**: CSS fixes applied based on visual testing analysis.
|
|
38
|
-
|
|
39
|
-
_See full analysis in: `/Users/sarahkhader/repos/migration/blaze-ui/tools/visual-testing/report/CapDropdown/css-fix-analysis.md`_
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
## Notes
|
|
43
|
-
|
|
44
|
-
_No notes yet._
|
|
45
|
-
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
# CapDropdown Use Cases Analysis
|
|
2
|
-
|
|
3
|
-
## Phase 1: Use Cases NOT Fulfilled by Component
|
|
4
|
-
|
|
5
|
-
Based on analysis of the CapDropdown component implementation and comparison with Ant Design v6 Dropdown API, the following use cases may NOT be fully fulfilled:
|
|
6
|
-
|
|
7
|
-
### 1. **Menu Item Disabled State**
|
|
8
|
-
- **Status**: ✅ Supported (via Ant Design menu items API)
|
|
9
|
-
- **Note**: Component passes through menu prop, so disabled items should work via `menu.items[].disabled`
|
|
10
|
-
|
|
11
|
-
### 2. **Submenu/Nested Menus**
|
|
12
|
-
- **Status**: ✅ Supported (via Ant Design menu items API)
|
|
13
|
-
- **Note**: Component passes through menu prop, so nested menus should work via `menu.items[].children`
|
|
14
|
-
|
|
15
|
-
### 3. **Menu Item Icons**
|
|
16
|
-
- **Status**: ✅ Supported (via Ant Design menu items API)
|
|
17
|
-
- **Note**: Component passes through menu prop, so icons work via `menu.items[].icon`
|
|
18
|
-
|
|
19
|
-
### 4. **Menu Item Danger State**
|
|
20
|
-
- **Status**: ✅ Supported (via Ant Design menu items API)
|
|
21
|
-
- **Note**: Component passes through menu prop, so danger items work via `menu.items[].danger`
|
|
22
|
-
|
|
23
|
-
### 5. **Custom Menu Rendering**
|
|
24
|
-
- **Status**: ⚠️ Limited Support
|
|
25
|
-
- **Issue**: Component doesn't expose `menu` render prop or custom menu component support
|
|
26
|
-
- **Workaround**: Can use `menu` prop with `items` array, but cannot use render props pattern
|
|
27
|
-
|
|
28
|
-
### 6. **Menu Item Click Prevention**
|
|
29
|
-
- **Status**: ✅ Supported
|
|
30
|
-
- **Note**: Can prevent default behavior in `onClick` handler
|
|
31
|
-
|
|
32
|
-
### 7. **Menu Positioning with getPopupContainer**
|
|
33
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
34
|
-
- **Issue**: Component doesn't expose `getPopupContainer` prop from Ant Design Dropdown
|
|
35
|
-
- **Impact**: Menus always render in document.body portal, cannot be scoped to specific container
|
|
36
|
-
- **Workaround**: None - would need to add prop passthrough
|
|
37
|
-
|
|
38
|
-
### 8. **Menu Destroy on Hide**
|
|
39
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
40
|
-
- **Issue**: Component doesn't expose `destroyPopupOnHide` prop from Ant Design Dropdown
|
|
41
|
-
- **Impact**: Menu DOM persists when closed (may affect performance with many dropdowns)
|
|
42
|
-
- **Workaround**: None - would need to add prop passthrough
|
|
43
|
-
|
|
44
|
-
### 9. **Menu Animation Control**
|
|
45
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
46
|
-
- **Issue**: Component doesn't expose `transitionName` or animation-related props
|
|
47
|
-
- **Impact**: Cannot customize menu open/close animations
|
|
48
|
-
- **Workaround**: None - would need to add prop passthrough
|
|
49
|
-
|
|
50
|
-
### 10. **Menu Arrow Indicator**
|
|
51
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
52
|
-
- **Issue**: Component doesn't expose `arrow` prop from Ant Design Dropdown
|
|
53
|
-
- **Impact**: Cannot show/hide arrow indicator on dropdown menu
|
|
54
|
-
- **Workaround**: None - would need to add prop passthrough
|
|
55
|
-
|
|
56
|
-
### 11. **Menu Overlay Style/ClassName per Part**
|
|
57
|
-
- **Status**: ⚠️ Partially Supported
|
|
58
|
-
- **Issue**: Component only supports `classNames.root` and deprecated `overlayClassName`
|
|
59
|
-
- **Missing**: `classNames.menu` and other v6 classNames API parts
|
|
60
|
-
- **Workaround**: Limited - can only style root overlay, not individual menu parts
|
|
61
|
-
|
|
62
|
-
### 12. **Menu Auto Adjust Placement**
|
|
63
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
64
|
-
- **Issue**: Component doesn't expose `autoAdjustOverflow` prop
|
|
65
|
-
- **Impact**: Menu may overflow viewport if placement doesn't fit
|
|
66
|
-
- **Workaround**: None - would need to add prop passthrough
|
|
67
|
-
|
|
68
|
-
### 13. **Menu Trigger Element Ref Access**
|
|
69
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
70
|
-
- **Issue**: Component doesn't expose ref forwarding for trigger element
|
|
71
|
-
- **Impact**: Cannot programmatically access trigger element
|
|
72
|
-
- **Workaround**: Wrap trigger in ref-accessible element
|
|
73
|
-
|
|
74
|
-
### 14. **Menu onMenuClick Callback**
|
|
75
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
76
|
-
- **Issue**: Component doesn't expose `onMenuClick` prop from Ant Design Dropdown
|
|
77
|
-
- **Impact**: Cannot listen to all menu clicks at dropdown level
|
|
78
|
-
- **Workaround**: Use individual item `onClick` handlers
|
|
79
|
-
|
|
80
|
-
### 15. **Menu Item Selection State**
|
|
81
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
82
|
-
- **Issue**: Component doesn't expose menu selection state management
|
|
83
|
-
- **Impact**: Cannot create selectable menu items (like radio/checkbox menus)
|
|
84
|
-
- **Workaround**: None - would need custom menu implementation
|
|
85
|
-
|
|
86
|
-
### 16. **Menu Keyboard Navigation**
|
|
87
|
-
- **Status**: ✅ Supported (via Ant Design)
|
|
88
|
-
- **Note**: Ant Design handles keyboard navigation automatically
|
|
89
|
-
|
|
90
|
-
### 17. **Menu Accessibility (ARIA)**
|
|
91
|
-
- **Status**: ✅ Supported (via Ant Design)
|
|
92
|
-
- **Note**: Ant Design provides ARIA attributes automatically
|
|
93
|
-
|
|
94
|
-
### 18. **Menu Loading State**
|
|
95
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
96
|
-
- **Issue**: Component doesn't expose menu loading state
|
|
97
|
-
- **Impact**: Cannot show loading indicator in menu
|
|
98
|
-
- **Workaround**: Use menu items with loading icons
|
|
99
|
-
|
|
100
|
-
### 19. **Menu Empty State**
|
|
101
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
102
|
-
- **Issue**: Component doesn't expose empty state rendering
|
|
103
|
-
- **Impact**: Empty menu shows nothing (no empty message)
|
|
104
|
-
- **Workaround**: Check menu.items.length and conditionally render
|
|
105
|
-
|
|
106
|
-
### 20. **Menu Item Tooltips**
|
|
107
|
-
- **Status**: ⚠️ Not Explicitly Supported
|
|
108
|
-
- **Issue**: Component doesn't expose tooltip support for menu items
|
|
109
|
-
- **Impact**: Cannot show tooltips on hover for truncated items
|
|
110
|
-
- **Workaround**: Use menu item `title` attribute or wrap in CapTooltip
|
|
111
|
-
|
|
112
|
-
## Summary
|
|
113
|
-
|
|
114
|
-
**Total Use Cases Analyzed**: 20
|
|
115
|
-
**Fully Supported**: 6 (30%)
|
|
116
|
-
**Partially Supported**: 4 (20%)
|
|
117
|
-
**Not Supported**: 10 (50%)
|
|
118
|
-
|
|
119
|
-
### Recommendations
|
|
120
|
-
|
|
121
|
-
1. **High Priority**: Add prop passthrough for commonly used Ant Design Dropdown props:
|
|
122
|
-
- `getPopupContainer`
|
|
123
|
-
- `destroyPopupOnHide`
|
|
124
|
-
- `arrow`
|
|
125
|
-
- `autoAdjustOverflow`
|
|
126
|
-
- `onMenuClick`
|
|
127
|
-
|
|
128
|
-
2. **Medium Priority**: Enhance classNames API support:
|
|
129
|
-
- Add `classNames.menu` support
|
|
130
|
-
- Support all v6 classNames parts
|
|
131
|
-
|
|
132
|
-
3. **Low Priority**: Add convenience features:
|
|
133
|
-
- Menu loading state
|
|
134
|
-
- Empty state rendering
|
|
135
|
-
- Ref forwarding for trigger
|
|
136
|
-
|
|
137
|
-
4. **Documentation**: Document limitations and workarounds for unsupported use cases
|