playbook_ui 11.19.0.pre.alpha.pagpassthrough1 → 11.19.0.pre.typeahead1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff556241a73204fa1fcb1b7f9e8c5d3d41dde1cbab356e52f52c42ccab521c0d
4
- data.tar.gz: be66d4782e1117833f5e34036a010f71486d91318ad6241e82487964d9583602
3
+ metadata.gz: 1239957037bcd6ef4b8211bd071fce1cc7b57bb2751f00fcbbe305665f024b24
4
+ data.tar.gz: 6b6a529a7c84b1dbfd2911947ff891abe8eb04935cccd2623265dfa0da73cae4
5
5
  SHA512:
6
- metadata.gz: 9763ce291cf8f35999f873b742e258a28c07f6c1cc42fc59399ff8f2d32cf80a27cb3a583188726c0449757d19edcde02460b4e0744f8fd1599343c1aa995ced
7
- data.tar.gz: 6a93d271d454a850b50bc5a940242c97ba55962a9dc6cca4faf375eaf223e07385137f2c2409554d10be4291a7f052553a3bde48c9027e12b58869606f6ee71a
6
+ metadata.gz: 747395a9c410e99207bdbb7d0bede2028503ec675e8754bcff0e1cf92579d3fd7e66134ad5c99417c751451968ab4f1ab9093b2036bf40985480b7a8707dfc51
7
+ data.tar.gz: ae572fac37a574c478dea054368416465644b6163a3593068f7559bf3f35516c9851e3db67f84d43cd2f8d69d330bf38dd8231f15381e6199c01df198ea9b5de
@@ -103,5 +103,3 @@
103
103
  @import './utilities/line_height';
104
104
  @import './utilities/display';
105
105
  @import './utilities/flexbox';
106
- @import './utilities/pagination';
107
- @import 'pb_paginate/paginate';
@@ -104,4 +104,3 @@ kits:
104
104
  - title_detail
105
105
  - user_badge
106
106
  - walkthrough
107
- - paginate
@@ -23,15 +23,15 @@ const CollapsibleContent = ({
23
23
  const contentSpacing = globalProps(props, { padding })
24
24
 
25
25
  return (
26
- <AnimateHeight
27
- duration={400}
28
- height={context.collapsed ? 0 : 'auto'}
29
- id="bottom-section"
30
- >
31
- <div className={classnames(contentCSS, className, contentSpacing)}>
26
+ <div className={classnames(contentCSS, className, contentSpacing)}>
27
+ <AnimateHeight
28
+ duration={300}
29
+ height={context.collapsed ? 0 : 'auto'}
30
+ id="bottom-section"
31
+ >
32
32
  {children}
33
- </div>
34
- </AnimateHeight>
33
+ </AnimateHeight>
34
+ </div>
35
35
  )
36
36
  }
37
37
 
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useCallback, useRef } from 'react'
2
- import { useDropzone, DropzoneInputProps, DropzoneRootProps } from 'react-dropzone'
2
+ import { useDropzone } from 'react-dropzone'
3
3
  import classnames from 'classnames'
4
4
 
5
5
  import { buildCss, buildDataProps, noop } from '../utilities/props'
@@ -38,20 +38,13 @@ const FileUpload = (props: FileUploadProps): React.ReactElement => {
38
38
  onFilesAccepted(files)
39
39
  }, [onFilesAccepted])
40
40
 
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({
41
+ const { getRootProps, getInputProps, isDragActive, rejectedFiles } = useDropzone({
49
42
  accept,
50
43
  maxSize,
51
44
  onDrop,
52
45
  })
53
46
 
54
- const prevRejected = useRef<File[] | null>(null);
47
+ const prevRejected: any = useRef();
55
48
 
56
49
  const maxFileSizeText = `Max file size is ${getFormattedFileSize(maxSize)}.`
57
50
 
@@ -0,0 +1,98 @@
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,15 +1,17 @@
1
- import React from 'react'
1
+ /* @flow */
2
+
3
+ import React, { type Node } from 'react'
2
4
  import classnames from 'classnames'
3
5
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
4
6
  import { globalProps } from '../utilities/globalProps'
5
7
 
6
8
  type ListItemProps = {
7
- aria?: { [key: string]: string },
8
- children: React.ReactNode[] | React.ReactNode,
9
+ aria?: object,
10
+ children: array<Node> | Node,
9
11
  className?: string,
10
12
  data?: object,
11
13
  id?: string,
12
- tabIndex?: number,
14
+ tabIndex?: string,
13
15
  }
14
16
 
15
17
  const ListItem = (props: ListItemProps) => {
@@ -0,0 +1,227 @@
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;
@@ -1,13 +1,9 @@
1
1
  import PbEnhancedElement from '../pb_enhanced_element'
2
- import { createPopper, Instance, Placement } from '@popperjs/core'
2
+ import { createPopper } 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
11
7
  static get selector() {
12
8
  return '[data-pb-popover-kit]'
13
9
  }
@@ -18,8 +14,8 @@ export default class PbPopover extends PbEnhancedElement {
18
14
 
19
15
  connect() {
20
16
  this.moveTooltip()
21
- this.popper = createPopper (this.triggerElement, this.tooltip, {
22
- placement: this.position as Placement,
17
+ this.popper = createPopper(this.triggerElement, this.tooltip, {
18
+ placement: this.position,
23
19
  strategy: 'fixed',
24
20
  modifiers: [
25
21
  {
@@ -31,7 +27,7 @@ export default class PbPopover extends PbEnhancedElement {
31
27
  ],
32
28
  })
33
29
 
34
- this.triggerElement.addEventListener('click', (event: Event) => {
30
+ this.triggerElement.addEventListener('click', (event) => {
35
31
  event.preventDefault()
36
32
  event.stopPropagation()
37
33
 
@@ -47,8 +43,8 @@ export default class PbPopover extends PbEnhancedElement {
47
43
  }
48
44
 
49
45
  checkCloseTooltip() {
50
- document.querySelector('body').addEventListener('click', ({ target } ) => {
51
- const isTooltipElement = (target as HTMLElement).closest(`#${this.tooltipId}`) !== null
46
+ document.querySelector('body').addEventListener('click', ({ target }) => {
47
+ const isTooltipElement = target.closest(`#${this.tooltipId}`) !== null
52
48
 
53
49
  switch (this.closeOnClick) {
54
50
  case 'any':
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- PREVIOUS_VERSION = "11.19.0"
5
- VERSION = "11.19.0.pre.alpha.pagpassthrough1"
4
+ PREVIOUS_VERSION = "11.18.0"
5
+ VERSION = "11.19.0.pre.typeahead1"
6
6
  end
data/lib/playbook.rb CHANGED
@@ -12,8 +12,6 @@ require "playbook/pb_doc_helper"
12
12
  require "playbook/kit_base"
13
13
  require "playbook/kit_resolver"
14
14
  require "playbook/markdown"
15
- # require "playbook/pagination_renderer"
16
- # REMOVED TO MAKE THIS AN OPTIONAL INCLUDE FOR CLIENTS
17
15
 
18
16
  module Playbook
19
17
  ROOT_PATH = Pathname.new(File.join(__dir__, ".."))
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.alpha.pagpassthrough1
4
+ version: 11.19.0.pre.typeahead1
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-16 00:00:00.000000000 Z
12
+ date: 2023-01-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -269,20 +269,6 @@ dependencies:
269
269
  - - '='
270
270
  - !ruby/object:Gem::Version
271
271
  version: 1.2018.9
272
- - !ruby/object:Gem::Dependency
273
- name: will_paginate
274
- requirement: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - '='
277
- - !ruby/object:Gem::Version
278
- version: 3.3.1
279
- type: :development
280
- prerelease: false
281
- version_requirements: !ruby/object:Gem::Requirement
282
- requirements:
283
- - - '='
284
- - !ruby/object:Gem::Version
285
- version: 3.3.1
286
272
  description: Playbook Design System. Built for Nitro, but powering all.
287
273
  email:
288
274
  - nitroux@powerhrg.com
@@ -1350,9 +1336,9 @@ files:
1350
1336
  - app/pb_kits/playbook/pb_line_graph/lineGraphSettings.js
1351
1337
  - app/pb_kits/playbook/pb_line_graph/line_graph.html.erb
1352
1338
  - app/pb_kits/playbook/pb_line_graph/line_graph.rb
1339
+ - app/pb_kits/playbook/pb_list/_list.jsx
1353
1340
  - app/pb_kits/playbook/pb_list/_list.scss
1354
- - app/pb_kits/playbook/pb_list/_list.tsx
1355
- - app/pb_kits/playbook/pb_list/_list_item.tsx
1341
+ - app/pb_kits/playbook/pb_list/_list_item.jsx
1356
1342
  - app/pb_kits/playbook/pb_list/_list_mixin.scss
1357
1343
  - app/pb_kits/playbook/pb_list/docs/_description.md
1358
1344
  - app/pb_kits/playbook/pb_list/docs/_list_borderless.html.erb
@@ -1477,11 +1463,6 @@ files:
1477
1463
  - app/pb_kits/playbook/pb_online_status/docs/index.js
1478
1464
  - app/pb_kits/playbook/pb_online_status/online_status.html.erb
1479
1465
  - app/pb_kits/playbook/pb_online_status/online_status.rb
1480
- - app/pb_kits/playbook/pb_paginate/_paginate.scss
1481
- - app/pb_kits/playbook/pb_paginate/docs/_paginate_default.html.erb
1482
- - app/pb_kits/playbook/pb_paginate/docs/example.yml
1483
- - app/pb_kits/playbook/pb_paginate/paginate.html.erb
1484
- - app/pb_kits/playbook/pb_paginate/paginate.rb
1485
1466
  - app/pb_kits/playbook/pb_passphrase/_passphrase.jsx
1486
1467
  - app/pb_kits/playbook/pb_passphrase/_passphrase.scss
1487
1468
  - app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.html.erb
@@ -1552,8 +1533,8 @@ files:
1552
1533
  - app/pb_kits/playbook/pb_pill/docs/index.js
1553
1534
  - app/pb_kits/playbook/pb_pill/pill.html.erb
1554
1535
  - app/pb_kits/playbook/pb_pill/pill.rb
1536
+ - app/pb_kits/playbook/pb_popover/_popover.jsx
1555
1537
  - app/pb_kits/playbook/pb_popover/_popover.scss
1556
- - app/pb_kits/playbook/pb_popover/_popover.tsx
1557
1538
  - app/pb_kits/playbook/pb_popover/docs/_description.md
1558
1539
  - app/pb_kits/playbook/pb_popover/docs/_popover_close.html.erb
1559
1540
  - app/pb_kits/playbook/pb_popover/docs/_popover_close.jsx
@@ -1568,10 +1549,9 @@ files:
1568
1549
  - app/pb_kits/playbook/pb_popover/docs/_popover_z_index.jsx
1569
1550
  - app/pb_kits/playbook/pb_popover/docs/example.yml
1570
1551
  - app/pb_kits/playbook/pb_popover/docs/index.js
1571
- - app/pb_kits/playbook/pb_popover/index.ts
1552
+ - app/pb_kits/playbook/pb_popover/index.js
1572
1553
  - app/pb_kits/playbook/pb_popover/popover.html.erb
1573
1554
  - app/pb_kits/playbook/pb_popover/popover.rb
1574
- - app/pb_kits/playbook/pb_popover/popover.test.js
1575
1555
  - app/pb_kits/playbook/pb_progress_pills/_progress_pills.jsx
1576
1556
  - app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss
1577
1557
  - app/pb_kits/playbook/pb_progress_pills/docs/_description.md
@@ -2280,7 +2260,6 @@ files:
2280
2260
  - app/pb_kits/playbook/utilities/_max_width.scss
2281
2261
  - app/pb_kits/playbook/utilities/_mixins.scss
2282
2262
  - app/pb_kits/playbook/utilities/_number_spacing.scss
2283
- - app/pb_kits/playbook/utilities/_pagination.scss
2284
2263
  - app/pb_kits/playbook/utilities/_positioning.scss
2285
2264
  - app/pb_kits/playbook/utilities/_shadow.scss
2286
2265
  - app/pb_kits/playbook/utilities/_spacing.scss
@@ -2346,7 +2325,6 @@ files:
2346
2325
  - lib/playbook/markdown/template_handler.rb
2347
2326
  - lib/playbook/number_spacing.rb
2348
2327
  - lib/playbook/order.rb
2349
- - lib/playbook/pagination_renderer.rb
2350
2328
  - lib/playbook/pb_doc_helper.rb
2351
2329
  - lib/playbook/pb_forms_helper.rb
2352
2330
  - lib/playbook/pb_kit_helper.rb
@@ -1,97 +0,0 @@
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,3 +0,0 @@
1
- .pb_paginate {
2
-
3
- }
@@ -1,19 +0,0 @@
1
- <%= pb_rails("title", props: { size: 4, text: "Default will_paginate"}) %>
2
- <%= will_paginate @users %>
3
- <%= pb_rails("body") do %>
4
- You need to add: <code> require 'will_paginate'</code> in your app to use.
5
- <% end %>
6
- <br><br>
7
-
8
- <%= pb_rails("title", props: { size: 4, text: "Playbook Renderer"}) %>
9
- <%= will_paginate @users, renderer: Playbook::Pagination::Rails %>
10
- <%= pb_rails("body") do %>
11
- You need to also add: <code>require "playbook/pagination_renderer"</code> in your app to use.
12
- <% end %>
13
- <br><br>
14
-
15
- <%= pb_rails("title", props: { size: 4, text: "Playbook Kit (Passthrough)"}) %>
16
- <%= pb_rails("paginate", props: { stragety: "will_paginate", model: @users }) %>
17
- <%= pb_rails("body") do %>
18
- Same...You need to also add: <code>require "playbook/pagination_renderer"</code> in your app to use.
19
- <% end %>
@@ -1,6 +0,0 @@
1
- examples:
2
-
3
- rails:
4
- - paginate_default: Default
5
-
6
-
@@ -1,5 +0,0 @@
1
- <%= will_paginate object.model, renderer: Playbook::Pagination::Rails %>
2
-
3
- <%# Couldn't get this working %>
4
- <%# Need a Rails Dev to look %>
5
- <%# <%= eval(object.stragety) object.model, renderer: Playbook::Pagination::Rails %>
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Playbook
4
- module PbPaginate
5
- class Paginate < ::Playbook::KitBase
6
- prop :stragety # Need to add protection
7
- prop :model # Need to add protection
8
-
9
- def classname
10
- generate_classname("pb_paginate")
11
- end
12
- end
13
- end
14
- end
@@ -1,239 +0,0 @@
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,222 +0,0 @@
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
- });
@@ -1,69 +0,0 @@
1
- @import "../tokens/colors";
2
- @import "../tokens/typography";
3
- @import "../tokens/border_radius";
4
- @import "../tokens/shadows";
5
-
6
- .pb_pagination {
7
- display: inline-block;
8
- border-radius: $border_rad_light;
9
- border: 1px solid $border_light;
10
- background-color: $white;
11
- padding: 3px 0px 3.6px 0px;
12
- margin: 10px 0;
13
- li {
14
- display: inline;
15
- > a, li > span {
16
- padding: 7px 13px;
17
- text-decoration: none;
18
- margin-left: -1px;
19
- border: 0 !important;
20
- }}
21
- li:first-child > a, li:first-child > span {
22
- padding: 7px 13px;
23
- margin-left: .5px;
24
- border-right: 1px solid $border_light !important;
25
- z-index: 2;
26
- }
27
- li:last-child > a, li:last-child > span {
28
- padding: 7px 13px;
29
- margin-right: .5px;
30
- border-left: 1px solid $border_light !important;
31
- z-index: 2;
32
- }
33
- a {
34
- color: $text_lt_default !important;
35
- font-size: $text_small;
36
- font-weight: $regular;
37
- border: none;
38
-
39
- &:hover {
40
- background-color: $active_light;
41
- color: $primary !important;
42
- border-radius: $border_rad_light;
43
- }
44
-
45
- &:focus {
46
- outline: 1px solid $primary !important;
47
- border-radius: $border_rad_light;
48
- outline-offset: -1px;
49
- }
50
- }
51
- .active > span {
52
- background-color: $primary !important;
53
- border-radius: $border_rad_light;
54
- color: #fff;
55
- padding: 7px 13px;
56
- border: 0 !important;
57
- text-decoration: none;
58
- font-weight: $bold;
59
- font-size: $text_small;
60
-
61
- &:hover {
62
- box-shadow: $shadow_deeper;
63
- }
64
- }
65
- .disabled > span {
66
- padding: 7px 10px;
67
- font-size: $text_small;
68
- }
69
- }
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "will_paginate/view_helpers/action_view"
4
-
5
- module Playbook
6
- module Pagination
7
- class Rails < WillPaginate::ActionView::LinkRenderer
8
- def container_attributes
9
- { class: "pb_pagination" }
10
- end
11
-
12
- def page_number(page)
13
- if page == current_page
14
- tag("li", tag("span", page), class: "active")
15
- else
16
- tag("li", link(page, page, rel: rel_value(page)))
17
- end
18
- end
19
-
20
- def previous_or_next_page(page, text, classname)
21
- if page
22
- tag("li", link(text, page), class: classname)
23
- else
24
- tag("li", tag("span", text), class: "%s disabled")
25
- end
26
- end
27
-
28
- def gap; end
29
-
30
- def previous_page
31
- num = @collection.current_page > 1 && @collection.current_page - 1
32
- previous_or_next_page(num, "<i class='far fa-chevron-left fa-xs'></i>", "prev")
33
- end
34
-
35
- def next_page
36
- num = @collection.current_page < @collection.total_pages && @collection.current_page + 1
37
- previous_or_next_page(num, "<i class='far fa-chevron-right fa-xs'></i>", "next")
38
- end
39
- end
40
- end
41
- end