├── .checkdepsignore ├── .eslintignore ├── .eslintrc.js ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── actions │ ├── android │ │ └── action.yml │ ├── install │ │ └── action.yml │ ├── ios │ │ └── action.yml │ ├── lint │ │ └── action.yml │ ├── release │ │ └── action.yml │ └── test │ │ └── action.yml └── workflows │ ├── build.yml │ ├── checker.yml │ ├── development.yml │ ├── docs.yml │ └── release.yml ├── .gitignore ├── .gitlab-ci.yml ├── .prettierrc.js ├── .releaserc.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── SECURITY.md ├── __mocks__ ├── globalMock.ts └── svgMock.ts ├── _bundle └── config ├── app.config.js ├── assets └── images │ ├── adaptive-icon.png │ ├── favicon.png │ ├── icon.png │ └── splash.png ├── babel.config.js ├── commitlint.config.js ├── docs ├── .gitignore ├── README.md ├── babel.config.js ├── blog │ ├── 2023-12-25-welcome │ │ └── index.md │ └── authors.yml ├── docs │ ├── API │ │ ├── Intro.md │ │ ├── core │ │ │ ├── _category_.json │ │ │ └── popups │ │ │ │ ├── _category_.json │ │ │ │ ├── usePopup.mdx │ │ │ │ └── usePopups.mdx │ │ └── utils │ │ │ ├── _category_.json │ │ │ ├── useDebounce.md │ │ │ ├── useIsForeground.mdx │ │ │ ├── useLatest.mdx │ │ │ ├── useThrottle.md │ │ │ └── useToggle.mdx │ ├── components │ │ ├── Intro.md │ │ ├── calendar │ │ │ ├── Calendar.mdx │ │ │ ├── ModalCalendar.mdx │ │ │ ├── _category_.json │ │ │ └── assets │ │ │ │ └── Calendar.mov │ │ ├── chart │ │ │ ├── LineChart.mdx │ │ │ ├── _category_.json │ │ │ └── assets │ │ │ │ └── LineChart.mov │ │ ├── core │ │ │ ├── Typography │ │ │ │ ├── Title.mdx │ │ │ │ ├── Typography.mdx │ │ │ │ ├── TypographyLegacy.mdx │ │ │ │ ├── _category_.json │ │ │ │ └── assets │ │ │ │ │ ├── Legacy.png │ │ │ │ │ ├── Title.png │ │ │ │ │ └── Typography.png │ │ │ ├── _category_.json │ │ │ ├── chat │ │ │ │ ├── ChatInput.mdx │ │ │ │ ├── ChatInputField.mdx │ │ │ │ ├── ChatMessage.mdx │ │ │ │ ├── ChatMessageAvatar.mdx │ │ │ │ ├── ChatPressableIcon.mdx │ │ │ │ ├── _category_.json │ │ │ │ └── assets │ │ │ │ │ ├── ChatInput.png │ │ │ │ │ └── ChatMessage.png │ │ │ ├── controls │ │ │ │ ├── CheckBox.md │ │ │ │ ├── ControlsList.mdx │ │ │ │ ├── Radio.mdx │ │ │ │ ├── Slider.mdx │ │ │ │ ├── Swipe.mdx │ │ │ │ ├── _category_.json │ │ │ │ └── assets │ │ │ │ │ ├── Checkbox.png │ │ │ │ │ ├── ControlList.png │ │ │ │ │ ├── Radio.png │ │ │ │ │ ├── Slider.mp4 │ │ │ │ │ └── Swipe.mov │ │ │ ├── cta │ │ │ │ ├── Button.mdx │ │ │ │ ├── _category_.json │ │ │ │ └── assets │ │ │ │ │ └── Button.mov │ │ │ ├── inputs │ │ │ │ ├── CodeField.mdx │ │ │ │ ├── DropDown.mdx │ │ │ │ ├── InputField.mdx │ │ │ │ ├── Search.mdx │ │ │ │ ├── _category_.json │ │ │ │ ├── assets │ │ │ │ │ ├── CodeInput.mov │ │ │ │ │ ├── DropDown.mov │ │ │ │ │ ├── InputField.png │ │ │ │ │ └── Search.png │ │ │ │ └── base │ │ │ │ │ ├── InputSubtitle.mdx │ │ │ │ │ ├── InputTitle.mdx │ │ │ │ │ └── _category_.json │ │ │ ├── navbars │ │ │ │ ├── PanelHeader.mdx │ │ │ │ ├── Tabs.mdx │ │ │ │ ├── _category_.json │ │ │ │ └── assets │ │ │ │ │ ├── PanelHeader.png │ │ │ │ │ └── Tabs.mov │ │ │ ├── others │ │ │ │ ├── Avatar.mdx │ │ │ │ ├── Collapsible.mdx │ │ │ │ ├── CrossedText.mdx │ │ │ │ ├── Dots.mdx │ │ │ │ ├── Rating.mdx │ │ │ │ ├── _category_.json │ │ │ │ ├── assets │ │ │ │ │ ├── AvatarLight.png │ │ │ │ │ ├── Badge.png │ │ │ │ │ ├── Carousel.mov │ │ │ │ │ ├── Collapsible.mov │ │ │ │ │ ├── CrossedText.png │ │ │ │ │ ├── Dots.mov │ │ │ │ │ └── Status.png │ │ │ │ ├── badge │ │ │ │ │ ├── BadgeIndicator.mdx │ │ │ │ │ ├── Counter.mdx │ │ │ │ │ └── _category_.json │ │ │ │ ├── carousel │ │ │ │ │ ├── AutoCarousel.mdx │ │ │ │ │ ├── AutoLoopCarousel.mdx │ │ │ │ │ ├── Carousel.mdx │ │ │ │ │ ├── LoopCarousel.mdx │ │ │ │ │ └── _category_.json │ │ │ │ └── status │ │ │ │ │ ├── Dot.mdx │ │ │ │ │ ├── Tag.mdx │ │ │ │ │ └── _category_.json │ │ │ ├── popups │ │ │ │ ├── PopupBase.mdx │ │ │ │ ├── _category_.json │ │ │ │ ├── actionSheetBase │ │ │ │ │ ├── ActionSheetBase.mdx │ │ │ │ │ ├── Item.mdx │ │ │ │ │ └── _category_.json │ │ │ │ ├── assets │ │ │ │ │ ├── ActionSheetBase.png │ │ │ │ │ ├── AlertContent.png │ │ │ │ │ ├── CloseIcon.png │ │ │ │ │ ├── HorizontalButtonsView.png │ │ │ │ │ ├── LeftButton.png │ │ │ │ │ ├── ModalAsk.png │ │ │ │ │ ├── ModalBase.mov │ │ │ │ │ ├── ModalError.png │ │ │ │ │ ├── ModalLoading.png │ │ │ │ │ ├── ModalSuccess.png │ │ │ │ │ ├── PopupBase.mov │ │ │ │ │ ├── Snackbar.mov │ │ │ │ │ ├── Snackbar.png │ │ │ │ │ ├── TextContent.png │ │ │ │ │ ├── Tooltip.mov │ │ │ │ │ ├── Tooltip.png │ │ │ │ │ └── VerticalButtonsView.png │ │ │ │ ├── modalBase │ │ │ │ │ ├── AlertContent.mdx │ │ │ │ │ ├── CloseIcon.mdx │ │ │ │ │ ├── HorizontalButtonsView.mdx │ │ │ │ │ ├── ImageView.mdx │ │ │ │ │ ├── ModalBase.mdx │ │ │ │ │ ├── TextContent.mdx │ │ │ │ │ ├── VerticalButton.mdx │ │ │ │ │ ├── VerticalButtonsView.mdx │ │ │ │ │ └── _category_.json │ │ │ │ ├── modals │ │ │ │ │ ├── ModalAsk.mdx │ │ │ │ │ ├── ModalError.mdx │ │ │ │ │ ├── ModalLoading.mdx │ │ │ │ │ ├── ModalSuccess.mdx │ │ │ │ │ └── _category_.json │ │ │ │ ├── snackbar │ │ │ │ │ ├── SnackbarBase.mdx │ │ │ │ │ ├── Title.mdx │ │ │ │ │ └── _category_.json │ │ │ │ └── tooltip │ │ │ │ │ ├── Arrow.mdx │ │ │ │ │ ├── DescriptionText.mdx │ │ │ │ │ ├── LeftButton.mdx │ │ │ │ │ ├── Title.mdx │ │ │ │ │ ├── TooltipBase.mdx │ │ │ │ │ └── _category_.json │ │ │ ├── progress │ │ │ │ ├── Indicator.mdx │ │ │ │ ├── PanelSpinner.mdx │ │ │ │ ├── Spinner.mdx │ │ │ │ ├── _category_.json │ │ │ │ └── assets │ │ │ │ │ ├── Indicator.mov │ │ │ │ │ ├── PanelSpinner.mov │ │ │ │ │ └── spinner.gif │ │ │ └── styles │ │ │ │ ├── SimpleIcon.mdx │ │ │ │ ├── _category_.json │ │ │ │ └── assets │ │ │ │ └── SimpleIcon.png │ │ └── keyboardAware │ │ │ ├── KeyboardAwareScrollView.mdx │ │ │ ├── _category_.json │ │ │ └── assets │ │ │ └── video │ │ │ └── ScrollView.mov │ └── guides │ │ ├── Intro.md │ │ ├── calendar │ │ ├── Introduction.mdx │ │ └── _category_.json │ │ ├── chart │ │ ├── Introduction.mdx │ │ └── _category_.json │ │ ├── core │ │ ├── Introduction.mdx │ │ ├── Popups.mdx │ │ ├── Theme.mdx │ │ └── _category_.json │ │ ├── dragAndDrop │ │ ├── Introduction.mdx │ │ └── _category_.json │ │ ├── keyboardAware │ │ ├── Introduction.mdx │ │ └── _category_.json │ │ ├── markdown │ │ ├── Introduction.mdx │ │ └── _category_.json │ │ └── utils │ │ ├── Introduction.mdx │ │ └── _category_.json ├── docusaurus.config.ts ├── package.json ├── sidebars.js ├── src │ ├── components │ │ └── HomepageFeatures │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ ├── css │ │ └── custom.css │ └── pages │ │ ├── index.module.css │ │ ├── index.tsx │ │ └── markdown-page.md ├── static │ ├── .nojekyll │ └── img │ │ ├── favicon.ico │ │ ├── logo.png │ │ ├── mobydick-social-card.jpeg │ │ └── mobydick.png ├── tsconfig.json └── yarn.lock ├── eas.json ├── jest.config.js ├── lefthook.yml ├── metro.config.js ├── package.json ├── packages ├── KeyboardAware │ ├── .gitignore │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── KeyboardAwareScrollView.tsx │ │ └── index.ts │ └── tsconfig.json ├── calendar │ ├── .gitignore │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── Calendar │ │ │ ├── Calendar.tsx │ │ │ ├── ModalCalendar.tsx │ │ │ ├── __tests__ │ │ │ │ ├── Calendar.test.tsx │ │ │ │ ├── ModalCalendar.test.tsx │ │ │ │ ├── __snapshots__ │ │ │ │ │ ├── Calendar.test.tsx.snap │ │ │ │ │ └── ModalCalendar.test.tsx.snap │ │ │ │ └── functions.test.ts │ │ │ ├── components │ │ │ │ ├── CalendarHeader.tsx │ │ │ │ ├── Months.tsx │ │ │ │ ├── Years.tsx │ │ │ │ └── __tests__ │ │ │ │ │ ├── CalendarHeader.test.tsx │ │ │ │ │ ├── Months.test.tsx │ │ │ │ │ ├── Years.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ ├── CalendarHeader.test.tsx.snap │ │ │ │ │ ├── Months.test.tsx.snap │ │ │ │ │ └── Years.test.tsx.snap │ │ │ ├── constants.ts │ │ │ ├── functions.ts │ │ │ ├── helpers │ │ │ │ ├── mergeObjects.ts │ │ │ │ └── typedKeys.ts │ │ │ ├── index.ts │ │ │ ├── localeConfig.ts │ │ │ ├── stylesCreate.ts │ │ │ └── types.ts │ │ └── index.ts │ ├── svg.d.ts │ └── tsconfig.json ├── chart │ ├── .gitignore │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── BarChart │ │ │ └── index.tsx │ │ ├── LineChart │ │ │ └── index.tsx │ │ ├── components │ │ │ ├── CoordX.tsx │ │ │ ├── CoordY.tsx │ │ │ ├── Coordinates.tsx │ │ │ ├── Line.tsx │ │ │ ├── LineOfPeriod.tsx │ │ │ ├── LinePoints.tsx │ │ │ ├── Lines.tsx │ │ │ ├── Point.tsx │ │ │ ├── PointOfLine.tsx │ │ │ ├── PointerPopup.tsx │ │ │ ├── Section.tsx │ │ │ ├── SectionButton.tsx │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── types.tsx │ │ └── utils │ │ │ ├── constants.ts │ │ │ ├── generateBar.ts │ │ │ ├── generateCoordinatesPath.ts │ │ │ ├── generateLinePath.ts │ │ │ ├── generatePeriodsWithBarPaths.tsx │ │ │ ├── generatePeriodsWithLinePaths.tsx │ │ │ ├── getCoordinateValues.ts │ │ │ ├── getLinesMinMax.tsx │ │ │ └── index.ts │ ├── svg.d.ts │ └── tsconfig.json ├── core │ ├── .gitignore │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── basic │ │ │ ├── README.md │ │ │ ├── components │ │ │ │ ├── Button │ │ │ │ │ ├── ButtonWrapper.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Button.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Button.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── FlatList │ │ │ │ │ ├── FlatList.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── FlatList.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── FlatList.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Pressable │ │ │ │ │ ├── Pressable.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Pressable.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Pressable.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── ScrollView │ │ │ │ │ ├── ScrollView.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── ScrollView.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── ScrollView.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Text │ │ │ │ │ ├── Text.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Text.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Text.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── TextInput │ │ │ │ │ ├── TextInput.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── TextInput.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── TextInput.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── TouchableHighlight │ │ │ │ │ ├── TouchableHighlight.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── TouchableHighlight.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── TouchableHighlight.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── TouchableOpacity │ │ │ │ │ ├── TouchableOpacity.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── TouchableOpacity.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── TouchableOpacity.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── View │ │ │ │ │ ├── View.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── View.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── View.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── config │ │ │ │ ├── __tests__ │ │ │ │ │ └── config.test.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── chat │ │ │ ├── components │ │ │ │ ├── ChatInput.tsx │ │ │ │ ├── ChatInputField.tsx │ │ │ │ ├── ChatMessage.tsx │ │ │ │ ├── ChatMessageAvatar.tsx │ │ │ │ ├── ChatPressableIcon.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── ChatInput.test.tsx │ │ │ │ │ ├── ChatInputField.test.tsx │ │ │ │ │ ├── ChatMessage.test.tsx │ │ │ │ │ ├── ChatMessageAvatar.test.tsx │ │ │ │ │ ├── ChatPressableIcon.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ ├── ChatInput.test.tsx.snap │ │ │ │ │ │ ├── ChatInputField.test.tsx.snap │ │ │ │ │ │ ├── ChatMessage.test.tsx.snap │ │ │ │ │ │ ├── ChatMessageAvatar.test.tsx.snap │ │ │ │ │ │ └── ChatPressableIcon.test.tsx.snap │ │ │ │ └── index.ts │ │ │ ├── functions │ │ │ │ ├── __tests__ │ │ │ │ │ └── isValidMessageTime.test.ts │ │ │ │ └── isValidMessageTime.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── controls │ │ │ ├── CheckBox │ │ │ │ ├── CheckBox.tsx │ │ │ │ ├── CheckSquare.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── CheckBox.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── CheckBox.test.tsx.snap │ │ │ │ ├── index.ts │ │ │ │ └── stylesCreate.ts │ │ │ ├── Control.tsx │ │ │ ├── ControlsLists │ │ │ │ ├── ControlsList.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── ControlsList.tsx │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── ControlsList.tsx.snap │ │ │ │ │ └── useCloneControls.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── stylesCreate.ts │ │ │ │ ├── types.ts │ │ │ │ └── useCloneControls.ts │ │ │ ├── README.md │ │ │ ├── Radio │ │ │ │ ├── Circle.tsx │ │ │ │ ├── Radio.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── Circle.test.tsx │ │ │ │ │ ├── Radio.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ ├── Circle.test.tsx.snap │ │ │ │ │ │ └── Radio.test.tsx.snap │ │ │ │ ├── index.ts │ │ │ │ ├── stylesCreate.ts │ │ │ │ └── types.ts │ │ │ ├── Slider │ │ │ │ ├── Slider.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── Slider.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── Slider.test.tsx.snap │ │ │ │ ├── components │ │ │ │ │ ├── HighThumb.tsx │ │ │ │ │ ├── LowThumb.tsx │ │ │ │ │ ├── Rail.tsx │ │ │ │ │ ├── SelectedRail.tsx │ │ │ │ │ └── Thumb.tsx │ │ │ │ ├── helpers.ts │ │ │ │ ├── hooks.tsx │ │ │ │ ├── index.ts │ │ │ │ └── stylesCreate.ts │ │ │ ├── Swipe │ │ │ │ ├── Swipe.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── Swipe.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── Swipe.test.tsx.snap │ │ │ │ ├── index.ts │ │ │ │ ├── stylesCreate.ts │ │ │ │ └── types.ts │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── cta │ │ │ ├── README.md │ │ │ ├── components │ │ │ │ ├── Button │ │ │ │ │ ├── Button.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Button.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Button.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── utils │ │ │ │ ├── getCounterType.ts │ │ │ │ ├── getDefaultFont.ts │ │ │ │ ├── getSpinnerColor.ts │ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── inputs │ │ │ ├── README.md │ │ │ ├── components │ │ │ │ ├── Base │ │ │ │ │ ├── InputSubtitle.tsx │ │ │ │ │ ├── InputTitle.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── DropDown │ │ │ │ │ ├── DropDown.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── DropDown.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── DropDown.test.tsx.snap │ │ │ │ │ ├── components │ │ │ │ │ │ ├── Chip.tsx │ │ │ │ │ │ ├── ChipList.tsx │ │ │ │ │ │ ├── DropDownIcon.tsx │ │ │ │ │ │ ├── ListEmptySelector.tsx │ │ │ │ │ │ ├── Selector.tsx │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── Chip.test.tsx │ │ │ │ │ │ │ ├── ChipList.test.tsx │ │ │ │ │ │ │ ├── DropDownIcon.test.tsx │ │ │ │ │ │ │ ├── ListEmptySelector.test.tsx │ │ │ │ │ │ │ ├── Selector.test.tsx │ │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ │ ├── Chip.test.tsx.snap │ │ │ │ │ │ │ │ ├── ChipList.test.tsx.snap │ │ │ │ │ │ │ │ ├── DropDownIcon.test.tsx.snap │ │ │ │ │ │ │ │ ├── ListEmptySelector.test.tsx.snap │ │ │ │ │ │ │ │ └── Selector.test.tsx.snap │ │ │ │ │ │ └── stylesCreate.tsx │ │ │ │ │ ├── constants │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── getDropDownDimensions.test.ts │ │ │ │ │ │ └── getSelectedItems.test.ts │ │ │ │ │ │ ├── getDropDownDimensions.ts │ │ │ │ │ │ └── getSelectedItems.ts │ │ │ │ ├── InputField │ │ │ │ │ ├── InputField.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── InputField.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── InputField.test.tsx.snap │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Search │ │ │ │ │ ├── Search.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Search.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Search.test.tsx.snap │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Verification │ │ │ │ │ ├── CodeField.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── CodeField.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── CodeField.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── index.ts │ │ │ └── style │ │ │ │ ├── disabledStyle.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── validStyle.tsx │ │ │ │ └── wrongStyle.tsx │ │ ├── navbars │ │ │ ├── README.md │ │ │ ├── components │ │ │ │ ├── PanelHeader │ │ │ │ │ ├── PanelHeader.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── PanelHeader.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── PanelHeader.test.tsx.snap │ │ │ │ │ ├── components │ │ │ │ │ │ ├── ContentHeader.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Tabs │ │ │ │ │ ├── Tab.tsx │ │ │ │ │ ├── Tabs.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Tab.test.tsx │ │ │ │ │ │ ├── Tabs.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── Tab.test.tsx.snap │ │ │ │ │ │ │ └── Tabs.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── stylesCreate.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── other │ │ │ ├── README.md │ │ │ ├── components │ │ │ │ ├── Avatar │ │ │ │ │ ├── Avatar.tsx │ │ │ │ │ ├── AvatarGroup.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Avatar.test.tsx │ │ │ │ │ │ ├── AvatarGroup.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── Avatar.test.tsx.snap │ │ │ │ │ │ │ └── AvatarGroup.test.tsx.snap │ │ │ │ │ ├── components │ │ │ │ │ │ ├── AvatarBadge.tsx │ │ │ │ │ │ ├── AvatarWithoutImage.tsx │ │ │ │ │ │ ├── IconAvatar.tsx │ │ │ │ │ │ ├── TextAvatar.tsx │ │ │ │ │ │ └── __tests__ │ │ │ │ │ │ │ ├── IconAvatar.test.tsx │ │ │ │ │ │ │ ├── TextAvatar.test.tsx │ │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── IconAvatar.test.tsx.snap │ │ │ │ │ │ │ └── TextAvatar.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Badge │ │ │ │ │ ├── BadgeIndicator │ │ │ │ │ │ ├── BadgeIndicator.tsx │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── BadgeIndicator.tsx │ │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ │ └── BadgeIndicator.tsx.snap │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── Counter │ │ │ │ │ │ ├── Counter.tsx │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── Counter.test.tsx │ │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ │ └── Counter.test.tsx.snap │ │ │ │ │ │ ├── getFont.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Carousel │ │ │ │ │ ├── AutoCarousel.tsx │ │ │ │ │ ├── AutoLoopCarousel.tsx │ │ │ │ │ ├── Carousel.tsx │ │ │ │ │ ├── LoopCarousel.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── AutoCarousel.test.tsx │ │ │ │ │ │ ├── AutoLoopCarousel.test.tsx │ │ │ │ │ │ ├── Carousel.test.tsx │ │ │ │ │ │ ├── LoopCarousel.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── AutoCarousel.test.tsx.snap │ │ │ │ │ │ │ ├── AutoLoopCarousel.test.tsx.snap │ │ │ │ │ │ │ ├── Carousel.test.tsx.snap │ │ │ │ │ │ │ └── LoopCarousel.test.tsx.snap │ │ │ │ │ ├── components │ │ │ │ │ │ └── EmptyFirstItem.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Collapsible │ │ │ │ │ ├── Collapsible.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Collapsible.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Collapsible.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── CrossedText │ │ │ │ │ ├── CrossedText.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── CrossesText.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── CrossesText.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Dots │ │ │ │ │ ├── Dot.tsx │ │ │ │ │ ├── Dots.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Dots.test.tsx │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── Dots.test.tsx.snap │ │ │ │ │ │ └── stylesCreate.test.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Rating │ │ │ │ │ ├── Rating.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Rating.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Rating.test.tsx.snap │ │ │ │ │ ├── components │ │ │ │ │ │ └── Star.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Status │ │ │ │ │ ├── Status.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Status.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Status.test.tsx.snap │ │ │ │ │ ├── components │ │ │ │ │ │ ├── StatusDot.tsx │ │ │ │ │ │ └── StatusTag.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── constants │ │ │ │ ├── LABELS.ts │ │ │ │ └── index.ts │ │ │ ├── functions │ │ │ │ └── isNumber.ts │ │ │ └── index.ts │ │ ├── popups │ │ │ ├── MobyDickPopup │ │ │ │ ├── MobyDickPopup.ts │ │ │ │ ├── __tests__ │ │ │ │ │ ├── MobyDickPopup.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── MobyDickPopup.test.tsx.snap │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── README.md │ │ │ ├── components │ │ │ │ ├── ActionSheetBase │ │ │ │ │ ├── ActionSheetBase.tsx │ │ │ │ │ ├── Item.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── ActionSheetBase.test.tsx │ │ │ │ │ │ ├── Item.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── ActionSheetBase.test.tsx.snap │ │ │ │ │ │ │ └── Item.test.tsx.snap │ │ │ │ │ ├── content │ │ │ │ │ │ └── Contents.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── ModalBase │ │ │ │ │ ├── AlertContent.tsx │ │ │ │ │ ├── CloseIcon.tsx │ │ │ │ │ ├── HorizontalButtonsView.tsx │ │ │ │ │ ├── ImageView.tsx │ │ │ │ │ ├── ModalBase.tsx │ │ │ │ │ ├── TextContent.tsx │ │ │ │ │ ├── VerticalButton.tsx │ │ │ │ │ ├── VerticalButtonsView.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── AlertContent.test.tsx │ │ │ │ │ │ ├── CloseIcon.test.tsx │ │ │ │ │ │ ├── HorizontalButtonsView.test.tsx │ │ │ │ │ │ ├── ImageView.test.tsx │ │ │ │ │ │ ├── ModalBase.test.tsx │ │ │ │ │ │ ├── TextContent.text.tsx │ │ │ │ │ │ ├── VerticalButtonsView.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── AlertContent.test.tsx.snap │ │ │ │ │ │ │ ├── CloseIcon.test.tsx.snap │ │ │ │ │ │ │ ├── HorizontalButtonsView.test.tsx.snap │ │ │ │ │ │ │ ├── ImageView.test.tsx.snap │ │ │ │ │ │ │ ├── ModalBase.test.tsx.snap │ │ │ │ │ │ │ ├── TextContent.text.tsx.snap │ │ │ │ │ │ │ └── VerticalButtonsView.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── stylesCreate.ts │ │ │ │ ├── Modals │ │ │ │ │ ├── ModalAsk.tsx │ │ │ │ │ ├── ModalError.tsx │ │ │ │ │ ├── ModalLoading.tsx │ │ │ │ │ ├── ModalSuccess.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── ModalAsk.test.tsx │ │ │ │ │ │ ├── ModalError.test.tsx │ │ │ │ │ │ ├── ModalLoading.test.tsx │ │ │ │ │ │ ├── ModalSuccess.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── ModalAsk.test.tsx.snap │ │ │ │ │ │ │ ├── ModalError.test.tsx.snap │ │ │ │ │ │ │ ├── ModalLoading.test.tsx.snap │ │ │ │ │ │ │ └── ModalSuccess.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── PopupBase │ │ │ │ │ ├── PopupBase.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── PopupBase.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── PopupBase.test.tsx.snap │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── SnackbarBase │ │ │ │ │ ├── SnackbarBase.tsx │ │ │ │ │ ├── SnackbarTitle.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── SnackbarBase.test.tsx │ │ │ │ │ │ ├── Title.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── SnackbarBase.test.tsx.snap │ │ │ │ │ │ │ └── Title.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── TooltipBase │ │ │ │ │ ├── Arrow.tsx │ │ │ │ │ ├── DescriptionText.tsx │ │ │ │ │ ├── LeftButton.tsx │ │ │ │ │ ├── TooltipBase.tsx │ │ │ │ │ ├── TooltipTitle.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Arrow.test.tsx │ │ │ │ │ │ ├── DescriptionText.test.tsx │ │ │ │ │ │ ├── LeftButton.test.tsx │ │ │ │ │ │ ├── Title.test.tsx │ │ │ │ │ │ ├── TooltipBase.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── Arrow.test.tsx.snap │ │ │ │ │ │ │ ├── DescriptionText.test.tsx.snap │ │ │ │ │ │ │ ├── LeftButton.test.tsx.snap │ │ │ │ │ │ │ ├── Title.test.tsx.snap │ │ │ │ │ │ │ └── TooltipBase.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── context │ │ │ │ ├── PopupsContext.ts │ │ │ │ ├── PopupsProvider.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── PopupsProvider.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── PopupsProvider.test.tsx.snap │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── functions │ │ │ │ ├── __tests__ │ │ │ │ │ └── returnTrue.text.ts │ │ │ │ ├── index.ts │ │ │ │ └── returnTrue.ts │ │ │ ├── hooks │ │ │ │ ├── __tests__ │ │ │ │ │ ├── usePopup.test.ts │ │ │ │ │ └── usePopups.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── usePopup.ts │ │ │ │ └── usePopups.ts │ │ │ ├── index.ts │ │ │ ├── reducer │ │ │ │ ├── __tests__ │ │ │ │ │ └── reducer.test.ts │ │ │ │ ├── actions.ts │ │ │ │ ├── constatnts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── reducer.ts │ │ │ │ └── types.ts │ │ │ └── types.ts │ │ ├── portals │ │ │ ├── MobyDickPortal.tsx │ │ │ ├── PortalProvider.tsx │ │ │ ├── components │ │ │ │ ├── Portal.tsx │ │ │ │ ├── PortalHost.tsx │ │ │ │ └── index.ts │ │ │ ├── context │ │ │ │ └── index.ts │ │ │ ├── hooks │ │ │ │ ├── index.ts │ │ │ │ ├── usePortal.ts │ │ │ │ └── usePortalHost.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── progress │ │ │ ├── README.md │ │ │ ├── components │ │ │ │ ├── Indicator │ │ │ │ │ ├── Indicator.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Indicator.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── Indicator.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── PanelSpinner │ │ │ │ │ ├── PanelSpinner.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── PanelSpinner.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ └── PanelSpinner.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stylesCreate.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Spinner │ │ │ │ │ ├── Loader.tsx │ │ │ │ │ ├── Spinner.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── Loader.test.tsx │ │ │ │ │ │ ├── Spinner.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── Loader.test.tsx.snap │ │ │ │ │ │ │ └── Spinner.test.tsx.snap │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── styles │ │ │ ├── README.md │ │ │ ├── constants │ │ │ │ ├── HIT_SLOP.ts │ │ │ │ ├── colors │ │ │ │ │ ├── color.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── defaultSpaces.ts │ │ │ │ ├── index.ts │ │ │ │ └── theme.ts │ │ │ ├── context │ │ │ │ ├── ThemeProvider.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── ThemeProvider.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── ThemeProvider.test.tsx.snap │ │ │ │ ├── context.ts │ │ │ │ └── index.ts │ │ │ ├── hooks │ │ │ │ ├── __tests__ │ │ │ │ │ ├── useStyles.tests.ts │ │ │ │ │ └── useTheme.test.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── useStyles.ts │ │ │ │ └── useTheme.ts │ │ │ ├── icons │ │ │ │ ├── font │ │ │ │ │ ├── SimpleIcon.tsx │ │ │ │ │ ├── SimpleIconAlbum.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── SimpleIcon.test.tsx │ │ │ │ │ │ ├── SimpleIconAlbum.test.tsx │ │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ │ ├── SimpleIcon.test.tsx.snap │ │ │ │ │ │ │ └── SimpleIconAlbum.test.tsx.snap │ │ │ │ │ ├── assets │ │ │ │ │ │ └── fonts │ │ │ │ │ │ │ └── Neotis.ttf │ │ │ │ │ ├── index.ts │ │ │ │ │ └── unicodesMap.json │ │ │ │ ├── index.ts │ │ │ │ └── svg │ │ │ │ │ ├── check.svg │ │ │ │ │ ├── exit.svg │ │ │ │ │ ├── hide.svg │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── loader.svg │ │ │ │ │ ├── plus.svg │ │ │ │ │ ├── show.svg │ │ │ │ │ └── star.svg │ │ │ ├── index.ts │ │ │ ├── shadows │ │ │ │ ├── getShadows.tsx │ │ │ │ └── index.ts │ │ │ ├── types.ts │ │ │ └── utils │ │ │ │ ├── __tests__ │ │ │ │ └── rem.test.ts │ │ │ │ ├── createStyles.ts │ │ │ │ ├── index.ts │ │ │ │ ├── px.ts │ │ │ │ └── rem.ts │ │ └── typography │ │ │ ├── README.md │ │ │ ├── components │ │ │ ├── Title │ │ │ │ ├── Title.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── Title.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── Title.test.tsx.snap │ │ │ │ └── index.ts │ │ │ ├── Typography │ │ │ │ ├── Typography.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── Typography.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── Typography.test.tsx.snap │ │ │ │ └── index.ts │ │ │ ├── TypographyLegacy │ │ │ │ ├── TypographyLegacy.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── TypographyLegacy.test.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── TypographyLegacy.test.tsx.snap │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ │ ├── hooks │ │ │ ├── __tests__ │ │ │ │ └── useFont.test.ts │ │ │ ├── index.ts │ │ │ ├── useFont.ts │ │ │ ├── useFontBody.ts │ │ │ └── useFontHeader.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils │ │ │ ├── fontResolver.ts │ │ │ ├── getSize.tsx │ │ │ ├── getWeight.ts │ │ │ └── index.ts │ ├── svg.d.ts │ └── tsconfig.json ├── dragAndDrop │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── DragAndDrop │ │ │ ├── DragAndDrop.tsx │ │ │ ├── DragAndDropList.tsx │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── index.ts │ ├── svg.d.ts │ └── tsconfig.json ├── markdown │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── Markdown │ │ │ ├── Markdown.tsx │ │ │ ├── index.ts │ │ │ └── types.ts │ │ └── index.ts │ ├── svg.d.ts │ └── tsconfig.json └── utils │ ├── .gitignore │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ ├── hooks │ │ ├── __tests__ │ │ │ ├── useDebounce.test.ts │ │ │ ├── useIsForeground.test.tsx │ │ │ ├── useLatest.test.ts │ │ │ ├── useThrottle.test.ts │ │ │ └── useToggle.test.ts │ │ ├── index.ts │ │ ├── useDebounce.ts │ │ ├── useIsForeground.ts │ │ ├── useLatest.ts │ │ ├── useThrottle.ts │ │ └── useToggle.ts │ └── index.ts │ └── tsconfig.json ├── scripts ├── env.sh ├── release.ts ├── release │ ├── __tests__ │ │ └── getIncrementedVersion.test.ts │ ├── getIncrementedVersion.ts │ ├── getPackageList.ts │ ├── publishPackage.ts │ └── setPackageVersion.ts ├── semantic-release.ts └── utils │ └── logger.ts ├── src ├── app │ ├── +html.tsx │ ├── +not-found.tsx │ └── _layout.tsx ├── entities │ └── index.ts ├── pages │ └── MainStack │ │ ├── Home │ │ ├── Calendar │ │ │ └── ui │ │ │ │ └── index.tsx │ │ ├── Chart │ │ │ ├── BarChart │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── LineChart │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ └── ui │ │ │ │ └── index.tsx │ │ ├── Core │ │ │ ├── CTA │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Chat │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Controls │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── DragAndDrop │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Inputs │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Navbars │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Other │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Popup │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Portals │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Progress │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Styles │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ ├── Typography │ │ │ │ ├── Title │ │ │ │ │ └── ui │ │ │ │ │ │ └── index.tsx │ │ │ │ ├── Typography │ │ │ │ │ └── ui │ │ │ │ │ │ └── index.tsx │ │ │ │ ├── TypographyLegacy │ │ │ │ │ └── index.tsx │ │ │ │ └── ui │ │ │ │ │ └── index.tsx │ │ │ └── ui │ │ │ │ └── index.tsx │ │ ├── KeyboardAware │ │ │ ├── ScrollView │ │ │ │ ├── Tabs │ │ │ │ │ └── ui │ │ │ │ │ │ ├── KeyboardAwareScrollViewWithBottomAndTabsScreen.tsx │ │ │ │ │ │ ├── KeyboardAwareScrollViewWithTabsScreen.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ └── ui │ │ │ │ │ ├── KeyboardAwareScrollViewScreen.tsx │ │ │ │ │ └── KeyboardAwareScrollViewWithBottomScreen.tsx │ │ │ └── ui │ │ │ │ └── index.tsx │ │ ├── Markdown │ │ │ └── ui │ │ │ │ └── index.tsx │ │ ├── Utils │ │ │ └── ui │ │ │ │ └── index.tsx │ │ └── ui │ │ │ └── index.tsx │ │ ├── Settings │ │ └── ui │ │ │ └── index.tsx │ │ └── ui │ │ └── index.tsx ├── shared │ ├── lib │ │ ├── constants │ │ │ ├── rootStackParamList.ts │ │ │ └── screens.ts │ │ ├── hooks │ │ │ ├── __tests__ │ │ │ │ └── useNavigationTheme.test.ts │ │ │ └── useNavigationTheme.ts │ │ ├── index.ts │ │ ├── navigationRef.ts │ │ └── test │ │ │ └── data │ │ │ ├── avatar.ts │ │ │ └── chart.ts │ ├── styles │ │ └── getScreenStyles.ts │ └── ui │ │ ├── BlockView.tsx │ │ ├── Header.tsx │ │ ├── NavigationButton.tsx │ │ ├── ThemedText.tsx │ │ ├── ThemedView.tsx │ │ ├── images │ │ └── Avatar.png │ │ └── index.ts └── widgets │ ├── Calendar │ └── ui │ │ ├── CalendarWidget.tsx │ │ └── ModalCalendarWidget.tsx │ ├── Chart │ └── ui │ │ ├── RenderHeader.tsx │ │ └── RenderSectionItem.tsx │ ├── Core │ ├── CTA │ │ └── ui │ │ │ └── ButtonWidget.tsx │ ├── Chat │ │ └── ui │ │ │ └── ChatWidget.tsx │ ├── Controls │ │ └── ui │ │ │ ├── ControlListWidget.tsx │ │ │ ├── SliderWidget.tsx │ │ │ └── SwipeWidget.tsx │ ├── Inputs │ │ └── ui │ │ │ ├── DropDownExample.tsx │ │ │ ├── ExampleSearch.tsx │ │ │ ├── InputList.tsx │ │ │ ├── InputsWidget.tsx │ │ │ └── Verification.tsx │ ├── Navbars │ │ └── ui │ │ │ ├── PanelHeaderWidget.tsx │ │ │ └── TabsWidget.tsx │ ├── Other │ │ └── ui │ │ │ ├── AvatarWidget.tsx │ │ │ ├── BadgeWidget.tsx │ │ │ ├── CarouselWidget.tsx │ │ │ ├── CollapsibleWidget.tsx │ │ │ ├── CrossedTextWidget.tsx │ │ │ ├── DotsWidget.tsx │ │ │ ├── RatingWidget.tsx │ │ │ └── StatusWidget.tsx │ ├── Popup │ │ └── ui │ │ │ ├── ActionSheetWidget.tsx │ │ │ ├── ModalWidget.tsx │ │ │ ├── ModalsWidget.tsx │ │ │ ├── PopupBaseWidget.tsx │ │ │ ├── SnackbarWidget.tsx │ │ │ └── TooltipWidget.tsx │ ├── Progress │ │ └── ui │ │ │ ├── IndicatorWidget.tsx │ │ │ ├── PanelSpinnerWidget.tsx │ │ │ └── SpinnerWidget.tsx │ └── Styles │ │ └── ui │ │ ├── ShadowWidget.tsx │ │ ├── SimpleIconWidget.tsx │ │ └── TablerIconWidget.tsx │ ├── KeyboardAware │ ├── Bottom.tsx │ └── Inputs.tsx │ └── Markdown │ └── ui │ └── MarkdownWidget.tsx ├── tsconfig.json └── yarn.lock /.checkdepsignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/.checkdepsignore -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | !.storybook 2 | .storybook/storybook.requires.js 3 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@lad-tech/eslint-config'], 3 | ignorePatterns: ['lib', 'docs/*'], 4 | }; 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/actions/install/action.yml: -------------------------------------------------------------------------------- 1 | name: Prepare 2 | description: 'Prepare node and install dependencies' 3 | 4 | runs: 5 | using: "composite" 6 | steps: 7 | - name: Setup node 8 | uses: actions/setup-node@v4 9 | with: 10 | registry-url: 'https://registry.npmjs.org/' 11 | node-version: 20.11.x 12 | cache: yarn 13 | cache-dependency-path: yarn.lock 14 | - name: Install dependencies # install project deps with --frozen-lockfile to make sure we will have the same packages version ( very recommended on running yarn install on ci) 15 | shell: bash 16 | run: yarn install --frozen-lockfile 17 | -------------------------------------------------------------------------------- /.github/actions/lint/action.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | description: 'Run lint' 3 | 4 | runs: 5 | using: "composite" 6 | steps: 7 | - name: Install dependencies # install project deps with --frozen-lockfile to make sure we will have the same packages version ( very recommended on running yarn install on ci) 8 | shell: bash 9 | run: yarn lint:ci 10 | -------------------------------------------------------------------------------- /.github/actions/release/action.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | description: 'Release package' 3 | 4 | inputs: 5 | GH_TOKEN: 6 | description: GH_TOKEN 7 | required: true 8 | NPM_TOKEN: 9 | description: NPM_TOKEN 10 | required: true 11 | 12 | 13 | runs: 14 | using: "composite" 15 | steps: 16 | - name: release # install project deps with --frozen-lockfile to make sure we will have the same packages version ( very recommended on running yarn install on ci) 17 | shell: bash 18 | run: yarn release 19 | env: 20 | GH_TOKEN: ${{ inputs.GH_TOKEN }} 21 | NPM_TOKEN: ${{ inputs.NPM_TOKEN }} 22 | NODE_AUTH_TOKEN: ${{ inputs.NPM_TOKEN }} 23 | -------------------------------------------------------------------------------- /.github/actions/test/action.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | description: 'Run tests' 3 | 4 | runs: 5 | using: "composite" 6 | steps: 7 | - name: Install dependencies # install project deps with --frozen-lockfile to make sure we will have the same packages version ( very recommended on running yarn install on ci) 8 | shell: bash 9 | run: yarn test:ci 10 | -------------------------------------------------------------------------------- /.github/workflows/checker.yml: -------------------------------------------------------------------------------- 1 | name: Checker 2 | 3 | on: 4 | workflow_call: 5 | pull_request: 6 | branches: [ "main", "next" ] 7 | push: 8 | branches: 9 | - main 10 | - next 11 | 12 | jobs: 13 | lint: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v4.1.1 18 | - name: install 19 | uses: ./.github/actions/install 20 | - name: lint 21 | uses: ./.github/actions/lint 22 | test: 23 | runs-on: ubuntu-latest 24 | steps: 25 | - name: Checkout 26 | uses: actions/checkout@v4.1.1 27 | - name: install 28 | uses: ./.github/actions/install 29 | - name: test 30 | uses: ./.github/actions/test 31 | -------------------------------------------------------------------------------- /.github/workflows/development.yml: -------------------------------------------------------------------------------- 1 | name: Development 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | checker: 8 | uses: ./.github/workflows/checker.yml 9 | release: 10 | needs: [checker] 11 | uses: ./.github/workflows/release.yml 12 | build: 13 | needs: [release] 14 | uses: ./.github/workflows/build.yml 15 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | workflow_call: 5 | workflow_dispatch: 6 | 7 | jobs: 8 | release: 9 | runs-on: ubuntu-latest 10 | concurrency: release 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4.1.1 14 | - name: install 15 | uses: ./.github/actions/install 16 | - name: release 17 | uses: ./.github/actions/release 18 | with: 19 | GH_TOKEN: ${{ secrets.GH_TOKEN }} 20 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 21 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | include: 2 | - project: 'mobile-developers/template-builder' 3 | ref: master 4 | file: 'templates/common.yml' 5 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | arrowParens: 'avoid', 3 | bracketSameLine: true, 4 | bracketSpacing: false, 5 | singleQuote: true, 6 | trailingComma: 'all', 7 | }; 8 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 7.13.x | :white_check_mark: | 11 | | < 7.13.x| :x: | 12 | 13 | ## Reporting a Vulnerability 14 | 15 | Please do not open GitHub issues or pull requests - this makes the problem immediately visible to everyone, including malicious actors. 16 | 17 | Security issues in this open source project can be safely reported via email at 18 | -------------------------------------------------------------------------------- /__mocks__/svgMock.ts: -------------------------------------------------------------------------------- 1 | module.exports = 'SvgMock'; 2 | module.exports.ReactComponent = 'SvgMock'; 3 | -------------------------------------------------------------------------------- /_bundle/config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: "vendor/bundle" 2 | BUNDLE_FORCE_RUBY_PLATFORM: 1 3 | -------------------------------------------------------------------------------- /assets/images/adaptive-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/assets/images/adaptive-icon.png -------------------------------------------------------------------------------- /assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/assets/images/favicon.png -------------------------------------------------------------------------------- /assets/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/assets/images/icon.png -------------------------------------------------------------------------------- /assets/images/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/assets/images/splash.png -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {extends: ['@commitlint/config-conventional']}; 2 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /docs/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /docs/blog/authors.yml: -------------------------------------------------------------------------------- 1 | Bibazavr: 2 | name: Lebedev Kirill Igorevich 3 | title: Maintainer of Mobydick 4 | url: https://github.com/Bibazavr 5 | image_url: https://github.com/Bibazavr.png 6 | 7 | -------------------------------------------------------------------------------- /docs/docs/API/Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Intro 6 | 7 | **Mobydick** is set of libraries that are aimed at solving all the pressing problems for React Native developers 8 | 9 | -------------------------------------------------------------------------------- /docs/docs/API/core/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Core", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All core API" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/API/core/popups/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Popups", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All popups API" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/API/utils/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Utils", 3 | "position": 5, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All utils API" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/API/utils/useIsForeground.mdx: -------------------------------------------------------------------------------- 1 | The `useIsForeground` hook is listening `AppState` and return `true` when application is in `foreground` state. 2 | Otherwise return `false` 3 | 4 | ## Example 5 | 6 | ```tsx 7 | import {FC} from "react"; 8 | import {useIsForeground} from "@lad-tech/mobydick-utils"; 9 | import {Text, View} from "@lad-tech/mobydick-core"; 10 | 11 | const Example: FC = () => { 12 | const {isForeground} = useIsForeground(); 13 | 14 | return ( 15 | 16 | Is app in foreground? {isForeground} 17 | 18 | ) 19 | } 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/docs/components/Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Intro 6 | 7 | **Mobydick** is set of libraries that are aimed at solving all the pressing problems for React Native developers 8 | -------------------------------------------------------------------------------- /docs/docs/components/calendar/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Calendar", 3 | "position": 4, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All calendar components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/calendar/assets/Calendar.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/calendar/assets/Calendar.mov -------------------------------------------------------------------------------- /docs/docs/components/chart/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Chart", 3 | "position": 3, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All chart components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/chart/assets/LineChart.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/chart/assets/LineChart.mov -------------------------------------------------------------------------------- /docs/docs/components/core/Typography/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Typography", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All typography components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/Typography/assets/Legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/Typography/assets/Legacy.png -------------------------------------------------------------------------------- /docs/docs/components/core/Typography/assets/Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/Typography/assets/Title.png -------------------------------------------------------------------------------- /docs/docs/components/core/Typography/assets/Typography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/Typography/assets/Typography.png -------------------------------------------------------------------------------- /docs/docs/components/core/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Core", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All core components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/chat/ChatInputField.mdx: -------------------------------------------------------------------------------- 1 | import ChatInput from './assets/ChatInput.png'; 2 | 3 | 4 | 5 | Works with ChatInput component 6 | 7 | 8 | ## Example 9 | 10 | ```tsx 11 | import {useState} from 'react'; 12 | 13 | import { 14 | ChatInputField 15 | } from '@lad-tech/mobydick-core'; 16 | 17 | export const ChatWidget = () => { 18 | const [input, setInput] = useState(''); 19 | 20 | return ( 21 | 22 | ); 23 | }; 24 | 25 | ``` 26 | 27 | ## `Props` 28 | 29 | ### [`TextInput Props`](https://reactnative.dev/docs/textinput#props) 30 | 31 | Inherits [TextInput Props](https://reactnative.dev/docs/textinput#props). 32 | 33 | -------------------------------------------------------------------------------- /docs/docs/components/core/chat/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Chat", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All chat components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/chat/assets/ChatInput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/chat/assets/ChatInput.png -------------------------------------------------------------------------------- /docs/docs/components/core/chat/assets/ChatMessage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/chat/assets/ChatMessage.png -------------------------------------------------------------------------------- /docs/docs/components/core/controls/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Controls", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All controls components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/controls/assets/Checkbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/controls/assets/Checkbox.png -------------------------------------------------------------------------------- /docs/docs/components/core/controls/assets/ControlList.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/controls/assets/ControlList.png -------------------------------------------------------------------------------- /docs/docs/components/core/controls/assets/Radio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/controls/assets/Radio.png -------------------------------------------------------------------------------- /docs/docs/components/core/controls/assets/Slider.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/controls/assets/Slider.mp4 -------------------------------------------------------------------------------- /docs/docs/components/core/controls/assets/Swipe.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/controls/assets/Swipe.mov -------------------------------------------------------------------------------- /docs/docs/components/core/cta/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "CTA", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All CTA components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/cta/assets/Button.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/cta/assets/Button.mov -------------------------------------------------------------------------------- /docs/docs/components/core/inputs/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Inputs", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All inputs components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/inputs/assets/CodeInput.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/inputs/assets/CodeInput.mov -------------------------------------------------------------------------------- /docs/docs/components/core/inputs/assets/DropDown.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/inputs/assets/DropDown.mov -------------------------------------------------------------------------------- /docs/docs/components/core/inputs/assets/InputField.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/inputs/assets/InputField.png -------------------------------------------------------------------------------- /docs/docs/components/core/inputs/assets/Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/inputs/assets/Search.png -------------------------------------------------------------------------------- /docs/docs/components/core/inputs/base/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Base", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All base components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/navbars/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Navbars", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All navbars components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/navbars/assets/PanelHeader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/navbars/assets/PanelHeader.png -------------------------------------------------------------------------------- /docs/docs/components/core/navbars/assets/Tabs.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/navbars/assets/Tabs.mov -------------------------------------------------------------------------------- /docs/docs/components/core/others/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Others", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All others components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/others/assets/AvatarLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/others/assets/AvatarLight.png -------------------------------------------------------------------------------- /docs/docs/components/core/others/assets/Badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/others/assets/Badge.png -------------------------------------------------------------------------------- /docs/docs/components/core/others/assets/Carousel.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/others/assets/Carousel.mov -------------------------------------------------------------------------------- /docs/docs/components/core/others/assets/Collapsible.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/others/assets/Collapsible.mov -------------------------------------------------------------------------------- /docs/docs/components/core/others/assets/CrossedText.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/others/assets/CrossedText.png -------------------------------------------------------------------------------- /docs/docs/components/core/others/assets/Dots.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/others/assets/Dots.mov -------------------------------------------------------------------------------- /docs/docs/components/core/others/assets/Status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/others/assets/Status.png -------------------------------------------------------------------------------- /docs/docs/components/core/others/badge/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Badge", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All badge components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/others/carousel/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Carousel", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All carousel components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/others/status/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Status", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All status components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/popups/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Popups", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All popups components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/popups/actionSheetBase/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "ActionSheetBase", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All actionSheetBase components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/ActionSheetBase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/ActionSheetBase.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/AlertContent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/AlertContent.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/CloseIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/CloseIcon.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/HorizontalButtonsView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/HorizontalButtonsView.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/LeftButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/LeftButton.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/ModalAsk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/ModalAsk.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/ModalBase.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/ModalBase.mov -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/ModalError.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/ModalError.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/ModalLoading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/ModalLoading.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/ModalSuccess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/ModalSuccess.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/PopupBase.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/PopupBase.mov -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/Snackbar.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/Snackbar.mov -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/Snackbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/Snackbar.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/TextContent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/TextContent.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/Tooltip.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/Tooltip.mov -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/Tooltip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/Tooltip.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/assets/VerticalButtonsView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/popups/assets/VerticalButtonsView.png -------------------------------------------------------------------------------- /docs/docs/components/core/popups/modalBase/ImageView.mdx: -------------------------------------------------------------------------------- 1 | Reusable ImageView component for ModalBase 2 | 3 | ## `Props` 4 | 5 | ###
Required
**`image`** 6 | 7 | | TYPE | 8 | |:-------------| 9 | | ReactElement | 10 | 11 | Image for ImageView 12 | 13 | ### `imageStyles` 14 | 15 | | TYPE | 16 | |:-----------------------------------------------------------------| 17 | | [ViewStyle](https://reactnative.dev/docs/view-style-props#props) | 18 | 19 | ImageStyles for ImageView 20 | -------------------------------------------------------------------------------- /docs/docs/components/core/popups/modalBase/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "ModalBase", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All modalBase components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/popups/modals/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Modals", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All modals components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/popups/snackbar/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Snackbar", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All snackbar components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/popups/tooltip/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Tooltip", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All tooltip components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/progress/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Progress", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All progress components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/progress/assets/Indicator.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/progress/assets/Indicator.mov -------------------------------------------------------------------------------- /docs/docs/components/core/progress/assets/PanelSpinner.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/progress/assets/PanelSpinner.mov -------------------------------------------------------------------------------- /docs/docs/components/core/progress/assets/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/progress/assets/spinner.gif -------------------------------------------------------------------------------- /docs/docs/components/core/styles/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Styles", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "A package that is responsible for styles, themes and icons." 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/core/styles/assets/SimpleIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/core/styles/assets/SimpleIcon.png -------------------------------------------------------------------------------- /docs/docs/components/keyboardAware/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "KeyboardAware", 3 | "position": 2, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All KeyboardAware components" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/components/keyboardAware/assets/video/ScrollView.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/docs/components/keyboardAware/assets/video/ScrollView.mov -------------------------------------------------------------------------------- /docs/docs/guides/Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Intro 6 | 7 | **Mobydick** is set of libraries that are aimed at solving all the pressing problems for React Native developers 8 | 9 | - [@lad-tech/mobydick-core](./core/Introduction.mdx) 10 | - [@lad-tech/mobydick-chart](./chart/Introduction.mdx) 11 | - [@lad-tech/keyboard-aware](./keyboardAware/Introduction.mdx) 12 | - [@lad-tech/mobydick-utils](./utils/Introduction.mdx) 13 | - [@lad-tech/mobydick-calendar](./calendar/Introduction.mdx) 14 | -------------------------------------------------------------------------------- /docs/docs/guides/calendar/Introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Getting started 6 | 7 | ## Introduction 8 | 9 | `@lad-tech/mobydick-calendar` is styled Calendar based on [`@lad-tech/mobydick-core`](../core/Introduction) and `react-native-calendars` 10 | 11 | ## Installation 12 | 13 | ```bash 14 | npm install @lad-tech/mobydick-core @lad-tech/mobydick-calendar react-native-calendars 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/docs/guides/calendar/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Calendar", 3 | "position": 4, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All calendar guides" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/guides/chart/Introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Getting started 6 | 7 | ## Introduction 8 | 9 | `@lad-tech/mobydick-chart` is styled and highly performant charts, based on [`@lad-tech/mobydick-core`](../core/Introduction) [`react-native-reanimated`](https://docs.swmansion.com/react-native-reanimated/), [`react-native-gesture-handler`](https://docs.swmansion.com/react-native-gesture-handler/) and [`@shopify/react-native-skia`](https://shopify.github.io/react-native-skia/) 10 | 11 | ## Installation 12 | 13 | ```bash 14 | npm install @lad-tech/mobydick-core @lad-tech/mobydick-chart @shopify/react-native-skia react-native-reanimated react-native-gesture-handler 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/docs/guides/chart/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Chart", 3 | "position": 3, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All chart guides" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/guides/core/Popups.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 2 3 | --- 4 | 5 | ## Introduction 6 | 7 | Provide ability to control all popups in app. 8 | 9 | ## Setup 10 | 11 | ```tsx 12 | import {PopupsProvider, ThemeProvider} from '@lad-tech/mobydic-core'; 13 | import MainStack from '@/pages/MainStack/ui'; 14 | 15 | export default () => { 16 | return ( 17 | 18 | // highlight-next-line 19 | 20 | 21 | // highlight-next-line 22 | 23 | 24 | ); 25 | }; 26 | 27 | ``` 28 | 29 | ## `API` 30 | 31 | ### [`usePopup`](../../API/core/popups/usePopup) 32 | 33 | ### [`usePopups`](../../API/core/popups/usePopups) 34 | -------------------------------------------------------------------------------- /docs/docs/guides/core/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Core", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All core guides" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/guides/dragAndDrop/Introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Getting started 6 | 7 | ## Introduction 8 | 9 | `@lad-tech/mobydick-drag-and-drop` is styled Drag and Drop components based on [`@lad-tech/mobydick-core`](../core/Introduction), `react-native-reanimated` and `react-native-gesture-handler` 10 | 11 | ## Installation 12 | 13 | ```bash 14 | npm install@lad-tech/mobydick-core react-native-reanimated react-native-gesture-handler @lad-tech/mobydick-drag-and-drop 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/docs/guides/dragAndDrop/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Drag And Drop", 3 | "position": 7, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All Drag And Drop guides" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/guides/keyboardAware/Introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Getting started 6 | 7 | ## Introduction 8 | 9 | `@lad-tech/keyboard-aware` is solving all problems with keyboard inside forms 10 | 11 | ## Installation 12 | 13 | ```bash 14 | npm install @lad-tech/keyboard-aware 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/docs/guides/keyboardAware/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "KeyboardAware", 3 | "position": 2, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All KeyboardAware guides" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/guides/markdown/Introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Getting started 6 | 7 | ## Introduction 8 | 9 | `@lad-tech/mobydick-markdown` is styled Markdown components based on [`@lad-tech/mobydick-core`](../core/Introduction) `react-native-markdown-display` 10 | 11 | ## Installation 12 | 13 | ```bash 14 | npm install @lad-tech/mobydick-core react-native-markdown-display @lad-tech/mobydick-markdown 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/docs/guides/markdown/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Markdown", 3 | "position": 6, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All Markdown guides" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/docs/guides/utils/Introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 0 3 | --- 4 | 5 | # Getting started 6 | 7 | ## Introduction 8 | 9 | `@lad-tech/mobydick-utils` is a set of utilities that developing experience easier 10 | 11 | ## Installation 12 | 13 | ```bash 14 | npm install @lad-tech/mobydick-utils 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/docs/guides/utils/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Utils", 3 | "position": 5, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "All utils guides" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/src/components/HomepageFeatures/styles.module.css: -------------------------------------------------------------------------------- 1 | .features { 2 | display: flex; 3 | align-items: center; 4 | padding: 2rem 0; 5 | width: 100%; 6 | } 7 | 8 | .featureSvg { 9 | height: 200px; 10 | width: 200px; 11 | } 12 | -------------------------------------------------------------------------------- /docs/src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS files with the .module.css suffix will be treated as CSS modules 3 | * and scoped locally. 4 | */ 5 | 6 | .heroBanner { 7 | padding: 4rem 0; 8 | text-align: center; 9 | position: relative; 10 | overflow: hidden; 11 | } 12 | 13 | @media screen and (max-width: 996px) { 14 | .heroBanner { 15 | padding: 2rem; 16 | } 17 | } 18 | 19 | .buttons { 20 | display: flex; 21 | align-items: center; 22 | justify-content: center; 23 | } 24 | -------------------------------------------------------------------------------- /docs/src/pages/markdown-page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown page example 3 | --- 4 | 5 | # Markdown page example 6 | 7 | You don't need React to write simple standalone pages. 8 | -------------------------------------------------------------------------------- /docs/static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/static/.nojekyll -------------------------------------------------------------------------------- /docs/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/static/img/favicon.ico -------------------------------------------------------------------------------- /docs/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/static/img/logo.png -------------------------------------------------------------------------------- /docs/static/img/mobydick-social-card.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/static/img/mobydick-social-card.jpeg -------------------------------------------------------------------------------- /docs/static/img/mobydick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lad-tech/mobydick/a5f4fa7479ec73ace865ca5e2e31608745e6bd42/docs/static/img/mobydick.png -------------------------------------------------------------------------------- /docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // This file is not used in compilation. It is here just for a nice editor experience. 3 | "extends": "@docusaurus/tsconfig", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /lefthook.yml: -------------------------------------------------------------------------------- 1 | pre-commit: 2 | parallel: true 3 | commands: 4 | eslint: 5 | glob: "*.{js,jsx,ts,tsx}" 6 | run: yarn eslint --fix {staged_files} 7 | jest: 8 | glob: "*.{js,jsx,ts,tsx}" 9 | run: yarn jest --bail --findRelatedTests --passWithNoTests {staged_files} 10 | typescript: 11 | glob: "*.{ts,tsx}" 12 | run: yarn tsc --noEmit 13 | 14 | commit-msg: 15 | commands: 16 | commitlint: 17 | run: npx commitlint --edit 18 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line @typescript-eslint/no-var-requires 2 | const { getDefaultConfig } = require("expo/metro-config"); 3 | 4 | module.exports = (() => { 5 | const config = getDefaultConfig(__dirname); 6 | 7 | const { transformer, resolver } = config; 8 | 9 | config.transformer = { 10 | ...transformer, 11 | babelTransformerPath: require.resolve("react-native-svg-transformer"), 12 | }; 13 | config.resolver = { 14 | ...resolver, 15 | assetExts: resolver.assetExts.filter((ext) => ext !== "svg"), 16 | sourceExts: [...resolver.sourceExts, "svg"], 17 | }; 18 | 19 | return config; 20 | })(); 21 | -------------------------------------------------------------------------------- /packages/KeyboardAware/.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | -------------------------------------------------------------------------------- /packages/KeyboardAware/README.md: -------------------------------------------------------------------------------- 1 | ## @lad-tech/keyboard-aware 2 | 3 | ## Installation 4 | 5 | ```shell 6 | yarn add @lad-tech/keyboard-aware 7 | ``` 8 | 9 | ## Documentation 10 | 11 | https://lad-tech.github.io/mobydick/docs/guides/keyboardAware/Introduction 12 | -------------------------------------------------------------------------------- /packages/KeyboardAware/index.ts: -------------------------------------------------------------------------------- 1 | export * from './src'; 2 | -------------------------------------------------------------------------------- /packages/KeyboardAware/src/index.ts: -------------------------------------------------------------------------------- 1 | import KeyboardAwareScrollView from './KeyboardAwareScrollView'; 2 | 3 | export {KeyboardAwareScrollView}; 4 | -------------------------------------------------------------------------------- /packages/calendar/.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | -------------------------------------------------------------------------------- /packages/calendar/README.md: -------------------------------------------------------------------------------- 1 | ## @lad-tech/mobydick-calendar 2 | 3 | ## Installation 4 | 5 | ```shell 6 | yarn add @lad-tech/mobydick-core react-native-calendars @lad-tech/mobydick-calendar 7 | ``` 8 | 9 | ## Documentation 10 | 11 | https://lad-tech.github.io/mobydick/docs/guides/calendar/Introduction 12 | -------------------------------------------------------------------------------- /packages/calendar/index.ts: -------------------------------------------------------------------------------- 1 | export * from './src'; 2 | -------------------------------------------------------------------------------- /packages/calendar/src/Calendar/constants.ts: -------------------------------------------------------------------------------- 1 | export const LABELS = { 2 | calendarLeftArrow: 'calendarLeftArrow', 3 | calendarPressTitleMonth: 'calendarPressTitleMonth', 4 | calendarPressTitleYear: 'calendarPressTitleYear', 5 | calendarRightArrow: 'calendarRightArrow', 6 | pressMonth: 'pressMonth', 7 | pressYear: 'pressYear', 8 | }; 9 | -------------------------------------------------------------------------------- /packages/calendar/src/Calendar/helpers/mergeObjects.ts: -------------------------------------------------------------------------------- 1 | import typedKeys from './typedKeys'; 2 | 3 | export default function mergeObjects( 4 | first: T, 5 | second: T, 6 | merger: (key: U, first: T, second: T) => T[U], 7 | ) { 8 | const ret = {} as T; 9 | const keys = new Set(typedKeys(first).concat(typedKeys(second))); 10 | 11 | for (const key of keys) { 12 | ret[key] = merger(key, first, second); 13 | } 14 | 15 | return ret; 16 | } 17 | -------------------------------------------------------------------------------- /packages/calendar/src/Calendar/helpers/typedKeys.ts: -------------------------------------------------------------------------------- 1 | export default function typedKeys( 2 | object: T, 3 | ) { 4 | return Object.keys(object) as (keyof T)[]; 5 | } 6 | -------------------------------------------------------------------------------- /packages/calendar/src/Calendar/index.ts: -------------------------------------------------------------------------------- 1 | import Calendar from './Calendar'; 2 | import ModalCalendar from './ModalCalendar'; 3 | 4 | export {Calendar, ModalCalendar}; 5 | 6 | export * from './types'; 7 | -------------------------------------------------------------------------------- /packages/calendar/src/Calendar/localeConfig.ts: -------------------------------------------------------------------------------- 1 | export const localeConfigRu = { 2 | monthNames: [ 3 | 'Январь', 4 | 'Февраль', 5 | 'Март', 6 | 'Апрель', 7 | 'Май', 8 | 'Июнь', 9 | 'Июль', 10 | 'Август', 11 | 'Сентябрь', 12 | 'Октябрь', 13 | 'Ноябрь', 14 | 'Декабрь', 15 | ], 16 | monthNamesShort: [ 17 | 'Янв', 18 | 'Фев', 19 | 'Март', 20 | 'Апр', 21 | 'Май', 22 | 'Июнь', 23 | 'Июль', 24 | 'Авг', 25 | 'Сен', 26 | 'Окт', 27 | 'Нояб', 28 | 'Дек', 29 | ], 30 | dayNames: [ 31 | 'Воскресенье', 32 | 'Понедельник', 33 | 'Вторник', 34 | 'Среда', 35 | 'Четверг', 36 | 'Пятница', 37 | 'Суббота', 38 | ], 39 | dayNamesShort: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'], 40 | today: 'Сегодня', 41 | }; 42 | -------------------------------------------------------------------------------- /packages/calendar/src/Calendar/stylesCreate.ts: -------------------------------------------------------------------------------- 1 | import {Dimensions} from 'react-native'; 2 | import {createStyles, px} from '@lad-tech/mobydick-core'; 3 | 4 | const {width: WIDTH} = Dimensions.get('window'); 5 | 6 | const stylesCreate = createStyles(({spaces}) => ({ 7 | overlayStyle: { 8 | justifyContent: 'center', 9 | }, 10 | contentCalendar: { 11 | width: WIDTH - spaces.Space8 * 2, 12 | }, 13 | daysView: { 14 | width: WIDTH - spaces.Space8 * 2 - px(16) * 2, 15 | height: px(260), 16 | }, 17 | })); 18 | 19 | export default stylesCreate; 20 | -------------------------------------------------------------------------------- /packages/calendar/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Calendar'; 2 | -------------------------------------------------------------------------------- /packages/calendar/svg.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | import React from 'react'; 3 | import {SvgProps} from 'react-native-svg'; 4 | const content: React.FC; 5 | export default content; 6 | } 7 | -------------------------------------------------------------------------------- /packages/chart/.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | -------------------------------------------------------------------------------- /packages/chart/README.md: -------------------------------------------------------------------------------- 1 | ## @lad-tech/mobydick-chart 2 | 3 | ## Installation 4 | 5 | ```shell 6 | yarn add @lad-tech/mobydick-core @lad-tech/mobydick-chart @shopify/react-native-skia react-native-reanimated react-native-gesture-handler 7 | ``` 8 | 9 | ## Documentation 10 | 11 | https://lad-tech.github.io/mobydick/docs/guides/chart/Introduction 12 | -------------------------------------------------------------------------------- /packages/chart/index.ts: -------------------------------------------------------------------------------- 1 | export * from './src'; 2 | -------------------------------------------------------------------------------- /packages/chart/src/components/Line.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Path, 3 | PathProps, 4 | SkiaDefaultProps, 5 | SkPath, 6 | } from '@shopify/react-native-skia'; 7 | import {SharedValue} from 'react-native-reanimated'; 8 | 9 | interface IChartProps 10 | extends Omit, 'path'> { 11 | chartPath: SharedValue; 12 | } 13 | 14 | export const Line = ({chartPath, ...rest}: IChartProps) => { 15 | return ( 16 | 23 | ); 24 | }; 25 | 26 | export default Line; 27 | -------------------------------------------------------------------------------- /packages/chart/src/components/LinePoints.tsx: -------------------------------------------------------------------------------- 1 | import {SharedValue, useDerivedValue} from 'react-native-reanimated'; 2 | import {SkPath} from '@shopify/react-native-skia'; 3 | 4 | import {PointOfLine} from './PointOfLine'; 5 | 6 | interface IPointsProps { 7 | chartPath: SharedValue; 8 | } 9 | 10 | export const LinePoints = ({chartPath}: IPointsProps) => { 11 | const linePoints = useDerivedValue(() => { 12 | const cmd = chartPath.value.toCmds() ?? []; 13 | return cmd; 14 | }); 15 | 16 | return ( 17 | <> 18 | {linePoints.value.map((_, pointIndex) => { 19 | return ( 20 | 25 | ); 26 | })} 27 | 28 | ); 29 | }; 30 | -------------------------------------------------------------------------------- /packages/chart/src/components/Point.tsx: -------------------------------------------------------------------------------- 1 | import {Circle} from '@shopify/react-native-skia'; 2 | import {SharedValue} from 'react-native-reanimated'; 3 | 4 | interface IPointProps { 5 | coords: SharedValue<{x: number; y: number}>; 6 | r: number; 7 | } 8 | export const Point = ({coords, r}: IPointProps) => { 9 | return ; 10 | }; 11 | -------------------------------------------------------------------------------- /packages/chart/src/components/PointOfLine.tsx: -------------------------------------------------------------------------------- 1 | import {SharedValue, useDerivedValue} from 'react-native-reanimated'; 2 | import {SkPath} from '@shopify/react-native-skia'; 3 | 4 | import {Point} from './Point'; 5 | 6 | interface IPointsProps { 7 | pointIndex: number; 8 | chartPath: SharedValue; 9 | } 10 | 11 | export const PointOfLine = ({pointIndex, chartPath}: IPointsProps) => { 12 | const coords = useDerivedValue(() => { 13 | const [, x, y] = chartPath.value.toCmds()[pointIndex] ?? []; 14 | 15 | return { 16 | x: x || 0, 17 | y: y || 0, 18 | }; 19 | }); 20 | 21 | return ; 22 | }; 23 | -------------------------------------------------------------------------------- /packages/chart/src/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Coordinates'; 2 | export * from './Line'; 3 | export * from './Lines'; 4 | export * from './Section'; 5 | export * from './SectionButton'; 6 | -------------------------------------------------------------------------------- /packages/chart/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LineChart'; 2 | export * from './BarChart'; 3 | 4 | export * from './components'; 5 | export * from './utils'; 6 | 7 | export * from './types'; 8 | -------------------------------------------------------------------------------- /packages/chart/src/utils/constants.ts: -------------------------------------------------------------------------------- 1 | export const chartPaddingHorizontal = 40; 2 | export const chartPaddingVertical = 40; //Увеличил паддинг на 10, слегка сжав график, чтобы влезал текст под Х координатой 3 | export const defaultChartHeightDivider = 4; 4 | export const COLORS = [ 5 | '#E0F5E9', 6 | '#9BE1DA', 7 | '#56CDCB', 8 | '#3B8B8E', 9 | '#EF1E1C', 10 | '#F43B1D', 11 | '#F9571D', 12 | '#FF8A57', 13 | ]; 14 | -------------------------------------------------------------------------------- /packages/chart/src/utils/generateCoordinatesPath.ts: -------------------------------------------------------------------------------- 1 | import {Skia} from '@shopify/react-native-skia'; 2 | 3 | import {chartPaddingHorizontal, chartPaddingVertical} from './constants'; 4 | 5 | export const generateCoordinatesPath = ({ 6 | height, 7 | width, 8 | }: { 9 | height: number; 10 | width: number; 11 | }) => { 12 | 'worklet'; 13 | return Skia.Path.Make() 14 | .moveTo(chartPaddingHorizontal, 0) 15 | .lineTo(chartPaddingHorizontal, height - chartPaddingVertical / 2) 16 | .lineTo(width, height - chartPaddingVertical / 2); 17 | }; 18 | -------------------------------------------------------------------------------- /packages/chart/src/utils/getLinesMinMax.tsx: -------------------------------------------------------------------------------- 1 | import {IChart} from '../types'; 2 | 3 | export const getLinesMinMax = ( 4 | lines: IChart[], 5 | ): { 6 | maxX: number; 7 | maxY: number; 8 | minX: number; 9 | minY: number; 10 | } => { 11 | 'worklet'; 12 | return lines.reduce( 13 | ({maxX, maxY, minX, minY}, {coordinates}) => { 14 | coordinates.forEach(({x, y}) => { 15 | maxX = Math.max(x, maxX); 16 | minX = Math.min(x, minX); 17 | maxY = Math.max(y, maxY); 18 | minY = Math.min(y, minY); 19 | }); 20 | 21 | return {maxX, maxY, minX, minY}; 22 | }, 23 | { 24 | maxX: 0, 25 | maxY: 0, 26 | minX: Infinity, 27 | minY: Infinity, 28 | }, 29 | ); 30 | }; 31 | -------------------------------------------------------------------------------- /packages/chart/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; 2 | export * from './generateBar'; 3 | export * from './generateCoordinatesPath'; 4 | export * from './generateLinePath'; 5 | export * from './generatePeriodsWithBarPaths'; 6 | export * from './generatePeriodsWithLinePaths'; 7 | export * from './getCoordinateValues'; 8 | export * from './getLinesMinMax'; 9 | -------------------------------------------------------------------------------- /packages/chart/svg.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | import React from 'react'; 3 | import {SvgProps} from 'react-native-svg'; 4 | const content: React.FC; 5 | export default content; 6 | } 7 | -------------------------------------------------------------------------------- /packages/core/.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | -------------------------------------------------------------------------------- /packages/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from './src'; 2 | -------------------------------------------------------------------------------- /packages/core/src/basic/README.md: -------------------------------------------------------------------------------- 1 | # @lad-tech/mobydick-core/basic 2 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Button/ButtonWrapper.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {Button as DefaultButton} from 'react-native'; 3 | 4 | import {IButtonWrapperProps, IButtonWrapper} from './types'; 5 | 6 | const ButtonWrapper = forwardRef( 7 | (props, ref) => { 8 | return ; 9 | }, 10 | ); 11 | export default ButtonWrapper; 12 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Button/__tests__/Button.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import ButtonWrapper from '../ButtonWrapper'; 4 | 5 | describe('@lad-tech/mobydick-core/Button', () => { 6 | it('renders correctly', () => { 7 | const {toJSON} = render(); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | import ButtonWrapper from './ButtonWrapper'; 2 | 3 | export * from './types'; 4 | 5 | export {ButtonWrapper}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Button/types.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ButtonProps as DefaultButtonProps, 3 | Button as DefaultButton, 4 | } from 'react-native'; 5 | 6 | export type IButtonWrapperProps = DefaultButtonProps; 7 | export type IButtonWrapper = DefaultButton; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/FlatList/FlatList.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {FlatList as DefaultFlatList} from 'react-native'; 3 | 4 | import {FlatListProps, IFlatList} from './types'; 5 | 6 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 7 | const FlatList = forwardRef>((props, ref) => { 8 | return ; 9 | }); 10 | export default FlatList; 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/FlatList/__tests__/FlatList.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import FlatList from '../FlatList'; 4 | import Text from '../../Text/Text'; 5 | 6 | describe('@lad-tech/mobydick-core/FlatList', () => { 7 | it('renders correctly', () => { 8 | const renderItem = ({item}: {item: string}) => { 9 | return {item}; 10 | }; 11 | const {toJSON} = render( 12 | 16 | item.toString() + index.toString() 17 | } 18 | />, 19 | ); 20 | expect(toJSON()).toMatchSnapshot(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/FlatList/index.ts: -------------------------------------------------------------------------------- 1 | import FlatList from './FlatList'; 2 | 3 | export * from './types'; 4 | 5 | export {FlatList}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/FlatList/types.ts: -------------------------------------------------------------------------------- 1 | import { 2 | FlatListProps as DefaultFlatListProps, 3 | FlatList as DefaultFlatList, 4 | } from 'react-native'; 5 | 6 | export type FlatListProps = DefaultFlatListProps; 7 | export type IFlatList = DefaultFlatList; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Pressable/Pressable.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {Pressable as DefaultPressable} from 'react-native'; 3 | 4 | import {IView} from '../View'; 5 | 6 | import {IPressableProps} from './types'; 7 | 8 | const Pressable = forwardRef((props, ref) => { 9 | return ; 10 | }); 11 | 12 | export default Pressable; 13 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Pressable/__tests__/Pressable.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import Pressable from '../Pressable'; 4 | 5 | describe('@lad-tech/mobydick-core/Pressable', () => { 6 | it('renders correctly', () => { 7 | const {toJSON} = render(); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Pressable/index.ts: -------------------------------------------------------------------------------- 1 | import Pressable from './Pressable'; 2 | 3 | export * from './types'; 4 | 5 | export {Pressable}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Pressable/types.ts: -------------------------------------------------------------------------------- 1 | import {PressableProps as DefaultPressableProps} from 'react-native'; 2 | 3 | export type IPressableProps = DefaultPressableProps; 4 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/ScrollView/ScrollView.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {ScrollView as DefaultScrollView} from 'react-native'; 3 | 4 | import {IScrollView, IScrollViewProps} from './types'; 5 | 6 | const ScrollView = forwardRef((props, ref) => { 7 | return ; 8 | }); 9 | export default ScrollView; 10 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/ScrollView/__tests__/ScrollView.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import ScrollView from '../ScrollView'; 4 | 5 | describe('@lad-tech/mobydick-core/ScrollView', () => { 6 | it('renders correctly', () => { 7 | const {toJSON} = render(); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/ScrollView/__tests__/__snapshots__/ScrollView.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`@lad-tech/mobydick-core/ScrollView renders correctly 1`] = ` 4 | 5 | 6 | 7 | `; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/ScrollView/index.ts: -------------------------------------------------------------------------------- 1 | import ScrollView from './ScrollView'; 2 | 3 | export * from './types'; 4 | 5 | export {ScrollView}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/ScrollView/types.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ScrollViewProps as DefaultScrollViewProps, 3 | ScrollView as DefaultScrollView, 4 | } from 'react-native'; 5 | 6 | export type IScrollViewProps = DefaultScrollViewProps; 7 | export type IScrollView = DefaultScrollView; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Text/Text.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {Text as DefaultText} from 'react-native'; 3 | 4 | import {getConfig} from '../../config'; 5 | 6 | import {IText, ITextProps} from './types'; 7 | 8 | const Text = forwardRef((props, ref) => { 9 | return ( 10 | 15 | ); 16 | }); 17 | export default Text; 18 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Text/__tests__/Text.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import Text from '../Text'; 4 | 5 | describe('@lad-tech/mobydick-core/Text', () => { 6 | it('renders correctly', () => { 7 | const {toJSON} = render(Text); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Text/__tests__/__snapshots__/Text.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`@lad-tech/mobydick-core/Text renders correctly 1`] = ` 4 | 7 | Text 8 | 9 | `; 10 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Text/index.ts: -------------------------------------------------------------------------------- 1 | import Text from './Text'; 2 | 3 | export * from './types'; 4 | 5 | export {Text}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/Text/types.ts: -------------------------------------------------------------------------------- 1 | import {TextProps as DefaultTextProps, Text as DefaultText} from 'react-native'; 2 | 3 | export type ITextProps = DefaultTextProps; 4 | export type IText = DefaultText; 5 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TextInput/TextInput.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {TextInput as DefaultTextInput} from 'react-native'; 3 | 4 | import {getConfig} from '../../config'; 5 | 6 | import {ITextInputProps, ITextInput} from './types'; 7 | 8 | const TextInput = forwardRef((props, ref) => ( 9 | 14 | )); 15 | export default TextInput; 16 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TextInput/__tests__/TextInput.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import TextInput from '../TextInput'; 4 | 5 | describe('@lad-tech/mobydick-core/TextInput', () => { 6 | it('renders correctly', () => { 7 | const {toJSON} = render(); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TextInput/__tests__/__snapshots__/TextInput.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`@lad-tech/mobydick-core/TextInput renders correctly 1`] = ` 4 | 7 | `; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TextInput/index.ts: -------------------------------------------------------------------------------- 1 | import TextInput from './TextInput'; 2 | 3 | export * from './types'; 4 | 5 | export {TextInput}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TextInput/types.ts: -------------------------------------------------------------------------------- 1 | import { 2 | TextInputProps as DefaultTextInputProps, 3 | TextInput as DefaultTextInput, 4 | } from 'react-native'; 5 | 6 | export type ITextInputProps = DefaultTextInputProps; 7 | export type ITextInput = DefaultTextInput; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableHighlight/TouchableHighlight.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {TouchableHighlight as DefaultTouchableHighlight} from 'react-native'; 3 | 4 | import {ITouchableHighlight, TouchableHighlightProps} from './types'; 5 | 6 | const TouchableHighlight = forwardRef< 7 | ITouchableHighlight, 8 | TouchableHighlightProps 9 | >((props, ref) => { 10 | return ; 11 | }); 12 | export default TouchableHighlight; 13 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableHighlight/__tests__/TouchableHighlight.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import TouchableHighlight from '../TouchableHighlight'; 4 | import {View} from '../../View'; 5 | 6 | describe('@lad-tech/mobydick-core/TouchableHighlight', () => { 7 | it('renders correctly', () => { 8 | const {toJSON} = render( 9 | 10 | 11 | , 12 | ); 13 | expect(toJSON()).toMatchSnapshot(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableHighlight/__tests__/__snapshots__/TouchableHighlight.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`@lad-tech/mobydick-core/TouchableHighlight renders correctly 1`] = ` 4 | 23 | 24 | 25 | `; 26 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableHighlight/index.ts: -------------------------------------------------------------------------------- 1 | import TouchableHighlight from './TouchableHighlight'; 2 | 3 | export * from './types'; 4 | 5 | export {TouchableHighlight}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableHighlight/types.ts: -------------------------------------------------------------------------------- 1 | import { 2 | TouchableHighlightProps as DefaultTouchableHighlightProps, 3 | View, 4 | } from 'react-native'; 5 | 6 | export type TouchableHighlightProps = DefaultTouchableHighlightProps; 7 | export type ITouchableHighlight = View & TouchableHighlightProps; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableOpacity/TouchableOpacity.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {TouchableOpacity as DefaultTouchableOpacity} from 'react-native'; 3 | 4 | import {ITouchableOpacity, ITouchableOpacityProps} from './types'; 5 | 6 | const TouchableOpacity = forwardRef( 7 | (props, ref) => , 8 | ); 9 | export default TouchableOpacity; 10 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableOpacity/__tests__/TouchableOpacity.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import TouchableOpacity from '../TouchableOpacity'; 4 | 5 | describe('@lad-tech/mobydick-core/TouchableOpacity', () => { 6 | it('renders correctly', () => { 7 | const {toJSON} = render(); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableOpacity/index.ts: -------------------------------------------------------------------------------- 1 | import TouchableOpacity from './TouchableOpacity'; 2 | 3 | export * from './types'; 4 | 5 | export {TouchableOpacity}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/TouchableOpacity/types.ts: -------------------------------------------------------------------------------- 1 | import { 2 | TouchableOpacityProps as DefaultTouchableOpacityProps, 3 | View, 4 | } from 'react-native'; 5 | 6 | export type ITouchableOpacityProps = DefaultTouchableOpacityProps; 7 | export type ITouchableOpacity = View & ITouchableOpacityProps; 8 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/View/View.tsx: -------------------------------------------------------------------------------- 1 | import {forwardRef} from 'react'; 2 | import {View as DefaultView} from 'react-native'; 3 | 4 | import {IView, IViewProps} from './types'; 5 | 6 | const View = forwardRef((props, ref) => ( 7 | 8 | )); 9 | 10 | export default View; 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/View/__tests__/View.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import View from '../View'; 4 | 5 | describe('@lad-tech/mobydick-core/View', () => { 6 | it('renders correctly', () => { 7 | const {toJSON} = render(); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/View/__tests__/__snapshots__/View.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`@lad-tech/mobydick-core/View renders correctly 1`] = ``; 4 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/View/index.ts: -------------------------------------------------------------------------------- 1 | import View from './View'; 2 | 3 | export * from './types'; 4 | 5 | export {View}; 6 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/View/types.ts: -------------------------------------------------------------------------------- 1 | import {ViewProps as DefaultViewProps, View as DefaultView} from 'react-native'; 2 | 3 | export type IViewProps = DefaultViewProps; 4 | export type IView = DefaultView; 5 | -------------------------------------------------------------------------------- /packages/core/src/basic/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ScrollView'; 2 | export * from './View'; 3 | export * from './TextInput'; 4 | export * from './Text'; 5 | export * from './Button'; 6 | export * from './TouchableOpacity'; 7 | export * from './Pressable'; 8 | export * from './TouchableHighlight'; 9 | export * from './FlatList'; 10 | -------------------------------------------------------------------------------- /packages/core/src/basic/config/__tests__/config.test.ts: -------------------------------------------------------------------------------- 1 | import {getConfig, setConfig} from '../index'; 2 | 3 | describe('config', () => { 4 | test('setConfig and getConfig', () => { 5 | expect(getConfig().allowFontScaling).toBe(true); 6 | 7 | setConfig({allowFontScaling: true}); 8 | expect(getConfig().allowFontScaling).toBe(true); 9 | 10 | setConfig({allowFontScaling: false}); 11 | expect(getConfig().allowFontScaling).toBe(false); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /packages/core/src/basic/config/index.ts: -------------------------------------------------------------------------------- 1 | interface IConfig { 2 | allowFontScaling: boolean; 3 | } 4 | 5 | let config: IConfig = { 6 | allowFontScaling: true, 7 | }; 8 | 9 | export const setConfig = (newConfig: typeof config) => { 10 | config = newConfig; 11 | }; 12 | export const getConfig = () => config; 13 | -------------------------------------------------------------------------------- /packages/core/src/basic/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './config'; 3 | -------------------------------------------------------------------------------- /packages/core/src/chat/components/index.ts: -------------------------------------------------------------------------------- 1 | import ChatInputField from './ChatInputField'; 2 | import ChatInput from './ChatInput'; 3 | import ChatPressableIcon from './ChatPressableIcon'; 4 | import ChatMessage from './ChatMessage'; 5 | import ChatMessageAvatar from './ChatMessageAvatar'; 6 | 7 | export { 8 | ChatInputField, 9 | ChatInput, 10 | ChatPressableIcon, 11 | ChatMessage, 12 | ChatMessageAvatar, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/core/src/chat/functions/isValidMessageTime.ts: -------------------------------------------------------------------------------- 1 | export const isValidMessageTime = (time: string): boolean => { 2 | const pattern = /^([01]\d|2[0-3]):[0-5]\d$/; 3 | return pattern.test(time); 4 | }; 5 | -------------------------------------------------------------------------------- /packages/core/src/chat/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /packages/core/src/chat/types.ts: -------------------------------------------------------------------------------- 1 | import {IAvatarProps} from '../other'; 2 | 3 | type URI = string; 4 | type FileHandle = number; 5 | 6 | export interface IChatMessage { 7 | isMe: boolean; 8 | time: string; 9 | message?: string | undefined; 10 | image?: FileHandle | URI | undefined; 11 | } 12 | export interface IChatMessageAvatar extends IAvatarProps, IChatMessage { 13 | onPress?: () => void; 14 | } 15 | -------------------------------------------------------------------------------- /packages/core/src/controls/CheckBox/index.ts: -------------------------------------------------------------------------------- 1 | import CheckBox from './CheckBox'; 2 | 3 | export {CheckBox}; 4 | -------------------------------------------------------------------------------- /packages/core/src/controls/CheckBox/stylesCreate.ts: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../styles'; 2 | import px from '../../styles/utils/px'; 3 | 4 | const stylesCreate = createStyles( 5 | ( 6 | {spaces, colors}, 7 | {disabled = false, selected = false, width = px(20), height = px(20)}, 8 | ) => ({ 9 | container: { 10 | flexDirection: 'row', 11 | alignItems: 'center', 12 | backgroundColor: 'transparent', 13 | opacity: disabled ? 0.4 : 1, 14 | maxWidth: '100%', 15 | }, 16 | checkbox: { 17 | borderWidth: selected ? 0 : spaces.Space2, 18 | borderColor: colors.BorderNormal, 19 | width: width, 20 | height: height, 21 | borderRadius: spaces.Space4, 22 | }, 23 | }), 24 | ); 25 | 26 | export default stylesCreate; 27 | -------------------------------------------------------------------------------- /packages/core/src/controls/Control.tsx: -------------------------------------------------------------------------------- 1 | import {FC} from 'react'; 2 | 3 | import ControlType from './constants'; 4 | import CheckSquare from './CheckBox/CheckSquare'; 5 | import Circle from './Radio/Circle'; 6 | import {TControl} from './types'; 7 | import {IRadioStyle} from './Radio'; 8 | 9 | const Control: FC> = ({ 10 | type, 11 | ...rest 12 | }) => { 13 | return type === ControlType.checkBox ? ( 14 | 15 | ) : ( 16 | 17 | ); 18 | }; 19 | 20 | export default Control; 21 | -------------------------------------------------------------------------------- /packages/core/src/controls/ControlsLists/index.ts: -------------------------------------------------------------------------------- 1 | import ControlsList from './ControlsList'; 2 | 3 | export * from './types'; 4 | 5 | export {ControlsList}; 6 | -------------------------------------------------------------------------------- /packages/core/src/controls/ControlsLists/stylesCreate.ts: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../styles'; 2 | 3 | const stylesCreate = createStyles((_, horizontal: boolean) => ({ 4 | list: { 5 | flexDirection: horizontal ? 'row' : 'column', 6 | }, 7 | })); 8 | 9 | export default stylesCreate; 10 | -------------------------------------------------------------------------------- /packages/core/src/controls/ControlsLists/types.ts: -------------------------------------------------------------------------------- 1 | import {FunctionComponentElement} from 'react'; 2 | import {ViewStyle} from 'react-native'; 3 | 4 | import {IControlProps} from '../types'; 5 | import {IPressableProps} from '../../basic/components/Pressable/types'; 6 | 7 | export interface IControlsList { 8 | onChange(values: string[]): void; 9 | children: FunctionComponentElement[]; 10 | horizontal?: boolean; 11 | single?: boolean; 12 | disabled?: boolean; 13 | values: string[]; 14 | listStyles?: ViewStyle; 15 | } 16 | -------------------------------------------------------------------------------- /packages/core/src/controls/README.md: -------------------------------------------------------------------------------- 1 | ## @lad-tech/mobydick-core/controls 2 | 3 | ## ***Slider*** 4 | 5 | Взяла за основу слайдер из вот этой либы https://github.com/githuboftigran/rn-range-slider 6 | -------------------------------------------------------------------------------- /packages/core/src/controls/Radio/Circle.tsx: -------------------------------------------------------------------------------- 1 | import {FC} from 'react'; 2 | 3 | import {IPressableProps} from '../../basic'; 4 | import Pressable from '../../basic/components/Pressable/Pressable'; 5 | import View from '../../basic/components/View/View'; 6 | 7 | import {IRadioStyle} from './types'; 8 | 9 | const Circle: FC = ({ 10 | outerStyle, 11 | innerStyle, 12 | selected = false, 13 | ...rest 14 | }) => { 15 | return ( 16 | 17 | {selected && } 18 | 19 | ); 20 | }; 21 | 22 | export default Circle; 23 | -------------------------------------------------------------------------------- /packages/core/src/controls/Radio/index.ts: -------------------------------------------------------------------------------- 1 | import Radio from './Radio'; 2 | 3 | export * from './types'; 4 | 5 | export {Radio}; 6 | -------------------------------------------------------------------------------- /packages/core/src/controls/Radio/types.ts: -------------------------------------------------------------------------------- 1 | import {ViewStyle} from 'react-native'; 2 | 3 | import {ICommonControlProps} from '../types'; 4 | 5 | export interface IRadioStyle extends ICommonControlProps { 6 | outerStyle?: ViewStyle; 7 | innerStyle?: ViewStyle; 8 | } 9 | -------------------------------------------------------------------------------- /packages/core/src/controls/Slider/components/HighThumb.tsx: -------------------------------------------------------------------------------- 1 | import {Animated} from 'react-native'; 2 | 3 | import useStyles from '../../../styles/hooks/useStyles'; 4 | import stylesCreate from '../stylesCreate'; 5 | 6 | import Thumb from './Thumb'; 7 | 8 | const HighThumb = ({ 9 | highThumbX, 10 | highSize, 11 | }: { 12 | highThumbX: Animated.Value; 13 | highSize: Animated.Value; 14 | }) => { 15 | const [styles] = useStyles(stylesCreate); 16 | 17 | return ( 18 | 23 | 24 | 25 | ); 26 | }; 27 | 28 | export default HighThumb; 29 | -------------------------------------------------------------------------------- /packages/core/src/controls/Slider/components/LowThumb.tsx: -------------------------------------------------------------------------------- 1 | import {Animated} from 'react-native'; 2 | import {useMemo} from 'react'; 3 | 4 | import {LABELS} from '../../../other'; 5 | 6 | import Thumb from './Thumb'; 7 | 8 | const LowThumb = ({ 9 | lowThumbX, 10 | 11 | size, 12 | }: { 13 | lowThumbX: Animated.Value; 14 | size: Animated.Value; 15 | }) => { 16 | const lowStyles = useMemo(() => { 17 | return {transform: [{translateX: lowThumbX}]}; 18 | }, [lowThumbX]); 19 | 20 | return ( 21 | 24 | 25 | 26 | ); 27 | }; 28 | 29 | export default LowThumb; 30 | -------------------------------------------------------------------------------- /packages/core/src/controls/Slider/components/SelectedRail.tsx: -------------------------------------------------------------------------------- 1 | import {Animated} from 'react-native'; 2 | 3 | import View from '../../../basic/components/View/View'; 4 | import useStyles from '../../../styles/hooks/useStyles'; 5 | import stylesCreate from '../stylesCreate'; 6 | 7 | const SelectedRail = ({ 8 | selectedRailStyle, 9 | }: { 10 | selectedRailStyle: { 11 | left: Animated.Value; 12 | right: Animated.Value; 13 | }; 14 | }) => { 15 | const [styles] = useStyles(stylesCreate); 16 | return ( 17 | 18 | 19 | 20 | ); 21 | }; 22 | 23 | export default SelectedRail; 24 | -------------------------------------------------------------------------------- /packages/core/src/controls/Slider/components/Thumb.tsx: -------------------------------------------------------------------------------- 1 | import {Animated} from 'react-native'; 2 | 3 | import useStyles from '../../../styles/hooks/useStyles'; 4 | import {createStyles} from '../../../styles'; 5 | 6 | const Thumb = ({size}: {size: Animated.Value}) => { 7 | const [styles] = useStyles(stylesCreate); 8 | 9 | return ( 10 | 20 | ); 21 | }; 22 | 23 | const stylesCreate = createStyles(({spaces, colors}) => ({ 24 | root: { 25 | borderWidth: spaces.Space4, 26 | borderColor: colors.BorderExtra, 27 | backgroundColor: colors.BgTertiary, 28 | }, 29 | })); 30 | 31 | export default Thumb; 32 | -------------------------------------------------------------------------------- /packages/core/src/controls/Slider/index.ts: -------------------------------------------------------------------------------- 1 | import Slider from './Slider'; 2 | 3 | export {Slider}; 4 | -------------------------------------------------------------------------------- /packages/core/src/controls/Swipe/index.ts: -------------------------------------------------------------------------------- 1 | import Swipe from './Swipe'; 2 | export * from './types'; 3 | 4 | export {Swipe}; 5 | -------------------------------------------------------------------------------- /packages/core/src/controls/Swipe/stylesCreate.ts: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../styles'; 2 | import px from '../../styles/utils/px'; 3 | 4 | const stylesCreate = createStyles( 5 | ({spaces, colors}, disabled: boolean | undefined) => ({ 6 | container: { 7 | width: px(50), 8 | height: px(30), 9 | borderRadius: spaces.Space20, 10 | padding: spaces.Space2, 11 | opacity: disabled ? 0.4 : 1, 12 | }, 13 | switcher: { 14 | flex: 1, 15 | aspectRatio: 1, 16 | backgroundColor: colors.ElementWhite, 17 | borderRadius: px(25), 18 | }, 19 | }), 20 | ); 21 | 22 | export default stylesCreate; 23 | -------------------------------------------------------------------------------- /packages/core/src/controls/Swipe/types.ts: -------------------------------------------------------------------------------- 1 | import {StyleProp, ViewStyle} from 'react-native'; 2 | 3 | export interface ISwipe { 4 | active: boolean; 5 | disabled?: boolean; 6 | onPress: (isActive: boolean) => void; 7 | activeColor?: string; 8 | passiveColor?: string; 9 | containerStyle?: StyleProp; 10 | switcherStyle?: StyleProp; 11 | } 12 | -------------------------------------------------------------------------------- /packages/core/src/controls/constants.ts: -------------------------------------------------------------------------------- 1 | enum ControlType { 2 | checkBox = 'checkBox', 3 | radio = 'radio', 4 | } 5 | 6 | export default ControlType; 7 | -------------------------------------------------------------------------------- /packages/core/src/controls/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Radio'; 2 | export * from './types'; 3 | export * from './CheckBox'; 4 | export * from './ControlsLists'; 5 | export * from './Swipe'; 6 | export * from './Slider'; 7 | -------------------------------------------------------------------------------- /packages/core/src/controls/types.ts: -------------------------------------------------------------------------------- 1 | import {ViewStyle} from 'react-native'; 2 | import {PropsWithChildren} from 'react'; 3 | 4 | import {IPressableProps} from '../basic/components/Pressable/types'; 5 | 6 | import ControlType from './constants'; 7 | 8 | export interface ICommonControlProps { 9 | selected?: boolean; 10 | fill?: string; 11 | width?: number; 12 | height?: number; 13 | } 14 | 15 | export interface IControlProps extends PropsWithChildren { 16 | value: string; 17 | disabled?: boolean; 18 | onPress?(): void; 19 | containerStyle?: ViewStyle; 20 | checkboxStyle?: ViewStyle; 21 | } 22 | 23 | export interface IControl extends IControlProps { 24 | type: ControlType; 25 | } 26 | 27 | export type TControl = IControl & IPressableProps; 28 | -------------------------------------------------------------------------------- /packages/core/src/cta/README.md: -------------------------------------------------------------------------------- 1 | ## @lad-tech/mobydick-core/cta 2 | -------------------------------------------------------------------------------- /packages/core/src/cta/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | import Button from './Button'; 2 | 3 | export * from './types'; 4 | 5 | export {Button}; 6 | -------------------------------------------------------------------------------- /packages/core/src/cta/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button'; 2 | -------------------------------------------------------------------------------- /packages/core/src/cta/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './utils'; 3 | -------------------------------------------------------------------------------- /packages/core/src/cta/utils/index.ts: -------------------------------------------------------------------------------- 1 | import getCounterType from './getCounterType'; 2 | import getSpinnerColor from './getSpinnerColor'; 3 | import getDefaultFont from './getDefaultFont'; 4 | 5 | export {getCounterType, getDefaultFont, getSpinnerColor}; 6 | -------------------------------------------------------------------------------- /packages/core/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './basic'; 2 | export * from './controls'; 3 | export * from './cta'; 4 | export * from './inputs'; 5 | export * from './navbars'; 6 | export * from './other'; 7 | export * from './popups'; 8 | export * from './progress'; 9 | export * from './styles'; 10 | export * from './typography'; 11 | export * from './chat'; 12 | export * from './portals'; 13 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/Base/index.ts: -------------------------------------------------------------------------------- 1 | import InputTitle from './InputTitle'; 2 | import InputSubtitle from './InputSubtitle'; 3 | 4 | export {InputTitle, InputSubtitle}; 5 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/DropDown/components/ListEmptySelector.tsx: -------------------------------------------------------------------------------- 1 | import {FC} from 'react'; 2 | 3 | import {TypographyLegacy} from '../../../../typography/components/TypographyLegacy/TypographyLegacy'; 4 | import {IListEmptySelectorProps} from '../types'; 5 | 6 | const ListEmptySelector: FC = ({ 7 | listEmptyText, 8 | listEmptyFont, 9 | }) => { 10 | const font = listEmptyFont ? listEmptyFont : 'Regular-Muted-M'; 11 | const emptyText = listEmptyText 12 | ? listEmptyText 13 | : 'Данные недоступны. Повторите попытку позже.'; 14 | 15 | return ( 16 | 17 | {emptyText} 18 | 19 | ); 20 | }; 21 | 22 | export default ListEmptySelector; 23 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/DropDown/components/__tests__/ChipList.test.tsx: -------------------------------------------------------------------------------- 1 | import {fireEvent, render} from '@testing-library/react-native'; 2 | 3 | import ChipList from '../ChipList'; 4 | 5 | describe('@lad-tech/mobydick-core/ChipList', () => { 6 | it('renders correctly and onChange fired', () => { 7 | const mockedOnChange = jest.fn(); 8 | const {toJSON, getByLabelText} = render( 9 | , 16 | ); 17 | 18 | fireEvent.press(getByLabelText('Rust')); 19 | 20 | expect(mockedOnChange).toHaveBeenCalledWith({label: 'Rust', value: 2}); 21 | expect(toJSON()).toMatchSnapshot(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/DropDown/components/__tests__/ListEmptySelector.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import ListEmptySelector from '../ListEmptySelector'; 4 | 5 | describe('npm/mobydick-inputs/ListEmptySelector', () => { 6 | it('renders correctly with text and font', async () => { 7 | const {toJSON} = render( 8 | , 12 | ); 13 | 14 | expect(toJSON()).toMatchSnapshot(); 15 | }); 16 | it('renders correctly without text and font', async () => { 17 | const {toJSON} = render(); 18 | 19 | expect(toJSON()).toMatchSnapshot(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/DropDown/components/stylesCreate.tsx: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../../../styles'; 2 | 3 | const stylesCreate = createStyles(({spaces, colors}) => ({ 4 | flatList: { 5 | position: 'absolute', 6 | backgroundColor: colors.BgSecondary, 7 | borderRadius: spaces.Space12, 8 | borderWidth: spaces.Space1, 9 | borderColor: colors.BorderSoft, 10 | paddingVertical: spaces.Space8, 11 | }, 12 | 13 | dropDownItem: { 14 | justifyContent: 'center', 15 | paddingHorizontal: spaces.Space12, 16 | paddingVertical: spaces.Space8, 17 | }, 18 | })); 19 | 20 | export default stylesCreate; 21 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/DropDown/constants/index.ts: -------------------------------------------------------------------------------- 1 | import px from '../../../../styles/utils/px'; 2 | 3 | export const BORDER_BUTTON_WIDTH = px(1); 4 | 5 | export const DROP_DOWN_POPUP_ID = 'DropDownPopup'; 6 | 7 | export const DEFAULT_DROP_DOWN_HEIGHT = px(48); 8 | export const DEFAULT_DROP_DOWN_WIDTH = px(200); 9 | export const DEFAULT_DROPDOWN_MARGIN_FROM_BUTTON = px(4); 10 | 11 | export const LIST_MAX_HEIGHT = px(244); 12 | export const EMPTY_LIST_HEIGHT = px(74); 13 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/DropDown/index.ts: -------------------------------------------------------------------------------- 1 | import DropDown from './DropDown'; 2 | export * from './types'; 3 | export {DropDown}; 4 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/DropDown/utils/getSelectedItems.ts: -------------------------------------------------------------------------------- 1 | import {IListItem} from '../types'; 2 | 3 | function getSelectedItems( 4 | selectedItems: T[] | undefined, 5 | item: T, 6 | ) { 7 | if (!selectedItems?.length) { 8 | return [item]; 9 | } 10 | 11 | const itemAlreadyExist = selectedItems.some( 12 | ({value}) => value === item.value, 13 | ); 14 | 15 | if (itemAlreadyExist) { 16 | return selectedItems.filter(({value}) => item.value !== value); 17 | } 18 | 19 | return [...selectedItems, item]; 20 | } 21 | 22 | export default getSelectedItems; 23 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/InputField/constants.ts: -------------------------------------------------------------------------------- 1 | enum Constants { 2 | testID = 'TextInput', 3 | } 4 | 5 | export default Constants; 6 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/InputField/index.ts: -------------------------------------------------------------------------------- 1 | import InputField from './InputField'; 2 | 3 | export * from './types'; 4 | 5 | export {InputField}; 6 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/Search/constants.ts: -------------------------------------------------------------------------------- 1 | export const strings = { 2 | search: 'Поиск', 3 | }; 4 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/Search/index.ts: -------------------------------------------------------------------------------- 1 | import Search from './Search'; 2 | export * from './types'; 3 | export {Search}; 4 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/Search/types.ts: -------------------------------------------------------------------------------- 1 | import {StyleProp, TextStyle, ViewStyle} from 'react-native'; 2 | import {ReactElement} from 'react'; 3 | 4 | import {ITextInputProps} from '../../../basic/components/TextInput/types'; 5 | 6 | export interface ISearchProps extends ITextInputProps { 7 | containerStyle?: StyleProp; 8 | textInputContainerStyle?: StyleProp; 9 | leftIcon?: ReactElement; 10 | } 11 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/Verification/index.ts: -------------------------------------------------------------------------------- 1 | import CodeField from './CodeField'; 2 | export * from './types'; 3 | export {CodeField}; 4 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/Verification/stylesCreate.tsx: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../../styles'; 2 | import px from '../../../styles/utils/px'; 3 | 4 | const stylesCreate = createStyles(({spaces, colors}, focused: boolean) => ({ 5 | inputContainer: { 6 | backgroundColor: colors.BgSecondary, 7 | borderRadius: spaces.Space8, 8 | borderColor: focused ? colors.BorderHard : 'transparent', 9 | minWidth: px(68), 10 | minHeight: px(48), 11 | flexDirection: 'row', 12 | justifyContent: 'center', 13 | alignItems: 'center', 14 | }, 15 | textInput: { 16 | flex: 1, 17 | padding: 0, // Android по дефолту ставит padding на input's 18 | 19 | textAlign: 'center', 20 | }, 21 | })); 22 | 23 | export default stylesCreate; 24 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/Verification/types.ts: -------------------------------------------------------------------------------- 1 | import {StyleProp, ViewStyle} from 'react-native'; 2 | 3 | import {TypographyProp} from '../../../typography/types'; 4 | import {ITextInputProps} from '../../../basic'; 5 | 6 | export interface ICodeFieldProps extends ITextInputProps { 7 | maxLength?: number; 8 | editable?: boolean; 9 | secureTextEntry?: boolean; 10 | containerStyle?: StyleProp; 11 | textInputContainerStyle?: StyleProp; 12 | onChangeText?(text: string): void; 13 | onBackKeyPress?(): void; 14 | fontStyleCodeField?: TypographyProp; 15 | } 16 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './InputField'; 2 | export * from './Search'; 3 | export * from './DropDown'; 4 | export * from './Verification'; 5 | export * from './Base'; 6 | 7 | export * from './types'; 8 | -------------------------------------------------------------------------------- /packages/core/src/inputs/components/types.ts: -------------------------------------------------------------------------------- 1 | export enum IInputsTypes { 2 | default = 'default', 3 | valid = 'valid', 4 | wrong = 'wrong', 5 | disabled = 'disabled', 6 | } 7 | -------------------------------------------------------------------------------- /packages/core/src/inputs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './style'; 3 | -------------------------------------------------------------------------------- /packages/core/src/inputs/style/disabledStyle.tsx: -------------------------------------------------------------------------------- 1 | import {StyleSheet, ViewStyle} from 'react-native'; 2 | 3 | import {IThemeContext} from '../../styles/types'; 4 | 5 | export const disabledStyle = < 6 | T extends StyleSheet.NamedStyles<{inputContainer: ViewStyle}>, 7 | >( 8 | theme: IThemeContext, 9 | defaultStyles: T, 10 | ) => { 11 | const {colors} = theme; 12 | const {inputContainer} = defaultStyles; 13 | 14 | inputContainer.borderColor = colors.BorderSoft; 15 | inputContainer.backgroundColor = 'transparent'; 16 | 17 | return defaultStyles; 18 | }; 19 | -------------------------------------------------------------------------------- /packages/core/src/inputs/style/index.ts: -------------------------------------------------------------------------------- 1 | export * from './disabledStyle'; 2 | export * from './validStyle'; 3 | export * from './wrongStyle'; 4 | -------------------------------------------------------------------------------- /packages/core/src/inputs/style/validStyle.tsx: -------------------------------------------------------------------------------- 1 | import {StyleSheet, ViewStyle} from 'react-native'; 2 | 3 | import {IThemeContext} from '../../styles/types'; 4 | 5 | export const validStyle = < 6 | T extends StyleSheet.NamedStyles<{inputContainer: ViewStyle}>, 7 | >( 8 | theme: IThemeContext, 9 | defaultStyles: T, 10 | active: boolean, 11 | ) => { 12 | const {colors} = theme; 13 | const {inputContainer} = defaultStyles; 14 | 15 | inputContainer.borderColor = active ? colors.BorderSuccess : 'transparent'; 16 | inputContainer.backgroundColor = colors.AdditionalSixthSoft; 17 | 18 | return defaultStyles; 19 | }; 20 | -------------------------------------------------------------------------------- /packages/core/src/inputs/style/wrongStyle.tsx: -------------------------------------------------------------------------------- 1 | import {StyleSheet, ViewStyle} from 'react-native'; 2 | 3 | import {IThemeContext} from '../../styles/types'; 4 | 5 | export const wrongStyle = < 6 | T extends StyleSheet.NamedStyles<{inputContainer: ViewStyle}>, 7 | >( 8 | theme: IThemeContext, 9 | defaultStyles: T, 10 | ) => { 11 | const {colors} = theme; 12 | const {inputContainer} = defaultStyles; 13 | 14 | inputContainer.borderColor = colors.BorderError; 15 | 16 | return defaultStyles; 17 | }; 18 | -------------------------------------------------------------------------------- /packages/core/src/navbars/README.md: -------------------------------------------------------------------------------- 1 | ## @lad-tech/mobydick-core/navbar 2 | -------------------------------------------------------------------------------- /packages/core/src/navbars/components/PanelHeader/components/index.ts: -------------------------------------------------------------------------------- 1 | import ContentHeader from './ContentHeader'; 2 | 3 | export {ContentHeader}; 4 | -------------------------------------------------------------------------------- /packages/core/src/navbars/components/PanelHeader/index.ts: -------------------------------------------------------------------------------- 1 | import PanelHeader from './PanelHeader'; 2 | 3 | export {PanelHeader}; 4 | -------------------------------------------------------------------------------- /packages/core/src/navbars/components/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | import Tabs from './Tabs'; 2 | import Tab from './Tab'; 3 | 4 | export {Tabs, Tab}; 5 | -------------------------------------------------------------------------------- /packages/core/src/navbars/components/Tabs/stylesCreate.ts: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../../styles'; 2 | 3 | const stylesCreate = createStyles(({spaces}) => ({ 4 | containerStyle: { 5 | maxWidth: '100%', 6 | }, 7 | contentContainerStyle: { 8 | alignItems: 'center', 9 | paddingHorizontal: spaces.Space20, 10 | paddingVertical: spaces.Space8, 11 | }, 12 | tab: { 13 | paddingHorizontal: spaces.Space12, 14 | paddingVertical: spaces.Space6, 15 | marginRight: spaces.Space8, 16 | borderRadius: spaces.Space8, 17 | }, 18 | })); 19 | 20 | export default stylesCreate; 21 | -------------------------------------------------------------------------------- /packages/core/src/navbars/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tabs'; 2 | export * from './PanelHeader'; 3 | -------------------------------------------------------------------------------- /packages/core/src/navbars/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Avatar/index.ts: -------------------------------------------------------------------------------- 1 | import Avatar from './Avatar'; 2 | import AvatarGroup from './AvatarGroup'; 3 | 4 | export {Avatar, AvatarGroup}; 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Badge/BadgeIndicator/__tests__/BadgeIndicator.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import BadgeIndicator from '../BadgeIndicator'; 4 | import {IIndicatorTypes} from '../types'; 5 | 6 | describe('BadgeIndicator', () => { 7 | test('render BadgeIndicator secondary', () => { 8 | const {toJSON} = render( 9 | , 10 | ); 11 | expect(toJSON()).toMatchSnapshot(); 12 | }); 13 | test('render BadgeIndicator primary', () => { 14 | const {toJSON} = render( 15 | , 16 | ); 17 | expect(toJSON()).toMatchSnapshot(); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Badge/BadgeIndicator/index.ts: -------------------------------------------------------------------------------- 1 | import BadgeIndicator from './BadgeIndicator'; 2 | 3 | export {BadgeIndicator}; 4 | export * from './types'; 5 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Badge/BadgeIndicator/types.ts: -------------------------------------------------------------------------------- 1 | import {ViewStyle} from 'react-native'; 2 | 3 | export enum IIndicatorTypes { 4 | primary = 'primary', 5 | secondary = 'secondary', 6 | } 7 | 8 | export interface IBadgeIndicatorProps { 9 | style?: ViewStyle | ViewStyle[]; 10 | type?: IIndicatorTypes; 11 | } 12 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Badge/Counter/getFont.tsx: -------------------------------------------------------------------------------- 1 | import {TypographyProp} from '../../../../typography'; 2 | 3 | import {ICounterSize, ICounterTypes} from './types'; 4 | 5 | const getColorText = (type: ICounterTypes) => { 6 | switch (type) { 7 | case ICounterTypes.accentLight: 8 | return 'Accent'; 9 | case ICounterTypes.attentionLight: 10 | return 'Error'; 11 | case ICounterTypes.mutedLight: 12 | return 'Muted'; 13 | default: 14 | return 'White'; 15 | } 16 | }; 17 | export const getFont = ( 18 | type: ICounterTypes, 19 | size: ICounterSize, 20 | ): TypographyProp => { 21 | return `SemiBold-${getColorText(type)}-${size === ICounterSize.medium ? 'M' : 'XS'}`; 22 | }; 23 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Badge/Counter/index.ts: -------------------------------------------------------------------------------- 1 | import Counter from './Counter'; 2 | 3 | export {Counter}; 4 | export * from './types'; 5 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Badge/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Counter'; 2 | export * from './BadgeIndicator'; 3 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Carousel/AutoCarousel.tsx: -------------------------------------------------------------------------------- 1 | import Carousel from './Carousel'; 2 | import {ICarouselProps} from './types'; 3 | 4 | const AutoCarousel = ({...otherProps}: ICarouselProps): JSX.Element => { 5 | return ( 6 | 11 | ); 12 | }; 13 | 14 | export default AutoCarousel; 15 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Carousel/AutoLoopCarousel.tsx: -------------------------------------------------------------------------------- 1 | import {ReactElement} from 'react'; 2 | 3 | import {ICarouselProps} from './types'; 4 | import LoopCarousel from './LoopCarousel'; 5 | 6 | const AutoLoopCarousel = ({ 7 | ...otherProps 8 | }: Omit< 9 | ICarouselProps, 10 | 'keyExtractor' | 'isDots' | 'animateAutoScroll' 11 | >): ReactElement => { 12 | return ; 13 | }; 14 | 15 | export default AutoLoopCarousel; 16 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Carousel/components/EmptyFirstItem.tsx: -------------------------------------------------------------------------------- 1 | import {ICarouselAlign} from '../types'; 2 | import View from '../../../../basic/components/View/View'; 3 | 4 | const EmptyFirstItem = ({ 5 | align, 6 | width, 7 | }: { 8 | align: ICarouselAlign; 9 | width: number; 10 | }) => { 11 | return align === ICarouselAlign.center ? ( 12 | 13 | ) : null; 14 | }; 15 | 16 | export default EmptyFirstItem; 17 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Carousel/index.ts: -------------------------------------------------------------------------------- 1 | import Carousel from './Carousel'; 2 | import LoopCarousel from './LoopCarousel'; 3 | import AutoCarousel from './AutoCarousel'; 4 | import AutoLoopCarousel from './AutoLoopCarousel'; 5 | 6 | export {Carousel, LoopCarousel, AutoCarousel, AutoLoopCarousel}; 7 | export * from './types'; 8 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Carousel/stylesCreate.ts: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../../styles'; 2 | 3 | const stylesCreate = createStyles((_, sideMargin: number) => ({ 4 | item: { 5 | marginHorizontal: Math.floor(sideMargin), 6 | justifyContent: 'center', 7 | alignItems: 'center', 8 | }, 9 | })); 10 | 11 | export default stylesCreate; 12 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Collapsible/index.ts: -------------------------------------------------------------------------------- 1 | import Collapsible from './Collapsible'; 2 | 3 | export {Collapsible}; 4 | 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/core/src/other/components/CrossedText/__tests__/CrossesText.test.tsx: -------------------------------------------------------------------------------- 1 | import {render} from '@testing-library/react-native'; 2 | 3 | import CrossedText from '../CrossedText'; 4 | 5 | describe('CrossedText', () => { 6 | test('render crossed text default', () => { 7 | const {toJSON} = render(); 8 | expect(toJSON()).toMatchSnapshot(); 9 | }); 10 | test('render crossed text with lineHeight', () => { 11 | const {toJSON} = render(); 12 | expect(toJSON()).toMatchSnapshot(); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /packages/core/src/other/components/CrossedText/index.ts: -------------------------------------------------------------------------------- 1 | import CrossedText from './CrossedText'; 2 | 3 | export {CrossedText}; 4 | 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/core/src/other/components/CrossedText/types.ts: -------------------------------------------------------------------------------- 1 | import {IStyledTextProps} from '../../../typography'; 2 | 3 | export interface ICrossedTextProps extends IStyledTextProps { 4 | lineColor: string; 5 | lineHeight?: number; 6 | } 7 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Dots/__tests__/stylesCreate.test.ts: -------------------------------------------------------------------------------- 1 | import {renderHook} from '@testing-library/react-hooks'; 2 | 3 | import stylesCreate from '../stylesCreate'; 4 | import useTheme from '../../../../styles/hooks/useTheme'; 5 | import px from '../../../../styles/utils/px'; 6 | 7 | describe('dots/stylesCreate', () => { 8 | it('must return', () => { 9 | const {result} = renderHook(() => useTheme()); 10 | 11 | expect(stylesCreate(result.current)).toEqual({ 12 | dot: { 13 | width: px(8), 14 | height: px(8), 15 | marginHorizontal: px(5), 16 | borderRadius: px(8) / 2, 17 | }, 18 | dots: { 19 | flexDirection: 'row', 20 | alignItems: 'center', 21 | paddingTop: px(5), 22 | }, 23 | }); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Dots/constants.ts: -------------------------------------------------------------------------------- 1 | import px from '../../../styles/utils/px'; 2 | 3 | export const SPAN_SIZE = 3; 4 | 5 | export const SIZE_LARGE = px(8); 6 | export const SIZE_MEDIUM = px(6); 7 | export const SIZE_SMALL = px(4); 8 | 9 | export const MARGIN_DOT = px(5) * 2; 10 | 11 | export const WIDTH_SMALL = 12 | (SIZE_LARGE + MARGIN_DOT) * 3 + 13 | (SIZE_MEDIUM + MARGIN_DOT) + 14 | (SIZE_SMALL + MARGIN_DOT); 15 | 16 | export const WIDTH_MEDIUM = WIDTH_SMALL + (SIZE_MEDIUM + MARGIN_DOT); 17 | 18 | export const WIDTH_LARGE = WIDTH_MEDIUM + (SIZE_SMALL + MARGIN_DOT); 19 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Dots/index.ts: -------------------------------------------------------------------------------- 1 | import Dot from './Dot'; 2 | import Dots from './Dots'; 3 | 4 | export {Dot, Dots}; 5 | 6 | export * from './types'; 7 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Dots/stylesCreate.ts: -------------------------------------------------------------------------------- 1 | import {createStyles} from '../../../styles'; 2 | import px from '../../../styles/utils/px'; 3 | 4 | const stylesCreate = createStyles(({spaces}, size: number = spaces.Space8) => ({ 5 | dot: { 6 | width: size, 7 | height: size, 8 | marginHorizontal: px(5), 9 | borderRadius: size / 2, 10 | }, 11 | dots: { 12 | flexDirection: 'row', 13 | alignItems: 'center', 14 | paddingTop: px(5), 15 | }, 16 | })); 17 | 18 | export default stylesCreate; 19 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Dots/types.ts: -------------------------------------------------------------------------------- 1 | import {ViewStyle} from 'react-native'; 2 | 3 | export interface IDotsProps { 4 | length: number; 5 | activeDot: number; 6 | animateAutoScroll?: boolean; 7 | fixedSize?: number | undefined; 8 | activeDotColor?: string | undefined; 9 | passiveDotColor?: string | undefined; 10 | dotsStyles?: ViewStyle | ViewStyle[] | undefined; 11 | } 12 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Rating/index.ts: -------------------------------------------------------------------------------- 1 | import Rating from './Rating'; 2 | 3 | export {Rating}; 4 | export * from './types'; 5 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Rating/types.ts: -------------------------------------------------------------------------------- 1 | import {StyleProp, ViewStyle} from 'react-native'; 2 | 3 | export type TStar = { 4 | filled: boolean; 5 | starIndex: number; 6 | setRating: (data: number) => void; 7 | iconSize: number; 8 | iconStyle?: StyleProp; 9 | fillColor?: string; 10 | disabled?: boolean; 11 | }; 12 | 13 | export type TRating = { 14 | setCurrentRate: (data: number) => void; 15 | count: number; 16 | iconStyle?: StyleProp; 17 | iconSize?: number; 18 | fillColor?: string; 19 | currentRate: number; 20 | disabled?: boolean; 21 | }; 22 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Status/Status.tsx: -------------------------------------------------------------------------------- 1 | import {IStatusProps, IStatusType} from './types'; 2 | import StatusDot from './components/StatusDot'; 3 | import StatusTag from './components/StatusTag'; 4 | 5 | const Status = (props: IStatusProps) => { 6 | const {type, state, style} = props; 7 | return type === IStatusType.dot ? ( 8 | 9 | ) : ( 10 | 11 | ); 12 | }; 13 | 14 | export default Status; 15 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Status/index.ts: -------------------------------------------------------------------------------- 1 | import Status from './Status'; 2 | 3 | export {Status}; 4 | export * from './types'; 5 | -------------------------------------------------------------------------------- /packages/core/src/other/components/Status/types.ts: -------------------------------------------------------------------------------- 1 | import {ViewStyle} from 'react-native'; 2 | 3 | export enum IStatusType { 4 | dot = 'dot', 5 | tag = 'tag', 6 | } 7 | 8 | export enum IStatusState { 9 | green = 'green', 10 | orange = 'orange', 11 | red = 'red', 12 | blue = 'blue', 13 | gray = 'gray', 14 | } 15 | 16 | export type IStatusProps = 17 | | { 18 | type: IStatusType.dot; 19 | state: IStatusState; 20 | style?: ViewStyle | ViewStyle[]; 21 | } 22 | | { 23 | type: IStatusType.tag; 24 | state: IStatusState; 25 | text: string; 26 | style?: ViewStyle | ViewStyle[]; 27 | }; 28 | -------------------------------------------------------------------------------- /packages/core/src/other/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Badge/'; 2 | export * from './CrossedText'; 3 | export * from './Dots'; 4 | export * from './Avatar'; 5 | export * from './Carousel'; 6 | export * from './Status'; 7 | export * from './Collapsible'; 8 | export * from './Rating'; 9 | -------------------------------------------------------------------------------- /packages/core/src/other/constants/LABELS.ts: -------------------------------------------------------------------------------- 1 | export const LABELS = { 2 | slider: 'slider', 3 | sliderLayoutLowThumb: 'sliderLayoutLowThumb', 4 | imageAvatar: 'imageAvatar', 5 | swipe: 'swipe', 6 | dotsAnimatedView: 'dotsAnimatedView', 7 | dotsScrollView: 'dotsScrollView', 8 | search: 'search', 9 | cancelSearch: 'cancelSearch', 10 | tab: 'tab', 11 | codeField: 'codeField', 12 | selector: 'selector', 13 | actionSheetsItem: 'actionSheetsItem', 14 | carousel: 'carousel', 15 | carouselItem: 'carouselItem', 16 | collapsed: 'collapsed', 17 | panelHeaderLeftView: 'panelHeaderLeftView', 18 | panelHeaderRightView: 'panelHeaderRightView', 19 | chatInputField: 'chatInputField', 20 | ratingStarButton: 'ratingStarButton', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/core/src/other/constants/index.ts: -------------------------------------------------------------------------------- 1 | import {LABELS} from './LABELS'; 2 | 3 | export {LABELS}; 4 | -------------------------------------------------------------------------------- /packages/core/src/other/functions/isNumber.ts: -------------------------------------------------------------------------------- 1 | export function isNumber(value: unknown): value is number { 2 | return typeof value === 'number'; 3 | } 4 | -------------------------------------------------------------------------------- /packages/core/src/other/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './constants'; 3 | -------------------------------------------------------------------------------- /packages/core/src/popups/MobyDickPopup/MobyDickPopup.ts: -------------------------------------------------------------------------------- 1 | import {createRef} from 'react'; 2 | 3 | import {IModalRef} from './types'; 4 | 5 | export const modalRef = createRef(); 6 | 7 | const MobyDickPopup: IModalRef = { 8 | openPopup: props => { 9 | return modalRef.current?.openPopup(props) as string; 10 | }, 11 | closePopup: id => { 12 | modalRef.current?.closePopup(id); 13 | }, 14 | closeAllPopups: () => { 15 | modalRef.current?.closeAllPopups(); 16 | }, 17 | }; 18 | 19 | export default MobyDickPopup; 20 | -------------------------------------------------------------------------------- /packages/core/src/popups/MobyDickPopup/index.ts: -------------------------------------------------------------------------------- 1 | import MobyDickPopup, {modalRef} from './MobyDickPopup'; 2 | 3 | export * from './types'; 4 | export {MobyDickPopup, modalRef}; 5 | -------------------------------------------------------------------------------- /packages/core/src/popups/MobyDickPopup/types.ts: -------------------------------------------------------------------------------- 1 | import {IPopupsContext} from '../context'; 2 | 3 | export type IModalRef = Omit; 4 | -------------------------------------------------------------------------------- /packages/core/src/popups/components/ActionSheetBase/index.ts: -------------------------------------------------------------------------------- 1 | import ActionSheetBase from './ActionSheetBase'; 2 | 3 | export {ActionSheetBase}; 4 | 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/core/src/popups/components/ModalBase/CloseIcon.tsx: -------------------------------------------------------------------------------- 1 | import {FC} from 'react'; 2 | 3 | import {IPopupCloseIcon} from '../PopupBase'; 4 | import useStyles from '../../../styles/hooks/useStyles'; 5 | import TouchableOpacity from '../../../basic/components/TouchableOpacity/TouchableOpacity'; 6 | import SimpleIcon from '../../../styles/icons/font/SimpleIcon'; 7 | 8 | import stylesCreate from './stylesCreate'; 9 | 10 | const CloseIcon: FC = props => { 11 | const [styles] = useStyles(stylesCreate); 12 | const {onPress} = props; 13 | 14 | return ( 15 | 16 | 17 | 18 | ); 19 | }; 20 | 21 | export default CloseIcon; 22 | -------------------------------------------------------------------------------- /packages/core/src/popups/components/ModalBase/ImageView.tsx: -------------------------------------------------------------------------------- 1 | import {FC, ReactElement} from 'react'; 2 | import {ViewStyle} from 'react-native'; 3 | 4 | import useStyles from '../../../styles/hooks/useStyles'; 5 | import View from '../../../basic/components/View/View'; 6 | 7 | import stylesCreate from './stylesCreate'; 8 | 9 | interface IProps { 10 | image: ReactElement; 11 | imageStyles?: ViewStyle | ViewStyle[]; 12 | } 13 | 14 | const ImageView: FC = props => { 15 | const [styles] = useStyles(stylesCreate); 16 | 17 | return ( 18 | {props.image} 19 | ); 20 | }; 21 | 22 | export default ImageView; 23 | -------------------------------------------------------------------------------- /packages/core/src/popups/components/ModalBase/VerticalButton.tsx: -------------------------------------------------------------------------------- 1 | import {FC} from 'react'; 2 | 3 | import {IButtonProps, IButtonSize} from '../../../cta/components/Button/types'; 4 | import Button from '../../../cta/components/Button/Button'; 5 | 6 | const VerticalButton: FC = props => { 7 | return