@sima-land/ui-nucleons 44.2.10 → 45.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/_internal/custom-scrollbar/index.d.ts +13 -7
  2. package/_internal/custom-scrollbar/index.js +29 -15
  3. package/_internal/dropdown-loading/index.d.ts +3 -3
  4. package/_internal/dropdown-loading/index.js +4 -2
  5. package/_internal/page-scroll-lock/adapters/body-scroll-lock.d.ts +39 -0
  6. package/_internal/page-scroll-lock/adapters/body-scroll-lock.js +62 -0
  7. package/_internal/page-scroll-lock/adapters/ui-nucleons.d.ts +25 -0
  8. package/_internal/page-scroll-lock/adapters/ui-nucleons.js +103 -0
  9. package/_internal/page-scroll-lock/context.d.ts +13 -0
  10. package/_internal/page-scroll-lock/context.js +54 -0
  11. package/_internal/page-scroll-lock/hook.d.ts +12 -0
  12. package/_internal/page-scroll-lock/hook.js +26 -0
  13. package/_internal/page-scroll-lock/index.d.ts +4 -0
  14. package/_internal/page-scroll-lock/index.js +9 -0
  15. package/_internal/page-scroll-lock/types.d.ts +22 -0
  16. package/_internal/{checkbox/index.js → page-scroll-lock/types.js} +0 -0
  17. package/_internal/readme.md +2 -0
  18. package/_internal/utils/dropdown.d.ts +1 -0
  19. package/_internal/utils/dropdown.js +1 -0
  20. package/alert/alert.module.scss +1 -24
  21. package/alert/index.d.ts +11 -17
  22. package/alert/index.js +33 -16
  23. package/arrow-button/arrow-button.module.scss +2 -0
  24. package/arrow-button/index.d.ts +2 -2
  25. package/autocomplete/autocomplete.d.ts +8 -0
  26. package/autocomplete/autocomplete.js +190 -0
  27. package/autocomplete/autocomplete.module.scss +2 -15
  28. package/autocomplete/index.d.ts +2 -27
  29. package/autocomplete/index.js +2 -126
  30. package/autocomplete/types.d.ts +19 -0
  31. package/autocomplete/types.js +2 -0
  32. package/autocomplete-deprecated/autocomplete.module.scss +20 -0
  33. package/autocomplete-deprecated/index.d.ts +28 -0
  34. package/autocomplete-deprecated/index.js +130 -0
  35. package/avatar/index.d.ts +2 -2
  36. package/avatar/user.d.ts +1 -1
  37. package/base-input/base-input.d.ts +11 -0
  38. package/base-input/base-input.js +96 -0
  39. package/base-input/base-input.module.scss +3 -3
  40. package/base-input/index.d.ts +2 -23
  41. package/base-input/index.js +2 -76
  42. package/base-input/types.d.ts +31 -0
  43. package/base-input/types.js +2 -0
  44. package/base-input/utils.d.ts +6 -0
  45. package/base-input/utils.js +14 -0
  46. package/base-input-deprecated/base-input.module.scss +66 -0
  47. package/base-input-deprecated/index.d.ts +24 -0
  48. package/base-input-deprecated/index.js +80 -0
  49. package/bordered-layout/index.d.ts +1 -0
  50. package/bordered-layout/index.js +1 -0
  51. package/bottom-bar/bottom-bar-util.scss +20 -0
  52. package/bottom-bar/bottom-bar.d.ts +12 -0
  53. package/bottom-bar/bottom-bar.js +47 -0
  54. package/bottom-bar/bottom-bar.module.scss +14 -0
  55. package/bottom-bar/index.d.ts +2 -21
  56. package/bottom-bar/index.js +5 -44
  57. package/bottom-bar/types.d.ts +10 -0
  58. package/bottom-bar/types.js +2 -0
  59. package/box/index.d.ts +1 -1
  60. package/breakpoints.scss +1 -1
  61. package/button/button.module.scss +70 -53
  62. package/button/index.d.ts +26 -41
  63. package/button/index.js +22 -46
  64. package/card/index.d.ts +2 -1
  65. package/card/index.js +23 -6
  66. package/card/slots.d.ts +17 -3
  67. package/card/slots.js +15 -13
  68. package/carousel/draggable.d.ts +7 -3
  69. package/carousel/draggable.js +10 -3
  70. package/carousel/helpers/draggable-event.d.ts +5 -2
  71. package/carousel/helpers/draggable-event.js +5 -0
  72. package/carousel/index.d.ts +1 -1
  73. package/carousel/index.js +24 -24
  74. package/checkbox/checkbox.module.scss +1 -0
  75. package/checkbox/index.d.ts +3 -3
  76. package/checkbox-field/index.d.ts +3 -0
  77. package/checkbox-field/index.js +3 -0
  78. package/clean-buttons/clean-buttons-util.scss +15 -0
  79. package/clean-buttons/clean-buttons.module.scss +5 -3
  80. package/clean-buttons/index.d.ts +16 -7
  81. package/clean-buttons/index.js +17 -14
  82. package/clean-buttons/types.d.ts +1 -1
  83. package/clean-buttons/utils.d.ts +5 -1
  84. package/clean-buttons/utils.js +4 -0
  85. package/{colors.d.ts → colors/index.d.ts} +1 -1
  86. package/{colors.js → colors/index.js} +0 -0
  87. package/dot-nav/index.d.ts +1 -1
  88. package/dropdown/index.d.ts +1 -0
  89. package/dropdown/utils.d.ts +19 -0
  90. package/dropdown/utils.js +45 -0
  91. package/dropdown-item/dropdown-item.module.scss +80 -15
  92. package/dropdown-item/index.d.ts +20 -9
  93. package/dropdown-item/index.js +12 -9
  94. package/dropdown-item/types.d.ts +3 -0
  95. package/dropdown-item/types.js +2 -0
  96. package/dropdown-item/utils.d.ts +45 -0
  97. package/dropdown-item/utils.js +89 -0
  98. package/expandable/utils.js +3 -3
  99. package/field-block/field-block.module.scss +155 -0
  100. package/field-block/index.d.ts +63 -0
  101. package/field-block/index.js +43 -0
  102. package/field-grid/index.d.ts +5 -4
  103. package/field-grid/index.js +1 -0
  104. package/helpers/bounds-of.d.ts +5 -1
  105. package/helpers/bounds-of.js +5 -0
  106. package/helpers/center-of.d.ts +4 -1
  107. package/helpers/center-of.js +8 -1
  108. package/helpers/create-container.d.ts +5 -2
  109. package/helpers/create-container.js +7 -2
  110. package/helpers/define-slots.d.ts +3 -3
  111. package/helpers/define-slots.js +5 -3
  112. package/helpers/events.d.ts +16 -8
  113. package/helpers/events.js +41 -15
  114. package/helpers/find-child-element.d.ts +12 -9
  115. package/helpers/find-child-element.js +9 -5
  116. package/helpers/find-offset-parent.d.ts +1 -2
  117. package/helpers/find-offset-parent.js +2 -2
  118. package/helpers/find-sibling-index.d.ts +11 -8
  119. package/helpers/find-sibling-index.js +8 -3
  120. package/helpers/fit-element-height.d.ts +5 -5
  121. package/helpers/fit-element-height.js +9 -7
  122. package/helpers/format-date.d.ts +11 -11
  123. package/helpers/format-date.js +15 -13
  124. package/helpers/format-number.d.ts +1 -1
  125. package/helpers/format-number.js +2 -2
  126. package/helpers/get-date-interval-data.d.ts +4 -1
  127. package/helpers/get-date-interval-data.js +7 -2
  128. package/helpers/get-declination.d.ts +5 -1
  129. package/helpers/get-declination.js +5 -0
  130. package/helpers/get-fraction-depth.d.ts +1 -1
  131. package/helpers/get-fraction-depth.js +2 -2
  132. package/helpers/get-no-index.d.ts +2 -2
  133. package/helpers/get-no-index.js +4 -3
  134. package/helpers/get-relative-pos.d.ts +4 -1
  135. package/helpers/get-relative-pos.js +7 -2
  136. package/helpers/get-scroll-parent.d.ts +1 -2
  137. package/helpers/get-scroll-parent.js +5 -5
  138. package/helpers/is-browser.d.ts +4 -1
  139. package/helpers/is-browser.js +8 -1
  140. package/helpers/is-fully-scrolled.d.ts +3 -3
  141. package/helpers/is-fully-scrolled.js +2 -2
  142. package/helpers/is-touch-device.d.ts +1 -1
  143. package/helpers/is-touch-device.js +4 -5
  144. package/helpers/layer.d.ts +1 -1
  145. package/helpers/layer.js +2 -2
  146. package/helpers/max-index-of.d.ts +4 -1
  147. package/helpers/max-index-of.js +7 -2
  148. package/helpers/media-query-list.d.ts +1 -1
  149. package/helpers/media-query-list.js +2 -2
  150. package/helpers/on.d.ts +4 -1
  151. package/helpers/on.js +7 -2
  152. package/helpers/point.d.ts +4 -1
  153. package/helpers/point.js +8 -1
  154. package/helpers/rename.d.ts +3 -1
  155. package/helpers/rename.js +1 -0
  156. package/helpers/scroll-to-child.d.ts +1 -1
  157. package/helpers/scroll-to-child.js +3 -2
  158. package/helpers/styles.d.ts +8 -2
  159. package/helpers/styles.js +18 -4
  160. package/helpers/with-prevent.d.ts +9 -6
  161. package/helpers/with-prevent.js +16 -9
  162. package/hint/hint-view.d.ts +26 -0
  163. package/hint/hint-view.js +43 -0
  164. package/hint/hint-view.module.scss +31 -0
  165. package/hint/hint.d.ts +14 -0
  166. package/hint/hint.js +41 -0
  167. package/hint/index.d.ts +5 -8
  168. package/hint/index.js +13 -48
  169. package/hint/utils.d.ts +61 -0
  170. package/hint/utils.js +161 -0
  171. package/{hint → hint-deprecated}/hint.module.scss +0 -0
  172. package/hint-deprecated/index.d.ts +11 -0
  173. package/hint-deprecated/index.js +53 -0
  174. package/hooks/breakpoint/index.d.ts +7 -4
  175. package/hooks/breakpoint/index.js +21 -13
  176. package/hooks/breakpoint/types.d.ts +3 -4
  177. package/hooks/breakpoint/utils.d.ts +2 -1
  178. package/hooks/breakpoint/utils.js +2 -1
  179. package/hooks/index.d.ts +8 -8
  180. package/hooks/index.js +27 -19
  181. package/hooks/intersection/test-utils.d.ts +1 -1
  182. package/hooks/intersection/test-utils.js +2 -1
  183. package/hooks/styles.d.ts +6 -0
  184. package/hooks/styles.js +26 -0
  185. package/info-text/index.d.ts +23 -0
  186. package/info-text/index.js +60 -0
  187. package/info-text/info-text.module.scss +28 -0
  188. package/input/index.d.ts +32 -0
  189. package/input/index.js +96 -0
  190. package/input/input.module.scss +20 -0
  191. package/input/utils.d.ts +36 -0
  192. package/input/utils.js +71 -0
  193. package/layout/index.d.ts +6 -11
  194. package/layout/index.js +6 -60
  195. package/layout/layout.d.ts +10 -0
  196. package/layout/layout.js +32 -0
  197. package/layout/layout.module.scss +33 -26
  198. package/layout/legacy.d.ts +15 -0
  199. package/layout/legacy.js +68 -0
  200. package/layout/legacy.module.scss +49 -0
  201. package/layout/types.d.ts +6 -0
  202. package/layout/types.js +2 -0
  203. package/link/index.d.ts +4 -1
  204. package/link/index.js +2 -2
  205. package/link/link.module.scss +10 -0
  206. package/loading-overlay/index.d.ts +1 -0
  207. package/loading-overlay/index.js +1 -0
  208. package/masked-field/index.d.ts +1 -0
  209. package/masked-field/index.js +1 -0
  210. package/masked-input/hook.d.ts +8 -0
  211. package/masked-input/hook.js +72 -0
  212. package/masked-input/index.d.ts +5 -0
  213. package/masked-input/index.js +7 -0
  214. package/masked-input/masked-input.d.ts +8 -0
  215. package/masked-input/masked-input.js +73 -0
  216. package/masked-input/types.d.ts +51 -0
  217. package/masked-input/types.js +2 -0
  218. package/masked-input/utils.d.ts +15 -0
  219. package/masked-input/utils.js +49 -0
  220. package/modal/index.d.ts +10 -12
  221. package/modal/index.js +27 -64
  222. package/modal/modal.module.scss +98 -55
  223. package/modal/slots.d.ts +13 -10
  224. package/modal/slots.js +30 -28
  225. package/modal/utils.d.ts +8 -10
  226. package/modal/utils.js +2 -26
  227. package/modal-overlay/index.d.ts +13 -0
  228. package/modal-overlay/index.js +60 -0
  229. package/modal-overlay/modal-overlay-util.scss +1 -0
  230. package/modal-overlay/modal-overlay.module.scss +14 -0
  231. package/modal-overlay/utils.d.ts +14 -0
  232. package/modal-overlay/utils.js +32 -0
  233. package/package.json +49 -41
  234. package/pagination/utils.d.ts +2 -2
  235. package/panel/index.d.ts +27 -13
  236. package/panel/index.js +43 -9
  237. package/panel/panel.module.scss +49 -8
  238. package/phone-input/index.d.ts +4 -28
  239. package/phone-input/index.js +2 -121
  240. package/phone-input/phone-input.d.ts +8 -0
  241. package/phone-input/phone-input.js +133 -0
  242. package/phone-input/phone-input.module.scss +8 -32
  243. package/phone-input/presets.d.ts +21 -22
  244. package/phone-input/presets.js +1 -2
  245. package/phone-input/types.d.ts +6 -0
  246. package/phone-input/types.js +2 -0
  247. package/phone-input/utils.d.ts +30 -1
  248. package/phone-input/utils.js +52 -3
  249. package/phone-input-deprecated/index.d.ts +29 -0
  250. package/phone-input-deprecated/index.js +124 -0
  251. package/phone-input-deprecated/phone-input.module.scss +41 -0
  252. package/plate/index.d.ts +3 -3
  253. package/plate/index.js +2 -2
  254. package/plate/plate.module.scss +3 -0
  255. package/popup/index.d.ts +5 -0
  256. package/popup/index.js +12 -0
  257. package/popup/popup-view.d.ts +14 -0
  258. package/popup/popup-view.js +35 -0
  259. package/popup/popup-view.module.scss +40 -0
  260. package/popup/popup.d.ts +17 -0
  261. package/popup/popup.js +73 -0
  262. package/popup/utils.d.ts +38 -0
  263. package/popup/utils.js +83 -0
  264. package/price/index.d.ts +1 -1
  265. package/price/index.js +3 -3
  266. package/price/utils.d.ts +5 -5
  267. package/price/utils.js +33 -23
  268. package/radio-button/index.d.ts +10 -0
  269. package/radio-button/index.js +33 -0
  270. package/radio-button/radio-button.module.scss +46 -0
  271. package/rating/index.d.ts +2 -1
  272. package/rating/types.d.ts +1 -1
  273. package/readme.md +34 -41
  274. package/screen/index.d.ts +4 -2
  275. package/screen/index.js +34 -3
  276. package/screen/screen.module.scss +0 -2
  277. package/screen/slots.d.ts +2 -8
  278. package/screen/slots.js +8 -9
  279. package/screen/utils.d.ts +2 -1
  280. package/select/index.d.ts +2 -33
  281. package/select/index.js +3 -109
  282. package/select/parts/block.d.ts +8 -0
  283. package/select/parts/block.js +70 -0
  284. package/select/parts/block.module.scss +3 -0
  285. package/select/parts/button.d.ts +8 -0
  286. package/select/parts/button.js +69 -0
  287. package/select/parts/menu.d.ts +8 -0
  288. package/select/parts/menu.js +105 -0
  289. package/select/parts/menu.module.scss +4 -0
  290. package/select/select.d.ts +14 -0
  291. package/select/select.js +145 -0
  292. package/select/types.d.ts +55 -0
  293. package/select/types.js +2 -0
  294. package/select/utils.d.ts +3 -0
  295. package/select/utils.js +13 -0
  296. package/select-deprecated/index.d.ts +34 -0
  297. package/select-deprecated/index.js +112 -0
  298. package/{select → select-deprecated}/select.module.scss +0 -0
  299. package/shadows.scss +18 -0
  300. package/side-page/index.d.ts +11 -26
  301. package/side-page/index.js +21 -26
  302. package/side-page/side-page.module.scss +35 -29
  303. package/side-page/slots.d.ts +12 -20
  304. package/side-page/slots.js +16 -28
  305. package/spinner/index.d.ts +18 -6
  306. package/spinner/index.js +25 -12
  307. package/spinner/spinner.module.scss +8 -0
  308. package/stepper/index.d.ts +18 -10
  309. package/stepper/index.js +17 -8
  310. package/stepper/stepper.module.scss +14 -15
  311. package/styling/fonts.d.ts +3 -3
  312. package/switcher-row/index.d.ts +42 -0
  313. package/switcher-row/index.js +59 -0
  314. package/switcher-row/switcher-row.module.scss +55 -0
  315. package/text/index.d.ts +1 -1
  316. package/text-button/index.d.ts +42 -0
  317. package/text-button/index.js +46 -0
  318. package/text-button/text-button.module.scss +99 -0
  319. package/text-field/index.d.ts +7 -6
  320. package/text-field/index.js +3 -2
  321. package/textarea/index.d.ts +21 -0
  322. package/textarea/index.js +85 -0
  323. package/textarea/textarea.module.scss +15 -0
  324. package/toggle/index.d.ts +3 -3
  325. package/toggle/toggle.module.scss +17 -8
  326. package/tooltip/index.d.ts +1 -0
  327. package/tooltip/index.js +1 -0
  328. package/top-bar/index.d.ts +3 -40
  329. package/top-bar/index.js +4 -60
  330. package/top-bar/top-bar-util.scss +29 -0
  331. package/top-bar/top-bar.d.ts +9 -0
  332. package/top-bar/top-bar.js +101 -0
  333. package/top-bar/top-bar.module.scss +129 -67
  334. package/top-bar/types.d.ts +31 -0
  335. package/top-bar/types.js +2 -0
  336. package/top-bar/utils.d.ts +14 -0
  337. package/top-bar/utils.js +56 -0
  338. package/touch-slider/index.d.ts +1 -0
  339. package/touch-slider/index.js +3 -2
  340. package/types.d.ts +18 -0
  341. package/types.js +2 -0
  342. package/unknown-content/index.d.ts +3 -3
  343. package/unknown-content/index.js +3 -3
  344. package/unknown-content/unknown-content.module.scss +16 -12
  345. package/upload-area/index.d.ts +2 -0
  346. package/upload-area/index.js +5 -0
  347. package/upload-area/types.d.ts +32 -0
  348. package/upload-area/types.js +2 -0
  349. package/upload-area/upload-area-util.scss +17 -0
  350. package/upload-area/upload-area.d.ts +8 -0
  351. package/upload-area/upload-area.js +105 -0
  352. package/upload-area/upload-area.module.scss +78 -0
  353. package/{upload → upload-area}/upload.svg +0 -0
  354. package/upload-area/utils.d.ts +17 -0
  355. package/upload-area/utils.js +48 -0
  356. package/utils.scss +74 -1
  357. package/with-hint/index.d.ts +3 -2
  358. package/with-hint/index.js +1 -0
  359. package/with-hint/positioning-hint.d.ts +1 -1
  360. package/with-hint/positioning-hint.js +2 -2
  361. package/with-tooltip/index.d.ts +2 -1
  362. package/with-tooltip/index.js +1 -0
  363. package/with-tooltip/utils.d.ts +2 -2
  364. package/_internal/body-scroll.d.ts +0 -23
  365. package/_internal/body-scroll.js +0 -41
  366. package/_internal/checkbox/index.d.ts +0 -5
  367. package/constants.d.ts +0 -6
  368. package/constants.js +0 -9
  369. package/nav-bar/index.d.ts +0 -46
  370. package/nav-bar/index.js +0 -76
  371. package/nav-bar/nav-bar.module.scss +0 -95
  372. package/upload/area.d.ts +0 -25
  373. package/upload/area.js +0 -65
  374. package/upload/area.module.scss +0 -44
  375. package/upload/utils.d.ts +0 -29
  376. package/upload/utils.js +0 -45
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.SelectTextButton = void 0;
41
+ const react_1 = __importStar(require("react"));
42
+ const text_button_1 = require("../../text-button");
43
+ const utils_1 = require("../utils");
44
+ const up_1 = __importDefault(require("@sima-land/ui-quarks/icons/16x16/Stroked/Arrows/up"));
45
+ const down_1 = __importDefault(require("@sima-land/ui-quarks/icons/16x16/Stroked/Arrows/down"));
46
+ /**
47
+ * Компонент открывашки в виде текстовой кнопки.
48
+ * @param props Свойства.
49
+ * @return Элемент.
50
+ */
51
+ function SelectTextButton(_a) {
52
+ var { buttonRef: buttonRefProp, children, onKeyDown, onMouseDown } = _a, props = __rest(_a, ["buttonRef", "children", "onKeyDown", "onMouseDown"]);
53
+ const buttonRef = (0, react_1.useRef)(null);
54
+ const binding = (0, react_1.useContext)(utils_1.SelectContext);
55
+ const ArrowSVG = binding.opened ? up_1.default : down_1.default;
56
+ (0, react_1.useImperativeHandle)(buttonRefProp, () => buttonRef.current);
57
+ (0, react_1.useImperativeHandle)(binding.anchorRef, () => buttonRef.current);
58
+ (0, react_1.useImperativeHandle)(binding.openerRef, () => buttonRef.current);
59
+ return (react_1.default.createElement(text_button_1.TextButton, Object.assign({ iconGutter: 4, endIcon: ArrowSVG }, props, { as: 'button', onMouseDown: event => {
60
+ var _a;
61
+ (_a = binding.onMouseDown) === null || _a === void 0 ? void 0 : _a.call(binding, event);
62
+ onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(event);
63
+ }, onKeyDown: event => {
64
+ var _a;
65
+ (_a = binding.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(binding, event);
66
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
67
+ }, disabled: binding.disabled, buttonRef: buttonRef, role: 'combobox' }), children !== null && children !== void 0 ? children : (binding.value || binding.label)));
68
+ }
69
+ exports.SelectTextButton = SelectTextButton;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { SelectMenuProps } from '../types';
3
+ /**
4
+ * Меню выбора для компонента Select.
5
+ * @param props Свойства.
6
+ * @return Элемент.
7
+ */
8
+ export declare function SelectMenu({ loading, children, menuRef, value, onKeyDown, onItemSelect, ...restProps }: SelectMenuProps): JSX.Element;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.SelectMenu = void 0;
41
+ const react_1 = __importStar(require("react"));
42
+ const dropdown_1 = require("../../dropdown");
43
+ const dropdown_item_1 = require("../../dropdown-item");
44
+ const utils_1 = require("../../dropdown-item/utils");
45
+ const dropdown_loading_1 = require("../../_internal/dropdown-loading");
46
+ const classnames_1 = __importDefault(require("classnames"));
47
+ const menu_module_scss_1 = __importDefault(require("./menu.module.scss"));
48
+ const MenuItemAttr = {
49
+ name: 'data-select-role',
50
+ value: 'option',
51
+ };
52
+ /**
53
+ * Меню выбора для компонента Select.
54
+ * @param props Свойства.
55
+ * @return Элемент.
56
+ */
57
+ function SelectMenu(_a) {
58
+ var { loading, children, menuRef, value, onKeyDown, onItemSelect } = _a, restProps = __rest(_a, ["loading", "children", "menuRef", "value", "onKeyDown", "onItemSelect"]);
59
+ const ref = (0, react_1.useRef)(null);
60
+ const osComponentRef = (0, react_1.useRef)(null);
61
+ const [activeIndex, setActiveIndex] = (0, react_1.useState)(-1);
62
+ const items = react_1.Children.toArray(children).filter(utils_1.DropdownItemUtils.is);
63
+ (0, react_1.useImperativeHandle)(menuRef, () => ref.current);
64
+ // прокрутка до элемента списка
65
+ (0, react_1.useEffect)(() => {
66
+ var _a, _b;
67
+ const menu = ref.current;
68
+ const itemSelector = `[${MenuItemAttr.name}="${MenuItemAttr.value}"]`;
69
+ const targetItem = menu === null || menu === void 0 ? void 0 : menu.querySelectorAll(itemSelector)[activeIndex];
70
+ if (targetItem instanceof HTMLElement) {
71
+ (_b = (_a = osComponentRef.current) === null || _a === void 0 ? void 0 : _a.osInstance()) === null || _b === void 0 ? void 0 : _b.scroll({
72
+ el: targetItem,
73
+ scroll: { y: 'ifneeded' },
74
+ });
75
+ }
76
+ }, [activeIndex]);
77
+ const handleMenuKeyDown = (0, react_1.useCallback)(event => {
78
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
79
+ switch (event.code) {
80
+ case 'Enter': {
81
+ const item = items[activeIndex];
82
+ if (item) {
83
+ onItemSelect === null || onItemSelect === void 0 ? void 0 : onItemSelect(item);
84
+ }
85
+ setActiveIndex(-1);
86
+ break;
87
+ }
88
+ case 'ArrowUp':
89
+ setActiveIndex(n => { var _a; return (_a = utils_1.DropdownItemUtils.asLoopedIterator(items, n).prev()) !== null && _a !== void 0 ? _a : -1; });
90
+ break;
91
+ case 'ArrowDown':
92
+ setActiveIndex(n => { var _a; return (_a = utils_1.DropdownItemUtils.asLoopedIterator(items, n).next()) !== null && _a !== void 0 ? _a : -1; });
93
+ break;
94
+ }
95
+ }, [items, activeIndex, onKeyDown]);
96
+ const handleItemClick = (0, react_1.useCallback)((item) => item.props.disabled
97
+ ? undefined
98
+ : event => {
99
+ var _a, _b;
100
+ (_b = (_a = item.props).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, event);
101
+ onItemSelect === null || onItemSelect === void 0 ? void 0 : onItemSelect(item);
102
+ }, [onItemSelect]);
103
+ return (react_1.default.createElement(dropdown_1.Dropdown, Object.assign({}, restProps, { ref: ref, tabIndex: 0, role: 'listbox', onKeyDown: handleMenuKeyDown, className: (0, classnames_1.default)(menu_module_scss_1.default.menu, restProps.className), customScrollbarProps: { osComponentRef } }), loading ? (react_1.default.createElement(dropdown_loading_1.DropdownLoading, { "data-testid": 'select:loading-area' })) : (items.map((item, index) => (react_1.default.createElement(dropdown_item_1.DropdownItem, Object.assign({ checked: activeIndex === index, selected: value === utils_1.DropdownItemUtils.getValue(item) }, item.props, { key: index, role: 'option', onClick: handleItemClick(item) }, { [MenuItemAttr.name]: MenuItemAttr.value })))))));
104
+ }
105
+ exports.SelectMenu = SelectMenu;
@@ -0,0 +1,4 @@
1
+ .menu {
2
+ // @todo LayerProvider
3
+ z-index: 2;
4
+ }
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { SelectProps } from './types';
3
+ import { SelectFieldBlock } from './parts/block';
4
+ import { SelectTextButton } from './parts/button';
5
+ /**
6
+ * Поле выбора из списка.
7
+ * @param props Свойства.
8
+ * @return Элемент.
9
+ */
10
+ export declare function Select({ children, disabled, failed, loading, onValueChange, onMenuToggle, value, defaultValue, label, opener, renderValue, dropdownProps, }: SelectProps): JSX.Element;
11
+ export declare namespace Select {
12
+ var FieldBlock: typeof SelectFieldBlock;
13
+ var TextButton: typeof SelectTextButton;
14
+ }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.Select = void 0;
38
+ const react_1 = __importStar(require("react"));
39
+ const utils_1 = require("./utils");
40
+ const identity_1 = require("../hooks/identity");
41
+ const utils_2 = require("../dropdown-item/utils");
42
+ const react_2 = require("@floating-ui/react");
43
+ const menu_1 = require("./parts/menu");
44
+ const block_1 = require("./parts/block");
45
+ const button_1 = require("./parts/button");
46
+ const utils_3 = require("../dropdown/utils");
47
+ /**
48
+ * Поле выбора из списка.
49
+ * @param props Свойства.
50
+ * @return Элемент.
51
+ */
52
+ function Select({ children, disabled, failed, loading, onValueChange, onMenuToggle, value, defaultValue, label, opener = react_1.default.createElement(block_1.SelectFieldBlock, null), renderValue = v => v, dropdownProps, }) {
53
+ // @todo по аналогии с <select /> надо проверять, есть ли значение в списке переданных
54
+ const [initialValue] = (0, react_1.useState)(() => { var _a; return (_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : ''; });
55
+ const [currentValue, setCurrentValue] = (0, react_1.useState)(initialValue);
56
+ const [needMenu, setNeedMenu] = (0, react_1.useState)(false);
57
+ const [menuElement, setMenuElement] = (0, react_1.useState)(null);
58
+ const [menuFocused, setMenuFocused] = (0, react_1.useState)(false);
59
+ const onMenuToggleRef = (0, identity_1.useIdentityRef)(onMenuToggle);
60
+ const openerRef = (0, react_1.useRef)(null);
61
+ const menuShown = needMenu && menuElement !== null;
62
+ const _a = (0, react_2.useFloating)(Object.assign({ open: needMenu }, (0, utils_3.dropdownFloatingConfig)())), { refs, isPositioned } = _a, floating = __rest(_a, ["refs", "isPositioned"]);
63
+ (0, react_1.useImperativeHandle)(refs.setFloating, () => menuElement, [menuElement]);
64
+ (0, react_1.useEffect)(() => {
65
+ if (typeof value !== 'undefined') {
66
+ // @todo по аналогии с <select /> надо проверять, есть ли значение в списке переданных
67
+ setCurrentValue(value);
68
+ }
69
+ }, [value]);
70
+ (0, react_1.useEffect)(() => {
71
+ var _a;
72
+ if (disabled) {
73
+ setNeedMenu(false);
74
+ }
75
+ if (!disabled && menuElement && isPositioned) {
76
+ menuElement.focus();
77
+ }
78
+ // @todo menuShown в зависимости или useCallback
79
+ (_a = onMenuToggleRef.current) === null || _a === void 0 ? void 0 : _a.call(onMenuToggleRef, { opened: menuShown });
80
+ }, [disabled, menuElement, isPositioned]);
81
+ const openerBinding = {
82
+ label,
83
+ anchorRef: refs.setReference,
84
+ openerRef,
85
+ value: renderValue(currentValue),
86
+ opened: menuShown,
87
+ failed,
88
+ disabled,
89
+ menuFocused,
90
+ onMouseDown: event => {
91
+ if (!disabled) {
92
+ !menuElement && event.preventDefault();
93
+ setNeedMenu(a => !a);
94
+ }
95
+ },
96
+ onKeyDown: e => {
97
+ if (!disabled) {
98
+ switch (e.code) {
99
+ case 'Enter':
100
+ case 'ArrowUp':
101
+ case 'ArrowDown':
102
+ setNeedMenu(true);
103
+ break;
104
+ }
105
+ }
106
+ },
107
+ };
108
+ const floatingStyle = (0, utils_3.useDropdownFloatingStyle)(Object.assign({ refs }, floating));
109
+ const menuProps = Object.assign(Object.assign({}, dropdownProps), { style: Object.assign(Object.assign({}, dropdownProps === null || dropdownProps === void 0 ? void 0 : dropdownProps.style), floatingStyle), menuRef: setMenuElement, value,
110
+ loading, onFocus: () => {
111
+ setMenuFocused(true);
112
+ }, onBlur: () => {
113
+ setNeedMenu(false);
114
+ setMenuFocused(false);
115
+ }, onKeyDown: event => {
116
+ var _a, _b;
117
+ switch (event.code) {
118
+ case 'ArrowUp':
119
+ case 'ArrowDown':
120
+ event.preventDefault(); // предотвращаем прокрутку страницы
121
+ break;
122
+ case 'Enter':
123
+ case 'Escape':
124
+ (_a = openerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
125
+ break;
126
+ case 'Tab':
127
+ event.preventDefault(); // предотвращаем фокус на следующем элементе
128
+ (_b = openerRef.current) === null || _b === void 0 ? void 0 : _b.focus();
129
+ break;
130
+ }
131
+ }, onItemSelect: item => {
132
+ var _a;
133
+ const nextValue = utils_2.DropdownItemUtils.getValue(item);
134
+ setCurrentValue(nextValue);
135
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(nextValue);
136
+ setNeedMenu(false);
137
+ (_a = openerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
138
+ } });
139
+ return (react_1.default.createElement(react_1.default.Fragment, null,
140
+ react_1.default.createElement(utils_1.SelectContext.Provider, { value: openerBinding }, (0, react_1.isValidElement)(opener) && opener),
141
+ react_1.default.createElement(react_2.FloatingPortal, { id: '' }, needMenu && react_1.default.createElement(menu_1.SelectMenu, Object.assign({}, menuProps), children))));
142
+ }
143
+ exports.Select = Select;
144
+ Select.FieldBlock = block_1.SelectFieldBlock;
145
+ Select.TextButton = button_1.SelectTextButton;
@@ -0,0 +1,55 @@
1
+ import type { FocusEventHandler, HTMLAttributes, ReactElement, ReactNode, Ref } from 'react';
2
+ import type { DropdownProps } from '../dropdown';
3
+ import type { DropdownItemElement } from '../dropdown-item/types';
4
+ import type { FieldBlockStyle } from '../field-block';
5
+ export interface SelectStyle extends FieldBlockStyle {
6
+ '--dropdown-width'?: string | number;
7
+ }
8
+ export interface SelectOpenerBinding {
9
+ label?: string;
10
+ failed?: boolean;
11
+ disabled?: boolean;
12
+ value: ReactNode;
13
+ opened: boolean;
14
+ menuFocused: boolean;
15
+ openerRef: Ref<HTMLElement | null>;
16
+ anchorRef: Ref<HTMLElement | null>;
17
+ onMouseDown: Required<HTMLAttributes<HTMLElement>>['onMouseDown'];
18
+ onKeyDown: Required<HTMLAttributes<HTMLElement>>['onKeyDown'];
19
+ }
20
+ export interface SelectMenuProps extends DropdownProps {
21
+ menuRef?: Ref<HTMLDivElement | null>;
22
+ value?: ReactNode;
23
+ children?: ReactNode;
24
+ loading?: boolean;
25
+ onBlur?: FocusEventHandler;
26
+ onItemSelect?: (item: DropdownItemElement) => void;
27
+ }
28
+ export interface SelectProps {
29
+ /** Опции. */
30
+ children?: ReactNode;
31
+ /** Отключенное состояние. */
32
+ disabled?: boolean;
33
+ /** Ошибочное состояние. */
34
+ failed?: boolean;
35
+ /** Состояние загрузки опций. */
36
+ loading?: boolean;
37
+ /** Сработает при выборе опции. */
38
+ onValueChange?: (value: string) => void;
39
+ /** Сработает при открытии/закрытии меню. */
40
+ onMenuToggle?: (state: {
41
+ opened: boolean;
42
+ }) => void;
43
+ /** Значение, выводимое в качестве выбранного. При отсутствии будет выведено значение defaultValue. */
44
+ value?: string;
45
+ /** Значение по умолчанию. При отсутствии будет выведено значение label. */
46
+ defaultValue?: string;
47
+ /** Получив значение являющееся текущим или пустую строку, должна вернуть ReactNode. */
48
+ renderValue?: (value: string) => ReactNode;
49
+ /** Ярлык. */
50
+ label?: string;
51
+ /** Открывающий элемент. */
52
+ opener?: ReactElement;
53
+ /** Опции Dropdown. */
54
+ dropdownProps?: Pick<DropdownProps, 'className' | 'style'>;
55
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { SelectOpenerBinding } from './types';
3
+ export declare const SelectContext: import("react").Context<SelectOpenerBinding>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectContext = void 0;
4
+ const react_1 = require("react");
5
+ exports.SelectContext = (0, react_1.createContext)({
6
+ value: '',
7
+ opened: false,
8
+ menuFocused: false,
9
+ openerRef: (0, react_1.createRef)(),
10
+ anchorRef: (0, react_1.createRef)(),
11
+ onMouseDown: () => void 0,
12
+ onKeyDown: () => void 0,
13
+ });
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { TextFieldProps } from '../text-field';
3
+ type Size = 's' | 'm' | 'l' | 'xl';
4
+ export interface SelectProps extends Omit<TextFieldProps, 'style' | 'endAdornment'> {
5
+ /** Нужно ли выводить состояние загрузки списка. */
6
+ loading?: boolean;
7
+ /** Сработает при открытии/закрытии меню. */
8
+ onMenuToggle?: (opened: boolean) => void;
9
+ /** Сработает при выборе. */
10
+ onSelect?: (option: any) => void;
11
+ /** Список опций. */
12
+ options: any[];
13
+ /** Размер для DropdownItem. */
14
+ optionSize?: Size;
15
+ /** Вернет содержимое опции. */
16
+ renderOption?: (option: any) => React.ReactNode;
17
+ /** Стили. */
18
+ style?: React.CSSProperties;
19
+ endAdornment?: TextFieldProps['endAdornment'] | ((opened: boolean) => React.ReactNode);
20
+ }
21
+ /**
22
+ * Выводит иконку стрелки для поля Select по умолчанию.
23
+ * @param opened Открыт ли список опций.
24
+ * @return Элемент.
25
+ */
26
+ export declare const renderDefaultArrow: (opened: boolean) => JSX.Element;
27
+ /**
28
+ * Поле выбора из списка.
29
+ * @deprecated Следует использовать новую реализацию из "@sima-land/ui-nucleons/select".
30
+ * @param props Свойства.
31
+ * @return Элемент.
32
+ */
33
+ export declare const Select: ({ options, optionSize, onSelect, style, className, label, onClick, value, loading, onMenuToggle, renderOption, "data-testid": dataTestId, size, endAdornment, ...restProps }: SelectProps) => JSX.Element;
34
+ export {};
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.Select = exports.renderDefaultArrow = void 0;
41
+ const react_1 = __importStar(require("react"));
42
+ const dropdown_1 = require("../dropdown");
43
+ const dropdown_item_1 = require("../dropdown-item");
44
+ const text_field_1 = require("../text-field");
45
+ const dropdown_2 = require("../_internal/utils/dropdown");
46
+ const bind_1 = __importDefault(require("classnames/bind"));
47
+ const down_1 = __importDefault(require("@sima-land/ui-quarks/icons/16x16/Stroked/Arrows/down"));
48
+ const up_1 = __importDefault(require("@sima-land/ui-quarks/icons/16x16/Stroked/Arrows/up"));
49
+ const select_module_scss_1 = __importDefault(require("./select.module.scss"));
50
+ const colors_1 = require("../colors");
51
+ const dropdown_loading_1 = require("../_internal/dropdown-loading");
52
+ const hooks_1 = require("../hooks");
53
+ const cx = bind_1.default.bind(select_module_scss_1.default);
54
+ /**
55
+ * Выводит иконку стрелки для поля Select по умолчанию.
56
+ * @param opened Открыт ли список опций.
57
+ * @return Элемент.
58
+ */
59
+ const renderDefaultArrow = (opened) => {
60
+ const ArrowSVG = opened ? up_1.default : down_1.default;
61
+ return react_1.default.createElement(ArrowSVG, { fill: colors_1.COLORS.get('basic-gray38') });
62
+ };
63
+ exports.renderDefaultArrow = renderDefaultArrow;
64
+ /**
65
+ * Поле выбора из списка.
66
+ * @deprecated Следует использовать новую реализацию из "@sima-land/ui-nucleons/select".
67
+ * @param props Свойства.
68
+ * @return Элемент.
69
+ */
70
+ const Select = (_a) => {
71
+ var { options, optionSize, onSelect, style, className, label, onClick, value, loading, onMenuToggle, renderOption = String, 'data-testid': dataTestId, size, endAdornment = exports.renderDefaultArrow } = _a, restProps = __rest(_a, ["options", "optionSize", "onSelect", "style", "className", "label", "onClick", "value", "loading", "onMenuToggle", "renderOption", 'data-testid', "size", "endAdornment"]);
72
+ const rootRef = (0, react_1.useRef)(null);
73
+ const fieldRef = (0, react_1.useRef)(null);
74
+ const menuRef = (0, react_1.useRef)(null);
75
+ const [opened, toggleMenu] = (0, react_1.useState)(false);
76
+ (0, react_1.useEffect)(() => {
77
+ opened && menuRef.current && menuRef.current.focus();
78
+ onMenuToggle && onMenuToggle(opened);
79
+ }, [opened]);
80
+ (0, hooks_1.useOutsideClick)(rootRef, toggleMenu.bind(null, false));
81
+ return (react_1.default.createElement("div", { ref: rootRef, style: style, className: cx('root', className), "data-testid": dataTestId },
82
+ react_1.default.createElement(text_field_1.TextField, Object.assign({}, restProps, { size: size, blockProps: {
83
+ ref: fieldRef,
84
+ tabIndex: 0,
85
+ onMouseDown: () => {
86
+ toggleMenu(a => !a);
87
+ },
88
+ onKeyDown: e => {
89
+ e.key === 'Enter' && toggleMenu(true);
90
+ },
91
+ }, onClick: e => {
92
+ e.preventDefault();
93
+ onClick && onClick(e);
94
+ }, className: select_module_scss_1.default.field, "data-testid": 'select:field', label: label, focused: opened, baseInputProps: {
95
+ // чтобы не ловить фокус на поле
96
+ style: { pointerEvents: 'none' },
97
+ tabIndex: -1,
98
+ }, value: value, multiline: false, variant: 'desktop', readOnly: true, endAdornment: typeof endAdornment === 'function' ? endAdornment(opened) : endAdornment })),
99
+ opened && (loading || options.length > 0) && (react_1.default.createElement(dropdown_1.Dropdown, Object.assign({}, (0, dropdown_2.placeDropdown)(size), { ref: menuRef, "data-testid": 'select:menu', role: 'menu', tabIndex: -1, className: cx('menu'), onKeyDown: event => {
100
+ if (event.key === 'Enter') {
101
+ toggleMenu(false);
102
+ fieldRef.current && fieldRef.current.focus();
103
+ }
104
+ }, onBlur: () => {
105
+ toggleMenu(false);
106
+ fieldRef.current && fieldRef.current.focus();
107
+ } }), loading ? (react_1.default.createElement(dropdown_loading_1.DropdownLoading, { "data-testid": 'select:loading-area' })) : (options.map((option, index) => (react_1.default.createElement(dropdown_item_1.DropdownItem, { size: optionSize, key: index, role: 'menuitem', onClick: () => {
108
+ toggleMenu(false);
109
+ onSelect && onSelect(option);
110
+ } }, renderOption(option)))))))));
111
+ };
112
+ exports.Select = Select;
File without changes
package/shadows.scss ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Формирует тень по дизайн-гайдам.
3
+ */
4
+ @mixin box-shadow($key) {
5
+ @if $key == 'z1' {
6
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.04), 0 2px 4px rgba(0, 0, 0, 0.08);
7
+ } @else if $key == 'z2' {
8
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.04), 0 4px 8px rgba(0, 0, 0, 0.1);
9
+ } @else if $key == 'z2-straight' {
10
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.12);
11
+ } @else if $key == 'z3' {
12
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08), 0 0 4px rgba(0, 0, 0, 0.04);
13
+ } @else if $key == 'z4' {
14
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.04), 0 12px 30px rgba(0, 0, 0, 0.1);
15
+ } @else {
16
+ @warn 'No such shadow `#{$key}`.';
17
+ }
18
+ }
@@ -1,7 +1,8 @@
1
- import React from 'react';
2
- import { WithBodyScrollLock } from '../_internal/body-scroll';
1
+ import { ReactNode } from 'react';
2
+ import { WithPageScrollLock } from '../_internal/page-scroll-lock';
3
+ import { SidePageBody, SidePageFooter, SidePageHeader } from './slots';
3
4
  import { CSSTransitionProps } from 'react-transition-group/CSSTransition';
4
- export interface SidePageProps extends WithBodyScrollLock {
5
+ export interface SidePageProps extends WithPageScrollLock {
5
6
  /** Нужно ли показать компонент. */
6
7
  shown?: boolean;
7
8
  /** Нужно ли использовать анимации при открытии/закрытии. */
@@ -9,7 +10,7 @@ export interface SidePageProps extends WithBodyScrollLock {
9
10
  /** Ширина. */
10
11
  size?: 's' | 'm';
11
12
  /** Содержимое. */
12
- children?: React.ReactNode;
13
+ children?: ReactNode;
13
14
  /** Сработает при закрытии. */
14
15
  onClose?: () => void;
15
16
  /** Обработчик "onEntering" для CSSTransition. */
@@ -30,25 +31,9 @@ export interface SidePageProps extends WithBodyScrollLock {
30
31
  * @param props Свойства.
31
32
  * @return Элемент.
32
33
  */
33
- export declare const SidePage: {
34
- ({ shown, withTransitions, onEnter, onEntering, onEntered, onExit, onExiting, onExited, ...restProps }: SidePageProps): JSX.Element;
35
- Header: {
36
- ({ onBack, onClose, ...topBarProps }: import("../top-bar").TopBarProps & {
37
- onBack?: (() => void) | undefined;
38
- onClose?: (() => void) | undefined;
39
- }): JSX.Element;
40
- displayName: string;
41
- };
42
- Body: {
43
- ({ children }: {
44
- children?: React.ReactNode;
45
- }): JSX.Element;
46
- displayName: string;
47
- };
48
- Footer: {
49
- ({ padded, ...props }: import("../bottom-bar").BottomBarProps & {
50
- padded?: boolean | undefined;
51
- }): JSX.Element;
52
- displayName: string;
53
- };
54
- };
34
+ export declare function SidePage({ shown, withTransitions, onEnter, onEntering, onEntered, onExit, onExiting, onExited, ...restProps }: SidePageProps): JSX.Element;
35
+ export declare namespace SidePage {
36
+ var Header: typeof SidePageHeader;
37
+ var Body: typeof SidePageBody;
38
+ var Footer: typeof SidePageFooter;
39
+ }