@redneckz/wildless-cms-uni-blocks 0.14.874 → 0.14.876

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 (141) hide show
  1. package/bundle/bundle.umd.js +127 -93
  2. package/bundle/bundle.umd.min.js +1 -1
  3. package/bundle/components/Header/DropdownButton.d.ts +2 -0
  4. package/bundle/components/Header/DropdownMenu.d.ts +5 -2
  5. package/bundle/components/Header/HeaderMoreMenuItem.d.ts +9 -0
  6. package/bundle/components/Header/HeaderSubMenuItem.d.ts +3 -0
  7. package/bundle/components/Header/useDropdownSubMenu.d.ts +11 -0
  8. package/bundle/data/NavigationData.d.ts +1 -0
  9. package/bundle/ui-kit/FormField/Fields/ApplicationDateField.d.ts +2 -0
  10. package/dist/components/Header/DropdownButton.d.ts +2 -0
  11. package/dist/components/Header/DropdownButton.js +11 -0
  12. package/dist/components/Header/DropdownButton.js.map +1 -0
  13. package/dist/components/Header/DropdownMenu.d.ts +5 -2
  14. package/dist/components/Header/DropdownMenu.js +2 -36
  15. package/dist/components/Header/DropdownMenu.js.map +1 -1
  16. package/dist/components/Header/HeaderMoreMenuItem.d.ts +9 -0
  17. package/dist/components/Header/HeaderMoreMenuItem.js +27 -0
  18. package/dist/components/Header/HeaderMoreMenuItem.js.map +1 -0
  19. package/dist/components/Header/HeaderSubMenu.js +2 -2
  20. package/dist/components/Header/HeaderSubMenu.js.map +1 -1
  21. package/dist/components/Header/HeaderSubMenuItem.d.ts +3 -0
  22. package/dist/components/Header/HeaderSubMenuItem.js +19 -2
  23. package/dist/components/Header/HeaderSubMenuItem.js.map +1 -1
  24. package/dist/components/Header/HeaderTopMenu.js +2 -2
  25. package/dist/components/Header/HeaderTopMenu.js.map +1 -1
  26. package/dist/components/Header/useDropdownSubMenu.d.ts +11 -0
  27. package/dist/components/Header/useDropdownSubMenu.js +37 -0
  28. package/dist/components/Header/useDropdownSubMenu.js.map +1 -0
  29. package/dist/data/NavigationData.d.ts +1 -0
  30. package/dist/ui-kit/FormField/Fields/ApplicationDateField.d.ts +2 -0
  31. package/dist/ui-kit/FormField/Fields/ApplicationDateField.js +7 -0
  32. package/dist/ui-kit/FormField/Fields/ApplicationDateField.js.map +1 -0
  33. package/dist/ui-kit/FormField/getField.js +2 -2
  34. package/dist/ui-kit/FormField/getField.js.map +1 -1
  35. package/lib/components/Header/DropdownButton.d.ts +2 -0
  36. package/lib/components/Header/DropdownButton.js +9 -0
  37. package/lib/components/Header/DropdownButton.js.map +1 -0
  38. package/lib/components/Header/DropdownMenu.d.ts +5 -2
  39. package/lib/components/Header/DropdownMenu.js +2 -37
  40. package/lib/components/Header/DropdownMenu.js.map +1 -1
  41. package/lib/components/Header/HeaderMoreMenuItem.d.ts +9 -0
  42. package/lib/components/Header/HeaderMoreMenuItem.js +25 -0
  43. package/lib/components/Header/HeaderMoreMenuItem.js.map +1 -0
  44. package/lib/components/Header/HeaderSubMenu.js +2 -2
  45. package/lib/components/Header/HeaderSubMenu.js.map +1 -1
  46. package/lib/components/Header/HeaderSubMenuItem.d.ts +3 -0
  47. package/lib/components/Header/HeaderSubMenuItem.js +20 -3
  48. package/lib/components/Header/HeaderSubMenuItem.js.map +1 -1
  49. package/lib/components/Header/HeaderTopMenu.js +2 -2
  50. package/lib/components/Header/HeaderTopMenu.js.map +1 -1
  51. package/lib/components/Header/useDropdownSubMenu.d.ts +11 -0
  52. package/lib/components/Header/useDropdownSubMenu.js +34 -0
  53. package/lib/components/Header/useDropdownSubMenu.js.map +1 -0
  54. package/lib/data/NavigationData.d.ts +1 -0
  55. package/lib/ui-kit/FormField/Fields/ApplicationDateField.d.ts +2 -0
  56. package/lib/ui-kit/FormField/Fields/ApplicationDateField.js +5 -0
  57. package/lib/ui-kit/FormField/Fields/ApplicationDateField.js.map +1 -0
  58. package/lib/ui-kit/FormField/getField.js +2 -2
  59. package/lib/ui-kit/FormField/getField.js.map +1 -1
  60. package/mobile/bundle/bundle.umd.js +50 -48
  61. package/mobile/bundle/bundle.umd.min.js +1 -1
  62. package/mobile/bundle/components/Header/DropdownButton.d.ts +2 -0
  63. package/mobile/bundle/components/Header/DropdownMenu.d.ts +5 -2
  64. package/mobile/bundle/components/Header/HeaderMoreMenuItem.d.ts +9 -0
  65. package/mobile/bundle/components/Header/HeaderSubMenuItem.d.ts +3 -0
  66. package/mobile/bundle/components/Header/useDropdownSubMenu.d.ts +11 -0
  67. package/mobile/bundle/data/NavigationData.d.ts +1 -0
  68. package/mobile/bundle/ui-kit/FormField/Fields/ApplicationDateField.d.ts +2 -0
  69. package/mobile/dist/components/Header/DropdownButton.d.ts +2 -0
  70. package/mobile/dist/components/Header/DropdownButton.js +11 -0
  71. package/mobile/dist/components/Header/DropdownButton.js.map +1 -0
  72. package/mobile/dist/components/Header/DropdownMenu.d.ts +5 -2
  73. package/mobile/dist/components/Header/DropdownMenu.js +2 -36
  74. package/mobile/dist/components/Header/DropdownMenu.js.map +1 -1
  75. package/mobile/dist/components/Header/HeaderMoreMenuItem.d.ts +9 -0
  76. package/mobile/dist/components/Header/HeaderMoreMenuItem.js +27 -0
  77. package/mobile/dist/components/Header/HeaderMoreMenuItem.js.map +1 -0
  78. package/mobile/dist/components/Header/HeaderSubMenu.js +2 -2
  79. package/mobile/dist/components/Header/HeaderSubMenu.js.map +1 -1
  80. package/mobile/dist/components/Header/HeaderSubMenuItem.d.ts +3 -0
  81. package/mobile/dist/components/Header/HeaderSubMenuItem.js +19 -2
  82. package/mobile/dist/components/Header/HeaderSubMenuItem.js.map +1 -1
  83. package/mobile/dist/components/Header/HeaderTopMenu.js +2 -2
  84. package/mobile/dist/components/Header/HeaderTopMenu.js.map +1 -1
  85. package/mobile/dist/components/Header/useDropdownSubMenu.d.ts +11 -0
  86. package/mobile/dist/components/Header/useDropdownSubMenu.js +37 -0
  87. package/mobile/dist/components/Header/useDropdownSubMenu.js.map +1 -0
  88. package/mobile/dist/data/NavigationData.d.ts +1 -0
  89. package/mobile/dist/ui-kit/FormField/Fields/ApplicationDateField.d.ts +2 -0
  90. package/mobile/dist/ui-kit/FormField/Fields/ApplicationDateField.js +7 -0
  91. package/mobile/dist/ui-kit/FormField/Fields/ApplicationDateField.js.map +1 -0
  92. package/mobile/dist/ui-kit/FormField/getField.js +2 -2
  93. package/mobile/dist/ui-kit/FormField/getField.js.map +1 -1
  94. package/mobile/lib/components/Header/DropdownButton.d.ts +2 -0
  95. package/mobile/lib/components/Header/DropdownButton.js +9 -0
  96. package/mobile/lib/components/Header/DropdownButton.js.map +1 -0
  97. package/mobile/lib/components/Header/DropdownMenu.d.ts +5 -2
  98. package/mobile/lib/components/Header/DropdownMenu.js +2 -37
  99. package/mobile/lib/components/Header/DropdownMenu.js.map +1 -1
  100. package/mobile/lib/components/Header/HeaderMoreMenuItem.d.ts +9 -0
  101. package/mobile/lib/components/Header/HeaderMoreMenuItem.js +25 -0
  102. package/mobile/lib/components/Header/HeaderMoreMenuItem.js.map +1 -0
  103. package/mobile/lib/components/Header/HeaderSubMenu.js +2 -2
  104. package/mobile/lib/components/Header/HeaderSubMenu.js.map +1 -1
  105. package/mobile/lib/components/Header/HeaderSubMenuItem.d.ts +3 -0
  106. package/mobile/lib/components/Header/HeaderSubMenuItem.js +20 -3
  107. package/mobile/lib/components/Header/HeaderSubMenuItem.js.map +1 -1
  108. package/mobile/lib/components/Header/HeaderTopMenu.js +2 -2
  109. package/mobile/lib/components/Header/HeaderTopMenu.js.map +1 -1
  110. package/mobile/lib/components/Header/useDropdownSubMenu.d.ts +11 -0
  111. package/mobile/lib/components/Header/useDropdownSubMenu.js +34 -0
  112. package/mobile/lib/components/Header/useDropdownSubMenu.js.map +1 -0
  113. package/mobile/lib/data/NavigationData.d.ts +1 -0
  114. package/mobile/lib/ui-kit/FormField/Fields/ApplicationDateField.d.ts +2 -0
  115. package/mobile/lib/ui-kit/FormField/Fields/ApplicationDateField.js +5 -0
  116. package/mobile/lib/ui-kit/FormField/Fields/ApplicationDateField.js.map +1 -0
  117. package/mobile/lib/ui-kit/FormField/getField.js +2 -2
  118. package/mobile/lib/ui-kit/FormField/getField.js.map +1 -1
  119. package/mobile/src/components/Header/DropdownButton.tsx +26 -0
  120. package/mobile/src/components/Header/DropdownMenu.tsx +15 -85
  121. package/mobile/src/components/Header/HeaderMoreMenuItem.tsx +60 -0
  122. package/mobile/src/components/Header/HeaderSubMenu.tsx +3 -2
  123. package/mobile/src/components/Header/HeaderSubMenuItem.tsx +31 -5
  124. package/mobile/src/components/Header/HeaderTopMenu.tsx +3 -3
  125. package/mobile/src/components/Header/useDropdownSubMenu.tsx +48 -0
  126. package/mobile/src/data/NavigationData.ts +1 -0
  127. package/mobile/src/ui-kit/FormField/Fields/ApplicationDateField.tsx +7 -0
  128. package/mobile/src/ui-kit/FormField/getField.tsx +2 -4
  129. package/package.json +1 -1
  130. package/src/components/Header/DropdownButton.tsx +26 -0
  131. package/src/components/Header/DropdownMenu.tsx +15 -85
  132. package/src/components/Header/Header.fixture.tsx +4 -0
  133. package/src/components/Header/HeaderMoreMenuItem.tsx +60 -0
  134. package/src/components/Header/HeaderSubMenu.tsx +3 -2
  135. package/src/components/Header/HeaderSubMenuItem.tsx +31 -5
  136. package/src/components/Header/HeaderTopMenu.tsx +3 -3
  137. package/src/components/Header/useDropdownSubMenu.tsx +48 -0
  138. package/src/data/NavigationData.ts +1 -0
  139. package/src/icons/IconName.ts +4 -4
  140. package/src/ui-kit/FormField/Fields/ApplicationDateField.tsx +7 -0
  141. package/src/ui-kit/FormField/getField.tsx +2 -4
@@ -1244,35 +1244,10 @@
1244
1244
 
1245
1245
  const getConsentDataProcessing = (inputs) => inputs?.find((_) => _?.name === 'consentDataProcessing');
1246
1246
 
1247
- function useEventListener(target, type, listener, options) {
1248
- useEffect(() => {
1249
- if (!target || !listener) {
1250
- return;
1251
- }
1252
- target.addEventListener(type, listener, options);
1253
- return () => {
1254
- target.removeEventListener(type, listener, options);
1255
- };
1256
- }, [target, type, listener]);
1257
- }
1258
-
1259
- function useOutsideClick(onClick) {
1260
- const targetRef = useRef(null);
1261
- const handleClickOutside = useCallback((event) => {
1262
- if (targetRef && targetRef.current && event.target instanceof Node && !targetRef.current.contains(event.target)) {
1263
- onClick();
1264
- }
1265
- }, [onClick]);
1266
- useEventListener(globalThis.document, 'click', handleClickOutside);
1267
- return targetRef;
1268
- }
1269
-
1270
1247
  // TODO Базовая функицональность всех Control - надо вынести и привязать к required флагу
1271
1248
  const getRequiredLabel = ({ label, errors }) => label && errors ? `${label}*` : label;
1272
1249
 
1273
- const noop = () => {
1274
- // Do nothing
1275
- };
1250
+ const renderErrorText = (error) => (jsx("div", { className: "h-6", children: error ? (jsx(Text, { size: "text-xs", font: "font-light", color: "text-error", children: error })) : null }));
1276
1251
 
1277
1252
  const inputValidStyle = 'border border-solid outline-none border-gray hover:border-primary-hover active:border-primary-text focus:border-primary-text rounded';
1278
1253
 
@@ -1300,28 +1275,30 @@
1300
1275
  });
1301
1276
  const defaultStyle$1 = 'w-full border rounded-md text-primary-text outline-none p-m';
1302
1277
 
1303
- const renderErrorText = (error) => (jsx("div", { className: "h-6", children: error ? (jsx(Text, { size: "text-xs", font: "font-light", color: "text-error", children: error })) : null }));
1304
-
1305
- const InputWrapper = JSX(({ className, label, value = '', error, errors, type, isInteger, placeholder, maxLength, inputRef, isOpen, onOpen, onClose, onChange = noop, ...rest }) => {
1306
- const popupRef = useOutsideClick(onClose);
1307
- const handleChange = useCallback((v) => {
1308
- const isOverMax = maxLength && v.length > maxLength;
1309
- !isOpen && onOpen();
1310
- if (!isOverMax) {
1311
- onChange(normalizeInteger(v, isInteger));
1312
- }
1313
- }, [isOpen, onChange]);
1314
- return (jsxs("div", { className: style('shrink-0 w-full', className), ref: popupRef, onBlur: onClose, onFocus: onOpen, children: [jsx("div", { ref: inputRef, children: jsx(Input, { type: type || 'text', "aria-label": label, label: getRequiredLabel({ label, errors }), valid: Boolean(!error), onChange: handleChange, placeholder: getPlaceholder({ placeholder, errors, label }), value: value, ...rest }) }), renderErrorText(error)] }));
1315
- });
1316
- const normalizeInteger = (val = '', isInteger = false) => isInteger && val ? val.replace(/[^\d]+/g, '') : val;
1317
- const getPlaceholder = ({ placeholder, errors, label }) => errors && !label ? `${placeholder}*` : placeholder;
1278
+ const formatOption = (_) => _?.text || _?.key || '';
1318
1279
 
1319
- const InputControl = JSX((props) => {
1320
- const [isOpen, { setFalse: close, setTrue: open }] = useBool();
1321
- return jsx(InputWrapper, { isOpen: isOpen, onOpen: open, onClose: close, ...props });
1322
- });
1280
+ function useEventListener(target, type, listener, options) {
1281
+ useEffect(() => {
1282
+ if (!target || !listener) {
1283
+ return;
1284
+ }
1285
+ target.addEventListener(type, listener, options);
1286
+ return () => {
1287
+ target.removeEventListener(type, listener, options);
1288
+ };
1289
+ }, [target, type, listener]);
1290
+ }
1323
1291
 
1324
- const formatOption = (_) => _?.text || _?.key || '';
1292
+ function useOutsideClick(onClick) {
1293
+ const targetRef = useRef(null);
1294
+ const handleClickOutside = useCallback((event) => {
1295
+ if (targetRef && targetRef.current && event.target instanceof Node && !targetRef.current.contains(event.target)) {
1296
+ onClick();
1297
+ }
1298
+ }, [onClick]);
1299
+ useEventListener(globalThis.document, 'click', handleClickOutside);
1300
+ return targetRef;
1301
+ }
1325
1302
 
1326
1303
  const usePopupManager = () => useEmitterWithActions(defaultEventBus.emitter, 'popup');
1327
1304
 
@@ -1594,8 +1571,33 @@
1594
1571
  const ITEMS_CREDIT_AMOUNT = ['От 1 000 ₽', 'До 1 000 000 000 ₽'];
1595
1572
  const AmountField = JSX(({ field, input }) => (jsx(InputRange, { title: "\u0421\u0443\u043C\u043C\u0430, \u20BD", items: ITEMS_CREDIT_AMOUNT, min: MIN_CREDIT_AMOUNT, max: MAX_CREDIT_AMOUNT, ...field(input?.name ?? '') })));
1596
1573
 
1574
+ const noop = () => {
1575
+ // Do nothing
1576
+ };
1577
+
1578
+ const InputWrapper = JSX(({ className, label, value = '', error, errors, type, isInteger, placeholder, maxLength, inputRef, isOpen, onOpen, onClose, onChange = noop, ...rest }) => {
1579
+ const popupRef = useOutsideClick(onClose);
1580
+ const handleChange = useCallback((v) => {
1581
+ const isOverMax = maxLength && v.length > maxLength;
1582
+ !isOpen && onOpen();
1583
+ if (!isOverMax) {
1584
+ onChange(normalizeInteger(v, isInteger));
1585
+ }
1586
+ }, [isOpen, onChange]);
1587
+ return (jsxs("div", { className: style('shrink-0 w-full', className), ref: popupRef, onBlur: onClose, onFocus: onOpen, children: [jsx("div", { ref: inputRef, children: jsx(Input, { type: type || 'text', "aria-label": label, label: getRequiredLabel({ label, errors }), valid: Boolean(!error), onChange: handleChange, placeholder: getPlaceholder({ placeholder, errors, label }), value: value, ...rest }) }), renderErrorText(error)] }));
1588
+ });
1589
+ const normalizeInteger = (val = '', isInteger = false) => isInteger && val ? val.replace(/[^\d]+/g, '') : val;
1590
+ const getPlaceholder = ({ placeholder, errors, label }) => errors && !label ? `${placeholder}*` : placeholder;
1591
+
1592
+ const InputControl = JSX((props) => {
1593
+ const [isOpen, { setFalse: close, setTrue: open }] = useBool();
1594
+ return jsx(InputWrapper, { isOpen: isOpen, onOpen: open, onClose: close, ...props });
1595
+ });
1596
+
1597
1597
  const AnnualRevenueField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u0413\u043E\u0434\u043E\u0432\u0430\u044F \u0432\u044B\u0440\u0443\u0447\u043A\u0430, \u20BD", ...field(input?.name ?? '') })));
1598
1598
 
1599
+ const ApplicationDateField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u0414\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F \u043E\u0431\u0440\u0430\u0449\u0435\u043D\u0438\u044F \u0432 \u0411\u0430\u043D\u043A", ...field(input?.name ?? '') })));
1600
+
1599
1601
  const CLIENT_KEY = 'client';
1600
1602
  const REPRESENTATIVE_KEY = 'representative';
1601
1603
  const APPLIER_TYPES = [
@@ -2238,7 +2240,7 @@
2238
2240
  serviceDirection: ServiceDirectionField,
2239
2241
  bankEmpolee: BankEmpoleeField,
2240
2242
  secondaryPhone: SecondaryPhoneField,
2241
- applicationDate: (props) => (jsx(InputControl, { label: "\u0414\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F \u043E\u0431\u0440\u0430\u0449\u0435\u043D\u0438\u044F \u0432 \u0411\u0430\u043D\u043A", ...props })),
2243
+ applicationDate: ApplicationDateField,
2242
2244
  region: (props) => getPremium(props?.params?.typeForm) ? (jsx(RegionPremiumField, { ...props })) : (jsx(RegionField, { ...props })),
2243
2245
  consentToReceiveMaterials: ConsentToReceiveMaterialsField,
2244
2246
  sufferedFrom: SufferedFromField,
@@ -10066,47 +10068,6 @@
10066
10068
  return isURL(href) ? globalThis?.location?.href : joinPath(basePath, router.pathname);
10067
10069
  };
10068
10070
 
10069
- const DropdownMenu = JSX(({ className = '', items, activeItem, ariaLabel = 'Меню' }) => {
10070
- const [isVisible, { setFalse, toggle }] = useBool(false);
10071
- const ref = useOutsideClick(setFalse);
10072
- const dropdownRef = useRef(null);
10073
- const changeDropdownPosition = useCallback(({ isOpened, buttonRef, menuRef }) => {
10074
- if (isOpened && buttonRef.current && menuRef.current) {
10075
- const dropdownRect = menuRef.current.getBoundingClientRect();
10076
- const dropdownButtonRect = buttonRef.current.getBoundingClientRect();
10077
- const newDropdownPosition = globalThis.innerWidth - dropdownRect.width;
10078
- if (dropdownRect.right >= globalThis.innerWidth) {
10079
- menuRef.current.style.left = `${newDropdownPosition}px`;
10080
- }
10081
- else if (dropdownButtonRect.left > dropdownRect.left) {
10082
- if (newDropdownPosition > dropdownButtonRect.left) {
10083
- menuRef.current.style.left = '';
10084
- }
10085
- else {
10086
- menuRef.current.style.left = `${newDropdownPosition}px`;
10087
- }
10088
- }
10089
- }
10090
- }, [isVisible]);
10091
- useEventListener(globalThis, 'resize', () => changeDropdownPosition({ isOpened: isVisible, buttonRef: ref, menuRef: dropdownRef }));
10092
- useEffect(() => {
10093
- changeDropdownPosition({ isOpened: isVisible, buttonRef: ref, menuRef: dropdownRef });
10094
- }, [isVisible]);
10095
- return (jsxs("div", { className: style(isVisible ? 'rounded-md shadow-blue-gray' : '', className), ref: ref, role: "navigation", children: [jsx("button", { type: "button", className: "group/btn flex justify-between items-center h-6", "aria-label": ariaLabel, onClick: toggle, role: "button", "aria-labelledby": "labeldiv", children: Array(3)
10096
- .fill(null)
10097
- .map((_, i) => (jsx("div", { className: "w-[3px] h-[3px] rounded mr-2xs bg-primary-text group-hover/btn:bg-primary-hover group-data-transparent:bg-white" }, String(i)))) }), jsx("div", { ref: dropdownRef, className: style('absolute flex flex-col rounded-md bg-white p-xl pb-xs w-56 z-40', {
10098
- hidden: !isVisible,
10099
- }), "aria-hidden": !isVisible, children: renderDropdownItems(items, activeItem) })] }));
10100
- });
10101
- const DropdownMenuItem = JSX(({ isActive, ...rest }) => {
10102
- const link = useLink();
10103
- const { text, href, target, onClick } = link(rest);
10104
- return (jsx("a", { className: style('text-l font-light pb-m hover:text-primary-main', {
10105
- 'text-primary-main': isActive,
10106
- }), href: href, target: target, onClick: onClick, role: "link", ...getAspectsAttributes(rest?.data), children: text }));
10107
- });
10108
- const renderDropdownItems = (items, activeItem) => items?.map((item, i) => (jsx(DropdownMenuItem, { isActive: item === activeItem, ...item }, item?.text ?? String(i))));
10109
-
10110
10071
  const BUTTON_SIZE_STYLE = {
10111
10072
  default: 'w-6 h-6',
10112
10073
  medium: 'w-10 h-10',
@@ -10137,6 +10098,64 @@
10137
10098
  return (jsx(HeaderSecondaryMenuButton, { className: className, image: { icon: 'ChatBotIcon', iconVersion }, ariaLabel: ariaLabel, onClick: handleClick, buttonSize: buttonSize, isGrayBg: true, version: version, isLoading: isLoading, disabled: isLoading, dataTestId: "chat icon" }));
10138
10099
  });
10139
10100
 
10101
+ const DropdownMenu = ({ dropdownRef, items = [], activeItem, ariaLabel, }) => (jsx("div", { ref: dropdownRef, className: "absolute flex flex-col rounded-md bg-white p-xl pb-xs w-56 z-40", "aria-label": ariaLabel, children: renderDropdownItems(items, activeItem) }));
10102
+ const DropdownMenuItem = JSX(({ isActive, ...rest }) => {
10103
+ const link = useLink();
10104
+ const { text, href, target, onClick } = link(rest);
10105
+ return (jsx("a", { className: style('text-l font-light pb-m hover:text-primary-main', {
10106
+ 'text-primary-main': isActive,
10107
+ }), href: href, target: target, onClick: onClick, role: "link", ...getAspectsAttributes(rest?.data), children: text }));
10108
+ });
10109
+ const renderDropdownItems = (items, activeItem) => items?.map((item, i) => (jsx(DropdownMenuItem, { isActive: item === activeItem, ...item }, item?.text ?? String(i))));
10110
+
10111
+ function useDropdownSubMenu({ items, activeItem, onClose, isOpen }) {
10112
+ const popup = usePopupManager();
10113
+ useEffect(() => {
10114
+ if (isOpen) {
10115
+ popup.close();
10116
+ }
10117
+ }, [isOpen]);
10118
+ const close = useCallback(() => {
10119
+ popup.close();
10120
+ onClose?.();
10121
+ }, [onClose]);
10122
+ const parentRef = useRef(null);
10123
+ const popupRef = useOutsideClick(close);
10124
+ useEffect(() => {
10125
+ if (!isOpen || !parentRef.current || !items?.length) {
10126
+ return;
10127
+ }
10128
+ const parentElement = parentRef.current;
10129
+ const { top, left, width, height } = parentElement.getBoundingClientRect();
10130
+ popup.open({
10131
+ popup: jsx(DropdownMenu, { dropdownRef: popupRef, items: items, activeItem: activeItem }),
10132
+ top: top + window.scrollY + height,
10133
+ left,
10134
+ width,
10135
+ });
10136
+ }, [isOpen, items, close]);
10137
+ return parentRef;
10138
+ }
10139
+
10140
+ const HeaderMoreMenuItem = JSX(({ className = '', items, activeItem, ariaLabel = 'Меню' }) => {
10141
+ const [isOpenDropdown, { setFalse, toggle }] = useBool(false);
10142
+ const dropdownMenu = useDropdownSubMenu({
10143
+ items,
10144
+ onClose: setFalse,
10145
+ isOpen: isOpenDropdown,
10146
+ activeItem,
10147
+ });
10148
+ useEffect(() => {
10149
+ dropdownMenu.current?.addEventListener('mouseleave', setFalse);
10150
+ return () => {
10151
+ dropdownMenu.current?.removeEventListener('mouseleave', setFalse);
10152
+ };
10153
+ }, []);
10154
+ return (jsx("div", { className: style(isOpenDropdown ? 'rounded-md shadow-blue-gray' : '', className), ref: dropdownMenu, role: "navigation", children: jsx("button", { type: "button", className: "group/btn flex justify-between items-center h-6", "aria-label": ariaLabel, onClick: toggle, role: "button", "aria-labelledby": "labeldiv", children: Array(3)
10155
+ .fill(null)
10156
+ .map((_, i) => (jsx("div", { className: "w-[3px] h-[3px] rounded mr-2xs bg-primary-text group-hover/btn:bg-primary-hover group-data-transparent:bg-white" }, String(i)))) }) }));
10157
+ });
10158
+
10140
10159
  const HeaderItem = JSX(({ className = '', active, dataItemName, children, data, ...rest }) => {
10141
10160
  const link = useLink();
10142
10161
  const { href, target, text, onClick } = link(rest);
@@ -10144,7 +10163,8 @@
10144
10163
  });
10145
10164
  const getTextStyle$1 = (active = false) => style('font-sans text-l lg:font-light', active ? 'text-primary-main' : 'text-primary-text hover:text-primary-main', 'group-data-transparent:text-white group-data-transparent:hover:text-primary-hover');
10146
10165
 
10147
- const HeaderSubMenuItem = JSX(({ observerOptions, onVisibilityChange, children, className, ...rest }) => {
10166
+ const HeaderSubMenuItem = JSX(({ observerOptions, onVisibilityChange, children, className, items, activeItem, ...rest }) => {
10167
+ const [isOpenDropdown, { setFalse, setTrue }] = useBool(false);
10148
10168
  const observerCallback = useCallback((entries) => {
10149
10169
  if (!entries.length || !onVisibilityChange) {
10150
10170
  return;
@@ -10154,7 +10174,21 @@
10154
10174
  onVisibilityChange(entry.isIntersecting);
10155
10175
  }, [onVisibilityChange]);
10156
10176
  const ref = useIntersectionObserver(observerCallback, observerOptions);
10157
- return (jsx("span", { ref: ref, className: className, role: "menuitem", children: jsx(HeaderItem, { ...rest, children: children }) }));
10177
+ const dropdownMenu = useDropdownSubMenu({
10178
+ items,
10179
+ onClose: setFalse,
10180
+ isOpen: isOpenDropdown,
10181
+ activeItem,
10182
+ });
10183
+ useEffect(() => {
10184
+ dropdownMenu.current?.addEventListener('mouseenter', setTrue);
10185
+ dropdownMenu.current?.addEventListener('mouseleave', setFalse);
10186
+ return () => {
10187
+ dropdownMenu.current?.addEventListener('mouseenter', setTrue);
10188
+ dropdownMenu.current?.removeEventListener('mouseleave', setFalse);
10189
+ };
10190
+ }, []);
10191
+ return (jsx("div", { className: "inline-block", ref: dropdownMenu, children: jsx("span", { ref: ref, className: className, role: "menuitem", children: jsx(HeaderItem, { ...rest, children: children }) }) }));
10158
10192
  });
10159
10193
 
10160
10194
  const BUTTON_STYLE = {
@@ -10179,7 +10213,7 @@
10179
10213
  ? handleIntersectionActivation$1(index)
10180
10214
  : handleIntersectionDeactivation$1(index));
10181
10215
  }), [subItems]);
10182
- return (jsxs("nav", { className: "mt-s flex gap-s items-center justify-between", children: [jsx("div", { ref: subItemsListRef, className: "overflow-hidden whitespace-nowrap pb-s mt-xs space-x-lg", role: "menu", children: subItems.map((_, i) => (jsx(HeaderSubMenuItem, { className: visibleItemsCount - 1 < i ? 'invisible' : '', active: _ === activeSubItem, observerOptions: observerOptions, onVisibilityChange: subItemsVisibilityHandlers[i], data: _.dataHeader, ..._ }, String(i)))) }), dropDownMenuItems.length ? (jsx(DropdownMenu, { items: dropDownMenuItems, activeItem: activeSubItem, ariaLabel: dropdownMenuAriaLabel })) : null, projectSettings.CHAT_BOT ? (jsx(HeaderChatBotButton, { version: version, iconVersion: iconVersion, ariaLabel: chatBotAriaLabel })) : null, jsx(InternetBankButton, { version: version, ...internetBankButton })] }));
10216
+ return (jsxs("nav", { className: "mt-s flex gap-s items-center justify-between", children: [jsx("div", { ref: subItemsListRef, className: "overflow-hidden whitespace-nowrap pb-s mt-xs space-x-lg", role: "menu", children: subItems.map((_, i) => (jsx(HeaderSubMenuItem, { className: visibleItemsCount - 1 < i ? 'invisible' : '', active: _ === activeSubItem, activeItem: activeSubItem, observerOptions: observerOptions, onVisibilityChange: subItemsVisibilityHandlers[i], data: _.dataHeader, ..._ }, String(i)))) }), dropDownMenuItems.length ? (jsx(HeaderMoreMenuItem, { items: dropDownMenuItems, activeItem: activeSubItem, ariaLabel: dropdownMenuAriaLabel })) : null, projectSettings.CHAT_BOT ? (jsx(HeaderChatBotButton, { version: version, iconVersion: iconVersion, ariaLabel: chatBotAriaLabel })) : null, jsx(InternetBankButton, { version: version, ...internetBankButton })] }));
10183
10217
  });
10184
10218
  const handleIntersectionActivation$1 = (index) => (prev) => Math.max(prev, index + 1);
10185
10219
  const handleIntersectionDeactivation$1 = (index) => (prev) => Math.min(prev, index);
@@ -10304,7 +10338,7 @@
10304
10338
  }), [navigationItems]);
10305
10339
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10306
10340
  const { dataFooter, dataHeader, ...logoProps } = logo ?? {};
10307
- return (jsxs("div", { className: "flex items-center justify-between", children: [jsx(Logo, { className: "mr-3xl", bgColor: bgColor, logo: logoProps, data: dataHeader, showTitle: false }), jsx("div", { ref: topItemsListRef, className: "overflow-hidden min-w-40 pb-xs mt-xs", role: "menu", children: navigationItems.map((_, i) => (jsx(HeaderTopMenuItem, { className: visibleItemsCount - 1 < i ? 'invisible' : '', active: _ === activeTopItem, observerOptions: observerOptions, onVisibilityChange: topItemsVisibilityHandlers[i], data: _.dataHeader, ..._ }, String(i)))) }), dropDownMenuItems.length ? (jsx(DropdownMenu, { className: "mx-xs", items: dropDownMenuItems, activeItem: activeTopItem, ariaLabel: dropdownMenuAriaLabel })) : null, jsx(HeaderSecondaryMenu, { version: version, className: "ml-auto", search: search, navigationItems: navigationItems, ...headerData })] }));
10341
+ return (jsxs("div", { className: "flex items-center justify-between", children: [jsx(Logo, { className: "mr-3xl", bgColor: bgColor, logo: logoProps, data: dataHeader, showTitle: false }), jsx("div", { ref: topItemsListRef, className: "overflow-hidden min-w-40 pb-xs mt-xs", role: "menu", children: navigationItems.map((_, i) => (jsx(HeaderTopMenuItem, { className: visibleItemsCount - 1 < i ? 'invisible' : '', active: _ === activeTopItem, observerOptions: observerOptions, onVisibilityChange: topItemsVisibilityHandlers[i], data: _.dataHeader, ..._ }, String(i)))) }), dropDownMenuItems.length ? (jsx(HeaderMoreMenuItem, { className: "mx-xs rounded-md shadow-blue-gray", items: dropDownMenuItems, activeItem: activeTopItem, ariaLabel: dropdownMenuAriaLabel })) : null, jsx(HeaderSecondaryMenu, { version: version, className: "ml-auto", search: search, navigationItems: navigationItems, ...headerData })] }));
10308
10342
  });
10309
10343
  const handleIntersectionActivation = (index) => (prev) => Math.max(prev, index + 1);
10310
10344
  const handleIntersectionDeactivation = (index) => (prev) => Math.min(prev, index);
@@ -11177,7 +11211,7 @@
11177
11211
  slots: () => [HEADER_SLOT, FOOTER_SLOT, STICKY_FOOTER_SLOT],
11178
11212
  });
11179
11213
 
11180
- const packageVersion = "0.14.873";
11214
+ const packageVersion = "0.14.875";
11181
11215
 
11182
11216
  exports.Blocks = Blocks;
11183
11217
  exports.ContentPage = ContentPage;