@almadar/ui 2.54.0 → 2.55.1
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/dist/avl/index.cjs +90 -48
- package/dist/avl/index.js +90 -48
- package/dist/components/index.cjs +90 -48
- package/dist/components/index.js +90 -48
- package/dist/components/molecules/markdown/CodeBlock.d.ts +8 -0
- package/dist/providers/index.cjs +90 -48
- package/dist/providers/index.js +90 -48
- package/dist/runtime/index.cjs +90 -48
- package/dist/runtime/index.js +90 -48
- package/package.json +1 -1
package/dist/providers/index.js
CHANGED
|
@@ -15,25 +15,25 @@ import ReactMarkdown from 'react-markdown';
|
|
|
15
15
|
import remarkGfm from 'remark-gfm';
|
|
16
16
|
import remarkMath from 'remark-math';
|
|
17
17
|
import rehypeKatex from 'rehype-katex';
|
|
18
|
-
import SyntaxHighlighter from 'react-syntax-highlighter/dist/esm/prism-light';
|
|
19
|
-
import dark from 'react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus';
|
|
18
|
+
import SyntaxHighlighter from 'react-syntax-highlighter/dist/esm/prism-light.js';
|
|
19
|
+
import dark from 'react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js';
|
|
20
20
|
import { orbLanguage, loloLanguage, ORB_COLORS } from '@almadar/syntax';
|
|
21
|
-
import langJson from 'react-syntax-highlighter/dist/esm/languages/prism/json';
|
|
22
|
-
import langJavascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript';
|
|
23
|
-
import langTypescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript';
|
|
24
|
-
import langJsx from 'react-syntax-highlighter/dist/esm/languages/prism/jsx';
|
|
25
|
-
import langTsx from 'react-syntax-highlighter/dist/esm/languages/prism/tsx';
|
|
26
|
-
import langCss from 'react-syntax-highlighter/dist/esm/languages/prism/css';
|
|
27
|
-
import langMarkdown from 'react-syntax-highlighter/dist/esm/languages/prism/markdown';
|
|
28
|
-
import langBash from 'react-syntax-highlighter/dist/esm/languages/prism/bash';
|
|
29
|
-
import langYaml from 'react-syntax-highlighter/dist/esm/languages/prism/yaml';
|
|
30
|
-
import langRust from 'react-syntax-highlighter/dist/esm/languages/prism/rust';
|
|
31
|
-
import langPython from 'react-syntax-highlighter/dist/esm/languages/prism/python';
|
|
32
|
-
import langSql from 'react-syntax-highlighter/dist/esm/languages/prism/sql';
|
|
33
|
-
import langDiff from 'react-syntax-highlighter/dist/esm/languages/prism/diff';
|
|
34
|
-
import langToml from 'react-syntax-highlighter/dist/esm/languages/prism/toml';
|
|
35
|
-
import langGo from 'react-syntax-highlighter/dist/esm/languages/prism/go';
|
|
36
|
-
import langGraphql from 'react-syntax-highlighter/dist/esm/languages/prism/graphql';
|
|
21
|
+
import langJson from 'react-syntax-highlighter/dist/esm/languages/prism/json.js';
|
|
22
|
+
import langJavascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript.js';
|
|
23
|
+
import langTypescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript.js';
|
|
24
|
+
import langJsx from 'react-syntax-highlighter/dist/esm/languages/prism/jsx.js';
|
|
25
|
+
import langTsx from 'react-syntax-highlighter/dist/esm/languages/prism/tsx.js';
|
|
26
|
+
import langCss from 'react-syntax-highlighter/dist/esm/languages/prism/css.js';
|
|
27
|
+
import langMarkdown from 'react-syntax-highlighter/dist/esm/languages/prism/markdown.js';
|
|
28
|
+
import langBash from 'react-syntax-highlighter/dist/esm/languages/prism/bash.js';
|
|
29
|
+
import langYaml from 'react-syntax-highlighter/dist/esm/languages/prism/yaml.js';
|
|
30
|
+
import langRust from 'react-syntax-highlighter/dist/esm/languages/prism/rust.js';
|
|
31
|
+
import langPython from 'react-syntax-highlighter/dist/esm/languages/prism/python.js';
|
|
32
|
+
import langSql from 'react-syntax-highlighter/dist/esm/languages/prism/sql.js';
|
|
33
|
+
import langDiff from 'react-syntax-highlighter/dist/esm/languages/prism/diff.js';
|
|
34
|
+
import langToml from 'react-syntax-highlighter/dist/esm/languages/prism/toml.js';
|
|
35
|
+
import langGo from 'react-syntax-highlighter/dist/esm/languages/prism/go.js';
|
|
36
|
+
import langGraphql from 'react-syntax-highlighter/dist/esm/languages/prism/graphql.js';
|
|
37
37
|
|
|
38
38
|
var __defProp = Object.defineProperty;
|
|
39
39
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -4051,7 +4051,8 @@ var CodeBlock = React114__default.memo(
|
|
|
4051
4051
|
foldable: foldableProp,
|
|
4052
4052
|
className,
|
|
4053
4053
|
editable = false,
|
|
4054
|
-
onChange
|
|
4054
|
+
onChange,
|
|
4055
|
+
errorLines
|
|
4055
4056
|
}) => {
|
|
4056
4057
|
const code = typeof rawCode === "string" ? rawCode : String(rawCode ?? "");
|
|
4057
4058
|
const isOrb = language === "orb";
|
|
@@ -4083,6 +4084,28 @@ var CodeBlock = React114__default.memo(
|
|
|
4083
4084
|
ov.scrollLeft = ta.scrollLeft;
|
|
4084
4085
|
}
|
|
4085
4086
|
}, []);
|
|
4087
|
+
const errorLineProps = useMemo(() => {
|
|
4088
|
+
if (!errorLines || errorLines.size === 0) {
|
|
4089
|
+
return LINE_PROPS_FN;
|
|
4090
|
+
}
|
|
4091
|
+
return (lineNumber) => {
|
|
4092
|
+
const severity = errorLines.get(lineNumber);
|
|
4093
|
+
if (!severity) {
|
|
4094
|
+
return { "data-line": String(lineNumber - 1) };
|
|
4095
|
+
}
|
|
4096
|
+
return {
|
|
4097
|
+
"data-line": String(lineNumber - 1),
|
|
4098
|
+
style: {
|
|
4099
|
+
display: "block",
|
|
4100
|
+
backgroundColor: severity === "error" ? "rgba(248, 113, 113, 0.18)" : "rgba(251, 191, 36, 0.18)",
|
|
4101
|
+
// amber-400 @ 18%
|
|
4102
|
+
borderLeft: `3px solid ${severity === "error" ? "#ef4444" : "#f59e0b"}`,
|
|
4103
|
+
paddingLeft: "0.5rem",
|
|
4104
|
+
marginLeft: "-0.5rem"
|
|
4105
|
+
}
|
|
4106
|
+
};
|
|
4107
|
+
};
|
|
4108
|
+
}, [errorLines]);
|
|
4086
4109
|
const isFoldable = foldableProp ?? (language === "orb" || language === "json");
|
|
4087
4110
|
const [collapsed, setCollapsed] = useState(() => /* @__PURE__ */ new Set());
|
|
4088
4111
|
const foldRegions = useMemo(
|
|
@@ -4243,24 +4266,40 @@ var CodeBlock = React114__default.memo(
|
|
|
4243
4266
|
}
|
|
4244
4267
|
),
|
|
4245
4268
|
editable ? (
|
|
4246
|
-
/* GAP-77: editable mode = transparent
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
|
|
4250
|
-
|
|
4251
|
-
|
|
4269
|
+
/* GAP-77 / GAP-82 / GAP-83: editable mode = transparent textarea on
|
|
4270
|
+
top of a Prism-highlighted SyntaxHighlighter overlay.
|
|
4271
|
+
|
|
4272
|
+
Layout: BOTH children are `position: absolute, inset: 0` so neither
|
|
4273
|
+
contributes to flow. The parent Box has `height: 100%` so it fills
|
|
4274
|
+
whatever container the consumer provides (the consumer is
|
|
4275
|
+
responsible for giving the parent a real height — usually via flex
|
|
4276
|
+
column with `minHeight: 0`).
|
|
4277
|
+
|
|
4278
|
+
Stacking: the overlay is FIRST in DOM order so it paints first
|
|
4279
|
+
(behind), the textarea is SECOND so it paints second (on top). No
|
|
4280
|
+
explicit z-index — DOM order alone determines stacking inside the
|
|
4281
|
+
parent's stacking context. The textarea has `color: transparent`
|
|
4282
|
+
plus `WebkitTextFillColor: transparent` (Safari) so its glyphs
|
|
4283
|
+
never paint, but the caret stays visible via `caretColor`.
|
|
4252
4284
|
|
|
4253
|
-
Scroll sync:
|
|
4254
|
-
|
|
4285
|
+
Scroll sync: textarea scrolls naturally; `handleEditableScroll`
|
|
4286
|
+
mirrors its scrollTop/scrollLeft onto the overlay div so the
|
|
4287
|
+
highlighted spans stay aligned with the textarea content.
|
|
4288
|
+
|
|
4289
|
+
Error highlights (GAP-80): `errorLines` prop accepts a Map of
|
|
4290
|
+
1-based line numbers → severity. The overlay's SyntaxHighlighter
|
|
4291
|
+
uses `wrapLines` + `lineProps` to paint a colored background on
|
|
4292
|
+
those lines. */
|
|
4255
4293
|
/* @__PURE__ */ jsxs(
|
|
4256
4294
|
Box,
|
|
4257
4295
|
{
|
|
4258
4296
|
style: {
|
|
4259
4297
|
position: "relative",
|
|
4260
|
-
|
|
4261
|
-
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
4298
|
+
height: "100%",
|
|
4262
4299
|
minHeight: "160px",
|
|
4263
4300
|
maxHeight,
|
|
4301
|
+
backgroundColor: "#1e1e1e",
|
|
4302
|
+
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
4264
4303
|
overflow: "hidden"
|
|
4265
4304
|
},
|
|
4266
4305
|
children: [
|
|
@@ -4271,10 +4310,12 @@ var CodeBlock = React114__default.memo(
|
|
|
4271
4310
|
"aria-hidden": true,
|
|
4272
4311
|
style: {
|
|
4273
4312
|
position: "absolute",
|
|
4274
|
-
|
|
4313
|
+
top: 0,
|
|
4314
|
+
left: 0,
|
|
4315
|
+
width: "100%",
|
|
4316
|
+
height: "100%",
|
|
4275
4317
|
overflow: "hidden",
|
|
4276
|
-
pointerEvents: "none"
|
|
4277
|
-
maxHeight
|
|
4318
|
+
pointerEvents: "none"
|
|
4278
4319
|
},
|
|
4279
4320
|
children: /* @__PURE__ */ jsx(
|
|
4280
4321
|
SyntaxHighlighter,
|
|
@@ -4282,6 +4323,8 @@ var CodeBlock = React114__default.memo(
|
|
|
4282
4323
|
PreTag: "div",
|
|
4283
4324
|
language,
|
|
4284
4325
|
style: activeStyle,
|
|
4326
|
+
wrapLines: errorLines && errorLines.size > 0,
|
|
4327
|
+
lineProps: errorLineProps,
|
|
4285
4328
|
customStyle: {
|
|
4286
4329
|
backgroundColor: "transparent",
|
|
4287
4330
|
borderRadius: 0,
|
|
@@ -4289,7 +4332,6 @@ var CodeBlock = React114__default.memo(
|
|
|
4289
4332
|
margin: 0,
|
|
4290
4333
|
whiteSpace: "pre",
|
|
4291
4334
|
minWidth: "100%",
|
|
4292
|
-
minHeight: "160px",
|
|
4293
4335
|
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Courier New", monospace',
|
|
4294
4336
|
fontSize: "13px",
|
|
4295
4337
|
lineHeight: "1.5"
|
|
@@ -4318,23 +4360,23 @@ var CodeBlock = React114__default.memo(
|
|
|
4318
4360
|
onScroll: handleEditableScroll,
|
|
4319
4361
|
spellCheck: false,
|
|
4320
4362
|
style: {
|
|
4321
|
-
position: "
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
fontSize: "13px",
|
|
4325
|
-
lineHeight: "1.5",
|
|
4326
|
-
backgroundColor: "transparent",
|
|
4327
|
-
color: "transparent",
|
|
4328
|
-
caretColor: "#e6e6e6",
|
|
4329
|
-
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
4330
|
-
border: "none",
|
|
4331
|
-
padding: "1rem",
|
|
4332
|
-
resize: "none",
|
|
4333
|
-
minHeight: "160px",
|
|
4334
|
-
maxHeight,
|
|
4363
|
+
position: "absolute",
|
|
4364
|
+
top: 0,
|
|
4365
|
+
left: 0,
|
|
4335
4366
|
width: "100%",
|
|
4336
4367
|
height: "100%",
|
|
4368
|
+
padding: "1rem",
|
|
4369
|
+
margin: 0,
|
|
4370
|
+
border: "none",
|
|
4337
4371
|
outline: "none",
|
|
4372
|
+
resize: "none",
|
|
4373
|
+
backgroundColor: "transparent",
|
|
4374
|
+
color: "transparent",
|
|
4375
|
+
caretColor: "#e6e6e6",
|
|
4376
|
+
WebkitTextFillColor: "transparent",
|
|
4377
|
+
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Courier New", monospace',
|
|
4378
|
+
fontSize: "13px",
|
|
4379
|
+
lineHeight: "1.5",
|
|
4338
4380
|
whiteSpace: "pre",
|
|
4339
4381
|
overflowWrap: "normal",
|
|
4340
4382
|
overflow: "auto"
|
|
@@ -4365,7 +4407,7 @@ var CodeBlock = React114__default.memo(
|
|
|
4365
4407
|
)
|
|
4366
4408
|
] });
|
|
4367
4409
|
},
|
|
4368
|
-
(prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange
|
|
4410
|
+
(prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange && prev.errorLines === next.errorLines
|
|
4369
4411
|
);
|
|
4370
4412
|
CodeBlock.displayName = "CodeBlock";
|
|
4371
4413
|
|
package/dist/runtime/index.cjs
CHANGED
|
@@ -18,25 +18,25 @@ var ReactMarkdown = require('react-markdown');
|
|
|
18
18
|
var remarkGfm = require('remark-gfm');
|
|
19
19
|
var remarkMath = require('remark-math');
|
|
20
20
|
var rehypeKatex = require('rehype-katex');
|
|
21
|
-
var SyntaxHighlighter = require('react-syntax-highlighter/dist/esm/prism-light');
|
|
22
|
-
var dark = require('react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus');
|
|
21
|
+
var SyntaxHighlighter = require('react-syntax-highlighter/dist/esm/prism-light.js');
|
|
22
|
+
var dark = require('react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js');
|
|
23
23
|
var syntax = require('@almadar/syntax');
|
|
24
|
-
var langJson = require('react-syntax-highlighter/dist/esm/languages/prism/json');
|
|
25
|
-
var langJavascript = require('react-syntax-highlighter/dist/esm/languages/prism/javascript');
|
|
26
|
-
var langTypescript = require('react-syntax-highlighter/dist/esm/languages/prism/typescript');
|
|
27
|
-
var langJsx = require('react-syntax-highlighter/dist/esm/languages/prism/jsx');
|
|
28
|
-
var langTsx = require('react-syntax-highlighter/dist/esm/languages/prism/tsx');
|
|
29
|
-
var langCss = require('react-syntax-highlighter/dist/esm/languages/prism/css');
|
|
30
|
-
var langMarkdown = require('react-syntax-highlighter/dist/esm/languages/prism/markdown');
|
|
31
|
-
var langBash = require('react-syntax-highlighter/dist/esm/languages/prism/bash');
|
|
32
|
-
var langYaml = require('react-syntax-highlighter/dist/esm/languages/prism/yaml');
|
|
33
|
-
var langRust = require('react-syntax-highlighter/dist/esm/languages/prism/rust');
|
|
34
|
-
var langPython = require('react-syntax-highlighter/dist/esm/languages/prism/python');
|
|
35
|
-
var langSql = require('react-syntax-highlighter/dist/esm/languages/prism/sql');
|
|
36
|
-
var langDiff = require('react-syntax-highlighter/dist/esm/languages/prism/diff');
|
|
37
|
-
var langToml = require('react-syntax-highlighter/dist/esm/languages/prism/toml');
|
|
38
|
-
var langGo = require('react-syntax-highlighter/dist/esm/languages/prism/go');
|
|
39
|
-
var langGraphql = require('react-syntax-highlighter/dist/esm/languages/prism/graphql');
|
|
24
|
+
var langJson = require('react-syntax-highlighter/dist/esm/languages/prism/json.js');
|
|
25
|
+
var langJavascript = require('react-syntax-highlighter/dist/esm/languages/prism/javascript.js');
|
|
26
|
+
var langTypescript = require('react-syntax-highlighter/dist/esm/languages/prism/typescript.js');
|
|
27
|
+
var langJsx = require('react-syntax-highlighter/dist/esm/languages/prism/jsx.js');
|
|
28
|
+
var langTsx = require('react-syntax-highlighter/dist/esm/languages/prism/tsx.js');
|
|
29
|
+
var langCss = require('react-syntax-highlighter/dist/esm/languages/prism/css.js');
|
|
30
|
+
var langMarkdown = require('react-syntax-highlighter/dist/esm/languages/prism/markdown.js');
|
|
31
|
+
var langBash = require('react-syntax-highlighter/dist/esm/languages/prism/bash.js');
|
|
32
|
+
var langYaml = require('react-syntax-highlighter/dist/esm/languages/prism/yaml.js');
|
|
33
|
+
var langRust = require('react-syntax-highlighter/dist/esm/languages/prism/rust.js');
|
|
34
|
+
var langPython = require('react-syntax-highlighter/dist/esm/languages/prism/python.js');
|
|
35
|
+
var langSql = require('react-syntax-highlighter/dist/esm/languages/prism/sql.js');
|
|
36
|
+
var langDiff = require('react-syntax-highlighter/dist/esm/languages/prism/diff.js');
|
|
37
|
+
var langToml = require('react-syntax-highlighter/dist/esm/languages/prism/toml.js');
|
|
38
|
+
var langGo = require('react-syntax-highlighter/dist/esm/languages/prism/go.js');
|
|
39
|
+
var langGraphql = require('react-syntax-highlighter/dist/esm/languages/prism/graphql.js');
|
|
40
40
|
|
|
41
41
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
42
42
|
|
|
@@ -10016,7 +10016,8 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10016
10016
|
foldable: foldableProp,
|
|
10017
10017
|
className,
|
|
10018
10018
|
editable = false,
|
|
10019
|
-
onChange
|
|
10019
|
+
onChange,
|
|
10020
|
+
errorLines
|
|
10020
10021
|
}) => {
|
|
10021
10022
|
const code = typeof rawCode === "string" ? rawCode : String(rawCode ?? "");
|
|
10022
10023
|
const isOrb = language === "orb";
|
|
@@ -10048,6 +10049,28 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10048
10049
|
ov.scrollLeft = ta.scrollLeft;
|
|
10049
10050
|
}
|
|
10050
10051
|
}, []);
|
|
10052
|
+
const errorLineProps = React114.useMemo(() => {
|
|
10053
|
+
if (!errorLines || errorLines.size === 0) {
|
|
10054
|
+
return LINE_PROPS_FN;
|
|
10055
|
+
}
|
|
10056
|
+
return (lineNumber) => {
|
|
10057
|
+
const severity = errorLines.get(lineNumber);
|
|
10058
|
+
if (!severity) {
|
|
10059
|
+
return { "data-line": String(lineNumber - 1) };
|
|
10060
|
+
}
|
|
10061
|
+
return {
|
|
10062
|
+
"data-line": String(lineNumber - 1),
|
|
10063
|
+
style: {
|
|
10064
|
+
display: "block",
|
|
10065
|
+
backgroundColor: severity === "error" ? "rgba(248, 113, 113, 0.18)" : "rgba(251, 191, 36, 0.18)",
|
|
10066
|
+
// amber-400 @ 18%
|
|
10067
|
+
borderLeft: `3px solid ${severity === "error" ? "#ef4444" : "#f59e0b"}`,
|
|
10068
|
+
paddingLeft: "0.5rem",
|
|
10069
|
+
marginLeft: "-0.5rem"
|
|
10070
|
+
}
|
|
10071
|
+
};
|
|
10072
|
+
};
|
|
10073
|
+
}, [errorLines]);
|
|
10051
10074
|
const isFoldable = foldableProp ?? (language === "orb" || language === "json");
|
|
10052
10075
|
const [collapsed, setCollapsed] = React114.useState(() => /* @__PURE__ */ new Set());
|
|
10053
10076
|
const foldRegions = React114.useMemo(
|
|
@@ -10208,24 +10231,40 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10208
10231
|
}
|
|
10209
10232
|
),
|
|
10210
10233
|
editable ? (
|
|
10211
|
-
/* GAP-77: editable mode = transparent
|
|
10212
|
-
|
|
10213
|
-
|
|
10214
|
-
|
|
10215
|
-
|
|
10216
|
-
|
|
10234
|
+
/* GAP-77 / GAP-82 / GAP-83: editable mode = transparent textarea on
|
|
10235
|
+
top of a Prism-highlighted SyntaxHighlighter overlay.
|
|
10236
|
+
|
|
10237
|
+
Layout: BOTH children are `position: absolute, inset: 0` so neither
|
|
10238
|
+
contributes to flow. The parent Box has `height: 100%` so it fills
|
|
10239
|
+
whatever container the consumer provides (the consumer is
|
|
10240
|
+
responsible for giving the parent a real height — usually via flex
|
|
10241
|
+
column with `minHeight: 0`).
|
|
10242
|
+
|
|
10243
|
+
Stacking: the overlay is FIRST in DOM order so it paints first
|
|
10244
|
+
(behind), the textarea is SECOND so it paints second (on top). No
|
|
10245
|
+
explicit z-index — DOM order alone determines stacking inside the
|
|
10246
|
+
parent's stacking context. The textarea has `color: transparent`
|
|
10247
|
+
plus `WebkitTextFillColor: transparent` (Safari) so its glyphs
|
|
10248
|
+
never paint, but the caret stays visible via `caretColor`.
|
|
10217
10249
|
|
|
10218
|
-
Scroll sync:
|
|
10219
|
-
|
|
10250
|
+
Scroll sync: textarea scrolls naturally; `handleEditableScroll`
|
|
10251
|
+
mirrors its scrollTop/scrollLeft onto the overlay div so the
|
|
10252
|
+
highlighted spans stay aligned with the textarea content.
|
|
10253
|
+
|
|
10254
|
+
Error highlights (GAP-80): `errorLines` prop accepts a Map of
|
|
10255
|
+
1-based line numbers → severity. The overlay's SyntaxHighlighter
|
|
10256
|
+
uses `wrapLines` + `lineProps` to paint a colored background on
|
|
10257
|
+
those lines. */
|
|
10220
10258
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
10221
10259
|
Box,
|
|
10222
10260
|
{
|
|
10223
10261
|
style: {
|
|
10224
10262
|
position: "relative",
|
|
10225
|
-
|
|
10226
|
-
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
10263
|
+
height: "100%",
|
|
10227
10264
|
minHeight: "160px",
|
|
10228
10265
|
maxHeight,
|
|
10266
|
+
backgroundColor: "#1e1e1e",
|
|
10267
|
+
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
10229
10268
|
overflow: "hidden"
|
|
10230
10269
|
},
|
|
10231
10270
|
children: [
|
|
@@ -10236,10 +10275,12 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10236
10275
|
"aria-hidden": true,
|
|
10237
10276
|
style: {
|
|
10238
10277
|
position: "absolute",
|
|
10239
|
-
|
|
10278
|
+
top: 0,
|
|
10279
|
+
left: 0,
|
|
10280
|
+
width: "100%",
|
|
10281
|
+
height: "100%",
|
|
10240
10282
|
overflow: "hidden",
|
|
10241
|
-
pointerEvents: "none"
|
|
10242
|
-
maxHeight
|
|
10283
|
+
pointerEvents: "none"
|
|
10243
10284
|
},
|
|
10244
10285
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
10245
10286
|
SyntaxHighlighter__default.default,
|
|
@@ -10247,6 +10288,8 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10247
10288
|
PreTag: "div",
|
|
10248
10289
|
language,
|
|
10249
10290
|
style: activeStyle,
|
|
10291
|
+
wrapLines: errorLines && errorLines.size > 0,
|
|
10292
|
+
lineProps: errorLineProps,
|
|
10250
10293
|
customStyle: {
|
|
10251
10294
|
backgroundColor: "transparent",
|
|
10252
10295
|
borderRadius: 0,
|
|
@@ -10254,7 +10297,6 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10254
10297
|
margin: 0,
|
|
10255
10298
|
whiteSpace: "pre",
|
|
10256
10299
|
minWidth: "100%",
|
|
10257
|
-
minHeight: "160px",
|
|
10258
10300
|
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Courier New", monospace',
|
|
10259
10301
|
fontSize: "13px",
|
|
10260
10302
|
lineHeight: "1.5"
|
|
@@ -10283,23 +10325,23 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10283
10325
|
onScroll: handleEditableScroll,
|
|
10284
10326
|
spellCheck: false,
|
|
10285
10327
|
style: {
|
|
10286
|
-
position: "
|
|
10287
|
-
|
|
10288
|
-
|
|
10289
|
-
fontSize: "13px",
|
|
10290
|
-
lineHeight: "1.5",
|
|
10291
|
-
backgroundColor: "transparent",
|
|
10292
|
-
color: "transparent",
|
|
10293
|
-
caretColor: "#e6e6e6",
|
|
10294
|
-
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
10295
|
-
border: "none",
|
|
10296
|
-
padding: "1rem",
|
|
10297
|
-
resize: "none",
|
|
10298
|
-
minHeight: "160px",
|
|
10299
|
-
maxHeight,
|
|
10328
|
+
position: "absolute",
|
|
10329
|
+
top: 0,
|
|
10330
|
+
left: 0,
|
|
10300
10331
|
width: "100%",
|
|
10301
10332
|
height: "100%",
|
|
10333
|
+
padding: "1rem",
|
|
10334
|
+
margin: 0,
|
|
10335
|
+
border: "none",
|
|
10302
10336
|
outline: "none",
|
|
10337
|
+
resize: "none",
|
|
10338
|
+
backgroundColor: "transparent",
|
|
10339
|
+
color: "transparent",
|
|
10340
|
+
caretColor: "#e6e6e6",
|
|
10341
|
+
WebkitTextFillColor: "transparent",
|
|
10342
|
+
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Courier New", monospace',
|
|
10343
|
+
fontSize: "13px",
|
|
10344
|
+
lineHeight: "1.5",
|
|
10303
10345
|
whiteSpace: "pre",
|
|
10304
10346
|
overflowWrap: "normal",
|
|
10305
10347
|
overflow: "auto"
|
|
@@ -10330,7 +10372,7 @@ var CodeBlock = React114__namespace.default.memo(
|
|
|
10330
10372
|
)
|
|
10331
10373
|
] });
|
|
10332
10374
|
},
|
|
10333
|
-
(prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange
|
|
10375
|
+
(prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange && prev.errorLines === next.errorLines
|
|
10334
10376
|
);
|
|
10335
10377
|
CodeBlock.displayName = "CodeBlock";
|
|
10336
10378
|
|
package/dist/runtime/index.js
CHANGED
|
@@ -18,25 +18,25 @@ import ReactMarkdown from 'react-markdown';
|
|
|
18
18
|
import remarkGfm from 'remark-gfm';
|
|
19
19
|
import remarkMath from 'remark-math';
|
|
20
20
|
import rehypeKatex from 'rehype-katex';
|
|
21
|
-
import SyntaxHighlighter from 'react-syntax-highlighter/dist/esm/prism-light';
|
|
22
|
-
import dark from 'react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus';
|
|
21
|
+
import SyntaxHighlighter from 'react-syntax-highlighter/dist/esm/prism-light.js';
|
|
22
|
+
import dark from 'react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js';
|
|
23
23
|
import { orbLanguage, loloLanguage, ORB_COLORS } from '@almadar/syntax';
|
|
24
|
-
import langJson from 'react-syntax-highlighter/dist/esm/languages/prism/json';
|
|
25
|
-
import langJavascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript';
|
|
26
|
-
import langTypescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript';
|
|
27
|
-
import langJsx from 'react-syntax-highlighter/dist/esm/languages/prism/jsx';
|
|
28
|
-
import langTsx from 'react-syntax-highlighter/dist/esm/languages/prism/tsx';
|
|
29
|
-
import langCss from 'react-syntax-highlighter/dist/esm/languages/prism/css';
|
|
30
|
-
import langMarkdown from 'react-syntax-highlighter/dist/esm/languages/prism/markdown';
|
|
31
|
-
import langBash from 'react-syntax-highlighter/dist/esm/languages/prism/bash';
|
|
32
|
-
import langYaml from 'react-syntax-highlighter/dist/esm/languages/prism/yaml';
|
|
33
|
-
import langRust from 'react-syntax-highlighter/dist/esm/languages/prism/rust';
|
|
34
|
-
import langPython from 'react-syntax-highlighter/dist/esm/languages/prism/python';
|
|
35
|
-
import langSql from 'react-syntax-highlighter/dist/esm/languages/prism/sql';
|
|
36
|
-
import langDiff from 'react-syntax-highlighter/dist/esm/languages/prism/diff';
|
|
37
|
-
import langToml from 'react-syntax-highlighter/dist/esm/languages/prism/toml';
|
|
38
|
-
import langGo from 'react-syntax-highlighter/dist/esm/languages/prism/go';
|
|
39
|
-
import langGraphql from 'react-syntax-highlighter/dist/esm/languages/prism/graphql';
|
|
24
|
+
import langJson from 'react-syntax-highlighter/dist/esm/languages/prism/json.js';
|
|
25
|
+
import langJavascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript.js';
|
|
26
|
+
import langTypescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript.js';
|
|
27
|
+
import langJsx from 'react-syntax-highlighter/dist/esm/languages/prism/jsx.js';
|
|
28
|
+
import langTsx from 'react-syntax-highlighter/dist/esm/languages/prism/tsx.js';
|
|
29
|
+
import langCss from 'react-syntax-highlighter/dist/esm/languages/prism/css.js';
|
|
30
|
+
import langMarkdown from 'react-syntax-highlighter/dist/esm/languages/prism/markdown.js';
|
|
31
|
+
import langBash from 'react-syntax-highlighter/dist/esm/languages/prism/bash.js';
|
|
32
|
+
import langYaml from 'react-syntax-highlighter/dist/esm/languages/prism/yaml.js';
|
|
33
|
+
import langRust from 'react-syntax-highlighter/dist/esm/languages/prism/rust.js';
|
|
34
|
+
import langPython from 'react-syntax-highlighter/dist/esm/languages/prism/python.js';
|
|
35
|
+
import langSql from 'react-syntax-highlighter/dist/esm/languages/prism/sql.js';
|
|
36
|
+
import langDiff from 'react-syntax-highlighter/dist/esm/languages/prism/diff.js';
|
|
37
|
+
import langToml from 'react-syntax-highlighter/dist/esm/languages/prism/toml.js';
|
|
38
|
+
import langGo from 'react-syntax-highlighter/dist/esm/languages/prism/go.js';
|
|
39
|
+
import langGraphql from 'react-syntax-highlighter/dist/esm/languages/prism/graphql.js';
|
|
40
40
|
|
|
41
41
|
var __defProp = Object.defineProperty;
|
|
42
42
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -9971,7 +9971,8 @@ var CodeBlock = React114__default.memo(
|
|
|
9971
9971
|
foldable: foldableProp,
|
|
9972
9972
|
className,
|
|
9973
9973
|
editable = false,
|
|
9974
|
-
onChange
|
|
9974
|
+
onChange,
|
|
9975
|
+
errorLines
|
|
9975
9976
|
}) => {
|
|
9976
9977
|
const code = typeof rawCode === "string" ? rawCode : String(rawCode ?? "");
|
|
9977
9978
|
const isOrb = language === "orb";
|
|
@@ -10003,6 +10004,28 @@ var CodeBlock = React114__default.memo(
|
|
|
10003
10004
|
ov.scrollLeft = ta.scrollLeft;
|
|
10004
10005
|
}
|
|
10005
10006
|
}, []);
|
|
10007
|
+
const errorLineProps = useMemo(() => {
|
|
10008
|
+
if (!errorLines || errorLines.size === 0) {
|
|
10009
|
+
return LINE_PROPS_FN;
|
|
10010
|
+
}
|
|
10011
|
+
return (lineNumber) => {
|
|
10012
|
+
const severity = errorLines.get(lineNumber);
|
|
10013
|
+
if (!severity) {
|
|
10014
|
+
return { "data-line": String(lineNumber - 1) };
|
|
10015
|
+
}
|
|
10016
|
+
return {
|
|
10017
|
+
"data-line": String(lineNumber - 1),
|
|
10018
|
+
style: {
|
|
10019
|
+
display: "block",
|
|
10020
|
+
backgroundColor: severity === "error" ? "rgba(248, 113, 113, 0.18)" : "rgba(251, 191, 36, 0.18)",
|
|
10021
|
+
// amber-400 @ 18%
|
|
10022
|
+
borderLeft: `3px solid ${severity === "error" ? "#ef4444" : "#f59e0b"}`,
|
|
10023
|
+
paddingLeft: "0.5rem",
|
|
10024
|
+
marginLeft: "-0.5rem"
|
|
10025
|
+
}
|
|
10026
|
+
};
|
|
10027
|
+
};
|
|
10028
|
+
}, [errorLines]);
|
|
10006
10029
|
const isFoldable = foldableProp ?? (language === "orb" || language === "json");
|
|
10007
10030
|
const [collapsed, setCollapsed] = useState(() => /* @__PURE__ */ new Set());
|
|
10008
10031
|
const foldRegions = useMemo(
|
|
@@ -10163,24 +10186,40 @@ var CodeBlock = React114__default.memo(
|
|
|
10163
10186
|
}
|
|
10164
10187
|
),
|
|
10165
10188
|
editable ? (
|
|
10166
|
-
/* GAP-77: editable mode = transparent
|
|
10167
|
-
|
|
10168
|
-
|
|
10169
|
-
|
|
10170
|
-
|
|
10171
|
-
|
|
10189
|
+
/* GAP-77 / GAP-82 / GAP-83: editable mode = transparent textarea on
|
|
10190
|
+
top of a Prism-highlighted SyntaxHighlighter overlay.
|
|
10191
|
+
|
|
10192
|
+
Layout: BOTH children are `position: absolute, inset: 0` so neither
|
|
10193
|
+
contributes to flow. The parent Box has `height: 100%` so it fills
|
|
10194
|
+
whatever container the consumer provides (the consumer is
|
|
10195
|
+
responsible for giving the parent a real height — usually via flex
|
|
10196
|
+
column with `minHeight: 0`).
|
|
10197
|
+
|
|
10198
|
+
Stacking: the overlay is FIRST in DOM order so it paints first
|
|
10199
|
+
(behind), the textarea is SECOND so it paints second (on top). No
|
|
10200
|
+
explicit z-index — DOM order alone determines stacking inside the
|
|
10201
|
+
parent's stacking context. The textarea has `color: transparent`
|
|
10202
|
+
plus `WebkitTextFillColor: transparent` (Safari) so its glyphs
|
|
10203
|
+
never paint, but the caret stays visible via `caretColor`.
|
|
10172
10204
|
|
|
10173
|
-
Scroll sync:
|
|
10174
|
-
|
|
10205
|
+
Scroll sync: textarea scrolls naturally; `handleEditableScroll`
|
|
10206
|
+
mirrors its scrollTop/scrollLeft onto the overlay div so the
|
|
10207
|
+
highlighted spans stay aligned with the textarea content.
|
|
10208
|
+
|
|
10209
|
+
Error highlights (GAP-80): `errorLines` prop accepts a Map of
|
|
10210
|
+
1-based line numbers → severity. The overlay's SyntaxHighlighter
|
|
10211
|
+
uses `wrapLines` + `lineProps` to paint a colored background on
|
|
10212
|
+
those lines. */
|
|
10175
10213
|
/* @__PURE__ */ jsxs(
|
|
10176
10214
|
Box,
|
|
10177
10215
|
{
|
|
10178
10216
|
style: {
|
|
10179
10217
|
position: "relative",
|
|
10180
|
-
|
|
10181
|
-
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
10218
|
+
height: "100%",
|
|
10182
10219
|
minHeight: "160px",
|
|
10183
10220
|
maxHeight,
|
|
10221
|
+
backgroundColor: "#1e1e1e",
|
|
10222
|
+
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
10184
10223
|
overflow: "hidden"
|
|
10185
10224
|
},
|
|
10186
10225
|
children: [
|
|
@@ -10191,10 +10230,12 @@ var CodeBlock = React114__default.memo(
|
|
|
10191
10230
|
"aria-hidden": true,
|
|
10192
10231
|
style: {
|
|
10193
10232
|
position: "absolute",
|
|
10194
|
-
|
|
10233
|
+
top: 0,
|
|
10234
|
+
left: 0,
|
|
10235
|
+
width: "100%",
|
|
10236
|
+
height: "100%",
|
|
10195
10237
|
overflow: "hidden",
|
|
10196
|
-
pointerEvents: "none"
|
|
10197
|
-
maxHeight
|
|
10238
|
+
pointerEvents: "none"
|
|
10198
10239
|
},
|
|
10199
10240
|
children: /* @__PURE__ */ jsx(
|
|
10200
10241
|
SyntaxHighlighter,
|
|
@@ -10202,6 +10243,8 @@ var CodeBlock = React114__default.memo(
|
|
|
10202
10243
|
PreTag: "div",
|
|
10203
10244
|
language,
|
|
10204
10245
|
style: activeStyle,
|
|
10246
|
+
wrapLines: errorLines && errorLines.size > 0,
|
|
10247
|
+
lineProps: errorLineProps,
|
|
10205
10248
|
customStyle: {
|
|
10206
10249
|
backgroundColor: "transparent",
|
|
10207
10250
|
borderRadius: 0,
|
|
@@ -10209,7 +10252,6 @@ var CodeBlock = React114__default.memo(
|
|
|
10209
10252
|
margin: 0,
|
|
10210
10253
|
whiteSpace: "pre",
|
|
10211
10254
|
minWidth: "100%",
|
|
10212
|
-
minHeight: "160px",
|
|
10213
10255
|
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Courier New", monospace',
|
|
10214
10256
|
fontSize: "13px",
|
|
10215
10257
|
lineHeight: "1.5"
|
|
@@ -10238,23 +10280,23 @@ var CodeBlock = React114__default.memo(
|
|
|
10238
10280
|
onScroll: handleEditableScroll,
|
|
10239
10281
|
spellCheck: false,
|
|
10240
10282
|
style: {
|
|
10241
|
-
position: "
|
|
10242
|
-
|
|
10243
|
-
|
|
10244
|
-
fontSize: "13px",
|
|
10245
|
-
lineHeight: "1.5",
|
|
10246
|
-
backgroundColor: "transparent",
|
|
10247
|
-
color: "transparent",
|
|
10248
|
-
caretColor: "#e6e6e6",
|
|
10249
|
-
borderRadius: hasHeader ? "0 0 0.5rem 0.5rem" : "0.5rem",
|
|
10250
|
-
border: "none",
|
|
10251
|
-
padding: "1rem",
|
|
10252
|
-
resize: "none",
|
|
10253
|
-
minHeight: "160px",
|
|
10254
|
-
maxHeight,
|
|
10283
|
+
position: "absolute",
|
|
10284
|
+
top: 0,
|
|
10285
|
+
left: 0,
|
|
10255
10286
|
width: "100%",
|
|
10256
10287
|
height: "100%",
|
|
10288
|
+
padding: "1rem",
|
|
10289
|
+
margin: 0,
|
|
10290
|
+
border: "none",
|
|
10257
10291
|
outline: "none",
|
|
10292
|
+
resize: "none",
|
|
10293
|
+
backgroundColor: "transparent",
|
|
10294
|
+
color: "transparent",
|
|
10295
|
+
caretColor: "#e6e6e6",
|
|
10296
|
+
WebkitTextFillColor: "transparent",
|
|
10297
|
+
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Courier New", monospace',
|
|
10298
|
+
fontSize: "13px",
|
|
10299
|
+
lineHeight: "1.5",
|
|
10258
10300
|
whiteSpace: "pre",
|
|
10259
10301
|
overflowWrap: "normal",
|
|
10260
10302
|
overflow: "auto"
|
|
@@ -10285,7 +10327,7 @@ var CodeBlock = React114__default.memo(
|
|
|
10285
10327
|
)
|
|
10286
10328
|
] });
|
|
10287
10329
|
},
|
|
10288
|
-
(prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange
|
|
10330
|
+
(prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange && prev.errorLines === next.errorLines
|
|
10289
10331
|
);
|
|
10290
10332
|
CodeBlock.displayName = "CodeBlock";
|
|
10291
10333
|
|