playbook_ui 14.2.1 → 14.3.0.pre.alpha.revert3654PBNTR479removeextraspacingfromradiochildren3734

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +3 -3
  3. data/app/pb_kits/playbook/pb_badge/_badge.scss +2 -2
  4. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +1 -1
  5. data/app/pb_kits/playbook/pb_button/_button.scss +1 -1
  6. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_mixins.scss +2 -2
  7. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +1 -1
  8. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.tsx +3 -0
  9. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.html.erb +1 -1
  10. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +2 -0
  11. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.test.js +15 -0
  12. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_loading.html.erb +29 -0
  13. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_loading.jsx +43 -0
  14. data/app/pb_kits/playbook/pb_circle_icon_button/docs/example.yml +2 -0
  15. data/app/pb_kits/playbook/pb_circle_icon_button/docs/index.js +1 -0
  16. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleIcon.tsx +30 -24
  17. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +11 -7
  18. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.rb +2 -0
  19. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_no_icon.html.erb +10 -0
  20. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_no_icon.jsx +21 -0
  21. data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +2 -0
  22. data/app/pb_kits/playbook/pb_collapsible/docs/index.js +2 -1
  23. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +1 -1
  24. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_overrides.scss +2 -2
  25. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +4 -4
  26. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +4 -4
  27. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +4 -1
  28. data/app/pb_kits/playbook/pb_dialog/dialog.rb +3 -0
  29. data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +21 -0
  30. data/app/pb_kits/playbook/pb_dialog/dialog_footer.html.erb +4 -2
  31. data/app/pb_kits/playbook/pb_dialog/dialog_footer.rb +10 -1
  32. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +13 -0
  33. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.md +3 -0
  34. data/app/pb_kits/playbook/pb_dialog/docs/example.yml +1 -0
  35. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  36. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +2 -2
  37. data/app/pb_kits/playbook/pb_hashtag/_hashtag.tsx +16 -2
  38. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_link.html.erb +1 -1
  39. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_link.jsx +1 -1
  40. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_link.md +1 -1
  41. data/app/pb_kits/playbook/pb_hashtag/hashtag.html.erb +1 -1
  42. data/app/pb_kits/playbook/pb_hashtag/hashtag.rb +9 -2
  43. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +16 -0
  44. data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.html.erb +1 -0
  45. data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.rb +11 -0
  46. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_link.html.erb +1 -1
  47. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_link.jsx +1 -1
  48. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_link.md +1 -1
  49. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +13 -0
  50. data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +2 -2
  51. data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.html.erb +2 -1
  52. data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.rb +11 -0
  53. data/app/pb_kits/playbook/pb_icon/icon.rb +8 -0
  54. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +1 -1
  55. data/app/pb_kits/playbook/pb_label_value/_label_value.scss +1 -1
  56. data/app/pb_kits/playbook/pb_message/_message_mixins.scss +1 -1
  57. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +1 -1
  58. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_no_icon.html.erb +24 -0
  59. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_no_icon.jsx +88 -0
  60. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_no_icon_rails.md +1 -0
  61. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_no_icon_react.md +1 -0
  62. data/app/pb_kits/playbook/pb_nav/docs/example.yml +2 -0
  63. data/app/pb_kits/playbook/pb_nav/docs/index.js +4 -3
  64. data/app/pb_kits/playbook/pb_pagination/_pagination.scss +3 -1
  65. data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +3 -3
  66. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +2 -2
  67. data/app/pb_kits/playbook/pb_phone_number_input/intlTelInput.scss +1290 -0
  68. data/app/pb_kits/playbook/pb_pill/_pill.scss +2 -2
  69. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +2 -2
  70. data/app/pb_kits/playbook/pb_radio/_radio.tsx +100 -50
  71. data/app/pb_kits/playbook/pb_radio/docs/_radio_children.jsx +56 -0
  72. data/app/pb_kits/playbook/pb_radio/docs/example.yml +1 -0
  73. data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
  74. data/app/pb_kits/playbook/pb_rich_text_editor/_previewer_mixin.scss +49 -13
  75. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +2 -14
  76. data/app/pb_kits/playbook/pb_rich_text_editor/_tiptap_styles.scss +23 -23
  77. data/app/pb_kits/playbook/pb_rich_text_editor/_trix_styles.scss +19 -27
  78. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb +21 -11
  79. data/app/pb_kits/playbook/pb_select/_select.scss +1 -1
  80. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +3 -3
  81. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_default_value.html.erb +1 -0
  82. data/app/pb_kits/playbook/pb_star_rating/docs/example.yml +1 -0
  83. data/app/pb_kits/playbook/pb_star_rating/index.js +11 -1
  84. data/app/pb_kits/playbook/pb_star_rating/star_rating.rb +3 -1
  85. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +1 -1
  86. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +1 -1
  87. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +4 -4
  88. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
  89. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.html.erb +2 -2
  90. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +46 -2
  91. data/app/pb_kits/playbook/pb_toggle/_toggle.scss +3 -3
  92. data/dist/chunks/{_typeahead-Cq7RLPBA.js → _typeahead-BWUFVlae.js} +3 -3
  93. data/dist/chunks/{_weekday_stacked-Cykj5kLZ.js → _weekday_stacked-DpRkKl3_.js} +2 -2
  94. data/dist/chunks/{lib-DErGXNy3.js → lib-D9uVVKnh.js} +1 -1
  95. data/dist/chunks/{pb_form_validation-BC6kh7Hu.js → pb_form_validation-u2wnZ3oe.js} +1 -1
  96. data/dist/chunks/vendor.js +1 -1
  97. data/dist/playbook-doc.js +1 -1
  98. data/dist/playbook-rails-react-bindings.js +1 -1
  99. data/dist/playbook-rails.js +1 -1
  100. data/dist/playbook.css +1 -1
  101. data/lib/playbook/version.rb +2 -2
  102. metadata +22 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4cefeafd37d4552ccecaf03ca3464488d4608ac159e892b9fc40494fb3816c98
4
- data.tar.gz: 3054fb5f195dc18b8caa9f9d966b1224c1aa695ef6791e20f0a63201f6660a9a
3
+ metadata.gz: b861b308f5b72f96eef50aec3bbdd59b377091d82766a2a494425c483e930472
4
+ data.tar.gz: 0113bca621569af9ae171149beb961330cad59d299c3831218d62a0b499426de
5
5
  SHA512:
6
- metadata.gz: a80e95a18d91e9c71de1072f88cc8fc74d938d4737cb1c90e28194035a41495ebb23eb7c51ea5b89c7d914881eaaf97205a1ba03e5524ecc9b4ad8e7539449c2
7
- data.tar.gz: 0c742998caa923a8b57e804169bcff0ed3a962a3f9000936e998a24c9ef353660046bbe865c4556df3185d06a723f173504a1b1d14b6edf73fb8453942966c91
6
+ metadata.gz: 0bc05d0bc6a8bd697898a74eb9d1ba9cf48c33e39b7fb634a5dc8dd06d6a12e21efaaaccce4e0003780d7eb8b51d53545fb477f4fc9fdbca930ab8870a5b7eef
7
+ data.tar.gz: dabc33f130e3ef9ed3dc083157ebcb9069a50d2a00b3e2a1ea59138581888ee58ebf85426a8693eb1d159b18e2739ce6d862ca1d2e6a9cc28d8b7ccf685ed55a
@@ -35,8 +35,8 @@
35
35
  &[class*=_#{$name}] {
36
36
 
37
37
  $avatar_size: map-get($avatar-sizes, $name);
38
- $icon_size: calc($avatar_size / 2);
39
- $border_size: calc($icon_size / 10);
38
+ $icon_size: $avatar_size / 2;
39
+ $border_size: $icon_size / 10;
40
40
 
41
41
  position: relative;
42
42
  width: $avatar_size * 1.25;
@@ -59,7 +59,7 @@
59
59
  left: $icon_size * 1.5;
60
60
  }
61
61
  &[class*=_left] [class^=pb_avatar_kit] {
62
- padding-left: calc($icon_size / 2);
62
+ padding-left: $icon_size / 2;
63
63
  }
64
64
  }
65
65
  }
@@ -11,7 +11,7 @@
11
11
  align-items: center;
12
12
  justify-content: center;
13
13
  border-radius: $border_rad_light;
14
- padding: 0 calc($space_xs/2);
14
+ padding: 0 $space_xs/2;
15
15
  border-width: 1px;
16
16
  border-style: solid;
17
17
  border-color: $card_light;
@@ -34,7 +34,7 @@
34
34
  height: $pb_badge_height;
35
35
  min-height: $pb_badge_height;
36
36
  min-width: $pb_badge_height;
37
- border-radius: calc($pb_badge_height / 2);
37
+ border-radius: $pb_badge_height / 2;
38
38
  }
39
39
 
40
40
  &[class*=_notification] {
@@ -9,7 +9,7 @@
9
9
  display: inline-flex;
10
10
  align-items: center;
11
11
  justify-content: center;
12
- padding: 0 calc($space_xs/2);
12
+ padding: 0 $space_xs/2;
13
13
 
14
14
  svg {
15
15
  margin-right: 8px;
@@ -17,7 +17,7 @@ $pb_button_sizes: (
17
17
  @each $name, $size in $pb_button_sizes {
18
18
  &[class*=size_#{$name}] {
19
19
  font-size: $size;
20
- padding: calc(#{$size} / 2) calc(#{$size} * 2.42);
20
+ padding: $size / 2 $size * 2.42;
21
21
  @if $name == "sm" {
22
22
  min-height: 0;
23
23
  }
@@ -11,13 +11,13 @@ $secondary_dark: rgba($bg_dark, $opacity_2);
11
11
  @if $horizontal == true {
12
12
  height: 2px;
13
13
  width: calc(100% + #{$space_md} + #{$space_md});
14
- top: calc(-#{$space_xs} - 1px);
14
+ top: -$space_xs - 1px;
15
15
  left: -$space_md;
16
16
  } @else {
17
17
  width: 2px;
18
18
  height: $space_md;
19
19
  top: 0;
20
- right: calc(#{$space_lg} + 2px);
20
+ right: $space_lg + 2px;
21
21
  }
22
22
  background-color: $color;
23
23
  content: '';
@@ -16,7 +16,7 @@ $pb_button_styles: (
16
16
  flex-grow: 0;
17
17
  width: $pb_button_size;
18
18
  height: $pb_button_size;
19
- border-radius: calc($pb_button_size/2);
19
+ border-radius: $pb_button_size / 2;
20
20
  line-height: $pb_button_size;
21
21
  flex-basis: $pb_button_size;
22
22
  min-width: $pb_button_size;
@@ -16,6 +16,7 @@ type CircleIconButtonProps = {
16
16
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
17
17
  id?: string,
18
18
  link?: string,
19
+ loading?: boolean,
19
20
  onClick?: React.MouseEventHandler<HTMLElement>,
20
21
  newWindow?: boolean,
21
22
  type?: 'button' | 'submit' | 'reset' | undefined,
@@ -32,6 +33,7 @@ const CircleIconButton = (props: CircleIconButtonProps): React.ReactElement => {
32
33
  htmlOptions = {},
33
34
  icon,
34
35
  id,
36
+ loading = false,
35
37
  onClick = noop,
36
38
  type,
37
39
  link,
@@ -61,6 +63,7 @@ const CircleIconButton = (props: CircleIconButtonProps): React.ReactElement => {
61
63
  disabled={disabled}
62
64
  htmlType={type}
63
65
  link={link}
66
+ loading={loading}
64
67
  newWindow={newWindow}
65
68
  onClick={onClick}
66
69
  text={null}
@@ -1,5 +1,5 @@
1
1
  <%= pb_content_tag do %>
2
- <%= pb_rails("button", props: {type: object.type, link: object.link, new_window:object.new_window, variant: object.variant, disabled: object.disabled, dark: object.dark}) do %>
2
+ <%= pb_rails("button", props: {type: object.type, loading: object.loading, link: object.link, new_window:object.new_window, variant: object.variant, disabled: object.disabled, dark: object.dark}) do %>
3
3
  <%= pb_rails("icon", props: {icon: object.icon, fixed_width: true, dark: object.dark}) %>
4
4
  <% end %>
5
5
  <% end %>
@@ -12,6 +12,8 @@ module Playbook
12
12
  prop :disabled, type: Playbook::Props::Boolean,
13
13
  default: false
14
14
  prop :icon, required: true
15
+ prop :loading, type: Playbook::Props::Boolean,
16
+ default: false
15
17
  prop :link
16
18
  prop :new_window, type: Playbook::Props::Boolean,
17
19
  default: false
@@ -15,3 +15,18 @@ test('default test', () => {
15
15
 
16
16
  expect(kit).toHaveClass('pb_circle_icon_button_kit')
17
17
  })
18
+
19
+ test('passes loading prop to button', () => {
20
+ render(
21
+ <CircleIconButton
22
+ data={{ testid: 'loading-test' }}
23
+ icon="plus"
24
+ loading
25
+ />
26
+ )
27
+
28
+ const kit = screen.getByTestId('loading-test')
29
+ const button = kit.querySelector('.pb_button_kit_primary_inline_enabled_loading')
30
+
31
+ expect(button).toBeInTheDocument()
32
+ })
@@ -0,0 +1,29 @@
1
+ <%= pb_rails("circle_icon_button", props: {
2
+ variant: "primary",
3
+ icon: "plus",
4
+ loading: true
5
+ }) %>
6
+
7
+ <br/>
8
+
9
+ <%= pb_rails("circle_icon_button", props: {
10
+ variant: "secondary",
11
+ icon: "pen",
12
+ loading: true
13
+ }) %>
14
+
15
+ <br/>
16
+
17
+ <%= pb_rails("circle_icon_button", props: {
18
+ disabled: true,
19
+ icon: "times",
20
+ loading: true
21
+ }) %>
22
+
23
+ <br/>
24
+
25
+ <%= pb_rails("circle_icon_button", props: {
26
+ variant: "link",
27
+ icon: "user",
28
+ loading: true
29
+ }) %>
@@ -0,0 +1,43 @@
1
+ import React from 'react'
2
+
3
+ import CircleIconButton from '../_circle_icon_button'
4
+
5
+ const CircleIconButtonLoading = (props) => (
6
+ <div>
7
+ <CircleIconButton
8
+ icon="plus"
9
+ loading
10
+ variant="primary"
11
+ {...props}
12
+ />
13
+
14
+ <br />
15
+
16
+ <CircleIconButton
17
+ icon="pen"
18
+ loading
19
+ variant="secondary"
20
+ {...props}
21
+ />
22
+
23
+ <br />
24
+
25
+ <CircleIconButton
26
+ disabled
27
+ icon="times"
28
+ loading
29
+ {...props}
30
+ />
31
+
32
+ <br />
33
+
34
+ <CircleIconButton
35
+ icon="user"
36
+ loading
37
+ variant="link"
38
+ {...props}
39
+ />
40
+ </div>
41
+ )
42
+
43
+ export default CircleIconButtonLoading
@@ -3,8 +3,10 @@ examples:
3
3
  rails:
4
4
  - circle_icon_button_default: Default
5
5
  - circle_icon_button_link: Link
6
+ - circle_icon_button_loading: Loading
6
7
 
7
8
  react:
8
9
  - circle_icon_button_default: Default
9
10
  - circle_icon_button_click: Click Handler
10
11
  - circle_icon_button_link: Link
12
+ - circle_icon_button_loading: Loading
@@ -1,3 +1,4 @@
1
1
  export { default as CircleIconButtonDefault } from './_circle_icon_button_default.jsx'
2
2
  export { default as CircleIconButtonClick } from './_circle_icon_button_click.jsx'
3
3
  export { default as CircleIconButtonLink } from './_circle_icon_button_link.jsx'
4
+ export { default as CircleIconButtonLoading } from './_circle_icon_button_loading.jsx'
@@ -45,7 +45,9 @@ const CollapsibleIcon = ({
45
45
  const color = colorMap[iconColor];
46
46
 
47
47
  const showIcon = (icon: string | string[]) => {
48
- if (typeof icon === "string") {
48
+ if (icon === "none") {
49
+ return []
50
+ } else if (typeof icon === "string") {
49
51
  return [icon, icon];
50
52
  }
51
53
  return icon;
@@ -60,30 +62,34 @@ const CollapsibleIcon = ({
60
62
 
61
63
  return (
62
64
  <>
63
- {collapsed ? (
64
- <div
65
- className="icon_wrapper"
66
- key={icon ? showIcon(icon)[0] : "chevron-down"}
67
- onClick={(e) => handleIconClick(e)}
68
- style={{ verticalAlign: "middle", color: color }}
69
- >
70
- <Icon
71
- icon={icon ? showIcon(icon)[0] : "chevron-down"}
72
- size={iconSize}
73
- />
74
- </div>
65
+ {(icon !== "none") ? (
66
+ collapsed ? (
67
+ <div
68
+ className="icon_wrapper"
69
+ key={icon ? showIcon(icon)[0] : "chevron-down"}
70
+ onClick={(e) => handleIconClick(e)}
71
+ style={{ verticalAlign: "middle", color: color }}
72
+ >
73
+ <Icon
74
+ icon={icon ? showIcon(icon)[0] : "chevron-down"}
75
+ size={iconSize}
76
+ />
77
+ </div>
78
+ ) : (
79
+ <div
80
+ className="icon_wrapper"
81
+ key={icon ? showIcon(icon)[1] : "chevron-up"}
82
+ onClick={(e) => handleIconClick(e)}
83
+ style={{ verticalAlign: "middle", color: color }}
84
+ >
85
+ <Icon
86
+ icon={icon ? showIcon(icon)[1] : "chevron-up"}
87
+ size={iconSize}
88
+ />
89
+ </div>
90
+ )
75
91
  ) : (
76
- <div
77
- className="icon_wrapper"
78
- key={icon ? showIcon(icon)[1] : "chevron-up"}
79
- onClick={(e) => handleIconClick(e)}
80
- style={{ verticalAlign: "middle", color: color }}
81
- >
82
- <Icon
83
- icon={icon ? showIcon(icon)[1] : "chevron-up"}
84
- size={iconSize}
85
- />
86
- </div>
92
+ <div/>
87
93
  )}
88
94
  </>
89
95
  );
@@ -5,15 +5,19 @@
5
5
  <%= content.presence %>
6
6
  <% end %>
7
7
  <%= pb_rails("flex/flex_item") do %>
8
- <div style="color: <%= object.icon_color %>" class="icon_wrapper" >
9
- <% if object.icon.present? %>
10
- <%= pb_rails("icon", props: { icon: object.show_icon(object.icon)[0], id:"collapsible_open_icon", size: object.size }) %>
11
- <%= pb_rails("icon", props: { icon: object.show_icon(object.icon)[1], id:"collapsible_close_icon", size: object.size }) %>
8
+ <% if object.icon == "none" %>
9
+ <div></div>
12
10
  <% else %>
13
- <%= pb_rails("icon", props: { icon: "chevron-down", id:"collapsible_open_icon", size: object.size }) %>
14
- <%= pb_rails("icon", props: { icon: "chevron-up", id:"collapsible_close_icon", size: object.size }) %>
11
+ <div style="color: <%= object.icon_color %>" class="icon_wrapper" >
12
+ <% if object.icon.present? %>
13
+ <%= pb_rails("icon", props: { icon: object.show_icon(object.icon)[0], id:"collapsible_open_icon", size: object.size }) %>
14
+ <%= pb_rails("icon", props: { icon: object.show_icon(object.icon)[1], id:"collapsible_close_icon", size: object.size }) %>
15
+ <% else %>
16
+ <%= pb_rails("icon", props: { icon: "chevron-down", id:"collapsible_open_icon", size: object.size }) %>
17
+ <%= pb_rails("icon", props: { icon: "chevron-up", id:"collapsible_close_icon", size: object.size }) %>
18
+ <% end %>
19
+ </div>
15
20
  <% end %>
16
- </div>
17
21
  <% end %>
18
22
  <% end %>
19
23
  <% end %>
@@ -20,6 +20,8 @@ module Playbook
20
20
 
21
21
  def show_icon(icon)
22
22
  case icon
23
+ when "none"
24
+ []
23
25
  when ::String
24
26
  [icon, icon]
25
27
  when ::Array
@@ -0,0 +1,10 @@
1
+ <%= pb_rails("collapsible", props: { name: "no-icon-example" }) do %>
2
+ <%= pb_rails("collapsible/collapsible_main", props: { padding: "md", name: "no-icon-main", icon: "none" }) do %>
3
+ <%= pb_rails("body", props: { text: "Main Section"}) %>
4
+ <% end %>
5
+ <%= pb_rails("collapsible/collapsible_content", props: { padding: "md" }) do %>
6
+ 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.
7
+ <br><br>
8
+ 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.
9
+ <% end %>
10
+ <% end %>
@@ -0,0 +1,21 @@
1
+ import React from 'react'
2
+ import { Collapsible } from 'playbook-ui'
3
+
4
+ const CollapsibleNoIcon = (props) => (
5
+ <Collapsible
6
+ icon="none"
7
+ >
8
+ <Collapsible.Main {...props}>
9
+ <div>{'Main Section'}</div>
10
+ </Collapsible.Main>
11
+ <Collapsible.Content>
12
+ <div>
13
+ {
14
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In vel erat sed purus hendrerit viverra. Duis et vestibulum metus. Sed consequat ut ante non vehicula. Etiam nunc massa, pharetra vel quam id, posuere rhoncus quam. Quisque imperdiet arcu enim, nec aliquet justo auctor eget. Curabitur in metus nec nunc rhoncus faucibus vitae ac elit. Nulla facilisi. Vestibulum quis pretium nulla. Nulla ut accumsan velit. Duis varius urna sed sem tempor, sit amet fermentum nibh auctor. Praesent lorem arcu, egestas non ante quis, placerat pellentesque lectus.Vestibulum lacinia ipsum quis venenatis tristique. Vivamus suscipit, libero eu fringilla egestas, orci urna commodo arcu, vel gravida turpis ipsum molestie nibh. Donec cursus eu ante sagittis ultrices. Phasellus id sagittis risus. Mauris dapibus neque faucibus, tempor ligula vel, cursus ante. Donec faucibus gravida porta. Nullam egestas est quis aliquam feugiat. Sed eget metus diam. Cras eget placerat libero.'
15
+ }
16
+ </div>
17
+ </Collapsible.Content>
18
+ </Collapsible>
19
+ )
20
+
21
+ export default CollapsibleNoIcon
@@ -9,6 +9,7 @@ examples:
9
9
  - collapsible_external_controls_multiple: Toggle All Collapsibles With One Control
10
10
  - collapsible_custom_main_rails: Custom Main Section
11
11
  - collapsible_custom_main_with_icon_rails: Custom Main Section With Icon
12
+ - collapsible_no_icon: No Icon
12
13
 
13
14
 
14
15
  react:
@@ -19,6 +20,7 @@ examples:
19
20
  - collapsible_state: useCollapsible Hook
20
21
  - collapsible_custom_main: Custom Main Section
21
22
  - collapsible_custom_main_with_icon: Custom Main Section With Icon
23
+ - collapsible_no_icon: No Icon
22
24
 
23
25
 
24
26
 
@@ -4,4 +4,5 @@ export { default as CollapsibleColor } from './_collapsible_color.jsx'
4
4
  export { default as CollapsibleIcons } from './_collapsible_icons.jsx'
5
5
  export { default as CollapsibleState } from './_collapsible_state.jsx'
6
6
  export { default as CollapsibleCustomMain } from './_collapsible_custom_main.jsx'
7
- export { default as CollapsibleCustomMainWithIcon } from './_collapsible_custom_main_with_icon.jsx'
7
+ export { default as CollapsibleCustomMainWithIcon } from './_collapsible_custom_main_with_icon.jsx'
8
+ export { default as CollapsibleNoIcon } from './_collapsible_no_icon.jsx'
@@ -41,7 +41,7 @@
41
41
  &.error {
42
42
  .date_picker_input_wrapper {
43
43
  [class*=pb_body_kit] {
44
- margin-top: calc($space_xs / 2);
44
+ margin-top: $space_xs / 2;
45
45
  }
46
46
 
47
47
  input,
@@ -6,8 +6,8 @@
6
6
  width: 315.88px
7
7
  }
8
8
  .flatpickr-months {
9
- margin-left: calc($space_xs / 4);
10
- margin-top: calc($space_xs / 3);
9
+ margin-left: $space_xs / 4;
10
+ margin-top: $space_xs / 3;
11
11
  }
12
12
  }
13
13
  @media (max-width: 499px) {
@@ -21,14 +21,14 @@
21
21
  display: flex;
22
22
  align-items: center;
23
23
  [class*=pb_date_range_inline_arrow] {
24
- margin-left: calc($space_xs/2);
25
- margin-right: calc($space_xs/2);
24
+ margin-left: $space_xs/2;
25
+ margin-right: $space_xs/2;
26
26
  }
27
27
  [class*=pb_date_range_inline_timezone] {
28
- margin-left: calc($space_xs/2);
28
+ margin-left: $space_xs/2;
29
29
  }
30
30
  [class*=pb_date_range_inline_icon] {
31
- margin-right: calc($space_xs/2);
31
+ margin-right: $space_xs/2;
32
32
  }
33
33
  }
34
34
  }
@@ -1,11 +1,11 @@
1
1
  [class^=pb_date_time_stacked] {
2
2
 
3
3
  [class^=padding_month] {
4
- padding-bottom: calc($space_xs + 2px) !important;
4
+ padding-bottom: $space_xs + 2px !important;
5
5
  }
6
6
 
7
7
  [class^=padding_day] {
8
- padding-bottom: calc($space_xs + 2px) !important;
8
+ padding-bottom: $space_xs + 2px !important;
9
9
  }
10
10
 
11
11
  &[class*=_dark] {
@@ -19,7 +19,7 @@
19
19
 
20
20
  }
21
21
  .date-time-padding {
22
- padding-right: calc($space_xs / 2);
23
- padding-left: calc($space_xs / 2);
22
+ padding-right: $space_xs / 2;
23
+ padding-left: $space_xs / 2;
24
24
  }
25
25
 
@@ -22,8 +22,11 @@
22
22
  <% if object.cancel_button && object.confirm_button %>
23
23
  <%= pb_rails("dialog/dialog_footer", props: {
24
24
  cancel_button: object.cancel_button,
25
+ cancel_button_id: object.cancel_button_id,
25
26
  confirm_button: object.confirm_button,
26
- id: object.id
27
+ confirm_button_id: object.confirm_button_id,
28
+ id: object.id,
29
+ loading: object.loading
27
30
  }) %>
28
31
  <% end %>
29
32
 
@@ -13,8 +13,11 @@ module Playbook
13
13
  prop :should_close_on_overlay_click, type: Playbook::Props::Boolean, default: true
14
14
  prop :title
15
15
  prop :text
16
+ prop :loading
16
17
  prop :confirm_button
18
+ prop :confirm_button_id
17
19
  prop :cancel_button
20
+ prop :cancel_button_id
18
21
  prop :status, type: Playbook::Props::Enum,
19
22
  values: ["info", "caution", "delete", "error", "success", "default", ""],
20
23
  default: ""
@@ -3,6 +3,27 @@ const dialogHelper = () => {
3
3
  const closeTrigger = document.querySelectorAll("[data-close-dialog]");
4
4
  const dialogs = document.querySelectorAll(".pb_dialog_rails")
5
5
 
6
+ const loadingButton = document.querySelector('[data-disable-with="Loading"]');
7
+ if (loadingButton) {
8
+ loadingButton.addEventListener("click", function() {
9
+ const okayLoadingButton = document.querySelector('[data-disable-with="Loading"]');
10
+ const cancelButton = document.querySelector('[data-disable-cancel-with="Loading"]');
11
+ let currentClass = okayLoadingButton.className;
12
+ let cancelClass = cancelButton ? cancelButton.className : "";
13
+
14
+ let newClass = currentClass.replace("_enabled", "_disabled_loading");
15
+ let newCancelClass = cancelClass.replace("_enabled", "_disabled");
16
+
17
+ // Disable the buttons
18
+ okayLoadingButton.disabled = true;
19
+ if (cancelButton) cancelButton.disabled = true;
20
+
21
+ okayLoadingButton.className = newClass;
22
+ if (cancelButton) cancelButton.className = newCancelClass;
23
+ });
24
+ }
25
+
26
+
6
27
  openTrigger.forEach((open) => {
7
28
  open.addEventListener("click", () => {
8
29
  var openTriggerData = open.dataset.openDialog;
@@ -3,10 +3,12 @@
3
3
  <% if object.confirm_button && object.cancel_button %>
4
4
  <div class="dialog-pseudo-footer"></div>
5
5
  <%= pb_rails("flex", props: { classname:object.classname, spacing:"between", padding_x:"sm", padding:"sm", padding_bottom:"sm" }) do %>
6
- <%= pb_rails("button", props: { type: "submit", id: object.confirm_button_id }) do %>
6
+
7
+ <%= pb_rails("button", props: { type: "submit", id: object.confirm_button_id, data: loading_data,
8
+ }) do %>
7
9
  <%= object.confirm_button %>
8
10
  <% end %>
9
- <%= pb_rails("button", props: { type: "button", data: {"close-dialog": "#{object.id}" }, id: object.cancel_button_id, variant: "link"}) do %>
11
+ <%= pb_rails("button", props: { type: "button", data: {"close-dialog": "#{object.id}", "disable_cancel_with": cancel_loading }, id: object.cancel_button_id, variant: "link" }) do %>
10
12
  <%= object.cancel_button %>
11
13
  <% end %>
12
14
  <% end %>
@@ -4,13 +4,22 @@ module Playbook
4
4
  module PbDialog
5
5
  class DialogFooter < Playbook::KitBase
6
6
  prop :cancel_button
7
+ prop :cancel_button_id
7
8
  prop :confirm_button
8
9
  prop :confirm_button_id
9
- prop :cancel_button_id
10
+ prop :loading
10
11
 
11
12
  def classname
12
13
  generate_classname("dialog_footer")
13
14
  end
15
+
16
+ def cancel_loading
17
+ loading ? "Loading" : ""
18
+ end
19
+
20
+ def loading_data
21
+ loading ? { disable_with: "Loading" } : {}
22
+ end
14
23
  end
15
24
  end
16
25
  end
@@ -0,0 +1,13 @@
1
+ <%= pb_rails("button", props: { text: "Open Dialog", data: {"open-dialog": "dialog-loading"} }) %>
2
+
3
+ <%= pb_rails("dialog", props: {
4
+ id:"dialog-loading",
5
+ size: "sm",
6
+ title: "Loading Exmaple",
7
+ text: "Make a loading request?",
8
+ cancel_button: "Cancel Button",
9
+ cancel_button_id: "cancel-button-loading",
10
+ confirm_button: "Okay",
11
+ confirm_button_id: "confirm-button-loading",
12
+ loading: true,
13
+ }) %>
@@ -0,0 +1,3 @@
1
+ Pressing the "Okay" button will trigger a loading state where the button content is replaced by a spinner icon and both buttons are disabled.
2
+
3
+ Currently, the loading state cannot be undone and will require a page refresh to reset the dialog.
@@ -10,6 +10,7 @@ examples:
10
10
  - dialog_stacked_alert: Stacked Button Alert
11
11
  - dialog_full_height: Full Height
12
12
  - dialog_full_height_placement: Full Height Placement
13
+ - dialog_loading: Loading
13
14
 
14
15
 
15
16
  react:
@@ -115,7 +115,7 @@
115
115
 
116
116
  &.error {
117
117
  [class*=pb_body_kit] {
118
- margin-top: calc($space_xs / 2);
118
+ margin-top: $space_xs / 2;
119
119
  }
120
120
 
121
121
  [class*="dropdown_trigger_wrapper"] {
@@ -17,9 +17,9 @@ $form_pill_colors: (
17
17
  display: inline-flex;
18
18
  justify-content: center;
19
19
  align-items: center;
20
- padding: 0 calc($space-md/2);
20
+ padding: 0 $space-md/2;
21
21
  height: $pb_form_pill_height;
22
- border-radius: calc($pb_form_pill_height/2);
22
+ border-radius: $pb_form_pill_height/2;
23
23
  margin-bottom: 2px;
24
24
  margin-top: 2px;
25
25
  cursor: pointer;