@hanwenbo/x-web-pro-components 0.0.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.
- package/LICENSE +21 -0
- package/es/blocks/index.d.ts +1 -0
- package/es/blocks/index.js +2 -0
- package/es/blocks/shared.d.ts +24 -0
- package/es/blocks/shared.js +77 -0
- package/es/components/card/index.d.ts +82 -0
- package/es/components/card/index.js +361 -0
- package/es/components/descriptions/index.d.ts +31 -0
- package/es/components/descriptions/index.js +434 -0
- package/es/components/field/index.d.ts +75 -0
- package/es/components/field/index.js +761 -0
- package/es/components/form/captcha.d.ts +19 -0
- package/es/components/form/captcha.js +165 -0
- package/es/components/form/colorPicker.d.ts +7 -0
- package/es/components/form/colorPicker.js +73 -0
- package/es/components/form/fieldControls.d.ts +43 -0
- package/es/components/form/fieldControls.js +282 -0
- package/es/components/form/index.d.ts +285 -0
- package/es/components/form/index.js +2268 -0
- package/es/components/form/loginForm.d.ts +22 -0
- package/es/components/form/loginForm.js +159 -0
- package/es/components/form/schemaForm.d.ts +30 -0
- package/es/components/form/schemaForm.js +644 -0
- package/es/components/form/stepsForm.d.ts +26 -0
- package/es/components/form/stepsForm.js +183 -0
- package/es/components/form/uploadButton.d.ts +20 -0
- package/es/components/form/uploadButton.js +134 -0
- package/es/components/form/uploadDragger.d.ts +13 -0
- package/es/components/form/uploadDragger.js +144 -0
- package/es/components/index.d.ts +9 -0
- package/es/components/index.js +9 -0
- package/es/components/layout/components/Help/index.d.ts +72 -0
- package/es/components/layout/components/Help/index.js +350 -0
- package/es/components/layout/index.d.ts +182 -0
- package/es/components/layout/index.js +892 -0
- package/es/components/list/index.d.ts +80 -0
- package/es/components/list/index.js +431 -0
- package/es/components/provider/context.d.ts +7 -0
- package/es/components/provider/context.js +21 -0
- package/es/components/provider/index.d.ts +28 -0
- package/es/components/provider/index.js +117 -0
- package/es/components/provider/intl.d.ts +38 -0
- package/es/components/provider/intl.js +112 -0
- package/es/components/provider/types.d.ts +37 -0
- package/es/components/provider/types.js +1 -0
- package/es/components/provider/useStyle/index.d.ts +28 -0
- package/es/components/provider/useStyle/index.js +208 -0
- package/es/components/skeleton/index.d.ts +61 -0
- package/es/components/skeleton/index.js +388 -0
- package/es/components/table/dragSortTable.d.ts +8 -0
- package/es/components/table/dragSortTable.js +229 -0
- package/es/components/table/editableTable.d.ts +31 -0
- package/es/components/table/editableTable.js +507 -0
- package/es/components/table/index.d.ts +52 -0
- package/es/components/table/index.js +1554 -0
- package/es/components/table/listToolBar.d.ts +48 -0
- package/es/components/table/listToolBar.js +194 -0
- package/es/components/table/search.d.ts +5 -0
- package/es/components/table/search.js +13 -0
- package/es/index.d.ts +4 -0
- package/es/index.js +4 -0
- package/es/types.d.ts +219 -0
- package/es/types.js +1 -0
- package/es/utils/attachPropertiesToComponent.d.ts +1 -0
- package/es/utils/attachPropertiesToComponent.js +6 -0
- package/es/utils/getRequestParams.d.ts +19 -0
- package/es/utils/getRequestParams.js +57 -0
- package/es/utils/getTableListColumns.d.ts +20 -0
- package/es/utils/getTableListColumns.js +36 -0
- package/es/utils/index.d.ts +4 -0
- package/es/utils/index.js +4 -0
- package/es/utils/loading.d.ts +3 -0
- package/es/utils/loading.js +25 -0
- package/es/version.d.ts +2 -0
- package/es/version.js +2 -0
- package/lib/blocks/index.d.ts +1 -0
- package/lib/blocks/index.js +5 -0
- package/lib/blocks/shared.d.ts +24 -0
- package/lib/blocks/shared.js +83 -0
- package/lib/components/card/index.d.ts +82 -0
- package/lib/components/card/index.js +368 -0
- package/lib/components/descriptions/index.d.ts +31 -0
- package/lib/components/descriptions/index.js +440 -0
- package/lib/components/field/index.d.ts +75 -0
- package/lib/components/field/index.js +767 -0
- package/lib/components/form/captcha.d.ts +19 -0
- package/lib/components/form/captcha.js +172 -0
- package/lib/components/form/colorPicker.d.ts +7 -0
- package/lib/components/form/colorPicker.js +79 -0
- package/lib/components/form/fieldControls.d.ts +43 -0
- package/lib/components/form/fieldControls.js +288 -0
- package/lib/components/form/index.d.ts +285 -0
- package/lib/components/form/index.js +2332 -0
- package/lib/components/form/loginForm.d.ts +22 -0
- package/lib/components/form/loginForm.js +165 -0
- package/lib/components/form/schemaForm.d.ts +30 -0
- package/lib/components/form/schemaForm.js +651 -0
- package/lib/components/form/stepsForm.d.ts +26 -0
- package/lib/components/form/stepsForm.js +189 -0
- package/lib/components/form/uploadButton.d.ts +20 -0
- package/lib/components/form/uploadButton.js +141 -0
- package/lib/components/form/uploadDragger.d.ts +13 -0
- package/lib/components/form/uploadDragger.js +151 -0
- package/lib/components/index.d.ts +9 -0
- package/lib/components/index.js +104 -0
- package/lib/components/layout/components/Help/index.d.ts +72 -0
- package/lib/components/layout/components/Help/index.js +356 -0
- package/lib/components/layout/index.d.ts +182 -0
- package/lib/components/layout/index.js +930 -0
- package/lib/components/list/index.d.ts +80 -0
- package/lib/components/list/index.js +438 -0
- package/lib/components/provider/context.d.ts +7 -0
- package/lib/components/provider/context.js +27 -0
- package/lib/components/provider/index.d.ts +28 -0
- package/lib/components/provider/index.js +174 -0
- package/lib/components/provider/intl.d.ts +38 -0
- package/lib/components/provider/intl.js +118 -0
- package/lib/components/provider/types.d.ts +37 -0
- package/lib/components/provider/types.js +5 -0
- package/lib/components/provider/useStyle/index.d.ts +28 -0
- package/lib/components/provider/useStyle/index.js +217 -0
- package/lib/components/skeleton/index.d.ts +61 -0
- package/lib/components/skeleton/index.js +394 -0
- package/lib/components/table/dragSortTable.d.ts +8 -0
- package/lib/components/table/dragSortTable.js +236 -0
- package/lib/components/table/editableTable.d.ts +31 -0
- package/lib/components/table/editableTable.js +514 -0
- package/lib/components/table/index.d.ts +52 -0
- package/lib/components/table/index.js +1699 -0
- package/lib/components/table/listToolBar.d.ts +48 -0
- package/lib/components/table/listToolBar.js +200 -0
- package/lib/components/table/search.d.ts +5 -0
- package/lib/components/table/search.js +20 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +49 -0
- package/lib/types.d.ts +219 -0
- package/lib/types.js +5 -0
- package/lib/utils/attachPropertiesToComponent.d.ts +1 -0
- package/lib/utils/attachPropertiesToComponent.js +12 -0
- package/lib/utils/getRequestParams.d.ts +19 -0
- package/lib/utils/getRequestParams.js +63 -0
- package/lib/utils/getTableListColumns.d.ts +20 -0
- package/lib/utils/getTableListColumns.js +42 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/index.js +49 -0
- package/lib/utils/loading.d.ts +3 -0
- package/lib/utils/loading.js +31 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.js +8 -0
- package/package.json +68 -0
|
@@ -0,0 +1,892 @@
|
|
|
1
|
+
var _excluded = ["className", "children"],
|
|
2
|
+
_excluded2 = ["title", "logo", "content", "actions", "breadcrumb", "collapsed", "collapsedButtonRender", "contentStyle", "currentMenu", "contentWidth", "fixedHeader", "fixSiderbar", "layout", "location", "menuData", "menuDataRender", "menuFooterRender", "menuItemRender", "menuRender", "navTheme", "onMenuHeaderClick", "siderWidth", "splitMenus", "headerRender", "token", "className", "children"];
|
|
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
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
5
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
6
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
7
|
+
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."); }
|
|
8
|
+
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; } }
|
|
9
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
10
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
11
|
+
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."); }
|
|
12
|
+
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); }
|
|
13
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
14
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
15
|
+
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; }
|
|
16
|
+
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; }
|
|
17
|
+
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; }
|
|
18
|
+
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; }
|
|
19
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
20
|
+
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); }
|
|
21
|
+
import React, { createContext, useContext, useMemo, useState } from 'react';
|
|
22
|
+
import { ChevronRight, Loader2, Settings2 } from 'lucide-react';
|
|
23
|
+
import { Button } from '@hanwenbo/x-web-ui/button';
|
|
24
|
+
import { Card } from '@hanwenbo/x-web-ui/card';
|
|
25
|
+
import { cn } from '@hanwenbo/x-web-ui/utils/cn';
|
|
26
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
27
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
28
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
29
|
+
export * from "./components/Help";
|
|
30
|
+
export var RouteContext = /*#__PURE__*/createContext({});
|
|
31
|
+
var defaultLayoutSettings = {
|
|
32
|
+
layout: 'side',
|
|
33
|
+
navTheme: 'light',
|
|
34
|
+
contentWidth: 'Fluid',
|
|
35
|
+
fixedHeader: true,
|
|
36
|
+
fixSiderbar: false,
|
|
37
|
+
colorWeak: false,
|
|
38
|
+
splitMenus: false
|
|
39
|
+
};
|
|
40
|
+
var LAYOUT_SECTION_SPACE = 'var(--x-space-4)';
|
|
41
|
+
var getPrimaryForeground = function getPrimaryForeground(color) {
|
|
42
|
+
if (!color || !/^#?[0-9a-f]{3,8}$/i.test(color)) {
|
|
43
|
+
return '255 255 255';
|
|
44
|
+
}
|
|
45
|
+
var raw = color.replace('#', '');
|
|
46
|
+
var normalized = raw.length === 3 ? raw.split('').map(function (char) {
|
|
47
|
+
return char + char;
|
|
48
|
+
}).join('') : raw.length >= 6 ? raw.slice(0, 6) : '';
|
|
49
|
+
if (!normalized) {
|
|
50
|
+
return '255 255 255';
|
|
51
|
+
}
|
|
52
|
+
var r = parseInt(normalized.slice(0, 2), 16);
|
|
53
|
+
var g = parseInt(normalized.slice(2, 4), 16);
|
|
54
|
+
var b = parseInt(normalized.slice(4, 6), 16);
|
|
55
|
+
var luminance = (r * 299 + g * 587 + b * 114) / 1000;
|
|
56
|
+
return luminance > 160 ? '17 24 39' : '255 255 255';
|
|
57
|
+
};
|
|
58
|
+
var getLayoutThemeStyle = function getLayoutThemeStyle(settings) {
|
|
59
|
+
if (!(settings !== null && settings !== void 0 && settings.colorPrimary)) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
'--primary': settings.colorPrimary,
|
|
64
|
+
'--ring': settings.colorPrimary,
|
|
65
|
+
'--primary-foreground': "rgb(".concat(getPrimaryForeground(settings.colorPrimary), ")")
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
export var LayoutSettingsContext = /*#__PURE__*/createContext(undefined);
|
|
69
|
+
var matchPathPattern = function matchPathPattern(pattern, pathname) {
|
|
70
|
+
if (!pattern || pattern.startsWith('http')) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
var normalizedPattern = pattern.replace(/\/+$/, '') || '/';
|
|
74
|
+
var normalizedPath = pathname.replace(/\/+$/, '') || '/';
|
|
75
|
+
if (normalizedPattern === normalizedPath) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
var escapedPattern = normalizedPattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
79
|
+
var matcher = new RegExp("^".concat(escapedPattern.replace(/:([^/]+)/g, '[^/]+'), "$"));
|
|
80
|
+
return matcher.test(normalizedPath);
|
|
81
|
+
};
|
|
82
|
+
var createBreadcrumbMap = function createBreadcrumbMap(items) {
|
|
83
|
+
var accumulator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
84
|
+
items.forEach(function (item) {
|
|
85
|
+
var _item$children;
|
|
86
|
+
if (item.path) {
|
|
87
|
+
accumulator[item.path] = item;
|
|
88
|
+
}
|
|
89
|
+
if ((_item$children = item.children) !== null && _item$children !== void 0 && _item$children.length) {
|
|
90
|
+
createBreadcrumbMap(item.children, accumulator);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return accumulator;
|
|
94
|
+
};
|
|
95
|
+
export var getMenuData = function getMenuData() {
|
|
96
|
+
var routes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
97
|
+
var menuDataRender = arguments.length > 1 ? arguments[1] : undefined;
|
|
98
|
+
var normalizedRoutes = routes.filter(function (item) {
|
|
99
|
+
return !item.hideInMenu;
|
|
100
|
+
}).map(function (item) {
|
|
101
|
+
var _ref, _item$key, _item$name, _item$children2;
|
|
102
|
+
return _objectSpread(_objectSpread({}, item), {}, {
|
|
103
|
+
key: (_ref = (_item$key = item.key) !== null && _item$key !== void 0 ? _item$key : item.path) !== null && _ref !== void 0 ? _ref : String((_item$name = item.name) !== null && _item$name !== void 0 ? _item$name : ''),
|
|
104
|
+
children: (_item$children2 = item.children) !== null && _item$children2 !== void 0 && _item$children2.length ? getMenuData(item.children).menuData : undefined
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
var menuData = menuDataRender ? menuDataRender(normalizedRoutes) : normalizedRoutes;
|
|
108
|
+
return {
|
|
109
|
+
menuData: menuData,
|
|
110
|
+
breadcrumb: createBreadcrumbMap(menuData)
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
export var getPageTitle = function getPageTitle(_ref2, ignoreTitle) {
|
|
114
|
+
var title = _ref2.title,
|
|
115
|
+
pageName = _ref2.pageName,
|
|
116
|
+
appList = _ref2.appList,
|
|
117
|
+
breadcrumb = _ref2.breadcrumb,
|
|
118
|
+
breadcrumbMap = _ref2.breadcrumbMap,
|
|
119
|
+
formatMessage = _ref2.formatMessage,
|
|
120
|
+
_ref2$menu = _ref2.menu,
|
|
121
|
+
menu = _ref2$menu === void 0 ? {
|
|
122
|
+
locale: false
|
|
123
|
+
} : _ref2$menu,
|
|
124
|
+
pathname = _ref2.pathname;
|
|
125
|
+
return getPageTitleInfo({
|
|
126
|
+
appList: appList,
|
|
127
|
+
breadcrumb: breadcrumb,
|
|
128
|
+
breadcrumbMap: breadcrumbMap,
|
|
129
|
+
formatMessage: formatMessage,
|
|
130
|
+
menu: menu,
|
|
131
|
+
pageName: pageName,
|
|
132
|
+
pathname: pathname,
|
|
133
|
+
title: title
|
|
134
|
+
}, ignoreTitle).title;
|
|
135
|
+
};
|
|
136
|
+
export var getPageTitleInfo = function getPageTitleInfo(_ref3, ignoreTitle) {
|
|
137
|
+
var _find, _Object$entries$find, _appList$;
|
|
138
|
+
var title = _ref3.title,
|
|
139
|
+
pageName = _ref3.pageName,
|
|
140
|
+
appList = _ref3.appList,
|
|
141
|
+
breadcrumb = _ref3.breadcrumb,
|
|
142
|
+
breadcrumbMap = _ref3.breadcrumbMap,
|
|
143
|
+
formatMessage = _ref3.formatMessage,
|
|
144
|
+
_ref3$menu = _ref3.menu,
|
|
145
|
+
menu = _ref3$menu === void 0 ? {
|
|
146
|
+
locale: false
|
|
147
|
+
} : _ref3$menu,
|
|
148
|
+
_ref3$pathname = _ref3.pathname,
|
|
149
|
+
pathname = _ref3$pathname === void 0 ? '/' : _ref3$pathname;
|
|
150
|
+
var directMatch = ((_find = _toConsumableArray((breadcrumbMap === null || breadcrumbMap === void 0 ? void 0 : breadcrumbMap.entries()) || []).find(function (_ref4) {
|
|
151
|
+
var _ref5 = _slicedToArray(_ref4, 1),
|
|
152
|
+
path = _ref5[0];
|
|
153
|
+
return matchPathPattern(path, pathname);
|
|
154
|
+
})) === null || _find === void 0 ? void 0 : _find[1]) || ((_Object$entries$find = Object.entries(breadcrumb || {}).find(function (_ref6) {
|
|
155
|
+
var _ref7 = _slicedToArray(_ref6, 1),
|
|
156
|
+
path = _ref7[0];
|
|
157
|
+
return matchPathPattern(path, pathname);
|
|
158
|
+
})) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[1]);
|
|
159
|
+
var resolvedPageName = pageName || (directMatch !== null && directMatch !== void 0 && directMatch.locale && menu.locale !== false && formatMessage ? formatMessage({
|
|
160
|
+
id: directMatch.locale,
|
|
161
|
+
defaultMessage: String(directMatch.name || '')
|
|
162
|
+
}) : directMatch === null || directMatch === void 0 ? void 0 : directMatch.name) || (appList === null || appList === void 0 || (_appList$ = appList[0]) === null || _appList$ === void 0 ? void 0 : _appList$.title) || undefined;
|
|
163
|
+
if (resolvedPageName == null) {
|
|
164
|
+
resolvedPageName = title;
|
|
165
|
+
}
|
|
166
|
+
var plainPageName = resolvedPageName == null ? '' : String(resolvedPageName);
|
|
167
|
+
var plainTitle = title == null ? '' : String(title);
|
|
168
|
+
if (ignoreTitle || !plainTitle) {
|
|
169
|
+
return {
|
|
170
|
+
id: directMatch !== null && directMatch !== void 0 && directMatch.locale ? String(directMatch.locale) : '',
|
|
171
|
+
pageName: plainPageName,
|
|
172
|
+
title: plainPageName
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
if (!plainPageName) {
|
|
176
|
+
return {
|
|
177
|
+
id: directMatch !== null && directMatch !== void 0 && directMatch.locale ? String(directMatch.locale) : '',
|
|
178
|
+
pageName: plainTitle,
|
|
179
|
+
title: plainTitle
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
id: directMatch !== null && directMatch !== void 0 && directMatch.locale ? String(directMatch.locale) : '',
|
|
184
|
+
pageName: plainPageName,
|
|
185
|
+
title: "".concat(plainPageName, " - ").concat(plainTitle)
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
export var ProBreadcrumb = function ProBreadcrumb(_ref8) {
|
|
189
|
+
var items = _ref8.items;
|
|
190
|
+
if (!(items !== null && items !== void 0 && items.length)) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
return /*#__PURE__*/_jsx("div", {
|
|
194
|
+
className: "flex flex-wrap items-center gap-2 text-sm text-muted-foreground",
|
|
195
|
+
children: items.map(function (item, index) {
|
|
196
|
+
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
197
|
+
children: [index > 0 ? /*#__PURE__*/_jsx(ChevronRight, {
|
|
198
|
+
className: "h-4 w-4"
|
|
199
|
+
}) : null, item.href ? /*#__PURE__*/_jsx("a", {
|
|
200
|
+
href: item.href,
|
|
201
|
+
className: "transition-colors hover:text-foreground",
|
|
202
|
+
children: item.title
|
|
203
|
+
}) : /*#__PURE__*/_jsx("span", {
|
|
204
|
+
children: item.title
|
|
205
|
+
})]
|
|
206
|
+
}, "".concat(item.title, "-").concat(index));
|
|
207
|
+
})
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
export var PageLoading = function PageLoading(_ref9) {
|
|
211
|
+
var _ref9$tip = _ref9.tip,
|
|
212
|
+
tip = _ref9$tip === void 0 ? '加载中...' : _ref9$tip;
|
|
213
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
214
|
+
className: "flex min-h-[50vh] w-full flex-col items-center justify-center gap-3",
|
|
215
|
+
children: [/*#__PURE__*/_jsx(Loader2, {
|
|
216
|
+
className: "h-6 w-6 animate-spin text-primary"
|
|
217
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
218
|
+
className: "text-sm text-muted-foreground",
|
|
219
|
+
children: tip
|
|
220
|
+
})]
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
export var GridContent = function GridContent(_ref10) {
|
|
224
|
+
var className = _ref10.className,
|
|
225
|
+
children = _ref10.children,
|
|
226
|
+
rest = _objectWithoutProperties(_ref10, _excluded);
|
|
227
|
+
return /*#__PURE__*/_jsx("div", _objectSpread(_objectSpread({
|
|
228
|
+
className: cn('w-full', className)
|
|
229
|
+
}, rest), {}, {
|
|
230
|
+
children: children
|
|
231
|
+
}));
|
|
232
|
+
};
|
|
233
|
+
export var WrapContent = GridContent;
|
|
234
|
+
export var AppList = function AppList(_ref11) {
|
|
235
|
+
var _ref11$apps = _ref11.apps,
|
|
236
|
+
apps = _ref11$apps === void 0 ? [] : _ref11$apps,
|
|
237
|
+
className = _ref11.className;
|
|
238
|
+
if (!apps.length) {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
return /*#__PURE__*/_jsx("div", {
|
|
242
|
+
className: cn('grid gap-3 sm:grid-cols-2 xl:grid-cols-3', className),
|
|
243
|
+
children: apps.map(function (app) {
|
|
244
|
+
var content = /*#__PURE__*/_jsx(Card, {
|
|
245
|
+
className: "h-full",
|
|
246
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
247
|
+
className: "flex items-start gap-3",
|
|
248
|
+
children: [app.icon ? /*#__PURE__*/_jsx("div", {
|
|
249
|
+
className: "bg-primary/10 flex h-10 w-10 shrink-0 items-center justify-center rounded-xl text-primary",
|
|
250
|
+
children: app.icon
|
|
251
|
+
}) : null, /*#__PURE__*/_jsxs("div", {
|
|
252
|
+
className: "min-w-0 space-y-1",
|
|
253
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
254
|
+
className: "text-sm font-medium text-foreground",
|
|
255
|
+
children: app.title
|
|
256
|
+
}), app.desc ? /*#__PURE__*/_jsx("div", {
|
|
257
|
+
className: "text-sm text-muted-foreground",
|
|
258
|
+
children: app.desc
|
|
259
|
+
}) : null]
|
|
260
|
+
})]
|
|
261
|
+
})
|
|
262
|
+
}, String(app.title));
|
|
263
|
+
return app.url ? /*#__PURE__*/_jsx("a", {
|
|
264
|
+
href: app.url,
|
|
265
|
+
className: "block transition-transform hover:-translate-y-0.5",
|
|
266
|
+
children: content
|
|
267
|
+
}, String(app.title)) : /*#__PURE__*/_jsx("div", {
|
|
268
|
+
children: content
|
|
269
|
+
}, String(app.title));
|
|
270
|
+
})
|
|
271
|
+
});
|
|
272
|
+
};
|
|
273
|
+
export var FooterToolbar = function FooterToolbar(_ref12) {
|
|
274
|
+
var children = _ref12.children,
|
|
275
|
+
extra = _ref12.extra,
|
|
276
|
+
className = _ref12.className;
|
|
277
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
278
|
+
className: cn('bg-card/90 sticky bottom-4 z-20 flex items-center justify-between rounded-2xl border border-border p-4 shadow-lg backdrop-blur', className),
|
|
279
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
280
|
+
children: extra
|
|
281
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
282
|
+
className: "flex flex-wrap items-center gap-3",
|
|
283
|
+
children: children
|
|
284
|
+
})]
|
|
285
|
+
});
|
|
286
|
+
};
|
|
287
|
+
export var DefaultFooter = function DefaultFooter(_ref13) {
|
|
288
|
+
var _ref13$links = _ref13.links,
|
|
289
|
+
links = _ref13$links === void 0 ? [] : _ref13$links,
|
|
290
|
+
copyright = _ref13.copyright,
|
|
291
|
+
className = _ref13.className;
|
|
292
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
293
|
+
className: cn('flex flex-col items-center justify-center gap-3 py-6 text-center text-sm text-muted-foreground', className),
|
|
294
|
+
children: [links.length ? /*#__PURE__*/_jsx("div", {
|
|
295
|
+
className: "flex flex-wrap items-center justify-center gap-3",
|
|
296
|
+
children: links.map(function (link) {
|
|
297
|
+
var _link$key, _link$key2;
|
|
298
|
+
return link.href ? /*#__PURE__*/_jsx("a", {
|
|
299
|
+
href: link.href,
|
|
300
|
+
className: "transition-colors hover:text-foreground",
|
|
301
|
+
children: link.title
|
|
302
|
+
}, String((_link$key = link.key) !== null && _link$key !== void 0 ? _link$key : link.title)) : /*#__PURE__*/_jsx("span", {
|
|
303
|
+
children: link.title
|
|
304
|
+
}, String((_link$key2 = link.key) !== null && _link$key2 !== void 0 ? _link$key2 : link.title));
|
|
305
|
+
})
|
|
306
|
+
}) : null, copyright ? /*#__PURE__*/_jsx("div", {
|
|
307
|
+
children: copyright
|
|
308
|
+
}) : null]
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
export var TopNavHeader = function TopNavHeader(_ref14) {
|
|
312
|
+
var title = _ref14.title,
|
|
313
|
+
subTitle = _ref14.subTitle,
|
|
314
|
+
logo = _ref14.logo,
|
|
315
|
+
content = _ref14.content,
|
|
316
|
+
actions = _ref14.actions,
|
|
317
|
+
_ref14$fixed = _ref14.fixed,
|
|
318
|
+
fixed = _ref14$fixed === void 0 ? true : _ref14$fixed,
|
|
319
|
+
_ref14$navTheme = _ref14.navTheme,
|
|
320
|
+
navTheme = _ref14$navTheme === void 0 ? 'light' : _ref14$navTheme,
|
|
321
|
+
className = _ref14.className;
|
|
322
|
+
var darkMode = navTheme === 'dark';
|
|
323
|
+
var hasBrand = Boolean(logo || title || subTitle);
|
|
324
|
+
return /*#__PURE__*/_jsx("header", {
|
|
325
|
+
className: cn(fixed ? 'sticky top-0 z-30' : 'relative', darkMode ? 'bg-slate-950/95 backdrop-blur' : 'bg-background/90 backdrop-blur', className),
|
|
326
|
+
children: /*#__PURE__*/_jsxs(GridContent, {
|
|
327
|
+
className: "flex min-h-16 flex-wrap items-center gap-4 py-2",
|
|
328
|
+
style: {
|
|
329
|
+
paddingInline: "var(--x-pro-layout-content-padding, ".concat(LAYOUT_SECTION_SPACE, ")")
|
|
330
|
+
},
|
|
331
|
+
children: [hasBrand ? /*#__PURE__*/_jsxs("div", {
|
|
332
|
+
className: "flex min-w-0 items-center gap-3",
|
|
333
|
+
children: [logo ? /*#__PURE__*/_jsx("div", {
|
|
334
|
+
className: "shrink-0",
|
|
335
|
+
children: typeof logo === 'string' ? /*#__PURE__*/_jsx("img", {
|
|
336
|
+
src: logo,
|
|
337
|
+
alt: title ? String(title) : 'logo',
|
|
338
|
+
className: "h-8 w-8 rounded-lg object-contain"
|
|
339
|
+
}) : logo
|
|
340
|
+
}) : null, /*#__PURE__*/_jsxs("div", {
|
|
341
|
+
className: "min-w-0",
|
|
342
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
343
|
+
className: cn('text-lg font-semibold', darkMode ? 'text-white' : 'text-foreground'),
|
|
344
|
+
children: title || 'X Mobile Pro'
|
|
345
|
+
}), subTitle ? /*#__PURE__*/_jsx("div", {
|
|
346
|
+
className: cn('text-sm', darkMode ? 'text-slate-300' : 'text-muted-foreground'),
|
|
347
|
+
children: subTitle
|
|
348
|
+
}) : null]
|
|
349
|
+
})]
|
|
350
|
+
}) : null, content ? /*#__PURE__*/_jsx("div", {
|
|
351
|
+
className: "min-w-0 flex-1",
|
|
352
|
+
children: content
|
|
353
|
+
}) : /*#__PURE__*/_jsx("div", {
|
|
354
|
+
className: "flex-1"
|
|
355
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
356
|
+
className: "ml-auto flex shrink-0 flex-wrap items-center justify-end gap-3",
|
|
357
|
+
children: actions
|
|
358
|
+
})]
|
|
359
|
+
})
|
|
360
|
+
});
|
|
361
|
+
};
|
|
362
|
+
export var DefaultHeader = TopNavHeader;
|
|
363
|
+
export var SettingDrawer = function SettingDrawer(_ref15) {
|
|
364
|
+
var _ref16;
|
|
365
|
+
var children = _ref15.children,
|
|
366
|
+
className = _ref15.className,
|
|
367
|
+
collapse = _ref15.collapse,
|
|
368
|
+
onCollapseChange = _ref15.onCollapseChange,
|
|
369
|
+
onOpenChange = _ref15.onOpenChange,
|
|
370
|
+
onSettingChange = _ref15.onSettingChange,
|
|
371
|
+
open = _ref15.open,
|
|
372
|
+
settings = _ref15.settings;
|
|
373
|
+
var parentSettings = useContext(LayoutSettingsContext);
|
|
374
|
+
var _useState = useState(false),
|
|
375
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
376
|
+
innerOpen = _useState2[0],
|
|
377
|
+
setInnerOpen = _useState2[1];
|
|
378
|
+
var _useState3 = useState(settings || parentSettings || defaultLayoutSettings),
|
|
379
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
380
|
+
innerSettings = _useState4[0],
|
|
381
|
+
setInnerSettings = _useState4[1];
|
|
382
|
+
var mergedOpen = (_ref16 = open !== null && open !== void 0 ? open : collapse) !== null && _ref16 !== void 0 ? _ref16 : innerOpen;
|
|
383
|
+
var mergedSettings = settings !== null && settings !== void 0 ? settings : innerSettings;
|
|
384
|
+
React.useEffect(function () {
|
|
385
|
+
if (settings !== undefined) {
|
|
386
|
+
setInnerSettings(settings);
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
if (parentSettings) {
|
|
390
|
+
setInnerSettings(function (prev) {
|
|
391
|
+
return _objectSpread(_objectSpread(_objectSpread({}, defaultLayoutSettings), prev), parentSettings);
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
}, [parentSettings, settings]);
|
|
395
|
+
var updateOpen = function updateOpen(nextOpen) {
|
|
396
|
+
if (open === undefined) {
|
|
397
|
+
setInnerOpen(nextOpen);
|
|
398
|
+
}
|
|
399
|
+
onOpenChange === null || onOpenChange === void 0 || onOpenChange(nextOpen);
|
|
400
|
+
onCollapseChange === null || onCollapseChange === void 0 || onCollapseChange(nextOpen);
|
|
401
|
+
};
|
|
402
|
+
var updateSettings = function updateSettings(patch) {
|
|
403
|
+
var nextSettings = _objectSpread(_objectSpread({}, mergedSettings), patch);
|
|
404
|
+
if (settings === undefined) {
|
|
405
|
+
setInnerSettings(nextSettings);
|
|
406
|
+
}
|
|
407
|
+
onSettingChange === null || onSettingChange === void 0 || onSettingChange(nextSettings);
|
|
408
|
+
};
|
|
409
|
+
return /*#__PURE__*/_jsx(LayoutSettingsContext.Provider, {
|
|
410
|
+
value: mergedSettings,
|
|
411
|
+
children: /*#__PURE__*/_jsxs(_Fragment, {
|
|
412
|
+
children: [children, /*#__PURE__*/_jsx("div", {
|
|
413
|
+
className: "fixed bottom-6 right-6 z-40",
|
|
414
|
+
children: mergedOpen ? /*#__PURE__*/_jsx(Card, {
|
|
415
|
+
className: cn('w-[320px] shadow-xl', className),
|
|
416
|
+
title: "\u5E03\u5C40\u8BBE\u7F6E",
|
|
417
|
+
extra: /*#__PURE__*/_jsx(Button, {
|
|
418
|
+
variant: "ghost",
|
|
419
|
+
size: "small",
|
|
420
|
+
onClick: function onClick() {
|
|
421
|
+
return updateOpen(false);
|
|
422
|
+
},
|
|
423
|
+
children: "\u6536\u8D77"
|
|
424
|
+
}),
|
|
425
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
426
|
+
className: "space-y-4",
|
|
427
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
428
|
+
className: "space-y-2",
|
|
429
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
430
|
+
className: "text-sm font-medium text-foreground",
|
|
431
|
+
children: "\u5E03\u5C40\u6A21\u5F0F"
|
|
432
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
433
|
+
className: "flex flex-wrap gap-2",
|
|
434
|
+
children: ['side', 'top', 'mix'].map(function (item) {
|
|
435
|
+
return /*#__PURE__*/_jsx(Button, {
|
|
436
|
+
size: "small",
|
|
437
|
+
variant: mergedSettings.layout === item ? 'default' : 'outline',
|
|
438
|
+
onClick: function onClick() {
|
|
439
|
+
return updateSettings({
|
|
440
|
+
layout: item
|
|
441
|
+
});
|
|
442
|
+
},
|
|
443
|
+
children: item
|
|
444
|
+
}, item);
|
|
445
|
+
})
|
|
446
|
+
})]
|
|
447
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
448
|
+
className: "space-y-2",
|
|
449
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
450
|
+
className: "text-sm font-medium text-foreground",
|
|
451
|
+
children: "\u5BFC\u822A\u4E3B\u9898"
|
|
452
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
453
|
+
className: "flex flex-wrap gap-2",
|
|
454
|
+
children: ['light', 'dark'].map(function (item) {
|
|
455
|
+
return /*#__PURE__*/_jsx(Button, {
|
|
456
|
+
size: "small",
|
|
457
|
+
variant: mergedSettings.navTheme === item ? 'default' : 'outline',
|
|
458
|
+
onClick: function onClick() {
|
|
459
|
+
return updateSettings({
|
|
460
|
+
navTheme: item
|
|
461
|
+
});
|
|
462
|
+
},
|
|
463
|
+
children: item
|
|
464
|
+
}, item);
|
|
465
|
+
})
|
|
466
|
+
})]
|
|
467
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
468
|
+
className: "space-y-2",
|
|
469
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
470
|
+
className: "text-sm font-medium text-foreground",
|
|
471
|
+
children: "\u5185\u5BB9\u5BBD\u5EA6"
|
|
472
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
473
|
+
className: "flex flex-wrap gap-2",
|
|
474
|
+
children: ['Fluid', 'Fixed'].map(function (item) {
|
|
475
|
+
return /*#__PURE__*/_jsx(Button, {
|
|
476
|
+
size: "small",
|
|
477
|
+
variant: mergedSettings.contentWidth === item ? 'default' : 'outline',
|
|
478
|
+
onClick: function onClick() {
|
|
479
|
+
return updateSettings({
|
|
480
|
+
contentWidth: item
|
|
481
|
+
});
|
|
482
|
+
},
|
|
483
|
+
children: item
|
|
484
|
+
}, item);
|
|
485
|
+
})
|
|
486
|
+
})]
|
|
487
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
488
|
+
className: "space-y-2",
|
|
489
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
490
|
+
className: "text-sm font-medium text-foreground",
|
|
491
|
+
children: "\u5F3A\u8C03\u8272"
|
|
492
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
493
|
+
"aria-label": "colorPrimary",
|
|
494
|
+
type: "color",
|
|
495
|
+
value: mergedSettings.colorPrimary || '#1677ff',
|
|
496
|
+
className: "h-10 w-full cursor-pointer rounded-xl border border-border bg-background px-2 py-1",
|
|
497
|
+
onChange: function onChange(event) {
|
|
498
|
+
return updateSettings({
|
|
499
|
+
colorPrimary: event.target.value
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
})]
|
|
503
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
504
|
+
className: "bg-muted/20 flex items-center justify-between rounded-xl border border-border px-3 py-2",
|
|
505
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
506
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
507
|
+
className: "text-sm font-medium text-foreground",
|
|
508
|
+
children: "\u56FA\u5B9A\u5934\u90E8"
|
|
509
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
510
|
+
className: "text-xs text-muted-foreground",
|
|
511
|
+
children: "\u5207\u6362\u9875\u9762\u5934\u90E8\u5438\u9876"
|
|
512
|
+
})]
|
|
513
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
514
|
+
size: "small",
|
|
515
|
+
variant: mergedSettings.fixedHeader ? 'default' : 'outline',
|
|
516
|
+
onClick: function onClick() {
|
|
517
|
+
return updateSettings({
|
|
518
|
+
fixedHeader: !mergedSettings.fixedHeader
|
|
519
|
+
});
|
|
520
|
+
},
|
|
521
|
+
children: mergedSettings.fixedHeader ? '开启' : '关闭'
|
|
522
|
+
})]
|
|
523
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
524
|
+
className: "bg-muted/20 flex items-center justify-between rounded-xl border border-border px-3 py-2",
|
|
525
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
526
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
527
|
+
className: "text-sm font-medium text-foreground",
|
|
528
|
+
children: "\u56FA\u5B9A\u4FA7\u8FB9\u680F"
|
|
529
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
530
|
+
className: "text-xs text-muted-foreground",
|
|
531
|
+
children: "\u5207\u6362\u4FA7\u8FB9\u5BFC\u822A\u5438\u9876"
|
|
532
|
+
})]
|
|
533
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
534
|
+
size: "small",
|
|
535
|
+
variant: mergedSettings.fixSiderbar ? 'default' : 'outline',
|
|
536
|
+
onClick: function onClick() {
|
|
537
|
+
return updateSettings({
|
|
538
|
+
fixSiderbar: !mergedSettings.fixSiderbar
|
|
539
|
+
});
|
|
540
|
+
},
|
|
541
|
+
children: mergedSettings.fixSiderbar ? '开启' : '关闭'
|
|
542
|
+
})]
|
|
543
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
544
|
+
className: "bg-muted/20 flex items-center justify-between rounded-xl border border-border px-3 py-2",
|
|
545
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
546
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
547
|
+
className: "text-sm font-medium text-foreground",
|
|
548
|
+
children: "\u81EA\u52A8\u5206\u5272\u83DC\u5355"
|
|
549
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
550
|
+
className: "text-xs text-muted-foreground",
|
|
551
|
+
children: "Mix \u6A21\u5F0F\u4E0B\u62C6\u5206\u9876\u7EA7\u83DC\u5355\u548C\u5B50\u83DC\u5355"
|
|
552
|
+
})]
|
|
553
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
554
|
+
size: "small",
|
|
555
|
+
variant: mergedSettings.splitMenus ? 'default' : 'outline',
|
|
556
|
+
onClick: function onClick() {
|
|
557
|
+
return updateSettings({
|
|
558
|
+
splitMenus: !mergedSettings.splitMenus
|
|
559
|
+
});
|
|
560
|
+
},
|
|
561
|
+
children: mergedSettings.splitMenus ? '开启' : '关闭'
|
|
562
|
+
})]
|
|
563
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
564
|
+
className: "bg-muted/20 flex items-center justify-between rounded-xl border border-border px-3 py-2",
|
|
565
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
566
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
567
|
+
className: "text-sm font-medium text-foreground",
|
|
568
|
+
children: "\u8272\u5F31\u6A21\u5F0F"
|
|
569
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
570
|
+
className: "text-xs text-muted-foreground",
|
|
571
|
+
children: "\u4E3A\u6574\u9875\u589E\u52A0\u7070\u5EA6\u6EE4\u955C"
|
|
572
|
+
})]
|
|
573
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
574
|
+
size: "small",
|
|
575
|
+
variant: mergedSettings.colorWeak ? 'default' : 'outline',
|
|
576
|
+
onClick: function onClick() {
|
|
577
|
+
return updateSettings({
|
|
578
|
+
colorWeak: !mergedSettings.colorWeak
|
|
579
|
+
});
|
|
580
|
+
},
|
|
581
|
+
children: mergedSettings.colorWeak ? '开启' : '关闭'
|
|
582
|
+
})]
|
|
583
|
+
})]
|
|
584
|
+
})
|
|
585
|
+
}) : /*#__PURE__*/_jsx(Button, {
|
|
586
|
+
variant: "default",
|
|
587
|
+
size: "small",
|
|
588
|
+
icon: /*#__PURE__*/_jsx(Settings2, {
|
|
589
|
+
className: "h-4 w-4"
|
|
590
|
+
}),
|
|
591
|
+
onClick: function onClick() {
|
|
592
|
+
return updateOpen(true);
|
|
593
|
+
},
|
|
594
|
+
children: "\u5E03\u5C40\u8BBE\u7F6E"
|
|
595
|
+
})
|
|
596
|
+
})]
|
|
597
|
+
})
|
|
598
|
+
});
|
|
599
|
+
};
|
|
600
|
+
export var PageContainer = function PageContainer(_ref17) {
|
|
601
|
+
var title = _ref17.title,
|
|
602
|
+
subTitle = _ref17.subTitle,
|
|
603
|
+
extra = _ref17.extra,
|
|
604
|
+
content = _ref17.content,
|
|
605
|
+
footer = _ref17.footer,
|
|
606
|
+
children = _ref17.children,
|
|
607
|
+
breadcrumb = _ref17.breadcrumb,
|
|
608
|
+
_ref17$ghost = _ref17.ghost,
|
|
609
|
+
ghost = _ref17$ghost === void 0 ? false : _ref17$ghost,
|
|
610
|
+
_ref17$loading = _ref17.loading,
|
|
611
|
+
loading = _ref17$loading === void 0 ? false : _ref17$loading,
|
|
612
|
+
tabList = _ref17.tabList,
|
|
613
|
+
tabActiveKey = _ref17.tabActiveKey,
|
|
614
|
+
onTabChange = _ref17.onTabChange,
|
|
615
|
+
className = _ref17.className,
|
|
616
|
+
style = _ref17.style,
|
|
617
|
+
bodyClassName = _ref17.bodyClassName,
|
|
618
|
+
bodyStyle = _ref17.bodyStyle;
|
|
619
|
+
var routeContext = useContext(RouteContext);
|
|
620
|
+
var resolvedTitle = title !== null && title !== void 0 ? title : routeContext.title;
|
|
621
|
+
var resolvedBreadcrumb = breadcrumb !== null && breadcrumb !== void 0 ? breadcrumb : routeContext.breadcrumb;
|
|
622
|
+
if (loading) {
|
|
623
|
+
return /*#__PURE__*/_jsx(PageLoading, {});
|
|
624
|
+
}
|
|
625
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
626
|
+
className: "space-y-5",
|
|
627
|
+
children: [/*#__PURE__*/_jsxs(Card, {
|
|
628
|
+
variant: ghost ? 'ghost' : 'default',
|
|
629
|
+
className: cn(ghost && 'border-transparent bg-transparent shadow-none', className),
|
|
630
|
+
style: style,
|
|
631
|
+
bodyClassName: bodyClassName,
|
|
632
|
+
bodyStyle: bodyStyle,
|
|
633
|
+
title: /*#__PURE__*/_jsxs("div", {
|
|
634
|
+
className: "space-y-2",
|
|
635
|
+
children: [/*#__PURE__*/_jsx(ProBreadcrumb, {
|
|
636
|
+
items: resolvedBreadcrumb
|
|
637
|
+
}), resolvedTitle ? /*#__PURE__*/_jsx("div", {
|
|
638
|
+
className: "text-2xl font-semibold text-foreground",
|
|
639
|
+
children: resolvedTitle
|
|
640
|
+
}) : null, subTitle ? /*#__PURE__*/_jsx("div", {
|
|
641
|
+
className: "text-sm text-muted-foreground",
|
|
642
|
+
children: subTitle
|
|
643
|
+
}) : null]
|
|
644
|
+
}),
|
|
645
|
+
extra: extra,
|
|
646
|
+
children: [content ? /*#__PURE__*/_jsx("div", {
|
|
647
|
+
className: "mb-5 text-sm text-muted-foreground",
|
|
648
|
+
children: content
|
|
649
|
+
}) : null, tabList !== null && tabList !== void 0 && tabList.length ? /*#__PURE__*/_jsx("div", {
|
|
650
|
+
className: "mb-5 flex flex-wrap items-center gap-2 border-b border-border pb-4",
|
|
651
|
+
children: tabList.map(function (item) {
|
|
652
|
+
return /*#__PURE__*/_jsx(Button, {
|
|
653
|
+
variant: tabActiveKey === item.key ? 'default' : 'outline',
|
|
654
|
+
size: "small",
|
|
655
|
+
onClick: function onClick() {
|
|
656
|
+
return onTabChange === null || onTabChange === void 0 ? void 0 : onTabChange(item.key);
|
|
657
|
+
},
|
|
658
|
+
children: item.tab
|
|
659
|
+
}, item.key);
|
|
660
|
+
})
|
|
661
|
+
}) : null, /*#__PURE__*/_jsx("div", {
|
|
662
|
+
children: children
|
|
663
|
+
})]
|
|
664
|
+
}), footer]
|
|
665
|
+
});
|
|
666
|
+
};
|
|
667
|
+
export var ProPageHeader = PageContainer;
|
|
668
|
+
export var PageHeader = PageContainer;
|
|
669
|
+
var renderMenuItems = function renderMenuItems(menuData, currentMenu, menuItemRender) {
|
|
670
|
+
var mode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'side';
|
|
671
|
+
var navTheme = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'light';
|
|
672
|
+
var items = menuData.filter(function (item) {
|
|
673
|
+
return !item.hideInMenu;
|
|
674
|
+
});
|
|
675
|
+
var darkMode = navTheme === 'dark';
|
|
676
|
+
return /*#__PURE__*/_jsx("div", {
|
|
677
|
+
className: cn(mode === 'top' ? 'flex flex-wrap items-center gap-2' : 'space-y-1'),
|
|
678
|
+
children: items.map(function (item) {
|
|
679
|
+
var _ref18, _item$key2;
|
|
680
|
+
var active = currentMenu !== null && currentMenu !== void 0 && currentMenu.path && item.path ? currentMenu.path === item.path : (currentMenu === null || currentMenu === void 0 ? void 0 : currentMenu.key) === item.key;
|
|
681
|
+
var defaultDom = item.path ? /*#__PURE__*/_jsxs("a", {
|
|
682
|
+
href: item.path,
|
|
683
|
+
className: cn('flex items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors', active ? 'bg-primary/10 text-primary' : darkMode ? 'text-slate-300 hover:bg-slate-800/70 hover:text-white' : 'hover:bg-muted/30 text-muted-foreground hover:text-foreground'),
|
|
684
|
+
children: [item.icon, /*#__PURE__*/_jsx("span", {
|
|
685
|
+
children: item.name
|
|
686
|
+
})]
|
|
687
|
+
}) : /*#__PURE__*/_jsxs("div", {
|
|
688
|
+
className: cn('flex items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors', active ? 'bg-primary/10 text-primary' : darkMode ? 'text-slate-300 hover:bg-slate-800/70 hover:text-white' : 'hover:bg-muted/30 text-muted-foreground hover:text-foreground'),
|
|
689
|
+
children: [item.icon, /*#__PURE__*/_jsx("span", {
|
|
690
|
+
children: item.name
|
|
691
|
+
})]
|
|
692
|
+
});
|
|
693
|
+
return /*#__PURE__*/_jsx("div", {
|
|
694
|
+
children: menuItemRender ? menuItemRender(item, defaultDom) : defaultDom
|
|
695
|
+
}, String((_ref18 = (_item$key2 = item.key) !== null && _item$key2 !== void 0 ? _item$key2 : item.path) !== null && _ref18 !== void 0 ? _ref18 : item.name));
|
|
696
|
+
})
|
|
697
|
+
});
|
|
698
|
+
};
|
|
699
|
+
export var ProLayout = function ProLayout(_ref19) {
|
|
700
|
+
var _layoutSettings$layou, _layoutSettings$navTh, _layoutSettings$fixed, _layoutSettings$fixSi, _layoutSettings$conte, _layoutSettings$split, _layoutSettings$color, _currentMenu$children;
|
|
701
|
+
var title = _ref19.title,
|
|
702
|
+
logo = _ref19.logo,
|
|
703
|
+
content = _ref19.content,
|
|
704
|
+
actions = _ref19.actions,
|
|
705
|
+
breadcrumb = _ref19.breadcrumb,
|
|
706
|
+
collapsed = _ref19.collapsed,
|
|
707
|
+
_collapsedButtonRender = _ref19.collapsedButtonRender,
|
|
708
|
+
_contentStyle = _ref19.contentStyle,
|
|
709
|
+
currentMenu = _ref19.currentMenu,
|
|
710
|
+
_ref19$contentWidth = _ref19.contentWidth,
|
|
711
|
+
contentWidth = _ref19$contentWidth === void 0 ? 'Fluid' : _ref19$contentWidth,
|
|
712
|
+
_ref19$fixedHeader = _ref19.fixedHeader,
|
|
713
|
+
fixedHeader = _ref19$fixedHeader === void 0 ? true : _ref19$fixedHeader,
|
|
714
|
+
_ref19$fixSiderbar = _ref19.fixSiderbar,
|
|
715
|
+
fixSiderbar = _ref19$fixSiderbar === void 0 ? false : _ref19$fixSiderbar,
|
|
716
|
+
_ref19$layout = _ref19.layout,
|
|
717
|
+
layout = _ref19$layout === void 0 ? 'side' : _ref19$layout,
|
|
718
|
+
_location = _ref19.location,
|
|
719
|
+
_ref19$menuData = _ref19.menuData,
|
|
720
|
+
menuData = _ref19$menuData === void 0 ? [] : _ref19$menuData,
|
|
721
|
+
_menuDataRender = _ref19.menuDataRender,
|
|
722
|
+
menuFooterRender = _ref19.menuFooterRender,
|
|
723
|
+
menuItemRender = _ref19.menuItemRender,
|
|
724
|
+
menuRender = _ref19.menuRender,
|
|
725
|
+
_ref19$navTheme = _ref19.navTheme,
|
|
726
|
+
navTheme = _ref19$navTheme === void 0 ? 'light' : _ref19$navTheme,
|
|
727
|
+
onMenuHeaderClick = _ref19.onMenuHeaderClick,
|
|
728
|
+
_ref19$siderWidth = _ref19.siderWidth,
|
|
729
|
+
siderWidth = _ref19$siderWidth === void 0 ? 240 : _ref19$siderWidth,
|
|
730
|
+
_ref19$splitMenus = _ref19.splitMenus,
|
|
731
|
+
splitMenus = _ref19$splitMenus === void 0 ? false : _ref19$splitMenus,
|
|
732
|
+
headerRender = _ref19.headerRender,
|
|
733
|
+
_token = _ref19.token,
|
|
734
|
+
className = _ref19.className,
|
|
735
|
+
children = _ref19.children,
|
|
736
|
+
rest = _objectWithoutProperties(_ref19, _excluded2);
|
|
737
|
+
var layoutSettings = useContext(LayoutSettingsContext);
|
|
738
|
+
var mergedLayout = (_layoutSettings$layou = layoutSettings === null || layoutSettings === void 0 ? void 0 : layoutSettings.layout) !== null && _layoutSettings$layou !== void 0 ? _layoutSettings$layou : layout;
|
|
739
|
+
var mergedNavTheme = (_layoutSettings$navTh = layoutSettings === null || layoutSettings === void 0 ? void 0 : layoutSettings.navTheme) !== null && _layoutSettings$navTh !== void 0 ? _layoutSettings$navTh : navTheme;
|
|
740
|
+
var mergedFixedHeader = (_layoutSettings$fixed = layoutSettings === null || layoutSettings === void 0 ? void 0 : layoutSettings.fixedHeader) !== null && _layoutSettings$fixed !== void 0 ? _layoutSettings$fixed : fixedHeader;
|
|
741
|
+
var mergedFixSiderbar = (_layoutSettings$fixSi = layoutSettings === null || layoutSettings === void 0 ? void 0 : layoutSettings.fixSiderbar) !== null && _layoutSettings$fixSi !== void 0 ? _layoutSettings$fixSi : fixSiderbar;
|
|
742
|
+
var mergedContentWidth = (_layoutSettings$conte = layoutSettings === null || layoutSettings === void 0 ? void 0 : layoutSettings.contentWidth) !== null && _layoutSettings$conte !== void 0 ? _layoutSettings$conte : contentWidth;
|
|
743
|
+
var mergedSplitMenus = (_layoutSettings$split = layoutSettings === null || layoutSettings === void 0 ? void 0 : layoutSettings.splitMenus) !== null && _layoutSettings$split !== void 0 ? _layoutSettings$split : splitMenus;
|
|
744
|
+
var mergedColorWeak = (_layoutSettings$color = layoutSettings === null || layoutSettings === void 0 ? void 0 : layoutSettings.colorWeak) !== null && _layoutSettings$color !== void 0 ? _layoutSettings$color : false;
|
|
745
|
+
var mergedThemeStyle = getLayoutThemeStyle(layoutSettings);
|
|
746
|
+
var routeContextValue = useMemo(function () {
|
|
747
|
+
return {
|
|
748
|
+
breadcrumb: breadcrumb,
|
|
749
|
+
collapsed: collapsed,
|
|
750
|
+
currentMenu: currentMenu,
|
|
751
|
+
title: title
|
|
752
|
+
};
|
|
753
|
+
}, [breadcrumb, collapsed, currentMenu, title]);
|
|
754
|
+
var topMenuData = menuData;
|
|
755
|
+
var sideMenuData = mergedLayout === 'mix' && mergedSplitMenus && currentMenu !== null && currentMenu !== void 0 && (_currentMenu$children = currentMenu.children) !== null && _currentMenu$children !== void 0 && _currentMenu$children.length ? currentMenu.children : menuData;
|
|
756
|
+
var showSideMenu = mergedLayout === 'side' || mergedLayout === 'mix';
|
|
757
|
+
var headerDom = /*#__PURE__*/_jsx(TopNavHeader, {
|
|
758
|
+
title: showSideMenu ? undefined : title,
|
|
759
|
+
logo: showSideMenu ? undefined : logo,
|
|
760
|
+
content: content,
|
|
761
|
+
actions: actions,
|
|
762
|
+
fixed: mergedFixedHeader,
|
|
763
|
+
navTheme: mergedNavTheme
|
|
764
|
+
});
|
|
765
|
+
var topMenuDom = renderMenuItems(topMenuData, currentMenu, menuItemRender, 'top', mergedNavTheme);
|
|
766
|
+
var sideMenuDom = renderMenuItems(sideMenuData, currentMenu, menuItemRender, mergedLayout === 'top' ? 'top' : 'side', mergedNavTheme);
|
|
767
|
+
var renderedHeader = headerRender ? headerRender(_objectSpread({
|
|
768
|
+
title: title,
|
|
769
|
+
actions: actions,
|
|
770
|
+
breadcrumb: breadcrumb,
|
|
771
|
+
collapsed: collapsed,
|
|
772
|
+
currentMenu: currentMenu,
|
|
773
|
+
contentWidth: mergedContentWidth,
|
|
774
|
+
fixedHeader: mergedFixedHeader,
|
|
775
|
+
fixSiderbar: mergedFixSiderbar,
|
|
776
|
+
layout: mergedLayout,
|
|
777
|
+
menuData: menuData,
|
|
778
|
+
menuFooterRender: menuFooterRender,
|
|
779
|
+
menuItemRender: menuItemRender,
|
|
780
|
+
menuRender: menuRender,
|
|
781
|
+
navTheme: mergedNavTheme,
|
|
782
|
+
siderWidth: siderWidth,
|
|
783
|
+
splitMenus: mergedSplitMenus,
|
|
784
|
+
headerRender: headerRender,
|
|
785
|
+
className: className,
|
|
786
|
+
children: children
|
|
787
|
+
}, rest), headerDom) : headerDom;
|
|
788
|
+
var renderedMenu = menuRender ? menuRender(_objectSpread({
|
|
789
|
+
title: title,
|
|
790
|
+
actions: actions,
|
|
791
|
+
breadcrumb: breadcrumb,
|
|
792
|
+
collapsed: collapsed,
|
|
793
|
+
currentMenu: currentMenu,
|
|
794
|
+
contentWidth: mergedContentWidth,
|
|
795
|
+
fixedHeader: mergedFixedHeader,
|
|
796
|
+
fixSiderbar: mergedFixSiderbar,
|
|
797
|
+
layout: mergedLayout,
|
|
798
|
+
menuData: menuData,
|
|
799
|
+
menuFooterRender: menuFooterRender,
|
|
800
|
+
menuItemRender: menuItemRender,
|
|
801
|
+
menuRender: menuRender,
|
|
802
|
+
navTheme: mergedNavTheme,
|
|
803
|
+
siderWidth: siderWidth,
|
|
804
|
+
splitMenus: mergedSplitMenus,
|
|
805
|
+
headerRender: headerRender,
|
|
806
|
+
className: className,
|
|
807
|
+
children: children
|
|
808
|
+
}, rest), mergedLayout === 'top' ? topMenuDom : sideMenuDom) : mergedLayout === 'top' ? topMenuDom : sideMenuDom;
|
|
809
|
+
var topMenuBar = mergedLayout === 'top' && menuData.length || mergedLayout === 'mix' && mergedSplitMenus && topMenuData.length ? /*#__PURE__*/_jsx("div", {
|
|
810
|
+
className: cn('border-b', mergedNavTheme === 'dark' ? 'border-slate-800 bg-slate-950/90' : 'bg-card/40 border-border'),
|
|
811
|
+
children: /*#__PURE__*/_jsx(GridContent, {
|
|
812
|
+
className: "px-6 py-3",
|
|
813
|
+
children: mergedLayout === 'top' ? renderedMenu : topMenuDom
|
|
814
|
+
})
|
|
815
|
+
}) : null;
|
|
816
|
+
return /*#__PURE__*/_jsx(RouteContext.Provider, {
|
|
817
|
+
value: routeContextValue,
|
|
818
|
+
children: /*#__PURE__*/_jsxs("div", _objectSpread(_objectSpread({
|
|
819
|
+
"data-pro-layout-root": "true",
|
|
820
|
+
className: cn(showSideMenu ? 'flex min-h-screen bg-background' : 'min-h-screen bg-background', className),
|
|
821
|
+
style: _objectSpread(_objectSpread({}, mergedThemeStyle || {}), mergedColorWeak ? {
|
|
822
|
+
filter: 'grayscale(80%)'
|
|
823
|
+
} : undefined)
|
|
824
|
+
}, rest), {}, {
|
|
825
|
+
children: [showSideMenu && menuData.length ? /*#__PURE__*/_jsxs("aside", {
|
|
826
|
+
className: cn('sticky top-0 flex h-screen shrink-0 flex-col overflow-hidden border-r bg-card'),
|
|
827
|
+
style: {
|
|
828
|
+
width: collapsed ? 84 : siderWidth,
|
|
829
|
+
borderRightColor: 'var(--x-sidebar-divider-color)'
|
|
830
|
+
},
|
|
831
|
+
children: [logo || title ? /*#__PURE__*/_jsxs("button", {
|
|
832
|
+
type: "button",
|
|
833
|
+
onClick: onMenuHeaderClick,
|
|
834
|
+
className: cn('flex min-h-16 items-center gap-3 px-4 py-2 text-left transition-colors', onMenuHeaderClick && 'hover:bg-muted/40'),
|
|
835
|
+
children: [logo ? typeof logo === 'string' ? /*#__PURE__*/_jsx("img", {
|
|
836
|
+
src: logo,
|
|
837
|
+
alt: title ? String(title) : 'logo',
|
|
838
|
+
className: "h-8 w-8 rounded-lg object-contain"
|
|
839
|
+
}) : /*#__PURE__*/_jsx("div", {
|
|
840
|
+
className: "flex h-8 w-8 items-center justify-center",
|
|
841
|
+
children: logo
|
|
842
|
+
}) : null, title ? /*#__PURE__*/_jsx("div", {
|
|
843
|
+
className: "min-w-0 truncate text-lg font-semibold text-foreground",
|
|
844
|
+
children: title
|
|
845
|
+
}) : null]
|
|
846
|
+
}) : null, /*#__PURE__*/_jsx("div", {
|
|
847
|
+
className: "min-h-0 flex-1 overflow-y-auto",
|
|
848
|
+
children: renderedMenu
|
|
849
|
+
}), menuFooterRender ? /*#__PURE__*/_jsx("div", {
|
|
850
|
+
className: "border-t border-[var(--sidebar-border)]",
|
|
851
|
+
children: menuFooterRender(_objectSpread({
|
|
852
|
+
title: title,
|
|
853
|
+
actions: actions,
|
|
854
|
+
breadcrumb: breadcrumb,
|
|
855
|
+
collapsed: collapsed,
|
|
856
|
+
currentMenu: currentMenu,
|
|
857
|
+
contentWidth: mergedContentWidth,
|
|
858
|
+
fixedHeader: mergedFixedHeader,
|
|
859
|
+
fixSiderbar: mergedFixSiderbar,
|
|
860
|
+
layout: mergedLayout,
|
|
861
|
+
menuData: menuData,
|
|
862
|
+
menuFooterRender: menuFooterRender,
|
|
863
|
+
menuItemRender: menuItemRender,
|
|
864
|
+
menuRender: menuRender,
|
|
865
|
+
navTheme: mergedNavTheme,
|
|
866
|
+
siderWidth: siderWidth,
|
|
867
|
+
splitMenus: mergedSplitMenus,
|
|
868
|
+
headerRender: headerRender,
|
|
869
|
+
className: className,
|
|
870
|
+
children: children
|
|
871
|
+
}, rest))
|
|
872
|
+
}) : null]
|
|
873
|
+
}) : null, /*#__PURE__*/_jsxs("div", {
|
|
874
|
+
className: cn('min-w-0 flex-1', showSideMenu && 'flex min-h-screen flex-col'),
|
|
875
|
+
children: [renderedHeader, topMenuBar, /*#__PURE__*/_jsxs("div", {
|
|
876
|
+
className: cn(showSideMenu ? 'min-w-0 flex-1 bg-[var(--backgroundSecondary)]' : 'bg-[var(--backgroundSecondary)]'),
|
|
877
|
+
"data-pro-layout-content": "true",
|
|
878
|
+
style: {
|
|
879
|
+
padding: "var(--x-pro-layout-content-padding, ".concat(LAYOUT_SECTION_SPACE, ")")
|
|
880
|
+
},
|
|
881
|
+
children: [mergedLayout === 'mix' && menuData.length ? /*#__PURE__*/_jsx("div", {
|
|
882
|
+
className: "mb-4 rounded-2xl border border-border bg-card px-4 py-3",
|
|
883
|
+
children: sideMenuDom
|
|
884
|
+
}) : null, showSideMenu ? children : /*#__PURE__*/_jsx(GridContent, {
|
|
885
|
+
children: children
|
|
886
|
+
})]
|
|
887
|
+
})]
|
|
888
|
+
})]
|
|
889
|
+
}))
|
|
890
|
+
});
|
|
891
|
+
};
|
|
892
|
+
export default ProLayout;
|