playbook_ui 13.5.0.pre.alpha.play984collapsiblekithidestooltips1203 → 13.5.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 (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 %>