@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.
Files changed (62) hide show
  1. package/README.md +3 -0
  2. package/build/index.css +1252 -0
  3. package/build/index.min.css +5 -0
  4. package/dist/eds-core-react.cjs +2 -2
  5. package/dist/esm/components/Autocomplete/SingleInput.js +2 -2
  6. package/dist/esm/components/EdsProvider/eds.context.js +3 -31
  7. package/dist/esm/components/next/Button/Button.js +53 -0
  8. package/dist/esm/components/next/Checkbox/Checkbox.js +85 -0
  9. package/dist/esm/components/next/Field/Field.Description.js +25 -0
  10. package/dist/esm/components/next/Field/Field.HelperMessage.js +45 -0
  11. package/dist/esm/components/next/Field/Field.Label.js +31 -0
  12. package/dist/esm/components/next/Field/Field.js +29 -0
  13. package/dist/esm/components/next/Field/useFieldIds.js +57 -0
  14. package/dist/esm/components/next/Icon/Icon.js +0 -1
  15. package/dist/esm/components/next/Input/Input.js +92 -0
  16. package/dist/esm/components/next/Radio/Radio.js +63 -0
  17. package/dist/esm/components/next/Switch/Switch.js +64 -0
  18. package/dist/esm/components/next/TextField/TextField.js +69 -0
  19. package/dist/esm/index.next.js +8 -1
  20. package/dist/index.next.cjs +825 -39
  21. package/dist/types/components/Autocomplete/Autocomplete.d.ts +2 -2
  22. package/dist/types/components/Autocomplete/AutocompleteContext.d.ts +2 -2
  23. package/dist/types/components/Autocomplete/useAutocomplete.d.ts +1 -1
  24. package/dist/types/components/Datepicker/DateRangePicker.d.ts +1 -1
  25. package/dist/types/components/SideBar/SideBarButton/index.d.ts +1 -1
  26. package/dist/types/components/next/Button/Button.d.ts +8 -0
  27. package/dist/types/components/next/Button/Button.figma.d.ts +1 -0
  28. package/dist/types/components/next/Button/Button.types.d.ts +80 -0
  29. package/dist/types/components/next/Button/index.d.ts +2 -0
  30. package/dist/types/components/next/Checkbox/Checkbox.d.ts +7 -0
  31. package/dist/types/components/next/Checkbox/Checkbox.figma.d.ts +1 -0
  32. package/dist/types/components/next/Checkbox/Checkbox.types.d.ts +15 -0
  33. package/dist/types/components/next/Checkbox/index.d.ts +2 -0
  34. package/dist/types/components/next/Field/Field.Description.d.ts +3 -0
  35. package/dist/types/components/next/Field/Field.HelperMessage.d.ts +19 -0
  36. package/dist/types/components/next/Field/Field.HelperMessage.types.d.ts +12 -0
  37. package/dist/types/components/next/Field/Field.Label.d.ts +4 -0
  38. package/dist/types/components/next/Field/Field.d.ts +15 -0
  39. package/dist/types/components/next/Field/Field.types.d.ts +25 -0
  40. package/dist/types/components/next/Field/index.d.ts +5 -0
  41. package/dist/types/components/next/Field/useFieldIds.d.ts +59 -0
  42. package/dist/types/components/next/Input/Input.d.ts +3 -0
  43. package/dist/types/components/next/Input/Input.types.d.ts +17 -0
  44. package/dist/types/components/next/Input/index.d.ts +2 -0
  45. package/dist/types/components/next/Placeholder/Placeholder.d.ts +4 -6
  46. package/dist/types/components/next/Placeholder/index.d.ts +0 -1
  47. package/dist/types/components/next/Radio/Radio.d.ts +3 -0
  48. package/dist/types/components/next/Radio/Radio.figma.d.ts +1 -0
  49. package/dist/types/components/next/Radio/Radio.types.d.ts +5 -0
  50. package/dist/types/components/next/Radio/index.d.ts +2 -0
  51. package/dist/types/components/next/Switch/Switch.d.ts +3 -0
  52. package/dist/types/components/next/Switch/Switch.types.d.ts +7 -0
  53. package/dist/types/components/next/Switch/index.d.ts +2 -0
  54. package/dist/types/components/next/TextField/TextField.d.ts +17 -0
  55. package/dist/types/components/next/TextField/TextField.types.d.ts +16 -0
  56. package/dist/types/components/next/TextField/index.d.ts +2 -0
  57. package/dist/types/components/next/index.d.ts +14 -2
  58. package/dist/types/index.next.d.ts +3 -0
  59. package/package.json +5 -9
  60. package/dist/esm/components/next/Icon/icon.css.js +0 -6
  61. package/dist/esm/components/next/Placeholder/Placeholder.js +0 -17
  62. 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 };
@@ -1,2 +1,9 @@
1
- export { Placeholder } from './components/next/Placeholder/Placeholder.js';
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';