@via-profit/ui-kit 0.1.8 → 0.2.1-alpha.3

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 (157) hide show
  1. package/Accordion/index.d.ts +4 -4
  2. package/Autocomplete/AutocompleteContainer.d.ts +34 -7
  3. package/Autocomplete/AutocompleteContainer.js +28 -24
  4. package/Autocomplete/AutocompleteItem.d.ts +1 -1
  5. package/Autocomplete/AutocompleteTextField.d.ts +3 -0
  6. package/Autocomplete/AutocompleteTextField.js +63 -1
  7. package/Autocomplete/OverrideMenuList.d.ts +4 -0
  8. package/Autocomplete/OverrideMenuList.js +39 -0
  9. package/Autocomplete/context.d.ts +9 -1
  10. package/Autocomplete/context.js +15 -1
  11. package/Autocomplete/index.js +9 -10
  12. package/Autocomplete2/Autocomplete2.d.ts +12 -0
  13. package/Autocomplete2/Autocomplete2.js +83 -0
  14. package/Autocomplete2/Autocomplete2TextField.d.ts +7 -0
  15. package/Autocomplete2/Autocomplete2TextField.js +39 -0
  16. package/Autocomplete2/index.d.ts +2 -0
  17. package/Autocomplete2/index.js +7 -0
  18. package/Avatar/AvatarBase.d.ts +4 -4
  19. package/Avatar/index.js +1 -1
  20. package/Badge/BadgeBase.d.ts +4 -4
  21. package/Badge/BadgeDeleteButton.js +6 -6
  22. package/Badge/BadgeOutlined.js +2 -2
  23. package/Badge/BadgeStandard.js +1 -1
  24. package/Button/ButtonBase.d.ts +3 -3
  25. package/Button/ButtonOutlined.js +1 -1
  26. package/Button/ButtonPlain.js +1 -1
  27. package/Button/ButtonStandard.js +4 -11
  28. package/Calendar/CalendarCell.js +22 -4
  29. package/Calendar/CalendarComponent.d.ts +226 -0
  30. package/Calendar/CalendarComponent.js +572 -0
  31. package/Calendar/CalendarControlButton.js +16 -9
  32. package/Calendar/CalendarDayBadge.js +1 -1
  33. package/Calendar/CalendarEmptyCell.d.ts +2 -2
  34. package/Calendar/CalendarEmptyCell.js +8 -3
  35. package/Calendar/CalendarHeading.js +2 -1
  36. package/Calendar/CalendarMonthCell.js +0 -5
  37. package/Calendar/CalendarSubheading.js +3 -2
  38. package/Calendar/CalendarWeekDayCell.d.ts +10 -0
  39. package/Calendar/CalendarWeekDayCell.js +32 -0
  40. package/Calendar/CalendarWeekDayWeekNumber.d.ts +7 -0
  41. package/Calendar/CalendarWeekDayWeekNumber.js +38 -0
  42. package/Calendar/CalendarWeekRow.d.ts +2 -2
  43. package/Calendar/CalendarWeekRow.js +2 -1
  44. package/Calendar/CalendarWeekRowButton.d.ts +13 -0
  45. package/Calendar/CalendarWeekRowButton.js +31 -0
  46. package/Calendar/CalendarYearCell.js +5 -5
  47. package/Calendar/CalendarYearsSelector.d.ts +39 -1
  48. package/Calendar/CalendarYearsSelector.js +52 -16
  49. package/Calendar/IconChevronDown.d.ts +3 -0
  50. package/Calendar/IconChevronDown.js +31 -0
  51. package/Calendar/index.d.ts +7 -220
  52. package/Calendar/index.js +19 -274
  53. package/Calendar/use-calendar.d.ts +1 -1
  54. package/Calendar/use-calendar.js +102 -155
  55. package/Color/Color.d.ts +138 -0
  56. package/Color/Color.js +324 -0
  57. package/Color/ColorGenerator.d.ts +29 -0
  58. package/Color/ColorGenerator.js +141 -0
  59. package/Color/ColorParser.d.ts +20 -0
  60. package/Color/ColorParser.js +284 -0
  61. package/Color/index.d.ts +4 -122
  62. package/Color/index.js +18 -473
  63. package/DatePicker/index.d.ts +2 -17
  64. package/DatePicker/index.js +47 -61
  65. package/DatePicker/useDatePickerFormat.js +5 -5
  66. package/ErrorBoundary/Fallback.d.ts +3 -0
  67. package/ErrorBoundary/Fallback.js +51 -0
  68. package/ErrorBoundary/RenderError.d.ts +6 -0
  69. package/ErrorBoundary/RenderError.js +80 -0
  70. package/ErrorBoundary/index.d.ts +7 -11
  71. package/ErrorBoundary/index.js +4 -51
  72. package/Highlighted/index.d.ts +3 -3
  73. package/LoadingIndicator/Spinner.d.ts +5 -3
  74. package/LoadingIndicator/Spinner.js +61 -32
  75. package/LoadingIndicator/index.d.ts +3 -3
  76. package/LoadingIndicator/index.js +15 -2
  77. package/MaskedField/index.d.ts +1 -1
  78. package/MaskedField/index.js +11 -10
  79. package/Menu/AutoHeightWrapper.d.ts +6 -0
  80. package/Menu/AutoHeightWrapper.js +43 -0
  81. package/Menu/MeasuredItem.d.ts +10 -0
  82. package/Menu/MeasuredItem.js +51 -0
  83. package/Menu/MenuContainer.d.ts +53 -20
  84. package/Menu/MenuContainer.js +18 -11
  85. package/Menu/MenuItem.d.ts +24 -7
  86. package/Menu/MenuItem.js +13 -6
  87. package/Menu/MenuList.d.ts +4 -2
  88. package/Menu/MenuList.js +26 -6
  89. package/Menu/VirtualizedItem.d.ts +22 -0
  90. package/Menu/VirtualizedItem.js +69 -0
  91. package/Menu/VirtualizedList.d.ts +18 -0
  92. package/Menu/VirtualizedList.js +28 -0
  93. package/Menu/VirtualizedListComponent.d.ts +20 -0
  94. package/Menu/VirtualizedListComponent.js +305 -0
  95. package/Menu/index.d.ts +3 -1
  96. package/Menu/index.js +4 -7
  97. package/Modal/BaseModal/RenderModal.d.ts +3 -3
  98. package/Modal/BaseModal/index.d.ts +3 -3
  99. package/Modal/ConfirmBox/index.d.ts +5 -5
  100. package/Modal/Drawer/index.d.ts +5 -5
  101. package/Modal/MessageBox/index.d.ts +5 -5
  102. package/Popper/Popper.d.ts +148 -0
  103. package/Popper/Popper.js +113 -0
  104. package/Popper/PopperContainer.d.ts +2 -0
  105. package/Popper/PopperContainer.js +3 -6
  106. package/Popper/index.d.ts +5 -22
  107. package/Popper/index.js +18 -264
  108. package/Popper/usePopprer.d.ts +110 -0
  109. package/Popper/usePopprer.js +505 -0
  110. package/Selectbox/SelectboxButton.d.ts +5 -0
  111. package/Selectbox/SelectboxButton.js +48 -8
  112. package/Selectbox/SelectboxButtonWrapper.d.ts +2 -0
  113. package/Selectbox/SelectboxButtonWrapper.js +1 -17
  114. package/Selectbox/SelectboxMenu.d.ts +12 -0
  115. package/Selectbox/SelectboxMenu.js +50 -0
  116. package/Selectbox/index.d.ts +13 -13
  117. package/Selectbox/index.js +115 -97
  118. package/Surface/index.d.ts +5 -5
  119. package/Surface/index.js +1 -1
  120. package/Swiper/Swiper.d.ts +44 -0
  121. package/Swiper/Swiper.js +139 -0
  122. package/Swiper/SwiperContainer.d.ts +7 -0
  123. package/Swiper/SwiperContainer.js +14 -0
  124. package/Swiper/SwiperSlide.d.ts +7 -0
  125. package/Swiper/SwiperSlide.js +55 -0
  126. package/Swiper/SwiperTrack.d.ts +14 -0
  127. package/Swiper/SwiperTrack.js +58 -0
  128. package/Swiper/SwiperWrapper.d.ts +14 -0
  129. package/Swiper/SwiperWrapper.js +60 -0
  130. package/Swiper/index.d.ts +7 -0
  131. package/Swiper/index.js +26 -0
  132. package/Switch/SwitchDot.js +1 -1
  133. package/Switch/SwitchTrack.js +1 -1
  134. package/Switch/index.d.ts +8 -8
  135. package/TextArea/index.d.ts +7 -7
  136. package/TextField/TextFieldContainer.d.ts +2 -2
  137. package/TextField/TextFieldContainer.js +5 -3
  138. package/TextField/TextFieldErrorText.d.ts +2 -2
  139. package/TextField/TextFieldErrorText.js +5 -4
  140. package/TextField/TextFieldIconWrapper.d.ts +3 -3
  141. package/TextField/TextFieldIconWrapper.js +5 -3
  142. package/TextField/TextFieldInput.d.ts +2 -2
  143. package/TextField/TextFieldInput.js +6 -4
  144. package/TextField/TextFieldInputWrapper.d.ts +2 -2
  145. package/TextField/TextFieldInputWrapper.js +5 -3
  146. package/TextField/TextFieldLabel.d.ts +2 -2
  147. package/TextField/TextFieldLabel.js +5 -3
  148. package/TextField/TextFieldLabelAsterisk.d.ts +2 -2
  149. package/TextField/TextFieldLabelAsterisk.js +5 -3
  150. package/TextField/index.d.ts +15 -8
  151. package/TextField/index.js +49 -22
  152. package/ThemeProvider/createTheme.js +2 -2
  153. package/package.json +1 -1
  154. package/Calendar/reducer.d.ts +0 -14
  155. package/Calendar/reducer.js +0 -26
  156. /package/Calendar/{IconChevronRight.d.ts → CalendarIconNext.d.ts} +0 -0
  157. /package/Calendar/{IconChevronRight.js → CalendarIconNext.js} +0 -0
@@ -0,0 +1,305 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importStar(require("react"));
30
+ const MeasuredItem_1 = __importDefault(require("./MeasuredItem"));
31
+ const BLOCK_SIZE = 50;
32
+ function updateHeightWithBlocks(index, newHeight, heightsRef, offsetsRef, blockOffsetsRef, bumpVersion) {
33
+ const heights = heightsRef.current;
34
+ const offsets = offsetsRef.current;
35
+ const blocks = blockOffsetsRef.current;
36
+ const oldHeight = heights[index];
37
+ if (oldHeight == null || oldHeight === newHeight)
38
+ return;
39
+ const diff = newHeight - oldHeight;
40
+ heights[index] = newHeight;
41
+ // обновляем offsets начиная с index+1
42
+ for (let i = index + 1; i < offsets.length; i++) {
43
+ offsets[i] += diff;
44
+ }
45
+ // обновляем блоки, начиная с блока index
46
+ const blockIndex = Math.floor(index / BLOCK_SIZE);
47
+ for (let b = blockIndex + 1; b < blocks.length; b++) {
48
+ blocks[b] += diff;
49
+ }
50
+ // форсим пересчёт totalHeight
51
+ bumpVersion(v => v + 1);
52
+ }
53
+ const VirtualizedListComponent = react_1.default.forwardRef((props, ref) => {
54
+ const { items, height, renderItem, estimatedItemHeight = 40, itemHeight, overscan = 4, scrollToIndex = null, scrollToAlign = 'auto', onEndReached, } = props;
55
+ const containerRef = (0, react_1.useRef)(null);
56
+ const [scrollTop, setScrollTop] = (0, react_1.useState)(0);
57
+ const [renderVersion, setRenderVersion] = (0, react_1.useState)(0);
58
+ const heightsRef = (0, react_1.useRef)([]);
59
+ const offsetsRef = (0, react_1.useRef)([]);
60
+ const blockOffsetsRef = (0, react_1.useRef)([]);
61
+ const isFixed = typeof itemHeight === 'number';
62
+ const onEndReachedRef = react_1.default.useRef(false);
63
+ const threshold = Math.max(300, height * 1.5);
64
+ const animateScrollTop = (0, react_1.useCallback)((to, duration = 300) => {
65
+ const container = containerRef.current;
66
+ if (!container)
67
+ return;
68
+ const start = container.scrollTop;
69
+ const change = to - start;
70
+ const startTime = performance.now();
71
+ const easeOutCubic = (t) => 1 - Math.pow(1 - t, 3);
72
+ const step = (now) => {
73
+ const elapsed = now - startTime;
74
+ const progress = Math.min(1, elapsed / duration);
75
+ const eased = easeOutCubic(progress);
76
+ container.scrollTop = start + change * eased;
77
+ if (progress < 1) {
78
+ requestAnimationFrame(step);
79
+ }
80
+ };
81
+ requestAnimationFrame(step);
82
+ }, []);
83
+ const scrollTo = (0, react_1.useCallback)((index, align = 'auto') => {
84
+ var _a;
85
+ const container = containerRef.current;
86
+ if (!container)
87
+ return;
88
+ const len = items.length;
89
+ if (index < 0 || index >= len)
90
+ return;
91
+ const offsets = offsetsRef.current;
92
+ const heights = heightsRef.current;
93
+ const itemTop = offsets[index];
94
+ const itemHeightValue = (_a = heights[index]) !== null && _a !== void 0 ? _a : estimatedItemHeight;
95
+ const viewportHeight = height;
96
+ const viewportTop = container.scrollTop;
97
+ const viewportBottom = viewportTop + viewportHeight;
98
+ let target = itemTop;
99
+ switch (align) {
100
+ case 'start':
101
+ target = itemTop;
102
+ break;
103
+ case 'center':
104
+ target = itemTop - viewportHeight / 2 + itemHeightValue / 2;
105
+ break;
106
+ case 'end':
107
+ target = itemTop - viewportHeight + itemHeightValue;
108
+ break;
109
+ case 'auto':
110
+ default:
111
+ if (itemTop < viewportTop) {
112
+ target = itemTop; // прокрутить вверх
113
+ }
114
+ else if (itemTop + itemHeightValue > viewportBottom) {
115
+ target = itemTop - viewportHeight + itemHeightValue; // прокрутить вниз
116
+ }
117
+ else {
118
+ return; // уже видно
119
+ }
120
+ break;
121
+ }
122
+ animateScrollTop(Math.max(0, target));
123
+ }, [items.length, estimatedItemHeight, height, animateScrollTop]);
124
+ // scrollToIndex без rAF
125
+ (0, react_1.useLayoutEffect)(() => {
126
+ var _a, _b;
127
+ if (scrollToIndex == null)
128
+ return;
129
+ if (!containerRef.current)
130
+ return;
131
+ const idx = Math.max(0, Math.min(items.length - 1, scrollToIndex));
132
+ const offsets = offsetsRef.current;
133
+ const itemTop = offsets[idx];
134
+ const itemBottom = itemTop + ((_b = (_a = heightsRef.current[idx]) !== null && _a !== void 0 ? _a : itemHeight) !== null && _b !== void 0 ? _b : estimatedItemHeight);
135
+ const viewportTop = containerRef.current.scrollTop;
136
+ const viewportBottom = viewportTop + height;
137
+ let nextScrollTop = viewportTop;
138
+ if (scrollToAlign === 'start') {
139
+ nextScrollTop = itemTop;
140
+ }
141
+ else if (scrollToAlign === 'end') {
142
+ nextScrollTop = itemBottom - height;
143
+ }
144
+ else if (scrollToAlign === 'center') {
145
+ nextScrollTop = itemTop - height / 2 + (itemBottom - itemTop) / 2;
146
+ }
147
+ else {
148
+ // auto
149
+ if (itemTop < viewportTop) {
150
+ nextScrollTop = itemTop;
151
+ }
152
+ else if (itemBottom > viewportBottom) {
153
+ nextScrollTop = itemBottom - height;
154
+ }
155
+ else {
156
+ return;
157
+ }
158
+ }
159
+ containerRef.current.scrollTop = nextScrollTop;
160
+ }, [scrollToIndex, scrollToAlign, items.length, height, itemHeight, estimatedItemHeight]);
161
+ react_1.default.useLayoutEffect(() => {
162
+ const totalHeight = offsetsRef.current[offsetsRef.current.length - 1] +
163
+ heightsRef.current[heightsRef.current.length - 1];
164
+ const viewportBottom = scrollTop + height;
165
+ const isNearEnd = viewportBottom >= totalHeight - threshold;
166
+ if (isNearEnd && !onEndReachedRef.current) {
167
+ onEndReachedRef.current = true;
168
+ onEndReached === null || onEndReached === void 0 ? void 0 : onEndReached();
169
+ }
170
+ if (!isNearEnd) {
171
+ onEndReachedRef.current = false;
172
+ }
173
+ }, [scrollTop, height, items.length, threshold, onEndReached]);
174
+ // ⭐ ИДЕАЛЬНАЯ ИНИЦИАЛИЗАЦИЯ offsets/heights
175
+ // инициализация кэша высот/offsets
176
+ // инициализация кэша высот/offsets
177
+ (0, react_1.useLayoutEffect)(() => {
178
+ var _a;
179
+ const len = items.length;
180
+ const oldLen = heightsRef.current.length;
181
+ if (isFixed) {
182
+ // фиксированная высота — всё просто
183
+ heightsRef.current = new Array(len).fill(itemHeight);
184
+ offsetsRef.current = new Array(len);
185
+ for (let i = 0; i < len; i++) {
186
+ offsetsRef.current[i] = i * itemHeight;
187
+ }
188
+ const blockCount = Math.ceil(len / BLOCK_SIZE);
189
+ blockOffsetsRef.current = new Array(blockCount);
190
+ for (let b = 0; b < blockCount; b++) {
191
+ blockOffsetsRef.current[b] = b * BLOCK_SIZE * itemHeight;
192
+ }
193
+ }
194
+ else {
195
+ // динамическая высота — добавляем только новые элементы
196
+ const heights = heightsRef.current;
197
+ const offsets = offsetsRef.current;
198
+ // список вырос
199
+ if (len > oldLen) {
200
+ // добавляем новые элементы
201
+ for (let i = oldLen; i < len; i++) {
202
+ heights[i] = estimatedItemHeight;
203
+ offsets[i] = i === 0 ? 0 : offsets[i - 1] + heights[i - 1];
204
+ }
205
+ // пересчитываем блоки только для новых блоков
206
+ const blockCount = Math.ceil(len / BLOCK_SIZE);
207
+ const oldBlockCount = blockOffsetsRef.current.length;
208
+ for (let b = oldBlockCount; b < blockCount; b++) {
209
+ const start = b * BLOCK_SIZE;
210
+ blockOffsetsRef.current[b] = (_a = offsets[start]) !== null && _a !== void 0 ? _a : 0;
211
+ }
212
+ }
213
+ }
214
+ // форсим ререндер, чтобы использовать новые offsets
215
+ setRenderVersion(v => v + 1);
216
+ }, [items.length, isFixed, itemHeight, estimatedItemHeight]);
217
+ const onScroll = (0, react_1.useCallback)(() => {
218
+ var _a, _b;
219
+ const top = (_b = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : 0;
220
+ setScrollTop(top);
221
+ }, []);
222
+ // ⭐ Поиск startIndex
223
+ const findStartIndex = (0, react_1.useCallback)((scrollTopValue) => {
224
+ const len = items.length;
225
+ if (len === 0)
226
+ return 0;
227
+ const offsets = offsetsRef.current;
228
+ const blocks = blockOffsetsRef.current;
229
+ if (isFixed) {
230
+ const idx = Math.floor(scrollTopValue / (itemHeight || estimatedItemHeight));
231
+ return Math.max(0, Math.min(len - 1, idx));
232
+ }
233
+ // бинарный поиск по блокам
234
+ let low = 0;
235
+ let high = blocks.length - 1;
236
+ while (low < high) {
237
+ const mid = (low + high) >> 1;
238
+ if (blocks[mid] < scrollTopValue)
239
+ low = mid + 1;
240
+ else
241
+ high = mid;
242
+ }
243
+ const blockIndex = Math.max(0, low - 1);
244
+ const start = blockIndex * BLOCK_SIZE;
245
+ const end = Math.min(len - 1, start + BLOCK_SIZE * 2);
246
+ let i = start;
247
+ while (i < end && offsets[i] < scrollTopValue)
248
+ i++;
249
+ return Math.max(0, Math.min(len - 1, i));
250
+ }, [items.length, isFixed, itemHeight, estimatedItemHeight, renderVersion]);
251
+ const startIndex = (0, react_1.useMemo)(() => {
252
+ const idx = findStartIndex(scrollTop);
253
+ const _ = renderVersion;
254
+ return Math.max(0, idx - overscan);
255
+ }, [scrollTop, findStartIndex, overscan, renderVersion]);
256
+ // ⭐ Поиск endIndex
257
+ const endIndex = (0, react_1.useMemo)(() => {
258
+ const len = items.length;
259
+ if (len === 0)
260
+ return -1;
261
+ const offsets = offsetsRef.current;
262
+ if (offsets.length !== len)
263
+ return -1;
264
+ const totalVisibleBottom = scrollTop + height;
265
+ let i = startIndex;
266
+ while (i < len && offsets[i] < totalVisibleBottom)
267
+ i++;
268
+ const _ = renderVersion;
269
+ // renderVersion;
270
+ return Math.min(len - 1, i + overscan);
271
+ }, [scrollTop, height, startIndex, items.length, overscan, renderVersion]);
272
+ const getTopVisibleIndex = (0, react_1.useCallback)(() => startIndex, [startIndex]);
273
+ react_1.default.useImperativeHandle(ref, () => ({
274
+ scrollToIndex: (index, align = 'auto') => {
275
+ scrollTo(index, align);
276
+ },
277
+ getTopVisibleIndex: () => getTopVisibleIndex(),
278
+ }));
279
+ if (renderVersion === 0) {
280
+ return (react_1.default.createElement("div", { ref: containerRef, style: {
281
+ overflowY: 'auto',
282
+ position: 'relative',
283
+ height,
284
+ } }));
285
+ }
286
+ const visibleStart = startIndex;
287
+ const visibleEnd = endIndex;
288
+ let totalHeight = offsetsRef.current[items.length - 1] + heightsRef.current[items.length - 1];
289
+ if (isNaN(totalHeight)) {
290
+ totalHeight = 0;
291
+ }
292
+ return (react_1.default.createElement("div", { ref: containerRef, onScroll: onScroll, style: {
293
+ overflowY: 'auto',
294
+ position: 'relative',
295
+ height,
296
+ } },
297
+ react_1.default.createElement("div", { style: { height: totalHeight, position: 'relative' } }, Array.from({ length: visibleEnd - visibleStart + 1 }, (_, i) => {
298
+ const index = visibleStart + i;
299
+ const item = items[index];
300
+ const top = offsetsRef.current[index];
301
+ return (react_1.default.createElement(MeasuredItem_1.default, { key: index, index: index, isFixed: isFixed, top: top, updateHeight: (idx, h) => updateHeightWithBlocks(idx, h, heightsRef, offsetsRef, blockOffsetsRef, setRenderVersion) }, renderItem(item, index)));
302
+ }))));
303
+ });
304
+ VirtualizedListComponent.displayName = 'VirtualizedListComponent';
305
+ exports.default = VirtualizedListComponent;
package/Menu/index.d.ts CHANGED
@@ -3,7 +3,9 @@ import { MenuProps, MenuRef } from './MenuContainer';
3
3
  import { AnchorPos as PopperAnchorPos } from '../Popper';
4
4
  export type AnchorPos = PopperAnchorPos;
5
5
  export * from './MenuContainer';
6
+ export * from './MenuItem';
7
+ export * from './MenuList';
6
8
  declare const _default: <T, Multiple extends boolean | undefined = undefined>(props: MenuProps<T, Multiple> & {
7
9
  ref?: React.Ref<MenuRef> | undefined;
8
- }) => JSX.Element;
10
+ }) => React.ReactElement;
9
11
  export default _default;
package/Menu/index.js CHANGED
@@ -21,12 +21,9 @@ const react_1 = __importDefault(require("react"));
21
21
  const context_1 = require("./context");
22
22
  const MenuContainer_1 = __importDefault(require("./MenuContainer"));
23
23
  __exportStar(require("./MenuContainer"), exports);
24
- const Menu = react_1.default.forwardRef((props, ref) => {
25
- if (props.anchorPos !== 'static' && typeof props.anchorElement === 'undefined') {
26
- throw new Error(`[@via-profit/ui-kit] You set «anchorPos» property as «static». In this case you should use «anchorElement» property`);
27
- }
28
- return (react_1.default.createElement(context_1.MenuContextProvider, null,
29
- react_1.default.createElement(MenuContainer_1.default, Object.assign({}, props, { ref: ref }))));
30
- });
24
+ __exportStar(require("./MenuItem"), exports);
25
+ __exportStar(require("./MenuList"), exports);
26
+ const Menu = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(context_1.MenuContextProvider, null,
27
+ react_1.default.createElement(MenuContainer_1.default, Object.assign({}, props, { ref: ref })))));
31
28
  Menu.displayName = 'Menu';
32
29
  exports.default = Menu;
@@ -5,9 +5,9 @@ import { ModalInnerContainerProps } from './ModalInnerContainer';
5
5
  interface RenderModalProps {
6
6
  readonly children: React.ReactNode | readonly React.ReactNode[];
7
7
  readonly overrides: {
8
- readonly Overlay?: React.ForwardRefExoticComponent<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
9
- readonly Inner?: React.ForwardRefExoticComponent<ModalInnerProps & React.RefAttributes<HTMLDivElement>>;
10
- readonly InnerContainer?: React.ForwardRefExoticComponent<ModalInnerContainerProps & React.RefAttributes<HTMLDivElement>>;
8
+ readonly Overlay?: React.ComponentType<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
9
+ readonly Inner?: React.ComponentType<ModalInnerProps & React.RefAttributes<HTMLDivElement>>;
10
+ readonly InnerContainer?: React.ComponentType<ModalInnerContainerProps & React.RefAttributes<HTMLDivElement>>;
11
11
  };
12
12
  }
13
13
  declare const RenderModal: React.FC<RenderModalProps>;
@@ -45,9 +45,9 @@ export interface BaseModalProps {
45
45
  readonly overrides?: BaseModalOverrides;
46
46
  }
47
47
  export interface BaseModalOverrides {
48
- readonly Overlay?: React.ForwardRefExoticComponent<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
49
- readonly Inner?: React.ForwardRefExoticComponent<ModalInnerProps & React.RefAttributes<HTMLDivElement>>;
50
- readonly InnerContainer?: React.ForwardRefExoticComponent<ModalInnerContainerProps & React.RefAttributes<HTMLDivElement>>;
48
+ readonly Overlay?: React.ComponentType<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
49
+ readonly Inner?: React.ComponentType<ModalInnerProps & React.RefAttributes<HTMLDivElement>>;
50
+ readonly InnerContainer?: React.ComponentType<ModalInnerContainerProps & React.RefAttributes<HTMLDivElement>>;
51
51
  }
52
52
  declare const BaseModal: React.FC<BaseModalProps>;
53
53
  export default BaseModal;
@@ -37,23 +37,23 @@ export interface ConfirmBoxOverrides {
37
37
  /**
38
38
  * Element container
39
39
  */
40
- readonly Container?: React.ForwardRefExoticComponent<ConfirmBoxContainerProps & React.RefAttributes<HTMLDivElement>>;
40
+ readonly Container?: React.ComponentType<ConfirmBoxContainerProps & React.RefAttributes<HTMLDivElement>>;
41
41
  /**
42
42
  * Element ontent
43
43
  */
44
- readonly Content?: React.ForwardRefExoticComponent<ConfirmBoxContentProps & React.RefAttributes<HTMLDivElement>>;
44
+ readonly Content?: React.ComponentType<ConfirmBoxContentProps & React.RefAttributes<HTMLDivElement>>;
45
45
  /**
46
46
  * Element footer
47
47
  */
48
- readonly Footer?: React.ForwardRefExoticComponent<ConfirmBoxFooterProps & React.RefAttributes<HTMLDivElement>>;
48
+ readonly Footer?: React.ComponentType<ConfirmBoxFooterProps & React.RefAttributes<HTMLDivElement>>;
49
49
  /**
50
50
  * Element header
51
51
  */
52
- readonly Header?: React.ForwardRefExoticComponent<ConfirmBoxHeaderProps & React.RefAttributes<HTMLDivElement>>;
52
+ readonly Header?: React.ComponentType<ConfirmBoxHeaderProps & React.RefAttributes<HTMLDivElement>>;
53
53
  /**
54
54
  * Overlay element
55
55
  */
56
- readonly Overlay?: React.ForwardRefExoticComponent<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
56
+ readonly Overlay?: React.ComponentType<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
57
57
  }
58
58
  declare const ConfirmBox: React.FC<ConfirmBoxProps>;
59
59
  export default ConfirmBox;
@@ -43,23 +43,23 @@ export interface DrawerOverrides {
43
43
  /**
44
44
  * Element container
45
45
  */
46
- readonly Container?: React.ForwardRefExoticComponent<DrawerContainerProps & React.RefAttributes<HTMLDivElement>>;
46
+ readonly Container?: React.ComponentType<DrawerContainerProps & React.RefAttributes<HTMLDivElement>>;
47
47
  /**
48
48
  * Element ontent
49
49
  */
50
- readonly Content?: React.ForwardRefExoticComponent<DrawerContentProps & React.RefAttributes<HTMLDivElement>>;
50
+ readonly Content?: React.ComponentType<DrawerContentProps & React.RefAttributes<HTMLDivElement>>;
51
51
  /**
52
52
  * Element footer
53
53
  */
54
- readonly Footer?: React.ForwardRefExoticComponent<DrawerFooterProps & React.RefAttributes<HTMLDivElement>>;
54
+ readonly Footer?: React.ComponentType<DrawerFooterProps & React.RefAttributes<HTMLDivElement>>;
55
55
  /**
56
56
  * Element header
57
57
  */
58
- readonly Header?: React.ForwardRefExoticComponent<DrawerHeaderProps & React.RefAttributes<HTMLDivElement>>;
58
+ readonly Header?: React.ComponentType<DrawerHeaderProps & React.RefAttributes<HTMLDivElement>>;
59
59
  /**
60
60
  * Overlay element
61
61
  */
62
- readonly Overlay?: React.ForwardRefExoticComponent<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
62
+ readonly Overlay?: React.ComponentType<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
63
63
  }
64
64
  declare const Drawer: React.FC<DrawerProps>;
65
65
  export default Drawer;
@@ -28,23 +28,23 @@ export interface MessageBoxOverrides {
28
28
  /**
29
29
  * Element container
30
30
  */
31
- readonly Container?: React.ForwardRefExoticComponent<MessageBoxContainerProps & React.RefAttributes<HTMLDivElement>>;
31
+ readonly Container?: React.ComponentType<MessageBoxContainerProps & React.RefAttributes<HTMLDivElement>>;
32
32
  /**
33
33
  * Element ontent
34
34
  */
35
- readonly Content?: React.ForwardRefExoticComponent<MessageBoxContentProps & React.RefAttributes<HTMLDivElement>>;
35
+ readonly Content?: React.ComponentType<MessageBoxContentProps & React.RefAttributes<HTMLDivElement>>;
36
36
  /**
37
37
  * Element footer
38
38
  */
39
- readonly Footer?: React.ForwardRefExoticComponent<MessageBoxFooterProps & React.RefAttributes<HTMLDivElement>>;
39
+ readonly Footer?: React.ComponentType<MessageBoxFooterProps & React.RefAttributes<HTMLDivElement>>;
40
40
  /**
41
41
  * Element header
42
42
  */
43
- readonly Header?: React.ForwardRefExoticComponent<MessageBoxHeaderProps & React.RefAttributes<HTMLDivElement>>;
43
+ readonly Header?: React.ComponentType<MessageBoxHeaderProps & React.RefAttributes<HTMLDivElement>>;
44
44
  /**
45
45
  * Overlay header
46
46
  */
47
- readonly Overlay?: React.ForwardRefExoticComponent<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
47
+ readonly Overlay?: React.ComponentType<ModalOverlayProps & React.RefAttributes<HTMLDivElement>>;
48
48
  }
49
49
  declare const MessageBox: React.FC<MessageBoxProps>;
50
50
  export default MessageBox;
@@ -0,0 +1,148 @@
1
+ import React from 'react';
2
+ import { PopperContainerProps, PositionStrategy } from './PopperContainer';
3
+ import { AnchorPos } from './usePopprer';
4
+ export * from './usePopprer';
5
+ export interface PopperProps extends React.HTMLAttributes<HTMLDivElement> {
6
+ /**
7
+ * Controls the visibility of the popper.
8
+ * When `true`, the popper is rendered and positioned.
9
+ *
10
+ * @required
11
+ * @example
12
+ * ```tsx
13
+ * <Popper isOpen={true}>...</Popper>
14
+ * ```
15
+ */
16
+ readonly isOpen: boolean;
17
+ /**
18
+ * The HTML element to which the popper will be attached and positioned relative to.
19
+ * If `null` or undefined, the popper will not be positioned.
20
+ *
21
+ * @default undefined
22
+ * @example
23
+ * ```tsx
24
+ * const [anchor, setAnchor] = useState<HTMLButtonElement | null>(null);
25
+ * <Popper anchorElement={anchor}>...</Popper>
26
+ * ```
27
+ */
28
+ readonly anchorElement: HTMLElement | null;
29
+ /**
30
+ * Determines the preferred placement of the popper relative to the anchor element.
31
+ * The actual placement may change if `autoFlip` is enabled and there's not enough space.
32
+ *
33
+ * @default 'auto'
34
+ * @example
35
+ * ```tsx
36
+ * <Popper anchorPos="top-start">...</Popper>
37
+ * <Popper anchorPos="bottom-end">...</Popper>
38
+ * ```
39
+ */
40
+ readonly anchorPos?: AnchorPos;
41
+ readonly onAnchorPosChanged?: (anchorPos: AnchorPos) => void;
42
+ /**
43
+ * The z-index value for the popper container.
44
+ * Used to control the stacking order of the popper relative to other elements.
45
+ *
46
+ * @default theme.zIndex.modal
47
+ * @example
48
+ * ```tsx
49
+ * <Popper zIndex={9999}>...</Popper>
50
+ * ```
51
+ */
52
+ readonly zIndex?: number;
53
+ /**
54
+ * When enabled, the popper will automatically try to find the best placement
55
+ * if the preferred placement doesn't fit in the viewport.
56
+ * The component will iterate through possible placements until it finds one that fits.
57
+ *
58
+ * @default true
59
+ * @example
60
+ * ```tsx
61
+ * <Popper autoFlip={true}>...</Popper> // Will flip if needed
62
+ * <Popper autoFlip={false}>...</Popper> // Will always use preferred placement
63
+ * ```
64
+ */
65
+ readonly autoFlip?: boolean;
66
+ /**
67
+ * Additional offset (in pixels) from the anchor element.
68
+ * Positive values move the popper away from the anchor, negative values move it closer.
69
+ *
70
+ * @default 0
71
+ * @example
72
+ * ```tsx
73
+ * <Popper offset={8}>...</Popper> // 8px gap between anchor and popper
74
+ * <Popper offset={-4}>...</Popper> // Overlap the anchor by 4px
75
+ * ```
76
+ */
77
+ readonly offset?: number;
78
+ /**
79
+ * The positioning strategy to use.
80
+ * - `'fixed'`: Positions relative to the viewport. Works reliably in all cases.
81
+ * - `'absolute'`: Positions relative to the nearest positioned ancestor.
82
+ * When using 'absolute', make sure a parent element has `position: relative`.
83
+ *
84
+ * @default 'fixed'
85
+ * @example
86
+ * ```tsx
87
+ * <Popper positionStrategy="absolute">...</Popper> // Relative to positioned parent
88
+ * <Popper positionStrategy="fixed">...</Popper> // Relative to viewport (recommended)
89
+ * ```
90
+ */
91
+ readonly positionStrategy?: PositionStrategy;
92
+ /**
93
+ * Minimum distance (in pixels) that the popper must maintain from the viewport edges.
94
+ * Used to prevent the popper from being positioned too close to the screen boundaries.
95
+ * The popper will try to flip to another placement if it cannot maintain this margin.
96
+ *
97
+ * @default 8
98
+ * @example
99
+ * ```tsx
100
+ * // Larger margin for better visibility
101
+ * <Popper viewportMargin={16}>...</Popper>
102
+ *
103
+ * // No margin (allow touching edges)
104
+ * <Popper viewportMargin={0}>...</Popper>
105
+ *
106
+ * // Different margins for different devices
107
+ * <Popper viewportMargin={isMobile ? 8 : 16}>...</Popper>
108
+ * ```
109
+ */
110
+ readonly viewportMargin?: number;
111
+ /**
112
+ * Overridable components map for customizing the popper's internal structure.
113
+ * Allows replacing default components with custom implementations while maintaining functionality.
114
+ *
115
+ * @default undefined
116
+ * @example
117
+ * ```tsx
118
+ * <Popper
119
+ * overrides={{
120
+ * Container: CustomContainerComponent,
121
+ * }}
122
+ * >
123
+ * ...
124
+ * </Popper>
125
+ * ```
126
+ */
127
+ readonly overrides?: PopperOverrides;
128
+ }
129
+ export interface PopperOverrides {
130
+ /**
131
+ * Custom container component for the popper content.
132
+ * This component wraps the popper's children and handles positioning styles.
133
+ *
134
+ * @default PopperContainer
135
+ * @example
136
+ * ```tsx
137
+ * const CustomContainer = React.forwardRef((props, ref) => (
138
+ * <div ref={ref} {...props} className="custom-popper" />
139
+ * ));
140
+ *
141
+ * <Popper overrides={{ Container: CustomContainer }} />
142
+ * ```
143
+ */
144
+ readonly Container?: React.ComponentType<PopperContainerProps & React.RefAttributes<HTMLDivElement>>;
145
+ }
146
+ export declare const PORTAL_ID = "ui-kit-portal";
147
+ declare const _default: React.ForwardRefExoticComponent<PopperProps & React.RefAttributes<HTMLDivElement>>;
148
+ export default _default;