@equinor/eds-core-react 2.3.0 → 2.3.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/README.md +3 -0
- package/build/index.css +1252 -0
- package/build/index.min.css +5 -0
- package/dist/eds-core-react.cjs +2 -2
- package/dist/esm/components/Autocomplete/SingleInput.js +2 -2
- package/dist/esm/components/EdsProvider/eds.context.js +3 -31
- package/dist/esm/components/next/Button/Button.js +53 -0
- package/dist/esm/components/next/Checkbox/Checkbox.js +85 -0
- package/dist/esm/components/next/Field/Field.Description.js +25 -0
- package/dist/esm/components/next/Field/Field.HelperMessage.js +45 -0
- package/dist/esm/components/next/Field/Field.Label.js +31 -0
- package/dist/esm/components/next/Field/Field.js +29 -0
- package/dist/esm/components/next/Field/useFieldIds.js +57 -0
- package/dist/esm/components/next/Icon/Icon.js +0 -1
- package/dist/esm/components/next/Input/Input.js +92 -0
- package/dist/esm/components/next/Radio/Radio.js +63 -0
- package/dist/esm/components/next/Switch/Switch.js +64 -0
- package/dist/esm/components/next/TextField/TextField.js +69 -0
- package/dist/esm/index.next.js +8 -1
- package/dist/index.next.cjs +825 -39
- package/dist/types/components/Autocomplete/Autocomplete.d.ts +2 -2
- package/dist/types/components/Autocomplete/AutocompleteContext.d.ts +2 -2
- package/dist/types/components/Autocomplete/useAutocomplete.d.ts +1 -1
- package/dist/types/components/Datepicker/DateRangePicker.d.ts +1 -1
- package/dist/types/components/SideBar/SideBarButton/index.d.ts +1 -1
- package/dist/types/components/next/Button/Button.d.ts +8 -0
- package/dist/types/components/next/Button/Button.figma.d.ts +1 -0
- package/dist/types/components/next/Button/Button.types.d.ts +80 -0
- package/dist/types/components/next/Button/index.d.ts +2 -0
- package/dist/types/components/next/Checkbox/Checkbox.d.ts +7 -0
- package/dist/types/components/next/Checkbox/Checkbox.figma.d.ts +1 -0
- package/dist/types/components/next/Checkbox/Checkbox.types.d.ts +15 -0
- package/dist/types/components/next/Checkbox/index.d.ts +2 -0
- package/dist/types/components/next/Field/Field.Description.d.ts +3 -0
- package/dist/types/components/next/Field/Field.HelperMessage.d.ts +19 -0
- package/dist/types/components/next/Field/Field.HelperMessage.types.d.ts +12 -0
- package/dist/types/components/next/Field/Field.Label.d.ts +4 -0
- package/dist/types/components/next/Field/Field.d.ts +15 -0
- package/dist/types/components/next/Field/Field.types.d.ts +25 -0
- package/dist/types/components/next/Field/index.d.ts +5 -0
- package/dist/types/components/next/Field/useFieldIds.d.ts +59 -0
- package/dist/types/components/next/Input/Input.d.ts +3 -0
- package/dist/types/components/next/Input/Input.types.d.ts +17 -0
- package/dist/types/components/next/Input/index.d.ts +2 -0
- package/dist/types/components/next/Placeholder/Placeholder.d.ts +4 -6
- package/dist/types/components/next/Placeholder/index.d.ts +0 -1
- package/dist/types/components/next/Radio/Radio.d.ts +3 -0
- package/dist/types/components/next/Radio/Radio.figma.d.ts +1 -0
- package/dist/types/components/next/Radio/Radio.types.d.ts +5 -0
- package/dist/types/components/next/Radio/index.d.ts +2 -0
- package/dist/types/components/next/Switch/Switch.d.ts +3 -0
- package/dist/types/components/next/Switch/Switch.types.d.ts +7 -0
- package/dist/types/components/next/Switch/index.d.ts +2 -0
- package/dist/types/components/next/TextField/TextField.d.ts +17 -0
- package/dist/types/components/next/TextField/TextField.types.d.ts +16 -0
- package/dist/types/components/next/TextField/index.d.ts +2 -0
- package/dist/types/components/next/index.d.ts +14 -2
- package/dist/types/index.next.d.ts +3 -0
- package/package.json +5 -9
- package/dist/esm/components/next/Icon/icon.css.js +0 -6
- package/dist/esm/components/next/Placeholder/Placeholder.js +0 -17
- package/dist/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +0 -26
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { forwardRef } from 'react';
|
|
2
|
+
import { error_filled } from '@equinor/eds-icons';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { Icon } from '../Icon/Icon.js';
|
|
5
|
+
|
|
6
|
+
const Input = /*#__PURE__*/forwardRef(function Input({
|
|
7
|
+
invalid = false,
|
|
8
|
+
disabled,
|
|
9
|
+
readOnly,
|
|
10
|
+
type = 'text',
|
|
11
|
+
startText,
|
|
12
|
+
startAdornment,
|
|
13
|
+
endText,
|
|
14
|
+
endAdornment,
|
|
15
|
+
containerClassName,
|
|
16
|
+
className,
|
|
17
|
+
as: Component = 'input',
|
|
18
|
+
...inputProps
|
|
19
|
+
}, ref) {
|
|
20
|
+
const tone = invalid && !disabled ? 'danger' : 'neutral';
|
|
21
|
+
const showErrorIcon = invalid && !disabled;
|
|
22
|
+
const hasStartAdornment = startText || startAdornment;
|
|
23
|
+
const hasEndAdornment = endText || endAdornment;
|
|
24
|
+
const containerClasses = ['eds-input-container', containerClassName].filter(Boolean).join(' ');
|
|
25
|
+
return /*#__PURE__*/jsxs("div", {
|
|
26
|
+
className: containerClasses,
|
|
27
|
+
"data-color-appearance": tone,
|
|
28
|
+
"data-font-size": "md",
|
|
29
|
+
"data-selectable-space": "sm",
|
|
30
|
+
"data-space-proportions": "squished",
|
|
31
|
+
"data-disabled": disabled || undefined,
|
|
32
|
+
"data-readonly": readOnly || undefined,
|
|
33
|
+
"data-invalid": invalid || undefined,
|
|
34
|
+
children: [showErrorIcon && /*#__PURE__*/jsx("span", {
|
|
35
|
+
className: "eds-error-icon",
|
|
36
|
+
"data-font-size": "xs",
|
|
37
|
+
"data-font-family": "ui",
|
|
38
|
+
"data-baseline": "center",
|
|
39
|
+
children: /*#__PURE__*/jsx(Icon, {
|
|
40
|
+
data: error_filled
|
|
41
|
+
})
|
|
42
|
+
}), hasStartAdornment && /*#__PURE__*/jsxs("div", {
|
|
43
|
+
className: "eds-adornment",
|
|
44
|
+
"data-font-size": "xs",
|
|
45
|
+
children: [startText && /*#__PURE__*/jsx("span", {
|
|
46
|
+
className: "eds-adornment__text",
|
|
47
|
+
"data-color-appearance": "neutral",
|
|
48
|
+
"data-font-family": "ui",
|
|
49
|
+
"data-font-size": "xs",
|
|
50
|
+
"data-baseline": "center",
|
|
51
|
+
children: startText
|
|
52
|
+
}), startAdornment && /*#__PURE__*/jsx("span", {
|
|
53
|
+
className: "eds-adornment__adornment",
|
|
54
|
+
"data-font-size": "xs",
|
|
55
|
+
"data-font-family": "ui",
|
|
56
|
+
"data-baseline": "center",
|
|
57
|
+
children: startAdornment
|
|
58
|
+
})]
|
|
59
|
+
}), /*#__PURE__*/jsx(Component, {
|
|
60
|
+
ref: ref,
|
|
61
|
+
type: type,
|
|
62
|
+
disabled: disabled,
|
|
63
|
+
readOnly: readOnly,
|
|
64
|
+
className: ['eds-input', className].filter(Boolean).join(' '),
|
|
65
|
+
"data-color-appearance": "neutral",
|
|
66
|
+
"data-font-family": "ui",
|
|
67
|
+
"data-font-size": "md",
|
|
68
|
+
"data-line-height": "default",
|
|
69
|
+
...inputProps,
|
|
70
|
+
"aria-invalid": invalid || undefined
|
|
71
|
+
}), hasEndAdornment && /*#__PURE__*/jsxs("div", {
|
|
72
|
+
className: "eds-adornment",
|
|
73
|
+
"data-font-size": "xs",
|
|
74
|
+
children: [endText && /*#__PURE__*/jsx("span", {
|
|
75
|
+
className: "eds-adornment__text",
|
|
76
|
+
"data-color-appearance": "neutral",
|
|
77
|
+
"data-font-family": "ui",
|
|
78
|
+
"data-font-size": "xs",
|
|
79
|
+
"data-baseline": "center",
|
|
80
|
+
children: endText
|
|
81
|
+
}), endAdornment && /*#__PURE__*/jsx("span", {
|
|
82
|
+
className: "eds-adornment__adornment",
|
|
83
|
+
"data-font-size": "xs",
|
|
84
|
+
"data-font-family": "ui",
|
|
85
|
+
"data-baseline": "center",
|
|
86
|
+
children: endAdornment
|
|
87
|
+
})]
|
|
88
|
+
})]
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
export { Input };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { forwardRef, useId } from 'react';
|
|
2
|
+
import { radio_button_selected, radio_button_unselected } from '@equinor/eds-icons';
|
|
3
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { Icon } from '../Icon/Icon.js';
|
|
5
|
+
import { Field } from '../Field/Field.js';
|
|
6
|
+
|
|
7
|
+
/* eslint camelcase: "off" */
|
|
8
|
+
const classNames = (...classes) => classes.filter(Boolean).join(' ');
|
|
9
|
+
const Radio = /*#__PURE__*/forwardRef(function Radio({
|
|
10
|
+
label,
|
|
11
|
+
disabled = false,
|
|
12
|
+
id: providedId,
|
|
13
|
+
...rest
|
|
14
|
+
}, ref) {
|
|
15
|
+
const generatedId = useId();
|
|
16
|
+
const inputId = providedId ?? generatedId;
|
|
17
|
+
const radioInput = /*#__PURE__*/jsxs(Fragment, {
|
|
18
|
+
children: [/*#__PURE__*/jsx("input", {
|
|
19
|
+
type: "radio",
|
|
20
|
+
id: inputId,
|
|
21
|
+
className: "eds-radio__input",
|
|
22
|
+
disabled: disabled,
|
|
23
|
+
ref: ref,
|
|
24
|
+
...rest
|
|
25
|
+
}), /*#__PURE__*/jsxs("span", {
|
|
26
|
+
className: "eds-radio__icon-wrapper",
|
|
27
|
+
children: [/*#__PURE__*/jsx(Icon, {
|
|
28
|
+
data: radio_button_selected,
|
|
29
|
+
size: "lg",
|
|
30
|
+
className: "eds-radio__icon eds-radio__icon--checked"
|
|
31
|
+
}), /*#__PURE__*/jsx(Icon, {
|
|
32
|
+
data: radio_button_unselected,
|
|
33
|
+
size: "lg",
|
|
34
|
+
className: "eds-radio__icon eds-radio__icon--unchecked"
|
|
35
|
+
})]
|
|
36
|
+
})]
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Use Field for layout when label is provided
|
|
40
|
+
if (label) {
|
|
41
|
+
return /*#__PURE__*/jsxs(Field, {
|
|
42
|
+
position: "start",
|
|
43
|
+
disabled: disabled,
|
|
44
|
+
className: "eds-radio",
|
|
45
|
+
"data-color-appearance": disabled ? 'neutral' : 'accent',
|
|
46
|
+
"data-selectable-space": "md",
|
|
47
|
+
"data-space-proportions": "squished",
|
|
48
|
+
children: [radioInput, /*#__PURE__*/jsx(Field.Label, {
|
|
49
|
+
htmlFor: inputId,
|
|
50
|
+
children: label
|
|
51
|
+
})]
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return /*#__PURE__*/jsx("span", {
|
|
55
|
+
className: classNames('eds-radio', 'eds-radio--standalone'),
|
|
56
|
+
"data-color-appearance": disabled ? 'neutral' : 'accent',
|
|
57
|
+
"data-disabled": disabled || undefined,
|
|
58
|
+
children: radioInput
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
Radio.displayName = 'Radio';
|
|
62
|
+
|
|
63
|
+
export { Radio };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { forwardRef, useId, useState, useCallback } from 'react';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { Field } from '../Field/Field.js';
|
|
4
|
+
|
|
5
|
+
const Switch = /*#__PURE__*/forwardRef(function Switch({
|
|
6
|
+
label,
|
|
7
|
+
disabled,
|
|
8
|
+
className,
|
|
9
|
+
id,
|
|
10
|
+
checked: controlledChecked,
|
|
11
|
+
defaultChecked,
|
|
12
|
+
onChange,
|
|
13
|
+
...rest
|
|
14
|
+
}, ref) {
|
|
15
|
+
const generatedId = useId();
|
|
16
|
+
const inputId = id ?? generatedId;
|
|
17
|
+
|
|
18
|
+
// Track checked state for dynamic color appearance
|
|
19
|
+
const isControlled = controlledChecked !== undefined;
|
|
20
|
+
const [internalChecked, setInternalChecked] = useState(defaultChecked ?? false);
|
|
21
|
+
const isChecked = isControlled ? controlledChecked : internalChecked;
|
|
22
|
+
const handleChange = useCallback(event => {
|
|
23
|
+
if (!isControlled) {
|
|
24
|
+
setInternalChecked(event.target.checked);
|
|
25
|
+
}
|
|
26
|
+
onChange?.(event);
|
|
27
|
+
}, [isControlled, onChange]);
|
|
28
|
+
return /*#__PURE__*/jsxs(Field, {
|
|
29
|
+
position: "start",
|
|
30
|
+
disabled: disabled,
|
|
31
|
+
className: ['eds-switch', className].filter(Boolean).join(' '),
|
|
32
|
+
"data-font-size": "md",
|
|
33
|
+
"data-selectable-space": "md",
|
|
34
|
+
"data-space-proportions": "squished",
|
|
35
|
+
"data-color-appearance": disabled ? 'neutral' : 'accent',
|
|
36
|
+
children: [/*#__PURE__*/jsxs("span", {
|
|
37
|
+
className: "eds-switch__control",
|
|
38
|
+
"data-color-appearance": !disabled && isChecked ? 'accent' : 'neutral',
|
|
39
|
+
children: [/*#__PURE__*/jsx("input", {
|
|
40
|
+
type: "checkbox",
|
|
41
|
+
role: "switch",
|
|
42
|
+
id: inputId,
|
|
43
|
+
className: "eds-switch__input",
|
|
44
|
+
disabled: disabled,
|
|
45
|
+
ref: ref,
|
|
46
|
+
checked: isControlled ? controlledChecked : undefined,
|
|
47
|
+
defaultChecked: !isControlled ? defaultChecked : undefined,
|
|
48
|
+
onChange: handleChange,
|
|
49
|
+
...rest
|
|
50
|
+
}), /*#__PURE__*/jsx("span", {
|
|
51
|
+
className: "eds-switch__track",
|
|
52
|
+
children: /*#__PURE__*/jsx("span", {
|
|
53
|
+
className: "eds-switch__handle"
|
|
54
|
+
})
|
|
55
|
+
})]
|
|
56
|
+
}), /*#__PURE__*/jsx(Field.Label, {
|
|
57
|
+
htmlFor: inputId,
|
|
58
|
+
children: label
|
|
59
|
+
})]
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
Switch.displayName = 'Switch';
|
|
63
|
+
|
|
64
|
+
export { Switch };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { forwardRef } from 'react';
|
|
2
|
+
import { info_circle } from '@equinor/eds-icons';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { useFieldIds } from '../Field/useFieldIds.js';
|
|
5
|
+
import { Field } from '../Field/Field.js';
|
|
6
|
+
import { Tooltip } from '../../Tooltip/Tooltip.js';
|
|
7
|
+
import { Icon } from '../Icon/Icon.js';
|
|
8
|
+
import { Input } from '../Input/Input.js';
|
|
9
|
+
|
|
10
|
+
const TextField = /*#__PURE__*/forwardRef(function TextField({
|
|
11
|
+
label,
|
|
12
|
+
labelInfo,
|
|
13
|
+
indicator,
|
|
14
|
+
description,
|
|
15
|
+
helperMessage,
|
|
16
|
+
id: providedId,
|
|
17
|
+
invalid = false,
|
|
18
|
+
disabled = false,
|
|
19
|
+
...inputProps
|
|
20
|
+
}, ref) {
|
|
21
|
+
const {
|
|
22
|
+
inputId,
|
|
23
|
+
descriptionId,
|
|
24
|
+
helperMessageId,
|
|
25
|
+
getDescribedBy
|
|
26
|
+
} = useFieldIds(providedId);
|
|
27
|
+
return /*#__PURE__*/jsxs(Field, {
|
|
28
|
+
disabled: disabled,
|
|
29
|
+
children: [label && /*#__PURE__*/jsxs("div", {
|
|
30
|
+
className: "eds-text-field__header",
|
|
31
|
+
children: [/*#__PURE__*/jsx(Field.Label, {
|
|
32
|
+
htmlFor: inputId,
|
|
33
|
+
indicator: indicator,
|
|
34
|
+
children: label
|
|
35
|
+
}), labelInfo && /*#__PURE__*/jsx(Tooltip, {
|
|
36
|
+
title: labelInfo,
|
|
37
|
+
placement: "top",
|
|
38
|
+
children: /*#__PURE__*/jsx("button", {
|
|
39
|
+
type: "button",
|
|
40
|
+
className: "eds-text-field__info",
|
|
41
|
+
"aria-label": "More information",
|
|
42
|
+
children: /*#__PURE__*/jsx(Icon, {
|
|
43
|
+
data: info_circle,
|
|
44
|
+
size: "xs"
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
})]
|
|
48
|
+
}), description && /*#__PURE__*/jsx(Field.Description, {
|
|
49
|
+
id: descriptionId,
|
|
50
|
+
children: description
|
|
51
|
+
}), /*#__PURE__*/jsx(Input, {
|
|
52
|
+
ref: ref,
|
|
53
|
+
id: inputId,
|
|
54
|
+
disabled: disabled,
|
|
55
|
+
invalid: invalid,
|
|
56
|
+
"aria-describedby": getDescribedBy({
|
|
57
|
+
hasDescription: !!description,
|
|
58
|
+
hasHelperMessage: !!helperMessage
|
|
59
|
+
}),
|
|
60
|
+
...inputProps
|
|
61
|
+
}), helperMessage && /*#__PURE__*/jsx(Field.HelperMessage, {
|
|
62
|
+
id: helperMessageId,
|
|
63
|
+
role: invalid ? 'alert' : undefined,
|
|
64
|
+
children: helperMessage
|
|
65
|
+
})]
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
export { TextField };
|
package/dist/esm/index.next.js
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { Button } from './components/next/Button/Button.js';
|
|
2
2
|
export { Icon } from './components/next/Icon/Icon.js';
|
|
3
|
+
export { Field } from './components/next/Field/Field.js';
|
|
4
|
+
export { useFieldIds } from './components/next/Field/useFieldIds.js';
|
|
5
|
+
export { Checkbox } from './components/next/Checkbox/Checkbox.js';
|
|
6
|
+
export { Radio } from './components/next/Radio/Radio.js';
|
|
7
|
+
export { Switch } from './components/next/Switch/Switch.js';
|
|
8
|
+
export { Input } from './components/next/Input/Input.js';
|
|
9
|
+
export { TextField } from './components/next/TextField/TextField.js';
|