@trackunit/react-form-components 1.26.3 → 1.27.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../../../libs/react/form-components/migrations/entry.ts"],"names":[],"mappings":"","sourcesContent":["// Migration entry point for @nx/js:tsc build target.\n// Migrations are registered in ../migrations.json and resolved by NX at runtime.\nexport {};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-utils.js","sourceRoot":"","sources":["../../../../../../libs/react/form-components/migrations/utils/jsx-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger, type Tree, visitNotIgnoredFiles } from \"@nx/devkit\";\nimport { tsquery } from \"@phenomnomnominal/tsquery\";\nimport * as ts from \"typescript\";\n\nconst TSX_EXTENSIONS = [\".tsx\", \".jsx\"] as const;\nconst TS_EXTENSIONS = [\".ts\", \".tsx\", \".jsx\"] as const;\n\nconst isTsxFile = (filePath: string): boolean => TSX_EXTENSIONS.some(ext => filePath.endsWith(ext));\nconst isTsFile = (filePath: string): boolean => TS_EXTENSIONS.some(ext => filePath.endsWith(ext));\n\nconst isUnderNodeModules = (filePath: string): boolean =>\n filePath.includes(\"/node_modules/\") || filePath.startsWith(\"node_modules/\");\n\nconst isUnderDist = (filePath: string): boolean =>\n filePath.includes(\"/dist/\") || filePath.startsWith(\"dist/\") || filePath.includes(\"/.nx/\");\n\n/**\n * Visits every `.tsx`/`.jsx` file under the workspace root and invokes the\n * callback with the file path and its current contents. Files that don't\n * include the marker substring are skipped, which makes large workspaces\n * cheap to scan.\n */\nexport const visitTsxFiles = (\n tree: Tree,\n marker: string,\n callback: (filePath: string, content: string) => string | null | undefined\n): number => {\n let touched = 0;\n visitNotIgnoredFiles(tree, \"/\", filePath => {\n if (!isTsxFile(filePath)) return;\n if (isUnderNodeModules(filePath) || isUnderDist(filePath)) return;\n const content = tree.read(filePath, \"utf-8\");\n if (content === null) return;\n if (!content.includes(marker)) return;\n const updated = callback(filePath, content);\n if (updated !== null && updated !== undefined && updated !== content) {\n tree.write(filePath, updated);\n touched += 1;\n }\n });\n return touched;\n};\n\n/**\n * Same as {@link visitTsxFiles} but also includes plain `.ts` files. Use this\n * when the codemod also rewrites non-JSX files such as helpers or hooks.\n */\nexport const visitTsFiles = (\n tree: Tree,\n marker: string,\n callback: (filePath: string, content: string) => string | null | undefined\n): number => {\n let touched = 0;\n visitNotIgnoredFiles(tree, \"/\", filePath => {\n if (!isTsFile(filePath)) return;\n if (isUnderNodeModules(filePath) || isUnderDist(filePath)) return;\n const content = tree.read(filePath, \"utf-8\");\n if (content === null) return;\n if (!content.includes(marker)) return;\n const updated = callback(filePath, content);\n if (updated !== null && updated !== undefined && updated !== content) {\n tree.write(filePath, updated);\n touched += 1;\n }\n });\n return touched;\n};\n\n/**\n * Mapping of imported component aliases to their original names for a given\n * package. For `import { IconButton as Btn } from \"@trackunit/react-components\"`\n * this returns `{ Btn: \"IconButton\" }`.\n *\n * Returns `null` when the file imports nothing from the package, which lets\n * callers short-circuit before parsing JSX.\n */\nexport const getImportedAliases = (sourceFile: ts.SourceFile, packageName: string): Record<string, string> | null => {\n const result: Record<string, string> = {};\n let found = false;\n\n for (const stmt of sourceFile.statements) {\n if (!ts.isImportDeclaration(stmt)) continue;\n const moduleSpecifier = stmt.moduleSpecifier;\n if (!ts.isStringLiteral(moduleSpecifier)) continue;\n if (moduleSpecifier.text !== packageName) continue;\n\n const namedBindings = stmt.importClause?.namedBindings;\n if (namedBindings === undefined || !ts.isNamedImports(namedBindings)) continue;\n\n for (const element of namedBindings.elements) {\n const localName = element.name.text;\n const importedName = element.propertyName?.text ?? localName;\n result[localName] = importedName;\n found = true;\n }\n }\n\n return found ? result : null;\n};\n\n/**\n * Returns the local alias used in this file for `originalName` when imported\n * from `packageName`, or `null` if the component is not imported.\n */\nexport const getLocalAliasFor = (\n sourceFile: ts.SourceFile,\n packageName: string,\n originalName: string\n): string | null => {\n const aliases = getImportedAliases(sourceFile, packageName);\n if (aliases === null) return null;\n for (const [local, original] of Object.entries(aliases)) {\n if (original === originalName) return local;\n }\n return null;\n};\n\nexport type JsxElementMatch = {\n /** The opening JSX element (the one carrying the attributes). */\n openingElement: ts.JsxOpeningElement | ts.JsxSelfClosingElement;\n /** The full element including children, or the self-closing element. */\n element: ts.JsxElement | ts.JsxSelfClosingElement;\n};\n\n/**\n * Finds every JSX element whose tag name resolves to one of `tagNames`\n * (typically the local aliases returned by {@link getImportedAliases}).\n *\n * The result intentionally includes both opening and full elements so callers\n * can manipulate attributes (via `openingElement`) or wrap/replace the whole\n * element (via `element`).\n */\nexport const findJsxElements = (\n sourceFile: ts.SourceFile,\n tagNames: ReadonlyArray<string>\n): ReadonlyArray<JsxElementMatch> => {\n const matches: Array<JsxElementMatch> = [];\n const tagSet = new Set(tagNames);\n\n const visit = (node: ts.Node): void => {\n if (ts.isJsxSelfClosingElement(node)) {\n if (ts.isIdentifier(node.tagName) && tagSet.has(node.tagName.text)) {\n matches.push({ openingElement: node, element: node });\n }\n } else if (ts.isJsxElement(node)) {\n const opening = node.openingElement;\n if (ts.isIdentifier(opening.tagName) && tagSet.has(opening.tagName.text)) {\n matches.push({ openingElement: opening, element: node });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return matches;\n};\n\n/**\n * Looks up a named JSX attribute on the opening element. Returns `null` when\n * the attribute is missing or part of a spread attribute (which we cannot\n * statically inspect).\n */\nexport const findJsxAttribute = (\n openingElement: ts.JsxOpeningElement | ts.JsxSelfClosingElement,\n attributeName: string\n): ts.JsxAttribute | null => {\n for (const attr of openingElement.attributes.properties) {\n if (!ts.isJsxAttribute(attr)) continue;\n if (!ts.isIdentifier(attr.name)) continue;\n if (attr.name.text === attributeName) return attr;\n }\n return null;\n};\n\n/**\n * `true` when the element forwards a spread expression such as `{...rest}`,\n * which means we can't be sure which attributes are actually set.\n */\nexport const hasSpreadAttribute = (openingElement: ts.JsxOpeningElement | ts.JsxSelfClosingElement): boolean => {\n return openingElement.attributes.properties.some(prop => ts.isJsxSpreadAttribute(prop));\n};\n\n/**\n * Parses the file as TSX so JSX is recognised. We do not need a full program\n * here; tsquery's `ast` helper produces a script-kind source file which loses\n * JSX context, so we go through `createSourceFile` directly.\n */\nexport const parseTsx = (content: string, fileName = \"file.tsx\"): ts.SourceFile =>\n ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n\n/** Re-exported for codemods that need direct AST queries. */\nexport { tsquery };\n\n/**\n * Helper for codemods to log a one-line summary at the end of a run. Migration\n * runners aggregate logs per migration, so this keeps output focused.\n */\nexport const logSummary = (migrationName: string, touched: number, manualReviewNeeded?: number): void => {\n if (touched === 0) {\n logger.info(` ${migrationName}: no files changed`);\n return;\n }\n const reviewSuffix =\n manualReviewNeeded !== undefined && manualReviewNeeded > 0\n ? ` (${manualReviewNeeded} location(s) need manual review)`\n : \"\";\n logger.info(` ${migrationName}: updated ${touched} file(s)${reviewSuffix}`);\n};\n\n/**\n * Inserts an attribute string immediately after the tag name (so the new\n * attribute appears first). Returns the resulting source content.\n *\n * The added attribute is rendered verbatim, so callers are responsible for\n * including the leading space (e.g. ` title=\"Close\"`).\n */\nexport const insertAttributeIntoOpeningTag = (\n content: string,\n openingElement: ts.JsxOpeningElement | ts.JsxSelfClosingElement,\n attributeText: string\n): string => {\n const tagName = openingElement.tagName;\n const insertPos = tagName.getEnd();\n return content.slice(0, insertPos) + ` ${attributeText}` + content.slice(insertPos);\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionbutton-add-title.js","sourceRoot":"","sources":["../../../../../../libs/react/form-components/migrations/v2-0-0/actionbutton-add-title.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Tree, logger } from \"@nx/devkit\";\nimport * as ts from \"typescript\";\nimport {\n findJsxAttribute,\n findJsxElements,\n getImportedAliases,\n hasSpreadAttribute,\n logSummary,\n parseTsx,\n visitTsxFiles,\n} from \"../utils/jsx-utils\";\n\nconst PACKAGE_NAME = \"@trackunit/react-form-components\";\nconst COMPONENT_NAME = \"ActionButton\";\n\nconst ACTION_TYPE_TO_TITLE: Record<string, string> = {\n COPY: \"Copy value\",\n EDIT: \"Edit value\",\n EMAIL: \"Send email\",\n PHONE_NUMBER: \"Call number\",\n WEB_ADDRESS: \"Open link\",\n};\n\nconst DEFAULT_TITLE = \"Action\";\n\nconst resolveTitleForType = (typeAttr: ts.JsxAttribute | null): string => {\n if (typeAttr === null) return DEFAULT_TITLE;\n const initializer = typeAttr.initializer;\n if (initializer === undefined) return DEFAULT_TITLE;\n if (ts.isStringLiteral(initializer)) {\n return ACTION_TYPE_TO_TITLE[initializer.text] ?? DEFAULT_TITLE;\n }\n return DEFAULT_TITLE;\n};\n\nconst transformActionButtonUsage = (filePath: string, content: string): string | null => {\n const sourceFile = parseTsx(content, filePath);\n\n const aliases = getImportedAliases(sourceFile, PACKAGE_NAME);\n if (aliases === null) return null;\n\n const localAlias = Object.entries(aliases).find(([, name]) => name === COMPONENT_NAME)?.[0];\n if (localAlias === undefined) return null;\n\n const matches = findJsxElements(sourceFile, [localAlias]);\n if (matches.length === 0) return null;\n\n type Edit = { offset: number; text: string };\n const edits: Array<Edit> = [];\n\n for (const { openingElement } of matches) {\n if (hasSpreadAttribute(openingElement)) continue;\n if (findJsxAttribute(openingElement, \"title\") !== null) continue;\n\n const typeAttr = findJsxAttribute(openingElement, \"type\");\n const title = resolveTitleForType(typeAttr);\n edits.push({\n offset: openingElement.tagName.getEnd(),\n text: ` title=\"${title}\"`,\n });\n }\n\n if (edits.length === 0) return null;\n\n edits.sort((a, b) => (a.offset === b.offset ? 0 : b.offset - a.offset));\n\n let updated = content;\n for (const { offset, text } of edits) {\n updated = updated.slice(0, offset) + text + updated.slice(offset);\n }\n return updated;\n};\n\n/**\n * Adds the now-required `title` prop to `<ActionButton>` usages that don't\n * already provide one. The default value is derived from the `type` prop when\n * possible (e.g. `COPY` → \"Copy value\"); consumers should replace the\n * placeholders with their own localized strings.\n */\nexport const actionButtonAddTitle = (tree: Tree): void => {\n const touched = visitTsxFiles(tree, \"ActionButton\", transformActionButtonUsage);\n logSummary(\"actionbutton-add-title\", touched);\n if (touched > 0) {\n logger.info(` Replace placeholder ActionButton titles with your own localized strings.`);\n }\n};\n\nexport default actionButtonAddTitle;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-form-components",
3
- "version": "1.26.3",
3
+ "version": "1.27.0",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "migrations": "./migrations.json",
@@ -16,7 +16,7 @@
16
16
  "zod": "^3.25.76",
17
17
  "tailwind-merge": "^2.0.0",
18
18
  "@trackunit/css-class-variance-utilities": "1.13.6",
19
- "@trackunit/react-components": "1.25.3",
19
+ "@trackunit/react-components": "1.26.0",
20
20
  "@trackunit/ui-icons": "1.13.6",
21
21
  "@trackunit/shared-utils": "1.15.6",
22
22
  "@trackunit/ui-design-tokens": "1.13.6",
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Ordner durchsuchen</clickable> oder Dateien per Drag & Drop einfügen …",
15
15
  "emailField.error.INVALID_EMAIL": "Bitte geben Sie eine gültige E-Mail-Adresse ein",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Email",
17
18
  "field.notEditable.tooltip": "Dieses Feld kann nicht bearbeitet werden",
18
19
  "field.required.asterisk.tooltip": "Dieses Feld ist ein Pflichtfeld",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "This field is required",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Die Ländervorwahl ist ungültig",
25
28
  "phoneField.error.INVALID_LENGTH": "Die Telefonnummer ist ungültig",
26
29
  "phoneField.error.INVALID_NUMBER": "Die Telefonnummer ist ungültig",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Die Telefonnummer ist zu lang",
31
34
  "phoneField.error.TOO_SHORT": "Die Telefonnummer ist zu kurz",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Telefonnummer",
33
37
  "schedule.label.active": "Aktiv",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Tag",
36
40
  "search.placeholder": "Suchen",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Entfernen",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
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",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Email",
17
18
  "field.notEditable.tooltip": "To pole nie jest edytowalne",
18
19
  "field.required.asterisk.tooltip": "To pole jest wymagane",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "To pole jest wymagane",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Kod kraju jest nieprawidłowy",
25
28
  "phoneField.error.INVALID_LENGTH": "Numer telefonu jest nieprawidłowy",
26
29
  "phoneField.error.INVALID_NUMBER": "Numer telefonu jest nieprawidłowy",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Numer telefonu jest zbyt długi",
31
34
  "phoneField.error.TOO_SHORT": "Numer telefonu jest zbyt krótki",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Numer telefonu",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Dzień",
36
40
  "search.placeholder": "Szukaj",
37
41
  "select.loadingMessage": "Ładowanie...",
42
+ "select.multiValue.remove": "Usuń",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Procure</clickable> ou arraste os ficheiros aqui...",
15
15
  "emailField.error.INVALID_EMAIL": "Introduza um endereço de e-mail válido",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "E-mail",
17
18
  "field.notEditable.tooltip": "Este campo não é editável",
18
19
  "field.required.asterisk.tooltip": "Este campo é obrigatório",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "Este campo é obrigatório",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "O código do país não é válido",
25
28
  "phoneField.error.INVALID_LENGTH": "O número de telefone não é válido",
26
29
  "phoneField.error.INVALID_NUMBER": "O número de telefone não é válido",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "O número de telefone é demasiado longo",
31
34
  "phoneField.error.TOO_SHORT": "O número de telefone é demasiado curto",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Número de telefone",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Dia",
36
40
  "search.placeholder": "Pesquisar",
37
41
  "select.loadingMessage": "A carregar...",
42
+ "select.multiValue.remove": "Remover",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Просмотрите</clickable> или перетащите файлы сюда...",
15
15
  "emailField.error.INVALID_EMAIL": "Введите действительный адрес эл. почты",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Email",
17
18
  "field.notEditable.tooltip": "Это поле не редактируемое",
18
19
  "field.required.asterisk.tooltip": "Это поле является обязательным",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "Это поле является обязательным",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Код страны недействителен",
25
28
  "phoneField.error.INVALID_LENGTH": "Номер телефона недействителен",
26
29
  "phoneField.error.INVALID_NUMBER": "Номер телефона недействителен",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Номер телефона слишком длинный",
31
34
  "phoneField.error.TOO_SHORT": "Номер телефона слишком короткий",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Номер телефона",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "День",
36
40
  "search.placeholder": "Поиск",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Удалить",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Răsfoiți</clickable> sau trageți fișiere aici...",
15
15
  "emailField.error.INVALID_EMAIL": "Vă rugăm să introduceți o adresă de e-mail valabilă",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "E-mail",
17
18
  "field.notEditable.tooltip": "Acest câmp nu este editabil",
18
19
  "field.required.asterisk.tooltip": "Acest câmp este obligatoriu",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "Acest câmp este obligatoriu",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Codul țării nu este valid",
25
28
  "phoneField.error.INVALID_LENGTH": "Numărul de telefon nu este valid",
26
29
  "phoneField.error.INVALID_NUMBER": "Numărul de telefon nu este valid",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Numărul de telefon este prea lung",
31
34
  "phoneField.error.TOO_SHORT": "Numărul de telefon este prea scurt",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Număr de telefon",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Ziua",
36
40
  "search.placeholder": "Căutare",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Eliminare",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Explore</clickable> o arrastre archivos aquí...",
15
15
  "emailField.error.INVALID_EMAIL": "Introduzca una dirección de correo electrónico válida",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Correo electrónico",
17
18
  "field.notEditable.tooltip": "Este campo no es editable",
18
19
  "field.required.asterisk.tooltip": "Este campo es obligatorio",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "This field is required",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "El código de país no es válido",
25
28
  "phoneField.error.INVALID_LENGTH": "El número de teléfono no es válido",
26
29
  "phoneField.error.INVALID_NUMBER": "El número de teléfono no es válido",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "El número de teléfono es demasiado largo",
31
34
  "phoneField.error.TOO_SHORT": "El número de teléfono es demasiado corto",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Número de teléfono",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Día",
36
40
  "search.placeholder": "Buscar",
37
41
  "select.loadingMessage": "Cargando...",
42
+ "select.multiValue.remove": "Eliminar",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
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",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Email",
17
18
  "field.notEditable.tooltip": "Detta fält kan inte redigeras",
18
19
  "field.required.asterisk.tooltip": "Detta fält är obligatoriskt",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "This field is required",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Landskoden är inte giltig",
25
28
  "phoneField.error.INVALID_LENGTH": "Telefonnumret är inte giltigt",
26
29
  "phoneField.error.INVALID_NUMBER": "Telefonnumret är inte giltigt",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Telefonnumret är för långt",
31
34
  "phoneField.error.TOO_SHORT": "Telefonnumret är för kort",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Telefonnummer",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Dag",
36
40
  "search.placeholder": "Sök",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Ta bort",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>ファイルを選択</clickable>またはここにファイルをドラッグ",
15
15
  "emailField.error.INVALID_EMAIL": "有効なメールアドレスを入力してください",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Email",
17
18
  "field.notEditable.tooltip": "このフィールドは編集できません",
18
19
  "field.required.asterisk.tooltip": "この欄は必須項目です",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "この欄は必須項目です",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "国コードが無効です",
25
28
  "phoneField.error.INVALID_LENGTH": "電話番号が無効です",
26
29
  "phoneField.error.INVALID_NUMBER": "電話番号が無効です",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "電話番号が長すぎます",
31
34
  "phoneField.error.TOO_SHORT": "電話番号が短すぎます",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "電話番号",
33
37
  "schedule.label.active": "アクティブ",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "曜日",
36
40
  "search.placeholder": "検索",
37
41
  "select.loadingMessage": "読み込み中...",
42
+ "select.multiValue.remove": "削除",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>เรียกดู</clickable> หรือลากไฟล์มาที่นี่...",
15
15
  "emailField.error.INVALID_EMAIL": "โปรดป้อนที่อยู่อีเมลที่ถูกต้อง",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "อีเมล",
17
18
  "field.notEditable.tooltip": "ไม่สามารถแก้ไขเขตข้อมูลนี้ได้",
18
19
  "field.required.asterisk.tooltip": "จำเป็นต้องกรอกข้อมูลในเขตข้อมูลนี้",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "This field is required",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "รหัสประเทศไม่ถูกต้อง",
25
28
  "phoneField.error.INVALID_LENGTH": "หมายเลขโทรศัพท์ไม่ถูกต้อง",
26
29
  "phoneField.error.INVALID_NUMBER": "หมายเลขโทรศัพท์ไม่ถูกต้อง",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "หมายเลขโทรศัพท์ยาวเกินไป",
31
34
  "phoneField.error.TOO_SHORT": "หมายเลขโทรศัพท์สั้นเกินไป",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "หมายเลขโทรศัพท์",
33
37
  "schedule.label.active": "ใช้งานอยู่",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "วัน",
36
40
  "search.placeholder": "ค้นหา",
37
41
  "select.loadingMessage": "กำลังโหลด...",
42
+ "select.multiValue.remove": "Remove",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Gennemse</clickable> eller træk filer her...",
15
15
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "E-mail",
17
18
  "field.notEditable.tooltip": "Dette felt kan ikke redigeres.",
18
19
  "field.required.asterisk.tooltip": "Dette felt er obligatorisk.",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "This field is required",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Landekoden er ikke gyldig.",
25
28
  "phoneField.error.INVALID_LENGTH": "Telefonnummeret er ikke gyldigt.",
26
29
  "phoneField.error.INVALID_NUMBER": "Telefonnummeret er ikke gyldigt",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Telefonnummeret er for langt.",
31
34
  "phoneField.error.TOO_SHORT": "Telefonnummeret er for kort.",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Telefonnummer",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Dag",
36
40
  "search.placeholder": "Søg",
37
41
  "select.loadingMessage": "Indlæser...",
42
+ "select.multiValue.remove": "Fjern",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
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",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Email",
17
18
  "field.notEditable.tooltip": "Toto pole nelze upravit",
18
19
  "field.required.asterisk.tooltip": "Toto pole je povinné",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "Toto pole je povinné",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Kód země není platný",
25
28
  "phoneField.error.INVALID_LENGTH": "Telefonní číslo není platné",
26
29
  "phoneField.error.INVALID_NUMBER": "Telefonní číslo není platné",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Telefonní číslo je příliš dlouhé",
31
34
  "phoneField.error.TOO_SHORT": "Telefonní číslo je příliš krátké",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Telefonní číslo",
33
37
  "schedule.label.active": "Aktivní",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Den",
36
40
  "search.placeholder": "Hledat",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Remove",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
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",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "E-mail",
17
18
  "field.notEditable.tooltip": "Dit veld is niet bewerkbaar",
18
19
  "field.required.asterisk.tooltip": "Dit is een verplicht veld",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "Dit is een verplicht veld",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "De landcode is niet geldig",
25
28
  "phoneField.error.INVALID_LENGTH": "Het telefoonnummer is niet geldig",
26
29
  "phoneField.error.INVALID_NUMBER": "Het telefoonnummer is niet geldig",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Het telefoonnummer is te lang",
31
34
  "phoneField.error.TOO_SHORT": "Het telefoonnummer is te kort",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Telefoonnummer",
33
37
  "schedule.label.active": "Actief",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Dag",
36
40
  "search.placeholder": "Zoeken",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Verwijderen",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Parcourir</clickable> ou faire glisser les fichiers ici...",
15
15
  "emailField.error.INVALID_EMAIL": "Veuillez saisir une adresse e-mail valide",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "E-mail",
17
18
  "field.notEditable.tooltip": "Ce champ n’est pas modifiable",
18
19
  "field.required.asterisk.tooltip": "Ce champ est obligatoire",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "Ce champ est obligatoire",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "L'indicatif du pays n'est pas valide",
25
28
  "phoneField.error.INVALID_LENGTH": "Le numéro de téléphone n’est pas valide",
26
29
  "phoneField.error.INVALID_NUMBER": "Le numéro de téléphone n’est pas valide",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Le numéro de téléphone est trop long",
31
34
  "phoneField.error.TOO_SHORT": "Le numéro de téléphone est trop court",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Phone Number",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Jour",
36
40
  "search.placeholder": "Rechercher",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Remove",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
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",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Sähköposti",
17
18
  "field.notEditable.tooltip": "Tätä kenttää ei voi muokata",
18
19
  "field.required.asterisk.tooltip": "Tämä kenttä on pakollinen",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "Tämä kenttä on pakollinen",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Maakoodi ei ole kelvollinen",
25
28
  "phoneField.error.INVALID_LENGTH": "Puhelinnumero ei ole kelvollinen",
26
29
  "phoneField.error.INVALID_NUMBER": "Puhelinnumero ei ole kelvollinen",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "Puhelinnumero on liian pitkä",
31
34
  "phoneField.error.TOO_SHORT": "Puhelinnumero on liian lyhyt",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Puhelinnumero",
33
37
  "schedule.label.active": "Active",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Päivä",
36
40
  "search.placeholder": "Haku",
37
41
  "select.loadingMessage": "Ladataan...",
42
+ "select.multiValue.remove": "Poista",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;
@@ -14,6 +14,7 @@ var translation = {
14
14
  "dropzone.label.default": "<clickable>Keresse meg</clickable> vagy húza ide a fájlokat…",
15
15
  "emailField.error.INVALID_EMAIL": "Please enter a valid email address",
16
16
  "emailField.error.REQUIRED": "The email address is required",
17
+ "emailField.sendEmailAction.label": "Email",
17
18
  "field.notEditable.tooltip": "Ez a mező nem szerkeszthető",
18
19
  "field.required.asterisk.tooltip": "A mező kitöltése kötelező",
19
20
  "numberField.error.GREATER_THAN": "Value must be greater than or equal to {{min}}",
@@ -21,6 +22,8 @@ var translation = {
21
22
  "numberField.error.LESS_THAN": "Value must be less than or equal to {{max}}",
22
23
  "numberField.error.NOT_IN_BETWEEN": "Must be between {{min}} and {{max}}",
23
24
  "numberField.error.REQUIRED": "A mező kitöltése kötelező",
25
+ "passwordField.tooltip.hide": "Hide password",
26
+ "passwordField.tooltip.show": "Show password",
24
27
  "phoneField.error.INVALID_COUNTRY": "Az országkód érvénytelen",
25
28
  "phoneField.error.INVALID_LENGTH": "A telefonszám érvénytelen",
26
29
  "phoneField.error.INVALID_NUMBER": "A telefonszám érvénytelen",
@@ -30,14 +33,17 @@ var translation = {
30
33
  "phoneField.error.TOO_LONG": "A telefonszám túl hosszú",
31
34
  "phoneField.error.TOO_SHORT": "A telefonszám túl rövid",
32
35
  "phoneField.error.undefined": "",
36
+ "phoneField.phoneNumber.label": "Telefonszám",
33
37
  "schedule.label.active": "Aktív",
34
38
  "schedule.label.allDay": "All Day",
35
39
  "schedule.label.day": "Nap",
36
40
  "search.placeholder": "Keresés",
37
41
  "select.loadingMessage": "Loading...",
42
+ "select.multiValue.remove": "Eltávolítás",
38
43
  "select.noOptionsMessage": "No options found",
39
44
  "urlField.error.INVALID_URL": "Please enter a valid URL",
40
- "urlField.error.REQUIRED": "The URL is required"
45
+ "urlField.error.REQUIRED": "The URL is required",
46
+ "urlField.url.label": "Web address"
41
47
  };
42
48
 
43
49
  exports.default = translation;