@tsingroc/tsingroc-components 1.0.6 → 2.1.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 (56) hide show
  1. package/README.md +20 -5
  2. package/dist/components/Calendar.d.ts +50 -0
  3. package/dist/components/Calendar.js +91 -0
  4. package/dist/components/Calendar.js.map +1 -0
  5. package/dist/components/CircularProgress.d.ts +21 -0
  6. package/dist/components/CircularProgress.js +15 -0
  7. package/dist/components/CircularProgress.js.map +1 -0
  8. package/dist/components/ImageBackground.d.ts +32 -0
  9. package/dist/components/ImageBackground.js +18 -0
  10. package/dist/components/ImageBackground.js.map +1 -0
  11. package/dist/components/QuickDateRangePicker.d.ts +30 -0
  12. package/dist/components/QuickDateRangePicker.js +36 -0
  13. package/dist/components/QuickDateRangePicker.js.map +1 -0
  14. package/dist/components/SegmentedButtons.d.ts +22 -0
  15. package/dist/components/SegmentedButtons.js +31 -0
  16. package/dist/components/SegmentedButtons.js.map +1 -0
  17. package/dist/components/TmsSidebar.d.ts +46 -0
  18. package/dist/components/TmsSidebar.js +63 -0
  19. package/dist/components/TmsSidebar.js.map +1 -0
  20. package/dist/components/TsingrocDatePicker.d.ts +38 -0
  21. package/dist/components/TsingrocDatePicker.js +36 -0
  22. package/dist/components/TsingrocDatePicker.js.map +1 -0
  23. package/dist/echarts/coordinateSystem.d.ts +39 -0
  24. package/dist/echarts/coordinateSystem.js +77 -0
  25. package/dist/echarts/coordinateSystem.js.map +1 -0
  26. package/dist/echarts/gl.d.ts +116 -0
  27. package/dist/echarts/gl.js +42 -0
  28. package/dist/echarts/gl.js.map +1 -0
  29. package/dist/echarts/index.d.ts +45 -0
  30. package/dist/echarts/index.js +61 -0
  31. package/dist/echarts/index.js.map +1 -0
  32. package/dist/echarts/legend.d.ts +17 -0
  33. package/dist/echarts/legend.js +15 -0
  34. package/dist/echarts/legend.js.map +1 -0
  35. package/dist/echarts/radar.d.ts +24 -0
  36. package/dist/echarts/radar.js +22 -0
  37. package/dist/echarts/radar.js.map +1 -0
  38. package/dist/echarts/series.d.ts +131 -0
  39. package/dist/echarts/series.js +184 -0
  40. package/dist/echarts/series.js.map +1 -0
  41. package/dist/echarts/tooltip.d.ts +13 -0
  42. package/dist/echarts/tooltip.js +14 -0
  43. package/dist/echarts/tooltip.js.map +1 -0
  44. package/dist/index.d.ts +9 -15
  45. package/dist/index.js +9 -15
  46. package/dist/index.js.map +1 -1
  47. package/package.json +28 -22
  48. package/dist/components/Button/index.d.ts +0 -5
  49. package/dist/components/Button/index.js +0 -8
  50. package/dist/components/Button/index.js.map +0 -1
  51. package/dist/components/index.d.ts +0 -1
  52. package/dist/components/index.js +0 -3
  53. package/dist/components/index.js.map +0 -1
  54. package/dist/components/tsingrocCom.d.ts +0 -15
  55. package/dist/components/tsingrocCom.js +0 -967
  56. package/dist/components/tsingrocCom.js.map +0 -1
package/README.md CHANGED
@@ -22,8 +22,7 @@ $ npm run format # 格式化代码
22
22
  $ npm run docs:dev # 启动文档站点的开发环境,文档站点的源代码位于 docs/
23
23
  $ npm run docs:build # 构建文档站点,产物位于 doc_build/
24
24
  $ npm run docs:preview # 预览构建完成的文档站点
25
- $ npm run build # 构建组件库
26
- $ npm publish
25
+ $ npm run build # 本地构建组件库
27
26
  ```
28
27
 
29
28
  本项目正在逐步迁移到 TypeScript,新代码请使用 TypeScript 编写。在开发环境和文档站点中,请使用 `import {...} from "@";` 导入组件库的组件。
@@ -38,20 +37,26 @@ $ npm publish
38
37
  .
39
38
  ├── .vscode/
40
39
  ├── dev/ -- 开发环境的源代码
41
- │ ├── public/ -- 开发环境的 HTML 模板
40
+ │ ├── public/ -- 开发环境的静态资产
42
41
  │ └── src/ -- 开发环境的 JavaScript 源代码
43
42
  ├── dist/ -- 组件库的构建产物
44
43
  ├── doc_build/ -- 文档站点的构建产物
45
44
  ├── docs/ -- 文档站点的源代码
45
+ │ ├── components/ -- 文档站点内部用到的组件
46
+ │ ├── examples/ -- 文档站点的组件用法范例
47
+ │ ├── plugins/ -- 文档站点的编译期插件
46
48
  │ ├── public/ -- 文档站点的静态资产
49
+ │ ├── theme/ -- 文档站点的主题
47
50
  │ └── zh/
48
- │ ├── api/ -- 自动生成的 API 文档
49
- │ └── examples/ -- 组件用法示例
51
+ │ ├── echarts/ -- ECharts 组件的文档
52
+ │ └── react/ -- React 组件的文档
50
53
  ├── node_modules/
51
54
  ├── src/ -- 组件库的源代码
52
55
  ├── test/ -- 测试的源代码(暂时无效)
53
56
  ├── .gitignore
57
+ ├── .gitlab-ci.yml -- GitLab CI 的配置文件
54
58
  ├── .prettierignore -- Prettier 需要忽略的文件列表
59
+ ├── Dockerfile -- 用于部署文档的 Docker 容器
55
60
  ├── eslint.config.js -- ESLint 的配置文件
56
61
  ├── package-lock.json
57
62
  ├── package.json
@@ -62,3 +67,13 @@ $ npm publish
62
67
  ├── tsconfig.lib.json -- 组件库的 TypeScript 配置
63
68
  └── tsconfig.web.json -- 开发环境和文档站点的 TypeScript 配置
64
69
  ```
70
+
71
+ ## 发布
72
+
73
+ ```sh
74
+ $ git tag v1.x.x # 将当前提交设置为新版本,注意只能在 main 分支上创建新版本
75
+ $ git push origin v1.x.x # 将 tag 推送到 GitLab,CI 会自动构建新版本并发布到 npmjs
76
+ $ # 注意,不要修改 package.json 中的版本号!
77
+ ```
78
+
79
+ 发布到 npmjs 的 access token 需要在 [GitLab 项目设置](https://git.tsingroc.com/web/tsingroc-components/-/settings/ci_cd)中设定,而且需要定期更新。
@@ -0,0 +1,50 @@
1
+ import { type Dayjs } from "dayjs";
2
+ export interface CalendarProps extends Omit<React.HTMLAttributes<HTMLTableElement>, "onChange"> {
3
+ /**
4
+ * 当前显示的月份。
5
+ *
6
+ * 注意:传入的月份的时区会决定整个日历所用的时区。
7
+ */
8
+ month: Dayjs;
9
+ /** 当前选中的日期。*/
10
+ selected?: Dayjs;
11
+ /** 选中日期更改时的回调函数。*/
12
+ onChange?: (selected: Dayjs) => void;
13
+ /**
14
+ * 无论一个月需要占用多少周,都总是显示 6 周。
15
+ * @default false
16
+ */
17
+ alwaysSixWeeks?: boolean;
18
+ /**
19
+ * 淡化第一周和最后几周不属于本月的日期。
20
+ * @default true
21
+ */
22
+ fadeAdjacentDays?: boolean;
23
+ /**
24
+ * 表头单元格的属性,详见 [MDN][1]。可以通过设置这里的 `children` 来自定义表头内容。
25
+ *
26
+ * [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th
27
+ */
28
+ thProps?: (
29
+ /**
30
+ * 范围 0-6,表示一周的第几天
31
+ *
32
+ * 注意:这个数字的含义会受到地区设置的影响!请使用 `dayjs.weekdays()` 获取每一天的名称。
33
+ */
34
+ weekday: number) => React.HTMLAttributes<HTMLTableCellElement>;
35
+ /**
36
+ * 日期单元格的属性,详见 [MDN][1]。可以通过设置这里的 `children` 来自定义单元格内容。
37
+ *
38
+ * [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td
39
+ */
40
+ tdProps?: (date: Dayjs, selected: boolean) => React.HTMLAttributes<HTMLTableCellElement>;
41
+ }
42
+ /**
43
+ * 一个日历组件。
44
+ *
45
+ * 除了文档列出的属性之外,也接受所有 [HTML Table 元素][1] 接受的属性。
46
+ *
47
+ * [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table
48
+ */
49
+ declare function Calendar(props: CalendarProps): import("react/jsx-runtime").JSX.Element;
50
+ export default Calendar;
@@ -0,0 +1,91 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import dayjs, {} from "dayjs";
3
+ import { createStyles } from "antd-style";
4
+ import localeData from "dayjs/plugin/localeData";
5
+ import { useState } from "react";
6
+ dayjs.extend(localeData);
7
+ const useStyles = createStyles(({ token, css, cx }) => {
8
+ const calendarFade = css `
9
+ color: ${token.colorTextDisabled};
10
+ `;
11
+ const calendarSelected = css `
12
+ background: ${token.colorPrimaryBg};
13
+ color: ${token.colorPrimary};
14
+ `;
15
+ const calendar = css `
16
+ box-sizing: border-box;
17
+ width: 100%;
18
+ height: 100%;
19
+ border-collapse: collapse;
20
+ font-family: ${token.fontFamily};
21
+ font-size: ${token.fontSize}px;
22
+ line-height: ${token.lineHeight};
23
+ user-select: none;
24
+
25
+ > thead > tr > th {
26
+ box-sizing: border-box;
27
+ height: ${token.fontSize * token.lineHeight + token.paddingXXS * 2}px;
28
+ padding: ${token.paddingXXS}px;
29
+ font-weight: normal;
30
+ }
31
+
32
+ > tbody > tr > td {
33
+ box-sizing: border-box;
34
+ width: calc(100% / 7);
35
+ border: 1px solid ${token.colorBorder};
36
+ padding: ${token.paddingXXS}px;
37
+ vertical-align: bottom;
38
+ transition:
39
+ background ease ${token.motionDurationFast},
40
+ color ease ${token.motionDurationFast};
41
+
42
+ &:hover:not(.${cx(calendarSelected)}) {
43
+ background: ${token.colorBgTextHover};
44
+ }
45
+ }
46
+ `;
47
+ return {
48
+ calendar,
49
+ calendarFade,
50
+ calendarSelected,
51
+ };
52
+ });
53
+ /**
54
+ * 一个日历组件。
55
+ *
56
+ * 除了文档列出的属性之外,也接受所有 [HTML Table 元素][1] 接受的属性。
57
+ *
58
+ * [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table
59
+ */
60
+ function Calendar(props) {
61
+ const { month, selected: propsSelected, onChange, alwaysSixWeeks, fadeAdjacentDays = true, thProps, tdProps, className, ...rest } = props;
62
+ const { cx, styles } = useStyles();
63
+ const [selected, setSelected] = propsSelected === undefined
64
+ ? // eslint-disable-next-line react-hooks/rules-of-hooks
65
+ useState()
66
+ : [propsSelected, () => { }];
67
+ const monthStart = month.startOf("month");
68
+ const calendarStart = monthStart.startOf("week");
69
+ const monthEnd = month.endOf("month");
70
+ const minWeeks = Math.ceil(monthEnd.diff(calendarStart, "week", true));
71
+ const weekdays = [...dayjs.weekdaysShort()];
72
+ // 按地区设置调整一周的第一天
73
+ weekdays.splice(0, 0, ...weekdays.splice(calendarStart.day()));
74
+ return (_jsxs("table", { ...rest, className: cx(styles.calendar, className), children: [_jsx("thead", { children: _jsx("tr", { children: weekdays.map((name, weekday) => (_jsx("th", { children: name, ...thProps?.(weekday) }, weekday))) }) }), _jsx("tbody", { children: Array.from({ length: alwaysSixWeeks ? 6 : minWeeks }, (_, week) => (_jsx("tr", { children: Array(7)
75
+ .fill(null)
76
+ .map((_, weekday) => {
77
+ const date = calendarStart.add(week * 7 + weekday, "day");
78
+ const fade = fadeAdjacentDays && date.month() != monthStart.month();
79
+ const isSelected = Math.floor(selected?.diff(date, "day", true) ?? NaN) === 0;
80
+ const { className, ...props } = tdProps?.(date, false) ?? {};
81
+ return (_jsx("td", { children: date.date(), onClick: () => {
82
+ setSelected(date);
83
+ onChange?.(date);
84
+ }, ...props, className: cx({
85
+ [styles.calendarFade]: fade,
86
+ [styles.calendarSelected]: isSelected,
87
+ }, className) }, weekday));
88
+ }) }, week))) })] }));
89
+ }
90
+ export default Calendar;
91
+ //# sourceMappingURL=Calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../src/components/Calendar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ProgressProps } from "antd";
2
+ import type { ProgressGradient } from "antd/es/progress/progress";
3
+ export interface CircularProgressProps extends ProgressProps, React.RefAttributes<HTMLDivElement> {
4
+ /** 进度百分比,范围是 0-100。*/
5
+ progress?: number;
6
+ /**
7
+ * 进度条已完成部分的颜色。
8
+ * @default "#34A9D4"
9
+ */
10
+ color?: string | string[] | ProgressGradient;
11
+ }
12
+ /**
13
+ * 环形进度条。
14
+ *
15
+ * 本组件基于 [Ant Design 的 `Progress`][1] 自定义而来。
16
+ * 因此,除了文档中列出的属性以外,也兼容 `Progress` 的所有属性。
17
+ *
18
+ * [1]: https://ant-design.antgroup.com/components/progress-cn
19
+ */
20
+ declare function CircularProgress(props: CircularProgressProps): import("react/jsx-runtime").JSX.Element;
21
+ export default CircularProgress;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Progress } from "antd";
3
+ /**
4
+ * 环形进度条。
5
+ *
6
+ * 本组件基于 [Ant Design 的 `Progress`][1] 自定义而来。
7
+ * 因此,除了文档中列出的属性以外,也兼容 `Progress` 的所有属性。
8
+ *
9
+ * [1]: https://ant-design.antgroup.com/components/progress-cn
10
+ */
11
+ function CircularProgress(props) {
12
+ return (_jsx(Progress, { type: "circle", percent: props.progress, strokeLinecap: "butt", strokeWidth: 9, strokeColor: props.color ?? "#34A9D4", trailColor: "#22405A", ...props }));
13
+ }
14
+ export default CircularProgress;
15
+ //# sourceMappingURL=CircularProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircularProgress.js","sourceRoot":"","sources":["../../src/components/CircularProgress.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,MAAM,CAAC;AAepD;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,KAA4B;IACpD,OAAO,CACL,KAAC,QAAQ,IACP,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,KAAK,CAAC,QAAQ,EACvB,aAAa,EAAC,MAAM,EACpB,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS,EACrC,UAAU,EAAC,SAAS,KAChB,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,32 @@
1
+ export interface ImageBackgroundProps extends React.HTMLAttributes<HTMLDivElement> {
2
+ /**
3
+ * 图片的 URL。
4
+ *
5
+ * 建议导入图片,然后将导入得到的地址填入 `url`,而不要硬编码地址。
6
+ *
7
+ * ```jsx
8
+ * import img from "../public/image.png";
9
+ * <ImageBackground url={img}>...</ImageBackground>
10
+ * ```
11
+ */
12
+ url: string;
13
+ children: React.ReactNode;
14
+ /**
15
+ * 容器的宽度。
16
+ * @default "100%"
17
+ */
18
+ width?: React.CSSProperties["width"];
19
+ /**
20
+ * 容器的高度。
21
+ * @default "100%"
22
+ */
23
+ height?: React.CSSProperties["height"];
24
+ style?: React.CSSProperties;
25
+ }
26
+ /**
27
+ * 以图片作为背景的块级容器。除了文档列出的属性以外,也兼容所有 [HTML Div 元素][1] 的属性。
28
+ *
29
+ * [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div
30
+ */
31
+ declare function ImageBackground(props: ImageBackgroundProps): import("react/jsx-runtime").JSX.Element;
32
+ export default ImageBackground;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * 以图片作为背景的块级容器。除了文档列出的属性以外,也兼容所有 [HTML Div 元素][1] 的属性。
4
+ *
5
+ * [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div
6
+ */
7
+ function ImageBackground(props) {
8
+ const { url, children, width = "100%", height = "100%", style, ...rest } = props;
9
+ return (_jsx("div", { ...rest, style: {
10
+ backgroundSize: "100% 100%",
11
+ width: width,
12
+ height: height,
13
+ backgroundImage: `url('${url}')`,
14
+ ...style,
15
+ }, children: children }));
16
+ }
17
+ export default ImageBackground;
18
+ //# sourceMappingURL=ImageBackground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageBackground.js","sourceRoot":"","sources":["../../src/components/ImageBackground.tsx"],"names":[],"mappings":";AA2BA;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAA2B;IAClD,MAAM,EACJ,GAAG,EACH,QAAQ,EACR,KAAK,GAAG,MAAM,EACd,MAAM,GAAG,MAAM,EACf,KAAK,EACL,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IACV,OAAO,CACL,iBACM,IAAI,EACR,KAAK,EAAE;YACL,cAAc,EAAE,WAAW;YAC3B,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,eAAe,EAAE,QAAQ,GAAG,IAAI;YAChC,GAAG,KAAK;SACT,YAEA,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type ButtonProps, type SpaceProps } from "antd";
2
+ import { type Dayjs } from "dayjs";
3
+ import type { NoUndefinedRangeValueType } from "rc-picker/lib/PickerInput/RangePicker";
4
+ import type { RangePickerProps } from "antd/es/date-picker";
5
+ export interface QuickDateRangePickerProps extends Omit<SpaceProps, "onChange"> {
6
+ /** 一个二元组 `[start, end]`,表示时间段的开始和结束。*/
7
+ value?: NoUndefinedRangeValueType<Dayjs>;
8
+ onChange?: (range: NoUndefinedRangeValueType<Dayjs>) => void;
9
+ /**
10
+ * 内部按钮的属性,参见 [Ant Design 的 `Button` API][1]。
11
+ *
12
+ * [1]: https://ant-design.antgroup.com/components/button-cn#api
13
+ */
14
+ buttonProps?: ButtonProps;
15
+ /**
16
+ * 内部日期范围选择器的属性,参见 [Ant Design 的 `DatePicker.RangePicker` API][1]。
17
+ *
18
+ * [1]: https://ant-design.antgroup.com/components/date-picker-cn#rangepicker
19
+ */
20
+ pickerProps?: RangePickerProps;
21
+ }
22
+ /**
23
+ * 带有快速选择最近 3/5/7 天功能的日期范围选择器。
24
+ *
25
+ * 除了文档中列出的属性外,该组件会将其它属性转交给 [Ant Design 的 `Space` 组件][1]。
26
+ *
27
+ * [1]: https://ant-design.antgroup.com/components/space-cn#api
28
+ */
29
+ declare function QuickDateRangePicker(props: QuickDateRangePickerProps): import("react/jsx-runtime").JSX.Element;
30
+ export default QuickDateRangePicker;
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, DatePicker, Space, } from "antd";
3
+ import dayjs, {} from "dayjs";
4
+ import { useState } from "react";
5
+ const QUICK_PICK_RANGES = [
6
+ { value: 3, label: "最近 3 天" },
7
+ { value: 5, label: "最近 5 天" },
8
+ { value: 7, label: "最近 7 天" },
9
+ ];
10
+ /**
11
+ * 带有快速选择最近 3/5/7 天功能的日期范围选择器。
12
+ *
13
+ * 除了文档中列出的属性外,该组件会将其它属性转交给 [Ant Design 的 `Space` 组件][1]。
14
+ *
15
+ * [1]: https://ant-design.antgroup.com/components/space-cn#api
16
+ */
17
+ function QuickDateRangePicker(props) {
18
+ const { value, onChange, buttonProps, pickerProps, ...rest } = props;
19
+ const [range, setRange] = value === undefined
20
+ ? // eslint-disable-next-line react-hooks/rules-of-hooks
21
+ useState(undefined)
22
+ : [value, () => { }];
23
+ function quickPick(value) {
24
+ const end = dayjs();
25
+ const start = end.subtract(value - 1, "day");
26
+ const newRange = [start, end];
27
+ setRange(newRange);
28
+ onChange?.(newRange);
29
+ }
30
+ return (_jsxs(Space, { ...rest, children: [QUICK_PICK_RANGES.map((item, index) => (_jsx(Button, { onClick: () => quickPick(item.value), ...buttonProps, children: item.label }, index))), _jsx(DatePicker.RangePicker, { value: range, allowClear: false, onChange: (range) => {
31
+ setRange(range);
32
+ onChange?.(range); // 由于 allowClear=false,这里 range 不可能为 null
33
+ }, ...pickerProps })] }));
34
+ }
35
+ export default QuickDateRangePicker;
36
+ //# sourceMappingURL=QuickDateRangePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuickDateRangePicker.js","sourceRoot":"","sources":["../../src/components/QuickDateRangePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EAEN,UAAU,EACV,KAAK,GAEN,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAqBjC,MAAM,iBAAiB,GAAG;IACxB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC7B,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC7B,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;CAC9B,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,KAAgC;IAC5D,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACrE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GACrB,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,sDAAsD;YACtD,QAAQ,CAA+C,SAAS,CAAC;QACnE,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACxB,SAAS,SAAS,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAqC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,CACL,MAAC,KAAK,OAAK,IAAI,aAEZ,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,KAAC,MAAM,IAEL,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAChC,WAAW,YAEd,IAAI,CAAC,KAAK,IAJN,KAAK,CAKH,CACV,CAAC,EACF,KAAC,UAAU,CAAC,WAAW,IACrB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,QAAQ,CAAC,KAAM,CAAC,CAAC;oBACjB,QAAQ,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,yCAAyC;gBAC/D,CAAC,KACG,WAAW,GACf,IACI,CACT,CAAC;AACJ,CAAC;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type RadioGroupProps } from "antd";
2
+ /**
3
+ * 分段单选按钮。
4
+ *
5
+ * 该组件是 [Ant Design 的 `Radio.Group optionType="button"`][1] 的别名。
6
+ *
7
+ * [1]: https://ant-design.antgroup.com/components/radio-cn#radiogroup
8
+ */
9
+ declare function SegmentedButtons(props: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
10
+ export interface TimeUnitSwitcherProps extends Omit<RadioGroupProps, "onChange"> {
11
+ value?: "day" | "week" | "month";
12
+ onChange?: (value: "day" | "week" | "month") => void;
13
+ }
14
+ /**
15
+ * 时间单位(日/周/月)切换按钮。
16
+ *
17
+ * 该组件是 {@link SegmentedButtons} 的特化版本。更多属性参见 [`Radio.Group`][1]。
18
+ *
19
+ * [1]: https://ant-design.antgroup.com/components/radio-cn#radiogroup
20
+ */
21
+ export declare function TimeUnitSwitcher(props: TimeUnitSwitcherProps): import("react/jsx-runtime").JSX.Element;
22
+ export default SegmentedButtons;
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Radio } from "antd";
3
+ /**
4
+ * 分段单选按钮。
5
+ *
6
+ * 该组件是 [Ant Design 的 `Radio.Group optionType="button"`][1] 的别名。
7
+ *
8
+ * [1]: https://ant-design.antgroup.com/components/radio-cn#radiogroup
9
+ */
10
+ function SegmentedButtons(props) {
11
+ return _jsx(Radio.Group, { optionType: "button", ...props });
12
+ }
13
+ // TODO i18n
14
+ const TIME_UNIT_OPTIONS = [
15
+ { label: "日", value: "day" },
16
+ { label: "周", value: "week" },
17
+ { label: "月", value: "month" },
18
+ ];
19
+ /**
20
+ * 时间单位(日/周/月)切换按钮。
21
+ *
22
+ * 该组件是 {@link SegmentedButtons} 的特化版本。更多属性参见 [`Radio.Group`][1]。
23
+ *
24
+ * [1]: https://ant-design.antgroup.com/components/radio-cn#radiogroup
25
+ */
26
+ export function TimeUnitSwitcher(props) {
27
+ const { onChange, ...rest } = props;
28
+ return (_jsx(Radio.Group, { optionType: "button", options: TIME_UNIT_OPTIONS, onChange: (e) => onChange?.(e.target.value), ...rest }));
29
+ }
30
+ export default SegmentedButtons;
31
+ //# sourceMappingURL=SegmentedButtons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentedButtons.js","sourceRoot":"","sources":["../../src/components/SegmentedButtons.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAwB,MAAM,MAAM,CAAC;AAEnD;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAsB;IAC9C,OAAO,KAAC,KAAK,CAAC,KAAK,IAAC,UAAU,EAAC,QAAQ,KAAK,KAAK,GAAI,CAAC;AACxD,CAAC;AAED,YAAY;AACZ,MAAM,iBAAiB,GAAG;IACxB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;IAC5B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;IAC7B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;CAC/B,CAAC;AAQF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACpC,OAAO,CACL,KAAC,KAAK,CAAC,KAAK,IACV,UAAU,EAAC,QAAQ,EACnB,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KACvC,IAAI,GACR,CACH,CAAC;AACJ,CAAC;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { MenuProps } from "antd";
2
+ export type MenuItem = Required<MenuProps>["items"][number];
3
+ /**
4
+ * TmsSidebar组件的属性接口
5
+ */
6
+ export interface TmsSidebarProps extends MenuProps {
7
+ /**
8
+ * 侧边栏宽度。
9
+ * @default 260
10
+ */
11
+ width?: number | string;
12
+ /**
13
+ * 网站 Logo 的 URL。
14
+ *
15
+ * 建议导入图片,然后将导入得到的地址填入 `logo`,而不要硬编码地址。
16
+ */
17
+ logo?: string;
18
+ /**
19
+ * 菜单项配置,默认与 TMS 系统的菜单相同。
20
+ *
21
+ * 该属性以及其余属性的用法可参考 [`Menu` 组件的文档][1]。
22
+ *
23
+ * [1]: https://ant-design.antgroup.com/components/menu-cn
24
+ */
25
+ items?: MenuItem[];
26
+ /** 当前选中的菜单项 key 数组。 */
27
+ selectedKeys?: string[];
28
+ /** 当前展开的子菜单 key 数组。 */
29
+ openKeys?: string[];
30
+ /** 菜单项被选中时的回调函数。 */
31
+ onSelect?: MenuProps["onSelect"];
32
+ /** 子菜单展开/收起时的回调函数。 */
33
+ onOpenChange?: MenuProps["onOpenChange"];
34
+ }
35
+ /**
36
+ * TMS 系统的侧边栏组件。该组件需要放置在 [Ant Design 的 `Layout` 组件][1]内部才能正常工作。
37
+ *
38
+ * 除了文档中列出的属性之外,该组件会把额外的属性全部传递给内部的菜单 [`Menu` 组件][2]。
39
+ *
40
+ * 该组件不支持暗色模式。
41
+ *
42
+ * [1]: https://ant-design.antgroup.com/components/layout-cn
43
+ * [2]: https://ant-design.antgroup.com/components/menu-cn
44
+ */
45
+ declare function TmsSidebar(props: TmsSidebarProps): import("react/jsx-runtime").JSX.Element;
46
+ export default TmsSidebar;
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BarChartOutlined, SwapOutlined, TeamOutlined, } from "@ant-design/icons";
3
+ import { ConfigProvider, Layout, Menu } from "antd";
4
+ const { Sider } = Layout;
5
+ const menuItem = (label, key, icon, children) => ({ key, icon, children, label });
6
+ /** 默认菜单项配置,可以作为参考或默认值 */
7
+ const DEFAULT_MENU_ITEMS = [
8
+ menuItem("数据看板", "data-board", _jsx(BarChartOutlined, {}), [
9
+ menuItem("宏观数据", "macro-data"),
10
+ menuItem("合约看板", "contract-overview"),
11
+ menuItem("数据复盘", "data-review"),
12
+ ]),
13
+ menuItem("交易管理", "trade-management", _jsx(SwapOutlined, {}), [
14
+ menuItem("日前交易", "day-ahead-trade"),
15
+ menuItem("现货交易", "spot-trade"),
16
+ menuItem("中长期交易", "long-term-trade"),
17
+ ]),
18
+ menuItem("合约管理", "customer-management", _jsx(TeamOutlined, {}), [
19
+ menuItem("客户总览", "customer-overview"),
20
+ menuItem("售电合约管理", "sales-contract"),
21
+ menuItem("供应商管理", "supplier-management"),
22
+ menuItem("购电合约管理", "purchase-contract"),
23
+ ]),
24
+ ];
25
+ /**
26
+ * TMS 系统的侧边栏组件。该组件需要放置在 [Ant Design 的 `Layout` 组件][1]内部才能正常工作。
27
+ *
28
+ * 除了文档中列出的属性之外,该组件会把额外的属性全部传递给内部的菜单 [`Menu` 组件][2]。
29
+ *
30
+ * 该组件不支持暗色模式。
31
+ *
32
+ * [1]: https://ant-design.antgroup.com/components/layout-cn
33
+ * [2]: https://ant-design.antgroup.com/components/menu-cn
34
+ */
35
+ function TmsSidebar(props) {
36
+ const { width = 260, logo, items = DEFAULT_MENU_ITEMS, selectedKeys, openKeys, onSelect, onOpenChange, ...rest } = props;
37
+ return (_jsxs(Sider, { theme: "light", width: width, style: {
38
+ boxShadow: "0 2px 8px rgba(0, 0, 0, 0.15)",
39
+ overflowY: "auto",
40
+ }, children: [_jsx("div", { style: {
41
+ height: "98px",
42
+ padding: "28px 78px",
43
+ display: "flex",
44
+ alignItems: "center",
45
+ justifyContent: "center",
46
+ transition: "all 0.3s",
47
+ }, children: _jsx("img", { alt: "logo", src: logo, style: {
48
+ width: "100%",
49
+ height: "100%",
50
+ objectFit: "contain",
51
+ } }) }), _jsx(ConfigProvider, { theme: {
52
+ components: {
53
+ Menu: {
54
+ itemMarginBlock: 0,
55
+ itemMarginInline: 0,
56
+ itemSelectedColor: "#1890FF",
57
+ itemSelectedBg: "#F0F7FF",
58
+ },
59
+ },
60
+ }, children: _jsx(Menu, { mode: "inline", style: { borderRight: 0 }, selectedKeys: selectedKeys, openKeys: openKeys, onSelect: onSelect, onOpenChange: onOpenChange, items: items, ...rest }) })] }));
61
+ }
62
+ export default TmsSidebar;
63
+ //# sourceMappingURL=TmsSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TmsSidebar.js","sourceRoot":"","sources":["../../src/components/TmsSidebar.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIpD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAIzB,MAAM,QAAQ,GAAG,CACf,KAAsB,EACtB,GAAc,EACd,IAAsB,EACtB,QAAqB,EACX,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAEhD,yBAAyB;AACzB,MAAM,kBAAkB,GAAe;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAC,gBAAgB,KAAG,EAAE;QACnD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;QACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAC,YAAY,KAAG,EAAE;QACrD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACnC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;KACrC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAC,YAAY,KAAG,EAAE;QACxD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;QACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;QACpC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACxC,CAAC;CACH,CAAC;AAmCF;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,KAAsB;IACxC,MAAM,EACJ,KAAK,GAAG,GAAG,EACX,IAAI,EACJ,KAAK,GAAG,kBAAkB,EAC1B,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IACV,OAAO,CACL,MAAC,KAAK,IACJ,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;YACL,SAAS,EAAE,+BAA+B;YAC1C,SAAS,EAAE,MAAM;SAClB,aAED,cACE,KAAK,EAAE;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;oBACxB,UAAU,EAAE,UAAU;iBACvB,YAED,cACE,GAAG,EAAC,MAAM,EACV,GAAG,EAAE,IAAI,EACT,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,SAAS;qBACrB,GACD,GACE,EACN,KAAC,cAAc,IACb,KAAK,EAAE;oBACL,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,eAAe,EAAE,CAAC;4BAClB,gBAAgB,EAAE,CAAC;4BACnB,iBAAiB,EAAE,SAAS;4BAC5B,cAAc,EAAE,SAAS;yBAC1B;qBACF;iBACF,YAED,KAAC,IAAI,IACH,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EACzB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,KACR,IAAI,GACR,GACa,IACX,CACT,CAAC;AACJ,CAAC;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type DatePickerProps as AntdDatePickerProps, type ButtonProps } from "antd";
2
+ import type { Dayjs } from "dayjs";
3
+ import type { SpaceCompactProps } from "antd/es/space/Compact";
4
+ export interface DatePickerProps extends Omit<SpaceCompactProps, "onChange"> {
5
+ value?: Dayjs;
6
+ onChange?: (value: Dayjs) => void;
7
+ /**
8
+ * 日期的单位。
9
+ * @default "month"
10
+ */
11
+ dataType?: "day" | "week" | "month" | "year";
12
+ /**
13
+ * 是否禁用。
14
+ * @default false
15
+ */
16
+ disabled?: boolean;
17
+ /**
18
+ * 左右按钮的 `props`,见 [Ant Design 的 `Button` API][1]。
19
+ *
20
+ * [1]: https://ant-design.antgroup.com/components/button-cn#api
21
+ */
22
+ buttonProps?: ButtonProps;
23
+ /**
24
+ * 日期选择器的 `props`,见 [Ant Design 的 `DatePicker` API][1]。
25
+ *
26
+ * [1]: https://ant-design.antgroup.com/components/date-picker-cn#api
27
+ */
28
+ pickerProps?: AntdDatePickerProps;
29
+ }
30
+ /**
31
+ * 支持快速跳转的日/周/月/年选择器。
32
+ *
33
+ * 除了文档中列出的属性外,该组件会将其它属性转交给 [Ant Design 的 `Space.Compact` 组件][1]。
34
+ *
35
+ * [1]: https://ant-design.antgroup.com/components/space-cn#spacecompact
36
+ */
37
+ declare function TsingrocDatePicker(props: DatePickerProps): import("react/jsx-runtime").JSX.Element;
38
+ export default TsingrocDatePicker;
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, DatePicker, Space, } from "antd";
3
+ import { LeftOutlined, RightOutlined } from "@ant-design/icons";
4
+ import { useState } from "react";
5
+ /**
6
+ * 支持快速跳转的日/周/月/年选择器。
7
+ *
8
+ * 除了文档中列出的属性外,该组件会将其它属性转交给 [Ant Design 的 `Space.Compact` 组件][1]。
9
+ *
10
+ * [1]: https://ant-design.antgroup.com/components/space-cn#spacecompact
11
+ */
12
+ function TsingrocDatePicker(props) {
13
+ const { value, onChange: propsOnChange, dataType = "month", disabled, buttonProps, pickerProps, ...rest } = props;
14
+ const [dateValue, setDateValue] = value === undefined
15
+ ? // eslint-disable-next-line react-hooks/rules-of-hooks
16
+ useState(undefined)
17
+ : [value, () => { }];
18
+ /**
19
+ * 快速增减一定时间,如果当前未选择日期则无效。
20
+ * @param delta 增减的时间量,按传入的时间单位 `dataType` 计算
21
+ */
22
+ const quickSwitch = (delta) => {
23
+ if (!dateValue)
24
+ return;
25
+ const temp = dateValue.add(delta, dataType);
26
+ setDateValue(temp);
27
+ propsOnChange?.(temp);
28
+ };
29
+ const onChange = (value) => {
30
+ setDateValue(value);
31
+ propsOnChange?.(value);
32
+ };
33
+ return (_jsxs(Space.Compact, { ...rest, children: [_jsx(Button, { onClick: () => quickSwitch(-1), icon: _jsx(LeftOutlined, {}), disabled: disabled, className: props.className, ...buttonProps }), _jsx(DatePicker, { picker: dataType == "day" ? "date" : dataType, value: dateValue, onChange: onChange, disabled: disabled, className: props.className, ...pickerProps }), _jsx(Button, { onClick: () => quickSwitch(+1), icon: _jsx(RightOutlined, {}), disabled: disabled, ...buttonProps })] }));
34
+ }
35
+ export default TsingrocDatePicker;
36
+ //# sourceMappingURL=TsingrocDatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TsingrocDatePicker.js","sourceRoot":"","sources":["../../src/components/TsingrocDatePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,MAAM,EAEN,UAAU,EACV,KAAK,GACN,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AA6BjC;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,KAAsB;IAChD,MAAM,EACJ,KAAK,EACL,QAAQ,EAAE,aAAa,EACvB,QAAQ,GAAG,OAAO,EAClB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAC7B,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,sDAAsD;YACtD,QAAQ,CAAoB,SAAS,CAAC;QACxC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACxB;;;OAGG;IACH,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE;QACpC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5C,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,EAAE;QAChC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,OAAO,CACL,MAAC,KAAK,CAAC,OAAO,OAAK,IAAI,aACrB,KAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAC9B,IAAI,EAAE,KAAC,YAAY,KAAG,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,KAAK,CAAC,SAAS,KACtB,WAAW,GACf,EACF,KAAC,UAAU,IACT,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAC7C,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,KAAK,CAAC,SAAS,KACtB,WAAW,GACf,EACF,KAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAC9B,IAAI,EAAE,KAAC,aAAa,KAAG,EACvB,QAAQ,EAAE,QAAQ,KACd,WAAW,GACf,IACY,CACjB,CAAC;AACJ,CAAC;AAED,eAAe,kBAAkB,CAAC"}