playbook_ui 4.6.1 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"