playbook_ui 15.0.0.pre.alpha.PLAY2468phonenuminputvalidation10790 → 15.0.0.pre.alpha.PLAY2473rowhighlightfix10510

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -2
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +0 -12
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +1 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +13 -67
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_vertical_border.jsx +2 -2
  7. data/app/pb_kits/playbook/pb_card/_card.scss +4 -12
  8. data/app/pb_kits/playbook/pb_card/_card.tsx +3 -3
  9. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +0 -10
  10. data/app/pb_kits/playbook/pb_card/docs/_card_highlight.html.erb +0 -3
  11. data/app/pb_kits/playbook/pb_card/docs/_card_highlight.jsx +0 -8
  12. data/app/pb_kits/playbook/pb_contact/_contact.tsx +0 -5
  13. data/app/pb_kits/playbook/pb_contact/contact.rb +0 -4
  14. data/app/pb_kits/playbook/pb_contact/contact.test.js +1 -21
  15. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.html.erb +1 -16
  16. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.jsx +0 -15
  17. data/app/pb_kits/playbook/pb_contact/docs/_contact_with_detail.html.erb +0 -6
  18. data/app/pb_kits/playbook/pb_contact/docs/_contact_with_detail.jsx +0 -6
  19. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
  20. data/app/pb_kits/playbook/pb_form/pb_form_validation.js +4 -19
  21. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +0 -1
  22. data/app/pb_kits/playbook/pb_icon_button/icon_button.html.erb +1 -2
  23. data/app/pb_kits/playbook/pb_nav/_item.tsx +5 -19
  24. data/app/pb_kits/playbook/pb_nav/_nav.scss +0 -27
  25. data/app/pb_kits/playbook/pb_nav/_nav.test.js +0 -16
  26. data/app/pb_kits/playbook/pb_nav/_nav.tsx +0 -5
  27. data/app/pb_kits/playbook/pb_nav/docs/example.yml +0 -2
  28. data/app/pb_kits/playbook/pb_nav/docs/index.js +1 -2
  29. data/app/pb_kits/playbook/pb_nav/item.html.erb +2 -6
  30. data/app/pb_kits/playbook/pb_nav/nav.rb +1 -6
  31. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.html.erb +3 -3
  32. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_common.html.erb +3 -3
  33. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_confirmation.html.erb +3 -3
  34. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_meter_settings.html.erb +3 -3
  35. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_strength_change.html.erb +3 -3
  36. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +2 -43
  37. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb +2 -2
  38. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +5 -13
  39. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.html.erb +0 -23
  40. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.jsx +7 -45
  41. data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +1 -4
  42. data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +8 -24
  43. data/app/pb_kits/playbook/pb_timestamp/docs/_time_stamp_default.md +1 -0
  44. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.html.erb +10 -0
  45. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.jsx +9 -0
  46. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.html.erb +17 -3
  47. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.jsx +15 -0
  48. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.html.erb +2 -0
  49. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.jsx +2 -0
  50. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.html.erb +14 -0
  51. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.jsx +14 -0
  52. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_unstyled.html.erb +4 -0
  53. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_unstyled.jsx +4 -0
  54. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.jsx +1 -0
  55. data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +6 -18
  56. data/app/pb_kits/playbook/pb_timestamp/docs/index.js +0 -6
  57. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +7 -29
  58. data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +4 -69
  59. data/dist/chunks/{_line_graph-CspDMr9b.js → _line_graph-BBny-YYZ.js} +1 -1
  60. data/dist/chunks/{_typeahead-B_wpgm_J.js → _typeahead-CeyJ6-GF.js} +2 -2
  61. data/dist/chunks/{_weekday_stacked-CXzARuTy.js → _weekday_stacked-Dfq9Ls3V.js} +3 -3
  62. data/dist/chunks/{lib-QZuu1ltS.js → lib-BTs5acfO.js} +1 -1
  63. data/dist/chunks/pb_form_validation-CKkaQFX3.js +1 -0
  64. data/dist/chunks/vendor.js +1 -1
  65. data/dist/menu.yml +0 -6
  66. data/dist/playbook-doc.js +2 -2
  67. data/dist/playbook-rails-react-bindings.js +1 -1
  68. data/dist/playbook-rails.js +1 -1
  69. data/dist/playbook.css +1 -1
  70. data/lib/playbook/engine.rb +1 -0
  71. data/lib/playbook/forms/builder/form_field_builder.rb +1 -28
  72. data/lib/playbook/kit_base.rb +2 -23
  73. data/lib/playbook/version.rb +1 -1
  74. metadata +27 -73
  75. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.md +0 -5
  76. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_extendedunderline.html.erb +0 -6
  77. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_extendedunderline.jsx +0 -39
  78. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_extendedunderline.md +0 -1
  79. data/app/pb_kits/playbook/pb_pb_circle_chart/_pb_circle_chart.scss +0 -3
  80. data/app/pb_kits/playbook/pb_pb_circle_chart/_pb_circle_chart.tsx +0 -62
  81. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_block_content.html.erb +0 -31
  82. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_block_content.jsx +0 -81
  83. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.html.erb +0 -25
  84. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.jsx +0 -40
  85. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.md +0 -5
  86. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.html.erb +0 -27
  87. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.jsx +0 -39
  88. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.md +0 -5
  89. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.html.erb +0 -93
  90. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.jsx +0 -131
  91. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.md +0 -14
  92. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_labels.html.erb +0 -42
  93. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_labels.jsx +0 -58
  94. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_legend.html.erb +0 -24
  95. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_legend.jsx +0 -38
  96. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.html.erb +0 -22
  97. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.jsx +0 -33
  98. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_inner_sizes.html.erb +0 -118
  99. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_inner_sizes.jsx +0 -144
  100. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_live_data.jsx +0 -60
  101. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_rounded.html.erb +0 -24
  102. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_rounded.jsx +0 -42
  103. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_with_title.html.erb +0 -38
  104. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_with_title.jsx +0 -52
  105. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/example.yml +0 -29
  106. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/index.js +0 -11
  107. data/app/pb_kits/playbook/pb_pb_circle_chart/pbCircleChartTheme.ts +0 -88
  108. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.html.erb +0 -1
  109. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.rb +0 -28
  110. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.test.jsx +0 -51
  111. data/app/pb_kits/playbook/pb_section_separator/section_separator.test.js +0 -165
  112. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.md +0 -1
  113. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.md +0 -1
  114. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.md +0 -5
  115. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_current_year.html.erb +0 -12
  116. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_current_year.jsx +0 -25
  117. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_current_year.md +0 -1
  118. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_date.html.erb +0 -4
  119. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_date.jsx +0 -17
  120. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_date.md +0 -1
  121. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_time.html.erb +0 -18
  122. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_time.jsx +0 -44
  123. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_time.md +0 -1
  124. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.md +0 -1
  125. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.md +0 -5
  126. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_current_year.html.erb +0 -16
  127. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_current_year.jsx +0 -30
  128. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_current_year.md +0 -1
  129. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_date.html.erb +0 -16
  130. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_date.jsx +0 -30
  131. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_date.md +0 -1
  132. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_time.html.erb +0 -26
  133. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_time.jsx +0 -41
  134. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_time.md +0 -1
  135. data/dist/chunks/componentRegistry-DzmmLR2x.js +0 -1
  136. data/dist/chunks/pb_form_validation-W63gNcnu.js +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88a9c380534f63a7de7599bf2ee71a8afbb142b8ef6eb20a698a3df876024638
4
- data.tar.gz: 79475a4ef5ad22653424134e6c132760f48c1622bcaf7233e63744c325bc0321
3
+ metadata.gz: f3ed0631c51b54669ffc7faa87720d44235290b760f64df26d8cad1af3e527d5
4
+ data.tar.gz: 06da8419d842a780b2e5567affe683a5c28e227400a5231f82bdc6d920411186
5
5
  SHA512:
6
- metadata.gz: 4b589699c270e2d4454a2eb681af65adcd913e97a40aee6bc9fe5dc8ccf3242eb39b15af4a24ca77f339da55f1977d2e8a5f95a8d9dd2b7403070c99cbe25e71
7
- data.tar.gz: 52fad58b74f2a87c0d9d608bce2001fb8ea4ebe2323961a0d705e267a870fc5b1677eb4deca9eb1d15d5acea4db084239214565ff78d2a79cfe69bab9504fc7e
6
+ metadata.gz: 2ac52928a5ea5c597a37469b85f6509cbd26236e7e5195b9636d8409cfc7ad513d22ddb4a7889f47bf12d7d1fca748704fcd72007b89acef5e66a93cf4681db4
7
+ data.tar.gz: faa7715595570f694456f0d9a19430c3ff0b7cbdf66ab1f63e8a843110541e1da10fb22149e004069bc82dd8a27a7469f279e9fd41957befdcca61d3f21b8038
@@ -1,6 +1,5 @@
1
1
 
2
2
 
3
-
4
3
  @import 'pb_advanced_table/advanced_table';
5
4
  @import 'pb_avatar/avatar';
6
5
  @import 'pb_background/background';
@@ -110,7 +109,6 @@
110
109
  @import 'pb_weekday_stacked/weekday_stacked';
111
110
  @import 'pb_empty_state/empty_state';
112
111
  @import 'pb_pb_bar_graph/pb_bar_graph';
113
- @import 'pb_pb_circle_chart/pb_circle_chart';
114
112
  @import 'utilities/mixins';
115
113
  @import 'utilities/spacing';
116
114
  @import 'utilities/cursor';
@@ -30,7 +30,6 @@ const TableCellRenderer = ({
30
30
  columnPinning,
31
31
  customRowStyle,
32
32
  columnDefinitions,
33
- isMultiHeaderColumn = false,
34
33
  }: {
35
34
  row: Row<GenericObject>
36
35
  collapsibleTrail?: boolean
@@ -39,18 +38,12 @@ const TableCellRenderer = ({
39
38
  columnPinning: { left: string[] }
40
39
  customRowStyle?: GenericObject
41
40
  columnDefinitions?: {[key:string]:any}[]
42
- isMultiHeaderColumn?: boolean
43
41
  }) => {
44
42
  return (
45
43
  <>
46
44
  {row.getVisibleCells().map((cell: Cell<GenericObject, unknown>, i: number) => {
47
45
  const isPinnedLeft = columnPinning.left.includes(cell.column.id);
48
- // Add a border to the right of each group of columns for multi-header column tables
49
46
  const isLastCell = (() => {
50
- if (!isMultiHeaderColumn) {
51
- return false;
52
- }
53
-
54
47
  const parent = cell.column.parent;
55
48
  if (!parent) {
56
49
  const last = row.getVisibleCells().at(-1);
@@ -140,9 +133,6 @@ export const RegularTableView = ({
140
133
 
141
134
  const columnPinning = table.getState().columnPinning || { left: [] };
142
135
  const columnDefinitions = table.options.meta?.columnDefinitions || [];
143
- const isMultiHeaderColumn = columnDefinitions.some(
144
- (obj: Record<string, unknown>) => "columns" in obj
145
- );
146
136
 
147
137
  // Row pinning
148
138
  function PinnedRow({ row }: { row: Row<any> }) {
@@ -168,7 +158,6 @@ export const RegularTableView = ({
168
158
  columnDefinitions={columnDefinitions}
169
159
  columnPinning={columnPinning}
170
160
  customRowStyle={customRowStyle}
171
- isMultiHeaderColumn={isMultiHeaderColumn}
172
161
  loading={loading}
173
162
  row={row}
174
163
  stickyLeftColumn={stickyLeftColumn}
@@ -232,7 +221,6 @@ export const RegularTableView = ({
232
221
  columnDefinitions={columnDefinitions}
233
222
  columnPinning={columnPinning}
234
223
  customRowStyle={customRowStyle}
235
- isMultiHeaderColumn={isMultiHeaderColumn}
236
224
  loading={loading}
237
225
  row={row}
238
226
  stickyLeftColumn={stickyLeftColumn}
@@ -104,7 +104,7 @@ export const VirtualizedTableView = ({
104
104
  // Create debounced version of the width measurement function
105
105
  const handleResize = debounce(() => {
106
106
  setColumnWidths(getHeaderCellWidths());
107
- }, 0);
107
+ }, 100);
108
108
 
109
109
  // Add the event listener
110
110
  window.addEventListener('resize', handleResize);
@@ -249,10 +249,8 @@
249
249
  }
250
250
 
251
251
  .pb_advanced_table_body {
252
- tr {
253
- .last-cell:not(:last-of-type) {
254
- border-right: 1px solid $border_light !important;
255
- }
252
+ .last-cell {
253
+ border-right: 1px solid $border_light !important;
256
254
  }
257
255
  tr td:first-child {
258
256
  padding-left: 8px !important;
@@ -703,14 +701,6 @@
703
701
  }
704
702
  }
705
703
  }
706
-
707
- .pb_advanced_table_header {
708
- > tr {
709
- .last-header-cell:last-of-type {
710
- border-right-width: 0 !important;
711
- }
712
- }
713
- }
714
704
  }
715
705
  }
716
706
 
@@ -985,14 +975,14 @@
985
975
  // Firefox-specific fix for last-header-cell and last-cell vertical borders
986
976
  @-moz-document url-prefix() {
987
977
  .pb_advanced_table_header {
988
- .last-header-cell:not(:last-child) {
978
+ .last-header-cell {
989
979
  border-right: none !important;
990
980
  box-shadow: 1px 0 0 0 $border_light !important;
991
981
  }
992
982
  }
993
983
 
994
984
  .pb_advanced_table_body {
995
- .last-cell:not(:last-child) {
985
+ .last-cell {
996
986
  border-right: none !important;
997
987
  box-shadow: 1px 0 0 0 $border_light !important;
998
988
  }
@@ -1001,14 +991,14 @@
1001
991
  // Dark mode Firefox fixes
1002
992
  &.dark {
1003
993
  .pb_advanced_table_header {
1004
- .last-header-cell:not(:last-child) {
994
+ .last-header-cell {
1005
995
  border-right: none !important;
1006
996
  box-shadow: 1px 0 0 0 $border_dark !important;
1007
997
  }
1008
998
  }
1009
999
 
1010
1000
  .pb_advanced_table_body {
1011
- .last-cell:not(:last-child) {
1001
+ .last-cell {
1012
1002
  border-right: none !important;
1013
1003
  box-shadow: 1px 0 0 0 $border_dark !important;
1014
1004
  }
@@ -1021,62 +1011,18 @@
1021
1011
  .pb-advanced-table-popover-option:hover {
1022
1012
  background-color: $bg_light;
1023
1013
  }
1024
-
1025
1014
  // Removes borders when Wrapped inside the Card Kit
1026
- .pb_card_kit > .pb_advanced_table {
1027
- // Remove right border only from the actual last column
1028
- .pb_advanced_table_body tr td:last-child,
1029
- .pb_advanced_table_header tr th:last-child {
1030
- box-shadow: none !important; // prevents double up of borders on Firefox when in Card Kit
1015
+ .pb_card_kit > .pb_advanced_table .pb_advanced_table_body .last-cell,
1016
+ .pb_card_kit > .pb_advanced_table .pb_advanced_table_header .last-header-cell,
1017
+ .pb_card_kit > .pb_advanced_table .pb_advanced_table_body tr td:last-child,
1018
+ .pb_card_kit > .pb_advanced_table .pb_advanced_table_header tr th:last-child {
1031
1019
  border-right: none !important;
1032
- }
1033
-
1034
- // Without vertical border, remove all last-cell borders
1035
- // Specifically for header to prevent thicker borders in firefox.
1036
- .pb_table:not(.vertical-border) {
1037
- .pb_advanced_table_header .last-header-cell {
1038
- box-shadow: none !important;
1039
- }
1040
- }
1041
- // Firefox fix
1042
- @-moz-document url-prefix() {
1043
- .pb_advanced_table_header {
1044
- .last-header-cell {
1045
- box-shadow: 1px 0 0 0 $border_light !important;
1046
- }
1047
- }
1048
- }
1049
-
1050
- // For tables WITH vertical borders, only remove border from actual last column
1051
- .pb_table.vertical-border {
1052
- .pb_advanced_table_body .last-cell:not(:last-child),
1053
- .pb_advanced_table_header .last-header-cell:not(:last-child) {
1054
- box-shadow: none !important;
1055
- border-right: 1px solid $border_light !important;
1056
- }
1057
-
1058
- // Dark mode
1059
- &.dark {
1060
- .pb_advanced_table_body .last-cell:not(:last-child),
1061
- .pb_advanced_table_header .last-header-cell:not(:last-child) {
1062
- border-right: 1px solid $border_dark !important;
1063
- }
1064
- }
1065
- }
1066
-
1067
- // Support column group border colors
1068
- &.pb_advanced_table[class*="column-group-border-"] {
1069
- .pb_advanced_table_body .last-cell:not(:last-child),
1070
- .pb_advanced_table_header .last-header-cell:not(:last-child) {
1071
- border-right: 1px solid var(--column-border-color) !important;
1072
- }
1073
- }
1074
1020
  }
1075
1021
 
1076
- // Removes bottom borders when wrapped inside the Card Kit (keep existing behavior)
1077
- .pb_card_kit > .pb_advanced_table tr:last-child,
1022
+ // Removes borders when Wrapped inside the Card Kit
1023
+ .pb_card_kit > .pb_advanced_table tr:last-child,
1078
1024
  .pb_card_kit > .pb_advanced_table .last-row-cell {
1079
1025
  td {
1080
- border-bottom: none !important;
1026
+ border-bottom: none !important;
1081
1027
  }
1082
1028
  }
@@ -44,9 +44,9 @@ const AdvancedTableColumnHeadersVerticalBorder = (props) => {
44
44
  ],
45
45
  },
46
46
  ];
47
-
47
+
48
48
  const tableProps = {
49
- verticalBorder: true,
49
+ verticalBorder: true
50
50
  }
51
51
 
52
52
  return (
@@ -20,7 +20,7 @@
20
20
  // Dark mode
21
21
  .pb_card_kit.dark {
22
22
  @include pb_card_dark;
23
-
23
+
24
24
  &.pb_card_kit_selected {
25
25
  @include pb_card_selected_dark;
26
26
  }
@@ -33,8 +33,7 @@
33
33
 
34
34
  // Highlight styles
35
35
  .pb_card_kit_highlight_top,
36
- .pb_card_kit_highlight_side,
37
- .pb_card_kit_highlight_right_side {
36
+ .pb_card_kit_highlight_side {
38
37
  overflow: hidden;
39
38
  }
40
39
 
@@ -53,20 +52,13 @@
53
52
  }
54
53
  }
55
54
 
56
- // Highlight side variants
55
+ // Highlight side variants
57
56
  @each $color_name, $color_value in $pb_card_highlight_colors {
58
57
  .pb_card_kit_highlight_side.pb_card_kit_highlight_#{$color_name}::before {
59
58
  @include pb_card_highlight($pb_card_highlight_size, 100%, $color_value);
60
59
  }
61
60
  }
62
61
 
63
- // Highlight side right variants
64
- @each $color_name, $color_value in $pb_card_highlight_colors {
65
- .pb_card_kit_highlight_right_side.pb_card_kit_highlight_#{$color_name}::before {
66
- @include pb_card_right_highlight($pb_card_highlight_size, 100%, $color_value);
67
- }
68
- }
69
-
70
62
  // Card Header
71
63
  .pb_card_header_kit {
72
64
  flex-grow: 0;
@@ -76,7 +68,7 @@
76
68
  padding: $space_sm;
77
69
  border: 0;
78
70
  border-radius: $pb_card_header_border_radius $pb_card_header_border_radius 0px 0px;
79
-
71
+
80
72
  // Inherit border radius from parent card
81
73
  .pb_card_kit_border_radius_xs & {
82
74
  border-radius: $border_radius_xs $border_radius_xs 0px 0px;
@@ -26,7 +26,7 @@ type CardPropTypes = {
26
26
  dragHandle?: boolean,
27
27
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
28
28
  highlight?: {
29
- position?: "side" | "right_side" | "top",
29
+ position?: "side" | "top",
30
30
  color?: string,
31
31
  },
32
32
  id?: string,
@@ -56,7 +56,7 @@ const Header = (props: CardHeaderProps) => {
56
56
  const { children, className, headerColor = 'category_1', headerColorStriped = false } = props
57
57
  const headerColorCSS = `pb_card_header_kit_${headerColor}`
58
58
  const headerStripedCSS = headerColorStriped ? `pb_card_header_kit_${headerColor}_striped` : ''
59
-
59
+
60
60
  const headerCSS = classnames(
61
61
  'pb_card_header_kit',
62
62
  headerColorCSS,
@@ -108,7 +108,7 @@ const Card = (props: CardPropTypes): React.ReactElement => {
108
108
  const borderRadiusCSS = borderRadius !== 'md' ? `pb_card_kit_border_radius_${borderRadius}` : ''
109
109
  const highlightPositionCSS = highlight.position ? `pb_card_kit_highlight_${highlight.position}` : ''
110
110
  const highlightColorCSS = highlight.color ? `pb_card_kit_highlight_${highlight.color}` : ''
111
-
111
+
112
112
  const cardCss = classnames(
113
113
  'pb_card_kit', // Base class
114
114
  selectedCSS,
@@ -87,16 +87,6 @@ $pb_card_header_colors: map-merge(map-merge(map-merge($product_colors, $addition
87
87
  background: $background;
88
88
  }
89
89
 
90
- @mixin pb_card_right_highlight($width, $height, $background){
91
- content: "";
92
- position: absolute;
93
- top: 0;
94
- right: 0;
95
- width: $width;
96
- height: $height;
97
- background: $background;
98
- }
99
-
100
90
  @mixin pb_card_header_color($header_color) {
101
91
  background: $header_color;
102
92
  }
@@ -4,9 +4,6 @@
4
4
  <%= pb_rails("card", props: {highlight: {position: "top", color:"warning"}, margin_bottom: "sm"}) do %>
5
5
  Top Position & Warning Color
6
6
  <% end %>
7
- <%= pb_rails("card", props: {highlight: {position: "right_side", color:"product_5_highlight"}, margin_bottom: "sm"}) do %>
8
- Right Side Position & Product 5 Highlight Color
9
- <% end %>
10
7
  <%= pb_rails("card", props: {highlight: {position: "side", color:"category_2"}, margin_bottom: "sm"}) do %>
11
8
  Side Position & Category 2 Color
12
9
  <% end %>
@@ -21,14 +21,6 @@ const CardHighlight = (props) => {
21
21
  {'Top Position & Warning Color'}
22
22
  </Card>
23
23
 
24
- <Card
25
- {...props}
26
- highlight={{ position: 'right_side', color: 'product_5_highlight' }}
27
- marginBottom="sm"
28
- >
29
- {'Right Side Position & Product 5 Highlight Color'}
30
- </Card>
31
-
32
24
  <Card
33
25
  {...props}
34
26
  highlight={{ position: 'side', color: 'category_2' }}
@@ -17,7 +17,6 @@ const contactTypeMap: { [key: string]: string } = {
17
17
  'work': 'phone-office',
18
18
  'work-cell': 'phone-laptop',
19
19
  'wrong-phone': 'phone-slash',
20
- 'international': 'globe',
21
20
  }
22
21
 
23
22
  const envelopeIcon = getAllIcons()["envelope"].icon as unknown as { [key: string]: SVGElement }
@@ -25,10 +24,6 @@ const envelopeIcon = getAllIcons()["envelope"].icon as unknown as { [key: string
25
24
  const formatContact = (contactString: string, contactType: string) => {
26
25
  if (contactType === 'email') return contactString
27
26
 
28
- // International phone numbers are unformatted
29
- if (contactType === 'international') return contactString
30
-
31
- // Format US numbers
32
27
  const cleaned = contactString.replace(/\D/g, '')
33
28
  const phoneNumber = cleaned.match(/^(1|)?(\d{3})(\d{3})(\d{4})$/)
34
29
 
@@ -29,8 +29,6 @@ module Playbook
29
29
  "phone-slash"
30
30
  when "extension"
31
31
  "phone-plus"
32
- when "international"
33
- "globe"
34
32
  else # "unknown" || "other"
35
33
  "phone"
36
34
  end
@@ -41,8 +39,6 @@ module Playbook
41
39
  contact_value
42
40
  elsif contact_type == "extension" && contact_value.match(/^\d{4}$/)
43
41
  contact_value
44
- elsif contact_type == "international"
45
- contact_value
46
42
  else
47
43
  number_to_phone(formatted_value, area_code: true)
48
44
  end
@@ -66,12 +66,6 @@ test('returns correct icon', () => {
66
66
  contactValue="1234"
67
67
  data={{ testid: 'test-extension' }}
68
68
  />
69
- <Contact
70
- contactDetail="International"
71
- contactType="international"
72
- contactValue="+44 20 7946 0958"
73
- data={{ testid: 'test-international' }}
74
- />
75
69
  <Contact
76
70
  contactDetail=""
77
71
  contactType=""
@@ -89,11 +83,10 @@ test('returns correct icon', () => {
89
83
  expect(screen.getByTestId('test-wrong-phone').querySelector('.pb_custom_icon')).toBeInTheDocument()
90
84
  expect(screen.getByTestId('test-wrong-type').querySelector('.pb_custom_icon')).toBeInTheDocument()
91
85
  expect(screen.getByTestId('test-extension').querySelector('.pb_custom_icon')).toBeInTheDocument()
92
- expect(screen.getByTestId('test-international').querySelector('.pb_custom_icon')).toBeInTheDocument()
93
86
  expect(screen.getByTestId('test-empty').querySelector('.pb_custom_icon')).toBeInTheDocument()
94
87
  })
95
88
 
96
- test("not compliant values return null in US phone related contact types", () => {
89
+ test("not compliant values return null in phone related contact types", () => {
97
90
  const notCompliantValues = [
98
91
  "349-185-998223",
99
92
  "349-1858",
@@ -136,16 +129,3 @@ test("not compliant values return null in US phone related contact types", () =>
136
129
  )
137
130
  })
138
131
  })
139
-
140
- test('international contact type preserves original format', () => {
141
- render(
142
- <Contact
143
- contactType="international"
144
- contactValue="+44 20 7946 0958"
145
- data={{ testid: 'test-international-format' }}
146
- />
147
- )
148
-
149
- const kit = screen.getByTestId('test-international-format')
150
- expect(kit).toHaveTextContent('+44 20 7946 0958')
151
- })
@@ -13,7 +13,7 @@
13
13
  }) %>
14
14
 
15
15
  <%= pb_rails("contact", props: {
16
- contact_type: "work",
16
+ contact_type: "wrong number",
17
17
  contact_value: "3245627482",
18
18
  }) %>
19
19
 
@@ -21,18 +21,3 @@
21
21
  contact_type: "work-cell",
22
22
  contact_value: "349-185-9988",
23
23
  }) %>
24
-
25
- <%= pb_rails("contact", props: {
26
- contact_type: "wrong-phone",
27
- contact_value: "2124396666",
28
- }) %>
29
-
30
- <%= pb_rails("contact", props: {
31
- contact_type: "extension",
32
- contact_value: "1233",
33
- }) %>
34
-
35
- <%= pb_rails("contact", props: {
36
- contact_type: "international",
37
- contact_value: "+44 7700 900461",
38
- }) %>
@@ -28,21 +28,6 @@ const ContactDefault = (props) => {
28
28
  contactValue="3245627482"
29
29
  {...props}
30
30
  />
31
- <Contact
32
- contactType="wrong-phone"
33
- contactValue="2124396666"
34
- {...props}
35
- />
36
- <Contact
37
- contactType='extension'
38
- contactValue="1234"
39
- {...props}
40
- />
41
- <Contact
42
- contactType="international"
43
- contactValue="+44 7700 900461"
44
- {...props}
45
- />
46
31
  </div>
47
32
  )
48
33
  }
@@ -26,9 +26,3 @@
26
26
  contact_value: "1233",
27
27
  contact_detail: "Ext",
28
28
  }) %>
29
-
30
- <%= pb_rails("contact", props: {
31
- contact_type: "international",
32
- contact_value: "+44 7700 900461",
33
- contact_detail: "International",
34
- }) %>
@@ -33,12 +33,6 @@ const ContactDefault = (props) => {
33
33
  contactValue="1234"
34
34
  {...props}
35
35
  />
36
- <Contact
37
- contactDetail="International"
38
- contactType="international"
39
- contactValue="+44 7700 900461"
40
- {...props}
41
- />
42
36
  </div>
43
37
  )
44
38
  }
@@ -90,7 +90,7 @@
90
90
  <%= pb_form_with(scope: :example, method: :get, url: "", validate: true) do |form| %>
91
91
  <%= form.typeahead :example_typeahead_validation, props: { data: { typeahead_example2: true, user: {} }, label: true, placeholder: "Search for a user", required: true, validation: { message: "Please select a user." } } %>
92
92
  <%= form.text_field :example_text_field_validation, props: { label: true, required: true } %>
93
- <%= form.phone_number_field :example_phone_number_field_validation, props: { label: "Example phone field", hidden_inputs: true, required: true } %>
93
+ <%= form.phone_number_field :example_phone_number_field_validation, props: { label: "Example phone field", hidden_inputs: true } %>
94
94
  <%= form.email_field :example_email_field_validation, props: { label: true, required: true } %>
95
95
  <%= form.number_field :example_number_field_validation, props: { label: true, required: true } %>
96
96
  <%= form.search_field :example_project_number_validation, props: { label: true, required: true, validation: { pattern: "[0-9]{2}-[0-9]{5}", message: "Please enter a valid project number (example: 33-12345)." } } %>
@@ -2,13 +2,12 @@ import PbEnhancedElement from '../pb_enhanced_element'
2
2
  import { debounce } from '../utilities/object'
3
3
 
4
4
  // Kit selectors
5
- const KIT_SELECTOR = '[class^="pb_"][class*="_kit"]'
6
- const ERROR_MESSAGE_SELECTOR = '.pb_body_kit_negative'
5
+ const KIT_SELECTOR = '[class^="pb_"][class*="_kit"]'
6
+ const ERROR_MESSAGE_SELECTOR = '.pb_body_kit_negative'
7
7
 
8
8
  // Validation selectors
9
- const FORM_SELECTOR = 'form[data-pb-form-validation="true"]'
10
- const REQUIRED_FIELDS_SELECTOR = 'input[required],textarea[required],select[required]'
11
- const PHONE_NUMBER_VALIDATION_ERROR_SELECTOR = '[data-pb-phone-validation-error="true"]'
9
+ const FORM_SELECTOR = 'form[data-pb-form-validation="true"]'
10
+ const REQUIRED_FIELDS_SELECTOR = 'input[required],textarea[required],select[required]'
12
11
 
13
12
  const FIELD_EVENTS = [
14
13
  'change',
@@ -29,14 +28,6 @@ class PbFormValidation extends PbEnhancedElement {
29
28
  }, 250), false)
30
29
  })
31
30
  })
32
-
33
- // Add event listener to check for phone number validation errors
34
- this.element.addEventListener('submit', (event) => {
35
- if (this.hasPhoneNumberValidationErrors()) {
36
- event.preventDefault()
37
- return false
38
- }
39
- })
40
31
  }
41
32
 
42
33
  validateFormField(event) {
@@ -77,12 +68,6 @@ class PbFormValidation extends PbEnhancedElement {
77
68
  if (errorMessageContainer) errorMessageContainer.remove()
78
69
  }
79
70
 
80
- // Check if there are phone number input errors
81
- hasPhoneNumberValidationErrors() {
82
- const phoneNumberErrors = this.element.querySelectorAll(PHONE_NUMBER_VALIDATION_ERROR_SELECTOR)
83
- return phoneNumberErrors.length > 0
84
- }
85
-
86
71
  get errorMessageContainer() {
87
72
  const errorContainer = document.createElement('div')
88
73
  const kitClassName = ERROR_MESSAGE_SELECTOR.replace(/\./, '')
@@ -51,7 +51,6 @@ const IconButton = (props: IconButtonProps) => {
51
51
  id={id}
52
52
  >
53
53
  <Button
54
- aria={aria}
55
54
  borderRadius="xs"
56
55
  htmlType={htmlType}
57
56
  link={link}
@@ -1,6 +1,5 @@
1
1
  <%= pb_content_tag do %>
2
- <%= pb_rails("button", props: { aria: object.aria,
3
- type: object.type,
2
+ <%= pb_rails("button", props: { type: object.type,
4
3
  link: object.link,
5
4
  new_window:object.new_window,
6
5
  target: object.target,
@@ -140,8 +140,7 @@ const { filteredPadding, filteredMargin } = filterItemSpacing(itemSpacing);
140
140
  delete filteredProps?.marginLeft;
141
141
 
142
142
 
143
- const isLink = !!link
144
- const Tag = isLink ? "a" : "div"
143
+ const Tag = link ? "a" : "div";
145
144
  const activeClass = active === true ? "active" : "";
146
145
  const highlightedBorderClass = active === true && highlighted_border === false ? "highlighted_border_none" : "";
147
146
  const collapsibleTrailClass = collapsible && collapsibleTrail ? "collapsible_trail" : "";
@@ -201,13 +200,6 @@ const { filteredPadding, filteredMargin } = filterItemSpacing(itemSpacing);
201
200
 
202
201
  const collapsibleClasses = buildCss("collapsible_nav_wrapper", activeClass, highlightedBorderClass, collapsibleTrailClass)
203
202
 
204
- const handleKeyDown = (e: React.KeyboardEvent) => {
205
- if (!isLink && (e.key === "Enter" || e.key === " ")) {
206
- e.preventDefault()
207
- onClick?.()
208
- }
209
- }
210
-
211
203
  return (
212
204
  <>
213
205
  {collapsible ? (
@@ -230,18 +222,15 @@ const { filteredPadding, filteredMargin } = filterItemSpacing(itemSpacing);
230
222
  {...dataProps}
231
223
  {...htmlProps}
232
224
  className={classes}
233
- href={isLink ? link : undefined}
225
+ href={link}
234
226
  id={id}
235
- role={!isLink ? "button" : undefined}
236
- tabIndex={!isLink ? 0 : undefined}
237
- target={isLink ? target : undefined}
227
+ target={target}
238
228
  >
239
229
  {imageUrl && (
240
230
  <div
241
231
  className="pb_nav_list_item_icon_section_collapsible"
242
232
  key={imageUrl}
243
233
  onClick={(e) => handleIconClick(e)}
244
- onKeyDown={!isLink ? handleKeyDown : undefined}
245
234
  >
246
235
  <Image className="pb_nav_img_wrapper"
247
236
  url={imageUrl}
@@ -276,13 +265,10 @@ const { filteredPadding, filteredMargin } = filterItemSpacing(itemSpacing);
276
265
  {...dataProps}
277
266
  {...htmlProps}
278
267
  className={classes}
279
- href={isLink ? link : undefined}
268
+ href={link}
280
269
  id={id}
281
270
  onClick={onClick}
282
- onKeyDown={!isLink ? handleKeyDown : undefined}
283
- role={!isLink ? "button" : undefined}
284
- tabIndex={!isLink ? 0 : undefined}
285
- target={isLink ? target : undefined}
271
+ target={target}
286
272
  >
287
273
  {imageUrl && (
288
274
  <div className="pb_nav_list_item_icon_section"