playbook_ui 6.3.1 → 6.4.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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/packs/site_styles/docs/_kit_doc.scss +0 -1
  3. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +31 -17
  4. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.scss +16 -8
  5. data/app/pb_kits/playbook/pb_caption/_caption.jsx +3 -1
  6. data/app/pb_kits/playbook/pb_caption/_caption.scss +3 -0
  7. data/app/pb_kits/playbook/pb_caption/caption.rb +4 -1
  8. data/app/pb_kits/playbook/pb_caption/docs/_caption_variants.html.erb +1 -0
  9. data/app/pb_kits/playbook/pb_caption/docs/_caption_variants.jsx +16 -0
  10. data/app/pb_kits/playbook/pb_caption/docs/_caption_variants.md +3 -0
  11. data/app/pb_kits/playbook/pb_caption/docs/example.yml +2 -0
  12. data/app/pb_kits/playbook/pb_caption/docs/index.js +1 -0
  13. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +1 -0
  14. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +12 -6
  15. data/app/pb_kits/playbook/pb_date/_date.html.erb +32 -8
  16. data/app/pb_kits/playbook/pb_date/_date.jsx +76 -67
  17. data/app/pb_kits/playbook/pb_date/_date.scss +25 -0
  18. data/app/pb_kits/playbook/pb_date/date.rb +20 -11
  19. data/app/pb_kits/playbook/pb_date/docs/_date_alignment.html.erb +24 -0
  20. data/app/pb_kits/playbook/pb_date/docs/_date_alignment.jsx +32 -0
  21. data/app/pb_kits/playbook/pb_date/docs/_date_default.html.erb +1 -9
  22. data/app/pb_kits/playbook/pb_date/docs/_date_default_react.jsx +20 -0
  23. data/app/pb_kits/playbook/pb_date/docs/_date_default_react.md +3 -0
  24. data/app/pb_kits/playbook/pb_date/docs/_date_timezone.html.erb +51 -0
  25. data/app/pb_kits/playbook/pb_date/docs/_date_timezone.md +6 -0
  26. data/app/pb_kits/playbook/pb_date/docs/_date_variants.html.erb +27 -0
  27. data/app/pb_kits/playbook/pb_date/docs/_date_variants.jsx +39 -0
  28. data/app/pb_kits/playbook/pb_date/docs/_description.md +2 -0
  29. data/app/pb_kits/playbook/pb_date/docs/example.yml +6 -2
  30. data/app/pb_kits/playbook/pb_date/docs/index.js +3 -1
  31. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_dark.jsx +1 -1
  32. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_default.jsx +1 -1
  33. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +5 -2
  34. data/app/pb_kits/playbook/pb_icon/docs/_icon_default_dark.html.erb +3 -1
  35. data/app/pb_kits/playbook/pb_icon/docs/_icon_default_dark.jsx +7 -5
  36. data/app/pb_kits/playbook/pb_nav/_horizontal_nav.scss +6 -4
  37. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +18 -14
  38. data/app/pb_kits/playbook/pb_radio/_radio.scss +9 -4
  39. data/app/pb_kits/playbook/pb_select/_select.scss +8 -4
  40. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +6 -3
  41. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +35 -37
  42. data/app/pb_kits/playbook/pb_table/styles/_hover.scss +15 -12
  43. data/app/pb_kits/playbook/pb_table/styles/_mobile.scss +6 -4
  44. data/app/pb_kits/playbook/pb_table/styles/_table-dark.scss +6 -4
  45. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +4 -4
  46. data/app/pb_kits/playbook/pb_time/_time.jsx +7 -5
  47. data/app/pb_kits/playbook/pb_time/docs/_time_dark.jsx +0 -2
  48. data/app/pb_kits/playbook/pb_time/docs/_time_default.jsx +1 -3
  49. data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.jsx +0 -3
  50. data/app/pb_kits/playbook/pb_time/docs/_time_timezone.jsx +59 -0
  51. data/app/pb_kits/playbook/pb_time/docs/_time_timezone.md +11 -0
  52. data/app/pb_kits/playbook/pb_time/docs/example.yml +1 -0
  53. data/app/pb_kits/playbook/pb_time/docs/index.js +1 -0
  54. data/app/pb_kits/playbook/pb_title/_title.jsx +1 -1
  55. data/app/pb_kits/playbook/pb_title/_title.scss +5 -5
  56. data/app/pb_kits/playbook/pb_title/docs/_title_variants.html.erb +1 -0
  57. data/app/pb_kits/playbook/pb_title/docs/_title_variants.jsx +17 -0
  58. data/app/pb_kits/playbook/pb_title/docs/_title_variants.md +3 -0
  59. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  60. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  61. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -2
  62. data/lib/playbook/version.rb +1 -1
  63. metadata +17 -2
  64. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18865e3e500c379cda9c48bca36f73691ffb01cc29c03fc2d758612bcec45c33
4
- data.tar.gz: 60795da94ab1b4c14909ac9f6028470866af82b02b7a22b26a9223a7a2585c46
3
+ metadata.gz: 0c5b7e2c43b42ee78da647dd0633e8377ec033c91290dc4bc2cedcd6c4d8afff
4
+ data.tar.gz: 42acc945643e2a6269fd8fc900fdc8874c5a4fcb27b26daab9b362d4851a1c6a
5
5
  SHA512:
6
- metadata.gz: eab31af5787a1bfef070b228d13a7369b7d1f4037e11b81798d34eebbfcba3dd476290730214e999f0a8c8583f8c2c93abae6ac1921b92da74e7db35cb987b00
7
- data.tar.gz: '08c04a8e5cffe38491eb21971596f1003708b5a04c1bd7e18f2bedbc42c8b4cb955da9ac60af293e12e42cf57e7b55918b9936a30c7c8a91df460cbd3d41c833'
6
+ metadata.gz: 4c07c0929e4c7a4cb31de00fad7a166bdbe07cdb55bc64c2fc268afd1509acfbd2b2f3814393d38c044289d930b56c1ede0e7a0dc687730fe67e5caf19b6d241
7
+ data.tar.gz: 2964f0ebeec2ae295b307f628d4a1076cc6d6a034aefafe98c8bd7db1675dbabe451b8faf6d93326b8bb83c9e1245d9a34572a7d00edb6a2028cc204464cd47a
@@ -114,7 +114,6 @@
114
114
  background: $bg_dark;
115
115
 
116
116
  .pb--kit-example {
117
- color: $white;
118
117
 
119
118
  &::after {
120
119
  background: $border-dark;
@@ -10,7 +10,8 @@ $pb_button_size: 40px;
10
10
  $pb_button_v_padding: 7px;
11
11
  $pb_button_h_padding: 34px;
12
12
  $pb_button_hover_darken: 4%;
13
- $pb_button_border_width: 1px;
13
+ $pb_button_border_width: 0px;
14
+
14
15
 
15
16
  @mixin pb_button($bg: $primary_action, $color: $text_dk_default, $border: transparent) {
16
17
  text-rendering: optimizeLegibility;
@@ -47,16 +48,17 @@ $pb_button_border_width: 1px;
47
48
  visibility: visible;
48
49
  }
49
50
 
50
- &:hover {
51
+ &:hover, &:focus {
51
52
  outline: none;
53
+
52
54
  }
53
55
 
54
- &:active,
55
- &:focus {
56
+ &:active {
56
57
  outline: none;
57
58
  border-width: $pb_button_border_width;
58
59
  border-color: darken($bg, $pb_button_hover_darken);
59
60
  }
61
+
60
62
  };
61
63
 
62
64
  @mixin pb_button_hover($bg: darken($primary_action, $pb_button_hover_darken)){
@@ -67,8 +69,10 @@ $pb_button_border_width: 1px;
67
69
  @mixin pb_button_primary {
68
70
  @include pb_button;
69
71
 
70
- &:hover {
71
- @include pb_button_hover;
72
+ @media (hover:hover) {
73
+ &:hover {
74
+ @include pb_button_hover;
75
+ }
72
76
  }
73
77
  }
74
78
 
@@ -76,17 +80,21 @@ $pb_button_border_width: 1px;
76
80
  @mixin pb_button_secondary {
77
81
  @include pb_button(rgba($primary_action, 0.05), $primary_action);
78
82
 
79
- &:hover {
80
- @include pb_button_hover(rgba($primary_action, $opacity_3));
81
- }
83
+ @media (hover:hover) {
84
+ &:hover {
85
+ @include pb_button_hover(rgba($primary_action, $opacity_3));
86
+ }
87
+ }
82
88
  }
83
89
 
84
90
  // Link =========================
85
91
  @mixin pb_button_link {
86
92
  @include pb_button($transparent, $primary_action);
87
93
 
88
- &:hover {
89
- @include pb_button_hover($transparent);
94
+ @media (hover:hover) {
95
+ &:hover {
96
+ @include pb_button_hover($transparent);
97
+ }
90
98
  }
91
99
  }
92
100
 
@@ -120,8 +128,10 @@ $pb_button_border_width: 1px;
120
128
  @mixin pb_button_primary_dark{
121
129
  @include pb_button($primary_action);
122
130
 
123
- &:hover {
124
- @include pb_button_hover($bg: darken($primary_action, $pb_button_hover_darken));
131
+ @media (hover:hover) {
132
+ &:hover {
133
+ @include pb_button_hover($bg: darken($primary_action, $pb_button_hover_darken));
134
+ }
125
135
  }
126
136
  }
127
137
 
@@ -129,8 +139,10 @@ $pb_button_border_width: 1px;
129
139
  @mixin pb_button_secondary_dark{
130
140
  @include pb_button(rgba($white, 0.2), $white);
131
141
 
132
- &:hover {
133
- @include pb_button_hover(rgba($primary_action, $opacity_2));
142
+ @media (hover:hover) {
143
+ &:hover {
144
+ @include pb_button_hover(rgba($primary_action, $opacity_2));
145
+ }
134
146
  }
135
147
  }
136
148
 
@@ -138,8 +150,10 @@ $pb_button_border_width: 1px;
138
150
  @mixin pb_button_link_dark {
139
151
  @include pb_button($transparent, $primary_action);
140
152
 
141
- &:hover {
142
- @include pb_button_hover($transparent);
153
+ @media (hover:hover) {
154
+ &:hover {
155
+ @include pb_button_hover($transparent);
156
+ }
143
157
  }
144
158
  }
145
159
 
@@ -13,13 +13,17 @@
13
13
  & > [class^=pb_button] {
14
14
  margin-right: $space-xs;
15
15
 
16
- &:hover {
17
- background-color:darken($royal, 20%);
16
+ @media (hover:hover) {
17
+ &:hover {
18
+ background-color:darken($royal, 20%);
19
+ }
18
20
  }
19
21
 
20
22
  &[class*=secondary] {
21
- &:hover {
22
- background-color:rgba($primary_action, $opacity_3)
23
+ @media (hover:hover) {
24
+ &:hover {
25
+ background-color:rgba($primary_action, $opacity_3)
26
+ }
23
27
  }
24
28
  }
25
29
 
@@ -42,13 +46,17 @@
42
46
  width: 100%;
43
47
  margin-bottom: $space-xs;
44
48
 
45
- &:hover {
46
- background-color:darken($royal, 20%);
49
+ @media (hover:hover) {
50
+ &:hover {
51
+ background-color:darken($royal, 20%);
52
+ }
47
53
  }
48
54
 
49
55
  &[class*=secondary] {
50
- &:hover {
51
- background-color:rgba($primary_action, $opacity_3)
56
+ @media (hover:hover) {
57
+ &:hover {
58
+ background-color:rgba($primary_action, $opacity_3)
59
+ }
52
60
  }
53
61
  }
54
62
 
@@ -14,6 +14,7 @@ type CaptionProps = {
14
14
  size?: "xs" | "sm" | "md" | "lg" | "xl",
15
15
  tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span" | "div",
16
16
  text?: string,
17
+ variant?: null | "link",
17
18
  }
18
19
 
19
20
  const Caption = (props: CaptionProps) => {
@@ -26,13 +27,14 @@ const Caption = (props: CaptionProps) => {
26
27
  size = 'md',
27
28
  tag = 'div',
28
29
  text,
30
+ variant = null,
29
31
  } = props
30
32
  const Tag = `${tag}`
31
33
 
32
34
  const ariaProps = buildAriaProps(aria)
33
35
  const dataProps = buildDataProps(data)
34
36
  const css = classnames(
35
- buildCss('pb_caption_kit', size),
37
+ buildCss('pb_caption_kit', size, variant),
36
38
  className,
37
39
  globalProps(props)
38
40
  )
@@ -9,6 +9,9 @@
9
9
 
10
10
  &[class^=pb_caption_kit_xs] {
11
11
  @include caption_xs;
12
+ &[class*=_link] {
13
+ color: $primary;
14
+ }
12
15
  }
13
16
  &[class*=dark]{
14
17
  @include caption_dark
@@ -14,9 +14,12 @@ module Playbook
14
14
  values: %w[h1 h2 h3 h4 h5 h6 p span div],
15
15
  default: "div"
16
16
  prop :text
17
+ prop :variant, type: Playbook::Props::Enum,
18
+ values: [nil, "link"],
19
+ default: nil
17
20
 
18
21
  def classname
19
- generate_classname("pb_caption_kit", size)
22
+ generate_classname("pb_caption_kit", size, variant)
20
23
  end
21
24
  end
22
25
  end
@@ -0,0 +1 @@
1
+ <%= pb_rails("caption", props: { text: "Subcaption (link)", size: 'xs', variant: "link" }) %>
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import { Caption } from '../../'
3
+
4
+ const CaptionVariants = () => {
5
+ return (
6
+ <div>
7
+ <Caption
8
+ size="xs"
9
+ text="Subcaption (link)"
10
+ variant="link"
11
+ />
12
+ </div>
13
+ )
14
+ }
15
+
16
+ export default CaptionVariants
@@ -0,0 +1,3 @@
1
+ Wrap anchor tags around the kit to make it clickable.
2
+
3
+ Link variant can only be applied to size `xs`.
@@ -1,7 +1,9 @@
1
1
  examples:
2
2
  rails:
3
3
  - caption_light: Light UI
4
+ - caption_variants: Variants
4
5
  - caption_dark: Dark UI
5
6
  react:
6
7
  - caption_light: Light UI
8
+ - caption_variants: Variants
7
9
  - caption_dark: Dark UI
@@ -1,2 +1,3 @@
1
1
  export { default as CaptionDark } from './_caption_dark.jsx'
2
2
  export { default as CaptionLight } from './_caption_light.jsx'
3
+ export { default as CaptionVariants } from './_caption_variants.jsx'
@@ -53,6 +53,7 @@ $pb_card_padding:(
53
53
  }
54
54
 
55
55
  @mixin pb_card_dark {
56
+ color: $white;
56
57
  @include pb_card($card_dark, $border_dark);
57
58
  }
58
59
 
@@ -1,8 +1,10 @@
1
1
  @import "../tokens/colors";
2
+ @import "../tokens/transition";
2
3
  $transition: $transition_cubic;
3
4
 
4
5
  [class^=pb_checkbox_kit] {
5
6
  display: inline-flex;
7
+ cursor: pointer;
6
8
  .pb_checkbox_label {
7
9
  padding-left: $space_xs;
8
10
  cursor: pointer;
@@ -15,7 +17,8 @@ $transition: $transition_cubic;
15
17
  width: 22px;
16
18
  border: solid $border_light 2px;
17
19
  border-radius: $border_rad_light;
18
- .check_icon{
20
+ transition: background $transition_default ease, border-color $transition_default ease;
21
+ .check_icon {
19
22
  opacity: 0;
20
23
  position: relative;
21
24
  top: -2px;
@@ -26,9 +29,10 @@ $transition: $transition_cubic;
26
29
 
27
30
  }
28
31
  }
29
-
30
- &:hover input ~ .pb_checkbox_checkmark {
31
- border-color: $primary_action;
32
+ @media (hover:hover) {
33
+ &:hover input ~ .pb_checkbox_checkmark {
34
+ border-color: $primary_action;
35
+ }
32
36
  }
33
37
 
34
38
  input {
@@ -58,8 +62,10 @@ $transition: $transition_cubic;
58
62
  border-color: $primary_action;
59
63
  }
60
64
 
61
- &:hover .pb_checkbox_checkmark {
62
- border-color: $primary_action;
65
+ @media (hover:hover) {
66
+ &:hover .pb_checkbox_checkmark {
67
+ border-color: $primary_action;
68
+ }
63
69
  }
64
70
 
65
71
  &.error {
@@ -1,14 +1,38 @@
1
1
  <%= content_tag(:div,
2
2
  id: object.id,
3
3
  data: object.data,
4
- class: object.classname) do %>
5
- <% if object.size == "lg" %>
6
- <%= pb_rails("title", props: { text: object.lg_date, size: 3 }) %>
7
- <% elsif object.size == "sm" %>
8
- <%= pb_rails("icon", props: { icon: "calendar", fixed_width: true }) %>
9
- <%= pb_rails("title", props: { tag: "span", text: object.sm_date, size: 4 }) %>
10
- <% else %>
11
- <%= pb_rails("title", props: { text: object.xs_date, size: 4 }) %>
4
+ class: object.classname,
5
+ aria: object.aria) do %>
6
+
7
+ <!-- icon -->
8
+ <% if object.show_icon %>
9
+ <%= pb_rails("body", props: {
10
+ color: "light",
11
+ tag: "div",
12
+ }) do %>
13
+ <%= pb_rails("icon", props: { icon: "calendar-alt", fixed_width: true }) %>
14
+ <% end %>
15
+ <% end %>
16
+
17
+ <!-- day_of_week -->
18
+ <% if object.show_day_of_week %>
19
+ <%= pb_rails("title", props: { tag: "div", text: object.date_day_of_week, size: 4 }) %>
20
+ <%= pb_rails("body", props: {
21
+ text: "•",
22
+ color: "light",
23
+ tag: "div",
24
+ }) %>
25
+ <% end %>
26
+
27
+ <!-- month day, year -->
28
+
29
+ <%# if not current year %>
30
+ <% if object.year.to_s == DateTime.now.year.to_s %>
31
+ <%= pb_rails("title", props: { tag: "div", text: "#{object.month} #{object.day}", size: 4 }) %>
32
+ <%# if is current year %>
33
+ <% else %>
34
+ <%= pb_rails("title", props: { tag: "div", text: "#{object.month} #{object.day}, #{object.year}", size: 4 }) %>
12
35
  <% end %>
36
+
13
37
  <% end %>
14
38
 
@@ -2,82 +2,91 @@
2
2
 
3
3
  import React from 'react'
4
4
  import DateTime from '../pb_kit/dateTime.js'
5
- import { Icon } from '../'
5
+ import { Body, Icon, Title } from '../'
6
6
  import classnames from 'classnames'
7
7
  import { globalProps } from '../utilities/globalProps.js'
8
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
8
9
 
9
- const defaultDateString = (value: DateTime) => {
10
- const weekday = value.toWeekday().toUpperCase()
11
- const month = value.toMonth().toUpperCase()
12
- const day = value.toDay()
13
-
14
- return `${weekday} · ${month} ${day}`
15
- }
16
-
17
- const largeDateString = (value: DateTime) => {
18
- const month = value.toMonth().toUpperCase()
19
- const day = value.toDay()
20
-
21
- return `${month} ${day}`
22
- }
23
-
24
- type DateSubcomponent = {
25
- value: DateTime,
10
+ type PbDateProps = {
11
+ aria: Object,
12
+ date: string | date,
13
+ className?: string,
14
+ data?: Object,
15
+ id?: string,
16
+ showIcon?: boolean,
17
+ showDayOfWeek?: boolean,
18
+ alignment?: "left" | "center" | "right"
26
19
  }
27
20
 
28
- const ExtraSmallDate = ({ value, ...props }: DateSubcomponent) => (
29
- <h3 className={classnames('pb_title_kit_4', globalProps(props))}>
30
- {defaultDateString(value)}
31
- </h3>
32
- )
33
-
34
- const SmallDate = ({ value, ...props }: DateSubcomponent) => (
35
- <h3 className={classnames('pb_title_kit_4', globalProps(props))}>
36
- <Icon
37
- fixedWidth
38
- icon="calendar"
39
- />
40
- {defaultDateString(value)}
41
- </h3>
42
- )
43
-
44
- const LargeDate = ({ value, ...props }: DateSubcomponent) => (
45
- <h3 className={classnames('pb_title_kit_3', globalProps(props))}>
46
- {largeDateString(value)}
47
- </h3>
48
- )
21
+ const PbDate = (props: PbDateProps) => {
22
+ const {
23
+ aria = {},
24
+ alignment = 'left',
25
+ className,
26
+ date,
27
+ data = {},
28
+ id,
29
+ showDayOfWeek = false,
30
+ showIcon = false,
31
+ } = props
49
32
 
50
- type PbDateProps = {
51
- size?: "xs" | "sm" | "lg",
52
- value?: string,
53
- className?: string
54
- }
33
+ const dateTimestamp = new DateTime({ value: date })
34
+ const weekday = dateTimestamp.toWeekday()
35
+ const month = dateTimestamp.toMonth()
36
+ const day = dateTimestamp.toDay()
37
+ const year = dateTimestamp.toYear()
38
+ const currentYear = new Date().getFullYear().toString()
55
39
 
56
- const PbDate = ({ size, value, className, ...props }: PbDateProps) => {
57
- const date = new DateTime({ value: value })
40
+ const ariaProps = buildAriaProps(aria)
41
+ const dataProps = buildDataProps(data)
58
42
 
59
- if (size == 'xs')
60
- return (
61
- <ExtraSmallDate
62
- {...props}
63
- className={className}
64
- value={date}
65
- />
66
- )
67
- if (size == 'lg')
68
- return (
69
- <LargeDate
70
- {...props}
71
- className={className}
72
- value={date}
73
- />
74
- )
43
+ const classes = classnames(
44
+ className,
45
+ buildCss('pb_date_kit', alignment),
46
+ globalProps(props)
47
+ )
75
48
  return (
76
- <SmallDate
77
- {...props}
78
- className={className}
79
- value={date}
80
- />
49
+ <div
50
+ {...ariaProps}
51
+ {...dataProps}
52
+ className={classes}
53
+ id={id}
54
+ >
55
+ <Title
56
+ size={4}
57
+ tag="h4"
58
+ >
59
+ <If condition={showIcon}>
60
+ <Body
61
+ color="light"
62
+ tag="span"
63
+ >
64
+ <Icon
65
+ fixedWidth
66
+ icon="calendar-alt"
67
+ />
68
+ </Body>
69
+ </If>
70
+ <If condition={showDayOfWeek}>
71
+ {weekday}
72
+ <Body
73
+ color="light"
74
+ tag="span"
75
+ text=" • "
76
+ />
77
+ </If>
78
+ <span>
79
+ {month}
80
+ {' '}
81
+ {day}
82
+ </span>
83
+ <If condition={currentYear != year}>
84
+ <span>
85
+ {` , ${year}`}
86
+ </span>
87
+ </If>
88
+ </Title>
89
+ </div>
81
90
  )
82
91
  }
83
92