boltdocs 3.1.0 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/{adapters-DEXNIv3x.mjs → adapters-ByYY44Zy.mjs} +1 -1
  2. package/dist/{adapters-uGz-UKQa.cjs → adapters-DvmtpdSF.cjs} +1 -1
  3. package/dist/{banner-DjujkctF.d.ts → banner-BMop1KLF.d.ts} +2 -2
  4. package/dist/{banner-DdSgCs4G.d.cts → banner-CVD0GugR.d.cts} +2 -2
  5. package/dist/{cache-CfRTUzWC.cjs → cache-CO4Dy2uQ.cjs} +1 -1
  6. package/dist/{cache-B0C2i0yP.mjs → cache-Dk53iOo6.mjs} +1 -1
  7. package/dist/chunk-BFSpntXv.mjs +6 -0
  8. package/dist/{chunk-Ds5LZdWN.cjs → chunk-D1Md3oWO.cjs} +1 -1
  9. package/dist/client/index.cjs +219 -172
  10. package/dist/client/index.d.cts +75 -9
  11. package/dist/client/index.d.ts +75 -9
  12. package/dist/client/index.js +119 -73
  13. package/dist/client/mdx.cjs +1 -1
  14. package/dist/client/mdx.d.cts +1 -1
  15. package/dist/client/mdx.d.ts +1 -1
  16. package/dist/client/mdx.js +1 -1
  17. package/dist/client/primitives.cjs +7 -7
  18. package/dist/client/primitives.d.cts +5 -22
  19. package/dist/client/primitives.d.ts +5 -22
  20. package/dist/client/primitives.js +4 -4
  21. package/dist/client/theme/reset.css +31 -4
  22. package/dist/{shiki-adapter-fS94vy-z.d.mts → config-BpzaPsJj.d.cts} +325 -78
  23. package/dist/config-CCXp3aXO.mjs +7 -0
  24. package/dist/{config-BxsogK5A.cjs → config-CMd4XoFq.cjs} +1 -1
  25. package/dist/config-DlGoEM9D.cjs +7 -0
  26. package/dist/{shiki-adapter-l2kEP5rn.d.cts → config-xtS0ZkMm.d.mts} +325 -78
  27. package/dist/{csp-BX06rvdg.cjs → csp-CRp_3U7a.cjs} +1 -1
  28. package/dist/csp-oTC2ygvF.mjs +6 -0
  29. package/dist/{docs-layout-DyLDBwS6.js → docs-layout-BdtZ9z6s.js} +9 -28
  30. package/dist/{docs-layout-D1buSdua.cjs → docs-layout-CFWI15Id.cjs} +69 -88
  31. package/dist/{doctor-DPDcRKM1.cjs → doctor-BBtmNJE0.cjs} +1 -1
  32. package/dist/doctor-Bv16QSrI.cjs +7 -0
  33. package/dist/doctor-DOAbSaiL.mjs +7 -0
  34. package/dist/{generator-BN75lJOv.cjs → generator-COepVWGi.cjs} +1 -1
  35. package/dist/{handler-Btd4t_67.mjs → handler-DzQae4eA.mjs} +1 -1
  36. package/dist/{handler-1LRMYeI4.cjs → handler-XX7cLTqe.cjs} +1 -1
  37. package/dist/headers-Ddwek8K7.mjs +6 -0
  38. package/dist/{headers-YpD10rDb.cjs → headers-dg4SDrjY.cjs} +1 -1
  39. package/dist/{image-5WsgWYTh.js → image-Bz87fCla.js} +1 -1
  40. package/dist/{image-Hb105Gu6.cjs → image-C4TlpMHn.cjs} +18 -18
  41. package/dist/link-2PzgTnaP.js +673 -0
  42. package/dist/{icons-dev-YtDoLUsb.cjs → link-D1Gjkb-2.cjs} +0 -350
  43. package/dist/{mdx-Bv-pS6-O.js → mdx-BuO6a1f7.js} +195 -40
  44. package/dist/{mdx-CDUcJmye.cjs → mdx-CD-tSjRG.cjs} +234 -73
  45. package/dist/{meta-loader-CTB62-Mo.cjs → meta-loader-Dq1zcFnh.cjs} +1 -1
  46. package/dist/node/cache.cjs +1 -1
  47. package/dist/node/cache.d.cts +2 -1
  48. package/dist/node/cache.d.mts +2 -1
  49. package/dist/node/cache.mjs +1 -1
  50. package/dist/node/cli-entry.cjs +6 -6
  51. package/dist/node/cli-entry.mjs +9 -9
  52. package/dist/node/index.cjs +1 -1
  53. package/dist/node/index.d.cts +20 -174
  54. package/dist/node/index.d.mts +18 -175
  55. package/dist/node/index.mjs +1 -1
  56. package/dist/node/mdx/shiki-adapter.cjs +1 -1
  57. package/dist/node/mdx/shiki-adapter.d.cts +49 -1
  58. package/dist/node/mdx/shiki-adapter.d.mts +49 -1
  59. package/dist/node/mdx/shiki-adapter.mjs +1 -1
  60. package/dist/node-B5hu_6qj.cjs +104 -0
  61. package/dist/node-BXtqM1uH.mjs +6 -0
  62. package/dist/node-C8725aw7.mjs +104 -0
  63. package/dist/node-aD1eisrR.cjs +6 -0
  64. package/dist/{package-_-Oa8-qN.cjs → package-CH2ChQqw.cjs} +1 -1
  65. package/dist/{package-CoHWTf0N.mjs → package-DSSB8B5L.mjs} +1 -1
  66. package/dist/{pages-external-CX2uyW95.cjs → pages-external-XkYIs-d5.cjs} +1 -1
  67. package/dist/parser-DCiEWkSk.cjs +8 -0
  68. package/dist/parser-qk9FIHJ7.mjs +8 -0
  69. package/dist/plugin-CX1OZ6jB.cjs +73 -0
  70. package/dist/plugin-CgfiWaFZ.mjs +73 -0
  71. package/dist/routes-BW6zsk7Z.mjs +6 -0
  72. package/dist/routes-BgoIB5wb.cjs +6 -0
  73. package/dist/{routes-D_S9kjkS.cjs → routes-CORVxc02.cjs} +1 -1
  74. package/dist/{search-dialog-BpNULmrl.cjs → search-dialog-B1NERUNx.cjs} +101 -55
  75. package/dist/{search-dialog-BbtxA1uT.cjs → search-dialog-BRFno7HD.cjs} +8 -8
  76. package/dist/{search-dialog-DC7oXU-5.js → search-dialog-BmxHiKwt.js} +2 -2
  77. package/dist/{search-dialog-gp9lrJXm.js → search-dialog-D6TvjcuV.js} +1 -1
  78. package/dist/{search-dialog-PJrFRU5G.js → search-dialog-DFnlx8LO.js} +44 -4
  79. package/dist/{search-dialog-BIuxGQsg.cjs → search-dialog-DHqwjJuG.cjs} +1 -1
  80. package/dist/server/index.cjs +1 -1
  81. package/dist/server/index.d.mts +1 -1
  82. package/dist/server/index.mjs +1 -1
  83. package/dist/shiki-adapter-CoQ6jyJ4.cjs +6 -0
  84. package/dist/shiki-adapter-D-aKw7PP.mjs +6 -0
  85. package/dist/{sidebar-DknLUI1R.d.ts → sidebar-COTaMHR-.d.ts} +349 -41
  86. package/dist/{sidebar-DH2iPKXM.d.cts → sidebar-CrEdJuHX.d.cts} +349 -41
  87. package/dist/{types-generator-CYcHkDzZ.cjs → types-generator-BXhv7Ill.cjs} +1 -1
  88. package/dist/types-generator-bDPvUztF.mjs +26 -0
  89. package/dist/utils-Crm9oPcV.mjs +7 -0
  90. package/dist/utils-D6Xtj0FZ.cjs +7 -0
  91. package/package.json +13 -10
  92. package/src/shared/types.ts +361 -19
  93. package/dist/chunk-hT5z_Zn9-DsJawvsz.mjs +0 -6
  94. package/dist/chunk-hT5z_Zn9-SKz6VFXu.cjs +0 -6
  95. package/dist/config-DAgpZyh6.mjs +0 -7
  96. package/dist/config-DrRQYDCI.cjs +0 -7
  97. package/dist/csp-z2D0FuRW.mjs +0 -6
  98. package/dist/doctor-BadGEhXv.cjs +0 -7
  99. package/dist/doctor-vDsUDgqp.mjs +0 -7
  100. package/dist/escape-string-regexp-AG8q1e25-9Un9V90q.mjs +0 -6
  101. package/dist/escape-string-regexp-AG8q1e25-bJ9Ixe7c.cjs +0 -6
  102. package/dist/esm-shims-DSep1HcR.mjs +0 -6
  103. package/dist/headers-CL0pMcwm.mjs +0 -6
  104. package/dist/icons-dev-CHZOwhQA.js +0 -921
  105. package/dist/lib-BR0SoanK-CLswltLI.cjs +0 -6
  106. package/dist/lib-BR0SoanK-DcYeDrE6.mjs +0 -6
  107. package/dist/lib-DPoCz1YB-CLYXwKST.cjs +0 -6
  108. package/dist/lib-DPoCz1YB-CyGOqgSO.mjs +0 -6
  109. package/dist/micromark-util-character-5KqJafVT-C6gnc770.cjs +0 -6
  110. package/dist/micromark-util-character-5KqJafVT-DkPKsbgn.mjs +0 -6
  111. package/dist/node-BDBv8CT6.mjs +0 -104
  112. package/dist/node-DFV_FV0y.mjs +0 -6
  113. package/dist/node-DqsP7kXz.cjs +0 -6
  114. package/dist/node-yFmAavND.cjs +0 -104
  115. package/dist/parser-BZJgAa9E.mjs +0 -8
  116. package/dist/parser-DlanzESE.cjs +0 -8
  117. package/dist/plugin-BVuwx5D9.cjs +0 -73
  118. package/dist/plugin-BoxD91Yh.mjs +0 -73
  119. package/dist/rehype-slug--ZOxZ-_K-BNeYC4aT.cjs +0 -6
  120. package/dist/rehype-slug--ZOxZ-_K-CjIQEJCs.mjs +0 -6
  121. package/dist/remark-frontmatter-wFYRLcCt-CutW0gA3.mjs +0 -8
  122. package/dist/remark-frontmatter-wFYRLcCt-ENB5qG3y.cjs +0 -8
  123. package/dist/remark-gfm-B8TMkQbX-CjUJo8Rd.cjs +0 -21
  124. package/dist/remark-gfm-B8TMkQbX-Ctu0VV1_.mjs +0 -21
  125. package/dist/rolldown-runtime-fkIsjY3S.mjs +0 -6
  126. package/dist/rollup-DMqoG11U-CKcJ37u_.mjs +0 -59
  127. package/dist/rollup-DMqoG11U-DKdxvZIj.cjs +0 -59
  128. package/dist/routes-BN2XbGcT.mjs +0 -6
  129. package/dist/routes-Cnq8xTCv.cjs +0 -6
  130. package/dist/shiki-adapter-CGTmrR6S.cjs +0 -6
  131. package/dist/shiki-adapter-CK3llqw2.mjs +0 -6
  132. package/dist/types-generator-DVOnRVKU.mjs +0 -26
  133. package/dist/utils-B3xYMrpK.mjs +0 -7
  134. package/dist/utils-Bz1tG9Dg.cjs +0 -7
  135. /package/dist/{errors-C0Hx15Ag.mjs → errors-0zGHRLue.mjs} +0 -0
  136. /package/dist/{errors-Dx6JHoKE.cjs → errors-vKw8CkiX.cjs} +0 -0
  137. /package/dist/{index-DJYJzs-Z.d.mts → index-1KsTDq4o.d.mts} +0 -0
  138. /package/dist/{meta-loader-Bq-MjTXB.mjs → meta-loader-C4Hu9RN9.mjs} +0 -0
@@ -3,10 +3,10 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import { D as Check, H as Info, M as Copy, R as File, T as AlertTriangle, W as Lightbulb, _ as Link, a as Csv, c as JavaScript, d as React$1, f as Rust, g as Yaml, i as Css, l as Json, m as TypeScript, n as BracketsOrange, p as Shell, r as BracketsRed, rt as useConfig, u as Markdown, w as AlertCircle, y as cn } from "./icons-dev-CHZOwhQA.js";
7
- import { a as CodeBlockGroup, i as CodeBlockContent, l as useTheme, n as Tooltip, o as CodeBlockHeader, r as CodeBlock$1, s as Heading$1, t as Image$1 } from "./image-5WsgWYTh.js";
6
+ import { B as useConfig, D as Lightbulb, T as Info, c as AlertCircle, d as Check, g as Copy, l as AlertTriangle, r as cn, t as Link } from "./link-2PzgTnaP.js";
7
+ import { a as CodeBlockGroup, i as CodeBlockContent, l as useTheme, n as Tooltip, o as CodeBlockHeader, r as CodeBlock$1, s as Heading$1, t as Image$1 } from "./image-Bz87fCla.js";
8
8
  import { useCallback, useEffect, useRef, useState } from "react";
9
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
10
  import { Button } from "react-aria-components";
11
11
 
12
12
  //#region src/client/components/mdx/field.tsx
@@ -212,7 +212,7 @@ function Callout({ children, className = "", variant = "note", title, ...props }
212
212
  ...props,
213
213
  children: [/* @__PURE__ */ jsx("div", {
214
214
  className: cn("shrink-0 pt-0.5", styles.iconColor),
215
- children: /* @__PURE__ */ jsx(Icon, { className: "w-5 h-5 stroke-[2]" })
215
+ children: /* @__PURE__ */ jsx(Icon, { className: "w-5 h-5 stroke-2" })
216
216
  }), /* @__PURE__ */ jsxs("div", {
217
217
  className: "flex-1 text-[0.875rem] leading-[1.6]",
218
218
  children: [/* @__PURE__ */ jsx("div", {
@@ -252,32 +252,13 @@ const copyToClipboard = async (text) => {
252
252
 
253
253
  //#endregion
254
254
  //#region src/client/components/mdx/use-code-block.ts
255
- const langIconMap = {
256
- ts: TypeScript,
257
- tsx: React$1,
258
- js: JavaScript,
259
- jsx: React$1,
260
- json: Json,
261
- css: Css,
262
- html: BracketsOrange,
263
- md: Markdown,
264
- mdx: Markdown,
265
- bash: Shell,
266
- sh: Shell,
267
- yaml: Yaml,
268
- yml: Yaml,
269
- rs: Rust,
270
- rust: Rust,
271
- toml: BracketsRed,
272
- csv: Csv
273
- };
274
255
  function useCodeBlock(props) {
275
256
  const [copied, setCopied] = useState(false);
276
257
  const [isExpanded, setIsExpanded] = useState(false);
277
258
  const [isExpandable, setIsExpandable] = useState(false);
259
+ const [rated, setRated] = useState(null);
278
260
  const preRef = useRef(null);
279
261
  const timerRef = useRef(null);
280
- const [rated, setRated] = useState(null);
281
262
  const customConfig = useConfig().integrations?.feedback?.custom;
282
263
  const showCodeBlockFeedback = !!(customConfig?.enabled && !props.plain);
283
264
  const lang = props.lang || props["data-lang"] || "";
@@ -330,7 +311,6 @@ function useCodeBlock(props) {
330
311
  const lines = (preRef.current?.textContent ?? "").trim().split("\n").length;
331
312
  setIsExpandable(lines > 6);
332
313
  }, [props.children, props.highlightedHtml]);
333
- const LangIcon = langIconMap[lang] || File;
334
314
  return {
335
315
  copied,
336
316
  isExpanded,
@@ -345,8 +325,7 @@ function useCodeBlock(props) {
345
325
  lang,
346
326
  showCodeBlockFeedback,
347
327
  rated,
348
- handleRate,
349
- LangIcon
328
+ handleRate
350
329
  };
351
330
  }
352
331
 
@@ -369,8 +348,8 @@ const CodeBlockFeedback = ({ rated, onRate }) => {
369
348
  children: [/* @__PURE__ */ jsx(Tooltip, {
370
349
  content: rated === "up" ? "Helpful!" : "This code is helpful",
371
350
  children: /* @__PURE__ */ jsx(Button, {
372
- onPress: () => onRate("up"),
373
- disabled: rated !== null,
351
+ onPress: (() => onRate("up")),
352
+ isDisabled: rated !== null,
374
353
  className: cn("grid place-items-center size-8 bg-transparent outline-none cursor-pointer transition-all duration-200 hover:scale-110 active:scale-95 [&>svg]:size-4 [&>svg]:stroke-2 z-10", rated === "up" ? "text-emerald-500 dark:text-emerald-400" : rated === "down" ? "opacity-30 cursor-not-allowed text-muted" : "text-muted hover:text-body"),
375
354
  "aria-label": "Mark as helpful",
376
355
  children: /* @__PURE__ */ jsx("svg", {
@@ -387,8 +366,8 @@ const CodeBlockFeedback = ({ rated, onRate }) => {
387
366
  }), /* @__PURE__ */ jsx(Tooltip, {
388
367
  content: rated === "down" ? "Unhelpful" : "This code is unhelpful",
389
368
  children: /* @__PURE__ */ jsx(Button, {
390
- onPress: () => onRate("down"),
391
- disabled: rated !== null,
369
+ onPress: (() => onRate("down")),
370
+ isDisabled: rated !== null,
392
371
  className: cn("grid place-items-center size-8 bg-transparent outline-none cursor-pointer transition-all duration-200 hover:scale-110 active:scale-95 [&>svg]:size-4 [&>svg]:stroke-2 z-10", rated === "down" ? "text-rose-500 dark:text-rose-400" : rated === "up" ? "opacity-30 cursor-not-allowed text-muted" : "text-muted hover:text-body"),
393
372
  "aria-label": "Mark as unhelpful",
394
373
  children: /* @__PURE__ */ jsx("svg", {
@@ -408,17 +387,14 @@ const CodeBlockFeedback = ({ rated, onRate }) => {
408
387
  function CodeBlock(props) {
409
388
  const { children, hideCopy = false, highlightedHtml, "data-highlighted-html": dataHighlightedHtml, title, "data-title": dataTitle, "data-lang": dataLang, plain = false, lineNumbers, showLineNumbers, wordWrap, "word-wrap": wordWrapHyphen, metastring, ...rest } = props;
410
389
  const { className: shikiClassName, ...cleanRest } = rest;
411
- const { copied, isExpanded, setIsExpanded, isExpandable, preRef, handleCopy, shouldTruncate, isHighlighted, effectiveHighlightedHtml, effectiveTitle, showCodeBlockFeedback, rated, handleRate, LangIcon } = useCodeBlock(props);
390
+ const { copied, isExpanded, setIsExpanded, isExpandable, preRef, handleCopy, shouldTruncate, isHighlighted, effectiveHighlightedHtml, effectiveTitle, showCodeBlockFeedback, rated, handleRate } = useCodeBlock(props);
412
391
  return /* @__PURE__ */ jsxs(CodeBlock$1, {
413
392
  plain,
414
393
  className: props.className,
415
394
  children: [(effectiveTitle || !hideCopy) && /* @__PURE__ */ jsxs(CodeBlockHeader, {
416
395
  className: cn({ "absolute top-2 left-0 w-full": !effectiveTitle }),
417
- children: [/* @__PURE__ */ jsx(CodeBlockGroup, { children: effectiveTitle && /* @__PURE__ */ jsxs(Fragment, { children: [LangIcon ? /* @__PURE__ */ jsx(LangIcon, { size: 14 }) : /* @__PURE__ */ jsx(File, {
418
- size: 14,
419
- className: "opacity-60"
420
- }), /* @__PURE__ */ jsx("span", { children: effectiveTitle })] }) }), /* @__PURE__ */ jsxs("div", {
421
- className: "flex items-center gap-1",
396
+ children: [/* @__PURE__ */ jsx(CodeBlockGroup, { children: effectiveTitle && /* @__PURE__ */ jsx("span", { children: effectiveTitle }) }), /* @__PURE__ */ jsxs("div", {
397
+ className: "flex items-center gap-1 bg-(--color-code-bg) pl-2 z-10",
422
398
  children: [showCodeBlockFeedback && /* @__PURE__ */ jsx(CodeBlockFeedback, {
423
399
  rated,
424
400
  onRate: handleRate
@@ -526,7 +502,7 @@ function Card({ className, title, icon, href, children, ...props }) {
526
502
  /* @__PURE__ */ jsxs("div", {
527
503
  className: "relative z-10 flex items-center gap-3",
528
504
  children: [icon && /* @__PURE__ */ jsx("div", {
529
- className: cn("shrink-0 transition-transform duration-500 group-hover:rotate-[15deg] group-hover:scale-110 flex items-center justify-center text-muted group-hover:text-primary-500", "[&>svg]:w-6 [&>svg]:h-6 [&>svg]:stroke-[1.5]"),
505
+ className: cn("shrink-0 transition-transform duration-500 group-hover:rotate-15 group-hover:scale-110 flex items-center justify-center text-muted group-hover:text-primary-500", "[&>svg]:w-6 [&>svg]:h-6 [&>svg]:stroke-[1.5]"),
530
506
  children: icon
531
507
  }), title && /* @__PURE__ */ jsx("h3", {
532
508
  className: "font-semibold text-base m-0 leading-none text-body",
@@ -580,6 +556,184 @@ function LastUpdated({ date }) {
580
556
  });
581
557
  }
582
558
 
559
+ //#endregion
560
+ //#region src/client/components/mdx/timeline.tsx
561
+ const VARIANT_PALETTE = {
562
+ primary: {
563
+ ring: "border-primary-500/70",
564
+ fill: "bg-primary-500",
565
+ badgeBg: "bg-primary-500/10",
566
+ badgeText: "text-primary-600 dark:text-primary-400",
567
+ badgeBorder: "border-primary-500/30"
568
+ },
569
+ success: {
570
+ ring: "border-success-500/70",
571
+ fill: "bg-success-500",
572
+ badgeBg: "bg-success-500/10",
573
+ badgeText: "text-success-500",
574
+ badgeBorder: "border-success-500/30"
575
+ },
576
+ info: {
577
+ ring: "border-info-500/70",
578
+ fill: "bg-info-500",
579
+ badgeBg: "bg-info-500/10",
580
+ badgeText: "text-info-500",
581
+ badgeBorder: "border-info-500/30"
582
+ },
583
+ warning: {
584
+ ring: "border-warning-500/70",
585
+ fill: "bg-warning-500",
586
+ badgeBg: "bg-warning-500/10",
587
+ badgeText: "text-warning-500",
588
+ badgeBorder: "border-warning-500/30"
589
+ },
590
+ danger: {
591
+ ring: "border-danger-500/70",
592
+ fill: "bg-danger-500",
593
+ badgeBg: "bg-danger-500/10",
594
+ badgeText: "text-danger-500",
595
+ badgeBorder: "border-danger-500/30"
596
+ },
597
+ major: {
598
+ ring: "",
599
+ fill: "",
600
+ badgeBg: "",
601
+ badgeText: "",
602
+ badgeBorder: ""
603
+ },
604
+ minor: {
605
+ ring: "",
606
+ fill: "",
607
+ badgeBg: "",
608
+ badgeText: "",
609
+ badgeBorder: ""
610
+ },
611
+ patch: {
612
+ ring: "",
613
+ fill: "",
614
+ badgeBg: "",
615
+ badgeText: "",
616
+ badgeBorder: ""
617
+ },
618
+ new: {
619
+ ring: "",
620
+ fill: "",
621
+ badgeBg: "",
622
+ badgeText: "",
623
+ badgeBorder: ""
624
+ },
625
+ deprecated: {
626
+ ring: "",
627
+ fill: "",
628
+ badgeBg: "",
629
+ badgeText: "",
630
+ badgeBorder: ""
631
+ },
632
+ breaking: {
633
+ ring: "",
634
+ fill: "",
635
+ badgeBg: "",
636
+ badgeText: "",
637
+ badgeBorder: ""
638
+ }
639
+ };
640
+ Object.assign(VARIANT_PALETTE, {
641
+ major: VARIANT_PALETTE.primary,
642
+ minor: VARIANT_PALETTE.success,
643
+ patch: VARIANT_PALETTE.info,
644
+ new: VARIANT_PALETTE.primary,
645
+ deprecated: VARIANT_PALETTE.warning,
646
+ breaking: VARIANT_PALETTE.danger
647
+ });
648
+ function normalizeBadge(badge) {
649
+ if (!badge) return null;
650
+ if (typeof badge === "string") return {
651
+ text: badge,
652
+ variant: "primary"
653
+ };
654
+ return {
655
+ text: badge.text,
656
+ variant: badge.variant ?? "primary"
657
+ };
658
+ }
659
+ function formatDate(date, locale) {
660
+ if (date === void 0 || date === null || date === "") return null;
661
+ const d = date instanceof Date ? date : new Date(date);
662
+ if (Number.isNaN(d.getTime())) return null;
663
+ return d.toLocaleDateString(locale ?? "en-US", {
664
+ year: "numeric",
665
+ month: "short",
666
+ day: "numeric"
667
+ });
668
+ }
669
+ const VARIANT_DEFAULT_ICON = {
670
+ success: Check,
671
+ info: Info,
672
+ warning: AlertTriangle,
673
+ danger: AlertCircle
674
+ };
675
+ function TimelineRoot({ children, className, compact = false, ...props }) {
676
+ return /* @__PURE__ */ jsxs("ol", {
677
+ role: "list",
678
+ className: cn("relative my-8 ms-3", compact ? "space-y-3" : "space-y-7", className),
679
+ ...props,
680
+ children: [/* @__PURE__ */ jsx("span", {
681
+ "aria-hidden": "true",
682
+ className: "pointer-events-none absolute top-3 bottom-3 start-[5.5px] w-px bg-subtle"
683
+ }), children]
684
+ });
685
+ }
686
+ function TimelineItem({ date, title, badge, icon, variant = "primary", locale, className, children, ...props }) {
687
+ const palette = VARIANT_PALETTE[variant] ?? VARIANT_PALETTE.primary;
688
+ const formatted = formatDate(date, locale);
689
+ const badgeCfg = normalizeBadge(badge);
690
+ const FallbackIcon = VARIANT_DEFAULT_ICON[variant];
691
+ const dot = icon ?? (FallbackIcon ? /* @__PURE__ */ jsx(FallbackIcon, {
692
+ size: 12,
693
+ className: "text-white",
694
+ "aria-hidden": "true"
695
+ }) : /* @__PURE__ */ jsx("span", {
696
+ "aria-hidden": "true",
697
+ className: cn("w-2 h-2 rounded-full", palette.fill)
698
+ }));
699
+ const ariaLabel = [formatted, typeof title === "string" ? title : null].filter(Boolean).join(" - ") || void 0;
700
+ const a11yProps = ariaLabel ? {
701
+ role: "img",
702
+ "aria-label": ariaLabel
703
+ } : { "aria-hidden": "true" };
704
+ return /* @__PURE__ */ jsxs("li", {
705
+ className: cn("relative ps-8", className),
706
+ ...props,
707
+ children: [
708
+ /* @__PURE__ */ jsx("span", {
709
+ ...a11yProps,
710
+ className: cn("absolute start-0 top-1 flex items-center justify-center w-3 h-3 rounded-full", "bg-surface border-2 shadow-sm", palette.ring),
711
+ children: dot
712
+ }),
713
+ /* @__PURE__ */ jsxs("div", {
714
+ className: "flex items-center gap-2 flex-wrap mb-1",
715
+ children: [formatted && /* @__PURE__ */ jsx("time", {
716
+ dateTime: date instanceof Date ? date.toISOString() : new Date(date).toISOString(),
717
+ className: "text-[11px] uppercase tracking-wider font-mono tabular-nums text-muted select-none",
718
+ children: formatted
719
+ }), badgeCfg && /* @__PURE__ */ jsx("span", {
720
+ className: cn("inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-bold uppercase tracking-wide border", palette.badgeBg, palette.badgeText, palette.badgeBorder),
721
+ children: badgeCfg.text
722
+ })]
723
+ }),
724
+ /* @__PURE__ */ jsx("h3", {
725
+ className: "text-base font-semibold text-body m-0 leading-snug",
726
+ children: title
727
+ }),
728
+ children && /* @__PURE__ */ jsx("div", {
729
+ className: "mt-2 text-[0.9rem] leading-[1.6] text-paragraph prose prose-neutral dark:prose-invert max-w-none [&>p]:m-0 [&>p+p]:mt-2 [&_a]:text-primary-500 [&_a]:no-underline hover:[&_a]:underline",
730
+ children
731
+ })
732
+ ]
733
+ });
734
+ }
735
+ const Timeline = Object.assign(TimelineRoot, { Item: TimelineItem });
736
+
583
737
  //#endregion
584
738
  //#region src/client/components/mdx/index.ts
585
739
  const mdx_components_default = {
@@ -591,8 +745,9 @@ const mdx_components_default = {
591
745
  Field,
592
746
  Callout,
593
747
  Card,
594
- Cards
748
+ Cards,
749
+ Timeline
595
750
  };
596
751
 
597
752
  //#endregion
598
- export { useCodeBlock as n, copyToClipboard as r, mdx_components_default as t };
753
+ export { copyToClipboard as i, Timeline as n, useCodeBlock as r, mdx_components_default as t };