@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
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/email')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Email
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Email
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/email'
2
+ export * from '#gremlins/gremlins/email'
@@ -0,0 +1,18 @@
1
+ declare module '#gremlins/gremlins/email' {
2
+ import {
3
+ ValueGremlin
4
+ } from '#gremlins/gremlins'
5
+
6
+ export type EmailProps = GremlinsTypes.Gremlins.Email.EmailProps
7
+
8
+ export default class EmailGremlin<P extends EmailProps> extends ValueGremlin<P> {
9
+ handleChange (
10
+ value?: string | string[]
11
+ ): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/gremlins/gremlins/email' {
16
+ export { default } from '#gremlins/gremlins/email'
17
+ export * from '#gremlins/gremlins/email'
18
+ }
@@ -1,25 +1,42 @@
1
1
  /**
2
- * EmailGremlin component
2
+ * @typedef {GremlinsTypes.OnEventType} OnEventType
3
+ * @typedef {GremlinsTypes.Gremlins.ValueProps} ValueProps
4
+ * @typedef {GremlinsTypes.Gremlins.Email.EmailProps} EmailProps
5
+ */
6
+
7
+ /**
8
+ * EmailGremlin 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/email/field'
18
+
19
+ /**
20
+ * @type {OnEventType}
21
+ */
22
+ function DEFAULT_HANDLE_EVENT () {
23
+ //
24
+ }
14
25
 
26
+ /**
27
+ * @extends {ValueGremlin<ValueProps & EmailProps>}
28
+ */
15
29
  export default class EmailGremlin extends ValueGremlin {
16
30
  getClassName () {
17
31
  return classnames(super.getClassName(), 'email')
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 EmailGremlin 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 EmailGremlin extends ValueGremlin {
59
76
  )
60
77
  }
61
78
  }
62
-
63
- EmailGremlin.propTypes = {
64
- ...ValueGremlin.propTypes
65
- }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/fieldset/group')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Group
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Group
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/fieldset/group'
2
+ export * from '#gremlins/gremlins/fieldset/group'
@@ -0,0 +1,12 @@
1
+ declare module '#gremlins/gremlins/fieldset/group' {
2
+ import Group from '#gremlins/super/components/group'
3
+
4
+ export type FieldsetProps = GremlinsTypes.Gremlins.Fieldset.FieldsetProps
5
+
6
+ export default class FieldsetGroup<P extends FieldsetProps> extends Group<P> {}
7
+ }
8
+
9
+ declare module '@modernpoacher/gremlins/gremlins/fieldset/group' {
10
+ export { default } from '#gremlins/gremlins/fieldset/group'
11
+ export * from '#gremlins/gremlins/fieldset/group'
12
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @typedef {GremlinsTypes.Components.Group.GroupProps} GroupProps
3
+ * @typedef {GremlinsTypes.Components.Group.FieldsetProps} FieldsetProps
4
+ */
5
+
6
+ /**
7
+ * FieldsetGroup component
8
+ */
9
+ import classnames from 'classnames'
10
+ import Group from '#gremlins/components/group'
11
+
12
+ /**
13
+ * @extends {Group<GroupProps & FieldsetProps>}
14
+ */
15
+ export default class FieldsetGroup extends Group {
16
+ getClassName () {
17
+ return classnames(super.getClassName(), 'fieldset')
18
+ }
19
+ }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/fieldset')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Fieldset
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Fieldset
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/fieldset'
2
+ export * from '#gremlins/gremlins/fieldset'
@@ -0,0 +1,14 @@
1
+ declare module '#gremlins/gremlins/fieldset' {
2
+ import {
3
+ GroupGremlin
4
+ } from '#gremlins/super/gremlins'
5
+
6
+ export type FieldsetProps = GremlinsTypes.Gremlins.Fieldset.FieldsetProps
7
+
8
+ export default class FieldsetGroupGremlin<P extends FieldsetProps> extends GroupGremlin<P> {}
9
+ }
10
+
11
+ declare module '@modernpoacher/gremlins/gremlins/fieldset' {
12
+ export { default } from '#gremlins/gremlins/fieldset'
13
+ export * from '#gremlins/gremlins/fieldset'
14
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @typedef {GremlinsTypes.Super.Gremlins.GroupGremlinProps} GroupGremlinProps
3
+ * @typedef {GremlinsTypes.Gremlins.Fieldset.FieldsetProps} FieldsetProps
4
+ */
5
+
6
+ /**
7
+ * FieldsetGremlin component
8
+ */
9
+ import React from 'react'
10
+ import classnames from 'classnames'
11
+
12
+ import {
13
+ GroupGremlin
14
+ } from '#gremlins/super/gremlins'
15
+
16
+ import Group from '#gremlins/gremlins/fieldset/group'
17
+
18
+ /**
19
+ * @extends {GroupGremlin<GroupGremlinProps & FieldsetProps>}
20
+ */
21
+ export default class FieldsetGremlin extends GroupGremlin {
22
+ getClassName () {
23
+ return classnames(super.getClassName(), 'fieldset')
24
+ }
25
+
26
+ renderGroup () {
27
+ const {
28
+ children
29
+ } = this.props
30
+
31
+ return (
32
+ <Group>
33
+ {children}
34
+ </Group>
35
+ )
36
+ }
37
+ }
@@ -10,7 +10,12 @@ const log = debug('@modernpoacher/gremlins/gremlins')
10
10
 
11
11
  log('`gremlins` is awake')
12
12
 
13
- /**
14
- * Has default export, etc
15
- */
16
- module.exports = require('./index.jsx')
13
+ const {
14
+ ValueGremlin,
15
+ CheckGremlin,
16
+ toInputValue
17
+ } = require('./index.jsx')
18
+
19
+ module.exports.ValueGremlin = ValueGremlin
20
+ module.exports.CheckGremlin = CheckGremlin
21
+ module.exports.toInputValue = toInputValue
@@ -0,0 +1,5 @@
1
+ export {
2
+ ValueGremlin,
3
+ CheckGremlin,
4
+ toInputValue
5
+ } from '#gremlins/gremlins'
@@ -0,0 +1,27 @@
1
+ declare module '#gremlins/gremlins' {
2
+ import {
3
+ FieldGremlin
4
+ } from '#gremlins/super/gremlins'
5
+
6
+ export type FieldGremlinProps = GremlinsTypes.Super.Gremlins.FieldGremlinProps
7
+ export type ValueProps = GremlinsTypes.Gremlins.ValueProps
8
+ export type CheckProps = GremlinsTypes.Gremlins.CheckProps
9
+
10
+ export class ValueGremlin<P extends ValueProps> extends FieldGremlin<P> {
11
+ shouldComponentUpdate (props: ValueProps): boolean
12
+ }
13
+
14
+ export class CheckGremlin<P extends CheckProps> extends FieldGremlin<P> {
15
+ shouldComponentUpdate (props: CheckProps): boolean
16
+ }
17
+
18
+ export function toInputValue (value: unknown): string
19
+ }
20
+
21
+ declare module '@modernpoacher/gremlins/gremlins' {
22
+ export {
23
+ ValueGremlin,
24
+ CheckGremlin,
25
+ toInputValue
26
+ } from '#gremlins/gremlins'
27
+ }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @typedef {GremlinsTypes.OnEventType} OnEventType
3
+ * @typedef {GremlinsTypes.Super.Gremlins.FieldGremlinProps} FieldGremlinProps
4
+ * @typedef {GremlinsTypes.Gremlins.ValueProps} ValueProps
5
+ * @typedef {GremlinsTypes.Gremlins.CheckProps} CheckProps
6
+ */
7
+
8
+ /**
9
+ * ValueGremlin component
10
+ * CheckGremlin component
11
+ */
12
+ import React from 'react'
13
+ import PropTypes from 'prop-types'
14
+
15
+ import {
16
+ FieldGremlin
17
+ } from '#gremlins/super/gremlins'
18
+
19
+ import {
20
+ ValueField,
21
+ CheckField,
22
+ toInputValue
23
+ } from '#gremlins/components/field'
24
+
25
+ /**
26
+ * @type {OnEventType}
27
+ */
28
+ function DEFAULT_HANDLE_EVENT () {
29
+ //
30
+ }
31
+
32
+ export {
33
+ toInputValue
34
+ }
35
+
36
+ /**
37
+ * @extends {FieldGremlin<FieldGremlinProps & ValueProps>}
38
+ */
39
+ export class ValueGremlin extends FieldGremlin {
40
+ /**
41
+ * @param {ValueProps} props
42
+ * @returns {boolean}
43
+ */
44
+ shouldComponentUpdate (props) {
45
+ const {
46
+ value,
47
+ defaultValue,
48
+ ...superProps
49
+ } = props
50
+
51
+ return (
52
+ (value !== this.props.value) ||
53
+ (defaultValue !== this.props.defaultValue) ||
54
+ super.shouldComponentUpdate(superProps)
55
+ )
56
+ }
57
+
58
+ renderField () {
59
+ const id = this.getId()
60
+
61
+ const {
62
+ name,
63
+ value,
64
+ required = false,
65
+ disabled = false,
66
+ readOnly = false,
67
+ tabIndex,
68
+ accessKey,
69
+ placeholder,
70
+ onChange = DEFAULT_HANDLE_EVENT,
71
+ fieldRef
72
+ } = this.props
73
+
74
+ return (
75
+ <ValueField
76
+ name={name}
77
+ id={id}
78
+ value={value}
79
+ required={required}
80
+ disabled={disabled}
81
+ readOnly={readOnly}
82
+ tabIndex={tabIndex}
83
+ accessKey={accessKey}
84
+ placeholder={placeholder}
85
+ onChange={onChange}
86
+ fieldRef={fieldRef}
87
+ />
88
+ )
89
+ }
90
+ }
91
+
92
+ ValueGremlin.propTypes = {
93
+ ...FieldGremlin.propTypes,
94
+ defaultValue: PropTypes.string
95
+ }
96
+
97
+ /**
98
+ * @extends {FieldGremlin<FieldGremlinProps & CheckProps>}
99
+ */
100
+ export class CheckGremlin extends FieldGremlin {
101
+ /**
102
+ * @param {CheckProps} props
103
+ * @returns {boolean}
104
+ */
105
+ shouldComponentUpdate (props) {
106
+ const {
107
+ checked,
108
+ defaultChecked,
109
+ onClick,
110
+ ...superProps
111
+ } = props
112
+
113
+ return (
114
+ (checked !== this.props.checked) ||
115
+ (defaultChecked !== this.props.defaultChecked) ||
116
+ super.shouldComponentUpdate(superProps) ||
117
+ (onClick !== this.props.onClick)
118
+ )
119
+ }
120
+
121
+ renderField () {
122
+ const id = this.getId()
123
+
124
+ const {
125
+ name,
126
+ value,
127
+ required = false,
128
+ disabled = false,
129
+ readOnly = false,
130
+ tabIndex,
131
+ accessKey,
132
+ placeholder,
133
+ onChange = DEFAULT_HANDLE_EVENT,
134
+ onClick = DEFAULT_HANDLE_EVENT,
135
+ fieldRef
136
+ } = this.props
137
+
138
+ return (
139
+ <CheckField
140
+ name={name}
141
+ id={id}
142
+ value={value}
143
+ required={required}
144
+ disabled={disabled}
145
+ readOnly={readOnly}
146
+ tabIndex={tabIndex}
147
+ accessKey={accessKey}
148
+ placeholder={placeholder}
149
+ onChange={onChange}
150
+ onClick={onClick}
151
+ fieldRef={fieldRef}
152
+ />
153
+ )
154
+ }
155
+ }
156
+
157
+ CheckGremlin.propTypes = {
158
+ ...FieldGremlin.propTypes,
159
+ checked: PropTypes.bool,
160
+ defaultChecked: PropTypes.bool,
161
+ onClick: PropTypes.func
162
+ }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/number/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/number/field'
2
+ export * from '#gremlins/gremlins/number/field'
@@ -0,0 +1,14 @@
1
+ declare module '#gremlins/gremlins/number/field' {
2
+ import {
3
+ ValueField
4
+ } from '#gremlins/components/field'
5
+
6
+ export type NumberProps = GremlinsTypes.Components.Field.Number.NumberProps
7
+
8
+ export default class NumberField<P extends NumberProps> extends ValueField<P> {}
9
+ }
10
+
11
+ declare module '@modernpoacher/gremlins/gremlins/number/field' {
12
+ export { default } from '#gremlins/gremlins/number/field'
13
+ export * from '#gremlins/gremlins/number/field'
14
+ }
@@ -1,12 +1,23 @@
1
1
  /**
2
- * NumberField component
2
+ * @typedef {CogsTypes.Components.Field.ValueProps} ValueProps
3
+ * @typedef {CogsTypes.Components.Field.Number.NumberProps} NumberProps
4
+ */
5
+
6
+ /**
7
+ * NumberField component
3
8
  */
4
9
  import React from 'react'
5
10
  import PropTypes from 'prop-types'
6
11
  import classnames from 'classnames'
7
12
 
8
- import { ValueField } from '#gremlins/components/field'
13
+ import {
14
+ ValueField,
15
+ toInputValue
16
+ } from '#gremlins/components/field'
9
17
 
18
+ /**
19
+ * @extends {ValueField<ValueProps & NumberProps>}
20
+ */
10
21
  export default class NumberField extends ValueField {
11
22
  getClassName () {
12
23
  return classnames(super.getClassName(), 'number')
@@ -14,9 +25,8 @@ export default class NumberField extends ValueField {
14
25
 
15
26
  render () {
16
27
  const {
17
- id,
18
28
  name,
19
- value,
29
+ id,
20
30
  defaultValue,
21
31
  required = false,
22
32
  disabled = false,
@@ -29,12 +39,35 @@ export default class NumberField extends ValueField {
29
39
 
30
40
  const className = this.getClassName()
31
41
 
42
+ if (defaultValue === undefined) {
43
+ const {
44
+ value
45
+ } = this.props
46
+
47
+ return (
48
+ <input
49
+ name={name}
50
+ id={id}
51
+ value={toInputValue(value)}
52
+ required={required}
53
+ disabled={disabled}
54
+ readOnly={readOnly}
55
+ tabIndex={tabIndex}
56
+ accessKey={accessKey}
57
+ placeholder={placeholder}
58
+ onChange={this.handleChange}
59
+ className={className}
60
+ type='number'
61
+ ref={fieldRef}
62
+ />
63
+ )
64
+ }
65
+
32
66
  return (
33
67
  <input
34
- id={id}
35
68
  name={name}
36
- value={value}
37
- defaultValue={defaultValue}
69
+ id={id}
70
+ defaultValue={String(defaultValue)}
38
71
  required={required}
39
72
  disabled={disabled}
40
73
  readOnly={readOnly}
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/number')
11
11
  log('`gremlins` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Number
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Number
@@ -0,0 +1,2 @@
1
+ export { default } from '#gremlins/gremlins/number'
2
+ export * from '#gremlins/gremlins/number'
@@ -0,0 +1,18 @@
1
+ declare module '#gremlins/gremlins/number' {
2
+ import {
3
+ ValueGremlin
4
+ } from '#gremlins/gremlins'
5
+
6
+ export type NumberProps = GremlinsTypes.Gremlins.Number.NumberProps
7
+
8
+ export default class NumberGremlin<P extends NumberProps> extends ValueGremlin<Omit<Omit<P, 'value'>, 'defaultValue'>> {
9
+ handleChange (
10
+ value?: string | string[]
11
+ ): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/gremlins/gremlins/number' {
16
+ export { default } from '#gremlins/gremlins/number'
17
+ export * from '#gremlins/gremlins/number'
18
+ }
@@ -1,26 +1,43 @@
1
1
  /**
2
- * NumberGremlin component
2
+ * @typedef {GremlinsTypes.OnEventType} OnEventType
3
+ * @typedef {GremlinsTypes.Gremlins.ValueProps} ValueProps
4
+ * @typedef {GremlinsTypes.Gremlins.Number.NumberProps} NumberProps
5
+ */
6
+
7
+ /**
8
+ * NumberGremlin 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'
17
+
18
+ import Field from '#gremlins/gremlins/number/field'
13
19
 
14
- import Field from './field/index.jsx'
20
+ /**
21
+ * @type {OnEventType}
22
+ */
23
+ function DEFAULT_HANDLE_EVENT () {
24
+ //
25
+ }
15
26
 
27
+ /**
28
+ * @extends {ValueGremlin<ValueProps & NumberProps>}
29
+ */
16
30
  export default class NumberGremlin extends ValueGremlin {
17
31
  getClassName () {
18
32
  return classnames(super.getClassName(), 'number')
19
33
  }
20
34
 
35
+ /**
36
+ * @param {string | string[]} [value]
37
+ */
21
38
  handleChange = (value) => {
22
39
  const {
23
- onChange = DEFAULT_HANDLE_CHANGE
40
+ onChange = DEFAULT_HANDLE_EVENT
24
41
  } = this.props
25
42
 
26
43
  onChange(value)
@@ -44,8 +61,8 @@ export default class NumberGremlin extends ValueGremlin {
44
61
 
45
62
  return (
46
63
  <Field
47
- id={id}
48
64
  name={name}
65
+ id={id}
49
66
  value={value}
50
67
  defaultValue={defaultValue}
51
68
  required={required}
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/gremlins/gremlins/password/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/password/field'
2
+ export * from '#gremlins/gremlins/password/field'
@@ -0,0 +1,14 @@
1
+ declare module '#gremlins/gremlins/password/field' {
2
+ import {
3
+ ValueField
4
+ } from '#gremlins/components/field'
5
+
6
+ export type PasswordProps = GremlinsTypes.Components.Field.Password.PasswordProps
7
+
8
+ export default class PasswordField<P extends PasswordProps> extends ValueField<P> {}
9
+ }
10
+
11
+ declare module '@modernpoacher/gremlins/gremlins/password/field' {
12
+ export { default } from '#gremlins/gremlins/password/field'
13
+ export * from '#gremlins/gremlins/password/field'
14
+ }