lilact 0.7.9 → 0.7.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- <img src="./icon.png" alt="Description" width="200" style="margin-left: -.75rem"/>
1
+ <img src="./icon.png" alt="Description" width="128" style="margin-left: -.76rem"/>
2
2
 
3
3
  # Lilact
4
4
 
@@ -8,6 +8,8 @@
8
8
 
9
9
  [Lilact repo on GitHub](https://github.com/arashkazemi/lilact) - [Lilact on npm](https://www.npmjs.com/package/lilact)
10
10
 
11
+ [Lilact/PHP Demo](https://github.com/arashkazemi/lilact-php-demo) - [Lilact/Python Demo](https://github.com/arashkazemi/lilact-python-demo)
12
+
11
13
  ---
12
14
 
13
15
  If you find Lilact useful, please consider sponsoring. Your support funds ongoing maintenance,
@@ -18,33 +20,34 @@ performance improvements, and new features. [Sponsor me on GitHub](https://githu
18
20
  `Lilact` is a very lightweight implementation of the React API that is
19
21
  designed to work in the browser. It can be used as a single script
20
22
  that is around `80kb` minified and around `27kb` gzipped and includes its whole api.
21
- `Lilact` is very fast, it uses minimum resources and handles memory very efficiently.
23
+ `Lilact` is very fast, it uses minimal resources and handles memory very efficiently.
22
24
 
23
25
  `Lilact` works in the browser, so it doesn't rely on any JS/node back-end and can
24
26
  essentially work with any kind of web server/back-end. An example of using it with a PHP/MySQL
25
27
  data store is available on [lilact-php-demo](https://github.com/arashkazemi/lilact-php-demo).
28
+ And an example of using it with a Python/SQLite data store is available on
29
+ [lilact-python-demo](https://github.com/arashkazemi/lilact-python-demo).
26
30
 
27
- `Lilact` uses its own JSX transpiler, and not babel. It is a recursive-descent
28
- parser with lookahead, but it doesn't parse the JS syntax completely and relies on the
29
- JS runtime to detect some errors. The transpiler weights
30
- only a few kilobytes and can be even incorporated into other React engines. To
31
- make it better, it even generates sourcemaps like a charm, without relying on
32
- any 3rd party library. There is a `transpile.js` helper in the bin directory to
33
- show how you can use it.
31
+ `Lilact` uses its own JSX transpiler (not Babel). It is a recursive-descent
32
+ parser with lookahead, that doesn't parse the JS syntax completely and relies on the
33
+ JS runtime to detect some errors. The transpiler weights only a few kilobytes and can
34
+ be incorporated into other React engines too. It even generates sourcemaps without relying
35
+ on any 3rd party library. There is a `transpile.js` helper in the bin directory to show
36
+ how you can use it.
34
37
 
35
38
  `Lilact` implements both the **legacy class based** and **modern hook based** APIs. And it
36
39
  has almost everything necessary. In addition to the API, it also includes the official
37
40
  `Redux` and `PropTypes` libraries to be used (see the `redux.jsx` and `proptypes.jsx` demos).
38
- So yes it has redux support and has many of the functions and hooks, i.e. `connect` and
41
+ So it has redux support and has many of the functions and hooks, i.e. `connect` and
39
42
  `useDispatch`.
40
43
 
41
44
  It also includes the amazing `@emotion/css` library to ease working with styles.
42
45
  It can be accessed through `Lilact.emotion`.
43
46
 
44
47
  To ease working, it already includes a `HashRouter`, `CSSTransition`, `ErrorBoundary`,
45
- `Suspense`, `Spinner`, and many other stuff. It also has a specific timeout implementation
46
- that can be paused and resumed at will. `Lilact`'s `Suspense` even has a few more features
47
- than the standard API.
48
+ `Suspense`, and some helper components like `Spinner` and `ResizablePane`. It also has
49
+ a specific timeout implementation that can be paused and resumed at will. `Lilact`'s
50
+ `Suspense` has a few more features than the standard API.
48
51
 
49
52
  You can see all the available methods in the documentation. And there is a list of
50
53
  demos that can all be seen alongside their code at [Lilact Demo Examples](./static/index.html).
@@ -7570,16 +7570,32 @@ function HashRouter({ children, basename = "" }) {
7570
7570
 
7571
7571
  const [location, setLocation] = useState(readLocation);
7572
7572
  useEffect(() => {
7573
- const onHash = () => setLocation(readLocation());
7574
- window.addEventListener("hashchange", onHash);
7575
- return () => window.removeEventListener("hashchange", onHash);
7573
+ const onChange = () => setLocation(readLocation());
7574
+
7575
+ window.addEventListener("hashchange", onChange);
7576
+ window.addEventListener("popstate", onChange);
7577
+
7578
+ // initialize once in case hash/state are already set
7579
+ onChange();
7580
+
7581
+ return () => {
7582
+ window.removeEventListener("hashchange", onChange);
7583
+ window.removeEventListener("popstate", onChange);
7584
+ };
7576
7585
  }, [basename]);
7577
7586
 
7578
7587
  const navigate = useCallback((to, { replace = false, state } = {}) => {
7588
+ if (typeof to === "number") {
7589
+ history.go(to);
7590
+ return;
7591
+ }
7592
+
7579
7593
  const url = createURL(to);
7580
7594
  const href = "#" + (basename + url);
7595
+
7581
7596
  if (replace) history.replaceState({ __state: state }, "", href);
7582
7597
  else history.pushState({ __state: state }, "", href);
7598
+
7583
7599
  setLocation(readLocation());
7584
7600
  }, [basename]);
7585
7601
 
@@ -7785,7 +7801,7 @@ function Routes({ children }) {
7785
7801
 
7786
7802
 
7787
7803
 
7788
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL1VzZXJzL2FyYXNoL0Rlc2t0b3AvUHJvamVjdHMvTGlsYWN0L3NyYy9yb3V0ZXIuanN4Iiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL1VzZXJzL2FyYXNoL0Rlc2t0b3AvUHJvamVjdHMvTGlsYWN0L3NyYy9yb3V0ZXIuanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThCQzs7UUFFTztRQUNBOztvQ0FFNEI7bUNBQ0EsQUFBRCxVQUFXOztDQUU3QzttQkFDa0IsUUFBUSw4QkFBK0Isc0JBQXNCLG9CQUFvQjs7Q0FFbkc7Ozs7Ozs7MkJBTzJCLEFBQUQsOEJBQThCO3VCQUNsQyxNQUFNOzt5QkFFSjttQ0FDVSxVQUFXO3NEQUNRO2tEQUNKO1VBQ3hDOzs7Ozs7OzswQ0FRZ0M7V0FDOUIsQUFBRCxNQUFPO2lCQUNBLGlCQUFpQixZQUFhO3lCQUN0QjtTQUNoQixnQ0FBZ0M7Ozs4QkFHWCxBQUFELElBQU0sNkJBQTZCLFFBQU87dUJBQ2hEO3FCQUNGO0tBQ2hCLDhCQUErQixBQUFEO3dCQUNWLEFBQUQ7YUFDWCxZQUFhOzs7U0FHbEIsMkNBQWlFOzs7Q0FHekU7Ozs7OzRCQUsyQixHQUFHO3dCQUNQO0tBQ25CLHNCQUFzQjs7OztDQUkxQjs7Ozs7NEJBSzJCLEdBQUc7d0JBQ1A7S0FDbkIsc0JBQXNCOzs7bUJBR1IsR0FBRzt3QkFDRTt1QkFDRDs7O0NBR3RCOzs7Ozs7Ozs7Ozs7Ozs7cUJBZXFCLEFBQUQsaUdBQWlHOzhCQUN4Rjs4QkFDQTtzQkFDUixJQUFJO01BQ3BCLGlCQUFpQjtNQUNqQjs7O0dBR0Y7OzttQkFHZTtXQUNSLElBQUs7O1NBRVA7RUFDTiwrSEFDQzs7Ozt1QkFLbUIsSUFBSTtLQUN0QjtrQkFDYyxBQUFEOzs7O0NBSWpCOzs7Ozs7Ozs7Ozs7Ozs7d0JBZXdCLEFBQUQ7Ozs7Ozs7Ozs7OztJQVlwQjs4QkFDMEI7OEJBQ0E7c0RBQ3dCLGNBQWMsV0FBVzs7c0NBRXpDLCtCQUErQiw0QkFBNEIsd0JBQXdCLGFBQWM7dUVBQy9ELEFBQUQ7c0ZBQ2UsY0FBYzsyREFDeEMsQUFBRDtpQ0FDMUIsS0FBSyxpQkFBa0IsU0FBUSxlQUFnQjs4QkFDbEQ7O3NCQUVSLElBQUk7TUFDcEIsaUJBQWlCO01BQ2pCO21CQUNhO1dBQ1IsSUFBSzs7O1NBR1A7RUFDTixpSkFDQyx5Q0FBMkMsQUFBRDs7OztDQUs3QztDQUNBO3FCQUNvQixVQUFVOztFQUU3Qjt5Q0FDd0MsQUFBRCxtQkFBb0IsQUFBRDtXQUNoRCxBQUFELHdCQUF5QixhQUFhO2tCQUM5Qjs7O1dBR1AsQUFBRCxzQkFBc0I7OzBCQUVQO1NBQ2pCOzs7bUJBR1Usb0JBQW9CO0tBQ2xDLHlCQUF5Qix5QkFBeUIsTUFBTTtRQUNyRCxtQ0FBbUM7c0JBQ3JCO0tBQ2pCLFlBQVk7aUJBQ0E7b0JBQ0ksQUFBRCxVQUFXLDhCQUErQjtFQUM1RDtLQUNHLG1DQUFtQzs4REFDc0I7O1NBRXJEOzs7Q0FHUjtDQUNBOzs7Ozs7OztzQkFRc0IsQUFBRCxxQ0FBcUM7RUFDekQ7OztDQUdEOzs7Ozs7dUJBTXVCLEFBQUQsZUFBZTs4QkFDUjs7RUFFNUI7aUNBQytCOztNQUUzQixvQ0FBb0M7O0dBRXZDOzs7OztTQUtNLCtCQUErQjtNQUNsQyxVQUFVO0lBQ1o7T0FDRyxVQUFVO1lBQ0wscUJBQTBDO2NBQ3hDLGNBQWM7S0FDdkI7WUFDTyxxQkFBMEMsRUFBUTtXQUNuRDtZQUNDLHFCQUEwQzs7Ozs7RUFLcEQifQ==
7804
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL1VzZXJzL2FyYXNoL0Rlc2t0b3AvUHJvamVjdHMvTGlsYWN0L3NyYy9yb3V0ZXIuanN4Iiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL1VzZXJzL2FyYXNoL0Rlc2t0b3AvUHJvamVjdHMvTGlsYWN0L3NyYy9yb3V0ZXIuanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThCQzs7UUFFTztRQUNBOztvQ0FFNEI7bUNBQ0EsQUFBRCxVQUFXOztDQUU3QzttQkFDa0IsUUFBUSw4QkFBK0Isc0JBQXNCLG9CQUFvQjs7Q0FFbkc7Ozs7Ozs7MkJBTzJCLEFBQUQsOEJBQThCO3VCQUNsQyxNQUFNOzt5QkFFSjttQ0FDVSxVQUFXO3NEQUNRO2tEQUNKO1VBQ3hDOzs7Ozs7OzswQ0FRZ0M7V0FDOUIsQUFBRCxNQUFPO21CQUNFLGlCQUFpQixZQUFhOzt5QkFFeEI7eUJBQ0E7O0VBRXZCO1VBQ1E7O1NBRUQsTUFBTTs2QkFDYzs2QkFDQTs7Ozs4QkFJQyxBQUFELElBQU0sNkJBQTZCLFFBQU87S0FDbEUseUJBQXlCO2FBQ2pCOzs7O3VCQUlVO3FCQUNGOztLQUVoQiw4QkFBK0IsQUFBRDt3QkFDVixBQUFEOzthQUVYLFlBQWE7OztTQUdsQiwyQ0FBaUU7OztDQUd6RTs7Ozs7NEJBSzJCLEdBQUc7d0JBQ1A7S0FDbkIsc0JBQXNCOzs7O0NBSTFCOzs7Ozs0QkFLMkIsR0FBRzt3QkFDUDtLQUNuQixzQkFBc0I7OzttQkFHUixHQUFHO3dCQUNFO3VCQUNEOzs7Q0FHdEI7Ozs7Ozs7Ozs7Ozs7OztxQkFlcUIsQUFBRCxpR0FBaUc7OEJBQ3hGOzhCQUNBO3NCQUNSLElBQUk7TUFDcEIsaUJBQWlCO01BQ2pCOzs7R0FHRjs7O21CQUdlO1dBQ1IsSUFBSzs7U0FFUDtFQUNOLCtIQUNDOzs7O3VCQUttQixJQUFJO0tBQ3RCO2tCQUNjLEFBQUQ7Ozs7Q0FJakI7Ozs7Ozs7Ozs7Ozs7Ozt3QkFld0IsQUFBRDs7Ozs7Ozs7Ozs7O0lBWXBCOzhCQUMwQjs4QkFDQTtzREFDd0IsY0FBYyxXQUFXOztzQ0FFekMsK0JBQStCLDRCQUE0Qix3QkFBd0IsYUFBYzt1RUFDL0QsQUFBRDtzRkFDZSxjQUFjOzJEQUN4QyxBQUFEO2lDQUMxQixLQUFLLGlCQUFrQixTQUFRLGVBQWdCOzhCQUNsRDs7c0JBRVIsSUFBSTtNQUNwQixpQkFBaUI7TUFDakI7bUJBQ2E7V0FDUixJQUFLOzs7U0FHUDtFQUNOLGlKQUNDLHlDQUEyQyxBQUFEOzs7O0NBSzdDO0NBQ0E7cUJBQ29CLFVBQVU7O0VBRTdCO3lDQUN3QyxBQUFELG1CQUFvQixBQUFEO1dBQ2hELEFBQUQsd0JBQXlCLGFBQWE7a0JBQzlCOzs7V0FHUCxBQUFELHNCQUFzQjs7MEJBRVA7U0FDakI7OzttQkFHVSxvQkFBb0I7S0FDbEMseUJBQXlCLHlCQUF5QixNQUFNO1FBQ3JELG1DQUFtQztzQkFDckI7S0FDakIsWUFBWTtpQkFDQTtvQkFDSSxBQUFELFVBQVcsOEJBQStCO0VBQzVEO0tBQ0csbUNBQW1DOzhEQUNzQjs7U0FFckQ7OztDQUdSO0NBQ0E7Ozs7Ozs7O3NCQVFzQixBQUFELHFDQUFxQztFQUN6RDs7O0NBR0Q7Ozs7Ozt1QkFNdUIsQUFBRCxlQUFlOzhCQUNSOztFQUU1QjtpQ0FDK0I7O01BRTNCLG9DQUFvQzs7R0FFdkM7Ozs7O1NBS00sK0JBQStCO01BQ2xDLFVBQVU7SUFDWjtPQUNHLFVBQVU7WUFDTCxxQkFBMEM7Y0FDeEMsY0FBYztLQUN2QjtZQUNPLHFCQUEwQyxFQUFRO1dBQ25EO1lBQ0MscUJBQTBDOzs7OztFQUtwRCJ9
7789
7805
  ;// ./src/accessories.jsx
7790
7806
  /*
7791
7807