untemps / react-vocal Goto Github PK
View Code? Open in Web Editor NEWReact component and hook to initiate a SpeechRecognition session
Home Page: https://untemps.github.io/react-vocal
License: MIT License
React component and hook to initiate a SpeechRecognition session
Home Page: https://untemps.github.io/react-vocal
License: MIT License
A demo is available via Github page at https://untemps.github.io/react-vocal/
We must add it in the master main README.
By adding a hook, we decouple the creation of the SpeechRecognition from the Vocal component logic and offer a way to use the lib with no visual representation.
A isSupported
is used internally to detect if the Web Speech API is available.
For some use cases, it can be useful to import it directly from the package.
The documentation could detail the set of variables and methods we have access to when we decide to use a custom component.
All event signatures but result
give the SpeechRecognition event as a first parameter to any installed handler. result
, on the other hand, returns a partial result as a first parameter, and the event as a second parameter.
This makes it hard to remember the API, and hard to use a general event handler for all events (like we do in my UI toolkit so we can debounce all events from the wrapper).
I'd like to propose that all events returned by the SpeechRecognitionWrapper have the underlying event as the first parameter, since it's the richest source of information and the most useful for low-level use of the API.
Note that I don't mind that the Vocal component returns the computed result first.
On iOS 14.5, SpeechRecognition
API is supported but not all related APIs, like SpeechGrammarList
or navigator.persmissions
.
The lack of SpeechGrammarList
is handled by @untemps/vocal
but navigator.persmissions
is not.
We should add a section to explain the developer should check for this particular case by himself.
TODO: Add specifications
Please pay attention to Sidnioulz's comments below:
Shouldn't this be memoized? What would be the performance impact if I ran, say, 5 commands in a row?
Originally posted by @Sidnioulz in #58 (comment)
Correct me if I'm wrong, but I should be able to completely change the commands in use without suspending the speech recognition session, right?
I'm thinking of assisted typing use cases where I want to provide matching commands based on the current field / table cell.
Originally posted by @Sidnioulz in #58 (comment)
At least add role
, aria-label
and tabIndex
props to the main tag
Fuse.js increases your bundle size by > 50% judging on its unpacked size and your current package's unpacked size. That's quite big. I think it (and therefore commands) should be optional. You can set it as a peer dependency with a peerDependenciesMeta section to achieve that, should you want to.
Originally posted by @Sidnioulz in #58 (comment)
Switch from toLocaleLowerCase
to toLowerCase
since there is no specific reason to handle locale mapping.
Why .toLocaleLowerCase()
? As in, why lowercase, and why specifically locale lowercase?
Originally posted by @Sidnioulz in #58 (comment)
The component uses internal util function to check if a value is a function.
The @untemps/utils package contains such a function. We can replace the internal one by the one included in the external package.
I think the performance cost is negligible when continuous and interimResults are false (we just loop over a small ~10 items array), but this makes the wrapper useful in more cases including the one I need to support in my UI library.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.