@redneckz/wildless-cms-uni-blocks 0.14.899 → 0.14.900

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 (220) hide show
  1. package/bin/migration-scripts/0.14.900.js +18 -0
  2. package/bundle/blocks.schema.json +1 -1
  3. package/bundle/bundle.umd.js +212 -20
  4. package/bundle/bundle.umd.min.js +1 -1
  5. package/bundle/components/ApplicationForm/ApplicationFormContent.d.ts +2 -1
  6. package/bundle/components/ExchangeRateTile/CurrencyProps.d.ts +6 -0
  7. package/bundle/components/ExchangeRateTile/CurrencyTable.d.ts +7 -0
  8. package/bundle/components/ExchangeRateTile/CurrentLocation.d.ts +6 -0
  9. package/bundle/components/ExchangeRateTile/ExchangeCurrencyCalculator.d.ts +24 -0
  10. package/bundle/components/ExchangeRateTile/ExchangeRateTile.d.ts +5 -0
  11. package/bundle/components/ExchangeRateTile/ExchangeRateTileContent.d.ts +9 -0
  12. package/bundle/components/ExchangeRateTile/calculateResult.d.ts +2 -0
  13. package/bundle/components/ExchangeRateTile/callbackCurrencySelect.d.ts +8 -0
  14. package/bundle/components/ExchangeRateTile/formatCurrency.d.ts +1 -0
  15. package/bundle/components/ExchangeRateTile/renderInput.d.ts +11 -0
  16. package/bundle/components/ExchangeRateTile/useFetchExchangeRateData.d.ts +9 -0
  17. package/dist/components/ApplicationForm/ApplicationFormContent.d.ts +2 -1
  18. package/dist/components/Blocks.js +2 -0
  19. package/dist/components/Blocks.js.map +1 -1
  20. package/dist/components/Blocks.mobile.js +2 -0
  21. package/dist/components/Blocks.mobile.js.map +1 -1
  22. package/dist/components/ExchangeRateTile/CurrencyProps.d.ts +6 -0
  23. package/dist/components/ExchangeRateTile/CurrencyProps.js +10 -0
  24. package/dist/components/ExchangeRateTile/CurrencyProps.js.map +1 -0
  25. package/dist/components/ExchangeRateTile/CurrencyTable.d.ts +7 -0
  26. package/dist/components/ExchangeRateTile/CurrencyTable.js +23 -0
  27. package/dist/components/ExchangeRateTile/CurrencyTable.js.map +1 -0
  28. package/dist/components/ExchangeRateTile/CurrentLocation.d.ts +6 -0
  29. package/dist/components/ExchangeRateTile/CurrentLocation.js +10 -0
  30. package/dist/components/ExchangeRateTile/CurrentLocation.js.map +1 -0
  31. package/dist/components/ExchangeRateTile/ExchangeCurrencyCalculator.d.ts +24 -0
  32. package/dist/components/ExchangeRateTile/ExchangeCurrencyCalculator.js +73 -0
  33. package/dist/components/ExchangeRateTile/ExchangeCurrencyCalculator.js.map +1 -0
  34. package/dist/components/ExchangeRateTile/ExchangeRateTile.d.ts +5 -0
  35. package/dist/components/ExchangeRateTile/ExchangeRateTile.js +26 -0
  36. package/dist/components/ExchangeRateTile/ExchangeRateTile.js.map +1 -0
  37. package/dist/components/ExchangeRateTile/ExchangeRateTileContent.d.ts +9 -0
  38. package/dist/components/ExchangeRateTile/ExchangeRateTileContent.js +2 -0
  39. package/dist/components/ExchangeRateTile/ExchangeRateTileContent.js.map +1 -0
  40. package/dist/components/ExchangeRateTile/calculateResult.d.ts +2 -0
  41. package/dist/components/ExchangeRateTile/calculateResult.js +11 -0
  42. package/dist/components/ExchangeRateTile/calculateResult.js.map +1 -0
  43. package/dist/components/ExchangeRateTile/callbackCurrencySelect.d.ts +8 -0
  44. package/dist/components/ExchangeRateTile/callbackCurrencySelect.js +21 -0
  45. package/dist/components/ExchangeRateTile/callbackCurrencySelect.js.map +1 -0
  46. package/dist/components/ExchangeRateTile/formatCurrency.d.ts +1 -0
  47. package/dist/components/ExchangeRateTile/formatCurrency.js +10 -0
  48. package/dist/components/ExchangeRateTile/formatCurrency.js.map +1 -0
  49. package/dist/components/ExchangeRateTile/renderInput.d.ts +11 -0
  50. package/dist/components/ExchangeRateTile/renderInput.js +16 -0
  51. package/dist/components/ExchangeRateTile/renderInput.js.map +1 -0
  52. package/dist/components/ExchangeRateTile/useFetchExchangeRateData.d.ts +9 -0
  53. package/dist/components/ExchangeRateTile/useFetchExchangeRateData.js +13 -0
  54. package/dist/components/ExchangeRateTile/useFetchExchangeRateData.js.map +1 -0
  55. package/lib/common.css +1 -1
  56. package/lib/components/ApplicationForm/ApplicationFormContent.d.ts +2 -1
  57. package/lib/components/Blocks.js +2 -0
  58. package/lib/components/Blocks.js.map +1 -1
  59. package/lib/components/Blocks.mobile.js +2 -0
  60. package/lib/components/Blocks.mobile.js.map +1 -1
  61. package/lib/components/ExchangeRateTile/CurrencyProps.d.ts +6 -0
  62. package/lib/components/ExchangeRateTile/CurrencyProps.js +8 -0
  63. package/lib/components/ExchangeRateTile/CurrencyProps.js.map +1 -0
  64. package/lib/components/ExchangeRateTile/CurrencyTable.d.ts +7 -0
  65. package/lib/components/ExchangeRateTile/CurrencyTable.js +21 -0
  66. package/lib/components/ExchangeRateTile/CurrencyTable.js.map +1 -0
  67. package/lib/components/ExchangeRateTile/CurrentLocation.d.ts +6 -0
  68. package/lib/components/ExchangeRateTile/CurrentLocation.js +8 -0
  69. package/lib/components/ExchangeRateTile/CurrentLocation.js.map +1 -0
  70. package/lib/components/ExchangeRateTile/ExchangeCurrencyCalculator.d.ts +24 -0
  71. package/lib/components/ExchangeRateTile/ExchangeCurrencyCalculator.js +71 -0
  72. package/lib/components/ExchangeRateTile/ExchangeCurrencyCalculator.js.map +1 -0
  73. package/lib/components/ExchangeRateTile/ExchangeRateTile.d.ts +5 -0
  74. package/lib/components/ExchangeRateTile/ExchangeRateTile.fixture.d.ts +5 -0
  75. package/lib/components/ExchangeRateTile/ExchangeRateTile.fixture.mobile.d.ts +5 -0
  76. package/lib/components/ExchangeRateTile/ExchangeRateTile.js +24 -0
  77. package/lib/components/ExchangeRateTile/ExchangeRateTile.js.map +1 -0
  78. package/lib/components/ExchangeRateTile/ExchangeRateTileContent.d.ts +9 -0
  79. package/lib/components/ExchangeRateTile/ExchangeRateTileContent.js +2 -0
  80. package/lib/components/ExchangeRateTile/ExchangeRateTileContent.js.map +1 -0
  81. package/lib/components/ExchangeRateTile/calculateResult.d.ts +2 -0
  82. package/lib/components/ExchangeRateTile/calculateResult.js +7 -0
  83. package/lib/components/ExchangeRateTile/calculateResult.js.map +1 -0
  84. package/lib/components/ExchangeRateTile/callbackCurrencySelect.d.ts +8 -0
  85. package/lib/components/ExchangeRateTile/callbackCurrencySelect.js +18 -0
  86. package/lib/components/ExchangeRateTile/callbackCurrencySelect.js.map +1 -0
  87. package/lib/components/ExchangeRateTile/formatCurrency.d.ts +1 -0
  88. package/lib/components/ExchangeRateTile/formatCurrency.js +7 -0
  89. package/lib/components/ExchangeRateTile/formatCurrency.js.map +1 -0
  90. package/lib/components/ExchangeRateTile/renderInput.d.ts +11 -0
  91. package/lib/components/ExchangeRateTile/renderInput.js +13 -0
  92. package/lib/components/ExchangeRateTile/renderInput.js.map +1 -0
  93. package/lib/components/ExchangeRateTile/useFetchExchangeRateData.d.ts +9 -0
  94. package/lib/components/ExchangeRateTile/useFetchExchangeRateData.js +10 -0
  95. package/lib/components/ExchangeRateTile/useFetchExchangeRateData.js.map +1 -0
  96. package/mobile/bundle/bundle.umd.js +212 -20
  97. package/mobile/bundle/bundle.umd.min.js +1 -1
  98. package/mobile/bundle/components/ApplicationForm/ApplicationFormContent.d.ts +2 -1
  99. package/mobile/bundle/components/ExchangeRateTile/CurrencyProps.d.ts +6 -0
  100. package/mobile/bundle/components/ExchangeRateTile/CurrencyTable.d.ts +7 -0
  101. package/mobile/bundle/components/ExchangeRateTile/CurrentLocation.d.ts +6 -0
  102. package/mobile/bundle/components/ExchangeRateTile/ExchangeCurrencyCalculator.d.ts +24 -0
  103. package/mobile/bundle/components/ExchangeRateTile/ExchangeRateTile.d.ts +5 -0
  104. package/mobile/bundle/components/ExchangeRateTile/ExchangeRateTileContent.d.ts +9 -0
  105. package/mobile/bundle/components/ExchangeRateTile/calculateResult.d.ts +2 -0
  106. package/mobile/bundle/components/ExchangeRateTile/callbackCurrencySelect.d.ts +8 -0
  107. package/mobile/bundle/components/ExchangeRateTile/formatCurrency.d.ts +1 -0
  108. package/mobile/bundle/components/ExchangeRateTile/renderInput.d.ts +11 -0
  109. package/mobile/bundle/components/ExchangeRateTile/useFetchExchangeRateData.d.ts +9 -0
  110. package/mobile/dist/components/ApplicationForm/ApplicationFormContent.d.ts +2 -1
  111. package/mobile/dist/components/Blocks.js +2 -0
  112. package/mobile/dist/components/Blocks.js.map +1 -1
  113. package/mobile/dist/components/ExchangeRateTile/CurrencyProps.d.ts +6 -0
  114. package/mobile/dist/components/ExchangeRateTile/CurrencyProps.js +10 -0
  115. package/mobile/dist/components/ExchangeRateTile/CurrencyProps.js.map +1 -0
  116. package/mobile/dist/components/ExchangeRateTile/CurrencyTable.d.ts +7 -0
  117. package/mobile/dist/components/ExchangeRateTile/CurrencyTable.js +23 -0
  118. package/mobile/dist/components/ExchangeRateTile/CurrencyTable.js.map +1 -0
  119. package/mobile/dist/components/ExchangeRateTile/CurrentLocation.d.ts +6 -0
  120. package/mobile/dist/components/ExchangeRateTile/CurrentLocation.js +10 -0
  121. package/mobile/dist/components/ExchangeRateTile/CurrentLocation.js.map +1 -0
  122. package/mobile/dist/components/ExchangeRateTile/ExchangeCurrencyCalculator.d.ts +24 -0
  123. package/mobile/dist/components/ExchangeRateTile/ExchangeCurrencyCalculator.js +73 -0
  124. package/mobile/dist/components/ExchangeRateTile/ExchangeCurrencyCalculator.js.map +1 -0
  125. package/mobile/dist/components/ExchangeRateTile/ExchangeRateTile.d.ts +5 -0
  126. package/mobile/dist/components/ExchangeRateTile/ExchangeRateTile.js +26 -0
  127. package/mobile/dist/components/ExchangeRateTile/ExchangeRateTile.js.map +1 -0
  128. package/mobile/dist/components/ExchangeRateTile/ExchangeRateTileContent.d.ts +9 -0
  129. package/mobile/dist/components/ExchangeRateTile/ExchangeRateTileContent.js +2 -0
  130. package/mobile/dist/components/ExchangeRateTile/ExchangeRateTileContent.js.map +1 -0
  131. package/mobile/dist/components/ExchangeRateTile/calculateResult.d.ts +2 -0
  132. package/mobile/dist/components/ExchangeRateTile/calculateResult.js +11 -0
  133. package/mobile/dist/components/ExchangeRateTile/calculateResult.js.map +1 -0
  134. package/mobile/dist/components/ExchangeRateTile/callbackCurrencySelect.d.ts +8 -0
  135. package/mobile/dist/components/ExchangeRateTile/callbackCurrencySelect.js +21 -0
  136. package/mobile/dist/components/ExchangeRateTile/callbackCurrencySelect.js.map +1 -0
  137. package/mobile/dist/components/ExchangeRateTile/formatCurrency.d.ts +1 -0
  138. package/mobile/dist/components/ExchangeRateTile/formatCurrency.js +10 -0
  139. package/mobile/dist/components/ExchangeRateTile/formatCurrency.js.map +1 -0
  140. package/mobile/dist/components/ExchangeRateTile/renderInput.d.ts +11 -0
  141. package/mobile/dist/components/ExchangeRateTile/renderInput.js +16 -0
  142. package/mobile/dist/components/ExchangeRateTile/renderInput.js.map +1 -0
  143. package/mobile/dist/components/ExchangeRateTile/useFetchExchangeRateData.d.ts +9 -0
  144. package/mobile/dist/components/ExchangeRateTile/useFetchExchangeRateData.js +13 -0
  145. package/mobile/dist/components/ExchangeRateTile/useFetchExchangeRateData.js.map +1 -0
  146. package/mobile/lib/common.css +1 -1
  147. package/mobile/lib/components/ApplicationForm/ApplicationFormContent.d.ts +2 -1
  148. package/mobile/lib/components/Blocks.js +2 -0
  149. package/mobile/lib/components/Blocks.js.map +1 -1
  150. package/mobile/lib/components/ExchangeRateTile/CurrencyProps.d.ts +6 -0
  151. package/mobile/lib/components/ExchangeRateTile/CurrencyProps.js +8 -0
  152. package/mobile/lib/components/ExchangeRateTile/CurrencyProps.js.map +1 -0
  153. package/mobile/lib/components/ExchangeRateTile/CurrencyTable.d.ts +7 -0
  154. package/mobile/lib/components/ExchangeRateTile/CurrencyTable.js +21 -0
  155. package/mobile/lib/components/ExchangeRateTile/CurrencyTable.js.map +1 -0
  156. package/mobile/lib/components/ExchangeRateTile/CurrentLocation.d.ts +6 -0
  157. package/mobile/lib/components/ExchangeRateTile/CurrentLocation.js +8 -0
  158. package/mobile/lib/components/ExchangeRateTile/CurrentLocation.js.map +1 -0
  159. package/mobile/lib/components/ExchangeRateTile/ExchangeCurrencyCalculator.d.ts +24 -0
  160. package/mobile/lib/components/ExchangeRateTile/ExchangeCurrencyCalculator.js +71 -0
  161. package/mobile/lib/components/ExchangeRateTile/ExchangeCurrencyCalculator.js.map +1 -0
  162. package/mobile/lib/components/ExchangeRateTile/ExchangeRateTile.d.ts +5 -0
  163. package/mobile/lib/components/ExchangeRateTile/ExchangeRateTile.js +24 -0
  164. package/mobile/lib/components/ExchangeRateTile/ExchangeRateTile.js.map +1 -0
  165. package/mobile/lib/components/ExchangeRateTile/ExchangeRateTileContent.d.ts +9 -0
  166. package/mobile/lib/components/ExchangeRateTile/ExchangeRateTileContent.js +2 -0
  167. package/mobile/lib/components/ExchangeRateTile/ExchangeRateTileContent.js.map +1 -0
  168. package/mobile/lib/components/ExchangeRateTile/calculateResult.d.ts +2 -0
  169. package/mobile/lib/components/ExchangeRateTile/calculateResult.js +7 -0
  170. package/mobile/lib/components/ExchangeRateTile/calculateResult.js.map +1 -0
  171. package/mobile/lib/components/ExchangeRateTile/callbackCurrencySelect.d.ts +8 -0
  172. package/mobile/lib/components/ExchangeRateTile/callbackCurrencySelect.js +18 -0
  173. package/mobile/lib/components/ExchangeRateTile/callbackCurrencySelect.js.map +1 -0
  174. package/mobile/lib/components/ExchangeRateTile/formatCurrency.d.ts +1 -0
  175. package/mobile/lib/components/ExchangeRateTile/formatCurrency.js +7 -0
  176. package/mobile/lib/components/ExchangeRateTile/formatCurrency.js.map +1 -0
  177. package/mobile/lib/components/ExchangeRateTile/renderInput.d.ts +11 -0
  178. package/mobile/lib/components/ExchangeRateTile/renderInput.js +13 -0
  179. package/mobile/lib/components/ExchangeRateTile/renderInput.js.map +1 -0
  180. package/mobile/lib/components/ExchangeRateTile/useFetchExchangeRateData.d.ts +9 -0
  181. package/mobile/lib/components/ExchangeRateTile/useFetchExchangeRateData.js +10 -0
  182. package/mobile/lib/components/ExchangeRateTile/useFetchExchangeRateData.js.map +1 -0
  183. package/mobile/src/components/ApplicationForm/ApplicationForm.example.json +92 -29
  184. package/mobile/src/components/ApplicationForm/ApplicationFormContent.ts +2 -1
  185. package/mobile/src/components/Blocks.ts +2 -0
  186. package/mobile/src/components/ExchangeRateTile/CurrencyProps.ts +6 -0
  187. package/mobile/src/components/ExchangeRateTile/CurrencyTable.tsx +64 -0
  188. package/mobile/src/components/ExchangeRateTile/CurrentLocation.tsx +28 -0
  189. package/mobile/src/components/ExchangeRateTile/ExchangeCurrencyCalculator.tsx +155 -0
  190. package/mobile/src/components/ExchangeRateTile/ExchangeRateTile.example.json +12 -0
  191. package/mobile/src/components/ExchangeRateTile/ExchangeRateTile.tsx +60 -0
  192. package/mobile/src/components/ExchangeRateTile/ExchangeRateTile.ui.json +8 -0
  193. package/mobile/src/components/ExchangeRateTile/ExchangeRateTileContent.ts +11 -0
  194. package/mobile/src/components/ExchangeRateTile/calculateResult.ts +9 -0
  195. package/mobile/src/components/ExchangeRateTile/callbackCurrencySelect.ts +25 -0
  196. package/mobile/src/components/ExchangeRateTile/formatCurrency.ts +8 -0
  197. package/mobile/src/components/ExchangeRateTile/renderInput.tsx +43 -0
  198. package/mobile/src/components/ExchangeRateTile/useFetchExchangeRateData.ts +25 -0
  199. package/package.json +2 -2
  200. package/src/components/ApplicationForm/ApplicationForm.example.json +92 -29
  201. package/src/components/ApplicationForm/ApplicationForm.fixture.mobile.tsx +11 -11
  202. package/src/components/ApplicationForm/ApplicationForm.fixture.tsx +11 -11
  203. package/src/components/ApplicationForm/ApplicationFormContent.ts +2 -1
  204. package/src/components/Blocks.mobile.ts +2 -0
  205. package/src/components/Blocks.ts +2 -0
  206. package/src/components/ExchangeRateTile/CurrencyProps.ts +6 -0
  207. package/src/components/ExchangeRateTile/CurrencyTable.tsx +64 -0
  208. package/src/components/ExchangeRateTile/CurrentLocation.tsx +28 -0
  209. package/src/components/ExchangeRateTile/ExchangeCurrencyCalculator.tsx +155 -0
  210. package/src/components/ExchangeRateTile/ExchangeRateTile.example.json +12 -0
  211. package/src/components/ExchangeRateTile/ExchangeRateTile.fixture.mobile.tsx +21 -0
  212. package/src/components/ExchangeRateTile/ExchangeRateTile.fixture.tsx +21 -0
  213. package/src/components/ExchangeRateTile/ExchangeRateTile.tsx +60 -0
  214. package/src/components/ExchangeRateTile/ExchangeRateTile.ui.json +8 -0
  215. package/src/components/ExchangeRateTile/ExchangeRateTileContent.ts +11 -0
  216. package/src/components/ExchangeRateTile/calculateResult.ts +9 -0
  217. package/src/components/ExchangeRateTile/callbackCurrencySelect.ts +25 -0
  218. package/src/components/ExchangeRateTile/formatCurrency.ts +8 -0
  219. package/src/components/ExchangeRateTile/renderInput.tsx +43 -0
  220. package/src/components/ExchangeRateTile/useFetchExchangeRateData.ts +25 -0
@@ -755,10 +755,10 @@
755
755
  const and = (a, b) => (...args) => a(...args) && b(...args);
756
756
 
757
757
  const table = (...table) => (...input) => {
758
- const [, unit] = assertNonEmpty(table.find(([predicate]) => predicate(...input)));
758
+ const [, unit] = assertNonEmpty$1(table.find(([predicate]) => predicate(...input)));
759
759
  return unit(...input);
760
760
  };
761
- function assertNonEmpty(value) {
761
+ function assertNonEmpty$1(value) {
762
762
  if (!value) {
763
763
  throw new Error('Value should be fulfilled');
764
764
  }
@@ -10151,6 +10151,214 @@
10151
10151
  };
10152
10152
  const ErrorBlock = JSX(({ className = '', title, description, error, button, ...rest }) => (jsxs(BlockWrapper, { className: style('flex flex-col justify-center items-center', className), defaultPadding: style('p-6xl'), version: "transparent", ...rest, children: [jsx("div", { className: "flex justify-center", children: renderErrorContent(error) }), jsx(Headline, { title: title, description: description, headlineVersion: "XL", isEmbedded: true, className: "mb-2xl last:mb-0" }), button?.text ? (jsx(LinkButton, { version: button?.version, text: button?.text, ...button })) : null] })));
10153
10153
 
10154
+ const REGION_URL = `${API_BASE_URI$1}/region`;
10155
+ function useLocation(defaultLocation = 'Москва') {
10156
+ const locationStore = useLocalStore();
10157
+ return locationStore.location ?? { name: defaultLocation };
10158
+ }
10159
+ function useDefaultLocation(defaultLocation = 'Москва') {
10160
+ const locationStore = useLocalStore();
10161
+ const preselectLocation = useCallback(async () => {
10162
+ if (!locationStore.location) {
10163
+ const region = await fetchJSON(REGION_URL);
10164
+ locationStore.location = region ?? { name: defaultLocation };
10165
+ }
10166
+ }, [locationStore, defaultLocation]);
10167
+ useAsyncData(REGION_URL, preselectLocation);
10168
+ return locationStore;
10169
+ }
10170
+
10171
+ var Currency;
10172
+ (function (Currency) {
10173
+ Currency["RUB"] = "RUB";
10174
+ Currency["EUR"] = "EUR";
10175
+ Currency["USD"] = "USD";
10176
+ Currency["CNY"] = "CNY";
10177
+ })(Currency || (Currency = {}));
10178
+
10179
+ const currencyNumberFormat = new Intl.NumberFormat('ru', {
10180
+ style: 'currency',
10181
+ currency: Currency.RUB,
10182
+ });
10183
+ const formatCurrency = (value) => (value ? currencyNumberFormat.format(value) : '');
10184
+
10185
+ const TABLE_STYLE_BASE = 'text-m font-light text-secondary-text ';
10186
+ const TABLE_HEAD_STYLE = `${TABLE_STYLE_BASE} text-left`;
10187
+ const TABLE_HEAD_STYLE_CENTER = `${TABLE_STYLE_BASE} pl-5xl text-center`;
10188
+ const TABLE_HEAD_STYLE_RIGHT = `${TABLE_STYLE_BASE} pl-5xl text-right`;
10189
+ const CURRENCY_ICONS_MAP = {
10190
+ USD: 'DollarIcon',
10191
+ EUR: 'EuroIcon',
10192
+ CNY: 'ChineseYuanRenminbiIcon',
10193
+ };
10194
+ const CurrencyTable = JSX(({ className, exchangeCurrencyItems }) => (jsxs("table", { className: style('h-fit w-full', className), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { className: TABLE_HEAD_STYLE, children: jsx(Text, { size: "text-m", children: "\u0412\u0430\u043B\u044E\u0442\u0430" }) }), jsx("th", { className: TABLE_HEAD_STYLE_CENTER, children: jsx(Text, { size: "text-m", children: "\u041A\u0443\u043F\u0438\u0442\u044C" }) }), jsx("th", { className: TABLE_HEAD_STYLE_RIGHT, children: jsx(Text, { size: "text-m", children: "\u041F\u0440\u043E\u0434\u0430\u0442\u044C" }) })] }) }), jsx("tbody", { children: exchangeCurrencyItems.map(renderCurrencyRow) })] })));
10195
+ const renderCurrencyRow = (exchangeCurrencyItem) => {
10196
+ const currency = exchangeCurrencyItem?.currency?.currency;
10197
+ return (jsxs("tr", { className: "pb-2xs text-h6", children: [jsx("td", { className: "pt-m m-auto flex text-left", children: jsxs("div", { className: "flex items-center gap-xs", children: [currency ? (jsx(Img, { image: { icon: CURRENCY_ICONS_MAP[currency] }, width: "24", height: "24" })) : null, jsx(Text, { size: "text-h6", children: currency })] }) }), jsx("td", { className: "pt-m pl-5xl text-center", children: jsx(Text, { size: "text-h6", children: formatCurrency(exchangeCurrencyItem?.saleExchangeRate) }) }), jsx("td", { className: "pt-m pl-5xl text-right", children: jsx(Text, { size: "text-h6", children: formatCurrency(exchangeCurrencyItem?.buyExchangeRate) }) })] }, currency));
10198
+ };
10199
+
10200
+ const icon = { icon: 'GpsIcon' };
10201
+ const CurrentLocation = JSX(({ className = '', address }) => (jsxs("div", { className: style('flex gap-s w-full justify-between @sm:justify-center', className), children: [jsx(RoundedIcon, { ...icon, iconBgVersion: "primary", className: "shrink-0" }), jsxs("div", { className: "space-y-2xs whitespace-pre-wrap", children: [address ? (jsx(Paragraph, { size: "text-l", color: "text-primary-main", children: address })) : null, jsx(Paragraph, { size: "text-m", color: "text-secondary-text", children: "\u041A\u0443\u0440\u0441 \u0443\u043A\u0430\u0437\u0430\u043D \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u043D\u043E\u0433\u043E \u043E\u0444\u0438\u0441\u0430" })] })] })));
10202
+
10203
+ const roundTo = (value, precision = 2) => {
10204
+ const factor = 10 ** precision;
10205
+ return Math.round(parseFloat(String(value)) * factor) / factor;
10206
+ };
10207
+
10208
+ const calculateResult = (value, rate, precision) => {
10209
+ const result = Number(formatValue(value)) * Math.pow(rate, precision ? -1 : 1);
10210
+ return Number.isInteger(result) ? result : roundTo(result);
10211
+ };
10212
+ const formatValue = (value) => value.replace(/[^\d.,]/g, '').replace(',', '.');
10213
+
10214
+ function assertNonEmpty(value) {
10215
+ if (!value) {
10216
+ throw new Error('Value should be fulfilled');
10217
+ }
10218
+ return value;
10219
+ }
10220
+
10221
+ const baseTableFunc = (table) => (input) => {
10222
+ const [, unit] = assertNonEmpty(table.find(([predicate]) => predicate(input)));
10223
+ return unit(input);
10224
+ };
10225
+ const tableFunc = (table) => baseTableFunc(table.map(([p, o]) => [p, () => o]));
10226
+ tableFunc.if = (predicate) => new TableFuncBuilder(undefined, predicate);
10227
+ class TableFuncBuilder {
10228
+ parent;
10229
+ predicate;
10230
+ unit;
10231
+ get entry() {
10232
+ return [assertNonEmpty(this.predicate), assertNonEmpty(this.unit)];
10233
+ }
10234
+ constructor(parent, predicate, unit) {
10235
+ this.parent = parent;
10236
+ this.predicate = predicate;
10237
+ this.unit = unit;
10238
+ }
10239
+ if(predicate) {
10240
+ return new TableFuncBuilder(this, predicate);
10241
+ }
10242
+ then(unit) {
10243
+ return new TableFuncBuilder(this.parent, this.predicate, unit);
10244
+ }
10245
+ else(unit) {
10246
+ return baseTableFunc([...buildTable(this), [() => true, unit]]);
10247
+ }
10248
+ }
10249
+ const buildTable = (builder) => [
10250
+ ...(builder?.parent ? buildTable(builder.parent) : []),
10251
+ builder.entry,
10252
+ ];
10253
+
10254
+ const callbackCurrencySelect = (props) => tableFunc([
10255
+ [
10256
+ (_) => _.value !== Currency.RUB && _.oppositeValue !== Currency.RUB,
10257
+ () => props.handleConvert(props.value, Currency.RUB),
10258
+ ],
10259
+ [
10260
+ (_) => _.value === Currency.RUB && _.oppositeValue === Currency.RUB,
10261
+ () => props.handleConvert(props.value, Currency.USD),
10262
+ ],
10263
+ [
10264
+ (_) => _.value === Currency.RUB && _.oppositeValue === Currency.RUB,
10265
+ () => props.handleConvert(props.value, Currency.CNY),
10266
+ ],
10267
+ [() => true, () => props.handleConvert(props.value)],
10268
+ ])(props)?.();
10269
+
10270
+ function renderInput(props) {
10271
+ const { placeholder, rates, selected, value, onChange, setSelected } = props;
10272
+ const ratesOptions = rates.map((_) => ({
10273
+ key: _?.currency?.currency ?? '',
10274
+ text: _?.currency?.currency ?? '',
10275
+ }));
10276
+ const selectedValue = { key: selected, text: selected };
10277
+ return (jsxs("div", { className: "relative flex", children: [jsx(Input, { className: "shrink-0 text-l w-full appearance-none -mr-20", placeholder: placeholder, type: "text", value: value, onChange: onChange }), ratesOptions.length ? (jsx(Select, { className: "absolute right-0", isBorder: false, onChange: (_) => setSelected(_.key), options: ratesOptions, value: selectedValue })) : null] }));
10278
+ }
10279
+
10280
+ const ExchangeCurrencyCalculator = JSX(({ className = '', currencyRatesBuy, currencyRatesSell, button }) => {
10281
+ const [calcState, setCalcState] = useState({
10282
+ inputSell: '',
10283
+ inputBuy: '',
10284
+ selectSell: currencyRatesBuy?.[0]?.currency?.currency || Currency.RUB,
10285
+ selectBuy: currencyRatesSell?.[0]?.currency?.currency || Currency.USD,
10286
+ });
10287
+ const handleSetCalcState = useCallback((newState) => setCalcState((oldState) => ({ ...oldState, ...newState })), []);
10288
+ return (jsxs("div", { className: `flex flex-col gap-m pt-2xl ${className}`, children: [currencyRatesBuy && currencyRatesSell ? (jsxs("div", { className: "grid gap-m", children: [renderInput({
10289
+ placeholder: 'Хочу продать',
10290
+ rates: currencyRatesSell,
10291
+ selected: calcState.selectSell,
10292
+ setSelected: handleSelectSell(calcState, handleSetCalcState, currencyRatesSell),
10293
+ value: calcState.inputSell,
10294
+ onChange: (value) => handleInputSell(handleSetCalcState, currencyRatesSell)(value, calcState.selectSell, calcState.selectBuy),
10295
+ }), renderInput({
10296
+ placeholder: 'Получу',
10297
+ rates: currencyRatesBuy,
10298
+ selected: calcState.selectBuy,
10299
+ setSelected: handleSelectBuy(calcState, handleSetCalcState, currencyRatesBuy),
10300
+ value: calcState.inputBuy,
10301
+ onChange: (value) => handleInputBuy(handleSetCalcState, currencyRatesBuy)(value, calcState.selectBuy, calcState.selectSell),
10302
+ })] })) : null, button?.text ? (jsx(LinkButton, { text: button.text, version: button?.version, ...button })) : null] }));
10303
+ });
10304
+ const handleSelectSell = (calcState, setCalcState, currencyRatesSell) => (value) => {
10305
+ setCalcState({ selectSell: value });
10306
+ callbackCurrencySelect({
10307
+ value,
10308
+ oppositeValue: calcState.selectBuy,
10309
+ handleConvert: (currencyFrom = calcState.selectSell, currencyTo = calcState.selectBuy) => {
10310
+ handleInputSell(setCalcState, currencyRatesSell)(calcState.inputSell, currencyFrom, currencyTo);
10311
+ },
10312
+ });
10313
+ };
10314
+ const handleSelectBuy = (calcState, setCalcState, currencyRatesBuy) => (value) => {
10315
+ setCalcState({ selectBuy: value });
10316
+ callbackCurrencySelect({
10317
+ value,
10318
+ oppositeValue: calcState.selectSell,
10319
+ handleConvert: (currencyTo = calcState.selectBuy, currencyFrom = calcState.selectSell) => handleInputBuy(setCalcState, currencyRatesBuy)(calcState.inputBuy, currencyTo, currencyFrom),
10320
+ });
10321
+ };
10322
+ const handleInputSell = (setCalcState, currencyRatesSell) => (value, currencyFrom, currencyTo) => {
10323
+ setCalcState({ inputSell: formatValue(value), selectBuy: currencyTo });
10324
+ const rate = currencyRatesSell.find((_) => _.currency?.currency === currencyTo)?.buyExchangeRate ||
10325
+ currencyRatesSell.find((_) => _.currency?.currency === currencyFrom)?.buyExchangeRate;
10326
+ if (rate) {
10327
+ setCalcState({
10328
+ inputBuy: String(calculateResult(value, rate, currencyFrom === Currency.RUB) || ''),
10329
+ });
10330
+ }
10331
+ };
10332
+ const handleInputBuy = (setCalcState, currencyRatesBuy) => (value, currencyTo, currencyFrom) => {
10333
+ setCalcState({ inputBuy: formatValue(value), selectSell: currencyFrom });
10334
+ const rate = currencyRatesBuy.find((_) => _.currency?.currency === currencyFrom)?.saleExchangeRate ||
10335
+ currencyRatesBuy.find((_) => _.currency?.currency === currencyTo)?.saleExchangeRate;
10336
+ if (rate) {
10337
+ setCalcState({
10338
+ inputSell: String(calculateResult(value, rate, currencyTo === Currency.RUB) || ''),
10339
+ });
10340
+ }
10341
+ };
10342
+
10343
+ const EXCHANGE_RATES_URL = `${API_BASE_URI$1}/exchangerates`;
10344
+ function useFetchExchangeRateData(currentRegion) {
10345
+ const regionCode = currentRegion?.code || '000';
10346
+ const { data } = useAsyncData(EXCHANGE_RATES_URL + `?regionCode=${regionCode}`, fetchJSONUnsafe);
10347
+ return data || {};
10348
+ }
10349
+
10350
+ const ExchangeRateTile = JSX(({ className = '', title = 'Курсы обмена валют', button, ...rest }) => {
10351
+ const currentLocation = useLocation();
10352
+ const exchangeRates = useFetchExchangeRateData(currentLocation);
10353
+ const currencyRates = getCurrencyRates(exchangeRates?.exchangeRate?.currencies);
10354
+ const currencyRatesBuy = currencyRates.filter((_) => _.buyExchangeRate);
10355
+ currencyRatesBuy.unshift({ currency: { currency: Currency.RUB } });
10356
+ const currencyRatesSell = currencyRates.filter((_) => _.saleExchangeRate);
10357
+ currencyRatesSell.push({ currency: { currency: Currency.RUB } });
10358
+ return (jsx(BlockWrapper, { className: style('box-border min-h-80', className), ...rest, children: jsx(BaseTile, { className: "h-full", title: jsx(Heading, { headingType: "h4", title: title, className: "whitespace-pre-wrap" }), children: jsxs("div", { className: "flex w-full gap-6xl flex-wrap @lg:flex-nowrap", children: [jsxs("div", { className: "w-full @2xl:w-auto @5xl:w-1/2", children: [currencyRates ? (jsx(CurrencyTable, { className: "mb-xl", exchangeCurrencyItems: currencyRates })) : null, jsx(CurrentLocation, { address: exchangeRates?.address })] }), jsx(ExchangeCurrencyCalculator, { className: "grow w-1/2", currencyRatesBuy: currencyRatesBuy, currencyRatesSell: currencyRatesSell, button: button })] }) }) }));
10359
+ });
10360
+ const getCurrencyRates = (currencies) => currencies?.filter((_) => [1, 2, 3].includes(_?.currency?.id)) || [];
10361
+
10154
10362
  const LinkList = JSX(({ className = '', items }) => {
10155
10363
  const link = useLink();
10156
10364
  return (jsx("ul", { className: style('flex flex-col gap-s w-full', className), children: items?.map(renderLinkListItem(link)) }));
@@ -10717,23 +10925,6 @@
10717
10925
  const handleIntersectionActivation$1 = (index) => (prev) => Math.max(prev, index + 1);
10718
10926
  const handleIntersectionDeactivation$1 = (index) => (prev) => Math.min(prev, index);
10719
10927
 
10720
- const REGION_URL = `${API_BASE_URI$1}/region`;
10721
- function useLocation(defaultLocation = 'Москва') {
10722
- const locationStore = useLocalStore();
10723
- return locationStore.location ?? { name: defaultLocation };
10724
- }
10725
- function useDefaultLocation(defaultLocation = 'Москва') {
10726
- const locationStore = useLocalStore();
10727
- const preselectLocation = useCallback(async () => {
10728
- if (!locationStore.location) {
10729
- const region = await fetchJSON(REGION_URL);
10730
- locationStore.location = region ?? { name: defaultLocation };
10731
- }
10732
- }, [locationStore, defaultLocation]);
10733
- useAsyncData(REGION_URL, preselectLocation);
10734
- return locationStore;
10735
- }
10736
-
10737
10928
  const groupBy = (list, keyGetter) => {
10738
10929
  const result = new Map();
10739
10930
  for (const item of list) {
@@ -11598,6 +11789,7 @@
11598
11789
  ErrorBlock,
11599
11790
  Footer,
11600
11791
  GalleryLayout,
11792
+ ExchangeRateTile,
11601
11793
  GrantSupport,
11602
11794
  Header,
11603
11795
  Headline,
@@ -11761,7 +11953,7 @@
11761
11953
  slots: () => [HEADER_SLOT, FOOTER_SLOT, STICKY_FOOTER_SLOT],
11762
11954
  });
11763
11955
 
11764
- const packageVersion = "0.14.898";
11956
+ const packageVersion = "0.14.899";
11765
11957
 
11766
11958
  exports.Blocks = Blocks;
11767
11959
  exports.ContentPage = ContentPage;