@frontify/fondue 12.0.0-beta.355 → 12.0.0-beta.356
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.
|
@@ -3,40 +3,40 @@ import { useMemoizedId as y } from "../../hooks/useMemoizedId.es.js";
|
|
|
3
3
|
import { useFocusRing as I } from "@react-aria/focus";
|
|
4
4
|
import { mergeProps as j } from "@react-aria/utils";
|
|
5
5
|
import { FOCUS_STYLE as v } from "../../utilities/focusStyle.es.js";
|
|
6
|
-
import { merge as
|
|
6
|
+
import { merge as u } from "../../utilities/merge.es.js";
|
|
7
7
|
import { validationClassMap as D, Validation as r } from "../../utilities/validation.es.js";
|
|
8
8
|
import { useRef as M, useEffect as V } from "react";
|
|
9
9
|
import W from "react-textarea-autosize";
|
|
10
10
|
import A from "../../foundation/Icon/Generated/IconExclamationMarkTriangle.es.js";
|
|
11
11
|
import { LoadingCircle as K, LoadingCircleSize as R } from "../LoadingCircle/LoadingCircle.es.js";
|
|
12
12
|
const U = ({
|
|
13
|
-
id:
|
|
13
|
+
id: x,
|
|
14
14
|
value: d,
|
|
15
15
|
required: b = !1,
|
|
16
16
|
decorator: a,
|
|
17
17
|
placeholder: g,
|
|
18
|
-
disabled:
|
|
19
|
-
onInput:
|
|
18
|
+
disabled: s = !1,
|
|
19
|
+
onInput: n,
|
|
20
20
|
onBlur: w,
|
|
21
21
|
validation: e = r.Default,
|
|
22
|
-
minRows:
|
|
22
|
+
minRows: m,
|
|
23
23
|
maxRows: h,
|
|
24
|
-
autosize:
|
|
24
|
+
autosize: c = !1,
|
|
25
25
|
resizeable: k = !0,
|
|
26
|
-
onFocus:
|
|
27
|
-
selectable:
|
|
28
|
-
focusOnMount:
|
|
26
|
+
onFocus: f,
|
|
27
|
+
selectable: C = !1,
|
|
28
|
+
focusOnMount: p,
|
|
29
29
|
onEnterPressed: i,
|
|
30
|
-
...
|
|
30
|
+
...N
|
|
31
31
|
}) => {
|
|
32
|
-
const
|
|
32
|
+
const T = c ? W : "textarea", l = M(null);
|
|
33
33
|
V(() => {
|
|
34
34
|
var t;
|
|
35
|
-
|
|
36
|
-
}, [
|
|
37
|
-
const
|
|
35
|
+
p && ((t = l.current) == null || t.focus());
|
|
36
|
+
}, [p]);
|
|
37
|
+
const z = (t) => {
|
|
38
38
|
t.key === "Enter" && (i == null || i(t));
|
|
39
|
-
}, { isFocusVisible: E, focusProps: F } = I({ isTextInput: !0 }), L = { maxRows: h, minRows:
|
|
39
|
+
}, { isFocusVisible: E, focusProps: F } = I({ isTextInput: !0 }), L = { maxRows: h, minRows: m };
|
|
40
40
|
return /* @__PURE__ */ S("div", { className: "tw-relative", children: [
|
|
41
41
|
a && /* @__PURE__ */ o(
|
|
42
42
|
"div",
|
|
@@ -47,41 +47,45 @@ const U = ({
|
|
|
47
47
|
}
|
|
48
48
|
),
|
|
49
49
|
/* @__PURE__ */ o(
|
|
50
|
-
|
|
50
|
+
T,
|
|
51
51
|
{
|
|
52
52
|
...j(F, {
|
|
53
53
|
onBlur: (t) => w && w(t.target.value),
|
|
54
|
-
onInput: (t) =>
|
|
54
|
+
onInput: (t) => n && n(t.target.value)
|
|
55
55
|
}),
|
|
56
|
-
...
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
...c ? L : { rows: m },
|
|
57
|
+
onClick: () => {
|
|
58
|
+
var t;
|
|
59
|
+
return (t = l.current) == null ? void 0 : t.focus();
|
|
60
|
+
},
|
|
61
|
+
id: y(x),
|
|
62
|
+
ref: l,
|
|
59
63
|
value: d,
|
|
60
64
|
placeholder: g,
|
|
61
65
|
required: b,
|
|
62
|
-
className:
|
|
66
|
+
className: u([
|
|
63
67
|
"tw-w-full tw-p-2 tw-border tw-rounded tw-text-s tw-outline-none tw-transition tw-placeholder-black-60",
|
|
64
68
|
!!a && "tw-pl-7 ",
|
|
65
|
-
|
|
69
|
+
s ? "tw-border-black-5 tw-bg-black-5 tw-text-black-40" : "tw-text-black tw-border-black-20 hover:tw-border-line-x-strong focus-within:tw-border-line-xx-strong focus-within:hover:tw-border-line-xx-strong",
|
|
66
70
|
E && v,
|
|
67
71
|
D[e],
|
|
68
72
|
!k && "tw-resize-none",
|
|
69
73
|
e === r.Error && "tw-pr-8"
|
|
70
74
|
]),
|
|
71
|
-
disabled:
|
|
75
|
+
disabled: s,
|
|
72
76
|
onFocus: (t) => {
|
|
73
|
-
|
|
77
|
+
C && t.target.select(), f && f(t);
|
|
74
78
|
},
|
|
75
|
-
onKeyDown:
|
|
79
|
+
onKeyDown: z,
|
|
76
80
|
"data-test-id": "textarea",
|
|
77
|
-
...
|
|
81
|
+
...N
|
|
78
82
|
}
|
|
79
83
|
),
|
|
80
84
|
e === r.Loading && /* @__PURE__ */ o("span", { className: "tw-absolute tw-top-[-0.55rem] tw-right-[-0.55rem] tw-bg-white tw-rounded-full tw-p-[2px] tw-border tw-border-black-10", children: /* @__PURE__ */ o(K, { size: R.ExtraSmall }) }),
|
|
81
85
|
(e === r.Error || e === r.Warning) && /* @__PURE__ */ o(
|
|
82
86
|
"span",
|
|
83
87
|
{
|
|
84
|
-
className:
|
|
88
|
+
className: u([
|
|
85
89
|
"tw-absolute tw-top-[0.6rem] tw-right-[0.6rem]",
|
|
86
90
|
e === r.Error && "tw-text-text-negative",
|
|
87
91
|
e === r.Warning && "tw-text-text-warning"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.es.js","sources":["../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { useFocusRing } from '@react-aria/focus';\nimport { mergeProps } from '@react-aria/utils';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { Validation, validationClassMap } from '@utilities/validation';\nimport { LoadingCircle, LoadingCircleSize } from '@components/LoadingCircle';\nimport {\n AriaAttributes,\n FocusEvent,\n FormEvent,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n} from 'react';\nimport TextareaAutosize, { TextareaAutosizeProps } from 'react-textarea-autosize';\nimport { IconExclamationMarkTriangle } from '@foundation/Icon/Generated';\n\nexport type TextareaProps = {\n id?: string;\n value?: string;\n required?: boolean;\n decorator?: ReactNode;\n placeholder?: string;\n disabled?: boolean;\n onInput?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (e: FocusEvent<HTMLTextAreaElement>) => void;\n validation?: Validation;\n /** When autosize if false, this is used as 'rows' property for standard textarea */\n minRows?: number;\n /** When autosize if false, this property is ignored */\n maxRows?: number;\n autosize?: boolean;\n resizeable?: boolean;\n selectable?: boolean;\n focusOnMount?: boolean;\n onEnterPressed?: (event: KeyboardEvent<HTMLTextAreaElement>) => void;\n} & AriaAttributes;\n\nexport const Textarea = ({\n id: propId,\n value,\n required = false,\n decorator,\n placeholder,\n disabled = false,\n onInput,\n onBlur,\n validation = Validation.Default,\n minRows,\n maxRows,\n autosize = false,\n resizeable = true,\n onFocus,\n selectable = false,\n focusOnMount,\n onEnterPressed,\n ...props\n}: TextareaProps): ReactElement => {\n const Component = autosize ? TextareaAutosize : 'textarea';\n\n const textareaElement = useRef<HTMLTextAreaElement | null>(null);\n\n useEffect(() => {\n focusOnMount && textareaElement.current?.focus();\n }, [focusOnMount]);\n\n const onKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter') {\n onEnterPressed?.(event);\n }\n };\n\n const { isFocusVisible, focusProps } = useFocusRing({ isTextInput: true });\n\n const autosizeProps = { maxRows, minRows };\n\n return (\n <div className=\"tw-relative\">\n {decorator && (\n <div\n className=\"tw-absolute tw-top-2 tw-left-2 tw-inline-flex tw-items-end tw-text-black-80\"\n data-test-id=\"decorator\"\n >\n {decorator}\n </div>\n )}\n <Component\n {...(mergeProps(focusProps, {\n onBlur: (event: FocusEvent<HTMLTextAreaElement>) => onBlur && onBlur(event.target.value),\n onInput: (event: FormEvent<HTMLTextAreaElement>) =>\n onInput && onInput((event.target as HTMLTextAreaElement).value),\n }) as TextareaAutosizeProps)}\n {...(autosize ? autosizeProps : { rows: minRows })}\n id={useMemoizedId(propId)}\n ref={textareaElement}\n value={value}\n placeholder={placeholder}\n required={required}\n className={merge([\n 'tw-w-full tw-p-2 tw-border tw-rounded tw-text-s tw-outline-none tw-transition tw-placeholder-black-60',\n !!decorator && 'tw-pl-7 ',\n disabled\n ? 'tw-border-black-5 tw-bg-black-5 tw-text-black-40'\n : 'tw-text-black tw-border-black-20 hover:tw-border-line-x-strong focus-within:tw-border-line-xx-strong focus-within:hover:tw-border-line-xx-strong',\n isFocusVisible && FOCUS_STYLE,\n validationClassMap[validation],\n !resizeable && 'tw-resize-none',\n validation === Validation.Error && 'tw-pr-8',\n ])}\n disabled={disabled}\n onFocus={(e) => {\n if (selectable) {\n e.target.select();\n }\n if (onFocus) {\n onFocus(e);\n }\n }}\n onKeyDown={onKeyDown}\n data-test-id=\"textarea\"\n {...props}\n />\n {validation === Validation.Loading && (\n <span className=\"tw-absolute tw-top-[-0.55rem] tw-right-[-0.55rem] tw-bg-white tw-rounded-full tw-p-[2px] tw-border tw-border-black-10\">\n <LoadingCircle size={LoadingCircleSize.ExtraSmall} />\n </span>\n )}\n {(validation === Validation.Error || validation === Validation.Warning) && (\n <span\n className={merge([\n 'tw-absolute tw-top-[0.6rem] tw-right-[0.6rem]',\n validation === Validation.Error && 'tw-text-text-negative',\n validation === Validation.Warning && 'tw-text-text-warning',\n ])}\n data-test-id=\"error-state-exclamation-mark-icon\"\n >\n <IconExclamationMarkTriangle />\n </span>\n )}\n </div>\n );\n};\nTextarea.displayName = 'FondueTextarea';\n"],"names":["Textarea","propId","value","required","decorator","placeholder","disabled","onInput","onBlur","validation","Validation","minRows","maxRows","autosize","resizeable","onFocus","selectable","focusOnMount","onEnterPressed","props","Component","TextareaAutosize","textareaElement","useRef","useEffect","_a","onKeyDown","event","isFocusVisible","focusProps","useFocusRing","autosizeProps","jsxs","jsx","mergeProps","useMemoizedId","merge","FOCUS_STYLE","validationClassMap","e","LoadingCircle","LoadingCircleSize","IconExclamationMarkTriangle"],"mappings":";;;;;;;;;;;AA4CO,MAAMA,IAAW,CAAC;AAAA,EACrB,IAAIC;AAAA,EACJ,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC,IAAaC,EAAW;AAAA,EACxB,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,SAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,GAAGC;AACP,MAAmC;AACzB,QAAAC,IAAYP,IAAWQ,IAAmB,YAE1CC,IAAkBC,EAAmC,IAAI;AAE/D,EAAAC,EAAU,MAAM;;AACI,IAAAP,OAAAQ,IAAAH,EAAgB,YAAhB,QAAAG,EAAyB;AAAA,EAAM,GAChD,CAACR,CAAY,CAAC;AAEX,QAAAS,IAAY,CAACC,MAA8C;AACzD,IAAAA,EAAM,QAAQ,YACdT,KAAA,QAAAA,EAAiBS;AAAA,EACrB,GAGE,EAAE,gBAAAC,GAAgB,YAAAC,EAAW,IAAIC,EAAa,EAAE,aAAa,IAAM,GAEnEC,IAAgB,EAAE,SAAAnB,GAAS,SAAAD;AAG7B,SAAA,gBAAAqB,EAAC,OAAI,EAAA,WAAU,eACV,UAAA;AAAA,IACG5B,KAAA,gBAAA6B;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,gBAAa;AAAA,QAEZ,UAAA7B;AAAA,MAAA;AAAA,IACL;AAAA,IAEJ,gBAAA6B;AAAA,MAACb;AAAA,MAAA;AAAA,QACI,GAAIc,EAAWL,GAAY;AAAA,UACxB,QAAQ,CAACF,MAA2CnB,KAAUA,EAAOmB,EAAM,OAAO,KAAK;AAAA,UACvF,SAAS,CAACA,MACNpB,KAAWA,EAASoB,EAAM,OAA+B,KAAK;AAAA,QAAA,CACrE;AAAA,QACA,GAAId,IAAWkB,IAAgB,EAAE,MAAMpB,EAAQ;AAAA,QAChD,
|
|
1
|
+
{"version":3,"file":"Textarea.es.js","sources":["../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { useFocusRing } from '@react-aria/focus';\nimport { mergeProps } from '@react-aria/utils';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { Validation, validationClassMap } from '@utilities/validation';\nimport { LoadingCircle, LoadingCircleSize } from '@components/LoadingCircle';\nimport {\n AriaAttributes,\n FocusEvent,\n FormEvent,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n} from 'react';\nimport TextareaAutosize, { TextareaAutosizeProps } from 'react-textarea-autosize';\nimport { IconExclamationMarkTriangle } from '@foundation/Icon/Generated';\n\nexport type TextareaProps = {\n id?: string;\n value?: string;\n required?: boolean;\n decorator?: ReactNode;\n placeholder?: string;\n disabled?: boolean;\n onInput?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (e: FocusEvent<HTMLTextAreaElement>) => void;\n validation?: Validation;\n /** When autosize if false, this is used as 'rows' property for standard textarea */\n minRows?: number;\n /** When autosize if false, this property is ignored */\n maxRows?: number;\n autosize?: boolean;\n resizeable?: boolean;\n selectable?: boolean;\n focusOnMount?: boolean;\n onEnterPressed?: (event: KeyboardEvent<HTMLTextAreaElement>) => void;\n} & AriaAttributes;\n\nexport const Textarea = ({\n id: propId,\n value,\n required = false,\n decorator,\n placeholder,\n disabled = false,\n onInput,\n onBlur,\n validation = Validation.Default,\n minRows,\n maxRows,\n autosize = false,\n resizeable = true,\n onFocus,\n selectable = false,\n focusOnMount,\n onEnterPressed,\n ...props\n}: TextareaProps): ReactElement => {\n const Component = autosize ? TextareaAutosize : 'textarea';\n\n const textareaElement = useRef<HTMLTextAreaElement | null>(null);\n\n useEffect(() => {\n focusOnMount && textareaElement.current?.focus();\n }, [focusOnMount]);\n\n const onKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter') {\n onEnterPressed?.(event);\n }\n };\n\n const { isFocusVisible, focusProps } = useFocusRing({ isTextInput: true });\n\n const autosizeProps = { maxRows, minRows };\n\n return (\n <div className=\"tw-relative\">\n {decorator && (\n <div\n className=\"tw-absolute tw-top-2 tw-left-2 tw-inline-flex tw-items-end tw-text-black-80\"\n data-test-id=\"decorator\"\n >\n {decorator}\n </div>\n )}\n <Component\n {...(mergeProps(focusProps, {\n onBlur: (event: FocusEvent<HTMLTextAreaElement>) => onBlur && onBlur(event.target.value),\n onInput: (event: FormEvent<HTMLTextAreaElement>) =>\n onInput && onInput((event.target as HTMLTextAreaElement).value),\n }) as TextareaAutosizeProps)}\n {...(autosize ? autosizeProps : { rows: minRows })}\n onClick={() => textareaElement.current?.focus()}\n id={useMemoizedId(propId)}\n ref={textareaElement}\n value={value}\n placeholder={placeholder}\n required={required}\n className={merge([\n 'tw-w-full tw-p-2 tw-border tw-rounded tw-text-s tw-outline-none tw-transition tw-placeholder-black-60',\n !!decorator && 'tw-pl-7 ',\n disabled\n ? 'tw-border-black-5 tw-bg-black-5 tw-text-black-40'\n : 'tw-text-black tw-border-black-20 hover:tw-border-line-x-strong focus-within:tw-border-line-xx-strong focus-within:hover:tw-border-line-xx-strong',\n isFocusVisible && FOCUS_STYLE,\n validationClassMap[validation],\n !resizeable && 'tw-resize-none',\n validation === Validation.Error && 'tw-pr-8',\n ])}\n disabled={disabled}\n onFocus={(e) => {\n if (selectable) {\n e.target.select();\n }\n if (onFocus) {\n onFocus(e);\n }\n }}\n onKeyDown={onKeyDown}\n data-test-id=\"textarea\"\n {...props}\n />\n {validation === Validation.Loading && (\n <span className=\"tw-absolute tw-top-[-0.55rem] tw-right-[-0.55rem] tw-bg-white tw-rounded-full tw-p-[2px] tw-border tw-border-black-10\">\n <LoadingCircle size={LoadingCircleSize.ExtraSmall} />\n </span>\n )}\n {(validation === Validation.Error || validation === Validation.Warning) && (\n <span\n className={merge([\n 'tw-absolute tw-top-[0.6rem] tw-right-[0.6rem]',\n validation === Validation.Error && 'tw-text-text-negative',\n validation === Validation.Warning && 'tw-text-text-warning',\n ])}\n data-test-id=\"error-state-exclamation-mark-icon\"\n >\n <IconExclamationMarkTriangle />\n </span>\n )}\n </div>\n );\n};\nTextarea.displayName = 'FondueTextarea';\n"],"names":["Textarea","propId","value","required","decorator","placeholder","disabled","onInput","onBlur","validation","Validation","minRows","maxRows","autosize","resizeable","onFocus","selectable","focusOnMount","onEnterPressed","props","Component","TextareaAutosize","textareaElement","useRef","useEffect","_a","onKeyDown","event","isFocusVisible","focusProps","useFocusRing","autosizeProps","jsxs","jsx","mergeProps","useMemoizedId","merge","FOCUS_STYLE","validationClassMap","e","LoadingCircle","LoadingCircleSize","IconExclamationMarkTriangle"],"mappings":"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"}
|