@polishd/next 0.2.3-dev.2 → 0.2.3-dev.4
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/CHANGELOG.md +60 -0
- package/dist/ai/actions.d.ts +7 -1
- package/dist/ai/actions.d.ts.map +1 -1
- package/dist/ai/actions.js +10 -0
- package/dist/ai/actions.js.map +1 -1
- package/dist/ai/fix.d.ts +14 -0
- package/dist/ai/fix.d.ts.map +1 -0
- package/dist/ai/fix.js +254 -0
- package/dist/ai/fix.js.map +1 -0
- package/dist/ai/issues.d.ts +12 -0
- package/dist/ai/issues.d.ts.map +1 -1
- package/dist/ai/issues.js +16 -2
- package/dist/ai/issues.js.map +1 -1
- package/dist/ai/types.d.ts +49 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/dashboard/chrome.d.ts +15 -0
- package/dist/dashboard/chrome.d.ts.map +1 -1
- package/dist/dashboard/chrome.js +5 -1
- package/dist/dashboard/chrome.js.map +1 -1
- package/dist/dashboard/data.d.ts +18 -0
- package/dist/dashboard/data.d.ts.map +1 -0
- package/dist/dashboard/data.js +70 -0
- package/dist/dashboard/data.js.map +1 -0
- package/dist/dashboard/index.d.ts +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +211 -85
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/issue-list.d.ts +11 -0
- package/dist/dashboard/issue-list.d.ts.map +1 -0
- package/dist/dashboard/issue-list.js +159 -0
- package/dist/dashboard/issue-list.js.map +1 -0
- package/dist/dashboard/issues.d.ts +31 -2
- package/dist/dashboard/issues.d.ts.map +1 -1
- package/dist/dashboard/issues.js +4 -71
- package/dist/dashboard/issues.js.map +1 -1
- package/dist/dashboard/markdown-parse.d.ts +87 -0
- package/dist/dashboard/markdown-parse.d.ts.map +1 -0
- package/dist/dashboard/markdown-parse.js +244 -0
- package/dist/dashboard/markdown-parse.js.map +1 -0
- package/dist/dashboard/markdown.d.ts +5 -0
- package/dist/dashboard/markdown.d.ts.map +1 -0
- package/dist/dashboard/markdown.js +65 -0
- package/dist/dashboard/markdown.js.map +1 -0
- package/dist/dashboard.css +74 -18
- package/package.json +1 -1
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polishd — a small GitHub-flavored-markdown parser (pure, no dependencies).
|
|
3
|
+
*
|
|
4
|
+
* The Issues tab shows issue bodies that are real markdown: polishd writes
|
|
5
|
+
* them (`issueBody` in `src/ai/issues.ts` emits headings, bold, code, link
|
|
6
|
+
* lists, blockquotes) and humans edit them on GitHub afterwards. Rendering
|
|
7
|
+
* that as a raw `<pre>` wastes the structure — but the package's rule is zero
|
|
8
|
+
* runtime dependencies, so `react-markdown` and friends are off the table.
|
|
9
|
+
*
|
|
10
|
+
* This module is the answer: a bounded, hand-written parser for the subset of
|
|
11
|
+
* GFM that actually appears in issues — headings, paragraphs, fenced code,
|
|
12
|
+
* blockquotes, ordered/unordered/task lists (nested), tables, rules, and the
|
|
13
|
+
* inline set (bold, italic, strikethrough, code, links, images, autolinks).
|
|
14
|
+
* One GitHub-ism matters: inside a paragraph a single newline is a hard
|
|
15
|
+
* break, the way issue comments render. Anything the parser doesn't
|
|
16
|
+
* recognize degrades to plain paragraph text — never a crash, never dropped
|
|
17
|
+
* content.
|
|
18
|
+
*
|
|
19
|
+
* Parsing is kept apart from rendering (`markdown.tsx`) so the grammar can be
|
|
20
|
+
* pinned down by plain node:test files with no React in sight.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Ordered by precedence for ties at the same index: code spans protect their
|
|
24
|
+
* contents from everything else, images must beat links (shared `[` syntax),
|
|
25
|
+
* and `**strong**` must beat `*em*`.
|
|
26
|
+
*/
|
|
27
|
+
const INLINE_RULES = [
|
|
28
|
+
{ re: /`([^`\n]+)`/, make: (m) => ({ kind: "code", text: m[1] }) },
|
|
29
|
+
{
|
|
30
|
+
re: /!\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/,
|
|
31
|
+
make: (m) => ({ kind: "image", alt: m[1], src: m[2] }),
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
re: /\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/,
|
|
35
|
+
make: (m) => ({ kind: "link", href: m[2], children: parseInline(m[1]) }),
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
re: /\*\*((?:[^*\n]|\*(?!\*))+)\*\*/,
|
|
39
|
+
make: (m) => ({ kind: "strong", children: parseInline(m[1]) }),
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
re: /__((?:[^_\n]|_(?!_))+)__/,
|
|
43
|
+
make: (m) => ({ kind: "strong", children: parseInline(m[1]) }),
|
|
44
|
+
},
|
|
45
|
+
{ re: /\*([^*\n]+)\*/, make: (m) => ({ kind: "em", children: parseInline(m[1]) }) },
|
|
46
|
+
{
|
|
47
|
+
re: /(?<![A-Za-z0-9_])_([^_\n]+)_(?![A-Za-z0-9_])/,
|
|
48
|
+
make: (m) => ({ kind: "em", children: parseInline(m[1]) }),
|
|
49
|
+
},
|
|
50
|
+
{ re: /~~([^~\n]+)~~/, make: (m) => ({ kind: "del", children: parseInline(m[1]) }) },
|
|
51
|
+
{
|
|
52
|
+
re: /https?:\/\/[^\s<>]*[^\s<>.,;:!?)'"`]/,
|
|
53
|
+
make: (m) => ({ kind: "link", href: m[0], children: [{ kind: "text", text: m[0] }] }),
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
/** Plain text, with each newline becoming a hard break (GitHub issue style). */
|
|
57
|
+
function pushText(out, text) {
|
|
58
|
+
if (!text)
|
|
59
|
+
return;
|
|
60
|
+
const parts = text.split("\n");
|
|
61
|
+
parts.forEach((part, i) => {
|
|
62
|
+
if (i > 0)
|
|
63
|
+
out.push({ kind: "break" });
|
|
64
|
+
if (part)
|
|
65
|
+
out.push({ kind: "text", text: part });
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** Parse one run of inline markdown into a token list. */
|
|
69
|
+
export function parseInline(text) {
|
|
70
|
+
const out = [];
|
|
71
|
+
let rest = text;
|
|
72
|
+
while (rest.length > 0) {
|
|
73
|
+
let best = null;
|
|
74
|
+
for (const rule of INLINE_RULES) {
|
|
75
|
+
const m = rule.re.exec(rest);
|
|
76
|
+
if (m && (best === null || m.index < best.index)) {
|
|
77
|
+
best = { index: m.index, length: m[0].length, node: rule.make(m) };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (!best) {
|
|
81
|
+
pushText(out, rest);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
pushText(out, rest.slice(0, best.index));
|
|
85
|
+
out.push(best.node);
|
|
86
|
+
rest = rest.slice(best.index + best.length);
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
// ── Block parsing ────────────────────────────────────────────────────────────
|
|
91
|
+
const HEADING_RE = /^(#{1,6})\s+(.*?)\s*#*\s*$/;
|
|
92
|
+
const RULE_RE = /^ {0,3}(?:-{3,}|\*{3,}|_{3,})\s*$/;
|
|
93
|
+
const FENCE_RE = /^ {0,3}(```|~~~)\s*(\S*)\s*$/;
|
|
94
|
+
const QUOTE_RE = /^ {0,3}>\s?(.*)$/;
|
|
95
|
+
const LIST_RE = /^(\s*)(?:([-*+])|(\d{1,9})[.)])\s+(.*)$/;
|
|
96
|
+
/** The `| --- | :--: |` row that promotes the line above it to a table header. */
|
|
97
|
+
const TABLE_SEP_RE = /^\s*\|?[\s:|-]*-[\s:|-]*\|?\s*$/;
|
|
98
|
+
function isBlank(line) {
|
|
99
|
+
return line.trim().length === 0;
|
|
100
|
+
}
|
|
101
|
+
/** Does this line begin a block of its own, ending any open paragraph? */
|
|
102
|
+
function startsBlock(line) {
|
|
103
|
+
return (HEADING_RE.test(line) ||
|
|
104
|
+
RULE_RE.test(line) ||
|
|
105
|
+
FENCE_RE.test(line) ||
|
|
106
|
+
QUOTE_RE.test(line) ||
|
|
107
|
+
LIST_RE.test(line));
|
|
108
|
+
}
|
|
109
|
+
/** `| a | b |` → ["a", "b"]. Outer pipes optional, cells trimmed. */
|
|
110
|
+
function splitCells(line) {
|
|
111
|
+
let t = line.trim();
|
|
112
|
+
if (t.startsWith("|"))
|
|
113
|
+
t = t.slice(1);
|
|
114
|
+
if (t.endsWith("|"))
|
|
115
|
+
t = t.slice(0, -1);
|
|
116
|
+
return t.split("|").map((c) => c.trim());
|
|
117
|
+
}
|
|
118
|
+
/** Fold rows into (possibly nested) items — deeper indent means a sublist. */
|
|
119
|
+
function buildList(rows, pos, level) {
|
|
120
|
+
const ordered = rows[pos.i].ordered;
|
|
121
|
+
const items = [];
|
|
122
|
+
while (pos.i < rows.length) {
|
|
123
|
+
const row = rows[pos.i];
|
|
124
|
+
if (row.indent < level)
|
|
125
|
+
break;
|
|
126
|
+
if (row.indent > level) {
|
|
127
|
+
const sub = buildList(rows, pos, row.indent);
|
|
128
|
+
if (items.length > 0)
|
|
129
|
+
items[items.length - 1].sub = sub;
|
|
130
|
+
else
|
|
131
|
+
items.push({ children: [], sub });
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
pos.i += 1;
|
|
135
|
+
let text = row.text;
|
|
136
|
+
let checked;
|
|
137
|
+
const task = text.match(/^\[([ xX])\]\s+(.*)$/);
|
|
138
|
+
if (task) {
|
|
139
|
+
checked = task[1] !== " ";
|
|
140
|
+
text = task[2];
|
|
141
|
+
}
|
|
142
|
+
items.push({ checked, children: parseInline(text) });
|
|
143
|
+
}
|
|
144
|
+
return { ordered, items };
|
|
145
|
+
}
|
|
146
|
+
/** Parse a whole markdown document into blocks. */
|
|
147
|
+
export function parseMarkdown(md) {
|
|
148
|
+
const lines = md.replace(/\r\n?/g, "\n").split("\n");
|
|
149
|
+
const blocks = [];
|
|
150
|
+
let i = 0;
|
|
151
|
+
while (i < lines.length) {
|
|
152
|
+
const line = lines[i];
|
|
153
|
+
if (isBlank(line)) {
|
|
154
|
+
i += 1;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// Fenced code — verbatim until the closing fence (or the end of input).
|
|
158
|
+
const fence = line.match(FENCE_RE);
|
|
159
|
+
if (fence) {
|
|
160
|
+
const marker = fence[1];
|
|
161
|
+
const body = [];
|
|
162
|
+
i += 1;
|
|
163
|
+
while (i < lines.length && !lines[i].trim().startsWith(marker)) {
|
|
164
|
+
body.push(lines[i]);
|
|
165
|
+
i += 1;
|
|
166
|
+
}
|
|
167
|
+
i += 1; // past the closing fence, harmless at end of input
|
|
168
|
+
blocks.push({ kind: "codeBlock", lang: fence[2], text: body.join("\n") });
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const heading = line.match(HEADING_RE);
|
|
172
|
+
if (heading) {
|
|
173
|
+
blocks.push({
|
|
174
|
+
kind: "heading",
|
|
175
|
+
level: heading[1].length,
|
|
176
|
+
children: parseInline(heading[2]),
|
|
177
|
+
});
|
|
178
|
+
i += 1;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (RULE_RE.test(line)) {
|
|
182
|
+
blocks.push({ kind: "rule" });
|
|
183
|
+
i += 1;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
// Blockquote — strip the markers and parse the inside as its own document.
|
|
187
|
+
if (QUOTE_RE.test(line)) {
|
|
188
|
+
const inner = [];
|
|
189
|
+
while (i < lines.length && QUOTE_RE.test(lines[i])) {
|
|
190
|
+
inner.push(lines[i].match(QUOTE_RE)[1]);
|
|
191
|
+
i += 1;
|
|
192
|
+
}
|
|
193
|
+
blocks.push({ kind: "quote", children: parseMarkdown(inner.join("\n")) });
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
// Table — a pipe row whose next line is the `---|---` separator.
|
|
197
|
+
if (line.includes("|") && i + 1 < lines.length && TABLE_SEP_RE.test(lines[i + 1]) && lines[i + 1].includes("|")) {
|
|
198
|
+
const header = splitCells(line).map(parseInline);
|
|
199
|
+
i += 2;
|
|
200
|
+
const rows = [];
|
|
201
|
+
while (i < lines.length && lines[i].includes("|") && !isBlank(lines[i])) {
|
|
202
|
+
rows.push(splitCells(lines[i]).map(parseInline));
|
|
203
|
+
i += 1;
|
|
204
|
+
}
|
|
205
|
+
blocks.push({ kind: "table", header, rows });
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
// List — collect the run of list lines (plus indented continuations),
|
|
209
|
+
// then fold it into a tree by indent.
|
|
210
|
+
if (LIST_RE.test(line)) {
|
|
211
|
+
const rows = [];
|
|
212
|
+
while (i < lines.length) {
|
|
213
|
+
const m = lines[i].match(LIST_RE);
|
|
214
|
+
if (m) {
|
|
215
|
+
rows.push({ indent: m[1].length, ordered: m[3] !== undefined, text: m[4] });
|
|
216
|
+
i += 1;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
// A deeper-indented plain line continues the previous item's text.
|
|
220
|
+
if (rows.length > 0 && /^\s{2,}\S/.test(lines[i])) {
|
|
221
|
+
rows[rows.length - 1].text += `\n${lines[i].trim()}`;
|
|
222
|
+
i += 1;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
blocks.push({ kind: "list", list: buildList(rows, { i: 0 }, rows[0].indent) });
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
// Paragraph — everything up to a blank line or the start of another block.
|
|
231
|
+
const para = [line];
|
|
232
|
+
i += 1;
|
|
233
|
+
while (i < lines.length && !isBlank(lines[i]) && !startsBlock(lines[i])) {
|
|
234
|
+
// A `---|---` line would turn the next line into a table header, not us.
|
|
235
|
+
if (lines[i].includes("|") && i + 1 < lines.length && TABLE_SEP_RE.test(lines[i + 1]))
|
|
236
|
+
break;
|
|
237
|
+
para.push(lines[i]);
|
|
238
|
+
i += 1;
|
|
239
|
+
}
|
|
240
|
+
blocks.push({ kind: "paragraph", children: parseInline(para.join("\n")) });
|
|
241
|
+
}
|
|
242
|
+
return blocks;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=markdown-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-parse.js","sourceRoot":"","sources":["../../src/dashboard/markdown-parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/dashboard/markdown.tsx"],"names":[],"mappings":"AA4LA,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAMlD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { parseMarkdown, } from "./markdown-parse";
|
|
3
|
+
const codeSpan = "rounded bg-[#1a1a1a] px-1 py-0.5 font-mono text-[0.92em] text-[#ddd]";
|
|
4
|
+
function renderInline(nodes) {
|
|
5
|
+
return nodes.map((node, i) => {
|
|
6
|
+
switch (node.kind) {
|
|
7
|
+
case "text":
|
|
8
|
+
return node.text;
|
|
9
|
+
case "break":
|
|
10
|
+
return _jsx("br", {}, i);
|
|
11
|
+
case "code":
|
|
12
|
+
return (_jsx("code", { className: codeSpan, children: node.text }, i));
|
|
13
|
+
case "strong":
|
|
14
|
+
return (_jsx("strong", { className: "font-semibold text-[#ddd]", children: renderInline(node.children) }, i));
|
|
15
|
+
case "em":
|
|
16
|
+
return _jsx("em", { children: renderInline(node.children) }, i);
|
|
17
|
+
case "del":
|
|
18
|
+
return (_jsx("del", { className: "text-[#777]", children: renderInline(node.children) }, i));
|
|
19
|
+
case "link":
|
|
20
|
+
return (_jsx("a", { href: node.href, target: "_blank", rel: "noreferrer noopener", className: "break-words text-[#8ab4f8] hover:underline", children: renderInline(node.children) }, i));
|
|
21
|
+
case "image":
|
|
22
|
+
return (
|
|
23
|
+
// Plain <img>, not next/image — screenshots live on arbitrary hosts
|
|
24
|
+
// the consumer's image config knows nothing about.
|
|
25
|
+
_jsx("img", { src: node.src, alt: node.alt, loading: "lazy", className: "my-1 max-w-full rounded-md border border-[#2e2e2e]" }, i));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function List({ list }) {
|
|
30
|
+
const Tag = list.ordered ? "ol" : "ul";
|
|
31
|
+
return (_jsx(Tag, { className: `space-y-1 pl-5 ${list.ordered ? "list-decimal" : "list-disc"} marker:text-[#555]`, children: list.items.map((item, i) => (_jsxs("li", { children: [item.checked !== undefined && (_jsx("span", { "aria-hidden": true, className: `mr-1.5 font-mono ${item.checked ? "text-emerald-500" : "text-[#555]"}`, children: item.checked ? "☑" : "☐" })), renderInline(item.children), item.sub && (_jsx("div", { className: "mt-1", children: _jsx(List, { list: item.sub }) }))] }, i))) }));
|
|
32
|
+
}
|
|
33
|
+
const HEADING_CLS = {
|
|
34
|
+
1: "text-[15px] font-semibold text-white",
|
|
35
|
+
2: "text-[14px] font-semibold text-white",
|
|
36
|
+
3: "text-[13px] font-semibold text-[#ddd]",
|
|
37
|
+
4: "text-[12px] font-semibold text-[#ddd]",
|
|
38
|
+
5: "text-[12px] font-medium text-[#ccc]",
|
|
39
|
+
6: "text-[11px] font-medium uppercase tracking-[0.08em] text-[#888]",
|
|
40
|
+
};
|
|
41
|
+
function renderBlock(block, key) {
|
|
42
|
+
switch (block.kind) {
|
|
43
|
+
case "heading": {
|
|
44
|
+
const Tag = `h${Math.min(block.level + 2, 6)}`;
|
|
45
|
+
return (_jsx(Tag, { className: `pt-1 ${HEADING_CLS[block.level]}`, children: renderInline(block.children) }, key));
|
|
46
|
+
}
|
|
47
|
+
case "paragraph":
|
|
48
|
+
return _jsx("p", { children: renderInline(block.children) }, key);
|
|
49
|
+
case "codeBlock":
|
|
50
|
+
return (_jsx("pre", { className: "overflow-x-auto rounded-md border border-[#2e2e2e] bg-[#111] px-3 py-2.5 font-mono text-[11px] leading-relaxed text-[#aaa]", children: _jsx("code", { children: block.text }) }, key));
|
|
51
|
+
case "quote":
|
|
52
|
+
return (_jsx("blockquote", { className: "space-y-2 border-l-2 border-[#2e2e2e] pl-3 text-[#888]", children: block.children.map(renderBlock) }, key));
|
|
53
|
+
case "list":
|
|
54
|
+
return _jsx(List, { list: block.list }, key);
|
|
55
|
+
case "rule":
|
|
56
|
+
return _jsx("hr", { className: "border-t border-[#2e2e2e]" }, key);
|
|
57
|
+
case "table":
|
|
58
|
+
return (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-left text-[12px]", children: [_jsx("thead", { children: _jsx("tr", { children: block.header.map((cell, i) => (_jsx("th", { className: "border-b border-[#2e2e2e] py-1.5 pr-4 font-medium text-[#ddd]", children: renderInline(cell) }, i))) }) }), _jsx("tbody", { children: block.rows.map((row, r) => (_jsx("tr", { children: row.map((cell, c) => (_jsx("td", { className: "border-b border-[#1f1f1f] py-1.5 pr-4", children: renderInline(cell) }, c))) }, r))) })] }) }, key));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** GitHub-flavored markdown → dashboard-styled elements. */
|
|
62
|
+
export function Markdown({ text }) {
|
|
63
|
+
return (_jsx("div", { className: "space-y-2.5 break-words text-[13px] leading-relaxed text-[#aaa]", children: parseMarkdown(text).map(renderBlock) }));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/dashboard/markdown.tsx"],"names":[],"mappings":"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"}
|
package/dist/dashboard.css
CHANGED
|
@@ -93,6 +93,7 @@
|
|
|
93
93
|
--color-purple-300: oklch(82.7% .119 306.383);
|
|
94
94
|
--color-purple-400: oklch(71.4% .203 305.504);
|
|
95
95
|
--color-purple-500: oklch(62.7% .265 303.9);
|
|
96
|
+
--color-purple-950: oklch(29.1% .149 302.717);
|
|
96
97
|
--color-black: #000;
|
|
97
98
|
--color-white: #fff;
|
|
98
99
|
--spacing: .25rem;
|
|
@@ -401,6 +402,10 @@
|
|
|
401
402
|
margin-inline: auto;
|
|
402
403
|
}
|
|
403
404
|
|
|
405
|
+
.polishd-root.polishd-root .my-1 {
|
|
406
|
+
margin-block: var(--spacing);
|
|
407
|
+
}
|
|
408
|
+
|
|
404
409
|
.polishd-root.polishd-root .mt-0\.5 {
|
|
405
410
|
margin-top: calc(var(--spacing) * .5);
|
|
406
411
|
}
|
|
@@ -657,10 +662,6 @@
|
|
|
657
662
|
height: 1px;
|
|
658
663
|
}
|
|
659
664
|
|
|
660
|
-
.polishd-root.polishd-root .max-h-96 {
|
|
661
|
-
max-height: calc(var(--spacing) * 96);
|
|
662
|
-
}
|
|
663
|
-
|
|
664
665
|
.polishd-root.polishd-root .max-h-\[80vh\] {
|
|
665
666
|
max-height: 80vh;
|
|
666
667
|
}
|
|
@@ -733,6 +734,10 @@
|
|
|
733
734
|
width: calc(var(--spacing) * 20);
|
|
734
735
|
}
|
|
735
736
|
|
|
737
|
+
.polishd-root.polishd-root .w-24 {
|
|
738
|
+
width: calc(var(--spacing) * 24);
|
|
739
|
+
}
|
|
740
|
+
|
|
736
741
|
.polishd-root.polishd-root .w-28 {
|
|
737
742
|
width: calc(var(--spacing) * 28);
|
|
738
743
|
}
|
|
@@ -990,8 +995,12 @@
|
|
|
990
995
|
resize: vertical;
|
|
991
996
|
}
|
|
992
997
|
|
|
993
|
-
.polishd-root.polishd-root .list-
|
|
994
|
-
list-style-type:
|
|
998
|
+
.polishd-root.polishd-root .list-decimal {
|
|
999
|
+
list-style-type: decimal;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
.polishd-root.polishd-root .list-disc {
|
|
1003
|
+
list-style-type: disc;
|
|
995
1004
|
}
|
|
996
1005
|
|
|
997
1006
|
.polishd-root.polishd-root .grid-cols-1 {
|
|
@@ -1090,6 +1099,12 @@
|
|
|
1090
1099
|
gap: 1px;
|
|
1091
1100
|
}
|
|
1092
1101
|
|
|
1102
|
+
.polishd-root.polishd-root :where(.space-y-1 > :not(:last-child)) {
|
|
1103
|
+
--tw-space-y-reverse: 0;
|
|
1104
|
+
margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
|
|
1105
|
+
margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1093
1108
|
.polishd-root.polishd-root :where(.space-y-1\.5 > :not(:last-child)) {
|
|
1094
1109
|
--tw-space-y-reverse: 0;
|
|
1095
1110
|
margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));
|
|
@@ -1257,6 +1272,11 @@
|
|
|
1257
1272
|
border-left-width: 1px;
|
|
1258
1273
|
}
|
|
1259
1274
|
|
|
1275
|
+
.polishd-root.polishd-root .border-l-2 {
|
|
1276
|
+
border-left-style: var(--tw-border-style);
|
|
1277
|
+
border-left-width: 2px;
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1260
1280
|
.polishd-root.polishd-root .border-dashed {
|
|
1261
1281
|
--tw-border-style: dashed;
|
|
1262
1282
|
border-style: dashed;
|
|
@@ -1270,6 +1290,10 @@
|
|
|
1270
1290
|
border-color: oklab(34.6182% -.0177443 -.0713795 / .6);
|
|
1271
1291
|
}
|
|
1272
1292
|
|
|
1293
|
+
.polishd-root.polishd-root .border-\[\#1f1f1f\] {
|
|
1294
|
+
border-color: #1f1f1f;
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1273
1297
|
.polishd-root.polishd-root .border-\[\#2e2e2e\] {
|
|
1274
1298
|
border-color: #2e2e2e;
|
|
1275
1299
|
}
|
|
@@ -1556,6 +1580,10 @@
|
|
|
1556
1580
|
background-color: var(--color-purple-500);
|
|
1557
1581
|
}
|
|
1558
1582
|
|
|
1583
|
+
.polishd-root.polishd-root .bg-purple-950 {
|
|
1584
|
+
background-color: var(--color-purple-950);
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1559
1587
|
.polishd-root.polishd-root .bg-red-500 {
|
|
1560
1588
|
background-color: var(--color-red-500);
|
|
1561
1589
|
}
|
|
@@ -1736,6 +1764,10 @@
|
|
|
1736
1764
|
padding-block: 1px;
|
|
1737
1765
|
}
|
|
1738
1766
|
|
|
1767
|
+
.polishd-root.polishd-root .pt-1 {
|
|
1768
|
+
padding-top: var(--spacing);
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1739
1771
|
.polishd-root.polishd-root .pt-3 {
|
|
1740
1772
|
padding-top: calc(var(--spacing) * 3);
|
|
1741
1773
|
}
|
|
@@ -1816,6 +1848,10 @@
|
|
|
1816
1848
|
padding-left: calc(var(--spacing) * 1.5);
|
|
1817
1849
|
}
|
|
1818
1850
|
|
|
1851
|
+
.polishd-root.polishd-root .pl-3 {
|
|
1852
|
+
padding-left: calc(var(--spacing) * 3);
|
|
1853
|
+
}
|
|
1854
|
+
|
|
1819
1855
|
.polishd-root.polishd-root .pl-4 {
|
|
1820
1856
|
padding-left: calc(var(--spacing) * 4);
|
|
1821
1857
|
}
|
|
@@ -1856,6 +1892,10 @@
|
|
|
1856
1892
|
font-family: var(--font-sans);
|
|
1857
1893
|
}
|
|
1858
1894
|
|
|
1895
|
+
.polishd-root.polishd-root .text-\[0\.92em\] {
|
|
1896
|
+
font-size: .92em;
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1859
1899
|
.polishd-root.polishd-root .text-\[8px\] {
|
|
1860
1900
|
font-size: 8px;
|
|
1861
1901
|
}
|
|
@@ -2156,6 +2196,10 @@
|
|
|
2156
2196
|
color: #8a6a6a;
|
|
2157
2197
|
}
|
|
2158
2198
|
|
|
2199
|
+
.polishd-root.polishd-root .text-\[\#8ab4f8\] {
|
|
2200
|
+
color: #8ab4f8;
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2159
2203
|
.polishd-root.polishd-root .text-\[\#444\] {
|
|
2160
2204
|
color: #444;
|
|
2161
2205
|
}
|
|
@@ -2438,14 +2482,6 @@
|
|
|
2438
2482
|
transition-timing-function: var(--ease-out);
|
|
2439
2483
|
}
|
|
2440
2484
|
|
|
2441
|
-
.polishd-root.polishd-root .group-open\:hidden:is(:where(.group):is([open], :popover-open, :open) *) {
|
|
2442
|
-
display: none;
|
|
2443
|
-
}
|
|
2444
|
-
|
|
2445
|
-
.polishd-root.polishd-root .group-open\:inline:is(:where(.group):is([open], :popover-open, :open) *) {
|
|
2446
|
-
display: inline;
|
|
2447
|
-
}
|
|
2448
|
-
|
|
2449
2485
|
@media (hover: hover) {
|
|
2450
2486
|
.polishd-root.polishd-root .group-hover\:scale-100:is(:where(.group):hover *) {
|
|
2451
2487
|
--tw-scale-x: 100%;
|
|
@@ -2483,6 +2519,22 @@
|
|
|
2483
2519
|
opacity: 1;
|
|
2484
2520
|
}
|
|
2485
2521
|
|
|
2522
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\] ::marker {
|
|
2523
|
+
color: #555;
|
|
2524
|
+
}
|
|
2525
|
+
|
|
2526
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\]::marker {
|
|
2527
|
+
color: #555;
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2530
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\] ::-webkit-details-marker {
|
|
2531
|
+
color: #555;
|
|
2532
|
+
}
|
|
2533
|
+
|
|
2534
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\]::-webkit-details-marker {
|
|
2535
|
+
color: #555;
|
|
2536
|
+
}
|
|
2537
|
+
|
|
2486
2538
|
.polishd-root.polishd-root .placeholder\:text-\[\#555\]::placeholder {
|
|
2487
2539
|
color: #555;
|
|
2488
2540
|
}
|
|
@@ -2553,6 +2605,10 @@
|
|
|
2553
2605
|
color: var(--color-white);
|
|
2554
2606
|
}
|
|
2555
2607
|
|
|
2608
|
+
.polishd-root.polishd-root .hover\:underline:hover {
|
|
2609
|
+
text-decoration-line: underline;
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2556
2612
|
.polishd-root.polishd-root .hover\:opacity-90:hover {
|
|
2557
2613
|
opacity: .9;
|
|
2558
2614
|
}
|
|
@@ -2660,6 +2716,10 @@
|
|
|
2660
2716
|
max-width: var(--container-md);
|
|
2661
2717
|
}
|
|
2662
2718
|
|
|
2719
|
+
.polishd-root.polishd-root .sm\:max-w-xl {
|
|
2720
|
+
max-width: var(--container-xl);
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2663
2723
|
.polishd-root.polishd-root .sm\:grid-cols-2 {
|
|
2664
2724
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
2665
2725
|
}
|
|
@@ -2844,10 +2904,6 @@
|
|
|
2844
2904
|
}
|
|
2845
2905
|
}
|
|
2846
2906
|
|
|
2847
|
-
.polishd-root.polishd-root .\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker {
|
|
2848
|
-
display: none;
|
|
2849
|
-
}
|
|
2850
|
-
|
|
2851
2907
|
@property --tw-translate-x {
|
|
2852
2908
|
syntax: "*";
|
|
2853
2909
|
inherits: false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polishd/next",
|
|
3
|
-
"version": "0.2.3-dev.
|
|
3
|
+
"version": "0.2.3-dev.4",
|
|
4
4
|
"description": "Drop-in product analytics for Next.js — capture real user behavioral signals (rage/dead clicks, scroll depth, errors, web vitals) and explore them on a built-in dashboard. What gets measured gets improved.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|