playbook_ui 11.19.0.pre.typeahead1 → 11.19.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1239957037bcd6ef4b8211bd071fce1cc7b57bb2751f00fcbbe305665f024b24
4
- data.tar.gz: 6b6a529a7c84b1dbfd2911947ff891abe8eb04935cccd2623265dfa0da73cae4
3
+ metadata.gz: eb389dc6dd09b729a058710f9dbaffccf1c70f4994dabad0e8c877fdfb15160a
4
+ data.tar.gz: 5f8d2f82abeccdb16d5a8e0896db8c9c701b524f1fdfd86ac0cdb3e296dc5b16
5
5
  SHA512:
6
- metadata.gz: 747395a9c410e99207bdbb7d0bede2028503ec675e8754bcff0e1cf92579d3fd7e66134ad5c99417c751451968ab4f1ab9093b2036bf40985480b7a8707dfc51
7
- data.tar.gz: ae572fac37a574c478dea054368416465644b6163a3593068f7559bf3f35516c9851e3db67f84d43cd2f8d69d330bf38dd8231f15381e6199c01df198ea9b5de
6
+ metadata.gz: 4ef7df4f5c65d61d144d0b552b11c7205451cb77d50dff97c181af2175de03374ee98d18505c0765b219b217caef55f5714425585a27f7d0d2597efa50a1af21
7
+ data.tar.gz: '0068b2d612e89e7932399e089b1478faac10bd3a710e29ef4f555b6e57060236ff0a4f346c15ae61bd08e2a925b136174901803b55a066d1c1d6397b1379f1ee'
@@ -23,15 +23,15 @@ const CollapsibleContent = ({
23
23
  const contentSpacing = globalProps(props, { padding })
24
24
 
25
25
  return (
26
- <div className={classnames(contentCSS, className, contentSpacing)}>
27
- <AnimateHeight
28
- duration={300}
29
- height={context.collapsed ? 0 : 'auto'}
30
- id="bottom-section"
31
- >
26
+ <AnimateHeight
27
+ duration={400}
28
+ height={context.collapsed ? 0 : 'auto'}
29
+ id="bottom-section"
30
+ >
31
+ <div className={classnames(contentCSS, className, contentSpacing)}>
32
32
  {children}
33
- </AnimateHeight>
34
- </div>
33
+ </div>
34
+ </AnimateHeight>
35
35
  )
36
36
  }
37
37
 
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useCallback, useRef } from 'react'
2
- import { useDropzone } from 'react-dropzone'
2
+ import { useDropzone, DropzoneInputProps, DropzoneRootProps } from 'react-dropzone'
3
3
  import classnames from 'classnames'
4
4
 
5
5
  import { buildCss, buildDataProps, noop } from '../utilities/props'
@@ -38,13 +38,20 @@ const FileUpload = (props: FileUploadProps): React.ReactElement => {
38
38
  onFilesAccepted(files)
39
39
  }, [onFilesAccepted])
40
40
 
41
- const { getRootProps, getInputProps, isDragActive, rejectedFiles } = useDropzone({
41
+ type DropZoneProps = {
42
+ getRootProps: () => DropzoneRootProps & any;
43
+ getInputProps: () => DropzoneInputProps & any;
44
+ isDragActive: boolean;
45
+ rejectedFiles: File[];
46
+ }
47
+
48
+ const { getRootProps, getInputProps, isDragActive, rejectedFiles }: DropZoneProps = useDropzone({
42
49
  accept,
43
50
  maxSize,
44
51
  onDrop,
45
52
  })
46
53
 
47
- const prevRejected: any = useRef();
54
+ const prevRejected = useRef<File[] | null>(null);
48
55
 
49
56
  const maxFileSizeText = `Max file size is ${getFormattedFileSize(maxSize)}.`
50
57
 
@@ -0,0 +1,97 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ import { buildAriaProps, buildCss, buildDataProps } from "../utilities/props";
4
+ import { globalProps } from "../utilities/globalProps";
5
+
6
+ type ListProps = {
7
+ aria?: { [key: string]: string };
8
+ borderless?: boolean;
9
+ className?: string;
10
+ children: React.ReactNode[] | React.ReactNode;
11
+ dark?: boolean;
12
+ data?: object;
13
+ id?: string;
14
+ layout: "" | "left" | "right";
15
+ ordered?: boolean;
16
+ role?: string;
17
+ tabIndex?: number;
18
+ text?: string;
19
+ size?: string;
20
+ variant?: string;
21
+ xpadding: boolean;
22
+ };
23
+
24
+ const List = (props: ListProps) => {
25
+ const {
26
+ aria = {},
27
+ borderless = false,
28
+ children,
29
+ className,
30
+ dark = false,
31
+ data = {},
32
+ id,
33
+ layout = "",
34
+ ordered = false,
35
+ role,
36
+ size = "",
37
+ tabIndex,
38
+ xpadding = false,
39
+ variant,
40
+ text,
41
+ } = props;
42
+
43
+ const layoutClass: { [key: string]: string } = {
44
+ left: "layout_left",
45
+ right: "layout_right",
46
+ default: "",
47
+ };
48
+
49
+ const childrenWithProps = React.Children.map(
50
+ children,
51
+ (child: React.ReactElement) => {
52
+ return React.cloneElement(child, { text, variant });
53
+ }
54
+ );
55
+ const ariaProps = buildAriaProps(aria);
56
+ const dataProps = buildDataProps(data);
57
+ const classes = classnames(
58
+ buildCss("pb_list_kit", layoutClass[layout], size, {
59
+ dark: dark,
60
+ borderless: borderless,
61
+ ordered: ordered,
62
+ xpadding: xpadding,
63
+ }),
64
+ globalProps(props),
65
+ className
66
+ );
67
+
68
+ return (
69
+ <div className={classes}>
70
+ {ordered ? (
71
+ <ol
72
+ {...ariaProps}
73
+ {...dataProps}
74
+ className={className}
75
+ id={id}
76
+ role={role}
77
+ tabIndex={tabIndex}
78
+ >
79
+ {childrenWithProps}
80
+ </ol>
81
+ ) : (
82
+ <ul
83
+ {...ariaProps}
84
+ {...dataProps}
85
+ className={className}
86
+ id={id}
87
+ role={role}
88
+ tabIndex={tabIndex}
89
+ >
90
+ {childrenWithProps}
91
+ </ul>
92
+ )}
93
+ </div>
94
+ );
95
+ };
96
+
97
+ export default List;
@@ -1,17 +1,15 @@
1
- /* @flow */
2
-
3
- import React, { type Node } from 'react'
1
+ import React from 'react'
4
2
  import classnames from 'classnames'
5
3
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
4
  import { globalProps } from '../utilities/globalProps'
7
5
 
8
6
  type ListItemProps = {
9
- aria?: object,
10
- children: array<Node> | Node,
7
+ aria?: { [key: string]: string },
8
+ children: React.ReactNode[] | React.ReactNode,
11
9
  className?: string,
12
10
  data?: object,
13
11
  id?: string,
14
- tabIndex?: string,
12
+ tabIndex?: number,
15
13
  }
16
14
 
17
15
  const ListItem = (props: ListItemProps) => {
@@ -0,0 +1,239 @@
1
+ import React, { useEffect } from "react";
2
+ import ReactDOM from "react-dom";
3
+
4
+ import {
5
+ Popper,
6
+ Manager as PopperManager,
7
+ Modifier,
8
+ PopperProps,
9
+ Reference as PopperReference,
10
+ } from "react-popper";
11
+
12
+ import {
13
+ buildAriaProps,
14
+ buildCss,
15
+ buildDataProps,
16
+ noop,
17
+ } from "../utilities/props";
18
+
19
+ import classnames from "classnames";
20
+ import { globalProps, GlobalProps } from "../utilities/globalProps";
21
+
22
+ type PbPopoverProps = {
23
+ aria?: { [key: string]: string };
24
+ className?: string;
25
+ closeOnClick?: "outside" | "inside" | "any";
26
+ data?: object;
27
+ id?: string;
28
+ offset?: boolean;
29
+ reference: PopperReference & any;
30
+ show?: boolean;
31
+ shouldClosePopover?: (arg0: boolean) => boolean | boolean;
32
+ } & GlobalProps &
33
+ PopperProps<any>;
34
+
35
+ // Prop enabled default modifiers here
36
+ // https://popper.js.org/docs/v2/modifiers
37
+
38
+ const POPOVER_MODIFIERS = {
39
+ offset: {
40
+ //https://popper.js.org/docs/v2/modifiers/offset/
41
+ enabled: true,
42
+ name: "offset",
43
+ options: {
44
+ offset: [0, 20],
45
+ },
46
+ phase: "main",
47
+ },
48
+ };
49
+
50
+ const popoverModifiers = ({
51
+ modifiers,
52
+ offset,
53
+ }: {
54
+ modifiers: Modifier<any> & any;
55
+ offset: {};
56
+ }) => {
57
+ return offset ? modifiers.concat([POPOVER_MODIFIERS.offset]) : modifiers;
58
+ };
59
+
60
+ const Popover = (props: PbPopoverProps) => {
61
+ const {
62
+ aria = {},
63
+ className,
64
+ children,
65
+ data = {},
66
+ id,
67
+ modifiers,
68
+ offset,
69
+ placement,
70
+ referenceElement,
71
+ zIndex,
72
+ maxHeight,
73
+ maxWidth,
74
+ minHeight,
75
+ minWidth,
76
+ } = props;
77
+
78
+ const popoverSpacing =
79
+ globalProps(props).includes("dark") || !globalProps(props)
80
+ ? "p_sm"
81
+ : globalProps(props);
82
+ const overflowHandling = maxHeight || maxWidth ? "overflow_handling" : "";
83
+ const zIndexStyle = zIndex ? { zIndex: zIndex } : {};
84
+ const widthHeightStyles = () => {
85
+ return Object.assign(
86
+ {},
87
+ maxHeight ? { maxHeight: maxHeight } : {},
88
+ maxWidth ? { maxWidth: maxWidth } : {},
89
+ minHeight ? { minHeight: minHeight } : {},
90
+ minWidth ? { minWidth: minWidth } : {}
91
+ );
92
+ };
93
+ const ariaProps = buildAriaProps(aria);
94
+ const dataProps = buildDataProps(data);
95
+ const classes = classnames(
96
+ buildCss("pb_popover_kit"),
97
+ globalProps(props),
98
+ className
99
+ );
100
+
101
+ return (
102
+ <Popper
103
+ modifiers={popoverModifiers({ modifiers, offset })}
104
+ placement={placement}
105
+ referenceElement={referenceElement}
106
+ >
107
+ {({ placement, ref, style }) => {
108
+ return (
109
+ <div
110
+ {...ariaProps}
111
+ {...dataProps}
112
+ className={classes}
113
+ data-placement={placement}
114
+ id={id}
115
+ ref={ref}
116
+ style={Object.assign({}, style, zIndexStyle)}
117
+ >
118
+ <div
119
+ className={classnames(`${buildCss("pb_popover_tooltip")} show`)}
120
+ >
121
+ <div
122
+ className={classnames(
123
+ "pb_popover_body",
124
+ popoverSpacing,
125
+ overflowHandling
126
+ )}
127
+ style={widthHeightStyles()}
128
+ >
129
+ {children}
130
+ </div>
131
+ </div>
132
+ </div>
133
+ );
134
+ }}
135
+ </Popper>
136
+ );
137
+ };
138
+
139
+ const PbReactPopover = (props: PbPopoverProps) => {
140
+ const {
141
+ className,
142
+ children,
143
+ modifiers = [],
144
+ offset = false,
145
+ placement = "left",
146
+ portal = "body",
147
+ reference,
148
+ referenceElement,
149
+ show = false,
150
+ usePortal = true,
151
+ zIndex,
152
+ maxHeight,
153
+ maxWidth,
154
+ minHeight,
155
+ minWidth,
156
+ } = props;
157
+
158
+ useEffect(() => {
159
+ const { closeOnClick, shouldClosePopover = noop } = props;
160
+
161
+ if (!closeOnClick) return;
162
+
163
+ document.body.addEventListener(
164
+ "click",
165
+ ({ target }) => {
166
+ const targetIsPopover =
167
+ (target as HTMLElement).closest("[class^=pb_popover_tooltip]") !==
168
+ null;
169
+ const targetIsReference =
170
+ (target as HTMLElement).closest(".pb_popover_reference_wrapper") !==
171
+ null;
172
+
173
+ switch (closeOnClick) {
174
+ case "outside":
175
+ if (!targetIsPopover || targetIsReference) {
176
+ shouldClosePopover(true);
177
+ }
178
+ break;
179
+ case "inside":
180
+ if (targetIsPopover || targetIsReference) {
181
+ shouldClosePopover(true);
182
+ }
183
+ break;
184
+ case "any":
185
+ shouldClosePopover(true);
186
+ break;
187
+ }
188
+ },
189
+ { capture: true }
190
+ );
191
+ }, []);
192
+
193
+ const popoverComponent = (
194
+ <Popover
195
+ className={className}
196
+ maxHeight={maxHeight}
197
+ maxWidth={maxWidth}
198
+ minHeight={minHeight}
199
+ minWidth={minWidth}
200
+ modifiers={modifiers}
201
+ offset={offset}
202
+ placement={placement}
203
+ referenceElement={referenceElement}
204
+ zIndex={zIndex}
205
+ {...props}
206
+ >
207
+ {children}
208
+ </Popover>
209
+ );
210
+
211
+ return (
212
+ <PopperManager>
213
+ <>
214
+ {reference && !referenceElement && (
215
+ <PopperReference>
216
+ {({ ref }) => (
217
+ <span className="pb_popover_reference_wrapper" ref={ref}>
218
+ <reference.type {...reference.props} />
219
+ </span>
220
+ )}
221
+ </PopperReference>
222
+ )}
223
+ {show &&
224
+ (usePortal ? (
225
+ <>
226
+ {ReactDOM.createPortal(
227
+ popoverComponent,
228
+ document.querySelector(portal)
229
+ )}
230
+ </>
231
+ ) : (
232
+ { popoverComponent }
233
+ ))}
234
+ </>
235
+ </PopperManager>
236
+ );
237
+ };
238
+
239
+ export default PbReactPopover;
@@ -1,9 +1,13 @@
1
1
  import PbEnhancedElement from '../pb_enhanced_element'
2
- import { createPopper } from '@popperjs/core'
2
+ import { createPopper, Instance, Placement } from '@popperjs/core'
3
3
 
4
4
  const POPOVER_OFFSET_Y = [0, 20]
5
5
 
6
6
  export default class PbPopover extends PbEnhancedElement {
7
+ popper: Instance
8
+ _triggerElement: HTMLElement
9
+ _tooltip: HTMLElement
10
+ element: HTMLElement
7
11
  static get selector() {
8
12
  return '[data-pb-popover-kit]'
9
13
  }
@@ -14,8 +18,8 @@ export default class PbPopover extends PbEnhancedElement {
14
18
 
15
19
  connect() {
16
20
  this.moveTooltip()
17
- this.popper = createPopper(this.triggerElement, this.tooltip, {
18
- placement: this.position,
21
+ this.popper = createPopper (this.triggerElement, this.tooltip, {
22
+ placement: this.position as Placement,
19
23
  strategy: 'fixed',
20
24
  modifiers: [
21
25
  {
@@ -27,7 +31,7 @@ export default class PbPopover extends PbEnhancedElement {
27
31
  ],
28
32
  })
29
33
 
30
- this.triggerElement.addEventListener('click', (event) => {
34
+ this.triggerElement.addEventListener('click', (event: Event) => {
31
35
  event.preventDefault()
32
36
  event.stopPropagation()
33
37
 
@@ -43,8 +47,8 @@ export default class PbPopover extends PbEnhancedElement {
43
47
  }
44
48
 
45
49
  checkCloseTooltip() {
46
- document.querySelector('body').addEventListener('click', ({ target }) => {
47
- const isTooltipElement = target.closest(`#${this.tooltipId}`) !== null
50
+ document.querySelector('body').addEventListener('click', ({ target } ) => {
51
+ const isTooltipElement = (target as HTMLElement).closest(`#${this.tooltipId}`) !== null
48
52
 
49
53
  switch (this.closeOnClick) {
50
54
  case 'any':
@@ -0,0 +1,222 @@
1
+ import React from "react";
2
+ import { render, screen, fireEvent } from "../utilities/test-utils";
3
+ import { Button, PbReactPopover } from "..";
4
+
5
+ const testId = "popover-kit";
6
+
7
+ //Test default popover
8
+ const PopoverTest = () => {
9
+ const [mockState, setMockState] = React.useState(false)
10
+ const togglePopover = () => {
11
+ setMockState(!mockState)
12
+ }
13
+
14
+ const popoverReference = (
15
+ <Button onClick={togglePopover}
16
+ text="Click Me"
17
+ />
18
+ );
19
+ return (
20
+ <PbReactPopover
21
+ offset
22
+ reference={popoverReference}
23
+ show={mockState}
24
+ >
25
+ {"Click Anywhere"}
26
+ </PbReactPopover>
27
+ )
28
+ };
29
+ //Test popover with z-index
30
+ const PopoverTestZIndex = () => {
31
+ const [mockState, setMockState] = React.useState(false)
32
+ const togglePopover = () => {
33
+ setMockState(!mockState)
34
+ }
35
+
36
+ const popoverReference = (
37
+ <Button onClick={togglePopover}
38
+ text="Click Me"
39
+ />
40
+ );
41
+ return (
42
+ <PbReactPopover
43
+ offset
44
+ reference={popoverReference}
45
+ show={mockState}
46
+ zIndex={3}
47
+ >
48
+ {"Click Anywhere"}
49
+ </PbReactPopover>
50
+ )
51
+ };
52
+
53
+ //Test popover with max-height and max-width
54
+ const PopoverTestHeight = () => {
55
+ const [mockState, setMockState] = React.useState(false)
56
+ const togglePopover = () => {
57
+ setMockState(!mockState)
58
+ }
59
+
60
+ const popoverReference = (
61
+ <Button onClick={togglePopover}
62
+ text="Click Me"
63
+ />
64
+ );
65
+ return (
66
+ <PbReactPopover
67
+ maxHeight="150px"
68
+ maxWidth="240px"
69
+ offset
70
+ reference={popoverReference}
71
+ show={mockState}
72
+ >
73
+ {"Click Anywhere"}
74
+ </PbReactPopover>
75
+ )
76
+ };
77
+
78
+ //Test Popover with click to close 'anywhere'
79
+ const PopoverTestClicktoClose = () => {
80
+ const [mockState, setMockState] = React.useState(false)
81
+ const togglePopover = () => {
82
+ setMockState(!mockState)
83
+ }
84
+ const handleShouldClosePopover = (shouldClosePopover) => {
85
+ setMockState(!shouldClosePopover)
86
+ }
87
+
88
+ const popoverReference = (
89
+ <Button onClick={togglePopover}
90
+ text="Click Me"
91
+ />
92
+ );
93
+ return (
94
+ <PbReactPopover
95
+ closeOnClick="any"
96
+ offset
97
+ reference={popoverReference}
98
+ shouldClosePopover={handleShouldClosePopover}
99
+ show={mockState}
100
+ >
101
+ {"Click Anywhere"}
102
+ </PbReactPopover>
103
+ )
104
+ };
105
+
106
+ //Test Popover with click to close 'inside'
107
+ const PopoverTestClicktoClose2 = () => {
108
+ const [mockState, setMockState] = React.useState(false)
109
+ const togglePopover = () => {
110
+ setMockState(!mockState)
111
+ }
112
+ const handleShouldClosePopover = (shouldClosePopover) => {
113
+ setMockState(!shouldClosePopover)
114
+ }
115
+
116
+ const popoverReference = (
117
+ <Button onClick={togglePopover}
118
+ text="Click Me"
119
+ />
120
+ );
121
+ return (
122
+ <PbReactPopover
123
+ closeOnClick="inside"
124
+ offset
125
+ reference={popoverReference}
126
+ shouldClosePopover={handleShouldClosePopover}
127
+ show={mockState}
128
+ >
129
+ {"Click Inside"}
130
+ </PbReactPopover>
131
+ )
132
+ };
133
+
134
+ //Test Popover with click to close 'outside'
135
+ const PopoverTestClicktoClose3 = () => {
136
+ const [mockState, setMockState] = React.useState(false)
137
+ const togglePopover = () => {
138
+ setMockState(!mockState)
139
+ }
140
+ const handleShouldClosePopover = (shouldClosePopover) => {
141
+ setMockState(!shouldClosePopover)
142
+ }
143
+
144
+ const popoverReference = (
145
+ <Button onClick={togglePopover}
146
+ text="Click Me"
147
+ />
148
+ );
149
+ return (
150
+ <PbReactPopover
151
+ closeOnClick="outside"
152
+ offset
153
+ reference={popoverReference}
154
+ shouldClosePopover={handleShouldClosePopover}
155
+ show={mockState}
156
+ >
157
+ {"Click Outside"}
158
+ </PbReactPopover>
159
+ )
160
+ };
161
+
162
+
163
+ test("renders Popover", () => {
164
+ render(<PopoverTest data={{ testid: testId}}/>)
165
+ const btn = screen.getByText(/click me/i)
166
+ fireEvent.click(btn);
167
+ const kit = screen.getByText("Click Anywhere");
168
+ expect(kit).toBeInTheDocument();
169
+ });
170
+
171
+ test("renders Popover with z index", () => {
172
+ render(<PopoverTestZIndex data={{ testid: testId}}/>)
173
+ const btn = screen.getByText(/click me/i)
174
+ fireEvent.click(btn);
175
+ const kit = screen.getByText("Click Anywhere");
176
+ expect(kit).toHaveClass("pb_popover_body z_index_3");
177
+ });
178
+
179
+ test("renders Popover with max height and max width", () => {
180
+ render(<PopoverTestHeight data={{ testid: testId}}/>)
181
+ const btn = screen.getByText(/click me/i)
182
+ fireEvent.click(btn);
183
+ const kit = screen.getByText("Click Anywhere");
184
+ expect(kit).toHaveClass("pb_popover_body max_width_240px overflow_handling");
185
+ });
186
+
187
+ test("closes Popover on click anywhere", () => {
188
+ render(<PopoverTestClicktoClose data={{ testid: testId}}/>)
189
+ const btn = screen.getByText(/click me/i)
190
+ fireEvent.click(btn);
191
+ const kit = screen.getByText("Click Anywhere");
192
+ expect(kit).toBeInTheDocument();
193
+ fireEvent.click(kit);
194
+
195
+ expect(kit).not.toBeInTheDocument();
196
+
197
+ });
198
+
199
+ test("closes Popover on click inside", () => {
200
+ render(<PopoverTestClicktoClose2 data={{ testid: testId}}/>)
201
+ const btn = screen.getByText(/click me/i)
202
+ fireEvent.click(btn);
203
+ const kit = screen.getByText("Click Inside");
204
+ expect(kit).toBeInTheDocument();
205
+ fireEvent.click(kit);
206
+
207
+ expect(kit).not.toBeInTheDocument();
208
+
209
+ });
210
+
211
+ test("closes Popover on click outside", () => {
212
+ render(<PopoverTestClicktoClose3 data={{ testid: testId}}/>)
213
+ const btn = screen.getByText(/click me/i)
214
+ fireEvent.click(btn);
215
+ const kit = screen.getByText("Click Outside");
216
+ expect(kit).toBeInTheDocument();
217
+ fireEvent.click(kit);
218
+ expect(kit).toBeInTheDocument();
219
+ fireEvent.click(btn);
220
+ expect(kit).not.toBeInTheDocument();
221
+
222
+ });
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Playbook
4
4
  PREVIOUS_VERSION = "11.18.0"
5
- VERSION = "11.19.0.pre.typeahead1"
5
+ VERSION = "11.19.0"
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.19.0.pre.typeahead1
4
+ version: 11.19.0
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: 2023-01-11 00:00:00.000000000 Z
12
+ date: 2023-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -1336,9 +1336,9 @@ files:
1336
1336
  - app/pb_kits/playbook/pb_line_graph/lineGraphSettings.js
1337
1337
  - app/pb_kits/playbook/pb_line_graph/line_graph.html.erb
1338
1338
  - app/pb_kits/playbook/pb_line_graph/line_graph.rb
1339
- - app/pb_kits/playbook/pb_list/_list.jsx
1340
1339
  - app/pb_kits/playbook/pb_list/_list.scss
1341
- - app/pb_kits/playbook/pb_list/_list_item.jsx
1340
+ - app/pb_kits/playbook/pb_list/_list.tsx
1341
+ - app/pb_kits/playbook/pb_list/_list_item.tsx
1342
1342
  - app/pb_kits/playbook/pb_list/_list_mixin.scss
1343
1343
  - app/pb_kits/playbook/pb_list/docs/_description.md
1344
1344
  - app/pb_kits/playbook/pb_list/docs/_list_borderless.html.erb
@@ -1533,8 +1533,8 @@ files:
1533
1533
  - app/pb_kits/playbook/pb_pill/docs/index.js
1534
1534
  - app/pb_kits/playbook/pb_pill/pill.html.erb
1535
1535
  - app/pb_kits/playbook/pb_pill/pill.rb
1536
- - app/pb_kits/playbook/pb_popover/_popover.jsx
1537
1536
  - app/pb_kits/playbook/pb_popover/_popover.scss
1537
+ - app/pb_kits/playbook/pb_popover/_popover.tsx
1538
1538
  - app/pb_kits/playbook/pb_popover/docs/_description.md
1539
1539
  - app/pb_kits/playbook/pb_popover/docs/_popover_close.html.erb
1540
1540
  - app/pb_kits/playbook/pb_popover/docs/_popover_close.jsx
@@ -1549,9 +1549,10 @@ files:
1549
1549
  - app/pb_kits/playbook/pb_popover/docs/_popover_z_index.jsx
1550
1550
  - app/pb_kits/playbook/pb_popover/docs/example.yml
1551
1551
  - app/pb_kits/playbook/pb_popover/docs/index.js
1552
- - app/pb_kits/playbook/pb_popover/index.js
1552
+ - app/pb_kits/playbook/pb_popover/index.ts
1553
1553
  - app/pb_kits/playbook/pb_popover/popover.html.erb
1554
1554
  - app/pb_kits/playbook/pb_popover/popover.rb
1555
+ - app/pb_kits/playbook/pb_popover/popover.test.js
1555
1556
  - app/pb_kits/playbook/pb_progress_pills/_progress_pills.jsx
1556
1557
  - app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss
1557
1558
  - app/pb_kits/playbook/pb_progress_pills/docs/_description.md
@@ -2363,9 +2364,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
2363
2364
  version: '0'
2364
2365
  required_rubygems_version: !ruby/object:Gem::Requirement
2365
2366
  requirements:
2366
- - - ">"
2367
+ - - ">="
2367
2368
  - !ruby/object:Gem::Version
2368
- version: 1.3.1
2369
+ version: '0'
2369
2370
  requirements: []
2370
2371
  rubygems_version: 3.3.7
2371
2372
  signing_key:
@@ -1,98 +0,0 @@
1
- /* @flow */
2
-
3
- import React, { type Node } from 'react'
4
- import classnames from 'classnames'
5
- import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
- import { globalProps } from '../utilities/globalProps'
7
-
8
- type ListProps = {
9
- aria?: object,
10
- borderless: boolean,
11
- className?: string,
12
- children: array<Node> | Node,
13
- dark: boolean,
14
- data?: object,
15
- id?: string,
16
- layout: "" | "left" | "right",
17
- ordered: boolean,
18
- role?: string,
19
- tabIndex?: string,
20
- text?: string,
21
- size?: string,
22
- variant?: string,
23
- xpadding: boolean,
24
- }
25
-
26
- const List = (props: ListProps) => {
27
- const {
28
- aria = {},
29
- borderless = false,
30
- children,
31
- className,
32
- dark = false,
33
- data = {},
34
- id,
35
- layout = '',
36
- ordered = false,
37
- role,
38
- size = '',
39
- tabIndex,
40
- xpadding = false,
41
- variant,
42
- text,
43
- } = props
44
-
45
- const layoutClass = {
46
- left: 'layout_left',
47
- right: 'layout_right',
48
- default: '',
49
- }
50
-
51
- const childrenWithProps = React.Children.map(children, (child) => {
52
- return React.cloneElement(child, { text, variant })
53
- })
54
- const ariaProps = buildAriaProps(aria)
55
- const dataProps = buildDataProps(data)
56
- const classes = classnames(
57
- buildCss('pb_list_kit', layoutClass[layout], size, {
58
- dark: dark,
59
- borderless: borderless,
60
- ordered: ordered,
61
- xpadding: xpadding,
62
- }),
63
- globalProps(props),
64
- className
65
- )
66
-
67
- return (
68
- <div
69
- className={classes}
70
- >
71
- <If condition={ordered}>
72
- <ol
73
- {...ariaProps}
74
- {...dataProps}
75
- className={className}
76
- id={id}
77
- role={role}
78
- tabIndex={tabIndex}
79
- >
80
- {childrenWithProps}
81
- </ol>
82
- <Else />
83
- <ul
84
- {...ariaProps}
85
- {...dataProps}
86
- className={className}
87
- id={id}
88
- role={role}
89
- tabIndex={tabIndex}
90
- >
91
- {childrenWithProps}
92
- </ul>
93
- </If>
94
- </div>
95
- )
96
- }
97
-
98
- export default List
@@ -1,227 +0,0 @@
1
- /* eslint-disable react/no-multi-comp */
2
- // @flow
3
-
4
- import React, {useEffect} from "react";
5
- import ReactDOM from "react-dom";
6
-
7
- import {
8
- Popper,
9
- Manager as PopperManager,
10
- PopperProps,
11
- Reference as PopperReference,
12
- } from "react-popper";
13
-
14
- import {
15
- buildAriaProps,
16
- buildCss,
17
- buildDataProps,
18
- noop,
19
- } from "../utilities/props";
20
-
21
- import classnames from "classnames";
22
- import { globalProps } from "../utilities/globalProps";
23
-
24
- type PbPopoverProps = {
25
- aria?: object,
26
- className?: string,
27
- closeOnClick?: "outside" | "inside",
28
- data?: object,
29
- id?: String,
30
- offset?: boolean,
31
- reference: PopperReference,
32
- show?: boolean,
33
- shouldClosePopover?: () => boolean,
34
- } & PopperProps;
35
-
36
- // Prop enabled default modifiers here
37
- // https://popper.js.org/docs/v2/modifiers
38
-
39
- const POPOVER_MODIFIERS = {
40
- offset: {
41
- //https://popper.js.org/docs/v2/modifiers/offset/
42
- enabled: true,
43
- name: "offset",
44
- options: {
45
- offset: [0, 20],
46
- },
47
- phase: "main",
48
- },
49
- };
50
-
51
- const popoverModifiers = ({ modifiers, offset }) => {
52
- return offset ? modifiers.concat([POPOVER_MODIFIERS.offset]) : modifiers;
53
- };
54
-
55
- const Popover = (props: PbPopoverProps) => {
56
- const {
57
- aria = {},
58
- className,
59
- children,
60
- data = {},
61
- id,
62
- modifiers,
63
- offset,
64
- placement,
65
- referenceElement,
66
- zIndex,
67
- maxHeight,
68
- maxWidth,
69
- minHeight,
70
- minWidth,
71
- } = props;
72
-
73
- const popoverSpacing =
74
- globalProps(props).includes("dark") || !globalProps(props)
75
- ? "p_sm"
76
- : globalProps(props);
77
- const overflowHandling = maxHeight || maxWidth ? "overflow_handling" : "";
78
- const zIndexStyle = zIndex ? { zIndex: zIndex } : {};
79
- const widthHeightStyles = () => {
80
- return Object.assign(
81
- {},
82
- maxHeight ? { maxHeight: maxHeight } : {},
83
- maxWidth ? { maxWidth: maxWidth } : {},
84
- minHeight ? { minHeight: minHeight } : {},
85
- minWidth ? { minWidth: minWidth } : {}
86
- );
87
- };
88
- const ariaProps = buildAriaProps(aria);
89
- const dataProps = buildDataProps(data);
90
- const classes = classnames(
91
- buildCss("pb_popover_kit"),
92
- globalProps(props),
93
- className
94
- );
95
-
96
- return (
97
- <Popper
98
- modifiers={popoverModifiers({ modifiers, offset })}
99
- placement={placement}
100
- referenceElement={referenceElement}
101
- >
102
- {({ placement, ref, style }) => {
103
- return (
104
- <div
105
- {...ariaProps}
106
- {...dataProps}
107
- className={classes}
108
- data-placement={placement}
109
- id={id}
110
- ref={ref}
111
- style={Object.assign({}, style, zIndexStyle)}
112
- >
113
- <div
114
- className={classnames(`${buildCss("pb_popover_tooltip")} show`)}
115
- >
116
- <div
117
- className={classnames(
118
- "pb_popover_body",
119
- popoverSpacing,
120
- overflowHandling
121
- )}
122
- style={widthHeightStyles()}
123
- >
124
- {children}
125
- </div>
126
- </div>
127
- </div>
128
- );
129
- }}
130
- </Popper>
131
- );
132
- };
133
-
134
- const PbReactPopover = (props: PbPopoverProps) => {
135
- const {
136
- className,
137
- children,
138
- modifiers = [],
139
- offset = false,
140
- placement = "left",
141
- portal = "body",
142
- reference,
143
- referenceElement,
144
- show = false,
145
- usePortal = true,
146
- zIndex,
147
- maxHeight,
148
- maxWidth,
149
- minHeight,
150
- minWidth,
151
- } = props;
152
-
153
- useEffect(() => {
154
- const { closeOnClick, shouldClosePopover = noop } = props
155
-
156
- if (!closeOnClick) return
157
-
158
- document.body.addEventListener('click', ({ target }) => {
159
- const targetIsPopover =
160
- target.closest('[class^=pb_popover_tooltip]') !== null
161
- const targetIsReference =
162
- target.closest('.pb_popover_reference_wrapper') !== null
163
-
164
- switch (closeOnClick) {
165
- case 'outside':
166
- if (!targetIsPopover || targetIsReference) {
167
- shouldClosePopover(true)
168
- }
169
- break
170
- case 'inside':
171
- if (targetIsPopover || targetIsReference) {
172
- shouldClosePopover(true)
173
- }
174
- break
175
- case 'any':
176
- shouldClosePopover(true)
177
- break
178
- }
179
- }, { capture: true })
180
- }, [])
181
-
182
- const popoverComponent = (
183
- <Popover
184
- className={className}
185
- maxHeight={maxHeight}
186
- maxWidth={maxWidth}
187
- minHeight={minHeight}
188
- minWidth={minWidth}
189
- modifiers={modifiers}
190
- offset={offset}
191
- placement={placement}
192
- referenceElement={referenceElement}
193
- zIndex={zIndex}
194
- {...props}
195
- >
196
- {children}
197
- </Popover>
198
- );
199
-
200
- return (
201
- <PopperManager>
202
- <If condition={reference && !referenceElement}>
203
- <PopperReference>
204
- {({ ref }) => (
205
- <span className="pb_popover_reference_wrapper"
206
- ref={ref}
207
- >
208
- <reference.type {...reference.props} />
209
- </span>
210
- )}
211
- </PopperReference>
212
- </If>
213
- <If condition={show}>
214
- <If condition={usePortal}>
215
- {ReactDOM.createPortal(
216
- popoverComponent,
217
- document.querySelector(portal)
218
- )}
219
- <Else />
220
- {popoverComponent}
221
- </If>
222
- </If>
223
- </PopperManager>
224
- );
225
- };
226
-
227
- export default PbReactPopover;