playbook_ui 10.19.0.pre.popover.alpha1 → 10.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_button/_button.jsx +3 -3
  3. data/app/pb_kits/playbook/pb_button/_button.scss +0 -17
  4. data/app/pb_kits/playbook/pb_button/button.rb +3 -6
  5. data/app/pb_kits/playbook/pb_button/button.test.js +0 -13
  6. data/app/pb_kits/playbook/pb_button/docs/example.yml +0 -2
  7. data/app/pb_kits/playbook/pb_button/docs/index.js +0 -1
  8. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +3 -0
  9. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -0
  10. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +3 -0
  11. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +10 -1
  12. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_month_and_year.html.erb +5 -0
  13. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_month_and_year.jsx +18 -0
  14. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_month_and_year.md +1 -0
  15. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +2 -0
  16. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
  17. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_month_and_year_styles.scss +127 -0
  18. data/app/pb_kits/playbook/pb_image/_image.jsx +12 -14
  19. data/app/pb_kits/playbook/pb_image/docs/_custom_error_image.html.erb +1 -0
  20. data/app/pb_kits/playbook/pb_image/docs/_default_image.jsx +48 -35
  21. data/app/pb_kits/playbook/pb_image/docs/_rounded_image.jsx +46 -35
  22. data/app/pb_kits/playbook/pb_legend/_legend.jsx +1 -7
  23. data/app/pb_kits/playbook/pb_legend/_legend.scss +6 -2
  24. data/app/pb_kits/playbook/pb_legend/docs/_legend_colors.html.erb +4 -0
  25. data/app/pb_kits/playbook/pb_legend/docs/_legend_colors.jsx +29 -0
  26. data/app/pb_kits/playbook/pb_legend/docs/_legend_colors.md +2 -0
  27. data/app/pb_kits/playbook/pb_legend/docs/_legend_default.html.erb +2 -2
  28. data/app/pb_kits/playbook/pb_legend/docs/_legend_default.jsx +1 -1
  29. data/app/pb_kits/playbook/pb_legend/docs/example.yml +4 -4
  30. data/app/pb_kits/playbook/pb_legend/docs/index.js +1 -0
  31. data/app/pb_kits/playbook/pb_legend/legend.rb +1 -2
  32. data/app/pb_kits/playbook/pb_legend/legend.test.js +29 -0
  33. data/app/pb_kits/playbook/pb_popover/_popover.jsx +4 -2
  34. data/app/pb_kits/playbook/pb_popover/docs/_popover_close.html.erb +7 -7
  35. data/app/pb_kits/playbook/pb_popover/index.js +9 -4
  36. data/app/pb_kits/playbook/pb_popover/popover.html.erb +1 -1
  37. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +6 -2
  38. data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +0 -2
  39. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +3 -3
  40. data/app/pb_kits/playbook/pb_title/title.html.erb +2 -3
  41. data/lib/playbook/version.rb +2 -2
  42. metadata +12 -7
  43. data/app/pb_kits/playbook/pb_button/docs/_button_size.html.erb +0 -3
  44. data/app/pb_kits/playbook/pb_button/docs/_button_size.jsx +0 -26
  45. data/app/pb_kits/playbook/pb_button/docs/_button_size.md +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '090e97cafaabff3f06f58cca0ce4a1416d09f6baea9f828e51c93059f279f292'
4
- data.tar.gz: 580359a862a8567240f9759e2ab80b708688d528ddc054789e6f658352cc21e1
3
+ metadata.gz: 2aee1f2c048d8521387c720ec1de805f4b141ac36d596a51cd785cda18964425
4
+ data.tar.gz: c66e833a6eae63f445b75cb3c89845a9096e57c45771c085102d1f2ee1b5dac0
5
5
  SHA512:
6
- metadata.gz: 85c349d66339b000e6d7cb9077621b9e8d40852538d6e9eb7111947fabd0df9e11b3d2448a67609727c9fb915393ddf903140f43375be0947d5d749ffb6fb85a
7
- data.tar.gz: b3774dfcbf0315c3b2fde5e145e7e0e33c3ceb23e5371aa01120ccca6f7294e7883e1f19c89dc73cdc3af2664d7b3484f0d9de5835119e862424902ee153bbc9
6
+ metadata.gz: e232f695466a3fa606ef20b3416d2c4684e613ae6a278c3d7c957e502dcebecb6ad28109db1422a89928451bee0df24728d2e0bdfc30143ca5422e314bfc6c45
7
+ data.tar.gz: 45904dac97847a942877f532d363552702f762bee32c97e096a346efeb32d0fb8e55e7fc7b81ebcf767a0fb1b95ec722669eb989fe85b7f4f13606d130e2a16a
@@ -22,7 +22,7 @@ type ButtonPropTypes = {
22
22
  loading?: boolean,
23
23
  newWindow?: boolean,
24
24
  onClick?: EventHandler,
25
- size?: 'sm' | 'md' | 'lg',
25
+ size: 'large' | 'medium' | 'small',
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,
39
40
  type = 'inline',
40
41
  variant = 'primary',
41
- size = null,
42
42
  } = props
43
43
 
44
44
  let className = 'pb_button_kit'
45
45
 
46
- className += `${size !== null ? `_${size}` : ''}`
47
46
  className += `${variant !== null ? `_${variant}` : ''}`
48
47
  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,24 +1,7 @@
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
-
9
3
  [class^=pb_button_kit]{
10
4
  @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
-
22
5
  // Variants =================
23
6
  &[class*=_primary] {
24
7
  @include pb_button_primary;
@@ -18,9 +18,6 @@ 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
24
21
 
25
22
  def options
26
23
  {
@@ -47,12 +44,12 @@ module Playbook
47
44
  link ? "a" : "button"
48
45
  end
49
46
 
47
+ private
48
+
50
49
  def classname
51
- generate_classname("pb_button_kit", size, variant, full_width_class, disabled_class, loading_class)
50
+ generate_classname("pb_button_kit", variant, full_width_class, disabled_class, loading_class)
52
51
  end
53
52
 
54
- private
55
-
56
53
  def disabled_class
57
54
  disabled ? "disabled" : "enabled"
58
55
  end
@@ -89,16 +89,3 @@ 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
- })
@@ -7,7 +7,6 @@ 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
11
10
  react:
12
11
  - button_default: Button Variants
13
12
  - button_full_width: Button Full Width
@@ -16,4 +15,3 @@ examples:
16
15
  - button_block_content: Button Block Content
17
16
  - button_accessibility: Button Accessibility Options
18
17
  - button_options: Button Additional Options (onClick)
19
- - button_size: Button Size
@@ -5,4 +5,3 @@ 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'
@@ -40,6 +40,7 @@ type DatePickerProps = {
40
40
  onChange: (String) => void,
41
41
  pickerId?: String,
42
42
  placeholder?: String,
43
+ plugins?: Boolean,
43
44
  type?: String,
44
45
  yearRange?: Array,
45
46
  }
@@ -73,6 +74,7 @@ const DatePicker = (props: DatePickerProps) => {
73
74
  onChange = () => {},
74
75
  pickerId,
75
76
  placeholder = 'Select Date',
77
+ plugins = false,
76
78
  yearRange = [ 1900, 2100 ],
77
79
  } = props
78
80
 
@@ -100,6 +102,7 @@ const DatePicker = (props: DatePickerProps) => {
100
102
  mode: mode,
101
103
  onChange: onChange,
102
104
  pickerId: pickerId,
105
+ plugins: plugins,
103
106
  yearRange: yearRange,
104
107
  })
105
108
  }, [])
@@ -3,6 +3,7 @@
3
3
  @import "../tokens/colors";
4
4
  @import "./sass_partials/flatpickr_styles";
5
5
  @import "./sass_partials/inline_styles";
6
+ @import "./sass_partials/month_and_year_styles";
6
7
 
7
8
  [class^=pb_date_picker_kit] {
8
9
  .input_wrapper {
@@ -41,6 +41,8 @@ module Playbook
41
41
  required: true
42
42
  prop :placeholder, type: Playbook::Props::String,
43
43
  default: "Select Date"
44
+ prop :plugins, type: Playbook::Props::Boolean,
45
+ default: false
44
46
  prop :required, type: Playbook::Props::Boolean,
45
47
  default: false
46
48
  prop :year_range, type: Playbook::Props::Array,
@@ -64,6 +66,7 @@ module Playbook
64
66
  minDate: min_date,
65
67
  mode: mode,
66
68
  pickerId: picker_id,
69
+ plugins: plugins,
67
70
  required: required,
68
71
  yearRange: year_range,
69
72
  }.to_json.html_safe
@@ -1,4 +1,5 @@
1
1
  import flatpickr from 'flatpickr'
2
+ import monthSelectPlugin from 'flatpickr/dist/plugins/monthSelect'
2
3
 
3
4
  const datePickerHelper = (config) => {
4
5
  const {
@@ -13,6 +14,7 @@ const datePickerHelper = (config) => {
13
14
  mode,
14
15
  onChange = () => {},
15
16
  pickerId,
17
+ plugins,
16
18
  required,
17
19
  yearRange,
18
20
  } = config
@@ -50,6 +52,10 @@ const datePickerHelper = (config) => {
50
52
  }
51
53
  }
52
54
 
55
+ const setMonthAndYearPlugin = () => (
56
+ plugins ? [ monthSelectPlugin({ shorthand: true, dateFormat: 'F Y', altFormat: 'F Y' }) ] : []
57
+ )
58
+
53
59
  // ===========================================================
54
60
  // | Flatpickr initializer w/ config |
55
61
  // ===========================================================
@@ -97,6 +103,7 @@ const datePickerHelper = (config) => {
97
103
  onYearChange: [() => {
98
104
  yearChangeHook()
99
105
  }],
106
+ plugins: setMonthAndYearPlugin(),
100
107
  prevArrow: '<i class="far fa-angle-left"></i>',
101
108
  static: true,
102
109
  })
@@ -153,8 +160,10 @@ const datePickerHelper = (config) => {
153
160
  }
154
161
 
155
162
  // Adding dropdown icons to year and month selects
156
- picker.monthElements[0].insertAdjacentHTML('afterend', '<i class="far fa-angle-down month-dropdown-icon"></i>')
157
163
  dropdown.insertAdjacentHTML('afterend', '<i class="far fa-angle-down year-dropdown-icon" id="test-id"></i>')
164
+ if (picker.monthElements[0].parentElement) {
165
+ return picker.monthElements[0].insertAdjacentHTML('afterend', '<i class="far fa-angle-down month-dropdown-icon"></i>')
166
+ }
158
167
 
159
168
  // Remove readonly attribute for validation and or text input
160
169
  if (allowInput){
@@ -0,0 +1,5 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ label: "Date Picker",
3
+ plugins: true,
4
+ picker_id: "disabled_date"
5
+ }) %>
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+
3
+ import DatePicker from '../_date_picker'
4
+
5
+ const DatePickerMonthAndYear = (props) => {
6
+ return (
7
+ <div>
8
+ <DatePicker
9
+ label="Date Picker"
10
+ pickerId="disabled-date"
11
+ plugins
12
+ {...props}
13
+ />
14
+ </div>
15
+ )
16
+ }
17
+
18
+ export default DatePickerMonthAndYear
@@ -0,0 +1 @@
1
+ By default month&year plugin is disabled. To activate it set `plugins` prop to `true`. If you're using React just pass a `plugins` prop to the kit.
@@ -16,6 +16,7 @@ examples:
16
16
  - date_picker_year_range: Year Range
17
17
  - date_picker_anti_patterns: Anti-Patterns
18
18
  - date_picker_inline: Inline
19
+ - date_picker_month_and_year: Month & Year Only
19
20
 
20
21
 
21
22
  react:
@@ -34,3 +35,4 @@ examples:
34
35
  - date_picker_hooks: Hooks
35
36
  - date_picker_year_range: Year Range
36
37
  - date_picker_inline: Inline
38
+ - date_picker_month_and_year: Month & Year Only
@@ -13,3 +13,4 @@ export { default as DatePickerHooks } from './_date_picker_hooks.jsx'
13
13
  export { default as DatePickerFlatpickrMethods } from './_date_picker_flatpickr_methods.jsx'
14
14
  export { default as DatePickerYearRange } from './_date_picker_year_range.jsx'
15
15
  export { default as DatePickerInline } from './_date_picker_inline.jsx'
16
+ export { default as DatePickerMonthAndYear } from './_date_picker_month_and_year.jsx'
@@ -0,0 +1,127 @@
1
+ @import "../../tokens/colors";
2
+
3
+
4
+ .numInput {
5
+ border-left: none !important;
6
+ }
7
+
8
+ // Manual Import
9
+ .flatpickr-monthSelect-months {
10
+ margin: 10px 1px 3px 1px;
11
+ flex-wrap: wrap;
12
+ }
13
+
14
+ .flatpickr-monthSelect-month {
15
+ background: none;
16
+ border: 1px solid transparent;
17
+ border-radius: 4px;
18
+ -webkit-box-sizing: border-box;
19
+ box-sizing: border-box;
20
+ color: $text_lt_default;
21
+ cursor: pointer;
22
+ display: inline-block;
23
+ font-weight: 400;
24
+ margin: 0.5px;
25
+ justify-content: center;
26
+ padding: 10px;
27
+ position: relative;
28
+ -webkit-box-pack: center;
29
+ -webkit-justify-content: center;
30
+ -ms-flex-pack: center;
31
+ text-align: center;
32
+ width: 33%;
33
+ }
34
+
35
+ .flatpickr-monthSelect-month.flatpickr-disabled {
36
+ color: #eee;
37
+ }
38
+
39
+ .flatpickr-monthSelect-month.flatpickr-disabled:hover,
40
+ .flatpickr-monthSelect-month.flatpickr-disabled:focus {
41
+ cursor: not-allowed;
42
+ background: none !important;
43
+ }
44
+
45
+ .flatpickr-monthSelect-theme-dark {
46
+ background: #3f4458;
47
+ }
48
+
49
+ .flatpickr-monthSelect-theme-dark .flatpickr-current-month input.cur-year {
50
+ color: #fff;
51
+ }
52
+
53
+ .flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-prev-month,
54
+ .flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-next-month {
55
+ color: #fff;
56
+ fill: #fff;
57
+ }
58
+
59
+ .flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month {
60
+ color: rgba(255, 255, 255, 0.95);
61
+ }
62
+
63
+ .flatpickr-monthSelect-month.today {
64
+ border-color: #959ea9;
65
+ }
66
+
67
+ .flatpickr-monthSelect-month.inRange,
68
+ .flatpickr-monthSelect-month.inRange.today,
69
+ .flatpickr-monthSelect-month:hover,
70
+ .flatpickr-monthSelect-month:focus {
71
+ background: $active_light;
72
+ font-weight: $bold;
73
+ color: $text_lt_default;
74
+ cursor: pointer;
75
+ outline: 0;
76
+ }
77
+
78
+ .flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.inRange,
79
+ .flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:hover,
80
+ .flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:focus {
81
+ background: #646c8c;
82
+ border-color: #646c8c;
83
+ }
84
+
85
+ .flatpickr-monthSelect-month.today:hover,
86
+ .flatpickr-monthSelect-month.today:focus {
87
+ background: #959ea9;
88
+ border-color: #959ea9;
89
+ color: #fff;
90
+ }
91
+
92
+ .flatpickr-monthSelect-month.selected,
93
+ .flatpickr-monthSelect-month.startRange,
94
+ .flatpickr-monthSelect-month.endRange {
95
+ background-color: $primary;
96
+ font-weight: $bold;
97
+ box-shadow: none;
98
+ color: #fff;
99
+ border-color: $primary;
100
+ }
101
+
102
+ .flatpickr-monthSelect-month.startRange {
103
+ border-radius: 50px 0 0 50px;
104
+ }
105
+
106
+ .flatpickr-monthSelect-month.endRange {
107
+ border-radius: 0 50px 50px 0;
108
+ }
109
+
110
+ .flatpickr-monthSelect-month.startRange.endRange {
111
+ border-radius: 50px;
112
+ }
113
+
114
+ .flatpickr-monthSelect-month.inRange {
115
+ border-radius: 0;
116
+ box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
117
+ }
118
+
119
+ .flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.selected,
120
+ .flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.startRange,
121
+ .flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.endRange {
122
+ background: #80cbc4;
123
+ -webkit-box-shadow: none;
124
+ box-shadow: none;
125
+ color: #fff;
126
+ border-color: #80cbc4;
127
+ }
@@ -44,20 +44,18 @@ const Image = (props: ImageProps) => {
44
44
  const dataProps = buildDataProps(data)
45
45
 
46
46
  return (
47
- <div>
48
- <img
49
- {...ariaProps}
50
- {...dataProps}
51
- alt={alt}
52
- className={classes}
53
- data-src={url}
54
- id={id}
55
- onError={onError}
56
- rounded={+rounded}
57
- src={url}
58
- transition={transition}
59
- />
60
- </div>
47
+ <img
48
+ {...ariaProps}
49
+ {...dataProps}
50
+ alt={alt}
51
+ className={classes}
52
+ data-src={url}
53
+ id={id}
54
+ onError={onError}
55
+ rounded={+rounded}
56
+ src={url}
57
+ transition={transition}
58
+ />
61
59
  )
62
60
  }
63
61
 
@@ -49,6 +49,7 @@
49
49
  props: {
50
50
  alt: "This is the alt text!",
51
51
  on_error: "this.classList.add('image-error')",
52
+ padding_x: "none",
52
53
  rounded: true,
53
54
  size: "xs",
54
55
  url: "not_a_picture"
@@ -5,41 +5,54 @@ import Image from '../_image'
5
5
  const DefaultImage = (props) => {
6
6
  return (
7
7
  <>
8
- <Image
9
- alt="picture of a misty forest"
10
- size="xs"
11
- url="https://unsplash.it/500/400/?image=634"
12
- {...props}
13
- />
14
- <Image
15
- alt="picture of a misty forest"
16
- size="sm"
17
- url="https://unsplash.it/500/400/?image=634"
18
- {...props}
19
- />
20
- <Image
21
- alt="picture of a misty forest"
22
- size="md"
23
- url="https://unsplash.it/500/400/?image=634"
24
- {...props}
25
- />
26
- <Image
27
- alt="picture of a misty forest"
28
- size="lg"
29
- url="https://unsplash.it/500/400/?image=634"
30
- {...props}
31
- />
32
- <Image
33
- alt="picture of a misty forest"
34
- size="xl"
35
- url="https://unsplash.it/500/400/?image=634"
36
- {...props}
37
- />
38
- <Image
39
- alt="picture of a misty forest"
40
- url="https://unsplash.it/500/400/?image=634"
41
- {...props}
42
- />
8
+ <br />
9
+ <div>
10
+ <Image
11
+ alt="picture of a misty forest"
12
+ size="xs"
13
+ url="https://unsplash.it/500/400/?image=634"
14
+ {...props}
15
+ />
16
+ </div>
17
+ <div>
18
+ <Image
19
+ alt="picture of a misty forest"
20
+ size="sm"
21
+ url="https://unsplash.it/500/400/?image=634"
22
+ {...props}
23
+ />
24
+ </div>
25
+ <div>
26
+ <Image
27
+ alt="picture of a misty forest"
28
+ size="md"
29
+ url="https://unsplash.it/500/400/?image=634"
30
+ {...props}
31
+ />
32
+ </div>
33
+ <div>
34
+ <Image
35
+ alt="picture of a misty forest"
36
+ size="lg"
37
+ url="https://unsplash.it/500/400/?image=634"
38
+ {...props}
39
+ />
40
+ </div>
41
+ <div>
42
+ <Image
43
+ alt="picture of a misty forest"
44
+ size="xl"
45
+ url="https://unsplash.it/500/400/?image=634"
46
+ {...props}
47
+ />
48
+ </div>
49
+ <div>
50
+ <Image
51
+ alt="picture of a misty forest"
52
+ url="https://unsplash.it/500/400/?image=634"
53
+ {...props}
54
+ />
55
+ </div>
43
56
  </>
44
57
  )
45
58
  }
@@ -5,41 +5,52 @@ import Image from '../_image'
5
5
  const RoundedImage = (props) => {
6
6
  return (
7
7
  <>
8
- <Image
9
- alt=""
10
- rounded
11
- size="xs"
12
- url="https://unsplash.it/500/400/?image=634"
13
- {...props}
14
- />
15
- <Image
16
- alt=""
17
- rounded
18
- size="sm"
19
- url="https://unsplash.it/500/400/?image=634"
20
- {...props}
21
- />
22
- <Image
23
- alt=""
24
- rounded
25
- size="md"
26
- url="https://unsplash.it/500/400/?image=634"
27
- {...props}
28
- />
29
- <Image
30
- alt=""
31
- rounded
32
- size="lg"
33
- url="https://unsplash.it/500/400/?image=634"
34
- {...props}
35
- />
36
- <Image
37
- alt=""
38
- rounded
39
- size="xl"
40
- url="https://unsplash.it/500/400/?image=634"
41
- {...props}
42
- />
8
+ <br />
9
+ <div>
10
+ <Image
11
+ alt=""
12
+ rounded
13
+ size="xs"
14
+ url="https://unsplash.it/500/400/?image=634"
15
+ {...props}
16
+ />
17
+ </div>
18
+ <div>
19
+ <Image
20
+ alt=""
21
+ rounded
22
+ size="sm"
23
+ url="https://unsplash.it/500/400/?image=634"
24
+ {...props}
25
+ />
26
+ </div>
27
+ <div>
28
+ <Image
29
+ alt=""
30
+ rounded
31
+ size="md"
32
+ url="https://unsplash.it/500/400/?image=634"
33
+ {...props}
34
+ />
35
+ </div>
36
+ <div>
37
+ <Image
38
+ alt=""
39
+ rounded
40
+ size="lg"
41
+ url="https://unsplash.it/500/400/?image=634"
42
+ {...props}
43
+ />
44
+ </div>
45
+ <div>
46
+ <Image
47
+ alt=""
48
+ rounded
49
+ size="xl"
50
+ url="https://unsplash.it/500/400/?image=634"
51
+ {...props}
52
+ />
53
+ </div>
43
54
  </>
44
55
  )
45
56
  }
@@ -12,13 +12,7 @@ import Title from '../pb_title/_title'
12
12
  type LegendProps = {
13
13
  aria?: object,
14
14
  className?: string,
15
- color?: | "data_1"
16
- | "data_2"
17
- | "data_3"
18
- | "data_4"
19
- | "data_5"
20
- | "data_6"
21
- | "data_7",
15
+ color?: string,
22
16
  dark?: boolean,
23
17
  data?: object,
24
18
  id?: string,
@@ -20,5 +20,9 @@
20
20
  }
21
21
 
22
22
  [class^=pb_legend_kit] {
23
- @include indicator-colors($data_colors)
24
- }
23
+ @include indicator-colors($data_colors);
24
+ @include indicator-colors($status_colors);
25
+ @include indicator-colors($product_colors);
26
+ @include indicator-colors($category_colors)
27
+
28
+ }
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("legend", props: { color: "data_8", text: "Windows" }) %>
2
+ <%= pb_rails("legend", props: { color: "warning", text: "Windows" }) %>
3
+ <%= pb_rails("legend", props: { color: "windows", text: "Windows" }) %>
4
+ <%= pb_rails("legend", props: { color: "category_7", text: "Windows" }) %>
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import { Legend } from '../..'
3
+
4
+ const LegendColors = (props) => (
5
+ <div>
6
+ <Legend
7
+ color="data_8"
8
+ text="Windows"
9
+ {...props}
10
+ />
11
+ <Legend
12
+ color="warning"
13
+ text="Windows"
14
+ {...props}
15
+ />
16
+ <Legend
17
+ color="windows"
18
+ text="Windows"
19
+ {...props}
20
+ />
21
+ <Legend
22
+ color="category_7"
23
+ text="Windows"
24
+ {...props}
25
+ />
26
+ </div>
27
+ )
28
+
29
+ export default LegendColors
@@ -0,0 +1,2 @@
1
+ By default legend kit uses `data_1` color.
2
+ Pass the color prop and use any desired value from `$data_colors`, `$status_colors`, `$product_colors` and `$category_colors` list.
@@ -1,5 +1,5 @@
1
1
  <% labels = %W[Windows Doors Roofing Siding Solar Gutters Insulation Other] %>
2
2
 
3
- <% (1..7).each do |n, i| %>
4
- <%= pb_rails("legend", props: { color: "data_#{n}", text: "#{labels[n]}" }) %>
3
+ <% (0..7).each do |n, i| %>
4
+ <%= pb_rails("legend", props: { color: "data_#{n + 1}", text: "#{labels[n]}" }) %>
5
5
  <% end %>
@@ -2,7 +2,7 @@ import React from 'react'
2
2
 
3
3
  import Legend from '../_legend'
4
4
 
5
- const products = ['Windows', 'Doors', 'Roofing', 'Siding', 'Solar Gutters', 'Insulation', 'Other']
5
+ const products = ['Windows', 'Doors', 'Roofing', 'Siding', 'Solar', 'Gutters', 'Insulation', 'Other']
6
6
 
7
7
  const LegendDefault = (props) => (
8
8
  <div>
@@ -1,11 +1,11 @@
1
1
  examples:
2
-
2
+
3
3
  rails:
4
4
  - legend_default: Default
5
5
  - legend_prefix: With Prefix Text
6
-
7
-
8
-
6
+ - legend_colors: Colors
7
+
9
8
  react:
10
9
  - legend_default: Default
11
10
  - legend_prefix: With Prefix Text
11
+ - legend_colors: Colors
@@ -1,2 +1,3 @@
1
1
  export { default as LegendDefault } from './_legend_default.jsx'
2
2
  export { default as LegendPrefix } from './_legend_prefix.jsx'
3
+ export { default as LegendColors } from './_legend_colors'
@@ -3,8 +3,7 @@
3
3
  module Playbook
4
4
  module PbLegend
5
5
  class Legend < Playbook::KitBase
6
- prop :color, type: Playbook::Props::Enum,
7
- values: (1..7).map { |n| "data_#{n}" },
6
+ prop :color, type: Playbook::Props::String,
8
7
  default: "data_1"
9
8
  prop :prefix_text
10
9
  prop :text, required: true
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+
4
+ import Legend from './_legend'
5
+
6
+ test('returns namespaced class name', () => {
7
+ render(
8
+ <Legend
9
+ data={{ testid: 'primary-test' }}
10
+ text="Test colors"
11
+ />
12
+ )
13
+
14
+ const kit = screen.getByTestId('primary-test')
15
+ expect(kit).toHaveClass('pb_legend_kit_data_1')
16
+ })
17
+
18
+ test('color prop', () => {
19
+ render(
20
+ <Legend
21
+ color="category_17"
22
+ data={{ testid: 'primary-test' }}
23
+ text="Test colors"
24
+ />
25
+ )
26
+
27
+ const kit = screen.getByTestId('primary-test')
28
+ expect(kit).toHaveClass('pb_legend_kit_category_17')
29
+ })
@@ -150,14 +150,16 @@ export default class PbReactPopover extends React.Component<PbPopoverProps> {
150
150
  const targetIsReference =
151
151
  target.closest('.pb_popover_reference_wrapper') !== null
152
152
 
153
+ if (targetIsReference) return
154
+
153
155
  switch (closeOnClick) {
154
156
  case 'outside':
155
- if (!targetIsPopover || targetIsReference) {
157
+ if (!targetIsPopover) {
156
158
  shouldClosePopover(true)
157
159
  }
158
160
  break
159
161
  case 'inside':
160
- if (targetIsPopover || targetIsReference) {
162
+ if (targetIsPopover) {
161
163
  shouldClosePopover(true)
162
164
  }
163
165
  break
@@ -1,23 +1,23 @@
1
1
  <%= pb_rails("flex", props: {classname: "flex-container", spacing: "between"}) do %>
2
2
  <span>
3
- <%= pb_rails("button", props: { text: "Click Inside", variant: "secondary", id: "inside-popover-1" }) %>
3
+ <%= pb_rails("button", props: { text: "Click Inside", variant: "secondary", id: 'inside-popover-1' }) %>
4
4
  <%= pb_rails("popover", props: {
5
5
  close_on_click: "inside",
6
6
  trigger_element_id: "inside-popover-1",
7
7
  tooltip_id: "inside-tooltip-1",
8
- position: "bottom",
8
+ position: 'bottom',
9
9
  offset: true
10
10
  }) do %>
11
11
  Click on me!
12
12
  <% end %>
13
13
  </span>
14
14
  <span>
15
- <%= pb_rails("button", props: { text: "Click Outside", variant: "secondary", id: "outside-popover-1" }) %>
15
+ <%= pb_rails("button", props: { text: "Click Outside", variant: "secondary", id: 'outside-popover-1' }) %>
16
16
  <%= pb_rails("popover", props: {
17
17
  close_on_click: "outside",
18
18
  trigger_element_id: "outside-popover-1",
19
19
  tooltip_id: "outside-tooltip-1",
20
- position: "left",
20
+ position: 'left',
21
21
  offset: true
22
22
  }) do %>
23
23
  Click anywhere but me!
@@ -27,16 +27,16 @@
27
27
  <%= pb_rails("button", props: {
28
28
  text: "Click Anywhere",
29
29
  variant: "secondary",
30
- id: "any-popover-1"
30
+ id: 'any-popover-1'
31
31
  }) %>
32
32
  <%= pb_rails("popover", props: {
33
33
  close_on_click: "any",
34
34
  trigger_element_id: "any-popover-1",
35
35
  tooltip_id: "any-tooltip-1",
36
- position: "top",
36
+ position: 'top',
37
37
  offset: true
38
38
  }) do %>
39
39
  Click anything!
40
40
  <% end %>
41
41
  </span>
42
- <% end %>
42
+ <% end %>
@@ -36,14 +36,15 @@ export default class PbPopover extends PbEnhancedElement {
36
36
  }
37
37
 
38
38
  setTimeout(() => {
39
- this.toggleTooltip()
40
39
  this.popper.update()
40
+ this.toggleTooltip()
41
41
  }, 0)
42
42
  })
43
43
  }
44
44
 
45
45
  checkCloseTooltip() {
46
46
  document.querySelector('body').addEventListener('click', ({ target }) => {
47
+ const isTriggerElement = target.closest(`#${this.triggerElementId}`) !== null
47
48
  const isTooltipElement = target.closest(`#${this.tooltipId}`) !== null
48
49
 
49
50
  switch (this.closeOnClick) {
@@ -51,17 +52,21 @@ export default class PbPopover extends PbEnhancedElement {
51
52
  this.hideTooltip()
52
53
  break
53
54
  case 'outside':
54
- if (!isTooltipElement) {
55
+ if (isTooltipElement) {
56
+ this.checkCloseTooltip()
57
+ } else {
55
58
  this.hideTooltip()
56
59
  }
57
60
  break
58
61
  case 'inside':
59
- if (isTooltipElement) {
62
+ if (isTooltipElement || isTriggerElement) {
60
63
  this.hideTooltip()
64
+ } else {
65
+ this.checkCloseTooltip()
61
66
  }
62
67
  break
63
68
  }
64
- }, { once: true, capture: true })
69
+ }, { once: true })
65
70
  }
66
71
 
67
72
  hideTooltip() {
@@ -3,7 +3,7 @@
3
3
  class: object.classname,
4
4
  data: object.data,
5
5
  id: object.id) do %>
6
- <div class="pb_popover_tooltip hide" id="<%= object.tooltip_id %>" role="tooltip" style="<%= object.z_index_helper %>">
6
+ <div class="pb_popover_tooltip" id="<%= object.tooltip_id %>" role="tooltip" style="<%= object.z_index_helper %>">
7
7
  <div class="pb_popover_body <%= object.width_height_class_helper %> <%= object.popover_spacing_helper %>" style="<%= object.width_height_helper %>">
8
8
  <%= content.presence %>
9
9
  </div>
@@ -36,13 +36,15 @@ $section_colors_dark: (
36
36
  justify-content: center;
37
37
  }
38
38
  &[class*=_vertical] {
39
+ margin-left: $space_xs;
40
+ margin-right: $space_xs;
39
41
  &::after {
40
42
  @include section_separator_vertical(false);
41
43
  }
42
44
  }
43
-
45
+
44
46
  // Dark =========================
45
-
47
+
46
48
  &.dark {
47
49
  &::after {
48
50
  @include section_separator_horizontal(true);
@@ -59,6 +61,8 @@ $section_colors_dark: (
59
61
  }
60
62
  }
61
63
  &[class*=_vertical] {
64
+ margin-left: $space_xs;
65
+ margin-right: $space_xs;
62
66
  &::after {
63
67
  @include section_separator_vertical(true);
64
68
  }
@@ -10,8 +10,6 @@
10
10
  content: "";
11
11
  height: 100%;
12
12
  width: 1px;
13
- margin-left: $space_xs;
14
- margin-right: $space_xs;
15
13
  position: initial;
16
14
  z-index: 0;
17
15
  }
@@ -92,13 +92,13 @@
92
92
  .add-on {
93
93
  &-right {
94
94
  .add-on-card {
95
- border: 1px solid red;
95
+ border: 1px solid $error;
96
96
  border-left: 0;
97
97
  }
98
98
  }
99
99
  &-left {
100
100
  .add-on-card {
101
- border: 1px solid red;
101
+ border: 1px solid $error;
102
102
  border-right: 0;
103
103
  }
104
104
  }
@@ -169,7 +169,7 @@
169
169
  &-card {
170
170
  height: 45px;
171
171
  margin: 0;
172
- padding: 0;
172
+ padding: 0 !important;
173
173
  align-items: center;
174
174
  justify-content: center;
175
175
  width: 45px;
@@ -2,6 +2,5 @@
2
2
  aria: object.aria,
3
3
  id: object.id,
4
4
  data: object.data,
5
- class: object.classname) do %>
6
- <%= content.presence || object.text %>
7
- <% end %>
5
+ class: object.classname) do %><%= content.presence || object.text %><% end %>
6
+
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- PREVIOUS_VERSION = "10.18.1"
5
- VERSION = "10.19.0.pre.popover.alpha1"
4
+ PREVIOUS_VERSION = "10.18.0"
5
+ VERSION = "10.19.0"
6
6
  end
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.19.0.pre.popover.alpha1
4
+ version: 10.19.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: 2022-01-24 00:00:00.000000000 Z
12
+ date: 2022-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -426,9 +426,6 @@ files:
426
426
  - app/pb_kits/playbook/pb_button/docs/_button_loading.md
427
427
  - app/pb_kits/playbook/pb_button/docs/_button_options.html.erb
428
428
  - app/pb_kits/playbook/pb_button/docs/_button_options.jsx
429
- - app/pb_kits/playbook/pb_button/docs/_button_size.html.erb
430
- - app/pb_kits/playbook/pb_button/docs/_button_size.jsx
431
- - app/pb_kits/playbook/pb_button/docs/_button_size.md
432
429
  - app/pb_kits/playbook/pb_button/docs/_footer.md
433
430
  - app/pb_kits/playbook/pb_button/docs/example.yml
434
431
  - app/pb_kits/playbook/pb_button/docs/index.js
@@ -669,6 +666,9 @@ files:
669
666
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.md
670
667
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb
671
668
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx
669
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_month_and_year.html.erb
670
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_month_and_year.jsx
671
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_month_and_year.md
672
672
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_on_change.jsx
673
673
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_on_change.md
674
674
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb
@@ -684,6 +684,7 @@ files:
684
684
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_flatpickr_styles.scss
685
685
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_header_styles.scss
686
686
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss
687
+ - app/pb_kits/playbook/pb_date_picker/sass_partials/_month_and_year_styles.scss
687
688
  - app/pb_kits/playbook/pb_date_picker/sass_partials/_overrides.scss
688
689
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.jsx
689
690
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss
@@ -1163,6 +1164,9 @@ files:
1163
1164
  - app/pb_kits/playbook/pb_legend/_legend.scss
1164
1165
  - app/pb_kits/playbook/pb_legend/docs/_description.md
1165
1166
  - app/pb_kits/playbook/pb_legend/docs/_footer.md
1167
+ - app/pb_kits/playbook/pb_legend/docs/_legend_colors.html.erb
1168
+ - app/pb_kits/playbook/pb_legend/docs/_legend_colors.jsx
1169
+ - app/pb_kits/playbook/pb_legend/docs/_legend_colors.md
1166
1170
  - app/pb_kits/playbook/pb_legend/docs/_legend_default.html.erb
1167
1171
  - app/pb_kits/playbook/pb_legend/docs/_legend_default.jsx
1168
1172
  - app/pb_kits/playbook/pb_legend/docs/_legend_prefix.html.erb
@@ -1171,6 +1175,7 @@ files:
1171
1175
  - app/pb_kits/playbook/pb_legend/docs/index.js
1172
1176
  - app/pb_kits/playbook/pb_legend/legend.html.erb
1173
1177
  - app/pb_kits/playbook/pb_legend/legend.rb
1178
+ - app/pb_kits/playbook/pb_legend/legend.test.js
1174
1179
  - app/pb_kits/playbook/pb_line_graph/_line_graph.jsx
1175
1180
  - app/pb_kits/playbook/pb_line_graph/_line_graph.scss
1176
1181
  - app/pb_kits/playbook/pb_line_graph/docs/_description.md
@@ -2125,9 +2130,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
2125
2130
  version: '0'
2126
2131
  required_rubygems_version: !ruby/object:Gem::Requirement
2127
2132
  requirements:
2128
- - - ">"
2133
+ - - ">="
2129
2134
  - !ruby/object:Gem::Version
2130
- version: 1.3.1
2135
+ version: '0'
2131
2136
  requirements: []
2132
2137
  rubygems_version: 3.1.6
2133
2138
  signing_key:
@@ -1,3 +0,0 @@
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" }) %>
@@ -1,26 +0,0 @@
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
@@ -1 +0,0 @@
1
- By default button has the `md` size style, even if you don't explicitly pass a size prop.