@hanzo/docs-base-ui 16.4.8 → 16.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/css/aspen.css +39 -1
- package/css/black.css +39 -1
- package/css/catppuccin.css +49 -1
- package/css/dusk.css +47 -1
- package/css/emerald.css +39 -1
- package/css/generated/docs.css +455 -0
- package/css/generated/flux.css +419 -0
- package/css/generated/home.css +201 -0
- package/css/generated/notebook.css +492 -0
- package/css/generated/shared.css +1033 -0
- package/css/lib/base.css +217 -0
- package/css/lib/default-colors.css +51 -0
- package/css/lib/shiki.css +90 -0
- package/css/neutral.css +7 -1
- package/css/ocean.css +44 -1
- package/css/preset.css +6 -7
- package/css/purple.css +39 -1
- package/css/ruby.css +39 -1
- package/css/shadcn.css +36 -1
- package/css/solar.css +75 -1
- package/css/vitepress.css +65 -1
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/components/accordion.d.ts +3 -3
- package/dist/components/accordion.d.ts.map +1 -1
- package/dist/components/accordion.js +6 -6
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/banner.d.ts +2 -2
- package/dist/components/banner.d.ts.map +1 -1
- package/dist/components/banner.js +4 -4
- package/dist/components/banner.js.map +1 -1
- package/dist/components/callout.d.ts +5 -5
- package/dist/components/callout.d.ts.map +1 -1
- package/dist/components/callout.js +1 -1
- package/dist/components/callout.js.map +1 -1
- package/dist/components/card.d.ts +3 -3
- package/dist/components/card.d.ts.map +1 -1
- package/dist/components/card.js +2 -2
- package/dist/components/card.js.map +1 -1
- package/dist/components/codeblock.d.ts +7 -7
- package/dist/components/codeblock.d.ts.map +1 -1
- package/dist/components/codeblock.js +7 -7
- package/dist/components/codeblock.js.map +1 -1
- package/dist/components/dialog/search-algolia.d.ts +6 -6
- package/dist/components/dialog/search-algolia.d.ts.map +1 -1
- package/dist/components/dialog/search-algolia.js +7 -7
- package/dist/components/dialog/search-algolia.js.map +1 -1
- package/dist/components/dialog/search-default.d.ts +6 -6
- package/dist/components/dialog/search-default.d.ts.map +1 -1
- package/dist/components/dialog/search-default.js +7 -7
- package/dist/components/dialog/search-default.js.map +1 -1
- package/dist/components/dialog/search-orama.d.ts +6 -6
- package/dist/components/dialog/search-orama.d.ts.map +1 -1
- package/dist/components/dialog/search-orama.js +7 -7
- package/dist/components/dialog/search-orama.js.map +1 -1
- package/dist/components/dialog/search.d.ts +16 -16
- package/dist/components/dialog/search.d.ts.map +1 -1
- package/dist/components/dialog/search.js +19 -27
- package/dist/components/dialog/search.js.map +1 -1
- package/dist/components/dynamic-codeblock.core.d.ts +33 -0
- package/dist/components/dynamic-codeblock.core.d.ts.map +1 -0
- package/dist/components/dynamic-codeblock.core.js +66 -0
- package/dist/components/dynamic-codeblock.core.js.map +1 -0
- package/dist/components/dynamic-codeblock.d.ts +4 -28
- package/dist/components/dynamic-codeblock.d.ts.map +1 -1
- package/dist/components/dynamic-codeblock.js +9 -53
- package/dist/components/dynamic-codeblock.js.map +1 -1
- package/dist/components/files.d.ts.map +1 -1
- package/dist/components/files.js +2 -2
- package/dist/components/files.js.map +1 -1
- package/dist/components/github-info.d.ts +2 -2
- package/dist/components/github-info.d.ts.map +1 -1
- package/dist/components/github-info.js +1 -1
- package/dist/components/github-info.js.map +1 -1
- package/dist/components/heading.d.ts.map +1 -1
- package/dist/components/heading.js +1 -1
- package/dist/components/heading.js.map +1 -1
- package/dist/components/{image-zoom-CtfZieBH.css → image-zoom-DGvp66QF.css} +1 -1
- package/dist/components/{image-zoom-CtfZieBH.css.map → image-zoom-DGvp66QF.css.map} +1 -1
- package/dist/components/image-zoom.d.ts +3 -3
- package/dist/components/image-zoom.d.ts.map +1 -1
- package/dist/components/inline-toc.d.ts +2 -2
- package/dist/components/inline-toc.d.ts.map +1 -1
- package/dist/components/inline-toc.js +1 -1
- package/dist/components/inline-toc.js.map +1 -1
- package/dist/components/sidebar/base.d.ts +16 -16
- package/dist/components/sidebar/base.d.ts.map +1 -1
- package/dist/components/sidebar/base.js +5 -5
- package/dist/components/sidebar/base.js.map +1 -1
- package/dist/components/sidebar/link-item.d.ts +3 -3
- package/dist/components/sidebar/link-item.d.ts.map +1 -1
- package/dist/components/sidebar/link-item.js.map +1 -1
- package/dist/components/sidebar/page-tree.d.ts +2 -2
- package/dist/components/sidebar/page-tree.d.ts.map +1 -1
- package/dist/components/sidebar/page-tree.js +5 -5
- package/dist/components/sidebar/page-tree.js.map +1 -1
- package/dist/components/sidebar/tabs/dropdown.d.ts +3 -3
- package/dist/components/sidebar/tabs/dropdown.d.ts.map +1 -1
- package/dist/components/sidebar/tabs/dropdown.js +19 -19
- package/dist/components/sidebar/tabs/dropdown.js.map +1 -1
- package/dist/components/sidebar/tabs/index.d.ts.map +1 -1
- package/dist/components/steps.d.ts +3 -3
- package/dist/components/steps.d.ts.map +1 -1
- package/dist/components/tabs.d.ts +4 -4
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +2 -2
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/toc/clerk.d.ts +12 -1
- package/dist/components/toc/clerk.d.ts.map +1 -0
- package/dist/components/toc/clerk.js +106 -6
- package/dist/components/toc/clerk.js.map +1 -1
- package/dist/components/toc/default.d.ts +12 -1
- package/dist/components/toc/default.d.ts.map +1 -0
- package/dist/components/toc/default.js +34 -6
- package/dist/components/toc/default.js.map +1 -1
- package/dist/components/toc/index.d.ts +26 -1
- package/dist/components/toc/index.d.ts.map +1 -0
- package/dist/components/toc/index.js +76 -6
- package/dist/components/toc/index.js.map +1 -1
- package/dist/components/type-table.d.ts +2 -2
- package/dist/components/type-table.d.ts.map +1 -1
- package/dist/components/type-table.js +7 -7
- package/dist/components/type-table.js.map +1 -1
- package/dist/components/ui/accordion.d.ts +6 -6
- package/dist/components/ui/accordion.d.ts.map +1 -1
- package/dist/components/ui/accordion.js +1 -1
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/collapsible.d.ts +6 -6
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +1 -1
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/navigation-menu.d.ts +7 -7
- package/dist/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/components/ui/navigation-menu.js +2 -2
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/components/ui/popover.d.ts +3 -3
- package/dist/components/ui/popover.d.ts.map +1 -1
- package/dist/components/ui/popover.js +2 -2
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/scroll-area.d.ts +4 -4
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/scroll-area.js +2 -2
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/tabs.d.ts +7 -7
- package/dist/components/ui/tabs.d.ts.map +1 -1
- package/dist/components/ui/tabs.js +5 -5
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/contexts/i18n.d.ts +60 -1
- package/dist/contexts/i18n.d.ts.map +1 -0
- package/dist/contexts/i18n.js +54 -6
- package/dist/contexts/i18n.js.map +1 -1
- package/dist/contexts/search.d.ts +70 -4
- package/dist/contexts/search.d.ts.map +1 -1
- package/dist/contexts/search.js +62 -6
- package/dist/contexts/search.js.map +1 -1
- package/dist/contexts/tree.d.ts +22 -1
- package/dist/contexts/tree.d.ts.map +1 -0
- package/dist/contexts/tree.js +36 -6
- package/dist/contexts/tree.js.map +1 -1
- package/dist/i18n.d.ts +14 -1
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +19 -2
- package/dist/i18n.js.map +1 -0
- package/dist/layouts/docs/client.d.ts +7 -7
- package/dist/layouts/docs/client.d.ts.map +1 -1
- package/dist/layouts/docs/client.js +4 -4
- package/dist/layouts/docs/client.js.map +1 -1
- package/dist/layouts/docs/index.d.ts +3 -3
- package/dist/layouts/docs/index.d.ts.map +1 -1
- package/dist/layouts/docs/index.js +11 -11
- package/dist/layouts/docs/index.js.map +1 -1
- package/dist/layouts/docs/page/client.d.ts +7 -7
- package/dist/layouts/docs/page/client.d.ts.map +1 -1
- package/dist/layouts/docs/page/client.js +21 -21
- package/dist/layouts/docs/page/client.js.map +1 -1
- package/dist/layouts/docs/page/index.d.ts +5 -5
- package/dist/layouts/docs/page/index.d.ts.map +1 -1
- package/dist/layouts/docs/page/index.js +13 -13
- package/dist/layouts/docs/page/index.js.map +1 -1
- package/dist/layouts/docs/sidebar.d.ts +20 -19
- package/dist/layouts/docs/sidebar.d.ts.map +1 -1
- package/dist/layouts/docs/sidebar.js +6 -6
- package/dist/layouts/docs/sidebar.js.map +1 -1
- package/dist/layouts/flux/index.d.ts +79 -0
- package/dist/layouts/flux/index.d.ts.map +1 -0
- package/dist/layouts/flux/index.js +168 -0
- package/dist/layouts/flux/index.js.map +1 -0
- package/dist/layouts/flux/page/client.d.ts +45 -0
- package/dist/layouts/flux/page/client.d.ts.map +1 -0
- package/dist/layouts/flux/page/client.js +255 -0
- package/dist/layouts/flux/page/client.js.map +1 -0
- package/dist/layouts/flux/page/index.d.ts +98 -0
- package/dist/layouts/flux/page/index.d.ts.map +1 -0
- package/dist/layouts/flux/page/index.js +76 -0
- package/dist/layouts/flux/page/index.js.map +1 -0
- package/dist/layouts/flux/sidebar.d.ts +59 -0
- package/dist/layouts/flux/sidebar.d.ts.map +1 -0
- package/dist/layouts/flux/sidebar.js +197 -0
- package/dist/layouts/flux/sidebar.js.map +1 -0
- package/dist/layouts/flux/tab-dropdown.d.ts +21 -0
- package/dist/layouts/flux/tab-dropdown.d.ts.map +1 -0
- package/dist/layouts/flux/tab-dropdown.js +96 -0
- package/dist/layouts/flux/tab-dropdown.js.map +1 -0
- package/dist/layouts/home/client.d.ts +3 -3
- package/dist/layouts/home/client.d.ts.map +1 -1
- package/dist/layouts/home/client.js +20 -38
- package/dist/layouts/home/client.js.map +1 -1
- package/dist/layouts/home/index.d.ts +2 -2
- package/dist/layouts/home/index.d.ts.map +1 -1
- package/dist/layouts/home/index.js +1 -1
- package/dist/layouts/home/index.js.map +1 -1
- package/dist/layouts/home/navbar.d.ts +6 -6
- package/dist/layouts/home/navbar.d.ts.map +1 -1
- package/dist/layouts/home/navbar.js +2 -2
- package/dist/layouts/home/navbar.js.map +1 -1
- package/dist/layouts/notebook/client.d.ts +9 -9
- package/dist/layouts/notebook/client.d.ts.map +1 -1
- package/dist/layouts/notebook/client.js +8 -8
- package/dist/layouts/notebook/client.js.map +1 -1
- package/dist/layouts/notebook/index.d.ts +2 -2
- package/dist/layouts/notebook/index.d.ts.map +1 -1
- package/dist/layouts/notebook/index.js +18 -18
- package/dist/layouts/notebook/index.js.map +1 -1
- package/dist/layouts/notebook/page/client.d.ts +7 -7
- package/dist/layouts/notebook/page/client.d.ts.map +1 -1
- package/dist/layouts/notebook/page/client.js +21 -21
- package/dist/layouts/notebook/page/client.js.map +1 -1
- package/dist/layouts/notebook/page/index.d.ts +5 -5
- package/dist/layouts/notebook/page/index.d.ts.map +1 -1
- package/dist/layouts/notebook/page/index.js +13 -13
- package/dist/layouts/notebook/page/index.js.map +1 -1
- package/dist/layouts/notebook/sidebar.d.ts +15 -14
- package/dist/layouts/notebook/sidebar.d.ts.map +1 -1
- package/dist/layouts/notebook/sidebar.js +4 -4
- package/dist/layouts/notebook/sidebar.js.map +1 -1
- package/dist/layouts/shared/index.d.ts +13 -6
- package/dist/layouts/shared/index.d.ts.map +1 -1
- package/dist/layouts/shared/index.js +29 -2
- package/dist/layouts/shared/index.js.map +1 -1
- package/dist/layouts/shared/language-toggle.d.ts +2 -2
- package/dist/layouts/shared/language-toggle.d.ts.map +1 -1
- package/dist/layouts/shared/language-toggle.js +4 -4
- package/dist/layouts/shared/language-toggle.js.map +1 -1
- package/dist/layouts/shared/search-toggle.d.ts +3 -3
- package/dist/layouts/shared/search-toggle.d.ts.map +1 -1
- package/dist/layouts/shared/search-toggle.js +6 -6
- package/dist/layouts/shared/search-toggle.js.map +1 -1
- package/dist/layouts/shared/theme-toggle.d.ts +2 -2
- package/dist/layouts/shared/theme-toggle.d.ts.map +1 -1
- package/dist/layouts/shared/theme-toggle.js +7 -7
- package/dist/layouts/shared/theme-toggle.js.map +1 -1
- package/dist/mdx.d.ts +1 -1
- package/dist/mdx.d.ts.map +1 -1
- package/dist/mdx.js +2 -2
- package/dist/mdx.js.map +1 -1
- package/dist/mdx.server.d.ts +0 -1
- package/dist/mdx.server.d.ts.map +1 -1
- package/dist/og.d.ts +23 -1
- package/dist/og.d.ts.map +1 -0
- package/dist/og.js +69 -2
- package/dist/og.js.map +1 -0
- package/dist/page.d.ts +3 -3
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +5 -5
- package/dist/page.js.map +1 -1
- package/dist/provider/base.d.ts +4 -4
- package/dist/provider/base.d.ts.map +1 -1
- package/dist/provider/base.js +3 -3
- package/dist/provider/base.js.map +1 -1
- package/dist/provider/next.d.ts +3 -3
- package/dist/provider/next.d.ts.map +1 -1
- package/dist/provider/react-router.d.ts +3 -3
- package/dist/provider/react-router.d.ts.map +1 -1
- package/dist/provider/tanstack.d.ts +3 -3
- package/dist/provider/tanstack.d.ts.map +1 -1
- package/dist/provider/waku.d.ts +3 -3
- package/dist/provider/waku.d.ts.map +1 -1
- package/dist/style.css +187 -56
- package/dist/utils/cn.js +3 -0
- package/dist/utils/link-item.d.ts +86 -0
- package/dist/utils/link-item.d.ts.map +1 -0
- package/dist/utils/link-item.js +25 -0
- package/dist/utils/link-item.js.map +1 -0
- package/dist/utils/merge-refs.js +13 -0
- package/dist/utils/merge-refs.js.map +1 -0
- package/dist/utils/urls.js +17 -0
- package/dist/utils/urls.js.map +1 -0
- package/dist/utils/use-copy-button.d.ts +7 -1
- package/dist/utils/use-copy-button.d.ts.map +1 -0
- package/dist/utils/use-copy-button.js +29 -2
- package/dist/utils/use-copy-button.js.map +1 -0
- package/dist/utils/use-footer-items.d.ts +10 -1
- package/dist/utils/use-footer-items.d.ts.map +1 -0
- package/dist/utils/use-footer-items.js +27 -2
- package/dist/utils/use-footer-items.js.map +1 -0
- package/dist/utils/use-is-scroll-top.d.ts +9 -1
- package/dist/utils/use-is-scroll-top.d.ts.map +1 -0
- package/dist/utils/use-is-scroll-top.js +23 -2
- package/dist/utils/use-is-scroll-top.js.map +1 -0
- package/package.json +28 -17
- package/css/layouts/docs.css +0 -1
- package/css/layouts/home.css +0 -1
- package/css/layouts/notebook.css +0 -1
- package/dist/_virtual/rolldown_runtime.js +0 -36
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { mergeRefs } from "../../utils/merge-refs.js";
|
|
4
|
+
import { createContext, use, useEffectEvent, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
5
|
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
import { createContext, use, useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
5
6
|
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
6
|
-
import { mergeRefs } from "@hanzo/docs-ui/merge-refs";
|
|
7
7
|
|
|
8
8
|
//#region src/components/ui/tabs.tsx
|
|
9
9
|
const listeners = /* @__PURE__ */ new Map();
|
|
@@ -18,7 +18,7 @@ const TabsTrigger = Tabs$1.Tab;
|
|
|
18
18
|
function Tabs({ ref, groupId, persist = false, updateAnchor = false, defaultValue, value: _value, onValueChange: _onValueChange, ...props }) {
|
|
19
19
|
const tabsRef = useRef(null);
|
|
20
20
|
const valueToIdMap = useMemo(() => /* @__PURE__ */ new Map(), []);
|
|
21
|
-
const [value, setValue] = _value === void 0 ? useState(defaultValue) : [_value,
|
|
21
|
+
const [value, setValue] = _value === void 0 ? useState(defaultValue) : [_value, useEffectEvent((v) => _onValueChange?.(v))];
|
|
22
22
|
useLayoutEffect(() => {
|
|
23
23
|
if (!groupId) return;
|
|
24
24
|
let previous = sessionStorage.getItem(groupId);
|
|
@@ -38,8 +38,8 @@ function Tabs({ ref, groupId, persist = false, updateAnchor = false, defaultValu
|
|
|
38
38
|
useLayoutEffect(() => {
|
|
39
39
|
const hash = window.location.hash.slice(1);
|
|
40
40
|
if (!hash) return;
|
|
41
|
-
for (const [value
|
|
42
|
-
setValue(value
|
|
41
|
+
for (const [value, id] of valueToIdMap.entries()) if (id === hash) {
|
|
42
|
+
setValue(value);
|
|
43
43
|
tabsRef.current?.scrollIntoView();
|
|
44
44
|
break;
|
|
45
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","names":["Primitive"
|
|
1
|
+
{"version":3,"file":"tabs.js","names":["Primitive"],"sources":["../../../src/components/ui/tabs.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentProps,\n createContext,\n use,\n useEffectEvent,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Tabs as Primitive } from '@base-ui/react/tabs';\nimport { mergeRefs } from '@/utils/merge-refs';\n\ntype ChangeListener = (v: string) => void;\nconst listeners = new Map<string, Set<ChangeListener>>();\n\nexport interface TabsProps extends ComponentProps<typeof Primitive.Root> {\n /**\n * Identifier for Sharing value of tabs\n */\n groupId?: string;\n\n /**\n * Enable persistent\n */\n persist?: boolean;\n\n /**\n * If true, updates the URL hash based on the tab's id\n */\n updateAnchor?: boolean;\n\n onValueChange?: (value: string) => void;\n}\n\nconst TabsContext = createContext<{\n valueToIdMap: Map<string, string>;\n} | null>(null);\n\nfunction useTabContext() {\n const ctx = use(TabsContext);\n if (!ctx) throw new Error('You must wrap your component in <Tabs>');\n return ctx;\n}\n\nexport const TabsList = Primitive.List;\n\nexport const TabsTrigger = Primitive.Tab;\n\nexport function Tabs({\n ref,\n groupId,\n persist = false,\n updateAnchor = false,\n defaultValue,\n value: _value,\n onValueChange: _onValueChange,\n ...props\n}: TabsProps) {\n const tabsRef = useRef<HTMLDivElement>(null);\n const valueToIdMap = useMemo(() => new Map<string, string>(), []);\n const [value, setValue] =\n _value === undefined\n ? // eslint-disable-next-line react-hooks/rules-of-hooks -- not supposed to change controlled/uncontrolled\n useState(defaultValue)\n : // eslint-disable-next-line react-hooks/rules-of-hooks -- not supposed to change controlled/uncontrolled\n [_value, useEffectEvent((v: string) => _onValueChange?.(v))];\n\n useLayoutEffect(() => {\n if (!groupId) return;\n let previous = sessionStorage.getItem(groupId);\n if (persist) previous ??= localStorage.getItem(groupId);\n if (previous) setValue(previous);\n\n const groupListeners = listeners.get(groupId) ?? new Set();\n groupListeners.add(setValue);\n listeners.set(groupId, groupListeners);\n return () => {\n groupListeners.delete(setValue);\n };\n }, [groupId, persist, setValue]);\n\n useLayoutEffect(() => {\n const hash = window.location.hash.slice(1);\n if (!hash) return;\n\n for (const [value, id] of valueToIdMap.entries()) {\n if (id === hash) {\n setValue(value);\n tabsRef.current?.scrollIntoView();\n break;\n }\n }\n }, [setValue, valueToIdMap]);\n\n return (\n <Primitive.Root\n ref={mergeRefs(ref, tabsRef)}\n value={value}\n onValueChange={(v: string) => {\n if (updateAnchor) {\n const id = valueToIdMap.get(v);\n\n if (id) {\n window.history.replaceState(null, '', `#${id}`);\n }\n }\n\n if (groupId) {\n const groupListeners = listeners.get(groupId);\n if (groupListeners) {\n for (const listener of groupListeners) listener(v);\n }\n\n sessionStorage.setItem(groupId, v);\n if (persist) localStorage.setItem(groupId, v);\n } else {\n setValue(v);\n }\n }}\n {...props}\n >\n <TabsContext value={useMemo(() => ({ valueToIdMap }), [valueToIdMap])}>\n {props.children}\n </TabsContext>\n </Primitive.Root>\n );\n}\n\nexport function TabsContent({ value, ...props }: ComponentProps<typeof Primitive.Panel>) {\n const { valueToIdMap } = useTabContext();\n\n if (props.id) {\n valueToIdMap.set(value, props.id);\n }\n\n return (\n <Primitive.Panel value={value} {...props}>\n {props.children}\n </Primitive.Panel>\n );\n}\n"],"mappings":";;;;;;;;AAgBA,MAAM,4BAAY,IAAI,KAAkC;AAqBxD,MAAM,cAAc,cAEV,KAAK;AAEf,SAAS,gBAAgB;CACvB,MAAM,MAAM,IAAI,YAAY;AAC5B,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,yCAAyC;AACnE,QAAO;;AAGT,MAAa,WAAWA,OAAU;AAElC,MAAa,cAAcA,OAAU;AAErC,SAAgB,KAAK,EACnB,KACA,SACA,UAAU,OACV,eAAe,OACf,cACA,OAAO,QACP,eAAe,gBACf,GAAG,SACS;CACZ,MAAM,UAAU,OAAuB,KAAK;CAC5C,MAAM,eAAe,8BAAc,IAAI,KAAqB,EAAE,EAAE,CAAC;CACjE,MAAM,CAAC,OAAO,YACZ,WAAW,SAEP,SAAS,aAAa,GAEtB,CAAC,QAAQ,gBAAgB,MAAc,iBAAiB,EAAE,CAAC,CAAC;AAElE,uBAAsB;AACpB,MAAI,CAAC,QAAS;EACd,IAAI,WAAW,eAAe,QAAQ,QAAQ;AAC9C,MAAI,QAAS,cAAa,aAAa,QAAQ,QAAQ;AACvD,MAAI,SAAU,UAAS,SAAS;EAEhC,MAAM,iBAAiB,UAAU,IAAI,QAAQ,oBAAI,IAAI,KAAK;AAC1D,iBAAe,IAAI,SAAS;AAC5B,YAAU,IAAI,SAAS,eAAe;AACtC,eAAa;AACX,kBAAe,OAAO,SAAS;;IAEhC;EAAC;EAAS;EAAS;EAAS,CAAC;AAEhC,uBAAsB;EACpB,MAAM,OAAO,OAAO,SAAS,KAAK,MAAM,EAAE;AAC1C,MAAI,CAAC,KAAM;AAEX,OAAK,MAAM,CAAC,OAAO,OAAO,aAAa,SAAS,CAC9C,KAAI,OAAO,MAAM;AACf,YAAS,MAAM;AACf,WAAQ,SAAS,gBAAgB;AACjC;;IAGH,CAAC,UAAU,aAAa,CAAC;AAE5B,QACE,oBAACA,OAAU;EACT,KAAK,UAAU,KAAK,QAAQ;EACrB;EACP,gBAAgB,MAAc;AAC5B,OAAI,cAAc;IAChB,MAAM,KAAK,aAAa,IAAI,EAAE;AAE9B,QAAI,GACF,QAAO,QAAQ,aAAa,MAAM,IAAI,IAAI,KAAK;;AAInD,OAAI,SAAS;IACX,MAAM,iBAAiB,UAAU,IAAI,QAAQ;AAC7C,QAAI,eACF,MAAK,MAAM,YAAY,eAAgB,UAAS,EAAE;AAGpD,mBAAe,QAAQ,SAAS,EAAE;AAClC,QAAI,QAAS,cAAa,QAAQ,SAAS,EAAE;SAE7C,UAAS,EAAE;;EAGf,GAAI;YAEJ,oBAAC;GAAY,OAAO,eAAe,EAAE,cAAc,GAAG,CAAC,aAAa,CAAC;aAClE,MAAM;IACK;GACC;;AAIrB,SAAgB,YAAY,EAAE,OAAO,GAAG,SAAiD;CACvF,MAAM,EAAE,iBAAiB,eAAe;AAExC,KAAI,MAAM,GACR,cAAa,IAAI,OAAO,MAAM,GAAG;AAGnC,QACE,oBAACA,OAAU;EAAa;EAAO,GAAI;YAChC,MAAM;GACS"}
|
package/dist/contexts/i18n.d.ts
CHANGED
|
@@ -1 +1,60 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/contexts/i18n.d.ts
|
|
5
|
+
interface Translations {
|
|
6
|
+
search: string;
|
|
7
|
+
searchNoResult: string;
|
|
8
|
+
toc: string;
|
|
9
|
+
tocNoHeadings: string;
|
|
10
|
+
lastUpdate: string;
|
|
11
|
+
chooseLanguage: string;
|
|
12
|
+
nextPage: string;
|
|
13
|
+
previousPage: string;
|
|
14
|
+
chooseTheme: string;
|
|
15
|
+
editOnGithub: string;
|
|
16
|
+
}
|
|
17
|
+
interface LocaleItem {
|
|
18
|
+
name: string;
|
|
19
|
+
locale: string;
|
|
20
|
+
}
|
|
21
|
+
interface I18nContextType {
|
|
22
|
+
locale?: string;
|
|
23
|
+
onChange?: (v: string) => void;
|
|
24
|
+
text: Translations;
|
|
25
|
+
locales?: LocaleItem[];
|
|
26
|
+
}
|
|
27
|
+
declare const defaultTranslations: Translations;
|
|
28
|
+
declare function I18nLabel(props: {
|
|
29
|
+
label: keyof Translations;
|
|
30
|
+
}): string;
|
|
31
|
+
declare function useI18n(): I18nContextType;
|
|
32
|
+
interface I18nProviderProps {
|
|
33
|
+
/**
|
|
34
|
+
* Current locale
|
|
35
|
+
*/
|
|
36
|
+
locale: string;
|
|
37
|
+
/**
|
|
38
|
+
* Handle changes to the locale, redirect user when not specified.
|
|
39
|
+
*/
|
|
40
|
+
onLocaleChange?: (v: string) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Translations of current locale
|
|
43
|
+
*/
|
|
44
|
+
translations?: Partial<Translations>;
|
|
45
|
+
/**
|
|
46
|
+
* Available languages
|
|
47
|
+
*/
|
|
48
|
+
locales?: LocaleItem[];
|
|
49
|
+
children?: ReactNode;
|
|
50
|
+
}
|
|
51
|
+
declare function I18nProvider({
|
|
52
|
+
locales,
|
|
53
|
+
locale,
|
|
54
|
+
onLocaleChange,
|
|
55
|
+
children,
|
|
56
|
+
translations
|
|
57
|
+
}: I18nProviderProps): react_jsx_runtime0.JSX.Element;
|
|
58
|
+
//#endregion
|
|
59
|
+
export { I18nLabel, I18nProvider, I18nProviderProps, LocaleItem, Translations, defaultTranslations, useI18n };
|
|
60
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","names":[],"sources":["../../src/contexts/i18n.tsx"],"mappings":";;;;UAIiB,YAAA;EACf,MAAA;EACA,cAAA;EAEA,GAAA;EACA,aAAA;EAEA,UAAA;EACA,cAAA;EACA,QAAA;EACA,YAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,UAGe,UAAA;EACf,IAAA;EACA,MAAA;AAAA;AAAA,UAGQ,eAAA;EACR,MAAA;EACA,QAAA,IAAY,CAAA;EACZ,IAAA,EAAM,YAAA;EACN,OAAA,GAAU,UAAA;AAAA;AAAA,cAGC,mBAAA,EAAqB,YAAA;AAAA,iBAiBlB,SAAA,CAAU,KAAA;EAAS,KAAA,QAAa,YAAA;AAAA;AAAA,iBAMhC,OAAA,CAAA,GAAW,eAAA;AAAA,UAIV,iBAAA;EAjCf;;;EAqCA,MAAA;EAnCM;;;EAwCN,cAAA,IAAkB,CAAA;EAvCE;AAGtB;;EAyCE,YAAA,GAAe,OAAA,CAAQ,YAAA;EAzCS;;AAiBlC;EA6BE,OAAA,GAAU,UAAA;EAEV,QAAA,GAAW,SAAA;AAAA;AAAA,iBAGG,YAAA,CAAA;EACd,OAAA;EACA,MAAA;EACA,cAAA;EACA,QAAA;EACA;AAAA,GACC,iBAAA,GAAiB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
package/dist/contexts/i18n.js
CHANGED
|
@@ -1,12 +1,60 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { createContext, useContext, useMemo, useRef } from "react";
|
|
4
|
+
import { usePathname, useRouter } from "@hanzo/docs-core/framework";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
6
|
|
|
5
7
|
//#region src/contexts/i18n.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
const defaultTranslations = {
|
|
9
|
+
search: "Search",
|
|
10
|
+
searchNoResult: "No results found",
|
|
11
|
+
toc: "On this page",
|
|
12
|
+
tocNoHeadings: "No Headings",
|
|
13
|
+
lastUpdate: "Last updated on",
|
|
14
|
+
chooseLanguage: "Choose a language",
|
|
15
|
+
nextPage: "Next Page",
|
|
16
|
+
previousPage: "Previous Page",
|
|
17
|
+
chooseTheme: "Theme",
|
|
18
|
+
editOnGithub: "Edit on GitHub"
|
|
19
|
+
};
|
|
20
|
+
const I18nContext = createContext({ text: defaultTranslations });
|
|
21
|
+
function I18nLabel(props) {
|
|
22
|
+
const { text } = useI18n();
|
|
23
|
+
return text[props.label];
|
|
24
|
+
}
|
|
25
|
+
function useI18n() {
|
|
26
|
+
return useContext(I18nContext);
|
|
27
|
+
}
|
|
28
|
+
function I18nProvider({ locales = [], locale, onLocaleChange, children, translations }) {
|
|
29
|
+
const router = useRouter();
|
|
30
|
+
const pathname = usePathname();
|
|
31
|
+
const onChange = (value) => {
|
|
32
|
+
if (onLocaleChange) return onLocaleChange(value);
|
|
33
|
+
const segments = pathname.split("/").filter((v) => v.length > 0);
|
|
34
|
+
if (segments[0] !== locale) segments.unshift(value);
|
|
35
|
+
else segments[0] = value;
|
|
36
|
+
router.push(`/${segments.join("/")}`);
|
|
37
|
+
};
|
|
38
|
+
const onChangeRef = useRef(onChange);
|
|
39
|
+
onChangeRef.current = onChange;
|
|
40
|
+
return /* @__PURE__ */ jsx(I18nContext, {
|
|
41
|
+
value: useMemo(() => ({
|
|
42
|
+
locale,
|
|
43
|
+
locales,
|
|
44
|
+
text: {
|
|
45
|
+
...defaultTranslations,
|
|
46
|
+
...translations
|
|
47
|
+
},
|
|
48
|
+
onChange: (v) => onChangeRef.current(v)
|
|
49
|
+
}), [
|
|
50
|
+
locale,
|
|
51
|
+
locales,
|
|
52
|
+
translations
|
|
53
|
+
]),
|
|
54
|
+
children
|
|
55
|
+
});
|
|
56
|
+
}
|
|
9
57
|
|
|
10
58
|
//#endregion
|
|
11
|
-
export {
|
|
59
|
+
export { I18nLabel, I18nProvider, defaultTranslations, useI18n };
|
|
12
60
|
//# sourceMappingURL=i18n.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","names":[],"sources":["../../src/contexts/i18n.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"i18n.js","names":[],"sources":["../../src/contexts/i18n.tsx"],"sourcesContent":["'use client';\nimport { createContext, type ReactNode, useContext, useMemo, useRef } from 'react';\nimport { usePathname, useRouter } from '@hanzo/docs-core/framework';\n\nexport interface Translations {\n search: string;\n searchNoResult: string;\n\n toc: string;\n tocNoHeadings: string;\n\n lastUpdate: string;\n chooseLanguage: string;\n nextPage: string;\n previousPage: string;\n chooseTheme: string;\n editOnGithub: string;\n}\n\nexport interface LocaleItem {\n name: string;\n locale: string;\n}\n\ninterface I18nContextType {\n locale?: string;\n onChange?: (v: string) => void;\n text: Translations;\n locales?: LocaleItem[];\n}\n\nexport const defaultTranslations: Translations = {\n search: 'Search',\n searchNoResult: 'No results found',\n toc: 'On this page',\n tocNoHeadings: 'No Headings',\n lastUpdate: 'Last updated on',\n chooseLanguage: 'Choose a language',\n nextPage: 'Next Page',\n previousPage: 'Previous Page',\n chooseTheme: 'Theme',\n editOnGithub: 'Edit on GitHub',\n};\n\nconst I18nContext = createContext<I18nContextType>({\n text: defaultTranslations,\n});\n\nexport function I18nLabel(props: { label: keyof Translations }): string {\n const { text } = useI18n();\n\n return text[props.label];\n}\n\nexport function useI18n(): I18nContextType {\n return useContext(I18nContext);\n}\n\nexport interface I18nProviderProps {\n /**\n * Current locale\n */\n locale: string;\n\n /**\n * Handle changes to the locale, redirect user when not specified.\n */\n onLocaleChange?: (v: string) => void;\n\n /**\n * Translations of current locale\n */\n translations?: Partial<Translations>;\n\n /**\n * Available languages\n */\n locales?: LocaleItem[];\n\n children?: ReactNode;\n}\n\nexport function I18nProvider({\n locales = [],\n locale,\n onLocaleChange,\n children,\n translations,\n}: I18nProviderProps) {\n const router = useRouter();\n const pathname = usePathname();\n const onChange = (value: string) => {\n if (onLocaleChange) {\n return onLocaleChange(value);\n }\n const segments = pathname.split('/').filter((v) => v.length > 0);\n\n // If locale prefix hidden\n if (segments[0] !== locale) {\n segments.unshift(value);\n } else {\n segments[0] = value;\n }\n\n router.push(`/${segments.join('/')}`);\n };\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n return (\n <I18nContext\n value={useMemo(\n () => ({\n locale,\n locales,\n text: {\n ...defaultTranslations,\n ...translations,\n },\n onChange: (v) => onChangeRef.current(v),\n }),\n [locale, locales, translations],\n )}\n >\n {children}\n </I18nContext>\n );\n}\n"],"mappings":";;;;;;;AA+BA,MAAa,sBAAoC;CAC/C,QAAQ;CACR,gBAAgB;CAChB,KAAK;CACL,eAAe;CACf,YAAY;CACZ,gBAAgB;CAChB,UAAU;CACV,cAAc;CACd,aAAa;CACb,cAAc;CACf;AAED,MAAM,cAAc,cAA+B,EACjD,MAAM,qBACP,CAAC;AAEF,SAAgB,UAAU,OAA8C;CACtE,MAAM,EAAE,SAAS,SAAS;AAE1B,QAAO,KAAK,MAAM;;AAGpB,SAAgB,UAA2B;AACzC,QAAO,WAAW,YAAY;;AA2BhC,SAAgB,aAAa,EAC3B,UAAU,EAAE,EACZ,QACA,gBACA,UACA,gBACoB;CACpB,MAAM,SAAS,WAAW;CAC1B,MAAM,WAAW,aAAa;CAC9B,MAAM,YAAY,UAAkB;AAClC,MAAI,eACF,QAAO,eAAe,MAAM;EAE9B,MAAM,WAAW,SAAS,MAAM,IAAI,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE;AAGhE,MAAI,SAAS,OAAO,OAClB,UAAS,QAAQ,MAAM;MAEvB,UAAS,KAAK;AAGhB,SAAO,KAAK,IAAI,SAAS,KAAK,IAAI,GAAG;;CAEvC,MAAM,cAAc,OAAO,SAAS;AACpC,aAAY,UAAU;AAEtB,QACE,oBAAC;EACC,OAAO,eACE;GACL;GACA;GACA,MAAM;IACJ,GAAG;IACH,GAAG;IACJ;GACD,WAAW,MAAM,YAAY,QAAQ,EAAE;GACxC,GACD;GAAC;GAAQ;GAAS;GAAa,CAChC;EAEA;GACW"}
|
|
@@ -1,8 +1,74 @@
|
|
|
1
|
-
|
|
1
|
+
import { ComponentType, ReactNode } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
3
|
|
|
3
4
|
//#region src/contexts/search.d.ts
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
interface HotKey {
|
|
6
|
+
display: ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* Key code or a function determining whether the key is pressed.
|
|
9
|
+
*/
|
|
10
|
+
key: string | ((e: KeyboardEvent) => boolean);
|
|
11
|
+
}
|
|
12
|
+
interface SharedProps {
|
|
13
|
+
open: boolean;
|
|
14
|
+
onOpenChange: (open: boolean) => void;
|
|
15
|
+
}
|
|
16
|
+
type SearchLink = [name: string, href: string];
|
|
17
|
+
interface TagItem {
|
|
18
|
+
name: string;
|
|
19
|
+
value: string;
|
|
20
|
+
}
|
|
21
|
+
interface SearchProviderProps {
|
|
22
|
+
/**
|
|
23
|
+
* Preload search dialog before opening it
|
|
24
|
+
*
|
|
25
|
+
* @defaultValue `true`
|
|
26
|
+
*/
|
|
27
|
+
preload?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Custom links to be displayed if search is empty
|
|
30
|
+
*/
|
|
31
|
+
links?: SearchLink[];
|
|
32
|
+
/**
|
|
33
|
+
* Hotkeys for triggering search dialog
|
|
34
|
+
*
|
|
35
|
+
* @defaultValue Meta/Ctrl + K
|
|
36
|
+
*/
|
|
37
|
+
hotKey?: HotKey[];
|
|
38
|
+
/**
|
|
39
|
+
* Replace default search dialog, allowing you to use other solutions such as Algolia Search
|
|
40
|
+
*
|
|
41
|
+
* It receives the `open` and `onOpenChange` prop, can be lazy loaded with `next/dynamic`
|
|
42
|
+
*/
|
|
43
|
+
SearchDialog: ComponentType<SharedProps>;
|
|
44
|
+
/**
|
|
45
|
+
* Additional props to the dialog
|
|
46
|
+
*/
|
|
47
|
+
options?: Partial<SharedProps & Record<string, unknown>>;
|
|
48
|
+
children?: ReactNode;
|
|
49
|
+
}
|
|
50
|
+
interface SearchContextType {
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
hotKey: HotKey[];
|
|
53
|
+
setOpenSearch: (value: boolean) => void;
|
|
54
|
+
}
|
|
55
|
+
declare function useSearchContext(): SearchContextType;
|
|
56
|
+
declare function SearchProvider({
|
|
57
|
+
SearchDialog,
|
|
58
|
+
children,
|
|
59
|
+
preload,
|
|
60
|
+
options,
|
|
61
|
+
hotKey,
|
|
62
|
+
links
|
|
63
|
+
}: SearchProviderProps): react_jsx_runtime0.JSX.Element;
|
|
64
|
+
/**
|
|
65
|
+
* Show children only when search is enabled via React Context
|
|
66
|
+
*/
|
|
67
|
+
declare function SearchOnly({
|
|
68
|
+
children
|
|
69
|
+
}: {
|
|
70
|
+
children: ReactNode;
|
|
71
|
+
}): ReactNode;
|
|
6
72
|
//#endregion
|
|
7
|
-
export {
|
|
73
|
+
export { SearchLink, SearchOnly, SearchProvider, SearchProviderProps, SharedProps, TagItem, useSearchContext };
|
|
8
74
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","names":[],"sources":["../../src/contexts/search.tsx"],"
|
|
1
|
+
{"version":3,"file":"search.d.ts","names":[],"sources":["../../src/contexts/search.tsx"],"mappings":";;;;UAaU,MAAA;EACR,OAAA,EAAS,SAAA;;AAHI;;EAQb,GAAA,aAAgB,CAAA,EAAG,aAAA;AAAA;AAAA,UAGJ,WAAA;EACf,IAAA;EACA,YAAA,GAAe,IAAA;AAAA;AAAA,KAGL,UAAA,IAAc,IAAA,UAAc,IAAA;AAAA,UAEvB,OAAA;EACf,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,mBAAA;EAZW;;;;;EAkB1B,OAAA;EAbU;;;EAkBV,KAAA,GAAQ,UAAA;EAlBkC;AAE5C;;;;EAuBE,MAAA,GAAS,MAAA;EAlBM;;;;;EAyBf,YAAA,EAAc,aAAA,CAAc,WAAA;EAAd;;;EAKd,OAAA,GAAU,OAAA,CAAQ,WAAA,GAAc,MAAA;EAEhC,QAAA,GAAW,SAAA;AAAA;AAAA,UAGH,iBAAA;EACR,OAAA;EACA,MAAA,EAAQ,MAAA;EACR,aAAA,GAAgB,KAAA;AAAA;AAAA,iBASF,gBAAA,CAAA,GAAoB,iBAAA;AAAA,iBAgBpB,cAAA,CAAA;EACd,YAAA;EACA,QAAA;EACA,OAAA;EACA,OAAA;EACA,MAAA;EAUA;AAAA,GACC,mBAAA,GAAmB,kBAAA,CAAA,GAAA,CAAA,OAAA;;;;iBA+CN,UAAA,CAAA;EAAa;AAAA;EAAc,QAAA,EAAU,SAAA;AAAA,IAAW,SAAA"}
|
package/dist/contexts/search.js
CHANGED
|
@@ -1,12 +1,68 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { Suspense, createContext, use, useEffect, useEffectEvent, useMemo, useState } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
5
|
|
|
5
6
|
//#region src/contexts/search.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const SearchContext = createContext({
|
|
8
|
+
enabled: false,
|
|
9
|
+
hotKey: [],
|
|
10
|
+
setOpenSearch: () => void 0
|
|
11
|
+
});
|
|
12
|
+
function useSearchContext() {
|
|
13
|
+
return use(SearchContext);
|
|
14
|
+
}
|
|
15
|
+
function MetaOrControl() {
|
|
16
|
+
const [key, setKey] = useState("⌘");
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (window.navigator.userAgent.includes("Windows")) setKey("Ctrl");
|
|
19
|
+
}, []);
|
|
20
|
+
return key;
|
|
21
|
+
}
|
|
22
|
+
function SearchProvider({ SearchDialog, children, preload = true, options, hotKey = [{
|
|
23
|
+
key: (e) => e.metaKey || e.ctrlKey,
|
|
24
|
+
display: /* @__PURE__ */ jsx(MetaOrControl, {})
|
|
25
|
+
}, {
|
|
26
|
+
key: "k",
|
|
27
|
+
display: "K"
|
|
28
|
+
}], links }) {
|
|
29
|
+
const [isOpen, setIsOpen] = useState(preload ? false : void 0);
|
|
30
|
+
const onKeyDown = useEffectEvent((e) => {
|
|
31
|
+
if (hotKey.every((v) => typeof v.key === "string" ? e.key === v.key : v.key(e))) {
|
|
32
|
+
setIsOpen((open) => !open);
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
window.addEventListener("keydown", onKeyDown);
|
|
38
|
+
return () => {
|
|
39
|
+
window.removeEventListener("keydown", onKeyDown);
|
|
40
|
+
};
|
|
41
|
+
}, [hotKey]);
|
|
42
|
+
return /* @__PURE__ */ jsxs(SearchContext, {
|
|
43
|
+
value: useMemo(() => ({
|
|
44
|
+
enabled: true,
|
|
45
|
+
hotKey,
|
|
46
|
+
setOpenSearch: setIsOpen
|
|
47
|
+
}), [hotKey]),
|
|
48
|
+
children: [isOpen !== void 0 && /* @__PURE__ */ jsx(Suspense, {
|
|
49
|
+
fallback: null,
|
|
50
|
+
children: /* @__PURE__ */ jsx(SearchDialog, {
|
|
51
|
+
open: isOpen,
|
|
52
|
+
onOpenChange: setIsOpen,
|
|
53
|
+
links,
|
|
54
|
+
...options
|
|
55
|
+
})
|
|
56
|
+
}), children]
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Show children only when search is enabled via React Context
|
|
61
|
+
*/
|
|
62
|
+
function SearchOnly({ children }) {
|
|
63
|
+
if (useSearchContext().enabled) return children;
|
|
64
|
+
}
|
|
9
65
|
|
|
10
66
|
//#endregion
|
|
11
|
-
export {
|
|
67
|
+
export { SearchOnly, SearchProvider, useSearchContext };
|
|
12
68
|
//# sourceMappingURL=search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","names":[],"sources":["../../src/contexts/search.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"search.js","names":[],"sources":["../../src/contexts/search.tsx"],"sourcesContent":["'use client';\nimport {\n type ComponentType,\n createContext,\n type ReactNode,\n Suspense,\n use,\n useEffect,\n useEffectEvent,\n useMemo,\n useState,\n} from 'react';\n\ninterface HotKey {\n display: ReactNode;\n\n /**\n * Key code or a function determining whether the key is pressed.\n */\n key: string | ((e: KeyboardEvent) => boolean);\n}\n\nexport interface SharedProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport type SearchLink = [name: string, href: string];\n\nexport interface TagItem {\n name: string;\n value: string;\n}\n\nexport interface SearchProviderProps {\n /**\n * Preload search dialog before opening it\n *\n * @defaultValue `true`\n */\n preload?: boolean;\n\n /**\n * Custom links to be displayed if search is empty\n */\n links?: SearchLink[];\n\n /**\n * Hotkeys for triggering search dialog\n *\n * @defaultValue Meta/Ctrl + K\n */\n hotKey?: HotKey[];\n\n /**\n * Replace default search dialog, allowing you to use other solutions such as Algolia Search\n *\n * It receives the `open` and `onOpenChange` prop, can be lazy loaded with `next/dynamic`\n */\n SearchDialog: ComponentType<SharedProps>;\n\n /**\n * Additional props to the dialog\n */\n options?: Partial<SharedProps & Record<string, unknown>>;\n\n children?: ReactNode;\n}\n\ninterface SearchContextType {\n enabled: boolean;\n hotKey: HotKey[];\n setOpenSearch: (value: boolean) => void;\n}\n\nconst SearchContext = createContext<SearchContextType>({\n enabled: false,\n hotKey: [],\n setOpenSearch: () => undefined,\n});\n\nexport function useSearchContext(): SearchContextType {\n return use(SearchContext);\n}\n\nfunction MetaOrControl() {\n const [key, setKey] = useState('⌘');\n\n useEffect(() => {\n const isWindows = window.navigator.userAgent.includes('Windows');\n\n if (isWindows) setKey('Ctrl');\n }, []);\n\n return key;\n}\n\nexport function SearchProvider({\n SearchDialog,\n children,\n preload = true,\n options,\n hotKey = [\n {\n key: (e) => e.metaKey || e.ctrlKey,\n display: <MetaOrControl />,\n },\n {\n key: 'k',\n display: 'K',\n },\n ],\n links,\n}: SearchProviderProps) {\n const [isOpen, setIsOpen] = useState(preload ? false : undefined);\n const onKeyDown = useEffectEvent((e: KeyboardEvent) => {\n if (hotKey.every((v) => (typeof v.key === 'string' ? e.key === v.key : v.key(e)))) {\n setIsOpen((open) => !open);\n e.preventDefault();\n }\n });\n\n useEffect(() => {\n window.addEventListener('keydown', onKeyDown);\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [hotKey]);\n\n return (\n <SearchContext\n value={useMemo(\n () => ({\n enabled: true,\n hotKey,\n setOpenSearch: setIsOpen,\n }),\n [hotKey],\n )}\n >\n {isOpen !== undefined && (\n <Suspense fallback={null}>\n <SearchDialog\n open={isOpen}\n onOpenChange={setIsOpen}\n // @ts-expect-error -- insert prop for official UIs\n links={links}\n {...options}\n />\n </Suspense>\n )}\n\n {children}\n </SearchContext>\n );\n}\n\n/**\n * Show children only when search is enabled via React Context\n */\nexport function SearchOnly({ children }: { children: ReactNode }) {\n const search = useSearchContext();\n\n if (search.enabled) return children;\n}\n"],"mappings":";;;;;;AA2EA,MAAM,gBAAgB,cAAiC;CACrD,SAAS;CACT,QAAQ,EAAE;CACV,qBAAqB;CACtB,CAAC;AAEF,SAAgB,mBAAsC;AACpD,QAAO,IAAI,cAAc;;AAG3B,SAAS,gBAAgB;CACvB,MAAM,CAAC,KAAK,UAAU,SAAS,IAAI;AAEnC,iBAAgB;AAGd,MAFkB,OAAO,UAAU,UAAU,SAAS,UAAU,CAEjD,QAAO,OAAO;IAC5B,EAAE,CAAC;AAEN,QAAO;;AAGT,SAAgB,eAAe,EAC7B,cACA,UACA,UAAU,MACV,SACA,SAAS,CACP;CACE,MAAM,MAAM,EAAE,WAAW,EAAE;CAC3B,SAAS,oBAAC,kBAAgB;CAC3B,EACD;CACE,KAAK;CACL,SAAS;CACV,CACF,EACD,SACsB;CACtB,MAAM,CAAC,QAAQ,aAAa,SAAS,UAAU,QAAQ,OAAU;CACjE,MAAM,YAAY,gBAAgB,MAAqB;AACrD,MAAI,OAAO,OAAO,MAAO,OAAO,EAAE,QAAQ,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAE,EAAE;AACjF,cAAW,SAAS,CAAC,KAAK;AAC1B,KAAE,gBAAgB;;GAEpB;AAEF,iBAAgB;AACd,SAAO,iBAAiB,WAAW,UAAU;AAC7C,eAAa;AACX,UAAO,oBAAoB,WAAW,UAAU;;IAEjD,CAAC,OAAO,CAAC;AAEZ,QACE,qBAAC;EACC,OAAO,eACE;GACL,SAAS;GACT;GACA,eAAe;GAChB,GACD,CAAC,OAAO,CACT;aAEA,WAAW,UACV,oBAAC;GAAS,UAAU;aAClB,oBAAC;IACC,MAAM;IACN,cAAc;IAEP;IACP,GAAI;KACJ;IACO,EAGZ;GACa;;;;;AAOpB,SAAgB,WAAW,EAAE,YAAqC;AAGhE,KAFe,kBAAkB,CAEtB,QAAS,QAAO"}
|
package/dist/contexts/tree.d.ts
CHANGED
|
@@ -1 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
import * as PageTree from "@hanzo/docs-core/page-tree";
|
|
4
|
+
|
|
5
|
+
//#region src/contexts/tree.d.ts
|
|
6
|
+
type MakeRequired<O, K extends keyof O> = Omit<O, K> & Pick<Required<O>, K>;
|
|
7
|
+
interface TreeContextType {
|
|
8
|
+
root: MakeRequired<PageTree.Root | PageTree.Folder, '$id'>;
|
|
9
|
+
full: PageTree.Root;
|
|
10
|
+
}
|
|
11
|
+
declare function TreeContextProvider({
|
|
12
|
+
tree: rawTree,
|
|
13
|
+
children
|
|
14
|
+
}: {
|
|
15
|
+
tree: PageTree.Root;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
18
|
+
declare function useTreePath(): PageTree.Node[];
|
|
19
|
+
declare function useTreeContext(): TreeContextType;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { TreeContextProvider, useTreeContext, useTreePath };
|
|
22
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","names":[],"sources":["../../src/contexts/tree.tsx"],"mappings":";;;;;KAMK,YAAA,oBAAgC,CAAA,IAAK,IAAA,CAAK,CAAA,EAAG,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,CAAA,GAAI,CAAA;AAAA,UAE/D,eAAA;EACR,IAAA,EAAM,YAAA,CAAa,QAAA,CAAS,IAAA,GAAO,QAAA,CAAS,MAAA;EAC5C,IAAA,EAAM,QAAA,CAAS,IAAA;AAAA;AAAA,iBAMD,mBAAA,CAAA;EACd,IAAA,EAAM,OAAA;EACN;AAAA;EAEA,IAAA,EAAM,QAAA,CAAS,IAAA;EACf,QAAA,EAAU,SAAA;AAAA,IACX,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBA0Be,WAAA,CAAA,GAAe,QAAA,CAAS,IAAA;AAAA,iBAIxB,cAAA,CAAA,GAAkB,eAAA"}
|
package/dist/contexts/tree.js
CHANGED
|
@@ -1,12 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { createContext, use, useMemo, useRef } from "react";
|
|
4
|
+
import { usePathname } from "@hanzo/docs-core/framework";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { searchPath } from "@hanzo/docs-core/breadcrumb";
|
|
4
7
|
|
|
5
8
|
//#region src/contexts/tree.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
const TreeContext = createContext(null);
|
|
10
|
+
const PathContext = createContext([]);
|
|
11
|
+
function TreeContextProvider({ tree: rawTree, children }) {
|
|
12
|
+
const nextIdRef = useRef(0);
|
|
13
|
+
const pathname = usePathname();
|
|
14
|
+
const tree = useMemo(() => rawTree, [rawTree.$id ?? rawTree]);
|
|
15
|
+
const path = useMemo(() => {
|
|
16
|
+
return searchPath(tree.children, pathname) ?? (tree.fallback ? searchPath(tree.fallback.children, pathname) : null) ?? [];
|
|
17
|
+
}, [tree, pathname]);
|
|
18
|
+
const root = path.findLast((item) => item.type === "folder" && item.root) ?? tree;
|
|
19
|
+
root.$id ??= String(nextIdRef.current++);
|
|
20
|
+
return /* @__PURE__ */ jsx(TreeContext, {
|
|
21
|
+
value: useMemo(() => ({
|
|
22
|
+
root,
|
|
23
|
+
full: tree
|
|
24
|
+
}), [root, tree]),
|
|
25
|
+
children: /* @__PURE__ */ jsx(PathContext, {
|
|
26
|
+
value: path,
|
|
27
|
+
children
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function useTreePath() {
|
|
32
|
+
return use(PathContext);
|
|
33
|
+
}
|
|
34
|
+
function useTreeContext() {
|
|
35
|
+
const ctx = use(TreeContext);
|
|
36
|
+
if (!ctx) throw new Error("You must wrap this component under <DocsLayout />");
|
|
37
|
+
return ctx;
|
|
38
|
+
}
|
|
9
39
|
|
|
10
40
|
//#endregion
|
|
11
|
-
export {
|
|
41
|
+
export { TreeContextProvider, useTreeContext, useTreePath };
|
|
12
42
|
//# sourceMappingURL=tree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","names":[],"sources":["../../src/contexts/tree.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"tree.js","names":[],"sources":["../../src/contexts/tree.tsx"],"sourcesContent":["'use client';\nimport type * as PageTree from '@hanzo/docs-core/page-tree';\nimport { usePathname } from '@hanzo/docs-core/framework';\nimport { type ReactNode, useMemo, useRef, createContext, use } from 'react';\nimport { searchPath } from '@hanzo/docs-core/breadcrumb';\n\ntype MakeRequired<O, K extends keyof O> = Omit<O, K> & Pick<Required<O>, K>;\n\ninterface TreeContextType {\n root: MakeRequired<PageTree.Root | PageTree.Folder, '$id'>;\n full: PageTree.Root;\n}\n\nconst TreeContext = createContext<TreeContextType | null>(null);\nconst PathContext = createContext<PageTree.Node[]>([]);\n\nexport function TreeContextProvider({\n tree: rawTree,\n children,\n}: {\n tree: PageTree.Root;\n children: ReactNode;\n}) {\n const nextIdRef = useRef(0);\n const pathname = usePathname();\n\n // I found that object-typed props passed from a RSC will be re-constructed, hence breaking all hooks' dependencies\n // using the id here to make sure this never happens\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const tree = useMemo(() => rawTree, [rawTree.$id ?? rawTree]);\n const path = useMemo(() => {\n return (\n searchPath(tree.children, pathname) ??\n (tree.fallback ? searchPath(tree.fallback.children, pathname) : null) ??\n []\n );\n }, [tree, pathname]);\n\n const root = path.findLast((item) => item.type === 'folder' && item.root) ?? tree;\n root.$id ??= String(nextIdRef.current++);\n\n return (\n <TreeContext value={useMemo(() => ({ root, full: tree }) as TreeContextType, [root, tree])}>\n <PathContext value={path}>{children}</PathContext>\n </TreeContext>\n );\n}\n\nexport function useTreePath(): PageTree.Node[] {\n return use(PathContext);\n}\n\nexport function useTreeContext(): TreeContextType {\n const ctx = use(TreeContext);\n\n if (!ctx) throw new Error('You must wrap this component under <DocsLayout />');\n return ctx;\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,cAAc,cAAsC,KAAK;AAC/D,MAAM,cAAc,cAA+B,EAAE,CAAC;AAEtD,SAAgB,oBAAoB,EAClC,MAAM,SACN,YAIC;CACD,MAAM,YAAY,OAAO,EAAE;CAC3B,MAAM,WAAW,aAAa;CAK9B,MAAM,OAAO,cAAc,SAAS,CAAC,QAAQ,OAAO,QAAQ,CAAC;CAC7D,MAAM,OAAO,cAAc;AACzB,SACE,WAAW,KAAK,UAAU,SAAS,KAClC,KAAK,WAAW,WAAW,KAAK,SAAS,UAAU,SAAS,GAAG,SAChE,EAAE;IAEH,CAAC,MAAM,SAAS,CAAC;CAEpB,MAAM,OAAO,KAAK,UAAU,SAAS,KAAK,SAAS,YAAY,KAAK,KAAK,IAAI;AAC7E,MAAK,QAAQ,OAAO,UAAU,UAAU;AAExC,QACE,oBAAC;EAAY,OAAO,eAAe;GAAE;GAAM,MAAM;GAAM,GAAsB,CAAC,MAAM,KAAK,CAAC;YACxF,oBAAC;GAAY,OAAO;GAAO;IAAuB;GACtC;;AAIlB,SAAgB,cAA+B;AAC7C,QAAO,IAAI,YAAY;;AAGzB,SAAgB,iBAAkC;CAChD,MAAM,MAAM,IAAI,YAAY;AAE5B,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,oDAAoD;AAC9E,QAAO"}
|
package/dist/i18n.d.ts
CHANGED
|
@@ -1 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
import { I18nProviderProps, Translations, defaultTranslations } from "./contexts/i18n.js";
|
|
2
|
+
import { I18nConfig } from "@hanzo/docs-core/i18n";
|
|
3
|
+
|
|
4
|
+
//#region src/i18n.d.ts
|
|
5
|
+
declare function defineI18nUI<Languages extends string>(config: I18nConfig<Languages>, options: {
|
|
6
|
+
translations: { [K in Languages]?: Partial<Translations> & {
|
|
7
|
+
displayName?: string;
|
|
8
|
+
} };
|
|
9
|
+
}): {
|
|
10
|
+
provider(locale?: string): I18nProviderProps;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { type I18nProviderProps, type Translations, defaultTranslations, defineI18nUI };
|
|
14
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","names":[],"sources":["../src/i18n.tsx"],"mappings":";;;;iBAMgB,YAAA,0BAAA,CACd,MAAA,EAAQ,UAAA,CAAW,SAAA,GACnB,OAAA;EACE,YAAA,UACQ,SAAA,IAAa,OAAA,CAAQ,YAAA;IAAkB,WAAA;EAAA;AAAA;6BAOI,iBAAA;AAAA"}
|
package/dist/i18n.js
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
import { defaultTranslations } from "./contexts/i18n.js";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
//#region src/i18n.tsx
|
|
4
|
+
function defineI18nUI(config, options) {
|
|
5
|
+
const { translations } = options;
|
|
6
|
+
return { provider(locale = config.defaultLanguage) {
|
|
7
|
+
return {
|
|
8
|
+
locale,
|
|
9
|
+
translations: translations[locale],
|
|
10
|
+
locales: config.languages.map((locale) => ({
|
|
11
|
+
locale,
|
|
12
|
+
name: translations[locale]?.displayName ?? locale
|
|
13
|
+
}))
|
|
14
|
+
};
|
|
15
|
+
} };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { defaultTranslations, defineI18nUI };
|
|
20
|
+
//# sourceMappingURL=i18n.js.map
|
package/dist/i18n.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","names":[],"sources":["../src/i18n.tsx"],"sourcesContent":["import type { I18nProviderProps, Translations } from '@/contexts/i18n';\nimport type { I18nConfig } from '@hanzo/docs-core/i18n';\n\nexport type { I18nProviderProps, Translations };\nexport { defaultTranslations } from './contexts/i18n';\n\nexport function defineI18nUI<Languages extends string>(\n config: I18nConfig<Languages>,\n options: {\n translations: {\n [K in Languages]?: Partial<Translations> & { displayName?: string };\n };\n },\n) {\n const { translations } = options;\n\n return {\n provider(locale: string = config.defaultLanguage): I18nProviderProps {\n return {\n locale,\n translations: translations[locale as Languages],\n locales: config.languages.map((locale) => ({\n locale,\n name: translations[locale]?.displayName ?? locale,\n })),\n };\n },\n };\n}\n"],"mappings":";;;AAMA,SAAgB,aACd,QACA,SAKA;CACA,MAAM,EAAE,iBAAiB;AAEzB,QAAO,EACL,SAAS,SAAiB,OAAO,iBAAoC;AACnE,SAAO;GACL;GACA,cAAc,aAAa;GAC3B,SAAS,OAAO,UAAU,KAAK,YAAY;IACzC;IACA,MAAM,aAAa,SAAS,eAAe;IAC5C,EAAE;GACJ;IAEJ"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { SidebarTab } from "../../components/sidebar/tabs/index.js";
|
|
2
|
-
import * as
|
|
3
|
-
import * as react17 from "react";
|
|
2
|
+
import * as react from "react";
|
|
4
3
|
import { ComponentProps, ReactNode } from "react";
|
|
4
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
|
|
6
6
|
//#region src/layouts/docs/client.d.ts
|
|
7
|
-
declare const LayoutContext:
|
|
7
|
+
declare const LayoutContext: react.Context<{
|
|
8
8
|
isNavTransparent: boolean;
|
|
9
9
|
} | null>;
|
|
10
10
|
declare function LayoutContextProvider({
|
|
@@ -13,20 +13,20 @@ declare function LayoutContextProvider({
|
|
|
13
13
|
}: {
|
|
14
14
|
navTransparentMode?: 'always' | 'top' | 'none';
|
|
15
15
|
children: ReactNode;
|
|
16
|
-
}):
|
|
17
|
-
declare function LayoutHeader(props: ComponentProps<'header'>):
|
|
16
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
17
|
+
declare function LayoutHeader(props: ComponentProps<'header'>): react_jsx_runtime0.JSX.Element;
|
|
18
18
|
declare function LayoutBody({
|
|
19
19
|
className,
|
|
20
20
|
style,
|
|
21
21
|
children,
|
|
22
22
|
...props
|
|
23
|
-
}: ComponentProps<'div'>):
|
|
23
|
+
}: ComponentProps<'div'>): react_jsx_runtime0.JSX.Element;
|
|
24
24
|
declare function LayoutTabs({
|
|
25
25
|
options,
|
|
26
26
|
...props
|
|
27
27
|
}: ComponentProps<'div'> & {
|
|
28
28
|
options: SidebarTab[];
|
|
29
|
-
}):
|
|
29
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
30
30
|
//#endregion
|
|
31
31
|
export { LayoutBody, LayoutContext, LayoutContextProvider, LayoutHeader, LayoutTabs };
|
|
32
32
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"
|
|
1
|
+
{"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"mappings":";;;;;;cAWa,aAAA,EAEE,KAAA,CAFW,OAAA;EAAA,gBAAA;AAAA;AAAA,iBAIV,qBAAA,CAAA;EACd,kBAAA;EACA;AAAA;EAEA,kBAAA;EACA,QAAA,EAAU,SAAA;AAAA,IACX,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAkBe,YAAA,CAAa,KAAA,EAAO,cAAA,aAAwB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAU5C,UAAA,CAAA;EAAa,SAAA;EAAW,KAAA;EAAO,QAAA;EAAA,GAAa;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBA8B1E,UAAA,CAAA;EACd,OAAA;EAAA,GACG;AAAA,GACF,cAAA;EACD,OAAA,EAAS,UAAA;AAAA,IACV,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { cn } from "../../utils/cn.js";
|
|
3
4
|
import { useSidebar } from "../../components/sidebar/base.js";
|
|
4
5
|
import { isTabActive } from "../../components/sidebar/tabs/dropdown.js";
|
|
5
|
-
import
|
|
6
|
+
import { useIsScrollTop } from "../../utils/use-is-scroll-top.js";
|
|
7
|
+
import { createContext, use, useMemo } from "react";
|
|
6
8
|
import { usePathname } from "@hanzo/docs-core/framework";
|
|
7
|
-
import { cn } from "@hanzo/docs-ui/cn";
|
|
8
9
|
import { jsx } from "react/jsx-runtime";
|
|
9
|
-
import
|
|
10
|
-
import { useIsScrollTop } from "@hanzo/docs-radix-ui/hooks/use-is-scroll-top";
|
|
10
|
+
import Link from "@hanzo/docs-core/link";
|
|
11
11
|
|
|
12
12
|
//#region src/layouts/docs/client.tsx
|
|
13
13
|
const LayoutContext = createContext(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentProps, createContext, type ReactNode, use, useMemo } from 'react';\nimport { cn } from '
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/docs/client.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentProps, createContext, type ReactNode, use, useMemo } from 'react';\nimport { cn } from '@/utils/cn';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { usePathname } from '@hanzo/docs-core/framework';\nimport { isTabActive } from '@/components/sidebar/tabs/dropdown';\nimport Link from '@hanzo/docs-core/link';\nimport type { SidebarTab } from '@/components/sidebar/tabs';\nimport { useIsScrollTop } from '@/utils/use-is-scroll-top';\n\nexport const LayoutContext = createContext<{\n isNavTransparent: boolean;\n} | null>(null);\n\nexport function LayoutContextProvider({\n navTransparentMode = 'none',\n children,\n}: {\n navTransparentMode?: 'always' | 'top' | 'none';\n children: ReactNode;\n}) {\n const isTop = useIsScrollTop({ enabled: navTransparentMode === 'top' }) ?? true;\n const isNavTransparent = navTransparentMode === 'top' ? isTop : navTransparentMode === 'always';\n\n return (\n <LayoutContext\n value={useMemo(\n () => ({\n isNavTransparent,\n }),\n [isNavTransparent],\n )}\n >\n {children}\n </LayoutContext>\n );\n}\n\nexport function LayoutHeader(props: ComponentProps<'header'>) {\n const { isNavTransparent } = use(LayoutContext)!;\n\n return (\n <header data-transparent={isNavTransparent} {...props}>\n {props.children}\n </header>\n );\n}\n\nexport function LayoutBody({ className, style, children, ...props }: ComponentProps<'div'>) {\n const { collapsed } = useSidebar();\n\n return (\n <div\n id=\"nd-docs-layout\"\n className={cn(\n 'grid transition-[grid-template-columns] overflow-x-clip min-h-(--fd-docs-height) auto-cols-auto auto-rows-auto [--fd-docs-height:100dvh] [--fd-header-height:0px] [--fd-toc-popover-height:0px] [--fd-sidebar-width:0px] [--fd-toc-width:0px]',\n className,\n )}\n data-sidebar-collapsed={collapsed}\n style={\n {\n gridTemplate: `\"sidebar header toc\"\n \"sidebar toc-popover toc\"\n \"sidebar main toc\" 1fr / minmax(var(--fd-sidebar-col), 1fr) minmax(0, calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-width) - var(--fd-toc-width))) minmax(min-content, 1fr)`,\n '--fd-docs-row-1': 'var(--fd-banner-height, 0px)',\n '--fd-docs-row-2': 'calc(var(--fd-docs-row-1) + var(--fd-header-height))',\n '--fd-docs-row-3': 'calc(var(--fd-docs-row-2) + var(--fd-toc-popover-height))',\n '--fd-sidebar-col': collapsed ? '0px' : 'var(--fd-sidebar-width)',\n ...style,\n } as object\n }\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function LayoutTabs({\n options,\n ...props\n}: ComponentProps<'div'> & {\n options: SidebarTab[];\n}) {\n const pathname = usePathname();\n const selected = useMemo(() => {\n return options.findLast((option) => isTabActive(option, pathname));\n }, [options, pathname]);\n\n return (\n <div\n {...props}\n className={cn(\n 'flex flex-row items-end gap-6 overflow-auto [grid-area:main]',\n props.className,\n )}\n >\n {options.map((option, i) => (\n <Link\n key={i}\n href={option.url}\n className={cn(\n 'inline-flex border-b-2 border-transparent transition-colors items-center pb-1.5 font-medium gap-2 text-fd-muted-foreground text-sm text-nowrap hover:text-fd-accent-foreground',\n option.unlisted && selected !== option && 'hidden',\n selected === option && 'border-fd-primary text-fd-primary',\n )}\n >\n {option.title}\n </Link>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,gBAAgB,cAEnB,KAAK;AAEf,SAAgB,sBAAsB,EACpC,qBAAqB,QACrB,YAIC;CACD,MAAM,QAAQ,eAAe,EAAE,SAAS,uBAAuB,OAAO,CAAC,IAAI;CAC3E,MAAM,mBAAmB,uBAAuB,QAAQ,QAAQ,uBAAuB;AAEvF,QACE,oBAAC;EACC,OAAO,eACE,EACL,kBACD,GACD,CAAC,iBAAiB,CACnB;EAEA;GACa;;AAIpB,SAAgB,aAAa,OAAiC;CAC5D,MAAM,EAAE,qBAAqB,IAAI,cAAc;AAE/C,QACE,oBAAC;EAAO,oBAAkB;EAAkB,GAAI;YAC7C,MAAM;GACA;;AAIb,SAAgB,WAAW,EAAE,WAAW,OAAO,UAAU,GAAG,SAAgC;CAC1F,MAAM,EAAE,cAAc,YAAY;AAElC,QACE,oBAAC;EACC,IAAG;EACH,WAAW,GACT,iPACA,UACD;EACD,0BAAwB;EACxB,OACE;GACE,cAAc;;;GAGd,mBAAmB;GACnB,mBAAmB;GACnB,mBAAmB;GACnB,oBAAoB,YAAY,QAAQ;GACxC,GAAG;GACJ;EAEH,GAAI;EAEH;GACG;;AAIV,SAAgB,WAAW,EACzB,SACA,GAAG,SAGF;CACD,MAAM,WAAW,aAAa;CAC9B,MAAM,WAAW,cAAc;AAC7B,SAAO,QAAQ,UAAU,WAAW,YAAY,QAAQ,SAAS,CAAC;IACjE,CAAC,SAAS,SAAS,CAAC;AAEvB,QACE,oBAAC;EACC,GAAI;EACJ,WAAW,GACT,gEACA,MAAM,UACP;YAEA,QAAQ,KAAK,QAAQ,MACpB,oBAAC;GAEC,MAAM,OAAO;GACb,WAAW,GACT,kLACA,OAAO,YAAY,aAAa,UAAU,UAC1C,aAAa,UAAU,oCACxB;aAEA,OAAO;KARH,EASA,CACP;GACE"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { SidebarPageTreeComponents } from "../../components/sidebar/page-tree.js";
|
|
2
2
|
import { GetSidebarTabsOptions } from "../../components/sidebar/tabs/index.js";
|
|
3
3
|
import { SidebarTabWithProps } from "../../components/sidebar/tabs/dropdown.js";
|
|
4
|
-
import { Sidebar } from "./sidebar.js";
|
|
5
4
|
import { BaseLayoutProps } from "../shared/index.js";
|
|
6
|
-
import
|
|
5
|
+
import { Sidebar } from "./sidebar.js";
|
|
7
6
|
import { ComponentProps, HTMLAttributes, ReactNode } from "react";
|
|
7
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
8
8
|
import * as PageTree from "@hanzo/docs-core/page-tree";
|
|
9
9
|
|
|
10
10
|
//#region src/layouts/docs/index.d.ts
|
|
@@ -53,7 +53,7 @@ declare function DocsLayout({
|
|
|
53
53
|
children,
|
|
54
54
|
tree,
|
|
55
55
|
...props
|
|
56
|
-
}: DocsLayoutProps):
|
|
56
|
+
}: DocsLayoutProps): react_jsx_runtime0.JSX.Element;
|
|
57
57
|
//#endregion
|
|
58
58
|
export { DocsLayout, DocsLayoutProps };
|
|
59
59
|
//# sourceMappingURL=index.d.ts.map
|