playbook_ui 14.18.1.pre.rc.0 → 14.19.0.pre.alpha.PLAY21297675

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 (143) 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/Components/RegularTableView.tsx +11 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +148 -15
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +20 -3
  6. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +23 -13
  7. data/app/pb_kits/playbook/pb_advanced_table/Utilities/VisibilityTree.ts +47 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +313 -21
  9. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +12 -3
  10. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +6 -1
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +0 -6
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color.jsx +80 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color.md +3 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color_rails.html.erb +58 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color_rails.md +3 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.jsx +57 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.md +4 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.jsx +62 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.md +1 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.jsx +82 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.md +1 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.jsx +65 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +1 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md +5 -1
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.jsx → _advanced_table_selectable_rows_no_subrows_react.jsx} +2 -2
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md +3 -2
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +10 -5
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +7 -2
  29. data/app/pb_kits/playbook/pb_advanced_table/flat_advanced_table.js +106 -0
  30. data/app/pb_kits/playbook/pb_advanced_table/index.js +228 -11
  31. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +1 -0
  32. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +9 -1
  33. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +0 -3
  34. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +1 -2
  35. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +4 -0
  36. data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +3 -0
  37. data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +3 -3
  38. data/app/pb_kits/playbook/pb_avatar/avatar.rb +2 -0
  39. data/app/pb_kits/playbook/pb_avatar/avatar.test.js +18 -0
  40. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_grayscale.html.erb +5 -0
  41. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_grayscale.jsx +16 -0
  42. data/app/pb_kits/playbook/pb_avatar/docs/example.yml +2 -0
  43. data/app/pb_kits/playbook/pb_avatar/docs/index.js +1 -0
  44. data/app/pb_kits/playbook/pb_card/card.html.erb +1 -1
  45. data/app/pb_kits/playbook/pb_card/card.rb +12 -0
  46. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +2 -2
  47. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.html.erb +22 -1
  48. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line.html.erb +55 -0
  49. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line_rails.md +5 -0
  50. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_rails.md +5 -0
  51. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners.jsx +59 -0
  52. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners_react.md +1 -0
  53. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +2 -0
  54. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  55. data/app/pb_kits/playbook/pb_draggable/draggable_container.rb +11 -1
  56. data/app/pb_kits/playbook/pb_draggable/draggable_item.rb +11 -1
  57. data/app/pb_kits/playbook/pb_draggable/index.js +4 -2
  58. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +33 -5
  59. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +5 -0
  60. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +5 -16
  61. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_error.html.erb +5 -2
  62. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.html.erb +28 -0
  63. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.jsx +17 -64
  64. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_with_subcomponents.html.erb +58 -0
  65. data/app/pb_kits/playbook/pb_dropdown/docs/{_dropdown_with_autocomplete_and_custom_display.jsx → _dropdown_with_autocomplete_with_subcomponents.jsx} +11 -25
  66. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_with_subcomponents.md +1 -0
  67. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_external_control.md +1 -0
  68. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search.jsx +61 -0
  69. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search.md +2 -0
  70. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search_rails.html.erb +52 -0
  71. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search_rails.md +2 -0
  72. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +7 -4
  73. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -2
  74. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +2 -2
  75. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +4 -0
  76. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +45 -1
  77. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +10 -0
  78. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.rb +3 -0
  79. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +12 -2
  80. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +3 -1
  81. data/app/pb_kits/playbook/pb_dropdown/index.js +57 -0
  82. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +26 -0
  83. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +3 -4
  84. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +4 -4
  85. data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +8 -1
  86. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_alignment.html.erb +27 -0
  87. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_default.html.erb +7 -0
  88. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_orientation.html.erb +12 -0
  89. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_size.html.erb +23 -0
  90. data/app/pb_kits/playbook/pb_empty_state/docs/example.yml +5 -1
  91. data/app/pb_kits/playbook/pb_empty_state/empty_state.html.erb +19 -0
  92. data/app/pb_kits/playbook/pb_empty_state/empty_state.rb +123 -0
  93. data/app/pb_kits/playbook/pb_message/_message.tsx +3 -0
  94. data/app/pb_kits/playbook/pb_message/docs/_message_grayscale.html.erb +9 -0
  95. data/app/pb_kits/playbook/pb_message/docs/_message_grayscale.jsx +21 -0
  96. data/app/pb_kits/playbook/pb_message/docs/example.yml +2 -0
  97. data/app/pb_kits/playbook/pb_message/docs/index.js +1 -0
  98. data/app/pb_kits/playbook/pb_message/message.html.erb +2 -1
  99. data/app/pb_kits/playbook/pb_message/message.rb +1 -0
  100. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +2 -1
  101. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +1 -1
  102. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +5 -4
  103. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +2 -2
  104. data/app/pb_kits/playbook/pb_select/_select.scss +10 -0
  105. data/app/pb_kits/playbook/pb_select/docs/_select_error.html.erb +1 -1
  106. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.jsx +7 -7
  107. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +5 -5
  108. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.html.erb +1 -1
  109. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.html.erb +5 -1
  110. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_error_state.html.erb +8 -1
  111. data/app/pb_kits/playbook/pb_user/_user.tsx +3 -0
  112. data/app/pb_kits/playbook/pb_user/docs/_user_grayscale.html.erb +6 -0
  113. data/app/pb_kits/playbook/pb_user/docs/_user_grayscale.jsx +16 -0
  114. data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
  115. data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
  116. data/app/pb_kits/playbook/pb_user/user.html.erb +2 -1
  117. data/app/pb_kits/playbook/pb_user/user.rb +1 -0
  118. data/dist/chunks/{_typeahead-D8CsVBZO.js → _typeahead-BPSIWtFT.js} +3 -3
  119. data/dist/chunks/_weekday_stacked-BeuPAmxG.js +45 -0
  120. data/dist/chunks/{lib-BmTAc7Nc.js → lib-B20MXZcW.js} +2 -2
  121. data/dist/chunks/{pb_form_validation-BWjy4bFn.js → pb_form_validation-WWvUXPKD.js} +1 -1
  122. data/dist/chunks/vendor.js +1 -1
  123. data/dist/menu.yml +6 -14
  124. data/dist/playbook-doc.js +2 -2
  125. data/dist/playbook-rails-react-bindings.js +1 -1
  126. data/dist/playbook-rails.js +1 -1
  127. data/dist/playbook.css +1 -1
  128. data/lib/playbook/version.rb +2 -2
  129. metadata +52 -21
  130. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.md +0 -1
  131. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_hook.jsx +0 -79
  132. data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.scss +0 -3
  133. data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.tsx +0 -72
  134. data/app/pb_kits/playbook/pb_gantt_chart/docs/_gantt_chart_default.jsx +0 -53
  135. data/app/pb_kits/playbook/pb_gantt_chart/docs/example.yml +0 -7
  136. data/app/pb_kits/playbook/pb_gantt_chart/docs/index.js +0 -1
  137. data/app/pb_kits/playbook/pb_gantt_chart/gantt_chart.test.jsx +0 -19
  138. data/dist/chunks/_weekday_stacked-CHQsoCdP.js +0 -45
  139. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_react.md → _advanced_table_selectable_rows.md} +0 -0
  140. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.html.erb → _advanced_table_selectable_rows_no_subrows_rails.html.erb} +0 -0
  141. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows.html.erb → _advanced_table_selectable_rows_rails.html.erb} +0 -0
  142. /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_drop_zones_line.md → _draggable_drop_zones_line_react.md} +0 -0
  143. /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_event_listeners.md → _draggable_event_listeners_rails.md} +0 -0
@@ -13,6 +13,26 @@
13
13
  .pb_advanced_table {
14
14
  $border-color: 1px solid $border_light;
15
15
 
16
+ // Base vertical border color variable setup
17
+ --column-border-color: #{$border_light};
18
+
19
+ // Define color tokens once
20
+ $border_color_options: (
21
+ "text_lt_default": $text_lt_default,
22
+ "text_lt_light": $text_lt_light,
23
+ "text_lt_lighter": $text_lt_lighter,
24
+ "text_dk_default": $text_dk_default,
25
+ "text_dk_light": $text_dk_light,
26
+ "text_dk_lighter": $text_dk_lighter
27
+ );
28
+
29
+ // Generate classes for each color option
30
+ @each $color_name, $color_value in $border_color_options {
31
+ &.column-group-border-#{$color_name} {
32
+ --column-border-color: #{$color_value};
33
+ }
34
+ }
35
+
16
36
  [id$="-span"] {
17
37
  word-wrap: normal;
18
38
  }
@@ -33,6 +53,15 @@
33
53
  width: 100%;
34
54
  }
35
55
 
56
+ .column-visibility-dropdown-wrapper {
57
+ position: unset !important;
58
+ }
59
+ .column-visibility-dropdown {
60
+ width: unset !important;
61
+ right: $space_xxs;
62
+ text-align: left;
63
+ }
64
+
36
65
  // Virtualized table styles
37
66
  .virtualized-table-row {
38
67
  display: table !important;
@@ -346,13 +375,133 @@
346
375
  }
347
376
  }
348
377
 
349
- // Vertical separator
378
+ // First column separator/border
350
379
  .table-header-cells:first-child,
351
380
  .table-header-cells-custom:first-child,
352
381
  td:first-child,
353
382
  .pb_table_td:first-child,
354
383
  .checkbox-cell.checkbox-cell-header:first-child {
355
- box-shadow: 1px 0px 0px 0px $border_light !important;
384
+ box-shadow: 1px 0px 0px 0px var(--column-border-color) !important;
385
+ }
386
+
387
+ // Color for collapsible trail
388
+ .collapsible-trail {
389
+ background-color: $border_light !important;
390
+ position: absolute;
391
+ top: 0;
392
+ bottom: 0;
393
+ width: 2px;
394
+ }
395
+
396
+ // Make sure all horizontal borders use the default border color
397
+ tr, th, td {
398
+ border-top-color: $border_light !important;
399
+ border-bottom-color: $border_light !important;
400
+ }
401
+
402
+ // Apply border colors when columnGroupBorderColor is set
403
+ &[class*="column-group-border-"] {
404
+ // For top-level column groups
405
+ .pb_advanced_table_header {
406
+ // The main column group headers
407
+ > tr:first-child {
408
+ th[colspan]:not([colspan="1"]):not(:last-child) {
409
+ border-right: 1px solid var(--column-border-color) !important;
410
+ }
411
+ }
412
+
413
+ // Subgroup headers
414
+ > tr:nth-child(2) {
415
+ th[colspan]:not([colspan="1"]):not(:last-child) {
416
+ border-right: 1px solid var(--column-border-color) !important;
417
+ }
418
+
419
+ // Last cell in each subgroup
420
+ th.last-header-cell:not(:last-child) {
421
+ border-right: 1px solid var(--column-border-color) !important;
422
+ }
423
+ }
424
+
425
+ // Individual column headers at subgroup boundaries
426
+ > tr:last-child {
427
+ // Last cell in each subgroup
428
+ th.last-header-cell:not(:last-child) {
429
+ border-right: 1px solid var(--column-border-color) !important;
430
+ }
431
+ }
432
+ }
433
+
434
+ // For data cells at column group boundaries
435
+ .pb_advanced_table_body {
436
+ // Apply to cells that are at column group boundaries
437
+ td.last-cell:not(:last-child),
438
+ .pb_table_td.last-cell:not(:last-child) {
439
+ border-right: 1px solid var(--column-border-color) !important;
440
+ }
441
+
442
+ // Virtualized row cells at column group boundaries
443
+ tr.virtualized-table-row {
444
+ td.last-cell:not(:last-child) {
445
+ border-right: 1px solid var(--column-border-color) !important;
446
+ }
447
+ }
448
+ }
449
+
450
+ // Sub-row headers
451
+ .toggle-content {
452
+ td {
453
+ border-bottom: 1px solid $border_light !important;
454
+ }
455
+ }
456
+ }
457
+
458
+ // Restore vertical border styling when verticalBorder is true
459
+ .pb_table[data-vertical-border="true"] {
460
+ .pb_advanced_table_header {
461
+ > tr:not(:first-child) {
462
+ th:not(:last-child) {
463
+ border-right: 1px solid $border_light !important;
464
+ }
465
+ }
466
+ }
467
+
468
+ .pb_advanced_table_body {
469
+ td:not(:last-child),
470
+ .pb_table_td:not(:last-child) {
471
+ border-right: 1px solid $border_light !important;
472
+ }
473
+ }
474
+
475
+ tr.virtualized-table-row {
476
+ td:not(:last-child) {
477
+ border-right: 1px solid $border_light !important;
478
+ }
479
+ }
480
+
481
+ // When both verticalBorder AND columnGroupBorderColor are set,
482
+ // override the default border-light with the custom color
483
+ &.pb_advanced_table[class*="column-group-border-"] {
484
+ .pb_advanced_table_header {
485
+ > tr:not(:first-child) {
486
+ th:not(:last-child) {
487
+ border-right: 1px solid var(--column-border-color) !important;
488
+ }
489
+ }
490
+ }
491
+
492
+ .pb_advanced_table_body {
493
+ td:not(:last-child),
494
+ .pb_table_td:not(:last-child) {
495
+ border-right: 1px solid var(--column-border-color) !important;
496
+ }
497
+ }
498
+
499
+ tr.virtualized-table-row {
500
+ td:not(:last-child) {
501
+ border-right: 1px solid var(--column-border-color) !important;
502
+ }
503
+ }
504
+ }
356
505
  }
357
506
 
358
507
  @include chrome_styles($border-color);
@@ -375,12 +524,25 @@
375
524
  height: auto;
376
525
  }
377
526
 
378
- .collapsible-trail {
379
- background-color: $border_light;
380
- position: absolute;
381
- top: 0;
382
- bottom: 0;
383
- width: 2px;
527
+ // Mixin to apply sticky column styles for different color modes and themes
528
+ @mixin apply-sticky-colors($theme) {
529
+ @each $color_name, $color_value in $border_color_options {
530
+ &.column-group-border-#{$color_name} {
531
+ @if $theme == "light" {
532
+ @include advanced-table-sticky-mixin(
533
+ $color_value,
534
+ $white,
535
+ lighten($silver, $opacity_7)
536
+ );
537
+ } @else if $theme == "dark" {
538
+ @include advanced-table-sticky-mixin(
539
+ $color_value,
540
+ $bg_dark_card,
541
+ $bg_dark
542
+ );
543
+ }
544
+ }
545
+ }
384
546
  }
385
547
 
386
548
  // Sticky Left Columns Styling
@@ -397,6 +559,9 @@
397
559
  $white,
398
560
  lighten($silver, $opacity_7)
399
561
  );
562
+
563
+ // Apply border colors for sticky columns
564
+ @include apply-sticky-colors("light");
400
565
  }
401
566
 
402
567
  // Responsive Styles
@@ -404,13 +569,29 @@
404
569
  &[class*="advanced-table-responsive-scroll"] {
405
570
  overflow-x: auto;
406
571
  width: 100%;
572
+
573
+ // These are the responsive borders that should NOT inherit the custom color
407
574
  @include advanced-table-sticky-mixin(
408
575
  $border_light,
409
576
  $white,
410
577
  lighten($silver, $opacity_7)
411
578
  );
579
+
580
+ // Override any columnGroupBorderColor inheritance for responsive borders
581
+ .sticky-left {
582
+ box-shadow: $shadow_deep !important;
583
+ }
584
+
585
+ .pb_advanced_table_header,
586
+ .pb_advanced_table_body {
587
+ th.sticky-left,
588
+ td.sticky-left {
589
+ border-right: 1px solid $border_light !important;
590
+ }
591
+ }
412
592
  }
413
593
  }
594
+
414
595
  @media only screen and (min-width: $screen-xl-min) {
415
596
  &[class*="advanced-table-responsive-scroll"] {
416
597
  overflow-x: visible;
@@ -418,6 +599,20 @@
418
599
  }
419
600
 
420
601
  &.dark {
602
+ // Override default border color for dark mode
603
+ --column-border-color: #{$border_dark};
604
+
605
+ // Dark mode default border colors for trails and horizontal borders
606
+ .collapsible-trail {
607
+ background-color: $border_dark !important;
608
+ }
609
+
610
+ // Make sure all horizontal borders use the default border color in dark mode
611
+ tr, th, td {
612
+ border-top-color: $border_dark !important;
613
+ border-bottom-color: $border_dark !important;
614
+ }
615
+
421
616
  .bg-white {
422
617
  background: $bg_dark_card;
423
618
  }
@@ -446,13 +641,104 @@
446
641
  }
447
642
 
448
643
  .table-header-cells:first-child,
644
+ .table-header-cells-custom:first-child,
449
645
  td:first-child,
450
- .pb_table_td:first-child {
451
- box-shadow: 1px 0px 0px 0px $border_dark !important;
646
+ .pb_table_td:first-child,
647
+ .checkbox-cell.checkbox-cell-header:first-child {
648
+ box-shadow: 1px 0px 0px 0px var(--column-border-color) !important;
452
649
  }
453
650
 
454
- .collapsible-trail {
455
- background-color: $border_dark !important;
651
+ // Apply border colors in dark mode
652
+ &[class*="column-group-border-"] {
653
+ // For top-level column groups (ENROLLMENT DATA, PERFORMANCE DATA)
654
+ .pb_advanced_table_header {
655
+ // The main column group headers - NOT the last column
656
+ > tr:first-child {
657
+ th[colspan]:not([colspan="1"]):not(:last-child) {
658
+ border-right: 1px solid var(--column-border-color) !important;
659
+ }
660
+ }
661
+
662
+ // Subgroup headers
663
+ > tr:nth-child(2) {
664
+ th[colspan]:not([colspan="1"]):not(:last-child) {
665
+ border-right: 1px solid var(--column-border-color) !important;
666
+ }
667
+
668
+ // Last cell in each subgroup
669
+ th.last-header-cell:not(:last-child) {
670
+ border-right: 1px solid var(--column-border-color) !important;
671
+ }
672
+ }
673
+
674
+ // Individual column headers at subgroup boundaries
675
+ > tr:last-child {
676
+ // Last cell in each subgroup
677
+ th.last-header-cell:not(:last-child) {
678
+ border-right: 1px solid var(--column-border-color) !important;
679
+ }
680
+ }
681
+ }
682
+
683
+ // For data cells at column group boundaries in dark mode
684
+ .pb_advanced_table_body {
685
+ // Apply to cells that are at column group boundaries
686
+ td.last-cell:not(:last-child),
687
+ .pb_table_td.last-cell:not(:last-child) {
688
+ border-right: 1px solid var(--column-border-color) !important;
689
+ }
690
+
691
+ // Virtualized row cells at column group boundaries
692
+ tr.virtualized-table-row {
693
+ td.last-cell:not(:last-child) {
694
+ border-right: 1px solid var(--column-border-color) !important;
695
+ }
696
+ }
697
+ }
698
+
699
+ // Sub-row headers
700
+ .toggle-content {
701
+ td {
702
+ border-bottom: 1px solid $border_dark !important;
703
+ }
704
+ }
705
+ }
706
+
707
+ // Restore vertical border styling in dark mode when verticalBorder is true
708
+ .pb_table[data-vertical-border="true"] {
709
+ .pb_advanced_table_header {
710
+ > tr:not(:first-child) {
711
+ th:not(:last-child) {
712
+ border-right: 1px solid $border_dark !important;
713
+ }
714
+ }
715
+ }
716
+
717
+ .pb_advanced_table_body {
718
+ td:not(:last-child),
719
+ .pb_table_td:not(:last-child) {
720
+ border-right: 1px solid $border_dark !important;
721
+ }
722
+ }
723
+
724
+ // When both verticalBorder AND columnGroupBorderColor are set in dark mode,
725
+ // override the default border-dark with the custom color
726
+ &.pb_advanced_table[class*="column-group-border-"] {
727
+ .pb_advanced_table_header {
728
+ > tr:not(:first-child) {
729
+ th:not(:last-child) {
730
+ border-right: 1px solid var(--column-border-color) !important;
731
+ }
732
+ }
733
+ }
734
+
735
+ .pb_advanced_table_body {
736
+ td:not(:last-child),
737
+ .pb_table_td:not(:last-child) {
738
+ border-right: 1px solid var(--column-border-color) !important;
739
+ }
740
+ }
741
+ }
456
742
  }
457
743
 
458
744
  .sort-button-icon,
@@ -484,15 +770,6 @@
484
770
  }
485
771
  }
486
772
 
487
- // Vertical separator
488
- .table-header-cells:first-child,
489
- .table-header-cells-custom:first-child,
490
- td:first-child,
491
- .pb_table_td:first-child,
492
- .checkbox-cell.checkbox-cell-header:first-child {
493
- box-shadow: 1px 0px 0px 0px $border_dark !important;
494
- }
495
-
496
773
  // Fullscreen
497
774
  &.advanced-table-fullscreen {
498
775
  background: $bg_dark;
@@ -526,11 +803,26 @@
526
803
  }
527
804
  }
528
805
  }
806
+
807
+ // These are the responsive borders that should NOT inherit the custom color
529
808
  @include advanced-table-sticky-mixin(
530
809
  $border_dark,
531
810
  $bg_dark_card,
532
811
  $bg_dark
533
812
  );
813
+
814
+ // Override any columnGroupBorderColor inheritance for responsive borders in dark mode
815
+ .sticky-left {
816
+ box-shadow: $shadow_deep !important;
817
+ }
818
+
819
+ .pb_advanced_table_header,
820
+ .pb_advanced_table_body {
821
+ th.sticky-left,
822
+ td.sticky-left {
823
+ border-right: 1px solid $border_dark !important;
824
+ }
825
+ }
534
826
  }
535
827
  }
536
828
  }
@@ -34,6 +34,8 @@ type AdvancedTableProps = {
34
34
  children?: React.ReactNode | React.ReactNode[]
35
35
  className?: string
36
36
  columnDefinitions: GenericObject[]
37
+ columnGroupBorderColor?: "text_lt_default" | "text_lt_light" | "text_lt_lighter" | "text_dk_default" | "text_dk_light" | "text_dk_lighter"
38
+ columnVisibilityControl?: GenericObject
37
39
  dark?: boolean
38
40
  data?: { [key: string]: string }
39
41
  enableToggleExpansion?: "all" | "header" | "none"
@@ -71,6 +73,8 @@ const AdvancedTable = (props: AdvancedTableProps) => {
71
73
  children,
72
74
  className,
73
75
  columnDefinitions,
76
+ columnGroupBorderColor,
77
+ columnVisibilityControl,
74
78
  dark = false,
75
79
  data = {},
76
80
  enableToggleExpansion = "header",
@@ -130,7 +134,8 @@ const AdvancedTable = (props: AdvancedTableProps) => {
130
134
  paginationProps,
131
135
  virtualizedRows,
132
136
  tableOptions,
133
- onRowSelectionChange
137
+ onRowSelectionChange,
138
+ columnVisibilityControl,
134
139
  });
135
140
 
136
141
  // Initialize table actions
@@ -239,6 +244,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
239
244
  'advanced-table-allow-fullscreen': allowFullScreen
240
245
  },
241
246
  {'advanced-table-sticky-left-columns': stickyLeftColumn && stickyLeftColumn.length > 0},
247
+ columnGroupBorderColor ? `column-group-border-${columnGroupBorderColor}` : '',
242
248
  globalProps(props),
243
249
  className
244
250
  );
@@ -249,7 +255,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
249
255
  : {};
250
256
 
251
257
  // Visibility flag for action bar
252
- const isActionBarVisible = selectableRows && showActionsBar && selectedRowsLength > 0;
258
+ const isActionBarVisible = (selectableRows && showActionsBar && selectedRowsLength > 0) || columnVisibilityControl;
253
259
 
254
260
  return (
255
261
  <>
@@ -282,6 +288,8 @@ const AdvancedTable = (props: AdvancedTableProps) => {
282
288
  {renderFullscreenHeader()}
283
289
  <AdvancedTableProvider
284
290
  columnDefinitions={columnDefinitions}
291
+ columnGroupBorderColor={columnGroupBorderColor}
292
+ columnVisibilityControl={columnVisibilityControl}
285
293
  enableToggleExpansion={enableToggleExpansion}
286
294
  enableVirtualization={virtualizedRows}
287
295
  expandByDepth={expandByDepth}
@@ -312,6 +320,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
312
320
  actions={actions}
313
321
  isVisible={isActionBarVisible}
314
322
  selectedCount={selectedRowsLength}
323
+ type={columnVisibilityControl ? "column-visibility" : "row-selection"}
315
324
  />
316
325
 
317
326
  {/* Main Table */}
@@ -334,7 +343,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
334
343
  </Table>
335
344
  </React.Fragment>
336
345
  </AdvancedTableProvider>
337
-
346
+
338
347
  </div>
339
348
  {/* Bottom Pagination */}
340
349
  {pagination && (
@@ -7,6 +7,9 @@ module Playbook
7
7
  default: []
8
8
  prop :column_definitions, type: Playbook::Props::Array,
9
9
  default: []
10
+ prop :column_group_border_color, type: Playbook::Props::Enum,
11
+ values: %w[text_lt_default text_lt_light text_lt_lighter text_dk_default text_dk_light text_dk_lighter none],
12
+ default: "none"
10
13
  prop :enable_toggle_expansion, type: Playbook::Props::Enum,
11
14
  values: %w[all header none],
12
15
  default: "header"
@@ -24,7 +27,9 @@ module Playbook
24
27
  default: false
25
28
 
26
29
  def classname
27
- generate_classname("pb_advanced_table", responsive_classname, max_height_classname, separator: " ")
30
+ additional_classes = [responsive_classname, max_height_classname]
31
+ additional_classes << "column-group-border-#{column_group_border_color}" if column_group_border_color != "none"
32
+ generate_classname("pb_advanced_table", *additional_classes, separator: " ")
28
33
  end
29
34
 
30
35
  def responsive_classname
@@ -1,9 +1,3 @@
1
- **BETA VERSION**
2
- This kit's Rails version is currently under development. Some features may not work as expected, and breaking changes may still occur; use with caution.
3
- <br />
4
- <br />
5
- <br />
6
-
7
1
  The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has two required props__:
8
2
 
9
3
  ### table_data
@@ -0,0 +1,80 @@
1
+ import React from "react"
2
+ import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
+ import MOCK_DATA from "./advanced_table_mock_data.json"
4
+
5
+ const AdvancedTableColumnBorderColors = (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
+ label: "Enrollment Stats",
17
+ columns: [
18
+ {
19
+ accessor: "newEnrollments",
20
+ label: "New Enrollments",
21
+ },
22
+ {
23
+ accessor: "scheduledMeetings",
24
+ label: "Scheduled Meetings",
25
+ },
26
+ ],
27
+ },
28
+ ],
29
+ },
30
+ {
31
+ label: "Performance Data",
32
+ columns: [
33
+ {
34
+ label: "Completion Metrics",
35
+ columns: [
36
+ {
37
+ accessor: "completedClasses",
38
+ label: "Completed Classes",
39
+ },
40
+ {
41
+ accessor: "classCompletionRate",
42
+ label: "Class Completion Rate",
43
+ },
44
+ ],
45
+ },
46
+ {
47
+ label: "Attendance",
48
+ columns: [
49
+ {
50
+ accessor: "attendanceRate",
51
+ label: "Attendance Rate",
52
+ },
53
+ {
54
+ accessor: "scheduledMeetings",
55
+ label: "Scheduled Meetings",
56
+ },
57
+ ],
58
+ },
59
+ ],
60
+ },
61
+ ];
62
+
63
+ const tableProps = {
64
+ verticalBorder: true
65
+ }
66
+
67
+ return (
68
+ <>
69
+ <AdvancedTable
70
+ columnDefinitions={columnDefinitions}
71
+ columnGroupBorderColor="text_lt_default"
72
+ tableData={MOCK_DATA}
73
+ tableProps={tableProps}
74
+ {...props}
75
+ />
76
+ </>
77
+ )
78
+ }
79
+
80
+ export default AdvancedTableColumnBorderColors
@@ -0,0 +1,3 @@
1
+ The borders of column groups can be set to a different color using the `columnGroupBorderColor` prop. In order for these borders to be visible, this prop must be used with `tableProps` and `verticalBorder` set to true.
2
+
3
+ The available colors for the border are Playbook's Text Colors, which can be found [here](https://playbook.powerapp.cloud/visual_guidelines/colors).
@@ -0,0 +1,58 @@
1
+ <% column_definitions = [
2
+ {
3
+ accessor: "year",
4
+ label: "Year",
5
+ cellAccessors: ["quarter", "month", "day"],
6
+ },
7
+ {
8
+ label: "Enrollment Data",
9
+ columns: [
10
+ {
11
+ label: "Enrollment Stats",
12
+ columns: [
13
+ {
14
+ accessor: "newEnrollments",
15
+ label: "New Enrollments",
16
+ },
17
+ {
18
+ accessor: "scheduledMeetings",
19
+ label: "Scheduled Meetings",
20
+ },
21
+ ],
22
+ },
23
+ ],
24
+ },
25
+ {
26
+ label: "Performance Data",
27
+ columns: [
28
+ {
29
+ label: "Completion Metrics",
30
+ columns: [
31
+ {
32
+ accessor: "completedClasses",
33
+ label: "Completed Classes",
34
+ },
35
+ {
36
+ accessor: "classCompletionRate",
37
+ label: "Class Completion Rate",
38
+ },
39
+ ],
40
+ },
41
+ {
42
+ label: "Attendance",
43
+ columns: [
44
+ {
45
+ accessor: "attendanceRate",
46
+ label: "Attendance Rate",
47
+ },
48
+ {
49
+ accessor: "scheduledMeetings",
50
+ label: "Scheduled Meetings",
51
+ },
52
+ ],
53
+ },
54
+ ],
55
+ },
56
+ ] %>
57
+
58
+ <%= pb_rails("advanced_table", props: { id: "beta_table_with_muilti_headers", table_data: @table_data, column_definitions: column_definitions, column_group_border_color: "text_lt_default", table_props: { vertical_border: true } }) %>
@@ -0,0 +1,3 @@
1
+ The borders of column groups can be set to a different color using the `column_group_border_color` prop. In order for these borders to be visible, this prop must be used with `table_props` and `vertical_border` set to true.
2
+
3
+ The available colors for the border are Playbook's Text Colors, which can be found [here](https://playbook.powerapp.cloud/visual_guidelines/colors).