playbook_ui 4.2.0 → 4.3.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.
- checksums.yaml +4 -4
- data/app/controllers/playbook/application_controller.rb +1 -0
- data/app/controllers/playbook/pages_controller.rb +0 -4
- data/app/controllers/playbook/samples_controller.rb +40 -0
- data/app/helpers/playbook/pb_doc_helper.rb +7 -1
- data/app/helpers/playbook/pb_sample_helper.rb +19 -0
- data/app/helpers/playbook/redcarpet_helper.rb +1 -1
- data/app/pb_kits/playbook/_playbook.scss +1 -0
- data/app/pb_kits/playbook/config/_kit_samples_list.html.erb +3 -0
- data/app/pb_kits/playbook/config/_kit_ui.html.slim +9 -5
- data/app/pb_kits/playbook/data/menu.yml +4 -0
- data/app/pb_kits/playbook/index.js +2 -0
- data/app/pb_kits/playbook/kits/pb_flex.js +4 -0
- data/app/pb_kits/playbook/kits/pb_highlight.js +4 -0
- data/app/pb_kits/playbook/packs/examples.js +4 -0
- data/app/pb_kits/playbook/packs/kits/pb_highlight.js +2 -0
- data/app/pb_kits/playbook/packs/kits/pb_popover.js +1 -0
- data/app/pb_kits/playbook/packs/main.scss +3 -0
- data/app/pb_kits/playbook/packs/samples.js +50 -0
- data/app/pb_kits/playbook/packs/site_styles/_samples.scss +71 -0
- data/app/pb_kits/playbook/packs/site_styles/_site-style.scss +6 -0
- data/app/pb_kits/playbook/packs/site_styles/docs/_flex_examples.scss +11 -3
- data/app/pb_kits/playbook/pb_body/_body.html.erb +1 -1
- data/app/pb_kits/playbook/pb_body/_body.jsx +10 -1
- data/app/pb_kits/playbook/pb_body/body.rb +17 -1
- data/app/pb_kits/playbook/pb_editor/_editor.html.erb +6 -0
- data/app/pb_kits/playbook/pb_hashtag/_hashtag.jsx +2 -1
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_dark.html.erb +4 -0
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_dark.jsx +7 -0
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_default.html.erb +4 -0
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_default.jsx +6 -0
- data/app/pb_kits/playbook/pb_hashtag/hashtag.rb +3 -1
- data/app/pb_kits/playbook/pb_highlight/_highlight.html.erb +6 -0
- data/app/pb_kits/playbook/pb_highlight/_highlight.jsx +38 -0
- data/app/pb_kits/playbook/pb_highlight/_highlight.scss +6 -0
- data/app/pb_kits/playbook/pb_highlight/docs/_highlight_default.html.erb +20 -0
- data/app/pb_kits/playbook/pb_highlight/docs/_highlight_default.jsx +26 -0
- data/app/pb_kits/playbook/pb_highlight/docs/example.yml +9 -0
- data/app/pb_kits/playbook/pb_highlight/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_highlight/highlight.rb +17 -0
- data/app/pb_kits/playbook/pb_popover/_popover.html.erb +1 -1
- data/app/pb_kits/playbook/pb_popover/_popover.js +13 -22
- data/app/pb_kits/playbook/pb_popover/_popover.jsx +121 -0
- data/app/pb_kits/playbook/pb_popover/_popover.scss +4 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_default.jsx +29 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx +46 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_portal.jsx +36 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_with_button.jsx +35 -0
- data/app/pb_kits/playbook/pb_popover/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_popover/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_popover/popover.rb +1 -1
- data/app/pb_kits/playbook/pb_select/_select.jsx +51 -51
- data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +8 -14
- data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +17 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_dark_error.jsx +17 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +16 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +8 -14
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +31 -29
- data/app/pb_kits/playbook/pb_select/docs/_select_error.jsx +17 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +7 -11
- data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +8 -14
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +2 -2
- data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +2 -2
- data/app/pb_kits/playbook/pb_toggle/_toggle.jsx +3 -3
- data/app/pb_kits/playbook/types.js +1 -1
- data/app/pb_kits/playbook/vendor.js +2 -2
- data/app/views/layouts/playbook/samples.html.erb +37 -0
- data/app/views/playbook/pages/kit_show.html.slim +1 -1
- data/app/views/playbook/pages/principles.html.slim +1 -1
- data/app/views/playbook/samples/dashboards/dashboards.html.erb +82 -0
- data/app/views/playbook/samples/dashboards/dashboards.jsx +35 -0
- data/app/views/playbook/samples/sample_show.html.erb +25 -0
- data/lib/playbook/version.rb +1 -1
- metadata +32 -5
- data/app/pb_kits/playbook/config/_kit_example.html.slim +0 -5
|
@@ -4,7 +4,8 @@ module Playbook
|
|
|
4
4
|
module PbBody
|
|
5
5
|
class Body
|
|
6
6
|
include Playbook::Props
|
|
7
|
-
|
|
7
|
+
include ActionView::Helpers
|
|
8
|
+
|
|
8
9
|
partial "pb_body/body"
|
|
9
10
|
|
|
10
11
|
prop :color, type: Playbook::Props::Enum,
|
|
@@ -19,13 +20,28 @@ module Playbook
|
|
|
19
20
|
values: %w[h1 h2 h3 h4 h5 h6 p span div],
|
|
20
21
|
default: "div"
|
|
21
22
|
prop :text
|
|
23
|
+
prop :highlighting, type: Playbook::Props::Boolean,
|
|
24
|
+
default: false
|
|
25
|
+
prop :highlighted_text, type: Playbook::Props::Array,
|
|
26
|
+
default: []
|
|
22
27
|
|
|
23
28
|
def classname
|
|
24
29
|
generate_classname("pb_body_kit", color_class, dark_class, status_class)
|
|
25
30
|
end
|
|
26
31
|
|
|
32
|
+
def content
|
|
33
|
+
highlighting ? apply_highlight : text
|
|
34
|
+
end
|
|
35
|
+
|
|
27
36
|
private
|
|
28
37
|
|
|
38
|
+
def apply_highlight
|
|
39
|
+
pb_highlight = Playbook::PbHighlight::Highlight.new() {"|"}
|
|
40
|
+
pb_highlight_output = ApplicationController.renderer.render(partial: pb_highlight, as: :object)
|
|
41
|
+
highlight_tags = pb_highlight_output.split("|")
|
|
42
|
+
highlight(text, highlighted_text, highlighter: "#{highlight_tags.first.html_safe} \\1 #{highlight_tags.last.html_safe}")
|
|
43
|
+
end
|
|
44
|
+
|
|
29
45
|
def color_class
|
|
30
46
|
color != "default" ? color : nil
|
|
31
47
|
end
|
|
@@ -13,13 +13,14 @@ type HashtagProps = {
|
|
|
13
13
|
dark?: Boolean,
|
|
14
14
|
id?: String,
|
|
15
15
|
text?: String,
|
|
16
|
-
type: 'default' | 'home' | 'project',
|
|
16
|
+
type: 'default' | 'home' | 'project' | 'appointment',
|
|
17
17
|
url?: String,
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const typeMap = {
|
|
21
21
|
'home': 'H#',
|
|
22
22
|
'project': 'P#',
|
|
23
|
+
'appointment': 'A#',
|
|
23
24
|
'default': '#',
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -10,7 +10,7 @@ module Playbook
|
|
|
10
10
|
prop :text
|
|
11
11
|
prop :dark, type: Playbook::Props::Boolean, default: false
|
|
12
12
|
prop :type, type: Playbook::Props::Enum,
|
|
13
|
-
values: %w[default project home],
|
|
13
|
+
values: %w[default project home appointment],
|
|
14
14
|
default: "default"
|
|
15
15
|
prop :url
|
|
16
16
|
|
|
@@ -33,6 +33,8 @@ module Playbook
|
|
|
33
33
|
"H#"
|
|
34
34
|
elsif type === "project"
|
|
35
35
|
"P#"
|
|
36
|
+
elsif type === "appointment"
|
|
37
|
+
"A#"
|
|
36
38
|
else
|
|
37
39
|
"#"
|
|
38
40
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* @flow */
|
|
2
|
+
/* eslint-disable react/no-multi-comp, flowtype/space-before-type-colon */
|
|
3
|
+
import Highlighter from 'react-highlight-words'
|
|
4
|
+
import React from 'react'
|
|
5
|
+
|
|
6
|
+
type HighlightProps = {
|
|
7
|
+
className?: String,
|
|
8
|
+
data?: String,
|
|
9
|
+
id?: String,
|
|
10
|
+
children?: React.Node,
|
|
11
|
+
text?: String,
|
|
12
|
+
highlightedText?: Array<String>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const Highlight = ({
|
|
16
|
+
className = 'pb_highlight_kit',
|
|
17
|
+
children,
|
|
18
|
+
data,
|
|
19
|
+
id,
|
|
20
|
+
text,
|
|
21
|
+
highlightedText = ['highlight'],
|
|
22
|
+
}: HighlightProps) => {
|
|
23
|
+
return (
|
|
24
|
+
|
|
25
|
+
<Highlighter
|
|
26
|
+
autoEscape
|
|
27
|
+
data={data}
|
|
28
|
+
highlightClassName={className}
|
|
29
|
+
highlightTag="span"
|
|
30
|
+
id={id}
|
|
31
|
+
searchWords={highlightedText}
|
|
32
|
+
textToHighlight={text || children}
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default Highlight
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
<%= pb_rails("highlight", props: {text: "Highlight Kit"})%>
|
|
3
|
+
<br>
|
|
4
|
+
<br>
|
|
5
|
+
<%= pb_rails("title", props: {text: "Kit wrapping",size: 4})%>
|
|
6
|
+
<br>
|
|
7
|
+
<%= pb_rails("body") do%>
|
|
8
|
+
This an example<%= pb_rails("highlight") do%>Highlight Example<% end %>around.
|
|
9
|
+
<% end %>
|
|
10
|
+
<br>
|
|
11
|
+
<br>
|
|
12
|
+
<%= pb_rails("title", props: {text: "Search",size: 4})%>
|
|
13
|
+
</br>
|
|
14
|
+
<%= pb_rails("body", props: {text: "hello helpers are great even highlighting this", highlighting: true, highlighted_text: ["hello","great"]})%>
|
|
15
|
+
|
|
16
|
+
<br>
|
|
17
|
+
<br>
|
|
18
|
+
<%= pb_rails("caption", props: {size: "xs", text: "To enable highlighting make sure the [highlighting] flag is set to true. "}) %>
|
|
19
|
+
<br>
|
|
20
|
+
<br>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Body, Highlight } from '../../'
|
|
3
|
+
|
|
4
|
+
const HighlightDefault = () => (
|
|
5
|
+
<div>
|
|
6
|
+
<Highlight
|
|
7
|
+
highlightedText={['highlight kit']}
|
|
8
|
+
text="This is the Highlight Kit"
|
|
9
|
+
/>
|
|
10
|
+
<br />
|
|
11
|
+
<Body>
|
|
12
|
+
{' '}
|
|
13
|
+
{'Hello this is a'}
|
|
14
|
+
{' '}
|
|
15
|
+
<Highlight>{' highlight wrapped'}</Highlight>
|
|
16
|
+
</Body>
|
|
17
|
+
<br />
|
|
18
|
+
<Body
|
|
19
|
+
highlightedText={['highlighted in the Body Kit ']}
|
|
20
|
+
highlighting
|
|
21
|
+
text="This is text highlighted in the Body Kit using the text prop."
|
|
22
|
+
/>
|
|
23
|
+
</div>
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
export default HighlightDefault
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as HighlightDefault } from './_highlight_default.jsx'
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Playbook
|
|
4
|
+
module PbHighlight
|
|
5
|
+
class Highlight
|
|
6
|
+
include Playbook::Props
|
|
7
|
+
|
|
8
|
+
partial "pb_highlight/highlight"
|
|
9
|
+
|
|
10
|
+
prop :text
|
|
11
|
+
|
|
12
|
+
def classname
|
|
13
|
+
generate_classname("pb_highlight_kit")
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Popper from 'popper.js'
|
|
2
2
|
|
|
3
|
-
class
|
|
3
|
+
class PbPopover {
|
|
4
4
|
constructor(
|
|
5
5
|
triggerElement = '#triggerElement',
|
|
6
6
|
tooltip = '#tooltip',
|
|
7
7
|
placement = 'left',
|
|
8
|
-
offset
|
|
8
|
+
offset,
|
|
9
9
|
) {
|
|
10
10
|
this.triggerElement = triggerElement
|
|
11
11
|
this.tooltip = tooltip
|
|
@@ -15,41 +15,32 @@ class Popover {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
//getters
|
|
18
|
-
get
|
|
18
|
+
get referenceElement() {
|
|
19
19
|
return document.querySelector(this.triggerElement)
|
|
20
20
|
}
|
|
21
21
|
get popoverTooltip() {
|
|
22
22
|
return document.querySelector(this.tooltip)
|
|
23
23
|
}
|
|
24
|
-
get popoverPlacement() {
|
|
25
|
-
return this.placement
|
|
26
|
-
}
|
|
27
|
-
get popoverOffset() {
|
|
28
|
-
return this.offset
|
|
29
|
-
}
|
|
30
24
|
|
|
31
25
|
attachEvents() {
|
|
32
|
-
this.
|
|
26
|
+
this.referenceElement.addEventListener('click', () => {
|
|
33
27
|
this.popoverTooltip.classList.toggle('show')
|
|
34
|
-
this.popper.
|
|
28
|
+
this.popper.scheduleUpdate()
|
|
35
29
|
})
|
|
36
30
|
}
|
|
37
31
|
|
|
38
32
|
setupPopper() {
|
|
39
|
-
this.popper =
|
|
40
|
-
placement: this.
|
|
41
|
-
modifiers:
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
options: {
|
|
45
|
-
offset: this.offset,
|
|
46
|
-
},
|
|
33
|
+
this.popper = new Popper(this.referenceElement, this.popoverTooltip, {
|
|
34
|
+
placement: this.placement,
|
|
35
|
+
modifiers: {
|
|
36
|
+
offset: {
|
|
37
|
+
offset: this.offset,
|
|
47
38
|
},
|
|
48
|
-
|
|
39
|
+
},
|
|
49
40
|
})
|
|
50
41
|
|
|
51
42
|
this.attachEvents()
|
|
52
43
|
}
|
|
53
44
|
}
|
|
54
45
|
|
|
55
|
-
export default
|
|
46
|
+
export default PbPopover
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import React from 'react'
|
|
4
|
+
import ReactDOM from 'react-dom'
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
Popper,
|
|
8
|
+
Manager as PopperManager,
|
|
9
|
+
PopperProps,
|
|
10
|
+
Reference as PopperReference,
|
|
11
|
+
} from 'react-popper'
|
|
12
|
+
|
|
13
|
+
import { buildCss } from '../utilities/props'
|
|
14
|
+
import { Card } from '../'
|
|
15
|
+
|
|
16
|
+
type PbPopoverProps = {
|
|
17
|
+
className?: String,
|
|
18
|
+
offset?: Boolean,
|
|
19
|
+
reference: PopperReference,
|
|
20
|
+
show?: Boolean,
|
|
21
|
+
} & PopperProps
|
|
22
|
+
|
|
23
|
+
const POPOVER_OFFSET_Y = {
|
|
24
|
+
offset: {
|
|
25
|
+
offset: '0, 8',
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const popoverModifiers = ({ modifiers, offset }) => {
|
|
30
|
+
return offset ? { ...modifiers, ...POPOVER_OFFSET_Y } : modifiers
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const Popover = ({
|
|
34
|
+
children,
|
|
35
|
+
className,
|
|
36
|
+
modifiers,
|
|
37
|
+
offset,
|
|
38
|
+
placement,
|
|
39
|
+
referenceElement,
|
|
40
|
+
show,
|
|
41
|
+
}: PbPopoverProps) => (
|
|
42
|
+
<Popper
|
|
43
|
+
modifiers={popoverModifiers({ modifiers, offset })}
|
|
44
|
+
placement={placement}
|
|
45
|
+
referenceElement={referenceElement}
|
|
46
|
+
>
|
|
47
|
+
{({ placement, ref, scheduleUpdate, style }) => {
|
|
48
|
+
scheduleUpdate()
|
|
49
|
+
return (
|
|
50
|
+
<div
|
|
51
|
+
className={buildCss('pb_popover_kit', className)}
|
|
52
|
+
data-placement={placement}
|
|
53
|
+
ref={ref}
|
|
54
|
+
style={style}
|
|
55
|
+
>
|
|
56
|
+
<div className={buildCss('popover_tooltip', show ? 'show' : '')}>
|
|
57
|
+
<Card shadow="deeper">
|
|
58
|
+
{ children }
|
|
59
|
+
</Card>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
</Popper>
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
const PbReactPopover = ({
|
|
69
|
+
className,
|
|
70
|
+
children,
|
|
71
|
+
modifiers = {},
|
|
72
|
+
offset = false,
|
|
73
|
+
placement = 'left',
|
|
74
|
+
portal = 'body',
|
|
75
|
+
reference,
|
|
76
|
+
referenceElement,
|
|
77
|
+
show = false,
|
|
78
|
+
usePortal = false,
|
|
79
|
+
}: PbPopoverProps) => {
|
|
80
|
+
const popoverComponent = (
|
|
81
|
+
<Popover
|
|
82
|
+
className={className}
|
|
83
|
+
modifiers={modifiers}
|
|
84
|
+
offset={offset}
|
|
85
|
+
placement={placement}
|
|
86
|
+
referenceElement={referenceElement}
|
|
87
|
+
show={show}
|
|
88
|
+
>
|
|
89
|
+
{children}
|
|
90
|
+
</Popover>
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<PopperManager>
|
|
95
|
+
<If condition={reference && !referenceElement}>
|
|
96
|
+
<PopperReference>
|
|
97
|
+
{({ ref }) => (
|
|
98
|
+
<span
|
|
99
|
+
className="pb_popover_reference_wrapper"
|
|
100
|
+
ref={ref}
|
|
101
|
+
>
|
|
102
|
+
<reference.type
|
|
103
|
+
{...reference.props}
|
|
104
|
+
/>
|
|
105
|
+
</span>
|
|
106
|
+
)}
|
|
107
|
+
</PopperReference>
|
|
108
|
+
</If>
|
|
109
|
+
<If condition={usePortal}>
|
|
110
|
+
{ReactDOM.createPortal(
|
|
111
|
+
popoverComponent,
|
|
112
|
+
document.querySelector(portal)
|
|
113
|
+
)}
|
|
114
|
+
<Else />
|
|
115
|
+
{popoverComponent}
|
|
116
|
+
</If>
|
|
117
|
+
</PopperManager>
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export default PbReactPopover
|