blixify-ui-web 1.2.179 → 1.2.181

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.
Files changed (33) hide show
  1. package/lib/components/data/dataTemplate/index.d.ts.map +1 -1
  2. package/lib/components/data/dataTemplate/index.js +129 -104
  3. package/lib/components/data/dataTemplate/index.js.map +1 -1
  4. package/lib/components/data/dataTemplate/settingsModal.d.ts +3 -0
  5. package/lib/components/data/dataTemplate/settingsModal.d.ts.map +1 -1
  6. package/lib/components/data/dataTemplate/settingsModal.js +83 -9
  7. package/lib/components/data/dataTemplate/settingsModal.js.map +1 -1
  8. package/lib/components/data/flexFilter/index.d.ts +21 -2
  9. package/lib/components/data/flexFilter/index.d.ts.map +1 -1
  10. package/lib/components/data/flexFilter/index.js +180 -34
  11. package/lib/components/data/flexFilter/index.js.map +1 -1
  12. package/lib/components/data/flexFilter/model.d.ts +1 -1
  13. package/lib/components/data/flexFilter/model.d.ts.map +1 -1
  14. package/lib/components/display/newTable/index.d.ts.map +1 -1
  15. package/lib/components/display/newTable/index.js +44 -12
  16. package/lib/components/display/newTable/index.js.map +1 -1
  17. package/lib/components/input/markdown/index.d.ts.map +1 -1
  18. package/lib/components/input/markdown/index.js +65 -40
  19. package/lib/components/input/markdown/index.js.map +1 -1
  20. package/lib/components/input/markdown/tableControls.d.ts +24 -0
  21. package/lib/components/input/markdown/tableControls.d.ts.map +1 -0
  22. package/lib/components/input/markdown/tableControls.js +471 -0
  23. package/lib/components/input/markdown/tableControls.js.map +1 -0
  24. package/lib/components/input/markdown/tableMarkdown.d.ts +34 -0
  25. package/lib/components/input/markdown/tableMarkdown.d.ts.map +1 -0
  26. package/lib/components/input/markdown/tableMarkdown.js +182 -0
  27. package/lib/components/input/markdown/tableMarkdown.js.map +1 -0
  28. package/lib/components/input/markdown/textColor.d.ts +40 -0
  29. package/lib/components/input/markdown/textColor.d.ts.map +1 -0
  30. package/lib/components/input/markdown/textColor.js +285 -0
  31. package/lib/components/input/markdown/textColor.js.map +1 -0
  32. package/lib/tail.css +2 -2
  33. package/package.json +1 -1
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * How a table is written into the stored markdown.
4
+ *
5
+ * INFO: a GFM pipe table can only hold one line of inline text per cell. A
6
+ * table pasted from Notion carries lists, several lines and line breaks in its
7
+ * cells, and the old rule flattened all of that with textContent — the table
8
+ * looked right until the page was reopened. Worse, a table with no header row
9
+ * was written without the `| --- |` line, so markdown-it read it back as plain
10
+ * `| a | b |` text.
11
+ *
12
+ * So the table is written two ways:
13
+ * - simple (header row of th, body of td, one line of inline text per cell, no
14
+ * merged cells) stays a pipe table — every table written before this keeps
15
+ * serialising the same way
16
+ * - anything else is written as one line of html. markdown-it runs with
17
+ * html:true and the editor's table cells accept block content, so it reads
18
+ * back exactly as it was saved
19
+ */
20
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
21
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
22
+ if (ar || !(i in from)) {
23
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
24
+ ar[i] = from[i];
25
+ }
26
+ }
27
+ return to.concat(ar || Array.prototype.slice.call(from));
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.handleTableToMarkdown = exports.handleRenderRowMarker = exports.handleRenderCellMarker = exports.handleIsSimpleTable = exports.handleGetRowCells = exports.handleGetTableRows = void 0;
31
+ var handleChildElements = function (node) {
32
+ return Array.from(node.childNodes).filter(function (child) { return child.nodeType === 1; });
33
+ };
34
+ var handleIsTag = function (node) {
35
+ var tags = [];
36
+ for (var _i = 1; _i < arguments.length; _i++) {
37
+ tags[_i - 1] = arguments[_i];
38
+ }
39
+ return tags.includes(node.nodeName.toUpperCase());
40
+ };
41
+ /**
42
+ * INFO: walked by hand rather than through table.rows / querySelectorAll —
43
+ * those reach into a table nested in a cell, and turndown's node DOM does not
44
+ * implement the table collections at all
45
+ */
46
+ var handleGetTableRows = function (table) {
47
+ var rows = [];
48
+ handleChildElements(table).forEach(function (child) {
49
+ if (handleIsTag(child, "TR"))
50
+ rows.push(child);
51
+ else if (handleIsTag(child, "THEAD", "TBODY", "TFOOT"))
52
+ handleChildElements(child).forEach(function (row) {
53
+ if (handleIsTag(row, "TR"))
54
+ rows.push(row);
55
+ });
56
+ });
57
+ return rows;
58
+ };
59
+ exports.handleGetTableRows = handleGetTableRows;
60
+ var handleGetRowCells = function (row) {
61
+ return handleChildElements(row).filter(function (cell) { return handleIsTag(cell, "TH", "TD"); });
62
+ };
63
+ exports.handleGetRowCells = handleGetRowCells;
64
+ var handleIsMergedCell = function (cell) {
65
+ var _a, _b;
66
+ return Number((_a = cell.getAttribute("colspan")) !== null && _a !== void 0 ? _a : "1") > 1 ||
67
+ Number((_b = cell.getAttribute("rowspan")) !== null && _b !== void 0 ? _b : "1") > 1;
68
+ };
69
+ // INFO: one paragraph with no line break, or nothing at all, is what a pipe
70
+ // table cell can hold without losing anything
71
+ var handleIsSimpleCell = function (cell) {
72
+ if (handleIsMergedCell(cell))
73
+ return false;
74
+ var hasLooseText = Array.from(cell.childNodes).some(function (child) { var _a; return child.nodeType === 3 && ((_a = child.textContent) !== null && _a !== void 0 ? _a : "").trim() !== ""; });
75
+ if (hasLooseText)
76
+ return false;
77
+ var children = handleChildElements(cell);
78
+ if (children.length === 0)
79
+ return true;
80
+ if (children.length > 1)
81
+ return false;
82
+ var only = children[0];
83
+ return handleIsTag(only, "P") && only.querySelector("br") === null;
84
+ };
85
+ var handleIsSimpleTable = function (table) {
86
+ if (table.querySelector("table"))
87
+ return false;
88
+ var rows = (0, exports.handleGetTableRows)(table);
89
+ if (rows.length === 0)
90
+ return false;
91
+ var headerCells = (0, exports.handleGetRowCells)(rows[0]);
92
+ if (headerCells.length === 0)
93
+ return false;
94
+ // INFO: a pipe table always has a header, so a table without one would come
95
+ // back with its first row promoted to header — html keeps it as it was
96
+ if (!headerCells.every(function (cell) { return handleIsTag(cell, "TH"); }))
97
+ return false;
98
+ return rows.every(function (row, rowIndex) {
99
+ var cells = (0, exports.handleGetRowCells)(row);
100
+ if (cells.length !== headerCells.length)
101
+ return false;
102
+ return cells.every(function (cell) {
103
+ return (rowIndex === 0 || handleIsTag(cell, "TD")) && handleIsSimpleCell(cell);
104
+ });
105
+ });
106
+ };
107
+ exports.handleIsSimpleTable = handleIsSimpleTable;
108
+ /**
109
+ * INFO: turndown converts a table's cells before it reaches the table rule,
110
+ * so the cell and row rules only wrap what it already wrote in markers and the
111
+ * table rule reads them back. Converting each cell again with its own turndown
112
+ * call re-parsed the html of every cell, twice per keystroke — a 100-row table
113
+ * cost ~90ms per save. Control characters, because turndown never writes them
114
+ * and never escapes them.
115
+ */
116
+ var CELL_START = "\u0001";
117
+ var CELL_END = "\u0002";
118
+ var ROW_END = "\u0003";
119
+ var handleRenderCellMarker = function (content) {
120
+ return CELL_START +
121
+ content
122
+ .replace(/\s*\n+\s*/g, " ")
123
+ .trim()
124
+ // INFO: an unescaped pipe would split the cell and shift every column
125
+ // after it
126
+ .replace(/\|/g, "\\|") +
127
+ CELL_END;
128
+ };
129
+ exports.handleRenderCellMarker = handleRenderCellMarker;
130
+ var handleRenderRowMarker = function (content) { return content + ROW_END; };
131
+ exports.handleRenderRowMarker = handleRenderRowMarker;
132
+ // INFO: null when the markers do not describe the same grid as the DOM — the
133
+ // caller then falls back to html, which can never lose a cell
134
+ var handleRenderPipeTable = function (table, content) {
135
+ var domRows = (0, exports.handleGetTableRows)(table);
136
+ var rows = content
137
+ .split(ROW_END)
138
+ .map(function (row) {
139
+ return row
140
+ .split(CELL_END)
141
+ .filter(function (piece) { return piece.includes(CELL_START); })
142
+ .map(function (piece) { return piece.slice(piece.lastIndexOf(CELL_START) + 1); });
143
+ })
144
+ .filter(function (cells) { return cells.length > 0; });
145
+ var columnCount = (0, exports.handleGetRowCells)(domRows[0]).length;
146
+ if (rows.length !== domRows.length ||
147
+ rows.some(function (cells) { return cells.length !== columnCount; }))
148
+ return null;
149
+ var lines = rows.map(function (cells) { return "| " + cells.join(" | ") + " |"; });
150
+ var separator = "| " + Array.from({ length: columnCount }, function () { return "---"; }).join(" | ") + " |";
151
+ return __spreadArray([lines[0], separator], lines.slice(1), true).join("\n");
152
+ };
153
+ var handleRenderHtmlTable = function (table) {
154
+ var clone = table.cloneNode(true);
155
+ // INFO: the editor rebuilds its colgroup and min-width from the cells'
156
+ // colwidth on load, so they are noise in the stored body
157
+ clone.querySelectorAll("colgroup").forEach(function (each) { return each.remove(); });
158
+ clone.removeAttribute("style");
159
+ clone.querySelectorAll("th, td").forEach(function (cell) {
160
+ if (cell.getAttribute("colspan") === "1")
161
+ cell.removeAttribute("colspan");
162
+ if (cell.getAttribute("rowspan") === "1")
163
+ cell.removeAttribute("rowspan");
164
+ });
165
+ // INFO: markdown-it ends an html block at the first blank line, so the
166
+ // table must stay on one line. &#10; is still a newline inside a code block.
167
+ return clone.outerHTML.replace(/\r?\n/g, "&#10;");
168
+ };
169
+ /**
170
+ * `content` is what turndown wrote for the table's children — cells wrapped by
171
+ * handleRenderCellMarker, rows by handleRenderRowMarker.
172
+ */
173
+ var handleTableToMarkdown = function (table, content) {
174
+ if ((0, exports.handleGetTableRows)(table).length === 0)
175
+ return "";
176
+ var pipeTable = (0, exports.handleIsSimpleTable)(table)
177
+ ? handleRenderPipeTable(table, content)
178
+ : null;
179
+ return "\n\n" + (pipeTable !== null && pipeTable !== void 0 ? pipeTable : handleRenderHtmlTable(table)) + "\n\n";
180
+ };
181
+ exports.handleTableToMarkdown = handleTableToMarkdown;
182
+ //# sourceMappingURL=tableMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableMarkdown.js","sourceRoot":"","sources":["../../../../src/components/input/markdown/tableMarkdown.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;AAEH,IAAM,mBAAmB,GAAG,UAAC,IAAa;IACxC,OAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAChC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,QAAQ,KAAK,CAAC,EAApB,CAAoB,CACnB;AAFd,CAEc,CAAC;AAEjB,IAAM,WAAW,GAAG,UAAC,IAAa;IAAE,cAAiB;SAAjB,UAAiB,EAAjB,qBAAiB,EAAjB,IAAiB;QAAjB,6BAAiB;;IACnD,OAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAA1C,CAA0C,CAAC;AAE7C;;;;GAIG;AACI,IAAM,kBAAkB,GAAG,UAAC,KAAc;IAC/C,IAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,mBAAmB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;QACvC,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1C,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;YACpD,mBAAmB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;gBACrC,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAVW,QAAA,kBAAkB,sBAU7B;AAEK,IAAM,iBAAiB,GAAG,UAAC,GAAY;IAC5C,OAAA,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAA7B,CAA6B,CAAC;AAAxE,CAAwE,CAAC;AAD9D,QAAA,iBAAiB,qBAC6C;AAE3E,IAAM,kBAAkB,GAAG,UAAC,IAAa;;IACvC,OAAA,MAAM,CAAC,MAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mCAAI,GAAG,CAAC,GAAG,CAAC;QAC/C,MAAM,CAAC,MAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mCAAI,GAAG,CAAC,GAAG,CAAC,CAAA;CAAA,CAAC;AAElD,4EAA4E;AAC5E,8CAA8C;AAC9C,IAAM,kBAAkB,GAAG,UAAC,IAAa;IACvC,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACnD,UAAC,KAAK,YAAK,OAAA,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAA,KAAK,CAAC,WAAW,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA,EAAA,CAC3E,CAAC;IACF,IAAI,YAAY;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACrE,CAAC,CAAC;AAEK,IAAM,mBAAmB,GAAG,UAAC,KAAc;IAChD,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAM,IAAI,GAAG,IAAA,0BAAkB,EAAC,KAAK,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAM,WAAW,GAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAC,IAAI,IAAK,OAAA,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAvB,CAAuB,CAAC;QAAE,OAAO,KAAK,CAAC;IAExE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAC,GAAG,EAAE,QAAQ;QAC9B,IAAM,KAAK,GAAG,IAAA,yBAAiB,EAAC,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACtD,OAAO,KAAK,CAAC,KAAK,CAChB,UAAC,IAAI;YACH,OAAA,CAAC,QAAQ,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAAvE,CAAuE,CAC1E,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAlBW,QAAA,mBAAmB,uBAkB9B;AAEF;;;;;;;GAOG;AACH,IAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,IAAM,QAAQ,GAAG,QAAQ,CAAC;AAC1B,IAAM,OAAO,GAAG,QAAQ,CAAC;AAElB,IAAM,sBAAsB,GAAG,UAAC,OAAe;IACpD,OAAA,UAAU;QACV,OAAO;aACJ,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;aAC1B,IAAI,EAAE;YACP,sEAAsE;YACtE,WAAW;aACV,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;QACxB,QAAQ;AAPR,CAOQ,CAAC;AARE,QAAA,sBAAsB,0BAQxB;AAEJ,IAAM,qBAAqB,GAAG,UAAC,OAAe,IAAK,OAAA,OAAO,GAAG,OAAO,EAAjB,CAAiB,CAAC;AAA/D,QAAA,qBAAqB,yBAA0C;AAE5E,6EAA6E;AAC7E,8DAA8D;AAC9D,IAAM,qBAAqB,GAAG,UAAC,KAAc,EAAE,OAAe;IAC5D,IAAM,OAAO,GAAG,IAAA,0BAAkB,EAAC,KAAK,CAAC,CAAC;IAC1C,IAAM,IAAI,GAAG,OAAO;SACjB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,UAAC,GAAG;QACP,OAAA,GAAG;aACA,KAAK,CAAC,QAAQ,CAAC;aACf,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAA1B,CAA0B,CAAC;aAC7C,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAA9C,CAA8C,CAAC;IAHjE,CAGiE,CAClE;SACA,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,MAAM,GAAG,CAAC,EAAhB,CAAgB,CAAC,CAAC;IACvC,IAAM,WAAW,GAAG,IAAA,yBAAiB,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzD,IACE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;QAC9B,IAAI,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,MAAM,KAAK,WAAW,EAA5B,CAA4B,CAAC;QAElD,OAAO,IAAI,CAAC;IACd,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAA/B,CAA+B,CAAC,CAAC;IACnE,IAAM,SAAS,GACb,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC7E,OAAO,eAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,GAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,IAAM,qBAAqB,GAAG,UAAC,KAAc;IAC3C,IAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAY,CAAC;IAC/C,uEAAuE;IACvE,yDAAyD;IACzD,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,MAAM,EAAE,EAAb,CAAa,CAAC,CAAC;IACpE,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;QAC5C,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG;YAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG;YAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IACH,uEAAuE;IACvE,6EAA6E;IAC7E,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;GAGG;AACI,IAAM,qBAAqB,GAAG,UACnC,KAAc,EACd,OAAe;IAEf,IAAI,IAAA,0BAAkB,EAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtD,IAAM,SAAS,GAAG,IAAA,2BAAmB,EAAC,KAAK,CAAC;QAC1C,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC;IACT,OAAO,MAAM,GAAG,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;AACvE,CAAC,CAAC;AATW,QAAA,qBAAqB,yBAShC"}
@@ -0,0 +1,40 @@
1
+ import { Editor, Mark } from "@tiptap/core";
2
+ import TurndownService from "turndown";
3
+ import React from "react";
4
+ /**
5
+ * Text colour and highlight for the markdown editor, Notion style.
6
+ *
7
+ * INFO: markdown has no colour, so coloured text is stored as a small inline
8
+ * tag — `<span data-text-color="red" style="color: …">` and
9
+ * `<mark data-highlight="yellow" style="background-color: …; color: inherit">` — the way
10
+ * underline and superscript are already stored as <u> and <sup>. markdown-it
11
+ * renders the tag and still reads the markdown inside it.
12
+ *
13
+ * INFO: the editor reads back only the palette's names and writes out only its
14
+ * own CSS, so a note saved through the editor carries no other style through
15
+ * these tags. MarkdownStatic renders stored HTML as it is, so a note written
16
+ * by another route is not cleaned by this.
17
+ */
18
+ export interface MarkdownColor {
19
+ key: string;
20
+ label: string;
21
+ css: string;
22
+ }
23
+ export declare const MARKDOWN_TEXT_COLORS: MarkdownColor[];
24
+ export declare const MARKDOWN_HIGHLIGHT_COLORS: MarkdownColor[];
25
+ export declare const handleFindMarkdownColor: (colors: MarkdownColor[], key?: string | null) => MarkdownColor | undefined;
26
+ export declare const TextColor: Mark<any, any>;
27
+ export declare const TextHighlight: Mark<any, any>;
28
+ export declare const handleAddColorRules: (turndown: TurndownService) => void;
29
+ interface ColorPickerProps {
30
+ editor: Editor;
31
+ darkMode?: boolean;
32
+ variant: "toolbar" | "selection";
33
+ }
34
+ /**
35
+ * The "A" button and its palette: a row of text colours and a row of
36
+ * highlights, each with Default to take the colour off again.
37
+ */
38
+ export declare const ColorPicker: (props: ColorPickerProps) => React.JSX.Element;
39
+ export {};
40
+ //# sourceMappingURL=textColor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textColor.d.ts","sourceRoot":"","sources":["../../../../src/components/input/markdown/textColor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,eAAe,MAAM,UAAU,CAAC;AACvC,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAID,eAAO,MAAM,oBAAoB,EAAE,aAAa,EAU/C,CAAC;AAIF,eAAO,MAAM,yBAAyB,EAAE,aAAa,EAUpD,CAAC;AAEF,eAAO,MAAM,uBAAuB,WAC1B,aAAa,EAAE,QACjB,MAAM,GAAG,IAAI,8BACiC,CAAC;AAEvD,eAAO,MAAM,SAAS,gBAwCpB,CAAC;AAEH,eAAO,MAAM,aAAa,gBA2CxB,CAAC;AAIH,eAAO,MAAM,mBAAmB,aAAc,eAAe,SAmC5D,CAAC;AAEF,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAW,gBAAgB,sBAgNlD,CAAC"}
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ColorPicker = exports.handleAddColorRules = exports.TextHighlight = exports.TextColor = exports.handleFindMarkdownColor = exports.MARKDOWN_HIGHLIGHT_COLORS = exports.MARKDOWN_TEXT_COLORS = void 0;
27
+ var core_1 = require("@tiptap/core");
28
+ var react_1 = __importStar(require("react"));
29
+ var react_dom_1 = require("react-dom");
30
+ // INFO: 600 shades, picked for a white page; on the dark editor blue, purple
31
+ // and brown are faint, since the colour is stored inline and does not theme
32
+ exports.MARKDOWN_TEXT_COLORS = [
33
+ { key: "gray", label: "Gray", css: "#6b7280" },
34
+ { key: "brown", label: "Brown", css: "#a16207" },
35
+ { key: "orange", label: "Orange", css: "#ea580c" },
36
+ { key: "yellow", label: "Yellow", css: "#ca8a04" },
37
+ { key: "green", label: "Green", css: "#16a34a" },
38
+ { key: "blue", label: "Blue", css: "#2563eb" },
39
+ { key: "purple", label: "Purple", css: "#9333ea" },
40
+ { key: "pink", label: "Pink", css: "#db2777" },
41
+ { key: "red", label: "Red", css: "#dc2626" },
42
+ ];
43
+ // INFO: see-through, so the text keeps its own colour on light and dark pages;
44
+ // the tag also sets color: inherit, since a browser draws <mark> text black
45
+ exports.MARKDOWN_HIGHLIGHT_COLORS = [
46
+ { key: "gray", label: "Gray", css: "rgba(156, 163, 175, 0.35)" },
47
+ { key: "brown", label: "Brown", css: "rgba(180, 83, 9, 0.25)" },
48
+ { key: "orange", label: "Orange", css: "rgba(251, 146, 60, 0.35)" },
49
+ { key: "yellow", label: "Yellow", css: "rgba(250, 204, 21, 0.4)" },
50
+ { key: "green", label: "Green", css: "rgba(74, 222, 128, 0.35)" },
51
+ { key: "blue", label: "Blue", css: "rgba(96, 165, 250, 0.35)" },
52
+ { key: "purple", label: "Purple", css: "rgba(192, 132, 252, 0.35)" },
53
+ { key: "pink", label: "Pink", css: "rgba(244, 114, 182, 0.35)" },
54
+ { key: "red", label: "Red", css: "rgba(248, 113, 113, 0.35)" },
55
+ ];
56
+ var handleFindMarkdownColor = function (colors, key) { return colors.find(function (eachColor) { return eachColor.key === key; }); };
57
+ exports.handleFindMarkdownColor = handleFindMarkdownColor;
58
+ exports.TextColor = core_1.Mark.create({
59
+ name: "textColor",
60
+ addAttributes: function () {
61
+ return {
62
+ color: {
63
+ default: null,
64
+ parseHTML: function (element) {
65
+ var _a, _b;
66
+ return (_b = (_a = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_TEXT_COLORS, element.getAttribute("data-text-color"))) === null || _a === void 0 ? void 0 : _a.key) !== null && _b !== void 0 ? _b : null;
67
+ },
68
+ renderHTML: function (attributes) {
69
+ var color = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_TEXT_COLORS, attributes.color);
70
+ return color
71
+ ? { "data-text-color": color.key, style: "color: ".concat(color.css) }
72
+ : {};
73
+ },
74
+ },
75
+ };
76
+ },
77
+ parseHTML: function () {
78
+ return [
79
+ {
80
+ tag: "span[data-text-color]",
81
+ getAttrs: function (element) {
82
+ return (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_TEXT_COLORS, element.getAttribute("data-text-color"))
83
+ ? null
84
+ : false;
85
+ },
86
+ },
87
+ ];
88
+ },
89
+ renderHTML: function (_a) {
90
+ var HTMLAttributes = _a.HTMLAttributes;
91
+ return ["span", HTMLAttributes, 0];
92
+ },
93
+ });
94
+ exports.TextHighlight = core_1.Mark.create({
95
+ name: "textHighlight",
96
+ addAttributes: function () {
97
+ return {
98
+ color: {
99
+ default: null,
100
+ parseHTML: function (element) {
101
+ var _a, _b;
102
+ return (_b = (_a = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_HIGHLIGHT_COLORS, element.getAttribute("data-highlight"))) === null || _a === void 0 ? void 0 : _a.key) !== null && _b !== void 0 ? _b : null;
103
+ },
104
+ renderHTML: function (attributes) {
105
+ var color = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_HIGHLIGHT_COLORS, attributes.color);
106
+ return color
107
+ ? {
108
+ "data-highlight": color.key,
109
+ style: "background-color: ".concat(color.css, "; color: inherit"),
110
+ }
111
+ : {};
112
+ },
113
+ },
114
+ };
115
+ },
116
+ parseHTML: function () {
117
+ return [
118
+ {
119
+ tag: "mark[data-highlight]",
120
+ getAttrs: function (element) {
121
+ return (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_HIGHLIGHT_COLORS, element.getAttribute("data-highlight"))
122
+ ? null
123
+ : false;
124
+ },
125
+ },
126
+ ];
127
+ },
128
+ renderHTML: function (_a) {
129
+ var HTMLAttributes = _a.HTMLAttributes;
130
+ return ["mark", HTMLAttributes, 0];
131
+ },
132
+ });
133
+ // INFO: writes the tag back from the palette, never from the element's own
134
+ // style, and leaves a colour the palette does not know as plain text
135
+ var handleAddColorRules = function (turndown) {
136
+ turndown.addRule("textColor", {
137
+ filter: function (node) {
138
+ return node.nodeName === "SPAN" &&
139
+ !!(0, exports.handleFindMarkdownColor)(exports.MARKDOWN_TEXT_COLORS, node.getAttribute("data-text-color"));
140
+ },
141
+ replacement: function (content, node) {
142
+ var color = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_TEXT_COLORS, node.getAttribute("data-text-color"));
143
+ return content
144
+ ? "<span data-text-color=\"".concat(color.key, "\" style=\"color: ").concat(color.css, "\">").concat(content, "</span>")
145
+ : "";
146
+ },
147
+ });
148
+ turndown.addRule("textHighlight", {
149
+ filter: function (node) {
150
+ return node.nodeName === "MARK" &&
151
+ !!(0, exports.handleFindMarkdownColor)(exports.MARKDOWN_HIGHLIGHT_COLORS, node.getAttribute("data-highlight"));
152
+ },
153
+ replacement: function (content, node) {
154
+ var color = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_HIGHLIGHT_COLORS, node.getAttribute("data-highlight"));
155
+ return content
156
+ ? "<mark data-highlight=\"".concat(color.key, "\" style=\"background-color: ").concat(color.css, "; color: inherit\">").concat(content, "</mark>")
157
+ : "";
158
+ },
159
+ });
160
+ };
161
+ exports.handleAddColorRules = handleAddColorRules;
162
+ /**
163
+ * The "A" button and its palette: a row of text colours and a row of
164
+ * highlights, each with Default to take the colour off again.
165
+ */
166
+ var ColorPicker = function (props) {
167
+ var _a;
168
+ var editor = props.editor, darkMode = props.darkMode;
169
+ // 1. State
170
+ var _b = (0, react_1.useState)(null), panel = _b[0], setPanel = _b[1];
171
+ // 2. Refs
172
+ var buttonRef = (0, react_1.useRef)(null);
173
+ var panelRef = (0, react_1.useRef)(null);
174
+ // 3. Computed
175
+ var currentText = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_TEXT_COLORS, editor.getAttributes("textColor").color);
176
+ var currentHighlight = (0, exports.handleFindMarkdownColor)(exports.MARKDOWN_HIGHLIGHT_COLORS, editor.getAttributes("textHighlight").color);
177
+ var surface = darkMode
178
+ ? "bg-gray-800 border-gray-600 text-gray-200"
179
+ : "bg-white border-gray-200 text-gray-700";
180
+ var hover = darkMode ? "hover:bg-gray-700" : "hover:bg-gray-100";
181
+ var ring = darkMode ? "ring-gray-300" : "ring-gray-700";
182
+ // 4. Effects
183
+ (0, react_1.useEffect)(function () {
184
+ var _a, _b;
185
+ if (!panel)
186
+ return;
187
+ var handlePointerDown = function (event) {
188
+ var _a, _b;
189
+ var target = event.target;
190
+ if (((_a = panelRef.current) === null || _a === void 0 ? void 0 : _a.contains(target)) ||
191
+ ((_b = buttonRef.current) === null || _b === void 0 ? void 0 : _b.contains(target)))
192
+ return;
193
+ setPanel(null);
194
+ };
195
+ var handleKeyDown = function (event) {
196
+ if (event.key !== "Escape")
197
+ return;
198
+ // INFO: the palette closes alone, not a modal the editor sits in
199
+ event.preventDefault();
200
+ event.stopPropagation();
201
+ setPanel(null);
202
+ editor.commands.focus();
203
+ };
204
+ // INFO: placed once when it opens, so a scroll would leave it behind the
205
+ // button it belongs to
206
+ var handleClose = function () { return setPanel(null); };
207
+ window.addEventListener("mousedown", handlePointerDown);
208
+ window.addEventListener("keydown", handleKeyDown, true);
209
+ window.addEventListener("scroll", handleClose, true);
210
+ window.addEventListener("resize", handleClose);
211
+ // INFO: a keyboard user lands on the current colour, not back in the toolbar
212
+ (_b = (_a = panelRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('button[aria-pressed="true"]')) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true });
213
+ return function () {
214
+ window.removeEventListener("mousedown", handlePointerDown);
215
+ window.removeEventListener("keydown", handleKeyDown, true);
216
+ window.removeEventListener("scroll", handleClose, true);
217
+ window.removeEventListener("resize", handleClose);
218
+ };
219
+ }, [panel, editor]);
220
+ // 5. Handlers
221
+ // INFO: fixed to the viewport so a toolbar that scrolls sideways or clips
222
+ // its overflow does not cut the palette off
223
+ var handleTogglePanel = function () {
224
+ var _a;
225
+ if (panel)
226
+ return setPanel(null);
227
+ var rect = (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
228
+ if (!rect)
229
+ return;
230
+ setPanel({
231
+ top: rect.bottom + 6,
232
+ left: Math.max(8, Math.min(rect.left, window.innerWidth - 344)),
233
+ });
234
+ };
235
+ var handlePickText = function (key) {
236
+ var chain = editor.chain().focus();
237
+ if (key)
238
+ chain.setMark("textColor", { color: key }).run();
239
+ else
240
+ chain.unsetMark("textColor").run();
241
+ setPanel(null);
242
+ };
243
+ var handlePickHighlight = function (key) {
244
+ var chain = editor.chain().focus();
245
+ if (key)
246
+ chain.setMark("textHighlight", { color: key }).run();
247
+ else
248
+ chain.unsetMark("textHighlight").run();
249
+ setPanel(null);
250
+ };
251
+ // 6. Render
252
+ var renderSwatch = function (id, label, isCurrent, onPick, style) { return (react_1.default.createElement("button", { key: id, type: "button", title: label, "aria-label": label, "aria-pressed": isCurrent, "data-testid": "markdown-color-".concat(id), onClick: onPick, className: "flex h-7 w-7 items-center justify-center rounded border text-sm font-semibold ".concat(darkMode ? "border-gray-600" : "border-gray-200", " ").concat(hover, " ").concat(isCurrent ? "ring-2 ".concat(ring) : ""), style: style }, "A")); };
253
+ // INFO: drawn on the body — the selection toolbar is centred with a
254
+ // transform, and a transformed parent would carry a fixed panel off screen
255
+ var renderPanel = function () {
256
+ return panel &&
257
+ (0, react_dom_1.createPortal)(react_1.default.createElement("div", { ref: panelRef, "data-testid": "markdown-color-panel", className: "fixed z-[60] w-[min(21rem,calc(100vw-16px))] rounded-lg border p-2 shadow-lg ".concat(surface), style: { top: panel.top, left: panel.left },
258
+ // INFO: keeps the editor's selection while a swatch is pressed
259
+ onMouseDown: function (event) { return event.preventDefault(); } },
260
+ react_1.default.createElement("p", { className: "mb-1 text-xs font-medium text-gray-400" }, "Text"),
261
+ react_1.default.createElement("div", { className: "mb-2 flex flex-wrap gap-1" },
262
+ renderSwatch("text-default", "Default text", !currentText, function () { return handlePickText(); }, {}),
263
+ exports.MARKDOWN_TEXT_COLORS.map(function (eachColor) {
264
+ return renderSwatch("text-".concat(eachColor.key), "".concat(eachColor.label, " text"), (currentText === null || currentText === void 0 ? void 0 : currentText.key) === eachColor.key, function () { return handlePickText(eachColor.key); }, { color: eachColor.css });
265
+ })),
266
+ react_1.default.createElement("p", { className: "mb-1 text-xs font-medium text-gray-400" }, "Highlight"),
267
+ react_1.default.createElement("div", { className: "flex flex-wrap gap-1" },
268
+ renderSwatch("highlight-default", "No highlight", !currentHighlight, function () { return handlePickHighlight(); }, {}),
269
+ exports.MARKDOWN_HIGHLIGHT_COLORS.map(function (eachColor) {
270
+ return renderSwatch("highlight-".concat(eachColor.key), "".concat(eachColor.label, " highlight"), (currentHighlight === null || currentHighlight === void 0 ? void 0 : currentHighlight.key) === eachColor.key, function () { return handlePickHighlight(eachColor.key); }, { backgroundColor: eachColor.css });
271
+ }))), document.body);
272
+ };
273
+ // 7. Return
274
+ return (react_1.default.createElement(react_1.default.Fragment, null,
275
+ react_1.default.createElement("button", { ref: buttonRef, type: "button", title: "Colour", "aria-label": "Colour", "aria-expanded": !!panel, "data-testid": "markdown-color-button", onMouseDown: function (event) { return event.preventDefault(); }, onClick: handleTogglePanel, className: "flex flex-col items-center rounded ".concat(props.variant === "selection" ? "px-1.5 py-0.5" : "px-2 py-0.5", " text-sm font-semibold ").concat(darkMode
276
+ ? "text-gray-300 hover:bg-gray-700"
277
+ : "text-gray-700 ".concat(hover)), style: currentHighlight ? { backgroundColor: currentHighlight.css } : {} },
278
+ react_1.default.createElement("span", { style: currentText ? { color: currentText.css } : {} }, "A"),
279
+ react_1.default.createElement("span", { className: "h-0.5 w-3.5 rounded", style: {
280
+ backgroundColor: (_a = currentText === null || currentText === void 0 ? void 0 : currentText.css) !== null && _a !== void 0 ? _a : (darkMode ? "#d1d5db" : "#374151"),
281
+ } })),
282
+ renderPanel()));
283
+ };
284
+ exports.ColorPicker = ColorPicker;
285
+ //# sourceMappingURL=textColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textColor.js","sourceRoot":"","sources":["../../../../src/components/input/markdown/textColor.tsx"],"names":[],"mappings":"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"}