playbook_ui 5.2.0 → 5.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -1
  3. data/app/pb_kits/playbook/data/menu.yml +1 -0
  4. data/app/pb_kits/playbook/packs/samples.js +2 -0
  5. data/app/pb_kits/playbook/packs/site_styles/docs/_all.scss +1 -0
  6. data/app/pb_kits/playbook/packs/site_styles/docs/_bg_light_doc_example.scss +7 -0
  7. data/app/pb_kits/playbook/pb_badge/_badge.html.erb +1 -0
  8. data/app/pb_kits/playbook/pb_badge/_badge.jsx +17 -4
  9. data/app/pb_kits/playbook/pb_body/_body.html.erb +1 -0
  10. data/app/pb_kits/playbook/pb_body/_body.jsx +33 -24
  11. data/app/pb_kits/playbook/pb_body/docs/_body_dark.html.erb +1 -1
  12. data/app/pb_kits/playbook/pb_body/docs/_body_dark.jsx +0 -2
  13. data/app/pb_kits/playbook/pb_body/docs/_body_light.html.erb +1 -0
  14. data/app/pb_kits/playbook/pb_body/docs/_body_light.jsx +3 -7
  15. data/app/pb_kits/playbook/pb_caption/_caption.scss +2 -2
  16. data/app/pb_kits/playbook/pb_card/_card.jsx +4 -1
  17. data/app/pb_kits/playbook/pb_card/_card.scss +4 -0
  18. data/app/pb_kits/playbook/pb_card/card.rb +8 -1
  19. data/app/pb_kits/playbook/pb_card/docs/_card_border_none.html.erb +7 -0
  20. data/app/pb_kits/playbook/pb_card/docs/_card_border_none.jsx +14 -0
  21. data/app/pb_kits/playbook/pb_card/docs/_card_border_none.md +1 -0
  22. data/app/pb_kits/playbook/pb_card/docs/example.yml +2 -0
  23. data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
  24. data/app/pb_kits/playbook/pb_checkbox/_checkbox.html.erb +2 -1
  25. data/app/pb_kits/playbook/pb_checkbox/_checkbox.jsx +18 -5
  26. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_checked.jsx +17 -0
  27. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +1 -0
  28. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  29. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.html.erb +1 -0
  30. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.jsx +17 -1
  31. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.html.erb +3 -2
  32. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.jsx +15 -12
  33. data/app/pb_kits/playbook/pb_highlight/docs/_highlight_default.html.erb +1 -1
  34. data/app/pb_kits/playbook/pb_image/_image.jsx +1 -1
  35. data/app/pb_kits/playbook/pb_layout/_layout.scss +16 -0
  36. data/app/pb_kits/playbook/pb_legend/_legend.html.erb +1 -0
  37. data/app/pb_kits/playbook/pb_legend/_legend.jsx +25 -4
  38. data/app/pb_kits/playbook/pb_nav/_item.jsx +20 -10
  39. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +3 -0
  40. data/app/pb_kits/playbook/pb_popover/_popover.html.erb +1 -1
  41. data/app/pb_kits/playbook/pb_popover/_popover.jsx +3 -1
  42. data/app/pb_kits/playbook/pb_popover/_popover.scss +4 -0
  43. data/app/pb_kits/playbook/pb_popover/popover.rb +4 -0
  44. data/app/pb_kits/playbook/pb_title/_title.jsx +7 -4
  45. data/app/pb_kits/playbook/pb_title/_title.scss +7 -0
  46. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -0
  47. data/app/pb_kits/playbook/pb_title/title.rb +4 -1
  48. data/app/views/layouts/playbook/samples.html.erb +1 -0
  49. data/app/views/playbook/samples/collection_detail/index.html.erb +169 -0
  50. data/app/views/playbook/samples/collection_detail/index.jsx +372 -0
  51. data/lib/generators/kit/kit_generator.rb +6 -3
  52. data/lib/generators/kit/templates/kit_html.erb.tt +3 -2
  53. data/lib/generators/kit/templates/kit_jsx.erb.tt +38 -10
  54. data/lib/playbook/version.rb +1 -1
  55. metadata +11 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb8840e61c52b773111c22632a90f9543ff610609017855691c9cd4e1999315e
4
- data.tar.gz: 4abd95023a74be43d334f19bcd57160edbd76f51a3be26733e0e22463413109c
3
+ metadata.gz: 4e2f90404b2cb31a01901577679b4a20f66455a7eff2a5a903bbb473a0473853
4
+ data.tar.gz: e5471a16590847efafd3c9cb8d9899944afab8e1efd70bd5fb1e7c446913d331
5
5
  SHA512:
6
- metadata.gz: d2c02a383c9fa07b0892c1ead36815a66cfcf699d5deecee13d109e664affc7e173ddda17b6301f1160cc1cc59c8a01854129f30d14dd12edc16d0c60f032861
7
- data.tar.gz: ce596c4e96e0665b56f4c9a4622ca004600c3c613c87329ed0321ebf315fd16fffd1b6220b74bff7fdb23df9f129e4cf65602af1e7880cf70c06080c678cbd61
6
+ metadata.gz: d43fc99fe13e555b46b98b3dc069b860fddd625471421f38fbee3f8557eb5c8d8fc202cab6670db285e5c306f450f764d230d49678e98c2407b02e77935b431c
7
+ data.tar.gz: 7f0cfdaf3777fa7fcd09da1e2b5554f50ec18b07b5183fc5484929c1c415005437423af11756918cfa80ed72f85f5095483710c08ce3e3ece9b5a68da581c76d
@@ -80,4 +80,4 @@
80
80
  @import 'pb_user_badge/user_badge';
81
81
  @import 'pb_time_stacked/time_stacked';
82
82
  @import 'pb_weekday_stacked/weekday_stacked';
83
- @import './utilities/spacing';
83
+ @import './utilities/spacing';
@@ -2,6 +2,7 @@ samples:
2
2
  - dashboards
3
3
  - registration
4
4
  - filter_table
5
+ - collection_detail
5
6
 
6
7
  kits:
7
8
  - avatar
@@ -13,7 +13,9 @@ import WebpackerReact from 'webpacker-react'
13
13
  import Dashboards from '../../../views/playbook/samples/dashboards/index.jsx'
14
14
  import FilterTable from '../../../views/playbook/samples/filter_table/index.jsx'
15
15
  import Registration from '../../../views/playbook/samples/registration/index.jsx'
16
+ import CollectionDetail from '../../../views/playbook/samples/collection_detail/index.jsx'
16
17
 
17
18
  WebpackerReact.setup({ Dashboards })
18
19
  WebpackerReact.setup({ FilterTable })
19
20
  WebpackerReact.setup({ Registration })
21
+ WebpackerReact.setup({ CollectionDetail })
@@ -2,6 +2,7 @@
2
2
  @import "flex_examples";
3
3
  @import "code_snippet";
4
4
  @import "kit_doc";
5
+ @import "bg_light_doc_example";
5
6
 
6
7
  @import "color_utilities";
7
8
  @import "spacing_tokens";
@@ -0,0 +1,7 @@
1
+ @import "../../../tokens/colors";
2
+ @import "../../../tokens/spacing";
3
+
4
+ .bg-light-doc-example {
5
+ background: $bg_light;
6
+ padding: $space_lg;
7
+ }
@@ -1,4 +1,5 @@
1
1
  <%= content_tag(:div,
2
+ aria: object.aria,
2
3
  id: object.id,
3
4
  data: object.data,
4
5
  class: object.classname) do %>
@@ -2,26 +2,37 @@
2
2
 
3
3
  import React from 'react'
4
4
  import classnames from 'classnames'
5
- import { buildCss } from '../utilities/props'
6
5
  import { spacing } from '../utilities/spacing.js'
7
6
 
7
+ import {
8
+ buildAriaProps,
9
+ buildCss,
10
+ buildDataProps,
11
+ } from '../utilities/props'
12
+
8
13
  type BadgeProps = {
14
+ aria?: object,
9
15
  className?: String,
10
16
  dark?: Boolean,
17
+ data?: object,
11
18
  id?: String,
12
- text?: String,
13
- variant?: "success" | "warning" | "error" | "info" | "neutral",
14
19
  rounded?: Boolean,
20
+ text?: String,
21
+ variant?: "error" | "info" | "neutral" | "primary" | "success" | "warning",
15
22
  }
16
23
  const Badge = (props: BadgeProps) => {
17
24
  const {
25
+ aria = {},
18
26
  className,
19
27
  dark = false,
28
+ data = {},
20
29
  id,
30
+ rounded = false,
21
31
  text,
22
32
  variant = 'neutral',
23
- rounded = false,
24
33
  } = props
34
+ const ariaProps = buildAriaProps(aria)
35
+ const dataProps = buildDataProps(data)
25
36
  const css = classnames(
26
37
  className,
27
38
  buildCss('pb_badge_kit', variant, {
@@ -33,6 +44,8 @@ const Badge = (props: BadgeProps) => {
33
44
 
34
45
  return (
35
46
  <div
47
+ {...ariaProps}
48
+ {...dataProps}
36
49
  className={css}
37
50
  id={id}
38
51
  >
@@ -1,4 +1,5 @@
1
1
  <%= content_tag(object.tag,
2
+ aria: object.aria,
2
3
  id: object.id,
3
4
  data: object.data,
4
5
  class: object.classname) do %>
@@ -2,50 +2,59 @@
2
2
 
3
3
  import React from 'react'
4
4
  import classnames from 'classnames'
5
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
5
6
  import { Highlight } from '../'
6
7
  import { spacing } from '../utilities/spacing.js'
7
8
 
8
9
  type BodyProps = {
10
+ aria?: object,
9
11
  className?: String,
10
12
  children?: Array<React.ReactChild>,
11
- color: 'light' | 'lighter',
13
+ color: 'dark' | 'default' | 'light' | 'lighter' | 'light_dark' | 'lighter_dark',
12
14
  dark?: Boolean,
13
- status?: 'negative' | 'positive',
14
- tag: String,
15
- text?: String,
15
+ data?: object,
16
+ highlightedText?: Array<String>,
16
17
  highlighting?: Boolean,
17
- highlightedText?: Array<String>
18
- }
19
-
20
- const bodyCSS = ({
21
- color = '',
22
- dark = false,
23
- status = '',
24
-
25
- }: BodyProps) => {
26
- const colorStyle = color !== '' ? `_${color}` : ''
27
-
28
- const themeStyle = dark === true ? '_dark' : ''
29
-
30
- const statusStyle = status !== '' ? `_${status}` : ''
31
-
32
- return 'pb_body_kit' + colorStyle + themeStyle + statusStyle
18
+ id?: String,
19
+ status?: 'negative' | 'neutral' | 'positive',
20
+ tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div',
21
+ text?: String,
33
22
  }
34
23
 
35
24
  const Body = (props: BodyProps) => {
36
25
  const {
26
+ aria = {},
37
27
  className,
38
28
  children,
39
- text,
40
- tag = 'div',
41
- highlightedText,
29
+ color = '',
30
+ dark = false,
31
+ data = {},
32
+ highlightedText = [],
42
33
  highlighting = false,
34
+ id,
35
+ status = '',
36
+ tag = 'div',
37
+ text,
43
38
  } = props
44
39
 
40
+ const ariaProps = buildAriaProps(aria)
41
+ const dataProps = buildDataProps(data)
42
+ const classes = classnames(
43
+ className,
44
+ buildCss('pb_body_kit', color, status, {
45
+ dark: dark,
46
+ }),
47
+ spacing(props)
48
+ )
45
49
  const Tag = `${tag}`
46
50
 
47
51
  return (
48
- <Tag className={classnames(bodyCSS(props), className, spacing(props))}>
52
+ <Tag
53
+ {...ariaProps}
54
+ {...dataProps}
55
+ className={classes}
56
+ id={id}
57
+ >
49
58
  <If condition={highlighting}>
50
59
  <Highlight highlightedText={highlightedText}>{text || children}</Highlight>
51
60
  <Else />
@@ -1,6 +1,6 @@
1
1
  <%= pb_rails("body", props: {
2
2
  text: "I am a body kit",
3
- dark: true
3
+ dark: true,
4
4
  }) %>
5
5
 
6
6
  <%= pb_rails("body", props: {
@@ -18,8 +18,6 @@ const BodyDark = () => {
18
18
  dark
19
19
  text="I am a body kit (Lighter)"
20
20
  />
21
- <br />
22
- <br />
23
21
  <Body
24
22
  dark
25
23
  status="negative"
@@ -2,6 +2,7 @@
2
2
  text: "I am a body kit"
3
3
  }) %>
4
4
 
5
+
5
6
  <%= pb_rails("body", props: {
6
7
  text: "I am a body kit (Light)",
7
8
  color: "light"
@@ -4,7 +4,9 @@ import { Body } from '../../'
4
4
  const BodyLight = () => {
5
5
  return (
6
6
  <div>
7
- <Body text="I am a body kit (Default)" />
7
+ <Body
8
+ text="I am a body kit (Default)"
9
+ />
8
10
  <Body
9
11
  color="light"
10
12
  text="I am a body kit (Light)"
@@ -13,8 +15,6 @@ const BodyLight = () => {
13
15
  color="lighter"
14
16
  text="I am a body kit (Lighter)"
15
17
  />
16
- <br />
17
- <br />
18
18
  <Body
19
19
  status="negative"
20
20
  text="I am a body kit (Status: negative)"
@@ -23,10 +23,6 @@ const BodyLight = () => {
23
23
  status="positive"
24
24
  text="I am a body kit (Status: positive)"
25
25
  />
26
- <Body
27
- status="positive"
28
- text="I am a body kit (Status: positive)"
29
- />
30
26
  </div>
31
27
  )
32
28
  }
@@ -3,11 +3,11 @@
3
3
  [class^=pb_caption_kit] {
4
4
  @include caption;
5
5
 
6
- &[class*=_lg] {
6
+ &[class^=pb_caption_kit_lg] {
7
7
  @include caption_lg;
8
8
  }
9
9
 
10
- &[class*=_xs] {
10
+ &[class^=pb_caption_kit_xs] {
11
11
  @include caption_xs;
12
12
  }
13
13
 
@@ -16,6 +16,7 @@ type CardPropTypes = {
16
16
  selected?: Boolean,
17
17
  shadow?: "none" | "deep" | "deeper" | "deepest",
18
18
  dark?: Boolean,
19
+ borderNone?: Boolean,
19
20
  }
20
21
 
21
22
  type CardHeaderProps = {
@@ -62,9 +63,11 @@ const Card = (props: CardPropTypes) => {
62
63
  highlight = {},
63
64
  selected = false,
64
65
  shadow = 'none',
66
+ borderNone = false,
65
67
  } = props
66
68
  const bodyCSS = buildCss('pb_card_body_kit')
67
- const cardCss = buildCss('pb_card_kit', `shadow_${shadow}`, {
69
+ const borderCSS = borderNone == true ? 'border_none' : ''
70
+ const cardCss = buildCss('pb_card_kit', `shadow_${shadow}`, `${borderCSS}`, {
68
71
  dark: dark,
69
72
  selected,
70
73
  deselected: !selected,
@@ -16,6 +16,10 @@
16
16
  }
17
17
  }
18
18
 
19
+ &[class*=_border_none] {
20
+ border-width: 0px;
21
+ }
22
+
19
23
  [class^=pb_card_header_kit] {
20
24
  flex-grow: 0;
21
25
  flex-shrink: 0;
@@ -15,6 +15,8 @@ module Playbook
15
15
  default: {}
16
16
  prop :dark, type: Playbook::Props::Boolean,
17
17
  default: false
18
+ prop :border_none, type: Playbook::Props::Boolean,
19
+ default: false
18
20
 
19
21
  def classname
20
22
  generate_classname("pb_card_kit",
@@ -22,7 +24,8 @@ module Playbook
22
24
  shadow_class,
23
25
  highlight_position_class,
24
26
  highlight_color_class,
25
- dark_class)
27
+ dark_class,
28
+ border_class)
26
29
  end
27
30
 
28
31
  def body_padding
@@ -55,6 +58,10 @@ module Playbook
55
58
  def dark_class
56
59
  dark ? "dark" : nil
57
60
  end
61
+
62
+ def border_class
63
+ border_none == true ? "border_none" : nil
64
+ end
58
65
  end
59
66
  end
60
67
  end
@@ -0,0 +1,7 @@
1
+ <div class="bg-light-doc-example">
2
+
3
+ <%= pb_rails("card", props: { border_none: true }) do %>
4
+ Card content
5
+ <% end %>
6
+
7
+ </div>
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+ import Card from '../_card.jsx'
3
+
4
+ const CardBorderNone = () => {
5
+ return (
6
+ <div className="bg-light-doc-example">
7
+
8
+ <Card borderNone>{'Card content'}</Card>
9
+
10
+ </div>
11
+ )
12
+ }
13
+
14
+ export default CardBorderNone
@@ -0,0 +1 @@
1
+ Remove card border <b>only</b> for dashboard cards.
@@ -9,6 +9,7 @@ examples:
9
9
  - card_shadow: Shadow Size
10
10
  - card_content: Content Size
11
11
  - card_separator: Separator Card
12
+ - card_border_none: No Border
12
13
  react:
13
14
  - card_light: Default
14
15
  - card_dark: Dark Cards
@@ -19,3 +20,4 @@ examples:
19
20
  - card_shadow: Shadow Size
20
21
  - card_content: Content Size
21
22
  - card_separator: Separator Card
23
+ - card_border_none: No Border
@@ -7,3 +7,4 @@ export { default as CardShadow } from './_card_shadow.jsx'
7
7
  export { default as CardContent } from './_card_content.jsx'
8
8
  export { default as CardSeparator } from './_card_separator.jsx'
9
9
  export { default as CardDark } from './_card_dark.jsx'
10
+ export { default as CardBorderNone } from './_card_border_none.jsx'
@@ -1,4 +1,5 @@
1
- <%= content_tag(:label, id: object.id,
1
+ <%= content_tag(:label, aria: object.aria,
2
+ id: object.id,
2
3
  data: object.data,
3
4
  class: object.classname) do %>
4
5
  <% if object.children %>
@@ -3,13 +3,18 @@
3
3
  import React from 'react'
4
4
  import Body from '../pb_body/_body.jsx'
5
5
  import Icon from '../pb_icon/_icon.jsx'
6
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
7
  import classnames from 'classnames'
7
8
  import { spacing } from '../utilities/spacing.js'
8
9
 
9
10
  type CheckboxProps = {
11
+ aria?: object,
10
12
  checked?: Boolean,
13
+ className?: String,
11
14
  dark?: Boolean,
15
+ data?: object,
12
16
  error?: Boolean,
17
+ id?: String,
13
18
  name: String,
14
19
  text: String,
15
20
  value: String,
@@ -19,9 +24,13 @@ type CheckboxProps = {
19
24
 
20
25
  const Checkbox = (props: CheckboxProps) => {
21
26
  const {
27
+ aria = {},
22
28
  checked = false,
29
+ className,
23
30
  dark = false,
31
+ data = {},
24
32
  error = false,
33
+ id,
25
34
  name = '',
26
35
  text = '',
27
36
  value = '',
@@ -29,13 +38,17 @@ const Checkbox = (props: CheckboxProps) => {
29
38
  onChange = () => {},
30
39
  } = props
31
40
 
41
+ const dataProps = buildDataProps(data)
42
+ const ariaProps = buildAriaProps(aria)
43
+ const classes = classnames(buildCss('pb_checkbox_kit',
44
+ { dark: dark, checked: checked, error: error }), className, spacing(props))
45
+
32
46
  return (
33
47
  <label
34
- className={classnames('pb_checkbox_kit' +
35
- (dark === true ? '_dark' : '') +
36
- (error === true ? ' error' : ''), spacing(props))
37
-
38
- }
48
+ {...ariaProps}
49
+ {...dataProps}
50
+ className={classes}
51
+ id={id}
39
52
  >
40
53
  <If condition={children}>
41
54
  {children}