@krak-stack/registry 0.1.13 → 0.1.15

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 (44) hide show
  1. package/README.md +19 -0
  2. package/dist/components/ui/app-brand.d.ts +18 -13
  3. package/dist/components/ui/app-brand.js +48 -15
  4. package/dist/components/ui/code-block.js +10 -6
  5. package/dist/components/ui/copy-button.d.ts +1 -1
  6. package/dist/components/ui/copy-button.js +1 -1
  7. package/dist/components/ui/data-table.d.ts +1 -1
  8. package/dist/components/ui/data-table.js +21 -20
  9. package/dist/components/ui/effect-form.js +7 -6
  10. package/dist/components/ui/file-picker.js +2 -1
  11. package/dist/components/ui/form.js +17 -15
  12. package/dist/components/ui/google-map.d.ts +6 -10
  13. package/dist/components/ui/google-map.js +19 -14
  14. package/dist/components/ui/locale-switcher.js +7 -1
  15. package/dist/components/ui/sidebar-layout.js +19 -21
  16. package/dist/components/ui/theme-switcher.js +1 -1
  17. package/dist/lib/docs-core.js +165 -109
  18. package/dist/lib/documentation-toolkit.d.ts +1 -1
  19. package/dist/lib/documentation-toolkit.js +41 -40
  20. package/dist/lib/httpapi-cli.d.ts +6 -6
  21. package/dist/lib/httpapi-cli.js +83 -48
  22. package/dist/lib/httpapi-client.d.ts +11 -2
  23. package/dist/lib/httpapi-client.js +29 -9
  24. package/dist/lib/httpapi-helpers.d.ts +15 -21
  25. package/dist/lib/httpapi-helpers.js +38 -26
  26. package/dist/lib/httpapi-mcp.js +81 -50
  27. package/dist/lib/httpapi-toolkit.d.ts +3 -2
  28. package/dist/lib/httpapi-toolkit.js +101 -65
  29. package/dist/lib/seo.js +29 -17
  30. package/dist/oxlint/anti-slop/index.js +1592 -0
  31. package/dist/services/agent/client/atom.d.ts +7 -7
  32. package/dist/services/agent/client/index.js +100 -62
  33. package/dist/services/agent/index.d.ts +71 -71
  34. package/dist/services/agent/index.js +38 -19
  35. package/dist/services/notification/channels/index.d.ts +11 -9
  36. package/dist/services/notification/channels/ses/index.d.ts +6 -6
  37. package/dist/services/notification/channels/ses/index.js +15 -11
  38. package/dist/services/notification/client/index.js +3 -2
  39. package/dist/services/notification/client/notification-menu.d.ts +9 -9
  40. package/dist/services/notification/index.d.ts +7 -6
  41. package/dist/services/notification/public.js +3 -2
  42. package/dist/services/s3/index.d.ts +2 -16
  43. package/dist/services/s3/index.js +12 -9
  44. package/package.json +7 -1
@@ -575,7 +575,11 @@ function DropdownMenuRadioItem({
575
575
 
576
576
  // ../../src/components/ui/locale-switcher.tsx
577
577
  import { Languages } from "lucide-react";
578
+ import { Option, Schema } from "effect";
578
579
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
580
+ var LocaleSchema = Schema.Literals(locales).annotate({
581
+ identifier: "Locale"
582
+ });
579
583
  var messages = {
580
584
  en: {
581
585
  title: "Switch language",
@@ -623,7 +627,9 @@ var LocaleSwitcher = ({ messages: messages2 }) => {
623
627
  /* @__PURE__ */ jsx3(DropdownMenuRadioGroup, {
624
628
  "aria-label": labels.title,
625
629
  value: locale,
626
- onValueChange: (v) => setLocale(v),
630
+ onValueChange: (value) => Schema.decodeUnknownOption(LocaleSchema)(value).pipe(Option.match({ onNone: () => {
631
+ return;
632
+ }, onSome: setLocale })),
627
633
  children: locales.map((l) => /* @__PURE__ */ jsx3(DropdownMenuRadioItem, {
628
634
  value: l,
629
635
  children: labels[l]
@@ -2,7 +2,7 @@
2
2
  import { useAtom } from "@effect/atom-react";
3
3
  import { BrowserKeyValueStore } from "@effect/platform-browser";
4
4
  import { Link, Outlet, useRouterState } from "@tanstack/react-router";
5
- import { Schema } from "effect";
5
+ import { Schema as Schema2 } from "effect";
6
6
  import { Atom } from "effect/unstable/reactivity";
7
7
 
8
8
  // ../../src/components/ui/badge.tsx
@@ -264,6 +264,7 @@ function TooltipContent({
264
264
 
265
265
  // ../../src/components/ui/sidebar.tsx
266
266
  import { PanelLeftIcon } from "lucide-react";
267
+ import { Schema } from "effect";
267
268
  import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
268
269
  var SIDEBAR_COOKIE_NAME = "sidebar_state";
269
270
  var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
@@ -292,18 +293,17 @@ function SidebarProvider({
292
293
  const [openMobile, setOpenMobile] = React2.useState(false);
293
294
  const [_open, _setOpen] = React2.useState(defaultOpen);
294
295
  const open = openProp ?? _open;
295
- const setOpen = React2.useCallback((value) => {
296
- const openState = typeof value === "function" ? value(open) : value;
296
+ const setOpen = React2.useCallback((openState) => {
297
297
  if (setOpenProp) {
298
298
  setOpenProp(openState);
299
299
  } else {
300
300
  _setOpen(openState);
301
301
  }
302
302
  document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
303
- }, [setOpenProp, open]);
303
+ }, [setOpenProp]);
304
304
  const toggleSidebar = React2.useCallback(() => {
305
- return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
306
- }, [isMobile, setOpen, setOpenMobile]);
305
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen(!open);
306
+ }, [isMobile, open, setOpen, setOpenMobile]);
307
307
  React2.useEffect(() => {
308
308
  const handleKeyDown = (event) => {
309
309
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
@@ -324,15 +324,16 @@ function SidebarProvider({
324
324
  setOpenMobile,
325
325
  toggleSidebar
326
326
  }), [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]);
327
+ const wrapperStyle = {
328
+ "--sidebar-width": SIDEBAR_WIDTH,
329
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
330
+ ...style
331
+ };
327
332
  return /* @__PURE__ */ jsx7(SidebarContext.Provider, {
328
333
  value: contextValue,
329
334
  children: /* @__PURE__ */ jsx7("div", {
330
335
  "data-slot": "sidebar-wrapper",
331
- style: {
332
- "--sidebar-width": SIDEBAR_WIDTH,
333
- "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
334
- ...style
335
- },
336
+ style: wrapperStyle,
336
337
  className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className),
337
338
  ...props,
338
339
  children
@@ -358,6 +359,9 @@ function Sidebar({
358
359
  });
359
360
  }
360
361
  if (isMobile) {
362
+ const mobileStyle = {
363
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
364
+ };
361
365
  return /* @__PURE__ */ jsx7(Sheet, {
362
366
  open: openMobile,
363
367
  onOpenChange: setOpenMobile,
@@ -368,9 +372,7 @@ function Sidebar({
368
372
  "data-slot": "sidebar",
369
373
  "data-mobile": "true",
370
374
  className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
371
- style: {
372
- "--sidebar-width": SIDEBAR_WIDTH_MOBILE
373
- },
375
+ style: mobileStyle,
374
376
  side,
375
377
  children: [
376
378
  /* @__PURE__ */ jsxs3(SheetHeader, {
@@ -586,11 +588,7 @@ function SidebarMenuButton({
586
588
  if (!tooltip) {
587
589
  return comp;
588
590
  }
589
- if (typeof tooltip === "string") {
590
- tooltip = {
591
- children: tooltip
592
- };
593
- }
591
+ const tooltipProps = Schema.is(Schema.String)(tooltip) ? { children: tooltip } : tooltip;
594
592
  return /* @__PURE__ */ jsxs3(Tooltip, {
595
593
  children: [
596
594
  comp,
@@ -598,7 +596,7 @@ function SidebarMenuButton({
598
596
  side: "right",
599
597
  align: "center",
600
598
  hidden: state !== "collapsed" || isMobile,
601
- ...tooltip
599
+ ...tooltipProps
602
600
  })
603
601
  ]
604
602
  });
@@ -610,7 +608,7 @@ var sidebarStorageRuntime = Atom.runtime(BrowserKeyValueStore.layerLocalStorage)
610
608
  var sidebarOpenAtom = Atom.kvs({
611
609
  runtime: sidebarStorageRuntime,
612
610
  key: "sidebar:open",
613
- schema: Schema.Boolean,
611
+ schema: Schema2.Boolean,
614
612
  defaultValue: () => true
615
613
  });
616
614
  var useSidebarLayout = () => {
@@ -635,7 +635,7 @@ var applyDocumentTheme = ({ theme, systemTheme }) => {
635
635
  document.documentElement.classList.add(resolvedTheme);
636
636
  };
637
637
  var getInitialTheme = (initialTheme) => {
638
- if (typeof window === "undefined") {
638
+ if (!globalThis.window) {
639
639
  return initialTheme ?? {
640
640
  theme: DEFAULT_THEME,
641
641
  systemTheme: DEFAULT_SYSTEM_THEME
@@ -3,7 +3,7 @@ import { icons as lucideIcons } from "@iconify-json/lucide";
3
3
  import { Icon, addCollection } from "@iconify/react";
4
4
  import { code } from "@streamdown/code";
5
5
  import { Link as Link3, useNavigate } from "@tanstack/react-router";
6
- import { Schema as Schema2 } from "effect";
6
+ import { Schema as Schema3 } from "effect";
7
7
  import {
8
8
  Children,
9
9
  forwardRef,
@@ -16,17 +16,17 @@ import { parse } from "yaml";
16
16
  // ../../src/components/ui/app-brand.tsx
17
17
  import { Link } from "@tanstack/react-router";
18
18
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
19
- function AppBrand({
20
- className,
21
- label,
22
- subtitle,
23
- icon: Icon,
24
- imageSrc,
25
- href,
26
- to,
27
- variant = "default",
28
- ...props
29
- }) {
19
+ var isStaticBrand = (props) => props.to === null;
20
+ var isAnchorBrand = (props) => props.href !== undefined;
21
+ function AppBrand(brandProps) {
22
+ const {
23
+ className,
24
+ label,
25
+ subtitle,
26
+ icon: Icon,
27
+ imageSrc,
28
+ variant = "default"
29
+ } = brandProps;
30
30
  const iconClassName = variant === "sidebar" ? "bg-sidebar-primary" : "bg-primary";
31
31
  const iconColor = variant === "sidebar" ? "var(--sidebar-primary-foreground)" : "var(--primary-foreground)";
32
32
  const contentClassName = variant === "sidebar" ? "group-data-[collapsible=icon]:hidden" : undefined;
@@ -66,21 +66,54 @@ function AppBrand({
66
66
  variant === "sidebar" ? "p-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:p-0" : "",
67
67
  className
68
68
  ].filter(Boolean).join(" ");
69
- if (to === null) {
69
+ if (isStaticBrand(brandProps)) {
70
+ const {
71
+ className: _className2,
72
+ label: _label2,
73
+ subtitle: _subtitle2,
74
+ icon: _icon2,
75
+ imageSrc: _imageSrc2,
76
+ variant: _variant2,
77
+ to: _to,
78
+ href: _href2,
79
+ ...props2
80
+ } = brandProps;
70
81
  return /* @__PURE__ */ jsx("div", {
71
82
  className: brandClassName,
72
- ...props,
83
+ ...props2,
73
84
  children: content
74
85
  });
75
86
  }
76
- if (href) {
87
+ if (isAnchorBrand(brandProps)) {
88
+ const {
89
+ className: _className2,
90
+ label: _label2,
91
+ subtitle: _subtitle2,
92
+ icon: _icon2,
93
+ imageSrc: _imageSrc2,
94
+ variant: _variant2,
95
+ to: _to,
96
+ href,
97
+ ...props2
98
+ } = brandProps;
77
99
  return /* @__PURE__ */ jsx("a", {
78
100
  className: brandClassName,
79
101
  href,
80
- ...props,
102
+ ...props2,
81
103
  children: content
82
104
  });
83
105
  }
106
+ const {
107
+ className: _className,
108
+ label: _label,
109
+ subtitle: _subtitle,
110
+ icon: _icon,
111
+ imageSrc: _imageSrc,
112
+ variant: _variant,
113
+ href: _href,
114
+ to,
115
+ ...props
116
+ } = brandProps;
84
117
  return /* @__PURE__ */ jsx(Link, {
85
118
  to: to ?? "/",
86
119
  className: brandClassName,
@@ -960,7 +993,7 @@ function SearchMenu({
960
993
  import { useAtom } from "@effect/atom-react";
961
994
  import { BrowserKeyValueStore } from "@effect/platform-browser";
962
995
  import { Link as Link2, Outlet, useRouterState } from "@tanstack/react-router";
963
- import { Schema } from "effect";
996
+ import { Schema as Schema2 } from "effect";
964
997
  import { Atom } from "effect/unstable/reactivity";
965
998
 
966
999
  // ../../src/components/ui/badge.tsx
@@ -1170,6 +1203,7 @@ function TooltipContent({
1170
1203
 
1171
1204
  // ../../src/components/ui/sidebar.tsx
1172
1205
  import { PanelLeftIcon } from "lucide-react";
1206
+ import { Schema } from "effect";
1173
1207
  import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
1174
1208
  var SIDEBAR_COOKIE_NAME = "sidebar_state";
1175
1209
  var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
@@ -1198,18 +1232,17 @@ function SidebarProvider({
1198
1232
  const [openMobile, setOpenMobile] = React2.useState(false);
1199
1233
  const [_open, _setOpen] = React2.useState(defaultOpen);
1200
1234
  const open = openProp ?? _open;
1201
- const setOpen = React2.useCallback((value) => {
1202
- const openState = typeof value === "function" ? value(open) : value;
1235
+ const setOpen = React2.useCallback((openState) => {
1203
1236
  if (setOpenProp) {
1204
1237
  setOpenProp(openState);
1205
1238
  } else {
1206
1239
  _setOpen(openState);
1207
1240
  }
1208
1241
  document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
1209
- }, [setOpenProp, open]);
1242
+ }, [setOpenProp]);
1210
1243
  const toggleSidebar = React2.useCallback(() => {
1211
- return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
1212
- }, [isMobile, setOpen, setOpenMobile]);
1244
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen(!open);
1245
+ }, [isMobile, open, setOpen, setOpenMobile]);
1213
1246
  React2.useEffect(() => {
1214
1247
  const handleKeyDown = (event) => {
1215
1248
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
@@ -1230,15 +1263,16 @@ function SidebarProvider({
1230
1263
  setOpenMobile,
1231
1264
  toggleSidebar
1232
1265
  }), [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]);
1266
+ const wrapperStyle = {
1267
+ "--sidebar-width": SIDEBAR_WIDTH,
1268
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
1269
+ ...style
1270
+ };
1233
1271
  return /* @__PURE__ */ jsx12(SidebarContext.Provider, {
1234
1272
  value: contextValue,
1235
1273
  children: /* @__PURE__ */ jsx12("div", {
1236
1274
  "data-slot": "sidebar-wrapper",
1237
- style: {
1238
- "--sidebar-width": SIDEBAR_WIDTH,
1239
- "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
1240
- ...style
1241
- },
1275
+ style: wrapperStyle,
1242
1276
  className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className),
1243
1277
  ...props,
1244
1278
  children
@@ -1264,6 +1298,9 @@ function Sidebar({
1264
1298
  });
1265
1299
  }
1266
1300
  if (isMobile) {
1301
+ const mobileStyle = {
1302
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
1303
+ };
1267
1304
  return /* @__PURE__ */ jsx12(Sheet, {
1268
1305
  open: openMobile,
1269
1306
  onOpenChange: setOpenMobile,
@@ -1274,9 +1311,7 @@ function Sidebar({
1274
1311
  "data-slot": "sidebar",
1275
1312
  "data-mobile": "true",
1276
1313
  className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
1277
- style: {
1278
- "--sidebar-width": SIDEBAR_WIDTH_MOBILE
1279
- },
1314
+ style: mobileStyle,
1280
1315
  side,
1281
1316
  children: [
1282
1317
  /* @__PURE__ */ jsxs7(SheetHeader, {
@@ -1492,11 +1527,7 @@ function SidebarMenuButton({
1492
1527
  if (!tooltip) {
1493
1528
  return comp;
1494
1529
  }
1495
- if (typeof tooltip === "string") {
1496
- tooltip = {
1497
- children: tooltip
1498
- };
1499
- }
1530
+ const tooltipProps = Schema.is(Schema.String)(tooltip) ? { children: tooltip } : tooltip;
1500
1531
  return /* @__PURE__ */ jsxs7(Tooltip, {
1501
1532
  children: [
1502
1533
  comp,
@@ -1504,7 +1535,7 @@ function SidebarMenuButton({
1504
1535
  side: "right",
1505
1536
  align: "center",
1506
1537
  hidden: state !== "collapsed" || isMobile,
1507
- ...tooltip
1538
+ ...tooltipProps
1508
1539
  })
1509
1540
  ]
1510
1541
  });
@@ -1516,7 +1547,7 @@ var sidebarStorageRuntime = Atom.runtime(BrowserKeyValueStore.layerLocalStorage)
1516
1547
  var sidebarOpenAtom = Atom.kvs({
1517
1548
  runtime: sidebarStorageRuntime,
1518
1549
  key: "sidebar:open",
1519
- schema: Schema.Boolean,
1550
+ schema: Schema2.Boolean,
1520
1551
  defaultValue: () => true
1521
1552
  });
1522
1553
  function AppSidebar({ footer, groups, header }) {
@@ -1692,24 +1723,36 @@ var seo = ({
1692
1723
  const siteUrl = origin?.replace(/\/$/, "") ?? canonical;
1693
1724
  const publisher = {
1694
1725
  "@type": "Organization",
1695
- name: siteName,
1696
- ...siteUrl ? { url: siteUrl } : {},
1697
- ...sameAs?.length ? { sameAs } : {}
1698
- };
1699
- const structuredData = type === "article" ? {
1700
- "@type": "Article",
1701
- headline: title,
1702
- description,
1703
- ...canonical ? { url: canonical } : {},
1704
- ...locale ? { inLanguage: locale } : {},
1705
- ...image ? { image } : {},
1706
- publisher
1707
- } : {
1708
- "@type": "WebSite",
1709
- name: siteName,
1710
- ...siteUrl ? { url: siteUrl } : {},
1711
- publisher
1726
+ name: siteName
1712
1727
  };
1728
+ if (siteUrl)
1729
+ publisher.url = siteUrl;
1730
+ if (sameAs?.length)
1731
+ publisher.sameAs = sameAs;
1732
+ const structuredData = type === "article" ? (() => {
1733
+ const article = {
1734
+ "@type": "Article",
1735
+ headline: title,
1736
+ description,
1737
+ publisher
1738
+ };
1739
+ if (canonical)
1740
+ article.url = canonical;
1741
+ if (locale)
1742
+ article.inLanguage = locale;
1743
+ if (image)
1744
+ article.image = image;
1745
+ return article;
1746
+ })() : (() => {
1747
+ const website = {
1748
+ "@type": "WebSite",
1749
+ name: siteName,
1750
+ publisher
1751
+ };
1752
+ if (siteUrl)
1753
+ website.url = siteUrl;
1754
+ return website;
1755
+ })();
1713
1756
  const scripts = [
1714
1757
  {
1715
1758
  type: "application/ld+json",
@@ -1729,17 +1772,17 @@ var createSeo = (defaults) => (options) => seo({
1729
1772
  // ../../src/lib/docs-core.tsx
1730
1773
  import { jsx as jsx14, jsxs as jsxs9, Fragment as Fragment3 } from "react/jsx-runtime";
1731
1774
  addCollection(lucideIcons);
1732
- var DocsSection = Schema2.String.annotate({
1775
+ var DocsSection = Schema3.String.annotate({
1733
1776
  identifier: "DocsSection"
1734
1777
  });
1735
- var DocsPageType = Schema2.Literals([
1778
+ var DocsPageType = Schema3.Literals([
1736
1779
  "concept",
1737
1780
  "tutorial",
1738
1781
  "how-to",
1739
1782
  "reference",
1740
1783
  "runbook"
1741
1784
  ]).annotate({ identifier: "DocsPageType" });
1742
- var DocsDate = Schema2.String.pipe(Schema2.check(Schema2.makeFilter((date) => Number.isNaN(new Date(date).getTime()) ? "Expected a valid date" : undefined)));
1785
+ var DocsDate = Schema3.String.pipe(Schema3.check(Schema3.makeFilter((date) => Number.isNaN(new Date(date).getTime()) ? "Expected a valid date" : undefined)));
1743
1786
  var NEW_DOCS_PAGE_DAYS = 14;
1744
1787
  var isDocsPageNew = (createdAt, now = new Date) => {
1745
1788
  if (!createdAt)
@@ -1747,31 +1790,31 @@ var isDocsPageNew = (createdAt, now = new Date) => {
1747
1790
  const age = now.getTime() - new Date(createdAt).getTime();
1748
1791
  return age >= 0 && age < NEW_DOCS_PAGE_DAYS * 24 * 60 * 60 * 1000;
1749
1792
  };
1750
- var DocsFrontmatter = Schema2.Struct({
1751
- slug: Schema2.String,
1752
- path: Schema2.String,
1753
- title: Schema2.String,
1754
- description: Schema2.String,
1755
- icon: Schema2.optional(Schema2.String),
1756
- order: Schema2.Number,
1757
- locale: Schema2.String,
1793
+ var DocsFrontmatter = Schema3.Struct({
1794
+ slug: Schema3.String,
1795
+ path: Schema3.String,
1796
+ title: Schema3.String,
1797
+ description: Schema3.String,
1798
+ icon: Schema3.optional(Schema3.String),
1799
+ order: Schema3.Number,
1800
+ locale: Schema3.String,
1758
1801
  section: DocsSection,
1759
1802
  type: DocsPageType,
1760
- createdAt: Schema2.optional(DocsDate),
1761
- updatedAt: Schema2.optional(DocsDate),
1762
- legacySlugs: Schema2.optional(Schema2.Array(Schema2.String))
1803
+ createdAt: Schema3.optional(DocsDate),
1804
+ updatedAt: Schema3.optional(DocsDate),
1805
+ legacySlugs: Schema3.optional(Schema3.Array(Schema3.String))
1763
1806
  }).annotate({ identifier: "DocsFrontmatter" });
1764
- var DocsHeadingSchema = Schema2.Struct({
1765
- depth: Schema2.Literals([2, 3]),
1766
- id: Schema2.String,
1767
- title: Schema2.String
1807
+ var DocsHeadingSchema = Schema3.Struct({
1808
+ depth: Schema3.Literals([2, 3]),
1809
+ id: Schema3.String,
1810
+ title: Schema3.String
1768
1811
  }).annotate({ identifier: "DocsHeading" });
1769
- var DocsPageSchema = Schema2.Struct({
1812
+ var DocsPageSchema = Schema3.Struct({
1770
1813
  ...DocsFrontmatter.fields,
1771
- headings: Schema2.Array(DocsHeadingSchema),
1772
- searchText: Schema2.String,
1773
- sourceFile: Schema2.String,
1774
- source: Schema2.String
1814
+ headings: Schema3.Array(DocsHeadingSchema),
1815
+ searchText: Schema3.String,
1816
+ sourceFile: Schema3.String,
1817
+ source: Schema3.String
1775
1818
  }).annotate({ identifier: "DocsPage" });
1776
1819
  var slugifyDocsHeading = (value) => value.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[`*_~]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
1777
1820
  var stripMarkdown = (source) => source.replace(/```[\s\S]*?```/g, " ").replace(/!?(?:\[([^\]]+)\])\([^)]*\)/g, "$1").replace(/<[^>]+>/g, " ").replace(/[`*_>#|~-]/g, " ").replace(/\s+/g, " ").trim();
@@ -1814,14 +1857,14 @@ var parseDocsSource = (file, source) => {
1814
1857
  const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/.exec(source);
1815
1858
  if (!match)
1816
1859
  throw new Error(`Missing frontmatter in ${file}`);
1817
- const frontmatter = Schema2.decodeUnknownSync(DocsFrontmatter)(parse(match[1] ?? ""));
1860
+ const frontmatter = Schema3.decodeUnknownSync(DocsFrontmatter)(parse(match[1] ?? ""));
1818
1861
  const bodySource = match[2] ?? "";
1819
1862
  const title = /^#\s+(.+?)\s*$/m.exec(bodySource)?.[1];
1820
1863
  if (!title || stripMarkdown(title) !== stripMarkdown(frontmatter.title)) {
1821
1864
  throw new Error(`Body title does not match frontmatter in ${file}`);
1822
1865
  }
1823
1866
  const body = stripBodyTitle(bodySource);
1824
- return Schema2.decodeUnknownSync(DocsPageSchema)({
1867
+ return Schema3.decodeUnknownSync(DocsPageSchema)({
1825
1868
  ...frontmatter,
1826
1869
  headings: parseHeadings(body, file),
1827
1870
  searchText: stripMarkdown(body),
@@ -1900,7 +1943,7 @@ var createDocsSource = (config) => {
1900
1943
  if (new Set(config.locales).size !== config.locales.length) {
1901
1944
  throw new Error("Documentation source locales must be unique");
1902
1945
  }
1903
- const pages = validateDocsPages(config.pages.map((page) => Schema2.decodeUnknownSync(DocsPageSchema)(page)), config);
1946
+ const pages = validateDocsPages(config.pages.map((page) => Schema3.decodeUnknownSync(DocsPageSchema)(page)), config);
1904
1947
  const getPage = (slug, locale) => pages.find((page) => page.slug === slug && page.locale === locale);
1905
1948
  const resolvePage = (slug, locale) => pages.find((page) => page.locale === locale && (page.slug === slug || page.legacySlugs?.includes(slug)));
1906
1949
  const getPages = (locale) => pages.filter((page) => page.locale === locale).sort((left, right) => left.order - right.order);
@@ -1937,12 +1980,14 @@ var makeDocs = (config) => {
1937
1980
  icon: "lucide:book-open",
1938
1981
  href: "/"
1939
1982
  };
1940
- const docsSeo = createSeo({
1983
+ const seoDefaults = {
1941
1984
  origin,
1942
1985
  locales: source.locales,
1943
- ...config.defaultLocale ? { defaultLocale: config.defaultLocale } : {},
1944
1986
  siteName: config.siteName
1945
- });
1987
+ };
1988
+ if (config.defaultLocale)
1989
+ seoDefaults.defaultLocale = config.defaultLocale;
1990
+ const docsSeo = createSeo(seoDefaults);
1946
1991
  const getMessages = (locale) => getDocsMessages(locale, config.messages?.(locale));
1947
1992
  const normalizeSearchText = (value) => value.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
1948
1993
  const searchIndex = source.pages.flatMap((page) => {
@@ -2021,10 +2066,12 @@ var makeDocs = (config) => {
2021
2066
  if (entry.title.includes(normalizedQuery))
2022
2067
  score += 20;
2023
2068
  return [{ entry, score }];
2024
- }).sort((left, right) => right.score - left.score || left.entry.page.order - right.entry.page.order).slice(0, limit).map(({ entry }) => ({
2025
- page: entry.page,
2026
- ..."heading" in entry ? { heading: entry.heading } : {}
2027
- }));
2069
+ }).sort((left, right) => right.score - left.score || left.entry.page.order - right.entry.page.order).slice(0, limit).map(({ entry }) => {
2070
+ const result = { page: entry.page };
2071
+ if ("heading" in entry)
2072
+ result.heading = entry.heading;
2073
+ return result;
2074
+ });
2028
2075
  };
2029
2076
  const url = (page, locale) => `${origin}/${locale}${page.path}`;
2030
2077
  const editUrl = (page) => githubUrl && (config.editable?.(page) ?? true) ? `${githubUrl}/edit/${config.github?.branch ?? "main"}/${page.sourceFile}` : undefined;
@@ -2100,7 +2147,7 @@ var docsPageTypeMessages = {
2100
2147
  runbook: "Procédure d’exploitation"
2101
2148
  }
2102
2149
  };
2103
- var defaultSectionLabel = (locale, section) => docsSectionMessages[locale][section] ?? humanizeDocsValue(section);
2150
+ var defaultSectionLabel = (locale, section) => Object.entries(docsSectionMessages[locale]).find(([key]) => key === section)?.[1] ?? humanizeDocsValue(section);
2104
2151
  var messages2 = {
2105
2152
  en: {
2106
2153
  title: "Documentation",
@@ -2173,15 +2220,16 @@ var iconFor = (name) => {
2173
2220
  icon: name,
2174
2221
  ref,
2175
2222
  ssr: true,
2176
- ...className ? { className } : {},
2177
- ...color ? { color } : {},
2178
- ...size === undefined ? {} : { height: size, width: size }
2223
+ className,
2224
+ color,
2225
+ height: size,
2226
+ width: size
2179
2227
  }));
2180
2228
  DocsIcon.displayName = `DocsIcon(${name})`;
2181
2229
  iconComponents.set(name, DocsIcon);
2182
2230
  return DocsIcon;
2183
2231
  };
2184
- var headingText = (children) => Children.toArray(children).filter((child) => ["string", "number"].includes(typeof child)).join("");
2232
+ var headingText = (children) => Children.toArray(children).filter((child) => Schema3.is(Schema3.Union([Schema3.String, Schema3.Number]))(child)).join("");
2185
2233
  var makeDocsHeading = (level, copyLink) => {
2186
2234
  const Heading = ({
2187
2235
  children,
@@ -2385,19 +2433,22 @@ var DocsSearch = ({
2385
2433
  ssr: true
2386
2434
  }),
2387
2435
  onSelect: () => navigate({ to: page.path, hash: heading.id })
2388
- } : {
2389
- id: page.path,
2390
- label: page.title,
2391
- description: page.description,
2392
- ...page.icon ? {
2393
- icon: /* @__PURE__ */ jsx14(Icon, {
2436
+ } : (() => {
2437
+ const item = {
2438
+ id: page.path,
2439
+ label: page.title,
2440
+ description: page.description,
2441
+ onSelect: () => navigate({ to: page.path })
2442
+ };
2443
+ if (page.icon) {
2444
+ item.icon = /* @__PURE__ */ jsx14(Icon, {
2394
2445
  className: "size-4",
2395
2446
  icon: page.icon,
2396
2447
  ssr: true
2397
- })
2398
- } : {},
2399
- onSelect: () => navigate({ to: page.path })
2400
- })
2448
+ });
2449
+ }
2450
+ return item;
2451
+ })())
2401
2452
  };
2402
2453
  });
2403
2454
  return /* @__PURE__ */ jsx14(SearchMenu, {
@@ -2424,12 +2475,17 @@ var DocsLayout = ({
2424
2475
  const resolvedMessages = docs.getMessages(locale);
2425
2476
  const groups = docs.sections(locale).map((section) => ({
2426
2477
  label: () => resolvedMessages.sectionLabel(section.id),
2427
- items: section.pages.map((item) => ({
2428
- label: () => item.title,
2429
- href: item.path,
2430
- icon: item.icon ? iconFor(item.icon) : EmptyIcon,
2431
- ...isDocsPageNew(item.createdAt) ? { badge: () => resolvedMessages.newLabel } : {}
2432
- }))
2478
+ items: section.pages.map((item) => {
2479
+ const navItem = {
2480
+ label: () => item.title,
2481
+ href: item.path,
2482
+ icon: item.icon ? iconFor(item.icon) : EmptyIcon
2483
+ };
2484
+ if (isDocsPageNew(item.createdAt)) {
2485
+ navItem.badge = () => resolvedMessages.newLabel;
2486
+ }
2487
+ return navItem;
2488
+ })
2433
2489
  }));
2434
2490
  if (resources) {
2435
2491
  groups.push({
@@ -2439,7 +2495,7 @@ var DocsLayout = ({
2439
2495
  label: item.label,
2440
2496
  href: item.href,
2441
2497
  icon: iconFor(item.icon),
2442
- ...item.external === undefined ? {} : { external: item.external }
2498
+ external: item.external
2443
2499
  })),
2444
2500
  ...docs.githubUrl ? [
2445
2501
  {
@@ -56,7 +56,7 @@ export declare const searchDocumentation: (args_0: {
56
56
  path: string;
57
57
  title: string;
58
58
  description: string;
59
- heading?: string | undefined;
59
+ heading: string | undefined;
60
60
  }[], never, never>;
61
61
  export declare const readDocumentation: (args_0: {
62
62
  readonly locale: DocsLocale;