@pantoia/ui 0.2.0 → 0.4.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 (66) hide show
  1. package/accordion/index.module.css +4 -4
  2. package/accordion/index.tsx +30 -58
  3. package/alert-dialog/index.tsx +38 -44
  4. package/badge/index.tsx +2 -2
  5. package/button/index.tsx +31 -30
  6. package/callout/index.tsx +29 -8
  7. package/checkbox/index.tsx +24 -88
  8. package/combobox/index.tsx +133 -323
  9. package/command-palette/index.tsx +55 -34
  10. package/dialog/index.tsx +30 -26
  11. package/dist/index.js +155 -27
  12. package/drawer/index.module.css +2 -2
  13. package/drawer/index.tsx +54 -132
  14. package/dropdown-menu/index.tsx +95 -100
  15. package/field/index.tsx +43 -94
  16. package/input/index.tsx +13 -9
  17. package/kbd/index.tsx +2 -2
  18. package/label/index.tsx +7 -9
  19. package/number-field/index.tsx +129 -176
  20. package/package.json +12 -15
  21. package/palette.css +114 -0
  22. package/popover/index.tsx +62 -33
  23. package/radio-group/index.tsx +36 -39
  24. package/registry.json +65 -169
  25. package/select/index.tsx +154 -76
  26. package/switch/index.tsx +13 -6
  27. package/table/index.tsx +5 -6
  28. package/tabs/index.module.css +5 -3
  29. package/tabs/index.tsx +26 -77
  30. package/tailwind.css +3 -0
  31. package/textarea/index.tsx +25 -13
  32. package/toast/index.module.css +187 -0
  33. package/toast/index.tsx +141 -46
  34. package/toggle/index.tsx +8 -7
  35. package/{styles.css → tokens.css} +82 -303
  36. package/tooltip/index.tsx +62 -31
  37. package/tv.ts +0 -1
  38. package/utilities.css +124 -0
  39. package/accordion/AGENTS.md +0 -60
  40. package/alert-dialog/AGENTS.md +0 -78
  41. package/badge/AGENTS.md +0 -35
  42. package/button/AGENTS.md +0 -39
  43. package/callout/AGENTS.md +0 -41
  44. package/checkbox/AGENTS.md +0 -54
  45. package/combobox/AGENTS.md +0 -150
  46. package/command-palette/AGENTS.md +0 -45
  47. package/dialog/AGENTS.md +0 -81
  48. package/drawer/AGENTS.md +0 -66
  49. package/dropdown-menu/AGENTS.md +0 -133
  50. package/field/AGENTS.md +0 -96
  51. package/input/AGENTS.md +0 -35
  52. package/kbd/AGENTS.md +0 -17
  53. package/label/AGENTS.md +0 -21
  54. package/number-field/AGENTS.md +0 -53
  55. package/popover/AGENTS.md +0 -64
  56. package/press.css +0 -37
  57. package/radio-group/AGENTS.md +0 -81
  58. package/select/AGENTS.md +0 -90
  59. package/switch/AGENTS.md +0 -37
  60. package/table/AGENTS.md +0 -82
  61. package/tabs/AGENTS.md +0 -60
  62. package/test-utils.ts +0 -10
  63. package/textarea/AGENTS.md +0 -35
  64. package/toast/AGENTS.md +0 -34
  65. package/toggle/AGENTS.md +0 -37
  66. package/tooltip/AGENTS.md +0 -50
@@ -1,226 +1,8 @@
1
- @import "pretendard/dist/web/variable/pretendardvariable-dynamic-subset.css";
2
- @import "./press.css";
3
-
4
- @custom-variant dark (&:where(.dark, .dark *):not(:where(.light, .light *)));
5
-
6
- @custom-variant current (&[aria-current="page"]);
7
-
8
- @custom-variant invalid (&[aria-invalid="true"]);
9
-
10
- @custom-variant invalid-within (&:has([aria-invalid="true"]));
11
-
12
- @custom-variant in-invalid (&:where([aria-invalid="true"] *));
13
-
14
- @custom-variant described (&:has([data-description]));
15
-
16
- @custom-variant checked (&:where([data-state="checked"], [data-state="indeterminate"]));
17
- @custom-variant open (&[data-state="open"]);
18
- @custom-variant closed (&[data-state="closed"]);
19
- @custom-variant on (&[data-state="on"]);
20
- @custom-variant selected (&[data-selected]:not([data-selected="false"]));
21
- @custom-variant unset (&[data-placeholder]);
22
-
23
- @custom-variant menu-gutter (.menu:has(.menu-lead) &:not(:has(.menu-lead)));
24
-
25
- :root, .light {
26
- --pds-gray-50:#f9fafb; --pds-gray-100:#f2f4f6; --pds-gray-200:#e5e8eb; --pds-gray-300:#d1d6db;
27
- --pds-gray-400:#b0b8c1; --pds-gray-500:#8b95a1; --pds-gray-600:#6b7684; --pds-gray-700:#4e5968;
28
- --pds-gray-800:#333d4b; --pds-gray-900:#191f28;
29
-
30
- --pds-brand-50:#f5f1fd; --pds-brand-100:#e4d6ff; --pds-brand-200:#ceb0ff; --pds-brand-300:#bb8ffa;
31
- --pds-brand-400:#aa74f2; --pds-brand-500:#9c63e4; --pds-brand-600:#8750c9; --pds-brand-700:#7543b0;
32
- --pds-brand-800:#633997; --pds-brand-900:#54317f;
33
-
34
- --pds-blue-50:#e8f3ff; --pds-blue-100:#c9e2ff; --pds-blue-200:#90c2ff; --pds-blue-300:#64a8ff;
35
- --pds-blue-400:#4593fc; --pds-blue-500:#3182f6; --pds-blue-600:#2272eb; --pds-blue-700:#1b64da;
36
- --pds-blue-800:#1957c2; --pds-blue-900:#194aa6;
37
-
38
- --pds-green-50:#f0faf6; --pds-green-100:#aeefd5; --pds-green-200:#76e4b8; --pds-green-300:#3fd599;
39
- --pds-green-400:#15c47e; --pds-green-500:#03b26c; --pds-green-600:#02a262; --pds-green-700:#029359;
40
- --pds-green-800:#028450; --pds-green-900:#027648;
41
-
42
- --pds-orange-50:#fff3e0; --pds-orange-100:#ffe0b0; --pds-orange-200:#ffcd80; --pds-orange-300:#ffbd51;
43
- --pds-orange-400:#ffa927; --pds-orange-500:#fe9800; --pds-orange-600:#fb8800; --pds-orange-700:#f57800;
44
- --pds-orange-800:#ed6700; --pds-orange-900:#e45600;
45
-
46
- --pds-red-50:#ffeeee; --pds-red-100:#ffd4d6; --pds-red-200:#feafb4; --pds-red-300:#fb8890;
47
- --pds-red-400:#f66570; --pds-red-500:#f04452; --pds-red-600:#e42939; --pds-red-700:#d22030;
48
- --pds-red-800:#bc1b2a; --pds-red-900:#a51926;
49
- }
50
-
51
- .dark {
52
- --pds-gray-50:#202027; --pds-gray-100:#2c2c35; --pds-gray-200:#3c3c47; --pds-gray-300:#4d4d59;
53
- --pds-gray-400:#62626d; --pds-gray-500:#7e7e87; --pds-gray-600:#9e9ea4; --pds-gray-700:#c3c3c6;
54
- --pds-gray-800:#e4e4e5; --pds-gray-900:#ffffff;
55
-
56
- --pds-brand-50:#362949; --pds-brand-100:#462e66; --pds-brand-200:#583682; --pds-brand-300:#6b3fa0;
57
- --pds-brand-400:#8451c4; --pds-brand-500:#9c63e4; --pds-brand-600:#ad75f7; --pds-brand-700:#c094ff;
58
- --pds-brand-800:#d6baff; --pds-brand-900:#eadeff;
59
-
60
- --pds-blue-50:#202c4d; --pds-blue-100:#23386a; --pds-blue-200:#25478c; --pds-blue-300:#265ab3;
61
- --pds-blue-400:#2970d9; --pds-blue-500:#3485fa; --pds-blue-600:#449bff; --pds-blue-700:#61b0ff;
62
- --pds-blue-800:#8fcdff; --pds-blue-900:#c8e7ff;
63
-
64
- --pds-green-50:#153729; --pds-green-100:#135338; --pds-green-200:#136d47; --pds-green-300:#138a59;
65
- --pds-green-400:#13a065; --pds-green-500:#16bb76; --pds-green-600:#26cf88; --pds-green-700:#4ee4a6;
66
- --pds-green-800:#82f6c5; --pds-green-900:#ccffea;
67
-
68
- --pds-orange-50:#3d2500; --pds-orange-100:#563200; --pds-orange-200:#804600; --pds-orange-300:#a85f00;
69
- --pds-orange-400:#cf7200; --pds-orange-500:#f18600; --pds-orange-600:#fd9528; --pds-orange-700:#ffa861;
70
- --pds-orange-800:#ffc39e; --pds-orange-900:#ffe4d6;
71
-
72
- --pds-red-50:#3c2020; --pds-red-100:#562025; --pds-red-200:#7a242d; --pds-red-300:#9e2733;
73
- --pds-red-400:#ca2f3d; --pds-red-500:#f04251; --pds-red-600:#fa616d; --pds-red-700:#fe818b;
74
- --pds-red-800:#ffa8ad; --pds-red-900:#ffd1d3;
75
- }
76
-
77
- @theme inline {
78
- --color-pds-gray-50: var(--pds-gray-50);
79
- --color-pds-gray-100: var(--pds-gray-100);
80
- --color-pds-gray-200: var(--pds-gray-200);
81
- --color-pds-gray-300: var(--pds-gray-300);
82
- --color-pds-gray-400: var(--pds-gray-400);
83
- --color-pds-gray-500: var(--pds-gray-500);
84
- --color-pds-gray-600: var(--pds-gray-600);
85
- --color-pds-gray-700: var(--pds-gray-700);
86
- --color-pds-gray-800: var(--pds-gray-800);
87
- --color-pds-gray-900: var(--pds-gray-900);
88
- --color-pds-brand-50: var(--pds-brand-50);
89
- --color-pds-brand-100: var(--pds-brand-100);
90
- --color-pds-brand-200: var(--pds-brand-200);
91
- --color-pds-brand-300: var(--pds-brand-300);
92
- --color-pds-brand-400: var(--pds-brand-400);
93
- --color-pds-brand-500: var(--pds-brand-500);
94
- --color-pds-brand-600: var(--pds-brand-600);
95
- --color-pds-brand-700: var(--pds-brand-700);
96
- --color-pds-brand-800: var(--pds-brand-800);
97
- --color-pds-brand-900: var(--pds-brand-900);
98
- --color-pds-blue-50: var(--pds-blue-50);
99
- --color-pds-blue-100: var(--pds-blue-100);
100
- --color-pds-blue-200: var(--pds-blue-200);
101
- --color-pds-blue-300: var(--pds-blue-300);
102
- --color-pds-blue-400: var(--pds-blue-400);
103
- --color-pds-blue-500: var(--pds-blue-500);
104
- --color-pds-blue-600: var(--pds-blue-600);
105
- --color-pds-blue-700: var(--pds-blue-700);
106
- --color-pds-blue-800: var(--pds-blue-800);
107
- --color-pds-blue-900: var(--pds-blue-900);
108
- --color-pds-green-50: var(--pds-green-50);
109
- --color-pds-green-100: var(--pds-green-100);
110
- --color-pds-green-200: var(--pds-green-200);
111
- --color-pds-green-300: var(--pds-green-300);
112
- --color-pds-green-400: var(--pds-green-400);
113
- --color-pds-green-500: var(--pds-green-500);
114
- --color-pds-green-600: var(--pds-green-600);
115
- --color-pds-green-700: var(--pds-green-700);
116
- --color-pds-green-800: var(--pds-green-800);
117
- --color-pds-green-900: var(--pds-green-900);
118
- --color-pds-orange-50: var(--pds-orange-50);
119
- --color-pds-orange-100: var(--pds-orange-100);
120
- --color-pds-orange-200: var(--pds-orange-200);
121
- --color-pds-orange-300: var(--pds-orange-300);
122
- --color-pds-orange-400: var(--pds-orange-400);
123
- --color-pds-orange-500: var(--pds-orange-500);
124
- --color-pds-orange-600: var(--pds-orange-600);
125
- --color-pds-orange-700: var(--pds-orange-700);
126
- --color-pds-orange-800: var(--pds-orange-800);
127
- --color-pds-orange-900: var(--pds-orange-900);
128
- --color-pds-red-50: var(--pds-red-50);
129
- --color-pds-red-100: var(--pds-red-100);
130
- --color-pds-red-200: var(--pds-red-200);
131
- --color-pds-red-300: var(--pds-red-300);
132
- --color-pds-red-400: var(--pds-red-400);
133
- --color-pds-red-500: var(--pds-red-500);
134
- --color-pds-red-600: var(--pds-red-600);
135
- --color-pds-red-700: var(--pds-red-700);
136
- --color-pds-red-800: var(--pds-red-800);
137
- --color-pds-red-900: var(--pds-red-900);
138
- }
139
-
140
- @theme {
141
- --color-*: initial;
142
- --text-*: initial;
143
- --leading-*: initial;
144
- --font-weight-*: initial;
145
- }
146
-
147
- @theme {
148
- --font-weight-normal: 400;
149
- --font-weight-medium: 500;
150
- --font-weight-bold: 700;
151
-
152
- --font-sans: "Pretendard Variable", "Pretendard", -apple-system, system-ui, sans-serif;
153
- --font-mono: "JetBrains Mono", "Pretendard Variable", "Pretendard", ui-monospace, monospace;
154
-
155
- --text-display: 28px; --text-display--line-height: 38px; --text-display--font-weight: 700;
156
- --text-title: 24px; --text-title--line-height: 32px; --text-title--font-weight: 700;
157
- --text-section: 20px; --text-section--line-height: 27px; --text-section--font-weight: 700;
158
- --text-subsection: 16px; --text-subsection--line-height: 22px; --text-subsection--font-weight: 700;
159
- --text-label: 14px; --text-label--line-height: 19px; --text-label--font-weight: 500;
160
- --text-caption: 13px; --text-caption--line-height: 18px; --text-caption--font-weight: 400;
161
- --text-micro: 11px; --text-micro--line-height: 15px; --text-micro--font-weight: 500;
162
-
163
- --text-t10: 10px; --text-t10--line-height: 14px; --text-t10--font-weight: 400;
164
- --text-t11: 11px; --text-t11--line-height: 15px; --text-t11--font-weight: 400;
165
- --text-t12: 12px; --text-t12--line-height: 16px; --text-t12--font-weight: 400;
166
- --text-t13: 13px; --text-t13--line-height: 18px; --text-t13--font-weight: 400;
167
- --text-t14: 14px; --text-t14--line-height: 19px; --text-t14--font-weight: 400;
168
- --text-t16: 16px; --text-t16--line-height: 22px; --text-t16--font-weight: 400;
169
- --text-t18: 18px; --text-t18--line-height: 24px; --text-t18--font-weight: 400;
170
- --text-t20: 20px; --text-t20--line-height: 27px; --text-t20--font-weight: 400;
171
- --text-t24: 24px; --text-t24--line-height: 32px; --text-t24--font-weight: 400;
172
- --text-t28: 28px; --text-t28--line-height: 38px; --text-t28--font-weight: 400;
173
- --text-t32: 32px; --text-t32--line-height: 43px; --text-t32--font-weight: 400;
174
- --text-t40: 40px; --text-t40--line-height: 54px; --text-t40--font-weight: 400;
175
- --text-t48: 48px; --text-t48--line-height: 65px; --text-t48--font-weight: 400;
176
- --text-t56: 56px; --text-t56--line-height: 76px; --text-t56--font-weight: 400;
177
- --text-t64: 64px; --text-t64--line-height: 86px; --text-t64--font-weight: 400;
178
- }
179
-
180
- @theme inline {
181
- --text-prose: var(--ui-prose);
182
- --text-prose--line-height: var(--ui-prose-lh);
183
- --text-prose--font-weight: 400;
184
-
185
- --text-value: var(--ui-value);
186
- --text-value--line-height: var(--ui-value-lh);
187
- --text-value--font-weight: 400;
188
- }
189
-
190
- :root {
191
- --ui-prose: 16px; --ui-prose-lh: 24px;
192
- --ui-value: 16px; --ui-value-lh: 22px;
193
-
194
- @variant sm { --ui-prose: 14px; --ui-prose-lh: 22px; }
195
- @variant sm { --ui-value: 14px; --ui-value-lh: 19px; }
196
- }
197
-
198
- @font-face {
199
- font-family: "JetBrains Mono";
200
- src: url("@fontsource/jetbrains-mono/files/jetbrains-mono-latin-400-normal.woff2") format("woff2");
201
- font-weight: 400;
202
- font-display: swap;
203
- unicode-range: U+0000-00FF, U+2000-206F;
204
- }
205
-
206
- @layer base {
207
- :root { color-scheme: light; }
208
- .dark { color-scheme: dark; }
209
-
210
- body {
211
- background-color: var(--color-background);
212
- color: var(--color-foreground);
213
- font-family: var(--font-sans);
214
- }
215
-
216
- code, pre, kbd, samp { font-family: var(--font-mono); }
217
- }
218
-
219
1
  :root, .light {
220
- --pds-background: #ffffff;
221
- --pds-background-overlay: rgba(0,0,0,0.2);
222
- --pds-background-panel: #ffffff;
223
- --pds-background-well: #f2f4f6;
2
+ --pds-bg: #ffffff;
3
+ --pds-bg-overlay: rgba(0,0,0,0.2);
4
+ --pds-bg-panel: #ffffff;
5
+ --pds-bg-well: #f2f4f6;
224
6
 
225
7
  --pds-bg-brand-solid: var(--pds-brand-500);
226
8
  --pds-bg-brand-solid-hover: var(--pds-brand-600);
@@ -233,6 +15,8 @@
233
15
  --pds-bg-neutral-disabled: var(--pds-gray-200);
234
16
  --pds-bg-neutral-hover: rgba(0,23,51,0.02);
235
17
  --pds-bg-neutral-knob: #ffffff;
18
+ --pds-bg-neutral-knob-off: #ffffff;
19
+ --pds-bg-neutral-track: var(--pds-gray-300);
236
20
  --pds-bg-neutral-selected: rgba(2,32,71,0.05);
237
21
  --pds-bg-neutral-selected-hover: rgba(0,27,55,0.1);
238
22
  --pds-bg-neutral-solid: var(--pds-gray-900);
@@ -269,20 +53,20 @@
269
53
  --pds-line-warning-weak: var(--pds-orange-200);
270
54
 
271
55
  --pds-black: #000000;
272
- --pds-foreground: var(--pds-gray-900);
273
- --pds-foreground-disabled: var(--pds-gray-600);
274
- --pds-foreground-muted: var(--pds-gray-700);
275
- --pds-foreground-placeholder: var(--pds-gray-400);
276
- --pds-foreground-subtle: var(--pds-gray-500);
56
+ --pds-fg: var(--pds-gray-900);
57
+ --pds-fg-disabled: var(--pds-gray-600);
58
+ --pds-fg-muted: var(--pds-gray-700);
59
+ --pds-fg-placeholder: var(--pds-gray-400);
60
+ --pds-fg-subtle: var(--pds-gray-500);
277
61
  --pds-line: var(--pds-gray-200);
278
62
  --pds-white: #ffffff;
279
63
  }
280
64
 
281
65
  .dark {
282
- --pds-background: #17171c;
283
- --pds-background-overlay: rgba(0,0,0,0.56);
284
- --pds-background-panel: #202027;
285
- --pds-background-well: #101013;
66
+ --pds-bg: #17171c;
67
+ --pds-bg-overlay: rgba(0,0,0,0.56);
68
+ --pds-bg-panel: #202027;
69
+ --pds-bg-well: #2c2c35;
286
70
 
287
71
  --pds-bg-brand-solid: var(--pds-brand-500);
288
72
  --pds-bg-brand-solid-hover: var(--pds-brand-600);
@@ -295,6 +79,8 @@
295
79
  --pds-bg-neutral-disabled: var(--pds-gray-200);
296
80
  --pds-bg-neutral-hover: rgba(209,209,253,0.05);
297
81
  --pds-bg-neutral-knob: #2c2c35;
82
+ --pds-bg-neutral-knob-off: var(--pds-gray-800);
83
+ --pds-bg-neutral-track: var(--pds-gray-300);
298
84
  --pds-bg-neutral-selected: rgba(217,217,255,0.11);
299
85
  --pds-bg-neutral-selected-hover: rgba(222,222,255,0.19);
300
86
  --pds-bg-neutral-solid: var(--pds-gray-900);
@@ -331,20 +117,20 @@
331
117
  --pds-line-warning-weak: var(--pds-orange-200);
332
118
 
333
119
  --pds-black: #000000;
334
- --pds-foreground: var(--pds-gray-900);
335
- --pds-foreground-disabled: var(--pds-gray-600);
336
- --pds-foreground-muted: var(--pds-gray-700);
337
- --pds-foreground-placeholder: var(--pds-gray-400);
338
- --pds-foreground-subtle: var(--pds-gray-500);
120
+ --pds-fg: var(--pds-gray-900);
121
+ --pds-fg-disabled: var(--pds-gray-600);
122
+ --pds-fg-muted: var(--pds-gray-700);
123
+ --pds-fg-placeholder: var(--pds-gray-400);
124
+ --pds-fg-subtle: var(--pds-gray-500);
339
125
  --pds-line: var(--pds-gray-200);
340
126
  --pds-white: #ffffff;
341
127
  }
342
128
 
343
129
  @theme inline {
344
- --color-background: var(--pds-background);
345
- --color-background-overlay: var(--pds-background-overlay);
346
- --color-background-panel: var(--pds-background-panel);
347
- --color-background-well: var(--pds-background-well);
130
+ --color-bg: var(--pds-bg);
131
+ --color-bg-overlay: var(--pds-bg-overlay);
132
+ --color-bg-panel: var(--pds-bg-panel);
133
+ --color-bg-well: var(--pds-bg-well);
348
134
  --color-bg-brand-solid: var(--pds-bg-brand-solid);
349
135
  --color-bg-brand-solid-hover: var(--pds-bg-brand-solid-hover);
350
136
  --color-bg-brand-weak: var(--pds-bg-brand-weak);
@@ -356,6 +142,8 @@
356
142
  --color-bg-neutral-disabled: var(--pds-bg-neutral-disabled);
357
143
  --color-bg-neutral-hover: var(--pds-bg-neutral-hover);
358
144
  --color-bg-neutral-knob: var(--pds-bg-neutral-knob);
145
+ --color-bg-neutral-knob-off: var(--pds-bg-neutral-knob-off);
146
+ --color-bg-neutral-track: var(--pds-bg-neutral-track);
359
147
  --color-bg-neutral-selected: var(--pds-bg-neutral-selected);
360
148
  --color-bg-neutral-selected-hover: var(--pds-bg-neutral-selected-hover);
361
149
  --color-bg-neutral-solid: var(--pds-bg-neutral-solid);
@@ -389,33 +177,69 @@
389
177
  --color-line-warning: var(--pds-line-warning);
390
178
  --color-line-warning-weak: var(--pds-line-warning-weak);
391
179
  --color-black: var(--pds-black);
392
- --color-foreground: var(--pds-foreground);
393
- --color-foreground-disabled: var(--pds-foreground-disabled);
394
- --color-foreground-muted: var(--pds-foreground-muted);
395
- --color-foreground-placeholder: var(--pds-foreground-placeholder);
396
- --color-foreground-subtle: var(--pds-foreground-subtle);
180
+ --color-fg: var(--pds-fg);
181
+ --color-fg-disabled: var(--pds-fg-disabled);
182
+ --color-fg-muted: var(--pds-fg-muted);
183
+ --color-fg-placeholder: var(--pds-fg-placeholder);
184
+ --color-fg-subtle: var(--pds-fg-subtle);
397
185
  --color-line: var(--pds-line);
398
186
  --color-white: var(--pds-white);
399
187
  }
400
188
 
189
+ @theme {
190
+ --font-weight-normal: 400;
191
+ --font-weight-medium: 500;
192
+ --font-weight-bold: 700;
193
+
194
+ --font-sans: "Pretendard Variable", "Pretendard", -apple-system, system-ui, sans-serif;
195
+ --font-mono: "JetBrains Mono", "Pretendard Variable", "Pretendard", ui-monospace, monospace;
196
+
197
+ --text-display: 28px; --text-display--line-height: 38px; --text-display--font-weight: 700;
198
+ --text-title: 24px; --text-title--line-height: 32px; --text-title--font-weight: 700;
199
+ --text-section: 20px; --text-section--line-height: 27px; --text-section--font-weight: 700;
200
+ --text-subsection: 16px; --text-subsection--line-height: 22px; --text-subsection--font-weight: 700;
201
+ --text-label: 14px; --text-label--line-height: 19px; --text-label--font-weight: 500;
202
+ --text-caption: 13px; --text-caption--line-height: 18px; --text-caption--font-weight: 400;
203
+ --text-micro: 11px; --text-micro--line-height: 15px; --text-micro--font-weight: 500;
204
+
205
+ --text-t10: 10px; --text-t10--line-height: 14px; --text-t10--font-weight: 400;
206
+ --text-t11: 11px; --text-t11--line-height: 15px; --text-t11--font-weight: 400;
207
+ --text-t12: 12px; --text-t12--line-height: 16px; --text-t12--font-weight: 400;
208
+ --text-t13: 13px; --text-t13--line-height: 18px; --text-t13--font-weight: 400;
209
+ --text-t14: 14px; --text-t14--line-height: 19px; --text-t14--font-weight: 400;
210
+ --text-t16: 16px; --text-t16--line-height: 22px; --text-t16--font-weight: 400;
211
+ --text-t18: 18px; --text-t18--line-height: 24px; --text-t18--font-weight: 400;
212
+ --text-t20: 20px; --text-t20--line-height: 27px; --text-t20--font-weight: 400;
213
+ --text-t24: 24px; --text-t24--line-height: 32px; --text-t24--font-weight: 400;
214
+ --text-t28: 28px; --text-t28--line-height: 38px; --text-t28--font-weight: 400;
215
+ --text-t32: 32px; --text-t32--line-height: 43px; --text-t32--font-weight: 400;
216
+ --text-t40: 40px; --text-t40--line-height: 54px; --text-t40--font-weight: 400;
217
+ --text-t48: 48px; --text-t48--line-height: 65px; --text-t48--font-weight: 400;
218
+ --text-t56: 56px; --text-t56--line-height: 76px; --text-t56--font-weight: 400;
219
+ --text-t64: 64px; --text-t64--line-height: 86px; --text-t64--font-weight: 400;
220
+ }
221
+
222
+ :root {
223
+ --pds-prose: 16px; --pds-prose-lh: 24px;
224
+ --pds-value: 16px; --pds-value-lh: 22px;
225
+
226
+ @variant sm { --pds-prose: 14px; --pds-prose-lh: 22px; }
227
+ @variant sm { --pds-value: 14px; --pds-value-lh: 19px; }
228
+ }
229
+
230
+ @theme {
231
+ --breakpoint-xs: 30rem;
232
+ }
233
+
401
234
  @theme {
402
235
  --spacing-tight: 4px;
403
236
  --spacing-stack: 16px;
404
237
  --spacing-block: 32px;
405
238
  --spacing-section: 48px;
406
239
  --spacing-gutter: 16px;
407
-
408
- --container-app: 1280px;
409
240
  }
410
241
 
411
242
  @theme {
412
- --radius-*: initial;
413
-
414
- --radius-mark: 4px;
415
- --radius-well: 8px;
416
- --radius-panel: 12px;
417
- --radius-float: 16px;
418
-
419
243
  --radius-r2: 2px; --radius-r4: 4px; --radius-r6: 6px;
420
244
  --radius-r8: 8px; --radius-r10: 10px; --radius-r12: 12px;
421
245
  --radius-r14: 14px; --radius-r16: 16px; --radius-r20: 20px;
@@ -423,8 +247,6 @@
423
247
  }
424
248
 
425
249
  @theme {
426
- --ease-*: initial;
427
-
428
250
  --ease-state: cubic-bezier(.35, 0, .65, 1);
429
251
  --ease-enter: cubic-bezier(0, 0, .15, 1);
430
252
  --ease-exit: cubic-bezier(.35, 0, 1, 1);
@@ -436,40 +258,14 @@
436
258
  --dur-exit: 150ms;
437
259
  --enter-scale: 0.95;
438
260
  --draw-len: 24;
261
+ --scale-press: 0.97;
439
262
  }
440
263
 
441
- @utility transition-state {
442
- transition-property: color, background-color, box-shadow, scale;
443
- transition-duration: var(--dur-state);
444
- transition-timing-function: var(--ease-state);
445
- }
446
-
447
- @keyframes enter { from { opacity: 0; scale: var(--enter-scale); } }
448
- @keyframes exit { to { opacity: 0; scale: var(--enter-scale); } }
449
-
450
- @utility animate-enter { animation: enter var(--dur-enter) var(--ease-enter); }
451
- @utility animate-exit { animation: exit var(--dur-exit) var(--ease-exit); }
452
-
453
- @keyframes draw { from { stroke-dashoffset: var(--draw-len); } }
454
-
455
- @utility animate-draw {
456
- stroke-dasharray: var(--draw-len);
457
- animation: draw var(--dur-enter) var(--ease-enter);
458
- }
459
-
460
- @keyframes fade-in { from { opacity: 0; } }
461
- @keyframes fade-out { to { opacity: 0; } }
462
-
463
- @utility animate-fade-in { animation: fade-in var(--dur-enter) var(--ease-enter); }
464
- @utility animate-fade-out { animation: fade-out var(--dur-exit) var(--ease-exit); }
465
-
466
264
  @media (prefers-reduced-motion: reduce) {
467
- :root { --enter-scale: 1; }
265
+ :root:root { --enter-scale: 1; --scale-press: 1; }
468
266
  }
469
267
 
470
268
  @theme {
471
- --shadow-*: initial;
472
-
473
269
  --shadow-s1: 0 1px 4px 0 var(--pds-shadow-1);
474
270
  --shadow-s2: 0 2px 10px 0 var(--pds-shadow-2);
475
271
  --shadow-s3: 0 4px 16px 0 var(--pds-shadow-3);
@@ -478,22 +274,5 @@
478
274
  :root, .light { --pds-shadow-1:#00000014; --pds-shadow-2:#0000001a; --pds-shadow-3:#0000001f; }
479
275
  .dark { --pds-shadow-1:#00000080; --pds-shadow-2:#000000ad; --pds-shadow-3:#000000cc; }
480
276
 
481
- @utility z-sticky { z-index: 10; }
482
- @utility z-overlay { z-index: 50; }
483
- @utility z-toast { z-index: 60; }
484
-
485
- @utility frame {
486
- @apply bg-background-panel border border-line;
487
- }
488
-
489
- @utility card {
490
- @apply bg-background-panel shadow-s3;
491
- }
492
-
493
- @utility float {
494
- @apply bg-background-panel border border-line shadow-s3;
495
- }
496
-
497
- @utility sheet {
498
- @apply bg-background-panel;
499
- }
277
+ :root, .light { --pds-pressed-dim: rgba(0,23,51,0.12); }
278
+ .dark { --pds-pressed-dim: rgba(209,209,253,0.14); }
package/tooltip/index.tsx CHANGED
@@ -1,43 +1,71 @@
1
1
  'use client'
2
2
 
3
- import { Tooltip as TooltipPrimitive } from 'radix-ui'
4
- import type { ComponentProps, ReactNode } from 'react'
3
+ import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'
4
+ import { createContext, useContext, useId, useState } from 'react'
5
+ import type { ComponentProps } from 'react'
5
6
 
6
7
  import { tv } from '../tv'
7
8
 
8
- export interface TooltipProps {
9
- open?: boolean
10
- defaultOpen?: boolean
11
- onOpenChange?: (open: boolean) => void
12
- delay?: number
13
- children?: ReactNode
9
+ const TooltipContext = createContext<{ id?: string, open: boolean }>({ open: false })
10
+ const ProviderContext = createContext(false)
11
+
12
+ export type TooltipProviderProps = ComponentProps<typeof TooltipPrimitive.Provider>
13
+
14
+ export function TooltipProvider({ delay = 100, ...rest }: TooltipProviderProps) {
15
+ return (
16
+ <ProviderContext.Provider value>
17
+ <TooltipPrimitive.Provider {...rest} delay={delay} />
18
+ </ProviderContext.Provider>
19
+ )
14
20
  }
15
21
 
16
- export function Tooltip({ open, defaultOpen = false, onOpenChange, delay = 100, children }: TooltipProps) {
22
+ export type TooltipProps = ComponentProps<typeof TooltipPrimitive.Root>
23
+
24
+ export function Tooltip({ open, defaultOpen = false, onOpenChange, ...rest }: TooltipProps) {
25
+ const id = useId()
26
+ const [seen, setSeen] = useState(defaultOpen)
27
+ const isOpen = open ?? seen
28
+
29
+ const change: TooltipProps['onOpenChange'] = (next, eventDetails) => {
30
+ setSeen(next)
31
+ onOpenChange?.(next, eventDetails)
32
+ }
33
+
17
34
  return (
18
- <TooltipPrimitive.Provider delayDuration={delay}>
19
- <TooltipPrimitive.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>
20
- {children}
21
- </TooltipPrimitive.Root>
22
- </TooltipPrimitive.Provider>
35
+ <TooltipContext.Provider value={{ id, open: isOpen }}>
36
+ <TooltipPrimitive.Root {...rest} open={isOpen} onOpenChange={change} />
37
+ </TooltipContext.Provider>
23
38
  )
24
39
  }
25
40
 
26
- export function TooltipTrigger({ children }: { children: ReactNode }) {
27
- return <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>
41
+ export type TooltipTriggerProps = ComponentProps<typeof TooltipPrimitive.Trigger>
42
+
43
+ export function TooltipTrigger(props: TooltipTriggerProps) {
44
+ const { id, open } = useContext(TooltipContext)
45
+ const inProvider = useContext(ProviderContext)
46
+ return <TooltipPrimitive.Trigger delay={inProvider ? undefined : 100} {...props} aria-describedby={open ? id : undefined} />
28
47
  }
29
48
 
30
- export interface TooltipContentProps extends Omit<ComponentProps<typeof TooltipPrimitive.Content>, 'side'> {
49
+ export type TooltipContentProps = Omit<ComponentProps<typeof TooltipPrimitive.Popup>, 'className'> & {
31
50
  side?: 'top' | 'right' | 'bottom' | 'left'
32
51
  arrow?: boolean
52
+ className?: string
33
53
  }
34
54
 
35
55
  const tooltipContent = tv({
36
- base: 'float text-foreground rounded-r12 z-overlay'
56
+ base: 'float text-fg rounded-r12 z-overlay'
37
57
  + ' text-caption max-w-64 px-3 py-1'
38
58
  + ' open:animate-enter closed:animate-exit',
39
59
  })
40
60
 
61
+ const tooltipArrow = tv({
62
+ base: 'data-uncentered:invisible'
63
+ + ' side-top:top-full'
64
+ + ' side-bottom:bottom-full side-bottom:rotate-180'
65
+ + ' side-right:left-0 side-right:origin-top-left side-right:rotate-90 side-right:-translate-y-1/2'
66
+ + ' side-left:right-0 side-left:origin-top-right side-left:-rotate-90 side-left:-translate-y-1/2',
67
+ })
68
+
41
69
  export function TooltipContent({
42
70
  side = 'top',
43
71
  arrow = true,
@@ -45,23 +73,26 @@ export function TooltipContent({
45
73
  children,
46
74
  ...rest
47
75
  }: TooltipContentProps) {
76
+ const { id } = useContext(TooltipContext)
77
+
48
78
  return (
49
79
  <TooltipPrimitive.Portal>
50
- <TooltipPrimitive.Content
51
- {...rest}
80
+ <TooltipPrimitive.Positioner
52
81
  side={side}
53
- sideOffset={6}
54
- className={tooltipContent({ className })}
82
+ sideOffset={arrow ? 11 : 6}
83
+ className="z-overlay min-w-max will-change-transform"
55
84
  >
56
- {children}
57
- {arrow && (
58
- <TooltipPrimitive.Arrow asChild width={10} height={5}>
59
- <svg viewBox="0 0 12 6" preserveAspectRatio="none" className="fill-background-panel -translate-y-px">
60
- <path d="M0 0L4.58579 4.58579C5.36683 5.36683 6.63316 5.36684 7.41421 4.58579L12 0" className="stroke-line stroke-1" />
61
- </svg>
62
- </TooltipPrimitive.Arrow>
63
- )}
64
- </TooltipPrimitive.Content>
85
+ <TooltipPrimitive.Popup {...rest} id={id} role="tooltip" className={tooltipContent({ className })}>
86
+ {children}
87
+ {arrow && (
88
+ <TooltipPrimitive.Arrow className={tooltipArrow()}>
89
+ <svg width={10} height={5} viewBox="0 0 12 6" preserveAspectRatio="none" className="block fill-bg-panel -translate-y-px">
90
+ <path d="M0 0L4.58579 4.58579C5.36683 5.36683 6.63316 5.36684 7.41421 4.58579L12 0" className="stroke-line stroke-1" />
91
+ </svg>
92
+ </TooltipPrimitive.Arrow>
93
+ )}
94
+ </TooltipPrimitive.Popup>
95
+ </TooltipPrimitive.Positioner>
65
96
  </TooltipPrimitive.Portal>
66
97
  )
67
98
  }
package/tv.ts CHANGED
@@ -7,7 +7,6 @@ export const tv = createTV({
7
7
  theme: {
8
8
  spacing: ['tight', 'stack', 'block', 'section', 'gutter'],
9
9
  radius: [
10
- 'mark', 'well', 'panel', 'float',
11
10
  'r2', 'r4', 'r6', 'r8', 'r10', 'r12', 'r14', 'r16', 'r20', 'r24',
12
11
  ],
13
12
  text: [