playbook_ui 14.13.0.pre.rc.10 → 14.14.0.pre.alpha.pbntr500currencykithandlingofnullvalues6275

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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +66 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +9 -5
  5. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +75 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +1 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +3 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +3 -1
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +33 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.jsx +55 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +3 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_react.md +3 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -1
  17. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +58 -0
  18. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +64 -0
  19. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +1 -0
  20. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -0
  21. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +1 -0
  22. data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +17 -8
  23. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +16 -0
  24. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +69 -0
  25. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +1 -0
  26. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -1
  27. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  28. data/app/pb_kits/playbook/pb_currency/_currency.tsx +48 -32
  29. data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
  30. data/app/pb_kits/playbook/pb_currency/currency.rb +3 -0
  31. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +20 -0
  32. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
  33. data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
  34. data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
  35. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +3 -1
  36. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.html.erb +99 -0
  37. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.md +1 -0
  38. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +61 -0
  39. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +4 -0
  40. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +90 -0
  41. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +5 -0
  42. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +4 -5
  43. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  44. data/app/pb_kits/playbook/pb_draggable/draggable_container.html.erb +2 -2
  45. data/app/pb_kits/playbook/pb_draggable/draggable_container.rb +5 -0
  46. data/app/pb_kits/playbook/pb_draggable/draggable_item.html.erb +1 -1
  47. data/app/pb_kits/playbook/pb_draggable/draggable_item.rb +4 -0
  48. data/app/pb_kits/playbook/pb_draggable/index.js +151 -15
  49. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +7 -4
  50. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +6 -3
  51. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  52. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -0
  53. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +11 -7
  54. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting.html.erb +11 -0
  55. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting.jsx +22 -0
  56. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting_rails.md +1 -0
  57. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting_react.md +1 -0
  58. data/app/pb_kits/playbook/pb_home_address_street/docs/example.yml +2 -0
  59. data/app/pb_kits/playbook/pb_home_address_street/docs/index.js +1 -0
  60. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +13 -2
  61. data/app/pb_kits/playbook/pb_icon/icon.html.erb +2 -6
  62. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.html.erb +1 -2
  63. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.html.erb +27 -0
  64. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +1 -3
  65. data/app/pb_kits/playbook/pb_icon_button/icon_button.html.erb +1 -1
  66. data/app/pb_kits/playbook/pb_icon_button/icon_button.rb +3 -0
  67. data/app/pb_kits/playbook/pb_layout/body.html.erb +1 -5
  68. data/app/pb_kits/playbook/pb_layout/footer.html.erb +1 -5
  69. data/app/pb_kits/playbook/pb_layout/header.html.erb +1 -5
  70. data/app/pb_kits/playbook/pb_layout/item.html.erb +1 -5
  71. data/app/pb_kits/playbook/pb_layout/layout.html.erb +1 -5
  72. data/app/pb_kits/playbook/pb_layout/sidebar.html.erb +1 -5
  73. data/app/pb_kits/playbook/pb_legend/legend.html.erb +1 -6
  74. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -6
  75. data/app/pb_kits/playbook/pb_message/message_mention.html.erb +1 -6
  76. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +1 -6
  77. data/app/pb_kits/playbook/pb_nav/item.html.erb +7 -19
  78. data/app/pb_kits/playbook/pb_nav/nav.html.erb +3 -8
  79. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +1 -6
  80. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +4 -0
  81. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +37 -0
  82. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +1 -0
  83. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +1 -0
  84. data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
  85. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +48 -10
  86. data/app/pb_kits/playbook/pb_popover/popover.html.erb +1 -6
  87. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +6 -1
  88. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.tsx +7 -5
  89. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -0
  90. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +7 -0
  91. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +1 -0
  92. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.html.erb +1 -0
  93. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.jsx +18 -0
  94. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_rails.md +1 -0
  95. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_react.md +1 -0
  96. data/app/pb_kits/playbook/pb_progress_pills/docs/example.yml +2 -0
  97. data/app/pb_kits/playbook/pb_progress_pills/docs/index.js +1 -0
  98. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +2 -7
  99. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +6 -0
  100. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.test.js +26 -1
  101. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -5
  102. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -5
  103. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +1 -5
  104. data/app/pb_kits/playbook/pb_radio/radio.html.erb +6 -11
  105. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.html.erb +47 -0
  106. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.jsx +88 -0
  107. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.md +1 -0
  108. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
  109. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +51 -0
  110. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +2 -0
  111. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +96 -0
  112. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx +101 -0
  113. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md +1 -0
  114. data/app/pb_kits/playbook/pb_table/docs/example.yml +5 -0
  115. data/app/pb_kits/playbook/pb_table/docs/index.js +3 -1
  116. data/app/pb_kits/playbook/pb_table/index.ts +41 -9
  117. data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +4 -0
  118. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +29 -2
  119. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +31 -3
  120. data/app/pb_kits/playbook/pb_table/table_body.html.erb +13 -7
  121. data/app/pb_kits/playbook/pb_table/table_body.rb +2 -0
  122. data/app/pb_kits/playbook/pb_table/table_row.html.erb +14 -7
  123. data/app/pb_kits/playbook/pb_table/table_row.rb +14 -1
  124. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +15 -1
  125. data/app/pb_kits/playbook/pb_text_input/index.js +60 -82
  126. data/app/pb_kits/playbook/pb_text_input/text_input.rb +5 -2
  127. data/dist/chunks/{_typeahead-CkemExmL.js → _typeahead-PqkcDf1H.js} +4 -4
  128. data/dist/chunks/_weekday_stacked-BhC8Xp9l.js +45 -0
  129. data/dist/chunks/{lib-DjpLC8uO.js → lib-D3us1bGD.js} +2 -2
  130. data/dist/chunks/{pb_form_validation-S56UaHZl.js → pb_form_validation-BpihMSOQ.js} +1 -1
  131. data/dist/chunks/vendor.js +1 -1
  132. data/dist/menu.yml +0 -7
  133. data/dist/playbook-doc.js +1 -1
  134. data/dist/playbook-rails-react-bindings.js +1 -1
  135. data/dist/playbook-rails.js +1 -1
  136. data/dist/playbook.css +1 -1
  137. data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
  138. data/lib/playbook/forms/builder.rb +1 -0
  139. data/lib/playbook/version.rb +2 -2
  140. metadata +46 -23
  141. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +0 -66
  142. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +0 -98
  143. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +0 -28
  144. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +0 -42
  145. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +0 -19
  146. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +0 -26
  147. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +0 -10
  148. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +0 -17
  149. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +0 -19
  150. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +0 -16
  151. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +0 -35
  152. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +0 -42
  153. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +0 -13
  154. data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +0 -15
  155. data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +0 -4
  156. data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +0 -31
  157. data/dist/chunks/_weekday_stacked-CtSzPEH0.js +0 -45
  158. /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible_with_custom_click.md → _table_with_collapsible_with_custom_click_react.md} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b51f1c881060167e01a088b476babf5ef1f7945d615a11b2ab42232ed523be31
4
- data.tar.gz: e96163707d912e393e33c9d8df1d137eae66bd293cedb7bcfbffe99ffb79b322
3
+ metadata.gz: 4c6ef102f160200110b47477b34a9a06798b4ef4f1122151a12341775c20c9a5
4
+ data.tar.gz: 14eb41101975901c5f557d1d8b6721fc9301e9b54a30ec0c335b8717dccbe508
5
5
  SHA512:
6
- metadata.gz: 1de0cccfcbfbb4a1d5af31b364825a6c7cd436e1b844591c20b0c354d8ed309b1f663c3baa2005fc36f557439f0811d3f9b150934f4caeb32d87e32b50e0db54
7
- data.tar.gz: e46b2e0e84024f530fa3e94879fd7799e5b52ea9ddb00a95531e69bd054674c40fc506769b664180a0f14186b68ae03123c65d97eebd25683b654b5fd8629e0b
6
+ metadata.gz: 301d0b715331e1e388be9b554865dc59f79b88f5ef11f3a7f038554f215c7b72d6541465d027adcf0c8f9a0fea2dd4e9e1e6f608c6b0d9b9f5360fc52a70ffc8
7
+ data.tar.gz: 6e1bc33d1fbe6b1bebe4b112b42c73107685786fbc7ddd01df4f95fe302d015e1225edcfbe042e2931728dcd655fe97a9d3629417c639392fa3753a7cb533ee6
@@ -1,7 +1,6 @@
1
1
 
2
2
  @import 'pb_advanced_table/advanced_table';
3
3
  @import 'pb_avatar/avatar';
4
- @import 'pb_avatar_action_button/avatar_action_button';
5
4
  @import 'pb_background/background';
6
5
  @import 'pb_badge/badge';
7
6
  @import 'pb_bar_graph/bar_graph';
@@ -93,6 +93,43 @@
93
93
  color: $primary !important;
94
94
  }
95
95
 
96
+ // Sticky Header
97
+ .sticky-header {
98
+ thead {
99
+ z-index: 3 !important;
100
+ }
101
+ }
102
+
103
+ // Max height overflow - the below prevents expansion from overflowing container at full screen for responsive and nonresponsive tables
104
+ &.advanced-table-max-height-xs {
105
+ max-height: 320px;
106
+ overflow-y: auto;
107
+ }
108
+ &.advanced-table-max-height-sm {
109
+ max-height: 480px;
110
+ overflow-y: auto;
111
+ }
112
+ &.advanced-table-max-height-md {
113
+ max-height: 768px;
114
+ overflow-y: auto;
115
+ }
116
+ &.advanced-table-max-height-lg {
117
+ max-height: 1024px;
118
+ overflow-y: auto;
119
+ }
120
+ &.advanced-table-max-height-xl {
121
+ max-height: 1280px;
122
+ overflow-y: auto;
123
+ }
124
+ &.advanced-table-max-height-xxl {
125
+ max-height: 1440px;
126
+ overflow-y: auto;
127
+ }
128
+ &.advanced-table-max-height-xxxl {
129
+ max-height: 1920px;
130
+ overflow-y: auto;
131
+ }
132
+
96
133
  // Icons
97
134
  .button-icon {
98
135
  display: flex;
@@ -214,7 +251,27 @@
214
251
  .bg-white td:first-child {
215
252
  background-color: $white;
216
253
  }
217
-
254
+ .row-selection-actions-card {
255
+ border-right-width: 0px;
256
+ border-left-width: 0px;
257
+ position: sticky;
258
+ top: 0;
259
+ left: 0;
260
+ border-radius: unset;
261
+ }
262
+ .checkbox-cell {
263
+ display: table-cell !important;
264
+ }
265
+ .sticky-header {
266
+ thead {
267
+ th:first-child {
268
+ box-shadow: 1px 0 10px -2px $border_light !important;
269
+ }
270
+ }
271
+ .pb_advanced_table_header {
272
+ box-shadow: none !important;
273
+ }
274
+ }
218
275
  }
219
276
  }
220
277
  @media only screen and (min-width: $screen-xl-min) {
@@ -302,6 +359,14 @@
302
359
  .bg-white td:first-child {
303
360
  background-color: $bg_dark_card;
304
361
  }
362
+ .sticky-header {
363
+ thead {
364
+ th:first-child {
365
+ background: $bg_dark;
366
+ box-shadow: 1px 0 10px -2px $border_dark !important;
367
+ }
368
+ }
369
+ }
305
370
  }
306
371
  }
307
372
  }
@@ -49,6 +49,7 @@ type AdvancedTableProps = {
49
49
  initialLoadingRowsCount?: number
50
50
  inlineRowLoading?: boolean
51
51
  loading?: boolean | string
52
+ maxHeight?: "auto" | "xs" | "sm" | "md" | "lg" | "xl" | "xxl" | "xxxl"
52
53
  onRowToggleClick?: (arg: Row<GenericObject>) => void
53
54
  onToggleExpansionClick?: (arg: Row<GenericObject>) => void
54
55
  pagination?: boolean,
@@ -80,6 +81,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
80
81
  initialLoadingRowsCount = 10,
81
82
  inlineRowLoading = false,
82
83
  loading,
84
+ maxHeight,
83
85
  onRowToggleClick,
84
86
  onToggleExpansionClick,
85
87
  pagination = false,
@@ -114,7 +116,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
114
116
  const [rowSelection, setRowSelection] = useState<RowSelectionState>({})
115
117
 
116
118
  //Create cells for columns, with customization for first column
117
- const createCellFunction = (cellAccessors: string[], customRenderer?: (row: Row<GenericObject>, value: any) => JSX.Element, index?: number) => {
119
+ const createCellFunction = (cellAccessors: string[], customRenderer?: (row: Row<GenericObject>, value: any) => JSX.Element, isFirstColumn?: boolean) => {
118
120
  const columnCells = ({
119
121
  row,
120
122
  getValue,
@@ -124,7 +126,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
124
126
  }) => {
125
127
  const rowData = row.original
126
128
 
127
- if (index === 0) {
129
+ if (isFirstColumn) {
128
130
  switch (row.depth) {
129
131
  case 0: {
130
132
  return (
@@ -162,15 +164,16 @@ const AdvancedTable = (props: AdvancedTableProps) => {
162
164
  return columnCells
163
165
  }
164
166
 
165
- const buildColumns = (columnDefinitions: GenericObject[]): any => {
167
+ const buildColumns = (columnDefinitions: GenericObject[], isRoot= true): any => {
166
168
  return (
167
169
  columnDefinitions &&
168
170
  columnDefinitions.map((column, index) => {
171
+ const isFirstColumn = isRoot && index === 0;
169
172
  //Checking to see if grouped column or not
170
173
  if (column.columns && column.columns.length > 0) {
171
174
  return {
172
175
  header: column.label || "",
173
- columns: buildColumns(column.columns),
176
+ columns: buildColumns(column.columns, false),
174
177
  };
175
178
  } else {
176
179
  // Define the base column structure
@@ -184,7 +187,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
184
187
  columnStructure.cell = createCellFunction(
185
188
  column.cellAccessors,
186
189
  column.customRenderer,
187
- index
190
+ isFirstColumn
188
191
  );
189
192
  }
190
193
 
@@ -289,6 +292,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
289
292
  const classes = classnames(
290
293
  buildCss("pb_advanced_table"),
291
294
  `advanced-table-responsive-${responsive}`,
295
+ maxHeight ? `advanced-table-max-height-${maxHeight}` : '', // max height as kit prop not global prop to control overflow-y
292
296
  globalProps(props),
293
297
  className
294
298
  )
@@ -17,14 +17,21 @@ module Playbook
17
17
  default: "scroll"
18
18
  prop :table_props, type: Playbook::Props::HashProp,
19
19
  default: {}
20
+ prop :max_height, type: Playbook::Props::Enum,
21
+ values: %w[auto xs sm md lg xl xxl xxxl],
22
+ default: "auto"
20
23
 
21
24
  def classname
22
- generate_classname("pb_advanced_table", responsive_classname, separator: " ")
25
+ generate_classname("pb_advanced_table", responsive_classname, max_height_classname, separator: " ")
23
26
  end
24
27
 
25
28
  def responsive_classname
26
29
  responsive == "scroll" ? "advanced-table-responsive-scroll" : "advanced-table-responsive-none"
27
30
  end
31
+
32
+ def max_height_classname
33
+ max_height.present? ? "advanced-table-max-height-#{max_height}" : ""
34
+ end
28
35
  end
29
36
  end
30
37
  end
@@ -0,0 +1,75 @@
1
+ import React from "react"
2
+ import { AdvancedTable, Pill } from "playbook-ui"
3
+ import MOCK_DATA from "./advanced_table_mock_data.json"
4
+
5
+ const AdvancedTableColumnHeadersCustomCell = (props) => {
6
+ const columnDefinitions = [
7
+ {
8
+ accessor: "year",
9
+ label: "Year",
10
+ cellAccessors: ["quarter", "month", "day"],
11
+ },
12
+ {
13
+ label: "Enrollment Data",
14
+ columns: [
15
+ {
16
+ accessor: "newEnrollments",
17
+ label: "New Enrollments",
18
+ customRenderer: (row, value) => (
19
+ <Pill text={value}
20
+ variant="success"
21
+ />
22
+ ),
23
+ },
24
+ {
25
+ accessor: "scheduledMeetings",
26
+ label: "Scheduled Meetings",
27
+ customRenderer: (row, value) => (
28
+ <Pill text={value}
29
+ variant="info"
30
+ />
31
+ ),
32
+ },
33
+ ],
34
+ },
35
+ {
36
+ label: "Performance Data",
37
+ columns: [
38
+ {
39
+ accessor: "attendanceRate",
40
+ label: "Attendance Rate",
41
+ },
42
+ {
43
+ accessor: "completedClasses",
44
+ label: "Completed Classes",
45
+ customRenderer: (row, value) => (
46
+ <Pill text={value}
47
+ variant="error"
48
+ />
49
+ ),
50
+ },
51
+ {
52
+ accessor: "classCompletionRate",
53
+ label: "Class Completion Rate",
54
+ },
55
+ {
56
+ accessor: "graduatedStudents",
57
+ label: "Graduated Students",
58
+ },
59
+ ],
60
+ },
61
+ ];
62
+
63
+
64
+ return (
65
+ <>
66
+ <AdvancedTable
67
+ columnDefinitions={columnDefinitions}
68
+ tableData={MOCK_DATA}
69
+ {...props}
70
+ />
71
+ </>
72
+ )
73
+ }
74
+
75
+ export default AdvancedTableColumnHeadersCustomCell
@@ -30,4 +30,4 @@
30
30
  }
31
31
  ] %>
32
32
 
33
- <%= pb_rails("advanced_table", props: { id: "table_props_table", table_data: @table_data, column_definitions: column_definitions, table_props: { container: false, sticky: true }}) %>
33
+ <%= pb_rails("advanced_table", props: { id: "table_props_table", table_data: @table_data, column_definitions: column_definitions, responsive: "none", table_props: { container: false, sticky: true }}) %>
@@ -44,6 +44,7 @@ const AdvancedTableTableProps = (props) => {
44
44
  <div>
45
45
  <AdvancedTable
46
46
  columnDefinitions={columnDefinitions}
47
+ responsive="none"
47
48
  tableData={MOCK_DATA}
48
49
  tableProps={tableProps}
49
50
  {...props}
@@ -1 +1,3 @@
1
- This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table) under the hood which comes with it's own set of props. If you want to apply certain Table props to that underlying kit, you can do so by using the optional `table_props` prop. This prop must be an object that contains valid Table props. For a full list of Table props, see [here](https://playbook.powerapp.cloud/kits/table).
1
+ This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table) under the hood which comes with its own set of props. If you want to apply certain Table props to that underlying kit, you can do so by using the optional `table_props` prop. This prop must be an object that contains valid Table props. For a full list of Table props, see [here](https://playbook.powerapp.cloud/kits/table).
2
+
3
+ This doc example showcases how to set a sticky header for a nonresponsive table. To achieve sticky header AND responsive functionality, see the ["Table Props Sticky Header"](https://playbook.powerapp.cloud/kits/advanced_table#table-props-sticky-header) doc example below.
@@ -1 +1,3 @@
1
- This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table/react) under the hood which comes with it's own set of props. If you want to apply certain Table props to that underlying kit, you can do so by using the optional `tableProps` prop. This prop must be an object that contains valid Table props. For a full list of Table props, see [here](https://playbook.powerapp.cloud/kits/table/react).
1
+ This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table/react) under the hood which comes with its own set of props. If you want to apply certain Table props to that underlying kit, you can do so by using the optional `tableProps` prop. This prop must be an object that contains valid Table props. For a full list of Table props, see [here](https://playbook.powerapp.cloud/kits/table/react).
2
+
3
+ This doc example showcases how to set a sticky header for a nonresponsive table. To achieve sticky header AND responsive functionality, see the ["Table Props Sticky Header"](https://playbook.powerapp.cloud/kits/advanced_table/react#table-props-sticky-header) doc example below.
@@ -0,0 +1,33 @@
1
+ <% column_definitions = [
2
+ {
3
+ accessor: "year",
4
+ label: "Year",
5
+ cellAccessors: ["quarter", "month", "day"],
6
+ },
7
+ {
8
+ accessor: "newEnrollments",
9
+ label: "New Enrollments",
10
+ },
11
+ {
12
+ accessor: "scheduledMeetings",
13
+ label: "Scheduled Meetings",
14
+ },
15
+ {
16
+ accessor: "attendanceRate",
17
+ label: "Attendance Rate",
18
+ },
19
+ {
20
+ accessor: "completedClasses",
21
+ label: "Completed Classes",
22
+ },
23
+ {
24
+ accessor: "classCompletionRate",
25
+ label: "Class Completion Rate",
26
+ },
27
+ {
28
+ accessor: "graduatedStudents",
29
+ label: "Graduated Students",
30
+ }
31
+ ] %>
32
+
33
+ <%= pb_rails("advanced_table", props: { id: "table_props_table", table_data: @table_data, column_definitions: column_definitions, max_height: "xs", table_props: { sticky: true }}) %>
@@ -0,0 +1,55 @@
1
+ import React from "react"
2
+ import { AdvancedTable } from "playbook-ui"
3
+ import MOCK_DATA from "./advanced_table_mock_data.json"
4
+
5
+ const AdvancedTableTablePropsStickyHeader = (props) => {
6
+ const columnDefinitions = [
7
+ {
8
+ accessor: "year",
9
+ label: "Year",
10
+ cellAccessors: ["quarter", "month", "day"],
11
+ },
12
+ {
13
+ accessor: "newEnrollments",
14
+ label: "New Enrollments",
15
+ },
16
+ {
17
+ accessor: "scheduledMeetings",
18
+ label: "Scheduled Meetings",
19
+ },
20
+ {
21
+ accessor: "attendanceRate",
22
+ label: "Attendance Rate",
23
+ },
24
+ {
25
+ accessor: "completedClasses",
26
+ label: "Completed Classes",
27
+ },
28
+ {
29
+ accessor: "classCompletionRate",
30
+ label: "Class Completion Rate",
31
+ },
32
+ {
33
+ accessor: "graduatedStudents",
34
+ label: "Graduated Students",
35
+ },
36
+ ]
37
+
38
+ const tableProps = {
39
+ sticky: true
40
+ }
41
+
42
+ return (
43
+ <div>
44
+ <AdvancedTable
45
+ columnDefinitions={columnDefinitions}
46
+ maxHeight="xs"
47
+ tableData={MOCK_DATA}
48
+ tableProps={tableProps}
49
+ {...props}
50
+ />
51
+ </div>
52
+ )
53
+ }
54
+
55
+ export default AdvancedTableTablePropsStickyHeader
@@ -0,0 +1,3 @@
1
+ Create a sticky header that works for responsive Advanced Tables by setting `sticky: true` via `table_props` and giving the AdvancedTable a `max_height` using our [Max Height](https://playbook.powerapp.cloud/visual_guidelines/max_height) global prop. This behavior requires a `max_height` to work. The header is sticky within the table container, allowing for it to work along with the first column stickiness of a responsive table on smaller screen sizes.
2
+
3
+ A sticky header on a nonresponsive table is demonstrated in the ["Table Props"](https://playbook.powerapp.cloud/kits/advanced_table#table-props) doc example above.
@@ -0,0 +1,3 @@
1
+ Create a sticky header that works for responsive Advanced Tables by setting `sticky: true` via `tableProps` and giving the AdvancedTable a `maxHeight` using our [Max Height](https://playbook.powerapp.cloud/visual_guidelines/max_height) global prop. This behavior requires a `maxHeight` to work. The header is sticky within the table container, allowing for it to work along with the first column stickiness of a responsive table on smaller screen sizes.
2
+
3
+ A sticky header on a nonresponsive table is demonstrated in the ["Table Props"](https://playbook.powerapp.cloud/kits/advanced_table/react#table-props) doc example above.
@@ -5,6 +5,7 @@ examples:
5
5
  - advanced_table_beta_subrow_headers: SubRow Headers
6
6
  - advanced_table_collapsible_trail_rails: Collapsible Trail
7
7
  - advanced_table_table_props: Table Props
8
+ - advanced_table_table_props_sticky_header: Table Props Sticky Header
8
9
  - advanced_table_beta_sort: Enable Sorting
9
10
  - advanced_table_responsive: Responsive Tables
10
11
  - advanced_table_custom_cell_rails: Custom Components for Cells
@@ -22,6 +23,7 @@ examples:
22
23
  - advanced_table_collapsible_trail: Collapsible Trail
23
24
  - advanced_table_table_options: Table Options
24
25
  - advanced_table_table_props: Table Props
26
+ - advanced_table_table_props_sticky_header: Table Props Sticky Header
25
27
  - advanced_table_inline_row_loading: Inline Row Loading
26
28
  - advanced_table_responsive: Responsive Tables
27
29
  - advanced_table_custom_cell: Custom Components for Cells
@@ -29,6 +31,7 @@ examples:
29
31
  - advanced_table_pagination_with_props: Pagination Props
30
32
  - advanced_table_column_headers: Multi-Header Columns
31
33
  - advanced_table_column_headers_multiple: Multi-Header Columns (Multiple Levels)
34
+ - advanced_table_column_headers_custom_cell: Multi-Header Columns with Custom Cells
32
35
  # - advanced_table_no_subrows: Table with No Subrows
33
36
  - advanced_table_selectable_rows: Selectable Rows
34
37
  - advanced_table_selectable_rows_no_subrows: Selectable Rows (No Subrows)
@@ -18,4 +18,6 @@ export { default as AdvancedTableSelectableRows } from './_advanced_table_select
18
18
  export { default as AdvancedTableSelectableRowsNoSubrows } from './_advanced_table_selectable_rows_no_subrows.jsx'
19
19
  export { default as AdvancedTableNoSubrows } from './_advanced_table_no_subrows.jsx'
20
20
  export { default as AdvancedTableSelectableRowsHeader } from './_advanced_table_selectable_rows_header.jsx'
21
- export { default as AdvancedTableSelectableRowsActions } from './_advanced_table_selectable_rows_actions.jsx'
21
+ export { default as AdvancedTableSelectableRowsActions } from './_advanced_table_selectable_rows_actions.jsx'
22
+ export { default as AdvancedTableTablePropsStickyHeader } from './_advanced_table_table_props_sticky_header.jsx'
23
+ export { default as AdvancedTableColumnHeadersCustomCell } from './_advanced_table_column_headers_custom_cell.jsx'
@@ -0,0 +1,58 @@
1
+ @import "../tokens/colors";
2
+ @import "../tokens/typography";
3
+ @import url("https://code.highcharts.com/css/highcharts.css");
4
+
5
+ :root {
6
+ --highcharts-color-0: #{$data_1};
7
+ --highcharts-color-1: #{$data_2};
8
+ --highcharts-color-2: #{$data_3};
9
+ --highcharts-color-3: #{$data_4};
10
+ --highcharts-color-4: #{$data_5};
11
+ --highcharts-color-5: #{$data_6};
12
+ --highcharts-color-6: #{$data_7};
13
+ --highcharts-color-7: #{$data_8};
14
+ }
15
+
16
+ .highcharts-title {
17
+ font-family: $font_family_base;
18
+ font-weight: $bold;
19
+ font-size: $heading_3;
20
+ color: $text_lt_default;
21
+ fill: $text_lt_default;
22
+ }
23
+
24
+ .highcharts-subtitle {
25
+ font-family: $font_family_base;
26
+ color: $text_lt_light;
27
+ fill: $text_lt_light;
28
+ font-weight: $regular;
29
+ font-size: $text_base;
30
+ }
31
+
32
+ .highcharts-yaxis > .highcharts-axis-title {
33
+ color: $text_lt_lighter;
34
+ fill: $text_lt_lighter;
35
+ font-family: $font_family_base;
36
+ font-weight: $bold;
37
+ font-size: $text_smaller;
38
+ }
39
+
40
+ .highcharts-axis-labels {
41
+ font-family: $font_family_base;
42
+ color: $text_lt_lighter;
43
+ fill: $text_lt_lighter;
44
+ font-weight: $bold;
45
+ font-size: $text_smaller;
46
+ }
47
+
48
+ .highcharts-grid-line {
49
+ stroke: $border_light;
50
+ }
51
+
52
+ .highcharts-point {
53
+ border-radius: 3px;
54
+ }
55
+
56
+ .highcharts-axis-line {
57
+ stroke: $border_light;
58
+ }
@@ -0,0 +1,64 @@
1
+ import React from 'react'
2
+ import Highcharts from "highcharts";
3
+ import HighchartsReact from "highcharts-react-official";
4
+
5
+ import "../BarGraphStyles.scss";
6
+ // Your path might look more like this
7
+ //import "playbook-ui/dist/pb_bar_graph/BarGraphStyles.scss";
8
+
9
+ const columnChartData = [
10
+ {
11
+ name: "Installation",
12
+ data: [1475, 200, 3000, 654, 656],
13
+ },
14
+ {
15
+ name: "Manufacturing",
16
+ data: [4434, 524, 2320, 440, 500],
17
+ },
18
+ {
19
+ name: "Sales & Distribution",
20
+ data: [3387, 743, 1344, 434, 440],
21
+ },
22
+ {
23
+ name: "Project Development",
24
+ data: [3227, 878, 999, 780, 1000],
25
+ },
26
+ {
27
+ name: "Other",
28
+ data: [1111, 677, 3245, 500, 200],
29
+ },
30
+ ];
31
+
32
+ const columnOptions = {
33
+ chart: {
34
+ type: "column",
35
+ },
36
+ series: columnChartData,
37
+ title: {
38
+ text: "Solar Employment Growth by Sector, 2010-2016",
39
+ },
40
+ subtitle: {
41
+ text: "Source: thesolarfoundation.com",
42
+ },
43
+ xAxis: {
44
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
45
+ },
46
+ yAxis: {
47
+ min: 0,
48
+ title: {
49
+ text: "Number of Employees",
50
+ },
51
+ },
52
+ legend: { enabled: false },
53
+ credits: { enabled: false },
54
+ };
55
+
56
+ const BarGraphPbStyles = () => (
57
+ <div>
58
+ <HighchartsReact highcharts={Highcharts}
59
+ options={columnOptions}
60
+ />
61
+ </div>
62
+ )
63
+
64
+ export default BarGraphPbStyles
@@ -0,0 +1 @@
1
+ You don't need to use the bar graph kit to apply the styles to your Highcharts bar graph. Just import the BarGraphStyles.scss to your component and the styles will apply automatically.
@@ -17,6 +17,7 @@ examples:
17
17
 
18
18
  react:
19
19
  - bar_graph_default: Default
20
+ - bar_graph_pb_styles: Playbook Styles
20
21
  - bar_graph_legend: Legend
21
22
  - bar_graph_legend_position: Legend Position
22
23
  - bar_graph_legend_non_clickable: Legend Non Clickable
@@ -10,3 +10,4 @@ export { default as BarGraphStacked } from './_bar_graph_stacked.jsx'
10
10
  export { default as BarGraphNegativeNumbers } from './_bar_graph_negative_numbers.jsx'
11
11
  export { default as BarGraphSecondaryYAxis } from './_bar_graph_secondary_y_axis.jsx'
12
12
  export { default as BarGraphHorizontal } from './_bar_graph_horizontal.jsx'
13
+ export { default as BarGraphPbStyles } from './_bar_graph_pb_styles.jsx'
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useRef } from 'react'
1
+ import React, { useEffect, useRef, forwardRef } from 'react'
2
2
  import Body from '../pb_body/_body'
3
3
  import Icon from '../pb_icon/_icon'
4
4
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
@@ -24,7 +24,7 @@ type CheckboxProps = {
24
24
  value?: string,
25
25
  } & GlobalProps
26
26
 
27
- const Checkbox = (props: CheckboxProps): React.ReactElement => {
27
+ const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
28
28
  const {
29
29
  aria = {},
30
30
  checked = false,
@@ -44,7 +44,15 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
44
44
  value = '',
45
45
  } = props
46
46
 
47
- const checkRef = useRef(null)
47
+ const internalRef = useRef<HTMLInputElement>(null)
48
+ const setRefs = (el: HTMLInputElement) => {
49
+ internalRef.current = el
50
+ if (typeof ref === 'function') {
51
+ ref(el)
52
+ } else if (ref) {
53
+ (ref as React.MutableRefObject<HTMLInputElement | null>).current = el
54
+ }
55
+ }
48
56
  const ariaProps = buildAriaProps(aria)
49
57
  const dataProps = buildDataProps(data)
50
58
  const htmlProps = buildHtmlProps(htmlOptions)
@@ -56,9 +64,9 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
56
64
  )
57
65
 
58
66
  useEffect(() => {
59
- if (checkRef.current) {
60
- checkRef.current.checked = checked
61
- checkRef.current.indeterminate = indeterminate
67
+ if (internalRef.current) {
68
+ internalRef.current.checked = checked
69
+ internalRef.current.indeterminate = indeterminate
62
70
  }
63
71
  }, [indeterminate, checked])
64
72
 
@@ -72,7 +80,7 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
72
80
  disabled={disabled}
73
81
  name={name}
74
82
  onChange={onChange}
75
- ref={checkRef}
83
+ ref={setRefs}
76
84
  tabIndex={tabIndex}
77
85
  type="checkbox"
78
86
  value={value}
@@ -119,6 +127,7 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
119
127
  </Body>
120
128
  </label>
121
129
  )
122
- }
130
+ })
123
131
 
132
+ Checkbox.displayName = "Checkbox"
124
133
  export default Checkbox
@@ -106,3 +106,19 @@ test('has disabled attribute', () => {
106
106
  const input = kit.querySelector('input')
107
107
  expect(input).toHaveAttribute('disabled')
108
108
  })
109
+
110
+ test('has ref in the input element', () => {
111
+ const ref = React.createRef()
112
+ render(
113
+ <Checkbox
114
+ data={{ testid: testId }}
115
+ name="checkbox-name"
116
+ ref={ref}
117
+ text="Checkbox"
118
+ value="check-box value"
119
+ />
120
+ )
121
+
122
+ expect(ref.current).not.toBeNull()
123
+ expect(ref.current?.tagName).toBe('INPUT')
124
+ })