@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.
Files changed (189) hide show
  1. package/CapAskAira/CapAiMediaGeneration/saga.js +1446 -0
  2. package/CapAskAira/CapAiMediaGeneration/saga.js.map +1 -0
  3. package/CapCollapsibleLeftNavigation/saga.js +1441 -0
  4. package/CapCollapsibleLeftNavigation/saga.js.map +1 -0
  5. package/CapLanguageProvider/actions.js +125 -0
  6. package/CapLanguageProvider/actions.js.map +1 -0
  7. package/CapLanguageProvider/constants.js +37 -0
  8. package/CapLanguageProvider/constants.js.map +1 -0
  9. package/CapLanguageProvider/reducer.js +130 -0
  10. package/CapLanguageProvider/reducer.js.map +1 -0
  11. package/CapLanguageProvider/saga.js +1457 -0
  12. package/CapLanguageProvider/saga.js.map +1 -0
  13. package/CapLanguageProvider/selector.js +186 -0
  14. package/CapLanguageProvider/selector.js.map +1 -0
  15. package/CapSupportVideosWrapper/utils.js +34 -0
  16. package/CapSupportVideosWrapper/utils.js.map +1 -0
  17. package/package.json +1 -1
  18. package/CapActionBar/README.md +0 -11
  19. package/CapAdvancedIcon/README.md +0 -185
  20. package/CapAdvancedIcon/use-cases.md +0 -44
  21. package/CapAlert/README.md +0 -144
  22. package/CapAppNotEnabled/README.md +0 -84
  23. package/CapAskAira/README.md +0 -328
  24. package/CapBanner/README.md +0 -4
  25. package/CapBlock/README.md +0 -175
  26. package/CapBorderedBox/Status.md +0 -40
  27. package/CapCSVFileUploader/README.md +0 -124
  28. package/CapCSVFileUploader/Status.md +0 -47
  29. package/CapCard/README.md +0 -85
  30. package/CapCard/Status.md +0 -41
  31. package/CapCardBox/README.md +0 -169
  32. package/CapCardBox/Status.md +0 -52
  33. package/CapCarousel/README.md +0 -190
  34. package/CapCarousel/Status.md +0 -73
  35. package/CapCheckbox/README.md +0 -254
  36. package/CapCheckbox/Status.md +0 -41
  37. package/CapColorPicker/README.md +0 -112
  38. package/CapColorPicker/Status.md +0 -52
  39. package/CapColorPicker/tests/USE_CASES_ANALYSIS.md +0 -92
  40. package/CapColoredTag/README.md +0 -167
  41. package/CapColoredTag/Status.md +0 -49
  42. package/CapConditionPreview/MIGRATION_ANALYSIS.md +0 -70
  43. package/CapConditionPreview/README.md +0 -40
  44. package/CapConditionPreview/tests/USE_CASES_CapConditionPreview.md +0 -65
  45. package/CapCustomCard/README.md +0 -182
  46. package/CapCustomCard/Status.md +0 -40
  47. package/CapCustomCarousel/Status.md +0 -69
  48. package/CapCustomCheckboxList/README.md +0 -178
  49. package/CapCustomCheckboxList/Status.md +0 -52
  50. package/CapCustomCheckboxList/tests/USE_CASES_ANALYSIS.md +0 -174
  51. package/CapCustomList/README.md +0 -117
  52. package/CapCustomList/Status.md +0 -77
  53. package/CapCustomList/tests/USE_CASES_ANALYSIS.md +0 -124
  54. package/CapCustomSelect/README.md +0 -38
  55. package/CapDatePicker/README.md +0 -139
  56. package/CapDateRangePicker/README.md +0 -159
  57. package/CapDateTimePicker/README.md +0 -136
  58. package/CapDateTimeRangePicker/README.md +0 -243
  59. package/CapDivider/README.md +0 -122
  60. package/CapDrawer/README.md +0 -207
  61. package/CapDrawer/Status.md +0 -52
  62. package/CapDrawer/tests/MISSING_USE_CASES.md +0 -170
  63. package/CapDropdown/README.md +0 -515
  64. package/CapDropdown/Status.md +0 -45
  65. package/CapDropdown/tests/USE_CASES_ANALYSIS.md +0 -137
  66. package/CapError/README.md +0 -88
  67. package/CapErrorBoundary/CapErrorBoundary-use-cases.md +0 -89
  68. package/CapErrorBoundary/README.md +0 -150
  69. package/CapErrorStateIllustration/README.md +0 -222
  70. package/CapErrorStateIllustration/USE_CASES.md +0 -33
  71. package/CapExpressionEditor/README.md +0 -32
  72. package/CapForm/README.md +0 -132
  73. package/CapForm/Status.md +0 -40
  74. package/CapForm/tests/PHASE1_UNFULFILLED_USE_CASES.md +0 -113
  75. package/CapForm/tests/USE_CASES_ANALYSIS.md +0 -119
  76. package/CapFormItem/README.md +0 -320
  77. package/CapFormItem/Status.md +0 -73
  78. package/CapFormItem/tests/USE_CASES_ANALYSIS.md +0 -84
  79. package/CapGraph/README.md +0 -69
  80. package/CapGraph/USE_CASES.md +0 -66
  81. package/CapHamburgerMenu/README.md +0 -234
  82. package/CapHamburgerMenu/USE_CASES.md +0 -48
  83. package/CapHeader/Status.md +0 -41
  84. package/CapHeading/README.md +0 -220
  85. package/CapHeading/Status.md +0 -41
  86. package/CapIcon/README.md +0 -207
  87. package/CapIllustration/Status.md +0 -41
  88. package/CapImage/README.md +0 -50
  89. package/CapImportMFEComponent/README.md +0 -121
  90. package/CapInfoNote/Status.md +0 -40
  91. package/CapInfoNote/tests/USE_CASES_ANALYSIS.md +0 -114
  92. package/CapInput/README.md +0 -196
  93. package/CapInput/Status.md +0 -123
  94. package/CapInput/tests/USE_CASES_ANALYSIS.md +0 -169
  95. package/CapLanguageProvider/CapLanguageProvider-use-cases.md +0 -56
  96. package/CapLanguageProvider/README.md +0 -206
  97. package/CapLevelGraphRenderer/CapLevelGraphRenderer-test-cases.md +0 -50
  98. package/CapLevelGraphRenderer/README.md +0 -123
  99. package/CapLevelGraphRenderer/Tooltip_MIGRATION_ANALYSIS.md +0 -120
  100. package/CapLink/README.md +0 -203
  101. package/CapLink/Status.md +0 -32
  102. package/CapLink/tests/CapLink.missingUseCases.md +0 -95
  103. package/CapList/README.md +0 -129
  104. package/CapList/Status.md +0 -69
  105. package/CapListLayout/README.md +0 -7
  106. package/CapLogin/README.md +0 -7
  107. package/CapMenu/README.md +0 -86
  108. package/CapModal/README.md +0 -357
  109. package/CapModal/Status.md +0 -52
  110. package/CapModal/tests/USE_CASES_GAPS.md +0 -207
  111. package/CapMultiSelect/README.md +0 -170
  112. package/CapMultiSelect/tests/USE_CASES_ANALYSIS.md +0 -29
  113. package/CapMultiSelectDatePicker/README.md +0 -11
  114. package/CapNavigation/README.md +0 -72
  115. package/CapNotification/README.md +0 -228
  116. package/CapNotificationDropdown/README.md +0 -5
  117. package/CapPopover/README.md +0 -234
  118. package/CapProgress/Status.md +0 -40
  119. package/CapRadio/Status.md +0 -54
  120. package/CapRadioButton/README.md +0 -152
  121. package/CapRadioButton/Status.md +0 -70
  122. package/CapRadioButton/tests/USE_CASES_ANALYSIS.md +0 -120
  123. package/CapRadioCard/README.md +0 -161
  124. package/CapRadioCard/Status.md +0 -78
  125. package/CapRadioGroup/README.md +0 -141
  126. package/CapRadioGroup/Status.md +0 -59
  127. package/CapReorderComponent/README.md +0 -179
  128. package/CapReorderComponent/Status.md +0 -41
  129. package/CapRoadMap/README.md +0 -126
  130. package/CapRoadMap/Status.md +0 -53
  131. package/CapRoadMap/tests/USE_CASE_GAPS.md +0 -92
  132. package/CapRow/README.md +0 -424
  133. package/CapSKUUploader/README.md +0 -189
  134. package/CapSKUUploader/Status.md +0 -66
  135. package/CapSecondaryTopBar/README.md +0 -7
  136. package/CapSelect/README.md +0 -243
  137. package/CapSelectFilter/README.md +0 -121
  138. package/CapShape/README.md +0 -96
  139. package/CapShape/Status.md +0 -36
  140. package/CapShape/tests/USE_CASES_ANALYSIS.md +0 -120
  141. package/CapSideBar/README.md +0 -298
  142. package/CapSideBar/Status.md +0 -5
  143. package/CapSlideBox/README.md +0 -68
  144. package/CapSlider/README.md +0 -423
  145. package/CapSlider/Status.md +0 -48
  146. package/CapSlider/tests/TEST_COVERAGE.md +0 -118
  147. package/CapSnackBar/README.md +0 -222
  148. package/CapSnackBar/Status.md +0 -41
  149. package/CapSomethingWentWrong/README.md +0 -97
  150. package/CapSplit/README.md +0 -19
  151. package/CapStatisticCard/README.md +0 -138
  152. package/CapStatus/README.md +0 -148
  153. package/CapStatus/Status.md +0 -40
  154. package/CapSteps/Status.md +0 -40
  155. package/CapStepsAccordian/README.md +0 -305
  156. package/CapStepsAccordian/Status.md +0 -48
  157. package/CapSupportVideosWrapper/README.md +0 -14
  158. package/CapSwitch/README.md +0 -351
  159. package/CapTab/README.md +0 -406
  160. package/CapTab/Status.md +0 -104
  161. package/CapTab/tests/USE_CASE_GAPS.md +0 -143
  162. package/CapTabV3/ANALYSIS.md +0 -60
  163. package/CapTabV3/README.md +0 -156
  164. package/CapTabV3/Status.md +0 -52
  165. package/CapTabV3/tests/USE_CASE_GAPS.md +0 -149
  166. package/CapTable/README.md +0 -160
  167. package/CapTable/Status.md +0 -41
  168. package/CapTag/README.md +0 -16
  169. package/CapTagDropdown/README.md +0 -171
  170. package/CapTagDropdown/Status.md +0 -55
  171. package/CapTimePicker/README.md +0 -170
  172. package/CapTooltip/README.md +0 -336
  173. package/CapTooltipWithInfo/Status.md +0 -75
  174. package/CapTopBar/README.md +0 -146
  175. package/CapTree/README.md +0 -124
  176. package/CapTree/Status.md +0 -48
  177. package/CapTree/tests/STATUS.md +0 -154
  178. package/CapTreeSelect/README.md +0 -217
  179. package/CapTreeSelect/Status.md +0 -52
  180. package/CapTruncateList/README.md +0 -13
  181. package/CapUnifiedSelect/README.md +0 -40
  182. package/CapUploader/README.md +0 -313
  183. package/CapUploader/Status.md +0 -76
  184. package/CapUploader/tests/USE_CASES_ANALYSIS.md +0 -225
  185. package/CapUserProfile/README.md +0 -105
  186. package/CapUserProfile/Status.md +0 -95
  187. package/CapVirtualList/README.md +0 -162
  188. package/CapVirtualList/Status.md +0 -71
  189. package/assets/HOCs/ComponentWithLabelHOC/README.md +0 -230
@@ -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`
@@ -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