@trackunit/react-form-components 1.23.8 → 1.24.7

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/index.cjs.js CHANGED
@@ -1338,13 +1338,13 @@ Checkbox.displayName = "Checkbox";
1338
1338
  * @param {SelectMenuItemProps} props - The props for the SingleSelectMenuItem
1339
1339
  * @returns {ReactElement} SingleSelectMenuItem
1340
1340
  */
1341
- const SingleSelectMenuItem = ({ label, icon, onClick, selected = false, focused = false, disabled = false, "data-testid": dataTestId, optionLabelDescription, optionPrefix, fieldSize = "medium", }) => {
1341
+ const SingleSelectMenuItem = ({ label, icon, onClick, selected = false, focused = false, disabled = false, "data-testid": dataTestId, optionLabelDescription, optionPrefix, optionContent, fieldSize = "medium", }) => {
1342
1342
  return (jsxRuntime.jsx(reactComponents.MenuItem, { "data-testid": dataTestId, disabled: disabled, fieldSize: fieldSize, focused: focused, label: label, onClick: onClick, optionLabelDescription: optionLabelDescription, optionPrefix: react.isValidElement(optionPrefix)
1343
1343
  ? react.cloneElement(optionPrefix, {
1344
1344
  className: "mr-1 flex items-center",
1345
1345
  size: "medium",
1346
1346
  })
1347
- : optionPrefix, prefix: icon, selected: selected, suffix: selected ? jsxRuntime.jsx(reactComponents.Icon, { color: "primary", name: "Check", size: fieldSize === "large" ? "medium" : "small" }) : undefined }));
1347
+ : optionPrefix, prefix: icon, selected: selected, suffix: selected ? jsxRuntime.jsx(reactComponents.Icon, { color: "primary", name: "Check", size: fieldSize === "large" ? "medium" : "small" }) : undefined, children: optionContent }));
1348
1348
  };
1349
1349
  /**
1350
1350
  * A multi select menu item is a basic wrapper around Menu item designed to be used as a multi value render in Select list
@@ -1352,7 +1352,7 @@ const SingleSelectMenuItem = ({ label, icon, onClick, selected = false, focused
1352
1352
  * @param {SelectMenuItemProps} props - The props for the MultiSelectMenuItem
1353
1353
  * @returns {ReactElement} multi select menu item
1354
1354
  */
1355
- const MultiSelectMenuItem = ({ label, onClick, selected, focused, "data-testid": dataTestId, disabled, optionLabelDescription, optionPrefix, fieldSize, }) => {
1355
+ const MultiSelectMenuItem = ({ label, onClick, selected, focused, "data-testid": dataTestId, disabled, optionLabelDescription, optionPrefix, optionContent, fieldSize, }) => {
1356
1356
  return (jsxRuntime.jsx(reactComponents.MenuItem, { "data-testid": dataTestId, disabled: disabled, fieldSize: fieldSize, focused: focused, label: label, onClick: e => {
1357
1357
  e.stopPropagation();
1358
1358
  onClick?.(e);
@@ -1361,7 +1361,7 @@ const MultiSelectMenuItem = ({ label, onClick, selected, focused, "data-testid":
1361
1361
  className: "mr-1 flex items-center",
1362
1362
  size: "medium",
1363
1363
  })
1364
- : optionPrefix, prefix: jsxRuntime.jsx(Checkbox, { checked: selected, className: "gap-x-0", disabled: disabled, onChange: () => null, readOnly: false }), selected: selected }));
1364
+ : optionPrefix, prefix: jsxRuntime.jsx(Checkbox, { checked: selected, className: "gap-x-0", disabled: disabled, onChange: () => null, readOnly: false }), selected: selected, children: optionContent }));
1365
1365
  };
1366
1366
 
1367
1367
  /**
@@ -1767,10 +1767,16 @@ const getVisibleCountFromGeometries = ({ geometries, availableWidth, containerX,
1767
1767
  */
1768
1768
  const useCustomComponents = ({ disabled, readOnly, "data-testid": dataTestId, prefix, hasError, fieldSize = "medium", getOptionLabelDescription, getOptionPrefix, className, isMulti, //prefer using the component prop (ala. selectValueContainer.isMulti) inside of customComponents instead of this one.
1769
1769
  autoComplete, // see https://github.com/JedWatson/react-select/issues/758
1770
- }) => {
1770
+ formatOptionLabel, }) => {
1771
1771
  const [t] = useTranslation();
1772
1772
  const { setValueContainerRef, setCounterRef, setFakeCounterRef, setGeometryRef, setMenuRef, getVisibleCount, getTotalCount, getCounterWidth, getIsComplete, } = useMultiValueOverflow({ skip: !isMulti });
1773
1773
  const interactable = react.useMemo(() => !Boolean(disabled) && !Boolean(readOnly), [disabled, readOnly]);
1774
+ // Stabilize `formatOptionLabel` so callers can pass it inline without recreating
1775
+ // `customComponents` (which would cause react-select to remount its input and
1776
+ // drop focus/value after every keystroke). The Option override below reads
1777
+ // from this ref, so the latest function is always used.
1778
+ const formatOptionLabelRef = react.useRef(formatOptionLabel);
1779
+ formatOptionLabelRef.current = formatOptionLabel;
1774
1780
  // perhaps it should not be wrap in memo (causing some issues with opening and closing on mobiles)
1775
1781
  // Component functions stay stable (reading from refs), so react-select won't lose focus
1776
1782
  const customComponents = react.useMemo(() => {
@@ -1897,10 +1903,16 @@ autoComplete, // see https://github.com/JedWatson/react-select/issues/758
1897
1903
  selected: selectOption.isSelected,
1898
1904
  onClick: selectOption.innerProps.onClick,
1899
1905
  };
1906
+ const optionDisabled = Boolean(disabled) || selectOption.isDisabled;
1907
+ const optionContent = formatOptionLabelRef.current?.(selectOption.data, {
1908
+ context: "menu",
1909
+ inputValue: selectOption.selectProps.inputValue,
1910
+ selectValue: selectOption.getValue(),
1911
+ }) ?? undefined;
1900
1912
  return (jsxRuntime.jsx(ReactSelect.components.Option, { ...selectOption, innerProps: {
1901
1913
  ...selectOption.innerProps,
1902
1914
  role: "option",
1903
- }, children: selectOption.isMulti ? (jsxRuntime.jsx(MultiSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: Boolean(disabled), fieldSize: fieldSize, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) : (jsxRuntime.jsx(SingleSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: Boolean(disabled) || selectOption.isDisabled, fieldSize: fieldSize, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) }));
1915
+ }, children: selectOption.isMulti ? (jsxRuntime.jsx(MultiSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: Boolean(disabled), fieldSize: fieldSize, optionContent: optionContent, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) : (jsxRuntime.jsx(SingleSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: optionDisabled, fieldSize: fieldSize, optionContent: optionContent, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) }));
1904
1916
  },
1905
1917
  };
1906
1918
  }, [
@@ -1995,6 +2007,7 @@ const useSelect = (props) => {
1995
2007
  isMulti: isMulti ?? false,
1996
2008
  className: stableRestProps.className,
1997
2009
  autoComplete: stableRestProps.autoComplete,
2010
+ formatOptionLabel,
1998
2011
  });
1999
2012
  const interactable = react.useMemo(() => !Boolean(disabled) && !Boolean(readOnly), [disabled, readOnly]);
2000
2013
  // Determine the portal target for the menu
package/index.esm.js CHANGED
@@ -1337,13 +1337,13 @@ Checkbox.displayName = "Checkbox";
1337
1337
  * @param {SelectMenuItemProps} props - The props for the SingleSelectMenuItem
1338
1338
  * @returns {ReactElement} SingleSelectMenuItem
1339
1339
  */
1340
- const SingleSelectMenuItem = ({ label, icon, onClick, selected = false, focused = false, disabled = false, "data-testid": dataTestId, optionLabelDescription, optionPrefix, fieldSize = "medium", }) => {
1340
+ const SingleSelectMenuItem = ({ label, icon, onClick, selected = false, focused = false, disabled = false, "data-testid": dataTestId, optionLabelDescription, optionPrefix, optionContent, fieldSize = "medium", }) => {
1341
1341
  return (jsx(MenuItem, { "data-testid": dataTestId, disabled: disabled, fieldSize: fieldSize, focused: focused, label: label, onClick: onClick, optionLabelDescription: optionLabelDescription, optionPrefix: isValidElement(optionPrefix)
1342
1342
  ? cloneElement(optionPrefix, {
1343
1343
  className: "mr-1 flex items-center",
1344
1344
  size: "medium",
1345
1345
  })
1346
- : optionPrefix, prefix: icon, selected: selected, suffix: selected ? jsx(Icon, { color: "primary", name: "Check", size: fieldSize === "large" ? "medium" : "small" }) : undefined }));
1346
+ : optionPrefix, prefix: icon, selected: selected, suffix: selected ? jsx(Icon, { color: "primary", name: "Check", size: fieldSize === "large" ? "medium" : "small" }) : undefined, children: optionContent }));
1347
1347
  };
1348
1348
  /**
1349
1349
  * A multi select menu item is a basic wrapper around Menu item designed to be used as a multi value render in Select list
@@ -1351,7 +1351,7 @@ const SingleSelectMenuItem = ({ label, icon, onClick, selected = false, focused
1351
1351
  * @param {SelectMenuItemProps} props - The props for the MultiSelectMenuItem
1352
1352
  * @returns {ReactElement} multi select menu item
1353
1353
  */
1354
- const MultiSelectMenuItem = ({ label, onClick, selected, focused, "data-testid": dataTestId, disabled, optionLabelDescription, optionPrefix, fieldSize, }) => {
1354
+ const MultiSelectMenuItem = ({ label, onClick, selected, focused, "data-testid": dataTestId, disabled, optionLabelDescription, optionPrefix, optionContent, fieldSize, }) => {
1355
1355
  return (jsx(MenuItem, { "data-testid": dataTestId, disabled: disabled, fieldSize: fieldSize, focused: focused, label: label, onClick: e => {
1356
1356
  e.stopPropagation();
1357
1357
  onClick?.(e);
@@ -1360,7 +1360,7 @@ const MultiSelectMenuItem = ({ label, onClick, selected, focused, "data-testid":
1360
1360
  className: "mr-1 flex items-center",
1361
1361
  size: "medium",
1362
1362
  })
1363
- : optionPrefix, prefix: jsx(Checkbox, { checked: selected, className: "gap-x-0", disabled: disabled, onChange: () => null, readOnly: false }), selected: selected }));
1363
+ : optionPrefix, prefix: jsx(Checkbox, { checked: selected, className: "gap-x-0", disabled: disabled, onChange: () => null, readOnly: false }), selected: selected, children: optionContent }));
1364
1364
  };
1365
1365
 
1366
1366
  /**
@@ -1766,10 +1766,16 @@ const getVisibleCountFromGeometries = ({ geometries, availableWidth, containerX,
1766
1766
  */
1767
1767
  const useCustomComponents = ({ disabled, readOnly, "data-testid": dataTestId, prefix, hasError, fieldSize = "medium", getOptionLabelDescription, getOptionPrefix, className, isMulti, //prefer using the component prop (ala. selectValueContainer.isMulti) inside of customComponents instead of this one.
1768
1768
  autoComplete, // see https://github.com/JedWatson/react-select/issues/758
1769
- }) => {
1769
+ formatOptionLabel, }) => {
1770
1770
  const [t] = useTranslation();
1771
1771
  const { setValueContainerRef, setCounterRef, setFakeCounterRef, setGeometryRef, setMenuRef, getVisibleCount, getTotalCount, getCounterWidth, getIsComplete, } = useMultiValueOverflow({ skip: !isMulti });
1772
1772
  const interactable = useMemo(() => !Boolean(disabled) && !Boolean(readOnly), [disabled, readOnly]);
1773
+ // Stabilize `formatOptionLabel` so callers can pass it inline without recreating
1774
+ // `customComponents` (which would cause react-select to remount its input and
1775
+ // drop focus/value after every keystroke). The Option override below reads
1776
+ // from this ref, so the latest function is always used.
1777
+ const formatOptionLabelRef = useRef(formatOptionLabel);
1778
+ formatOptionLabelRef.current = formatOptionLabel;
1773
1779
  // perhaps it should not be wrap in memo (causing some issues with opening and closing on mobiles)
1774
1780
  // Component functions stay stable (reading from refs), so react-select won't lose focus
1775
1781
  const customComponents = useMemo(() => {
@@ -1896,10 +1902,16 @@ autoComplete, // see https://github.com/JedWatson/react-select/issues/758
1896
1902
  selected: selectOption.isSelected,
1897
1903
  onClick: selectOption.innerProps.onClick,
1898
1904
  };
1905
+ const optionDisabled = Boolean(disabled) || selectOption.isDisabled;
1906
+ const optionContent = formatOptionLabelRef.current?.(selectOption.data, {
1907
+ context: "menu",
1908
+ inputValue: selectOption.selectProps.inputValue,
1909
+ selectValue: selectOption.getValue(),
1910
+ }) ?? undefined;
1899
1911
  return (jsx(components.Option, { ...selectOption, innerProps: {
1900
1912
  ...selectOption.innerProps,
1901
1913
  role: "option",
1902
- }, children: selectOption.isMulti ? (jsx(MultiSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: Boolean(disabled), fieldSize: fieldSize, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) : (jsx(SingleSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: Boolean(disabled) || selectOption.isDisabled, fieldSize: fieldSize, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) }));
1914
+ }, children: selectOption.isMulti ? (jsx(MultiSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: Boolean(disabled), fieldSize: fieldSize, optionContent: optionContent, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) : (jsx(SingleSelectMenuItem, { ...componentProps, "data-testid": typeof selectOption.label === "string" ? selectOption.label : undefined, disabled: optionDisabled, fieldSize: fieldSize, optionContent: optionContent, optionLabelDescription: getOptionLabelDescription?.(selectOption.data), optionPrefix: getOptionPrefix?.(selectOption.data) })) }));
1903
1915
  },
1904
1916
  };
1905
1917
  }, [
@@ -1994,6 +2006,7 @@ const useSelect = (props) => {
1994
2006
  isMulti: isMulti ?? false,
1995
2007
  className: stableRestProps.className,
1996
2008
  autoComplete: stableRestProps.autoComplete,
2009
+ formatOptionLabel,
1997
2010
  });
1998
2011
  const interactable = useMemo(() => !Boolean(disabled) && !Boolean(readOnly), [disabled, readOnly]);
1999
2012
  // Determine the portal target for the menu
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-form-components",
3
- "version": "1.23.8",
3
+ "version": "1.24.7",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -9,17 +9,17 @@
9
9
  "dependencies": {
10
10
  "react-calendar": "^6.0.0",
11
11
  "react-select": "^5.10.2",
12
- "@trackunit/date-and-time-utils": "1.11.121",
12
+ "@trackunit/date-and-time-utils": "1.12.2",
13
13
  "usehooks-ts": "^3.1.0",
14
14
  "libphonenumber-js": "^1.12.22",
15
15
  "zod": "^3.25.76",
16
16
  "tailwind-merge": "^2.0.0",
17
- "@trackunit/css-class-variance-utilities": "1.11.118",
18
- "@trackunit/react-components": "1.22.29",
19
- "@trackunit/ui-icons": "1.11.114",
20
- "@trackunit/shared-utils": "1.13.118",
21
- "@trackunit/ui-design-tokens": "1.11.115",
22
- "@trackunit/i18n-library-translation": "1.19.6",
17
+ "@trackunit/css-class-variance-utilities": "1.12.2",
18
+ "@trackunit/react-components": "1.23.3",
19
+ "@trackunit/ui-icons": "1.12.3",
20
+ "@trackunit/shared-utils": "1.14.2",
21
+ "@trackunit/ui-design-tokens": "1.12.2",
22
+ "@trackunit/i18n-library-translation": "1.20.4",
23
23
  "string-ts": "^2.0.0",
24
24
  "es-toolkit": "^1.39.10"
25
25
  },
@@ -34,6 +34,11 @@ interface SelectMenuItemProps extends CommonProps {
34
34
  * This is typically used to render an icon.
35
35
  */
36
36
  optionPrefix?: ReactNode;
37
+ /**
38
+ * Rich content to render in place of the default label/description layout.
39
+ * This keeps the surrounding menu item chrome while allowing custom content.
40
+ */
41
+ optionContent?: ReactNode;
37
42
  /**
38
43
  * The size of the selected item
39
44
  */
@@ -52,12 +57,12 @@ export interface SingleSelectMenuItemProps extends SelectMenuItemProps {
52
57
  * @param {SelectMenuItemProps} props - The props for the SingleSelectMenuItem
53
58
  * @returns {ReactElement} SingleSelectMenuItem
54
59
  */
55
- export declare const SingleSelectMenuItem: ({ label, icon, onClick, selected, focused, disabled, "data-testid": dataTestId, optionLabelDescription, optionPrefix, fieldSize, }: SingleSelectMenuItemProps) => ReactElement;
60
+ export declare const SingleSelectMenuItem: ({ label, icon, onClick, selected, focused, disabled, "data-testid": dataTestId, optionLabelDescription, optionPrefix, optionContent, fieldSize, }: SingleSelectMenuItemProps) => ReactElement;
56
61
  /**
57
62
  * A multi select menu item is a basic wrapper around Menu item designed to be used as a multi value render in Select list
58
63
  *
59
64
  * @param {SelectMenuItemProps} props - The props for the MultiSelectMenuItem
60
65
  * @returns {ReactElement} multi select menu item
61
66
  */
62
- export declare const MultiSelectMenuItem: ({ label, onClick, selected, focused, "data-testid": dataTestId, disabled, optionLabelDescription, optionPrefix, fieldSize, }: SelectMenuItemProps) => ReactElement;
67
+ export declare const MultiSelectMenuItem: ({ label, onClick, selected, focused, "data-testid": dataTestId, disabled, optionLabelDescription, optionPrefix, optionContent, fieldSize, }: SelectMenuItemProps) => ReactElement;
63
68
  export {};
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { CommonProps } from "@trackunit/react-components";
6
6
  import { ReactNode } from "react";
7
- import { type SelectComponentsConfig, GroupBase } from "react-select";
7
+ import { type FormatOptionLabelMeta, type SelectComponentsConfig, GroupBase } from "react-select";
8
8
  import { FormComponentSizes } from "../../types";
9
9
  import { LockedForReasons } from "../BaseInput/InputLockReasonTooltip";
10
10
  interface CustomComponentsProps<TOption> extends CommonProps {
@@ -19,6 +19,7 @@ interface CustomComponentsProps<TOption> extends CommonProps {
19
19
  getOptionPrefix?: (option: TOption) => ReactNode;
20
20
  isMulti: boolean;
21
21
  autoComplete?: "off" | "on" | "no";
22
+ formatOptionLabel?: (data: TOption, meta: FormatOptionLabelMeta<TOption>) => ReactNode;
22
23
  }
23
24
  /**
24
25
  * A hook to retrieve components override object.
@@ -30,5 +31,5 @@ interface CustomComponentsProps<TOption> extends CommonProps {
30
31
  * @param {CustomComponentsProps<TOption>} props - The custom components props
31
32
  * @returns {SelectComponentsConfig<TOption, TIsMulti, TGroup>} components object to override react-select default components
32
33
  */
33
- export declare const useCustomComponents: <TOption, TIsMulti extends boolean = false, TGroup extends GroupBase<TOption> = GroupBase<TOption>>({ disabled, readOnly, "data-testid": dataTestId, prefix, hasError, fieldSize, getOptionLabelDescription, getOptionPrefix, className, isMulti, autoComplete, }: CustomComponentsProps<TOption>) => SelectComponentsConfig<TOption, TIsMulti, TGroup>;
34
+ export declare const useCustomComponents: <TOption, TIsMulti extends boolean = false, TGroup extends GroupBase<TOption> = GroupBase<TOption>>({ disabled, readOnly, "data-testid": dataTestId, prefix, hasError, fieldSize, getOptionLabelDescription, getOptionPrefix, className, isMulti, autoComplete, formatOptionLabel, }: CustomComponentsProps<TOption>) => SelectComponentsConfig<TOption, TIsMulti, TGroup>;
34
35
  export {};
@@ -9,7 +9,7 @@ var translation = {
9
9
  "dateField.actions.apply": "Zastosuj",
10
10
  "dateField.actions.cancel": "Anuluj",
11
11
  "dateField.actions.clear": "Wyczyść",
12
- "dateField.placeholder": "yyyy-mm-dd",
12
+ "dateField.placeholder": "rrrr-mm-dd",
13
13
  "dropzone.input.title": "Przeciągnij i upuść dane pliku",
14
14
  "dropzone.label.default": "<clickable>Przeglądaj</clickable> lub przeciągnij pliki tutaj...",
15
15
  "emailField.error.INVALID_EMAIL": "Wprowadź poprawny adres e-mail",
@@ -9,7 +9,7 @@ var translation = {
9
9
  "dateField.actions.apply": "Tillämpa",
10
10
  "dateField.actions.cancel": "Avbryt",
11
11
  "dateField.actions.clear": "Rensa",
12
- "dateField.placeholder": "yyyy-mm-dd",
12
+ "dateField.placeholder": "åååå-mm-dd",
13
13
  "dropzone.input.title": "Dra och släpp fil",
14
14
  "dropzone.label.default": "<clickable>Bläddra</clickable> bland filerna eller dra dem hit...",
15
15
  "emailField.error.INVALID_EMAIL": "Ange en giltig e-postadress",
@@ -9,7 +9,7 @@ var translation = {
9
9
  "dateField.actions.apply": "นำไปใช้",
10
10
  "dateField.actions.cancel": "ยกเลิก",
11
11
  "dateField.actions.clear": "ล้าง",
12
- "dateField.placeholder": "yyyy-mm-dd",
12
+ "dateField.placeholder": "วว-ดด-ปปปป",
13
13
  "dropzone.input.title": "ลากและวางอินพุตไฟล์",
14
14
  "dropzone.label.default": "<clickable>เรียกดู</clickable> หรือลากไฟล์มาที่นี่...",
15
15
  "emailField.error.INVALID_EMAIL": "โปรดป้อนที่อยู่อีเมลที่ถูกต้อง",
@@ -9,7 +9,7 @@ var translation = {
9
9
  "dateField.actions.apply": "Použít",
10
10
  "dateField.actions.cancel": "Zrušit",
11
11
  "dateField.actions.clear": "Vymazat",
12
- "dateField.placeholder": "yyyy-mm-dd",
12
+ "dateField.placeholder": "rrrr-mm-dd",
13
13
  "dropzone.input.title": "Přetažení vstupu do souboru",
14
14
  "dropzone.label.default": "<clickable>Procházejte</clickable> nebo přetáhněte soubory zde...",
15
15
  "emailField.error.INVALID_EMAIL": "Zadejte platnou e-mailovou adresu",
@@ -9,7 +9,7 @@ var translation = {
9
9
  "dateField.actions.apply": "Toepassen",
10
10
  "dateField.actions.cancel": "Annuleren",
11
11
  "dateField.actions.clear": "Wissen",
12
- "dateField.placeholder": "yyyy-mm-dd",
12
+ "dateField.placeholder": "dd-mm-yyyy",
13
13
  "dropzone.input.title": "Drag-en-drop bestandsinvoer",
14
14
  "dropzone.label.default": "<clickable>Bladeren</clickable> of sleep bestanden hier naartoe...",
15
15
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",
@@ -9,7 +9,7 @@ var translation = {
9
9
  "dateField.actions.apply": "Käytä",
10
10
  "dateField.actions.cancel": "Peruuta",
11
11
  "dateField.actions.clear": "Tyhjennä",
12
- "dateField.placeholder": "yyyy-mm-dd",
12
+ "dateField.placeholder": "vvvv-kk-pp",
13
13
  "dropzone.input.title": "Vedä ja pudota tiedostosyöte",
14
14
  "dropzone.label.default": "<clickable>Selaa</clickable> tai vedä tiedostoja täältä...",
15
15
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",
@@ -9,7 +9,7 @@ var translation = {
9
9
  "dateField.actions.apply": "Bruk",
10
10
  "dateField.actions.cancel": "Avbryt",
11
11
  "dateField.actions.clear": "Tøm",
12
- "dateField.placeholder": "yyyy-mm-dd",
12
+ "dateField.placeholder": "åååå-mm-dd",
13
13
  "dropzone.input.title": "Dra og slipp for å legge inn fil",
14
14
  "dropzone.label.default": "<clickable>Bla gjennom</clickable> eller dra filer hit...",
15
15
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",
@@ -7,7 +7,7 @@ var translation = {
7
7
  "dateField.actions.apply": "Zastosuj",
8
8
  "dateField.actions.cancel": "Anuluj",
9
9
  "dateField.actions.clear": "Wyczyść",
10
- "dateField.placeholder": "yyyy-mm-dd",
10
+ "dateField.placeholder": "rrrr-mm-dd",
11
11
  "dropzone.input.title": "Przeciągnij i upuść dane pliku",
12
12
  "dropzone.label.default": "<clickable>Przeglądaj</clickable> lub przeciągnij pliki tutaj...",
13
13
  "emailField.error.INVALID_EMAIL": "Wprowadź poprawny adres e-mail",
@@ -7,7 +7,7 @@ var translation = {
7
7
  "dateField.actions.apply": "Tillämpa",
8
8
  "dateField.actions.cancel": "Avbryt",
9
9
  "dateField.actions.clear": "Rensa",
10
- "dateField.placeholder": "yyyy-mm-dd",
10
+ "dateField.placeholder": "åååå-mm-dd",
11
11
  "dropzone.input.title": "Dra och släpp fil",
12
12
  "dropzone.label.default": "<clickable>Bläddra</clickable> bland filerna eller dra dem hit...",
13
13
  "emailField.error.INVALID_EMAIL": "Ange en giltig e-postadress",
@@ -7,7 +7,7 @@ var translation = {
7
7
  "dateField.actions.apply": "นำไปใช้",
8
8
  "dateField.actions.cancel": "ยกเลิก",
9
9
  "dateField.actions.clear": "ล้าง",
10
- "dateField.placeholder": "yyyy-mm-dd",
10
+ "dateField.placeholder": "วว-ดด-ปปปป",
11
11
  "dropzone.input.title": "ลากและวางอินพุตไฟล์",
12
12
  "dropzone.label.default": "<clickable>เรียกดู</clickable> หรือลากไฟล์มาที่นี่...",
13
13
  "emailField.error.INVALID_EMAIL": "โปรดป้อนที่อยู่อีเมลที่ถูกต้อง",
@@ -7,7 +7,7 @@ var translation = {
7
7
  "dateField.actions.apply": "Použít",
8
8
  "dateField.actions.cancel": "Zrušit",
9
9
  "dateField.actions.clear": "Vymazat",
10
- "dateField.placeholder": "yyyy-mm-dd",
10
+ "dateField.placeholder": "rrrr-mm-dd",
11
11
  "dropzone.input.title": "Přetažení vstupu do souboru",
12
12
  "dropzone.label.default": "<clickable>Procházejte</clickable> nebo přetáhněte soubory zde...",
13
13
  "emailField.error.INVALID_EMAIL": "Zadejte platnou e-mailovou adresu",
@@ -7,7 +7,7 @@ var translation = {
7
7
  "dateField.actions.apply": "Toepassen",
8
8
  "dateField.actions.cancel": "Annuleren",
9
9
  "dateField.actions.clear": "Wissen",
10
- "dateField.placeholder": "yyyy-mm-dd",
10
+ "dateField.placeholder": "dd-mm-yyyy",
11
11
  "dropzone.input.title": "Drag-en-drop bestandsinvoer",
12
12
  "dropzone.label.default": "<clickable>Bladeren</clickable> of sleep bestanden hier naartoe...",
13
13
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",
@@ -7,7 +7,7 @@ var translation = {
7
7
  "dateField.actions.apply": "Käytä",
8
8
  "dateField.actions.cancel": "Peruuta",
9
9
  "dateField.actions.clear": "Tyhjennä",
10
- "dateField.placeholder": "yyyy-mm-dd",
10
+ "dateField.placeholder": "vvvv-kk-pp",
11
11
  "dropzone.input.title": "Vedä ja pudota tiedostosyöte",
12
12
  "dropzone.label.default": "<clickable>Selaa</clickable> tai vedä tiedostoja täältä...",
13
13
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",
@@ -7,7 +7,7 @@ var translation = {
7
7
  "dateField.actions.apply": "Bruk",
8
8
  "dateField.actions.cancel": "Avbryt",
9
9
  "dateField.actions.clear": "Tøm",
10
- "dateField.placeholder": "yyyy-mm-dd",
10
+ "dateField.placeholder": "åååå-mm-dd",
11
11
  "dropzone.input.title": "Dra og slipp for å legge inn fil",
12
12
  "dropzone.label.default": "<clickable>Bla gjennom</clickable> eller dra filer hit...",
13
13
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",