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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_currency/_currency.tsx +3 -1
  3. data/app/pb_kits/playbook/pb_currency/kit.schema.json +1 -0
  4. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.tsx +3 -1
  5. data/app/pb_kits/playbook/pb_dashboard_value/kit.schema.json +1 -0
  6. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_highlight.jsx +101 -0
  7. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_highlight.md +3 -0
  8. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +1 -0
  9. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -1
  10. data/app/pb_kits/playbook/pb_form/docs/_description_react.md +3 -0
  11. data/app/pb_kits/playbook/pb_form/docs/_form_default_values.jsx +898 -0
  12. data/app/pb_kits/playbook/pb_form/docs/_form_default_values_react.md +3 -0
  13. data/app/pb_kits/playbook/pb_form/docs/_form_defaults.jsx +879 -0
  14. data/app/pb_kits/playbook/pb_form/docs/_form_defaults_react.md +29 -0
  15. data/app/pb_kits/playbook/pb_form/docs/_form_loading.jsx +75 -0
  16. data/app/pb_kits/playbook/pb_form/docs/{_form_loading.md → _form_loading_rails.md} +1 -0
  17. data/app/pb_kits/playbook/pb_form/docs/_form_loading_react.md +1 -0
  18. data/app/pb_kits/playbook/pb_form/docs/_form_model_values.jsx +147 -0
  19. data/app/pb_kits/playbook/pb_form/docs/_form_model_values_react.md +16 -0
  20. data/app/pb_kits/playbook/pb_form/docs/_form_multi_column.jsx +164 -0
  21. data/app/pb_kits/playbook/pb_form/docs/_form_multi_column_react.md +3 -0
  22. data/app/pb_kits/playbook/pb_form/docs/_form_validation.jsx +1057 -0
  23. data/app/pb_kits/playbook/pb_form/docs/_form_validation_react.md +26 -0
  24. data/app/pb_kits/playbook/pb_form/docs/example.yml +7 -0
  25. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.tsx +3 -1
  26. data/app/pb_kits/playbook/pb_icon_stat_value/kit.schema.json +1 -0
  27. data/app/pb_kits/playbook/pb_icon_value/_icon_value.tsx +3 -1
  28. data/app/pb_kits/playbook/pb_icon_value/kit.schema.json +1 -0
  29. data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +3 -1
  30. data/app/pb_kits/playbook/pb_label_value/kit.schema.json +1 -0
  31. data/app/pb_kits/playbook/pb_legend/_legend.tsx +3 -1
  32. data/app/pb_kits/playbook/pb_legend/kit.schema.json +1 -0
  33. data/app/pb_kits/playbook/pb_message/_message.tsx +3 -1
  34. data/app/pb_kits/playbook/pb_message/kit.schema.json +1 -0
  35. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.tsx +3 -1
  36. data/app/pb_kits/playbook/pb_multiple_users/kit.schema.json +1 -0
  37. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.tsx +4 -2
  38. data/app/pb_kits/playbook/pb_multiple_users_stacked/kit.schema.json +1 -0
  39. data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.tsx +3 -1
  40. data/app/pb_kits/playbook/pb_stat_value/_stat_value.tsx +3 -1
  41. data/app/pb_kits/playbook/pb_stat_value/kit.schema.json +1 -0
  42. data/app/pb_kits/playbook/pb_timeline/_item.tsx +3 -1
  43. data/app/pb_kits/playbook/pb_title_count/_title_count.tsx +3 -1
  44. data/app/pb_kits/playbook/pb_title_count/kit.schema.json +1 -0
  45. data/app/pb_kits/playbook/pb_title_detail/_title_detail.tsx +3 -1
  46. data/app/pb_kits/playbook/pb_title_detail/kit.schema.json +1 -0
  47. data/app/pb_kits/playbook/utilities/test/globalProps/onClick.test.js +317 -0
  48. data/dist/ai/all-schemas.json +12 -0
  49. data/dist/ai/forms.json +1 -1
  50. data/dist/ai/index.json +2 -2
  51. data/dist/ai/kits/currency.schema.json +1 -0
  52. data/dist/ai/kits/dashboard_value.schema.json +1 -0
  53. data/dist/ai/kits/icon_stat_value.schema.json +1 -0
  54. data/dist/ai/kits/icon_value.schema.json +1 -0
  55. data/dist/ai/kits/label_value.schema.json +1 -0
  56. data/dist/ai/kits/legend.schema.json +1 -0
  57. data/dist/ai/kits/message.schema.json +1 -0
  58. data/dist/ai/kits/multiple_users.schema.json +1 -0
  59. data/dist/ai/kits/multiple_users_stacked.schema.json +1 -0
  60. data/dist/ai/kits/stat_value.schema.json +1 -0
  61. data/dist/ai/kits/title_count.schema.json +1 -0
  62. data/dist/ai/kits/title_detail.schema.json +1 -0
  63. data/dist/chunks/{_detail-Cy54syJC.js → _detail-Bsvl694i.js} +1 -1
  64. data/dist/chunks/_table-Bf6LGyL9.js +1 -0
  65. data/dist/chunks/{_typeahead-CXZH3KvV.js → _typeahead-w6S5Vx4b.js} +1 -1
  66. data/dist/chunks/vendor.js +2 -2
  67. data/dist/playbook-rails-react-bindings.js +1 -1
  68. data/dist/playbook-rails.js +1 -1
  69. data/lib/playbook/version.rb +2 -2
  70. metadata +27 -12
  71. data/dist/chunks/_table-BCqp1PAO.js +0 -1
  72. /data/app/pb_kits/playbook/pb_form/docs/{_description.md → _description_rails.md} +0 -0
  73. /data/app/pb_kits/playbook/pb_form/docs/{_form_default_values.md → _form_default_values_rails.md} +0 -0
  74. /data/app/pb_kits/playbook/pb_form/docs/{_form_defaults.md → _form_defaults_rails.md} +0 -0
  75. /data/app/pb_kits/playbook/pb_form/docs/{_form_model_values.md → _form_model_values_rails.md} +0 -0
  76. /data/app/pb_kits/playbook/pb_form/docs/{_form_multi_column.md → _form_multi_column_rails.md} +0 -0
  77. /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: 1c86866d416fa61cd6ef95462feacdaab4821a38f7512d171709d74ae355ca79
4
- data.tar.gz: 881dc11beb08455d597c2fef659070af84626c562597566f69fcdb773a61f5e7
3
+ metadata.gz: 88b3c7acb984d6ec746498490e23eb8d4331520919cc6c3e609e9fff446bdaa3
4
+ data.tar.gz: 2d681d215b4fb8d8c0059779981325e75289915e5ffa4df4a1a76f03c5327e3f
5
5
  SHA512:
6
- metadata.gz: 2a6e88281370f5ce11a7467aab89ed9db923a593f34748c39f43143488daa0f92b9f55b8eb9c1636c2f2c64215a3b092cdd5fbc3702315cc9612ef9cfe2327b0
7
- data.tar.gz: 398a941db88d54157eb9ca15fb952d290961fc05074a7c62ec0e6246cf315ae9d75da943f31d57b6c654d99652f32036b33c4dc1fda9bd3b2454e1cf524dae50
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
  >
@@ -137,6 +137,7 @@
137
137
  }
138
138
  },
139
139
  "globalProps": true,
140
+ "globalEventProps": true,
140
141
  "usage": {
141
142
  "react": {
142
143
  "import": "import { Currency } from 'playbook-ui'",
@@ -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
  >
@@ -43,6 +43,7 @@
43
43
  }
44
44
  },
45
45
  "globalProps": true,
46
+ "globalEventProps": true,
46
47
  "usage": {
47
48
  "react": {
48
49
  "import": "import { DashboardValue } from 'playbook-ui'",
@@ -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.