@xyd-js/framework 0.1.0-build.189

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../packages/react/components/FwBanner.tsx","../packages/react/contexts/framework.tsx","../packages/react/components/Surfaces.tsx","../packages/react/components/FwBreadcrumbs.tsx","../packages/react/components/FwCopyPage.tsx","../packages/react/components/FwJsonComponent.tsx","../packages/react/components/FwLink.tsx","../packages/react/utils/isExternal.ts","../packages/react/utils/pageLink.ts","../packages/react/utils/trailingSlash.ts","../packages/react/components/FwLogo.tsx","../packages/react/hooks/useActiveMatchedSubNav.ts","../packages/react/hooks/useMatchedSegment.ts","../packages/react/hooks/useTabSegments.ts","../packages/react/hooks/useMatchedSubNav.ts","../packages/react/hooks/useActivePage.ts","../packages/react/hooks/useActivePageRoute.ts","../packages/react/hooks/useActiveRoute.ts","../packages/react/hooks/useActiveSegment.ts","../packages/react/hooks/useHeaderItems.ts","../packages/react/hooks/useDefaultHeaderItems.ts","../packages/react/hooks/useLogoLink.ts","../packages/react/hooks/useMatchedSegmentSidebarDropdown.ts","../packages/react/components/FwNav.tsx","../packages/react/components/FwHeaderItems.tsx","../packages/react/components/WebEditorComponent.tsx","../packages/react/components/FwNavLinks.tsx","../packages/react/components/FwSidebar.tsx","../packages/react/lib/FooSidebar.tsx","../packages/react/components/FwSidebarNavigationItem.tsx","../packages/react/components/FwSidebarTabsDropdown.tsx","../packages/react/components/FwSidebarTopAnchors.tsx","../packages/react/components/FwWebEditorSidebarTop.tsx","../packages/react/components/FwSidebarMobileHeaderItems.tsx","../packages/react/components/FwSidebarTree.tsx","../packages/react/components/FwSidebarItem.tsx","../packages/react/components/FwSubNav.tsx","../packages/react/components/FwToc.tsx"],"sourcesContent":["import React from \"react\"\n\nimport { Banner } from \"@xyd-js/components/writer\"\n\nimport { useBannerContent, useSettings } from \"../contexts/framework\"\n\nexport function FwBanner() {\n const BannerContent = useBannerContent()\n const settings = useSettings()\n\n const BannerComponent = settings?.components?.banner?.kind === \"secondary\" ? Banner.Secondary : Banner\n\n if (!BannerContent) {\n return null\n }\n\n return <BannerComponent\n label={settings?.components?.banner?.label}\n icon={settings?.components?.banner?.icon}\n href={settings?.components?.banner?.href}\n >\n <BannerContent />\n </BannerComponent>\n}","import React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { useNavigation } from \"react-router\";\n\nimport { Metadata, Settings } from \"@xyd-js/core\";\nimport { Banner } from \"@xyd-js/components/writer\";\nimport { type ITOC, type IBreadcrumb, type INavLinks, ProgressBar } from \"@xyd-js/ui\";\n\nimport { FwSidebarItemProps } from \"../components/FwSidebarItem\";\nimport { SurfaceContext } from \"../components/Surfaces\";\nimport { Surfaces } from \"../../../src\"\n\nexport interface IFramework {\n settings: Readonly<Settings>\n\n sidebarGroups: Readonly<FwSidebarItemProps[]>\n metadata: Readonly<Metadata>\n setMetadata: (metadata: Metadata) => void\n components?: Readonly<{ [componentName: string]: React.ComponentType<any> }>\n BannerContent: React.ComponentType<any> | null\n}\n\nconst framework: IFramework = {\n settings: {},\n metadata: {\n title: \"\",\n },\n sidebarGroups: [],\n setMetadata: () => {\n },\n components: {},\n BannerContent: null,\n}\nconst FrameworkContext = createContext<IFramework>(framework)\n\nexport interface FrameworkProps {\n children: React.ReactNode\n\n settings: Settings,\n metadata: Metadata,\n sidebarGroups: FwSidebarItemProps[],\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?.components?.banner?.kind === \"secondary\" ? Banner.Secondary : Banner\n const appearance = props.settings.theme?.appearance\n\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 BannerContent: props.BannerContent || null,\n }}>\n <SurfaceContext value={{\n surfaces: props.surfaces\n }}>\n <ProgressBar isActive={navigation.state === 'loading'} />\n {BannerContent && !appearance?.banner?.fixed ? <BannerComponent\n label={props.settings?.components?.banner?.label}\n icon={props.settings?.components?.banner?.icon}\n href={props.settings?.components?.banner?.href}\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 ContentOriginal?: (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 ContentOriginal: (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 ContentOriginal: () => <></>,\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 ContentOriginal: props.ContentOriginal || (() => <></>),\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\n// TODO: !!! IN THE FUTURE BETTER API !!!\nexport function useContentOriginal() {\n const ctx = useContext(FrameworkPageContext)\n\n return ctx.ContentOriginal\n}\n\nexport function useAppearance() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.settings.theme?.appearance\n}\n\nexport function useBannerContent() {\n const ctx = useContext(FrameworkContext)\n\n return ctx.BannerContent\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 from \"react\";\n\nimport {Breadcrumbs} from \"@xyd-js/components/writer\";\n\nimport {useBreadcrumbs} from \"../contexts\";\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","import React, { useState } from \"react\";\n\nimport { Button, Icon } from \"@xyd-js/components/writer\";\nimport { useUXEvents } from \"@xyd-js/analytics\";\n\nimport { useRawPage } from \"../contexts\";\n\nexport function FwCopyPage() {\n const [isCopied, setIsCopied] = useState(false)\n\n const rawPage = useRawPage()\n const ux = useUXEvents()\n\n const handleCopy = () => {\n navigator.clipboard.writeText(rawPage || \"\")\n setIsCopied(true)\n ux.docs.copy_page({})\n setTimeout(() => setIsCopied(false), 2000)\n }\n\n // TODO: IconCheck and IconCopy itself\n return <Button icon={isCopied ? <Icon name=\"check\" size={12} /> : <Icon name=\"copy\" size={12} />}\n onClick={handleCopy}>\n Copy page\n </Button>\n}","import React from \"react\";\n\nimport { ComponentLike } from \"@xyd-js/core\";\n\nimport * as WriterComponents from \"@xyd-js/components/writer\";\nimport * as CoderComponents from \"@xyd-js/components/coder\";\nimport * as SystemComponents from \"@xyd-js/components/system\";\n\nimport { useComponents } from \"../contexts\";\n\nexport function FwJsonComponent(args: ComponentLike) {\n const components = useJsonComponents()\n\n if (!args) {\n return null\n }\n\n if (React.isValidElement(args)) {\n return args\n }\n\n // todo: better mechanism?\n if (typeof args === \"string\") {\n return args\n }\n\n if (!args || typeof args !== \"object\") {\n return null\n }\n\n if (!(\"component\" in args)) {\n return null\n }\n\n const { component, props: { children, ...props } = {} } = args\n\n if (!component) {\n return null\n }\n\n let Component = resolveComponent(component, components)\n\n // if (Component && Component.name === \"FwLogo\" || Component.name === \"a\") {\n // console.log(props, 3333, Component.name);\n // return <Component {...props}>\n // {renderChildren(children)}\n // </Component>\n // }\n\n // if (Component) {\n // console.log(Component, 33333, Component.name);\n // }\n\n if (Component) {\n // console.log(props, 3333, Component.name);\n return <Component {...props}>\n {renderChildren(children)}\n </Component>\n }\n\n // Fallback: try to use component as a direct React component\n Component = component\n\n return <Component {...props} >\n {renderChildren(children)}\n </Component>\n}\n\nfunction useJsonComponents() {\n const customComponents = useComponents()\n\n // Track component sources to handle conflicts properly\n const componentSources = new Map<string, string>()\n const components: Record<string, any> = {}\n\n // Process each component set\n const componentSets = [\n {\n group: \"Writer\",\n components: WriterComponents\n },\n {\n group: \"Coder\",\n components: CoderComponents\n },\n {\n group: \"System\",\n components: SystemComponents\n },\n {\n group: \"Custom\",\n components: customComponents || {}\n }\n ]\n\n componentSets.forEach(componentSet => {\n Object.entries(componentSet.components).forEach(([name, component]) => {\n // Validate component name starts with capital letter\n if (name.charAt(0) !== name.charAt(0).toUpperCase()) {\n return\n }\n\n // Validate component is a function\n if (typeof component !== 'function') {\n return\n }\n\n if (name in components) {\n // Conflict detected - both components need to be renamed with their group prefixes\n const existingComponent = components[name]\n const existingGroup = componentSources.get(name) || \"Custom\"\n \n // Remove the existing component and add it back with group prefix\n delete components[name]\n components[`${existingGroup}.${name}`] = existingComponent\n \n // Add the new component with its group prefix\n components[`${componentSet.group}.${name}`] = component\n \n console.debug(`Component name conflict resolved: ${name} -> ${existingGroup}.${name} and ${componentSet.group}.${name}`)\n } else {\n // No conflict, add the component normally\n components[name] = component\n componentSources.set(name, componentSet.group)\n }\n })\n })\n\n return components\n}\n\n// Helper function to recursively render children\nfunction renderChildren(children: any): React.ReactNode {\n if (!children) {\n return null\n }\n\n // Handle arrays\n if (Array.isArray(children)) {\n return children.map((child, index) => (\n <FwJsonComponent key={index} {...child} />\n ))\n }\n\n // Handle component objects\n if (typeof children === \"object\" && children !== null && \"component\" in children) {\n return <FwJsonComponent {...children} />\n }\n\n // Handle strings and other primitive values\n return children\n}\n\n// Helper function to resolve nested component paths like \"Button.Primary\"\nfunction resolveComponent(componentName: string, components: Record<string, any>): any {\n if (!componentName || typeof componentName !== \"string\") {\n return null\n }\n\n // Handle dot notation for nested components\n if (componentName.includes(\".\")) {\n const parts = componentName.split(\".\")\n let current = components\n\n for (const part of parts) {\n if (current && typeof current === \"object\" && part in current) {\n current = current[part]\n } else {\n return null\n }\n }\n\n return current\n }\n\n // Handle direct component lookup\n return components[componentName] || null\n}\n","import React from \"react\";\nimport {Link, To} from \"react-router\";\n\nimport {Anchor} from \"@xyd-js/components/writer\";\n\nimport {isExternal} from \"../utils\";\n\n// TODO: in the future different place?\nexport function FwLink({children, ...rest}) {\n let to: To = \"\"\n let external = false\n\n if (rest.href) {\n try {\n new URL(rest.href)\n to = rest.href\n // Check if it's an external link\n external = isExternal(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\">\n {children}\n </Anchor>\n\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 let pathname = typeof to === \"string\" ? to : to.pathname || \"\";\n\n if (pathname.startsWith(\"/mailto:\")) {\n pathname = fixMailTo(pathname)\n\n to = pathname\n }\n\n if ((rest.href || \"\").startsWith(\"/mailto:\")) {\n rest.href = fixMailTo(rest.href);\n }\n\n return <Anchor\n as={$Link}\n {...rest}\n // @ts-ignore TODO: fix type for `to`\n to={to}\n target={external ? \"_blank\" : rest.target}\n >\n {children}\n </Anchor>\n}\n\nfunction fixMailTo(href: string): string {\n if (href.startsWith(\"/mailto:\")) {\n return href.replace(\"/mailto:\", \"mailto:\")\n }\n\n return href\n}\n\nfunction $Link(props: any) {\n return <Link\n {...props}\n >\n {props.children}\n </Link>\n}\n","export function isExternal(filePath: string) {\n return filePath.startsWith('http://') || filePath.startsWith('https://');\n}","\n// TODO: move to core?\nexport function pageLink(page: string) {\n if (page === \"index\" || page === \"/index\") {\n return \"/\"\n }\n\n if (!page) {\n return \"\"\n }\n\n // If it's an external link (starts with http:// or https://), return it as-is\n if (page.startsWith(\"http://\") || page.startsWith(\"https://\")) {\n return page\n }\n\n return page.startsWith(\"/\") ? page : `/${page}`\n}\n","export function trailingSlash(path: string) {\n return path.endsWith(\"/\") ? path.slice(0, -1) : path\n}\n\n","import React, { isValidElement } from \"react\";\nimport { Link } from \"react-router\";\n\nimport {\n useColorScheme\n} from \"@xyd-js/components/writer\";\n\nimport { useSettings } from \"../contexts\";\nimport { useLogoLink } from \"../hooks\";\n\nexport function FwLogo() {\n const settings = useSettings()\n const [clientColorScheme] = useColorScheme()\n \n const colorScheme = clientColorScheme || settings?.theme?.appearance?.colorScheme || \"light\"\n const logo = settings?.theme?.logo\n\n if (typeof logo === \"string\") {\n return <$Logo src={logo} />\n }\n\n if (isValidElement(logo)) {\n return <$Logo>\n {logo}\n </$Logo>\n }\n\n if (typeof logo === \"object\") {\n return <$Logo src={logo[colorScheme]} />\n }\n\n return null\n}\n\nfunction $Logo({ src, children }: { src?: string, children?: React.ReactNode }) {\n const logoLink = useLogoLink()\n\n return <span part=\"logo\">\n <Link to={logoLink}>\n { src ? <img src={src} /> : children }\n </Link>\n </span>\n}","import { useLocation, useMatches } from \"react-router\";\n\nimport { pageLink, trailingSlash } from \"../utils\";\nimport { useMatchedSubNav } from \"./useMatchedSubNav\";\n\nexport function useActiveMatchedSubNav() {\n const location = useLocation()\n const matchedSubnav = useMatchedSubNav()\n const matches = useMatches()\n\n const pathname = trailingSlash(location.pathname)\n\n const lastMatch = matches[matches.length - 1]\n const isIndex = lastMatch?.pathname === \"/\"\n\n // TODO: in the future routing props from settings like {match: \"/docs/api/browser\"}\n return matchedSubnav?.pages?.filter(p => typeof p.page === \"string\").findLast(item => {\n if (isIndex) {\n return item.page === \"index\"\n }\n\n return pathname.startsWith(pageLink(item.page || \"\"))\n })\n}\n","import { useMatches } from \"react-router\";\n\nimport { Segment } from \"@xyd-js/core\";\n\nimport { useSettings } from \"../contexts\";\n\n// TODO: better data structures\nexport function useMatchedSegment(): Segment | null {\n const settings = useSettings()\n const matches = useMatches()\n\n const lastMatchId = matches[matches.length - 1]?.id\n\n const matchedSegment = settings.navigation?.segments\n ?.find(item => item.pages?.find(page => {\n return sanitizeUrl(page.page || \"\") === sanitizeUrl(lastMatchId)\n }))\n\n\n return matchedSegment || null\n}\n\nfunction sanitizeUrl(url: string) {\n if (url.startsWith(\"/\")) {\n return url\n }\n\n return `/${url}`\n}\n","import { Segment } from \"@xyd-js/core\";\n\nimport { useSettings } from \"../contexts\";\n\n// TODO: better data structures\nexport function useTabSegments(): Segment | null {\n const settings = useSettings()\n\n const tabs = settings.navigation?.tabs || []\n\n if (tabs?.length) {\n return {\n route: \"\",\n title: \"\",\n pages: tabs,\n }\n }\n\n return null\n}\n\n","import { Segment } from \"@xyd-js/core\";\n\nimport { useMatchedSegment } from \"./useMatchedSegment\";\nimport { useTabSegments } from \"./useTabSegments\";\nimport { useAppearance } from \"../contexts\";\n\n// TODO: better data structures\nexport function useMatchedSubNav(): Segment | null {\n const matchedSegment = useMatchedSegment()\n const tabSegments = useTabSegments()\n const appearance = useAppearance()\n\n if (\n (\n appearance?.tabs?.surface === \"center\" ||\n appearance?.tabs?.surface === \"sidebar\"\n ) && !matchedSegment\n ) {\n return null\n }\n\n if (!matchedSegment || matchedSegment.appearance === \"sidebarDropdown\") {\n return tabSegments\n }\n\n return matchedSegment || null\n}\n\n","import { useMatches } from \"react-router\";\n\nimport { useSettings } from \"../contexts\";\nimport { pageLink } from \"../utils\";\nimport { useMatchedSubNav } from \"./useMatchedSubNav\";\n\nexport function useActivePage(match: boolean = false) {\n const matches = useMatches()\n const matchedSubnav = useMatchedSubNav()\n const settings = useSettings()\n\n const lastMatch = matches[matches.length - 1]\n\n const navigationItems = [\n ...(settings?.navigation?.tabs || []),\n ...(settings?.navigation?.sidebarDropdown || []),\n ...(settings?.webeditor?.header || [])\n ]\n\n const isIndex = lastMatch?.pathname === \"/\"\n\n let active = navigationItems.find(item => {\n if (isIndex) {\n return item.page === \"index\"\n }\n\n if (matchedSubnav) {\n const routeMatch = pageLink(item.page || \"\") === pageLink(matchedSubnav?.route)\n\n if (routeMatch) {\n return routeMatch\n }\n\n if (match) {\n const pageMatch = matchedSubnav?.pages.findLast(page => {\n if (!page.page) {\n return false\n }\n\n return pageLink(lastMatch?.id).startsWith(pageLink(page.page || \"\"))\n })\n \n return pageLink(pageMatch?.page || \"\") === pageLink(item.page || \"\")\n }\n\n return false\n }\n\n return pageLink(item.page || \"\") === lastMatch?.id\n })\n\n if (!active && !matchedSubnav && match) {\n active = navigationItems.findLast(item => {\n if (!item.page) {\n return false\n }\n\n return pageLink(lastMatch?.id).startsWith(pageLink(item.page || \"\"))\n })\n }\n\n return active?.page || \"\"\n}","import { useMatches } from \"react-router\";\n\nimport { Navigation, SidebarRoute, Sidebar } from \"@xyd-js/core\";\n\nimport { useSettings } from \"../contexts\";\nimport { pageLink } from \"../utils\";\nimport { useMatchedSubNav } from \"./useMatchedSubNav\";\n\nexport function useActivePageRoute(match: boolean = false) {\n const matches = useMatches()\n const matchedSubnav = useMatchedSubNav()\n const settings = useSettings()\n\n const lastMatch = matches[matches.length - 1]\n\n // Extract SidebarRoute items from sidebar structure\n const sidebarRoutes = extractSidebarRoutes(settings?.navigation?.sidebar || []);\n \n let active = sidebarRoutes.find(item => {\n if (matchedSubnav) {\n const routeMatch = pageLink(item.route || \"\") === pageLink(matchedSubnav?.route)\n\n if (routeMatch) {\n return routeMatch\n }\n\n if (match) {\n const pageMatch = matchedSubnav?.pages.findLast(page => {\n if (!page.page) {\n return false\n }\n\n return pageLink(lastMatch?.id).startsWith(pageLink(page.page || \"\"))\n })\n\n return pageLink(pageMatch?.page || \"\") === pageLink(item.route || \"\")\n }\n\n return false\n }\n\n return pageLink(item.route || \"\") === lastMatch?.id\n })\n\n if (!active && !matchedSubnav && match) {\n active = sidebarRoutes.findLast(item => {\n if (!item.route) {\n return false\n }\n\n return pageLink(lastMatch?.id).startsWith(pageLink(item.route || \"\"))\n })\n }\n\n return active || null\n}\n\n// Helper function to extract SidebarRoute items from sidebar structure\nfunction extractSidebarRoutes(sidebar: Navigation['sidebar']): SidebarRoute[] {\n const items: SidebarRoute[] = [];\n\n if (!sidebar) return items;\n\n for (const sidebarItem of sidebar) {\n if (typeof sidebarItem === 'object' && 'pages' in sidebarItem) {\n // Check if this is a wrapper object with pages containing SidebarRoute objects\n const wrapper = sidebarItem as { pages: any[] };\n for (const page of wrapper.pages) {\n if (typeof page === 'object' && 'route' in page && 'pages' in page) {\n items.push(page as SidebarRoute);\n }\n }\n }\n }\n\n return items;\n}\n\n","import { useMatches } from \"react-router\";\n\nimport { useSettings } from \"../contexts\";\nimport { pageLink } from \"../utils\";\n\n// TODO: in the future nested routes\nexport function useActiveRoute() {\n const matches = useMatches()\n const settings = useSettings()\n\n const lastMatch = matches[matches.length - 1]\n\n const activeRoute = settings?.navigation?.sidebar?.find(item => {\n if (typeof item === \"object\" && \"route\" in item) {\n return pageLink(lastMatch?.id || \"\") === pageLink(item.route || \"\")\n }\n\n return false\n })\n\n\n if (typeof activeRoute === \"object\" && \"route\" in activeRoute) {\n return activeRoute\n }\n\n return null\n}","import { useLocation } from \"react-router\";\nimport { pageLink, trailingSlash } from \"../utils\";\nimport { useMatchedSegment } from \"./useMatchedSegment\";\n\nexport function useActiveSegment() {\n const location = useLocation()\n const pathname = trailingSlash(location.pathname)\n const matchedSegment = useMatchedSegment()\n\n const active = matchedSegment?.pages?.findLast(item => {\n return pathname.startsWith(pageLink(item.page || \"\"))\n })\n\n return active?.page || \"\"\n}\n","import { WebEditorHeader } from \"@xyd-js/core\";\n\nimport { useSettings } from \"../contexts\";\n\nexport function useHeaderItems() {\n const settings = useSettings()\n\n const header = settings?.webeditor?.header || []\n\n const headerMap = header.reduce<Record<string, WebEditorHeader[]>>((acc, item) => {\n const float = item.float || \"default\";\n return {\n ...acc,\n [float]: [...(acc[float] || []), item]\n };\n }, {});\n\n return {\n default: headerMap[\"default\"] || [],\n center: headerMap[\"center\"] || [],\n right: headerMap[\"right\"] || [],\n }\n}","import { useHeaderItems } from \"./useHeaderItems\";\n\nexport function useDefaultHeaderItems() {\n const headerItems = useHeaderItems()\n\n return headerItems.default\n}","import {pageLink} from \"../utils\";\nimport {useSettings} from \"../contexts\";\n\nexport function useLogoLink() {\n const settings = useSettings()\n\n const logo = settings?.theme?.logo\n\n if (!logo) {\n return \"/\"\n }\n\n let to = \"/\"\n\n if (typeof logo === \"object\" && (\"page\" in logo || \"href\" in logo)) {\n return pageLink(logo.href || logo.page || \"/\")\n }\n\n return to\n}","import { Segment } from \"@xyd-js/core\";\n\nimport { useMatchedSegment } from \"./useMatchedSegment\";\n\n// TODO: better data structures\nexport function useMatchedSegmentSidebarDropdown(): Segment | null {\n const matchedSegment = useMatchedSegment()\n if (!matchedSegment) {\n return null\n }\n\n if (matchedSegment.appearance === \"sidebarDropdown\") {\n return matchedSegment\n }\n\n return null\n}\n\n","import React, { } from \"react\";\n\nimport { Nav } from \"@xyd-js/ui\"\nimport {\n ColorSchemeButton,\n} from \"@xyd-js/components/writer\";\nimport { LayoutPrimary } from \"@xyd-js/components/layouts\";\n\nimport { SurfaceTarget } from \"../../../src\";\nimport { useActivePage, useDefaultHeaderItems } from \"../hooks\";\nimport { Surface } from \"./Surfaces\";\nimport { FwLogo } from \"./FwLogo\";\nimport { FwHeaderItem, FwHeaderItems } from \"./FwHeaderItems\";\nimport { useAppearance } from \"../contexts\";\nimport { WebEditorComponent } from \"./WebEditorComponent\";\n\n// TODO: renamte to FwHeader ?\nexport function FwNav() {\n const activeHeaderPage = useActivePage()\n const appearance = useAppearance()\n\n const Header = FwHeaderItems()\n const logo = appearance?.logo?.header ? <WebEditorComponent.NavItemRaw\n device={appearance?.logo?.header}\n >\n <FwLogo />\n </WebEditorComponent.NavItemRaw> : null\n\n // TODO: in the future better floating system - just pure css?\n return <Nav\n appearance={{\n separator: appearance?.header?.separator || undefined\n }}\n logo={logo}\n centerSurface={\n Header?.center?.length ? <>\n <Nav.Tabs\n value={activeHeaderPage}\n >\n {Header.center}\n </Nav.Tabs>\n </> : null\n }\n rightSurface={<>\n {\n Header?.right?.length\n ? <Nav.Tabs\n value={activeHeaderPage}\n >\n {Header.right}\n </Nav.Tabs>\n : null\n }\n\n <Surface target={SurfaceTarget.NavRight} />\n </>\n }\n floatRightSurface={<>\n <Nav.ItemRaw>\n <ColorSchemeButton />\n </Nav.ItemRaw>\n <Nav.ItemRaw>\n <LayoutPrimary.Hamburger />\n </Nav.ItemRaw>\n </>}\n >\n <FwNav.DefaultItems />\n </Nav>\n}\n\nFwNav.DefaultItems = function DefaultItems() {\n const activeHeaderPage = useActivePage()\n const defaultItems = useDefaultHeaderItems()\n\n const items = defaultItems.map(FwHeaderItem)\n\n return <Nav.Tabs\n value={activeHeaderPage}\n >\n {items}\n </Nav.Tabs>\n}\n\n","import React from \"react\";\n\nimport { WebEditorHeader } from \"@xyd-js/core\";\nimport { Icon } from \"@xyd-js/components/writer\";\nimport { Nav } from \"@xyd-js/ui\"\n\nimport { isExternal, pageLink } from \"../utils\";\nimport { useAppearance } from \"../contexts\";\nimport { FwLink } from \"../components\";\nimport { useHeaderItems } from \"../hooks\";\nimport { WebEditorComponent } from \"./WebEditorComponent\";\n\nexport function FwHeaderItems() {\n const headerItems = useHeaderItems()\n\n return Object.entries(headerItems).reduce<Record<\"default\" | \"center\" | \"right\", React.ReactNode[]>>((acc, [key, value]) => {\n const headerItems = value.map(FwHeaderItem)\n\n return {\n ...acc,\n [key]: headerItems\n }\n }, {\n default: [],\n center: [],\n right: [],\n })\n}\n\nexport function FwHeaderItem(props: WebEditorHeader) {\n const appearance = useAppearance()\n\n let href: string | null = null\n\n if (typeof props.href === \"string\") {\n href = pageLink(props.href)\n }\n\n if (!href && typeof props.page === \"string\") {\n href = pageLink(props.page)\n }\n\n const isExternalArrow = !props.component && appearance?.header?.externalArrow && isExternal(href || \"\") ? true : false;\n\n const WebEditorHeader = WebEditorComponent(Nav.Item, {\n key: props.page || \"\",\n href: href,\n value: props.href ? undefined : props.page,\n as: FwLink,\n }, props.title)\n\n return <WebEditorHeader\n {...props}\n key={keyId(props)}\n >\n {isExternalArrow ? <Icon.ExternalArrow /> : null}\n </WebEditorHeader>\n}\n\n\nfunction keyId(props: WebEditorHeader) {\n return `${props?.component || \".\"}-${props?.title || props?.href || \".\"}`\n}","import React from \"react\";\n\nimport { WebEditorNavigationItem } from \"@xyd-js/core\";\nimport { Nav, UISidebar } from \"@xyd-js/ui\";\n\nimport { FwJsonComponent } from \"./FwJsonComponent\";\n\ninterface WebEditorComponentInner extends WebEditorNavigationItem {\n children?: React.ReactNode\n device?: \"mobile\" | \"desktop\" | boolean\n}\n\nexport function WebEditorComponent(\n Component: React.ComponentType<React.ComponentProps<typeof UISidebar.Item>>,\n componentProps?: Partial<React.ComponentProps<typeof UISidebar.Item>>,\n defaultValue?: string\n) {\n\n return function WebEditorComponentInner(props: WebEditorComponentInner) {\n let dataTags = {}\n\n if (props.device === \"mobile\" || (props.mobile && !props.desktop)) {\n dataTags[\"data-mobile\"] = true\n }\n if (props.device === \"desktop\" || (props.desktop && !props.mobile)) {\n dataTags[\"data-desktop\"] = true\n }\n\n const content = (\n <Component\n {...componentProps}\n {...dataTags}\n >\n {\n props.component ? <FwJsonComponent\n component={props.component || \"\"}\n props={{\n ...props.props,\n children: props.props?.children,\n }}\n /> : defaultValue\n }\n {props.children}\n </Component>\n )\n\n // Only wrap in div if dataTags has properties\n return Object.keys(dataTags).length > 0 ? (\n <div {...dataTags}>\n {content}\n </div>\n ) : content\n }\n}\n\nWebEditorComponent.SidebarItem = WebEditorComponent(UISidebar.Item, { button: false, ghost: true })\nWebEditorComponent.NavItemRaw = WebEditorComponent(Nav.ItemRaw)\nWebEditorComponent.SidebarItemButton = WebEditorComponent(UISidebar.Item, { button: true, ghost: true })\n","import React from \"react\";\nimport {NavLinks} from \"@xyd-js/components/writer\";\n\nimport {useNavLinks} from \"../contexts\";\nimport {FwLink} from \"./FwLink\";\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={FwLink}\n />\n }\n\n return null\n}\n","import React, { } from \"react\";\n\nimport { UISidebar } from \"@xyd-js/ui\"\n\nimport { SurfaceTarget } from \"../../../src\";\nimport { useAppearance, useSettings, } from \"../contexts\";\n\nimport { Surface } from \"./Surfaces\";\nimport { FooSidebar } from \"../lib\";\nimport { FwSidebarNavigationItem } from \"./FwSidebarNavigationItem\";\nimport { FwSidebarTabsDropdown } from \"./FwSidebarTabsDropdown\";\nimport { FwSidebarTopAnchors } from \"./FwSidebarTopAnchors\";\nimport { FwWebEditorSidebarTop } from \"./FwWebEditorSidebarTop\";\nimport { FwSidebarMobileHeaderItems } from \"./FwSidebarMobileHeaderItems\";\nimport { useSidebarTree } from \"./FwSidebarTree\";\nimport { FwLogo } from \"./FwLogo\";\n\nconst Sidebar = withSidebar(UISidebar)\n\nexport interface FwSidebarProps {\n}\n\nexport function FwSidebar(props: FwSidebarProps) {\n const settings = useSettings()\n const appearance = useAppearance()\n\n // TODO: active state for footer items?\n const sidebarFooterAnchors = settings.navigation?.anchors?.sidebar?.bottom?.map(FwSidebarNavigationItem)\n\n return <Sidebar\n footerItems={sidebarFooterAnchors && sidebarFooterAnchors}\n scrollShadow={appearance?.sidebar?.scrollShadow}\n scrollTransition={appearance?.sidebar?.scrollTransition}\n >\n <Surface target={SurfaceTarget.SidebarTop} />\n\n <FwSidebarTopAnchors />\n\n <FwWebEditorSidebarTop />\n\n <FwSidebarMobileHeaderItems />\n\n <FwSidebarTabsDropdown />\n </Sidebar>\n}\n\n\nexport function withSidebar<P extends {\n children?: React.ReactNode\n}>(Component: React.ComponentType<P>) {\n // TODO: better API for elements like logo search\n return function WithSidebarContent(props: P) {\n const [sidebarTree, sidebarTreeFlags] = useSidebarTree()\n const { children, ...rest } = props\n\n return <FooSidebar\n initialActiveItems={sidebarTreeFlags.initialActiveItems}\n >\n <Component {...rest as P}>\n {children}\n {sidebarTree}\n </Component>\n </FooSidebar>\n }\n}\n","import React, {createContext, useContext, useState, useEffect} from \"react\";\nimport {useNavigation} from \"react-router\";\n\n// TODO: better interface\nexport interface FooSidebarItemProps {\n readonly uniqIndex: number\n\n readonly level?: number\n\n readonly groupIndex?: number\n\n readonly itemIndex?: number\n}\n\ninterface IFooSidebarContext {\n active: (item: FooSidebarItemProps) => [boolean, () => void],\n}\n\nconst FooSidebarContext = createContext<IFooSidebarContext>({\n active: () => [false, () => {\n }],\n})\n\ninterface FooSidebarProps {\n children: React.ReactNode,\n initialActiveItems: any[]\n}\n\nexport function FooSidebar(props: FooSidebarProps) {\n const {children, initialActiveItems} = props\n\n const groupBehaviour = useDefaultBehaviour(initialActiveItems) // TODO: support different behaviours?\n\n return <FooSidebarContext value={{\n active: groupBehaviour,\n }}>\n {children}\n </FooSidebarContext>\n}\n\nexport function useFooSidebar() {\n return useContext(FooSidebarContext)\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: FooSidebarItemProps) {\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: FooSidebarItemProps) {\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: FooSidebarItemProps) {\n const key = itemId(item);\n\n return activeItems.get(key) || false;\n }\n\n return (item: FooSidebarItemProps): [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: FooSidebarItemProps) {\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 React from \"react\";\n\nimport { NavigationItem } from \"@xyd-js/core\";\nimport { Icon } from \"@xyd-js/components/writer\";\nimport { UISidebar } from \"@xyd-js/ui\";\n\nimport { useAppearance } from \"../contexts\";\n\nexport function FwSidebarNavigationItem(item: NavigationItem) {\n const appearance = useAppearance()\n\n return <UISidebar.Item\n href={item.page || item.href}\n icon={React.isValidElement(item.icon) ? item.icon : <Icon name={item.icon || \"\"} />}\n key={keyId(item)}\n >\n <UISidebar.ItemBody\n title={item.title}\n right={appearance?.sidebar?.externalArrow && <Icon.ExternalArrow />}\n />\n </UISidebar.Item>\n}\n\nfunction keyId(props: NavigationItem) {\n return `${props?.title || props?.href || \".\"}-${props.page || \"\"}`\n}","import React from \"react\"\n\nimport { useSettings } from \"../contexts\"\n\nimport { Icon } from \"@xyd-js/components/writer\"\nimport { SidebarTabsDropdown, UISidebar } from \"@xyd-js/ui\"\n\nimport { useActivePage, useActiveSegment, useMatchedSegmentSidebarDropdown } from \"../hooks\"\nimport { NavigationItem } from \"@xyd-js/core\"\n\nexport function FwSidebarTabsDropdown() {\n const settings = useSettings()\n\n const activeSegment = useActiveSegment()\n const matchedSegmentSidebarDropdown = useMatchedSegmentSidebarDropdown()\n\n const activePage = useActivePage(true)\n\n const sidebarDropdown = settings.navigation?.sidebarDropdown || []\n\n return <UISidebar.ItemGroup>\n <$NavigationItemsSidebarTabs\n active={activePage || \"\"}\n items={sidebarDropdown || []}\n />\n\n <$NavigationItemsSidebarTabs\n active={activeSegment || \"\"}\n items={matchedSegmentSidebarDropdown?.pages || []}\n />\n </UISidebar.ItemGroup>\n}\n\nfunction $NavigationItemsSidebarTabs({ items, active }: { items: NavigationItem[], active?: string }) {\n if (!items?.length) {\n return null\n }\n\n return <SidebarTabsDropdown\n options={items.map(item => ({\n label: item.title ?? \"\",\n description: item.description,\n value: item.page || item.href || \"\",\n icon: item.icon ? <Icon name={item.icon} size={18} /> : null\n }))}\n value={active || \"\"}\n />\n}","import React from \"react\"\n\nimport { useSettings } from \"../contexts\"\nimport { FwSidebarNavigationItem } from \"./FwSidebarNavigationItem\"\n\nexport function FwSidebarTopAnchors() {\n const settings = useSettings()\n\n const sidebarTopAnchors = settings?.navigation?.anchors?.sidebar?.top?.map(FwSidebarNavigationItem)\n\n return sidebarTopAnchors\n}","import React from \"react\"\n\nimport { useSettings } from \"../contexts\"\nimport { WebEditorComponent } from \"./WebEditorComponent\"\nimport { WebEditorNavigationItem } from \"@xyd-js/core\"\n\nexport function FwWebEditorSidebarTop() {\n const settings = useSettings()\n\n const webEditorSidebarTop = settings?.webeditor?.sidebarTop?.map((props, index) => {\n if (props.component) {\n return <WebEditorComponent.SidebarItemButton\n key={keyId(props, index)}\n {...props}\n />\n }\n\n return <WebEditorComponent.SidebarItem\n key={keyId(props, index)}\n {...props}\n />\n })\n\n return webEditorSidebarTop\n}\n\nfunction keyId(props: WebEditorNavigationItem, index: number) {\n return `${props?.component || \".\"}-${props?.title || props?.href || \".\"}-${index}`\n}","import React from \"react\"\n\nimport { useHeaderItems } from \"../hooks\"\nimport { FwSidebarNavigationItem } from \"./FwSidebarNavigationItem\"\n\nexport function FwSidebarMobileHeaderItems() {\n const headerItems = useHeaderItems()\n\n const headerLeftItems = headerItems?.default?.map(FwSidebarNavigationItem)\n const headerRightItems = headerItems?.right?.map(FwSidebarNavigationItem)\n\n const mergedHeaderItems = [...headerLeftItems, ...headerRightItems]\n\n if (!mergedHeaderItems?.length) {\n return null\n }\n\n return <div data-mobile>\n {mergedHeaderItems}\n </div>\n}","import React, {} from \"react\";\nimport {useLocation} from \"react-router\";\n\nimport {useSidebarGroups} from \"../contexts\";\nimport {trailingSlash} from \"../utils\";\n\nimport {FwSidebarItem, FwSidebarItemElementProps} from \"./FwSidebarItem\";\n\nexport function useSidebarTree(): [React.ReactElement[], { initialActiveItems: any[] }] {\n const location = useLocation()\n const groups = useSidebarGroups()\n\n const pathname = trailingSlash(location.pathname)\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 const sidebarTree = groups?.map((group, index) => <FwSidebarItem\n key={index + group.group}\n {...group}\n groupIndex={index}\n />) || []\n\n return [sidebarTree, {initialActiveItems}]\n}\n\nfunction recursiveSearch(items: FwSidebarItemElementProps[], 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","import React, { } from \"react\"\n\nimport { Metadata } from \"@xyd-js/core\";\nimport { Icon } from \"@xyd-js/components/writer\";\nimport { UISidebar } from \"@xyd-js/ui\";\n\n\nimport { Surface } from \"./Surfaces\";\nimport { FooSidebarItemProps, useFooSidebar } from \"../lib\";\n\nexport interface FwSidebarItemProps {\n group: string\n\n groupIndex: number\n\n items: FwSidebarItemElementProps[]\n\n icon?: string\n}\n\nexport function FwSidebarItem(props: FwSidebarItemProps) {\n const icon = props.icon ? <Icon name={props.icon || \"\"} size={16} /> : null\n\n return <>\n {\n props.group && <UISidebar.ItemHeader icon={icon}>\n {props.group}\n </UISidebar.ItemHeader>\n }\n\n {props.items.map((item, index) => <FwSidebarItem.Item\n uniqIndex={item.uniqIndex}\n group={item.group}\n groupIndex={props.groupIndex}\n level={0}\n itemIndex={index}\n key={index + item.href}\n title={item.title}\n sidebarTitle={item.sidebarTitle}\n url={item.url}\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 FwSidebarItemElementProps extends FooSidebarItemProps {\n title: string\n\n group?: false\n\n href: string\n\n icon?: string\n\n sidebarTitle?: string\n\n items?: FwSidebarItemElementProps[]\n\n active?: boolean\n\n url?: string\n\n pageMeta?: Metadata\n}\n\nFwSidebarItem.Item = function FwSidebarItem(props: FwSidebarItemElementProps) {\n const { active } = useFooSidebar()\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.url || props.href}\n active={isActiveItem}\n isParentActive={isParentActive}\n onClick={handleClick}\n icon={icon}\n group={props.group}\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\n {props.url && <Icon.ExternalArrow />}\n\n <Surface\n target=\"sidebar.item.right\"\n props={{\n active: isActiveItem,\n pageMeta: props.pageMeta,\n }}\n />\n </div>\n\n {\n props.group === false && props.items?.length && <>\n {\n props.items?.map((item, index) => <FwSidebarItem\n uniqIndex={item.uniqIndex}\n group={item.group}\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 }\n {\n props.group !== false && props.items?.length && <UISidebar.SubTree isOpen={isActive}>\n <>\n {\n props.items?.map((item, index) => <FwSidebarItem\n uniqIndex={item.uniqIndex}\n group={item.group}\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\n","import React from \"react\";\n\nimport { SubNav } from \"@xyd-js/ui\";\n\nimport { pageLink } from \"../utils\";\nimport { useActiveMatchedSubNav, useMatchedSubNav } from \"../hooks\";\nimport { FwLink } from \"./FwLink\";\n\nexport function FwSubNav() {\n const matchedSubnav = useMatchedSubNav()\n const active = useActiveMatchedSubNav()\n\n if (!matchedSubnav) {\n return null\n }\n\n return <SubNav\n title={matchedSubnav?.title || \"\"}\n value={active?.page || \"\"}\n onChange={() => {\n }}\n >\n {matchedSubnav?.pages?.map((item, index) => {\n let href: string | null = null\n\n if (typeof item.href === \"string\") {\n href = pageLink(item.href)\n }\n\n if (!href && typeof item.page === \"string\") {\n href = pageLink(item.page)\n }\n\n return <SubNav.Item\n value={typeof item.page !== \"string\" && href ? href : item.page || \"\"}\n href={href || item.page || \"\"}\n as={FwLink}\n >\n {item.title}\n </SubNav.Item>\n })}\n </SubNav>\n}\n","import React from \"react\";\n\nimport type {ITOC} from \"@xyd-js/ui\";\nimport {Toc} from \"@xyd-js/ui\";\n\nimport {useMetadata, useSettings, useToC} from \"../contexts\";\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?.writer?.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}"],"mappings":"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","names":["React","Banner","React","createContext","useContext","createContext","React","useContext","Banner","React","React","React","React","useState","useState","React","React","React","React","React","React","Link","useMatches","_a","useMatches","useMatches","useMatches","useMatches","useMatches","useMatches","useMatches","useLocation","useLocation","React","Link","React","Nav","React","Icon","Nav","React","React","headerItems","Nav","React","Icon","React","Nav","React","React","React","UISidebar","React","createContext","useContext","useState","useEffect","useNavigation","React","Icon","UISidebar","React","UISidebar","Icon","keyId","React","Icon","UISidebar","React","UISidebar","Icon","React","React","keyId","React","React","React","useLocation","React","Icon","UISidebar","React","Icon","UISidebar","FwSidebarItem","_a","useLocation","React","UISidebar","React","React","React","React","React"]}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+
3
+ declare enum SurfaceTarget {
4
+ NavRight = "nav.right",
5
+ SidebarTop = "sidebar.top",
6
+ PageFooterBottom = "page.footer.bottom",
7
+ SidebarItemLeft = "sidebar.item.left",
8
+ SidebarItemRight = "sidebar.item.right"
9
+ }
10
+ type SurfaceTargetType = SurfaceTarget | `${SurfaceTarget}`;
11
+ interface SurfaceOptions {
12
+ append?: boolean;
13
+ }
14
+ interface ROSurface {
15
+ get(target: SurfaceTargetType): React.JSX.Element | React.JSX.Element[] | undefined;
16
+ }
17
+ declare class Surfaces implements ROSurface {
18
+ private registry;
19
+ define(target: SurfaceTargetType, component: React.JSX.Element | React.ComponentType<any>, // TODO: fix any
20
+ opts?: SurfaceOptions): void;
21
+ get(target: SurfaceTargetType): React.JSX.Element | React.JSX.Element[] | undefined;
22
+ }
23
+
24
+ export { type ROSurface as R, SurfaceTarget as S, type SurfaceTargetType as a, type SurfaceOptions as b, Surfaces as c };
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@xyd-js/framework",
3
+ "version": "0.1.0-build.189",
4
+ "description": "",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ "./package.json": "./package.json",
10
+ "./index.css": "./dist/index.css",
11
+ ".": {
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./hydration": {
15
+ "import": "./dist/hydration.js"
16
+ },
17
+ "./react": {
18
+ "import": "./dist/react.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "package.json",
23
+ "dist"
24
+ ],
25
+ "author": "",
26
+ "dependencies": {},
27
+ "peerDependencies": {
28
+ "react": "^19.1.0",
29
+ "react-dom": "^19.1.0",
30
+ "react-router": "^7.7.1",
31
+ "@xyd-js/ui": "0.1.0-build.173",
32
+ "@xyd-js/content": "0.1.0-build.171",
33
+ "@xyd-js/components": "0.1.0-build.168",
34
+ "@xyd-js/analytics": "0.1.0-build.157",
35
+ "@xyd-js/core": "0.1.0-build.170"
36
+ },
37
+ "devDependencies": {
38
+ "@types/react": "^19.1.0",
39
+ "@types/react-dom": "^19.1.0",
40
+ "@babel/preset-react": "^7.24.7",
41
+ "@mdx-js/rollup": "^3.0.1",
42
+ "@types/node": "22.5.5",
43
+ "rimraf": "^3.0.2",
44
+ "autoprefixer": "^10.4.20",
45
+ "postcss": "^8.4.47",
46
+ "rehype-pretty-code": "^0.14.0",
47
+ "remark-frontmatter": "^5.0.0",
48
+ "remark-mdx-frontmatter": "^5.0.0",
49
+ "typescript": "5.6.2",
50
+ "vite": "^7.0.0",
51
+ "tsup": "^8.3.0"
52
+ },
53
+ "scripts": {
54
+ "clean": "rimraf build",
55
+ "prebuild": "pnpm clean",
56
+ "build": "tsup",
57
+ "watch": "tsup --watch"
58
+ }
59
+ }