@k8slens/lds-form 0.53.0 → 0.53.1
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/lib/cjs/FormTextarea/FormTextarea.d.ts +23 -0
- package/lib/cjs/FormTextarea/FormTextarea.js +1 -0
- package/lib/cjs/components.d.ts +1 -0
- package/lib/cjs/index.js +1 -1
- package/lib/cjs/node_modules/@k8slens/lds/lib/es/Textarea/Textarea.js +1 -0
- package/lib/cjs/node_modules/@k8slens/lds/lib/es/Textarea/Textarea.module.css.js +1 -0
- package/lib/es/FormTextarea/FormTextarea.d.ts +23 -0
- package/lib/es/FormTextarea/FormTextarea.js +1 -0
- package/lib/es/components.d.ts +1 -0
- package/lib/es/index.js +1 -1
- package/lib/es/node_modules/@k8slens/lds/lib/es/Textarea/Textarea.js +1 -0
- package/lib/es/node_modules/@k8slens/lds/lib/es/Textarea/Textarea.module.css.js +1 -0
- package/llms.txt +28 -0
- package/package.json +4 -4
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type TextareaProps } from "@k8slens/lds/lib/es/Textarea/Textarea.d";
|
|
3
|
+
import { type FormFieldProps } from "../FormField/FormField";
|
|
4
|
+
export interface FormTextareaProps extends Omit<TextareaProps, "name">, Pick<FormFieldProps, "label" | "labelProps" | "errorProps"> {
|
|
5
|
+
/** Field name, used for form submission. */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Optional field ID. Auto-generated if not provided. */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Error messages to display below the field. */
|
|
10
|
+
errors?: string[];
|
|
11
|
+
/** Whether the field is required. */
|
|
12
|
+
required?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Textarea wrapped in a form field with label and optional error display.
|
|
16
|
+
*
|
|
17
|
+
* Usage: `import { FormTextarea } from "@k8slens/lds-form"`
|
|
18
|
+
*
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <FormTextarea name="description" label="Description" maxLength={500} />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export default function FormTextarea({ id: _id, label, labelProps, errorProps, errors, required, ...textareaProps }: FormTextareaProps): React.JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),r=require("react"),l=require("../common/useFieldIds.js"),a=require("../FormField/FormField.js"),i=require("../node_modules/@k8slens/lds/lib/es/Textarea/Textarea.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=d(r);module.exports=function(r){var d=r.id,o=r.label,t=r.labelProps,u=r.errorProps,n=r.errors,b=r.required,c=e.__rest(r,["id","label","labelProps","errorProps","errors","required"]),m=l.useFieldIds(d),p=m.id,q=m.labelId,f=m.errorId;return s.default.createElement(a,{id:p,label:o,labelId:q,errorId:f,errors:n,required:b,labelProps:t,errorProps:u},s.default.createElement(i,e.__assign({id:p,"aria-labelledby":q},(null==n?void 0:n.length)?{"aria-invalid":!0,"aria-describedby":f}:{},c)))};
|
package/lib/cjs/components.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export { default as FormErrorMessage } from "./FormErrorMessage/FormErrorMessage
|
|
|
3
3
|
export { default as FormLabel } from "./FormLabel/FormLabel";
|
|
4
4
|
export { default as FormInput } from "./FormInput/FormInput";
|
|
5
5
|
export { default as FormSwitchGroup } from "./FormSwitchGroup/FormSwitchGroup";
|
|
6
|
+
export { default as FormTextarea } from "./FormTextarea/FormTextarea";
|
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("./common/useFieldIds.js"),e=require("./common/useInputErrorProps.js"),o=require("./common/useFormComponentData.js"),s=require("./common/usePrevious.js"),u=require("./FormField/FormField.js"),m=require("./FormErrorMessage/FormErrorMessage.js"),t=require("./FormLabel/FormLabel.js"),F=require("./FormInput/FormInput.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("./common/useFieldIds.js"),e=require("./common/useInputErrorProps.js"),o=require("./common/useFormComponentData.js"),s=require("./common/usePrevious.js"),u=require("./FormField/FormField.js"),m=require("./FormErrorMessage/FormErrorMessage.js"),t=require("./FormLabel/FormLabel.js"),F=require("./FormInput/FormInput.js"),a=require("./FormSwitchGroup/FormSwitchGroup.js"),i=require("./FormTextarea/FormTextarea.js"),p={useFieldIds:r.useFieldIds,useInputErrorProps:e.useInputErrorProps,useFormComponentData:o.useFormComponentData,usePrevious:s.usePrevious,defaultErrorParser:o.defaultErrorParser};exports.FormField=u,exports.FormErrorMessage=m,exports.FormLabel=t,exports.FormInput=F,exports.FormSwitchGroup=a,exports.FormTextarea=i,exports.common=p;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),a=require("clsx"),l=require("./Textarea.module.css.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(t),r=n(a),s=t.forwardRef((function(a,n){var s,c,i=a.icon,o=a.autoResize,f=void 0!==o&&o,g=a.wrapperProps,d=a.maxLength,p=a.className,h=a.onChange,m=a.value,v=a.defaultValue,x=e.__rest(a,["icon","autoResize","wrapperProps","maxLength","className","onChange","value","defaultValue"]),_=t.useRef(null),y=t.useState((function(){return"string"==typeof m?m.length:"string"==typeof v?v.length:0})),N=y[0],C=y[1],E=t.useCallback((function(e){_.current=e,"function"==typeof n?n(e):n&&(n.current=e)}),[n]),b=t.useCallback((function(){var e=_.current;e&&f&&(e.style.height="auto",e.style.height="".concat(e.scrollHeight,"px"))}),[f]);t.useEffect((function(){b()}),[m,b]),t.useEffect((function(){"string"==typeof m&&null!=d&&C(m.length)}),[m,d]);var w=t.useCallback((function(e){null!=d&&C(e.target.value.length),b(),null==h||h(e)}),[h,b,d]);return u.default.createElement("div",e.__assign({},g,{className:r.default(l.wrapper,null==g?void 0:g.className,(s={},s[l.withIcon]=i,s))}),u.default.createElement("textarea",e.__assign({ref:E},x,{value:m,defaultValue:v,maxLength:d,onChange:w,className:r.default(l.textarea,p,(c={},c[l.autoResize]=f,c))})),i&&u.default.createElement(i,{className:l.icon}),null!=d&&u.default.createElement("span",{className:l.counter,"aria-live":"polite"},N,"/",d))}));module.exports=s;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";module.exports={wrapper:"lds-textarea--wrapper",textarea:"lds-textarea",autoResize:"lds-textarea--auto-resize",withIcon:"lds-textarea--with-icon",icon:"lds-textarea--icon",counter:"lds-textarea--counter"};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type TextareaProps } from "@k8slens/lds/lib/es/Textarea/Textarea.d";
|
|
3
|
+
import { type FormFieldProps } from "../FormField/FormField";
|
|
4
|
+
export interface FormTextareaProps extends Omit<TextareaProps, "name">, Pick<FormFieldProps, "label" | "labelProps" | "errorProps"> {
|
|
5
|
+
/** Field name, used for form submission. */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Optional field ID. Auto-generated if not provided. */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Error messages to display below the field. */
|
|
10
|
+
errors?: string[];
|
|
11
|
+
/** Whether the field is required. */
|
|
12
|
+
required?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Textarea wrapped in a form field with label and optional error display.
|
|
16
|
+
*
|
|
17
|
+
* Usage: `import { FormTextarea } from "@k8slens/lds-form"`
|
|
18
|
+
*
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <FormTextarea name="description" label="Description" maxLength={500} />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export default function FormTextarea({ id: _id, label, labelProps, errorProps, errors, required, ...textareaProps }: FormTextareaProps): React.JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{__rest as r,__assign as e}from"../_virtual/_tslib.js";import l from"react";import{useFieldIds as o}from"../common/useFieldIds.js";import a from"../FormField/FormField.js";import i from"../node_modules/@k8slens/lds/lib/es/Textarea/Textarea.js";function d(d){var s=d.id,t=d.label,m=d.labelProps,b=d.errorProps,p=d.errors,n=d.required,u=r(d,["id","label","labelProps","errorProps","errors","required"]),f=o(s),c=f.id,P=f.labelId,F=f.errorId;return l.createElement(a,{id:c,label:t,labelId:P,errorId:F,errors:p,required:n,labelProps:m,errorProps:b},l.createElement(i,e({id:c,"aria-labelledby":P},(null==p?void 0:p.length)?{"aria-invalid":!0,"aria-describedby":F}:{},u)))}export{d as default};
|
package/lib/es/components.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export { default as FormErrorMessage } from "./FormErrorMessage/FormErrorMessage
|
|
|
3
3
|
export { default as FormLabel } from "./FormLabel/FormLabel";
|
|
4
4
|
export { default as FormInput } from "./FormInput/FormInput";
|
|
5
5
|
export { default as FormSwitchGroup } from "./FormSwitchGroup/FormSwitchGroup";
|
|
6
|
+
export { default as FormTextarea } from "./FormTextarea/FormTextarea";
|
package/lib/es/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useFieldIds as r}from"./common/useFieldIds.js";import{useInputErrorProps as o}from"./common/useInputErrorProps.js";import{useFormComponentData as
|
|
1
|
+
import{useFieldIds as r}from"./common/useFieldIds.js";import{useInputErrorProps as o}from"./common/useInputErrorProps.js";import{useFormComponentData as e,defaultErrorParser as m}from"./common/useFormComponentData.js";import{usePrevious as s}from"./common/usePrevious.js";export{default as FormField}from"./FormField/FormField.js";export{default as FormErrorMessage}from"./FormErrorMessage/FormErrorMessage.js";export{default as FormLabel}from"./FormLabel/FormLabel.js";export{default as FormInput}from"./FormInput/FormInput.js";export{default as FormSwitchGroup}from"./FormSwitchGroup/FormSwitchGroup.js";export{default as FormTextarea}from"./FormTextarea/FormTextarea.js";var t={useFieldIds:r,useInputErrorProps:o,useFormComponentData:e,usePrevious:s,defaultErrorParser:m};export{t as common};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{__rest as e,__assign as t}from"../_virtual/_tslib.js";import a,{forwardRef as n,useRef as r,useState as l,useCallback as o,useEffect as s}from"react";import u from"clsx";import i from"./Textarea.module.css.js";var c=n((function(n,c){var m,f,p=n.icon,g=n.autoResize,h=void 0!==g&&g,v=n.wrapperProps,x=n.maxLength,d=n.className,N=n.onChange,y=n.value,_=n.defaultValue,w=e(n,["icon","autoResize","wrapperProps","maxLength","className","onChange","value","defaultValue"]),E=r(null),z=l((function(){return"string"==typeof y?y.length:"string"==typeof _?_.length:0})),C=z[0],L=z[1],R=o((function(e){E.current=e,"function"==typeof c?c(e):c&&(c.current=e)}),[c]),V=o((function(){var e=E.current;e&&h&&(e.style.height="auto",e.style.height="".concat(e.scrollHeight,"px"))}),[h]);s((function(){V()}),[y,V]),s((function(){"string"==typeof y&&null!=x&&L(y.length)}),[y,x]);var j=o((function(e){null!=x&&L(e.target.value.length),V(),null==N||N(e)}),[N,V,x]);return a.createElement("div",t({},v,{className:u(i.wrapper,null==v?void 0:v.className,(m={},m[i.withIcon]=p,m))}),a.createElement("textarea",t({ref:R},w,{value:y,defaultValue:_,maxLength:x,onChange:j,className:u(i.textarea,d,(f={},f[i.autoResize]=h,f))})),p&&a.createElement(p,{className:i.icon}),null!=x&&a.createElement("span",{className:i.counter,"aria-live":"polite"},C,"/",x))}));export{c as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={wrapper:"lds-textarea--wrapper",textarea:"lds-textarea",autoResize:"lds-textarea--auto-resize",withIcon:"lds-textarea--with-icon",icon:"lds-textarea--icon",counter:"lds-textarea--counter"};export{e as default};
|
package/llms.txt
CHANGED
|
@@ -69,6 +69,34 @@ import { FormSwitchGroup } from "@k8slens/lds-form";
|
|
|
69
69
|
<FormSwitchGroup label="Notifications" values={options} onChange={setOptions} />
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
+
### FormTextarea
|
|
73
|
+
|
|
74
|
+
Textarea wrapped in a FormField with label and error handling. Combines FormField + Textarea from @k8slens/lds.
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
import { FormTextarea } from "@k8slens/lds-form";
|
|
78
|
+
|
|
79
|
+
<FormTextarea
|
|
80
|
+
name="description"
|
|
81
|
+
label="Description"
|
|
82
|
+
maxLength={500}
|
|
83
|
+
autoResize
|
|
84
|
+
errors={errors}
|
|
85
|
+
required
|
|
86
|
+
/>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**FormTextarea Props:**
|
|
90
|
+
- Extends `TextareaProps` from @k8slens/lds Textarea component
|
|
91
|
+
- `name` (required) - Field name for form submission
|
|
92
|
+
- `label` - Field label text
|
|
93
|
+
- `labelProps` - Props passed to FormLabel
|
|
94
|
+
- `errorProps` - Props passed to FormErrorMessage
|
|
95
|
+
- `errors` - Array of error messages to display
|
|
96
|
+
- `required` (default: false) - Whether the field is required
|
|
97
|
+
- `id` - Optional field ID (auto-generated if not provided)
|
|
98
|
+
- All Textarea props: `maxLength`, `autoResize`, `icon`, `placeholder`, etc.
|
|
99
|
+
|
|
72
100
|
## Hooks
|
|
73
101
|
|
|
74
102
|
Available via `common` export:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@k8slens/lds-form",
|
|
3
|
-
"version": "0.53.
|
|
3
|
+
"version": "0.53.1",
|
|
4
4
|
"description": "Lens Design System – React Form components",
|
|
5
5
|
"author": "Mirantis Inc",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"format": "oxlint --fix . && prettier --write ."
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@k8slens/lds": "^0.58.
|
|
32
|
+
"@k8slens/lds": "^0.58.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@k8slens/lds-tokens": "^0.59.
|
|
35
|
+
"@k8slens/lds-tokens": "^0.59.1",
|
|
36
36
|
"@rollup/plugin-node-resolve": "15.0.2",
|
|
37
37
|
"@storybook/react": "6.5.16",
|
|
38
38
|
"@testing-library/react": "14.0.0",
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"\\.svg": "<rootDir>/../../__mocks__/SVGStub.js"
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "5eda1efad729aad60ce149aeca5e9dbd7f92ec3a"
|
|
60
60
|
}
|