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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +10 -4
- data/app/pb_kits/playbook/index.js +10 -0
- data/app/pb_kits/playbook/kits/pb_circle_icon_button.js +4 -0
- data/app/pb_kits/playbook/kits/pb_select.js +4 -0
- data/app/pb_kits/playbook/kits/pb_selectable_card.js +4 -0
- data/app/pb_kits/playbook/kits/pb_textarea.js +4 -0
- data/app/pb_kits/playbook/packs/examples.js +8 -0
- data/app/pb_kits/playbook/packs/kits.js +4 -2
- data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +1 -1
- data/app/pb_kits/playbook/pb_body/_body_mixins.scss +3 -0
- data/app/pb_kits/playbook/pb_button/_button.jsx +4 -0
- data/app/pb_kits/playbook/pb_card/_card.scss +50 -17
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.html.erb +10 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.jsx +30 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +32 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +22 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.html.erb +29 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.jsx +38 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.html.erb +25 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.jsx +34 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/example.yml +9 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.html.erb +1 -1
- data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.rb +4 -0
- data/app/pb_kits/playbook/pb_date/_date.jsx +51 -17
- data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +10 -2
- data/app/pb_kits/playbook/pb_form/_form.scss +11 -0
- data/app/pb_kits/playbook/pb_form/_form_form_with.html.erb +3 -0
- data/app/pb_kits/playbook/pb_form/_form_simple_form.html.erb +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +14 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +36 -0
- data/app/pb_kits/playbook/pb_form/docs/example.yml +5 -0
- data/app/pb_kits/playbook/pb_form/form.rb +28 -0
- data/app/pb_kits/playbook/pb_form/form/form_with_form.rb +38 -0
- data/app/pb_kits/playbook/pb_form/form/simple_form_form.rb +45 -0
- data/app/pb_kits/playbook/pb_form/form_builder.rb +23 -0
- data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +40 -0
- data/app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb +11 -0
- data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +25 -0
- data/app/pb_kits/playbook/pb_form/form_builder/text_input_builder.rb +22 -0
- data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.jsx +19 -14
- data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.jsx +19 -0
- data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_default.jsx +5 -4
- data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_size.jsx +16 -0
- data/app/pb_kits/playbook/pb_icon_circle/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_icon_circle/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_kit/dateTime.js +4 -0
- data/app/pb_kits/playbook/pb_layout/_layout.jsx +50 -48
- data/app/pb_kits/playbook/pb_layout/_layout.scss +8 -12
- data/app/pb_kits/playbook/pb_layout/_layout_mixin.scss +6 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_colors.html.erb +24 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_default.jsx +15 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes.html.erb +32 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.html.erb +32 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_transparent.html.erb +8 -0
- data/app/pb_kits/playbook/pb_layout/docs/example.yml +5 -11
- data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -1
- data/app/pb_kits/playbook/pb_layout/layout.rb +5 -7
- data/app/pb_kits/playbook/pb_message/_message.jsx +68 -11
- data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +59 -2
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +23 -16
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +15 -6
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.jsx +10 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +10 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.html.erb +1 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.jsx +12 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +4 -2
- data/app/pb_kits/playbook/pb_section_separator/docs/index.js +3 -1
- data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
- data/app/pb_kits/playbook/pb_select/_select.html.erb +33 -0
- data/app/pb_kits/playbook/pb_select/_select.jsx +110 -0
- data/app/pb_kits/playbook/pb_select/_select.scss +50 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_blank.html.erb +19 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +30 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.html.erb +8 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.jsx +19 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_dark.html.erb +24 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +31 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_default.html.erb +23 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +30 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled.html.erb +19 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +30 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.html.erb +33 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +44 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_required.html.erb +17 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +28 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.html.erb +18 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +29 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +22 -0
- data/app/pb_kits/playbook/pb_select/docs/index.js +8 -0
- data/app/pb_kits/playbook/pb_select/docs/nitro_theme.gemspec +41 -0
- data/app/pb_kits/playbook/pb_select/select.rb +60 -0
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +25 -0
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +97 -0
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +87 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.html.erb +25 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.jsx +48 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.html.erb +45 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.jsx +68 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +39 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.jsx +67 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.html.erb +30 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.jsx +54 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +13 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +51 -0
- data/app/pb_kits/playbook/pb_stat_value/_stat_value.html.erb +1 -1
- data/app/pb_kits/playbook/pb_stat_value/stat_value.rb +5 -0
- data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +13 -9
- data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +12 -6
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +44 -44
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +68 -12
- data/app/pb_kits/playbook/pb_textarea/_textarea.html.erb +20 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +54 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.scss +31 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +51 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.html.erb +3 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.jsx +16 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.html.erb +9 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.jsx +21 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb +9 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx +21 -0
- data/app/pb_kits/playbook/pb_textarea/docs/example.yml +15 -0
- data/app/pb_kits/playbook/pb_textarea/docs/index.js +3 -0
- data/app/pb_kits/playbook/pb_textarea/textarea.rb +30 -0
- data/app/pb_kits/playbook/pb_title/_title_mixin.scss +3 -1
- data/app/pb_kits/playbook/pb_user/_user.html.erb +3 -1
- data/app/pb_kits/playbook/pb_user/_user.jsx +76 -16
- data/app/pb_kits/playbook/pb_user/docs/_user_default.jsx +42 -1
- data/app/pb_kits/playbook/pb_user/docs/_user_size.jsx +31 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_text_only.jsx +24 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_vertical_size.jsx +37 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.html.erb +40 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.jsx +57 -0
- data/app/pb_kits/playbook/pb_user/docs/example.yml +8 -0
- data/app/pb_kits/playbook/pb_user/docs/index.js +5 -0
- data/app/pb_kits/playbook/pb_user/user.rb +12 -1
- data/app/pb_kits/playbook/props.rb +11 -3
- data/app/pb_kits/playbook/tokens/_colors.scss +16 -0
- data/app/pb_kits/playbook/tokens/_transition.scss +1 -0
- data/lib/playbook/version.rb +1 -1
- metadata +117 -15
- data/app/pb_kits/playbook/pb_layout/docs/_layout_lg.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_lg_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_md.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_md_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sm.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sm_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xl.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xl_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.jsx +0 -15
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xs_dark.html.erb +0 -4
- 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,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
|
+
}
|