playbook_ui 4.6.1 → 4.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/data/menu.yml +2 -1
  4. data/app/pb_kits/playbook/index.js +1 -0
  5. data/app/pb_kits/playbook/packs/examples.js +2 -0
  6. data/app/pb_kits/playbook/packs/kits/pb_form_pill.js +1 -0
  7. data/app/pb_kits/playbook/pb_form_pill/_form_pill.html.erb +22 -0
  8. data/app/pb_kits/playbook/pb_form_pill/_form_pill.jsx +60 -0
  9. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +49 -0
  10. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_tag.html.erb +4 -0
  11. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_tag.jsx +11 -0
  12. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.html.erb +12 -0
  13. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.jsx +19 -0
  14. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +10 -0
  15. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +2 -0
  16. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +23 -0
  17. data/app/pb_kits/playbook/pb_home_address_street/_city_emphasis.html.erb +40 -0
  18. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.html.erb +6 -35
  19. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.jsx +53 -17
  20. data/app/pb_kits/playbook/pb_home_address_street/_street_emphasis.html.erb +31 -0
  21. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_emphasis.html.erb +27 -0
  22. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_emphasis.jsx +36 -0
  23. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_emphasis.md +2 -0
  24. data/app/pb_kits/playbook/pb_home_address_street/docs/example.yml +2 -0
  25. data/app/pb_kits/playbook/pb_home_address_street/docs/index.js +1 -0
  26. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +11 -0
  27. data/app/pb_kits/playbook/pb_popover/_popover.jsx +102 -53
  28. data/app/pb_kits/playbook/pb_popover/docs/_description.md +13 -1
  29. data/app/pb_kits/playbook/pb_popover/docs/_popover_click_any.html.erb +19 -0
  30. data/app/pb_kits/playbook/pb_popover/docs/_popover_click_any.jsx +40 -0
  31. data/app/pb_kits/playbook/pb_popover/docs/_popover_click_inside.html.erb +14 -0
  32. data/app/pb_kits/playbook/pb_popover/docs/_popover_click_inside.jsx +40 -0
  33. data/app/pb_kits/playbook/pb_popover/docs/_popover_click_outside.html.erb +14 -0
  34. data/app/pb_kits/playbook/pb_popover/docs/_popover_click_outside.jsx +40 -0
  35. data/app/pb_kits/playbook/pb_popover/docs/_popover_default.jsx +18 -21
  36. data/app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx +32 -34
  37. data/app/pb_kits/playbook/pb_popover/docs/_popover_portal.jsx +24 -26
  38. data/app/pb_kits/playbook/pb_popover/docs/_popover_with_button.jsx +24 -26
  39. data/app/pb_kits/playbook/pb_popover/docs/example.yml +7 -1
  40. data/app/pb_kits/playbook/pb_popover/docs/index.js +3 -0
  41. data/app/pb_kits/playbook/pb_popover/index.js +51 -3
  42. data/app/pb_kits/playbook/pb_popover/popover.rb +4 -0
  43. data/app/pb_kits/playbook/tokens/_colors.scss +1 -1
  44. data/lib/playbook/version.rb +1 -1
  45. metadata +24 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d387fc92462067f8aa0256e096f6b906a60d8ea8b5cd9d867a77aea89c1e375
4
- data.tar.gz: df93c9c4209ac327a842979430b307016b6575b42f674a8d0f13080cafe05e01
3
+ metadata.gz: f34f10c04ef659f3679d3b315a4feb7262222f64e1e9d0a426b4351b6ebee6f9
4
+ data.tar.gz: 936991948f07486bd253c898c16c3f81976f61d690334afcedfd6f607642c7e3
5
5
  SHA512:
6
- metadata.gz: 03d82fd5acaf38690231c80dd866191d704dec573cf5cece1a2d5ebcf2e58d917bf254ebfbf82e8e657592f0f58cc8e959e557edded130e9c924516ce737f71a
7
- data.tar.gz: 90a51793ae0583ae8c5232d3adb64e12254d2eb2c4d187518c8d0cf51653a7a6c5c5f758e46445c516901015fbb148027ecbe9d6f1c264b84c165787724fed12
6
+ metadata.gz: 9cd4cf22cbcd44c01c45bbf4a988b3148014aca56b54e5e3db882e993b391204f11be7955dac5579654811a8a31e034fd4ed88cd1bc6d3fc6be5da9ee39168f6
7
+ data.tar.gz: 5c5bf0132b7ba17aebbc093f334f47bd05e352cc4370aba887b38135ab6c1675bbb02a1bd8876076e3c6bb08dfae69bd002fc6de0f883f0dc278cd61d30e6683
@@ -19,6 +19,7 @@
19
19
  @import 'pb_distribution_bar/distribution_bar';
20
20
  @import 'pb_fixed_confirmation_toast/fixed_confirmation_toast';
21
21
  @import 'pb_form/form';
22
+ @import 'pb_form_pill/form_pill';
22
23
  @import 'pb_flex/flex';
23
24
  @import 'pb_hashtag/hashtag';
24
25
  @import 'pb_highlight/highlight';
@@ -1,4 +1,4 @@
1
- samples:
1
+ samples:
2
2
  - dashboards
3
3
  kits:
4
4
  - avatar
@@ -18,6 +18,7 @@ kits:
18
18
  - flex
19
19
  - forms:
20
20
  - form
21
+ - form_pill
21
22
  - radio
22
23
  - select
23
24
  - selectable_card
@@ -21,6 +21,7 @@ export Filter from './pb_filter/_filter.jsx'
21
21
  export FixedConfirmationToast from './pb_fixed_confirmation_toast/_fixed_confirmation_toast.jsx'
22
22
  export Flex from './pb_flex/_flex.jsx'
23
23
  export FlexItem from './pb_flex/_flex_item.jsx'
24
+ export FormPill from './pb_form_pill/_form_pill.jsx'
24
25
  export Hashtag from './pb_hashtag/_hashtag.jsx'
25
26
  export Highlight from './pb_highlight/_highlight.jsx'
26
27
  export HomeAddressStreet from './pb_home_address_street/_home_address_street.jsx'
@@ -34,6 +34,7 @@ import * as DistributionBar from 'pb_distribution_bar/docs'
34
34
  import * as Filter from 'pb_filter/docs'
35
35
  import * as FixedConfirmationToast from 'pb_fixed_confirmation_toast/docs'
36
36
  import * as Flex from 'pb_flex/docs'
37
+ import * as FormPill from 'pb_form_pill/docs'
37
38
  import * as Hashtag from 'pb_hashtag/docs'
38
39
  import * as Highlight from 'pb_highlight/docs'
39
40
  import * as HomeAddressStreet from 'pb_home_address_street/docs'
@@ -101,6 +102,7 @@ WebpackerReact.setup({
101
102
  ...Filter,
102
103
  ...FixedConfirmationToast,
103
104
  ...Flex,
105
+ ...FormPill,
104
106
  ...Hashtag,
105
107
  ...Highlight,
106
108
  ...HomeAddressStreet,
@@ -0,0 +1 @@
1
+ import '../../pb_form_pill/_form_pill.jsx'
@@ -0,0 +1,22 @@
1
+ <%= content_tag(:div,
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname) do %>
5
+
6
+ <% if object.name.present? %>
7
+ <%= pb_rails("avatar", props: {
8
+ name: object.name,
9
+ image_url: object.avatar_url,
10
+ size: "xs"
11
+ }) %>
12
+ <%= pb_rails("title", props: { text: object.name, size: 4, classname: "pb_form_pill_text" }) %>
13
+
14
+ <% elsif object.text.present? %>
15
+ <%= pb_rails("title", props: { text: object.text, size: 4, classname: "pb_form_pill_tag" }) %>
16
+ <% end %>
17
+
18
+ <%= pb_rails("body", props: { classname: "pb_form_pill_close" }) do %>
19
+ <%= pb_rails("icon", props: { icon: 'times', fixed_width: true }) %>
20
+ <% end %>
21
+
22
+ <% end %>
@@ -0,0 +1,60 @@
1
+ /* @flow */
2
+ import React from 'react'
3
+ import classnames from 'classnames'
4
+ import Title from '../pb_title/_title.jsx'
5
+ import Icon from '../pb_icon/_icon.jsx'
6
+ import Avatar from '../pb_avatar/_avatar.jsx'
7
+
8
+ type FormPillProps = {
9
+
10
+ className?: String,
11
+ id?: String,
12
+ text: String,
13
+ name: String,
14
+ onClick?: EventHandler,
15
+ avatar?: Boolean,
16
+ avatarUrl?: String,
17
+ }
18
+ const FormPill = ({
19
+ className,
20
+ text,
21
+ name,
22
+ onClick = () => {},
23
+ avatarUrl,
24
+ }: FormPillProps) => {
25
+ const css = classnames([
26
+ `pb_form_pill_kit_${'primary'}`,
27
+ className,
28
+ ])
29
+ return (
30
+ <div className={css}>
31
+ <If condition={name}>
32
+ <Avatar
33
+ imageUrl={avatarUrl}
34
+ name={name}
35
+ size="xs"
36
+ />
37
+ <Title
38
+ className="pb_form_pill_text"
39
+ size={4}
40
+ text={name}
41
+ />
42
+ </If>
43
+ <If condition={text}>
44
+ <Title
45
+ className="pb_form_pill_tag"
46
+ size={4}
47
+ text={text}
48
+ />
49
+ </If>
50
+ <div className="pb_form_pill_close">
51
+ <Icon
52
+ fixedWidth
53
+ icon="times"
54
+ onClick={onClick}
55
+ />
56
+ </div>
57
+ </div>
58
+ )
59
+ }
60
+ export default FormPill
@@ -0,0 +1,49 @@
1
+ @import "../tokens/spacing";
2
+ @import "../tokens/colors";
3
+ @import "../tokens/opacity";
4
+ @import "../tokens/shadows";
5
+ @import "../pb_avatar/avatar";
6
+
7
+ $selector: ".pb_form_pill";
8
+ $pb_form_pill_height: 37px;
9
+ $form_pill_colors: (
10
+ primary: map-get($status_color_text, "primary"),
11
+ );
12
+
13
+
14
+ [class^=pb_form_pill_kit] {
15
+ display: inline-flex;
16
+ justify-content: center;
17
+ align-items: center;
18
+ padding: 0 $space-sm/3;
19
+ height: $pb_form_pill_height;
20
+ border-radius: $pb_form_pill_height/2;
21
+ @each $color_name, $color_value in $form_pill_colors {
22
+ &[class*=_#{$color_name}] {
23
+ background-color: rgba($color_value, $opacity-1);
24
+ transition: background-color 0.2s ease;
25
+ box-shadow: none;
26
+ &:hover {
27
+ background-color: rgba($color_value, $opacity-2);
28
+ }
29
+ #{$selector}_text {
30
+ color: $color_value;
31
+ padding-left: $space-sm;
32
+ padding-right: $space-sm/4;
33
+ }
34
+ #{$selector}_close {
35
+ color: $color_value;
36
+ padding-left: $space-sm/2;
37
+ padding-right: $space-sm/4;
38
+ display: flex;
39
+ align-items: center;
40
+ height: 100%;
41
+ cursor: pointer;
42
+ }
43
+ #{$selector}_tag {
44
+ color: $color_value;
45
+ padding-left: $space-sm;
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("form_pill", props: {
2
+ text: "this is a tag"
3
+
4
+ }) %>
@@ -0,0 +1,11 @@
1
+ import React from 'react'
2
+ import FormPill from '../_form_pill.jsx'
3
+
4
+ const FormPillDefault = () => {
5
+ return (
6
+ <div>
7
+ <FormPill text="this is a tag" />
8
+ </div>
9
+ )
10
+ }
11
+ export default FormPillDefault
@@ -0,0 +1,12 @@
1
+ <%= pb_rails("form_pill", props: {
2
+ name: "Anna Black",
3
+ avatar_url: "https://randomuser.me/api/portraits/women/44.jpg",
4
+
5
+ }) %>
6
+
7
+ <br>
8
+ <br>
9
+
10
+ <%= pb_rails("form_pill", props: {
11
+ name: "Anna Black",
12
+ }) %>
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import FormPill from '../_form_pill.jsx'
3
+
4
+ const FormPillDefault = () => {
5
+ return (
6
+
7
+ <div>
8
+ <FormPill
9
+ avatarUrl="https://randomuser.me/api/portraits/women/44.jpg"
10
+ name="Anna Black"
11
+ />
12
+ <br />
13
+ <br />
14
+ <FormPill name="Anna Black" />
15
+ </div>
16
+ )
17
+ }
18
+
19
+ export default FormPillDefault
@@ -0,0 +1,10 @@
1
+ examples:
2
+
3
+ rails:
4
+ - form_pill_user: Form Pill User
5
+ - form_pill_tag: Form Pill Tag
6
+
7
+
8
+ react:
9
+ - form_pill_user: Form Pill User
10
+ - form_pill_tag: Form Pill Tag
@@ -0,0 +1,2 @@
1
+ export { default as FormPillUser } from './_form_pill_user.jsx'
2
+ export { default as FormPillTag } from './_form_pill_tag.jsx'
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbFormPill
5
+ class FormPill
6
+ include Playbook::Props
7
+
8
+ partial "pb_form_pill/form_pill"
9
+
10
+ prop :avatar_url
11
+ prop :name
12
+ prop :text
13
+
14
+ def classname
15
+ generate_classname("pb_form_pill_kit", "primary", name, text)
16
+ end
17
+
18
+ def display_text
19
+ name.downcase
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ <%= pb_rails "body", props: {
2
+ classname: "pb_home_address_street_address",
3
+ color: "light",
4
+ text: object.address_house_style,
5
+ dark: object.dark
6
+ } %>
7
+ <%= pb_rails "body", props: {
8
+ classname: "pb_home_address_street_address",
9
+ color: "light",
10
+ text: object.address_house_style2,
11
+ dark: object.dark
12
+ } %>
13
+ <div>
14
+ <%= pb_rails "title", props: {
15
+ tag: "span",
16
+ size: 4,
17
+ text: object.city_state,
18
+ dark: object.dark
19
+ } %>
20
+ <%= pb_rails "body", props: {
21
+ tag: "span",
22
+ classname: "pb_home_zip",
23
+ color: "light",
24
+ text: object.zip,
25
+ dark: object.dark
26
+ } %>
27
+ </div>
28
+
29
+ <% if object.home_id %>
30
+ <%= pb_rails("hashtag", props: {
31
+ text: "#{object.home_id}",
32
+ url: object.home_url || "#",
33
+ type: "home",
34
+ dark: object.dark,
35
+ classname: "home-hashtag"}) %>
36
+ <% end %>
37
+
38
+ <%= pb_rails "body", props: { color: "light", tag: "span", dark: object.dark } do %>
39
+ <small><%= object.territory %></small>
40
+ <% end %>
@@ -2,38 +2,9 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname) do %>
5
-
6
- <%= pb_rails "title", props: {
7
- classname: "pb_home_address_street_address",
8
- size: 4,
9
- text: object.address_house_style,
10
- dark: object.dark
11
- } %>
12
-
13
- <%= pb_rails "title", props: {
14
- classname: "pb_home_address_street_address",
15
- size: 4,
16
- text: object.address_house_style2,
17
- dark: object.dark
18
- } %>
19
-
20
- <%= pb_rails "body", props: {
21
- color: "light",
22
- text: object.city_state_zip,
23
- dark: object.dark
24
- } %>
25
-
26
- <% if object.home_id %>
27
- <%= pb_rails("hashtag", props: {
28
- text: "#{object.home_id}",
29
- url: object.home_url || "#",
30
- type: "home",
31
- dark: object.dark,
32
- classname: "home-hashtag"}) %>
33
- <% end %>
34
-
35
- <%= pb_rails "body", props: { color: "light", tag: "span", dark: object.dark } do %>
36
- <small><%= object.territory %></small>
37
- <% end %>
38
-
39
- <% end %>
5
+ <% if object.emphasis == "city" %>
6
+ <%= render partial:"pb_home_address_street/city_emphasis.html.erb", locals: {object: object}%>
7
+ <% elsif object.emphasis == "street" %>
8
+ <%= render partial:"pb_home_address_street/street_emphasis.html.erb", locals: {object: object} %>
9
+ <% end %>
10
+ <% end %>
@@ -12,6 +12,7 @@ type HomeAddressStreetProps = {
12
12
  city: String,
13
13
  className?: String,
14
14
  dark?: Boolean,
15
+ emphasis: 'street' | 'city',
15
16
  homeId: Number,
16
17
  houseStyle: String,
17
18
  homeUrl: String,
@@ -33,6 +34,7 @@ const HomeAddressStreet = ({
33
34
  city,
34
35
  className,
35
36
  dark = false,
37
+ emphasis = 'street',
36
38
  homeId,
37
39
  homeUrl,
38
40
  houseStyle,
@@ -41,24 +43,58 @@ const HomeAddressStreet = ({
41
43
  territory,
42
44
  }: HomeAddressStreetProps) => (
43
45
  <div className={classes(className, dark)}>
44
- <Title
45
- className="pb_home_address_street_address"
46
- dark={dark}
47
- size={4}
48
- >
49
- {joinPresent([titleize(address), houseStyle], ' · ')}
50
- </Title>
46
+ {
47
+ <Choose>
48
+ <When condition={emphasis == 'street'}>
49
+ <div>
50
+ <Title
51
+ className="pb_home_address_street_address"
52
+ dark={dark}
53
+ size={4}
54
+ >
55
+ {joinPresent([titleize(address), houseStyle], ' · ')}
56
+ </Title>
57
+ <Title
58
+ className="pb_home_address_street_address"
59
+ dark={dark}
60
+ size={4}
61
+ >
62
+ {titleize(addressCont)}
63
+ </Title>
64
+ <Body color="light">
65
+ {`${titleize(city)}, ${state} ${zipcode}`}
66
+ </Body>
67
+ </div>
68
+ </When>
69
+ <When condition={emphasis == 'city'}>
70
+ <div>
71
+ <Body color="light">
72
+ {joinPresent([titleize(address), houseStyle], ' · ')}
73
+ </Body>
74
+ <Body color="light">
75
+ {titleize(addressCont)}
76
+ </Body>
77
+ <div>
78
+ <Title
79
+ className="pb_home_address_street_address"
80
+ dark={dark}
81
+ size={4}
82
+ tag="span"
83
+ >
84
+ {`${titleize(city)}, ${state}`}
85
+ </Title>
86
+ <Body
87
+ color="light"
88
+ tag="span"
89
+ >
90
+ {` ${zipcode}`}
91
+ </Body>
92
+ </div>
93
+ </div>
94
+ </When>
95
+ </Choose>
96
+ }
51
97
 
52
- <Title
53
- className="pb_home_address_street_address"
54
- dark={dark}
55
- size={4}
56
- >
57
- {titleize(addressCont)}
58
- </Title>
59
- <Body color="light">
60
- {`${titleize(city)}, ${state} ${zipcode}`}
61
- </Body>
62
98
  <If condition={homeId}>
63
99
  <Hashtag
64
100
  classname="home-hashtag"