@antv/dumi-theme-antv 0.7.3-beta.2 → 0.7.3-beta.4

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 (41) hide show
  1. package/dist/builtins/Playground/index.module.less +0 -3
  2. package/dist/common/GlobalStyles.js +6 -0
  3. package/dist/common/styles/Antd.js +9 -0
  4. package/dist/common/styles/Common.js +9 -0
  5. package/dist/common/styles/index.js +2 -0
  6. package/dist/common/styles/theme.js +12 -0
  7. package/dist/common/styles/variables.less +14 -0
  8. package/dist/layouts/DocLayout.js +48 -21
  9. package/dist/pages/Example/index.module.less +1 -4
  10. package/dist/pages/Examples/index.js +4 -5
  11. package/dist/pages/Examples/index.module.less +10 -12
  12. package/dist/pages/Index/components/Cases/index.module.less +2 -2
  13. package/dist/pages/Index/components/Companies/index.js +5 -17
  14. package/dist/pages/Index/components/Companies/index.module.less +33 -6
  15. package/dist/pages/Index/components/Detail/News.module.less +1 -0
  16. package/dist/pages/Index/components/Detail/index.module.less +1 -25
  17. package/dist/pages/Index/components/Features/index.js +8 -16
  18. package/dist/pages/Index/components/Features/index.module.less +21 -23
  19. package/dist/pages/Index/components/_.less +3 -3
  20. package/dist/plugin/deadLinkChecker.js +35 -15
  21. package/dist/plugin/index.js +9 -10
  22. package/dist/plugin/remarkFeedback.js +1 -1
  23. package/dist/slots/Banner/index.module.less +11 -11
  24. package/dist/slots/CodeEditor/Toolbar.module.less +1 -1
  25. package/dist/slots/CodeEditor/index.js +5 -1
  26. package/dist/slots/CodePreview/CodeHeader.js +2 -1
  27. package/dist/slots/ExampleSider/index.module.less +4 -6
  28. package/dist/slots/Feedback/index.js +1 -2
  29. package/dist/slots/Footer/index.module.less +2 -3
  30. package/dist/slots/Header/Products/Product.module.less +1 -2
  31. package/dist/slots/Header/Search/helper.js +1 -0
  32. package/dist/slots/Header/Search/index.js +1 -3
  33. package/dist/slots/Header/index.js +28 -24
  34. package/dist/slots/Header/index.module.less +19 -19
  35. package/dist/slots/Loading/index.js +12 -4
  36. package/dist/slots/Loading/index.module.less +0 -1
  37. package/dist/slots/ManualContent/Main.js +3 -15
  38. package/dist/slots/ManualContent/index.module.less +11 -14
  39. package/dist/slots/hooks.js +3 -1
  40. package/dist/static/style.js +3 -0
  41. package/package.json +13 -4
@@ -1,6 +1,3 @@
1
- @import 'antd/es/style/themes/default.less';
2
- @import '../../slots/_.less';
3
-
4
1
  .container {
5
2
  width: 100%;
6
3
  height: 400px;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { Antd, Common } from "./styles";
3
+ var GlobalStyles = function GlobalStyles() {
4
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Antd, null), /*#__PURE__*/React.createElement(Common, null));
5
+ };
6
+ export default GlobalStyles;
@@ -0,0 +1,9 @@
1
+ var _templateObject;
2
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
3
+ import { css, Global } from '@emotion/react';
4
+ import React from 'react';
5
+ export default (function () {
6
+ return /*#__PURE__*/React.createElement(Global, {
7
+ styles: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .ant-btn-text {\n color: rgba(0, 0, 0, 0.85);\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n }\n "])))
8
+ });
9
+ });
@@ -0,0 +1,9 @@
1
+ var _templateObject;
2
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
3
+ import { css, Global } from '@emotion/react';
4
+ import React from 'react';
5
+ export default (function () {
6
+ return /*#__PURE__*/React.createElement(Global, {
7
+ styles: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n :root {\n --container-max-width: 1440px;\n --container-padding-large: 80px;\n --container-padding-medium: 80px;\n --container-padding-small: 32px;\n --primary-color: #873bf4;\n --toc-width: 260px;\n --border-color-split: #f0f0f0;\n --text-color-secondary: rgba(0, 0, 0, 0.45);\n --text-color: rgba(0, 0, 0, 0.85);\n --font-family: AlibabaPuHuiTiRHeavy, sans-serif;\n }\n\n @font-face {\n font-family: AlibabaPuHuiTiRHeavy;\n src: url(../../font/Alibaba-PuHuiTi-Heavy.otf);\n }\n\n body {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans',\n sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n font-variant: tabular-nums;\n line-height: 1.5715;\n background-color: #fff;\n font-feature-settings: 'tnum';\n text-decoration: none;\n }\n\n a {\n text-decoration: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-text-decoration-skip: objects;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n > a[aria-hidden]:first-child {\n float: left;\n width: 20px;\n font-size: 0;\n line-height: inherit;\n text-align: right;\n padding-inline-end: 6px;\n margin-inline-start: -20px;\n\n &:hover {\n border: 0;\n }\n\n > .icon-link::before {\n font-size: 20px;\n content: '#';\n }\n }\n\n &:not(:hover) > a[aria-hidden]:first-child > .icon-link {\n visibility: hidden;\n }\n }\n\n /* \u975E\u5E38\u5173\u952E\uFF0C\u7528\u4E8E react-split-pane \u7684\u6837\u5F0F\uFF0C\u5982\u679C\u6CA1\u6709\uFF0C\u4F1A\u6CA1\u6709\u529E\u6CD5\u9F20\u6807\u62D6\u62FD */\n /* \u53C2\u8003\uFF1Ahttps://codesandbox.io/s/mow7x4zyqx */\n .Pane1,\n .Pane2 {\n overflow: auto;\n }\n\n .Resizer {\n z-index: 1;\n box-sizing: border-box;\n background: #000;\n background-clip: padding-box;\n opacity: 0.1;\n\n &:hover {\n transition: all 2s ease;\n }\n\n &.horizontal {\n width: 100%;\n height: 11px;\n margin: -5px 0;\n border-top: 5px solid rgba(255, 255, 255, 0);\n border-bottom: 5px solid rgba(255, 255, 255, 0);\n cursor: row-resize;\n\n &:hover {\n border-top: 5px solid rgba(0, 0, 0, 0.5);\n border-bottom: 5px solid rgba(0, 0, 0, 0.5);\n }\n }\n\n &.vertical {\n width: 11px;\n margin: 0 -5px;\n border-right: 5px solid rgba(255, 255, 255, 0);\n border-left: 5px solid rgba(255, 255, 255, 0);\n cursor: col-resize;\n\n Pane2 {\n border-left: 1px solid #e6e6e6;\n }\n\n &:hover {\n border-right: 5px solid rgba(0, 0, 0, 0.5);\n border-left: 5px solid rgba(0, 0, 0, 0.5);\n }\n }\n\n &.disabled {\n cursor: not-allowed;\n\n &:hover {\n border-color: transparent;\n }\n }\n }\n\n /* \u6BB5\u843D\u53CD\u9988 Icon */\n .comment-link {\n font-size: 0.8em;\n float: right;\n color: #6d7c92;\n transform: scale(0.9);\n transition: background 0.3s, color 0.3s;\n\n &:hover {\n color: #873bf4;\n background-color: #f8f1ff;\n cursor: pointer;\n border-radius: 2px;\n }\n }\n "])))
8
+ });
9
+ });
@@ -0,0 +1,2 @@
1
+ export { default as Antd } from "./Antd";
2
+ export { default as Common } from "./Common";
@@ -0,0 +1,12 @@
1
+ export var defaultToken = {
2
+ borderColorSplit: '#f0f0f0',
3
+ borderRadius: 8,
4
+ colorLink: '#873bf4',
5
+ colorPrimary: '#873bf4',
6
+ colorText: 'rgba(0, 0, 0, 0.85)',
7
+ fontFamily: 'AlibabaPuHuiTiRHeavy, sans-serif',
8
+ fontSize: 14,
9
+ primaryColor: '#873bf4',
10
+ textColor: 'rgba(0, 0, 0, 0.85)',
11
+ textColorSecondary: 'rgba(0, 0, 0, 0.45)'
12
+ };
@@ -0,0 +1,14 @@
1
+ .container1440() {
2
+ width: var(--container-max-width);
3
+ max-width: calc(100% - var(--container-padding-large));
4
+ margin-right: auto;
5
+ margin-left: auto;
6
+
7
+ @media only screen and (max-width: 931.99px) {
8
+ max-width: calc(100% - var(--container-padding-medium));
9
+ }
10
+
11
+ @media only screen and (max-width: 767.99px) {
12
+ max-width: calc(100% - var(--container-padding-small));
13
+ }
14
+ }
@@ -1,14 +1,19 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import { createCache, extractStyle, StyleProvider } from '@ant-design/cssinjs';
8
+ import { ConfigProvider } from 'antd';
1
9
  import { Helmet, useLocation, useOutlet, useServerInsertedHTML, useSiteData } from 'dumi';
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { default as React, useEffect } from 'react';
10
+ import React, { useEffect } from 'react';
5
11
  import { getPurePathname } from "../utils/location";
6
12
  import IndexLayout from "./IndexLayout";
7
13
  import ManualLayout from "./ManualLayout";
8
-
9
- // 用户手动添加自己的
10
- import "../slots/global";
11
- import "../slots/_.less";
14
+ import GlobalStyles from "../common/GlobalStyles";
15
+ import { defaultToken } from "../common/styles/theme";
16
+ import "../static/style";
12
17
 
13
18
  /**
14
19
  * DocLayout 是 dumi2 的内置 layout 入口,在这里使用页面路径进行区分成自己不同的 Layout。
@@ -21,13 +26,18 @@ export default (function () {
21
26
 
22
27
  // 打印控制台文案
23
28
  useEffect(function () {
24
- console.log('%cAntV 让数据栩栩如生', 'color:#5B7102; font-size: 20px;'), console.log('%c新一代数据可视化解决方案', 'color:#5B7102;'), console.log('--------------------------'), console.log('%c关注我们的微信公众号 %c“数据可视化 AntV”%c,获取我们团队最新的进展、动态、分享,也欢迎加入我们!', 'color: red', 'color: pink', 'color: red');
29
+ console.log('%cAntV 让数据栩栩如生', 'color:#5B7102; font-size: 20px;'), console.log('%c新一代数据可视化解决方案', 'color:#5B7102;'), console.log('--------------------------'), console.log('%c关注我们的微信公众号 %c"数据可视化 AntV"%c,获取我们团队最新的进展、动态、分享,也欢迎加入我们!', 'color: red', 'color: pink', 'color: red');
25
30
  }, []);
26
31
  var outlet = useOutlet();
27
32
  var location = useLocation();
28
33
  var pathname = location.pathname,
29
34
  hash = location.hash;
30
35
  var purePathname = getPurePathname(pathname);
36
+ var _React$useState = React.useState(function () {
37
+ return createCache();
38
+ }),
39
+ _React$useState2 = _slicedToArray(_React$useState, 1),
40
+ styleCache = _React$useState2[0];
31
41
 
32
42
  // 监听 hash 变更,跳转到锚点位置
33
43
  // 同时监听页面 loading 状态,因为路由按需加载时需要等待页面渲染完毕才能找到锚点位置
@@ -59,27 +69,44 @@ export default (function () {
59
69
  }
60
70
  return outlet;
61
71
  }, [purePathname]);
62
-
63
- // 在服务端渲染时注入 CSS 样式
64
72
  useServerInsertedHTML(function () {
65
- var manifestPath = path.resolve(process.cwd(), 'dist/asset-manifest.json');
66
- var cssContent = '';
67
- if (fs.existsSync(manifestPath)) {
68
- var manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
69
- var cssFile = manifest['umi.css'];
70
- if (cssFile) {
71
- var cssPath = path.resolve(process.cwd(), "dist/".concat(cssFile));
72
- cssContent = fs.existsSync(cssPath) ? fs.readFileSync(cssPath, 'utf-8') : '';
73
+ var styleText = extractStyle(styleCache, {
74
+ plain: true,
75
+ types: 'style'
76
+ });
77
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: only used in .dumi
78
+ return /*#__PURE__*/React.createElement("style", {
79
+ "data-type": "antd-cssinjs",
80
+ dangerouslySetInnerHTML: {
81
+ __html: styleText
73
82
  }
74
- }
83
+ });
84
+ });
85
+ useServerInsertedHTML(function () {
86
+ var styleText = extractStyle(styleCache, {
87
+ plain: true,
88
+ types: ['cssVar', 'token']
89
+ });
75
90
  return /*#__PURE__*/React.createElement("style", {
91
+ "data-type": "antd-css-var",
92
+ "data-rc-order": "prepend",
93
+ "data-rc-priority": "-9999"
94
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: only used in .dumi
95
+ ,
76
96
  dangerouslySetInnerHTML: {
77
- __html: cssContent
97
+ __html: styleText
78
98
  }
79
99
  });
80
100
  });
81
101
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Helmet, null, /*#__PURE__*/React.createElement("link", {
82
102
  rel: "shortcut icon",
83
103
  href: "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7svFR6wkPMoAAAAAAAAAAAAADmJ7AQ/original"
84
- })), content);
104
+ })), /*#__PURE__*/React.createElement(StyleProvider, {
105
+ cache: styleCache
106
+ }, /*#__PURE__*/React.createElement(ConfigProvider, {
107
+ theme: {
108
+ token: defaultToken,
109
+ hashed: false
110
+ }
111
+ }, /*#__PURE__*/React.createElement(GlobalStyles, null), content)));
85
112
  });
@@ -1,6 +1,3 @@
1
- @import 'antd/es/style/themes/default.less';
2
- @import '../../slots/_.less';
3
-
4
1
  :global(#root) {
5
2
  width: 100%;
6
3
  height: 100%;
@@ -78,5 +75,5 @@
78
75
  }
79
76
 
80
77
  .trigger:hover {
81
- color: @primary-color;
78
+ color: var(--primary-color);
82
79
  }
@@ -5,10 +5,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5
5
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
6
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
7
  import { VerticalAlignTopOutlined } from '@ant-design/icons';
8
- import { Layout as AntLayout, BackTop } from 'antd';
8
+ import { FloatButton, Layout as AntLayout } from 'antd';
9
9
  import React, { lazy, useContext, useEffect } from 'react';
10
10
  import { useNavigate } from 'react-router-dom';
11
- import InViewSuspense from "../../common/InViewSuspense";
12
11
  import CommonHelmet from "../../common/CommonHelmet";
13
12
  import { ThemeAntVContext } from "../../context";
14
13
  import useLocale from "../../hooks/useLocale";
@@ -56,9 +55,9 @@ var Examples = function Examples() {
56
55
  }), /*#__PURE__*/React.createElement(AntLayout, {
57
56
  hasSider: true,
58
57
  className: styles.layout
59
- }, /*#__PURE__*/React.createElement(InViewSuspense, null, /*#__PURE__*/React.createElement(ExampleTopicMenu, {
58
+ }, /*#__PURE__*/React.createElement(ExampleTopicMenu, {
60
59
  exampleTopics: exampleTopics
61
- })), /*#__PURE__*/React.createElement(Article, {
60
+ }), /*#__PURE__*/React.createElement(Article, {
62
61
  className: styles.markdown
63
62
  }, /*#__PURE__*/React.createElement("div", {
64
63
  className: styles.main,
@@ -67,7 +66,7 @@ var Examples = function Examples() {
67
66
  }
68
67
  }, /*#__PURE__*/React.createElement(GalleryPageContent, {
69
68
  exampleTopics: exampleTopics
70
- }), /*#__PURE__*/React.createElement(BackTop, {
69
+ }), /*#__PURE__*/React.createElement(FloatButton.BackTop, {
71
70
  style: {
72
71
  right: 24
73
72
  }
@@ -1,5 +1,3 @@
1
- @import 'antd/es/style/themes/default.less';
2
-
3
1
  // 参考 yuque 右侧 tabOfContent 宽度
4
2
  @toc-width: 260px;
5
3
 
@@ -11,7 +9,7 @@
11
9
  margin-bottom: 20px;
12
10
  font-weight: 500;
13
11
  font-size: 30px;
14
- font-family: Avenir, @font-family, sans-serif;
12
+ font-family: var(--font-family);
15
13
  line-height: 38px;
16
14
  }
17
15
 
@@ -32,7 +30,7 @@
32
30
  clear: both;
33
31
  margin: 1em 0 0.3em;
34
32
  font-weight: 500;
35
- font-family: Avenir, @font-family, sans-serif;
33
+ font-family: var(--font-family);
36
34
  }
37
35
 
38
36
  h3 {
@@ -40,7 +38,7 @@
40
38
  margin-bottom: 4px;
41
39
  font-weight: 600;
42
40
  line-height: 30px;
43
- border-bottom: 1px solid @border-color-split;
41
+ border-bottom: 1px solid var(--border-color-split);
44
42
  }
45
43
 
46
44
  h4 {
@@ -61,7 +59,7 @@
61
59
  clear: both;
62
60
  height: 1px;
63
61
  margin: 56px 0;
64
- background: @border-color-split;
62
+ background: var(--border-color-split);
65
63
  border: 0;
66
64
  }
67
65
 
@@ -145,7 +143,7 @@
145
143
  width: 100%;
146
144
  margin: 24px 0;
147
145
  empty-cells: show;
148
- border: 1px solid @border-color-split;
146
+ border: 1px solid var(--border-color-split);
149
147
  border-collapse: collapse;
150
148
  border-spacing: 0;
151
149
 
@@ -164,7 +162,7 @@
164
162
  table td {
165
163
  padding: 4px 12px;
166
164
  text-align: left;
167
- border: 1px solid @border-color-split;
165
+ border: 1px solid var(--border-color-split);
168
166
  line-height: 24px;
169
167
  }
170
168
 
@@ -182,9 +180,9 @@
182
180
  blockquote {
183
181
  margin: 0.5em 0;
184
182
  padding-left: 0.8em;
185
- color: @text-color-secondary;
183
+ color: var(--text-color-secondary);
186
184
  font-size: 90%;
187
- border-left: 4px solid @border-color-split;
185
+ border-left: 4px solid var(--border-color-split);
188
186
  }
189
187
 
190
188
  blockquote p {
@@ -266,7 +264,7 @@
266
264
  white-space: nowrap;
267
265
 
268
266
  a {
269
- color: @text-color;
267
+ color: var(--text-color);
270
268
  }
271
269
  }
272
270
  }
@@ -382,7 +380,7 @@
382
380
  }
383
381
 
384
382
  > div {
385
- border: 1px solid @border-color-split;
383
+ border: 1px solid var(--border-color-split);
386
384
  border-radius: 6px;
387
385
  overflow: hidden;
388
386
  height: calc(100vw / 9 - 20px);
@@ -1,4 +1,4 @@
1
- @import '../_.less';
1
+ @import '../../../../common/styles/variables.less';
2
2
 
3
3
  .wrapper {
4
4
  height: 667px;
@@ -56,7 +56,7 @@
56
56
  margin: 20px 0 0 0;
57
57
 
58
58
  .detail {
59
- color: @primary-color;
59
+ color: var(--primary-color);
60
60
  font-size: 1em;
61
61
  }
62
62
  }
@@ -1,4 +1,3 @@
1
- import { Col, Row } from 'antd';
2
1
  import cx from 'classnames';
3
2
  import React from 'react';
4
3
  import styles from "./index.module.less";
@@ -13,30 +12,19 @@ export var Companies = function Companies(_ref) {
13
12
  style: style
14
13
  }, /*#__PURE__*/React.createElement("div", {
15
14
  key: "content",
16
- className: styles.content
15
+ className: cx(styles.content, 'container1440')
17
16
  }, /*#__PURE__*/React.createElement("p", {
18
17
  key: "title",
19
18
  className: styles.title
20
19
  }, title), /*#__PURE__*/React.createElement("div", {
21
20
  key: "companies-container",
22
21
  className: styles.companiesContainer
23
- }, /*#__PURE__*/React.createElement(Row, {
24
- key: "companies",
25
- gutter: [{
26
- xs: 77,
27
- sm: 77,
28
- md: 50,
29
- lg: 124
30
- }, 10],
31
- wrap: true,
32
- className: styles.companies
22
+ }, /*#__PURE__*/React.createElement("div", {
23
+ className: styles.companiesGrid
33
24
  }, companies.map(function (company) {
34
- return /*#__PURE__*/React.createElement(Col, {
25
+ return /*#__PURE__*/React.createElement("div", {
35
26
  key: company.name,
36
- className: styles.company,
37
- md: 6,
38
- sm: 8,
39
- xs: 12
27
+ className: styles.company
40
28
  }, /*#__PURE__*/React.createElement("img", {
41
29
  className: styles.companyimg,
42
30
  src: company.img,
@@ -1,4 +1,4 @@
1
- @import '../_.less';
1
+ @import '../../../../common/styles/variables.less';
2
2
 
3
3
  .wrapper {
4
4
  display: flex;
@@ -31,15 +31,42 @@
31
31
  position: relative;
32
32
  margin: auto;
33
33
  margin-top: 48px;
34
+ }
34
35
 
35
- .company {
36
- margin-bottom: 20px;
36
+ .companiesGrid {
37
+ display: grid;
38
+ grid-template-columns: repeat(4, 1fr);
39
+ gap: 10px 124px;
40
+ width: 100%;
37
41
 
38
- .companyimg {
39
- width: 100%;
40
- }
42
+ @media only screen and (max-width: 992px) {
43
+ grid-template-columns: repeat(4, 1fr);
44
+ gap: 10px 50px;
45
+ }
46
+
47
+ @media only screen and (max-width: 768px) {
48
+ grid-template-columns: repeat(3, 1fr);
49
+ gap: 10px 77px;
50
+ }
51
+
52
+ @media only screen and (max-width: 576px) {
53
+ grid-template-columns: repeat(2, 1fr);
54
+ gap: 10px 77px;
41
55
  }
42
56
  }
57
+
58
+ .company {
59
+ display: flex;
60
+ justify-content: center;
61
+ align-items: center;
62
+ padding: 12px;
63
+ }
64
+
65
+ .companyimg {
66
+ width: 100%;
67
+ height: auto;
68
+ object-fit: contain;
69
+ }
43
70
  }
44
71
 
45
72
  @media (max-width: 768px) {
@@ -6,6 +6,7 @@
6
6
  box-shadow: 0 8px 28px 0 rgba(0, 0, 0, 0.05);
7
7
  border-radius: 16px;
8
8
  height: 100%;
9
+ font-size: 14px;
9
10
 
10
11
  &:last-child {
11
12
  margin-right: 0;
@@ -1,28 +1,4 @@
1
- @import '../_.less';
2
-
3
- @font-face {
4
- font-family: AlibabaPuHuiTiRHeavy;
5
- src: url(../../font/Alibaba-PuHuiTi-Heavy.otf);
6
- }
7
-
8
- .container1440() {
9
- width: 1440px;
10
- max-width: calc(100% - 80px);
11
- margin-left: auto;
12
- margin-right: auto;
13
-
14
- @media only screen and (max-width: 931.99px) {
15
- & {
16
- max-width: calc(100% - 60px);
17
- }
18
- }
19
-
20
- @media only screen and (max-width: 767.99px) {
21
- & {
22
- max-width: calc(100% - 32px);
23
- }
24
- }
25
- }
1
+ @import '../../../../common/styles/variables.less';
26
2
 
27
3
  .wrapper {
28
4
  min-height: 650px;
@@ -1,4 +1,3 @@
1
- import { Col, Row } from 'antd';
2
1
  import cx from 'classnames';
3
2
  import React from 'react';
4
3
  import { ic } from "../../../../slots/hooks";
@@ -11,17 +10,6 @@ export var Features = function Features(_ref) {
11
10
  className = _ref.className,
12
11
  style = _ref.style,
13
12
  id = _ref.id;
14
- var getCards = function getCards() {
15
- var children = features.map(function (card) {
16
- return /*#__PURE__*/React.createElement(Col, {
17
- className: styles.cardWrapper,
18
- key: ic(card.title),
19
- md: 8,
20
- xs: 24
21
- }, /*#__PURE__*/React.createElement(FeatureCard, card));
22
- });
23
- return children;
24
- };
25
13
  return /*#__PURE__*/React.createElement("div", {
26
14
  id: id,
27
15
  className: cx(styles.wrapper, className),
@@ -36,8 +24,12 @@ export var Features = function Features(_ref) {
36
24
  }, title ? ic(title) : ''), /*#__PURE__*/React.createElement("div", {
37
25
  key: "block",
38
26
  className: styles.cardsContainer
39
- }, /*#__PURE__*/React.createElement(Row, {
40
- key: "cards",
41
- className: styles.cards
42
- }, getCards())))));
27
+ }, /*#__PURE__*/React.createElement("div", {
28
+ className: styles.cardsGrid
29
+ }, features.map(function (card) {
30
+ return /*#__PURE__*/React.createElement("div", {
31
+ key: ic(card.title),
32
+ className: styles.cardWrapper
33
+ }, /*#__PURE__*/React.createElement(FeatureCard, card));
34
+ }))))));
43
35
  };
@@ -1,4 +1,4 @@
1
- @import '../_.less';
1
+ @import '../../../../common/styles/variables.less';
2
2
 
3
3
  .wrapper {
4
4
  display: flex;
@@ -34,32 +34,30 @@
34
34
  width: 100%;
35
35
  height: 65%;
36
36
  position: relative;
37
+ margin-top: 48px;
38
+ }
37
39
 
38
- .cards {
39
- display: flex;
40
- text-align: center;
41
- position: relative;
42
- width: -webkit-fill-available;
43
- flex-wrap: wrap;
44
- box-sizing: border-box;
45
- padding: 0 4.5%;
46
-
47
- .cardWrapper {
48
- margin: 48px 0 30px 0;
49
- background-color: #ffffff;
50
- border: 1px solid #e5e8ef;
51
- box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.03);
52
- border-radius: 16px;
53
- overflow: hidden;
54
- margin-right: 29px;
55
- flex: 1;
40
+ .cardsGrid {
41
+ display: grid;
42
+ grid-template-columns: repeat(3, 1fr);
43
+ gap: 24px;
44
+ width: 100%;
56
45
 
57
- &:last-child {
58
- margin-right: 0;
59
- }
60
- }
46
+ @media only screen and (max-width: 768px) {
47
+ grid-template-columns: 1fr;
61
48
  }
62
49
  }
50
+
51
+ .cardWrapper {
52
+ display: flex;
53
+ justify-content: center;
54
+ width: 100%;
55
+ background-color: #ffffff;
56
+ border: 1px solid #e5e8ef;
57
+ box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.03);
58
+ border-radius: 16px;
59
+ overflow: hidden;
60
+ }
63
61
  }
64
62
 
65
63
  @media (max-width: 900px) {
@@ -1,6 +1,6 @@
1
- @import '~antd/dist/antd.less';
2
-
3
- @primary-color: #873bf4;
1
+ :root {
2
+ --primary-color: #873bf4;
3
+ }
4
4
 
5
5
  .ant-btn,
6
6
  .ant-input,
@@ -184,12 +184,12 @@ async function runCheck(config) {
184
184
  };
185
185
  }
186
186
  function generateReport(result) {
187
- console.log();
188
187
  if (result.deadLinks.length === 0) {
189
188
  console.log(import_chalk.default.green(`✓ Check completed: All ${result.totalLinks} links are valid`));
190
189
  console.log();
191
190
  return;
192
191
  }
192
+ const reportFile = path.join(process.cwd(), "dead-links-report.log");
193
193
  const linksByFile = result.deadLinks.reduce((acc, link) => {
194
194
  if (!acc[link.sourceFile]) {
195
195
  acc[link.sourceFile] = [];
@@ -197,24 +197,44 @@ function generateReport(result) {
197
197
  acc[link.sourceFile].push(link);
198
198
  return acc;
199
199
  }, {});
200
- console.log(
201
- import_chalk.default.yellow(
202
- `📊 Found ${result.deadLinks.length}/${result.totalLinks} dead links in ${Object.keys(linksByFile).length} files`
203
- )
204
- );
200
+ const reportLines = [
201
+ `Dead Links Report (${(/* @__PURE__ */ new Date()).toISOString()})`,
202
+ `Found ${result.deadLinks.length}/${result.totalLinks} dead links in ${Object.keys(linksByFile).length} files`,
203
+ ""
204
+ ];
205
205
  Object.entries(linksByFile).forEach(([file, links]) => {
206
- console.log();
207
- console.log(import_chalk.default.yellow(`📄 ${file}:`));
206
+ reportLines.push(`File: ${file}`);
208
207
  links.forEach((link) => {
209
- console.log(import_chalk.default.red(` ✗ ${link.url}`));
210
- console.log(import_chalk.default.gray(` • Text: ${link.text}`));
211
- console.log(import_chalk.default.gray(` • Reason: ${link.reason}`));
208
+ reportLines.push(` ✗ ${link.url}`);
209
+ reportLines.push(` • Text: ${link.text}`);
210
+ reportLines.push(` • Reason: ${link.reason}`);
212
211
  });
212
+ reportLines.push("");
213
213
  });
214
- console.log();
215
- console.log(import_chalk.default.cyan(`💡 Tip: Please fix these links and run \`npx dumi check-links\` to verify`));
216
- console.log(import_chalk.default.cyan(`💡 Tip: Don't forget to run \`npm run build\` after fixing the links`));
217
- console.log();
214
+ try {
215
+ fs.writeFileSync(reportFile, reportLines.join("\n"), "utf-8");
216
+ const gitignorePath = path.join(process.cwd(), ".gitignore");
217
+ const gitignoreContent = fs.existsSync(gitignorePath) ? fs.readFileSync(gitignorePath, "utf-8") : "";
218
+ if (!gitignoreContent.includes("dead-links-report.log")) {
219
+ fs.appendFileSync(gitignorePath, "\n# Dead links report\ndead-links-report.log\n");
220
+ }
221
+ console.log();
222
+ console.log(import_chalk.default.yellow("📊 Dead Links Summary:"));
223
+ console.log(import_chalk.default.yellow(`Found ${result.deadLinks.length} dead links in ${Object.keys(linksByFile).length} files`));
224
+ console.log();
225
+ Object.entries(linksByFile).forEach(([file, links]) => {
226
+ console.log(
227
+ import_chalk.default.red(`✗ ${file}`),
228
+ import_chalk.default.gray(`(${links.length} dead ${links.length === 1 ? "link" : "links"})`)
229
+ );
230
+ });
231
+ console.log();
232
+ console.log(import_chalk.default.cyan(`💡 Detailed report: ${reportFile}`));
233
+ console.log();
234
+ } catch (error) {
235
+ console.error(import_chalk.default.red("Failed to write report file:"), error);
236
+ console.log(reportLines.join("\n"));
237
+ }
218
238
  }
219
239
  var deadLinkChecker_default = (api) => {
220
240
  const getConfig = () => {