playbook_ui 2.9.9 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +10 -4
  3. data/app/pb_kits/playbook/index.js +10 -0
  4. data/app/pb_kits/playbook/kits/pb_circle_icon_button.js +4 -0
  5. data/app/pb_kits/playbook/kits/pb_select.js +4 -0
  6. data/app/pb_kits/playbook/kits/pb_selectable_card.js +4 -0
  7. data/app/pb_kits/playbook/kits/pb_textarea.js +4 -0
  8. data/app/pb_kits/playbook/packs/examples.js +8 -0
  9. data/app/pb_kits/playbook/packs/kits.js +4 -2
  10. data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +1 -1
  11. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +3 -0
  12. data/app/pb_kits/playbook/pb_button/_button.jsx +4 -0
  13. data/app/pb_kits/playbook/pb_card/_card.scss +50 -17
  14. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.html.erb +10 -0
  15. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.jsx +30 -0
  16. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +32 -0
  17. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +22 -0
  18. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.html.erb +29 -0
  19. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.jsx +38 -0
  20. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.html.erb +25 -0
  21. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.jsx +34 -0
  22. data/app/pb_kits/playbook/pb_circle_icon_button/docs/example.yml +9 -0
  23. data/app/pb_kits/playbook/pb_circle_icon_button/docs/index.js +2 -0
  24. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.html.erb +1 -1
  25. data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.rb +4 -0
  26. data/app/pb_kits/playbook/pb_date/_date.jsx +51 -17
  27. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +10 -2
  28. data/app/pb_kits/playbook/pb_form/_form.scss +11 -0
  29. data/app/pb_kits/playbook/pb_form/_form_form_with.html.erb +3 -0
  30. data/app/pb_kits/playbook/pb_form/_form_simple_form.html.erb +3 -0
  31. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +14 -0
  32. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +36 -0
  33. data/app/pb_kits/playbook/pb_form/docs/example.yml +5 -0
  34. data/app/pb_kits/playbook/pb_form/form.rb +28 -0
  35. data/app/pb_kits/playbook/pb_form/form/form_with_form.rb +38 -0
  36. data/app/pb_kits/playbook/pb_form/form/simple_form_form.rb +45 -0
  37. data/app/pb_kits/playbook/pb_form/form_builder.rb +23 -0
  38. data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +40 -0
  39. data/app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb +11 -0
  40. data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +25 -0
  41. data/app/pb_kits/playbook/pb_form/form_builder/text_input_builder.rb +22 -0
  42. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.jsx +19 -14
  43. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.jsx +19 -0
  44. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_default.jsx +5 -4
  45. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_size.jsx +16 -0
  46. data/app/pb_kits/playbook/pb_icon_circle/docs/example.yml +2 -1
  47. data/app/pb_kits/playbook/pb_icon_circle/docs/index.js +2 -0
  48. data/app/pb_kits/playbook/pb_kit/dateTime.js +4 -0
  49. data/app/pb_kits/playbook/pb_layout/_layout.jsx +50 -48
  50. data/app/pb_kits/playbook/pb_layout/_layout.scss +8 -12
  51. data/app/pb_kits/playbook/pb_layout/_layout_mixin.scss +6 -0
  52. data/app/pb_kits/playbook/pb_layout/docs/_layout_colors.html.erb +24 -0
  53. data/app/pb_kits/playbook/pb_layout/docs/_layout_default.jsx +15 -0
  54. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes.html.erb +32 -0
  55. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.html.erb +32 -0
  56. data/app/pb_kits/playbook/pb_layout/docs/_layout_transparent.html.erb +8 -0
  57. data/app/pb_kits/playbook/pb_layout/docs/example.yml +5 -11
  58. data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -1
  59. data/app/pb_kits/playbook/pb_layout/layout.rb +5 -7
  60. data/app/pb_kits/playbook/pb_message/_message.jsx +68 -11
  61. data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +59 -2
  62. data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +23 -16
  63. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +15 -6
  64. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.jsx +10 -0
  65. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +10 -0
  66. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.html.erb +1 -0
  67. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.jsx +12 -0
  68. data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +4 -2
  69. data/app/pb_kits/playbook/pb_section_separator/docs/index.js +3 -1
  70. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
  71. data/app/pb_kits/playbook/pb_select/_select.html.erb +33 -0
  72. data/app/pb_kits/playbook/pb_select/_select.jsx +110 -0
  73. data/app/pb_kits/playbook/pb_select/_select.scss +50 -0
  74. data/app/pb_kits/playbook/pb_select/docs/_select_blank.html.erb +19 -0
  75. data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +30 -0
  76. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.html.erb +8 -0
  77. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.jsx +19 -0
  78. data/app/pb_kits/playbook/pb_select/docs/_select_dark.html.erb +24 -0
  79. data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +31 -0
  80. data/app/pb_kits/playbook/pb_select/docs/_select_default.html.erb +23 -0
  81. data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +30 -0
  82. data/app/pb_kits/playbook/pb_select/docs/_select_disabled.html.erb +19 -0
  83. data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +30 -0
  84. data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.html.erb +33 -0
  85. data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +44 -0
  86. data/app/pb_kits/playbook/pb_select/docs/_select_required.html.erb +17 -0
  87. data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +28 -0
  88. data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.html.erb +18 -0
  89. data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +29 -0
  90. data/app/pb_kits/playbook/pb_select/docs/example.yml +22 -0
  91. data/app/pb_kits/playbook/pb_select/docs/index.js +8 -0
  92. data/app/pb_kits/playbook/pb_select/docs/nitro_theme.gemspec +41 -0
  93. data/app/pb_kits/playbook/pb_select/select.rb +60 -0
  94. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +25 -0
  95. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +97 -0
  96. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +87 -0
  97. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.html.erb +25 -0
  98. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.jsx +48 -0
  99. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.html.erb +45 -0
  100. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.jsx +68 -0
  101. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +39 -0
  102. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.jsx +67 -0
  103. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.html.erb +30 -0
  104. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.jsx +54 -0
  105. data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +13 -0
  106. data/app/pb_kits/playbook/pb_selectable_card/docs/index.js +4 -0
  107. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +51 -0
  108. data/app/pb_kits/playbook/pb_stat_value/_stat_value.html.erb +1 -1
  109. data/app/pb_kits/playbook/pb_stat_value/stat_value.rb +5 -0
  110. data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +13 -9
  111. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +12 -6
  112. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +44 -44
  113. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +68 -12
  114. data/app/pb_kits/playbook/pb_textarea/_textarea.html.erb +20 -0
  115. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +54 -0
  116. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +31 -0
  117. data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +51 -0
  118. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.html.erb +3 -0
  119. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.jsx +16 -0
  120. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.html.erb +9 -0
  121. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.jsx +21 -0
  122. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb +9 -0
  123. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx +21 -0
  124. data/app/pb_kits/playbook/pb_textarea/docs/example.yml +15 -0
  125. data/app/pb_kits/playbook/pb_textarea/docs/index.js +3 -0
  126. data/app/pb_kits/playbook/pb_textarea/textarea.rb +30 -0
  127. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +3 -1
  128. data/app/pb_kits/playbook/pb_user/_user.html.erb +3 -1
  129. data/app/pb_kits/playbook/pb_user/_user.jsx +76 -16
  130. data/app/pb_kits/playbook/pb_user/docs/_user_default.jsx +42 -1
  131. data/app/pb_kits/playbook/pb_user/docs/_user_size.jsx +31 -0
  132. data/app/pb_kits/playbook/pb_user/docs/_user_text_only.jsx +24 -0
  133. data/app/pb_kits/playbook/pb_user/docs/_user_vertical_size.jsx +37 -0
  134. data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.html.erb +40 -0
  135. data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.jsx +57 -0
  136. data/app/pb_kits/playbook/pb_user/docs/example.yml +8 -0
  137. data/app/pb_kits/playbook/pb_user/docs/index.js +5 -0
  138. data/app/pb_kits/playbook/pb_user/user.rb +12 -1
  139. data/app/pb_kits/playbook/props.rb +11 -3
  140. data/app/pb_kits/playbook/tokens/_colors.scss +16 -0
  141. data/app/pb_kits/playbook/tokens/_transition.scss +1 -0
  142. data/lib/playbook/version.rb +1 -1
  143. metadata +117 -15
  144. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg.html.erb +0 -4
  145. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg_dark.html.erb +0 -4
  146. data/app/pb_kits/playbook/pb_layout/docs/_layout_md.html.erb +0 -4
  147. data/app/pb_kits/playbook/pb_layout/docs/_layout_md_dark.html.erb +0 -4
  148. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm.html.erb +0 -4
  149. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm_dark.html.erb +0 -4
  150. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl.html.erb +0 -4
  151. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl_dark.html.erb +0 -4
  152. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.html.erb +0 -4
  153. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.jsx +0 -15
  154. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs_dark.html.erb +0 -4
  155. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_default.jsx +0 -10
@@ -0,0 +1,33 @@
1
+ <%= pb_rails("select", props: {
2
+ label: "Favorite Coffee",
3
+ name: "coffee",
4
+ options: [
5
+ {
6
+ value: "1",
7
+ disabled: true,
8
+ value_text: "Espresso",
9
+ },
10
+ {
11
+ value: "2",
12
+ selected: true,
13
+ value_text: "Americano",
14
+ },
15
+ {
16
+ value: "3",
17
+ disabled: true,
18
+ value_text: "Cappuccino",
19
+ },
20
+ {
21
+ value: "4",
22
+ value_text: "Mocha",
23
+ },
24
+ {
25
+ value: "5",
26
+ value_text: "Flat White",
27
+ },
28
+ {
29
+ value: "6",
30
+ value_text: "Latte",
31
+ },
32
+ ]
33
+ }) %>
@@ -0,0 +1,44 @@
1
+ import React from 'react'
2
+ import {Select} from '../../'
3
+
4
+ function SelectDisabledOptions() {
5
+ return (
6
+ <div>
7
+ <Select
8
+ label='Favorite Coffee'
9
+ name='coffee'
10
+ options={[
11
+ {
12
+ value: '1',
13
+ disabled: true,
14
+ valueText: 'Espresso',
15
+ },
16
+ {
17
+ value: '2',
18
+ selected: true,
19
+ valueText: 'Americano',
20
+ },
21
+ {
22
+ value: '3',
23
+ disabled: true,
24
+ valueText: 'Cappuccino',
25
+ },
26
+ {
27
+ value: '4',
28
+ valueText: 'Mocha',
29
+ },
30
+ {
31
+ value: '5',
32
+ valueText: 'Flat White',
33
+ },
34
+ {
35
+ value: '6',
36
+ valueText: 'Latte',
37
+ },
38
+ ]}
39
+ />
40
+ </div>
41
+ )
42
+ }
43
+
44
+ export default SelectDisabledOptions
@@ -0,0 +1,17 @@
1
+ <%= pb_rails("select", props: {
2
+ label: "Which shoe do you tie first?",
3
+ required: true,
4
+ name: "shoe",
5
+ blank_selection: "Select One...",
6
+ options: [
7
+ {
8
+ value: "Left",
9
+ },
10
+ {
11
+ value: "Right",
12
+ },
13
+ {
14
+ value: "I go without laces",
15
+ },
16
+ ]
17
+ }) %>
@@ -0,0 +1,28 @@
1
+ import React from 'react'
2
+ import {Select} from '../../'
3
+
4
+ function SelectRequired() {
5
+ return (
6
+ <div>
7
+ <Select
8
+ label='Which shoe do you tie first?'
9
+ required
10
+ name='shoe'
11
+ blankSelection='Select One...'
12
+ options={[
13
+ {
14
+ value: 'Left',
15
+ },
16
+ {
17
+ value: 'Right',
18
+ },
19
+ {
20
+ value: 'I go without laces',
21
+ },
22
+ ]}
23
+ />
24
+ </div>
25
+ )
26
+ }
27
+
28
+ export default SelectRequired
@@ -0,0 +1,18 @@
1
+ <%= pb_rails("select", props: {
2
+ label: "Favorite Sport",
3
+ name: "sports",
4
+ options: [
5
+ {
6
+ value: "Football",
7
+ },
8
+ {
9
+ value: "Baseball",
10
+ },
11
+ {
12
+ value: "Basketball",
13
+ },
14
+ {
15
+ value: "Hockey",
16
+ },
17
+ ]
18
+ }) %>
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import {Select} from '../../'
3
+
4
+ function SelectValueTextSame() {
5
+ return (
6
+ <div>
7
+ <Select
8
+ label='Favorite Sport'
9
+ name='sports'
10
+ options={[
11
+ {
12
+ value: 'Football',
13
+ },
14
+ {
15
+ value: 'Baseball',
16
+ },
17
+ {
18
+ value: 'Basketball',
19
+ },
20
+ {
21
+ value: 'Hockey',
22
+ },
23
+ ]}
24
+ />
25
+ </div>
26
+ )
27
+ }
28
+
29
+ export default SelectValueTextSame
@@ -0,0 +1,22 @@
1
+ examples:
2
+
3
+ rails:
4
+ - select_default: Default
5
+ - select_blank: Blank Selection Text
6
+ - select_disabled_options: Disabled Options
7
+ - select_disabled: Disabled Select Field
8
+ - select_required: Required Select Field
9
+ - select_value_text_same: Equal option value and value text
10
+ - select_custom_select: Custom Select
11
+ - select_dark: Dark Select
12
+
13
+
14
+ react:
15
+ - select_default: Default
16
+ - select_blank: Blank Selection Text
17
+ - select_disabled_options: Disabled Options
18
+ - select_disabled: Disabled Select Field
19
+ - select_required: Required Select Field
20
+ - select_value_text_same: Equal option value and value text
21
+ - select_custom_select: Custom Select
22
+ - select_dark: Dark Select
@@ -0,0 +1,8 @@
1
+ export {default as SelectDefault} from './_select_default.jsx';
2
+ export {default as SelectDark} from './_select_dark.jsx';
3
+ export {default as SelectBlank} from './_select_blank.jsx';
4
+ export {default as SelectDisabledOptions} from './_select_disabled_options.jsx';
5
+ export {default as SelectDisabled} from './_select_disabled.jsx';
6
+ export {default as SelectRequired} from './_select_required.jsx';
7
+ export {default as SelectCustomSelect} from './_select_custom_select.jsx';
8
+ export {default as SelectValueTextSame} from './_select_value_text_same.jsx';
@@ -0,0 +1,41 @@
1
+ $LOAD_PATH.push File.expand_path("lib", __dir__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "nitro_theme"
5
+ s.version = "0.0.1"
6
+ s.authors = ["Nitro Developers"]
7
+ s.email = ["dev@powerhrg.com"]
8
+ s.homepage = "http://nitro.powerhrg.com"
9
+ s.summary = "Nitro's visual theme"
10
+ s.description = "Nitro's visual theme, including page layout, styling and navigation"
11
+
12
+ s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
13
+
14
+ s.add_dependency "bootstrap-sass", "3.3.5.1"
15
+ s.add_dependency "coffee-rails", "4.2.2"
16
+ s.add_dependency "jquery-rails", "4.3.1"
17
+ s.add_dependency "lodash-rails", "3.10.1"
18
+ s.add_dependency "naughty"
19
+ s.add_dependency "nitro_auth"
20
+ s.add_dependency "nitro_react"
21
+ s.add_dependency "nitro_sg", "3.0.2"
22
+ s.add_dependency "playbook_ui", "2.9.1"
23
+ s.add_dependency "rails", "5.1.6.2"
24
+ # should sassc version change, adjust umbrella Gemfile & Dockerfile accordingly
25
+ s.add_dependency "sassc", "1.11.4"
26
+ s.add_dependency "sassc-rails", "1.3.0"
27
+ s.add_dependency "simple_form", "4.0.1"
28
+ s.add_dependency "sprockets-rails", "2.3.3"
29
+ s.add_dependency "turbolinks", "~> 5"
30
+ s.add_dependency "will_paginate", "3.1.6"
31
+ s.add_dependency "will_paginate-bootstrap", "1.0.1"
32
+
33
+ s.add_development_dependency "nitro_linting"
34
+ s.add_development_dependency "pry-byebug", "3.5.0"
35
+ s.add_development_dependency "rainbow", "2.2.2"
36
+ s.add_development_dependency "rspec-rails"
37
+ s.add_development_dependency "simplecov", "0.15.1"
38
+ s.add_development_dependency "test-unit", "3.1.5"
39
+ s.add_development_dependency "timecop"
40
+ s.add_development_dependency "yard", "0.9.20"
41
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "action_view"
4
+
5
+ module Playbook
6
+ module PbSelect
7
+ class Select
8
+ include ActionView::Helpers::FormTagHelper
9
+ include ActionView::Context
10
+ include Playbook::Props
11
+
12
+ partial "pb_select/select"
13
+
14
+ prop :label
15
+ prop :required, type: Playbook::Props::Boolean, default: false
16
+ prop :disabled, type: Playbook::Props::Boolean, default: false
17
+ prop :multiple, type: Playbook::Props::Boolean, default: false
18
+ prop :name
19
+ prop :onchange
20
+ prop :include_blank
21
+ prop :blank_selection
22
+ prop :options, type: Playbook::Props::HashArray, required: false, default: []
23
+ prop :dark, type: Playbook::Props::Boolean, default: false
24
+
25
+ def classname
26
+ generate_classname("pb_select", dark_class)
27
+ end
28
+
29
+ def options_to_array
30
+ options.map { |option| [option[:value_text] || option[:value], option[:value]] }
31
+ end
32
+
33
+
34
+ def selected
35
+ selections = options.map { |option| option[:value] if option[:selected] == true }.compact
36
+ if selections.empty?
37
+ nil
38
+ else
39
+ selections
40
+ end
41
+ end
42
+
43
+ def disabled_options
44
+ disabled_options = options.map { |option| option[:value] if option[:disabled] == true }.compact
45
+ if disabled_options.empty?
46
+ nil
47
+ else
48
+ disabled_options
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def dark_class
55
+ dark ? "dark" : nil
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,25 @@
1
+ <%= content_tag(:div,
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname) do %>
5
+
6
+ <% if object.multi %>
7
+ <%= check_box_tag object.name, object.value, object.checked, id: object.input_id_present, disabled: object.disabled %>
8
+ <% else %>
9
+ <%= radio_button_tag object.name, object.value, object.checked, id: object.input_id_present, disabled: object.disabled %>
10
+ <% end %>
11
+
12
+ <label for="<%= object.input_id_present %>">
13
+ <% if object.children.nil? %>
14
+ <%= pb_rails("body", props: { text: object.text }) %>
15
+ <% else %>
16
+ <%= capture(&object.children) %>
17
+ <% end %>
18
+ <% if object.icon %>
19
+ <div class="pb_selectable_card_circle">
20
+ <%= pb_rails("icon", props: { icon: "check", fixed_width: true}) %>
21
+ </div>
22
+ <% end %>
23
+ </label>
24
+
25
+ <% end %>
@@ -0,0 +1,97 @@
1
+ import React from 'react'
2
+ import classnames from 'classnames'
3
+ import { Icon } from '../'
4
+
5
+ import type {
6
+ InputCallback
7
+ } from "../types"
8
+
9
+ import {
10
+ buildAriaProps,
11
+ buildDataProps,
12
+ buildCss,
13
+ noop,
14
+ } from '../utilities/props'
15
+
16
+ type Props = {
17
+ aria: Object,
18
+ checked: Boolean,
19
+ children?: Array<React.ReactChild>,
20
+ className?: String,
21
+ dark?: Boolean,
22
+ data: Object,
23
+ disabled?: Boolean,
24
+ icon?: Boolean,
25
+ id?: String,
26
+ inputId?: String,
27
+ multi?: Boolean,
28
+ name?: String,
29
+ onChange: InputCallback,
30
+ text?: String,
31
+ value?: String
32
+ };
33
+
34
+ const SelectableCard = ({
35
+ aria = {},
36
+ checked = false,
37
+ children,
38
+ className,
39
+ dark = false,
40
+ data = {},
41
+ disabled = false,
42
+ icon = false,
43
+ id = null,
44
+ inputId = null,
45
+ multi = true,
46
+ name,
47
+ onChange = noop,
48
+ text,
49
+ value,
50
+ ...props
51
+ }: Props) => {
52
+ const ariaProps = buildAriaProps(aria)
53
+ const dataProps = buildDataProps(data)
54
+
55
+ const css = buildCss({
56
+ 'pb_selectable_card_kit': true,
57
+ 'checked': checked,
58
+ 'dark': dark,
59
+ 'disabled': disabled,
60
+ 'enabled': !disabled,
61
+ })
62
+
63
+ const displayIcon = () => {
64
+ if(icon === true) {
65
+ return (
66
+ <div className="pb_selectable_card_circle">
67
+ <Icon icon="check" fixedWidth/>
68
+ </div>
69
+ )
70
+ }
71
+ }
72
+
73
+ const inputType = multi === false ? "radio" : "checkbox"
74
+
75
+ const inputIdPresent = inputId !== null ? inputId : name
76
+
77
+
78
+ return (
79
+ <div {...ariaProps} {...dataProps} className={classnames(css, className)}>
80
+ <input
81
+ {...props}
82
+ name={name}
83
+ value={value}
84
+ id={inputIdPresent}
85
+ type={inputType}
86
+ checked={checked}
87
+ disabled={disabled}
88
+ onChange={onChange}
89
+ />
90
+ <label htmlFor={inputIdPresent}>
91
+ { text || children }
92
+ {displayIcon()}
93
+ </label>
94
+ </div>
95
+ );
96
+ };
97
+ export default SelectableCard;
@@ -0,0 +1,87 @@
1
+ @import "../tokens/animation-curves";
2
+ @import "../tokens/colors";
3
+ @import "../tokens/opacity";
4
+ @import "../tokens/shadows";
5
+ @import "../tokens/spacing";
6
+ @import "../tokens/transition";
7
+ @import "../tokens/typography";
8
+ @import "../pb_card/card";
9
+
10
+ $pb_selectable_card_indicator_size: 22px;
11
+ $pb_selectable_card_border: 2px;
12
+
13
+ [class^=pb_selectable_card_kit] {
14
+ display: block;
15
+
16
+ label {
17
+ @include pb_card;
18
+ padding: $space_sm + 1;
19
+ cursor: pointer;
20
+
21
+ &:hover {
22
+ box-shadow: $shadow-default;
23
+ border-color: $slate;
24
+ }
25
+
26
+ .pb_selectable_card_circle {
27
+ display: flex;
28
+ justify-content: center;
29
+ align-items: center;
30
+ height: $pb_selectable_card_indicator_size;
31
+ width: $pb_selectable_card_indicator_size;
32
+ border-radius: ($pb_selectable_card_indicator_size/2) + ($pb_selectable_card_border/2);
33
+ border-width: $pb_selectable_card_border;
34
+ border-style: solid;
35
+ border-color: $white;
36
+ background: $primary_action;
37
+ color: $white;
38
+ font-size: $font_smaller;
39
+ text-align: center;
40
+ position: absolute;
41
+ top: -($pb_selectable_card_indicator_size/2);
42
+ right: -($pb_selectable_card_indicator_size/2);
43
+ opacity: 0;
44
+ transition-property: opacity;
45
+ transition-duration: $transition_short;
46
+ transition-timing-function: $easeIn;
47
+ }
48
+ }
49
+
50
+ input[type="checkbox"],
51
+ input[type="radio"] {
52
+ -webkit-appearance: none;
53
+ -moz-appearance: none;
54
+ appearance: none;
55
+ display: none;
56
+
57
+ &:checked ~ label {
58
+ position: relative;
59
+ @include pb_card_selected;
60
+ padding: $space_sm;
61
+
62
+ .pb_selectable_card_circle {
63
+ opacity: $opacity_10;
64
+ }
65
+ }
66
+ }
67
+
68
+ &[class*=_dark] {
69
+ label {
70
+ @include pb_card_dark;
71
+ background: transparent;
72
+
73
+ .pb_selectable_card_circle {
74
+ border-color: $bg_dark;
75
+ background: $primary-action;
76
+ }
77
+ }
78
+
79
+ input[type="checkbox"],
80
+ input[type="radio"] {
81
+ &:checked ~ label {
82
+ @include pb_card_selected_dark;
83
+ background: transparent;
84
+ }
85
+ }
86
+ }
87
+ }