design-react-kit 3.3.1 → 4.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 (352) hide show
  1. package/README.EN.md +35 -17
  2. package/README.md +34 -18
  3. package/package.json +152 -120
  4. package/src/Accordion/Accordion.tsx +30 -0
  5. package/src/Accordion/AccordionBody.tsx +127 -0
  6. package/src/Accordion/AccordionHeader.tsx +42 -0
  7. package/src/Alert/Alert.tsx +39 -0
  8. package/src/Avatar/AvatarContainer.tsx +22 -0
  9. package/src/Avatar/AvatarExtraText.tsx +19 -0
  10. package/src/Avatar/AvatarGroupContainer.tsx +23 -0
  11. package/src/Avatar/AvatarIcon.tsx +57 -0
  12. package/src/Avatar/AvatarPresence.tsx +24 -0
  13. package/src/Avatar/AvatarStatus.tsx +24 -0
  14. package/src/Avatar/AvatarWrapper.tsx +24 -0
  15. package/src/Badge/Badge.tsx +40 -0
  16. package/src/BottomNav/BottomNav.tsx +20 -0
  17. package/src/BottomNav/BottomNavItem.tsx +75 -0
  18. package/src/Breadcrumb/Breadcrumb.tsx +40 -0
  19. package/src/Button/Button.tsx +55 -0
  20. package/src/Callout/Callout.tsx +35 -0
  21. package/src/Callout/CalloutText.tsx +29 -0
  22. package/src/Callout/CalloutTitle.tsx +24 -0
  23. package/src/Card/Card.tsx +49 -0
  24. package/src/Card/CardBody.tsx +21 -0
  25. package/src/Card/CardCategory.tsx +48 -0
  26. package/src/Card/CardFooterCTA.tsx +19 -0
  27. package/src/Card/CardReadMore.tsx +35 -0
  28. package/src/Card/CardSignature.tsx +19 -0
  29. package/src/Card/CardTag.tsx +19 -0
  30. package/src/Card/CardTagsHeader.tsx +28 -0
  31. package/src/Card/CardText.tsx +19 -0
  32. package/src/Card/CardTitle.tsx +17 -0
  33. package/src/Chips/Chip.tsx +37 -0
  34. package/src/Chips/ChipLabel.tsx +19 -0
  35. package/src/Collapse/Collapse.tsx +100 -0
  36. package/src/CookieBar/CookieBar.tsx +19 -0
  37. package/src/CookieBar/CookieBarButton.tsx +27 -0
  38. package/src/CookieBar/CookieBarButtons.tsx +19 -0
  39. package/src/Dimmer/Dimmer.tsx +51 -0
  40. package/src/Dimmer/DimmerButtons.tsx +35 -0
  41. package/src/FontLoader/FontLoader.tsx +32 -0
  42. package/src/Forward/Forward.tsx +40 -0
  43. package/src/Grid/GridItem.tsx +23 -0
  44. package/src/Grid/GridItemText.tsx +20 -0
  45. package/src/Grid/GridItemTextWrapper.tsx +21 -0
  46. package/src/Grid/GridList.tsx +20 -0
  47. package/src/Grid/GridRow.tsx +20 -0
  48. package/src/Grid/index.ts +11 -0
  49. package/src/{components/Header/Header.js → Header/Header.tsx} +19 -24
  50. package/src/Header/HeaderBrand.tsx +90 -0
  51. package/src/Header/HeaderContent.tsx +42 -0
  52. package/src/Header/HeaderContext.tsx +9 -0
  53. package/src/Header/HeaderLinkZone.tsx +19 -0
  54. package/src/Header/HeaderRightZone.tsx +26 -0
  55. package/src/Header/HeaderSearch.tsx +33 -0
  56. package/src/Header/HeaderSocialsZone.tsx +26 -0
  57. package/src/Header/HeaderToggler.tsx +46 -0
  58. package/src/{components/Header/Headers.js → Header/Headers.tsx} +17 -22
  59. package/src/Hero/Hero.tsx +34 -0
  60. package/src/Hero/HeroBackground.tsx +25 -0
  61. package/src/Hero/HeroBody.tsx +21 -0
  62. package/src/Hero/HeroButton.tsx +19 -0
  63. package/src/Hero/HeroCategory.tsx +15 -0
  64. package/src/Hero/HeroTitle.tsx +16 -0
  65. package/src/Hero/index.ts +13 -0
  66. package/src/Icon/EmptyIcon.tsx +7 -0
  67. package/src/Icon/Icon.tsx +116 -0
  68. package/src/Icon/assets/ItArrowDown.tsx +9 -0
  69. package/src/Icon/assets/ItArrowDownCircle.tsx +9 -0
  70. package/src/Icon/assets/ItArrowDownTriangle.tsx +9 -0
  71. package/src/Icon/assets/ItArrowLeft.tsx +9 -0
  72. package/src/Icon/assets/ItArrowLeftCircle.tsx +9 -0
  73. package/src/Icon/assets/ItArrowLeftTriangle.tsx +9 -0
  74. package/src/Icon/assets/ItArrowRight.tsx +9 -0
  75. package/src/Icon/assets/ItArrowRightCircle.tsx +9 -0
  76. package/src/Icon/assets/ItArrowRightTriangle.tsx +9 -0
  77. package/src/Icon/assets/ItArrowUp.tsx +9 -0
  78. package/src/Icon/assets/ItArrowUpCircle.tsx +9 -0
  79. package/src/Icon/assets/ItArrowUpTriangle.tsx +9 -0
  80. package/src/Icon/assets/ItBan.tsx +9 -0
  81. package/src/Icon/assets/ItBehance.tsx +9 -0
  82. package/src/Icon/assets/ItBookmark.tsx +9 -0
  83. package/src/Icon/assets/ItBox.tsx +12 -0
  84. package/src/Icon/assets/ItBurger.tsx +9 -0
  85. package/src/Icon/assets/ItCalendar.tsx +9 -0
  86. package/src/Icon/assets/ItCamera.tsx +9 -0
  87. package/src/Icon/assets/ItCard.tsx +9 -0
  88. package/src/Icon/assets/ItChartLine.tsx +12 -0
  89. package/src/Icon/assets/ItCheck.tsx +9 -0
  90. package/src/Icon/assets/ItCheckCircle.tsx +9 -0
  91. package/src/Icon/assets/ItChevronLeft.tsx +8 -0
  92. package/src/Icon/assets/ItChevronRight.tsx +8 -0
  93. package/src/Icon/assets/ItClip.tsx +9 -0
  94. package/src/Icon/assets/ItClock.tsx +9 -0
  95. package/src/Icon/assets/ItClose.tsx +9 -0
  96. package/src/Icon/assets/ItCloseBig.tsx +9 -0
  97. package/src/Icon/assets/ItCloseCircle.tsx +9 -0
  98. package/src/Icon/assets/ItCodeCircle.tsx +9 -0
  99. package/src/Icon/assets/ItCollapse.tsx +8 -0
  100. package/src/Icon/assets/ItComment.tsx +9 -0
  101. package/src/Icon/assets/ItCopy.tsx +9 -0
  102. package/src/Icon/assets/ItDelete.tsx +12 -0
  103. package/src/Icon/assets/ItDesignersItalia.tsx +9 -0
  104. package/src/Icon/assets/ItDownload.tsx +9 -0
  105. package/src/Icon/assets/ItError.tsx +9 -0
  106. package/src/Icon/assets/ItExchangeCircle.tsx +9 -0
  107. package/src/Icon/assets/ItExpand.tsx +8 -0
  108. package/src/Icon/assets/ItExternalLink.tsx +9 -0
  109. package/src/Icon/assets/ItFacebook.tsx +9 -0
  110. package/src/Icon/assets/ItFacebookSquare.tsx +9 -0
  111. package/src/Icon/assets/ItFile.tsx +9 -0
  112. package/src/Icon/assets/ItFiles.tsx +9 -0
  113. package/src/Icon/assets/ItFlag.tsx +9 -0
  114. package/src/Icon/assets/ItFlickr.tsx +10 -0
  115. package/src/Icon/assets/ItFlickrSquare.tsx +9 -0
  116. package/src/Icon/assets/ItFolder.tsx +9 -0
  117. package/src/Icon/assets/ItFullscreen.tsx +11 -0
  118. package/src/Icon/assets/ItFunnel.tsx +9 -0
  119. package/src/Icon/assets/ItGithub.tsx +9 -0
  120. package/src/Icon/assets/ItHearing.tsx +9 -0
  121. package/src/Icon/assets/ItHelp.tsx +9 -0
  122. package/src/Icon/assets/ItHelpCircle.tsx +9 -0
  123. package/src/Icon/assets/ItHorn.tsx +9 -0
  124. package/src/Icon/assets/ItInbox.tsx +12 -0
  125. package/src/Icon/assets/ItInfoCircle.tsx +9 -0
  126. package/src/Icon/assets/ItInstagram.tsx +9 -0
  127. package/src/Icon/assets/ItKey.tsx +9 -0
  128. package/src/Icon/assets/ItLessCircle.tsx +12 -0
  129. package/src/Icon/assets/ItLink.tsx +9 -0
  130. package/src/Icon/assets/ItLinkedin.tsx +9 -0
  131. package/src/Icon/assets/ItLinkedinSquare.tsx +9 -0
  132. package/src/Icon/assets/ItList.tsx +9 -0
  133. package/src/Icon/assets/ItLock.tsx +12 -0
  134. package/src/Icon/assets/ItLocked.tsx +9 -0
  135. package/src/Icon/assets/ItMail.tsx +9 -0
  136. package/src/Icon/assets/ItMapMarker.tsx +9 -0
  137. package/src/Icon/assets/ItMapMarkerCircle.tsx +12 -0
  138. package/src/Icon/assets/ItMapMarkerMinus.tsx +9 -0
  139. package/src/Icon/assets/ItMapMarkerPlus.tsx +12 -0
  140. package/src/Icon/assets/ItMaximize.tsx +11 -0
  141. package/src/Icon/assets/ItMaximizeAlt.tsx +11 -0
  142. package/src/Icon/assets/ItMedium.tsx +9 -0
  143. package/src/Icon/assets/ItMediumSquare.tsx +9 -0
  144. package/src/Icon/assets/ItMinimize.tsx +11 -0
  145. package/src/Icon/assets/ItMinus.tsx +9 -0
  146. package/src/Icon/assets/ItMinusCircle.tsx +9 -0
  147. package/src/Icon/assets/ItMoreActions.tsx +9 -0
  148. package/src/Icon/assets/ItMoreItems.tsx +9 -0
  149. package/src/Icon/assets/ItNote.tsx +9 -0
  150. package/src/Icon/assets/ItOpenSource.tsx +9 -0
  151. package/src/Icon/assets/ItPa.tsx +9 -0
  152. package/src/Icon/assets/ItPasswordInvisible.tsx +9 -0
  153. package/src/Icon/assets/ItPasswordVisible.tsx +9 -0
  154. package/src/Icon/assets/ItPencil.tsx +9 -0
  155. package/src/Icon/assets/ItPiattaforme.tsx +10 -0
  156. package/src/Icon/assets/ItPin.tsx +9 -0
  157. package/src/Icon/assets/ItPlug.tsx +9 -0
  158. package/src/Icon/assets/ItPlus.tsx +9 -0
  159. package/src/Icon/assets/ItPlusCircle.tsx +9 -0
  160. package/src/Icon/assets/ItPresentation.tsx +9 -0
  161. package/src/Icon/assets/ItPrint.tsx +9 -0
  162. package/src/Icon/assets/ItRefresh.tsx +9 -0
  163. package/src/Icon/assets/ItRestore.tsx +9 -0
  164. package/src/Icon/assets/ItRss.tsx +11 -0
  165. package/src/Icon/assets/ItRssSquare.tsx +9 -0
  166. package/src/Icon/assets/ItSearch.tsx +9 -0
  167. package/src/Icon/assets/ItSettings.tsx +9 -0
  168. package/src/Icon/assets/ItShare.tsx +9 -0
  169. package/src/Icon/assets/ItSoftware.tsx +10 -0
  170. package/src/Icon/assets/ItStarFull.tsx +9 -0
  171. package/src/Icon/assets/ItStarOutline.tsx +9 -0
  172. package/src/Icon/assets/ItTeamDigitale.tsx +8 -0
  173. package/src/Icon/assets/ItTelegram.tsx +11 -0
  174. package/src/Icon/assets/ItTelephone.tsx +9 -0
  175. package/src/Icon/assets/ItTool.tsx +9 -0
  176. package/src/Icon/assets/ItTwitter.tsx +9 -0
  177. package/src/Icon/assets/ItTwitterSquare.tsx +9 -0
  178. package/src/Icon/assets/ItUnlocked.tsx +9 -0
  179. package/src/Icon/assets/ItUpload.tsx +9 -0
  180. package/src/Icon/assets/ItUser.tsx +9 -0
  181. package/src/Icon/assets/ItVideo.tsx +9 -0
  182. package/src/Icon/assets/ItWarning.tsx +9 -0
  183. package/src/Icon/assets/ItWarningCircle.tsx +9 -0
  184. package/src/Icon/assets/ItWhatsapp.tsx +9 -0
  185. package/src/Icon/assets/ItWhatsappSquare.tsx +10 -0
  186. package/src/Icon/assets/ItWifi.tsx +12 -0
  187. package/src/Icon/assets/ItYoutube.tsx +9 -0
  188. package/src/Icon/assets/ItZoomIn.tsx +9 -0
  189. package/src/Icon/assets/ItZoomOut.tsx +9 -0
  190. package/src/Icon/assets/index.tsx +504 -0
  191. package/src/Input/Input.tsx +342 -0
  192. package/src/Input/InputContainer.tsx +34 -0
  193. package/src/Input/TextArea.tsx +184 -0
  194. package/src/Input/TimeInput.tsx +303 -0
  195. package/src/Input/utils.tsx +166 -0
  196. package/src/LinkList/LinkList.tsx +65 -0
  197. package/src/LinkList/LinkListItem.tsx +98 -0
  198. package/src/Megamenu/Megamenu.tsx +37 -0
  199. package/src/Megamenu/MegamenuFooter.tsx +20 -0
  200. package/src/Megamenu/MegamenuHighlightColumn.tsx +33 -0
  201. package/src/Megamenu/MegamenuItem.tsx +27 -0
  202. package/src/Modal/Modal.tsx +79 -0
  203. package/src/Modal/ModalBody.tsx +11 -0
  204. package/src/Modal/ModalFooter.tsx +11 -0
  205. package/src/Modal/ModalHeader.tsx +70 -0
  206. package/src/Nav/Nav.tsx +56 -0
  207. package/src/Notification/Notification.tsx +60 -0
  208. package/src/Notification/NotificationContent.tsx +135 -0
  209. package/src/Notification/NotificationManager.tsx +65 -0
  210. package/src/Notification/core.tsx +46 -0
  211. package/src/Notification/index.ts +9 -0
  212. package/src/Notification/types.ts +12 -0
  213. package/src/Notification/usePosition.tsx +11 -0
  214. package/src/Pager/Pager.tsx +48 -0
  215. package/src/PasswordInput/PasswordInput.tsx +43 -0
  216. package/src/Progress/Progress.tsx +94 -0
  217. package/src/Rating/Rating.tsx +130 -0
  218. package/src/ResponsiveImage/ResponsiveImage.tsx +25 -0
  219. package/src/Section/Section.tsx +86 -0
  220. package/src/Select/Select.tsx +97 -0
  221. package/src/Select/shared.tsx +45 -0
  222. package/src/Sidebar/Sidebar.tsx +46 -0
  223. package/src/Skiplink/Skiplink.tsx +20 -0
  224. package/src/Skiplink/SkiplinkItem.tsx +29 -0
  225. package/src/Spinner/Spinner.tsx +55 -0
  226. package/src/Stepper/StepperContainer.tsx +30 -0
  227. package/src/Stepper/StepperContent.tsx +51 -0
  228. package/src/Stepper/StepperDots.tsx +21 -0
  229. package/src/Stepper/StepperHeader.tsx +19 -0
  230. package/src/Stepper/StepperHeaderElement.tsx +77 -0
  231. package/src/Stepper/StepperNav.tsx +19 -0
  232. package/src/ThumbNav/ThumbNav.tsx +37 -0
  233. package/src/ThumbNav/ThumbNavItem.tsx +35 -0
  234. package/src/Timeline/TimelinePin.tsx +67 -0
  235. package/src/Timeline/TimelineWrapper.tsx +19 -0
  236. package/src/Toggle/Toggle.tsx +29 -0
  237. package/src/Toolbar/Toolbar.tsx +28 -0
  238. package/src/Toolbar/ToolbarDividerItem.tsx +5 -0
  239. package/src/Toolbar/ToolbarItem.tsx +95 -0
  240. package/src/assets.d.ts +4 -0
  241. package/src/index.tsx +350 -0
  242. package/src/utils.tsx +26 -0
  243. package/.editorconfig +0 -18
  244. package/.eslintrc +0 -65
  245. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
  246. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  247. package/.github/PULL_REQUEST_TEMPLATE.md +0 -24
  248. package/AUTHORS +0 -3
  249. package/CODE_OF_CONDUCT.EN.md +0 -77
  250. package/CODE_OF_CONDUCT.md +0 -69
  251. package/dist/design-react-kit.cjs.js +0 -3698
  252. package/dist/design-react-kit.cjs.js.map +0 -1
  253. package/dist/design-react-kit.d.ts +0 -1704
  254. package/dist/design-react-kit.es.js +0 -3188
  255. package/dist/design-react-kit.es.js.map +0 -1
  256. package/dist/design-react-kit.full.js +0 -17596
  257. package/dist/design-react-kit.full.js.map +0 -1
  258. package/dist/design-react-kit.full.min.js +0 -2
  259. package/dist/design-react-kit.full.min.js.map +0 -1
  260. package/dist/design-react-kit.js +0 -13394
  261. package/dist/design-react-kit.js.map +0 -1
  262. package/dist/design-react-kit.min.js +0 -2
  263. package/dist/design-react-kit.min.js.map +0 -1
  264. package/src/Storyshots.test.js +0 -9
  265. package/src/components/Accordion/Accordion.js +0 -22
  266. package/src/components/Accordion/AccordionBody.js +0 -118
  267. package/src/components/Accordion/AccordionHeader.js +0 -37
  268. package/src/components/Autocomplete/Autocomplete.js +0 -255
  269. package/src/components/Avatar/AvatarContainer.js +0 -24
  270. package/src/components/Avatar/AvatarExtraText.js +0 -22
  271. package/src/components/Avatar/AvatarGroupContainer.js +0 -23
  272. package/src/components/Avatar/AvatarIcon.js +0 -32
  273. package/src/components/Avatar/AvatarPresence.js +0 -25
  274. package/src/components/Avatar/AvatarStatus.js +0 -25
  275. package/src/components/Avatar/AvatarWrapper.js +0 -25
  276. package/src/components/Badge/Badge.js +0 -28
  277. package/src/components/BottomNav/BottomNav.js +0 -27
  278. package/src/components/BottomNav/BottomNavItem.js +0 -69
  279. package/src/components/Button/Button.js +0 -26
  280. package/src/components/Callout/Callout.js +0 -33
  281. package/src/components/Callout/CalloutText.js +0 -37
  282. package/src/components/Callout/CalloutTitle.js +0 -27
  283. package/src/components/Card/Card.js +0 -50
  284. package/src/components/Card/CardCategory.js +0 -43
  285. package/src/components/Card/CardFooterCTA.js +0 -17
  286. package/src/components/Card/CardReadMore.js +0 -45
  287. package/src/components/Card/CardSignature.js +0 -17
  288. package/src/components/Card/CardTag.js +0 -23
  289. package/src/components/Card/CardTagsHeader.js +0 -21
  290. package/src/components/Chips/Chip.js +0 -50
  291. package/src/components/Chips/ChipLabel.js +0 -25
  292. package/src/components/Collapse/Collapse.js +0 -66
  293. package/src/components/CookieBar/CookieBar.js +0 -22
  294. package/src/components/CookieBar/CookieBarButton.js +0 -25
  295. package/src/components/CookieBar/CookieBarButtons.js +0 -23
  296. package/src/components/Dimmer/Dimmer.js +0 -38
  297. package/src/components/Dimmer/DimmerButtons.js +0 -35
  298. package/src/components/FontLoader/FontLoader.js +0 -22
  299. package/src/components/FormGroup/FormGroup.js +0 -137
  300. package/src/components/Forward/Forward.js +0 -32
  301. package/src/components/Header/HeaderBrand.js +0 -86
  302. package/src/components/Header/HeaderContent.js +0 -49
  303. package/src/components/Header/HeaderContext.js +0 -14
  304. package/src/components/Header/HeaderLinkZone.js +0 -24
  305. package/src/components/Header/HeaderRightZone.js +0 -33
  306. package/src/components/Header/HeaderSearch.js +0 -36
  307. package/src/components/Header/HeaderSocialsZone.js +0 -30
  308. package/src/components/Header/HeaderToggler.js +0 -50
  309. package/src/components/Hero/Hero.js +0 -10
  310. package/src/components/Icon/Icon.js +0 -42
  311. package/src/components/Input/Input.js +0 -261
  312. package/src/components/Input/InputContainer.js +0 -39
  313. package/src/components/Input/utils.js +0 -126
  314. package/src/components/LinkList/LinkList.js +0 -65
  315. package/src/components/LinkList/LinkListItem.js +0 -88
  316. package/src/components/Nav/Nav.js +0 -37
  317. package/src/components/Notification/Notification.js +0 -78
  318. package/src/components/Offcanvas/Offcanvas.js +0 -101
  319. package/src/components/Pager/Pager.js +0 -32
  320. package/src/components/PagerList/PagerList.js +0 -28
  321. package/src/components/PasswordInput/PasswordInput.js +0 -41
  322. package/src/components/PasswordMeter/PasswordMeter.js +0 -80
  323. package/src/components/Progress/Progress.js +0 -88
  324. package/src/components/Rating/Rating.js +0 -130
  325. package/src/components/Section/Section.js +0 -49
  326. package/src/components/Separator/Separator.js +0 -34
  327. package/src/components/Sidebar/Sidebar.js +0 -53
  328. package/src/components/Skiplink/Skiplink.js +0 -25
  329. package/src/components/Skiplink/SkiplinkItem.js +0 -25
  330. package/src/components/Spinner/Spinner.js +0 -65
  331. package/src/components/Stepper/StepperContainer.js +0 -33
  332. package/src/components/Stepper/StepperContent.js +0 -54
  333. package/src/components/Stepper/StepperDots.js +0 -27
  334. package/src/components/Stepper/StepperHeader.js +0 -27
  335. package/src/components/Stepper/StepperHeaderElement.js +0 -45
  336. package/src/components/Stepper/StepperNav.js +0 -27
  337. package/src/components/Table/Table.js +0 -68
  338. package/src/components/Timeline/TimelinePin.js +0 -59
  339. package/src/components/Timeline/TimelineWrapper.js +0 -21
  340. package/src/components/Toggle/Toggle.js +0 -27
  341. package/src/components/utils.js +0 -1
  342. package/src/index.js +0 -144
  343. package/static/favicons/android-chrome-192x192.png +0 -0
  344. package/static/favicons/android-chrome-512x512.png +0 -0
  345. package/static/favicons/apple-touch-icon.png +0 -0
  346. package/static/favicons/browserconfig.xml +0 -9
  347. package/static/favicons/favicon-16x16.png +0 -0
  348. package/static/favicons/favicon-32x32.png +0 -0
  349. package/static/favicons/favicon.ico +0 -0
  350. package/static/favicons/manifest.webmanifest +0 -21
  351. package/static/favicons/mstile-150x150.png +0 -0
  352. package/static/favicons/safari-pinned-tab.svg +0 -23
@@ -0,0 +1,342 @@
1
+ import React, { InputHTMLAttributes, ElementType, Ref, ReactNode } from 'react';
2
+ import isNumber from 'is-number';
3
+
4
+ import { InputContainer } from './InputContainer';
5
+ import { Icon } from '../Icon/Icon';
6
+ import {
7
+ getTag,
8
+ getFormControlClass,
9
+ getClasses,
10
+ getInfoTextControlClass
11
+ } from './utils';
12
+ import type { CSSModule } from 'reactstrap';
13
+ import { notifyDeprecation } from '../utils';
14
+ // taken from reactstrap types
15
+ type InputType =
16
+ | 'text'
17
+ | 'email'
18
+ | 'select'
19
+ | 'file'
20
+ | 'radio'
21
+ | 'checkbox'
22
+ | 'textarea'
23
+ | 'button'
24
+ | 'reset'
25
+ | 'submit'
26
+ | 'date'
27
+ | 'datetime-local'
28
+ | 'hidden'
29
+ | 'image'
30
+ | 'month'
31
+ | 'number'
32
+ | 'range'
33
+ | 'search'
34
+ | 'tel'
35
+ | 'url'
36
+ | 'week'
37
+ | 'password'
38
+ | 'datetime'
39
+ | 'time'
40
+ | 'color';
41
+
42
+ export interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
43
+ /** Il tipo specifico di input da utilizzare. Il valore di default è `text`. */
44
+ type?: InputType;
45
+ /** Dimensione personalizzate del campo di Input secondo le classi Bootstrap/Bootstrap Italia. */
46
+ bsSize?: 'lg' | 'sm';
47
+ size?: number;
48
+ /** Etichetta del campo Input. */
49
+ label?: string | ReactNode;
50
+ /** Testo di esempio da utilizzare per il campo. */
51
+ placeholder?: string;
52
+ /** Testo di aiuto per l'elemento del moduleo form. Richiede che il componente `Input` abbia la prop `id` impostata. */
53
+ infoText?: string;
54
+ /** Il valore nel campo Input. */
55
+ value?: string | number;
56
+ /** Da utilizzare per impedire la modifica del valore contenuto. */
57
+ readOnly?: boolean;
58
+ /** Associato all'attributo readOnly mostra il campo con lo stile classico, mantenendo lo stato di sola lettura. */
59
+ normalized?: boolean;
60
+ /** Utilizzare per mostrare il successo nella validazione del valore nel campo Input */
61
+ valid?: boolean;
62
+ /** Utilizzare per mostrare il fallimento nella validazione del valore nel campo Input */
63
+ invalid?: boolean;
64
+ innerRef?: Ref<HTMLInputElement>;
65
+ /** Utilizzare per mostrare testo statico non modificabile. */
66
+ plaintext?: boolean;
67
+ /** Utilizzare per mostrare un elemento addon a fianco (prima o dopo) il campo input all'interno del componente */
68
+ addon?: boolean;
69
+ /** Oggetto contenente la nuova mappatura per le classi CSS. */
70
+ cssModule?: CSSModule;
71
+ /** Classi aggiuntive da usare per il wrapper del componente Input */
72
+ wrapperClassName?: string;
73
+ /**
74
+ * Classi aggiuntive da usare per il wrapper del componente Input.
75
+ * @deprecated. Usare `wrapperClassName`.
76
+ * */
77
+ wrapperClass?: string;
78
+ /** Utilizzarlo in caso di utilizzo di componenti personalizzati */
79
+ tag?: ElementType;
80
+ /** Classi aggiuntive da usare per il componente Input */
81
+ className?: string;
82
+ /**
83
+ * Usare "valid" o "invalid" per indicare lo stato del componente.
84
+ * @deprecated
85
+ */
86
+ state?: string;
87
+ /**
88
+ * Usare "plaintext".
89
+ * @deprecated
90
+ */
91
+ static?: boolean;
92
+ /** Quando attivo rimuove il componente contenitore dell'Input. Utile per un controllo maggiore dello styling */
93
+ noWrapper?: boolean;
94
+ }
95
+
96
+ type InputState = { isFocused: boolean; hidden: boolean; icon: boolean };
97
+
98
+ export class Input extends React.Component<InputProps, InputState> {
99
+ state = {
100
+ isFocused: false,
101
+ hidden: true,
102
+ icon: true
103
+ };
104
+
105
+ toggleFocusLabel = (e: React.FocusEvent<HTMLInputElement>) => {
106
+ this.setState({
107
+ isFocused: true
108
+ });
109
+ this.props.onFocus?.(e);
110
+ };
111
+
112
+ toggleBlurLabel = (e: React.FocusEvent<HTMLInputElement>) => {
113
+ if (e.target.value === '') {
114
+ this.setState({
115
+ isFocused: !this.state.isFocused
116
+ });
117
+ }
118
+ this.props.onBlur?.(e);
119
+ };
120
+
121
+ toggleShow = () => {
122
+ this.setState({ hidden: !this.state.hidden, icon: !this.state.icon });
123
+ };
124
+
125
+ render() {
126
+ const {
127
+ id,
128
+ className,
129
+ cssModule,
130
+ type,
131
+ state,
132
+ tag,
133
+ addon,
134
+ static: staticInput,
135
+ plaintext,
136
+ innerRef,
137
+ label,
138
+ infoText,
139
+ placeholder,
140
+ normalized,
141
+ value,
142
+ wrapperClass: originalWrapperClassOld,
143
+ wrapperClassName: originalWrapperClass,
144
+ size,
145
+ noWrapper = false,
146
+ ...attributes
147
+ } = this.props;
148
+ let { bsSize, valid, invalid, ...rest } = attributes;
149
+
150
+ const Tag = getTag({ tag, plaintext, staticInput, type });
151
+ const formControlClass = getFormControlClass(
152
+ {
153
+ plaintext,
154
+ staticInput,
155
+ type,
156
+ addon,
157
+ normalized
158
+ },
159
+ cssModule
160
+ );
161
+ const infoTextControlClass = getInfoTextControlClass(
162
+ { valid, invalid },
163
+ cssModule
164
+ );
165
+
166
+ if (state && valid == null && invalid == null) {
167
+ invalid = state === 'danger';
168
+ valid = state === 'success';
169
+ }
170
+
171
+ const extraAttributes: {
172
+ type?: InputType;
173
+ size?: number;
174
+ ['aria-describedby']?: string;
175
+ } = {};
176
+ if (size && !isNumber(size)) {
177
+ notifyDeprecation(
178
+ 'Please use the prop "bsSize" instead of the "size" to bootstrap\'s input sizing.'
179
+ );
180
+ bsSize = (size as unknown) as InputProps['bsSize'];
181
+ } else {
182
+ extraAttributes.size = size;
183
+ }
184
+
185
+ if (Tag === 'input' || typeof tag !== 'string') {
186
+ extraAttributes.type = type;
187
+ }
188
+
189
+ // associate the input field with the help text
190
+ const infoId = id ? `${id}Description` : undefined;
191
+ if (id) {
192
+ extraAttributes['aria-describedby'] = infoId;
193
+ }
194
+
195
+ if (
196
+ attributes.children &&
197
+ !(
198
+ plaintext ||
199
+ staticInput ||
200
+ type === 'select' ||
201
+ typeof Tag !== 'string' ||
202
+ Tag === 'select'
203
+ )
204
+ ) {
205
+ notifyDeprecation(
206
+ `Input with a type of "${type}" cannot have children. Please use "value"/"defaultValue" instead.`
207
+ );
208
+ delete attributes.children;
209
+ }
210
+
211
+ const inputPassword = extraAttributes.type === 'password';
212
+
213
+ // Styling
214
+ const {
215
+ activeClass,
216
+ infoTextClass,
217
+ inputClasses,
218
+ wrapperClass
219
+ } = getClasses(
220
+ className,
221
+ {
222
+ valid,
223
+ invalid,
224
+ bsSize,
225
+ placeholder,
226
+ value,
227
+ label,
228
+ infoText,
229
+ normalized: Boolean(normalized),
230
+ inputPassword,
231
+ formControlClass,
232
+ infoTextControlClass,
233
+ isFocused: this.state.isFocused,
234
+ originalWrapperClass: originalWrapperClass || originalWrapperClassOld
235
+ },
236
+ cssModule
237
+ );
238
+
239
+ // set of attributes always shared by the Input components
240
+ const sharedAttributes = {
241
+ id,
242
+ onFocus: this.toggleFocusLabel,
243
+ onBlur: this.toggleBlurLabel,
244
+ value: value,
245
+ ref: innerRef
246
+ };
247
+
248
+ // set of attributes always shared by the wrapper component
249
+ const containerProps = {
250
+ id,
251
+ infoId,
252
+ activeClass,
253
+ label,
254
+ infoTextClass,
255
+ infoText,
256
+ wrapperClass
257
+ };
258
+
259
+ if (noWrapper) {
260
+ return (
261
+ <Tag
262
+ {...rest}
263
+ {...extraAttributes}
264
+ className={inputClasses}
265
+ {...sharedAttributes}
266
+ placeholder={placeholder}
267
+ />
268
+ );
269
+ }
270
+
271
+ if (placeholder) {
272
+ return (
273
+ <InputContainer {...containerProps}>
274
+ <Tag
275
+ {...rest}
276
+ {...extraAttributes}
277
+ {...sharedAttributes}
278
+ className={inputClasses}
279
+ placeholder={placeholder}
280
+ />
281
+ </InputContainer>
282
+ );
283
+ }
284
+
285
+ if (inputPassword) {
286
+ return (
287
+ <InputContainer {...containerProps}>
288
+ <Tag
289
+ {...rest}
290
+ {...extraAttributes}
291
+ {...sharedAttributes}
292
+ type={this.state.hidden ? 'password' : 'text'}
293
+ className={inputClasses}
294
+ placeholder={placeholder}
295
+ />
296
+ <span className='password-icon' aria-hidden='true'>
297
+ <Icon
298
+ size='sm'
299
+ icon={`it-password-${this.state.icon ? 'visible' : 'invisible'}`}
300
+ className='password-icon-visible'
301
+ onClick={this.toggleShow}
302
+ />
303
+ </span>
304
+ </InputContainer>
305
+ );
306
+ }
307
+ if (normalized) {
308
+ return (
309
+ <InputContainer {...containerProps}>
310
+ <Tag
311
+ {...rest}
312
+ {...extraAttributes}
313
+ {...sharedAttributes}
314
+ className={inputClasses}
315
+ readOnly
316
+ />
317
+ </InputContainer>
318
+ );
319
+ }
320
+ if (label || infoText) {
321
+ return (
322
+ <InputContainer {...containerProps}>
323
+ <Tag
324
+ {...rest}
325
+ {...extraAttributes}
326
+ {...sharedAttributes}
327
+ className={inputClasses}
328
+ />
329
+ </InputContainer>
330
+ );
331
+ }
332
+
333
+ return (
334
+ <Tag
335
+ {...rest}
336
+ {...extraAttributes}
337
+ className={inputClasses}
338
+ {...sharedAttributes}
339
+ />
340
+ );
341
+ }
342
+ }
@@ -0,0 +1,34 @@
1
+ import React, { FC, HTMLAttributes, ReactNode } from 'react';
2
+
3
+ export interface InputContainerProps extends HTMLAttributes<HTMLElement> {
4
+ wrapperClass: string;
5
+ activeClass: string;
6
+ infoTextClass: string;
7
+ label: string | ReactNode | undefined;
8
+ infoText: string | undefined;
9
+ id: string | undefined;
10
+ infoId: string | undefined;
11
+ }
12
+
13
+ export const InputContainer: FC<InputContainerProps> = ({
14
+ id,
15
+ infoId,
16
+ activeClass,
17
+ label,
18
+ infoTextClass,
19
+ infoText,
20
+ wrapperClass,
21
+ children
22
+ }) => {
23
+ return (
24
+ <div className={wrapperClass}>
25
+ {children}
26
+ <label htmlFor={id} className={activeClass}>
27
+ {label}
28
+ </label>
29
+ <small id={infoId} className={infoTextClass}>
30
+ {infoText}
31
+ </small>
32
+ </div>
33
+ );
34
+ };
@@ -0,0 +1,184 @@
1
+ import React, { Ref, ReactNode, TextareaHTMLAttributes } from 'react';
2
+
3
+ import { InputContainer } from './InputContainer';
4
+ import { getClasses, getInfoTextControlClass } from './utils';
5
+ import type { CSSModule } from 'reactstrap';
6
+
7
+ export interface TextAreaProps
8
+ extends TextareaHTMLAttributes<HTMLTextAreaElement> {
9
+ /** Etichetta del campo TextArea. */
10
+ label?: string | ReactNode;
11
+ /** Testo di esempio da utilizzare per il campo. */
12
+ placeholder?: string;
13
+ /** Testo di aiuto per l'elemento del moduleo form. Richiede che il componente `TextArea` abbia la prop `id` impostata. */
14
+ infoText?: string;
15
+ /** Il valore nel campo TextArea. */
16
+ value?: string | number;
17
+ /** Da utilizzare per impedire la modifica del valore contenuto. */
18
+ readOnly?: boolean;
19
+ /** Associato all'attributo readOnly mostra il campo con lo stile classico, mantenento lo stato di sola lettura. */
20
+ normalized?: boolean;
21
+ /** Utilizzare per mostrare il successo nella validazione del valore nel campo TextArea */
22
+ valid?: boolean;
23
+ /** Utilizzare per mostrare il fallimento nella validazione del valore nel campo TextArea */
24
+ invalid?: boolean;
25
+ innerRef?: Ref<HTMLTextAreaElement>;
26
+ /** Oggetto contenente la nuova mappatura per le classi CSS. */
27
+ cssModule?: CSSModule;
28
+ /** Classi aggiuntive da usare per il wrapper del componente TextArea */
29
+ wrapperClassName?: string;
30
+ /** Classi aggiuntive da usare per il componente TextArea */
31
+ className?: string;
32
+ }
33
+
34
+ type InputState = { isFocused: boolean; hidden: boolean; icon: boolean };
35
+
36
+ export class TextArea extends React.Component<TextAreaProps, InputState> {
37
+ state = {
38
+ isFocused: false,
39
+ hidden: true,
40
+ icon: true
41
+ };
42
+
43
+ toggleFocusLabel = () => {
44
+ this.setState({
45
+ isFocused: true
46
+ });
47
+ };
48
+
49
+ toggleBlurLabel = (e: { target: { value: string } }) => {
50
+ if (e.target.value === '') {
51
+ this.setState({
52
+ isFocused: !this.state.isFocused
53
+ });
54
+ }
55
+ };
56
+
57
+ toggleShow = () => {
58
+ this.setState({ hidden: !this.state.hidden, icon: !this.state.icon });
59
+ };
60
+
61
+ render() {
62
+ const {
63
+ id,
64
+ className,
65
+ cssModule,
66
+ innerRef,
67
+ label,
68
+ infoText,
69
+ placeholder,
70
+ normalized,
71
+ value,
72
+ wrapperClassName: originalWrapperClass,
73
+ valid,
74
+ invalid,
75
+ ...attributes
76
+ } = this.props;
77
+
78
+ const infoTextControlClass = getInfoTextControlClass(
79
+ { valid, invalid },
80
+ cssModule
81
+ );
82
+
83
+ const extraAttributes: { ['aria-describedby']?: string } = {};
84
+
85
+ // associate the input field with the help text
86
+ const infoId = id ? `${id}Description` : undefined;
87
+ if (id) {
88
+ extraAttributes['aria-describedby'] = infoId;
89
+ }
90
+
91
+ // Styling
92
+ const {
93
+ activeClass,
94
+ infoTextClass,
95
+ inputClasses,
96
+ wrapperClass
97
+ } = getClasses(
98
+ className,
99
+ {
100
+ valid,
101
+ invalid,
102
+ placeholder,
103
+ value,
104
+ label,
105
+ infoText,
106
+ normalized: Boolean(normalized),
107
+ infoTextControlClass,
108
+ isFocused: this.state.isFocused,
109
+ originalWrapperClass
110
+ },
111
+ cssModule
112
+ );
113
+
114
+ // set of attributes always shared by the Input components
115
+ const sharedAttributes = {
116
+ id,
117
+ onFocus: this.toggleFocusLabel,
118
+ onBlur: this.toggleBlurLabel,
119
+ value: value,
120
+ ref: innerRef
121
+ };
122
+
123
+ // set of attributes always shared by the wrapper component
124
+ const containerProps = {
125
+ id,
126
+ infoId,
127
+ activeClass,
128
+ label,
129
+ infoTextClass,
130
+ infoText,
131
+ wrapperClass
132
+ };
133
+
134
+ if (placeholder) {
135
+ return (
136
+ <InputContainer {...containerProps}>
137
+ <textarea
138
+ {...attributes}
139
+ {...extraAttributes}
140
+ {...sharedAttributes}
141
+ className={inputClasses}
142
+ placeholder={placeholder}
143
+ />
144
+ </InputContainer>
145
+ );
146
+ }
147
+
148
+ if (normalized) {
149
+ return (
150
+ <InputContainer {...containerProps}>
151
+ <textarea
152
+ {...attributes}
153
+ {...extraAttributes}
154
+ {...sharedAttributes}
155
+ className={inputClasses}
156
+ readOnly
157
+ />
158
+ </InputContainer>
159
+ );
160
+ }
161
+ if (label || infoText) {
162
+ return (
163
+ <InputContainer {...containerProps}>
164
+ <textarea
165
+ {...attributes}
166
+ {...extraAttributes}
167
+ {...sharedAttributes}
168
+ className={inputClasses}
169
+ />
170
+ </InputContainer>
171
+ );
172
+ }
173
+
174
+ return (
175
+ <textarea
176
+ {...attributes}
177
+ {...extraAttributes}
178
+ ref={innerRef}
179
+ className={inputClasses}
180
+ {...sharedAttributes}
181
+ />
182
+ );
183
+ }
184
+ }