playbook_ui 12.4.0.pre.alpha.map1 → 12.5.0.pre.alpha.datepicker1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_awesome/_awesome.scss +3 -0
  3. data/app/pb_kits/playbook/pb_awesome/_awesome.tsx +41 -0
  4. data/app/pb_kits/playbook/pb_awesome/awesome.html.erb +7 -0
  5. data/app/pb_kits/playbook/pb_awesome/awesome.rb +8 -0
  6. data/app/pb_kits/playbook/pb_awesome/awesome.test.jsx +17 -0
  7. data/app/pb_kits/playbook/pb_awesome/docs/_awesome_default.html.erb +1 -0
  8. data/app/pb_kits/playbook/pb_awesome/docs/_awesome_default.jsx +12 -0
  9. data/app/pb_kits/playbook/pb_awesome/docs/example.yml +9 -0
  10. data/app/pb_kits/playbook/pb_awesome/docs/index.js +1 -0
  11. data/app/pb_kits/playbook/pb_cool/_cool.scss +3 -0
  12. data/app/pb_kits/playbook/pb_cool/_cool.tsx +41 -0
  13. data/app/pb_kits/playbook/pb_cool/cool.html.erb +7 -0
  14. data/app/pb_kits/playbook/pb_cool/cool.rb +8 -0
  15. data/app/pb_kits/playbook/pb_cool/cool.test.jsx +17 -0
  16. data/app/pb_kits/playbook/pb_cool/docs/_cool_default.html.erb +1 -0
  17. data/app/pb_kits/playbook/pb_cool/docs/_cool_default.jsx +12 -0
  18. data/app/pb_kits/playbook/pb_cool/docs/example.yml +9 -0
  19. data/app/pb_kits/playbook/pb_cool/docs/index.js +1 -0
  20. data/app/pb_kits/playbook/pb_coolness/_coolness.scss +3 -0
  21. data/app/pb_kits/playbook/pb_coolness/_coolness.tsx +41 -0
  22. data/app/pb_kits/playbook/pb_coolness/coolness.html.erb +7 -0
  23. data/app/pb_kits/playbook/pb_coolness/coolness.rb +8 -0
  24. data/app/pb_kits/playbook/pb_coolness/coolness.test.jsx +17 -0
  25. data/app/pb_kits/playbook/pb_coolness/docs/_coolness_default.html.erb +1 -0
  26. data/app/pb_kits/playbook/pb_coolness/docs/_coolness_default.jsx +12 -0
  27. data/app/pb_kits/playbook/pb_coolness/docs/example.yml +9 -0
  28. data/app/pb_kits/playbook/pb_coolness/docs/index.js +1 -0
  29. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +9 -6
  30. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +77 -56
  31. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +1 -1
  32. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +1 -0
  33. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +68 -0
  34. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.tsx +55 -0
  35. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.test.js +41 -0
  36. data/app/pb_kits/playbook/pb_map/docs/_map_default.jsx +0 -1
  37. data/app/pb_kits/playbook/pb_map/docs/_map_default.md +3 -3
  38. data/app/pb_kits/playbook/pb_map/docs/_map_with_plugin.jsx +7 -6
  39. data/app/pb_kits/playbook/pb_message/{_message.jsx → _message.tsx} +35 -35
  40. data/app/pb_kits/playbook/pb_message/message.test.js +63 -0
  41. data/app/pb_kits/playbook/pb_passphrase/{_passphrase.jsx → _passphrase.tsx} +56 -56
  42. data/app/pb_kits/playbook/pb_phone_number_input/PhoneNumberHelper.js +12 -0
  43. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_default.html.erb +3 -0
  44. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_initial_country.html.erb +3 -0
  45. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_only_countries.html.erb +4 -0
  46. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_preferred_countries.html.erb +4 -0
  47. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +3 -0
  48. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.html.erb +15 -0
  49. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +43 -0
  50. data/app/pb_kits/playbook/pb_popover/_popover.tsx +3 -3
  51. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +1 -1
  52. data/app/pb_kits/playbook/pb_test/_test.scss +3 -0
  53. data/app/pb_kits/playbook/pb_test/_test.tsx +41 -0
  54. data/app/pb_kits/playbook/pb_test/docs/_test_default.html.erb +1 -0
  55. data/app/pb_kits/playbook/pb_test/docs/_test_default.jsx +12 -0
  56. data/app/pb_kits/playbook/pb_test/docs/example.yml +9 -0
  57. data/app/pb_kits/playbook/pb_test/docs/index.js +1 -0
  58. data/app/pb_kits/playbook/pb_test/test.html.erb +7 -0
  59. data/app/pb_kits/playbook/pb_test/test.rb +8 -0
  60. data/app/pb_kits/playbook/pb_test/test.test.jsx +17 -0
  61. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
  62. data/app/pb_kits/playbook/playbook-rails-react-bindings.js +2 -0
  63. data/lib/playbook/version.rb +2 -2
  64. metadata +51 -5
  65. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.jsx +0 -37
@@ -0,0 +1,68 @@
1
+ @import "../../pb_textarea/textarea_mixin";
2
+
3
+ [class^=pb_date_picker_kit] {
4
+ margin-bottom: $space_sm;
5
+
6
+ .pb_date_picker_kit_label {
7
+ margin-bottom: $space_xs;
8
+ display: block;
9
+ }
10
+
11
+ .date_picker_input_wrapper {
12
+ display: block;
13
+
14
+ input::placeholder,
15
+ .date_picker_input .placeholder {
16
+ @include pb_body_light;
17
+ }
18
+
19
+ input,
20
+ .date_picker_input {
21
+ max-height: 45px;
22
+ @include pb_textarea_light;
23
+ overflow: hidden;
24
+ }
25
+
26
+ input:hover,
27
+ .date_picker_input:hover {
28
+ background-color: rgba($focus_input_light, $opacity_5);
29
+ }
30
+
31
+ input:focus,
32
+ .date_picker_input:focus,
33
+ input:-webkit-autofill:focus,
34
+ .date_picker_input:-webkit-autofill:focus {
35
+ @include pb_textarea_focus;
36
+ @include transition_default;
37
+ border-color: $primary;
38
+ background-color: rgba($focus_input_light, $opacity_5);
39
+ }
40
+ }
41
+
42
+ &.error {
43
+ .date_picker_input_wrapper {
44
+ [class*=pb_body_kit] {
45
+ margin-top: $space_xs / 2;
46
+ }
47
+
48
+ input,
49
+ .date_picker_input {
50
+ border-color: $error;
51
+ }
52
+ }
53
+ }
54
+
55
+ &.inline {
56
+ .date_picker_input_wrapper input::placeholder,
57
+ .date_picker_input_wrapper .date_picker_input .placeholder {
58
+ opacity: 1;
59
+ }
60
+
61
+ &:not(:hover) {
62
+ .date_picker_input_wrapper input:not(:focus) {
63
+ background-color: transparent;
64
+ border-color: transparent;
65
+ }
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,55 @@
1
+ import React from 'react'
2
+ import classnames from 'classnames'
3
+
4
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
5
+ import { globalProps } from '../utilities/globalProps'
6
+
7
+ import Body from '../pb_body/_body'
8
+ import Icon from '../pb_icon/_icon'
9
+
10
+ type LoadingInlineProps = {
11
+ align?: "left" | "center" | "right",
12
+ aria?: { [key: string]: string },
13
+ className?: string,
14
+ data?: { [key: string]: string },
15
+ id?: string,
16
+ }
17
+
18
+ const LoadingInline = (props: LoadingInlineProps) => {
19
+ const {
20
+ align = 'left',
21
+ aria = {},
22
+ className,
23
+ data = {},
24
+ id,
25
+ } = props
26
+
27
+ const ariaProps = buildAriaProps(aria)
28
+ const dataProps = buildDataProps(data)
29
+ const classes = classnames(
30
+ buildCss(`pb_loading_inline_kit_${align}`),
31
+ globalProps(props),
32
+ className
33
+ )
34
+
35
+ return (
36
+ <div
37
+ {...ariaProps}
38
+ {...dataProps}
39
+ className={classes}
40
+ id={id}
41
+ >
42
+ <Body color="light">
43
+ <Icon
44
+ aria={{ label: 'loading icon' }}
45
+ fixedWidth
46
+ icon="spinner"
47
+ pulse
48
+ />
49
+ {' Loading'}
50
+ </Body>
51
+ </div>
52
+ )
53
+ }
54
+
55
+ export default LoadingInline
@@ -0,0 +1,41 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+ import LoadingInline from './_loading_inline'
4
+
5
+ const testId = "loadingInline"
6
+
7
+ test('should render custom class and data', () => {
8
+ render(
9
+ <LoadingInline
10
+ className='custom-class'
11
+ data={{ testid: testId }}
12
+ />
13
+ )
14
+
15
+ const kit = screen.getByTestId(testId)
16
+ expect(kit).toHaveClass('custom-class')
17
+ })
18
+
19
+ test('should render id', () => {
20
+ render(
21
+ <LoadingInline
22
+ data={{ testid: testId }}
23
+ id={testId}
24
+ />
25
+ )
26
+
27
+ const kit = screen.getByTestId(testId)
28
+ expect(kit).toHaveProperty('id', testId)
29
+ })
30
+
31
+ test('should render aria-label', () => {
32
+ render(
33
+ <LoadingInline
34
+ aria={{ label: testId }}
35
+ data={{ testid: testId }}
36
+ />
37
+ )
38
+
39
+ const kit = screen.getByTestId(testId)
40
+ expect(kit).toHaveAttribute('aria-label', testId)
41
+ })
@@ -1,6 +1,5 @@
1
1
  import React, { useRef, useEffect, useState } from 'react'
2
2
  import { Map } from '../../'
3
- import "maplibre-gl/dist/maplibre-gl.css"
4
3
  import maplibregl from 'maplibre-gl'
5
4
  import mapTheme from '../pbMapTheme'
6
5
 
@@ -2,12 +2,12 @@ This kit provides a wrapping class to place around the MapLibre library. Complet
2
2
 
3
3
  Basic setup to start using MapLibre:
4
4
  - Install the npm package using `yarn add maplibre-gl`
5
- - import the maplibre-gl CSS using `import "maplibre-gl/dist/maplibre-gl.css"` OR include a link to the CSS file as a CDN in your stylesheet using the following syntax: `@import url("https://unpkg.com/maplibre-gl@2.4.0/dist/maplibre-gl.css");`
5
+ - To include the maplibre css, include a link to the CSS file as a CDN in your stylesheet using the following syntax: `@import url("https://unpkg.com/maplibre-gl@2.4.0/dist/maplibre-gl.css");`
6
6
  OR include it as a link in the <head> tag `<link href='https://unpkg.com/maplibre-gl@2.4.0/dist/maplibre-gl.css' rel='stylesheet' />`
7
- - To use Maplibre, you must also set a height on the containing div.
8
7
  - You can now use MapLibre within the Map Kit as shown in this example.
9
8
 
10
9
  __Notes__ :
11
- - The MapLibre Marker allows us to pass it a HEX value as a color prop but for Playbook styling we recommend importing our `MapTheme` file and passing `mapTheme.marker` to the Marker color prop.
12
10
  - To enable custom buttons, set `zoomBtns` and `flyTo` to true and pass in `zoomInClick`, `zoomOutClick` and `flyToClick` as shown in this doc example.
11
+ - Use `mapTheme.marker` to set the Marker color.
12
+ - To use Maplibre, you must also set a height and width to the containing div (.pb_map) and set position to 'relative'.
13
13
  - `scrollZoom` has been disabled in these doc examples for page usability
@@ -2,12 +2,14 @@ import React, { useRef, useEffect } from 'react'
2
2
  import { Map } from '../../'
3
3
  import maplibregl from 'maplibre-gl'
4
4
  import MapboxDraw from "@mapbox/mapbox-gl-draw";
5
- import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css'
6
5
  import mapTheme from '../pbMapTheme'
7
6
 
8
7
  const MapWithPlugin = (props) => {
8
+ //set Map instance to access from outside useEffect
9
+ const mapContainerRef = useRef(null)
9
10
 
10
- const mapContainerRef = useRef(null)
11
+ //Set default position
12
+ const defaultPosition = [-75.379143, 39.831200]
11
13
 
12
14
  //This function should contain all maplibre related code
13
15
  const loadMap = ( { target: map }) => {
@@ -15,11 +17,11 @@ const MapWithPlugin = (props) => {
15
17
  /* eslint-disable-next-line */
16
18
  const marker = new maplibregl.Marker({
17
19
  color: mapTheme.marker,
18
- }).setLngLat([-75.379143, 39.831200])
20
+ }).setLngLat(defaultPosition)
19
21
  .setPopup(new maplibregl.Popup({className: 'map_popup', closeButton: false}).setHTML(`<h4 class="pb_title_kit_size_4">Hello World!</h4>`)) // add popup
20
22
  .addTo(map);
21
23
 
22
- //add zoom controls
24
+ //add maplibre default zoom controls
23
25
  map.addControl(new maplibregl.NavigationControl({showCompass: false}))
24
26
 
25
27
  // disable map zoom when using scroll
@@ -39,9 +41,8 @@ const MapWithPlugin = (props) => {
39
41
  useEffect(() => {
40
42
  new maplibregl.Map({
41
43
  container: mapContainerRef.current,
42
- style: 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json',
43
44
  center: [-75.379143, 39.831200],
44
- zoom: 13,
45
+ ...mapTheme.mapConfig
45
46
  }).on('load', loadMap)
46
47
  }, [])
47
48
 
@@ -13,11 +13,11 @@ import Timestamp from '../pb_timestamp/_timestamp'
13
13
  import Title from '../pb_title/_title'
14
14
 
15
15
  type MessageProps = {
16
- aria: object,
16
+ aria: { [key: string]: string },
17
17
  avatarName?: string,
18
- avatarStatus?: string,
18
+ avatarStatus?: "away" | "offline" | "online",
19
19
  avatarUrl?: string,
20
- children?: array<React.ReactNode> | React.ReactNode,
20
+ children?: React.ReactChild[] | React.ReactChild,
21
21
  className?: string,
22
22
  data?: object,
23
23
  id?: string,
@@ -61,53 +61,53 @@ const Message = (props: MessageProps) => {
61
61
 
62
62
  return (
63
63
  <div
64
- {...ariaProps}
65
- {...dataProps}
66
- className={classes}
67
- id={id}
64
+ {...ariaProps}
65
+ {...dataProps}
66
+ className={classes}
67
+ id={id}
68
68
  >
69
- <If condition={shouldDisplayAvatar}>
69
+ {shouldDisplayAvatar &&
70
70
  <Avatar
71
- imageUrl={avatarUrl}
72
- name={avatarName}
73
- size="xs"
74
- status={avatarStatus}
71
+ imageUrl={avatarUrl}
72
+ name={avatarName}
73
+ size="xs"
74
+ status={avatarStatus}
75
75
  />
76
- </If>
76
+ }
77
77
  <div className="content_wrapper">
78
78
  <Flex
79
- justify={alignTimestamp === 'left' ? 'none' : 'between'}
80
- orientation="row"
79
+ justify={alignTimestamp === 'left' ? 'none' : 'between'}
80
+ orientation="row"
81
81
  >
82
- <If condition={label}>
82
+ {label &&
83
83
  <Title
84
- className="message_title"
85
- size={4}
86
- text={label}
84
+ className="message_title"
85
+ size={4}
86
+ text={label}
87
87
  />
88
- </If>
88
+ }
89
89
  <Timestamp
90
- className={`pull-${alignTimestamp} ${timestampObject ? 'message_humanized_time' : null}`}
91
- text={timestamp}
92
- timezone={timezone}
90
+ className={`pull-${alignTimestamp} ${timestampObject ? 'message_humanized_time' : null}`}
91
+ text={timestamp}
92
+ timestamp={''}
93
+ timezone={timezone}
93
94
  />
94
- <If condition={timestampObject}>
95
+ {timestampObject &&
95
96
  <Timestamp
96
- className={`pull-${alignTimestamp} message_timestamp`}
97
- timestamp={timestampObject}
98
- timezone={timezone}
97
+ className={`pull-${alignTimestamp} message_timestamp`}
98
+ text={''}
99
+ timestamp={timestampObject}
100
+ timezone={timezone}
99
101
  />
100
- </If>
102
+ }
101
103
  </Flex>
102
- <If condition={message}>
104
+ {message &&
103
105
  <Body
104
- className="pb_message_body"
105
- text={message}
106
+ className="pb_message_body"
107
+ text={message}
106
108
  />
107
- </If>
108
- <If condition={children}>
109
- { children }
110
- </If>
109
+ }
110
+ {children}
111
111
  </div>
112
112
  </div>
113
113
  )
@@ -0,0 +1,63 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+ import Message from './_message'
4
+ import Image from './../pb_image/_image'
5
+
6
+ const testId = "message"
7
+
8
+ const MessageDefault = () => {
9
+ return (
10
+ <>
11
+ <Message
12
+ avatarName="Becca Jacobs"
13
+ avatarUrl="https://randomuser.me/api/portraits/women/50.jpg"
14
+ className='custom-class'
15
+ data={{ testid: testId }}
16
+ label="Lucille Sanchez"
17
+ message="Application for Kate Smith is waiting for your approval"
18
+ timestamp="2 days ago"
19
+ >
20
+ <Image
21
+ alt="picture of a misty forest"
22
+ size="md"
23
+ url="https://unsplash.it/500/400/?image=634"
24
+ />
25
+ </Message>
26
+ </>
27
+ )
28
+ }
29
+
30
+ test('should render message', () => {
31
+ render(<MessageDefault />)
32
+
33
+ const kit = screen.getByText('Application for Kate Smith is waiting for your approval')
34
+ expect(kit).toBeInTheDocument()
35
+ })
36
+
37
+ test('should render label', () => {
38
+ render(<MessageDefault />)
39
+
40
+ const kit = screen.getByText('Lucille Sanchez')
41
+ expect(kit).toBeInTheDocument()
42
+ })
43
+
44
+ test('should render timestamp', () => {
45
+ render(<MessageDefault />)
46
+
47
+ const kit = screen.getByText('2 days ago')
48
+ expect(kit).toBeInTheDocument()
49
+ })
50
+
51
+ test('should render custom class and data', () => {
52
+ render(<MessageDefault />)
53
+
54
+ const kit = screen.getByTestId(testId)
55
+ expect(kit).toHaveClass('custom-class')
56
+ })
57
+
58
+ test('should render a children', () => {
59
+ render(<MessageDefault />)
60
+
61
+ const kit = screen.getByAltText('picture of a misty forest')
62
+ expect(kit).toBeInTheDocument()
63
+ })
@@ -15,7 +15,7 @@ import PbReactPopover from '../pb_popover/_popover'
15
15
  import TextInput from '../pb_text_input/_text_input'
16
16
 
17
17
  type PassphraseProps = {
18
- aria?: object,
18
+ aria?: { [key: string]: string },
19
19
  confirmation?: boolean,
20
20
  className?: string,
21
21
  data?: object,
@@ -23,7 +23,7 @@ type PassphraseProps = {
23
23
  id?: string,
24
24
  inputProps?: {},
25
25
  label?: string,
26
- onChange: (String) => void,
26
+ onChange: (inputValue: String) => void,
27
27
  showTipsBelow?: "always" | "xs" | "sm" | "md" | "lg" | "xl",
28
28
  tips?: Array<string>,
29
29
  uncontrolled?: boolean,
@@ -40,7 +40,7 @@ const Passphrase = (props: PassphraseProps) => {
40
40
  id,
41
41
  inputProps = {},
42
42
  label = confirmation ? "Confirm Passphrase" : "Passphrase",
43
- onChange = () => {},
43
+ onChange = () => { },
44
44
  showTipsBelow = "always",
45
45
  tips = [],
46
46
  uncontrolled = false,
@@ -62,11 +62,11 @@ const Passphrase = (props: PassphraseProps) => {
62
62
  )
63
63
 
64
64
  const toggleShowPopover = () => setShowPopover(!showPopover)
65
- const handleShouldClosePopover = (shouldClosePopover) => {
65
+ const handleShouldClosePopover = (shouldClosePopover: boolean) => {
66
66
  setShowPopover(!shouldClosePopover)
67
67
  }
68
68
 
69
- const toggleShowPassphrase = (e) => {
69
+ const toggleShowPassphrase = (e: React.MouseEvent<HTMLElement>) => {
70
70
  e.preventDefault()
71
71
  setShowPassphrase(!showPassphrase)
72
72
  }
@@ -86,54 +86,54 @@ const Passphrase = (props: PassphraseProps) => {
86
86
 
87
87
  const popoverReference = (
88
88
  <CircleIconButton
89
- className={tipClass}
90
- dark={dark}
91
- icon="info-circle"
92
- onClick={toggleShowPopover}
93
- variant="link"
89
+ className={tipClass}
90
+ dark={dark}
91
+ icon="info-circle"
92
+ onClick={toggleShowPopover}
93
+ variant="link"
94
94
  />
95
95
  )
96
96
 
97
97
  return (
98
- <div
99
- {...ariaProps}
100
- {...dataProps}
101
- className={classes}
102
- id={id}
98
+ <div
99
+ {...ariaProps}
100
+ {...dataProps}
101
+ className={classes}
102
+ id={id}
103
103
  >
104
104
  <label>
105
105
  <Flex align="baseline">
106
- <Caption
107
- className="passphrase-label"
108
- text={label}
106
+ <Caption
107
+ className="passphrase-label"
108
+ text={label}
109
109
  />
110
- <If condition={tips.length > 0 && !confirmation}>
110
+ {tips.length > 0 && !confirmation &&
111
111
  <PbReactPopover
112
- className="passphrase-tips"
113
- closeOnClick="outside"
114
- placement="right"
115
- reference={popoverReference}
116
- shouldClosePopover={handleShouldClosePopover}
117
- show={showPopover}
112
+ className="passphrase-tips"
113
+ closeOnClick="outside"
114
+ placement="right"
115
+ reference={popoverReference}
116
+ shouldClosePopover={handleShouldClosePopover}
117
+ show={showPopover}
118
118
  >
119
- <Flex
120
- align="center"
121
- orientation="column"
119
+ <Flex
120
+ align="center"
121
+ orientation="column"
122
122
  >
123
- <Caption
124
- marginBottom="xs"
125
- text="Tips for a good passphrase"
123
+ <Caption
124
+ marginBottom="xs"
125
+ text="Tips for a good passphrase"
126
126
  />
127
127
  <div>
128
128
  {tips.map((tip, i) => (
129
- <Caption
130
- key={i}
131
- marginBottom="xs"
132
- size="xs"
129
+ <Caption
130
+ key={i}
131
+ marginBottom="xs"
132
+ size="xs"
133
133
  >
134
- <Icon
135
- icon="shield-check"
136
- marginRight="xs"
134
+ <Icon
135
+ icon="shield-check"
136
+ marginRight="xs"
137
137
  />
138
138
  {tip}
139
139
  </Caption>
@@ -141,34 +141,34 @@ const Passphrase = (props: PassphraseProps) => {
141
141
  </div>
142
142
  </Flex>
143
143
  </PbReactPopover>
144
- </If>
144
+ }
145
145
  </Flex>
146
146
  <div className="passphrase-text-input-wrapper">
147
147
  <TextInput
148
- className="passphrase-text-input"
149
- dark={dark}
150
- marginBottom="xs"
151
- onChange={handleChange}
152
- placeholder="Enter a passphrase..."
153
- type={showPassphrase ? "text" : "password"}
154
- value={displayValue}
155
- {...inputProps}
148
+ className="passphrase-text-input"
149
+ dark={dark}
150
+ marginBottom="xs"
151
+ onChange={handleChange}
152
+ placeholder="Enter a passphrase..."
153
+ type={showPassphrase ? "text" : "password"}
154
+ value={displayValue}
155
+ {...inputProps}
156
156
  />
157
- <span
158
- className="show-passphrase-icon"
159
- onClick={toggleShowPassphrase}
157
+ <span
158
+ className="show-passphrase-icon"
159
+ onClick={toggleShowPassphrase}
160
160
  >
161
161
  <Body
162
- className={showPassphrase ? "hide-icon" : ""}
163
- color="light"
164
- dark={dark}
162
+ className={showPassphrase ? "hide-icon" : ""}
163
+ color="light"
164
+ dark={dark}
165
165
  >
166
166
  <Icon icon="eye-slash" />
167
167
  </Body>
168
168
  <Body
169
- className={showPassphrase ? "" : "hide-icon"}
170
- color="light"
171
- dark={dark}
169
+ className={showPassphrase ? "" : "hide-icon"}
170
+ color="light"
171
+ dark={dark}
172
172
  >
173
173
  <Icon icon="eye" />
174
174
  </Body>
@@ -0,0 +1,12 @@
1
+
2
+ const PhoneNumberHelper = () => {
3
+ // window.addEventListener('DOMContentLoaded', () => {
4
+ for (let i = 0; i < window.intlTelInputGlobals.getCountryData().length; i++) {
5
+ let country = window.intlTelInputGlobals.getCountryData()[i]
6
+ country.name = country.name.split("(")[0].trim()
7
+ console.log(country.name)
8
+ }
9
+ // })
10
+ };
11
+
12
+ export default PhoneNumberHelper;
@@ -0,0 +1,3 @@
1
+ <%= pb_rails("phone_number_input", props: {
2
+ id: "hello"
3
+ }) %>
@@ -0,0 +1,3 @@
1
+ <%= pb_rails("phone_number_input", props: {
2
+ initial_country: "br"
3
+ }) %>
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("phone_number_input", props: {
2
+ initial_country: "br",
3
+ only_countries: ['us', 'br']
4
+ }) %>
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("phone_number_input", props: {
2
+ initial_country: "br",
3
+ preferred_countries: ['us', 'br', 'ph', 'gb']
4
+ }) %>
@@ -5,3 +5,6 @@ examples:
5
5
  - phone_number_input_preferred_countries: Preferred Countries
6
6
  - phone_number_input_initial_country: Initial Country
7
7
  - phone_number_input_only_countries: Limited Countries
8
+
9
+ rails:
10
+ - phone_number_input_default: Default
@@ -0,0 +1,15 @@
1
+ <%= react_component("PhoneNumberInput", object.phone_number_input_options) %>
2
+
3
+ <script>
4
+ const formatToGlobalCountryName = () => {
5
+ return countryName.split('(')[0].trim()
6
+ }
7
+
8
+ const formatAllCountries = () => {
9
+ let countryData = window.intlTelInputGlobals.getCountryData()
10
+ for (let i = 0; i < countryData.length; i++) {
11
+ let country = countryData[i]
12
+ country.name = formatToGlobalCountryName(country.name)
13
+ }
14
+ }
15
+ </script>