asterui 0.12.15 → 0.12.16

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 (149) hide show
  1. package/README.md +1 -1
  2. package/dist/components/HoverGallery.d.ts +10 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +156 -154
  5. package/dist/index.js.map +1 -1
  6. package/dist/index100.js +11 -43
  7. package/dist/index100.js.map +1 -1
  8. package/dist/index101.js +44 -11
  9. package/dist/index101.js.map +1 -1
  10. package/dist/index102.js +10 -12
  11. package/dist/index102.js.map +1 -1
  12. package/dist/index103.js +14 -7
  13. package/dist/index103.js.map +1 -1
  14. package/dist/index104.js +7 -12
  15. package/dist/index104.js.map +1 -1
  16. package/dist/index105.js +11 -29
  17. package/dist/index105.js.map +1 -1
  18. package/dist/index106.js +29 -16
  19. package/dist/index106.js.map +1 -1
  20. package/dist/index107.js +21 -0
  21. package/dist/index107.js.map +1 -0
  22. package/dist/index21.js +1 -1
  23. package/dist/index37.js +15 -120
  24. package/dist/index37.js.map +1 -1
  25. package/dist/index38.js +119 -37
  26. package/dist/index38.js.map +1 -1
  27. package/dist/index39.js +40 -398
  28. package/dist/index39.js.map +1 -1
  29. package/dist/index40.js +390 -89
  30. package/dist/index40.js.map +1 -1
  31. package/dist/index41.js +90 -215
  32. package/dist/index41.js.map +1 -1
  33. package/dist/index42.js +211 -144
  34. package/dist/index42.js.map +1 -1
  35. package/dist/index43.js +155 -15
  36. package/dist/index43.js.map +1 -1
  37. package/dist/index44.js +15 -17
  38. package/dist/index44.js.map +1 -1
  39. package/dist/index45.js +17 -21
  40. package/dist/index45.js.map +1 -1
  41. package/dist/index46.js +18 -134
  42. package/dist/index46.js.map +1 -1
  43. package/dist/index47.js +134 -10
  44. package/dist/index47.js.map +1 -1
  45. package/dist/index48.js +13 -35
  46. package/dist/index48.js.map +1 -1
  47. package/dist/index49.js +35 -34
  48. package/dist/index49.js.map +1 -1
  49. package/dist/index50.js +34 -81
  50. package/dist/index50.js.map +1 -1
  51. package/dist/index51.js +71 -166
  52. package/dist/index51.js.map +1 -1
  53. package/dist/index52.js +167 -144
  54. package/dist/index52.js.map +1 -1
  55. package/dist/index53.js +152 -11
  56. package/dist/index53.js.map +1 -1
  57. package/dist/index54.js +10 -20
  58. package/dist/index54.js.map +1 -1
  59. package/dist/index55.js +22 -14
  60. package/dist/index55.js.map +1 -1
  61. package/dist/index56.js +14 -7
  62. package/dist/index56.js.map +1 -1
  63. package/dist/index57.js +6 -333
  64. package/dist/index57.js.map +1 -1
  65. package/dist/index58.js +334 -47
  66. package/dist/index58.js.map +1 -1
  67. package/dist/index59.js +47 -122
  68. package/dist/index59.js.map +1 -1
  69. package/dist/index60.js +120 -108
  70. package/dist/index60.js.map +1 -1
  71. package/dist/index61.js +107 -167
  72. package/dist/index61.js.map +1 -1
  73. package/dist/index62.js +167 -29
  74. package/dist/index62.js.map +1 -1
  75. package/dist/index63.js +30 -120
  76. package/dist/index63.js.map +1 -1
  77. package/dist/index64.js +116 -80
  78. package/dist/index64.js.map +1 -1
  79. package/dist/index65.js +85 -19
  80. package/dist/index65.js.map +1 -1
  81. package/dist/index66.js +19 -73
  82. package/dist/index66.js.map +1 -1
  83. package/dist/index67.js +71 -54
  84. package/dist/index67.js.map +1 -1
  85. package/dist/index68.js +56 -44
  86. package/dist/index68.js.map +1 -1
  87. package/dist/index69.js +42 -49
  88. package/dist/index69.js.map +1 -1
  89. package/dist/index70.js +50 -121
  90. package/dist/index70.js.map +1 -1
  91. package/dist/index71.js +118 -102
  92. package/dist/index71.js.map +1 -1
  93. package/dist/index72.js +107 -41
  94. package/dist/index72.js.map +1 -1
  95. package/dist/index73.js +41 -68
  96. package/dist/index73.js.map +1 -1
  97. package/dist/index74.js +66 -19
  98. package/dist/index74.js.map +1 -1
  99. package/dist/index75.js +18 -55
  100. package/dist/index75.js.map +1 -1
  101. package/dist/index76.js +55 -251
  102. package/dist/index76.js.map +1 -1
  103. package/dist/index77.js +254 -22
  104. package/dist/index77.js.map +1 -1
  105. package/dist/index78.js +22 -31
  106. package/dist/index78.js.map +1 -1
  107. package/dist/index79.js +30 -93
  108. package/dist/index79.js.map +1 -1
  109. package/dist/index80.js +89 -324
  110. package/dist/index80.js.map +1 -1
  111. package/dist/index81.js +322 -73
  112. package/dist/index81.js.map +1 -1
  113. package/dist/index82.js +79 -39
  114. package/dist/index82.js.map +1 -1
  115. package/dist/index83.js +40 -23
  116. package/dist/index83.js.map +1 -1
  117. package/dist/index84.js +21 -93
  118. package/dist/index84.js.map +1 -1
  119. package/dist/index85.js +87 -148
  120. package/dist/index85.js.map +1 -1
  121. package/dist/index86.js +147 -152
  122. package/dist/index86.js.map +1 -1
  123. package/dist/index87.js +159 -63
  124. package/dist/index87.js.map +1 -1
  125. package/dist/index88.js +65 -35
  126. package/dist/index88.js.map +1 -1
  127. package/dist/index89.js +35 -234
  128. package/dist/index89.js.map +1 -1
  129. package/dist/index90.js +231 -31
  130. package/dist/index90.js.map +1 -1
  131. package/dist/index91.js +34 -210
  132. package/dist/index91.js.map +1 -1
  133. package/dist/index92.js +195 -198
  134. package/dist/index92.js.map +1 -1
  135. package/dist/index93.js +159 -241
  136. package/dist/index93.js.map +1 -1
  137. package/dist/index94.js +283 -166
  138. package/dist/index94.js.map +1 -1
  139. package/dist/index95.js +173 -253
  140. package/dist/index95.js.map +1 -1
  141. package/dist/index96.js +258 -14
  142. package/dist/index96.js.map +1 -1
  143. package/dist/index97.js +12 -31
  144. package/dist/index97.js.map +1 -1
  145. package/dist/index98.js +32 -5
  146. package/dist/index98.js.map +1 -1
  147. package/dist/index99.js +5 -13
  148. package/dist/index99.js.map +1 -1
  149. package/package.json +1 -1
package/README.md CHANGED
@@ -86,7 +86,7 @@ export default function App() {
86
86
  </Form.Item>
87
87
  <Link size="sm">Forgot password?</Link>
88
88
  </Space>
89
- <Button type="primary" htmlType="submit" shape="block">
89
+ <Button color="primary" htmlType="submit" shape="block">
90
90
  Sign In
91
91
  </Button>
92
92
  <Divider>or</Divider>
@@ -0,0 +1,10 @@
1
+ import { default as React } from 'react';
2
+ export interface HoverGalleryProps {
3
+ /** Image sources (2-10 images) */
4
+ images: string[];
5
+ /** Alt text for images (optional, uses index if not provided) */
6
+ alts?: string[];
7
+ /** Additional CSS classes */
8
+ className?: string;
9
+ }
10
+ export declare const HoverGallery: React.FC<HoverGalleryProps>;
package/dist/index.d.ts CHANGED
@@ -68,6 +68,8 @@ export { Grid, Row, Col } from './components/Grid';
68
68
  export type { RowProps, ColProps } from './components/Grid';
69
69
  export { Hero } from './components/Hero';
70
70
  export type { HeroProps } from './components/Hero';
71
+ export { HoverGallery } from './components/HoverGallery';
72
+ export type { HoverGalleryProps } from './components/HoverGallery';
71
73
  export { Image } from './components/Image';
72
74
  export type { ImageProps } from './components/Image';
73
75
  export { Indicator } from './components/Indicator';
package/dist/index.js CHANGED
@@ -3,19 +3,19 @@ import { Anchor as p } from "./index3.js";
3
3
  import { Alert as f } from "./index4.js";
4
4
  import { Autocomplete as a } from "./index5.js";
5
5
  import { Avatar as n, AvatarGroup as s } from "./index6.js";
6
- import { Badge as l } from "./index7.js";
6
+ import { Badge as u } from "./index7.js";
7
7
  import { Breadcrumb as c } from "./index8.js";
8
8
  import { Button as T } from "./index9.js";
9
9
  import { Checkbox as P } from "./index10.js";
10
10
  import { Chat as b } from "./index11.js";
11
11
  import { ColorPicker as D } from "./index12.js";
12
12
  import { Card as w } from "./index13.js";
13
- import { Cascader as F } from "./index14.js";
14
- import { Chart as v } from "./index15.js";
13
+ import { Cascader as v } from "./index14.js";
14
+ import { Chart as R } from "./index15.js";
15
15
  import { Carousel as A } from "./index16.js";
16
16
  import { Collapse as L } from "./index17.js";
17
17
  import { Container as H } from "./index18.js";
18
- import { ContextMenu as G } from "./index19.js";
18
+ import { ContextMenu as K } from "./index19.js";
19
19
  import { Countdown as O } from "./index20.js";
20
20
  import { DatePicker as z } from "./index21.js";
21
21
  import { Descriptions as J } from "./index22.js";
@@ -30,79 +30,80 @@ import { Filter as mo } from "./index30.js";
30
30
  import { Flex as xo } from "./index31.js";
31
31
  import { FloatButton as io } from "./index32.js";
32
32
  import { Footer as so } from "./index33.js";
33
- import { Form as lo, useFormInstance as co } from "./index34.js";
33
+ import { Form as uo, useFormInstance as co } from "./index34.js";
34
34
  import { Col as To, Grid as go, Row as Po } from "./index35.js";
35
35
  import { Hero as bo } from "./index36.js";
36
- import { Image as Do } from "./index37.js";
37
- import { Indicator as wo } from "./index38.js";
38
- import { Dropdown as Fo } from "./index39.js";
39
- import { Empty as vo } from "./index40.js";
40
- import { Input as Ao } from "./index41.js";
41
- import { InputNumber as Lo } from "./index42.js";
42
- import { Join as Ho } from "./index43.js";
43
- import { Kbd as Go } from "./index44.js";
44
- import { Label as Oo } from "./index45.js";
45
- import { Layout as zo, useSiderContext as Eo } from "./index46.js";
46
- import { List as Qo } from "./index47.js";
47
- import { Loading as jo } from "./index48.js";
48
- import { Mask as Vo } from "./index49.js";
49
- import { Masonry as Yo } from "./index50.js";
50
- import { Mention as _o } from "./index51.js";
51
- import { Menu as or } from "./index52.js";
52
- import { Browser as er } from "./index53.js";
53
- import { Code as pr } from "./index54.js";
54
- import { Phone as fr } from "./index55.js";
55
- import { Window as ar } from "./index56.js";
56
- import { Modal as nr } from "./index57.js";
57
- import { Navbar as ur } from "./index58.js";
58
- import { notification as dr } from "./index59.js";
59
- import { OTPInput as Cr } from "./index60.js";
60
- import { Pagination as gr } from "./index61.js";
61
- import { PageLayout as Sr } from "./index62.js";
62
- import { Popconfirm as kr } from "./index63.js";
63
- import { Popover as hr } from "./index64.js";
64
- import { Progress as yr } from "./index65.js";
65
- import { QRCode as Rr } from "./index66.js";
66
- import { Radio as Ir } from "./index67.js";
67
- import { RadialProgress as Br } from "./index68.js";
68
- import { Range as Mr } from "./index69.js";
69
- import { Rating as Kr } from "./index70.js";
70
- import { Result as Nr } from "./index71.js";
71
- import { Select as Wr } from "./index72.js";
72
- import { Segmented as Er } from "./index73.js";
73
- import { Skeleton as Qr } from "./index74.js";
74
- import { Space as jr } from "./index75.js";
75
- import { Splitter as Vr } from "./index76.js";
76
- import { Stats as Yr } from "./index77.js";
77
- import { Status as _r } from "./index78.js";
78
- import { Steps as oe } from "./index79.js";
79
- import { Table as ee } from "./index80.js";
80
- import { Tabs as pe } from "./index81.js";
81
- import { Textarea as fe } from "./index82.js";
82
- import { TextRotate as ae } from "./index83.js";
83
- import { CheckableTag as ne, Tag as se } from "./index84.js";
84
- import { ThemeController as le } from "./index85.js";
85
- import { TimePicker as ce } from "./index86.js";
86
- import { Timeline as Te } from "./index87.js";
87
- import { Toggle as Pe } from "./index88.js";
88
- import { Tour as be } from "./index89.js";
89
- import { Tooltip as De } from "./index90.js";
90
- import { Transfer as we } from "./index91.js";
91
- import { Tree as Fe } from "./index92.js";
92
- import { TreeSelect as ve } from "./index93.js";
93
- import { Typography as Ae } from "./index94.js";
94
- import { Upload as Le } from "./index95.js";
95
- import { Hide as He, Show as Ke } from "./index96.js";
96
- import { useBreakpoint as Ne } from "./index97.js";
97
- import { useDisclosure as We } from "./index98.js";
98
- import { useClipboard as Ee } from "./index99.js";
99
- import { useLocalStorage as Qe } from "./index100.js";
100
- import { useDebounce as je } from "./index101.js";
101
- import { useClickOutside as Ve } from "./index102.js";
102
- import { usePrevious as Ye } from "./index103.js";
103
- import { useHover as _e } from "./index104.js";
104
- import { useKeyPress as ot, useKeyPressCallback as rt } from "./index105.js";
105
- import { useWindowSize as tt } from "./index106.js";
36
+ import { HoverGallery as Do } from "./index37.js";
37
+ import { Image as wo } from "./index38.js";
38
+ import { Indicator as vo } from "./index39.js";
39
+ import { Dropdown as Ro } from "./index40.js";
40
+ import { Empty as Ao } from "./index41.js";
41
+ import { Input as Lo } from "./index42.js";
42
+ import { InputNumber as Ho } from "./index43.js";
43
+ import { Join as Ko } from "./index44.js";
44
+ import { Kbd as Oo } from "./index45.js";
45
+ import { Label as zo } from "./index46.js";
46
+ import { Layout as Jo, useSiderContext as Qo } from "./index47.js";
47
+ import { List as jo } from "./index48.js";
48
+ import { Loading as Vo } from "./index49.js";
49
+ import { Mask as Yo } from "./index50.js";
50
+ import { Masonry as _o } from "./index51.js";
51
+ import { Mention as or } from "./index52.js";
52
+ import { Menu as er } from "./index53.js";
53
+ import { Browser as pr } from "./index54.js";
54
+ import { Code as fr } from "./index55.js";
55
+ import { Phone as ar } from "./index56.js";
56
+ import { Window as nr } from "./index57.js";
57
+ import { Modal as lr } from "./index58.js";
58
+ import { Navbar as dr } from "./index59.js";
59
+ import { notification as Cr } from "./index60.js";
60
+ import { OTPInput as gr } from "./index61.js";
61
+ import { Pagination as Sr } from "./index62.js";
62
+ import { PageLayout as kr } from "./index63.js";
63
+ import { Popconfirm as hr } from "./index64.js";
64
+ import { Popover as yr } from "./index65.js";
65
+ import { Progress as Fr } from "./index66.js";
66
+ import { QRCode as Ir } from "./index67.js";
67
+ import { Radio as Br } from "./index68.js";
68
+ import { RadialProgress as Mr } from "./index69.js";
69
+ import { Range as Gr } from "./index70.js";
70
+ import { Rating as Nr } from "./index71.js";
71
+ import { Result as Wr } from "./index72.js";
72
+ import { Select as Er } from "./index73.js";
73
+ import { Segmented as Qr } from "./index74.js";
74
+ import { Skeleton as jr } from "./index75.js";
75
+ import { Space as Vr } from "./index76.js";
76
+ import { Splitter as Yr } from "./index77.js";
77
+ import { Stats as _r } from "./index78.js";
78
+ import { Status as oe } from "./index79.js";
79
+ import { Steps as ee } from "./index80.js";
80
+ import { Table as pe } from "./index81.js";
81
+ import { Tabs as fe } from "./index82.js";
82
+ import { Textarea as ae } from "./index83.js";
83
+ import { TextRotate as ne } from "./index84.js";
84
+ import { CheckableTag as le, Tag as ue } from "./index85.js";
85
+ import { ThemeController as ce } from "./index86.js";
86
+ import { TimePicker as Te } from "./index87.js";
87
+ import { Timeline as Pe } from "./index88.js";
88
+ import { Toggle as be } from "./index89.js";
89
+ import { Tour as De } from "./index90.js";
90
+ import { Tooltip as we } from "./index91.js";
91
+ import { Transfer as ve } from "./index92.js";
92
+ import { Tree as Re } from "./index93.js";
93
+ import { TreeSelect as Ae } from "./index94.js";
94
+ import { Typography as Le } from "./index95.js";
95
+ import { Upload as He } from "./index96.js";
96
+ import { Hide as Ke, Show as Ne } from "./index97.js";
97
+ import { useBreakpoint as We } from "./index98.js";
98
+ import { useDisclosure as Ee } from "./index99.js";
99
+ import { useClipboard as Qe } from "./index100.js";
100
+ import { useLocalStorage as je } from "./index101.js";
101
+ import { useDebounce as Ve } from "./index102.js";
102
+ import { useClickOutside as Ye } from "./index103.js";
103
+ import { usePrevious as _e } from "./index104.js";
104
+ import { useHover as ot } from "./index105.js";
105
+ import { useKeyPress as et, useKeyPressCallback as tt } from "./index106.js";
106
+ import { useWindowSize as mt } from "./index107.js";
106
107
  export {
107
108
  e as Affix,
108
109
  f as Alert,
@@ -110,23 +111,23 @@ export {
110
111
  a as Autocomplete,
111
112
  n as Avatar,
112
113
  s as AvatarGroup,
113
- l as Badge,
114
+ u as Badge,
114
115
  c as Breadcrumb,
115
- er as Browser,
116
+ pr as Browser,
116
117
  T as Button,
117
118
  w as Card,
118
119
  A as Carousel,
119
- F as Cascader,
120
- v as Chart,
120
+ v as Cascader,
121
+ R as Chart,
121
122
  b as Chat,
122
- ne as CheckableTag,
123
+ le as CheckableTag,
123
124
  P as Checkbox,
124
- pr as Code,
125
+ fr as Code,
125
126
  To as Col,
126
127
  L as Collapse,
127
128
  D as ColorPicker,
128
129
  H as Container,
129
- G as ContextMenu,
130
+ K as ContextMenu,
130
131
  O as Countdown,
131
132
  z as DatePicker,
132
133
  J as Descriptions,
@@ -134,88 +135,89 @@ export {
134
135
  X as Divider,
135
136
  q as Dock,
136
137
  Z as Drawer,
137
- Fo as Dropdown,
138
- vo as Empty,
138
+ Ro as Dropdown,
139
+ Ao as Empty,
139
140
  ro as Fieldset,
140
141
  to as FileInput,
141
142
  mo as Filter,
142
143
  xo as Flex,
143
144
  io as FloatButton,
144
145
  so as Footer,
145
- lo as Form,
146
+ uo as Form,
146
147
  go as Grid,
147
148
  bo as Hero,
148
- He as Hide,
149
- Do as Image,
150
- wo as Indicator,
151
- Ao as Input,
152
- Lo as InputNumber,
153
- Ho as Join,
154
- Go as Kbd,
155
- Oo as Label,
156
- zo as Layout,
157
- Qo as List,
158
- jo as Loading,
159
- Vo as Mask,
160
- Yo as Masonry,
161
- _o as Mention,
162
- or as Menu,
163
- nr as Modal,
164
- ur as Navbar,
165
- Cr as OTPInput,
166
- Sr as PageLayout,
167
- gr as Pagination,
168
- fr as Phone,
169
- kr as Popconfirm,
170
- hr as Popover,
171
- yr as Progress,
172
- Rr as QRCode,
173
- Br as RadialProgress,
174
- Ir as Radio,
175
- Mr as Range,
176
- Kr as Rating,
177
- Nr as Result,
149
+ Ke as Hide,
150
+ Do as HoverGallery,
151
+ wo as Image,
152
+ vo as Indicator,
153
+ Lo as Input,
154
+ Ho as InputNumber,
155
+ Ko as Join,
156
+ Oo as Kbd,
157
+ zo as Label,
158
+ Jo as Layout,
159
+ jo as List,
160
+ Vo as Loading,
161
+ Yo as Mask,
162
+ _o as Masonry,
163
+ or as Mention,
164
+ er as Menu,
165
+ lr as Modal,
166
+ dr as Navbar,
167
+ gr as OTPInput,
168
+ kr as PageLayout,
169
+ Sr as Pagination,
170
+ ar as Phone,
171
+ hr as Popconfirm,
172
+ yr as Popover,
173
+ Fr as Progress,
174
+ Ir as QRCode,
175
+ Mr as RadialProgress,
176
+ Br as Radio,
177
+ Gr as Range,
178
+ Nr as Rating,
179
+ Wr as Result,
178
180
  Po as Row,
179
- Er as Segmented,
180
- Wr as Select,
181
- Ke as Show,
181
+ Qr as Segmented,
182
+ Er as Select,
183
+ Ne as Show,
182
184
  $ as SidebarDrawer,
183
- Qr as Skeleton,
184
- jr as Space,
185
- Vr as Splitter,
186
- Yr as Stats,
187
- _r as Status,
188
- oe as Steps,
189
- ee as Table,
190
- pe as Tabs,
191
- se as Tag,
192
- ae as TextRotate,
193
- fe as Textarea,
194
- le as ThemeController,
195
- ce as TimePicker,
196
- Te as Timeline,
197
- Pe as Toggle,
198
- De as Tooltip,
199
- be as Tour,
200
- we as Transfer,
201
- Fe as Tree,
202
- ve as TreeSelect,
203
- Ae as Typography,
204
- Le as Upload,
205
- ar as Window,
206
- dr as notification,
207
- Ne as useBreakpoint,
208
- Ve as useClickOutside,
209
- Ee as useClipboard,
210
- je as useDebounce,
211
- We as useDisclosure,
185
+ jr as Skeleton,
186
+ Vr as Space,
187
+ Yr as Splitter,
188
+ _r as Stats,
189
+ oe as Status,
190
+ ee as Steps,
191
+ pe as Table,
192
+ fe as Tabs,
193
+ ue as Tag,
194
+ ne as TextRotate,
195
+ ae as Textarea,
196
+ ce as ThemeController,
197
+ Te as TimePicker,
198
+ Pe as Timeline,
199
+ be as Toggle,
200
+ we as Tooltip,
201
+ De as Tour,
202
+ ve as Transfer,
203
+ Re as Tree,
204
+ Ae as TreeSelect,
205
+ Le as Typography,
206
+ He as Upload,
207
+ nr as Window,
208
+ Cr as notification,
209
+ We as useBreakpoint,
210
+ Ye as useClickOutside,
211
+ Qe as useClipboard,
212
+ Ve as useDebounce,
213
+ Ee as useDisclosure,
212
214
  co as useFormInstance,
213
- _e as useHover,
214
- ot as useKeyPress,
215
- rt as useKeyPressCallback,
216
- Qe as useLocalStorage,
217
- Ye as usePrevious,
218
- Eo as useSiderContext,
219
- tt as useWindowSize
215
+ ot as useHover,
216
+ et as useKeyPress,
217
+ tt as useKeyPressCallback,
218
+ je as useLocalStorage,
219
+ _e as usePrevious,
220
+ Qo as useSiderContext,
221
+ mt as useWindowSize
220
222
  };
221
223
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index100.js CHANGED
@@ -1,49 +1,17 @@
1
- import { useState as u, useCallback as c, useEffect as f } from "react";
2
- function S(o, t) {
3
- const [s, n] = u(() => {
4
- if (typeof window > "u")
5
- return t;
1
+ import { useState as a, useCallback as s } from "react";
2
+ function p(t = 2e3) {
3
+ const [n, r] = a(!1), [l, e] = a(null), c = s(async (i) => {
6
4
  try {
7
- const e = window.localStorage.getItem(o);
8
- return e ? JSON.parse(e) : t;
9
- } catch {
10
- return t;
5
+ return await navigator.clipboard.writeText(i), r(!0), e(null), setTimeout(() => r(!1), t), !0;
6
+ } catch (o) {
7
+ return e(o instanceof Error ? o : new Error("Failed to copy")), r(!1), !1;
11
8
  }
12
- }), d = c(
13
- (e) => {
14
- n((r) => {
15
- const a = e instanceof Function ? e(r) : e;
16
- if (typeof window < "u")
17
- try {
18
- window.localStorage.setItem(o, JSON.stringify(a));
19
- } catch (l) {
20
- console.warn(`Failed to save to localStorage key "${o}":`, l);
21
- }
22
- return a;
23
- });
24
- },
25
- [o]
26
- ), w = c(() => {
27
- if (typeof window < "u")
28
- try {
29
- window.localStorage.removeItem(o);
30
- } catch (e) {
31
- console.warn(`Failed to remove localStorage key "${o}":`, e);
32
- }
33
- n(t);
34
- }, [o, t]);
35
- return f(() => {
36
- const e = (r) => {
37
- if (r.key === o && r.newValue !== null)
38
- try {
39
- n(JSON.parse(r.newValue));
40
- } catch {
41
- }
42
- };
43
- return window.addEventListener("storage", e), () => window.removeEventListener("storage", e);
44
- }, [o]), [s, d, w];
9
+ }, [t]), u = s(() => {
10
+ r(!1), e(null);
11
+ }, []);
12
+ return { copy: c, copied: n, error: l, reset: u };
45
13
  }
46
14
  export {
47
- S as useLocalStorage
15
+ p as useClipboard
48
16
  };
49
17
  //# sourceMappingURL=index100.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index100.js","sources":["../src/hooks/useLocalStorage.ts"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react'\n\n/**\n * Hook for persisting state to localStorage.\n *\n * @param key - localStorage key\n * @param initialValue - Initial value if key doesn't exist\n * @returns [value, setValue, removeValue] tuple\n *\n * @example\n * const [theme, setTheme] = useLocalStorage('theme', 'light')\n * const [user, setUser, removeUser] = useLocalStorage('user', null)\n */\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((prev: T) => T)) => void, () => void] {\n // Get initial value from localStorage or use default\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n\n try {\n const item = window.localStorage.getItem(key)\n return item ? (JSON.parse(item) as T) : initialValue\n } catch {\n return initialValue\n }\n })\n\n // Update localStorage when value changes\n const setValue = useCallback(\n (value: T | ((prev: T) => T)) => {\n setStoredValue(prev => {\n const valueToStore = value instanceof Function ? value(prev) : value\n\n if (typeof window !== 'undefined') {\n try {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n } catch (error) {\n console.warn(`Failed to save to localStorage key \"${key}\":`, error)\n }\n }\n\n return valueToStore\n })\n },\n [key]\n )\n\n // Remove from localStorage\n const removeValue = useCallback(() => {\n if (typeof window !== 'undefined') {\n try {\n window.localStorage.removeItem(key)\n } catch (error) {\n console.warn(`Failed to remove localStorage key \"${key}\":`, error)\n }\n }\n setStoredValue(initialValue)\n }, [key, initialValue])\n\n // Sync with other tabs/windows\n useEffect(() => {\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue) as T)\n } catch {\n // Ignore parse errors\n }\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n return () => window.removeEventListener('storage', handleStorageChange)\n }, [key])\n\n return [storedValue, setValue, removeValue]\n}\n"],"names":["useLocalStorage","key","initialValue","storedValue","setStoredValue","useState","item","setValue","useCallback","value","prev","valueToStore","error","removeValue","useEffect","handleStorageChange","e"],"mappings":";AAaO,SAASA,EACdC,GACAC,GACwD;AAExD,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAY,MAAM;AACtD,QAAI,OAAO,SAAW;AACpB,aAAOH;AAGT,QAAI;AACF,YAAMI,IAAO,OAAO,aAAa,QAAQL,CAAG;AAC5C,aAAOK,IAAQ,KAAK,MAAMA,CAAI,IAAUJ;AAAA,IAC1C,QAAQ;AACN,aAAOA;AAAA,IACT;AAAA,EACF,CAAC,GAGKK,IAAWC;AAAA,IACf,CAACC,MAAgC;AAC/B,MAAAL,EAAe,CAAAM,MAAQ;AACrB,cAAMC,IAAeF,aAAiB,WAAWA,EAAMC,CAAI,IAAID;AAE/D,YAAI,OAAO,SAAW;AACpB,cAAI;AACF,mBAAO,aAAa,QAAQR,GAAK,KAAK,UAAUU,CAAY,CAAC;AAAA,UAC/D,SAASC,GAAO;AACd,oBAAQ,KAAK,uCAAuCX,CAAG,MAAMW,CAAK;AAAA,UACpE;AAGF,eAAOD;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAACV,CAAG;AAAA,EAAA,GAIAY,IAAcL,EAAY,MAAM;AACpC,QAAI,OAAO,SAAW;AACpB,UAAI;AACF,eAAO,aAAa,WAAWP,CAAG;AAAA,MACpC,SAASW,GAAO;AACd,gBAAQ,KAAK,sCAAsCX,CAAG,MAAMW,CAAK;AAAA,MACnE;AAEF,IAAAR,EAAeF,CAAY;AAAA,EAC7B,GAAG,CAACD,GAAKC,CAAY,CAAC;AAGtB,SAAAY,EAAU,MAAM;AACd,UAAMC,IAAsB,CAACC,MAAoB;AAC/C,UAAIA,EAAE,QAAQf,KAAOe,EAAE,aAAa;AAClC,YAAI;AACF,UAAAZ,EAAe,KAAK,MAAMY,EAAE,QAAQ,CAAM;AAAA,QAC5C,QAAQ;AAAA,QAER;AAAA,IAEJ;AAEA,kBAAO,iBAAiB,WAAWD,CAAmB,GAC/C,MAAM,OAAO,oBAAoB,WAAWA,CAAmB;AAAA,EACxE,GAAG,CAACd,CAAG,CAAC,GAED,CAACE,GAAaI,GAAUM,CAAW;AAC5C;"}
1
+ {"version":3,"file":"index100.js","sources":["../src/hooks/useClipboard.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\n\nexport interface UseClipboardReturn {\n copy: (text: string) => Promise<boolean>\n copied: boolean\n error: Error | null\n reset: () => void\n}\n\n/**\n * Hook for copying text to clipboard with success/error state.\n *\n * @param timeout - Duration in ms to show copied state (default: 2000)\n * @returns Object with copy function and state\n *\n * @example\n * const { copy, copied } = useClipboard()\n *\n * <Button onClick={() => copy('Hello!')}>\n * {copied ? 'Copied!' : 'Copy'}\n * </Button>\n */\nexport function useClipboard(timeout = 2000): UseClipboardReturn {\n const [copied, setCopied] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const copy = useCallback(async (text: string): Promise<boolean> => {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setError(null)\n\n setTimeout(() => setCopied(false), timeout)\n return true\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to copy'))\n setCopied(false)\n return false\n }\n }, [timeout])\n\n const reset = useCallback(() => {\n setCopied(false)\n setError(null)\n }, [])\n\n return { copy, copied, error, reset }\n}\n"],"names":["useClipboard","timeout","copied","setCopied","useState","error","setError","copy","useCallback","text","err","reset"],"mappings":";AAsBO,SAASA,EAAaC,IAAU,KAA0B;AAC/D,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAOC,CAAQ,IAAIF,EAAuB,IAAI,GAE/CG,IAAOC,EAAY,OAAOC,MAAmC;AACjE,QAAI;AACF,mBAAM,UAAU,UAAU,UAAUA,CAAI,GACxCN,EAAU,EAAI,GACdG,EAAS,IAAI,GAEb,WAAW,MAAMH,EAAU,EAAK,GAAGF,CAAO,GACnC;AAAA,IACT,SAASS,GAAK;AACZ,aAAAJ,EAASI,aAAe,QAAQA,IAAM,IAAI,MAAM,gBAAgB,CAAC,GACjEP,EAAU,EAAK,GACR;AAAA,IACT;AAAA,EACF,GAAG,CAACF,CAAO,CAAC,GAENU,IAAQH,EAAY,MAAM;AAC9B,IAAAL,EAAU,EAAK,GACfG,EAAS,IAAI;AAAA,EACf,GAAG,CAAA,CAAE;AAEL,SAAO,EAAE,MAAAC,GAAM,QAAAL,GAAQ,OAAAG,GAAO,OAAAM,EAAA;AAChC;"}
package/dist/index101.js CHANGED
@@ -1,16 +1,49 @@
1
- import { useState as r, useEffect as c } from "react";
2
- function i(e, t = 300) {
3
- const [o, u] = r(e);
4
- return c(() => {
5
- const n = setTimeout(() => {
6
- u(e);
7
- }, t);
8
- return () => {
9
- clearTimeout(n);
1
+ import { useState as u, useCallback as c, useEffect as f } from "react";
2
+ function S(o, t) {
3
+ const [s, n] = u(() => {
4
+ if (typeof window > "u")
5
+ return t;
6
+ try {
7
+ const e = window.localStorage.getItem(o);
8
+ return e ? JSON.parse(e) : t;
9
+ } catch {
10
+ return t;
11
+ }
12
+ }), d = c(
13
+ (e) => {
14
+ n((r) => {
15
+ const a = e instanceof Function ? e(r) : e;
16
+ if (typeof window < "u")
17
+ try {
18
+ window.localStorage.setItem(o, JSON.stringify(a));
19
+ } catch (l) {
20
+ console.warn(`Failed to save to localStorage key "${o}":`, l);
21
+ }
22
+ return a;
23
+ });
24
+ },
25
+ [o]
26
+ ), w = c(() => {
27
+ if (typeof window < "u")
28
+ try {
29
+ window.localStorage.removeItem(o);
30
+ } catch (e) {
31
+ console.warn(`Failed to remove localStorage key "${o}":`, e);
32
+ }
33
+ n(t);
34
+ }, [o, t]);
35
+ return f(() => {
36
+ const e = (r) => {
37
+ if (r.key === o && r.newValue !== null)
38
+ try {
39
+ n(JSON.parse(r.newValue));
40
+ } catch {
41
+ }
10
42
  };
11
- }, [e, t]), o;
43
+ return window.addEventListener("storage", e), () => window.removeEventListener("storage", e);
44
+ }, [o]), [s, d, w];
12
45
  }
13
46
  export {
14
- i as useDebounce
47
+ S as useLocalStorage
15
48
  };
16
49
  //# sourceMappingURL=index101.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index101.js","sources":["../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react'\n\n/**\n * Hook that delays updating a value until after a specified delay.\n * Useful for search inputs to avoid excessive API calls.\n *\n * @param value - Value to debounce\n * @param delay - Delay in milliseconds (default: 300)\n * @returns Debounced value\n *\n * @example\n * const [search, setSearch] = useState('')\n * const debouncedSearch = useDebounce(search, 500)\n *\n * useEffect(() => {\n * // This runs 500ms after user stops typing\n * fetchResults(debouncedSearch)\n * }, [debouncedSearch])\n */\nexport function useDebounce<T>(value: T, delay = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n return () => {\n clearTimeout(timer)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer"],"mappings":";AAmBO,SAASA,EAAeC,GAAUC,IAAQ,KAAQ;AACvD,QAAM,CAACC,GAAgBC,CAAiB,IAAIC,EAAYJ,CAAK;AAE7D,SAAAK,EAAU,MAAM;AACd,UAAMC,IAAQ,WAAW,MAAM;AAC7B,MAAAH,EAAkBH,CAAK;AAAA,IACzB,GAAGC,CAAK;AAER,WAAO,MAAM;AACX,mBAAaK,CAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAACN,GAAOC,CAAK,CAAC,GAEVC;AACT;"}
1
+ {"version":3,"file":"index101.js","sources":["../src/hooks/useLocalStorage.ts"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react'\n\n/**\n * Hook for persisting state to localStorage.\n *\n * @param key - localStorage key\n * @param initialValue - Initial value if key doesn't exist\n * @returns [value, setValue, removeValue] tuple\n *\n * @example\n * const [theme, setTheme] = useLocalStorage('theme', 'light')\n * const [user, setUser, removeUser] = useLocalStorage('user', null)\n */\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((prev: T) => T)) => void, () => void] {\n // Get initial value from localStorage or use default\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n\n try {\n const item = window.localStorage.getItem(key)\n return item ? (JSON.parse(item) as T) : initialValue\n } catch {\n return initialValue\n }\n })\n\n // Update localStorage when value changes\n const setValue = useCallback(\n (value: T | ((prev: T) => T)) => {\n setStoredValue(prev => {\n const valueToStore = value instanceof Function ? value(prev) : value\n\n if (typeof window !== 'undefined') {\n try {\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\n } catch (error) {\n console.warn(`Failed to save to localStorage key \"${key}\":`, error)\n }\n }\n\n return valueToStore\n })\n },\n [key]\n )\n\n // Remove from localStorage\n const removeValue = useCallback(() => {\n if (typeof window !== 'undefined') {\n try {\n window.localStorage.removeItem(key)\n } catch (error) {\n console.warn(`Failed to remove localStorage key \"${key}\":`, error)\n }\n }\n setStoredValue(initialValue)\n }, [key, initialValue])\n\n // Sync with other tabs/windows\n useEffect(() => {\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue) as T)\n } catch {\n // Ignore parse errors\n }\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n return () => window.removeEventListener('storage', handleStorageChange)\n }, [key])\n\n return [storedValue, setValue, removeValue]\n}\n"],"names":["useLocalStorage","key","initialValue","storedValue","setStoredValue","useState","item","setValue","useCallback","value","prev","valueToStore","error","removeValue","useEffect","handleStorageChange","e"],"mappings":";AAaO,SAASA,EACdC,GACAC,GACwD;AAExD,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAY,MAAM;AACtD,QAAI,OAAO,SAAW;AACpB,aAAOH;AAGT,QAAI;AACF,YAAMI,IAAO,OAAO,aAAa,QAAQL,CAAG;AAC5C,aAAOK,IAAQ,KAAK,MAAMA,CAAI,IAAUJ;AAAA,IAC1C,QAAQ;AACN,aAAOA;AAAA,IACT;AAAA,EACF,CAAC,GAGKK,IAAWC;AAAA,IACf,CAACC,MAAgC;AAC/B,MAAAL,EAAe,CAAAM,MAAQ;AACrB,cAAMC,IAAeF,aAAiB,WAAWA,EAAMC,CAAI,IAAID;AAE/D,YAAI,OAAO,SAAW;AACpB,cAAI;AACF,mBAAO,aAAa,QAAQR,GAAK,KAAK,UAAUU,CAAY,CAAC;AAAA,UAC/D,SAASC,GAAO;AACd,oBAAQ,KAAK,uCAAuCX,CAAG,MAAMW,CAAK;AAAA,UACpE;AAGF,eAAOD;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAACV,CAAG;AAAA,EAAA,GAIAY,IAAcL,EAAY,MAAM;AACpC,QAAI,OAAO,SAAW;AACpB,UAAI;AACF,eAAO,aAAa,WAAWP,CAAG;AAAA,MACpC,SAASW,GAAO;AACd,gBAAQ,KAAK,sCAAsCX,CAAG,MAAMW,CAAK;AAAA,MACnE;AAEF,IAAAR,EAAeF,CAAY;AAAA,EAC7B,GAAG,CAACD,GAAKC,CAAY,CAAC;AAGtB,SAAAY,EAAU,MAAM;AACd,UAAMC,IAAsB,CAACC,MAAoB;AAC/C,UAAIA,EAAE,QAAQf,KAAOe,EAAE,aAAa;AAClC,YAAI;AACF,UAAAZ,EAAe,KAAK,MAAMY,EAAE,QAAQ,CAAM;AAAA,QAC5C,QAAQ;AAAA,QAER;AAAA,IAEJ;AAEA,kBAAO,iBAAiB,WAAWD,CAAmB,GAC/C,MAAM,OAAO,oBAAoB,WAAWA,CAAmB;AAAA,EACxE,GAAG,CAACd,CAAG,CAAC,GAED,CAACE,GAAaI,GAAUM,CAAW;AAC5C;"}
package/dist/index102.js CHANGED
@@ -1,18 +1,16 @@
1
- import { useRef as s, useEffect as c } from "react";
2
- function m(t, n = !0) {
3
- const r = s(null);
1
+ import { useState as r, useEffect as c } from "react";
2
+ function i(e, t = 300) {
3
+ const [o, u] = r(e);
4
4
  return c(() => {
5
- if (!n) return;
6
- const e = (o) => {
7
- const u = r.current;
8
- !u || u.contains(o.target) || t(o);
5
+ const n = setTimeout(() => {
6
+ u(e);
7
+ }, t);
8
+ return () => {
9
+ clearTimeout(n);
9
10
  };
10
- return document.addEventListener("mousedown", e), document.addEventListener("touchstart", e), () => {
11
- document.removeEventListener("mousedown", e), document.removeEventListener("touchstart", e);
12
- };
13
- }, [t, n]), r;
11
+ }, [e, t]), o;
14
12
  }
15
13
  export {
16
- m as useClickOutside
14
+ i as useDebounce
17
15
  };
18
16
  //# sourceMappingURL=index102.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index102.js","sources":["../src/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect, useRef, type RefObject } from 'react'\n\n/**\n * Hook that detects clicks outside of a referenced element.\n * Useful for closing dropdowns, modals, or menus.\n *\n * @param handler - Callback when click outside is detected\n * @param enabled - Whether the listener is active (default: true)\n * @returns Ref to attach to the element\n *\n * @example\n * const ref = useClickOutside(() => setIsOpen(false))\n *\n * <div ref={ref}>\n * <Dropdown>...</Dropdown>\n * </div>\n */\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled = true\n): RefObject<T | null> {\n const ref = useRef<T>(null)\n\n useEffect(() => {\n if (!enabled) return\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref.current\n if (!el || el.contains(event.target as Node)) {\n return\n }\n handler(event)\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [handler, enabled])\n\n return ref\n}\n"],"names":["useClickOutside","handler","enabled","ref","useRef","useEffect","listener","event","el"],"mappings":";AAiBO,SAASA,EACdC,GACAC,IAAU,IACW;AACrB,QAAMC,IAAMC,EAAU,IAAI;AAE1B,SAAAC,EAAU,MAAM;AACd,QAAI,CAACH,EAAS;AAEd,UAAMI,IAAW,CAACC,MAAmC;AACnD,YAAMC,IAAKL,EAAI;AACf,MAAI,CAACK,KAAMA,EAAG,SAASD,EAAM,MAAc,KAG3CN,EAAQM,CAAK;AAAA,IACf;AAEA,oBAAS,iBAAiB,aAAaD,CAAQ,GAC/C,SAAS,iBAAiB,cAAcA,CAAQ,GAEzC,MAAM;AACX,eAAS,oBAAoB,aAAaA,CAAQ,GAClD,SAAS,oBAAoB,cAAcA,CAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAACL,GAASC,CAAO,CAAC,GAEdC;AACT;"}
1
+ {"version":3,"file":"index102.js","sources":["../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react'\n\n/**\n * Hook that delays updating a value until after a specified delay.\n * Useful for search inputs to avoid excessive API calls.\n *\n * @param value - Value to debounce\n * @param delay - Delay in milliseconds (default: 300)\n * @returns Debounced value\n *\n * @example\n * const [search, setSearch] = useState('')\n * const debouncedSearch = useDebounce(search, 500)\n *\n * useEffect(() => {\n * // This runs 500ms after user stops typing\n * fetchResults(debouncedSearch)\n * }, [debouncedSearch])\n */\nexport function useDebounce<T>(value: T, delay = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n return () => {\n clearTimeout(timer)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer"],"mappings":";AAmBO,SAASA,EAAeC,GAAUC,IAAQ,KAAQ;AACvD,QAAM,CAACC,GAAgBC,CAAiB,IAAIC,EAAYJ,CAAK;AAE7D,SAAAK,EAAU,MAAM;AACd,UAAMC,IAAQ,WAAW,MAAM;AAC7B,MAAAH,EAAkBH,CAAK;AAAA,IACzB,GAAGC,CAAK;AAER,WAAO,MAAM;AACX,mBAAaK,CAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAACN,GAAOC,CAAK,CAAC,GAEVC;AACT;"}