@lglab/compose-ui-mcp 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/assets/llms/accordion.md +184 -0
- package/dist/assets/llms/alert-dialog.md +306 -0
- package/dist/assets/llms/autocomplete.md +756 -0
- package/dist/assets/llms/avatar.md +166 -0
- package/dist/assets/llms/badge.md +478 -0
- package/dist/assets/llms/button.md +238 -0
- package/dist/assets/llms/card.md +264 -0
- package/dist/assets/llms/checkbox-group.md +158 -0
- package/dist/assets/llms/checkbox.md +83 -0
- package/dist/assets/llms/collapsible.md +165 -0
- package/dist/assets/llms/combobox.md +1255 -0
- package/dist/assets/llms/context-menu.md +371 -0
- package/dist/assets/llms/dialog.md +592 -0
- package/dist/assets/llms/drawer.md +437 -0
- package/dist/assets/llms/field.md +74 -0
- package/dist/assets/llms/form.md +1931 -0
- package/dist/assets/llms/input.md +47 -0
- package/dist/assets/llms/menu.md +484 -0
- package/dist/assets/llms/menubar.md +804 -0
- package/dist/assets/llms/meter.md +181 -0
- package/dist/assets/llms/navigation-menu.md +187 -0
- package/dist/assets/llms/number-field.md +243 -0
- package/dist/assets/llms/pagination.md +514 -0
- package/dist/assets/llms/popover.md +206 -0
- package/dist/assets/llms/preview-card.md +146 -0
- package/dist/assets/llms/progress.md +60 -0
- package/dist/assets/llms/radio-group.md +105 -0
- package/dist/assets/llms/scroll-area.md +132 -0
- package/dist/assets/llms/select.md +276 -0
- package/dist/assets/llms/separator.md +49 -0
- package/dist/assets/llms/skeleton.md +96 -0
- package/dist/assets/llms/slider.md +161 -0
- package/dist/assets/llms/switch.md +101 -0
- package/dist/assets/llms/table.md +1325 -0
- package/dist/assets/llms/tabs.md +327 -0
- package/dist/assets/llms/textarea.md +38 -0
- package/dist/assets/llms/toast.md +349 -0
- package/dist/assets/llms/toggle-group.md +261 -0
- package/dist/assets/llms/toggle.md +161 -0
- package/dist/assets/llms/toolbar.md +148 -0
- package/dist/assets/llms/tooltip.md +486 -0
- package/dist/assets/llms-full.txt +14515 -0
- package/dist/assets/llms.txt +65 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +161 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Toggle Group
|
|
2
|
+
|
|
3
|
+
Provides a shared state to a series of toggle buttons.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lglab/compose-ui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Import
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { ToggleGroupRoot, ToggleGroupItem } from '@lglab/compose-ui'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Examples
|
|
18
|
+
|
|
19
|
+
### Default
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
23
|
+
import { AlignCenterIcon, AlignLeftIcon, AlignRightIcon } from 'lucide-react'
|
|
24
|
+
|
|
25
|
+
export default function DefaultExample() {
|
|
26
|
+
return (
|
|
27
|
+
<ToggleGroupRoot defaultValue={['left']}>
|
|
28
|
+
<ToggleGroupItem value='left' aria-label='Align left' size='icon'>
|
|
29
|
+
<AlignLeftIcon />
|
|
30
|
+
</ToggleGroupItem>
|
|
31
|
+
<ToggleGroupItem value='center' aria-label='Align center' size='icon'>
|
|
32
|
+
<AlignCenterIcon />
|
|
33
|
+
</ToggleGroupItem>
|
|
34
|
+
<ToggleGroupItem value='right' aria-label='Align right' size='icon'>
|
|
35
|
+
<AlignRightIcon />
|
|
36
|
+
</ToggleGroupItem>
|
|
37
|
+
</ToggleGroupRoot>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Multiple Selection
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
46
|
+
import { BoldIcon, ItalicIcon, UnderlineIcon } from 'lucide-react'
|
|
47
|
+
|
|
48
|
+
export default function MultipleExample() {
|
|
49
|
+
return (
|
|
50
|
+
<ToggleGroupRoot multiple defaultValue={['bold']}>
|
|
51
|
+
<ToggleGroupItem value='bold' aria-label='Bold' size='icon'>
|
|
52
|
+
<BoldIcon />
|
|
53
|
+
</ToggleGroupItem>
|
|
54
|
+
<ToggleGroupItem value='italic' aria-label='Italic' size='icon'>
|
|
55
|
+
<ItalicIcon />
|
|
56
|
+
</ToggleGroupItem>
|
|
57
|
+
<ToggleGroupItem value='underline' aria-label='Underline' size='icon'>
|
|
58
|
+
<UnderlineIcon />
|
|
59
|
+
</ToggleGroupItem>
|
|
60
|
+
</ToggleGroupRoot>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Controlled
|
|
66
|
+
|
|
67
|
+
```tsx
|
|
68
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
69
|
+
import { AlignCenterIcon, AlignLeftIcon, AlignRightIcon } from 'lucide-react'
|
|
70
|
+
import { useState } from 'react'
|
|
71
|
+
|
|
72
|
+
export default function ControlledExample() {
|
|
73
|
+
const [value, setValue] = useState<string[]>(['left'])
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<div className='flex flex-col items-center gap-3'>
|
|
77
|
+
<ToggleGroupRoot value={value} onValueChange={setValue}>
|
|
78
|
+
<ToggleGroupItem value='left' aria-label='Align left' size='icon'>
|
|
79
|
+
<AlignLeftIcon />
|
|
80
|
+
</ToggleGroupItem>
|
|
81
|
+
<ToggleGroupItem value='center' aria-label='Align center' size='icon'>
|
|
82
|
+
<AlignCenterIcon />
|
|
83
|
+
</ToggleGroupItem>
|
|
84
|
+
<ToggleGroupItem value='right' aria-label='Align right' size='icon'>
|
|
85
|
+
<AlignRightIcon />
|
|
86
|
+
</ToggleGroupItem>
|
|
87
|
+
</ToggleGroupRoot>
|
|
88
|
+
<span className='text-sm'>
|
|
89
|
+
{value.length > 0 ? `Aligned: ${value[0]}` : 'No alignment'}
|
|
90
|
+
</span>
|
|
91
|
+
</div>
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Disabled
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
100
|
+
import { AlignCenterIcon, AlignLeftIcon, AlignRightIcon } from 'lucide-react'
|
|
101
|
+
|
|
102
|
+
export default function DisabledExample() {
|
|
103
|
+
return (
|
|
104
|
+
<ToggleGroupRoot disabled defaultValue={['left']}>
|
|
105
|
+
<ToggleGroupItem value='left' aria-label='Align left' size='icon'>
|
|
106
|
+
<AlignLeftIcon />
|
|
107
|
+
</ToggleGroupItem>
|
|
108
|
+
<ToggleGroupItem value='center' aria-label='Align center' size='icon'>
|
|
109
|
+
<AlignCenterIcon />
|
|
110
|
+
</ToggleGroupItem>
|
|
111
|
+
<ToggleGroupItem value='right' aria-label='Align right' size='icon'>
|
|
112
|
+
<AlignRightIcon />
|
|
113
|
+
</ToggleGroupItem>
|
|
114
|
+
</ToggleGroupRoot>
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Sizes
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
123
|
+
import { AlignCenterIcon, AlignLeftIcon, AlignRightIcon } from 'lucide-react'
|
|
124
|
+
|
|
125
|
+
export default function SizesExample() {
|
|
126
|
+
return (
|
|
127
|
+
<div className='flex flex-col items-start gap-4'>
|
|
128
|
+
<ToggleGroupRoot defaultValue={['left']}>
|
|
129
|
+
<ToggleGroupItem value='left' aria-label='Align left' size='icon-sm'>
|
|
130
|
+
<AlignLeftIcon />
|
|
131
|
+
</ToggleGroupItem>
|
|
132
|
+
<ToggleGroupItem value='center' aria-label='Align center' size='icon-sm'>
|
|
133
|
+
<AlignCenterIcon />
|
|
134
|
+
</ToggleGroupItem>
|
|
135
|
+
<ToggleGroupItem value='right' aria-label='Align right' size='icon-sm'>
|
|
136
|
+
<AlignRightIcon />
|
|
137
|
+
</ToggleGroupItem>
|
|
138
|
+
</ToggleGroupRoot>
|
|
139
|
+
|
|
140
|
+
<ToggleGroupRoot defaultValue={['left']}>
|
|
141
|
+
<ToggleGroupItem value='left' aria-label='Align left' size='icon'>
|
|
142
|
+
<AlignLeftIcon />
|
|
143
|
+
</ToggleGroupItem>
|
|
144
|
+
<ToggleGroupItem value='center' aria-label='Align center' size='icon'>
|
|
145
|
+
<AlignCenterIcon />
|
|
146
|
+
</ToggleGroupItem>
|
|
147
|
+
<ToggleGroupItem value='right' aria-label='Align right' size='icon'>
|
|
148
|
+
<AlignRightIcon />
|
|
149
|
+
</ToggleGroupItem>
|
|
150
|
+
</ToggleGroupRoot>
|
|
151
|
+
|
|
152
|
+
<ToggleGroupRoot defaultValue={['left']}>
|
|
153
|
+
<ToggleGroupItem value='left' aria-label='Align left' size='icon-lg'>
|
|
154
|
+
<AlignLeftIcon />
|
|
155
|
+
</ToggleGroupItem>
|
|
156
|
+
<ToggleGroupItem value='center' aria-label='Align center' size='icon-lg'>
|
|
157
|
+
<AlignCenterIcon />
|
|
158
|
+
</ToggleGroupItem>
|
|
159
|
+
<ToggleGroupItem value='right' aria-label='Align right' size='icon-lg'>
|
|
160
|
+
<AlignRightIcon />
|
|
161
|
+
</ToggleGroupItem>
|
|
162
|
+
</ToggleGroupRoot>
|
|
163
|
+
</div>
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Vertical Orientation
|
|
169
|
+
|
|
170
|
+
```tsx
|
|
171
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
172
|
+
import { AlignCenterIcon, AlignLeftIcon, AlignRightIcon } from 'lucide-react'
|
|
173
|
+
|
|
174
|
+
export default function OrientationExample() {
|
|
175
|
+
return (
|
|
176
|
+
<ToggleGroupRoot orientation='vertical' defaultValue={['left']}>
|
|
177
|
+
<ToggleGroupItem value='left' aria-label='Align left' size='icon'>
|
|
178
|
+
<AlignLeftIcon />
|
|
179
|
+
</ToggleGroupItem>
|
|
180
|
+
<ToggleGroupItem value='center' aria-label='Align center' size='icon'>
|
|
181
|
+
<AlignCenterIcon />
|
|
182
|
+
</ToggleGroupItem>
|
|
183
|
+
<ToggleGroupItem value='right' aria-label='Align right' size='icon'>
|
|
184
|
+
<AlignRightIcon />
|
|
185
|
+
</ToggleGroupItem>
|
|
186
|
+
</ToggleGroupRoot>
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### With Text
|
|
192
|
+
|
|
193
|
+
```tsx
|
|
194
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
195
|
+
import { BoldIcon, ItalicIcon, UnderlineIcon } from 'lucide-react'
|
|
196
|
+
|
|
197
|
+
export default function WithTextExample() {
|
|
198
|
+
return (
|
|
199
|
+
<ToggleGroupRoot defaultValue={['bold']}>
|
|
200
|
+
<ToggleGroupItem value='bold' aria-label='Bold'>
|
|
201
|
+
<BoldIcon />
|
|
202
|
+
Bold
|
|
203
|
+
</ToggleGroupItem>
|
|
204
|
+
<ToggleGroupItem value='italic' aria-label='Italic'>
|
|
205
|
+
<ItalicIcon />
|
|
206
|
+
Italic
|
|
207
|
+
</ToggleGroupItem>
|
|
208
|
+
<ToggleGroupItem value='underline' aria-label='Underline'>
|
|
209
|
+
<UnderlineIcon />
|
|
210
|
+
Underline
|
|
211
|
+
</ToggleGroupItem>
|
|
212
|
+
</ToggleGroupRoot>
|
|
213
|
+
)
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Ghost
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
221
|
+
import { Bookmark, Heart, Star } from 'lucide-react'
|
|
222
|
+
|
|
223
|
+
export default function GhostExample() {
|
|
224
|
+
return (
|
|
225
|
+
<ToggleGroupRoot multiple>
|
|
226
|
+
<ToggleGroupItem
|
|
227
|
+
value='star'
|
|
228
|
+
variant='ghost'
|
|
229
|
+
aria-label='Favorite'
|
|
230
|
+
size='icon'
|
|
231
|
+
className='data-pressed:*:[svg]:fill-yellow-500 data-pressed:*:[svg]:stroke-yellow-500'
|
|
232
|
+
>
|
|
233
|
+
<Star />
|
|
234
|
+
</ToggleGroupItem>
|
|
235
|
+
<ToggleGroupItem
|
|
236
|
+
value='heart'
|
|
237
|
+
variant='ghost'
|
|
238
|
+
aria-label='Like'
|
|
239
|
+
size='icon'
|
|
240
|
+
className='data-pressed:*:[svg]:fill-red-500 data-pressed:*:[svg]:stroke-red-500'
|
|
241
|
+
>
|
|
242
|
+
<Heart />
|
|
243
|
+
</ToggleGroupItem>
|
|
244
|
+
<ToggleGroupItem
|
|
245
|
+
value='bookmark'
|
|
246
|
+
variant='ghost'
|
|
247
|
+
aria-label='Bookmark'
|
|
248
|
+
size='icon'
|
|
249
|
+
className='data-pressed:*:[svg]:fill-blue-500 data-pressed:*:[svg]:stroke-blue-500'
|
|
250
|
+
>
|
|
251
|
+
<Bookmark />
|
|
252
|
+
</ToggleGroupItem>
|
|
253
|
+
</ToggleGroupRoot>
|
|
254
|
+
)
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Resources
|
|
259
|
+
|
|
260
|
+
- [Base UI Toggle Group Documentation](https://base-ui.com/react/components/toggle-group)
|
|
261
|
+
- [API Reference](https://base-ui.com/react/components/toggle-group#api-reference)
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Toggle
|
|
2
|
+
|
|
3
|
+
A two-state button that can be on or off.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lglab/compose-ui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Import
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { Toggle } from '@lglab/compose-ui'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Examples
|
|
18
|
+
|
|
19
|
+
### Default
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { Toggle } from '@lglab/compose-ui/toggle'
|
|
23
|
+
import { BoldIcon } from 'lucide-react'
|
|
24
|
+
|
|
25
|
+
export default function DefaultExample() {
|
|
26
|
+
return (
|
|
27
|
+
<Toggle aria-label='Toggle bold' size='icon'>
|
|
28
|
+
<BoldIcon />
|
|
29
|
+
</Toggle>
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Sizes
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { Toggle } from '@lglab/compose-ui/toggle'
|
|
38
|
+
import { BoldIcon } from 'lucide-react'
|
|
39
|
+
|
|
40
|
+
export default function SizesExample() {
|
|
41
|
+
return (
|
|
42
|
+
<div className='flex items-center flex-wrap gap-2'>
|
|
43
|
+
<Toggle aria-label='Toggle bold' size='icon-sm'>
|
|
44
|
+
<BoldIcon className='size-3.5' />
|
|
45
|
+
</Toggle>
|
|
46
|
+
<Toggle aria-label='Toggle bold' size='icon'>
|
|
47
|
+
<BoldIcon />
|
|
48
|
+
</Toggle>
|
|
49
|
+
<Toggle aria-label='Toggle bold' size='icon-lg'>
|
|
50
|
+
<BoldIcon />
|
|
51
|
+
</Toggle>
|
|
52
|
+
</div>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Pressed
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
import { Toggle } from '@lglab/compose-ui/toggle'
|
|
61
|
+
import { BoldIcon } from 'lucide-react'
|
|
62
|
+
|
|
63
|
+
export default function PressedExample() {
|
|
64
|
+
return (
|
|
65
|
+
<Toggle defaultPressed aria-label='Toggle bold' size='icon'>
|
|
66
|
+
<BoldIcon />
|
|
67
|
+
</Toggle>
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Controlled
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
import { Toggle } from '@lglab/compose-ui/toggle'
|
|
76
|
+
import { BoldIcon } from 'lucide-react'
|
|
77
|
+
import { useState } from 'react'
|
|
78
|
+
|
|
79
|
+
export default function ControlledExample() {
|
|
80
|
+
const [pressed, setPressed] = useState(false)
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<div className='flex items-center gap-3'>
|
|
84
|
+
<Toggle
|
|
85
|
+
pressed={pressed}
|
|
86
|
+
onPressedChange={setPressed}
|
|
87
|
+
aria-label='Toggle bold'
|
|
88
|
+
size='icon'
|
|
89
|
+
>
|
|
90
|
+
<BoldIcon />
|
|
91
|
+
</Toggle>
|
|
92
|
+
<span className='text-sm'>{pressed ? 'Bold on' : 'Bold off'}</span>
|
|
93
|
+
</div>
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Disabled
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
import { Toggle } from '@lglab/compose-ui/toggle'
|
|
102
|
+
import { BoldIcon } from 'lucide-react'
|
|
103
|
+
|
|
104
|
+
export default function DisabledExample() {
|
|
105
|
+
return (
|
|
106
|
+
<div className='flex flex-wrap gap-2'>
|
|
107
|
+
<Toggle disabled aria-label='Toggle bold' size='icon'>
|
|
108
|
+
<BoldIcon />
|
|
109
|
+
</Toggle>
|
|
110
|
+
<Toggle disabled defaultPressed aria-label='Toggle bold' size='icon'>
|
|
111
|
+
<BoldIcon />
|
|
112
|
+
</Toggle>
|
|
113
|
+
</div>
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### With Text
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
import { Toggle } from '@lglab/compose-ui/toggle'
|
|
122
|
+
import { BoldIcon } from 'lucide-react'
|
|
123
|
+
|
|
124
|
+
export default function WithTextExample() {
|
|
125
|
+
return (
|
|
126
|
+
<div className='flex flex-wrap gap-2'>
|
|
127
|
+
<Toggle aria-label='Toggle bold'>
|
|
128
|
+
<BoldIcon />
|
|
129
|
+
Bold
|
|
130
|
+
</Toggle>
|
|
131
|
+
<Toggle aria-label='Toggle bold'>Bold</Toggle>
|
|
132
|
+
</div>
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Ghost
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
import { Toggle } from '@lglab/compose-ui/toggle'
|
|
141
|
+
import { Heart } from 'lucide-react'
|
|
142
|
+
|
|
143
|
+
export default function GhostExample() {
|
|
144
|
+
return (
|
|
145
|
+
<div className='flex flex-wrap gap-2'>
|
|
146
|
+
<Toggle
|
|
147
|
+
variant='ghost'
|
|
148
|
+
aria-label='Toggle like'
|
|
149
|
+
className='data-pressed:*:[svg]:fill-red-500 data-pressed:*:[svg]:stroke-red-500'
|
|
150
|
+
>
|
|
151
|
+
<Heart />
|
|
152
|
+
</Toggle>
|
|
153
|
+
</div>
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Resources
|
|
159
|
+
|
|
160
|
+
- [Base UI Toggle Documentation](https://base-ui.com/react/components/toggle)
|
|
161
|
+
- [API Reference](https://base-ui.com/react/components/toggle#api-reference)
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Toolbar
|
|
2
|
+
|
|
3
|
+
A container for grouping a set of buttons and controls.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lglab/compose-ui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Import
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { ToolbarRoot, ToolbarButton, ToolbarLink, ToolbarInput, ToolbarGroup, ToolbarSeparator } from '@lglab/compose-ui'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Examples
|
|
18
|
+
|
|
19
|
+
### Rich Text Editor
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import {
|
|
23
|
+
SelectIcon,
|
|
24
|
+
SelectItem,
|
|
25
|
+
SelectItemIndicator,
|
|
26
|
+
SelectItemText,
|
|
27
|
+
SelectList,
|
|
28
|
+
SelectPopup,
|
|
29
|
+
SelectPortal,
|
|
30
|
+
SelectPositioner,
|
|
31
|
+
SelectRoot,
|
|
32
|
+
SelectTrigger,
|
|
33
|
+
SelectValue,
|
|
34
|
+
} from '@lglab/compose-ui/select'
|
|
35
|
+
import { ToggleGroupItem, ToggleGroupRoot } from '@lglab/compose-ui/toggle-group'
|
|
36
|
+
import {
|
|
37
|
+
ToolbarButton,
|
|
38
|
+
ToolbarGroup,
|
|
39
|
+
ToolbarRoot,
|
|
40
|
+
ToolbarSeparator,
|
|
41
|
+
} from '@lglab/compose-ui/toolbar'
|
|
42
|
+
import {
|
|
43
|
+
AlignCenterIcon,
|
|
44
|
+
AlignLeftIcon,
|
|
45
|
+
AlignRightIcon,
|
|
46
|
+
BoldIcon,
|
|
47
|
+
CheckIcon,
|
|
48
|
+
ChevronsUpDownIcon,
|
|
49
|
+
ItalicIcon,
|
|
50
|
+
UnderlineIcon,
|
|
51
|
+
} from 'lucide-react'
|
|
52
|
+
|
|
53
|
+
const fontFaces = [
|
|
54
|
+
{ label: 'Helvetica', value: 'helvetica' },
|
|
55
|
+
{ label: 'Arial', value: 'arial' },
|
|
56
|
+
{ label: 'Times New Roman', value: 'times' },
|
|
57
|
+
{ label: 'Georgia', value: 'georgia' },
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
export default function DefaultExample() {
|
|
61
|
+
return (
|
|
62
|
+
<ToolbarRoot>
|
|
63
|
+
<ToggleGroupRoot className='flex' multiple>
|
|
64
|
+
<ToolbarButton
|
|
65
|
+
render={<ToggleGroupItem value='bold' size='icon-sm' />}
|
|
66
|
+
aria-label='Bold'
|
|
67
|
+
>
|
|
68
|
+
<BoldIcon className='size-4' />
|
|
69
|
+
</ToolbarButton>
|
|
70
|
+
<ToolbarButton
|
|
71
|
+
render={<ToggleGroupItem value='italic' size='icon-sm' />}
|
|
72
|
+
aria-label='Italic'
|
|
73
|
+
>
|
|
74
|
+
<ItalicIcon className='size-4' />
|
|
75
|
+
</ToolbarButton>
|
|
76
|
+
<ToolbarButton
|
|
77
|
+
render={<ToggleGroupItem value='underline' size='icon-sm' />}
|
|
78
|
+
aria-label='Underline'
|
|
79
|
+
>
|
|
80
|
+
<UnderlineIcon className='size-4' />
|
|
81
|
+
</ToolbarButton>
|
|
82
|
+
</ToggleGroupRoot>
|
|
83
|
+
|
|
84
|
+
<ToolbarSeparator />
|
|
85
|
+
|
|
86
|
+
<ToggleGroupRoot defaultValue={['left']} className='flex'>
|
|
87
|
+
<ToolbarButton
|
|
88
|
+
render={<ToggleGroupItem value='left' size='icon-sm' />}
|
|
89
|
+
aria-label='Align left'
|
|
90
|
+
>
|
|
91
|
+
<AlignLeftIcon className='size-4' />
|
|
92
|
+
</ToolbarButton>
|
|
93
|
+
<ToolbarButton
|
|
94
|
+
render={<ToggleGroupItem value='center' size='icon-sm' />}
|
|
95
|
+
aria-label='Align center'
|
|
96
|
+
>
|
|
97
|
+
<AlignCenterIcon className='size-4' />
|
|
98
|
+
</ToolbarButton>
|
|
99
|
+
<ToolbarButton
|
|
100
|
+
render={<ToggleGroupItem value='right' size='icon-sm' />}
|
|
101
|
+
aria-label='Align right'
|
|
102
|
+
>
|
|
103
|
+
<AlignRightIcon className='size-4' />
|
|
104
|
+
</ToolbarButton>
|
|
105
|
+
</ToggleGroupRoot>
|
|
106
|
+
|
|
107
|
+
<ToolbarSeparator />
|
|
108
|
+
|
|
109
|
+
<ToolbarGroup aria-label='Format'>
|
|
110
|
+
<ToolbarButton size='sm'>$</ToolbarButton>
|
|
111
|
+
<ToolbarButton size='sm'>%</ToolbarButton>
|
|
112
|
+
</ToolbarGroup>
|
|
113
|
+
|
|
114
|
+
<ToolbarSeparator />
|
|
115
|
+
|
|
116
|
+
<SelectRoot items={fontFaces} defaultValue='helvetica'>
|
|
117
|
+
<ToolbarButton render={<SelectTrigger />}>
|
|
118
|
+
<SelectValue />
|
|
119
|
+
<SelectIcon>
|
|
120
|
+
<ChevronsUpDownIcon className='size-4 opacity-50' />
|
|
121
|
+
</SelectIcon>
|
|
122
|
+
</ToolbarButton>
|
|
123
|
+
<SelectPortal>
|
|
124
|
+
<SelectPositioner>
|
|
125
|
+
<SelectPopup>
|
|
126
|
+
<SelectList>
|
|
127
|
+
{fontFaces.map((fontFace) => (
|
|
128
|
+
<SelectItem key={fontFace.value} value={fontFace.value}>
|
|
129
|
+
<SelectItemText>{fontFace.label}</SelectItemText>
|
|
130
|
+
<SelectItemIndicator>
|
|
131
|
+
<CheckIcon className='size-4' />
|
|
132
|
+
</SelectItemIndicator>
|
|
133
|
+
</SelectItem>
|
|
134
|
+
))}
|
|
135
|
+
</SelectList>
|
|
136
|
+
</SelectPopup>
|
|
137
|
+
</SelectPositioner>
|
|
138
|
+
</SelectPortal>
|
|
139
|
+
</SelectRoot>
|
|
140
|
+
</ToolbarRoot>
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Resources
|
|
146
|
+
|
|
147
|
+
- [Base UI Toolbar Documentation](https://base-ui.com/react/components/toolbar)
|
|
148
|
+
- [API Reference](https://base-ui.com/react/components/toolbar#api-reference)
|