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,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;
@@ -0,0 +1,9 @@
1
+ examples:
2
+
3
+ rails:
4
+ - circle_icon_button_default: Default
5
+ - circle_icon_button_dark: Dark
6
+
7
+ react:
8
+ - circle_icon_button_default: Default
9
+ - circle_icon_button_dark: Dark
@@ -0,0 +1,2 @@
1
+ export {default as CircleIconButtonDefault} from './_circle_icon_button_default.jsx';
2
+ export {default as CircleIconButtonDark} from './_circle_icon_button_dark.jsx';
@@ -7,7 +7,7 @@
7
7
  <% end %>
8
8
 
9
9
  <% if object.stat_value.present? %>
10
- <%= pb_rails("stat_value", props: object.stat_value) %>
10
+ <%= pb_rails("stat_value", props: object.formatted_stat_value) %>
11
11
  <% end %>
12
12
 
13
13
  <% if object.stat_change.present? %>
@@ -16,6 +16,10 @@ module Playbook
16
16
  prop :stat_value, type: Playbook::Props::Hash,
17
17
  default: {}
18
18
 
19
+ def formatted_stat_value
20
+ { **stat_value, value: stat_value[:value].to_i }
21
+ end
22
+
19
23
  def classname
20
24
  generate_classname("pb_dashboard_value_kit", align)
21
25
  end
@@ -1,21 +1,55 @@
1
+ /* @flow */
2
+
1
3
  import React from 'react';
2
- import PropTypes from "prop-types";
3
-
4
- const propTypes = {
5
- className: PropTypes.string,
6
- id: PropTypes.string
7
- };
8
-
9
- class Date extends React.Component {
10
- render() {
11
- return (
12
- <div className="pb_date">
13
- <span>DATE CONTENT</span>
14
- </div>
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
- export default Date;
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
- <h1>{`Coming Soon...`}</h1>
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,11 @@
1
+ .pb-form {
2
+ .pb-form-actions {
3
+ list-style: none;
4
+ margin: 8px;
5
+ padding: 0;
6
+
7
+ > li {
8
+ display: inline-flex;
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,3 @@
1
+ <%= form_with object.merged_form_system_options do |form| %>
2
+ <% instance_exec form, &object.children %>
3
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <%= simple_form_for *object.merged_form_system_options do |form| %>
2
+ <% instance_exec form, &object.children %>
3
+ <% end %>
@@ -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,5 @@
1
+ examples:
2
+
3
+ rails:
4
+ - form_form_with: Default (Form With)
5
+ - form_simple_form: Default (Simple Form)
@@ -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