playbook_ui 14.12.0 → 14.13.0.pre.alpha.PBNTR5596029

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +1 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +11 -4
  5. data/app/pb_kits/playbook/pb_advanced_table/Utilities/ActionBarAnimationHelper.ts +26 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +71 -10
  7. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +37 -21
  8. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +3 -3
  9. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +3 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.html.erb +33 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading_rails.md +1 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_loading.md → _advanced_table_loading_react.md} +2 -2
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.html.erb +38 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +1 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +3 -1
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.jsx +55 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_react.md +3 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
  21. data/app/pb_kits/playbook/pb_advanced_table/index.js +9 -6
  22. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +17 -3
  23. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +15 -11
  24. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +14 -3
  25. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +10 -7
  26. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +9 -1
  27. data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.html.erb +1 -1
  28. data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.rb +9 -0
  29. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +14 -0
  30. data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +11 -7
  31. data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +6 -7
  32. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_badge_component_overlay.jsx +9 -3
  33. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_circle_icon_component_overlay.jsx +6 -2
  34. data/app/pb_kits/playbook/pb_button/button.rb +1 -1
  35. data/app/pb_kits/playbook/pb_card/card.html.erb +21 -2
  36. data/app/pb_kits/playbook/pb_card/card.rb +7 -0
  37. data/app/pb_kits/playbook/pb_copy_button/_copy_button.scss +4 -0
  38. data/app/pb_kits/playbook/pb_copy_button/_copy_button.tsx +92 -0
  39. data/app/pb_kits/playbook/pb_copy_button/copy_button.html.erb +15 -0
  40. data/app/pb_kits/playbook/pb_copy_button/copy_button.rb +28 -0
  41. data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +64 -0
  42. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.html.erb +2 -0
  43. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.jsx +21 -0
  44. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.html.erb +5 -0
  45. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.jsx +45 -0
  46. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.md +1 -0
  47. data/app/pb_kits/playbook/pb_copy_button/docs/example.yml +8 -0
  48. data/app/pb_kits/playbook/pb_copy_button/docs/index.js +2 -0
  49. data/app/pb_kits/playbook/pb_copy_button/index.js +47 -0
  50. data/app/pb_kits/playbook/pb_date/_date.tsx +14 -4
  51. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +2 -1
  52. data/app/pb_kits/playbook/pb_date/docs/_date_unstyled.jsx +13 -5
  53. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.html.erb +99 -0
  54. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.md +1 -0
  55. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.html.erb +1 -3
  56. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.md +7 -0
  57. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +61 -0
  58. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +1 -0
  59. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +89 -0
  60. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +5 -0
  61. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +4 -5
  62. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  63. data/app/pb_kits/playbook/pb_draggable/draggable_container.html.erb +2 -2
  64. data/app/pb_kits/playbook/pb_draggable/draggable_container.rb +5 -0
  65. data/app/pb_kits/playbook/pb_draggable/draggable_item.html.erb +1 -1
  66. data/app/pb_kits/playbook/pb_draggable/draggable_item.rb +4 -0
  67. data/app/pb_kits/playbook/pb_draggable/index.js +151 -15
  68. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +7 -4
  69. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +6 -3
  70. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -6
  71. data/app/pb_kits/playbook/pb_filter/filter.html.erb +1 -5
  72. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close.html.erb +58 -0
  73. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close_rails.md +3 -0
  74. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/example.yml +1 -0
  75. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/index.js +7 -5
  76. data/app/pb_kits/playbook/pb_form_group/form_group.html.erb +1 -6
  77. data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +1 -1
  78. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +11 -7
  79. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting.html.erb +11 -0
  80. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting.jsx +22 -0
  81. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting_rails.md +1 -0
  82. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting_react.md +1 -0
  83. data/app/pb_kits/playbook/pb_home_address_street/docs/example.yml +2 -0
  84. data/app/pb_kits/playbook/pb_home_address_street/docs/index.js +1 -0
  85. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +13 -2
  86. data/app/pb_kits/playbook/pb_icon/icon.html.erb +2 -6
  87. data/app/pb_kits/playbook/pb_layout/body.html.erb +1 -5
  88. data/app/pb_kits/playbook/pb_layout/footer.html.erb +1 -5
  89. data/app/pb_kits/playbook/pb_layout/header.html.erb +1 -5
  90. data/app/pb_kits/playbook/pb_layout/item.html.erb +1 -5
  91. data/app/pb_kits/playbook/pb_layout/layout.html.erb +1 -5
  92. data/app/pb_kits/playbook/pb_layout/sidebar.html.erb +1 -5
  93. data/app/pb_kits/playbook/pb_legend/legend.html.erb +1 -6
  94. data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +7 -6
  95. data/app/pb_kits/playbook/pb_link/_link.tsx +18 -0
  96. data/app/pb_kits/playbook/pb_link/docs/_link_target.html.erb +15 -0
  97. data/app/pb_kits/playbook/pb_link/docs/_link_target.jsx +29 -0
  98. data/app/pb_kits/playbook/pb_link/docs/example.yml +5 -3
  99. data/app/pb_kits/playbook/pb_link/docs/index.js +2 -1
  100. data/app/pb_kits/playbook/pb_link/link.html.erb +1 -1
  101. data/app/pb_kits/playbook/pb_link/link.rb +6 -0
  102. data/app/pb_kits/playbook/pb_link/link.test.jsx +30 -0
  103. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -6
  104. data/app/pb_kits/playbook/pb_message/message_mention.html.erb +1 -6
  105. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_tooltip.html.erb +6 -6
  106. data/app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.html.erb +6 -9
  107. data/app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.jsx +6 -9
  108. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.jsx +12 -8
  109. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content_rails.html.erb +52 -0
  110. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content_rails.md +0 -0
  111. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows_rails.html.erb +52 -0
  112. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows_rails.md +3 -0
  113. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.html.erb +80 -0
  114. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.md +1 -0
  115. data/app/pb_kits/playbook/pb_table/docs/example.yml +3 -0
  116. data/app/pb_kits/playbook/pb_table/styles/_desktop_collapse.scss +26 -0
  117. data/app/pb_kits/playbook/pb_table/styles/_mobile.scss +0 -1
  118. data/app/pb_kits/playbook/pb_table/styles/_mobile_collapse.scss +25 -0
  119. data/app/pb_kits/playbook/pb_table/styles/_tablet_collapse.scss +25 -0
  120. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +29 -2
  121. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +31 -3
  122. data/app/pb_kits/playbook/pb_table/table_row.rb +1 -1
  123. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +1 -1
  124. data/app/pb_kits/playbook/pb_text_input/index.js +52 -83
  125. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +3 -1
  126. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb +1 -1
  127. data/app/pb_kits/playbook/pb_tooltip/index.js +45 -27
  128. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +5 -1
  129. data/app/pb_kits/playbook/pb_user/_user.tsx +3 -0
  130. data/app/pb_kits/playbook/pb_user/docs/_user_light_weight.html.erb +42 -0
  131. data/app/pb_kits/playbook/pb_user/docs/_user_light_weight.jsx +59 -0
  132. data/app/pb_kits/playbook/pb_user/docs/_user_light_weight.md +2 -0
  133. data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
  134. data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
  135. data/app/pb_kits/playbook/pb_user/user.html.erb +1 -1
  136. data/app/pb_kits/playbook/pb_user/user.rb +1 -0
  137. data/app/pb_kits/playbook/pb_user/user.test.js +14 -0
  138. data/dist/chunks/_typeahead-TUUtEUg8.js +36 -0
  139. data/dist/chunks/_weekday_stacked--GSH9pBR.js +45 -0
  140. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  141. data/dist/chunks/{lib-kMuhBuU7.js → lib-DjpLC8uO.js} +1 -1
  142. data/dist/chunks/{pb_form_validation-DBJ0wZuS.js → pb_form_validation-S56UaHZl.js} +1 -1
  143. data/dist/chunks/vendor.js +1 -1
  144. data/dist/menu.yml +6 -0
  145. data/dist/playbook-doc.js +1 -1
  146. data/dist/playbook-rails-react-bindings.js +1 -1
  147. data/dist/playbook-rails.js +1 -1
  148. data/dist/playbook.css +1 -1
  149. data/lib/playbook/pb_forms_global_props_helper.rb +136 -0
  150. data/lib/playbook/pb_forms_helper.rb +13 -4
  151. data/lib/playbook/version.rb +2 -2
  152. metadata +52 -9
  153. data/dist/chunks/_typeahead-BWwaAo_0.js +0 -36
  154. data/dist/chunks/_weekday_stacked-DE8qVYG2.js +0 -45
  155. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  156. /data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/{_fixed_confirmation_toast_auto_close.md → _fixed_confirmation_toast_auto_close_react.md} +0 -0
@@ -0,0 +1,80 @@
1
+ <% content = capture do %>
2
+ <%= pb_rails("table", props: { container: false, border_radius: "none", size: "sm"}) do %>
3
+ <%= pb_rails("table/table_head") do %>
4
+ <%= pb_rails("background", props: { tag: "tr" }) do %>
5
+ <%= pb_rails("table/table_header") do %>Alt Header<% end %>
6
+ <%= pb_rails("table/table_header") do %>Alt Header<% end %>
7
+ <%= pb_rails("table/table_header") do %>Alt Header<% end %>
8
+ <%= pb_rails("table/table_header") do %>Alt Header<% end %>
9
+ <% end %>
10
+ <% end %>
11
+ <%= pb_rails("table/table_body") do %>
12
+ <%= pb_rails("table/table_row") do %>
13
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
14
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
15
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
16
+ <%= pb_rails("table/table_cell") do %>
17
+ <%= pb_rails("pill", props: { text: "Pill", variant: "primary" }) %>
18
+ <% end %>
19
+ <% end %>
20
+ <%= pb_rails("table/table_row") do %>
21
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
22
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
23
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
24
+ <%= pb_rails("table/table_cell") do %>
25
+ <%= pb_rails("pill", props: { text: "Pill", variant: "primary" }) %>
26
+ <% end %>
27
+ <% end %>
28
+ <%= pb_rails("table/table_row") do %>
29
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
30
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
31
+ <%= pb_rails("table/table_cell") do %>Expanded<% end %>
32
+ <%= pb_rails("table/table_cell") do %>
33
+ <%= pb_rails("pill", props: { text: "Pill", variant: "primary" }) %>
34
+ <% end %>
35
+ <% end %>
36
+ <% end %>
37
+ <% end %>
38
+ <% end %>
39
+
40
+
41
+ <%= pb_rails("table", props: { size: "sm" }) do %>
42
+ <%= pb_rails("table/table_head") do %>
43
+ <%= pb_rails("table/table_row") do %>
44
+ <%= pb_rails("table/table_header", props: { text: "Column 1"}) %>
45
+ <%= pb_rails("table/table_header", props: { text: "Column 2"}) %>
46
+ <%= pb_rails("table/table_header", props: { text: "Column 3"}) %>
47
+ <%= pb_rails("table/table_header", props: { text: "Column 4"}) %>
48
+ <%= pb_rails("table/table_header", props: { text: "Column 5"}) %>
49
+ <%= pb_rails("table/table_header", props: { text: ""}) %>
50
+ <% end %>
51
+ <% end %>
52
+ <%= pb_rails("table/table_body") do %>
53
+ <%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: false, id: "4" }) do %>
54
+ <%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
55
+ <%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
56
+ <%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
57
+ <%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
58
+ <%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
59
+ <%= pb_rails("table/table_cell", props: { text_align: "right"}) do %>
60
+ <%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
61
+ <% end %>
62
+ <% end %>
63
+ <%= pb_rails("table/table_row") do %>
64
+ <%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
65
+ <%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
66
+ <%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
67
+ <%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
68
+ <%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
69
+ <%= pb_rails("table/table_cell", props: { text: ""}) %>
70
+ <% end %>
71
+ <%= pb_rails("table/table_row") do %>
72
+ <%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
73
+ <%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
74
+ <%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
75
+ <%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
76
+ <%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
77
+ <%= pb_rails("table/table_cell", props: { text: ""}) %>
78
+ <% end %>
79
+ <% end %>
80
+ <% end %>
@@ -0,0 +1 @@
1
+ The `collapsible_content` can also be used to display nested Tables within each Row.
@@ -31,6 +31,9 @@ examples:
31
31
  - table_with_subcomponents_as_divs: Table with Sub Components (Divs)
32
32
  - table_outer_padding: Outer Padding
33
33
  - table_with_collapsible: Table with Collapsible
34
+ - table_with_collapsible_with_custom_content_rails: Table with Collapsible with Custom Content
35
+ - table_with_collapsible_with_nested_rows_rails: Table with Collapsible with Nested Rows
36
+ - table_with_collapsible_with_nested_table_rails: Table with Collapsible with Nested Table
34
37
 
35
38
  react:
36
39
  - table_sm: Small
@@ -74,6 +74,31 @@
74
74
  &.table-card {
75
75
  background: none !important;
76
76
 
77
+ &.dark {
78
+ tbody, .pb_table_tbody {
79
+ tr, .pb_table_tr {
80
+ td, .pb_table_td {
81
+ background: $bg_dark_card !important;
82
+ border-color: $border_dark !important;
83
+ &:before {
84
+ color: $text_dk_light !important;
85
+ }
86
+ &:after {
87
+ height: 0;
88
+ background-color: transparent;
89
+ }
90
+
91
+ &:first-child {
92
+ border-radius: $border_rad_light $border_rad_light 0 0 !important;
93
+ }
94
+ &:last-child {
95
+ border-radius: 0 0 $border_rad_light $border_rad_light !important;
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+
77
102
  tbody, .pb_table_tbody {
78
103
  tr, .pb_table_tr {
79
104
  td, .pb_table_td {
@@ -81,6 +106,7 @@
81
106
  border-left-width: 1px !important;
82
107
  border-right-width: 1px !important;
83
108
  border-top-width: 1px !important;
109
+
84
110
  &:after {
85
111
  height: 0;
86
112
  background-color: transparent;
@@ -77,7 +77,6 @@
77
77
  tbody, .pb_table_tbody {
78
78
  tr, .pb_table_tr {
79
79
  td, .pb_table_td {
80
- background: $white !important;
81
80
  border-left-width: 1px !important;
82
81
  border-right-width: 1px !important;
83
82
  border-top-width: 1px !important;
@@ -74,6 +74,31 @@
74
74
  &.table-card {
75
75
  background: none !important;
76
76
 
77
+ &.dark {
78
+ tbody, .pb_table_tbody {
79
+ tr, .pb_table_tr {
80
+ td, .pb_table_td {
81
+ background: $bg_dark_card !important;
82
+ border-color: $border_dark !important;
83
+ &:before {
84
+ color: $text_dk_light !important;
85
+ }
86
+ &:after {
87
+ height: 0;
88
+ background-color: transparent;
89
+ }
90
+
91
+ &:first-child {
92
+ border-radius: $border_rad_light $border_rad_light 0 0 !important;
93
+ }
94
+ &:last-child {
95
+ border-radius: 0 0 $border_rad_light $border_rad_light !important;
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+
77
102
  tbody, .pb_table_tbody {
78
103
  tr, .pb_table_tr {
79
104
  td, .pb_table_td {
@@ -74,6 +74,31 @@
74
74
  &.table-card {
75
75
  background: none !important;
76
76
 
77
+ &.dark {
78
+ tbody, .pb_table_tbody {
79
+ tr, .pb_table_tr {
80
+ td, .pb_table_td {
81
+ background: $bg_dark_card !important;
82
+ border-color: $border_dark !important;
83
+ &:before {
84
+ color: $text_dk_light !important;
85
+ }
86
+ &:after {
87
+ height: 0;
88
+ background-color: transparent;
89
+ }
90
+
91
+ &:first-child {
92
+ border-radius: $border_rad_light $border_rad_light 0 0 !important;
93
+ }
94
+ &:last-child {
95
+ border-radius: 0 0 $border_rad_light $border_rad_light !important;
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+
77
102
  tbody, .pb_table_tbody {
78
103
  tr, .pb_table_tr {
79
104
  td, .pb_table_td {
@@ -7,11 +7,14 @@ import {
7
7
  } from "../../utilities/props";
8
8
  import { globalProps } from "../../utilities/globalProps";
9
9
 
10
+ import Draggable from "../../pb_draggable/_draggable"
11
+
10
12
  type TableBodyPropTypes = {
11
13
  aria?: { [key: string]: string };
12
14
  children: React.ReactNode[] | React.ReactNode;
13
15
  className: string;
14
16
  data?: { [key: string]: string };
17
+ draggableContainer?: boolean;
15
18
  htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
16
19
  id?: string;
17
20
  tag?: "table" | "div";
@@ -23,6 +26,7 @@ const TableBody = (props: TableBodyPropTypes): React.ReactElement => {
23
26
  children,
24
27
  className,
25
28
  data = {},
29
+ draggableContainer = false,
26
30
  htmlOptions = {},
27
31
  id,
28
32
  tag = "table",
@@ -37,7 +41,30 @@ const TableBody = (props: TableBodyPropTypes): React.ReactElement => {
37
41
  return (
38
42
  <>
39
43
  {isTableTag ? (
40
- <tbody
44
+ draggableContainer ? (
45
+ <Draggable.Container
46
+ {...ariaProps}
47
+ {...dataProps}
48
+ {...htmlProps}
49
+ className={classes}
50
+ id={id}
51
+ tag="tbody"
52
+ >
53
+ {children}
54
+ </Draggable.Container>
55
+ ) : (
56
+ <tbody
57
+ {...ariaProps}
58
+ {...dataProps}
59
+ {...htmlProps}
60
+ className={classes}
61
+ id={id}
62
+ >
63
+ {children}
64
+ </tbody>
65
+ )
66
+ ) : draggableContainer ? (
67
+ <Draggable.Container
41
68
  {...ariaProps}
42
69
  {...dataProps}
43
70
  {...htmlProps}
@@ -45,7 +72,7 @@ const TableBody = (props: TableBodyPropTypes): React.ReactElement => {
45
72
  id={id}
46
73
  >
47
74
  {children}
48
- </tbody>
75
+ </Draggable.Container>
49
76
  ) : (
50
77
  <div
51
78
  {...ariaProps}
@@ -9,6 +9,7 @@ import {
9
9
  import { globalProps } from "../../utilities/globalProps";
10
10
  import Collapsible from "../../pb_collapsible/_collapsible";
11
11
  import useCollapsible from "../../pb_collapsible/useCollapsible";
12
+ import Draggable from "../../pb_draggable/_draggable";
12
13
 
13
14
  type TableRowPropTypes = {
14
15
  aria?: { [key: string]: string };
@@ -19,6 +20,8 @@ type TableRowPropTypes = {
19
20
  collapsibleSideHighlight?: boolean;
20
21
  data?: { [key: string]: string };
21
22
  dark?: boolean;
23
+ dragId?: string;
24
+ draggableItem?: boolean;
22
25
  htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
23
26
  id?: string;
24
27
  toggleCellId?: string;
@@ -36,6 +39,8 @@ const TableRow = (props: TableRowPropTypes): React.ReactElement => {
36
39
  className,
37
40
  data = {},
38
41
  dark = false,
42
+ dragId,
43
+ draggableItem = false,
39
44
  htmlOptions = {},
40
45
  id,
41
46
  toggleCellId,
@@ -152,15 +157,38 @@ const TableRow = (props: TableRowPropTypes): React.ReactElement => {
152
157
  </>
153
158
  )
154
159
  ) : isTableTag ? (
155
- <tr
160
+ draggableItem ? (
161
+ <Draggable.Item
162
+ {...ariaProps}
163
+ {...dataProps}
164
+ {...htmlProps}
165
+ className={classes}
166
+ dragId={dragId}
167
+ tag="tr"
168
+ >
169
+ {children}
170
+ </Draggable.Item>
171
+ ) : (
172
+ <tr
173
+ {...ariaProps}
174
+ {...dataProps}
175
+ {...htmlProps}
176
+ className={classes}
177
+ id={id}
178
+ >
179
+ {children}
180
+ </tr>
181
+ )
182
+ ) : draggableItem ? (
183
+ <Draggable.Item
156
184
  {...ariaProps}
157
185
  {...dataProps}
158
186
  {...htmlProps}
159
187
  className={classes}
160
- id={id}
188
+ dragId={dragId}
161
189
  >
162
190
  {children}
163
- </tr>
191
+ </Draggable.Item>
164
192
  ) : (
165
193
  <div
166
194
  {...ariaProps}
@@ -12,7 +12,7 @@ module Playbook
12
12
  default: false
13
13
  prop :collapsible_content
14
14
  prop :collapsible_side_highlight, type: Playbook::Props::Boolean,
15
- default: false
15
+ default: true
16
16
 
17
17
  def classname
18
18
  generate_classname("pb_table_row_kit", side_highlight_class) + tag_class
@@ -38,7 +38,7 @@
38
38
  margin_bottom: "md",
39
39
  name: "currency_name",
40
40
  id: "example-currency",
41
- placeholder: "$0.00",
41
+ value: "$99.99",
42
42
  }) %>
43
43
 
44
44
  <style>
@@ -1,102 +1,71 @@
1
- export default class PbTextInput {
2
- static start() {
3
- const inputElements = document.querySelectorAll('[data-pb-input-mask="true"]');
4
-
5
- inputElements.forEach((inputElement) => {
6
- inputElement.addEventListener("input", (event) => {
7
- const maskType = inputElement.getAttribute("mask");
8
- const cursorPosition = inputElement.selectionStart;
9
-
10
- let rawValue = event.target.value;
11
- let formattedValue = rawValue;
12
-
13
- // Apply formatting based on the mask type
14
- switch (maskType) {
15
- case "currency":
16
- formattedValue = formatCurrency(rawValue);
17
- break;
18
- case "ssn":
19
- formattedValue = formatSSN(rawValue);
20
- break;
21
- case "postal_code":
22
- formattedValue = formatPostalCode(rawValue);
23
- break;
24
- case "zip_code":
25
- formattedValue = formatZipCode(rawValue);
26
- break;
27
- }
28
-
29
- // Update the sanitized input field in the same wrapper
30
- const sanitizedInput = inputElement
31
- .closest(".text_input_wrapper")
32
- ?.querySelector('[data="sanitized-pb-input"]');
33
-
34
- if (sanitizedInput) {
35
- switch (maskType) {
36
- case "ssn":
37
- sanitizedInput.value = sanitizeSSN(formattedValue);
38
- break;
39
- case "currency":
40
- sanitizedInput.value = sanitizeCurrency(formattedValue);
41
- break;
42
- default:
43
- sanitizedInput.value = formattedValue;
44
- }
45
- }
46
-
47
- inputElement.value = formattedValue;
48
- setCursorPosition(inputElement, cursorPosition, rawValue, formattedValue);
49
- });
50
- });
1
+ import PbEnhancedElement from "../pb_enhanced_element"
2
+ import { INPUTMASKS } from "./inputMask"
51
3
 
4
+ export default class PbTextInput extends PbEnhancedElement {
5
+ static get selector() {
6
+ return '[data-pb-input-mask="true"]';
52
7
  }
53
- }
54
-
55
- function formatCurrency(value) {
56
- const numericValue = value.replace(/[^0-9]/g, "").slice(0, 15);
57
-
58
- if (!numericValue) return "";
59
-
60
- const dollars = parseFloat((parseInt(numericValue) / 100).toFixed(2));
61
- if (dollars === 0) return "";
62
8
 
63
- return new Intl.NumberFormat("en-US", {
64
- style: "currency",
65
- currency: "USD",
66
- maximumFractionDigits: 2,
67
- }).format(dollars);
68
- }
69
-
70
- function formatSSN(value) {
71
- const cleaned = value.replace(/\D/g, "").slice(0, 9);
72
- return cleaned
73
- .replace(/(\d{5})(?=\d)/, "$1-")
74
- .replace(/(\d{3})(?=\d)/, "$1-");
75
- }
9
+ connect() {
10
+ this.handleInput = this.handleInput.bind(this);
11
+ this.element.addEventListener("input", this.handleInput);
12
+ this.handleInput();
13
+ }
76
14
 
77
- function formatZipCode(value) {
78
- return value.replace(/\D/g, "").slice(0, 5);
79
- }
15
+ disconnect() {
16
+ this.element.removeEventListener("input", this.handleInput);
17
+ }
80
18
 
81
- function formatPostalCode(value) {
82
- const cleaned = value.replace(/\D/g, "").slice(0, 9);
83
- return cleaned.replace(/(\d{5})(?=\d)/, "$1-");
19
+ handleInput() {
20
+ const maskType = this.element.getAttribute("mask");
21
+ const cursorPosition = this.element.selectionStart;
22
+ const rawValue = this.element.value;
23
+ let formattedValue = rawValue;
24
+
25
+ const maskKey = {
26
+ currency: 'currency',
27
+ ssn: 'ssn',
28
+ postal_code: 'postalCode',
29
+ zip_code: 'zipCode',
30
+ }[maskType];
31
+
32
+ if (maskKey && INPUTMASKS[maskKey]) {
33
+ formattedValue = INPUTMASKS[maskKey].format(rawValue);
34
+ }
35
+
36
+ const sanitizedInput = this.element
37
+ .closest(".text_input_wrapper")
38
+ ?.querySelector('[data="sanitized-pb-input"]');
39
+
40
+ if (sanitizedInput) {
41
+ switch (maskType) {
42
+ case "ssn":
43
+ sanitizedInput.value = sanitizeSSN(formattedValue);
44
+ break;
45
+ case "currency":
46
+ sanitizedInput.value = sanitizeCurrency(formattedValue);
47
+ break;
48
+ default:
49
+ sanitizedInput.value = formattedValue;
50
+ }
51
+ }
52
+
53
+ this.element.value = formattedValue;
54
+ setCursorPosition(this.element, cursorPosition, rawValue, formattedValue);
55
+ }
84
56
  }
85
57
 
86
58
  function sanitizeSSN(input) {
87
- return input.replace(/\D/g, "");
59
+ return input.replace(/\D/g, "");
88
60
  }
89
61
 
90
62
  function sanitizeCurrency(input) {
91
- return input.replace(/[$,]/g, "");
63
+ return input.replace(/[$,]/g, "");
92
64
  }
93
65
 
94
- // function to set cursor position
95
66
  function setCursorPosition(inputElement, cursorPosition, rawValue, formattedValue) {
96
67
  const difference = formattedValue.length - rawValue.length;
97
-
98
68
  const newPosition = Math.max(0, cursorPosition + difference);
99
-
100
69
  requestAnimationFrame(() => {
101
70
  inputElement.setSelectionRange(newPosition, newPosition);
102
71
  });
@@ -32,6 +32,7 @@ type TooltipProps = {
32
32
  position?: "absolute" | "fixed";
33
33
  text: string,
34
34
  showTooltip?: boolean,
35
+ forceOpenTooltip?: boolean,
35
36
  } & GlobalProps
36
37
 
37
38
  const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): React.ReactElement => {
@@ -49,6 +50,7 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
49
50
  text,
50
51
  showTooltip = true,
51
52
  zIndex,
53
+ forceOpenTooltip = false,
52
54
  ...rest
53
55
  } = props
54
56
 
@@ -135,7 +137,7 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
135
137
  >
136
138
  {children}
137
139
  </div>
138
- {open && (
140
+ {(open || forceOpenTooltip) && (
139
141
  <div
140
142
  {...getFloatingProps({
141
143
  className: `tooltip_tooltip ${placement} visible`,
@@ -43,4 +43,4 @@
43
43
  Whoa. I'm a tooltip.
44
44
  <% end %>
45
45
  <% end %>
46
- <% end %>
46
+ <% end %>
@@ -1,5 +1,4 @@
1
1
  import PbEnhancedElement from '../pb_enhanced_element'
2
-
3
2
  import {
4
3
  createPopperLite as createPopper,
5
4
  flip,
@@ -17,27 +16,34 @@ export default class PbTooltip extends PbEnhancedElement {
17
16
 
18
17
  connect() {
19
18
  this.triggerElements.forEach((trigger) => {
20
- trigger.addEventListener('mouseenter', () => {
21
- this.mouseenterTimeout = setTimeout(() => {
22
- this.showTooltip(trigger)
23
- this.checkCloseTooltip(trigger)
24
- }, TOOLTIP_TIMEOUT)
19
+ const method = this.triggerMethod
25
20
 
26
- trigger.addEventListener('mouseleave', () => {
21
+ if (method === 'click') {
22
+ trigger.addEventListener('click', () => {
23
+ this.showTooltip(trigger)
24
+ })
25
+ } else {
26
+ trigger.addEventListener('mouseenter', () => {
27
+ this.mouseenterTimeout = setTimeout(() => {
28
+ this.showTooltip(trigger)
29
+ this.checkCloseTooltip(trigger)
30
+ }, TOOLTIP_TIMEOUT)
31
+
32
+ trigger.addEventListener('mouseleave', () => {
33
+ clearTimeout(this.mouseenterTimeout)
34
+ setTimeout(() => {
35
+ this.hideTooltip()
36
+ }, 0)
37
+ }, { once: true })
38
+ })
39
+
40
+ this.tooltip.addEventListener('mouseenter', () => {
27
41
  clearTimeout(this.mouseenterTimeout)
28
-
29
- setTimeout(() => {
30
- this.hideTooltip()
31
- }, 0)
32
- }, { once: true })
33
- })
34
- })
35
-
36
- this.tooltip.addEventListener('mouseenter', () => {
37
- clearTimeout(this.mouseenterTimeout)
38
- })
39
- this.tooltip.addEventListener('mouseleave', () => {
40
- this.hideTooltip()
42
+ })
43
+ this.tooltip.addEventListener('mouseleave', () => {
44
+ this.hideTooltip()
45
+ })
46
+ }
41
47
  })
42
48
  }
43
49
 
@@ -54,7 +60,7 @@ export default class PbTooltip extends PbEnhancedElement {
54
60
  }
55
61
 
56
62
  showTooltip(trigger) {
57
- if (this.shouldShowTooltip === "false") return
63
+ if (this.shouldShowTooltip === 'false') return
58
64
 
59
65
  this.popper = createPopper(trigger, this.tooltip, {
60
66
  placement: this.position,
@@ -78,6 +84,13 @@ export default class PbTooltip extends PbEnhancedElement {
78
84
  ],
79
85
  })
80
86
  this.tooltip.classList.add('show')
87
+
88
+ if (this.triggerMethod === 'click') {
89
+ clearTimeout(this.autoHideTimeout)
90
+ this.autoHideTimeout = setTimeout(() => {
91
+ this.hideTooltip()
92
+ }, 1000)
93
+ }
81
94
  }
82
95
 
83
96
  hideTooltip() {
@@ -94,25 +107,26 @@ export default class PbTooltip extends PbEnhancedElement {
94
107
  let triggerEl
95
108
 
96
109
  if (this.triggerElementId) {
97
- triggerEl = document.querySelector(`#${this.triggerElementId}`) //deprecated
110
+ triggerEl = document.querySelector(`#${this.triggerElementId}`)
98
111
  } else {
99
112
  const selectorIsId = this.triggerElementSelector.indexOf('#') > -1
100
- triggerEl = selectorIsId ? document.querySelector(`${this.triggerElementSelector}`) :
101
- document.querySelectorAll(`${this.triggerElementSelector}`)
113
+ triggerEl = selectorIsId
114
+ ? document.querySelector(`${this.triggerElementSelector}`)
115
+ : document.querySelectorAll(`${this.triggerElementSelector}`)
102
116
  }
103
117
 
104
118
  if (!triggerEl) {
105
- /* eslint no-console: ["error", { allow: ["warn", "error"] }] */
106
119
  console.error('Tooltip Kit: an invalid or unavailable DOM reference was provided!')
107
120
  return []
108
121
  }
109
122
 
110
123
  if (!triggerEl.length) triggerEl = [triggerEl]
111
- return this._triggerElements = (this._triggerElements || triggerEl)
124
+ return (this._triggerElements = this._triggerElements || triggerEl)
112
125
  }
113
126
 
114
127
  get tooltip() {
115
- return this._tooltip = (this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
128
+ return (this._tooltip =
129
+ this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
116
130
  }
117
131
 
118
132
  get position() {
@@ -134,4 +148,8 @@ export default class PbTooltip extends PbEnhancedElement {
134
148
  get shouldShowTooltip() {
135
149
  return this.element.dataset.pbTooltipShowTooltip
136
150
  }
151
+
152
+ get triggerMethod() {
153
+ return this.element.dataset.pbTooltipTriggerMethod || 'hover'
154
+ }
137
155
  }