@teselagen/ui 0.10.22 → 0.10.24
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/DataTable/DisabledLoadingComponent.d.ts +1 -1
- package/DataTable/utils/tsvToHtmlTable.d.ts +1 -0
- package/index.cjs.js +17 -0
- package/index.es.js +17 -0
- package/index.umd.js +17 -0
- package/package.json +1 -1
- package/src/DataTable/DisabledLoadingComponent.js +1 -0
- package/src/DataTable/utils/handleCopyHelper.js +2 -0
- package/src/DataTable/utils/tsvToHtmlTable.js +23 -0
- package/src/DataTable/utils/tsvToHtmlTable.test.js +41 -0
- package/src/TgHtmlSelect/index.js +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function tsvToHtmlTable(tsv: any): string;
|
package/index.cjs.js
CHANGED
|
@@ -17211,10 +17211,25 @@ function requireCopyToClipboard() {
|
|
|
17211
17211
|
__name(requireCopyToClipboard, "requireCopyToClipboard");
|
|
17212
17212
|
var copyToClipboardExports = requireCopyToClipboard();
|
|
17213
17213
|
const copy = /* @__PURE__ */ getDefaultExportFromCjs(copyToClipboardExports);
|
|
17214
|
+
const HTML_ESCAPES = {
|
|
17215
|
+
"&": "&",
|
|
17216
|
+
"<": "<",
|
|
17217
|
+
">": ">",
|
|
17218
|
+
'"': """
|
|
17219
|
+
};
|
|
17220
|
+
const escapeHtml = /* @__PURE__ */ __name((value) => String(value != null ? value : "").replace(/[&<>"]/g, (c2) => HTML_ESCAPES[c2]), "escapeHtml");
|
|
17221
|
+
const tsvToHtmlTable = /* @__PURE__ */ __name((tsv) => {
|
|
17222
|
+
const rows = String(tsv != null ? tsv : "").split("\n").map((line) => {
|
|
17223
|
+
const cells = line.split(" ").map((v2) => `<td>${escapeHtml(v2)}</td>`).join("");
|
|
17224
|
+
return `<tr>${cells}</tr>`;
|
|
17225
|
+
}).join("");
|
|
17226
|
+
return `<table>${rows}</table>`;
|
|
17227
|
+
}, "tsvToHtmlTable");
|
|
17214
17228
|
const handleCopyHelper = /* @__PURE__ */ __name((stringToCopy, jsonToCopy, message) => {
|
|
17215
17229
|
!window.Cypress && copy(stringToCopy, {
|
|
17216
17230
|
onCopy: /* @__PURE__ */ __name((clipboardData) => {
|
|
17217
17231
|
clipboardData.setData("application/json", JSON.stringify(jsonToCopy));
|
|
17232
|
+
clipboardData.setData("text/html", tsvToHtmlTable(stringToCopy));
|
|
17218
17233
|
}, "onCopy"),
|
|
17219
17234
|
// keep this so that pasting into spreadsheets works.
|
|
17220
17235
|
format: "text/plain"
|
|
@@ -35098,6 +35113,7 @@ const DisplayOptions = /* @__PURE__ */ __name(({
|
|
|
35098
35113
|
}, "DisplayOptions");
|
|
35099
35114
|
const { LoadingComponent: LoadingComponent2 } = ReactTableDefaults;
|
|
35100
35115
|
function DisabledLoadingComponent({ disabled, loading, loadingText }) {
|
|
35116
|
+
if (!loading) return null;
|
|
35101
35117
|
return /* @__PURE__ */ React.createElement(
|
|
35102
35118
|
LoadingComponent2,
|
|
35103
35119
|
{
|
|
@@ -67669,6 +67685,7 @@ function AdvancedOptions({
|
|
|
67669
67685
|
__name(AdvancedOptions, "AdvancedOptions");
|
|
67670
67686
|
const TgHTMLSelect = /* @__PURE__ */ __name((_O) => {
|
|
67671
67687
|
var _P = _O, { disabled } = _P, rest = __objRest(_P, ["disabled"]);
|
|
67688
|
+
rest["data-test-value"] = rest.value;
|
|
67672
67689
|
if (disabled) {
|
|
67673
67690
|
const opt = rest.options.find((o2) => o2.value === rest.value);
|
|
67674
67691
|
return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, rest), { className: classNames("bp3-html-select", rest.className) }), opt.label);
|
package/index.es.js
CHANGED
|
@@ -17193,10 +17193,25 @@ function requireCopyToClipboard() {
|
|
|
17193
17193
|
__name(requireCopyToClipboard, "requireCopyToClipboard");
|
|
17194
17194
|
var copyToClipboardExports = requireCopyToClipboard();
|
|
17195
17195
|
const copy = /* @__PURE__ */ getDefaultExportFromCjs(copyToClipboardExports);
|
|
17196
|
+
const HTML_ESCAPES = {
|
|
17197
|
+
"&": "&",
|
|
17198
|
+
"<": "<",
|
|
17199
|
+
">": ">",
|
|
17200
|
+
'"': """
|
|
17201
|
+
};
|
|
17202
|
+
const escapeHtml = /* @__PURE__ */ __name((value) => String(value != null ? value : "").replace(/[&<>"]/g, (c2) => HTML_ESCAPES[c2]), "escapeHtml");
|
|
17203
|
+
const tsvToHtmlTable = /* @__PURE__ */ __name((tsv) => {
|
|
17204
|
+
const rows = String(tsv != null ? tsv : "").split("\n").map((line) => {
|
|
17205
|
+
const cells = line.split(" ").map((v2) => `<td>${escapeHtml(v2)}</td>`).join("");
|
|
17206
|
+
return `<tr>${cells}</tr>`;
|
|
17207
|
+
}).join("");
|
|
17208
|
+
return `<table>${rows}</table>`;
|
|
17209
|
+
}, "tsvToHtmlTable");
|
|
17196
17210
|
const handleCopyHelper = /* @__PURE__ */ __name((stringToCopy, jsonToCopy, message) => {
|
|
17197
17211
|
!window.Cypress && copy(stringToCopy, {
|
|
17198
17212
|
onCopy: /* @__PURE__ */ __name((clipboardData) => {
|
|
17199
17213
|
clipboardData.setData("application/json", JSON.stringify(jsonToCopy));
|
|
17214
|
+
clipboardData.setData("text/html", tsvToHtmlTable(stringToCopy));
|
|
17200
17215
|
}, "onCopy"),
|
|
17201
17216
|
// keep this so that pasting into spreadsheets works.
|
|
17202
17217
|
format: "text/plain"
|
|
@@ -35080,6 +35095,7 @@ const DisplayOptions = /* @__PURE__ */ __name(({
|
|
|
35080
35095
|
}, "DisplayOptions");
|
|
35081
35096
|
const { LoadingComponent: LoadingComponent2 } = ReactTableDefaults;
|
|
35082
35097
|
function DisabledLoadingComponent({ disabled, loading, loadingText }) {
|
|
35098
|
+
if (!loading) return null;
|
|
35083
35099
|
return /* @__PURE__ */ React__default.createElement(
|
|
35084
35100
|
LoadingComponent2,
|
|
35085
35101
|
{
|
|
@@ -67651,6 +67667,7 @@ function AdvancedOptions({
|
|
|
67651
67667
|
__name(AdvancedOptions, "AdvancedOptions");
|
|
67652
67668
|
const TgHTMLSelect = /* @__PURE__ */ __name((_O) => {
|
|
67653
67669
|
var _P = _O, { disabled } = _P, rest = __objRest(_P, ["disabled"]);
|
|
67670
|
+
rest["data-test-value"] = rest.value;
|
|
67654
67671
|
if (disabled) {
|
|
67655
67672
|
const opt = rest.options.find((o2) => o2.value === rest.value);
|
|
67656
67673
|
return /* @__PURE__ */ React__default.createElement("div", __spreadProps(__spreadValues({}, rest), { className: classNames("bp3-html-select", rest.className) }), opt.label);
|
package/index.umd.js
CHANGED
|
@@ -42656,10 +42656,25 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
42656
42656
|
__name(requireCopyToClipboard, "requireCopyToClipboard");
|
|
42657
42657
|
var copyToClipboardExports = requireCopyToClipboard();
|
|
42658
42658
|
const copy = /* @__PURE__ */ getDefaultExportFromCjs(copyToClipboardExports);
|
|
42659
|
+
const HTML_ESCAPES = {
|
|
42660
|
+
"&": "&",
|
|
42661
|
+
"<": "<",
|
|
42662
|
+
">": ">",
|
|
42663
|
+
'"': """
|
|
42664
|
+
};
|
|
42665
|
+
const escapeHtml = /* @__PURE__ */ __name((value) => String(value != null ? value : "").replace(/[&<>"]/g, (c2) => HTML_ESCAPES[c2]), "escapeHtml");
|
|
42666
|
+
const tsvToHtmlTable = /* @__PURE__ */ __name((tsv) => {
|
|
42667
|
+
const rows = String(tsv != null ? tsv : "").split("\n").map((line) => {
|
|
42668
|
+
const cells = line.split(" ").map((v2) => `<td>${escapeHtml(v2)}</td>`).join("");
|
|
42669
|
+
return `<tr>${cells}</tr>`;
|
|
42670
|
+
}).join("");
|
|
42671
|
+
return `<table>${rows}</table>`;
|
|
42672
|
+
}, "tsvToHtmlTable");
|
|
42659
42673
|
const handleCopyHelper = /* @__PURE__ */ __name((stringToCopy, jsonToCopy, message) => {
|
|
42660
42674
|
!window.Cypress && copy(stringToCopy, {
|
|
42661
42675
|
onCopy: /* @__PURE__ */ __name((clipboardData) => {
|
|
42662
42676
|
clipboardData.setData("application/json", JSON.stringify(jsonToCopy));
|
|
42677
|
+
clipboardData.setData("text/html", tsvToHtmlTable(stringToCopy));
|
|
42663
42678
|
}, "onCopy"),
|
|
42664
42679
|
// keep this so that pasting into spreadsheets works.
|
|
42665
42680
|
format: "text/plain"
|
|
@@ -62701,6 +62716,7 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
62701
62716
|
}, "DisplayOptions");
|
|
62702
62717
|
const { LoadingComponent } = ReactTableDefaults;
|
|
62703
62718
|
function DisabledLoadingComponent({ disabled, loading, loadingText }) {
|
|
62719
|
+
if (!loading) return null;
|
|
62704
62720
|
return /* @__PURE__ */ React.createElement(
|
|
62705
62721
|
LoadingComponent,
|
|
62706
62722
|
{
|
|
@@ -95104,6 +95120,7 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
95104
95120
|
__name(AdvancedOptions, "AdvancedOptions");
|
|
95105
95121
|
const TgHTMLSelect = /* @__PURE__ */ __name((_O) => {
|
|
95106
95122
|
var _P = _O, { disabled } = _P, rest = __objRest(_P, ["disabled"]);
|
|
95123
|
+
rest["data-test-value"] = rest.value;
|
|
95107
95124
|
if (disabled) {
|
|
95108
95125
|
const opt = rest.options.find((o2) => o2.value === rest.value);
|
|
95109
95126
|
return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, rest), { className: classNames$1("bp3-html-select", rest.className) }), opt.label);
|
package/package.json
CHANGED
|
@@ -3,6 +3,7 @@ import { ReactTableDefaults } from "@teselagen/react-table";
|
|
|
3
3
|
const { LoadingComponent } = ReactTableDefaults;
|
|
4
4
|
|
|
5
5
|
function DisabledLoadingComponent({ disabled, loading, loadingText }) {
|
|
6
|
+
if (!loading) return null;
|
|
6
7
|
return (
|
|
7
8
|
<LoadingComponent
|
|
8
9
|
className={disabled ? "disabled" : ""}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import copy from "copy-to-clipboard";
|
|
2
|
+
import { tsvToHtmlTable } from "./tsvToHtmlTable";
|
|
2
3
|
|
|
3
4
|
export const handleCopyHelper = (stringToCopy, jsonToCopy, message) => {
|
|
4
5
|
!window.Cypress &&
|
|
5
6
|
copy(stringToCopy, {
|
|
6
7
|
onCopy: clipboardData => {
|
|
7
8
|
clipboardData.setData("application/json", JSON.stringify(jsonToCopy));
|
|
9
|
+
clipboardData.setData("text/html", tsvToHtmlTable(stringToCopy));
|
|
8
10
|
},
|
|
9
11
|
// keep this so that pasting into spreadsheets works.
|
|
10
12
|
format: "text/plain"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const HTML_ESCAPES = {
|
|
2
|
+
"&": "&",
|
|
3
|
+
"<": "<",
|
|
4
|
+
">": ">",
|
|
5
|
+
'"': """
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const escapeHtml = value =>
|
|
9
|
+
String(value ?? "").replace(/[&<>"]/g, c => HTML_ESCAPES[c]);
|
|
10
|
+
|
|
11
|
+
export const tsvToHtmlTable = tsv => {
|
|
12
|
+
const rows = String(tsv ?? "")
|
|
13
|
+
.split("\n")
|
|
14
|
+
.map(line => {
|
|
15
|
+
const cells = line
|
|
16
|
+
.split("\t")
|
|
17
|
+
.map(v => `<td>${escapeHtml(v)}</td>`)
|
|
18
|
+
.join("");
|
|
19
|
+
return `<tr>${cells}</tr>`;
|
|
20
|
+
})
|
|
21
|
+
.join("");
|
|
22
|
+
return `<table>${rows}</table>`;
|
|
23
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { tsvToHtmlTable } from "./tsvToHtmlTable";
|
|
2
|
+
|
|
3
|
+
describe("tsvToHtmlTable", () => {
|
|
4
|
+
it("wraps a single row in a <table>", () => {
|
|
5
|
+
expect(tsvToHtmlTable("a\tb\tc")).toBe(
|
|
6
|
+
"<table><tr><td>a</td><td>b</td><td>c</td></tr></table>"
|
|
7
|
+
);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it("splits rows on newline and cells on tab", () => {
|
|
11
|
+
expect(tsvToHtmlTable("h1\th2\n1\t2\nA\tB")).toBe(
|
|
12
|
+
"<table>" +
|
|
13
|
+
"<tr><td>h1</td><td>h2</td></tr>" +
|
|
14
|
+
"<tr><td>1</td><td>2</td></tr>" +
|
|
15
|
+
"<tr><td>A</td><td>B</td></tr>" +
|
|
16
|
+
"</table>"
|
|
17
|
+
);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("escapes HTML-significant characters in cell content", () => {
|
|
21
|
+
expect(tsvToHtmlTable('<b>&"x"</b>\tnormal')).toBe(
|
|
22
|
+
"<table><tr><td><b>&"x"</b></td><td>normal</td></tr></table>"
|
|
23
|
+
);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("preserves empty cells and empty rows", () => {
|
|
27
|
+
expect(tsvToHtmlTable("a\t\tb\n\nc")).toBe(
|
|
28
|
+
"<table>" +
|
|
29
|
+
"<tr><td>a</td><td></td><td>b</td></tr>" +
|
|
30
|
+
"<tr><td></td></tr>" +
|
|
31
|
+
"<tr><td>c</td></tr>" +
|
|
32
|
+
"</table>"
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("handles empty/null input", () => {
|
|
37
|
+
expect(tsvToHtmlTable("")).toBe("<table><tr><td></td></tr></table>");
|
|
38
|
+
expect(tsvToHtmlTable(null)).toBe("<table><tr><td></td></tr></table>");
|
|
39
|
+
expect(tsvToHtmlTable(undefined)).toBe("<table><tr><td></td></tr></table>");
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -6,6 +6,7 @@ import classNames from "classnames";
|
|
|
6
6
|
// look like a regular html select with the selected option displayed
|
|
7
7
|
// (instead of greyed out and without the ability to have tooltips working)
|
|
8
8
|
const TgHTMLSelect = ({ disabled, ...rest }) => {
|
|
9
|
+
rest["data-test-value"] = rest.value;
|
|
9
10
|
if (disabled) {
|
|
10
11
|
const opt = rest.options.find(o => o.value === rest.value);
|
|
11
12
|
return (
|