@xyd-js/framework 0.1.0-xyd.7 → 0.1.0-xyd.73
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/LICENSE +21 -0
- package/dist/Sidebar-CdavG0uc.d.ts +23 -0
- package/dist/hydration.d.ts +9 -3
- package/dist/hydration.js +189 -191
- package/dist/hydration.js.map +1 -1
- package/dist/index.d.ts +22 -4
- package/dist/index.js +34 -15
- package/dist/index.js.map +1 -1
- package/dist/react.d.ts +49 -9
- package/dist/react.js +446 -528
- package/dist/react.js.map +1 -1
- package/package.json +19 -16
- package/dist/hydration.d.mts +0 -11
- package/dist/hydration.mjs +0 -245
- package/dist/hydration.mjs.map +0 -1
- package/dist/index.d.mts +0 -6
- package/dist/index.mjs +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/react.d.mts +0 -32
- package/dist/react.mjs +0 -651
- package/dist/react.mjs.map +0 -1
- package/dist/sidebar-Dwf54qYp.d.mts +0 -15
- package/dist/sidebar-Dwf54qYp.d.ts +0 -15
- package/packages/hydration/README.md +0 -3
- package/packages/hydration/index.ts +0 -3
- package/packages/hydration/settings-to-props.ts +0 -325
- package/packages/react/README.md +0 -3
- package/packages/react/components/index.tsx +0 -337
- package/packages/react/components/sidebar/index.ts +0 -3
- package/packages/react/components/sidebar/sidebar-group.tsx +0 -240
- package/packages/react/components/sidebar/sidebar.tsx +0 -127
- package/packages/react/contexts/framework.tsx +0 -78
- package/packages/react/contexts/index.ts +0 -2
- package/packages/react/contexts/ui.tsx +0 -6
- package/packages/react/hooks/index.ts +0 -3
- package/packages/react/hooks/useMatchedNav.tsx +0 -29
- package/packages/react/index.ts +0 -12
- package/packages/react/utils/manualHydration.ts +0 -25
- package/packages/theme/context.tsx +0 -19
- package/packages/theme/index.ts +0 -0
- package/postcss.config.cjs +0 -5
- package/src/index.ts +0 -1
- package/src/types.ts +0 -5
- package/tsconfig.json +0 -45
- package/tsup.config.ts +0 -28
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/react/index.ts","../packages/react/components/index.tsx","../packages/react/contexts/framework.tsx","../packages/react/components/sidebar/sidebar-group.tsx","../packages/react/contexts/ui.tsx","../packages/react/components/sidebar/sidebar.tsx","../packages/react/utils/manualHydration.ts","../packages/react/hooks/useMatchedNav.tsx"],"sourcesContent":["export * from \"./components\"\n\nexport {Framework} from \"./contexts\"\nexport type {FrameworkProps} from \"./contexts\"\n\nexport {\n useMatchedSubNav\n} from \"./hooks\"\n\nexport type {\n FwSidebarGroupProps\n} from \"./components/sidebar/sidebar\"","import React, {isValidElement} from \"react\";\nimport {useLocation} from \"react-router\";\n\nimport {Toc, SubNav, UISidebar} from \"@xyd-js/ui\"\nimport type {ITOC} from \"@xyd-js/ui\";\nimport {Breadcrumbs, NavLinks} from \"@xyd-js/components/writer\";\n\nimport {useBreadcrumbs, useNavLinks, useSettings, useSidebarGroups, useToC} from \"../contexts\";\nimport {FwSidebarItemGroup, FwSidebarGroupContext, FwSidebarItemProps} from \"./sidebar\";\nimport {Nav} from \"@xyd-js/ui\";\n\nimport {manualHydration} from \"../utils/manualHydration\";\nimport {useMatchedSubNav} from \"../hooks\";\n\nfunction FwNavLogo() {\n const settings = useSettings()\n\n const logo = isValidElement(settings?.styling?.logo) ? settings?.styling?.logo : manualHydration(settings?.styling?.logo)\n\n // TODO: configurable url?\n return <a href=\"/\">\n {logo}\n </a>\n}\n\nfunction FwNav({kind}: { kind?: \"middle\" }) {\n const matchedSubnav = useMatchedSubNav()\n const location = useLocation()\n\n const settings = useSettings()\n\n const headers = matchedSubnav ? matchedSubnav?.items : settings?.structure?.header\n const active = headers?.find(item => location.pathname.startsWith(item.url || \"\"))\n\n return <Nav\n value={active?.url || \"\"}\n kind={kind}\n logo={<FwNavLogo/>}\n onChange={() => {\n }}\n >\n {\n settings?.structure?.header?.map((item, index) => {\n return <Nav.Item\n key={index + (item.url || \"\") + item.name}\n href={item?.url || \"\"}\n value={item.url}\n >\n {item.name}\n </Nav.Item>\n })\n }\n </Nav>\n}\n\nfunction FwSubNav() {\n const matchedSubnav = useMatchedSubNav()\n const location = useLocation()\n\n if (!matchedSubnav) {\n return null\n }\n\n // TODO: in the future routing props from settings like {match: \"/docs/api/browser\"}\n const active = matchedSubnav?.items.findLast(item => location.pathname.startsWith(item.url || \"\"))\n\n // TODO: value\n return <SubNav\n title={matchedSubnav?.name || \"\"}\n value={active?.url || \"\"}\n onChange={() => {\n }}\n >\n {matchedSubnav?.items.map((item, index) => {\n return <SubNav.Item value={item.url || \"\"} href={item.url}>\n {item.name}\n </SubNav.Item>\n })}\n </SubNav>\n\n}\n\nexport interface FwSidebarGroupsProps {\n onePathBehaviour?: boolean\n clientSideRouting?: boolean\n}\n\nfunction recursiveSearch(items: FwSidebarItemProps[], href: string, levels: any[] = []) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n\n if (item.href === href) {\n return [...levels, i]\n }\n\n if (item.items) {\n const result = recursiveSearch(item.items, href, [...levels, i])\n if (result) {\n return result\n }\n }\n }\n return null\n}\n\nfunction FwSidebarGroups(props: FwSidebarGroupsProps) {\n const groups = useSidebarGroups()\n\n const settings = useSettings()\n\n const footerItems = settings.structure?.anchors?.bottom?.map(anchor => {\n let icon\n\n // TODO: refactor this !!!\n if (typeof anchor.icon === \"string\") {\n switch (anchor.icon) {\n case \"icon-cookbook\": {\n icon = <IconCookbook/>\n break\n }\n\n case \"icon-community\": {\n icon = <IconCommunity/>\n break\n }\n\n case \"icon-marketplace\": {\n icon = <IconMarketplace/>\n break\n }\n\n case \"icon-sdk\": {\n icon = <IconSDK/>\n break\n }\n\n default: {\n icon = null\n }\n }\n } else {\n icon = isValidElement(anchor.icon) ? anchor.icon : manualHydration(anchor.icon)\n }\n\n return <UISidebar.FooterItem href={anchor.url} icon={icon}>\n {anchor.name}\n </UISidebar.FooterItem>\n })\n\n const location = useLocation()\n const initialActiveItems: any[] = []\n groups.forEach(group => {\n const activeLevels = recursiveSearch(group.items, location.pathname) || []\n\n activeLevels.reduce((acc, index) => {\n initialActiveItems.push(acc[index])\n acc[index].active = true\n return acc[index].items\n }, group.items)\n\n return group\n })\n\n return <FwSidebarGroupContext\n onePathBehaviour={props.onePathBehaviour}\n clientSideRouting={props.clientSideRouting}\n initialActiveItems={initialActiveItems}\n >\n <UISidebar footerItems={footerItems && footerItems}>\n {\n groups?.map((group, index) => <FwSidebarItemGroup\n key={index + group.group}\n {...group}\n />)\n }\n </UISidebar>\n </FwSidebarGroupContext>\n}\n\ntype FlatTOC = {\n depth: number\n value: string\n}\n\nfunction FwToc() {\n const toc = useToC()\n\n if (!toc) {\n return null\n }\n\n const flatToc: FlatTOC[] = []\n\n const flatten = (toc?: ITOC[]) => {\n if (!toc) {\n return\n }\n\n toc.forEach(item => {\n flatToc.push({\n depth: item.depth,\n value: item.value\n })\n\n flatten(item.children)\n })\n }\n\n flatten(toc)\n\n // TODO: its temporary\n const tocFinal = flatToc.filter(item => item.depth === 2)\n\n const location = useLocation()\n\n // TODO: better in the future\n const defaultValue = location.hash ? location.hash.replace(\"#\", \"\") : tocFinal[0]?.value\n\n return <Toc defaultValue={defaultValue}>\n {\n tocFinal.map((item, index) => <Toc.Item\n key={index + item.value + item.depth}\n value={item.value}\n >\n {item.value}\n </Toc.Item>)\n }\n </Toc>\n}\n\n// TODO: finish\nfunction FwBreadcrumbs() {\n const breadcrumbs = useBreadcrumbs()\n\n return <Breadcrumbs\n items={breadcrumbs || []}\n />\n}\n\n// TDOO: finish\nfunction FwNavLinks() {\n const navlinks = useNavLinks()\n\n // TODO: in the future - because of custom react frontmatter\n if (typeof navlinks?.prev?.title !== \"string\" || typeof navlinks?.next?.title !== \"string\") {\n return null\n }\n\n if (navlinks?.prev || navlinks?.next) {\n return <NavLinks\n prev={navlinks.prev}\n next={navlinks.next}\n />\n }\n\n return null\n}\n\n// TODO: issues with below svgs inside settigns - REFACTOR THIS\nfunction IconCookbook() {\n return <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n height=\"1em\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M14.447 7.106a1 1 0 0 1 .447 1.341l-4 8a1 1 0 1 1-1.788-.894l4-8a1 1 0 0 1 1.341-.447ZM6.6 7.2a1 1 0 0 1 .2 1.4L4.25 12l2.55 3.4a1 1 0 0 1-1.6 1.2l-3-4a1 1 0 0 1 0-1.2l3-4a1 1 0 0 1 1.4-.2Zm10.8 0a1 1 0 0 1 1.4.2l3 4a1 1 0 0 1 0 1.2l-3 4a1 1 0 0 1-1.6-1.2l2.55-3.4-2.55-3.4a1 1 0 0 1 .2-1.4Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n}\n\nfunction IconCommunity() {\n return <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n height=\"1em\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10.5 8.5a1.5 1.5 0 1 1 3 0 1.5 1.5 0 0 1-3 0ZM12 5a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7ZM3 9.5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm1-3a3 3 0 1 0 0 6 3 3 0 0 0 0-6Zm16 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 1a3 3 0 1 1 6 0 3 3 0 0 1-6 0ZM8 18c0-.974.438-1.684 1.142-2.185C9.876 15.293 10.911 15 12 15c1.09 0 2.124.293 2.858.815.704.5 1.142 1.21 1.142 2.185a1 1 0 1 0 2 0c0-1.692-.812-2.982-1.983-3.815C14.876 13.373 13.411 13 12 13c-1.41 0-2.876.373-4.017 1.185C6.812 15.018 6 16.308 6 18a1 1 0 1 0 2 0Zm-3.016-3.675a1 1 0 0 1-.809 1.16C2.79 15.732 2 16.486 2 17.5a1 1 0 1 1-2 0c0-2.41 1.978-3.655 3.825-3.985a1 1 0 0 1 1.16.81Zm14.84 1.16a1 1 0 1 1 .351-1.97C22.022 13.845 24 15.09 24 17.5a1 1 0 1 1-2 0c0-1.014-.79-1.768-2.175-2.015Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n}\n\n// TODO: but this svg works on settings\nfunction IconMarketplace() {\n return <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n width=\"1em\"\n height=\"1em\"\n >\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M3.78163 3.28449C3.8768 2.96725 4.16879 2.75 4.5 2.75H19.5C19.8312 2.75 20.1232 2.96725 20.2184 3.28449L21.7184 8.28449C21.7393 8.3544 21.75 8.42701 21.75 8.5C21.75 10.5711 20.0711 12.25 18 12.25C16.7733 12.25 15.6842 11.661 15 10.7504C14.3158 11.661 13.2267 12.25 12 12.25C10.7733 12.25 9.68417 11.661 9 10.7504C8.31583 11.661 7.2267 12.25 6 12.25C3.92893 12.25 2.25 10.5711 2.25 8.5C2.25 8.42701 2.26066 8.3544 2.28163 8.28449L3.78163 3.28449ZM9.75 8.5C9.75 9.74264 10.7574 10.75 12 10.75C13.2426 10.75 14.25 9.74264 14.25 8.5C14.25 8.08579 14.5858 7.75 15 7.75C15.4142 7.75 15.75 8.08579 15.75 8.5C15.75 9.74264 16.7574 10.75 18 10.75C19.2083 10.75 20.1942 9.79754 20.2477 8.60244L18.942 4.25H5.05802L3.75229 8.60244C3.80584 9.79753 4.79169 10.75 6 10.75C7.24264 10.75 8.25 9.74264 8.25 8.5C8.25 8.08579 8.58579 7.75 9 7.75C9.41421 7.75 9.75 8.08579 9.75 8.5Z\"\n />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M4 10.25C4.41421 10.25 4.75 10.5858 4.75 11V19.75H6.5C6.91421 19.75 7.25 20.0858 7.25 20.5C7.25 20.9142 6.91421 21.25 6.5 21.25H4C3.58579 21.25 3.25 20.9142 3.25 20.5V11C3.25 10.5858 3.58579 10.25 4 10.25ZM20 10.25C20.4142 10.25 20.75 10.5858 20.75 11V20.5C20.75 20.9142 20.4142 21.25 20 21.25H10.5C10.0858 21.25 9.75 20.9142 9.75 20.5C9.75 20.0858 10.0858 19.75 10.5 19.75H19.25V11C19.25 10.5858 19.5858 10.25 20 10.25Z\"\n />\n <path\n d=\"M12.003 19C11.31 18.9996 10.6384 18.7598 10.102 18.3213C9.56564 17.8829 9.19745 17.2726 9.05983 16.594C8.92222 15.9154 9.02364 15.2101 9.34693 14.5976C9.67022 13.9852 10.1955 13.5032 10.8337 13.2333C11.5673 12.9262 12.393 12.9221 13.1296 13.2222C13.8661 13.5222 14.4536 14.1018 14.7631 14.8338C15.0727 15.5659 15.0791 16.3907 14.7808 17.1274C14.4827 17.8642 13.9042 18.4527 13.1724 18.7641C12.8025 18.9205 12.4047 19.0007 12.003 19ZM11.1458 14.7215C11.1124 14.7215 11.0803 14.7348 11.0567 14.7584C11.0331 14.782 11.0198 14.8141 11.0198 14.8475V17.1923C11.0198 17.2258 11.0331 17.2578 11.0567 17.2814C11.0803 17.305 11.1124 17.3183 11.1458 17.3183C11.1671 17.3183 11.188 17.3128 11.2065 17.3024L13.3399 16.13C13.3597 16.1192 13.3761 16.1032 13.3876 16.0838C13.3991 16.0644 13.4052 16.0423 13.4052 16.0197C13.4052 15.9972 13.3991 15.9751 13.3876 15.9557C13.3761 15.9362 13.3597 15.9203 13.3399 15.9094L11.2063 14.7373C11.1879 14.727 11.1671 14.7215 11.1458 14.7215Z\"\n />\n </svg>\n}\n\nfunction IconSDK() {\n return <svg\n viewBox=\"0 0 15 15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n >\n <path\n d=\"M7.28856 0.796908C7.42258 0.734364 7.57742 0.734364 7.71144 0.796908L13.7114 3.59691C13.8875 3.67906 14 3.85574 14 4.05V10.95C14 11.1443 13.8875 11.3209 13.7114 11.4031L7.71144 14.2031C7.57742 14.2656 7.42258 14.2656 7.28856 14.2031L1.28856 11.4031C1.11252 11.3209 1 11.1443 1 10.95V4.05C1 3.85574 1.11252 3.67906 1.28856 3.59691L7.28856 0.796908ZM2 4.80578L7 6.93078V12.9649L2 10.6316V4.80578ZM8 12.9649L13 10.6316V4.80578L8 6.93078V12.9649ZM7.5 6.05672L12.2719 4.02866L7.5 1.80176L2.72809 4.02866L7.5 6.05672Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n}\n\nexport {\n FwNav,\n FwSubNav,\n\n FwBreadcrumbs,\n FwToc,\n FwNavLinks,\n\n FwSidebarGroups,\n}\n","import React, {createContext, useContext} from \"react\";\n\nimport {Settings} from \"@xyd-js/core\";\nimport type {ITOC, IBreadcrumb, INavLinks} from \"@xyd-js/ui\";\n\nimport {FwSidebarGroupProps} from \"../components/sidebar\";\n\nexport interface IFramework {\n settings: Settings\n\n sidebarGroups: FwSidebarGroupProps[]\n\n toc?: ITOC[]\n\n breadcrumbs?: IBreadcrumb[]\n\n navlinks?: INavLinks\n}\n\n// TODO: page context + app context?\nconst framework: IFramework = {\n settings: {},\n sidebarGroups: []\n}\nconst FrameworkContext = createContext<IFramework>(framework)\n\nexport interface FrameworkProps {\n children: React.ReactNode\n\n settings: Settings,\n sidebarGroups: FwSidebarGroupProps[],\n toc?: ITOC[],\n breadcrumbs?: IBreadcrumb[],\n navlinks?: INavLinks\n}\n\nexport function Framework(props: FrameworkProps) {\n return <FrameworkContext.Provider value={{\n settings: props.settings,\n sidebarGroups: props.sidebarGroups,\n toc: props.toc,\n breadcrumbs: props.breadcrumbs,\n navlinks: props.navlinks,\n }}>\n {props.children}\n </FrameworkContext.Provider>\n}\n\n\nexport function useSidebarGroups() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.sidebarGroups\n}\n\nexport function useSettings() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.settings\n}\n\nexport function useToC() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.toc\n}\n\nexport function useBreadcrumbs() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.breadcrumbs\n}\n\nexport function useNavLinks() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.navlinks\n}\n","import React, {createContext, useContext, useEffect, useState} from \"react\";\nimport {useLocation, useNavigation, useNavigate} from \"react-router\";\n\nimport {FwSidebarGroupProps, FwSidebarItemProps} from \"./sidebar\";\nimport {UIContext} from \"../../contexts/ui\";\nimport {useSidebarGroups} from \"../../contexts\";\n\n\nexport interface FwGroupContext {\n active: (item: FwSidebarItemProps) => [boolean, () => void],\n onClick?: (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>, item: FwSidebarItemProps) => void,\n}\n\ntype GroupBehaviour = (item: FwSidebarItemProps) => [boolean, () => void]\n\nconst groupContext = createContext<FwGroupContext>({\n active: () => [false, () => {\n }],\n onClick: () => null // TODO: should be deprecated?\n})\n\nexport function FwSidebarGroupContext({\n children,\n onePathBehaviour,\n clientSideRouting,\n initialActiveItems,\n }:\n {\n children: React.ReactNode,\n onePathBehaviour?: boolean,\n clientSideRouting?: boolean // TODO: scrollRouting?,\n initialActiveItems: any[]\n }) {\n\n let groupBehaviour: GroupBehaviour\n\n if (onePathBehaviour) {\n groupBehaviour = useOnePathBehaviour(initialActiveItems)\n } else {\n groupBehaviour = useDefaultBehaviour(initialActiveItems)\n }\n const location = useLocation()\n\n const [href, setHref] = useState(location.pathname)\n\n return <UIContext.Provider value={{\n href: href,\n setHref: (value) => {\n setHref(value)\n }\n }}>\n <groupContext.Provider value={{\n active: groupBehaviour,\n onClick: clientSideRouting ? (event, item) => {\n setHref(item.href)\n scrollToDataSlug(event, item)\n // navigate(item.href)\n } : undefined\n }}>\n {children}\n </groupContext.Provider>\n </UIContext.Provider>\n}\n\nexport function useGroup() {\n return useContext(groupContext)\n}\n\n\n// TODO: !!! better algorithm (JSON.stringify is not good) !!!!!\n// TODO: !!!! use array structure instad! !!!\n\nfunction getLastValue(set) {\n let value;\n for (value of set) ;\n return value;\n}\n\nfunction stringify(item: FwSidebarItemProps) {\n return JSON.stringify({\n title: item.title,\n href: item.href,\n items: item.items?.map((item) => stringify(item)),\n })\n}\n\nfunction recursiveSearch(items: FwSidebarItemProps[], href: string, levels: any[] = []) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n\n if (item.href === href) {\n return [...levels, i]\n }\n\n if (item.items) {\n const result = recursiveSearch(item.items, href, [...levels, i])\n if (result) {\n return result\n }\n }\n }\n return null\n}\n\nfunction calcActive(groups: FwSidebarGroupProps[], url: any) {\n const initialActiveItems: any[] = []\n\n groups.forEach(group => {\n const activeLevels = recursiveSearch(group.items, url) || []\n\n activeLevels.reduce((acc, index) => {\n initialActiveItems.push({\n ...acc[index],\n active: true\n })\n return acc[index].items\n }, group.items)\n\n return group\n })\n\n return initialActiveItems\n}\n\nfunction useDefaultBehaviour(initialActiveItems: any[]) {\n const groups = useSidebarGroups()\n const [weakSet] = useState(() => new Set<string>(initialActiveItems.map((item) => stringify(item))));\n const [, setForceUpdate] = useState(0);\n\n useEffect(() => {\n window.addEventListener('xyd.history.pushState', (event: CustomEvent) => {\n const url = event.detail?.url\n\n if (!url) {\n return\n }\n // TODO: better data structures\n const active = calcActive(groups, url)\n weakSet.clear()\n active.forEach((item) => {\n addItem(item)\n })\n });\n }, [])\n\n const forceUpdate = () => setForceUpdate((prev) => prev + 1);\n\n const addItem = (item: FwSidebarItemProps) => {\n weakSet.add(stringify(item));\n forceUpdate();\n };\n\n const deleteItem = (item: FwSidebarItemProps) => {\n weakSet.delete(stringify(item));\n forceUpdate();\n };\n\n const hasItem = (item: FwSidebarItemProps) => {\n return weakSet.has(stringify(item));\n };\n\n return (item: FwSidebarItemProps): [boolean, () => void] => [\n hasItem(item) || false,\n () => {\n if (hasItem(item)) {\n deleteItem(item);\n } else {\n addItem(item);\n }\n }\n ]\n}\n\nfunction useOnePathBehaviour(initialActiveItems: any[]) {\n const [weakSet] = useState(() => new Set<string>(initialActiveItems.map((item) => stringify(item))));\n const [lastLevel, setLastLevel] = useState<false | number | undefined>(false);\n const [, setForceUpdate] = useState(0);\n\n const forceUpdate = () => setForceUpdate((prev) => prev + 1);\n\n const addItem = (item: FwSidebarItemProps) => {\n weakSet.add(stringify(item));\n forceUpdate();\n };\n\n const deleteItem = (item: FwSidebarItemProps) => {\n weakSet.delete(stringify(item));\n forceUpdate();\n };\n\n const hasItem = (item: FwSidebarItemProps) => {\n return weakSet.has(stringify(item));\n };\n\n const clear = () => {\n weakSet.clear();\n forceUpdate();\n };\n\n return (item: FwSidebarItemProps): [boolean, () => void] => [\n hasItem(item),\n () => {\n setLastLevel(item.level)\n if (hasItem(item) && item.level == 0) {\n setLastLevel(false)\n clear()\n return\n }\n\n if (hasItem(item)) {\n setLastLevel(false)\n deleteItem(item);\n return\n }\n\n\n if (((item.level || 0) > (lastLevel || 0)) || lastLevel == false) {\n addItem(item)\n } else {\n const v = getLastValue(weakSet)\n deleteItem(JSON.parse(v))\n addItem(item)\n }\n }\n ]\n}\n\nfunction scrollToDataSlug(event: React.MouseEvent<HTMLAnchorElement, MouseEvent>, item: FwSidebarItemProps) {\n event.preventDefault()\n\n // TODO: find another solution because data-slug is added by 'atlas'\n\n const dataSlug = document.querySelector(`[data-slug=\"${item.href}\"]`)\n\n if (dataSlug) {\n dataSlug.scrollIntoView({block: \"start\", inline: \"nearest\"})\n }\n}\n\n\n","import {createContext} from 'react';\n\nexport const UIContext = createContext({\n href: '',\n setHref: (v: any) => {}\n});","import React, {} from \"react\"\n\nimport {Badge} from \"@xyd-js/components/writer\"\nimport {UISidebar} from \"@xyd-js/ui\";\n\nimport {useGroup} from \"./sidebar-group\";\n\n// TODO: custom hooks for active onclick handler etc?\n\nexport interface FwSidebarGroupProps {\n group: string\n\n items: FwSidebarItemProps[]\n}\n\nexport function FwSidebarItemGroup(props: FwSidebarGroupProps) {\n return <>\n <UISidebar.ItemHeader>\n {props.group}\n </UISidebar.ItemHeader>\n\n {props.items.map((item, index) => <FwSidebarItem\n key={index + item.href}\n title={item.title}\n href={item.href}\n items={item.items}\n active={item.active}\n level={0}\n />)}\n </>\n}\n\nexport interface FwSidebarItemProps {\n title: string | {\n code: string\n }\n\n href: string\n\n items?: FwSidebarItemProps[]\n\n active?: boolean\n\n // internal\n readonly level?: number\n // internal\n}\n\n// TODO: move to @xyd-js/components/content\nconst components = {\n Frontmatter: {\n // TODO: css\n Title: ({children}) => <div style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: \"10px\",\n }}>\n {children}\n </div>,\n },\n Badge: ({children}) => <Badge>\n {children}\n </Badge>\n}\n\nfunction mdxExport(code: string, components: any) {\n const scope = {\n Fragment: React.Fragment,\n jsxs: React.createElement,\n jsx: React.createElement,\n jsxDEV: React.createElement,\n _jsxs: React.createElement,\n _jsx: React.createElement,\n ...components\n }\n const fn = new Function(...Object.keys(scope), `return ${code}`)\n return fn(...Object.values(scope))\n}\n\nfunction FwSidebarItem(props: FwSidebarItemProps) {\n const {active, onClick} = useGroup()\n const [isActive, setActive] = active(props)\n\n let Title: any\n\n if (typeof props.title === \"object\" && \"code\" in props.title) {\n const code = props.title.code\n\n Title = () => mdxExport(\n // TODO: in the future better mechanism + support props + better components (provider?) - similar to codehik\n code.replace(\"() => \", \"\"),\n components\n )\n } else {\n Title = () => props.title\n }\n\n return <UISidebar.Item\n button={!!props.items?.length}\n href={props.href}\n active={isActive}\n onClick={() => {\n setActive()\n }}\n >\n <Title/>\n\n {\n props.items?.length && <UISidebar.SubTree isOpen={isActive}>\n <>\n {\n props.items?.map((item, index) => <FwSidebarItem\n key={index + item.href}\n title={item.title}\n href={item.href}\n items={item.items}\n active={active(item)[0]}\n level={(props.level || 0) + 1}\n />)\n }\n </>\n </UISidebar.SubTree>\n }\n </UISidebar.Item>\n}\n","import React, {ReactElement} from \"react\";\n\nexport function manualHydration(obj: any, key = 0): ReactElement<any, string | React.JSXElementConstructor<any>> {\n if (typeof obj !== 'object' || obj === null) {\n return React.createElement(React.Fragment, {key});\n }\n\n const {type, props} = obj || {};\n if (typeof type !== 'string' && typeof type !== 'function') {\n return React.createElement(React.Fragment, {key});\n }\n\n let children: ReactElement<any, string | React.JSXElementConstructor<any>>[] = [];\n if (props?.children) {\n if (Array.isArray(props.children)) {\n children = props.children.map((child: any, i) => manualHydration(child, key + i)) || [];\n } else {\n children = [manualHydration(props.children, key)];\n }\n }\n\n const elementProps = {...props, children, key};\n\n return React.createElement(type, elementProps);\n}","import {useLocation} from \"react-router\";\n\nimport {useSettings} from \"../contexts\";\n\nimport {manualHydration} from \"../utils/manualHydration\";\n\nfunction normalizeHref(href: string) {\n if (href.startsWith(\"/\")) {\n return href\n }\n\n return `/${href}`\n}\n\n// TODO: better data structures\nexport function useMatchedSubNav() {\n const settings = useSettings()\n const location = useLocation()\n\n const matchedSubnav = settings.structure?.header\n ?.filter(item => item.sub)\n ?.find(item => normalizeHref(location.pathname).startsWith(normalizeHref(item.sub?.match || \"\")))\n\n if (!matchedSubnav) {\n return null\n }\n\n return matchedSubnav.sub || null\n}\n"],"mappings":"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","names":["import_react","import_react_router","import_ui","import_writer","React","import_react","import_react","React","item","import_react","import_ui","React","components","import_ui","import_react","React","import_react_router","_a","React","recursiveSearch","toc"]}
|
|
1
|
+
{"version":3,"sources":["../packages/react/components/index.tsx","../packages/react/components/Surfaces.tsx","../packages/react/contexts/framework.tsx","../packages/react/components/Sidebar/Sidebar.tsx","../packages/react/components/Sidebar/SidebarGroup.tsx","../packages/react/hooks/useMatchedNav.tsx"],"sourcesContent":["import React, { isValidElement, useState } from \"react\";\nimport { Link, type To, useLocation, useMatches } from \"react-router\";\n\nimport { Header } from \"@xyd-js/core\";\nimport type { ITOC } from \"@xyd-js/ui\";\nimport { Nav, SubNav, Toc, UISidebar } from \"@xyd-js/ui\"\nimport { Anchor, Breadcrumbs, Button, ColorSchemeButton, Icon, NavLinks, useColorScheme } from \"@xyd-js/components/writer\";\n\nimport { Surface } from \"./Surfaces\";\nimport { SurfaceTarget } from \"../../../src\";\n\nimport { useBreadcrumbs, useMetadata, useNavLinks, useRawPage, useSettings, useSidebarGroups, useToC } from \"../contexts\";\nimport { FwSidebarGroupContext, FwSidebarItemGroup, FwSidebarItemProps } from \"./Sidebar\";\n\nimport { useMatchedSubNav } from \"../hooks\";\n\nfunction FwNavLogo() {\n const settings = useSettings()\n\n const logo = typeof settings?.theme?.logo\n\n if (!logo) {\n return null\n }\n\n return <a href=\"/\">\n <FwLogo />\n </a>\n}\n\nexport function FwNav({ kind }: { kind?: \"middle\" }) {\n const matches = useMatches()\n const matchedSubnav = useMatchedSubNav()\n const settings = useSettings()\n\n const lastMatch = matches[matches.length - 1]\n\n const header = settings?.navigation?.header || []\n\n const active = header.find(item => {\n if (matchedSubnav) {\n return pageLink(item.page || \"\") === pageLink(matchedSubnav?.route)\n }\n\n return pageLink(item.page || \"\") === lastMatch?.id\n })\n\n function createHeader(item: Header) {\n return <Nav.Item\n key={(item.page || \"\") + item.page}\n href={pageLink(item?.page || \"\")}\n value={item.page || \"\"}\n as={$Link}\n >\n {item.title}\n </Nav.Item>\n }\n\n const headerMap = header.reduce<Record<string, React.ReactNode[]>>((acc, item) => {\n const float = item.float || \"default\";\n return {\n ...acc,\n [float]: [...(acc[float] || []), createHeader(item)]\n };\n }, {});\n\n const rightHeaderExists = headerMap[\"right\"]?.length > 0\n\n // TODO: in the future better floating system - just pure css?\n return <Nav\n value={active?.page || \"\"}\n kind={kind}\n logo={<FwNavLogo />}\n rightSurface={<>\n {\n rightHeaderExists\n ? <Nav.Tab\n value={active?.page || \"\"}\n >\n {headerMap[\"right\"]}\n </Nav.Tab>\n : null\n }\n\n <Surface target={SurfaceTarget.NavRight} />\n\n <ColorSchemeButton />\n </>}\n >\n {headerMap[\"default\"]}\n </Nav>\n}\n\nexport function FwSubNav() {\n const matchedSubnav = useMatchedSubNav()\n const location = useLocation()\n const pathname = trailingSlash(location.pathname)\n\n if (!matchedSubnav) {\n return null\n }\n\n // TODO: in the future routing props from settings like {match: \"/docs/api/browser\"}\n const active = matchedSubnav?.pages.findLast(item => {\n return pathname.startsWith(pageLink(item.page || \"\"))\n })\n\n // TODO: value\n return <SubNav\n title={matchedSubnav?.title || \"\"}\n value={active?.page || \"\"}\n onChange={() => {\n }}\n >\n {matchedSubnav?.pages.map((item, index) => {\n return <SubNav.Item\n value={item.page || \"\"}\n href={pageLink(item.page || \"\")}\n as={$Link}\n\n >\n {item.title}\n </SubNav.Item>\n })}\n </SubNav>\n}\n\nexport interface FwSidebarGroupsProps {\n}\n\nexport function FwSidebarGroups(props: FwSidebarGroupsProps) {\n const location = useLocation()\n const pathname = trailingSlash(location.pathname)\n const groups = useSidebarGroups()\n const settings = useSettings()\n\n const footerItems = settings.navigation?.anchors?.bottom?.map(anchor => {\n return <UISidebar.FooterItem href={anchor.url} icon={<Icon name={anchor.icon || \"\"} />}>\n {anchor.name}\n </UISidebar.FooterItem>\n })\n\n const initialActiveItems: any[] = []\n groups.forEach((group, groupIndex) => {\n const activeLevels = recursiveSearch(group.items, pathname) || []\n\n activeLevels.reduce((acc, index, level) => {\n initialActiveItems.push({\n ...acc[index],\n groupIndex: groupIndex,\n level: level,\n itemIndex: index,\n })\n acc[index].active = true\n return acc[index].items\n }, group.items)\n\n return group\n })\n\n\n // TODO: better API for elements like logo search\n return <FwSidebarGroupContext\n initialActiveItems={initialActiveItems}\n >\n <UISidebar footerItems={footerItems && footerItems}>\n <Surface target={SurfaceTarget.SidebarTop} />\n\n {\n groups?.map((group, index) => <FwSidebarItemGroup\n key={index + group.group}\n {...group}\n groupIndex={index}\n />)\n }\n </UISidebar>\n </FwSidebarGroupContext>\n}\n\nexport function FwToc() {\n const metadata = useMetadata()\n const settings = useSettings()\n const toc = useToC()\n\n if (!toc) {\n return null\n }\n\n const maxDepth = metadata?.maxTocDepth || settings?.theme?.maxTocDepth || 2\n\n const renderTocItems = (items: Readonly<ITOC[]>, uiDepth = 0) => {\n return items.map((item) => (\n <React.Fragment key={item.id}>\n <Toc.Item\n id={item.id}\n depth={uiDepth}\n >\n {item.value}\n </Toc.Item>\n {item.children && item.children.length > 0 && renderTocItems(item.children, uiDepth + 1)}\n </React.Fragment>\n ))\n }\n\n // TODO: maxDepth for specific `#heading`\n return <Toc maxDepth={maxDepth}>\n {renderTocItems(toc)}\n </Toc>\n}\n\nexport function FwBreadcrumbs() {\n const fwBreadcrumbs = useBreadcrumbs()\n\n const breadcrumbs = fwBreadcrumbs?.map(item => ({\n title: item.title,\n href: item.href\n }))\n\n return <Breadcrumbs\n items={breadcrumbs || []}\n />\n}\n\nexport function FwNavLinks() {\n const navlinks = useNavLinks()\n\n if (navlinks?.prev || navlinks?.next) {\n return <NavLinks\n prev={navlinks.prev}\n next={navlinks.next}\n as={$Link}\n />\n }\n\n return null\n}\n\nexport function FwLogo() {\n const settings = useSettings()\n const [colorScheme] = useColorScheme()\n\n if (typeof settings?.theme?.logo === \"string\") {\n return <img src={settings?.theme?.logo} />\n }\n\n if (isValidElement(settings?.theme?.logo)) {\n return <a href=\"/\">\n {settings?.theme?.logo}\n </a>\n }\n\n if (typeof settings?.theme?.logo === \"object\" && colorScheme) {\n return <img src={settings?.theme?.logo[colorScheme as \"light\" | \"dark\"]} />\n }\n\n return null\n}\n\nexport function FwLink({ children, ...rest }) {\n return <Anchor {...rest} as={$Link}>\n {children}\n </Anchor>\n}\n\nexport function FwCopyPage() {\n const [isCopied, setIsCopied] = useState(false)\n\n const rawPage = useRawPage()\n // const events = useEvents()\n\n const handleCopy = () => {\n navigator.clipboard.writeText(rawPage || \"\")\n setIsCopied(true)\n // events.CopyPage({}) TODO: finish this\n\n setTimeout(() => setIsCopied(false), 2000)\n }\n\n // TODO: `xyd` icons must be always loaded\n return <Button icon={isCopied ? <Icon name=\"check\" size={12} /> : <Icon name=\"copy\" size={12} />} onClick={handleCopy}>\n Copy page\n </Button>\n}\n\nfunction $Link({ children, ...rest }) {\n let to: To = \"\"\n\n if (rest.href) {\n try {\n new URL(rest.href)\n to = rest.href\n } catch (error) {\n if (rest.href.startsWith(\"/\")) {\n const url = new URL(`https://example.com${rest.href}`)\n to = {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n }\n } else {\n return <Anchor as=\"button\" onClick={() => { // TODO: !!! in the future we should use react-router but it rerenders tha page !!!\n const url = new URL(window.location.href)\n const currentParams = url.searchParams\n\n // Update parameters from the new params\n new URLSearchParams(rest.href).forEach((value, key) => {\n currentParams.set(key, value)\n })\n\n url.search = currentParams.toString()\n history.replaceState(null, '', url)\n }}>\n {children}\n </Anchor>\n }\n }\n }\n\n return <Link {...rest} to={to}>\n {children}\n </Link>\n}\n\nfunction recursiveSearch(items: FwSidebarItemProps[], href: string, levels: any[] = []) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n\n if (item.href === href) {\n return [...levels, i]\n }\n\n if (item.items) {\n const result = recursiveSearch(item.items, href, [...levels, i])\n if (result) {\n return result\n }\n }\n }\n return null\n}\n\n\nfunction trailingSlash(path: string) {\n return path.endsWith(\"/\") ? path.slice(0, -1) : path\n}\n\nfunction pageLink(page: string) {\n return page.startsWith(\"/\") ? page : `/${page}`\n}\n","import React, { createContext, useContext, ComponentType } from 'react'\n\nimport { ROSurface, SurfaceTargetType } from '../../../src'\n\n\ninterface SurfaceContext {\n surfaces?: ROSurface\n}\n\nexport const SurfaceContext = createContext<SurfaceContext>({\n surfaces: undefined,\n})\n\ninterface SurfaceProps {\n target: SurfaceTargetType\n props?: any // TODO: fix any\n}\n\nexport function Surface(props: SurfaceProps): React.JSX.Element | null {\n const { target } = props\n\n const registry = useContext(SurfaceContext)\n\n if (!registry.surfaces) {\n return null\n }\n\n const components = registry.surfaces.get(target)\n\n if (!components) {\n return null\n }\n\n if (!Array.isArray(components)) {\n if (typeof components === 'function') {\n const Component = components as ComponentType<any>\n return <Component {...props.props} />\n }\n\n return <React.Fragment>{components}</React.Fragment>\n }\n\n if (!components.length) {\n return null\n }\n\n return <>\n {components.map((Component, index) => {\n if (typeof Component === 'function') {\n const Comp = Component as ComponentType<any>\n return <Comp key={index} {...props.props} />\n }\n return <React.Fragment key={index}>{Component}</React.Fragment>\n })}\n </>\n}","import React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { useNavigation } from \"react-router\";\n\nimport { Metadata, Settings } from \"@xyd-js/core\";\nimport { type ITOC, type IBreadcrumb, type INavLinks, ProgressBar } from \"@xyd-js/ui\";\nimport { Banner, Button } from \"@xyd-js/components/writer\";\n\nimport { FwSidebarGroupProps } from \"../components/Sidebar\";\nimport { SurfaceContext } from \"../components/Surfaces\";\nimport {Surfaces} from \"../../../src\"\n\nexport interface IFramework {\n settings: Readonly<Settings>\n\n sidebarGroups: Readonly<FwSidebarGroupProps[]>\n metadata: Readonly<Metadata>\n setMetadata: (metadata: Metadata) => void\n components?: Readonly<{[componentName: string]: React.ComponentType<any>}>\n}\n\nconst framework: IFramework = {\n settings: {},\n metadata: {\n title: \"\",\n },\n sidebarGroups: [],\n setMetadata: () => { },\n components: {}\n}\nconst FrameworkContext = createContext<IFramework>(framework)\n\nexport interface FrameworkProps {\n children: React.ReactNode\n\n settings: Settings,\n metadata: Metadata,\n sidebarGroups: FwSidebarGroupProps[],\n surfaces: Surfaces,\n components?: {[componentName: string]: React.ComponentType<any>},\n BannerContent: React.ComponentType<any>\n}\n\nexport function Framework(props: FrameworkProps) {\n const navigation = useNavigation()\n\n const [metadata, setMetadata] = useState<Metadata | undefined>(props.metadata)\n\n const BannerContent = props.BannerContent || null\n const BannerComponent = props?.settings?.theme?.banner?.kind === \"secondary\" ? Banner.Secondary : Banner\n return <>\n <FrameworkContext value={{\n settings: Object.freeze({ ...props.settings }),\n sidebarGroups: Object.freeze([...props.sidebarGroups]),\n metadata: Object.freeze({ ...metadata, title: metadata?.title || \"\" }),\n setMetadata: setMetadata,\n components: Object.freeze(props.components || {})\n }}>\n <SurfaceContext value={{\n surfaces: props.surfaces\n }}>\n <ProgressBar isActive={navigation.state === 'loading'} />\n {BannerContent ? <BannerComponent\n label={props.settings?.theme?.banner?.label}\n icon={props.settings?.theme?.banner?.icon}\n >\n <BannerContent />\n </BannerComponent> : null}\n {props.children}\n </SurfaceContext>\n </FrameworkContext>\n </>\n}\n\ninterface FrameworkPageProps {\n children: React.ReactNode\n\n ContentComponent?: (props: { components: any, children: React.ReactNode }) => React.JSX.Element\n\n metadata: Metadata\n breadcrumbs?: IBreadcrumb[],\n rawPage?: string\n toc?: ITOC[],\n navlinks?: INavLinks\n}\n\ninterface IFrameworkPageContext {\n ContentComponent: (props: { components: any, children: React.ReactNode }) => React.JSX.Element\n metadata: Readonly<Metadata>\n breadcrumbs?: Readonly<IBreadcrumb[]>\n rawPage?: Readonly<string>\n toc?: Readonly<ITOC[]>\n navlinks?: Readonly<INavLinks>\n}\n\nconst FrameworkPageContext = createContext<IFrameworkPageContext>({\n ContentComponent: () => <></>,\n metadata: {\n title: \"\",\n }\n})\n\nexport function FrameworkPage(props: FrameworkPageProps) {\n const { setMetadata } = useContext(FrameworkContext)\n\n useEffect(() => {\n setMetadata(props.metadata)\n }, [])\n\n return <FrameworkPageContext value={{\n ContentComponent: props.ContentComponent || (() => <></>),\n metadata: Object.freeze(props.metadata),\n breadcrumbs: Object.freeze(props.breadcrumbs),\n rawPage: Object.freeze(props.rawPage),\n toc: Object.freeze(props.toc || []),\n navlinks: Object.freeze(props.navlinks),\n }}>\n {props.children}\n </FrameworkPageContext>\n}\n\nexport function useSidebarGroups() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.sidebarGroups\n}\n\nexport function useSettings() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.settings\n}\n\nexport function useMetadata() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.metadata\n}\n\nexport function useComponents() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.components\n}\n\nexport function useToC() {\n const ctx = useContext(FrameworkPageContext)\n const toc = ctx.toc || [] // TODO: !!! `|| []` IS NEEDED CUZ ISSUES WITH HYDRATION !!!\n\n return toc\n}\n\nexport function useBreadcrumbs() {\n const ctx = useContext(FrameworkPageContext)\n\n return ctx.breadcrumbs\n}\n\nexport function useNavLinks() {\n const ctx = useContext(FrameworkPageContext)\n\n return ctx.navlinks\n}\n\n\nexport function useRawPage() {\n const ctx = useContext(FrameworkPageContext)\n\n return ctx.rawPage\n}\n\nexport function useContentComponent() {\n const ctx = useContext(FrameworkPageContext)\n\n return ctx.ContentComponent\n}\n","import React, { } from \"react\"\n\nimport { UISidebar } from \"@xyd-js/ui\";\n\nimport { Icon } from \"@xyd-js/components/writer\";\nimport { Metadata } from \"@xyd-js/core\";\n\nimport { useGroup } from \"./SidebarGroup\";\nimport { Surface } from \"../Surfaces\";\n\n// TODO: custom hooks for active onclick handler etc?\n\nexport interface FwSidebarGroupProps {\n group: string\n\n groupIndex: number\n\n items: FwSidebarItemProps[]\n\n icon?: string\n}\n\nexport function FwSidebarItemGroup(props: FwSidebarGroupProps) {\n const icon = props.icon ? <Icon name={props.icon || \"\"} size={16} /> : null\n\n return <>\n <UISidebar.ItemHeader icon={icon}>\n {props.group}\n </UISidebar.ItemHeader>\n\n {props.items.map((item, index) => <FwSidebarItem\n uniqIndex={item.uniqIndex}\n groupIndex={props.groupIndex}\n level={0}\n itemIndex={index}\n key={index + item.href}\n title={item.title}\n sidebarTitle={item.sidebarTitle}\n pageMeta={item.pageMeta}\n href={item.href}\n items={item.items}\n active={item.active}\n icon={item.icon}\n />)}\n </>\n}\n\nexport interface FwSidebarItemProps {\n title: string\n\n href: string\n\n uniqIndex: number\n\n icon?: string\n\n sidebarTitle?: string\n\n items?: FwSidebarItemProps[]\n\n active?: boolean\n\n // internal\n readonly level?: number\n readonly groupIndex?: number\n readonly itemIndex?: number\n readonly pageMeta?: Metadata\n // internal\n}\n\nfunction FwSidebarItem(props: FwSidebarItemProps) {\n const { active } = useGroup()\n const [isActive, setActive] = active(props)\n\n const title = props.sidebarTitle || props.title || \"\"\n const nested = !!props.items?.length\n\n function handleClick() {\n if (!nested) {\n return\n }\n\n setActive()\n }\n\n // Determine if this is a parent of the active item with href\n const hasActiveChild = props.items?.some(item => {\n const [itemActive] = active(item)\n return (itemActive && item.href) || item.items?.some(subItem => {\n const [subItemActive] = active(subItem)\n return subItemActive && subItem.href\n })\n })\n\n // An item should only be considered active if it's the final target (has href)\n const isActiveItem = !!(isActive && props.href)\n // Only mark as parent active if it's a parent of an active item with href\n const isParentActive = hasActiveChild\n\n const icon = <Icon name={props.icon || \"\"} size={16} />\n\n return <UISidebar.Item\n button={nested}\n href={props.href}\n active={isActiveItem}\n isParentActive={isParentActive}\n onClick={handleClick}\n icon={icon}\n >\n <div part=\"item-title-container\">\n <Surface\n target=\"sidebar.item.left\"\n props={{\n active: isActiveItem,\n pageMeta: props.pageMeta,\n }}\n />\n <div part=\"item-title\">\n {title}\n </div>\n <Surface\n target=\"sidebar.item.right\"\n props={{\n active: isActiveItem,\n pageMeta: props.pageMeta,\n }}\n />\n </div>\n\n {\n props.items?.length && <UISidebar.SubTree isOpen={isActive}>\n <>\n {\n props.items?.map((item, index) => <FwSidebarItem\n uniqIndex={item.uniqIndex}\n groupIndex={props.groupIndex}\n level={(props.level || 0) + 1}\n itemIndex={index}\n key={index + item.href}\n title={item.title}\n href={item.href}\n items={item.items}\n active={active(item)[0]}\n icon={item.icon}\n pageMeta={item.pageMeta}\n />)\n }\n </>\n </UISidebar.SubTree>\n }\n </UISidebar.Item>\n}\n","import React, { createContext, useContext, useState, useEffect } from \"react\";\n\nimport { FwSidebarItemProps } from \"./Sidebar\";\nimport { useLocation, useNavigation } from \"react-router\";\n\nexport interface FwGroupContext {\n active: (item: FwSidebarItemProps) => [boolean, () => void],\n}\n\nconst GroupContext = createContext<FwGroupContext>({\n active: () => [false, () => {\n }],\n})\n\ninterface FwSidebarGroupContextProps {\n children: React.ReactNode,\n initialActiveItems: any[]\n}\n\nexport function FwSidebarGroupContext(props: FwSidebarGroupContextProps) {\n const { children, initialActiveItems } = props\n\n const groupBehaviour = useDefaultBehaviour(initialActiveItems) // TODO: support different behaviours?\n\n return <GroupContext value={{\n active: groupBehaviour,\n }}>\n {children}\n </GroupContext>\n}\n\nexport function useGroup() {\n return useContext(GroupContext)\n}\n\n// TOOD: issues if same page url on initialitems\n// TODO: the time of chaning is not perfectly the same with react-router \n// TODO: better data structure + algorithm\n// TODO: !!!! REFACTOR !!! !!! nagivation loaders !!!\nfunction useDefaultBehaviour(initialActiveItems: any[]) {\n const navigation = useNavigation();\n const [activeItems, setActiveItems] = useState(() => createItemsMap(initialActiveItems));\n\n const [, setForceUpdate] = useState(0);\n const forceUpdate = () => setForceUpdate((prev) => prev + 1);\n\n useEffect(() => {\n if (navigation.state !== 'loading') {\n setActiveItems(createItemsMap(initialActiveItems));\n forceUpdate();\n }\n }, [initialActiveItems, navigation.state]);\n\n function addItem(item: FwSidebarItemProps) {\n const key = itemId(item);\n\n setActiveItems(prev => {\n const newMap = new Map(prev);\n newMap.set(key, true);\n return newMap;\n });\n forceUpdate();\n }\n\n function deleteItem(item: FwSidebarItemProps) {\n const key = itemId(item);\n\n setActiveItems(prev => {\n const newMap = new Map(prev);\n newMap.delete(key);\n return newMap;\n });\n forceUpdate();\n }\n\n function hasItem(item: FwSidebarItemProps) {\n const key = itemId(item);\n\n return activeItems.get(key) || false;\n }\n\n return (item: FwSidebarItemProps): [boolean, () => void] => {\n return [\n hasItem(item) || false,\n () => {\n if (!hasItem(item)) {\n addItem(item);\n return;\n }\n deleteItem(item);\n }\n ]\n }\n}\n\nfunction itemId(item: FwSidebarItemProps) {\n const id = `${item.uniqIndex}:${item.groupIndex}-${item.level}-${item.itemIndex}`\n \n return id;\n}\n\nfunction createItemsMap(items: any[]): Map<string, boolean> {\n const map = new Map<string, boolean>();\n items.forEach(item => {\n const key = itemId(item);\n map.set(key, true);\n });\n return map;\n}","import { useMatches } from \"react-router\";\n\nimport { useSettings } from \"../contexts\";\n\n// TODO: better data structures\nexport function useMatchedSubNav() {\n const settings = useSettings()\n const matches = useMatches()\n\n const lastMatchId = matches[matches.length - 1]?.id\n\n let matchedSubnav = settings.navigation?.segments\n ?.find(item => item.pages?.find(page => {\n return sanitizeUrl(page.page || \"\") === sanitizeUrl(lastMatchId)\n }))\n\n if (!matchedSubnav) {\n return null\n }\n\n return matchedSubnav || null\n}\n\n\nfunction sanitizeUrl(url: string) {\n if (url.startsWith(\"/\")) {\n return url\n }\n\n return `/${url}`\n}"],"mappings":"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","names":["React","useState","useLocation","useMatches","UISidebar","Button","Icon","React","createContext","useContext","createContext","React","useContext","React","React","createContext","useContext","useState","useEffect","useNavigation","React","_a","_a","React","useMatches","useLocation","UISidebar","Icon","useState","Button"]}
|
package/package.json
CHANGED
|
@@ -1,38 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyd-js/framework",
|
|
3
|
-
"version": "0.1.0-xyd.
|
|
3
|
+
"version": "0.1.0-xyd.73",
|
|
4
4
|
"description": "",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
|
-
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
"./package.json": "./package.json",
|
|
10
10
|
"./index.css": "./dist/index.css",
|
|
11
11
|
".": {
|
|
12
|
-
"
|
|
13
|
-
"import": "./dist/index.mjs"
|
|
12
|
+
"import": "./dist/index.js"
|
|
14
13
|
},
|
|
15
14
|
"./hydration": {
|
|
16
|
-
"
|
|
17
|
-
"import": "./dist/hydration.mjs"
|
|
15
|
+
"import": "./dist/hydration.js"
|
|
18
16
|
},
|
|
19
17
|
"./react": {
|
|
20
|
-
"
|
|
21
|
-
"import": "./dist/react.mjs"
|
|
18
|
+
"import": "./dist/react.js"
|
|
22
19
|
}
|
|
23
20
|
},
|
|
21
|
+
"files": [
|
|
22
|
+
"package.json",
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
24
25
|
"author": "",
|
|
25
26
|
"dependencies": {},
|
|
26
27
|
"peerDependencies": {
|
|
27
|
-
"react": "^
|
|
28
|
-
"react-dom": "^
|
|
29
|
-
"react-router": "^7.
|
|
30
|
-
"@xyd-js/
|
|
31
|
-
"@xyd-js/
|
|
32
|
-
"@xyd-js/
|
|
33
|
-
"@xyd-js/
|
|
28
|
+
"react": "^19.1.0",
|
|
29
|
+
"react-dom": "^19.1.0",
|
|
30
|
+
"react-router": "^7.6.2",
|
|
31
|
+
"@xyd-js/content": "0.1.0-xyd.55",
|
|
32
|
+
"@xyd-js/core": "0.1.0-xyd.54",
|
|
33
|
+
"@xyd-js/components": "0.1.0-xyd.52",
|
|
34
|
+
"@xyd-js/ui": "0.1.0-xyd.57"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
37
|
+
"@types/react": "^19.1.0",
|
|
38
|
+
"@types/react-dom": "^19.1.0",
|
|
36
39
|
"@babel/preset-react": "^7.24.7",
|
|
37
40
|
"@mdx-js/rollup": "^3.0.1",
|
|
38
41
|
"@types/node": "22.5.5",
|
|
@@ -43,7 +46,7 @@
|
|
|
43
46
|
"remark-frontmatter": "^5.0.0",
|
|
44
47
|
"remark-mdx-frontmatter": "^5.0.0",
|
|
45
48
|
"typescript": "5.6.2",
|
|
46
|
-
"vite": "^
|
|
49
|
+
"vite": "^7.0.0",
|
|
47
50
|
"tsup": "^8.3.0"
|
|
48
51
|
},
|
|
49
52
|
"scripts": {
|
package/dist/hydration.d.mts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Settings } from '@xyd-js/core';
|
|
2
|
-
import { IBreadcrumb, INavLinks } from '@xyd-js/ui';
|
|
3
|
-
import { F as FwSidebarGroupProps } from './sidebar-Dwf54qYp.mjs';
|
|
4
|
-
|
|
5
|
-
declare function mapSettingsToProps(settings: Settings, slug: string): Promise<{
|
|
6
|
-
groups: FwSidebarGroupProps[];
|
|
7
|
-
breadcrumbs: IBreadcrumb[];
|
|
8
|
-
navlinks?: INavLinks;
|
|
9
|
-
}>;
|
|
10
|
-
|
|
11
|
-
export { mapSettingsToProps };
|
package/dist/hydration.mjs
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
// packages/hydration/settings-to-props.ts
|
|
2
|
-
import { filterNavigationByLevels, pageFrontMatters } from "@xyd-js/content/navigation";
|
|
3
|
-
function filterNavigation(settings, slug) {
|
|
4
|
-
var _a;
|
|
5
|
-
const sidebarItems = [];
|
|
6
|
-
let multiSidebarMatch = null;
|
|
7
|
-
(_a = settings == null ? void 0 : settings.structure) == null ? void 0 : _a.sidebar.filter((sidebar) => {
|
|
8
|
-
var _a2;
|
|
9
|
-
if ("match" in sidebar) {
|
|
10
|
-
const sideMatch = normalizeHref(sidebar.match);
|
|
11
|
-
const normalizeSlug = normalizeHref(slug);
|
|
12
|
-
if (normalizeSlug.startsWith(sideMatch)) {
|
|
13
|
-
if (multiSidebarMatch) {
|
|
14
|
-
const findByMatchLvl = multiSidebarMatch.match.split("/").length;
|
|
15
|
-
const urlMatchLvl = sideMatch.split("/").length;
|
|
16
|
-
if (urlMatchLvl > findByMatchLvl) {
|
|
17
|
-
multiSidebarMatch = sidebar;
|
|
18
|
-
}
|
|
19
|
-
} else {
|
|
20
|
-
multiSidebarMatch = sidebar;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const ok = filterNavigationByLevels(((_a2 = settings == null ? void 0 : settings.structure) == null ? void 0 : _a2.header) || [], slug)(sidebar);
|
|
26
|
-
if (ok) {
|
|
27
|
-
sidebarItems.push(sidebar);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
if (multiSidebarMatch != null) {
|
|
31
|
-
const side = multiSidebarMatch;
|
|
32
|
-
sidebarItems.push(...side.items);
|
|
33
|
-
}
|
|
34
|
-
return sidebarItems;
|
|
35
|
-
}
|
|
36
|
-
function normalizeHrefCheck(first, second) {
|
|
37
|
-
if (first.startsWith("/")) {
|
|
38
|
-
first = first.slice(1);
|
|
39
|
-
}
|
|
40
|
-
if (second.startsWith("/")) {
|
|
41
|
-
second = second.slice(1);
|
|
42
|
-
}
|
|
43
|
-
return first === second;
|
|
44
|
-
}
|
|
45
|
-
function normalizeHref(href) {
|
|
46
|
-
if (href.startsWith("/")) {
|
|
47
|
-
return href;
|
|
48
|
-
}
|
|
49
|
-
return `/${href}`;
|
|
50
|
-
}
|
|
51
|
-
function safePageLink(page) {
|
|
52
|
-
return (page == null ? void 0 : page.startsWith("/")) ? page : `/${page}`;
|
|
53
|
-
}
|
|
54
|
-
async function mapSettingsToProps(settings, slug) {
|
|
55
|
-
const filteredNav = filterNavigation(settings, slug);
|
|
56
|
-
const frontmatters = await pageFrontMatters(filteredNav);
|
|
57
|
-
const slugFrontmatter = frontmatters[slug] || null;
|
|
58
|
-
const breadcrumbs = [];
|
|
59
|
-
let navlinks = void 0;
|
|
60
|
-
function mapItems(page, currentNav, nav) {
|
|
61
|
-
var _a;
|
|
62
|
-
if (typeof page !== "string") {
|
|
63
|
-
const items = (_a = page.pages) == null ? void 0 : _a.map((p) => mapItems(p, page, nav));
|
|
64
|
-
if (items == null ? void 0 : items.find((item) => normalizeHrefCheck(item.href, slug))) {
|
|
65
|
-
breadcrumbs.unshift({
|
|
66
|
-
title: page.group || "",
|
|
67
|
-
href: ""
|
|
68
|
-
// TODO:
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return {
|
|
72
|
-
title: page.group,
|
|
73
|
-
href: "",
|
|
74
|
-
active: false,
|
|
75
|
-
items
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
const matterTitle = frontmatters && frontmatters[page] && frontmatters[page].title;
|
|
79
|
-
let title = "";
|
|
80
|
-
if (typeof matterTitle === "string") {
|
|
81
|
-
title = matterTitle;
|
|
82
|
-
} else {
|
|
83
|
-
title = matterTitle;
|
|
84
|
-
}
|
|
85
|
-
if (!title) {
|
|
86
|
-
console.error("Title not found for page", page);
|
|
87
|
-
}
|
|
88
|
-
if (slugFrontmatter && slugFrontmatter === frontmatters[page]) {
|
|
89
|
-
const nlinks = mapNavToLinks(page, currentNav, nav, frontmatters);
|
|
90
|
-
if (nlinks) {
|
|
91
|
-
navlinks = nlinks;
|
|
92
|
-
}
|
|
93
|
-
if (currentNav.group) {
|
|
94
|
-
breadcrumbs.push({
|
|
95
|
-
title: currentNav.group,
|
|
96
|
-
href: ""
|
|
97
|
-
// TODO:
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
breadcrumbs.push({
|
|
101
|
-
// @ts-ignore
|
|
102
|
-
title,
|
|
103
|
-
href: page
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
return {
|
|
107
|
-
// @ts-ignore
|
|
108
|
-
title,
|
|
109
|
-
href: safePageLink(page),
|
|
110
|
-
active: false
|
|
111
|
-
// TODO:
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
const groups = filteredNav.map((nav) => {
|
|
115
|
-
var _a;
|
|
116
|
-
if ("match" in nav) {
|
|
117
|
-
return {
|
|
118
|
-
group: "",
|
|
119
|
-
items: []
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
return {
|
|
123
|
-
group: nav.group,
|
|
124
|
-
items: ((_a = nav.pages) == null ? void 0 : _a.map((p) => {
|
|
125
|
-
return mapItems(p, nav, filteredNav);
|
|
126
|
-
})) || []
|
|
127
|
-
};
|
|
128
|
-
}) || [];
|
|
129
|
-
return {
|
|
130
|
-
groups,
|
|
131
|
-
breadcrumbs,
|
|
132
|
-
navlinks
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
function mapNavToLinks(page, currentNav, nav, frontmatters) {
|
|
136
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
137
|
-
if (!currentNav.group) {
|
|
138
|
-
console.error("current nav need group to calculate navlinks");
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
const currentPageIndex = (_a = currentNav == null ? void 0 : currentNav.pages) == null ? void 0 : _a.findIndex((p) => page === p);
|
|
142
|
-
const foundPageIndex = currentPageIndex != void 0 && currentPageIndex !== -1;
|
|
143
|
-
if (!foundPageIndex) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
let prev = (_b = currentNav == null ? void 0 : currentNav.pages) == null ? void 0 : _b[currentPageIndex - 1];
|
|
147
|
-
let next = (_c = currentNav == null ? void 0 : currentNav.pages) == null ? void 0 : _c[currentPageIndex + 1];
|
|
148
|
-
if (prev && next) {
|
|
149
|
-
if (typeof prev !== "string" || typeof next !== "string") {
|
|
150
|
-
console.error("currently nested pages for navlinks are not supported (step 1)");
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const prevTitle2 = ((_d = frontmatters[prev]) == null ? void 0 : _d.title) || "";
|
|
154
|
-
const nextTitle2 = ((_e = frontmatters[next]) == null ? void 0 : _e.title) || "";
|
|
155
|
-
return {
|
|
156
|
-
prev: {
|
|
157
|
-
// @ts-ignore
|
|
158
|
-
title: prevTitle2,
|
|
159
|
-
href: safePageLink(prev)
|
|
160
|
-
},
|
|
161
|
-
next: {
|
|
162
|
-
// @ts-ignore
|
|
163
|
-
title: nextTitle2,
|
|
164
|
-
href: safePageLink(next)
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
const currentNavPosition = nav.findIndex((n) => n.group === currentNav.group);
|
|
169
|
-
const foundNavIndex = currentNavPosition != void 0 && currentNavPosition !== -1;
|
|
170
|
-
if (!foundNavIndex) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
if (!prev) {
|
|
174
|
-
const prevNav = nav[currentNavPosition - 1];
|
|
175
|
-
if (prevNav) {
|
|
176
|
-
const prevNavLastPge = (_f = prevNav == null ? void 0 : prevNav.pages) == null ? void 0 : _f[prevNav.pages.length - 1];
|
|
177
|
-
if (typeof prevNavLastPge != "string") {
|
|
178
|
-
console.error("currently nested pages for navlinks are not supported (step 2)");
|
|
179
|
-
} else {
|
|
180
|
-
prev = prevNavLastPge;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (!next) {
|
|
185
|
-
const nextNav = nav[currentNavPosition + 1];
|
|
186
|
-
if (nextNav) {
|
|
187
|
-
const nextNavFirstPage = (_g = nextNav == null ? void 0 : nextNav.pages) == null ? void 0 : _g[0];
|
|
188
|
-
if (typeof nextNavFirstPage != "string") {
|
|
189
|
-
console.error("currently nested pages for navlinks are not supported (step 3)");
|
|
190
|
-
} else {
|
|
191
|
-
next = nextNavFirstPage;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
if (!prev) {
|
|
196
|
-
if (typeof next == "string") {
|
|
197
|
-
const nextTitle2 = ((_h = frontmatters[next]) == null ? void 0 : _h.title) || "";
|
|
198
|
-
return {
|
|
199
|
-
next: {
|
|
200
|
-
// @ts-ignore
|
|
201
|
-
title: nextTitle2,
|
|
202
|
-
href: safePageLink(next)
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
} else {
|
|
206
|
-
console.error("currently nested pages for navlinks are not supported (step 4)");
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (!next) {
|
|
210
|
-
if (typeof prev == "string") {
|
|
211
|
-
const nextTitle2 = ((_i = frontmatters[prev]) == null ? void 0 : _i.title) || "";
|
|
212
|
-
return {
|
|
213
|
-
prev: {
|
|
214
|
-
// @ts-ignore
|
|
215
|
-
title: nextTitle2,
|
|
216
|
-
href: safePageLink(prev)
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
} else {
|
|
220
|
-
console.error("currently nested pages for navlinks are not supported (step 5)");
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
if (typeof prev !== "string" || typeof next !== "string") {
|
|
224
|
-
console.error("currently nested pages for navlinks are not supported (step 6)");
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
const prevTitle = ((_j = frontmatters[prev]) == null ? void 0 : _j.title) || "";
|
|
228
|
-
const nextTitle = ((_k = frontmatters[next]) == null ? void 0 : _k.title) || "";
|
|
229
|
-
return {
|
|
230
|
-
prev: {
|
|
231
|
-
// @ts-ignore
|
|
232
|
-
title: prevTitle,
|
|
233
|
-
href: safePageLink(prev)
|
|
234
|
-
},
|
|
235
|
-
next: {
|
|
236
|
-
// @ts-ignore
|
|
237
|
-
title: nextTitle,
|
|
238
|
-
href: safePageLink(next)
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
export {
|
|
243
|
-
mapSettingsToProps
|
|
244
|
-
};
|
|
245
|
-
//# sourceMappingURL=hydration.mjs.map
|
package/dist/hydration.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/hydration/settings-to-props.ts"],"sourcesContent":["// server-only\n\nimport {Sidebar, PageFrontMatter, Settings, SidebarMulti} from \"@xyd-js/core\";\nimport {filterNavigationByLevels, pageFrontMatters} from \"@xyd-js/content/navigation\";\nimport {IBreadcrumb, INavLinks} from \"@xyd-js/ui\";\n\nimport {FwSidebarGroupProps} from \"../react\";\n\n// TODO: framework vs content responsibility\n\nfunction filterNavigation(settings: Settings, slug: string): Sidebar[] {\n const sidebarItems: Sidebar[] = []\n\n let multiSidebarMatch: SidebarMulti | null = null\n\n settings?.structure?.sidebar.filter(sidebar => {\n if (\"match\" in sidebar) {\n const sideMatch = normalizeHref(sidebar.match)\n const normalizeSlug = normalizeHref(slug)\n\n // TODO: startWith is not enough e.g `/docs/apps/buildISSUE` if `/docs/apps/build`\n if (normalizeSlug.startsWith(sideMatch)) {\n if (multiSidebarMatch) {\n const findByMatchLvl = multiSidebarMatch.match.split(\"/\").length\n const urlMatchLvl = sideMatch.split(\"/\").length\n\n if (urlMatchLvl > findByMatchLvl) {\n multiSidebarMatch = sidebar\n }\n } else {\n multiSidebarMatch = sidebar\n }\n }\n\n return\n }\n\n // TODO: better algorithm\n const ok = filterNavigationByLevels(settings?.structure?.header || [], slug)(sidebar)\n\n if (ok) {\n sidebarItems.push(sidebar)\n }\n })\n\n if (multiSidebarMatch != null) {\n const side = multiSidebarMatch as SidebarMulti\n sidebarItems.push(...side.items)\n }\n\n return sidebarItems\n}\n\n// TODO: rename this because it's no longer 'navigation' because it returns breadcrumbs, sidebar and nextlinks props\n// TODO: breadcrumbs and frontmatters as content plugins?\n// TODO: idea - calculate breadcrumbs and navlinks near server-side component?\n\nfunction normalizeHrefCheck(first: string, second: string) {\n if (first.startsWith(\"/\")) {\n first = first.slice(1)\n }\n\n if (second.startsWith(\"/\")) {\n second = second.slice(1)\n }\n\n return first === second\n}\n\nfunction normalizeHref(href: string) {\n if (href.startsWith(\"/\")) {\n return href\n }\n\n return `/${href}`\n}\n\nfunction safePageLink(page: string): string {\n return page?.startsWith(\"/\") ? page : `/${page}`\n}\n\n// mapNavigationToProps maps @xyd-js/core navigation into @xyd-js/ui props\nexport async function mapSettingsToProps(\n settings: Settings,\n slug: string\n): Promise<{\n groups: FwSidebarGroupProps[],\n breadcrumbs: IBreadcrumb[]\n navlinks?: INavLinks\n}> {\n const filteredNav = filterNavigation(settings, slug)\n const frontmatters = await pageFrontMatters(filteredNav)\n\n const slugFrontmatter = frontmatters[slug] || null\n const breadcrumbs: IBreadcrumb[] = []\n let navlinks: INavLinks | undefined = undefined\n\n function mapItems(\n page: string | Sidebar,\n currentNav: Sidebar,\n nav: Sidebar[]\n ) {\n if (typeof page !== \"string\") {\n const items = page.pages?.map((p) => mapItems(p, page, nav))\n\n if (items?.find(item => normalizeHrefCheck(item.href, slug))) {\n breadcrumbs.unshift({\n title: page.group || \"\",\n href: \"\", // TODO:\n })\n }\n\n return {\n title: page.group,\n href: \"\",\n active: false,\n items,\n }\n }\n\n const matterTitle = frontmatters && frontmatters[page] && frontmatters[page].title\n\n let title = \"\"\n\n if (typeof matterTitle === \"string\") {\n title = matterTitle\n } else {\n // @ts-ignore\n title = matterTitle\n }\n\n if (!title) {\n console.error(\"Title not found for page\", page)\n }\n\n // TODO: better data structures - for example flat array of filtered nav\n if (slugFrontmatter && (slugFrontmatter === frontmatters[page])) {\n const nlinks = mapNavToLinks(page, currentNav, nav, frontmatters)\n\n if (nlinks) {\n navlinks = nlinks\n }\n\n if (currentNav.group) {\n breadcrumbs.push({\n title: currentNav.group,\n href: \"\", // TODO:\n })\n }\n breadcrumbs.push({\n // @ts-ignore\n title,\n href: page,\n })\n }\n\n return {\n // @ts-ignore\n title,\n href: safePageLink(page),\n active: false // TODO:\n }\n }\n\n const groups = filteredNav.map((nav) => {\n // TODO: finish\n if (\"match\" in nav) {\n return {\n group: \"\",\n items: [],\n } as FwSidebarGroupProps\n }\n\n return {\n group: nav.group,\n items: nav.pages?.map((p) => {\n // @ts-ignore\n return mapItems(p, nav, filteredNav)\n }) || [],\n } as FwSidebarGroupProps\n }) || []\n\n return {\n groups,\n breadcrumbs,\n navlinks\n }\n}\n\nfunction mapNavToLinks(\n page: string | Sidebar,\n currentNav: Sidebar,\n nav: Sidebar[],\n frontmatters: PageFrontMatter\n): INavLinks | undefined {\n if (!currentNav.group) {\n console.error(\"current nav need group to calculate navlinks\")\n return\n }\n\n const currentPageIndex = currentNav?.pages?.findIndex(p => page === p)\n const foundPageIndex = currentPageIndex != undefined && currentPageIndex !== -1\n\n if (!foundPageIndex) {\n return\n }\n\n let prev = currentNav?.pages?.[currentPageIndex - 1]\n let next = currentNav?.pages?.[currentPageIndex + 1]\n\n if (prev && next) {\n if (typeof prev !== \"string\" || typeof next !== \"string\") {\n console.error(\"currently nested pages for navlinks are not supported (step 1)\")\n return\n }\n\n const prevTitle = frontmatters[prev]?.title || \"\"\n const nextTitle = frontmatters[next]?.title || \"\"\n\n // prev and next found on same nav (pages)\n return {\n prev: {\n // @ts-ignore\n title: prevTitle,\n href: safePageLink(prev),\n },\n next: {\n // @ts-ignore\n title: nextTitle,\n href: safePageLink(next),\n }\n }\n }\n\n const currentNavPosition = nav.findIndex(n => n.group === currentNav.group)\n const foundNavIndex = currentNavPosition != undefined && currentNavPosition !== -1\n\n if (!foundNavIndex) {\n return\n }\n\n // search prev in previous nav\n if (!prev) {\n const prevNav = nav[currentNavPosition - 1]\n\n if (prevNav) {\n const prevNavLastPge = prevNav?.pages?.[prevNav.pages.length - 1]\n\n if (typeof prevNavLastPge != \"string\") {\n console.error(\"currently nested pages for navlinks are not supported (step 2)\")\n } else {\n prev = prevNavLastPge\n }\n }\n }\n\n // search next in next nav\n if (!next) {\n const nextNav = nav[currentNavPosition + 1]\n\n if (nextNav) {\n const nextNavFirstPage = nextNav?.pages?.[0]\n\n if (typeof nextNavFirstPage != \"string\") {\n console.error(\"currently nested pages for navlinks are not supported (step 3)\")\n } else {\n next = nextNavFirstPage\n }\n }\n }\n\n\n if (!prev) {\n if (typeof next == \"string\") {\n const nextTitle = frontmatters[next]?.title || \"\"\n\n return {\n next: {\n // @ts-ignore\n title: nextTitle,\n href: safePageLink(next),\n },\n }\n } else {\n console.error(\"currently nested pages for navlinks are not supported (step 4)\")\n }\n }\n\n if (!next) {\n if (typeof prev == \"string\") {\n const nextTitle = frontmatters[prev]?.title || \"\"\n\n return {\n prev: {\n // @ts-ignore\n title: nextTitle,\n href: safePageLink(prev),\n },\n }\n } else {\n console.error(\"currently nested pages for navlinks are not supported (step 5)\")\n }\n }\n\n if (typeof prev !== \"string\" || typeof next !== \"string\") {\n console.error(\"currently nested pages for navlinks are not supported (step 6)\")\n return\n }\n\n const prevTitle = frontmatters[prev]?.title || \"\"\n const nextTitle = frontmatters[next]?.title || \"\"\n\n return {\n prev: {\n // @ts-ignore\n title: prevTitle,\n href: safePageLink(prev),\n },\n next: {\n // @ts-ignore\n title: nextTitle,\n href: safePageLink(next),\n }\n }\n}\n"],"mappings":"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","names":["_a","prevTitle","nextTitle"]}
|
package/dist/index.d.mts
DELETED
package/dist/index.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/react.d.mts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import * as _xyd_js_core from '@xyd-js/core';
|
|
3
|
-
import { Settings } from '@xyd-js/core';
|
|
4
|
-
import { ITOC, IBreadcrumb, INavLinks } from '@xyd-js/ui';
|
|
5
|
-
import { F as FwSidebarGroupProps } from './sidebar-Dwf54qYp.mjs';
|
|
6
|
-
|
|
7
|
-
declare function FwNav({ kind }: {
|
|
8
|
-
kind?: "middle";
|
|
9
|
-
}): React.JSX.Element;
|
|
10
|
-
declare function FwSubNav(): React.JSX.Element | null;
|
|
11
|
-
interface FwSidebarGroupsProps {
|
|
12
|
-
onePathBehaviour?: boolean;
|
|
13
|
-
clientSideRouting?: boolean;
|
|
14
|
-
}
|
|
15
|
-
declare function FwSidebarGroups(props: FwSidebarGroupsProps): React.JSX.Element;
|
|
16
|
-
declare function FwToc(): React.JSX.Element | null;
|
|
17
|
-
declare function FwBreadcrumbs(): React.JSX.Element;
|
|
18
|
-
declare function FwNavLinks(): React.JSX.Element | null;
|
|
19
|
-
|
|
20
|
-
interface FrameworkProps {
|
|
21
|
-
children: React.ReactNode;
|
|
22
|
-
settings: Settings;
|
|
23
|
-
sidebarGroups: FwSidebarGroupProps[];
|
|
24
|
-
toc?: ITOC[];
|
|
25
|
-
breadcrumbs?: IBreadcrumb[];
|
|
26
|
-
navlinks?: INavLinks;
|
|
27
|
-
}
|
|
28
|
-
declare function Framework(props: FrameworkProps): React.JSX.Element;
|
|
29
|
-
|
|
30
|
-
declare function useMatchedSubNav(): _xyd_js_core.SubHeader | null;
|
|
31
|
-
|
|
32
|
-
export { Framework, type FrameworkProps, FwBreadcrumbs, FwNav, FwNavLinks, FwSidebarGroupProps, FwSidebarGroups, type FwSidebarGroupsProps, FwSubNav, FwToc, useMatchedSubNav };
|