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.
- package/README.EN.md +35 -17
- package/README.md +34 -18
- package/package.json +152 -120
- package/src/Accordion/Accordion.tsx +30 -0
- package/src/Accordion/AccordionBody.tsx +127 -0
- package/src/Accordion/AccordionHeader.tsx +42 -0
- package/src/Alert/Alert.tsx +39 -0
- package/src/Avatar/AvatarContainer.tsx +22 -0
- package/src/Avatar/AvatarExtraText.tsx +19 -0
- package/src/Avatar/AvatarGroupContainer.tsx +23 -0
- package/src/Avatar/AvatarIcon.tsx +57 -0
- package/src/Avatar/AvatarPresence.tsx +24 -0
- package/src/Avatar/AvatarStatus.tsx +24 -0
- package/src/Avatar/AvatarWrapper.tsx +24 -0
- package/src/Badge/Badge.tsx +40 -0
- package/src/BottomNav/BottomNav.tsx +20 -0
- package/src/BottomNav/BottomNavItem.tsx +75 -0
- package/src/Breadcrumb/Breadcrumb.tsx +40 -0
- package/src/Button/Button.tsx +55 -0
- package/src/Callout/Callout.tsx +35 -0
- package/src/Callout/CalloutText.tsx +29 -0
- package/src/Callout/CalloutTitle.tsx +24 -0
- package/src/Card/Card.tsx +49 -0
- package/src/Card/CardBody.tsx +21 -0
- package/src/Card/CardCategory.tsx +48 -0
- package/src/Card/CardFooterCTA.tsx +19 -0
- package/src/Card/CardReadMore.tsx +35 -0
- package/src/Card/CardSignature.tsx +19 -0
- package/src/Card/CardTag.tsx +19 -0
- package/src/Card/CardTagsHeader.tsx +28 -0
- package/src/Card/CardText.tsx +19 -0
- package/src/Card/CardTitle.tsx +17 -0
- package/src/Chips/Chip.tsx +37 -0
- package/src/Chips/ChipLabel.tsx +19 -0
- package/src/Collapse/Collapse.tsx +100 -0
- package/src/CookieBar/CookieBar.tsx +19 -0
- package/src/CookieBar/CookieBarButton.tsx +27 -0
- package/src/CookieBar/CookieBarButtons.tsx +19 -0
- package/src/Dimmer/Dimmer.tsx +51 -0
- package/src/Dimmer/DimmerButtons.tsx +35 -0
- package/src/FontLoader/FontLoader.tsx +32 -0
- package/src/Forward/Forward.tsx +40 -0
- package/src/Grid/GridItem.tsx +23 -0
- package/src/Grid/GridItemText.tsx +20 -0
- package/src/Grid/GridItemTextWrapper.tsx +21 -0
- package/src/Grid/GridList.tsx +20 -0
- package/src/Grid/GridRow.tsx +20 -0
- package/src/Grid/index.ts +11 -0
- package/src/{components/Header/Header.js → Header/Header.tsx} +19 -24
- package/src/Header/HeaderBrand.tsx +90 -0
- package/src/Header/HeaderContent.tsx +42 -0
- package/src/Header/HeaderContext.tsx +9 -0
- package/src/Header/HeaderLinkZone.tsx +19 -0
- package/src/Header/HeaderRightZone.tsx +26 -0
- package/src/Header/HeaderSearch.tsx +33 -0
- package/src/Header/HeaderSocialsZone.tsx +26 -0
- package/src/Header/HeaderToggler.tsx +46 -0
- package/src/{components/Header/Headers.js → Header/Headers.tsx} +17 -22
- package/src/Hero/Hero.tsx +34 -0
- package/src/Hero/HeroBackground.tsx +25 -0
- package/src/Hero/HeroBody.tsx +21 -0
- package/src/Hero/HeroButton.tsx +19 -0
- package/src/Hero/HeroCategory.tsx +15 -0
- package/src/Hero/HeroTitle.tsx +16 -0
- package/src/Hero/index.ts +13 -0
- package/src/Icon/EmptyIcon.tsx +7 -0
- package/src/Icon/Icon.tsx +116 -0
- package/src/Icon/assets/ItArrowDown.tsx +9 -0
- package/src/Icon/assets/ItArrowDownCircle.tsx +9 -0
- package/src/Icon/assets/ItArrowDownTriangle.tsx +9 -0
- package/src/Icon/assets/ItArrowLeft.tsx +9 -0
- package/src/Icon/assets/ItArrowLeftCircle.tsx +9 -0
- package/src/Icon/assets/ItArrowLeftTriangle.tsx +9 -0
- package/src/Icon/assets/ItArrowRight.tsx +9 -0
- package/src/Icon/assets/ItArrowRightCircle.tsx +9 -0
- package/src/Icon/assets/ItArrowRightTriangle.tsx +9 -0
- package/src/Icon/assets/ItArrowUp.tsx +9 -0
- package/src/Icon/assets/ItArrowUpCircle.tsx +9 -0
- package/src/Icon/assets/ItArrowUpTriangle.tsx +9 -0
- package/src/Icon/assets/ItBan.tsx +9 -0
- package/src/Icon/assets/ItBehance.tsx +9 -0
- package/src/Icon/assets/ItBookmark.tsx +9 -0
- package/src/Icon/assets/ItBox.tsx +12 -0
- package/src/Icon/assets/ItBurger.tsx +9 -0
- package/src/Icon/assets/ItCalendar.tsx +9 -0
- package/src/Icon/assets/ItCamera.tsx +9 -0
- package/src/Icon/assets/ItCard.tsx +9 -0
- package/src/Icon/assets/ItChartLine.tsx +12 -0
- package/src/Icon/assets/ItCheck.tsx +9 -0
- package/src/Icon/assets/ItCheckCircle.tsx +9 -0
- package/src/Icon/assets/ItChevronLeft.tsx +8 -0
- package/src/Icon/assets/ItChevronRight.tsx +8 -0
- package/src/Icon/assets/ItClip.tsx +9 -0
- package/src/Icon/assets/ItClock.tsx +9 -0
- package/src/Icon/assets/ItClose.tsx +9 -0
- package/src/Icon/assets/ItCloseBig.tsx +9 -0
- package/src/Icon/assets/ItCloseCircle.tsx +9 -0
- package/src/Icon/assets/ItCodeCircle.tsx +9 -0
- package/src/Icon/assets/ItCollapse.tsx +8 -0
- package/src/Icon/assets/ItComment.tsx +9 -0
- package/src/Icon/assets/ItCopy.tsx +9 -0
- package/src/Icon/assets/ItDelete.tsx +12 -0
- package/src/Icon/assets/ItDesignersItalia.tsx +9 -0
- package/src/Icon/assets/ItDownload.tsx +9 -0
- package/src/Icon/assets/ItError.tsx +9 -0
- package/src/Icon/assets/ItExchangeCircle.tsx +9 -0
- package/src/Icon/assets/ItExpand.tsx +8 -0
- package/src/Icon/assets/ItExternalLink.tsx +9 -0
- package/src/Icon/assets/ItFacebook.tsx +9 -0
- package/src/Icon/assets/ItFacebookSquare.tsx +9 -0
- package/src/Icon/assets/ItFile.tsx +9 -0
- package/src/Icon/assets/ItFiles.tsx +9 -0
- package/src/Icon/assets/ItFlag.tsx +9 -0
- package/src/Icon/assets/ItFlickr.tsx +10 -0
- package/src/Icon/assets/ItFlickrSquare.tsx +9 -0
- package/src/Icon/assets/ItFolder.tsx +9 -0
- package/src/Icon/assets/ItFullscreen.tsx +11 -0
- package/src/Icon/assets/ItFunnel.tsx +9 -0
- package/src/Icon/assets/ItGithub.tsx +9 -0
- package/src/Icon/assets/ItHearing.tsx +9 -0
- package/src/Icon/assets/ItHelp.tsx +9 -0
- package/src/Icon/assets/ItHelpCircle.tsx +9 -0
- package/src/Icon/assets/ItHorn.tsx +9 -0
- package/src/Icon/assets/ItInbox.tsx +12 -0
- package/src/Icon/assets/ItInfoCircle.tsx +9 -0
- package/src/Icon/assets/ItInstagram.tsx +9 -0
- package/src/Icon/assets/ItKey.tsx +9 -0
- package/src/Icon/assets/ItLessCircle.tsx +12 -0
- package/src/Icon/assets/ItLink.tsx +9 -0
- package/src/Icon/assets/ItLinkedin.tsx +9 -0
- package/src/Icon/assets/ItLinkedinSquare.tsx +9 -0
- package/src/Icon/assets/ItList.tsx +9 -0
- package/src/Icon/assets/ItLock.tsx +12 -0
- package/src/Icon/assets/ItLocked.tsx +9 -0
- package/src/Icon/assets/ItMail.tsx +9 -0
- package/src/Icon/assets/ItMapMarker.tsx +9 -0
- package/src/Icon/assets/ItMapMarkerCircle.tsx +12 -0
- package/src/Icon/assets/ItMapMarkerMinus.tsx +9 -0
- package/src/Icon/assets/ItMapMarkerPlus.tsx +12 -0
- package/src/Icon/assets/ItMaximize.tsx +11 -0
- package/src/Icon/assets/ItMaximizeAlt.tsx +11 -0
- package/src/Icon/assets/ItMedium.tsx +9 -0
- package/src/Icon/assets/ItMediumSquare.tsx +9 -0
- package/src/Icon/assets/ItMinimize.tsx +11 -0
- package/src/Icon/assets/ItMinus.tsx +9 -0
- package/src/Icon/assets/ItMinusCircle.tsx +9 -0
- package/src/Icon/assets/ItMoreActions.tsx +9 -0
- package/src/Icon/assets/ItMoreItems.tsx +9 -0
- package/src/Icon/assets/ItNote.tsx +9 -0
- package/src/Icon/assets/ItOpenSource.tsx +9 -0
- package/src/Icon/assets/ItPa.tsx +9 -0
- package/src/Icon/assets/ItPasswordInvisible.tsx +9 -0
- package/src/Icon/assets/ItPasswordVisible.tsx +9 -0
- package/src/Icon/assets/ItPencil.tsx +9 -0
- package/src/Icon/assets/ItPiattaforme.tsx +10 -0
- package/src/Icon/assets/ItPin.tsx +9 -0
- package/src/Icon/assets/ItPlug.tsx +9 -0
- package/src/Icon/assets/ItPlus.tsx +9 -0
- package/src/Icon/assets/ItPlusCircle.tsx +9 -0
- package/src/Icon/assets/ItPresentation.tsx +9 -0
- package/src/Icon/assets/ItPrint.tsx +9 -0
- package/src/Icon/assets/ItRefresh.tsx +9 -0
- package/src/Icon/assets/ItRestore.tsx +9 -0
- package/src/Icon/assets/ItRss.tsx +11 -0
- package/src/Icon/assets/ItRssSquare.tsx +9 -0
- package/src/Icon/assets/ItSearch.tsx +9 -0
- package/src/Icon/assets/ItSettings.tsx +9 -0
- package/src/Icon/assets/ItShare.tsx +9 -0
- package/src/Icon/assets/ItSoftware.tsx +10 -0
- package/src/Icon/assets/ItStarFull.tsx +9 -0
- package/src/Icon/assets/ItStarOutline.tsx +9 -0
- package/src/Icon/assets/ItTeamDigitale.tsx +8 -0
- package/src/Icon/assets/ItTelegram.tsx +11 -0
- package/src/Icon/assets/ItTelephone.tsx +9 -0
- package/src/Icon/assets/ItTool.tsx +9 -0
- package/src/Icon/assets/ItTwitter.tsx +9 -0
- package/src/Icon/assets/ItTwitterSquare.tsx +9 -0
- package/src/Icon/assets/ItUnlocked.tsx +9 -0
- package/src/Icon/assets/ItUpload.tsx +9 -0
- package/src/Icon/assets/ItUser.tsx +9 -0
- package/src/Icon/assets/ItVideo.tsx +9 -0
- package/src/Icon/assets/ItWarning.tsx +9 -0
- package/src/Icon/assets/ItWarningCircle.tsx +9 -0
- package/src/Icon/assets/ItWhatsapp.tsx +9 -0
- package/src/Icon/assets/ItWhatsappSquare.tsx +10 -0
- package/src/Icon/assets/ItWifi.tsx +12 -0
- package/src/Icon/assets/ItYoutube.tsx +9 -0
- package/src/Icon/assets/ItZoomIn.tsx +9 -0
- package/src/Icon/assets/ItZoomOut.tsx +9 -0
- package/src/Icon/assets/index.tsx +504 -0
- package/src/Input/Input.tsx +342 -0
- package/src/Input/InputContainer.tsx +34 -0
- package/src/Input/TextArea.tsx +184 -0
- package/src/Input/TimeInput.tsx +303 -0
- package/src/Input/utils.tsx +166 -0
- package/src/LinkList/LinkList.tsx +65 -0
- package/src/LinkList/LinkListItem.tsx +98 -0
- package/src/Megamenu/Megamenu.tsx +37 -0
- package/src/Megamenu/MegamenuFooter.tsx +20 -0
- package/src/Megamenu/MegamenuHighlightColumn.tsx +33 -0
- package/src/Megamenu/MegamenuItem.tsx +27 -0
- package/src/Modal/Modal.tsx +79 -0
- package/src/Modal/ModalBody.tsx +11 -0
- package/src/Modal/ModalFooter.tsx +11 -0
- package/src/Modal/ModalHeader.tsx +70 -0
- package/src/Nav/Nav.tsx +56 -0
- package/src/Notification/Notification.tsx +60 -0
- package/src/Notification/NotificationContent.tsx +135 -0
- package/src/Notification/NotificationManager.tsx +65 -0
- package/src/Notification/core.tsx +46 -0
- package/src/Notification/index.ts +9 -0
- package/src/Notification/types.ts +12 -0
- package/src/Notification/usePosition.tsx +11 -0
- package/src/Pager/Pager.tsx +48 -0
- package/src/PasswordInput/PasswordInput.tsx +43 -0
- package/src/Progress/Progress.tsx +94 -0
- package/src/Rating/Rating.tsx +130 -0
- package/src/ResponsiveImage/ResponsiveImage.tsx +25 -0
- package/src/Section/Section.tsx +86 -0
- package/src/Select/Select.tsx +97 -0
- package/src/Select/shared.tsx +45 -0
- package/src/Sidebar/Sidebar.tsx +46 -0
- package/src/Skiplink/Skiplink.tsx +20 -0
- package/src/Skiplink/SkiplinkItem.tsx +29 -0
- package/src/Spinner/Spinner.tsx +55 -0
- package/src/Stepper/StepperContainer.tsx +30 -0
- package/src/Stepper/StepperContent.tsx +51 -0
- package/src/Stepper/StepperDots.tsx +21 -0
- package/src/Stepper/StepperHeader.tsx +19 -0
- package/src/Stepper/StepperHeaderElement.tsx +77 -0
- package/src/Stepper/StepperNav.tsx +19 -0
- package/src/ThumbNav/ThumbNav.tsx +37 -0
- package/src/ThumbNav/ThumbNavItem.tsx +35 -0
- package/src/Timeline/TimelinePin.tsx +67 -0
- package/src/Timeline/TimelineWrapper.tsx +19 -0
- package/src/Toggle/Toggle.tsx +29 -0
- package/src/Toolbar/Toolbar.tsx +28 -0
- package/src/Toolbar/ToolbarDividerItem.tsx +5 -0
- package/src/Toolbar/ToolbarItem.tsx +95 -0
- package/src/assets.d.ts +4 -0
- package/src/index.tsx +350 -0
- package/src/utils.tsx +26 -0
- package/.editorconfig +0 -18
- package/.eslintrc +0 -65
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -24
- package/AUTHORS +0 -3
- package/CODE_OF_CONDUCT.EN.md +0 -77
- package/CODE_OF_CONDUCT.md +0 -69
- package/dist/design-react-kit.cjs.js +0 -3698
- package/dist/design-react-kit.cjs.js.map +0 -1
- package/dist/design-react-kit.d.ts +0 -1704
- package/dist/design-react-kit.es.js +0 -3188
- package/dist/design-react-kit.es.js.map +0 -1
- package/dist/design-react-kit.full.js +0 -17596
- package/dist/design-react-kit.full.js.map +0 -1
- package/dist/design-react-kit.full.min.js +0 -2
- package/dist/design-react-kit.full.min.js.map +0 -1
- package/dist/design-react-kit.js +0 -13394
- package/dist/design-react-kit.js.map +0 -1
- package/dist/design-react-kit.min.js +0 -2
- package/dist/design-react-kit.min.js.map +0 -1
- package/src/Storyshots.test.js +0 -9
- package/src/components/Accordion/Accordion.js +0 -22
- package/src/components/Accordion/AccordionBody.js +0 -118
- package/src/components/Accordion/AccordionHeader.js +0 -37
- package/src/components/Autocomplete/Autocomplete.js +0 -255
- package/src/components/Avatar/AvatarContainer.js +0 -24
- package/src/components/Avatar/AvatarExtraText.js +0 -22
- package/src/components/Avatar/AvatarGroupContainer.js +0 -23
- package/src/components/Avatar/AvatarIcon.js +0 -32
- package/src/components/Avatar/AvatarPresence.js +0 -25
- package/src/components/Avatar/AvatarStatus.js +0 -25
- package/src/components/Avatar/AvatarWrapper.js +0 -25
- package/src/components/Badge/Badge.js +0 -28
- package/src/components/BottomNav/BottomNav.js +0 -27
- package/src/components/BottomNav/BottomNavItem.js +0 -69
- package/src/components/Button/Button.js +0 -26
- package/src/components/Callout/Callout.js +0 -33
- package/src/components/Callout/CalloutText.js +0 -37
- package/src/components/Callout/CalloutTitle.js +0 -27
- package/src/components/Card/Card.js +0 -50
- package/src/components/Card/CardCategory.js +0 -43
- package/src/components/Card/CardFooterCTA.js +0 -17
- package/src/components/Card/CardReadMore.js +0 -45
- package/src/components/Card/CardSignature.js +0 -17
- package/src/components/Card/CardTag.js +0 -23
- package/src/components/Card/CardTagsHeader.js +0 -21
- package/src/components/Chips/Chip.js +0 -50
- package/src/components/Chips/ChipLabel.js +0 -25
- package/src/components/Collapse/Collapse.js +0 -66
- package/src/components/CookieBar/CookieBar.js +0 -22
- package/src/components/CookieBar/CookieBarButton.js +0 -25
- package/src/components/CookieBar/CookieBarButtons.js +0 -23
- package/src/components/Dimmer/Dimmer.js +0 -38
- package/src/components/Dimmer/DimmerButtons.js +0 -35
- package/src/components/FontLoader/FontLoader.js +0 -22
- package/src/components/FormGroup/FormGroup.js +0 -137
- package/src/components/Forward/Forward.js +0 -32
- package/src/components/Header/HeaderBrand.js +0 -86
- package/src/components/Header/HeaderContent.js +0 -49
- package/src/components/Header/HeaderContext.js +0 -14
- package/src/components/Header/HeaderLinkZone.js +0 -24
- package/src/components/Header/HeaderRightZone.js +0 -33
- package/src/components/Header/HeaderSearch.js +0 -36
- package/src/components/Header/HeaderSocialsZone.js +0 -30
- package/src/components/Header/HeaderToggler.js +0 -50
- package/src/components/Hero/Hero.js +0 -10
- package/src/components/Icon/Icon.js +0 -42
- package/src/components/Input/Input.js +0 -261
- package/src/components/Input/InputContainer.js +0 -39
- package/src/components/Input/utils.js +0 -126
- package/src/components/LinkList/LinkList.js +0 -65
- package/src/components/LinkList/LinkListItem.js +0 -88
- package/src/components/Nav/Nav.js +0 -37
- package/src/components/Notification/Notification.js +0 -78
- package/src/components/Offcanvas/Offcanvas.js +0 -101
- package/src/components/Pager/Pager.js +0 -32
- package/src/components/PagerList/PagerList.js +0 -28
- package/src/components/PasswordInput/PasswordInput.js +0 -41
- package/src/components/PasswordMeter/PasswordMeter.js +0 -80
- package/src/components/Progress/Progress.js +0 -88
- package/src/components/Rating/Rating.js +0 -130
- package/src/components/Section/Section.js +0 -49
- package/src/components/Separator/Separator.js +0 -34
- package/src/components/Sidebar/Sidebar.js +0 -53
- package/src/components/Skiplink/Skiplink.js +0 -25
- package/src/components/Skiplink/SkiplinkItem.js +0 -25
- package/src/components/Spinner/Spinner.js +0 -65
- package/src/components/Stepper/StepperContainer.js +0 -33
- package/src/components/Stepper/StepperContent.js +0 -54
- package/src/components/Stepper/StepperDots.js +0 -27
- package/src/components/Stepper/StepperHeader.js +0 -27
- package/src/components/Stepper/StepperHeaderElement.js +0 -45
- package/src/components/Stepper/StepperNav.js +0 -27
- package/src/components/Table/Table.js +0 -68
- package/src/components/Timeline/TimelinePin.js +0 -59
- package/src/components/Timeline/TimelineWrapper.js +0 -21
- package/src/components/Toggle/Toggle.js +0 -27
- package/src/components/utils.js +0 -1
- package/src/index.js +0 -144
- package/static/favicons/android-chrome-192x192.png +0 -0
- package/static/favicons/android-chrome-512x512.png +0 -0
- package/static/favicons/apple-touch-icon.png +0 -0
- package/static/favicons/browserconfig.xml +0 -9
- package/static/favicons/favicon-16x16.png +0 -0
- package/static/favicons/favicon-32x32.png +0 -0
- package/static/favicons/favicon.ico +0 -0
- package/static/favicons/manifest.webmanifest +0 -21
- package/static/favicons/mstile-150x150.png +0 -0
- 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
|
+
}
|