@uxf/core 4.2.0 → 4.4.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/core",
3
- "version": "4.2.0",
3
+ "version": "4.4.0",
4
4
  "description": "UXF Core",
5
5
  "author": "Petr Vejvoda <vejvoda@uxf.cz>",
6
6
  "homepage": "https://gitlab.com/uxf-npm/core#readme",
@@ -0,0 +1 @@
1
+ export declare function copyToClipboard(text: string): Promise<boolean>;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.copyToClipboard = void 0;
40
+ function copyToClipboardFallback(text) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var textArea;
43
+ return __generator(this, function (_a) {
44
+ textArea = document.createElement("textarea");
45
+ textArea.value = text;
46
+ // Avoid scrolling to bottom
47
+ textArea.style.top = "0";
48
+ textArea.style.left = "0";
49
+ textArea.style.position = "fixed";
50
+ document.body.appendChild(textArea);
51
+ textArea.focus();
52
+ textArea.select();
53
+ document.execCommand("copy");
54
+ document.body.removeChild(textArea);
55
+ return [2 /*return*/];
56
+ });
57
+ });
58
+ }
59
+ function copyToClipboard(text) {
60
+ return __awaiter(this, void 0, void 0, function () {
61
+ var copyFunction, e_1;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0:
65
+ copyFunction = typeof navigator.clipboard.writeText !== "function"
66
+ ? copyToClipboardFallback
67
+ : navigator.clipboard.writeText;
68
+ _a.label = 1;
69
+ case 1:
70
+ _a.trys.push([1, 3, , 4]);
71
+ return [4 /*yield*/, copyFunction(text)];
72
+ case 2:
73
+ _a.sent();
74
+ return [2 /*return*/, true];
75
+ case 3:
76
+ e_1 = _a.sent();
77
+ // eslint-disable-next-line
78
+ console.error(e_1);
79
+ return [2 /*return*/, false];
80
+ case 4: return [2 /*return*/];
81
+ }
82
+ });
83
+ });
84
+ }
85
+ exports.copyToClipboard = copyToClipboard;
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS10by1jbGlwYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY29weS10by1jbGlwYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBZSx1QkFBdUIsQ0FBQyxJQUFZOzs7O1lBQ3pDLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRXRCLDRCQUE0QjtZQUM1QixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUVsQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVwQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRWxCLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7Q0FDdkM7QUFFRCxTQUFzQixlQUFlLENBQUMsSUFBWTs7Ozs7O29CQUN4QyxZQUFZLEdBQ2QsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsS0FBSyxVQUFVO3dCQUMvQyxDQUFDLENBQUMsdUJBQXVCO3dCQUN6QixDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7Ozs7b0JBR3BDLHFCQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBQTs7b0JBQXhCLFNBQXdCLENBQUM7b0JBQ3pCLHNCQUFPLElBQUksRUFBQzs7O29CQUVaLDJCQUEyQjtvQkFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFDLENBQUMsQ0FBQztvQkFDakIsc0JBQU8sS0FBSyxFQUFDOzs7OztDQUVwQjtBQWRELDBDQWNDIn0=
@@ -0,0 +1,8 @@
1
+ import { ImageResponse } from "./resizer";
2
+ interface FileResponse {
3
+ uuid: string;
4
+ namespace?: string | null;
5
+ extension: string;
6
+ }
7
+ export declare function getFileUrl(file: FileResponse | ImageResponse): string;
8
+ export {};
package/utils/file.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFileUrl = void 0;
4
+ function getFileUrl(file) {
5
+ var ch1 = file.uuid.charAt(0);
6
+ var ch2 = file.uuid.charAt(1);
7
+ return file.namespace
8
+ ? "/upload/".concat(file.namespace, "/").concat(ch1, "/").concat(ch2, "/").concat(file.uuid, ".").concat(file.extension)
9
+ : "/upload/".concat(ch1, "/").concat(ch2, "/").concat(file.uuid, ".").concat(file.extension);
10
+ }
11
+ exports.getFileUrl = getFileUrl;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLFNBQWdCLFVBQVUsQ0FBQyxJQUFrQztJQUN6RCxJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoQyxPQUFPLElBQUksQ0FBQyxTQUFTO1FBQ2pCLENBQUMsQ0FBQyxrQkFBVyxJQUFJLENBQUMsU0FBUyxjQUFJLEdBQUcsY0FBSSxHQUFHLGNBQUksSUFBSSxDQUFDLElBQUksY0FBSSxJQUFJLENBQUMsU0FBUyxDQUFFO1FBQzFFLENBQUMsQ0FBQyxrQkFBVyxHQUFHLGNBQUksR0FBRyxjQUFJLElBQUksQ0FBQyxJQUFJLGNBQUksSUFBSSxDQUFDLFNBQVMsQ0FBRSxDQUFDO0FBQ2pFLENBQUM7QUFQRCxnQ0FPQyJ9
@@ -0,0 +1,20 @@
1
+ import { ImageSource, ResizerImageProps } from "./resizer";
2
+ import { FC } from "react";
3
+ export declare type Dimension = number | "auto";
4
+ export declare type Format = "avif" | "webp" | "original";
5
+ export declare type Quality = number | Record<Format, number>;
6
+ export declare function getSvgImgUrl(src: ImageSource): string | undefined;
7
+ export declare function getImgQuality(quality: Quality | undefined, format: Format): number | undefined;
8
+ export declare function getImgUniqueIdentifier(src: ImageSource): string | undefined;
9
+ export declare function getImgSrcSet(src?: ImageSource, width?: Dimension, height?: Dimension, options?: ResizerImageProps): string | undefined;
10
+ interface ImageSourcesProps {
11
+ breakpointIndex?: number;
12
+ breakpoints?: string[];
13
+ height: Dimension;
14
+ options?: Omit<ResizerImageProps, "quality" | "toFormat">;
15
+ quality?: Quality;
16
+ src: ImageSource;
17
+ width: Dimension;
18
+ }
19
+ export declare const ImgSources: FC<ImageSourcesProps>;
20
+ export {};
package/utils/image.js ADDED
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ImgSources = exports.getImgSrcSet = exports.getImgUniqueIdentifier = exports.getImgQuality = exports.getSvgImgUrl = void 0;
18
+ var file_1 = require("./file");
19
+ var resizer_1 = require("./resizer");
20
+ var react_1 = __importDefault(require("react"));
21
+ function toImageResponse(src) {
22
+ return typeof src !== "string" && "uuid" in src ? src : undefined;
23
+ }
24
+ function toStaticImageData(src) {
25
+ return typeof src !== "string" && "src" in src ? src : undefined;
26
+ }
27
+ function parseImgExtension(src) {
28
+ var ext = src.slice(src.lastIndexOf(".") + 1);
29
+ return ext.length > 1 ? ext : undefined;
30
+ }
31
+ function getSvgImgUrl(src) {
32
+ if (typeof src === "string" && parseImgExtension(src) === "svg") {
33
+ return src;
34
+ }
35
+ var imageResponse = toImageResponse(src);
36
+ if (imageResponse && parseImgExtension(imageResponse.extension) === "svg") {
37
+ return (0, file_1.getFileUrl)(imageResponse);
38
+ }
39
+ var staticImageData = toStaticImageData(src);
40
+ if (staticImageData && parseImgExtension(staticImageData.src) === "svg") {
41
+ return staticImageData.src;
42
+ }
43
+ return undefined;
44
+ }
45
+ exports.getSvgImgUrl = getSvgImgUrl;
46
+ function getImgQuality(quality, format) {
47
+ return typeof quality === "number" ? quality : quality ? quality[format] : undefined;
48
+ }
49
+ exports.getImgQuality = getImgQuality;
50
+ function getImgUniqueIdentifier(src) {
51
+ var _a, _b, _c;
52
+ return typeof src === "string" ? src : (_b = (_a = toImageResponse(src)) === null || _a === void 0 ? void 0 : _a.uuid) !== null && _b !== void 0 ? _b : (_c = toStaticImageData(src)) === null || _c === void 0 ? void 0 : _c.src;
53
+ }
54
+ exports.getImgUniqueIdentifier = getImgUniqueIdentifier;
55
+ var HIDPI_SIZES = [3, 2, 1];
56
+ function getImgSrcSet(src, width, height, options) {
57
+ var _a, _b;
58
+ if (options === void 0) { options = {}; }
59
+ if (!src) {
60
+ return undefined;
61
+ }
62
+ var toFormat;
63
+ var h = height !== null && height !== void 0 ? height : "auto";
64
+ var w = width !== null && width !== void 0 ? width : "auto";
65
+ if (typeof src === "string") {
66
+ toFormat = parseImgExtension(src);
67
+ }
68
+ var imageResponse = toImageResponse(src);
69
+ if (imageResponse) {
70
+ if (!imageResponse.uuid) {
71
+ return undefined;
72
+ }
73
+ toFormat = parseImgExtension(imageResponse.extension);
74
+ h = (_a = (h || imageResponse.height)) !== null && _a !== void 0 ? _a : "auto";
75
+ w = (_b = (w || imageResponse.width)) !== null && _b !== void 0 ? _b : "auto";
76
+ }
77
+ var staticImageData = toStaticImageData(src);
78
+ if (staticImageData) {
79
+ if (!staticImageData.src) {
80
+ return undefined;
81
+ }
82
+ toFormat = parseImgExtension(staticImageData.src);
83
+ h = h || staticImageData.height;
84
+ w = w || staticImageData.width;
85
+ }
86
+ if (typeof h === "number" || typeof w === "number") {
87
+ return HIDPI_SIZES.map(function (size) {
88
+ return (0, resizer_1.resizerImageUrl)(src, w * size, h * size, __assign({ toFormat: toFormat }, options)) + (size > 1 ? " ".concat(size, "x") : "");
89
+ }).join(", ");
90
+ }
91
+ return (0, resizer_1.resizerImageUrl)(src, w, h, __assign({ toFormat: toFormat }, options));
92
+ }
93
+ exports.getImgSrcSet = getImgSrcSet;
94
+ var ImgSources = function (props) {
95
+ var _a, _b, _c;
96
+ if (!props.src) {
97
+ return null;
98
+ }
99
+ var imageResponse = toImageResponse(props.src);
100
+ if (imageResponse && !imageResponse.uuid) {
101
+ return null;
102
+ }
103
+ var staticImageData = toStaticImageData(props.src);
104
+ if (staticImageData && !staticImageData.src) {
105
+ return null;
106
+ }
107
+ var media;
108
+ if (props.breakpoints && props.breakpointIndex) {
109
+ media = "(min-width: ".concat(props.breakpoints[props.breakpointIndex], ")");
110
+ }
111
+ return (react_1.default.createElement(react_1.default.Fragment, null,
112
+ react_1.default.createElement("source", { media: media, srcSet: getImgSrcSet(props.src, props.width, props.height, __assign(__assign({}, ((_a = props.options) !== null && _a !== void 0 ? _a : {})), { quality: getImgQuality(props.quality, "avif"), toFormat: "avif" })), type: "image/avif" }),
113
+ react_1.default.createElement("source", { media: media, srcSet: getImgSrcSet(props.src, props.width, props.height, __assign(__assign({}, ((_b = props.options) !== null && _b !== void 0 ? _b : {})), { quality: getImgQuality(props.quality, "webp"), toFormat: "webp" })), type: "image/webp" }),
114
+ react_1.default.createElement("source", { media: media, srcSet: getImgSrcSet(props.src, props.width, props.height, __assign(__assign({}, ((_c = props.options) !== null && _c !== void 0 ? _c : {})), { quality: getImgQuality(props.quality, "original") })) })));
115
+ };
116
+ exports.ImgSources = ImgSources;
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW1hZ2UudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQW9DO0FBQ3BDLHFDQUE0RztBQUM1RyxnREFBa0M7QUFNbEMsU0FBUyxlQUFlLENBQUMsR0FBUTtJQUM3QixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxHQUFRO0lBQy9CLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEdBQVc7SUFDbEMsSUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWhELE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsR0FBZ0I7SUFDekMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQzdELE9BQU8sR0FBRyxDQUFDO0tBQ2Q7SUFFRCxJQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsSUFBSSxhQUFhLElBQUksaUJBQWlCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUN2RSxPQUFPLElBQUEsaUJB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