@redneckz/wildless-cms-uni-blocks 0.2.101 → 0.2.105

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.
Files changed (285) hide show
  1. package/bundle/blocks.schema.json +1 -1
  2. package/bundle/bundle.umd.js +128 -67
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/dist/components/BlockContent.d.ts +3 -2
  5. package/dist/components/Blocks.d.ts +1 -0
  6. package/dist/components/Blocks.js +2 -0
  7. package/dist/components/Blocks.js.map +1 -1
  8. package/dist/components/Footer/FooterContent.d.ts +1 -1
  9. package/dist/components/Footer/Sitemap.d.ts +1 -1
  10. package/dist/components/Footer/Sitemap.js +2 -2
  11. package/dist/components/Footer/Sitemap.js.map +1 -1
  12. package/dist/components/Gallery/GalleryContainer.js +1 -1
  13. package/dist/components/Gallery/GalleryContainer.js.map +1 -1
  14. package/dist/components/Header/Header.js +13 -9
  15. package/dist/components/Header/Header.js.map +1 -1
  16. package/dist/components/Header/HeaderContent.d.ts +8 -1
  17. package/dist/components/Header/HeaderSecondaryMenu.d.ts +2 -1
  18. package/dist/components/Header/HeaderSecondaryMenu.js +14 -2
  19. package/dist/components/Header/HeaderSecondaryMenu.js.map +1 -1
  20. package/dist/components/Header/HeaderSecondaryMenuButton.js +1 -1
  21. package/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  22. package/dist/components/Headline/HeadlineContent.d.ts +2 -9
  23. package/dist/components/MobileBlocks.d.ts +1 -0
  24. package/dist/components/MobileBlocks.js +2 -0
  25. package/dist/components/MobileBlocks.js.map +1 -1
  26. package/dist/components/Navigation/Navigation.d.ts +5 -0
  27. package/dist/components/Navigation/Navigation.js +16 -0
  28. package/dist/components/Navigation/Navigation.js.map +1 -0
  29. package/dist/components/Navigation/NavigationContent.d.ts +10 -0
  30. package/dist/components/Navigation/NavigationContent.js +2 -0
  31. package/dist/components/Navigation/NavigationContent.js.map +1 -0
  32. package/dist/components/Navigation/NavigationItem.d.ts +4 -0
  33. package/dist/components/Navigation/NavigationItem.js +6 -0
  34. package/dist/components/Navigation/NavigationItem.js.map +1 -0
  35. package/dist/components/TariffsTable/TariffsTableCell.js +1 -3
  36. package/dist/components/TariffsTable/TariffsTableCell.js.map +1 -1
  37. package/dist/components/TariffsTable/TariffsTableRow.js +1 -1
  38. package/dist/components/TariffsTable/TariffsTableRow.js.map +1 -1
  39. package/dist/components/Tile/Tile.d.ts +1 -0
  40. package/dist/components/Tile/Tile.js +2 -2
  41. package/dist/components/Tile/Tile.js.map +1 -1
  42. package/dist/hooks/useLink.js +2 -1
  43. package/dist/hooks/useLink.js.map +1 -1
  44. package/dist/index.d.ts +2 -2
  45. package/dist/index.js.map +1 -1
  46. package/dist/model/BgColorVersion.d.ts +8 -0
  47. package/dist/model/BgColorVersion.js +2 -0
  48. package/dist/model/BgColorVersion.js.map +1 -0
  49. package/dist/services/sitemap/SitemapProps.d.ts +13 -0
  50. package/dist/services/sitemap/SitemapProps.js +2 -0
  51. package/dist/services/sitemap/SitemapProps.js.map +1 -0
  52. package/dist/services/sitemap/findActiveSubItem.d.ts +3 -0
  53. package/dist/services/sitemap/findActiveSubItem.js +13 -0
  54. package/dist/services/sitemap/findActiveSubItem.js.map +1 -0
  55. package/dist/services/sitemap/isHrefActive.d.ts +4 -0
  56. package/dist/services/sitemap/isHrefActive.js +9 -0
  57. package/dist/services/sitemap/isHrefActive.js.map +1 -0
  58. package/dist/services/sitemap/isSubItemActive.d.ts +3 -0
  59. package/dist/services/sitemap/isSubItemActive.js +6 -0
  60. package/dist/services/sitemap/isSubItemActive.js.map +1 -0
  61. package/dist/services/sitemap/isTopItemActive.d.ts +3 -0
  62. package/dist/services/sitemap/isTopItemActive.js +7 -0
  63. package/dist/services/sitemap/isTopItemActive.js.map +1 -0
  64. package/dist/services/sitemap/mergeTopItems.d.ts +2 -0
  65. package/dist/{mergeTopItems.js → services/sitemap/mergeTopItems.js} +1 -3
  66. package/dist/services/sitemap/mergeTopItems.js.map +1 -0
  67. package/dist/services/sitemap/useSitemap.d.ts +3 -0
  68. package/dist/{hooks → services/sitemap}/useSitemap.js +1 -1
  69. package/dist/services/sitemap/useSitemap.js.map +1 -0
  70. package/dist/ui-kit/HeaderItem/HeaderItem.js +16 -4
  71. package/dist/ui-kit/HeaderItem/HeaderItem.js.map +1 -1
  72. package/dist/ui-kit/Icon/IconProps.d.ts +21 -20
  73. package/dist/ui-kit/Icon/IconProps.js +17 -17
  74. package/dist/ui-kit/Icon/IconProps.js.map +1 -1
  75. package/dist/ui-kit/Logo/Logo.d.ts +1 -0
  76. package/dist/ui-kit/Logo/Logo.js +10 -2
  77. package/dist/ui-kit/Logo/Logo.js.map +1 -1
  78. package/dist/ui-kit/SearchBar.js +3 -3
  79. package/dist/ui-kit/SearchBar.js.map +1 -1
  80. package/dist/ui-kit/TopItem/TopItem.d.ts +2 -0
  81. package/dist/ui-kit/TopItem/TopItem.js +19 -7
  82. package/dist/ui-kit/TopItem/TopItem.js.map +1 -1
  83. package/dist/utils/adjustHref.d.ts +4 -0
  84. package/dist/utils/adjustHref.js +21 -0
  85. package/dist/utils/adjustHref.js.map +1 -0
  86. package/dist/utils/maxBy.d.ts +2 -0
  87. package/dist/utils/maxBy.js +7 -0
  88. package/dist/utils/maxBy.js.map +1 -0
  89. package/dist/utils/url.d.ts +0 -13
  90. package/dist/utils/url.js +2 -26
  91. package/dist/utils/url.js.map +1 -1
  92. package/dist/utils/withoutMobilePath.d.ts +2 -0
  93. package/dist/utils/withoutMobilePath.js +6 -0
  94. package/dist/utils/withoutMobilePath.js.map +1 -0
  95. package/lib/common.css +1 -1
  96. package/lib/components/BlockContent.d.ts +3 -2
  97. package/lib/components/Blocks.d.ts +1 -0
  98. package/lib/components/Blocks.js +2 -0
  99. package/lib/components/Blocks.js.map +1 -1
  100. package/lib/components/Footer/FooterContent.d.ts +1 -1
  101. package/lib/components/Footer/Sitemap.d.ts +1 -1
  102. package/lib/components/Footer/Sitemap.js +2 -2
  103. package/lib/components/Footer/Sitemap.js.map +1 -1
  104. package/lib/components/Gallery/GalleryContainer.js +1 -1
  105. package/lib/components/Gallery/GalleryContainer.js.map +1 -1
  106. package/lib/components/Header/Header.fixture.d.ts +4 -1
  107. package/lib/components/Header/Header.js +13 -9
  108. package/lib/components/Header/Header.js.map +1 -1
  109. package/lib/components/Header/HeaderContent.d.ts +8 -1
  110. package/lib/components/Header/HeaderSecondaryMenu.d.ts +2 -1
  111. package/lib/components/Header/HeaderSecondaryMenu.js +14 -2
  112. package/lib/components/Header/HeaderSecondaryMenu.js.map +1 -1
  113. package/lib/components/Header/HeaderSecondaryMenuButton.js +1 -1
  114. package/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  115. package/lib/components/Headline/HeadlineContent.d.ts +2 -9
  116. package/lib/components/MobileBlocks.d.ts +1 -0
  117. package/lib/components/MobileBlocks.js +2 -0
  118. package/lib/components/MobileBlocks.js.map +1 -1
  119. package/lib/components/Navigation/Navigation.d.ts +5 -0
  120. package/lib/components/Navigation/Navigation.fixture.d.ts +2 -0
  121. package/lib/components/Navigation/Navigation.js +14 -0
  122. package/lib/components/Navigation/Navigation.js.map +1 -0
  123. package/lib/components/Navigation/NavigationContent.d.ts +10 -0
  124. package/lib/components/Navigation/NavigationContent.js +2 -0
  125. package/lib/components/Navigation/NavigationContent.js.map +1 -0
  126. package/lib/components/Navigation/NavigationItem.d.ts +4 -0
  127. package/lib/components/Navigation/NavigationItem.js +4 -0
  128. package/lib/components/Navigation/NavigationItem.js.map +1 -0
  129. package/lib/components/TariffsTable/TariffsTableCell.js +1 -3
  130. package/lib/components/TariffsTable/TariffsTableCell.js.map +1 -1
  131. package/lib/components/TariffsTable/TariffsTableRow.js +1 -1
  132. package/lib/components/TariffsTable/TariffsTableRow.js.map +1 -1
  133. package/lib/components/Tile/Tile.d.ts +1 -0
  134. package/lib/components/Tile/Tile.js +2 -2
  135. package/lib/components/Tile/Tile.js.map +1 -1
  136. package/lib/hooks/useLink.js +2 -1
  137. package/lib/hooks/useLink.js.map +1 -1
  138. package/lib/index.d.ts +2 -2
  139. package/lib/index.js.map +1 -1
  140. package/lib/model/BgColorVersion.d.ts +8 -0
  141. package/lib/model/BgColorVersion.js +2 -0
  142. package/lib/model/BgColorVersion.js.map +1 -0
  143. package/lib/services/sitemap/SitemapProps.d.ts +13 -0
  144. package/lib/services/sitemap/SitemapProps.js +2 -0
  145. package/lib/services/sitemap/SitemapProps.js.map +1 -0
  146. package/lib/services/sitemap/findActiveSubItem.d.ts +3 -0
  147. package/lib/services/sitemap/findActiveSubItem.js +10 -0
  148. package/lib/services/sitemap/findActiveSubItem.js.map +1 -0
  149. package/lib/services/sitemap/isHrefActive.d.ts +4 -0
  150. package/lib/services/sitemap/isHrefActive.js +6 -0
  151. package/lib/services/sitemap/isHrefActive.js.map +1 -0
  152. package/lib/services/sitemap/isSubItemActive.d.ts +3 -0
  153. package/lib/services/sitemap/isSubItemActive.js +3 -0
  154. package/lib/services/sitemap/isSubItemActive.js.map +1 -0
  155. package/lib/services/sitemap/isTopItemActive.d.ts +3 -0
  156. package/lib/services/sitemap/isTopItemActive.js +4 -0
  157. package/lib/services/sitemap/isTopItemActive.js.map +1 -0
  158. package/lib/services/sitemap/mergeTopItems.d.ts +2 -0
  159. package/lib/{mergeTopItems.js → services/sitemap/mergeTopItems.js} +1 -3
  160. package/lib/services/sitemap/mergeTopItems.js.map +1 -0
  161. package/lib/services/sitemap/useSitemap.d.ts +3 -0
  162. package/lib/{hooks → services/sitemap}/useSitemap.js +1 -1
  163. package/lib/services/sitemap/useSitemap.js.map +1 -0
  164. package/lib/ui-kit/HeaderItem/HeaderItem.js +16 -4
  165. package/lib/ui-kit/HeaderItem/HeaderItem.js.map +1 -1
  166. package/lib/ui-kit/Icon/IconProps.d.ts +21 -20
  167. package/lib/ui-kit/Icon/IconProps.js +17 -17
  168. package/lib/ui-kit/Icon/IconProps.js.map +1 -1
  169. package/lib/ui-kit/Logo/Logo.d.ts +1 -0
  170. package/lib/ui-kit/Logo/Logo.js +10 -2
  171. package/lib/ui-kit/Logo/Logo.js.map +1 -1
  172. package/lib/ui-kit/SearchBar.js +3 -3
  173. package/lib/ui-kit/SearchBar.js.map +1 -1
  174. package/lib/ui-kit/TopItem/TopItem.d.ts +2 -0
  175. package/lib/ui-kit/TopItem/TopItem.js +19 -7
  176. package/lib/ui-kit/TopItem/TopItem.js.map +1 -1
  177. package/lib/utils/adjustHref.d.ts +4 -0
  178. package/lib/utils/adjustHref.js +18 -0
  179. package/lib/utils/adjustHref.js.map +1 -0
  180. package/lib/utils/maxBy.d.ts +2 -0
  181. package/lib/utils/maxBy.js +3 -0
  182. package/lib/utils/maxBy.js.map +1 -0
  183. package/lib/utils/url.d.ts +0 -13
  184. package/lib/utils/url.js +1 -21
  185. package/lib/utils/url.js.map +1 -1
  186. package/lib/utils/withoutMobilePath.d.ts +2 -0
  187. package/lib/utils/withoutMobilePath.js +3 -0
  188. package/lib/utils/withoutMobilePath.js.map +1 -0
  189. package/package.json +4 -2
  190. package/src/components/BlockContent.ts +4 -2
  191. package/src/components/Blocks.ts +2 -0
  192. package/src/components/ContentPage/ContentPage.page.json +33 -16
  193. package/src/components/Footer/FooterContent.ts +1 -1
  194. package/src/components/Footer/Sitemap.tsx +4 -3
  195. package/src/components/Gallery/GalleryContainer.tsx +1 -0
  196. package/src/components/Header/Header.fixture.tsx +4 -18
  197. package/src/components/Header/Header.tsx +56 -45
  198. package/src/components/Header/HeaderContent.ts +8 -1
  199. package/src/components/Header/HeaderSecondaryMenu.tsx +25 -12
  200. package/src/components/Header/HeaderSecondaryMenuButton.tsx +2 -4
  201. package/src/components/Headline/HeadlineContent.ts +2 -10
  202. package/src/components/MobileBlocks.ts +2 -0
  203. package/src/components/Navigation/Navigation.fixture.tsx +28 -0
  204. package/src/components/Navigation/Navigation.tsx +39 -0
  205. package/src/components/Navigation/NavigationContent.ts +11 -0
  206. package/src/components/Navigation/NavigationItem.tsx +17 -0
  207. package/src/components/PictureText/PictureText.example.json +1 -1
  208. package/src/components/PictureText/PictureText.fixture.tsx +1 -1
  209. package/src/components/ProductGallery/ProductGallery.fixture.tsx +2 -2
  210. package/src/components/TariffsTable/TariffsTableCell.tsx +1 -3
  211. package/src/components/TariffsTable/TariffsTableRow.tsx +6 -1
  212. package/src/components/Tile/Tile.tsx +5 -2
  213. package/src/hooks/useLink.ts +2 -1
  214. package/src/icons/Calendar2Icon.svg +1 -1
  215. package/src/icons/CalendarTickIcon.svg +1 -1
  216. package/src/icons/CalendarWhiteIcon.svg +1 -1
  217. package/src/icons/CardWithGemIcon.svg +1 -1
  218. package/src/icons/ChartSquareIcon.svg +1 -1
  219. package/src/icons/CreditCardsIcon.svg +1 -1
  220. package/src/icons/DiscountShapeIcon.svg +1 -0
  221. package/src/icons/EarthIcon.svg +1 -1
  222. package/src/icons/EmptyWalletWhiteIcon.svg +1 -1
  223. package/src/icons/GlobalIcon.svg +1 -1
  224. package/src/icons/GridIcon.svg +1 -1
  225. package/src/icons/GridIconWhite.svg +4 -0
  226. package/src/icons/InterestGrowthIcon.svg +1 -1
  227. package/src/icons/InterestIcon.svg +1 -1
  228. package/src/icons/MoneyInsuranceIcon.svg +1 -1
  229. package/src/icons/OfficeIcon.svg +1 -1
  230. package/src/icons/PercentageRoundIcon.svg +1 -1
  231. package/src/icons/PercentageSquareWhiteIcon.svg +1 -1
  232. package/src/icons/PersonalCardIcon.svg +1 -1
  233. package/src/icons/RoundRubleIcon.svg +1 -1
  234. package/src/icons/SafeIcon.svg +1 -1
  235. package/src/icons/SmallClockIcon.svg +1 -1
  236. package/src/icons/WalletAdd2Icon.svg +1 -1
  237. package/src/icons/WalletAddIcon.svg +1 -1
  238. package/src/icons/WalletIcon.svg +1 -0
  239. package/src/icons/WalletWithMoneyIcon.svg +1 -1
  240. package/src/index.ts +9 -2
  241. package/src/model/BgColorVersion.ts +8 -0
  242. package/src/services/sitemap/SitemapProps.ts +15 -0
  243. package/src/services/sitemap/findActiveSubItem.ts +14 -0
  244. package/src/services/sitemap/isHrefActive.ts +13 -0
  245. package/src/services/sitemap/isSubItemActive.ts +8 -0
  246. package/src/services/sitemap/isTopItemActive.ts +9 -0
  247. package/src/{mergeTopItems.spec.ts → services/sitemap/mergeTopItems.spec.ts} +0 -0
  248. package/src/{mergeTopItems.ts → services/sitemap/mergeTopItems.ts} +3 -4
  249. package/src/{hooks → services/sitemap}/useSitemap.ts +3 -3
  250. package/src/ui-kit/HeaderItem/HeaderItem.tsx +32 -18
  251. package/src/ui-kit/Icon/IconProps.ts +7 -6
  252. package/src/ui-kit/Logo/Logo.tsx +30 -18
  253. package/src/ui-kit/SearchBar.tsx +15 -18
  254. package/src/ui-kit/TopItem/TopItem.tsx +46 -19
  255. package/src/utils/adjustHref.spec.ts +25 -0
  256. package/src/utils/adjustHref.ts +24 -0
  257. package/src/utils/maxBy.spec.ts +11 -0
  258. package/src/utils/maxBy.ts +7 -0
  259. package/src/utils/url.spec.ts +1 -37
  260. package/src/utils/url.ts +2 -39
  261. package/src/utils/withoutMobilePath.ts +3 -0
  262. package/dist/components/Header/isSubItemActive.d.ts +0 -3
  263. package/dist/components/Header/isSubItemActive.js +0 -8
  264. package/dist/components/Header/isSubItemActive.js.map +0 -1
  265. package/dist/components/Header/isTopItemActive.d.ts +0 -3
  266. package/dist/components/Header/isTopItemActive.js +0 -8
  267. package/dist/components/Header/isTopItemActive.js.map +0 -1
  268. package/dist/hooks/useSitemap.d.ts +0 -3
  269. package/dist/hooks/useSitemap.js.map +0 -1
  270. package/dist/mergeTopItems.d.ts +0 -2
  271. package/dist/mergeTopItems.js.map +0 -1
  272. package/lib/components/Header/isSubItemActive.d.ts +0 -3
  273. package/lib/components/Header/isSubItemActive.js +0 -5
  274. package/lib/components/Header/isSubItemActive.js.map +0 -1
  275. package/lib/components/Header/isTopItemActive.d.ts +0 -3
  276. package/lib/components/Header/isTopItemActive.js +0 -5
  277. package/lib/components/Header/isTopItemActive.js.map +0 -1
  278. package/lib/hooks/useSitemap.d.ts +0 -3
  279. package/lib/hooks/useSitemap.js.map +0 -1
  280. package/lib/mergeTopItems.d.ts +0 -2
  281. package/lib/mergeTopItems.js.map +0 -1
  282. package/src/components/Header/isSubItemActive.ts +0 -7
  283. package/src/components/Header/isTopItemActive.ts +0 -8
  284. package/src/icons/DischountStarIcon.svg +0 -1
  285. package/src/icons/DiscountShape.svg +0 -7
@@ -1,10 +1,10 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import type { UniBlockProps } from '../types';
3
+ import { Button } from './Button/Button';
3
4
  import { Icon } from './Icon/Icon';
4
5
 
5
6
  export const SearchBar = JSX<UniBlockProps>(({ className, context }) => {
6
7
  const { term, setTerm } = context.useSearch();
7
- const [inputHasFocus, setInputHasFocus] = context.useState<boolean>(false);
8
8
  return (
9
9
  <form className={`relative ${className || ''}`}>
10
10
  <div className="absolute rounded h-full flex items-center justify-center pl-4 max-w-[170px] gap-3.5 pointer-events-none">
@@ -22,28 +22,25 @@ export const SearchBar = JSX<UniBlockProps>(({ className, context }) => {
22
22
  </div>
23
23
  <input
24
24
  id="search-bar-input"
25
- className={`${
26
- inputHasFocus ? 'border-primary-text' : 'border-main-divider'
27
- } h-12 pl-12 w-full font-sans font-normal text-base text-black border border-solid rounded h-full box-border outline-none pr-[6%]`}
25
+ className={
26
+ 'h-12 pl-12 w-full peer font-sans font-normal text-base text-black border border-solid rounded h-full box-border outline-none pr-[6%] border-main-divider focus:border-primary-text'
27
+ }
28
28
  value={term}
29
29
  onChange={(e) => setTerm(e.target.value)}
30
- onFocus={(e) => setInputHasFocus(true)}
31
- onBlur={(e) => setInputHasFocus(false)}
32
30
  type="text"
33
31
  name="search-bar-input"
34
32
  />
35
- {inputHasFocus && (
36
- <button
37
- type="submit"
38
- className="absolute font-sans font-normal cursor-pointer text-sm bg-primary-main hover:bg-primary-hover active:bg-primary-active border-none px-9 py-[9px] rounded top-1 right-1 outline-none text-secondary-text text-white"
39
- onClick={(e) => {
40
- e.preventDefault();
41
- console.log('click');
42
- }}
43
- >
44
- Найти
45
- </button>
46
- )}
33
+ <Button
34
+ version="primary"
35
+ text="Найти"
36
+ className="invisible peer-focus:visible absolute top-1 right-1"
37
+ onClick={(e) => {
38
+ e.preventDefault();
39
+ console.log('click');
40
+ }}
41
+ >
42
+ <div className="font-normal text-sm px-9 py-[9px]">Найти</div>
43
+ </Button>
47
44
  </form>
48
45
  );
49
46
  });
@@ -1,4 +1,5 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
+ import { BgColorVersion } from '../../model/BgColorVersion';
2
3
  import type { LinkProps } from '../../model/LinkProps';
3
4
 
4
5
  export interface TopItemContent extends LinkProps {
@@ -10,28 +11,54 @@ export interface TopItemProps extends TopItemContent {
10
11
  flat?: boolean;
11
12
  ariaLabel?: string;
12
13
  onClick?: (ev: MouseEvent) => any;
14
+ bgColor?: BgColorVersion;
13
15
  }
14
16
 
17
+ const TEXT_CLASSES = 'font-sans font-normal text-sm';
18
+ const LINK_CLASSES = 'inline-block border border-solid bg-transparent text-center no-underline';
19
+
15
20
  export const TopItem = JSX<TopItemProps>(
16
- ({ className, text, href, target, active, flat, onClick, children, ariaLabel }) => {
17
- const linkStyle = active ? 'border-primary-main rounded-md' : 'border-transparent';
18
- const textStyle = active
21
+ ({
22
+ className = '',
23
+ text,
24
+ href,
25
+ target,
26
+ active,
27
+ flat,
28
+ onClick,
29
+ children,
30
+ ariaLabel,
31
+ bgColor = 'bg-white',
32
+ }) => (
33
+ <a
34
+ className={`${getLinkClasses(bgColor, active, flat)} ${className}`}
35
+ href={href}
36
+ target={target}
37
+ onClick={onClick}
38
+ rel="noopener noreferrer"
39
+ aria-label={ariaLabel}
40
+ >
41
+ <span className={getTextClasses(bgColor, active, flat)}>{text || children}</span>
42
+ </a>
43
+ ),
44
+ );
45
+
46
+ const getLinkClasses = (bgColor: BgColorVersion, active?: boolean, flat?: boolean) => {
47
+ let classes = 'border-transparent';
48
+ if (active) {
49
+ classes = `rounded-md ${bgColor === 'bg-white' ? 'border-primary-main' : 'border-white'}`;
50
+ }
51
+
52
+ return `${classes} ${LINK_CLASSES} ${flat ? '' : 'px-4 py-2'}`;
53
+ };
54
+
55
+ const getTextClasses = (bgColor: BgColorVersion, active?: boolean, flat?: boolean) => {
56
+ let classes = 'text-white';
57
+ if (bgColor === 'bg-white') {
58
+ classes = active
19
59
  ? 'text-primary-main'
20
60
  : `${flat ? 'text-primary-text' : 'text-secondary-text'} hover:text-primary-main`;
61
+ }
21
62
 
22
- return (
23
- <a
24
- className={`inline-block border border-solid bg-transparent text-center no-underline ${
25
- flat ? '' : 'px-4 py-2'
26
- } ${linkStyle} ${className || ''}`}
27
- href={href}
28
- target={target}
29
- onClick={onClick}
30
- rel="noopener noreferrer"
31
- aria-label={ariaLabel}
32
- >
33
- <span className={`font-sans font-normal text-sm ${textStyle}`}>{text || children}</span>
34
- </a>
35
- );
36
- },
37
- );
63
+ return `${classes} ${TEXT_CLASSES}`;
64
+ };
@@ -0,0 +1,25 @@
1
+ import { adjustHref } from './adjustHref';
2
+
3
+ describe('adjustHref', () => {
4
+ it('should compute URL relative to some base URL', () => {
5
+ expect(
6
+ adjustHref('http://foo.ru/other/path', {
7
+ pathname: '/some/path',
8
+ href: 'http://foo.ru/some/path',
9
+ }),
10
+ ).toBe('/other/path');
11
+ });
12
+
13
+ it('should compute mobile URL for mobile pages', () => {
14
+ expect(
15
+ adjustHref('http://foo.ru/other/path', {
16
+ pathname: '/mobile/some/path',
17
+ href: 'http://foo.ru/mobile/some/path',
18
+ }),
19
+ ).toBe('/mobile/other/path');
20
+ });
21
+
22
+ it('should return nothing if nothing provided', () => {
23
+ expect(adjustHref(undefined, { pathname: '/mobile/some/path' })).toBe(undefined);
24
+ });
25
+ });
@@ -0,0 +1,24 @@
1
+ import { getOrigin, isURL } from './url';
2
+ import { MOBILE_URL_PATH } from './withoutMobilePath';
3
+
4
+ export const adjustHref = (
5
+ href: string | undefined,
6
+ router: { pathname: string; href?: string },
7
+ ) => {
8
+ if (!href) {
9
+ return href;
10
+ }
11
+
12
+ const relativeHref = toRelativeHref(href, router) || '';
13
+ const isMobilePage = router?.pathname.startsWith(MOBILE_URL_PATH);
14
+ return isMobilePage && !isURL(relativeHref) ? `${MOBILE_URL_PATH}${relativeHref}` : relativeHref;
15
+ };
16
+
17
+ const toRelativeHref = (href: string | undefined, router: { href?: string }) => {
18
+ if (!href) {
19
+ return href;
20
+ }
21
+
22
+ const origin = getOrigin(router?.href);
23
+ return origin ? href.replace(origin, '') || '/' : href;
24
+ };
@@ -0,0 +1,11 @@
1
+ import { maxBy } from './maxBy';
2
+
3
+ describe('maxBy', () => {
4
+ it('should return max value', () => {
5
+ expect(maxBy((_: number) => _)([1, 3, 2])).toBe(3);
6
+ });
7
+
8
+ it('should return max value with respect to discriminator', () => {
9
+ expect(maxBy((_: string) => _.length)(['123', '123456789', '123456'])).toBe('123456789');
10
+ });
11
+ });
@@ -0,0 +1,7 @@
1
+ export const maxBy =
2
+ <Item, Value>(discriminator: (item: Item) => Value) =>
3
+ (list: Item[]): Item =>
4
+ list.reduceRight((a, b) => (discriminator(a) > discriminator(b) ? a : b));
5
+
6
+ export const minBy = <Item, Value>(discriminator: (item: Item) => Value) =>
7
+ maxBy((_: Item) => -discriminator(_));
@@ -1,4 +1,4 @@
1
- import { adjustHref, getOrigin, toRelativeHref, withoutQuery } from './url';
1
+ import { getOrigin, withoutQuery } from './url';
2
2
 
3
3
  describe('url', () => {
4
4
  describe('withoutQuery', () => {
@@ -14,40 +14,4 @@ describe('url', () => {
14
14
  expect(getOrigin('http://foo.ru/other/path?first=1&second=2')).toBe('http://foo.ru');
15
15
  });
16
16
  });
17
-
18
- describe('adjustHref', () => {
19
- it('should compute URL relative to some base URL', () => {
20
- expect(
21
- adjustHref('http://foo.ru/other/path', {
22
- pathname: '/some/path',
23
- href: 'http://foo.ru/some/path',
24
- }),
25
- ).toBe('/other/path');
26
- });
27
-
28
- it('should compute mobile URL for mobile pages', () => {
29
- expect(
30
- adjustHref('http://foo.ru/other/path', {
31
- pathname: '/mobile/some/path',
32
- href: 'http://foo.ru/mobile/some/path',
33
- }),
34
- ).toBe('/mobile/other/path');
35
- });
36
-
37
- it('should return nothing if nothing provided', () => {
38
- expect(adjustHref(undefined, { pathname: '/mobile/some/path' })).toBe(undefined);
39
- });
40
- });
41
-
42
- describe('toRelativeHref', () => {
43
- it('should compute URL relative to some base URL', () => {
44
- expect(toRelativeHref('http://foo.ru/other/path', { href: 'http://foo.ru/some/path' })).toBe(
45
- '/other/path',
46
- );
47
- });
48
-
49
- it('should return nothing if nothing provided', () => {
50
- expect(toRelativeHref(undefined, {})).toBe(undefined);
51
- });
52
- });
53
17
  });
package/src/utils/url.ts CHANGED
@@ -1,52 +1,15 @@
1
- export const MOBILE_URL_PATH = '/mobile';
2
-
3
1
  export const isURL = (href?: string) => href?.includes('//');
4
2
 
5
- export const isHrefActive = (
6
- href: string | undefined,
7
- router: { pathname?: string; href?: string },
8
- cmp: (href: string, baseHref: string) => boolean = (href, baseHref) => href === baseHref,
9
- ) => {
10
- return cmp(
11
- withoutQuery(href),
12
- withoutMobilePath(withoutQuery(isURL(href) ? router.href : router.pathname)),
13
- );
14
- };
15
-
16
3
  export const withoutQuery = (href?: string) => (href || '').replace(/\/?\?.*/, '');
17
4
 
18
- export const withoutMobilePath = (href?: string) => (href || '').replace(MOBILE_URL_PATH, '');
19
-
20
5
  export const getOrigin = (href?: string) => {
21
- if (!isURL(href)) {
6
+ if (!href || !isURL(href)) {
22
7
  return undefined;
23
8
  }
24
9
 
25
- const url = href!;
10
+ const url = href;
26
11
  const protoSeparator = '//';
27
12
  const endOfProto = url.indexOf(protoSeparator);
28
13
  const endOfOrigin = url.indexOf('/', endOfProto + protoSeparator.length);
29
14
  return endOfOrigin !== -1 ? url.substring(0, endOfOrigin) : url;
30
15
  };
31
-
32
- export const adjustHref = (
33
- href: string | undefined,
34
- router: { pathname: string; href?: string },
35
- ) => {
36
- if (!href) {
37
- return href;
38
- }
39
-
40
- const relativeHref = toRelativeHref(href, router)!;
41
- const isMobilePage = router?.pathname.startsWith(MOBILE_URL_PATH);
42
- return isMobilePage && !isURL(relativeHref) ? `${MOBILE_URL_PATH}${relativeHref}` : relativeHref;
43
- };
44
-
45
- export const toRelativeHref = (href: string | undefined, router: { href?: string }) => {
46
- if (!href) {
47
- return href;
48
- }
49
-
50
- const origin = getOrigin(router?.href);
51
- return origin ? href.replace(origin, '') || '/' : href;
52
- };
@@ -0,0 +1,3 @@
1
+ export const MOBILE_URL_PATH = '/mobile';
2
+
3
+ export const withoutMobilePath = (href?: string) => (href || '').replace(MOBILE_URL_PATH, '');
@@ -1,3 +0,0 @@
1
- import type { LinkProps } from '../../model/LinkProps';
2
- import type { Router } from '../ContentPage/ContentPageContext';
3
- export declare function isSubItemActive(router: Router): (subItem: LinkProps) => boolean;
@@ -1,8 +0,0 @@
1
- Object.defineProperty(exports, "__esModule", { value: true });
2
- exports.isSubItemActive = void 0;
3
- const url_1 = require("../../utils/url");
4
- function isSubItemActive(router) {
5
- return (subItem) => (0, url_1.isHrefActive)(subItem.href, router);
6
- }
7
- exports.isSubItemActive = isSubItemActive;
8
- //# sourceMappingURL=isSubItemActive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isSubItemActive.js","sourceRoot":"","sources":["../../../src/components/Header/isSubItemActive.ts"],"names":[],"mappings":";;AACA,yCAA+C;AAG/C,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,CAAC,OAAkB,EAAW,EAAE,CAAC,IAAA,kBAAY,EAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7E,CAAC;AAFD,0CAEC"}
@@ -1,3 +0,0 @@
1
- import type { LinkProps } from '../../model/LinkProps';
2
- import type { Router } from '../ContentPage/ContentPageContext';
3
- export declare function isTopItemActive(router: Router): (topItem: LinkProps) => boolean;
@@ -1,8 +0,0 @@
1
- Object.defineProperty(exports, "__esModule", { value: true });
2
- exports.isTopItemActive = void 0;
3
- const url_1 = require("../../utils/url");
4
- function isTopItemActive(router) {
5
- return (topItem) => (0, url_1.isHrefActive)(topItem.href, router, (topItemHref, baseHref) => baseHref.startsWith(topItemHref));
6
- }
7
- exports.isTopItemActive = isTopItemActive;
8
- //# sourceMappingURL=isTopItemActive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isTopItemActive.js","sourceRoot":"","sources":["../../../src/components/Header/isTopItemActive.ts"],"names":[],"mappings":";;AACA,yCAA+C;AAG/C,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,CAAC,OAAkB,EAAW,EAAE,CACrC,IAAA,kBAAY,EAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AACpG,CAAC;AAHD,0CAGC"}
@@ -1,3 +0,0 @@
1
- import type { AsyncDataHook } from '../components/ContentPage/ContentPageContext';
2
- import type { HeaderContent } from '../components/Header/HeaderContent';
3
- export declare function useSitemap(useAsyncData: AsyncDataHook): HeaderContent;
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSitemap.js","sourceRoot":"","sources":["../../src/hooks/useSitemap.ts"],"names":[],"mappings":";;AAEA,wDAAqD;AAErD,SAAgB,UAAU,CAAC,YAA2B;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;IAC1D,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAHD,gCAGC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3C,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,mBAAmB,iCAAe,CAAC,OAAO,IAAI,SAAS,OAAO,CAAC;AACxE,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { LinkProps } from './model/LinkProps';
2
- export declare function mergeTopItems<L extends LinkProps>(left?: L[], right?: L[]): L[];
@@ -1 +0,0 @@
1
- {"version":3,"file":"mergeTopItems.js","sourceRoot":"","sources":["../src/mergeTopItems.ts"],"names":[],"mappings":";;AAEA,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;AAEtE,MAAM,UAAU,GAAG,CAAsB,KAAW,EAAE,YAAkB,EAAO,EAAE,CAC/E,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE5D,MAAM,QAAQ,GAAG,CAAsB,OAAa,EAAE,UAAgB,EAAO,EAAE,CAC7E,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D,SAAgB,aAAa,CAAsB,IAAU,EAAE,KAAW;IACxE,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC;AAFD,sCAEC"}
@@ -1,3 +0,0 @@
1
- import type { LinkProps } from '../../model/LinkProps';
2
- import type { Router } from '../ContentPage/ContentPageContext';
3
- export declare function isSubItemActive(router: Router): (subItem: LinkProps) => boolean;
@@ -1,5 +0,0 @@
1
- import { isHrefActive } from '../../utils/url.js';
2
- export function isSubItemActive(router) {
3
- return (subItem) => isHrefActive(subItem.href, router);
4
- }
5
- //# sourceMappingURL=isSubItemActive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isSubItemActive.js","sourceRoot":"","sources":["../../../src/components/Header/isSubItemActive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,CAAC,OAAkB,EAAW,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7E,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { LinkProps } from '../../model/LinkProps';
2
- import type { Router } from '../ContentPage/ContentPageContext';
3
- export declare function isTopItemActive(router: Router): (topItem: LinkProps) => boolean;
@@ -1,5 +0,0 @@
1
- import { isHrefActive } from '../../utils/url.js';
2
- export function isTopItemActive(router) {
3
- return (topItem) => isHrefActive(topItem.href, router, (topItemHref, baseHref) => baseHref.startsWith(topItemHref));
4
- }
5
- //# sourceMappingURL=isTopItemActive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isTopItemActive.js","sourceRoot":"","sources":["../../../src/components/Header/isTopItemActive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,CAAC,OAAkB,EAAW,EAAE,CACrC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AACpG,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { AsyncDataHook } from '../components/ContentPage/ContentPageContext';
2
- import type { HeaderContent } from '../components/Header/HeaderContent';
3
- export declare function useSitemap(useAsyncData: AsyncDataHook): HeaderContent;
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSitemap.js","sourceRoot":"","sources":["../../src/hooks/useSitemap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,UAAU,CAAC,YAA2B;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;IAC1D,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3C,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,mBAAmB,eAAe,CAAC,OAAO,IAAI,SAAS,OAAO,CAAC;AACxE,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { LinkProps } from './model/LinkProps';
2
- export declare function mergeTopItems<L extends LinkProps>(left?: L[], right?: L[]): L[];
@@ -1 +0,0 @@
1
- {"version":3,"file":"mergeTopItems.js","sourceRoot":"","sources":["../src/mergeTopItems.ts"],"names":[],"mappings":"AAEA,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;AAEtE,MAAM,UAAU,GAAG,CAAsB,KAAW,EAAE,YAAkB,EAAO,EAAE,CAC/E,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE5D,MAAM,QAAQ,GAAG,CAAsB,OAAa,EAAE,UAAgB,EAAO,EAAE,CAC7E,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D,MAAM,UAAU,aAAa,CAAsB,IAAU,EAAE,KAAW;IACxE,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { LinkProps } from '../../model/LinkProps';
2
- import { isHrefActive } from '../../utils/url';
3
- import type { Router } from '../ContentPage/ContentPageContext';
4
-
5
- export function isSubItemActive(router: Router) {
6
- return (subItem: LinkProps): boolean => isHrefActive(subItem.href, router);
7
- }
@@ -1,8 +0,0 @@
1
- import type { LinkProps } from '../../model/LinkProps';
2
- import { isHrefActive } from '../../utils/url';
3
- import type { Router } from '../ContentPage/ContentPageContext';
4
-
5
- export function isTopItemActive(router: Router) {
6
- return (topItem: LinkProps): boolean =>
7
- isHrefActive(topItem.href, router, (topItemHref, baseHref) => baseHref.startsWith(topItemHref));
8
- }
@@ -1 +0,0 @@
1
- <svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="m14.66 20.01-1.52 1.52c-.62.62-1.64.62-2.26 0l-1.52-1.52c-.26-.26-.77-.47-1.13-.47H6.08c-.88 0-1.6-.72-1.6-1.6v-2.15c0-.36-.21-.87-.47-1.13l-1.52-1.52c-.62-.62-.62-1.64 0-2.26l1.52-1.52c.26-.26.47-.77.47-1.13V6.08c0-.88.72-1.6 1.6-1.6M9.34 3.99l1.52-1.52c.62-.62 1.64-.62 2.26 0l1.52 1.52c.26.26.77.47 1.13.47h2.15c.88 0 1.6.72 1.6 1.6v2.15c0 .36.21.87.47 1.13l1.52 1.52c.62.62.62 1.64 0 2.26l-1.52 1.52c-.26.26-.47.77-.47 1.13v2.15c0 .88-.72 1.6-1.6 1.6" stroke="#1C1C1C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="m9 15 6-6M14.495 14.5h.009M9.495 9.5h.008" stroke="#42AB44" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
@@ -1,7 +0,0 @@
1
- <svg id="icon" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M14.6599 20.01L13.1399 21.53C12.5199 22.15 11.4999 22.15 10.8799 21.53L9.3599 20.01C9.0999 19.75 8.58992 19.54 8.22992 19.54H6.0799C5.1999 19.54 4.47992 18.8199 4.47992 17.9399V15.79C4.47992 15.43 4.26992 14.92 4.00992 14.66L2.4899 13.14C1.8699 12.52 1.8699 11.5 2.4899 10.88L4.00992 9.35999C4.26992 9.09999 4.47992 8.58998 4.47992 8.22998V6.07996C4.47992 5.19996 5.1999 4.47998 6.0799 4.47998" stroke="#1C1C1C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
- <path d="M9.33984 3.9899L10.8598 2.46988C11.4798 1.84988 12.4998 1.84988 13.1198 2.46988L14.6399 3.9899C14.8999 4.2499 15.4098 4.45987 15.7698 4.45987H17.9199C18.7999 4.45987 19.5198 5.17997 19.5198 6.05997V8.20987C19.5198 8.56987 19.7298 9.07988 19.9898 9.33988L21.5099 10.8599C22.1299 11.4799 22.1299 12.4999 21.5099 13.1199L19.9898 14.6399C19.7298 14.8999 19.5198 15.4099 19.5198 15.7699V17.92C19.5198 18.8 18.7999 19.5199 17.9199 19.5199" stroke="#1C1C1C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
- <path d="M9 15L15 9" stroke="#42AB44" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
5
- <path d="M14.4945 14.5H14.5035" stroke="#42AB44" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
6
- <path d="M9.49451 9.5H9.50349" stroke="#42AB44" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
7
- </svg>