@wzyjs/uis 0.3.29 → 0.3.30

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 (221) hide show
  1. package/dist/advanced/Com2Canvas/index.d.ts +8 -0
  2. package/dist/advanced/Com2Canvas/index.js +39 -0
  3. package/dist/advanced/Crud/components/CardList/index.d.ts +2 -0
  4. package/dist/advanced/Crud/components/CardList/index.js +90 -0
  5. package/dist/advanced/Crud/components/CreateUpdate/index.d.ts +2 -0
  6. package/dist/advanced/Crud/components/CreateUpdate/index.js +78 -0
  7. package/dist/advanced/Crud/components/ListTabs/index.d.ts +8 -0
  8. package/dist/advanced/Crud/components/ListTabs/index.js +7 -0
  9. package/dist/advanced/Crud/components/Provider/index.d.ts +7 -0
  10. package/dist/advanced/Crud/components/Provider/index.js +42 -0
  11. package/dist/advanced/Crud/components/QuickFilters/index.d.ts +8 -0
  12. package/dist/advanced/Crud/components/QuickFilters/index.js +20 -0
  13. package/dist/advanced/Crud/components/Remove/index.d.ts +2 -0
  14. package/dist/advanced/Crud/components/Remove/index.js +18 -0
  15. package/dist/advanced/Crud/components/index.d.ts +6 -0
  16. package/dist/advanced/Crud/components/index.js +6 -0
  17. package/dist/advanced/Crud/hooks/index.d.ts +5 -0
  18. package/dist/advanced/Crud/hooks/index.js +5 -0
  19. package/dist/advanced/Crud/hooks/useColumns.d.ts +11 -0
  20. package/dist/advanced/Crud/hooks/useColumns.js +111 -0
  21. package/dist/advanced/Crud/hooks/useList.d.ts +12 -0
  22. package/dist/advanced/Crud/hooks/useList.js +53 -0
  23. package/dist/advanced/Crud/hooks/useListFilters.d.ts +11 -0
  24. package/dist/advanced/Crud/hooks/useListFilters.js +159 -0
  25. package/dist/advanced/Crud/hooks/useOrderable.d.ts +15 -0
  26. package/dist/advanced/Crud/hooks/useOrderable.js +75 -0
  27. package/dist/advanced/Crud/hooks/useRequest.d.ts +13 -0
  28. package/dist/advanced/Crud/hooks/useRequest.js +27 -0
  29. package/dist/advanced/Crud/index.d.ts +3 -0
  30. package/dist/advanced/Crud/index.js +46 -0
  31. package/dist/advanced/Crud/types/index.d.ts +176 -0
  32. package/dist/advanced/Crud/types/index.js +1 -0
  33. package/dist/advanced/Crud/utils/index.d.ts +7 -0
  34. package/dist/advanced/Crud/utils/index.js +80 -0
  35. package/dist/advanced/Crud/utils/query.d.ts +3 -0
  36. package/dist/advanced/Crud/utils/query.js +34 -0
  37. package/dist/advanced/MindMap/context.d.ts +12 -0
  38. package/dist/advanced/MindMap/context.js +12 -0
  39. package/dist/advanced/MindMap/hooks/useAlignmentSnap.d.ts +15 -0
  40. package/dist/advanced/MindMap/hooks/useAlignmentSnap.js +164 -0
  41. package/dist/advanced/MindMap/hooks/useCopyPaste.d.ts +11 -0
  42. package/dist/advanced/MindMap/hooks/useCopyPaste.js +209 -0
  43. package/dist/advanced/MindMap/hooks/useDropToReparent.d.ts +21 -0
  44. package/dist/advanced/MindMap/hooks/useDropToReparent.js +216 -0
  45. package/dist/advanced/MindMap/hooks/useExpandCollapse.d.ts +18 -0
  46. package/dist/advanced/MindMap/hooks/useExpandCollapse.js +108 -0
  47. package/dist/advanced/MindMap/hooks/useMoveDescendants.d.ts +12 -0
  48. package/dist/advanced/MindMap/hooks/useMoveDescendants.js +98 -0
  49. package/dist/advanced/MindMap/hooks/useUndoRedo.d.ts +14 -0
  50. package/dist/advanced/MindMap/hooks/useUndoRedo.js +181 -0
  51. package/dist/advanced/MindMap/index.d.ts +29 -0
  52. package/dist/advanced/MindMap/index.js +52 -0
  53. package/dist/advanced/index.d.ts +5 -0
  54. package/dist/advanced/index.js +5 -0
  55. package/dist/antd/index.d.ts +6 -0
  56. package/dist/antd/index.js +5 -0
  57. package/dist/buttons/ButtonGroup/index.d.ts +8 -0
  58. package/dist/buttons/ButtonGroup/index.js +13 -0
  59. package/dist/buttons/ConfirmButton/index.d.ts +5 -0
  60. package/dist/buttons/ConfirmButton/index.js +9 -0
  61. package/dist/buttons/CopyButton/index.d.ts +6 -0
  62. package/dist/buttons/CopyButton/index.js +26 -0
  63. package/dist/buttons/DrawerButton/index.d.ts +6 -0
  64. package/dist/buttons/DrawerButton/index.js +13 -0
  65. package/dist/buttons/ProgressButton/index.css +63 -0
  66. package/dist/buttons/ProgressButton/index.d.ts +17 -0
  67. package/dist/buttons/ProgressButton/index.js +31 -0
  68. package/dist/buttons/SectorButton/index.d.ts +20 -0
  69. package/dist/buttons/SectorButton/index.js +130 -0
  70. package/dist/buttons/index.d.ts +6 -0
  71. package/dist/buttons/index.js +6 -0
  72. package/dist/display/CodeView/index.d.ts +26 -0
  73. package/dist/display/CodeView/index.js +60 -0
  74. package/dist/display/EnumTag/index.d.ts +12 -0
  75. package/dist/display/EnumTag/index.js +10 -0
  76. package/dist/display/HtmlDataRenderer/index.d.ts +6 -0
  77. package/dist/display/HtmlDataRenderer/index.js +15 -0
  78. package/dist/display/HtmlView/index.d.ts +6 -0
  79. package/dist/display/HtmlView/index.js +6 -0
  80. package/dist/display/IframePro/index.d.ts +8 -0
  81. package/dist/display/IframePro/index.js +24 -0
  82. package/dist/display/JsonSchemaRenderer/index.d.ts +11 -0
  83. package/dist/display/JsonSchemaRenderer/index.js +62 -0
  84. package/dist/display/JsonView/index.d.ts +3 -0
  85. package/dist/display/JsonView/index.js +7 -0
  86. package/dist/display/MarkdownView/index.d.ts +7 -0
  87. package/dist/display/MarkdownView/index.js +80 -0
  88. package/dist/display/MarkdownView/style.d.ts +1 -0
  89. package/{src/components/Markdown/style.ts → dist/display/MarkdownView/style.js} +1 -1
  90. package/dist/display/VideoPro/index.d.ts +9 -0
  91. package/dist/display/VideoPro/index.js +15 -0
  92. package/dist/display/index.d.ts +9 -0
  93. package/dist/display/index.js +9 -0
  94. package/dist/inputs/CheckboxButton/index.css +22 -0
  95. package/dist/inputs/CheckboxButton/index.d.ts +12 -0
  96. package/dist/inputs/CheckboxButton/index.js +9 -0
  97. package/dist/inputs/DateSwitcher/index.css +10 -0
  98. package/dist/inputs/DateSwitcher/index.d.ts +8 -0
  99. package/dist/inputs/DateSwitcher/index.js +29 -0
  100. package/dist/inputs/FetchSelect/index.d.ts +3 -0
  101. package/dist/inputs/FetchSelect/index.js +121 -0
  102. package/dist/inputs/FetchSelect/types.d.ts +33 -0
  103. package/dist/inputs/FetchSelect/types.js +1 -0
  104. package/dist/inputs/FetchSelect/utils.d.ts +21 -0
  105. package/dist/inputs/FetchSelect/utils.js +67 -0
  106. package/dist/inputs/FileUploader/index.d.ts +22 -0
  107. package/dist/inputs/FileUploader/index.js +79 -0
  108. package/dist/inputs/IconSelect/index.d.ts +89 -0
  109. package/dist/inputs/IconSelect/index.js +54 -0
  110. package/dist/inputs/ImageUploader/index.d.ts +12 -0
  111. package/dist/inputs/ImageUploader/index.js +192 -0
  112. package/dist/inputs/RadioButton/index.d.ts +15 -0
  113. package/dist/inputs/RadioButton/index.js +11 -0
  114. package/dist/inputs/RangeInput/index.d.ts +8 -0
  115. package/dist/inputs/RangeInput/index.js +17 -0
  116. package/dist/inputs/TextInput/index.d.ts +6 -0
  117. package/dist/inputs/TextInput/index.js +30 -0
  118. package/dist/inputs/index.d.ts +9 -0
  119. package/dist/inputs/index.js +9 -0
  120. package/dist/layout/DragSort/index.d.ts +16 -0
  121. package/dist/layout/DragSort/index.js +12 -0
  122. package/dist/layout/FoldCard/index.d.ts +9 -0
  123. package/dist/layout/FoldCard/index.js +69 -0
  124. package/dist/layout/PageBase/index.d.ts +6 -0
  125. package/dist/layout/PageBase/index.js +6 -0
  126. package/dist/layout/ResizableGridLayout/index.d.ts +11 -0
  127. package/dist/layout/ResizableGridLayout/index.js +13 -0
  128. package/dist/layout/SideMenu/index.d.ts +27 -0
  129. package/dist/layout/SideMenu/index.js +40 -0
  130. package/dist/layout/TabsPro/index.d.ts +9 -0
  131. package/dist/layout/TabsPro/index.js +87 -0
  132. package/dist/layout/index.d.ts +6 -0
  133. package/dist/layout/index.js +6 -0
  134. package/dist/web.d.ts +6 -0
  135. package/dist/web.js +6 -0
  136. package/package.json +28 -11
  137. package/src/antd/form/CheckboxButton/index.module.scss +0 -24
  138. package/src/antd/form/CheckboxButton/index.tsx +0 -31
  139. package/src/antd/form/FileUploader/index.tsx +0 -163
  140. package/src/antd/form/RadioButton/index.tsx +0 -32
  141. package/src/antd/form/Upload/index.tsx +0 -65
  142. package/src/antd/form/UploadImage/index.tsx +0 -338
  143. package/src/antd/form/index.ts +0 -6
  144. package/src/antd/index.ts +0 -46
  145. package/src/antd/pro/FoldCard/index.tsx +0 -131
  146. package/src/antd/pro/RangeInput/index.tsx +0 -46
  147. package/src/antd/pro/Tabs/index.tsx +0 -135
  148. package/src/antd/pro/Typography/components/String.tsx +0 -72
  149. package/src/antd/pro/Typography/index.tsx +0 -9
  150. package/src/antd/pro/buttons/ButtonGroup.tsx +0 -26
  151. package/src/antd/pro/buttons/ConfirmButton.tsx +0 -24
  152. package/src/antd/pro/buttons/CopyButton.tsx +0 -47
  153. package/src/antd/pro/buttons/DrawerButton.tsx +0 -37
  154. package/src/antd/pro/buttons/index.tsx +0 -4
  155. package/src/antd/pro/index.ts +0 -5
  156. package/src/components/BottomBar/index.tsx +0 -28
  157. package/src/components/CodeView/index.tsx +0 -85
  158. package/src/components/Collapse/index.tsx +0 -26
  159. package/src/components/Com2Canvas/index.tsx +0 -60
  160. package/src/components/CompileHtml/index.tsx +0 -26
  161. package/src/components/Crud/components/CardList/index.tsx +0 -174
  162. package/src/components/Crud/components/CreateUpdate/index.tsx +0 -179
  163. package/src/components/Crud/components/Provider/index.tsx +0 -83
  164. package/src/components/Crud/components/Remove/index.tsx +0 -56
  165. package/src/components/Crud/components/index.ts +0 -4
  166. package/src/components/Crud/hooks/index.ts +0 -4
  167. package/src/components/Crud/hooks/useColumns.tsx +0 -169
  168. package/src/components/Crud/hooks/useList.ts +0 -65
  169. package/src/components/Crud/hooks/useOrderable.tsx +0 -107
  170. package/src/components/Crud/hooks/useRequest.ts +0 -41
  171. package/src/components/Crud/index.tsx +0 -91
  172. package/src/components/Crud/types/index.ts +0 -188
  173. package/src/components/Crud/utils/index.ts +0 -87
  174. package/src/components/DateSwitcher/index.module.scss +0 -10
  175. package/src/components/DateSwitcher/index.tsx +0 -75
  176. package/src/components/DownloadLink/index.tsx +0 -36
  177. package/src/components/DragSort/index.tsx +0 -77
  178. package/src/components/DynamicSelect/index.tsx +0 -76
  179. package/src/components/DynamicSelect/types.ts +0 -8
  180. package/src/components/DynamicSelect/utils.ts +0 -47
  181. package/src/components/EnumTag/index.tsx +0 -24
  182. package/src/components/FetchSelect/index.tsx +0 -57
  183. package/src/components/FormPro/index.tsx +0 -28
  184. package/src/components/GroupLayout/index.tsx +0 -45
  185. package/src/components/HtmlPro/index.tsx +0 -18
  186. package/src/components/IframePro/index.tsx +0 -52
  187. package/src/components/JsonRenderer/index.tsx +0 -114
  188. package/src/components/JsonView/index.tsx +0 -21
  189. package/src/components/Markdown/index.tsx +0 -152
  190. package/src/components/MindMap/context.tsx +0 -29
  191. package/src/components/MindMap/hooks/useAlignmentSnap.ts +0 -220
  192. package/src/components/MindMap/hooks/useCopyPaste.ts +0 -272
  193. package/src/components/MindMap/hooks/useDropToReparent.ts +0 -288
  194. package/src/components/MindMap/hooks/useExpandCollapse.ts +0 -146
  195. package/src/components/MindMap/hooks/useMoveDescendants.ts +0 -136
  196. package/src/components/MindMap/hooks/useUndoRedo.ts +0 -232
  197. package/src/components/MindMap/index.tsx +0 -117
  198. package/src/components/MultiImageDisplay/index.tsx +0 -63
  199. package/src/components/ProgressButton/index.module.scss +0 -65
  200. package/src/components/ProgressButton/index.tsx +0 -96
  201. package/src/components/SectorButton/index.tsx +0 -247
  202. package/src/components/TextInput/index.tsx +0 -61
  203. package/src/components/TimelineBar/components/CurrentWeekHighlight/index.tsx +0 -64
  204. package/src/components/TimelineBar/components/Guides/index.tsx +0 -61
  205. package/src/components/TimelineBar/components/Ticks/index.tsx +0 -56
  206. package/src/components/TimelineBar/components/TodayIndicator/index.tsx +0 -54
  207. package/src/components/TimelineBar/components/index.ts +0 -4
  208. package/src/components/TimelineBar/const.ts +0 -3
  209. package/src/components/TimelineBar/hooks/index.ts +0 -5
  210. package/src/components/TimelineBar/hooks/useHighlightRange.ts +0 -21
  211. package/src/components/TimelineBar/hooks/useMonthGuides.ts +0 -40
  212. package/src/components/TimelineBar/hooks/useTickValues.ts +0 -18
  213. package/src/components/TimelineBar/hooks/useVisibleRange.ts +0 -43
  214. package/src/components/TimelineBar/hooks/useWeekGuides.ts +0 -39
  215. package/src/components/TimelineBar/index.tsx +0 -63
  216. package/src/components/TimelineBar/utils.ts +0 -27
  217. package/src/components/Video/index.tsx +0 -37
  218. package/src/components/index.ts +0 -26
  219. package/src/rn.ts +0 -1
  220. package/src/rns/index.ts +0 -0
  221. package/src/web.ts +0 -2
@@ -1,24 +0,0 @@
1
- import React from 'react'
2
-
3
- import { Tag } from 'antd'
4
-
5
- type EnumTagProps = {
6
- value: string
7
- map: Map<string, { label: string; value: string; extra?: { color?: string } }>
8
- }
9
-
10
- export const EnumTag = (props: EnumTagProps) => {
11
- const { value, map } = props
12
-
13
- const enumItem = map.get(value)
14
-
15
- if (!enumItem) {
16
- return <Tag>{value}</Tag>
17
- }
18
-
19
- return (
20
- <Tag color={enumItem.extra?.color}>
21
- {enumItem.label}
22
- </Tag>
23
- )
24
- }
@@ -1,57 +0,0 @@
1
- 'use client'
2
-
3
- import { useImperativeHandle } from 'react'
4
- import { Select, SelectProps, Spin } from 'antd'
5
- import { useRequest } from '@wzyjs/hooks/web'
6
-
7
- export interface FetchSelectProps<I> extends SelectProps {
8
- selectRef?: any,
9
- isDetail?: boolean, // 只返回id 还是返回整个信息
10
- searchApi: (params: { search: string }) => Promise<any>,
11
- convertData?: (data: I[]) => any[],
12
- onChange?: (value: any) => void
13
- }
14
-
15
- export interface FetchSelectRef {
16
- refresh: () => void
17
- }
18
-
19
- export const FetchSelect = <I extends { id: string | number }, >(props: FetchSelectProps<I>) => {
20
- const { searchApi, convertData, onChange, isDetail = false, selectRef, ...other } = props
21
-
22
- const { data, run, loading, refresh } = useRequest(searchApi, {
23
- debounceWait: 100,
24
- })
25
-
26
- const onSearch = (value: string) => {
27
- run({ search: value })
28
- }
29
-
30
- useImperativeHandle(selectRef, () => ({
31
- refresh,
32
- }))
33
-
34
- return (
35
- <Select
36
- showSearch
37
- defaultActiveFirstOption={false}
38
- popupMatchSelectWidth={false}
39
- suffixIcon={null}
40
- filterOption={false}
41
- notFoundContent={loading ? <Spin size='small' /> : null}
42
- loading={loading}
43
- {...other}
44
-
45
- options={convertData ? convertData(data?.data || []) : data?.data}
46
- onSearch={onSearch}
47
- onChange={value => {
48
- if (isDetail) {
49
- const detail = data?.data?.find(item => item.id === value)
50
- onChange?.(detail)
51
- } else {
52
- onChange?.(value)
53
- }
54
- }}
55
- />
56
- )
57
- }
@@ -1,28 +0,0 @@
1
- 'use client'
2
-
3
- import React, { useImperativeHandle, useRef } from 'react'
4
- import { BetaSchemaForm, ProFormInstance } from '@ant-design/pro-components'
5
- import { FormSchema } from '@ant-design/pro-form/es/components/SchemaForm'
6
-
7
- export type { ProFormColumnsType, ProFormInstance } from '@ant-design/pro-components'
8
-
9
- export type FormProProps<T, ValueType> = FormSchema<T, ValueType>
10
-
11
- export const FormPro = <T, ValueType>(props: FormProProps<T, ValueType>) => {
12
-
13
- const formRef = useRef<ProFormInstance>(null)
14
- useImperativeHandle(props.formRef, () => formRef?.current, [formRef])
15
-
16
- // useEffect(() => {
17
- // if (props.value) {
18
- // formRef.current?.setFieldsValue(props.value)
19
- // }
20
- // }, [JSON.stringify(props.value)])
21
-
22
- return (
23
- <BetaSchemaForm
24
- {...props}
25
- formRef={formRef}
26
- />
27
- )
28
- }
@@ -1,45 +0,0 @@
1
- import { CSSProperties, ReactNode } from 'react'
2
-
3
- import GridLayout, { Layout } from 'react-grid-layout'
4
- import 'react-grid-layout/css/styles.css'
5
-
6
- export type { Layout as GridLayoutItem } from 'react-grid-layout'
7
-
8
- interface GridLayoutProps<I> {
9
- layout: I[]
10
- style?: CSSProperties
11
- onChange?: (layout: I[]) => void
12
- renderItem?: (item: I) => ReactNode
13
- }
14
-
15
- export const GroupLayout = <I extends Layout>(props: GridLayoutProps<I>) => {
16
- const { style, layout, onChange, renderItem = item => item.i } = props
17
-
18
- const onLayoutChange = (items: Layout[]) => {
19
- onChange?.(items.map(item => ({
20
- ...layout.find(i => i.i === item.i),
21
- ...item,
22
- }) as I))
23
- }
24
-
25
- return (
26
- <GridLayout
27
- layout={layout}
28
- cols={24}
29
- rowHeight={50}
30
- width={1200}
31
- useCSSTransforms={false}
32
- containerPadding={[0, 0]}
33
- style={{ width: '100%', height: '100%', userSelect: 'none', ...style }}
34
- draggableHandle='.drag-handle'
35
- resizeHandles={['se']}
36
- onLayoutChange={onLayoutChange}
37
- >
38
- {layout.map(item => (
39
- <div key={item.i}>
40
- {renderItem(item)}
41
- </div>
42
- ))}
43
- </GridLayout>
44
- )
45
- }
@@ -1,18 +0,0 @@
1
- 'use client'
2
-
3
- import React, { CSSProperties } from 'react'
4
-
5
- export interface HtmlProProps {
6
- html: string;
7
- style?: CSSProperties
8
- }
9
-
10
- export const HtmlPro = (props: HtmlProProps) => {
11
- const { html, style = {} } = props
12
- return (
13
- <div
14
- style={{ minWidth: '100%', ...style }}
15
- dangerouslySetInnerHTML={{ __html: html }}
16
- />
17
- )
18
- }
@@ -1,52 +0,0 @@
1
- 'use client'
2
-
3
- import React, { useEffect, CSSProperties } from 'react'
4
- import { Spin } from 'antd'
5
- import { useBoolean } from '@wzyjs/hooks/web'
6
-
7
- export interface IframeProProps {
8
- url: string;
9
- errMessage?: string;
10
- style?: CSSProperties;
11
- isShowLoading?: boolean;
12
- }
13
-
14
- export const IframePro = (props: IframeProProps) => {
15
- const { url, style, errMessage = '', isShowLoading = false } = props
16
-
17
- const [loading, { setTrue, setFalse }] = useBoolean(true)
18
-
19
- useEffect(() => {
20
- setTrue()
21
- }, [url])
22
-
23
- if (!url) {
24
- return (
25
- <span
26
- style={{
27
- ...style,
28
- color: '#ccc',
29
- fontSize: 14,
30
- display: 'flex',
31
- flexDirection: 'column',
32
- justifyContent: 'center',
33
- alignItems: 'center',
34
- }}
35
- >
36
- {errMessage || '没有url'}
37
- </span>
38
- )
39
- }
40
-
41
- return (
42
- <Spin spinning={loading && isShowLoading}>
43
- <iframe
44
- src={url}
45
- width='100%'
46
- height='100%'
47
- style={style}
48
- onLoad={setFalse}
49
- />
50
- </Spin>
51
- )
52
- }
@@ -1,114 +0,0 @@
1
- import React from 'react'
2
- import {
3
- Divider,
4
- Flex,
5
- Space,
6
- Typography,
7
- Steps,
8
- Tabs,
9
- Collapse,
10
- Descriptions,
11
- Image,
12
- List,
13
- Popover,
14
- Tooltip,
15
- Card,
16
- QRCode,
17
- Segmented,
18
- Table,
19
- Tag,
20
- Timeline,
21
- Tree,
22
- Alert,
23
- Progress,
24
- } from 'antd'
25
-
26
- const ComponentMap = {
27
- // 布局结构类
28
- Divider,
29
- Flex,
30
- Space,
31
-
32
- // 信息展示类
33
- Typography,
34
- 'Typography.Title': Typography.Title,
35
- 'Typography.Text': Typography.Text,
36
- 'Typography.Paragraph': Typography.Paragraph,
37
- 'Typography.Link': Typography.Link,
38
- Steps,
39
- Tabs,
40
- Collapse,
41
- 'Collapse.Panel': Collapse.Panel,
42
- Description: Descriptions,
43
- Image,
44
- List,
45
- Popover,
46
- Tooltip,
47
- Card,
48
- QRCode,
49
- Segmented,
50
- Table,
51
- Tag,
52
- Timeline,
53
- Tree,
54
- Alert,
55
- Progress,
56
- }
57
-
58
- export interface Content {
59
- component: keyof typeof ComponentMap // 对应 Ant Design 组件的枚举值
60
- props?: Record<string, any> // 对应组件的 props 配置
61
- children?: Content[] | string // 子节点,可递归嵌套,或直接是字符串
62
- }
63
-
64
- interface JsonRendererProps {
65
- content: Content[]
66
- }
67
-
68
- export const JsonRenderer = (props: JsonRendererProps) => {
69
- const { content } = props
70
-
71
- // 递归渲染组件的函数
72
- const renderContent = (item: Content | string) => {
73
- // 如果是字符串,直接返回
74
- if (typeof item === 'string') {
75
- return item
76
- }
77
-
78
- const { component, props = {}, children } = item
79
-
80
- // 获取对应的组件
81
- const Component = ComponentMap[component] as React.ComponentType<any>
82
-
83
- if (!Component) {
84
- return <Alert type='error' message={`未找到组件: ${component}`} />
85
- }
86
-
87
- // 处理子节点
88
- let childrenContent
89
- if (children) {
90
- if (Array.isArray(children)) {
91
- childrenContent = children.map((child, index) => (
92
- <React.Fragment key={index}>
93
- {renderContent(child)}
94
- </React.Fragment>
95
- ))
96
- } else {
97
- childrenContent = renderContent(children)
98
- }
99
- }
100
-
101
- // 渲染组件,传递 props 和 children
102
- return <Component {...props}>{childrenContent}</Component>
103
- }
104
-
105
- return (
106
- <>
107
- {content.map((item, index) => (
108
- <React.Fragment key={index}>
109
- {renderContent(item)}
110
- </React.Fragment>
111
- ))}
112
- </>
113
- )
114
- }
@@ -1,21 +0,0 @@
1
- 'use client'
2
-
3
- import React from 'react'
4
- import ReactJson, { ReactJsonViewProps } from 'react-json-view'
5
-
6
- export type JsonViewProps = ReactJsonViewProps
7
-
8
- export const JsonView = (props: JsonViewProps) => {
9
- const { style } = props
10
-
11
- return (
12
- <ReactJson
13
- enableClipboard={false}
14
- collapsed={true}
15
- displayObjectSize={false}
16
- displayDataTypes={false}
17
- {...props}
18
- style={{ overflow: 'auto', ...style }}
19
- />
20
- )
21
- }
@@ -1,152 +0,0 @@
1
- 'use client'
2
-
3
- import { useMemo } from 'react'
4
- import ReactMarkdown from 'react-markdown'
5
- import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
6
- import { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism'
7
- import remarkGfm from 'remark-gfm'
8
- import rehypeSlug from 'rehype-slug'
9
- import rehypeAutolinkHeadings from 'rehype-autolink-headings'
10
-
11
- import 'github-markdown-css/github-markdown-light.css'
12
- import { style } from './style'
13
-
14
- interface MarkdownProps {
15
- content: string
16
- showToc?: boolean // 是否显示目录
17
- }
18
-
19
- interface TocItem {
20
- id: string
21
- text: string
22
- level: number
23
- }
24
-
25
- export const Markdown = (props: MarkdownProps) => {
26
- const { content = '', showToc = true } = props
27
-
28
- // 提取标题生成目录
29
- const tocItems = useMemo(() => {
30
- if (!showToc) {
31
- return []
32
- }
33
-
34
- const lines = content.split('\n')
35
- const items: TocItem[] = []
36
-
37
- lines.forEach((line) => {
38
- const match = line.match(/^(#{2,4})\s+(.+)$/)
39
- if (match && match[1] && match[2]) {
40
- const level = match[1].length
41
- const text = match[2].trim()
42
- const id = text
43
- .toLowerCase()
44
- .replace(/[^\w\u4e00-\u9fa5\s-]/g, '') // 保留中文、英文、数字、空格和连字符
45
- .replace(/\s+/g, '-') // 空格替换为连字符
46
-
47
- items.push({ id, text, level })
48
- }
49
- })
50
-
51
- return items
52
- }, [content, showToc])
53
-
54
- // 渲染目录
55
- const renderToc = () => {
56
- if (!showToc || tocItems.length === 0) {
57
- return null
58
- }
59
-
60
- return (
61
- <div
62
- className='markdown-toc-container'
63
- style={{
64
- padding: '10px 20px 10px 0',
65
- backgroundColor: '#f8f9fa',
66
- borderLeft: '4px solid #1890ff',
67
- borderRadius: '4px',
68
- overflowY: 'auto',
69
- height: '100%'
70
- }}
71
- >
72
- <ul style={{ margin: 0, padding: 0 }}>
73
- {tocItems.map((item, index) => (
74
- <li
75
- key={index}
76
- style={{
77
- marginBottom: '4px',
78
- marginLeft: `${(item.level - 1) * 16}px`,
79
- listStyle: 'none',
80
- position: 'relative',
81
- }}
82
- >
83
- <a
84
- href={`#${item.id}`}
85
- style={{
86
- textDecoration: 'none',
87
- color: '#1890ff',
88
- fontSize: item.level <= 2 ? '14px' : '13px',
89
- fontWeight: item.level === 1 ? 600 : 400,
90
- }}
91
- onClick={(e) => {
92
- e.preventDefault()
93
- const element = document.getElementById(item.id)
94
- if (element) {
95
- element.scrollIntoView({ behavior: 'smooth' })
96
- }
97
- }}
98
- >
99
- {item.text}
100
- </a>
101
- </li>
102
- ))}
103
- </ul>
104
- </div>
105
- )
106
- }
107
-
108
- return (
109
- <div style={{ height: '100%' }}>
110
- <style>{style}</style>
111
- <div className='markdown-body markdown-toc' style={{ height: '100%', display: 'flex' }}>
112
- <div style={{ marginRight: 14 }}>
113
- {renderToc()}
114
- </div>
115
- <div style={{ overflow: 'auto', flex: 1 }}>
116
- <ReactMarkdown
117
- remarkPlugins={[remarkGfm]}
118
- rehypePlugins={[
119
- rehypeSlug,
120
- [rehypeAutolinkHeadings, {
121
- behavior: 'wrap',
122
- properties: {
123
- className: ['anchor'],
124
- },
125
- }],
126
- ]}
127
- components={{
128
- code(props) {
129
- const { children, className } = props
130
- const match = /language-(\w+)/.exec(className || '')
131
- return match ? (
132
- <SyntaxHighlighter
133
- PreTag='div'
134
- children={String(children).replace(/\n$/, '')}
135
- language={match[1]}
136
- style={oneLight}
137
- />
138
- ) : (
139
- <code className={className}>
140
- {children}
141
- </code>
142
- )
143
- },
144
- }}
145
- >
146
- {content}
147
- </ReactMarkdown>
148
- </div>
149
- </div>
150
- </div>
151
- )
152
- }
@@ -1,29 +0,0 @@
1
- 'use client'
2
-
3
- import { createContext, useContext, type ReactNode } from 'react'
4
-
5
- export interface MindMapDndState {
6
- draggingNodeId: string | null
7
- dropTargetNodeId: string | null
8
- }
9
-
10
- const MindMapDndContext = createContext<MindMapDndState | null>(null)
11
-
12
- interface MindMapDndProviderProps {
13
- value: MindMapDndState
14
- children: ReactNode
15
- }
16
-
17
- export const MindMapDndProvider = (props: MindMapDndProviderProps) => {
18
- const { value, children } = props
19
- return (
20
- <MindMapDndContext.Provider value={value}>
21
- {children}
22
- </MindMapDndContext.Provider>
23
- )
24
- }
25
-
26
- export const useMindMapDndState = (): MindMapDndState => {
27
- const value = useContext(MindMapDndContext)
28
- return value ?? { draggingNodeId: null, dropTargetNodeId: null }
29
- }