@diplodoc/components 3.0.0-alpha-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +67 -0
- package/assets/icons/link.svg +3 -0
- package/assets/icons/pdf.svg +6 -0
- package/build/cjs/components/BookmarkButton/BookmarkButton.css +12 -0
- package/build/cjs/components/BookmarkButton/BookmarkButton.css.map +7 -0
- package/build/cjs/components/BookmarkButton/BookmarkButton.d.ts +8 -0
- package/build/cjs/components/BookmarkButton/BookmarkButton.js +56 -0
- package/build/cjs/components/BookmarkButton/BookmarkButton.js.map +7 -0
- package/build/cjs/components/BookmarkButton/index.d.ts +1 -0
- package/build/cjs/components/BookmarkButton/index.js +21 -0
- package/build/cjs/components/BookmarkButton/index.js.map +7 -0
- package/build/cjs/components/Breadcrumbs/Breadcrumbs.css +35 -0
- package/build/cjs/components/Breadcrumbs/Breadcrumbs.css.map +7 -0
- package/build/cjs/components/Breadcrumbs/Breadcrumbs.d.ts +8 -0
- package/build/cjs/components/Breadcrumbs/Breadcrumbs.js +58 -0
- package/build/cjs/components/Breadcrumbs/Breadcrumbs.js.map +7 -0
- package/build/cjs/components/Breadcrumbs/index.d.ts +1 -0
- package/build/cjs/components/Breadcrumbs/index.js +21 -0
- package/build/cjs/components/Breadcrumbs/index.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/Avatars/Avatar.d.ts +10 -0
- package/build/cjs/components/ContributorAvatars/Avatars/Avatar.js +89 -0
- package/build/cjs/components/ContributorAvatars/Avatars/Avatar.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/Avatars/AvatarWithDescription.d.ts +9 -0
- package/build/cjs/components/ContributorAvatars/Avatars/AvatarWithDescription.js +63 -0
- package/build/cjs/components/ContributorAvatars/Avatars/AvatarWithDescription.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/Avatars/Details.d.ts +10 -0
- package/build/cjs/components/ContributorAvatars/Avatars/Details.js +77 -0
- package/build/cjs/components/ContributorAvatars/Avatars/Details.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/Avatars/HiddenAvatars.d.ts +10 -0
- package/build/cjs/components/ContributorAvatars/Avatars/HiddenAvatars.js +70 -0
- package/build/cjs/components/ContributorAvatars/Avatars/HiddenAvatars.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/ContributorAvatars.css +135 -0
- package/build/cjs/components/ContributorAvatars/ContributorAvatars.css.map +7 -0
- package/build/cjs/components/ContributorAvatars/ContributorAvatars.d.ts +10 -0
- package/build/cjs/components/ContributorAvatars/ContributorAvatars.js +84 -0
- package/build/cjs/components/ContributorAvatars/ContributorAvatars.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/index.d.ts +2 -0
- package/build/cjs/components/ContributorAvatars/index.js +39 -0
- package/build/cjs/components/ContributorAvatars/index.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/models.d.ts +16 -0
- package/build/cjs/components/ContributorAvatars/models.js +31 -0
- package/build/cjs/components/ContributorAvatars/models.js.map +7 -0
- package/build/cjs/components/ContributorAvatars/utils.d.ts +3 -0
- package/build/cjs/components/ContributorAvatars/utils.js +39 -0
- package/build/cjs/components/ContributorAvatars/utils.js.map +7 -0
- package/build/cjs/components/Contributors/Contributors.css +12 -0
- package/build/cjs/components/Contributors/Contributors.css.map +7 -0
- package/build/cjs/components/Contributors/Contributors.d.ts +11 -0
- package/build/cjs/components/Contributors/Contributors.js +48 -0
- package/build/cjs/components/Contributors/Contributors.js.map +7 -0
- package/build/cjs/components/Contributors/index.d.ts +2 -0
- package/build/cjs/components/Control/Control.css +15 -0
- package/build/cjs/components/Control/Control.css.map +7 -0
- package/build/cjs/components/Control/Control.d.ts +20 -0
- package/build/cjs/components/Control/Control.js +95 -0
- package/build/cjs/components/Control/Control.js.map +7 -0
- package/build/cjs/components/Control/index.d.ts +2 -0
- package/build/cjs/components/Control/index.js +39 -0
- package/build/cjs/components/Control/index.js.map +7 -0
- package/build/cjs/components/Controls/Controls.css +50 -0
- package/build/cjs/components/Controls/Controls.css.map +7 -0
- package/build/cjs/components/Controls/Controls.d.ts +32 -0
- package/build/cjs/components/Controls/Controls.js +169 -0
- package/build/cjs/components/Controls/Controls.js.map +7 -0
- package/build/cjs/components/Controls/ControlsLayout.d.ts +12 -0
- package/build/cjs/components/Controls/ControlsLayout.js +68 -0
- package/build/cjs/components/Controls/ControlsLayout.js.map +7 -0
- package/build/cjs/components/Controls/index.d.ts +4 -0
- package/build/cjs/components/Controls/index.js +42 -0
- package/build/cjs/components/Controls/index.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/DividerControl/DividerControl.css +21 -0
- package/build/cjs/components/Controls/single-controls/DividerControl/DividerControl.css.map +7 -0
- package/build/cjs/components/Controls/single-controls/DividerControl/DividerControl.d.ts +7 -0
- package/build/cjs/components/Controls/single-controls/DividerControl/DividerControl.js +46 -0
- package/build/cjs/components/Controls/single-controls/DividerControl/DividerControl.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/EditControl.d.ts +9 -0
- package/build/cjs/components/Controls/single-controls/EditControl.js +73 -0
- package/build/cjs/components/Controls/single-controls/EditControl.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/FullScreenControl.d.ts +7 -0
- package/build/cjs/components/Controls/single-controls/FullScreenControl.js +82 -0
- package/build/cjs/components/Controls/single-controls/FullScreenControl.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/LangControl.d.ts +10 -0
- package/build/cjs/components/Controls/single-controls/LangControl.js +122 -0
- package/build/cjs/components/Controls/single-controls/LangControl.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/PdfControl.d.ts +6 -0
- package/build/cjs/components/Controls/single-controls/PdfControl.js +60 -0
- package/build/cjs/components/Controls/single-controls/PdfControl.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.css +49 -0
- package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.css.map +7 -0
- package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.d.ts +17 -0
- package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.js +198 -0
- package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/SinglePageControl.d.ts +7 -0
- package/build/cjs/components/Controls/single-controls/SinglePageControl.js +67 -0
- package/build/cjs/components/Controls/single-controls/SinglePageControl.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/index.d.ts +7 -0
- package/build/cjs/components/Controls/single-controls/index.js +49 -0
- package/build/cjs/components/Controls/single-controls/index.js.map +7 -0
- package/build/cjs/components/Controls/single-controls/utils.d.ts +2 -0
- package/build/cjs/components/Controls/single-controls/utils.js +30 -0
- package/build/cjs/components/Controls/single-controls/utils.js.map +7 -0
- package/build/cjs/components/DocLayout/DocLayout.css +102 -0
- package/build/cjs/components/DocLayout/DocLayout.css.map +7 -0
- package/build/cjs/components/DocLayout/DocLayout.d.ts +34 -0
- package/build/cjs/components/DocLayout/DocLayout.js +117 -0
- package/build/cjs/components/DocLayout/DocLayout.js.map +7 -0
- package/build/cjs/components/DocLayout/index.d.ts +1 -0
- package/build/cjs/components/DocLayout/index.js +21 -0
- package/build/cjs/components/DocLayout/index.js.map +7 -0
- package/build/cjs/components/DocLeadingPage/DocLeadingPage.css +93 -0
- package/build/cjs/components/DocLeadingPage/DocLeadingPage.css.map +7 -0
- package/build/cjs/components/DocLeadingPage/DocLeadingPage.d.ts +22 -0
- package/build/cjs/components/DocLeadingPage/DocLeadingPage.js +109 -0
- package/build/cjs/components/DocLeadingPage/DocLeadingPage.js.map +7 -0
- package/build/cjs/components/DocLeadingPage/index.d.ts +1 -0
- package/build/cjs/components/DocLeadingPage/index.js +21 -0
- package/build/cjs/components/DocLeadingPage/index.js.map +7 -0
- package/build/cjs/components/DocPage/DocPage.css +231 -0
- package/build/cjs/components/DocPage/DocPage.css.map +7 -0
- package/build/cjs/components/DocPage/DocPage.d.ts +41 -0
- package/build/cjs/components/DocPage/DocPage.js +460 -0
- package/build/cjs/components/DocPage/DocPage.js.map +7 -0
- package/build/cjs/components/DocPage/index.d.ts +2 -0
- package/build/cjs/components/DocPage/index.js +39 -0
- package/build/cjs/components/DocPage/index.js.map +7 -0
- package/build/cjs/components/DocPageTitle/DocPageTitle.css +10 -0
- package/build/cjs/components/DocPageTitle/DocPageTitle.css.map +7 -0
- package/build/cjs/components/DocPageTitle/DocPageTitle.d.ts +7 -0
- package/build/cjs/components/DocPageTitle/DocPageTitle.js +50 -0
- package/build/cjs/components/DocPageTitle/DocPageTitle.js.map +7 -0
- package/build/cjs/components/DocPageTitle/index.d.ts +1 -0
- package/build/cjs/components/DocPageTitle/index.js +21 -0
- package/build/cjs/components/DocPageTitle/index.js.map +7 -0
- package/build/cjs/components/ErrorBoundary/ErrorBoundary.d.ts +12 -0
- package/build/cjs/components/ErrorBoundary/ErrorBoundary.js +56 -0
- package/build/cjs/components/ErrorBoundary/ErrorBoundary.js.map +7 -0
- package/build/cjs/components/ErrorBoundary/index.d.ts +2 -0
- package/build/cjs/components/ErrorBoundary/index.js +39 -0
- package/build/cjs/components/ErrorBoundary/index.js.map +7 -0
- package/build/cjs/components/ErrorPage/ErrorPage.css +65 -0
- package/build/cjs/components/ErrorPage/ErrorPage.css.map +7 -0
- package/build/cjs/components/ErrorPage/ErrorPage.d.ts +10 -0
- package/build/cjs/components/ErrorPage/ErrorPage.js +83 -0
- package/build/cjs/components/ErrorPage/ErrorPage.js.map +7 -0
- package/build/cjs/components/ErrorPage/index.d.ts +2 -0
- package/build/cjs/components/ErrorPage/index.js +39 -0
- package/build/cjs/components/ErrorPage/index.js.map +7 -0
- package/build/cjs/components/Feedback/Feedback.css +109 -0
- package/build/cjs/components/Feedback/Feedback.css.map +7 -0
- package/build/cjs/components/Feedback/Feedback.d.ts +15 -0
- package/build/cjs/components/Feedback/Feedback.js +163 -0
- package/build/cjs/components/Feedback/Feedback.js.map +7 -0
- package/build/cjs/components/Feedback/controls/DislikeControl.d.ts +11 -0
- package/build/cjs/components/Feedback/controls/DislikeControl.js +69 -0
- package/build/cjs/components/Feedback/controls/DislikeControl.js.map +7 -0
- package/build/cjs/components/Feedback/controls/DislikeVariantsPopup.d.ts +18 -0
- package/build/cjs/components/Feedback/controls/DislikeVariantsPopup.js +150 -0
- package/build/cjs/components/Feedback/controls/DislikeVariantsPopup.js.map +7 -0
- package/build/cjs/components/Feedback/controls/LikeControl.d.ts +13 -0
- package/build/cjs/components/Feedback/controls/LikeControl.js +81 -0
- package/build/cjs/components/Feedback/controls/LikeControl.js.map +7 -0
- package/build/cjs/components/Feedback/controls/SuccessPopup.d.ts +10 -0
- package/build/cjs/components/Feedback/controls/SuccessPopup.js +67 -0
- package/build/cjs/components/Feedback/controls/SuccessPopup.js.map +7 -0
- package/build/cjs/components/Feedback/index.d.ts +2 -0
- package/build/cjs/components/Feedback/index.js +39 -0
- package/build/cjs/components/Feedback/index.js.map +7 -0
- package/build/cjs/components/HTML/HTML.d.ts +7 -0
- package/build/cjs/components/HTML/HTML.js +46 -0
- package/build/cjs/components/HTML/HTML.js.map +7 -0
- package/build/cjs/components/HTML/index.d.ts +1 -0
- package/build/cjs/components/HTML/index.js +21 -0
- package/build/cjs/components/HTML/index.js.map +7 -0
- package/build/cjs/components/Link.d.ts +6 -0
- package/build/cjs/components/Link.js +41 -0
- package/build/cjs/components/Link.js.map +7 -0
- package/build/cjs/components/Mark/Mark.css +22 -0
- package/build/cjs/components/Mark/Mark.css.map +7 -0
- package/build/cjs/components/Mark/Mark.d.ts +10 -0
- package/build/cjs/components/Mark/Mark.js +43 -0
- package/build/cjs/components/Mark/Mark.js.map +7 -0
- package/build/cjs/components/Mark/index.d.ts +1 -0
- package/build/cjs/components/Mark/index.js +21 -0
- package/build/cjs/components/Mark/index.js.map +7 -0
- package/build/cjs/components/MiniToc/MiniToc.css +44 -0
- package/build/cjs/components/MiniToc/MiniToc.css.map +7 -0
- package/build/cjs/components/MiniToc/MiniToc.d.ts +15 -0
- package/build/cjs/components/MiniToc/MiniToc.js +71 -0
- package/build/cjs/components/MiniToc/MiniToc.js.map +7 -0
- package/build/cjs/components/MiniToc/index.d.ts +2 -0
- package/build/cjs/components/MiniToc/index.js +39 -0
- package/build/cjs/components/MiniToc/index.js.map +7 -0
- package/build/cjs/components/OutsideClick/OutsideClick.d.ts +12 -0
- package/build/cjs/components/OutsideClick/OutsideClick.js +56 -0
- package/build/cjs/components/OutsideClick/OutsideClick.js.map +7 -0
- package/build/cjs/components/OutsideClick/index.d.ts +2 -0
- package/build/cjs/components/OutsideClick/index.js +39 -0
- package/build/cjs/components/OutsideClick/index.js.map +7 -0
- package/build/cjs/components/Paginator/Paginator.css +45 -0
- package/build/cjs/components/Paginator/Paginator.css.map +7 -0
- package/build/cjs/components/Paginator/Paginator.d.ts +22 -0
- package/build/cjs/components/Paginator/Paginator.js +132 -0
- package/build/cjs/components/Paginator/Paginator.js.map +7 -0
- package/build/cjs/components/Paginator/index.d.ts +2 -0
- package/build/cjs/components/Paginator/index.js +39 -0
- package/build/cjs/components/Paginator/index.js.map +7 -0
- package/build/cjs/components/Scrollspy/Scrollspy.d.ts +48 -0
- package/build/cjs/components/Scrollspy/Scrollspy.js +259 -0
- package/build/cjs/components/Scrollspy/Scrollspy.js.map +7 -0
- package/build/cjs/components/Scrollspy/index.d.ts +1 -0
- package/build/cjs/components/Scrollspy/index.js +21 -0
- package/build/cjs/components/Scrollspy/index.js.map +7 -0
- package/build/cjs/components/SearchBar/SearchBar.css +59 -0
- package/build/cjs/components/SearchBar/SearchBar.css.map +7 -0
- package/build/cjs/components/SearchBar/SearchBar.d.ts +12 -0
- package/build/cjs/components/SearchBar/SearchBar.js +88 -0
- package/build/cjs/components/SearchBar/SearchBar.js.map +7 -0
- package/build/cjs/components/SearchBar/constants.d.ts +7 -0
- package/build/cjs/components/SearchBar/constants.js +39 -0
- package/build/cjs/components/SearchBar/constants.js.map +7 -0
- package/build/cjs/components/SearchBar/hooks.d.ts +55 -0
- package/build/cjs/components/SearchBar/hooks.js +292 -0
- package/build/cjs/components/SearchBar/hooks.js.map +7 -0
- package/build/cjs/components/SearchBar/index.d.ts +4 -0
- package/build/cjs/components/SearchBar/index.js +42 -0
- package/build/cjs/components/SearchBar/index.js.map +7 -0
- package/build/cjs/components/SearchBar/utils.d.ts +26 -0
- package/build/cjs/components/SearchBar/utils.js +108 -0
- package/build/cjs/components/SearchBar/utils.js.map +7 -0
- package/build/cjs/components/SearchBar/withHighlightedSearchWords.d.ts +16 -0
- package/build/cjs/components/SearchBar/withHighlightedSearchWords.js +123 -0
- package/build/cjs/components/SearchBar/withHighlightedSearchWords.js.map +7 -0
- package/build/cjs/components/SearchItem/SearchItem.css +88 -0
- package/build/cjs/components/SearchItem/SearchItem.css.map +7 -0
- package/build/cjs/components/SearchItem/SearchItem.d.ts +19 -0
- package/build/cjs/components/SearchItem/SearchItem.js +91 -0
- package/build/cjs/components/SearchItem/SearchItem.js.map +7 -0
- package/build/cjs/components/SearchItem/index.d.ts +2 -0
- package/build/cjs/components/SearchItem/index.js +39 -0
- package/build/cjs/components/SearchItem/index.js.map +7 -0
- package/build/cjs/components/SearchPage/SearchPage.css +43 -0
- package/build/cjs/components/SearchPage/SearchPage.css.map +7 -0
- package/build/cjs/components/SearchPage/SearchPage.d.ts +20 -0
- package/build/cjs/components/SearchPage/SearchPage.js +165 -0
- package/build/cjs/components/SearchPage/SearchPage.js.map +7 -0
- package/build/cjs/components/SearchPage/index.d.ts +2 -0
- package/build/cjs/components/SearchPage/index.js +39 -0
- package/build/cjs/components/SearchPage/index.js.map +7 -0
- package/build/cjs/components/StageLabel/StageLabel.d.ts +8 -0
- package/build/cjs/components/StageLabel/StageLabel.js +50 -0
- package/build/cjs/components/StageLabel/StageLabel.js.map +7 -0
- package/build/cjs/components/StageLabel/index.d.ts +1 -0
- package/build/cjs/components/StageLabel/index.js +21 -0
- package/build/cjs/components/StageLabel/index.js.map +7 -0
- package/build/cjs/components/Subscribe/Subscribe.css +98 -0
- package/build/cjs/components/Subscribe/Subscribe.css.map +7 -0
- package/build/cjs/components/Subscribe/Subscribe.d.ts +13 -0
- package/build/cjs/components/Subscribe/Subscribe.js +136 -0
- package/build/cjs/components/Subscribe/Subscribe.js.map +7 -0
- package/build/cjs/components/Subscribe/SubscribeSuccessPopup/SubscribeSuccessPopup.d.ts +8 -0
- package/build/cjs/components/Subscribe/SubscribeSuccessPopup/SubscribeSuccessPopup.js +61 -0
- package/build/cjs/components/Subscribe/SubscribeSuccessPopup/SubscribeSuccessPopup.js.map +7 -0
- package/build/cjs/components/Subscribe/SubscribeSuccessPopup/index.d.ts +1 -0
- package/build/cjs/components/Subscribe/SubscribeSuccessPopup/index.js +37 -0
- package/build/cjs/components/Subscribe/SubscribeSuccessPopup/index.js.map +7 -0
- package/build/cjs/components/Subscribe/SubscribeVariantsPopup/SubscribeVariantsPopup.d.ts +11 -0
- package/build/cjs/components/Subscribe/SubscribeVariantsPopup/SubscribeVariantsPopup.js +126 -0
- package/build/cjs/components/Subscribe/SubscribeVariantsPopup/SubscribeVariantsPopup.js.map +7 -0
- package/build/cjs/components/Subscribe/SubscribeVariantsPopup/index.d.ts +1 -0
- package/build/cjs/components/Subscribe/SubscribeVariantsPopup/index.js +37 -0
- package/build/cjs/components/Subscribe/SubscribeVariantsPopup/index.js.map +7 -0
- package/build/cjs/components/Subscribe/index.d.ts +2 -0
- package/build/cjs/components/Subscribe/index.js +39 -0
- package/build/cjs/components/Subscribe/index.js.map +7 -0
- package/build/cjs/components/Subscribe/utils.d.ts +3 -0
- package/build/cjs/components/Subscribe/utils.js +34 -0
- package/build/cjs/components/Subscribe/utils.js.map +7 -0
- package/build/cjs/components/Text/Text.d.ts +7 -0
- package/build/cjs/components/Text/Text.js +54 -0
- package/build/cjs/components/Text/Text.js.map +7 -0
- package/build/cjs/components/Text/index.d.ts +1 -0
- package/build/cjs/components/Text/index.js +21 -0
- package/build/cjs/components/Text/index.js.map +7 -0
- package/build/cjs/components/TextInput/TextInput.d.ts +0 -0
- package/build/cjs/components/Toc/Toc.css +102 -0
- package/build/cjs/components/Toc/Toc.css.map +7 -0
- package/build/cjs/components/Toc/Toc.d.ts +58 -0
- package/build/cjs/components/Toc/Toc.js +275 -0
- package/build/cjs/components/Toc/Toc.js.map +7 -0
- package/build/cjs/components/Toc/TocItemRegistry.d.ts +16 -0
- package/build/cjs/components/Toc/TocItemRegistry.js +81 -0
- package/build/cjs/components/Toc/TocItemRegistry.js.map +7 -0
- package/build/cjs/components/Toc/index.d.ts +2 -0
- package/build/cjs/components/Toc/index.js +39 -0
- package/build/cjs/components/Toc/index.js.map +7 -0
- package/build/cjs/components/TocItem/TocItem.css +39 -0
- package/build/cjs/components/TocItem/TocItem.css.map +7 -0
- package/build/cjs/components/TocItem/TocItem.d.ts +20 -0
- package/build/cjs/components/TocItem/TocItem.js +105 -0
- package/build/cjs/components/TocItem/TocItem.js.map +7 -0
- package/build/cjs/components/TocItem/index.d.ts +2 -0
- package/build/cjs/components/TocItem/index.js +39 -0
- package/build/cjs/components/TocItem/index.js.map +7 -0
- package/build/cjs/components/TocNavPanel/TocNavPanel.css +64 -0
- package/build/cjs/components/TocNavPanel/TocNavPanel.css.map +7 -0
- package/build/cjs/components/TocNavPanel/TocNavPanel.d.ts +10 -0
- package/build/cjs/components/TocNavPanel/TocNavPanel.js +94 -0
- package/build/cjs/components/TocNavPanel/TocNavPanel.js.map +7 -0
- package/build/cjs/components/TocNavPanel/index.d.ts +2 -0
- package/build/cjs/components/TocNavPanel/index.js +39 -0
- package/build/cjs/components/TocNavPanel/index.js.map +7 -0
- package/build/cjs/components/ToggleArrow/ToggleArrow.css +24 -0
- package/build/cjs/components/ToggleArrow/ToggleArrow.css.map +7 -0
- package/build/cjs/components/ToggleArrow/ToggleArrow.d.ts +11 -0
- package/build/cjs/components/ToggleArrow/ToggleArrow.js +49 -0
- package/build/cjs/components/ToggleArrow/ToggleArrow.js.map +7 -0
- package/build/cjs/components/ToggleArrow/index.d.ts +1 -0
- package/build/cjs/components/ToggleArrow/index.js +21 -0
- package/build/cjs/components/ToggleArrow/index.js.map +7 -0
- package/build/cjs/config/i18n.d.ts +7 -0
- package/build/cjs/config/i18n.js +68 -0
- package/build/cjs/config/i18n.js.map +7 -0
- package/build/cjs/config/index.d.ts +6 -0
- package/build/cjs/config/index.js +51 -0
- package/build/cjs/config/index.js.map +7 -0
- package/build/cjs/constants.d.ts +19 -0
- package/build/cjs/constants.js +46 -0
- package/build/cjs/constants.js.map +7 -0
- package/build/cjs/hooks/index.d.ts +4 -0
- package/build/cjs/hooks/index.js +24 -0
- package/build/cjs/hooks/index.js.map +7 -0
- package/build/cjs/hooks/usePopper.d.ts +33 -0
- package/build/cjs/hooks/usePopper.js +93 -0
- package/build/cjs/hooks/usePopper.js.map +7 -0
- package/build/cjs/hooks/usePopupState.d.ts +8 -0
- package/build/cjs/hooks/usePopupState.js +62 -0
- package/build/cjs/hooks/usePopupState.js.map +7 -0
- package/build/cjs/hooks/useTimer.d.ts +1 -0
- package/build/cjs/hooks/useTimer.js +44 -0
- package/build/cjs/hooks/useTimer.js.map +7 -0
- package/build/cjs/hooks/useTranslation.d.ts +2 -0
- package/build/cjs/hooks/useTranslation.js +32 -0
- package/build/cjs/hooks/useTranslation.js.map +7 -0
- package/build/cjs/i18n/en.js +124 -0
- package/build/cjs/i18n/en.js.map +7 -0
- package/build/cjs/i18n/ru.js +124 -0
- package/build/cjs/i18n/ru.js.map +7 -0
- package/build/cjs/index.d.ts +28 -0
- package/build/cjs/index.js +48 -0
- package/build/cjs/index.js.map +7 -0
- package/build/cjs/models/index.d.ts +139 -0
- package/build/cjs/models/index.js +69 -0
- package/build/cjs/models/index.js.map +7 -0
- package/build/cjs/utils/index.d.ts +14 -0
- package/build/cjs/utils/index.js +109 -0
- package/build/cjs/utils/index.js.map +7 -0
- package/build/esm/components/BookmarkButton/BookmarkButton.css +12 -0
- package/build/esm/components/BookmarkButton/BookmarkButton.css.map +7 -0
- package/build/esm/components/BookmarkButton/BookmarkButton.js +25 -0
- package/build/esm/components/BookmarkButton/BookmarkButton.js.map +7 -0
- package/build/esm/components/BookmarkButton/index.js +3 -0
- package/build/esm/components/BookmarkButton/index.js.map +7 -0
- package/build/esm/components/Breadcrumbs/Breadcrumbs.css +35 -0
- package/build/esm/components/Breadcrumbs/Breadcrumbs.css.map +7 -0
- package/build/esm/components/Breadcrumbs/Breadcrumbs.js +27 -0
- package/build/esm/components/Breadcrumbs/Breadcrumbs.js.map +7 -0
- package/build/esm/components/Breadcrumbs/index.js +3 -0
- package/build/esm/components/Breadcrumbs/index.js.map +7 -0
- package/build/esm/components/ContributorAvatars/Avatars/Avatar.js +58 -0
- package/build/esm/components/ContributorAvatars/Avatars/Avatar.js.map +7 -0
- package/build/esm/components/ContributorAvatars/Avatars/AvatarWithDescription.js +32 -0
- package/build/esm/components/ContributorAvatars/Avatars/AvatarWithDescription.js.map +7 -0
- package/build/esm/components/ContributorAvatars/Avatars/Details.js +46 -0
- package/build/esm/components/ContributorAvatars/Avatars/Details.js.map +7 -0
- package/build/esm/components/ContributorAvatars/Avatars/HiddenAvatars.js +39 -0
- package/build/esm/components/ContributorAvatars/Avatars/HiddenAvatars.js.map +7 -0
- package/build/esm/components/ContributorAvatars/ContributorAvatars.css +135 -0
- package/build/esm/components/ContributorAvatars/ContributorAvatars.css.map +7 -0
- package/build/esm/components/ContributorAvatars/ContributorAvatars.js +53 -0
- package/build/esm/components/ContributorAvatars/ContributorAvatars.js.map +7 -0
- package/build/esm/components/ContributorAvatars/index.js +7 -0
- package/build/esm/components/ContributorAvatars/index.js.map +7 -0
- package/build/esm/components/ContributorAvatars/models.js +10 -0
- package/build/esm/components/ContributorAvatars/models.js.map +7 -0
- package/build/esm/components/ContributorAvatars/utils.js +18 -0
- package/build/esm/components/ContributorAvatars/utils.js.map +7 -0
- package/build/esm/components/Contributors/Contributors.css +12 -0
- package/build/esm/components/Contributors/Contributors.css.map +7 -0
- package/build/esm/components/Contributors/Contributors.js +17 -0
- package/build/esm/components/Contributors/Contributors.js.map +7 -0
- package/build/esm/components/Control/Control.css +15 -0
- package/build/esm/components/Control/Control.css.map +7 -0
- package/build/esm/components/Control/Control.js +64 -0
- package/build/esm/components/Control/Control.js.map +7 -0
- package/build/esm/components/Control/index.js +7 -0
- package/build/esm/components/Control/index.js.map +7 -0
- package/build/esm/components/Controls/Controls.css +50 -0
- package/build/esm/components/Controls/Controls.css.map +7 -0
- package/build/esm/components/Controls/Controls.js +146 -0
- package/build/esm/components/Controls/Controls.js.map +7 -0
- package/build/esm/components/Controls/ControlsLayout.js +37 -0
- package/build/esm/components/Controls/ControlsLayout.js.map +7 -0
- package/build/esm/components/Controls/index.js +10 -0
- package/build/esm/components/Controls/index.js.map +7 -0
- package/build/esm/components/Controls/single-controls/DividerControl/DividerControl.css +21 -0
- package/build/esm/components/Controls/single-controls/DividerControl/DividerControl.css.map +7 -0
- package/build/esm/components/Controls/single-controls/DividerControl/DividerControl.js +15 -0
- package/build/esm/components/Controls/single-controls/DividerControl/DividerControl.js.map +7 -0
- package/build/esm/components/Controls/single-controls/EditControl.js +42 -0
- package/build/esm/components/Controls/single-controls/EditControl.js.map +7 -0
- package/build/esm/components/Controls/single-controls/FullScreenControl.js +51 -0
- package/build/esm/components/Controls/single-controls/FullScreenControl.js.map +7 -0
- package/build/esm/components/Controls/single-controls/LangControl.js +91 -0
- package/build/esm/components/Controls/single-controls/LangControl.js.map +7 -0
- package/build/esm/components/Controls/single-controls/PdfControl.js +29 -0
- package/build/esm/components/Controls/single-controls/PdfControl.js.map +7 -0
- package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.css +49 -0
- package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.css.map +7 -0
- package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.js +167 -0
- package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.js.map +7 -0
- package/build/esm/components/Controls/single-controls/SinglePageControl.js +36 -0
- package/build/esm/components/Controls/single-controls/SinglePageControl.js.map +7 -0
- package/build/esm/components/Controls/single-controls/index.js +18 -0
- package/build/esm/components/Controls/single-controls/index.js.map +7 -0
- package/build/esm/components/Controls/single-controls/utils.js +9 -0
- package/build/esm/components/Controls/single-controls/utils.js.map +7 -0
- package/build/esm/components/DocLayout/DocLayout.css +102 -0
- package/build/esm/components/DocLayout/DocLayout.css.map +7 -0
- package/build/esm/components/DocLayout/DocLayout.js +86 -0
- package/build/esm/components/DocLayout/DocLayout.js.map +7 -0
- package/build/esm/components/DocLayout/index.js +3 -0
- package/build/esm/components/DocLayout/index.js.map +7 -0
- package/build/esm/components/DocLeadingPage/DocLeadingPage.css +93 -0
- package/build/esm/components/DocLeadingPage/DocLeadingPage.css.map +7 -0
- package/build/esm/components/DocLeadingPage/DocLeadingPage.js +78 -0
- package/build/esm/components/DocLeadingPage/DocLeadingPage.js.map +7 -0
- package/build/esm/components/DocLeadingPage/index.js +3 -0
- package/build/esm/components/DocLeadingPage/index.js.map +7 -0
- package/build/esm/components/DocPage/DocPage.css +231 -0
- package/build/esm/components/DocPage/DocPage.css.map +7 -0
- package/build/esm/components/DocPage/DocPage.js +436 -0
- package/build/esm/components/DocPage/DocPage.js.map +7 -0
- package/build/esm/components/DocPage/index.js +7 -0
- package/build/esm/components/DocPage/index.js.map +7 -0
- package/build/esm/components/DocPageTitle/DocPageTitle.css +10 -0
- package/build/esm/components/DocPageTitle/DocPageTitle.css.map +7 -0
- package/build/esm/components/DocPageTitle/DocPageTitle.js +19 -0
- package/build/esm/components/DocPageTitle/DocPageTitle.js.map +7 -0
- package/build/esm/components/DocPageTitle/index.js +3 -0
- package/build/esm/components/DocPageTitle/index.js.map +7 -0
- package/build/esm/components/ErrorBoundary/ErrorBoundary.js +25 -0
- package/build/esm/components/ErrorBoundary/ErrorBoundary.js.map +7 -0
- package/build/esm/components/ErrorBoundary/index.js +7 -0
- package/build/esm/components/ErrorBoundary/index.js.map +7 -0
- package/build/esm/components/ErrorPage/ErrorPage.css +65 -0
- package/build/esm/components/ErrorPage/ErrorPage.css.map +7 -0
- package/build/esm/components/ErrorPage/ErrorPage.js +52 -0
- package/build/esm/components/ErrorPage/ErrorPage.js.map +7 -0
- package/build/esm/components/ErrorPage/index.js +7 -0
- package/build/esm/components/ErrorPage/index.js.map +7 -0
- package/build/esm/components/Feedback/Feedback.css +109 -0
- package/build/esm/components/Feedback/Feedback.css.map +7 -0
- package/build/esm/components/Feedback/Feedback.js +132 -0
- package/build/esm/components/Feedback/Feedback.js.map +7 -0
- package/build/esm/components/Feedback/controls/DislikeControl.js +38 -0
- package/build/esm/components/Feedback/controls/DislikeControl.js.map +7 -0
- package/build/esm/components/Feedback/controls/DislikeVariantsPopup.js +128 -0
- package/build/esm/components/Feedback/controls/DislikeVariantsPopup.js.map +7 -0
- package/build/esm/components/Feedback/controls/LikeControl.js +50 -0
- package/build/esm/components/Feedback/controls/LikeControl.js.map +7 -0
- package/build/esm/components/Feedback/controls/SuccessPopup.js +36 -0
- package/build/esm/components/Feedback/controls/SuccessPopup.js.map +7 -0
- package/build/esm/components/Feedback/index.js +7 -0
- package/build/esm/components/Feedback/index.js.map +7 -0
- package/build/esm/components/HTML/HTML.js +15 -0
- package/build/esm/components/HTML/HTML.js.map +7 -0
- package/build/esm/components/HTML/index.js +3 -0
- package/build/esm/components/HTML/index.js.map +7 -0
- package/build/esm/components/Link.js +10 -0
- package/build/esm/components/Link.js.map +7 -0
- package/build/esm/components/Mark/Mark.css +22 -0
- package/build/esm/components/Mark/Mark.css.map +7 -0
- package/build/esm/components/Mark/Mark.js +12 -0
- package/build/esm/components/Mark/Mark.js.map +7 -0
- package/build/esm/components/Mark/index.js +3 -0
- package/build/esm/components/Mark/index.js.map +7 -0
- package/build/esm/components/MiniToc/MiniToc.css +44 -0
- package/build/esm/components/MiniToc/MiniToc.css.map +7 -0
- package/build/esm/components/MiniToc/MiniToc.js +40 -0
- package/build/esm/components/MiniToc/MiniToc.js.map +7 -0
- package/build/esm/components/MiniToc/index.js +7 -0
- package/build/esm/components/MiniToc/index.js.map +7 -0
- package/build/esm/components/OutsideClick/OutsideClick.js +25 -0
- package/build/esm/components/OutsideClick/OutsideClick.js.map +7 -0
- package/build/esm/components/OutsideClick/index.js +7 -0
- package/build/esm/components/OutsideClick/index.js.map +7 -0
- package/build/esm/components/Paginator/Paginator.css +45 -0
- package/build/esm/components/Paginator/Paginator.css.map +7 -0
- package/build/esm/components/Paginator/Paginator.js +101 -0
- package/build/esm/components/Paginator/Paginator.js.map +7 -0
- package/build/esm/components/Paginator/index.js +7 -0
- package/build/esm/components/Paginator/index.js.map +7 -0
- package/build/esm/components/Scrollspy/Scrollspy.js +228 -0
- package/build/esm/components/Scrollspy/Scrollspy.js.map +7 -0
- package/build/esm/components/Scrollspy/index.js +3 -0
- package/build/esm/components/Scrollspy/index.js.map +7 -0
- package/build/esm/components/SearchBar/SearchBar.css +59 -0
- package/build/esm/components/SearchBar/SearchBar.css.map +7 -0
- package/build/esm/components/SearchBar/SearchBar.js +57 -0
- package/build/esm/components/SearchBar/SearchBar.js.map +7 -0
- package/build/esm/components/SearchBar/constants.js +18 -0
- package/build/esm/components/SearchBar/constants.js.map +7 -0
- package/build/esm/components/SearchBar/hooks.js +271 -0
- package/build/esm/components/SearchBar/hooks.js.map +7 -0
- package/build/esm/components/SearchBar/index.js +10 -0
- package/build/esm/components/SearchBar/index.js.map +7 -0
- package/build/esm/components/SearchBar/utils.js +77 -0
- package/build/esm/components/SearchBar/utils.js.map +7 -0
- package/build/esm/components/SearchBar/withHighlightedSearchWords.js +97 -0
- package/build/esm/components/SearchBar/withHighlightedSearchWords.js.map +7 -0
- package/build/esm/components/SearchItem/SearchItem.css +88 -0
- package/build/esm/components/SearchItem/SearchItem.css.map +7 -0
- package/build/esm/components/SearchItem/SearchItem.js +60 -0
- package/build/esm/components/SearchItem/SearchItem.js.map +7 -0
- package/build/esm/components/SearchItem/index.js +7 -0
- package/build/esm/components/SearchItem/index.js.map +7 -0
- package/build/esm/components/SearchPage/SearchPage.css +43 -0
- package/build/esm/components/SearchPage/SearchPage.css.map +7 -0
- package/build/esm/components/SearchPage/SearchPage.js +134 -0
- package/build/esm/components/SearchPage/SearchPage.js.map +7 -0
- package/build/esm/components/SearchPage/index.js +7 -0
- package/build/esm/components/SearchPage/index.js.map +7 -0
- package/build/esm/components/StageLabel/StageLabel.js +19 -0
- package/build/esm/components/StageLabel/StageLabel.js.map +7 -0
- package/build/esm/components/StageLabel/index.js +3 -0
- package/build/esm/components/StageLabel/index.js.map +7 -0
- package/build/esm/components/Subscribe/Subscribe.css +98 -0
- package/build/esm/components/Subscribe/Subscribe.css.map +7 -0
- package/build/esm/components/Subscribe/Subscribe.js +105 -0
- package/build/esm/components/Subscribe/Subscribe.js.map +7 -0
- package/build/esm/components/Subscribe/SubscribeSuccessPopup/SubscribeSuccessPopup.js +30 -0
- package/build/esm/components/Subscribe/SubscribeSuccessPopup/SubscribeSuccessPopup.js.map +7 -0
- package/build/esm/components/Subscribe/SubscribeSuccessPopup/index.js +6 -0
- package/build/esm/components/Subscribe/SubscribeSuccessPopup/index.js.map +7 -0
- package/build/esm/components/Subscribe/SubscribeVariantsPopup/SubscribeVariantsPopup.js +95 -0
- package/build/esm/components/Subscribe/SubscribeVariantsPopup/SubscribeVariantsPopup.js.map +7 -0
- package/build/esm/components/Subscribe/SubscribeVariantsPopup/index.js +6 -0
- package/build/esm/components/Subscribe/SubscribeVariantsPopup/index.js.map +7 -0
- package/build/esm/components/Subscribe/index.js +7 -0
- package/build/esm/components/Subscribe/index.js.map +7 -0
- package/build/esm/components/Subscribe/utils.js +13 -0
- package/build/esm/components/Subscribe/utils.js.map +7 -0
- package/build/esm/components/Text/Text.js +23 -0
- package/build/esm/components/Text/Text.js.map +7 -0
- package/build/esm/components/Text/index.js +3 -0
- package/build/esm/components/Text/index.js.map +7 -0
- package/build/esm/components/Toc/Toc.css +102 -0
- package/build/esm/components/Toc/Toc.css.map +7 -0
- package/build/esm/components/Toc/Toc.js +244 -0
- package/build/esm/components/Toc/Toc.js.map +7 -0
- package/build/esm/components/Toc/TocItemRegistry.js +60 -0
- package/build/esm/components/Toc/TocItemRegistry.js.map +7 -0
- package/build/esm/components/Toc/index.js +7 -0
- package/build/esm/components/Toc/index.js.map +7 -0
- package/build/esm/components/TocItem/TocItem.css +39 -0
- package/build/esm/components/TocItem/TocItem.css.map +7 -0
- package/build/esm/components/TocItem/TocItem.js +74 -0
- package/build/esm/components/TocItem/TocItem.js.map +7 -0
- package/build/esm/components/TocItem/index.js +7 -0
- package/build/esm/components/TocItem/index.js.map +7 -0
- package/build/esm/components/TocNavPanel/TocNavPanel.css +64 -0
- package/build/esm/components/TocNavPanel/TocNavPanel.css.map +7 -0
- package/build/esm/components/TocNavPanel/TocNavPanel.js +63 -0
- package/build/esm/components/TocNavPanel/TocNavPanel.js.map +7 -0
- package/build/esm/components/TocNavPanel/index.js +7 -0
- package/build/esm/components/TocNavPanel/index.js.map +7 -0
- package/build/esm/components/ToggleArrow/ToggleArrow.css +24 -0
- package/build/esm/components/ToggleArrow/ToggleArrow.css.map +7 -0
- package/build/esm/components/ToggleArrow/ToggleArrow.js +18 -0
- package/build/esm/components/ToggleArrow/ToggleArrow.js.map +7 -0
- package/build/esm/components/ToggleArrow/index.js +3 -0
- package/build/esm/components/ToggleArrow/index.js.map +7 -0
- package/build/esm/config/i18n.js +37 -0
- package/build/esm/config/i18n.js.map +7 -0
- package/build/esm/config/index.js +30 -0
- package/build/esm/config/index.js.map +7 -0
- package/build/esm/constants.js +25 -0
- package/build/esm/constants.js.map +7 -0
- package/build/esm/hooks/index.js +6 -0
- package/build/esm/hooks/index.js.map +7 -0
- package/build/esm/hooks/usePopper.js +62 -0
- package/build/esm/hooks/usePopper.js.map +7 -0
- package/build/esm/hooks/usePopupState.js +41 -0
- package/build/esm/hooks/usePopupState.js.map +7 -0
- package/build/esm/hooks/useTimer.js +23 -0
- package/build/esm/hooks/useTimer.js.map +7 -0
- package/build/esm/hooks/useTranslation.js +11 -0
- package/build/esm/hooks/useTranslation.js.map +7 -0
- package/build/esm/i18n/en.js +137 -0
- package/build/esm/i18n/en.js.map +7 -0
- package/build/esm/i18n/ru.js +137 -0
- package/build/esm/i18n/ru.js.map +7 -0
- package/build/esm/index.js +30 -0
- package/build/esm/index.js.map +7 -0
- package/build/esm/models/index.js +48 -0
- package/build/esm/models/index.js.map +7 -0
- package/build/esm/utils/index.js +88 -0
- package/build/esm/utils/index.js.map +7 -0
- package/build/index.css +197 -0
- package/build/index.css.map +7 -0
- package/build/themes/common/index.css +1170 -0
- package/build/themes/common/index.css.map +7 -0
- package/package.json +145 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// src/components/SearchBar/constants.ts
|
|
2
|
+
var CLASSNAME = "dc-search-highlighted";
|
|
3
|
+
var CLASSNAME_SELECTED = "dc-search-highlighted_selected";
|
|
4
|
+
var HIGHLIGHT_OPTIONS = {
|
|
5
|
+
element: "span",
|
|
6
|
+
className: CLASSNAME,
|
|
7
|
+
exclude: [
|
|
8
|
+
`.${CLASSNAME}`,
|
|
9
|
+
// Exclude the elements to highlight to avoid duplicating the highlight
|
|
10
|
+
"svg *"
|
|
11
|
+
]
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
CLASSNAME,
|
|
15
|
+
CLASSNAME_SELECTED,
|
|
16
|
+
HIGHLIGHT_OPTIONS
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/SearchBar/constants.ts"],
|
|
4
|
+
"sourcesContent": ["export const CLASSNAME = 'dc-search-highlighted';\n\nexport const CLASSNAME_SELECTED = 'dc-search-highlighted_selected';\n\nexport const HIGHLIGHT_OPTIONS = {\n element: 'span',\n className: CLASSNAME,\n exclude: [\n `.${CLASSNAME}`, // Exclude the elements to highlight to avoid duplicating the highlight\n 'svg *',\n ],\n};\n"],
|
|
5
|
+
"mappings": ";AAAO,IAAM,YAAY;AAElB,IAAM,qBAAqB;AAE3B,IAAM,oBAAoB;AAAA,EAC7B,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,IACL,IAAI,SAAS;AAAA;AAAA,IACb;AAAA,EACJ;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
// src/components/SearchBar/hooks.ts
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { throttle } from "lodash";
|
|
4
|
+
import { CLASSNAME, CLASSNAME_SELECTED, HIGHLIGHT_OPTIONS } from "./constants";
|
|
5
|
+
import { getHighlightedItemIndexInView, highlight, scrollToItem } from "./utils";
|
|
6
|
+
function useHighlightedSearchWords({
|
|
7
|
+
html,
|
|
8
|
+
searchWords,
|
|
9
|
+
showSearchBar,
|
|
10
|
+
onContentMutation: _onContentMutation,
|
|
11
|
+
onContentLoaded: _onContentLoaded,
|
|
12
|
+
onNotFoundWords
|
|
13
|
+
}) {
|
|
14
|
+
const highlightedHtml = useHighlightedHTMLString(html, searchWords, showSearchBar);
|
|
15
|
+
const { wasChangedDOM, onContentMutation, onContentLoaded } = useCallbackDOMChange({
|
|
16
|
+
onContentMutation: _onContentMutation,
|
|
17
|
+
onContentLoaded: _onContentLoaded
|
|
18
|
+
});
|
|
19
|
+
const highlightedDOMElements = useHighlightedDOMElements(
|
|
20
|
+
highlightedHtml,
|
|
21
|
+
wasChangedDOM,
|
|
22
|
+
showSearchBar
|
|
23
|
+
);
|
|
24
|
+
const searchBarIsVisible = useSearchBarIsVisible({
|
|
25
|
+
showSearchBar,
|
|
26
|
+
searchWords,
|
|
27
|
+
highlightedHtml,
|
|
28
|
+
html
|
|
29
|
+
});
|
|
30
|
+
useNoSearchWordsFoundEffect({ highlightedDOMElements, showSearchBar, onNotFoundWords });
|
|
31
|
+
return {
|
|
32
|
+
highlightedHtml,
|
|
33
|
+
highlightedDOMElements,
|
|
34
|
+
searchBarIsVisible,
|
|
35
|
+
wasChangedDOM,
|
|
36
|
+
onContentMutation,
|
|
37
|
+
onContentLoaded
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function useHighlightedDOMElements(highlightedHtml, wasChangedDOM, showSearchBar) {
|
|
41
|
+
const cachedHighlightedDOMElements = useRef([]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
cachedHighlightedDOMElements.current = [];
|
|
44
|
+
}, [highlightedHtml]);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (wasChangedDOM) {
|
|
47
|
+
cachedHighlightedDOMElements.current = [];
|
|
48
|
+
}
|
|
49
|
+
}, [wasChangedDOM]);
|
|
50
|
+
if (cachedHighlightedDOMElements.current.length) {
|
|
51
|
+
return cachedHighlightedDOMElements.current;
|
|
52
|
+
}
|
|
53
|
+
if (!showSearchBar || typeof document === "undefined") {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const elements = document.querySelectorAll(`.${CLASSNAME}`);
|
|
57
|
+
cachedHighlightedDOMElements.current = [...elements];
|
|
58
|
+
return cachedHighlightedDOMElements.current;
|
|
59
|
+
}
|
|
60
|
+
function useHighlightedHTMLString(html, searchWords, showSearchBar) {
|
|
61
|
+
const [highlightedHtml, setHighlightedHtml] = useState(html);
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!searchWords.length || !showSearchBar) {
|
|
64
|
+
setHighlightedHtml(html);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const highlightedResult = highlight({
|
|
68
|
+
html,
|
|
69
|
+
keywords: searchWords,
|
|
70
|
+
options: HIGHLIGHT_OPTIONS
|
|
71
|
+
});
|
|
72
|
+
if (highlightedResult.includes(CLASSNAME)) {
|
|
73
|
+
setHighlightedHtml(highlightedResult);
|
|
74
|
+
} else {
|
|
75
|
+
setHighlightedHtml(html);
|
|
76
|
+
}
|
|
77
|
+
}, [html, searchWords, showSearchBar]);
|
|
78
|
+
return highlightedHtml;
|
|
79
|
+
}
|
|
80
|
+
function useSearchBarIsVisible({
|
|
81
|
+
showSearchBar,
|
|
82
|
+
searchWords,
|
|
83
|
+
highlightedHtml,
|
|
84
|
+
html
|
|
85
|
+
}) {
|
|
86
|
+
const [searchBarIsVisible, setSearchBarIsVisible] = useState(showSearchBar);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
setSearchBarIsVisible(
|
|
89
|
+
showSearchBar && Boolean(searchWords && searchWords.length) && highlightedHtml !== html
|
|
90
|
+
);
|
|
91
|
+
}, [showSearchBar, searchWords, highlightedHtml, html]);
|
|
92
|
+
return searchBarIsVisible;
|
|
93
|
+
}
|
|
94
|
+
function useCallbackDOMChange({
|
|
95
|
+
onContentMutation: _onContentMutation,
|
|
96
|
+
onContentLoaded: _onContentLoaded
|
|
97
|
+
}) {
|
|
98
|
+
const [wasChangedDOM, setWasChangedDOM] = useState(false);
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (wasChangedDOM) {
|
|
101
|
+
setWasChangedDOM(false);
|
|
102
|
+
}
|
|
103
|
+
}, [wasChangedDOM]);
|
|
104
|
+
const onContentMutation = useCallback(() => {
|
|
105
|
+
if (_onContentMutation) {
|
|
106
|
+
_onContentMutation();
|
|
107
|
+
}
|
|
108
|
+
setWasChangedDOM(true);
|
|
109
|
+
}, [_onContentMutation]);
|
|
110
|
+
const onContentLoaded = useCallback(() => {
|
|
111
|
+
if (_onContentLoaded) {
|
|
112
|
+
_onContentLoaded();
|
|
113
|
+
}
|
|
114
|
+
setWasChangedDOM(true);
|
|
115
|
+
}, [_onContentLoaded]);
|
|
116
|
+
return {
|
|
117
|
+
wasChangedDOM,
|
|
118
|
+
onContentMutation,
|
|
119
|
+
onContentLoaded
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function useNoSearchWordsFoundEffect({
|
|
123
|
+
showSearchBar,
|
|
124
|
+
highlightedDOMElements,
|
|
125
|
+
onNotFoundWords
|
|
126
|
+
}) {
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
if (!onNotFoundWords) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (showSearchBar && !highlightedDOMElements.length) {
|
|
132
|
+
onNotFoundWords();
|
|
133
|
+
}
|
|
134
|
+
}, [highlightedDOMElements, showSearchBar, onNotFoundWords]);
|
|
135
|
+
}
|
|
136
|
+
function useSearchBarNavigation({
|
|
137
|
+
highlightedDOMElements,
|
|
138
|
+
stopSyncOnScroll,
|
|
139
|
+
headerHeight,
|
|
140
|
+
hash
|
|
141
|
+
}) {
|
|
142
|
+
const [searchCurrentIndex, setSearchCurrentIndex] = useState(1);
|
|
143
|
+
const [searchCountResults, setSearchCountResults] = useState(1);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
const startIndex = getHighlightedItemIndexInView({ highlightedDOMElements, headerHeight, hash }) || 1;
|
|
146
|
+
setSearchCurrentIndex(startIndex);
|
|
147
|
+
setSearchCountResults(highlightedDOMElements.length || 1);
|
|
148
|
+
}, [highlightedDOMElements, headerHeight, hash]);
|
|
149
|
+
const onClickNextSearch = useCallback(
|
|
150
|
+
(e) => {
|
|
151
|
+
e.stopPropagation();
|
|
152
|
+
e.preventDefault();
|
|
153
|
+
stopSyncOnScroll();
|
|
154
|
+
if (!highlightedDOMElements.length) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
let newIndex = searchCurrentIndex + 1;
|
|
158
|
+
if (newIndex > highlightedDOMElements.length) {
|
|
159
|
+
newIndex = 1;
|
|
160
|
+
}
|
|
161
|
+
setSearchCurrentIndex(newIndex);
|
|
162
|
+
},
|
|
163
|
+
[highlightedDOMElements, searchCurrentIndex, setSearchCurrentIndex, stopSyncOnScroll]
|
|
164
|
+
);
|
|
165
|
+
const onClickPrevSearch = useCallback(
|
|
166
|
+
(e) => {
|
|
167
|
+
e.stopPropagation();
|
|
168
|
+
e.preventDefault();
|
|
169
|
+
stopSyncOnScroll();
|
|
170
|
+
if (!highlightedDOMElements.length) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
let newIndex = searchCurrentIndex - 1;
|
|
174
|
+
if (newIndex < 1) {
|
|
175
|
+
newIndex = highlightedDOMElements.length;
|
|
176
|
+
}
|
|
177
|
+
setSearchCurrentIndex(newIndex);
|
|
178
|
+
},
|
|
179
|
+
[highlightedDOMElements, searchCurrentIndex, setSearchCurrentIndex, stopSyncOnScroll]
|
|
180
|
+
);
|
|
181
|
+
return {
|
|
182
|
+
searchCurrentIndex,
|
|
183
|
+
setSearchCurrentIndex,
|
|
184
|
+
searchCountResults,
|
|
185
|
+
onClickPrevSearch,
|
|
186
|
+
onClickNextSearch
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function useCurrentWordSelectionEffect({
|
|
190
|
+
searchCurrentIndex,
|
|
191
|
+
highlightedDOMElements,
|
|
192
|
+
wasChangedDOM,
|
|
193
|
+
syncOnScroll,
|
|
194
|
+
hash
|
|
195
|
+
}) {
|
|
196
|
+
useEffect(() => {
|
|
197
|
+
try {
|
|
198
|
+
if (!highlightedDOMElements || !highlightedDOMElements.length) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
for (let index = 0; index < highlightedDOMElements.length; index++) {
|
|
202
|
+
const item2 = highlightedDOMElements[index];
|
|
203
|
+
item2.classList.remove(CLASSNAME_SELECTED);
|
|
204
|
+
}
|
|
205
|
+
const item = highlightedDOMElements[searchCurrentIndex - 1];
|
|
206
|
+
item.classList.add(CLASSNAME_SELECTED);
|
|
207
|
+
} catch (e) {
|
|
208
|
+
console.error(e);
|
|
209
|
+
}
|
|
210
|
+
}, [highlightedDOMElements, searchCurrentIndex, wasChangedDOM]);
|
|
211
|
+
useEffect(() => {
|
|
212
|
+
if (syncOnScroll) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
scrollToItem(highlightedDOMElements[searchCurrentIndex - 1]);
|
|
216
|
+
}, [wasChangedDOM, searchCurrentIndex, highlightedDOMElements, syncOnScroll, hash]);
|
|
217
|
+
}
|
|
218
|
+
function useCurrentWordSelectionSyncScrollEffect({
|
|
219
|
+
highlightedDOMElements,
|
|
220
|
+
searchWords,
|
|
221
|
+
syncOnScroll,
|
|
222
|
+
searchBarIsVisible,
|
|
223
|
+
setSearchCurrentIndex,
|
|
224
|
+
headerHeight,
|
|
225
|
+
setSyncOnScroll
|
|
226
|
+
}) {
|
|
227
|
+
const scrollEndTimer = useRef();
|
|
228
|
+
const handleScroll = useCallback(() => {
|
|
229
|
+
if (scrollEndTimer.current) {
|
|
230
|
+
clearTimeout(scrollEndTimer.current);
|
|
231
|
+
}
|
|
232
|
+
scrollEndTimer.current = setTimeout(() => {
|
|
233
|
+
setSyncOnScroll(true);
|
|
234
|
+
}, 50);
|
|
235
|
+
if (!syncOnScroll || !searchBarIsVisible) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const highlightedItemIndexInView = getHighlightedItemIndexInView({
|
|
239
|
+
highlightedDOMElements,
|
|
240
|
+
headerHeight
|
|
241
|
+
});
|
|
242
|
+
if (isNaN(highlightedItemIndexInView)) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
setSearchCurrentIndex(highlightedItemIndexInView);
|
|
246
|
+
}, [
|
|
247
|
+
setSyncOnScroll,
|
|
248
|
+
searchBarIsVisible,
|
|
249
|
+
syncOnScroll,
|
|
250
|
+
setSearchCurrentIndex,
|
|
251
|
+
highlightedDOMElements,
|
|
252
|
+
headerHeight
|
|
253
|
+
]);
|
|
254
|
+
const handleScrollThrottled = throttle(handleScroll, 50);
|
|
255
|
+
useEffect(() => {
|
|
256
|
+
if (searchBarIsVisible) {
|
|
257
|
+
window.addEventListener("scroll", handleScrollThrottled);
|
|
258
|
+
}
|
|
259
|
+
return () => {
|
|
260
|
+
window.removeEventListener("scroll", handleScrollThrottled);
|
|
261
|
+
};
|
|
262
|
+
}, [searchBarIsVisible, searchWords, handleScrollThrottled]);
|
|
263
|
+
}
|
|
264
|
+
export {
|
|
265
|
+
useCurrentWordSelectionEffect,
|
|
266
|
+
useCurrentWordSelectionSyncScrollEffect,
|
|
267
|
+
useHighlightedSearchWords,
|
|
268
|
+
useNoSearchWordsFoundEffect,
|
|
269
|
+
useSearchBarNavigation
|
|
270
|
+
};
|
|
271
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/SearchBar/hooks.ts"],
|
|
4
|
+
"sourcesContent": ["import {SyntheticEvent, useCallback, useEffect, useRef, useState} from 'react';\n\nimport {throttle} from 'lodash';\n\nimport {CLASSNAME, CLASSNAME_SELECTED, HIGHLIGHT_OPTIONS} from './constants';\nimport {getHighlightedItemIndexInView, highlight, scrollToItem} from './utils';\n\ntype UseHighlightedSearchWords = {\n html: string;\n searchWords: string[];\n showSearchBar: boolean;\n onNotFoundWords?: () => void;\n onContentMutation?: () => void;\n onContentLoaded?: () => void;\n};\n\nexport function useHighlightedSearchWords({\n html,\n searchWords,\n showSearchBar,\n onContentMutation: _onContentMutation,\n onContentLoaded: _onContentLoaded,\n onNotFoundWords,\n}: UseHighlightedSearchWords) {\n const highlightedHtml = useHighlightedHTMLString(html, searchWords, showSearchBar);\n\n const {wasChangedDOM, onContentMutation, onContentLoaded} = useCallbackDOMChange({\n onContentMutation: _onContentMutation,\n onContentLoaded: _onContentLoaded,\n });\n\n const highlightedDOMElements = useHighlightedDOMElements(\n highlightedHtml,\n wasChangedDOM,\n showSearchBar,\n );\n\n const searchBarIsVisible = useSearchBarIsVisible({\n showSearchBar,\n searchWords,\n highlightedHtml,\n html,\n });\n\n useNoSearchWordsFoundEffect({highlightedDOMElements, showSearchBar, onNotFoundWords});\n\n return {\n highlightedHtml,\n highlightedDOMElements,\n searchBarIsVisible,\n wasChangedDOM,\n onContentMutation,\n onContentLoaded,\n };\n}\n\nfunction useHighlightedDOMElements(\n highlightedHtml: string,\n wasChangedDOM: boolean,\n showSearchBar: boolean,\n) {\n const cachedHighlightedDOMElements = useRef<Element[]>([] as Element[]);\n\n useEffect(() => {\n cachedHighlightedDOMElements.current = [];\n }, [highlightedHtml]);\n\n useEffect(() => {\n if (wasChangedDOM) {\n cachedHighlightedDOMElements.current = [];\n }\n }, [wasChangedDOM]);\n\n if (cachedHighlightedDOMElements.current.length) {\n return cachedHighlightedDOMElements.current;\n }\n\n if (!showSearchBar || typeof document === 'undefined') {\n return [];\n }\n\n const elements = document.querySelectorAll(`.${CLASSNAME}`);\n cachedHighlightedDOMElements.current = [...elements];\n\n return cachedHighlightedDOMElements.current;\n}\n\n/* Try wrapping the search words in an html string by span elements with a highlight class */\nfunction useHighlightedHTMLString(html: string, searchWords: string[], showSearchBar: boolean) {\n const [highlightedHtml, setHighlightedHtml] = useState(html);\n\n useEffect(() => {\n if (!searchWords.length || !showSearchBar) {\n setHighlightedHtml(html);\n return;\n }\n\n const highlightedResult = highlight({\n html,\n keywords: searchWords,\n options: HIGHLIGHT_OPTIONS,\n });\n\n if (highlightedResult.includes(CLASSNAME)) {\n setHighlightedHtml(highlightedResult);\n } else {\n setHighlightedHtml(html);\n }\n }, [html, searchWords, showSearchBar]);\n\n return highlightedHtml;\n}\n\ntype UseSearchBarIsVisible = {\n showSearchBar: boolean;\n searchWords: string[];\n html: string;\n highlightedHtml: string;\n};\n\nfunction useSearchBarIsVisible({\n showSearchBar,\n searchWords,\n highlightedHtml,\n html,\n}: UseSearchBarIsVisible) {\n const [searchBarIsVisible, setSearchBarIsVisible] = useState(showSearchBar);\n\n useEffect(() => {\n setSearchBarIsVisible(\n showSearchBar && Boolean(searchWords && searchWords.length) && highlightedHtml !== html,\n );\n }, [showSearchBar, searchWords, highlightedHtml, html]);\n\n return searchBarIsVisible;\n}\n\ntype UseCallbackDOMChange = {\n onContentMutation?: () => void;\n onContentLoaded?: () => void;\n};\n\nfunction useCallbackDOMChange({\n onContentMutation: _onContentMutation,\n onContentLoaded: _onContentLoaded,\n}: UseCallbackDOMChange) {\n const [wasChangedDOM, setWasChangedDOM] = useState(false);\n\n useEffect(() => {\n if (wasChangedDOM) {\n setWasChangedDOM(false);\n }\n }, [wasChangedDOM]);\n\n /* Callback for dangerouslySetInnerHTML when inserting content */\n const onContentMutation = useCallback(() => {\n if (_onContentMutation) {\n _onContentMutation();\n }\n\n setWasChangedDOM(true);\n }, [_onContentMutation]);\n\n /* Callback for loading resources after inserting content */\n const onContentLoaded = useCallback(() => {\n if (_onContentLoaded) {\n _onContentLoaded();\n }\n\n setWasChangedDOM(true);\n }, [_onContentLoaded]);\n\n return {\n wasChangedDOM,\n onContentMutation,\n onContentLoaded,\n };\n}\n\ntype UseNoSearchWordsFoundEffect = {\n showSearchBar: boolean;\n highlightedDOMElements: Element[];\n onNotFoundWords?: () => void;\n};\n\nexport function useNoSearchWordsFoundEffect({\n showSearchBar,\n highlightedDOMElements,\n onNotFoundWords,\n}: UseNoSearchWordsFoundEffect) {\n useEffect(() => {\n if (!onNotFoundWords) {\n return;\n }\n\n if (showSearchBar && !highlightedDOMElements.length) {\n onNotFoundWords();\n }\n }, [highlightedDOMElements, showSearchBar, onNotFoundWords]);\n}\n\ntype UseSearchBarNavigation = {\n highlightedDOMElements: Element[];\n stopSyncOnScroll: () => void;\n headerHeight: number;\n hash?: string;\n};\n\nexport function useSearchBarNavigation({\n highlightedDOMElements,\n stopSyncOnScroll,\n headerHeight,\n hash,\n}: UseSearchBarNavigation) {\n const [searchCurrentIndex, setSearchCurrentIndex] = useState(1);\n const [searchCountResults, setSearchCountResults] = useState(1);\n\n useEffect(() => {\n const startIndex =\n getHighlightedItemIndexInView({highlightedDOMElements, headerHeight, hash}) || 1;\n\n setSearchCurrentIndex(startIndex);\n setSearchCountResults(highlightedDOMElements.length || 1);\n }, [highlightedDOMElements, headerHeight, hash]);\n\n const onClickNextSearch = useCallback(\n (e: SyntheticEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n stopSyncOnScroll();\n\n if (!highlightedDOMElements.length) {\n return;\n }\n\n let newIndex = searchCurrentIndex + 1;\n if (newIndex > highlightedDOMElements.length) {\n newIndex = 1;\n }\n\n setSearchCurrentIndex(newIndex);\n },\n [highlightedDOMElements, searchCurrentIndex, setSearchCurrentIndex, stopSyncOnScroll],\n );\n\n const onClickPrevSearch = useCallback(\n (e: SyntheticEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n stopSyncOnScroll();\n\n if (!highlightedDOMElements.length) {\n return;\n }\n\n let newIndex = searchCurrentIndex - 1;\n if (newIndex < 1) {\n newIndex = highlightedDOMElements.length;\n }\n\n setSearchCurrentIndex(newIndex);\n },\n [highlightedDOMElements, searchCurrentIndex, setSearchCurrentIndex, stopSyncOnScroll],\n );\n\n return {\n searchCurrentIndex,\n setSearchCurrentIndex,\n searchCountResults,\n onClickPrevSearch,\n onClickNextSearch,\n };\n}\n\ntype UseHighlightCurrentWordEffect = {\n highlightedDOMElements: Element[];\n searchCurrentIndex: number;\n wasChangedDOM: boolean;\n syncOnScroll: boolean;\n hash?: string;\n};\n\nexport function useCurrentWordSelectionEffect({\n searchCurrentIndex,\n highlightedDOMElements,\n wasChangedDOM,\n syncOnScroll,\n hash,\n}: UseHighlightCurrentWordEffect) {\n useEffect(() => {\n try {\n if (!highlightedDOMElements || !highlightedDOMElements.length) {\n return;\n }\n\n for (let index = 0; index < highlightedDOMElements.length; index++) {\n const item = highlightedDOMElements[index];\n\n item.classList.remove(CLASSNAME_SELECTED);\n }\n\n const item = highlightedDOMElements[searchCurrentIndex - 1];\n item.classList.add(CLASSNAME_SELECTED);\n } catch (e) {\n console.error(e);\n }\n }, [highlightedDOMElements, searchCurrentIndex, wasChangedDOM]);\n\n useEffect(() => {\n if (syncOnScroll) {\n return;\n }\n\n scrollToItem(highlightedDOMElements[searchCurrentIndex - 1]);\n }, [wasChangedDOM, searchCurrentIndex, highlightedDOMElements, syncOnScroll, hash]);\n}\n\ntype UseCurrentWordSelectionSyncScrollEffect = {\n highlightedDOMElements: Element[];\n searchWords: string[];\n syncOnScroll: boolean;\n searchBarIsVisible: boolean;\n setSearchCurrentIndex: (index: number) => void;\n headerHeight: number;\n setSyncOnScroll: (flag: boolean) => void;\n};\n\nexport function useCurrentWordSelectionSyncScrollEffect({\n highlightedDOMElements,\n searchWords,\n syncOnScroll,\n searchBarIsVisible,\n setSearchCurrentIndex,\n headerHeight,\n setSyncOnScroll,\n}: UseCurrentWordSelectionSyncScrollEffect) {\n const scrollEndTimer = useRef<ReturnType<typeof setTimeout>>();\n\n const handleScroll = useCallback(() => {\n if (scrollEndTimer.current) {\n clearTimeout(scrollEndTimer.current);\n }\n\n scrollEndTimer.current = setTimeout(() => {\n setSyncOnScroll(true);\n }, 50);\n\n if (!syncOnScroll || !searchBarIsVisible) {\n return;\n }\n\n const highlightedItemIndexInView = getHighlightedItemIndexInView({\n highlightedDOMElements,\n headerHeight,\n });\n\n if (isNaN(highlightedItemIndexInView as number)) {\n return;\n }\n\n setSearchCurrentIndex(highlightedItemIndexInView as number);\n }, [\n setSyncOnScroll,\n searchBarIsVisible,\n syncOnScroll,\n setSearchCurrentIndex,\n highlightedDOMElements,\n headerHeight,\n ]);\n\n const handleScrollThrottled = throttle(handleScroll, 50);\n\n useEffect(() => {\n if (searchBarIsVisible) {\n window.addEventListener('scroll', handleScrollThrottled);\n }\n return () => {\n window.removeEventListener('scroll', handleScrollThrottled);\n };\n }, [searchBarIsVisible, searchWords, handleScrollThrottled]);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["item"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// src/components/SearchBar/index.ts
|
|
2
|
+
export * from "./SearchBar";
|
|
3
|
+
import { default as default2 } from "./SearchBar";
|
|
4
|
+
export * from "./withHighlightedSearchWords";
|
|
5
|
+
import { default as default3 } from "./withHighlightedSearchWords";
|
|
6
|
+
export {
|
|
7
|
+
default2 as SearchBar,
|
|
8
|
+
default3 as withHighlightedSearchWords
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/SearchBar/index.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './SearchBar';\nexport {default as SearchBar} from './SearchBar';\nexport * from './withHighlightedSearchWords';\nexport {default as withHighlightedSearchWords} from './withHighlightedSearchWords';\n"],
|
|
5
|
+
"mappings": ";AAAA,cAAc;AACd,SAAmB,WAAXA,gBAA2B;AACnC,cAAc;AACd,SAAmB,WAAXA,gBAA4C;",
|
|
6
|
+
"names": ["default"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// src/components/SearchBar/utils.ts
|
|
2
|
+
import Mark from "mark.ts";
|
|
3
|
+
function highlight({ html, keywords, options }) {
|
|
4
|
+
const tmpDiv = document.createElement("div");
|
|
5
|
+
tmpDiv.innerHTML = html;
|
|
6
|
+
const markInstance = new Mark(tmpDiv);
|
|
7
|
+
markInstance.mark(keywords, options);
|
|
8
|
+
return tmpDiv.innerHTML;
|
|
9
|
+
}
|
|
10
|
+
function scrollToItem(item) {
|
|
11
|
+
if (!item) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
item.scrollIntoView({
|
|
15
|
+
block: "center",
|
|
16
|
+
inline: "center"
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function getElementOffset(item, offset = 0) {
|
|
20
|
+
return Math.floor(Number(item.getBoundingClientRect().top)) - offset;
|
|
21
|
+
}
|
|
22
|
+
function getItemIndexInView({
|
|
23
|
+
elements,
|
|
24
|
+
offset = 0,
|
|
25
|
+
top = 0,
|
|
26
|
+
bottom = Infinity,
|
|
27
|
+
reverse = false
|
|
28
|
+
}) {
|
|
29
|
+
let itemIndex;
|
|
30
|
+
for (let index = 0; index < elements.length; index++) {
|
|
31
|
+
const item = elements[index];
|
|
32
|
+
const itemOffset = getElementOffset(item, offset);
|
|
33
|
+
if (itemOffset >= top && itemOffset <= bottom) {
|
|
34
|
+
itemIndex = index + 1;
|
|
35
|
+
if (!reverse) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return itemIndex;
|
|
41
|
+
}
|
|
42
|
+
function getHighlightedItemIndexInView({
|
|
43
|
+
highlightedDOMElements,
|
|
44
|
+
headerHeight,
|
|
45
|
+
hash
|
|
46
|
+
}) {
|
|
47
|
+
const elements = highlightedDOMElements;
|
|
48
|
+
const offset = headerHeight;
|
|
49
|
+
let top = 0;
|
|
50
|
+
if (hash && typeof document !== "undefined") {
|
|
51
|
+
const anchorEl = document.getElementById(hash);
|
|
52
|
+
if (anchorEl) {
|
|
53
|
+
top = getElementOffset(anchorEl, offset);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const firstIndexInView = getItemIndexInView({ top, elements, offset });
|
|
57
|
+
const firstIndexOutViewBottom = getItemIndexInView({
|
|
58
|
+
top: top + window.innerHeight,
|
|
59
|
+
elements,
|
|
60
|
+
offset
|
|
61
|
+
});
|
|
62
|
+
const lastIndexOutViewTop = getItemIndexInView({
|
|
63
|
+
top: -Infinity,
|
|
64
|
+
bottom: top,
|
|
65
|
+
reverse: true,
|
|
66
|
+
elements,
|
|
67
|
+
offset
|
|
68
|
+
});
|
|
69
|
+
return firstIndexInView || firstIndexOutViewBottom || lastIndexOutViewTop;
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
getHighlightedItemIndexInView,
|
|
73
|
+
getItemIndexInView,
|
|
74
|
+
highlight,
|
|
75
|
+
scrollToItem
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/SearchBar/utils.ts"],
|
|
4
|
+
"sourcesContent": ["import Mark from 'mark.ts';\n\nexport interface HighlightOptions {\n html: string;\n keywords: string[];\n options: {\n className: string;\n element: string;\n exclude: string[];\n };\n}\n\nexport function highlight({html, keywords, options}: HighlightOptions) {\n const tmpDiv = document.createElement('div');\n tmpDiv.innerHTML = html;\n\n const markInstance = new Mark(tmpDiv);\n markInstance.mark(keywords, options);\n\n return tmpDiv.innerHTML;\n}\n\nexport function scrollToItem(item: Element) {\n if (!item) {\n return;\n }\n\n item.scrollIntoView({\n block: 'center',\n inline: 'center',\n });\n}\n\ntype GetItemIndexInView = {\n elements: Element[];\n offset?: number;\n top?: number;\n bottom?: number;\n reverse?: boolean;\n};\n\nfunction getElementOffset(item: HTMLElement, offset = 0) {\n return Math.floor(Number((item as HTMLElement).getBoundingClientRect().top)) - offset;\n}\n\nexport function getItemIndexInView({\n elements,\n offset = 0,\n top = 0,\n bottom = Infinity,\n reverse = false,\n}: GetItemIndexInView) {\n let itemIndex;\n for (let index = 0; index < elements.length; index++) {\n const item = elements[index];\n const itemOffset = getElementOffset(item as HTMLElement, offset);\n\n if (itemOffset >= top && itemOffset <= bottom) {\n itemIndex = index + 1;\n\n if (!reverse) {\n break;\n }\n }\n }\n\n return itemIndex;\n}\n\ntype UseHighlightedItemInView = {\n highlightedDOMElements: Element[];\n headerHeight: number;\n hash?: string;\n};\n\nexport function getHighlightedItemIndexInView({\n highlightedDOMElements,\n headerHeight,\n hash,\n}: UseHighlightedItemInView) {\n const elements = highlightedDOMElements;\n const offset = headerHeight;\n let top = 0;\n\n if (hash && typeof document !== 'undefined') {\n const anchorEl = document.getElementById(hash) as HTMLElement;\n if (anchorEl) {\n top = getElementOffset(anchorEl, offset);\n }\n }\n\n const firstIndexInView = getItemIndexInView({top, elements, offset});\n const firstIndexOutViewBottom = getItemIndexInView({\n top: top + window.innerHeight,\n elements,\n offset,\n });\n const lastIndexOutViewTop = getItemIndexInView({\n top: -Infinity,\n bottom: top,\n reverse: true,\n elements,\n offset,\n });\n\n return firstIndexInView || firstIndexOutViewBottom || lastIndexOutViewTop;\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,OAAO,UAAU;AAYV,SAAS,UAAU,EAAC,MAAM,UAAU,QAAO,GAAqB;AACnE,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,SAAO,YAAY;AAEnB,QAAM,eAAe,IAAI,KAAK,MAAM;AACpC,eAAa,KAAK,UAAU,OAAO;AAEnC,SAAO,OAAO;AAClB;AAEO,SAAS,aAAa,MAAe;AACxC,MAAI,CAAC,MAAM;AACP;AAAA,EACJ;AAEA,OAAK,eAAe;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ,CAAC;AACL;AAUA,SAAS,iBAAiB,MAAmB,SAAS,GAAG;AACrD,SAAO,KAAK,MAAM,OAAQ,KAAqB,sBAAsB,EAAE,GAAG,CAAC,IAAI;AACnF;AAEO,SAAS,mBAAmB;AAAA,EAC/B;AAAA,EACA,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AACd,GAAuB;AACnB,MAAI;AACJ,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;AAClD,UAAM,OAAO,SAAS,KAAK;AAC3B,UAAM,aAAa,iBAAiB,MAAqB,MAAM;AAE/D,QAAI,cAAc,OAAO,cAAc,QAAQ;AAC3C,kBAAY,QAAQ;AAEpB,UAAI,CAAC,SAAS;AACV;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AAQO,SAAS,8BAA8B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACJ,GAA6B;AACzB,QAAM,WAAW;AACjB,QAAM,SAAS;AACf,MAAI,MAAM;AAEV,MAAI,QAAQ,OAAO,aAAa,aAAa;AACzC,UAAM,WAAW,SAAS,eAAe,IAAI;AAC7C,QAAI,UAAU;AACV,YAAM,iBAAiB,UAAU,MAAM;AAAA,IAC3C;AAAA,EACJ;AAEA,QAAM,mBAAmB,mBAAmB,EAAC,KAAK,UAAU,OAAM,CAAC;AACnE,QAAM,0BAA0B,mBAAmB;AAAA,IAC/C,KAAK,MAAM,OAAO;AAAA,IAClB;AAAA,IACA;AAAA,EACJ,CAAC;AACD,QAAM,sBAAsB,mBAAmB;AAAA,IAC3C,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACJ,CAAC;AAED,SAAO,oBAAoB,2BAA2B;AAC1D;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// src/components/SearchBar/withHighlightedSearchWords.tsx
|
|
2
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import {
|
|
4
|
+
useCurrentWordSelectionEffect,
|
|
5
|
+
useCurrentWordSelectionSyncScrollEffect,
|
|
6
|
+
useHighlightedSearchWords,
|
|
7
|
+
useSearchBarNavigation
|
|
8
|
+
} from "./hooks";
|
|
9
|
+
function withHighlightedSearchWords(Component) {
|
|
10
|
+
const SearchWordsHighlighter = (props) => {
|
|
11
|
+
const {
|
|
12
|
+
html,
|
|
13
|
+
searchWords = [],
|
|
14
|
+
showSearchBar = false,
|
|
15
|
+
onCloseSearchBar,
|
|
16
|
+
onNotFoundWords = () => {
|
|
17
|
+
},
|
|
18
|
+
onContentMutation: _onContentMutation,
|
|
19
|
+
onContentLoaded: _onContentLoaded,
|
|
20
|
+
headerHeight = 0,
|
|
21
|
+
router: { hash }
|
|
22
|
+
} = props;
|
|
23
|
+
const [syncOnScroll, setSyncOnScroll] = useState(true);
|
|
24
|
+
const stopSyncOnScroll = useCallback(() => setSyncOnScroll(false), []);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
setSyncOnScroll(false);
|
|
27
|
+
}, [html, searchWords]);
|
|
28
|
+
const {
|
|
29
|
+
highlightedHtml,
|
|
30
|
+
highlightedDOMElements,
|
|
31
|
+
searchBarIsVisible,
|
|
32
|
+
wasChangedDOM,
|
|
33
|
+
onContentMutation,
|
|
34
|
+
onContentLoaded
|
|
35
|
+
} = useHighlightedSearchWords({
|
|
36
|
+
html,
|
|
37
|
+
searchWords,
|
|
38
|
+
showSearchBar,
|
|
39
|
+
onContentMutation: _onContentMutation,
|
|
40
|
+
onContentLoaded: _onContentLoaded,
|
|
41
|
+
onNotFoundWords
|
|
42
|
+
});
|
|
43
|
+
const {
|
|
44
|
+
searchCurrentIndex,
|
|
45
|
+
setSearchCurrentIndex,
|
|
46
|
+
searchCountResults,
|
|
47
|
+
onClickPrevSearch,
|
|
48
|
+
onClickNextSearch
|
|
49
|
+
} = useSearchBarNavigation({ highlightedDOMElements, stopSyncOnScroll, headerHeight, hash });
|
|
50
|
+
useCurrentWordSelectionEffect({
|
|
51
|
+
searchCurrentIndex,
|
|
52
|
+
highlightedDOMElements,
|
|
53
|
+
wasChangedDOM,
|
|
54
|
+
syncOnScroll,
|
|
55
|
+
hash
|
|
56
|
+
});
|
|
57
|
+
useCurrentWordSelectionSyncScrollEffect({
|
|
58
|
+
highlightedDOMElements,
|
|
59
|
+
searchWords,
|
|
60
|
+
syncOnScroll,
|
|
61
|
+
searchBarIsVisible,
|
|
62
|
+
setSearchCurrentIndex,
|
|
63
|
+
headerHeight,
|
|
64
|
+
setSyncOnScroll
|
|
65
|
+
});
|
|
66
|
+
if (searchBarIsVisible) {
|
|
67
|
+
return /* @__PURE__ */ React.createElement(
|
|
68
|
+
Component,
|
|
69
|
+
{
|
|
70
|
+
...props,
|
|
71
|
+
html: highlightedHtml,
|
|
72
|
+
onContentMutation,
|
|
73
|
+
onContentLoaded,
|
|
74
|
+
searchCurrentIndex,
|
|
75
|
+
searchCountResults,
|
|
76
|
+
onCloseSearchBar,
|
|
77
|
+
onClickPrevSearch,
|
|
78
|
+
onClickNextSearch
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
return /* @__PURE__ */ React.createElement(Component, { ...props, showSearchBar: false });
|
|
83
|
+
};
|
|
84
|
+
const SearchWordsHighlighterWrapper = (props) => {
|
|
85
|
+
const { useSearchBar = false } = props;
|
|
86
|
+
if (useSearchBar) {
|
|
87
|
+
return /* @__PURE__ */ React.createElement(SearchWordsHighlighter, { ...props });
|
|
88
|
+
}
|
|
89
|
+
return /* @__PURE__ */ React.createElement(Component, { ...props });
|
|
90
|
+
};
|
|
91
|
+
return SearchWordsHighlighterWrapper;
|
|
92
|
+
}
|
|
93
|
+
var withHighlightedSearchWords_default = withHighlightedSearchWords;
|
|
94
|
+
export {
|
|
95
|
+
withHighlightedSearchWords_default as default
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=withHighlightedSearchWords.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/SearchBar/withHighlightedSearchWords.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, {useCallback, useEffect, useState} from 'react';\n\nimport {DocPageData, Router} from '../../models';\n\nimport {\n useCurrentWordSelectionEffect,\n useCurrentWordSelectionSyncScrollEffect,\n useHighlightedSearchWords,\n useSearchBarNavigation,\n} from './hooks';\n\nexport interface SearchWordsHighlighterProps extends DocPageData {\n useSearchBar?: boolean;\n searchWords?: string[];\n showSearchBar?: boolean;\n onCloseSearchBar?: () => void;\n onNotFoundWords?: () => void;\n searchQuery?: string;\n onContentMutation?: () => void;\n onContentLoaded?: () => void;\n headerHeight?: number;\n router: Router;\n}\n\nfunction withHighlightedSearchWords<T extends SearchWordsHighlighterProps>(\n Component: React.ComponentType<T>,\n) {\n const SearchWordsHighlighter: React.FC<SearchWordsHighlighterProps & T> = (\n props,\n ): JSX.Element | null => {\n const {\n html,\n searchWords = [],\n showSearchBar = false,\n onCloseSearchBar,\n onNotFoundWords = () => {},\n onContentMutation: _onContentMutation,\n onContentLoaded: _onContentLoaded,\n headerHeight = 0,\n router: {hash},\n } = props;\n\n const [syncOnScroll, setSyncOnScroll] = useState<boolean>(true);\n const stopSyncOnScroll = useCallback(() => setSyncOnScroll(false), []);\n\n useEffect(() => {\n setSyncOnScroll(false);\n }, [html, searchWords]);\n\n const {\n highlightedHtml,\n highlightedDOMElements,\n searchBarIsVisible,\n wasChangedDOM,\n onContentMutation,\n onContentLoaded,\n } = useHighlightedSearchWords({\n html,\n searchWords,\n showSearchBar,\n onContentMutation: _onContentMutation,\n onContentLoaded: _onContentLoaded,\n onNotFoundWords,\n });\n\n const {\n searchCurrentIndex,\n setSearchCurrentIndex,\n searchCountResults,\n onClickPrevSearch,\n onClickNextSearch,\n } = useSearchBarNavigation({highlightedDOMElements, stopSyncOnScroll, headerHeight, hash});\n\n useCurrentWordSelectionEffect({\n searchCurrentIndex,\n highlightedDOMElements,\n wasChangedDOM,\n syncOnScroll,\n hash,\n });\n\n /* Sync scroll with a current item in viewport */\n useCurrentWordSelectionSyncScrollEffect({\n highlightedDOMElements,\n searchWords,\n syncOnScroll,\n searchBarIsVisible,\n setSearchCurrentIndex,\n headerHeight,\n setSyncOnScroll,\n });\n\n if (searchBarIsVisible) {\n return (\n <Component\n {...props}\n html={highlightedHtml}\n onContentMutation={onContentMutation}\n onContentLoaded={onContentLoaded}\n searchCurrentIndex={searchCurrentIndex}\n searchCountResults={searchCountResults}\n onCloseSearchBar={onCloseSearchBar}\n onClickPrevSearch={onClickPrevSearch}\n onClickNextSearch={onClickNextSearch}\n />\n );\n }\n\n return <Component {...props} showSearchBar={false} />;\n };\n\n const SearchWordsHighlighterWrapper: React.FC<SearchWordsHighlighterProps & T> = (\n props,\n ): JSX.Element | null => {\n const {useSearchBar = false} = props;\n\n if (useSearchBar) {\n return <SearchWordsHighlighter {...props} />;\n }\n\n return <Component {...props} />;\n };\n\n return SearchWordsHighlighterWrapper;\n}\n\nexport default withHighlightedSearchWords;\n"],
|
|
5
|
+
"mappings": ";AAAA,OAAO,SAAQ,aAAa,WAAW,gBAAe;AAItD;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAeP,SAAS,2BACL,WACF;AACE,QAAM,yBAAoE,CACtE,UACqB;AACrB,UAAM;AAAA,MACF;AAAA,MACA,cAAc,CAAC;AAAA,MACf,gBAAgB;AAAA,MAChB;AAAA,MACA,kBAAkB,MAAM;AAAA,MAAC;AAAA,MACzB,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,QAAQ,EAAC,KAAI;AAAA,IACjB,IAAI;AAEJ,UAAM,CAAC,cAAc,eAAe,IAAI,SAAkB,IAAI;AAC9D,UAAM,mBAAmB,YAAY,MAAM,gBAAgB,KAAK,GAAG,CAAC,CAAC;AAErE,cAAU,MAAM;AACZ,sBAAgB,KAAK;AAAA,IACzB,GAAG,CAAC,MAAM,WAAW,CAAC;AAEtB,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,0BAA0B;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB;AAAA,IACJ,CAAC;AAED,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,uBAAuB,EAAC,wBAAwB,kBAAkB,cAAc,KAAI,CAAC;AAEzF,kCAA8B;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAGD,4CAAwC;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAED,QAAI,oBAAoB;AACpB,aACI;AAAA,QAAC;AAAA;AAAA,UACI,GAAG;AAAA,UACJ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ;AAAA,IAER;AAEA,WAAO,oCAAC,aAAW,GAAG,OAAO,eAAe,OAAO;AAAA,EACvD;AAEA,QAAM,gCAA2E,CAC7E,UACqB;AACrB,UAAM,EAAC,eAAe,MAAK,IAAI;AAE/B,QAAI,cAAc;AACd,aAAO,oCAAC,0BAAwB,GAAG,OAAO;AAAA,IAC9C;AAEA,WAAO,oCAAC,aAAW,GAAG,OAAO;AAAA,EACjC;AAEA,SAAO;AACX;AAEA,IAAO,qCAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* src/components/SearchItem/SearchItem.scss */
|
|
2
|
+
.SearchItem__link {
|
|
3
|
+
cursor: pointer;
|
|
4
|
+
-webkit-text-decoration: none;
|
|
5
|
+
text-decoration: none;
|
|
6
|
+
color: inherit;
|
|
7
|
+
}
|
|
8
|
+
.SearchItem__link:hover,
|
|
9
|
+
.SearchItem__link:active {
|
|
10
|
+
color: var(--g-color-text-link-hover);
|
|
11
|
+
}
|
|
12
|
+
.SearchItem__marks-wrapper {
|
|
13
|
+
display: none;
|
|
14
|
+
justify-content: flex-end;
|
|
15
|
+
align-items: center;
|
|
16
|
+
}
|
|
17
|
+
.SearchItem__marks {
|
|
18
|
+
height: 16px;
|
|
19
|
+
margin-top: 10px;
|
|
20
|
+
}
|
|
21
|
+
.SearchItem__mark {
|
|
22
|
+
margin-right: 20px;
|
|
23
|
+
}
|
|
24
|
+
.SearchItem__mark:last-child {
|
|
25
|
+
margin-right: 0;
|
|
26
|
+
}
|
|
27
|
+
.SearchItem__item-wrapper:hover .SearchItem__marks-wrapper {
|
|
28
|
+
display: flex;
|
|
29
|
+
}
|
|
30
|
+
.SearchItem__item-wrapper {
|
|
31
|
+
margin-bottom: 20px;
|
|
32
|
+
font-size: var(--g-text-body-1-font-size);
|
|
33
|
+
line-height: var(--g-text-body-1-line-height);
|
|
34
|
+
}
|
|
35
|
+
.SearchItem__item {
|
|
36
|
+
display: block;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
cursor: pointer;
|
|
39
|
+
text-overflow: ellipsis;
|
|
40
|
+
}
|
|
41
|
+
.SearchItem__item-title,
|
|
42
|
+
.SearchItem__item-description {
|
|
43
|
+
display: block;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
text-overflow: ellipsis;
|
|
46
|
+
}
|
|
47
|
+
.SearchItem__item-title {
|
|
48
|
+
margin-bottom: 4px;
|
|
49
|
+
}
|
|
50
|
+
.SearchItem__item-title,
|
|
51
|
+
.SearchItem__item-title .SearchItem__item-search-token {
|
|
52
|
+
outline: none;
|
|
53
|
+
color: var(--g-color-text-link);
|
|
54
|
+
-webkit-text-decoration: none;
|
|
55
|
+
text-decoration: none;
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
color: var(--g-color-text-primary);
|
|
58
|
+
font-size: var(--g-text-subheader-3-font-size);
|
|
59
|
+
line-height: var(--g-text-subheader-3-line-height);
|
|
60
|
+
}
|
|
61
|
+
.utilityfocus .SearchItem__item-title:focus,
|
|
62
|
+
.utilityfocus .SearchItem__item-title .SearchItem__item-search-token:focus {
|
|
63
|
+
outline: 2px solid #ffdb4d;
|
|
64
|
+
}
|
|
65
|
+
.SearchItem__item-title:hover,
|
|
66
|
+
.SearchItem__item-title:active,
|
|
67
|
+
.SearchItem__item-title .SearchItem__item-search-token:hover,
|
|
68
|
+
.SearchItem__item-title .SearchItem__item-search-token:active {
|
|
69
|
+
color: var(--g-color-text-link-hover);
|
|
70
|
+
}
|
|
71
|
+
.SearchItem__item-title:hover .SearchItem__item-search-token {
|
|
72
|
+
color: var(--g-color-text-link-hover);
|
|
73
|
+
}
|
|
74
|
+
.SearchItem__item-description {
|
|
75
|
+
display: inline-block;
|
|
76
|
+
color: var(--g-color-text-secondary);
|
|
77
|
+
}
|
|
78
|
+
.SearchItem__item-description em {
|
|
79
|
+
font-weight: bolder;
|
|
80
|
+
}
|
|
81
|
+
.SearchItem__item-description::after {
|
|
82
|
+
content: "...";
|
|
83
|
+
display: inline;
|
|
84
|
+
}
|
|
85
|
+
.SearchItem__item-description .SearchItem__item-search-token {
|
|
86
|
+
color: var(--g-color-text-primary);
|
|
87
|
+
}
|
|
88
|
+
/*# sourceMappingURL=SearchItem.css.map */
|