playbook_ui 4.2.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/playbook/application_controller.rb +1 -0
  3. data/app/controllers/playbook/pages_controller.rb +0 -4
  4. data/app/controllers/playbook/samples_controller.rb +40 -0
  5. data/app/helpers/playbook/pb_doc_helper.rb +7 -1
  6. data/app/helpers/playbook/pb_sample_helper.rb +19 -0
  7. data/app/helpers/playbook/redcarpet_helper.rb +1 -1
  8. data/app/pb_kits/playbook/_playbook.scss +1 -0
  9. data/app/pb_kits/playbook/config/_kit_samples_list.html.erb +3 -0
  10. data/app/pb_kits/playbook/config/_kit_ui.html.slim +9 -5
  11. data/app/pb_kits/playbook/data/menu.yml +4 -0
  12. data/app/pb_kits/playbook/index.js +2 -0
  13. data/app/pb_kits/playbook/kits/pb_flex.js +4 -0
  14. data/app/pb_kits/playbook/kits/pb_highlight.js +4 -0
  15. data/app/pb_kits/playbook/packs/examples.js +4 -0
  16. data/app/pb_kits/playbook/packs/kits/pb_highlight.js +2 -0
  17. data/app/pb_kits/playbook/packs/kits/pb_popover.js +1 -0
  18. data/app/pb_kits/playbook/packs/main.scss +3 -0
  19. data/app/pb_kits/playbook/packs/samples.js +50 -0
  20. data/app/pb_kits/playbook/packs/site_styles/_samples.scss +71 -0
  21. data/app/pb_kits/playbook/packs/site_styles/_site-style.scss +6 -0
  22. data/app/pb_kits/playbook/packs/site_styles/docs/_flex_examples.scss +11 -3
  23. data/app/pb_kits/playbook/pb_body/_body.html.erb +1 -1
  24. data/app/pb_kits/playbook/pb_body/_body.jsx +10 -1
  25. data/app/pb_kits/playbook/pb_body/body.rb +17 -1
  26. data/app/pb_kits/playbook/pb_editor/_editor.html.erb +6 -0
  27. data/app/pb_kits/playbook/pb_hashtag/_hashtag.jsx +2 -1
  28. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_dark.html.erb +4 -0
  29. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_dark.jsx +7 -0
  30. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_default.html.erb +4 -0
  31. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_default.jsx +6 -0
  32. data/app/pb_kits/playbook/pb_hashtag/hashtag.rb +3 -1
  33. data/app/pb_kits/playbook/pb_highlight/_highlight.html.erb +6 -0
  34. data/app/pb_kits/playbook/pb_highlight/_highlight.jsx +38 -0
  35. data/app/pb_kits/playbook/pb_highlight/_highlight.scss +6 -0
  36. data/app/pb_kits/playbook/pb_highlight/docs/_highlight_default.html.erb +20 -0
  37. data/app/pb_kits/playbook/pb_highlight/docs/_highlight_default.jsx +26 -0
  38. data/app/pb_kits/playbook/pb_highlight/docs/example.yml +9 -0
  39. data/app/pb_kits/playbook/pb_highlight/docs/index.js +1 -0
  40. data/app/pb_kits/playbook/pb_highlight/highlight.rb +17 -0
  41. data/app/pb_kits/playbook/pb_popover/_popover.html.erb +1 -1
  42. data/app/pb_kits/playbook/pb_popover/_popover.js +13 -22
  43. data/app/pb_kits/playbook/pb_popover/_popover.jsx +121 -0
  44. data/app/pb_kits/playbook/pb_popover/_popover.scss +4 -0
  45. data/app/pb_kits/playbook/pb_popover/docs/_popover_default.jsx +29 -0
  46. data/app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx +46 -0
  47. data/app/pb_kits/playbook/pb_popover/docs/_popover_portal.jsx +36 -0
  48. data/app/pb_kits/playbook/pb_popover/docs/_popover_with_button.jsx +35 -0
  49. data/app/pb_kits/playbook/pb_popover/docs/example.yml +4 -0
  50. data/app/pb_kits/playbook/pb_popover/docs/index.js +4 -0
  51. data/app/pb_kits/playbook/pb_popover/popover.rb +1 -1
  52. data/app/pb_kits/playbook/pb_select/_select.jsx +51 -51
  53. data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +8 -14
  54. data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +17 -15
  55. data/app/pb_kits/playbook/pb_select/docs/_select_dark_error.jsx +17 -15
  56. data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +16 -15
  57. data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +8 -14
  58. data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +31 -29
  59. data/app/pb_kits/playbook/pb_select/docs/_select_error.jsx +17 -15
  60. data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +7 -11
  61. data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +8 -14
  62. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +2 -2
  63. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +2 -2
  64. data/app/pb_kits/playbook/pb_toggle/_toggle.jsx +3 -3
  65. data/app/pb_kits/playbook/types.js +1 -1
  66. data/app/pb_kits/playbook/vendor.js +2 -2
  67. data/app/views/layouts/playbook/samples.html.erb +37 -0
  68. data/app/views/playbook/pages/kit_show.html.slim +1 -1
  69. data/app/views/playbook/pages/principles.html.slim +1 -1
  70. data/app/views/playbook/samples/dashboards/dashboards.html.erb +82 -0
  71. data/app/views/playbook/samples/dashboards/dashboards.jsx +35 -0
  72. data/app/views/playbook/samples/sample_show.html.erb +25 -0
  73. data/lib/playbook/version.rb +1 -1
  74. metadata +32 -5
  75. data/app/pb_kits/playbook/config/_kit_example.html.slim +0 -5
@@ -9,3 +9,7 @@
9
9
  }
10
10
  }
11
11
  }
12
+
13
+ .pb_popover_reference_wrapper {
14
+ display: inline-block;
15
+ }
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import {
3
+ PbReactPopover,
4
+ } from '../..'
5
+
6
+ export default class PopoverDefault extends React.Component {
7
+ state = {
8
+ showPopover: false,
9
+ }
10
+
11
+ handleTogglePopover = () => {
12
+ this.setState({ showPopover: !this.state.showPopover })
13
+ }
14
+
15
+ render() {
16
+ const popoverReference = (
17
+ <span onClick={this.handleTogglePopover}>{'Click me.'}</span>
18
+ )
19
+
20
+ return (
21
+ <PbReactPopover
22
+ reference={popoverReference}
23
+ show={this.state.showPopover}
24
+ >
25
+ {'Whoa. I\'m a popover.'}
26
+ </PbReactPopover>
27
+ )
28
+ }
29
+ }
@@ -0,0 +1,46 @@
1
+ import React from 'react'
2
+ import {
3
+ Button,
4
+ List,
5
+ ListItem,
6
+ PbReactPopover,
7
+ } from '../..'
8
+
9
+ export default class PopoverWithButton extends React.Component {
10
+ state = {
11
+ showPopover: false,
12
+ }
13
+
14
+ handleTogglePopover = () => {
15
+ this.setState({ showPopover: !this.state.showPopover })
16
+ }
17
+
18
+ render() {
19
+ const popoverReference = (
20
+ <Button
21
+ onClick={this.handleTogglePopover}
22
+ text="Button Secondary"
23
+ variant="secondary"
24
+ />
25
+ )
26
+
27
+ return (
28
+ <div style={{ height: '400px', textAlign: 'center' }}>
29
+ <PbReactPopover
30
+ offset
31
+ placement="bottom"
32
+ reference={popoverReference}
33
+ show={this.state.showPopover}
34
+ >
35
+ <List>
36
+ <ListItem>{'Popularity'}</ListItem>
37
+ <ListItem>{'Title'}</ListItem>
38
+ <ListItem>{'Duration'}</ListItem>
39
+ <ListItem>{'Date Started'}</ListItem>
40
+ <ListItem>{'Date Ended'}</ListItem>
41
+ </List>
42
+ </PbReactPopover>
43
+ </div>
44
+ )
45
+ }
46
+ }
@@ -0,0 +1,36 @@
1
+ import React from 'react'
2
+ import {
3
+ Button,
4
+ PbReactPopover,
5
+ } from '../..'
6
+
7
+ export default class PopoverPortal extends React.Component {
8
+ state = {
9
+ showPopover: false,
10
+ }
11
+
12
+ handleTogglePopover = () => {
13
+ this.setState({ showPopover: !this.state.showPopover })
14
+ }
15
+
16
+ render() {
17
+ const popoverReference = (
18
+ <Button
19
+ onClick={this.handleTogglePopover}
20
+ text="Button Secondary"
21
+ variant="secondary"
22
+ />
23
+ )
24
+
25
+ return (
26
+ <PbReactPopover
27
+ placement="bottom"
28
+ reference={popoverReference}
29
+ show={this.state.showPopover}
30
+ usePortal
31
+ >
32
+ {'Whoa. I\'m a portal popover.'}
33
+ </PbReactPopover>
34
+ )
35
+ }
36
+ }
@@ -0,0 +1,35 @@
1
+ import React from 'react'
2
+ import {
3
+ Button,
4
+ PbReactPopover,
5
+ } from '../..'
6
+
7
+ export default class PopoverWithButton extends React.Component {
8
+ state = {
9
+ showPopover: false,
10
+ }
11
+
12
+ handleTogglePopover = () => {
13
+ this.setState({ showPopover: !this.state.showPopover })
14
+ }
15
+
16
+ render() {
17
+ const popoverReference = (
18
+ <Button
19
+ onClick={this.handleTogglePopover}
20
+ text="Button Secondary"
21
+ variant="secondary"
22
+ />
23
+ )
24
+
25
+ return (
26
+ <PbReactPopover
27
+ placement="bottom"
28
+ reference={popoverReference}
29
+ show={this.state.showPopover}
30
+ >
31
+ {'Whoa. I\'m a popover.'}
32
+ </PbReactPopover>
33
+ )
34
+ }
35
+ }
@@ -5,3 +5,7 @@ examples:
5
5
  - popover_list: With any children
6
6
 
7
7
  react:
8
+ - popover_default: Default
9
+ - popover_with_button: With Button
10
+ - popover_list: With any children
11
+ - popover_portal: Use with `portal` option
@@ -0,0 +1,4 @@
1
+ export { default as PopoverDefault } from './_popover_default.jsx'
2
+ export { default as PopoverWithButton } from './_popover_with_button.jsx'
3
+ export { default as PopoverList } from './_popover_list.jsx'
4
+ export { default as PopoverPortal } from './_popover_portal.jsx'
@@ -12,7 +12,7 @@ module Playbook
12
12
  prop :offset, type: Playbook::Props::Boolean, default: false
13
13
 
14
14
  def popover_offset
15
- offset ? [0, 8] : [0, 0]
15
+ offset ? "0, 8" : "0, 0"
16
16
  end
17
17
 
18
18
  def classname
@@ -14,66 +14,65 @@ import {
14
14
  buildDataProps,
15
15
  } from '../utilities/props'
16
16
 
17
+ import type { InputCallback } from '../types'
18
+
19
+ type SelectOption = {
20
+ value: string,
21
+ text: string,
22
+ disabled?: boolean,
23
+ }
24
+
17
25
  type SelectProps = {
18
26
  aria?: object,
19
- blankSelection?: String,
20
- children?: Array<React.ReactChild>,
21
- className?: String,
22
- dark?: Boolean,
27
+ blankSelection?: string,
28
+ children?: React.Node,
29
+ className?: string,
30
+ dark?: boolean,
23
31
  data?: object,
24
- disabled?: Boolean,
25
- error?: String,
26
- onChange: PropTypes.func,
27
- options: Array<Object>,
28
- id?: String,
29
- includeBlank?: String,
30
- label?: String,
31
- multiple?: Boolean,
32
- name?: String,
33
- required?: Boolean,
34
- value?: String,
35
- }
36
-
37
- const optionsArray = ({ options = [] }: SelectProps) => {
38
- return options.map((optionObject, index) => {
39
- return (
40
- <option
41
- disabled={optionObject.disabled}
42
- key={index}
43
- selected={optionObject.selected}
44
- value={optionObject.value}
45
- >
46
- {optionObject.valueText || optionObject.value}
47
- </option>
48
- )
49
- })
32
+ disabled?: boolean,
33
+ error?: string,
34
+ onChange: InputCallback<HTMLSelectElement>,
35
+ options: SelectOption[],
36
+ id?: string,
37
+ includeBlank?: string,
38
+ label?: string,
39
+ multiple?: boolean,
40
+ name?: string,
41
+ required?: boolean,
42
+ value?: string,
50
43
  }
51
44
 
52
- const Select = (props: SelectProps) => {
53
- const {
54
- aria = {},
55
- blankSelection,
56
- children,
57
- dark = false,
58
- data = {},
59
- disabled = false,
60
- error,
61
- label,
62
- multiple = false,
63
- name,
64
- onChange = () => {},
65
- options,
66
- required = false,
67
- } = props
45
+ const createOptions = (options: SelectOption[]) => options.map((option, index) => (
46
+ <option
47
+ disabled={option.disabled}
48
+ key={index}
49
+ value={option.value}
50
+ >
51
+ {option.text || option.value}
52
+ </option>
53
+ ))
68
54
 
55
+ const Select = ({
56
+ aria = {},
57
+ blankSelection,
58
+ children,
59
+ dark = false,
60
+ data = {},
61
+ disabled = false,
62
+ error,
63
+ label,
64
+ multiple = false,
65
+ name,
66
+ onChange = () => {},
67
+ options = [],
68
+ required = false,
69
+ value,
70
+ }: SelectProps) => {
69
71
  const errorClass = error ? ' error' : ''
70
- const css = buildCss({
71
- 'pb_select': true,
72
- 'dark': dark === true,
73
- }) + errorClass
72
+ const css = buildCss('pb_select', { dark }) + errorClass
74
73
  const ariaProps = buildAriaProps(aria)
75
74
  const dataProps = buildDataProps(data)
76
- const optionsList = optionsArray({ options })
75
+ const optionsList = createOptions(options)
77
76
 
78
77
  return (
79
78
  <div
@@ -106,6 +105,7 @@ const Select = (props: SelectProps) => {
106
105
  name={name}
107
106
  onChange={onChange}
108
107
  required={required}
108
+ value={value}
109
109
  >
110
110
  <If condition={blankSelection}>
111
111
  <option value="">{blankSelection}</option>
@@ -2,26 +2,20 @@ import React from 'react'
2
2
  import { Select } from '../../'
3
3
 
4
4
  const SelectBlank = () => {
5
+ const options = [
6
+ { value: 'USA' },
7
+ { value: 'Canada' },
8
+ { value: 'Brazil' },
9
+ { value: 'Philippines' },
10
+ ]
11
+
5
12
  return (
6
13
  <div>
7
14
  <Select
8
15
  blankSelection="Select One..."
9
16
  label="Where do you live"
10
17
  name="location"
11
- options={[
12
- {
13
- value: 'USA',
14
- },
15
- {
16
- value: 'Canada',
17
- },
18
- {
19
- value: 'Brazil',
20
- },
21
- {
22
- value: 'Philippines',
23
- },
24
- ]}
18
+ options={options}
25
19
  />
26
20
  </div>
27
21
  )
@@ -2,27 +2,29 @@ import React from 'react'
2
2
  import { Select } from '../../'
3
3
 
4
4
  const SelectDark = () => {
5
+ const options = [
6
+ {
7
+ value: '1',
8
+ text: 'Burgers',
9
+ },
10
+ {
11
+ value: '2',
12
+ text: 'Pizza',
13
+ },
14
+ {
15
+ value: '3',
16
+ text: 'Tacos',
17
+ },
18
+ ]
19
+
5
20
  return (
6
21
  <div>
7
22
  <Select
8
23
  dark
9
24
  label="Favorite Food"
10
25
  name="food"
11
- options={[
12
- {
13
- value: '1',
14
- valueText: 'Burgers',
15
- },
16
- {
17
- value: '2',
18
- selected: true,
19
- valueText: 'Pizza',
20
- },
21
- {
22
- value: '3',
23
- valueText: 'Tacos',
24
- },
25
- ]}
26
+ options={options}
27
+ value="2"
26
28
  />
27
29
  </div>
28
30
  )
@@ -2,6 +2,21 @@ import React from 'react'
2
2
  import { Body, Select } from '../..'
3
3
 
4
4
  const SelectDarkError = () => {
5
+ const options = [
6
+ {
7
+ value: '1',
8
+ text: 'Burgers',
9
+ },
10
+ {
11
+ value: '2',
12
+ text: 'Pizza',
13
+ },
14
+ {
15
+ value: '3',
16
+ text: 'Tacos',
17
+ },
18
+ ]
19
+
5
20
  return (
6
21
  <div>
7
22
  <Select
@@ -9,21 +24,8 @@ const SelectDarkError = () => {
9
24
  error="Please make a valid selection"
10
25
  label="Favorite Food"
11
26
  name="food"
12
- options={[
13
- {
14
- value: '1',
15
- valueText: 'Burgers',
16
- },
17
- {
18
- value: '2',
19
- selected: true,
20
- valueText: 'Pizza',
21
- },
22
- {
23
- value: '3',
24
- valueText: 'Tacos',
25
- },
26
- ]}
27
+ options={options}
28
+ value="2"
27
29
  />
28
30
  <Body
29
31
  dark
@@ -2,26 +2,27 @@ import React from 'react'
2
2
  import { Select } from '../../'
3
3
 
4
4
  const SelectDefault = () => {
5
+ const options = [
6
+ {
7
+ value: '1',
8
+ text: 'Burgers',
9
+ },
10
+ {
11
+ value: '2',
12
+ text: 'Pizza',
13
+ },
14
+ {
15
+ value: '3',
16
+ text: 'Tacos',
17
+ },
18
+ ]
19
+
5
20
  return (
6
21
  <div>
7
22
  <Select
8
23
  label="Favorite Food"
9
24
  name="food"
10
- options={[
11
- {
12
- value: '1',
13
- valueText: 'Burgers',
14
- },
15
- {
16
- value: '2',
17
- selected: true,
18
- valueText: 'Pizza',
19
- },
20
- {
21
- value: '3',
22
- valueText: 'Tacos',
23
- },
24
- ]}
25
+ options={options}
25
26
  />
26
27
  </div>
27
28
  )