@umami/shiso 1.16.0 → 1.18.0

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 (51) hide show
  1. package/bin/shiso.mjs +0 -0
  2. package/dist/chunks/App.js +310 -205
  3. package/dist/chunks/architectureDiagram-5GKGNRK7.js +1 -1
  4. package/dist/chunks/chunk-GMAD6QVW.js +1 -1
  5. package/dist/chunks/cose-bilkent-JH36ORCC.js +1 -1
  6. package/dist/chunks/dist.js +1 -1
  7. package/dist/chunks/docs.js +848 -202
  8. package/dist/chunks/ganttDiagram-EL5Y4UJY.js +1 -1
  9. package/dist/chunks/src.js +1 -1
  10. package/dist/entry-client.js +1 -1
  11. package/dist/entry-server.js +2 -2
  12. package/docs.schema.json +1135 -1003
  13. package/package.json +1 -1
  14. package/scripts/check-content.mjs +2 -0
  15. package/scripts/load-shiso-config.mjs +30 -1
  16. package/src/App.tsx +41 -23
  17. package/src/components/CodeBlock.tsx +3 -1
  18. package/src/components/DocContent.tsx +15 -6
  19. package/src/components/Docs.tsx +3 -1
  20. package/src/components/Footer.tsx +3 -1
  21. package/src/components/Header.tsx +4 -3
  22. package/src/components/LanguageSwitcher.tsx +27 -7
  23. package/src/components/OpenApiOperation.tsx +22 -15
  24. package/src/components/PageActions.tsx +135 -0
  25. package/src/components/docs/Changelog.tsx +27 -13
  26. package/src/components/docs/CodeGroup.tsx +3 -1
  27. package/src/components/docs/Mermaid.tsx +8 -6
  28. package/src/components/docs/PropertiesTable.tsx +11 -6
  29. package/src/components/docs/Tabs.tsx +3 -1
  30. package/src/components/docs/Tree.tsx +3 -1
  31. package/src/components/docs/ZoomableImage.tsx +4 -2
  32. package/src/components/ui/dialog.tsx +7 -2
  33. package/src/components/ui/sheet.tsx +5 -2
  34. package/src/lib/label-context.tsx +7 -0
  35. package/src/lib/labels.ts +37 -0
  36. package/src/lib/locale.ts +25 -0
  37. package/src/lib/openapi.ts +21 -8
  38. package/src/lib/site-config.ts +66 -2
  39. package/src/lib/site-model.ts +4 -32
  40. package/src/lib/standalone-pages.ts +15 -1
  41. package/src/lib/translations/de.json +74 -0
  42. package/src/lib/translations/en.json +74 -0
  43. package/src/lib/translations/es.json +74 -0
  44. package/src/lib/translations/fr.json +74 -0
  45. package/src/lib/translations/ja.json +74 -0
  46. package/src/lib/translations/zh-Hans.json +74 -0
  47. package/src/lib/translations/zh-Hant.json +74 -0
  48. package/src/lib/types.ts +44 -32
  49. package/src/styles/global.css +1 -1
  50. package/types/config.d.ts +7 -1
  51. package/types/labels.d.ts +76 -0
@@ -1,4 +1,4 @@
1
- import { $ as useFloatingNodeId, $n as useRenderElement, $t as resolveIcon, A as safePolygon, An as isElementVisible, B as attachPreventUnmountOnClose, Bn as getTarget, Cn as getNextTabbable, D as useAnchorPositioning, Dn as findNonDisabledListIndex, Dt as Collapsible, E as getDisabledMountTransitionStyles, En as isOutsideEvent, Er as useNavigate, Et as Expandable, F as createInitialPopupStoreState, Fn as stopEvent, Ft as useCompositeItem, G as useTriggerDataForwarding, Gn as jsdom, H as useImplicitActiveTrigger, Hn as ARROW_LEFT, I as popupStoreSelectors, In as getFloatingFocusElement, J as useDismiss, Jn as useBaseUiId, K as useSyncedFloatingRootContext, Kn as webkit, L as PopupTriggerMap, Ln as isTypeableCombobox, M as useHoverFloatingInteraction, Mn as isListIndexDisabled, Mt as CodeGroup, N as useFocus, Nn as isVirtualClick, Nt as COMPOSITE_KEYS, O as popupTransitionStateMapping, On as getMaxListIndex, Ot as CollapsibleContent, P as usePopupHandleStore, Pn as isVirtualPointerEvent, Pt as inertValue, Q as FloatingTree, Qn as cn, R as FOCUSABLE_POPUP_PROPS, Rn as activeElement, Sn as useDirection, Sr as Route, T as usePositioner, Tn as getTabbableBeforeElement, Tr as useLocation, Tt as renderInlineMarkdown, U as useOpenStateTransitions, Un as ARROW_RIGHT, V as setPopupOpenState, Vn as ARROW_DOWN, W as usePopupInteractionProps, Wn as ARROW_UP, X as FloatingFocusManager, Xn as useTimeout, Xt as Badge$1, Y as useClick, Yn as useId$2, Yt as Badge, Z as FloatingNode, Zn as Button, _n as triggerPress, _r as Check, a as DialogTitle, an as useAnimationFrame, ar as ownerDocument, at as POPUP_COLLISION_AVOIDANCE, br as Link, bt as usePanelContent, c as useOpenInteractionType, cn as escapeKey, cr as useIsoLayoutEffect, ct as fastComponent, d as useScrollLock, dn as itemPress, dr as getParentNode, en as getIcon, er as EMPTY_ARRAY, et as useFloatingParentNodeId, f as DialogPortal$1, fn as listNavigation, fr as getWindow, g as DialogBackdrop, gn as triggerHover, gr as ChevronRight, gt as PropertiesTable, h as DialogClose, hn as triggerFocus, hr as X$1, i as DialogContent$1, in as useCompositeListItem, ir as dispatchClickWithModifiers, it as DROPDOWN_COLLISION_AVOIDANCE, j as useHoverReferenceInteraction, jn as isIndexOutOfListBounds, k as pressableTriggerOpenStateMapping, kn as getMinListIndex, kt as CollapsibleTrigger, l as DialogTitle$1, ln as focusOut, lr as useStableCallback, lt as fastComponentRef, m as DialogPopup, mn as siblingOpen, mr as isLastTraversableNode, n as ZoomableImage, nn as useAnimationsFinished, nr as useMergedRefs, nt as FloatingTreeStore, o as DialogTrigger, on as createChangeEventDetails, or as useCompositeRootContext, ot as enqueueFocus, p as InternalBackdrop, pn as outsidePress, pr as isHTMLElement, q as ReactStore, qn as mac, r as Dialog$1, rn as useValueAsRef, rr as useButton, rt as FloatingPortal, s as DialogTrigger$1, sn as cancelOpen, sr as mergeProps$1, st as FocusGuard, t as docs_exports, tn as useOpenChangeComplete, tr as EMPTY_OBJECT, tt as useFloatingTree, u as DialogRoot, un as imperativeAction, ur as useRefWithInit, vn as CompositeList, vr as createLucideIcon, w as TooltipProvider, wn as getTabbableAfterElement, wr as Routes, xn as addEventListener, xr as Navigate, yn as Mermaid, yt as PanelProvider, z as PopupHandleAttachment, zn as contains } from "./docs.js";
1
+ import { $ as useFloatingNodeId, $n as jsdom, $t as resolveIcon, A as safePolygon, An as useDirection, Ar as Route, B as attachPreventUnmountOnClose, Bn as isListIndexDisabled, Cn as englishLabels, Cr as X$1, D as useAnchorPositioning, Dn as isValidLocale, Dt as Collapsible, E as getDisabledMountTransitionStyles, En as getTextDirection, Er as createLucideIcon, Et as Expandable, F as createInitialPopupStoreState, Fn as findNonDisabledListIndex, Ft as useCompositeItem, G as useTriggerDataForwarding, Gn as isTypeableCombobox, H as useImplicitActiveTrigger, Hn as isVirtualPointerEvent, I as popupStoreSelectors, In as getMaxListIndex, J as useDismiss, Jn as getTarget, K as useSyncedFloatingRootContext, Kn as activeElement, L as PopupTriggerMap, Ln as getMinListIndex, M as useHoverFloatingInteraction, Mn as getTabbableAfterElement, Mr as Routes, Mt as CodeGroup, N as useFocus, Nn as getTabbableBeforeElement, Nr as useLocation, Nt as COMPOSITE_KEYS, O as popupTransitionStateMapping, On as resolveLocale, Or as Link, Ot as CollapsibleContent, P as usePopupHandleStore, Pn as isOutsideEvent, Pr as useNavigate, Pt as inertValue, Q as FloatingTree, Qn as ARROW_UP, R as FOCUSABLE_POPUP_PROPS, Rn as isElementVisible, Sn as useLabels, Sr as isLastTraversableNode, T as usePositioner, Tn as getLanguageName, Tr as Check, Tt as renderInlineMarkdown, U as useOpenStateTransitions, Un as stopEvent, V as setPopupOpenState, Vn as isVirtualClick, W as usePopupInteractionProps, Wn as getFloatingFocusElement, X as FloatingFocusManager, Xn as ARROW_LEFT, Xt as Badge$1, Y as useClick, Yn as ARROW_DOWN, Yt as Badge, Z as FloatingNode, Zn as ARROW_RIGHT, _n as triggerPress, _r as useStableCallback, a as DialogTitle, an as useAnimationFrame, ar as Button, at as POPUP_COLLISION_AVOIDANCE, br as getWindow, bt as usePanelContent, c as useOpenInteractionType, cn as escapeKey, cr as EMPTY_ARRAY, ct as fastComponent, d as useScrollLock, dn as itemPress, dr as useButton, en as getIcon, er as webkit, et as useFloatingParentNodeId, f as DialogPortal$1, fn as listNavigation, fr as dispatchClickWithModifiers, g as DialogBackdrop, gn as triggerHover, gr as useIsoLayoutEffect, gt as PropertiesTable, h as DialogClose, hn as triggerFocus, hr as mergeProps$1, i as DialogContent$1, in as useCompositeListItem, ir as useTimeout, it as DROPDOWN_COLLISION_AVOIDANCE, j as useHoverReferenceInteraction, jn as getNextTabbable, k as pressableTriggerOpenStateMapping, kn as addEventListener, kr as Navigate, kt as CollapsibleTrigger, l as DialogTitle$1, ln as focusOut, lr as EMPTY_OBJECT, lt as fastComponentRef, m as DialogPopup, mn as siblingOpen, mr as useCompositeRootContext, n as ZoomableImage, nn as useAnimationsFinished, nr as useBaseUiId, nt as FloatingTreeStore, o as DialogTrigger, on as createChangeEventDetails, or as cn, ot as enqueueFocus, p as InternalBackdrop, pn as outsidePress, pr as ownerDocument, q as ReactStore, qn as contains, r as Dialog$1, rn as useValueAsRef, rr as useId$2, rt as FloatingPortal, s as DialogTrigger$1, sn as cancelOpen, sr as useRenderElement, st as FocusGuard, t as docs_exports, tn as useOpenChangeComplete, tr as mac, tt as useFloatingTree, u as DialogRoot, un as imperativeAction, ur as useMergedRefs, vn as CompositeList, vr as useRefWithInit, w as TooltipProvider, wn as resolveLabels, wr as ChevronRight, xn as LabelContext, xr as isHTMLElement, yn as Mermaid, yr as getParentNode, yt as PanelProvider, z as PopupHandleAttachment, zn as isIndexOutOfListBounds } from "./docs.js";
2
2
  import { n as highlightTerms } from "./search.js";
3
3
  import { resolveSearchProvider } from "../search.js";
4
4
  import * as React from "react";
@@ -303,7 +303,7 @@ const __iconNode = [
303
303
  const Sun = createLucideIcon("sun", __iconNode);
304
304
 
305
305
  //#endregion
306
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/root/ScrollAreaRootContext.mjs
306
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/root/ScrollAreaRootContext.mjs
307
307
  const ScrollAreaRootContext = /*#__PURE__*/ React.createContext(void 0);
308
308
  ScrollAreaRootContext.displayName = "ScrollAreaRootContext";
309
309
  function useScrollAreaRootContext() {
@@ -313,7 +313,7 @@ function useScrollAreaRootContext() {
313
313
  }
314
314
 
315
315
  //#endregion
316
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/utils/getOffset.mjs
316
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/utils/getOffset.mjs
317
317
  function getOffset$1(element, prop, axis) {
318
318
  if (!element) return 0;
319
319
  const styles = getComputedStyle(element);
@@ -324,7 +324,7 @@ function getOffset$1(element, prop, axis) {
324
324
  }
325
325
 
326
326
  //#endregion
327
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/utils/styles.mjs
327
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/utils/styles.mjs
328
328
  const DISABLE_SCROLLBAR_CLASS_NAME = "base-ui-disable-scrollbar";
329
329
  const styleDisableScrollbar = {
330
330
  className: DISABLE_SCROLLBAR_CLASS_NAME,
@@ -340,7 +340,7 @@ const styleDisableScrollbar = {
340
340
  styleDisableScrollbar.getElement.displayName = "styleDisableScrollbar.getElement";
341
341
 
342
342
  //#endregion
343
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/root/stateAttributes.mjs
343
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/root/stateAttributes.mjs
344
344
  const attr = (name) => (value) => value ? { [name]: "" } : null;
345
345
  const scrollAreaStateAttributesMapping = {
346
346
  hasOverflowX: attr("data-has-overflow-x"),
@@ -353,7 +353,7 @@ const scrollAreaStateAttributesMapping = {
353
353
  };
354
354
 
355
355
  //#endregion
356
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/internals/csp-context/CSPContext.mjs
356
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/internals/csp-context/CSPContext.mjs
357
357
  const CSPContext = /*#__PURE__*/ React.createContext(void 0);
358
358
  CSPContext.displayName = "CSPContext";
359
359
  const DEFAULT_CSP_CONTEXT_VALUE = { disableStyleElements: false };
@@ -362,7 +362,7 @@ function useCSPContext() {
362
362
  }
363
363
 
364
364
  //#endregion
365
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/root/ScrollAreaRoot.mjs
365
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/root/ScrollAreaRoot.mjs
366
366
  const DEFAULT_COORDS = {
367
367
  x: 0,
368
368
  y: 0
@@ -622,7 +622,7 @@ function normalizeOverflowEdgeThreshold(threshold) {
622
622
  }
623
623
 
624
624
  //#endregion
625
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/viewport/ScrollAreaViewportContext.mjs
625
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/viewport/ScrollAreaViewportContext.mjs
626
626
  const ScrollAreaViewportContext = /*#__PURE__*/ React.createContext(void 0);
627
627
  ScrollAreaViewportContext.displayName = "ScrollAreaViewportContext";
628
628
  function useScrollAreaViewportContext() {
@@ -632,13 +632,13 @@ function useScrollAreaViewportContext() {
632
632
  }
633
633
 
634
634
  //#endregion
635
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/internals/clamp.mjs
635
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/internals/clamp.mjs
636
636
  function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {
637
637
  return Math.max(min, Math.min(val, max));
638
638
  }
639
639
 
640
640
  //#endregion
641
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/utils/scrollEdges.mjs
641
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/utils/scrollEdges.mjs
642
642
  const SCROLL_EDGE_TOLERANCE_PX = 1;
643
643
  function normalizeScrollOffset(value, max) {
644
644
  if (max <= 0) return 0;
@@ -654,7 +654,7 @@ function normalizeScrollOffset(value, max) {
654
654
  }
655
655
 
656
656
  //#endregion
657
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/viewport/ScrollAreaViewport.mjs
657
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/viewport/ScrollAreaViewport.mjs
658
658
  const OVERFLOW_EDGE_VARS = [
659
659
  "--scroll-area-overflow-x-start",
660
660
  "--scroll-area-overflow-x-end",
@@ -909,7 +909,7 @@ function applyOverscrollThumb(thumbEl, sizeVar, scrollFromStart, maxScroll, cont
909
909
  }
910
910
 
911
911
  //#endregion
912
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/scrollbar/ScrollAreaScrollbarContext.mjs
912
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/scrollbar/ScrollAreaScrollbarContext.mjs
913
913
  const ScrollAreaScrollbarContext = /*#__PURE__*/ React.createContext(void 0);
914
914
  ScrollAreaScrollbarContext.displayName = "ScrollAreaScrollbarContext";
915
915
  function useScrollAreaScrollbarContext() {
@@ -919,7 +919,7 @@ function useScrollAreaScrollbarContext() {
919
919
  }
920
920
 
921
921
  //#endregion
922
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/scrollbar/ScrollAreaScrollbar.mjs
922
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/scrollbar/ScrollAreaScrollbar.mjs
923
923
  /**
924
924
  * A vertical or horizontal scrollbar for the scroll area.
925
925
  * Renders a `<div>` element.
@@ -1042,7 +1042,7 @@ const ScrollAreaScrollbar = /*#__PURE__*/ React.forwardRef(function ScrollAreaSc
1042
1042
  ScrollAreaScrollbar.displayName = "ScrollAreaScrollbar";
1043
1043
 
1044
1044
  //#endregion
1045
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/content/ScrollAreaContent.mjs
1045
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/content/ScrollAreaContent.mjs
1046
1046
  /**
1047
1047
  * A container for the content of the scroll area.
1048
1048
  * Renders a `<div>` element.
@@ -1083,7 +1083,7 @@ const ScrollAreaContent = /*#__PURE__*/ React.forwardRef(function ScrollAreaCont
1083
1083
  ScrollAreaContent.displayName = "ScrollAreaContent";
1084
1084
 
1085
1085
  //#endregion
1086
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/thumb/ScrollAreaThumb.mjs
1086
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/thumb/ScrollAreaThumb.mjs
1087
1087
  /**
1088
1088
  * The draggable part of the scrollbar that indicates the current scroll position.
1089
1089
  * Renders a `<div>` element.
@@ -1116,7 +1116,7 @@ const ScrollAreaThumb = /*#__PURE__*/ React.forwardRef(function ScrollAreaThumb(
1116
1116
  ScrollAreaThumb.displayName = "ScrollAreaThumb";
1117
1117
 
1118
1118
  //#endregion
1119
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/scroll-area/corner/ScrollAreaCorner.mjs
1119
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/scroll-area/corner/ScrollAreaCorner.mjs
1120
1120
  /**
1121
1121
  * A small rectangular area that appears at the intersection of horizontal and vertical scrollbars.
1122
1122
  * Renders a `<div>` element.
@@ -1203,6 +1203,7 @@ function copyText(pre, language) {
1203
1203
  return lines.filter((line) => language === "diff" || line.dataset.diff !== "remove").map((line) => line.textContent || "").join("\n");
1204
1204
  }
1205
1205
  function CodeBlock({ children, className, style, ...rest }) {
1206
+ const labels = useLabels();
1206
1207
  const { "data-title": title, "data-language": language, "data-line-start": lineStart, "data-line-count": lineCount, "data-placement": placement, "data-actions": actions, ...preProps } = rest;
1207
1208
  const textInput = useRef(null);
1208
1209
  const [copied, setCopied] = useState(false);
@@ -1253,7 +1254,7 @@ function CodeBlock({ children, className, style, ...rest }) {
1253
1254
  size: "icon-sm",
1254
1255
  className: cn("absolute right-3 inline-flex size-7 items-center justify-center rounded-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground", title ? "top-1" : "top-2.5"),
1255
1256
  onClick: handleCopy,
1256
- "aria-label": "Copy code",
1257
+ "aria-label": copied ? labels.copied : labels.copyCode,
1257
1258
  children: copied ? /* @__PURE__ */ jsx(Check, { className: "size-3.5 text-primary" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3.5" })
1258
1259
  })
1259
1260
  ]
@@ -1261,7 +1262,7 @@ function CodeBlock({ children, className, style, ...rest }) {
1261
1262
  }
1262
1263
 
1263
1264
  //#endregion
1264
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/floating-ui-react/hooks/useListNavigation.mjs
1265
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/floating-ui-react/hooks/useListNavigation.mjs
1265
1266
  const ESCAPE = "Escape";
1266
1267
  function isStationaryWebKitPointer(event) {
1267
1268
  return webkit && event.movementX === 0 && event.movementY === 0;
@@ -1702,7 +1703,7 @@ function useListNavigation(context, props) {
1702
1703
  }
1703
1704
 
1704
1705
  //#endregion
1705
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/floating-ui-react/hooks/useTypeahead.mjs
1706
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/floating-ui-react/hooks/useTypeahead.mjs
1706
1707
  /**
1707
1708
  * Provides a matching callback that can be used to focus an item as the user
1708
1709
  * types, often used in tandem with `useListNavigation()`.
@@ -2043,7 +2044,7 @@ function ConfiguredIcon({ icon, size = 14 }) {
2043
2044
  }
2044
2045
 
2045
2046
  //#endregion
2046
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/positioner/MenuPositionerContext.mjs
2047
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/positioner/MenuPositionerContext.mjs
2047
2048
  const MenuPositionerContext = /*#__PURE__*/ React.createContext(void 0);
2048
2049
  MenuPositionerContext.displayName = "MenuPositionerContext";
2049
2050
  function useMenuPositionerContext(optional) {
@@ -2053,7 +2054,7 @@ function useMenuPositionerContext(optional) {
2053
2054
  }
2054
2055
 
2055
2056
  //#endregion
2056
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/root/MenuRootContext.mjs
2057
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/root/MenuRootContext.mjs
2057
2058
  const MenuRootContext = /*#__PURE__*/ React.createContext(void 0);
2058
2059
  MenuRootContext.displayName = "MenuRootContext";
2059
2060
  function useMenuRootContext(optional) {
@@ -2063,7 +2064,7 @@ function useMenuRootContext(optional) {
2063
2064
  }
2064
2065
 
2065
2066
  //#endregion
2066
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/context-menu/root/ContextMenuRootContext.mjs
2067
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/context-menu/root/ContextMenuRootContext.mjs
2067
2068
  const ContextMenuRootContext = /*#__PURE__*/ React.createContext(void 0);
2068
2069
  ContextMenuRootContext.displayName = "ContextMenuRootContext";
2069
2070
  function useContextMenuRootContext(optional = true) {
@@ -2073,7 +2074,7 @@ function useContextMenuRootContext(optional = true) {
2073
2074
  }
2074
2075
 
2075
2076
  //#endregion
2076
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/item/useMenuItemCommonProps.mjs
2077
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/item/useMenuItemCommonProps.mjs
2077
2078
  /**
2078
2079
  * Returns common props shared by all menu item types.
2079
2080
  * This hook extracts the shared logic for id, role, tabIndex, onKeyDown,
@@ -2133,7 +2134,7 @@ function useMenuItemCommonProps(params) {
2133
2134
  }
2134
2135
 
2135
2136
  //#endregion
2136
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/item/useMenuItem.mjs
2137
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/item/useMenuItem.mjs
2137
2138
  const REGULAR_ITEM = { type: "regular-item" };
2138
2139
  function useMenuItem(params) {
2139
2140
  const { closeOnClick, disabled, highlighted, id, store, typingRef = store.context.typingRef, nativeButton, itemMetadata, nodeId } = params;
@@ -2172,7 +2173,7 @@ function useMenuItem(params) {
2172
2173
  }
2173
2174
 
2174
2175
  //#endregion
2175
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/item/MenuItem.mjs
2176
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/item/MenuItem.mjs
2176
2177
  /**
2177
2178
  * An individual interactive item in the menu.
2178
2179
  * Renders a `<div>` element.
@@ -2222,7 +2223,7 @@ const MenuItem = /*#__PURE__*/ React.forwardRef(function MenuItem(componentProps
2222
2223
  MenuItem.displayName = "MenuItem";
2223
2224
 
2224
2225
  //#endregion
2225
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/toolbar/root/ToolbarRootContext.mjs
2226
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/toolbar/root/ToolbarRootContext.mjs
2226
2227
  const ToolbarRootContext = /*#__PURE__*/ React.createContext(void 0);
2227
2228
  ToolbarRootContext.displayName = "ToolbarRootContext";
2228
2229
  function useToolbarRootContext(optional) {
@@ -2232,7 +2233,7 @@ function useToolbarRootContext(optional) {
2232
2233
  }
2233
2234
 
2234
2235
  //#endregion
2235
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/popup/MenuPopup.mjs
2236
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/popup/MenuPopup.mjs
2236
2237
  /**
2237
2238
  * A container for the menu items.
2238
2239
  * Renders a `<div>` element.
@@ -2327,7 +2328,7 @@ const MenuPopup = /*#__PURE__*/ React.forwardRef(function MenuPopup(componentPro
2327
2328
  MenuPopup.displayName = "MenuPopup";
2328
2329
 
2329
2330
  //#endregion
2330
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/portal/MenuPortalContext.mjs
2331
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/portal/MenuPortalContext.mjs
2331
2332
  const MenuPortalContext = /*#__PURE__*/ React.createContext(void 0);
2332
2333
  MenuPortalContext.displayName = "MenuPortalContext";
2333
2334
  function useMenuPortalContext() {
@@ -2337,7 +2338,7 @@ function useMenuPortalContext() {
2337
2338
  }
2338
2339
 
2339
2340
  //#endregion
2340
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/portal/MenuPortal.mjs
2341
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/portal/MenuPortal.mjs
2341
2342
  /**
2342
2343
  * A portal element that moves the popup to a different part of the DOM.
2343
2344
  * By default, the portal element is appended to `<body>`.
@@ -2360,7 +2361,7 @@ const MenuPortal = /*#__PURE__*/ React.forwardRef(function MenuPortal(props, for
2360
2361
  MenuPortal.displayName = "MenuPortal";
2361
2362
 
2362
2363
  //#endregion
2363
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/utils/useAnchoredPopupScrollLock.mjs
2364
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/utils/useAnchoredPopupScrollLock.mjs
2364
2365
  const VIEWPORT_WIDTH_TOLERANCE_PX = 20;
2365
2366
  /**
2366
2367
  * Manages scroll lock for anchored popups. For non-touch opens, scroll lock is applied when
@@ -2386,7 +2387,7 @@ function useAnchoredPopupScrollLock(enabled, touchOpen, positionerElement, refer
2386
2387
  }
2387
2388
 
2388
2389
  //#endregion
2389
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/positioner/MenuPositioner.mjs
2390
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/positioner/MenuPositioner.mjs
2390
2391
  /**
2391
2392
  * Positions the menu popup against the trigger.
2392
2393
  * Renders a `<div>` element.
@@ -2595,7 +2596,7 @@ const MenuPositioner = /*#__PURE__*/ React.forwardRef(function MenuPositioner(co
2595
2596
  MenuPositioner.displayName = "MenuPositioner";
2596
2597
 
2597
2598
  //#endregion
2598
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menubar/MenubarContext.mjs
2599
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menubar/MenubarContext.mjs
2599
2600
  const MenubarContext = /*#__PURE__*/ React.createContext(null);
2600
2601
  MenubarContext.displayName = "MenubarContext";
2601
2602
  function useMenubarContext(optional) {
@@ -2605,7 +2606,7 @@ function useMenubarContext(optional) {
2605
2606
  }
2606
2607
 
2607
2608
  //#endregion
2608
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/store/MenuStore.mjs
2609
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/store/MenuStore.mjs
2609
2610
  const selectors = {
2610
2611
  ...popupStoreSelectors,
2611
2612
  disabled: (state) => state.parent.type === "menubar" ? state.parent.context.disabled || state.disabled : state.disabled,
@@ -2720,7 +2721,7 @@ function createInitialState() {
2720
2721
  }
2721
2722
 
2722
2723
  //#endregion
2723
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/submenu-root/MenuSubmenuRootContext.mjs
2724
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/submenu-root/MenuSubmenuRootContext.mjs
2724
2725
  const MenuSubmenuRootContext = /*#__PURE__*/ React.createContext(void 0);
2725
2726
  MenuSubmenuRootContext.displayName = "MenuSubmenuRootContext";
2726
2727
  function useMenuSubmenuRootContext() {
@@ -2728,7 +2729,7 @@ function useMenuSubmenuRootContext() {
2728
2729
  }
2729
2730
 
2730
2731
  //#endregion
2731
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/root/MenuRoot.mjs
2732
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/root/MenuRoot.mjs
2732
2733
  /**
2733
2734
  * Groups all parts of the menu.
2734
2735
  * Doesn't render its own HTML element.
@@ -3029,7 +3030,7 @@ function useMenuRootStore(initialState) {
3029
3030
  }
3030
3031
 
3031
3032
  //#endregion
3032
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/utils/getPseudoElementBounds.mjs
3033
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/utils/getPseudoElementBounds.mjs
3033
3034
  const BOUNDARY_OFFSET = 5;
3034
3035
  /**
3035
3036
  * Determines if a mouse event occurred within the bounds of an element
@@ -3063,7 +3064,7 @@ function getPseudoElementBounds(element) {
3063
3064
  }
3064
3065
 
3065
3066
  //#endregion
3066
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/internals/composite/item/CompositeItem.mjs
3067
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/internals/composite/item/CompositeItem.mjs
3067
3068
  function CompositeItem(componentProps) {
3068
3069
  const { render, className, style, state = EMPTY_OBJECT, props = EMPTY_ARRAY, refs = EMPTY_ARRAY, metadata, stateAttributesMapping, tag = "div", ...elementProps } = componentProps;
3069
3070
  const { compositeProps, compositeRef } = useCompositeItem({ metadata });
@@ -3080,7 +3081,7 @@ function CompositeItem(componentProps) {
3080
3081
  }
3081
3082
 
3082
3083
  //#endregion
3083
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/utils/findRootOwnerId.mjs
3084
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/utils/findRootOwnerId.mjs
3084
3085
  function findRootOwnerId(node) {
3085
3086
  if (isHTMLElement(node) && node.hasAttribute("data-rootownerid")) return node.getAttribute("data-rootownerid");
3086
3087
  if (isLastTraversableNode(node)) return;
@@ -3088,7 +3089,7 @@ function findRootOwnerId(node) {
3088
3089
  }
3089
3090
 
3090
3091
  //#endregion
3091
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/utils/popups/useTriggerFocusGuards.mjs
3092
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/utils/popups/useTriggerFocusGuards.mjs
3092
3093
  /**
3093
3094
  * Minimal store interface required by the focus guard hook.
3094
3095
  * Both PopoverStore and MenuStore satisfy this interface.
@@ -3132,7 +3133,7 @@ function useTriggerFocusGuards(store, triggerElementRef) {
3132
3133
  }
3133
3134
 
3134
3135
  //#endregion
3135
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/utils/useMixedToggleClickHandler.mjs
3136
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/utils/useMixedToggleClickHandler.mjs
3136
3137
  /**
3137
3138
  * Returns `click` and `mousedown` handlers that fix the behavior of triggers of popups that are toggled by different events.
3138
3139
  * For example, a button that opens a popup on mousedown and closes it on click.
@@ -3167,7 +3168,7 @@ function useMixedToggleClickHandler(params) {
3167
3168
  }
3168
3169
 
3169
3170
  //#endregion
3170
- //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@base-ui/react/menu/trigger/MenuTrigger.mjs
3171
+ //#region ../../node_modules/.pnpm/@base-ui+react@1.7.0_@types_e9c1e83f6bc6140c3efaf3427f2fbf0a/node_modules/@base-ui/react/menu/trigger/MenuTrigger.mjs
3171
3172
  /**
3172
3173
  * A button that opens the menu.
3173
3174
  * Renders a `<button>` element.
@@ -4123,47 +4124,6 @@ function getLastModified(filePath) {
4123
4124
  return LAST_MODIFIED[filePath];
4124
4125
  }
4125
4126
 
4126
- //#endregion
4127
- //#region src/lib/locale.ts
4128
- /** Primary language subtags written right-to-left. */
4129
- const RTL_LANGUAGES = /* @__PURE__ */ new Set([
4130
- "ar",
4131
- "ckb",
4132
- "dv",
4133
- "fa",
4134
- "he",
4135
- "iw",
4136
- "ps",
4137
- "sd",
4138
- "ug",
4139
- "ur",
4140
- "yi"
4141
- ]);
4142
- /** BCP 47-shaped tags with a 2-3 letter primary subtag, e.g. "es" or "pt-BR". */
4143
- const LOCALE_PATTERN = /^[a-z]{2,3}(-[a-z0-9]{2,8})*$/i;
4144
- function isValidLocale(value) {
4145
- if (!value || !LOCALE_PATTERN.test(value)) return false;
4146
- try {
4147
- return Intl.getCanonicalLocales(value).length > 0;
4148
- } catch {
4149
- return false;
4150
- }
4151
- }
4152
- /**
4153
- * Locale for a page: its scope's language code when valid, then the
4154
- * site-wide shiso.config `locale`, then en-US.
4155
- */
4156
- function resolveLocale(language, fallback) {
4157
- if (isValidLocale(language)) return Intl.getCanonicalLocales(language)[0];
4158
- if (isValidLocale(fallback)) return Intl.getCanonicalLocales(fallback)[0];
4159
- return "en-US";
4160
- }
4161
- /** Document direction for a locale, e.g. "ar" and "he" read right-to-left. */
4162
- function getTextDirection(locale) {
4163
- const primary = locale.split("-")[0]?.toLowerCase() || "";
4164
- return RTL_LANGUAGES.has(primary) ? "rtl" : "ltr";
4165
- }
4166
-
4167
4127
  //#endregion
4168
4128
  //#region src/lib/code-blocks.ts
4169
4129
  const DEFAULT_CODE_THEME = {
@@ -4224,36 +4184,6 @@ function resolveSearchConfig(config) {
4224
4184
 
4225
4185
  //#endregion
4226
4186
  //#region src/lib/site-model.ts
4227
- const SHISO_THEME_LABELS = {
4228
- menu: "Menu",
4229
- documentationNavigation: "Documentation navigation",
4230
- sections: "Sections",
4231
- tableOfContents: "On this page",
4232
- tableOfContentsNavigation: "Table of contents",
4233
- searchTitle: "Search",
4234
- searching: "Searching...",
4235
- searchUnavailable: "Search unavailable",
4236
- noResults: "No results",
4237
- lastUpdated: "Last updated on",
4238
- relatedTopics: "Related topics",
4239
- previousPage: "Previous",
4240
- nextPage: "Next",
4241
- notFound: "Page not found",
4242
- dismissBanner: "Dismiss banner",
4243
- toggleTheme: "Toggle theme",
4244
- moreOptions: "More options",
4245
- copied: "Copied",
4246
- expand: "Expand",
4247
- collapse: "Collapse",
4248
- copyPage: "Copy page",
4249
- copyPageDescription: "Copy this page as Markdown",
4250
- viewMarkdown: "View as Markdown",
4251
- viewMarkdownDescription: "Open this page as plain Markdown",
4252
- openInChatGPT: "Open in ChatGPT",
4253
- openInClaude: "Open in Claude",
4254
- openInPerplexity: "Open in Perplexity",
4255
- askQuestionsAboutPage: "Ask questions about this page"
4256
- };
4257
4187
  function isInternalHref(href) {
4258
4188
  return /^(?:#|\/|\.\.?\/)/.test(href);
4259
4189
  }
@@ -4329,17 +4259,19 @@ function resolveSiteModel(config, docs, shiso) {
4329
4259
  ...config.errors?.["404"],
4330
4260
  redirect: config.errors?.["404"]?.redirect !== false
4331
4261
  },
4262
+ editLink: config.editLink || null,
4263
+ feedback: config.feedback || null,
4332
4264
  showTimestamp: config.metadata?.timestamp === true,
4333
4265
  drilldown: config.interaction?.drilldown,
4334
4266
  locale: shiso?.locale || "en-US",
4335
- labels: SHISO_THEME_LABELS,
4267
+ labels: resolveLabels(shiso?.locale || "en-US", shiso?.translations),
4336
4268
  docs
4337
4269
  };
4338
4270
  }
4339
4271
  function aiPrompt(mdUrl) {
4340
4272
  return `Read ${mdUrl} so I can ask questions about it.`;
4341
4273
  }
4342
- function resolveContextualOptions(options, page, labels = SHISO_THEME_LABELS) {
4274
+ function resolveContextualOptions(options, page, labels = englishLabels) {
4343
4275
  const mdHref = `${toHref(page.url)}.md`;
4344
4276
  const absolutePageUrl = toAbsoluteUrl(page.url);
4345
4277
  const mdUrl = absolutePageUrl ? `${absolutePageUrl}.md` : void 0;
@@ -4442,10 +4374,15 @@ function normalizeStandalonePages(config, resolvePageFile, site, options = {}) {
4442
4374
  const fileSlug = normalizePageSlug(item?.page);
4443
4375
  const filePath = resolvePageFile(fileSlug);
4444
4376
  if (!filePath) throw new Error(`Missing standalone page file for "${fileSlug}": expected "content/pages/${fileSlug}.tsx", ".mdx", or ".md".`);
4377
+ const language = item?.language?.trim() || void 0;
4378
+ if (language && !site.scopes.some((scope) => scope.language === language)) throw invalid(`standalone page "${path}" uses language "${language}", which is not declared in navigation.languages.`);
4379
+ const key = language && fileSlug.startsWith(`${language}/`) ? fileSlug.slice(language.length + 1) : fileSlug;
4445
4380
  pages.push({
4446
4381
  path,
4447
4382
  filePath,
4448
- title: item?.title?.trim() || void 0
4383
+ title: item?.title?.trim() || void 0,
4384
+ language,
4385
+ key
4449
4386
  });
4450
4387
  }
4451
4388
  return pages;
@@ -4478,10 +4415,38 @@ const hasRootStandalonePage = standalonePages.some((page) => page.path === "/");
4478
4415
  function getStandalonePage(pathname) {
4479
4416
  return getStandalonePageByPathname(standalonePages, stripBase(pathname));
4480
4417
  }
4481
- /** Scope that owns the current pathname; the default scope for unknown paths. */
4418
+ /** Landing scope of a language: its default version. */
4419
+ function getLanguageScope(language) {
4420
+ return docsSite.scopes.find((scope) => scope.language === language && scope.isLanguageDefault);
4421
+ }
4422
+ /**
4423
+ * Scope that owns the current pathname. A standalone page tagged with a
4424
+ * `language` belongs to that language's landing scope; unknown paths and
4425
+ * untagged standalone pages belong to the default scope.
4426
+ */
4482
4427
  function getScopeByPathname(pathname) {
4483
4428
  const page = getPageByPathname(pathname);
4484
- return page ? getScopeForPage(docsSite, page) : getDefaultScope(docsSite);
4429
+ if (page) return getScopeForPage(docsSite, page);
4430
+ const standalone = getStandalonePage(pathname);
4431
+ return (standalone?.language ? getLanguageScope(standalone.language) : void 0) || getDefaultScope(docsSite);
4432
+ }
4433
+ /**
4434
+ * The same standalone page in another language, matched by `key`. Untagged
4435
+ * pages count as the default scope's language.
4436
+ */
4437
+ function getStandaloneCounterpart(page, language) {
4438
+ const defaultLanguage = getDefaultScope(docsSite).language;
4439
+ return standalonePages.find((candidate) => candidate.key === page.key && (candidate.language || defaultLanguage) === language) || null;
4440
+ }
4441
+ /**
4442
+ * Home link for the current pathname: the "/" standalone page in the current
4443
+ * language when one exists, else "/", else the docs home when nothing owns "/".
4444
+ */
4445
+ function getHomeHref(pathname) {
4446
+ const root = standalonePages.find((page) => page.path === "/");
4447
+ if (!root) return docsHomeUrl;
4448
+ const language = getScopeByPathname(pathname).language;
4449
+ return language && getStandaloneCounterpart(root, language)?.path || "/";
4485
4450
  }
4486
4451
  /** Document language and direction for a pathname, from its scope's language. */
4487
4452
  function getLocaleByPathname(pathname) {
@@ -4491,6 +4456,20 @@ function getLocaleByPathname(pathname) {
4491
4456
  dir: getTextDirection(lang)
4492
4457
  };
4493
4458
  }
4459
+ /** Resolve UI text on every route, including standalone pages and language switches. */
4460
+ function getSiteModelByPathname(pathname) {
4461
+ const { lang } = getLocaleByPathname(pathname);
4462
+ const labels = resolveLabels(lang, shiso.translations);
4463
+ const customPrompt = typeof siteConfig.search === "object" ? siteConfig.search.prompt?.trim() : void 0;
4464
+ return {
4465
+ ...siteModel,
4466
+ labels,
4467
+ search: {
4468
+ ...siteModel.search,
4469
+ prompt: customPrompt || labels.searchPlaceholder
4470
+ }
4471
+ };
4472
+ }
4494
4473
  const siteName = siteModel.name;
4495
4474
  /** Trailing-slash-insensitive route key for redirect matching. */
4496
4475
  function toRouteKey(routePath) {
@@ -4544,39 +4523,47 @@ function getPageTitle(pageTitle) {
4544
4523
  //#region src/components/LanguageSwitcher.tsx
4545
4524
  /**
4546
4525
  * Language selector for multi-language sites. Each option is a language's
4547
- * landing scope — its default version — so switching languages always lands
4548
- * on that language's default-version first page. Hidden languages never
4549
- * appear as options.
4526
+ * landing scope — its default version — so switching languages lands on that
4527
+ * language's default-version first page. On a standalone page (e.g. a home
4528
+ * page) it lands on the same page in the chosen language when one exists.
4529
+ * Hidden languages never
4530
+ * appear as options. Each language is shown by its native name, e.g. "ja"
4531
+ * as "日本語".
4550
4532
  */
4551
4533
  function LanguageSwitcher() {
4552
4534
  const { pathname } = useLocation();
4553
4535
  const navigate = useNavigate();
4554
4536
  const current = getScopeByPathname(pathname);
4555
4537
  const options = getLanguageScopes(docsSite);
4538
+ const standalone = getStandalonePage(pathname);
4556
4539
  if (!current.language || options.length < 2 && !current.hidden) return null;
4557
4540
  return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(DropdownMenuTrigger, {
4558
4541
  render: /* @__PURE__ */ jsx(Button, {
4559
4542
  variant: "outline",
4560
4543
  className: "h-auto gap-1.5 rounded-md bg-card px-2.5 py-1.5 text-sm font-medium text-foreground"
4561
4544
  }),
4562
- children: [current.language, /* @__PURE__ */ jsx(ChevronRight, { className: "size-3.5 rotate-90 text-muted-foreground" })]
4545
+ children: [getLanguageName(current.language), /* @__PURE__ */ jsx(ChevronRight, { className: "size-3.5 rotate-90 text-muted-foreground" })]
4563
4546
  }), /* @__PURE__ */ jsx(DropdownMenuContent, {
4564
4547
  align: "start",
4565
4548
  className: "min-w-32",
4566
4549
  children: options.map((scope) => /* @__PURE__ */ jsxs(DropdownMenuItem, {
4567
4550
  onClick: () => {
4568
- if (scope.language !== current.language) navigate(scope.firstPageUrl);
4551
+ if (scope.language !== current.language) {
4552
+ const counterpart = standalone && scope.language ? getStandaloneCounterpart(standalone, scope.language) : null;
4553
+ navigate(counterpart?.path || scope.firstPageUrl);
4554
+ }
4569
4555
  },
4570
4556
  children: [/* @__PURE__ */ jsx("span", {
4571
4557
  className: "grow",
4572
- children: scope.language
4558
+ lang: isValidLocale(scope.language) ? scope.language : void 0,
4559
+ children: scope.language ? getLanguageName(scope.language) : null
4573
4560
  }), scope.language === current.language ? /* @__PURE__ */ jsx(Check, { className: "size-3.5" }) : null]
4574
4561
  }, scope.id))
4575
4562
  })] });
4576
4563
  }
4577
4564
 
4578
4565
  //#endregion
4579
- //#region ../../node_modules/.pnpm/cmdk@1.1.1_@types+react-dom@19.2.4_@types+react@19.2.18__@types+react@19.2.18_react-dom_b7833f22e642c0a58838e454e2cd1ba9/node_modules/cmdk/dist/chunk-NZJY6EH4.mjs
4566
+ //#region ../../node_modules/.pnpm/cmdk@1.1.1_@types+react-dom_b7833f22e642c0a58838e454e2cd1ba9/node_modules/cmdk/dist/chunk-NZJY6EH4.mjs
4580
4567
  var U = 1;
4581
4568
  var Y$1 = .9;
4582
4569
  var H = .8;
@@ -4648,7 +4635,7 @@ function isFrame(element) {
4648
4635
  __name$14(isFrame, "isFrame");
4649
4636
 
4650
4637
  //#endregion
4651
- //#region ../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.5_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
4638
+ //#region ../../node_modules/.pnpm/@radix-ui+react-compose-ref_60a8f511f5a953d1cc58e5040847ca1c/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
4652
4639
  var __defProp$13 = Object.defineProperty;
4653
4640
  var __name$13 = (target, value) => __defProp$13(target, "name", {
4654
4641
  value,
@@ -4683,7 +4670,7 @@ function useComposedRefs(...refs) {
4683
4670
  __name$13(useComposedRefs, "useComposedRefs");
4684
4671
 
4685
4672
  //#endregion
4686
- //#region ../../node_modules/.pnpm/@radix-ui+react-context@1.2.2_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-context/dist/index.mjs
4673
+ //#region ../../node_modules/.pnpm/@radix-ui+react-context@1.2_dc174a77f999d3bc0470f0b9c664f7ff/node_modules/@radix-ui/react-context/dist/index.mjs
4687
4674
  var __defProp$12 = Object.defineProperty;
4688
4675
  var __name$12 = (target, value) => __defProp$12(target, "name", {
4689
4676
  value,
@@ -4786,7 +4773,7 @@ function composeContextScopes(...scopes) {
4786
4773
  __name$12(composeContextScopes, "composeContextScopes");
4787
4774
 
4788
4775
  //#endregion
4789
- //#region ../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.4_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
4776
+ //#region ../../node_modules/.pnpm/@radix-ui+react-use-layout-_c99e7a4bfc0168fd072fc8506ded8cde/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
4790
4777
  var useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {};
4791
4778
 
4792
4779
  //#endregion
@@ -4808,7 +4795,7 @@ function useId$1(deterministicId) {
4808
4795
  __name$11(useId$1, "useId");
4809
4796
 
4810
4797
  //#endregion
4811
- //#region ../../node_modules/.pnpm/@radix-ui+react-use-effect-event@0.0.5_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs
4798
+ //#region ../../node_modules/.pnpm/@radix-ui+react-use-effect-_e8d5e8242c04825bf34212c7f6280f14/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs
4812
4799
  var __defProp$10 = Object.defineProperty;
4813
4800
  var __name$10 = (target, value) => __defProp$10(target, "name", {
4814
4801
  value,
@@ -4832,7 +4819,7 @@ function useEffectEvent(callback) {
4832
4819
  __name$10(useEffectEvent, "useEffectEvent");
4833
4820
 
4834
4821
  //#endregion
4835
- //#region ../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.6_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs
4822
+ //#region ../../node_modules/.pnpm/@radix-ui+react-use-control_22187853d61b94632003c277d0370b10/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs
4836
4823
  var __defProp$9 = Object.defineProperty;
4837
4824
  var __name$9 = (target, value) => __defProp$9(target, "name", {
4838
4825
  value,
@@ -5065,7 +5052,7 @@ var createSlottableError = /* @__PURE__ */ __name$8((ownerName) => {
5065
5052
  var use = React[" use ".trim().toString()];
5066
5053
 
5067
5054
  //#endregion
5068
- //#region ../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.10_@types+react-dom@19.2.4_@types+react@19.2.18__@types+r_89d529a1bae70a6b01b956c8b2bdbce1/node_modules/@radix-ui/react-primitive/dist/index.mjs
5055
+ //#region ../../node_modules/.pnpm/@radix-ui+react-primitive@2_89d529a1bae70a6b01b956c8b2bdbce1/node_modules/@radix-ui/react-primitive/dist/index.mjs
5069
5056
  var __defProp$7 = Object.defineProperty;
5070
5057
  var __name$7 = (target, value) => __defProp$7(target, "name", {
5071
5058
  value,
@@ -5112,7 +5099,7 @@ function dispatchDiscreteCustomEvent(target, event) {
5112
5099
  __name$7(dispatchDiscreteCustomEvent, "dispatchDiscreteCustomEvent");
5113
5100
 
5114
5101
  //#endregion
5115
- //#region ../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.4_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs
5102
+ //#region ../../node_modules/.pnpm/@radix-ui+react-use-callbac_b03f33a0fc5867b4ab17368fb2aecc43/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs
5116
5103
  var __defProp$6 = Object.defineProperty;
5117
5104
  var __name$6 = (target, value) => __defProp$6(target, "name", {
5118
5105
  value,
@@ -5128,7 +5115,7 @@ function useCallbackRef$1(callback) {
5128
5115
  __name$6(useCallbackRef$1, "useCallbackRef");
5129
5116
 
5130
5117
  //#endregion
5131
- //#region ../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.19_@types+react-dom@19.2.4_@types+react@19.2.18___40e495cae3a960f65f80435c18b02650/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs
5118
+ //#region ../../node_modules/.pnpm/@radix-ui+react-dismissable_40e495cae3a960f65f80435c18b02650/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs
5132
5119
  var __defProp$5 = Object.defineProperty;
5133
5120
  var __name$5 = (target, value) => __defProp$5(target, "name", {
5134
5121
  value,
@@ -5393,7 +5380,7 @@ function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {
5393
5380
  __name$5(handleAndDispatchCustomEvent, "handleAndDispatchCustomEvent");
5394
5381
 
5395
5382
  //#endregion
5396
- //#region ../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.16_@types+react-dom@19.2.4_@types+react@19.2.18__@types_3b4e29b84c639c7da7ed6c275ef9f34b/node_modules/@radix-ui/react-focus-scope/dist/index.mjs
5383
+ //#region ../../node_modules/.pnpm/@radix-ui+react-focus-scope_3b4e29b84c639c7da7ed6c275ef9f34b/node_modules/@radix-ui/react-focus-scope/dist/index.mjs
5397
5384
  var __defProp$4 = Object.defineProperty;
5398
5385
  var __name$4 = (target, value) => __defProp$4(target, "name", {
5399
5386
  value,
@@ -5600,7 +5587,7 @@ function removeLinks(items) {
5600
5587
  __name$4(removeLinks, "removeLinks");
5601
5588
 
5602
5589
  //#endregion
5603
- //#region ../../node_modules/.pnpm/@radix-ui+react-portal@1.1.17_@types+react-dom@19.2.4_@types+react@19.2.18__@types+reac_7d49bbd59f67da7ea06e84940374bb40/node_modules/@radix-ui/react-portal/dist/index.mjs
5590
+ //#region ../../node_modules/.pnpm/@radix-ui+react-portal@1.1._7d49bbd59f67da7ea06e84940374bb40/node_modules/@radix-ui/react-portal/dist/index.mjs
5604
5591
  var __defProp$3 = Object.defineProperty;
5605
5592
  var __name$3 = (target, value) => __defProp$3(target, "name", {
5606
5593
  value,
@@ -5618,7 +5605,7 @@ var Portal = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name$3(function
5618
5605
  }, "Portal"));
5619
5606
 
5620
5607
  //#endregion
5621
- //#region ../../node_modules/.pnpm/@radix-ui+react-presence@1.1.10_@types+react-dom@19.2.4_@types+react@19.2.18__@types+re_c16522d094fa2977c5a9a5cd628ab890/node_modules/@radix-ui/react-presence/dist/index.mjs
5608
+ //#region ../../node_modules/.pnpm/@radix-ui+react-presence@1._c16522d094fa2977c5a9a5cd628ab890/node_modules/@radix-ui/react-presence/dist/index.mjs
5622
5609
  var __defProp$2 = Object.defineProperty;
5623
5610
  var __name$2 = (target, value) => __defProp$2(target, "name", {
5624
5611
  value,
@@ -5761,7 +5748,7 @@ function getElementRef(element) {
5761
5748
  __name$2(getElementRef, "getElementRef");
5762
5749
 
5763
5750
  //#endregion
5764
- //#region ../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.6_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-focus-guards/dist/index.mjs
5751
+ //#region ../../node_modules/.pnpm/@radix-ui+react-focus-guard_0b6dc35411495c11d7017f4d480bfd1d/node_modules/@radix-ui/react-focus-guards/dist/index.mjs
5765
5752
  var __defProp$1 = Object.defineProperty;
5766
5753
  var __name$1 = (target, value) => __defProp$1(target, "name", {
5767
5754
  value,
@@ -5838,7 +5825,7 @@ function __spreadArray(to, from, pack) {
5838
5825
  }
5839
5826
 
5840
5827
  //#endregion
5841
- //#region ../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.18_react@19.2.8/node_modules/react-remove-scroll-bar/dist/es2015/constants.js
5828
+ //#region ../../node_modules/.pnpm/react-remove-scroll-bar@2.3_6765803d5ca9f56610f613c0cdac7218/node_modules/react-remove-scroll-bar/dist/es2015/constants.js
5842
5829
  var zeroRightClassName = "right-scroll-bar-position";
5843
5830
  var fullWidthClassName = "width-before-scroll-bar";
5844
5831
  var noScrollbarsClassName = "with-scroll-bars-hidden";
@@ -6116,7 +6103,7 @@ var getNonce = function() {
6116
6103
  };
6117
6104
 
6118
6105
  //#endregion
6119
- //#region ../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.18_react@19.2.8/node_modules/react-style-singleton/dist/es2015/singleton.js
6106
+ //#region ../../node_modules/.pnpm/react-style-singleton@2.2.3_b6136bc3c152300a6c842c4b9688e211/node_modules/react-style-singleton/dist/es2015/singleton.js
6120
6107
  function makeStyleTag() {
6121
6108
  if (!document) return null;
6122
6109
  var tag = document.createElement("style");
@@ -6156,7 +6143,7 @@ var stylesheetSingleton = function() {
6156
6143
  };
6157
6144
 
6158
6145
  //#endregion
6159
- //#region ../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.18_react@19.2.8/node_modules/react-style-singleton/dist/es2015/hook.js
6146
+ //#region ../../node_modules/.pnpm/react-style-singleton@2.2.3_b6136bc3c152300a6c842c4b9688e211/node_modules/react-style-singleton/dist/es2015/hook.js
6160
6147
  /**
6161
6148
  * creates a hook to control style singleton
6162
6149
  * @see {@link styleSingleton} for a safer component version
@@ -6179,7 +6166,7 @@ var styleHookSingleton = function() {
6179
6166
  };
6180
6167
 
6181
6168
  //#endregion
6182
- //#region ../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.18_react@19.2.8/node_modules/react-style-singleton/dist/es2015/component.js
6169
+ //#region ../../node_modules/.pnpm/react-style-singleton@2.2.3_b6136bc3c152300a6c842c4b9688e211/node_modules/react-style-singleton/dist/es2015/component.js
6183
6170
  /**
6184
6171
  * create a Component to add styles on demand
6185
6172
  * - styles are added when first instance is mounted
@@ -6197,7 +6184,7 @@ var styleSingleton = function() {
6197
6184
  };
6198
6185
 
6199
6186
  //#endregion
6200
- //#region ../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.18_react@19.2.8/node_modules/react-remove-scroll-bar/dist/es2015/utils.js
6187
+ //#region ../../node_modules/.pnpm/react-remove-scroll-bar@2.3_6765803d5ca9f56610f613c0cdac7218/node_modules/react-remove-scroll-bar/dist/es2015/utils.js
6201
6188
  var zeroGap = {
6202
6189
  left: 0,
6203
6190
  top: 0,
@@ -6233,7 +6220,7 @@ var getGapWidth = function(gapMode) {
6233
6220
  };
6234
6221
 
6235
6222
  //#endregion
6236
- //#region ../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.18_react@19.2.8/node_modules/react-remove-scroll-bar/dist/es2015/component.js
6223
+ //#region ../../node_modules/.pnpm/react-remove-scroll-bar@2.3_6765803d5ca9f56610f613c0cdac7218/node_modules/react-remove-scroll-bar/dist/es2015/component.js
6237
6224
  var Style = styleSingleton();
6238
6225
  var lockAttribute = "data-scroll-locked";
6239
6226
  var getStyles = function(_a, allowRelative, gapMode, important) {
@@ -6648,7 +6635,7 @@ var hideOthers = function(originalTarget, parentNode, markerName) {
6648
6635
  };
6649
6636
 
6650
6637
  //#endregion
6651
- //#region ../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.23_@types+react-dom@19.2.4_@types+react@19.2.18__@types+reac_f43cda4f5f60c6fd8f384ced683c6d90/node_modules/@radix-ui/react-dialog/dist/index.mjs
6638
+ //#region ../../node_modules/.pnpm/@radix-ui+react-dialog@1.1._f43cda4f5f60c6fd8f384ced683c6d90/node_modules/@radix-ui/react-dialog/dist/index.mjs
6652
6639
  var __defProp = Object.defineProperty;
6653
6640
  var __name = (target, value) => __defProp(target, "name", {
6654
6641
  value,
@@ -6839,7 +6826,7 @@ function getState(open) {
6839
6826
  __name(getState, "getState");
6840
6827
 
6841
6828
  //#endregion
6842
- //#region ../../node_modules/.pnpm/cmdk@1.1.1_@types+react-dom@19.2.4_@types+react@19.2.18__@types+react@19.2.18_react-dom_b7833f22e642c0a58838e454e2cd1ba9/node_modules/cmdk/dist/index.mjs
6829
+ //#region ../../node_modules/.pnpm/cmdk@1.1.1_@types+react-dom_b7833f22e642c0a58838e454e2cd1ba9/node_modules/cmdk/dist/index.mjs
6843
6830
  var N = "[cmdk-group=\"\"]";
6844
6831
  var Y = "[cmdk-group-items=\"\"]";
6845
6832
  var be = "[cmdk-group-heading=\"\"]";
@@ -7726,7 +7713,7 @@ function Header({ site }) {
7726
7713
  const { logo, navbar, name, appearance, labels } = site;
7727
7714
  const { pathname } = useLocation();
7728
7715
  const docs = getScopeByPathname(pathname).docs;
7729
- const brandHref = logo?.href || (hasRootStandalonePage ? "/" : docsHomeUrl);
7716
+ const brandHref = logo?.href || getHomeHref(pathname);
7730
7717
  const hasBrand = !!name || !!logo?.light || !!logo?.dark;
7731
7718
  const brandClassName = "inline-flex items-center gap-2 text-xl font-bold text-foreground tracking-[-0.03em]";
7732
7719
  const brandContent = /* @__PURE__ */ jsxs(Fragment$1, { children: [logo?.invert && logo.light ? /* @__PURE__ */ jsx("img", {
@@ -8109,23 +8096,23 @@ function getOperation(key) {
8109
8096
  return OPENAPI_OPERATIONS[`${method.toUpperCase()} ${rest.join(" ")}`];
8110
8097
  }
8111
8098
  /** Parameter groups shared by the renderer and table of contents. */
8112
- function operationParameterSections(operation) {
8099
+ function operationParameterSections(operation, labels = englishLabels) {
8113
8100
  return [
8114
8101
  {
8115
8102
  location: "header",
8116
- name: "Headers"
8103
+ name: labels.apiHeaders
8117
8104
  },
8118
8105
  {
8119
8106
  location: "path",
8120
- name: "Path parameters"
8107
+ name: labels.apiPathParameters
8121
8108
  },
8122
8109
  {
8123
8110
  location: "query",
8124
- name: "Query parameters"
8111
+ name: labels.apiQueryParameters
8125
8112
  },
8126
8113
  {
8127
8114
  location: "cookie",
8128
- name: "Cookie parameters"
8115
+ name: labels.apiCookieParameters
8129
8116
  }
8130
8117
  ].filter(({ location }) => operation.parameters[location].length > 0 || location === "header" && operation.security.length > 0);
8131
8118
  }
@@ -8134,15 +8121,22 @@ function operationParameterSections(operation) {
8134
8121
  * truth for section ids: the component, the table of contents, the content
8135
8122
  * checker, and the search indexer all derive their anchors from these labels.
8136
8123
  */
8137
- function operationSections(operation) {
8124
+ function operationSections(operation, labels = englishLabels) {
8138
8125
  const slugger = createSlugger();
8139
- return [
8126
+ const names = [
8140
8127
  ...operationParameterSections(operation).map((section) => section.name),
8141
8128
  operation.requestBody ? "Request body" : void 0,
8142
8129
  operation.responses.length ? "Responses" : void 0,
8143
8130
  operation.samples.length ? "Code samples" : void 0
8144
- ].filter((name) => Boolean(name)).map((name) => ({
8145
- name,
8131
+ ].filter((name) => Boolean(name));
8132
+ const translated = [
8133
+ ...operationParameterSections(operation, labels).map((section) => section.name),
8134
+ ...operation.requestBody ? [labels.apiRequestBody] : [],
8135
+ ...operation.responses.length ? [labels.apiResponses] : [],
8136
+ ...operation.samples.length ? [labels.apiCodeSamples] : []
8137
+ ];
8138
+ return names.map((name, index) => ({
8139
+ name: translated[index],
8146
8140
  id: slugger.slug(name),
8147
8141
  size: 2
8148
8142
  }));
@@ -8151,30 +8145,32 @@ function operationSections(operation) {
8151
8145
  //#endregion
8152
8146
  //#region src/components/OpenApiOperation.tsx
8153
8147
  function FieldChildren({ node }) {
8148
+ const labels = useLabels();
8154
8149
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [node.description, node.enum && node.enum.length > 0 && /* @__PURE__ */ jsxs("div", {
8155
8150
  className: "mt-1",
8156
8151
  children: [
8157
- "Options:",
8152
+ labels.fieldOptions,
8158
8153
  " ",
8159
8154
  node.enum.map((value, index) => /* @__PURE__ */ jsxs("span", { children: [index > 0 && ", ", /* @__PURE__ */ jsx("code", { children: value })] }, value))
8160
8155
  ]
8161
8156
  })] });
8162
8157
  }
8163
- function schemaDetails(node) {
8158
+ function schemaDetails(node, labels) {
8164
8159
  if (!node.children?.length) return void 0;
8165
8160
  return /* @__PURE__ */ jsx(Expandable, {
8166
- title: node.type === "oneOf" || node.type === "anyOf" ? "Allowed types" : "properties",
8161
+ title: node.type === "oneOf" || node.type === "anyOf" ? labels.allowedTypes : labels.properties,
8167
8162
  children: /* @__PURE__ */ jsx(SchemaTable, { nodes: node.children })
8168
8163
  });
8169
8164
  }
8170
8165
  function SchemaTable({ nodes }) {
8166
+ const labels = useLabels();
8171
8167
  return /* @__PURE__ */ jsx(PropertiesTable, { children: nodes.map((node) => /* @__PURE__ */ jsx(PropertiesTable.Row, {
8172
8168
  name: node.name || node.type,
8173
8169
  type: node.type,
8174
8170
  required: node.required,
8175
8171
  deprecated: node.deprecated,
8176
8172
  default: node.default,
8177
- details: schemaDetails(node),
8173
+ details: schemaDetails(node, labels),
8178
8174
  children: /* @__PURE__ */ jsx(FieldChildren, { node })
8179
8175
  }, node.name || node.type)) });
8180
8176
  }
@@ -8199,19 +8195,22 @@ function HighlightedCode({ language, title, html, source, lineCount }) {
8199
8195
  }
8200
8196
  /** The generated reference for one API operation, rendered under the page body. */
8201
8197
  function OpenApiOperation({ operation }) {
8202
- const sections = new Map(operationSections(operation).map((entry) => [entry.name, entry.id]));
8198
+ const labels = useLabels();
8199
+ const sectionEntries = operationSections(operation);
8200
+ const sections = new Map(sectionEntries.map((entry) => [entry.name, entry.id]));
8203
8201
  return /* @__PURE__ */ jsxs("div", {
8204
8202
  className: "docs-markdown",
8205
8203
  children: [
8206
- operationParameterSections(operation).map(({ location, name }) => /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsx("h2", {
8207
- id: sections.get(name),
8204
+ operationParameterSections(operation, labels).map(({ location, name }, index) => /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsx("h2", {
8205
+ id: sectionEntries[index].id,
8208
8206
  children: name
8209
8207
  }), /* @__PURE__ */ jsxs(PropertiesTable, { children: [location === "header" && operation.security.length > 0 && /* @__PURE__ */ jsxs(PropertiesTable.Row, {
8210
8208
  name: "Authorization",
8211
8209
  type: "string",
8212
8210
  required: true,
8213
8211
  children: [
8214
- "Authentication credentials, e.g. ",
8212
+ labels.apiCredentials,
8213
+ " ",
8215
8214
  /* @__PURE__ */ jsx("code", { children: "Bearer <token>" }),
8216
8215
  "."
8217
8216
  ]
@@ -8221,25 +8220,25 @@ function OpenApiOperation({ operation }) {
8221
8220
  required: parameter.required,
8222
8221
  deprecated: parameter.deprecated,
8223
8222
  default: parameter.default,
8224
- details: schemaDetails(parameter),
8223
+ details: schemaDetails(parameter, labels),
8225
8224
  children: /* @__PURE__ */ jsx(FieldChildren, { node: parameter })
8226
8225
  }, parameter.name))] })] }, location)),
8227
8226
  operation.requestBody && /* @__PURE__ */ jsxs("section", { children: [
8228
8227
  /* @__PURE__ */ jsx("h2", {
8229
8228
  id: sections.get("Request body"),
8230
- children: "Request body"
8229
+ children: labels.apiRequestBody
8231
8230
  }),
8232
8231
  /* @__PURE__ */ jsx(SchemaFields, { node: operation.requestBody.schema }),
8233
8232
  operation.requestBody.example && /* @__PURE__ */ jsx(HighlightedCode, {
8234
8233
  language: "json",
8235
- title: "Example request",
8234
+ title: labels.apiExampleRequest,
8236
8235
  html: operation.requestBody.exampleHtml,
8237
8236
  source: operation.requestBody.example
8238
8237
  })
8239
8238
  ] }),
8240
8239
  operation.responses.length > 0 && /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsx("h2", {
8241
8240
  id: sections.get("Responses"),
8242
- children: "Responses"
8241
+ children: labels.apiResponses
8243
8242
  }), operation.responses.map((response) => /* @__PURE__ */ jsxs("div", {
8244
8243
  className: "mt-6 first:mt-0",
8245
8244
  children: [
@@ -8257,7 +8256,7 @@ function OpenApiOperation({ operation }) {
8257
8256
  response.schema && /* @__PURE__ */ jsx(SchemaFields, { node: response.schema }),
8258
8257
  response.example && /* @__PURE__ */ jsx(HighlightedCode, {
8259
8258
  language: "json",
8260
- title: `${response.status} example`,
8259
+ title: labels.apiExampleResponse.replace("{status}", () => response.status),
8261
8260
  html: response.exampleHtml,
8262
8261
  source: response.example
8263
8262
  })
@@ -8265,7 +8264,7 @@ function OpenApiOperation({ operation }) {
8265
8264
  }, response.status))] }),
8266
8265
  operation.samples.length > 0 && /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsx("h2", {
8267
8266
  id: sections.get("Code samples"),
8268
- children: "Code samples"
8267
+ children: labels.apiCodeSamples
8269
8268
  }), /* @__PURE__ */ jsx(CodeGroup, { children: operation.samples.map((sample) => /* @__PURE__ */ jsx(HighlightedCode, {
8270
8269
  language: sample.language,
8271
8270
  title: sample.label,
@@ -8277,6 +8276,98 @@ function OpenApiOperation({ operation }) {
8277
8276
  });
8278
8277
  }
8279
8278
 
8279
+ //#endregion
8280
+ //#region src/components/PageActions.tsx
8281
+ function editHref(template, filePath) {
8282
+ if (!template) return void 0;
8283
+ const file = filePath.replace(/^\/+/, "").split("/").map(encodeURIComponent).join("/");
8284
+ const href = template.replaceAll("$file", file);
8285
+ try {
8286
+ const url = new URL(href);
8287
+ if (url.protocol === "https:" || url.protocol === "http:") return url.href;
8288
+ } catch {}
8289
+ }
8290
+ function PageActions({ page, frontmatter, site, lastUpdated }) {
8291
+ const [status, setStatus] = useState("idle");
8292
+ const [rating, setRating] = useState();
8293
+ const request = useRef(null);
8294
+ useEffect(() => () => request.current?.abort(), []);
8295
+ const feedback = frontmatter?.feedback === false ? null : site.feedback;
8296
+ const href = frontmatter?.editLink === false ? void 0 : editHref(typeof frontmatter?.editLink === "string" ? frontmatter.editLink : site.editLink?.url, page.filePath);
8297
+ async function submit(helpful) {
8298
+ if (!feedback || request.current || status === "success") return;
8299
+ const controller = new AbortController();
8300
+ request.current = controller;
8301
+ setRating(helpful);
8302
+ setStatus("pending");
8303
+ const timeout = window.setTimeout(() => controller.abort(), 15e3);
8304
+ try {
8305
+ const endpoint = new URL(toHref(feedback.endpoint), window.location.origin);
8306
+ if (!["https:", "http:"].includes(endpoint.protocol)) throw new Error("Invalid endpoint");
8307
+ if (!(await fetch(endpoint.href, {
8308
+ method: "POST",
8309
+ headers: { "Content-Type": "application/json" },
8310
+ body: JSON.stringify({
8311
+ helpful,
8312
+ path: toHref(page.url),
8313
+ title: frontmatter?.title || page.label,
8314
+ language: page.language,
8315
+ version: page.version
8316
+ }),
8317
+ signal: controller.signal
8318
+ })).ok) throw new Error("Feedback submission failed");
8319
+ setStatus("success");
8320
+ } catch {
8321
+ setStatus("error");
8322
+ } finally {
8323
+ window.clearTimeout(timeout);
8324
+ request.current = null;
8325
+ }
8326
+ }
8327
+ if (!href && !feedback && !lastUpdated) return null;
8328
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [(lastUpdated || href) && /* @__PURE__ */ jsxs("div", {
8329
+ className: "mt-8 flex items-baseline gap-4 text-sm text-muted-foreground",
8330
+ "data-pagefind-ignore": true,
8331
+ children: [lastUpdated && /* @__PURE__ */ jsx("div", {
8332
+ className: "min-w-0",
8333
+ children: lastUpdated
8334
+ }), href && /* @__PURE__ */ jsxs("a", {
8335
+ href,
8336
+ target: "_blank",
8337
+ rel: "noopener noreferrer",
8338
+ className: "ml-auto inline-flex shrink-0 items-center gap-1.5 text-right no-underline hover:text-primary",
8339
+ children: [site.editLink?.label || site.labels.editPage, /* @__PURE__ */ jsx(ExternalLink, {
8340
+ size: 14,
8341
+ "aria-hidden": "true"
8342
+ })]
8343
+ })]
8344
+ }), feedback && /* @__PURE__ */ jsxs("div", {
8345
+ className: "mt-8 flex flex-col gap-2 border-t border-border pt-6 text-sm",
8346
+ "aria-busy": status === "pending",
8347
+ "data-pagefind-ignore": true,
8348
+ children: [/* @__PURE__ */ jsxs("fieldset", {
8349
+ "aria-label": feedback.prompt || site.labels.feedbackPrompt,
8350
+ className: "flex flex-wrap items-center gap-2",
8351
+ children: [/* @__PURE__ */ jsx("span", {
8352
+ className: "mr-2 text-muted-foreground",
8353
+ children: feedback.prompt || site.labels.feedbackPrompt
8354
+ }), [true, false].map((helpful) => /* @__PURE__ */ jsx("button", {
8355
+ type: "button",
8356
+ "aria-pressed": rating === helpful,
8357
+ disabled: status === "pending" || status === "success",
8358
+ onClick: () => void submit(helpful),
8359
+ className: "rounded-md border border-border px-3 py-1.5 text-foreground hover:bg-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:cursor-default disabled:opacity-60 aria-pressed:border-primary aria-pressed:text-primary",
8360
+ children: helpful ? feedback.helpfulLabel || site.labels.feedbackYes : feedback.unhelpfulLabel || site.labels.feedbackNo
8361
+ }, String(helpful)))]
8362
+ }), /* @__PURE__ */ jsxs("div", {
8363
+ role: "status",
8364
+ "aria-live": "polite",
8365
+ className: "text-muted-foreground",
8366
+ children: [status === "success" && (feedback.successMessage || site.labels.feedbackSuccess), status === "error" && (feedback.errorMessage || site.labels.feedbackError)]
8367
+ })]
8368
+ })] });
8369
+ }
8370
+
8280
8371
  //#endregion
8281
8372
  //#region src/components/DocContent.tsx
8282
8373
  /**
@@ -8377,17 +8468,19 @@ function DocContent({ page, doc, site }) {
8377
8468
  children: /* @__PURE__ */ jsx(Content, {})
8378
8469
  }),
8379
8470
  operation && /* @__PURE__ */ jsx(OpenApiOperation, { operation }),
8380
- lastModified && /* @__PURE__ */ jsxs("div", {
8381
- className: "mt-8 text-sm text-muted-foreground",
8382
- children: [
8471
+ /* @__PURE__ */ jsx(PageActions, {
8472
+ page,
8473
+ frontmatter: doc.frontmatter,
8474
+ site,
8475
+ lastUpdated: lastModified ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
8383
8476
  site.labels.lastUpdated,
8384
8477
  " ",
8385
8478
  /* @__PURE__ */ jsx("time", {
8386
8479
  dateTime: lastModified,
8387
8480
  children: dateFormat.format(new Date(lastModified))
8388
8481
  })
8389
- ]
8390
- }),
8482
+ ] }) : void 0
8483
+ }, page.url),
8391
8484
  related.length > 0 && /* @__PURE__ */ jsxs("nav", {
8392
8485
  className: "mt-8",
8393
8486
  "aria-label": site.labels.relatedTopics,
@@ -8463,6 +8556,7 @@ const NavigationButton = ({ label, url, eyebrow, isPrev }) => {
8463
8556
  //#endregion
8464
8557
  //#region src/components/Footer.tsx
8465
8558
  function Footer({ footer, className = "" }) {
8559
+ const labels = useLabels();
8466
8560
  if (!footer) return null;
8467
8561
  const { socials, links: columns, attribution } = footer;
8468
8562
  return /* @__PURE__ */ jsxs("footer", {
@@ -8487,10 +8581,14 @@ function Footer({ footer, className = "" }) {
8487
8581
  children: [attribution ? /* @__PURE__ */ jsxs("a", {
8488
8582
  href: "https://shiso.umami.is?ref=docs-footer",
8489
8583
  className: "text-sm hover:text-foreground",
8490
- children: ["Powered by ", /* @__PURE__ */ jsx("span", {
8491
- className: "font-bold",
8492
- children: "shiso"
8493
- })]
8584
+ children: [
8585
+ labels.poweredBy,
8586
+ " ",
8587
+ /* @__PURE__ */ jsx("span", {
8588
+ className: "font-bold",
8589
+ children: "shiso"
8590
+ })
8591
+ ]
8494
8592
  }) : /* @__PURE__ */ jsx("span", {}), socials.length > 0 && /* @__PURE__ */ jsx("div", {
8495
8593
  className: "flex items-center gap-1",
8496
8594
  children: socials.map((link) => {
@@ -8794,6 +8892,7 @@ function SheetOverlay({ className, ...props }) {
8794
8892
  });
8795
8893
  }
8796
8894
  function SheetContent({ className, children, side = "right", showCloseButton = true, ...props }) {
8895
+ const labels = useLabels();
8797
8896
  return /* @__PURE__ */ jsxs(SheetPortal, { children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(DialogPopup, {
8798
8897
  "data-slot": "sheet-content",
8799
8898
  "data-side": side,
@@ -8808,7 +8907,7 @@ function SheetContent({ className, children, side = "right", showCloseButton = t
8808
8907
  }),
8809
8908
  children: [/* @__PURE__ */ jsx(X$1, {}), /* @__PURE__ */ jsx("span", {
8810
8909
  className: "sr-only",
8811
- children: "Close"
8910
+ children: labels.close
8812
8911
  })]
8813
8912
  })]
8814
8913
  })] });
@@ -8849,7 +8948,7 @@ function Docs({ page, doc, site }) {
8849
8948
  }), /* @__PURE__ */ jsx(Footer, { footer: site.footer })]
8850
8949
  });
8851
8950
  const operation = getOperation(doc.frontmatter?.openapi);
8852
- const toc = operation ? [...doc.toc || [], ...operationSections(operation)] : doc.toc;
8951
+ const toc = operation ? [...doc.toc || [], ...operationSections(operation, site.labels)] : doc.toc;
8853
8952
  return /* @__PURE__ */ jsx(PanelProvider, { children: /* @__PURE__ */ jsx(DocsBody, {
8854
8953
  page,
8855
8954
  doc,
@@ -9014,38 +9113,44 @@ function StandalonePageView({ page, site }) {
9014
9113
 
9015
9114
  //#endregion
9016
9115
  //#region src/App.tsx
9116
+ const { mermaidSource: _mermaidSource, usePanelContent: _usePanelContent, useSetPanelContent: _useSetPanelContent, ...mdxDocsComponents } = docs_exports;
9017
9117
  const mdxComponents = {
9018
- ...docs_exports,
9118
+ ...mdxDocsComponents,
9019
9119
  img: ZoomableImage,
9020
9120
  pre: CodeBlock
9021
9121
  };
9022
9122
  function App() {
9023
- return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(MDXProvider, {
9024
- components: mdxComponents,
9025
- children: /* @__PURE__ */ jsx(Layout, {
9026
- site: siteModel,
9027
- children: /* @__PURE__ */ jsxs(Routes, { children: [
9028
- standalonePages.map((page) => /* @__PURE__ */ jsx(Route, {
9029
- path: page.path,
9030
- element: /* @__PURE__ */ jsx(StandalonePageView, {
9031
- page,
9032
- site: siteModel
9033
- })
9034
- }, page.path)),
9035
- docsHomeUrl !== "/" && !hasRootStandalonePage ? /* @__PURE__ */ jsx(Route, {
9036
- path: "/",
9037
- element: /* @__PURE__ */ jsx(Navigate, {
9038
- to: docsHomeUrl,
9039
- replace: true
9123
+ const { pathname } = useLocation();
9124
+ const siteModel = getSiteModelByPathname(pathname);
9125
+ return /* @__PURE__ */ jsx(LabelContext.Provider, {
9126
+ value: siteModel.labels,
9127
+ children: /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(MDXProvider, {
9128
+ components: mdxComponents,
9129
+ children: /* @__PURE__ */ jsx(Layout, {
9130
+ site: siteModel,
9131
+ children: /* @__PURE__ */ jsxs(Routes, { children: [
9132
+ standalonePages.map((page) => /* @__PURE__ */ jsx(Route, {
9133
+ path: page.path,
9134
+ element: /* @__PURE__ */ jsx(StandalonePageView, {
9135
+ page,
9136
+ site: siteModel
9137
+ })
9138
+ }, page.path)),
9139
+ docsHomeUrl !== "/" && !hasRootStandalonePage ? /* @__PURE__ */ jsx(Route, {
9140
+ path: "/",
9141
+ element: /* @__PURE__ */ jsx(Navigate, {
9142
+ to: docsHomeUrl,
9143
+ replace: true
9144
+ })
9145
+ }) : null,
9146
+ /* @__PURE__ */ jsx(Route, {
9147
+ path: "*",
9148
+ element: /* @__PURE__ */ jsx(DocPage, { site: siteModel })
9040
9149
  })
9041
- }) : null,
9042
- /* @__PURE__ */ jsx(Route, {
9043
- path: "*",
9044
- element: /* @__PURE__ */ jsx(DocPage, { site: siteModel })
9045
- })
9046
- ] })
9047
- })
9048
- }) });
9150
+ ] })
9151
+ })
9152
+ }) })
9153
+ });
9049
9154
  }
9050
9155
 
9051
9156
  //#endregion