amis 1.9.1-beta.28 → 1.9.1-beta.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. package/lib/components/AnchorNav.d.ts +9 -2
  2. package/lib/components/AnchorNav.js +32 -5
  3. package/lib/components/AnchorNav.js.map +2 -2
  4. package/lib/components/DatePicker.d.ts +41 -40
  5. package/lib/components/DatePicker.js +3 -5
  6. package/lib/components/DatePicker.js.map +2 -2
  7. package/lib/components/DateRangePicker.d.ts +45 -42
  8. package/lib/components/DateRangePicker.js +43 -11
  9. package/lib/components/DateRangePicker.js.map +2 -2
  10. package/lib/components/MonthRangePicker.d.ts +41 -40
  11. package/lib/components/MonthRangePicker.js +2 -2
  12. package/lib/components/MonthRangePicker.js.map +2 -2
  13. package/lib/components/SearchBox.d.ts +124 -42
  14. package/lib/components/SearchBox.js +181 -19
  15. package/lib/components/SearchBox.js.map +2 -2
  16. package/lib/components/Tag.d.ts +12 -10
  17. package/lib/components/Tag.js +18 -7
  18. package/lib/components/Tag.js.map +2 -2
  19. package/lib/components/calendar/Calendar.d.ts +1 -0
  20. package/lib/components/calendar/Calendar.js +8 -8
  21. package/lib/components/calendar/Calendar.js.map +2 -2
  22. package/lib/components/calendar/DaysView.d.ts +2 -1
  23. package/lib/components/calendar/DaysView.js +5 -4
  24. package/lib/components/calendar/DaysView.js.map +2 -2
  25. package/lib/index.js +1 -1
  26. package/lib/locale/de-DE.js +1 -0
  27. package/lib/locale/de-DE.js.map +2 -2
  28. package/lib/locale/en-US.js +1 -0
  29. package/lib/locale/en-US.js.map +2 -2
  30. package/lib/locale/zh-CN.js +1 -0
  31. package/lib/locale/zh-CN.js.map +2 -2
  32. package/lib/renderers/CRUD.d.ts +2 -0
  33. package/lib/renderers/CRUD.js +8 -2
  34. package/lib/renderers/CRUD.js.map +2 -2
  35. package/lib/renderers/Card.d.ts +7 -2
  36. package/lib/renderers/Card.js +11 -7
  37. package/lib/renderers/Card.js.map +2 -2
  38. package/lib/renderers/Form/InputColor.d.ts +0 -458
  39. package/lib/renderers/Form/InputColor.js +8 -9
  40. package/lib/renderers/Form/InputColor.js.map +2 -2
  41. package/lib/renderers/Form/InputExcel.d.ts +1 -0
  42. package/lib/renderers/Form/InputExcel.js +5 -0
  43. package/lib/renderers/Form/InputExcel.js.map +2 -2
  44. package/lib/renderers/Form/InputFile.d.ts +2 -2
  45. package/lib/renderers/Form/InputFile.js +6 -5
  46. package/lib/renderers/Form/InputFile.js.map +2 -2
  47. package/lib/renderers/Form/InputTable.js +16 -2
  48. package/lib/renderers/Form/InputTable.js.map +2 -2
  49. package/lib/renderers/Form/InputText.d.ts +8 -0
  50. package/lib/renderers/Form/InputText.js +8 -8
  51. package/lib/renderers/Form/InputText.js.map +2 -2
  52. package/lib/renderers/IFrame.d.ts +4 -0
  53. package/lib/renderers/IFrame.js +2 -2
  54. package/lib/renderers/IFrame.js.map +2 -2
  55. package/lib/renderers/Table/index.js +2 -2
  56. package/lib/renderers/Table/index.js.map +2 -2
  57. package/lib/renderers/Tag.js +2 -2
  58. package/lib/renderers/Tag.js.map +2 -2
  59. package/lib/renderers/Wizard.d.ts +1 -1
  60. package/lib/renderers/Wizard.js +72 -75
  61. package/lib/renderers/Wizard.js.map +2 -2
  62. package/lib/store/formItem.js +2 -1
  63. package/lib/store/formItem.js.map +2 -2
  64. package/lib/themes/ang-ie11.css +134 -21
  65. package/lib/themes/ang.css +138 -21
  66. package/lib/themes/ang.css.map +1 -1
  67. package/lib/themes/antd-ie11.css +134 -21
  68. package/lib/themes/antd.css +138 -21
  69. package/lib/themes/antd.css.map +1 -1
  70. package/lib/themes/cxd-ie11.css +134 -21
  71. package/lib/themes/cxd.css +138 -21
  72. package/lib/themes/cxd.css.map +1 -1
  73. package/lib/themes/dark-ie11.css +134 -21
  74. package/lib/themes/dark.css +138 -21
  75. package/lib/themes/dark.css.map +1 -1
  76. package/lib/themes/default-ie11.css +134 -21
  77. package/lib/themes/default.css +138 -21
  78. package/lib/themes/default.css.map +1 -1
  79. package/lib/utils/dom.js +3 -2
  80. package/lib/utils/dom.js.map +2 -2
  81. package/package.json +3 -3
  82. package/schema.json +35 -14
  83. package/scss/_properties.scss +5 -0
  84. package/scss/components/_anchor-nav.scss +1 -0
  85. package/scss/components/_calendar.scss +32 -14
  86. package/scss/components/_search-box.scss +116 -10
  87. package/scss/components/_tag.scss +12 -3
  88. package/scss/components/form/_date-range.scss +1 -1
  89. package/scss/components/form/_date.scss +28 -24
  90. package/sdk/ang-ie11.css +146 -20
  91. package/sdk/ang.css +150 -20
  92. package/sdk/antd-ie11.css +146 -20
  93. package/sdk/antd.css +150 -20
  94. package/sdk/barcode.js +51 -51
  95. package/sdk/charts.js +14 -14
  96. package/sdk/codemirror.js +7 -7
  97. package/sdk/cropperjs.js +2 -2
  98. package/sdk/cxd-ie11.css +146 -20
  99. package/sdk/cxd.css +150 -20
  100. package/sdk/dark-ie11.css +146 -20
  101. package/sdk/dark.css +150 -20
  102. package/sdk/exceljs.js +1 -1
  103. package/sdk/locale/de-DE.js +1 -0
  104. package/sdk/markdown.js +69 -69
  105. package/sdk/papaparse.js +1 -1
  106. package/sdk/renderers/Form/CityDB.js +1 -1
  107. package/sdk/rest.js +9 -23
  108. package/sdk/rich-text.js +62 -62
  109. package/sdk/sdk-ie11.css +146 -20
  110. package/sdk/sdk.css +150 -20
  111. package/sdk/sdk.js +1480 -1336
  112. package/sdk/thirds/hls.js/hls.js +1 -1
  113. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  114. package/sdk/tinymce.js +57 -57
  115. package/src/components/AnchorNav.tsx +48 -7
  116. package/src/components/DatePicker.tsx +9 -8
  117. package/src/components/DateRangePicker.tsx +62 -11
  118. package/src/components/MonthRangePicker.tsx +4 -2
  119. package/src/components/SearchBox.tsx +262 -29
  120. package/src/components/Tag.tsx +14 -3
  121. package/src/components/calendar/Calendar.tsx +30 -14
  122. package/src/components/calendar/DaysView.tsx +17 -5
  123. package/src/locale/de-DE.ts +1 -0
  124. package/src/locale/en-US.ts +1 -0
  125. package/src/locale/zh-CN.ts +1 -0
  126. package/src/renderers/CRUD.tsx +10 -0
  127. package/src/renderers/Card.tsx +24 -12
  128. package/src/renderers/Form/InputColor.tsx +14 -19
  129. package/src/renderers/Form/InputExcel.tsx +6 -0
  130. package/src/renderers/Form/InputFile.tsx +19 -18
  131. package/src/renderers/Form/InputTable.tsx +25 -4
  132. package/src/renderers/Form/InputText.tsx +20 -5
  133. package/src/renderers/IFrame.tsx +30 -1
  134. package/src/renderers/Table/index.tsx +2 -1
  135. package/src/renderers/Tag.tsx +2 -0
  136. package/src/renderers/Wizard.tsx +2 -1
  137. package/src/store/formItem.ts +4 -1
  138. package/src/utils/dom.tsx +3 -2
  139. package/sdk/color-picker.js +0 -130
@@ -7,7 +7,6 @@
7
7
  import React from 'react';
8
8
  import { Schema } from '../types';
9
9
  import { ThemeProps } from '../theme';
10
- import { PlainObject } from '../types';
11
10
  export interface AnchorNavSectionProps extends ThemeProps {
12
11
  title?: string;
13
12
  name: string | number;
@@ -63,14 +62,22 @@ export interface AnchorNavProps extends ThemeProps {
63
62
  onSelect?: (key: string | number) => void;
64
63
  direction?: 'vertical' | 'horizontal';
65
64
  }
65
+ interface SectionOffset {
66
+ key: string | number;
67
+ offsetTop: number;
68
+ }
66
69
  export interface AnchorNavState {
67
- offsetArr: PlainObject[];
70
+ offsetArr: SectionOffset[];
68
71
  fromSelect: boolean;
69
72
  }
70
73
  export declare class AnchorNav extends React.Component<AnchorNavProps, AnchorNavState> {
71
74
  static defaultProps: Pick<AnchorNavProps, 'linkClassName' | 'sectionClassName' | 'direction'>;
72
75
  contentDom: React.RefObject<HTMLDivElement>;
76
+ observer: MutationObserver;
77
+ contentDomHeight: number;
73
78
  componentDidMount(): void;
79
+ componentWillUnmount(): void;
80
+ updateSectionOffset(parentNode: HTMLElement, inited: boolean): void;
74
81
  scrollToNav(e: Event): void;
75
82
  scrollToSection(key: string | number): void;
76
83
  handleSelect(key: string | number): void;
@@ -32,28 +32,55 @@ var AnchorNav = /** @class */ (function (_super) {
32
32
  var _this = _super !== null && _super.apply(this, arguments) || this;
33
33
  // 滚动区域DOM
34
34
  _this.contentDom = react_1.default.createRef();
35
+ // 滚动区域的高度
36
+ _this.contentDomHeight = 0;
35
37
  return _this;
36
38
  }
37
39
  AnchorNav.prototype.componentDidMount = function () {
38
40
  var _this = this;
39
- // 初始化滚动标识
41
+ // 初始化滚动标识
40
42
  this.setState({ fromSelect: false });
41
- // add scroll event
42
43
  var sectionRootDom = this.contentDom && this.contentDom.current;
43
- sectionRootDom.addEventListener('scroll', this.scrollToNav);
44
+ this.updateSectionOffset(sectionRootDom, false);
45
+ this.observer = new MutationObserver(function (mutations) {
46
+ var height = sectionRootDom.scrollHeight;
47
+ // 监听sectio容器dom高度是否变化,如果变化,则重新计算section的offset
48
+ if (height !== _this.contentDomHeight) {
49
+ _this.contentDomHeight = height;
50
+ _this.updateSectionOffset(sectionRootDom, true);
51
+ }
52
+ });
53
+ this.observer.observe(sectionRootDom, {
54
+ childList: true,
55
+ attributes: true,
56
+ subtree: true
57
+ });
58
+ };
59
+ AnchorNav.prototype.componentWillUnmount = function () {
60
+ if (this.contentDom && this.contentDom.current) {
61
+ this.contentDom.current.removeEventListener('scroll', this.scrollToNav);
62
+ }
63
+ this.observer && this.observer.disconnect();
64
+ };
65
+ AnchorNav.prototype.updateSectionOffset = function (parentNode, inited) {
66
+ var _this = this;
44
67
  var offsetArr = [];
45
68
  var _a = this.props, children = _a.children, active = _a.active;
69
+ if (!inited) {
70
+ // add scroll event
71
+ parentNode.addEventListener('scroll', this.scrollToNav);
72
+ }
46
73
  // 收集段落区域offsetTop
47
74
  children &&
48
75
  react_1.default.Children.forEach(children, function (section, index) {
49
76
  offsetArr.push({
50
77
  key: section.props.name,
51
- offsetTop: sectionRootDom.children[index].offsetTop
78
+ offsetTop: parentNode.children[index].offsetTop
52
79
  });
53
80
  });
54
81
  this.setState({
55
82
  offsetArr: offsetArr
56
- }, function () { return active && _this.scrollToSection(active); });
83
+ }, !inited ? function () { return active && _this.scrollToSection(active); } : undefined);
57
84
  };
58
85
  AnchorNav.prototype.scrollToNav = function (e) {
59
86
  var _this = this;
@@ -6,8 +6,8 @@
6
6
  "/src/components/AnchorNav.tsx"
7
7
  ],
8
8
  "names": [],
9
- "mappings": "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",
9
+ "mappings": "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",
10
10
  "sourcesContent": [
11
- "/**\n * @file AnchorNav\n * @description 锚点导航\n * @author hsm-lv\n */\n\nimport React from 'react';\nimport {Schema} from '../types';\nimport {ThemeProps, themeable} from '../theme';\nimport {PlainObject} from '../types';\nimport {autobind} from '../utils/helper';\nimport {uncontrollable} from 'uncontrollable';\nimport find from 'lodash/find';\n\nexport interface AnchorNavSectionProps extends ThemeProps {\n title?: string; // 标题\n name: string | number; // 标识\n body?: Schema; // Schema\n className?: string; // 样式名\n}\n\nclass AnchorNavSectionComponent extends React.PureComponent<AnchorNavSectionProps> {\n contentDom: any;\n contentRef = (ref: any) => (this.contentDom = ref);\n\n render() {\n const {classnames: cx, children, className} = this.props;\n\n return (\n <div ref={this.contentRef} className={cx('AnchorNav-section', className)}>\n {children}\n </div>\n );\n }\n}\n\nexport const AnchorNavSection = themeable(AnchorNavSectionComponent);\n\nexport interface AnchorNavProps extends ThemeProps {\n links?: Array<AnchorNavSectionProps>; // 锚点数据\n active?: string | number; // 激活标识\n linkClassName?: string; // 导航 CSS类名\n sectionClassName?: string; // 区域 CSS类名\n sectionRender?: (\n section: AnchorNavSectionProps,\n props?: AnchorNavProps\n ) => JSX.Element; // 锚点区域渲染器\n onSelect?: (key: string | number) => void; // 选中回调方法\n direction?: 'vertical' | 'horizontal'; // 导航方向\n}\n\nexport interface AnchorNavState {\n offsetArr: PlainObject[]; // 记录每个段落的offsetTop\n fromSelect: boolean; // 标识滚动触发来源\n}\n\nexport class AnchorNav extends React.Component<AnchorNavProps, AnchorNavState> {\n static defaultProps: Pick<\n AnchorNavProps,\n 'linkClassName' | 'sectionClassName' | 'direction'\n > = {\n linkClassName: '',\n sectionClassName: '',\n direction: 'vertical'\n };\n\n // 滚动区域DOM\n contentDom: React.RefObject<HTMLDivElement> = React.createRef();\n\n componentDidMount() {\n // 初始化\b滚动标识\n this.setState({fromSelect: false});\n\n // add scroll event\n const sectionRootDom =\n this.contentDom && (this.contentDom.current as HTMLElement);\n sectionRootDom.addEventListener('scroll', this.scrollToNav);\n let offsetArr: Array<object> = [];\n const {children, active} = this.props;\n\n // 收集段落区域offsetTop\n children &&\n React.Children.forEach(\n children,\n (section: AnchorNavSectionComponent, index: number) => {\n offsetArr.push({\n key: section.props.name,\n offsetTop: (sectionRootDom.children[index] as HTMLElement).offsetTop\n });\n }\n );\n\n this.setState(\n {\n offsetArr\n },\n () => active && this.scrollToSection(active)\n );\n }\n\n @autobind\n scrollToNav(e: Event) {\n if (this.state.fromSelect) {\n return;\n }\n\n // 获取滚动的scrollTop\n const scrollTop: number = (e.target as HTMLElement).scrollTop;\n\n // 判断scrollTop所在区域\n const offsetArr = this.state.offsetArr;\n const firstSection = offsetArr[0];\n const lastSection = offsetArr[offsetArr.length - 1];\n // 首层偏移\n const offset = scrollTop + firstSection.offsetTop;\n\n // 首层\n if (offset <= firstSection.offsetTop) {\n this.fireSelect(firstSection.key);\n }\n // 最后一层\n else if (offset >= lastSection.offsetTop) {\n this.fireSelect(lastSection.key);\n } else {\n // 段落区间判断\n offsetArr.forEach((item, index) => {\n if (\n offset >= item.offsetTop &&\n offset < offsetArr[index + 1].offsetTop\n ) {\n this.fireSelect(item.key);\n }\n });\n }\n }\n\n scrollToSection(key: string | number) {\n // 获取指定段落的offsettop\n const offsetArr = this.state.offsetArr;\n const section = find(offsetArr, item => item.key === key);\n const sectionRootDom =\n this.contentDom && (this.contentDom.current as HTMLElement);\n\n // 滚动到指定段落\n section &&\n (sectionRootDom.scrollTop = section.offsetTop - offsetArr[0].offsetTop);\n }\n\n handleSelect(key: string | number) {\n // 标记滚动来自导航选择\n this.setState({fromSelect: true});\n // 滚动到对应段落\n this.scrollToSection(key);\n\n const sectionRootDom =\n this.contentDom && (this.contentDom.current as HTMLElement);\n\n // 如果已经滚到底就不去更新导航选中了\n if (\n sectionRootDom.scrollHeight - sectionRootDom.scrollTop <\n sectionRootDom.clientHeight\n ) {\n // fire event\n this.fireSelect(key);\n }\n\n // 取消标记\n this.setState({fromSelect: false});\n }\n\n fireSelect(key: string | number) {\n const {onSelect} = this.props;\n onSelect && onSelect(key);\n }\n\n renderLink(link: any, index: number) {\n if (!link) {\n return;\n }\n\n const {classnames: cx, active: activeProp} = this.props;\n const {title, name} = link.props;\n const active = activeProp === undefined && index === 0 ? name : activeProp;\n\n return (\n <li\n className={cx('AnchorNav-link', active === name ? 'is-active' : '')}\n key={index}\n onClick={() => this.handleSelect(name)}\n >\n <a>{title}</a>\n </li>\n );\n }\n\n renderSection(section: any, index: number) {\n if (!section) {\n return;\n }\n\n const {active: activeProp, classnames} = this.props;\n const name = section.props.name;\n const active = activeProp === undefined && index === 0 ? name : activeProp;\n\n return React.cloneElement(section, {\n ...section.props,\n key: index,\n classnames,\n active\n });\n }\n\n render() {\n const {\n classnames: cx,\n className,\n linkClassName,\n sectionClassName,\n children,\n direction\n } = this.props;\n\n if (!Array.isArray(children)) {\n return null;\n }\n\n return (\n <div\n className={cx(\n 'AnchorNav',\n {\n [`AnchorNav--${direction}`]: direction\n },\n className\n )}\n >\n <ul\n className={cx('AnchorNav-link-wrap', linkClassName)}\n role=\"anchorlist\"\n >\n {children.map((link, index) => this.renderLink(link, index))}\n </ul>\n\n <div\n className={cx('AnchorNav-section-wrap', sectionClassName)}\n ref={this.contentDom}\n >\n {children.map((section, index) => {\n return this.renderSection(section, index);\n })}\n </div>\n </div>\n );\n }\n}\n\nconst ThemedAnchorNav = themeable(\n uncontrollable(AnchorNav, {\n active: 'onSelect'\n })\n);\n\nexport default ThemedAnchorNav as typeof ThemedAnchorNav & {\n AnchorNavSection: typeof AnchorNavSection;\n};\n"
11
+ "/**\n * @file AnchorNav\n * @description 锚点导航\n * @author hsm-lv\n */\n\nimport React from 'react';\nimport {Schema} from '../types';\nimport {ThemeProps, themeable} from '../theme';\nimport {PlainObject} from '../types';\nimport {autobind} from '../utils/helper';\nimport {uncontrollable} from 'uncontrollable';\nimport find from 'lodash/find';\n\nexport interface AnchorNavSectionProps extends ThemeProps {\n title?: string; // 标题\n name: string | number; // 标识\n body?: Schema; // Schema\n className?: string; // 样式名\n}\n\nclass AnchorNavSectionComponent extends React.PureComponent<AnchorNavSectionProps> {\n contentDom: any;\n contentRef = (ref: any) => (this.contentDom = ref);\n\n render() {\n const {classnames: cx, children, className} = this.props;\n\n return (\n <div ref={this.contentRef} className={cx('AnchorNav-section', className)}>\n {children}\n </div>\n );\n }\n}\n\nexport const AnchorNavSection = themeable(AnchorNavSectionComponent);\n\nexport interface AnchorNavProps extends ThemeProps {\n links?: Array<AnchorNavSectionProps>; // 锚点数据\n active?: string | number; // 激活标识\n linkClassName?: string; // 导航 CSS类名\n sectionClassName?: string; // 区域 CSS类名\n sectionRender?: (\n section: AnchorNavSectionProps,\n props?: AnchorNavProps\n ) => JSX.Element; // 锚点区域渲染器\n onSelect?: (key: string | number) => void; // 选中回调方法\n direction?: 'vertical' | 'horizontal'; // 导航方向\n}\n\ninterface SectionOffset {\n key: string | number;\n offsetTop: number;\n}\n\nexport interface AnchorNavState {\n offsetArr: SectionOffset[]; // 记录每个段落的offsetTop\n fromSelect: boolean; // 标识滚动触发来源\n}\n\nexport class AnchorNav extends React.Component<AnchorNavProps, AnchorNavState> {\n static defaultProps: Pick<\n AnchorNavProps,\n 'linkClassName' | 'sectionClassName' | 'direction'\n > = {\n linkClassName: '',\n sectionClassName: '',\n direction: 'vertical'\n };\n\n // 滚动区域DOM\n contentDom: React.RefObject<HTMLDivElement> = React.createRef();\n\n // 后代节点观察器\n observer: MutationObserver;\n\n // 滚动区域的高度\n contentDomHeight = 0;\n\n componentDidMount() {\n // 初始化滚动标识\n this.setState({fromSelect: false});\n\n const sectionRootDom =\n this.contentDom && (this.contentDom.current as HTMLElement);\n\n this.updateSectionOffset(sectionRootDom, false);\n this.observer = new MutationObserver((mutations: MutationRecord[]) => {\n let height = sectionRootDom.scrollHeight;\n\n // 监听sectio容器dom高度是否变化,如果变化,则重新计算section的offset\n if (height !== this.contentDomHeight) {\n this.contentDomHeight = height;\n this.updateSectionOffset(sectionRootDom, true);\n }\n });\n\n this.observer.observe(sectionRootDom, {\n childList: true,\n attributes: true, // 属性变化也有可能导致高度的变化,例如类名,所以也要监听\n subtree: true\n });\n }\n\n componentWillUnmount() {\n if (this.contentDom && this.contentDom.current) {\n this.contentDom.current.removeEventListener('scroll', this.scrollToNav);\n }\n this.observer && this.observer.disconnect();\n }\n\n updateSectionOffset(parentNode: HTMLElement, inited: boolean) {\n const offsetArr: Array<SectionOffset> = [];\n const {children, active} = this.props;\n\n if (!inited) {\n // add scroll event\n parentNode.addEventListener('scroll', this.scrollToNav);\n }\n\n // 收集段落区域offsetTop\n children &&\n React.Children.forEach(\n children,\n (section: AnchorNavSectionComponent, index: number) => {\n offsetArr.push({\n key: section.props.name,\n offsetTop: (parentNode.children[index] as HTMLElement).offsetTop\n });\n }\n );\n\n this.setState(\n {\n offsetArr\n },\n !inited ? () => active && this.scrollToSection(active) : undefined\n );\n }\n\n @autobind\n scrollToNav(e: Event) {\n if (this.state.fromSelect) {\n return;\n }\n\n // 获取滚动的scrollTop\n const scrollTop: number = (e.target as HTMLElement).scrollTop;\n\n // 判断scrollTop所在区域\n const offsetArr = this.state.offsetArr;\n const firstSection = offsetArr[0];\n const lastSection = offsetArr[offsetArr.length - 1];\n // 首层偏移\n const offset = scrollTop + firstSection.offsetTop;\n\n // 首层\n if (offset <= firstSection.offsetTop) {\n this.fireSelect(firstSection.key);\n }\n // 最后一层\n else if (offset >= lastSection.offsetTop) {\n this.fireSelect(lastSection.key);\n } else {\n // 段落区间判断\n offsetArr.forEach((item, index) => {\n if (\n offset >= item.offsetTop &&\n offset < offsetArr[index + 1].offsetTop\n ) {\n this.fireSelect(item.key);\n }\n });\n }\n }\n\n scrollToSection(key: string | number) {\n // 获取指定段落的offsettop\n const offsetArr = this.state.offsetArr;\n const section = find(offsetArr, item => item.key === key);\n const sectionRootDom =\n this.contentDom && (this.contentDom.current as HTMLElement);\n\n // 滚动到指定段落\n section &&\n (sectionRootDom.scrollTop = section.offsetTop - offsetArr[0].offsetTop);\n }\n\n handleSelect(key: string | number) {\n // 标记滚动来自导航选择\n this.setState({fromSelect: true});\n // 滚动到对应段落\n this.scrollToSection(key);\n\n const sectionRootDom =\n this.contentDom && (this.contentDom.current as HTMLElement);\n\n // 如果已经滚到底就不去更新导航选中了\n if (\n sectionRootDom.scrollHeight - sectionRootDom.scrollTop <\n sectionRootDom.clientHeight\n ) {\n // fire event\n this.fireSelect(key);\n }\n\n // 取消标记\n this.setState({fromSelect: false});\n }\n\n fireSelect(key: string | number) {\n const {onSelect} = this.props;\n onSelect && onSelect(key);\n }\n\n renderLink(link: any, index: number) {\n if (!link) {\n return;\n }\n\n const {classnames: cx, active: activeProp} = this.props;\n const {title, name} = link.props;\n const active = activeProp === undefined && index === 0 ? name : activeProp;\n\n return (\n <li\n className={cx('AnchorNav-link', active === name ? 'is-active' : '')}\n key={index}\n onClick={() => this.handleSelect(name)}\n >\n <a>{title}</a>\n </li>\n );\n }\n\n renderSection(section: any, index: number) {\n if (!section) {\n return;\n }\n\n const {active: activeProp, classnames} = this.props;\n const name = section.props.name;\n const active = activeProp === undefined && index === 0 ? name : activeProp;\n\n return React.cloneElement(section, {\n ...section.props,\n key: index,\n classnames,\n active\n });\n }\n\n render() {\n const {\n classnames: cx,\n className,\n linkClassName,\n sectionClassName,\n children,\n direction\n } = this.props;\n\n if (!Array.isArray(children)) {\n return null;\n }\n\n return (\n <div\n className={cx(\n 'AnchorNav',\n {\n [`AnchorNav--${direction}`]: direction\n },\n className\n )}\n >\n <ul\n className={cx('AnchorNav-link-wrap', linkClassName)}\n role=\"anchorlist\"\n >\n {children.map((link, index) => this.renderLink(link, index))}\n </ul>\n\n <div\n className={cx('AnchorNav-section-wrap', sectionClassName)}\n ref={this.contentDom}\n >\n {children.map((section, index) => {\n return this.renderSection(section, index);\n })}\n </div>\n </div>\n );\n }\n}\n\nconst ThemedAnchorNav = themeable(\n uncontrollable(AnchorNav, {\n active: 'onSelect'\n })\n);\n\nexport default ThemedAnchorNav as typeof ThemedAnchorNav & {\n AnchorNavSection: typeof AnchorNavSection;\n};\n"
12
12
  ]
13
13
  }