linecraft 0.5.4 → 0.5.6

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 (66) hide show
  1. package/LICENSE +21 -59
  2. package/README.md +30 -0
  3. package/lib/components/code-debug.d.ts +2 -0
  4. package/lib/components/code-debug.d.ts.map +1 -1
  5. package/lib/components/code-debug.js +104 -198
  6. package/lib/components/code-debug.js.map +1 -1
  7. package/lib/components/code-debug.test.d.ts +2 -0
  8. package/lib/components/code-debug.test.d.ts.map +1 -0
  9. package/lib/components/code-debug.test.js +245 -0
  10. package/lib/components/code-debug.test.js.map +1 -0
  11. package/lib/components/fill.d.ts +2 -1
  12. package/lib/components/fill.d.ts.map +1 -1
  13. package/lib/components/fill.js.map +1 -1
  14. package/lib/components/progress-bar-grid.d.ts.map +1 -1
  15. package/lib/components/progress-bar-grid.js +5 -3
  16. package/lib/components/progress-bar-grid.js.map +1 -1
  17. package/lib/components/prompt.js +1 -1
  18. package/lib/components/prompt.js.map +1 -1
  19. package/lib/components/section.js +1 -1
  20. package/lib/components/section.js.map +1 -1
  21. package/lib/components/segments.js +4 -4
  22. package/lib/components/segments.js.map +1 -1
  23. package/lib/components/spinner.d.ts +2 -1
  24. package/lib/components/spinner.d.ts.map +1 -1
  25. package/lib/components/spinner.js +1 -1
  26. package/lib/components/spinner.js.map +1 -1
  27. package/lib/components/styled.d.ts +3 -2
  28. package/lib/components/styled.d.ts.map +1 -1
  29. package/lib/components/styled.js +1 -1
  30. package/lib/components/styled.js.map +1 -1
  31. package/lib/index.d.ts +2 -0
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +1 -0
  34. package/lib/index.js.map +1 -1
  35. package/lib/layout/grid.d.ts.map +1 -1
  36. package/lib/layout/grid.js +1 -2
  37. package/lib/layout/grid.js.map +1 -1
  38. package/lib/layout/grid.test.js +3 -3
  39. package/lib/layout/grid.test.js.map +1 -1
  40. package/lib/native/region.test.js +1 -1
  41. package/lib/native/region.test.js.map +1 -1
  42. package/lib/region-resize.test.js +3 -3
  43. package/lib/region-resize.test.js.map +1 -1
  44. package/lib/types.d.ts +6 -5
  45. package/lib/types.d.ts.map +1 -1
  46. package/lib/utils/colors.d.ts.map +1 -1
  47. package/lib/utils/colors.js +50 -8
  48. package/lib/utils/colors.js.map +1 -1
  49. package/lib/utils/colors.test.js.map +1 -1
  50. package/lib/utils/debug-log.js +1 -1
  51. package/lib/utils/debug-log.js.map +1 -1
  52. package/lib/utils/terminal-theme.d.ts +17 -28
  53. package/lib/utils/terminal-theme.d.ts.map +1 -1
  54. package/lib/utils/terminal-theme.js +66 -38
  55. package/lib/utils/terminal-theme.js.map +1 -1
  56. package/lib/utils/text.d.ts +62 -2
  57. package/lib/utils/text.d.ts.map +1 -1
  58. package/lib/utils/text.js +396 -37
  59. package/lib/utils/text.js.map +1 -1
  60. package/lib/utils/text.test.d.ts +2 -0
  61. package/lib/utils/text.test.d.ts.map +1 -0
  62. package/lib/utils/text.test.js +237 -0
  63. package/lib/utils/text.test.js.map +1 -0
  64. package/lib/utils/wait-for-spacebar.js +1 -1
  65. package/lib/utils/wait-for-spacebar.js.map +1 -1
  66. package/package.json +2 -8
package/LICENSE CHANGED
@@ -1,59 +1,21 @@
1
- Fair Labor License (FLL) v1.2
2
-
3
- © 2025 Linecraft Contributors
4
-
5
- SPDX-License-Identifier: LicenseRef-FLL-1.2
6
-
7
- 1. Purpose
8
- The Fair Labor License exists to ensure that free and open software does not contribute to extreme labor inequality. When organizations compensate their workers fairly, this software is free to use. When they do not, they must purchase a license — ensuring that value created through labor is not taken without accountability.
9
-
10
- 2. License Grant
11
- Subject to the conditions in this license, the author(s) grant permission to any individual or organization to use, reproduce, modify, and distribute this software.
12
-
13
- 3. Evaluation Use Exception
14
- Anyone may download, install, and use the software solely for evaluation and testing purposes. Evaluation use may not exceed 90 days and may not include operational, commercial, or production use.
15
-
16
- 4. Fair Compensation Condition (Eligibility for Free Use)
17
- This software is free to use for any individual or organization that meets at least one of the following conditions at the time of operational use:
18
-
19
- a. Individuals
20
- The individual's net worth is under 5 million USD.
21
-
22
- b. Organizations
23
- The organization is Fair Labor Compliant, defined as:
24
- - The CEO’s (or highest-paid executive’s) total annual compensation is no more than fifteen (15) times the total annual compensation of the organization’s median employee, and
25
- - Eligibility is assessed on a consolidated basis, including all parent and subsidiary entities under common control or brand identity.
26
-
27
- Definitions
28
- - “Total annual compensation” includes wages, bonuses, overtime, equity or stock-based compensation, and employer-provided benefits.
29
- - “Median employee” refers to the worker whose compensation is the exact midpoint of all workers, including part-time and contract labor when they constitute a majority of operational personnel.
30
- - “Operational use” means deployment or use of the software in any product, system, or service that provides business value, revenue, or ongoing internal operations beyond evaluation, whether used directly or indirectly, including when incorporated as a dependency or component of another product, system, or service.
31
-
32
- 5. Paid License Requirement
33
- If an individual or organization does not meet the Fair Compensation Condition at the time of operational use, they must obtain a paid license from the author(s) or an authorized licensing provider such as fllicense.org before such use begins.
34
-
35
- Unauthorized operational use constitutes copyright infringement.
36
-
37
- 6. Self-Attestation and Documentation
38
- Licensees utilizing the software under the free-use provisions must self-attest compliance and maintain documentation supporting eligibility. Upon request by the author(s) or a licensing provider, documentation must be provided within 30 days.
39
-
40
- Failure to provide documentation is considered a material breach of this license.
41
-
42
- 7. Change in Eligibility / Cure Period
43
- If a licensee’s eligibility changes, they must:
44
- - Either purchase a paid license within 30 days, or
45
- - Immediately cease operational use of the software.
46
-
47
- Restoring eligibility restores the rights granted under this license.
48
-
49
- 8. No Misrepresentation
50
- Licensees may not claim to be Fair Labor Compliant, nor use the Fair Labor License name or abbreviations in sales, marketing, or investor materials, unless they meet the Fair Compensation Condition.
51
-
52
- 9. No Warranty
53
- This software is provided “as is”, without warranty of any kind, express or implied, including merchantability, fitness for a particular purpose, and noninfringement. Use is at your own risk.
54
-
55
- 10. Limitation of Liability
56
- In no event shall the author(s) be liable for any claim, damages, or liability arising from the software or its use.
57
-
58
- 11. Governing Law
59
- This license is governed by the copyright law applicable in the jurisdiction of the author(s).
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Linecraft Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -142,6 +142,36 @@ ref.delete(); // Remove it
142
142
  r.destroy(true); // Clean up and restore terminal (true = clear first)
143
143
  ```
144
144
 
145
+ ## Semantic Themes
146
+
147
+ Linecraft includes a built-in semantic theme system that automatically adapts colors based on whether the terminal is in light or dark mode. Instead of hardcoding ANSI colors, you can use semantic tokens:
148
+
149
+ - `base`: The default text color (gray in both themes)
150
+ - `muted`: Dimmed text for line numbers or separators (dimmed white on dark, dimmed gray on light)
151
+ - `highlight`: Emphasized text (white on dark, bold black on light)
152
+ - `accent`: Primary accent color (bold blue in both themes)
153
+ - `location`: For file paths and locations (magenta in both themes)
154
+ - `success`: Success messages (bright green on dark, green on light)
155
+ - `warning`: Warning messages (bright yellow on dark, bright magenta on light)
156
+ - `error`: Error messages (bright red on dark, red on light)
157
+ - `info`: Informational messages (blue in both themes)
158
+
159
+ You can use these tokens anywhere a `Color` is expected:
160
+
161
+ ```typescript
162
+ import { Styled } from 'linecraft';
163
+
164
+ // Automatically uses appropriate color based on terminal theme
165
+ const text = Styled({ color: 'base' }, 'Auto-themed text');
166
+ const error = Styled({ color: 'error' }, 'Error message');
167
+ const path = Styled({ color: 'location' }, '/path/to/file.ts');
168
+
169
+ // You can also resolve them manually if needed
170
+ import { autoColor, autoStyle } from 'linecraft';
171
+ const color = autoColor('warning'); // Returns just the color
172
+ const style = autoStyle('accent'); // Returns full TextStyle (color, bold, etc.)
173
+ ```
174
+
145
175
  ## Components
146
176
 
147
177
  ### Styled
@@ -21,6 +21,8 @@ export interface CodeDebugOptions {
21
21
  errorCode?: string;
22
22
  /** Short message to show connected to underline (optional) */
23
23
  shortMessage?: string;
24
+ /** Placement of short message: 'left' or 'right' (default: 'right', auto: 'left' when target is near end of long line) */
25
+ shortMessagePlacement?: 'left' | 'right' | 'auto';
24
26
  /** Short file path to display */
25
27
  filePath: string;
26
28
  /** Full resolved file path for clickable link */
@@ -1 +1 @@
1
- {"version":3,"file":"code-debug.d.ts","sourceRoot":"","sources":["../../src/components/code-debug.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAUhE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,qHAAqH;IACrH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkID;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CA6V9D"}
1
+ {"version":3,"file":"code-debug.d.ts","sourceRoot":"","sources":["../../src/components/code-debug.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAShE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,qHAAqH;IACrH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0HAA0H;IAC1H,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAClD,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CA8W9D"}
@@ -1,123 +1,27 @@
1
1
  // Code debug component for displaying code errors/warnings with context
2
2
  import { callComponent } from '../component.js';
3
3
  import { applyStyle } from '../utils/colors.js';
4
- import { stripAnsi, truncateToWidth, countVisibleChars, splitAtVisiblePos } from '../utils/text.js';
4
+ import { stripAnsi, truncateToWidth, truncateFocusRange, mapColumnToDisplay, countVisibleChars, splitAtVisiblePos } from '../utils/text.js';
5
5
  import { fileLink } from '../utils/file-link.js';
6
6
  import { Styled } from './styled.js';
7
7
  import { grid as Grid } from '../layout/grid.js';
8
- import { getLineNumberColor, isDarkTerminal } from '../utils/terminal-theme.js';
9
- function calculateVisibleRange(code, availableWidth, targetStartCol, targetEndCol, maxColumn) {
10
- const plainCode = stripAnsi(code);
11
- const codeLength = plainCode.length;
12
- // If code fits, show everything
13
- if (codeLength <= availableWidth) {
14
- return {
15
- startCol: 1,
16
- endCol: codeLength,
17
- hasEllipsisStart: false,
18
- hasEllipsisEnd: false,
19
- };
20
- }
21
- // If maxColumn is set, we need to ensure we don't show beyond it
22
- const effectiveMaxCol = maxColumn ? Math.min(maxColumn, codeLength) : codeLength;
23
- // Calculate how much space we need for the target columns
24
- const targetWidth = targetEndCol
25
- ? targetEndCol - targetStartCol + 1
26
- : 1; // Just the arrow
27
- // If target doesn't fit, we'll need to truncate
28
- if (targetWidth > availableWidth - 6) { // -6 for ellipsis on both sides if needed
29
- // Target is too wide, just show middle with ellipsis
30
- const midPoint = Math.floor((availableWidth - 6) / 2);
31
- const startCol = Math.max(1, targetStartCol - midPoint);
32
- const endCol = Math.min(effectiveMaxCol, startCol + availableWidth - 6);
33
- return {
34
- startCol,
35
- endCol,
36
- hasEllipsisStart: startCol > 1,
37
- hasEllipsisEnd: endCol < codeLength,
38
- };
39
- }
40
- // Try to center the target in the available space
41
- // First, determine if we'll need ellipsis on both sides
42
- const willNeedEllipsisStart = targetStartCol > 1 || (targetStartCol === 1 && codeLength > availableWidth);
43
- const willNeedEllipsisEnd = (targetEndCol ?? targetStartCol) < codeLength || codeLength > availableWidth;
44
- const ellipsisWidth = (willNeedEllipsisStart ? 3 : 0) + (willNeedEllipsisEnd ? 3 : 0);
45
- const effectiveAvailableWidth = availableWidth - ellipsisWidth;
46
- const padding = Math.floor((effectiveAvailableWidth - targetWidth) / 2);
47
- let startCol = Math.max(1, targetStartCol - padding);
48
- let endCol = Math.min(effectiveMaxCol, startCol + effectiveAvailableWidth - 1);
49
- // Adjust if we hit boundaries
50
- if (endCol - startCol + 1 > effectiveAvailableWidth) {
51
- endCol = startCol + effectiveAvailableWidth - 1;
52
- }
53
- if (endCol > effectiveMaxCol) {
54
- endCol = effectiveMaxCol;
55
- startCol = Math.max(1, endCol - effectiveAvailableWidth + 1);
56
- }
57
- if (startCol < 1) {
58
- startCol = 1;
59
- endCol = Math.min(effectiveMaxCol, effectiveAvailableWidth);
60
- }
61
- // Check if we need ellipsis
62
- const hasEllipsisStart = startCol > 1;
63
- const hasEllipsisEnd = endCol < codeLength;
64
- return {
65
- startCol,
66
- endCol,
67
- hasEllipsisStart,
68
- hasEllipsisEnd,
69
- };
70
- }
71
- /**
72
- * Truncate code line to show specific column range with ellipsis
73
- */
74
- function truncateCodeLine(code, visibleRange, availableWidth) {
75
- const { startCol, endCol, hasEllipsisStart, hasEllipsisEnd } = visibleRange;
76
- const plainCode = stripAnsi(code);
77
- if (!hasEllipsisStart && !hasEllipsisEnd) {
78
- // No truncation needed, but ensure it fits
79
- return truncateToWidth(code, availableWidth);
80
- }
81
- // Extract the visible portion (1-based columns in plain text)
82
- const visiblePlain = plainCode.substring(startCol - 1, endCol);
83
- // Calculate available width for code (minus ellipsis)
84
- const ellipsisWidth = (hasEllipsisStart ? 3 : 0) + (hasEllipsisEnd ? 3 : 0);
85
- const codeWidth = availableWidth - ellipsisWidth;
86
- // Truncate the visible portion if it's still too wide
87
- let truncatedPlain = visiblePlain;
88
- if (stripAnsi(visiblePlain).length > codeWidth) {
89
- truncatedPlain = truncateToWidth(visiblePlain, codeWidth);
90
- }
91
- if (hasEllipsisStart && hasEllipsisEnd) {
92
- // Truncate both ends - show the visible range portion (no middle ellipsis)
93
- // The visible range already contains the target columns, just truncate if needed
94
- return `...${truncatedPlain}...`;
95
- }
96
- else if (hasEllipsisStart) {
97
- return `...${truncatedPlain}`;
98
- }
99
- else {
100
- return `${truncatedPlain}...`;
101
- }
102
- }
8
+ import { autoColor } from '../utils/terminal-theme.js';
103
9
  /**
104
10
  * CodeDebug component - displays code errors/warnings with context
105
11
  */
106
12
  export function CodeDebug(options) {
107
13
  return (ctx) => {
108
- const { startLine, startColumn, endColumn, lineBefore, errorLine, lineAfter, message, errorCode, shortMessage, filePath, fullPath, baseDir, type = 'error', maxColumn, } = options;
14
+ const { startLine, startColumn, endColumn, lineBefore, errorLine, lineAfter, message, errorCode, shortMessage, shortMessagePlacement = 'auto', filePath, fullPath, baseDir, type = 'error', maxColumn, } = options;
109
15
  // If availableWidth is Infinity (during Grid measurement), use a reasonable default
110
16
  // Otherwise use the actual available width
111
17
  const availableWidth = Number.isFinite(ctx.availableWidth) ? ctx.availableWidth : 80;
112
18
  // Color scheme based on type
113
- const colors = {
114
- error: { primary: 'red', secondary: 'brightRed', message: 'brightRed' },
115
- warning: { primary: 'yellow', secondary: 'brightYellow', message: 'brightYellow' },
116
- info: { primary: 'cyan', secondary: 'brightCyan', message: 'brightCyan' },
19
+ const colorScheme = {
20
+ primary: type,
21
+ message: type,
117
22
  };
118
- const colorScheme = colors[type];
119
23
  // Get appropriate line number color based on terminal theme (muted color)
120
- const lineNumberColor = getLineNumberColor(); // For line numbers (muted)
24
+ const lineNumColor = 'muted';
121
25
  // Calculate available width for code (reserve space for line numbers, separator, and spaces)
122
26
  // Calculate the maximum width needed for any line number that will be displayed
123
27
  const lineNumbersToCheck = [startLine];
@@ -129,68 +33,34 @@ export function CodeDebug(options) {
129
33
  }
130
34
  const lineNumWidth = Math.max(...lineNumbersToCheck.map(n => String(n).length));
131
35
  const codeAreaWidth = availableWidth - lineNumWidth - 3; // -3 for " │ " (space, pipe, space)
132
- // Calculate visible range for error line
36
+ // Use truncateFocusRange to show the target range with proper truncation
133
37
  const targetEndCol = endColumn ?? startColumn;
134
- const plainErrorLine = stripAnsi(errorLine);
135
- const effectiveMaxCol = maxColumn ? Math.min(maxColumn, plainErrorLine.length) : plainErrorLine.length;
136
- const visibleRange = calculateVisibleRange(errorLine, codeAreaWidth, startColumn, targetEndCol, effectiveMaxCol);
137
- // Truncate error line
138
- const truncatedErrorLine = truncateCodeLine(errorLine, visibleRange, codeAreaWidth);
139
- // Calculate arrow/underline position relative to the truncated error line display
140
- // Map original column positions to display positions
141
- const truncatedPlain = stripAnsi(truncatedErrorLine);
142
- // Helper to map original column to display position
143
- const mapColumnToDisplay = (originalCol) => {
144
- if (visibleRange.hasEllipsisStart && visibleRange.hasEllipsisEnd) {
145
- // Format: "...start...end..."
146
- // Visible range is in the middle
147
- if (originalCol < visibleRange.startCol) {
148
- return 1; // Before visible, point to start
149
- }
150
- else if (originalCol > visibleRange.endCol) {
151
- return truncatedPlain.length; // After visible, point to end
152
- }
153
- else {
154
- // In visible range: position = 4 (for "...") + (col - startCol + 1)
155
- return 4 + (originalCol - visibleRange.startCol);
156
- }
157
- }
158
- else if (visibleRange.hasEllipsisStart) {
159
- // Format: "...code"
160
- if (originalCol < visibleRange.startCol) {
161
- return 1;
162
- }
163
- else {
164
- return 4 + (originalCol - visibleRange.startCol);
165
- }
166
- }
167
- else if (visibleRange.hasEllipsisEnd) {
168
- // Format: "code..."
169
- if (originalCol > visibleRange.endCol) {
170
- return truncatedPlain.length;
171
- }
172
- else {
173
- return originalCol;
174
- }
175
- }
176
- else {
177
- // No ellipsis, direct mapping
178
- return originalCol;
179
- }
38
+ const defaultCodeColor = autoColor('base');
39
+ const styledErrorLine = applyStyle(errorLine, { color: defaultCodeColor });
40
+ const truncateResult = truncateFocusRange(styledErrorLine, codeAreaWidth, startColumn, targetEndCol, maxColumn);
41
+ const truncatedErrorLine = truncateResult.text;
42
+ const visibleStartCol = truncateResult.visibleStartCol;
43
+ const visibleEndCol = truncateResult.visibleEndCol;
44
+ const rangeStartCol = truncateResult.rangeStartCol;
45
+ const rangeEndCol = truncateResult.rangeEndCol;
46
+ // Helper to map original column to display position using the actual visible range
47
+ const mapColumnToDisplayLocal = (originalCol) => {
48
+ const result = mapColumnToDisplay(errorLine, truncatedErrorLine, visibleStartCol, visibleEndCol, originalCol, rangeStartCol, rangeEndCol);
49
+ return result;
180
50
  };
181
51
  // Build the code block lines
182
52
  const codeLines = [];
183
53
  // Icon and message at the top (Oxlint style)
184
54
  // Use grid to handle wrapping automatically
185
55
  const icon = type === 'error' ? '✖' : type === 'warning' ? '⚠' : 'ℹ';
186
- const iconStyled = applyStyle(icon, { color: colorScheme.message });
56
+ const iconStyled = applyStyle(icon, { color: colorScheme.primary });
187
57
  // Build the combined message text: errorCode (if present) + message
188
58
  // The errorCode should be underlined and bold, followed by ": ", then the message
189
59
  // All parts should have the message color
190
60
  let messageText;
191
61
  if (errorCode) {
192
62
  const errorCodeStyled = applyStyle(errorCode, {
193
- color: colorScheme.message,
63
+ color: colorScheme.primary,
194
64
  underline: true,
195
65
  bold: true
196
66
  });
@@ -226,27 +96,27 @@ export function CodeDebug(options) {
226
96
  : filePath;
227
97
  // Build location line parts
228
98
  const curveIndent = ' '.repeat(lineNumWidth + 1);
229
- const curve = applyStyle('╭─', { color: 'brightBlack' });
99
+ const curve = applyStyle('╭─', { color: 'muted' });
230
100
  const bracketOpen = '[';
231
101
  const colon1 = ':';
232
- // Apply subtle color to line/column numbers (not colons)
233
- const lineNumColor = isDarkTerminal() ? 'magenta' : 'magenta';
234
- const lineNum = applyStyle(String(startLine), { color: lineNumColor });
102
+ // Use location color (magenta) for line/column numbers
103
+ const locationNumColor = 'location';
104
+ const lineNum = applyStyle(String(startLine), { color: locationNumColor });
235
105
  const colon2 = ':';
236
- const colNum = applyStyle(String(startColumn), { color: lineNumColor });
106
+ const colNum = applyStyle(String(startColumn), { color: locationNumColor });
237
107
  const bracketClose = ']';
238
108
  // Calculate max width for path: available width minus fixed parts
239
109
  // Fixed parts: curveIndent + ╭─ + [ + : + lineNum + : + colNum + ]
240
110
  // Note: lineNum and colNum are now styled, so we need to use plain strings for width calculation
241
111
  const lineNumPlain = String(startLine);
242
112
  const colNumPlain = String(startColumn);
243
- const fixedParts = curveIndent + curve + bracketOpen + colon1 + lineNumPlain + colon2 + colNumPlain + bracketClose;
113
+ const fixedParts = curveIndent + '╭─[' + lineNumPlain + ':' + colNumPlain + ']';
244
114
  const fixedPartsWidth = countVisibleChars(fixedParts);
245
115
  // Ensure pathMaxWidth is finite and reasonable (cap at 40 to prevent extremely long paths)
246
116
  const pathMaxWidth = Math.max(10, Math.min(40, availableWidth - fixedPartsWidth));
247
117
  // Create clickable file link with styling and max width constraint
248
118
  const pathWithLink = fileLink(fullPath, pathText);
249
- const pathStyled = Styled({ color: 'blue', bold: true, overflow: 'ellipsis-start', max: pathMaxWidth }, pathWithLink);
119
+ const pathStyled = Styled({ color: 'accent', overflow: 'ellipsis-start', max: pathMaxWidth }, pathWithLink);
250
120
  // Use Grid with auto columns (content-based width, no padding)
251
121
  // Template: [curveIndent (auto)][╭─ (auto)][[ (auto)][path (auto)][: (auto)][line (auto)][: (auto)][column (auto)][] (auto)]
252
122
  const locationGrid = Grid({
@@ -270,50 +140,60 @@ export function CodeDebug(options) {
270
140
  const beforeLineNum = String(startLine - 1);
271
141
  const beforeLineNumPadded = beforeLineNum.padStart(lineNumWidth);
272
142
  const truncatedBefore = truncateToWidth(lineBefore, codeAreaWidth);
273
- // Make non-error lines slightly dimmer: darker on dark terminals, whiter on light terminals
274
- const dimmedBefore = isDarkTerminal()
275
- ? applyStyle(truncatedBefore, { dim: true })
276
- : applyStyle(truncatedBefore, { color: 'brightBlack' });
277
- codeLines.push(applyStyle(`${beforeLineNumPadded} `, { color: lineNumberColor, dim: isDarkTerminal() }) +
278
- applyStyle('│ ', { color: 'brightBlack' }) + dimmedBefore);
143
+ // Make non-error lines slightly dimmer
144
+ const dimmedBefore = applyStyle(truncatedBefore, { color: 'muted' });
145
+ codeLines.push(applyStyle(`${beforeLineNumPadded} `, { color: lineNumColor }) +
146
+ applyStyle('│ ', { color: 'muted' }) + dimmedBefore);
279
147
  }
280
148
  // Error line (with space before code)
281
- // Highlight the error range if endColumn is specified
149
+ // truncatedErrorLine already has the default color applied
282
150
  let highlightedErrorLine = truncatedErrorLine;
151
+ // Highlight the error range if endColumn is specified
283
152
  if (endColumn && endColumn > startColumn) {
284
- const highlightStart = mapColumnToDisplay(startColumn); // 1-based
285
- const highlightEnd = mapColumnToDisplay(endColumn); // 1-based
153
+ // Map columns to display positions in the truncated (and styled) text
154
+ const highlightStart = mapColumnToDisplayLocal(startColumn); // 1-based display position
155
+ const highlightEnd = mapColumnToDisplayLocal(endColumn); // 1-based display position
286
156
  // Split at highlight start and end positions (splitAtVisiblePos uses 0-based)
287
- const { before: beforeHighlight } = splitAtVisiblePos(truncatedErrorLine, highlightStart - 1);
288
- const remainingAfterStart = truncatedErrorLine.substring(beforeHighlight.length);
157
+ const { before: beforeHighlight, after: remainingAfterStart } = splitAtVisiblePos(highlightedErrorLine, highlightStart - 1);
289
158
  const highlightLength = highlightEnd - highlightStart + 1;
290
- const { before: highlightRange } = splitAtVisiblePos(remainingAfterStart, highlightLength);
291
- const afterHighlight = remainingAfterStart.substring(highlightRange.length);
292
- // Apply highlight color: brighter on dark terminal, whiter on light terminal
293
- const highlightColor = isDarkTerminal() ? 'brightWhite' : 'white';
294
- const highlightedRange = applyStyle(highlightRange, { color: highlightColor });
295
- highlightedErrorLine = beforeHighlight + highlightedRange + afterHighlight;
159
+ const { before: highlightRange, after: afterHighlight } = splitAtVisiblePos(remainingAfterStart, highlightLength);
160
+ // Strip existing ANSI codes from highlight range and apply new highlight color
161
+ // This ensures the highlight color properly overrides the default code color
162
+ const highlightPlain = stripAnsi(highlightRange);
163
+ const highlightedRangeStyled = applyStyle(highlightPlain, { color: 'highlight' });
164
+ highlightedErrorLine = beforeHighlight + highlightedRangeStyled + afterHighlight;
296
165
  }
297
166
  const errorLineNum = String(startLine);
298
167
  const errorLineNumPadded = errorLineNum.padStart(lineNumWidth);
299
- let errorLineDisplay = applyStyle(`${errorLineNumPadded} `, { color: lineNumberColor, dim: isDarkTerminal() }) +
300
- applyStyle('│ ', { color: 'brightBlack' }) + highlightedErrorLine;
168
+ let errorLineDisplay = applyStyle(`${errorLineNumPadded} `, { color: lineNumColor }) +
169
+ applyStyle('│ ', { color: 'muted' }) + highlightedErrorLine;
301
170
  codeLines.push(errorLineDisplay);
302
171
  // Underline line (Oxlint style)
303
172
  // Format: "[lineNumWidth spaces][1 space][│][1 space][dots][underline]"
304
173
  // Calculate positions relative to the code (after "│ ")
305
- const underlineStartInCode = mapColumnToDisplay(startColumn);
306
- const underlineEndInCode = endColumn ? mapColumnToDisplay(endColumn) : underlineStartInCode;
174
+ const underlineStartInCode = mapColumnToDisplayLocal(startColumn);
175
+ const underlineEndInCode = endColumn ? mapColumnToDisplayLocal(endColumn) : underlineStartInCode;
307
176
  const underlineLength = underlineEndInCode - underlineStartInCode + 1;
308
- // Spaces to align with the start of the underline (position in code, 1-based, minus 1 for 0-based)
177
+ // Spaces to align with the start of the underline
178
+ // underlineStartInCode is position in truncated text (which is what's displayed after │ )
179
+ // The ellipsis is PART of the displayed text, so we use the position directly
180
+ // Position is 1-based, so spacesBefore = underlineStartInCode - 1
309
181
  const spacesBefore = Math.max(0, underlineStartInCode - 1);
310
182
  // Underline line: line number width + space + │ + space + spaces + underline
311
- let indicatorLine = ' '.repeat(lineNumWidth) + ' ' + applyStyle('│', { color: 'brightBlack' }) + ' ' +
183
+ let indicatorLine = ' '.repeat(lineNumWidth) + ' ' + applyStyle('│', { color: 'muted' }) + ' ' +
312
184
  ' '.repeat(spacesBefore);
313
185
  // Calculate connectCol for short message (if present)
186
+ // This is the position where the T-bar (┬) will be, which is the middle of the underline
187
+ // Use positions in the truncated text (which is what's displayed)
314
188
  const connectCol = shortMessage && underlineLength > 1
315
189
  ? underlineStartInCode + Math.floor(underlineLength / 2)
316
190
  : underlineStartInCode;
191
+ // Calculate the position of the T-bar within the indicator line (after │ and space)
192
+ // Prefix length: lineNumWidth + 3
193
+ // spacesBefore: number of spaces after prefix
194
+ // Underline starts at: lineNumWidth + 3 + spacesBefore + 1
195
+ // T-bar is at: (start of underline) + (connectCol - underlineStartInCode)
196
+ const connectPosInIndicator = (lineNumWidth + 3) + spacesBefore + (connectCol - underlineStartInCode) + 1;
317
197
  const underlineStartCol = underlineStartInCode;
318
198
  const underlineEndCol = underlineEndInCode;
319
199
  if (endColumn && underlineEndCol > underlineStartCol) {
@@ -322,7 +202,7 @@ export function CodeDebug(options) {
322
202
  const underlineLen = underlineLength;
323
203
  if (shortMessage) {
324
204
  // With short message: T-bar in the middle
325
- const connectPosInUnderline = connectCol - underlineStartCol; // Position within the underline
205
+ const connectPosInUnderline = connectCol - underlineStartInCode; // Position within the underline
326
206
  if (underlineLen >= 3) {
327
207
  // Build underline with T-bar: left curve, dashes, T-bar, dashes, right curve
328
208
  // Total length = 1 (┖) + left dashes + 1 (┬) + right dashes + 1 (┚) = underlineLen
@@ -335,8 +215,8 @@ export function CodeDebug(options) {
335
215
  indicatorLine += applyStyle('┖' + leftPart + '┬' + rightPart + '┚', { color: colorScheme.primary });
336
216
  }
337
217
  else if (underlineLen === 2) {
338
- // Too short for T-bar, just use T in middle
339
- indicatorLine += applyStyle('┖┬┚', { color: colorScheme.primary });
218
+ // Exactly 2 characters: just the brackets, no T-bar
219
+ indicatorLine += applyStyle('┖┚', { color: colorScheme.primary });
340
220
  }
341
221
  else {
342
222
  // Single character, just use T
@@ -357,28 +237,54 @@ export function CodeDebug(options) {
357
237
  codeLines.push(indicatorLine);
358
238
  // Short message connected to underline (if provided)
359
239
  if (shortMessage) {
360
- // Short message line: line number width + space + + space + spaces + connector + message
361
- const shortMessageLine = ' '.repeat(lineNumWidth) + ' ' + applyStyle('│', { color: 'brightBlack' }) + ' ' +
362
- ' '.repeat(Math.max(0, connectCol - 1)) +
363
- applyStyle('╰── ', { color: colorScheme.primary }) +
364
- applyStyle(shortMessage, { color: colorScheme.message });
365
- codeLines.push(shortMessageLine);
240
+ // Determine placement: 'auto' means calculate which side has more available space
241
+ let placement = shortMessagePlacement === 'auto'
242
+ ? (() => {
243
+ // Available space on left: from start of code area to connectCol
244
+ const availableLeft = connectCol - 1;
245
+ // Available space on right: from connectCol to end of code area
246
+ const availableRight = codeAreaWidth - connectCol;
247
+ // Place on left if left has more space, otherwise right
248
+ return availableLeft >= availableRight ? 'left' : 'right';
249
+ })()
250
+ : shortMessagePlacement;
251
+ if (placement === 'left') {
252
+ // Short message on left: message + connector pointing right (curved up)
253
+ // The ╯ should be at connectPosInIndicator
254
+ const messageWidth = countVisibleChars(shortMessage);
255
+ const linePrefixWidth = lineNumWidth + 3; // lineNumWidth + space + │ + space
256
+ const spacesBeforeMessage = Math.max(0, connectPosInIndicator - linePrefixWidth - messageWidth - 4);
257
+ const shortMessageLine = ' '.repeat(lineNumWidth) + ' ' + applyStyle('│', { color: 'muted' }) + ' ' +
258
+ ' '.repeat(spacesBeforeMessage) +
259
+ applyStyle(shortMessage, { color: colorScheme.message }) +
260
+ applyStyle(' ──╯', { color: colorScheme.primary });
261
+ codeLines.push(shortMessageLine);
262
+ }
263
+ else {
264
+ // Short message on right: connector pointing left (curved up) + message
265
+ // The ╰ should be at connectPosInIndicator
266
+ const linePrefixWidth = lineNumWidth + 3; // lineNumWidth + space + │ + space
267
+ const spacesBeforeConnector = Math.max(0, connectPosInIndicator - linePrefixWidth - 1);
268
+ const shortMessageLine = ' '.repeat(lineNumWidth) + ' ' + applyStyle('│', { color: 'muted' }) + ' ' +
269
+ ' '.repeat(spacesBeforeConnector) +
270
+ applyStyle('╰── ', { color: colorScheme.primary }) +
271
+ applyStyle(shortMessage, { color: colorScheme.message });
272
+ codeLines.push(shortMessageLine);
273
+ }
366
274
  }
367
275
  // Line after (if exists)
368
276
  if (lineAfter !== null && lineAfter !== undefined) {
369
277
  const afterLineNum = String(startLine + 1);
370
278
  const afterLineNumPadded = afterLineNum.padStart(lineNumWidth);
371
279
  const truncatedAfter = truncateToWidth(lineAfter, codeAreaWidth);
372
- // Make non-error lines slightly dimmer: darker on dark terminals, whiter on light terminals
373
- const dimmedAfter = isDarkTerminal()
374
- ? applyStyle(truncatedAfter, { dim: true })
375
- : applyStyle(truncatedAfter, { color: 'brightBlack' });
376
- codeLines.push(applyStyle(`${afterLineNumPadded} `, { color: lineNumberColor, dim: isDarkTerminal() }) +
377
- applyStyle('│ ', { color: 'brightBlack' }) + dimmedAfter);
280
+ // Make non-error lines slightly dimmer
281
+ const dimmedAfter = applyStyle(truncatedAfter, { color: 'muted' });
282
+ codeLines.push(applyStyle(`${afterLineNumPadded} `, { color: lineNumColor }) +
283
+ applyStyle('│ ', { color: 'muted' }) + dimmedAfter);
378
284
  }
379
285
  // Bottom curve to close the box (Oxlint style)
380
286
  const bottomCurveIndent = ' '.repeat(lineNumWidth + 1);
381
- const bottomCurve = bottomCurveIndent + applyStyle('╰─', { color: 'brightBlack' });
287
+ const bottomCurve = bottomCurveIndent + applyStyle('╰─', { color: 'muted' });
382
288
  codeLines.push(bottomCurve);
383
289
  // Return lines directly (no Section wrapper for Oxlint style)
384
290
  return codeLines;
@@ -1 +1 @@
1
- {"version":3,"file":"code-debug.js","sourceRoot":"","sources":["../../src/components/code-debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-debug.js","sourceRoot":"","sources":["../../src/components/code-debug.ts"],"names":[],"mappings":"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"}