@modernpoacher/gremlins 0.0.311 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/.prettierignore +4 -0
  2. package/babel.config.cjs +4 -1
  3. package/eslint.config.mjs +33 -71
  4. package/index.d.mts +169 -2
  5. package/jest.after-each.mjs +10 -0
  6. package/jest.before-each.mjs +10 -0
  7. package/jest.config.mjs +11 -1
  8. package/package.json +84 -29
  9. package/src/{components → js/components}/common/disabled/index.cjs +5 -2
  10. package/src/js/components/common/disabled/index.d.cts +1 -0
  11. package/src/js/components/common/disabled/index.jsx +11 -0
  12. package/src/{components → js/components}/common/readonly/index.cjs +5 -2
  13. package/src/js/components/common/readonly/index.d.cts +1 -0
  14. package/src/js/components/common/readonly/index.jsx +11 -0
  15. package/src/{components → js/components}/common/required/index.cjs +5 -2
  16. package/src/js/components/common/required/index.d.cts +1 -0
  17. package/src/js/components/common/required/index.jsx +11 -0
  18. package/src/{components → js/components}/common/text-content/index.cjs +5 -2
  19. package/src/js/components/common/text-content/index.d.cts +2 -0
  20. package/src/{components → js/components}/common/text-content/index.d.mts +1 -3
  21. package/src/{components → js/components}/common/text-content/index.jsx +6 -5
  22. package/src/{components → js/components}/field/index.cjs +10 -2
  23. package/src/js/components/field/index.d.cts +1 -0
  24. package/src/js/components/field/index.d.mts +24 -0
  25. package/src/js/components/field/index.jsx +98 -0
  26. package/src/{components → js/components}/group/index.cjs +5 -2
  27. package/src/js/components/group/index.d.cts +2 -0
  28. package/src/js/components/group/index.d.mts +9 -0
  29. package/src/js/components/group/index.jsx +5 -0
  30. package/src/js/components/index.cjs +29 -0
  31. package/src/js/components/index.d.cts +2 -0
  32. package/src/js/components/index.d.mts +2 -0
  33. package/src/js/components/index.mjs +8 -0
  34. package/src/{gremlins → js/gremlins}/checkbox/field/index.cjs +5 -2
  35. package/src/js/gremlins/checkbox/field/index.d.cts +2 -0
  36. package/src/js/gremlins/checkbox/field/index.d.mts +14 -0
  37. package/src/{gremlins → js/gremlins}/checkbox/field/index.jsx +21 -10
  38. package/src/{gremlins → js/gremlins}/checkbox/index.cjs +5 -2
  39. package/src/js/gremlins/checkbox/index.d.cts +2 -0
  40. package/src/js/gremlins/checkbox/index.d.mts +24 -0
  41. package/src/{gremlins → js/gremlins}/checkbox/index.jsx +31 -23
  42. package/src/{gremlins → js/gremlins}/email/field/index.cjs +5 -2
  43. package/src/js/gremlins/email/field/index.d.cts +2 -0
  44. package/src/js/gremlins/email/field/index.d.mts +14 -0
  45. package/src/js/gremlins/email/field/index.jsx +83 -0
  46. package/src/{gremlins → js/gremlins}/email/index.cjs +5 -2
  47. package/src/js/gremlins/email/index.d.cts +2 -0
  48. package/src/js/gremlins/email/index.d.mts +18 -0
  49. package/src/{gremlins → js/gremlins}/email/index.jsx +25 -12
  50. package/src/{gremlins → js/gremlins}/fieldset/group/index.cjs +5 -2
  51. package/src/js/gremlins/fieldset/group/index.d.cts +2 -0
  52. package/src/js/gremlins/fieldset/group/index.d.mts +12 -0
  53. package/src/js/gremlins/fieldset/group/index.jsx +19 -0
  54. package/src/{gremlins → js/gremlins}/fieldset/index.cjs +5 -2
  55. package/src/js/gremlins/fieldset/index.d.cts +2 -0
  56. package/src/js/gremlins/fieldset/index.d.mts +14 -0
  57. package/src/js/gremlins/fieldset/index.jsx +37 -0
  58. package/src/{gremlins → js/gremlins}/index.cjs +9 -4
  59. package/src/js/gremlins/index.d.cts +5 -0
  60. package/src/js/gremlins/index.d.mts +27 -0
  61. package/src/js/gremlins/index.jsx +162 -0
  62. package/src/{gremlins → js/gremlins}/number/field/index.cjs +5 -2
  63. package/src/js/gremlins/number/field/index.d.cts +2 -0
  64. package/src/js/gremlins/number/field/index.d.mts +14 -0
  65. package/src/{gremlins → js/gremlins}/number/field/index.jsx +40 -7
  66. package/src/{gremlins → js/gremlins}/number/index.cjs +5 -2
  67. package/src/js/gremlins/number/index.d.cts +2 -0
  68. package/src/js/gremlins/number/index.d.mts +18 -0
  69. package/src/{gremlins → js/gremlins}/number/index.jsx +25 -8
  70. package/src/{gremlins → js/gremlins}/password/field/index.cjs +5 -2
  71. package/src/js/gremlins/password/field/index.d.cts +2 -0
  72. package/src/js/gremlins/password/field/index.d.mts +14 -0
  73. package/src/js/gremlins/password/field/index.jsx +83 -0
  74. package/src/{gremlins → js/gremlins}/password/index.cjs +5 -2
  75. package/src/js/gremlins/password/index.d.cts +2 -0
  76. package/src/js/gremlins/password/index.d.mts +18 -0
  77. package/src/{gremlins → js/gremlins}/password/index.jsx +25 -12
  78. package/src/{gremlins → js/gremlins}/radio/field/index.cjs +5 -2
  79. package/src/js/gremlins/radio/field/index.d.cts +2 -0
  80. package/src/js/gremlins/radio/field/index.d.mts +14 -0
  81. package/src/{gremlins → js/gremlins}/radio/field/index.jsx +20 -9
  82. package/src/{gremlins → js/gremlins}/radio/index.cjs +5 -2
  83. package/src/js/gremlins/radio/index.d.cts +2 -0
  84. package/src/js/gremlins/radio/index.d.mts +24 -0
  85. package/src/{gremlins → js/gremlins}/radio/index.jsx +33 -17
  86. package/src/{gremlins → js/gremlins}/select/field/index.cjs +5 -2
  87. package/src/js/gremlins/select/field/index.d.cts +2 -0
  88. package/src/js/gremlins/select/field/index.d.mts +18 -0
  89. package/src/js/gremlins/select/field/index.jsx +200 -0
  90. package/src/{gremlins → js/gremlins}/select/index.cjs +5 -2
  91. package/src/js/gremlins/select/index.d.cts +2 -0
  92. package/src/js/gremlins/select/index.d.mts +18 -0
  93. package/src/{gremlins → js/gremlins}/select/index.jsx +53 -16
  94. package/src/{gremlins → js/gremlins}/text/field/index.cjs +5 -2
  95. package/src/js/gremlins/text/field/index.d.cts +2 -0
  96. package/src/js/gremlins/text/field/index.d.mts +14 -0
  97. package/src/js/gremlins/text/field/index.jsx +83 -0
  98. package/src/{gremlins → js/gremlins}/text/index.cjs +5 -2
  99. package/src/js/gremlins/text/index.d.cts +2 -0
  100. package/src/js/gremlins/text/index.d.mts +18 -0
  101. package/src/{gremlins → js/gremlins}/text/index.jsx +25 -12
  102. package/src/{gremlins → js/gremlins}/textarea/field/index.cjs +5 -2
  103. package/src/js/gremlins/textarea/field/index.d.cts +2 -0
  104. package/src/js/gremlins/textarea/field/index.d.mts +18 -0
  105. package/src/js/gremlins/textarea/field/index.jsx +81 -0
  106. package/src/{gremlins → js/gremlins}/textarea/index.cjs +5 -2
  107. package/src/js/gremlins/textarea/index.d.cts +2 -0
  108. package/src/js/gremlins/textarea/index.d.mts +18 -0
  109. package/src/{gremlins → js/gremlins}/textarea/index.jsx +25 -12
  110. package/src/js/super/components/field/index.cjs +20 -0
  111. package/src/js/super/components/field/index.d.cts +2 -0
  112. package/src/js/super/components/field/index.d.mts +23 -0
  113. package/src/{components → js/super/components}/field/index.jsx +44 -87
  114. package/src/js/super/components/group/index.cjs +20 -0
  115. package/src/js/super/components/group/index.d.cts +2 -0
  116. package/src/js/super/components/group/index.d.mts +18 -0
  117. package/src/js/super/components/group/index.jsx +59 -0
  118. package/src/js/super/components/index.cjs +23 -0
  119. package/src/js/super/components/index.d.cts +2 -0
  120. package/src/js/super/components/index.d.mts +2 -0
  121. package/src/js/super/components/index.mjs +8 -0
  122. package/src/js/super/gremlins/index.cjs +22 -0
  123. package/src/js/super/gremlins/index.d.cts +4 -0
  124. package/src/js/super/gremlins/index.d.mts +36 -0
  125. package/src/js/super/gremlins/index.jsx +176 -0
  126. package/src/sass/.stylelintrc +14 -0
  127. package/src/sass/_gremlins.scss +59 -0
  128. package/src/sass/gremlins/_checkbox.scss +87 -0
  129. package/src/sass/gremlins/_disabled.scss +15 -0
  130. package/src/sass/gremlins/_error.scss +48 -0
  131. package/src/sass/gremlins/_radio.scss +93 -0
  132. package/.publish/README.md +0 -20
  133. package/src/common/index.d.mts +0 -9
  134. package/src/common/index.mjs +0 -7
  135. package/src/components/common/disabled/index.jsx +0 -9
  136. package/src/components/common/readonly/index.jsx +0 -9
  137. package/src/components/common/required/index.jsx +0 -9
  138. package/src/components/field/index.d.mts +0 -23
  139. package/src/components/group/index.d.mts +0 -16
  140. package/src/components/group/index.jsx +0 -59
  141. package/src/gremlins/checkbox/field/index.d.mts +0 -9
  142. package/src/gremlins/checkbox/index.d.mts +0 -9
  143. package/src/gremlins/email/field/index.d.mts +0 -9
  144. package/src/gremlins/email/field/index.jsx +0 -54
  145. package/src/gremlins/email/index.d.mts +0 -9
  146. package/src/gremlins/fieldset/group/index.d.mts +0 -9
  147. package/src/gremlins/fieldset/group/index.jsx +0 -16
  148. package/src/gremlins/fieldset/index.d.mts +0 -9
  149. package/src/gremlins/fieldset/index.jsx +0 -41
  150. package/src/gremlins/index.d.mts +0 -45
  151. package/src/gremlins/index.jsx +0 -291
  152. package/src/gremlins/number/field/index.d.mts +0 -9
  153. package/src/gremlins/number/index.d.mts +0 -9
  154. package/src/gremlins/password/field/index.d.mts +0 -9
  155. package/src/gremlins/password/field/index.jsx +0 -54
  156. package/src/gremlins/password/index.d.mts +0 -9
  157. package/src/gremlins/radio/field/index.d.mts +0 -9
  158. package/src/gremlins/radio/index.d.mts +0 -9
  159. package/src/gremlins/select/field/index.d.mts +0 -9
  160. package/src/gremlins/select/field/index.jsx +0 -111
  161. package/src/gremlins/select/index.d.mts +0 -9
  162. package/src/gremlins/text/field/index.d.mts +0 -9
  163. package/src/gremlins/text/field/index.jsx +0 -54
  164. package/src/gremlins/text/index.d.mts +0 -9
  165. package/src/gremlins/textarea/field/index.d.mts +0 -9
  166. package/src/gremlins/textarea/field/index.jsx +0 -53
  167. package/src/gremlins/textarea/index.d.mts +0 -9
  168. /package/src/{components → js/components}/common/disabled/index.d.mts +0 -0
  169. /package/src/{components → js/components}/common/readonly/index.d.mts +0 -0
  170. /package/src/{components → js/components}/common/required/index.d.mts +0 -0
  171. /package/src/{index.cjs → js/index.cjs} +0 -0
  172. /package/src/{index.d.mts → js/index.d.mts} +0 -0
  173. /package/src/{index.mjs → js/index.mjs} +0 -0
@@ -1,34 +1,71 @@
1
1
  /**
2
- * SelectGremlin component
2
+ * @typedef {GremlinsTypes.OnEventType} OnEventType
3
+ * @typedef {GremlinsTypes.Gremlins.ValueProps} ValueProps
4
+ * @typedef {GremlinsTypes.Gremlins.Select.SelectProps} SelectProps
5
+ */
6
+
7
+ /**
8
+ * SelectGremlin component
3
9
  */
4
10
  import React from 'react'
5
11
  import PropTypes from 'prop-types'
6
12
  import classnames from 'classnames'
7
13
 
8
- import { ValueGremlin } from '#gremlins/gremlins'
9
-
10
14
  import {
11
- DEFAULT_HANDLE_CHANGE
12
- } from '#gremlins/common'
15
+ ValueGremlin
16
+ } from '#gremlins/gremlins'
13
17
 
14
- import Field from './field/index.jsx'
18
+ import Field from '#gremlins/gremlins/select/field'
15
19
 
16
- export default class SelectGremlin extends ValueGremlin {
17
- shouldComponentUpdate (props, state) {
18
- return (
19
- super.shouldComponentUpdate(props) ||
20
- (props.multiple !== this.props.multiple) ||
21
- (props.children !== this.props.children)
22
- )
23
- }
20
+ /**
21
+ * @type {OnEventType}
22
+ */
23
+ function DEFAULT_HANDLE_EVENT () {
24
+ //
25
+ }
24
26
 
27
+ /**
28
+ * @extends {ValueGremlin<ValueProps & SelectProps>}
29
+ */
30
+ export default class SelectGremlin extends ValueGremlin {
25
31
  getClassName () {
26
32
  return classnames(super.getClassName(), 'select')
27
33
  }
28
34
 
35
+ /**
36
+ * @param {SelectProps} props
37
+ * @returns {boolean}
38
+ */
39
+ shouldComponentUpdate (props) {
40
+ const {
41
+ value,
42
+ defaultValue,
43
+ multiple,
44
+ children,
45
+ ...superProps
46
+ } = props
47
+
48
+ return (
49
+ /**
50
+ * `value` may be `string` or `string[]`
51
+ */
52
+ (value !== this.props.value) ||
53
+ /**
54
+ * `defaultValue` may be `string` or `string[]`
55
+ */
56
+ (defaultValue !== this.props.defaultValue) ||
57
+ super.shouldComponentUpdate(superProps) ||
58
+ (multiple !== this.props.multiple) ||
59
+ (children !== this.props.children)
60
+ )
61
+ }
62
+
63
+ /**
64
+ * @param {string | string[]} [value]
65
+ */
29
66
  handleChange = (value) => {
30
67
  const {
31
- onChange = DEFAULT_HANDLE_CHANGE
68
+ onChange = DEFAULT_HANDLE_EVENT
32
69
  } = this.props
33
70
 
34
71
  onChange(value)
@@ -54,8 +91,8 @@ export default class SelectGremlin extends ValueGremlin {
54
91
 
55
92
  return (
56
93
  <Field
57
- id={id}
58
94
  name={name}
95
+ id={id}
59
96
  value={value}
60
97
  defaultValue={defaultValue}
61
98
  required={required}
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/text/field')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Field
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Field
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/text/field'
2
+ export * from '#gremlins/gremlins/text/field'
@@ -0,0 +1,14 @@
1
+ declare module '#gremlins/gremlins/text/field' {
2
+ import {
3
+ ValueField
4
+ } from '#gremlins/components/field'
5
+
6
+ export type TextProps = GremlinsTypes.Components.Field.Text.TextProps
7
+
8
+ export default class TextField<P extends TextProps> extends ValueField<P> {}
9
+ }
10
+
11
+ declare module '@modernpoacher/gremlins/gremlins/text/field' {
12
+ export { default } from '#gremlins/gremlins/text/field'
13
+ export * from '#gremlins/gremlins/text/field'
14
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @typedef {GremlinsTypes.Components.Field.ValueProps} ValueProps
3
+ * @typedef {GremlinsTypes.Components.Field.Text.TextProps} TextProps
4
+ */
5
+
6
+ /**
7
+ * TextField component
8
+ */
9
+ import React from 'react'
10
+ import classnames from 'classnames'
11
+
12
+ import {
13
+ ValueField,
14
+ toInputValue
15
+ } from '#gremlins/components/field'
16
+
17
+ /**
18
+ * @extends {ValueField<ValueProps & TextProps>}
19
+ */
20
+ export default class TextField extends ValueField {
21
+ getClassName () {
22
+ return classnames(super.getClassName(), 'text')
23
+ }
24
+
25
+ render () {
26
+ const {
27
+ name,
28
+ id,
29
+ defaultValue,
30
+ required = false,
31
+ disabled = false,
32
+ readOnly = false,
33
+ tabIndex,
34
+ accessKey,
35
+ placeholder,
36
+ fieldRef
37
+ } = this.props
38
+
39
+ const className = this.getClassName()
40
+
41
+ if (defaultValue === undefined) {
42
+ const {
43
+ value
44
+ } = this.props
45
+
46
+ return (
47
+ <input
48
+ name={name}
49
+ id={id}
50
+ value={toInputValue(value)}
51
+ required={required}
52
+ disabled={disabled}
53
+ readOnly={readOnly}
54
+ tabIndex={tabIndex}
55
+ accessKey={accessKey}
56
+ placeholder={placeholder}
57
+ onChange={this.handleChange}
58
+ className={className}
59
+ type='text'
60
+ ref={fieldRef}
61
+ />
62
+ )
63
+ }
64
+
65
+ return (
66
+ <input
67
+ name={name}
68
+ id={id}
69
+ defaultValue={String(defaultValue)}
70
+ required={required}
71
+ disabled={disabled}
72
+ readOnly={readOnly}
73
+ tabIndex={tabIndex}
74
+ accessKey={accessKey}
75
+ placeholder={placeholder}
76
+ onChange={this.handleChange}
77
+ className={className}
78
+ type='text'
79
+ ref={fieldRef}
80
+ />
81
+ )
82
+ }
83
+ }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/text')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Text
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Text
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/text'
2
+ export * from '#gremlins/gremlins/text'
@@ -0,0 +1,18 @@
1
+ declare module '#gremlins/gremlins/text' {
2
+ import {
3
+ ValueGremlin
4
+ } from '#gremlins/gremlins'
5
+
6
+ export type TextProps = GremlinsTypes.Gremlins.Text.TextProps
7
+
8
+ export default class TextGremlin<P extends TextProps> extends ValueGremlin<P> {
9
+ handleChange (
10
+ value?: string | string[]
11
+ ): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/gremlins/gremlins/text' {
16
+ export { default } from '#gremlins/gremlins/text'
17
+ export * from '#gremlins/gremlins/text'
18
+ }
@@ -1,25 +1,42 @@
1
1
  /**
2
- * TextGremlin component
2
+ * @typedef {GremlinsTypes.OnEventType} OnEventType
3
+ * @typedef {GremlinsTypes.Gremlins.ValueProps} ValueProps
4
+ * @typedef {GremlinsTypes.Gremlins.Password.PasswordProps} PasswordProps
5
+ */
6
+
7
+ /**
8
+ * TextGremlin component
3
9
  */
4
10
  import React from 'react'
5
11
  import classnames from 'classnames'
6
12
 
7
- import { ValueGremlin } from '#gremlins/gremlins'
8
-
9
13
  import {
10
- DEFAULT_HANDLE_CHANGE
11
- } from '#gremlins/common'
14
+ ValueGremlin
15
+ } from '#gremlins/gremlins'
12
16
 
13
- import Field from './field/index.jsx'
17
+ import Field from '#gremlins/gremlins/text/field'
18
+
19
+ /**
20
+ * @type {OnEventType}
21
+ */
22
+ function DEFAULT_HANDLE_EVENT () {
23
+ //
24
+ }
14
25
 
26
+ /**
27
+ * @extends {ValueGremlin<ValueProps & PasswordProps>}
28
+ */
15
29
  export default class TextGremlin extends ValueGremlin {
16
30
  getClassName () {
17
31
  return classnames(super.getClassName(), 'text')
18
32
  }
19
33
 
34
+ /**
35
+ * @param {string | string[]} [value]
36
+ */
20
37
  handleChange = (value) => {
21
38
  const {
22
- onChange = DEFAULT_HANDLE_CHANGE
39
+ onChange = DEFAULT_HANDLE_EVENT
23
40
  } = this.props
24
41
 
25
42
  onChange(value)
@@ -43,8 +60,8 @@ export default class TextGremlin extends ValueGremlin {
43
60
 
44
61
  return (
45
62
  <Field
46
- id={id}
47
63
  name={name}
64
+ id={id}
48
65
  value={value}
49
66
  defaultValue={defaultValue}
50
67
  required={required}
@@ -59,7 +76,3 @@ export default class TextGremlin extends ValueGremlin {
59
76
  )
60
77
  }
61
78
  }
62
-
63
- TextGremlin.propTypes = {
64
- ...ValueGremlin.propTypes
65
- }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/textarea/field')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Field
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Field
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/textarea/field'
2
+ export * from '#gremlins/gremlins/textarea/field'
@@ -0,0 +1,18 @@
1
+ declare module '#gremlins/gremlins/textarea/field' {
2
+ import type { ChangeEvent } from 'react'
3
+
4
+ import {
5
+ ValueField
6
+ } from '#gremlins/components/field'
7
+
8
+ export type TextareaProps = GremlinsTypes.Components.Field.Textarea.TextareaProps
9
+
10
+ export default class TextareaField<P extends TextareaProps> extends ValueField<P> {
11
+ handleChange (event: ChangeEvent<HTMLTextAreaElement>): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/gremlins/gremlins/textarea/field' {
16
+ export { default } from '#gremlins/gremlins/textarea/field'
17
+ export * from '#gremlins/gremlins/textarea/field'
18
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @typedef {GremlinsTypes.Components.Field.ValueProps} ValueProps
3
+ * @typedef {GremlinsTypes.Components.Field.Textarea.TextareaProps} TextareaProps
4
+ */
5
+
6
+ /**
7
+ * TextareaField component
8
+ */
9
+ import React from 'react'
10
+ import classnames from 'classnames'
11
+
12
+ import {
13
+ ValueField,
14
+ toInputValue
15
+ } from '#gremlins/components/field'
16
+
17
+ /**
18
+ * @extends {ValueField<ValueProps & TextareaProps>}
19
+ */
20
+ export default class TextareaField extends ValueField {
21
+ getClassName () {
22
+ return classnames(super.getClassName(), 'textarea')
23
+ }
24
+
25
+ render () {
26
+ const {
27
+ name,
28
+ id,
29
+ defaultValue,
30
+ required = false,
31
+ disabled = false,
32
+ readOnly = false,
33
+ tabIndex,
34
+ accessKey,
35
+ placeholder,
36
+ fieldRef
37
+ } = this.props
38
+
39
+ const className = this.getClassName()
40
+
41
+ if (defaultValue === undefined) {
42
+ const {
43
+ value
44
+ } = this.props
45
+
46
+ return (
47
+ <textarea
48
+ name={name}
49
+ id={id}
50
+ value={toInputValue(value)}
51
+ required={required}
52
+ disabled={disabled}
53
+ readOnly={readOnly}
54
+ tabIndex={tabIndex}
55
+ accessKey={accessKey}
56
+ placeholder={placeholder}
57
+ onChange={this.handleChange}
58
+ className={className}
59
+ ref={fieldRef}
60
+ />
61
+ )
62
+ }
63
+
64
+ return (
65
+ <textarea
66
+ name={name}
67
+ id={id}
68
+ defaultValue={String(defaultValue)}
69
+ required={required}
70
+ disabled={disabled}
71
+ readOnly={readOnly}
72
+ tabIndex={tabIndex}
73
+ accessKey={accessKey}
74
+ placeholder={placeholder}
75
+ onChange={this.handleChange}
76
+ className={className}
77
+ ref={fieldRef}
78
+ />
79
+ )
80
+ }
81
+ }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/textarea')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Textarea
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Textarea
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/textarea'
2
+ export * from '#gremlins/gremlins/textarea'
@@ -0,0 +1,18 @@
1
+ declare module '#gremlins/gremlins/textarea' {
2
+ import {
3
+ ValueGremlin
4
+ } from '#gremlins/gremlins'
5
+
6
+ export type TextareaProps = GremlinsTypes.Gremlins.Textarea.TextareaProps
7
+
8
+ export default class TextareaGremlin<P extends TextareaProps> extends ValueGremlin<P> {
9
+ handleChange (
10
+ value?: string | string[]
11
+ ): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/gremlins/gremlins/textarea' {
16
+ export { default } from '#gremlins/gremlins/textarea'
17
+ export * from '#gremlins/gremlins/textarea'
18
+ }
@@ -1,25 +1,42 @@
1
1
  /**
2
- * TextareaGremlin component
2
+ * @typedef {GremlinsTypes.OnEventType} OnEventType
3
+ * @typedef {GremlinsTypes.Gremlins.ValueProps} ValueProps
4
+ * @typedef {GremlinsTypes.Gremlins.Textarea.TextareaProps} TextareaProps
5
+ */
6
+
7
+ /**
8
+ * TextareaGremlin component
3
9
  */
4
10
  import React from 'react'
5
11
  import classnames from 'classnames'
6
12
 
7
- import { ValueGremlin } from '#gremlins/gremlins'
8
-
9
13
  import {
10
- DEFAULT_HANDLE_CHANGE
11
- } from '#gremlins/common'
14
+ ValueGremlin
15
+ } from '#gremlins/gremlins'
12
16
 
13
- import Field from './field/index.jsx'
17
+ import Field from '#gremlins/gremlins/textarea/field'
18
+
19
+ /**
20
+ * @type {OnEventType}
21
+ */
22
+ function DEFAULT_HANDLE_EVENT () {
23
+ //
24
+ }
14
25
 
26
+ /**
27
+ * @extends {ValueGremlin<ValueProps & TextareaProps>}
28
+ */
15
29
  export default class TextareaGremlin extends ValueGremlin {
16
30
  getClassName () {
17
31
  return classnames(super.getClassName(), 'textarea')
18
32
  }
19
33
 
34
+ /**
35
+ * @param {string | string[]} [value]
36
+ */
20
37
  handleChange = (value) => {
21
38
  const {
22
- onChange = DEFAULT_HANDLE_CHANGE
39
+ onChange = DEFAULT_HANDLE_EVENT
23
40
  } = this.props
24
41
 
25
42
  onChange(value)
@@ -43,8 +60,8 @@ export default class TextareaGremlin extends ValueGremlin {
43
60
 
44
61
  return (
45
62
  <Field
46
- id={id}
47
63
  name={name}
64
+ id={id}
48
65
  value={value}
49
66
  defaultValue={defaultValue}
50
67
  required={required}
@@ -59,7 +76,3 @@ export default class TextareaGremlin extends ValueGremlin {
59
76
  )
60
77
  }
61
78
  }
62
-
63
- TextareaGremlin.propTypes = {
64
- ...ValueGremlin.propTypes
65
- }
@@ -0,0 +1,20 @@
1
+ require('@babel/register')({
2
+ ignore: [
3
+ /node_modules\/(?!@modernpoacher\/cogs|@modernpoacher\/sprockets|@modernpoacher\/gremlins)/
4
+ ]
5
+ })
6
+
7
+ const debug = require('debug')
8
+
9
+ const log = debug('@modernpoacher/gremlins/super/components/field')
10
+
11
+ log('`gremlins` is awake')
12
+
13
+ const {
14
+ default: Field
15
+ } = require('./index.jsx')
16
+
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Field
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/super/components/field'
2
+ export * from '#gremlins/super/components/field'
@@ -0,0 +1,23 @@
1
+ declare module '#gremlins/super/components/field' {
2
+ import React from 'react'
3
+ import type {
4
+ ChangeEvent
5
+ } from 'react'
6
+
7
+ export type FieldProps = GremlinsTypes.Super.Components.Field.FieldProps
8
+
9
+ export default class Field<P extends FieldProps> extends React.Component<P> {
10
+ static propTypes: object
11
+
12
+ getClassName (): string
13
+
14
+ shouldComponentUpdate (props: FieldProps): boolean
15
+
16
+ handleChange (event: ChangeEvent<HTMLInputElement> | ChangeEvent<HTMLTextAreaElement> | ChangeEvent<HTMLSelectElement>): void
17
+ }
18
+ }
19
+
20
+ declare module '@modernpoacher/gremlins/super/components/field' {
21
+ export { default } from '#gremlins/super/components/field'
22
+ export * from '#gremlins/super/components/field'
23
+ }