@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.
Files changed (45) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/ai/actions.d.ts +7 -1
  3. package/dist/ai/actions.d.ts.map +1 -1
  4. package/dist/ai/actions.js +10 -0
  5. package/dist/ai/actions.js.map +1 -1
  6. package/dist/ai/fix.d.ts +14 -0
  7. package/dist/ai/fix.d.ts.map +1 -0
  8. package/dist/ai/fix.js +254 -0
  9. package/dist/ai/fix.js.map +1 -0
  10. package/dist/ai/issues.d.ts +12 -0
  11. package/dist/ai/issues.d.ts.map +1 -1
  12. package/dist/ai/issues.js +16 -2
  13. package/dist/ai/issues.js.map +1 -1
  14. package/dist/ai/types.d.ts +49 -0
  15. package/dist/ai/types.d.ts.map +1 -1
  16. package/dist/dashboard/chrome.d.ts +15 -0
  17. package/dist/dashboard/chrome.d.ts.map +1 -1
  18. package/dist/dashboard/chrome.js +5 -1
  19. package/dist/dashboard/chrome.js.map +1 -1
  20. package/dist/dashboard/data.d.ts +18 -0
  21. package/dist/dashboard/data.d.ts.map +1 -0
  22. package/dist/dashboard/data.js +70 -0
  23. package/dist/dashboard/data.js.map +1 -0
  24. package/dist/dashboard/index.d.ts +1 -1
  25. package/dist/dashboard/index.d.ts.map +1 -1
  26. package/dist/dashboard/index.js +211 -85
  27. package/dist/dashboard/index.js.map +1 -1
  28. package/dist/dashboard/issue-list.d.ts +11 -0
  29. package/dist/dashboard/issue-list.d.ts.map +1 -0
  30. package/dist/dashboard/issue-list.js +159 -0
  31. package/dist/dashboard/issue-list.js.map +1 -0
  32. package/dist/dashboard/issues.d.ts +31 -2
  33. package/dist/dashboard/issues.d.ts.map +1 -1
  34. package/dist/dashboard/issues.js +4 -71
  35. package/dist/dashboard/issues.js.map +1 -1
  36. package/dist/dashboard/markdown-parse.d.ts +87 -0
  37. package/dist/dashboard/markdown-parse.d.ts.map +1 -0
  38. package/dist/dashboard/markdown-parse.js +244 -0
  39. package/dist/dashboard/markdown-parse.js.map +1 -0
  40. package/dist/dashboard/markdown.d.ts +5 -0
  41. package/dist/dashboard/markdown.d.ts.map +1 -0
  42. package/dist/dashboard/markdown.js +65 -0
  43. package/dist/dashboard/markdown.js.map +1 -0
  44. package/dist/dashboard.css +74 -18
  45. 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,5 @@
1
+ /** GitHub-flavored markdown → dashboard-styled elements. */
2
+ export declare function Markdown({ text }: {
3
+ text: string;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=markdown.d.ts.map
@@ -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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"}
@@ -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-none {
994
- list-style-type: none;
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.2",
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",