@modernpoacher/cogs 0.1.256 → 1.0.0

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 (276) hide show
  1. package/.prettierignore +4 -0
  2. package/babel.config.cjs +4 -1
  3. package/eslint.config.mjs +32 -71
  4. package/index.d.mts +224 -6
  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 +89 -36
  9. package/src/{cogs → js/cogs}/checkbox/description/index.cjs +5 -2
  10. package/src/js/cogs/checkbox/description/index.d.cts +1 -0
  11. package/src/{cogs → js/cogs}/checkbox/description/index.jsx +0 -4
  12. package/src/{cogs → js/cogs}/checkbox/error-message/index.cjs +5 -2
  13. package/src/js/cogs/checkbox/error-message/index.d.cts +1 -0
  14. package/src/{cogs → js/cogs}/checkbox/error-message/index.jsx +0 -4
  15. package/src/{cogs → js/cogs}/checkbox/field/index.cjs +5 -2
  16. package/src/js/cogs/checkbox/field/index.d.cts +2 -0
  17. package/src/js/cogs/checkbox/field/index.d.mts +14 -0
  18. package/src/{cogs → js/cogs}/checkbox/field/index.jsx +21 -10
  19. package/src/{cogs → js/cogs}/checkbox/index.cjs +5 -2
  20. package/src/js/cogs/checkbox/index.d.cts +2 -0
  21. package/src/js/cogs/checkbox/index.d.mts +24 -0
  22. package/src/{cogs → js/cogs}/checkbox/index.jsx +34 -26
  23. package/src/{cogs → js/cogs}/checkbox/title/index.cjs +5 -2
  24. package/src/js/cogs/checkbox/title/index.d.cts +2 -0
  25. package/src/{cogs → js/cogs}/checkbox/title/index.d.mts +4 -1
  26. package/src/{cogs → js/cogs}/checkbox/title/index.jsx +8 -4
  27. package/src/{cogs → js/cogs}/email/description/index.cjs +5 -2
  28. package/src/js/cogs/email/description/index.d.cts +1 -0
  29. package/src/{cogs → js/cogs}/email/description/index.jsx +0 -4
  30. package/src/{cogs → js/cogs}/email/error-message/index.cjs +5 -2
  31. package/src/js/cogs/email/error-message/index.d.cts +1 -0
  32. package/src/{cogs → js/cogs}/email/error-message/index.jsx +0 -4
  33. package/src/{cogs → js/cogs}/email/field/index.cjs +5 -2
  34. package/src/js/cogs/email/field/index.d.cts +2 -0
  35. package/src/js/cogs/email/field/index.d.mts +14 -0
  36. package/src/js/cogs/email/field/index.jsx +83 -0
  37. package/src/{cogs → js/cogs}/email/index.cjs +5 -2
  38. package/src/js/cogs/email/index.d.cts +2 -0
  39. package/src/js/cogs/email/index.d.mts +18 -0
  40. package/src/{cogs → js/cogs}/email/index.jsx +28 -15
  41. package/src/{cogs → js/cogs}/email/title/index.cjs +5 -2
  42. package/src/js/cogs/email/title/index.d.cts +2 -0
  43. package/src/{cogs → js/cogs}/email/title/index.d.mts +4 -1
  44. package/src/js/cogs/email/title/index.jsx +19 -0
  45. package/src/{cogs → js/cogs}/index.cjs +9 -4
  46. package/src/js/cogs/index.d.cts +5 -0
  47. package/src/js/cogs/index.d.mts +25 -0
  48. package/src/js/cogs/index.jsx +160 -0
  49. package/src/{cogs → js/cogs}/number/description/index.cjs +5 -2
  50. package/src/js/cogs/number/description/index.d.cts +1 -0
  51. package/src/{cogs → js/cogs}/number/description/index.jsx +0 -4
  52. package/src/{cogs → js/cogs}/number/error-message/index.cjs +5 -2
  53. package/src/js/cogs/number/error-message/index.d.cts +1 -0
  54. package/src/{cogs → js/cogs}/number/error-message/index.jsx +0 -4
  55. package/src/{cogs → js/cogs}/number/field/index.cjs +5 -2
  56. package/src/js/cogs/number/field/index.d.cts +2 -0
  57. package/src/js/cogs/number/field/index.d.mts +14 -0
  58. package/src/{cogs → js/cogs}/number/field/index.jsx +40 -7
  59. package/src/{cogs → js/cogs}/number/index.cjs +5 -2
  60. package/src/js/cogs/number/index.d.cts +2 -0
  61. package/src/js/cogs/number/index.d.mts +18 -0
  62. package/src/{cogs → js/cogs}/number/index.jsx +28 -11
  63. package/src/{cogs → js/cogs}/number/title/index.cjs +5 -2
  64. package/src/js/cogs/number/title/index.d.cts +2 -0
  65. package/src/{cogs → js/cogs}/number/title/index.d.mts +4 -1
  66. package/src/{cogs → js/cogs}/number/title/index.jsx +8 -4
  67. package/src/{cogs → js/cogs}/password/description/index.cjs +5 -2
  68. package/src/js/cogs/password/description/index.d.cts +1 -0
  69. package/src/{cogs → js/cogs}/password/description/index.jsx +0 -4
  70. package/src/{cogs → js/cogs}/password/error-message/index.cjs +5 -2
  71. package/src/js/cogs/password/error-message/index.d.cts +1 -0
  72. package/src/{cogs → js/cogs}/password/error-message/index.jsx +0 -4
  73. package/src/{cogs → js/cogs}/password/field/index.cjs +5 -2
  74. package/src/js/cogs/password/field/index.d.cts +2 -0
  75. package/src/js/cogs/password/field/index.d.mts +14 -0
  76. package/src/js/cogs/password/field/index.jsx +83 -0
  77. package/src/{cogs → js/cogs}/password/index.cjs +5 -2
  78. package/src/js/cogs/password/index.d.cts +2 -0
  79. package/src/js/cogs/password/index.d.mts +18 -0
  80. package/src/{cogs → js/cogs}/password/index.jsx +28 -15
  81. package/src/{cogs → js/cogs}/password/title/index.cjs +5 -2
  82. package/src/js/cogs/password/title/index.d.cts +2 -0
  83. package/src/{cogs → js/cogs}/password/title/index.d.mts +4 -1
  84. package/src/{cogs → js/cogs}/password/title/index.jsx +8 -4
  85. package/src/{cogs → js/cogs}/radio/description/index.cjs +5 -2
  86. package/src/js/cogs/radio/description/index.d.cts +1 -0
  87. package/src/{cogs → js/cogs}/radio/description/index.jsx +0 -4
  88. package/src/{cogs → js/cogs}/radio/error-message/index.cjs +5 -2
  89. package/src/js/cogs/radio/error-message/index.d.cts +1 -0
  90. package/src/{cogs → js/cogs}/radio/error-message/index.jsx +0 -4
  91. package/src/{cogs → js/cogs}/radio/field/index.cjs +5 -2
  92. package/src/js/cogs/radio/field/index.d.cts +2 -0
  93. package/src/js/cogs/radio/field/index.d.mts +14 -0
  94. package/src/{cogs → js/cogs}/radio/field/index.jsx +20 -9
  95. package/src/{cogs → js/cogs}/radio/index.cjs +5 -2
  96. package/src/js/cogs/radio/index.d.cts +2 -0
  97. package/src/js/cogs/radio/index.d.mts +24 -0
  98. package/src/{cogs → js/cogs}/radio/index.jsx +36 -20
  99. package/src/{cogs → js/cogs}/radio/title/index.cjs +5 -2
  100. package/src/js/cogs/radio/title/index.d.cts +2 -0
  101. package/src/{cogs → js/cogs}/radio/title/index.d.mts +4 -1
  102. package/src/{cogs → js/cogs}/radio/title/index.jsx +8 -4
  103. package/src/{cogs → js/cogs}/select/description/index.cjs +5 -2
  104. package/src/js/cogs/select/description/index.d.cts +1 -0
  105. package/src/{cogs → js/cogs}/select/description/index.jsx +0 -4
  106. package/src/{cogs → js/cogs}/select/error-message/index.cjs +5 -2
  107. package/src/js/cogs/select/error-message/index.d.cts +1 -0
  108. package/src/{cogs → js/cogs}/select/error-message/index.jsx +0 -4
  109. package/src/{cogs → js/cogs}/select/field/index.cjs +5 -2
  110. package/src/js/cogs/select/field/index.d.cts +2 -0
  111. package/src/js/cogs/select/field/index.d.mts +18 -0
  112. package/src/js/cogs/select/field/index.jsx +200 -0
  113. package/src/{cogs → js/cogs}/select/index.cjs +5 -2
  114. package/src/js/cogs/select/index.d.cts +2 -0
  115. package/src/js/cogs/select/index.d.mts +18 -0
  116. package/src/{cogs → js/cogs}/select/index.jsx +56 -19
  117. package/src/{cogs → js/cogs}/select/title/index.cjs +5 -2
  118. package/src/js/cogs/select/title/index.d.cts +2 -0
  119. package/src/{cogs → js/cogs}/select/title/index.d.mts +4 -1
  120. package/src/js/cogs/select/title/index.jsx +19 -0
  121. package/src/{cogs → js/cogs}/text/description/index.cjs +5 -2
  122. package/src/js/cogs/text/description/index.d.cts +1 -0
  123. package/src/{cogs → js/cogs}/text/description/index.jsx +0 -4
  124. package/src/{cogs → js/cogs}/text/error-message/index.cjs +5 -2
  125. package/src/js/cogs/text/error-message/index.d.cts +1 -0
  126. package/src/{cogs → js/cogs}/text/error-message/index.jsx +1 -5
  127. package/src/{cogs → js/cogs}/text/field/index.cjs +5 -2
  128. package/src/js/cogs/text/field/index.d.cts +2 -0
  129. package/src/js/cogs/text/field/index.d.mts +14 -0
  130. package/src/js/cogs/text/field/index.jsx +83 -0
  131. package/src/{cogs → js/cogs}/text/index.cjs +5 -2
  132. package/src/js/cogs/text/index.d.cts +2 -0
  133. package/src/js/cogs/text/index.d.mts +18 -0
  134. package/src/{cogs → js/cogs}/text/index.jsx +28 -19
  135. package/src/{cogs → js/cogs}/text/title/index.cjs +5 -2
  136. package/src/js/cogs/text/title/index.d.cts +2 -0
  137. package/src/{cogs → js/cogs}/text/title/index.d.mts +4 -1
  138. package/src/js/cogs/text/title/index.jsx +19 -0
  139. package/src/{cogs → js/cogs}/textarea/description/index.cjs +5 -2
  140. package/src/js/cogs/textarea/description/index.d.cts +1 -0
  141. package/src/{cogs → js/cogs}/textarea/description/index.jsx +0 -4
  142. package/src/{cogs → js/cogs}/textarea/error-message/index.cjs +5 -2
  143. package/src/js/cogs/textarea/error-message/index.d.cts +1 -0
  144. package/src/{cogs → js/cogs}/textarea/error-message/index.jsx +0 -4
  145. package/src/{cogs → js/cogs}/textarea/field/index.cjs +5 -2
  146. package/src/js/cogs/textarea/field/index.d.cts +2 -0
  147. package/src/js/cogs/textarea/field/index.d.mts +18 -0
  148. package/src/{cogs → js/cogs}/textarea/field/index.jsx +38 -10
  149. package/src/{cogs → js/cogs}/textarea/index.cjs +5 -2
  150. package/src/js/cogs/textarea/index.d.cts +2 -0
  151. package/src/js/cogs/textarea/index.d.mts +18 -0
  152. package/src/{cogs → js/cogs}/textarea/index.jsx +27 -14
  153. package/src/{cogs → js/cogs}/textarea/title/index.cjs +5 -2
  154. package/src/js/cogs/textarea/title/index.d.cts +2 -0
  155. package/src/{cogs → js/cogs}/textarea/title/index.d.mts +4 -1
  156. package/src/{cogs → js/cogs}/textarea/title/index.jsx +8 -4
  157. package/src/{components → js/components}/common/disabled/index.cjs +5 -2
  158. package/src/js/components/common/disabled/index.d.cts +1 -0
  159. package/src/js/components/common/disabled/index.jsx +11 -0
  160. package/src/{components → js/components}/common/readonly/index.cjs +5 -2
  161. package/src/js/components/common/readonly/index.d.cts +1 -0
  162. package/src/js/components/common/readonly/index.jsx +11 -0
  163. package/src/{components → js/components}/common/required/index.cjs +5 -2
  164. package/src/js/components/common/required/index.d.cts +1 -0
  165. package/src/js/components/common/required/index.jsx +11 -0
  166. package/src/{components → js/components}/common/text-content/index.cjs +6 -3
  167. package/src/js/components/common/text-content/index.d.cts +2 -0
  168. package/src/{components → js/components}/common/text-content/index.d.mts +1 -3
  169. package/src/{components → js/components}/common/text-content/index.jsx +7 -6
  170. package/src/{components → js/components}/description/index.cjs +5 -2
  171. package/src/js/components/description/index.d.cts +2 -0
  172. package/src/{components → js/components}/description/index.d.mts +2 -7
  173. package/src/js/components/description/index.jsx +5 -0
  174. package/src/{components → js/components}/error-message/index.cjs +5 -2
  175. package/src/js/components/error-message/index.d.cts +2 -0
  176. package/src/{components → js/components}/error-message/index.d.mts +2 -5
  177. package/src/js/components/error-message/index.jsx +5 -0
  178. package/src/{components → js/components}/field/index.cjs +10 -2
  179. package/src/js/components/field/index.d.cts +1 -0
  180. package/src/js/components/field/index.d.mts +24 -0
  181. package/src/js/components/field/index.jsx +98 -0
  182. package/src/js/components/index.cjs +38 -0
  183. package/src/js/components/index.d.cts +4 -0
  184. package/src/js/components/index.d.mts +4 -0
  185. package/src/js/components/index.mjs +10 -0
  186. package/src/{components → js/components}/title/index.cjs +2 -2
  187. package/src/js/components/title/index.d.cts +2 -0
  188. package/src/js/components/title/index.d.mts +9 -0
  189. package/src/js/components/title/index.jsx +5 -0
  190. package/src/js/index.d.cts +72 -0
  191. package/src/js/index.d.mts +72 -0
  192. package/src/js/super/cogs/index.cjs +20 -0
  193. package/src/js/super/cogs/index.d.cts +2 -0
  194. package/src/js/super/cogs/index.d.mts +28 -0
  195. package/src/{cogs → js/super/cogs}/index.jsx +36 -118
  196. package/src/js/super/components/description/index.cjs +20 -0
  197. package/src/js/super/components/description/index.d.cts +2 -0
  198. package/src/js/super/components/description/index.d.mts +18 -0
  199. package/src/{components → js/super/components}/description/index.jsx +16 -3
  200. package/src/js/super/components/error-message/index.cjs +20 -0
  201. package/src/js/super/components/error-message/index.d.cts +2 -0
  202. package/src/js/super/components/error-message/index.d.mts +27 -0
  203. package/src/{components → js/super/components}/error-message/index.jsx +14 -7
  204. package/src/js/super/components/field/index.cjs +20 -0
  205. package/src/js/super/components/field/index.d.cts +2 -0
  206. package/src/js/super/components/field/index.d.mts +23 -0
  207. package/src/{components → js/super/components}/field/index.jsx +44 -71
  208. package/src/js/super/components/index.cjs +32 -0
  209. package/src/js/super/components/index.d.cts +4 -0
  210. package/src/js/super/components/index.d.mts +4 -0
  211. package/src/js/super/components/index.mjs +10 -0
  212. package/src/js/super/components/title/index.cjs +20 -0
  213. package/src/js/super/components/title/index.d.cts +2 -0
  214. package/src/js/super/components/title/index.d.mts +32 -0
  215. package/src/{components → js/super/components}/title/index.jsx +34 -7
  216. package/src/sass/.stylelintrc +14 -0
  217. package/src/sass/_cogs.scss +62 -0
  218. package/src/sass/cogs/_checkbox.scss +87 -0
  219. package/src/sass/cogs/_disabled.scss +15 -0
  220. package/src/sass/cogs/_error.scss +48 -0
  221. package/src/sass/cogs/_radio.scss +93 -0
  222. package/jsconfig.json +0 -5
  223. package/src/cogs/checkbox/field/index.d.mts +0 -9
  224. package/src/cogs/checkbox/index.d.mts +0 -9
  225. package/src/cogs/email/field/index.d.mts +0 -9
  226. package/src/cogs/email/field/index.jsx +0 -54
  227. package/src/cogs/email/index.d.mts +0 -9
  228. package/src/cogs/email/title/index.jsx +0 -15
  229. package/src/cogs/index.d.mts +0 -24
  230. package/src/cogs/number/field/index.d.mts +0 -9
  231. package/src/cogs/number/index.d.mts +0 -9
  232. package/src/cogs/password/field/index.d.mts +0 -9
  233. package/src/cogs/password/field/index.jsx +0 -54
  234. package/src/cogs/password/index.d.mts +0 -9
  235. package/src/cogs/radio/field/index.d.mts +0 -9
  236. package/src/cogs/radio/index.d.mts +0 -9
  237. package/src/cogs/select/field/index.d.mts +0 -9
  238. package/src/cogs/select/field/index.jsx +0 -111
  239. package/src/cogs/select/index.d.mts +0 -9
  240. package/src/cogs/select/title/index.jsx +0 -15
  241. package/src/cogs/text/field/index.d.mts +0 -9
  242. package/src/cogs/text/field/index.jsx +0 -54
  243. package/src/cogs/text/index.d.mts +0 -9
  244. package/src/cogs/text/title/index.jsx +0 -15
  245. package/src/cogs/textarea/field/index.d.mts +0 -9
  246. package/src/cogs/textarea/index.d.mts +0 -9
  247. package/src/common/index.d.mts +0 -9
  248. package/src/common/index.mjs +0 -7
  249. package/src/components/common/disabled/index.jsx +0 -9
  250. package/src/components/common/readonly/index.jsx +0 -9
  251. package/src/components/common/required/index.jsx +0 -9
  252. package/src/components/field/index.d.mts +0 -23
  253. package/src/components/title/index.d.mts +0 -19
  254. package/src/index.d.mts +0 -14
  255. package/tsconfig.json +0 -21
  256. /package/src/{cogs → js/cogs}/checkbox/description/index.d.mts +0 -0
  257. /package/src/{cogs → js/cogs}/checkbox/error-message/index.d.mts +0 -0
  258. /package/src/{cogs → js/cogs}/email/description/index.d.mts +0 -0
  259. /package/src/{cogs → js/cogs}/email/error-message/index.d.mts +0 -0
  260. /package/src/{cogs → js/cogs}/number/description/index.d.mts +0 -0
  261. /package/src/{cogs → js/cogs}/number/error-message/index.d.mts +0 -0
  262. /package/src/{cogs → js/cogs}/password/description/index.d.mts +0 -0
  263. /package/src/{cogs → js/cogs}/password/error-message/index.d.mts +0 -0
  264. /package/src/{cogs → js/cogs}/radio/description/index.d.mts +0 -0
  265. /package/src/{cogs → js/cogs}/radio/error-message/index.d.mts +0 -0
  266. /package/src/{cogs → js/cogs}/select/description/index.d.mts +0 -0
  267. /package/src/{cogs → js/cogs}/select/error-message/index.d.mts +0 -0
  268. /package/src/{cogs → js/cogs}/text/description/index.d.mts +0 -0
  269. /package/src/{cogs → js/cogs}/text/error-message/index.d.mts +0 -0
  270. /package/src/{cogs → js/cogs}/textarea/description/index.d.mts +0 -0
  271. /package/src/{cogs → js/cogs}/textarea/error-message/index.d.mts +0 -0
  272. /package/src/{components → js/components}/common/disabled/index.d.mts +0 -0
  273. /package/src/{components → js/components}/common/readonly/index.d.mts +0 -0
  274. /package/src/{components → js/components}/common/required/index.d.mts +0 -0
  275. /package/src/{index.cjs → js/index.cjs} +0 -0
  276. /package/src/{index.mjs → js/index.mjs} +0 -0
@@ -0,0 +1,18 @@
1
+ declare module '#cogs/cogs/select/field' {
2
+ import type { ChangeEvent } from 'react'
3
+
4
+ import {
5
+ ValueField
6
+ } from '#cogs/components/field'
7
+
8
+ export type SelectProps = CogsTypes.Components.Field.Select.SelectProps
9
+
10
+ export default class SelectField<P extends SelectProps> extends ValueField<P> {
11
+ handleChange (event: ChangeEvent<HTMLSelectElement>): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/cogs/cogs/select/field' {
16
+ export { default } from '#cogs/cogs/select/field'
17
+ export * from '#cogs/cogs/select/field'
18
+ }
@@ -0,0 +1,200 @@
1
+ /**
2
+ * @typedef {CogsTypes.OnEventType} OnEventType
3
+ * @typedef {CogsTypes.Components.Field.ValueProps} ValueProps
4
+ * @typedef {CogsTypes.Components.Field.Select.SelectProps} SelectProps
5
+ */
6
+
7
+ /**
8
+ * SelectField component
9
+ */
10
+ import React from 'react'
11
+ import PropTypes from 'prop-types'
12
+ import classnames from 'classnames'
13
+
14
+ import {
15
+ ValueField,
16
+ toInputValue
17
+ } from '#cogs/components/field'
18
+
19
+ /**
20
+ * @type {OnEventType}
21
+ */
22
+ function DEFAULT_HANDLE_EVENT () {
23
+ //
24
+ }
25
+
26
+ /**
27
+ * @param {HTMLOptionElement[]} selectedOptions
28
+ * @returns {string[]}
29
+ */
30
+ function fromSelectedOptions (selectedOptions) {
31
+ return (
32
+ Array.from(selectedOptions)
33
+ .map(({ value, text }) => (value || text) ?? '')
34
+ )
35
+ }
36
+
37
+ /**
38
+ * @param {{ target: { selectedOptions: HTMLOptionElement[] } }} event
39
+ * @returns {string[]}
40
+ */
41
+ function getSelectedValues ({ target: { selectedOptions } }) {
42
+ return (
43
+ fromSelectedOptions(selectedOptions)
44
+ )
45
+ }
46
+
47
+ /**
48
+ * @param {{ target: { value?: string } }} event
49
+ * @returns {string}
50
+ */
51
+ function getSelectedValue ({ target: { value } }) {
52
+ return value ?? ''
53
+ }
54
+
55
+ /**
56
+ * @extends {ValueField<ValueProps & SelectProps>}
57
+ */
58
+ export default class SelectField extends ValueField {
59
+ getClassName () {
60
+ return classnames(super.getClassName(), 'select')
61
+ }
62
+
63
+ /**
64
+ * @param {SelectProps} props
65
+ * @returns {boolean}
66
+ */
67
+ shouldComponentUpdate (props) {
68
+ const {
69
+ multiple,
70
+ children,
71
+ ...superProps
72
+ } = props
73
+
74
+ return (
75
+ super.shouldComponentUpdate(superProps) || // , state ||
76
+ (multiple !== this.props.multiple) ||
77
+ (children !== this.props.children)
78
+ )
79
+ }
80
+
81
+ /**
82
+ * @overload
83
+ * @param {{ target: { selectedOptions: { value?: string, text?: string }[] } }} event
84
+ * @returns {void}
85
+ *
86
+ * @overload
87
+ * @param {{ target: { value?: string } }} event
88
+ * @returns {void}
89
+ *
90
+ * @param {any} event
91
+ * @returns {void}
92
+ */
93
+ handleChange = (event) => {
94
+ const {
95
+ multiple = false,
96
+ onChange = DEFAULT_HANDLE_EVENT
97
+ } = this.props
98
+
99
+ if (multiple) {
100
+ onChange(getSelectedValues(event))
101
+ } else {
102
+ onChange(getSelectedValue(event))
103
+ }
104
+ }
105
+
106
+ render () {
107
+ const {
108
+ name,
109
+ id,
110
+ defaultValue,
111
+ required = false,
112
+ disabled = false,
113
+ readOnly = false,
114
+ tabIndex,
115
+ accessKey,
116
+ multiple = false,
117
+ children,
118
+ fieldRef
119
+ } = this.props
120
+
121
+ const className = this.getClassName()
122
+
123
+ if (defaultValue === undefined) {
124
+ const {
125
+ value
126
+ } = this.props
127
+
128
+ return (
129
+ <select
130
+ name={name}
131
+ id={id}
132
+ value={(
133
+ multiple
134
+ ? Array.isArray(value)
135
+ ? value
136
+ : [toInputValue(value)]
137
+ : toInputValue(value)
138
+ )}
139
+ required={required}
140
+ disabled={disabled} // @ts-ignore
141
+ readOnly={readOnly}
142
+ tabIndex={tabIndex}
143
+ accessKey={accessKey}
144
+ multiple={multiple}
145
+ onChange={this.handleChange}
146
+ className={className}
147
+ ref={fieldRef}>
148
+ {children}
149
+ </select>
150
+ )
151
+ }
152
+
153
+ return (
154
+ <select
155
+ name={name}
156
+ id={id}
157
+ defaultValue={(
158
+ multiple
159
+ ? Array.isArray(defaultValue)
160
+ ? defaultValue
161
+ : [String(defaultValue)]
162
+ : String(defaultValue)
163
+ )}
164
+ required={required}
165
+ disabled={disabled} // @ts-ignore
166
+ readOnly={readOnly}
167
+ tabIndex={tabIndex}
168
+ accessKey={accessKey}
169
+ multiple={multiple}
170
+ onChange={this.handleChange}
171
+ className={className}
172
+ ref={fieldRef}>
173
+ {children}
174
+ </select>
175
+ )
176
+ }
177
+ }
178
+
179
+ SelectField.propTypes = {
180
+ ...ValueField.propTypes,
181
+ multiple: PropTypes.bool,
182
+ value: PropTypes.oneOfType([
183
+ PropTypes.string,
184
+ PropTypes.arrayOf(
185
+ PropTypes.string
186
+ )
187
+ ]),
188
+ defaultValue: PropTypes.oneOfType([
189
+ PropTypes.string,
190
+ PropTypes.arrayOf(
191
+ PropTypes.string
192
+ )
193
+ ]),
194
+ children: PropTypes.oneOfType([
195
+ PropTypes.node,
196
+ PropTypes.arrayOf(
197
+ PropTypes.node
198
+ )
199
+ ])
200
+ }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/cogs/cogs/select')
11
11
  log('`cogs` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Select
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Select
@@ -0,0 +1,2 @@
1
+ export { default } from '#cogs/cogs/select'
2
+ export * from '#cogs/cogs/select'
@@ -0,0 +1,18 @@
1
+ declare module '#cogs/cogs/select' {
2
+ import {
3
+ ValueCog
4
+ } from '#cogs/cogs'
5
+
6
+ export type SelectProps = CogsTypes.Cogs.Select.SelectProps
7
+
8
+ export default class SelectCog<P extends SelectProps> extends ValueCog<Omit<Omit<P, 'value'>, 'defaultValue'>> {
9
+ handleChange (
10
+ value?: string | string[]
11
+ ): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/cogs/cogs/select' {
16
+ export { default } from '#cogs/cogs/select'
17
+ export * from '#cogs/cogs/select'
18
+ }
@@ -1,37 +1,74 @@
1
1
  /**
2
- * SelectCog component
2
+ * @typedef {CogsTypes.OnEventType} OnEventType
3
+ * @typedef {CogsTypes.Cogs.ValueProps} ValueProps
4
+ * @typedef {CogsTypes.Cogs.Select.SelectProps} SelectProps
5
+ */
6
+
7
+ /**
8
+ * SelectCog 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 { ValueCog } from '#cogs/cogs'
9
-
10
14
  import {
11
- DEFAULT_HANDLE_CHANGE
12
- } from '#cogs/common'
15
+ ValueCog
16
+ } from '#cogs/cogs'
13
17
 
14
- import Title from './title/index.jsx'
15
- import Description from './description/index.jsx'
16
- import ErrorMessage from './error-message/index.jsx'
17
- import Field from './field/index.jsx'
18
+ import Title from '#cogs/cogs/select/title'
19
+ import Description from '#cogs/cogs/select/description'
20
+ import ErrorMessage from '#cogs/cogs/select/error-message'
21
+ import Field from '#cogs/cogs/select/field'
18
22
 
19
- export default class SelectCog extends ValueCog {
20
- shouldComponentUpdate (props, state) {
21
- return (
22
- super.shouldComponentUpdate(props) ||
23
- (props.multiple !== this.props.multiple) ||
24
- (props.children !== this.props.children)
25
- )
26
- }
23
+ /**
24
+ * @type {OnEventType}
25
+ */
26
+ function DEFAULT_HANDLE_EVENT () {
27
+ //
28
+ }
27
29
 
30
+ /**
31
+ * @extends {ValueCog<ValueProps & SelectProps>}
32
+ */
33
+ export default class SelectCog extends ValueCog {
28
34
  getClassName () {
29
35
  return classnames(super.getClassName(), 'select')
30
36
  }
31
37
 
38
+ /**
39
+ * @param {SelectProps} props
40
+ * @returns {boolean}
41
+ */
42
+ shouldComponentUpdate (props) {
43
+ const {
44
+ value,
45
+ defaultValue,
46
+ multiple,
47
+ children,
48
+ ...superProps
49
+ } = props
50
+
51
+ return (
52
+ /**
53
+ * `value` may be `string` or `string[]`
54
+ */
55
+ (value !== this.props.value) ||
56
+ /**
57
+ * `defaultValue` may be `string` or `string[]`
58
+ */
59
+ (defaultValue !== this.props.defaultValue) ||
60
+ super.shouldComponentUpdate(superProps) ||
61
+ (multiple !== this.props.multiple) ||
62
+ (children !== this.props.children)
63
+ )
64
+ }
65
+
66
+ /**
67
+ * @param {string | string[]} [value]
68
+ */
32
69
  handleChange = (value) => {
33
70
  const {
34
- onChange = DEFAULT_HANDLE_CHANGE
71
+ onChange = DEFAULT_HANDLE_EVENT
35
72
  } = this.props
36
73
 
37
74
  onChange(value)
@@ -102,8 +139,8 @@ export default class SelectCog extends ValueCog {
102
139
 
103
140
  return (
104
141
  <Field
105
- id={id}
106
142
  name={name}
143
+ id={id}
107
144
  value={value}
108
145
  defaultValue={defaultValue}
109
146
  required={required}
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/cogs/cogs/select/title')
11
11
  log('`cogs` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Title
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Title
@@ -0,0 +1,2 @@
1
+ export { default } from '#cogs/cogs/select/title'
2
+ export * from '#cogs/cogs/select/title'
@@ -1,9 +1,12 @@
1
1
  declare module '#cogs/cogs/select/title' {
2
2
  import Title from '#cogs/components/title'
3
3
 
4
- export default class SelectTitle extends Title {}
4
+ export type SelectProps = CogsTypes.Components.Title.Select.SelectProps
5
+
6
+ export default class SelectTitle<P extends SelectProps> extends Title<P> {}
5
7
  }
6
8
 
7
9
  declare module '@modernpoacher/cogs/cogs/select/title' {
8
10
  export { default } from '#cogs/cogs/select/title'
11
+ export * from '#cogs/cogs/select/title'
9
12
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @typedef {CogsTypes.Super.Components.Title.TitleProps} TitleProps
3
+ * @typedef {CogsTypes.Components.Title.Select.SelectProps} SelectProps
4
+ */
5
+
6
+ /**
7
+ * SelectTitle component
8
+ */
9
+ import classnames from 'classnames'
10
+ import Title from '#cogs/components/title'
11
+
12
+ /**
13
+ * @extends {Title<TitleProps & SelectProps>}
14
+ */
15
+ export default class SelectTitle extends Title {
16
+ getClassName () {
17
+ return classnames(super.getClassName(), 'select')
18
+ }
19
+ }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/cogs/cogs/text/description')
11
11
  log('`cogs` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: Description
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = Description
@@ -0,0 +1 @@
1
+ export { default } from '#cogs/cogs/text/description'
@@ -9,7 +9,3 @@ export default class TextDescription extends Description {
9
9
  return classnames(super.getClassName(), 'text')
10
10
  }
11
11
  }
12
-
13
- TextDescription.propTypes = {
14
- ...Description.propTypes
15
- }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/cogs/cogs/text/error-message')
11
11
  log('`cogs` is awake')
12
12
 
13
13
  const {
14
- default: component
14
+ default: ErrorMessage
15
15
  } = require('./index.jsx')
16
16
 
17
- module.exports = component
17
+ /**
18
+ * Exports only default
19
+ */
20
+ module.exports = ErrorMessage
@@ -0,0 +1 @@
1
+ export { default } from '#cogs/cogs/text/error-message'
@@ -1,5 +1,5 @@
1
1
  /**
2
- * TextErrorMessage component
2
+ * TextErrorMessage component
3
3
  */
4
4
  import classnames from 'classnames'
5
5
  import ErrorMessage from '#cogs/components/error-message'
@@ -9,7 +9,3 @@ export default class TextErrorMessage extends ErrorMessage {
9
9
  return classnames(super.getClassName(), 'text')
10
10
  }
11
11
  }
12
-
13
- TextErrorMessage.propTypes = {
14
- ...ErrorMessage.propTypes
15
- }
@@ -11,7 +11,10 @@ const log = debug('@modernpoacher/cogs/cogs/text/field')
11
11
  log('`cogs` 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 '#cogs/cogs/text/field'
2
+ export * from '#cogs/cogs/text/field'
@@ -0,0 +1,14 @@
1
+ declare module '#cogs/cogs/text/field' {
2
+ import {
3
+ ValueField
4
+ } from '#cogs/components/field'
5
+
6
+ export type TextProps = CogsTypes.Components.Field.Text.TextProps
7
+
8
+ export default class TextField<P extends TextProps> extends ValueField<P> {}
9
+ }
10
+
11
+ declare module '@modernpoacher/cogs/cogs/text/field' {
12
+ export { default } from '#cogs/cogs/text/field'
13
+ export * from '#cogs/cogs/text/field'
14
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @typedef {CogsTypes.Components.Field.ValueProps} ValueProps
3
+ * @typedef {CogsTypes.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 '#cogs/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/cogs/cogs/text')
11
11
  log('`cogs` 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 '#cogs/cogs/text'
2
+ export * from '#cogs/cogs/text'
@@ -0,0 +1,18 @@
1
+ declare module '#cogs/cogs/text' {
2
+ import {
3
+ ValueCog
4
+ } from '#cogs/cogs'
5
+
6
+ export type TextProps = CogsTypes.Cogs.Text.TextProps
7
+
8
+ export default class TextCog<P extends TextProps> extends ValueCog<P> {
9
+ handleChange (
10
+ value?: string | string[]
11
+ ): void
12
+ }
13
+ }
14
+
15
+ declare module '@modernpoacher/cogs/cogs/text' {
16
+ export { default } from '#cogs/cogs/text'
17
+ export * from '#cogs/cogs/text'
18
+ }