playbook_ui 12.15.0 → 12.16.0.pre.alpha.tiptaptestingpart1528

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_background/_background.tsx +1 -1
  3. data/app/pb_kits/playbook/pb_background/background.rb +1 -1
  4. data/app/pb_kits/playbook/pb_badge/_badge.scss +1 -0
  5. data/app/pb_kits/playbook/pb_badge/_badge.tsx +1 -1
  6. data/app/pb_kits/playbook/pb_badge/badge.rb +5 -1
  7. data/app/pb_kits/playbook/pb_badge/badge.test.js +16 -1
  8. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +3 -3
  9. data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +2 -2
  10. data/app/pb_kits/playbook/pb_enhanced_element/index.ts +1 -1
  11. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.tsx +5 -5
  12. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +1 -1
  13. data/app/pb_kits/playbook/pb_nav/_item.tsx +6 -6
  14. data/app/pb_kits/playbook/pb_nav/_nav.tsx +2 -2
  15. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +0 -5
  16. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +0 -4
  17. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/EditorButton.tsx +49 -0
  18. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/EditorTypes.ts +9 -0
  19. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/Toolbar.tsx +62 -0
  20. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx +128 -0
  21. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarHistory.tsx +45 -0
  22. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarNodes.tsx +59 -0
  23. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +1 -1
  24. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +23 -9
  25. data/app/pb_kits/playbook/pb_rich_text_editor/_tiptap_styles.scss +192 -0
  26. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_default.jsx +36 -0
  27. data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +1 -0
  28. data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +1 -0
  29. data/app/pb_kits/playbook/pb_table/{_table.jsx → _table.tsx} +9 -11
  30. data/app/pb_kits/playbook/pb_table/{_table_row.jsx → _table_row.tsx} +7 -8
  31. data/app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.html.erb +41 -0
  32. data/app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.jsx +62 -0
  33. data/app/pb_kits/playbook/pb_table/docs/example.yml +2 -0
  34. data/app/pb_kits/playbook/pb_table/docs/index.js +1 -0
  35. data/app/pb_kits/playbook/pb_table/{index.js → index.ts} +4 -4
  36. data/app/pb_kits/playbook/pb_textarea/_textarea.tsx +129 -0
  37. data/app/pb_kits/playbook/pb_textarea/{index.js → index.tsx} +2 -0
  38. data/app/pb_kits/playbook/pb_textarea/textarea.test.js +213 -0
  39. data/app/pb_kits/playbook/tokens/_colors.scss +16 -1
  40. data/lib/playbook/version.rb +2 -2
  41. metadata +23 -13
  42. data/app/pb_kits/playbook/pb_flex/_flex_item.jsx +0 -41
  43. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +0 -135
@@ -0,0 +1,213 @@
1
+ import React from "react"
2
+ import { render, screen } from "../utilities/test-utils"
3
+
4
+ import Textarea from "./_textarea"
5
+
6
+ const testId = "textarea-kit"
7
+
8
+ describe("TextArea Kit Props", () => {
9
+ test("Expects to have correct classname", () => {
10
+ render(
11
+ <Textarea
12
+ data={{ testid: testId }}
13
+ label="Label"
14
+ />
15
+ )
16
+
17
+ const kit = screen.getByTestId(testId)
18
+ expect(kit).toHaveClass("pb_textarea_kit")
19
+ })
20
+
21
+ test("should render aria-label", () => {
22
+ render(
23
+ <Textarea
24
+ aria={{ label: testId }}
25
+ data={{ testid: testId }}
26
+ />
27
+ )
28
+
29
+ const kit = screen.getByTestId(testId)
30
+ expect(kit).toHaveAttribute("aria-label", testId)
31
+ })
32
+
33
+ test("should render custom classname", () => {
34
+ render(
35
+ <Textarea
36
+ className={"text_class"}
37
+ data={{ testid: testId }}
38
+ />
39
+ )
40
+
41
+ const kit = screen.getByTestId(testId)
42
+
43
+ expect(kit).toHaveClass("text_class")
44
+ })
45
+
46
+ test("should render value", () => {
47
+ render(
48
+ <Textarea
49
+ data={{ testid: testId }}
50
+ value={"Default Value"}
51
+ />
52
+ )
53
+
54
+ const kit = screen.getByTestId(testId)
55
+ const textarea = kit.querySelector("textarea")
56
+
57
+ expect(textarea.innerHTML).toBe("Default Value")
58
+ })
59
+
60
+ test("should render disabled", () => {
61
+ render(
62
+ <Textarea
63
+ data={{ testid: testId }}
64
+ disabled={false}
65
+ />
66
+ )
67
+
68
+ const kit = screen.getByTestId(testId)
69
+ const textarea = kit.querySelector("textarea")
70
+
71
+ expect(textarea.disabled).toBe(false)
72
+ })
73
+
74
+ test("should render rows", () => {
75
+ render(
76
+ <Textarea
77
+ data={{ testid: testId }}
78
+ rows={7}
79
+ />
80
+ )
81
+
82
+ const kit = screen.getByTestId(testId)
83
+ const textarea = kit.querySelector("textarea")
84
+
85
+ expect(textarea.rows).toBe(7)
86
+ })
87
+
88
+ test("should render character count", () => {
89
+ render(
90
+ <Textarea
91
+ characterCount={50}
92
+ data={{ testid: testId }}
93
+ />
94
+ )
95
+
96
+ const kit = screen.getByTestId(testId)
97
+ const counter = kit.querySelector(".pb_caption_kit_xs")
98
+
99
+ expect(counter.innerHTML).toBe("50")
100
+ })
101
+
102
+ test("should have inline class", () => {
103
+ render(
104
+ <Textarea
105
+ data={{ testid: testId }}
106
+ inline
107
+ />
108
+ )
109
+
110
+ const kit = screen.getByTestId(testId)
111
+
112
+ expect(kit).toHaveClass("inline")
113
+ })
114
+
115
+ test("should have resize class", () => {
116
+ render(
117
+ <Textarea
118
+ data={{ testid: testId }}
119
+ resize={"none"}
120
+ />
121
+ )
122
+
123
+ const kit = screen.getByTestId(testId)
124
+
125
+ expect(kit).toHaveClass("resize_none")
126
+ })
127
+
128
+ test("should render error", () => {
129
+ render(
130
+ <Textarea
131
+ data={{ testid: testId }}
132
+ error={"error message"}
133
+ />
134
+ )
135
+
136
+ const kit = screen.getByTestId(testId)
137
+ const error = kit.querySelector(".pb_body_kit_negative")
138
+
139
+ expect(kit).toHaveClass("error")
140
+ expect(error.innerHTML).toBe("error message")
141
+ })
142
+
143
+ test("should render label", () => {
144
+ render(
145
+ <Textarea
146
+ data={{ testid: testId }}
147
+ label={"Test Label"}
148
+ />
149
+ )
150
+
151
+ const kit = screen.getByTestId(testId)
152
+ const error = kit.querySelector(".pb_caption_kit_md")
153
+
154
+ expect(error.innerHTML).toBe("Test Label")
155
+ })
156
+
157
+ test("should render max character display", () => {
158
+ render(
159
+ <Textarea
160
+ characterCount={"11"}
161
+ data={{ testid: testId }}
162
+ maxCharacters={"10"}
163
+ />
164
+ )
165
+
166
+ const kit = screen.getByTestId(testId)
167
+ const error = kit.querySelector(".pb_caption_kit_xs")
168
+
169
+ expect(error.innerHTML).toBe("11 / 10")
170
+ })
171
+
172
+ test("should render max character display", () => {
173
+ render(
174
+ <Textarea
175
+ data={{ testid: testId }}
176
+ name={"TestName"}
177
+ />
178
+ )
179
+
180
+ const kit = screen.getByTestId(testId)
181
+ const textarea = kit.querySelector("textarea")
182
+
183
+ expect(textarea.name).toBe("TestName")
184
+ })
185
+
186
+ test("should render placeholder", () => {
187
+ render(
188
+ <Textarea
189
+ data={{ testid: testId }}
190
+ placeholder={"Test Placeholder"}
191
+ />
192
+ )
193
+
194
+ const kit = screen.getByTestId(testId)
195
+ const textarea = kit.querySelector("textarea")
196
+
197
+ expect(textarea.placeholder).toBe("Test Placeholder")
198
+ })
199
+
200
+ test("should be required", () => {
201
+ render(
202
+ <Textarea
203
+ data={{ testid: testId }}
204
+ required
205
+ />
206
+ )
207
+
208
+ const kit = screen.getByTestId(testId)
209
+ const textarea = kit.querySelector("textarea")
210
+
211
+ expect(textarea.required).toBeTruthy()
212
+ })
213
+ })
@@ -63,7 +63,7 @@ $bg_dark_card: #231E3D !default;
63
63
  $background_colors: (
64
64
  bg_light: $bg_light,
65
65
  bg_dark: $bg_dark,
66
- bg_dark_card: $bg_dark_card
66
+ bg_dark_card: $bg_dark_card
67
67
  );
68
68
 
69
69
  /* Card colors ------------------*/
@@ -125,9 +125,11 @@ $shadow_colors: (
125
125
  $text_lt_default: $charcoal !default;
126
126
  $text_lt_light: #687887 !default;
127
127
  $text_lt_lighter: $slate !default;
128
+ $text_lt_success_sm: #157F48 !default;
128
129
  $text_dk_default: $white !default;
129
130
  $text_dk_light: rgba($white, $opacity_6) !default;
130
131
  $text_dk_lighter: rgba($white, $opacity_4) !default;
132
+ $text_dk_success_sm: #00CA74 !default;
131
133
  $text_colors: (
132
134
  text_lt_default: $text_lt_default,
133
135
  text_lt_light: $text_lt_light,
@@ -181,6 +183,7 @@ $primary_secondary: lighten($primary, 10%) !default;
181
183
  $status_colors: (
182
184
  success: $success,
183
185
  success_secondary: $success_secondary,
186
+ success_sm: $text_lt_success_sm,
184
187
  success_subtle: $success_subtle,
185
188
  warning: $warning,
186
189
  warning_secondary: $warning_secondary,
@@ -202,6 +205,18 @@ $status_colors: (
202
205
 
203
206
  $status_color_text: (
204
207
  success: $success,
208
+ success_sm: $text_lt_success_sm,
209
+ warning: darken($warning, 10%),
210
+ error: $error,
211
+ info: $info,
212
+ neutral: darken($neutral, 15%),
213
+ primary: $primary
214
+ );
215
+
216
+ // as we add more dark text colors we can update this variable
217
+ $status_color_text_dark: (
218
+ success: $success,
219
+ success_sm: $text_dk_success_sm,
205
220
  warning: darken($warning, 10%),
206
221
  error: $error,
207
222
  info: $info,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- PREVIOUS_VERSION = "12.14.0"
5
- VERSION = "12.15.0"
4
+ PREVIOUS_VERSION = "12.16.0"
5
+ VERSION = "12.16.0.pre.alpha.tiptaptestingpart1528"
6
6
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.15.0
4
+ version: 12.16.0.pre.alpha.tiptaptestingpart1528
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
8
8
  - Power Devs
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-04-12 00:00:00.000000000 Z
12
+ date: 2023-04-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -979,7 +979,6 @@ files:
979
979
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/index.js
980
980
  - app/pb_kits/playbook/pb_flex/_flex.scss
981
981
  - app/pb_kits/playbook/pb_flex/_flex.tsx
982
- - app/pb_kits/playbook/pb_flex/_flex_item.jsx
983
982
  - app/pb_kits/playbook/pb_flex/_flex_item.scss
984
983
  - app/pb_kits/playbook/pb_flex/_flex_item.tsx
985
984
  - app/pb_kits/playbook/pb_flex/docs/_description.md
@@ -1718,9 +1717,17 @@ files:
1718
1717
  - app/pb_kits/playbook/pb_radio/radio.html.erb
1719
1718
  - app/pb_kits/playbook/pb_radio/radio.rb
1720
1719
  - app/pb_kits/playbook/pb_radio/radio.test.js
1720
+ - app/pb_kits/playbook/pb_rich_text_editor/TipTap/EditorButton.tsx
1721
+ - app/pb_kits/playbook/pb_rich_text_editor/TipTap/EditorTypes.ts
1722
+ - app/pb_kits/playbook/pb_rich_text_editor/TipTap/Toolbar.tsx
1723
+ - app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx
1724
+ - app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarHistory.tsx
1725
+ - app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarNodes.tsx
1721
1726
  - app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss
1722
1727
  - app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx
1728
+ - app/pb_kits/playbook/pb_rich_text_editor/_tiptap_styles.scss
1723
1729
  - app/pb_kits/playbook/pb_rich_text_editor/_trix_styles.scss
1730
+ - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_default.jsx
1724
1731
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_attributes.html.erb
1725
1732
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_attributes.jsx
1726
1733
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.html.erb
@@ -1916,9 +1923,9 @@ files:
1916
1923
  - app/pb_kits/playbook/pb_stat_value/stat_value.html.erb
1917
1924
  - app/pb_kits/playbook/pb_stat_value/stat_value.rb
1918
1925
  - app/pb_kits/playbook/pb_stat_value/stat_value.test.js
1919
- - app/pb_kits/playbook/pb_table/_table.jsx
1920
1926
  - app/pb_kits/playbook/pb_table/_table.scss
1921
- - app/pb_kits/playbook/pb_table/_table_row.jsx
1927
+ - app/pb_kits/playbook/pb_table/_table.tsx
1928
+ - app/pb_kits/playbook/pb_table/_table_row.tsx
1922
1929
  - app/pb_kits/playbook/pb_table/docs/_description.md
1923
1930
  - app/pb_kits/playbook/pb_table/docs/_table_action_middle.html.erb
1924
1931
  - app/pb_kits/playbook/pb_table/docs/_table_action_middle.jsx
@@ -1973,9 +1980,11 @@ files:
1973
1980
  - app/pb_kits/playbook/pb_table/docs/_table_two_plus_actions.html.erb
1974
1981
  - app/pb_kits/playbook/pb_table/docs/_table_two_plus_actions.jsx
1975
1982
  - app/pb_kits/playbook/pb_table/docs/_table_two_plus_actions.md
1983
+ - app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.html.erb
1984
+ - app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.jsx
1976
1985
  - app/pb_kits/playbook/pb_table/docs/example.yml
1977
1986
  - app/pb_kits/playbook/pb_table/docs/index.js
1978
- - app/pb_kits/playbook/pb_table/index.js
1987
+ - app/pb_kits/playbook/pb_table/index.ts
1979
1988
  - app/pb_kits/playbook/pb_table/styles/_alignment.scss
1980
1989
  - app/pb_kits/playbook/pb_table/styles/_all.scss
1981
1990
  - app/pb_kits/playbook/pb_table/styles/_content.scss
@@ -2024,8 +2033,8 @@ files:
2024
2033
  - app/pb_kits/playbook/pb_text_input/text_input.html.erb
2025
2034
  - app/pb_kits/playbook/pb_text_input/text_input.rb
2026
2035
  - app/pb_kits/playbook/pb_text_input/text_input.test.js
2027
- - app/pb_kits/playbook/pb_textarea/_textarea.jsx
2028
2036
  - app/pb_kits/playbook/pb_textarea/_textarea.scss
2037
+ - app/pb_kits/playbook/pb_textarea/_textarea.tsx
2029
2038
  - app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss
2030
2039
  - app/pb_kits/playbook/pb_textarea/docs/_description.md
2031
2040
  - app/pb_kits/playbook/pb_textarea/docs/_footer.md
@@ -2044,9 +2053,10 @@ files:
2044
2053
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_resize.jsx
2045
2054
  - app/pb_kits/playbook/pb_textarea/docs/example.yml
2046
2055
  - app/pb_kits/playbook/pb_textarea/docs/index.js
2047
- - app/pb_kits/playbook/pb_textarea/index.js
2056
+ - app/pb_kits/playbook/pb_textarea/index.tsx
2048
2057
  - app/pb_kits/playbook/pb_textarea/textarea.html.erb
2049
2058
  - app/pb_kits/playbook/pb_textarea/textarea.rb
2059
+ - app/pb_kits/playbook/pb_textarea/textarea.test.js
2050
2060
  - app/pb_kits/playbook/pb_time/_time.scss
2051
2061
  - app/pb_kits/playbook/pb_time/_time.tsx
2052
2062
  - app/pb_kits/playbook/pb_time/docs/_description.md
@@ -2466,7 +2476,7 @@ homepage: http://playbook.powerapp.cloud
2466
2476
  licenses:
2467
2477
  - ISC
2468
2478
  metadata: {}
2469
- post_install_message:
2479
+ post_install_message:
2470
2480
  rdoc_options: []
2471
2481
  require_paths:
2472
2482
  - lib
@@ -2477,12 +2487,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
2477
2487
  version: '0'
2478
2488
  required_rubygems_version: !ruby/object:Gem::Requirement
2479
2489
  requirements:
2480
- - - ">="
2490
+ - - ">"
2481
2491
  - !ruby/object:Gem::Version
2482
- version: '0'
2492
+ version: 1.3.1
2483
2493
  requirements: []
2484
2494
  rubygems_version: 3.3.7
2485
- signing_key:
2495
+ signing_key:
2486
2496
  specification_version: 4
2487
2497
  summary: Playbook Design System
2488
2498
  test_files: []
@@ -1,41 +0,0 @@
1
- /* @flow */
2
- import React from 'react'
3
- import classnames from 'classnames'
4
- import { buildCss } from '../utilities/props'
5
- import { globalProps } from '../utilities/globalProps'
6
- type FlexItemPropTypes = {
7
- children: array<React.ReactNode> | React.ReactNode,
8
- fixedSize: string,
9
- grow: boolean,
10
- shrink: boolean,
11
- flex: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'none',
12
- className: string,
13
- overflow?: "auto" | "hidden" | "initial" | "inherit" | "scroll" | "visible",
14
- order?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'first' | 'none',
15
- alignSelf?: "start" | "end" | "center" | "stretch",
16
- displayFlex: boolean
17
- }
18
-
19
- const FlexItem = (props: FlexItemPropTypes) => {
20
- const { children, className, fixedSize, grow, overflow = null, shrink, flex = 'none', order = 'none', alignSelf = null, displayFlex } = props
21
- const growClass = grow === true ? 'grow' : ''
22
- const displayFlexClass = displayFlex === true ? `display_flex_${displayFlex}` : ''
23
- const flexClass = flex !== 'none' ? `flex_${flex}` : ''
24
- const overflowClass = overflow ? `overflow_${overflow}` : ''
25
- const shrinkClass = shrink === true ? 'shrink' : ''
26
- const alignSelfClass = alignSelf ? `align_self_${alignSelf}` : ''
27
- const fixedStyle =
28
- fixedSize !== undefined ? { flexBasis: `${fixedSize}` } : null
29
- const orderClass = order !== 'none' ? `order_${order}` : null
30
-
31
- return (
32
- <div
33
- className={classnames(buildCss('pb_flex_item_kit', growClass, shrinkClass, flexClass, displayFlexClass), overflowClass, orderClass, alignSelfClass, globalProps(props), className)}
34
- style={fixedStyle}
35
- >
36
- {children}
37
- </div>
38
- )
39
- }
40
-
41
- export default FlexItem
@@ -1,135 +0,0 @@
1
- /* @flow */
2
- /* eslint-disable react-hooks/rules-of-hooks */
3
-
4
- import React, { forwardRef, useEffect, useRef } from 'react'
5
- import classnames from 'classnames'
6
-
7
- import PbTextarea from './'
8
- import type { InputCallback } from '../types.js'
9
-
10
- import { globalProps } from '../utilities/globalProps'
11
-
12
- import Body from '../pb_body/_body'
13
- import Caption from '../pb_caption/_caption'
14
- import Flex from '../pb_flex/_flex'
15
- import FlexItem from '../pb_flex/_flex_item'
16
-
17
- type TextareaProps = {
18
- characterCount?: string,
19
- className?: string,
20
- children?: array<React.ReactChild>,
21
- disabled?: boolean,
22
- error?: string,
23
- id?: string,
24
- inline?: boolean,
25
- object?: string,
26
- method?: string,
27
- label?: string,
28
- maxCharacters?: string,
29
- placeholder?: string,
30
- value?: string,
31
- name?: string,
32
- required?: boolean,
33
- rows?: number,
34
- resize: 'none' | 'both' | 'horizontal' | 'vertical' | 'auto',
35
- onChange?: InputCallback<HTMLTextAreaElement>,
36
- }
37
-
38
- const Textarea = ({
39
- characterCount,
40
- className,
41
- children,
42
- disabled,
43
- inline = false,
44
- resize = 'none',
45
- error,
46
- label,
47
- maxCharacters,
48
- name,
49
- onChange = () => {},
50
- placeholder,
51
- required,
52
- rows = 4,
53
- value,
54
- ...props
55
- }: TextareaProps, ref: React.ElementRef<"textarea">) => {
56
- ref = ref || useRef(false)
57
- useEffect(() => {
58
- if (ref.current && resize === 'auto') {
59
- PbTextarea.addMatch(ref.current)
60
- }
61
- })
62
-
63
- const errorClass = error ? 'error' : null
64
- const inlineClass = inline ? 'inline' : ''
65
- const resizeClass = `resize_${resize}`
66
- const classes = classnames('pb_textarea_kit', errorClass, inlineClass, resizeClass, globalProps(props), className)
67
-
68
- const characterCounter = () => {
69
- return maxCharacters && characterCount ? `${checkIfZero(characterCount)} / ${maxCharacters}` : checkIfZero(characterCount)
70
- }
71
-
72
- const checkIfZero = (characterCount) => {
73
- return characterCount == 0 ? characterCount.toString() : characterCount
74
- }
75
-
76
- return (
77
- <div className={classes}>
78
- <Caption
79
- text={label}
80
- />
81
- <If condition={children}>
82
- {children}
83
- <Else />
84
- <textarea
85
- className="pb_textarea_kit"
86
- disabled={disabled}
87
- name={name}
88
- onChange={onChange}
89
- placeholder={placeholder}
90
- ref={ref}
91
- required={required}
92
- rows={rows}
93
- value={value}
94
- {...props}
95
- />
96
- <If condition={error}>
97
- <If condition={characterCount}>
98
- <Flex
99
- spacing="between"
100
- vertical="center"
101
- >
102
- <FlexItem>
103
- <Body
104
- margin="none"
105
- status="negative"
106
- text={error}
107
- />
108
- </FlexItem>
109
- <FlexItem>
110
- <Caption
111
- margin="none"
112
- size="xs"
113
- text={characterCounter()}
114
- />
115
- </FlexItem>
116
- </Flex>
117
- <Else />
118
- <Body
119
- status="negative"
120
- text={error}
121
- />
122
- </If>
123
- <Else />
124
- <Caption
125
- margin="none"
126
- size="xs"
127
- text={characterCounter()}
128
- />
129
- </If>
130
- </If>
131
- </div>
132
- )
133
- }
134
-
135
- export default forwardRef(Textarea)