@danske/sapphire-react-lab 0.77.4 → 0.80.0

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 (38) hide show
  1. package/build/cjs/index.js +1137 -813
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/DateField/src/DateField.js +4 -1
  4. package/build/esm/DateField/src/DateField.js.map +1 -1
  5. package/build/esm/DateField/src/DateRangeField.js +4 -1
  6. package/build/esm/DateField/src/DateRangeField.js.map +1 -1
  7. package/build/esm/Fieldset/src/Fieldset.js +8 -4
  8. package/build/esm/Fieldset/src/Fieldset.js.map +1 -1
  9. package/build/esm/NumberField/i18n/da-DK.js +9 -0
  10. package/build/esm/NumberField/i18n/da-DK.js.map +1 -0
  11. package/build/esm/NumberField/i18n/de-DE.js +9 -0
  12. package/build/esm/NumberField/i18n/de-DE.js.map +1 -0
  13. package/build/esm/NumberField/i18n/en-US.js +9 -0
  14. package/build/esm/NumberField/i18n/en-US.js.map +1 -0
  15. package/build/esm/NumberField/i18n/fi-FI.js +9 -0
  16. package/build/esm/NumberField/i18n/fi-FI.js.map +1 -0
  17. package/build/esm/NumberField/i18n/index.js +20 -0
  18. package/build/esm/NumberField/i18n/index.js.map +1 -0
  19. package/build/esm/NumberField/i18n/nb-NO.js +9 -0
  20. package/build/esm/NumberField/i18n/nb-NO.js.map +1 -0
  21. package/build/esm/NumberField/i18n/pl-PL.js +9 -0
  22. package/build/esm/NumberField/i18n/pl-PL.js.map +1 -0
  23. package/build/esm/NumberField/i18n/sv-SE.js +9 -0
  24. package/build/esm/NumberField/i18n/sv-SE.js.map +1 -0
  25. package/build/esm/NumberField/src/NumberField.js +149 -0
  26. package/build/esm/NumberField/src/NumberField.js.map +1 -0
  27. package/build/esm/NumberField/src/StepperButton.js +63 -0
  28. package/build/esm/NumberField/src/StepperButton.js.map +1 -0
  29. package/build/esm/NumberField/src/useAutofillStyle.js +21 -0
  30. package/build/esm/NumberField/src/useAutofillStyle.js.map +1 -0
  31. package/build/esm/NumberField/src/useSapphireNumberField.js +49 -0
  32. package/build/esm/NumberField/src/useSapphireNumberField.js.map +1 -0
  33. package/build/esm/Toast/src/ToastRegion.js +5 -2
  34. package/build/esm/Toast/src/ToastRegion.js.map +1 -1
  35. package/build/esm/index.js +1 -0
  36. package/build/esm/index.js.map +1 -1
  37. package/build/index.d.ts +92 -4
  38. package/package.json +8 -5
@@ -0,0 +1,21 @@
1
+ import { useState } from 'react';
2
+
3
+ function useAutofillStyle(inputRef) {
4
+ const [styles, setStyles] = useState({});
5
+ const updateStyle = () => {
6
+ const input = inputRef.current;
7
+ if (input) {
8
+ const color = window.getComputedStyle(input).backgroundColor;
9
+ setStyles({
10
+ boxShadow: `-100px 0 ${color}, 100px 0 ${color}`
11
+ });
12
+ }
13
+ };
14
+ return {
15
+ autofillStyles: styles,
16
+ updateStyle
17
+ };
18
+ }
19
+
20
+ export { useAutofillStyle };
21
+ //# sourceMappingURL=useAutofillStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutofillStyle.js","sources":["../../../../src/NumberField/src/useAutofillStyle.ts"],"sourcesContent":["import { CSSProperties, RefObject, useState } from 'react';\n\ninterface UseAutofillStyle {\n autofillStyles: CSSProperties;\n updateStyle: () => void;\n}\n\n//Copied from TextFieldBase, once NumberField moves into Core, this file can be removed and the import updated\nexport function useAutofillStyle<T>(\n inputRef: RefObject<\n T extends 'input' ? HTMLInputElement : HTMLTextAreaElement\n >\n): UseAutofillStyle {\n const [styles, setStyles] = useState<CSSProperties>({});\n\n const updateStyle = () => {\n const input = inputRef.current;\n if (input) {\n const color = window.getComputedStyle(input).backgroundColor;\n\n setStyles({\n boxShadow: `-100px 0 ${color}, 100px 0 ${color}`,\n });\n }\n };\n\n return {\n autofillStyles: styles,\n updateStyle,\n };\n}\n"],"names":[],"mappings":";;AAQO,SAAA,gBAAA,CACL,QAGkB,EAAA;AAClB,EAAM,MAAA,CAAC,MAAQ,EAAA,SAAA,CAAA,GAAa,QAAwB,CAAA,EAAA,CAAA,CAAA;AAEpD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,MAAM,QAAQ,QAAS,CAAA,OAAA,CAAA;AACvB,IAAA,IAAI,KAAO,EAAA;AACT,MAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,gBAAA,CAAiB,KAAO,CAAA,CAAA,eAAA,CAAA;AAE7C,MAAU,SAAA,CAAA;AAAA,QACR,SAAA,EAAW,YAAY,KAAkB,CAAA,UAAA,EAAA,KAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAK/C,EAAO,OAAA;AAAA,IACL,cAAgB,EAAA,MAAA;AAAA,IAChB,WAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -0,0 +1,49 @@
1
+ import { useNumberField } from '@react-aria/numberfield';
2
+ import { useNumberFieldState } from '@react-stately/numberfield';
3
+ import { useLocale } from '@react-aria/i18n';
4
+
5
+ var __defProp = Object.defineProperty;
6
+ var __defProps = Object.defineProperties;
7
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __objRest = (source, exclude) => {
25
+ var target = {};
26
+ for (var prop in source)
27
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
28
+ target[prop] = source[prop];
29
+ if (source != null && __getOwnPropSymbols)
30
+ for (var prop of __getOwnPropSymbols(source)) {
31
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
32
+ target[prop] = source[prop];
33
+ }
34
+ return target;
35
+ };
36
+ const useSapphireNumberField = (_a, ref) => {
37
+ var _b = _a, { error } = _b, numberFieldProps = __objRest(_b, ["error"]);
38
+ const { locale } = useLocale();
39
+ const numberFieldState = useNumberFieldState(__spreadProps(__spreadValues({}, numberFieldProps), {
40
+ locale
41
+ }));
42
+ const numberFieldAria = useNumberField(__spreadProps(__spreadValues({}, numberFieldProps), {
43
+ validationState: error === false || error === void 0 ? void 0 : "invalid"
44
+ }), numberFieldState, ref);
45
+ return numberFieldAria;
46
+ };
47
+
48
+ export { useSapphireNumberField };
49
+ //# sourceMappingURL=useSapphireNumberField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSapphireNumberField.js","sources":["../../../../src/NumberField/src/useSapphireNumberField.ts"],"sourcesContent":["import { RefObject } from 'react';\nimport {\n AriaNumberFieldProps,\n NumberFieldAria,\n useNumberField,\n} from '@react-aria/numberfield';\nimport { useNumberFieldState } from '@react-stately/numberfield';\nimport { useLocale } from '@react-aria/i18n';\nimport { Validation } from '@react-types/shared';\n\nexport interface SapphireNumberFieldProps\n /**\n * Reasons to omit the below properties:\n * - Validation:\n * - validationState: we handle that with the `error` prop instead.\n * - errorMessage: our own error-prop covers the same.\n */\n extends Omit<\n AriaNumberFieldProps,\n 'errorMessage' | keyof Omit<Validation<unknown>, 'isRequired'>\n > {\n /**\n * Whether the input should render as having an error and an error message.\n * This also sets the appropriate `aria` attributes on the input.\n *\n * A `boolean` sets the error state.\n * A `string` sets the error state with an additional error message.\n *\n * **An error message is strongly recommended because an error should always have an explanation about how to fix it.**\n */\n error?: boolean | string;\n}\n\nexport const useSapphireNumberField = (\n { error, ...numberFieldProps }: SapphireNumberFieldProps,\n ref: RefObject<HTMLInputElement>\n): NumberFieldAria => {\n const { locale } = useLocale();\n const numberFieldState = useNumberFieldState({\n ...numberFieldProps,\n locale,\n });\n const numberFieldAria = useNumberField(\n {\n ...numberFieldProps,\n validationState:\n error === false || error === undefined ? undefined : 'invalid',\n },\n numberFieldState,\n ref\n );\n\n return numberFieldAria;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCa,MAAA,sBAAA,GAAyB,CACpC,EAAA,EACA,GACoB,KAAA;AAFpB,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAF,KAAA,EAAA,GAAA,EAAA,EAAY,gBAAZ,GAAA,SAAA,CAAA,EAAA,EAAY,CAAV,OAAA,CAAA,CAAA,CAAA;AAGF,EAAA,MAAM,EAAE,MAAW,EAAA,GAAA,SAAA,EAAA,CAAA;AACnB,EAAM,MAAA,gBAAA,GAAmB,mBAAoB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACxC,gBADwC,CAAA,EAAA;AAAA,IAE3C,MAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAEF,EAAM,MAAA,eAAA,GAAkB,cACtB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACK,gBADL,CAAA,EAAA;AAAA,IAEE,eACE,EAAA,KAAA,KAAU,KAAS,IAAA,KAAA,KAAU,SAAY,KAAY,CAAA,GAAA,SAAA;AAAA,GAAA,CAAA,EAEzD,gBACA,EAAA,GAAA,CAAA,CAAA;AAGF,EAAO,OAAA,eAAA,CAAA;AAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  import React, { useRef } from 'react';
2
2
  import { useToastRegion } from '@react-aria/toast';
3
- import { SapphireOverlayContainer, ThemeRoot } from '@danske/sapphire-react';
3
+ import { useThemeContext, SapphireOverlayContainer, ThemeRoot } from '@danske/sapphire-react';
4
4
  import styles from '@danske/sapphire-css/components/toast/toast.module.css';
5
5
  import { Toast } from './Toast.js';
6
6
 
@@ -39,12 +39,15 @@ const ToastRegion = (_a) => {
39
39
  var _b = _a, { state } = _b, props = __objRest(_b, ["state"]);
40
40
  const ref = useRef(null);
41
41
  const { regionProps } = useToastRegion(props, state, ref);
42
+ const { overlayZIndex = 100 } = useThemeContext();
42
43
  return /* @__PURE__ */ React.createElement(SapphireOverlayContainer, null, /* @__PURE__ */ React.createElement(ThemeRoot, {
43
44
  contrast: true
44
45
  }, /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, regionProps), {
45
46
  ref,
46
47
  className: styles["sapphire-toast-container"],
47
- style: { zIndex: 200 }
48
+ style: {
49
+ zIndex: overlayZIndex + 200
50
+ }
48
51
  }), state.visibleToasts.map((toast) => /* @__PURE__ */ React.createElement(Toast, __spreadProps(__spreadValues({}, props), {
49
52
  key: toast.key,
50
53
  toast,
@@ -1 +1 @@
1
- {"version":3,"file":"ToastRegion.js","sources":["../../../../src/Toast/src/ToastRegion.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { AriaToastRegionProps, useToastRegion } from '@react-aria/toast';\nimport {\n SapphireOverlayContainer,\n SapphireStyleProps,\n ThemeRoot,\n} from '@danske/sapphire-react';\n\nimport styles from '@danske/sapphire-css/components/toast/toast.module.css';\nimport { ToastState } from '@react-stately/toast';\nimport { Toast } from './Toast';\n\nexport type ToastRegionProps<T> = AriaToastRegionProps &\n SapphireStyleProps & {\n state: ToastState<T>;\n };\n\nexport const ToastRegion = <T,>({ state, ...props }: ToastRegionProps<T>) => {\n const ref = useRef(null);\n const { regionProps } = useToastRegion(props, state, ref);\n\n return (\n <SapphireOverlayContainer>\n <ThemeRoot contrast>\n <div\n {...regionProps}\n ref={ref}\n className={styles['sapphire-toast-container']}\n style={{ zIndex: 200 } /* above overlays from @danske/sapphire-react */}\n >\n {state.visibleToasts.map((toast) => (\n <Toast {...props} key={toast.key} toast={toast} state={state} />\n ))}\n </div>\n </ThemeRoot>\n </SapphireOverlayContainer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBa,MAAA,WAAA,GAAc,CAAK,EAA6C,KAAA;AAA7C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAF,KAAA,EAAA,GAAA,EAAA,EAAY,KAAZ,GAAA,SAAA,CAAA,EAAA,EAAY,CAAV,OAAA,CAAA,CAAA,CAAA;AAChC,EAAA,MAAM,MAAM,MAAO,CAAA,IAAA,CAAA,CAAA;AACnB,EAAA,MAAM,EAAE,WAAA,EAAA,GAAgB,cAAe,CAAA,KAAA,EAAO,KAAO,EAAA,GAAA,CAAA,CAAA;AAErD,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,wBAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,SAAD,EAAA;AAAA,IAAW,QAAQ,EAAA,IAAA;AAAA,GACjB,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACM,WADN,CAAA,EAAA;AAAA,IAEE,GAAA;AAAA,IACA,WAAW,MAAO,CAAA,0BAAA,CAAA;AAAA,IAClB,KAAA,EAAO,EAAE,MAAQ,EAAA,GAAA,EAAA;AAAA,GAEhB,CAAA,EAAA,KAAA,CAAM,cAAc,GAAI,CAAA,CAAC,0BACvB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,iCAAW,KAAX,CAAA,EAAA;AAAA,IAAkB,KAAK,KAAM,CAAA,GAAA;AAAA,IAAK,KAAA;AAAA,IAAc,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"ToastRegion.js","sources":["../../../../src/Toast/src/ToastRegion.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { AriaToastRegionProps, useToastRegion } from '@react-aria/toast';\nimport {\n SapphireOverlayContainer,\n SapphireStyleProps,\n ThemeRoot,\n useThemeContext,\n} from '@danske/sapphire-react';\n\nimport styles from '@danske/sapphire-css/components/toast/toast.module.css';\nimport { ToastState } from '@react-stately/toast';\nimport { Toast } from './Toast';\n\nexport type ToastRegionProps<T> = AriaToastRegionProps &\n SapphireStyleProps & {\n state: ToastState<T>;\n };\n\nexport const ToastRegion = <T,>({ state, ...props }: ToastRegionProps<T>) => {\n const ref = useRef(null);\n const { regionProps } = useToastRegion(props, state, ref);\n const { overlayZIndex = 100 } = useThemeContext();\n\n return (\n <SapphireOverlayContainer>\n <ThemeRoot contrast>\n <div\n {...regionProps}\n ref={ref}\n className={styles['sapphire-toast-container']}\n style={\n {\n zIndex: overlayZIndex + 200,\n } /* above overlays from @danske/sapphire-react */\n }\n >\n {state.visibleToasts.map((toast) => (\n <Toast {...props} key={toast.key} toast={toast} state={state} />\n ))}\n </div>\n </ThemeRoot>\n </SapphireOverlayContainer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBa,MAAA,WAAA,GAAc,CAAK,EAA6C,KAAA;AAA7C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAF,KAAA,EAAA,GAAA,EAAA,EAAY,KAAZ,GAAA,SAAA,CAAA,EAAA,EAAY,CAAV,OAAA,CAAA,CAAA,CAAA;AAChC,EAAA,MAAM,MAAM,MAAO,CAAA,IAAA,CAAA,CAAA;AACnB,EAAA,MAAM,EAAE,WAAA,EAAA,GAAgB,cAAe,CAAA,KAAA,EAAO,KAAO,EAAA,GAAA,CAAA,CAAA;AACrD,EAAM,MAAA,EAAE,gBAAgB,GAAQ,EAAA,GAAA,eAAA,EAAA,CAAA;AAEhC,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,wBAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,SAAD,EAAA;AAAA,IAAW,QAAQ,EAAA,IAAA;AAAA,GACjB,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACM,WADN,CAAA,EAAA;AAAA,IAEE,GAAA;AAAA,IACA,WAAW,MAAO,CAAA,0BAAA,CAAA;AAAA,IAClB,KACE,EAAA;AAAA,MACE,QAAQ,aAAgB,GAAA,GAAA;AAAA,KAAA;AAAA,GAI3B,CAAA,EAAA,KAAA,CAAM,cAAc,GAAI,CAAA,CAAC,0BACvB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,iCAAW,KAAX,CAAA,EAAA;AAAA,IAAkB,KAAK,KAAM,CAAA,GAAA;AAAA,IAAK,KAAA;AAAA,IAAc,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA;;;;"}
@@ -17,5 +17,6 @@ export { Accordion } from './Accordion/index.js';
17
17
  export { Typography } from './Typography/index.js';
18
18
  export { Fieldset } from './Fieldset/src/Fieldset.js';
19
19
  export { Avatar } from './Avatar/src/Avatar.js';
20
+ export { NumberField } from './NumberField/src/NumberField.js';
20
21
  export { useLocale } from '@react-aria/i18n';
21
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
package/build/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _react_types_shared from '@react-types/shared';
2
- import { PressEvents, Validation, RangeValue, HelpTextProps, LabelableProps, CollectionBase, DOMProps, Expandable, ItemProps } from '@react-types/shared';
2
+ import { PressEvents, Validation, RangeValue, HelpTextProps, LabelableProps, CollectionBase, DOMProps, Expandable, ItemProps, FocusableRefValue } from '@react-types/shared';
3
3
  import * as React from 'react';
4
- import React__default, { ReactNode, ComponentType } from 'react';
4
+ import React__default, { ReactNode, ComponentType, RefObject } from 'react';
5
5
  import { AriaToggleButtonProps } from '@react-aria/button';
6
6
  import { SapphireStyleProps, PopoverTriggerProps, HeadingProps, TextStyleProps } from '@danske/sapphire-react';
7
7
  import { DateValue } from '@internationalized/date';
@@ -13,6 +13,7 @@ import { ComboBoxProps } from '@react-types/combobox';
13
13
  import { AriaSearchFieldProps } from '@react-aria/searchfield';
14
14
  import { AriaToastRegionProps } from '@react-aria/toast';
15
15
  import { ToastState } from '@react-stately/toast';
16
+ import { AriaNumberFieldProps } from '@react-aria/numberfield';
16
17
  export { useLocale } from '@react-aria/i18n';
17
18
 
18
19
  declare type SapphireToggleButtonProps = Omit<AriaToggleButtonProps<'button'>, 'elementType' | 'type'> & SapphireStyleProps & PressEvents & {
@@ -263,6 +264,11 @@ declare type DateFieldProps<T extends DateValue$1> = Omit<AriaDatePickerProps<T>
263
264
  * @default false
264
265
  */
265
266
  necessityIndicator?: boolean;
267
+ /**
268
+ * Places the label either above (default) or on the side of the control.
269
+ * @default 'above'
270
+ */
271
+ labelPlacement?: 'side' | 'above';
266
272
  };
267
273
  /**
268
274
  * A date field allows users to enter or edit date values using the keyboard
@@ -308,6 +314,11 @@ declare const DateField: <T extends DateValue$1>(props: Omit<AriaDatePickerProps
308
314
  * @default false
309
315
  */
310
316
  necessityIndicator?: boolean | undefined;
317
+ /**
318
+ * Places the label either above (default) or on the side of the control.
319
+ * @default 'above'
320
+ */
321
+ labelPlacement?: "above" | "side" | undefined;
311
322
  } & {
312
323
  ref?: React__default.RefObject<HTMLDivElement> | undefined;
313
324
  }) => React__default.ReactElement;
@@ -380,6 +391,11 @@ declare type DateRangeFieldProps<T extends DateValue$1, P extends string> = Omit
380
391
  * @default false
381
392
  */
382
393
  necessityIndicator?: boolean;
394
+ /**
395
+ * Places the label either above (default) or on the side of the control.
396
+ * @default 'above'
397
+ */
398
+ labelPlacement?: 'side' | 'above';
383
399
  };
384
400
  /**
385
401
  * A date range field allows users to select a range of dates by selecting a to and a from date with keyboard and/or mouse.
@@ -447,6 +463,11 @@ declare const DateRangeField: <T extends DateValue$1, P extends string>(props: O
447
463
  * @default false
448
464
  */
449
465
  necessityIndicator?: boolean | undefined;
466
+ /**
467
+ * Places the label either above (default) or on the side of the control.
468
+ * @default 'above'
469
+ */
470
+ labelPlacement?: "above" | "side" | undefined;
450
471
  } & {
451
472
  ref?: React__default.RefObject<HTMLDivElement> | undefined;
452
473
  }) => React__default.ReactElement;
@@ -721,11 +742,16 @@ declare type FieldsetProps = SapphireStyleProps & {
721
742
  * ```
722
743
  */
723
744
  children: ReactNode;
745
+ /**
746
+ * Places the label either above (default) or on the side of the control.
747
+ * @default 'above'
748
+ */
749
+ labelPlacement?: 'side' | 'above';
724
750
  };
725
751
  /**
726
752
  * Sapphire search input field.
727
753
  */
728
- declare const Fieldset: ({ label, contextualHelp, note, error, isDisabled, isRequired, necessityIndicator, children, size, ...props }: FieldsetProps) => React__default.JSX.Element;
754
+ declare const Fieldset: ({ label, contextualHelp, note, error, isDisabled, isRequired, necessityIndicator, children, size, labelPlacement, ...props }: FieldsetProps) => React__default.JSX.Element;
729
755
 
730
756
  declare type SapphireAvatarProps = SapphireStyleProps & {
731
757
  /**
@@ -748,4 +774,66 @@ declare type SapphireAvatarProps = SapphireStyleProps & {
748
774
  });
749
775
  declare const Avatar: ({ monogram, icon, color, size, ...props }: SapphireAvatarProps) => React__default.ReactElement;
750
776
 
751
- export { _Accordion as Accordion, Avatar, Calendar, CalendarView, DateField, DateFieldProps, DateRangeField, DateRangeFieldProps, FeedbackMessage, Fieldset, FieldsetProps, FilterDropdown, NotificationBadge, NotificationBadgeProps, PredefinedDateRange, RangeCalendar, SapphireAccordionHeadingProps, SapphireAccordionItemProps, SapphireAccordionProps, SapphireAvatarProps, SapphireCalendarProps, SapphireFeedbackMessageProps, SapphireFilterDropdownProps, SapphireRangeCalendarProps, SapphireSearchFieldProps, SapphireToggleButtonProps, SearchField, ShowToastFn, ShowToastOptions, Spinner, SpinnerProps, ToastProvider, ToastProviderProps, ToggleButton, Typography, TypographyBodyProps, TypographyCaptionProps, TypographyHeadingProps, TypographySubheadingProps, isDateOutsideValidRange, isEndDateBeforeStartDate, useShowToast };
777
+ interface SapphireNumberFieldProps
778
+ /**
779
+ * Reasons to omit the below properties:
780
+ * - Validation:
781
+ * - validationState: we handle that with the `error` prop instead.
782
+ * - errorMessage: our own error-prop covers the same.
783
+ */
784
+ extends Omit<AriaNumberFieldProps, 'errorMessage' | keyof Omit<Validation<unknown>, 'isRequired'>> {
785
+ /**
786
+ * Whether the input should render as having an error and an error message.
787
+ * This also sets the appropriate `aria` attributes on the input.
788
+ *
789
+ * A `boolean` sets the error state.
790
+ * A `string` sets the error state with an additional error message.
791
+ *
792
+ * **An error message is strongly recommended because an error should always have an explanation about how to fix it.**
793
+ */
794
+ error?: boolean | string;
795
+ }
796
+
797
+ declare type NumberFieldRef = FocusableRefValue<HTMLInputElement, HTMLDivElement> & {
798
+ getInputElement(): HTMLInputElement | null;
799
+ };
800
+ interface NumberFieldProps extends SapphireNumberFieldProps, PressEvents, SapphireStyleProps {
801
+ prefix?: ReactNode;
802
+ postfix?: ReactNode;
803
+ inputRef?: RefObject<HTMLInputElement | null>;
804
+ /**
805
+ * A note to show below the input.
806
+ * If the input has an error message, this note will be replaced by that.
807
+ */
808
+ note?: ReactNode;
809
+ /**
810
+ * A ContextualHelp to render next to the label.
811
+ */
812
+ contextualHelp?: ReactNode;
813
+ /**
814
+ * To visually indicate if this field is required or optional.
815
+ * @default false
816
+ */
817
+ necessityIndicator?: boolean;
818
+ /**
819
+ * @default 'large'
820
+ */
821
+ size?: 'large' | 'medium';
822
+ /**
823
+ * Aligns the text inside the input fields without affecting the positioning of the label of the field.
824
+ */
825
+ alignInputRight?: boolean;
826
+ /**
827
+ * Places the label either above (default) or on the side of the control.
828
+ * @default 'above'
829
+ */
830
+ labelPlacement?: 'side' | 'above';
831
+ /**
832
+ * To show the buttons for incrementing and decrementing the value.
833
+ * @default false
834
+ */
835
+ showButtons?: boolean;
836
+ }
837
+ declare const NumberField: React__default.ForwardRefExoticComponent<NumberFieldProps & React__default.RefAttributes<NumberFieldRef>>;
838
+
839
+ export { _Accordion as Accordion, Avatar, Calendar, CalendarView, DateField, DateFieldProps, DateRangeField, DateRangeFieldProps, FeedbackMessage, Fieldset, FieldsetProps, FilterDropdown, NotificationBadge, NotificationBadgeProps, NumberField, NumberFieldProps, NumberFieldRef, PredefinedDateRange, RangeCalendar, SapphireAccordionHeadingProps, SapphireAccordionItemProps, SapphireAccordionProps, SapphireAvatarProps, SapphireCalendarProps, SapphireFeedbackMessageProps, SapphireFilterDropdownProps, SapphireRangeCalendarProps, SapphireSearchFieldProps, SapphireToggleButtonProps, SearchField, ShowToastFn, ShowToastOptions, Spinner, SpinnerProps, ToastProvider, ToastProviderProps, ToggleButton, Typography, TypographyBodyProps, TypographyCaptionProps, TypographyHeadingProps, TypographySubheadingProps, isDateOutsideValidRange, isEndDateBeforeStartDate, useShowToast };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danske/sapphire-react-lab",
3
- "version": "0.77.4",
3
+ "version": "0.80.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "description": "Experimental React components of the Sapphire Design System from Danske Bank A/S",
6
6
  "exports": {
@@ -19,23 +19,24 @@
19
19
  ],
20
20
  "scripts": {
21
21
  "build": "cross-env ../../node_modules/.bin/rollup --config ../../rollup.config.js",
22
+ "postpublish": "echo bypassing npx -y send-release-notes@latest --to=6d5d8a75.groupsmail.danskebank.com@emea.teams.ms",
22
23
  "prepare": "yarn run build",
23
24
  "prepublishOnly": "yarn run build"
24
25
  },
25
26
  "peerDependencies": {
26
27
  "@danske/sapphire-icons": "^2.1.0",
27
- "@danske/sapphire-react": "^3.18.5",
28
+ "@danske/sapphire-react": "^3.27.0",
28
29
  "react": ">=16.8.0",
29
30
  "react-dom": ">=16.8.0"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@danske/sapphire-icons": "^2.1.0",
33
- "@danske/sapphire-react": "^3.18.5",
34
+ "@danske/sapphire-react": "^3.27.0",
34
35
  "@types/react-transition-group": "^4.4.5",
35
36
  "cross-env": "^7.0.3"
36
37
  },
37
38
  "dependencies": {
38
- "@danske/sapphire-css": "^26.2.0",
39
+ "@danske/sapphire-css": "^27.0.0",
39
40
  "@internationalized/date": "^3.5.2",
40
41
  "@internationalized/string": "^3.2.1",
41
42
  "@react-aria/accordion": "^3.0.0-alpha.27",
@@ -48,6 +49,7 @@
48
49
  "@react-aria/i18n": "^3.10.2",
49
50
  "@react-aria/interactions": "^3.21.1",
50
51
  "@react-aria/label": "^3.7.6",
52
+ "@react-aria/numberfield": "^3.11.3",
51
53
  "@react-aria/overlays": "^3.21.1",
52
54
  "@react-aria/searchfield": "^3.7.3",
53
55
  "@react-aria/toast": "^3.0.0-beta.10",
@@ -58,6 +60,7 @@
58
60
  "@react-stately/collections": "^3.10.5",
59
61
  "@react-stately/combobox": "^3.8.2",
60
62
  "@react-stately/datepicker": "^3.9.2",
63
+ "@react-stately/numberfield": "^3.9.3",
61
64
  "@react-stately/searchfield": "^3.5.1",
62
65
  "@react-stately/toast": "^3.0.0-beta.2",
63
66
  "@react-stately/toggle": "^3.7.2",
@@ -68,5 +71,5 @@
68
71
  "clsx": "^1.1.1",
69
72
  "react-transition-group": "^4.4.5"
70
73
  },
71
- "gitHead": "ea739bbe8b80507c03c4349f98fa6a4248e2c902"
74
+ "gitHead": "e207779162338643e012a71b68cbd4d2ad5def7d"
72
75
  }