@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.
- package/README.md +309 -0
- package/components.json +21 -0
- package/dist/components/ui/accordion.d.ts +8 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +21 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +4 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/attachment.d.ts +26 -0
- package/dist/components/ui/attachment.d.ts.map +1 -0
- package/dist/components/ui/avatar.d.ts +10 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +22 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/bubble.d.ts +19 -0
- package/dist/components/ui/bubble.d.ts.map +1 -0
- package/dist/components/ui/button-group.d.ts +13 -0
- package/dist/components/ui/button-group.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +13 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/carousel.d.ts +23 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/chart.d.ts +63 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/command.d.ts +81 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/context-menu.d.ts +28 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/direction.d.ts +8 -0
- package/dist/components/ui/direction.d.ts.map +1 -0
- package/dist/components/ui/drawer.d.ts +23 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/empty.d.ts +13 -0
- package/dist/components/ui/empty.d.ts.map +1 -0
- package/dist/components/ui/field.d.ts +25 -0
- package/dist/components/ui/field.d.ts.map +1 -0
- package/dist/components/ui/hover-card.d.ts +7 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/input-group.d.ts +13 -0
- package/dist/components/ui/input-group.d.ts.map +1 -0
- package/dist/components/ui/input-otp.d.ts +35 -0
- package/dist/components/ui/input-otp.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/item.d.ts +24 -0
- package/dist/components/ui/item.d.ts.map +1 -0
- package/dist/components/ui/kbd.d.ts +5 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/marker.d.ts +13 -0
- package/dist/components/ui/marker.d.ts.map +1 -0
- package/dist/components/ui/menubar.d.ts +29 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/message-scroller.d.ts +26 -0
- package/dist/components/ui/message-scroller.d.ts.map +1 -0
- package/dist/components/ui/message.d.ts +11 -0
- package/dist/components/ui/message.d.ts.map +1 -0
- package/dist/components/ui/native-select.d.ts +4 -0
- package/dist/components/ui/native-select.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +13 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/pagination.d.ts +35 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/popover.d.ts +8 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/progress.d.ts +5 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/radio-group.d.ts +6 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/resizable.d.ts +24 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/search-input.d.ts +23 -0
- package/dist/components/ui/search-input.d.ts.map +1 -0
- package/dist/components/ui/select.d.ts +14 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/sheet.d.ts +28 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sidebar.d.ts +70 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/skeleton.d.ts +4 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/slider.d.ts +5 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/sonner.d.ts +6 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/spinner.d.ts +7 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/tabs.d.ts +13 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/textarea.d.ts +5 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +13 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle.d.ts +13 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/index.cjs +82 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20969 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/llms.txt +173 -0
- package/package.json +125 -0
- package/src/components/ui/accordion.tsx +51 -0
- package/src/components/ui/alert-dialog.tsx +115 -0
- package/src/components/ui/alert.tsx +48 -0
- package/src/components/ui/aspect-ratio.tsx +5 -0
- package/src/components/ui/attachment.tsx +186 -0
- package/src/components/ui/avatar.tsx +57 -0
- package/src/components/ui/badge.tsx +40 -0
- package/src/components/ui/breadcrumb.tsx +101 -0
- package/src/components/ui/bubble.tsx +123 -0
- package/src/components/ui/button-group.tsx +74 -0
- package/src/components/ui/button.tsx +64 -0
- package/src/components/ui/calendar.tsx +63 -0
- package/src/components/ui/card.tsx +55 -0
- package/src/components/ui/carousel.tsx +252 -0
- package/src/components/ui/chart.tsx +323 -0
- package/src/components/ui/checkbox.tsx +26 -0
- package/src/components/ui/collapsible.tsx +9 -0
- package/src/components/ui/command.tsx +136 -0
- package/src/components/ui/context-menu.tsx +187 -0
- package/src/components/ui/dialog.tsx +103 -0
- package/src/components/ui/direction.tsx +15 -0
- package/src/components/ui/drawer.tsx +98 -0
- package/src/components/ui/dropdown-menu.tsx +186 -0
- package/src/components/ui/empty.tsx +75 -0
- package/src/components/ui/field.tsx +175 -0
- package/src/components/ui/hover-card.tsx +27 -0
- package/src/components/ui/input-group.tsx +80 -0
- package/src/components/ui/input-otp.tsx +67 -0
- package/src/components/ui/input.tsx +24 -0
- package/src/components/ui/item.tsx +118 -0
- package/src/components/ui/kbd.tsx +21 -0
- package/src/components/ui/label.tsx +19 -0
- package/src/components/ui/marker.tsx +67 -0
- package/src/components/ui/menubar.tsx +218 -0
- package/src/components/ui/message-scroller.tsx +206 -0
- package/src/components/ui/message.tsx +85 -0
- package/src/components/ui/native-select.tsx +29 -0
- package/src/components/ui/navigation-menu.tsx +120 -0
- package/src/components/ui/pagination.tsx +108 -0
- package/src/components/ui/popover.tsx +31 -0
- package/src/components/ui/progress.tsx +23 -0
- package/src/components/ui/radio-group.tsx +36 -0
- package/src/components/ui/resizable.tsx +40 -0
- package/src/components/ui/scroll-area.tsx +44 -0
- package/src/components/ui/search-input.tsx +97 -0
- package/src/components/ui/select.tsx +151 -0
- package/src/components/ui/separator.tsx +24 -0
- package/src/components/ui/sheet.tsx +124 -0
- package/src/components/ui/sidebar.tsx +704 -0
- package/src/components/ui/skeleton.tsx +9 -0
- package/src/components/ui/slider.tsx +41 -0
- package/src/components/ui/sonner.tsx +45 -0
- package/src/components/ui/spinner.tsx +21 -0
- package/src/components/ui/switch.tsx +27 -0
- package/src/components/ui/table.tsx +95 -0
- package/src/components/ui/tabs.tsx +119 -0
- package/src/components/ui/textarea.tsx +23 -0
- package/src/components/ui/toggle-group.tsx +55 -0
- package/src/components/ui/toggle.tsx +40 -0
- package/src/components/ui/tooltip.tsx +30 -0
- package/src/hooks/use-mobile.ts +19 -0
- package/src/index.ts +414 -0
- package/src/lib/utils.ts +7 -0
- package/src/styles/tokens.css +360 -0
- package/tailwind.preset.js +235 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PT-AI-Components (@ptengine/pt-ai-components) — Design Token 唯一数据源
|
|
3
|
+
*
|
|
4
|
+
* 三层嵌套架构,色值物理上只存在于最底的原语层(单一真值源):
|
|
5
|
+
*
|
|
6
|
+
* ③ shadcn 兼容别名(--pt-background / --pt-primary / --pt-border …)
|
|
7
|
+
* 供库内组件(Button / Input …)沿用 shadcn 类名。**只引用语义层**,
|
|
8
|
+
* 自身不存值、不带透明度、无明暗差异(明暗差异全部在语义层)。
|
|
9
|
+
* 声明在 `.pt-ui` 作用域块:库不写任何 :root/html 级样式,
|
|
10
|
+
* 使 var() 替换在各作用域内用当地语义值发生(见该块前的注释)。
|
|
11
|
+
*
|
|
12
|
+
* ② PTEngine 语义层(--pt-text/bg/border/interaction/chart/link/role-*)
|
|
13
|
+
* 设计系统语义色。**统一「未包裹」形态**(不写 rgb() 外壳):
|
|
14
|
+
* · 实色 → 纯通道引用: --pt-brand: var(--pt-green-500);
|
|
15
|
+
* · 需要透明度 → 通道 + alpha:--pt-text-strong: var(--pt-black) / 0.9;
|
|
16
|
+
* 透明度只在这一层定义。light / dark 差异通过 .dark 覆盖语义 Token 实现。
|
|
17
|
+
*
|
|
18
|
+
* ① PTEngine 原语层 Primitives(唯一存最终色值的一层,与主题无关)
|
|
19
|
+
* **只存纯通道三元组**(如 --pt-green-500: 37 172 0),不含任何透明度
|
|
20
|
+
* (原 white/N、black/N 透明档位已删除,透明度改由语义层 `/ a` 表达)。
|
|
21
|
+
* 改色只需改这一层,三层自动跟随 = single source of truth。
|
|
22
|
+
* 注:原语在 `.pt-ui` 声明;`.pt-ui.dark` 只覆盖语义层,原语靠继承取用。
|
|
23
|
+
* HEX 仅在 /tokens 展示页由运行时计算标注,**不参与代码**。
|
|
24
|
+
*
|
|
25
|
+
* 消费规则(rgb() 外壳只在最外层包一次,永不嵌套):
|
|
26
|
+
* · preset 里实色别名 → rgb(var(--x) / <alpha-value>),支持 bg-primary/90;
|
|
27
|
+
* · 自带透明度的别名(border / input / sidebar-border)→ rgb(var(--x)),
|
|
28
|
+
* 不再叠 <alpha-value>(否则双 alpha 非法);
|
|
29
|
+
* · 在 Tailwind 之外直接使用任何 Token(内联 style / JS / SVG)→
|
|
30
|
+
* 自己包一层:color: rgb(var(--pt-text-strong))。
|
|
31
|
+
*
|
|
32
|
+
* 消费方在入口处 `import '@ptengine/pt-ai-components/styles/tokens.css'`。
|
|
33
|
+
* 纯 .pt-ui/.pt-ui.dark(不套 @layer)以避免 cascade layer 副作用。
|
|
34
|
+
* 接入:给 <html>(推荐,浮层 portal 可达)或子树容器挂 `.pt-ui` 类;深浅切换加/去 `.dark` 类。全部变量 --pt- 前缀,与宿主零撞名。
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/* ── 字体 Typography · --pt-font-sans 按语言切换(由 html lang 驱动)──
|
|
38
|
+
* 品牌字体(源自 Figma Type/Mode 的 family 变量):EN 'Inter' /
|
|
39
|
+
* JA 'Noto Sans JP' / ZH 'Noto Sans SC'。'Inter' 在 CJK 栈中置前:
|
|
40
|
+
* 拉丁字符与数字三语统一用 Inter,CJK 字符落到 JP/SC;各栈保留
|
|
41
|
+
* 同语言系统字体回退(webfont 未加载完时观感不劣化)。
|
|
42
|
+
* 字体文件由消费方应用加载(next/font / fontsource / <link>),库只
|
|
43
|
+
* 声明栈;中国大陆环境需自托管 Noto Sans SC,详见 README。 */
|
|
44
|
+
.pt-ui {
|
|
45
|
+
--pt-font-sans: 'Inter', system-ui, -apple-system, sans-serif;
|
|
46
|
+
}
|
|
47
|
+
:lang(ja) {
|
|
48
|
+
--pt-font-sans: 'Inter', 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', Meiryo,
|
|
49
|
+
sans-serif;
|
|
50
|
+
}
|
|
51
|
+
:lang(zh) {
|
|
52
|
+
--pt-font-sans: 'Inter', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
|
|
53
|
+
}
|
|
54
|
+
/* ── 行高 Line height · 同字号按语言可不同(preset fontSize 引用)──
|
|
55
|
+
* .pt-ui = English 基准(Figma Text Styles)。
|
|
56
|
+
* 现行策略:ja / zh 暂与 English 一致——未覆盖的档位自动沿用
|
|
57
|
+
* .pt-ui 值,因此无需显式声明。后续按语言精修时,在下方
|
|
58
|
+
* :lang(ja) / :lang(zh) 块中只填与英文不同的档位即可全站生效。 */
|
|
59
|
+
.pt-ui {
|
|
60
|
+
--pt-lh-2xs: 16px;
|
|
61
|
+
--pt-lh-xs: 20px;
|
|
62
|
+
--pt-lh-sm: 20px;
|
|
63
|
+
--pt-lh-base: 24px;
|
|
64
|
+
--pt-lh-lg: 28px;
|
|
65
|
+
--pt-lh-xl: 32px;
|
|
66
|
+
--pt-lh-2xl: 36px;
|
|
67
|
+
--pt-lh-3xl: 40px;
|
|
68
|
+
--pt-lh-4xl: 48px;
|
|
69
|
+
--pt-lh-5xl: 56px;
|
|
70
|
+
--pt-lh-6xl: 72px;
|
|
71
|
+
--pt-lh-7xl: 72px;
|
|
72
|
+
--pt-lh-8xl: 96px;
|
|
73
|
+
--pt-lh-9xl: 128px;
|
|
74
|
+
}
|
|
75
|
+
/* 精修预留位(示例::lang(ja) { --pt-lh-sm: 24px; }):
|
|
76
|
+
* :lang(ja) { }
|
|
77
|
+
* :lang(zh) { } */
|
|
78
|
+
/* 嵌套语言孤岛(如英文页里一段 lang="ja" 的区域):显式带 lang 的
|
|
79
|
+
* 元素重新解析 var,字体随该区域语言切换。 */
|
|
80
|
+
[lang] {
|
|
81
|
+
font-family: var(--pt-font-sans), system-ui, sans-serif;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* ── ③ shadcn 兼容别名 · 全部引用语义层,自身无明暗差异 ────────
|
|
85
|
+
* 选择器含 .dark 的原因:CSS var() 替换发生在「声明所在元素」上,
|
|
86
|
+
* 后代继承的是已替换的结果。若只在作用域根声明,嵌套 .dark 容器会
|
|
87
|
+
* 继承到按亮色语义烘焙的值。让同一份声明同时作用于 .light/.dark
|
|
88
|
+
* 作用域,替换就会在该作用域内用当地语义值重新发生(零重复代码)。 */
|
|
89
|
+
.pt-ui {
|
|
90
|
+
--pt-background: var(--pt-bg-default);
|
|
91
|
+
--pt-foreground: var(--pt-fg-default);
|
|
92
|
+
--pt-card: var(--pt-bg-box);
|
|
93
|
+
--pt-card-foreground: var(--pt-fg-default);
|
|
94
|
+
--pt-popover: var(--pt-bg-box);
|
|
95
|
+
--pt-popover-foreground: var(--pt-fg-default);
|
|
96
|
+
--pt-primary: var(--pt-bg-strong); /* 高强调黑(暗色自动反白) */
|
|
97
|
+
--pt-primary-foreground: var(--pt-text-inverse);
|
|
98
|
+
--pt-brand: var(--pt-brand); /* 品牌绿,供 Brand 场景(bg-brand) */
|
|
99
|
+
--pt-brand-foreground: var(--pt-text-stable);
|
|
100
|
+
--pt-secondary: var(--pt-bg-secondary);
|
|
101
|
+
--pt-secondary-foreground: var(--pt-fg-default);
|
|
102
|
+
--pt-muted: var(--pt-bg-secondary);
|
|
103
|
+
--pt-muted-foreground: var(--pt-fg-muted);
|
|
104
|
+
--pt-accent: var(--pt-interaction-hover); /* 交互高亮=中性叠加(黑/白 + alpha,百分比见语义层) */
|
|
105
|
+
--pt-accent-foreground: var(--pt-fg-default);
|
|
106
|
+
--pt-destructive: var(--pt-bg-danger-standard);
|
|
107
|
+
--pt-destructive-foreground: var(--pt-text-stable);
|
|
108
|
+
--pt-border: var(--pt-border-default);
|
|
109
|
+
--pt-input: var(--pt-border-input);
|
|
110
|
+
--pt-ring: var(--pt-interaction-focus); /* 焦点环=中性(黑90%/白90%),自带 alpha */
|
|
111
|
+
--pt-chart-1: var(--pt-chart-1);
|
|
112
|
+
--pt-chart-2: var(--pt-chart-2);
|
|
113
|
+
--pt-chart-3: var(--pt-chart-3);
|
|
114
|
+
--pt-chart-4: var(--pt-chart-4);
|
|
115
|
+
--pt-chart-5: var(--pt-chart-5);
|
|
116
|
+
--pt-sidebar: var(--pt-bg-box);
|
|
117
|
+
--pt-sidebar-foreground: var(--pt-fg-default);
|
|
118
|
+
--pt-sidebar-primary: var(--pt-bg-strong);
|
|
119
|
+
--pt-sidebar-primary-foreground: var(--pt-text-inverse);
|
|
120
|
+
--pt-sidebar-accent: var(--pt-interaction-hover);
|
|
121
|
+
--pt-sidebar-accent-foreground: var(--pt-fg-default);
|
|
122
|
+
--pt-sidebar-border: var(--pt-border-default);
|
|
123
|
+
--pt-sidebar-ring: var(--pt-interaction-focus);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.pt-ui {
|
|
127
|
+
--pt-radius: 10px; /* px 硬值:rem 会被宿主根字号缩放 */
|
|
128
|
+
--pt-radius-md: calc(var(--pt-radius) - 2px); /* 8px:default/lg 档控件 */
|
|
129
|
+
--pt-radius-sm: calc(var(--pt-radius) - 4px); /* 6px:sm 档控件 */
|
|
130
|
+
|
|
131
|
+
/* ── ② PTEngine 语义层(Light)· 未包裹形态,全部引用原语 ──── */
|
|
132
|
+
/* role(角色:补齐 shadcn 别名所需的语义映射,纯通道或通道+alpha) */
|
|
133
|
+
--pt-brand: var(--pt-green-500);
|
|
134
|
+
--pt-fg-default: var(--pt-black);
|
|
135
|
+
--pt-fg-muted: var(--pt-neutral-600);
|
|
136
|
+
--pt-bg-secondary: var(--pt-neutral-50);
|
|
137
|
+
--pt-border-default: var(--pt-neutral-100);
|
|
138
|
+
--pt-border-input: var(--pt-neutral-100);
|
|
139
|
+
/* text */
|
|
140
|
+
--pt-text-strong: var(--pt-black) / 0.9;
|
|
141
|
+
--pt-text-standard: var(--pt-black) / 0.7;
|
|
142
|
+
--pt-text-tage: var(--pt-black) / 0.6;
|
|
143
|
+
--pt-text-weak: var(--pt-black) / 0.4;
|
|
144
|
+
--pt-text-disabled: var(--pt-black) / 0.3;
|
|
145
|
+
--pt-text-stable: var(--pt-white);
|
|
146
|
+
--pt-text-inverse: var(--pt-white);
|
|
147
|
+
--pt-text-brand: var(--pt-lime-800);
|
|
148
|
+
--pt-text-brand-standar: var(--pt-lime-500);
|
|
149
|
+
--pt-text-neutral: var(--pt-neutral-700);
|
|
150
|
+
--pt-text-success: var(--pt-green-700);
|
|
151
|
+
--pt-text-success-standar: var(--pt-green-500);
|
|
152
|
+
--pt-text-danger: var(--pt-red-700);
|
|
153
|
+
--pt-text-danger-standar: var(--pt-red-600);
|
|
154
|
+
--pt-text-warning: var(--pt-orange-700);
|
|
155
|
+
--pt-text-warning-standar: var(--pt-orange-500);
|
|
156
|
+
--pt-text-information: var(--pt-blue-700);
|
|
157
|
+
--pt-text-information-standar: var(--pt-blue-500);
|
|
158
|
+
--pt-text-ai: var(--pt-fuchsia-700);
|
|
159
|
+
--pt-text-ai-standar: var(--pt-fuchsia-500);
|
|
160
|
+
/* background */
|
|
161
|
+
--pt-bg-default: var(--pt-white);
|
|
162
|
+
--pt-bg-box: var(--pt-white);
|
|
163
|
+
--pt-bg-strong: var(--pt-neutral-950);
|
|
164
|
+
--pt-bg-neutral: var(--pt-black) / 0.08;
|
|
165
|
+
--pt-bg-weak: var(--pt-black) / 0.03;
|
|
166
|
+
--pt-bg-disable: var(--pt-black) / 0.1;
|
|
167
|
+
--pt-bg-selected: var(--pt-black) / 0.08; /* 选中/激活底层=中性 8%(与 hover 同色,靠状态层叠加区分:激活+hover≈16%) */
|
|
168
|
+
--pt-bg-brand-subtler: var(--pt-lime-100);
|
|
169
|
+
--pt-bg-brand-subtle: var(--pt-lime-300);
|
|
170
|
+
--pt-bg-brand-standard: var(--pt-lime-500);
|
|
171
|
+
--pt-bg-neutral-subtler: var(--pt-neutral-500) / 0.2;
|
|
172
|
+
--pt-bg-positive-subtler: var(--pt-green-500) / 0.2;
|
|
173
|
+
--pt-bg-positive-subtle: var(--pt-green-300);
|
|
174
|
+
--pt-bg-positive-standard: var(--pt-green-500);
|
|
175
|
+
--pt-bg-danger-subtler: var(--pt-red-500) / 0.2;
|
|
176
|
+
--pt-bg-danger-subtle: var(--pt-red-300);
|
|
177
|
+
--pt-bg-danger-standard: var(--pt-red-600);
|
|
178
|
+
--pt-bg-warning-subtler: var(--pt-orange-500) / 0.2;
|
|
179
|
+
--pt-bg-warning-subtle: var(--pt-orange-300);
|
|
180
|
+
--pt-bg-warning-standard: var(--pt-orange-500);
|
|
181
|
+
--pt-bg-information-subtler: var(--pt-blue-500) / 0.2;
|
|
182
|
+
--pt-bg-information-subtle: var(--pt-blue-300);
|
|
183
|
+
--pt-bg-information-standard: var(--pt-blue-500);
|
|
184
|
+
--pt-bg-ai-subtler: var(--pt-fuchsia-500) / 0.2;
|
|
185
|
+
--pt-bg-ai-subtle: var(--pt-fuchsia-300);
|
|
186
|
+
--pt-bg-ai-standard: var(--pt-fuchsia-500);
|
|
187
|
+
/* border */
|
|
188
|
+
--pt-border-strong: var(--pt-black) / 0.9;
|
|
189
|
+
--pt-border-neutral: var(--pt-black) / 0.2;
|
|
190
|
+
--pt-border-weak: var(--pt-black) / 0.08;
|
|
191
|
+
--pt-border-inverse: var(--pt-white);
|
|
192
|
+
--pt-border-brand: var(--pt-lime-200);
|
|
193
|
+
--pt-border-success: var(--pt-green-100);
|
|
194
|
+
--pt-border-danger: var(--pt-red-100);
|
|
195
|
+
--pt-border-warning: var(--pt-orange-100);
|
|
196
|
+
--pt-border-information: var(--pt-blue-100);
|
|
197
|
+
--pt-border-ai: var(--pt-fuchsia-100);
|
|
198
|
+
/* interaction */
|
|
199
|
+
--pt-interaction-hover: var(--pt-black) / 0.08;
|
|
200
|
+
--pt-interaction-press: var(--pt-black) / 0.1;
|
|
201
|
+
--pt-interaction-focus: var(--pt-black) / 0.9;
|
|
202
|
+
--pt-interaction-reversal-hover: var(--pt-white) / 0.08;
|
|
203
|
+
--pt-interaction-reversal-press: var(--pt-white) / 0.1;
|
|
204
|
+
--pt-interaction-reversal-focus: var(--pt-white) / 0.9;
|
|
205
|
+
/* chart */
|
|
206
|
+
--pt-chart-0: var(--pt-black);
|
|
207
|
+
--pt-chart-1: var(--pt-green-500);
|
|
208
|
+
--pt-chart-2: var(--pt-lime-500);
|
|
209
|
+
--pt-chart-3: var(--pt-orange-500);
|
|
210
|
+
--pt-chart-4: var(--pt-blue-500);
|
|
211
|
+
--pt-chart-5: var(--pt-fuchsia-500);
|
|
212
|
+
/* link */
|
|
213
|
+
--pt-link-blue: var(--pt-blue-500);
|
|
214
|
+
--pt-link-green: var(--pt-green-500);
|
|
215
|
+
|
|
216
|
+
/* ── ① PTEngine 原语层 Primitives(纯通道三元组,唯一真值源)──
|
|
217
|
+
* 底层调色板(取自 Figma「Primitives」集合,单一模式,与主题无关,
|
|
218
|
+
* 只在 .pt-ui 声明、不随 .dark 变化)。上面两层从这里取值。
|
|
219
|
+
* 不含透明度——透明度由语义层以 `var(--pt-x) / a` 表达。 */
|
|
220
|
+
/* base */
|
|
221
|
+
--pt-white: 255 255 255;
|
|
222
|
+
--pt-black: 16 28 31;
|
|
223
|
+
/* neutral */
|
|
224
|
+
--pt-neutral-50: 243 244 244;
|
|
225
|
+
--pt-neutral-100: 231 232 233;
|
|
226
|
+
--pt-neutral-200: 207 210 210;
|
|
227
|
+
--pt-neutral-300: 183 187 188;
|
|
228
|
+
--pt-neutral-400: 159 164 165;
|
|
229
|
+
--pt-neutral-500: 135 141 143;
|
|
230
|
+
--pt-neutral-600: 112 119 121;
|
|
231
|
+
--pt-neutral-700: 88 96 98;
|
|
232
|
+
--pt-neutral-800: 64 73 76;
|
|
233
|
+
--pt-neutral-900: 40 51 53;
|
|
234
|
+
--pt-neutral-950: 28 39 42;
|
|
235
|
+
/* red */
|
|
236
|
+
--pt-red: 255 71 71;
|
|
237
|
+
--pt-red-50: 255 237 237;
|
|
238
|
+
--pt-red-100: 255 218 218;
|
|
239
|
+
--pt-red-200: 255 181 181;
|
|
240
|
+
--pt-red-300: 255 145 145;
|
|
241
|
+
--pt-red-400: 255 108 108;
|
|
242
|
+
--pt-red-500: 255 71 71;
|
|
243
|
+
--pt-red-600: 207 62 63;
|
|
244
|
+
--pt-red-700: 159 54 55;
|
|
245
|
+
--pt-red-800: 112 45 47;
|
|
246
|
+
--pt-red-900: 64 37 39;
|
|
247
|
+
--pt-red-950: 28 30 33;
|
|
248
|
+
/* orange */
|
|
249
|
+
--pt-orange: 255 144 59;
|
|
250
|
+
--pt-orange-50: 255 244 235;
|
|
251
|
+
--pt-orange-100: 255 233 216;
|
|
252
|
+
--pt-orange-200: 255 211 177;
|
|
253
|
+
--pt-orange-300: 255 188 137;
|
|
254
|
+
--pt-orange-400: 255 166 98;
|
|
255
|
+
--pt-orange-500: 255 144 59;
|
|
256
|
+
--pt-orange-600: 207 121 53;
|
|
257
|
+
--pt-orange-700: 159 98 48;
|
|
258
|
+
--pt-orange-800: 112 74 42;
|
|
259
|
+
--pt-orange-900: 64 51 37;
|
|
260
|
+
--pt-orange-950: 28 34 32;
|
|
261
|
+
/* lime */
|
|
262
|
+
--pt-lime: 200 240 80;
|
|
263
|
+
--pt-lime-50: 249 253 237;
|
|
264
|
+
--pt-lime-100: 244 252 220;
|
|
265
|
+
--pt-lime-200: 233 249 185;
|
|
266
|
+
--pt-lime-300: 222 246 150;
|
|
267
|
+
--pt-lime-400: 211 243 115;
|
|
268
|
+
--pt-lime-500: 200 240 80;
|
|
269
|
+
--pt-lime-600: 163 198 70;
|
|
270
|
+
--pt-lime-700: 126 155 60;
|
|
271
|
+
--pt-lime-800: 90 113 51;
|
|
272
|
+
--pt-lime-900: 53 70 41;
|
|
273
|
+
--pt-lime-950: 25 39 33;
|
|
274
|
+
/* green */
|
|
275
|
+
--pt-green: 37 172 0;
|
|
276
|
+
--pt-green-50: 233 247 229;
|
|
277
|
+
--pt-green-100: 211 238 204;
|
|
278
|
+
--pt-green-200: 168 222 153;
|
|
279
|
+
--pt-green-300: 124 205 102;
|
|
280
|
+
--pt-green-400: 81 189 51;
|
|
281
|
+
--pt-green-500: 37 172 0;
|
|
282
|
+
--pt-green-600: 33 143 6;
|
|
283
|
+
--pt-green-700: 29 114 12;
|
|
284
|
+
--pt-green-800: 24 86 19;
|
|
285
|
+
--pt-green-900: 20 57 25;
|
|
286
|
+
--pt-green-950: 17 35 29;
|
|
287
|
+
/* blue */
|
|
288
|
+
--pt-blue: 34 145 248;
|
|
289
|
+
--pt-blue-50: 233 244 254;
|
|
290
|
+
--pt-blue-100: 211 233 254;
|
|
291
|
+
--pt-blue-200: 167 211 252;
|
|
292
|
+
--pt-blue-300: 122 189 251;
|
|
293
|
+
--pt-blue-400: 78 167 249;
|
|
294
|
+
--pt-blue-500: 34 145 248;
|
|
295
|
+
--pt-blue-600: 30 122 205;
|
|
296
|
+
--pt-blue-700: 27 98 161;
|
|
297
|
+
--pt-blue-800: 23 75 118;
|
|
298
|
+
--pt-blue-900: 20 51 74;
|
|
299
|
+
--pt-blue-950: 17 34 42;
|
|
300
|
+
/* fuchsia */
|
|
301
|
+
--pt-fuchsia: 191 99 243;
|
|
302
|
+
--pt-fuchsia-50: 249 239 254;
|
|
303
|
+
--pt-fuchsia-100: 242 224 253;
|
|
304
|
+
--pt-fuchsia-200: 229 193 250;
|
|
305
|
+
--pt-fuchsia-300: 217 161 248;
|
|
306
|
+
--pt-fuchsia-400: 204 130 245;
|
|
307
|
+
--pt-fuchsia-500: 191 99 243;
|
|
308
|
+
--pt-fuchsia-600: 156 85 201;
|
|
309
|
+
--pt-fuchsia-700: 121 71 158;
|
|
310
|
+
--pt-fuchsia-800: 86 56 116;
|
|
311
|
+
--pt-fuchsia-900: 51 42 73;
|
|
312
|
+
--pt-fuchsia-950: 25 32 42;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* ── .dark:只覆盖语义层(别名与原语零重复声明)─────────────── */
|
|
316
|
+
.pt-ui.dark,
|
|
317
|
+
.dark .pt-ui {
|
|
318
|
+
/* role */
|
|
319
|
+
--pt-fg-default: var(--pt-white);
|
|
320
|
+
--pt-fg-muted: var(--pt-neutral-400);
|
|
321
|
+
--pt-bg-secondary: var(--pt-neutral-800);
|
|
322
|
+
--pt-border-default: var(--pt-white) / 0.1;
|
|
323
|
+
--pt-border-input: var(--pt-white) / 0.15;
|
|
324
|
+
/* text */
|
|
325
|
+
--pt-text-strong: var(--pt-white) / 0.9;
|
|
326
|
+
--pt-text-standard: var(--pt-white) / 0.7;
|
|
327
|
+
--pt-text-tage: var(--pt-white) / 0.6;
|
|
328
|
+
--pt-text-weak: var(--pt-white) / 0.4;
|
|
329
|
+
--pt-text-disabled: var(--pt-white) / 0.3;
|
|
330
|
+
--pt-text-inverse: var(--pt-black);
|
|
331
|
+
/* background */
|
|
332
|
+
--pt-bg-default: var(--pt-neutral-950);
|
|
333
|
+
--pt-bg-box: var(--pt-black);
|
|
334
|
+
--pt-bg-strong: var(--pt-white);
|
|
335
|
+
--pt-bg-neutral: var(--pt-white) / 0.08;
|
|
336
|
+
--pt-bg-weak: var(--pt-white) / 0.03;
|
|
337
|
+
--pt-bg-disable: var(--pt-white) / 0.1;
|
|
338
|
+
--pt-bg-selected: var(--pt-white) / 0.08; /* 暗色:中性白 8% */
|
|
339
|
+
/* border */
|
|
340
|
+
--pt-border-strong: var(--pt-white) / 0.9;
|
|
341
|
+
--pt-border-neutral: var(--pt-white) / 0.2;
|
|
342
|
+
--pt-border-weak: var(--pt-white) / 0.08;
|
|
343
|
+
--pt-border-inverse: var(--pt-black);
|
|
344
|
+
/* interaction */
|
|
345
|
+
--pt-interaction-hover: var(--pt-white) / 0.08;
|
|
346
|
+
--pt-interaction-press: var(--pt-white) / 0.1;
|
|
347
|
+
--pt-interaction-focus: var(--pt-white) / 0.9;
|
|
348
|
+
--pt-interaction-reversal-hover: var(--pt-black) / 0.08;
|
|
349
|
+
--pt-interaction-reversal-press: var(--pt-black) / 0.1;
|
|
350
|
+
--pt-interaction-reversal-focus: var(--pt-black) / 0.9;
|
|
351
|
+
/* 状态色(暗色):文字 700→500 提亮;20% 透明底继承亮色定义,双模式自适应。 */
|
|
352
|
+
--pt-text-neutral: var(--pt-neutral-500);
|
|
353
|
+
--pt-text-success: var(--pt-green-500);
|
|
354
|
+
--pt-text-danger: var(--pt-red-500);
|
|
355
|
+
--pt-text-warning: var(--pt-orange-500);
|
|
356
|
+
--pt-text-information: var(--pt-blue-500);
|
|
357
|
+
--pt-text-ai: var(--pt-fuchsia-500);
|
|
358
|
+
/* chart */
|
|
359
|
+
--pt-chart-0: var(--pt-white);
|
|
360
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import tailwindcssAnimate from 'tailwindcss-animate';
|
|
2
|
+
import plugin from 'tailwindcss/plugin';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 状态层 State Layer(Material 式交互反馈):
|
|
6
|
+
* 组件加 `state-layer` 类后,hover 在原样式上「叠加」一层
|
|
7
|
+
* --pt-interaction-hover,按下(active)叠加 --pt-interaction-press
|
|
8
|
+
* (黑/白中性叠加,具体百分比以 tokens.css 语义层为准)。
|
|
9
|
+
* 原背景不被替换:实色按钮 hover 变深、透明表面 hover 出现浅灰,
|
|
10
|
+
* 一条规则全组件通用。覆盖层用 ::after + opacity 过渡(平滑),
|
|
11
|
+
* 圆角继承宿主,不拦截鼠标。
|
|
12
|
+
*
|
|
13
|
+
* 描边宿主(有 1px+ 边框)需把叠层向外扩到 border box,否则叠层缩在
|
|
14
|
+
* padding box(边框内侧)却仍用外圆角,圆角处与边框内圆弧不同心(错位约边框宽)。
|
|
15
|
+
* 描边变体自行声明 `[--pt-state-layer-border:<边框宽>]`(如 1px);默认 0 = 实色宿主不外扩。
|
|
16
|
+
*/
|
|
17
|
+
const stateLayerPlugin = plugin(({ addUtilities }) => {
|
|
18
|
+
addUtilities({
|
|
19
|
+
'.state-layer': {
|
|
20
|
+
position: 'relative',
|
|
21
|
+
isolation: 'isolate',
|
|
22
|
+
'&::after': {
|
|
23
|
+
content: '""',
|
|
24
|
+
position: 'absolute',
|
|
25
|
+
inset: 'calc(-1 * var(--pt-state-layer-border, 0px))',
|
|
26
|
+
'border-radius': 'inherit',
|
|
27
|
+
'background-color': 'rgb(var(--pt-interaction-hover))',
|
|
28
|
+
opacity: '0',
|
|
29
|
+
transition: 'opacity 150ms',
|
|
30
|
+
'pointer-events': 'none'
|
|
31
|
+
},
|
|
32
|
+
'&:hover::after': {
|
|
33
|
+
opacity: '1'
|
|
34
|
+
},
|
|
35
|
+
'&:active::after': {
|
|
36
|
+
'background-color': 'rgb(var(--pt-interaction-press))',
|
|
37
|
+
opacity: '1'
|
|
38
|
+
},
|
|
39
|
+
/* 禁用时不生成叠层(配合 disabled:cursor-not-allowed:
|
|
40
|
+
* 鼠标事件保留以显示 🚫 光标,但悬停不得有任何反馈)。 */
|
|
41
|
+
'&:disabled::after': {
|
|
42
|
+
content: 'none'
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
/* 反转版:深色表面(如高强调黑按钮)用 reversal 交互 Token
|
|
46
|
+
* (亮色下白8%/10%;暗色下该表面反白,reversal 自动变黑8%/10%)。 */
|
|
47
|
+
'.state-layer-inverse': {
|
|
48
|
+
position: 'relative',
|
|
49
|
+
isolation: 'isolate',
|
|
50
|
+
'&::after': {
|
|
51
|
+
content: '""',
|
|
52
|
+
position: 'absolute',
|
|
53
|
+
inset: 'calc(-1 * var(--pt-state-layer-border, 0px))',
|
|
54
|
+
'border-radius': 'inherit',
|
|
55
|
+
'background-color': 'rgb(var(--pt-interaction-reversal-hover))',
|
|
56
|
+
opacity: '0',
|
|
57
|
+
transition: 'opacity 150ms',
|
|
58
|
+
'pointer-events': 'none'
|
|
59
|
+
},
|
|
60
|
+
'&:hover::after': {
|
|
61
|
+
opacity: '1'
|
|
62
|
+
},
|
|
63
|
+
'&:active::after': {
|
|
64
|
+
'background-color': 'rgb(var(--pt-interaction-reversal-press))',
|
|
65
|
+
opacity: '1'
|
|
66
|
+
},
|
|
67
|
+
'&:disabled::after': {
|
|
68
|
+
content: 'none'
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* PT-AI-Components (@ptengine/pt-ai-components) Tailwind 预设
|
|
76
|
+
*
|
|
77
|
+
* 消费方 tailwind.config:presets: [shadcnPreset]
|
|
78
|
+
* Token 值定义在 src/styles/tokens.css(唯一数据源);此文件只做
|
|
79
|
+
* 「CSS 变量 → Tailwind 颜色键」的映射。
|
|
80
|
+
*
|
|
81
|
+
* 颜色取自 Ptengine AI Design System。shadcn 兼容别名在 tokens.css 里以
|
|
82
|
+
* 未包裹形态存储(纯通道,或通道+alpha),这里包一层 rgb():
|
|
83
|
+
* · 纯通道别名 → `rgb(var(--x) / <alpha-value>)`,支持 /alpha 工具类(bg-primary/90)
|
|
84
|
+
* · 自带 alpha 的别名(border / input / ring / accent / sidebar 同类)→
|
|
85
|
+
* 裸 `rgb(var(--x))`——再套 <alpha-value> 会产生非法双 alpha
|
|
86
|
+
*
|
|
87
|
+
* @type {import('tailwindcss').Config}
|
|
88
|
+
*/
|
|
89
|
+
export default {
|
|
90
|
+
darkMode: ['class'],
|
|
91
|
+
theme: {
|
|
92
|
+
extend: {
|
|
93
|
+
colors: {
|
|
94
|
+
border: 'rgb(var(--pt-border))',
|
|
95
|
+
input: 'rgb(var(--pt-input))',
|
|
96
|
+
ring: 'rgb(var(--pt-ring))',
|
|
97
|
+
background: 'rgb(var(--pt-background) / <alpha-value>)',
|
|
98
|
+
foreground: 'rgb(var(--pt-foreground) / <alpha-value>)',
|
|
99
|
+
primary: {
|
|
100
|
+
DEFAULT: 'rgb(var(--pt-primary) / <alpha-value>)',
|
|
101
|
+
foreground: 'rgb(var(--pt-primary-foreground) / <alpha-value>)'
|
|
102
|
+
},
|
|
103
|
+
brand: {
|
|
104
|
+
DEFAULT: 'rgb(var(--pt-brand) / <alpha-value>)',
|
|
105
|
+
foreground: 'rgb(var(--pt-brand-foreground) / <alpha-value>)'
|
|
106
|
+
},
|
|
107
|
+
secondary: {
|
|
108
|
+
DEFAULT: 'rgb(var(--pt-secondary) / <alpha-value>)',
|
|
109
|
+
foreground: 'rgb(var(--pt-secondary-foreground) / <alpha-value>)'
|
|
110
|
+
},
|
|
111
|
+
destructive: {
|
|
112
|
+
DEFAULT: 'rgb(var(--pt-destructive) / <alpha-value>)',
|
|
113
|
+
foreground: 'rgb(var(--pt-destructive-foreground) / <alpha-value>)'
|
|
114
|
+
},
|
|
115
|
+
muted: {
|
|
116
|
+
DEFAULT: 'rgb(var(--pt-muted) / <alpha-value>)',
|
|
117
|
+
foreground: 'rgb(var(--pt-muted-foreground) / <alpha-value>)'
|
|
118
|
+
},
|
|
119
|
+
accent: {
|
|
120
|
+
DEFAULT: 'rgb(var(--pt-accent))',
|
|
121
|
+
foreground: 'rgb(var(--pt-accent-foreground) / <alpha-value>)'
|
|
122
|
+
},
|
|
123
|
+
popover: {
|
|
124
|
+
DEFAULT: 'rgb(var(--pt-popover) / <alpha-value>)',
|
|
125
|
+
foreground: 'rgb(var(--pt-popover-foreground) / <alpha-value>)'
|
|
126
|
+
},
|
|
127
|
+
card: {
|
|
128
|
+
DEFAULT: 'rgb(var(--pt-card) / <alpha-value>)',
|
|
129
|
+
foreground: 'rgb(var(--pt-card-foreground) / <alpha-value>)'
|
|
130
|
+
},
|
|
131
|
+
chart: {
|
|
132
|
+
1: 'rgb(var(--pt-chart-1) / <alpha-value>)',
|
|
133
|
+
2: 'rgb(var(--pt-chart-2) / <alpha-value>)',
|
|
134
|
+
3: 'rgb(var(--pt-chart-3) / <alpha-value>)',
|
|
135
|
+
4: 'rgb(var(--pt-chart-4) / <alpha-value>)',
|
|
136
|
+
5: 'rgb(var(--pt-chart-5) / <alpha-value>)'
|
|
137
|
+
},
|
|
138
|
+
sidebar: {
|
|
139
|
+
DEFAULT: 'rgb(var(--pt-sidebar) / <alpha-value>)',
|
|
140
|
+
foreground: 'rgb(var(--pt-sidebar-foreground) / <alpha-value>)',
|
|
141
|
+
primary: 'rgb(var(--pt-sidebar-primary) / <alpha-value>)',
|
|
142
|
+
'primary-foreground': 'rgb(var(--pt-sidebar-primary-foreground) / <alpha-value>)',
|
|
143
|
+
accent: 'rgb(var(--pt-sidebar-accent))',
|
|
144
|
+
'accent-foreground': 'rgb(var(--pt-sidebar-accent-foreground) / <alpha-value>)',
|
|
145
|
+
border: 'rgb(var(--pt-sidebar-border))',
|
|
146
|
+
ring: 'rgb(var(--pt-sidebar-ring))'
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
borderRadius: {
|
|
150
|
+
lg: 'var(--pt-radius)',
|
|
151
|
+
md: 'calc(var(--pt-radius) - 2px)',
|
|
152
|
+
sm: 'calc(var(--pt-radius) - 4px)'
|
|
153
|
+
},
|
|
154
|
+
/* 语义层描边 Token 的工具类(如 hover:border-strong)。
|
|
155
|
+
* 值自带 alpha,只包一层 rgb()。 */
|
|
156
|
+
borderColor: {
|
|
157
|
+
strong: 'rgb(var(--pt-border-strong))',
|
|
158
|
+
neutral: 'rgb(var(--pt-border-neutral))',
|
|
159
|
+
weak: 'rgb(var(--pt-border-weak))'
|
|
160
|
+
},
|
|
161
|
+
/* 语义层交互/状态 Token 的背景工具类(如 active:bg-press、disabled:bg-disable)。
|
|
162
|
+
* 状态色 subtler 底=语义色 500 @ 20%(token 自带 alpha,只包 rgb()),
|
|
163
|
+
* 双模式共用一份定义,供 Badge/Alert 等状态表面用。 */
|
|
164
|
+
backgroundColor: {
|
|
165
|
+
press: 'rgb(var(--pt-interaction-press))',
|
|
166
|
+
disable: 'rgb(var(--pt-bg-disable))',
|
|
167
|
+
selected: 'rgb(var(--pt-bg-selected))',
|
|
168
|
+
'neutral-subtler': 'rgb(var(--pt-bg-neutral-subtler))',
|
|
169
|
+
'positive-subtler': 'rgb(var(--pt-bg-positive-subtler))',
|
|
170
|
+
'danger-subtler': 'rgb(var(--pt-bg-danger-subtler))',
|
|
171
|
+
'warning-subtler': 'rgb(var(--pt-bg-warning-subtler))',
|
|
172
|
+
'information-subtler': 'rgb(var(--pt-bg-information-subtler))',
|
|
173
|
+
'ai-subtler': 'rgb(var(--pt-bg-ai-subtler))'
|
|
174
|
+
},
|
|
175
|
+
/* 状态色文字(亮色 700 档 / 暗色 500 档,随 token 切换)。 */
|
|
176
|
+
textColor: {
|
|
177
|
+
weak: 'rgb(var(--pt-text-weak))',
|
|
178
|
+
disabled: 'rgb(var(--pt-text-disabled))',
|
|
179
|
+
neutral: 'rgb(var(--pt-text-neutral) / <alpha-value>)',
|
|
180
|
+
success: 'rgb(var(--pt-text-success) / <alpha-value>)',
|
|
181
|
+
danger: 'rgb(var(--pt-text-danger) / <alpha-value>)',
|
|
182
|
+
warning: 'rgb(var(--pt-text-warning) / <alpha-value>)',
|
|
183
|
+
information: 'rgb(var(--pt-text-information) / <alpha-value>)',
|
|
184
|
+
ai: 'rgb(var(--pt-text-ai) / <alpha-value>)'
|
|
185
|
+
},
|
|
186
|
+
/* 字体族接 tokens.css 的 --pt-font-sans(按 html lang 切换三语字体栈)。 */
|
|
187
|
+
fontFamily: {
|
|
188
|
+
sans: ['var(--pt-font-sans)', 'system-ui', 'sans-serif']
|
|
189
|
+
},
|
|
190
|
+
/* 字阶整表覆盖 = Figma「Type/Mode + Text Styles」(design/tokens.json)。
|
|
191
|
+
* 与 Tailwind 默认的差异:新增 2xs=12;xs 为 13(非 12);
|
|
192
|
+
* xl 及以上行高/字号按设计表。
|
|
193
|
+
* 字号三语一致;行高走 tokens.css 的 --pt-lh-* 变量,
|
|
194
|
+
* :lang(ja)/:lang(zh) 可按语言覆盖(同字号不同行高)。 */
|
|
195
|
+
fontSize: {
|
|
196
|
+
'2xs': ['12px', 'var(--pt-lh-2xs)'],
|
|
197
|
+
xs: ['13px', 'var(--pt-lh-xs)'],
|
|
198
|
+
sm: ['14px', 'var(--pt-lh-sm)'],
|
|
199
|
+
base: ['16px', 'var(--pt-lh-base)'],
|
|
200
|
+
lg: ['18px', 'var(--pt-lh-lg)'],
|
|
201
|
+
xl: ['20px', 'var(--pt-lh-xl)'],
|
|
202
|
+
'2xl': ['24px', 'var(--pt-lh-2xl)'],
|
|
203
|
+
'3xl': ['28px', 'var(--pt-lh-3xl)'],
|
|
204
|
+
'4xl': ['32px', 'var(--pt-lh-4xl)'],
|
|
205
|
+
'5xl': ['40px', 'var(--pt-lh-5xl)'],
|
|
206
|
+
'6xl': ['48px', 'var(--pt-lh-6xl)'],
|
|
207
|
+
'7xl': ['56px', 'var(--pt-lh-7xl)'],
|
|
208
|
+
'8xl': ['64px', 'var(--pt-lh-8xl)'],
|
|
209
|
+
'9xl': ['72px', 'var(--pt-lh-9xl)']
|
|
210
|
+
},
|
|
211
|
+
/* Radix Accordion 高度过渡(内容高度由 Radix 以 CSS 变量注入);
|
|
212
|
+
* caret-blink 为 InputOTP 假光标闪烁。 */
|
|
213
|
+
keyframes: {
|
|
214
|
+
'accordion-down': {
|
|
215
|
+
from: { height: '0' },
|
|
216
|
+
to: { height: 'var(--radix-accordion-content-height)' }
|
|
217
|
+
},
|
|
218
|
+
'accordion-up': {
|
|
219
|
+
from: { height: 'var(--radix-accordion-content-height)' },
|
|
220
|
+
to: { height: '0' }
|
|
221
|
+
},
|
|
222
|
+
'caret-blink': {
|
|
223
|
+
'0%,70%,100%': { opacity: '1' },
|
|
224
|
+
'20%,50%': { opacity: '0' }
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
animation: {
|
|
228
|
+
'accordion-down': 'accordion-down 0.2s ease-out',
|
|
229
|
+
'accordion-up': 'accordion-up 0.2s ease-out',
|
|
230
|
+
'caret-blink': 'caret-blink 1.25s ease-out infinite'
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
plugins: [tailwindcssAnimate, stateLayerPlugin]
|
|
235
|
+
};
|