playbook_ui 4.14.0 → 4.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +2 -0
- data/app/pb_kits/playbook/data/menu.yml +2 -0
- data/app/pb_kits/playbook/index.js +4 -1
- data/app/pb_kits/playbook/packs/examples.js +2 -0
- data/app/pb_kits/playbook/packs/kits/pb_progress_step.js +2 -0
- data/app/pb_kits/playbook/pb_button/_button.jsx +9 -1
- data/app/pb_kits/playbook/pb_contact/_contact.jsx +1 -0
- data/app/pb_kits/playbook/pb_contact/contact.rb +2 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_default.html.erb +5 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_default.jsx +4 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_with_detail.html.erb +6 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_with_detail.jsx +5 -0
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.jsx +2 -2
- data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.jsx +56 -0
- data/app/pb_kits/playbook/pb_filter/Filter/FilterBackground.jsx +26 -0
- data/app/pb_kits/playbook/pb_filter/Filter/FilterDouble.jsx +58 -0
- data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.jsx +46 -0
- data/app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.jsx +37 -0
- data/app/pb_kits/playbook/pb_filter/Filter/ResultsCount.jsx +34 -0
- data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.jsx +85 -0
- data/app/pb_kits/playbook/pb_filter/Filter/index.jsx +26 -0
- data/app/pb_kits/playbook/pb_filter/_filter.jsx +1 -222
- data/app/pb_kits/playbook/pb_filter/_filter.scss +16 -13
- data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +34 -41
- data/app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx +13 -9
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.html.erb +69 -74
- data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.jsx +12 -9
- data/app/pb_kits/playbook/pb_filter/docs/_filter_only.html.erb +28 -35
- data/app/pb_kits/playbook/pb_filter/docs/_filter_only.jsx +5 -6
- data/app/pb_kits/playbook/pb_filter/docs/_filter_single.html.erb +35 -41
- data/app/pb_kits/playbook/pb_filter/docs/_filter_single.jsx +12 -10
- data/app/pb_kits/playbook/pb_filter/docs/_sort_only.html.erb +12 -18
- data/app/pb_kits/playbook/pb_filter/docs/_sort_only.jsx +14 -44
- data/app/pb_kits/playbook/pb_filter/templates/_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_layout/_layout.jsx +66 -14
- data/app/pb_kits/playbook/pb_layout/docs/_layout_colors.jsx +63 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes.jsx +87 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.jsx +92 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_transparent.jsx +24 -0
- data/app/pb_kits/playbook/pb_layout/docs/example.yml +4 -1
- data/app/pb_kits/playbook/pb_layout/docs/index.js +4 -1
- data/app/pb_kits/playbook/pb_online_status/_online_status.jsx +31 -14
- data/app/pb_kits/playbook/pb_online_status/docs/_online_status_default.jsx +19 -0
- data/app/pb_kits/playbook/pb_online_status/docs/example.yml +3 -3
- data/app/pb_kits/playbook/pb_online_status/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_popover/_popover.jsx +2 -2
- data/app/pb_kits/playbook/pb_popover/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_popover/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_progress_step/_progress_step.html.erb +6 -0
- data/app/pb_kits/playbook/pb_progress_step/_progress_step.jsx +35 -0
- data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +388 -0
- data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.html.erb +23 -0
- data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.jsx +44 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/_description.md +1 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_dark.html.erb +8 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_dark.jsx +18 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.html.erb +33 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.jsx +39 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_vertical.html.erb +33 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_vertical.jsx +40 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/example.yml +12 -0
- data/app/pb_kits/playbook/pb_progress_step/docs/index.js +3 -0
- data/app/pb_kits/playbook/pb_progress_step/progress_step.rb +33 -0
- data/app/pb_kits/playbook/pb_progress_step/progress_step_item.rb +19 -0
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_stat_change/stat_change.rb +1 -1
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.jsx +39 -14
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.jsx +8 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +3 -3
- data/app/pb_kits/playbook/pb_timestamp/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_title_detail/_title_detail.jsx +47 -14
- data/app/pb_kits/playbook/pb_title_detail/docs/_title_detail_default.jsx +26 -0
- data/app/pb_kits/playbook/pb_title_detail/docs/example.yml +3 -3
- data/app/pb_kits/playbook/pb_title_detail/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.html.erb +10 -0
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +105 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb +10 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_white.html.erb +9 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +5 -0
- data/app/pb_kits/playbook/pb_tooltip/index.js +80 -0
- data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +34 -0
- data/app/pb_kits/playbook/tokens/_colors.scss +4 -0
- data/app/pb_kits/playbook/vendor.js +3 -0
- data/lib/playbook/version.rb +1 -1
- metadata +41 -6
- data/app/pb_kits/playbook/pb_layout/_body.jsx +0 -26
- data/app/pb_kits/playbook/pb_layout/_sidebar.jsx +0 -26
- data/app/pb_kits/playbook/pb_layout/docs/_layout_default.jsx +0 -14
- data/app/pb_kits/playbook/pb_popover/docs/_popover_with_button.html.erb +0 -4
@@ -0,0 +1,39 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import ProgressStep from '../_progress_step.jsx'
|
3
|
+
import ProgressStepItem from '../_progress_step_item.jsx'
|
4
|
+
|
5
|
+
const ProgressStepDefault = () => (
|
6
|
+
<div>
|
7
|
+
<ProgressStep icon>
|
8
|
+
<ProgressStepItem status="complete" />
|
9
|
+
<ProgressStepItem status="active" />
|
10
|
+
<ProgressStepItem status="inactive" />
|
11
|
+
</ProgressStep>
|
12
|
+
|
13
|
+
<br />
|
14
|
+
<br />
|
15
|
+
|
16
|
+
<ProgressStep>
|
17
|
+
<ProgressStepItem status="complete" />
|
18
|
+
<ProgressStepItem status="active" />
|
19
|
+
<ProgressStepItem status="inactive" />
|
20
|
+
</ProgressStep>
|
21
|
+
|
22
|
+
<br />
|
23
|
+
<br />
|
24
|
+
|
25
|
+
<ProgressStep>
|
26
|
+
<ProgressStepItem status="complete">
|
27
|
+
{'Child'}
|
28
|
+
</ProgressStepItem>
|
29
|
+
<ProgressStepItem status="active">
|
30
|
+
{'Child'}
|
31
|
+
</ProgressStepItem>
|
32
|
+
<ProgressStepItem status="inactive">
|
33
|
+
{'Child'}
|
34
|
+
</ProgressStepItem>
|
35
|
+
</ProgressStep>
|
36
|
+
</div>
|
37
|
+
)
|
38
|
+
|
39
|
+
export default ProgressStepDefault
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<%= pb_rails("progress_step", props: {orientation: "vertical", icon: true}) do %>
|
2
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "complete"}) do %>
|
3
|
+
<% end %>
|
4
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "active"}) do %>
|
5
|
+
<% end %>
|
6
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "inactive"}) do %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<br />
|
11
|
+
|
12
|
+
<%= pb_rails("progress_step", props: {orientation: "vertical"}) do %>
|
13
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "complete"}) do %>
|
14
|
+
<% end %>
|
15
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "active"}) do %>
|
16
|
+
<% end %>
|
17
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "inactive"}) do %>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<br />
|
22
|
+
|
23
|
+
<%= pb_rails("progress_step", props: {orientation: "vertical"}) do %>
|
24
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "complete"}) do %>
|
25
|
+
Child
|
26
|
+
<% end %>
|
27
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "active"}) do %>
|
28
|
+
Child
|
29
|
+
<% end %>
|
30
|
+
<%= pb_rails("progress_step/progress_step_item", props: {status: "inactive"}) do %>
|
31
|
+
Child
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import ProgressStep from '../_progress_step.jsx'
|
3
|
+
import ProgressStepItem from '../_progress_step_item.jsx'
|
4
|
+
|
5
|
+
const ProgressStepVertical = () => (
|
6
|
+
<div>
|
7
|
+
<ProgressStep
|
8
|
+
icon
|
9
|
+
orientation="vertical"
|
10
|
+
>
|
11
|
+
<ProgressStepItem status="complete" />
|
12
|
+
<ProgressStepItem status="active" />
|
13
|
+
<ProgressStepItem status="inactive" />
|
14
|
+
</ProgressStep>
|
15
|
+
|
16
|
+
<br />
|
17
|
+
|
18
|
+
<ProgressStep orientation="vertical">
|
19
|
+
<ProgressStepItem status="complete" />
|
20
|
+
<ProgressStepItem status="active" />
|
21
|
+
<ProgressStepItem status="inactive" />
|
22
|
+
</ProgressStep>
|
23
|
+
|
24
|
+
<br />
|
25
|
+
|
26
|
+
<ProgressStep orientation="vertical">
|
27
|
+
<ProgressStepItem status="complete">
|
28
|
+
{'Child'}
|
29
|
+
</ProgressStepItem>
|
30
|
+
<ProgressStepItem status="active">
|
31
|
+
{'Child'}
|
32
|
+
</ProgressStepItem>
|
33
|
+
<ProgressStepItem status="inactive">
|
34
|
+
{'Child'}
|
35
|
+
</ProgressStepItem>
|
36
|
+
</ProgressStep>
|
37
|
+
</div>
|
38
|
+
)
|
39
|
+
|
40
|
+
export default ProgressStepVertical
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbProgressStep
|
5
|
+
class ProgressStep
|
6
|
+
include Playbook::Props
|
7
|
+
|
8
|
+
partial "pb_progress_step/progress_step"
|
9
|
+
|
10
|
+
prop :orientation, type: Playbook::Props::Enum,
|
11
|
+
values: %w[vertical horizontal],
|
12
|
+
default: "horizontal"
|
13
|
+
prop :icon, type: Playbook::Props::Boolean,
|
14
|
+
default: false
|
15
|
+
prop :dark, type: Playbook::Props::Boolean,
|
16
|
+
default: false
|
17
|
+
|
18
|
+
def classname
|
19
|
+
generate_classname("pb_progress_step_kit", orientation, icon_class, dark_class)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def icon_class
|
25
|
+
icon === true ? "icon" : nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def dark_class
|
29
|
+
dark === true ? "dark" : nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbProgressStep
|
5
|
+
class ProgressStepItem
|
6
|
+
include Playbook::Props
|
7
|
+
|
8
|
+
partial "pb_progress_step/progress_step_item"
|
9
|
+
|
10
|
+
prop :status, type: Playbook::Props::Enum,
|
11
|
+
values: %w[complete active inactive],
|
12
|
+
default: "inactive"
|
13
|
+
|
14
|
+
def classname
|
15
|
+
generate_classname("pb_progress_step_item_kit", status)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,21 +1,46 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
1
3
|
import React from 'react'
|
2
|
-
import
|
4
|
+
import classnames from 'classnames'
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
import {
|
7
|
+
Caption,
|
8
|
+
} from '../'
|
9
|
+
|
10
|
+
import {
|
11
|
+
buildCss,
|
12
|
+
buildDataProps,
|
13
|
+
} from '../utilities/props'
|
8
14
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
</div>
|
15
|
-
)
|
16
|
-
}
|
15
|
+
type TimestampProps = {
|
16
|
+
id?: String,
|
17
|
+
data?: object,
|
18
|
+
className?: String,
|
19
|
+
text?: String,
|
17
20
|
}
|
18
21
|
|
19
|
-
Timestamp
|
22
|
+
const Timestamp = ({
|
23
|
+
id,
|
24
|
+
className,
|
25
|
+
data = {},
|
26
|
+
text,
|
27
|
+
}: TimestampProps) => {
|
28
|
+
const dataProps = buildDataProps(data)
|
29
|
+
const pbCss = buildCss('pb_timestamp_kit')
|
30
|
+
|
31
|
+
return (
|
32
|
+
<div
|
33
|
+
{...dataProps}
|
34
|
+
className={classnames(className, pbCss)}
|
35
|
+
id={id}
|
36
|
+
>
|
37
|
+
<Caption
|
38
|
+
size="xs"
|
39
|
+
tag="span"
|
40
|
+
text={text}
|
41
|
+
/>
|
42
|
+
</div>
|
43
|
+
)
|
44
|
+
}
|
20
45
|
|
21
46
|
export default Timestamp
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default as TimestampDefault } from './_timestamp_default.jsx'
|
@@ -1,21 +1,54 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
1
3
|
import React from 'react'
|
2
|
-
import
|
4
|
+
import classnames from 'classnames'
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
}
|
6
|
+
import {
|
7
|
+
Body,
|
8
|
+
Title,
|
9
|
+
} from '../'
|
10
|
+
|
11
|
+
import {
|
12
|
+
buildCss,
|
13
|
+
buildDataProps,
|
14
|
+
} from '../utilities/props'
|
8
15
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
}
|
16
|
+
type TitleDetailProps = {
|
17
|
+
align?: 'left' | 'center' | 'right',
|
18
|
+
className?: String,
|
19
|
+
data?: object,
|
20
|
+
detail: String,
|
21
|
+
id?: String,
|
22
|
+
title: String,
|
17
23
|
}
|
18
24
|
|
19
|
-
TitleDetail
|
25
|
+
const TitleDetail = ({
|
26
|
+
align = 'left',
|
27
|
+
className,
|
28
|
+
data = {},
|
29
|
+
detail,
|
30
|
+
id,
|
31
|
+
title,
|
32
|
+
}: TitleDetailProps) => {
|
33
|
+
const dataProps = buildDataProps(data)
|
34
|
+
const pbCss = buildCss('pb_title_detail_kit', align)
|
35
|
+
|
36
|
+
return (
|
37
|
+
<div
|
38
|
+
{...dataProps}
|
39
|
+
className={classnames(className, pbCss)}
|
40
|
+
id={id}
|
41
|
+
>
|
42
|
+
<Title
|
43
|
+
size={4}
|
44
|
+
text={title}
|
45
|
+
/>
|
46
|
+
<Body
|
47
|
+
color="light"
|
48
|
+
text={detail}
|
49
|
+
/>
|
50
|
+
</div>
|
51
|
+
)
|
52
|
+
}
|
20
53
|
|
21
54
|
export default TitleDetail
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { TitleDetail } from '../../'
|
3
|
+
|
4
|
+
const TitleDetailDefault = () => (
|
5
|
+
<div>
|
6
|
+
<TitleDetail
|
7
|
+
detail="Commits data and history"
|
8
|
+
title="Email Notifications"
|
9
|
+
/>
|
10
|
+
|
11
|
+
<TitleDetail
|
12
|
+
align="center"
|
13
|
+
detail="Commits data and history"
|
14
|
+
title="Email Notifications"
|
15
|
+
/>
|
16
|
+
|
17
|
+
<TitleDetail
|
18
|
+
align="right"
|
19
|
+
detail="Commits data and history"
|
20
|
+
title="Email Notifications"
|
21
|
+
/>
|
22
|
+
|
23
|
+
</div>
|
24
|
+
)
|
25
|
+
|
26
|
+
export default TitleDetailDefault
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default as TitleDetailDefault } from './_title_detail_default.jsx'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= content_tag(:div,
|
2
|
+
id: object.id,
|
3
|
+
data: object.data,
|
4
|
+
class: object.classname) do %>
|
5
|
+
<div class="tooltip_tooltip" id="<%= object.tooltip_id %>" role="tooltip">
|
6
|
+
<%= capture(&object.children) %>
|
7
|
+
<div class="arrow" id="<%= object.tooltip_id %>-arrow"></div>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<% end %>
|
@@ -0,0 +1,105 @@
|
|
1
|
+
@import "../tokens/positioning";
|
2
|
+
@import "../tokens/colors";
|
3
|
+
|
4
|
+
@keyframes fadeIn {
|
5
|
+
from {
|
6
|
+
opacity: 0;
|
7
|
+
}
|
8
|
+
|
9
|
+
to {
|
10
|
+
opacity: 1;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
@keyframes fadeOut {
|
14
|
+
from {
|
15
|
+
opacity: 1;
|
16
|
+
}
|
17
|
+
|
18
|
+
to {
|
19
|
+
opacity: 0;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
[class^="pb_tooltip_kit"] {
|
24
|
+
.tooltip_tooltip {
|
25
|
+
display: none;
|
26
|
+
opacity: 0;
|
27
|
+
left: 0;
|
28
|
+
animation-name: fadeIn;
|
29
|
+
animation-duration: 150ms;
|
30
|
+
animation-timing-function: linear;
|
31
|
+
animation-fill-mode: forwards;
|
32
|
+
|
33
|
+
&.flipped {
|
34
|
+
margin-top: 15px;
|
35
|
+
.arrow {
|
36
|
+
top: -35%;
|
37
|
+
border-color: transparent transparent $white transparent;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
&.react {
|
42
|
+
.arrow {
|
43
|
+
top: 78%;
|
44
|
+
}
|
45
|
+
&.flipped {
|
46
|
+
.arrow {
|
47
|
+
top: -8%;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
.arrow {
|
53
|
+
content: " ";
|
54
|
+
position: absolute;
|
55
|
+
top: 100%;
|
56
|
+
left: 50%;
|
57
|
+
border-color: $white transparent transparent transparent;
|
58
|
+
border-style: solid;
|
59
|
+
border-width: 10px;
|
60
|
+
margin-bottom: 50px;
|
61
|
+
margin-left: -10px;
|
62
|
+
}
|
63
|
+
&.show {
|
64
|
+
opacity: 1;
|
65
|
+
display: block;
|
66
|
+
z-index: $z_9;
|
67
|
+
margin-bottom: $space_sm;
|
68
|
+
background-color: $white;
|
69
|
+
padding: $space_xs $space_sm $space_xs $space_sm;
|
70
|
+
box-shadow: $shadow_deeper;
|
71
|
+
border-radius: $border_rad_light;
|
72
|
+
|
73
|
+
&.fade_out {
|
74
|
+
animation-name: fadeOut;
|
75
|
+
animation-duration: 150ms;
|
76
|
+
animation-timing-function: linear;
|
77
|
+
animation-fill-mode: forwards;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
&[class*=_dark]{
|
82
|
+
.tooltip_tooltip{
|
83
|
+
color: $white;
|
84
|
+
background-color: rgba($black, $opacity_9);
|
85
|
+
|
86
|
+
|
87
|
+
&.show {
|
88
|
+
}
|
89
|
+
.arrow {
|
90
|
+
border-color: $black transparent transparent transparent;
|
91
|
+
opacity: $opacity_9;
|
92
|
+
}
|
93
|
+
&.flipped {
|
94
|
+
.arrow {
|
95
|
+
border-color: transparent transparent $black transparent;
|
96
|
+
opacity: $opacity_9;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
.tooltip_tooltip.top {
|
104
|
+
padding: ($space_xs - 3px) 0;
|
105
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import PbEnhancedElement from '../pb_enhanced_element'
|
2
|
+
import Popper from 'popper.js'
|
3
|
+
|
4
|
+
const TOOLTIP_OFFSET = '0,0'
|
5
|
+
const TOOLTIP_TIMEOUT = 250
|
6
|
+
|
7
|
+
export default class PbTooltip extends PbEnhancedElement {
|
8
|
+
static get selector() {
|
9
|
+
return '[data-pb-tooltip-kit]'
|
10
|
+
}
|
11
|
+
|
12
|
+
connect() {
|
13
|
+
this.popper = new Popper(this.triggerElement, this.tooltip, {
|
14
|
+
placement: this.position,
|
15
|
+
modifiers: {
|
16
|
+
offset: {
|
17
|
+
offset: TOOLTIP_OFFSET,
|
18
|
+
},
|
19
|
+
arrow: {
|
20
|
+
element: `#${this.tooltipId}-arrow`,
|
21
|
+
},
|
22
|
+
},
|
23
|
+
onUpdate: (p) => {
|
24
|
+
p.instance.popper.classList.toggle('flipped', p.flipped)
|
25
|
+
},
|
26
|
+
})
|
27
|
+
|
28
|
+
this.tooltip.addEventListener('mouseleave', () => {
|
29
|
+
this.hideTooltip()
|
30
|
+
})
|
31
|
+
|
32
|
+
this.triggerElement.addEventListener('mouseenter', () => {
|
33
|
+
this.mouseenterTimeout = setTimeout(() => {
|
34
|
+
this.popper.scheduleUpdate()
|
35
|
+
this.showTooltip()
|
36
|
+
}, TOOLTIP_TIMEOUT)
|
37
|
+
|
38
|
+
this.triggerElement.addEventListener('mouseleave', (event) => {
|
39
|
+
clearTimeout(this.mouseenterTimeout)
|
40
|
+
if (event.toElement.closest(`#${this.tooltipId}`) !== this.tooltip) {
|
41
|
+
setTimeout(() => {
|
42
|
+
this.hideTooltip()
|
43
|
+
}, 0)
|
44
|
+
}
|
45
|
+
}, { once: true })
|
46
|
+
})
|
47
|
+
}
|
48
|
+
|
49
|
+
showTooltip() {
|
50
|
+
this.tooltip.classList.add('show')
|
51
|
+
}
|
52
|
+
|
53
|
+
hideTooltip() {
|
54
|
+
this.tooltip.classList.remove('show')
|
55
|
+
}
|
56
|
+
|
57
|
+
toggleTooltip() {
|
58
|
+
this.tooltip.classList.toggle('show')
|
59
|
+
}
|
60
|
+
|
61
|
+
get triggerElement() {
|
62
|
+
return this._triggerElement = (this._triggerElement || document.querySelector(`#${this.triggerElementId}`))
|
63
|
+
}
|
64
|
+
|
65
|
+
get tooltip() {
|
66
|
+
return this._tooltip = (this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
|
67
|
+
}
|
68
|
+
|
69
|
+
get position() {
|
70
|
+
return this.element.dataset.pbTooltipPosition
|
71
|
+
}
|
72
|
+
|
73
|
+
get triggerElementId() {
|
74
|
+
return this.element.dataset.pbTooltipTriggerElementId
|
75
|
+
}
|
76
|
+
|
77
|
+
get tooltipId() {
|
78
|
+
return this.element.dataset.pbTooltipTooltipId
|
79
|
+
}
|
80
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbTooltip
|
5
|
+
class Tooltip
|
6
|
+
include Playbook::Props
|
7
|
+
partial "pb_tooltip/tooltip"
|
8
|
+
|
9
|
+
prop :position
|
10
|
+
prop :trigger_element_id
|
11
|
+
prop :tooltip_id
|
12
|
+
prop :dark, type: Playbook::Props::Boolean,
|
13
|
+
default: false
|
14
|
+
|
15
|
+
def classname
|
16
|
+
generate_classname("pb_tooltip_kit", dark_class)
|
17
|
+
end
|
18
|
+
|
19
|
+
def data
|
20
|
+
Hash(values[:data]).merge(
|
21
|
+
pb_tooltip_kit: true,
|
22
|
+
pb_tooltip_position: position,
|
23
|
+
pb_tooltip_trigger_element_id: trigger_element_id,
|
24
|
+
pb_tooltip_tooltip_id: tooltip_id,
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def dark_class
|
30
|
+
dark ? "dark" : nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|