playbook_ui 18.2.0.pre.rc.3 → 18.3.0.pre.rc.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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_currency/_currency.tsx +3 -1
- data/app/pb_kits/playbook/pb_currency/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.tsx +3 -1
- data/app/pb_kits/playbook/pb_dashboard_value/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_highlight.jsx +101 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_highlight.md +3 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_form/docs/_description_react.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_default_values.jsx +898 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_default_values_react.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_defaults.jsx +879 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_defaults_react.md +29 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_loading.jsx +75 -0
- data/app/pb_kits/playbook/pb_form/docs/{_form_loading.md → _form_loading_rails.md} +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_loading_react.md +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_model_values.jsx +147 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_model_values_react.md +16 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_multi_column.jsx +164 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_multi_column_react.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_validation.jsx +1057 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_validation_react.md +26 -0
- data/app/pb_kits/playbook/pb_form/docs/example.yml +7 -0
- data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.tsx +3 -1
- data/app/pb_kits/playbook/pb_icon_stat_value/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_icon_value/_icon_value.tsx +3 -1
- data/app/pb_kits/playbook/pb_icon_value/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +3 -1
- data/app/pb_kits/playbook/pb_label_value/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_legend/_legend.tsx +3 -1
- data/app/pb_kits/playbook/pb_legend/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_message/_message.tsx +3 -1
- data/app/pb_kits/playbook/pb_message/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.tsx +3 -1
- data/app/pb_kits/playbook/pb_multiple_users/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.tsx +4 -2
- data/app/pb_kits/playbook/pb_multiple_users_stacked/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.tsx +3 -1
- data/app/pb_kits/playbook/pb_stat_value/_stat_value.tsx +3 -1
- data/app/pb_kits/playbook/pb_stat_value/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_timeline/_item.tsx +3 -1
- data/app/pb_kits/playbook/pb_title_count/_title_count.tsx +3 -1
- data/app/pb_kits/playbook/pb_title_count/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_title_detail/_title_detail.tsx +3 -1
- data/app/pb_kits/playbook/pb_title_detail/kit.schema.json +1 -0
- data/app/pb_kits/playbook/utilities/test/globalProps/onClick.test.js +317 -0
- data/dist/ai/all-schemas.json +12 -0
- data/dist/ai/forms.json +1 -1
- data/dist/ai/index.json +2 -2
- data/dist/ai/kits/currency.schema.json +1 -0
- data/dist/ai/kits/dashboard_value.schema.json +1 -0
- data/dist/ai/kits/icon_stat_value.schema.json +1 -0
- data/dist/ai/kits/icon_value.schema.json +1 -0
- data/dist/ai/kits/label_value.schema.json +1 -0
- data/dist/ai/kits/legend.schema.json +1 -0
- data/dist/ai/kits/message.schema.json +1 -0
- data/dist/ai/kits/multiple_users.schema.json +1 -0
- data/dist/ai/kits/multiple_users_stacked.schema.json +1 -0
- data/dist/ai/kits/stat_value.schema.json +1 -0
- data/dist/ai/kits/title_count.schema.json +1 -0
- data/dist/ai/kits/title_detail.schema.json +1 -0
- data/dist/chunks/{_detail-Cy54syJC.js → _detail-Bsvl694i.js} +1 -1
- data/dist/chunks/_table-Bf6LGyL9.js +1 -0
- data/dist/chunks/{_typeahead-CXZH3KvV.js → _typeahead-w6S5Vx4b.js} +1 -1
- data/dist/chunks/vendor.js +2 -2
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/lib/playbook/version.rb +2 -2
- metadata +27 -12
- data/dist/chunks/_table-BCqp1PAO.js +0 -1
- /data/app/pb_kits/playbook/pb_form/docs/{_description.md → _description_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_default_values.md → _form_default_values_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_defaults.md → _form_defaults_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_model_values.md → _form_model_values_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_multi_column.md → _form_multi_column_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_validation.md → _form_validation_rails.md} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 88b3c7acb984d6ec746498490e23eb8d4331520919cc6c3e609e9fff446bdaa3
|
|
4
|
+
data.tar.gz: 2d681d215b4fb8d8c0059779981325e75289915e5ffa4df4a1a76f03c5327e3f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ba772fd2326b5e74beabc4a8a36d99b3e85abaf3fdfa961b0768e59f5742b22fab17b994a53e32ce914d952f332d0ac430af15dd06f5b7f2a09beba8fa9881ea
|
|
7
|
+
data.tar.gz: f687567b001ed365e906da885b8528d2baf542e4e0f752ee98e7dc3a87d48f4e9b2e563d302afbb843a558eadd7bc50f7763bf1bc2a703f7b16d347b51c7123b
|
|
@@ -2,6 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import classnames from 'classnames'
|
|
3
3
|
|
|
4
4
|
import { globalProps } from '../utilities/globalProps'
|
|
5
|
+
import { GlobalEventProps, globalEventProps } from '../utilities/globalEventProps'
|
|
5
6
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
|
6
7
|
|
|
7
8
|
import Body from '../pb_body/_body'
|
|
@@ -28,7 +29,7 @@ type CurrencyProps = {
|
|
|
28
29
|
unit?: string,
|
|
29
30
|
unstyled?: boolean,
|
|
30
31
|
commaSeparator?: boolean,
|
|
31
|
-
}
|
|
32
|
+
} & GlobalEventProps
|
|
32
33
|
|
|
33
34
|
const sizes: {lg: 1, md: 3, sm: 4} = {
|
|
34
35
|
lg: 1,
|
|
@@ -132,6 +133,7 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
|
|
|
132
133
|
{...ariaProps}
|
|
133
134
|
{...dataProps}
|
|
134
135
|
{...htmlProps}
|
|
136
|
+
{...globalEventProps(props)}
|
|
135
137
|
className={classes}
|
|
136
138
|
id={id}
|
|
137
139
|
>
|
|
@@ -2,6 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import classnames from 'classnames'
|
|
3
3
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
|
4
4
|
import { globalProps } from '../utilities/globalProps'
|
|
5
|
+
import { GlobalEventProps, globalEventProps } from '../utilities/globalEventProps'
|
|
5
6
|
|
|
6
7
|
import Body from '../pb_body/_body'
|
|
7
8
|
import StatChange from '../pb_stat_change/_stat_change'
|
|
@@ -23,7 +24,7 @@ type DashboardValueProps = {
|
|
|
23
24
|
unit?: string,
|
|
24
25
|
value?: string | number
|
|
25
26
|
}
|
|
26
|
-
}
|
|
27
|
+
} & GlobalEventProps
|
|
27
28
|
|
|
28
29
|
const DashboardValue = (props: DashboardValueProps): React.ReactElement => {
|
|
29
30
|
const {
|
|
@@ -52,6 +53,7 @@ const DashboardValue = (props: DashboardValueProps): React.ReactElement => {
|
|
|
52
53
|
{...ariaProps}
|
|
53
54
|
{...dataProps}
|
|
54
55
|
{...htmlProps}
|
|
56
|
+
{...globalEventProps(props)}
|
|
55
57
|
className={classes}
|
|
56
58
|
id={id}
|
|
57
59
|
>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import Avatar from '../../pb_avatar/_avatar'
|
|
4
|
+
import Body from '../../pb_body/_body'
|
|
5
|
+
import Dropdown from '../../pb_dropdown/_dropdown'
|
|
6
|
+
import Flex from '../../pb_flex/_flex'
|
|
7
|
+
import FlexItem from '../../pb_flex/_flex_item'
|
|
8
|
+
import Title from '../../pb_title/_title'
|
|
9
|
+
|
|
10
|
+
const USERS = [
|
|
11
|
+
{
|
|
12
|
+
label: "Wade Winningham",
|
|
13
|
+
title: "Nitro Principal Developer",
|
|
14
|
+
territory: "PHL",
|
|
15
|
+
value: "wadeWinningham",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
label: "Carlos Lima",
|
|
19
|
+
title: "Nitro Developer",
|
|
20
|
+
territory: "PHL",
|
|
21
|
+
value: "carlosLima",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
label: "Stephen Marshall",
|
|
25
|
+
title: "Senior Nitro Developer",
|
|
26
|
+
territory: "PHL",
|
|
27
|
+
value: "stephenMarshall",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
label: "Jasper Furniss",
|
|
31
|
+
title: "Lead User Experience Engineer",
|
|
32
|
+
territory: "PHL",
|
|
33
|
+
value: "jasperFurniss",
|
|
34
|
+
},
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
const escapeRegExp = (value = "") => (
|
|
38
|
+
value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
const highlighted = (text, searchInput) => {
|
|
42
|
+
if (!searchInput) return text
|
|
43
|
+
|
|
44
|
+
const regex = new RegExp(`(${escapeRegExp(searchInput)})`, 'gi')
|
|
45
|
+
|
|
46
|
+
return text.split(regex).map((part, index) => (
|
|
47
|
+
part.toLowerCase() === searchInput.toLowerCase()
|
|
48
|
+
? <mark key={`${part}-${index}`}>{part}</mark>
|
|
49
|
+
: <React.Fragment key={`${part}-${index}`}>{part}</React.Fragment>
|
|
50
|
+
))
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const loadUsers = (searchInput) => {
|
|
54
|
+
const normalizedInput = searchInput.toLowerCase()
|
|
55
|
+
|
|
56
|
+
return Promise.resolve(USERS.filter(({ label, title }) => (
|
|
57
|
+
`${label} ${title}`.toLowerCase().includes(normalizedInput)
|
|
58
|
+
)))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const DropdownWithHighlight = (props) => {
|
|
62
|
+
const [searchInput, setSearchInput] = useState("")
|
|
63
|
+
|
|
64
|
+
const renderUser = ({ label, territory, title }) => (
|
|
65
|
+
<Flex>
|
|
66
|
+
<FlexItem>
|
|
67
|
+
<Avatar
|
|
68
|
+
marginRight="sm"
|
|
69
|
+
name={label}
|
|
70
|
+
size="sm"
|
|
71
|
+
/>
|
|
72
|
+
</FlexItem>
|
|
73
|
+
<FlexItem>
|
|
74
|
+
<Title size={4}>
|
|
75
|
+
{highlighted(label, searchInput)}
|
|
76
|
+
</Title>
|
|
77
|
+
<Body color="light">
|
|
78
|
+
{highlighted(title, searchInput)}{" • "}
|
|
79
|
+
{territory}
|
|
80
|
+
</Body>
|
|
81
|
+
</FlexItem>
|
|
82
|
+
</Flex>
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<Dropdown
|
|
87
|
+
async
|
|
88
|
+
autocomplete
|
|
89
|
+
defaultOptions={USERS}
|
|
90
|
+
label="Users"
|
|
91
|
+
loadOptions={loadUsers}
|
|
92
|
+
onInputChange={(input) => setSearchInput(input)}
|
|
93
|
+
onSelect={() => setSearchInput("")}
|
|
94
|
+
placeholder="Search users"
|
|
95
|
+
renderOption={renderUser}
|
|
96
|
+
{...props}
|
|
97
|
+
/>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default DropdownWithHighlight
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Use `onInputChange` to track the current search and `renderOption` to customize each option row. Split each field by the search input, then render matching text inside `<mark>` so users can quickly see why a result matched.
|
|
2
|
+
|
|
3
|
+
This example uses `loadOptions` to search both the user's name and title.
|
|
@@ -51,6 +51,7 @@ examples:
|
|
|
51
51
|
react:
|
|
52
52
|
- dropdown_default: Default
|
|
53
53
|
- dropdown_with_autocomplete: Autocomplete
|
|
54
|
+
- dropdown_with_highlight: With Highlight
|
|
54
55
|
- dropdown_multi_select: Multi Select
|
|
55
56
|
- dropdown_multi_select_with_autocomplete: Multi Select with Autocomplete
|
|
56
57
|
- dropdown_multi_select_display: Multi Select with Form Pill Props
|
|
@@ -47,4 +47,5 @@ export { default as DropdownAsyncMultiSelect } from './_dropdown_async_multi_sel
|
|
|
47
47
|
export { default as DropdownAsyncRichResults } from './_dropdown_async_rich_results.jsx'
|
|
48
48
|
export { default as DropdownAsyncInitialOptions } from './_dropdown_async_initial_options.jsx'
|
|
49
49
|
export { default as DropdownExternalSearch } from './_dropdown_external_search.jsx'
|
|
50
|
-
export { default as DropdownQuickpickEnableTime } from './_dropdown_quickpick_enable_time.jsx'
|
|
50
|
+
export { default as DropdownQuickpickEnableTime } from './_dropdown_quickpick_enable_time.jsx'
|
|
51
|
+
export { default as DropdownWithHighlight } from './_dropdown_with_highlight.jsx'
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Use `Controller` to build React forms with Playbook kits and [react-hook-form](https://react-hook-form.com/). It keeps every field's binding consistent, and it's required for kits that don't forward a ref to a native element or whose `onChange` sends a value instead of a DOM event.
|
|
2
|
+
|
|
3
|
+
Pick an input below to see Defaults, Validation, Default Values, and Multi-Column layout patterns one field at a time.
|