Code Monkey home page Code Monkey logo

virtual-keyboard's Introduction

Alt Virtual_Keyboard

Virtual Keyboard App

This is a React-based virtual keyboard app with support for multiple languages and emoji input.

Table of Contents

Features

  • Virtual keyboard with support for Hebrew, English, Arabic, Ukranian, Russian, Polish, Portuguese, Spanish, Macedonian, Hindi and Persian languages.
  • Emoji keyboard for expressive input.
  • Stylish and customizable interface.
  • Undo and redo functionality.

Demo

image

Installation

To run this project locally, follow these steps:

  1. Clone the repository:
git clone https://github.com/chavi362/virtual-keyboard.git
  1. open the project in terminal and then run:
npm install
npm run dev

Project Structure

The project follows a specific structure to organize its files and directories. Below is an overview of the main components:

virtual-keyboard/
│
├── src/                    # Source code directory
│   ├── assets/             # Static assets like images, icons, etc.
│   │   ├── images/         # Image files
│   │   │   ├── emojiButton.webp       # Image of emoji
│   │   │   └── backgroundImage.jpg    # Image of background
│   ├── components/         # React components
│   │   ├── VirtualKeyboard.jsx     # Main virtual keyboard component
│   │   ├── SpecialButtons.jsx      # Component for special buttons such as:redo, undo and clear all the text
|   |   ├── Screen.jsx      # the text the user typed
|   |   ├── EmojiKeyBoard.jsx
|   |   ├── KeyBoard.jsx
|   |   ├── KeyBoardLanguage.tsx
|   |   ├── KeyBoardStylee.css
│   │   ├── keyboardStyles.css    # Styles for the virtual keyboard
│   │   └── ...             # Other files
│   ├── redux/              # 
|   |   ├── reducer.js      # 
|   |   └── store.js        # 
│   ├── App.css             # Root css
│   ├── App.jsx             # App function for calling main VirtualKeyboard component
│   ├── index.css           # Body css
│   ├── letterStyle.js      # Font class
│   ├── main.jsx            # Main application component
│
├── public/                 # Public directory for static files
│   ├── keyboard.png        # Image of keyboard
│   └── ...
│
├── .gitignore              # Git ignore file
├── package.json            # Node.js project configuration
├── README.md               # Project documentation
├── index.html              # Main HTML file
 ...                        # Other configuration files

Contributing

We welcome contributions from the community to help improve the Virtual Keyboard App. If you would like to contribute, please follow these steps:

First of all, please give the repository a star 🌟

  1. Fork the project.
  2. Create your feature branch:
git checkout -b feature/NewFeature.
  1. Commit your changes:
git commit -m 'Add a new feature'.
  1. Push to the branch:
git push origin feature/NewFeature.
  1. Open a pull request on the main repository, describing your changes and explaining why they are valuable.

    Please help us keep our issue list small by adding Fixes #{$ISSUE_NUMBER} to the description of pull requests that resolve open issues. For example, if your pull request fixes issue #10, then please add the following to its description:

Fixes #10

Contact

If you have any questions, suggestions, or issues regarding the virtual-keyboard, please feel free to reach out to us through the Issues section of this repository. You can also discuss with as in the discussion template, there are there meaningfull discussion. You can also contact me via my email.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Please ensure that your contributions adhere to our Code of Conduct. If you find this project helpful or interesting, please give it a ⭐️.

virtual-keyboard's People

Contributors

anvijamkhande avatar atharvamutsaddi avatar atilagulers avatar atiumcache avatar chavi362 avatar cyanedel avatar deeper-2021 avatar efratmil avatar ethan-new avatar hana-chg avatar jackl92 avatar jcruz525 avatar kishoreravi24 avatar liza1608 avatar manmit124 avatar maryjonah avatar michalw101 avatar mynameishomin avatar rachelifeld avatar ricardoharanop avatar rithwikbhardwaj avatar sha1kh4 avatar solvman avatar soumya-197 avatar stefan5441 avatar tiago1820 avatar utkbkts avatar vict0rtesla avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

virtual-keyboard's Issues

backspace crashes app

when you use the backspace on physical keyboard and press lower all or upper all even if the text is present the app crashes but doesn't seem to happen if you use the virtual backspace
Screenshot 2024-01-27 at 00 34 10

Optimizing the code and remove unnecessary useState-isUndo and isRedo

Currently, we have two unnecessary useState, Also the redoStuck is not inside the function virtualKeyboard and i's not profession.
I want to arrange the code and remove this unnecessary useState. My goal that the code will be the most clean and effecient.
Maybe we can use seprate stuck for all the operations and the text will be in an string.
Please think how to implement this.
Good Luck!

Custom hooks

Hi, @chavi362 .

What do you think about creating hooks to encapsulate the logic of the components, leaving them free to just render the information?

I created two example hooks for you to analyze.

Enter button doesn't work

When you click the enter button it add space to the text in the screen instead of enter.
despite the fact that the enter button send to the handleButtonClick function /n.
In order to solve this you have to understand the components: VirtualKeyboard, Keybourd, and screen.

organize the files and folders of the project

All the images should be in assets/ the assets shouldn't exist
remove the react icon it's needed.
Please make sure you're updating all the file paths in the project and update the project structure in readme

adding keyboard events from the physical keyboard

I want that also if the user type in its regular keyboard in his computer the screen in the virtual keyboard will display what he types.
I want that also the user can see in the buttons of the virtual keyboard when he types a button in the regular. For example when he types 'a' the button of 'a' in the virtual colored like it colored when it's hoverd.

Feature Request: Text Alignment Option in Style Selector Component

Currently, the Style Selector component provides a great set of options for customizing text style. However, an additional enhancement can be made to include text alignment options such as left, right, and center.
Add something like that
image
that when hovering will intraduct also the two other options and when clicking on this the text-aligment will change.
You also will have to update the letterStyle class.
Good Luck

Arrange readme

As you can see, the readme is not so arranged.
Not all the links above work, the contributing in in the bash, the npm install isn't into a bash, and I want also to tell user to run npm run dev after it.
Also, I want to have link to the code of conduct and the license.
I want also to add in project structure explanation for all the components and not only for 3

Changing the existing Redux code to use Redux Toolkit

Changing the existing Redux code to use Redux Toolkit is not particularly difficult and can often result in cleaner and more concise code. Redux Toolkit is designed to simplify common Redux patterns and reduce boilerplate.

Enhancing Accessibility - Adding Accessibility Button and Screen Reader Compatibility

Description:
Improving the accessibility features of the Virtual Keyboard. The proposed enhancements include:

Accessibility Button:
Add a dedicated button for accessibility options.
Options can include settings to enhance usability for individuals with different accessibility needs.

Screen Reader Compatibility:
Implement features to ensure compatibility with screen readers.
Make necessary adjustments so that the Virtual Keyboard is fully accessible and readable by screen reader software.

Tasks:

Design and implement an accessibility button.
Incorporate options within the accessibility menu for various accessibility needs.
Ensure that the Virtual Keyboard is compatible with screen readers.

Steps to Reproduce:

Enable accessibility mode using the dedicated button.
Test the various accessibility options provided.
Verify that the Virtual Keyboard is fully compatible with popular screen reader software.

Additional Information:
Feel free to reach out for any clarification or guidance during the development process.

Note to Contributors:
Thank you for contributing to our project! Let's work together to make the Virtual Keyboard accessible to a wider audience. If you have any questions or need assistance, don't hesitate to ask.

the user can delete the px

In the font sie selector the user can change the text box and delete the px.
Mabey you can change it to nummary up down or select so the user can't change the px.
I want that it will be like the option to choose font size in Microsoft Word.

Feat: Option to search emoji

Add a description for each emoji in the imojies arrays, and add a saearch input that when change the fitting imujie will display

Adding support for another languages

This task is both straightforward and enjoyable! Follow these simple steps to add your language to the Virtual Keyboard:

Navigate to langugeData.js and find the langugeData array.

Add all the necessary data for your language, including its name, translated name, placeholder, etc.
(The shift array should be the characters the user have when he clicks shift)
Please note to add the characters array in the order they are in the real keyboard)

Run the application and verify that everything works seamlessly with the new language.

Don't forget to update the README file to include information about the newly added language.

Good luck, and thank you for contributing to the Virtual Keyboard project! If you encounter any issues or have questions, feel free to reach out. Happy coding!

Copy and paste buttons

Adding in specialbuttons.jsx a button of copy and a button of paste
When clicking copy it will copy all the text so you can paste or in the screen or in another place in the computer.
When clicking paste it will paste the text you copy or a text you copy from another place.
Good Luck!!!

README update

Hello.
The list of supported languages for the project needs to be updated.

Proposal to Transition everything from Redux Toolkit to useReducer

Hello team,

I hope this message finds you well. I am writing to propose a transition from using Redux Toolkit to utilizing the useReducer hook in our virtual-keyboard component.

Current Setup:
As of now, we have integrated Redux Toolkit to manage a single action, which is to add color to one of the keyboard buttons when it is clicked, either in the virtual keyboard or on the physical keyboard. The majority of the state is handled by UseReducer within the virtual keyboard component.

Proposal:
I suggest we transition also the add color to use the useReducer hook instead of relying on Redux Toolkit. The virtual-keyboard component is relatively small, and for components with straightforward state management needs, useReducer can offer a more direct and concise solution. This change would involve refactoring our current implementation to utilize the useReducer hook, and the state data would be delivered to the components as props.

So, if you want to pick this issue, please change also the add-color function to the useReducer in the virtual keyboard component

If there are concerns or if anyone believes that Redux Toolkit is a more suitable choice for our specific use case, I am open to discussion. Please share your thoughts, and we can collectively decide whether to proceed with transitioning everything to useReducer or to maintain the current Redux Toolkit implementation.

I appreciate your time and consideration on this matter.
Chavi

make the buttons more user friendly/accessible and modern

hey, I'm new to open source projects so I apologise if I'm doing anything wrong. I noticed all buttons are using default styling, in some places they blend in making it harder for people with sight problems to see. the "upper" all button also has a bug that makes the button and colour selector bigger. also if possible could I also modify hover effects and active effects.

providing an efficient data structure for the languages array-Map

Now all language has a array and placeholder[x] when we have many languages, it becomes really messy.
Another problem is that there many languages that have symbols that seen only when shift pressed.
Also, I feel that the useState for placeholder is unnecessary.
So, I would like to have another file that have Map that its key will be the language's name and the data for each item will be array of object that will keep for each char the regualr char and the shift char and also the placeholder.
And each component that need it(screen and keyboard) will get the language as a prop and import the Map for taking the fit data.

Easy: adding support for another languages

This task is both straightforward and enjoyable! Follow these simple steps to add your language to the Virtual Keyboard:

Navigate to langugeData.js and find the langugeData array.

Add all the necessary data for your language, including its name, translated name, placeholder, etc.
(The shift array should be the characters the user have when he clicks shift/capslock /contro+shift,= and other kinds of buttons that give the special characters)
Please note to add the characters array in the order they are in the real keyboard)

Run the application and verify that everything works seamlessly with the new language.
Don't forget to update the README file to include information about the newly added language.
Note that for this issue you don't have to write in the description solution for #.. because we don't want to close the issue
Good luck, and thank you for contributing to the Virtual Keyboard project! If you encounter any issues or have questions, feel free to reach out. Happy coding!

Option to change the text or the style of part of the text

Now we have only two option to change the style: one is to change all text style which is like control-a and another one is to change the text from now. I want to have an option to highlight part of the text and thus change only it

Design the style selector components

Note that the lower all and upper all aren't in the same size . Also the underline button is alone without anything button and all of that don't look good

Clean up the code-open to all!

Now the code is very bigger.
If you can update some function to be generic. Or you find repeated code, you can submit a PR on this!
Note that the code should work the same as before and be readable and efficient !

Backend

Hello @chavi362 , how are you?

What do you think if I make a Rest API to connect to the keyboard and store the characters and emojis in the database?
In the future we may also store custom user configurations(colors, fonts) and data.

An extension of the emoji keyboard

adding to the emojis keyboard more emojis and dividing them to categories such us: people, food,activities, symboles, whatever.
Then adding the option to chose which category to use and adding an option for search.
I want that it would be the same idea to windows emojis(when you type windows+;)
If you have more questions, please let me know.
Good Luck 🤞

A small problem

Hello, @chavi362 .

Today, when I updated the local project with the remote repository, it didn't work.
I found an error in the browser console.:

Captura de pantalla de 2023-12-10 12-30-37

Duplicate emojis

Hello!

I found two duplicate emojis.

emoji

Do you want me to remove it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.