@_tc/template-core 0.2.1 → 0.2.3

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 (175) hide show
  1. package/AGENT_README.md +3 -0
  2. package/README.md +43 -1
  3. package/cjs/app/controller/view.js +1 -1
  4. package/cjs/app/middleware.js +1 -1
  5. package/cjs/config/config.default.js +1 -1
  6. package/esm/app/controller/view.js +1 -1
  7. package/esm/app/middleware.js +1 -1
  8. package/esm/config/config.default.js +2 -1
  9. package/fe/_virtual/_rolldown/runtime.js +13 -0
  10. package/fe/packages/react/ui/components/Date/Calendar.js +1 -5
  11. package/fe/packages/react/ui/components/Date/DateTestPage.js +15 -331
  12. package/fe/packages/react/ui/components/Date/LocaleContext.d.ts +1 -0
  13. package/fe/packages/react/ui/components/Date/index.js +2 -2
  14. package/fe/packages/react/ui/components/Date/locales.d.ts +5 -0
  15. package/fe/packages/react/ui/components/Date/locales.js +16 -1
  16. package/fe/packages/react/ui/components/testPage/DemoSection.d.ts +10 -0
  17. package/fe/packages/react/ui/components/testPage/DemoSection.js +73 -0
  18. package/fe/packages/react/ui/components/testPage/MenuTestPage.js +16 -389
  19. package/fe/packages/react/ui/components/testPage/demoRegistry.d.ts +4 -0
  20. package/fe/packages/react/ui/components/testPage/demoRegistry.js +217 -0
  21. package/fe/packages/react/ui/components/testPage/demos/core/BreadcrumbDemo.d.ts +6 -0
  22. package/fe/packages/react/ui/components/testPage/demos/core/BreadcrumbDemo.js +44 -0
  23. package/fe/packages/react/ui/components/testPage/demos/core/BreadcrumbDemo2.js +4 -0
  24. package/fe/packages/react/ui/components/testPage/demos/core/ButtonDemo.d.ts +6 -0
  25. package/fe/packages/react/ui/components/testPage/demos/core/ButtonDemo.js +85 -0
  26. package/fe/packages/react/ui/components/testPage/demos/core/ButtonDemo2.js +4 -0
  27. package/fe/packages/react/ui/components/testPage/demos/core/CardDemo.d.ts +6 -0
  28. package/fe/packages/react/ui/components/testPage/demos/core/CardDemo.js +52 -0
  29. package/fe/packages/react/ui/components/testPage/demos/core/CardDemo2.js +4 -0
  30. package/fe/packages/react/ui/components/testPage/demos/core/CheckboxDemo.d.ts +6 -0
  31. package/fe/packages/react/ui/components/testPage/demos/core/CheckboxDemo.js +41 -0
  32. package/fe/packages/react/ui/components/testPage/demos/core/CheckboxDemo2.js +4 -0
  33. package/fe/packages/react/ui/components/testPage/demos/core/ConfirmDialogDemo.d.ts +6 -0
  34. package/fe/packages/react/ui/components/testPage/demos/core/ConfirmDialogDemo.js +35 -0
  35. package/fe/packages/react/ui/components/testPage/demos/core/ConfirmDialogDemo2.js +4 -0
  36. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo.d.ts +6 -0
  37. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo.js +243 -0
  38. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo2.js +4 -0
  39. package/fe/packages/react/ui/components/testPage/demos/core/DrawerDemo.d.ts +6 -0
  40. package/fe/packages/react/ui/components/testPage/demos/core/DrawerDemo.js +105 -0
  41. package/fe/packages/react/ui/components/testPage/demos/core/DrawerDemo2.js +4 -0
  42. package/fe/packages/react/ui/components/testPage/demos/core/DropdownDemo.d.ts +6 -0
  43. package/fe/packages/react/ui/components/testPage/demos/core/DropdownDemo.js +48 -0
  44. package/fe/packages/react/ui/components/testPage/demos/core/DropdownDemo2.js +4 -0
  45. package/fe/packages/react/ui/components/testPage/demos/core/FormDemo.d.ts +6 -0
  46. package/fe/packages/react/ui/components/testPage/demos/core/FormDemo.js +56 -0
  47. package/fe/packages/react/ui/components/testPage/demos/core/FormDemo2.js +4 -0
  48. package/fe/packages/react/ui/components/testPage/demos/core/ImageUploadDemo.d.ts +6 -0
  49. package/fe/packages/react/ui/components/testPage/demos/core/ImageUploadDemo.js +26 -0
  50. package/fe/packages/react/ui/components/testPage/demos/core/ImageUploadDemo2.js +4 -0
  51. package/fe/packages/react/ui/components/testPage/demos/core/InputDemo.d.ts +6 -0
  52. package/fe/packages/react/ui/components/testPage/demos/core/InputDemo.js +55 -0
  53. package/fe/packages/react/ui/components/testPage/demos/core/InputDemo2.js +4 -0
  54. package/fe/packages/react/ui/components/testPage/demos/core/InputNumberDemo.d.ts +6 -0
  55. package/fe/packages/react/ui/components/testPage/demos/core/InputNumberDemo.js +65 -0
  56. package/fe/packages/react/ui/components/testPage/demos/core/InputNumberDemo2.js +4 -0
  57. package/fe/packages/react/ui/components/testPage/demos/core/LabelDemo.d.ts +6 -0
  58. package/fe/packages/react/ui/components/testPage/demos/core/LabelDemo.js +33 -0
  59. package/fe/packages/react/ui/components/testPage/demos/core/LabelDemo2.js +4 -0
  60. package/fe/packages/react/ui/components/testPage/demos/core/LayoutDemo.d.ts +6 -0
  61. package/fe/packages/react/ui/components/testPage/demos/core/LayoutDemo.js +64 -0
  62. package/fe/packages/react/ui/components/testPage/demos/core/LayoutDemo2.js +4 -0
  63. package/fe/packages/react/ui/components/testPage/demos/core/LoadingDemo.d.ts +6 -0
  64. package/fe/packages/react/ui/components/testPage/demos/core/LoadingDemo.js +32 -0
  65. package/fe/packages/react/ui/components/testPage/demos/core/LoadingDemo2.js +4 -0
  66. package/fe/packages/react/ui/components/testPage/demos/core/MessageDemo.d.ts +6 -0
  67. package/fe/packages/react/ui/components/testPage/demos/core/MessageDemo.js +44 -0
  68. package/fe/packages/react/ui/components/testPage/demos/core/MessageDemo2.js +4 -0
  69. package/fe/packages/react/ui/components/testPage/demos/core/ModalDemo.d.ts +6 -0
  70. package/fe/packages/react/ui/components/testPage/demos/core/ModalDemo.js +61 -0
  71. package/fe/packages/react/ui/components/testPage/demos/core/ModalDemo2.js +4 -0
  72. package/fe/packages/react/ui/components/testPage/demos/core/NotificationDemo.d.ts +6 -0
  73. package/fe/packages/react/ui/components/testPage/demos/core/NotificationDemo.js +50 -0
  74. package/fe/packages/react/ui/components/testPage/demos/core/NotificationDemo2.js +4 -0
  75. package/fe/packages/react/ui/components/testPage/demos/core/PaginationDemo.d.ts +6 -0
  76. package/fe/packages/react/ui/components/testPage/demos/core/PaginationDemo.js +39 -0
  77. package/fe/packages/react/ui/components/testPage/demos/core/PaginationDemo2.js +4 -0
  78. package/fe/packages/react/ui/components/testPage/demos/core/PreviewImageDemo.d.ts +6 -0
  79. package/fe/packages/react/ui/components/testPage/demos/core/PreviewImageDemo.js +22 -0
  80. package/fe/packages/react/ui/components/testPage/demos/core/PreviewImageDemo2.js +4 -0
  81. package/fe/packages/react/ui/components/testPage/demos/core/RadioDemo.d.ts +6 -0
  82. package/fe/packages/react/ui/components/testPage/demos/core/RadioDemo.js +129 -0
  83. package/fe/packages/react/ui/components/testPage/demos/core/RadioDemo2.js +4 -0
  84. package/fe/packages/react/ui/components/testPage/demos/core/SchemaFormDemo.d.ts +6 -0
  85. package/fe/packages/react/ui/components/testPage/demos/core/SchemaFormDemo.js +52 -0
  86. package/fe/packages/react/ui/components/testPage/demos/core/SchemaFormDemo2.js +4 -0
  87. package/fe/packages/react/ui/components/testPage/demos/core/SearchDemo.d.ts +6 -0
  88. package/fe/packages/react/ui/components/testPage/demos/core/SearchDemo.js +52 -0
  89. package/fe/packages/react/ui/components/testPage/demos/core/SearchDemo2.js +4 -0
  90. package/fe/packages/react/ui/components/testPage/demos/core/SelectDemo.d.ts +6 -0
  91. package/fe/packages/react/ui/components/testPage/demos/core/SelectDemo.js +73 -0
  92. package/fe/packages/react/ui/components/testPage/demos/core/SelectDemo2.js +4 -0
  93. package/fe/packages/react/ui/components/testPage/demos/core/SkeletonDemo.d.ts +6 -0
  94. package/fe/packages/react/ui/components/testPage/demos/core/SkeletonDemo.js +46 -0
  95. package/fe/packages/react/ui/components/testPage/demos/core/SkeletonDemo2.js +4 -0
  96. package/fe/packages/react/ui/components/testPage/demos/core/SwitchDemo.d.ts +6 -0
  97. package/fe/packages/react/ui/components/testPage/demos/core/SwitchDemo.js +36 -0
  98. package/fe/packages/react/ui/components/testPage/demos/core/SwitchDemo2.js +4 -0
  99. package/fe/packages/react/ui/components/testPage/demos/core/TableDemo.d.ts +6 -0
  100. package/fe/packages/react/ui/components/testPage/demos/core/TableDemo.js +64 -0
  101. package/fe/packages/react/ui/components/testPage/demos/core/TableDemo2.js +4 -0
  102. package/fe/packages/react/ui/components/testPage/demos/core/TableSearchDemo.d.ts +6 -0
  103. package/fe/packages/react/ui/components/testPage/demos/core/TableSearchDemo.js +74 -0
  104. package/fe/packages/react/ui/components/testPage/demos/core/TableSearchDemo2.js +4 -0
  105. package/fe/packages/react/ui/components/testPage/demos/core/TabsDemo.d.ts +6 -0
  106. package/fe/packages/react/ui/components/testPage/demos/core/TabsDemo.js +56 -0
  107. package/fe/packages/react/ui/components/testPage/demos/core/TabsDemo2.js +4 -0
  108. package/fe/packages/react/ui/components/testPage/demos/core/TextareaDemo.d.ts +6 -0
  109. package/fe/packages/react/ui/components/testPage/demos/core/TextareaDemo.js +30 -0
  110. package/fe/packages/react/ui/components/testPage/demos/core/TextareaDemo2.js +4 -0
  111. package/fe/packages/react/ui/components/testPage/demos/core/ThemeSwitcher.d.ts +6 -0
  112. package/fe/packages/react/ui/components/testPage/demos/core/ThemeSwitcher.js +96 -0
  113. package/fe/packages/react/ui/components/testPage/demos/core/ThemeSwitcher2.js +4 -0
  114. package/fe/packages/react/ui/components/testPage/demos/core/TooltipDemo.d.ts +6 -0
  115. package/fe/packages/react/ui/components/testPage/demos/core/TooltipDemo.js +29 -0
  116. package/fe/packages/react/ui/components/testPage/demos/core/TooltipDemo2.js +4 -0
  117. package/fe/packages/react/ui/components/testPage/demos/core/TreeSelectDemo.d.ts +6 -0
  118. package/fe/packages/react/ui/components/testPage/demos/core/TreeSelectDemo.js +66 -0
  119. package/fe/packages/react/ui/components/testPage/demos/core/TreeSelectDemo2.js +4 -0
  120. package/fe/packages/react/ui/components/testPage/demos/date/DateBasicDemo.d.ts +6 -0
  121. package/fe/packages/react/ui/components/testPage/demos/date/DateBasicDemo.js +31 -0
  122. package/fe/packages/react/ui/components/testPage/demos/date/DateBasicDemo2.js +4 -0
  123. package/fe/packages/react/ui/components/testPage/demos/date/DateControlledDemo.d.ts +6 -0
  124. package/fe/packages/react/ui/components/testPage/demos/date/DateControlledDemo.js +67 -0
  125. package/fe/packages/react/ui/components/testPage/demos/date/DateControlledDemo2.js +4 -0
  126. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDateDemo.d.ts +6 -0
  127. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDateDemo.js +36 -0
  128. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDateDemo2.js +4 -0
  129. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDemo.d.ts +6 -0
  130. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDemo.js +35 -0
  131. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDemo2.js +4 -0
  132. package/fe/packages/react/ui/components/testPage/demos/date/DateFormatDemo.d.ts +6 -0
  133. package/fe/packages/react/ui/components/testPage/demos/date/DateFormatDemo.js +35 -0
  134. package/fe/packages/react/ui/components/testPage/demos/date/DateFormatDemo2.js +4 -0
  135. package/fe/packages/react/ui/components/testPage/demos/date/DateRangeDemo.d.ts +6 -0
  136. package/fe/packages/react/ui/components/testPage/demos/date/DateRangeDemo.js +76 -0
  137. package/fe/packages/react/ui/components/testPage/demos/date/DateRangeDemo2.js +4 -0
  138. package/fe/packages/react/ui/components/testPage/demos/date/DateTimeDemo.d.ts +7 -0
  139. package/fe/packages/react/ui/components/testPage/demos/date/DateTimeDemo.js +60 -0
  140. package/fe/packages/react/ui/components/testPage/demos/date/DateTimeDemo2.js +4 -0
  141. package/fe/packages/react/ui/components/testPage/demos/menu/MenuAccordionDemo.d.ts +7 -0
  142. package/fe/packages/react/ui/components/testPage/demos/menu/MenuAccordionDemo.js +78 -0
  143. package/fe/packages/react/ui/components/testPage/demos/menu/MenuAccordionDemo2.js +4 -0
  144. package/fe/packages/react/ui/components/testPage/demos/menu/MenuClickTriggerDemo.d.ts +7 -0
  145. package/fe/packages/react/ui/components/testPage/demos/menu/MenuClickTriggerDemo.js +79 -0
  146. package/fe/packages/react/ui/components/testPage/demos/menu/MenuClickTriggerDemo2.js +4 -0
  147. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedDemo.d.ts +7 -0
  148. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedDemo.js +82 -0
  149. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedDemo2.js +4 -0
  150. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedNoIconDemo.d.ts +7 -0
  151. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedNoIconDemo.js +44 -0
  152. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedNoIconDemo2.js +4 -0
  153. package/fe/packages/react/ui/components/testPage/demos/menu/MenuJsxDemo.d.ts +7 -0
  154. package/fe/packages/react/ui/components/testPage/demos/menu/MenuJsxDemo.js +64 -0
  155. package/fe/packages/react/ui/components/testPage/demos/menu/MenuJsxDemo2.js +4 -0
  156. package/fe/packages/react/ui/components/testPage/demos/menu/MenuLeftMultipleDemo.d.ts +7 -0
  157. package/fe/packages/react/ui/components/testPage/demos/menu/MenuLeftMultipleDemo.js +81 -0
  158. package/fe/packages/react/ui/components/testPage/demos/menu/MenuLeftMultipleDemo2.js +4 -0
  159. package/fe/packages/react/ui/components/testPage/demos/menu/MenuPopupDemo.d.ts +7 -0
  160. package/fe/packages/react/ui/components/testPage/demos/menu/MenuPopupDemo.js +56 -0
  161. package/fe/packages/react/ui/components/testPage/demos/menu/MenuPopupDemo2.js +4 -0
  162. package/fe/packages/react/ui/components/testPage/demos/menu/MenuStateDemo.d.ts +7 -0
  163. package/fe/packages/react/ui/components/testPage/demos/menu/MenuStateDemo.js +67 -0
  164. package/fe/packages/react/ui/components/testPage/demos/menu/MenuStateDemo2.js +4 -0
  165. package/fe/packages/react/ui/components/testPage/demos/menu/MenuTopDemo.d.ts +7 -0
  166. package/fe/packages/react/ui/components/testPage/demos/menu/MenuTopDemo.js +55 -0
  167. package/fe/packages/react/ui/components/testPage/demos/menu/MenuTopDemo2.js +4 -0
  168. package/fe/packages/react/ui/components/testPage/index.js +30 -1623
  169. package/fe/packages/react/ui/components/testPage/types.d.ts +17 -0
  170. package/fe/packages/react/ui/components/testPage/types.js +0 -0
  171. package/fe/packages/react/ui/i18n/I18nProvider.js +2 -1
  172. package/model/packages/react/ui/components/Date/LocaleContext.d.ts +1 -0
  173. package/model/packages/react/ui/components/Date/locales.d.ts +5 -0
  174. package/package.json +1 -1
  175. package/types/config/config.default.d.ts +6 -0
@@ -0,0 +1,73 @@
1
+ import { Button } from "../Button/Button.js";
2
+ import "../Button/index.js";
3
+ import { useRef, useState } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { Check, Code2, Copy, Eye } from "lucide-react";
6
+ //#region packages/react/ui/components/testPage/DemoSection.tsx
7
+ function DemoSection({ title, description, source, children, contentClassName }) {
8
+ const [showSource, setShowSource] = useState(false);
9
+ const [copyStatus, setCopyStatus] = useState("idle");
10
+ const timerRef = useRef(void 0);
11
+ const sourceText = source?.trim();
12
+ const resetCopyStatus = (nextStatus) => {
13
+ setCopyStatus(nextStatus);
14
+ if (timerRef.current) clearTimeout(timerRef.current);
15
+ timerRef.current = setTimeout(() => setCopyStatus("idle"), 1400);
16
+ };
17
+ const handleCopy = async () => {
18
+ if (!sourceText) return;
19
+ try {
20
+ await navigator.clipboard.writeText(sourceText);
21
+ resetCopyStatus("copied");
22
+ } catch {
23
+ resetCopyStatus("failed");
24
+ }
25
+ };
26
+ return /* @__PURE__ */ jsxs("section", {
27
+ className: "mb-8",
28
+ children: [
29
+ /* @__PURE__ */ jsx("div", {
30
+ className: "mb-3 border-b pb-2",
31
+ children: /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h2", {
32
+ className: "text-lg font-semibold leading-7",
33
+ children: title
34
+ }), description && /* @__PURE__ */ jsx("p", {
35
+ className: "mt-1 text-sm text-muted-foreground",
36
+ children: description
37
+ })] })
38
+ }),
39
+ /* @__PURE__ */ jsx("div", {
40
+ className: contentClassName,
41
+ children
42
+ }),
43
+ sourceText && /* @__PURE__ */ jsxs("div", {
44
+ className: "mt-4 flex flex-wrap items-center gap-2 border-t border-border/70 pt-3",
45
+ children: [/* @__PURE__ */ jsx(Button, {
46
+ size: "sm",
47
+ variant: showSource ? "primary" : "default",
48
+ leftIcon: showSource ? /* @__PURE__ */ jsx(Eye, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Code2, { className: "h-4 w-4" }),
49
+ onClick: () => setShowSource((visible) => !visible),
50
+ children: showSource ? "收起源码" : "查看源码"
51
+ }), showSource && /* @__PURE__ */ jsx(Button, {
52
+ size: "sm",
53
+ variant: "text",
54
+ leftIcon: copyStatus === "copied" ? /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Copy, { className: "h-4 w-4" }),
55
+ onClick: handleCopy,
56
+ children: copyStatus === "copied" ? "已复制" : copyStatus === "failed" ? "复制失败" : "复制"
57
+ })]
58
+ }),
59
+ showSource && sourceText && /* @__PURE__ */ jsx("div", {
60
+ className: "mt-4 overflow-hidden rounded-lg border border-border bg-muted/40",
61
+ children: /* @__PURE__ */ jsx("pre", {
62
+ className: "max-h-[520px] overflow-x-auto overflow-y-auto p-4 text-xs leading-6 text-foreground",
63
+ children: /* @__PURE__ */ jsx("code", {
64
+ className: "block min-w-max whitespace-pre font-mono",
65
+ children: sourceText
66
+ })
67
+ })
68
+ })
69
+ ]
70
+ });
71
+ }
72
+ //#endregion
73
+ export { DemoSection };
@@ -1,396 +1,23 @@
1
- import { Menu } from "../Menu/Menu.js";
2
- import "../Menu/index.js";
3
- import { useState } from "react";
1
+ import { DemoSection } from "./DemoSection.js";
2
+ import { menuDemos } from "./demoRegistry.js";
4
3
  import { jsx, jsxs } from "react/jsx-runtime";
5
- import { BarChart3, Bell, FileText, HelpCircle, LayoutDashboard, Package, Settings, ShoppingCart, Users } from "lucide-react";
6
4
  //#region packages/react/ui/components/testPage/MenuTestPage.tsx
7
- var menuItems = [
8
- {
9
- key: "dashboard",
10
- label: "Dashboard",
11
- icon: /* @__PURE__ */ jsx(LayoutDashboard, { className: "h-4 w-4" })
12
- },
13
- {
14
- key: "products",
15
- label: "Products",
16
- icon: /* @__PURE__ */ jsx(Package, { className: "h-4 w-4" }),
17
- children: [
18
- {
19
- key: "products-list",
20
- label: "All Products"
21
- },
22
- {
23
- key: "products-create",
24
- label: "Create New"
25
- },
26
- {
27
- key: "products-categories",
28
- label: "Categories",
29
- children: [{
30
- key: "cat-electronics",
31
- label: "Electronics"
32
- }, {
33
- key: "cat-clothing",
34
- label: "Clothing"
35
- }]
36
- }
37
- ]
38
- },
39
- {
40
- key: "settings",
41
- label: "Settings",
42
- icon: /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4" }),
43
- children: [{
44
- key: "settings-profile",
45
- label: "Profile"
46
- }, {
47
- key: "settings-billing",
48
- label: "Billing",
49
- danger: true
50
- }]
51
- }
52
- ];
53
- var topItems = [
54
- {
55
- key: "home",
56
- label: "Home"
57
- },
58
- {
59
- key: "services",
60
- label: "Services",
61
- children: [{
62
- key: "consulting",
63
- label: "Consulting"
64
- }, {
65
- key: "development",
66
- label: "Development"
67
- }]
68
- },
69
- {
70
- key: "about",
71
- label: "About"
72
- }
73
- ];
74
- var iconMenuItems = [
75
- {
76
- key: "dashboard",
77
- label: "Dashboard",
78
- icon: /* @__PURE__ */ jsx(LayoutDashboard, { className: "h-4 w-4" })
79
- },
80
- {
81
- key: "users",
82
- label: "Users",
83
- icon: /* @__PURE__ */ jsx(Users, { className: "h-4 w-4" }),
84
- children: [{
85
- key: "users-list",
86
- label: "All Users",
87
- icon: /* @__PURE__ */ jsx(Users, { className: "h-4 w-4" })
88
- }, {
89
- key: "users-roles",
90
- label: "Roles",
91
- icon: /* @__PURE__ */ jsx(FileText, { className: "h-4 w-4" })
92
- }]
93
- },
94
- {
95
- key: "analytics",
96
- label: "Analytics",
97
- icon: /* @__PURE__ */ jsx(BarChart3, { className: "h-4 w-4" }),
98
- children: [{
99
- key: "analytics-overview",
100
- label: "Overview"
101
- }, {
102
- key: "analytics-reports",
103
- label: "Reports"
104
- }]
105
- },
106
- {
107
- key: "orders",
108
- label: "Orders",
109
- icon: /* @__PURE__ */ jsx(ShoppingCart, { className: "h-4 w-4" })
110
- },
111
- {
112
- key: "notifications",
113
- label: "Notifications",
114
- icon: /* @__PURE__ */ jsx(Bell, { className: "h-4 w-4" })
115
- },
116
- {
117
- key: "help",
118
- label: "Help",
119
- icon: /* @__PURE__ */ jsx(HelpCircle, { className: "h-4 w-4" })
120
- }
121
- ];
122
- function Section({ title, description, children }) {
123
- return /* @__PURE__ */ jsxs("section", {
124
- className: "space-y-3",
125
- children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h2", {
126
- className: "text-lg font-semibold",
127
- children: title
128
- }), description && /* @__PURE__ */ jsx("p", {
129
- className: "text-sm text-muted-foreground",
130
- children: description
131
- })] }), children]
132
- });
133
- }
134
5
  function MenuTestPage() {
135
- const [selectedKey, setSelectedKey] = useState("dashboard");
136
- const [collapsed, setCollapsed] = useState(false);
137
- const [collapsedKey, setCollapsedKey] = useState("dashboard");
138
- const [accordionKey, setAccordionKey] = useState("dashboard");
139
- const [topKey, setTopKey] = useState("home");
140
6
  return /* @__PURE__ */ jsxs("div", {
141
- className: "p-8 max-w-6xl mx-auto space-y-10",
142
- children: [
143
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h1", {
144
- className: "text-3xl font-bold mb-2",
145
- children: "Menu 组件使用示例"
146
- }), /* @__PURE__ */ jsx("p", {
147
- className: "text-muted-foreground",
148
- children: "支持 top / left 布局、多层嵌套、图标、折叠等场景"
149
- })] }),
150
- /* @__PURE__ */ jsxs(Section, {
151
- title: "1. 基础 Left 模式 (data config)",
152
- description: "最常用的侧边菜单,支持多级展开 (expandMode=multiple)",
153
- children: [/* @__PURE__ */ jsx("div", {
154
- className: "w-56 border rounded-lg overflow-hidden",
155
- children: /* @__PURE__ */ jsx(Menu, {
156
- mode: "left",
157
- expandMode: "multiple",
158
- selectedKey,
159
- onSelect: setSelectedKey,
160
- items: menuItems
161
- })
162
- }), /* @__PURE__ */ jsxs("p", {
163
- className: "text-sm text-muted-foreground",
164
- children: ["当前选中: ", selectedKey]
165
- })]
166
- }),
167
- /* @__PURE__ */ jsx(Section, {
168
- title: "2. 手风琴展开 (accordion)",
169
- description: "同一层级同时只能展开一个子菜单",
170
- children: /* @__PURE__ */ jsx("div", {
171
- className: "w-56 border rounded-lg overflow-hidden",
172
- children: /* @__PURE__ */ jsx(Menu, {
173
- mode: "left",
174
- expandMode: "accordion",
175
- selectedKey: accordionKey,
176
- onSelect: setAccordionKey,
177
- items: menuItems
178
- })
179
- })
180
- }),
181
- /* @__PURE__ */ jsx(Section, {
182
- title: "3. 折叠模式 (collapsed)",
183
- description: "收起后仅展示图标,hover 弹出子菜单",
184
- children: /* @__PURE__ */ jsx("div", {
185
- className: "border rounded-lg overflow-hidden inline-flex",
186
- children: /* @__PURE__ */ jsx(Menu, {
187
- mode: "left",
188
- selectedKey: collapsedKey,
189
- onSelect: setCollapsedKey,
190
- collapsed,
191
- onCollapse: setCollapsed,
192
- items: iconMenuItems
193
- })
194
- })
195
- }),
196
- /* @__PURE__ */ jsx(Section, {
197
- title: "4. JSX 组合式",
198
- description: "不使用 data config,直接组合 Menu.Item / Menu.SubMenu",
199
- children: /* @__PURE__ */ jsx("div", {
200
- className: "w-56 border rounded-lg overflow-hidden",
201
- children: /* @__PURE__ */ jsxs(Menu, {
202
- mode: "left",
203
- defaultSelectedKey: "overview",
204
- children: [
205
- /* @__PURE__ */ jsx(Menu.Item, {
206
- eventKey: "overview",
207
- icon: /* @__PURE__ */ jsx(LayoutDashboard, { className: "h-4 w-4" }),
208
- children: "Overview"
209
- }),
210
- /* @__PURE__ */ jsxs(Menu.SubMenu, {
211
- eventKey: "manage",
212
- label: "Manage",
213
- icon: /* @__PURE__ */ jsx(Package, { className: "h-4 w-4" }),
214
- children: [/* @__PURE__ */ jsx(Menu.Item, {
215
- eventKey: "manage-list",
216
- children: "List"
217
- }), /* @__PURE__ */ jsx(Menu.Item, {
218
- eventKey: "manage-edit",
219
- children: "Edit"
220
- })]
221
- }),
222
- /* @__PURE__ */ jsxs(Menu.SubMenu, {
223
- eventKey: "settings",
224
- label: "Settings",
225
- icon: /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4" }),
226
- children: [/* @__PURE__ */ jsx(Menu.Item, {
227
- eventKey: "jsx-profile",
228
- children: "Profile"
229
- }), /* @__PURE__ */ jsx(Menu.Item, {
230
- eventKey: "jsx-billing",
231
- danger: true,
232
- children: "Billing"
233
- })]
234
- }),
235
- /* @__PURE__ */ jsx(Menu.Item, {
236
- eventKey: "help",
237
- icon: /* @__PURE__ */ jsx(HelpCircle, { className: "h-4 w-4" }),
238
- children: "Help"
239
- })
240
- ]
241
- })
242
- })
243
- }),
244
- /* @__PURE__ */ jsx(Section, {
245
- title: "5. 子菜单弹出模式 (popup)",
246
- description: "展开状态下也能让子菜单以弹出方式展示",
247
- children: /* @__PURE__ */ jsx("div", {
248
- className: "w-56 border rounded-lg overflow-hidden",
249
- children: /* @__PURE__ */ jsx(Menu, {
250
- mode: "left",
251
- expandMode: "multiple",
252
- selectedKey,
253
- onSelect: setSelectedKey,
254
- items: [
255
- {
256
- key: "d1",
257
- label: "Dashboard",
258
- icon: /* @__PURE__ */ jsx(LayoutDashboard, { className: "h-4 w-4" })
259
- },
260
- {
261
- key: "p1",
262
- label: "Products",
263
- icon: /* @__PURE__ */ jsx(Package, { className: "h-4 w-4" }),
264
- popup: true,
265
- children: [{
266
- key: "p1-list",
267
- label: "All Products"
268
- }, {
269
- key: "p1-create",
270
- label: "Create New"
271
- }]
272
- },
273
- {
274
- key: "d3",
275
- label: "Help",
276
- icon: /* @__PURE__ */ jsx(HelpCircle, { className: "h-4 w-4" })
277
- }
278
- ]
279
- })
280
- })
281
- }),
282
- /* @__PURE__ */ jsxs(Section, {
283
- title: "6. Top 模式",
284
- description: "一级菜单水平排列,子菜单下拉弹出",
285
- children: [/* @__PURE__ */ jsx("div", {
286
- className: "border rounded-lg w-full",
287
- children: /* @__PURE__ */ jsx(Menu, {
288
- mode: "top",
289
- selectedKey: topKey,
290
- onSelect: setTopKey,
291
- items: topItems,
292
- className: "border-b"
293
- })
294
- }), /* @__PURE__ */ jsxs("p", {
295
- className: "text-sm text-muted-foreground",
296
- children: ["当前选中: ", topKey]
297
- })]
298
- }),
299
- /* @__PURE__ */ jsx(Section, {
300
- title: "7. Click 触发",
301
- description: "点击展开子菜单,而非 hover",
302
- children: /* @__PURE__ */ jsx("div", {
303
- className: "w-56 border rounded-lg overflow-hidden",
304
- children: /* @__PURE__ */ jsx(Menu, {
305
- mode: "left",
306
- expandTrigger: "click",
307
- expandMode: "multiple",
308
- selectedKey,
309
- onSelect: setSelectedKey,
310
- items: menuItems
311
- })
312
- })
313
- }),
314
- /* @__PURE__ */ jsx(Section, {
315
- title: "8. 状态展示",
316
- description: "disabled / danger 样式演示",
317
- children: /* @__PURE__ */ jsx("div", {
318
- className: "w-56 border rounded-lg overflow-hidden",
319
- children: /* @__PURE__ */ jsxs(Menu, {
320
- mode: "left",
321
- defaultSelectedKey: "normal",
322
- children: [
323
- /* @__PURE__ */ jsx(Menu.Item, {
324
- eventKey: "normal",
325
- icon: /* @__PURE__ */ jsx(FileText, { className: "h-4 w-4" }),
326
- children: "正常菜单项"
327
- }),
328
- /* @__PURE__ */ jsx(Menu.Item, {
329
- eventKey: "disabled-item",
330
- disabled: true,
331
- icon: /* @__PURE__ */ jsx(FileText, { className: "h-4 w-4" }),
332
- children: "禁用菜单项"
333
- }),
334
- /* @__PURE__ */ jsx(Menu.Item, {
335
- eventKey: "danger-item",
336
- danger: true,
337
- icon: /* @__PURE__ */ jsx(FileText, { className: "h-4 w-4" }),
338
- children: "危险菜单项"
339
- }),
340
- /* @__PURE__ */ jsxs(Menu.SubMenu, {
341
- eventKey: "sub-disabled",
342
- label: "含禁用子项",
343
- icon: /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4" }),
344
- children: [
345
- /* @__PURE__ */ jsx(Menu.Item, {
346
- eventKey: "sub-normal",
347
- children: "正常子项"
348
- }),
349
- /* @__PURE__ */ jsx(Menu.Item, {
350
- eventKey: "sub-danger",
351
- danger: true,
352
- children: "危险子项"
353
- }),
354
- /* @__PURE__ */ jsx(Menu.Item, {
355
- eventKey: "sub-disabled-item",
356
- disabled: true,
357
- children: "禁用子项"
358
- })
359
- ]
360
- })
361
- ]
362
- })
363
- })
364
- }),
365
- /* @__PURE__ */ jsx(Section, {
366
- title: "9. 无 icon 折叠",
367
- description: "收起时无 icon 的菜单项留白占位",
368
- children: /* @__PURE__ */ jsx("div", {
369
- className: "border rounded-lg overflow-hidden inline-flex",
370
- children: /* @__PURE__ */ jsx(Menu, {
371
- mode: "left",
372
- defaultCollapsed: true,
373
- expandMode: "multiple",
374
- items: [
375
- {
376
- key: "a",
377
- label: "Home",
378
- icon: /* @__PURE__ */ jsx(LayoutDashboard, { className: "h-4 w-4" })
379
- },
380
- {
381
- key: "b",
382
- label: "Reports"
383
- },
384
- {
385
- key: "c",
386
- label: "Settings",
387
- icon: /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4" })
388
- }
389
- ]
390
- })
391
- })
392
- })
393
- ]
7
+ className: "p-8 max-w-6xl mx-auto space-y-8",
8
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h1", {
9
+ className: "text-3xl font-bold mb-2",
10
+ children: "Menu 组件使用示例"
11
+ }), /* @__PURE__ */ jsx("p", {
12
+ className: "text-muted-foreground",
13
+ children: "支持 top / left 布局、多层嵌套、图标、折叠等场景"
14
+ })] }), menuDemos.map(({ id, Component, meta, source }) => /* @__PURE__ */ jsx(DemoSection, {
15
+ title: meta.title,
16
+ description: meta.description,
17
+ source,
18
+ contentClassName: meta.contentClassName,
19
+ children: /* @__PURE__ */ jsx(Component, {})
20
+ }, id))]
394
21
  });
395
22
  }
396
23
  //#endregion
@@ -0,0 +1,4 @@
1
+ import type { DemoEntry } from "./types";
2
+ export declare const coreDemos: DemoEntry[];
3
+ export declare const dateDemos: DemoEntry[];
4
+ export declare const menuDemos: DemoEntry[];