@almadar/ui 5.21.3 → 5.21.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,10 +15,6 @@ var evaluator = require('@almadar/evaluator');
15
15
  var context = require('@almadar/ui/context');
16
16
  var reactRouterDom = require('react-router-dom');
17
17
  var ELK = require('elkjs/lib/elk.bundled.js');
18
- var ReactMarkdown = require('react-markdown');
19
- var remarkGfm = require('remark-gfm');
20
- var remarkMath = require('remark-math');
21
- var rehypeKatex = require('rehype-katex');
22
18
  var SyntaxHighlighter = require('react-syntax-highlighter/dist/esm/prism-light.js');
23
19
  var dark = require('react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js');
24
20
  var syntax = require('@almadar/syntax');
@@ -38,6 +34,10 @@ var langDiff = require('react-syntax-highlighter/dist/esm/languages/prism/diff.j
38
34
  var langToml = require('react-syntax-highlighter/dist/esm/languages/prism/toml.js');
39
35
  var langGo = require('react-syntax-highlighter/dist/esm/languages/prism/go.js');
40
36
  var langGraphql = require('react-syntax-highlighter/dist/esm/languages/prism/graphql.js');
37
+ var ReactMarkdown = require('react-markdown');
38
+ var remarkGfm = require('remark-gfm');
39
+ var remarkMath = require('remark-math');
40
+ var rehypeKatex = require('rehype-katex');
41
41
  var core = require('@almadar/core');
42
42
  var core$1 = require('@dnd-kit/core');
43
43
  var sortable = require('@dnd-kit/sortable');
@@ -71,10 +71,6 @@ var PhosphorIcons__namespace = /*#__PURE__*/_interopNamespace(PhosphorIcons);
71
71
  var TablerIcons__namespace = /*#__PURE__*/_interopNamespace(TablerIcons);
72
72
  var FaIcons__namespace = /*#__PURE__*/_interopNamespace(FaIcons);
73
73
  var ELK__default = /*#__PURE__*/_interopDefault(ELK);
74
- var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
75
- var remarkGfm__default = /*#__PURE__*/_interopDefault(remarkGfm);
76
- var remarkMath__default = /*#__PURE__*/_interopDefault(remarkMath);
77
- var rehypeKatex__default = /*#__PURE__*/_interopDefault(rehypeKatex);
78
74
  var SyntaxHighlighter__default = /*#__PURE__*/_interopDefault(SyntaxHighlighter);
79
75
  var dark__default = /*#__PURE__*/_interopDefault(dark);
80
76
  var langJson__default = /*#__PURE__*/_interopDefault(langJson);
@@ -93,6 +89,10 @@ var langDiff__default = /*#__PURE__*/_interopDefault(langDiff);
93
89
  var langToml__default = /*#__PURE__*/_interopDefault(langToml);
94
90
  var langGo__default = /*#__PURE__*/_interopDefault(langGo);
95
91
  var langGraphql__default = /*#__PURE__*/_interopDefault(langGraphql);
92
+ var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
93
+ var remarkGfm__default = /*#__PURE__*/_interopDefault(remarkGfm);
94
+ var remarkMath__default = /*#__PURE__*/_interopDefault(remarkMath);
95
+ var rehypeKatex__default = /*#__PURE__*/_interopDefault(rehypeKatex);
96
96
 
97
97
  var __defProp = Object.defineProperty;
98
98
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13822,137 +13822,6 @@ var init_katex_min = __esm({
13822
13822
  "node_modules/katex/dist/katex.min.css"() {
13823
13823
  }
13824
13824
  });
13825
- var MarkdownContent;
13826
- var init_MarkdownContent = __esm({
13827
- "components/core/molecules/markdown/MarkdownContent.tsx"() {
13828
- init_katex_min();
13829
- init_Box();
13830
- init_useTranslate();
13831
- init_cn();
13832
- MarkdownContent = React85__namespace.default.memo(
13833
- ({ content, direction, className }) => {
13834
- const { t: _t } = useTranslate();
13835
- const safeContent = typeof content === "string" ? content : String(content ?? "");
13836
- return /* @__PURE__ */ jsxRuntime.jsx(
13837
- Box,
13838
- {
13839
- className: cn("prose max-w-none", className),
13840
- style: {
13841
- color: "var(--color-foreground)",
13842
- "--tw-prose-body": "var(--color-foreground)",
13843
- "--tw-prose-headings": "var(--color-foreground)",
13844
- "--tw-prose-lead": "var(--color-muted-foreground)",
13845
- "--tw-prose-links": "var(--color-primary)",
13846
- "--tw-prose-bold": "var(--color-foreground)",
13847
- "--tw-prose-counters": "var(--color-muted-foreground)",
13848
- "--tw-prose-bullets": "var(--color-muted-foreground)",
13849
- "--tw-prose-hr": "var(--color-border)",
13850
- "--tw-prose-quotes": "var(--color-foreground)",
13851
- "--tw-prose-quote-borders": "var(--color-primary)",
13852
- "--tw-prose-captions": "var(--color-muted-foreground)",
13853
- "--tw-prose-code": "var(--color-foreground)",
13854
- "--tw-prose-pre-code": "var(--color-foreground)",
13855
- "--tw-prose-pre-bg": "var(--color-muted)",
13856
- "--tw-prose-th-borders": "var(--color-border)",
13857
- "--tw-prose-td-borders": "var(--color-border)",
13858
- direction
13859
- },
13860
- children: /* @__PURE__ */ jsxRuntime.jsx(
13861
- ReactMarkdown__default.default,
13862
- {
13863
- remarkPlugins: [remarkMath__default.default, remarkGfm__default.default],
13864
- rehypePlugins: [
13865
- [rehypeKatex__default.default, { strict: false, throwOnError: false }]
13866
- ],
13867
- components: {
13868
- // Handle inline code only — fenced code blocks are parsed out separately
13869
- code({ className: codeClassName, children, ...props }) {
13870
- return /* @__PURE__ */ jsxRuntime.jsx(
13871
- "code",
13872
- {
13873
- ...props,
13874
- className: codeClassName,
13875
- style: {
13876
- backgroundColor: "var(--color-muted)",
13877
- color: "var(--color-foreground)",
13878
- border: "1px solid var(--color-border)",
13879
- padding: "0.125rem 0.375rem",
13880
- borderRadius: "0.25rem",
13881
- fontSize: "0.875em",
13882
- fontFamily: "ui-monospace, monospace"
13883
- },
13884
- children
13885
- }
13886
- );
13887
- },
13888
- // Style links
13889
- a({ href, children, ...props }) {
13890
- return /* @__PURE__ */ jsxRuntime.jsx(
13891
- "a",
13892
- {
13893
- href,
13894
- ...props,
13895
- className: "text-[var(--color-primary)] hover:underline",
13896
- target: href?.startsWith("http") ? "_blank" : void 0,
13897
- rel: href?.startsWith("http") ? "noopener noreferrer" : void 0,
13898
- children
13899
- }
13900
- );
13901
- },
13902
- // Style tables
13903
- table({ children, ...props }) {
13904
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto my-4", children: /* @__PURE__ */ jsxRuntime.jsx(
13905
- "table",
13906
- {
13907
- ...props,
13908
- className: "min-w-full border-collapse border border-[var(--color-border)]",
13909
- children
13910
- }
13911
- ) });
13912
- },
13913
- th({ children, ...props }) {
13914
- return /* @__PURE__ */ jsxRuntime.jsx(
13915
- "th",
13916
- {
13917
- ...props,
13918
- className: "border border-[var(--color-border)] bg-[var(--color-muted)] px-4 py-2 text-left font-semibold",
13919
- children
13920
- }
13921
- );
13922
- },
13923
- td({ children, ...props }) {
13924
- return /* @__PURE__ */ jsxRuntime.jsx(
13925
- "td",
13926
- {
13927
- ...props,
13928
- className: "border border-[var(--color-border)] px-4 py-2",
13929
- children
13930
- }
13931
- );
13932
- },
13933
- // Style blockquotes
13934
- blockquote({ children, ...props }) {
13935
- return /* @__PURE__ */ jsxRuntime.jsx(
13936
- "blockquote",
13937
- {
13938
- ...props,
13939
- className: "border-l-4 border-[var(--color-primary)] pl-4 italic text-[var(--color-foreground)] my-4",
13940
- children
13941
- }
13942
- );
13943
- }
13944
- },
13945
- children: safeContent
13946
- }
13947
- )
13948
- }
13949
- );
13950
- },
13951
- (prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
13952
- );
13953
- MarkdownContent.displayName = "MarkdownContent";
13954
- }
13955
- });
13956
13825
  function computeFoldRegions(code) {
13957
13826
  const lines = code.split("\n");
13958
13827
  const regions = [];
@@ -14498,6 +14367,155 @@ var init_CodeBlock = __esm({
14498
14367
  CodeBlock.displayName = "CodeBlock";
14499
14368
  }
14500
14369
  });
14370
+ var MarkdownContent;
14371
+ var init_MarkdownContent = __esm({
14372
+ "components/core/molecules/markdown/MarkdownContent.tsx"() {
14373
+ init_katex_min();
14374
+ init_Box();
14375
+ init_CodeBlock();
14376
+ init_useTranslate();
14377
+ init_cn();
14378
+ MarkdownContent = React85__namespace.default.memo(
14379
+ ({ content, direction, className }) => {
14380
+ const { t: _t } = useTranslate();
14381
+ const safeContent = typeof content === "string" ? content : String(content ?? "");
14382
+ return /* @__PURE__ */ jsxRuntime.jsx(
14383
+ Box,
14384
+ {
14385
+ className: cn("prose max-w-none", className),
14386
+ style: {
14387
+ color: "var(--color-foreground)",
14388
+ "--tw-prose-body": "var(--color-foreground)",
14389
+ "--tw-prose-headings": "var(--color-foreground)",
14390
+ "--tw-prose-lead": "var(--color-muted-foreground)",
14391
+ "--tw-prose-links": "var(--color-primary)",
14392
+ "--tw-prose-bold": "var(--color-foreground)",
14393
+ "--tw-prose-counters": "var(--color-muted-foreground)",
14394
+ "--tw-prose-bullets": "var(--color-muted-foreground)",
14395
+ "--tw-prose-hr": "var(--color-border)",
14396
+ "--tw-prose-quotes": "var(--color-foreground)",
14397
+ "--tw-prose-quote-borders": "var(--color-primary)",
14398
+ "--tw-prose-captions": "var(--color-muted-foreground)",
14399
+ "--tw-prose-code": "var(--color-foreground)",
14400
+ "--tw-prose-pre-code": "var(--color-foreground)",
14401
+ "--tw-prose-pre-bg": "var(--color-muted)",
14402
+ "--tw-prose-th-borders": "var(--color-border)",
14403
+ "--tw-prose-td-borders": "var(--color-border)",
14404
+ direction
14405
+ },
14406
+ children: /* @__PURE__ */ jsxRuntime.jsx(
14407
+ ReactMarkdown__default.default,
14408
+ {
14409
+ remarkPlugins: [remarkMath__default.default, remarkGfm__default.default],
14410
+ rehypePlugins: [
14411
+ [rehypeKatex__default.default, { strict: false, throwOnError: false }]
14412
+ ],
14413
+ components: {
14414
+ code({
14415
+ className: codeClassName,
14416
+ children,
14417
+ inline,
14418
+ ...props
14419
+ }) {
14420
+ if (!inline) {
14421
+ const match = /language-(\w+)/.exec(codeClassName ?? "");
14422
+ const language = match ? match[1] : "text";
14423
+ const code = String(children).replace(/\n$/, "");
14424
+ return /* @__PURE__ */ jsxRuntime.jsx(
14425
+ CodeBlock,
14426
+ {
14427
+ code,
14428
+ language,
14429
+ maxHeight: "60vh"
14430
+ }
14431
+ );
14432
+ }
14433
+ return /* @__PURE__ */ jsxRuntime.jsx(
14434
+ "code",
14435
+ {
14436
+ ...props,
14437
+ className: codeClassName,
14438
+ style: {
14439
+ backgroundColor: "var(--color-muted)",
14440
+ color: "var(--color-foreground)",
14441
+ border: "1px solid var(--color-border)",
14442
+ padding: "0.125rem 0.375rem",
14443
+ borderRadius: "0.25rem",
14444
+ fontSize: "0.875em",
14445
+ fontFamily: "ui-monospace, monospace"
14446
+ },
14447
+ children
14448
+ }
14449
+ );
14450
+ },
14451
+ // Style links
14452
+ a({ href, children, ...props }) {
14453
+ return /* @__PURE__ */ jsxRuntime.jsx(
14454
+ "a",
14455
+ {
14456
+ href,
14457
+ ...props,
14458
+ className: "text-[var(--color-primary)] hover:underline",
14459
+ target: href?.startsWith("http") ? "_blank" : void 0,
14460
+ rel: href?.startsWith("http") ? "noopener noreferrer" : void 0,
14461
+ children
14462
+ }
14463
+ );
14464
+ },
14465
+ // Style tables
14466
+ table({ children, ...props }) {
14467
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto my-4", children: /* @__PURE__ */ jsxRuntime.jsx(
14468
+ "table",
14469
+ {
14470
+ ...props,
14471
+ className: "min-w-full border-collapse border border-[var(--color-border)]",
14472
+ children
14473
+ }
14474
+ ) });
14475
+ },
14476
+ th({ children, ...props }) {
14477
+ return /* @__PURE__ */ jsxRuntime.jsx(
14478
+ "th",
14479
+ {
14480
+ ...props,
14481
+ className: "border border-[var(--color-border)] bg-[var(--color-muted)] px-4 py-2 text-left font-semibold",
14482
+ children
14483
+ }
14484
+ );
14485
+ },
14486
+ td({ children, ...props }) {
14487
+ return /* @__PURE__ */ jsxRuntime.jsx(
14488
+ "td",
14489
+ {
14490
+ ...props,
14491
+ className: "border border-[var(--color-border)] px-4 py-2",
14492
+ children
14493
+ }
14494
+ );
14495
+ },
14496
+ // Style blockquotes
14497
+ blockquote({ children, ...props }) {
14498
+ return /* @__PURE__ */ jsxRuntime.jsx(
14499
+ "blockquote",
14500
+ {
14501
+ ...props,
14502
+ className: "border-l-4 border-[var(--color-primary)] pl-4 italic text-[var(--color-foreground)] my-4",
14503
+ children
14504
+ }
14505
+ );
14506
+ }
14507
+ },
14508
+ children: safeContent
14509
+ }
14510
+ )
14511
+ }
14512
+ );
14513
+ },
14514
+ (prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
14515
+ );
14516
+ MarkdownContent.displayName = "MarkdownContent";
14517
+ }
14518
+ });
14501
14519
  function useLongPress(onLongPress, options = {}) {
14502
14520
  const { duration = 500, moveThreshold = 10 } = options;
14503
14521
  const timerRef = React85.useRef(null);
@@ -15,10 +15,6 @@ import { evaluate, createMinimalContext } from '@almadar/evaluator';
15
15
  import { useUISlots } from '@almadar/ui/context';
16
16
  import { Link, Outlet, useLocation } from 'react-router-dom';
17
17
  import ELK from 'elkjs/lib/elk.bundled.js';
18
- import ReactMarkdown from 'react-markdown';
19
- import remarkGfm from 'remark-gfm';
20
- import remarkMath from 'remark-math';
21
- import rehypeKatex from 'rehype-katex';
22
18
  import SyntaxHighlighter from 'react-syntax-highlighter/dist/esm/prism-light.js';
23
19
  import dark from 'react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js';
24
20
  import { orbLanguage, loloLanguage, ORB_COLORS } from '@almadar/syntax';
@@ -38,6 +34,10 @@ import langDiff from 'react-syntax-highlighter/dist/esm/languages/prism/diff.js'
38
34
  import langToml from 'react-syntax-highlighter/dist/esm/languages/prism/toml.js';
39
35
  import langGo from 'react-syntax-highlighter/dist/esm/languages/prism/go.js';
40
36
  import langGraphql from 'react-syntax-highlighter/dist/esm/languages/prism/graphql.js';
37
+ import ReactMarkdown from 'react-markdown';
38
+ import remarkGfm from 'remark-gfm';
39
+ import remarkMath from 'remark-math';
40
+ import rehypeKatex from 'rehype-katex';
41
41
  import { isInlineTrait } from '@almadar/core';
42
42
  import { DndContext, pointerWithin, rectIntersection, closestCorners, useSensors, useSensor, PointerSensor, KeyboardSensor, useDroppable } from '@dnd-kit/core';
43
43
  import { useSortable, arrayMove, sortableKeyboardCoordinates, SortableContext, rectSortingStrategy, verticalListSortingStrategy } from '@dnd-kit/sortable';
@@ -13773,137 +13773,6 @@ var init_katex_min = __esm({
13773
13773
  "node_modules/katex/dist/katex.min.css"() {
13774
13774
  }
13775
13775
  });
13776
- var MarkdownContent;
13777
- var init_MarkdownContent = __esm({
13778
- "components/core/molecules/markdown/MarkdownContent.tsx"() {
13779
- init_katex_min();
13780
- init_Box();
13781
- init_useTranslate();
13782
- init_cn();
13783
- MarkdownContent = React85__default.memo(
13784
- ({ content, direction, className }) => {
13785
- const { t: _t } = useTranslate();
13786
- const safeContent = typeof content === "string" ? content : String(content ?? "");
13787
- return /* @__PURE__ */ jsx(
13788
- Box,
13789
- {
13790
- className: cn("prose max-w-none", className),
13791
- style: {
13792
- color: "var(--color-foreground)",
13793
- "--tw-prose-body": "var(--color-foreground)",
13794
- "--tw-prose-headings": "var(--color-foreground)",
13795
- "--tw-prose-lead": "var(--color-muted-foreground)",
13796
- "--tw-prose-links": "var(--color-primary)",
13797
- "--tw-prose-bold": "var(--color-foreground)",
13798
- "--tw-prose-counters": "var(--color-muted-foreground)",
13799
- "--tw-prose-bullets": "var(--color-muted-foreground)",
13800
- "--tw-prose-hr": "var(--color-border)",
13801
- "--tw-prose-quotes": "var(--color-foreground)",
13802
- "--tw-prose-quote-borders": "var(--color-primary)",
13803
- "--tw-prose-captions": "var(--color-muted-foreground)",
13804
- "--tw-prose-code": "var(--color-foreground)",
13805
- "--tw-prose-pre-code": "var(--color-foreground)",
13806
- "--tw-prose-pre-bg": "var(--color-muted)",
13807
- "--tw-prose-th-borders": "var(--color-border)",
13808
- "--tw-prose-td-borders": "var(--color-border)",
13809
- direction
13810
- },
13811
- children: /* @__PURE__ */ jsx(
13812
- ReactMarkdown,
13813
- {
13814
- remarkPlugins: [remarkMath, remarkGfm],
13815
- rehypePlugins: [
13816
- [rehypeKatex, { strict: false, throwOnError: false }]
13817
- ],
13818
- components: {
13819
- // Handle inline code only — fenced code blocks are parsed out separately
13820
- code({ className: codeClassName, children, ...props }) {
13821
- return /* @__PURE__ */ jsx(
13822
- "code",
13823
- {
13824
- ...props,
13825
- className: codeClassName,
13826
- style: {
13827
- backgroundColor: "var(--color-muted)",
13828
- color: "var(--color-foreground)",
13829
- border: "1px solid var(--color-border)",
13830
- padding: "0.125rem 0.375rem",
13831
- borderRadius: "0.25rem",
13832
- fontSize: "0.875em",
13833
- fontFamily: "ui-monospace, monospace"
13834
- },
13835
- children
13836
- }
13837
- );
13838
- },
13839
- // Style links
13840
- a({ href, children, ...props }) {
13841
- return /* @__PURE__ */ jsx(
13842
- "a",
13843
- {
13844
- href,
13845
- ...props,
13846
- className: "text-[var(--color-primary)] hover:underline",
13847
- target: href?.startsWith("http") ? "_blank" : void 0,
13848
- rel: href?.startsWith("http") ? "noopener noreferrer" : void 0,
13849
- children
13850
- }
13851
- );
13852
- },
13853
- // Style tables
13854
- table({ children, ...props }) {
13855
- return /* @__PURE__ */ jsx("div", { className: "overflow-x-auto my-4", children: /* @__PURE__ */ jsx(
13856
- "table",
13857
- {
13858
- ...props,
13859
- className: "min-w-full border-collapse border border-[var(--color-border)]",
13860
- children
13861
- }
13862
- ) });
13863
- },
13864
- th({ children, ...props }) {
13865
- return /* @__PURE__ */ jsx(
13866
- "th",
13867
- {
13868
- ...props,
13869
- className: "border border-[var(--color-border)] bg-[var(--color-muted)] px-4 py-2 text-left font-semibold",
13870
- children
13871
- }
13872
- );
13873
- },
13874
- td({ children, ...props }) {
13875
- return /* @__PURE__ */ jsx(
13876
- "td",
13877
- {
13878
- ...props,
13879
- className: "border border-[var(--color-border)] px-4 py-2",
13880
- children
13881
- }
13882
- );
13883
- },
13884
- // Style blockquotes
13885
- blockquote({ children, ...props }) {
13886
- return /* @__PURE__ */ jsx(
13887
- "blockquote",
13888
- {
13889
- ...props,
13890
- className: "border-l-4 border-[var(--color-primary)] pl-4 italic text-[var(--color-foreground)] my-4",
13891
- children
13892
- }
13893
- );
13894
- }
13895
- },
13896
- children: safeContent
13897
- }
13898
- )
13899
- }
13900
- );
13901
- },
13902
- (prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
13903
- );
13904
- MarkdownContent.displayName = "MarkdownContent";
13905
- }
13906
- });
13907
13776
  function computeFoldRegions(code) {
13908
13777
  const lines = code.split("\n");
13909
13778
  const regions = [];
@@ -14449,6 +14318,155 @@ var init_CodeBlock = __esm({
14449
14318
  CodeBlock.displayName = "CodeBlock";
14450
14319
  }
14451
14320
  });
14321
+ var MarkdownContent;
14322
+ var init_MarkdownContent = __esm({
14323
+ "components/core/molecules/markdown/MarkdownContent.tsx"() {
14324
+ init_katex_min();
14325
+ init_Box();
14326
+ init_CodeBlock();
14327
+ init_useTranslate();
14328
+ init_cn();
14329
+ MarkdownContent = React85__default.memo(
14330
+ ({ content, direction, className }) => {
14331
+ const { t: _t } = useTranslate();
14332
+ const safeContent = typeof content === "string" ? content : String(content ?? "");
14333
+ return /* @__PURE__ */ jsx(
14334
+ Box,
14335
+ {
14336
+ className: cn("prose max-w-none", className),
14337
+ style: {
14338
+ color: "var(--color-foreground)",
14339
+ "--tw-prose-body": "var(--color-foreground)",
14340
+ "--tw-prose-headings": "var(--color-foreground)",
14341
+ "--tw-prose-lead": "var(--color-muted-foreground)",
14342
+ "--tw-prose-links": "var(--color-primary)",
14343
+ "--tw-prose-bold": "var(--color-foreground)",
14344
+ "--tw-prose-counters": "var(--color-muted-foreground)",
14345
+ "--tw-prose-bullets": "var(--color-muted-foreground)",
14346
+ "--tw-prose-hr": "var(--color-border)",
14347
+ "--tw-prose-quotes": "var(--color-foreground)",
14348
+ "--tw-prose-quote-borders": "var(--color-primary)",
14349
+ "--tw-prose-captions": "var(--color-muted-foreground)",
14350
+ "--tw-prose-code": "var(--color-foreground)",
14351
+ "--tw-prose-pre-code": "var(--color-foreground)",
14352
+ "--tw-prose-pre-bg": "var(--color-muted)",
14353
+ "--tw-prose-th-borders": "var(--color-border)",
14354
+ "--tw-prose-td-borders": "var(--color-border)",
14355
+ direction
14356
+ },
14357
+ children: /* @__PURE__ */ jsx(
14358
+ ReactMarkdown,
14359
+ {
14360
+ remarkPlugins: [remarkMath, remarkGfm],
14361
+ rehypePlugins: [
14362
+ [rehypeKatex, { strict: false, throwOnError: false }]
14363
+ ],
14364
+ components: {
14365
+ code({
14366
+ className: codeClassName,
14367
+ children,
14368
+ inline,
14369
+ ...props
14370
+ }) {
14371
+ if (!inline) {
14372
+ const match = /language-(\w+)/.exec(codeClassName ?? "");
14373
+ const language = match ? match[1] : "text";
14374
+ const code = String(children).replace(/\n$/, "");
14375
+ return /* @__PURE__ */ jsx(
14376
+ CodeBlock,
14377
+ {
14378
+ code,
14379
+ language,
14380
+ maxHeight: "60vh"
14381
+ }
14382
+ );
14383
+ }
14384
+ return /* @__PURE__ */ jsx(
14385
+ "code",
14386
+ {
14387
+ ...props,
14388
+ className: codeClassName,
14389
+ style: {
14390
+ backgroundColor: "var(--color-muted)",
14391
+ color: "var(--color-foreground)",
14392
+ border: "1px solid var(--color-border)",
14393
+ padding: "0.125rem 0.375rem",
14394
+ borderRadius: "0.25rem",
14395
+ fontSize: "0.875em",
14396
+ fontFamily: "ui-monospace, monospace"
14397
+ },
14398
+ children
14399
+ }
14400
+ );
14401
+ },
14402
+ // Style links
14403
+ a({ href, children, ...props }) {
14404
+ return /* @__PURE__ */ jsx(
14405
+ "a",
14406
+ {
14407
+ href,
14408
+ ...props,
14409
+ className: "text-[var(--color-primary)] hover:underline",
14410
+ target: href?.startsWith("http") ? "_blank" : void 0,
14411
+ rel: href?.startsWith("http") ? "noopener noreferrer" : void 0,
14412
+ children
14413
+ }
14414
+ );
14415
+ },
14416
+ // Style tables
14417
+ table({ children, ...props }) {
14418
+ return /* @__PURE__ */ jsx("div", { className: "overflow-x-auto my-4", children: /* @__PURE__ */ jsx(
14419
+ "table",
14420
+ {
14421
+ ...props,
14422
+ className: "min-w-full border-collapse border border-[var(--color-border)]",
14423
+ children
14424
+ }
14425
+ ) });
14426
+ },
14427
+ th({ children, ...props }) {
14428
+ return /* @__PURE__ */ jsx(
14429
+ "th",
14430
+ {
14431
+ ...props,
14432
+ className: "border border-[var(--color-border)] bg-[var(--color-muted)] px-4 py-2 text-left font-semibold",
14433
+ children
14434
+ }
14435
+ );
14436
+ },
14437
+ td({ children, ...props }) {
14438
+ return /* @__PURE__ */ jsx(
14439
+ "td",
14440
+ {
14441
+ ...props,
14442
+ className: "border border-[var(--color-border)] px-4 py-2",
14443
+ children
14444
+ }
14445
+ );
14446
+ },
14447
+ // Style blockquotes
14448
+ blockquote({ children, ...props }) {
14449
+ return /* @__PURE__ */ jsx(
14450
+ "blockquote",
14451
+ {
14452
+ ...props,
14453
+ className: "border-l-4 border-[var(--color-primary)] pl-4 italic text-[var(--color-foreground)] my-4",
14454
+ children
14455
+ }
14456
+ );
14457
+ }
14458
+ },
14459
+ children: safeContent
14460
+ }
14461
+ )
14462
+ }
14463
+ );
14464
+ },
14465
+ (prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
14466
+ );
14467
+ MarkdownContent.displayName = "MarkdownContent";
14468
+ }
14469
+ });
14452
14470
  function useLongPress(onLongPress, options = {}) {
14453
14471
  const { duration = 500, moveThreshold = 10 } = options;
14454
14472
  const timerRef = useRef(null);