playbook_ui 10.17.0 → 10.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +2 -0
  3. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_colors.md +1 -1
  4. data/app/pb_kits/playbook/pb_button/_button.jsx +3 -3
  5. data/app/pb_kits/playbook/pb_button/_button.scss +17 -0
  6. data/app/pb_kits/playbook/pb_button/button.rb +6 -3
  7. data/app/pb_kits/playbook/pb_button/button.test.js +13 -0
  8. data/app/pb_kits/playbook/pb_button/docs/_button_size.html.erb +3 -0
  9. data/app/pb_kits/playbook/pb_button/docs/_button_size.jsx +26 -0
  10. data/app/pb_kits/playbook/pb_button/docs/_button_size.md +1 -0
  11. data/app/pb_kits/playbook/pb_button/docs/example.yml +2 -0
  12. data/app/pb_kits/playbook/pb_button/docs/index.js +1 -0
  13. data/app/pb_kits/playbook/pb_card/docs/_card_background.html.erb +1 -1
  14. data/app/pb_kits/playbook/pb_card/docs/_card_content.html.erb +3 -1
  15. data/app/pb_kits/playbook/pb_card/docs/_card_content.jsx +9 -2
  16. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.md +2 -0
  17. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.md +3 -1
  18. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +13 -4
  19. data/app/pb_kits/playbook/pb_gauge/_gauge.jsx +3 -0
  20. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.html.erb +12 -0
  21. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.jsx +19 -0
  22. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.md +2 -0
  23. data/app/pb_kits/playbook/pb_gauge/docs/example.yml +2 -0
  24. data/app/pb_kits/playbook/pb_gauge/docs/index.js +1 -0
  25. data/app/pb_kits/playbook/pb_gauge/gauge.rb +2 -0
  26. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +2 -2
  27. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.html.erb +1 -1
  28. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.jsx +1 -1
  29. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.md +1 -0
  30. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
  31. data/app/pb_kits/playbook/pb_image/_image.jsx +4 -1
  32. data/app/pb_kits/playbook/pb_image/_image.scss +24 -8
  33. data/app/pb_kits/playbook/pb_image/docs/_transition_image.html.erb +54 -0
  34. data/app/pb_kits/playbook/pb_image/docs/_transition_image.jsx +77 -0
  35. data/app/pb_kits/playbook/pb_image/docs/_transition_image.md +1 -0
  36. data/app/pb_kits/playbook/pb_image/docs/example.yml +2 -0
  37. data/app/pb_kits/playbook/pb_image/docs/index.js +1 -0
  38. data/app/pb_kits/playbook/pb_image/image.html.erb +1 -1
  39. data/app/pb_kits/playbook/pb_image/image.rb +8 -1
  40. data/app/pb_kits/playbook/pb_image/image.test.js +9 -4
  41. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors.md +1 -1
  42. data/app/pb_kits/playbook/pb_title/docs/_title_light.html.erb +4 -1
  43. data/app/pb_kits/playbook/pb_title/title.html.erb +4 -2
  44. data/app/pb_kits/playbook/plugins/pb_chart.js +13 -22
  45. data/app/pb_kits/playbook/tokens/_colors.scss +3 -1
  46. data/app/pb_kits/playbook/utilities/_cursor.scss +3 -0
  47. data/app/pb_kits/playbook/utilities/_display.scss +23 -0
  48. data/app/pb_kits/playbook/utilities/globalProps.js +13 -1
  49. data/lib/playbook/classnames.rb +2 -0
  50. data/lib/playbook/cursor.rb +29 -0
  51. data/lib/playbook/display.rb +29 -0
  52. data/lib/playbook/engine.rb +0 -1
  53. data/lib/playbook/kit_base.rb +4 -0
  54. data/lib/playbook/version.rb +1 -1
  55. data/lib/playbook.rb +2 -0
  56. metadata +19 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1e8104e2057e245727105de8a2dc411bb0a82b03e44412429b9335b6493c242
4
- data.tar.gz: 0332c556cdb6636b2faac2466ade547b58c38faed3bf08ca682f807acefbd2f7
3
+ metadata.gz: b6fbbfa10d2162c02d5c0e145411bc6c425b6c9d637e058797da617ac6249270
4
+ data.tar.gz: 2649996be5ab0d966b38f542b8db7a23b6d095a1043f8d93e1cf68fed3dfda29
5
5
  SHA512:
6
- metadata.gz: a0e1e774a8e2a0eebea5b07c03713ff74219e8eaa9d2fa6d1937d21192828db996c19ea381cb7a991d678e0dfaefe5ed121e72a20704a4fc386962afffaf5a45
7
- data.tar.gz: f4ab414ba1ea7a825432df55853752307b5cba59c133f939f896ba28facf39293b2faa30bb596ea769d9aa442ecfbdda416d597a8a5a168251dacf345abea0ee
6
+ metadata.gz: c512fa4a05695fbecddb4cc4e1c2df8b79b8021b18bc2676ed3ca9c4844a9fa6b0ca81182b73ce0db194ee8ea083cc4e65db8db98ef3a42d554b2017a98e4d0b
7
+ data.tar.gz: 18405cbcd539c6c0f6b17be09fe5362711a2c63bc93450d0534758c1fd48f34c8f04cef485ce333292f9d62fa9d4e475fc8534bbd095a314443886326b70a98c
@@ -93,7 +93,9 @@
93
93
  @import 'pb_walkthrough/walkthrough';
94
94
  @import 'pb_weekday_stacked/weekday_stacked';
95
95
  @import './utilities/spacing';
96
+ @import './utilities/cursor';
96
97
  @import './utilities/max_width';
97
98
  @import './utilities/positioning';
98
99
  @import './utilities/number_spacing';
99
100
  @import './utilities/shadow';
101
+ @import './utilities/display';
@@ -1,2 +1,2 @@
1
1
  Custom data `colors` allow for color customization to match the needs of business requirements.
2
- Pass the prop colors and use desired values `data-1 | data-2 | data-3 | data-4 | data-5 | data-6 | data-7 | data-8` in an array.
2
+ Pass the prop colors and use desired values `data-1 | data-2 | data-3 | data-4 | data-5 | data-6 | data-7 | data-8` in an array. Hex colors are also available `eg: #CA0095`
@@ -22,7 +22,7 @@ type ButtonPropTypes = {
22
22
  loading?: boolean,
23
23
  newWindow?: boolean,
24
24
  onClick?: EventHandler,
25
- size: 'large' | 'medium' | 'small',
25
+ size?: 'sm' | 'md' | 'lg',
26
26
  text?: string,
27
27
  type: 'inline' | null,
28
28
  htmlType: string | 'button',
@@ -36,16 +36,16 @@ const buttonClassName = (props: ButtonPropTypes) => {
36
36
  disabled = false,
37
37
  fullWidth = false,
38
38
  loading = false,
39
- size = null,
40
39
  type = 'inline',
41
40
  variant = 'primary',
41
+ size = null,
42
42
  } = props
43
43
 
44
44
  let className = 'pb_button_kit'
45
45
 
46
+ className += `${size !== null ? `_${size}` : ''}`
46
47
  className += `${variant !== null ? `_${variant}` : ''}`
47
48
  className += `${type !== null ? `_${type}` : ''}`
48
- className += `${size !== null ? `_${size}` : ''}`
49
49
  className += `${fullWidth ? '_block' : ''}`
50
50
  className += disabled ? '_disabled' : '_enabled'
51
51
  className += loading ? '_loading' : ''
@@ -1,7 +1,24 @@
1
1
  @import "./button_mixins";
2
2
 
3
+ $pb_button_sizes: (
4
+ "sm": 0.75rem,
5
+ "md": 0.875rem,
6
+ "lg": 1.125rem,
7
+ );
8
+
3
9
  [class^=pb_button_kit]{
4
10
  @include pb_button;
11
+ // Size =================
12
+ @each $name, $size in $pb_button_sizes {
13
+ &[class*=_#{$name}] {
14
+ font-size: $size;
15
+ padding: calc(#{$size} / 2) calc(#{$size} * 2.42) !important;
16
+ }
17
+ }
18
+ &[class*=_sm] {
19
+ min-height: 0;
20
+ }
21
+
5
22
  // Variants =================
6
23
  &[class*=_primary] {
7
24
  @include pb_button_primary;
@@ -18,6 +18,9 @@ module Playbook
18
18
  prop :text
19
19
  prop :type
20
20
  prop :value
21
+ prop :size, type: Playbook::Props::Enum,
22
+ values: ["sm", "md", "lg", nil],
23
+ default: nil
21
24
 
22
25
  def options
23
26
  {
@@ -44,12 +47,12 @@ module Playbook
44
47
  link ? "a" : "button"
45
48
  end
46
49
 
47
- private
48
-
49
50
  def classname
50
- generate_classname("pb_button_kit", variant, full_width_class, disabled_class, loading_class)
51
+ generate_classname("pb_button_kit", size, variant, full_width_class, disabled_class, loading_class)
51
52
  end
52
53
 
54
+ private
55
+
53
56
  def disabled_class
54
57
  disabled ? "disabled" : "enabled"
55
58
  end
@@ -89,3 +89,16 @@ test('click event', async () => {
89
89
 
90
90
  expect(screen.getByText('clicked button!')).toBeInTheDocument()
91
91
  })
92
+
93
+ test('size prop', () => {
94
+ render(
95
+ <Button
96
+ data={{ testid: 'size-test' }}
97
+ size="sm"
98
+ />
99
+ )
100
+
101
+ const kit = screen.getByTestId('size-test')
102
+
103
+ expect(kit).toHaveClass('pb_button_kit_sm_primary_inline_enabled')
104
+ })
@@ -0,0 +1,3 @@
1
+ <%= pb_rails("button", props: { text: "Button sm size", size: "sm" }) %>
2
+ <%= pb_rails("button", props: { text: "Button md size", size: "md" }) %>
3
+ <%= pb_rails("button", props: { text: "Button lg size", size: "lg" }) %>
@@ -0,0 +1,26 @@
1
+ import React from 'react'
2
+ import { Button } from '../../'
3
+
4
+ const ButtonSize = (props) => (
5
+ <div>
6
+ <Button
7
+ size="sm"
8
+ text="Button sm size"
9
+ {...props}
10
+ />
11
+ {' '}
12
+ <Button
13
+ size="md"
14
+ text="Button md size"
15
+ {...props}
16
+ />
17
+ {' '}
18
+ <Button
19
+ size="lg"
20
+ text="Button lg size"
21
+ {...props}
22
+ />
23
+ </div>
24
+ )
25
+
26
+ export default ButtonSize
@@ -0,0 +1 @@
1
+ By default button has the `md` size style, even if you don't explicitly pass a size prop.
@@ -7,6 +7,7 @@ examples:
7
7
  - button_block_content: Button Block Content
8
8
  - button_accessibility: Button Accessibility Options
9
9
  - button_options: Button Additional Options
10
+ - button_size: Button Size
10
11
  react:
11
12
  - button_default: Button Variants
12
13
  - button_full_width: Button Full Width
@@ -15,3 +16,4 @@ examples:
15
16
  - button_block_content: Button Block Content
16
17
  - button_accessibility: Button Accessibility Options
17
18
  - button_options: Button Additional Options (onClick)
19
+ - button_size: Button Size
@@ -5,3 +5,4 @@ export { default as ButtonLoading } from './_button_loading.jsx'
5
5
  export { default as ButtonBlockContent } from './_button_block_content.jsx'
6
6
  export { default as ButtonAccessibility } from './_button_accessibility.jsx'
7
7
  export { default as ButtonOptions } from './_button_options.jsx'
8
+ export { default as ButtonSize } from './_button_size.jsx'
@@ -19,7 +19,7 @@
19
19
 
20
20
  <br>
21
21
 
22
- <%= pb_rails("card", props: { background: "light"}) do %>
22
+ <%= pb_rails("card", props: { background: "light" }) do %>
23
23
  <%= pb_rails("body", props: {
24
24
  text: "Light"
25
25
  }) %>
@@ -1,4 +1,6 @@
1
- <%= pb_rails("card") do %>
1
+ <%= pb_rails("card", props: {
2
+ cursor: "pointer"
3
+ }) do %>
2
4
  Card Content
3
5
  <% end %>
4
6
 
@@ -5,9 +5,16 @@ import Card from '../_card'
5
5
  const CardContent = (props) => {
6
6
  return (
7
7
  <div>
8
- <Card {...props}>{'Card content'}</Card>
8
+ <Card
9
+ cursor="pointer"
10
+ {...props}
11
+ >
12
+ {'Card content'}
13
+ </Card>
9
14
  <br />
10
- <Card {...props}>
15
+ <Card
16
+ {...props}
17
+ >
11
18
  {`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis, risus a fringilla luctus, sapien eros sodales ex, quis molestie est nulla non turpis. Vestibulum aliquet at ipsum eget posuere. Morbi sed laoreet erat. Sed commodo posuere lectus, at porta nulla ornare a. Suspendisse quam est, sollicitudin ut enim sit amet, commodo placerat enim. Donec laoreet metus ac mauris pellentesque mattis. Pellentesque luctus vel mauris non aliquam. Mauris hendrerit mattis porttitor. Curabitur vehicula justo non ex consectetur commodo. Quisque posuere aliquet quam. Maecenas malesuada magna mauris, ac tempor metus euismod at.
12
19
 
13
20
  Cras ornare fermentum magna mollis efficitur. Sed vitae nulla vel purus ultrices mollis. Maecenas id nulla id libero faucibus feugiat quis sit amet turpis. In commodo pellentesque risus at fringilla. Integer non interdum leo, non commodo ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mi augue, dignissim at orci vel, egestas aliquam mi. Proin finibus aliquet tempor. Integer cursus, ex quis gravida rhoncus, nisi elit viverra ipsum, non efficitur est ex ac tortor. Praesent vitae odio massa.`}
@@ -0,0 +1,2 @@
1
+ Custom data colors allow for color customization to match the needs of business requirements.
2
+ Pass the prop `colors` and use desired values `data-1 | data-2 | data-3 | data-4 | data-5 | data-6 | data-7 | data-8` in an array. Hex colors are also available `eg: #CA0095`
@@ -1,3 +1,5 @@
1
1
  The `defaultDate`/`default_date` prop has a null or empty string value by default. You can pass an ISO date string (preferred rails method) or date object (preferred JS method) if you want a default value on page load. Use Ruby UTC DateTime objects and convert them to ISO date strings with `DateTime.now.utc.iso8601`.
2
2
 
3
- If you use a Date object without UTC time standardization the Date Picker kit may misinterpret that date as yesterdays date (consequence of timezone differentials and the Javascript Date Object constructor). See [this GitHub issue for more information](https://github.com/powerhome/playbook/issues/1167) and the anti-pattern examples below.
3
+ If you use a Date object without UTC time standardization the Date Picker kit may misinterpret that date as yesterdays date (consequence of timezone differentials and the Javascript Date Object constructor). See [this GitHub issue for more information](https://github.com/powerhome/playbook/issues/1167) and the anti-pattern examples below.
4
+
5
+
@@ -2,10 +2,19 @@ import { ensureAccessible, renderKit } from '../utilities/test-utils'
2
2
  import { DateTimeStacked } from '../'
3
3
 
4
4
  /* eslint-disable jsx-control-statements/jsx-jcs-no-undef */
5
+ const currentDate = new Date()
6
+
7
+ const datetime = new Date('Wed Mar 31 2021 12:00:00 GMT-0500'),
8
+ monthName = datetime.toLocaleString('en-US', { month: 'short' }),
9
+ day = datetime.getDate(),
10
+ fullYear = datetime.getFullYear(),
11
+ optionalYear = currentDate.getFullYear() !== fullYear ? fullYear : ''
12
+
13
+ const monthDayYear = `${monthName}${day}${optionalYear}`
5
14
 
6
15
  const props = {
7
16
  data: { testid: 'datetimestacked' },
8
- datetime: new Date('Wed Mar 31 2021 12:00:00 GMT-0500'),
17
+ datetime,
9
18
  }
10
19
 
11
20
  test('Kit renders date time', () => {
@@ -19,17 +28,17 @@ it('Should be accessible', async () => {
19
28
 
20
29
  test('renders time in default timezone', () => {
21
30
  const kit = renderKit(DateTimeStacked, props)
22
- expect(kit).toHaveTextContent(/Mar311:00pEDT/i)
31
+ expect(kit).toHaveTextContent(`${monthDayYear}1:00pEDT`)
23
32
  })
24
33
 
25
34
  test('renders time in timezone', () => {
26
35
  props.timeZone = 'Asia/Tokyo'
27
36
  const kit = renderKit(DateTimeStacked, props)
28
- expect(kit).toHaveTextContent(/Mar312:00aJST/i)
37
+ expect(kit).toHaveTextContent(`${monthDayYear}2:00aJST`)
29
38
  })
30
39
 
31
40
  test('renders time in timezone', () => {
32
41
  props.timeZone = 'America/Denver'
33
42
  const kit = renderKit(DateTimeStacked, props)
34
- expect(kit).toHaveTextContent(/Mar3111:00aMDT/i)
43
+ expect(kit).toHaveTextContent(`${monthDayYear}11:00aMDT`)
35
44
  })
@@ -25,6 +25,7 @@ type GaugeProps = {
25
25
  suffix: string,
26
26
  title: string,
27
27
  tooltipHtml: string,
28
+ colors: array,
28
29
  }
29
30
 
30
31
  const Gauge = (props: GaugeProps) => {
@@ -45,6 +46,7 @@ const Gauge = (props: GaugeProps) => {
45
46
  suffix = '',
46
47
  title = '',
47
48
  tooltipHtml = '<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: ' + '<b>{point.y}</b>',
49
+ colors = [],
48
50
  } = props
49
51
 
50
52
  const ariaProps = buildAriaProps(aria)
@@ -76,6 +78,7 @@ const Gauge = (props: GaugeProps) => {
76
78
  style: style,
77
79
  tooltipHtml: tooltipHtml,
78
80
  type: 'gauge',
81
+ colors: colors,
79
82
  })
80
83
  }, [])
81
84
 
@@ -0,0 +1,12 @@
1
+ <% data = [
2
+ {
3
+ name: 'Name',
4
+ value: 67,
5
+ }
6
+ ]%>
7
+
8
+ <%= pb_rails("gauge", props: {
9
+ id: "gauge-colors",
10
+ chart_data: data,
11
+ colors: ['data-7']
12
+ }) %>
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import { Gauge } from '../../'
3
+
4
+ const data = [
5
+ { name: 'Name', value: 67 },
6
+ ]
7
+
8
+ const GaugeColors = (props) => (
9
+ <div>
10
+ <Gauge
11
+ chartData={data}
12
+ id="gauge-colors"
13
+ {...props}
14
+ colors={['data-7']}
15
+ />
16
+ </div>
17
+ )
18
+
19
+ export default GaugeColors
@@ -0,0 +1,2 @@
1
+ Custom data colors allow for color customization to match the needs of business requirements.
2
+ Pass the prop `colors` and use **ONE** desired value `data-1 | data-2 | data-3 | data-4 | data-5 | data-6 | data-7 | data-8` in an array. Hex colors are also available `eg: #CA0095`
@@ -9,6 +9,7 @@ examples:
9
9
  - gauge_min_max: Min Max Labels
10
10
  - gauge_sizing: Sizing
11
11
  - gauge_height: Height
12
+ - gauge_colors: Color Overrides
12
13
 
13
14
 
14
15
  react:
@@ -21,3 +22,4 @@ examples:
21
22
  - gauge_sizing: Sizing
22
23
  - gauge_height: Height
23
24
  - gauge_live_data: Live Data
25
+ - gauge_colors: Color Overrides
@@ -7,3 +7,4 @@ export { default as GaugeSizing } from './_gauge_sizing.jsx'
7
7
  export { default as GaugeTitle } from './_gauge_title.jsx'
8
8
  export { default as GaugeUnits } from './_gauge_units.jsx'
9
9
  export { default as GaugeLiveData } from './_gauge_live_data.jsx'
10
+ export { default as GaugeColors } from './_gauge_colors.jsx'
@@ -20,6 +20,7 @@ module Playbook
20
20
  prop :disable_animation, type: Playbook::Props::Boolean, default: false
21
21
  prop :min, type: Playbook::Props::Numeric, default: 0
22
22
  prop :max, type: Playbook::Props::Numeric, default: 100
23
+ prop :colors, type: Playbook::Props::Array, default: []
23
24
 
24
25
  def chart_data_formatted
25
26
  chart_data.map { |hash| hash[:y] = hash.delete :value }
@@ -42,6 +43,7 @@ module Playbook
42
43
  style: style,
43
44
  tooltipHtml: tooltip_html,
44
45
  type: "gauge",
46
+ colors: colors,
45
47
  }.to_json.html_safe
46
48
  end
47
49
 
@@ -52,9 +52,9 @@ $pb_icon_circle_sizes: (
52
52
  @each $color_name, $color_value in $colors {
53
53
  &[class*=_#{$color_name}] {
54
54
  color: $color_value;
55
- background: rgba(mix($bg_dark, $color_value, 10%), $opacity_2);
55
+ background: rgba(mix($bg_dark, $color_value, 10%), $opacity_1);
56
56
  &.dark {
57
- background: rgba(mix($bg_dark, $color_value, 10%), $opacity_5);
57
+ background: rgba(mix($bg_dark, $color_value, 10%), $opacity_2);
58
58
  }
59
59
  }
60
60
  }
@@ -5,7 +5,7 @@
5
5
  }) %>
6
6
  <%= pb_rails("icon_circle", props: {
7
7
  icon: "archive",
8
- variant: "blue",
8
+ variant: "orange",
9
9
  size: "sm"
10
10
  }) %>
11
11
  <%= pb_rails("icon_circle", props: {
@@ -15,7 +15,7 @@ const IconCircleColor = (props) => {
15
15
  <IconCircle
16
16
  icon="rocket"
17
17
  size="sm"
18
- variant="blue"
18
+ variant="orange"
19
19
  {...props}
20
20
  />
21
21
  <br />
@@ -0,0 +1 @@
1
+ Customize your icon circle by passing one of our seven base colors to the `variant` prop: `royal` `orange` `purple` `teal` `red` `yellow` `green`
@@ -8,7 +8,7 @@ module Playbook
8
8
  values: %w[xs sm md base lg xl],
9
9
  default: "md"
10
10
  prop :variant, type: Playbook::Props::Enum,
11
- values: %w[default royal blue purple teal red yellow green],
11
+ values: %w[default royal orange purple teal red yellow green],
12
12
  default: "default"
13
13
 
14
14
  def classname
@@ -14,6 +14,7 @@ type ImageProps = {
14
14
  onError?: () => {},
15
15
  size: "xs" | "sm" | "md" | "lg" | "xl",
16
16
  rounded?: boolean,
17
+ transition: "blur" | "fade" | "scale",
17
18
  url: string,
18
19
  }
19
20
 
@@ -27,6 +28,7 @@ const Image = (props: ImageProps) => {
27
28
  onError = null,
28
29
  rounded = false,
29
30
  size = '',
31
+ transition = 'fade',
30
32
  url = '',
31
33
  } = props
32
34
 
@@ -34,7 +36,7 @@ const Image = (props: ImageProps) => {
34
36
  const classes = classnames(
35
37
  buildCss('pb_image_kit', size),
36
38
  'lazyload',
37
- 'blur_up',
39
+ transition,
38
40
  { rounded },
39
41
  globalProps(props),
40
42
  className
@@ -53,6 +55,7 @@ const Image = (props: ImageProps) => {
53
55
  onError={onError}
54
56
  rounded={+rounded}
55
57
  src={url}
58
+ transition={transition}
56
59
  />
57
60
  </div>
58
61
  )
@@ -28,15 +28,31 @@ $image-sizes: (
28
28
  border-radius: $border-rad-heaviest;
29
29
  }
30
30
 
31
- .blur_up {
32
- -webkit-filter: blur(6px);
33
- filter: blur(6px);
34
- transition: filter 550ms, -webkit-filter 550ms;
31
+ &.fade {
32
+ opacity: 0;
33
+ &.lazyloaded {
34
+ opacity: 1;
35
+ transition: opacity 300ms ease-in;
36
+ }
35
37
  }
36
-
37
- .blur_up.lazyloaded {
38
- -webkit-filter: blur(0);
39
- filter: blur(0);
38
+
39
+ &.blur {
40
+ filter: blur(5px);
41
+ &.lazyloaded {
42
+ -webkit-filter: blur(0);
43
+ filter: blur(0);
44
+ transition: filter 300ms ease-in;
45
+ }
46
+ }
47
+
48
+ &.scale {
49
+ opacity: 0;
50
+ transform: scale(0.9);
51
+ &.lazyloaded {
52
+ opacity: 1;
53
+ transform: scale(1);
54
+ transition: 700ms ease-in;
55
+ }
40
56
  }
41
57
  }
42
58
  }
@@ -0,0 +1,54 @@
1
+ <%= pb_rails("flex") do %>
2
+ <%= pb_rails("flex/flex_item", props: {fixed_size: "250px"}) do %>
3
+ <%= pb_rails("select", props: {
4
+ id: "transition-dropdown",
5
+ label: "",
6
+ blank_selection: "Select a Transition...",
7
+ options: [
8
+ {
9
+ value: 'fade',
10
+ },
11
+ {
12
+ value: 'blur',
13
+ },
14
+ {
15
+ value: 'scale',
16
+ },
17
+ ]
18
+ }) %>
19
+ <% end %>
20
+ <%= pb_rails("flex/flex_item") do %>
21
+ <%= pb_rails("button", props: {classname: "button", text: "Load Image", margin_left: "sm", margin_top: "xs", disabled: true }) %>
22
+ <% end %>
23
+ <% end %>
24
+ <%= pb_rails("image", props: { classname: "transition-image", alt: "picture of a misty forest", url: "", on_error: "this.style.display = 'none'" }) %>
25
+
26
+ <script>
27
+ window.addEventListener('DOMContentLoaded', () => {
28
+ const button = document.querySelector(".button")
29
+ const transitionDropdown = document.querySelector("#transition-dropdown")
30
+ var option = ''
31
+
32
+ transitionDropdown.addEventListener('change', function() {
33
+ if (this.value === '') {
34
+ button.className = button.className + ' _disabled'
35
+ } else {
36
+ button.removeAttribute("disabled");
37
+ button.className = button.className.replace(/\_disabled/gi, '')
38
+ option = this.value
39
+ }
40
+ });
41
+
42
+ const updateTransition = (transition) => {
43
+ const imageTransition = document.querySelector('.transition-image')
44
+ imageTransition.removeAttribute("style")
45
+ imageTransition.classList.remove("fade", "blur", "scale", "lazyloaded")
46
+ imageTransition.classList.add(transition, "lazyload")
47
+ imageTransition.src = "https://unsplash.it/500/400/?image=634"
48
+ }
49
+
50
+ button.addEventListener('click', function() {
51
+ updateTransition(option)
52
+ })
53
+ });
54
+ </script>
@@ -0,0 +1,77 @@
1
+ import React, { useState } from 'react'
2
+
3
+ import Image from '../_image'
4
+ import Select from '../../pb_select/_select'
5
+ import FlexItem from '../../pb_flex/_flex_item'
6
+ import Flex from '../../pb_flex/_flex'
7
+ import Button from '../../pb_button/_button'
8
+
9
+ const TransitionImage = (props) => {
10
+ const [transition, setTransition] = useState('')
11
+ const [apply, setApply] = useState({
12
+ url: '',
13
+ transition: '',
14
+ })
15
+
16
+ const loadImage = () => {
17
+ document.querySelector('.image').classList.remove(transition, 'lazyloaded')
18
+ setApply({
19
+ url: 'https://unsplash.it/500/400/?image=634',
20
+ transition: transition,
21
+ },
22
+ document.querySelector('.image').classList.add(transition, 'lazyload')
23
+ )
24
+ }
25
+
26
+ const handleTransition = ({ target }) => {
27
+ setTransition(target.value)
28
+ }
29
+
30
+ const options = [
31
+ {
32
+ value: 'fade',
33
+ },
34
+ {
35
+ value: 'blur',
36
+ },
37
+ {
38
+ value: 'scale',
39
+ },
40
+ ]
41
+
42
+ return (
43
+ <>
44
+ <Flex>
45
+ <FlexItem fixedSize="250px">
46
+ <Select
47
+ blankSelection="Select a Transition..."
48
+ label=""
49
+ onChange={handleTransition}
50
+ options={options}
51
+ {...props}
52
+ />
53
+ </FlexItem>
54
+ <FlexItem>
55
+ <Button
56
+ disabled={transition === '' ? true : false}
57
+ marginLeft="sm"
58
+ onClick={loadImage}
59
+ text="Load Image"
60
+ {...props}
61
+ />
62
+ </FlexItem>
63
+ </Flex>
64
+ <div style={{ display: apply.url === '' ? 'none' : 'block' }}>
65
+ <Image
66
+ alt="picture of a misty forest"
67
+ className="image"
68
+ transition={apply.transition}
69
+ url={apply.url}
70
+ {...props}
71
+ />
72
+ </div>
73
+ </>
74
+ )
75
+ }
76
+
77
+ export default TransitionImage
@@ -0,0 +1 @@
1
+ To add a transition, simply use the `transition` prop and one of the three string options `"fade"`, `"blur"`, or `"scale"`.
@@ -3,7 +3,9 @@ examples:
3
3
  - default_image: Default
4
4
  - rounded_image: Rounded
5
5
  - custom_error_image: Error Handling
6
+ - transition_image: Transition
6
7
  react:
7
8
  - default_image: Default
8
9
  - rounded_image: Rounded
9
10
  - custom_error_image: Error Handling
11
+ - transition_image: Transition
@@ -1,3 +1,4 @@
1
1
  export { default as DefaultImage } from './_default_image.jsx'
2
2
  export { default as RoundedImage } from './_rounded_image.jsx'
3
3
  export { default as CustomErrorImage } from './_custom_error_image.jsx'
4
+ export { default as TransitionImage } from './_transition_image.jsx'
@@ -7,4 +7,4 @@
7
7
  alt: object.alt,
8
8
  onerror: object.on_error,
9
9
  )
10
- %>
10
+ %>
@@ -11,10 +11,13 @@ module Playbook
11
11
  prop :size, type: Playbook::Props::Enum,
12
12
  values: %w[xs sm md lg xl none],
13
13
  default: "none"
14
+ prop :transition, type: Playbook::Props::Enum,
15
+ values: %w[blur fade scale none],
16
+ default: "fade"
14
17
  prop :url
15
18
 
16
19
  def classname
17
- generate_classname("pb_image_kit#{size_class} lazyload blur_up") + rounded_class
20
+ generate_classname("pb_image_kit#{size_class} #{transition_class} lazyload") + rounded_class
18
21
  end
19
22
 
20
23
  private
@@ -26,6 +29,10 @@ module Playbook
26
29
  def size_class
27
30
  size == "none" ? nil : "_#{size}"
28
31
  end
32
+
33
+ def transition_class
34
+ transition == "none" ? nil : transition
35
+ end
29
36
  end
30
37
  end
31
38
  end
@@ -7,6 +7,7 @@ const props = {
7
7
  data: { testid: 'avatar' },
8
8
  size: null,
9
9
  url: 'https://unsplash.it/500/400/?image=634',
10
+ transition: 'blur',
10
11
  }
11
12
 
12
13
  it('Should be accessible', async () => {
@@ -20,16 +21,20 @@ test('alt attribute', () => {
20
21
 
21
22
  test('default classname', () => {
22
23
  const kit = renderKit(Image, props)
23
- expect(kit).toHaveClass('pb_image_kit lazyload blur_up')
24
+ expect(kit).toHaveClass('pb_image_kit lazyload')
24
25
  })
25
26
 
26
27
  test('size = xs', () => {
27
28
  const kit = renderKit(Image, props, { size: 'xs' })
28
- expect(kit).toHaveClass('pb_image_kit_xs lazyload blur_up')
29
+ expect(kit).toHaveClass('pb_image_kit_xs lazyload')
30
+ })
31
+
32
+ test('transition = blur', () => {
33
+ const kit = renderKit(Image, props, { transition: 'blur' })
34
+ expect(kit).toHaveClass('pb_image_kit lazyload blur')
29
35
  })
30
36
 
31
37
  test('rounded = true', () => {
32
38
  const kit = renderKit(Image, props, { rounded: true })
33
- expect(kit).toHaveClass('pb_image_kit lazyload blur_up rounded')
39
+ expect(kit).toHaveClass('pb_image_kit lazyload rounded')
34
40
  })
35
-
@@ -1,2 +1,2 @@
1
1
  Custom data colors allow for color customization to match the needs of business requirements.
2
- Pass the prop `colors` and use desired values `data-1 | data-2 | data-3 | data-4 | data-5 | data-6 | data-7 | data-8` in an array.
2
+ Pass the prop `colors` and use desired values `data-1 | data-2 | data-3 | data-4 | data-5 | data-6 | data-7 | data-8` in an array. Hex colors are also available `eg: #CA0095`
@@ -1,4 +1,7 @@
1
- <%= pb_rails("title", props: { text: "Default Title" }) %>
1
+ <%= pb_rails("title", props: {
2
+ }) do %>
3
+ Default Title
4
+ <% end %>
2
5
 
3
6
  <br/>
4
7
 
@@ -1,5 +1,7 @@
1
- <%= content_tag(object.tag, object.text,
1
+ <%= content_tag(object.tag,
2
2
  aria: object.aria,
3
3
  id: object.id,
4
4
  data: object.data,
5
- class: object.classname) %>
5
+ class: object.classname) do %>
6
+ <%= content.presence || object.text %>
7
+ <% end %>
@@ -10,25 +10,14 @@ import solidGauge from 'highcharts/modules/solid-gauge'
10
10
  pie(Highcharts)
11
11
 
12
12
  // Map Data Color String Props to our SCSS Variables
13
+
13
14
  const mapColors = (array) => {
15
+ const regex = /(data)\-[1-8]/ //eslint-disable-line
16
+
14
17
  const newArray = array.map((item) => {
15
- return item == 'data-1'
16
- ? `${colors.data_1}`
17
- : item == 'data-2'
18
- ? `${colors.data_2}`
19
- : item == 'data-3'
20
- ? `${colors.data_3}`
21
- : item == 'data-4'
22
- ? `${colors.data_4}`
23
- : item == 'data-5'
24
- ? `${colors.data_5}`
25
- : item == 'data-6'
26
- ? `${colors.data_6}`
27
- : item == 'data-7'
28
- ? `${colors.data_7}`
29
- : item == 'data-8'
30
- ? `${colors.data_8}`
31
- : ''
18
+ return regex.test(item)
19
+ ? `${colors[`data_${item[item.length - 1]}`]}`
20
+ : item
32
21
  })
33
22
  return newArray
34
23
  }
@@ -72,13 +61,13 @@ class pbChart {
72
61
  if (this.options.type == 'variablepie' || this.options.type == 'pie'){
73
62
  this.setupPieChart(options)
74
63
  } else if (this.options.type == 'gauge') {
75
- this.setupGauge()
64
+ this.setupGauge(options)
76
65
  } else {
77
66
  this.setupChart(options)
78
67
  }
79
68
  }
80
69
 
81
- setupGauge() {
70
+ setupGauge(options) {
82
71
  highchartsMore(Highcharts)
83
72
  solidGauge(Highcharts)
84
73
  Highcharts.setOptions(highchartsTheme)
@@ -128,19 +117,21 @@ class pbChart {
128
117
  pointFormat: this.defaults.tooltipHtml,
129
118
  followPointer: true,
130
119
  },
120
+ colors: options.colors !== undefined && options.colors.length > 0 ? mapColors(options.colors) : highchartsTheme.colors,
131
121
  plotOptions: {
132
122
  series: {
133
123
  animation: !this.defaults.disableAnimation,
134
124
  },
135
125
  solidgauge: {
126
+ borderColor: options.colors !== undefined && options.colors.length === 1 ? mapColors(options.colors).join() : highchartsTheme.colors[0],
136
127
  dataLabels: {
137
128
  format: `<span class="prefix">${this.defaults.prefix}</span>` +
138
129
  '<span class="fix">{y:,f}</span>' +
139
130
  `<span class="suffix">${this.defaults.suffix}</span>`,
140
- },
141
- },
131
+ } },
142
132
  },
143
- })
133
+ },
134
+ )
144
135
  document.querySelectorAll('.gauge-pane').forEach((pane) => pane.setAttribute('stroke-linejoin', 'round'))
145
136
  if (document.querySelector('.prefix')) {
146
137
  document.querySelectorAll('.prefix').forEach((prefix) => prefix.setAttribute('y', '28'))
@@ -12,6 +12,7 @@ $red: #FF2229;
12
12
  $yellow: #F9BB00;
13
13
  $green: #00CA74;
14
14
  $orange: #FD804C;
15
+ $default: #93a8b8;
15
16
  $colors: (
16
17
  royal: $royal,
17
18
  purple: $purple,
@@ -19,7 +20,8 @@ $colors: (
19
20
  red: $red,
20
21
  yellow: $yellow,
21
22
  green: $green,
22
- orange: $orange
23
+ orange: $orange,
24
+ default: $default,
23
25
  );
24
26
 
25
27
  /* Specialty Gradient -----------------*/
@@ -0,0 +1,3 @@
1
+ .cursor_pointer {
2
+ cursor: pointer;
3
+ }
@@ -0,0 +1,23 @@
1
+ .display_block {
2
+ display: block;
3
+ }
4
+
5
+ .display_inline_block {
6
+ display: inline-block;
7
+ }
8
+
9
+ .display_inline {
10
+ display: inline;
11
+ }
12
+
13
+ .display_flex {
14
+ display: flex;
15
+ }
16
+
17
+ .display_inline_flex {
18
+ display: inline-flex;
19
+ }
20
+
21
+ .display_hidden {
22
+ display: none;
23
+ }
@@ -63,10 +63,22 @@ const shadowProps = ({ shadow }) => {
63
63
  return css
64
64
  }
65
65
 
66
+ const displayProps = ({ display }) => {
67
+ let css = ''
68
+ css += display ? `display_${display} ` : ''
69
+ return css
70
+ }
71
+
72
+ const cursorProps = ({ cursor }) => {
73
+ let css = ''
74
+ css += cursor ? `cursor_${cursor} ` : ''
75
+ return css
76
+ }
77
+
66
78
  // All Exported as a single function
67
79
  export const globalProps = (props, defaultProps = {}) => {
68
80
  const allProps = { ...props, ...defaultProps }
69
- return spacingProps(allProps) + darkProps(allProps) + maxWidthProps(allProps) + zIndexProps(allProps) + numberSpacingProps(allProps) + shadowProps(allProps)
81
+ return spacingProps(allProps) + darkProps(allProps) + maxWidthProps(allProps) + zIndexProps(allProps) + numberSpacingProps(allProps) + shadowProps(allProps) + displayProps(allProps) + cursorProps(allProps)
70
82
  }
71
83
 
72
84
  export const deprecatedProps = (kit, props = []) => {
@@ -17,6 +17,8 @@ module Playbook
17
17
  z_index_props,
18
18
  number_spacing_props,
19
19
  shadow_props,
20
+ display_props,
21
+ cursor_props,
20
22
  ].compact.join(" ")
21
23
  end
22
24
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Cursor
5
+ def self.included(base)
6
+ base.prop :cursor
7
+ end
8
+
9
+ def cursor_props
10
+ selected_props = cursor_options.keys.select { |sk| try(sk) }
11
+ return nil unless selected_props.present?
12
+
13
+ selected_props.map do |k|
14
+ cursor_value = send(k)
15
+ "cursor_#{cursor_value}" if cursor_values.include? cursor_value
16
+ end.compact.join(" ")
17
+ end
18
+
19
+ def cursor_options
20
+ {
21
+ cursor: "cursor",
22
+ }
23
+ end
24
+
25
+ def cursor_values
26
+ %w[pointer]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Display
5
+ def self.included(base)
6
+ base.prop :display
7
+ end
8
+
9
+ def display_props
10
+ selected_props = display_options.keys.select { |sk| try(sk) }
11
+ return nil unless selected_props.present?
12
+
13
+ selected_props.map do |k|
14
+ display_value = send(k)
15
+ "display_#{display_value}" if display_values.include? display_value
16
+ end.compact.join(" ")
17
+ end
18
+
19
+ def display_options
20
+ {
21
+ display: "display",
22
+ }
23
+ end
24
+
25
+ def display_values
26
+ %w[block inline_block inline flex inline_flex hidden]
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "action_view/railtie"
4
- require "view_component/engine"
5
4
  require "webpacker/react"
6
5
 
7
6
  module Playbook
@@ -5,6 +5,8 @@ require "playbook/spacing"
5
5
  require "playbook/z_index"
6
6
  require "playbook/number_spacing"
7
7
  require "playbook/shadow"
8
+ require "playbook/display"
9
+ require "playbook/cursor"
8
10
 
9
11
  module Playbook
10
12
  class KitBase < ViewComponent::Base
@@ -15,6 +17,8 @@ module Playbook
15
17
  include Playbook::ZIndex
16
18
  include Playbook::NumberSpacing
17
19
  include Playbook::Shadow
20
+ include Playbook::Display
21
+ include Playbook::Cursor
18
22
 
19
23
  prop :id
20
24
  prop :data, type: Playbook::Props::Hash, default: {}
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Playbook
4
4
  PREVIOUS_VERSION = "10.17.0"
5
- VERSION = "10.17.0"
5
+ VERSION = "10.18.0"
6
6
  end
data/lib/playbook.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "view_component"
4
+
3
5
  require "playbook/version"
4
6
  require "playbook/engine"
5
7
  require "playbook/props"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.17.0
4
+ version: 10.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-12-10 00:00:00.000000000 Z
12
+ date: 2022-01-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -101,14 +101,14 @@ dependencies:
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: '2.23'
104
+ version: '2.47'
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: '2.23'
111
+ version: '2.47'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: webpacker-react
114
114
  requirement: !ruby/object:Gem::Requirement
@@ -424,6 +424,9 @@ files:
424
424
  - app/pb_kits/playbook/pb_button/docs/_button_loading.md
425
425
  - app/pb_kits/playbook/pb_button/docs/_button_options.html.erb
426
426
  - app/pb_kits/playbook/pb_button/docs/_button_options.jsx
427
+ - app/pb_kits/playbook/pb_button/docs/_button_size.html.erb
428
+ - app/pb_kits/playbook/pb_button/docs/_button_size.jsx
429
+ - app/pb_kits/playbook/pb_button/docs/_button_size.md
427
430
  - app/pb_kits/playbook/pb_button/docs/_footer.md
428
431
  - app/pb_kits/playbook/pb_button/docs/example.yml
429
432
  - app/pb_kits/playbook/pb_button/docs/index.js
@@ -528,6 +531,7 @@ files:
528
531
  - app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_block.jsx
529
532
  - app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.html.erb
530
533
  - app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.jsx
534
+ - app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.md
531
535
  - app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.html.erb
532
536
  - app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.jsx
533
537
  - app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_inner_sizes.html.erb
@@ -940,6 +944,9 @@ files:
940
944
  - app/pb_kits/playbook/pb_form_pill/form_pill.rb
941
945
  - app/pb_kits/playbook/pb_gauge/_gauge.jsx
942
946
  - app/pb_kits/playbook/pb_gauge/_gauge.scss
947
+ - app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.html.erb
948
+ - app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.jsx
949
+ - app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.md
943
950
  - app/pb_kits/playbook/pb_gauge/docs/_gauge_default.html.erb
944
951
  - app/pb_kits/playbook/pb_gauge/docs/_gauge_default.jsx
945
952
  - app/pb_kits/playbook/pb_gauge/docs/_gauge_disable_animation.html.erb
@@ -1034,6 +1041,7 @@ files:
1034
1041
  - app/pb_kits/playbook/pb_icon_circle/docs/_footer.md
1035
1042
  - app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.html.erb
1036
1043
  - app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.jsx
1044
+ - app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.md
1037
1045
  - app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_default.html.erb
1038
1046
  - app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_default.jsx
1039
1047
  - app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_sizes.html.erb
@@ -1076,6 +1084,9 @@ files:
1076
1084
  - app/pb_kits/playbook/pb_image/docs/_description.md
1077
1085
  - app/pb_kits/playbook/pb_image/docs/_rounded_image.html.erb
1078
1086
  - app/pb_kits/playbook/pb_image/docs/_rounded_image.jsx
1087
+ - app/pb_kits/playbook/pb_image/docs/_transition_image.html.erb
1088
+ - app/pb_kits/playbook/pb_image/docs/_transition_image.jsx
1089
+ - app/pb_kits/playbook/pb_image/docs/_transition_image.md
1079
1090
  - app/pb_kits/playbook/pb_image/docs/example.yml
1080
1091
  - app/pb_kits/playbook/pb_image/docs/index.js
1081
1092
  - app/pb_kits/playbook/pb_image/image.html.erb
@@ -2033,6 +2044,8 @@ files:
2033
2044
  - app/pb_kits/playbook/types.js
2034
2045
  - app/pb_kits/playbook/utilities/_background_colors.scss
2035
2046
  - app/pb_kits/playbook/utilities/_colors.scss
2047
+ - app/pb_kits/playbook/utilities/_cursor.scss
2048
+ - app/pb_kits/playbook/utilities/_display.scss
2036
2049
  - app/pb_kits/playbook/utilities/_max_width.scss
2037
2050
  - app/pb_kits/playbook/utilities/_number_spacing.scss
2038
2051
  - app/pb_kits/playbook/utilities/_positioning.scss
@@ -2047,6 +2060,8 @@ files:
2047
2060
  - fonts/regular-min.js
2048
2061
  - lib/playbook.rb
2049
2062
  - lib/playbook/classnames.rb
2063
+ - lib/playbook/cursor.rb
2064
+ - lib/playbook/display.rb
2050
2065
  - lib/playbook/engine.rb
2051
2066
  - lib/playbook/forms.rb
2052
2067
  - lib/playbook/forms/builder.rb