playbook_ui 2.9.2 → 2.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/pb.logo.svg +28 -0
  3. data/app/helpers/playbook/pb_doc_helper.rb +9 -12
  4. data/app/helpers/playbook/pb_kit_helper.rb +12 -30
  5. data/app/pb_kits/playbook/_playbook.scss +50 -0
  6. data/app/pb_kits/playbook/index.js +10 -9
  7. data/app/pb_kits/playbook/kits/pb_contact.js +4 -0
  8. data/app/pb_kits/playbook/kits/pb_person.js +4 -0
  9. data/app/pb_kits/playbook/kits/pb_person_contact.js +4 -0
  10. data/app/pb_kits/playbook/packs/application.js +3 -3
  11. data/app/pb_kits/playbook/packs/examples.js +85 -127
  12. data/app/pb_kits/playbook/packs/kits.js +36 -36
  13. data/app/pb_kits/playbook/packs/main.scss +1 -1
  14. data/app/pb_kits/playbook/packs/site_styles/_site-style.scss +7 -0
  15. data/app/pb_kits/playbook/pb_bar_graph/barGraphSettings.js +1 -1
  16. data/app/pb_kits/playbook/pb_button/_button.jsx +48 -49
  17. data/app/pb_kits/playbook/pb_button/docs/_button_default.jsx +8 -2
  18. data/app/pb_kits/playbook/pb_card/_card.html.erb +2 -2
  19. data/app/pb_kits/playbook/pb_card/child_kits/_card_body.html.erb +1 -1
  20. data/app/pb_kits/playbook/pb_contact/_contact.html.erb +6 -0
  21. data/app/pb_kits/playbook/pb_contact/_contact.jsx +72 -0
  22. data/app/pb_kits/playbook/{pb_phone/_phone.scss → pb_contact/_contact.scss} +0 -0
  23. data/app/pb_kits/playbook/pb_contact/contact.rb +78 -0
  24. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.html.erb +18 -0
  25. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.jsx +26 -0
  26. data/app/pb_kits/playbook/pb_contact/docs/example.yml +8 -0
  27. data/app/pb_kits/playbook/pb_contact/docs/index.js +1 -0
  28. data/app/pb_kits/playbook/pb_dashboard/commonSettings.js +16 -13
  29. data/app/pb_kits/playbook/pb_hashtag/_hashtag.html.erb +2 -2
  30. data/app/pb_kits/playbook/pb_hashtag/hashtag.rb +20 -59
  31. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.html.erb +3 -3
  32. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +18 -61
  33. data/app/pb_kits/playbook/pb_input/_input.html.erb +1 -1
  34. data/app/pb_kits/playbook/pb_input/_input.jsx +2 -2
  35. data/app/pb_kits/playbook/pb_input/_input.scss +1 -1
  36. data/app/pb_kits/playbook/pb_input/input.rb +10 -79
  37. data/app/pb_kits/playbook/pb_line_graph/lineGraphSettings.js +1 -1
  38. data/app/pb_kits/playbook/{pb_owner/_owner.html.erb → pb_person/_person.html.erb} +1 -1
  39. data/app/pb_kits/playbook/pb_person/_person.jsx +36 -0
  40. data/app/pb_kits/playbook/{pb_owner/_owner.scss → pb_person/_person.scss} +2 -2
  41. data/app/pb_kits/playbook/pb_person/docs/_person_default.html.erb +1 -0
  42. data/app/pb_kits/playbook/pb_person/docs/_person_default.jsx +13 -0
  43. data/app/pb_kits/playbook/pb_person/docs/example.yml +9 -0
  44. data/app/pb_kits/playbook/pb_person/docs/index.js +1 -0
  45. data/app/pb_kits/playbook/{pb_owner/owner.rb → pb_person/person.rb} +18 -14
  46. data/app/pb_kits/playbook/pb_person_contact/_person_contact.html.erb +12 -0
  47. data/app/pb_kits/playbook/pb_person_contact/_person_contact.jsx +49 -0
  48. data/app/pb_kits/playbook/{pb_owner_phone/_owner_phone.scss → pb_person_contact/_person_contact.scss} +3 -3
  49. data/app/pb_kits/playbook/pb_person_contact/docs/_person_contact_default.html.erb +21 -0
  50. data/app/pb_kits/playbook/pb_person_contact/docs/_person_contact_default.jsx +34 -0
  51. data/app/pb_kits/playbook/pb_person_contact/docs/example.yml +8 -0
  52. data/app/pb_kits/playbook/pb_person_contact/docs/index.js +1 -0
  53. data/app/pb_kits/playbook/pb_person_contact/person_contact.rb +55 -0
  54. data/app/pb_kits/playbook/props.rb +4 -4
  55. data/app/pb_kits/playbook/props/base.rb +7 -3
  56. data/app/pb_kits/playbook/props/number.rb +11 -0
  57. data/app/pb_kits/playbook/props/proc.rb +11 -0
  58. data/app/pb_kits/playbook/tokens/_colors.scss +12 -8
  59. data/app/views/layouts/playbook/_nav.html.slim +2 -2
  60. data/app/views/playbook/pages/principles.html.slim +0 -2
  61. data/fonts/fontawesome.min.js +5 -0
  62. data/fonts/regular.min.js +5 -0
  63. data/lib/generators/kit/kit_generator.rb +2 -2
  64. data/lib/playbook/version.rb +1 -1
  65. metadata +35 -32
  66. data/app/pb_kits/playbook/kits/pb_owner.js +0 -4
  67. data/app/pb_kits/playbook/kits/pb_owner_phone.js +0 -4
  68. data/app/pb_kits/playbook/kits/pb_phone.js +0 -4
  69. data/app/pb_kits/playbook/packs/site_styles/_kit_style_index.scss +0 -50
  70. data/app/pb_kits/playbook/pb_owner/_owner.jsx +0 -21
  71. data/app/pb_kits/playbook/pb_owner/docs/_owner_default.html.erb +0 -1
  72. data/app/pb_kits/playbook/pb_owner/docs/_owner_default.jsx +0 -10
  73. data/app/pb_kits/playbook/pb_owner/docs/example.yml +0 -9
  74. data/app/pb_kits/playbook/pb_owner/docs/index.js +0 -1
  75. data/app/pb_kits/playbook/pb_owner_phone/_owner_phone.html.erb +0 -7
  76. data/app/pb_kits/playbook/pb_owner_phone/_owner_phone.jsx +0 -21
  77. data/app/pb_kits/playbook/pb_owner_phone/docs/_owner_phone_default.html.erb +0 -6
  78. data/app/pb_kits/playbook/pb_owner_phone/docs/_owner_phone_default.jsx +0 -10
  79. data/app/pb_kits/playbook/pb_owner_phone/docs/example.yml +0 -9
  80. data/app/pb_kits/playbook/pb_owner_phone/docs/index.js +0 -1
  81. data/app/pb_kits/playbook/pb_owner_phone/owner_phone.rb +0 -62
  82. data/app/pb_kits/playbook/pb_phone/_phone.html.erb +0 -6
  83. data/app/pb_kits/playbook/pb_phone/_phone.jsx +0 -21
  84. data/app/pb_kits/playbook/pb_phone/docs/_phone_default.html.erb +0 -4
  85. data/app/pb_kits/playbook/pb_phone/docs/_phone_default.jsx +0 -10
  86. data/app/pb_kits/playbook/pb_phone/docs/example.yml +0 -9
  87. data/app/pb_kits/playbook/pb_phone/docs/index.js +0 -1
  88. data/app/pb_kits/playbook/pb_phone/phone.rb +0 -70
  89. data/fonts/fontawesome.js +0 -1978
  90. data/fonts/regular.js +0 -1217
@@ -1,4 +1,4 @@
1
- import commonSettings from "../pb_dashboard/commonSettings.js";
1
+ import { commonSettings } from "../pb_dashboard/commonSettings.js";
2
2
  import typography from "../tokens/_typography.scss";
3
3
 
4
4
  const markerStyles = highchart => {
@@ -1,7 +1,7 @@
1
1
  <%= content_tag(:div,
2
2
  id: object.id,
3
3
  data: object.data,
4
- class: object.classname("pb_owner_kit")) do %>
4
+ class: object.classname("pb_person_kit")) do %>
5
5
  <%= object.first_name %>
6
6
  <%= object.last_name %>
7
7
  <% end %>
@@ -0,0 +1,36 @@
1
+ /* @flow */
2
+ /*eslint-disable react/no-multi-comp, flowtype/space-before-type-colon */
3
+
4
+ import React from 'react'
5
+ import classnames from 'classnames'
6
+
7
+ import {
8
+ Body,
9
+ Title,
10
+ } from '../'
11
+
12
+ type PersonProps = {
13
+ className?: String | Array<String>,
14
+ dark?: Boolean,
15
+ firstName: String,
16
+ lastName: String,
17
+ }
18
+
19
+ const Person = ({
20
+ className,
21
+ dark=false,
22
+ firstName,
23
+ lastName,
24
+ }: PersonProps) => {
25
+
26
+ return (
27
+ <div className={classnames('pb_person_kit', className)}>
28
+ <Body tag="span" dark={dark} className="pb_person_first">
29
+ {`${firstName}`}
30
+ </Body>
31
+ <Title text={` ${lastName}`} dark={dark} size={4} className="pb_person_first" />
32
+ </div>
33
+ )
34
+ }
35
+
36
+ export default Person
@@ -2,11 +2,11 @@
2
2
  @import "../pb_body/body";
3
3
  @import "../tokens/spacing";
4
4
 
5
- [class^=pb_owner_kit] {
5
+ [class^=pb_person_kit] {
6
6
  display: flex;
7
7
  align-items: baseline;
8
8
 
9
- .pb_owner_first {
9
+ .pb_person_first {
10
10
  margin: 0 ($space_xs - 4px) 0 0;
11
11
  }
12
12
  }
@@ -0,0 +1 @@
1
+ <%= pb_rails("person", props: { first_name: "Kyle", last_name: "Fadigan" }) %>
@@ -0,0 +1,13 @@
1
+ import React from "react"
2
+ import {Person} from "../../"
3
+
4
+ function PersonDefault() {
5
+ return (
6
+ <Person
7
+ firstName="Kyle"
8
+ lastName="Fadigan"
9
+ />
10
+ )
11
+ }
12
+
13
+ export default PersonDefault;
@@ -0,0 +1,9 @@
1
+ examples:
2
+
3
+ rails:
4
+ - person_default: Default
5
+
6
+
7
+ react:
8
+ - person_default: Default
9
+
@@ -0,0 +1 @@
1
+ export {default as PersonDefault} from './_person_default.jsx';
@@ -1,19 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- module PbOwner
5
- class Owner < Playbook::PbKit::Base
6
- PROPS = %i[configured_classname
7
- configured_data
8
- configured_id
9
- configured_first_name
10
- configured_last_name].freeze
4
+ module PbPerson
5
+ class Person < Playbook::PbKit::Base
6
+ PROPS = %i[
7
+ configured_classname
8
+ configured_data
9
+ configured_id
10
+ configured_first_name
11
+ configured_last_name
12
+ ].freeze
11
13
 
12
- def initialize(classname: default_configuration,
13
- data: default_configuration,
14
- id: default_configuration,
15
- first_name: default_configuration,
16
- last_name: default_configuration)
14
+ def initialize(
15
+ classname: default_configuration,
16
+ data: default_configuration,
17
+ id: default_configuration,
18
+ first_name: default_configuration,
19
+ last_name: default_configuration
20
+ )
17
21
  self.configured_classname = classname
18
22
  self.configured_data = data
19
23
  self.configured_id = id
@@ -22,7 +26,7 @@ module Playbook
22
26
  end
23
27
 
24
28
  def first_name
25
- pb_first_name = Playbook::PbBody::Body.new(tag: "span", classname: "pb_owner_first") do
29
+ pb_first_name = Playbook::PbBody::Body.new(tag: "span", classname: "pb_person_first") do
26
30
  default_value(configured_first_name, "")
27
31
  end
28
32
  ApplicationController.renderer.render(partial: pb_first_name, as: :object)
@@ -36,7 +40,7 @@ module Playbook
36
40
  end
37
41
 
38
42
  def to_partial_path
39
- "pb_owner/owner"
43
+ "pb_person/person"
40
44
  end
41
45
 
42
46
  private
@@ -0,0 +1,12 @@
1
+ <%= content_tag(:div,
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname("pb_person_contact_kit")) do %>
5
+ <%= object.name %>
6
+ <% object.contacts.each do |contact| %>
7
+ <%= pb_rails("contact", props: {
8
+ contact_type: contact[:contact_type],
9
+ contact_value: contact[:contact_value],
10
+ }) %>
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1,49 @@
1
+ /* @flow */
2
+ /*eslint-disable react/no-multi-comp, flowtype/space-before-type-colon */
3
+
4
+ import React from 'react'
5
+ import classnames from 'classnames'
6
+
7
+ import {
8
+ Person,
9
+ Contact,
10
+ } from '../'
11
+
12
+ type PersonContactProps = {
13
+ className?: String | Array<String>,
14
+ dark?: Boolean,
15
+ firstName: String,
16
+ lastName: String,
17
+ contacts?: Array<{contactType: String, contactValue: String}>,
18
+ }
19
+
20
+ const contactsArray = ({contacts=[]}: PersonContactProps) => {
21
+ return contacts.map((contactObject, index) => {
22
+ return (
23
+ <Contact
24
+ contactType={contactObject.contactType}
25
+ contactValue={contactObject.contactValue}
26
+ />
27
+ );
28
+ })
29
+ }
30
+
31
+ const PersonContact = ({
32
+ className,
33
+ dark=false,
34
+ firstName,
35
+ lastName,
36
+ contacts,
37
+ }: PersonContactProps) => {
38
+
39
+ const contactKits = contactsArray({contacts})
40
+
41
+ return (
42
+ <div className={classnames('pb_person_contact_kit', className)}>
43
+ <Person firstName={firstName} lastName={lastName} />
44
+ {contactKits}
45
+ </div>
46
+ )
47
+ }
48
+
49
+ export default PersonContact
@@ -1,8 +1,8 @@
1
1
  @import "../tokens/spacing";
2
- @import "../pb_phone/phone";
3
- @import "../pb_owner/owner";
2
+ @import "../pb_contact/contact";
3
+ @import "../pb_person/person";
4
4
 
5
- .pb_owner_phone_kit {
5
+ .pb_person_contact_kit {
6
6
  display: flex;
7
7
  justify-content: flex-start;
8
8
  align-items: flex-start;
@@ -0,0 +1,21 @@
1
+ <%= pb_rails("person_contact", props: {
2
+ first_name: "Pauline",
3
+ last_name: "Smith",
4
+ contacts: [
5
+ {
6
+ contact_type: "email",
7
+ contact_value: "email@example.com"
8
+ },
9
+ {
10
+ contact_value: 5555555555,
11
+ },
12
+ {
13
+ contact_type: "email",
14
+ contact_value: "email@example.com",
15
+ },
16
+ {
17
+ contact_type: "work",
18
+ contact_value: "3245627482",
19
+ }
20
+ ]
21
+ }) %>
@@ -0,0 +1,34 @@
1
+ import React from "react"
2
+ import {PersonContact} from "../../"
3
+
4
+
5
+
6
+ function PersonContactDefault() {
7
+ return (
8
+ <div>
9
+ <PersonContact
10
+ firstName="Pauline"
11
+ lastName="Smith"
12
+ contacts={[
13
+ {
14
+ contactType: "email",
15
+ contactValue: "email@example.com"
16
+ },
17
+ {
18
+ contactValue: "5555555555",
19
+ },
20
+ {
21
+ contactType: "email",
22
+ contactValue: "email@example.com",
23
+ },
24
+ {
25
+ contactType: "work",
26
+ contactValue: "3245627482",
27
+ }
28
+ ]}
29
+ />
30
+ </div>
31
+ )
32
+ }
33
+
34
+ export default PersonContactDefault;
@@ -0,0 +1,8 @@
1
+ examples:
2
+
3
+ rails:
4
+ - person_contact_default: Default
5
+
6
+
7
+ react:
8
+ - person_contact_default: Default
@@ -0,0 +1 @@
1
+ export {default as PersonContactDefault} from './_person_contact_default.jsx';
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbPersonContact
5
+ class PersonContact < Playbook::PbKit::Base
6
+ PROPS = %i[
7
+ configured_classname
8
+ configured_data
9
+ configured_id
10
+ configured_first_name
11
+ configured_last_name
12
+ configured_contacts
13
+ ].freeze
14
+
15
+ def initialize(
16
+ classname: default_configuration,
17
+ data: default_configuration,
18
+ id: default_configuration,
19
+ first_name: default_configuration,
20
+ last_name: default_configuration,
21
+ contacts: default_configuration
22
+ )
23
+ self.configured_classname = classname
24
+ self.configured_data = data
25
+ self.configured_id = id
26
+ self.configured_first_name = first_name
27
+ self.configured_last_name = last_name
28
+ self.configured_contacts = contacts
29
+ end
30
+
31
+
32
+ def name
33
+ person = Playbook::PbPerson::Person.new(first_name: configured_first_name, last_name: configured_last_name)
34
+ ApplicationController.renderer.render(partial: person, as: :object)
35
+ end
36
+
37
+ def contacts
38
+ configured_contacts if is_set? configured_contacts
39
+ end
40
+
41
+ def to_partial_path
42
+ "pb_person_contact/person_contact"
43
+ end
44
+
45
+ private
46
+
47
+ DEFAULT = Object.new
48
+ private_constant :DEFAULT
49
+ def default_configuration
50
+ DEFAULT
51
+ end
52
+ attr_accessor(*PROPS)
53
+ end
54
+ end
55
+ end
@@ -5,21 +5,20 @@ require_relative "./props/base"
5
5
  require_relative "./props/boolean"
6
6
  require_relative "./props/enum"
7
7
  require_relative "./props/hash"
8
+ require_relative "./props/number"
8
9
  require_relative "./props/number_array"
9
10
  require_relative "./props/string"
11
+ require_relative "./props/proc"
10
12
 
11
13
  module Playbook
12
14
  module Props
13
15
  extend ActiveSupport::Concern
14
16
 
15
- attr_reader :block
16
-
17
17
  def initialize(prop_values, &block)
18
- @values = prop_values
18
+ @values = { children: block }.merge(prop_values)
19
19
  self.class.props.each do |key, definition|
20
20
  definition.validate! @values[key]
21
21
  end
22
- @block = block_given? ? block : nil
23
22
  end
24
23
 
25
24
  def prop(name)
@@ -38,6 +37,7 @@ module Playbook
38
37
  prop :data, type: Playbook::Props::Hash, default: {}
39
38
  prop :classname
40
39
  prop :aria, type: Playbook::Props::Hash, default: {}
40
+ prop :children, type: Playbook::Props::Proc
41
41
  end
42
42
 
43
43
  class_methods do
@@ -5,10 +5,11 @@ module Playbook
5
5
  class Error < StandardError; end
6
6
 
7
7
  class Base
8
- attr_reader :default
8
+ attr_reader :default, :required
9
9
 
10
- def initialize(default: nil)
10
+ def initialize(default: nil, required: false)
11
11
  @default = default
12
+ @required = required
12
13
  end
13
14
 
14
15
  def value(value)
@@ -16,7 +17,10 @@ module Playbook
16
17
  end
17
18
 
18
19
  def validate!(input_value)
19
- validate(value(input_value)) || raise(Playbook::Props::Error, "Invalid value (#{input_value.inspect}) for prop (#{inspect})")
20
+ raise(Playbook::Props::Error, "#{inspect} is a required prop and needs to be provided a value") if required && input_value.nil?
21
+
22
+ validate(value(input_value)) ||
23
+ raise(Playbook::Props::Error, "Invalid value (#{input_value.inspect}) for prop (#{inspect})")
20
24
  end
21
25
 
22
26
  def validate(_value)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Props
5
+ class Number < Playbook::Props::Base
6
+ def validate(value)
7
+ value.nil? || value.is_a?(Integer)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Props
5
+ class Proc < Playbook::Props::Base
6
+ def validate(block)
7
+ block.nil? || block.respond_to?(:call)
8
+ end
9
+ end
10
+ end
11
+ end