@laser-ui/components 1.6.1 → 2.0.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 (298) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/accordion/Accordion.d.ts +1 -1
  3. package/accordion/Accordion.js +13 -25
  4. package/accordion/types.d.ts +1 -0
  5. package/affix/Affix.d.ts +2 -2
  6. package/affix/Affix.js +27 -32
  7. package/affix/types.d.ts +7 -2
  8. package/alert/Alert.d.ts +1 -1
  9. package/alert/Alert.js +12 -21
  10. package/anchor/Anchor.d.ts +2 -4
  11. package/anchor/Anchor.js +34 -26
  12. package/anchor/types.d.ts +1 -0
  13. package/avatar/Avatar.d.ts +1 -1
  14. package/avatar/Avatar.js +9 -3
  15. package/badge/Badge.d.ts +1 -1
  16. package/badge/Badge.js +22 -41
  17. package/badge/BadgeText.js +12 -26
  18. package/badge/internal/BadgeNumber.d.ts +2 -2
  19. package/badge/internal/BadgeNumber.js +34 -24
  20. package/base-input/BaseInput.d.ts +1 -2
  21. package/base-input/BaseInput.js +4 -4
  22. package/base-input/types.d.ts +1 -0
  23. package/breadcrumb/Breadcrumb.d.ts +1 -1
  24. package/button/Button.d.ts +1 -2
  25. package/button/Button.js +18 -22
  26. package/button/types.d.ts +1 -0
  27. package/card/Card.d.ts +1 -1
  28. package/card/CardAction.d.ts +1 -1
  29. package/card/CardAction.js +3 -4
  30. package/card/CardActions.d.ts +1 -1
  31. package/card/CardActions.js +7 -3
  32. package/card/CardContent.d.ts +1 -1
  33. package/card/CardHeader.d.ts +1 -1
  34. package/card/types.d.ts +5 -1
  35. package/cascader/Cascader.d.ts +2 -4
  36. package/cascader/Cascader.js +217 -214
  37. package/cascader/internal/CascaderPanel.d.ts +2 -2
  38. package/cascader/internal/CascaderPanel.js +21 -7
  39. package/cascader/internal/CascaderSearchPanel.d.ts +2 -2
  40. package/cascader/internal/CascaderSearchPanel.js +15 -6
  41. package/cascader/types.d.ts +3 -3
  42. package/checkbox/Checkbox.d.ts +1 -1
  43. package/checkbox/Checkbox.js +4 -5
  44. package/checkbox/CheckboxGroup.d.ts +1 -1
  45. package/checkbox/CheckboxGroup.js +8 -7
  46. package/checkbox/types.d.ts +14 -4
  47. package/{internal/circular-progress → circular-progress}/CircularProgress.d.ts +1 -1
  48. package/{internal/circular-progress → circular-progress}/CircularProgress.js +2 -2
  49. package/compose/Compose.d.ts +1 -1
  50. package/compose/ComposeItem.d.ts +1 -1
  51. package/config-provider/ConfigProvider.d.ts +1 -1
  52. package/config-provider/ConfigProvider.js +3 -3
  53. package/date-picker/DatePicker.d.ts +2 -2
  54. package/date-picker/DatePicker.js +116 -98
  55. package/date-picker/internal/DatePickerPanel.d.ts +2 -1
  56. package/date-picker/internal/DatePickerPanel.js +4 -4
  57. package/date-picker/types.d.ts +3 -3
  58. package/dialog-service.d.ts +9 -6
  59. package/dialog-service.js +50 -26
  60. package/drawer/Drawer.d.ts +1 -1
  61. package/drawer/Drawer.js +83 -92
  62. package/drawer/DrawerFooter.d.ts +1 -1
  63. package/drawer/DrawerFooter.js +12 -9
  64. package/drawer/DrawerHeader.d.ts +1 -1
  65. package/drawer/DrawerHeader.js +10 -7
  66. package/drawer/types.d.ts +9 -2
  67. package/drawer/vars.d.ts +5 -1
  68. package/drawer/vars.js +1 -1
  69. package/dropdown/Dropdown.d.ts +2 -4
  70. package/dropdown/Dropdown.js +83 -104
  71. package/dropdown/internal/DropdownGroup.d.ts +1 -1
  72. package/dropdown/internal/DropdownItem.d.ts +1 -1
  73. package/dropdown/internal/DropdownSub.d.ts +2 -1
  74. package/dropdown/internal/DropdownSub.js +26 -49
  75. package/dropdown/types.d.ts +15 -2
  76. package/empty/Empty.d.ts +1 -1
  77. package/fab/Fab.d.ts +1 -1
  78. package/fab/Fab.js +19 -14
  79. package/fab/FabBacktop.d.ts +1 -1
  80. package/fab/FabBacktop.js +24 -31
  81. package/fab/FabButton.d.ts +1 -1
  82. package/fab/FabButton.js +37 -10
  83. package/fab/types.d.ts +6 -2
  84. package/fab/vars.d.ts +14 -0
  85. package/fab/vars.js +4 -0
  86. package/form/Form.d.ts +1 -1
  87. package/form/Form.js +7 -2
  88. package/form/FormItem.d.ts +1 -1
  89. package/form/FormItem.js +35 -24
  90. package/form/internal/FormError.d.ts +3 -2
  91. package/form/internal/FormError.js +10 -19
  92. package/hooks/index.d.ts +0 -2
  93. package/hooks/index.js +0 -2
  94. package/hooks/useComponentProps.js +2 -2
  95. package/hooks/useFocusVisible.d.ts +9 -2
  96. package/hooks/useFocusVisible.js +5 -11
  97. package/hooks/useLayout.d.ts +2 -2
  98. package/hooks/useLayout.js +2 -2
  99. package/hooks/useNamespace.js +2 -2
  100. package/hooks/useNestedPopup.d.ts +1 -1
  101. package/hooks/useScopedProps.js +2 -2
  102. package/hooks/useStyled.js +2 -2
  103. package/hooks/useTranslation.js +2 -2
  104. package/icon/Icon.d.ts +1 -1
  105. package/icon/Icon.js +7 -4
  106. package/image/Image.d.ts +1 -1
  107. package/image/Image.js +6 -2
  108. package/image/ImageAction.d.ts +1 -1
  109. package/image/ImageAction.js +3 -4
  110. package/image/ImageLoader.d.ts +1 -1
  111. package/image/ImagePreview.d.ts +1 -1
  112. package/image/ImagePreview.js +94 -109
  113. package/image/types.d.ts +6 -2
  114. package/input/Input.d.ts +1 -1
  115. package/input/Input.js +12 -8
  116. package/input/InputNumber.js +49 -40
  117. package/input/types.d.ts +3 -5
  118. package/internal/lazy-loading/LazyLoading.d.ts +3 -0
  119. package/internal/lazy-loading/LazyLoading.js +9 -0
  120. package/internal/lazy-loading/index.d.ts +2 -0
  121. package/internal/lazy-loading/index.js +1 -0
  122. package/internal/lazy-loading/types.d.ts +7 -0
  123. package/internal/popup/Popup.d.ts +1 -1
  124. package/internal/popup/Popup.js +40 -68
  125. package/internal/popup/types.d.ts +13 -6
  126. package/internal/portal/Portal.d.ts +1 -1
  127. package/internal/portal/Portal.js +12 -6
  128. package/internal/portal/types.d.ts +3 -2
  129. package/mask/Mask.d.ts +3 -0
  130. package/mask/Mask.js +31 -0
  131. package/menu/Menu.d.ts +2 -4
  132. package/menu/Menu.js +37 -42
  133. package/menu/internal/MenuGroup.d.ts +1 -1
  134. package/menu/internal/MenuItem.d.ts +1 -1
  135. package/menu/internal/MenuItem.js +14 -10
  136. package/menu/internal/MenuSub.d.ts +2 -1
  137. package/menu/internal/MenuSub.js +43 -70
  138. package/menu/types.d.ts +1 -0
  139. package/modal/Modal.d.ts +1 -1
  140. package/modal/Modal.js +77 -80
  141. package/modal/ModalAlert.d.ts +1 -1
  142. package/modal/ModalFooter.d.ts +1 -1
  143. package/modal/ModalFooter.js +12 -9
  144. package/modal/ModalHeader.d.ts +1 -1
  145. package/modal/ModalHeader.js +10 -7
  146. package/modal/types.d.ts +9 -2
  147. package/modal/vars.d.ts +5 -0
  148. package/modal/vars.js +2 -0
  149. package/notification/Notification.d.ts +1 -1
  150. package/notification/Notification.js +44 -71
  151. package/notification/types.d.ts +1 -0
  152. package/package.json +2 -2
  153. package/pagination/Pagination.d.ts +1 -1
  154. package/pagination/Pagination.js +9 -6
  155. package/popover/Popover.d.ts +2 -2
  156. package/popover/Popover.js +82 -118
  157. package/popover/PopoverFooter.d.ts +1 -1
  158. package/popover/PopoverFooter.js +12 -9
  159. package/popover/PopoverHeader.d.ts +1 -1
  160. package/popover/PopoverHeader.js +10 -7
  161. package/popover/types.d.ts +18 -4
  162. package/popover/vars.d.ts +5 -0
  163. package/popover/vars.js +2 -0
  164. package/progress/Progress.d.ts +1 -1
  165. package/radio/Radio.d.ts +1 -1
  166. package/radio/Radio.js +18 -13
  167. package/radio/RadioGroup.d.ts +1 -1
  168. package/radio/RadioGroup.js +12 -7
  169. package/radio/types.d.ts +16 -4
  170. package/radio/vars.d.ts +6 -0
  171. package/radio/vars.js +2 -0
  172. package/rating/Rating.d.ts +1 -1
  173. package/rating/internal/RatingStar.d.ts +1 -1
  174. package/rating/internal/RatingStar.js +23 -21
  175. package/root/Root.d.ts +1 -1
  176. package/root/Root.js +1 -1
  177. package/select/Select.d.ts +2 -4
  178. package/select/Select.js +245 -243
  179. package/select/types.d.ts +3 -3
  180. package/separator/Separator.d.ts +1 -1
  181. package/skeleton/Skeleton.d.ts +1 -1
  182. package/slider/Slider.d.ts +1 -1
  183. package/slider/Slider.js +54 -34
  184. package/slider/types.d.ts +2 -3
  185. package/slides/Slides.d.ts +1 -1
  186. package/slides/Slides.js +8 -3
  187. package/spinner/Spinner.d.ts +1 -1
  188. package/spinner/Spinner.js +27 -29
  189. package/stepper/Stepper.d.ts +1 -1
  190. package/stepper/Stepper.js +9 -16
  191. package/switch/Switch.js +33 -24
  192. package/switch/types.d.ts +2 -3
  193. package/table/Table.d.ts +1 -1
  194. package/table/Table.js +14 -10
  195. package/table/TableEmpty.d.ts +1 -1
  196. package/table/TableEmpty.js +9 -3
  197. package/table/TableExpand.d.ts +1 -1
  198. package/table/TableFilter.d.ts +1 -1
  199. package/table/TableFilter.js +1 -1
  200. package/table/TableTd.d.ts +1 -1
  201. package/table/TableTh.d.ts +1 -1
  202. package/table/TableThAction.d.ts +1 -1
  203. package/table/TableThAction.js +3 -4
  204. package/table/internal/TableCell.d.ts +1 -1
  205. package/table/internal/TableCell.js +13 -5
  206. package/table/types.d.ts +9 -2
  207. package/tabs/Tabs.d.ts +2 -4
  208. package/tabs/Tabs.js +41 -25
  209. package/tabs/types.d.ts +1 -0
  210. package/tag/Tag.d.ts +1 -1
  211. package/textarea/Textarea.d.ts +1 -1
  212. package/textarea/Textarea.js +15 -8
  213. package/textarea/types.d.ts +1 -0
  214. package/time-picker/TimePicker.d.ts +2 -2
  215. package/time-picker/TimePicker.js +89 -75
  216. package/time-picker/internal/TimePickerPanel.d.ts +2 -1
  217. package/time-picker/internal/TimePickerPanel.js +22 -7
  218. package/time-picker/types.d.ts +3 -3
  219. package/timeline/Timeline.d.ts +1 -1
  220. package/toast/Toast.d.ts +1 -1
  221. package/toast/Toast.js +44 -72
  222. package/toast/types.d.ts +1 -0
  223. package/tooltip/Tooltip.d.ts +2 -2
  224. package/tooltip/Tooltip.js +50 -74
  225. package/tooltip/types.d.ts +10 -2
  226. package/transfer/Transfer.d.ts +1 -1
  227. package/transfer/internal/TransferPanel.d.ts +1 -1
  228. package/transfer/internal/TransferPanel.js +7 -2
  229. package/{internal/transition → transition}/CollapseTransition.d.ts +1 -1
  230. package/transition/CollapseTransition.js +65 -0
  231. package/transition/Transition.d.ts +3 -0
  232. package/transition/Transition.js +148 -0
  233. package/transition/types.d.ts +29 -0
  234. package/tree/Tree.d.ts +1 -1
  235. package/tree/Tree.js +19 -7
  236. package/tree/internal/TreePanel.d.ts +2 -2
  237. package/tree/internal/TreePanel.js +32 -26
  238. package/tree-select/TreeSelect.d.ts +2 -4
  239. package/tree-select/TreeSelect.js +216 -213
  240. package/tree-select/internal/TreeSelectSearchPanel.d.ts +2 -2
  241. package/tree-select/internal/TreeSelectSearchPanel.js +15 -6
  242. package/tree-select/types.d.ts +3 -3
  243. package/types.d.ts +1 -1
  244. package/upload/Upload.d.ts +1 -3
  245. package/upload/Upload.js +41 -50
  246. package/upload/UploadAction.d.ts +1 -1
  247. package/upload/UploadAction.js +19 -16
  248. package/upload/UploadButton.d.ts +1 -1
  249. package/upload/UploadButton.js +16 -12
  250. package/upload/UploadList.d.ts +1 -1
  251. package/upload/UploadList.js +52 -47
  252. package/upload/UploadPicture.d.ts +1 -1
  253. package/upload/UploadPicture.js +47 -53
  254. package/upload/UploadPictureList.d.ts +1 -1
  255. package/upload/UploadPictureList.js +52 -47
  256. package/upload/UploadPreviewAction.d.ts +1 -1
  257. package/upload/UploadPreviewAction.js +15 -14
  258. package/upload/hooks.d.ts +2 -0
  259. package/upload/types.d.ts +27 -6
  260. package/upload/vars.d.ts +11 -0
  261. package/upload/vars.js +3 -0
  262. package/virtual-scroll/VirtualScroll.d.ts +2 -4
  263. package/virtual-scroll/VirtualScroll.js +13 -21
  264. package/virtual-scroll/types.d.ts +2 -1
  265. package/wave/Wave.d.ts +3 -0
  266. package/{internal/wave → wave}/Wave.js +6 -6
  267. package/{internal/wave → wave}/types.d.ts +1 -0
  268. package/wave/types.js +1 -0
  269. package/LICENSE +0 -21
  270. package/hooks/useJSS.d.ts +0 -1
  271. package/hooks/useJSS.js +0 -15
  272. package/hooks/useNextTick.d.ts +0 -2
  273. package/internal/mask/Mask.d.ts +0 -3
  274. package/internal/mask/Mask.js +0 -36
  275. package/internal/transition/CollapseTransition.js +0 -101
  276. package/internal/transition/Transition.d.ts +0 -3
  277. package/internal/transition/Transition.js +0 -87
  278. package/internal/transition/types.d.ts +0 -33
  279. package/internal/wave/Wave.d.ts +0 -3
  280. /package/{internal/circular-progress → circular-progress}/index.d.ts +0 -0
  281. /package/{internal/circular-progress → circular-progress}/index.js +0 -0
  282. /package/{internal/circular-progress → circular-progress}/vars.d.ts +0 -0
  283. /package/{internal/circular-progress → circular-progress}/vars.js +0 -0
  284. /package/internal/{mask → lazy-loading}/types.js +0 -0
  285. /package/{internal/mask → mask}/index.d.ts +0 -0
  286. /package/{internal/mask → mask}/index.js +0 -0
  287. /package/{internal/mask → mask}/types.d.ts +0 -0
  288. /package/{internal/transition → mask}/types.js +0 -0
  289. /package/{internal/mask → mask}/vars.d.ts +0 -0
  290. /package/{internal/mask → mask}/vars.js +0 -0
  291. /package/{internal/transition → transition}/index.d.ts +0 -0
  292. /package/{internal/transition → transition}/index.js +0 -0
  293. /package/{internal/wave → transition}/types.js +0 -0
  294. /package/{hooks/useNextTick.js → upload/hooks.js} +0 -0
  295. /package/{internal/wave → wave}/index.d.ts +0 -0
  296. /package/{internal/wave → wave}/index.js +0 -0
  297. /package/{internal/wave → wave}/vars.d.ts +0 -0
  298. /package/{internal/wave → wave}/vars.js +0 -0
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import type { ImagePreviewProps } from './types';
3
- export declare function ImagePreview(props: ImagePreviewProps): JSX.Element | null;
3
+ export declare function ImagePreview(props: ImagePreviewProps): React.ReactElement | null;
@@ -15,10 +15,10 @@ import { Button } from '../button';
15
15
  import { useComponentProps, useControlled, useLockScroll, useMaxIndex, useNamespace, useStyled } from '../hooks';
16
16
  import { Icon } from '../icon';
17
17
  import { Input } from '../input';
18
- import { Mask } from '../internal/mask';
19
18
  import { Portal } from '../internal/portal';
20
- import { Transition } from '../internal/transition';
19
+ import { Mask } from '../mask';
21
20
  import { ROOT_DATA } from '../root/vars';
21
+ import { Transition } from '../transition';
22
22
  import { mergeCS } from '../utils';
23
23
  import { TTANSITION_DURING_BASE } from '../vars';
24
24
  export function ImagePreview(props) {
@@ -166,122 +166,107 @@ export function ImagePreview(props) {
166
166
  document.body.appendChild(el);
167
167
  }
168
168
  return el;
169
- }, children: _jsx(Transition, { enter: visible, during: TTANSITION_DURING_BASE, destroyWhenLeaved: true, afterEnter: () => {
169
+ }, children: _jsx(Transition, { enter: visible, name: `${namespace}-popup`, duration: TTANSITION_DURING_BASE, onAfterEnter: () => {
170
170
  afterVisibleChange === null || afterVisibleChange === void 0 ? void 0 : afterVisibleChange(true);
171
171
  dataRef.current.prevActiveEl = document.activeElement;
172
172
  if (previewRef.current) {
173
173
  previewRef.current.focus({ preventScroll: true });
174
174
  }
175
- }, afterLeave: () => {
175
+ }, onAfterLeave: () => {
176
176
  afterVisibleChange === null || afterVisibleChange === void 0 ? void 0 : afterVisibleChange(false);
177
177
  if (dataRef.current.prevActiveEl) {
178
178
  dataRef.current.prevActiveEl.focus({ preventScroll: true });
179
179
  }
180
- }, children: (state) => {
181
- let transitionStyle = {};
182
- switch (state) {
183
- case 'enter':
184
- transitionStyle = { transform: 'scale(0.3)', opacity: 0 };
185
- break;
186
- case 'entering':
187
- transitionStyle = {
188
- transition: ['transform', 'opacity'].map((attr) => `${attr} ${TTANSITION_DURING_BASE}ms ease-out`).join(', '),
189
- };
190
- break;
191
- case 'leaving':
192
- transitionStyle = {
193
- transform: 'scale(0.3)',
194
- opacity: 0,
195
- transition: ['transform', 'opacity'].map((attr) => `${attr} ${TTANSITION_DURING_BASE}ms ease-in`).join(', '),
196
- };
197
- break;
198
- default:
199
- break;
200
- }
201
- return (_jsxs("div", Object.assign({}, restProps, mergeCS(styled('image-preview'), {
202
- className: restProps.className,
203
- style: Object.assign(Object.assign(Object.assign({}, restProps.style), transitionStyle), { display: state === 'leaved' ? 'none' : undefined, zIndex }),
204
- }), { ref: previewRef, tabIndex: -1, onKeyDown: (e) => {
205
- var _a;
206
- (_a = restProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(restProps, e);
207
- if (visible && escClosable && e.code === 'Escape') {
208
- e.stopPropagation();
209
- e.preventDefault();
210
- onClose === null || onClose === void 0 ? void 0 : onClose();
211
- }
212
- }, children: [_jsx("button", Object.assign({}, styled('image-preview__navigation-button', 'image-preview__navigation-button--prev'), { onClick: () => {
213
- changeActive((prevActive) => {
214
- return prevActive === 0 ? list.length - 1 : prevActive - 1;
215
- });
216
- }, children: _jsx(Icon, { children: _jsx(KeyboardArrowLeftOutlined, {}) }) })), _jsx("button", Object.assign({}, styled('image-preview__navigation-button', 'image-preview__navigation-button--next'), { onClick: () => {
217
- changeActive((prevActive) => {
218
- return prevActive === list.length - 1 ? 0 : prevActive + 1;
219
- });
220
- }, children: _jsx(Icon, { children: _jsx(KeyboardArrowRightOutlined, {}) }) })), _jsxs("ul", Object.assign({}, styled('image-preview__toolbar'), { children: [_jsxs("li", Object.assign({}, styled('image-preview__toolbar-page'), { children: [_jsx(Input.Number, Object.assign({}, styled('image-preview__toolbar-page-input'), { model: active + 1, min: 1, max: list.length, integer: true, onModelChange: (val) => {
221
- if (!isNull(val)) {
222
- changeActive(val - 1);
223
- }
224
- } })), _jsx("span", { children: "/" }), _jsx("span", { children: list.length })] })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-rotate'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(Rotate90DegreesCwOutlined, {}) }), onClick: () => {
225
- setTransform((transform) => {
226
- transform.rotate = transform.rotate + 90;
227
- });
228
- } }) })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-zoom-out'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(ZoomOutOutlined, {}) }), onClick: () => {
229
- setTransform((transform) => {
230
- transform.scale = Math.max(transform.scale / 1.3, 1);
231
- }, true);
232
- } }) })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-zoom-in'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(ZoomInOutlined, {}) }), onClick: () => {
233
- setTransform((transform) => {
234
- transform.scale = transform.scale * 1.3;
235
- }, true);
236
- } }) })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-close'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }), onClick: () => {
237
- onClose === null || onClose === void 0 ? void 0 : onClose();
238
- } }) }))] })), list.map((img, index) => (_jsx("div", Object.assign({}, mergeCS(styled('image-preview__img-wrapper'), {
239
- style: {
240
- display: index === active ? undefined : 'none',
241
- },
242
- }), { children: _jsx("img", Object.assign({}, img, styled('image-preview__img'), { tabIndex: -1, "data-index": index, onMouseDown: (e) => {
243
- if (e.button === 0) {
244
- e.preventDefault();
245
- e.currentTarget.focus({ preventScroll: true });
246
- dataRef.current.eventData = {};
247
- setIsDragging(true);
248
- }
249
- }, onMouseUp: (e) => {
250
- if (e.button === 0) {
251
- e.preventDefault();
252
- }
253
- }, onTouchStart: (e) => {
254
- var _a, _b;
180
+ }, children: (transitionRef, leaved) => leaved ? null : (_jsxs("div", Object.assign({}, restProps, mergeCS(styled('image-preview'), {
181
+ className: restProps.className,
182
+ style: Object.assign(Object.assign(Object.assign({}, restProps.style), { '--popup-scale': 0.3, '--popup-duration': TTANSITION_DURING_BASE + 'ms' }), { zIndex }),
183
+ }), { ref: (instance) => {
184
+ previewRef.current = instance;
185
+ transitionRef(instance);
186
+ return () => {
187
+ previewRef.current = null;
188
+ transitionRef(null);
189
+ };
190
+ }, tabIndex: -1, onKeyDown: (e) => {
191
+ var _a;
192
+ (_a = restProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(restProps, e);
193
+ if (visible && escClosable && e.code === 'Escape') {
194
+ e.stopPropagation();
195
+ e.preventDefault();
196
+ onClose === null || onClose === void 0 ? void 0 : onClose();
197
+ }
198
+ }, children: [_jsx("button", Object.assign({}, styled('image-preview__navigation-button', 'image-preview__navigation-button--prev'), { onClick: () => {
199
+ changeActive((prevActive) => {
200
+ return prevActive === 0 ? list.length - 1 : prevActive - 1;
201
+ });
202
+ }, children: _jsx(Icon, { children: _jsx(KeyboardArrowLeftOutlined, {}) }) })), _jsx("button", Object.assign({}, styled('image-preview__navigation-button', 'image-preview__navigation-button--next'), { onClick: () => {
203
+ changeActive((prevActive) => {
204
+ return prevActive === list.length - 1 ? 0 : prevActive + 1;
205
+ });
206
+ }, children: _jsx(Icon, { children: _jsx(KeyboardArrowRightOutlined, {}) }) })), _jsxs("ul", Object.assign({}, styled('image-preview__toolbar'), { children: [_jsxs("li", Object.assign({}, styled('image-preview__toolbar-page'), { children: [_jsx(Input.Number, Object.assign({}, styled('image-preview__toolbar-page-input'), { model: active + 1, min: 1, max: list.length, integer: true, onModelChange: (val) => {
207
+ if (!isNull(val)) {
208
+ changeActive(val - 1);
209
+ }
210
+ } })), _jsx("span", { children: "/" }), _jsx("span", { children: list.length })] })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-rotate'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(Rotate90DegreesCwOutlined, {}) }), onClick: () => {
211
+ setTransform((transform) => {
212
+ transform.rotate = transform.rotate + 90;
213
+ });
214
+ } }) })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-zoom-out'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(ZoomOutOutlined, {}) }), onClick: () => {
215
+ setTransform((transform) => {
216
+ transform.scale = Math.max(transform.scale / 1.3, 1);
217
+ }, true);
218
+ } }) })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-zoom-in'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(ZoomInOutlined, {}) }), onClick: () => {
219
+ setTransform((transform) => {
220
+ transform.scale = transform.scale * 1.3;
221
+ }, true);
222
+ } }) })), _jsx("li", Object.assign({}, styled('image-preview__toolbar-close'), { children: _jsx(Button, { pattern: "text", icon: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }), onClick: () => {
223
+ onClose === null || onClose === void 0 ? void 0 : onClose();
224
+ } }) }))] })), list.map((img, index) => (_jsx("div", Object.assign({}, mergeCS(styled('image-preview__img-wrapper'), {
225
+ style: {
226
+ display: index === active ? undefined : 'none',
227
+ },
228
+ }), { children: _jsx("img", Object.assign({}, img, styled('image-preview__img'), { tabIndex: -1, "data-index": index, onMouseDown: (e) => {
229
+ if (e.button === 0) {
230
+ e.preventDefault();
255
231
  e.currentTarget.focus({ preventScroll: true });
256
232
  dataRef.current.eventData = {};
257
- if (e.touches.length === 1) {
258
- setIsDragging(true);
259
- }
260
- else if (e.touches.length === 2) {
261
- dataRef.current.initialScale = (_b = (_a = dataRef.current.transform.get(active)) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : 1;
262
- dataRef.current.mouse = {
263
- x: Math.min(e.touches[0].clientX, e.touches[1].clientX) + Math.abs(e.touches[0].clientX - e.touches[1].clientX),
264
- y: Math.min(e.touches[0].clientY, e.touches[1].clientY) + Math.abs(e.touches[0].clientY - e.touches[1].clientY),
265
- };
266
- }
267
- }, onTouchEnd: (e) => {
268
- if (e.touches.length === 1) {
269
- dataRef.current.eventData.initialTouches = dataRef.current.eventData.currentTouches = undefined;
270
- }
271
- else {
272
- setIsDragging(false);
273
- }
274
- }, onWheel: (e) => {
275
- setTransform((transform) => {
276
- transform.scale =
277
- e.deltaY < 0 ? transform.scale + transform.scale * 0.1 : Math.max(transform.scale - transform.scale * 0.1, 1);
278
- });
279
- } })) }), index))), _jsx("ul", Object.assign({}, styled('image-preview__thumbnail-list'), { children: list.map((imgProps, index) => index >= startIndex &&
280
- index <= endIndex && (_createElement("li", Object.assign({}, styled('image-preview__thumbnail', {
281
- 'image-preview__thumbnail.is-active': active === index,
282
- }), { key: index, onClick: () => {
283
- changeActive(index);
284
- } }),
285
- _jsx("img", Object.assign({}, imgProps, styled('image-preview__thumbnail-img')))))) })), _jsx(Mask, { visible: true })] })));
286
- } }) }));
233
+ setIsDragging(true);
234
+ }
235
+ }, onMouseUp: (e) => {
236
+ if (e.button === 0) {
237
+ e.preventDefault();
238
+ }
239
+ }, onTouchStart: (e) => {
240
+ var _a, _b;
241
+ e.currentTarget.focus({ preventScroll: true });
242
+ dataRef.current.eventData = {};
243
+ if (e.touches.length === 1) {
244
+ setIsDragging(true);
245
+ }
246
+ else if (e.touches.length === 2) {
247
+ dataRef.current.initialScale = (_b = (_a = dataRef.current.transform.get(active)) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : 1;
248
+ dataRef.current.mouse = {
249
+ x: Math.min(e.touches[0].clientX, e.touches[1].clientX) + Math.abs(e.touches[0].clientX - e.touches[1].clientX),
250
+ y: Math.min(e.touches[0].clientY, e.touches[1].clientY) + Math.abs(e.touches[0].clientY - e.touches[1].clientY),
251
+ };
252
+ }
253
+ }, onTouchEnd: (e) => {
254
+ if (e.touches.length === 1) {
255
+ dataRef.current.eventData.initialTouches = dataRef.current.eventData.currentTouches = undefined;
256
+ }
257
+ else {
258
+ setIsDragging(false);
259
+ }
260
+ }, onWheel: (e) => {
261
+ setTransform((transform) => {
262
+ transform.scale =
263
+ e.deltaY < 0 ? transform.scale + transform.scale * 0.1 : Math.max(transform.scale - transform.scale * 0.1, 1);
264
+ });
265
+ } })) }), index))), _jsx("ul", Object.assign({}, styled('image-preview__thumbnail-list'), { children: list.map((imgProps, index) => index >= startIndex &&
266
+ index <= endIndex && (_createElement("li", Object.assign({}, styled('image-preview__thumbnail', {
267
+ 'image-preview__thumbnail.is-active': active === index,
268
+ }), { key: index, onClick: () => {
269
+ changeActive(index);
270
+ } }),
271
+ _jsx("img", Object.assign({}, imgProps, styled('image-preview__thumbnail-img')))))) })), _jsx(Mask, { visible: true })] }))) }) }));
287
272
  }
package/image/types.d.ts CHANGED
@@ -6,14 +6,18 @@ export interface ImageProps extends BaseProps<'image', typeof CLASSES>, Omit<Rea
6
6
  imgProps: React.ImgHTMLAttributes<HTMLImageElement>;
7
7
  loading?: React.ReactNode;
8
8
  error?: React.ReactNode;
9
- actions?: React.ReactElement[];
9
+ actions?: (React.ReactNode | {
10
+ id: React.Key;
11
+ action: React.ReactNode;
12
+ })[];
10
13
  }
11
14
  export interface ImageLoaderProps<K extends keyof HTMLImageElement = 'naturalWidth' | 'naturalHeight'> {
12
15
  src: string;
13
16
  keys?: K[];
14
- children: (img: Pick<HTMLImageElement, K>) => JSX.Element | null;
17
+ children: (img: Pick<HTMLImageElement, K>) => React.ReactElement | null;
15
18
  }
16
19
  export interface ImageActionProps extends BaseProps<'image', typeof CLASSES>, React.ButtonHTMLAttributes<HTMLButtonElement> {
20
+ ref?: React.Ref<HTMLButtonElement>;
17
21
  }
18
22
  export interface ImagePreviewProps extends BaseProps<'image-preview', typeof PREVIEW_CLASSES>, Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
19
23
  list: React.ImgHTMLAttributes<HTMLImageElement>[];
package/input/Input.d.ts CHANGED
@@ -2,6 +2,6 @@
2
2
  import type { InputProps } from './types';
3
3
  import { InputNumber } from './InputNumber';
4
4
  export declare const Input: {
5
- (props: InputProps): JSX.Element | null;
5
+ (props: InputProps): React.ReactElement | null;
6
6
  Number: typeof InputNumber;
7
7
  };
package/input/Input.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { __rest } from "tslib";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useForkRef } from '@laser-ui/hooks';
4
- import { checkNodeExist } from '@laser-ui/utils';
3
+ import { checkNodeExist, setRef } from '@laser-ui/utils';
5
4
  import CancelFilled from '@material-design-icons/svg/filled/cancel.svg?react';
6
5
  import VisibilityOutlined from '@material-design-icons/svg/outlined/visibility.svg?react';
7
6
  import VisibilityOffOutlined from '@material-design-icons/svg/outlined/visibility_off.svg?react';
@@ -13,11 +12,10 @@ import { useComponentProps, useControlled, useDesign, useScopedProps, useStyled,
13
12
  import { Icon } from '../icon';
14
13
  import { mergeCS } from '../utils';
15
14
  export const Input = (props) => {
16
- const _a = useComponentProps('Input', props), { styleOverrides, styleProvider, formControl, model, defaultModel, type, prefix, suffix, password: passwordProp, defaultPassword, clearable, placeholder, size: sizeProp, disabled: disabledProp = false, inputRef: inputRefProp, inputRender, onModelChange, onClear, onPasswordChange } = _a, restProps = __rest(_a, ["styleOverrides", "styleProvider", "formControl", "model", "defaultModel", "type", "prefix", "suffix", "password", "defaultPassword", "clearable", "placeholder", "size", "disabled", "inputRef", "inputRender", "onModelChange", "onClear", "onPasswordChange"]);
15
+ const _a = useComponentProps('Input', props), { styleOverrides, styleProvider, formControl, model, defaultModel, type, prefix, suffix, password: passwordProp, defaultPassword, clearable, placeholder, size: sizeProp, disabled: disabledProp = false, inputProps, onModelChange, onClear, onPasswordChange } = _a, restProps = __rest(_a, ["styleOverrides", "styleProvider", "formControl", "model", "defaultModel", "type", "prefix", "suffix", "password", "defaultPassword", "clearable", "placeholder", "size", "disabled", "inputProps", "onModelChange", "onClear", "onPasswordChange"]);
17
16
  const styled = useStyled(CLASSES, { input: styleProvider === null || styleProvider === void 0 ? void 0 : styleProvider.input }, styleOverrides);
18
17
  const { t } = useTranslation();
19
18
  const inputRef = useRef(null);
20
- const combineInputRef = useForkRef(inputRef, inputRefProp);
21
19
  const [value, changeValue] = useControlled(defaultModel !== null && defaultModel !== void 0 ? defaultModel : '', model, onModelChange, undefined, formControl === null || formControl === void 0 ? void 0 : formControl.control);
22
20
  const [password, changePassword] = useControlled(defaultPassword !== null && defaultPassword !== void 0 ? defaultPassword : true, passwordProp, onPasswordChange);
23
21
  const { size, disabled } = useScopedProps({ size: sizeProp, disabled: disabledProp || (formControl === null || formControl === void 0 ? void 0 : formControl.control.disabled) });
@@ -27,9 +25,6 @@ export const Input = (props) => {
27
25
  }
28
26
  };
29
27
  const designProps = useDesign({ compose: { disabled }, form: formControl });
30
- const inputNode = (_jsx(BaseInput, Object.assign({}, styled('input__input'), formControl === null || formControl === void 0 ? void 0 : formControl.inputAria, { ref: combineInputRef, value: value, type: type === 'password' ? (password ? 'password' : 'text') : type, placeholder: placeholder, disabled: disabled, onValueChange: (val) => {
31
- changeValue(val);
32
- } })));
33
28
  return (_jsxs("div", Object.assign({}, restProps, mergeCS(styled('input', `input--${size}`, {
34
29
  'input.is-disabled': disabled,
35
30
  }), {
@@ -47,7 +42,16 @@ export const Input = (props) => {
47
42
  var _a, _b;
48
43
  (_a = restProps.onClick) === null || _a === void 0 ? void 0 : _a.call(restProps, e);
49
44
  (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true });
50
- }, children: [checkNodeExist(prefix) && _jsx("div", Object.assign({}, styled('input__prefix'), { children: prefix })), inputRender ? inputRender(inputNode) : inputNode, clearable && !disabled && (_jsx("div", Object.assign({}, mergeCS(styled('input__clear'), { style: { opacity: value.length > 0 ? 1 : 0 } }), { role: "button", "aria-label": t('Clear'), onClick: () => {
45
+ }, children: [checkNodeExist(prefix) && _jsx("div", Object.assign({}, styled('input__prefix'), { children: prefix })), _jsx(BaseInput, Object.assign({}, inputProps, styled('input__input'), formControl === null || formControl === void 0 ? void 0 : formControl.inputAria, { ref: (instance) => {
46
+ inputRef.current = instance;
47
+ const ret = setRef(inputProps === null || inputProps === void 0 ? void 0 : inputProps.ref, instance);
48
+ return () => {
49
+ inputRef.current = null;
50
+ ret();
51
+ };
52
+ }, value: value, type: type === 'password' ? (password ? 'password' : 'text') : type, placeholder: placeholder, disabled: disabled, onValueChange: (val) => {
53
+ changeValue(val);
54
+ } })), clearable && !disabled && (_jsx("div", Object.assign({}, mergeCS(styled('input__clear'), { style: { opacity: value.length > 0 ? 1 : 0 } }), { role: "button", "aria-label": t('Clear'), onClick: () => {
51
55
  changeValue('');
52
56
  onClear === null || onClear === void 0 ? void 0 : onClear();
53
57
  }, children: _jsx(Icon, { children: _jsx(CancelFilled, {}) }) }))), type === 'password' && !disabled && (_jsx("div", Object.assign({}, styled('input__password'), { role: "button", "aria-label": t('Input', password ? 'Password is not visible' : 'Password is visible'), onClick: () => {
@@ -1,7 +1,7 @@
1
1
  import { __rest } from "tslib";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useAsync, useEvent, useForceUpdate, useForkRef, useRefExtra } from '@laser-ui/hooks';
4
- import { checkNodeExist } from '@laser-ui/utils';
3
+ import { useAsync, useEvent, useForceUpdate, useRefExtra } from '@laser-ui/hooks';
4
+ import { checkNodeExist, setRef } from '@laser-ui/utils';
5
5
  import CancelFilled from '@material-design-icons/svg/filled/cancel.svg?react';
6
6
  import KeyboardArrowDownOutlined from '@material-design-icons/svg/outlined/keyboard_arrow_down.svg?react';
7
7
  import KeyboardArrowUpOutlined from '@material-design-icons/svg/outlined/keyboard_arrow_up.svg?react';
@@ -13,7 +13,7 @@ import { useComponentProps, useControlled, useDesign, useScopedProps, useStyled,
13
13
  import { Icon } from '../icon';
14
14
  import { mergeCS } from '../utils';
15
15
  export function InputNumber(props) {
16
- const _a = useComponentProps('InputNumber', props), { styleOverrides, styleProvider, formControl, model, defaultModel, max, min, step = 1, integer = false, prefix, suffix, clearable, placeholder, size: sizeProp, numberButton = true, disabled: disabledProp = false, inputRef: inputRefProp, inputRender, onModelChange, onClear } = _a, restProps = __rest(_a, ["styleOverrides", "styleProvider", "formControl", "model", "defaultModel", "max", "min", "step", "integer", "prefix", "suffix", "clearable", "placeholder", "size", "numberButton", "disabled", "inputRef", "inputRender", "onModelChange", "onClear"]);
16
+ const _a = useComponentProps('InputNumber', props), { styleOverrides, styleProvider, formControl, model, defaultModel, max, min, step = 1, integer = false, prefix, suffix, clearable, placeholder, size: sizeProp, numberButton = true, disabled: disabledProp = false, inputProps, onModelChange, onClear } = _a, restProps = __rest(_a, ["styleOverrides", "styleProvider", "formControl", "model", "defaultModel", "max", "min", "step", "integer", "prefix", "suffix", "clearable", "placeholder", "size", "numberButton", "disabled", "inputProps", "onModelChange", "onClear"]);
17
17
  const styled = useStyled(CLASSES, { input: styleProvider === null || styleProvider === void 0 ? void 0 : styleProvider.input }, styleOverrides);
18
18
  const async = useAsync();
19
19
  const { t } = useTranslation();
@@ -21,9 +21,8 @@ export function InputNumber(props) {
21
21
  const dataRef = useRef({
22
22
  inputFocused: false,
23
23
  });
24
- const inputRef = useRef(null);
25
- const combineInputRef = useForkRef(inputRef, inputRefProp);
26
24
  const windowRef = useRefExtra(() => window);
25
+ const inputRef = useRef(null);
27
26
  const [value, _changeValue] = useControlled(defaultModel !== null && defaultModel !== void 0 ? defaultModel : null, model, onModelChange, undefined, formControl === null || formControl === void 0 ? void 0 : formControl.control);
28
27
  const inputValue = dataRef.current.inputFocused && !isUndefined(dataRef.current.inputValue)
29
28
  ? dataRef.current.inputValue
@@ -69,40 +68,6 @@ export function InputNumber(props) {
69
68
  }
70
69
  };
71
70
  const designProps = useDesign({ compose: { disabled }, form: formControl });
72
- const inputNode = (_jsx(BaseInput, Object.assign({}, styled('input__input'), formControl === null || formControl === void 0 ? void 0 : formControl.inputAria, { ref: combineInputRef, value: inputValue, max: max, min: min, step: step, type: "number", placeholder: placeholder, disabled: disabled, onValueChange: (val) => {
73
- forceUpdate();
74
- dataRef.current.inputValue = val;
75
- if (val.length === 0) {
76
- changeValue(null);
77
- }
78
- else {
79
- const num = Number(val);
80
- if ((isUndefined(max) || num <= max) && (isUndefined(min) || num >= min) && (!integer || Number.isInteger(num))) {
81
- changeValue(num);
82
- }
83
- }
84
- }, onFocus: () => {
85
- dataRef.current.inputFocused = true;
86
- dataRef.current.inputValue = undefined;
87
- }, onBlur: () => {
88
- dataRef.current.inputFocused = false;
89
- if (inputValue.length === 0) {
90
- changeValue(null);
91
- }
92
- else {
93
- let num = Number(inputValue);
94
- if (!isUndefined(max) && num > max) {
95
- num = max;
96
- }
97
- if (!isUndefined(min) && num < min) {
98
- num = min;
99
- }
100
- if (integer && !Number.isInteger(num)) {
101
- num = Math.round(num);
102
- }
103
- changeValue(num);
104
- }
105
- } })));
106
71
  return (_jsxs("div", Object.assign({}, restProps, mergeCS(styled('input', `input--${size}`, {
107
72
  'input.is-disabled': disabled,
108
73
  }), {
@@ -120,7 +85,51 @@ export function InputNumber(props) {
120
85
  var _a, _b;
121
86
  (_a = restProps.onClick) === null || _a === void 0 ? void 0 : _a.call(restProps, e);
122
87
  (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true });
123
- }, children: [checkNodeExist(prefix) && _jsx("div", Object.assign({}, styled('input__prefix'), { children: prefix })), inputRender ? inputRender(inputNode) : inputNode, clearable && !disabled && (_jsx("div", Object.assign({}, mergeCS(styled('input__clear'), { style: { opacity: inputValue.length > 0 ? 1 : 0 } }), { role: "button", "aria-label": t('Clear'), onClick: () => {
88
+ }, children: [checkNodeExist(prefix) && _jsx("div", Object.assign({}, styled('input__prefix'), { children: prefix })), _jsx(BaseInput, Object.assign({}, inputProps, styled('input__input'), formControl === null || formControl === void 0 ? void 0 : formControl.inputAria, { ref: (instance) => {
89
+ inputRef.current = instance;
90
+ const ret = setRef(inputProps === null || inputProps === void 0 ? void 0 : inputProps.ref, instance);
91
+ return () => {
92
+ inputRef.current = null;
93
+ ret();
94
+ };
95
+ }, value: inputValue, max: max, min: min, step: step, type: "number", placeholder: placeholder, disabled: disabled, onValueChange: (val) => {
96
+ forceUpdate();
97
+ dataRef.current.inputValue = val;
98
+ if (val.length === 0) {
99
+ changeValue(null);
100
+ }
101
+ else {
102
+ const num = Number(val);
103
+ if ((isUndefined(max) || num <= max) && (isUndefined(min) || num >= min) && (!integer || Number.isInteger(num))) {
104
+ changeValue(num);
105
+ }
106
+ }
107
+ }, onFocus: (e) => {
108
+ var _a;
109
+ (_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onFocus) === null || _a === void 0 ? void 0 : _a.call(inputProps, e);
110
+ dataRef.current.inputFocused = true;
111
+ dataRef.current.inputValue = undefined;
112
+ }, onBlur: (e) => {
113
+ var _a;
114
+ (_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onBlur) === null || _a === void 0 ? void 0 : _a.call(inputProps, e);
115
+ dataRef.current.inputFocused = false;
116
+ if (inputValue.length === 0) {
117
+ changeValue(null);
118
+ }
119
+ else {
120
+ let num = Number(inputValue);
121
+ if (!isUndefined(max) && num > max) {
122
+ num = max;
123
+ }
124
+ if (!isUndefined(min) && num < min) {
125
+ num = min;
126
+ }
127
+ if (integer && !Number.isInteger(num)) {
128
+ num = Math.round(num);
129
+ }
130
+ changeValue(num);
131
+ }
132
+ } })), clearable && !disabled && (_jsx("div", Object.assign({}, mergeCS(styled('input__clear'), { style: { opacity: inputValue.length > 0 ? 1 : 0 } }), { role: "button", "aria-label": t('Clear'), onClick: () => {
124
133
  changeValue(null);
125
134
  onClear === null || onClear === void 0 ? void 0 : onClear();
126
135
  }, children: _jsx(Icon, { children: _jsx(CancelFilled, {}) }) }))), numberButton && !disabled && (_jsxs("div", Object.assign({}, styled('input__number-container'), { children: [_jsx("div", Object.assign({}, styled('input__number'), { role: "button", "aria-label": t('Input', 'Increase number'), onMouseDown: (e) => {
package/input/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import type { CLASSES } from './vars';
3
3
  import type { FormControlProvider } from '../form/types';
4
- import type { BaseProps, CloneHTMLElement, Size } from '../types';
4
+ import type { BaseProps, Size } from '../types';
5
5
  export {};
6
6
  export interface InputProps extends BaseProps<'input', typeof CLASSES>, Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'prefix'> {
7
7
  formControl?: FormControlProvider;
@@ -16,8 +16,7 @@ export interface InputProps extends BaseProps<'input', typeof CLASSES>, Omit<Rea
16
16
  placeholder?: string;
17
17
  size?: Size;
18
18
  disabled?: boolean;
19
- inputRef?: React.ForwardedRef<HTMLInputElement>;
20
- inputRender?: CloneHTMLElement;
19
+ inputProps?: React.ComponentPropsWithRef<'input'>;
21
20
  onModelChange?: (value: string) => void;
22
21
  onClear?: () => void;
23
22
  onPasswordChange?: (value: boolean) => void;
@@ -37,8 +36,7 @@ export interface InputNumberProps extends BaseProps<'input', typeof CLASSES>, Om
37
36
  size?: Size;
38
37
  numberButton?: boolean;
39
38
  disabled?: boolean;
40
- inputRef?: React.ForwardedRef<HTMLInputElement>;
41
- inputRender?: CloneHTMLElement;
39
+ inputProps?: React.ComponentPropsWithRef<'input'>;
42
40
  onModelChange?: (value: number | null) => void;
43
41
  onClear?: () => void;
44
42
  }
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import type { LazyLoadingProps } from './types';
3
+ export declare function LazyLoading(props: LazyLoadingProps): React.ReactNode;
@@ -0,0 +1,9 @@
1
+ import { useRef } from 'react';
2
+ export function LazyLoading(props) {
3
+ const { children, hidden, disabled = false } = props;
4
+ const loaded = useRef(disabled ? true : !hidden);
5
+ if (!hidden) {
6
+ loaded.current = true;
7
+ }
8
+ return loaded.current ? children : null;
9
+ }
@@ -0,0 +1,2 @@
1
+ export type { LazyLoadingProps } from './types';
2
+ export { LazyLoading } from './LazyLoading';
@@ -0,0 +1 @@
1
+ export { LazyLoading } from './LazyLoading';
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ export {};
3
+ export interface LazyLoadingProps {
4
+ children?: React.ReactNode;
5
+ hidden: boolean;
6
+ disabled?: boolean;
7
+ }
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import type { PopupProps } from './types';
3
- export declare function Popup(props: PopupProps): JSX.Element | null;
3
+ export declare function Popup(props: PopupProps): React.ReactElement | null;