ant-float-label 1.0.2 → 1.0.4

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.
package/README.md CHANGED
@@ -1,6 +1,21 @@
1
1
  # Antd 5 form style similar to MUI
2
2
 
3
- ```
3
+ ```sh
4
4
  npm install ant-float-label
5
5
  ```
6
+
7
+ ```js
8
+ import {
9
+ FloatDatePicker,
10
+ FloatInput,
11
+ FloatInputNumber,
12
+ FloatSelect,
13
+ FloatRangePicker,
14
+ FloatCascader,
15
+ FloatTreeSelect,
16
+ FloatAutoComplete,
17
+ FloatTimePicker,
18
+ } from "ant-float-label";
19
+ ```
20
+
6
21
  ![Alt text](image.png)
package/dist/README.md CHANGED
@@ -1,6 +1,21 @@
1
1
  # Antd 5 form style similar to MUI
2
2
 
3
- ```
3
+ ```sh
4
4
  npm install ant-float-label
5
5
  ```
6
+
7
+ ```js
8
+ import {
9
+ FloatDatePicker,
10
+ FloatInput,
11
+ FloatInputNumber,
12
+ FloatSelect,
13
+ FloatRangePicker,
14
+ FloatCascader,
15
+ FloatTreeSelect,
16
+ FloatAutoComplete,
17
+ FloatTimePicker,
18
+ } from "ant-float-label";
19
+ ```
20
+
6
21
  ![Alt text](image.png)
@@ -0,0 +1,5 @@
1
+ import { PasswordProps } from "antd/es/input";
2
+ import "./index.css";
3
+ export interface FloatPasswordProps extends PasswordProps {
4
+ }
5
+ export declare function FloatPassword({ placeholder, onFocus, onBlur, value, defaultValue, style, size, ...restProps }: FloatPasswordProps): import("react/jsx-runtime").JSX.Element;
package/dist/index.css CHANGED
@@ -3,4 +3,5 @@
3
3
  .ant-float-label-form-picker {border:none!important;box-shadow:none!important;}
4
4
  .ant-float-label-form-input-number {border:none!important;box-shadow:none!important;}
5
5
  .ant-float-label-form-picker {border:none!important;box-shadow:none!important;}
6
- .ant-float-label-form-select .ant-select-selector {border:none!important;box-shadow:none!important;}.ant-float-label-form-select{height:auto!important;}
6
+ .ant-float-label-form-select .ant-select-selector {border:none!important;box-shadow:none!important;}.ant-float-label-form-select{height:auto!important;}
7
+ .ant-float-label-form-input-password{position:static;}
package/dist/index.d.ts CHANGED
@@ -8,3 +8,4 @@ export * from "./component/FloatSelect";
8
8
  export * from "./component/FloatTimePicker";
9
9
  export * from "./component/FloattingLabelBox";
10
10
  export * from "./component/FloatTreeSelect";
11
+ export * from "./component/FloatPassword";
package/dist/index.js CHANGED
@@ -388,4 +388,34 @@ function FloatTreeSelect({ placeholder, onFocus, onBlur, value, defaultValue, st
388
388
  }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, rootClassName: "ant-float-label-form-select" }) }));
389
389
  }
390
390
 
391
- export { FloatAutoComplete, FloatCascader, FloatDatePicker, FloatInput, FloatInputNumber, FloatRangePicker, FloatSelect, FloatTimePicker, FloatTreeSelect, FloattingLabelBox };
391
+ const { Password } = Input;
392
+ function FloatPassword({ placeholder, onFocus, onBlur, value, defaultValue, style, size, ...restProps }) {
393
+ const initFlag = useRef(false);
394
+ const [isFocus, setIsFocus] = useState(false);
395
+ const [inputValue, setInputValue] = useState(defaultValue ?? value);
396
+ const handleFocus = useCallback((e) => {
397
+ setIsFocus(true);
398
+ if (onFocus) {
399
+ onFocus(e);
400
+ }
401
+ }, [onFocus]);
402
+ const handleBlur = useCallback((e) => {
403
+ setIsFocus(false);
404
+ setInputValue(e.target.value);
405
+ if (onBlur) {
406
+ onBlur(e);
407
+ }
408
+ }, [onBlur]);
409
+ useEffect(() => {
410
+ if (initFlag.current) {
411
+ setInputValue(value);
412
+ }
413
+ initFlag.current = true;
414
+ return () => {
415
+ initFlag.current = false;
416
+ };
417
+ }, [value]);
418
+ return (jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: !!inputValue, width: style?.width, height: style?.height, status: restProps.status, children: jsx(Password, { style: { ...style, width: "100%", border: "none" }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, rootClassName: "ant-float-label-form-input-password" }) }));
419
+ }
420
+
421
+ export { FloatAutoComplete, FloatCascader, FloatDatePicker, FloatInput, FloatInputNumber, FloatPassword, FloatRangePicker, FloatSelect, FloatTimePicker, FloatTreeSelect, FloattingLabelBox };
package/dist/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "ant-float-label",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Antd 5 form style similar to MUI",
5
- "main": "dist/index.cjs.js",
5
+ "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "license": "MIT",
8
8
  "type": "module",
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "ant-float-label",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Antd 5 form style similar to MUI",
5
- "main": "dist/index.cjs.js",
5
+ "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "license": "MIT",
8
8
  "type": "module",
package/dist/index.cjs.js DELETED
@@ -1,402 +0,0 @@
1
- import "./index.css"
2
- 'use strict';
3
-
4
- var jsxRuntime = require('react/jsx-runtime');
5
- var antd = require('antd');
6
- var react = require('react');
7
-
8
- const { useToken } = antd.theme;
9
- function FloattingLabelBox({ focused, haveValue, label, children, width, height, status, }) {
10
- const { token } = useToken();
11
- const statusColor = react.useMemo(() => {
12
- const colors = {
13
- borderColorActive: token.colorPrimaryActive,
14
- textColorActive: token.colorPrimary,
15
- textColor: token.colorTextTertiary,
16
- borderColor: token.colorBorder,
17
- };
18
- if (status === "warning") {
19
- colors.borderColorActive = token.colorWarningActive;
20
- colors.textColorActive = token.colorWarningTextActive;
21
- colors.textColor = token.colorWarningText;
22
- colors.borderColor = token.colorWarningBorder;
23
- }
24
- else if (status === "error") {
25
- colors.borderColorActive = token.colorErrorActive;
26
- colors.textColorActive = token.colorErrorTextActive;
27
- colors.textColor = token.colorErrorText;
28
- colors.borderColor = token.colorErrorBorder;
29
- }
30
- return colors;
31
- }, [status, token]);
32
- return (jsxRuntime.jsxs("div", { className: "ant-float-label-box", style: {
33
- width: width ?? "100%",
34
- height,
35
- }, children: [jsxRuntime.jsx("div", { style: {
36
- width: "100%",
37
- height: "100%",
38
- overflow: "hidden",
39
- borderRadius: token.borderRadius,
40
- }, children: children }), jsxRuntime.jsx("label", { className: "ant-float-label-box-label", style: {
41
- color: focused ? statusColor.textColorActive : statusColor.textColor,
42
- height: focused || haveValue ? "auto" : "100%",
43
- transform: focused || haveValue
44
- ? "translate(14px, -9px) scale(0.75)"
45
- : `translate(1em, 0px) scale(1)`,
46
- }, children: label }), jsxRuntime.jsx("fieldset", { style: {
47
- border: focused
48
- ? `2px solid ${statusColor.borderColorActive}`
49
- : `1px solid ${statusColor.borderColor}`,
50
- borderRadius: token.borderRadius,
51
- }, className: "ant-float-label-box-fieldset", children: jsxRuntime.jsx("legend", { className: "ant-float-label-box-legend", style: {
52
- maxWidth: focused || haveValue ? "100%" : "0.01px",
53
- }, children: label }) })] }));
54
- }
55
-
56
- function FloatAutoComplete({ placeholder, onFocus, onBlur, value, defaultValue, style, size, onChange, ...restProps }) {
57
- const initFlag = react.useRef(false);
58
- const [isFocus, setIsFocus] = react.useState(false);
59
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
60
- const handleFocus = react.useCallback((e) => {
61
- setIsFocus(true);
62
- if (onFocus) {
63
- onFocus(e);
64
- }
65
- }, [onFocus]);
66
- const handleBlur = react.useCallback((e) => {
67
- setIsFocus(false);
68
- setInputValue(e.target.value);
69
- if (onBlur) {
70
- onBlur(e);
71
- }
72
- }, [onBlur]);
73
- const handleChange = react.useCallback((value, option) => {
74
- setInputValue(value);
75
- if (onChange) {
76
- onChange(value, option);
77
- }
78
- }, [onChange]);
79
- react.useEffect(() => {
80
- if (initFlag.current) {
81
- setInputValue(value);
82
- }
83
- initFlag.current = true;
84
- return () => {
85
- initFlag.current = false;
86
- };
87
- }, [value]);
88
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: !!inputValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.AutoComplete, { style: {
89
- width: "100%",
90
- ...style,
91
- border: "none",
92
- }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, rootClassName: "ant-float-label-form-auto-complete" }) }));
93
- }
94
-
95
- function FloatCascader({ placeholder, onFocus, onBlur, value, defaultValue, style, size, onChange, ...restProps }) {
96
- const initFlag = react.useRef(false);
97
- const [isFocus, setIsFocus] = react.useState(false);
98
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
99
- const handleFocus = react.useCallback((e) => {
100
- setIsFocus(true);
101
- if (onFocus) {
102
- onFocus(e);
103
- }
104
- }, [onFocus]);
105
- const handleBlur = react.useCallback((e) => {
106
- setIsFocus(false);
107
- if (onBlur) {
108
- onBlur(e);
109
- }
110
- }, [onBlur]);
111
- const handleChange = react.useCallback((value, selectedOptions) => {
112
- setInputValue(value);
113
- if (onChange) {
114
- onChange(value, selectedOptions);
115
- }
116
- }, [onChange]);
117
- react.useEffect(() => {
118
- if (initFlag.current) {
119
- setInputValue(value);
120
- }
121
- initFlag.current = true;
122
- return () => {
123
- initFlag.current = false;
124
- };
125
- }, [value]);
126
- const haveValue = react.useMemo(() => {
127
- const currValue = Array.isArray(inputValue) && inputValue.length === 0
128
- ? undefined
129
- : inputValue;
130
- return !!currValue;
131
- }, [inputValue]);
132
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: haveValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.Cascader, { style: { ...style, width: "100%", border: "none" }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, rootClassName: "ant-float-label-form-select" }) }));
133
- }
134
-
135
- function FloatDatePicker({ placeholder, onFocus, onBlur, value, defaultValue, style, size, onChange, ...restProps }) {
136
- const initFlag = react.useRef(false);
137
- const [isFocus, setIsFocus] = react.useState(false);
138
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
139
- const handleFocus = react.useCallback((event, info) => {
140
- setIsFocus(true);
141
- if (onFocus) {
142
- onFocus(event, info);
143
- }
144
- }, [onFocus]);
145
- const handleBlur = react.useCallback((event, info) => {
146
- setIsFocus(false);
147
- if (onBlur) {
148
- onBlur(event, info);
149
- }
150
- }, [onBlur]);
151
- const handleChange = react.useCallback((value, dateString) => {
152
- setInputValue(value);
153
- if (onChange) {
154
- onChange(value, dateString);
155
- }
156
- }, [onChange]);
157
- react.useEffect(() => {
158
- if (initFlag.current) {
159
- setInputValue(value);
160
- }
161
- initFlag.current = true;
162
- return () => {
163
- initFlag.current = false;
164
- };
165
- }, [value]);
166
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: !!inputValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.DatePicker, { style: { ...style, width: "100%", border: "none" }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, rootClassName: "ant-float-label-form-picker", placeholder: "" }) }));
167
- }
168
-
169
- function FloatInput({ placeholder, onFocus, onBlur, value, defaultValue, style, size, ...restProps }) {
170
- const initFlag = react.useRef(false);
171
- const [isFocus, setIsFocus] = react.useState(false);
172
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
173
- const handleFocus = react.useCallback((e) => {
174
- setIsFocus(true);
175
- if (onFocus) {
176
- onFocus(e);
177
- }
178
- }, [onFocus]);
179
- const handleBlur = react.useCallback((e) => {
180
- setIsFocus(false);
181
- setInputValue(e.target.value);
182
- if (onBlur) {
183
- onBlur(e);
184
- }
185
- }, [onBlur]);
186
- react.useEffect(() => {
187
- if (initFlag.current) {
188
- setInputValue(value);
189
- }
190
- initFlag.current = true;
191
- return () => {
192
- initFlag.current = false;
193
- };
194
- }, [value]);
195
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: !!inputValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.Input, { style: { ...style, width: "100%", border: "none" }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size }) }));
196
- }
197
-
198
- function FloatInputNumber({ placeholder, onFocus, onBlur, value, defaultValue, style, size, ...restProps }) {
199
- const initFlag = react.useRef(false);
200
- const [isFocus, setIsFocus] = react.useState(false);
201
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
202
- const handleFocus = react.useCallback((e) => {
203
- setIsFocus(true);
204
- if (onFocus) {
205
- onFocus(e);
206
- }
207
- }, [onFocus]);
208
- const handleBlur = react.useCallback((e) => {
209
- setIsFocus(false);
210
- setInputValue(e.target.value);
211
- if (onBlur) {
212
- onBlur(e);
213
- }
214
- }, [onBlur]);
215
- react.useEffect(() => {
216
- if (initFlag.current) {
217
- setInputValue(value);
218
- }
219
- initFlag.current = true;
220
- return () => {
221
- initFlag.current = false;
222
- };
223
- }, [value]);
224
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: !!inputValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.InputNumber, { style: { ...style, width: "100%", border: "none" }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, rootClassName: "ant-float-label-form-input-number" }) }));
225
- }
226
-
227
- const { RangePicker } = antd.DatePicker;
228
- function FloatRangePicker({ placeholder, onFocus, onBlur, value, defaultValue, style, size, onChange, ...restProps }) {
229
- const initFlag = react.useRef(false);
230
- const [isFocus, setIsFocus] = react.useState(false);
231
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
232
- const handleFocus = react.useCallback((event, info) => {
233
- setIsFocus(true);
234
- if (onFocus) {
235
- onFocus(event, info);
236
- }
237
- }, [onFocus]);
238
- const handleBlur = react.useCallback((event, info) => {
239
- setIsFocus(false);
240
- if (onBlur) {
241
- onBlur(event, info);
242
- }
243
- }, [onBlur]);
244
- const handleChange = react.useCallback((value, dateString) => {
245
- setInputValue(value);
246
- if (onChange) {
247
- onChange(value, dateString);
248
- }
249
- }, [onChange]);
250
- react.useEffect(() => {
251
- if (initFlag.current) {
252
- setInputValue(value);
253
- }
254
- initFlag.current = true;
255
- return () => {
256
- initFlag.current = false;
257
- };
258
- }, [value]);
259
- const haveValue = react.useMemo(() => {
260
- return !!(isFocus || inputValue);
261
- }, [inputValue, isFocus]);
262
- return (jsxRuntime.jsx(FloattingLabelBox, { label: haveValue && placeholder ? placeholder.join(" - ") : "", focused: isFocus, haveValue: haveValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(RangePicker, { style: { ...style, width: "100%", border: "none" }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, rootClassName: "ant-float-label-form-picker", placeholder: haveValue ? ["", ""] : placeholder }) }));
263
- }
264
-
265
- function FloatSelect({ placeholder, onFocus, onBlur, value, defaultValue, style, size, mode, onChange, ...restProps }) {
266
- const initFlag = react.useRef(false);
267
- const [isFocus, setIsFocus] = react.useState(false);
268
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
269
- const handleFocus = react.useCallback((e) => {
270
- setIsFocus(true);
271
- if (onFocus) {
272
- onFocus(e);
273
- }
274
- }, [onFocus]);
275
- const handleBlur = react.useCallback((e) => {
276
- setIsFocus(false);
277
- if (onBlur) {
278
- onBlur(e);
279
- }
280
- }, [onBlur]);
281
- const handleChange = react.useCallback((value, option) => {
282
- setInputValue(value);
283
- if (onChange) {
284
- onChange(value, option);
285
- }
286
- }, [onChange]);
287
- react.useEffect(() => {
288
- if (initFlag.current) {
289
- setInputValue(value);
290
- }
291
- initFlag.current = true;
292
- return () => {
293
- initFlag.current = false;
294
- };
295
- }, [value]);
296
- const haveValue = react.useMemo(() => {
297
- const currValue = Array.isArray(inputValue) && inputValue.length === 0
298
- ? undefined
299
- : inputValue;
300
- return !!currValue;
301
- }, [inputValue]);
302
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: haveValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.Select, { style: { ...style, width: "100%", border: "none" }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, mode: mode, rootClassName: "ant-float-label-form-select" }) }));
303
- }
304
-
305
- function FloatTimePicker({ placeholder, onFocus, onBlur, value, defaultValue, style, size, mode, onChange, ...restProps }) {
306
- const initFlag = react.useRef(false);
307
- const [isFocus, setIsFocus] = react.useState(false);
308
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
309
- const handleFocus = react.useCallback((e, info) => {
310
- setIsFocus(true);
311
- if (onFocus) {
312
- onFocus(e, info);
313
- }
314
- }, [onFocus]);
315
- const handleBlur = react.useCallback((e, info) => {
316
- setIsFocus(false);
317
- if (onBlur) {
318
- onBlur(e, info);
319
- }
320
- }, [onBlur]);
321
- const handleChange = react.useCallback((value, option) => {
322
- setInputValue(value);
323
- if (onChange) {
324
- onChange(value, option);
325
- }
326
- }, [onChange]);
327
- react.useEffect(() => {
328
- if (initFlag.current) {
329
- setInputValue(value);
330
- }
331
- initFlag.current = true;
332
- return () => {
333
- initFlag.current = false;
334
- };
335
- }, [value]);
336
- const haveValue = react.useMemo(() => {
337
- const currValue = Array.isArray(inputValue) && inputValue.length === 0
338
- ? undefined
339
- : inputValue;
340
- return !!currValue;
341
- }, [inputValue]);
342
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: haveValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.TimePicker, { style: {
343
- ...style,
344
- width: "100%",
345
- border: "none",
346
- }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, mode: mode, rootClassName: "ant-float-label-form-select", placeholder: "" }) }));
347
- }
348
-
349
- function FloatTreeSelect({ placeholder, onFocus, onBlur, value, defaultValue, style, size, onChange, ...restProps }) {
350
- const initFlag = react.useRef(false);
351
- const [isFocus, setIsFocus] = react.useState(false);
352
- const [inputValue, setInputValue] = react.useState(defaultValue ?? value);
353
- const handleFocus = react.useCallback((e) => {
354
- setIsFocus(true);
355
- if (onFocus) {
356
- onFocus(e);
357
- }
358
- }, [onFocus]);
359
- const handleBlur = react.useCallback((e) => {
360
- setIsFocus(false);
361
- if (onBlur) {
362
- onBlur(e);
363
- }
364
- }, [onBlur]);
365
- const handleChange = react.useCallback((value, labelList, extra) => {
366
- setInputValue(value);
367
- if (onChange) {
368
- onChange(value, labelList, extra);
369
- }
370
- }, [onChange]);
371
- react.useEffect(() => {
372
- if (initFlag.current) {
373
- setInputValue(value);
374
- }
375
- initFlag.current = true;
376
- return () => {
377
- initFlag.current = false;
378
- };
379
- }, [value]);
380
- const haveValue = react.useMemo(() => {
381
- const currValue = Array.isArray(inputValue) && inputValue.length === 0
382
- ? undefined
383
- : inputValue;
384
- return !!currValue;
385
- }, [inputValue]);
386
- return (jsxRuntime.jsx(FloattingLabelBox, { label: placeholder, focused: isFocus, haveValue: haveValue, width: style?.width, height: style?.height, status: restProps.status, children: jsxRuntime.jsx(antd.TreeSelect, { style: {
387
- ...style,
388
- width: "100%",
389
- border: "none",
390
- }, ...restProps, onFocus: handleFocus, onBlur: handleBlur, value: value, defaultValue: defaultValue, size: size, onChange: handleChange, rootClassName: "ant-float-label-form-select" }) }));
391
- }
392
-
393
- exports.FloatAutoComplete = FloatAutoComplete;
394
- exports.FloatCascader = FloatCascader;
395
- exports.FloatDatePicker = FloatDatePicker;
396
- exports.FloatInput = FloatInput;
397
- exports.FloatInputNumber = FloatInputNumber;
398
- exports.FloatRangePicker = FloatRangePicker;
399
- exports.FloatSelect = FloatSelect;
400
- exports.FloatTimePicker = FloatTimePicker;
401
- exports.FloatTreeSelect = FloatTreeSelect;
402
- exports.FloattingLabelBox = FloattingLabelBox;