@equinor/eds-core-react 0.42.5 → 0.43.0-dev-12102024

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.
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  'use strict';
2
3
 
3
4
  var react = require('react');
@@ -912,7 +913,8 @@ const initalState$2 = {
912
913
  const EdsContext = /*#__PURE__*/react.createContext(initalState$2);
913
914
  const EdsProvider = ({
914
915
  children,
915
- density
916
+ density,
917
+ rootElement
916
918
  }) => {
917
919
  const [state, setState] = react.useState({
918
920
  ...initalState$2,
@@ -929,6 +931,7 @@ const EdsProvider = ({
929
931
  }, [density, state.density]);
930
932
  const value = {
931
933
  density: state.density,
934
+ rootElement,
932
935
  setDensity
933
936
  };
934
937
  return /*#__PURE__*/jsxRuntime.jsx(EdsContext.Provider, {
@@ -1148,11 +1151,15 @@ const Tooltip$2 = /*#__PURE__*/react.forwardRef(function Tooltip({
1148
1151
  children,
1149
1152
  style,
1150
1153
  enterDelay = 100,
1154
+ portalContainer,
1151
1155
  ...rest
1152
1156
  }, ref) {
1153
1157
  const arrowRef = react.useRef(null);
1154
1158
  const [open, setOpen] = react.useState(false);
1155
1159
  const shouldOpen = title !== '' && typeof document !== 'undefined';
1160
+ const {
1161
+ rootElement
1162
+ } = useEds();
1156
1163
  const {
1157
1164
  x,
1158
1165
  y,
@@ -1165,7 +1172,8 @@ const Tooltip$2 = /*#__PURE__*/react.forwardRef(function Tooltip({
1165
1172
  y: arrowY
1166
1173
  } = {}
1167
1174
  },
1168
- placement: finalPlacement
1175
+ placement: finalPlacement,
1176
+ elements
1169
1177
  } = react$1.useFloating({
1170
1178
  placement,
1171
1179
  open,
@@ -1228,16 +1236,18 @@ const Tooltip$2 = /*#__PURE__*/react.forwardRef(function Tooltip({
1228
1236
  ...children.props
1229
1237
  })
1230
1238
  });
1231
- edsUtils.useIsomorphicLayoutEffect(() => {
1232
- if (shouldOpen && open) {
1233
- refs.floating.current?.showPopover();
1239
+ react.useEffect(() => {
1240
+ if (!elements.floating) return;
1241
+ if (elements.floating.isConnected && shouldOpen && open) {
1242
+ elements.floating.showPopover();
1234
1243
  }
1235
- }, [open, shouldOpen, refs.floating]);
1244
+ }, [open, shouldOpen, elements.floating]);
1236
1245
  const TooltipEl = /*#__PURE__*/jsxRuntime.jsxs(StyledTooltip, {
1237
1246
  popover: "manual",
1238
1247
  ...rest,
1239
1248
  ...getFloatingProps({
1240
1249
  ref: tooltipRef,
1250
+ className: `eds-tooltip ${rest.className ?? ''}`,
1241
1251
  style: {
1242
1252
  ...style,
1243
1253
  position: strategy,
@@ -1256,7 +1266,7 @@ const Tooltip$2 = /*#__PURE__*/react.forwardRef(function Tooltip({
1256
1266
  })]
1257
1267
  });
1258
1268
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1259
- children: [shouldOpen && open && /*#__PURE__*/reactDom.createPortal(TooltipEl, document.body), updatedChildren]
1269
+ children: [shouldOpen && open && /*#__PURE__*/reactDom.createPortal(TooltipEl, portalContainer ?? rootElement ?? document.body), updatedChildren]
1260
1270
  });
1261
1271
  });
1262
1272
 
@@ -9772,7 +9782,7 @@ function AutocompleteInner(props, ref) {
9772
9782
  return inputOptions.filter(x => !disabledItemsSet.has(x));
9773
9783
  }, [inputOptions, optionDisabled]);
9774
9784
  const allDisabled = enabledItems.length === 0;
9775
- const selectedDisabledItemsSet = react.useMemo(() => new Set(selectedItems.filter(optionDisabled)), [selectedItems, optionDisabled]);
9785
+ const selectedDisabledItemsSet = react.useMemo(() => new Set(selectedItems.filter(x => x !== null && optionDisabled(x))), [selectedItems, optionDisabled]);
9776
9786
  const selectedEnabledItems = react.useMemo(() => selectedItems.filter(x => !selectedDisabledItemsSet.has(x)), [selectedItems, selectedDisabledItemsSet]);
9777
9787
  const allSelectedState = react.useMemo(() => {
9778
9788
  if (!enabledItems || !selectedEnabledItems) return 'NONE';
@@ -11881,12 +11891,9 @@ function DateSegment({
11881
11891
  * A field that wraps segments for inputting a date / date-time
11882
11892
  */
11883
11893
  const DateFieldSegments = /*#__PURE__*/react.forwardRef((props, ref) => {
11884
- const {
11885
- locale
11886
- } = reactAria.useLocale();
11887
11894
  const state = datepicker.useDateFieldState({
11888
11895
  ...props,
11889
- locale,
11896
+ locale: props.locale,
11890
11897
  createCalendar: date.createCalendar
11891
11898
  });
11892
11899
  const {
@@ -11911,7 +11918,7 @@ const DateFieldSegments = /*#__PURE__*/react.forwardRef((props, ref) => {
11911
11918
  DateFieldSegments.displayName = 'SingleDateField';
11912
11919
 
11913
11920
  /**
11914
- * Datefield is the input field used in {@link DatePicker} to type in a single date.
11921
+ * DateField is the input field used in {@link DatePicker} to type in a single date.
11915
11922
  * Encapsulates styling / functionality for typing a date
11916
11923
  */
11917
11924
  const DateField = /*#__PURE__*/react.forwardRef(function ({
@@ -11933,6 +11940,7 @@ const DateField = /*#__PURE__*/react.forwardRef(function ({
11933
11940
  children: [/*#__PURE__*/jsxRuntime.jsx(DateFieldSegments, {
11934
11941
  ...state,
11935
11942
  ...fieldProps,
11943
+ locale: dateCreateProps.locale,
11936
11944
  ref: inputRef
11937
11945
  }), /*#__PURE__*/jsxRuntime.jsx("span", {
11938
11946
  style: {
@@ -12268,7 +12276,8 @@ const DateRangeField = /*#__PURE__*/react.forwardRef(function (props, ref) {
12268
12276
  ...props.groupProps,
12269
12277
  children: [/*#__PURE__*/jsxRuntime.jsx(DateFieldSegments, {
12270
12278
  ...props.startFieldProps,
12271
- ref: fromRef
12279
+ ref: fromRef,
12280
+ locale: props.locale
12272
12281
  }), /*#__PURE__*/jsxRuntime.jsx(Typography, {
12273
12282
  as: 'span',
12274
12283
  variant: 'text',
@@ -12279,7 +12288,8 @@ const DateRangeField = /*#__PURE__*/react.forwardRef(function (props, ref) {
12279
12288
  children: "\u2014"
12280
12289
  }), /*#__PURE__*/jsxRuntime.jsx(DateFieldSegments, {
12281
12290
  ...props.endFieldProps,
12282
- ref: toRef
12291
+ ref: toRef,
12292
+ locale: props.locale
12283
12293
  }), /*#__PURE__*/jsxRuntime.jsx("span", {
12284
12294
  style: {
12285
12295
  flex: '1 1 auto'
@@ -12423,6 +12433,7 @@ const DateRangePicker = /*#__PURE__*/react.forwardRef(({
12423
12433
  ref: ref,
12424
12434
  variant: props.variant,
12425
12435
  disabled: isDisabled,
12436
+ locale: locale,
12426
12437
  rightAdornments: /*#__PURE__*/jsxRuntime.jsx(Toggle, {
12427
12438
  showClearButton: showClearButton,
12428
12439
  buttonProps: buttonProps,
@@ -266,7 +266,7 @@ function AutocompleteInner(props, ref) {
266
266
  return inputOptions.filter(x => !disabledItemsSet.has(x));
267
267
  }, [inputOptions, optionDisabled]);
268
268
  const allDisabled = enabledItems.length === 0;
269
- const selectedDisabledItemsSet = useMemo(() => new Set(selectedItems.filter(optionDisabled)), [selectedItems, optionDisabled]);
269
+ const selectedDisabledItemsSet = useMemo(() => new Set(selectedItems.filter(x => x !== null && optionDisabled(x))), [selectedItems, optionDisabled]);
270
270
  const selectedEnabledItems = useMemo(() => selectedItems.filter(x => !selectedDisabledItemsSet.has(x)), [selectedItems, selectedDisabledItemsSet]);
271
271
  const allSelectedState = useMemo(() => {
272
272
  if (!enabledItems || !selectedEnabledItems) return 'NONE';
@@ -149,6 +149,7 @@ const DateRangePicker = /*#__PURE__*/forwardRef(({
149
149
  ref: ref,
150
150
  variant: props.variant,
151
151
  disabled: isDisabled,
152
+ locale: locale,
152
153
  rightAdornments: /*#__PURE__*/jsx(Toggle, {
153
154
  showClearButton: showClearButton,
154
155
  buttonProps: buttonProps,
@@ -5,7 +5,7 @@ import { DateFieldSegments } from './DateFieldSegments.js';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
7
7
  /**
8
- * Datefield is the input field used in {@link DatePicker} to type in a single date.
8
+ * DateField is the input field used in {@link DatePicker} to type in a single date.
9
9
  * Encapsulates styling / functionality for typing a date
10
10
  */
11
11
  const DateField = /*#__PURE__*/forwardRef(function ({
@@ -27,6 +27,7 @@ const DateField = /*#__PURE__*/forwardRef(function ({
27
27
  children: [/*#__PURE__*/jsx(DateFieldSegments, {
28
28
  ...state,
29
29
  ...fieldProps,
30
+ locale: dateCreateProps.locale,
30
31
  ref: inputRef
31
32
  }), /*#__PURE__*/jsx("span", {
32
33
  style: {
@@ -1,5 +1,5 @@
1
1
  import { useDateFieldState } from '@react-stately/datepicker';
2
- import { useLocale, useDateField } from 'react-aria';
2
+ import { useDateField } from 'react-aria';
3
3
  import { createCalendar } from '@internationalized/date';
4
4
  import { DateSegment } from './DateSegment.js';
5
5
  import { forwardRef } from 'react';
@@ -11,12 +11,9 @@ import { jsx } from 'react/jsx-runtime';
11
11
  * A field that wraps segments for inputting a date / date-time
12
12
  */
13
13
  const DateFieldSegments = /*#__PURE__*/forwardRef((props, ref) => {
14
- const {
15
- locale
16
- } = useLocale();
17
14
  const state = useDateFieldState({
18
15
  ...props,
19
- locale,
16
+ locale: props.locale,
20
17
  createCalendar
21
18
  });
22
19
  const {
@@ -19,7 +19,8 @@ const DateRangeField = /*#__PURE__*/forwardRef(function (props, ref) {
19
19
  ...props.groupProps,
20
20
  children: [/*#__PURE__*/jsx(DateFieldSegments, {
21
21
  ...props.startFieldProps,
22
- ref: fromRef
22
+ ref: fromRef,
23
+ locale: props.locale
23
24
  }), /*#__PURE__*/jsx(Typography, {
24
25
  as: 'span',
25
26
  variant: 'text',
@@ -30,7 +31,8 @@ const DateRangeField = /*#__PURE__*/forwardRef(function (props, ref) {
30
31
  children: "\u2014"
31
32
  }), /*#__PURE__*/jsx(DateFieldSegments, {
32
33
  ...props.endFieldProps,
33
- ref: toRef
34
+ ref: toRef,
35
+ locale: props.locale
34
36
  }), /*#__PURE__*/jsx("span", {
35
37
  style: {
36
38
  flex: '1 1 auto'
@@ -8,7 +8,8 @@ const initalState = {
8
8
  const EdsContext = /*#__PURE__*/createContext(initalState);
9
9
  const EdsProvider = ({
10
10
  children,
11
- density
11
+ density,
12
+ rootElement
12
13
  }) => {
13
14
  const [state, setState] = useState({
14
15
  ...initalState,
@@ -25,6 +26,7 @@ const EdsProvider = ({
25
26
  }, [density, state.density]);
26
27
  const value = {
27
28
  density: state.density,
29
+ rootElement,
28
30
  setDensity
29
31
  };
30
32
  return /*#__PURE__*/jsx(EdsContext.Provider, {
@@ -1,10 +1,11 @@
1
1
  import { forwardRef, useRef, useState, useMemo, useEffect, cloneElement } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
3
  import styled from 'styled-components';
4
- import { typographyTemplate, spacingsTemplate, bordersTemplate, mergeRefs, useIsomorphicLayoutEffect } from '@equinor/eds-utils';
4
+ import { typographyTemplate, spacingsTemplate, bordersTemplate, mergeRefs } from '@equinor/eds-utils';
5
5
  import { tooltip } from './Tooltip.tokens.js';
6
6
  import { useFloating, offset, flip, shift, arrow, autoUpdate, useInteractions, useHover, useFocus, useRole, useDismiss } from '@floating-ui/react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
+ import { useEds } from '../EdsProvider/eds.context.js';
8
9
 
9
10
  const StyledTooltip = styled('div').withConfig({
10
11
  shouldForwardProp: () => true //workaround to avoid warning until popover gets added to react types
@@ -26,11 +27,15 @@ const Tooltip = /*#__PURE__*/forwardRef(function Tooltip({
26
27
  children,
27
28
  style,
28
29
  enterDelay = 100,
30
+ portalContainer,
29
31
  ...rest
30
32
  }, ref) {
31
33
  const arrowRef = useRef(null);
32
34
  const [open, setOpen] = useState(false);
33
35
  const shouldOpen = title !== '' && typeof document !== 'undefined';
36
+ const {
37
+ rootElement
38
+ } = useEds();
34
39
  const {
35
40
  x,
36
41
  y,
@@ -43,7 +48,8 @@ const Tooltip = /*#__PURE__*/forwardRef(function Tooltip({
43
48
  y: arrowY
44
49
  } = {}
45
50
  },
46
- placement: finalPlacement
51
+ placement: finalPlacement,
52
+ elements
47
53
  } = useFloating({
48
54
  placement,
49
55
  open,
@@ -106,16 +112,18 @@ const Tooltip = /*#__PURE__*/forwardRef(function Tooltip({
106
112
  ...children.props
107
113
  })
108
114
  });
109
- useIsomorphicLayoutEffect(() => {
110
- if (shouldOpen && open) {
111
- refs.floating.current?.showPopover();
115
+ useEffect(() => {
116
+ if (!elements.floating) return;
117
+ if (elements.floating.isConnected && shouldOpen && open) {
118
+ elements.floating.showPopover();
112
119
  }
113
- }, [open, shouldOpen, refs.floating]);
120
+ }, [open, shouldOpen, elements.floating]);
114
121
  const TooltipEl = /*#__PURE__*/jsxs(StyledTooltip, {
115
122
  popover: "manual",
116
123
  ...rest,
117
124
  ...getFloatingProps({
118
125
  ref: tooltipRef,
126
+ className: `eds-tooltip ${rest.className ?? ''}`,
119
127
  style: {
120
128
  ...style,
121
129
  position: strategy,
@@ -134,7 +142,7 @@ const Tooltip = /*#__PURE__*/forwardRef(function Tooltip({
134
142
  })]
135
143
  });
136
144
  return /*#__PURE__*/jsxs(Fragment, {
137
- children: [shouldOpen && open && /*#__PURE__*/createPortal(TooltipEl, document.body), updatedChildren]
145
+ children: [shouldOpen && open && /*#__PURE__*/createPortal(TooltipEl, portalContainer ?? rootElement ?? document.body), updatedChildren]
138
146
  });
139
147
  });
140
148
 
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  export { Button } from './components/Button/index.js';
2
3
  export { Table } from './components/Table/index.js';
3
4
  export { Icon } from './components/Icon/index.js';
@@ -13,7 +13,7 @@ type Props = {
13
13
  dateCreateProps: DateFieldStateOptions<CalendarDate | CalendarDateTime>;
14
14
  };
15
15
  /**
16
- * Datefield is the input field used in {@link DatePicker} to type in a single date.
16
+ * DateField is the input field used in {@link DatePicker} to type in a single date.
17
17
  * Encapsulates styling / functionality for typing a date
18
18
  */
19
19
  export declare const DateField: import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<HTMLDivElement>>;
@@ -8,4 +8,5 @@ export declare const DateRangeField: import("react").ForwardRefExoticComponent<{
8
8
  startFieldProps: AriaDatePickerProps<DateValue>;
9
9
  endFieldProps: AriaDatePickerProps<DateValue>;
10
10
  groupProps: GroupDOMAttributes;
11
+ locale: string;
11
12
  } & Partial<InputProps> & import("react").RefAttributes<HTMLDivElement>>;
@@ -2,6 +2,7 @@ import { ReactNode } from 'react';
2
2
  export type Density = 'compact' | 'comfortable';
3
3
  type State = {
4
4
  density: Density;
5
+ rootElement?: HTMLElement | null;
5
6
  };
6
7
  type UseEdsProps<T> = {
7
8
  /** Use this to update the `density` from nested components in `EdsProvider` */
@@ -9,6 +10,7 @@ type UseEdsProps<T> = {
9
10
  } & T;
10
11
  export type EdsProviderProps = {
11
12
  density?: Density;
13
+ rootElement?: HTMLElement | null;
12
14
  children: ReactNode;
13
15
  };
14
16
  export declare const EdsProvider: React.FC<EdsProviderProps>;
@@ -9,6 +9,10 @@ export type TooltipProps = {
9
9
  children: React.ReactElement & React.RefAttributes<HTMLElement>;
10
10
  /** Delay in ms, default 100 */
11
11
  enterDelay?: number;
12
+ /** Portal container
13
+ * @default document.body
14
+ * */
15
+ portalContainer?: HTMLElement;
12
16
  } & HTMLAttributes<HTMLDivElement>;
13
17
  export declare const Tooltip: import("react").ForwardRefExoticComponent<{
14
18
  /** Tooltip placement relative to anchor */
@@ -19,4 +23,8 @@ export declare const Tooltip: import("react").ForwardRefExoticComponent<{
19
23
  children: React.ReactElement & React.RefAttributes<HTMLElement>;
20
24
  /** Delay in ms, default 100 */
21
25
  enterDelay?: number;
26
+ /** Portal container
27
+ * @default document.body
28
+ * */
29
+ portalContainer?: HTMLElement;
22
30
  } & HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/eds-core-react",
3
- "version": "0.42.5",
3
+ "version": "0.43.0-dev-12102024",
4
4
  "description": "The React implementation of the Equinor Design System",
5
5
  "sideEffects": [
6
6
  "**/*.css"
@@ -66,6 +66,7 @@
66
66
  "rollup": "^4.22.5",
67
67
  "rollup-plugin-delete": "^2.1.0",
68
68
  "rollup-plugin-postcss": "^4.0.2",
69
+ "rollup-preserve-directives": "^1.1.3",
69
70
  "storybook": "^8.3.4",
70
71
  "styled-components": "6.1.12",
71
72
  "tsc-watch": "^6.2.0",
@@ -84,7 +85,7 @@
84
85
  "@react-stately/calendar": "^3.5.3",
85
86
  "@react-stately/datepicker": "^3.10.1",
86
87
  "@react-types/shared": "^3.24.1",
87
- "@tanstack/react-virtual": "3.10.8",
88
+ "@tanstack/react-virtual": "3.11.1",
88
89
  "downshift": "9.0.8",
89
90
  "react-aria": "^3.34.1",
90
91
  "@equinor/eds-icons": "^0.21.0",