@quantlife/qlui 0.0.0-stage → 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.
Files changed (132) hide show
  1. package/README.md +123 -2
  2. package/dist/components/ui/accordion.d.ts +7 -0
  3. package/dist/components/ui/action-buttons.d.ts +23 -0
  4. package/dist/components/ui/alert-dialog.d.ts +18 -0
  5. package/dist/components/ui/alert.d.ts +9 -0
  6. package/dist/components/ui/aspect-ratio.d.ts +3 -0
  7. package/dist/components/ui/badge.d.ts +9 -0
  8. package/dist/components/ui/base-pair-selector.d.ts +19 -0
  9. package/dist/components/ui/button.d.ts +10 -0
  10. package/dist/components/ui/calendar.d.ts +8 -0
  11. package/dist/components/ui/card.d.ts +9 -0
  12. package/dist/components/ui/chat-input.d.ts +18 -0
  13. package/dist/components/ui/chat-list.d.ts +14 -0
  14. package/dist/components/ui/chat-message.d.ts +15 -0
  15. package/dist/components/ui/checkbox.d.ts +4 -0
  16. package/dist/components/ui/collapsible.d.ts +5 -0
  17. package/dist/components/ui/combobox.d.ts +31 -0
  18. package/dist/components/ui/command.d.ts +18 -0
  19. package/dist/components/ui/date-picker-int.d.ts +11 -0
  20. package/dist/components/ui/date-picker.d.ts +20 -0
  21. package/dist/components/ui/descriptions.d.ts +15 -0
  22. package/dist/components/ui/dialog.d.ts +17 -0
  23. package/dist/components/ui/digital-pair-selector.d.ts +14 -0
  24. package/dist/components/ui/drawer.d.ts +13 -0
  25. package/dist/components/ui/dropdown-menu.d.ts +25 -0
  26. package/dist/components/ui/empty.d.ts +9 -0
  27. package/dist/components/ui/exchange-select.d.ts +13 -0
  28. package/dist/components/ui/file-tree.d.ts +14 -0
  29. package/dist/components/ui/file-upload.d.ts +10 -0
  30. package/dist/components/ui/form.d.ts +24 -0
  31. package/dist/components/ui/hover-card.d.ts +6 -0
  32. package/dist/components/ui/inline-completion.d.ts +12 -0
  33. package/dist/components/ui/input-otp.d.ts +11 -0
  34. package/dist/components/ui/input.d.ts +3 -0
  35. package/dist/components/ui/label.d.ts +4 -0
  36. package/dist/components/ui/mobile-card-list.d.ts +17 -0
  37. package/dist/components/ui/monaco-editor.d.ts +27 -0
  38. package/dist/components/ui/pagination.d.ts +10 -0
  39. package/dist/components/ui/pair-select.d.ts +17 -0
  40. package/dist/components/ui/period-select.d.ts +13 -0
  41. package/dist/components/ui/popover.d.ts +10 -0
  42. package/dist/components/ui/progress.d.ts +4 -0
  43. package/dist/components/ui/radio-group.d.ts +5 -0
  44. package/dist/components/ui/segmented.d.ts +16 -0
  45. package/dist/components/ui/select.d.ts +15 -0
  46. package/dist/components/ui/separator.d.ts +4 -0
  47. package/dist/components/ui/sheet.d.ts +14 -0
  48. package/dist/components/ui/skeleton.d.ts +2 -0
  49. package/dist/components/ui/slider.d.ts +4 -0
  50. package/dist/components/ui/sonner.d.ts +3 -0
  51. package/dist/components/ui/standard-table.d.ts +17 -0
  52. package/dist/components/ui/statistic.d.ts +13 -0
  53. package/dist/components/ui/steps.d.ts +9 -0
  54. package/dist/components/ui/stream-text.d.ts +10 -0
  55. package/dist/components/ui/switch.d.ts +6 -0
  56. package/dist/components/ui/table.d.ts +10 -0
  57. package/dist/components/ui/tabs.d.ts +24 -0
  58. package/dist/components/ui/textarea.d.ts +3 -0
  59. package/dist/components/ui/thinking-loader.d.ts +10 -0
  60. package/dist/components/ui/timeline.d.ts +15 -0
  61. package/dist/components/ui/tooltip.d.ts +7 -0
  62. package/dist/hooks/use-confirm.d.ts +1 -0
  63. package/dist/hooks/use-media-query.d.ts +2 -0
  64. package/dist/hooks/use-toast.d.ts +1 -0
  65. package/dist/index.d.ts +68 -0
  66. package/dist/index.js +20878 -0
  67. package/dist/lib/utils.d.ts +2 -0
  68. package/dist/providers/confirm-provider.d.ts +14 -0
  69. package/dist/providers/theme-provider.d.ts +15 -0
  70. package/dist/providers/toast-provider.d.ts +15 -0
  71. package/dist/qlui.css +3 -0
  72. package/dist/stories/accordion.stories.d.ts +21 -0
  73. package/dist/stories/action-buttons.stories.d.ts +16 -0
  74. package/dist/stories/alert-dialog.stories.d.ts +19 -0
  75. package/dist/stories/alert.stories.d.ts +16 -0
  76. package/dist/stories/aspect-ratio.stories.d.ts +17 -0
  77. package/dist/stories/badge.stories.d.ts +16 -0
  78. package/dist/stories/base-pair-selector.stories.d.ts +16 -0
  79. package/dist/stories/button.stories.d.ts +16 -0
  80. package/dist/stories/calendar.stories.d.ts +16 -0
  81. package/dist/stories/card.stories.d.ts +16 -0
  82. package/dist/stories/chat-input.stories.d.ts +17 -0
  83. package/dist/stories/chat-list.stories.d.ts +19 -0
  84. package/dist/stories/chat-message.stories.d.ts +19 -0
  85. package/dist/stories/checkbox.stories.d.ts +16 -0
  86. package/dist/stories/collapsible.stories.d.ts +16 -0
  87. package/dist/stories/combobox.stories.d.ts +20 -0
  88. package/dist/stories/command.stories.d.ts +16 -0
  89. package/dist/stories/date-picker-int.stories.d.ts +16 -0
  90. package/dist/stories/date-picker.stories.d.ts +17 -0
  91. package/dist/stories/descriptions.stories.d.ts +16 -0
  92. package/dist/stories/dialog.stories.d.ts +16 -0
  93. package/dist/stories/digital-pair-selector.stories.d.ts +16 -0
  94. package/dist/stories/drawer.stories.d.ts +16 -0
  95. package/dist/stories/dropdown-menu.stories.d.ts +16 -0
  96. package/dist/stories/empty.stories.d.ts +16 -0
  97. package/dist/stories/exchange-select.stories.d.ts +16 -0
  98. package/dist/stories/file-tree.stories.d.ts +16 -0
  99. package/dist/stories/file-upload.stories.d.ts +16 -0
  100. package/dist/stories/form.stories.d.ts +17 -0
  101. package/dist/stories/hover-card.stories.d.ts +18 -0
  102. package/dist/stories/inline-completion.stories.d.ts +17 -0
  103. package/dist/stories/input-otp.stories.d.ts +17 -0
  104. package/dist/stories/input.stories.d.ts +16 -0
  105. package/dist/stories/label.stories.d.ts +16 -0
  106. package/dist/stories/mobile-card-list.stories.d.ts +16 -0
  107. package/dist/stories/monaco-editor.stories.d.ts +16 -0
  108. package/dist/stories/pagination.stories.d.ts +16 -0
  109. package/dist/stories/pair-select.stories.d.ts +16 -0
  110. package/dist/stories/period-select.stories.d.ts +16 -0
  111. package/dist/stories/popover.stories.d.ts +16 -0
  112. package/dist/stories/progress.stories.d.ts +16 -0
  113. package/dist/stories/radio-group.stories.d.ts +16 -0
  114. package/dist/stories/segmented.stories.d.ts +16 -0
  115. package/dist/stories/select.stories.d.ts +16 -0
  116. package/dist/stories/separator.stories.d.ts +16 -0
  117. package/dist/stories/sheet.stories.d.ts +16 -0
  118. package/dist/stories/skeleton.stories.d.ts +16 -0
  119. package/dist/stories/slider.stories.d.ts +16 -0
  120. package/dist/stories/sonner.stories.d.ts +17 -0
  121. package/dist/stories/standard-table.stories.d.ts +16 -0
  122. package/dist/stories/statistic.stories.d.ts +16 -0
  123. package/dist/stories/steps.stories.d.ts +16 -0
  124. package/dist/stories/stream-text.stories.d.ts +17 -0
  125. package/dist/stories/switch.stories.d.ts +16 -0
  126. package/dist/stories/table.stories.d.ts +16 -0
  127. package/dist/stories/tabs.stories.d.ts +24 -0
  128. package/dist/stories/textarea.stories.d.ts +16 -0
  129. package/dist/stories/thinking-loader.stories.d.ts +17 -0
  130. package/dist/stories/timeline.stories.d.ts +16 -0
  131. package/dist/stories/tooltip.stories.d.ts +16 -0
  132. package/package.json +70 -4
package/README.md CHANGED
@@ -1,3 +1,124 @@
1
- # Temporary Holding Version
1
+ # ql-ui
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+
4
+
5
+ ## Getting started
6
+
7
+ To make it easy for you to get started with GitLab, here's a list of recommended next steps.
8
+
9
+ Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
10
+
11
+ ## Add your files
12
+
13
+ - [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
14
+ - [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
15
+
16
+ ```
17
+ cd existing_repo
18
+ git remote add origin https://gitlab.quantlifetech.com/quantlife/libs/ql-ui.git
19
+ git branch -M main
20
+ git push -uf origin main
21
+ ```
22
+
23
+ ## Integrate with your tools
24
+
25
+ - [ ] [Set up project integrations](https://gitlab.quantlifetech.com/quantlife/libs/ql-ui/-/settings/integrations)
26
+
27
+ ## Collaborate with your team
28
+
29
+ - [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
30
+ - [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
31
+ - [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
32
+ - [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
33
+ - [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
34
+
35
+ ## Test and Deploy
36
+
37
+ Use the built-in continuous integration in GitLab.
38
+
39
+ - [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
40
+ - [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
41
+ - [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
42
+ - [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
43
+ - [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
44
+
45
+ ***
46
+
47
+ # Editing this README
48
+
49
+ When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
50
+
51
+ ## Suggestions for a good README
52
+
53
+ Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
54
+
55
+ ## Name
56
+ Choose a self-explaining name for your project.
57
+
58
+ ## Description
59
+ Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
60
+
61
+ ## Badges
62
+ On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
63
+
64
+ ## Visuals
65
+ Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
66
+
67
+ ## Installation
68
+ Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
69
+
70
+ ## Usage
71
+ Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
72
+
73
+ ## Support
74
+ Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
75
+
76
+ ## Roadmap
77
+ If you have ideas for releases in the future, it is a good idea to list them in the README.
78
+
79
+ ## Contributing
80
+ State if you are open to contributions and what your requirements are for accepting them.
81
+
82
+ For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
83
+
84
+ You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
85
+
86
+ ## Authors and acknowledgment
87
+ Show your appreciation to those who have contributed to the project.
88
+
89
+ ## License
90
+ For open source projects, say how it is licensed.
91
+
92
+ ## Project status
93
+ If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
94
+
95
+ ## shadcn 组件使用方式(老板 11:33 指正说明)
96
+
97
+ ### 组件存放目录
98
+ shadcn 组件(CLI 添加的源码)落在 **`src/components/ui/`**(components.json aliases 配置 `ui: @/components/ui`)——A1 标准 26 件+A2 组合+A3 registry+C 自建+D 迁入共 51 个组件文件全部在此目录。
99
+
100
+ ### 添加组件(源码进本地,非 npm 依赖)
101
+ ```bash
102
+ pnpm dlx shadcn@latest add button # 单个
103
+ pnpm dlx shadcn@latest add button card tabs # 批量
104
+ ```
105
+ 组件源码复制进 `src/components/ui/button.tsx`——可直接修改(这是我们封装 TabsBar/rightExtra 等承接面的基础)。
106
+
107
+ ### 升级更新工作流
108
+ ```bash
109
+ pnpm dlx shadcn@latest diff # 查看本地组件与上游差异
110
+ pnpm dlx shadcn@latest update # 更新本地组件到上游最新
111
+ ```
112
+ 注意:本地已改造的组件(如 combobox 加 onSearch/loading、tabs 加 TabsBar)update 会覆盖——diff 先看再选择性合并。
113
+
114
+ ### Storybook 用例目录
115
+ stories 用例在 **`src/stories/`**(与组件源码 `src/components/ui/` 分离——老板 11:33 架构口径);`pnpm storybook` 起 6006 查看。
116
+
117
+
118
+ ## 主题机制(token 契约+可选预设——宿主主权,老板 2026-10-23 11:52 定音)
119
+
120
+ - **职责分层**:**ql-ui 只定义变量(token)的名字**(组件引用的颜色变量契约:--background/--foreground/--card/--primary/--muted/--border 等约 40 个——组件全部引用 token,零写死颜色);**具体值是动态的**;**主题的 CSS 配置(新增特殊主题)由宿主项目添加,不加进本库**。
121
+ - **预设(可选默认值)**:内置 light(默认)/dark 两套预设(ThemeProvider 驱动 html class/`data-theme`,localStorage 持久化);预设只是默认值——**宿主可覆盖、可新增,不用改本库**。
122
+ - **宿主覆盖预设主题(三步,零库改动)**:① 宿主全局 CSS 以更高特异性/后加载覆写目标 token(例:`html[data-theme="dark"] { --background: <你的色>; }`)② 按需逐 token 改(背景/组件背景/字体色想设什么设什么)③ 刷新即全组件生效。
123
+ - **宿主新增自定义主题(四步,零库改动)**:① 宿主 CSS 写完整变量集 `html[data-theme="custom-x"] { --background: …; --card: …; /* 全部 token */ }`(每套主题=一组 CSS 颜色集,各 token 关系自由定义)② 宿主设置界面加该主题入口 ③ `setTheme("custom-x")` 驱动 html data-theme(ThemeProvider 支持任意主题串,可传入扩展主题清单)④ 验证全组件同步变色。
124
+ - **Storybook 演示**:预设主题下全部组件形态对照见 `pnpm storybook`(主题切换 toolbar)。
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import { Accordion as AccordionPrimitive } from "radix-ui";
3
+ declare function Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>): React.JSX.Element;
4
+ declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): React.JSX.Element;
5
+ declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>): React.JSX.Element;
6
+ declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): React.JSX.Element;
7
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
@@ -0,0 +1,23 @@
1
+ import * as React from "react";
2
+ import { Button } from "@/components/ui/button";
3
+ export interface ActionButtonProps extends Omit<React.ComponentProps<typeof Button>, 'variant'> {
4
+ loading?: boolean;
5
+ icon?: React.ReactNode;
6
+ onClick?: () => void;
7
+ danger?: boolean;
8
+ }
9
+ /** 统一操作按钮(antd link+small 迁入→ghost+sm 样式映射) */
10
+ export declare function ActionButton({ icon, onClick, children, danger, disabled, loading, ...rest }: ActionButtonProps): React.JSX.Element;
11
+ export interface DeleteButtonProps {
12
+ onConfirm: () => void;
13
+ title?: string;
14
+ description?: string;
15
+ label?: string;
16
+ }
17
+ /** 删除按钮(AlertDialog 二次确认替代 Popconfirm) */
18
+ export declare function DeleteButton({ onConfirm, title, description, label }: DeleteButtonProps): React.JSX.Element;
19
+ /** 详情按钮 */
20
+ export declare function DetailButton({ onClick, label }: {
21
+ onClick: () => void;
22
+ label?: string;
23
+ }): React.JSX.Element;
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
3
+ import { Button } from "@/components/ui/button";
4
+ declare function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>): React.JSX.Element;
5
+ declare function AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): React.JSX.Element;
6
+ declare function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): React.JSX.Element;
7
+ declare function AlertDialogOverlay({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>): React.JSX.Element;
8
+ declare function AlertDialogContent({ className, size, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {
9
+ size?: "default" | "sm";
10
+ }): React.JSX.Element;
11
+ declare function AlertDialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+ declare function AlertDialogFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
13
+ declare function AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>): React.JSX.Element;
14
+ declare function AlertDialogDescription({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Description>): React.JSX.Element;
15
+ declare function AlertDialogMedia({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
16
+ declare function AlertDialogAction({ className, variant, size, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Action> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
17
+ declare function AlertDialogCancel({ className, variant, size, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
18
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const alertVariants: (props?: ({
4
+ variant?: "default" | "destructive" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>): React.JSX.Element;
7
+ declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
+ export { Alert, AlertTitle, AlertDescription };
@@ -0,0 +1,3 @@
1
+ import { AspectRatio as AspectRatioPrimitive } from "radix-ui";
2
+ declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): import("react").JSX.Element;
3
+ export { AspectRatio };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "ghost" | "link" | "outline" | "secondary" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
7
+ asChild?: boolean;
8
+ }): React.JSX.Element;
9
+ export { Badge, badgeVariants };
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ export interface PairOption {
3
+ value: string;
4
+ label: string;
5
+ meta?: React.ReactNode;
6
+ }
7
+ export interface BasePairSelectorProps {
8
+ mode?: "single" | "multiple";
9
+ value?: string | string[];
10
+ onChange?: (value: string | string[]) => void;
11
+ /** 搜索注入(数据流外置——业务侧接 react-query) */
12
+ onSearch?: (keyword: string) => Promise<PairOption[]> | PairOption[];
13
+ options?: PairOption[];
14
+ placeholder?: string;
15
+ disabled?: boolean;
16
+ className?: string;
17
+ }
18
+ /** 品种搜索选择器壳(自研迁入——剥离业务数据流,搜索回调注入) */
19
+ export declare function BasePairSelector({ mode, value, onChange, onSearch, options: staticOptions, placeholder, disabled, className, }: BasePairSelectorProps): React.JSX.Element;
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "ghost" | "link" | "outline" | "secondary" | null | undefined;
5
+ size?: "default" | "icon" | "icon-lg" | "icon-sm" | "icon-xs" | "lg" | "sm" | "xs" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
8
+ asChild?: boolean;
9
+ }): React.JSX.Element;
10
+ export { Button, buttonVariants };
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import { DayPicker, type DayButton } from "react-day-picker";
3
+ import { Button } from "@/components/ui/button";
4
+ declare function Calendar({ className, classNames, showOutsideDays, captionLayout, buttonVariant, formatters, components, ...props }: React.ComponentProps<typeof DayPicker> & {
5
+ buttonVariant?: React.ComponentProps<typeof Button>["variant"];
6
+ }): React.JSX.Element;
7
+ declare function CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>): React.JSX.Element;
8
+ export { Calendar, CalendarDayButton };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ declare function Card({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
3
+ declare function CardHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
4
+ declare function CardTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
5
+ declare function CardDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
6
+ declare function CardAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
7
+ declare function CardContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare function CardFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
+ export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent, };
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export interface ChatInputProps {
3
+ /** 占位提示 */
4
+ placeholder?: string;
5
+ /** 输入禁用 */
6
+ disabled?: boolean;
7
+ /** 生成中(发送按钮切换为停止) */
8
+ loading?: boolean;
9
+ /** 提交(Enter 发送 / Shift+Enter 换行) */
10
+ onSubmit?: (value: string) => void;
11
+ /** 停止生成 */
12
+ onStop?: () => void;
13
+ className?: string;
14
+ /** 受控初值 */
15
+ defaultValue?: string;
16
+ }
17
+ /** AI 聊天输入框(shadcn registry 无现成——按 shadcn 风格自建) */
18
+ export declare function ChatInput({ placeholder, disabled, loading, onSubmit, onStop, className, defaultValue, }: ChatInputProps): React.JSX.Element;
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ export interface ChatListProps {
3
+ /** 消息条目 */
4
+ messages?: React.ReactNode[];
5
+ /** 自动滚动到底部 */
6
+ autoScroll?: boolean;
7
+ /** 空态描述 */
8
+ emptyDescription?: React.ReactNode;
9
+ /** 追加底部插槽(如 ThinkingLoader) */
10
+ footer?: React.ReactNode;
11
+ className?: string;
12
+ }
13
+ /** AI 消息列表容器(shadcn registry 无现成——按 shadcn 风格自建) */
14
+ export declare function ChatList({ messages, autoScroll, emptyDescription, footer, className, }: ChatListProps): React.JSX.Element;
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ export type ChatMessageRole = "user" | "assistant" | "system";
3
+ export interface ChatMessageProps {
4
+ /** 消息角色:用户/助手/系统 */
5
+ role?: ChatMessageRole;
6
+ /** 头像覆盖(默认按角色取 lucide 图标) */
7
+ avatar?: React.ReactNode;
8
+ /** 消息内容(markdown 由业务层渲染后传入容器) */
9
+ children?: React.ReactNode;
10
+ /** 流式输出中(显示光标) */
11
+ streaming?: boolean;
12
+ className?: string;
13
+ }
14
+ /** AI 聊天消息(shadcn registry 无现成——按 shadcn 风格自建) */
15
+ export declare function ChatMessage({ role, avatar, children, streaming, className, }: ChatMessageProps): React.JSX.Element;
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import { Checkbox as CheckboxPrimitive } from "radix-ui";
3
+ declare function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>): React.JSX.Element;
4
+ export { Checkbox };
@@ -0,0 +1,5 @@
1
+ import { Collapsible as CollapsiblePrimitive } from "radix-ui";
2
+ declare function Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>): import("react").JSX.Element;
3
+ declare function CollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>): import("react").JSX.Element;
4
+ declare function CollapsibleContent({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>): import("react").JSX.Element;
5
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
@@ -0,0 +1,31 @@
1
+ import * as React from "react";
2
+ export interface ComboboxOption {
3
+ value: string;
4
+ label: string;
5
+ disabled?: boolean;
6
+ }
7
+ /** 可搜索下拉选择(antd Select showSearch 场景全部映射至此——本地图过滤与远程搜索双模式)
8
+ *
9
+ * 远程搜索/异步选项用法约定:
10
+ * - 传入 onSearch 时为远程模式:输入触发回调,由宿主异步取数后更新 options
11
+ * - loading=true 时下拉显示加载态(宿主请求期间置 true)
12
+ * - 不传 onSearch 时为本地模式:options 内前端过滤
13
+ */
14
+ export interface ComboboxProps {
15
+ options: ComboboxOption[];
16
+ value?: string;
17
+ onChange?: (value: string) => void;
18
+ placeholder?: string;
19
+ searchPlaceholder?: string;
20
+ emptyText?: string;
21
+ disabled?: boolean;
22
+ className?: string;
23
+ /** 远程搜索回调(传入即远程模式:输入触发,宿主异步取数更新 options) */
24
+ onSearch?: (keyword: string) => void;
25
+ /** 异步加载态(宿主请求期间置 true——下拉显示加载中) */
26
+ loading?: boolean;
27
+ }
28
+ /** 可搜索下拉选择(Select 搜索——cmdk 组合) */
29
+ export declare function Combobox({ options, value, onChange, placeholder, searchPlaceholder, onSearch, loading, emptyText, disabled, className, }: ComboboxProps): React.JSX.Element;
30
+ /** 别名导出:SearchableSelect(antd Select showSearch 场景全部映射至此——架构 v1.2 清单口径) */
31
+ export declare const SearchableSelect: typeof Combobox;
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ import { Command as CommandPrimitive } from "cmdk";
3
+ import { Dialog } from "@/components/ui/dialog";
4
+ declare function Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>): React.JSX.Element;
5
+ declare function CommandDialog({ title, description, children, className, showCloseButton, ...props }: React.ComponentProps<typeof Dialog> & {
6
+ title?: string;
7
+ description?: string;
8
+ className?: string;
9
+ showCloseButton?: boolean;
10
+ }): React.JSX.Element;
11
+ declare function CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>): React.JSX.Element;
12
+ declare function CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>): React.JSX.Element;
13
+ declare function CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>): React.JSX.Element;
14
+ declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>): React.JSX.Element;
15
+ declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>): React.JSX.Element;
16
+ declare function CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>): React.JSX.Element;
17
+ declare function CommandShortcut({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
18
+ export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ export interface DatePickerIntProps {
3
+ /** YYYYMMDD 整数(自研迁入——与业务 int 日期字段直连) */
4
+ value?: number;
5
+ onChange?: (value: number | undefined) => void;
6
+ placeholder?: string;
7
+ disabled?: boolean;
8
+ className?: string;
9
+ }
10
+ /** 整数日期选择器(value/onChange 均为 YYYYMMDD int) */
11
+ export declare function DatePickerInt({ value, onChange, placeholder, disabled, className }: DatePickerIntProps): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import { DateRange } from "react-day-picker";
3
+ export interface DatePickerProps {
4
+ value?: Date;
5
+ onChange?: (date: Date | undefined) => void;
6
+ placeholder?: string;
7
+ disabled?: boolean;
8
+ className?: string;
9
+ }
10
+ /** 单日选择(Calendar × Popover) */
11
+ export declare function DatePicker({ value, onChange, placeholder, disabled, className }: DatePickerProps): React.JSX.Element;
12
+ export interface RangePickerProps {
13
+ value?: DateRange;
14
+ onChange?: (range: DateRange | undefined) => void;
15
+ placeholder?: string;
16
+ disabled?: boolean;
17
+ className?: string;
18
+ }
19
+ /** 双月区间选择 */
20
+ export declare function RangePicker({ value, onChange, placeholder, disabled, className }: RangePickerProps): React.JSX.Element;
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ export interface DescriptionItem {
3
+ label: React.ReactNode;
4
+ children: React.ReactNode;
5
+ span?: number;
6
+ }
7
+ export interface DescriptionsProps {
8
+ title?: React.ReactNode;
9
+ items: DescriptionItem[];
10
+ column?: number;
11
+ bordered?: boolean;
12
+ className?: string;
13
+ }
14
+ /** 描述列表(registry 无现成——自建依据存档) */
15
+ export declare function Descriptions({ title, items, column, bordered, className }: DescriptionsProps): React.JSX.Element;
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import { Dialog as DialogPrimitive } from "radix-ui";
3
+ declare function Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>): React.JSX.Element;
4
+ declare function DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>): React.JSX.Element;
5
+ declare function DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>): React.JSX.Element;
6
+ declare function DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>): React.JSX.Element;
7
+ declare function DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>): React.JSX.Element;
8
+ declare function DialogContent({ className, children, showCloseButton, ...props }: React.ComponentProps<typeof DialogPrimitive.Content> & {
9
+ showCloseButton?: boolean;
10
+ }): React.JSX.Element;
11
+ declare function DialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+ declare function DialogFooter({ className, showCloseButton, children, ...props }: React.ComponentProps<"div"> & {
13
+ showCloseButton?: boolean;
14
+ }): React.JSX.Element;
15
+ declare function DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.JSX.Element;
16
+ declare function DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.JSX.Element;
17
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
@@ -0,0 +1,14 @@
1
+ import { type PairOption } from "@/components/ui/base-pair-selector";
2
+ export interface DigitalPairSelectorProps {
3
+ mode?: "single" | "multiple";
4
+ value?: string | string[];
5
+ onChange?: (value: string | string[]) => void;
6
+ /** 搜索注入(数据流外置——业务侧接 react-query 后传入) */
7
+ onSearch?: (keyword: string) => Promise<PairOption[]> | PairOption[];
8
+ options?: PairOption[];
9
+ placeholder?: string;
10
+ disabled?: boolean;
11
+ className?: string;
12
+ }
13
+ /** 数字货币品种选择(自研迁入——BasePairSelector 数字货币预设壳,label 统一大写) */
14
+ export declare function DigitalPairSelector({ mode, value, onChange, onSearch, options, placeholder, disabled, className, }: DigitalPairSelectorProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ import { Drawer as DrawerPrimitive } from "vaul";
3
+ declare function Drawer({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Root>): React.JSX.Element;
4
+ declare function DrawerTrigger({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Trigger>): React.JSX.Element;
5
+ declare function DrawerPortal({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Portal>): React.JSX.Element;
6
+ declare function DrawerClose({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Close>): React.JSX.Element;
7
+ declare function DrawerOverlay({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Overlay>): React.JSX.Element;
8
+ declare function DrawerContent({ className, children, ...props }: React.ComponentProps<typeof DrawerPrimitive.Content>): React.JSX.Element;
9
+ declare function DrawerHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ declare function DrawerFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ declare function DrawerTitle({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Title>): React.JSX.Element;
12
+ declare function DrawerDescription({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Description>): React.JSX.Element;
13
+ export { Drawer, DrawerPortal, DrawerOverlay, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription, };
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
3
+ declare function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>): React.JSX.Element;
4
+ declare function DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>): React.JSX.Element;
5
+ declare function DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>): React.JSX.Element;
6
+ declare function DropdownMenuContent({ className, sideOffset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>): React.JSX.Element;
7
+ declare function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>): React.JSX.Element;
8
+ declare function DropdownMenuItem({ className, inset, variant, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
9
+ inset?: boolean;
10
+ variant?: "default" | "destructive";
11
+ }): React.JSX.Element;
12
+ declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>): React.JSX.Element;
13
+ declare function DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): React.JSX.Element;
14
+ declare function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>): React.JSX.Element;
15
+ declare function DropdownMenuLabel({ className, inset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
16
+ inset?: boolean;
17
+ }): React.JSX.Element;
18
+ declare function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>): React.JSX.Element;
19
+ declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
20
+ declare function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): React.JSX.Element;
21
+ declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
22
+ inset?: boolean;
23
+ }): React.JSX.Element;
24
+ declare function DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>): React.JSX.Element;
25
+ export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ export interface EmptyProps {
3
+ description?: React.ReactNode;
4
+ icon?: React.ReactNode;
5
+ action?: React.ReactNode;
6
+ className?: string;
7
+ }
8
+ /** 空状态(registry 无现成——自建依据存档) */
9
+ export declare function Empty({ description, icon, action, className }: EmptyProps): React.JSX.Element;
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ export interface ExchangeSelectProps {
3
+ /** 交易所选项注入(数据流外置——业务侧接 react-query) */
4
+ options: string[];
5
+ value?: string;
6
+ onChange?: (value: string) => void;
7
+ loading?: boolean;
8
+ disabled?: boolean;
9
+ placeholder?: string;
10
+ className?: string;
11
+ }
12
+ /** 交易所选择(自研迁入——纯壳+options 注入,label 统一大写) */
13
+ export declare function ExchangeSelect({ options, value, onChange, loading, disabled, placeholder, className }: ExchangeSelectProps): React.JSX.Element;
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ export interface FileTreeNode {
3
+ id: string;
4
+ name: string;
5
+ children?: FileTreeNode[];
6
+ }
7
+ export interface FileTreeProps {
8
+ data: FileTreeNode[];
9
+ defaultExpandedIds?: string[];
10
+ onSelect?: (node: FileTreeNode) => void;
11
+ className?: string;
12
+ }
13
+ /** 可访问文件树(react-accessible-tree,键盘导航内建) */
14
+ export declare function FileTree({ data, defaultExpandedIds, onSelect, className }: FileTreeProps): React.JSX.Element;
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ export interface FileUploadProps {
3
+ accept?: Record<string, string[]>;
4
+ maxFiles?: number;
5
+ maxSize?: number;
6
+ onFilesChange?: (files: File[]) => void;
7
+ className?: string;
8
+ }
9
+ /** 拖拽上传(react-dropzone) */
10
+ export declare function FileUpload({ accept, maxFiles, maxSize, onFilesChange, className }: FileUploadProps): React.JSX.Element;
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ import type { Label as LabelPrimitive } from "radix-ui";
3
+ import { Slot } from "radix-ui";
4
+ import { type ControllerProps, type FieldPath, type FieldValues } from "react-hook-form";
5
+ declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>({ children, watch, getValues, getErrors, getFieldState, setError, clearErrors, setValue, setValues, trigger, formState, resetField, reset, resetDefaultValues, handleSubmit, unregister, control, register, setFocus, subscribe, }: import("react-hook-form").FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React.JSX.Element;
6
+ declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => React.JSX.Element;
7
+ declare const useFormField: () => {
8
+ invalid: boolean;
9
+ isDirty: boolean;
10
+ isTouched: boolean;
11
+ isValidating: boolean;
12
+ error?: import("react-hook-form").FieldError | undefined;
13
+ id: string;
14
+ name: string;
15
+ formItemId: string;
16
+ formDescriptionId: string;
17
+ formMessageId: string;
18
+ };
19
+ declare function FormItem({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
+ declare function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): React.JSX.Element;
21
+ declare function FormControl({ ...props }: React.ComponentProps<typeof Slot.Root>): React.JSX.Element;
22
+ declare function FormDescription({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
23
+ declare function FormMessage({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element | null;
24
+ export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ import { HoverCard as HoverCardPrimitive } from "radix-ui";
3
+ declare function HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>): React.JSX.Element;
4
+ declare function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>): React.JSX.Element;
5
+ declare function HoverCardContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Content>): React.JSX.Element;
6
+ export { HoverCard, HoverCardTrigger, HoverCardContent };
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ export interface InlineCompletionProps {
3
+ /** 已输入的正文 */
4
+ text?: React.ReactNode;
5
+ /** 灰色幽灵补全文本(Tab 接受) */
6
+ completion?: string;
7
+ /** 接受补全 */
8
+ onAccept?: (completion: string) => void;
9
+ className?: string;
10
+ }
11
+ /** 内联补全幽灵文本(shadcn registry 无现成——按 shadcn 风格自建) */
12
+ export declare function InlineCompletion({ text, completion, onAccept, className, }: InlineCompletionProps): React.JSX.Element;
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { OTPInput } from "input-otp";
3
+ declare function InputOTP({ className, containerClassName, ...props }: React.ComponentProps<typeof OTPInput> & {
4
+ containerClassName?: string;
5
+ }): React.JSX.Element;
6
+ declare function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
7
+ declare function InputOTPSlot({ index, className, ...props }: React.ComponentProps<"div"> & {
8
+ index: number;
9
+ }): React.JSX.Element;
10
+ declare function InputOTPSeparator({ ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };