@dnb/eufemia 10.11.0 → 10.12.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.
- package/CHANGELOG.md +24 -0
- package/cjs/components/button/Button.d.ts +3 -3
- package/cjs/components/form-label/FormLabel.js +2 -1
- package/cjs/components/form-label/FormLabel.js.map +1 -1
- package/cjs/components/form-label/style/themes/dnb-form-label-theme-ui.css +2 -2
- package/cjs/components/form-label/style/themes/dnb-form-label-theme-ui.min.css +1 -1
- package/cjs/components/form-label/style/themes/dnb-form-label-theme-ui.scss +1 -1
- package/cjs/components/input-masked/InputMasked.d.ts +0 -1
- package/cjs/components/input-masked/InputMasked.js +3 -3
- package/cjs/components/input-masked/InputMasked.js.map +1 -1
- package/cjs/components/input-masked/MultiInputMask.d.ts +60 -0
- package/cjs/components/input-masked/MultiInputMask.js +159 -0
- package/cjs/components/input-masked/MultiInputMask.js.map +1 -0
- package/cjs/components/input-masked/TextMask.d.ts +1 -1
- package/cjs/components/input-masked/hooks/useHandleCursorPosition.d.ts +7 -0
- package/cjs/components/input-masked/hooks/useHandleCursorPosition.js +113 -0
- package/cjs/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -0
- package/cjs/components/input-masked/hooks/useMultiInputValues.d.ts +8 -0
- package/cjs/components/input-masked/hooks/useMultiInputValues.js +37 -0
- package/cjs/components/input-masked/hooks/useMultiInputValues.js.map +1 -0
- package/cjs/components/input-masked/index.d.ts +2 -0
- package/cjs/components/input-masked/index.js +21 -1
- package/cjs/components/input-masked/index.js.map +1 -1
- package/cjs/components/input-masked/style/dnb-input-masked.css +57 -0
- package/cjs/components/input-masked/style/dnb-input-masked.min.css +1 -1
- package/cjs/components/input-masked/style/dnb-input-masked.scss +73 -0
- package/cjs/components/lib.d.ts +1 -1
- package/cjs/components/section/Section.d.ts +2 -2
- package/cjs/components/section/Section.js.map +1 -1
- package/cjs/extensions/payment-card/style/dnb-payment-card.css +3 -0
- package/cjs/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
- package/cjs/extensions/payment-card/style/dnb-payment-card.scss +4 -0
- package/cjs/fragments/drawer-list/style/themes/dnb-drawer-list-theme-sbanken.scss +4 -1
- package/cjs/shared/Eufemia.d.ts +1 -1
- package/cjs/shared/Eufemia.js +2 -2
- package/cjs/shared/Eufemia.js.map +1 -1
- package/cjs/shared/useTheme.d.ts +12 -1
- package/cjs/shared/useTheme.js +16 -1
- package/cjs/shared/useTheme.js.map +1 -1
- package/cjs/style/dnb-ui-components.css +57 -0
- package/cjs/style/dnb-ui-components.min.css +1 -1
- package/cjs/style/dnb-ui-extensions.css +3 -0
- package/cjs/style/dnb-ui-extensions.min.css +1 -1
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +59 -2
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -0
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +67 -6
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -0
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-ui/ui-theme-components.css +59 -2
- package/cjs/style/themes/theme-ui/ui-theme-components.min.css +2 -2
- package/cjs/style/themes/theme-ui/ui-theme-extensions.css +3 -0
- package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/components/button/Button.d.ts +3 -3
- package/components/form-label/FormLabel.js +2 -1
- package/components/form-label/FormLabel.js.map +1 -1
- package/components/form-label/style/themes/dnb-form-label-theme-ui.css +2 -2
- package/components/form-label/style/themes/dnb-form-label-theme-ui.min.css +1 -1
- package/components/form-label/style/themes/dnb-form-label-theme-ui.scss +1 -1
- package/components/input-masked/InputMasked.d.ts +0 -1
- package/components/input-masked/InputMasked.js +2 -2
- package/components/input-masked/InputMasked.js.map +1 -1
- package/components/input-masked/MultiInputMask.d.ts +60 -0
- package/components/input-masked/MultiInputMask.js +148 -0
- package/components/input-masked/MultiInputMask.js.map +1 -0
- package/components/input-masked/TextMask.d.ts +1 -1
- package/components/input-masked/hooks/useHandleCursorPosition.d.ts +7 -0
- package/components/input-masked/hooks/useHandleCursorPosition.js +106 -0
- package/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -0
- package/components/input-masked/hooks/useMultiInputValues.d.ts +8 -0
- package/components/input-masked/hooks/useMultiInputValues.js +29 -0
- package/components/input-masked/hooks/useMultiInputValues.js.map +1 -0
- package/components/input-masked/index.d.ts +2 -0
- package/components/input-masked/index.js +2 -0
- package/components/input-masked/index.js.map +1 -1
- package/components/input-masked/style/dnb-input-masked.css +57 -0
- package/components/input-masked/style/dnb-input-masked.min.css +1 -1
- package/components/input-masked/style/dnb-input-masked.scss +73 -0
- package/components/lib.d.ts +1 -1
- package/components/section/Section.d.ts +2 -2
- package/components/section/Section.js.map +1 -1
- package/es/components/button/Button.d.ts +3 -3
- package/es/components/form-label/FormLabel.js +2 -1
- package/es/components/form-label/FormLabel.js.map +1 -1
- package/es/components/form-label/style/themes/dnb-form-label-theme-ui.css +2 -2
- package/es/components/form-label/style/themes/dnb-form-label-theme-ui.min.css +1 -1
- package/es/components/form-label/style/themes/dnb-form-label-theme-ui.scss +1 -1
- package/es/components/input-masked/InputMasked.d.ts +0 -1
- package/es/components/input-masked/InputMasked.js +2 -2
- package/es/components/input-masked/InputMasked.js.map +1 -1
- package/es/components/input-masked/MultiInputMask.d.ts +60 -0
- package/es/components/input-masked/MultiInputMask.js +145 -0
- package/es/components/input-masked/MultiInputMask.js.map +1 -0
- package/es/components/input-masked/TextMask.d.ts +1 -1
- package/es/components/input-masked/hooks/useHandleCursorPosition.d.ts +7 -0
- package/es/components/input-masked/hooks/useHandleCursorPosition.js +105 -0
- package/es/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -0
- package/es/components/input-masked/hooks/useMultiInputValues.d.ts +8 -0
- package/es/components/input-masked/hooks/useMultiInputValues.js +28 -0
- package/es/components/input-masked/hooks/useMultiInputValues.js.map +1 -0
- package/es/components/input-masked/index.d.ts +2 -0
- package/es/components/input-masked/index.js +2 -0
- package/es/components/input-masked/index.js.map +1 -1
- package/es/components/input-masked/style/dnb-input-masked.css +57 -0
- package/es/components/input-masked/style/dnb-input-masked.min.css +1 -1
- package/es/components/input-masked/style/dnb-input-masked.scss +73 -0
- package/es/components/lib.d.ts +1 -1
- package/es/components/section/Section.d.ts +2 -2
- package/es/components/section/Section.js.map +1 -1
- package/es/extensions/payment-card/style/dnb-payment-card.css +3 -0
- package/es/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
- package/es/extensions/payment-card/style/dnb-payment-card.scss +4 -0
- package/es/fragments/drawer-list/style/themes/dnb-drawer-list-theme-sbanken.scss +4 -1
- package/es/shared/Eufemia.d.ts +1 -1
- package/es/shared/Eufemia.js +2 -2
- package/es/shared/Eufemia.js.map +1 -1
- package/es/shared/useTheme.d.ts +12 -1
- package/es/shared/useTheme.js +14 -1
- package/es/shared/useTheme.js.map +1 -1
- package/es/style/dnb-ui-components.css +57 -0
- package/es/style/dnb-ui-components.min.css +1 -1
- package/es/style/dnb-ui-extensions.css +3 -0
- package/es/style/dnb-ui-extensions.min.css +1 -1
- package/es/style/themes/theme-eiendom/eiendom-theme-components.css +59 -2
- package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -0
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-components.css +67 -6
- package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -0
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-ui/ui-theme-components.css +59 -2
- package/es/style/themes/theme-ui/ui-theme-components.min.css +2 -2
- package/es/style/themes/theme-ui/ui-theme-extensions.css +3 -0
- package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/esm/dnb-ui-basis.min.mjs +1 -1
- package/esm/dnb-ui-components.min.mjs +1 -1
- package/esm/dnb-ui-elements.min.mjs +1 -1
- package/esm/dnb-ui-extensions.min.mjs +3 -3
- package/esm/dnb-ui-lib.min.mjs +1 -1
- package/extensions/payment-card/style/dnb-payment-card.css +3 -0
- package/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
- package/extensions/payment-card/style/dnb-payment-card.scss +4 -0
- package/fragments/drawer-list/style/themes/dnb-drawer-list-theme-sbanken.scss +4 -1
- package/package.json +1 -1
- package/shared/Eufemia.d.ts +1 -1
- package/shared/Eufemia.js +2 -2
- package/shared/Eufemia.js.map +1 -1
- package/shared/useTheme.d.ts +12 -1
- package/shared/useTheme.js +14 -1
- package/shared/useTheme.js.map +1 -1
- package/style/dnb-ui-components.css +57 -0
- package/style/dnb-ui-components.min.css +1 -1
- package/style/dnb-ui-extensions.css +3 -0
- package/style/dnb-ui-extensions.min.css +1 -1
- package/style/themes/theme-eiendom/eiendom-theme-components.css +59 -2
- package/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
- package/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -0
- package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-components.css +67 -6
- package/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
- package/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -0
- package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/style/themes/theme-ui/ui-theme-components.css +59 -2
- package/style/themes/theme-ui/ui-theme-components.min.css +2 -2
- package/style/themes/theme-ui/ui-theme-extensions.css +3 -0
- package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/umd/dnb-ui-basis.min.js +1 -1
- package/umd/dnb-ui-components.min.js +1 -1
- package/umd/dnb-ui-elements.min.js +1 -1
- package/umd/dnb-ui-extensions.min.js +3 -3
- package/umd/dnb-ui-lib.min.js +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
export function useMultiInputValue(_ref) {
|
|
6
|
+
let {
|
|
7
|
+
inputs,
|
|
8
|
+
defaultValues,
|
|
9
|
+
callback
|
|
10
|
+
} = _ref;
|
|
11
|
+
const [values, setValues] = useState(defaultValues ? defaultValues : createDefaultValues());
|
|
12
|
+
function createDefaultValues() {
|
|
13
|
+
return inputs.reduce((values, input) => {
|
|
14
|
+
values[input.id] = '';
|
|
15
|
+
return values;
|
|
16
|
+
}, {});
|
|
17
|
+
}
|
|
18
|
+
function onChange(id, value) {
|
|
19
|
+
const updatedValues = _objectSpread(_objectSpread({}, values), {}, {
|
|
20
|
+
[id]: value
|
|
21
|
+
});
|
|
22
|
+
setValues(updatedValues);
|
|
23
|
+
if (callback) {
|
|
24
|
+
callback(updatedValues);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return [values, onChange];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=useMultiInputValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMultiInputValues.js","names":["useState","useMultiInputValue","_ref","inputs","defaultValues","callback","values","setValues","createDefaultValues","reduce","input","id","onChange","value","updatedValues","_objectSpread"],"sources":["../../../../../src/components/input-masked/hooks/useMultiInputValues.ts"],"sourcesContent":["import { useState } from 'react'\nimport {\n MultiInputMaskProps,\n MultiInputMaskValue,\n} from '../MultiInputMask'\n\ntype SteppedValuesHook<T extends string> = {\n inputs: MultiInputMaskProps<T>['inputs']\n defaultValues?: MultiInputMaskProps<T>['values']\n callback?: (values: MultiInputMaskProps<T>['values']) => void\n}\n\nexport function useMultiInputValue<T extends string>({\n inputs,\n defaultValues,\n callback,\n}: SteppedValuesHook<T>) {\n const [values, setValues] = useState<MultiInputMaskValue<T>>(\n defaultValues ? defaultValues : createDefaultValues()\n )\n\n function createDefaultValues() {\n return inputs.reduce((values, input) => {\n values[input.id] = ''\n\n return values\n }, {} as MultiInputMaskValue<T>)\n }\n\n function onChange(id: string, value: string) {\n const updatedValues = { ...values, [id]: value }\n\n setValues(updatedValues)\n if (callback) {\n callback(updatedValues)\n }\n }\n\n return [values, onChange] as const\n}\n"],"mappings":";;;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAYhC,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAIT;EAAA,IAJ4B;IACnDC,MAAM;IACNC,aAAa;IACbC;EACoB,CAAC,GAAAH,IAAA;EACrB,MAAM,CAACI,MAAM,EAAEC,SAAS,CAAC,GAAGP,QAAQ,CAClCI,aAAa,GAAGA,aAAa,GAAGI,mBAAmB,CAAC,CACtD,CAAC;EAED,SAASA,mBAAmBA,CAAA,EAAG;IAC7B,OAAOL,MAAM,CAACM,MAAM,CAAC,CAACH,MAAM,EAAEI,KAAK,KAAK;MACtCJ,MAAM,CAACI,KAAK,CAACC,EAAE,CAAC,GAAG,EAAE;MAErB,OAAOL,MAAM;IACf,CAAC,EAAE,CAAC,CAA2B,CAAC;EAClC;EAEA,SAASM,QAAQA,CAACD,EAAU,EAAEE,KAAa,EAAE;IAC3C,MAAMC,aAAa,GAAAC,aAAA,CAAAA,aAAA,KAAQT,MAAM;MAAE,CAACK,EAAE,GAAGE;IAAK,EAAE;IAEhDN,SAAS,CAACO,aAAa,CAAC;IACxB,IAAIT,QAAQ,EAAE;MACZA,QAAQ,CAACS,aAAa,CAAC;IACzB;EACF;EAEA,OAAO,CAACR,MAAM,EAAEM,QAAQ,CAAC;AAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["InputMasked"],"sources":["../../../../src/components/input-masked/index.ts"],"sourcesContent":["/**\n * Component Entry\n *\n */\n\nimport InputMasked from './InputMasked'\nexport default InputMasked\nexport * from './InputMasked'\n"],"mappings":"AAKA,OAAOA,WAAW,MAAM,eAAe;AACvC,eAAeA,WAAW;AAC1B,cAAc,eAAe"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["InputMasked","default","MultiInputMask"],"sources":["../../../../src/components/input-masked/index.ts"],"sourcesContent":["/**\n * Component Entry\n *\n */\n\nimport InputMasked from './InputMasked'\nexport default InputMasked\nexport * from './InputMasked'\n\nexport { default as MultiInputMask } from './MultiInputMask'\nexport * from './MultiInputMask'\n"],"mappings":"AAKA,OAAOA,WAAW,MAAM,eAAe;AACvC,eAAeA,WAAW;AAC1B,cAAc,eAAe;AAE7B,SAASC,OAAO,IAAIC,cAAc,QAAQ,kBAAkB;AAC5D,cAAc,kBAAkB"}
|
|
@@ -7,4 +7,61 @@
|
|
|
7
7
|
*/
|
|
8
8
|
.dnb-input-masked--guide {
|
|
9
9
|
font-family: var(--font-family-monospace);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.dnb-multi-input-mask__fieldset {
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 0;
|
|
15
|
+
border: none;
|
|
16
|
+
}
|
|
17
|
+
.dnb-multi-input-mask__fieldset--horizontal {
|
|
18
|
+
display: inline-flex;
|
|
19
|
+
flex-flow: row wrap;
|
|
20
|
+
align-items: baseline;
|
|
21
|
+
grid-gap: 1rem;
|
|
22
|
+
gap: 1rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.dnb-multi-input-mask__input {
|
|
26
|
+
display: inline-block;
|
|
27
|
+
width: auto;
|
|
28
|
+
margin: 0;
|
|
29
|
+
padding: 0 0.125rem;
|
|
30
|
+
transform: translateY(0);
|
|
31
|
+
outline: none;
|
|
32
|
+
font-family: var(--font-family-monospace);
|
|
33
|
+
text-align: center;
|
|
34
|
+
border: none;
|
|
35
|
+
background: transparent;
|
|
36
|
+
overflow: visible;
|
|
37
|
+
white-space: nowrap;
|
|
38
|
+
}
|
|
39
|
+
.dnb-multi-input-mask__input:first-of-type {
|
|
40
|
+
padding-left: 0.5rem;
|
|
41
|
+
}
|
|
42
|
+
.dnb-multi-input-mask__input:last-of-type {
|
|
43
|
+
padding-right: 0.5rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.dnb-multi-input-mask {
|
|
47
|
+
width: -moz-fit-content;
|
|
48
|
+
width: fit-content;
|
|
49
|
+
}
|
|
50
|
+
.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__input,
|
|
51
|
+
.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__delimiter {
|
|
52
|
+
color: var(--color-black-55);
|
|
53
|
+
}
|
|
54
|
+
.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__input--highlight,
|
|
55
|
+
.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__delimiter--highlight {
|
|
56
|
+
color: var(--color-black);
|
|
57
|
+
}
|
|
58
|
+
.dnb-multi-input-mask .dnb-input__shell:focus-within {
|
|
59
|
+
box-shadow: 0 0 0 var(--input-border-width--focus) var(--input-border-color--hover);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.dnb-multi-input-mask__legend--horizontal.dnb-form-label {
|
|
63
|
+
display: contents;
|
|
64
|
+
}
|
|
65
|
+
.dnb-multi-input-mask__legend:not([disabled]):hover ~ .dnb-multi-input-mask .dnb-input__shell {
|
|
66
|
+
box-shadow: 0 0 0 var(--input-border-width--focus) var(--input-border-color--hover);
|
|
10
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.dnb-input-masked--guide{font-family:var(--font-family-monospace)}
|
|
1
|
+
.dnb-input-masked--guide{font-family:var(--font-family-monospace)}.dnb-multi-input-mask__fieldset{border:none;margin:0;padding:0}.dnb-multi-input-mask__fieldset--horizontal{grid-gap:1rem;align-items:baseline;display:inline-flex;flex-flow:row wrap;gap:1rem}.dnb-multi-input-mask__input{background:transparent;border:none;display:inline-block;font-family:var(--font-family-monospace);margin:0;outline:none;overflow:visible;padding:0 .125rem;text-align:center;transform:translateY(0);white-space:nowrap;width:auto}.dnb-multi-input-mask__input:first-of-type{padding-left:.5rem}.dnb-multi-input-mask__input:last-of-type{padding-right:.5rem}.dnb-multi-input-mask{width:-moz-fit-content;width:fit-content}.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__delimiter,.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__input{color:var(--color-black-55)}.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__delimiter--highlight,.dnb-multi-input-mask:not(.dnb-input__status--error) .dnb-multi-input-mask__input--highlight{color:var(--color-black)}.dnb-multi-input-mask .dnb-input__shell:focus-within{box-shadow:0 0 0 var(--input-border-width--focus) var(--input-border-color--hover)}.dnb-multi-input-mask__legend--horizontal.dnb-form-label{display:contents}.dnb-multi-input-mask__legend:not([disabled]):hover~.dnb-multi-input-mask .dnb-input__shell{box-shadow:0 0 0 var(--input-border-width--focus) var(--input-border-color--hover)}
|
|
@@ -10,3 +10,76 @@
|
|
|
10
10
|
font-family: var(--font-family-monospace);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
+
|
|
14
|
+
// MultiInputMask
|
|
15
|
+
.dnb-multi-input-mask__fieldset {
|
|
16
|
+
@include fieldsetReset();
|
|
17
|
+
|
|
18
|
+
&--horizontal {
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
flex-flow: row wrap;
|
|
21
|
+
align-items: baseline;
|
|
22
|
+
// Adds the 1rem space between legend and input wrapper, as the `display: contents` in .dnb-multi-input-mask__legend makes the margins from .dnb-form-label not apply
|
|
23
|
+
gap: 1rem;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.dnb-multi-input-mask__input {
|
|
28
|
+
display: inline-block;
|
|
29
|
+
width: auto;
|
|
30
|
+
|
|
31
|
+
margin: 0;
|
|
32
|
+
padding: 0 0.125rem;
|
|
33
|
+
|
|
34
|
+
// reset vertical alignment
|
|
35
|
+
transform: translateY(0);
|
|
36
|
+
|
|
37
|
+
outline: none;
|
|
38
|
+
|
|
39
|
+
font-family: var(--font-family-monospace);
|
|
40
|
+
text-align: center;
|
|
41
|
+
border: none;
|
|
42
|
+
background: transparent;
|
|
43
|
+
|
|
44
|
+
overflow: visible;
|
|
45
|
+
white-space: nowrap;
|
|
46
|
+
|
|
47
|
+
&:first-of-type {
|
|
48
|
+
padding-left: 0.5rem;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&:last-of-type {
|
|
52
|
+
padding-right: 0.5rem;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.dnb-multi-input-mask {
|
|
57
|
+
width: fit-content;
|
|
58
|
+
|
|
59
|
+
&:not(.dnb-input__status--error) {
|
|
60
|
+
.dnb-multi-input-mask__input,
|
|
61
|
+
.dnb-multi-input-mask__delimiter {
|
|
62
|
+
color: var(--color-black-55);
|
|
63
|
+
|
|
64
|
+
&--highlight {
|
|
65
|
+
color: var(--color-black);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.dnb-input__shell:focus-within {
|
|
71
|
+
box-shadow: 0 0 0 var(--input-border-width--focus)
|
|
72
|
+
var(--input-border-color--hover);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.dnb-multi-input-mask__legend {
|
|
77
|
+
&--horizontal.dnb-form-label {
|
|
78
|
+
display: contents;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&:not([disabled]):hover ~ .dnb-multi-input-mask .dnb-input__shell {
|
|
82
|
+
box-shadow: 0 0 0 var(--input-border-width--focus)
|
|
83
|
+
var(--input-border-color--hover);
|
|
84
|
+
}
|
|
85
|
+
}
|
package/components/lib.d.ts
CHANGED
|
@@ -118,7 +118,7 @@ export declare const getComponents: () => {
|
|
|
118
118
|
_supportsSpacingProps: boolean;
|
|
119
119
|
};
|
|
120
120
|
Input: typeof Input;
|
|
121
|
-
InputMasked:
|
|
121
|
+
InputMasked: any;
|
|
122
122
|
Logo: typeof Logo;
|
|
123
123
|
Modal: typeof import("./modal/Modal").OriginalComponent;
|
|
124
124
|
NumberFormat: typeof NumberFormat;
|
|
@@ -36,11 +36,11 @@ export type SectionProps = {
|
|
|
36
36
|
*/
|
|
37
37
|
variant?: SectionVariants | string;
|
|
38
38
|
/**
|
|
39
|
-
* Define if the background color should break-out to a fullscreen view.
|
|
39
|
+
* Define if the background color should break-out to a fullscreen view. Defaults to `true`.
|
|
40
40
|
*/
|
|
41
41
|
breakout?: boolean | ResponsiveProp<boolean>;
|
|
42
42
|
/**
|
|
43
|
-
* Define if the section should have rounded corners.
|
|
43
|
+
* Define if the section should have rounded corners. Defaults to `false`.
|
|
44
44
|
*/
|
|
45
45
|
roundedCorner?: boolean | ResponsiveProp<boolean>;
|
|
46
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Section.js","names":["React","classnames","Context","isTrue","extendPropsWithContext","Space","defaultProps","element","Section","localProps","context","useContext","props","variant","breakout","roundedCorner","textColor","backgroundColor","outline","innerRef","className","children","spacing","style_type","inner_ref","attributes","_objectWithoutProperties","_excluded","params","_objectSpread","internalRef","useRef","elementRef","styleObj","computeStyle","value","getColor","String","style","createElement","_extends","test","undefined","property","name","valueCallback","media","small","medium","large","result","size","_media","_media2","_name","_supportsSpacingProps"],"sources":["../../../../src/components/section/Section.tsx"],"sourcesContent":["/**\n * Web Section Component\n *\n */\n\nimport React from 'react'\nimport classnames from 'classnames'\nimport Context from '../../shared/Context'\nimport {\n isTrue,\n extendPropsWithContext,\n} from '../../shared/component-helper'\nimport type {\n DynamicElement,\n ResponsiveProp,\n SpacingProps,\n} from '../../shared/types'\nimport Space from '../space/Space'\n\nexport type SectionVariants = 'error' | 'info' | 'warning' | 'success'\n\nexport type SectionStyleTypes =\n | 'divider'\n | 'white'\n | 'transparent'\n\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'lavender'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'pistachio'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'emerald-green'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'sea-green'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'fire-red'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'fire-red-8'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'sand-yellow'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'black-3'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'mint-green'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'mint-green-12'\n\nexport type SectionSpacing =\n | boolean\n | 'x-small'\n | 'small'\n | 'medium'\n | 'large'\n | 'x-large'\n | 'xx-large'\n\nexport type TextColor = string\nexport type OutlineColor = string | boolean\nexport type BackgroundColor = string\n\nexport type SectionProps = {\n /**\n * Defines the semantic purpose and subsequently the style of the visual helper. Will take precedence over the style_type prop\n */\n variant?: SectionVariants | string\n\n /**\n * Define if the background color should break-out to a fullscreen view.
|
|
1
|
+
{"version":3,"file":"Section.js","names":["React","classnames","Context","isTrue","extendPropsWithContext","Space","defaultProps","element","Section","localProps","context","useContext","props","variant","breakout","roundedCorner","textColor","backgroundColor","outline","innerRef","className","children","spacing","style_type","inner_ref","attributes","_objectWithoutProperties","_excluded","params","_objectSpread","internalRef","useRef","elementRef","styleObj","computeStyle","value","getColor","String","style","createElement","_extends","test","undefined","property","name","valueCallback","media","small","medium","large","result","size","_media","_media2","_name","_supportsSpacingProps"],"sources":["../../../../src/components/section/Section.tsx"],"sourcesContent":["/**\n * Web Section Component\n *\n */\n\nimport React from 'react'\nimport classnames from 'classnames'\nimport Context from '../../shared/Context'\nimport {\n isTrue,\n extendPropsWithContext,\n} from '../../shared/component-helper'\nimport type {\n DynamicElement,\n ResponsiveProp,\n SpacingProps,\n} from '../../shared/types'\nimport Space from '../space/Space'\n\nexport type SectionVariants = 'error' | 'info' | 'warning' | 'success'\n\nexport type SectionStyleTypes =\n | 'divider'\n | 'white'\n | 'transparent'\n\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'lavender'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'pistachio'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'emerald-green'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'sea-green'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'fire-red'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'fire-red-8'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'sand-yellow'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'black-3'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'mint-green'\n /** @deprecated in v11 use \"variant\" or \"backgroundColor\" prop instead */\n | 'mint-green-12'\n\nexport type SectionSpacing =\n | boolean\n | 'x-small'\n | 'small'\n | 'medium'\n | 'large'\n | 'x-large'\n | 'xx-large'\n\nexport type TextColor = string\nexport type OutlineColor = string | boolean\nexport type BackgroundColor = string\n\nexport type SectionProps = {\n /**\n * Defines the semantic purpose and subsequently the style of the visual helper. Will take precedence over the style_type prop\n */\n variant?: SectionVariants | string\n\n /**\n * Define if the background color should break-out to a fullscreen view. Defaults to `true`.\n */\n breakout?: boolean | ResponsiveProp<boolean>\n\n /**\n * Define if the section should have rounded corners. Defaults to `false`.\n */\n roundedCorner?: boolean | ResponsiveProp<boolean>\n\n /**\n * Define a custom border color. Use a Eufemia color.\n */\n outline?: OutlineColor | ResponsiveProp<OutlineColor>\n\n /**\n * Define a custom text color to compliment the backgroundColor. Use a Eufemia color.\n */\n textColor?: TextColor | ResponsiveProp<TextColor>\n\n /**\n * Define a custom background color, instead of a variant. Use a Eufemia color.\n */\n backgroundColor?: BackgroundColor | ResponsiveProp<BackgroundColor>\n\n /**\n * Define what HTML element should be used. Defaults to `<section>`.\n */\n element?: DynamicElement\n\n /**\n * Define a React.Ref.\n */\n innerRef?: React.RefObject<HTMLElement>\n\n /**\n * @deprecated in v11 use \"innerSpace\" prop instead */\n spacing?: SectionSpacing | ResponsiveProp<SectionSpacing>\n /**\n * @deprecated in v11 use \"background\" prop instead */\n style_type?: SectionStyleTypes | string\n /**\n * @deprecated in v11 use \"innerRef\" prop instead */\n inner_ref?: React.RefObject<HTMLElement>\n}\n\nexport type SectionAllProps = SectionProps &\n SpacingProps &\n Omit<React.HTMLProps<HTMLElement>, 'ref'>\n\ntype Attributes = Record<string, unknown> & { style?: React.CSSProperties }\n\nconst defaultProps = {\n element: 'section',\n}\n\nexport default function Section(localProps: SectionAllProps) {\n const context = React.useContext(Context)\n\n // use only the props from context, who are available here anyway\n const props = extendPropsWithContext(\n localProps,\n defaultProps,\n context.Section\n )\n\n const {\n element,\n variant,\n breakout = true,\n roundedCorner,\n textColor,\n backgroundColor,\n outline,\n innerRef,\n\n className,\n children,\n\n spacing,\n style_type,\n inner_ref,\n\n ...attributes\n } = props\n\n const params = {\n className: classnames(\n 'dnb-section',\n `dnb-section--${variant ? variant : style_type || 'default'}`,\n spacing &&\n `dnb-section--spacing-${isTrue(spacing) ? 'large' : spacing}`,\n className\n ),\n ...attributes,\n } as Attributes\n\n const internalRef = React.useRef<HTMLElement>()\n const elementRef = innerRef || inner_ref || internalRef\n params.innerRef = elementRef\n\n const styleObj = {\n ...computeStyle(\n breakout,\n 'breakout',\n (value) => `var(--breakout--${value ? 'on' : 'off'})`\n ),\n ...computeStyle(\n roundedCorner,\n 'rounded-corner',\n (value) => value && 'var(--rounded-corner--value)'\n ),\n ...computeStyle(textColor, 'text-color', (value) => getColor(value)),\n ...computeStyle(backgroundColor, 'background-color', (value) =>\n getColor(value)\n ),\n ...computeStyle(outline, 'outline-color', (value) =>\n String(value) === 'true'\n ? 'var(--outline-color--value)'\n : getColor(value)\n ),\n ...params?.style,\n } as React.CSSProperties\n\n return (\n <Space {...params} element={element} style={styleObj}>\n {children}\n </Space>\n )\n}\n\nfunction getColor(value: string) {\n return value\n ? !/#|var/.test(value)\n ? `var(--color-${value})`\n : value\n : undefined\n}\n\nfunction computeStyle(\n property: ResponsiveProp<unknown> | boolean | string,\n name: string,\n valueCallback: (value: string) => string | undefined\n) {\n let media = property as ResponsiveProp<unknown>\n\n if (media !== null && typeof media !== 'object') {\n media = {\n small: property,\n medium: property,\n large: property,\n } as ResponsiveProp<unknown>\n }\n\n const result = {}\n\n for (const size in media as ResponsiveProp<unknown>) {\n if (typeof media?.[size] !== 'undefined') {\n const value = valueCallback(media?.[size])\n if (typeof value === 'string') {\n result[`--${name}--${size}`] = value\n }\n }\n }\n\n return result\n}\n\nSection._name = 'Section'\nSection._supportsSpacingProps = true\n"],"mappings":"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"}
|
|
@@ -38,9 +38,9 @@ export type ButtonChildren =
|
|
|
38
38
|
| string
|
|
39
39
|
| ((...args: any[]) => any)
|
|
40
40
|
| React.ReactNode;
|
|
41
|
-
export type ButtonElement =
|
|
42
|
-
HTMLButtonElement | HTMLAnchorElement | AnchorProps
|
|
43
|
-
|
|
41
|
+
export type ButtonElement =
|
|
42
|
+
| DynamicElement<HTMLButtonElement | HTMLAnchorElement | AnchorProps>
|
|
43
|
+
| React.ReactNode;
|
|
44
44
|
export type ButtonOnClick = string | ((...args: any[]) => any);
|
|
45
45
|
export type ButtonProps = {
|
|
46
46
|
/**
|
|
@@ -31,8 +31,9 @@ export default function FormLabel(localProps) {
|
|
|
31
31
|
label_direction
|
|
32
32
|
} = props,
|
|
33
33
|
attributes = _objectWithoutProperties(props, _excluded);
|
|
34
|
+
const isInteractive = !props.disabled && !srOnly && (typeof props.onClick === 'function' || forId || for_id);
|
|
34
35
|
const params = _objectSpread({
|
|
35
|
-
className: classnames('dnb-form-label', (isTrue(vertical) || label_direction === 'vertical') && `dnb-form-label--vertical`, (srOnly || isTrue(sr_only)) && 'dnb-sr-only', createSkeletonClass('font', skeleton, context), createSpacingClasses(props), className, size && `dnb-h--${size}
|
|
36
|
+
className: classnames('dnb-form-label', (isTrue(vertical) || label_direction === 'vertical') && `dnb-form-label--vertical`, (srOnly || isTrue(sr_only)) && 'dnb-sr-only', createSkeletonClass('font', skeleton, context), createSpacingClasses(props), className, size && `dnb-h--${size}`, isInteractive && 'dnb-form-label--interactive'),
|
|
36
37
|
htmlFor: forId || for_id
|
|
37
38
|
}, attributes);
|
|
38
39
|
params['ref'] = innerRef;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormLabel.js","names":["React","classnames","extendPropsWithContext","isTrue","validateDOMAttributes","createSpacingClasses","createSkeletonClass","skeletonDOMAttributes","pickFormElementProps","Context","FormLabel","localProps","context","useContext","props","skeleton","FormRow","formElement","forId","text","srOnly","vertical","size","element","Element","innerRef","className","children","for_id","sr_only","label_direction","attributes","_objectWithoutProperties","_excluded","params","_objectSpread","htmlFor","createElement","_supportsSpacingProps"],"sources":["../../../../src/components/form-label/FormLabel.tsx"],"sourcesContent":["/**\n * Web FormLabel Component\n *\n */\n\nimport React from 'react'\nimport classnames from 'classnames'\nimport {\n extendPropsWithContext,\n isTrue,\n validateDOMAttributes,\n} from '../../shared/component-helper'\nimport { createSpacingClasses } from '../space/SpacingHelper'\nimport {\n createSkeletonClass,\n skeletonDOMAttributes,\n} from '../skeleton/SkeletonHelper'\nimport { pickFormElementProps } from '../../shared/helpers/filterValidProps'\nimport Context from '../../shared/Context'\nimport {\n DynamicElement,\n DynamicElementParams,\n SpacingProps,\n} from '../../shared/types'\n\nexport type FormLabelProps = {\n forId?: string\n element?: DynamicElement<HTMLLabelElement>\n text?: React.ReactNode\n size?: 'basis' | 'medium' | 'large'\n id?: string\n skeleton?: boolean\n label?: React.ReactNode\n vertical?: boolean\n srOnly?: boolean\n innerRef?: React.RefObject<HTMLElement>\n\n /** Is not a part of HTMLLabelElement and not documented as of now */\n disabled?: boolean\n\n /** @deprecated use forId instead */\n for_id?: string\n /** @deprecated use srOnly instead */\n sr_only?: boolean\n /** @deprecated use labelDirection instead (was not documented before) */\n label_direction?: 'vertical' | 'horizontal'\n}\n\nexport type FormLabelAllProps = FormLabelProps &\n React.HTMLAttributes<HTMLLabelElement> &\n SpacingProps\n\nexport default function FormLabel(localProps: FormLabelAllProps) {\n const context = React.useContext(Context)\n\n // use only the props from context, who are available here anyway\n const props = extendPropsWithContext(\n localProps,\n null,\n { skeleton: context?.skeleton },\n pickFormElementProps(context?.FormRow), // Deprecated – can be removed in v11\n pickFormElementProps(context?.formElement),\n context?.FormLabel\n )\n\n const {\n forId,\n text,\n srOnly,\n vertical,\n size,\n skeleton,\n element: Element = 'label',\n innerRef,\n className,\n children,\n\n /** @deprecated can be removed in v11 */\n for_id,\n sr_only,\n label_direction,\n\n ...attributes\n } = props\n\n const params = {\n className: classnames(\n 'dnb-form-label',\n (isTrue(vertical) || label_direction === 'vertical') &&\n `dnb-form-label--vertical`,\n (srOnly || isTrue(sr_only)) && 'dnb-sr-only',\n size && `dnb-h--${size}`,\n createSkeletonClass('font', skeleton, context),\n createSpacingClasses(props),\n className\n ),\n htmlFor: forId || for_id,\n ...(attributes as DynamicElementParams),\n }\n\n params['ref'] = innerRef\n\n skeletonDOMAttributes(params, skeleton, context)\n validateDOMAttributes(localProps, params)\n\n return <Element {...params}>{text || children}</Element>\n}\n\nFormLabel._supportsSpacingProps = true\n"],"mappings":";;;;;AAKA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,sBAAsB,EACtBC,MAAM,EACNC,qBAAqB,QAChB,+BAA+B;AACtC,SAASC,oBAAoB,QAAQ,wBAAwB;AAC7D,SACEC,mBAAmB,EACnBC,qBAAqB,QAChB,4BAA4B;AACnC,SAASC,oBAAoB,QAAQ,uCAAuC;AAC5E,OAAOC,OAAO,MAAM,sBAAsB;AAkC1C,eAAe,SAASC,SAASA,CAACC,UAA6B,EAAE;EAC/D,MAAMC,OAAO,GAAGZ,KAAK,CAACa,UAAU,CAACJ,OAAO,CAAC;EAGzC,MAAMK,KAAK,GAAGZ,sBAAsB,CAClCS,UAAU,EACV,IAAI,EACJ;IAAEI,QAAQ,EAAEH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG;EAAS,CAAC,EAC/BP,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEI,OAAO,CAAC,EACtCR,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,WAAW,CAAC,EAC1CL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEF,SACX,CAAC;EAED,MAAM;MACJQ,KAAK;MACLC,IAAI;MACJC,MAAM;MACNC,QAAQ;MACRC,IAAI;MACJP,QAAQ;MACRQ,OAAO,EAAEC,OAAO,GAAG,OAAO;MAC1BC,QAAQ;MACRC,SAAS;MACTC,QAAQ;MAGRC,MAAM;MACNC,OAAO;MACPC;IAGF,CAAC,GAAGhB,KAAK;IADJiB,UAAU,GAAAC,wBAAA,CACXlB,KAAK,EAAAmB,SAAA;EAET,MAAMC,MAAM,GAAAC,aAAA;
|
|
1
|
+
{"version":3,"file":"FormLabel.js","names":["React","classnames","extendPropsWithContext","isTrue","validateDOMAttributes","createSpacingClasses","createSkeletonClass","skeletonDOMAttributes","pickFormElementProps","Context","FormLabel","localProps","context","useContext","props","skeleton","FormRow","formElement","forId","text","srOnly","vertical","size","element","Element","innerRef","className","children","for_id","sr_only","label_direction","attributes","_objectWithoutProperties","_excluded","isInteractive","disabled","onClick","params","_objectSpread","htmlFor","createElement","_supportsSpacingProps"],"sources":["../../../../src/components/form-label/FormLabel.tsx"],"sourcesContent":["/**\n * Web FormLabel Component\n *\n */\n\nimport React from 'react'\nimport classnames from 'classnames'\nimport {\n extendPropsWithContext,\n isTrue,\n validateDOMAttributes,\n} from '../../shared/component-helper'\nimport { createSpacingClasses } from '../space/SpacingHelper'\nimport {\n createSkeletonClass,\n skeletonDOMAttributes,\n} from '../skeleton/SkeletonHelper'\nimport { pickFormElementProps } from '../../shared/helpers/filterValidProps'\nimport Context from '../../shared/Context'\nimport {\n DynamicElement,\n DynamicElementParams,\n SpacingProps,\n} from '../../shared/types'\n\nexport type FormLabelProps = {\n forId?: string\n element?: DynamicElement<HTMLLabelElement>\n text?: React.ReactNode\n size?: 'basis' | 'medium' | 'large'\n id?: string\n skeleton?: boolean\n label?: React.ReactNode\n vertical?: boolean\n srOnly?: boolean\n innerRef?: React.RefObject<HTMLElement>\n\n /** Is not a part of HTMLLabelElement and not documented as of now */\n disabled?: boolean\n\n /** @deprecated use forId instead */\n for_id?: string\n /** @deprecated use srOnly instead */\n sr_only?: boolean\n /** @deprecated use labelDirection instead (was not documented before) */\n label_direction?: 'vertical' | 'horizontal'\n}\n\nexport type FormLabelAllProps = FormLabelProps &\n React.HTMLAttributes<HTMLLabelElement> &\n SpacingProps\n\nexport default function FormLabel(localProps: FormLabelAllProps) {\n const context = React.useContext(Context)\n\n // use only the props from context, who are available here anyway\n const props = extendPropsWithContext(\n localProps,\n null,\n { skeleton: context?.skeleton },\n pickFormElementProps(context?.FormRow), // Deprecated – can be removed in v11\n pickFormElementProps(context?.formElement),\n context?.FormLabel\n )\n\n const {\n forId,\n text,\n srOnly,\n vertical,\n size,\n skeleton,\n element: Element = 'label',\n innerRef,\n className,\n children,\n\n /** @deprecated can be removed in v11 */\n for_id,\n sr_only,\n label_direction,\n\n ...attributes\n } = props\n\n const isInteractive =\n !props.disabled &&\n !srOnly &&\n (typeof props.onClick === 'function' || forId || for_id)\n\n const params = {\n className: classnames(\n 'dnb-form-label',\n (isTrue(vertical) || label_direction === 'vertical') &&\n `dnb-form-label--vertical`,\n (srOnly || isTrue(sr_only)) && 'dnb-sr-only',\n size && `dnb-h--${size}`,\n isInteractive && 'dnb-form-label--interactive',\n createSkeletonClass('font', skeleton, context),\n createSpacingClasses(props),\n className\n ),\n htmlFor: forId || for_id,\n ...(attributes as DynamicElementParams),\n }\n\n params['ref'] = innerRef\n\n skeletonDOMAttributes(params, skeleton, context)\n validateDOMAttributes(localProps, params)\n\n return <Element {...params}>{text || children}</Element>\n}\n\nFormLabel._supportsSpacingProps = true\n"],"mappings":";;;;;AAKA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,sBAAsB,EACtBC,MAAM,EACNC,qBAAqB,QAChB,+BAA+B;AACtC,SAASC,oBAAoB,QAAQ,wBAAwB;AAC7D,SACEC,mBAAmB,EACnBC,qBAAqB,QAChB,4BAA4B;AACnC,SAASC,oBAAoB,QAAQ,uCAAuC;AAC5E,OAAOC,OAAO,MAAM,sBAAsB;AAkC1C,eAAe,SAASC,SAASA,CAACC,UAA6B,EAAE;EAC/D,MAAMC,OAAO,GAAGZ,KAAK,CAACa,UAAU,CAACJ,OAAO,CAAC;EAGzC,MAAMK,KAAK,GAAGZ,sBAAsB,CAClCS,UAAU,EACV,IAAI,EACJ;IAAEI,QAAQ,EAAEH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG;EAAS,CAAC,EAC/BP,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEI,OAAO,CAAC,EACtCR,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,WAAW,CAAC,EAC1CL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEF,SACX,CAAC;EAED,MAAM;MACJQ,KAAK;MACLC,IAAI;MACJC,MAAM;MACNC,QAAQ;MACRC,IAAI;MACJP,QAAQ;MACRQ,OAAO,EAAEC,OAAO,GAAG,OAAO;MAC1BC,QAAQ;MACRC,SAAS;MACTC,QAAQ;MAGRC,MAAM;MACNC,OAAO;MACPC;IAGF,CAAC,GAAGhB,KAAK;IADJiB,UAAU,GAAAC,wBAAA,CACXlB,KAAK,EAAAmB,SAAA;EAET,MAAMC,aAAa,GACjB,CAACpB,KAAK,CAACqB,QAAQ,IACf,CAACf,MAAM,KACN,OAAON,KAAK,CAACsB,OAAO,KAAK,UAAU,IAAIlB,KAAK,IAAIU,MAAM,CAAC;EAE1D,MAAMS,MAAM,GAAAC,aAAA;IACVZ,SAAS,EAAEzB,UAAU,CACnB,gBAAgB,EAChB,CAACE,MAAM,CAACkB,QAAQ,CAAC,IAAIS,eAAe,KAAK,UAAU,KAChD,0BAAyB,EAC5B,CAACV,MAAM,IAAIjB,MAAM,CAAC0B,OAAO,CAAC,KAAK,aAAa,EAG5CvB,mBAAmB,CAAC,MAAM,EAAES,QAAQ,EAAEH,OAAO,CAAC,EAC9CP,oBAAoB,CAACS,KAAK,CAAC,EAC3BY,SAAS,EAJTJ,IAAI,IAAK,UAASA,IAAK,EAAC,EACxBY,aAAa,IAAI,6BAInB,CAAC;IACDK,OAAO,EAAErB,KAAK,IAAIU;EAAM,GACpBG,UAAU,CACf;EAEDM,MAAM,CAAC,KAAK,CAAC,GAAGZ,QAAQ;EAExBlB,qBAAqB,CAAC8B,MAAM,EAAEtB,QAAQ,EAAEH,OAAO,CAAC;EAChDR,qBAAqB,CAACO,UAAU,EAAE0B,MAAM,CAAC;EAEzC,OAAOrC,KAAA,CAAAwC,aAAA,CAAChB,OAAO,EAAKa,MAAM,EAAGlB,IAAI,IAAIQ,QAAkB,CAAC;AAC1D;AAEAjB,SAAS,CAAC+B,qBAAqB,GAAG,IAAI"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
.dnb-form-label {
|
|
6
6
|
color: var(--color-black-80);
|
|
7
7
|
}
|
|
8
|
-
.dnb-form-label
|
|
8
|
+
.dnb-form-label--interactive {
|
|
9
9
|
cursor: pointer;
|
|
10
10
|
}
|
|
11
|
-
.dnb-form-label
|
|
11
|
+
.dnb-form-label--interactive:hover {
|
|
12
12
|
color: var(--color-sea-green);
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.dnb-form-label{color:var(--color-black-80)}.dnb-form-label
|
|
1
|
+
.dnb-form-label{color:var(--color-black-80)}.dnb-form-label--interactive{cursor:pointer}.dnb-form-label--interactive:hover{color:var(--color-sea-green)}
|
|
@@ -27,8 +27,6 @@ const InputMasked = props => {
|
|
|
27
27
|
}
|
|
28
28
|
}, _InputMaskedElement || (_InputMaskedElement = React.createElement(InputMaskedElement, null)));
|
|
29
29
|
};
|
|
30
|
-
InputMasked._supportsSpacingProps = true;
|
|
31
|
-
export default InputMasked;
|
|
32
30
|
process.env.NODE_ENV !== "production" ? InputMasked.propTypes = _objectSpread({
|
|
33
31
|
mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.func]),
|
|
34
32
|
number_mask: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.object]),
|
|
@@ -75,4 +73,6 @@ InputMasked.defaultProps = _objectSpread(_objectSpread({}, Input.defaultProps),
|
|
|
75
73
|
on_submit_focus: null,
|
|
76
74
|
on_submit_blur: null
|
|
77
75
|
});
|
|
76
|
+
InputMasked._supportsSpacingProps = true;
|
|
77
|
+
export default InputMasked;
|
|
78
78
|
//# sourceMappingURL=InputMasked.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputMasked.js","names":["React","PropTypes","extendPropsWithContext","InputMaskedContext","InputMaskedElement","Input","inputPropTypes","Context","InputMasked","props","context","useContext","mask","alias","key","test","contextAndProps","useCallback","defaultProps","createElement","Provider","value","_InputMaskedElement","
|
|
1
|
+
{"version":3,"file":"InputMasked.js","names":["React","PropTypes","extendPropsWithContext","InputMaskedContext","InputMaskedElement","Input","inputPropTypes","Context","InputMasked","props","context","useContext","mask","alias","key","test","contextAndProps","useCallback","defaultProps","createElement","Provider","value","_InputMaskedElement","process","env","NODE_ENV","propTypes","_objectSpread","oneOfType","object","array","func","number_mask","string","bool","currency_mask","mask_options","number_format","locale","as_currency","as_number","as_percent","show_mask","show_guide","pipe","keep_char_positions","placeholder_char","inner_ref","on_change","on_submit","on_focus","on_blur","on_submit_focus","on_submit_blur","_supportsSpacingProps"],"sources":["../../../../src/components/input-masked/InputMasked.js"],"sourcesContent":["/* eslint-disable react/no-unused-prop-types */\n/**\n * Web InputMasked Component\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { extendPropsWithContext } from '../../shared/component-helper'\nimport InputMaskedContext from './InputMaskedContext'\nimport InputMaskedElement from './InputMaskedElement'\nimport Input, { inputPropTypes } from '../input/Input'\nimport Context from '../../shared/Context'\n\nconst InputMasked = (props) => {\n const context = React.useContext(Context)\n\n // Remove masks defined in Provider/Context, because it overwrites a custom mask\n if (props?.mask) {\n const alias = context?.InputMasked\n for (const key in alias) {\n if (/^as[_A-Z]|number_mask|currency_mask/.test(key)) {\n delete alias[key]\n }\n }\n }\n\n const contextAndProps = React.useCallback(\n extendPropsWithContext(\n props,\n InputMasked.defaultProps,\n context?.InputMasked\n ),\n [props, InputMasked.defaultProps, context?.InputMasked]\n )\n\n return (\n <InputMaskedContext.Provider\n value={{\n props: contextAndProps,\n context,\n }}\n >\n <InputMaskedElement />\n </InputMaskedContext.Provider>\n )\n}\n\nInputMasked.propTypes = {\n mask: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n PropTypes.func,\n ]),\n number_mask: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.object,\n ]),\n currency_mask: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.object,\n ]),\n mask_options: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n number_format: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n locale: PropTypes.string,\n as_currency: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n as_number: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n as_percent: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n show_mask: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n show_guide: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n pipe: PropTypes.func,\n keep_char_positions: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n ]),\n placeholder_char: PropTypes.string,\n inner_ref: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n\n on_change: PropTypes.func,\n on_submit: PropTypes.func,\n on_focus: PropTypes.func,\n on_blur: PropTypes.func,\n on_submit_focus: PropTypes.func,\n on_submit_blur: PropTypes.func,\n\n ...inputPropTypes,\n}\n\nInputMasked.defaultProps = {\n ...Input.defaultProps,\n\n mask: null,\n number_mask: null,\n currency_mask: null,\n mask_options: null,\n number_format: null,\n as_currency: null,\n as_number: null,\n as_percent: null,\n locale: null,\n show_mask: false,\n show_guide: true,\n pipe: null,\n keep_char_positions: false,\n placeholder_char: null,\n inner_ref: null,\n\n on_change: null,\n on_submit: null,\n on_focus: null,\n on_blur: null,\n on_submit_focus: null,\n on_submit_blur: null,\n}\n\nInputMasked._supportsSpacingProps = true\n\nexport default InputMasked\n"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SpacingProps } from '../space/types';
|
|
3
|
+
import { FormStatusState, FormStatusText } from '../FormStatus';
|
|
4
|
+
export type MultiInputMaskInput<T extends string> = {
|
|
5
|
+
/**
|
|
6
|
+
* Defines the id for the input. This id is also used to map the input value to the correct property on the objects used for `values` and `onChange` paramaters.
|
|
7
|
+
*/
|
|
8
|
+
id: T;
|
|
9
|
+
/**
|
|
10
|
+
* Label used by the input. The label itself is hidden, but required to uphold accesability standards for screen readers.
|
|
11
|
+
*/
|
|
12
|
+
label: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Each RegExp item in the array defines what the mask should be for each subsequent character in the input. The length sets the size of the input, so an array of two items would produce an input of two characters
|
|
15
|
+
*/
|
|
16
|
+
mask: RegExp[];
|
|
17
|
+
/**
|
|
18
|
+
* Sets the placeholder character used for the input.
|
|
19
|
+
*/
|
|
20
|
+
placeholderCharacter: string;
|
|
21
|
+
};
|
|
22
|
+
export type MultiInputMaskValue<T extends string> = {
|
|
23
|
+
[K in T]: string;
|
|
24
|
+
};
|
|
25
|
+
export type MultiInputMaskProps<T extends string> = {
|
|
26
|
+
/**
|
|
27
|
+
* The label describing the group of inputs inside the components.
|
|
28
|
+
*/
|
|
29
|
+
label?: React.ReactNode;
|
|
30
|
+
/**
|
|
31
|
+
* Use to change the label layout direction. Defaults to `horizontal`.
|
|
32
|
+
*/
|
|
33
|
+
labelDirection?: 'vertical' | 'horizontal';
|
|
34
|
+
/**
|
|
35
|
+
* Used to define the different inputs representing the inputs in the component. The id's defined here is used to map input value to correct property in `values` parameters used in `onChange`
|
|
36
|
+
*/
|
|
37
|
+
inputs: MultiInputMaskInput<T>[];
|
|
38
|
+
/**
|
|
39
|
+
* Values used for the inputs inside the component. Expects an object with keys matching the id's defined in `inputs`
|
|
40
|
+
*/
|
|
41
|
+
values?: MultiInputMaskValue<T>;
|
|
42
|
+
/**
|
|
43
|
+
* Defines the delimiter used to seperate the inputs inside the component.
|
|
44
|
+
*/
|
|
45
|
+
delimiter?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Runs when the input value changes. Has an object parameter with keys matching the id's defined in `inputs`. i.e. `{month: string, year: string}`
|
|
48
|
+
*/
|
|
49
|
+
onChange?: (values: MultiInputMaskValue<T>) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Text with a status message. The style defaults to an error message. You can use `true` to only get the status color, without a message.
|
|
52
|
+
*/
|
|
53
|
+
status?: FormStatusText;
|
|
54
|
+
/**
|
|
55
|
+
* Defines the state of the status. Currently, there are two statuses `[error, info]`. Defaults to `error`.
|
|
56
|
+
*/
|
|
57
|
+
statusState?: FormStatusState;
|
|
58
|
+
} & Omit<React.HTMLProps<HTMLInputElement>, 'onChange' | 'ref' | 'value' | 'label'> & SpacingProps;
|
|
59
|
+
declare function MultiInputMask<T extends string>({ label, labelDirection, inputs, delimiter, onChange: onChangeExternal, disabled, status, statusState, values: defaultValues, className, ...props }: MultiInputMaskProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
export default MultiInputMask;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
const _excluded = ["label", "labelDirection", "inputs", "delimiter", "onChange", "disabled", "status", "statusState", "values", "className"];
|
|
4
|
+
import React, { Fragment, useRef } from 'react';
|
|
5
|
+
import Input from '../Input';
|
|
6
|
+
import TextMask from './TextMask';
|
|
7
|
+
import useHandleCursorPosition from './hooks/useHandleCursorPosition';
|
|
8
|
+
import classnames from 'classnames';
|
|
9
|
+
import FormLabel from '../FormLabel';
|
|
10
|
+
import { createSpacingClasses } from '../space/SpacingHelper';
|
|
11
|
+
import { useMultiInputValue } from './hooks/useMultiInputValues';
|
|
12
|
+
function MultiInputMask(_ref) {
|
|
13
|
+
let {
|
|
14
|
+
label,
|
|
15
|
+
labelDirection = 'horizontal',
|
|
16
|
+
inputs,
|
|
17
|
+
delimiter,
|
|
18
|
+
onChange: onChangeExternal,
|
|
19
|
+
disabled,
|
|
20
|
+
status,
|
|
21
|
+
statusState,
|
|
22
|
+
values: defaultValues,
|
|
23
|
+
className
|
|
24
|
+
} = _ref,
|
|
25
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
26
|
+
const [values, onChange] = useMultiInputValue({
|
|
27
|
+
inputs,
|
|
28
|
+
defaultValues,
|
|
29
|
+
callback: onChangeExternal
|
|
30
|
+
});
|
|
31
|
+
const inputRefs = useRef([]);
|
|
32
|
+
const {
|
|
33
|
+
onKeyDown
|
|
34
|
+
} = useHandleCursorPosition(inputRefs.current, getKeysToHandle());
|
|
35
|
+
const WrapperElement = label ? 'fieldset' : 'div';
|
|
36
|
+
return React.createElement(WrapperElement, {
|
|
37
|
+
className: classnames('dnb-multi-input-mask__fieldset', createSpacingClasses(props), labelDirection === 'horizontal' && 'dnb-multi-input-mask__fieldset--horizontal')
|
|
38
|
+
}, label && React.createElement(FormLabel, {
|
|
39
|
+
className: 'dnb-multi-input-mask__legend' + (labelDirection === 'horizontal' ? " dnb-multi-input-mask__legend--horizontal" : ""),
|
|
40
|
+
element: "legend",
|
|
41
|
+
onClick: onLegendClick,
|
|
42
|
+
disabled: disabled,
|
|
43
|
+
vertical: labelDirection === 'vertical'
|
|
44
|
+
}, React.createElement("span", null, label)), React.createElement(Input, _extends({}, props, {
|
|
45
|
+
className: classnames('dnb-multi-input-mask', className),
|
|
46
|
+
disabled: disabled,
|
|
47
|
+
status: status,
|
|
48
|
+
status_state: statusState,
|
|
49
|
+
input_element: inputs.map((input, index) => React.createElement(Fragment, {
|
|
50
|
+
key: input.id
|
|
51
|
+
}, React.createElement(MultiInputMaskInput, _extends({}, input, {
|
|
52
|
+
value: values[input.id],
|
|
53
|
+
delimiter: index !== inputs.length - 1 ? delimiter : undefined,
|
|
54
|
+
onKeyDown: onKeyDown,
|
|
55
|
+
onChange: onChange,
|
|
56
|
+
disabled: disabled,
|
|
57
|
+
inputRef: getInputRef
|
|
58
|
+
}))))
|
|
59
|
+
})));
|
|
60
|
+
function onLegendClick() {
|
|
61
|
+
if (disabled) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const firstInput = inputRefs.current[0].current;
|
|
65
|
+
firstInput.focus();
|
|
66
|
+
firstInput.setSelectionRange(0, 0);
|
|
67
|
+
}
|
|
68
|
+
function getInputRef(ref) {
|
|
69
|
+
const inputRef = ref === null || ref === void 0 ? void 0 : ref.inputRef;
|
|
70
|
+
if (inputRef && !inputRefs.current.includes(inputRef)) {
|
|
71
|
+
inputRefs.current.push(inputRef);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function getKeysToHandle() {
|
|
75
|
+
const uniqueMasks = getUniqueMasks();
|
|
76
|
+
if (uniqueMasks.size === 1) {
|
|
77
|
+
const pattern = uniqueMasks.values().next().value.replace(/\//g, '');
|
|
78
|
+
return new RegExp(pattern);
|
|
79
|
+
}
|
|
80
|
+
return inputs.reduce((keys, {
|
|
81
|
+
id,
|
|
82
|
+
mask
|
|
83
|
+
}) => {
|
|
84
|
+
keys[`${id}__input`] = mask;
|
|
85
|
+
return keys;
|
|
86
|
+
}, {});
|
|
87
|
+
}
|
|
88
|
+
function getUniqueMasks() {
|
|
89
|
+
const masks = new Set();
|
|
90
|
+
inputs.forEach(input => {
|
|
91
|
+
input.mask.forEach(pattern => masks.add(String(pattern)));
|
|
92
|
+
});
|
|
93
|
+
return masks;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function MultiInputMaskInput({
|
|
97
|
+
id,
|
|
98
|
+
label,
|
|
99
|
+
value,
|
|
100
|
+
mask,
|
|
101
|
+
placeholderCharacter,
|
|
102
|
+
delimiter,
|
|
103
|
+
disabled,
|
|
104
|
+
inputRef,
|
|
105
|
+
onKeyDown,
|
|
106
|
+
onChange
|
|
107
|
+
}) {
|
|
108
|
+
return React.createElement(React.Fragment, null, React.createElement(TextMask, {
|
|
109
|
+
id: `${id}__input`,
|
|
110
|
+
className: "dnb-input__input dnb-multi-input-mask__input" + (value ? " dnb-multi-input-mask__input--highlight" : ""),
|
|
111
|
+
disabled: disabled,
|
|
112
|
+
size: mask.length,
|
|
113
|
+
mask: mask,
|
|
114
|
+
value: value ?? '',
|
|
115
|
+
placeholderChar: placeholderCharacter,
|
|
116
|
+
guide: true,
|
|
117
|
+
showMask: true,
|
|
118
|
+
keepCharPositions: false,
|
|
119
|
+
"aria-labelledby": `${id}__label`,
|
|
120
|
+
ref: inputRef,
|
|
121
|
+
onKeyDown: onKeyDown,
|
|
122
|
+
onFocus: onFocus,
|
|
123
|
+
onChange: event => {
|
|
124
|
+
onChange(id, removePlaceholder(event.target.value, placeholderCharacter));
|
|
125
|
+
}
|
|
126
|
+
}), React.createElement("label", {
|
|
127
|
+
id: `${id}__label`,
|
|
128
|
+
htmlFor: `${id}__input`,
|
|
129
|
+
hidden: true
|
|
130
|
+
}, label), delimiter && React.createElement("span", {
|
|
131
|
+
"aria-hidden": true,
|
|
132
|
+
className: 'dnb-multi-input-mask__delimiter' + (value ? " dnb-multi-input-mask__delimiter--highlight" : "")
|
|
133
|
+
}, delimiter));
|
|
134
|
+
function removePlaceholder(value, placeholder) {
|
|
135
|
+
return value.replace(RegExp(placeholder, 'gm'), '');
|
|
136
|
+
}
|
|
137
|
+
function onFocus({
|
|
138
|
+
target
|
|
139
|
+
}) {
|
|
140
|
+
target.focus();
|
|
141
|
+
target.select();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export default MultiInputMask;
|
|
145
|
+
//# sourceMappingURL=MultiInputMask.js.map
|