The key seems to be...
import * as React from "react";
import { GridLayout } from "@egjs/react-infinitegrid";
Note: this looks to add about 180k of gzipped JS on top of React's baseline, the demo is about 252K gzipped. Definitely not a *light* implementation in any way, shape or form. If this is the bulk of your UI, it may not be so bad... I generally try to stay under 500k total gzipped JS payload for web applications.
https://www.npmjs.com/package/@egjs/react-infinitegrid
https://github.com/naver/egjs-infinitegrid
I've always thought the UX for the date picker from the MS Ajax Toolkit is about as good and intuitive as it gets, it looks like the bootstrap-datepicker implements this... unfortunately, it also requires jquery+bootstrap, and if you aren't using bootstrap to begin with, it's too big to bring in just for this. Range pickers are also easy to get wrong.
In any case, for the most part, just use input type=date and rely on the native interface for picking a date. You aren't adding a bunch of extra overhead, and it should be the expected experience.
Not sure if this is even on-topic... not too much detail, and should probably list common frameworks using the different CSS tech, not spell out the frameworks themselves.
Ex: no mention that material-ui uses CSS-In-JS, or other common use cases. It's very popular in React.
For me, this is probably something I'd be more likely to look to as an example in bringing the functionality into my own project vs using as a separate component. That said, the source is pretty clean and easy to comprehend.
Of note, the package.json license is MIT, but there is no LICENSE file in the project itself.
I think you'd have a hard time describing how exactly Jest is a library and not a framework vs. Mocha in any meaningful way. In what way is running the `jest` command meaninguly different from running the `mocha` command, with the exception that jest provides more magic in terms of wiring code coverage and parallel testing. It does use jasmine2 for the test runner, but does so much more, and would absolutely love to hear how it is a library and not a framework.
Suggestions... for the worker, you don't even need to extend the class, there's no real value here. Remove the class definition and change the exports to...
module.exports = new ThreadWorker(yourFunction, {...})
For the pool, put the emitter on the pool itself, you can extend your initial FixedThreadPool/DynamicThreadPool with the emitter... you can add the emitter to your prototype chain or base class(es).
For the pool, instead of passing event handler options, utilize the event emitter...
pool.on('error', error => ...);
pool.on('ready', () => ...);
You may also want a method that returns a promise bound to your ready event...
await pool.ready();
Otherwise, cool concept.
The key seems to be... import * as React from "react"; import { GridLayout } from "@egjs/react-infinitegrid"; Note: this looks to add about 180k of gzipped JS on top of React's baseline, the demo is about 252K gzipped. Definitely not a *light* implementation in any way, shape or form. If this is the bulk of your UI, it may not be so bad... I generally try to stay under 500k total gzipped JS payload for web applications. https://www.npmjs.com/package/@egjs/react-infinitegrid https://github.com/naver/egjs-infinitegridSuggestions... for the worker, you don't even need to extend the class, there's no real value here. Remove the class definition and change the exports to... module.exports = new ThreadWorker(yourFunction, {...}) For the pool, put the emitter on the pool itself, you can extend your initial FixedThreadPool/DynamicThreadPool with the emitter... you can add the emitter to your prototype chain or base class(es). For the pool, instead of passing event handler options, utilize the event emitter... pool.on('error', error => ...); pool.on('ready', () => ...); You may also want a method that returns a promise bound to your ready event... await pool.ready(); Otherwise, cool concept.Alternatively... const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); ... await delay(5000);