@lipemat/js-helpers 1.0.0
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 +61 -0
- package/dist/classes/classes.d.ts +28 -0
- package/dist/classes/classes.d.ts.map +1 -0
- package/dist/classes/classes.js +50 -0
- package/dist/classes/classes.js.map +1 -0
- package/dist/colors/colors.d.ts +14 -0
- package/dist/colors/colors.d.ts.map +1 -0
- package/dist/colors/colors.js +63 -0
- package/dist/colors/colors.js.map +1 -0
- package/dist/csvExport/csvExport.d.ts +19 -0
- package/dist/csvExport/csvExport.d.ts.map +1 -0
- package/dist/csvExport/csvExport.js +74 -0
- package/dist/csvExport/csvExport.js.map +1 -0
- package/dist/date/date.d.ts +10 -0
- package/dist/date/date.d.ts.map +1 -0
- package/dist/date/date.js +20 -0
- package/dist/date/date.js.map +1 -0
- package/dist/debounce/debounce.d.ts +17 -0
- package/dist/debounce/debounce.d.ts.map +1 -0
- package/dist/debounce/debounce.js +34 -0
- package/dist/debounce/debounce.js.map +1 -0
- package/dist/delay/delay.d.ts +18 -0
- package/dist/delay/delay.d.ts.map +1 -0
- package/dist/delay/delay.js +20 -0
- package/dist/delay/delay.js.map +1 -0
- package/dist/device/device.d.ts +26 -0
- package/dist/device/device.d.ts.map +1 -0
- package/dist/device/device.js +42 -0
- package/dist/device/device.js.map +1 -0
- package/dist/dom-ready/dom-ready.d.ts +12 -0
- package/dist/dom-ready/dom-ready.d.ts.map +1 -0
- package/dist/dom-ready/dom-ready.js +19 -0
- package/dist/dom-ready/dom-ready.js.map +1 -0
- package/dist/error/error.d.ts +28 -0
- package/dist/error/error.d.ts.map +1 -0
- package/dist/error/error.js +33 -0
- package/dist/error/error.js.map +1 -0
- package/dist/escaping/escaping.d.ts +17 -0
- package/dist/escaping/escaping.d.ts.map +1 -0
- package/dist/escaping/escaping.js +39 -0
- package/dist/escaping/escaping.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/injectScript/injectScript.d.ts +14 -0
- package/dist/injectScript/injectScript.d.ts.map +1 -0
- package/dist/injectScript/injectScript.js +30 -0
- package/dist/injectScript/injectScript.js.map +1 -0
- package/dist/memoize/memoize.d.ts +13 -0
- package/dist/memoize/memoize.d.ts.map +1 -0
- package/dist/memoize/memoize.js +19 -0
- package/dist/memoize/memoize.js.map +1 -0
- package/dist/noop/noop.d.ts +9 -0
- package/dist/noop/noop.d.ts.map +1 -0
- package/dist/noop/noop.js +10 -0
- package/dist/noop/noop.js.map +1 -0
- package/dist/objects/objects.d.ts +20 -0
- package/dist/objects/objects.d.ts.map +1 -0
- package/dist/objects/objects.js +24 -0
- package/dist/objects/objects.js.map +1 -0
- package/dist/once/once.d.ts +9 -0
- package/dist/once/once.d.ts.map +1 -0
- package/dist/once/once.js +17 -0
- package/dist/once/once.js.map +1 -0
- package/dist/string/string.d.ts +34 -0
- package/dist/string/string.d.ts.map +1 -0
- package/dist/string/string.js +65 -0
- package/dist/string/string.js.map +1 -0
- package/dist/throttle/throttle.d.ts +17 -0
- package/dist/throttle/throttle.d.ts.map +1 -0
- package/dist/throttle/throttle.js +43 -0
- package/dist/throttle/throttle.js.map +1 -0
- package/dist/url/url.d.ts +17 -0
- package/dist/url/url.d.ts.map +1 -0
- package/dist/url/url.js +28 -0
- package/dist/url/url.js.map +1 -0
- package/package.json +71 -0
- package/src/classes/Readme.md +28 -0
- package/src/classes/classes.ts +51 -0
- package/src/colors/Readme.md +28 -0
- package/src/colors/colors.ts +80 -0
- package/src/csvExport/Readme.md +35 -0
- package/src/csvExport/csvExport.ts +89 -0
- package/src/date/Readme.md +21 -0
- package/src/date/date.ts +23 -0
- package/src/debounce/Readme.md +27 -0
- package/src/debounce/debounce.ts +47 -0
- package/src/delay/Readme.md +20 -0
- package/src/delay/delay.ts +19 -0
- package/src/device/Readme.md +31 -0
- package/src/device/device.ts +46 -0
- package/src/dom-ready/Readme.md +27 -0
- package/src/dom-ready/dom-ready.ts +22 -0
- package/src/error/Readme.md +40 -0
- package/src/error/error.ts +49 -0
- package/src/escaping/Readme.md +23 -0
- package/src/escaping/escaping.ts +41 -0
- package/src/index.ts +24 -0
- package/src/injectScript/Readme.md +26 -0
- package/src/injectScript/injectScript.ts +31 -0
- package/src/memoize/Readme.md +28 -0
- package/src/memoize/memoize.ts +27 -0
- package/src/noop/Readme.md +19 -0
- package/src/noop/noop.ts +9 -0
- package/src/objects/Readme.md +31 -0
- package/src/objects/objects.ts +26 -0
- package/src/once/Readme.md +26 -0
- package/src/once/once.ts +22 -0
- package/src/string/Readme.md +37 -0
- package/src/string/string.ts +72 -0
- package/src/throttle/Readme.md +27 -0
- package/src/throttle/throttle.ts +57 -0
- package/src/url/Readme.md +32 -0
- package/src/url/url.ts +35 -0
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# @lipemat/js-helpers
|
|
2
|
+
|
|
3
|
+
Framework-agnostic TypeScript helper utilities used across [@lipemat](https://github.com/lipemat) projects.
|
|
4
|
+
|
|
5
|
+
Each helper is small, dependency-light, and tree-shakeable. The package ships compiled ESM (`.js`) plus type declarations (`.d.ts`).
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
yarn add @lipemat/js-helpers
|
|
11
|
+
# or
|
|
12
|
+
npm install @lipemat/js-helpers
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
Every helper is importable from the package root:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import {debounce, hexToRGB, domReady} from '@lipemat/js-helpers';
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Helpers
|
|
24
|
+
|
|
25
|
+
| Helper | Description | Docs |
|
|
26
|
+
|--------|-------------|------|
|
|
27
|
+
| `classNameAmend`, `sanitizeCssModuleClass` | Manipulate CSS class name strings. | [classes](./src/classes/Readme.md) |
|
|
28
|
+
| `hexToRGB`, `RGBToHex`, `getLightness` | Convert between hex/RGB colors and measure lightness. | [colors](./src/colors/Readme.md) |
|
|
29
|
+
| `csvExport` | Generate a CSV file and trigger a browser download. | [csvExport](./src/csvExport/Readme.md) |
|
|
30
|
+
| `getFormattedDate` | Format a `Date` using `mm`/`dd`/`yyyy` tokens. | [date](./src/date/Readme.md) |
|
|
31
|
+
| `debounce` | Lodash-free debounce with `immediate` and `cancel`. | [debounce](./src/debounce/Readme.md) |
|
|
32
|
+
| `delay` | Resolve a promise after a set amount of time. | [delay](./src/delay/Readme.md) |
|
|
33
|
+
| `isDesktop`, `isMobile`, `hasMobileUserAgent` | Detect desktop vs mobile clients. | [device](./src/device/Readme.md) |
|
|
34
|
+
| `domReady` | Run a callback once the DOM is ready. | [dom-ready](./src/dom-ready/Readme.md) |
|
|
35
|
+
| `ErrorWithFields` | `Error` subclass carrying per-field messages. | [error](./src/error/Readme.md) |
|
|
36
|
+
| `decodeEntities` | Decode HTML entities in a string. | [escaping](./src/escaping/Readme.md) |
|
|
37
|
+
| `injectScript` | Inject an external script into the DOM once. | [injectScript](./src/injectScript/Readme.md) |
|
|
38
|
+
| `memoize` | Lodash-free memoization with an inspectable cache. | [memoize](./src/memoize/Readme.md) |
|
|
39
|
+
| `noop` | A no-operation function. | [noop](./src/noop/Readme.md) |
|
|
40
|
+
| `keysOf`, `entriesOf` | Type-safe `Object.keys`/`Object.entries`. | [objects](./src/objects/Readme.md) |
|
|
41
|
+
| `once` | Run a function a single time and cache the result. | [once](./src/once/Readme.md) |
|
|
42
|
+
| `generateRandomKey`, `add`/`removeLeading`/`TrailingSlash` | Random keys and slash management. | [string](./src/string/Readme.md) |
|
|
43
|
+
| `throttle` | Lodash-free throttle with `immediate` and `cancel`. | [throttle](./src/throttle/Readme.md) |
|
|
44
|
+
| `getUrlParam`, `addQueryArgs` | Read and append URL query arguments. | [url](./src/url/Readme.md) |
|
|
45
|
+
|
|
46
|
+
## Development
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
yarn install # install dependencies
|
|
50
|
+
yarn build # compile src -> dist via tsc
|
|
51
|
+
yarn watch # compile in watch mode
|
|
52
|
+
yarn validate-ts # type-check with no emit
|
|
53
|
+
yarn lint # ESLint (@lipemat/eslint-config)
|
|
54
|
+
yarn test # Jest (jsdom)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
See [AGENTS.md](./AGENTS.md) for conventions on adding and documenting helpers.
|
|
58
|
+
|
|
59
|
+
## License
|
|
60
|
+
|
|
61
|
+
MIT © Mat Lipe
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for manipulating CSS class names.
|
|
3
|
+
*
|
|
4
|
+
* @version 1.4.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Add or remove a className from an existing string of classes.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} existing - String of existing classes to work with.
|
|
10
|
+
* @param {string} className - Classname to add or remove
|
|
11
|
+
* @param {boolean} add - Either add or remove the class.
|
|
12
|
+
*
|
|
13
|
+
* @return {string} - The modified string of classes.
|
|
14
|
+
*/
|
|
15
|
+
export declare function classNameAmend(existing: string | undefined, className: string, add: boolean): string;
|
|
16
|
+
/**
|
|
17
|
+
* Sanitize a CSS class name provided by PHP CSS module.
|
|
18
|
+
*
|
|
19
|
+
* - Removes any leading or trailing whitespace.
|
|
20
|
+
* - Replaces any spaces with a single dot.
|
|
21
|
+
* - Adds a leading dot if not present.
|
|
22
|
+
*
|
|
23
|
+
* @param {string} className - The class name to sanitize.
|
|
24
|
+
*
|
|
25
|
+
* @return {string} - The sanitized class name.
|
|
26
|
+
*/
|
|
27
|
+
export declare function sanitizeCssModuleClass(className: string | null): string;
|
|
28
|
+
//# sourceMappingURL=classes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../src/classes/classes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAI,MAAM,CAWtG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAI,MAAM,CAUzE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for manipulating CSS class names.
|
|
3
|
+
*
|
|
4
|
+
* @version 1.4.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Add or remove a className from an existing string of classes.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} existing - String of existing classes to work with.
|
|
10
|
+
* @param {string} className - Classname to add or remove
|
|
11
|
+
* @param {boolean} add - Either add or remove the class.
|
|
12
|
+
*
|
|
13
|
+
* @return {string} - The modified string of classes.
|
|
14
|
+
*/
|
|
15
|
+
export function classNameAmend(existing, className, add) {
|
|
16
|
+
let classes = [];
|
|
17
|
+
if (undefined !== existing) {
|
|
18
|
+
classes = existing.split(' ');
|
|
19
|
+
}
|
|
20
|
+
if (add) {
|
|
21
|
+
classes.push(className);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
classes = classes.filter(_class => _class !== className);
|
|
25
|
+
}
|
|
26
|
+
return [...new Set(classes)].join(' ');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sanitize a CSS class name provided by PHP CSS module.
|
|
30
|
+
*
|
|
31
|
+
* - Removes any leading or trailing whitespace.
|
|
32
|
+
* - Replaces any spaces with a single dot.
|
|
33
|
+
* - Adds a leading dot if not present.
|
|
34
|
+
*
|
|
35
|
+
* @param {string} className - The class name to sanitize.
|
|
36
|
+
*
|
|
37
|
+
* @return {string} - The sanitized class name.
|
|
38
|
+
*/
|
|
39
|
+
export function sanitizeCssModuleClass(className) {
|
|
40
|
+
if (null === className) {
|
|
41
|
+
return '';
|
|
42
|
+
}
|
|
43
|
+
className = className.trim();
|
|
44
|
+
className = className.replace(/\s+/g, '.');
|
|
45
|
+
if (className.charAt(0) !== '.') {
|
|
46
|
+
className = '.' + className;
|
|
47
|
+
}
|
|
48
|
+
return className;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=classes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classes.js","sourceRoot":"","sources":["../../src/classes/classes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAE,QAA4B,EAAE,SAAiB,EAAE,GAAY;IAC5F,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAK,SAAS,KAAK,QAAQ,EAAG,CAAC;QAC9B,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAE,GAAG,CAAE,CAAC;IACjC,CAAC;IACD,IAAK,GAAG,EAAG,CAAC;QACX,OAAO,CAAC,IAAI,CAAE,SAAS,CAAE,CAAC;IAC3B,CAAC;SAAM,CAAC;QACP,OAAO,GAAG,OAAO,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAE,CAAC;IAC5D,CAAC;IACD,OAAO,CAAE,GAAG,IAAI,GAAG,CAAE,OAAO,CAAE,CAAE,CAAC,IAAI,CAAE,GAAG,CAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAE,SAAwB;IAC/D,IAAK,IAAI,KAAK,SAAS,EAAG,CAAC;QAC1B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAC7B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAE,MAAM,EAAE,GAAG,CAAE,CAAC;IAC7C,IAAK,SAAS,CAAC,MAAM,CAAE,CAAC,CAAE,KAAK,GAAG,EAAG,CAAC;QACrC,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color Utilities
|
|
3
|
+
*
|
|
4
|
+
* @version 1.2.0
|
|
5
|
+
*/
|
|
6
|
+
export declare function hexToRGB(hex: string, alpha?: number): string;
|
|
7
|
+
export declare function RGBToHex(rgb: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Get the lightness of a color.
|
|
10
|
+
*
|
|
11
|
+
* > 0.5 is light, <= 0.5 is dark.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getLightness(hexOrRGB: string): number;
|
|
14
|
+
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/colors/colors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,QAAQ,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAI,MAAM,CAU9D;AAGD,wBAAgB,QAAQ,CAAE,GAAG,EAAE,MAAM,GAAI,MAAM,CAa9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAE,QAAQ,EAAE,MAAM,GAAI,MAAM,CAGvD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color Utilities
|
|
3
|
+
*
|
|
4
|
+
* @version 1.2.0
|
|
5
|
+
*/
|
|
6
|
+
export function hexToRGB(hex, alpha) {
|
|
7
|
+
if ('#' !== hex[0]) {
|
|
8
|
+
return hex;
|
|
9
|
+
}
|
|
10
|
+
const { r, g, b } = convertHexToRGB(hex);
|
|
11
|
+
if (typeof alpha !== 'undefined') {
|
|
12
|
+
return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + alpha + ')';
|
|
13
|
+
}
|
|
14
|
+
return 'rgb(' + r + ', ' + g + ', ' + b + ')';
|
|
15
|
+
}
|
|
16
|
+
export function RGBToHex(rgb) {
|
|
17
|
+
if ('#' === rgb[0]) {
|
|
18
|
+
return rgb;
|
|
19
|
+
}
|
|
20
|
+
const colors = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
|
|
21
|
+
return (colors !== null) && 4 === colors.length
|
|
22
|
+
? '#' +
|
|
23
|
+
('0' + parseInt(colors[1], 10).toString(16)).slice(-2) +
|
|
24
|
+
('0' + parseInt(colors[2], 10).toString(16)).slice(-2) +
|
|
25
|
+
('0' + parseInt(colors[3], 10).toString(16)).slice(-2)
|
|
26
|
+
: '';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the lightness of a color.
|
|
30
|
+
*
|
|
31
|
+
* > 0.5 is light, <= 0.5 is dark.
|
|
32
|
+
*/
|
|
33
|
+
export function getLightness(hexOrRGB) {
|
|
34
|
+
const { r, g, b } = convertHexToRGB(hexOrRGB);
|
|
35
|
+
return Number((((0.2126 * r) + (0.7152 * g) + (0.0722 * b)) / 255).toFixed(2));
|
|
36
|
+
}
|
|
37
|
+
function convertHexToRGB(hex) {
|
|
38
|
+
// Already RGB, just convert to object.
|
|
39
|
+
if (hex.startsWith('rgb(')) {
|
|
40
|
+
const colors = hex.match(/^rgba?\(\s*(?<r>\d+)\s*,\s*(?<g>\d+)\s*,\s(?<b>\d+)(?:\s*,\s*[\d.]+)?\s*\)$/i);
|
|
41
|
+
const groups = colors?.groups;
|
|
42
|
+
return {
|
|
43
|
+
r: parseInt(groups?.r ?? '0', 10),
|
|
44
|
+
g: parseInt(groups?.g ?? '0', 10),
|
|
45
|
+
b: parseInt(groups?.b ?? '0', 10),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (4 === hex.length) {
|
|
49
|
+
let colors = hex.substring(1).split('');
|
|
50
|
+
colors = [
|
|
51
|
+
colors[0],
|
|
52
|
+
colors[0],
|
|
53
|
+
colors[1],
|
|
54
|
+
colors[1],
|
|
55
|
+
colors[2],
|
|
56
|
+
colors[2],
|
|
57
|
+
];
|
|
58
|
+
hex = colors.join('');
|
|
59
|
+
}
|
|
60
|
+
const r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
|
|
61
|
+
return { r, g, b };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/colors/colors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @version 1.0.8
|
|
3
|
+
*/
|
|
4
|
+
export type CsvData = Array<{
|
|
5
|
+
[column: string]: number | string;
|
|
6
|
+
} | Array<number | string>>;
|
|
7
|
+
/**
|
|
8
|
+
* Generate a csv file and trigger a download of a said file.
|
|
9
|
+
*
|
|
10
|
+
* @author Mat Lipe
|
|
11
|
+
* @since September, 2019
|
|
12
|
+
*
|
|
13
|
+
* @param {Array<Object>} data
|
|
14
|
+
* @param {string} fileName
|
|
15
|
+
*
|
|
16
|
+
* @return {void}
|
|
17
|
+
*/
|
|
18
|
+
export declare function csvExport(data: CsvData, fileName: string): void;
|
|
19
|
+
//# sourceMappingURL=csvExport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csvExport.d.ts","sourceRoot":"","sources":["../../src/csvExport/csvExport.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC;IAAE,CAAE,MAAM,EAAE,MAAM,GAAI,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAA;AAE7F;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAI,IAAI,CAiBjE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import DOMPurify from 'dompurify';
|
|
2
|
+
const { sanitize } = DOMPurify;
|
|
3
|
+
/**
|
|
4
|
+
* Generate a csv file and trigger a download of a said file.
|
|
5
|
+
*
|
|
6
|
+
* @author Mat Lipe
|
|
7
|
+
* @since September, 2019
|
|
8
|
+
*
|
|
9
|
+
* @param {Array<Object>} data
|
|
10
|
+
* @param {string} fileName
|
|
11
|
+
*
|
|
12
|
+
* @return {void}
|
|
13
|
+
*/
|
|
14
|
+
export function csvExport(data, fileName) {
|
|
15
|
+
const csv = convertArrayOfObjectsToCSV(data);
|
|
16
|
+
if (null === csv) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
|
|
20
|
+
const link = document.createElement('a');
|
|
21
|
+
if (link.download !== undefined) {
|
|
22
|
+
link.setAttribute('href', sanitize(URL.createObjectURL(blob)));
|
|
23
|
+
link.setAttribute('download', sanitize(fileName));
|
|
24
|
+
link.style.visibility = 'hidden';
|
|
25
|
+
document.body.appendChild(link);
|
|
26
|
+
link.click();
|
|
27
|
+
document.body.removeChild(link);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Convert an array of objects|array to a string representation of a csv file.
|
|
32
|
+
*
|
|
33
|
+
* @param data
|
|
34
|
+
*/
|
|
35
|
+
function convertArrayOfObjectsToCSV(data) {
|
|
36
|
+
if (null === data || (0 === data.length)) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const keys = Object.keys(data[0]);
|
|
40
|
+
let result = '';
|
|
41
|
+
if ('0' !== keys[0]) {
|
|
42
|
+
result += keys.join(',');
|
|
43
|
+
result += '\n';
|
|
44
|
+
}
|
|
45
|
+
data.forEach(item => {
|
|
46
|
+
keys.forEach((key, i) => {
|
|
47
|
+
if (i > 0) {
|
|
48
|
+
result += ',';
|
|
49
|
+
}
|
|
50
|
+
// @ts-expect-error
|
|
51
|
+
let innerValue = item[key]?.toString().replace(/"/g, '""') ?? '';
|
|
52
|
+
if (innerValue.search(/([",\n])/g) >= 0) {
|
|
53
|
+
innerValue = '"' + innerValue + '"';
|
|
54
|
+
}
|
|
55
|
+
result += decodeHtml(innerValue);
|
|
56
|
+
});
|
|
57
|
+
result += '\n';
|
|
58
|
+
});
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Convert any HTML special characters to their string version,
|
|
63
|
+
* so they may be encoded via `encodeURI`.
|
|
64
|
+
*
|
|
65
|
+
* @param {string} html
|
|
66
|
+
*
|
|
67
|
+
* @return {string}
|
|
68
|
+
*/
|
|
69
|
+
function decodeHtml(html) {
|
|
70
|
+
const txt = document.createElement('textarea');
|
|
71
|
+
txt.innerHTML = sanitize(html);
|
|
72
|
+
return txt.value;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=csvExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csvExport.js","sourceRoot":"","sources":["../../src/csvExport/csvExport.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,MAAM,EAAC,QAAQ,EAAC,GAAG,SAAS,CAAC;AAQ7B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAE,IAAa,EAAE,QAAgB;IACzD,MAAM,GAAG,GAAG,0BAA0B,CAAE,IAAI,CAAE,CAAC;IAC/C,IAAK,IAAI,KAAK,GAAG,EAAG,CAAC;QACpB,OAAO;IACR,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAE,CAAE,GAAG,CAAE,EAAE,EAAC,IAAI,EAAE,yBAAyB,EAAC,CAAE,CAAC;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAE,GAAG,CAAE,CAAC;IAE3C,IAAK,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAG,CAAC;QACnC,IAAI,CAAC,YAAY,CAAE,MAAM,EAAE,QAAQ,CAAE,GAAG,CAAC,eAAe,CAAE,IAAI,CAAE,CAAE,CAAE,CAAC;QACrE,IAAI,CAAC,YAAY,CAAE,UAAU,EAAE,QAAQ,CAAE,QAAQ,CAAE,CAAE,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAE,IAAI,CAAE,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAE,IAAI,CAAE,CAAC;IACnC,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAAE,IAAa;IACjD,IAAK,IAAI,KAAK,IAAI,IAAI,CAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAE,EAAG,CAAC;QAC9C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAa,MAAM,CAAC,IAAI,CAAE,IAAI,CAAE,CAAC,CAAE,CAAE,CAAC;IAEhD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAK,GAAG,KAAK,IAAI,CAAE,CAAC,CAAE,EAAG,CAAC;QACzB,MAAM,IAAI,IAAI,CAAC,IAAI,CAAE,GAAG,CAAE,CAAC;QAC3B,MAAM,IAAI,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,OAAO,CAAE,IAAI,CAAC,EAAE;QACpB,IAAI,CAAC,OAAO,CAAE,CAAE,GAAW,EAAE,CAAS,EAAG,EAAE;YAC1C,IAAK,CAAC,GAAG,CAAC,EAAG,CAAC;gBACb,MAAM,IAAI,GAAG,CAAC;YACf,CAAC;YACD,mBAAmB;YACnB,IAAI,UAAU,GAAG,IAAI,CAAE,GAAG,CAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAE,IAAI,EAAE,IAAI,CAAE,IAAI,EAAE,CAAC;YACrE,IAAK,UAAU,CAAC,MAAM,CAAE,WAAW,CAAE,IAAI,CAAC,EAAG,CAAC;gBAC7C,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC;YACrC,CAAC;YACD,MAAM,IAAI,UAAU,CAAE,UAAU,CAAE,CAAC;QACpC,CAAC,CAAE,CAAC;QACJ,MAAM,IAAI,IAAI,CAAC;IAChB,CAAC,CAAE,CAAC;IAEJ,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAAE,IAAY;IAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAE,UAAU,CAAE,CAAC;IACjD,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAE,IAAI,CAAE,CAAC;IACjC,OAAO,GAAG,CAAC,KAAK,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @version 1.1.0
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Given a Date object, return the date in the provided format.
|
|
6
|
+
* Limited to `mm`, `dd`, and `yyyy` formats.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export declare function getFormattedDate(date: Date, format?: string): string;
|
|
10
|
+
//# sourceMappingURL=date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/date/date.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAE,MAAqB,GAAI,MAAM,CAapF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @version 1.1.0
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Given a Date object, return the date in the provided format.
|
|
6
|
+
* Limited to `mm`, `dd`, and `yyyy` formats.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export function getFormattedDate(date, format = 'mm/dd/yyyy') {
|
|
10
|
+
const year = date.getFullYear();
|
|
11
|
+
let month = (1 + date.getMonth()).toString();
|
|
12
|
+
month = month.length > 1 ? month : '0' + month;
|
|
13
|
+
let day = date.getDate().toString();
|
|
14
|
+
day = day.length > 1 ? day : '0' + day;
|
|
15
|
+
return format
|
|
16
|
+
.replace('mm', month)
|
|
17
|
+
.replace('dd', day)
|
|
18
|
+
.replace('yyyy', year.toString());
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/date/date.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAE,IAAU,EAAE,SAAiB,YAAY;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEhC,IAAI,KAAK,GAAG,CAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAE,CAAC,QAAQ,EAAE,CAAC;IAC/C,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;IAE/C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;IAEvC,OAAO,MAAM;SACX,OAAO,CAAE,IAAI,EAAE,KAAK,CAAE;SACtB,OAAO,CAAE,IAAI,EAAE,GAAG,CAAE;SACpB,OAAO,CAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Callback } from '../once/once.js';
|
|
2
|
+
type Result<T extends Callback> = {
|
|
3
|
+
(...args: Parameters<T>): Promise<ReturnType<T>>;
|
|
4
|
+
immediate: (...args: Parameters<T>) => ReturnType<T>;
|
|
5
|
+
cancel: () => void;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Alternative to lodash debounce.
|
|
9
|
+
*
|
|
10
|
+
* - Additional support for `immediate` execution to bypass the wait time.
|
|
11
|
+
* - Returns a promise to allow waiting for a completion of the debounced function.
|
|
12
|
+
*
|
|
13
|
+
* @version 1.4.1
|
|
14
|
+
*/
|
|
15
|
+
export declare function debounce<T extends Callback>(fn: T, wait?: number): Result<T>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=debounce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../src/debounce/debounce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAS,MAAM,iBAAiB,CAAC;AAEtD,KAAK,MAAM,CAAC,CAAC,SAAS,QAAQ,IAAI;IACjC,CAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,SAAS,EAAE,CAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAGF;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAG,EAAE,EAAE,CAAC,EAAE,IAAI,SAAM,GAAI,MAAM,CAAC,CAAC,CAAC,CA6B3E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alternative to lodash debounce.
|
|
3
|
+
*
|
|
4
|
+
* - Additional support for `immediate` execution to bypass the wait time.
|
|
5
|
+
* - Returns a promise to allow waiting for a completion of the debounced function.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.4.1
|
|
8
|
+
*/
|
|
9
|
+
export function debounce(fn, wait = 300) {
|
|
10
|
+
let timer;
|
|
11
|
+
let promise = null;
|
|
12
|
+
let resolve;
|
|
13
|
+
const debounced = function (...args) {
|
|
14
|
+
clearTimeout(timer);
|
|
15
|
+
timer = setTimeout(() => {
|
|
16
|
+
resolve(fn(...args));
|
|
17
|
+
}, wait);
|
|
18
|
+
return promise ??= new Promise(res => {
|
|
19
|
+
resolve = res;
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
// Immediate execution method.
|
|
23
|
+
debounced.immediate = function (...args) {
|
|
24
|
+
clearTimeout(timer);
|
|
25
|
+
return fn(...args);
|
|
26
|
+
};
|
|
27
|
+
// Cancel method.
|
|
28
|
+
debounced.cancel = function () {
|
|
29
|
+
clearTimeout(timer);
|
|
30
|
+
promise = null;
|
|
31
|
+
};
|
|
32
|
+
return debounced;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=debounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../src/debounce/debounce.ts"],"names":[],"mappings":"AASA;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAsB,EAAK,EAAE,IAAI,GAAG,GAAG;IAC9D,IAAI,KAA8B,CAAC;IACnC,IAAI,OAAO,GAAkC,IAAI,CAAC;IAClD,IAAI,OAAyC,CAAC;IAE9C,MAAM,SAAS,GAAG,UAAU,GAAG,IAAmB;QACjD,YAAY,CAAE,KAAK,CAAE,CAAC;QACtB,KAAK,GAAG,UAAU,CAAE,GAAG,EAAE;YACxB,OAAO,CAAE,EAAE,CAAE,GAAG,IAAI,CAAE,CAAE,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAE,CAAC;QAEV,OAAO,OAAO,KAAK,IAAI,OAAO,CAAiB,GAAG,CAAC,EAAE;YACpD,OAAO,GAAG,GAAG,CAAC;QACf,CAAC,CAAE,CAAC;IACL,CAAC,CAAC;IAEF,8BAA8B;IAC9B,SAAS,CAAC,SAAS,GAAG,UAAU,GAAG,IAAmB;QACrD,YAAY,CAAE,KAAK,CAAE,CAAC;QACtB,OAAO,EAAE,CAAE,GAAG,IAAI,CAAE,CAAC;IACtB,CAAC,CAAC;IAEF,iBAAiB;IACjB,SAAS,CAAC,MAAM,GAAG;QAClB,YAAY,CAAE,KAAK,CAAE,CAAC;QACtB,OAAO,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,SAAsB,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delay a promise by a given amount of time.
|
|
3
|
+
*
|
|
4
|
+
* Used to provide enough time to show transitions while
|
|
5
|
+
* other operations are happening.
|
|
6
|
+
*
|
|
7
|
+
* @example ```ts
|
|
8
|
+
* const delayPromise = delay(200);
|
|
9
|
+
* // Do another action while waiting for the delay.
|
|
10
|
+
* await fetchPosts();
|
|
11
|
+
* await delayPromise;
|
|
12
|
+
*
|
|
13
|
+
* @param ms The amount of time to delay the promise by.
|
|
14
|
+
*
|
|
15
|
+
* @version 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export declare const delay: (ms: number) => Promise<void>;
|
|
18
|
+
//# sourceMappingURL=delay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delay.d.ts","sourceRoot":"","sources":["../../src/delay/delay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,KAAK,GAAK,IAAI,MAAM,KAAI,OAAO,CAAC,IAAI,CAEhD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delay a promise by a given amount of time.
|
|
3
|
+
*
|
|
4
|
+
* Used to provide enough time to show transitions while
|
|
5
|
+
* other operations are happening.
|
|
6
|
+
*
|
|
7
|
+
* @example ```ts
|
|
8
|
+
* const delayPromise = delay(200);
|
|
9
|
+
* // Do another action while waiting for the delay.
|
|
10
|
+
* await fetchPosts();
|
|
11
|
+
* await delayPromise;
|
|
12
|
+
*
|
|
13
|
+
* @param ms The amount of time to delay the promise by.
|
|
14
|
+
*
|
|
15
|
+
* @version 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export const delay = (ms) => {
|
|
18
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=delay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delay.js","sourceRoot":"","sources":["../../src/delay/delay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAE,EAAU,EAAkB,EAAE;IACpD,OAAO,IAAI,OAAO,CAAE,OAAO,CAAC,EAAE,CAAC,UAAU,CAAE,OAAO,EAAE,EAAE,CAAE,CAAE,CAAC;AAC5D,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects if the user is on a desktop or mobile device.
|
|
3
|
+
* - Desktop: Width greater than 800 px and not a mobile user agent.
|
|
4
|
+
* - Mobile: Width less than 800 px or a mobile user agent.
|
|
5
|
+
*
|
|
6
|
+
* @see useMobile - For keeping track of mobile state in React components.
|
|
7
|
+
*
|
|
8
|
+
* @version 2.0.2
|
|
9
|
+
*/
|
|
10
|
+
export declare function isDesktop(): boolean;
|
|
11
|
+
export declare function isMobile(): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Checks if the user agent is a mobile device.
|
|
14
|
+
* - Checks if an HTTPS `userAgentData` API is available and if the `mobile` property is true.
|
|
15
|
+
* - If not available, checks the `navigator.userAgent` string for common mobile identifiers.
|
|
16
|
+
*
|
|
17
|
+
* Modeled after the `wp_is_mobile()` function in WordPress but runs on the client side
|
|
18
|
+
* to support:
|
|
19
|
+
* 1. Edge page caching.
|
|
20
|
+
* 2. Changes in emulation of the user agent during development.
|
|
21
|
+
*
|
|
22
|
+
* @link https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData
|
|
23
|
+
* @link https://developer.wordpress.org/reference/functions/wp_is_mobile/
|
|
24
|
+
*/
|
|
25
|
+
export declare function hasMobileUserAgent(): boolean;
|
|
26
|
+
//# sourceMappingURL=device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/device/device.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAGH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const breakPoint = 800;
|
|
2
|
+
/**
|
|
3
|
+
* Detects if the user is on a desktop or mobile device.
|
|
4
|
+
* - Desktop: Width greater than 800 px and not a mobile user agent.
|
|
5
|
+
* - Mobile: Width less than 800 px or a mobile user agent.
|
|
6
|
+
*
|
|
7
|
+
* @see useMobile - For keeping track of mobile state in React components.
|
|
8
|
+
*
|
|
9
|
+
* @version 2.0.2
|
|
10
|
+
*/
|
|
11
|
+
export function isDesktop() {
|
|
12
|
+
return window.innerWidth > breakPoint && !hasMobileUserAgent();
|
|
13
|
+
}
|
|
14
|
+
export function isMobile() {
|
|
15
|
+
return window.innerWidth < breakPoint || hasMobileUserAgent();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Checks if the user agent is a mobile device.
|
|
19
|
+
* - Checks if an HTTPS `userAgentData` API is available and if the `mobile` property is true.
|
|
20
|
+
* - If not available, checks the `navigator.userAgent` string for common mobile identifiers.
|
|
21
|
+
*
|
|
22
|
+
* Modeled after the `wp_is_mobile()` function in WordPress but runs on the client side
|
|
23
|
+
* to support:
|
|
24
|
+
* 1. Edge page caching.
|
|
25
|
+
* 2. Changes in emulation of the user agent during development.
|
|
26
|
+
*
|
|
27
|
+
* @link https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData
|
|
28
|
+
* @link https://developer.wordpress.org/reference/functions/wp_is_mobile/
|
|
29
|
+
*/
|
|
30
|
+
export function hasMobileUserAgent() {
|
|
31
|
+
const ua = navigator.userAgent;
|
|
32
|
+
// @ts-expect-error TS2551 -- Not all browsers support userAgentData yet.
|
|
33
|
+
const uaData = navigator.userAgentData ?? undefined;
|
|
34
|
+
if ('undefined' !== typeof uaData && 'undefined' !== typeof uaData.mobile && Boolean(uaData.mobile)) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
else if ('undefined' === typeof ua || '' === ua) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return ['Mobile', 'Android', 'Silk/', 'Kindle', 'BlackBerry', 'Opera Mini', 'Opera Mobi'].some(agent => ua.includes(agent));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/device/device.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,GAAG,CAAC;AAGvB;;;;;;;;GAQG;AAGH,MAAM,UAAU,SAAS;IACxB,OAAO,MAAM,CAAC,UAAU,GAAG,UAAU,IAAI,CAAE,kBAAkB,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,QAAQ;IACvB,OAAO,MAAM,CAAC,UAAU,GAAG,UAAU,IAAI,kBAAkB,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB;IACjC,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC;IAC/B,yEAAyE;IACzE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC;IACpD,IAAK,WAAW,KAAK,OAAO,MAAM,IAAI,WAAW,KAAK,OAAO,MAAM,CAAC,MAAM,IAAI,OAAO,CAAE,MAAM,CAAC,MAAM,CAAE,EAAG,CAAC;QACzG,OAAO,IAAI,CAAC;IACb,CAAC;SAAM,IAAK,WAAW,KAAK,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAG,CAAC;QACrD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,CAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAE,CAAC,IAAI,CAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAE,CAAC;AACnI,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type EventCallback = (this: Document | void, ev?: Event) => void;
|
|
2
|
+
/**
|
|
3
|
+
* Fire a callback after the DOMContentLoaded event.
|
|
4
|
+
* If called after the document is loaded, callback will be executed immediately.
|
|
5
|
+
* Logic borrowed from `@wordpress/dom-ready`.
|
|
6
|
+
*
|
|
7
|
+
* @param {Function} callback Callback to execute.
|
|
8
|
+
*
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
export declare function domReady(callback: EventCallback): undefined;
|
|
12
|
+
//# sourceMappingURL=dom-ready.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-ready.d.ts","sourceRoot":"","sources":["../../src/dom-ready/dom-ready.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,CAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,KAAM,IAAI,CAAC;AAG1E;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAE,QAAQ,EAAE,aAAa,aAShD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fire a callback after the DOMContentLoaded event.
|
|
3
|
+
* If called after the document is loaded, callback will be executed immediately.
|
|
4
|
+
* Logic borrowed from `@wordpress/dom-ready`.
|
|
5
|
+
*
|
|
6
|
+
* @param {Function} callback Callback to execute.
|
|
7
|
+
*
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
export function domReady(callback) {
|
|
11
|
+
if ('undefined' === typeof document) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if ('complete' === document.readyState || 'interactive' === document.readyState) {
|
|
15
|
+
return void callback();
|
|
16
|
+
}
|
|
17
|
+
document.addEventListener('DOMContentLoaded', () => callback());
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=dom-ready.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-ready.js","sourceRoot":"","sources":["../../src/dom-ready/dom-ready.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAE,QAAuB;IAChD,IAAK,WAAW,KAAK,OAAO,QAAQ,EAAG,CAAC;QACvC,OAAO;IACR,CAAC;IACD,IAAK,UAAU,KAAK,QAAQ,CAAC,UAAU,IAAI,aAAa,KAAK,QAAQ,CAAC,UAAU,EAAG,CAAC;QACnF,OAAO,KAAK,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,gBAAgB,CAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAE,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ErrorField<T extends {
|
|
2
|
+
[field: string]: string;
|
|
3
|
+
}> {
|
|
4
|
+
code: keyof T;
|
|
5
|
+
data?: object | string | boolean | number;
|
|
6
|
+
message: string;
|
|
7
|
+
additional_errors?: Array<ErrorField<T>>;
|
|
8
|
+
}
|
|
9
|
+
export type Fields<T> = {
|
|
10
|
+
[field in keyof T]?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Use in place from the default Error handler to include
|
|
14
|
+
* information about form fields which caused the errors.
|
|
15
|
+
*
|
|
16
|
+
* Translates `WP_Error` responses from REST API into
|
|
17
|
+
* field name and their corresponding messages.
|
|
18
|
+
*
|
|
19
|
+
* @version 1.2.1
|
|
20
|
+
*/
|
|
21
|
+
export declare class ErrorWithFields<T extends {
|
|
22
|
+
[field: string]: string;
|
|
23
|
+
}> extends Error {
|
|
24
|
+
fields: Fields<T>;
|
|
25
|
+
constructor(error: ErrorField<T>);
|
|
26
|
+
translate(error: ErrorField<T>): ErrorField<T>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error/error.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS;IAAE,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAAA;CAAE;IAClE,IAAI,EAAE,MAAM,CAAC,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAEhB,iBAAiB,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;KACtB,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM;CAC3B,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,eAAe,CAAC,CAAC,SAAS;IAAE,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAAA;CAAE,CAAE,SAAQ,KAAK;IAC3E,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAEZ,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAejC,SAAS,CAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAI,UAAU,CAAC,CAAC,CAAC;CAShD"}
|