playbook_ui 11.2.7 → 11.3.0.pre.alpha1

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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/index.js +1 -0
  3. data/app/pb_kits/playbook/pb_collapsible/{_collapsible.jsx → _collapsible.tsx} +4 -6
  4. data/app/pb_kits/playbook/pb_collapsible/child_kits/{CollapsibleContent.jsx → CollapsibleContent.tsx} +3 -5
  5. data/app/pb_kits/playbook/pb_collapsible/child_kits/{CollapsibleMain.jsx → CollapsibleMain.tsx} +4 -4
  6. data/app/pb_kits/playbook/pb_collapsible/{context.js → context.ts} +0 -0
  7. data/app/pb_kits/playbook/pb_collapsible/types.d.ts +1 -0
  8. data/app/pb_kits/playbook/pb_currency/_currency.scss +2 -1
  9. data/app/pb_kits/playbook/pb_distribution_bar/{_distribution_bar.jsx → _distribution_bar.tsx} +5 -7
  10. data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_custom_colors.jsx +1 -1
  11. data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_default.jsx +1 -1
  12. data/app/pb_kits/playbook/pb_list/list.rb +6 -8
  13. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +49 -6
  14. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +144 -0
  15. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default_react.jsx +59 -0
  16. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default_react.md +5 -0
  17. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon.erb +10 -0
  18. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon.jsx +52 -0
  19. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon.md +1 -0
  20. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.jsx +40 -0
  21. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.md +1 -0
  22. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_margin.jsx +39 -0
  23. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_margin.md +3 -0
  24. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_with_icon_circle.html.erb +1 -1
  25. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +7 -1
  26. data/app/pb_kits/playbook/pb_tooltip/docs/index.js +4 -0
  27. data/app/pb_kits/playbook/pb_tooltip/tooltip.test.jsx +50 -0
  28. data/app/pb_kits/playbook/playbook-doc.js +2 -0
  29. data/dist/reset.css +60 -1
  30. data/lib/playbook/version.rb +2 -2
  31. metadata +22 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 289c5c7e82ae25efba0297b6033fbe734b244ec00e9a947842189b31018fcc23
4
- data.tar.gz: 502b5c425611bb6f409d9e45ca874d0482c60b70688f13a7197c6fe81b06f191
3
+ metadata.gz: c0f967a874bbc5da6ef545ed133328666b04dab22fcbf922340c0ba605289c21
4
+ data.tar.gz: 58d5fec99769fd4351f47b17f51acb8f08f921e32e7fe7fb06c0d0dd8e0fc2a7
5
5
  SHA512:
6
- metadata.gz: 6020feee31203a880a9884498f893ea2b1d847581da2ee7def63041f9d0282ff8c70ad888fde395abbf0c7f4b3f314d363bc1d35a1f00acb30e425c0826e882c
7
- data.tar.gz: 143e9cc646e3d64c93142760f1613a293a72166baf02d9413b70ae0a365aa9437ffd944be1897f251aca21476c9967829d150a898bef402ae5a802997c32b26a
6
+ metadata.gz: 7e0f4f113b1ab02fab3e4569b8486406fa36c002dd383daa38c88db267070af2704b587931b22bb62133fbc23b7d2e0f375960627e591f0bd5412dca2dcc4c3e
7
+ data.tar.gz: 2935e5481d78744eb0b81d5acc4f7934407433545c2f784819275889c3b213da422d12bd1fba5b7ef53680089ce381932b7aa739f7b164128d2aa0b2e973c3da
@@ -98,6 +98,7 @@ export { default as Title } from './pb_title/_title'
98
98
  export { default as TitleCount } from './pb_title_count/_title_count'
99
99
  export { default as TitleDetail } from './pb_title_detail/_title_detail'
100
100
  export { default as Toggle } from './pb_toggle/_toggle'
101
+ export { default as Tooltip } from './pb_tooltip/_tooltip'
101
102
  export { default as TreemapChart } from './pb_treemap_chart/_treemap_chart'
102
103
  export { default as Typeahead } from './pb_typeahead/_typeahead'
103
104
  export { default as User } from './pb_user/_user'
@@ -1,7 +1,4 @@
1
- /* @flow */
2
-
3
1
  import React, { useState } from 'react'
4
-
5
2
  import classnames from 'classnames'
6
3
 
7
4
  import { globalProps } from '../utilities/globalProps'
@@ -12,8 +9,8 @@ import CollapsibleMain from './child_kits/CollapsibleMain'
12
9
  import CollapsibleContext from './context'
13
10
 
14
11
  type CollapsibleProps = {
15
- children: CollapsibleMain | CollapsibleContent | ReactNode,
16
- aria?: object,
12
+ children?: JSX.Element | [],
13
+ aria?: {[key: string]: string},
17
14
  className?: string,
18
15
  collapsed?: boolean,
19
16
  data?: object,
@@ -21,6 +18,7 @@ type CollapsibleProps = {
21
18
  padding?: string,
22
19
  }
23
20
 
21
+
24
22
  const useCollapsible = (initial = false) => {
25
23
  const [collapsed, setCollapsed] = useState(initial)
26
24
 
@@ -41,7 +39,7 @@ const Collapsible = ({
41
39
  ...props
42
40
  }: CollapsibleProps) => {
43
41
  const [isCollapsed, collapse] = useCollapsible(collapsed)
44
- const CollapsibleParent = React.Children.toArray(children)
42
+ const CollapsibleParent = React.Children.toArray(children) as JSX.Element[]
45
43
 
46
44
  if (CollapsibleParent.length !== 2) {
47
45
  throw new Error('Collapsible requires <CollapsibleMain> and <CollapsibleContent> to function properly.')
@@ -1,5 +1,3 @@
1
- /* @flow */
2
-
3
1
  import classnames from 'classnames'
4
2
  import React, { useContext } from 'react'
5
3
  import AnimateHeight from 'react-animate-height'
@@ -8,8 +6,8 @@ import { globalProps } from '../../utilities/globalProps'
8
6
 
9
7
  import CollapsibleContext from '../context'
10
8
 
11
- type CollapsibleContentProps = {
12
- children: array<React.ReactNode> | React.ReactNode | string,
9
+ export type CollapsibleContentProps = {
10
+ children?: React.ReactNode[] | React.ReactNode | string,
13
11
  className?: string,
14
12
  padding?: string,
15
13
  }
@@ -20,7 +18,7 @@ const CollapsibleContent = ({
20
18
  padding = 'md',
21
19
  ...props
22
20
  }: CollapsibleContentProps) => {
23
- const context = useContext(CollapsibleContext)
21
+ const context: {[key: string]: boolean | string} = useContext(CollapsibleContext)
24
22
  const contentCSS = buildCss('pb_collapsible_content_kit')
25
23
  const contentSpacing = globalProps(props, { padding })
26
24
 
@@ -1,4 +1,3 @@
1
- /* @flow */
2
1
 
3
2
  import classnames from 'classnames'
4
3
  import React, { useContext } from 'react'
@@ -10,13 +9,14 @@ import FlexItem from '../../pb_flex/_flex_item'
10
9
  import CollapsibleContext from '../context'
11
10
 
12
11
  type CollapsibleMainProps = {
13
- children: array<React.ReactNode> | React.ReactNode,
12
+ children: React.ReactNode[] | React.ReactNode,
14
13
  className?: string,
15
14
  padding?: string,
15
+ cursor?: string
16
16
  }
17
17
 
18
18
  type IconProps = {
19
- collapsed: boolean
19
+ collapsed: boolean | (()=> void)
20
20
  }
21
21
 
22
22
  const Icon = ({ collapsed }: IconProps) => {
@@ -40,7 +40,7 @@ const CollapsibleMain = ({
40
40
 
41
41
  ...props
42
42
  }: CollapsibleMainProps) => {
43
- const context = useContext(CollapsibleContext)
43
+ const context: {[key: string]: (()=> void)} | boolean = useContext(CollapsibleContext)
44
44
  const mainCSS = buildCss('pb_collapsible_main_kit')
45
45
  const mainSpacing = globalProps(props, { cursor, padding })
46
46
 
@@ -0,0 +1 @@
1
+ declare module 'react-animate-height'
@@ -23,6 +23,7 @@
23
23
  }
24
24
  [class^=pb_currency_wrapper] {
25
25
  display: flex;
26
+ align-items: baseline;
26
27
 
27
28
  &[class*=_deemphasized] [class^=pb_body_kit][class*=_light] {
28
29
  color: $text_lt_default;
@@ -48,7 +49,7 @@
48
49
 
49
50
  & > [class*=dollar_sign] {
50
51
  display: flex;
51
- align-items: flex-start;
52
+ align-self: flex-start;
52
53
  }
53
54
  & > [class*=unit] {
54
55
  display: flex;
@@ -1,26 +1,24 @@
1
- /* @flow */
2
-
3
1
  import React from 'react'
4
2
  import classnames from 'classnames'
5
3
  import { globalProps } from '../utilities/globalProps'
6
4
 
7
5
  type DistributionBarProps = {
8
6
  className?: string,
9
- colors: array,
7
+ colors: [],
10
8
  data?: string,
11
9
  id?: string,
12
10
  size?: "lg" | "sm",
13
- widths?: array<number>,
11
+ widths?: number[],
14
12
  }
15
13
 
16
- const normalizeCharacters = (widths) => {
14
+ const normalizeCharacters = (widths: number[]) => {
17
15
  return widths.map((width) => {
18
16
  return parseInt(width.toString().replace(/[^0-9.]/gi, ''))
19
17
  })
20
18
  }
21
19
 
22
- const barValues = (normalizedValues, colors) => {
23
- const arrSum = (value) => value.reduce((a, b) => a + b, 0)
20
+ const barValues = (normalizedValues: number[], colors: []) => {
21
+ const arrSum = (value: number[]) => value.reduce((a, b) => a + b, 0)
24
22
  const widthSum = arrSum(normalizedValues)
25
23
  return normalizedValues.map((value, i) => {
26
24
  return (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DistributionBar from '../_distribution_bar.jsx'
2
+ import DistributionBar from '../_distribution_bar'
3
3
 
4
4
  const DistributionBarCustomColors = (props) => {
5
5
  return (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DistributionBar from '../_distribution_bar.jsx'
2
+ import DistributionBar from '../_distribution_bar'
3
3
 
4
4
  const DistributionBarDefault = (props) => {
5
5
  return (
@@ -19,14 +19,12 @@ module Playbook
19
19
  prop :tabindex
20
20
 
21
21
  def list_classname
22
- [
23
- "pb_list_kit",
24
- xpadding_class,
25
- borderless_class,
26
- dark_class,
27
- size_class,
28
- layout_class,
29
- ].compact.join("_")
22
+ generate_classname("pb_list_kit",
23
+ xpadding_class,
24
+ borderless_class,
25
+ dark_class,
26
+ size_class,
27
+ layout_class)
30
28
  end
31
29
 
32
30
  def ordered_class
@@ -23,6 +23,7 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
23
23
  }
24
24
 
25
25
  [class^="pb_tooltip_kit"] {
26
+ ~ .tooltip_tooltip,
26
27
  .tooltip_tooltip {
27
28
  display: block;
28
29
  opacity: 0;
@@ -52,15 +53,42 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
52
53
  border-width: 10px;
53
54
  margin-bottom: 50px;
54
55
  }
56
+
57
+ &.visible,
55
58
  &.show {
56
- opacity: 1;
57
59
  z-index: $z_9;
58
- margin-bottom: $space_sm;
59
- background-color: $white;
60
60
  padding: $space_xs $space_sm;
61
61
  box-shadow: $shadow_deeper;
62
62
  border-radius: $border_rad_light;
63
+ }
63
64
 
65
+ // react only
66
+ &.visible {
67
+ color: $white;
68
+ background-color: rgba($black, $opacity_9);
69
+ &.right {
70
+ box-shadow: -8px 0 28px 0 $tooltip_shadow;
71
+ }
72
+ &.bottom {
73
+ box-shadow: 0 -12px 28px 0 $tooltip_shadow;
74
+ }
75
+ &.left {
76
+ box-shadow: 8px 0 28px 0 $tooltip_shadow;
77
+ }
78
+ // react arrow
79
+ .arrow_bg {
80
+ width: 10px;
81
+ height: 10px;
82
+ background-color: rgba($black, $opacity_9);
83
+ transform: rotate(45deg);
84
+ }
85
+ }
86
+
87
+ //rails only
88
+ &.show {
89
+ opacity: 1;
90
+ margin-bottom: $space_sm;
91
+ background-color: $white;
64
92
  &.fade_out {
65
93
  animation-name: fadeOut;
66
94
  animation-duration: 150ms;
@@ -69,14 +97,29 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
69
97
  }
70
98
  }
71
99
  }
100
+
101
+ &.dark,
72
102
  &[class*=_dark]{
73
- .tooltip_tooltip{
74
- color: $white;
75
- background-color: rgba($black, $opacity_9);
103
+ ~.tooltip_tooltip,
104
+ .tooltip_tooltip {
105
+ //react
106
+ &.visible {
107
+ color: $charcoal;
108
+ background-color: $white;
109
+ }
110
+ //rails
111
+ &.show {
112
+ color: $white;
113
+ background-color: rgba($black, $opacity_9);
114
+ }
76
115
  .arrow {
77
116
  border-color: $black transparent transparent transparent;
78
117
  opacity: $opacity_9;
79
118
  }
119
+ // react arrow
120
+ .arrow_bg {
121
+ background-color: $white;
122
+ }
80
123
  &.flipped {
81
124
  .arrow {
82
125
  border-color: transparent transparent $black transparent;
@@ -0,0 +1,144 @@
1
+ /* @flow*/
2
+
3
+ import React, { useRef, useState } from "react"
4
+ import classnames from "classnames"
5
+ import {
6
+ Placement,
7
+ offset,
8
+ arrow,
9
+ shift,
10
+ useFloating,
11
+ useInteractions,
12
+ useHover,
13
+ flip,
14
+ safePolygon,
15
+ } from "@floating-ui/react-dom-interactions"
16
+ import { GlobalProps, globalProps } from "../utilities/globalProps"
17
+ import { buildAriaProps, buildDataProps } from "../utilities/props"
18
+ import Flex from "../pb_flex/_flex"
19
+
20
+ type TooltipProps = {
21
+ aria?: { [key: string]: string },
22
+ data?: { [key: string]: string },
23
+ text: string,
24
+ icon?: string,
25
+ interaction?: boolean,
26
+ placement?: Placement,
27
+ children: JSX.Element,
28
+ zIndex?: Pick<GlobalProps, "ZIndex">,
29
+ } & GlobalProps
30
+
31
+ const Tooltip = (props: TooltipProps) => {
32
+ const {
33
+ aria = {},
34
+ children,
35
+ data = {},
36
+ icon = null,
37
+ interaction = false,
38
+ text,
39
+ placement: preferredPlacement = "top",
40
+ zIndex,
41
+ ...rest
42
+ } = props
43
+
44
+ console.log(rest)
45
+
46
+ const dataProps: { [key: string]: any } = buildDataProps(data)
47
+ const ariaProps: { [key: string]: any } = buildAriaProps(aria)
48
+
49
+ const css = classnames(globalProps({...rest}))
50
+ const [open, setOpen] = useState(false)
51
+ const arrowRef = useRef(null)
52
+ const {
53
+ x,
54
+ y,
55
+ reference,
56
+ floating,
57
+ strategy,
58
+ context,
59
+ placement,
60
+ middlewareData: { arrow: { x: arrowX, y: arrowY } = {} },
61
+ } = useFloating({
62
+ placement: preferredPlacement,
63
+ open,
64
+ onOpenChange(open) {
65
+ setOpen(open)
66
+ },
67
+ middleware: [
68
+ offset(10),
69
+ shift(),
70
+ flip({
71
+ fallbackPlacements: ["top", "right", "bottom", "left"],
72
+ fallbackStrategy: "initialPlacement",
73
+ flipAlignment: false,
74
+ }),
75
+ arrow({
76
+ element: arrowRef,
77
+ }),
78
+ ],
79
+ })
80
+
81
+ const { getFloatingProps } = useInteractions([
82
+ useHover(context, {
83
+ handleClose: interaction ? safePolygon({
84
+ blockPointerEvents: false
85
+ }) : null,
86
+ })
87
+ ])
88
+
89
+ const staticSide = {
90
+ top: "bottom",
91
+ right: "left",
92
+ bottom: "top",
93
+ left: "right",
94
+ }[placement.split("-")[0]]
95
+
96
+ return (
97
+ <>
98
+ <div
99
+ ref={reference}
100
+ className={`pb_tooltip_kit ${css}`}
101
+ style={{ display: "inline-flex" }}
102
+ role="tooltip_trigger"
103
+ {...ariaProps}
104
+ {...dataProps}
105
+ >
106
+ {children}
107
+ </div>
108
+ {open && (
109
+ <div
110
+ {...getFloatingProps({
111
+ role: "tooltip",
112
+ ref: floating,
113
+ className: `tooltip_tooltip ${placement} visible`,
114
+ style: {
115
+ position: strategy,
116
+ top: y ?? 0,
117
+ left: x ?? 0,
118
+ zIndex: zIndex ?? 0,
119
+ },
120
+ })}
121
+ >
122
+ <Flex gap="xs" align="center">
123
+ {icon && (
124
+ <i className={`pb_icon_kit far fa-${icon} fa-fw`} />
125
+ )}
126
+ {text}
127
+ </Flex>
128
+ <div
129
+ ref={arrowRef}
130
+ className="arrow_bg"
131
+ style={{
132
+ position: strategy,
133
+ left: arrowX != null ? `${arrowX}px` : "",
134
+ top: arrowY != null ? `${arrowY}px` : "",
135
+ [staticSide]: "-5px",
136
+ }}
137
+ />
138
+ </div>
139
+ )}
140
+ </>
141
+ )
142
+ }
143
+
144
+ export default Tooltip
@@ -0,0 +1,59 @@
1
+ // @flow
2
+
3
+ import React from 'react'
4
+ import { Tooltip, Flex, FlexItem } from '../..';
5
+
6
+ const TooltipDefaultReact = (props) => {
7
+
8
+ return (
9
+ <Flex
10
+ flexDirection='row'
11
+ gap='md'
12
+ justifyContent='center'
13
+ wrap
14
+ >
15
+ <FlexItem>
16
+ <Tooltip
17
+ placement='top'
18
+ text="Whoa. I'm a Tooltip"
19
+ zIndex={10}
20
+ {...props}
21
+ >
22
+ {'Hover here (Top)'}
23
+ </Tooltip>
24
+ </FlexItem>
25
+ <FlexItem>
26
+ <Tooltip
27
+ placement='bottom'
28
+ text="Whoa. I'm a Tooltip"
29
+ zIndex={10}
30
+ {...props}
31
+ >
32
+ {'Hover here (Bottom)'}
33
+ </Tooltip>
34
+ </FlexItem>
35
+ <FlexItem>
36
+ <Tooltip
37
+ placement='right'
38
+ text="Whoa. I'm a Tooltip"
39
+ zIndex={10}
40
+ {...props}
41
+ >
42
+ {'Hover here (Right)'}
43
+ </Tooltip>
44
+ </FlexItem>
45
+ <FlexItem>
46
+ <Tooltip
47
+ placement='left'
48
+ text="Whoa. I'm a Tooltip"
49
+ zIndex={10}
50
+ {...props}
51
+ >
52
+ {'Hover here (Left)'}
53
+ </Tooltip>
54
+ </FlexItem>
55
+ </Flex>
56
+ )
57
+ }
58
+
59
+ export default TooltipDefaultReact
@@ -0,0 +1,5 @@
1
+ You can define the tooltip placement sending the prop `placement` with one of the available options: `top | right | bottom | left`.
2
+
3
+ If you don't specify a desired `placement`, the component will automatically choose the one that fits better.
4
+
5
+ If the desired `placement` doesn't fit on screen, the component will automatically switch to the one that fits better.
@@ -0,0 +1,10 @@
1
+ <%= pb_rails("icon_circle", props: { icon: "paper-plane", id: "result-1-sample-email-link" }) %>
2
+
3
+ <%= pb_rails("tooltip", props: {
4
+ trigger_element_id: "result-1-sample-email-link",
5
+ tooltip_id: "sample-email-tooltip-result-1",
6
+ position: "top",
7
+ dark: true
8
+ }) do %>
9
+ Send Email
10
+ <% end %>
@@ -0,0 +1,52 @@
1
+ // @flow
2
+
3
+ import React from 'react'
4
+ import { Tooltip, Button, Flex } from '../..'
5
+
6
+ const TooltipIcon = (props) => {
7
+ return (
8
+ <Flex flexDirection='row'
9
+ gap='md'
10
+ wrap
11
+ >
12
+ <Tooltip
13
+ icon='paper-plane'
14
+ placement='top'
15
+ text='Send Email'
16
+ zIndex={10}
17
+ {...props}
18
+ >
19
+ <Button text='Tooltip With Icon' />
20
+ </Tooltip>
21
+ <Tooltip
22
+ icon='paper-plane'
23
+ placement='bottom'
24
+ text='Send Email'
25
+ zIndex={10}
26
+ {...props}
27
+ >
28
+ <Button text='Tooltip With Icon' />
29
+ </Tooltip>
30
+ <Tooltip
31
+ icon='paper-plane'
32
+ placement='right'
33
+ text='Send Email'
34
+ zIndex={10}
35
+ {...props}
36
+ >
37
+ <Button text='Tooltip With Icon' />
38
+ </Tooltip>
39
+ <Tooltip
40
+ icon='paper-plane'
41
+ placement='left'
42
+ text='Send Email'
43
+ zIndex={10}
44
+ {...props}
45
+ >
46
+ <Button text='Tooltip With Icon' />
47
+ </Tooltip>
48
+ </Flex>
49
+ )
50
+ }
51
+
52
+ export default TooltipIcon
@@ -0,0 +1 @@
1
+ Set the prop `icon` with the desired icon to display inside the tooltip.
@@ -0,0 +1,40 @@
1
+ // @flow
2
+
3
+ import React from 'react'
4
+ import { Tooltip, Button, Flex, FlexItem } from '../..';
5
+
6
+ const TooltipInteraction = (props) => {
7
+
8
+ return (
9
+ <Flex
10
+ flexDirection='row'
11
+ gap='md'
12
+ justifyContent='center'
13
+ wrap
14
+ >
15
+ <FlexItem>
16
+ <Tooltip
17
+ interaction
18
+ placement='top'
19
+ text="You can copy me"
20
+ zIndex={10}
21
+ {...props}
22
+ >
23
+ <Button text="With Interaction"/>
24
+ </Tooltip>
25
+ </FlexItem>
26
+ <FlexItem>
27
+ <Tooltip
28
+ placement='top'
29
+ text="I'm just a regular tooltip"
30
+ zIndex={10}
31
+ {...props}
32
+ >
33
+ <Button text="No Interaction"/>
34
+ </Tooltip>
35
+ </FlexItem>
36
+ </Flex>
37
+ )
38
+ }
39
+
40
+ export default TooltipInteraction
@@ -0,0 +1 @@
1
+ Set the prop `interaction` as `true` for cases that require users to copy the content inside the tooltip.
@@ -0,0 +1,39 @@
1
+ // @flow
2
+
3
+ import React from 'react'
4
+ import { Tooltip, Flex, CircleIconButton } from '../..'
5
+
6
+ const TooltipMargin = (props) => {
7
+ return (
8
+ <Flex
9
+ flexDirection='row'
10
+ justifyContent='center'
11
+ wrap
12
+ >
13
+ <Tooltip
14
+ margin='md'
15
+ placement='top'
16
+ text='Send Email'
17
+ zIndex={10}
18
+ {...props}
19
+ >
20
+ <CircleIconButton
21
+ icon='paper-plane'
22
+ />
23
+ </Tooltip>
24
+ <Tooltip
25
+ margin='md'
26
+ placement='top'
27
+ text='Send Email'
28
+ zIndex={10}
29
+ {...props}
30
+ >
31
+ <CircleIconButton
32
+ icon='paper-plane'
33
+ />
34
+ </Tooltip>
35
+ </Flex>
36
+ )
37
+ }
38
+
39
+ export default TooltipMargin
@@ -0,0 +1,3 @@
1
+ You should set `margin` in the `tooltip` component itself. If you add this prop to the child, it will cause the tooltip to be pulled away from the trigger.
2
+
3
+ It is not recommended to set `padding` in the `tooltip` nor its child, doing so will cause it to be pulled away from its trigger element.
@@ -7,4 +7,4 @@
7
7
  dark: true
8
8
  }) do %>
9
9
  Send Email
10
- <% end %>
10
+ <% end %>
@@ -4,4 +4,10 @@ examples:
4
4
  - tooltip_default: Default
5
5
  - tooltip_selectors: Using Common Selectors
6
6
  - tooltip_white: White
7
- - tooltip_with_icon_circle: Icon Circle Tooptip
7
+ - tooltip_with_icon_circle: Icon Circle Tooltip
8
+
9
+ react:
10
+ - tooltip_default_react: Default
11
+ - tooltip_interaction: Content Interaction
12
+ - tooltip_margin: Margin
13
+ - tooltip_icon: Tooltip with Icon
@@ -0,0 +1,4 @@
1
+ export { default as TooltipDefaultReact } from './_tooltip_default_react'
2
+ export { default as TooltipInteraction } from './_tooltip_interaction'
3
+ export { default as TooltipMargin } from './_tooltip_margin'
4
+ export { default as TooltipIcon } from './_tooltip_icon'
@@ -0,0 +1,50 @@
1
+ import React from "react";
2
+ import { cleanup, render, screen, fireEvent } from "../utilities/test-utils";
3
+ import { Button, Tooltip } from "..";
4
+
5
+ function TooltipTest() {
6
+ const text = "this is a text",
7
+ placement = "top",
8
+ triggerText = "hover me",
9
+ zIndex = "10";
10
+
11
+ return (
12
+ <Tooltip
13
+ data={{ testid: "primary-test" }}
14
+ placement={placement}
15
+ text={text}
16
+ zIndex={zIndex}
17
+ >
18
+ <Button text={triggerText} />
19
+ </Tooltip>
20
+ );
21
+ }
22
+
23
+ test("renders the component", () => {
24
+ render(<TooltipTest />);
25
+
26
+ const kit = screen.getByTestId("primary-test");
27
+ expect(kit).toBeInTheDocument();
28
+ expect(kit).toHaveClass("pb_tooltip_kit");
29
+
30
+ cleanup();
31
+ });
32
+
33
+ test("opens on mouseenter", () => {
34
+ render(<TooltipTest />);
35
+
36
+ fireEvent.mouseEnter(screen.getByRole("tooltip_trigger"));
37
+ expect(screen.queryByRole("tooltip")).toBeInTheDocument();
38
+
39
+ cleanup();
40
+ });
41
+
42
+ test("closes on mouseleave", () => {
43
+ render(<TooltipTest />);
44
+
45
+ fireEvent.mouseEnter(screen.getByRole("tooltip_trigger"));
46
+ fireEvent.mouseLeave(screen.getByRole("tooltip_trigger"));
47
+ expect(screen.queryByRole("tooltip")).not.toBeInTheDocument();
48
+
49
+ cleanup();
50
+ });
@@ -92,6 +92,7 @@ import * as Title from 'pb_title/docs'
92
92
  import * as TitleCount from 'pb_title_count/docs'
93
93
  import * as TitleDetail from 'pb_title_detail/docs'
94
94
  import * as Toggle from 'pb_toggle/docs'
95
+ import * as Tooltip from 'pb_tooltip/docs'
95
96
  import * as TreemapChart from 'pb_treemap_chart/docs'
96
97
  import * as Typeahead from 'pb_typeahead/docs'
97
98
  import * as User from 'pb_user/docs'
@@ -188,6 +189,7 @@ WebpackerReact.setup({
188
189
  ...TitleCount,
189
190
  ...TitleDetail,
190
191
  ...Toggle,
192
+ ...Tooltip,
191
193
  ...TreemapChart,
192
194
  ...Typeahead,
193
195
  ...User,
data/dist/reset.css CHANGED
@@ -1,2 +1,61 @@
1
- *{box-sizing:border-box;margin:0;padding:0}*:before,*:after{box-sizing:border-box}html{-webkit-tap-highlight-color:rgba(0,0,0,0);height:100vh;overflow-x:hidden}body{font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans_serif;font-size:16px;line-height:1.5;background-color:#F3F7FB;height:100%;letter-spacing:0;font-weight:400;font-style:normal;text-rendering:optimizeLegibility;-moz-font-feature-settings:"liga" on;color:#242B42;margin:0 !important;padding:0 !important;box-sizing:border-box;min-height:100vh;padding:50px}a{text-decoration:none;color:#0056CF}
1
+ /* CLEAN UP AND REMOVE */
2
+ /* Headings */
3
+ /* Standard Font Weights */
4
+ /* Non_Standard Font Weights */
5
+ /*=====================================
6
+ Base colors should not be documented.
7
+ Only document color use.
8
+
9
+ Colors -----------------------------*/
10
+ /* Specialty Gradient -----------------*/
11
+ /* Interface colors -------------------*/
12
+ /* Main colors ------------------------*/
13
+ /*=====================================
14
+
15
+ Background colors ------------------*/
16
+ /* Card colors ------------------*/
17
+ /* Active colors ----------------------*/
18
+ /* Hover colors -----------------------*/
19
+ /* Focus colors -----------------------*/
20
+ /* Border colors ----------------------*/
21
+ /* Shadow colors ----------------------*/
22
+ /* Text colors ------------------------*/
23
+ /* Data colors ------------------------*/
24
+ /* Status colors ----------------------*/
25
+ /* Link colors ------------------------*/
26
+ /* Product colors ---------------------*/
27
+ /* Category colors ---------------------*/
28
+ * {
29
+ box-sizing: border-box;
30
+ margin: 0;
31
+ padding: 0; }
32
+ *:before, *:after {
33
+ box-sizing: border-box; }
34
+
35
+ html {
36
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
37
+ height: 100vh;
38
+ overflow-x: hidden; }
39
+
40
+ body {
41
+ font-family: "Proxima Nova", "Helvetica Neue", Helvetica, Arial, sans_serif;
42
+ font-size: 16px;
43
+ line-height: 1.5;
44
+ background-color: #F3F7FB;
45
+ height: 100%;
46
+ letter-spacing: 0;
47
+ font-weight: 400;
48
+ font-style: normal;
49
+ text-rendering: optimizeLegibility;
50
+ -moz-font-feature-settings: "liga" on;
51
+ color: #242B42;
52
+ margin: 0 !important;
53
+ padding: 0 !important;
54
+ box-sizing: border-box;
55
+ min-height: 100vh;
56
+ padding: 50px; }
57
+
58
+ a {
59
+ text-decoration: none;
60
+ color: #0056CF; }
2
61
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- PREVIOUS_VERSION = "11.2.6"
5
- VERSION = "11.2.7"
4
+ PREVIOUS_VERSION = "11.2.7"
5
+ VERSION = "11.3.0.pre.alpha1"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.2.7
4
+ version: 11.3.0.pre.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-08-17 00:00:00.000000000 Z
12
+ date: 2022-08-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -567,10 +567,10 @@ files:
567
567
  - app/pb_kits/playbook/pb_circle_icon_button/docs/_footer.md
568
568
  - app/pb_kits/playbook/pb_circle_icon_button/docs/example.yml
569
569
  - app/pb_kits/playbook/pb_circle_icon_button/docs/index.js
570
- - app/pb_kits/playbook/pb_collapsible/_collapsible.jsx
571
570
  - app/pb_kits/playbook/pb_collapsible/_collapsible.scss
572
- - app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleContent.jsx
573
- - app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.jsx
571
+ - app/pb_kits/playbook/pb_collapsible/_collapsible.tsx
572
+ - app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleContent.tsx
573
+ - app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx
574
574
  - app/pb_kits/playbook/pb_collapsible/collapsible.html.erb
575
575
  - app/pb_kits/playbook/pb_collapsible/collapsible.rb
576
576
  - app/pb_kits/playbook/pb_collapsible/collapsible.test.js
@@ -578,12 +578,13 @@ files:
578
578
  - app/pb_kits/playbook/pb_collapsible/collapsible_content.rb
579
579
  - app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb
580
580
  - app/pb_kits/playbook/pb_collapsible/collapsible_main.rb
581
- - app/pb_kits/playbook/pb_collapsible/context.js
581
+ - app/pb_kits/playbook/pb_collapsible/context.ts
582
582
  - app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.html.erb
583
583
  - app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.jsx
584
584
  - app/pb_kits/playbook/pb_collapsible/docs/example.yml
585
585
  - app/pb_kits/playbook/pb_collapsible/docs/index.js
586
586
  - app/pb_kits/playbook/pb_collapsible/index.js
587
+ - app/pb_kits/playbook/pb_collapsible/types.d.ts
587
588
  - app/pb_kits/playbook/pb_contact/_contact.scss
588
589
  - app/pb_kits/playbook/pb_contact/_contact.tsx
589
590
  - app/pb_kits/playbook/pb_contact/contact.html.erb
@@ -809,8 +810,8 @@ files:
809
810
  - app/pb_kits/playbook/pb_dialog/docs/_dialog_status.md
810
811
  - app/pb_kits/playbook/pb_dialog/docs/example.yml
811
812
  - app/pb_kits/playbook/pb_dialog/docs/index.js
812
- - app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.jsx
813
813
  - app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss
814
+ - app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.tsx
814
815
  - app/pb_kits/playbook/pb_distribution_bar/distribution_bar.html.erb
815
816
  - app/pb_kits/playbook/pb_distribution_bar/distribution_bar.rb
816
817
  - app/pb_kits/playbook/pb_distribution_bar/docs/_description.md
@@ -1989,15 +1990,27 @@ files:
1989
1990
  - app/pb_kits/playbook/pb_toggle/toggle.html.erb
1990
1991
  - app/pb_kits/playbook/pb_toggle/toggle.rb
1991
1992
  - app/pb_kits/playbook/pb_tooltip/_tooltip.scss
1993
+ - app/pb_kits/playbook/pb_tooltip/_tooltip.tsx
1992
1994
  - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb
1995
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default_react.jsx
1996
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default_react.md
1997
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon.erb
1998
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon.jsx
1999
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon.md
2000
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.jsx
2001
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.md
2002
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_margin.jsx
2003
+ - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_margin.md
1993
2004
  - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_selectors.html.erb
1994
2005
  - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_selectors.md
1995
2006
  - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_white.html.erb
1996
2007
  - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_with_icon_circle.html.erb
1997
2008
  - app/pb_kits/playbook/pb_tooltip/docs/example.yml
2009
+ - app/pb_kits/playbook/pb_tooltip/docs/index.js
1998
2010
  - app/pb_kits/playbook/pb_tooltip/index.js
1999
2011
  - app/pb_kits/playbook/pb_tooltip/tooltip.html.erb
2000
2012
  - app/pb_kits/playbook/pb_tooltip/tooltip.rb
2013
+ - app/pb_kits/playbook/pb_tooltip/tooltip.test.jsx
2001
2014
  - app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.jsx
2002
2015
  - app/pb_kits/playbook/pb_treemap_chart/docs/_description.md
2003
2016
  - app/pb_kits/playbook/pb_treemap_chart/docs/_treemap_chart_colors.html.erb
@@ -2251,9 +2264,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
2251
2264
  version: '0'
2252
2265
  required_rubygems_version: !ruby/object:Gem::Requirement
2253
2266
  requirements:
2254
- - - ">="
2267
+ - - ">"
2255
2268
  - !ruby/object:Gem::Version
2256
- version: '0'
2269
+ version: 1.3.1
2257
2270
  requirements: []
2258
2271
  rubygems_version: 3.3.7
2259
2272
  signing_key: