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,22 @@
|
|
1
|
+
module Playbook
|
2
|
+
module PbCircleIconButton
|
3
|
+
class CircleIconButton
|
4
|
+
include Playbook::Props
|
5
|
+
|
6
|
+
partial "pb_circle_icon_button/circle_icon_button"
|
7
|
+
|
8
|
+
prop :variant, type: Playbook::Props::Enum,
|
9
|
+
values: %w[primary secondary link],
|
10
|
+
default: "primary"
|
11
|
+
prop :disabled, type: Playbook::Props::Boolean,
|
12
|
+
default: false
|
13
|
+
prop :icon, required: true
|
14
|
+
prop :dark, type: Playbook::Props::Boolean,
|
15
|
+
default: false
|
16
|
+
|
17
|
+
def classname
|
18
|
+
generate_classname("pb_circle_icon_button_kit")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<%= pb_rails("circle_icon_button", props: {
|
2
|
+
variant: "primary",
|
3
|
+
icon: "plus",
|
4
|
+
dark: true
|
5
|
+
}) %>
|
6
|
+
|
7
|
+
<br/>
|
8
|
+
|
9
|
+
<%= pb_rails("circle_icon_button", props: {
|
10
|
+
variant: "secondary",
|
11
|
+
icon: "pen",
|
12
|
+
dark: true
|
13
|
+
}) %>
|
14
|
+
|
15
|
+
<br/>
|
16
|
+
|
17
|
+
<%= pb_rails("circle_icon_button", props: {
|
18
|
+
disabled: true,
|
19
|
+
icon: "times",
|
20
|
+
dark: true
|
21
|
+
}) %>
|
22
|
+
|
23
|
+
<br/>
|
24
|
+
|
25
|
+
<%= pb_rails("circle_icon_button", props: {
|
26
|
+
variant: "link",
|
27
|
+
icon: "user",
|
28
|
+
dark: true
|
29
|
+
}) %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { CircleIconButton } from "../../";
|
3
|
+
|
4
|
+
const CircleIconButtonDark = () => (
|
5
|
+
<div>
|
6
|
+
<CircleIconButton
|
7
|
+
variant="primary"
|
8
|
+
icon="plus"
|
9
|
+
dark
|
10
|
+
/>
|
11
|
+
|
12
|
+
<br/>
|
13
|
+
|
14
|
+
<CircleIconButton
|
15
|
+
variant="secondary"
|
16
|
+
icon="pen"
|
17
|
+
dark
|
18
|
+
/>
|
19
|
+
|
20
|
+
<br/>
|
21
|
+
|
22
|
+
<CircleIconButton
|
23
|
+
disabled={true}
|
24
|
+
icon="times"
|
25
|
+
dark
|
26
|
+
/>
|
27
|
+
|
28
|
+
<br/>
|
29
|
+
|
30
|
+
<CircleIconButton
|
31
|
+
variant="link"
|
32
|
+
icon="user"
|
33
|
+
dark
|
34
|
+
/>
|
35
|
+
</div>
|
36
|
+
);
|
37
|
+
|
38
|
+
export default CircleIconButtonDark;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<%= pb_rails("circle_icon_button", props: {
|
2
|
+
variant: "primary",
|
3
|
+
icon: "plus"
|
4
|
+
}) %>
|
5
|
+
|
6
|
+
<br/>
|
7
|
+
|
8
|
+
<%= pb_rails("circle_icon_button", props: {
|
9
|
+
variant: "secondary",
|
10
|
+
icon: "pen"
|
11
|
+
}) %>
|
12
|
+
|
13
|
+
<br/>
|
14
|
+
|
15
|
+
<%= pb_rails("circle_icon_button", props: {
|
16
|
+
disabled: true,
|
17
|
+
icon: "times"
|
18
|
+
}) %>
|
19
|
+
|
20
|
+
<br/>
|
21
|
+
|
22
|
+
<%= pb_rails("circle_icon_button", props: {
|
23
|
+
variant: "link",
|
24
|
+
icon: "user"
|
25
|
+
}) %>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { CircleIconButton } from "../../";
|
3
|
+
|
4
|
+
const CircleIconButtonDefault = () => (
|
5
|
+
<div>
|
6
|
+
<CircleIconButton
|
7
|
+
variant="primary"
|
8
|
+
icon="plus"
|
9
|
+
/>
|
10
|
+
|
11
|
+
<br/>
|
12
|
+
|
13
|
+
<CircleIconButton
|
14
|
+
variant="secondary"
|
15
|
+
icon="pen"
|
16
|
+
/>
|
17
|
+
|
18
|
+
<br/>
|
19
|
+
|
20
|
+
<CircleIconButton
|
21
|
+
disabled={true}
|
22
|
+
icon="times"
|
23
|
+
/>
|
24
|
+
|
25
|
+
<br/>
|
26
|
+
|
27
|
+
<CircleIconButton
|
28
|
+
variant="link"
|
29
|
+
icon="user"
|
30
|
+
/>
|
31
|
+
</div>
|
32
|
+
);
|
33
|
+
|
34
|
+
export default CircleIconButtonDefault;
|
@@ -1,21 +1,55 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
1
3
|
import React from 'react';
|
2
|
-
import
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
import DateTime from '../pb_kit/dateTime.js'
|
5
|
+
import moment from 'moment'
|
6
|
+
import {Icon} from '../'
|
7
|
+
|
8
|
+
type DateProps = {
|
9
|
+
size?: 'xs' | 'sm' | 'lg',
|
10
|
+
value?: String,
|
11
|
+
}
|
12
|
+
|
13
|
+
|
14
|
+
const defaultDateString = value => {
|
15
|
+
const weekday = value.toWeekday().toUpperCase()
|
16
|
+
const month = value.toMonth().toUpperCase()
|
17
|
+
const day = value.toDay()
|
18
|
+
|
19
|
+
return `${weekday} · ${month} ${day}`
|
20
|
+
}
|
21
|
+
|
22
|
+
const largeDateString = value => {
|
23
|
+
const month = value.toMonth().toUpperCase()
|
24
|
+
const day = value.toDay()
|
25
|
+
|
26
|
+
return `${month} ${day}`
|
17
27
|
}
|
18
28
|
|
19
|
-
Date.propTypes = propTypes;
|
20
29
|
|
21
|
-
|
30
|
+
const ExtraSmallDate = ({ value }) => (
|
31
|
+
<h3 className='pb_title_kit_4'>{defaultDateString(value)}</h3>
|
32
|
+
)
|
33
|
+
|
34
|
+
const SmallDate = ({ value }) => (
|
35
|
+
<h3 className='pb_title_kit_4'><Icon icon="calendar" fixedWidth="true" />{defaultDateString(value)}</h3>
|
36
|
+
)
|
37
|
+
|
38
|
+
const LargeDate = ({ value }) => (
|
39
|
+
<h3 className='pb_title_kit_3'>{largeDateString(value)}</h3>
|
40
|
+
)
|
41
|
+
|
42
|
+
|
43
|
+
export default function Date(props: DateProps) {
|
44
|
+
const {
|
45
|
+
size,
|
46
|
+
value,
|
47
|
+
} = props
|
48
|
+
|
49
|
+
const dateTimeValue = new DateTime({ value: value });
|
50
|
+
|
51
|
+
if (size == 'xs') return <ExtraSmallDate value={dateTimeValue} />
|
52
|
+
if (size == 'lg') return <LargeDate value={dateTimeValue} />
|
53
|
+
|
54
|
+
return <SmallDate value={dateTimeValue} />
|
55
|
+
}
|
@@ -1,10 +1,18 @@
|
|
1
1
|
import React from "react"
|
2
|
-
import Date from "../../"
|
2
|
+
import {Date} from "../../"
|
3
3
|
|
4
4
|
function DateDefault() {
|
5
5
|
return (
|
6
6
|
<div>
|
7
|
-
<
|
7
|
+
<Date size='lg' value='1995-12-25' />
|
8
|
+
|
9
|
+
<br/>
|
10
|
+
|
11
|
+
<Date value='17 Mar 69' />
|
12
|
+
|
13
|
+
<br/>
|
14
|
+
|
15
|
+
<Date size='xs' value='2020-04-20T04:20:00.000Z' />
|
8
16
|
</div>
|
9
17
|
)
|
10
18
|
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
|
2
|
+
<%= form.text_field :example_text_field, props: { label: true } %>
|
3
|
+
<%= form.telephone_field :example_phone_field, props: { label: true } %>
|
4
|
+
<%= form.email_field :example_email_field, props: { label: true } %>
|
5
|
+
<%= form.number_field :example_number_field, props: { label: true } %>
|
6
|
+
<%= form.search_field :example_search_field, props: { label: true } %>
|
7
|
+
<%= form.password_field :example_password_field, props: { label: true } %>
|
8
|
+
<%= form.url_field :example_url_field, props: { label: true } %>
|
9
|
+
|
10
|
+
<%= form.actions do |action| %>
|
11
|
+
<%= action.submit %>
|
12
|
+
<%= action.button props: { type: "reset", text: "Cancel", variant: "secondary" } %>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<%
|
2
|
+
require "simple_form" unless defined?(SimpleForm)
|
3
|
+
require "active_model/railtie" unless defined?(ActiveModel)
|
4
|
+
|
5
|
+
example_form_model = Class.new do
|
6
|
+
include ::ActiveModel::Model
|
7
|
+
attr_accessor :example_text_field,
|
8
|
+
:example_phone_field,
|
9
|
+
:example_email_field,
|
10
|
+
:example_number_field,
|
11
|
+
:example_search_field,
|
12
|
+
:example_password_field,
|
13
|
+
:example_url_field
|
14
|
+
|
15
|
+
|
16
|
+
def self.model_name
|
17
|
+
ActiveModel::Name.new(self, nil, "ExampleFormModel")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
%>
|
21
|
+
|
22
|
+
|
23
|
+
<%= pb_rails("form", props: { form_system: "simple_form", form_system_options: [example_form_model.new, url: "", method: :get] }) do |form| %>
|
24
|
+
<%= form.input :example_text_field, as: :string %>
|
25
|
+
<%= form.input :example_phone_field, as: :tel %>
|
26
|
+
<%= form.input :example_email_field, as: :email %>
|
27
|
+
<%= form.input :example_number_field, as: :integer %>
|
28
|
+
<%= form.input :example_search_field, as: :search %>
|
29
|
+
<%= form.input :example_password_field, as: :password %>
|
30
|
+
<%= form.input :example_url_field, as: :url %>
|
31
|
+
|
32
|
+
<%= form.actions do |action| %>
|
33
|
+
<%= action.submit %>
|
34
|
+
<%= action.button props: { type: "reset", text: "Cancel", variant: "secondary" } %>
|
35
|
+
<% end %>
|
36
|
+
<% end %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# require_dependency "app/pb_kits/playbook/pb_form/form_builder"
|
4
|
+
|
5
|
+
module Playbook
|
6
|
+
module PbForm
|
7
|
+
class Form
|
8
|
+
include Playbook::Props
|
9
|
+
|
10
|
+
clear_props
|
11
|
+
prop :form_system, type: Playbook::Props::Enum,
|
12
|
+
values: %w[form_with simple_form],
|
13
|
+
default: "form_with"
|
14
|
+
prop :form_system_options, type: Playbook::Props::Base
|
15
|
+
prop :children, type: Playbook::Props::Proc
|
16
|
+
|
17
|
+
delegate :to_partial_path, to: :specific_form
|
18
|
+
delegate :merged_form_system_options, to: :specific_form
|
19
|
+
delegate :form_builder, to: :specific_form
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def specific_form
|
24
|
+
@specific_form ||= "#{self.class}::#{form_system.classify}Form".constantize.new(self)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbForm
|
5
|
+
class Form
|
6
|
+
class FormWithForm
|
7
|
+
def initialize(form)
|
8
|
+
self.form = form
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_partial_path
|
12
|
+
"pb_form/form_form_with"
|
13
|
+
end
|
14
|
+
|
15
|
+
def merged_form_system_options
|
16
|
+
Hash(form_system_options).merge(
|
17
|
+
class: merged_class,
|
18
|
+
builder: form_builder
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_accessor :form
|
25
|
+
|
26
|
+
delegate_missing_to :form
|
27
|
+
|
28
|
+
def merged_class
|
29
|
+
"pb-form #{Hash(form_system_options)[:class]}".strip
|
30
|
+
end
|
31
|
+
|
32
|
+
def form_builder
|
33
|
+
FormBuilder::FormWithFormBuilder
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbForm
|
5
|
+
class Form
|
6
|
+
class SimpleFormForm
|
7
|
+
def initialize(form)
|
8
|
+
self.form = form
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_partial_path
|
12
|
+
"pb_form/form_simple_form"
|
13
|
+
end
|
14
|
+
|
15
|
+
def merged_form_system_options
|
16
|
+
[
|
17
|
+
Array(form_system_options)[0],
|
18
|
+
Hash(Array(form_system_options)[1]).merge(
|
19
|
+
html: merged_html,
|
20
|
+
builder: form_builder
|
21
|
+
),
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_accessor :form
|
28
|
+
|
29
|
+
delegate_missing_to :form
|
30
|
+
|
31
|
+
def merged_html
|
32
|
+
html_options = Hash(Array(form_system_options)[1])[:html] || {}
|
33
|
+
html_class = html_options[:class]
|
34
|
+
html_options[:class] = "pb-form #{html_class}".strip
|
35
|
+
|
36
|
+
html_options
|
37
|
+
end
|
38
|
+
|
39
|
+
def form_builder
|
40
|
+
FormBuilder::SimpleFormBuilder
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|