@mezzanine-ui/react 1.0.0-rc.5 → 1.0.0-rc.7

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 (213) hide show
  1. package/Accordion/Accordion.d.ts +36 -0
  2. package/Accordion/Accordion.js +37 -1
  3. package/AlertBanner/AlertBanner.d.ts +30 -1
  4. package/AlertBanner/AlertBanner.js +56 -12
  5. package/AutoComplete/AutoComplete.d.ts +75 -11
  6. package/AutoComplete/AutoComplete.js +145 -25
  7. package/AutoComplete/AutoCompleteInside.d.ts +54 -0
  8. package/AutoComplete/AutoCompleteInside.js +17 -0
  9. package/AutoComplete/useAutoCompleteKeyboard.d.ts +2 -1
  10. package/AutoComplete/useAutoCompleteKeyboard.js +4 -1
  11. package/Backdrop/Backdrop.d.ts +33 -1
  12. package/Backdrop/Backdrop.js +33 -1
  13. package/Badge/Badge.d.ts +26 -1
  14. package/Badge/Badge.js +26 -1
  15. package/Badge/typings.d.ts +15 -0
  16. package/Breadcrumb/BreadcrumbDropdown.d.ts +1 -1
  17. package/Breadcrumb/BreadcrumbOverflowMenuDropdown.d.ts +1 -1
  18. package/Breadcrumb/typings.d.ts +1 -1
  19. package/Button/Button.d.ts +26 -1
  20. package/Button/Button.js +33 -5
  21. package/COMPONENTS.md +267 -0
  22. package/Calendar/useCalendarControls.d.ts +18 -0
  23. package/Calendar/useCalendarControls.js +18 -0
  24. package/Card/FourThumbnailCard.js +1 -1
  25. package/Card/SingleThumbnailCard.js +1 -1
  26. package/Checkbox/Checkbox.d.ts +30 -1
  27. package/Checkbox/Checkbox.js +54 -4
  28. package/Checkbox/CheckboxGroup.d.ts +39 -1
  29. package/Checkbox/CheckboxGroup.js +49 -3
  30. package/Cropper/Cropper.d.ts +2 -2
  31. package/Cropper/Cropper.js +2 -3
  32. package/Cropper/CropperElement.js +1 -1
  33. package/Cropper/utils/cropper-calculations.d.ts +1 -1
  34. package/Cropper/utils/cropper-calculations.js +16 -14
  35. package/DatePicker/DatePicker.d.ts +36 -2
  36. package/DatePicker/DatePicker.js +36 -2
  37. package/DateRangePicker/useDateRangePickerValue.d.ts +24 -0
  38. package/DateRangePicker/useDateRangePickerValue.js +24 -0
  39. package/Description/Description.d.ts +1 -1
  40. package/Description/Description.js +1 -1
  41. package/Description/DescriptionTitle.d.ts +6 -1
  42. package/Description/DescriptionTitle.js +2 -2
  43. package/Drawer/Drawer.d.ts +78 -33
  44. package/Drawer/Drawer.js +72 -34
  45. package/Dropdown/Dropdown.d.ts +63 -1
  46. package/Dropdown/Dropdown.js +203 -9
  47. package/Dropdown/DropdownItem.d.ts +26 -2
  48. package/Dropdown/DropdownItem.js +91 -43
  49. package/Dropdown/DropdownItemCard.d.ts +3 -2
  50. package/Dropdown/DropdownItemCard.js +8 -5
  51. package/Dropdown/DropdownStatus.d.ts +2 -2
  52. package/Dropdown/DropdownStatus.js +3 -2
  53. package/Dropdown/dropdownKeydownHandler.d.ts +6 -0
  54. package/Dropdown/dropdownKeydownHandler.js +14 -7
  55. package/Empty/icons/EmptyMainInitialDataIcon.js +1 -1
  56. package/Empty/icons/EmptyMainNotificationIcon.js +1 -1
  57. package/Empty/icons/EmptyMainResultIcon.js +1 -1
  58. package/Empty/icons/EmptyMainSystemIcon.js +1 -1
  59. package/FilterArea/Filter.d.ts +25 -2
  60. package/FilterArea/Filter.js +43 -2
  61. package/FilterArea/FilterArea.d.ts +43 -4
  62. package/FilterArea/FilterArea.js +39 -4
  63. package/FilterArea/FilterAreaContext.d.ts +6 -0
  64. package/FilterArea/FilterAreaContext.js +6 -0
  65. package/FilterArea/FilterLine.d.ts +19 -0
  66. package/FilterArea/FilterLine.js +19 -0
  67. package/FilterArea/index.d.ts +2 -2
  68. package/FilterArea/index.js +1 -1
  69. package/Form/FormField.d.ts +43 -2
  70. package/Form/FormField.js +40 -3
  71. package/Form/typings.d.ts +2 -0
  72. package/Form/useAutoCompleteValueControl.d.ts +20 -0
  73. package/Form/useAutoCompleteValueControl.js +20 -0
  74. package/Form/useCheckboxControlValue.d.ts +19 -0
  75. package/Form/useCheckboxControlValue.js +19 -0
  76. package/Form/useControlValueState.d.ts +16 -0
  77. package/Form/useControlValueState.js +16 -0
  78. package/Form/useCustomControlValue.d.ts +17 -0
  79. package/Form/useCustomControlValue.js +17 -0
  80. package/Form/useInputControlValue.d.ts +19 -0
  81. package/Form/useInputControlValue.js +19 -0
  82. package/Form/useInputWithClearControlValue.d.ts +20 -0
  83. package/Form/useInputWithClearControlValue.js +20 -0
  84. package/Form/useRadioControlValue.d.ts +19 -0
  85. package/Form/useRadioControlValue.js +19 -0
  86. package/Form/useSelectValueControl.d.ts +19 -0
  87. package/Form/useSelectValueControl.js +19 -0
  88. package/Form/useSwitchControlValue.d.ts +18 -0
  89. package/Form/useSwitchControlValue.js +18 -0
  90. package/Icon/Icon.d.ts +23 -1
  91. package/Icon/Icon.js +23 -1
  92. package/Input/Input.d.ts +31 -1
  93. package/Input/Input.js +31 -1
  94. package/Input/SpinnerButton/SpinnerButton.js +1 -1
  95. package/Message/Message.d.ts +56 -6
  96. package/Message/Message.js +59 -52
  97. package/Modal/Modal.d.ts +76 -4
  98. package/Modal/Modal.js +117 -6
  99. package/Modal/ModalBodyForVerification.js +3 -1
  100. package/Modal/ModalFooter.d.ts +21 -6
  101. package/Modal/ModalHeader.d.ts +50 -11
  102. package/Modal/ModalHeader.js +1 -1
  103. package/Modal/index.d.ts +1 -1
  104. package/Navigation/Navigation.js +20 -11
  105. package/Navigation/NavigationHeader.js +2 -1
  106. package/Navigation/NavigationIconButton.d.ts +8 -0
  107. package/Navigation/NavigationIconButton.js +2 -2
  108. package/Navigation/NavigationOption.js +6 -3
  109. package/Navigation/NavigationOverflowMenu.js +9 -6
  110. package/Navigation/NavigationUserMenu.js +3 -1
  111. package/Navigation/context.d.ts +1 -0
  112. package/NotificationCenter/NotificationCenter.d.ts +59 -9
  113. package/NotificationCenter/NotificationCenter.js +150 -54
  114. package/NotificationCenter/NotificationCenterDrawer.d.ts +56 -6
  115. package/NotificationCenter/NotificationCenterDrawer.js +6 -8
  116. package/NotificationCenter/index.d.ts +1 -1
  117. package/OverflowTooltip/OverflowTooltip.js +46 -5
  118. package/PageFooter/PageFooter.d.ts +1 -1
  119. package/PageFooter/PageFooter.js +8 -16
  120. package/Pagination/Pagination.d.ts +38 -1
  121. package/Pagination/Pagination.js +38 -1
  122. package/Pagination/PaginationPageSize.js +1 -1
  123. package/Pagination/usePagination.d.ts +20 -0
  124. package/Pagination/usePagination.js +20 -0
  125. package/Progress/Progress.d.ts +24 -1
  126. package/Progress/Progress.js +24 -1
  127. package/README.md +82 -0
  128. package/Radio/Radio.d.ts +35 -1
  129. package/Radio/Radio.js +50 -12
  130. package/Radio/RadioGroup.d.ts +2 -2
  131. package/Radio/RadioGroupContext.d.ts +3 -2
  132. package/Section/SectionGroup.d.ts +20 -0
  133. package/Section/SectionGroup.js +16 -0
  134. package/Section/index.d.ts +2 -0
  135. package/Section/index.js +1 -0
  136. package/Select/Select.d.ts +55 -1
  137. package/Select/Select.js +37 -2
  138. package/Select/typings.d.ts +9 -0
  139. package/{Selection/Selection.d.ts → SelectionCard/SelectionCard.d.ts} +23 -11
  140. package/{Selection/Selection.js → SelectionCard/SelectionCard.js} +14 -14
  141. package/SelectionCard/SelectionCardGroup.d.ts +28 -0
  142. package/SelectionCard/index.d.ts +12 -0
  143. package/SelectionCard/index.js +5 -0
  144. package/Separator/Separator.d.ts +19 -1
  145. package/Separator/Separator.js +19 -1
  146. package/Slider/Slider.d.ts +11 -0
  147. package/Slider/useSlider.d.ts +21 -0
  148. package/Spin/Spin.d.ts +14 -5
  149. package/Spin/Spin.js +6 -8
  150. package/Stepper/Stepper.d.ts +34 -1
  151. package/Stepper/Stepper.js +34 -1
  152. package/Stepper/useStepper.d.ts +18 -0
  153. package/Stepper/useStepper.js +18 -0
  154. package/Tab/Tab.d.ts +33 -1
  155. package/Tab/Tab.js +33 -1
  156. package/Table/Table.d.ts +51 -3
  157. package/Table/Table.js +52 -4
  158. package/Table/hooks/useTableDataSource.d.ts +4 -4
  159. package/Table/hooks/useTableDataSource.js +1 -1
  160. package/Tag/Tag.d.ts +27 -1
  161. package/Tag/Tag.js +27 -1
  162. package/Tag/typings.d.ts +28 -0
  163. package/Textarea/Textarea.d.ts +28 -1
  164. package/Textarea/Textarea.js +25 -1
  165. package/TimePicker/TimePicker.js +1 -1
  166. package/TimeRangePicker/TimeRangePicker.js +1 -1
  167. package/Toggle/Toggle.d.ts +34 -1
  168. package/Toggle/Toggle.js +34 -1
  169. package/Tooltip/Tooltip.d.ts +39 -1
  170. package/Tooltip/Tooltip.js +39 -1
  171. package/Tooltip/useDelayMouseEnterLeave.d.ts +17 -0
  172. package/Tooltip/useDelayMouseEnterLeave.js +17 -0
  173. package/Typography/Typography.d.ts +23 -1
  174. package/Typography/Typography.js +23 -1
  175. package/Upload/Upload.d.ts +13 -7
  176. package/Upload/Upload.js +55 -20
  177. package/Upload/UploadItem.d.ts +3 -3
  178. package/Upload/UploadItem.js +11 -8
  179. package/Upload/UploadPictureCard.d.ts +5 -0
  180. package/Upload/UploadPictureCard.js +10 -6
  181. package/Upload/Uploader.d.ts +32 -31
  182. package/Upload/Uploader.js +10 -9
  183. package/hooks/useClickAway.d.ts +16 -0
  184. package/hooks/useClickAway.js +16 -0
  185. package/hooks/useComposeRefs.d.ts +15 -0
  186. package/hooks/useComposeRefs.js +15 -0
  187. package/hooks/useDocumentEscapeKeyDown.d.ts +15 -0
  188. package/hooks/useDocumentEscapeKeyDown.js +15 -0
  189. package/hooks/useDocumentEvents.d.ts +16 -0
  190. package/hooks/useDocumentEvents.js +16 -0
  191. package/hooks/useDocumentTabKeyDown.d.ts +15 -0
  192. package/hooks/useDocumentTabKeyDown.js +15 -0
  193. package/hooks/useIsomorphicLayoutEffect.d.ts +16 -0
  194. package/hooks/useIsomorphicLayoutEffect.js +16 -0
  195. package/hooks/useLastCallback.d.ts +15 -0
  196. package/hooks/useLastCallback.js +15 -0
  197. package/hooks/useLastValue.d.ts +18 -0
  198. package/hooks/useLastValue.js +18 -0
  199. package/hooks/usePreviousValue.d.ts +14 -0
  200. package/hooks/usePreviousValue.js +14 -0
  201. package/hooks/useScrollLock.d.ts +6 -4
  202. package/hooks/useScrollLock.js +6 -4
  203. package/hooks/useTopStack.d.ts +17 -0
  204. package/hooks/useTopStack.js +17 -0
  205. package/hooks/useWindowWidth.d.ts +14 -0
  206. package/hooks/useWindowWidth.js +14 -0
  207. package/index.d.ts +6 -4
  208. package/index.js +3 -2
  209. package/llms.txt +200 -0
  210. package/package.json +5 -4
  211. package/Selection/SelectionGroup.d.ts +0 -28
  212. package/Selection/index.d.ts +0 -12
  213. package/Selection/index.js +0 -5
@@ -11,6 +11,24 @@ export interface UseStepperOptions {
11
11
  */
12
12
  totalSteps?: number;
13
13
  }
14
+ /**
15
+ * 管理多步驟流程狀態的 Hook。
16
+ *
17
+ * 維護當前步驟索引,並提供 `nextStep`、`prevStep`、`goToStep` 等導航方法,
18
+ * 同時暴露 `isFirstStep` 與 `isLastStep` 兩個旗標以簡化邊界判斷。
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * import { useStepper } from '@mezzanine-ui/react';
23
+ *
24
+ * const { currentStep, nextStep, prevStep, isFirstStep, isLastStep } = useStepper({
25
+ * totalSteps: 3,
26
+ * defaultStep: 0,
27
+ * });
28
+ * ```
29
+ *
30
+ * @see {@link Stepper} 搭配的元件
31
+ */
14
32
  export declare const useStepper: ({ defaultStep, totalSteps, }: UseStepperOptions) => {
15
33
  currentStep: number;
16
34
  goToStep: (step: number) => void;
@@ -1,5 +1,23 @@
1
1
  import { useState } from 'react';
2
2
 
3
+ /**
4
+ * 管理多步驟流程狀態的 Hook。
5
+ *
6
+ * 維護當前步驟索引,並提供 `nextStep`、`prevStep`、`goToStep` 等導航方法,
7
+ * 同時暴露 `isFirstStep` 與 `isLastStep` 兩個旗標以簡化邊界判斷。
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { useStepper } from '@mezzanine-ui/react';
12
+ *
13
+ * const { currentStep, nextStep, prevStep, isFirstStep, isLastStep } = useStepper({
14
+ * totalSteps: 3,
15
+ * defaultStep: 0,
16
+ * });
17
+ * ```
18
+ *
19
+ * @see {@link Stepper} 搭配的元件
20
+ */
3
21
  const useStepper = ({ defaultStep = 0, totalSteps = Number.MAX_VALUE, }) => {
4
22
  const [currentStep, setCurrentStep] = useState(defaultStep);
5
23
  const goToStep = (step) => {
package/Tab/Tab.d.ts CHANGED
@@ -33,7 +33,39 @@ export interface TabProps extends Omit<NativeElementPropsWithoutKeyAndRef<'div'>
33
33
  size?: 'main' | 'sub';
34
34
  }
35
35
  /**
36
- * The react component for `mezzanine` tab.
36
+ * 頁籤導航元件,透過底部滑動指示條標示當前選取的頁籤。
37
+ *
38
+ * 以 `TabItem` 作為子元件定義每個頁籤項目,支援水平(`horizontal`)與垂直(`vertical`)
39
+ * 兩種排列方向。可透過 `activeKey`(受控)或 `defaultActiveKey`(非受控)指定當前頁籤,
40
+ * `onChange` 回呼在切換時接收新的 `activeKey` 與索引。
41
+ *
42
+ * @example
43
+ * ```tsx
44
+ * import Tab from '@mezzanine-ui/react/Tab';
45
+ * import TabItem from '@mezzanine-ui/react/TabItem';
46
+ *
47
+ * // 基本用法(非受控)
48
+ * <Tab defaultActiveKey="home">
49
+ * <TabItem key="home">首頁</TabItem>
50
+ * <TabItem key="profile">個人資料</TabItem>
51
+ * <TabItem key="settings">設定</TabItem>
52
+ * </Tab>
53
+ *
54
+ * // 受控用法
55
+ * const [activeKey, setActiveKey] = useState<Key>('tab1');
56
+ * <Tab activeKey={activeKey} onChange={(key) => setActiveKey(key)}>
57
+ * <TabItem key="tab1">頁籤一</TabItem>
58
+ * <TabItem key="tab2">頁籤二</TabItem>
59
+ * </Tab>
60
+ *
61
+ * // 垂直方向
62
+ * <Tab direction="vertical" size="sub">
63
+ * <TabItem key="a">分類 A</TabItem>
64
+ * <TabItem key="b">分類 B</TabItem>
65
+ * </Tab>
66
+ * ```
67
+ *
68
+ * @see {@link TabItem} 頁籤項目元件
37
69
  */
38
70
  declare const Tab: import("react").ForwardRefExoticComponent<TabProps & import("react").RefAttributes<HTMLDivElement>>;
39
71
  export default Tab;
package/Tab/Tab.js CHANGED
@@ -6,7 +6,39 @@ import { flattenChildren } from '../utils/flatten-children.js';
6
6
  import cx from 'clsx';
7
7
 
8
8
  /**
9
- * The react component for `mezzanine` tab.
9
+ * 頁籤導航元件,透過底部滑動指示條標示當前選取的頁籤。
10
+ *
11
+ * 以 `TabItem` 作為子元件定義每個頁籤項目,支援水平(`horizontal`)與垂直(`vertical`)
12
+ * 兩種排列方向。可透過 `activeKey`(受控)或 `defaultActiveKey`(非受控)指定當前頁籤,
13
+ * `onChange` 回呼在切換時接收新的 `activeKey` 與索引。
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import Tab from '@mezzanine-ui/react/Tab';
18
+ * import TabItem from '@mezzanine-ui/react/TabItem';
19
+ *
20
+ * // 基本用法(非受控)
21
+ * <Tab defaultActiveKey="home">
22
+ * <TabItem key="home">首頁</TabItem>
23
+ * <TabItem key="profile">個人資料</TabItem>
24
+ * <TabItem key="settings">設定</TabItem>
25
+ * </Tab>
26
+ *
27
+ * // 受控用法
28
+ * const [activeKey, setActiveKey] = useState<Key>('tab1');
29
+ * <Tab activeKey={activeKey} onChange={(key) => setActiveKey(key)}>
30
+ * <TabItem key="tab1">頁籤一</TabItem>
31
+ * <TabItem key="tab2">頁籤二</TabItem>
32
+ * </Tab>
33
+ *
34
+ * // 垂直方向
35
+ * <Tab direction="vertical" size="sub">
36
+ * <TabItem key="a">分類 A</TabItem>
37
+ * <TabItem key="b">分類 B</TabItem>
38
+ * </Tab>
39
+ * ```
40
+ *
41
+ * @see {@link TabItem} 頁籤項目元件
10
42
  */
11
43
  const Tab = forwardRef(function Tab(props, ref) {
12
44
  const { activeKey: activeKeyProp, children, className, defaultActiveKey = 0, direction = 'horizontal', onChange, size = 'main', ...rest } = props;
package/Table/Table.d.ts CHANGED
@@ -1,9 +1,57 @@
1
1
  import { type TableDataSource } from '@mezzanine-ui/core/table';
2
2
  import type { TableProps } from './typings';
3
3
  /**
4
- * Table is a high-performance data table component with support for
5
- * virtual scrolling, column resizing, fixed columns, row selection,
6
- * sorting, expandable rows, and drag-and-drop row reordering.
4
+ * 資料表格元件,支援排序、選取、展開、虛擬捲動與拖曳排序等功能。
5
+ *
6
+ * 透過 `columns` 定義欄位結構,`dataSource` 傳入資料列;可搭配 `rowSelection`
7
+ * 啟用勾選功能、`expandable` 展開子列、`scroll.virtualized` 開啟虛擬捲動以渲染大量資料。
8
+ * `draggable` 與 `pinnable` 為互斥選項,無法同時啟用。
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * import Table from '@mezzanine-ui/react/Table';
13
+ *
14
+ * // 基本用法
15
+ * <Table
16
+ * columns={[
17
+ * { key: 'name', title: '名稱', dataIndex: 'name', width: 200 },
18
+ * { key: 'age', title: '年齡', dataIndex: 'age', width: 100 },
19
+ * ]}
20
+ * dataSource={[
21
+ * { key: '1', name: 'Alice', age: 30 },
22
+ * { key: '2', name: 'Bob', age: 25 },
23
+ * ]}
24
+ * />
25
+ *
26
+ * // 啟用虛擬捲動(大資料量)
27
+ * <Table
28
+ * columns={columns}
29
+ * dataSource={largeData}
30
+ * scroll={{ y: 400, virtualized: true }}
31
+ * />
32
+ *
33
+ * // 勾選列 + 批次操作
34
+ * <Table
35
+ * columns={columns}
36
+ * dataSource={data}
37
+ * rowSelection={{
38
+ * mode: 'checkbox',
39
+ * selectedRowKeys,
40
+ * onChange: setSelectedRowKeys,
41
+ * }}
42
+ * />
43
+ *
44
+ * // 可展開子列
45
+ * <Table
46
+ * columns={columns}
47
+ * dataSource={data}
48
+ * expandable={{
49
+ * expandedRowRender: (row) => <div>{row.detail}</div>,
50
+ * }}
51
+ * />
52
+ * ```
53
+ *
54
+ * @see {@link Pagination} 搭配 `pagination` prop 使用分頁元件
7
55
  */
8
56
  export declare const Table: <T extends TableDataSource = TableDataSource>(props: TableProps<T> & {
9
57
  ref?: React.ForwardedRef<HTMLDivElement>;
package/Table/Table.js CHANGED
@@ -244,7 +244,7 @@ function TableInner(props, ref) {
244
244
  pagination: pagination || undefined,
245
245
  pinnable: pinnableState,
246
246
  resizable,
247
- rowState,
247
+ rowState: rowState,
248
248
  rowHeight,
249
249
  scroll,
250
250
  scrollContainerRef,
@@ -421,9 +421,57 @@ function TableInner(props, ref) {
421
421
  return (jsx(DragDropContext, { onDragEnd: handleDragEnd, children: jsx(Droppable, { droppableId: "mzn-table-dnd", children: (provided) => (jsx(TableSuperContext.Provider, { value: superContextValue, children: renderMainTable(provided) })) }) }));
422
422
  }
423
423
  /**
424
- * Table is a high-performance data table component with support for
425
- * virtual scrolling, column resizing, fixed columns, row selection,
426
- * sorting, expandable rows, and drag-and-drop row reordering.
424
+ * 資料表格元件,支援排序、選取、展開、虛擬捲動與拖曳排序等功能。
425
+ *
426
+ * 透過 `columns` 定義欄位結構,`dataSource` 傳入資料列;可搭配 `rowSelection`
427
+ * 啟用勾選功能、`expandable` 展開子列、`scroll.virtualized` 開啟虛擬捲動以渲染大量資料。
428
+ * `draggable` 與 `pinnable` 為互斥選項,無法同時啟用。
429
+ *
430
+ * @example
431
+ * ```tsx
432
+ * import Table from '@mezzanine-ui/react/Table';
433
+ *
434
+ * // 基本用法
435
+ * <Table
436
+ * columns={[
437
+ * { key: 'name', title: '名稱', dataIndex: 'name', width: 200 },
438
+ * { key: 'age', title: '年齡', dataIndex: 'age', width: 100 },
439
+ * ]}
440
+ * dataSource={[
441
+ * { key: '1', name: 'Alice', age: 30 },
442
+ * { key: '2', name: 'Bob', age: 25 },
443
+ * ]}
444
+ * />
445
+ *
446
+ * // 啟用虛擬捲動(大資料量)
447
+ * <Table
448
+ * columns={columns}
449
+ * dataSource={largeData}
450
+ * scroll={{ y: 400, virtualized: true }}
451
+ * />
452
+ *
453
+ * // 勾選列 + 批次操作
454
+ * <Table
455
+ * columns={columns}
456
+ * dataSource={data}
457
+ * rowSelection={{
458
+ * mode: 'checkbox',
459
+ * selectedRowKeys,
460
+ * onChange: setSelectedRowKeys,
461
+ * }}
462
+ * />
463
+ *
464
+ * // 可展開子列
465
+ * <Table
466
+ * columns={columns}
467
+ * dataSource={data}
468
+ * expandable={{
469
+ * expandedRowRender: (row) => <div>{row.detail}</div>,
470
+ * }}
471
+ * />
472
+ * ```
473
+ *
474
+ * @see {@link Pagination} 搭配 `pagination` prop 使用分頁元件
427
475
  */
428
476
  const Table = forwardRef(TableInner);
429
477
 
@@ -10,12 +10,12 @@ export interface TableTransitionState {
10
10
  export interface UseTableDataSourceOptions<T extends TableDataSource> {
11
11
  /** Initial data source */
12
12
  initialData?: T[];
13
- /** Duration of highlight animation in ms
14
- * @default 1000
13
+ /** Duration of highlight animation in ms (stay phase)
14
+ * @default 700 — matches `long` motion token
15
15
  */
16
16
  highlightDuration?: number;
17
- /** Duration of fade out animation in ms
18
- * @default 200
17
+ /** Duration of fade out animation in ms (exit phase)
18
+ * @default 150 — matches `fast` motion token
19
19
  */
20
20
  fadeOutDuration?: number;
21
21
  }
@@ -3,7 +3,7 @@ import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
3
3
  import { getRowKey } from '@mezzanine-ui/core/table';
4
4
 
5
5
  function useTableDataSource(options = {}) {
6
- const { initialData = [], highlightDuration = 1000, fadeOutDuration = 200, } = options;
6
+ const { initialData = [], highlightDuration = 700, fadeOutDuration = 150, } = options;
7
7
  // Internal data source that includes items being deleted (for animation)
8
8
  const [internalData, setInternalData] = useState(initialData);
9
9
  // Track adding keys
package/Tag/Tag.d.ts CHANGED
@@ -1,6 +1,32 @@
1
1
  import { TagProps } from './typings';
2
2
  /**
3
- * The react component for `mezzanine` tag.
3
+ * 標籤元件,用於分類、篩選或標記內容,支援靜態、計數、可關閉及可新增四種模式。
4
+ *
5
+ * 透過 `type` prop 切換顯示模式:`static` 純標籤(預設)、`counter` 帶數字的標籤、
6
+ * `dismissable` 含關閉按鈕、`addable` 含新增按鈕。`overflow-counter` 適用於收合多餘標籤並顯示剩餘數量。
7
+ * `dismissable` 與 `addable` 模式支援 `active` 和 `disabled` 狀態。
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import Tag from '@mezzanine-ui/react/Tag';
12
+ *
13
+ * // 靜態標籤
14
+ * <Tag type="static" label="設計" />
15
+ *
16
+ * // 計數標籤
17
+ * <Tag type="counter" label="待處理" count={3} />
18
+ *
19
+ * // 可關閉標籤
20
+ * <Tag type="dismissable" label="React" onClose={() => removeTag('React')} />
21
+ *
22
+ * // 可新增標籤(按鈕形式)
23
+ * <Tag type="addable" label="新增標籤" onClick={handleAdd} />
24
+ *
25
+ * // 收合溢出的標籤數量
26
+ * <Tag type="overflow-counter" count={5} onClick={handleExpand} />
27
+ * ```
28
+ *
29
+ * @see {@link TagGroup} 以群組方式管理多個標籤
4
30
  */
5
31
  declare const Tag: import("react").ForwardRefExoticComponent<TagProps & import("react").RefAttributes<HTMLButtonElement | HTMLSpanElement>>;
6
32
  export default Tag;
package/Tag/Tag.js CHANGED
@@ -10,7 +10,33 @@ import cx from 'clsx';
10
10
  const getTagType = (props) => { var _a; return (_a = props.type) !== null && _a !== void 0 ? _a : 'static'; };
11
11
  const isTagType = (props, current) => getTagType(props) === current;
12
12
  /**
13
- * The react component for `mezzanine` tag.
13
+ * 標籤元件,用於分類、篩選或標記內容,支援靜態、計數、可關閉及可新增四種模式。
14
+ *
15
+ * 透過 `type` prop 切換顯示模式:`static` 純標籤(預設)、`counter` 帶數字的標籤、
16
+ * `dismissable` 含關閉按鈕、`addable` 含新增按鈕。`overflow-counter` 適用於收合多餘標籤並顯示剩餘數量。
17
+ * `dismissable` 與 `addable` 模式支援 `active` 和 `disabled` 狀態。
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * import Tag from '@mezzanine-ui/react/Tag';
22
+ *
23
+ * // 靜態標籤
24
+ * <Tag type="static" label="設計" />
25
+ *
26
+ * // 計數標籤
27
+ * <Tag type="counter" label="待處理" count={3} />
28
+ *
29
+ * // 可關閉標籤
30
+ * <Tag type="dismissable" label="React" onClose={() => removeTag('React')} />
31
+ *
32
+ * // 可新增標籤(按鈕形式)
33
+ * <Tag type="addable" label="新增標籤" onClick={handleAdd} />
34
+ *
35
+ * // 收合溢出的標籤數量
36
+ * <Tag type="overflow-counter" count={5} onClick={handleExpand} />
37
+ * ```
38
+ *
39
+ * @see {@link TagGroup} 以群組方式管理多個標籤
14
40
  */
15
41
  const Tag = forwardRef(function Tag(props, ref) {
16
42
  const { active, className, disabled, onClick, onClose: _onClose, readOnly, size = 'main', type: _type, ...rest } = props;
package/Tag/typings.d.ts CHANGED
@@ -36,42 +36,70 @@ type TagPropsStatic = TagSpanHostProps & {
36
36
  onClick?: never;
37
37
  };
38
38
  type TagPropsCounter = TagSpanHostProps & {
39
+ /** 標籤類型:計數器模式。 */
39
40
  type: 'counter';
41
+ /** 標籤顯示的文字。 */
40
42
  label: string;
43
+ /** 計數器顯示的數字。 */
41
44
  count: number;
45
+ /** 此模式下不適用。 */
42
46
  active?: never;
47
+ /** 此模式下不適用。 */
43
48
  disabled?: never;
49
+ /** 此模式下不適用。 */
44
50
  onClose?: never;
51
+ /** 此模式下不適用。 */
45
52
  onClick?: never;
53
+ /** 此模式下不適用。 */
46
54
  readOnly?: never;
47
55
  };
48
56
  type TagPropsOverflowCounter = TagButtonHostProps & {
57
+ /** 標籤類型:溢出計數器模式,顯示隱藏的項目數量。 */
49
58
  type: 'overflow-counter';
59
+ /** 溢出的項目數量。 */
50
60
  count: number;
61
+ /**
62
+ * 是否禁用。
63
+ * @default false
64
+ */
51
65
  disabled?: boolean;
66
+ /** 點擊時的回呼函式。 */
52
67
  onClick?: MouseEventHandler<HTMLButtonElement>;
68
+ /**
69
+ * 是否為唯讀。
70
+ * @default false
71
+ */
53
72
  readOnly?: boolean;
73
+ /** 此模式下不適用。 */
54
74
  active?: never;
75
+ /** 此模式下不適用。 */
55
76
  label?: never;
77
+ /** 此模式下不適用。 */
56
78
  onClose?: never;
57
79
  };
58
80
  type TagPropsDismissable = TagSpanHostProps & {
81
+ /** 標籤類型:可關閉模式。 */
59
82
  type: 'dismissable';
60
83
  active?: boolean;
61
84
  disabled?: boolean;
62
85
  readOnly?: never;
63
86
  label: string;
64
87
  onClose: MouseEventHandler<HTMLButtonElement>;
88
+ /** 此模式下不適用。 */
65
89
  count?: never;
90
+ /** 此模式下不適用。 */
66
91
  onClick?: never;
67
92
  };
68
93
  type TagPropsAddable = TagButtonHostProps & {
94
+ /** 標籤類型:可新增模式。 */
69
95
  type: 'addable';
70
96
  active?: boolean;
71
97
  disabled?: boolean;
72
98
  label: string;
73
99
  onClick?: MouseEventHandler<HTMLButtonElement>;
100
+ /** 此模式下不適用。 */
74
101
  count?: never;
102
+ /** 此模式下不適用。 */
75
103
  onClose?: never;
76
104
  readOnly?: never;
77
105
  };
@@ -15,12 +15,39 @@ export type TextareaProps = Omit<NativeElementPropsWithoutKeyAndRef<'textarea'>,
15
15
  /** ReadOnly state of the textarea, Only available on default type. */
16
16
  readOnly?: boolean;
17
17
  } | {
18
+ /** 文字區域類型:警告或錯誤狀態。 */
18
19
  type: 'warning' | 'error';
20
+ /** 警告/錯誤狀態下不適用。 */
19
21
  disabled?: never;
22
+ /** 警告/錯誤狀態下不適用。 */
20
23
  readOnly?: never;
21
24
  });
22
25
  /**
23
- * The react component for `mezzanine` textarea.
26
+ * 多行文字輸入區域元件,支援禁用、唯讀、警告與錯誤等視覺狀態。
27
+ *
28
+ * 以 `TextField` 作為外框容器,`type` 控制視覺樣式(`default`、`warning`、`error`),
29
+ * `disabled` 與 `readOnly` 僅在 `type="default"` 時有效。`resize` prop 對應原生 CSS
30
+ * `resize` 屬性,設為非 `none` 時會顯示右下角的調整大小拖曳圖示。
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * import Textarea from '@mezzanine-ui/react/Textarea';
35
+ *
36
+ * // 基本用法
37
+ * <Textarea placeholder="請輸入內容..." rows={4} />
38
+ *
39
+ * // 允許垂直縮放
40
+ * <Textarea resize="vertical" rows={3} />
41
+ *
42
+ * // 錯誤狀態
43
+ * <Textarea type="error" value={text} onChange={(e) => setText(e.target.value)} />
44
+ *
45
+ * // 禁用狀態
46
+ * <Textarea disabled placeholder="此欄位已停用" />
47
+ * ```
48
+ *
49
+ * @see {@link Input} 單行文字輸入元件
50
+ * @see {@link FormField} 表單欄位容器,可整合 label 與錯誤訊息
24
51
  */
25
52
  declare const Textarea: import("react").ForwardRefExoticComponent<TextareaProps & import("react").RefAttributes<HTMLDivElement>>;
26
53
  export default Textarea;
@@ -9,7 +9,31 @@ import Icon from '../Icon/Icon.js';
9
9
  import cx from 'clsx';
10
10
 
11
11
  /**
12
- * The react component for `mezzanine` textarea.
12
+ * 多行文字輸入區域元件,支援禁用、唯讀、警告與錯誤等視覺狀態。
13
+ *
14
+ * 以 `TextField` 作為外框容器,`type` 控制視覺樣式(`default`、`warning`、`error`),
15
+ * `disabled` 與 `readOnly` 僅在 `type="default"` 時有效。`resize` prop 對應原生 CSS
16
+ * `resize` 屬性,設為非 `none` 時會顯示右下角的調整大小拖曳圖示。
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * import Textarea from '@mezzanine-ui/react/Textarea';
21
+ *
22
+ * // 基本用法
23
+ * <Textarea placeholder="請輸入內容..." rows={4} />
24
+ *
25
+ * // 允許垂直縮放
26
+ * <Textarea resize="vertical" rows={3} />
27
+ *
28
+ * // 錯誤狀態
29
+ * <Textarea type="error" value={text} onChange={(e) => setText(e.target.value)} />
30
+ *
31
+ * // 禁用狀態
32
+ * <Textarea disabled placeholder="此欄位已停用" />
33
+ * ```
34
+ *
35
+ * @see {@link Input} 單行文字輸入元件
36
+ * @see {@link FormField} 表單欄位容器,可整合 label 與錯誤訊息
13
37
  */
14
38
  const Textarea = forwardRef(function Textarea(props, ref) {
15
39
  const { className, disabled, readOnly, textareaClassName, textareaRef: textareaRefProp, type = 'default', resize = 'none', ...textareaProps } = props;
@@ -204,7 +204,7 @@ const TimePicker = forwardRef(function TimePicker(props, ref) {
204
204
  }
205
205
  };
206
206
  const suffixIcon = (jsx(Icon, { "aria-label": "Open time picker", icon: ClockIcon, onClick: readOnly ? undefined : onIconClick }));
207
- return (jsxs(Fragment, { children: [jsx(PickerTrigger, { ...restTriggerProps, ref: triggerComposedRef, className: className, clearable: clearable, disabled: disabled, error: error, format: resolvedFormat, fullWidth: fullWidth, inputProps: resolvedInputProps, inputRef: inputRef, hoverValue: open && !inputValue && pendingValue
207
+ return (jsxs(Fragment, { children: [jsx(PickerTrigger, { ...restTriggerProps, ref: triggerComposedRef, className: className, clearable: clearable, disabled: disabled, error: error, forceShowClearable: !!internalValue, format: resolvedFormat, fullWidth: fullWidth, hideSuffixWhenClearable: clearable, inputProps: resolvedInputProps, inputRef: inputRef, hoverValue: open && !inputValue && pendingValue
208
208
  ? ((_b = formatToString(locale, pendingValue, resolvedFormat)) !== null && _b !== void 0 ? _b : undefined)
209
209
  : undefined, onChange: (e) => {
210
210
  const val = e.target.value;
@@ -150,7 +150,7 @@ const TimeRangePicker = forwardRef(function TimeRangePicker(props, ref) {
150
150
  });
151
151
  /** Suffix icon */
152
152
  const suffixIcon = (jsx(Icon, { "aria-label": "Open time picker", icon: ClockIcon, onClick: readOnly ? undefined : onIconClick }));
153
- return (jsxs(Fragment, { children: [jsx(RangePickerTrigger, { className: className, clearable: clearable, disabled: disabled, error: error, errorMessagesFrom: errorMessagesFrom, errorMessagesTo: errorMessagesTo, format: resolvedFormat, fullWidth: fullWidth, inputFromPlaceholder: inputFromPlaceholder, inputFromProps: inputFromProps, inputFromRef: inputFromRef, inputFromValue: inputFromValue, inputToPlaceholder: inputToPlaceholder, inputToProps: inputToProps, inputToRef: inputToRef, inputToValue: inputToValue, onClear: onClearHandler, onFromFocus: onFromFocusHandler, onIconClick: onIconClick, onInputFromChange: onInputFromChange, onInputToChange: onInputToChange, onToFocus: onToFocusHandler, prefix: prefix, readOnly: readOnly, ref: triggerComposedRef, required: required, size: size, suffixActionIcon: suffixIcon, validateFrom: validateFrom, validateTo: validateTo }), focusedInput && (jsx(TimePickerPanel, { anchor: panelAnchor, fadeProps: fadeProps, hideHour: hideHour, hideMinute: hideMinute, hideSecond: hideSecond, hourStep: hourStep, minuteStep: minuteStep, onChange: onPanelChange, onCancel: onCancel, onConfirm: onConfirm, open: open, popperProps: popperProps, ref: panelRef, secondStep: secondStep, value: panelValue }))] }));
153
+ return (jsxs(Fragment, { children: [jsx(RangePickerTrigger, { className: className, clearable: clearable, disabled: disabled, error: error, errorMessagesFrom: errorMessagesFrom, errorMessagesTo: errorMessagesTo, forceShowClearable: internalValue.some(Boolean), format: resolvedFormat, fullWidth: fullWidth, hideSuffixWhenClearable: clearable, inputFromPlaceholder: inputFromPlaceholder, inputFromProps: inputFromProps, inputFromRef: inputFromRef, inputFromValue: inputFromValue, inputToPlaceholder: inputToPlaceholder, inputToProps: inputToProps, inputToRef: inputToRef, inputToValue: inputToValue, onClear: onClearHandler, onFromFocus: onFromFocusHandler, onIconClick: onIconClick, onInputFromChange: onInputFromChange, onInputToChange: onInputToChange, onToFocus: onToFocusHandler, prefix: prefix, readOnly: readOnly, ref: triggerComposedRef, required: required, size: size, suffixActionIcon: suffixIcon, validateFrom: validateFrom, validateTo: validateTo }), focusedInput && (jsx(TimePickerPanel, { anchor: panelAnchor, fadeProps: fadeProps, hideHour: hideHour, hideMinute: hideMinute, hideSecond: hideSecond, hourStep: hourStep, minuteStep: minuteStep, onChange: onPanelChange, onCancel: onCancel, onConfirm: onConfirm, open: open, popperProps: popperProps, ref: panelRef, secondStep: secondStep, value: panelValue }))] }));
154
154
  });
155
155
 
156
156
  export { TimeRangePicker as default };
@@ -40,7 +40,40 @@ export interface ToggleProps extends Omit<NativeElementPropsWithoutKeyAndRef<'di
40
40
  supportingText?: string;
41
41
  }
42
42
  /**
43
- * The react component for `mezzanine` toggle.
43
+ * 切換開關元件,用於表示開/關二元狀態。
44
+ *
45
+ * 支援受控(`checked` + `onChange`)與非受控(`defaultChecked`)兩種用法;
46
+ * `label` 顯示於開關右側,`supportingText` 顯示於 label 下方作為輔助說明。
47
+ * `disabled` 可透過 `FormControlContext` 自動繼承,無需手動傳入。
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * import Toggle from '@mezzanine-ui/react/Toggle';
52
+ *
53
+ * // 受控用法
54
+ * <Toggle
55
+ * checked={enabled}
56
+ * onChange={(e) => setEnabled(e.target.checked)}
57
+ * label="啟用通知"
58
+ * />
59
+ *
60
+ * // 非受控用法(預設開啟)
61
+ * <Toggle defaultChecked label="自動儲存" />
62
+ *
63
+ * // 帶輔助說明文字
64
+ * <Toggle
65
+ * checked={darkMode}
66
+ * onChange={(e) => setDarkMode(e.target.checked)}
67
+ * label="深色模式"
68
+ * supportingText="切換介面主題配色"
69
+ * />
70
+ *
71
+ * // 停用狀態
72
+ * <Toggle disabled label="此功能暫不開放" />
73
+ * ```
74
+ *
75
+ * @see {@link useSwitchControlValue} 管理 Toggle 受控/非受控值狀態的 hook
76
+ * @see {@link Checkbox} 多選框元件,適用於多選場景
44
77
  */
45
78
  declare const Toggle: import("react").ForwardRefExoticComponent<ToggleProps & import("react").RefAttributes<HTMLDivElement>>;
46
79
  export default Toggle;
package/Toggle/Toggle.js CHANGED
@@ -8,7 +8,40 @@ import { FormControlContext } from '../Form/FormControlContext.js';
8
8
  import cx from 'clsx';
9
9
 
10
10
  /**
11
- * The react component for `mezzanine` toggle.
11
+ * 切換開關元件,用於表示開/關二元狀態。
12
+ *
13
+ * 支援受控(`checked` + `onChange`)與非受控(`defaultChecked`)兩種用法;
14
+ * `label` 顯示於開關右側,`supportingText` 顯示於 label 下方作為輔助說明。
15
+ * `disabled` 可透過 `FormControlContext` 自動繼承,無需手動傳入。
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * import Toggle from '@mezzanine-ui/react/Toggle';
20
+ *
21
+ * // 受控用法
22
+ * <Toggle
23
+ * checked={enabled}
24
+ * onChange={(e) => setEnabled(e.target.checked)}
25
+ * label="啟用通知"
26
+ * />
27
+ *
28
+ * // 非受控用法(預設開啟)
29
+ * <Toggle defaultChecked label="自動儲存" />
30
+ *
31
+ * // 帶輔助說明文字
32
+ * <Toggle
33
+ * checked={darkMode}
34
+ * onChange={(e) => setDarkMode(e.target.checked)}
35
+ * label="深色模式"
36
+ * supportingText="切換介面主題配色"
37
+ * />
38
+ *
39
+ * // 停用狀態
40
+ * <Toggle disabled label="此功能暫不開放" />
41
+ * ```
42
+ *
43
+ * @see {@link useSwitchControlValue} 管理 Toggle 受控/非受控值狀態的 hook
44
+ * @see {@link Checkbox} 多選框元件,適用於多選場景
12
45
  */
13
46
  const Toggle = forwardRef(function Toggle(props, ref) {
14
47
  const { disabled: disabledFromFormControl } = useContext(FormControlContext) || {};
@@ -35,7 +35,45 @@ export interface TooltipProps extends Omit<PopperProps, 'arrow' | 'children' | '
35
35
  title?: ReactNode;
36
36
  }
37
37
  /**
38
- * The react component for `mezzanine` tooltip.
38
+ * 滑鼠懸停時顯示的提示框元件。
39
+ *
40
+ * 採用 render prop 模式,`children` 為接收 `ref`、`onMouseEnter`、`onMouseLeave` 的函式。
41
+ * 內部使用 `Popper` 進行定位,並整合 `flip`、`shift` 等 floating-ui middleware 自動調整位置以避免溢出視窗。
42
+ * 支援自訂偏移量、顯示箭頭及滑鼠離開延遲時間。
43
+ *
44
+ * @example
45
+ * ```tsx
46
+ * import Tooltip from '@mezzanine-ui/react/Tooltip';
47
+ *
48
+ * // 基本用法
49
+ * <Tooltip title="這是提示文字">
50
+ * {({ ref, onMouseEnter, onMouseLeave }) => (
51
+ * <button ref={ref} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
52
+ * Hover me
53
+ * </button>
54
+ * )}
55
+ * </Tooltip>
56
+ *
57
+ * // 自訂位置與關閉箭頭
58
+ * <Tooltip title="底部提示" arrow={false} options={{ placement: 'bottom' }}>
59
+ * {({ ref, onMouseEnter, onMouseLeave }) => (
60
+ * <span ref={ref} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
61
+ * 文字
62
+ * </span>
63
+ * )}
64
+ * </Tooltip>
65
+ *
66
+ * // 增加滑鼠離開延遲
67
+ * <Tooltip title="可懸停的提示" mouseLeaveDelay={0.3}>
68
+ * {({ ref, onMouseEnter, onMouseLeave }) => (
69
+ * <button ref={ref} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
70
+ * 按鈕
71
+ * </button>
72
+ * )}
73
+ * </Tooltip>
74
+ * ```
75
+ *
76
+ * @see {@link Popper} 浮動定位元件
39
77
  */
40
78
  declare const Tooltip: import("react").ForwardRefExoticComponent<TooltipProps & import("react").RefAttributes<HTMLDivElement>>;
41
79
  export default Tooltip;