@danske/sapphire-react-lab 0.79.1 → 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 (30) hide show
  1. package/build/cjs/index.js +1114 -803
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/NumberField/i18n/da-DK.js +9 -0
  4. package/build/esm/NumberField/i18n/da-DK.js.map +1 -0
  5. package/build/esm/NumberField/i18n/de-DE.js +9 -0
  6. package/build/esm/NumberField/i18n/de-DE.js.map +1 -0
  7. package/build/esm/NumberField/i18n/en-US.js +9 -0
  8. package/build/esm/NumberField/i18n/en-US.js.map +1 -0
  9. package/build/esm/NumberField/i18n/fi-FI.js +9 -0
  10. package/build/esm/NumberField/i18n/fi-FI.js.map +1 -0
  11. package/build/esm/NumberField/i18n/index.js +20 -0
  12. package/build/esm/NumberField/i18n/index.js.map +1 -0
  13. package/build/esm/NumberField/i18n/nb-NO.js +9 -0
  14. package/build/esm/NumberField/i18n/nb-NO.js.map +1 -0
  15. package/build/esm/NumberField/i18n/pl-PL.js +9 -0
  16. package/build/esm/NumberField/i18n/pl-PL.js.map +1 -0
  17. package/build/esm/NumberField/i18n/sv-SE.js +9 -0
  18. package/build/esm/NumberField/i18n/sv-SE.js.map +1 -0
  19. package/build/esm/NumberField/src/NumberField.js +149 -0
  20. package/build/esm/NumberField/src/NumberField.js.map +1 -0
  21. package/build/esm/NumberField/src/StepperButton.js +63 -0
  22. package/build/esm/NumberField/src/StepperButton.js.map +1 -0
  23. package/build/esm/NumberField/src/useAutofillStyle.js +21 -0
  24. package/build/esm/NumberField/src/useAutofillStyle.js.map +1 -0
  25. package/build/esm/NumberField/src/useSapphireNumberField.js +49 -0
  26. package/build/esm/NumberField/src/useSapphireNumberField.js.map +1 -0
  27. package/build/esm/index.js +1 -0
  28. package/build/esm/index.js.map +1 -1
  29. package/build/index.d.ts +66 -3
  30. package/package.json +5 -3
@@ -0,0 +1,9 @@
1
+ var increment = "øge";
2
+ var decrement = "formindske";
3
+ var da = {
4
+ increment: increment,
5
+ decrement: decrement
6
+ };
7
+
8
+ export { decrement, da as default, increment };
9
+ //# sourceMappingURL=da-DK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"da-DK.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ var increment = "erhöhen";
2
+ var decrement = "verringern";
3
+ var de = {
4
+ increment: increment,
5
+ decrement: decrement
6
+ };
7
+
8
+ export { decrement, de as default, increment };
9
+ //# sourceMappingURL=de-DE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"de-DE.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ var increment = "Increase";
2
+ var decrement = "Decrease";
3
+ var en = {
4
+ increment: increment,
5
+ decrement: decrement
6
+ };
7
+
8
+ export { decrement, en as default, increment };
9
+ //# sourceMappingURL=en-US.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en-US.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ var increment = "lisääntyä";
2
+ var decrement = "vähentää";
3
+ var fi = {
4
+ increment: increment,
5
+ decrement: decrement
6
+ };
7
+
8
+ export { decrement, fi as default, increment };
9
+ //# sourceMappingURL=fi-FI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fi-FI.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,20 @@
1
+ import da from './da-DK.js';
2
+ import en from './en-US.js';
3
+ import de from './de-DE.js';
4
+ import fi from './fi-FI.js';
5
+ import no from './nb-NO.js';
6
+ import pl from './pl-PL.js';
7
+ import se from './sv-SE.js';
8
+
9
+ var intlMessages = {
10
+ "da-DK": da,
11
+ "en-US": en,
12
+ "de-DE": de,
13
+ "fi-FI": fi,
14
+ "nb-NO": no,
15
+ "pl-PL": pl,
16
+ "sv-SE": se
17
+ };
18
+
19
+ export { intlMessages as default };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/NumberField/i18n/index.ts"],"sourcesContent":["import da from './da-DK.json';\nimport en from './en-US.json';\nimport de from './de-DE.json';\nimport fi from './fi-FI.json';\nimport no from './nb-NO.json';\nimport pl from './pl-PL.json';\nimport se from './sv-SE.json';\n\nexport default {\n 'da-DK': da,\n 'en-US': en,\n 'de-DE': de,\n 'fi-FI': fi,\n 'nb-NO': no,\n 'pl-PL': pl,\n 'sv-SE': se,\n};\n"],"names":[],"mappings":";;;;;;;;AAQA,mBAAe;AAAA,EACb,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,CAAA;;;;"}
@@ -0,0 +1,9 @@
1
+ var increment = "øke";
2
+ var decrement = "avta";
3
+ var no = {
4
+ increment: increment,
5
+ decrement: decrement
6
+ };
7
+
8
+ export { decrement, no as default, increment };
9
+ //# sourceMappingURL=nb-NO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nb-NO.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ var increment = "zwiększyć";
2
+ var decrement = "zmniejszenie";
3
+ var pl = {
4
+ increment: increment,
5
+ decrement: decrement
6
+ };
7
+
8
+ export { decrement, pl as default, increment };
9
+ //# sourceMappingURL=pl-PL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pl-PL.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ var increment = "öka";
2
+ var decrement = "minska";
3
+ var se = {
4
+ increment: increment,
5
+ decrement: decrement
6
+ };
7
+
8
+ export { decrement, se as default, increment };
9
+ //# sourceMappingURL=sv-SE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sv-SE.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,149 @@
1
+ import { useObjectRef, mergeProps } from '@react-aria/utils';
2
+ import { createFocusableRef } from '@react-spectrum/utils';
3
+ import React, { forwardRef, useRef, useImperativeHandle } from 'react';
4
+ import { useSapphireNumberField } from './useSapphireNumberField.js';
5
+ import textFieldStyles from '@danske/sapphire-css/components/textField/textField.module.css';
6
+ import { useFocusRing } from '@react-aria/focus';
7
+ import clsx from 'clsx';
8
+ import { useThemeCheck, useSapphireStyleProps, Field, Label } from '@danske/sapphire-react';
9
+ import { useAutofillStyle } from './useAutofillStyle.js';
10
+ import { useMessageFormatter } from '@react-aria/i18n';
11
+ import intlMessages from '../i18n/index.js';
12
+ import { StepperButton } from './StepperButton.js';
13
+
14
+ var __defProp = Object.defineProperty;
15
+ var __defProps = Object.defineProperties;
16
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
17
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
18
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
19
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
20
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
21
+ var __spreadValues = (a, b) => {
22
+ for (var prop in b || (b = {}))
23
+ if (__hasOwnProp.call(b, prop))
24
+ __defNormalProp(a, prop, b[prop]);
25
+ if (__getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(b)) {
27
+ if (__propIsEnum.call(b, prop))
28
+ __defNormalProp(a, prop, b[prop]);
29
+ }
30
+ return a;
31
+ };
32
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
33
+ var __objRest = (source, exclude) => {
34
+ var target = {};
35
+ for (var prop in source)
36
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
37
+ target[prop] = source[prop];
38
+ if (source != null && __getOwnPropSymbols)
39
+ for (var prop of __getOwnPropSymbols(source)) {
40
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
41
+ target[prop] = source[prop];
42
+ }
43
+ return target;
44
+ };
45
+ const NumberField = forwardRef(function NumberField2(props, ref) {
46
+ const _a = props, {
47
+ label,
48
+ isDisabled,
49
+ error,
50
+ note,
51
+ isRequired,
52
+ contextualHelp,
53
+ prefix,
54
+ postfix,
55
+ size = "large",
56
+ labelPlacement = "above",
57
+ necessityIndicator = false,
58
+ alignInputRight,
59
+ showButtons = false,
60
+ incrementAriaLabel,
61
+ decrementAriaLabel
62
+ } = _a, otherProps = __objRest(_a, [
63
+ "label",
64
+ "isDisabled",
65
+ "error",
66
+ "note",
67
+ "isRequired",
68
+ "contextualHelp",
69
+ "prefix",
70
+ "postfix",
71
+ "size",
72
+ "labelPlacement",
73
+ "necessityIndicator",
74
+ "alignInputRight",
75
+ "showButtons",
76
+ "incrementAriaLabel",
77
+ "decrementAriaLabel"
78
+ ]);
79
+ useThemeCheck();
80
+ const inputRef = useObjectRef(props.inputRef);
81
+ const formatMessage = useMessageFormatter(intlMessages);
82
+ const {
83
+ inputProps,
84
+ labelProps,
85
+ incrementButtonProps,
86
+ decrementButtonProps,
87
+ descriptionProps,
88
+ errorMessageProps
89
+ } = useSapphireNumberField(__spreadProps(__spreadValues({}, props), {
90
+ incrementAriaLabel: incrementAriaLabel != null ? incrementAriaLabel : formatMessage("increment"),
91
+ decrementAriaLabel: decrementAriaLabel != null ? decrementAriaLabel : formatMessage("decrement")
92
+ }), inputRef);
93
+ const { focusProps, isFocusVisible } = useFocusRing(props);
94
+ const { styleProps } = useSapphireStyleProps(props);
95
+ const { autofillStyles, updateStyle } = useAutofillStyle(inputRef);
96
+ const domRef = useRef(null);
97
+ useImperativeHandle(ref, () => __spreadProps(__spreadValues({}, createFocusableRef(domRef, inputRef)), {
98
+ getInputElement() {
99
+ return inputRef.current;
100
+ }
101
+ }));
102
+ return /* @__PURE__ */ React.createElement(Field, __spreadProps(__spreadValues({}, removeUniqueDOMProps(otherProps)), {
103
+ ref: domRef,
104
+ isDisabled,
105
+ error: !!error,
106
+ size,
107
+ labelPlacement
108
+ }), label && /* @__PURE__ */ React.createElement(Field.Label, null, /* @__PURE__ */ React.createElement(Label, __spreadProps(__spreadValues({}, labelProps), {
109
+ size,
110
+ necessityIndicator: isRequired && necessityIndicator ? "required" : !isRequired && necessityIndicator ? "optional" : void 0,
111
+ contextualHelp
112
+ }), label)), /* @__PURE__ */ React.createElement(Field.Control, null, /* @__PURE__ */ React.createElement("div", {
113
+ className: clsx(textFieldStyles["sapphire-text-field"], {
114
+ [textFieldStyles["is-focus"]]: isFocusVisible,
115
+ [textFieldStyles["sapphire-text-field--error"]]: error === true || typeof error === "string",
116
+ [textFieldStyles["sapphire-text-field--medium"]]: size === "medium"
117
+ }),
118
+ style: __spreadValues({}, styleProps.style.width ? { width: styleProps.style.width } : {})
119
+ }, prefix && /* @__PURE__ */ React.createElement("span", {
120
+ className: clsx(textFieldStyles["sapphire-text-field__prefix"], {
121
+ [textFieldStyles["sapphire-text-field__prefix--icon"]]: typeof prefix !== "string"
122
+ })
123
+ }, prefix), /* @__PURE__ */ React.createElement("input", __spreadProps(__spreadValues({}, mergeProps(inputProps, focusProps, {
124
+ onChange: updateStyle,
125
+ onBlur: updateStyle
126
+ })), {
127
+ ref: inputRef,
128
+ className: clsx(textFieldStyles["sapphire-text-field__input"], {
129
+ [textFieldStyles["sapphire-text-field__input--align-right"]]: !!alignInputRight
130
+ }),
131
+ style: autofillStyles
132
+ })), postfix && /* @__PURE__ */ React.createElement("span", {
133
+ className: clsx(textFieldStyles["sapphire-text-field__postfix"], {
134
+ [textFieldStyles["sapphire-text-field__postfix--icon"]]: typeof postfix !== "string"
135
+ })
136
+ }, postfix), showButtons && /* @__PURE__ */ React.createElement("div", {
137
+ className: clsx(textFieldStyles["sapphire-text-field__stepper"])
138
+ }, /* @__PURE__ */ React.createElement(StepperButton, __spreadValues({
139
+ variant: "increment",
140
+ size
141
+ }, incrementButtonProps)), /* @__PURE__ */ React.createElement(StepperButton, __spreadValues({
142
+ variant: "decrement",
143
+ size
144
+ }, decrementButtonProps))))), (error || note) && /* @__PURE__ */ React.createElement(Field.Footer, null, error ? /* @__PURE__ */ React.createElement(Field.Note, __spreadValues({}, errorMessageProps), error) : note ? /* @__PURE__ */ React.createElement(Field.Note, __spreadValues({}, descriptionProps), note) : /* @__PURE__ */ React.createElement(React.Fragment, null)));
145
+ });
146
+ const removeUniqueDOMProps = (props) => Object.fromEntries(Object.entries(props).filter(([name]) => name !== "id" && !name.startsWith("data-")));
147
+
148
+ export { NumberField };
149
+ //# sourceMappingURL=NumberField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberField.js","sources":["../../../../src/NumberField/src/NumberField.tsx"],"sourcesContent":["import { mergeProps, useObjectRef } from '@react-aria/utils';\nimport { createFocusableRef } from '@react-spectrum/utils';\nimport { FocusableRefValue, PressEvents } from '@react-types/shared';\nimport React from 'react';\nimport {\n ForwardedRef,\n forwardRef,\n ReactNode,\n RefObject,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport {\n SapphireNumberFieldProps,\n useSapphireNumberField,\n} from './useSapphireNumberField';\nimport textFieldStyles from '@danske/sapphire-css/components/textField/textField.module.css';\nimport { useFocusRing } from '@react-aria/focus';\nimport clsx from 'clsx';\nimport {\n Field,\n Label,\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n} from '@danske/sapphire-react';\nimport { useAutofillStyle } from './useAutofillStyle';\nimport { useMessageFormatter } from '@react-aria/i18n';\nimport intlMessages from '../i18n';\nimport { StepperButton } from './StepperButton';\n\nexport type NumberFieldRef = FocusableRefValue<\n HTMLInputElement,\n HTMLDivElement\n> & {\n getInputElement(): HTMLInputElement | null;\n};\n\nexport interface NumberFieldProps\n extends SapphireNumberFieldProps,\n PressEvents,\n SapphireStyleProps {\n prefix?: ReactNode;\n postfix?: ReactNode;\n inputRef?: RefObject<HTMLInputElement | null>;\n /**\n * A note to show below the input.\n * If the input has an error message, this note will be replaced by that.\n */\n note?: ReactNode;\n /**\n * A ContextualHelp to render next to the label.\n */\n contextualHelp?: ReactNode;\n /**\n * To visually indicate if this field is required or optional.\n * @default false\n */\n necessityIndicator?: boolean;\n /**\n * @default 'large'\n */\n size?: 'large' | 'medium';\n /**\n * Aligns the text inside the input fields without affecting the positioning of the label of the field.\n */\n alignInputRight?: boolean;\n /**\n * Places the label either above (default) or on the side of the control.\n * @default 'above'\n */\n labelPlacement?: 'side' | 'above';\n /**\n * To show the buttons for incrementing and decrementing the value.\n * @default false\n */\n showButtons?: boolean;\n}\n\nexport const NumberField = forwardRef(function NumberField(\n props: NumberFieldProps,\n ref: ForwardedRef<NumberFieldRef>\n) {\n const {\n label,\n isDisabled,\n error,\n note,\n isRequired,\n contextualHelp,\n prefix,\n postfix,\n size = 'large',\n labelPlacement = 'above',\n necessityIndicator = false,\n alignInputRight,\n showButtons = false,\n incrementAriaLabel,\n decrementAriaLabel,\n ...otherProps\n } = props;\n useThemeCheck();\n const inputRef = useObjectRef<HTMLInputElement>(props.inputRef);\n const formatMessage = useMessageFormatter(intlMessages);\n const {\n inputProps,\n labelProps,\n incrementButtonProps,\n decrementButtonProps,\n descriptionProps,\n errorMessageProps,\n } = useSapphireNumberField(\n {\n ...props,\n incrementAriaLabel: incrementAriaLabel ?? formatMessage('increment'),\n decrementAriaLabel: decrementAriaLabel ?? formatMessage('decrement'),\n },\n inputRef\n );\n const { focusProps, isFocusVisible } = useFocusRing(props);\n const { styleProps } = useSapphireStyleProps(props);\n const { autofillStyles, updateStyle } = useAutofillStyle<'input'>(inputRef);\n\n const domRef = useRef<HTMLDivElement>(null);\n\n useImperativeHandle(ref, () => ({\n ...createFocusableRef(domRef, inputRef),\n /**\n * (This function is deprecated. Use `inputRef` prop)\n * @deprecated\n */\n getInputElement() {\n return inputRef.current;\n },\n }));\n\n return (\n <Field\n // otherProps contains some of the same props as inputProps. That is\n // intended, but some DOM props, like \"id\", should not be repeated\n {...removeUniqueDOMProps(otherProps)}\n ref={domRef}\n isDisabled={isDisabled}\n error={!!error}\n size={size}\n labelPlacement={labelPlacement}\n >\n {label && (\n <Field.Label>\n <Label\n {...labelProps}\n size={size}\n necessityIndicator={\n isRequired && necessityIndicator\n ? 'required'\n : !isRequired && necessityIndicator\n ? 'optional'\n : undefined\n }\n contextualHelp={contextualHelp}\n >\n {label}\n </Label>\n </Field.Label>\n )}\n <Field.Control>\n <div\n className={clsx(textFieldStyles['sapphire-text-field'], {\n [textFieldStyles['is-focus']]: isFocusVisible,\n [textFieldStyles['sapphire-text-field--error']]:\n error === true || typeof error === 'string',\n [textFieldStyles['sapphire-text-field--medium']]: size === 'medium',\n })}\n style={{\n ...(styleProps.style.width\n ? { width: styleProps.style.width }\n : {}),\n }}\n >\n {prefix && (\n <span\n className={clsx(textFieldStyles['sapphire-text-field__prefix'], {\n [textFieldStyles['sapphire-text-field__prefix--icon']]:\n typeof prefix !== 'string',\n })}\n >\n {prefix}\n </span>\n )}\n <input\n {...mergeProps(inputProps, focusProps, {\n onChange: updateStyle,\n onBlur: updateStyle,\n })}\n ref={inputRef}\n className={clsx(textFieldStyles['sapphire-text-field__input'], {\n [textFieldStyles['sapphire-text-field__input--align-right']]:\n !!alignInputRight,\n })}\n style={autofillStyles}\n />\n {postfix && (\n <span\n className={clsx(textFieldStyles['sapphire-text-field__postfix'], {\n [textFieldStyles['sapphire-text-field__postfix--icon']]:\n typeof postfix !== 'string',\n })}\n >\n {postfix}\n </span>\n )}\n {showButtons && (\n <div\n className={clsx(textFieldStyles['sapphire-text-field__stepper'])}\n >\n <StepperButton\n variant=\"increment\"\n size={size}\n {...incrementButtonProps}\n />\n <StepperButton\n variant=\"decrement\"\n size={size}\n {...decrementButtonProps}\n />\n </div>\n )}\n </div>\n </Field.Control>\n {(error || note) && (\n <Field.Footer>\n {error ? (\n <Field.Note {...errorMessageProps}>{error}</Field.Note>\n ) : note ? (\n <Field.Note {...descriptionProps}>{note}</Field.Note>\n ) : (\n <></>\n )}\n </Field.Footer>\n )}\n </Field>\n );\n});\n\n// Once moved to the core package, this function should be removed and instead consume the one from TextFieldBase.\nconst removeUniqueDOMProps = (props: Record<any, any>): Record<any, any> =>\n Object.fromEntries(\n Object.entries(props).filter(\n ([name]) => name !== 'id' && !name.startsWith('data-')\n )\n );\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import React, { useRef } from 'react';
2
+ import { useHover } from '@react-aria/interactions';
3
+ import { mergeProps, filterDOMProps } from '@react-aria/utils';
4
+ import clsx from 'clsx';
5
+ import textFieldStyles from '@danske/sapphire-css/components/textField/textField.module.css';
6
+ import { useButton, Icon } from '@danske/sapphire-react';
7
+ import { CaretUp, CaretDown } from '@danske/sapphire-icons/react';
8
+
9
+ var __defProp = Object.defineProperty;
10
+ var __defProps = Object.defineProperties;
11
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
12
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
15
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
+ var __spreadValues = (a, b) => {
17
+ for (var prop in b || (b = {}))
18
+ if (__hasOwnProp.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ if (__getOwnPropSymbols)
21
+ for (var prop of __getOwnPropSymbols(b)) {
22
+ if (__propIsEnum.call(b, prop))
23
+ __defNormalProp(a, prop, b[prop]);
24
+ }
25
+ return a;
26
+ };
27
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
28
+ var __objRest = (source, exclude) => {
29
+ var target = {};
30
+ for (var prop in source)
31
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
32
+ target[prop] = source[prop];
33
+ if (source != null && __getOwnPropSymbols)
34
+ for (var prop of __getOwnPropSymbols(source)) {
35
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
36
+ target[prop] = source[prop];
37
+ }
38
+ return target;
39
+ };
40
+ const StepperButton = (_a) => {
41
+ var _b = _a, {
42
+ variant,
43
+ size
44
+ } = _b, props = __objRest(_b, [
45
+ "variant",
46
+ "size"
47
+ ]);
48
+ const ref = useRef(null);
49
+ const { buttonProps, isPressed } = useButton(props, ref);
50
+ const { hoverProps, isHovered } = useHover({ isDisabled: props.isDisabled });
51
+ return /* @__PURE__ */ React.createElement("button", __spreadProps(__spreadValues({}, mergeProps(buttonProps, hoverProps, filterDOMProps(props))), {
52
+ ref,
53
+ className: clsx(textFieldStyles["sapphire-text-field__stepper-button"], textFieldStyles["js-hover"], {
54
+ [textFieldStyles["is-active"]]: isPressed,
55
+ [textFieldStyles["is-hover"]]: isHovered
56
+ })
57
+ }), /* @__PURE__ */ React.createElement(Icon, {
58
+ size: size === "large" ? "m" : "s"
59
+ }, variant === "increment" ? /* @__PURE__ */ React.createElement(CaretUp, null) : /* @__PURE__ */ React.createElement(CaretDown, null)));
60
+ };
61
+
62
+ export { StepperButton };
63
+ //# sourceMappingURL=StepperButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepperButton.js","sources":["../../../../src/NumberField/src/StepperButton.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { AriaButtonProps } from '@react-aria/button';\nimport { useHover } from '@react-aria/interactions';\nimport { filterDOMProps, mergeProps } from '@react-aria/utils';\nimport clsx from 'clsx';\nimport styles from '@danske/sapphire-css/components/textField/textField.module.css';\nimport { Icon, useButton } from '@danske/sapphire-react';\nimport { CaretUp, CaretDown } from '@danske/sapphire-icons/react';\n\n/**\n * @internal\n */\nexport const StepperButton = ({\n variant,\n size,\n ...props\n}: AriaButtonProps & {\n variant: 'increment' | 'decrement';\n size: 'large' | 'medium';\n}) => {\n const ref = useRef(null);\n const { buttonProps, isPressed } = useButton(props, ref);\n const { hoverProps, isHovered } = useHover({ isDisabled: props.isDisabled });\n\n return (\n <button\n {...mergeProps(buttonProps, hoverProps, filterDOMProps(props))}\n ref={ref}\n className={clsx(\n styles['sapphire-text-field__stepper-button'],\n styles['js-hover'],\n {\n [styles['is-active']]: isPressed,\n [styles['is-hover']]: isHovered,\n }\n )}\n >\n <Icon size={size === 'large' ? 'm' : 's'}>\n {variant === 'increment' ? <CaretUp /> : <CaretDown />}\n </Icon>\n </button>\n );\n};\n"],"names":["styles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYa,MAAA,aAAA,GAAgB,CAAC,EAOxB,KAAA;AAPwB,EAC5B,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAA,OAAA;AAAA,IACA,IAAA;AAAA,GAF4B,GAAA,EAAA,EAGzB,kBAHyB,EAGzB,EAAA;AAAA,IAFH,SAAA;AAAA,IACA,MAAA;AAAA,GAAA,CAAA,CAAA;AAMA,EAAA,MAAM,MAAM,MAAO,CAAA,IAAA,CAAA,CAAA;AACnB,EAAA,MAAM,EAAE,WAAA,EAAa,SAAc,EAAA,GAAA,SAAA,CAAU,KAAO,EAAA,GAAA,CAAA,CAAA;AACpD,EAAA,MAAM,EAAE,UAAY,EAAA,SAAA,EAAA,GAAc,QAAS,CAAA,EAAE,YAAY,KAAM,CAAA,UAAA,EAAA,CAAA,CAAA;AAE/D,EAAA,2CACG,QAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACM,WAAW,WAAa,EAAA,UAAA,EAAY,eAAe,KADzD,CAAA,CAAA,CAAA,EAAA;AAAA,IAEE,GAAA;AAAA,IACA,SAAW,EAAA,IAAA,CACTA,eAAO,CAAA,qCAAA,CAAA,EACPA,gBAAO,UACP,CAAA,EAAA;AAAA,MAAA,CACGA,gBAAO,WAAe,CAAA,GAAA,SAAA;AAAA,MAAA,CACtBA,gBAAO,UAAc,CAAA,GAAA,SAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA,sCAIzB,IAAD,EAAA;AAAA,IAAM,IAAA,EAAM,IAAS,KAAA,OAAA,GAAU,GAAM,GAAA,GAAA;AAAA,GAAA,EAClC,YAAY,WAAc,mBAAA,KAAA,CAAA,aAAA,CAAC,OAAD,EAAA,IAAA,CAAA,uCAAe,SAAD,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA;;;;"}
@@ -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;;;;"}
@@ -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 & {
@@ -773,4 +774,66 @@ declare type SapphireAvatarProps = SapphireStyleProps & {
773
774
  });
774
775
  declare const Avatar: ({ monogram, icon, color, size, ...props }: SapphireAvatarProps) => React__default.ReactElement;
775
776
 
776
- 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.79.1",
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": {
@@ -36,7 +36,7 @@
36
36
  "cross-env": "^7.0.3"
37
37
  },
38
38
  "dependencies": {
39
- "@danske/sapphire-css": "^26.6.0",
39
+ "@danske/sapphire-css": "^27.0.0",
40
40
  "@internationalized/date": "^3.5.2",
41
41
  "@internationalized/string": "^3.2.1",
42
42
  "@react-aria/accordion": "^3.0.0-alpha.27",
@@ -49,6 +49,7 @@
49
49
  "@react-aria/i18n": "^3.10.2",
50
50
  "@react-aria/interactions": "^3.21.1",
51
51
  "@react-aria/label": "^3.7.6",
52
+ "@react-aria/numberfield": "^3.11.3",
52
53
  "@react-aria/overlays": "^3.21.1",
53
54
  "@react-aria/searchfield": "^3.7.3",
54
55
  "@react-aria/toast": "^3.0.0-beta.10",
@@ -59,6 +60,7 @@
59
60
  "@react-stately/collections": "^3.10.5",
60
61
  "@react-stately/combobox": "^3.8.2",
61
62
  "@react-stately/datepicker": "^3.9.2",
63
+ "@react-stately/numberfield": "^3.9.3",
62
64
  "@react-stately/searchfield": "^3.5.1",
63
65
  "@react-stately/toast": "^3.0.0-beta.2",
64
66
  "@react-stately/toggle": "^3.7.2",
@@ -69,5 +71,5 @@
69
71
  "clsx": "^1.1.1",
70
72
  "react-transition-group": "^4.4.5"
71
73
  },
72
- "gitHead": "18d399194b252d505e09222e08996991f1a9d68a"
74
+ "gitHead": "e207779162338643e012a71b68cbd4d2ad5def7d"
73
75
  }