@diplodoc/client 5.1.1 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/build/client/{app-f94acb83de1926b6.js → app-e70f636e61ffb694.js} +2 -2
- package/build/client/app-e70f636e61ffb694.js.map +1 -0
- package/build/client/manifest.json +2 -2
- package/build/client/{search-df24dd819915a228.js → search-c50badbbac7436bd.js} +2 -2
- package/build/client/{search-df24dd819915a228.js.map → search-c50badbbac7436bd.js.map} +1 -1
- package/build/components/App/index.d.ts +4 -0
- package/build/hooks/useFeedback.d.ts +9 -0
- package/build/server/app.js +40 -26
- package/build/server/app.js.map +1 -1
- package/package.json +1 -1
- package/build/client/app-f94acb83de1926b6.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-df24dd819915a228.js","sources":["webpack://@diplodoc/client/./src/interceptors/leading-page-links.js","webpack://@diplodoc/client/./src/constants.ts","webpack://@diplodoc/client/./src/components/Router/index.ts","webpack://@diplodoc/client/./src/hooks/useLang.ts","webpack://@diplodoc/client/./src/utils.ts","webpack://@diplodoc/client/./src/components/App/useSettings.ts","webpack://@diplodoc/client/./src/components/Layout/index.tsx","webpack://@diplodoc/client/./src/components/ConstructorPage/index.tsx","webpack://@diplodoc/client/./src/components/Search/Suggest.tsx","webpack://@diplodoc/client/./src/components/HeaderControls/index.tsx","webpack://@diplodoc/client/./src/components/Search/provider/index.ts","webpack://@diplodoc/client/./src/components/Search/provider/utils/searchLink.ts","webpack://@diplodoc/client/./src/components/Search/Page.tsx","webpack://@diplodoc/client/./src/components/Search/useProvider.ts","webpack://@diplodoc/client/./src/components/Search/index.tsx","webpack://@diplodoc/client/./src/search.tsx","webpack://@diplodoc/client/./src/components/App/useMobile.ts","webpack://@diplodoc/client/./src/stub/empty-module.js","webpack://@diplodoc/client/webpack/runtime/compat_get_default_export","webpack://@diplodoc/client/webpack/runtime/create_fake_namespace_object","webpack://@diplodoc/client/webpack/runtime/define_property_getters","webpack://@diplodoc/client/webpack/runtime/get css chunk filename","webpack://@diplodoc/client/webpack/runtime/get javascript chunk filename","webpack://@diplodoc/client/webpack/runtime/global","webpack://@diplodoc/client/webpack/runtime/has_own_property","webpack://@diplodoc/client/webpack/runtime/make_namespace_object","webpack://@diplodoc/client/webpack/runtime/node_module_decorator","webpack://@diplodoc/client/webpack/runtime/on_chunk_loaded","webpack://@diplodoc/client/webpack/runtime/rspack_version","webpack://@diplodoc/client/webpack/runtime/runtime_id","webpack://@diplodoc/client/webpack/runtime/auto_public_path","webpack://@diplodoc/client/webpack/runtime/jsonp_chunk_loading","webpack://@diplodoc/client/webpack/runtime/rspack_unique_id"],"sourcesContent":["(function () {\n /**\n * Element.matches() polyfill.\n * @link https://developer.mozilla.org/ru/docs/Web/API/Element/matches\n */\n if (typeof Element !== 'undefined') {\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function (selector) {\n const th = this;\n return Array.prototype.some.call(document.querySelectorAll(selector), (el) => {\n return el === th;\n });\n };\n }\n })(Element.prototype);\n }\n})();\n","import {TextSizes, Theme} from '@diplodoc/components';\n\nexport const HEADER_HEIGHT = 64;\n\nexport const MOBILE_VIEW_WIDTH_BREAKPOINT = 769;\n\nexport const DEFAULT_USER_SETTINGS = {\n theme: Theme.Light,\n textSize: TextSizes.M,\n showMiniToc: true,\n wideFormat: true,\n fullScreen: false,\n};\n\nexport const RTL_LANGS = [\n 'ar',\n 'arc',\n 'ckb',\n 'dv',\n 'fa',\n 'ha',\n 'he',\n 'khw',\n 'ks',\n 'ps',\n 'sd',\n 'ur',\n 'uz_AF',\n 'yi',\n];\n\nexport enum TextDirection {\n RTL = 'rtl',\n LTR = 'ltr',\n}\n\nexport const LINK_KEYS_LEADING_CONFIG = ['href'];\nexport const LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [\n 'src',\n 'url',\n 'href',\n 'icon',\n 'image',\n 'desktop',\n 'mobile',\n 'tablet',\n 'previewImg',\n 'image',\n 'avatar',\n 'logo',\n 'light',\n 'dark',\n];\n\nexport const LINK_KEYS = [\n ...new Set([...LINK_KEYS_LEADING_CONFIG, ...LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG]),\n];\n","import type {Router} from '@diplodoc/components';\n\nimport {createContext, useContext} from 'react';\n\nexport interface RouterConfig extends Router {\n depth: number;\n}\n\nexport const RouterContext = createContext<RouterConfig>({\n pathname: '/',\n depth: 0,\n});\n\nRouterContext.displayName = 'RouterContext';\n\nexport const RouterProvider = RouterContext.Provider;\n\nexport function useRouter() {\n return useContext(RouterContext);\n}\n","import {createContext, useContext} from 'react';\nimport {Lang} from '@diplodoc/components';\n\nconst LangContext = createContext<`${Lang}` | Lang>(Lang.En);\n\nLangContext.displayName = 'Lang';\n\nexport const LangProvider = LangContext.Provider;\n\nexport function useLang() {\n return useContext(LangContext);\n}\n","import type {PageData} from './components/App';\nimport type {Lang, Theme} from '@diplodoc/components';\n\nimport {getPageType} from '@diplodoc/components';\n\nimport {\n DEFAULT_USER_SETTINGS,\n MOBILE_VIEW_WIDTH_BREAKPOINT,\n RTL_LANGS,\n TextDirection,\n} from './constants';\n\nexport function isBrowser() {\n return typeof document !== 'undefined';\n}\n\nexport function updateThemeClassName({theme}: {theme: Theme}) {\n if (typeof document === 'undefined') {\n return;\n }\n\n document.querySelectorAll('.g-root').forEach((el) => {\n el.classList.toggle('g-root_theme_light', theme === 'light');\n el.classList.toggle('g-root_theme_dark', theme === 'dark');\n });\n}\n\nexport function updateRootClassName(states: {\n mobileView?: boolean;\n wideFormat?: boolean;\n fullScreen?: boolean;\n focusSearch?: boolean;\n landingPage?: boolean;\n}) {\n if (!isBrowser()) {\n return;\n }\n\n document.body.classList.add('g-root');\n\n const toggle = (name: string, state: unknown) =>\n document.body.classList.toggle(name, Boolean(state));\n\n Object.keys(states).forEach((state) => {\n switch (state) {\n case 'wideFormat':\n toggle('dc-root_wide-format', states[state]);\n break;\n case 'focusSearch':\n toggle('dc-root_focused-search', states[state]);\n break;\n case 'fullScreen':\n toggle('dc-root_full-screen', states[state]);\n break;\n case 'landingPage':\n toggle('dc-root_document-page', !states[state]);\n toggle('dc-root_landing-page', states[state]);\n break;\n case 'mobileView':\n toggle('mobile', states[state]);\n toggle('desktop', !states[state]);\n break;\n }\n });\n}\n\nexport function getDirection(lang: `${Lang}` | Lang): TextDirection {\n const isRTL = RTL_LANGS.includes(lang);\n\n return isRTL ? TextDirection.RTL : TextDirection.LTR;\n}\n\nconst toBoolean = (str: string | boolean) => {\n if (typeof str === 'boolean') {\n return str;\n }\n\n return str ? str === 'true' : false;\n};\n\nexport type Settings = typeof DEFAULT_USER_SETTINGS;\n\nexport function getSettings() {\n const theme = getSetting('theme');\n const textSize = getSetting('textSize');\n const showMiniToc = getSetting('showMiniToc');\n const wideFormat = getSetting('wideFormat');\n const fullScreen = getSetting('fullScreen');\n\n return {\n theme,\n textSize,\n showMiniToc: toBoolean(showMiniToc),\n wideFormat: toBoolean(wideFormat),\n fullScreen: toBoolean(fullScreen),\n };\n}\n\nexport function getLandingPage(data: PageData) {\n return getPageType(data) === 'PAGE_CONSTRUCTOR';\n}\n\nexport function getMobileView() {\n if (!isBrowser()) {\n return false;\n }\n\n return document.body.clientWidth < MOBILE_VIEW_WIDTH_BREAKPOINT;\n}\n\nfunction getSetting<T extends keyof Settings>(name: T): Settings[T] {\n if (!isBrowser()) {\n return DEFAULT_USER_SETTINGS[name];\n }\n\n try {\n return (sessionStorage.getItem(name) as Settings[T]) || DEFAULT_USER_SETTINGS[name];\n } catch {\n return DEFAULT_USER_SETTINGS[name];\n }\n}\n\nexport function setSetting<T>(name: string, value: T) {\n if (!isBrowser()) {\n return;\n }\n\n try {\n sessionStorage.setItem(name, String(value));\n } catch {}\n}\n\nexport function isDetailsTag(el: HTMLElement): el is HTMLDetailsElement {\n return el?.tagName.toLowerCase() === 'details';\n}\n\nexport function isHeaderTag(el: HTMLElement) {\n return ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].indexOf(el.tagName) !== -1;\n}\n\n/**\n * Scrolls to the element.\n * If the element is a heading - simply scrolls to it, since needed offset is already in css.\n * If the element is of any other type - calculate the offset form the element position in heading and scroll to it.\n * @param {HTMLElement} el\n */\n\nexport function scrollToElement(el: HTMLElement, offset = 200) {\n if (isInViewport(el)) {\n return;\n }\n\n if (isHeaderTag(el)) {\n // Header already includes the offset in css\n // That puts it where we want it when it's scrolled to\n el.scrollIntoView();\n } else {\n const elementPosition = el.getBoundingClientRect().top;\n const offsetPosition = elementPosition + window.scrollY - offset;\n\n window.scrollTo({\n top: offsetPosition,\n });\n }\n}\n\nexport function getLangPath(lang: string, href: string) {\n let path;\n\n const isLocal = href.match(/^file:\\/\\/\\/(.*)$/);\n\n if (isLocal) {\n path = '/' + isLocal[1];\n } else {\n path = href.replace(/^https?:\\/\\/[^/]+/, '');\n }\n\n const newPath = path.replace(/\\/[a-z]{2}\\//, `/${lang}/`);\n\n if (isLocal) {\n return 'file://' + newPath;\n }\n\n return newPath;\n}\n\nexport function getDomainPath(lang: string, tld: string, href: string) {\n const newPath = href.replace(/([a-zA-Z0-9-]+\\.[a-zA-Z0-9-]+)(?=[/:?#]|$)/, (match) => {\n const dotPos = match.lastIndexOf('.');\n\n if (dotPos === -1) {\n return match;\n }\n\n return match.slice(0, dotPos + 1) + tld;\n });\n\n return getLangPath(lang, newPath);\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n );\n}\n\nexport function scrollToHash() {\n const hash = window.location.hash.substring(1);\n\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n let node = element?.parentElement;\n while (node) {\n if (isDetailsTag(node)) {\n node.open = true;\n }\n node = node.parentElement;\n }\n\n element.focus();\n\n setTimeout(() => {\n scrollToElement(element);\n }, 10);\n}\n","import type {Settings} from '../../utils';\n\nimport {useMemo, useState} from 'react';\n\nimport {getSettings, setSetting} from '../../utils';\n\nconst capitalize = <T extends string>(string: T): Capitalize<T> =>\n string.replace(/^./, (ch) => ch.toUpperCase()) as Capitalize<T>;\n\nexport function useSettings() {\n const settings = getSettings();\n\n const theme = useSetting('theme', settings);\n const textSize = useSetting('textSize', settings);\n const wideFormat = useSetting('wideFormat', settings);\n const fullScreen = useSetting('fullScreen', settings);\n const showMiniToc = useSetting('showMiniToc', settings);\n\n const controls = useMemo(\n () => ({\n ...theme,\n ...textSize,\n ...wideFormat,\n ...showMiniToc,\n ...fullScreen,\n }),\n [theme, textSize, wideFormat, showMiniToc, fullScreen],\n );\n\n return controls;\n}\n\ntype State<P extends keyof Settings> = Record<P, Settings[P]> &\n Record<`onChange${Capitalize<P>}`, (value: Settings[P]) => void>;\n\nfunction useSetting<P extends keyof Settings>(name: P, settings: Settings): State<P> {\n const [setting, setSetting] = useState<Settings[P]>(settings[name]);\n const onChangeSetting = useMemo(() => withSavingSetting(name, setSetting), [name, setSetting]);\n\n return useMemo(\n () =>\n ({\n [name]: setting,\n ['onChange' + capitalize(name)]: onChangeSetting,\n }) as State<P>,\n [name, setting, onChangeSetting],\n );\n}\n\nfunction withSavingSetting<T>(settingName: string, onChange: (value: T) => void) {\n return (value: T) => {\n setSetting<T>(settingName, value);\n\n onChange(value);\n };\n}\n","import type {FC, PropsWithChildren, ReactElement} from 'react';\n\nimport React from 'react';\nimport block from 'bem-cn-lite';\n\nimport './Layout.scss';\n\nconst b = block('Layout');\n\nfunction Header() {\n return null;\n}\n\nfunction Content() {\n return null;\n}\n\nfunction Footer() {\n return null;\n}\n\ntype LayoutStatics = {\n Header: FC<PropsWithChildren>;\n Content: FC<PropsWithChildren>;\n Footer: FC<PropsWithChildren>;\n};\n\ntype LayoutProps = {\n doc?: boolean;\n headerHeight?: number;\n};\n\nconst defaults = {\n doc: false,\n};\n\nexport const Layout: LayoutStatics & FC<PropsWithChildren<LayoutProps>> = (props) => {\n const {children, doc, headerHeight = 0} = {...defaults, ...props};\n let header, content, footer;\n\n React.Children.forEach(children as ReactElement[], (child: ReactElement) => {\n switch (child.type) {\n case Header:\n header = child.props.children;\n break;\n case Content:\n content = child.props.children;\n break;\n case Footer:\n footer = child.props.children;\n break;\n }\n });\n\n return (\n <div className={b({'full-header': headerHeight > 0})}>\n {header && <div className={b('header')}>{header}</div>}\n <div className={b('body')}>\n {content && <div className={b('content')}>{content}</div>}\n {footer && <div className={b('footer', {doc})}>{footer}</div>}\n </div>\n </div>\n );\n};\n\nLayout.displayName = 'Layout';\n\nLayout.Header = Header;\nLayout.Content = Content;\nLayout.Footer = Footer;\n","import type {PropsWithChildren} from 'react';\nimport type {PageContent} from '@gravity-ui/page-constructor';\n\nimport React from 'react';\nimport block from 'bem-cn-lite';\nimport {\n BackgroundMedia,\n Col,\n ConstructorBlocks,\n Grid,\n Row,\n getThemedValue,\n useTheme,\n} from '@gravity-ui/page-constructor';\n\nconst bPC = block('pc-page-constructor');\nconst bPCRow = block('pc-constructor-row');\n\nexport const ConstructorRow = ({children}: PropsWithChildren) =>\n children ? (\n <Row className={bPCRow()}>\n <Col>{children}</Col>\n </Row>\n ) : null;\n\nexport function ConstructorPage({background, blocks}: PageContent) {\n const theme = useTheme();\n const themedBackground = getThemedValue(background, theme);\n\n return (\n <div className={bPC('docs')}>\n <div className={bPC('wrapper')}>\n {blocks && themedBackground && (\n <BackgroundMedia {...themedBackground} className={bPC('background')} />\n )}\n <Grid>\n <ConstructorRow>\n <ConstructorBlocks items={blocks} />\n </ConstructorRow>\n </Grid>\n </div>\n </div>\n );\n}\n","import type {ISearchProvider, SearchSuggestApi} from '@diplodoc/components';\n\nimport React, {useCallback, useRef} from 'react';\nimport {SearchSuggest, useInterface} from '@diplodoc/components';\nimport {Icon} from '@gravity-ui/uikit';\nimport {Magnifier} from '@gravity-ui/icons';\nimport block from 'bem-cn-lite';\n\nimport {updateRootClassName} from '../../utils';\n\nimport {useProvider} from './useProvider';\nimport './Suggest.scss';\n\nconst b = block('Suggest');\n\nfunction SearchButton() {\n return <Icon data={Magnifier} className={b('end')} size={24} />;\n}\n\nexport function Suggest() {\n const provider: ISearchProvider | null = useProvider();\n const suggest = useRef<SearchSuggestApi>(null);\n const isSearchHidden = useInterface('search');\n\n const onFocus = useCallback(() => {\n updateRootClassName({focusSearch: true});\n }, []);\n\n const onBlur = useCallback(() => {\n updateRootClassName({focusSearch: false});\n setTimeout(() => {\n if (suggest.current) {\n suggest.current.close();\n }\n }, 100);\n }, []);\n\n if (!provider || isSearchHidden) {\n return null;\n }\n\n return (\n <SearchSuggest\n ref={suggest}\n provider={provider}\n onFocus={onFocus}\n onBlur={onBlur}\n endContent={<SearchButton />}\n className={b('input')}\n classNameContainer={b()}\n classNameClose={b('close')}\n closeButton={true}\n />\n );\n}\n","import type {AvailableLangs, Lang, LangOptions, TextSizes, Theme} from '@diplodoc/components';\n\nimport React, {memo} from 'react';\nimport {ControlSizes, Controls, ControlsLayout} from '@diplodoc/components';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype OnChangeCallback = (value: any) => void;\n\nexport type Props = {\n mobileView: boolean;\n\n theme: Theme;\n onChangeTheme: OnChangeCallback;\n textSize: TextSizes;\n onChangeTextSize: OnChangeCallback;\n wideFormat: boolean;\n onChangeWideFormat: OnChangeCallback;\n showMiniToc: boolean;\n onChangeShowMiniToc: OnChangeCallback;\n lang: Lang | `${Lang}`;\n langs: (Lang | `${Lang}`)[];\n onChangeLang?: (lang: `${Lang}` | Lang, options?: LangOptions) => void;\n availableLangs?: AvailableLangs;\n};\n\nexport const HeaderControls = memo<Props>(\n ({\n mobileView,\n\n theme,\n onChangeTheme,\n\n textSize,\n onChangeTextSize,\n\n wideFormat,\n onChangeWideFormat,\n\n showMiniToc,\n onChangeShowMiniToc,\n\n lang,\n langs,\n onChangeLang,\n\n availableLangs = [],\n }) => {\n return (\n <ControlsLayout\n controlClassName={'Control'}\n controlSize={ControlSizes.L}\n isWideView={mobileView}\n isMobileView={mobileView}\n >\n <Controls\n className={'Controls'}\n theme={theme}\n onChangeTheme={onChangeTheme}\n wideFormat={wideFormat}\n onChangeWideFormat={onChangeWideFormat}\n showMiniToc={showMiniToc}\n onChangeShowMiniToc={onChangeShowMiniToc}\n textSize={textSize}\n onChangeTextSize={onChangeTextSize}\n lang={lang}\n langs={langs}\n onChangeLang={onChangeLang}\n availableLangs={availableLangs}\n />\n </ControlsLayout>\n );\n },\n);\n\nHeaderControls.displayName = 'HeaderControls';\n","import type {ISearchProvider, ISearchResult} from '@diplodoc/components';\nimport type {SearchConfig, SearchProviderExtended, WorkerConfig} from '../types';\n\nimport {buildSearchLink} from './utils/searchLink';\n\nexport class DefaultSearchProvider implements ISearchProvider, SearchProviderExtended {\n private worker!: Promise<Worker>;\n\n private config: SearchConfig;\n\n constructor(config: SearchConfig) {\n this.config = config;\n }\n\n init = () => {\n this.worker = initWorker({\n ...this.config,\n base: this.base,\n mark: 'Suggest__Item__Marker',\n });\n };\n\n async suggest(query: string) {\n return this.request({\n type: 'suggest',\n query,\n }) as Promise<ISearchResult[]>;\n }\n\n async search(query: string, page = 1, count = 10) {\n return this.request({\n type: 'search',\n query,\n page,\n count,\n }) as Promise<{items: ISearchResult[]; total: number}>;\n }\n\n link = (query: string, page = 1) => buildSearchLink(this.base, this.config, query, page);\n\n private get base() {\n return window.location.href.split('/').slice(0, -this.config.depth).join('/');\n }\n\n private async request(message: object) {\n return request(await this.worker, message);\n }\n}\n\nconst BAD_ORIGIN_ERROR = /Script at '(.*?)' cannot be accessed from origin/;\n\nasync function loadWorker() {\n try {\n return new Worker(new URL('../worker/index.ts', import.meta.url));\n } catch (error) {\n if (error instanceof DOMException) {\n const match = BAD_ORIGIN_ERROR.exec(error.message);\n if (match) {\n const url = match[1];\n const blob = new Blob([`importScripts('${url}');`], {type: 'text/javascript'});\n\n return new Worker(URL.createObjectURL(blob));\n }\n }\n\n throw error;\n }\n}\n\nasync function initWorker(config: WorkerConfig) {\n const worker = await loadWorker();\n\n await request(worker, {...config, type: 'init'});\n\n return worker;\n}\n\nfunction request(worker: Worker, message: object) {\n const channel = new MessageChannel();\n\n return new Promise((resolve, reject) => {\n channel.port1.onmessage = (message) => {\n if (message.data.error) {\n reject(message.data.error);\n } else {\n resolve(message.data.result);\n }\n };\n\n channel.port1.onmessageerror = (message) => {\n reject(message.data.error);\n };\n\n worker.postMessage(message, [channel.port2]);\n });\n}\n\nexport function createProvider(config: SearchConfig): ISearchProvider | null {\n if (!config) {\n return null;\n }\n\n return new DefaultSearchProvider(config);\n}\n\nexport const SearchProvider = DefaultSearchProvider;\n","import type {SearchConfig} from '../../types';\n\nexport function buildSearchLink(base: string, config: SearchConfig, query?: string, page = 1) {\n const searchParams = new URLSearchParams();\n\n if (query) searchParams.set('query', query);\n if (page > 1) searchParams.set('page', page.toString());\n\n const params = searchParams.toString() ? `?${searchParams.toString()}` : '';\n const link = `${base}/${config.link}${params}`;\n\n return link;\n}\n","import type {FormattedSearchResultData, SearchProviderExtended, SearchResultData} from './types';\n\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {SearchPage} from '@diplodoc/components';\nimport block from 'bem-cn-lite';\n\nimport {useRouter} from '../Router';\n\nimport {useProvider} from './useProvider';\nimport './Page.scss';\n\nconst b = block('Search');\n\nfunction getUrlParams() {\n const params = new URLSearchParams(window.location.search);\n return {\n query: params.get('query') || '',\n page: Number(params.get('page')) || 1,\n };\n}\n\nfunction setUrlParams(query: string, page: number) {\n const params = new URLSearchParams();\n if (query) params.set('query', query);\n if (page > 1) params.set('page', String(page));\n window.history.pushState({}, '', `?${params.toString()}`);\n}\n\nfunction formatResults(searchResults: SearchResultData[]): FormattedSearchResultData {\n if (!Array.isArray(searchResults)) return [];\n return searchResults.map((result) => ({\n title: result?.title || result?.hierarchy?.lvl0 || result?.hierarchy?.lvl1 || '',\n url: result?.url || result?.link || '#',\n description: result?.description || result?.content || result?.text || '',\n section: result?.section || result?.hierarchy?.lvl1 || '',\n }));\n}\n\nconst ITEMS_PER_PAGE = 10;\n\nexport const Page: React.FC = () => {\n const provider = useProvider();\n const router = useRouter();\n\n const [query, setQuery] = useState<string>('');\n const [page, setPage] = useState<number>(1);\n const [results, setResults] = useState<FormattedSearchResultData>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n\n const providerRef = useRef<SearchProviderExtended | null>(null);\n\n useEffect(() => {\n providerRef.current = provider as SearchProviderExtended;\n provider?.init?.();\n }, [provider]);\n\n useEffect(() => {\n const {query: q, page: p} = getUrlParams();\n\n setQuery(q);\n setPage(p);\n }, [router]);\n\n useEffect(() => {\n if (query && providerRef.current) {\n setLoading(true);\n\n providerRef.current\n .search(query, page, ITEMS_PER_PAGE)\n .then((searchResults) => {\n const {items, total} = searchResults;\n const formatted = formatResults(items ?? []);\n\n setResults(formatted);\n setTotal(total);\n })\n .catch(() => {\n setResults([]);\n setTotal(0);\n })\n .finally(() => setLoading(false));\n } else {\n setResults([]);\n setTotal(0);\n }\n }, [query, page, provider]);\n\n const handlePageChange = useCallback(\n (newPage: number) => {\n setUrlParams(query, newPage);\n setPage(newPage);\n },\n [query],\n );\n\n const handleQueryChange = useCallback((newQuery: string) => {\n setUrlParams(newQuery, 1);\n setQuery(newQuery);\n setPage(1);\n }, []);\n\n return (\n <div className={b()}>\n <SearchPage\n query={query}\n items={results}\n page={page}\n totalItems={total}\n onPageChange={handlePageChange}\n onSubmit={handleQueryChange}\n loading={loading}\n />\n </div>\n );\n};\n","import type {ISearchProvider} from '@diplodoc/components';\n\nimport {useContext, useEffect, useMemo, useState} from 'react';\n\nimport {RouterContext, SearchContext} from '../index';\nimport {useLang} from '../../hooks/useLang';\n\nimport {createProvider} from './provider';\n\nexport function useProvider() {\n const lang = useLang();\n const {depth = 0} = useContext(RouterContext);\n const search = useContext(SearchContext);\n const [provider, setProvider] = useState<ISearchProvider | null>(null);\n\n const config = useMemo(() => {\n if (!search) {\n return null;\n }\n\n return {\n ...search,\n depth,\n lang,\n };\n }, [lang, depth, search]);\n\n useEffect(() => {\n if (config) {\n setProvider(createProvider(config));\n }\n }, [config]);\n\n return provider;\n}\n","import type {ReactElement} from 'react';\nimport type {SearchConfig, SearchData, WorkerApi, WorkerConfig} from './types';\n\nimport React, {createContext, useContext, useEffect} from 'react';\nimport {ThemeProvider} from '@gravity-ui/uikit';\nimport {Lang, SUPPORTED_LANGS, configure} from '@diplodoc/components';\n\nimport {RouterProvider} from '../Router';\nimport {LangProvider} from '../../hooks/useLang';\nimport {getDirection, updateRootClassName, updateThemeClassName} from '../../utils';\nimport {useSettings} from '../App/useSettings';\nimport {useMobile} from '../App/useMobile';\n\nimport {Page} from './Page';\n\nexport type {SearchConfig, WorkerConfig, WorkerApi};\n\nexport const SearchContext = createContext<SearchConfig | SearchData | null | undefined>(null);\n\nSearchContext.displayName = 'SearchContext';\n\nexport const SearchProvider = SearchContext.Provider;\n\nexport interface SearchProps {\n data: SearchConfig;\n url: URL;\n}\n\nexport function Search(props: SearchProps): ReactElement {\n const {data, url} = props;\n\n const searchData = data.search;\n const lang = (searchData?.lang as Lang) || Lang.En;\n const settings = useSettings();\n const mobileView = useMobile();\n const fixedLang = SUPPORTED_LANGS.includes(lang) ? lang : Lang.En;\n const direction = getDirection(fixedLang);\n\n configure({\n lang: fixedLang,\n localeCode: fixedLang,\n });\n\n const routerConfig = {\n pathname: url.pathname,\n depth: 3,\n };\n\n const {theme, wideFormat} = settings;\n\n useEffect(() => {\n updateRootClassName({mobileView, wideFormat});\n updateThemeClassName({theme});\n }, [theme, mobileView, wideFormat]);\n\n return (\n <ThemeProvider theme={theme} direction={direction}>\n <LangProvider value={fixedLang}>\n <RouterProvider value={routerConfig}>\n <SearchProvider value={searchData}>\n <Page />\n </SearchProvider>\n </RouterProvider>\n </LangProvider>\n </ThemeProvider>\n );\n}\n\nexport function useSearch() {\n return useContext(SearchContext);\n}\n","import type {SearchConfig} from './components/Search';\n\nimport React from 'react';\nimport {createRoot} from 'react-dom/client';\n\nimport {Search} from './components/Search';\n\nconst root = document.getElementById('root');\n\nif (!root) {\n throw new Error('Root element not found!');\n}\n\nconst data = window.__DATA__ as SearchConfig;\nconst searchConfig = data || {};\nsearchConfig.depth = searchConfig.depth || 3;\n\nconst url = new URL(window.location.href);\n\nconst props = {\n data,\n url,\n};\n\ncreateRoot(root).render(<Search {...props} />);\n","import {useCallback, useEffect, useState} from 'react';\n\nimport {getMobileView} from '../../utils';\n\nexport function useMobile() {\n const [mobileView, setMobileView] = useState<boolean>(getMobileView());\n\n const onResizeHandler = useCallback(() => {\n setMobileView(getMobileView());\n }, []);\n\n useEffect(onResizeHandler, [onResizeHandler]);\n\n useEffect(() => {\n window.addEventListener('resize', onResizeHandler);\n\n return () => window.removeEventListener('resize', onResizeHandler);\n }, [onResizeHandler]);\n\n return mobileView;\n}\n","export default function () {}\n","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n __webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => { def[key] = () => (value[key]) });\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","// This function allow to reference chunks\n__webpack_require__.k = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"\" + chunkId + \".css\"\n}","// This function allow to reference chunks\n__webpack_require__.u = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"\" + chunkId + \"-\" + \"504c3782d2b3e0db\" + \".js\"\n}","__webpack_require__.g = (() => {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n module.paths = [];\n if (!module.children) module.children = [];\n return module;\n};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif (chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor (var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--)\n\t\t\tdeferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif (\n\t\t\t\t(priority & (1 === 0) || notFulfilled >= priority) &&\n\t\t\t\tObject.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))\n\t\t\t) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif (priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif (fulfilled) {\n\t\t\tdeferred.splice(i--, 1);\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};\n","__webpack_require__.rv = () => (\"1.4.11\")","__webpack_require__.j = \"990\";","var scriptUrl;\n\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n // Technically we could use `document.currentScript instanceof window.HTMLScriptElement`,\n // but an attacker could try to inject `<script>HTMLScriptElement = HTMLImageElement</script>`\n // and use `<img name=\"currentScript\" src=\"https://attacker.controlled.server/\"></img>`\n if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') scriptUrl = document.currentScript.src;\n if (!scriptUrl) {\n var scripts = document.getElementsByTagName(\"script\");\n if (scripts.length) {\n var i = scripts.length - 1;\n while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n }\n }\n}\n\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\",\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.',\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl","__webpack_require__.b = document.baseURI || self.location.href;\n\n // object to store loaded and loading chunks\n // undefined = chunk not loaded, null = chunk preloaded/prefetched\n // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\n var installedChunks = {\"990\": 0,};\n __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif (chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor (moduleId in moreModules) {\n\t\t\tif (__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif (runtime) var result = runtime(__webpack_require__);\n\t}\n\tif (parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor (; i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif (\n\t\t\t__webpack_require__.o(installedChunks, chunkId) &&\n\t\t\tinstalledChunks[chunkId]\n\t\t) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunk_diplodoc_client\"] = self[\"webpackChunk_diplodoc_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));\n","__webpack_require__.ruid = \"bundler=rspack@1.4.11\";\n"],"names":["e","matches","Element","selector","th","Array","document","el","TextDirection","RouterContext","createContext","RouterProvider","LangContext","Lang","LangProvider","DEFAULT_USER_SETTINGS","Theme","TextSizes","RTL_LANGS","isBrowser","Set","LINK_KEYS_LEADING_CONFIG","toBoolean","str","getMobileView","getSetting","name","sessionStorage","useSetting","settings","_useState","setting","setSetting","onChangeSetting","useMemo","settingName","onChange","value","String","_obj","string","ch","b","block","Header","Content","Footer","defaults","Layout","props","header","content","footer","_$_object_spread","children","doc","headerHeight","React","child","HeaderControls","memo","mobileView","theme","onChangeTheme","textSize","onChangeTextSize","wideFormat","onChangeWideFormat","showMiniToc","onChangeShowMiniToc","lang","langs","onChangeLang","availableLangs","ControlsLayout","ControlSizes","Controls","DefaultSearchProvider","config","worker","match","url","blob","Worker","URL","error","_instanceof","DOMException","BAD_ORIGIN_ERROR","Blob","request","query","page","buildSearchLink","base","searchParams","URLSearchParams","params","suggest","search","count","window","request1","message","channel","MessageChannel","Promise","resolve","reject","setUrlParams","Page","depth","provider","setProvider","useContext","_useContext","SearchContext","useEffect","router","setQuery","_useState1","setPage","_useState2","results","setResults","_useState3","total","setTotal","_useState4","loading","setLoading","providerRef","useRef","_getUrlParams","Number","q","p","searchResults","items","result","_result_hierarchy","_result_hierarchy1","_result_hierarchy2","handlePageChange","useCallback","newPage","handleQueryChange","newQuery","SearchPage","SearchProvider","root","Error","data","searchConfig","createRoot","fullScreen","setMobileView","onResizeHandler","searchData","fixedLang","SUPPORTED_LANGS","direction","isRTL","configure","routerConfig","states","toggle","state","Boolean","Object","ThemeProvider","Search","c","globalThis","Function","Symbol","self"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search-c50badbbac7436bd.js","sources":["webpack://@diplodoc/client/./src/interceptors/leading-page-links.js","webpack://@diplodoc/client/./src/constants.ts","webpack://@diplodoc/client/./src/components/Router/index.ts","webpack://@diplodoc/client/./src/hooks/useLang.ts","webpack://@diplodoc/client/./src/utils.ts","webpack://@diplodoc/client/./src/components/App/useSettings.ts","webpack://@diplodoc/client/./src/components/Layout/index.tsx","webpack://@diplodoc/client/./src/components/ConstructorPage/index.tsx","webpack://@diplodoc/client/./src/components/Search/Suggest.tsx","webpack://@diplodoc/client/./src/components/HeaderControls/index.tsx","webpack://@diplodoc/client/./src/components/Search/provider/index.ts","webpack://@diplodoc/client/./src/components/Search/provider/utils/searchLink.ts","webpack://@diplodoc/client/./src/components/Search/Page.tsx","webpack://@diplodoc/client/./src/components/Search/useProvider.ts","webpack://@diplodoc/client/./src/components/Search/index.tsx","webpack://@diplodoc/client/./src/search.tsx","webpack://@diplodoc/client/./src/components/App/useMobile.ts","webpack://@diplodoc/client/./src/stub/empty-module.js","webpack://@diplodoc/client/webpack/runtime/compat_get_default_export","webpack://@diplodoc/client/webpack/runtime/create_fake_namespace_object","webpack://@diplodoc/client/webpack/runtime/define_property_getters","webpack://@diplodoc/client/webpack/runtime/get css chunk filename","webpack://@diplodoc/client/webpack/runtime/get javascript chunk filename","webpack://@diplodoc/client/webpack/runtime/global","webpack://@diplodoc/client/webpack/runtime/has_own_property","webpack://@diplodoc/client/webpack/runtime/make_namespace_object","webpack://@diplodoc/client/webpack/runtime/node_module_decorator","webpack://@diplodoc/client/webpack/runtime/on_chunk_loaded","webpack://@diplodoc/client/webpack/runtime/rspack_version","webpack://@diplodoc/client/webpack/runtime/runtime_id","webpack://@diplodoc/client/webpack/runtime/auto_public_path","webpack://@diplodoc/client/webpack/runtime/jsonp_chunk_loading","webpack://@diplodoc/client/webpack/runtime/rspack_unique_id"],"sourcesContent":["(function () {\n /**\n * Element.matches() polyfill.\n * @link https://developer.mozilla.org/ru/docs/Web/API/Element/matches\n */\n if (typeof Element !== 'undefined') {\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function (selector) {\n const th = this;\n return Array.prototype.some.call(document.querySelectorAll(selector), (el) => {\n return el === th;\n });\n };\n }\n })(Element.prototype);\n }\n})();\n","import {TextSizes, Theme} from '@diplodoc/components';\n\nexport const HEADER_HEIGHT = 64;\n\nexport const MOBILE_VIEW_WIDTH_BREAKPOINT = 769;\n\nexport const DEFAULT_USER_SETTINGS = {\n theme: Theme.Light,\n textSize: TextSizes.M,\n showMiniToc: true,\n wideFormat: true,\n fullScreen: false,\n};\n\nexport const RTL_LANGS = [\n 'ar',\n 'arc',\n 'ckb',\n 'dv',\n 'fa',\n 'ha',\n 'he',\n 'khw',\n 'ks',\n 'ps',\n 'sd',\n 'ur',\n 'uz_AF',\n 'yi',\n];\n\nexport enum TextDirection {\n RTL = 'rtl',\n LTR = 'ltr',\n}\n\nexport const LINK_KEYS_LEADING_CONFIG = ['href'];\nexport const LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [\n 'src',\n 'url',\n 'href',\n 'icon',\n 'image',\n 'desktop',\n 'mobile',\n 'tablet',\n 'previewImg',\n 'image',\n 'avatar',\n 'logo',\n 'light',\n 'dark',\n];\n\nexport const LINK_KEYS = [\n ...new Set([...LINK_KEYS_LEADING_CONFIG, ...LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG]),\n];\n","import type {Router} from '@diplodoc/components';\n\nimport {createContext, useContext} from 'react';\n\nexport interface RouterConfig extends Router {\n depth: number;\n}\n\nexport const RouterContext = createContext<RouterConfig>({\n pathname: '/',\n depth: 0,\n});\n\nRouterContext.displayName = 'RouterContext';\n\nexport const RouterProvider = RouterContext.Provider;\n\nexport function useRouter() {\n return useContext(RouterContext);\n}\n","import {createContext, useContext} from 'react';\nimport {Lang} from '@diplodoc/components';\n\nconst LangContext = createContext<`${Lang}` | Lang>(Lang.En);\n\nLangContext.displayName = 'Lang';\n\nexport const LangProvider = LangContext.Provider;\n\nexport function useLang() {\n return useContext(LangContext);\n}\n","import type {PageData} from './components/App';\nimport type {Lang, Theme} from '@diplodoc/components';\n\nimport {getPageType} from '@diplodoc/components';\n\nimport {\n DEFAULT_USER_SETTINGS,\n MOBILE_VIEW_WIDTH_BREAKPOINT,\n RTL_LANGS,\n TextDirection,\n} from './constants';\n\nexport function isBrowser() {\n return typeof document !== 'undefined';\n}\n\nexport function updateThemeClassName({theme}: {theme: Theme}) {\n if (typeof document === 'undefined') {\n return;\n }\n\n document.querySelectorAll('.g-root').forEach((el) => {\n el.classList.toggle('g-root_theme_light', theme === 'light');\n el.classList.toggle('g-root_theme_dark', theme === 'dark');\n });\n}\n\nexport function updateRootClassName(states: {\n mobileView?: boolean;\n wideFormat?: boolean;\n fullScreen?: boolean;\n focusSearch?: boolean;\n landingPage?: boolean;\n}) {\n if (!isBrowser()) {\n return;\n }\n\n document.body.classList.add('g-root');\n\n const toggle = (name: string, state: unknown) =>\n document.body.classList.toggle(name, Boolean(state));\n\n Object.keys(states).forEach((state) => {\n switch (state) {\n case 'wideFormat':\n toggle('dc-root_wide-format', states[state]);\n break;\n case 'focusSearch':\n toggle('dc-root_focused-search', states[state]);\n break;\n case 'fullScreen':\n toggle('dc-root_full-screen', states[state]);\n break;\n case 'landingPage':\n toggle('dc-root_document-page', !states[state]);\n toggle('dc-root_landing-page', states[state]);\n break;\n case 'mobileView':\n toggle('mobile', states[state]);\n toggle('desktop', !states[state]);\n break;\n }\n });\n}\n\nexport function getDirection(lang: `${Lang}` | Lang): TextDirection {\n const isRTL = RTL_LANGS.includes(lang);\n\n return isRTL ? TextDirection.RTL : TextDirection.LTR;\n}\n\nconst toBoolean = (str: string | boolean) => {\n if (typeof str === 'boolean') {\n return str;\n }\n\n return str ? str === 'true' : false;\n};\n\nexport type Settings = typeof DEFAULT_USER_SETTINGS;\n\nexport function getSettings() {\n const theme = getSetting('theme');\n const textSize = getSetting('textSize');\n const showMiniToc = getSetting('showMiniToc');\n const wideFormat = getSetting('wideFormat');\n const fullScreen = getSetting('fullScreen');\n\n return {\n theme,\n textSize,\n showMiniToc: toBoolean(showMiniToc),\n wideFormat: toBoolean(wideFormat),\n fullScreen: toBoolean(fullScreen),\n };\n}\n\nexport function getLandingPage(data: PageData) {\n return getPageType(data) === 'PAGE_CONSTRUCTOR';\n}\n\nexport function getMobileView() {\n if (!isBrowser()) {\n return false;\n }\n\n return document.body.clientWidth < MOBILE_VIEW_WIDTH_BREAKPOINT;\n}\n\nfunction getSetting<T extends keyof Settings>(name: T): Settings[T] {\n if (!isBrowser()) {\n return DEFAULT_USER_SETTINGS[name];\n }\n\n try {\n return (sessionStorage.getItem(name) as Settings[T]) || DEFAULT_USER_SETTINGS[name];\n } catch {\n return DEFAULT_USER_SETTINGS[name];\n }\n}\n\nexport function setSetting<T>(name: string, value: T) {\n if (!isBrowser()) {\n return;\n }\n\n try {\n sessionStorage.setItem(name, String(value));\n } catch {}\n}\n\nexport function isDetailsTag(el: HTMLElement): el is HTMLDetailsElement {\n return el?.tagName.toLowerCase() === 'details';\n}\n\nexport function isHeaderTag(el: HTMLElement) {\n return ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].indexOf(el.tagName) !== -1;\n}\n\n/**\n * Scrolls to the element.\n * If the element is a heading - simply scrolls to it, since needed offset is already in css.\n * If the element is of any other type - calculate the offset form the element position in heading and scroll to it.\n * @param {HTMLElement} el\n */\n\nexport function scrollToElement(el: HTMLElement, offset = 200) {\n if (isInViewport(el)) {\n return;\n }\n\n if (isHeaderTag(el)) {\n // Header already includes the offset in css\n // That puts it where we want it when it's scrolled to\n el.scrollIntoView();\n } else {\n const elementPosition = el.getBoundingClientRect().top;\n const offsetPosition = elementPosition + window.scrollY - offset;\n\n window.scrollTo({\n top: offsetPosition,\n });\n }\n}\n\nexport function getLangPath(lang: string, href: string) {\n let path;\n\n const isLocal = href.match(/^file:\\/\\/\\/(.*)$/);\n\n if (isLocal) {\n path = '/' + isLocal[1];\n } else {\n path = href.replace(/^https?:\\/\\/[^/]+/, '');\n }\n\n const newPath = path.replace(/\\/[a-z]{2}\\//, `/${lang}/`);\n\n if (isLocal) {\n return 'file://' + newPath;\n }\n\n return newPath;\n}\n\nexport function getDomainPath(lang: string, tld: string, href: string) {\n const newPath = href.replace(/([a-zA-Z0-9-]+\\.[a-zA-Z0-9-]+)(?=[/:?#]|$)/, (match) => {\n const dotPos = match.lastIndexOf('.');\n\n if (dotPos === -1) {\n return match;\n }\n\n return match.slice(0, dotPos + 1) + tld;\n });\n\n return getLangPath(lang, newPath);\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n );\n}\n\nexport function scrollToHash() {\n const hash = window.location.hash.substring(1);\n\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n let node = element?.parentElement;\n while (node) {\n if (isDetailsTag(node)) {\n node.open = true;\n }\n node = node.parentElement;\n }\n\n element.focus();\n\n setTimeout(() => {\n scrollToElement(element);\n }, 10);\n}\n","import type {Settings} from '../../utils';\n\nimport {useMemo, useState} from 'react';\n\nimport {getSettings, setSetting} from '../../utils';\n\nconst capitalize = <T extends string>(string: T): Capitalize<T> =>\n string.replace(/^./, (ch) => ch.toUpperCase()) as Capitalize<T>;\n\nexport function useSettings() {\n const settings = getSettings();\n\n const theme = useSetting('theme', settings);\n const textSize = useSetting('textSize', settings);\n const wideFormat = useSetting('wideFormat', settings);\n const fullScreen = useSetting('fullScreen', settings);\n const showMiniToc = useSetting('showMiniToc', settings);\n\n const controls = useMemo(\n () => ({\n ...theme,\n ...textSize,\n ...wideFormat,\n ...showMiniToc,\n ...fullScreen,\n }),\n [theme, textSize, wideFormat, showMiniToc, fullScreen],\n );\n\n return controls;\n}\n\ntype State<P extends keyof Settings> = Record<P, Settings[P]> &\n Record<`onChange${Capitalize<P>}`, (value: Settings[P]) => void>;\n\nfunction useSetting<P extends keyof Settings>(name: P, settings: Settings): State<P> {\n const [setting, setSetting] = useState<Settings[P]>(settings[name]);\n const onChangeSetting = useMemo(() => withSavingSetting(name, setSetting), [name, setSetting]);\n\n return useMemo(\n () =>\n ({\n [name]: setting,\n ['onChange' + capitalize(name)]: onChangeSetting,\n }) as State<P>,\n [name, setting, onChangeSetting],\n );\n}\n\nfunction withSavingSetting<T>(settingName: string, onChange: (value: T) => void) {\n return (value: T) => {\n setSetting<T>(settingName, value);\n\n onChange(value);\n };\n}\n","import type {FC, PropsWithChildren, ReactElement} from 'react';\n\nimport React from 'react';\nimport block from 'bem-cn-lite';\n\nimport './Layout.scss';\n\nconst b = block('Layout');\n\nfunction Header() {\n return null;\n}\n\nfunction Content() {\n return null;\n}\n\nfunction Footer() {\n return null;\n}\n\ntype LayoutStatics = {\n Header: FC<PropsWithChildren>;\n Content: FC<PropsWithChildren>;\n Footer: FC<PropsWithChildren>;\n};\n\ntype LayoutProps = {\n doc?: boolean;\n headerHeight?: number;\n};\n\nconst defaults = {\n doc: false,\n};\n\nexport const Layout: LayoutStatics & FC<PropsWithChildren<LayoutProps>> = (props) => {\n const {children, doc, headerHeight = 0} = {...defaults, ...props};\n let header, content, footer;\n\n React.Children.forEach(children as ReactElement[], (child: ReactElement) => {\n switch (child.type) {\n case Header:\n header = child.props.children;\n break;\n case Content:\n content = child.props.children;\n break;\n case Footer:\n footer = child.props.children;\n break;\n }\n });\n\n return (\n <div className={b({'full-header': headerHeight > 0})}>\n {header && <div className={b('header')}>{header}</div>}\n <div className={b('body')}>\n {content && <div className={b('content')}>{content}</div>}\n {footer && <div className={b('footer', {doc})}>{footer}</div>}\n </div>\n </div>\n );\n};\n\nLayout.displayName = 'Layout';\n\nLayout.Header = Header;\nLayout.Content = Content;\nLayout.Footer = Footer;\n","import type {PropsWithChildren} from 'react';\nimport type {PageContent} from '@gravity-ui/page-constructor';\n\nimport React from 'react';\nimport block from 'bem-cn-lite';\nimport {\n BackgroundMedia,\n Col,\n ConstructorBlocks,\n Grid,\n Row,\n getThemedValue,\n useTheme,\n} from '@gravity-ui/page-constructor';\n\nconst bPC = block('pc-page-constructor');\nconst bPCRow = block('pc-constructor-row');\n\nexport const ConstructorRow = ({children}: PropsWithChildren) =>\n children ? (\n <Row className={bPCRow()}>\n <Col>{children}</Col>\n </Row>\n ) : null;\n\nexport function ConstructorPage({background, blocks}: PageContent) {\n const theme = useTheme();\n const themedBackground = getThemedValue(background, theme);\n\n return (\n <div className={bPC('docs')}>\n <div className={bPC('wrapper')}>\n {blocks && themedBackground && (\n <BackgroundMedia {...themedBackground} className={bPC('background')} />\n )}\n <Grid>\n <ConstructorRow>\n <ConstructorBlocks items={blocks} />\n </ConstructorRow>\n </Grid>\n </div>\n </div>\n );\n}\n","import type {ISearchProvider, SearchSuggestApi} from '@diplodoc/components';\n\nimport React, {useCallback, useRef} from 'react';\nimport {SearchSuggest, useInterface} from '@diplodoc/components';\nimport {Icon} from '@gravity-ui/uikit';\nimport {Magnifier} from '@gravity-ui/icons';\nimport block from 'bem-cn-lite';\n\nimport {updateRootClassName} from '../../utils';\n\nimport {useProvider} from './useProvider';\nimport './Suggest.scss';\n\nconst b = block('Suggest');\n\nfunction SearchButton() {\n return <Icon data={Magnifier} className={b('end')} size={24} />;\n}\n\nexport function Suggest() {\n const provider: ISearchProvider | null = useProvider();\n const suggest = useRef<SearchSuggestApi>(null);\n const isSearchHidden = useInterface('search');\n\n const onFocus = useCallback(() => {\n updateRootClassName({focusSearch: true});\n }, []);\n\n const onBlur = useCallback(() => {\n updateRootClassName({focusSearch: false});\n setTimeout(() => {\n if (suggest.current) {\n suggest.current.close();\n }\n }, 100);\n }, []);\n\n if (!provider || isSearchHidden) {\n return null;\n }\n\n return (\n <SearchSuggest\n ref={suggest}\n provider={provider}\n onFocus={onFocus}\n onBlur={onBlur}\n endContent={<SearchButton />}\n className={b('input')}\n classNameContainer={b()}\n classNameClose={b('close')}\n closeButton={true}\n />\n );\n}\n","import type {AvailableLangs, Lang, LangOptions, TextSizes, Theme} from '@diplodoc/components';\n\nimport React, {memo} from 'react';\nimport {ControlSizes, Controls, ControlsLayout} from '@diplodoc/components';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype OnChangeCallback = (value: any) => void;\n\nexport type Props = {\n mobileView: boolean;\n\n theme: Theme;\n onChangeTheme: OnChangeCallback;\n textSize: TextSizes;\n onChangeTextSize: OnChangeCallback;\n wideFormat: boolean;\n onChangeWideFormat: OnChangeCallback;\n showMiniToc: boolean;\n onChangeShowMiniToc: OnChangeCallback;\n lang: Lang | `${Lang}`;\n langs: (Lang | `${Lang}`)[];\n onChangeLang?: (lang: `${Lang}` | Lang, options?: LangOptions) => void;\n availableLangs?: AvailableLangs;\n};\n\nexport const HeaderControls = memo<Props>(\n ({\n mobileView,\n\n theme,\n onChangeTheme,\n\n textSize,\n onChangeTextSize,\n\n wideFormat,\n onChangeWideFormat,\n\n showMiniToc,\n onChangeShowMiniToc,\n\n lang,\n langs,\n onChangeLang,\n\n availableLangs = [],\n }) => {\n return (\n <ControlsLayout\n controlClassName={'Control'}\n controlSize={ControlSizes.L}\n isWideView={mobileView}\n isMobileView={mobileView}\n >\n <Controls\n className={'Controls'}\n theme={theme}\n onChangeTheme={onChangeTheme}\n wideFormat={wideFormat}\n onChangeWideFormat={onChangeWideFormat}\n showMiniToc={showMiniToc}\n onChangeShowMiniToc={onChangeShowMiniToc}\n textSize={textSize}\n onChangeTextSize={onChangeTextSize}\n lang={lang}\n langs={langs}\n onChangeLang={onChangeLang}\n availableLangs={availableLangs}\n />\n </ControlsLayout>\n );\n },\n);\n\nHeaderControls.displayName = 'HeaderControls';\n","import type {ISearchProvider, ISearchResult} from '@diplodoc/components';\nimport type {SearchConfig, SearchProviderExtended, WorkerConfig} from '../types';\n\nimport {buildSearchLink} from './utils/searchLink';\n\nexport class DefaultSearchProvider implements ISearchProvider, SearchProviderExtended {\n private worker!: Promise<Worker>;\n\n private config: SearchConfig;\n\n constructor(config: SearchConfig) {\n this.config = config;\n }\n\n init = () => {\n this.worker = initWorker({\n ...this.config,\n base: this.base,\n mark: 'Suggest__Item__Marker',\n });\n };\n\n async suggest(query: string) {\n return this.request({\n type: 'suggest',\n query,\n }) as Promise<ISearchResult[]>;\n }\n\n async search(query: string, page = 1, count = 10) {\n return this.request({\n type: 'search',\n query,\n page,\n count,\n }) as Promise<{items: ISearchResult[]; total: number}>;\n }\n\n link = (query: string, page = 1) => buildSearchLink(this.base, this.config, query, page);\n\n private get base() {\n return window.location.href.split('/').slice(0, -this.config.depth).join('/');\n }\n\n private async request(message: object) {\n return request(await this.worker, message);\n }\n}\n\nconst BAD_ORIGIN_ERROR = /Script at '(.*?)' cannot be accessed from origin/;\n\nasync function loadWorker() {\n try {\n return new Worker(new URL('../worker/index.ts', import.meta.url));\n } catch (error) {\n if (error instanceof DOMException) {\n const match = BAD_ORIGIN_ERROR.exec(error.message);\n if (match) {\n const url = match[1];\n const blob = new Blob([`importScripts('${url}');`], {type: 'text/javascript'});\n\n return new Worker(URL.createObjectURL(blob));\n }\n }\n\n throw error;\n }\n}\n\nasync function initWorker(config: WorkerConfig) {\n const worker = await loadWorker();\n\n await request(worker, {...config, type: 'init'});\n\n return worker;\n}\n\nfunction request(worker: Worker, message: object) {\n const channel = new MessageChannel();\n\n return new Promise((resolve, reject) => {\n channel.port1.onmessage = (message) => {\n if (message.data.error) {\n reject(message.data.error);\n } else {\n resolve(message.data.result);\n }\n };\n\n channel.port1.onmessageerror = (message) => {\n reject(message.data.error);\n };\n\n worker.postMessage(message, [channel.port2]);\n });\n}\n\nexport function createProvider(config: SearchConfig): ISearchProvider | null {\n if (!config) {\n return null;\n }\n\n return new DefaultSearchProvider(config);\n}\n\nexport const SearchProvider = DefaultSearchProvider;\n","import type {SearchConfig} from '../../types';\n\nexport function buildSearchLink(base: string, config: SearchConfig, query?: string, page = 1) {\n const searchParams = new URLSearchParams();\n\n if (query) searchParams.set('query', query);\n if (page > 1) searchParams.set('page', page.toString());\n\n const params = searchParams.toString() ? `?${searchParams.toString()}` : '';\n const link = `${base}/${config.link}${params}`;\n\n return link;\n}\n","import type {FormattedSearchResultData, SearchProviderExtended, SearchResultData} from './types';\n\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {SearchPage} from '@diplodoc/components';\nimport block from 'bem-cn-lite';\n\nimport {useRouter} from '../Router';\n\nimport {useProvider} from './useProvider';\nimport './Page.scss';\n\nconst b = block('Search');\n\nfunction getUrlParams() {\n const params = new URLSearchParams(window.location.search);\n return {\n query: params.get('query') || '',\n page: Number(params.get('page')) || 1,\n };\n}\n\nfunction setUrlParams(query: string, page: number) {\n const params = new URLSearchParams();\n if (query) params.set('query', query);\n if (page > 1) params.set('page', String(page));\n window.history.pushState({}, '', `?${params.toString()}`);\n}\n\nfunction formatResults(searchResults: SearchResultData[]): FormattedSearchResultData {\n if (!Array.isArray(searchResults)) return [];\n return searchResults.map((result) => ({\n title: result?.title || result?.hierarchy?.lvl0 || result?.hierarchy?.lvl1 || '',\n url: result?.url || result?.link || '#',\n description: result?.description || result?.content || result?.text || '',\n section: result?.section || result?.hierarchy?.lvl1 || '',\n }));\n}\n\nconst ITEMS_PER_PAGE = 10;\n\nexport const Page: React.FC = () => {\n const provider = useProvider();\n const router = useRouter();\n\n const [query, setQuery] = useState<string>('');\n const [page, setPage] = useState<number>(1);\n const [results, setResults] = useState<FormattedSearchResultData>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n\n const providerRef = useRef<SearchProviderExtended | null>(null);\n\n useEffect(() => {\n providerRef.current = provider as SearchProviderExtended;\n provider?.init?.();\n }, [provider]);\n\n useEffect(() => {\n const {query: q, page: p} = getUrlParams();\n\n setQuery(q);\n setPage(p);\n }, [router]);\n\n useEffect(() => {\n if (query && providerRef.current) {\n setLoading(true);\n\n providerRef.current\n .search(query, page, ITEMS_PER_PAGE)\n .then((searchResults) => {\n const {items, total} = searchResults;\n const formatted = formatResults(items ?? []);\n\n setResults(formatted);\n setTotal(total);\n })\n .catch(() => {\n setResults([]);\n setTotal(0);\n })\n .finally(() => setLoading(false));\n } else {\n setResults([]);\n setTotal(0);\n }\n }, [query, page, provider]);\n\n const handlePageChange = useCallback(\n (newPage: number) => {\n setUrlParams(query, newPage);\n setPage(newPage);\n },\n [query],\n );\n\n const handleQueryChange = useCallback((newQuery: string) => {\n setUrlParams(newQuery, 1);\n setQuery(newQuery);\n setPage(1);\n }, []);\n\n return (\n <div className={b()}>\n <SearchPage\n query={query}\n items={results}\n page={page}\n totalItems={total}\n onPageChange={handlePageChange}\n onSubmit={handleQueryChange}\n loading={loading}\n />\n </div>\n );\n};\n","import type {ISearchProvider} from '@diplodoc/components';\n\nimport {useContext, useEffect, useMemo, useState} from 'react';\n\nimport {RouterContext, SearchContext} from '../index';\nimport {useLang} from '../../hooks/useLang';\n\nimport {createProvider} from './provider';\n\nexport function useProvider() {\n const lang = useLang();\n const {depth = 0} = useContext(RouterContext);\n const search = useContext(SearchContext);\n const [provider, setProvider] = useState<ISearchProvider | null>(null);\n\n const config = useMemo(() => {\n if (!search) {\n return null;\n }\n\n return {\n ...search,\n depth,\n lang,\n };\n }, [lang, depth, search]);\n\n useEffect(() => {\n if (config) {\n setProvider(createProvider(config));\n }\n }, [config]);\n\n return provider;\n}\n","import type {ReactElement} from 'react';\nimport type {SearchConfig, SearchData, WorkerApi, WorkerConfig} from './types';\n\nimport React, {createContext, useContext, useEffect} from 'react';\nimport {ThemeProvider} from '@gravity-ui/uikit';\nimport {Lang, SUPPORTED_LANGS, configure} from '@diplodoc/components';\n\nimport {RouterProvider} from '../Router';\nimport {LangProvider} from '../../hooks/useLang';\nimport {getDirection, updateRootClassName, updateThemeClassName} from '../../utils';\nimport {useSettings} from '../App/useSettings';\nimport {useMobile} from '../App/useMobile';\n\nimport {Page} from './Page';\n\nexport type {SearchConfig, WorkerConfig, WorkerApi};\n\nexport const SearchContext = createContext<SearchConfig | SearchData | null | undefined>(null);\n\nSearchContext.displayName = 'SearchContext';\n\nexport const SearchProvider = SearchContext.Provider;\n\nexport interface SearchProps {\n data: SearchConfig;\n url: URL;\n}\n\nexport function Search(props: SearchProps): ReactElement {\n const {data, url} = props;\n\n const searchData = data.search;\n const lang = (searchData?.lang as Lang) || Lang.En;\n const settings = useSettings();\n const mobileView = useMobile();\n const fixedLang = SUPPORTED_LANGS.includes(lang) ? lang : Lang.En;\n const direction = getDirection(fixedLang);\n\n configure({\n lang: fixedLang,\n localeCode: fixedLang,\n });\n\n const routerConfig = {\n pathname: url.pathname,\n depth: 3,\n };\n\n const {theme, wideFormat} = settings;\n\n useEffect(() => {\n updateRootClassName({mobileView, wideFormat});\n updateThemeClassName({theme});\n }, [theme, mobileView, wideFormat]);\n\n return (\n <ThemeProvider theme={theme} direction={direction}>\n <LangProvider value={fixedLang}>\n <RouterProvider value={routerConfig}>\n <SearchProvider value={searchData}>\n <Page />\n </SearchProvider>\n </RouterProvider>\n </LangProvider>\n </ThemeProvider>\n );\n}\n\nexport function useSearch() {\n return useContext(SearchContext);\n}\n","import type {SearchConfig} from './components/Search';\n\nimport React from 'react';\nimport {createRoot} from 'react-dom/client';\n\nimport {Search} from './components/Search';\n\nconst root = document.getElementById('root');\n\nif (!root) {\n throw new Error('Root element not found!');\n}\n\nconst data = window.__DATA__ as SearchConfig;\nconst searchConfig = data || {};\nsearchConfig.depth = searchConfig.depth || 3;\n\nconst url = new URL(window.location.href);\n\nconst props = {\n data,\n url,\n};\n\ncreateRoot(root).render(<Search {...props} />);\n","import {useCallback, useEffect, useState} from 'react';\n\nimport {getMobileView} from '../../utils';\n\nexport function useMobile() {\n const [mobileView, setMobileView] = useState<boolean>(getMobileView());\n\n const onResizeHandler = useCallback(() => {\n setMobileView(getMobileView());\n }, []);\n\n useEffect(onResizeHandler, [onResizeHandler]);\n\n useEffect(() => {\n window.addEventListener('resize', onResizeHandler);\n\n return () => window.removeEventListener('resize', onResizeHandler);\n }, [onResizeHandler]);\n\n return mobileView;\n}\n","export default function () {}\n","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n __webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => { def[key] = () => (value[key]) });\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","// This function allow to reference chunks\n__webpack_require__.k = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"\" + chunkId + \".css\"\n}","// This function allow to reference chunks\n__webpack_require__.u = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"\" + chunkId + \"-\" + \"504c3782d2b3e0db\" + \".js\"\n}","__webpack_require__.g = (() => {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n module.paths = [];\n if (!module.children) module.children = [];\n return module;\n};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif (chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor (var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--)\n\t\t\tdeferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif (\n\t\t\t\t(priority & (1 === 0) || notFulfilled >= priority) &&\n\t\t\t\tObject.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))\n\t\t\t) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif (priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif (fulfilled) {\n\t\t\tdeferred.splice(i--, 1);\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};\n","__webpack_require__.rv = () => (\"1.4.11\")","__webpack_require__.j = \"990\";","var scriptUrl;\n\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n // Technically we could use `document.currentScript instanceof window.HTMLScriptElement`,\n // but an attacker could try to inject `<script>HTMLScriptElement = HTMLImageElement</script>`\n // and use `<img name=\"currentScript\" src=\"https://attacker.controlled.server/\"></img>`\n if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') scriptUrl = document.currentScript.src;\n if (!scriptUrl) {\n var scripts = document.getElementsByTagName(\"script\");\n if (scripts.length) {\n var i = scripts.length - 1;\n while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n }\n }\n}\n\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\",\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.',\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl","__webpack_require__.b = document.baseURI || self.location.href;\n\n // object to store loaded and loading chunks\n // undefined = chunk not loaded, null = chunk preloaded/prefetched\n // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\n var installedChunks = {\"990\": 0,};\n __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif (chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor (moduleId in moreModules) {\n\t\t\tif (__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif (runtime) var result = runtime(__webpack_require__);\n\t}\n\tif (parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor (; i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif (\n\t\t\t__webpack_require__.o(installedChunks, chunkId) &&\n\t\t\tinstalledChunks[chunkId]\n\t\t) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunk_diplodoc_client\"] = self[\"webpackChunk_diplodoc_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));\n","__webpack_require__.ruid = \"bundler=rspack@1.4.11\";\n"],"names":["e","matches","Element","selector","th","Array","document","el","TextDirection","RouterContext","createContext","RouterProvider","LangContext","Lang","LangProvider","DEFAULT_USER_SETTINGS","Theme","TextSizes","RTL_LANGS","isBrowser","Set","LINK_KEYS_LEADING_CONFIG","toBoolean","str","getMobileView","getSetting","name","sessionStorage","useSetting","settings","_useState","setting","setSetting","onChangeSetting","useMemo","settingName","onChange","value","String","_obj","string","ch","b","block","Header","Content","Footer","defaults","Layout","props","header","content","footer","_$_object_spread","children","doc","headerHeight","React","child","HeaderControls","memo","mobileView","theme","onChangeTheme","textSize","onChangeTextSize","wideFormat","onChangeWideFormat","showMiniToc","onChangeShowMiniToc","lang","langs","onChangeLang","availableLangs","ControlsLayout","ControlSizes","Controls","DefaultSearchProvider","config","worker","match","url","blob","Worker","URL","error","_instanceof","DOMException","BAD_ORIGIN_ERROR","Blob","request","query","page","buildSearchLink","base","searchParams","URLSearchParams","params","suggest","search","count","window","request1","message","channel","MessageChannel","Promise","resolve","reject","setUrlParams","Page","depth","provider","setProvider","useContext","_useContext","SearchContext","useEffect","router","setQuery","_useState1","setPage","_useState2","results","setResults","_useState3","total","setTotal","_useState4","loading","setLoading","providerRef","useRef","_getUrlParams","Number","q","p","searchResults","items","result","_result_hierarchy","_result_hierarchy1","_result_hierarchy2","handlePageChange","useCallback","newPage","handleQueryChange","newQuery","SearchPage","SearchProvider","root","Error","data","searchConfig","createRoot","fullScreen","setMobileView","onResizeHandler","searchData","fixedLang","SUPPORTED_LANGS","direction","isRTL","configure","routerConfig","states","toggle","state","Boolean","Object","ThemeProvider","Search","c","globalThis","Function","Symbol","self"],"mappings":"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"}
|
|
@@ -13,12 +13,16 @@ export type DocAnalytics = {
|
|
|
13
13
|
mode?: 'base' | 'notification';
|
|
14
14
|
};
|
|
15
15
|
};
|
|
16
|
+
export type FeedbackConfig = {
|
|
17
|
+
url?: string;
|
|
18
|
+
};
|
|
16
19
|
export interface AppProps {
|
|
17
20
|
lang: `${Lang}` | Lang;
|
|
18
21
|
langs: (`${Lang}` | Lang)[];
|
|
19
22
|
router: RouterConfig;
|
|
20
23
|
search?: SearchConfig;
|
|
21
24
|
analytics?: DocAnalytics;
|
|
25
|
+
feedback?: FeedbackConfig;
|
|
22
26
|
viewerInterface?: Record<string, boolean>;
|
|
23
27
|
}
|
|
24
28
|
export type WithNavigation = {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FeedbackSendData } from '@diplodoc/components';
|
|
2
|
+
import type { RouterConfig } from '../components/Router';
|
|
3
|
+
interface UseFeedbackOptions {
|
|
4
|
+
feedbackUrl?: string;
|
|
5
|
+
router: RouterConfig;
|
|
6
|
+
viewerInterface?: Record<string, boolean>;
|
|
7
|
+
}
|
|
8
|
+
export declare function useFeedback({ feedbackUrl, router, viewerInterface }: UseFeedbackOptions): ((data: FeedbackSendData) => void) | undefined;
|
|
9
|
+
export {};
|
package/build/server/app.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(() => { // webpackBootstrap
|
|
2
2
|
var __webpack_modules__ = ({
|
|
3
|
-
|
|
3
|
+
72352: (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
4
4
|
"use strict";
|
|
5
5
|
// ESM COMPAT FLAG
|
|
6
6
|
__webpack_require__.r(__webpack_exports__);
|
|
@@ -807,6 +807,37 @@ function useSearch() {
|
|
|
807
807
|
return (0,react.useContext)(SearchContext);
|
|
808
808
|
}
|
|
809
809
|
|
|
810
|
+
;// CONCATENATED MODULE: ./src/hooks/useFeedback.ts
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
function useFeedback(param) {
|
|
815
|
+
var feedbackUrl = param.feedbackUrl, router = param.router, viewerInterface = param.viewerInterface;
|
|
816
|
+
var onSendFeedback = (0,react.useCallback)(function(data) {
|
|
817
|
+
if (!feedbackUrl) {
|
|
818
|
+
return;
|
|
819
|
+
}
|
|
820
|
+
fetch(feedbackUrl, {
|
|
821
|
+
method: 'POST',
|
|
822
|
+
headers: {
|
|
823
|
+
'Content-Type': 'application/json'
|
|
824
|
+
},
|
|
825
|
+
body: JSON.stringify((0,_object_spread_props._)((0,_object_spread._)({}, data), {
|
|
826
|
+
page: router.pathname,
|
|
827
|
+
timestamp: new Date().toISOString()
|
|
828
|
+
}))
|
|
829
|
+
}).catch(function(error) {
|
|
830
|
+
// eslint-disable-next-line no-console
|
|
831
|
+
console.error('Failed to send feedback:', error);
|
|
832
|
+
});
|
|
833
|
+
}, [
|
|
834
|
+
feedbackUrl,
|
|
835
|
+
router.pathname
|
|
836
|
+
]);
|
|
837
|
+
var isFeedbackEnabled = (viewerInterface === null || viewerInterface === void 0 ? void 0 : viewerInterface.feedback) !== false;
|
|
838
|
+
return feedbackUrl && isFeedbackEnabled ? onSendFeedback : undefined;
|
|
839
|
+
}
|
|
840
|
+
|
|
810
841
|
// EXTERNAL MODULE: ./src/interceptors/leading-page-links.js
|
|
811
842
|
var leading_page_links = __webpack_require__(90101);
|
|
812
843
|
// EXTERNAL MODULE: ./node_modules/@gravity-ui/page-constructor/build/esm/index.js + 1271 modules
|
|
@@ -1449,10 +1480,11 @@ var withMdxInit = function(param) {
|
|
|
1449
1480
|
|
|
1450
1481
|
|
|
1451
1482
|
|
|
1483
|
+
|
|
1452
1484
|
|
|
1453
1485
|
function App(props) {
|
|
1454
1486
|
var _analytics_gtm, _analytics_gtm1;
|
|
1455
|
-
var data = props.data, router = props.router, lang = props.lang, langs = props.langs, search = props.search, analytics = props.analytics, viewerInterface = props.viewerInterface;
|
|
1487
|
+
var data = props.data, router = props.router, lang = props.lang, langs = props.langs, search = props.search, analytics = props.analytics, feedback = props.feedback, viewerInterface = props.viewerInterface;
|
|
1456
1488
|
var settings = useSettings_useSettings();
|
|
1457
1489
|
var langData = useLangs(props);
|
|
1458
1490
|
var mobileView = useMobile_useMobile();
|
|
@@ -1475,29 +1507,11 @@ function App(props) {
|
|
|
1475
1507
|
return hooks;
|
|
1476
1508
|
}, []);
|
|
1477
1509
|
var theme = settings.theme, textSize = settings.textSize, wideFormat = settings.wideFormat, fullScreen = settings.fullScreen, showMiniToc = settings.showMiniToc;
|
|
1478
|
-
var
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
}
|
|
1484
|
-
fetch(feedbackUrl, {
|
|
1485
|
-
method: 'POST',
|
|
1486
|
-
headers: {
|
|
1487
|
-
'Content-Type': 'application/json'
|
|
1488
|
-
},
|
|
1489
|
-
body: JSON.stringify((0,_object_spread_props._)((0,_object_spread._)({}, data), {
|
|
1490
|
-
page: router.pathname,
|
|
1491
|
-
timestamp: new Date().toISOString()
|
|
1492
|
-
}))
|
|
1493
|
-
}).catch(function(error) {
|
|
1494
|
-
// eslint-disable-next-line no-console
|
|
1495
|
-
console.error('Failed to send feedback:', error);
|
|
1496
|
-
});
|
|
1497
|
-
}, [
|
|
1498
|
-
feedbackUrl,
|
|
1499
|
-
router.pathname
|
|
1500
|
-
]);
|
|
1510
|
+
var onSendFeedback = useFeedback({
|
|
1511
|
+
feedbackUrl: feedback === null || feedback === void 0 ? void 0 : feedback.url,
|
|
1512
|
+
router: router,
|
|
1513
|
+
viewerInterface: viewerInterface
|
|
1514
|
+
});
|
|
1501
1515
|
var page = (0,react.useMemo)(function() {
|
|
1502
1516
|
return {
|
|
1503
1517
|
router: router,
|
|
@@ -1908,7 +1922,7 @@ __webpack_require__.m = __webpack_modules__;
|
|
|
1908
1922
|
__webpack_require__.x = () => {
|
|
1909
1923
|
// Load entry module and return exports
|
|
1910
1924
|
// This entry module depends on other loaded chunks and execution need to be delayed
|
|
1911
|
-
var __webpack_exports__ = __webpack_require__.O(undefined, ["966", "971"], function() { return __webpack_require__(
|
|
1925
|
+
var __webpack_exports__ = __webpack_require__.O(undefined, ["966", "971"], function() { return __webpack_require__(72352) });
|
|
1912
1926
|
__webpack_exports__ = __webpack_require__.O(__webpack_exports__);
|
|
1913
1927
|
return __webpack_exports__
|
|
1914
1928
|
};
|