@_tc/template-core 0.2.1-bate.1 → 0.2.2

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 (167) hide show
  1. package/README.md +34 -0
  2. package/fe/_virtual/_rolldown/runtime.js +13 -0
  3. package/fe/packages/react/ui/components/Date/Calendar.js +1 -5
  4. package/fe/packages/react/ui/components/Date/DateTestPage.js +15 -331
  5. package/fe/packages/react/ui/components/Date/LocaleContext.d.ts +1 -0
  6. package/fe/packages/react/ui/components/Date/index.js +2 -2
  7. package/fe/packages/react/ui/components/Date/locales.d.ts +5 -0
  8. package/fe/packages/react/ui/components/Date/locales.js +16 -1
  9. package/fe/packages/react/ui/components/testPage/DemoSection.d.ts +10 -0
  10. package/fe/packages/react/ui/components/testPage/DemoSection.js +73 -0
  11. package/fe/packages/react/ui/components/testPage/MenuTestPage.js +16 -389
  12. package/fe/packages/react/ui/components/testPage/demoRegistry.d.ts +4 -0
  13. package/fe/packages/react/ui/components/testPage/demoRegistry.js +214 -0
  14. package/fe/packages/react/ui/components/testPage/demos/core/BreadcrumbDemo.d.ts +6 -0
  15. package/fe/packages/react/ui/components/testPage/demos/core/BreadcrumbDemo.js +44 -0
  16. package/fe/packages/react/ui/components/testPage/demos/core/BreadcrumbDemo2.js +4 -0
  17. package/fe/packages/react/ui/components/testPage/demos/core/ButtonDemo.d.ts +6 -0
  18. package/fe/packages/react/ui/components/testPage/demos/core/ButtonDemo.js +85 -0
  19. package/fe/packages/react/ui/components/testPage/demos/core/ButtonDemo2.js +4 -0
  20. package/fe/packages/react/ui/components/testPage/demos/core/CardDemo.d.ts +6 -0
  21. package/fe/packages/react/ui/components/testPage/demos/core/CardDemo.js +52 -0
  22. package/fe/packages/react/ui/components/testPage/demos/core/CardDemo2.js +4 -0
  23. package/fe/packages/react/ui/components/testPage/demos/core/CheckboxDemo.d.ts +6 -0
  24. package/fe/packages/react/ui/components/testPage/demos/core/CheckboxDemo.js +41 -0
  25. package/fe/packages/react/ui/components/testPage/demos/core/CheckboxDemo2.js +4 -0
  26. package/fe/packages/react/ui/components/testPage/demos/core/ConfirmDialogDemo.d.ts +6 -0
  27. package/fe/packages/react/ui/components/testPage/demos/core/ConfirmDialogDemo.js +35 -0
  28. package/fe/packages/react/ui/components/testPage/demos/core/ConfirmDialogDemo2.js +4 -0
  29. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo.d.ts +6 -0
  30. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo.js +243 -0
  31. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo2.js +4 -0
  32. package/fe/packages/react/ui/components/testPage/demos/core/DrawerDemo.d.ts +6 -0
  33. package/fe/packages/react/ui/components/testPage/demos/core/DrawerDemo.js +105 -0
  34. package/fe/packages/react/ui/components/testPage/demos/core/DrawerDemo2.js +4 -0
  35. package/fe/packages/react/ui/components/testPage/demos/core/DropdownDemo.d.ts +6 -0
  36. package/fe/packages/react/ui/components/testPage/demos/core/DropdownDemo.js +48 -0
  37. package/fe/packages/react/ui/components/testPage/demos/core/DropdownDemo2.js +4 -0
  38. package/fe/packages/react/ui/components/testPage/demos/core/FormDemo.d.ts +6 -0
  39. package/fe/packages/react/ui/components/testPage/demos/core/FormDemo.js +56 -0
  40. package/fe/packages/react/ui/components/testPage/demos/core/FormDemo2.js +4 -0
  41. package/fe/packages/react/ui/components/testPage/demos/core/ImageUploadDemo.d.ts +6 -0
  42. package/fe/packages/react/ui/components/testPage/demos/core/ImageUploadDemo.js +26 -0
  43. package/fe/packages/react/ui/components/testPage/demos/core/ImageUploadDemo2.js +4 -0
  44. package/fe/packages/react/ui/components/testPage/demos/core/InputDemo.d.ts +6 -0
  45. package/fe/packages/react/ui/components/testPage/demos/core/InputDemo.js +55 -0
  46. package/fe/packages/react/ui/components/testPage/demos/core/InputDemo2.js +4 -0
  47. package/fe/packages/react/ui/components/testPage/demos/core/InputNumberDemo.d.ts +6 -0
  48. package/fe/packages/react/ui/components/testPage/demos/core/InputNumberDemo.js +65 -0
  49. package/fe/packages/react/ui/components/testPage/demos/core/InputNumberDemo2.js +4 -0
  50. package/fe/packages/react/ui/components/testPage/demos/core/LabelDemo.d.ts +6 -0
  51. package/fe/packages/react/ui/components/testPage/demos/core/LabelDemo.js +33 -0
  52. package/fe/packages/react/ui/components/testPage/demos/core/LabelDemo2.js +4 -0
  53. package/fe/packages/react/ui/components/testPage/demos/core/LayoutDemo.d.ts +6 -0
  54. package/fe/packages/react/ui/components/testPage/demos/core/LayoutDemo.js +64 -0
  55. package/fe/packages/react/ui/components/testPage/demos/core/LayoutDemo2.js +4 -0
  56. package/fe/packages/react/ui/components/testPage/demos/core/LoadingDemo.d.ts +6 -0
  57. package/fe/packages/react/ui/components/testPage/demos/core/LoadingDemo.js +32 -0
  58. package/fe/packages/react/ui/components/testPage/demos/core/LoadingDemo2.js +4 -0
  59. package/fe/packages/react/ui/components/testPage/demos/core/MessageDemo.d.ts +6 -0
  60. package/fe/packages/react/ui/components/testPage/demos/core/MessageDemo.js +44 -0
  61. package/fe/packages/react/ui/components/testPage/demos/core/MessageDemo2.js +4 -0
  62. package/fe/packages/react/ui/components/testPage/demos/core/ModalDemo.d.ts +6 -0
  63. package/fe/packages/react/ui/components/testPage/demos/core/ModalDemo.js +61 -0
  64. package/fe/packages/react/ui/components/testPage/demos/core/ModalDemo2.js +4 -0
  65. package/fe/packages/react/ui/components/testPage/demos/core/NotificationDemo.d.ts +6 -0
  66. package/fe/packages/react/ui/components/testPage/demos/core/NotificationDemo.js +50 -0
  67. package/fe/packages/react/ui/components/testPage/demos/core/NotificationDemo2.js +4 -0
  68. package/fe/packages/react/ui/components/testPage/demos/core/PaginationDemo.d.ts +6 -0
  69. package/fe/packages/react/ui/components/testPage/demos/core/PaginationDemo.js +39 -0
  70. package/fe/packages/react/ui/components/testPage/demos/core/PaginationDemo2.js +4 -0
  71. package/fe/packages/react/ui/components/testPage/demos/core/PreviewImageDemo.d.ts +6 -0
  72. package/fe/packages/react/ui/components/testPage/demos/core/PreviewImageDemo.js +22 -0
  73. package/fe/packages/react/ui/components/testPage/demos/core/PreviewImageDemo2.js +4 -0
  74. package/fe/packages/react/ui/components/testPage/demos/core/RadioDemo.d.ts +6 -0
  75. package/fe/packages/react/ui/components/testPage/demos/core/RadioDemo.js +129 -0
  76. package/fe/packages/react/ui/components/testPage/demos/core/RadioDemo2.js +4 -0
  77. package/fe/packages/react/ui/components/testPage/demos/core/SchemaFormDemo.d.ts +6 -0
  78. package/fe/packages/react/ui/components/testPage/demos/core/SchemaFormDemo.js +52 -0
  79. package/fe/packages/react/ui/components/testPage/demos/core/SchemaFormDemo2.js +4 -0
  80. package/fe/packages/react/ui/components/testPage/demos/core/SearchDemo.d.ts +6 -0
  81. package/fe/packages/react/ui/components/testPage/demos/core/SearchDemo.js +52 -0
  82. package/fe/packages/react/ui/components/testPage/demos/core/SearchDemo2.js +4 -0
  83. package/fe/packages/react/ui/components/testPage/demos/core/SelectDemo.d.ts +6 -0
  84. package/fe/packages/react/ui/components/testPage/demos/core/SelectDemo.js +73 -0
  85. package/fe/packages/react/ui/components/testPage/demos/core/SelectDemo2.js +4 -0
  86. package/fe/packages/react/ui/components/testPage/demos/core/SkeletonDemo.d.ts +6 -0
  87. package/fe/packages/react/ui/components/testPage/demos/core/SkeletonDemo.js +46 -0
  88. package/fe/packages/react/ui/components/testPage/demos/core/SkeletonDemo2.js +4 -0
  89. package/fe/packages/react/ui/components/testPage/demos/core/SwitchDemo.d.ts +6 -0
  90. package/fe/packages/react/ui/components/testPage/demos/core/SwitchDemo.js +36 -0
  91. package/fe/packages/react/ui/components/testPage/demos/core/SwitchDemo2.js +4 -0
  92. package/fe/packages/react/ui/components/testPage/demos/core/TableDemo.d.ts +6 -0
  93. package/fe/packages/react/ui/components/testPage/demos/core/TableDemo.js +64 -0
  94. package/fe/packages/react/ui/components/testPage/demos/core/TableDemo2.js +4 -0
  95. package/fe/packages/react/ui/components/testPage/demos/core/TableSearchDemo.d.ts +6 -0
  96. package/fe/packages/react/ui/components/testPage/demos/core/TableSearchDemo.js +74 -0
  97. package/fe/packages/react/ui/components/testPage/demos/core/TableSearchDemo2.js +4 -0
  98. package/fe/packages/react/ui/components/testPage/demos/core/TabsDemo.d.ts +6 -0
  99. package/fe/packages/react/ui/components/testPage/demos/core/TabsDemo.js +56 -0
  100. package/fe/packages/react/ui/components/testPage/demos/core/TabsDemo2.js +4 -0
  101. package/fe/packages/react/ui/components/testPage/demos/core/TextareaDemo.d.ts +6 -0
  102. package/fe/packages/react/ui/components/testPage/demos/core/TextareaDemo.js +30 -0
  103. package/fe/packages/react/ui/components/testPage/demos/core/TextareaDemo2.js +4 -0
  104. package/fe/packages/react/ui/components/testPage/demos/core/ThemeSwitcher.d.ts +6 -0
  105. package/fe/packages/react/ui/components/testPage/demos/core/ThemeSwitcher.js +96 -0
  106. package/fe/packages/react/ui/components/testPage/demos/core/ThemeSwitcher2.js +4 -0
  107. package/fe/packages/react/ui/components/testPage/demos/core/TooltipDemo.d.ts +6 -0
  108. package/fe/packages/react/ui/components/testPage/demos/core/TooltipDemo.js +29 -0
  109. package/fe/packages/react/ui/components/testPage/demos/core/TooltipDemo2.js +4 -0
  110. package/fe/packages/react/ui/components/testPage/demos/core/TreeSelectDemo.d.ts +6 -0
  111. package/fe/packages/react/ui/components/testPage/demos/core/TreeSelectDemo.js +66 -0
  112. package/fe/packages/react/ui/components/testPage/demos/core/TreeSelectDemo2.js +4 -0
  113. package/fe/packages/react/ui/components/testPage/demos/date/DateBasicDemo.d.ts +6 -0
  114. package/fe/packages/react/ui/components/testPage/demos/date/DateBasicDemo.js +31 -0
  115. package/fe/packages/react/ui/components/testPage/demos/date/DateBasicDemo2.js +4 -0
  116. package/fe/packages/react/ui/components/testPage/demos/date/DateControlledDemo.d.ts +6 -0
  117. package/fe/packages/react/ui/components/testPage/demos/date/DateControlledDemo.js +67 -0
  118. package/fe/packages/react/ui/components/testPage/demos/date/DateControlledDemo2.js +4 -0
  119. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDateDemo.d.ts +6 -0
  120. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDateDemo.js +36 -0
  121. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDateDemo2.js +4 -0
  122. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDemo.d.ts +6 -0
  123. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDemo.js +35 -0
  124. package/fe/packages/react/ui/components/testPage/demos/date/DateDisabledDemo2.js +4 -0
  125. package/fe/packages/react/ui/components/testPage/demos/date/DateFormatDemo.d.ts +6 -0
  126. package/fe/packages/react/ui/components/testPage/demos/date/DateFormatDemo.js +35 -0
  127. package/fe/packages/react/ui/components/testPage/demos/date/DateFormatDemo2.js +4 -0
  128. package/fe/packages/react/ui/components/testPage/demos/date/DateRangeDemo.d.ts +6 -0
  129. package/fe/packages/react/ui/components/testPage/demos/date/DateRangeDemo.js +76 -0
  130. package/fe/packages/react/ui/components/testPage/demos/date/DateRangeDemo2.js +4 -0
  131. package/fe/packages/react/ui/components/testPage/demos/date/DateTimeDemo.d.ts +7 -0
  132. package/fe/packages/react/ui/components/testPage/demos/date/DateTimeDemo.js +60 -0
  133. package/fe/packages/react/ui/components/testPage/demos/date/DateTimeDemo2.js +4 -0
  134. package/fe/packages/react/ui/components/testPage/demos/menu/MenuAccordionDemo.d.ts +7 -0
  135. package/fe/packages/react/ui/components/testPage/demos/menu/MenuAccordionDemo.js +78 -0
  136. package/fe/packages/react/ui/components/testPage/demos/menu/MenuAccordionDemo2.js +4 -0
  137. package/fe/packages/react/ui/components/testPage/demos/menu/MenuClickTriggerDemo.d.ts +7 -0
  138. package/fe/packages/react/ui/components/testPage/demos/menu/MenuClickTriggerDemo.js +79 -0
  139. package/fe/packages/react/ui/components/testPage/demos/menu/MenuClickTriggerDemo2.js +4 -0
  140. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedDemo.d.ts +7 -0
  141. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedDemo.js +82 -0
  142. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedDemo2.js +4 -0
  143. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedNoIconDemo.d.ts +7 -0
  144. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedNoIconDemo.js +44 -0
  145. package/fe/packages/react/ui/components/testPage/demos/menu/MenuCollapsedNoIconDemo2.js +4 -0
  146. package/fe/packages/react/ui/components/testPage/demos/menu/MenuJsxDemo.d.ts +7 -0
  147. package/fe/packages/react/ui/components/testPage/demos/menu/MenuJsxDemo.js +64 -0
  148. package/fe/packages/react/ui/components/testPage/demos/menu/MenuJsxDemo2.js +4 -0
  149. package/fe/packages/react/ui/components/testPage/demos/menu/MenuLeftMultipleDemo.d.ts +7 -0
  150. package/fe/packages/react/ui/components/testPage/demos/menu/MenuLeftMultipleDemo.js +81 -0
  151. package/fe/packages/react/ui/components/testPage/demos/menu/MenuLeftMultipleDemo2.js +4 -0
  152. package/fe/packages/react/ui/components/testPage/demos/menu/MenuPopupDemo.d.ts +7 -0
  153. package/fe/packages/react/ui/components/testPage/demos/menu/MenuPopupDemo.js +56 -0
  154. package/fe/packages/react/ui/components/testPage/demos/menu/MenuPopupDemo2.js +4 -0
  155. package/fe/packages/react/ui/components/testPage/demos/menu/MenuStateDemo.d.ts +7 -0
  156. package/fe/packages/react/ui/components/testPage/demos/menu/MenuStateDemo.js +67 -0
  157. package/fe/packages/react/ui/components/testPage/demos/menu/MenuStateDemo2.js +4 -0
  158. package/fe/packages/react/ui/components/testPage/demos/menu/MenuTopDemo.d.ts +7 -0
  159. package/fe/packages/react/ui/components/testPage/demos/menu/MenuTopDemo.js +55 -0
  160. package/fe/packages/react/ui/components/testPage/demos/menu/MenuTopDemo2.js +4 -0
  161. package/fe/packages/react/ui/components/testPage/index.js +30 -1623
  162. package/fe/packages/react/ui/components/testPage/types.d.ts +17 -0
  163. package/fe/packages/react/ui/components/testPage/types.js +0 -0
  164. package/fe/packages/react/ui/i18n/I18nProvider.js +2 -1
  165. package/model/packages/react/ui/components/Date/LocaleContext.d.ts +1 -0
  166. package/model/packages/react/ui/components/Date/locales.d.ts +5 -0
  167. package/package.json +1 -1
@@ -0,0 +1,73 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Select } from "../../../Select/Select.js";
3
+ import "../../../index.js";
4
+ import { useState } from "react";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region packages/react/ui/components/testPage/demos/core/SelectDemo.tsx
7
+ var SelectDemo_exports = /* @__PURE__ */ __exportAll({
8
+ default: () => SelectDemo,
9
+ demoMeta: () => demoMeta
10
+ });
11
+ var demoMeta = {
12
+ title: "Select",
13
+ order: 6,
14
+ contentClassName: "flex flex-wrap gap-3 items-start"
15
+ };
16
+ function SelectDemo() {
17
+ const [val, setVal] = useState(void 0);
18
+ const options = [
19
+ {
20
+ label: "选项 A",
21
+ value: "a"
22
+ },
23
+ {
24
+ label: "选项 B",
25
+ value: "b"
26
+ },
27
+ {
28
+ label: "选项 C",
29
+ value: "c"
30
+ }
31
+ ];
32
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
33
+ /* @__PURE__ */ jsx(Select, {
34
+ options,
35
+ value: val,
36
+ onChange: setVal,
37
+ placeholder: "请选择",
38
+ className: "w-40"
39
+ }),
40
+ /* @__PURE__ */ jsx(Select, {
41
+ options,
42
+ placeholder: "不可搜索",
43
+ searchable: false,
44
+ className: "w-40"
45
+ }),
46
+ /* @__PURE__ */ jsx(Select, {
47
+ options,
48
+ placeholder: "不可清除",
49
+ clearable: false,
50
+ className: "w-40"
51
+ }),
52
+ /* @__PURE__ */ jsx(Select, {
53
+ options,
54
+ disabled: true,
55
+ placeholder: "禁用",
56
+ className: "w-40"
57
+ }),
58
+ /* @__PURE__ */ jsxs("div", {
59
+ className: "relative w-64 rounded-lg border border-border bg-muted/30 p-4",
60
+ children: [/* @__PURE__ */ jsx("div", {
61
+ className: "mb-2 text-sm text-muted-foreground",
62
+ children: "parent popup container"
63
+ }), /* @__PURE__ */ jsx(Select, {
64
+ options,
65
+ placeholder: "挂载到父元素",
66
+ getPopupContainer: "parent",
67
+ className: "w-full"
68
+ })]
69
+ })
70
+ ] });
71
+ }
72
+ //#endregion
73
+ export { SelectDemo_exports, SelectDemo as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/SelectDemo.tsx?raw
2
+ var SelectDemo_default = "import { Select } from '@tc/ui-react/components'\nimport { useState } from 'react'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'Select',\n order: 6,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\n// ─── Select ──────────────────────────────────────────────────────────────────\n\nexport default function SelectDemo() {\n const [val, setVal] = useState<string | number | undefined>(undefined)\n const options = [\n { label: '选项 A', value: 'a' },\n { label: '选项 B', value: 'b' },\n { label: '选项 C', value: 'c' },\n ]\n return (\n <>\n <Select options={options} value={val} onChange={setVal} placeholder=\"请选择\" className=\"w-40\" />\n <Select options={options} placeholder=\"不可搜索\" searchable={false} className=\"w-40\" />\n <Select options={options} placeholder=\"不可清除\" clearable={false} className=\"w-40\" />\n <Select options={options} disabled placeholder=\"禁用\" className=\"w-40\" />\n <div className=\"relative w-64 rounded-lg border border-border bg-muted/30 p-4\">\n <div className=\"mb-2 text-sm text-muted-foreground\">parent popup container</div>\n <Select options={options} placeholder=\"挂载到父元素\" getPopupContainer=\"parent\" className=\"w-full\" />\n </div>\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { SelectDemo_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function SkeletonDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,46 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Skeleton } from "../../../Skeleton/Skeleton.js";
3
+ import "../../../index.js";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ //#region packages/react/ui/components/testPage/demos/core/SkeletonDemo.tsx
6
+ var SkeletonDemo_exports = /* @__PURE__ */ __exportAll({
7
+ default: () => SkeletonDemo,
8
+ demoMeta: () => demoMeta
9
+ });
10
+ var demoMeta = {
11
+ title: "Skeleton",
12
+ order: 30,
13
+ contentClassName: "flex flex-wrap gap-3 items-start"
14
+ };
15
+ function SkeletonDemo() {
16
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", {
17
+ className: "w-full space-y-4",
18
+ children: [
19
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
20
+ className: "text-xs text-gray-500 mb-1",
21
+ children: "pageloading"
22
+ }), /* @__PURE__ */ jsx(Skeleton, {
23
+ mode: "pageloading",
24
+ rows: 3,
25
+ showTitle: true,
26
+ showActions: true
27
+ })] }),
28
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
29
+ className: "text-xs text-gray-500 mb-1",
30
+ children: "tableloading"
31
+ }), /* @__PURE__ */ jsx(Skeleton, {
32
+ mode: "tableloading",
33
+ rows: 4
34
+ })] }),
35
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
36
+ className: "text-xs text-gray-500 mb-1",
37
+ children: "componentsloading"
38
+ }), /* @__PURE__ */ jsx(Skeleton, {
39
+ mode: "componentsloading",
40
+ rows: 2
41
+ })] })
42
+ ]
43
+ }) });
44
+ }
45
+ //#endregion
46
+ export { SkeletonDemo_exports, SkeletonDemo as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/SkeletonDemo.tsx?raw
2
+ var SkeletonDemo_default = "import { Skeleton } from '@tc/ui-react/components'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'Skeleton',\n order: 30,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\n// ─── Skeleton ─────────────────────────────────────────────────────────────────\n\nexport default function SkeletonDemo() {\n return (\n <>\n <div className=\"w-full space-y-4\">\n <div>\n <p className=\"text-xs text-gray-500 mb-1\">pageloading</p>\n <Skeleton mode=\"pageloading\" rows={3} showTitle showActions />\n </div>\n <div>\n <p className=\"text-xs text-gray-500 mb-1\">tableloading</p>\n <Skeleton mode=\"tableloading\" rows={4} />\n </div>\n <div>\n <p className=\"text-xs text-gray-500 mb-1\">componentsloading</p>\n <Skeleton mode=\"componentsloading\" rows={2} />\n </div>\n </div>\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { SkeletonDemo_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function SwitchDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Switch } from "../../../Switch/Switch.js";
3
+ import "../../../index.js";
4
+ import { useState } from "react";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region packages/react/ui/components/testPage/demos/core/SwitchDemo.tsx
7
+ var SwitchDemo_exports = /* @__PURE__ */ __exportAll({
8
+ default: () => SwitchDemo,
9
+ demoMeta: () => demoMeta
10
+ });
11
+ var demoMeta = {
12
+ title: "Switch",
13
+ order: 9,
14
+ contentClassName: "flex flex-wrap gap-3 items-start"
15
+ };
16
+ function SwitchDemo() {
17
+ const [on, setOn] = useState(false);
18
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
19
+ /* @__PURE__ */ jsx(Switch, {
20
+ checked: on,
21
+ onChange: setOn
22
+ }),
23
+ /* @__PURE__ */ jsx("span", {
24
+ className: "self-center text-sm",
25
+ children: on ? "ON" : "OFF"
26
+ }),
27
+ /* @__PURE__ */ jsx(Switch, { defaultChecked: true }),
28
+ /* @__PURE__ */ jsx(Switch, { disabled: true }),
29
+ /* @__PURE__ */ jsx(Switch, {
30
+ disabled: true,
31
+ checked: true
32
+ })
33
+ ] });
34
+ }
35
+ //#endregion
36
+ export { SwitchDemo_exports, SwitchDemo as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/SwitchDemo.tsx?raw
2
+ var SwitchDemo_default = "import { Switch } from '@tc/ui-react/components'\nimport { useState } from 'react'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'Switch',\n order: 9,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\n// ─── Switch ──────────────────────────────────────────────────────────────────\n\nexport default function SwitchDemo() {\n const [on, setOn] = useState(false)\n return (\n <>\n <Switch checked={on} onChange={setOn} />\n <span className=\"self-center text-sm\">{on ? 'ON' : 'OFF'}</span>\n <Switch defaultChecked />\n <Switch disabled />\n <Switch disabled checked />\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { SwitchDemo_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function TableDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,64 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Button } from "../../../Button/Button.js";
3
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../../../table/table.js";
4
+ import "../../../index.js";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region packages/react/ui/components/testPage/demos/core/TableDemo.tsx
7
+ var TableDemo_exports = /* @__PURE__ */ __exportAll({
8
+ default: () => TableDemo,
9
+ demoMeta: () => demoMeta
10
+ });
11
+ var demoMeta = {
12
+ title: "Table (低层)",
13
+ order: 19,
14
+ contentClassName: "flex flex-wrap gap-3 items-start"
15
+ };
16
+ function TableDemo() {
17
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", {
18
+ className: "w-full",
19
+ children: /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs("tr", { children: [
20
+ /* @__PURE__ */ jsx(TableHead, { children: "ID" }),
21
+ /* @__PURE__ */ jsx(TableHead, { children: "姓名" }),
22
+ /* @__PURE__ */ jsx(TableHead, { children: "角色" }),
23
+ /* @__PURE__ */ jsx(TableHead, { children: "状态" }),
24
+ /* @__PURE__ */ jsx(TableHead, {
25
+ isAction: true,
26
+ children: "操作"
27
+ })
28
+ ] }) }), /* @__PURE__ */ jsx(TableBody, { children: [
29
+ {
30
+ id: 1,
31
+ name: "张三",
32
+ role: "管理员",
33
+ status: "正常"
34
+ },
35
+ {
36
+ id: 2,
37
+ name: "李四",
38
+ role: "用户",
39
+ status: "禁用"
40
+ },
41
+ {
42
+ id: 3,
43
+ name: "王五",
44
+ role: "审计员",
45
+ status: "正常"
46
+ }
47
+ ].map((row) => /* @__PURE__ */ jsxs(TableRow, { children: [
48
+ /* @__PURE__ */ jsx(TableCell, { children: row.id }),
49
+ /* @__PURE__ */ jsx(TableCell, { children: row.name }),
50
+ /* @__PURE__ */ jsx(TableCell, { children: row.role }),
51
+ /* @__PURE__ */ jsx(TableCell, { children: row.status }),
52
+ /* @__PURE__ */ jsx(TableCell, {
53
+ isAction: true,
54
+ children: /* @__PURE__ */ jsx(Button, {
55
+ variant: "link",
56
+ size: "sm",
57
+ children: "编辑"
58
+ })
59
+ })
60
+ ] }, row.id)) })] })
61
+ }) });
62
+ }
63
+ //#endregion
64
+ export { TableDemo_exports, TableDemo as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/TableDemo.tsx?raw
2
+ var TableDemo_default = "import {\n Button,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow\n} from '@tc/ui-react/components'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'Table (低层)',\n order: 19,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\n// ─── Table (低层组件) ─────────────────────────────────────────────────────────\n\nexport default function TableDemo() {\n const rows = [\n { id: 1, name: '张三', role: '管理员', status: '正常' },\n { id: 2, name: '李四', role: '用户', status: '禁用' },\n { id: 3, name: '王五', role: '审计员', status: '正常' },\n ]\n return (\n <>\n <div className=\"w-full\">\n <Table>\n <TableHeader>\n <tr>\n <TableHead>ID</TableHead>\n <TableHead>姓名</TableHead>\n <TableHead>角色</TableHead>\n <TableHead>状态</TableHead>\n <TableHead isAction>操作</TableHead>\n </tr>\n </TableHeader>\n <TableBody>\n {rows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>{row.id}</TableCell>\n <TableCell>{row.name}</TableCell>\n <TableCell>{row.role}</TableCell>\n <TableCell>{row.status}</TableCell>\n <TableCell isAction>\n <Button variant=\"link\" size=\"sm\">\n 编辑\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { TableDemo_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function TableSearchDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,74 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import TableSearch from "../../../TableSearch/TableSearch.js";
3
+ import "../../../index.js";
4
+ import { Fragment, jsx } from "react/jsx-runtime";
5
+ //#region packages/react/ui/components/testPage/demos/core/TableSearchDemo.tsx
6
+ var TableSearchDemo_exports = /* @__PURE__ */ __exportAll({
7
+ default: () => TableSearchDemo,
8
+ demoMeta: () => demoMeta
9
+ });
10
+ var demoMeta = {
11
+ title: "TableSearch",
12
+ order: 29,
13
+ contentClassName: "flex flex-wrap gap-3 items-start"
14
+ };
15
+ function TableSearchDemo() {
16
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(TableSearch, {
17
+ onSearch: (v) => console.log(v),
18
+ schemas: [
19
+ {
20
+ type: "input",
21
+ key: "q1",
22
+ label: "字段1",
23
+ fieldProps: {}
24
+ },
25
+ {
26
+ type: "select",
27
+ key: "q2",
28
+ label: "状态",
29
+ fieldProps: { options: [{
30
+ value: "a",
31
+ label: "A"
32
+ }] }
33
+ },
34
+ {
35
+ type: "switch",
36
+ key: "q3",
37
+ label: "开关",
38
+ fieldProps: {}
39
+ },
40
+ {
41
+ type: "date",
42
+ key: "q4",
43
+ label: "日期",
44
+ fieldProps: {}
45
+ },
46
+ {
47
+ type: "date",
48
+ key: "q5",
49
+ label: "范围",
50
+ fieldProps: { mode: "range" }
51
+ },
52
+ {
53
+ type: "textarea",
54
+ key: "q6",
55
+ label: "文本",
56
+ fieldProps: {}
57
+ },
58
+ {
59
+ type: "input",
60
+ key: "q7",
61
+ label: "字段7",
62
+ fieldProps: {}
63
+ },
64
+ {
65
+ type: "input",
66
+ key: "q8",
67
+ label: "字段8",
68
+ fieldProps: {}
69
+ }
70
+ ]
71
+ }) });
72
+ }
73
+ //#endregion
74
+ export { TableSearchDemo_exports, TableSearchDemo as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/TableSearchDemo.tsx?raw
2
+ var TableSearchDemo_default = "import { TableSearch } from '@tc/ui-react/components'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'TableSearch',\n order: 29,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\n// ─── TableSearch ─────────────────────────────────────────────────────────────\n\nexport default function TableSearchDemo() {\n type TableSearchForm = {\n q1: string\n q2: string\n q3: boolean\n q4: string\n q5: string\n q6: string\n q7: string\n q8: string\n }\n return (\n <>\n <TableSearch<TableSearchForm>\n onSearch={(v) => console.log(v)}\n schemas={[\n { type: 'input', key: 'q1', label: '字段1', fieldProps: {} },\n { type: 'select', key: 'q2', label: '状态', fieldProps: { options: [{ value: 'a', label: 'A' }] } },\n { type: 'switch', key: 'q3', label: '开关', fieldProps: {} },\n { type: 'date', key: 'q4', label: '日期', fieldProps: {} },\n { type: 'date', key: 'q5', label: '范围', fieldProps: { mode: 'range' } },\n { type: 'textarea', key: 'q6', label: '文本', fieldProps: {} },\n { type: 'input', key: 'q7', label: '字段7', fieldProps: {} },\n { type: 'input', key: 'q8', label: '字段8', fieldProps: {} },\n ]}\n />\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { TableSearchDemo_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function TabsDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,56 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Tabs } from "../../../Tabs/Tabs.js";
3
+ import "../../../index.js";
4
+ import { useState } from "react";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region packages/react/ui/components/testPage/demos/core/TabsDemo.tsx
7
+ var TabsDemo_exports = /* @__PURE__ */ __exportAll({
8
+ default: () => TabsDemo,
9
+ demoMeta: () => demoMeta
10
+ });
11
+ var demoMeta = {
12
+ title: "Tabs",
13
+ order: 26,
14
+ contentClassName: "flex flex-wrap gap-3 items-start"
15
+ };
16
+ function TabsDemo() {
17
+ const [activeTab, setActiveTab] = useState("tab1");
18
+ return /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsxs("div", {
19
+ className: "w-full",
20
+ children: [/* @__PURE__ */ jsx(Tabs, {
21
+ items: [
22
+ {
23
+ key: "tab1",
24
+ label: "标签页 1"
25
+ },
26
+ {
27
+ key: "tab2",
28
+ label: "标签页 2"
29
+ },
30
+ {
31
+ key: "tab3",
32
+ label: "标签页 3"
33
+ },
34
+ {
35
+ key: "tab4",
36
+ label: "禁用标签",
37
+ disabled: true
38
+ }
39
+ ],
40
+ activeKey: activeTab,
41
+ onChange: setActiveTab
42
+ }), /* @__PURE__ */ jsx("div", {
43
+ className: "p-4 border border-t-0 rounded-b-lg bg-background",
44
+ children: /* @__PURE__ */ jsx("p", {
45
+ className: "text-sm text-muted-foreground",
46
+ children: {
47
+ tab1: "这是标签页 1 的内容区域。",
48
+ tab2: "这是标签页 2 的内容区域。",
49
+ tab3: "这是标签页 3 的内容区域。"
50
+ }[activeTab]
51
+ })
52
+ })]
53
+ }) });
54
+ }
55
+ //#endregion
56
+ export { TabsDemo_exports, TabsDemo as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/TabsDemo.tsx?raw
2
+ var TabsDemo_default = "import { Tabs } from '@tc/ui-react/components'\nimport { useState } from 'react'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'Tabs',\n order: 26,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\n// ─── Tabs ────────────────────────────────────────────────────────────────────\n\nexport default function TabsDemo() {\n const [activeTab, setActiveTab] = useState('tab1')\n const items = [\n { key: 'tab1', label: '标签页 1' },\n { key: 'tab2', label: '标签页 2' },\n { key: 'tab3', label: '标签页 3' },\n { key: 'tab4', label: '禁用标签', disabled: true },\n ]\n const tabContents: Record<string, string> = {\n tab1: '这是标签页 1 的内容区域。',\n tab2: '这是标签页 2 的内容区域。',\n tab3: '这是标签页 3 的内容区域。',\n }\n return (\n <>\n <div className=\"w-full\">\n <Tabs items={items} activeKey={activeTab} onChange={setActiveTab} />\n <div className=\"p-4 border border-t-0 rounded-b-lg bg-background\">\n <p className=\"text-sm text-muted-foreground\">{tabContents[activeTab]}</p>\n </div>\n </div>\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { TabsDemo_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function TextareaDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,30 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Textarea } from "../../../Textarea/Textarea.js";
3
+ import "../../../index.js";
4
+ import { useState } from "react";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region packages/react/ui/components/testPage/demos/core/TextareaDemo.tsx
7
+ var TextareaDemo_exports = /* @__PURE__ */ __exportAll({
8
+ default: () => TextareaDemo,
9
+ demoMeta: () => demoMeta
10
+ });
11
+ var demoMeta = {
12
+ title: "Textarea",
13
+ order: 5,
14
+ contentClassName: "flex flex-wrap gap-3 items-start"
15
+ };
16
+ function TextareaDemo() {
17
+ const [val, setVal] = useState("");
18
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Textarea, {
19
+ placeholder: "请输入内容(最多 500 字)",
20
+ value: val,
21
+ onChange: (v) => setVal(v),
22
+ className: "w-80"
23
+ }), /* @__PURE__ */ jsx(Textarea, {
24
+ placeholder: "不显示计数",
25
+ showCount: false,
26
+ className: "w-80"
27
+ })] });
28
+ }
29
+ //#endregion
30
+ export { TextareaDemo_exports, TextareaDemo as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/TextareaDemo.tsx?raw
2
+ var TextareaDemo_default = "import { Textarea } from '@tc/ui-react/components'\nimport { useState } from 'react'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'Textarea',\n order: 5,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\n// ─── Textarea ────────────────────────────────────────────────────────────────\n\nexport default function TextareaDemo() {\n const [val, setVal] = useState('')\n return (\n <>\n <Textarea\n placeholder=\"请输入内容(最多 500 字)\"\n value={val}\n onChange={(v) => setVal(v)}\n className=\"w-80\"\n />\n <Textarea placeholder=\"不显示计数\" showCount={false} className=\"w-80\" />\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { TextareaDemo_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function ThemeSwitcher(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,96 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Button } from "../../../Button/Button.js";
3
+ import "../../../index.js";
4
+ import { useEffect, useState } from "react";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region packages/react/ui/components/testPage/demos/core/ThemeSwitcher.tsx
7
+ var ThemeSwitcher_exports = /* @__PURE__ */ __exportAll({
8
+ default: () => ThemeSwitcher,
9
+ demoMeta: () => demoMeta
10
+ });
11
+ var demoMeta = {
12
+ title: "Theme",
13
+ order: 1,
14
+ contentClassName: "flex flex-wrap gap-3 items-start"
15
+ };
16
+ function ThemeSwitcher() {
17
+ const [mode, setMode] = useState("dark");
18
+ const [theme, setTheme] = useState("default");
19
+ useEffect(() => {
20
+ const root = document.documentElement;
21
+ const previousTheme = root.getAttribute("data-theme");
22
+ const previousDark = root.classList.contains("dark");
23
+ root.classList.toggle("dark", mode === "dark");
24
+ if (theme === "default") root.removeAttribute("data-theme");
25
+ else root.setAttribute("data-theme", theme);
26
+ return () => {
27
+ root.classList.toggle("dark", previousDark);
28
+ if (previousTheme) root.setAttribute("data-theme", previousTheme);
29
+ else root.removeAttribute("data-theme");
30
+ };
31
+ }, [mode, theme]);
32
+ return /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsxs("div", {
33
+ className: "flex w-full flex-wrap items-center gap-6 rounded-xl border border-border bg-background p-4",
34
+ children: [
35
+ /* @__PURE__ */ jsxs("div", {
36
+ className: "flex items-center gap-2",
37
+ children: [
38
+ /* @__PURE__ */ jsx("span", {
39
+ className: "text-sm text-muted-foreground",
40
+ children: "模式"
41
+ }),
42
+ /* @__PURE__ */ jsx(Button, {
43
+ variant: mode === "light" ? "primary" : "default",
44
+ size: "sm",
45
+ onClick: () => setMode("light"),
46
+ children: "Light"
47
+ }),
48
+ /* @__PURE__ */ jsx(Button, {
49
+ variant: mode === "dark" ? "primary" : "default",
50
+ size: "sm",
51
+ onClick: () => setMode("dark"),
52
+ children: "Dark"
53
+ })
54
+ ]
55
+ }),
56
+ /* @__PURE__ */ jsxs("div", {
57
+ className: "flex items-center gap-2",
58
+ children: [
59
+ /* @__PURE__ */ jsx("span", {
60
+ className: "text-sm text-muted-foreground",
61
+ children: "主题"
62
+ }),
63
+ /* @__PURE__ */ jsx(Button, {
64
+ variant: theme === "default" ? "primary" : "default",
65
+ size: "sm",
66
+ onClick: () => setTheme("default"),
67
+ children: "Default"
68
+ }),
69
+ /* @__PURE__ */ jsx(Button, {
70
+ variant: theme === "green" ? "primary" : "default",
71
+ size: "sm",
72
+ onClick: () => setTheme("green"),
73
+ children: "Green"
74
+ }),
75
+ /* @__PURE__ */ jsx(Button, {
76
+ variant: theme === "gray" ? "primary" : "default",
77
+ size: "sm",
78
+ onClick: () => setTheme("gray"),
79
+ children: "Gray"
80
+ })
81
+ ]
82
+ }),
83
+ /* @__PURE__ */ jsxs("div", {
84
+ className: "text-sm text-muted-foreground",
85
+ children: [
86
+ "当前: ",
87
+ mode,
88
+ " / ",
89
+ theme
90
+ ]
91
+ })
92
+ ]
93
+ }) });
94
+ }
95
+ //#endregion
96
+ export { ThemeSwitcher_exports, ThemeSwitcher as default, demoMeta };
@@ -0,0 +1,4 @@
1
+ //#region packages/react/ui/components/testPage/demos/core/ThemeSwitcher.tsx?raw
2
+ var ThemeSwitcher_default = "import { Button } from '@tc/ui-react/components'\nimport { useEffect, useState } from 'react'\nimport type { DemoMeta } from '../../types'\n\nexport const demoMeta = {\n title: 'Theme',\n order: 1,\n contentClassName: 'flex flex-wrap gap-3 items-start',\n} satisfies DemoMeta\n\ntype ColorTheme = 'default' | 'green' | 'gray'\n\nexport default function ThemeSwitcher() {\n const [mode, setMode] = useState<'light' | 'dark'>('dark')\n const [theme, setTheme] = useState<ColorTheme>('default')\n\n useEffect(() => {\n const root = document.documentElement\n const previousTheme = root.getAttribute('data-theme')\n const previousDark = root.classList.contains('dark')\n\n root.classList.toggle('dark', mode === 'dark')\n if (theme === 'default') {\n root.removeAttribute('data-theme')\n } else {\n root.setAttribute('data-theme', theme)\n }\n\n return () => {\n root.classList.toggle('dark', previousDark)\n if (previousTheme) {\n root.setAttribute('data-theme', previousTheme)\n } else {\n root.removeAttribute('data-theme')\n }\n }\n }, [mode, theme])\n\n return (\n <>\n <div className=\"flex w-full flex-wrap items-center gap-6 rounded-xl border border-border bg-background p-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">模式</span>\n <Button\n variant={mode === 'light' ? 'primary' : 'default'}\n size=\"sm\"\n onClick={() => setMode('light')}\n >\n Light\n </Button>\n <Button variant={mode === 'dark' ? 'primary' : 'default'} size=\"sm\" onClick={() => setMode('dark')}>\n Dark\n </Button>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">主题</span>\n <Button\n variant={theme === 'default' ? 'primary' : 'default'}\n size=\"sm\"\n onClick={() => setTheme('default')}\n >\n Default\n </Button>\n <Button\n variant={theme === 'green' ? 'primary' : 'default'}\n size=\"sm\"\n onClick={() => setTheme('green')}\n >\n Green\n </Button>\n <Button\n variant={theme === 'gray' ? 'primary' : 'default'}\n size=\"sm\"\n onClick={() => setTheme('gray')}\n >\n Gray\n </Button>\n </div>\n\n <div className=\"text-sm text-muted-foreground\">\n 当前: {mode} / {theme}\n </div>\n </div>\n </>\n )\n}\n";
3
+ //#endregion
4
+ export { ThemeSwitcher_default as default };
@@ -0,0 +1,6 @@
1
+ export declare const demoMeta: {
2
+ title: string;
3
+ order: number;
4
+ contentClassName: string;
5
+ };
6
+ export default function TooltipDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,29 @@
1
+ import { __exportAll } from "../../../../../../../_virtual/_rolldown/runtime.js";
2
+ import { Button } from "../../../Button/Button.js";
3
+ import { Tooltip } from "../../../Tooltip/Tooltip.js";
4
+ import "../../../index.js";
5
+ import { Fragment, jsx } from "react/jsx-runtime";
6
+ //#region packages/react/ui/components/testPage/demos/core/TooltipDemo.tsx
7
+ var TooltipDemo_exports = /* @__PURE__ */ __exportAll({
8
+ default: () => TooltipDemo,
9
+ demoMeta: () => demoMeta
10
+ });
11
+ var demoMeta = {
12
+ title: "Tooltip",
13
+ order: 10,
14
+ contentClassName: "flex flex-wrap gap-3 items-start"
15
+ };
16
+ function TooltipDemo() {
17
+ return /* @__PURE__ */ jsx(Fragment, { children: [
18
+ "top",
19
+ "bottom",
20
+ "left",
21
+ "right"
22
+ ].map((p) => /* @__PURE__ */ jsx(Tooltip, {
23
+ content: `placement: ${p}`,
24
+ placement: p,
25
+ children: /* @__PURE__ */ jsx(Button, { children: p })
26
+ }, p)) });
27
+ }
28
+ //#endregion
29
+ export { TooltipDemo_exports, TooltipDemo as default, demoMeta };