playbook_ui 14.10.0.pre.alpha.PBNTR775formmatingmaskdefaultvalue5137 → 14.10.0.pre.alpha.play1465attempt25272

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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +32 -19
  3. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +3 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +35 -3
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +32 -18
  6. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_sort.html.erb +1 -3
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers.html.erb +43 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers.jsx +60 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers.md +1 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_multiple.html.erb +58 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_multiple.jsx +74 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_multiple.md +1 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +6 -1
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/index.js +143 -95
  18. data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +50 -8
  20. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +17 -14
  21. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +78 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +4 -3
  23. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +7 -2
  24. data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.html.erb +2 -6
  25. data/app/pb_kits/playbook/pb_card/_card.scss +21 -3
  26. data/app/pb_kits/playbook/pb_card/docs/_card_header.html.erb +18 -0
  27. data/app/pb_kits/playbook/pb_card/docs/_card_header.jsx +40 -0
  28. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.tsx +3 -0
  29. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.html.erb +1 -1
  30. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +1 -0
  31. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.html.erb +8 -0
  32. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.jsx +9 -0
  33. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.md +1 -0
  34. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +1 -13
  35. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +64 -1
  36. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +3 -1
  37. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.html.erb +10 -0
  38. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +42 -0
  39. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.md +3 -0
  40. data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +2 -0
  41. data/app/pb_kits/playbook/pb_section_separator/docs/index.js +1 -0
  42. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
  43. data/app/pb_kits/playbook/pb_skeleton_loading/_skeleton_loading.scss +2 -2
  44. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_description.md +3 -0
  45. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_border_radius.html.erb +9 -0
  46. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_border_radius_rails.md +1 -0
  47. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_color.html.erb +7 -0
  48. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_default.html.erb +1 -1
  49. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_filter.html.erb +119 -0
  50. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_filter.jsx +10 -2
  51. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_height_width.html.erb +15 -0
  52. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_height_width.jsx +6 -2
  53. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_height_width_rails.md +3 -0
  54. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_layout.html.erb +3 -0
  55. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_user.html.erb +63 -0
  56. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_user.jsx +11 -3
  57. data/app/pb_kits/playbook/pb_skeleton_loading/docs/example.yml +7 -2
  58. data/app/pb_kits/playbook/pb_skeleton_loading/skeleton_loading.html.erb +8 -12
  59. data/app/pb_kits/playbook/pb_skeleton_loading/skeleton_loading.rb +48 -1
  60. data/app/pb_kits/playbook/pb_table/_table.tsx +67 -18
  61. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.jsx +88 -0
  62. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_react.md +3 -0
  63. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.jsx +1 -1
  64. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_rails.md +2 -0
  65. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_react.md +4 -1
  66. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.jsx +87 -0
  67. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_react.md +5 -0
  68. data/app/pb_kits/playbook/pb_table/index.ts +17 -17
  69. data/app/pb_kits/playbook/pb_table/styles/_scroll.scss +38 -2
  70. data/app/pb_kits/playbook/pb_table/styles/_sticky_columns.scss +17 -3
  71. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -2
  72. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +12 -4
  73. data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +5 -1
  74. data/app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.tsx +8 -3
  75. data/app/pb_kits/playbook/pb_typeahead/components/MenuList.tsx +6 -1
  76. data/app/pb_kits/playbook/pb_typeahead/components/Option.tsx +21 -6
  77. data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.tsx +13 -6
  78. data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +7 -3
  79. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_menu_list.jsx +2 -0
  80. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +4 -2
  81. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.jsx +5 -5
  82. data/dist/chunks/{_typeahead-CoIYBETL.js → _typeahead-BhT5aXCY.js} +3 -3
  83. data/dist/chunks/_weekday_stacked-DJOTNDSY.js +45 -0
  84. data/dist/chunks/{lib-sMFo2JZy.js → lib-B7sgJtGS.js} +1 -1
  85. data/dist/chunks/{pb_form_validation-CgvjWbOK.js → pb_form_validation-C5Cc0-1v.js} +1 -1
  86. data/dist/chunks/vendor.js +1 -1
  87. data/dist/menu.yml +1 -1
  88. data/dist/playbook-doc.js +1 -1
  89. data/dist/playbook-rails-react-bindings.js +1 -1
  90. data/dist/playbook-rails.js +1 -1
  91. data/dist/playbook.css +1 -1
  92. data/lib/playbook/version.rb +1 -1
  93. metadata +31 -8
  94. data/dist/chunks/_weekday_stacked-Qj3GFYzA.js +0 -45
  95. /data/app/pb_kits/playbook/pb_skeleton_loading/docs/{_skeleton_loading_border_radius.md → _skeleton_loading_border_radius_react.md} +0 -0
  96. /data/app/pb_kits/playbook/pb_skeleton_loading/docs/{_skeleton_loading_height_width.md → _skeleton_loading_height_width_react.md} +0 -0
@@ -1,11 +1,19 @@
1
- import React from 'react';
2
- import { Flex, SkeletonLoading, User } from "playbook-ui";
1
+ import React, { useState } from 'react';
2
+ import { Button, Flex, SkeletonLoading, User } from "playbook-ui";
3
3
 
4
4
  const SkeletonLoadingUser = (props) => {
5
- const isLoading = true
5
+ const [isLoading, setIsLoading] = useState(true)
6
+ const toggleLoading = () => setIsLoading((prev) => !prev)
6
7
 
7
8
  return (
8
9
  <div>
10
+ <Button
11
+ marginBottom="md"
12
+ onClick={toggleLoading}
13
+ variant="secondary"
14
+ >
15
+ {isLoading ? "Show User" : "Show Skeleton Loading"}
16
+ </Button>
9
17
  <div>
10
18
  {isLoading ? (
11
19
  <Flex alignItems="center">
@@ -1,8 +1,13 @@
1
1
  examples:
2
2
 
3
3
  rails:
4
- # - skeleton_loading_default: Default
5
-
4
+ - skeleton_loading_default: Default
5
+ - skeleton_loading_color: Color
6
+ - skeleton_loading_layout: Layout
7
+ - skeleton_loading_border_radius: Border Radius
8
+ - skeleton_loading_height_width: Height & Width
9
+ - skeleton_loading_user: User Component Example
10
+ - skeleton_loading_filter: Filter Component Example
6
11
 
7
12
  react:
8
13
  - skeleton_loading_default: Default
@@ -1,12 +1,8 @@
1
- <!-- Go to pb_content_tag definition in kit_base.rb for usage information. Commented out options are default (showing the default shape), and each can be deleted if not customizing that param. -->
2
- <!-- If using nonstandard params please un-comment out and replace with your custom params. -->
3
- <%= pb_content_tag(
4
- # :div,
5
- # aria: object.aria,
6
- # class: object.classname,
7
- # data: object.data,
8
- # id: object.id,
9
- # **combined_html_options
10
- ) do %>
11
- <span>SKELETON_LOADING CONTENT</span>
12
- <% end %>
1
+ <%= pb_content_tag do %>
2
+ <% stack.times do |index| %>
3
+ <div
4
+ class="<%= item_classname(index) %>"
5
+ style="<%= item_inline_styles %>"
6
+ ></div>
7
+ <% end %>
8
+ <% end %>
@@ -2,7 +2,54 @@
2
2
 
3
3
  module Playbook
4
4
  module PbSkeletonLoading
5
- class SkeletonLoading < ::Playbook::KitBase
5
+ class SkeletonLoading < Playbook::KitBase
6
+ prop :height, type: Playbook::Props::String,
7
+ default: "16px"
8
+ prop :width, type: Playbook::Props::String,
9
+ default: "100%"
10
+ prop :border_radius, type: Playbook::Props::Enum,
11
+ values: %w[none xs sm md lg xl rounded],
12
+ default: "sm"
13
+ prop :gap, type: Playbook::Props::Enum,
14
+ values: %w[none xxs xs sm md lg xl xxl],
15
+ default: "xxs"
16
+ prop :stack, type: Playbook::Props::Number,
17
+ default: 1
18
+ prop :color, type: Playbook::Props::Enum,
19
+ values: %w[default white],
20
+ default: "default"
21
+ prop :dark, type: Playbook::Props::Boolean,
22
+ default: false
23
+
24
+ def classname
25
+ generate_classname("pb_skeleton_loading")
26
+ end
27
+
28
+ def global_inline_props
29
+ {}
30
+ end
31
+
32
+ def item_classname(index = nil)
33
+ classes = [
34
+ "pb_skeleton_loading_item",
35
+ "border_radius_#{border_radius}",
36
+ "color_#{color}",
37
+ ("dark" if dark),
38
+ gap_class(index),
39
+ ]
40
+ classes.compact.join(" ")
41
+ end
42
+
43
+ def item_inline_styles
44
+ styles = []
45
+ styles << "height: #{height}"
46
+ styles << "width: #{width}"
47
+ styles.join("; ")
48
+ end
49
+
50
+ def gap_class(index = nil)
51
+ stack > 1 && index.to_i.positive? && gap != "none" ? "gap_#{gap}" : nil
52
+ end
6
53
  end
7
54
  end
8
55
  end
@@ -28,7 +28,8 @@ type TableProps = {
28
28
  singleLine?: boolean,
29
29
  size?: "sm" | "md" | "lg",
30
30
  sticky?: boolean,
31
- stickyLeftcolumn?: string[],
31
+ stickyLeftColumn?: string[],
32
+ stickyRightColumn?: string[],
32
33
  striped?: boolean,
33
34
  tag?: "table" | "div",
34
35
  verticalBorder?: boolean,
@@ -52,7 +53,8 @@ const Table = (props: TableProps): React.ReactElement => {
52
53
  singleLine = false,
53
54
  size = 'sm',
54
55
  sticky = false,
55
- stickyLeftcolumn = [],
56
+ stickyLeftColumn = [],
57
+ stickyRightColumn= [],
56
58
  striped = false,
57
59
  tag = 'table',
58
60
  verticalBorder = false,
@@ -79,7 +81,8 @@ const Table = (props: TableProps): React.ReactElement => {
79
81
  'single-line': singleLine,
80
82
  'no-hover': disableHover,
81
83
  'sticky-header': sticky,
82
- 'sticky-left-column': stickyLeftcolumn,
84
+ 'sticky-left-column': stickyLeftColumn,
85
+ 'sticky-right-column': stickyRightColumn,
83
86
  'striped': striped,
84
87
  [outerPaddingCss]: outerPadding !== '',
85
88
  },
@@ -90,11 +93,12 @@ const Table = (props: TableProps): React.ReactElement => {
90
93
  )
91
94
 
92
95
  useEffect(() => {
93
- const handleStickyColumns = () => {
96
+ const handleStickyLeftColumns = () => {
97
+ if (!stickyLeftColumn.length) return;
94
98
  let accumulatedWidth = 0;
95
99
 
96
- stickyLeftcolumn.forEach((colId, index) => {
97
- const isLastColumn = index === stickyLeftcolumn.length - 1;
100
+ stickyLeftColumn.forEach((colId, index) => {
101
+ const isLastColumn = index === stickyLeftColumn.length - 1;
98
102
  const header = document.querySelector(`th[id="${colId}"]`);
99
103
  const cells = document.querySelectorAll(`td[id="${colId}"]`);
100
104
 
@@ -103,11 +107,11 @@ const Table = (props: TableProps): React.ReactElement => {
103
107
  (header as HTMLElement).style.left = `${accumulatedWidth}px`;
104
108
 
105
109
  if (!isLastColumn) {
106
- header.classList.add('with-border');
107
- header.classList.remove('sticky-shadow');
110
+ header.classList.add('with-border-right');
111
+ header.classList.remove('sticky-left-shadow');
108
112
  } else {
109
- header.classList.remove('with-border');
110
- header.classList.add('sticky-shadow');
113
+ header.classList.remove('with-border-right');
114
+ header.classList.add('sticky-left-shadow');
111
115
  }
112
116
 
113
117
  accumulatedWidth += (header as HTMLElement).offsetWidth;
@@ -118,26 +122,71 @@ const Table = (props: TableProps): React.ReactElement => {
118
122
  (cell as HTMLElement).style.left = `${accumulatedWidth - (header as HTMLElement).offsetWidth}px`;
119
123
 
120
124
  if (!isLastColumn) {
121
- cell.classList.add('with-border');
122
- cell.classList.remove('sticky-shadow');
125
+ cell.classList.add('with-border-right');
126
+ cell.classList.remove('sticky-left-shadow');
123
127
  } else {
124
- cell.classList.remove('with-border');
125
- cell.classList.add('sticky-shadow');
128
+ cell.classList.remove('with-border-right');
129
+ cell.classList.add('sticky-left-shadow');
126
130
  }
127
131
  });
128
132
  });
129
133
  };
130
134
 
131
135
  setTimeout(() => {
132
- handleStickyColumns();
136
+ handleStickyLeftColumns();
133
137
  }, 10);
134
138
 
135
- window.addEventListener('resize', handleStickyColumns);
139
+ window.addEventListener('resize', handleStickyLeftColumns);
136
140
 
137
141
  return () => {
138
- window.removeEventListener('resize', handleStickyColumns);
142
+ window.removeEventListener('resize', handleStickyLeftColumns);
139
143
  };
140
- }, [stickyLeftcolumn]);
144
+ }, [stickyLeftColumn]);
145
+
146
+ useEffect(() => {
147
+ const handleStickyRightColumns = () => {
148
+ if (!stickyRightColumn.length) return;
149
+ let accumulatedWidth = 0;
150
+
151
+ stickyRightColumn.reverse().forEach((colId, index) => {
152
+ const isLastColumn = index === stickyRightColumn.length - 1;
153
+ const header = document.querySelector(`th[id="${colId}"]`);
154
+ const cells = document.querySelectorAll(`td[id="${colId}"]`);
155
+
156
+ if (header) {
157
+ header.classList.add('sticky');
158
+ (header as HTMLElement).style.right = `${accumulatedWidth}px`;
159
+
160
+ if (!isLastColumn) {
161
+ header.classList.add('with-border-left');
162
+ header.classList.remove('sticky-right-shadow');
163
+ } else {
164
+ header.classList.remove('with-border-left');
165
+ header.classList.add('sticky-right-shadow');
166
+ }
167
+
168
+ accumulatedWidth += (header as HTMLElement).offsetWidth;
169
+ }
170
+
171
+ cells.forEach((cell) => {
172
+ cell.classList.add('sticky');
173
+ (cell as HTMLElement).style.right = `${accumulatedWidth - (header as HTMLElement).offsetWidth}px`;
174
+
175
+ if (!isLastColumn) {
176
+ cell.classList.add('with-border-left');
177
+ cell.classList.remove('sticky-right-shadow');
178
+ } else {
179
+ cell.classList.remove('with-border-left');
180
+ cell.classList.add('sticky-right-shadow');
181
+ }
182
+ });
183
+ });
184
+ };
185
+
186
+ setTimeout(() => {
187
+ handleStickyRightColumns();
188
+ }, 10);
189
+ }, [stickyRightColumn]);
141
190
 
142
191
  useEffect(() => {
143
192
  const instance = new PbTable()
@@ -0,0 +1,88 @@
1
+ import React from 'react'
2
+ import Table from '../_table'
3
+
4
+ const TableStickyColumns = () => {
5
+ return (
6
+ <Table
7
+ responsive="scroll"
8
+ size="md"
9
+ stickyLeftColumn={["a"]}
10
+ stickyRightColumn={["b"]}
11
+ >
12
+ <thead>
13
+ <tr>
14
+ <th id="a">{'Column 1'}</th>
15
+ <th>{'Column 2'}</th>
16
+ <th>{'Column 3'}</th>
17
+ <th>{'Column 4'}</th>
18
+ <th>{'Column 5'}</th>
19
+ <th>{'Column 6'}</th>
20
+ <th>{'Column 7'}</th>
21
+ <th>{'Column 8'}</th>
22
+ <th>{'Column 9'}</th>
23
+ <th>{'Column 10'}</th>
24
+ <th>{'Column 11'}</th>
25
+ <th>{'Column 12'}</th>
26
+ <th>{'Column 13'}</th>
27
+ <th>{'Column 14'}</th>
28
+ <th id="b">{'Column 15'}</th>
29
+ </tr>
30
+ </thead>
31
+ <tbody>
32
+ <tr>
33
+ <td id="a">{'Value 1'}</td>
34
+ <td>{'Value 2'}</td>
35
+ <td>{'Value 3'}</td>
36
+ <td>{'Value 4'}</td>
37
+ <td>{'Value 5'}</td>
38
+ <td>{'Value 6'}</td>
39
+ <td>{'Value 7'}</td>
40
+ <td>{'Value 8'}</td>
41
+ <td>{'Value 9'}</td>
42
+ <td>{'Value 10'}</td>
43
+ <td>{'Value 11'}</td>
44
+ <td>{'Value 12'}</td>
45
+ <td>{'Value 13'}</td>
46
+ <td>{'Value 14'}</td>
47
+ <td id="b">{'Value 15'}</td>
48
+ </tr>
49
+ <tr>
50
+ <td id="a">{'Value 1'}</td>
51
+ <td>{'Value 2'}</td>
52
+ <td>{'Value 3'}</td>
53
+ <td>{'Value 4'}</td>
54
+ <td>{'Value 5'}</td>
55
+ <td>{'Value 6'}</td>
56
+ <td>{'Value 7'}</td>
57
+ <td>{'Value 8'}</td>
58
+ <td>{'Value 9'}</td>
59
+ <td>{'Value 10'}</td>
60
+ <td>{'Value 11'}</td>
61
+ <td>{'Value 12'}</td>
62
+ <td>{'Value 13'}</td>
63
+ <td>{'Value 14'}</td>
64
+ <td id="b">{'Value 15'}</td>
65
+ </tr>
66
+ <tr>
67
+ <td id="a">{'Value 1'}</td>
68
+ <td>{'Value 2'}</td>
69
+ <td>{'Value 3'}</td>
70
+ <td>{'Value 4'}</td>
71
+ <td>{'Value 5'}</td>
72
+ <td>{'Value 6'}</td>
73
+ <td>{'Value 7'}</td>
74
+ <td>{'Value 8'}</td>
75
+ <td>{'Value 9'}</td>
76
+ <td>{'Value 10'}</td>
77
+ <td>{'Value 11'}</td>
78
+ <td>{'Value 12'}</td>
79
+ <td>{'Value 13'}</td>
80
+ <td>{'Value 14'}</td>
81
+ <td id="b">{'Value 15'}</td>
82
+ </tr>
83
+ </tbody>
84
+ </Table>
85
+ )
86
+ }
87
+
88
+ export default TableStickyColumns
@@ -0,0 +1,3 @@
1
+ The `stickyLeftColumn` and `stickyRightColumn` props can be used together on the same table as needed.
2
+
3
+ Please ensure that unique ids are used for all columns across multiple tables. Using the same columns ids on multiple tables can lead to issues when using props.
@@ -6,7 +6,7 @@ const TableStickyLeftColumns = () => {
6
6
  <Table
7
7
  responsive="scroll"
8
8
  size="md"
9
- stickyLeftcolumn={["1", "2", "3"]}
9
+ stickyLeftColumn={["1", "2", "3"]}
10
10
  >
11
11
  <thead>
12
12
  <tr>
@@ -1 +1,3 @@
1
1
  The `stickyLeftColumn` prop expects an array of the column ids you want to be sticky. Make sure to add the corresponding id to the `<th>` and `<td>`.
2
+
3
+ Please ensure that unique ids are used for all columns across multiple tables. Using the same columns ids on multiple tables can lead to issues when using the `stickyLeftColumn`.
@@ -1,2 +1,5 @@
1
1
  The `stickyLeftColumn` prop expects an array of the column ids you want to be sticky. Make sure to add the corresponding id to the `<th>` and `<td>`.
2
- If you are using the sub-component variant, then you will pass the id to `<Table.Header>` and `<Table.Cell>`
2
+
3
+ If you are using the sub-component variant, then you will pass the id to `<Table.Header>` and `<Table.Cell>`
4
+
5
+ Please ensure that unique ids are used for all columns across multiple tables. Using the same columns ids on multiple tables can lead to issues when using `stickyLeftColumn` prop.
@@ -0,0 +1,87 @@
1
+ import React from 'react'
2
+ import Table from '../_table'
3
+
4
+ const TableStickyRightColumns = () => {
5
+ return (
6
+ <Table
7
+ responsive="scroll"
8
+ size="md"
9
+ stickyRightColumn={["13", "14", "15"]}
10
+ >
11
+ <thead>
12
+ <tr>
13
+ <th>{'Column 1'}</th>
14
+ <th>{'Column 2'}</th>
15
+ <th>{'Column 3'}</th>
16
+ <th>{'Column 4'}</th>
17
+ <th>{'Column 5'}</th>
18
+ <th>{'Column 6'}</th>
19
+ <th>{'Column 7'}</th>
20
+ <th>{'Column 8'}</th>
21
+ <th>{'Column 9'}</th>
22
+ <th>{'Column 10'}</th>
23
+ <th>{'Column 11'}</th>
24
+ <th>{'Column 12'}</th>
25
+ <th id="13">{'Column 13'}</th>
26
+ <th id="14">{'Column 14'}</th>
27
+ <th id="15">{'Column 15'}</th>
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ <tr>
32
+ <td>{'Value 1'}</td>
33
+ <td>{'Value 2'}</td>
34
+ <td>{'Value 3'}</td>
35
+ <td>{'Value 4'}</td>
36
+ <td>{'Value 5'}</td>
37
+ <td>{'Value 6'}</td>
38
+ <td>{'Value 7'}</td>
39
+ <td>{'Value 8'}</td>
40
+ <td>{'Value 9'}</td>
41
+ <td>{'Value 10'}</td>
42
+ <td>{'Value 11'}</td>
43
+ <td>{'Value 12'}</td>
44
+ <td id="13">{'Value 13'}</td>
45
+ <td id="14">{'Value 14'}</td>
46
+ <td id="15">{'Value 15'}</td>
47
+ </tr>
48
+ <tr>
49
+ <td>{'Value 1'}</td>
50
+ <td>{'Value 2'}</td>
51
+ <td>{'Value 3'}</td>
52
+ <td>{'Value 4'}</td>
53
+ <td>{'Value 5'}</td>
54
+ <td>{'Value 6'}</td>
55
+ <td>{'Value 7'}</td>
56
+ <td>{'Value 8'}</td>
57
+ <td>{'Value 9'}</td>
58
+ <td>{'Value 10'}</td>
59
+ <td>{'Value 11'}</td>
60
+ <td>{'Value 12'}</td>
61
+ <td id="13">{'Value 13'}</td>
62
+ <td id="14">{'Value 14'}</td>
63
+ <td id="15">{'Value 15'}</td>
64
+ </tr>
65
+ <tr>
66
+ <td>{'Value 1'}</td>
67
+ <td>{'Value 2'}</td>
68
+ <td>{'Value 3'}</td>
69
+ <td>{'Value 4'}</td>
70
+ <td>{'Value 5'}</td>
71
+ <td>{'Value 6'}</td>
72
+ <td>{'Value 7'}</td>
73
+ <td>{'Value 8'}</td>
74
+ <td>{'Value 9'}</td>
75
+ <td>{'Value 10'}</td>
76
+ <td>{'Value 11'}</td>
77
+ <td>{'Value 12'}</td>
78
+ <td id="13">{'Value 13'}</td>
79
+ <td id="14">{'Value 14'}</td>
80
+ <td id="15">{'Value 15'}</td>
81
+ </tr>
82
+ </tbody>
83
+ </Table>
84
+ )
85
+ }
86
+
87
+ export default TableStickyRightColumns
@@ -0,0 +1,5 @@
1
+ The `stickyRightColumn` prop works in the same way as the above `stickyLeftColumn` prop. It expects an array of the column ids you want to be sticky. Make sure to add the corresponding id to the `<th>` and `<td>`.
2
+
3
+ If you are using the sub-component variant, then you will pass the id to `<Table.Header>` and `<Table.Cell>`
4
+
5
+ Please ensure that unique ids are used for all columns across multiple tables. Using the same columns ids on multiple tables can lead to issues when using the `stickyRightColumn` prop.
@@ -2,7 +2,7 @@ import PbEnhancedElement from '../pb_enhanced_element'
2
2
 
3
3
  export default class PbTable extends PbEnhancedElement {
4
4
  private stickyLeftColumns: string[] = [];
5
- private handleStickyColumnsRef: () => void;
5
+ private handleStickyLeftColumnsRef: () => void;
6
6
 
7
7
  static get selector(): string {
8
8
  return '.table-responsive-collapse'
@@ -31,10 +31,10 @@ export default class PbTable extends PbEnhancedElement {
31
31
  });
32
32
 
33
33
  // New sticky columns logic
34
- this.initStickyColumns();
34
+ this.initStickyLeftColumns();
35
35
  }
36
36
 
37
- private initStickyColumns(): void {
37
+ private initStickyLeftColumns(): void {
38
38
  // Find tables with sticky-left-column class
39
39
  const tables = document.querySelectorAll('.sticky-left-column');
40
40
 
@@ -52,16 +52,16 @@ export default class PbTable extends PbEnhancedElement {
52
52
 
53
53
  if (this.stickyLeftColumns.length > 0) {
54
54
  setTimeout(() => {
55
- this.handleStickyColumnsRef = this.handleStickyColumns.bind(this);
56
- this.handleStickyColumns();
57
- window.addEventListener('resize', this.handleStickyColumnsRef);
55
+ this.handleStickyLeftColumnsRef = this.handleStickyLeftColumns.bind(this);
56
+ this.handleStickyLeftColumns();
57
+ window.addEventListener('resize', this.handleStickyLeftColumnsRef);
58
58
  }, 10);
59
59
  }
60
60
  }
61
61
  });
62
62
  }
63
63
 
64
- private handleStickyColumns(): void {
64
+ private handleStickyLeftColumns(): void {
65
65
  let accumulatedWidth = 0;
66
66
 
67
67
  this.stickyLeftColumns.forEach((colId, index) => {
@@ -74,11 +74,11 @@ export default class PbTable extends PbEnhancedElement {
74
74
  (header as HTMLElement).style.left = `${accumulatedWidth}px`;
75
75
 
76
76
  if (!isLastColumn) {
77
- header.classList.add('with-border');
78
- header.classList.remove('sticky-shadow');
77
+ header.classList.add('with-border-right');
78
+ header.classList.remove('sticky-left-shadow');
79
79
  } else {
80
- header.classList.remove('with-border');
81
- header.classList.add('sticky-shadow');
80
+ header.classList.remove('with-border-right');
81
+ header.classList.add('sticky-left-shadow');
82
82
  }
83
83
 
84
84
  accumulatedWidth += (header as HTMLElement).offsetWidth;
@@ -89,11 +89,11 @@ export default class PbTable extends PbEnhancedElement {
89
89
  (cell as HTMLElement).style.left = `${accumulatedWidth - (header as HTMLElement).offsetWidth}px`;
90
90
 
91
91
  if (!isLastColumn) {
92
- cell.classList.add('with-border');
93
- cell.classList.remove('sticky-shadow');
92
+ cell.classList.add('with-border-right');
93
+ cell.classList.remove('sticky-left-shadow');
94
94
  } else {
95
- cell.classList.remove('with-border');
96
- cell.classList.add('sticky-shadow');
95
+ cell.classList.remove('with-border-right');
96
+ cell.classList.add('sticky-left-shadow');
97
97
  }
98
98
  });
99
99
  });
@@ -101,8 +101,8 @@ export default class PbTable extends PbEnhancedElement {
101
101
 
102
102
  // Cleanup method to remove event listener
103
103
  disconnect(): void {
104
- if (this.handleStickyColumnsRef) {
105
- window.removeEventListener('resize', this.handleStickyColumnsRef);
104
+ if (this.handleStickyLeftColumnsRef) {
105
+ window.removeEventListener('resize', this.handleStickyLeftColumnsRef);
106
106
  }
107
107
  }
108
108
  }
@@ -4,12 +4,48 @@
4
4
  display: block;
5
5
  overflow-x: scroll;
6
6
 
7
+ // hides duplicate scroll bar for those that see two (byproduct of repeated table-responsive-scroll class
8
+ // hides outer scroll bar in chrome and safari
9
+ &:not(.table-responsive-scroll .table-responsive-scroll) {
10
+ &::-webkit-scrollbar {
11
+ height: 0px;
12
+ }
13
+ }
14
+ // hides outer scroll bar in firefox
15
+ @supports (scrollbar-width: none) {
16
+ scrollbar-width: none;
17
+ .pb_table {
18
+ overflow-x: auto;
19
+ scrollbar-width: auto;
20
+ }
21
+ }
22
+ // ensures visible inner scroll bar can scroll
23
+ .pb_table {
24
+ overflow-x: auto;
25
+ }
26
+
7
27
  // Responsive Styles
8
28
  @media (max-width: 1600px) {
9
29
  &[class*="table-responsive-scroll"] {
10
30
  border-radius: 4px;
11
- box-shadow: 1px 0 0 0px $border_light
12
- }
31
+ box-shadow: 1px 0 0 0px $border_light,
32
+ -1px 0 0 0px $border_light
33
+ }
34
+
35
+ &[class^=pb_table].table-sm.table-card thead tr th:first-child,
36
+ &[class^=pb_table].table-sm:not(.no-hover).table-card tbody tr td:first-child {
37
+ border-left-width: 0px;
38
+ }
39
+
40
+ &[class^=pb_table].table-md.table-card thead tr th:first-child,
41
+ &[class^=pb_table].table-md:not(.no-hover).table-card tbody tr td:first-child {
42
+ border-left-width: 0px;
43
+ }
44
+
45
+ &[class^=pb_table].table-lg.table-card thead tr th:first-child,
46
+ &[class^=pb_table].table-lg:not(.no-hover).table-card tbody tr td:first-child {
47
+ border-left-width: 0px;
48
+ }
13
49
 
14
50
  &[class^=pb_table].table-sm.table-card thead tr th:last-child,
15
51
  &[class^=pb_table].table-sm:not(.no-hover).table-card tbody tr td:last-child {
@@ -7,11 +7,25 @@
7
7
  background-color: white;
8
8
  }
9
9
 
10
- .with-border {
10
+ // For use with sticky left columns
11
+ .sticky-left-shadow {
12
+ box-shadow: 4px 0 10px rgba(60, 106, 172, 0.16) !important;
13
+ left: 0;
14
+ }
15
+
16
+ .with-border-right {
11
17
  border-right: 1px solid $border_light !important;
18
+ left: 0;
12
19
  }
13
20
 
14
- .sticky-shadow {
15
- box-shadow: 4px 0 10px rgba(60, 106, 172, 0.16) !important;
21
+ // For use with sticky right columns
22
+ .sticky-right-shadow {
23
+ box-shadow: -4px 0 10px rgba(60, 106, 172, 0.16) !important;
24
+ right: 0;
25
+ }
26
+
27
+ .with-border-left {
28
+ border-left: 1px solid $border_light !important;
29
+ right: 0;
16
30
  }
17
31
  }
@@ -42,8 +42,8 @@ type TypeaheadProps = {
42
42
  id?: string,
43
43
  label?: string,
44
44
  loadOptions?: string | Noop,
45
- getOptionLabel?: string | (() => any),
46
- getOptionValue?: string | (() => any),
45
+ getOptionLabel?: string | (() => string),
46
+ getOptionValue?: string | (() => string),
47
47
  name?: string,
48
48
  marginBottom?: "none" | "xxs" | "xs" | "sm" | "md" | "lg" | "xl",
49
49
  pillColor?: "primary" | "neutral" | "success" | "warning" | "error" | "info" | "data_1" | "data_2" | "data_3" | "data_4" | "data_5" | "data_6" | "data_7" | "data_8" | "windows" | "siding" | "roofing" | "doors" | "gutters" | "solar" | "insulation" | "accessories",
@@ -109,6 +109,7 @@ const Typeahead = ({
109
109
  multiKit: '',
110
110
  onCreateOption: null as null,
111
111
  plusIcon: false,
112
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
113
  onMultiValueClick: (_option: SelectValueType): any => undefined,
113
114
  pillColor: pillColor,
114
115
  ...props,