playbook_ui 13.5.0.pre.alpha.play984collapsiblekithidestooltips1203 → 13.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_body/_body.tsx +1 -1
  4. data/app/pb_kits/playbook/pb_caption/_caption.tsx +1 -1
  5. data/app/pb_kits/playbook/pb_card/card.rb +1 -1
  6. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +1 -1
  7. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +1 -0
  8. data/app/pb_kits/playbook/pb_collapsible/_helper_functions.ts +22 -26
  9. data/app/pb_kits/playbook/pb_collapsible/index.js +0 -4
  10. data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.rb +2 -2
  11. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +1 -1
  12. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -2
  13. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +1 -1
  14. data/app/pb_kits/playbook/pb_file_upload/file_upload.rb +1 -1
  15. data/app/pb_kits/playbook/pb_flex/_flex_item.scss +8 -0
  16. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +4 -1
  17. data/app/pb_kits/playbook/pb_flex/flex_item.rb +9 -1
  18. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +6 -6
  19. data/app/pb_kits/playbook/pb_passphrase/passphrase.rb +1 -1
  20. data/app/pb_kits/playbook/pb_radio/radio.rb +1 -1
  21. data/app/pb_kits/playbook/pb_select/select.rb +1 -1
  22. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +1 -1
  23. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.rb +1 -1
  24. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.rb +1 -1
  25. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.rb +1 -1
  26. data/app/pb_kits/playbook/pb_source/source.rb +1 -1
  27. data/app/pb_kits/playbook/pb_table/docs/_table_header.html.erb +27 -31
  28. data/app/pb_kits/playbook/pb_table/docs/_table_header.md +1 -8
  29. data/app/pb_kits/playbook/pb_table/styles/_table_header.scss +1 -20
  30. data/app/pb_kits/playbook/pb_table/table_header.html.erb +49 -23
  31. data/app/pb_kits/playbook/pb_table/table_header.rb +6 -34
  32. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -2
  33. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +1 -1
  34. data/app/pb_kits/playbook/pb_title/_title.tsx +1 -1
  35. data/app/pb_kits/playbook/pb_toggle/toggle.rb +1 -1
  36. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -1
  37. data/app/pb_kits/playbook/utilities/globalProps.ts +8 -23
  38. data/dist/playbook-rails.js +3 -3
  39. data/lib/playbook/classnames.rb +0 -1
  40. data/lib/playbook/kit_base.rb +2 -4
  41. data/lib/playbook/props/base.rb +1 -1
  42. data/lib/playbook/props/hash.rb +1 -1
  43. data/lib/playbook/version.rb +2 -2
  44. metadata +7 -10
  45. data/app/pb_kits/playbook/tokens/_overflow.scss +0 -10
  46. data/app/pb_kits/playbook/utilities/_overflow.scss +0 -22
  47. data/lib/playbook/overflow.rb +0 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aab7a2026fea0f718678e51045ec994772216ad74e0a9a41e5899de34a405009
4
- data.tar.gz: a9c6819da8a20bed50ed2024b4a598514d637b5cc497969b8c2a42552147f794
3
+ metadata.gz: 3fbde0c47559510e98e402f39e88e8eee92d920fe6316a10cf69edd6433c593d
4
+ data.tar.gz: 528eb97cc4627c05a97fdc42c44e2b306481fe8467f9abf38dd135e95916c5a1
5
5
  SHA512:
6
- metadata.gz: c1d017c3592b3531ea82d819e6e34222f4ebad899cb3c9a3950506a3588f94827d90e18c82405d5eab5ed6a7f12fee4caaadd67fe09ca4622f638c29302ac895
7
- data.tar.gz: 8600414aea6c3ebf852b80b1c6566e601bf7dab8abdcc4e9d343a90872190658fc4f88f384925d1112bbe2233a1f8190b76ae22ba224bbe0e4550236efff4a50
6
+ metadata.gz: 476c5d3b3afc10856fad58a4a417b9124a45bce23ac7af0987fb94e7e5987785786472c35b35a8fe8c1acb8db6c5c040c423f29886c26a0dd8ec7c7ea2baf072
7
+ data.tar.gz: ae782bd74d7a7cf8ee5f88a804079742e28044fc0f7228b1243292711c1d40bf6c8f54c2ed004bc8994321183d35efe7e975c867a99e5baba781f939d8eb76e9
@@ -113,6 +113,5 @@
113
113
  @import './utilities/border_radius';
114
114
  @import './utilities/hover';
115
115
  @import './utilities/text_align';
116
- @import './utilities/overflow';
117
116
 
118
117
  @import 'pb_multi_level_select/multi_level_select';
@@ -24,7 +24,7 @@ type BodyProps = {
24
24
  } & GlobalProps
25
25
 
26
26
  const Body = (props: BodyProps): React.ReactElement => {
27
- if (props.variant) deprecatedProps() //status prop is deprecated, use color instead please
27
+ if (props.variant) deprecatedProps("Body", ["status"]) //status prop is deprecated, use color instead please
28
28
  const {
29
29
  aria = {},
30
30
  children,
@@ -17,7 +17,7 @@ type CaptionProps = {
17
17
  } & GlobalProps;
18
18
 
19
19
  const Caption = (props: CaptionProps): React.ReactElement => {
20
- if (props.variant) deprecatedProps() //variant prop is deprecated, use color instead
20
+ if (props.variant) deprecatedProps('Title', ['variant']) //variant prop is deprecated, use color instead
21
21
  const {
22
22
  aria = {},
23
23
  children,
@@ -4,7 +4,7 @@ module Playbook
4
4
  module PbCard
5
5
  class Card < Playbook::KitBase
6
6
  prop :selected, type: Playbook::Props::Boolean, default: false
7
- prop :highlight, type: Playbook::Props::HashProp,
7
+ prop :highlight, type: Playbook::Props::Hash,
8
8
  default: {}
9
9
  prop :tag, type: Playbook::Props::Enum,
10
10
  values: %w[div section footer header article aside main nav],
@@ -10,7 +10,7 @@ module Playbook
10
10
  prop :value
11
11
  prop :name
12
12
 
13
- prop :input_options, type: Playbook::Props::HashProp,
13
+ prop :input_options, type: Playbook::Props::Hash,
14
14
  default: {}
15
15
  prop :required, type: Playbook::Props::Boolean,
16
16
  default: false
@@ -12,6 +12,7 @@
12
12
  overflow: hidden;
13
13
  transition: height 300ms, padding 300ms ease-in-out;
14
14
  }
15
+
15
16
  .toggle-content.is-visible {
16
17
  display: block;
17
18
  height: auto;
@@ -1,29 +1,25 @@
1
- export const showElement = (elem:any) => {
2
- elem.style.display = 'block';
3
- const height = elem.scrollHeight + 'px'; // Get its height
4
- elem.style.height = height; // Update the max-height
5
- elem.classList.add('is-visible');
6
- elem.style.overflow = "hidden"
7
- // Once the transition is complete, remove the inline max-height so the content can scale responsively
8
- window.setTimeout(() => {
9
- elem.style.height = '';
10
- elem.style.overflow = "visible"
11
- }, 300);
12
- };
1
+ export const showElement = (elem: any) => {
2
+ elem.style.display = 'block';
3
+ const height = elem.scrollHeight + 'px'; // Get its height
4
+ elem.style.height = height; // Update the max-height
5
+ elem.classList.add('is-visible')
6
+ // Once the transition is complete, remove the inline max-height so the content can scale responsively
7
+ window.setTimeout(() => {
8
+ elem.style.height = '';
9
+ }, 300);
10
+ };
13
11
 
14
- export const hideElement = (elem:any) => {
15
- elem.style.height = elem.scrollHeight + 'px';
12
+ export const hideElement = (elem:any) => {
13
+ elem.style.height = elem.scrollHeight + 'px';
16
14
 
17
- window.setTimeout(() => {
18
- elem.style.height = '0';
19
- elem.style.paddingTop = '0';
20
- elem.style.paddingBottom = '0';
21
- elem.style.overflow = "hidden"
22
- }, 1);
15
+ window.setTimeout(() => {
16
+ elem.style.height = '0';
17
+ elem.style.paddingTop = '0';
18
+ elem.style.paddingBottom = '0';
19
+ }, 1);
23
20
 
24
- // When the transition is complete, hide it
25
- window.setTimeout(() => {
26
- elem.classList.remove('is-visible');
27
- elem.style.overflow = ""
28
- }, 300);
29
- };
21
+ // When the transition is complete, hide it
22
+ window.setTimeout(() => {
23
+ elem.classList.remove('is-visible');
24
+ }, 300);
25
+ };
@@ -33,12 +33,10 @@ export default class PbCollapsible extends PbEnhancedElement {
33
33
  const height = getHeight()
34
34
  elem.classList.add('is-visible')
35
35
  elem.style.height = height // Update the max-height
36
- elem.style.overflow = "hidden"
37
36
 
38
37
  // Once the transition is complete, remove the inline max-height so the content can scale responsively
39
38
  window.setTimeout(() => {
40
39
  elem.style.height = ''
41
- elem.style.overflow = ""
42
40
  }, 300)
43
41
  }
44
42
 
@@ -50,13 +48,11 @@ export default class PbCollapsible extends PbEnhancedElement {
50
48
  elem.style.height = '0'
51
49
  elem.style.paddingTop = '0'
52
50
  elem.style.paddingBottom = '0'
53
- elem.style.overflow = "hidden"
54
51
  }, 1)
55
52
 
56
53
  // When the transition is complete, hide it
57
54
  window.setTimeout(() => {
58
55
  elem.classList.remove('is-visible')
59
- elem.style.overflow = ""
60
56
  }, 300)
61
57
  }
62
58
 
@@ -6,10 +6,10 @@ module Playbook
6
6
  prop :align, type: Playbook::Props::Enum,
7
7
  values: %w[left center right],
8
8
  default: "left"
9
- prop :stat_change, type: Playbook::Props::HashProp,
9
+ prop :stat_change, type: Playbook::Props::Hash,
10
10
  default: {}
11
11
  prop :stat_label
12
- prop :stat_value, type: Playbook::Props::HashProp,
12
+ prop :stat_value, type: Playbook::Props::Hash,
13
13
  default: {}
14
14
 
15
15
  def formatted_stat_value
@@ -49,7 +49,7 @@ type DatePickerProps = {
49
49
  } & GlobalProps
50
50
 
51
51
  const DatePicker = (props: DatePickerProps): React.ReactElement => {
52
- if (props.plugins) deprecatedProps()
52
+ if (props.plugins) deprecatedProps('Date Picker', ['plugins'])
53
53
 
54
54
  const {
55
55
  allowInput = false,
@@ -34,9 +34,9 @@ module Playbook
34
34
  default: false
35
35
  prop :label, type: Playbook::Props::String,
36
36
  default: "Date Picker"
37
- prop :input_aria, type: Playbook::Props::HashProp,
37
+ prop :input_aria, type: Playbook::Props::Hash,
38
38
  default: {}
39
- prop :input_data, type: Playbook::Props::HashProp,
39
+ prop :input_data, type: Playbook::Props::Hash,
40
40
  default: {}
41
41
  prop :max_date, type: Playbook::Props::String
42
42
  prop :min_date, type: Playbook::Props::String
@@ -19,7 +19,7 @@ type DateTimeStackedProps = {
19
19
  }
20
20
 
21
21
  const DateTimeStacked = (props: DateTimeStackedProps): React.ReactElement => {
22
- if (props.date) deprecatedProps()
22
+ if (props.date) deprecatedProps('Date Time Stacked', ['date'])
23
23
 
24
24
  const {
25
25
  date,
@@ -18,7 +18,7 @@ module Playbook
18
18
  prop :full_width, type: Playbook::Props::Boolean,
19
19
  default: false
20
20
 
21
- prop :input_options, type: Playbook::Props::HashProp,
21
+ prop :input_options, type: Playbook::Props::Hash,
22
22
  default: {}
23
23
 
24
24
  def classname
@@ -44,6 +44,14 @@
44
44
  order: -1;
45
45
  }
46
46
 
47
+ $overflow_values: auto, hidden, inherit, initial, scroll, visible;
48
+
49
+ @each $value in $overflow_values {
50
+ &.overflow_#{$value} {
51
+ overflow: #{$value}
52
+ }
53
+ }
54
+
47
55
  @for $i from 0 through 12 {
48
56
  &[class*=_flex_#{$i}]{
49
57
  flex: $i;
@@ -8,6 +8,7 @@ type FlexItemPropTypes = {
8
8
  grow?: boolean,
9
9
  shrink?: boolean,
10
10
  className?: string,
11
+ overflow?: "auto" | "hidden" | "initial" | "inherit" | "scroll" | "visible",
11
12
  order?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'first' | 'none',
12
13
  alignSelf?: "start" | "end" | "center" | "stretch" | null,
13
14
  displayFlex?: boolean
@@ -19,6 +20,7 @@ const FlexItem = (props: FlexItemPropTypes): React.ReactElement => {
19
20
  className,
20
21
  fixedSize,
21
22
  grow,
23
+ overflow = null,
22
24
  shrink,
23
25
  flex = 'none',
24
26
  order = 'none',
@@ -28,6 +30,7 @@ const FlexItem = (props: FlexItemPropTypes): React.ReactElement => {
28
30
  const growClass = grow === true ? 'grow' : ''
29
31
  const displayFlexClass = displayFlex === true ? `display_flex_${displayFlex}` : ''
30
32
  const flexClass = flex !== 'none' ? `flex_${flex}` : ''
33
+ const overflowClass = overflow ? `overflow_${overflow}` : ''
31
34
  const shrinkClass = shrink === true ? 'shrink' : ''
32
35
  const alignSelfClass = alignSelf ? `align_self_${alignSelf}` : ''
33
36
  const fixedStyle =
@@ -36,7 +39,7 @@ const FlexItem = (props: FlexItemPropTypes): React.ReactElement => {
36
39
 
37
40
  return (
38
41
  <div
39
- className={classnames(buildCss('pb_flex_item_kit', growClass, shrinkClass, flexClass, displayFlexClass), orderClass, alignSelfClass, globalProps(props), className)}
42
+ className={classnames(buildCss('pb_flex_item_kit', growClass, shrinkClass, flexClass, displayFlexClass), overflowClass, orderClass, alignSelfClass, globalProps(props), className)}
40
43
  style={fixedStyle}
41
44
  >
42
45
  {children}
@@ -9,6 +9,10 @@ module Playbook
9
9
  prop :shrink, type: Playbook::Props::Boolean,
10
10
  default: false
11
11
 
12
+ prop :overflow, type: Playbook::Props::Enum,
13
+ values: %w[auto hidden inherit initial scroll visible] + [nil],
14
+ default: nil
15
+
12
16
  prop :align_self, type: Playbook::Props::Enum,
13
17
  values: %w[start center end stretch] + [nil],
14
18
  default: nil
@@ -17,7 +21,7 @@ module Playbook
17
21
  default: false
18
22
 
19
23
  def classname
20
- generate_classname("pb_flex_item_kit", fixed_size_class, grow_class, shrink_class, display_flex_class) + align_self_class
24
+ generate_classname("pb_flex_item_kit", fixed_size_class, grow_class, shrink_class, display_flex_class) + overflow_class + align_self_class
21
25
  end
22
26
 
23
27
  def style_value
@@ -42,6 +46,10 @@ module Playbook
42
46
  grow ? "grow" : nil
43
47
  end
44
48
 
49
+ def overflow_class
50
+ overflow ? " overflow_#{overflow}" : ""
51
+ end
52
+
45
53
  def shrink_class
46
54
  shrink ? "shrink" : nil
47
55
  end
@@ -33,7 +33,7 @@
33
33
  margin: 0;
34
34
  }
35
35
  &[class*="_active"] {
36
- >.pb_collapsible_main_kit {
36
+ .pb_collapsible_main_kit {
37
37
  background-color: $active_light;
38
38
  }
39
39
  }
@@ -46,7 +46,7 @@
46
46
  }
47
47
  }
48
48
  &[class*="_active"] {
49
- >.pb_collapsible_main_kit {
49
+ .pb_collapsible_main_kit {
50
50
  background-color: mix($white, $card_dark, 20%);
51
51
  .pb_nav_list_item_text_collapsible,
52
52
  svg {
@@ -63,7 +63,7 @@
63
63
  .pb_collapsible_kit {
64
64
  &[class*="_active"] {
65
65
  background-color: unset;
66
- >.pb_collapsible_main_kit {
66
+ .pb_collapsible_main_kit {
67
67
  background-color: $primary;
68
68
  border-radius: $border_rad_heavier;
69
69
  .pb_nav_list_item_text_collapsible,
@@ -94,7 +94,7 @@
94
94
  &.dark {
95
95
  .pb_collapsible_kit {
96
96
  &[class*="_active"] {
97
- >.pb_collapsible_main_kit {
97
+ .pb_collapsible_main_kit {
98
98
  background-color: $primary;
99
99
  }
100
100
  .pb_nav_list_item_link {
@@ -112,7 +112,7 @@
112
112
  .pb_collapsible_kit {
113
113
  &[class*="_active"] {
114
114
  background-color: unset;
115
- >.pb_collapsible_main_kit {
115
+ .pb_collapsible_main_kit {
116
116
  background-color: $active_light;
117
117
  border-radius: $border_rad_heavier;
118
118
  .pb_nav_list_item_text_collapsible,
@@ -128,7 +128,7 @@
128
128
  &.dark {
129
129
  .pb_collapsible_kit {
130
130
  &[class*="_active"] {
131
- >.pb_collapsible_main_kit {
131
+ .pb_collapsible_main_kit {
132
132
  background-color: mix($white, $card_dark, 20%) !important;
133
133
  .pb_nav_list_item_text_collapsible,
134
134
  svg {
@@ -4,7 +4,7 @@ module Playbook
4
4
  module PbPassphrase
5
5
  class Passphrase < Playbook::KitBase
6
6
  prop :confirmation, type: Playbook::Props::Boolean, default: false
7
- prop :input_props, type: Playbook::Props::HashProp, default: {}
7
+ prop :input_props, type: Playbook::Props::Hash, default: {}
8
8
  prop :label
9
9
  prop :show_tips_below, type: Playbook::Props::Enum,
10
10
  values: %w[always xs sm md lg xl],
@@ -11,7 +11,7 @@ module Playbook
11
11
  default: false
12
12
  prop :error, type: Playbook::Props::Boolean,
13
13
  default: false
14
- prop :input_options, type: Playbook::Props::HashProp,
14
+ prop :input_options, type: Playbook::Props::Hash,
15
15
  default: {}
16
16
  prop :name, type: Playbook::Props::String,
17
17
  default: "radio_name"
@@ -6,7 +6,7 @@ require "action_view"
6
6
  module Playbook
7
7
  module PbSelect
8
8
  class Select < Playbook::KitBase
9
- prop :attributes, type: Playbook::Props::HashProp,
9
+ prop :attributes, type: Playbook::Props::Hash,
10
10
  default: {}
11
11
  prop :blank_selection
12
12
  prop :compact, type: Playbook::Props::Boolean, default: false
@@ -15,7 +15,7 @@ module Playbook
15
15
  default: true
16
16
  prop :input_id, type: Playbook::Props::String
17
17
 
18
- prop :input_options, type: Playbook::Props::HashProp,
18
+ prop :input_options, type: Playbook::Props::Hash,
19
19
  default: {}
20
20
  prop :name
21
21
  prop :text
@@ -23,7 +23,7 @@ module Playbook
23
23
  default: false
24
24
  prop :value
25
25
 
26
- prop :input_options, type: Playbook::Props::HashProp,
26
+ prop :input_options, type: Playbook::Props::Hash,
27
27
  default: {}
28
28
 
29
29
  def classname
@@ -21,7 +21,7 @@ module Playbook
21
21
  default: false
22
22
  prop :value
23
23
 
24
- prop :input_options, type: Playbook::Props::HashProp,
24
+ prop :input_options, type: Playbook::Props::Hash,
25
25
  default: {}
26
26
 
27
27
  # Conditional rendering for input field
@@ -12,7 +12,7 @@ module Playbook
12
12
  prop :variant, type: Playbook::Props::Enum,
13
13
  values: %w[radio checkbox],
14
14
  default: "radio"
15
- prop :input_options, type: Playbook::Props::HashProp,
15
+ prop :input_options, type: Playbook::Props::Hash,
16
16
  default: {}
17
17
 
18
18
  def classname
@@ -10,7 +10,7 @@ module Playbook
10
10
  prop :type, type: Playbook::Props::Enum,
11
11
  values: %w[user retail inbound outbound prospecting events referral],
12
12
  default: "inbound"
13
- prop :user, type: Playbook::Props::HashProp, default: {}
13
+ prop :user, type: Playbook::Props::Hash, default: {}
14
14
 
15
15
  def type_text
16
16
  if type == "user" || (type == "referral" && user.present?)
@@ -1,32 +1,28 @@
1
1
  <%= pb_rails("table", props: { size: "lg"} ) do %>
2
2
  <thead>
3
3
  <tr>
4
- <%= pb_rails("table/table_header", props: {
5
- text: "Territory",
6
- id: "territory",
7
- sort_menu: [
8
- { item: "Territory", link: "?sort=territory_desc", active: params["sort"] == "territory_desc", direction: "desc" },
9
- { item: "Territory", link: "?sort=territory_asc", active: params["sort"] == "territory_asc", direction: "asc" }
10
- ],
11
- }) %>
12
4
  <%= pb_rails("table/table_header", props: {
13
5
  id: "name",
14
- text: "Full Name",
15
6
  colspan: 2,
16
7
  sort_menu: [
17
- { item: "First Name Descending", link: "?sort=firstname_desc", active: params["sort"] == "firstname_desc", direction: "desc" },
18
- { item: "First Name Ascending", link: "?sort=firstname_asc", active: params["sort"] == "firstname_asc", direction: "asc" },
19
- { item: "Last Name Descending", link: "?sort=lastname_desc", active: params["sort"] == "lastname_desc", direction: "desc" },
20
- { item: "Last Name Ascending", link: "?sort=lastname_asc", active: params["sort"] == "lastname_asc", direction: "asc" }
8
+ { item: "Name", link: "?q[sorts]=name+desc", active: false, direction: "desc" },
9
+ { item: "Name", link: "?q[sorts]=name+asc", active: true, direction: "asc" },
21
10
  ],
22
11
  }) %>
23
12
  <%= pb_rails("table/table_header", props: {
24
13
  text: "Age",
25
14
  id: "age",
26
- sort_dropdown: true,
27
15
  sort_menu: [
28
- { item: "Age Descending", link: "?sort=age_desc", active: params["sort"] == "age_desc", direction: "desc" },
29
- { item: "Age Ascending", link: "?sort=age_asc", active: params["sort"] == "age_asc", direction: "asc" }
16
+ { item: "Age", link: "?q[sorts]=age+desc", active: false, direction: "desc" },
17
+ { item: "Age", link: "?q[sorts]=age+asc", active: false, direction: "asc" },
18
+ ],
19
+ }) %>
20
+ <%= pb_rails("table/table_header", props: {
21
+ text: "Territory",
22
+ id: "territory",
23
+ sort_menu: [
24
+ { item: "Territory", link: "?q[sorts]=territory+desc", active: false, direction: "desc" },
25
+ { item: "Territory", link: "?q[sorts]=territory+asc", active: false, direction: "asc" },
30
26
  ],
31
27
  }) %>
32
28
  <%= pb_rails("table/table_header", props: { text: "Job Title" }) %>
@@ -34,25 +30,25 @@
34
30
  </thead>
35
31
  <tbody>
36
32
  <tr>
37
- <td>Ter 1</td>
38
- <td>First Name 1</td>
39
- <td>Last Name 1</td>
40
- <td>Age 1</td>
41
- <td>Job 1</td>
33
+ <td>Name 1</td>
34
+ <td>Name 2</td>
35
+ <td>Value 3</td>
36
+ <td>Value 4</td>
37
+ <td>Value 5</td>
42
38
  </tr>
43
39
  <tr>
44
- <td>Ter 2</td>
45
- <td>First Name 2</td>
46
- <td>Last Name 2</td>
47
- <td>Age 2</td>
48
- <td>Job 2</td>
40
+ <td>Name 1</td>
41
+ <td>Name 2</td>
42
+ <td>Value 3</td>
43
+ <td>Value 4</td>
44
+ <td>Value 5</td>
49
45
  </tr>
50
46
  <tr>
51
- <td>Ter 3</td>
52
- <td>First Name 3</td>
53
- <td>Last Name 3</td>
54
- <td>Age 3</td>
55
- <td>Job 3</td>
47
+ <td>Name 1</td>
48
+ <td>Name 2</td>
49
+ <td>Value 3</td>
50
+ <td>Value 4</td>
51
+ <td>Value 5</td>
56
52
  </tr>
57
53
  </tbody>
58
54
  <% end %>
@@ -1,8 +1 @@
1
- The `table_header` subcomponent creates `<th>` elements and optionally accepts:
2
-
3
- * `colspan` (number) for setting column span
4
- * `sort_menu` accepts sort options as an array of `item` objects.
5
- presence of `sort_menu` enables the sort link within the header
6
- * `sort_dropdown` (boolean) optionally declares that (true) clicking a header's sort link opens a dropdown of sort options, or (false) each sort link click cycles through available sort_menu items in the order they are passed
7
- * passing a valid `colspan` will render sort options within a dropdown by default, without requiring `sort_dropdown` explicitly. Alternatively, the default sort dropdown can be prevented on headers with `colspan` by setting `sort_dropdown: false`, which reverts the column to sorting to multi-click default (each click of the sort link cycles through the available sort_menu items in the order they are passed)
8
- * `id` (string) is required for headers that have a dropdown (for popover reference); otherwise they are optional
1
+ A kit that produces a `<th>` tag. You can also use the `sort_menu` prop to make the header a sortable link, just like <a href="https://playbook.powerapp.cloud/kits/filter#sort-only" target="_blank">our filter kit.</a>
@@ -1,3 +1,4 @@
1
+
1
2
  $text_align_values: (
2
3
  start: start,
3
4
  end: end,
@@ -21,15 +22,6 @@ $text_align_values: (
21
22
  }
22
23
  }
23
24
 
24
- .pb_th_link:hover {
25
- background-color: rgba($primary, 0.03);
26
- color: $primary !important;
27
- }
28
-
29
- .pb_th_link, .pb_th_nolink{
30
- padding: $space_xxs;
31
- }
32
-
33
25
  [class^=pb_table] {
34
26
  thead {
35
27
  [class^=pb_th_active] {
@@ -37,14 +29,3 @@ $text_align_values: (
37
29
  }
38
30
  }
39
31
  }
40
-
41
- [class*="pb_table_header_dropdown"][class*="_vertical"] {
42
- &[class*="_normal"] {
43
- [class*="pb_nav_list_kit_item"][class*="pb_nav_list_item"] {
44
- &[class*="_link"] {
45
- border-left-width: 0px;
46
- background-color: #fff !important;
47
- }
48
- }
49
- }
50
- }
@@ -4,35 +4,61 @@
4
4
  class: object.classname,
5
5
  data: object.data,
6
6
  id: "pb-th#{object.id}") do %>
7
- <% unless sorting_style? %>
8
- <%= pb_rails("flex", props:{ align: object.align_content, justify: object.justify_sort_icon, classname: "pb_th_nolink" }) do %>
7
+ <% object.sort_menu.each do |item| %>
8
+ <% if item[:active] == true %>
9
+ <%= pb_rails("flex", props:{ align: object.align_content }) do %>
10
+ <%= content.presence || content_tag(:span, item[:item], class: "pb_th_active") %>
11
+ <span class="pb_th_active">
12
+ <%= pb_rails("icon", props: { icon: object.sort_icon(item[:direction]),
13
+ fixed_width: true,
14
+ classname: "pb_th_active",
15
+ padding_left: "xs" }) %>
16
+ </span>
17
+ <% end %>
18
+ <% end %>
19
+ <% end %>
20
+ <% if object.sort_menu.all? { |item| item[:active] == false } %>
21
+ <%= pb_rails("flex", props:{ align: object.align_content }) do %>
9
22
  <%= content.presence || object.text %>
23
+ <%= pb_rails("icon", props: { icon: "arrow-up-arrow-down",
24
+ fixed_width: true,
25
+ padding_left: "xs" }) %>
10
26
  <% end %>
11
27
  <% else %>
12
- <%= link_to next_link, style: link_style do %>
13
- <%= pb_rails("flex", props:{ align: object.align_content, justify: object.justify_sort_icon, classname: "pb_th_link" }) do %>
14
- <%= content.presence || object.text %>
15
- <% if sorting_style? %>
16
- <%= pb_rails("icon", props: { icon: object.sort_icon(active_item[:direction], active_item[:active]),
17
- fixed_width: true,
18
- classname: active_item.any? ? "pb_th_active" : "",
19
- padding_left: "xs" }) %>
20
- <% end %>
21
- <% end %>
22
- <% end %>
23
- <% if use_dropdown_select %>
24
- <%= pb_rails("popover", props: { classname: "pb_filter_sort_menu",
25
- close_on_click: "outside",
26
- trigger_element_id: "pb-th#{object.id}",
27
- tooltip_id: "sort-filter-btn-tooltip#{object.id}",
28
- position: object.placement ,
29
- padding: 'none'}) do %>
30
- <%= pb_rails("nav", props: {classname: "pb_table_header_dropdown"}) do %>
31
- <% object.sort_menu.each do |item| %>
32
- <%= pb_rails("nav/item", props: { text: item[:item], link: item[:link], icon_right: sort_icon(item[:direction], item[:active]), active: item[:active] }) %>
28
+ <%= content.presence || object.text %>
29
+ <% end %>
30
+ <% if object.sort_menu != [{}] && object.colspan > 1 %>
31
+ <%= pb_rails("popover", props: { classname: "pb_filter_sort_menu",
32
+ close_on_click: "outside",
33
+ trigger_element_id: "pb-th#{object.id}",
34
+ tooltip_id: "sort-filter-btn-tooltip#{object.id}",
35
+ position: object.placement ,
36
+ padding: 'none'}) do %>
37
+ <%= pb_rails("list") do %>
38
+ <% object.sort_menu.each do |item| %>
39
+ <%= pb_rails("list/item") do %>
40
+ <%= pb_rails("button", props: { variant: "link" ,
41
+ classname: "p-0",
42
+ text: item[:item],
43
+ link: item[:link],
44
+ icon: sort_icon(item[:direction]),
45
+ icon_right: true }) %>
33
46
  <% end %>
34
47
  <% end %>
35
48
  <% end %>
36
49
  <% end %>
37
50
  <% end %>
38
51
  <% end %>
52
+ <% if object.sort_menu != [{}] && object.colspan == 1 %>
53
+ <script>
54
+ document.addEventListener("DOMContentLoaded", function() {
55
+ var thId = `<%= "#pb-th#{object.id}" %>`
56
+ var firstLink = `<%= next_link %>`
57
+ var thElement = document.querySelector(thId);
58
+
59
+ thElement.addEventListener("click", function() {
60
+ window.location.href = firstLink;
61
+ });
62
+ });
63
+ </script>
64
+ <% end %>