playbook_ui_docs 14.16.0.pre.rc.5 → 14.17.0.pre.alpha.PBNTR920emojipickerpoc7143
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx +90 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination.jsx +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.html.erb +39 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md +6 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +4 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.html.erb +0 -11
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.jsx +0 -7
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.jsx +1 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.jsx +184 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.md +5 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.jsx +97 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.md +1 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +3 -0
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.jsx +6 -6
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.jsx +6 -6
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +6 -6
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +8 -8
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +67 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +67 -0
- data/app/pb_kits/playbook/pb_icon/docs/_icon_color.html.erb +10 -4
- data/app/pb_kits/playbook/pb_icon/docs/_icon_color.jsx +49 -24
- data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_click.jsx +13 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_bracket.jsx +190 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_bracket.md +5 -0
- data/app/pb_kits/playbook/pb_layout/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +1 -1
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +76 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +94 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.md +1 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +75 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +93 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.md +3 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +75 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +93 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.md +3 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +74 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +92 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.md +3 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +72 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +97 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +71 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +91 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +14 -2
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +6 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_vertical.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.jsx +50 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless_react.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating.jsx +59 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating_react.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_table/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_picker.jsx +371 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_text_input/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.html.erb +19 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.jsx +23 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_highlight.jsx +4 -4
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options.html.erb +22 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options.jsx +40 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options_rails.md +5 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options_react.md +5 -0
- data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
- data/dist/playbook-doc.js +1 -1
- metadata +45 -4
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.md → _advanced_table_selectable_rows_no_subrows_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows.md → _advanced_table_selectable_rows_react.md} +0 -0
@@ -0,0 +1,371 @@
|
|
1
|
+
import React, { useState, useEffect } from "react"
|
2
|
+
import TextInput from '../../pb_text_input/_text_input'
|
3
|
+
import Button from "../../pb_button/_button"
|
4
|
+
|
5
|
+
// Emojis organized by category with icons for navigation and search names
|
6
|
+
const emojiCategories = [
|
7
|
+
{
|
8
|
+
id: 'recent',
|
9
|
+
name: "Recent",
|
10
|
+
icon: '🕒',
|
11
|
+
emojis: [
|
12
|
+
{ emoji: '😀', name: 'happy' },
|
13
|
+
{ emoji: '👍', name: 'thumbs up' },
|
14
|
+
{ emoji: '🎉', name: 'popper' },
|
15
|
+
{ emoji: '❤️', name: 'heart' },
|
16
|
+
{ emoji: '🔥', name: 'fire' },
|
17
|
+
{ emoji: '✨', name: 'sparkles' }
|
18
|
+
]
|
19
|
+
},
|
20
|
+
{
|
21
|
+
id: 'smileys',
|
22
|
+
name: "Smileys",
|
23
|
+
icon: '😊',
|
24
|
+
emojis: [
|
25
|
+
{ emoji: '😀', name: 'happy' },
|
26
|
+
{ emoji: '😂', name: 'lmao' },
|
27
|
+
{ emoji: '🙂', name: 'smile' },
|
28
|
+
{ emoji: '😊', name: 'smiley' },
|
29
|
+
{ emoji: '😍', name: 'smile-heart' },
|
30
|
+
{ emoji: '🤩', name: 'star-struck' }
|
31
|
+
]
|
32
|
+
},
|
33
|
+
{
|
34
|
+
id: 'people',
|
35
|
+
name: "People",
|
36
|
+
icon: '👥',
|
37
|
+
emojis: [
|
38
|
+
{ emoji: '👍', name: 'thumbs up' },
|
39
|
+
{ emoji: '👎', name: 'thumbs down' },
|
40
|
+
{ emoji: '👌', name: 'OK' },
|
41
|
+
{ emoji: '👋', name: 'wave' },
|
42
|
+
{ emoji: '✌️', name: 'victory' },
|
43
|
+
{ emoji: '🙏', name: 'pray' }
|
44
|
+
]
|
45
|
+
},
|
46
|
+
{
|
47
|
+
id: 'animals',
|
48
|
+
name: "Animals",
|
49
|
+
icon: '🐼',
|
50
|
+
emojis: [
|
51
|
+
{ emoji: '🐶', name: 'dog' },
|
52
|
+
{ emoji: '🐱', name: 'cat' },
|
53
|
+
{ emoji: '🐼', name: 'panda' },
|
54
|
+
{ emoji: '🦁', name: 'lion' },
|
55
|
+
{ emoji: '🐢', name: 'turtle' },
|
56
|
+
{ emoji: '🦋', name: 'butterfly' }
|
57
|
+
]
|
58
|
+
},
|
59
|
+
{
|
60
|
+
id: 'food',
|
61
|
+
name: "Food",
|
62
|
+
icon: '🍔',
|
63
|
+
emojis: [
|
64
|
+
{ emoji: '🍎', name: 'apple' },
|
65
|
+
{ emoji: '🍕', name: 'pizza' },
|
66
|
+
{ emoji: '🍦', name: 'ice cream' },
|
67
|
+
{ emoji: '🍩', name: 'doughnut' },
|
68
|
+
{ emoji: '🍷', name: 'wine' },
|
69
|
+
{ emoji: '🍺', name: 'beer' }
|
70
|
+
]
|
71
|
+
},
|
72
|
+
{
|
73
|
+
id: 'activities',
|
74
|
+
name: "Activities",
|
75
|
+
icon: '⚽',
|
76
|
+
emojis: [
|
77
|
+
{ emoji: '⚽', name: 'soccer ball' },
|
78
|
+
{ emoji: '🏀', name: 'basketball' },
|
79
|
+
{ emoji: '🎮', name: 'video game' },
|
80
|
+
{ emoji: '🎬', name: 'clapper board' },
|
81
|
+
{ emoji: '🎨', name: 'artist palette' },
|
82
|
+
{ emoji: '🎭', name: 'performing arts' }
|
83
|
+
]
|
84
|
+
},
|
85
|
+
{
|
86
|
+
id: 'travel',
|
87
|
+
name: "Travel",
|
88
|
+
icon: '✈️',
|
89
|
+
emojis: [
|
90
|
+
{ emoji: '🚗', name: 'automobile' },
|
91
|
+
{ emoji: '✈️', name: 'airplane' },
|
92
|
+
{ emoji: '🚲', name: 'bicycle' },
|
93
|
+
{ emoji: '⛵', name: 'sailboat' },
|
94
|
+
{ emoji: '🏖️', name: 'beach' },
|
95
|
+
{ emoji: '🗽', name: 'Statue of Liberty' }
|
96
|
+
]
|
97
|
+
},
|
98
|
+
{
|
99
|
+
id: 'symbols',
|
100
|
+
name: "Symbols",
|
101
|
+
icon: '🔣',
|
102
|
+
emojis: [
|
103
|
+
{ emoji: '❤️', name: 'heart' },
|
104
|
+
{ emoji: '🔥', name: 'fire' },
|
105
|
+
{ emoji: '✨', name: 'sparkles' },
|
106
|
+
{ emoji: '💯', name: 'hundred' },
|
107
|
+
{ emoji: '⭐', name: 'star' },
|
108
|
+
{ emoji: '💪', name: 'flex' }
|
109
|
+
]
|
110
|
+
}
|
111
|
+
]
|
112
|
+
|
113
|
+
const TextInputEmojiPicker = (props) => {
|
114
|
+
const [inputText, setInputText] = useState('')
|
115
|
+
const [showPicker, setShowPicker] = useState(false)
|
116
|
+
const [activeCategory, setActiveCategory] = useState('smileys')
|
117
|
+
const [searchQuery, setSearchQuery] = useState('')
|
118
|
+
const [filteredEmojis, setFilteredEmojis] = useState([])
|
119
|
+
const [recentEmojis, setRecentEmojis] = useState([
|
120
|
+
{ emoji: '😀', name: 'happy' },
|
121
|
+
{ emoji: '👍', name: 'thumbs up' },
|
122
|
+
{ emoji: '🎉', name: 'popper' },
|
123
|
+
{ emoji: '❤️', name: 'heart' },
|
124
|
+
{ emoji: '🔥', name: 'fire' },
|
125
|
+
{ emoji: '✨', name: 'sparkles' }
|
126
|
+
])
|
127
|
+
|
128
|
+
// Handle emoji selection
|
129
|
+
const handleEmojiClick = (emojiObj) => {
|
130
|
+
setInputText(prevInput => prevInput + emojiObj.emoji)
|
131
|
+
|
132
|
+
// Add to recent emojis
|
133
|
+
if (!recentEmojis.some(item => item.emoji === emojiObj.emoji)) {
|
134
|
+
const updatedRecent = [emojiObj, ...recentEmojis.slice(0, 5)]
|
135
|
+
setRecentEmojis(updatedRecent)
|
136
|
+
|
137
|
+
// Update the recent category
|
138
|
+
const recentCategory = emojiCategories.find(cat => cat.id === 'recent')
|
139
|
+
if (recentCategory) {
|
140
|
+
recentCategory.emojis = updatedRecent
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
// Uncomment to close picker after selection
|
145
|
+
// setShowPicker(false)
|
146
|
+
}
|
147
|
+
|
148
|
+
// Handle search
|
149
|
+
useEffect(() => {
|
150
|
+
if (searchQuery.trim() === '') {
|
151
|
+
setFilteredEmojis([])
|
152
|
+
return
|
153
|
+
}
|
154
|
+
|
155
|
+
// Collect all emojis and filter based on search
|
156
|
+
const allEmojis = emojiCategories.flatMap(category =>
|
157
|
+
category.emojis.map(emojiObj => ({
|
158
|
+
...emojiObj,
|
159
|
+
categoryName: category.name
|
160
|
+
}))
|
161
|
+
)
|
162
|
+
|
163
|
+
// Search by emoji name or category
|
164
|
+
const filtered = allEmojis.filter(item =>
|
165
|
+
item.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
|
166
|
+
item.categoryName.toLowerCase().includes(searchQuery.toLowerCase())
|
167
|
+
)
|
168
|
+
|
169
|
+
setFilteredEmojis(filtered)
|
170
|
+
}, [searchQuery])
|
171
|
+
|
172
|
+
return (
|
173
|
+
<div className="emoji-container">
|
174
|
+
<div className="input-wrapper">
|
175
|
+
<TextInput
|
176
|
+
id="emoji-text-input"
|
177
|
+
name="emojiPicker"
|
178
|
+
onChange={(e) => setInputText(e.target.value)}
|
179
|
+
placeholder="Enter some emojis here"
|
180
|
+
value={inputText}
|
181
|
+
{...props}
|
182
|
+
/>
|
183
|
+
<Button
|
184
|
+
className="emoji-toggle-button"
|
185
|
+
marginRight="lg"
|
186
|
+
onClick={() => setShowPicker(!showPicker)}
|
187
|
+
variant="link"
|
188
|
+
>
|
189
|
+
😊
|
190
|
+
</Button>
|
191
|
+
</div>
|
192
|
+
|
193
|
+
{showPicker && (
|
194
|
+
<div className="picker-wrapper">
|
195
|
+
{/* Search Bar */}
|
196
|
+
<TextInput
|
197
|
+
onChange={(e) => setSearchQuery(e.target.value)}
|
198
|
+
placeholder="Search emojis..."
|
199
|
+
type="text"
|
200
|
+
value={searchQuery}
|
201
|
+
{...props}
|
202
|
+
/>
|
203
|
+
|
204
|
+
{/* Category Navigation */}
|
205
|
+
<div className="category-nav">
|
206
|
+
{emojiCategories.map(category => (
|
207
|
+
<button
|
208
|
+
className={`category-button ${activeCategory === category.id ? 'active' : ''}`}
|
209
|
+
key={category.id}
|
210
|
+
onClick={() => {
|
211
|
+
setActiveCategory(category.id)
|
212
|
+
setSearchQuery('')
|
213
|
+
document.getElementById(`category-${category.id}`)?.scrollIntoView({ behavior: 'smooth' })
|
214
|
+
}}
|
215
|
+
title={category.name}
|
216
|
+
>
|
217
|
+
{category.icon}
|
218
|
+
</button>
|
219
|
+
))}
|
220
|
+
</div>
|
221
|
+
|
222
|
+
{/* Emoji Content */}
|
223
|
+
<div className="emoji-content">
|
224
|
+
{searchQuery.trim() !== '' ? (
|
225
|
+
// Search Results
|
226
|
+
<div className="search-results">
|
227
|
+
<div className="category-title">Search Results</div>
|
228
|
+
{filteredEmojis.length > 0 ? (
|
229
|
+
<div className="emoji-grid">
|
230
|
+
{filteredEmojis.map((item, index) => (
|
231
|
+
<Button
|
232
|
+
className="emoji-button"
|
233
|
+
key={`search-${index}`}
|
234
|
+
onClick={() => handleEmojiClick(item)}
|
235
|
+
title={item.name}
|
236
|
+
variant="link"
|
237
|
+
>
|
238
|
+
{item.emoji}
|
239
|
+
</Button>
|
240
|
+
))}
|
241
|
+
</div>
|
242
|
+
) : (
|
243
|
+
<div className="no-results">No emojis found</div>
|
244
|
+
)}
|
245
|
+
</div>
|
246
|
+
) : (
|
247
|
+
// All Categories
|
248
|
+
<div className="all-categories">
|
249
|
+
{emojiCategories.map(category => (
|
250
|
+
<div
|
251
|
+
className="category-section"
|
252
|
+
id={`category-${category.id}`}
|
253
|
+
key={category.id}
|
254
|
+
>
|
255
|
+
<div className="category-title">
|
256
|
+
{category.name}
|
257
|
+
</div>
|
258
|
+
<div className="emoji-grid">
|
259
|
+
{category.emojis.map((emojiObj, index) => (
|
260
|
+
<Button
|
261
|
+
className="emoji-button"
|
262
|
+
key={`${category.id}-${index}`}
|
263
|
+
onClick={() => handleEmojiClick(emojiObj)}
|
264
|
+
title={emojiObj.name}
|
265
|
+
variant="link"
|
266
|
+
>
|
267
|
+
{emojiObj.emoji}
|
268
|
+
</Button>
|
269
|
+
))}
|
270
|
+
</div>
|
271
|
+
</div>
|
272
|
+
))}
|
273
|
+
</div>
|
274
|
+
)}
|
275
|
+
</div>
|
276
|
+
</div>
|
277
|
+
)}
|
278
|
+
|
279
|
+
<style jsx>{`
|
280
|
+
.emoji-container {
|
281
|
+
font-family: Arial, sans-serif;
|
282
|
+
max-width: 500px;
|
283
|
+
position: relative;
|
284
|
+
}
|
285
|
+
|
286
|
+
.input-wrapper {
|
287
|
+
display: flex;
|
288
|
+
margin-bottom: 10px;
|
289
|
+
position: relative;
|
290
|
+
}
|
291
|
+
|
292
|
+
.picker-wrapper {
|
293
|
+
position: absolute;
|
294
|
+
z-index: 100;
|
295
|
+
margin-top: 5px;
|
296
|
+
background: white;
|
297
|
+
border: 1px solid #ddd;
|
298
|
+
border-radius: 8px;
|
299
|
+
padding: 12px;
|
300
|
+
box-shadow: 0 2px 15px rgba(0,0,0,0.1);
|
301
|
+
width: 320px;
|
302
|
+
}
|
303
|
+
|
304
|
+
.search-container {
|
305
|
+
margin-bottom: 12px;
|
306
|
+
}
|
307
|
+
|
308
|
+
.category-nav {
|
309
|
+
display: flex;
|
310
|
+
overflow-x: auto;
|
311
|
+
padding-bottom: 8px;
|
312
|
+
margin-bottom: 12px;
|
313
|
+
border-bottom: 1px solid #eee;
|
314
|
+
}
|
315
|
+
|
316
|
+
.category-button {
|
317
|
+
background: none;
|
318
|
+
border: none;
|
319
|
+
font-size: 18px;
|
320
|
+
padding: 8px;
|
321
|
+
cursor: pointer;
|
322
|
+
margin-right: 4px;
|
323
|
+
border-radius: 4px;
|
324
|
+
min-width: 36px;
|
325
|
+
}
|
326
|
+
|
327
|
+
.category-button.active {
|
328
|
+
background-color: #f0f0f0;
|
329
|
+
}
|
330
|
+
|
331
|
+
.emoji-content {
|
332
|
+
max-height: 300px;
|
333
|
+
overflow-y: auto;
|
334
|
+
scroll-behavior: smooth;
|
335
|
+
}
|
336
|
+
|
337
|
+
.all-categories {
|
338
|
+
display: flex;
|
339
|
+
flex-direction: column;
|
340
|
+
gap: 16px;
|
341
|
+
}
|
342
|
+
|
343
|
+
.category-section {
|
344
|
+
padding-top: 8px;
|
345
|
+
scroll-margin-top: 8px;
|
346
|
+
}
|
347
|
+
|
348
|
+
.category-title {
|
349
|
+
font-weight: bold;
|
350
|
+
margin-bottom: 8px;
|
351
|
+
color: #555;
|
352
|
+
font-size: 14px;
|
353
|
+
}
|
354
|
+
|
355
|
+
.emoji-grid {
|
356
|
+
display: grid;
|
357
|
+
grid-template-columns: repeat(6, 1fr);
|
358
|
+
gap: 2px;
|
359
|
+
}
|
360
|
+
|
361
|
+
.no-results {
|
362
|
+
padding: 20px;
|
363
|
+
text-align: center;
|
364
|
+
color: #999;
|
365
|
+
}
|
366
|
+
`}</style>
|
367
|
+
</div>
|
368
|
+
);
|
369
|
+
};
|
370
|
+
|
371
|
+
export default TextInputEmojiPicker
|
@@ -6,3 +6,4 @@ export { default as TextInputAddOn } from './_text_input_add_on.jsx'
|
|
6
6
|
export { default as TextInputInline } from './_text_input_inline.jsx'
|
7
7
|
export { default as TextInputNoLabel } from './_text_input_no_label.jsx'
|
8
8
|
export { default as TextInputMask } from './_text_input_mask.jsx'
|
9
|
+
export { default as TextInputEmojiPicker } from './_text_input_emoji_picker.jsx'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%
|
2
|
+
options = [
|
3
|
+
{ label: 'Orange', value: '#FFA500' },
|
4
|
+
{ label: 'Red', value: '#FF0000' },
|
5
|
+
{ label: 'Green', value: '#00FF00' },
|
6
|
+
{ label: 'Blue', value: '#0000FF' },
|
7
|
+
]
|
8
|
+
%>
|
9
|
+
|
10
|
+
<%= pb_rails("typeahead", props: {
|
11
|
+
id: "typeahead-disabled",
|
12
|
+
disabled: true,
|
13
|
+
placeholder: "All Colors",
|
14
|
+
options: options,
|
15
|
+
label: "Colors",
|
16
|
+
name: :foo,
|
17
|
+
is_multi: false
|
18
|
+
})
|
19
|
+
%>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
|
3
|
+
import Typeahead from '../_typeahead'
|
4
|
+
|
5
|
+
const options = [
|
6
|
+
{ label: 'Orange', value: '#FFA500' },
|
7
|
+
{ label: 'Red', value: '#FF0000' },
|
8
|
+
{ label: 'Green', value: '#00FF00' },
|
9
|
+
{ label: 'Blue', value: '#0000FF' },
|
10
|
+
]
|
11
|
+
|
12
|
+
const TypeaheadDisabled = (props) => {
|
13
|
+
return (
|
14
|
+
<Typeahead
|
15
|
+
disabled
|
16
|
+
label="Colors"
|
17
|
+
options={options}
|
18
|
+
{...props}
|
19
|
+
/>
|
20
|
+
)
|
21
|
+
}
|
22
|
+
|
23
|
+
export default TypeaheadDisabled
|
@@ -18,18 +18,18 @@ const USERS = [
|
|
18
18
|
territory: "PHL",
|
19
19
|
},
|
20
20
|
{
|
21
|
-
name: "
|
22
|
-
title: "
|
21
|
+
name: "Carlos Lima",
|
22
|
+
title: "Nitro Developer",
|
23
23
|
territory: "PHL",
|
24
24
|
},
|
25
25
|
{
|
26
26
|
name: "Stephen Marshall",
|
27
|
-
title: "Senior
|
27
|
+
title: "Senior Nitro Developer",
|
28
28
|
territory: "PHL",
|
29
29
|
},
|
30
30
|
{
|
31
31
|
name: "Jasper Furniss",
|
32
|
-
title: "
|
32
|
+
title: "Lead User Experience Engineer",
|
33
33
|
territory: "PHL",
|
34
34
|
},
|
35
35
|
];
|
@@ -14,6 +14,7 @@ examples:
|
|
14
14
|
- typeahead_truncated_text: Truncated Text
|
15
15
|
- typeahead_dynamic_options: Dynamic Options
|
16
16
|
- typeahead_dynamic_options_pure_rails: Dynamic Options (Pure Rails)
|
17
|
+
- typeahead_disabled: Disabled
|
17
18
|
|
18
19
|
react:
|
19
20
|
- typeahead_default: Default
|
@@ -32,3 +33,4 @@ examples:
|
|
32
33
|
- typeahead_margin_bottom: Margin Bottom
|
33
34
|
- typeahead_with_pills_color: With Pills (Custom Color)
|
34
35
|
- typeahead_truncated_text: Truncated Text
|
36
|
+
- typeahead_disabled: Disabled
|
@@ -14,3 +14,4 @@ export { default as TypeaheadMarginBottom } from './_typeahead_margin_bottom.jsx
|
|
14
14
|
export { default as TypeaheadWithPillsColor } from './_typeahead_with_pills_color.jsx'
|
15
15
|
export { default as TypeaheadTruncatedText } from './_typeahead_truncated_text.jsx'
|
16
16
|
export { default as TypeaheadReactHook } from './_typeahead_react_hook.jsx'
|
17
|
+
export { default as TypeaheadDisabled } from './_typeahead_disabled.jsx'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<div class="pb--doc-demo-row">
|
2
|
+
<%= pb_rails("user", props: {
|
3
|
+
align: "left",
|
4
|
+
avatar_url: "https://randomuser.me/api/portraits/women/44.jpg",
|
5
|
+
name: "Anna Black",
|
6
|
+
name_style: "body",
|
7
|
+
orientation: "horizontal",
|
8
|
+
size: "md",
|
9
|
+
territory: "PHL",
|
10
|
+
title: "Remodeling Consultant"
|
11
|
+
}) %>
|
12
|
+
<%= pb_rails("user", props: {
|
13
|
+
align: "left",
|
14
|
+
avatar_url: "https://randomuser.me/api/portraits/women/44.jpg",
|
15
|
+
name: "Anna Black",
|
16
|
+
name_style: "detail",
|
17
|
+
orientation: "horizontal",
|
18
|
+
size: "md",
|
19
|
+
territory: "PHL",
|
20
|
+
title: "Remodeling Consultant"
|
21
|
+
}) %>
|
22
|
+
</div>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { User } from 'playbook-ui'
|
3
|
+
|
4
|
+
const UserFontOptions = (props) => {
|
5
|
+
return (
|
6
|
+
<div>
|
7
|
+
<div className="pb--doc-demo-row">
|
8
|
+
<div>
|
9
|
+
<User
|
10
|
+
align="center"
|
11
|
+
avatarUrl="https://randomuser.me/api/portraits/women/44.jpg"
|
12
|
+
name="Anna Black"
|
13
|
+
nameStyle= "body"
|
14
|
+
orientation="horizontal"
|
15
|
+
size= "md"
|
16
|
+
territory= "PHL"
|
17
|
+
title="Remodeling Consultant"
|
18
|
+
{...props}
|
19
|
+
/>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div>
|
23
|
+
<User
|
24
|
+
align="left"
|
25
|
+
avatarUrl="https://randomuser.me/api/portraits/women/44.jpg"
|
26
|
+
name="Anna Black"
|
27
|
+
nameStyle= "detail"
|
28
|
+
orientation="horizontal"
|
29
|
+
size= "md"
|
30
|
+
territory= "PHL"
|
31
|
+
title= "Remodeling Consultant"
|
32
|
+
{...props}
|
33
|
+
/>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
)
|
38
|
+
}
|
39
|
+
|
40
|
+
export default UserFontOptions
|
@@ -0,0 +1,5 @@
|
|
1
|
+
Passing a `name_style` prop changes the type kit used for the user name. You can choose between `title`, `body`, `caption`, and `detail`. `title` is the default.
|
2
|
+
|
3
|
+
Passing a `title_style` prop changes the type kit used for the user title. You can choose between `body`, `caption`, and `detail`. `body` is the default.
|
4
|
+
|
5
|
+
The size of the `caption` is determined by the `size` prop.
|
@@ -0,0 +1,5 @@
|
|
1
|
+
Passing a `nameStyle` prop changes the type kit used for the user name. You can choose between `title`, `body`, `caption`, and `detail`. `title` is the default.
|
2
|
+
|
3
|
+
Passing a `titleStyle` prop changes the type kit used for the user title. You can choose between `body`, `caption`, and `detail`. `body` is the default.
|
4
|
+
|
5
|
+
The size of the `caption` is determined by the `size` prop.
|
@@ -9,6 +9,7 @@ examples:
|
|
9
9
|
- user_vertical_size: Vertical Size
|
10
10
|
- user_subtitle: Subtitle
|
11
11
|
- user_block_content_subtitle_rails: Block Content Subtitle
|
12
|
+
- user_font_options: Font Options
|
12
13
|
|
13
14
|
react:
|
14
15
|
- user_default: Default
|
@@ -19,6 +20,7 @@ examples:
|
|
19
20
|
- user_vertical_size: Vertical Size
|
20
21
|
- user_subtitle: Subtitle
|
21
22
|
- user_block_content_subtitle_react: Block Content Subtitle
|
23
|
+
- user_font_options: Font Options
|
22
24
|
|
23
25
|
swift:
|
24
26
|
- user_horizontal_swift: Horizontal
|
@@ -6,3 +6,4 @@ export { default as UserSize } from './_user_size.jsx'
|
|
6
6
|
export { default as UserVerticalSize } from './_user_vertical_size.jsx'
|
7
7
|
export { default as UserSubtitle } from './_user_subtitle.jsx'
|
8
8
|
export { default as UserBlockContentSubtitleReact } from './_user_block_content_subtitle_react.jsx'
|
9
|
+
export { default as UserFontOptions } from './_user_font_options.jsx'
|