@pantoia/ui 0.1.0 → 0.2.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/accordion/AGENTS.md +5 -5
- package/accordion/index.tsx +17 -9
- package/alert-dialog/AGENTS.md +7 -7
- package/alert-dialog/index.tsx +20 -10
- package/badge/AGENTS.md +5 -5
- package/badge/index.tsx +7 -7
- package/button/AGENTS.md +7 -7
- package/button/index.tsx +36 -36
- package/callout/AGENTS.md +4 -5
- package/callout/index.tsx +13 -14
- package/checkbox/AGENTS.md +5 -5
- package/checkbox/index.tsx +15 -13
- package/combobox/AGENTS.md +13 -13
- package/combobox/index.tsx +82 -38
- package/command-palette/AGENTS.md +3 -2
- package/command-palette/index.tsx +4 -2
- package/dialog/AGENTS.md +6 -6
- package/dialog/index.tsx +11 -5
- package/dist/index.js +63 -34
- package/drawer/AGENTS.md +5 -5
- package/drawer/index.tsx +8 -4
- package/dropdown-menu/AGENTS.md +12 -12
- package/dropdown-menu/index.tsx +23 -11
- package/field/AGENTS.md +8 -8
- package/field/index.tsx +27 -9
- package/input/AGENTS.md +4 -4
- package/input/index.tsx +8 -8
- package/kbd/AGENTS.md +1 -1
- package/kbd/index.tsx +6 -2
- package/label/AGENTS.md +1 -1
- package/label/index.tsx +3 -1
- package/number-field/AGENTS.md +6 -6
- package/number-field/index.tsx +22 -16
- package/package.json +3 -6
- package/popover/AGENTS.md +4 -4
- package/popover/index.tsx +14 -4
- package/press.css +7 -7
- package/radio-group/AGENTS.md +8 -8
- package/radio-group/index.tsx +20 -16
- package/registry.json +3 -51
- package/select/AGENTS.md +10 -10
- package/select/index.tsx +41 -23
- package/styles.css +291 -139
- package/switch/AGENTS.md +4 -4
- package/switch/index.tsx +13 -13
- package/table/AGENTS.md +9 -9
- package/table/index.tsx +17 -7
- package/tabs/AGENTS.md +4 -4
- package/tabs/index.module.css +1 -1
- package/tabs/index.tsx +17 -9
- package/textarea/AGENTS.md +4 -4
- package/textarea/index.tsx +8 -8
- package/toast/AGENTS.md +5 -13
- package/toast/index.tsx +31 -37
- package/toggle/AGENTS.md +4 -4
- package/toggle/index.tsx +10 -9
- package/tooltip/AGENTS.md +2 -2
- package/tooltip/index.tsx +14 -4
- package/code-block/AGENTS.md +0 -60
- package/code-block/index.module.css +0 -46
- package/code-block/index.tsx +0 -127
- package/copy-button/AGENTS.md +0 -43
- package/copy-button/index.tsx +0 -119
package/number-field/AGENTS.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
```
|
|
4
4
|
받기 npx @pantoia/ui add number-field
|
|
5
5
|
층 ui
|
|
6
|
-
파일 number-field/index.tsx
|
|
6
|
+
파일 number-field/index.tsx, number-field/AGENTS.md
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
## 부위
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
| `readOnly` | `boolean` | |
|
|
35
35
|
| `className` | `string` | |
|
|
36
36
|
|
|
37
|
-
## 변형
|
|
37
|
+
## 변형 - `numberField`
|
|
38
38
|
|
|
39
|
-
슬롯 `root
|
|
39
|
+
슬롯 `root`, `step`, `input`
|
|
40
40
|
|
|
41
41
|
| 축 | 값 | 기본 |
|
|
42
42
|
|---|---|---|
|
|
43
|
-
| `surface` | `bare
|
|
44
|
-
| `size` | `sm
|
|
45
|
-
| `readonly` | `true` |
|
|
43
|
+
| `surface` | `bare`, `well` | `bare` |
|
|
44
|
+
| `size` | `sm`, `md`, `lg` | `md` |
|
|
45
|
+
| `readonly` | `true` | - |
|
|
46
46
|
|
|
47
47
|
## 함께 받는 것
|
|
48
48
|
|
package/number-field/index.tsx
CHANGED
|
@@ -9,21 +9,22 @@ export const numberField = tv({
|
|
|
9
9
|
slots: {
|
|
10
10
|
root: 'flex items-center rounded-r8'
|
|
11
11
|
+ ' transition-state'
|
|
12
|
-
+ ' invalid-within:ring-2 invalid-within:ring-danger'
|
|
13
|
-
+ ' has-disabled:bg-disabled has-disabled:cursor-not-allowed'
|
|
12
|
+
+ ' invalid-within:ring-2 invalid-within:ring-line-danger'
|
|
13
|
+
+ ' has-disabled:bg-bg-neutral-disabled has-disabled:cursor-not-allowed'
|
|
14
14
|
+ ' has-focus-visible:outline-2 has-focus-visible:outline-offset-2'
|
|
15
|
-
+ ' has-focus-visible:outline-ring',
|
|
16
|
-
step: 'text-
|
|
17
|
-
+ ' transition-state press press-shrink enabled:hover:bg-hover'
|
|
18
|
-
+ ' disabled:text-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
+ ' has-focus-visible:outline-line-focus-ring',
|
|
16
|
+
step: 'text-foreground-muted grid shrink-0 place-items-center rounded-r8'
|
|
17
|
+
+ ' transition-state press press-shrink enabled:not-aria-disabled:hover:bg-bg-neutral-hover'
|
|
18
|
+
+ ' disabled:text-foreground-disabled disabled:cursor-not-allowed'
|
|
19
|
+
+ ' aria-disabled:text-foreground-disabled aria-disabled:cursor-not-allowed',
|
|
20
|
+
input: 'text-value text-foreground w-full min-w-0 bg-transparent text-center outline-none'
|
|
21
|
+
+ ' disabled:text-foreground-disabled disabled:cursor-not-allowed',
|
|
21
22
|
},
|
|
22
23
|
|
|
23
24
|
variants: {
|
|
24
25
|
surface: {
|
|
25
26
|
bare: { root: 'bg-transparent ring-1 ring-inset ring-line-strong' },
|
|
26
|
-
well: { root: 'bg-well' },
|
|
27
|
+
well: { root: 'bg-background-well' },
|
|
27
28
|
},
|
|
28
29
|
size: {
|
|
29
30
|
sm: { root: 'h-8', step: 'size-8' },
|
|
@@ -31,7 +32,7 @@ export const numberField = tv({
|
|
|
31
32
|
lg: { root: 'h-10', step: 'size-10', input: 'text-t16' },
|
|
32
33
|
},
|
|
33
34
|
readonly: {
|
|
34
|
-
true: { root: 'bg-well', input: 'text-
|
|
35
|
+
true: { root: 'bg-background-well', input: 'text-foreground-muted' },
|
|
35
36
|
},
|
|
36
37
|
},
|
|
37
38
|
|
|
@@ -55,8 +56,11 @@ function snap(n: number, min: number, step: number) {
|
|
|
55
56
|
function useHold(step: () => void, blocked: boolean) {
|
|
56
57
|
const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)
|
|
57
58
|
const beat = useRef<ReturnType<typeof setInterval> | undefined>(undefined)
|
|
59
|
+
const latest = useRef(step)
|
|
58
60
|
const [pressed, setPressed] = useState(false)
|
|
59
61
|
|
|
62
|
+
useEffect(() => { latest.current = step })
|
|
63
|
+
|
|
60
64
|
const stop = () => {
|
|
61
65
|
clearTimeout(timer.current)
|
|
62
66
|
clearInterval(beat.current)
|
|
@@ -68,12 +72,12 @@ function useHold(step: () => void, blocked: boolean) {
|
|
|
68
72
|
const onPointerDown = (e: ReactPointerEvent<HTMLButtonElement>) => {
|
|
69
73
|
if (e.button !== 0 || blocked) return
|
|
70
74
|
|
|
71
|
-
|
|
75
|
+
latest.current()
|
|
72
76
|
setPressed(true)
|
|
73
77
|
e.currentTarget.setPointerCapture(e.pointerId)
|
|
74
78
|
|
|
75
79
|
timer.current = setTimeout(() => {
|
|
76
|
-
beat.current = setInterval(
|
|
80
|
+
beat.current = setInterval(() => { latest.current() }, HOLD_EVERY)
|
|
77
81
|
}, HOLD_DELAY)
|
|
78
82
|
}
|
|
79
83
|
|
|
@@ -132,8 +136,8 @@ export function NumberField(props: NumberFieldProps) {
|
|
|
132
136
|
const atMin = current !== undefined && current <= min
|
|
133
137
|
const atMax = current !== undefined && current >= max
|
|
134
138
|
|
|
135
|
-
const down = useHold(() => { setTyping(null); set(from - step) }, blocked)
|
|
136
|
-
const up = useHold(() => { setTyping(null); set(from + step) }, blocked)
|
|
139
|
+
const down = useHold(() => { setTyping(null); set(from - step) }, blocked || atMin)
|
|
140
|
+
const up = useHold(() => { setTyping(null); set(from + step) }, blocked || atMax)
|
|
137
141
|
|
|
138
142
|
const onKeyDown = (e: ReactKeyboardEvent<HTMLInputElement>) => {
|
|
139
143
|
if (blocked) return
|
|
@@ -180,7 +184,8 @@ export function NumberField(props: NumberFieldProps) {
|
|
|
180
184
|
<button
|
|
181
185
|
type="button"
|
|
182
186
|
aria-label={decrementLabel}
|
|
183
|
-
disabled={blocked
|
|
187
|
+
disabled={blocked}
|
|
188
|
+
aria-disabled={atMin || undefined}
|
|
184
189
|
data-pressed={down.pressed ? '' : undefined}
|
|
185
190
|
className={ui.step()}
|
|
186
191
|
onPointerDown={down.onPointerDown}
|
|
@@ -212,7 +217,8 @@ export function NumberField(props: NumberFieldProps) {
|
|
|
212
217
|
<button
|
|
213
218
|
type="button"
|
|
214
219
|
aria-label={incrementLabel}
|
|
215
|
-
disabled={blocked
|
|
220
|
+
disabled={blocked}
|
|
221
|
+
aria-disabled={atMax || undefined}
|
|
216
222
|
data-pressed={up.pressed ? '' : undefined}
|
|
217
223
|
className={ui.step()}
|
|
218
224
|
onPointerDown={up.onPointerDown}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pantoia/ui",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Pantoia
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Pantoia Design System",
|
|
5
5
|
"homepage": "https://design.pantoia.com",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -43,7 +43,6 @@
|
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"prepack": "tsc cli/index.ts --ignoreConfig --outDir dist --target es2022 --module esnext --moduleResolution bundler --skipLibCheck --types node",
|
|
46
|
-
"lint": "eslint . --max-warnings 0",
|
|
47
46
|
"typecheck": "tsc --noEmit"
|
|
48
47
|
},
|
|
49
48
|
"dependencies": {
|
|
@@ -60,14 +59,12 @@
|
|
|
60
59
|
"tailwindcss": "^4.3.3"
|
|
61
60
|
},
|
|
62
61
|
"devDependencies": {
|
|
63
|
-
"@pantoia/eslint-config": "*",
|
|
64
62
|
"@pantoia/typescript-config": "*",
|
|
65
63
|
"@types/node": "26.4.0",
|
|
66
64
|
"@types/react": "19.2.18",
|
|
67
65
|
"@types/react-dom": "19.2.5",
|
|
68
|
-
"eslint": "10.9.1",
|
|
69
66
|
"react": "19.2.8",
|
|
70
67
|
"react-dom": "19.2.8",
|
|
71
|
-
"typescript": "
|
|
68
|
+
"typescript": "7.0.2"
|
|
72
69
|
}
|
|
73
70
|
}
|
package/popover/AGENTS.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
```
|
|
4
4
|
받기 npx @pantoia/ui add popover
|
|
5
5
|
층 ui
|
|
6
|
-
파일 popover/index.tsx
|
|
6
|
+
파일 popover/index.tsx, popover/AGENTS.md
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
## 부위
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
| 이름 | props |
|
|
12
12
|
|---|---|
|
|
13
13
|
| `Popover` | `PopoverProps` |
|
|
14
|
-
| `PopoverTrigger` |
|
|
15
|
-
| `PopoverAnchor` |
|
|
16
|
-
| `PopoverClose` |
|
|
14
|
+
| `PopoverTrigger` | - |
|
|
15
|
+
| `PopoverAnchor` | - |
|
|
16
|
+
| `PopoverClose` | - |
|
|
17
17
|
| `PopoverContent` | `PopoverContentProps` |
|
|
18
18
|
|
|
19
19
|
### `PopoverTrigger`
|
package/popover/index.tsx
CHANGED
|
@@ -38,6 +38,12 @@ export interface PopoverContentProps extends Omit<ComponentProps<typeof PopoverP
|
|
|
38
38
|
arrow?: boolean
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
const popoverContent = tv({
|
|
42
|
+
base: 'float text-foreground rounded-float z-overlay p-4'
|
|
43
|
+
+ ' open:animate-enter closed:animate-exit'
|
|
44
|
+
+ ' focus-visible:outline-none',
|
|
45
|
+
})
|
|
46
|
+
|
|
41
47
|
export function PopoverContent({
|
|
42
48
|
side = 'bottom',
|
|
43
49
|
align = 'center',
|
|
@@ -54,12 +60,16 @@ export function PopoverContent({
|
|
|
54
60
|
align={align}
|
|
55
61
|
sideOffset={8}
|
|
56
62
|
arrowPadding={16}
|
|
57
|
-
className={
|
|
58
|
-
+ ' open:animate-enter closed:animate-exit'
|
|
59
|
-
+ ' focus-visible:outline-none' })({ className })}
|
|
63
|
+
className={popoverContent({ className })}
|
|
60
64
|
>
|
|
61
65
|
{children}
|
|
62
|
-
{arrow &&
|
|
66
|
+
{arrow && (
|
|
67
|
+
<PopoverPrimitive.Arrow asChild width={12} height={6}>
|
|
68
|
+
<svg viewBox="0 0 12 6" preserveAspectRatio="none" className="fill-background-panel -translate-y-px">
|
|
69
|
+
<path d="M0 0L4.58579 4.58579C5.36683 5.36683 6.63316 5.36684 7.41421 4.58579L12 0" className="stroke-line stroke-1" />
|
|
70
|
+
</svg>
|
|
71
|
+
</PopoverPrimitive.Arrow>
|
|
72
|
+
)}
|
|
63
73
|
</PopoverPrimitive.Content>
|
|
64
74
|
</PopoverPrimitive.Portal>
|
|
65
75
|
)
|
package/press.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
:root, .light { --pressed-dim: rgba(0,23,51,0.12); }
|
|
2
|
-
.dark { --pressed-dim: rgba(209,209,253,0.14); }
|
|
1
|
+
:root, .light { --pds-pressed-dim: rgba(0,23,51,0.12); }
|
|
2
|
+
.dark { --pds-pressed-dim: rgba(209,209,253,0.14); }
|
|
3
3
|
|
|
4
4
|
:root { --scale-press: 0.97; }
|
|
5
5
|
|
|
@@ -15,22 +15,22 @@
|
|
|
15
15
|
position: absolute;
|
|
16
16
|
inset: 0;
|
|
17
17
|
border-radius: inherit;
|
|
18
|
-
background: var(--pressed-dim);
|
|
18
|
+
background: var(--pds-pressed-dim);
|
|
19
19
|
opacity: 0;
|
|
20
20
|
pointer-events: none;
|
|
21
21
|
transition: opacity var(--dur-state) var(--ease-state);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
&:active:not(:disabled)::after,
|
|
25
|
-
&[data-pressed]:not(:disabled)::after {
|
|
24
|
+
&:active:not(:disabled):not([aria-disabled="true"])::after,
|
|
25
|
+
&[data-pressed]:not(:disabled):not([aria-disabled="true"])::after {
|
|
26
26
|
opacity: 1;
|
|
27
27
|
transition-duration: 0s;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
@utility press-shrink {
|
|
32
|
-
&:active:not(:disabled),
|
|
33
|
-
&[data-pressed]:not(:disabled) {
|
|
32
|
+
&:active:not(:disabled):not([aria-disabled="true"]),
|
|
33
|
+
&[data-pressed]:not(:disabled):not([aria-disabled="true"]) {
|
|
34
34
|
scale: var(--scale-press);
|
|
35
35
|
transition-duration: 0s;
|
|
36
36
|
}
|
package/radio-group/AGENTS.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
```
|
|
4
4
|
받기 npx @pantoia/ui add radio-group
|
|
5
5
|
층 ui
|
|
6
|
-
파일 radio-group/index.tsx
|
|
6
|
+
파일 radio-group/index.tsx, radio-group/AGENTS.md
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
## 부위
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
|---|---|
|
|
13
13
|
| `RadioGroup` | `RadioGroupProps` |
|
|
14
14
|
| `RadioGroupItem` | `RadioGroupItemProps` |
|
|
15
|
-
| `RadioGroupItemLabel` |
|
|
16
|
-
| `RadioGroupItemDescription` |
|
|
15
|
+
| `RadioGroupItemLabel` | - |
|
|
16
|
+
| `RadioGroupItemDescription` | - |
|
|
17
17
|
|
|
18
18
|
### `RadioGroupItemLabel`
|
|
19
19
|
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
### `RadioColor`
|
|
35
35
|
|
|
36
|
-
`'
|
|
36
|
+
`'neutral' | 'info' | 'success' | 'warning' | 'danger'`
|
|
37
37
|
|
|
38
38
|
### `RadioItemContext`
|
|
39
39
|
|
|
@@ -64,17 +64,17 @@
|
|
|
64
64
|
| `className` | `string` | |
|
|
65
65
|
| `children` | `ReactNode` | |
|
|
66
66
|
|
|
67
|
-
## 변형
|
|
67
|
+
## 변형 - `radioGroupItem`
|
|
68
68
|
|
|
69
|
-
슬롯 `root
|
|
69
|
+
슬롯 `root`, `control`
|
|
70
70
|
|
|
71
71
|
| 축 | 값 | 기본 |
|
|
72
72
|
|---|---|---|
|
|
73
|
-
| `color` | `
|
|
73
|
+
| `color` | `neutral`, `info`, `success`, `warning`, `danger` | `neutral` |
|
|
74
74
|
|
|
75
75
|
## 함께 받는 것
|
|
76
76
|
|
|
77
|
-
`label
|
|
77
|
+
`label`, `tv`
|
|
78
78
|
|
|
79
79
|
## npm 의존
|
|
80
80
|
|
package/radio-group/index.tsx
CHANGED
|
@@ -6,9 +6,9 @@ import { createContext, use, useId, type ReactNode } from 'react'
|
|
|
6
6
|
import { Label } from '../label'
|
|
7
7
|
import { tv } from '../tv'
|
|
8
8
|
|
|
9
|
-
export type RadioColor = '
|
|
9
|
+
export type RadioColor = 'neutral' | 'info' | 'success' | 'warning' | 'danger'
|
|
10
10
|
|
|
11
|
-
const ColorContext = createContext<RadioColor>('
|
|
11
|
+
const ColorContext = createContext<RadioColor>('neutral')
|
|
12
12
|
|
|
13
13
|
export interface RadioItemContext {
|
|
14
14
|
id: string
|
|
@@ -25,23 +25,23 @@ export const radioGroupItem = tv({
|
|
|
25
25
|
+ ' bg-transparent transition-state press press-shrink'
|
|
26
26
|
+ ' inline-flex items-center justify-center'
|
|
27
27
|
+ ' checked:ring-2'
|
|
28
|
-
+ ' in-invalid:ring-2 in-invalid:ring-danger'
|
|
29
|
-
+ ' focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring'
|
|
30
|
-
+ ' disabled:ring-line disabled:bg-disabled disabled:cursor-not-allowed'
|
|
31
|
-
+ ' checked:disabled:bg-
|
|
28
|
+
+ ' in-invalid:ring-2 in-invalid:ring-line-danger'
|
|
29
|
+
+ ' focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-focus-ring'
|
|
30
|
+
+ ' disabled:ring-line disabled:bg-bg-neutral-disabled disabled:cursor-not-allowed'
|
|
31
|
+
+ ' checked:disabled:bg-bg-neutral-solid-checked-disabled checked:disabled:ring-transparent',
|
|
32
32
|
},
|
|
33
33
|
|
|
34
34
|
variants: {
|
|
35
35
|
color: {
|
|
36
|
-
|
|
37
|
-
info: { control: 'checked:bg-info checked:ring-info' },
|
|
38
|
-
success: { control: 'checked:bg-success checked:ring-success' },
|
|
39
|
-
warning: { control: 'checked:bg-warning checked:ring-warning' },
|
|
40
|
-
danger: { control: 'checked:bg-danger checked:ring-danger' },
|
|
36
|
+
neutral: { control: 'checked:bg-bg-neutral-solid checked:ring-line-neutral-solid' },
|
|
37
|
+
info: { control: 'checked:bg-bg-info-solid checked:ring-line-info' },
|
|
38
|
+
success: { control: 'checked:bg-bg-success-solid checked:ring-line-success' },
|
|
39
|
+
warning: { control: 'checked:bg-bg-warning-solid checked:ring-line-warning' },
|
|
40
|
+
danger: { control: 'checked:bg-bg-danger-solid checked:ring-line-danger' },
|
|
41
41
|
},
|
|
42
42
|
},
|
|
43
43
|
|
|
44
|
-
defaultVariants: { color: '
|
|
44
|
+
defaultVariants: { color: 'neutral' },
|
|
45
45
|
})
|
|
46
46
|
|
|
47
47
|
export interface RadioGroupProps {
|
|
@@ -54,11 +54,13 @@ export interface RadioGroupProps {
|
|
|
54
54
|
children?: ReactNode
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
const radioGroup = tv({ base: 'flex flex-col gap-3' })
|
|
58
|
+
|
|
57
59
|
export function RadioGroup({
|
|
58
60
|
value,
|
|
59
61
|
defaultValue,
|
|
60
62
|
onValueChange,
|
|
61
|
-
color = '
|
|
63
|
+
color = 'neutral',
|
|
62
64
|
disabled = false,
|
|
63
65
|
className,
|
|
64
66
|
children,
|
|
@@ -72,7 +74,7 @@ export function RadioGroup({
|
|
|
72
74
|
defaultValue={defaultValue}
|
|
73
75
|
onValueChange={onValueChange}
|
|
74
76
|
disabled={disabled}
|
|
75
|
-
className={
|
|
77
|
+
className={radioGroup({ className })}
|
|
76
78
|
>
|
|
77
79
|
{children}
|
|
78
80
|
</RadioGroupPrimitive.Root>
|
|
@@ -103,7 +105,7 @@ export function RadioGroupItem({ value, disabled, className, children }: RadioGr
|
|
|
103
105
|
aria-describedby={`${id}-description`}
|
|
104
106
|
className={ui.control()}
|
|
105
107
|
>
|
|
106
|
-
<RadioGroupPrimitive.Indicator className="text-fg-
|
|
108
|
+
<RadioGroupPrimitive.Indicator className="text-fg-neutral-solid-contrast size-2.5 rounded-full bg-current" />
|
|
107
109
|
</RadioGroupPrimitive.Item>
|
|
108
110
|
|
|
109
111
|
<div className="flex min-w-0 flex-col gap-0.5">
|
|
@@ -124,6 +126,8 @@ export function RadioGroupItemLabel({ className, children }: { className?: strin
|
|
|
124
126
|
)
|
|
125
127
|
}
|
|
126
128
|
|
|
129
|
+
const radioGroupItemDescription = tv({ base: 'text-caption text-foreground-subtle' })
|
|
130
|
+
|
|
127
131
|
export function RadioGroupItemDescription({ className, children }: { className?: string, children?: ReactNode }) {
|
|
128
132
|
const ctx = use(ItemContext)
|
|
129
133
|
|
|
@@ -131,7 +135,7 @@ export function RadioGroupItemDescription({ className, children }: { className?:
|
|
|
131
135
|
<p
|
|
132
136
|
id={ctx?.descriptionId}
|
|
133
137
|
data-description
|
|
134
|
-
className={
|
|
138
|
+
className={radioGroupItemDescription({ className })}
|
|
135
139
|
>
|
|
136
140
|
{children}
|
|
137
141
|
</p>
|
package/registry.json
CHANGED
|
@@ -169,35 +169,6 @@
|
|
|
169
169
|
"layer": "ui"
|
|
170
170
|
}
|
|
171
171
|
},
|
|
172
|
-
{
|
|
173
|
-
"name": "code-block",
|
|
174
|
-
"type": "registry:ui",
|
|
175
|
-
"title": "CodeBlock",
|
|
176
|
-
"files": [
|
|
177
|
-
{
|
|
178
|
-
"path": "code-block/index.tsx",
|
|
179
|
-
"type": "registry:ui"
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"path": "code-block/index.module.css",
|
|
183
|
-
"type": "registry:ui"
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
"path": "code-block/AGENTS.md",
|
|
187
|
-
"type": "registry:file",
|
|
188
|
-
"target": "code-block/AGENTS.md"
|
|
189
|
-
}
|
|
190
|
-
],
|
|
191
|
-
"dependencies": [
|
|
192
|
-
"lucide-react"
|
|
193
|
-
],
|
|
194
|
-
"registryDependencies": [
|
|
195
|
-
"tv"
|
|
196
|
-
],
|
|
197
|
-
"meta": {
|
|
198
|
-
"layer": "ui"
|
|
199
|
-
}
|
|
200
|
-
},
|
|
201
172
|
{
|
|
202
173
|
"name": "combobox",
|
|
203
174
|
"type": "registry:ui",
|
|
@@ -251,28 +222,6 @@
|
|
|
251
222
|
"layer": "derived"
|
|
252
223
|
}
|
|
253
224
|
},
|
|
254
|
-
{
|
|
255
|
-
"name": "copy-button",
|
|
256
|
-
"type": "registry:ui",
|
|
257
|
-
"title": "CopyButton",
|
|
258
|
-
"files": [
|
|
259
|
-
{
|
|
260
|
-
"path": "copy-button/index.tsx",
|
|
261
|
-
"type": "registry:ui"
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
"path": "copy-button/AGENTS.md",
|
|
265
|
-
"type": "registry:file",
|
|
266
|
-
"target": "copy-button/AGENTS.md"
|
|
267
|
-
}
|
|
268
|
-
],
|
|
269
|
-
"registryDependencies": [
|
|
270
|
-
"button"
|
|
271
|
-
],
|
|
272
|
-
"meta": {
|
|
273
|
-
"layer": "derived"
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
225
|
{
|
|
277
226
|
"name": "dialog",
|
|
278
227
|
"type": "registry:ui",
|
|
@@ -667,6 +616,9 @@
|
|
|
667
616
|
"dependencies": [
|
|
668
617
|
"sonner"
|
|
669
618
|
],
|
|
619
|
+
"registryDependencies": [
|
|
620
|
+
"tv"
|
|
621
|
+
],
|
|
670
622
|
"meta": {
|
|
671
623
|
"layer": "ui"
|
|
672
624
|
}
|
package/select/AGENTS.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
```
|
|
4
4
|
받기 npx @pantoia/ui add select
|
|
5
5
|
층 ui
|
|
6
|
-
파일 select/index.tsx
|
|
6
|
+
파일 select/index.tsx, select/AGENTS.md
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
## 부위
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
| 이름 | props |
|
|
12
12
|
|---|---|
|
|
13
13
|
| `Select` | `SelectProps` |
|
|
14
|
-
| `SelectGroup` |
|
|
15
|
-
| `SelectItem` |
|
|
16
|
-
| `SelectItemText` |
|
|
17
|
-
| `SelectItemDescription` |
|
|
18
|
-
| `SelectSeparator` |
|
|
14
|
+
| `SelectGroup` | - |
|
|
15
|
+
| `SelectItem` | - |
|
|
16
|
+
| `SelectItemText` | - |
|
|
17
|
+
| `SelectItemDescription` | - |
|
|
18
|
+
| `SelectSeparator` | - |
|
|
19
19
|
|
|
20
20
|
### `SelectGroup`
|
|
21
21
|
|
|
@@ -74,12 +74,12 @@
|
|
|
74
74
|
| `arrow` | `boolean` | |
|
|
75
75
|
| `children` | `ReactNode` | |
|
|
76
76
|
|
|
77
|
-
## 변형
|
|
77
|
+
## 변형 - `selectTrigger`
|
|
78
78
|
|
|
79
79
|
| 축 | 값 | 기본 |
|
|
80
80
|
|---|---|---|
|
|
81
|
-
| `surface` | `bare
|
|
82
|
-
| `size` | `sm
|
|
81
|
+
| `surface` | `bare`, `well` | `bare` |
|
|
82
|
+
| `size` | `sm`, `md`, `lg` | `md` |
|
|
83
83
|
|
|
84
84
|
## 함께 받는 것
|
|
85
85
|
|
|
@@ -87,4 +87,4 @@
|
|
|
87
87
|
|
|
88
88
|
## npm 의존
|
|
89
89
|
|
|
90
|
-
`lucide-react
|
|
90
|
+
`lucide-react`, `radix-ui`
|