@ptengine/design-components 0.3.0

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 (197) hide show
  1. package/README.md +309 -0
  2. package/components.json +21 -0
  3. package/dist/components/ui/accordion.d.ts +8 -0
  4. package/dist/components/ui/accordion.d.ts.map +1 -0
  5. package/dist/components/ui/alert-dialog.d.ts +21 -0
  6. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  7. package/dist/components/ui/alert.d.ts +9 -0
  8. package/dist/components/ui/alert.d.ts.map +1 -0
  9. package/dist/components/ui/aspect-ratio.d.ts +4 -0
  10. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  11. package/dist/components/ui/attachment.d.ts +26 -0
  12. package/dist/components/ui/attachment.d.ts.map +1 -0
  13. package/dist/components/ui/avatar.d.ts +10 -0
  14. package/dist/components/ui/avatar.d.ts.map +1 -0
  15. package/dist/components/ui/badge.d.ts +10 -0
  16. package/dist/components/ui/badge.d.ts.map +1 -0
  17. package/dist/components/ui/breadcrumb.d.ts +22 -0
  18. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  19. package/dist/components/ui/bubble.d.ts +19 -0
  20. package/dist/components/ui/bubble.d.ts.map +1 -0
  21. package/dist/components/ui/button-group.d.ts +13 -0
  22. package/dist/components/ui/button-group.d.ts.map +1 -0
  23. package/dist/components/ui/button.d.ts +13 -0
  24. package/dist/components/ui/button.d.ts.map +1 -0
  25. package/dist/components/ui/calendar.d.ts +9 -0
  26. package/dist/components/ui/calendar.d.ts.map +1 -0
  27. package/dist/components/ui/card.d.ts +9 -0
  28. package/dist/components/ui/card.d.ts.map +1 -0
  29. package/dist/components/ui/carousel.d.ts +23 -0
  30. package/dist/components/ui/carousel.d.ts.map +1 -0
  31. package/dist/components/ui/chart.d.ts +63 -0
  32. package/dist/components/ui/chart.d.ts.map +1 -0
  33. package/dist/components/ui/checkbox.d.ts +5 -0
  34. package/dist/components/ui/checkbox.d.ts.map +1 -0
  35. package/dist/components/ui/collapsible.d.ts +6 -0
  36. package/dist/components/ui/collapsible.d.ts.map +1 -0
  37. package/dist/components/ui/command.d.ts +81 -0
  38. package/dist/components/ui/command.d.ts.map +1 -0
  39. package/dist/components/ui/context-menu.d.ts +28 -0
  40. package/dist/components/ui/context-menu.d.ts.map +1 -0
  41. package/dist/components/ui/dialog.d.ts +22 -0
  42. package/dist/components/ui/dialog.d.ts.map +1 -0
  43. package/dist/components/ui/direction.d.ts +8 -0
  44. package/dist/components/ui/direction.d.ts.map +1 -0
  45. package/dist/components/ui/drawer.d.ts +23 -0
  46. package/dist/components/ui/drawer.d.ts.map +1 -0
  47. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  48. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  49. package/dist/components/ui/empty.d.ts +13 -0
  50. package/dist/components/ui/empty.d.ts.map +1 -0
  51. package/dist/components/ui/field.d.ts +25 -0
  52. package/dist/components/ui/field.d.ts.map +1 -0
  53. package/dist/components/ui/hover-card.d.ts +7 -0
  54. package/dist/components/ui/hover-card.d.ts.map +1 -0
  55. package/dist/components/ui/input-group.d.ts +13 -0
  56. package/dist/components/ui/input-group.d.ts.map +1 -0
  57. package/dist/components/ui/input-otp.d.ts +35 -0
  58. package/dist/components/ui/input-otp.d.ts.map +1 -0
  59. package/dist/components/ui/input.d.ts +5 -0
  60. package/dist/components/ui/input.d.ts.map +1 -0
  61. package/dist/components/ui/item.d.ts +24 -0
  62. package/dist/components/ui/item.d.ts.map +1 -0
  63. package/dist/components/ui/kbd.d.ts +5 -0
  64. package/dist/components/ui/kbd.d.ts.map +1 -0
  65. package/dist/components/ui/label.d.ts +6 -0
  66. package/dist/components/ui/label.d.ts.map +1 -0
  67. package/dist/components/ui/marker.d.ts +13 -0
  68. package/dist/components/ui/marker.d.ts.map +1 -0
  69. package/dist/components/ui/menubar.d.ts +29 -0
  70. package/dist/components/ui/menubar.d.ts.map +1 -0
  71. package/dist/components/ui/message-scroller.d.ts +26 -0
  72. package/dist/components/ui/message-scroller.d.ts.map +1 -0
  73. package/dist/components/ui/message.d.ts +11 -0
  74. package/dist/components/ui/message.d.ts.map +1 -0
  75. package/dist/components/ui/native-select.d.ts +4 -0
  76. package/dist/components/ui/native-select.d.ts.map +1 -0
  77. package/dist/components/ui/navigation-menu.d.ts +13 -0
  78. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  79. package/dist/components/ui/pagination.d.ts +35 -0
  80. package/dist/components/ui/pagination.d.ts.map +1 -0
  81. package/dist/components/ui/popover.d.ts +8 -0
  82. package/dist/components/ui/popover.d.ts.map +1 -0
  83. package/dist/components/ui/progress.d.ts +5 -0
  84. package/dist/components/ui/progress.d.ts.map +1 -0
  85. package/dist/components/ui/radio-group.d.ts +6 -0
  86. package/dist/components/ui/radio-group.d.ts.map +1 -0
  87. package/dist/components/ui/resizable.d.ts +24 -0
  88. package/dist/components/ui/resizable.d.ts.map +1 -0
  89. package/dist/components/ui/scroll-area.d.ts +6 -0
  90. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  91. package/dist/components/ui/search-input.d.ts +23 -0
  92. package/dist/components/ui/search-input.d.ts.map +1 -0
  93. package/dist/components/ui/select.d.ts +14 -0
  94. package/dist/components/ui/select.d.ts.map +1 -0
  95. package/dist/components/ui/separator.d.ts +5 -0
  96. package/dist/components/ui/separator.d.ts.map +1 -0
  97. package/dist/components/ui/sheet.d.ts +28 -0
  98. package/dist/components/ui/sheet.d.ts.map +1 -0
  99. package/dist/components/ui/sidebar.d.ts +70 -0
  100. package/dist/components/ui/sidebar.d.ts.map +1 -0
  101. package/dist/components/ui/skeleton.d.ts +4 -0
  102. package/dist/components/ui/skeleton.d.ts.map +1 -0
  103. package/dist/components/ui/slider.d.ts +5 -0
  104. package/dist/components/ui/slider.d.ts.map +1 -0
  105. package/dist/components/ui/sonner.d.ts +6 -0
  106. package/dist/components/ui/sonner.d.ts.map +1 -0
  107. package/dist/components/ui/spinner.d.ts +7 -0
  108. package/dist/components/ui/spinner.d.ts.map +1 -0
  109. package/dist/components/ui/switch.d.ts +5 -0
  110. package/dist/components/ui/switch.d.ts.map +1 -0
  111. package/dist/components/ui/table.d.ts +11 -0
  112. package/dist/components/ui/table.d.ts.map +1 -0
  113. package/dist/components/ui/tabs.d.ts +13 -0
  114. package/dist/components/ui/tabs.d.ts.map +1 -0
  115. package/dist/components/ui/textarea.d.ts +5 -0
  116. package/dist/components/ui/textarea.d.ts.map +1 -0
  117. package/dist/components/ui/toggle-group.d.ts +13 -0
  118. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  119. package/dist/components/ui/toggle.d.ts +13 -0
  120. package/dist/components/ui/toggle.d.ts.map +1 -0
  121. package/dist/components/ui/tooltip.d.ts +8 -0
  122. package/dist/components/ui/tooltip.d.ts.map +1 -0
  123. package/dist/hooks/use-mobile.d.ts +2 -0
  124. package/dist/hooks/use-mobile.d.ts.map +1 -0
  125. package/dist/index.cjs +82 -0
  126. package/dist/index.d.ts +71 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +20969 -0
  129. package/dist/lib/utils.d.ts +4 -0
  130. package/dist/lib/utils.d.ts.map +1 -0
  131. package/llms.txt +173 -0
  132. package/package.json +125 -0
  133. package/src/components/ui/accordion.tsx +51 -0
  134. package/src/components/ui/alert-dialog.tsx +115 -0
  135. package/src/components/ui/alert.tsx +48 -0
  136. package/src/components/ui/aspect-ratio.tsx +5 -0
  137. package/src/components/ui/attachment.tsx +186 -0
  138. package/src/components/ui/avatar.tsx +57 -0
  139. package/src/components/ui/badge.tsx +40 -0
  140. package/src/components/ui/breadcrumb.tsx +101 -0
  141. package/src/components/ui/bubble.tsx +123 -0
  142. package/src/components/ui/button-group.tsx +74 -0
  143. package/src/components/ui/button.tsx +64 -0
  144. package/src/components/ui/calendar.tsx +63 -0
  145. package/src/components/ui/card.tsx +55 -0
  146. package/src/components/ui/carousel.tsx +252 -0
  147. package/src/components/ui/chart.tsx +323 -0
  148. package/src/components/ui/checkbox.tsx +26 -0
  149. package/src/components/ui/collapsible.tsx +9 -0
  150. package/src/components/ui/command.tsx +136 -0
  151. package/src/components/ui/context-menu.tsx +187 -0
  152. package/src/components/ui/dialog.tsx +103 -0
  153. package/src/components/ui/direction.tsx +15 -0
  154. package/src/components/ui/drawer.tsx +98 -0
  155. package/src/components/ui/dropdown-menu.tsx +186 -0
  156. package/src/components/ui/empty.tsx +75 -0
  157. package/src/components/ui/field.tsx +175 -0
  158. package/src/components/ui/hover-card.tsx +27 -0
  159. package/src/components/ui/input-group.tsx +80 -0
  160. package/src/components/ui/input-otp.tsx +67 -0
  161. package/src/components/ui/input.tsx +24 -0
  162. package/src/components/ui/item.tsx +118 -0
  163. package/src/components/ui/kbd.tsx +21 -0
  164. package/src/components/ui/label.tsx +19 -0
  165. package/src/components/ui/marker.tsx +67 -0
  166. package/src/components/ui/menubar.tsx +218 -0
  167. package/src/components/ui/message-scroller.tsx +206 -0
  168. package/src/components/ui/message.tsx +85 -0
  169. package/src/components/ui/native-select.tsx +29 -0
  170. package/src/components/ui/navigation-menu.tsx +120 -0
  171. package/src/components/ui/pagination.tsx +108 -0
  172. package/src/components/ui/popover.tsx +31 -0
  173. package/src/components/ui/progress.tsx +23 -0
  174. package/src/components/ui/radio-group.tsx +36 -0
  175. package/src/components/ui/resizable.tsx +40 -0
  176. package/src/components/ui/scroll-area.tsx +44 -0
  177. package/src/components/ui/search-input.tsx +97 -0
  178. package/src/components/ui/select.tsx +151 -0
  179. package/src/components/ui/separator.tsx +24 -0
  180. package/src/components/ui/sheet.tsx +124 -0
  181. package/src/components/ui/sidebar.tsx +704 -0
  182. package/src/components/ui/skeleton.tsx +9 -0
  183. package/src/components/ui/slider.tsx +41 -0
  184. package/src/components/ui/sonner.tsx +45 -0
  185. package/src/components/ui/spinner.tsx +21 -0
  186. package/src/components/ui/switch.tsx +27 -0
  187. package/src/components/ui/table.tsx +95 -0
  188. package/src/components/ui/tabs.tsx +119 -0
  189. package/src/components/ui/textarea.tsx +23 -0
  190. package/src/components/ui/toggle-group.tsx +55 -0
  191. package/src/components/ui/toggle.tsx +40 -0
  192. package/src/components/ui/tooltip.tsx +30 -0
  193. package/src/hooks/use-mobile.ts +19 -0
  194. package/src/index.ts +414 -0
  195. package/src/lib/utils.ts +7 -0
  196. package/src/styles/tokens.css +360 -0
  197. package/tailwind.preset.js +235 -0
package/README.md ADDED
@@ -0,0 +1,309 @@
1
+ # PT-AI-Components
2
+
3
+ > **npm 安装名(对外)**:`@ptengine/design-components`
4
+ > **仓内包名**:`@ptengine/pt-ai-components` —— monorepo 里的 import / alias / `workspace:*`
5
+ > 全用这个。改名只发生在发布产物上(见 [RELEASING.md](./RELEASING.md)),两个名字是同一个库。
6
+
7
+ 基于 [shadcn/ui](https://ui.shadcn.com/) 的 PTEngine React 组件库。组件源码拷入本库、按 PTEngine 需要改样式/交互,供 monorepo 内 `apps/` 子项目直接使用。
8
+
9
+ ## 特点
10
+
11
+ - **源码优先**:消费方通过 vite alias 指向 `src`,直接编译源码,无需先 build。
12
+ - **Token 唯一数据源**:`src/styles/tokens.css` 定义所有 CSS 变量——三层嵌套架构(③ shadcn 别名 → ② PTEngine 语义层 → ① 原语层纯通道三元组),透明度只在语义层以 `var(--pt-x) / a` 表达,明暗差异只在语义层覆盖;`tailwind.preset.js` 定义 Token → Tailwind 颜色键映射(实色套 `<alpha-value>`,自带透明度的只包 `rgb()`)。详见 tokens.css 文件头注释。
13
+ - 保留可选 `pnpm build`(vite lib + d.ts),供独立发布。
14
+
15
+ ## 品牌视觉基调
16
+
17
+ 可以概括成「**克制、编辑感、内容优先**」——让整个界面看起来冷静、不吵:
18
+
19
+ - **近黑文字 + 暖灰中性色为绝对主体**,界面安静、不抢内容。文字灰阶全部由同一个
20
+ 近黑原语(`--pt-black`)配不同透明度得来(strong 90% / standard 70% / weak 40%),
21
+ 面与描边走 neutral 色阶与黑色低透明度叠加。
22
+ - **彩色是稀缺资源、按功能发放,而不是用来装饰**。品牌绿只给 Brand 场景(`bg-brand`)、
23
+ 语义色只表达状态(success / danger / warning / information / AI 角色 Token)、
24
+ chart 色板只给数据。没有功能含义的地方不出现彩色。
25
+ - **大字号标题 + 充足留白建立层级**,而非靠色块、分隔线与阴影。字阶见下方
26
+ Typography;Card / 表单控件等根元素无阴影也是同一原则的落地。
27
+
28
+ 新增组件或调整 variant 时先对照这三条:一个改动如果让界面「变吵」了
29
+ (多了一种装饰性颜色、多了一层非浮层阴影、层级靠色块而非字阶),方向就是错的。
30
+
31
+ ## 消费方接入(以 apps/x 为例)
32
+
33
+ 1. **vite alias** — `vite.config.ts`
34
+ ```ts
35
+ '@ptengine/pt-ai-components': resolve(__dirname, '../../packages/pt-ai-components/src')
36
+ ```
37
+ 2. **Tailwind preset + 扫描包源码** — `tailwind.config.js`
38
+ ```js
39
+ import shadcnPreset from '../../packages/pt-ai-components/tailwind.preset.js';
40
+ export default {
41
+ presets: [shadcnPreset],
42
+ content: [
43
+ './src/**/*.{js,ts,jsx,tsx}',
44
+ '../../packages/pt-ai-components/src/**/*.{js,ts,jsx,tsx}'
45
+ ]
46
+ // ...app 专属扩展
47
+ };
48
+ ```
49
+ 3. **引入 token 并挂作用域类** — 入口(如 `main.tsx`)
50
+ ```ts
51
+ import '@ptengine/pt-ai-components/styles/tokens.css';
52
+ document.documentElement.classList.add('pt-ui'); // 或 <html class="pt-ui">
53
+ ```
54
+ 库**不写任何 `:root`/html 级样式**:全部变量为 `--pt-` 前缀、声明在 `.pt-ui`
55
+ 作用域类下——挂在任何宿主上都零撞名。推荐挂 `<html>`(Dialog/Popover 等
56
+ portal 到 body 的浮层才能取到变量);只包子树亦可,但浮层需另行处理。
57
+ 暗色切换:在同一元素上加/去 `.dark` 类。
58
+ 4. **package.json**
59
+ ```json
60
+ "@ptengine/pt-ai-components": "workspace:*"
61
+ ```
62
+ 5. **浮层 z-index 对齐**(宿主已有全局层级体系时):库浮层不写死 `z-50`,
63
+ 而是走三个可覆写变量——`--pt-z-overlay`(dialog / alert-dialog / sheet /
64
+ drawer)< `--pt-z-popup`(popover / select / dropdown-menu / context-menu /
65
+ menubar / hover-card)< `--pt-z-tooltip`(tooltip),未设置时回退 `50`。
66
+ 宿主在自己的全局样式里赋值即可接入既有阶梯(apps/x 设 1000 / 1050 / 1070,
67
+ 见其 `src/styles/variables.css`),数值须保持 overlay < popup < tooltip。
68
+ 这三个变量是「使用规约 4:不覆盖 CSS 变量」的**唯一豁免**——它们是布局
69
+ 集成钩子,不是观感 token,本就设计为由宿主赋值。
70
+
71
+ ## 外部项目接入(npm 安装)
72
+
73
+ 非 monorepo 项目从公共 npm 装(scope `@ptengine`,`access: public`,无需 token)。
74
+ **对外安装名是 `@ptengine/design-components`**:
75
+
76
+ ```bash
77
+ pnpm add @ptengine/design-components
78
+ ```
79
+
80
+ 1. **Tailwind preset + 扫描包产物** — `tailwind.config.js`
81
+ ```js
82
+ import preset from '@ptengine/design-components/tailwind-preset';
83
+ export default {
84
+ presets: [preset],
85
+ content: [
86
+ './src/**/*.{ts,tsx}',
87
+ './node_modules/@ptengine/design-components/dist/**/*.{js,cjs}'
88
+ ]
89
+ };
90
+ ```
91
+ 2. **入口引 token 并挂作用域类**
92
+ ```ts
93
+ import '@ptengine/design-components/styles/tokens.css';
94
+ document.documentElement.classList.add('pt-ui');
95
+ ```
96
+ 3. **组件从包根引**
97
+ ```ts
98
+ import { Button, Dialog, Tabs } from '@ptengine/design-components';
99
+ ```
100
+
101
+ > **包里没有编译好的 CSS**:观感全靠消费方自己的 Tailwind 编译 + `tokens.css` 变量。
102
+ > 上面两步少任何一步,组件都会渲染成无样式的裸 DOM——这不是 bug。
103
+ > `react` / `react-dom`(≥18)是 peerDependency,需宿主自行安装。
104
+ > 浮层 z-index 对齐同上一节第 5 步。
105
+
106
+ ## 使用规约(消费方必读)
107
+
108
+ 本库以**源码直连**方式被消费(`workspace:*` + vite alias 指向 `src`),因此
109
+ **库侧任何修改(token / 组件样式 / 交互规范)一经提交,所有引用项目下次构建或
110
+ 热更新即自动生效**——无需发版、无需升级依赖。要让这个同步机制持续成立,
111
+ 业务项目使用时须遵守:
112
+
113
+ 1. **只从包入口引用**:`import { Button } from '@ptengine/pt-ai-components'`。
114
+ **禁止**把组件源码复制进业务项目——复制即与库脱钩,后续更新不再同步。
115
+ 2. **观感全部交给库**:颜色、字体、字号、圆角、阴影一律由组件与 token 提供。
116
+ 业务代码**禁止**硬编码色值(`#xxx` / `rgb()`)、字体名、字阶之外的字号;
117
+ 需要色彩语义时用 preset 暴露的 token 类(`text-muted-foreground`、
118
+ `bg-secondary`、`border-weak`、`bg-brand` 等)。
119
+ 3. **`className` 只做布局**:透传 className 用于宽度、间距、栅格、对齐等;
120
+ **不要**用它改组件观感(如 `bg-red-500`、`shadow-lg`、`rounded-full`)。
121
+ 观感不满足 → 到库里改 variant / token(全站生效),不在调用处打补丁。
122
+ 4. **不覆盖 CSS 变量**:业务侧不得重定义 `--pt-*` 或别名变量;`tokens.css`
123
+ 只在应用入口引一次,不复制、不改内容;主题切换只用 `.dark` 类。
124
+ 唯一豁免:`--pt-z-overlay / --pt-z-popup / --pt-z-tooltip` 三个浮层
125
+ z-index 集成钩子本就设计为由宿主赋值(见「消费方接入」第 5 步)。
126
+ 5. **缺组件到库里加**:需要新组件时按下方「加组件」流程落到本库
127
+ (结构对齐 shadcn + 按交互状态规范适配),不在 app 内单独手写同类组件。
128
+
129
+ > 破坏性变更(variant 改名、导出项调整等)会在库侧 commit 说明中标注,
130
+ > 消费方按提示迁移。
131
+
132
+ ### 规约的执行
133
+
134
+ 机器强制分三层,现状:**ESLint 层已随迁移阶段 0 在 apps/x 恢复**
135
+ (`apps/x/eslint.config.js`「组件库治理」块:禁直引 Radix / cva、禁深路径引
136
+ 库内部文件、封死 antd;存量 `src/components/ui/**` 豁免,随迁移批次收紧)。
137
+ jscpd 跨包查重 CI 与 CODEOWNERS 审批仍处精简移除状态,如需恢复参考
138
+ 历史提交 c1c0b142f。
139
+
140
+ ## 使用
141
+
142
+ ```tsx
143
+ import { Button, Input, Label, cn } from '@ptengine/pt-ai-components';
144
+
145
+ <Button variant="default">保存</Button>
146
+ <Button variant="secondary" size="sm">取消</Button>
147
+ <Button asChild><a href="/x">链接按钮</a></Button>
148
+ ```
149
+
150
+ ## 加组件
151
+
152
+ 沿用 shadcn 目录约定,把组件放到 `src/components/ui/`,用 `cn()` 合并类名、`cva` 管理 variants,然后在 `src/index.ts` 导出。`components.json` 已配好,也可用 `npx shadcn@latest add <component>` 落到本库再按需定制。
153
+
154
+ ### 交互状态规范(新组件接入必读)
155
+
156
+ 交互反馈统一走「状态层 State Layer」+ 中性交互 Token,**禁止**沿用 shadcn 官方的
157
+ 替换式写法(`hover:bg-primary/90`、`hover:bg-*/80` 等)。拷官方组件进来时按此适配:
158
+
159
+ | 官方写法 | 本库写法 | 说明 |
160
+ |---|---|---|
161
+ | `hover:bg-primary/90` / `hover:bg-*/80` | 变体类里加 `state-layer` | hover 在原样式上叠加 `--pt-interaction-hover`,active 自动叠加 `--pt-interaction-press`(定义见 `tailwind.preset.js`) |
162
+ | `hover:bg-accent hover:text-accent-foreground`(outline/ghost 等) | `state-layer` | 同上,文字色不再切换 |
163
+ | `focus:bg-accent` / `data-[highlighted]:bg-accent`(菜单项、下拉选项) | **保留原写法** | Radix 键盘高亮机制依赖 focus/highlighted 态;`--accent` 已指向 `--pt-interaction-hover`,效果与叠加一致 |
164
+ | `focus-visible:ring-ring` 等焦点环 | **保留原写法** | `--ring` 已指向 `--pt-interaction-focus`(中性 90%) |
165
+ | 持久「选中 / 激活 / 开」态(`data-[state=selected/on]`、`data-[active=true]`) | 元素底色用 `bg-selected` | `--pt-bg-selected` = 中性 8%,**与 hover 同色**;因为 hover 走 state-layer(叠加层而非替换背景),选中态被悬停时两层叠加 ≈ 16%,天然区分「选中」与「悬停」。**不要用品牌绿等彩色表达选中**(彩色只给 Brand / 语义 / 数据)。前提是该元素的 hover 必须是 state-layer 叠加;若 hover 仍是 `hover:bg-*` 替换式,则改用叠加式,或另加区分(如 sidebar 当前项用 `font-medium`) |
166
+ | 纯文字反馈(link 变体 `hover:underline`) | **保留原写法** | 不加状态层 |
167
+
168
+ ### Button 变体词汇(与 shadcn 官方的差异)
169
+
170
+ | 本库 variant | 样式 | 对应官方 |
171
+ |---|---|---|
172
+ | `default`(Primary) | 高强调黑,暗色反白,反转状态层 | 官方 default(本库 `--primary` 指向黑) |
173
+ | `brand` | 品牌绿 | 无(本库新增,`bg-brand`) |
174
+ | `secondary` | 描边白底 | 官方 **outline** 的样式 |
175
+ | `tertiary` | 灰底弱强调 | 官方 **secondary** 的样式 |
176
+
177
+ 拷官方组件/示例进来时:`variant="outline"` → `variant="secondary"`;
178
+ 官方 `variant="secondary"` 的场景按语义改用 `tertiary`。`--primary` 槽位为黑色,
179
+ 品牌绿一律走 `--brand` / `bg-brand`。
180
+
181
+ 想定制某组件观感(配色 / 尺寸 / 圆角),改该组件 cva `variants` 里的类即可全站生效;
182
+ Primary(黑,暗色反白)这类深色表面用 `state-layer-inverse`,其余用 `state-layer`。
183
+
184
+ > **注**:组件源码内不写决策/过程注释(playground 会原样展示源码给使用者),
185
+ > 规范与决策记录统一沉淀在本 README;`/** */` 形式的 props 说明属于 API 文档,保留。
186
+
187
+ 百分比只维护在 `src/styles/tokens.css` 语义层(`--pt-interaction-hover/press/focus`),
188
+ 调整后组件与 `/tokens` 展示页自动跟随。
189
+
190
+ ## 字体 Typography(中/日/英三语)
191
+
192
+ 品牌字体(源自 Figma `Type/Mode` 的 family 变量):EN `Inter` / JA `Noto Sans JP` /
193
+ ZH `Noto Sans SC`。库侧在 `tokens.css` 以 `--font-sans` + `:lang()` 声明三语字体栈
194
+ (`'Inter'` 置前,拉丁字符与数字三语统一用 Inter,CJK 落到 JP/SC;各栈带同语言
195
+ 系统字体回退),preset 将 `fontFamily.sans` 接到 `var(--font-sans)`。
196
+ 组件不声明字体,全部继承。(Figma 中 `family/code` / `family/metric` 亦为 Inter;
197
+ 代码展示场景仍保留等宽 `font-mono`,未用 Inter 覆盖。)
198
+
199
+ **字阶**(preset `fontSize` 整表覆盖,源自 Figma Text Styles,机读存档
200
+ `design/tokens.json`):`2xs 12/16 · xs 13/20 · sm 14/20 · base 16/24 · lg 18/28 ·
201
+ xl 20/32 · 2xl 24/36 · 3xl 28/40 · 4xl 32/48 · 5xl 40/56 · 6xl 48/72 · 7xl 56/72 ·
202
+ 8xl 64/96 · 9xl 72/128`。与 Tailwind 默认的差异:新增 `2xs`;**`xs` 为 13px**(非 12);
203
+ `xl` 起行高/字号按设计表。字重五档:light 300 / normal 400 / medium 500 / semibold 600 / bold 700。
204
+
205
+ **行高按语言可分**:字号三语一致;行高走 `tokens.css` 的 `--lh-*` 变量
206
+ (`:root` = English 基准)。现行策略 ja/zh 沿用 English 值;后续精修时在
207
+ `:lang(ja)` / `:lang(zh)` 预留块中只填与英文不同的档位,全站自动生效,
208
+ 组件零改动(机制已验证:同字号、按语言不同行高)。
209
+
210
+ **消费方应用需要做的三件事:**
211
+
212
+ 1. **正确设置 `<html lang>`**(`en` / `zh-CN` / `ja`,i18n 框架切语言时同步更新)——
213
+ 字体栈按它切换,组件零改动。
214
+ 2. **加载字体文件**(库不打包字体):Next.js 用 `next/font/google`,或 fontsource /
215
+ `<link>` 引 Google Fonts。加载 300/400/500/600/700 五档字重。
216
+ 3. **中国大陆环境自托管 `Noto Sans SC`**(Google Fonts 大陆不可达),并做
217
+ unicode-range 子集切片(CJK 全量单字重为 MB 级)。
218
+
219
+ ### 组件内建文案的本地化(库不做 i18n,消费方传译文)
220
+
221
+ 个别组件自带可见文案或读屏(sr-only / aria-label)标签。库不引 i18n 框架,
222
+ 统一做法是**通过 prop 传入、默认英文**——做多语界面时把译文传进去,不传保持
223
+ 英文,对现有代码零影响。
224
+
225
+ | 组件 | prop | 默认值 |
226
+ |---|---|---|
227
+ | `SearchInput` | `clearLabel` | Clear |
228
+ | `PaginationPrevious` / `PaginationNext` | `label` | Previous / Next |
229
+ | `PaginationEllipsis` / `BreadcrumbEllipsis` | `label` | More pages / More |
230
+ | `DialogContent` / `SheetContent` | `closeLabel` | Close |
231
+ | `CarouselPrevious` / `CarouselNext` | `label` | Previous slide / Next slide |
232
+ | `SidebarTrigger` / `SidebarRail` | `label` | Toggle sidebar |
233
+ | `MessageScrollerButton` | `label` | Scroll to end / Scroll to start |
234
+ | `Spinner` | `label` | Loading |
235
+
236
+ ```tsx
237
+ <PaginationPrevious label={t('上一页')} />
238
+ <DialogContent closeLabel={t('关闭')}>…</DialogContent>
239
+ ```
240
+
241
+ 新组件若要内建文案,照此约定加 prop,不要写死字符串。
242
+
243
+ ## 现有组件(shadcn 官方清单已全量覆盖)
244
+
245
+ **Form & Input**:Button · ButtonGroup · Input · InputGroup · SearchInput(自研) · InputOTP · Label · Field ·
246
+ Textarea · Checkbox · Switch · RadioGroup · Select · NativeSelect · Slider · Toggle ·
247
+ ToggleGroup · Calendar
248
+
249
+ **Navigation**:Breadcrumb · NavigationMenu · Menubar · Pagination · Tabs · Sidebar ·
250
+ Command
251
+
252
+ **Overlay**:Dialog · AlertDialog · Sheet · Drawer · Popover · HoverCard · Tooltip ·
253
+ DropdownMenu · ContextMenu
254
+
255
+ **Data Display**:Table · Card · Avatar · Badge · Accordion · Collapsible · Carousel ·
256
+ Chart · Item · Kbd · AspectRatio
257
+
258
+ **Feedback & Status**:Alert · Progress · Skeleton · Spinner · Sonner(Toaster/toast) · Empty
259
+
260
+ **Chat / AI**(shadcn 2026-06 新增分类):Message · MessageScroller · Bubble · Attachment · Marker
261
+
262
+ **Layout & Utilities**:Separator · ScrollArea · Resizable · Direction
263
+
264
+ **组合模式**(无独立组件文件,示例见 playground):combobox = Popover + Command;
265
+ date-picker = Popover + Calendar;data-table = Table + `@tanstack/react-table`
266
+ (tanstack 仅 playground devDependency,业务项目按需自装)。shadcn 官方 toast 已由
267
+ sonner 取代(不再单独实现);typography 规范见 playground Design Guide。
268
+
269
+ 结构对齐 shadcn 官方,交互反馈走状态层规范。库规范适配点:Card/表单控件/Menubar 根
270
+ 无阴影(浮层 Popover/Sheet/Drawer/菜单类保留阴影);Table 行 hover、
271
+ Toggle/NavigationMenu hover 用状态层或 bg-accent 中性叠加;Slider thumb 无阴影、
272
+ 描边 border-neutral、轨道 bg-secondary;官方用 outline 按钮处一律换本库
273
+ `secondary`(Pagination 当前页、AlertDialog Cancel、Carousel 前后钮、Calendar 翻月钮);
274
+ Chart 色板走 `--chart-1..5` token(映射品牌色系)。
275
+
276
+ **Chat / AI 组件适配记录**(官方源为 Tailwind v4 + Base UI 形态,本库为 v3.4 + Radix,
277
+ 迁移时做了如下决策):
278
+ - **MessageScroller 为自研实现**:官方依赖 `@shadcn/react` 无头包(Base UI render-prop
279
+ 体系)+ v4 专属工具类(`scroll-fade-b` 等),与本库栈不兼容;按同一组件 API
280
+ (Provider/Root/Viewport/Content/Item/Button)零依赖重写,行为=初始定位底部、
281
+ 贴底粘性跟随(ResizeObserver)、离底显示回到底部按钮。
282
+ - **Bubble 砍掉官方 `tinted` 变体**:oklch 相对色彩的品牌染色气泡属装饰性彩色,
283
+ 违反「彩色按功能发放」基调;保留 default/secondary/muted/outline/ghost/destructive。
284
+ 交互气泡(`BubbleContent asChild` 渲染成 button/a)hover 走状态层,default(近黑)
285
+ 气泡通过局部覆写 `--pt-interaction-hover/press` 为 reversal Token 自动反转成白 8%。
286
+ - **Attachment** 根元素 hover(官方 `has-[>a,>button]:hover:bg-muted/50` 替换式)改为
287
+ 状态层叠加(手写 `after:` 层 + `has-` 门控,仅含可点击子元素时生效);shimmer
288
+ 加载效果以 `animate-pulse` 等效。
289
+ - **圆角对齐本库档位**:气泡/附件根 `rounded-xl(12px)` → `rounded-lg(10px)`,内部
290
+ 媒体块 → `rounded-md`。
291
+ - **Direction** 用分包 `@radix-ui/react-direction`(官方统一包 `radix-ui` 形态不引入)。
292
+
293
+ **依赖版本锚定**(升级前先改对应组件源):`recharts ^2.15`(chart.tsx 按 2.x API 写,
294
+ 3.x 类型不兼容)· `react-resizable-panels ^2.1`(4.x 改了导出名)·
295
+ `react-day-picker ^8` + `date-fns ^3`(calendar.tsx 按 v8 classNames API 写)。
296
+
297
+ ## 授权
298
+
299
+ `license: UNLICENSED`。包以 `@ptengine/design-components` 发布在**公共** npm registry
300
+ (`access: public`),
301
+ 目的只是让内部与合作方无门槛 `npm install`,**不等于开源**:源码(`files` 含全量 `src`)
302
+ 可安装、可阅读,但未经 Ptmind 书面许可,不得在 Ptengine 之外的产品中使用、再分发或
303
+ 制作衍生作品。
304
+
305
+ 因此**任何机密内容都不能进这个包** —— `src` / `llms.txt` / `tailwind.preset.js` 全部随包
306
+ 公开发布。新增文件前先确认它属于「可公开的 UI 与设计 token」范畴。
307
+
308
+ 发版流程见 [RELEASING.md](./RELEASING.md);`@ptmafia` GitHub Packages 那条并行分发线见
309
+ [PUBLISHING.md](./PUBLISHING.md)。
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": false,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "tailwind.preset.js",
8
+ "css": "src/styles/tokens.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "aliases": {
14
+ "components": "@/components",
15
+ "ui": "@/components/ui",
16
+ "utils": "@/lib/utils",
17
+ "lib": "@/lib",
18
+ "hooks": "@/hooks"
19
+ },
20
+ "iconLibrary": "lucide"
21
+ }
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
3
+ declare const Accordion: React.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React.RefAttributes<HTMLDivElement>>;
4
+ declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const AccordionContent: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
8
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/components/ui/accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAKhE,QAAA,MAAM,SAAS,8JAA0B,CAAC;AAE1C,QAAA,MAAM,aAAa,iKAKjB,CAAC;AAGH,QAAA,MAAM,gBAAgB,0KAiBpB,CAAC;AAGH,QAAA,MAAM,gBAAgB,oKAWpB,CAAC;AAGH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
3
+ declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
4
+ declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
6
+ declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const AlertDialogHeader: {
9
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
10
+ displayName: string;
11
+ };
12
+ declare const AlertDialogFooter: {
13
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
14
+ displayName: string;
15
+ };
16
+ declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
17
+ declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
18
+ declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
19
+ declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
20
+ export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel };
21
+ //# sourceMappingURL=alert-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../../src/components/ui/alert-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AAKrE,QAAA,MAAM,WAAW,iDAA4B,CAAC;AAE9C,QAAA,MAAM,kBAAkB,wHAA+B,CAAC;AAExD,QAAA,MAAM,iBAAiB,uDAA8B,CAAC;AAEtD,QAAA,MAAM,kBAAkB,wKAYtB,CAAC;AAGH,QAAA,MAAM,kBAAkB,wKAetB,CAAC;AAGH,QAAA,MAAM,iBAAiB;8BAA6B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAEvF,CAAC;AAGF,QAAA,MAAM,iBAAiB;8BAA6B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAKvF,CAAC;AAGF,QAAA,MAAM,gBAAgB,8KASpB,CAAC;AAGH,QAAA,MAAM,sBAAsB,wLAS1B,CAAC;AAGH,QAAA,MAAM,iBAAiB,6KAKrB,CAAC;AAGH,QAAA,MAAM,iBAAiB,6KASrB,CAAC;AAGH,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACpB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
4
+ variant?: "default" | "destructive" | null | undefined;
5
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
6
+ declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLHeadingElement>>;
7
+ declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
8
+ export { Alert, AlertTitle, AlertDescription };
9
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../src/components/ui/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAmBlE,QAAA,MAAM,KAAK;;sHAKT,CAAC;AAGH,QAAA,MAAM,UAAU,qHAQf,CAAC;AAGF,QAAA,MAAM,gBAAgB,yHAKpB,CAAC;AAGH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
2
+ declare const AspectRatio: import('react').ForwardRefExoticComponent<AspectRatioPrimitive.AspectRatioProps & import('react').RefAttributes<HTMLDivElement>>;
3
+ export { AspectRatio };
4
+ //# sourceMappingURL=aspect-ratio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspect-ratio.d.ts","sourceRoot":"","sources":["../../../src/components/ui/aspect-ratio.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AAErE,QAAA,MAAM,WAAW,kIAA4B,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { Button } from './button';
3
+ import * as React from 'react';
4
+ declare const attachmentVariants: (props?: ({
5
+ size?: "default" | "sm" | "xs" | null | undefined;
6
+ orientation?: "horizontal" | "vertical" | null | undefined;
7
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
+ declare function Attachment({ className, state, size, orientation, ...props }: React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof attachmentVariants> & {
9
+ state?: 'idle' | 'uploading' | 'processing' | 'error' | 'done';
10
+ }): React.JSX.Element;
11
+ declare const attachmentMediaVariants: (props?: ({
12
+ variant?: "icon" | "image" | null | undefined;
13
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
14
+ declare function AttachmentMedia({ className, variant, ...props }: React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof attachmentMediaVariants>): React.JSX.Element;
15
+ declare function AttachmentContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
16
+ declare function AttachmentTitle({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
17
+ declare function AttachmentDescription({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
18
+ declare function AttachmentActions({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
19
+ declare function AttachmentAction({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
20
+ declare function AttachmentTrigger({ className, asChild, type, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement> & {
21
+ /** Render the child element as the root (e.g. an <a>), keeping the hit area. */
22
+ asChild?: boolean;
23
+ }): React.JSX.Element;
24
+ declare function AttachmentGroup({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
25
+ export { Attachment, AttachmentGroup, AttachmentMedia, AttachmentContent, AttachmentTitle, AttachmentDescription, AttachmentActions, AttachmentAction, AttachmentTrigger };
26
+ //# sourceMappingURL=attachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../../src/components/ui/attachment.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,kBAAkB;;;8EAgBvB,CAAC;AAEF,iBAAS,UAAU,CAAC,EAChB,SAAS,EACT,KAAc,EACd,IAAgB,EAChB,WAA0B,EAC1B,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GACnC,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;CAClE,qBAWJ;AAED,QAAA,MAAM,uBAAuB;;8EAa5B,CAAC;AAEF,iBAAS,eAAe,CAAC,EACrB,SAAS,EACT,OAAgB,EAChB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,OAAO,uBAAuB,CAAC,qBASrF;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAWvF;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,qBAWtF;AAED,iBAAS,qBAAqB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,qBAW5F;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAWvF;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,qBAUpG;AAED,iBAAS,iBAAiB,CAAC,EACvB,SAAS,EACT,OAAe,EACf,IAAI,EACJ,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC/C,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,qBAWA;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAWrF;AAED,OAAO,EACH,UAAU,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACpB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
4
+ declare const Avatar: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React.RefAttributes<HTMLSpanElement>, "ref"> & VariantProps<(props?: ({
5
+ size?: "sm" | "lg" | "md" | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
7
+ declare const AvatarImage: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React.RefAttributes<HTMLImageElement>, "ref"> & React.RefAttributes<HTMLImageElement>>;
8
+ declare const AvatarFallback: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
9
+ export { Avatar, AvatarImage, AvatarFallback };
10
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAkBlE,QAAA,MAAM,MAAM;;uHAMV,CAAC;AAGH,QAAA,MAAM,WAAW,gKASf,CAAC;AAGH,QAAA,MAAM,cAAc,iKAYlB,CAAC;AAGH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "secondary" | "destructive" | "success" | "warning" | "information" | "ai" | null | undefined;
5
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
+ export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
7
+ }
8
+ declare function Badge({ className, variant, ...props }: BadgeProps): React.JSX.Element;
9
+ export { Badge, badgeVariants };
10
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EAwBlB,CAAC;AAEF,MAAM,WAAW,UACb,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACxC,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAE7C,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAE1D;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ declare const Breadcrumb: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & {
3
+ separator?: React.ReactNode;
4
+ } & React.RefAttributes<HTMLElement>>;
5
+ declare const BreadcrumbList: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>, "ref"> & React.RefAttributes<HTMLOListElement>>;
6
+ declare const BreadcrumbItem: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & React.RefAttributes<HTMLLIElement>>;
7
+ declare const BreadcrumbLink: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & {
8
+ asChild?: boolean;
9
+ } & React.RefAttributes<HTMLAnchorElement>>;
10
+ declare const BreadcrumbPage: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
11
+ declare const BreadcrumbSeparator: {
12
+ ({ children, className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
13
+ displayName: string;
14
+ };
15
+ declare const BreadcrumbEllipsis: {
16
+ ({ className, label, ...props }: React.ComponentProps<"span"> & {
17
+ label?: string;
18
+ }): React.JSX.Element;
19
+ displayName: string;
20
+ };
21
+ export { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis };
22
+ //# sourceMappingURL=breadcrumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/ui/breadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,QAAA,MAAM,UAAU;gBAE0C,KAAK,CAAC,SAAS;qCACK,CAAC;AAG/E,QAAA,MAAM,cAAc,2KAWnB,CAAC;AAGF,QAAA,MAAM,cAAc,kKAInB,CAAC;AAGF,QAAA,MAAM,cAAc;cAEkC,OAAO;2CAU3D,CAAC;AAGH,QAAA,MAAM,cAAc,sKAWnB,CAAC;AAGF,QAAA,MAAM,mBAAmB;wCAAuC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;;CASzF,CAAC;AAIF,QAAA,MAAM,kBAAkB;qCAIrB,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;CAUnD,CAAC;AAGF,OAAO,EACH,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EACrB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare function BubbleGroup({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
4
+ declare const bubbleVariants: (props?: ({
5
+ variant?: "default" | "secondary" | "destructive" | "ghost" | "outline" | "muted" | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ declare function Bubble({ variant, align, className, ...props }: React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof bubbleVariants> & {
8
+ align?: 'start' | 'end';
9
+ }): React.JSX.Element;
10
+ declare function BubbleContent({ asChild, className, ...props }: React.HTMLAttributes<HTMLDivElement> & {
11
+ /** Render the child element as the root (e.g. a <button>), keeping Bubble styles. */
12
+ asChild?: boolean;
13
+ }): React.JSX.Element;
14
+ declare function BubbleReactions({ side, align, className, ...props }: React.HTMLAttributes<HTMLDivElement> & {
15
+ align?: 'start' | 'end';
16
+ side?: 'top' | 'bottom';
17
+ }): React.JSX.Element;
18
+ export { BubbleGroup, Bubble, BubbleContent, BubbleReactions };
19
+ //# sourceMappingURL=bubble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble.d.ts","sourceRoot":"","sources":["../../../src/components/ui/bubble.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAQjF;AAED,QAAA,MAAM,cAAc;;8EAqBnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACZ,OAAmB,EACnB,KAAe,EACf,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GACnC,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IAClC,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CAC3B,qBAUJ;AAED,iBAAS,aAAa,CAAC,EACnB,OAAe,EACf,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IACtC,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,qBAcA;AAsBD,iBAAS,eAAe,CAAC,EACrB,IAAe,EACf,KAAa,EACb,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IACtC,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC3B,qBAUA;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { Separator } from './separator';
3
+ import * as React from 'react';
4
+ declare const buttonGroupVariants: (props?: ({
5
+ orientation?: "horizontal" | "vertical" | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ declare function ButtonGroup({ className, orientation, ...props }: React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof buttonGroupVariants>): React.JSX.Element;
8
+ declare function ButtonGroupText({ className, asChild, ...props }: React.HTMLAttributes<HTMLDivElement> & {
9
+ asChild?: boolean;
10
+ }): React.JSX.Element;
11
+ declare function ButtonGroupSeparator({ className, orientation, ...props }: React.ComponentProps<typeof Separator>): React.JSX.Element;
12
+ export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };
13
+ //# sourceMappingURL=button-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,QAAA,MAAM,mBAAmB;;8EAexB,CAAC;AAEF,iBAAS,WAAW,CAAC,EACjB,SAAS,EACT,WAAW,EACX,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,OAAO,mBAAmB,CAAC,qBAUjF;AAED,iBAAS,eAAe,CAAC,EACrB,SAAS,EACT,OAAe,EACf,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,qBAY9D;AAED,iBAAS,oBAAoB,CAAC,EAC1B,SAAS,EACT,WAAwB,EACxB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,qBASxC;AAED,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "default" | "brand" | "secondary" | "tertiary" | "destructive" | "ghost" | "ghost-destructive" | "secondary-destructive" | "link" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon-sm" | "icon" | "icon-lg" | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
8
+ /** Render the child element as the root (e.g. an <a>), keeping Button styles. */
9
+ asChild?: boolean;
10
+ }
11
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
12
+ export { Button, buttonVariants };
13
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,cAAc;;;8EAkCnB,CAAC;AAEF,MAAM,WAAW,WACb,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACjD,YAAY,CAAC,OAAO,cAAc,CAAC;IACvC,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,MAAM,uFAWX,CAAC;AAGF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { DayPicker } from 'react-day-picker';
2
+ import * as React from 'react';
3
+ export type CalendarProps = React.ComponentProps<typeof DayPicker>;
4
+ declare function Calendar({ className, classNames, showOutsideDays, ...props }: CalendarProps): React.JSX.Element;
5
+ declare namespace Calendar {
6
+ var displayName: string;
7
+ }
8
+ export { Calendar };
9
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAEnE,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,eAAsB,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,qBAkD3F;kBAlDQ,QAAQ;;;AAqDjB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
3
+ declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
4
+ declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
6
+ declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
8
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
9
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,IAAI,6GAQT,CAAC;AAGF,QAAA,MAAM,UAAU,6GAIf,CAAC;AAGF,QAAA,MAAM,SAAS,6GAQd,CAAC;AAGF,QAAA,MAAM,eAAe,6GAIpB,CAAC;AAGF,QAAA,MAAM,WAAW,6GAIhB,CAAC;AAGF,QAAA,MAAM,UAAU,6GAIf,CAAC;AAGF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { default as useEmblaCarousel, UseEmblaCarouselType } from 'embla-carousel-react';
2
+ import * as React from 'react';
3
+ type CarouselApi = UseEmblaCarouselType[1];
4
+ type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
5
+ type CarouselOptions = UseCarouselParameters[0];
6
+ type CarouselPlugin = UseCarouselParameters[1];
7
+ type CarouselProps = {
8
+ opts?: CarouselOptions;
9
+ plugins?: CarouselPlugin;
10
+ orientation?: 'horizontal' | 'vertical';
11
+ setApi?: (api: CarouselApi) => void;
12
+ };
13
+ declare const Carousel: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & CarouselProps & React.RefAttributes<HTMLDivElement>>;
14
+ declare const CarouselContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
15
+ declare const CarouselItem: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
16
+ declare const CarouselPrevious: React.ForwardRefExoticComponent<Omit<import('./button').ButtonProps & React.RefAttributes<HTMLButtonElement> & {
17
+ label?: string;
18
+ }, "ref"> & React.RefAttributes<HTMLButtonElement>>;
19
+ declare const CarouselNext: React.ForwardRefExoticComponent<Omit<import('./button').ButtonProps & React.RefAttributes<HTMLButtonElement> & {
20
+ label?: string;
21
+ }, "ref"> & React.RefAttributes<HTMLButtonElement>>;
22
+ export { type CarouselApi, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext };
23
+ //# sourceMappingURL=carousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,gBAAgB,EAAE,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAMnF,KAAK,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AACjE,KAAK,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAChD,KAAK,cAAc,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,aAAa,GAAG;IACjB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACvC,CAAC;AAuBF,QAAA,MAAM,QAAQ,6HA2FZ,CAAC;AAGH,QAAA,MAAM,eAAe,6GAkBpB,CAAC;AAGF,QAAA,MAAM,YAAY,6GAkBjB,CAAC;AAGF,QAAA,MAAM,gBAAgB;YAE8B,MAAM;mDA6BzD,CAAC;AAGF,QAAA,MAAM,YAAY;YAEkC,MAAM;mDA6BzD,CAAC;AAGF,OAAO,EACH,KAAK,WAAW,EAChB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACf,CAAC"}