walkwright 0.0.1 → 0.0.2

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.
@@ -228,15 +228,14 @@ function pulse(text, intervalMs = 500) {
228
228
  };
229
229
  }
230
230
  function wordmark() {
231
- return bold(`${paint("accent", "MAP")}${paint("text", "WRIGHT")}`);
231
+ return bold(`${paint("accent", "WALK")}${paint("text", "WRIGHT")}`);
232
232
  }
233
233
  function logo() {
234
234
  const mark = (value) => paint("accent", value);
235
235
  return [
236
- mark(" \u250C\u2500\u25A0\u2500\u2510"),
237
- `${mark(" \u25A0 \u25A0")} ${wordmark()}`,
238
- mark(" \u250C\u2534\u2510"),
239
- mark(" \u25A0 \u25A0")
236
+ mark(" \u25A0"),
237
+ `${mark(" \u250C\u2500\u253C\u2500\u2510")} ${wordmark()}`,
238
+ mark(" \u25A0 \u25A0 \u25A1")
240
239
  ];
241
240
  }
242
241
 
@@ -267,4 +266,4 @@ export {
267
266
  wordmark,
268
267
  logo
269
268
  };
270
- //# sourceMappingURL=chunk-RNNW7OW2.js.map
269
+ //# sourceMappingURL=chunk-6J7OH2SF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui.ts"],"sourcesContent":["export type Tone =\n | \"accent\"\n | \"text\"\n | \"dim\"\n | \"faint\"\n | \"ok\"\n | \"warn\"\n | \"fail\"\n | \"code\"\n | \"border\";\n\ntype Depth = \"truecolor\" | \"256\" | \"none\";\n\ninterface Swatch {\n hex: string;\n index: number;\n}\n\nconst dark: Record<Tone, Swatch> = {\n accent: { hex: \"#b8943a\", index: 178 },\n text: { hex: \"#bcac8f\", index: 180 },\n dim: { hex: \"#8d8972\", index: 102 },\n faint: { hex: \"#6b6858\", index: 59 },\n ok: { hex: \"#8fa85e\", index: 107 },\n warn: { hex: \"#e08542\", index: 173 },\n fail: { hex: \"#d66848\", index: 167 },\n code: { hex: \"#cc7f66\", index: 173 },\n border: { hex: \"#333333\", index: 236 },\n};\n\nconst light: Record<Tone, Swatch> = {\n accent: { hex: \"#9a7820\", index: 136 },\n text: { hex: \"#3a3828\", index: 237 },\n dim: { hex: \"#625e55\", index: 240 },\n faint: { hex: \"#948e80\", index: 246 },\n ok: { hex: \"#5f8a3a\", index: 64 },\n warn: { hex: \"#c0741e\", index: 172 },\n fail: { hex: \"#b8442c\", index: 130 },\n code: { hex: \"#a85030\", index: 130 },\n border: { hex: \"#c9bfa6\", index: 250 },\n};\n\nexport const glyph = {\n ok: \"✓\",\n fail: \"✗\",\n carried: \"↺\",\n unseen: \"●\",\n open: \"▾\",\n closed: \"▸\",\n branch: \"├\",\n last: \"└\",\n cursor: \"▌\",\n prompt: \">\",\n filled: \"▰\",\n empty: \"▱\",\n dot: \"·\",\n bar: \"│\",\n} as const;\n\nprocess.stdout.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code !== \"EPIPE\") {\n throw error;\n }\n});\n\nconst depth = detectDepth();\nconst palette = detectLight() ? light : dark;\nconst esc = \"\\u001b\";\nconst escapePattern = new RegExp(`${esc}\\\\[[\\\\d;]*m`, \"g\");\nconst escapeSplit = new RegExp(`(${esc}\\\\[[\\\\d;]*m)`);\nconst escapeOnly = new RegExp(`^${esc}\\\\[[\\\\d;]*m$`);\n\nfunction detectDepth(): Depth {\n const env = process.env;\n\n if ((env[\"NO_COLOR\"] ?? \"\") !== \"\" || env[\"FORCE_COLOR\"] === \"0\") {\n return \"none\";\n }\n\n const forced = (env[\"FORCE_COLOR\"] ?? \"\") !== \"\";\n\n if (!forced && !process.stdout.isTTY) {\n return \"none\";\n }\n\n const colorterm = env[\"COLORTERM\"] ?? \"\";\n\n if (colorterm === \"truecolor\" || colorterm === \"24bit\") {\n return \"truecolor\";\n }\n\n const term = env[\"TERM\"] ?? \"\";\n\n if (term === \"dumb\" || (term === \"\" && !forced)) {\n return \"none\";\n }\n\n return \"256\";\n}\n\nfunction detectLight(): boolean {\n const theme = process.env[\"WALKWRIGHT_THEME\"];\n\n if (theme === \"light\" || theme === \"dark\") {\n return theme === \"light\";\n }\n\n const fgbg = process.env[\"COLORFGBG\"];\n\n if (fgbg === undefined) {\n return false;\n }\n\n const background = Number(fgbg.split(\";\").at(-1));\n\n return background === 7 || (background >= 9 && background <= 15);\n}\n\nfunction open(swatch: Swatch): string {\n if (depth === \"truecolor\") {\n const value = Number.parseInt(swatch.hex.slice(1), 16);\n\n return `\\u001b[38;2;${String(value >> 16)};${String((value >> 8) & 255)};${String(value & 255)}m`;\n }\n\n return `\\u001b[38;5;${String(swatch.index)}m`;\n}\n\nexport function paint(tone: Tone, value: string): string {\n if (depth === \"none\" || value === \"\") {\n return value;\n }\n\n return `${open(palette[tone])}${value}\\u001b[39m`;\n}\n\nexport function bold(value: string): string {\n return depth === \"none\" ? value : `\\u001b[1m${value}\\u001b[22m`;\n}\n\nexport function plain(value: string): string {\n return value.replace(escapePattern, \"\");\n}\n\nexport function width(value: string): number {\n return plain(value).length;\n}\n\nexport function columns(): number {\n return process.stdout.isTTY ? process.stdout.columns : 100;\n}\n\nexport function pad(value: string, to: number): string {\n return value + \" \".repeat(Math.max(0, to - width(value)));\n}\n\nexport function clip(value: string, to: number): string {\n if (width(value) <= to) {\n return value;\n }\n\n let seen = 0;\n let out = \"\";\n\n for (const part of value.split(escapeSplit)) {\n if (escapeOnly.test(part)) {\n out += part;\n continue;\n }\n\n for (const char of part) {\n if (seen === to - 1) {\n return `${out}…${depth === \"none\" ? \"\" : \"\\u001b[0m\"}`;\n }\n\n out += char;\n seen += 1;\n }\n }\n\n return out;\n}\n\nexport function line(...parts: string[]): void {\n process.stdout.write(`${parts.join(\"\")}\\n`);\n}\n\nexport function blank(): void {\n process.stdout.write(\"\\n\");\n}\n\nexport function status(...segments: string[]): string {\n return ` ${segments.filter((segment) => segment !== \"\").join(paint(\"faint\", ` ${glyph.bar} `))}`;\n}\n\nexport function badge(count: number, tone: Tone = \"dim\"): string {\n return paint(tone, `[${String(count)}]`);\n}\n\nexport function key(name: string): string {\n return paint(\"accent\", `[${name}]`);\n}\n\nexport function action(verb: string): string {\n return paint(\"accent\", `[${verb}]`);\n}\n\nexport function prompt(text: string): string {\n return `${paint(\"accent\", glyph.prompt)} ${text}`;\n}\n\nexport function dashed(inner: number): string {\n return paint(\"border\", \"╌\".repeat(inner));\n}\n\nexport interface BoxOptions {\n legend: string;\n title?: string;\n primary?: boolean;\n min?: number;\n}\n\nexport function box(rows: string[], options: BoxOptions): string[] {\n const outer = Math.min(columns() - 1, 100);\n const min = Math.max(options.min ?? 44, width(options.legend) + 10);\n const widest = rows.reduce((max, row) => Math.max(max, width(row)), 0);\n const inner = Math.max(min - 4, Math.min(widest, outer - 4));\n\n const edge = (value: string): string => paint(\"border\", value);\n\n const legend = paint(\n options.primary === true ? \"accent\" : \"dim\",\n options.legend.toUpperCase(),\n );\n const heading =\n options.title === undefined\n ? `${edge(\"─ \")}${legend}${edge(\" \")}`\n : `${edge(\"─ \")}${legend}${edge(\" ─ \")}${paint(\"text\", options.title)}${edge(\" \")}`;\n const top = `${edge(\"┌\")}${clip(heading, inner + 2)}${edge(\"─\".repeat(Math.max(0, inner + 2 - width(heading))))}${edge(\"┐\")}`;\n const bottom = `${edge(\"└\")}${edge(\"─\".repeat(inner + 2))}${edge(\"┘\")}`;\n\n const body = rows.map(\n (row) =>\n `${edge(\"│\")} ${pad(clip(row === \"\" ? dashed(inner) : row, inner), inner)} ${edge(\"│\")}`,\n );\n\n return [top, ...body, bottom];\n}\n\nexport function progress(done: number, total: number, cells = 5): string {\n const filled = total === 0 ? cells : Math.round((done / total) * cells);\n\n return paint(\n \"accent\",\n glyph.filled.repeat(filled) + glyph.empty.repeat(cells - filled),\n );\n}\n\nexport function duration(ms: number): string {\n if (ms < 1000) {\n return `${String(Math.round(ms))}ms`;\n }\n\n const seconds = Math.round(ms / 1000);\n\n if (seconds < 60) {\n return `${String(seconds)}s`;\n }\n\n return `${String(Math.floor(seconds / 60))}m${String(seconds % 60).padStart(2, \"0\")}s`;\n}\n\nexport function count(value: number, noun: string): string {\n return `${String(value)} ${noun}${value === 1 ? \"\" : \"s\"}`;\n}\n\nexport function failure(message: string, hint?: string): void {\n process.stderr.write(`${paint(\"fail\", `${glyph.fail} ${message}`)}\\n`);\n\n if (hint !== undefined) {\n process.stderr.write(`${paint(\"dim\", ` ${hint}`)}\\n`);\n }\n}\n\nexport function transient(text: string): () => void {\n if (!process.stdout.isTTY) {\n return () => undefined;\n }\n\n process.stdout.write(`\\r\\u001b[2K${clip(text, columns() - 1)}`);\n\n return () => {\n process.stdout.write(\"\\r\\u001b[2K\");\n };\n}\n\nexport function pulse(text: string, intervalMs = 500): () => void {\n if (!process.stdout.isTTY) {\n line(text);\n return () => undefined;\n }\n\n let on = true;\n const draw = (): void => {\n process.stdout.write(\n `\\r\\u001b[2K${clip(`${text} ${on ? paint(\"accent\", glyph.cursor) : \" \"}`, columns() - 1)}`,\n );\n on = !on;\n };\n\n draw();\n const timer = setInterval(draw, intervalMs);\n\n return () => {\n clearInterval(timer);\n process.stdout.write(\"\\r\\u001b[2K\");\n };\n}\n\nexport function wordmark(): string {\n return bold(`${paint(\"accent\", \"MAP\")}${paint(\"text\", \"WRIGHT\")}`);\n}\n\nexport function logo(): string[] {\n const mark = (value: string): string => paint(\"accent\", value);\n\n return [\n mark(\" ┌─■─┐\"),\n `${mark(\" ■ ■\")} ${wordmark()}`,\n mark(\" ┌┴┐\"),\n mark(\" ■ ■\"),\n ];\n}\n"],"mappings":"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","names":["count"]}
1
+ {"version":3,"sources":["../src/ui.ts"],"sourcesContent":["export type Tone =\n | \"accent\"\n | \"text\"\n | \"dim\"\n | \"faint\"\n | \"ok\"\n | \"warn\"\n | \"fail\"\n | \"code\"\n | \"border\";\n\ntype Depth = \"truecolor\" | \"256\" | \"none\";\n\ninterface Swatch {\n hex: string;\n index: number;\n}\n\nconst dark: Record<Tone, Swatch> = {\n accent: { hex: \"#b8943a\", index: 178 },\n text: { hex: \"#bcac8f\", index: 180 },\n dim: { hex: \"#8d8972\", index: 102 },\n faint: { hex: \"#6b6858\", index: 59 },\n ok: { hex: \"#8fa85e\", index: 107 },\n warn: { hex: \"#e08542\", index: 173 },\n fail: { hex: \"#d66848\", index: 167 },\n code: { hex: \"#cc7f66\", index: 173 },\n border: { hex: \"#333333\", index: 236 },\n};\n\nconst light: Record<Tone, Swatch> = {\n accent: { hex: \"#9a7820\", index: 136 },\n text: { hex: \"#3a3828\", index: 237 },\n dim: { hex: \"#625e55\", index: 240 },\n faint: { hex: \"#948e80\", index: 246 },\n ok: { hex: \"#5f8a3a\", index: 64 },\n warn: { hex: \"#c0741e\", index: 172 },\n fail: { hex: \"#b8442c\", index: 130 },\n code: { hex: \"#a85030\", index: 130 },\n border: { hex: \"#c9bfa6\", index: 250 },\n};\n\nexport const glyph = {\n ok: \"✓\",\n fail: \"✗\",\n carried: \"↺\",\n unseen: \"●\",\n open: \"▾\",\n closed: \"▸\",\n branch: \"├\",\n last: \"└\",\n cursor: \"▌\",\n prompt: \">\",\n filled: \"▰\",\n empty: \"▱\",\n dot: \"·\",\n bar: \"│\",\n} as const;\n\nprocess.stdout.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code !== \"EPIPE\") {\n throw error;\n }\n});\n\nconst depth = detectDepth();\nconst palette = detectLight() ? light : dark;\nconst esc = \"\\u001b\";\nconst escapePattern = new RegExp(`${esc}\\\\[[\\\\d;]*m`, \"g\");\nconst escapeSplit = new RegExp(`(${esc}\\\\[[\\\\d;]*m)`);\nconst escapeOnly = new RegExp(`^${esc}\\\\[[\\\\d;]*m$`);\n\nfunction detectDepth(): Depth {\n const env = process.env;\n\n if ((env[\"NO_COLOR\"] ?? \"\") !== \"\" || env[\"FORCE_COLOR\"] === \"0\") {\n return \"none\";\n }\n\n const forced = (env[\"FORCE_COLOR\"] ?? \"\") !== \"\";\n\n if (!forced && !process.stdout.isTTY) {\n return \"none\";\n }\n\n const colorterm = env[\"COLORTERM\"] ?? \"\";\n\n if (colorterm === \"truecolor\" || colorterm === \"24bit\") {\n return \"truecolor\";\n }\n\n const term = env[\"TERM\"] ?? \"\";\n\n if (term === \"dumb\" || (term === \"\" && !forced)) {\n return \"none\";\n }\n\n return \"256\";\n}\n\nfunction detectLight(): boolean {\n const theme = process.env[\"WALKWRIGHT_THEME\"];\n\n if (theme === \"light\" || theme === \"dark\") {\n return theme === \"light\";\n }\n\n const fgbg = process.env[\"COLORFGBG\"];\n\n if (fgbg === undefined) {\n return false;\n }\n\n const background = Number(fgbg.split(\";\").at(-1));\n\n return background === 7 || (background >= 9 && background <= 15);\n}\n\nfunction open(swatch: Swatch): string {\n if (depth === \"truecolor\") {\n const value = Number.parseInt(swatch.hex.slice(1), 16);\n\n return `\\u001b[38;2;${String(value >> 16)};${String((value >> 8) & 255)};${String(value & 255)}m`;\n }\n\n return `\\u001b[38;5;${String(swatch.index)}m`;\n}\n\nexport function paint(tone: Tone, value: string): string {\n if (depth === \"none\" || value === \"\") {\n return value;\n }\n\n return `${open(palette[tone])}${value}\\u001b[39m`;\n}\n\nexport function bold(value: string): string {\n return depth === \"none\" ? value : `\\u001b[1m${value}\\u001b[22m`;\n}\n\nexport function plain(value: string): string {\n return value.replace(escapePattern, \"\");\n}\n\nexport function width(value: string): number {\n return plain(value).length;\n}\n\nexport function columns(): number {\n return process.stdout.isTTY ? process.stdout.columns : 100;\n}\n\nexport function pad(value: string, to: number): string {\n return value + \" \".repeat(Math.max(0, to - width(value)));\n}\n\nexport function clip(value: string, to: number): string {\n if (width(value) <= to) {\n return value;\n }\n\n let seen = 0;\n let out = \"\";\n\n for (const part of value.split(escapeSplit)) {\n if (escapeOnly.test(part)) {\n out += part;\n continue;\n }\n\n for (const char of part) {\n if (seen === to - 1) {\n return `${out}…${depth === \"none\" ? \"\" : \"\\u001b[0m\"}`;\n }\n\n out += char;\n seen += 1;\n }\n }\n\n return out;\n}\n\nexport function line(...parts: string[]): void {\n process.stdout.write(`${parts.join(\"\")}\\n`);\n}\n\nexport function blank(): void {\n process.stdout.write(\"\\n\");\n}\n\nexport function status(...segments: string[]): string {\n return ` ${segments.filter((segment) => segment !== \"\").join(paint(\"faint\", ` ${glyph.bar} `))}`;\n}\n\nexport function badge(count: number, tone: Tone = \"dim\"): string {\n return paint(tone, `[${String(count)}]`);\n}\n\nexport function key(name: string): string {\n return paint(\"accent\", `[${name}]`);\n}\n\nexport function action(verb: string): string {\n return paint(\"accent\", `[${verb}]`);\n}\n\nexport function prompt(text: string): string {\n return `${paint(\"accent\", glyph.prompt)} ${text}`;\n}\n\nexport function dashed(inner: number): string {\n return paint(\"border\", \"╌\".repeat(inner));\n}\n\nexport interface BoxOptions {\n legend: string;\n title?: string;\n primary?: boolean;\n min?: number;\n}\n\nexport function box(rows: string[], options: BoxOptions): string[] {\n const outer = Math.min(columns() - 1, 100);\n const min = Math.max(options.min ?? 44, width(options.legend) + 10);\n const widest = rows.reduce((max, row) => Math.max(max, width(row)), 0);\n const inner = Math.max(min - 4, Math.min(widest, outer - 4));\n\n const edge = (value: string): string => paint(\"border\", value);\n\n const legend = paint(\n options.primary === true ? \"accent\" : \"dim\",\n options.legend.toUpperCase(),\n );\n const heading =\n options.title === undefined\n ? `${edge(\"─ \")}${legend}${edge(\" \")}`\n : `${edge(\"─ \")}${legend}${edge(\" ─ \")}${paint(\"text\", options.title)}${edge(\" \")}`;\n const top = `${edge(\"┌\")}${clip(heading, inner + 2)}${edge(\"─\".repeat(Math.max(0, inner + 2 - width(heading))))}${edge(\"┐\")}`;\n const bottom = `${edge(\"└\")}${edge(\"─\".repeat(inner + 2))}${edge(\"┘\")}`;\n\n const body = rows.map(\n (row) =>\n `${edge(\"│\")} ${pad(clip(row === \"\" ? dashed(inner) : row, inner), inner)} ${edge(\"│\")}`,\n );\n\n return [top, ...body, bottom];\n}\n\nexport function progress(done: number, total: number, cells = 5): string {\n const filled = total === 0 ? cells : Math.round((done / total) * cells);\n\n return paint(\n \"accent\",\n glyph.filled.repeat(filled) + glyph.empty.repeat(cells - filled),\n );\n}\n\nexport function duration(ms: number): string {\n if (ms < 1000) {\n return `${String(Math.round(ms))}ms`;\n }\n\n const seconds = Math.round(ms / 1000);\n\n if (seconds < 60) {\n return `${String(seconds)}s`;\n }\n\n return `${String(Math.floor(seconds / 60))}m${String(seconds % 60).padStart(2, \"0\")}s`;\n}\n\nexport function count(value: number, noun: string): string {\n return `${String(value)} ${noun}${value === 1 ? \"\" : \"s\"}`;\n}\n\nexport function failure(message: string, hint?: string): void {\n process.stderr.write(`${paint(\"fail\", `${glyph.fail} ${message}`)}\\n`);\n\n if (hint !== undefined) {\n process.stderr.write(`${paint(\"dim\", ` ${hint}`)}\\n`);\n }\n}\n\nexport function transient(text: string): () => void {\n if (!process.stdout.isTTY) {\n return () => undefined;\n }\n\n process.stdout.write(`\\r\\u001b[2K${clip(text, columns() - 1)}`);\n\n return () => {\n process.stdout.write(\"\\r\\u001b[2K\");\n };\n}\n\nexport function pulse(text: string, intervalMs = 500): () => void {\n if (!process.stdout.isTTY) {\n line(text);\n return () => undefined;\n }\n\n let on = true;\n const draw = (): void => {\n process.stdout.write(\n `\\r\\u001b[2K${clip(`${text} ${on ? paint(\"accent\", glyph.cursor) : \" \"}`, columns() - 1)}`,\n );\n on = !on;\n };\n\n draw();\n const timer = setInterval(draw, intervalMs);\n\n return () => {\n clearInterval(timer);\n process.stdout.write(\"\\r\\u001b[2K\");\n };\n}\n\nexport function wordmark(): string {\n return bold(`${paint(\"accent\", \"WALK\")}${paint(\"text\", \"WRIGHT\")}`);\n}\n\nexport function logo(): string[] {\n const mark = (value: string): string => paint(\"accent\", value);\n\n return [\n mark(\" ■\"),\n `${mark(\" ┌─┼─┐\")} ${wordmark()}`,\n mark(\" ■ ■ □\"),\n ];\n}\n"],"mappings":";AAkBA,IAAM,OAA6B;AAAA,EACjC,QAAQ,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACrC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,KAAK,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EAClC,OAAO,EAAE,KAAK,WAAW,OAAO,GAAG;AAAA,EACnC,IAAI,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACjC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,QAAQ,EAAE,KAAK,WAAW,OAAO,IAAI;AACvC;AAEA,IAAM,QAA8B;AAAA,EAClC,QAAQ,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACrC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,KAAK,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EAClC,OAAO,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACpC,IAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAAA,EAChC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,MAAM,EAAE,KAAK,WAAW,OAAO,IAAI;AAAA,EACnC,QAAQ,EAAE,KAAK,WAAW,OAAO,IAAI;AACvC;AAEO,IAAM,QAAQ;AAAA,EACnB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AACP;AAEA,QAAQ,OAAO,GAAG,SAAS,CAAC,UAAiC;AAC3D,MAAI,MAAM,SAAS,SAAS;AAC1B,UAAM;AAAA,EACR;AACF,CAAC;AAED,IAAM,QAAQ,YAAY;AAC1B,IAAM,UAAU,YAAY,IAAI,QAAQ;AACxC,IAAM,MAAM;AACZ,IAAM,gBAAgB,IAAI,OAAO,GAAG,GAAG,eAAe,GAAG;AACzD,IAAM,cAAc,IAAI,OAAO,IAAI,GAAG,cAAc;AACpD,IAAM,aAAa,IAAI,OAAO,IAAI,GAAG,cAAc;AAEnD,SAAS,cAAqB;AAC5B,QAAM,MAAM,QAAQ;AAEpB,OAAK,IAAI,UAAU,KAAK,QAAQ,MAAM,IAAI,aAAa,MAAM,KAAK;AAChE,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,IAAI,aAAa,KAAK,QAAQ;AAE9C,MAAI,CAAC,UAAU,CAAC,QAAQ,OAAO,OAAO;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,IAAI,WAAW,KAAK;AAEtC,MAAI,cAAc,eAAe,cAAc,SAAS;AACtD,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,IAAI,MAAM,KAAK;AAE5B,MAAI,SAAS,UAAW,SAAS,MAAM,CAAC,QAAS;AAC/C,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,cAAuB;AAC9B,QAAM,QAAQ,QAAQ,IAAI,kBAAkB;AAE5C,MAAI,UAAU,WAAW,UAAU,QAAQ;AACzC,WAAO,UAAU;AAAA,EACnB;AAEA,QAAM,OAAO,QAAQ,IAAI,WAAW;AAEpC,MAAI,SAAS,QAAW;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,OAAO,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;AAEhD,SAAO,eAAe,KAAM,cAAc,KAAK,cAAc;AAC/D;AAEA,SAAS,KAAK,QAAwB;AACpC,MAAI,UAAU,aAAa;AACzB,UAAM,QAAQ,OAAO,SAAS,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE;AAErD,WAAO,aAAe,OAAO,SAAS,EAAE,CAAC,IAAI,OAAQ,SAAS,IAAK,GAAG,CAAC,IAAI,OAAO,QAAQ,GAAG,CAAC;AAAA,EAChG;AAEA,SAAO,aAAe,OAAO,OAAO,KAAK,CAAC;AAC5C;AAEO,SAAS,MAAM,MAAY,OAAuB;AACvD,MAAI,UAAU,UAAU,UAAU,IAAI;AACpC,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK;AACvC;AAEO,SAAS,KAAK,OAAuB;AAC1C,SAAO,UAAU,SAAS,QAAQ,UAAY,KAAK;AACrD;AAEO,SAAS,MAAM,OAAuB;AAC3C,SAAO,MAAM,QAAQ,eAAe,EAAE;AACxC;AAEO,SAAS,MAAM,OAAuB;AAC3C,SAAO,MAAM,KAAK,EAAE;AACtB;AAEO,SAAS,UAAkB;AAChC,SAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,UAAU;AACzD;AAEO,SAAS,IAAI,OAAe,IAAoB;AACrD,SAAO,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAC1D;AAEO,SAAS,KAAK,OAAe,IAAoB;AACtD,MAAI,MAAM,KAAK,KAAK,IAAI;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO;AACX,MAAI,MAAM;AAEV,aAAW,QAAQ,MAAM,MAAM,WAAW,GAAG;AAC3C,QAAI,WAAW,KAAK,IAAI,GAAG;AACzB,aAAO;AACP;AAAA,IACF;AAEA,eAAW,QAAQ,MAAM;AACvB,UAAI,SAAS,KAAK,GAAG;AACnB,eAAO,GAAG,GAAG,SAAI,UAAU,SAAS,KAAK,SAAW;AAAA,MACtD;AAEA,aAAO;AACP,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,QAAQ,OAAuB;AAC7C,UAAQ,OAAO,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC;AAAA,CAAI;AAC5C;AAEO,SAAS,QAAc;AAC5B,UAAQ,OAAO,MAAM,IAAI;AAC3B;AAEO,SAAS,UAAU,UAA4B;AACpD,SAAO,IAAI,SAAS,OAAO,CAAC,YAAY,YAAY,EAAE,EAAE,KAAK,MAAM,SAAS,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC;AAChG;AAEO,SAAS,MAAMA,QAAe,OAAa,OAAe;AAC/D,SAAO,MAAM,MAAM,IAAI,OAAOA,MAAK,CAAC,GAAG;AACzC;AAEO,SAAS,IAAI,MAAsB;AACxC,SAAO,MAAM,UAAU,IAAI,IAAI,GAAG;AACpC;AAEO,SAAS,OAAO,MAAsB;AAC3C,SAAO,MAAM,UAAU,IAAI,IAAI,GAAG;AACpC;AAEO,SAAS,OAAO,MAAsB;AAC3C,SAAO,GAAG,MAAM,UAAU,MAAM,MAAM,CAAC,IAAI,IAAI;AACjD;AAEO,SAAS,OAAO,OAAuB;AAC5C,SAAO,MAAM,UAAU,SAAI,OAAO,KAAK,CAAC;AAC1C;AASO,SAAS,IAAI,MAAgB,SAA+B;AACjE,QAAM,QAAQ,KAAK,IAAI,QAAQ,IAAI,GAAG,GAAG;AACzC,QAAM,MAAM,KAAK,IAAI,QAAQ,OAAO,IAAI,MAAM,QAAQ,MAAM,IAAI,EAAE;AAClE,QAAM,SAAS,KAAK,OAAO,CAAC,KAAK,QAAQ,KAAK,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC;AACrE,QAAM,QAAQ,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,QAAQ,QAAQ,CAAC,CAAC;AAE3D,QAAM,OAAO,CAAC,UAA0B,MAAM,UAAU,KAAK;AAE7D,QAAM,SAAS;AAAA,IACb,QAAQ,YAAY,OAAO,WAAW;AAAA,IACtC,QAAQ,OAAO,YAAY;AAAA,EAC7B;AACA,QAAM,UACJ,QAAQ,UAAU,SACd,GAAG,KAAK,SAAI,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,KAClC,GAAG,KAAK,SAAI,CAAC,GAAG,MAAM,GAAG,KAAK,UAAK,CAAC,GAAG,MAAM,QAAQ,QAAQ,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AACrF,QAAM,MAAM,GAAG,KAAK,QAAG,CAAC,GAAG,KAAK,SAAS,QAAQ,CAAC,CAAC,GAAG,KAAK,SAAI,OAAO,KAAK,IAAI,GAAG,QAAQ,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,QAAG,CAAC;AAC3H,QAAM,SAAS,GAAG,KAAK,QAAG,CAAC,GAAG,KAAK,SAAI,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,QAAG,CAAC;AAErE,QAAM,OAAO,KAAK;AAAA,IAChB,CAAC,QACC,GAAG,KAAK,QAAG,CAAC,IAAI,IAAI,KAAK,QAAQ,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,QAAG,CAAC;AAAA,EAC1F;AAEA,SAAO,CAAC,KAAK,GAAG,MAAM,MAAM;AAC9B;AAEO,SAAS,SAAS,MAAc,OAAe,QAAQ,GAAW;AACvE,QAAM,SAAS,UAAU,IAAI,QAAQ,KAAK,MAAO,OAAO,QAAS,KAAK;AAEtE,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,OAAO,MAAM,IAAI,MAAM,MAAM,OAAO,QAAQ,MAAM;AAAA,EACjE;AACF;AAEO,SAAS,SAAS,IAAoB;AAC3C,MAAI,KAAK,KAAM;AACb,WAAO,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC;AAAA,EAClC;AAEA,QAAM,UAAU,KAAK,MAAM,KAAK,GAAI;AAEpC,MAAI,UAAU,IAAI;AAChB,WAAO,GAAG,OAAO,OAAO,CAAC;AAAA,EAC3B;AAEA,SAAO,GAAG,OAAO,KAAK,MAAM,UAAU,EAAE,CAAC,CAAC,IAAI,OAAO,UAAU,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AACrF;AAEO,SAAS,MAAM,OAAe,MAAsB;AACzD,SAAO,GAAG,OAAO,KAAK,CAAC,IAAI,IAAI,GAAG,UAAU,IAAI,KAAK,GAAG;AAC1D;AAEO,SAAS,QAAQ,SAAiB,MAAqB;AAC5D,UAAQ,OAAO,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;AAAA,CAAI;AAErE,MAAI,SAAS,QAAW;AACtB,YAAQ,OAAO,MAAM,GAAG,MAAM,OAAO,KAAK,IAAI,EAAE,CAAC;AAAA,CAAI;AAAA,EACvD;AACF;AAEO,SAAS,UAAU,MAA0B;AAClD,MAAI,CAAC,QAAQ,OAAO,OAAO;AACzB,WAAO,MAAM;AAAA,EACf;AAEA,UAAQ,OAAO,MAAM,YAAc,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,EAAE;AAE9D,SAAO,MAAM;AACX,YAAQ,OAAO,MAAM,WAAa;AAAA,EACpC;AACF;AAEO,SAAS,MAAM,MAAc,aAAa,KAAiB;AAChE,MAAI,CAAC,QAAQ,OAAO,OAAO;AACzB,SAAK,IAAI;AACT,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,KAAK;AACT,QAAM,OAAO,MAAY;AACvB,YAAQ,OAAO;AAAA,MACb,YAAc,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,UAAU,MAAM,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,CAAC,CAAC;AAAA,IAC1F;AACA,SAAK,CAAC;AAAA,EACR;AAEA,OAAK;AACL,QAAM,QAAQ,YAAY,MAAM,UAAU;AAE1C,SAAO,MAAM;AACX,kBAAc,KAAK;AACnB,YAAQ,OAAO,MAAM,WAAa;AAAA,EACpC;AACF;AAEO,SAAS,WAAmB;AACjC,SAAO,KAAK,GAAG,MAAM,UAAU,MAAM,CAAC,GAAG,MAAM,QAAQ,QAAQ,CAAC,EAAE;AACpE;AAEO,SAAS,OAAiB;AAC/B,QAAM,OAAO,CAAC,UAA0B,MAAM,UAAU,KAAK;AAE7D,SAAO;AAAA,IACL,KAAK,aAAQ;AAAA,IACb,GAAG,KAAK,mCAAU,CAAC,OAAO,SAAS,CAAC;AAAA,IACpC,KAAK,yBAAU;AAAA,EACjB;AACF;","names":["count"]}
@@ -6,7 +6,7 @@ import {
6
6
  paint,
7
7
  prompt,
8
8
  pulse
9
- } from "./chunk-RNNW7OW2.js";
9
+ } from "./chunk-6J7OH2SF.js";
10
10
 
11
11
  // src/device-auth.ts
12
12
  import { execFileSync } from "child_process";
@@ -138,4 +138,4 @@ export {
138
138
  login,
139
139
  ensureProject
140
140
  };
141
- //# sourceMappingURL=chunk-MFTC7XL2.js.map
141
+ //# sourceMappingURL=chunk-J7MVIPMW.js.map
package/build/cli.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  ensureProject,
11
11
  login
12
- } from "./chunk-MFTC7XL2.js";
12
+ } from "./chunk-J7MVIPMW.js";
13
13
  import {
14
14
  blank,
15
15
  bold,
@@ -19,7 +19,7 @@ import {
19
19
  logo,
20
20
  paint,
21
21
  wordmark
22
- } from "./chunk-RNNW7OW2.js";
22
+ } from "./chunk-6J7OH2SF.js";
23
23
  import "./chunk-BODO6HIH.js";
24
24
  import "./chunk-UAWBPTDW.js";
25
25
 
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ensureProject,
3
3
  login
4
- } from "./chunk-MFTC7XL2.js";
5
- import "./chunk-RNNW7OW2.js";
4
+ } from "./chunk-J7MVIPMW.js";
5
+ import "./chunk-6J7OH2SF.js";
6
6
  import "./chunk-UAWBPTDW.js";
7
7
  export {
8
8
  ensureProject,
package/build/reporter.js CHANGED
@@ -32,7 +32,7 @@ import {
32
32
  status,
33
33
  transient,
34
34
  width
35
- } from "./chunk-RNNW7OW2.js";
35
+ } from "./chunk-6J7OH2SF.js";
36
36
  import "./chunk-FJI2CMCE.js";
37
37
  import {
38
38
  ensureWalkwrightDir,
package/build/ui.js CHANGED
@@ -24,7 +24,7 @@ import {
24
24
  transient,
25
25
  width,
26
26
  wordmark
27
- } from "./chunk-RNNW7OW2.js";
27
+ } from "./chunk-6J7OH2SF.js";
28
28
  import "./chunk-UAWBPTDW.js";
29
29
  export {
30
30
  action,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "walkwright",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "description": "Walkwright runtime: walk your app with Playwright and record a browsable report",
6
6
  "repository": {
package/src/ui.ts CHANGED
@@ -318,16 +318,15 @@ export function pulse(text: string, intervalMs = 500): () => void {
318
318
  }
319
319
 
320
320
  export function wordmark(): string {
321
- return bold(`${paint("accent", "MAP")}${paint("text", "WRIGHT")}`);
321
+ return bold(`${paint("accent", "WALK")}${paint("text", "WRIGHT")}`);
322
322
  }
323
323
 
324
324
  export function logo(): string[] {
325
325
  const mark = (value: string): string => paint("accent", value);
326
326
 
327
327
  return [
328
- mark(" ┌─■─┐"),
329
- `${mark(" ■ ■")} ${wordmark()}`,
330
- mark(" ┌┴┐"),
331
- mark(" ■ ■"),
328
+ mark(""),
329
+ `${mark(" ┌─┼─┐")} ${wordmark()}`,
330
+ mark(" ■ ■ □"),
332
331
  ];
333
332
  }