wssf-kage-ui 0.1.0 → 0.1.1

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 (132) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/Anchor/index.d.ts +56 -0
  3. package/dist/cjs/Anchor/index.js +307 -0
  4. package/dist/cjs/Anchor/style.less +183 -0
  5. package/dist/cjs/AutoComplete/index.d.ts +54 -0
  6. package/dist/cjs/AutoComplete/index.js +273 -0
  7. package/dist/cjs/AutoComplete/style.less +325 -0
  8. package/dist/cjs/Breadcrumb/index.d.ts +51 -0
  9. package/dist/cjs/Breadcrumb/index.js +129 -0
  10. package/dist/cjs/Breadcrumb/style.less +96 -0
  11. package/dist/cjs/Cascader/index.d.ts +53 -0
  12. package/dist/cjs/Cascader/index.js +338 -0
  13. package/dist/cjs/Cascader/style.less +457 -0
  14. package/dist/cjs/Checkbox/index.d.ts +52 -0
  15. package/dist/cjs/Checkbox/index.js +158 -0
  16. package/dist/cjs/Checkbox/style.less +211 -0
  17. package/dist/cjs/ColorPicker/index.d.ts +28 -0
  18. package/dist/cjs/ColorPicker/index.js +381 -0
  19. package/dist/cjs/ColorPicker/style.less +276 -0
  20. package/dist/cjs/DatePicker/index.d.ts +32 -0
  21. package/dist/cjs/DatePicker/index.js +377 -0
  22. package/dist/cjs/DatePicker/style.less +498 -0
  23. package/dist/cjs/Divider/index.d.ts +24 -0
  24. package/dist/cjs/Divider/index.js +75 -0
  25. package/dist/cjs/Divider/style.less +144 -0
  26. package/dist/cjs/Dropdown/index.d.ts +88 -0
  27. package/dist/cjs/Dropdown/index.js +253 -0
  28. package/dist/cjs/Dropdown/style.less +430 -0
  29. package/dist/cjs/Flex/index.d.ts +37 -0
  30. package/dist/cjs/Flex/index.js +76 -0
  31. package/dist/cjs/Flex/style.less +13 -0
  32. package/dist/cjs/Form/index.d.ts +89 -0
  33. package/dist/cjs/Form/index.js +421 -0
  34. package/dist/cjs/Form/style.less +203 -0
  35. package/dist/cjs/Grid/index.d.ts +69 -0
  36. package/dist/cjs/Grid/index.js +171 -0
  37. package/dist/cjs/Grid/style.less +273 -0
  38. package/dist/cjs/Layout/index.d.ts +74 -0
  39. package/dist/cjs/Layout/index.js +166 -0
  40. package/dist/cjs/Layout/style.less +145 -0
  41. package/dist/cjs/Masonry/index.d.ts +18 -0
  42. package/dist/cjs/Masonry/index.js +146 -0
  43. package/dist/cjs/Masonry/style.less +15 -0
  44. package/dist/cjs/Menu/index.d.ts +87 -0
  45. package/dist/cjs/Menu/index.js +306 -0
  46. package/dist/cjs/Menu/style.less +363 -0
  47. package/dist/cjs/Pagination/index.d.ts +38 -0
  48. package/dist/cjs/Pagination/index.js +255 -0
  49. package/dist/cjs/Pagination/style.less +353 -0
  50. package/dist/cjs/Space/index.d.ts +41 -0
  51. package/dist/cjs/Space/index.js +137 -0
  52. package/dist/cjs/Space/style.less +116 -0
  53. package/dist/cjs/Splitter/index.d.ts +43 -0
  54. package/dist/cjs/Splitter/index.js +219 -0
  55. package/dist/cjs/Splitter/style.less +99 -0
  56. package/dist/cjs/Steps/index.d.ts +58 -0
  57. package/dist/cjs/Steps/index.js +180 -0
  58. package/dist/cjs/Steps/style.less +507 -0
  59. package/dist/cjs/Tabs/index.d.ts +58 -0
  60. package/dist/cjs/Tabs/index.js +196 -0
  61. package/dist/cjs/Tabs/style.less +423 -0
  62. package/dist/cjs/Typography/index.d.ts +102 -0
  63. package/dist/cjs/Typography/index.js +168 -0
  64. package/dist/cjs/Typography/style.less +246 -0
  65. package/dist/cjs/index.d.ts +42 -0
  66. package/dist/cjs/index.js +260 -1
  67. package/dist/esm/Anchor/index.d.ts +56 -0
  68. package/dist/esm/Anchor/index.js +302 -0
  69. package/dist/esm/Anchor/style.less +183 -0
  70. package/dist/esm/AutoComplete/index.d.ts +54 -0
  71. package/dist/esm/AutoComplete/index.js +268 -0
  72. package/dist/esm/AutoComplete/style.less +325 -0
  73. package/dist/esm/Breadcrumb/index.d.ts +51 -0
  74. package/dist/esm/Breadcrumb/index.js +124 -0
  75. package/dist/esm/Breadcrumb/style.less +96 -0
  76. package/dist/esm/Cascader/index.d.ts +53 -0
  77. package/dist/esm/Cascader/index.js +333 -0
  78. package/dist/esm/Cascader/style.less +457 -0
  79. package/dist/esm/Checkbox/index.d.ts +52 -0
  80. package/dist/esm/Checkbox/index.js +152 -0
  81. package/dist/esm/Checkbox/style.less +211 -0
  82. package/dist/esm/ColorPicker/index.d.ts +28 -0
  83. package/dist/esm/ColorPicker/index.js +375 -0
  84. package/dist/esm/ColorPicker/style.less +276 -0
  85. package/dist/esm/DatePicker/index.d.ts +32 -0
  86. package/dist/esm/DatePicker/index.js +371 -0
  87. package/dist/esm/DatePicker/style.less +498 -0
  88. package/dist/esm/Divider/index.d.ts +24 -0
  89. package/dist/esm/Divider/index.js +68 -0
  90. package/dist/esm/Divider/style.less +144 -0
  91. package/dist/esm/Dropdown/index.d.ts +88 -0
  92. package/dist/esm/Dropdown/index.js +249 -0
  93. package/dist/esm/Dropdown/style.less +430 -0
  94. package/dist/esm/Flex/index.d.ts +37 -0
  95. package/dist/esm/Flex/index.js +69 -0
  96. package/dist/esm/Flex/style.less +13 -0
  97. package/dist/esm/Form/index.d.ts +89 -0
  98. package/dist/esm/Form/index.js +416 -0
  99. package/dist/esm/Form/style.less +203 -0
  100. package/dist/esm/Grid/index.d.ts +69 -0
  101. package/dist/esm/Grid/index.js +165 -0
  102. package/dist/esm/Grid/style.less +273 -0
  103. package/dist/esm/Layout/index.d.ts +74 -0
  104. package/dist/esm/Layout/index.js +161 -0
  105. package/dist/esm/Layout/style.less +145 -0
  106. package/dist/esm/Masonry/index.d.ts +18 -0
  107. package/dist/esm/Masonry/index.js +138 -0
  108. package/dist/esm/Masonry/style.less +15 -0
  109. package/dist/esm/Menu/index.d.ts +87 -0
  110. package/dist/esm/Menu/index.js +301 -0
  111. package/dist/esm/Menu/style.less +363 -0
  112. package/dist/esm/Pagination/index.d.ts +38 -0
  113. package/dist/esm/Pagination/index.js +247 -0
  114. package/dist/esm/Pagination/style.less +353 -0
  115. package/dist/esm/Space/index.d.ts +41 -0
  116. package/dist/esm/Space/index.js +131 -0
  117. package/dist/esm/Space/style.less +116 -0
  118. package/dist/esm/Splitter/index.d.ts +43 -0
  119. package/dist/esm/Splitter/index.js +214 -0
  120. package/dist/esm/Splitter/style.less +99 -0
  121. package/dist/esm/Steps/index.d.ts +58 -0
  122. package/dist/esm/Steps/index.js +174 -0
  123. package/dist/esm/Steps/style.less +507 -0
  124. package/dist/esm/Tabs/index.d.ts +58 -0
  125. package/dist/esm/Tabs/index.js +193 -0
  126. package/dist/esm/Tabs/style.less +423 -0
  127. package/dist/esm/Typography/index.d.ts +102 -0
  128. package/dist/esm/Typography/index.js +161 -0
  129. package/dist/esm/Typography/style.less +246 -0
  130. package/dist/esm/index.d.ts +42 -0
  131. package/dist/esm/index.js +22 -1
  132. package/package.json +13 -10
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Sider = exports.Header = exports.Footer = exports.Content = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ require("./style.less");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
17
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
19
+ 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."); }
20
+ 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); }
21
+ 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; }
22
+ 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; } }
23
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // ============ Layout Context ============
24
+ var LayoutContext = /*#__PURE__*/(0, _react.createContext)({});
25
+
26
+ // ============ Layout 布局容器 ============
27
+
28
+ var InternalLayout = function InternalLayout(_ref) {
29
+ var hasSider = _ref.hasSider,
30
+ children = _ref.children,
31
+ _ref$className = _ref.className,
32
+ className = _ref$className === void 0 ? '' : _ref$className,
33
+ style = _ref.style;
34
+ // 自动检测是否有 Sider
35
+ var detectSider = _react.default.Children.toArray(children).some(function (child) {
36
+ var _child$type;
37
+ return /*#__PURE__*/_react.default.isValidElement(child) && ((_child$type = child.type) === null || _child$type === void 0 ? void 0 : _child$type.displayName) === 'Sider';
38
+ });
39
+ var classNames = ['kage-layout', (hasSider || detectSider) && 'kage-layout-has-sider', className].filter(Boolean).join(' ');
40
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("section", {
41
+ className: classNames,
42
+ style: style,
43
+ children: children
44
+ });
45
+ };
46
+
47
+ // ============ Header 顶部布局 ============
48
+
49
+ var Header = exports.Header = function Header(_ref2) {
50
+ var children = _ref2.children,
51
+ _ref2$className = _ref2.className,
52
+ className = _ref2$className === void 0 ? '' : _ref2$className,
53
+ style = _ref2.style;
54
+ var classNames = ['kage-layout-header', className].filter(Boolean).join(' ');
55
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("header", {
56
+ className: classNames,
57
+ style: style,
58
+ children: children
59
+ });
60
+ };
61
+ Header.displayName = 'Header';
62
+
63
+ // ============ Sider 侧边栏 ============
64
+
65
+ var Sider = exports.Sider = function Sider(_ref3) {
66
+ var _ref3$width = _ref3.width,
67
+ width = _ref3$width === void 0 ? 200 : _ref3$width,
68
+ _ref3$collapsedWidth = _ref3.collapsedWidth,
69
+ collapsedWidth = _ref3$collapsedWidth === void 0 ? 80 : _ref3$collapsedWidth,
70
+ _ref3$collapsible = _ref3.collapsible,
71
+ collapsible = _ref3$collapsible === void 0 ? false : _ref3$collapsible,
72
+ controlledCollapsed = _ref3.collapsed,
73
+ _ref3$defaultCollapse = _ref3.defaultCollapsed,
74
+ defaultCollapsed = _ref3$defaultCollapse === void 0 ? false : _ref3$defaultCollapse,
75
+ onCollapse = _ref3.onCollapse,
76
+ trigger = _ref3.trigger,
77
+ _ref3$theme = _ref3.theme,
78
+ theme = _ref3$theme === void 0 ? 'dark' : _ref3$theme,
79
+ children = _ref3.children,
80
+ _ref3$className = _ref3.className,
81
+ className = _ref3$className === void 0 ? '' : _ref3$className,
82
+ style = _ref3.style;
83
+ var _useState = (0, _react.useState)(defaultCollapsed),
84
+ _useState2 = _slicedToArray(_useState, 2),
85
+ internalCollapsed = _useState2[0],
86
+ setInternalCollapsed = _useState2[1];
87
+ var isCollapsed = controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;
88
+ var currentWidth = isCollapsed ? collapsedWidth : width;
89
+ var handleCollapse = function handleCollapse() {
90
+ var newCollapsed = !isCollapsed;
91
+ if (controlledCollapsed === undefined) {
92
+ setInternalCollapsed(newCollapsed);
93
+ }
94
+ onCollapse === null || onCollapse === void 0 || onCollapse(newCollapsed);
95
+ };
96
+ var classNames = ['kage-layout-sider', "kage-layout-sider-".concat(theme), isCollapsed && 'kage-layout-sider-collapsed', className].filter(Boolean).join(' ');
97
+ var siderStyle = _objectSpread({
98
+ flex: "0 0 ".concat(typeof currentWidth === 'number' ? "".concat(currentWidth, "px") : currentWidth),
99
+ maxWidth: typeof currentWidth === 'number' ? "".concat(currentWidth, "px") : currentWidth,
100
+ minWidth: typeof currentWidth === 'number' ? "".concat(currentWidth, "px") : currentWidth,
101
+ width: typeof currentWidth === 'number' ? "".concat(currentWidth, "px") : currentWidth
102
+ }, style);
103
+ var defaultTrigger = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
104
+ className: "kage-layout-sider-trigger",
105
+ onClick: handleCollapse,
106
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
107
+ className: "kage-layout-sider-trigger-icon",
108
+ children: isCollapsed ? '▶' : '◀'
109
+ })
110
+ });
111
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(LayoutContext.Provider, {
112
+ value: {
113
+ siderCollapsed: isCollapsed,
114
+ siderWidth: currentWidth
115
+ },
116
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("aside", {
117
+ className: classNames,
118
+ style: siderStyle,
119
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
120
+ className: "kage-layout-sider-children",
121
+ children: children
122
+ }), collapsible && (trigger !== null ? trigger || defaultTrigger : null)]
123
+ })
124
+ });
125
+ };
126
+ Sider.displayName = 'Sider';
127
+
128
+ // ============ Content 内容区 ============
129
+
130
+ var Content = exports.Content = function Content(_ref4) {
131
+ var children = _ref4.children,
132
+ _ref4$className = _ref4.className,
133
+ className = _ref4$className === void 0 ? '' : _ref4$className,
134
+ style = _ref4.style;
135
+ var classNames = ['kage-layout-content', className].filter(Boolean).join(' ');
136
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("main", {
137
+ className: classNames,
138
+ style: style,
139
+ children: children
140
+ });
141
+ };
142
+ Content.displayName = 'Content';
143
+
144
+ // ============ Footer 底部布局 ============
145
+
146
+ var Footer = exports.Footer = function Footer(_ref5) {
147
+ var children = _ref5.children,
148
+ _ref5$className = _ref5.className,
149
+ className = _ref5$className === void 0 ? '' : _ref5$className,
150
+ style = _ref5.style;
151
+ var classNames = ['kage-layout-footer', className].filter(Boolean).join(' ');
152
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("footer", {
153
+ className: classNames,
154
+ style: style,
155
+ children: children
156
+ });
157
+ };
158
+ Footer.displayName = 'Footer';
159
+
160
+ // ============ 导出 ============
161
+ var Layout = InternalLayout;
162
+ Layout.Header = Header;
163
+ Layout.Sider = Sider;
164
+ Layout.Content = Content;
165
+ Layout.Footer = Footer;
166
+ var _default = exports.default = Layout;
@@ -0,0 +1,145 @@
1
+ // Layout 布局组件样式
2
+
3
+ @prefix: kage-layout;
4
+
5
+ // 颜色变量
6
+ @layout-body-bg: #f5f5f5;
7
+ @layout-header-bg: #001529;
8
+ @layout-header-color: #fff;
9
+ @layout-header-height: 64px;
10
+ @layout-header-padding: 0 50px;
11
+ @layout-footer-bg: #f5f5f5;
12
+ @layout-footer-padding: 24px 50px;
13
+ @layout-sider-bg-dark: #001529;
14
+ @layout-sider-bg-light: #fff;
15
+ @layout-trigger-height: 48px;
16
+ @layout-trigger-bg: #002140;
17
+ @layout-trigger-color: #fff;
18
+
19
+ // ============ Layout 容器 ============
20
+ .@{prefix} {
21
+ display: flex;
22
+ flex: auto;
23
+ flex-direction: column;
24
+ min-height: 0;
25
+ background: @layout-body-bg;
26
+ box-sizing: border-box;
27
+
28
+ &,
29
+ * {
30
+ box-sizing: border-box;
31
+ }
32
+
33
+ // 包含侧边栏时水平布局
34
+ &-has-sider {
35
+ flex-direction: row;
36
+
37
+ > .@{prefix},
38
+ > .@{prefix}-content {
39
+ width: 0;
40
+ }
41
+ }
42
+ }
43
+
44
+ // 嵌套 Layout
45
+ .@{prefix} .@{prefix} {
46
+ background: transparent;
47
+ }
48
+
49
+ // ============ Header 头部 ============
50
+ .@{prefix}-header {
51
+ flex: 0 0 auto;
52
+ height: @layout-header-height;
53
+ padding: @layout-header-padding;
54
+ color: @layout-header-color;
55
+ line-height: @layout-header-height;
56
+ background: @layout-header-bg;
57
+ display: flex;
58
+ align-items: center;
59
+ }
60
+
61
+ // ============ Sider 侧边栏 ============
62
+ .@{prefix}-sider {
63
+ position: relative;
64
+ min-width: 0;
65
+ background: @layout-sider-bg-dark;
66
+ transition: all 0.2s ease;
67
+
68
+ &-dark {
69
+ background: @layout-sider-bg-dark;
70
+ color: rgba(255, 255, 255, 0.65);
71
+ }
72
+
73
+ &-light {
74
+ background: @layout-sider-bg-light;
75
+ color: rgba(0, 0, 0, 0.88);
76
+ border-inline-end: 1px solid rgba(5, 5, 5, 0.06);
77
+ }
78
+
79
+ &-children {
80
+ height: 100%;
81
+ padding-top: 0.1px;
82
+ margin-top: -0.1px;
83
+ overflow: auto;
84
+ }
85
+
86
+ &-collapsed {
87
+ .@{prefix}-sider-children {
88
+ overflow: visible;
89
+ }
90
+ }
91
+
92
+ // 触发器
93
+ &-trigger {
94
+ position: fixed;
95
+ bottom: 0;
96
+ z-index: 1;
97
+ height: @layout-trigger-height;
98
+ color: @layout-trigger-color;
99
+ line-height: @layout-trigger-height;
100
+ text-align: center;
101
+ background: @layout-trigger-bg;
102
+ cursor: pointer;
103
+ transition: all 0.2s;
104
+
105
+ &:hover {
106
+ background: lighten(@layout-trigger-bg, 5%);
107
+ }
108
+
109
+ &-icon {
110
+ font-size: 12px;
111
+ }
112
+ }
113
+
114
+ &-dark &-trigger {
115
+ width: inherit;
116
+ }
117
+
118
+ &-light &-trigger {
119
+ width: inherit;
120
+ color: rgba(0, 0, 0, 0.88);
121
+ background: #fff;
122
+ border-top: 1px solid rgba(5, 5, 5, 0.06);
123
+ border-inline-end: 1px solid rgba(5, 5, 5, 0.06);
124
+
125
+ &:hover {
126
+ background: rgba(0, 0, 0, 0.04);
127
+ }
128
+ }
129
+ }
130
+
131
+ // ============ Content 内容区 ============
132
+ .@{prefix}-content {
133
+ flex: auto;
134
+ min-height: 0;
135
+ }
136
+
137
+ // ============ Footer 底部 ============
138
+ .@{prefix}-footer {
139
+ flex: 0 0 auto;
140
+ padding: @layout-footer-padding;
141
+ color: rgba(0, 0, 0, 0.88);
142
+ font-size: 14px;
143
+ background: @layout-footer-bg;
144
+ }
145
+
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import './style.less';
3
+ export interface MasonryProps {
4
+ /** 列数 */
5
+ columns?: number;
6
+ /** 列间距 */
7
+ gutter?: number | [number, number];
8
+ /** 是否顺序排列(从左到右,而不是按最短列) */
9
+ sequential?: boolean;
10
+ /** 子元素 */
11
+ children?: React.ReactNode;
12
+ /** 自定义类名 */
13
+ className?: string;
14
+ /** 自定义样式 */
15
+ style?: React.CSSProperties;
16
+ }
17
+ export declare const Masonry: React.FC<MasonryProps>;
18
+ export default Masonry;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Masonry = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ require("./style.less");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
17
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
19
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
20
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
21
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
22
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
23
+ 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."); }
24
+ 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); }
25
+ 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; }
26
+ 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; } }
27
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
28
+ var Masonry = exports.Masonry = function Masonry(_ref) {
29
+ var _ref$columns = _ref.columns,
30
+ columns = _ref$columns === void 0 ? 2 : _ref$columns,
31
+ _ref$gutter = _ref.gutter,
32
+ gutter = _ref$gutter === void 0 ? 16 : _ref$gutter,
33
+ _ref$sequential = _ref.sequential,
34
+ sequential = _ref$sequential === void 0 ? false : _ref$sequential,
35
+ children = _ref.children,
36
+ _ref$className = _ref.className,
37
+ className = _ref$className === void 0 ? '' : _ref$className,
38
+ style = _ref.style;
39
+ var containerRef = (0, _react.useRef)(null);
40
+ var _useState = (0, _react.useState)([]),
41
+ _useState2 = _slicedToArray(_useState, 2),
42
+ columnHeights = _useState2[0],
43
+ setColumnHeights = _useState2[1];
44
+ var _useState3 = (0, _react.useState)([]),
45
+ _useState4 = _slicedToArray(_useState3, 2),
46
+ positions = _useState4[0],
47
+ setPositions = _useState4[1];
48
+ var _useState5 = (0, _react.useState)(0),
49
+ _useState6 = _slicedToArray(_useState5, 2),
50
+ containerHeight = _useState6[0],
51
+ setContainerHeight = _useState6[1];
52
+ var itemRefs = (0, _react.useRef)([]);
53
+
54
+ // 解析 gutter
55
+ var _ref2 = Array.isArray(gutter) ? gutter : [gutter, gutter],
56
+ _ref3 = _slicedToArray(_ref2, 2),
57
+ gutterX = _ref3[0],
58
+ gutterY = _ref3[1];
59
+
60
+ // 计算布局
61
+ var calculateLayout = (0, _react.useCallback)(function () {
62
+ if (!containerRef.current) return;
63
+ var containerWidth = containerRef.current.offsetWidth;
64
+ var columnWidth = (containerWidth - gutterX * (columns - 1)) / columns;
65
+ var heights = new Array(columns).fill(0);
66
+ var newPositions = [];
67
+ var childArray = _react.default.Children.toArray(children);
68
+ childArray.forEach(function (_, index) {
69
+ var itemEl = itemRefs.current[index];
70
+ if (!itemEl) return;
71
+ var columnIndex;
72
+ if (sequential) {
73
+ // 顺序排列
74
+ columnIndex = index % columns;
75
+ } else {
76
+ // 按最短列排列
77
+ columnIndex = heights.indexOf(Math.min.apply(Math, _toConsumableArray(heights)));
78
+ }
79
+ var left = columnIndex * (columnWidth + gutterX);
80
+ var top = heights[columnIndex];
81
+ newPositions[index] = {
82
+ left: left,
83
+ top: top
84
+ };
85
+
86
+ // 更新列高度
87
+ heights[columnIndex] += itemEl.offsetHeight + gutterY;
88
+ });
89
+ setColumnHeights(heights);
90
+ setPositions(newPositions);
91
+ setContainerHeight(Math.max.apply(Math, _toConsumableArray(heights)) - gutterY);
92
+ }, [children, columns, gutterX, gutterY, sequential]);
93
+
94
+ // 监听尺寸变化
95
+ (0, _react.useEffect)(function () {
96
+ calculateLayout();
97
+ var resizeObserver = new ResizeObserver(function () {
98
+ calculateLayout();
99
+ });
100
+ if (containerRef.current) {
101
+ resizeObserver.observe(containerRef.current);
102
+ }
103
+ return function () {
104
+ resizeObserver.disconnect();
105
+ };
106
+ }, [calculateLayout]);
107
+
108
+ // 子元素变化时重新计算
109
+ (0, _react.useEffect)(function () {
110
+ // 使用 setTimeout 确保 DOM 已更新
111
+ var timer = setTimeout(function () {
112
+ calculateLayout();
113
+ }, 0);
114
+ return function () {
115
+ return clearTimeout(timer);
116
+ };
117
+ }, [children, calculateLayout]);
118
+ var childArray = _react.default.Children.toArray(children);
119
+ var columnWidth = containerRef.current ? (containerRef.current.offsetWidth - gutterX * (columns - 1)) / columns : 0;
120
+ var classNames = ['kage-masonry', className].filter(Boolean).join(' ');
121
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
122
+ ref: containerRef,
123
+ className: classNames,
124
+ style: _objectSpread(_objectSpread({}, style), {}, {
125
+ height: containerHeight || 'auto'
126
+ }),
127
+ children: childArray.map(function (child, index) {
128
+ var _positions$index$left, _positions$index, _positions$index$top, _positions$index2;
129
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
130
+ ref: function ref(el) {
131
+ return itemRefs.current[index] = el;
132
+ },
133
+ className: "kage-masonry-item",
134
+ style: {
135
+ width: columnWidth || "calc((100% - ".concat(gutterX * (columns - 1), "px) / ").concat(columns, ")"),
136
+ position: positions[index] ? 'absolute' : 'relative',
137
+ left: (_positions$index$left = (_positions$index = positions[index]) === null || _positions$index === void 0 ? void 0 : _positions$index.left) !== null && _positions$index$left !== void 0 ? _positions$index$left : 0,
138
+ top: (_positions$index$top = (_positions$index2 = positions[index]) === null || _positions$index2 === void 0 ? void 0 : _positions$index2.top) !== null && _positions$index$top !== void 0 ? _positions$index$top : 0,
139
+ opacity: positions[index] ? 1 : 0
140
+ },
141
+ children: child
142
+ }, index);
143
+ })
144
+ });
145
+ };
146
+ var _default = exports.default = Masonry;
@@ -0,0 +1,15 @@
1
+ // Masonry 瀑布流组件样式
2
+
3
+ @prefix: kage-masonry;
4
+
5
+ .@{prefix} {
6
+ position: relative;
7
+ width: 100%;
8
+ box-sizing: border-box;
9
+
10
+ &-item {
11
+ box-sizing: border-box;
12
+ transition: left 0.3s ease, top 0.3s ease, opacity 0.3s ease;
13
+ }
14
+ }
15
+
@@ -0,0 +1,87 @@
1
+ import React from 'react';
2
+ import './style.less';
3
+ export interface MenuItemType {
4
+ /** 唯一标识 */
5
+ key: string;
6
+ /** 显示内容 */
7
+ label: React.ReactNode;
8
+ /** 图标 */
9
+ icon?: React.ReactNode;
10
+ /** 是否禁用 */
11
+ disabled?: boolean;
12
+ /** 是否危险操作 */
13
+ danger?: boolean;
14
+ /** 子菜单 */
15
+ children?: MenuItemType[];
16
+ /** 类型 */
17
+ type?: 'group' | 'divider';
18
+ /** 点击回调 */
19
+ onClick?: (e: React.MouseEvent) => void;
20
+ }
21
+ export interface MenuProps {
22
+ /** 菜单项 */
23
+ items?: MenuItemType[];
24
+ /** 菜单模式 */
25
+ mode?: 'vertical' | 'horizontal' | 'inline';
26
+ /** 选中的菜单项 key */
27
+ selectedKeys?: string[];
28
+ /** 默认选中的菜单项 key */
29
+ defaultSelectedKeys?: string[];
30
+ /** 展开的子菜单 key */
31
+ openKeys?: string[];
32
+ /** 默认展开的子菜单 key */
33
+ defaultOpenKeys?: string[];
34
+ /** inline 模式下是否收起菜单 */
35
+ inlineCollapsed?: boolean;
36
+ /** 选中菜单项回调 */
37
+ onSelect?: (info: {
38
+ key: string;
39
+ selectedKeys: string[];
40
+ }) => void;
41
+ /** 展开/收起子菜单回调 */
42
+ onOpenChange?: (openKeys: string[]) => void;
43
+ /** 点击菜单项回调 */
44
+ onClick?: (info: {
45
+ key: string;
46
+ domEvent: React.MouseEvent;
47
+ }) => void;
48
+ /** 主题 */
49
+ theme?: 'light' | 'dark';
50
+ /** 自定义类名 */
51
+ className?: string;
52
+ /** 自定义样式 */
53
+ style?: React.CSSProperties;
54
+ /** 子元素 */
55
+ children?: React.ReactNode;
56
+ }
57
+ export declare const Menu: React.FC<MenuProps> & {
58
+ Item: typeof MenuItemComponent;
59
+ SubMenu: typeof SubMenuComponent;
60
+ ItemGroup: typeof ItemGroupComponent;
61
+ Divider: typeof DividerComponent;
62
+ };
63
+ export interface MenuItemComponentProps {
64
+ key?: string;
65
+ icon?: React.ReactNode;
66
+ disabled?: boolean;
67
+ danger?: boolean;
68
+ onClick?: (e: React.MouseEvent) => void;
69
+ children?: React.ReactNode;
70
+ className?: string;
71
+ }
72
+ declare const MenuItemComponent: React.FC<MenuItemComponentProps>;
73
+ export interface SubMenuComponentProps {
74
+ key?: string;
75
+ title: React.ReactNode;
76
+ icon?: React.ReactNode;
77
+ disabled?: boolean;
78
+ children?: React.ReactNode;
79
+ }
80
+ declare const SubMenuComponent: React.FC<SubMenuComponentProps>;
81
+ export interface ItemGroupComponentProps {
82
+ title: React.ReactNode;
83
+ children?: React.ReactNode;
84
+ }
85
+ declare const ItemGroupComponent: React.FC<ItemGroupComponentProps>;
86
+ declare const DividerComponent: React.FC;
87
+ export default Menu;