playbook_ui 14.25.0.pre.alpha.testingcss9700 → 14.25.0.pre.alpha.testingcss9751

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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +6 -6
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +60 -65
  6. data/app/pb_kits/playbook/pb_avatar/avatar.test.js +1 -1
  7. data/app/pb_kits/playbook/pb_background/_background.scss +3 -3
  8. data/app/pb_kits/playbook/pb_badge/_badge.scss +135 -29
  9. data/app/pb_kits/playbook/pb_body/_body.scss +108 -35
  10. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +1 -1
  11. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +17 -30
  12. data/app/pb_kits/playbook/pb_button/_button.scss +39 -31
  13. data/app/pb_kits/playbook/pb_button/_button.tsx +12 -12
  14. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
  15. data/app/pb_kits/playbook/pb_button/button.rb +11 -18
  16. data/app/pb_kits/playbook/pb_button/button.test.js +3 -3
  17. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.scss +82 -73
  18. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_dark.scss +32 -33
  19. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_mixins.scss +1 -1
  20. data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.test.js +2 -2
  21. data/app/pb_kits/playbook/pb_caption/_caption.scss +100 -17
  22. data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +1 -8
  23. data/app/pb_kits/playbook/pb_card/_card.scss +79 -68
  24. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +4 -4
  25. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +11 -2
  26. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +7 -7
  27. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.test.js +1 -1
  28. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
  29. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +4 -4
  30. data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +19 -19
  31. data/app/pb_kits/playbook/pb_currency/_currency.scss +124 -39
  32. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.scss +16 -6
  33. data/app/pb_kits/playbook/pb_date/_date.scss +16 -18
  34. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -1
  35. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +19 -0
  36. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -0
  37. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +12 -12
  38. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +2 -2
  39. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss +5 -5
  40. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +29 -23
  41. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +1 -1
  42. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss +1 -1
  43. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.test.js +2 -2
  44. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.scss +66 -26
  45. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +2 -2
  46. data/app/pb_kits/playbook/pb_date_time/_date_time.scss +8 -15
  47. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +6 -7
  48. data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.scss +17 -14
  49. data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.test.js +1 -1
  50. data/app/pb_kits/playbook/pb_detail/_detail.scss +86 -21
  51. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +330 -123
  52. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +16 -2
  53. data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +10 -7
  54. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  55. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +6 -6
  56. data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +4 -4
  57. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +20 -9
  58. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -1
  59. data/app/pb_kits/playbook/pb_filter/_filter.scss +8 -8
  60. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +65 -29
  61. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +1 -2
  62. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -1
  63. data/app/pb_kits/playbook/pb_flex/_flex.scss +106 -100
  64. data/app/pb_kits/playbook/pb_flex/_flex.tsx +38 -28
  65. data/app/pb_kits/playbook/pb_flex/_flex_item.scss +146 -51
  66. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +19 -8
  67. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.html.erb +12 -1
  68. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.jsx +26 -1
  69. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_rails.md +11 -0
  70. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_react.md +11 -0
  71. data/app/pb_kits/playbook/pb_flex/flex.rb +73 -39
  72. data/app/pb_kits/playbook/pb_flex/flex_item.rb +51 -6
  73. data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -1
  74. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +381 -344
  75. data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +4 -4
  76. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +8 -7
  77. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +9 -2
  78. data/app/pb_kits/playbook/pb_gauge/_gauge.scss +5 -5
  79. data/app/pb_kits/playbook/pb_hashtag/_hashtag.scss +1 -1
  80. data/app/pb_kits/playbook/pb_highlight/_highlight.scss +1 -1
  81. data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +2 -2
  82. data/app/pb_kits/playbook/pb_icon/_icon.scss +4 -0
  83. data/app/pb_kits/playbook/pb_icon_button/_icon_button.scss +4 -4
  84. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +40 -39
  85. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
  86. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +1 -1
  87. data/app/pb_kits/playbook/pb_icon_value/_icon_value.scss +16 -15
  88. data/app/pb_kits/playbook/pb_image/_image.scss +41 -36
  89. data/app/pb_kits/playbook/pb_label_pill/_label_pill.scss +1 -1
  90. data/app/pb_kits/playbook/pb_label_value/_label_value.scss +3 -2
  91. data/app/pb_kits/playbook/pb_label_value/label_value.test.js +2 -2
  92. data/app/pb_kits/playbook/pb_layout/_layout.scss +330 -305
  93. data/app/pb_kits/playbook/pb_layout/_layout.tsx +14 -11
  94. data/app/pb_kits/playbook/pb_layout/body.rb +1 -1
  95. data/app/pb_kits/playbook/pb_layout/footer.rb +1 -1
  96. data/app/pb_kits/playbook/pb_layout/header.rb +1 -1
  97. data/app/pb_kits/playbook/pb_layout/item.rb +1 -7
  98. data/app/pb_kits/playbook/pb_layout/layout.rb +16 -25
  99. data/app/pb_kits/playbook/pb_layout/layout.test.js +3 -3
  100. data/app/pb_kits/playbook/pb_layout/sidebar.rb +1 -1
  101. data/app/pb_kits/playbook/pb_legend/_legend.scss +66 -16
  102. data/app/pb_kits/playbook/pb_legend/legend.test.js +1 -1
  103. data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +4 -4
  104. data/app/pb_kits/playbook/pb_lightbox/lightbox.test.jsx +1 -1
  105. data/app/pb_kits/playbook/pb_link/_link.scss +113 -19
  106. data/app/pb_kits/playbook/pb_list/_list.scss +1 -1
  107. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.scss +13 -11
  108. data/app/pb_kits/playbook/pb_map/_map.scss +1 -1
  109. data/app/pb_kits/playbook/pb_map/docs/_map_default.jsx +1 -1
  110. data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +1 -1
  111. data/app/pb_kits/playbook/pb_map/docs/_map_with_plugin.jsx +1 -1
  112. data/app/pb_kits/playbook/pb_message/_message.scss +21 -16
  113. data/app/pb_kits/playbook/pb_message/_message.tsx +1 -0
  114. data/app/pb_kits/playbook/pb_message/_message_mixins.scss +5 -12
  115. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -1
  116. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +6 -3
  117. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +16 -15
  118. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +1 -1
  119. data/app/pb_kits/playbook/pb_nav/_bold_mixin.scss +1 -1
  120. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +1 -1
  121. data/app/pb_kits/playbook/pb_online_status/_online_status.scss +19 -15
  122. data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +1 -1
  123. data/app/pb_kits/playbook/pb_online_status/online_status.rb +5 -4
  124. data/app/pb_kits/playbook/pb_online_status/online_status.test.js +2 -2
  125. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +1 -1
  126. data/app/pb_kits/playbook/pb_overlay/overlay.rb +1 -1
  127. data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +5 -2
  128. data/app/pb_kits/playbook/pb_person/_person.scss +1 -1
  129. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +1 -1
  130. data/app/pb_kits/playbook/pb_pill/_pill.scss +23 -21
  131. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +15 -13
  132. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +108 -33
  133. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +1 -1
  134. data/app/pb_kits/playbook/pb_radio/_radio.scss +71 -52
  135. data/app/pb_kits/playbook/pb_radio/_radio.tsx +1 -1
  136. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +0 -3
  137. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +4 -4
  138. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +81 -70
  139. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +9 -1
  140. data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +1 -1
  141. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +3 -1
  142. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +7 -1
  143. data/app/pb_kits/playbook/pb_select/_select.scss +4 -4
  144. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +6 -2
  145. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +17 -8
  146. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +39 -29
  147. data/app/pb_kits/playbook/pb_selectable_list/_item.tsx +2 -0
  148. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +8 -11
  149. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.test.js +24 -25
  150. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -2
  151. data/app/pb_kits/playbook/pb_source/_source.scss +8 -8
  152. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +1 -1
  153. data/app/pb_kits/playbook/pb_star_rating/star_rating.test.js +1 -1
  154. data/app/pb_kits/playbook/pb_stat_value/_stat_value.scss +2 -2
  155. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +5 -5
  156. data/app/pb_kits/playbook/pb_text_input/text_input.rb +15 -0
  157. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +6 -6
  158. data/app/pb_kits/playbook/pb_time/_time.scss +44 -17
  159. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +1 -1
  160. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +5 -8
  161. data/app/pb_kits/playbook/pb_title/_title.scss +42 -39
  162. data/app/pb_kits/playbook/pb_title/_title.tsx +17 -8
  163. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -2
  164. data/app/pb_kits/playbook/pb_title/title.rb +20 -10
  165. data/app/pb_kits/playbook/pb_title/title.test.js +4 -4
  166. data/app/pb_kits/playbook/pb_title_count/_title_count.scss +19 -8
  167. data/app/pb_kits/playbook/pb_title_detail/_title_detail.scss +10 -11
  168. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +3 -3
  169. data/app/pb_kits/playbook/pb_user/user.test.js +1 -1
  170. data/app/pb_kits/playbook/pb_user_badge/_user_badge.scss +23 -8
  171. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +10 -10
  172. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +3 -3
  173. data/app/pb_kits/playbook/utilities/_gap.scss +12 -24
  174. data/app/pb_kits/playbook/utilities/globalPropNames.mjs +2 -0
  175. data/app/pb_kits/playbook/utilities/globalProps.ts +28 -4
  176. data/dist/chunks/_line_graph-Dv_ODxW3.js +1 -0
  177. data/dist/chunks/_typeahead-CD5RAaaP.js +6 -0
  178. data/dist/chunks/_weekday_stacked-Bv6tOPKC.js +37 -0
  179. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  180. data/dist/chunks/lib-CY5ZPzic.js +29 -0
  181. data/dist/chunks/pb_form_validation-D3b0JKHH.js +1 -0
  182. data/dist/chunks/vendor.js +1 -11
  183. data/dist/menu.yml +0 -6
  184. data/dist/playbook-doc.js +3 -67243
  185. data/dist/playbook-rails-react-bindings.js +1 -112
  186. data/dist/playbook-rails.js +1 -2464
  187. data/dist/playbook.css +2 -92354
  188. data/dist/reset.css +1 -89
  189. data/lib/playbook/classnames.rb +2 -0
  190. data/lib/playbook/spacing.rb +53 -1
  191. data/lib/playbook/version.rb +1 -1
  192. metadata +10 -38
  193. data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +0 -25
  194. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +0 -381
  195. data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +0 -231
  196. data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +0 -3
  197. data/app/pb_kits/playbook/pb_drawer/context.ts +0 -11
  198. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
  199. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +0 -41
  200. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
  201. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +0 -78
  202. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -3
  203. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +0 -26
  204. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +0 -20
  205. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +0 -59
  206. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
  207. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +0 -61
  208. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +0 -24
  209. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
  210. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +0 -54
  211. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
  212. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
  213. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +0 -99
  214. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -20
  215. data/app/pb_kits/playbook/pb_drawer/docs/index.js +0 -7
  216. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +0 -20
  217. data/app/pb_kits/playbook/pb_drawer/drawer.rb +0 -56
  218. data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +0 -81
  219. data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +0 -60
  220. data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +0 -21
  221. data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
  222. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.md +0 -9
  223. data/dist/chunks/_line_graph-DPTwfQR-.js +0 -544
  224. data/dist/chunks/_typeahead-CEqlHw0H.js +0 -30978
  225. data/dist/chunks/_weekday_stacked-D3dG14OB.js +0 -20894
  226. data/dist/chunks/lazysizes-BUUj27EF.js +0 -611
  227. data/dist/chunks/lib-CIetbXpr.js +0 -9609
  228. data/dist/chunks/pb_form_validation-D_g9rOE9.js +0 -60
@@ -11,11 +11,13 @@ $pb_button_sizes: (
11
11
  "lg": ($font_large - 2px),
12
12
  );
13
13
 
14
- [class*=pb_button_kit]{
14
+ // Base button class
15
+ .pb_button_kit {
15
16
  @include pb_button;
16
- // Size =================
17
+
18
+ // Size variants
17
19
  @each $name, $size in $pb_button_sizes {
18
- &[class*=size_#{$name}] {
20
+ &.pb_button_size_#{$name} {
19
21
  font-size: $size;
20
22
  padding: $size / 2 $size * 2.42;
21
23
  @if $name == "sm" {
@@ -24,17 +26,24 @@ $pb_button_sizes: (
24
26
  }
25
27
  }
26
28
 
27
- // Variants =================
28
- &[class*=_primary] {
29
+ // Variant styles
30
+ &.pb_button_primary {
29
31
  @include pb_button_primary;
30
32
  }
31
- &[class*=_secondary] {
33
+
34
+ &.pb_button_secondary {
32
35
  @include pb_button_secondary;
33
36
  }
34
- &[class*=_link] {
37
+
38
+ &.pb_button_link {
35
39
  @include pb_button_link;
36
40
  }
37
- &[class*=_reaction] {
41
+
42
+ &.pb_button_danger {
43
+ @include pb_button_danger;
44
+ }
45
+
46
+ &.pb_button_reaction {
38
47
  background-color: $card_light;
39
48
  min-width: 40px;
40
49
  border-radius: $border_radius_rounded;
@@ -49,52 +58,51 @@ $pb_button_sizes: (
49
58
  &:hover {
50
59
  background-color: $bg_light;
51
60
  }
52
- &.active {
61
+ &.pb_button_active {
53
62
  border-color:transparent;
54
63
  box-shadow: 0px 0px 0 2px $primary_action;
55
64
  &:hover {
56
65
  background-color: rgba($primary, 0.03);
57
66
  }
58
67
  }
68
+
69
+ &.pb_button_reaction_default {
70
+ padding: ($space_xxs + 1) ($space_sm - 4);
71
+ color: $text_lt_lighter;
72
+ }
59
73
  }
60
74
 
61
- &.reaction_default {
62
- padding: ($space_xxs + 1) ($space_sm - 4);
63
- color: $text_lt_lighter;
64
- }
65
-
66
- // Block ====================
67
- &[class*=_block] {
75
+ // Block (full width) style
76
+ &.pb_button_block {
68
77
  @include pb_button_block;
78
+ width: 100% !important;
69
79
  }
70
80
 
71
- // Loading ==================
72
- &[class*=_loading] {
81
+ // Loading state
82
+ &.pb_button_loading {
73
83
  @include pb_button_loading(true);
74
84
  }
75
85
 
76
- // Danger ===================
77
- &[class*=_danger] {
78
- @include pb_button_danger;
79
- }
80
-
81
- // Disabled =================
82
- &[class*=_disabled] {
86
+ // Disabled state
87
+ &.pb_button_disabled {
83
88
  @include pb_button_disabled;
84
89
  }
85
90
 
86
- // Dark Variants =============
87
- &.dark {
88
- &[class*=_primary] {
91
+ // Dark theme variants
92
+ &.dark {
93
+ &.pb_button_primary {
89
94
  @include pb_button_primary_dark;
90
95
  }
91
- &[class*=_secondary] {
96
+
97
+ &.pb_button_secondary {
92
98
  @include pb_button_secondary_dark;
93
99
  }
94
- &[class*=_link] {
100
+
101
+ &.pb_button_link {
95
102
  @include pb_button_link_dark;
96
103
  }
97
- &[class*=_disabled] {
104
+
105
+ &.pb_button_disabled {
98
106
  @include pb_button_disabled_dark;
99
107
  }
100
108
  }
@@ -53,18 +53,18 @@ const buttonClassName = (props: ButtonPropTypes) => {
53
53
  size = null,
54
54
  } = props
55
55
 
56
- let className = 'pb_button_kit'
57
-
58
- className += `${variant !== null ? `_${variant}` : ''}`
59
- className += `${type !== null ? `_${type}` : ''}`
60
- className += `${fullWidth ? '_block' : ''}`
61
- className += disabled ? '_disabled' : '_enabled'
62
- className += loading ? '_loading' : ''
63
- className += `${size !== null ? ` size_${size}` : ''}`
64
- className += `${variant === 'reaction' && !isValidEmoji(icon) ? ` reaction_default` : ''}`
65
- className += `${variant === 'reaction' && highlight ? ` active` : ''}`
66
-
67
- return className
56
+ const classNames = ['pb_button_kit']
57
+
58
+ if (variant) classNames.push(`pb_button_${variant}`)
59
+ if (type) classNames.push(`pb_button_${type}`)
60
+ if (fullWidth) classNames.push('pb_button_block')
61
+ classNames.push(disabled ? 'pb_button_disabled' : 'pb_button_enabled')
62
+ if (loading) classNames.push('pb_button_loading')
63
+ if (size) classNames.push(`pb_button_size_${size}`)
64
+ if (variant === 'reaction' && icon && !isValidEmoji(icon)) classNames.push('pb_button_reaction_default')
65
+ if (variant === 'reaction' && highlight) classNames.push('pb_button_active')
66
+
67
+ return classNames.join(' ')
68
68
  }
69
69
  const spinnerIcon = getAllIcons()["spinner"]
70
70
 
@@ -233,4 +233,4 @@ $pb_button_border_width: 0px;
233
233
  $disabled_color: rgba($white, $opacity_5);
234
234
  @include pb_button_variant(rgba($slate, $opacity_5), $disabled_color);
235
235
  pointer-events: none;
236
- }
236
+ }
@@ -74,8 +74,17 @@ module Playbook
74
74
  end
75
75
 
76
76
  def classname
77
- button_class = generate_classname("pb_button_kit", variant, full_width_class, disabled_class, loading_class)
78
- button_class + size_class + default_reaction_class + highlight_active
77
+ class_names = ["pb_button_kit"]
78
+ class_names << "pb_button_#{variant}" if variant
79
+ class_names << "pb_button_#{full_width_class}"
80
+ class_names << "pb_button_#{disabled_class}"
81
+ class_names << "pb_button_loading" if loading
82
+ class_names << "pb_button_size_#{size}" if size
83
+ class_names << "pb_button_reaction_default" if variant === "reaction" && icon && !valid_emoji(icon)
84
+ class_names << "pb_button_active" if variant === "reaction" && highlight
85
+
86
+ class_names.join(" ")
87
+ generate_classname(class_names.compact.join(" "), separator: " ")
79
88
  end
80
89
 
81
90
  private
@@ -88,22 +97,6 @@ module Playbook
88
97
  full_width ? "block" : "inline"
89
98
  end
90
99
 
91
- def loading_class
92
- loading ? "loading" : nil
93
- end
94
-
95
- def size_class
96
- size ? " size_#{size}" : ""
97
- end
98
-
99
- def default_reaction_class
100
- variant === "reaction" && !object.valid_emoji(object.icon) ? " reaction_default" : ""
101
- end
102
-
103
- def highlight_active
104
- variant === "reaction" && object.highlight ? " active" : ""
105
- end
106
-
107
100
  def spinner_path
108
101
  "app/pb_kits/playbook/utilities/icons/spinner.svg"
109
102
  end
@@ -22,7 +22,7 @@ test('passes type, text, and value props to button', () => {
22
22
  const kit = screen.getByTestId('primary-test')
23
23
  const content = screen.getByText(text)
24
24
 
25
- expect(kit).toHaveClass('pb_button_kit_primary_inline_enabled')
25
+ expect(kit).toHaveClass('pb_button_kit pb_button_primary pb_button_inline pb_button_enabled')
26
26
  expect(kit).toHaveAttribute('type', htmlType)
27
27
  expect(kit).toHaveAttribute('value', value)
28
28
  expect(content).toHaveTextContent(text)
@@ -54,7 +54,7 @@ test('button with secondary variant', () => {
54
54
 
55
55
  const kit = screen.getByTestId('variant-test')
56
56
 
57
- expect(kit).toHaveClass('pb_button_kit_secondary_inline_enabled')
57
+ expect(kit).toHaveClass('pb_button_kit pb_button_secondary pb_button_inline pb_button_enabled')
58
58
  expect(kit).toHaveAttribute('type', 'button')
59
59
  })
60
60
 
@@ -98,7 +98,7 @@ test('size prop', () => {
98
98
 
99
99
  const kit = screen.getByTestId('size-test')
100
100
 
101
- expect(kit).toHaveClass('pb_button_kit_primary_inline_enabled size_sm')
101
+ expect(kit).toHaveClass('pb_button_kit pb_button_primary pb_button_inline pb_button_enabled pb_button_size_sm')
102
102
  })
103
103
 
104
104
  test('should render target prop', () => {
@@ -5,92 +5,101 @@
5
5
  @import "../tokens/colors";
6
6
  @import "../tokens/opacity";
7
7
 
8
- [class^=pb_button_toolbar]{
9
-
10
- // Horizontal =============
11
-
12
- &[class*=_horizontal] {
13
- display: inline-flex;
14
- flex-direction: row;
15
- align-items: center;
16
- justify-content: flex-start;
17
- & > [class^=pb_button] {
18
- &:not(:last-child){
19
- border-bottom-right-radius: 0;
20
- border-top-right-radius: 0;
21
- border-right-width: 0;
22
- }
23
- &:not(:first-child){
24
- border-bottom-left-radius: 0;
25
- border-top-left-radius: 0;
26
- border-left-width: 0;
27
- }
28
- }
29
- &[class*=_primary] {
30
- & > [class^=pb_button]:not(:first-child)::before {
31
- @include toolbar_border(false, $primary_border)
32
- }
8
+ // Horizontal toolbars
9
+ .pb_button_toolbar_kit_horizontal_primary,
10
+ .pb_button_toolbar_kit_horizontal_secondary {
11
+ display: inline-flex;
12
+ flex-direction: row;
13
+ align-items: center;
14
+ justify-content: flex-start;
15
+
16
+ & > .pb_button_kit {
17
+ &:not(:last-child){
18
+ border-bottom-right-radius: 0;
19
+ border-top-right-radius: 0;
20
+ border-right-width: 0;
33
21
  }
34
- &[class*=_secondary] {
35
- & > [class^=pb_button]:not(:first-child)::before {
36
- @include toolbar_border(false, $secondary_border)
37
- }
22
+ &:not(:first-child){
23
+ border-bottom-left-radius: 0;
24
+ border-top-left-radius: 0;
25
+ border-left-width: 0;
38
26
  }
39
- & > [class^=pb_button]:not(:first-child):hover::before,
40
- [class^=pb_button]:hover + [class^=pb_button]::before {
41
- opacity: 0
42
- }
43
27
  }
28
+
29
+ & > .pb_button_kit:not(:first-child):hover::before,
30
+ .pb_button_kit:hover + .pb_button_kit::before {
31
+ opacity: 0
32
+ }
33
+ }
44
34
 
45
- // Vertical =============
35
+ .pb_button_toolbar_kit_horizontal_primary {
36
+ & > .pb_button_kit:not(:first-child)::before {
37
+ @include toolbar_border(false, $primary_border)
38
+ }
39
+ }
46
40
 
47
- &[class*=_vertical] {
48
- display: inline-flex;
49
- flex-direction: column;
50
- align-items: flex-start;
51
- justify-content: center;
52
- & > [class^=pb_button] {
53
- display: block;
54
- flex-grow: 1;
55
- flex-shrink: 1;
56
- flex-basis: auto;
57
- width: 100%;
58
- &:not(:last-child){
59
- border-bottom-right-radius: 0;
60
- border-bottom-left-radius: 0;
61
- border-bottom-width: 0;
62
- }
63
- &:not(:first-child){
64
- border-top-right-radius: 0;
65
- border-top-left-radius: 0;
66
- border-top-width: 0;
67
- }
68
- }
69
- &[class*=_primary] {
70
- & > [class^=pb_button]:not(:first-child)::before {
71
- @include toolbar_border(true, $primary_border)
72
- }
73
- }
74
- &[class*=_secondary] {
75
- & > [class^=pb_button]:not(:first-child)::before {
76
- @include toolbar_border(true, $secondary_border)
77
- }
41
+ .pb_button_toolbar_kit_horizontal_secondary {
42
+ & > .pb_button_kit:not(:first-child)::before {
43
+ @include toolbar_border(false, $secondary_border)
44
+ }
45
+ }
46
+
47
+ // Vertical toolbars
48
+ .pb_button_toolbar_kit_vertical_primary,
49
+ .pb_button_toolbar_kit_vertical_secondary {
50
+ display: inline-flex;
51
+ flex-direction: column;
52
+ align-items: flex-start;
53
+ justify-content: center;
54
+
55
+ & > .pb_button_kit {
56
+ display: block;
57
+ flex-grow: 1;
58
+ flex-shrink: 1;
59
+ flex-basis: auto;
60
+ width: 100%;
61
+ &:not(:last-child){
62
+ border-bottom-right-radius: 0;
63
+ border-bottom-left-radius: 0;
64
+ border-bottom-width: 0;
78
65
  }
79
- & > [class^=pb_button]:not(:first-child):hover::before,
80
- [class^=pb_button]:hover + [class^=pb_button]::before {
81
- opacity: 0
66
+ &:not(:first-child){
67
+ border-top-right-radius: 0;
68
+ border-top-left-radius: 0;
69
+ border-top-width: 0;
82
70
  }
83
71
  }
84
-
85
- // Hover =============
86
72
 
87
- & > [class^=pb_button] {
73
+ & > .pb_button_kit:not(:first-child):hover::before,
74
+ .pb_button_kit:hover + .pb_button_kit::before {
75
+ opacity: 0
76
+ }
77
+ }
78
+
79
+ .pb_button_toolbar_kit_vertical_primary {
80
+ & > .pb_button_kit:not(:first-child)::before {
81
+ @include toolbar_border(true, $primary_border)
82
+ }
83
+ }
84
+
85
+ .pb_button_toolbar_kit_vertical_secondary {
86
+ & > .pb_button_kit:not(:first-child)::before {
87
+ @include toolbar_border(true, $secondary_border)
88
+ }
89
+ }
90
+
91
+ // Button hover styles for all toolbars
92
+ .pb_button_toolbar_kit_horizontal_primary,
93
+ .pb_button_toolbar_kit_horizontal_secondary,
94
+ .pb_button_toolbar_kit_vertical_primary,
95
+ .pb_button_toolbar_kit_vertical_secondary {
96
+ & > .pb_button_kit {
88
97
  @media (hover:hover) {
89
98
  &:hover {
90
99
  background-color:darken($royal, 20%);
91
100
  }
92
101
  }
93
- &[class*=secondary] {
102
+ &.pb_button_secondary {
94
103
  @media (hover:hover) {
95
104
  &:hover {
96
105
  background-color:rgba($primary_action, $opacity_3)
@@ -98,4 +107,4 @@
98
107
  }
99
108
  }
100
109
  }
101
- }
110
+ }
@@ -2,51 +2,50 @@
2
2
  @import "../tokens/colors";
3
3
  @import "../tokens/opacity";
4
4
 
5
- [class^=pb_button_toolbar]{
6
-
7
- // Vertical =============
5
+ // Dark theme - Vertical toolbars
6
+ .pb_button_toolbar_kit_vertical_primary.dark {
7
+ & > .pb_button_kit:not(:first-child)::before {
8
+ @include toolbar_border(true, $primary_dark)
9
+ }
10
+ }
8
11
 
9
- &[class*=_vertical] {
10
- &[class*=_primary].dark {
11
- & > [class^=pb_button]:not(:first-child)::before {
12
- @include toolbar_border(true, $primary_dark)
13
- }
14
- }
15
- &[class*=_secondary].dark {
16
- & > [class^=pb_button]:not(:first-child)::before {
17
- @include toolbar_border(true, $secondary_dark)
18
- }
19
- }
12
+ .pb_button_toolbar_kit_vertical_secondary.dark {
13
+ & > .pb_button_kit:not(:first-child)::before {
14
+ @include toolbar_border(true, $secondary_dark)
20
15
  }
16
+ }
21
17
 
22
- // Horizontal =============
18
+ // Dark theme - Horizontal toolbars
19
+ .pb_button_toolbar_kit_horizontal_primary.dark {
20
+ & > .pb_button_kit:not(:first-child)::before {
21
+ @include toolbar_border(false, $primary_dark)
22
+ }
23
+ }
23
24
 
24
- &[class*=_horizontal] {
25
- &[class*=_primary].dark {
26
- & > [class^=pb_button]:not(:first-child)::before {
27
- @include toolbar_border(false, $primary_dark)
28
- }
29
- }
30
- &[class*=_secondary].dark {
31
- & > [class^=pb_button]:not(:first-child)::before {
32
- @include toolbar_border(false, $secondary_dark)
33
- }
34
- }
25
+ .pb_button_toolbar_kit_horizontal_secondary.dark {
26
+ & > .pb_button_kit:not(:first-child)::before {
27
+ @include toolbar_border(false, $secondary_dark)
35
28
  }
36
- & > [class^=pb_button]:not(:first-child):hover::before,
37
- [class^=pb_button]:hover + [class^=pb_button]::before {
29
+ }
30
+
31
+ // Dark theme hover effects
32
+ .pb_button_toolbar_kit_horizontal_primary.dark,
33
+ .pb_button_toolbar_kit_horizontal_secondary.dark,
34
+ .pb_button_toolbar_kit_vertical_primary.dark,
35
+ .pb_button_toolbar_kit_vertical_secondary.dark {
36
+ & > .pb_button_kit:not(:first-child):hover::before,
37
+ .pb_button_kit:hover + .pb_button_kit::before {
38
38
  opacity: 0
39
39
  }
40
40
 
41
- // Hover =============
42
-
43
- [class^=pb_button].dark {
41
+ // Dark button hover styles
42
+ .pb_button_kit.dark {
44
43
  @media (hover:hover) {
45
44
  &:hover {
46
45
  background-color:darken($royal, 20%);
47
46
  }
48
47
  }
49
- &[class*=secondary] {
48
+ &.pb_button_secondary {
50
49
  @media (hover:hover) {
51
50
  &:hover {
52
51
  background-color:rgba($primary_action, $opacity_3)
@@ -54,4 +53,4 @@
54
53
  }
55
54
  }
56
55
  }
57
- }
56
+ }
@@ -24,4 +24,4 @@ $secondary_dark: rgba($bg_dark, $opacity_2);
24
24
  position: relative;
25
25
  bottom: 0;
26
26
  display: block;
27
- }
27
+ }
@@ -20,7 +20,7 @@ test('default test', () => {
20
20
 
21
21
  expect(kit).toHaveClass('pb_button_toolbar_kit_horizontal_primary')
22
22
  expect(kit).toContainElement(child)
23
- expect(child).toHaveClass('pb_button_kit_primary_inline_enabled')
23
+ expect(child).toHaveClass('pb_button_kit pb_button_primary pb_button_inline pb_button_enabled')
24
24
  })
25
25
 
26
26
  test('variant and orientation props', () => {
@@ -42,5 +42,5 @@ test('variant and orientation props', () => {
42
42
  const child = screen.getByTestId('child-button')
43
43
 
44
44
  expect(kit).toHaveClass('pb_button_toolbar_kit_vertical_secondary')
45
- expect(child).toHaveClass('pb_button_kit_secondary_inline_enabled')
45
+ expect(child).toHaveClass('pb_button_kit pb_button_secondary pb_button_inline pb_button_enabled')
46
46
  })
@@ -1,32 +1,115 @@
1
1
  @import "../tokens/colors";
2
2
  @import "caption_mixin";
3
3
 
4
- [class^="pb_caption_kit"] {
4
+ // Base caption classes - all size combinations
5
+ .pb_caption_kit,
6
+ .pb_caption_kit_xs,
7
+ .pb_caption_kit_sm,
8
+ .pb_caption_kit_md,
9
+ .pb_caption_kit_base,
10
+ .pb_caption_kit_lg,
11
+ .pb_caption_kit_xl {
5
12
  @include caption;
6
- &[class*="_link"] {
7
- color: $primary;
13
+ }
14
+
15
+ // Apply caption mixin to all size+color combinations too
16
+ @each $color_name, $color_value in $pb_caption_colors {
17
+ .pb_caption_kit_xs_#{$color_name},
18
+ .pb_caption_kit_sm_#{$color_name},
19
+ .pb_caption_kit_md_#{$color_name},
20
+ .pb_caption_kit_base_#{$color_name},
21
+ .pb_caption_kit_lg_#{$color_name},
22
+ .pb_caption_kit_xl_#{$color_name} {
23
+ @include caption;
8
24
  }
25
+ }
9
26
 
10
- &[class^="pb_caption_kit_lg"] {
27
+ // Apply caption mixin to link variants too
28
+ .pb_caption_kit_xs_link,
29
+ .pb_caption_kit_sm_link,
30
+ .pb_caption_kit_md_link,
31
+ .pb_caption_kit_base_link,
32
+ .pb_caption_kit_lg_link,
33
+ .pb_caption_kit_xl_link {
34
+ @include caption;
35
+ }
36
+
37
+ // Size-specific styles
38
+ .pb_caption_kit_lg,
39
+ .pb_caption_kit_lg_default,
40
+ .pb_caption_kit_lg_light,
41
+ .pb_caption_kit_lg_lighter,
42
+ .pb_caption_kit_lg_success,
43
+ .pb_caption_kit_lg_error,
44
+ .pb_caption_kit_lg_link {
45
+ @include caption_lg;
46
+ }
47
+
48
+ // Apply lg mixin to all lg color combinations
49
+ @each $color_name, $color_value in $pb_caption_colors {
50
+ .pb_caption_kit_lg_#{$color_name} {
11
51
  @include caption_lg;
12
52
  }
53
+ }
13
54
 
14
- &[class^="pb_caption_kit_xs"] {
55
+ .pb_caption_kit_xs,
56
+ .pb_caption_kit_xs_default,
57
+ .pb_caption_kit_xs_light,
58
+ .pb_caption_kit_xs_lighter,
59
+ .pb_caption_kit_xs_success,
60
+ .pb_caption_kit_xs_error,
61
+ .pb_caption_kit_xs_link {
62
+ @include caption_xs;
63
+ }
64
+
65
+ // Apply xs mixin to all xs color combinations
66
+ @each $color_name, $color_value in $pb_caption_colors {
67
+ .pb_caption_kit_xs_#{$color_name} {
15
68
  @include caption_xs;
16
69
  }
17
-
18
- &[class*="link"] {
19
- color: $primary;
70
+ }
71
+
72
+ // Color variants - generate all size/color combinations
73
+ @each $color_name, $color_value in $pb_caption_colors {
74
+ .pb_caption_kit_xs_#{$color_name},
75
+ .pb_caption_kit_sm_#{$color_name},
76
+ .pb_caption_kit_md_#{$color_name},
77
+ .pb_caption_kit_base_#{$color_name},
78
+ .pb_caption_kit_lg_#{$color_name},
79
+ .pb_caption_kit_xl_#{$color_name} {
80
+ color: $color_value;
20
81
  }
82
+ }
21
83
 
22
- @include pb_caption_kit_colors;
84
+ // Link variant (deprecated but still supported)
85
+ .pb_caption_kit_xs_link,
86
+ .pb_caption_kit_sm_link,
87
+ .pb_caption_kit_md_link,
88
+ .pb_caption_kit_base_link,
89
+ .pb_caption_kit_lg_link,
90
+ .pb_caption_kit_xl_link {
91
+ color: $primary;
92
+ }
23
93
 
24
- &.dark {
25
- @include caption_dark;
26
- @each $name, $color in $pb_dark_caption_colors {
27
- &[class*="_#{$name}"] {
28
- color: $color;
29
- }
30
- }
31
- }
94
+ // Dark theme variants
95
+ .pb_caption_kit.dark,
96
+ .pb_caption_kit_xs.dark,
97
+ .pb_caption_kit_sm.dark,
98
+ .pb_caption_kit_md.dark,
99
+ .pb_caption_kit_base.dark,
100
+ .pb_caption_kit_lg.dark,
101
+ .pb_caption_kit_xl.dark {
102
+ @include caption_dark;
32
103
  }
104
+
105
+ // Dark theme color variants
106
+ @each $color_name, $color_value in $pb_dark_caption_colors {
107
+ .pb_caption_kit_xs_#{$color_name}.dark,
108
+ .pb_caption_kit_sm_#{$color_name}.dark,
109
+ .pb_caption_kit_md_#{$color_name}.dark,
110
+ .pb_caption_kit_base_#{$color_name}.dark,
111
+ .pb_caption_kit_lg_#{$color_name}.dark,
112
+ .pb_caption_kit_xl_#{$color_name}.dark {
113
+ color: $color_value;
114
+ }
115
+ }
@@ -44,11 +44,4 @@ $pb_dark_caption_colors: (
44
44
 
45
45
  @mixin caption_dark {
46
46
  color: $text_dk_light;
47
- }
48
- @mixin pb_caption_kit_colors {
49
- @each $name, $color in $pb_caption_colors {
50
- &[class*="#{$name}"] {
51
- color: $color
52
- }
53
- }
54
- }
47
+ }