playbook_ui 7.13.0 → 7.14.0.pre.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (217) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/playbook/application_helper.rb +4 -0
  3. data/app/helpers/playbook/pb_sample_helper.rb +1 -1
  4. data/app/pb_kits/playbook/_playbook.scss +1 -0
  5. data/app/pb_kits/playbook/pb_background/docs/example.yml +0 -2
  6. data/app/pb_kits/playbook/pb_background/docs/index.js +0 -1
  7. data/app/pb_kits/playbook/pb_card/_card.jsx +3 -1
  8. data/app/pb_kits/playbook/pb_card/_card.scss +3 -2
  9. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +6 -0
  10. data/app/pb_kits/playbook/pb_card/card.rb +9 -1
  11. data/app/pb_kits/playbook/pb_card/docs/_card_border_radius.html.erb +53 -0
  12. data/app/pb_kits/playbook/pb_card/docs/_card_border_radius.jsx +71 -0
  13. data/app/pb_kits/playbook/pb_card/docs/_card_border_radius.md +1 -0
  14. data/app/pb_kits/playbook/pb_card/docs/_card_light.md +1 -0
  15. data/app/pb_kits/playbook/pb_card/docs/example.yml +2 -0
  16. data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
  17. data/app/pb_kits/playbook/pb_checkbox/_checkbox.html.erb +1 -0
  18. data/app/pb_kits/playbook/pb_checkbox/_checkbox.jsx +36 -10
  19. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +26 -20
  20. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +5 -0
  21. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +51 -0
  22. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_custom.jsx +0 -1
  23. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +77 -0
  24. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.jsx +78 -0
  25. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -0
  26. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  27. data/app/pb_kits/playbook/pb_date_range_stacked/docs/example.yml +0 -4
  28. data/app/pb_kits/playbook/pb_date_range_stacked/docs/index.js +0 -1
  29. data/app/pb_kits/playbook/pb_date_stacked/docs/example.yml +0 -7
  30. data/app/pb_kits/playbook/pb_date_stacked/docs/index.js +0 -2
  31. data/app/pb_kits/playbook/pb_date_time_stacked/docs/example.yml +0 -4
  32. data/app/pb_kits/playbook/pb_date_time_stacked/docs/index.js +0 -1
  33. data/app/pb_kits/playbook/pb_date_year_stacked/docs/example.yml +0 -2
  34. data/app/pb_kits/playbook/pb_date_year_stacked/docs/index.js +0 -1
  35. data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.jsx +9 -4
  36. data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +12 -7
  37. data/app/pb_kits/playbook/pb_distribution_bar/distribution_bar.rb +4 -1
  38. data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_custom_colors.html.erb +4 -0
  39. data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_custom_colors.jsx +18 -0
  40. data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_custom_colors.md +1 -0
  41. data/app/pb_kits/playbook/pb_distribution_bar/docs/example.yml +2 -0
  42. data/app/pb_kits/playbook/pb_distribution_bar/docs/index.js +1 -0
  43. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.jsx +12 -1
  44. data/app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.jsx +5 -1
  45. data/app/pb_kits/playbook/pb_filter/docs/_filter_close_popover.jsx +61 -0
  46. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +41 -0
  47. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx +84 -37
  48. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.md +1 -0
  49. data/app/pb_kits/playbook/pb_filter/docs/example.yml +1 -0
  50. data/app/pb_kits/playbook/pb_filter/docs/index.js +1 -0
  51. data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +18 -7
  52. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/example.yml +0 -5
  53. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/index.js +0 -2
  54. data/app/pb_kits/playbook/pb_flex/_flex.jsx +25 -9
  55. data/app/pb_kits/playbook/pb_flex/_flex.scss +40 -7
  56. data/app/pb_kits/playbook/pb_flex/_flex_item.jsx +6 -2
  57. data/app/pb_kits/playbook/pb_flex/_flex_item.scss +10 -0
  58. data/app/pb_kits/playbook/pb_flex/docs/_description.md +6 -0
  59. data/app/pb_kits/playbook/pb_flex/docs/_flex_align.html.erb +101 -0
  60. data/app/pb_kits/playbook/pb_flex/docs/{_flex_horizontal.jsx → _flex_align.jsx} +71 -77
  61. data/app/pb_kits/playbook/pb_flex/docs/_flex_align.md +7 -0
  62. data/app/pb_kits/playbook/pb_flex/docs/_flex_default.html.erb +15 -15
  63. data/app/pb_kits/playbook/pb_flex/docs/_flex_default.jsx +17 -15
  64. data/app/pb_kits/playbook/pb_flex/docs/_flex_default.md +3 -1
  65. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.html.erb +33 -0
  66. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.jsx +75 -0
  67. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.md +9 -0
  68. data/app/pb_kits/playbook/pb_flex/docs/_flex_inline.html.erb +8 -8
  69. data/app/pb_kits/playbook/pb_flex/docs/_flex_inline.md +5 -1
  70. data/app/pb_kits/playbook/pb_flex/docs/_flex_item.html.erb +49 -0
  71. data/app/pb_kits/playbook/pb_flex/docs/_flex_item.md +11 -0
  72. data/app/pb_kits/playbook/pb_flex/docs/_flex_item_example.jsx +113 -0
  73. data/app/pb_kits/playbook/pb_flex/docs/{_flex_horizontal.html.erb → _flex_justify.html.erb} +19 -21
  74. data/app/pb_kits/playbook/pb_flex/docs/{_flex_vertical.jsx → _flex_justify.jsx} +41 -99
  75. data/app/pb_kits/playbook/pb_flex/docs/_flex_justify.md +7 -0
  76. data/app/pb_kits/playbook/pb_flex/docs/_flex_reverse.html.erb +9 -9
  77. data/app/pb_kits/playbook/pb_flex/docs/_flex_reverse.jsx +2 -2
  78. data/app/pb_kits/playbook/pb_flex/docs/_flex_reverse.md +5 -0
  79. data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.html.erb +23 -8
  80. data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.jsx +4 -4
  81. data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.md +7 -0
  82. data/app/pb_kits/playbook/pb_flex/docs/_flex_wrap.jsx +1 -1
  83. data/app/pb_kits/playbook/pb_flex/docs/_flex_wrap.md +5 -0
  84. data/app/pb_kits/playbook/pb_flex/docs/example.yml +9 -4
  85. data/app/pb_kits/playbook/pb_flex/docs/index.js +4 -2
  86. data/app/pb_kits/playbook/pb_flex/flex.rb +79 -12
  87. data/app/pb_kits/playbook/pb_flex/flex_item.rb +18 -1
  88. data/app/pb_kits/playbook/pb_form_pill/_form_pill.jsx +7 -1
  89. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +2 -0
  90. data/app/pb_kits/playbook/pb_icon/docs/example.yml +1 -2
  91. data/app/pb_kits/playbook/pb_icon/docs/index.js +0 -1
  92. data/app/pb_kits/playbook/pb_icon_circle/docs/example.yml +0 -7
  93. data/app/pb_kits/playbook/pb_icon_circle/docs/index.js +0 -3
  94. data/app/pb_kits/playbook/pb_icon_value/docs/example.yml +0 -5
  95. data/app/pb_kits/playbook/pb_icon_value/docs/index.js +0 -2
  96. data/app/pb_kits/playbook/pb_image/_image.scss +1 -0
  97. data/app/pb_kits/playbook/pb_layout/_layout.scss +9 -9
  98. data/app/pb_kits/playbook/pb_layout/docs/_layout_collection.html.erb +4 -4
  99. data/app/pb_kits/playbook/pb_layout/docs/_layout_collection.md +1 -0
  100. data/app/pb_kits/playbook/pb_layout/docs/example.yml +0 -4
  101. data/app/pb_kits/playbook/pb_layout/docs/index.js +0 -1
  102. data/app/pb_kits/playbook/pb_popover/docs/example.yml +0 -13
  103. data/app/pb_kits/playbook/pb_popover/docs/index.js +0 -5
  104. data/app/pb_kits/playbook/pb_radio/_radio.scss +1 -0
  105. data/app/pb_kits/playbook/pb_select/_select.scss +6 -4
  106. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +54 -11
  107. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +53 -6
  108. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +48 -9
  109. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.jsx +41 -44
  110. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +2 -2
  111. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.jsx +53 -62
  112. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_image.jsx +43 -53
  113. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_input.html.erb +105 -0
  114. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_input.jsx +158 -0
  115. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_input.md +1 -0
  116. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.html.erb +2 -2
  117. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.jsx +46 -53
  118. data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +2 -0
  119. data/app/pb_kits/playbook/pb_selectable_card/docs/index.js +1 -0
  120. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +27 -2
  121. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +8 -8
  122. data/app/pb_kits/playbook/pb_table/_table.jsx +8 -0
  123. data/app/pb_kits/playbook/pb_table/docs/_table_responsive_table.html.erb +56 -4
  124. data/app/pb_kits/playbook/pb_table/docs/_table_responsive_table.jsx +64 -3
  125. data/app/pb_kits/playbook/pb_table/docs/_table_sm.md +2 -0
  126. data/app/pb_kits/playbook/pb_table/styles/_all.scss +3 -0
  127. data/app/pb_kits/playbook/pb_table/styles/_desktop_collapse.scss +135 -0
  128. data/app/pb_kits/playbook/pb_table/styles/_mobile_collapse.scss +135 -0
  129. data/app/pb_kits/playbook/pb_table/styles/_tablet_collapse.scss +135 -0
  130. data/app/pb_kits/playbook/pb_table/table.rb +8 -1
  131. data/app/pb_kits/playbook/pb_timestamp/_timestamp.html.erb +6 -4
  132. data/app/pb_kits/playbook/pb_timestamp/_timestamp.jsx +92 -16
  133. data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +12 -1
  134. data/app/pb_kits/playbook/pb_timestamp/docs/_description.md +1 -1
  135. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.jsx +26 -18
  136. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.html.erb +21 -1
  137. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.jsx +40 -8
  138. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.jsx +12 -4
  139. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.jsx +26 -18
  140. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.html.erb +0 -21
  141. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.jsx +6 -28
  142. data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +8 -0
  143. data/app/pb_kits/playbook/pb_timestamp/docs/index.js +4 -0
  144. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +83 -1
  145. data/app/pb_kits/playbook/pb_typeahead/_typeahead.html.erb +1 -1
  146. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +6 -1
  147. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +38 -2
  148. data/app/pb_kits/playbook/pb_typeahead/components/Control.jsx +1 -0
  149. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +2 -4
  150. data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +8 -3
  151. data/app/pb_kits/playbook/pb_typeahead/docs/{_typeahead_with_context_dark.html.erb → _typeahead_with_context.html.erb} +10 -2
  152. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +1 -1
  153. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +13 -1
  154. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.jsx +111 -0
  155. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.md +1 -0
  156. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.html.erb +1 -1
  157. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.jsx +1 -0
  158. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +3 -2
  159. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
  160. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +2 -1
  161. data/app/pb_kits/playbook/pb_user_badge/docs/index.js +0 -1
  162. data/app/pb_kits/playbook/tokens/_border_radius.scss +21 -7
  163. data/app/pb_kits/playbook/utilities/_max_width.scss +15 -0
  164. data/app/pb_kits/playbook/utilities/_spacing.scss +20 -20
  165. data/app/pb_kits/playbook/utilities/globalProps.js +7 -1
  166. data/lib/playbook.rb +11 -0
  167. data/lib/playbook/engine.rb +15 -0
  168. data/lib/playbook/props.rb +23 -1
  169. data/lib/playbook/version.rb +1 -1
  170. metadata +45 -59
  171. data/app/pb_kits/playbook/pb_background/docs/_background_dark.html.erb +0 -3
  172. data/app/pb_kits/playbook/pb_background/docs/_background_dark.jsx +0 -12
  173. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_dark.html.erb +0 -1
  174. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_dark.jsx +0 -15
  175. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_dark.html.erb +0 -5
  176. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_dark.jsx +0 -26
  177. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_dark.html.erb +0 -1
  178. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_dark.jsx +0 -14
  179. data/app/pb_kits/playbook/pb_date_year_stacked/docs/_date_year_stacked_dark.html.erb +0 -5
  180. data/app/pb_kits/playbook/pb_date_year_stacked/docs/_date_year_stacked_dark.jsx +0 -28
  181. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_dark.html.erb +0 -21
  182. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_dark.jsx +0 -43
  183. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line_dark.html.erb +0 -5
  184. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line_dark.jsx +0 -17
  185. data/app/pb_kits/playbook/pb_flex/docs/_flex_vertical.html.erb +0 -68
  186. data/app/pb_kits/playbook/pb_icon/docs/_icon_default_dark.html.erb +0 -3
  187. data/app/pb_kits/playbook/pb_icon/docs/_icon_default_dark.jsx +0 -18
  188. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color_dark.html.erb +0 -42
  189. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color_dark.jsx +0 -66
  190. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_dark.html.erb +0 -4
  191. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_dark.jsx +0 -17
  192. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_sizes_dark.html.erb +0 -29
  193. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_sizes_dark.jsx +0 -38
  194. data/app/pb_kits/playbook/pb_icon_value/docs/_icon_value_align_dark.html.erb +0 -23
  195. data/app/pb_kits/playbook/pb_icon_value/docs/_icon_value_align_dark.jsx +0 -37
  196. data/app/pb_kits/playbook/pb_icon_value/docs/_icon_value_dark.html.erb +0 -21
  197. data/app/pb_kits/playbook/pb_icon_value/docs/_icon_value_dark.jsx +0 -35
  198. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.html.erb +0 -32
  199. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.jsx +0 -97
  200. data/app/pb_kits/playbook/pb_popover/docs/_popover_close_dark.html.erb +0 -43
  201. data/app/pb_kits/playbook/pb_popover/docs/_popover_close_dark.jsx +0 -105
  202. data/app/pb_kits/playbook/pb_popover/docs/_popover_dark.html.erb +0 -25
  203. data/app/pb_kits/playbook/pb_popover/docs/_popover_dark.jsx +0 -51
  204. data/app/pb_kits/playbook/pb_popover/docs/_popover_list_dark.html.erb +0 -13
  205. data/app/pb_kits/playbook/pb_popover/docs/_popover_list_dark.jsx +0 -54
  206. data/app/pb_kits/playbook/pb_popover/docs/_popover_scroll_height_dark.html.erb +0 -25
  207. data/app/pb_kits/playbook/pb_popover/docs/_popover_scroll_height_dark.jsx +0 -57
  208. data/app/pb_kits/playbook/pb_popover/docs/_popover_z_index_dark.html.erb +0 -14
  209. data/app/pb_kits/playbook/pb_popover/docs/_popover_z_index_dark.jsx +0 -54
  210. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_align.html.erb +0 -54
  211. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_align.jsx +0 -73
  212. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_align.html.erb +0 -177
  213. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_align.jsx +0 -209
  214. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_align.html.erb +0 -123
  215. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_align.jsx +0 -146
  216. data/app/pb_kits/playbook/pb_user_badge/docs/_user_badge_size_dark.html.erb +0 -21
  217. data/app/pb_kits/playbook/pb_user_badge/docs/_user_badge_size_dark.jsx +0 -36
@@ -11,6 +11,7 @@ module Playbook
11
11
 
12
12
  prop :error, type: Playbook::Props::Boolean, default: false
13
13
  prop :checked, type: Playbook::Props::Boolean, default: false
14
+ prop :indeterminate, type: Playbook::Props::Boolean, default: false
14
15
  prop :text
15
16
  prop :value
16
17
  prop :name
@@ -47,6 +48,10 @@ module Playbook
47
48
  def checked_class
48
49
  checked ? "on" : "off"
49
50
  end
51
+
52
+ def indeterminate_class
53
+ indeterminate ? "indeterminate" : ""
54
+ end
50
55
  end
51
56
  end
52
57
  end
@@ -0,0 +1,51 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+
4
+ import Checkbox from './_checkbox'
5
+
6
+ const testId = 'checkbox1',
7
+ kitClass = 'pb_checkbox_kit'
8
+
9
+ test('returns namespaced class name', () => {
10
+ render(
11
+ <Checkbox
12
+ data={{ testid: testId }}
13
+ name="checkbox-name"
14
+ text="Checkbox"
15
+ value="check-box value"
16
+ />
17
+ )
18
+
19
+ const kit = screen.getByTestId(testId)
20
+ expect(kit).toHaveClass(kitClass)
21
+ })
22
+
23
+ test('returns dark class name', () => {
24
+ render(
25
+ <Checkbox
26
+ dark
27
+ data={{ testid: testId }}
28
+ name="checkbox-name"
29
+ text="Checkbox"
30
+ value="check-box value"
31
+ />
32
+ )
33
+
34
+ const kit = screen.getByTestId(testId)
35
+ expect(kit).toHaveClass(`${kitClass} dark`)
36
+ })
37
+
38
+ test('returns checked class name', () => {
39
+ render(
40
+ <Checkbox
41
+ checked
42
+ data={{ testid: testId }}
43
+ name="checkbox-name"
44
+ text="Checkbox"
45
+ value="check-box value"
46
+ />
47
+ )
48
+
49
+ const kit = screen.getByTestId(testId)
50
+ expect(kit).toHaveClass(`${kitClass}_checked`)
51
+ })
@@ -24,7 +24,6 @@ const CheckboxCustom = (props) => {
24
24
  onChange={handleOnChange}
25
25
  type="checkbox"
26
26
  value="custom-value"
27
- {...props}
28
27
  />
29
28
  </Checkbox>
30
29
  </div>
@@ -0,0 +1,77 @@
1
+ <%= pb_rails("table", props: { disable_hover: true, size: "md" }) do %>
2
+ <thead>
3
+ <tr>
4
+ <th>
5
+ <%= pb_rails("checkbox" , props: {
6
+ text: "Select ",
7
+ value: "checkbox-value",
8
+ name: "main",
9
+ indeterminate: true,
10
+ id: "test-indeterminate-js"
11
+ }) %>
12
+ </th>
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ <tr>
17
+ <td>
18
+ <%= pb_rails("checkbox" , props: {
19
+ text: "Item 1",
20
+ value: "checkbox-value",
21
+ checked: true,
22
+ name: "checkbox-name",
23
+ classname: "check-js"
24
+ }) %>
25
+ </td>
26
+ </tr>
27
+ <tr>
28
+ <td>
29
+ <%= pb_rails("checkbox" , props: {
30
+ text: "Item 2",
31
+ value: "checkbox-value",
32
+ checked: false,
33
+ name: "checkbox-name",
34
+ classname: "check-js"
35
+ }) %>
36
+ </td>
37
+ </tr>
38
+ </tbody>
39
+ <% end %>
40
+
41
+
42
+ <script>
43
+ const indeterminateCheckbox = document.querySelector("#test-indeterminate-js");
44
+ const checkboxes = document.querySelectorAll(".check-js");
45
+ const allEqual = arr => arr.every( v => v === arr[0] );
46
+
47
+ // Add click handlers
48
+ checkboxes.forEach((checkBox) => { checkBox.onclick = () => { updateState() } });
49
+
50
+ indeterminateCheckbox.onclick = (e) => {
51
+ checkboxes.forEach((checkBox) => {
52
+ checkBox.firstElementChild.checked = e.target.checked;
53
+ });
54
+ }
55
+
56
+ function updateState() {
57
+ const checkboxStates = [];
58
+ const indeterminateIcon = indeterminateCheckbox.querySelector("#indeterminate_icon");
59
+ const checkIcon = indeterminateCheckbox.querySelector("#check_icon");
60
+ const main = indeterminateCheckbox.querySelector("#main");
61
+
62
+ // Check select state
63
+ checkboxes.forEach((checkBox) => {
64
+ checkboxStates.push(checkBox.firstElementChild.checked);
65
+ });
66
+
67
+ if (allEqual(checkboxStates)) {
68
+ main.checked = checkboxStates[0];
69
+ indeterminateIcon.classList.remove("hidden");
70
+ checkIcon.classList.add("hidden");
71
+ } else {
72
+ main.checked = true;
73
+ indeterminateIcon.classList.add("hidden");
74
+ checkIcon.classList.remove("hidden");
75
+ }
76
+ }
77
+ </script>
@@ -0,0 +1,78 @@
1
+ import React, { useState } from 'react'
2
+ import { Checkbox, Table } from '../..'
3
+
4
+ const CheckboxIndeterminate = (props) => {
5
+ const [checkboxes, setCheckboxes] = useState([false, false])
6
+ const [isIndeterminate, toggleIndeterminate] = useState(false)
7
+
8
+ const toggleAll = (event) => {
9
+ if (event) {
10
+ const checked = event.currentTarget.checked
11
+ const updatedCheckboxes = checkboxes[0] === checkboxes[1] ? [!checkboxes[0], !checkboxes[1]] : [checked, checked]
12
+ setCheckboxes(updatedCheckboxes)
13
+ toggleIndeterminate(false)
14
+ }
15
+ }
16
+
17
+ const updateCheckbox = (event) => {
18
+ if (event){
19
+ const updatedCheckboxes = event.currentTarget.name === 'checkbox-one' ? [!checkboxes[0], checkboxes[1]] : [checkboxes[0], !checkboxes[1]]
20
+ setCheckboxes(updatedCheckboxes)
21
+ toggleIndeterminate(updatedCheckboxes[0] !== updatedCheckboxes[1])
22
+ }
23
+ }
24
+
25
+ return (
26
+ <div>
27
+ <Table
28
+ disableHover
29
+ size="sm"
30
+ {...props}
31
+ >
32
+ <thead>
33
+ <tr>
34
+ <th>
35
+ <Checkbox
36
+ {...props}
37
+ checked={isIndeterminate ? true : checkboxes[0]}
38
+ indeterminate={isIndeterminate}
39
+ name="checkbox-name"
40
+ onChange={(e) => toggleAll(e)}
41
+ text={checkboxes[0] === true ? 'Deselect All' : 'Select All'}
42
+ value="check-box value"
43
+ />
44
+ </th>
45
+ </tr>
46
+ </thead>
47
+ <tbody>
48
+ <tr>
49
+ <td>
50
+ <Checkbox
51
+ {...props}
52
+ checked={checkboxes[0]}
53
+ name="checkbox-one"
54
+ onChange={(e) => updateCheckbox(e)}
55
+ text="Cookies"
56
+ value="check-box value"
57
+ />
58
+ </td>
59
+ </tr>
60
+ <tr>
61
+ <td>
62
+ <Checkbox
63
+ {...props}
64
+ checked={checkboxes[1]}
65
+ name="checkbox-two"
66
+ onChange={(e) => updateCheckbox(e)}
67
+ text="Donuts"
68
+ value="check-box value"
69
+ />
70
+ </td>
71
+ </tr>
72
+ </tbody>
73
+ </Table>
74
+ </div>
75
+ )
76
+ }
77
+
78
+ export default CheckboxIndeterminate
@@ -5,9 +5,11 @@ examples:
5
5
  - checkbox_custom: Custom Checkbox
6
6
  - checkbox_error: Default w/ Error
7
7
  - checkbox_options: Checkbox w/ Options
8
+ - checkbox_indeterminate: Checkbox Indeterminate
8
9
 
9
10
  react:
10
11
  - checkbox_default: Default
11
12
  - checkbox_checked: Load as checked
12
13
  - checkbox_custom: Custom Checkbox
13
14
  - checkbox_error: Default w/ Error
15
+ - checkbox_indeterminate: Checkbox Indeterminate
@@ -2,3 +2,4 @@ export { default as CheckboxDefault } from './_checkbox_default.jsx'
2
2
  export { default as CheckboxCustom } from './_checkbox_custom.jsx'
3
3
  export { default as CheckboxError } from './_checkbox_error.jsx'
4
4
  export { default as CheckboxChecked } from './_checkbox_checked.jsx'
5
+ export { default as CheckboxIndeterminate } from './_checkbox_indeterminate.jsx'
@@ -2,10 +2,6 @@ examples:
2
2
 
3
3
  rails:
4
4
  - date_range_stacked_default: Default
5
- - date_range_stacked_dark: Dark
6
-
7
5
 
8
6
  react:
9
7
  - date_range_stacked_default: Default
10
- - date_range_stacked_dark: Dark
11
-
@@ -1,2 +1 @@
1
1
  export { default as DateRangeStackedDefault } from './_date_range_stacked_default.jsx'
2
- export { default as DateRangeStackedDark } from './_date_range_stacked_dark.jsx'
@@ -6,9 +6,6 @@ examples:
6
6
  - date_stacked_reverse: Day & Month Reverse
7
7
  - date_stacked_sizes: Sizes
8
8
  - date_stacked_align: Alignment
9
- - date_stacked_dark: Dark
10
-
11
-
12
9
 
13
10
  react:
14
11
  - date_stacked_default: Default
@@ -16,7 +13,3 @@ examples:
16
13
  - date_stacked_reverse: Day & Month Reverse
17
14
  - date_stacked_sizes: Sizes
18
15
  - date_stacked_align: Alignment
19
- - date_stacked_dark: Dark
20
-
21
-
22
-
@@ -3,5 +3,3 @@ export { default as DateStackedNotCurrentYear } from './_date_stacked_not_curren
3
3
  export { default as DateStackedReverse } from './_date_stacked_reverse.jsx'
4
4
  export { default as DateStackedSizes } from './_date_stacked_sizes.jsx'
5
5
  export { default as DateStackedAlign } from './_date_stacked_align.jsx'
6
- export { default as DateStackedDark } from './_date_stacked_dark.jsx'
7
-
@@ -2,10 +2,6 @@ examples:
2
2
 
3
3
  rails:
4
4
  - date_time_stacked_default: Default
5
- - date_time_stacked_dark: Dark
6
-
7
5
 
8
6
  react:
9
7
  - date_time_stacked_default: Default
10
- - date_time_stacked_dark: Dark
11
-
@@ -1,2 +1 @@
1
1
  export { default as DateTimeStackedDefault } from './_date_time_stacked_default.jsx'
2
- export { default as DateTimeStackedDark } from './_date_time_stacked_dark.jsx'
@@ -2,8 +2,6 @@ examples:
2
2
 
3
3
  rails:
4
4
  - date_year_stacked_default: Default
5
- - date_year_stacked_dark: Dark
6
5
 
7
6
  react:
8
7
  - date_year_stacked_default: Default
9
- - date_year_stacked_dark: Dark
@@ -1,2 +1 @@
1
1
  export { default as DateYearStackedDefault } from './_date_year_stacked_default.jsx'
2
- export { default as DateYearStackedDark } from './_date_year_stacked_dark.jsx'
@@ -6,6 +6,7 @@ import { globalProps } from '../utilities/globalProps.js'
6
6
 
7
7
  type DistributionBarProps = {
8
8
  className?: string,
9
+ colors: array,
9
10
  data?: string,
10
11
  id?: string,
11
12
  size?: "lg" | "sm",
@@ -18,13 +19,13 @@ const normalizeCharacters = (widths) => {
18
19
  })
19
20
  }
20
21
 
21
- const barValues = (normalizedValues) => {
22
+ const barValues = (normalizedValues, colors) => {
22
23
  const arrSum = (value) => value.reduce((a, b) => a + b, 0)
23
24
  const widthSum = arrSum(normalizedValues)
24
25
  return normalizedValues.map((value, i) => {
25
26
  return (
26
27
  <div
27
- className="pb_distribution_width"
28
+ className={classnames('pb_distribution_width', colors[i] ? `color_${colors[i]}` : '')}
28
29
  key={i}
29
30
  style={{ width: `${(value * 100) / widthSum}%` }}
30
31
  />
@@ -33,12 +34,16 @@ const barValues = (normalizedValues) => {
33
34
  }
34
35
 
35
36
  const DistributionBar = (props: DistributionBarProps) => {
36
- const { size = 'lg', widths = [1] } = props
37
+ const {
38
+ size = 'lg',
39
+ widths = [1],
40
+ colors = [],
41
+ } = props
37
42
  const normalizedValues = normalizeCharacters(widths)
38
43
 
39
44
  return (
40
45
  <div className={classnames(`pb_distribution_bar_${size}`, globalProps(props))}>
41
- {barValues(normalizedValues)}
46
+ {barValues(normalizedValues, colors)}
42
47
  </div>
43
48
  )
44
49
  }
@@ -5,21 +5,26 @@
5
5
  $small_bar: 8px;
6
6
  $large_bar: 36px;
7
7
  display: flex;
8
+ border-radius: $large_bar;
9
+ overflow: auto;
8
10
  .pb_distribution_width {
9
11
  height: 100%;
10
12
  display: inline-block;
11
- @for $i from 1 through length($bar_colors) {
12
- &:nth-child(#{length($bar_colors)}n+#{$i}) {
13
- background-color: nth($bar_colors, $i);
13
+ @each $name, $color in $data_colors {
14
+ &:nth-child(#{length($data_colors)}n+#{index(($data_colors), ($name $color))}) {
15
+ background-color: $color;
16
+ }
17
+ &.color_#{$name} {
18
+ background-color: $color !important;
14
19
  }
15
20
  }
16
21
  &:first-child {
17
- border-top-left-radius: 18px;
18
- border-bottom-left-radius: 18px;
22
+ border-top-left-radius: $large_bar;
23
+ border-bottom-left-radius: $large_bar;
19
24
  }
20
25
  &:last-child {
21
- border-top-right-radius: 18px;
22
- border-bottom-right-radius: 18px;
26
+ border-top-right-radius: $large_bar;
27
+ border-bottom-right-radius: $large_bar;
23
28
  }
24
29
  }
25
30
  &[class*=_sm] {
@@ -11,7 +11,9 @@ module Playbook
11
11
  values: %w[lg sm],
12
12
  default: "lg"
13
13
  prop :widths, type: Playbook::Props::NumberArray,
14
- default: [1]
14
+ default: [1]
15
+ prop :colors, type: Playbook::Props::Array,
16
+ default: []
15
17
 
16
18
  def classname
17
19
  generate_classname("pb_distribution_bar", size)
@@ -27,6 +29,7 @@ module Playbook
27
29
  {
28
30
  size: size,
29
31
  widths: widths,
32
+ colors: colors,
30
33
  }
31
34
  end
32
35
  end
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("distribution_bar", props: {
2
+ widths: [4,5,3],
3
+ colors: ["data_7", "data_1", "data_6"]
4
+ }) %>
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import DistributionBar from '../_distribution_bar.jsx'
3
+
4
+ const DistributionBarCustomColors = (props) => {
5
+ return (
6
+ <React.Fragment>
7
+ <div>
8
+ <DistributionBar
9
+ colors={['data_7', 'data_1', 'data_6']}
10
+ widths={[4, 5, 3]}
11
+ {...props}
12
+ />
13
+ </div>
14
+ </React.Fragment>
15
+ )
16
+ }
17
+
18
+ export default DistributionBarCustomColors