@daracl/form 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/193.daracl.form.min.js +7 -0
  2. package/dist/193.daracl.form.min.js.LICENSE.txt +5 -0
  3. package/dist/193.daracl.form.min.js.map +1 -0
  4. package/dist/dara.datetimepicker.js +304 -0
  5. package/dist/dara.datetimepicker.js.LICENSE.txt +5 -0
  6. package/dist/dara.datetimepicker.js.map +1 -0
  7. package/dist/daracl.form.js +67 -33
  8. package/dist/daracl.form.js.map +1 -1
  9. package/dist/daracl.form.min.css +2 -2
  10. package/dist/daracl.form.min.css.map +1 -1
  11. package/dist/daracl.form.min.js +2 -2
  12. package/dist/daracl.form.min.js.LICENSE.txt +1 -1
  13. package/dist/daracl.form.min.js.map +1 -1
  14. package/dist/index.cjs +20 -8
  15. package/dist/index.cjs.map +2 -2
  16. package/dist/index.css.map +2 -2
  17. package/dist/index.js +20 -8
  18. package/dist/index.js.map +2 -2
  19. package/dist/util/utils.d.ts +1 -1
  20. package/dist/vendors-node_modules_daracl_datetimepicker_dist_index_js.daracl.form.js +1477 -0
  21. package/dist/vendors-node_modules_daracl_datetimepicker_dist_index_js.daracl.form.js.map +1 -0
  22. package/package.json +11 -8
  23. package/src/DaraForm.ts +431 -0
  24. package/src/FieldInfoMap.ts +356 -0
  25. package/src/FormTemplate.ts +207 -0
  26. package/src/constants.ts +100 -0
  27. package/src/event/renderEvents.ts +41 -0
  28. package/src/index copy.html +591 -0
  29. package/src/index-grid.html +655 -0
  30. package/src/index-tab.html +639 -0
  31. package/src/index.html +483 -0
  32. package/src/renderer/ButtonRender.ts +51 -0
  33. package/src/renderer/CheckboxRender.ts +214 -0
  34. package/src/renderer/CustomRender.ts +100 -0
  35. package/src/renderer/DateRender.ts +103 -0
  36. package/src/renderer/DropdownRender.ts +149 -0
  37. package/src/renderer/FileRender.ts +239 -0
  38. package/src/renderer/GridRender.ts +289 -0
  39. package/src/renderer/GroupRender.ts +47 -0
  40. package/src/renderer/HiddenRender.ts +36 -0
  41. package/src/renderer/NumberRender.ts +68 -0
  42. package/src/renderer/PasswordRender.ts +69 -0
  43. package/src/renderer/RadioRender.ts +191 -0
  44. package/src/renderer/RangeRender.ts +79 -0
  45. package/src/renderer/Render.ts +194 -0
  46. package/src/renderer/TabRender.ts +229 -0
  47. package/src/renderer/TextAreaRender.ts +72 -0
  48. package/src/renderer/TextRender.ts +68 -0
  49. package/src/rule/fileValidator.ts +26 -0
  50. package/src/rule/numberValidator.ts +96 -0
  51. package/src/rule/regexpValidator.ts +45 -0
  52. package/src/rule/stringValidator.ts +64 -0
  53. package/src/rule/validator.ts +49 -0
  54. package/src/types/DataMap.d.ts +17 -0
  55. package/src/types/FormField.d.ts +129 -0
  56. package/src/types/FormOptions.d.ts +91 -0
  57. package/src/types/Message.d.ts +40 -0
  58. package/src/types/ValidResult.d.ts +9 -0
  59. package/src/util/Lanauage.ts +127 -0
  60. package/src/util/renderFactory.ts +26 -0
  61. package/src/util/styleUtils.ts +85 -0
  62. package/src/util/utils.ts +283 -0
  63. package/src/util/validUtils.ts +53 -0
  64. package/style/daracl.form.scss +2 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/util/utils.ts", "../src/renderer/Render.ts", "../src/rule/regexpValidator.ts", "../src/rule/validator.ts", "../src/rule/numberValidator.ts", "../src/util/validUtils.ts", "../src/event/renderEvents.ts", "../src/renderer/NumberRender.ts", "../src/rule/stringValidator.ts", "../src/renderer/TextAreaRender.ts", "../src/renderer/DropdownRender.ts", "../src/renderer/TextRender.ts", "../src/renderer/CheckboxRender.ts", "../src/renderer/RadioRender.ts", "../src/renderer/PasswordRender.ts", "../src/rule/fileValidator.ts", "../src/renderer/FileRender.ts", "../src/renderer/CustomRender.ts", "../src/renderer/GroupRender.ts", "../src/renderer/HiddenRender.ts", "../src/renderer/ButtonRender.ts", "../src/renderer/RangeRender.ts", "../node_modules/@daracl/datetimepicker/src/Lanauage.ts", "../node_modules/@daracl/datetimepicker/src/constants.ts", "../node_modules/@daracl/datetimepicker/src/util/utils.ts", "../node_modules/@daracl/datetimepicker/src/format/index.ts", "../node_modules/@daracl/datetimepicker/src/util/parser.ts", "../node_modules/@daracl/datetimepicker/src/DaraDate.ts", "../node_modules/@daracl/datetimepicker/src/DateTimePicker.ts", "../node_modules/@daracl/datetimepicker/style/daracl.datetimepicker.scss", "../node_modules/@daracl/datetimepicker/src/index.ts", "../src/renderer/DateRender.ts", "../src/util/styleUtils.ts", "../src/renderer/TabRender.ts", "../src/renderer/GridRender.ts", "../src/constants.ts", "../src/util/Lanauage.ts", "../src/util/renderFactory.ts", "../src/FieldInfoMap.ts", "../src/FormTemplate.ts", "../src/DaraForm.ts", "../src/index.ts"],
4
- "sourcesContent": ["import { FormField } from \"@t/FormField\";\r\n\r\nconst xssFilter = {\r\n \"&\": \"&amp;\",\r\n \"<\": \"&lt;\",\r\n \">\": \"&gt;\",\r\n '\"': \"&quot;\",\r\n \"'\": \"&#39;\",\r\n} as any;\r\n\r\nexport const replaceXss = (inputText: string): string => {\r\n let returnText = inputText;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, xssFilter[key]);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const hasOwnProp = (obj: any, key: string): boolean => {\r\n return obj.hasOwnProperty(key);\r\n};\r\n\r\nexport const unReplace = (inputText: string): string => {\r\n let returnText = inputText;\r\n\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(xssFilter[key], key);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const unFieldName = (fieldName: string): string => {\r\n if (fieldName) {\r\n return unReplace(fieldName).replaceAll('\"', '\\\\\"');\r\n }\r\n return \"\";\r\n};\r\nexport const isBlank = (value: any): boolean => {\r\n if (value === null) return true;\r\n if (value === \"\") return true;\r\n if (typeof value === \"undefined\") return true;\r\n if (typeof value === \"string\" && (value === \"\" || value.replace(/\\s/g, \"\") === \"\")) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const isUndefined = (value: any): value is undefined => {\r\n return typeof value === \"undefined\";\r\n};\r\n\r\nexport const isFunction = (value: any): boolean => {\r\n return typeof value === \"function\";\r\n};\r\n\r\nexport const isString = (value: any): value is string => {\r\n return typeof value === \"string\";\r\n};\r\nexport const isNumber = (value: any): value is number => {\r\n if (isBlank(value)) {\r\n return false;\r\n }\r\n value = +value;\r\n return !isNaN(value);\r\n};\r\n\r\nexport const isArray = (value: any): value is Array<any> => {\r\n return Array.isArray(value);\r\n};\r\n\r\n/**\r\n * \uAC12\uC788\uB294\uC9C0 \uC5EC\uBD80 \uCCB4\uD06C.\r\n *\r\n * @param {*} value\r\n * @returns {boolean}\r\n */\r\nexport const isEmpty = (value: any): boolean => isUndefined(value) || value == null; //_isEmpty(value);\r\n\r\n/**\r\n * tab render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} tab type \uC778\uC9C0 \uC5EC\uBD80\r\n */\r\nexport const isTabType = (field: FormField): boolean => {\r\n return field && field.renderType === \"tab\";\r\n};\r\n/**\r\n * grid render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} grid type \uC778\uC9C0 \uC5EC\uBD80\r\n */\r\nexport const isGridType = (field: FormField): boolean => {\r\n return field && field.renderType === \"grid\";\r\n};\r\nexport const replaceXssField = (field: FormField): FormField => {\r\n field.$xssName = getXssFieldName(field);\r\n\r\n field.label = replaceXss(field.label);\r\n return field;\r\n};\r\n\r\n/**\r\n * \uAC12\uC744 \uBB34\uC2DC\uD558\uB294 \uD544\uB4DC\r\n *\r\n * @param field formField\r\n * @returns\r\n */\r\nexport const ignoreValueField = (field: FormField): boolean => {\r\n return isGridType(field.$parent) || isTabType(field.$parent);\r\n};\r\n\r\n/**\r\n * grid field name xss repalce\r\n *\r\n * @param {FormField} field\r\n * @returns {string} replace \uB41C field name\r\n */\r\nexport const getXssFieldName = (field: FormField): string => {\r\n if (isUndefined(field.$xssName)) {\r\n let returnText = field.name;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, \"_\");\r\n });\r\n }\r\n\r\n return \"df_\" + returnText;\r\n }\r\n\r\n return field.$xssName;\r\n};\r\n\r\nexport const getHashCode = (str: string) => {\r\n let hash = 0;\r\n if (str.length == 0) return hash;\r\n for (let i = 0; i < str.length; i++) {\r\n let tmpChar = str.charCodeAt(i);\r\n hash = (hash << 5) - hash + tmpChar;\r\n hash = hash & hash;\r\n }\r\n return String(hash).replaceAll(/-/g, \"_\");\r\n};\r\n\r\nexport const isHiddenField = (field: FormField): boolean => {\r\n if (field.renderType === \"hidden\") {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const templateToElement = (htmlTemplate: string): Element | null => {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = htmlTemplate;\r\n return template.content.firstElementChild;\r\n};\r\n\r\nexport function isPlainObject(obj: any) {\r\n // \uAC1D\uCCB4\uAC00 \uC544\uB2CC \uACBD\uC6B0 \uB610\uB294 null\uC778 \uACBD\uC6B0 false \uBC18\uD658\r\n if (typeof obj !== \"object\" || obj === null) {\r\n return false;\r\n }\r\n\r\n // \uD504\uB85C\uD1A0\uD0C0\uC785 \uCCB4\uC778\uC744 \uB530\uB77C Object \uC0DD\uC131\uC790\uB97C \uCC3E\uC74C\r\n let proto = obj;\r\n while (Object.getPrototypeOf(proto) !== null) {\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n // Object \uC0DD\uC131\uC790\uC758 prototype\uACFC \uAC19\uC73C\uBA74 Plain Object\uB85C \uD310\uB2E8\r\n return Object.getPrototypeOf(obj) === proto;\r\n}\r\n\r\nfunction isObject(value: any) {\r\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n}\r\n\r\nfunction isDate(value: any) {\r\n return value instanceof Date && !isNaN(value.valueOf());\r\n}\r\n\r\n/**\r\n * object merge\r\n * \r\n * @example\r\n ```\r\n merge({},{aaa:'bbb',ccc:'ddd'},{bbb:'bbb','aaa':'aaa'})) -> {\"aaa\": \"aaa\", \"bbb\": \"bbb\", \"ccc\": \"ddd\"}\r\n ```\r\n * @param {...any[]} value\r\n * @returns {object}\r\n */\r\nexport const merge = (...value: any[]): any => {\r\n let reval = value[0];\r\n\r\n if (!isPlainObject(reval) || isEmpty(reval)) {\r\n return reval;\r\n }\r\n\r\n let i = 1;\r\n if (Object.keys(reval).length > 0) {\r\n i = 0;\r\n reval = isArray(reval) ? [] : {};\r\n }\r\n const argLen = value.length;\r\n for (; i < argLen; i += 1) {\r\n cloneDeep(reval, value[i]);\r\n }\r\n\r\n return reval;\r\n};\r\n\r\nfunction trim(s: string): string {\r\n return s.replace(/^\\s+|\\s+$/g, \"\");\r\n}\r\n\r\nfunction cloneDeep(dst: any, src: any): any {\r\n if (isObject(src)) {\r\n return cloneObjectDeep(dst, src);\r\n }\r\n\r\n if (isArray(src)) {\r\n return cloneArrayDeep(dst, src);\r\n }\r\n\r\n if (isDate(src)) {\r\n return new src.constructor(src);\r\n }\r\n return src;\r\n}\r\n\r\n/*eslint no-param-reassign: \"error\"*/\r\nfunction cloneObjectDeep(dst: any, src: any): object {\r\n if (isFunction(src)) {\r\n return src;\r\n }\r\n\r\n for (const key of Object.keys(src)) {\r\n const val = (src as any)[key];\r\n\r\n if (isUndefined(val)) {\r\n continue;\r\n }\r\n\r\n if (val === null) {\r\n dst[key] = val;\r\n } else if (isFunction(val)) {\r\n dst[key] = val;\r\n } else if (isEmpty(dst[key])) {\r\n dst[key] = cloneDeep(isArray(val) ? [] : {}, val);\r\n } else if (!isObject(val)) {\r\n dst[key] = val;\r\n } else {\r\n cloneDeep(dst[key], val);\r\n }\r\n }\r\n return dst;\r\n}\r\n\r\nfunction cloneArrayDeep(dst: any, src: any[]) {\r\n const isObj = isPlainObject(dst);\r\n\r\n for (let i = 0; i < src.length; i += 1) {\r\n const val = src[i];\r\n let newVal;\r\n\r\n if (val == null) {\r\n newVal = val;\r\n } else {\r\n newVal = cloneDeep(isArray(val) ? [] : {}, val);\r\n }\r\n\r\n if (isObj) {\r\n (dst as any)[i] = newVal;\r\n } else {\r\n dst.push(newVal);\r\n }\r\n }\r\n return dst;\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default abstract class Render {\r\n protected daraForm;\r\n protected rowElement;\r\n protected field;\r\n\r\n private enableView: boolean = true;\r\n\r\n constructor(form: DaraForm, field: FormField, rowElement: HTMLElement) {\r\n this.daraForm = form;\r\n this.field = field;\r\n this.rowElement = rowElement;\r\n this.createField();\r\n\r\n if (field.tooltip) rowElement.querySelector(\".df-tooltip\")?.setAttribute(\"tooltip\", field.tooltip);\r\n }\r\n\r\n public setDefaultInfo() {\r\n if (utils.isUndefined(this.field.defaultValue)) {\r\n this.setValue(\"\", false);\r\n } else {\r\n this.setValue(this.field.defaultValue, false);\r\n }\r\n\r\n if (!utils.isUndefined(this.field.placeholder)) {\r\n const ele = this.getElement();\r\n if (ele instanceof Element) {\r\n ele.setAttribute(\"placeholder\", this.field.placeholder);\r\n }\r\n }\r\n }\r\n\r\n public setDefaultOption() {\r\n this.setDisabled(this.field.disabled ?? false);\r\n }\r\n\r\n public addChildField(element: Element) {\r\n this.rowElement.querySelector(\".df-field-container\")?.append(element);\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return true;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return true;\r\n }\r\n\r\n public getForm(): DaraForm {\r\n return this.daraForm;\r\n }\r\n\r\n public abstract mounted(): void;\r\n public abstract getValue(): any;\r\n public abstract setValue(value: any, changeCheckFlag?: boolean): void;\r\n public abstract reset(): void;\r\n public abstract getElement(): any;\r\n public abstract valid(): ValidResult | boolean;\r\n public abstract createField(): void;\r\n\r\n public setValueItems(value: any): void {}\r\n\r\n public static getDescriptionTemplate(field: FormField): string {\r\n return field.description ? `<div class=\"df-description\">${field.description}</div>` : \"\";\r\n }\r\n\r\n public changeEventCall(field: FormField, e: Event | null, rederInfo: Render, fieldValue: any): boolean | undefined {\r\n if (field.onChange) {\r\n let changeInfo: any = {\r\n field: field,\r\n evt: e,\r\n oldValue: field.$value,\r\n value: fieldValue,\r\n };\r\n\r\n if (field.listItem?.list) {\r\n let valuesItem = [];\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n for (let val of field.listItem.list) {\r\n let changeVal = val[valueKey];\r\n if (utils.isString(fieldValue)) {\r\n if (changeVal == fieldValue) {\r\n valuesItem.push(val);\r\n break;\r\n }\r\n } else if (utils.isArray(fieldValue)) {\r\n if (fieldValue.includes(changeVal)) {\r\n valuesItem.push(val);\r\n }\r\n }\r\n }\r\n\r\n changeInfo.valueItems = valuesItem;\r\n }\r\n\r\n if (changeInfo.oldValue != changeInfo.value && field.onChange.call(null, changeInfo) === false) {\r\n rederInfo.setValue(field.$value, false);\r\n return false;\r\n }\r\n\r\n field.$value = changeInfo.value;\r\n }\r\n\r\n this.daraForm.conditionCheck();\r\n }\r\n\r\n public focus() {\r\n this.getElement().focus();\r\n }\r\n\r\n public isEnableView() {\r\n return this.enableView;\r\n }\r\n\r\n public show() {\r\n this.enableView = true;\r\n this.rowElement.classList.remove(\"df-hidden\");\r\n }\r\n\r\n public hide() {\r\n this.enableView = false;\r\n if (!this.rowElement.classList.contains(\"df-hidden\")) {\r\n this.rowElement.classList.add(\"df-hidden\");\r\n }\r\n }\r\n\r\n /**\r\n * \uC124\uBA85 \uCD94\uAC00\r\n *\r\n * @public\r\n * @param {string} desc\r\n */\r\n public setDescription(desc: string) {\r\n const descEle = this.rowElement.querySelector(\".df-description\");\r\n if (descEle) {\r\n descEle.innerHTML = desc;\r\n } else {\r\n const fieldEle = this.rowElement.querySelector(\".df-field\");\r\n if (fieldEle) {\r\n const parser = new DOMParser();\r\n this.field.description = desc;\r\n const descEle = parser.parseFromString(Render.getDescriptionTemplate(this.field), \"text/html\").querySelector(\".df-description\");\r\n\r\n if (descEle) fieldEle.parentNode?.insertBefore(descEle, fieldEle.nextSibling);\r\n }\r\n }\r\n }\r\n\r\n public setActive(id: string): void {\r\n //console.log(\"parent\");\r\n }\r\n\r\n public setDisabled(flag: boolean) {\r\n const ele = this.getElement();\r\n if (ele instanceof HTMLElement) {\r\n if (flag === false) {\r\n this.getElement().removeAttribute(\"disabled\");\r\n } else {\r\n this.getElement().setAttribute(\"disabled\", true);\r\n }\r\n }\r\n }\r\n\r\n public commonValidator() {\r\n //this.field.diff\r\n }\r\n\r\n public static valuesValueKey(field: FormField): string {\r\n return field.listItem?.valueField ? field.listItem.valueField : \"value\";\r\n }\r\n\r\n public static valuesLabelKey(field: FormField): string {\r\n return field.listItem?.labelField ? field.listItem.labelField : \"label\";\r\n }\r\n\r\n public static valuesLabelValue(label: string, val: any) {\r\n let replaceFlag = false;\r\n const resultValue = label.replace(/\\{\\{([A-Za-z0-9_.]*)\\}\\}/g, (match, key) => {\r\n replaceFlag = true;\r\n return val[key] || \"\";\r\n });\r\n\r\n if (replaceFlag) {\r\n return resultValue;\r\n }\r\n\r\n return val[label] || \"\";\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\n\r\nconst regexp = {\r\n mobile: /^\\d{3}-\\d{3,4}-\\d{4}$/,\r\n email: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\r\n url: /^(?:(?:https?|HTTPS?|ftp|FTP):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-zA-Z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/,\r\n number: /\\d$/,\r\n alpha: /^[a-zA-Z]+$/,\r\n \"alpha-num\": /^[a-zA-Z0-9]+$/,\r\n variable: /^[a-zA-Z0-9_$][a-zA-Z0-9_$]*$/,\r\n \"number-char\": /^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]/,\r\n \"upper-char\": /^(?=.*?[A-Z])(?=.*?[a-z])/,\r\n \"upper-char-special\": /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-])/,\r\n \"upper-char-special-number\": /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]/,\r\n};\r\n\r\n/**\r\n * \uC815\uADDC\uC2DD \uC720\uD6A8\uC131 \uCCB4\uD06C.\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @param {(ValidResult | undefined)} result\r\n * @returns {ValidResult}\r\n */\r\nexport const regexpValidator = (value: string, field: FormField, result: ValidResult): ValidResult => {\r\n if (!field.$instance.isEnableView()) {\r\n return { name: field.name, constraint: [] };\r\n }\r\n\r\n if (typeof result === \"undefined\") {\r\n result = { name: field.name, constraint: [] };\r\n }\r\n\r\n const regexpType = field.regexpType;\r\n\r\n if (regexpType) {\r\n if (!regexp[regexpType].test(value)) {\r\n result.regexp = regexpType;\r\n return result;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { regexpValidator } from \"./regexpValidator\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\n/**\r\n * validator , regexp \uCCB4\uD06C .\r\n *\r\n * @param {string} value field value\r\n * @param {FormField} field field \uC815\uBCF4\r\n * @param {ValidResult} result\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const validator = (value: string, field: FormField, result: ValidResult): ValidResult | boolean => {\r\n if (field.validator) {\r\n result.validator = field.validator(field, value);\r\n if (typeof result.validator === \"object\") {\r\n return result;\r\n }\r\n }\r\n\r\n result = regexpValidator(value, field, result);\r\n\r\n if (result.regexp) {\r\n return result;\r\n }\r\n\r\n if (field.different) {\r\n const diffFieldName = field.different.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() == diffField.$instance.getValue()) {\r\n result.message = field.different.message;\r\n return result;\r\n }\r\n }\r\n\r\n if (field.identical) {\r\n const diffFieldName = field.identical.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() != diffField.$instance.getValue()) {\r\n result.message = field.identical.message;\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { validator } from \"./validator\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\n/**\r\n * \uC22B\uC790 \uC720\uD6A8\uC131 \uCCB4\uD06C\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const numberValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n const numValue = Number(value);\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (!utils.isNumber(value)) {\r\n result.constraint.push(RULES.NAN);\r\n return result;\r\n }\r\n\r\n if (validator(value, field, result) !== true) {\r\n return result;\r\n }\r\n\r\n const rule = field.rule;\r\n if (rule) {\r\n const isMinimum = utils.isNumber(rule.minimum),\r\n isMaximum = utils.isNumber(rule.maximum);\r\n\r\n let minRule = false,\r\n minExclusive = false,\r\n maxRule = false,\r\n maxExclusive = false;\r\n\r\n if (isMinimum) {\r\n if (rule.exclusiveMinimum && numValue <= rule.minimum) {\r\n minExclusive = true;\r\n } else if (numValue < rule.minimum) {\r\n minRule = true;\r\n }\r\n }\r\n\r\n if (isMaximum) {\r\n if (rule.exclusiveMaximum && numValue >= rule.maximum) {\r\n maxExclusive = true;\r\n } else if (numValue > rule.maximum) {\r\n maxRule = true;\r\n }\r\n }\r\n\r\n if (isMinimum && isMaximum && (minRule || minExclusive || maxRule || maxExclusive)) {\r\n if (rule.exclusiveMinimum && rule.exclusiveMaximum && (minExclusive || maxExclusive)) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MINMAX);\r\n } else if (minExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MIN);\r\n } else if (maxExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MAX);\r\n } else {\r\n result.constraint.push(RULES.BETWEEN);\r\n }\r\n } else {\r\n if (minExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MIN);\r\n }\r\n\r\n if (maxExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MAX);\r\n }\r\n\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX);\r\n }\r\n }\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport Lanauage from \"./Lanauage\";\r\n\r\nexport const invalidMessage = (field: FormField, rowElement: Element, validResult: ValidResult | boolean) => {\r\n if (validResult === true) {\r\n rowElement.classList.remove(\"invalid\");\r\n\r\n if (!rowElement.classList.contains(\"valid\")) {\r\n rowElement.classList.add(\"valid\");\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".help-message\");\r\n if (helpMessageElement) {\r\n helpMessageElement.innerHTML = \"\";\r\n }\r\n\r\n return;\r\n }\r\n\r\n rowElement.classList.remove(\"valid\");\r\n\r\n if (!rowElement.classList.contains(\"invalid\")) {\r\n rowElement.classList.add(\"invalid\");\r\n }\r\n\r\n if (validResult !== false) {\r\n const message: string[] = Lanauage.validMessage(field, validResult);\r\n\r\n if (validResult.message) {\r\n message.push(validResult.message);\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".help-message\");\r\n if (helpMessageElement && message.length > 0) {\r\n const msgHtml: string[] = [];\r\n message.forEach((item) => {\r\n msgHtml.push(`<div>${item}</div>`);\r\n });\r\n helpMessageElement.innerHTML = msgHtml.join(\"\");\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * remove row element style class\r\n *\r\n * @param {Element} rowElement\r\n */\r\nexport const resetRowElementStyleClass = (rowElement: Element) => {\r\n rowElement.classList.remove(\"invalid\");\r\n rowElement.classList.remove(\"valid\");\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"src/renderer/Render\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport const inputEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"input\", (e: Event) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const numberInputEvent = (field: FormField, element: HTMLInputElement, renderInfo: Render) => {\r\n element.addEventListener(\"keyup\", (e: any) => {\r\n const val = e.target.value;\r\n\r\n if (!utils.isNumber(val)) {\r\n element.value = val.replace(/[^0-9\\.\\-\\+]/g, \"\");\r\n e.preventDefault();\r\n }\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n\r\n /*\r\n element.addEventListener('input', (e: any) => {\r\n customChangeEventCall(field, e, renderInfo);\r\n renderInfo.valid();\r\n })\r\n */\r\n};\r\n\r\nexport const dropdownChangeEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"change\", (e: any) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const customChangeEventCall = (field: FormField, e: Event, renderInfo: Render, value: any) => {\r\n renderInfo.changeEventCall(field, e, renderInfo, value);\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { numberValidator } from \"src/rule/numberValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { numberInputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class NumberRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n numberInputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field number help-icon\" />\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = numberValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { validator } from \"./validator\";\r\n\r\n/**\r\n * string validator\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const stringValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n let result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n const validResult = validator(value, field, result);\r\n if (validResult !== true) {\r\n return validResult;\r\n }\r\n\r\n const rule = field.rule;\r\n\r\n if (rule) {\r\n const valueLength = value.length;\r\n\r\n const isMinNumber = utils.isNumber(rule.minLength),\r\n isMaxNumber = utils.isNumber(rule.maxLength);\r\n\r\n let minRule = false,\r\n maxRule = false;\r\n if (isMinNumber && valueLength < rule.minLength) {\r\n minRule = true;\r\n }\r\n if (isMaxNumber && valueLength > rule.maxLength) {\r\n maxRule = true;\r\n }\r\n\r\n if (isMinNumber && isMaxNumber && (minRule || maxRule)) {\r\n result.constraint.push(RULES.BETWEEN);\r\n } else {\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN_LENGTH);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX_LENGTH);\r\n }\r\n }\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class TextAreaRender extends Render {\r\n private element: HTMLTextAreaElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let rows = field.customOptions?.rows;\r\n rows = +rows > 0 ? rows : 3;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <textarea name=\"${field.$xssName}\" rows=\"${rows}\" class=\"form-field textarea help-icon\"></textarea>\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLTextAreaElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { dropdownChangeEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport Lanauage from \"src/util/Lanauage\";\r\n\r\nexport default class DropdownRender extends Render {\r\n private element: HTMLSelectElement;\r\n private defaultSelected;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n let initDefaultValue = \"\";\r\n\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n }\r\n\r\n const valueKey = DropdownRender.valuesValueKey(field);\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultSelected = itemValue;\r\n }\r\n if (itemValue == initDefaultValue) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n if (initDefaultValueFlag) {\r\n this.defaultSelected = initDefaultValue;\r\n } else if (!this.defaultSelected) {\r\n if (field.customOptions?.disableDefaultOption === true) {\r\n this.defaultSelected = this.field.listItem?.list?.length > 0 ? this.field.listItem.list[0][valueKey] || \"\" : \"\";\r\n }\r\n }\r\n\r\n if (utils.isUndefined(this.defaultSelected)) {\r\n this.defaultSelected = \"\";\r\n }\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultSelected, false);\r\n }\r\n\r\n mounted() {\r\n dropdownChangeEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let template = ` <div class=\"df-field\"><select name=\"${field.$xssName}\" class=\"form-field dropdown\">\r\n ${this.dropdownValuesTemplate(field)}\r\n </select> <i class=\"help-icon\"></i></div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n fieldContainerElement.innerHTML = template;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLSelectElement;\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n this.element.innerHTML = this.dropdownValuesTemplate(this.field);\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setValue(this.defaultSelected, false);\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required) {\r\n if (value.length < 1) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n\r\n public dropdownValuesTemplate(field: FormField) {\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n let template = \"\";\r\n\r\n if (field.customOptions?.disableDefaultOption !== true) {\r\n template += `<option value=\"\">${Lanauage.getMessage(\"selection\")}</option>`;\r\n }\r\n field.listItem?.list?.forEach((val) => {\r\n const attr = `${val.selected ? \"selected\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}`;\r\n if (utils.isUndefined(val[valueKey]) && val.label) {\r\n template += `<option value=\"${val.value || \"\"}\" ${attr}>${val.label}</option>`;\r\n } else {\r\n template += `<option value=\"${val[valueKey]}\" ${attr}>${Render.valuesLabelValue(labelKey, val)}</option>`;\r\n }\r\n });\r\n\r\n return template;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class TextRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field text help-icon\" />\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class CheckboxRender extends Render {\r\n private defaultCheckValue: any[] = [];\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.defaultCheckValue = [];\r\n let initDefaultValue = [] as any;\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n if (utils.isArray(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n } else {\r\n initDefaultValue = [field.defaultValue];\r\n }\r\n }\r\n\r\n const valueKey = CheckboxRender.valuesValueKey(field);\r\n\r\n if (utils.isUndefined(this.field.listItem)) {\r\n this.setValueItems([{ label: \"\", value: \"Y\" }]);\r\n }\r\n\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultCheckValue.push(itemValue ? itemValue : true);\r\n }\r\n if (initDefaultValue.includes(itemValue)) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n this.defaultCheckValue = initDefaultValueFlag ? initDefaultValue : this.defaultCheckValue;\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n\r\n public mounted() {\r\n this.initEvent();\r\n }\r\n\r\n public initEvent() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n ele.addEventListener(\"change\", (e: Event) => {\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n this.valid();\r\n });\r\n });\r\n }\r\n\r\n public getSelector() {\r\n return `input[type=\"checkbox\"][name=\"${this.field.$xssName}\"]`;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n const templates: string[] = [];\r\n const fieldName = field.$xssName;\r\n\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n templates.push(` <div class=\"df-field\"><div class=\"field-group\">`);\r\n field.listItem?.list?.forEach((val) => {\r\n const checkVal = val[valueKey];\r\n templates.push(`\r\n <span class=\"field ${field.listItem.orientation == \"vertical\" ? \"vertical\" : \"horizontal\"}\">\r\n <label>\r\n <input type=\"checkbox\" name=\"${fieldName}\" value=\"${checkVal ? utils.replaceXss(checkVal) : \"\"}\" class=\"form-field checkbox\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"} />\r\n ${Render.valuesLabelValue(labelKey, val)}\r\n </label>\r\n </span>\r\n `);\r\n });\r\n templates.push(`<i class=\"daracl-icon help-icon\"></i></div></div> ${Render.getDescriptionTemplate(field)}<div class=\"help-message\"></div>`);\r\n\r\n fieldContainerElement.innerHTML = templates.join(\"\");\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\r\n if (containerEle) {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n\r\n this.createField();\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n }\r\n\r\n getValue() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n if (checkboxes.length > 1) {\r\n const checkValue: any[] = [];\r\n checkboxes.forEach((ele) => {\r\n const checkEle = ele as HTMLInputElement;\r\n if (checkEle.checked) {\r\n checkValue.push(checkEle.value);\r\n }\r\n });\r\n return checkValue;\r\n } else {\r\n const checkElement = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement;\r\n\r\n if (checkElement?.checked) {\r\n return checkElement.value ? checkElement.value : true;\r\n }\r\n\r\n return checkElement.value ? \"\" : false;\r\n }\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n\r\n this.field.$value = value;\r\n if (value === true) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\r\n return;\r\n }\r\n\r\n if (value === false) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\r\n return;\r\n }\r\n\r\n let valueArr: any[] = [];\r\n if (Array.isArray(value)) {\r\n valueArr = value;\r\n } else {\r\n valueArr.push(value);\r\n }\r\n\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n (ele as HTMLInputElement).checked = false;\r\n });\r\n\r\n valueArr.forEach((val) => {\r\n const ele = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"][value=\"${val}\"]`) as HTMLInputElement;\r\n if (ele) ele.checked = true;\r\n });\r\n }\r\n\r\n reset() {\r\n if (this.field.listItem?.list?.length == 1 && this.defaultCheckValue.length == 1) {\r\n this.setValue(true, false);\r\n } else {\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): any {\r\n return this.rowElement.querySelectorAll(`[name=\"${this.field.$xssName}\"]`);\r\n }\r\n\r\n public focus() {\r\n const elements = this.getElement();\r\n\r\n if (elements && elements.length > 0) {\r\n this.getElement()[0].focus();\r\n }\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required && utils.isArray(value)) {\r\n if ((value as any[]).length < 1) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class RadioRender extends Render {\r\n private defaultCheckValue;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.defaultCheckValue = \"\";\r\n let initDefaultValue = [] as any;\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n }\r\n\r\n const valueKey = RadioRender.valuesValueKey(field);\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultCheckValue = itemValue;\r\n }\r\n\r\n if (initDefaultValue == itemValue) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n // \uCC98\uB9AC \uD560\uAC83.\r\n\r\n if (initDefaultValueFlag) {\r\n this.defaultCheckValue = initDefaultValue;\r\n } else if (!this.defaultCheckValue) {\r\n this.defaultCheckValue = this.field.listItem?.list?.length > 0 ? this.field.listItem?.list[0][valueKey] : \"\";\r\n }\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n\r\n public mounted() {\r\n this.initEvent();\r\n }\r\n\r\n public initEvent() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n ele.addEventListener(\"change\", (e: Event) => {\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n\r\n this.valid();\r\n });\r\n });\r\n }\r\n\r\n public getSelector() {\r\n return `input[type=\"radio\"][name=\"${this.field.$xssName}\"]`;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n const templates: string[] = [];\r\n const fieldName = field.$xssName;\r\n\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n templates.push(`<div class=\"df-field\"><div class=\"field-group\">`);\r\n\r\n field.listItem?.list?.forEach((val) => {\r\n const radioVal = val[valueKey];\r\n\r\n templates.push(\r\n `<span class=\"field ${field.orientation == \"vertical\" ? \"vertical\" : \"horizontal\"}\">\r\n <label>\r\n <input type=\"radio\" name=\"${fieldName}\" value=\"${radioVal}\" class=\"form-field radio\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}/>\r\n ${Render.valuesLabelValue(labelKey, val)}\r\n </label>\r\n </span>\r\n `\r\n );\r\n });\r\n templates.push(`<i class=\"daracl-icon help-icon\"></i></div></div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `);\r\n\r\n fieldContainerElement.innerHTML = templates.join(\"\");\r\n\r\n this.initEvent();\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\r\n if (containerEle) {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n\r\n this.createField();\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n }\r\n\r\n getValue() {\r\n return (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]:checked`) as HTMLInputElement)?.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n\r\n this.field.$value = value;\r\n if (value === true) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\r\n return;\r\n }\r\n\r\n if (value === false) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\r\n return;\r\n }\r\n\r\n const elements = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n elements.forEach((ele) => {\r\n let radioEle = ele as HTMLInputElement;\r\n if (radioEle.value == value) {\r\n radioEle.checked = true;\r\n } else {\r\n radioEle.checked = false;\r\n }\r\n });\r\n }\r\n\r\n reset() {\r\n this.setValue(this.defaultCheckValue, false);\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): any {\r\n return this.rowElement.querySelectorAll(this.getSelector());\r\n }\r\n\r\n public focus() {\r\n const elements = this.getElement();\r\n\r\n if (elements && elements.length > 0) {\r\n this.getElement()[0].focus();\r\n }\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required) {\r\n if (utils.isBlank(value)) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class PasswordRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"password\" name=\"${field.$xssName}\" class=\"form-field password help-icon\" autocomplete=\"off\" />\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FileInfo, FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\n\r\n/**\r\n * file validator\r\n *\r\n * @param {HTMLInputElement} element\r\n * @param {FormField} field\r\n * @param {FileInfo[]} fileList\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const fileValidator = (element: HTMLInputElement, field: FormField, fileList: FileInfo[]): ValidResult | boolean => {\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && fileList.length < 1) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FileInfo, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { fileValidator } from \"src/rule/fileValidator\";\r\nimport Lanauage from \"src/util/Lanauage\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class FileRender extends Render {\r\n private element: HTMLInputElement;\r\n private removeIds: any[] = [];\r\n private uploadFiles: any = {};\r\n private fileList: any[] = [];\r\n private fileSeq = 0;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.element = rowElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n this.fileList = field.listItem?.list || [];\r\n this.mounted();\r\n this.setDefaultOption();\r\n }\r\n\r\n mounted() {\r\n this.element.addEventListener(\"change\", (e: Event) => {\r\n const files = (e.target as HTMLInputElement)?.files;\r\n\r\n if (files) {\r\n let fileList = [];\r\n for (let item of files) {\r\n fileList.push(item);\r\n }\r\n this.addFiles(fileList);\r\n }\r\n customChangeEventCall(this.field, e, this, this.fileList);\r\n this.valid();\r\n });\r\n\r\n this.fileList.forEach((file) => {\r\n file.$seq = this.fileSeq += 1;\r\n });\r\n\r\n this.setFileList(this.fileList);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <span class=\"file-wrapper\">\r\n <label class=\"file-label\">\r\n <input type=\"file\" name=\"${field.$xssName}\" class=\"form-field file\" multiple />\r\n ${Lanauage.getMessage(\"fileButton\")}\r\n </label>\r\n <i class=\"daracl-icon help-icon\"></i>\r\n </span>\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"daracl-file-list\"></div>\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n addFiles(files: any[]) {\r\n let addFlag = false;\r\n\r\n const newFiles: FileInfo[] = [];\r\n\r\n for (let item of files) {\r\n const fileCheckList = this.fileList.filter((fileItem) => fileItem.fileName == item.name && fileItem.fileSize == item.size && fileItem.lastModified == item.lastModified);\r\n\r\n if (fileCheckList.length > 0) continue;\r\n this.fileSeq += 1;\r\n this.uploadFiles[this.fileSeq] = item;\r\n\r\n let newFileInfo = {\r\n fileName: item.name,\r\n $seq: this.fileSeq,\r\n fileSize: item.size,\r\n lastModified: item.lastModified,\r\n } as FileInfo;\r\n\r\n newFiles.push(newFileInfo);\r\n addFlag = true;\r\n }\r\n if (addFlag) {\r\n this.setFileList(newFiles);\r\n this.fileList.push(...newFiles);\r\n }\r\n }\r\n\r\n private setFileList(fileList: FileInfo[], initFlag?: boolean | undefined) {\r\n const fileListElement = this.rowElement.querySelector(\".daracl-file-list\");\r\n\r\n if (fileListElement) {\r\n if (initFlag === true) {\r\n fileListElement.innerHTML = \"\";\r\n }\r\n\r\n const fileTemplateHtml: string[] = [];\r\n\r\n fileList.forEach((file) => {\r\n fileTemplateHtml.push(`\r\n <div class=\"file-item\" data-seq=\"${file.$seq}\">\r\n ${file.fileId ? '<span class=\"file-icon download\"></span>' : '<span class=\"file-icon\"></span>'} <span class=\"file-icon remove\"></span>\r\n <span class=\"file-name\">${file.fileName}</span > \r\n </div>`);\r\n });\r\n\r\n fileListElement.insertAdjacentHTML(\"beforeend\", fileTemplateHtml.join(\"\"));\r\n\r\n fileList.forEach((item) => {\r\n this.removeFileEvent(item, fileListElement);\r\n this.downloadFileEvent(item, fileListElement);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uD30C\uC77C \uB2E4\uC6B4\uB85C\uB4DC \uC774\uBCA4\uD2B8 \uCC98\uB9AC.\r\n *\r\n * @param item\r\n * @param fileListElement\r\n */\r\n private downloadFileEvent(item: FileInfo, fileListElement: Element) {\r\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .download`);\r\n if (ele) {\r\n ele.addEventListener(\"click\", (evt: Event) => {\r\n const fileItemElement = (evt.target as Element).closest(\".file-item\");\r\n\r\n if (fileItemElement) {\r\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\r\n if (attrSeq) {\r\n const seq = parseInt(attrSeq, 10);\r\n const idx = this.fileList.findIndex((v) => v.$seq === seq);\r\n\r\n const item = this.fileList[idx];\r\n\r\n if (item[\"url\"]) {\r\n location.href = item[\"url\"];\r\n return;\r\n }\r\n\r\n if (this.field.fileDownload) {\r\n this.field.fileDownload.call(null, { file: item, field: this.field });\r\n return;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uD30C\uC77C \uC0AD\uC81C \uCC98\uB9AC.\r\n *\r\n * @param item\r\n * @param fileListElement\r\n */\r\n private removeFileEvent(item: FileInfo, fileListElement: Element) {\r\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .remove`);\r\n if (ele) {\r\n ele.addEventListener(\"click\", (evt: Event) => {\r\n const fileItemElement = (evt.target as Element).closest(\".file-item\");\r\n\r\n if (fileItemElement) {\r\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\r\n if (attrSeq) {\r\n const seq = parseInt(attrSeq, 10);\r\n const removeIdx = this.fileList.findIndex((v) => v.$seq === seq);\r\n\r\n const removeItem = this.fileList[removeIdx];\r\n\r\n this.fileList.splice(removeIdx, 1);\r\n delete this.uploadFiles[seq];\r\n fileItemElement.remove();\r\n\r\n if (removeItem.fileId) {\r\n this.removeIds.push(removeItem.fileId);\r\n }\r\n }\r\n }\r\n this.valid();\r\n });\r\n }\r\n }\r\n\r\n getValue() {\r\n return {\r\n uploadFile: Object.values(this.uploadFiles),\r\n removeIds: this.removeIds,\r\n };\r\n }\r\n\r\n public setValueItems(value: any): void {\r\n this.fileList = [];\r\n this.uploadFiles = [];\r\n this.removeIds = [];\r\n for (let file of value) {\r\n file.$seq = this.fileSeq += 1;\r\n\r\n this.fileList.push(file);\r\n }\r\n\r\n this.setFileList(this.fileList, true);\r\n }\r\n\r\n setValue(value: any): void {\r\n if (utils.isArray(value)) {\r\n this.setValueItems(value);\r\n }\r\n this.element.value = \"\";\r\n }\r\n\r\n reset() {\r\n this.setValue(\"\");\r\n this.setValueItems([]);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = fileValidator(this.element, this.field, this.fileList);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage, resetRowElementStyleClass } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\n\r\nexport default class CustomRender extends Render {\r\n private customFunction;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n }\r\n\r\n mounted() {\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldTemplate = utils.isEmpty(field.template) ? \"\" : utils.isString(field.template) ? field.template : field.template();\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = ` <div class=\"df-field\">\r\n ${fieldTemplate}\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>`;\r\n }\r\n\r\n getValue() {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n return \"\";\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (this.customFunction.setValue) {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n (this.customFunction.setValue as any).call(this, value, this.field, this.rowElement);\r\n }\r\n\r\n this.field.$value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement() {\r\n if (this.customFunction.getElement) {\r\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\r\n }\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n\r\n /**\r\n * focus\r\n */\r\n focus(): void {\r\n if (this.customFunction.focus) {\r\n (this.customFunction.focus as any).call(this, this.field, this.rowElement);\r\n }\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class GroupRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n }\r\n\r\n public mounted() {}\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n return \"\";\r\n }\r\n\r\n getValue() {\r\n return null;\r\n }\r\n\r\n setValue(value: any): void {}\r\n\r\n reset() {}\r\n\r\n getElement(): HTMLElement {\r\n return this.rowElement;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n\r\n public addChildField(element: Element) {\r\n let addContainer = this.rowElement.querySelector(\".df-field-container\");\r\n\r\n if (addContainer) {\r\n addContainer.append(element);\r\n } else {\r\n this.rowElement.append(element);\r\n }\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class HiddenRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.field.$value = field.defaultValue;\r\n }\r\n\r\n mounted() {}\r\n\r\n createField() {\r\n return ``;\r\n }\r\n\r\n getValue() {\r\n return this.field.$value;\r\n }\r\n\r\n setValue(value: any): void {\r\n this.field.$value = value;\r\n }\r\n\r\n reset() {\r\n this.setValue(this.field.defaultValue);\r\n }\r\n\r\n getElement() {\r\n return;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class ButtonRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.mounted();\r\n this.setDefaultOption();\r\n }\r\n\r\n mounted() {\r\n this.rowElement.querySelector(`#${this.field.$key}`)?.addEventListener(\"click\", (evt) => {\r\n if (this.field.onClick) {\r\n this.field.onClick.call(null, this.field);\r\n }\r\n });\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <button type=\"button\" id=\"${field.$key}\" class=\"df-btn\">${field.label}</button> ${Render.getDescriptionTemplate(field)}\r\n `;\r\n }\r\n\r\n getValue() {\r\n return \"\";\r\n }\r\n\r\n setValue(value: any): void {}\r\n\r\n reset() {\r\n this.setDisabled(false);\r\n }\r\n\r\n getElement() {\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { numberValidator } from \"src/rule/numberValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall, numberInputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class RangeRender extends Render {\r\n private element: HTMLInputElement;\r\n private rangeNumElement: Element;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.rangeNumElement = rowElement.querySelector(\".range-num\") as Element;\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n this.element.addEventListener(\"input\", (e: any) => {\r\n this.rangeNumElement.innerHTML = e.target.value;\r\n\r\n this.element.setAttribute(\"title\", e.target.value);\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n this.valid();\r\n });\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <span class=\"range-num\">${field.defaultValue ? field.defaultValue : 0}</span>\r\n <input type=\"range\" name=\"${field.$xssName}\" class=\"form-field range help-icon\" min=\"${field.rule.minimum}\" max=\"${field.rule.maximum}\"/>\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = numberValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { Message } from \"@t/Message\";\r\n\r\nlet localeMessage: Message = {\r\n year: \"Year\",\r\n month: \"Month\",\r\n day: \"Day\",\r\n am: \"AM\",\r\n pm: \"PM\",\r\n today: \"Today\",\r\n ok: \"Ok\",\r\n months: {\r\n full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n abbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n },\r\n weeks: {\r\n full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n abbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n },\r\n};\r\n\r\n/**\r\n * validation \uBA54\uC2DC\uC9C0 \uCC98\uB9AC.\r\n *\r\n * @class Language\r\n * @typedef {Language}\r\n */\r\nclass Language {\r\n private lang: Message = localeMessage;\r\n\r\n public setDefaultMessage(lang?: Message) {\r\n localeMessage = Object.assign(localeMessage, lang);\r\n }\r\n\r\n /**\r\n * \uB2E4\uAD6D\uC5B4 \uBA54\uC2DC\uC9C0 \uB4F1\uB85D\r\n *\r\n * @public\r\n * @param {?Message} [lang] \uB465\uB85D\uD560 \uBA54\uC2DC\uC9C0\r\n */\r\n public set(lang?: Message) {\r\n this.lang = Object.assign({}, localeMessage, lang);\r\n }\r\n\r\n /**\r\n * \uBA54\uC2DC\uC9C0 \uC5BB\uAE30\r\n *\r\n * @public\r\n * @param {string} messageKey \uBA54\uC2DC\uC9C0 \uD0A4\r\n * @returns {*}\r\n */\r\n public getMessage(messageKey: string): any {\r\n return (this.lang as any)[messageKey];\r\n }\r\n\r\n public getMonthsMessage(idx: number, mode: \"full\" | \"abbr\" = \"abbr\") {\r\n return (this.lang.months as any)[mode][idx] || \"\";\r\n }\r\n\r\n public getWeeksMessage(idx: number, mode: \"full\" | \"abbr\" = \"abbr\") {\r\n return (this.lang.weeks as any)[mode][idx] || \"\";\r\n }\r\n\r\n public getMonthsIdx(val: string, mode: \"full\" | \"abbr\" = \"abbr\"): number {\r\n return mode == \"full\" ? this.lang.months.full.indexOf(val) : this.lang.months.abbr.indexOf(val);\r\n }\r\n\r\n public getWeeksIdx(val: string, mode: \"full\" | \"abbr\" = \"abbr\"): number {\r\n return mode == \"full\" ? this.lang.weeks.full.indexOf(val) : this.lang.weeks.abbr.indexOf(val);\r\n }\r\n}\r\n\r\nfunction message(msgFormat: string, msgParam: any): string {\r\n return msgFormat.replace(/\\{{1,1}([A-Za-z0-9_.]*)\\}{1,1}/g, (match, key) => {\r\n return typeof msgParam[key] !== \"undefined\" ? msgParam[key] : match;\r\n });\r\n}\r\n\r\nexport default new Language();\r\n", "export const EXPRESSIONS_FORMAT = [\"YY\", \"YYYY\", \"MMMM\", \"MMM\", \"MM\", \"M\", \"dddd\", \"ddd\", \"dd\", \"d\", \"DD\", \"D\", \"S\", \"HH\", \"H\", \"hh\", \"h\", \"mm\", \"m\", \"ss\", \"s\", \"SSS\", \"zzzz\", \"zzz\", \"zz\", \"z\", \"a\", \"A\"];\r\n\r\nexport let MAX_CHAR_LENGTH = 0;\r\n\r\nexport let DEFAULT_FORMAT = {\r\n year: \"YYYY\",\r\n month: \"YYYY-MM\",\r\n date: \"YYYY-MM-DD\",\r\n time: \"HH:mm\",\r\n datetime: \"YYYY-MM-DD HH:mm\",\r\n};\r\n\r\nexport const DAY_STYLE_CLASS = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"];\r\n\r\nexport enum DateViewMode {\r\n year = \"year\",\r\n month = \"month\",\r\n date = \"date\",\r\n datetime = \"datetime\",\r\n time = \"time\",\r\n}\r\n\r\nEXPRESSIONS_FORMAT.forEach((item) => {\r\n MAX_CHAR_LENGTH = Math.max(item.length, MAX_CHAR_LENGTH);\r\n});\r\n", "const xssFilter = {\r\n \"&\": \"&amp;\",\r\n \"<\": \"&lt;\",\r\n \">\": \"&gt;\",\r\n '\"': \"&quot;\",\r\n \"'\": \"&#39;\",\r\n} as any;\r\n\r\nexport default {\r\n replace(str: string): string {\r\n let returnText = str;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, xssFilter[key]);\r\n });\r\n }\r\n return returnText;\r\n },\r\n\r\n unReplace(inputText: string): string {\r\n let returnText = inputText;\r\n\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(xssFilter[key], key);\r\n });\r\n }\r\n return returnText;\r\n },\r\n\r\n unFieldName(fieldName: string): string {\r\n if (fieldName) {\r\n return this.unReplace(fieldName).replaceAll('\"', '\\\\\"');\r\n }\r\n return \"\";\r\n },\r\n\r\n isBlank(value: any): boolean {\r\n if (value === null) return true;\r\n if (value === \"\") return true;\r\n if (typeof value === \"undefined\") return true;\r\n if (typeof value === \"string\" && (value === \"\" || value.replace(/\\s/g, \"\") === \"\")) return true;\r\n\r\n return false;\r\n },\r\n\r\n isUndefined(value: any): value is undefined {\r\n return typeof value === \"undefined\";\r\n },\r\n\r\n isFunction(value: any): boolean {\r\n return typeof value === \"function\";\r\n },\r\n\r\n isString(value: any): value is string {\r\n return typeof value === \"string\";\r\n },\r\n isNumber(value: any): value is number {\r\n if (this.isBlank(value)) {\r\n return false;\r\n }\r\n return !isNaN(value);\r\n },\r\n\r\n isArray(value: any) {\r\n return Array.isArray(value);\r\n },\r\n\r\n getHashCode(str: string) {\r\n let hash = 0;\r\n if (str.length == 0) return hash;\r\n for (let i = 0; i < str.length; i++) {\r\n let tmpChar = str.charCodeAt(i);\r\n hash = (hash << 5) - hash + tmpChar;\r\n hash = hash & hash;\r\n }\r\n return hash;\r\n },\r\n\r\n pad(str: any, length: number): string {\r\n str = String(str);\r\n while (str.length < length) {\r\n str = \"0\" + str;\r\n }\r\n return str;\r\n },\r\n\r\n closestElement(el: HTMLElement, checkElement: Element) {\r\n let currentEl: HTMLElement | null = el;\r\n while (currentEl) {\r\n if (currentEl == checkElement) {\r\n return true;\r\n }\r\n\r\n currentEl = currentEl.parentElement;\r\n }\r\n\r\n return false;\r\n },\r\n};\r\n", "import Lanauage from \"src/Lanauage\";\r\nimport { MAX_CHAR_LENGTH, EXPRESSIONS_FORMAT } from \"src/constants\";\r\nimport utils from \"src/util/utils\";\r\n\r\nexport default (date: Date, format: string) => {\r\n format = format || \"YYYY-MM-DD\";\r\n const len = format.length;\r\n\r\n let result = [];\r\n for (let i = 0; i < len; ) {\r\n let minLen = Math.min(MAX_CHAR_LENGTH, len - i);\r\n let j = minLen;\r\n for (; j > 0; j--) {\r\n const v = format.substring(i, i + j);\r\n if (EXPRESSIONS_FORMAT.includes(v)) {\r\n try {\r\n result.push(expressionsFunction[v](date));\r\n } catch (e) {\r\n console.log(EXPRESSIONS_FORMAT.includes(v), v, e);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (j < 1) {\r\n result.push(format.substring(i, i + 1));\r\n i += 1;\r\n } else {\r\n i += j;\r\n }\r\n }\r\n\r\n return result.join(\"\");\r\n};\r\n\r\nconst expressionsFunction: any = {\r\n YY: (date: Date) => {\r\n return String(date.getFullYear()).slice(-2);\r\n },\r\n YYYY: (date: Date) => {\r\n return String(date.getFullYear());\r\n },\r\n M: (date: Date) => {\r\n return String(date.getMonth() + 1);\r\n },\r\n MM: (date: Date) => {\r\n return utils.pad(date.getMonth() + 1, 2);\r\n },\r\n MMM: (date: Date) => {\r\n return Lanauage.getMonthsMessage(date.getMonth());\r\n },\r\n MMMM: (date: Date) => {\r\n return Lanauage.getMonthsMessage(date.getMonth(), \"full\");\r\n },\r\n D: (date: Date) => {\r\n return String(date.getDate());\r\n },\r\n DD: (date: Date) => {\r\n return utils.pad(date.getDate(), 2);\r\n },\r\n d: (date: Date) => {\r\n return String(date.getDate());\r\n },\r\n dd: (date: Date) => {\r\n return utils.pad(date.getDate(), 2);\r\n },\r\n ddd: (date: Date) => {\r\n return Lanauage.getWeeksMessage(date.getDay());\r\n },\r\n dddd: (date: Date) => {\r\n return Lanauage.getWeeksMessage(date.getDay(), \"full\");\r\n },\r\n H: (date: Date) => {\r\n return String(date.getHours());\r\n },\r\n HH: (date: Date) => {\r\n return utils.pad(date.getHours(), 2);\r\n },\r\n h: (date: Date) => {\r\n return getH(date);\r\n },\r\n hh: (date: Date) => {\r\n return utils.pad(getH(date), 2);\r\n },\r\n a: (date: Date) => {\r\n return String(date.getFullYear()).slice(-2);\r\n },\r\n A: (date: Date) => {\r\n return getMeridiem(date, true, true);\r\n },\r\n m: (date: Date) => {\r\n return String(date.getMinutes());\r\n },\r\n mm: (date: Date) => {\r\n return utils.pad(date.getMinutes(), 2);\r\n },\r\n s: (date: Date) => {\r\n return String(date.getSeconds());\r\n },\r\n ss: (date: Date) => {\r\n return utils.pad(date.getSeconds(), 2);\r\n },\r\n SSS: (date: Date) => {\r\n return utils.pad(date.getMilliseconds(), 3);\r\n },\r\n};\r\n\r\nfunction getH(date: Date) {\r\n let hour = date.getHours();\r\n if (hour > 12) {\r\n hour -= 12;\r\n } else if (hour < 1) {\r\n hour = 12;\r\n }\r\n return hour;\r\n}\r\n\r\nfunction getMeridiem(date: Date, isUpper: boolean, isShort: boolean) {\r\n const hour = date.getHours();\r\n let m = hour < 12 ? \"am\" : \"pm\";\r\n\r\n m = Lanauage.getMessage(m);\r\n m = isUpper ? m.toUpperCase() : m;\r\n\r\n return m;\r\n}\r\n", "import Lanauage from \"src/Lanauage\";\r\nimport { DEFAULT_FORMAT, EXPRESSIONS_FORMAT, MAX_CHAR_LENGTH } from \"src/constants\";\r\n\r\ntype DateInfo = {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hour: number;\r\n minute: number;\r\n second: number;\r\n millisecond: number;\r\n isPm: boolean;\r\n isH: boolean;\r\n timezoneOffset?: number | null;\r\n charIdx: number;\r\n};\r\n\r\nexport default (dateStr: string, format: string): Date | null => {\r\n if (dateStr.length > 1000) {\r\n return null;\r\n }\r\n\r\n format = format || DEFAULT_FORMAT.date;\r\n\r\n const dateInfo: DateInfo = {\r\n year: new Date().getFullYear(),\r\n month: 0,\r\n day: 1,\r\n hour: 0,\r\n minute: 0,\r\n second: 0,\r\n millisecond: 0,\r\n isPm: false,\r\n isH: false,\r\n charIdx: 0,\r\n };\r\n\r\n const len = format.length;\r\n let startIdx = 0;\r\n\r\n for (let i = 0; i < len; ) {\r\n let minLen = Math.min(MAX_CHAR_LENGTH, len - i);\r\n let j = minLen;\r\n for (; j > 0; j--) {\r\n const v = format.substring(i, i + j);\r\n if (EXPRESSIONS_FORMAT.includes(v)) {\r\n const expInfo = expressionsFunction[v];\r\n const val = matchFind(dateStr.substring(startIdx), expInfo[0]);\r\n expInfo[1](dateInfo, val);\r\n startIdx += val.length;\r\n break;\r\n }\r\n }\r\n\r\n if (j < 1) {\r\n i += 1;\r\n startIdx += 1;\r\n } else {\r\n i += j;\r\n }\r\n }\r\n\r\n if (dateInfo.hour != null && !dateInfo.isH) {\r\n if (dateInfo.isPm && +dateInfo.hour !== 12) {\r\n dateInfo.hour = +dateInfo.hour + 12;\r\n } else if (!dateInfo.isPm && +dateInfo.hour === 12) {\r\n dateInfo.hour = 0;\r\n }\r\n }\r\n\r\n let date: Date;\r\n\r\n date = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\r\n\r\n return date;\r\n};\r\n\r\n// match word\r\nconst matchFind = (val: string, regexp: RegExp) => {\r\n const match = regexp.exec(val);\r\n\r\n return match == null ? \"\" : match[0];\r\n};\r\n\r\n// number check regular expression\r\nconst digitsCheck: Record<string, RegExp> = {\r\n twoOptional: /\\d\\d?/,\r\n two: /\\d\\d/,\r\n three: /\\d{3}/,\r\n four: /\\d{4}/,\r\n};\r\n\r\n// word check regular expression\r\nconst word = /[^\\s]+/;\r\n\r\nconst expressionsFunction: Record<string, [RegExp, (dateInfo: DateInfo, val: string) => DateInfo]> = {\r\n YY: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.year = +((\"\" + new Date().getFullYear()).substring(0, 2) + val);\r\n return dateInfo;\r\n },\r\n ],\r\n YYYY: [\r\n digitsCheck[\"four\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.year = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n M: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = +val - 1;\r\n return dateInfo;\r\n },\r\n ],\r\n MM: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = +val - 1;\r\n return dateInfo;\r\n },\r\n ],\r\n MMM: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = Lanauage.getMonthsIdx(val, \"abbr\");\r\n return dateInfo;\r\n },\r\n ],\r\n MMMM: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = Lanauage.getMonthsIdx(val, \"full\");\r\n return dateInfo;\r\n },\r\n ],\r\n D: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n DD: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n d: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n dd: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n ddd: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n return dateInfo;\r\n },\r\n ],\r\n dddd: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n return dateInfo;\r\n },\r\n ],\r\n H: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n dateInfo.isH = true;\r\n return dateInfo;\r\n },\r\n ],\r\n HH: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n dateInfo.isH = true;\r\n return dateInfo;\r\n },\r\n ],\r\n h: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n hh: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n a: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n if (Lanauage.getMessage(\"am\") != val.toLowerCase()) {\r\n dateInfo.isPm = true;\r\n }\r\n return dateInfo;\r\n },\r\n ],\r\n A: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n if (Lanauage.getMessage(\"am\") != val.toLowerCase()) {\r\n dateInfo.isPm = true;\r\n }\r\n return dateInfo;\r\n },\r\n ],\r\n m: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.minute = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n mm: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.minute = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n s: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.second = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n ss: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.second = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n SSS: [\r\n digitsCheck[\"three\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.millisecond = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n};\r\n", "import dateFormat from './format';\r\n\r\nexport default class DaraDate {\r\n\r\n private date;\r\n\r\n constructor(dt: Date) {\r\n this.date = dt;\r\n }\r\n\r\n public setYear(num: number) {\r\n this.date.setFullYear(num);\r\n return this;\r\n }\r\n\r\n public addYear(num: number) {\r\n this.date.setFullYear(this.date.getFullYear() + num);\r\n return this;\r\n }\r\n\r\n public addMonth(num: number) {\r\n this.date.setMonth(this.date.getMonth() + num);\r\n return this;\r\n }\r\n\r\n public setMonth(num: number) {\r\n this.date.setMonth(num);\r\n return this;\r\n }\r\n\r\n public setDate(num: number) {\r\n this.date.setDate(num);\r\n return this;\r\n }\r\n\r\n public addDate(num: number) {\r\n this.date.setDate(this.date.getDate() + num);\r\n return this;\r\n }\r\n\r\n public addWeek(num: number) {\r\n this.date.setDate(this.date.getDate() + (num * 7));\r\n return this;\r\n }\r\n\r\n public addHours(num: number) {\r\n this.date.setHours(this.date.getHours() + num);\r\n return this;\r\n }\r\n\r\n public setHour(num: number) {\r\n this.date.setHours(num);\r\n return this;\r\n }\r\n\r\n public addMinutes(num: number) {\r\n this.date.setMinutes(this.date.getMinutes() + num);\r\n return this;\r\n }\r\n\r\n public setMinutes(num: number) {\r\n this.date.setMinutes(num);\r\n return this;\r\n }\r\n\r\n public addSeconds(num: number) {\r\n this.date.setSeconds(this.date.getSeconds() + num);\r\n return this;\r\n }\r\n\r\n public addMilliseconds(num: number) {\r\n this.date.setMilliseconds(this.date.getMilliseconds() + num);\r\n return this;\r\n }\r\n\r\n public compare(date: Date) {\r\n\r\n if (this.date.valueOf() < date.valueOf()) {\r\n return -1;\r\n } else if (this.date.valueOf() > date.valueOf()) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n public getYear() {\r\n return this.date.getFullYear();\r\n }\r\n\r\n public getMonth() {\r\n return this.date.getMonth() + 1;\r\n }\r\n\r\n public getDate() {\r\n return this.date.getDate();\r\n }\r\n\r\n public getDay() {\r\n return this.date.getDay();\r\n }\r\n\r\n public getTime() {\r\n return this.date.getTime();\r\n }\r\n\r\n public format(format: string): string {\r\n return dateFormat(this.date, format);\r\n }\r\n\r\n public clone() {\r\n return new DaraDate(new Date(this.date.valueOf()));\r\n }\r\n\r\n}", "import { DateTimePickerOptions } from \"@t/DateTimePickerOptions\";\r\nimport { Message } from \"@t/Message\";\r\nimport format from \"./format\";\r\nimport parser from \"./util/parser\";\r\nimport Lanauage from \"./Lanauage\";\r\nimport utils from \"./util/utils\";\r\nimport DaraDate from \"./DaraDate\";\r\nimport { DAY_STYLE_CLASS, DEFAULT_FORMAT, DateViewMode } from \"./constants\";\r\n\r\ndeclare const APP_VERSION: string;\r\n\r\nlet DEFAULT_OPTIONS: DateTimePickerOptions = {\r\n inline: false, // layer or innerhtml\r\n weekStartDay: 0,\r\n initialDate: \"\",\r\n autoClose: true,\r\n isRTL: false,\r\n mode: DateViewMode.date,\r\n enableTodayBtn: true,\r\n showMonthAfterYear: false,\r\n format: \"\",\r\n zIndex: 1000,\r\n minDate: \"\",\r\n maxDate: \"\",\r\n beforeDrawDate: (dt) => {\r\n return {\r\n check: false,\r\n style: \"\",\r\n tooltip: \"\",\r\n };\r\n },\r\n};\r\n\r\nfunction hiddenElement() {\r\n if (document.getElementById(\"hiddenDaraDatetimeElement\") == null) {\r\n document.querySelector(\"body\")?.insertAdjacentHTML(\"beforeend\", `<div id=\"hiddenDaraDatetimeElement\" class=\"daracl-datetime-hidden\"></div>`);\r\n }\r\n\r\n return document.getElementById(\"hiddenDaraDatetimeElement\");\r\n}\r\n\r\nlet daraDatetimeIdx = 0;\r\n\r\n/**\r\n * date timepicker\r\n *\r\n * @class DateTimePicker1\r\n * @typedef {DateTimePicker}\r\n */\r\nexport default class DateTimePicker {\r\n public static VERSION = `${APP_VERSION}`;\r\n public static format = format;\r\n public static parser = parser;\r\n\r\n private readonly options;\r\n\r\n private datetimeElement;\r\n\r\n private targetElement: HTMLElement;\r\n\r\n private currentDate: DaraDate;\r\n\r\n private dateFormat: string;\r\n\r\n private todayDate: string;\r\n\r\n private isInput: boolean = false;\r\n\r\n private isVisible = false;\r\n\r\n private _viewMode: DateViewMode;\r\n\r\n private initMode: DateViewMode;\r\n\r\n private hourInputEle: HTMLInputElement;\r\n\r\n private minuteInputEle: HTMLInputElement;\r\n\r\n private minDate: number;\r\n private maxDate: number;\r\n private minYear: number = -1;\r\n private maxYear: number = -1;\r\n private minMonth: number = -1;\r\n private maxMonth: number = -1;\r\n\r\n // \uC694\uC77C \uC21C\uC11C.\r\n private dayOrder: number[] = [0, 1, 2, 3, 4, 5, 6];\r\n\r\n constructor(selector: string | HTMLElement, options: DateTimePickerOptions, message: Message) {\r\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\r\n\r\n daraDatetimeIdx += 1;\r\n\r\n let selectorElement: HTMLElement;\r\n if (typeof selector === \"string\") {\r\n selectorElement = document.querySelector(selector) as HTMLElement;\r\n } else {\r\n selectorElement = selector;\r\n }\r\n\r\n if (!selectorElement) {\r\n throw new Error(`${selector} datetimepicker element not found`);\r\n }\r\n\r\n this._viewMode = Object.keys(DateViewMode).includes(this.options.mode) ? this.options.mode : DateViewMode.date;\r\n\r\n this.initMode = this._viewMode;\r\n\r\n Lanauage.set(message);\r\n\r\n if (this.initMode == DateViewMode.year) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.year;\r\n } else if (this.initMode == DateViewMode.month) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.month;\r\n } else if (this.initMode == DateViewMode.time) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.time;\r\n } else if (this.initMode == DateViewMode.datetime) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.datetime;\r\n } else {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.date;\r\n }\r\n\r\n let viewDate: DaraDate;\r\n if (this.options.initialDate) {\r\n if (typeof this.options.initialDate === \"string\") {\r\n viewDate = new DaraDate(parser(this.options.initialDate, this.dateFormat) || new Date());\r\n } else {\r\n viewDate = new DaraDate(this.options.initialDate);\r\n }\r\n } else {\r\n viewDate = new DaraDate(new Date());\r\n this.options.initialDate = viewDate.format(this.dateFormat);\r\n }\r\n\r\n this.setWeekDays();\r\n\r\n this.todayDate = viewDate.format(DEFAULT_FORMAT.date);\r\n this.currentDate = viewDate;\r\n this.targetElement = selectorElement;\r\n\r\n this.minDate = this._minDate();\r\n this.maxDate = this._maxDate();\r\n\r\n if (this.options.inline) {\r\n this.datetimeElement = selectorElement;\r\n this.datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} embed`;\r\n } else {\r\n this.isInput = true;\r\n this.targetElement.setAttribute(\"value\", viewDate.format(this.dateFormat));\r\n\r\n const datetimeElement = document.createElement(\"div\");\r\n datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} layer`;\r\n datetimeElement.setAttribute(\"style\", `z-index:${this.options.zIndex};`);\r\n hiddenElement()?.appendChild(datetimeElement);\r\n\r\n this.datetimeElement = datetimeElement;\r\n\r\n this.initTargetEvent();\r\n }\r\n\r\n this.createDatetimeTemplate();\r\n\r\n if (this.isTimeMode()) {\r\n this.hourInputEle = this.datetimeElement.querySelector(\".ddtp-hour\") as HTMLInputElement;\r\n this.minuteInputEle = this.datetimeElement.querySelector(\".ddtp-minute\") as HTMLInputElement;\r\n } else {\r\n this.hourInputEle = {} as HTMLInputElement;\r\n this.minuteInputEle = {} as HTMLInputElement;\r\n }\r\n\r\n this.changeViewMode(this._viewMode);\r\n\r\n this.initHeaderEvent();\r\n\r\n this.initDateEvent();\r\n\r\n this.initTimeEvent();\r\n }\r\n setWeekDays() {\r\n let weekStartDay = this.options.weekStartDay;\r\n\r\n if (weekStartDay == 0) return;\r\n\r\n if (weekStartDay < 0 || weekStartDay > 6) {\r\n weekStartDay = 0;\r\n }\r\n\r\n for (let i = 0; i < 7; i++) {\r\n let day = weekStartDay + i;\r\n\r\n this.dayOrder[i] = day < 7 ? day : day - 7;\r\n }\r\n }\r\n\r\n public static create(selector: string | HTMLElement, options: DateTimePickerOptions, message: Message): DateTimePicker {\r\n return new DateTimePicker(selector, options, message);\r\n }\r\n\r\n /**\r\n * default date format setting\r\n * @example\r\n ```\r\n setDefaultFormat({\r\n year: \"YYYY\",\r\n month: \"YYYY-MM\",\r\n date: \"YYYY-MM-DD\",\r\n time: \"HH:mm\",\r\n datetime: \"YYYY-MM-DD HH:mm\",\r\n });\r\n ```\r\n * @public\r\n * @static\r\n * @param {*} dateFormat\r\n */\r\n public static setDefaultFormat(dateFormat: any) {\r\n Object.assign(DEFAULT_FORMAT, dateFormat);\r\n }\r\n\r\n private _minDate() {\r\n let minDate = this.options.minDate;\r\n\r\n if (minDate != \"\") {\r\n if (typeof minDate === \"string\") {\r\n const dt = parser(minDate, this.dateFormat);\r\n if (!dt) {\r\n return -1;\r\n }\r\n\r\n minDate = dt;\r\n }\r\n this.minYear = minDate.getFullYear();\r\n this.minMonth = +(this.minYear + utils.pad(minDate.getMonth(), 2));\r\n return new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), 0, 0).getTime();\r\n }\r\n return -1;\r\n }\r\n\r\n private _maxDate() {\r\n let maxDate = this.options.maxDate;\r\n\r\n if (maxDate != \"\") {\r\n if (typeof maxDate === \"string\") {\r\n const dt = parser(maxDate, this.dateFormat);\r\n if (!dt) {\r\n return -1;\r\n }\r\n\r\n maxDate = dt;\r\n }\r\n this.maxYear = maxDate.getFullYear();\r\n this.maxMonth = +(this.maxYear + utils.pad(maxDate.getMonth(), 2));\r\n return new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59).getTime();\r\n }\r\n return -1;\r\n }\r\n\r\n public set viewMode(mode: DateViewMode) {\r\n if (this._viewMode === mode) {\r\n return;\r\n }\r\n\r\n this._viewMode = mode;\r\n\r\n this.changeViewMode(mode);\r\n }\r\n\r\n public get viewMode(): DateViewMode {\r\n return this._viewMode;\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4DC change\r\n * @param mode\r\n */\r\n public changeViewMode(mode: DateViewMode) {\r\n this.datetimeElement.querySelector(\".ddtp-datetime\")?.setAttribute(\"view-mode\", mode);\r\n\r\n if (mode === \"year\") {\r\n this.yearDraw();\r\n } else if (mode === \"month\") {\r\n this.monthDraw();\r\n } else {\r\n this.dayDraw();\r\n }\r\n }\r\n\r\n /**\r\n * init header event\r\n *\r\n * @public\r\n */\r\n private initHeaderEvent() {\r\n const isRTL = this.options.isRTL;\r\n this.datetimeElement.querySelector(\".ddtp-move-btn.prev\")?.addEventListener(\"click\", (e: Event) => {\r\n this.moveDate(isRTL ? \"next\" : \"prev\", e);\r\n });\r\n\r\n this.datetimeElement.querySelector(\".ddtp-move-btn.next\")?.addEventListener(\"click\", (e: Event) => {\r\n this.moveDate(isRTL ? \"prev\" : \"next\", e);\r\n });\r\n\r\n this.datetimeElement.querySelector(\".ddtp-header-year\")?.addEventListener(\"click\", (e: Event) => {\r\n this.viewMode = DateViewMode.year;\r\n });\r\n\r\n this.datetimeElement.querySelector(\".ddtp-header-month\")?.addEventListener(\"click\", (e: Event) => {\r\n this.viewMode = DateViewMode.month;\r\n });\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uB2EC\uB825 \uC774\uBCA4\uD2B8\uCC98\uB9AC.\r\n */\r\n private initDateEvent() {\r\n this.datetimeElement.querySelector(\".ddtp-day-body\")?.addEventListener(\"click\", (e: Event) => {\r\n const targetEle = e.target as Element;\r\n\r\n if (targetEle.classList.contains(\"ddtp-day\") || targetEle.closest(\".ddtp-day\")) {\r\n const selectDate = targetEle.getAttribute(\"data-day\") || \"1\";\r\n\r\n const mmDD = selectDate.split(\",\");\r\n\r\n this.currentDate.setMonth(+mmDD[0] - 1);\r\n this.currentDate.setDate(+mmDD[1]);\r\n\r\n if (this.isDayDisabled(this.currentDate)) {\r\n return;\r\n }\r\n\r\n this.datetimeElement.querySelector(\".select\")?.classList.remove(\"select\");\r\n\r\n targetEle.classList.add(\"select\");\r\n\r\n if (this.isTimeMode()) {\r\n this.currentDate.setHour(+this.hourInputEle.value);\r\n this.currentDate.setMinutes(+this.minuteInputEle.value);\r\n }\r\n\r\n this.dateChangeEvent(e);\r\n }\r\n });\r\n\r\n // today click\r\n this.datetimeElement.querySelector(\".time-today\")?.addEventListener(\"click\", (e: Event) => {\r\n const initDate = new DaraDate(parser(this.todayDate, DEFAULT_FORMAT.date) || new Date());\r\n this.currentDate.setYear(initDate.getYear());\r\n this.currentDate.setMonth(initDate.getMonth() - 1);\r\n this.currentDate.setDate(initDate.getDate());\r\n this.changeViewMode(this.initMode);\r\n });\r\n }\r\n\r\n private isTimeMode(): boolean {\r\n return this._viewMode === DateViewMode.time || this._viewMode === DateViewMode.datetime;\r\n }\r\n\r\n /**\r\n * \uC2DC\uAC04 \uBD84 \uC124\uC815 \uC774\uBCA4\uD2B8 \uCC98\uB9AC.\r\n *\r\n * @public\r\n */\r\n public initTimeEvent() {\r\n if (!this.isTimeMode()) return;\r\n\r\n let hh = this.currentDate.format(\"HH\");\r\n\r\n const hourInputEle = this.datetimeElement.querySelector(\".ddtp-hour\") as HTMLInputElement;\r\n const hourRangeEle = this.datetimeElement.querySelector(\".ddtp-hour-range\") as HTMLInputElement;\r\n hourInputEle.value = hh;\r\n hourRangeEle.value = hh;\r\n\r\n hourInputEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n const addVal = utils.pad(targetElement.value, 2);\r\n hourInputEle.value = addVal;\r\n hourRangeEle.value = addVal;\r\n });\r\n\r\n hourRangeEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n hourInputEle.value = utils.pad(targetElement.value, 2);\r\n });\r\n\r\n let mm = this.currentDate.format(\"mm\");\r\n const minuteInputEle = this.datetimeElement.querySelector(\".ddtp-minute\") as HTMLInputElement;\r\n const minuteRangeEle = this.datetimeElement.querySelector(\".ddtp-minute-range\") as HTMLInputElement;\r\n\r\n minuteInputEle.value = mm;\r\n minuteRangeEle.value = mm;\r\n\r\n minuteInputEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n const addVal = utils.pad(targetElement.value, 2);\r\n minuteInputEle.value = addVal;\r\n minuteRangeEle.value = addVal;\r\n });\r\n\r\n minuteRangeEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n minuteInputEle.value = utils.pad(targetElement.value, 2);\r\n });\r\n\r\n this.datetimeElement.querySelector(\".time-select\")?.addEventListener(\"click\", (e: Event) => {\r\n this.currentDate.setHour(+hourInputEle.value);\r\n this.currentDate.setMinutes(+minuteInputEle.value);\r\n this.dateChangeEvent(e);\r\n });\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uC774\uB3D9\r\n * @param moveMode // \uC55E\uB4A4 \uC774\uB3D9 prev, next\r\n * @returns\r\n */\r\n public moveDate(moveMode: string, e: Event) {\r\n if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {\r\n this.currentDate.setDate(1);\r\n this.currentDate.addMonth(\"prev\" === moveMode ? -1 : 1);\r\n this.dayDraw();\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.month) {\r\n this.currentDate.setDate(1);\r\n this.currentDate.addYear(\"prev\" === moveMode ? -1 : 1);\r\n this.monthDraw();\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.year) {\r\n this.currentDate.setDate(1);\r\n this.currentDate.addYear(\"prev\" === moveMode ? -16 : 16);\r\n this.yearDraw();\r\n }\r\n }\r\n\r\n /**\r\n * get date value\r\n *\r\n * @returns\r\n */\r\n public getDateValue() {\r\n return this.currentDate.format(this.dateFormat);\r\n }\r\n\r\n /**\r\n * \uC635\uC158 \uC14B\uD305\r\n * @static\r\n * @param {DateTimePickerOptions} options\r\n */\r\n static setOptions(options: DateTimePickerOptions) {\r\n DEFAULT_OPTIONS = Object.assign({}, DEFAULT_OPTIONS, options);\r\n }\r\n\r\n /**\r\n * \uB2EC\uB825 \uBCF4\uC774\uAE30 \uCC98\uB9AC.\r\n *\r\n * @returns\r\n */\r\n private show() {\r\n if (this.isVisible) {\r\n return;\r\n }\r\n this.isVisible = true;\r\n\r\n const docSize = getDocSize();\r\n this.datetimeElement.classList.remove(\"hide\");\r\n\r\n this.datetimeElement.classList.add(\"show\");\r\n\r\n const rect = this.targetElement.getBoundingClientRect();\r\n\r\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\r\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\r\n\r\n const offsetTop = rect.top + scrollTop;\r\n let top = offsetTop + this.targetElement.offsetHeight + 2;\r\n const left = rect.left + scrollLeft;\r\n\r\n if (top + this.datetimeElement.offsetHeight > docSize.clientHeight) {\r\n const newTop = offsetTop - (this.datetimeElement.offsetHeight + 2);\r\n top = newTop > 0 ? newTop : top;\r\n }\r\n\r\n this.datetimeElement.setAttribute(\"style\", `top:${top}px;left:${left}px;z-index:${this.options.zIndex}`);\r\n\r\n document.addEventListener(\"click\", this._documentClickEvent);\r\n }\r\n\r\n /**\r\n * \uB2EC\uB825 \uC228\uAE30\uAE30\r\n */\r\n private hide() {\r\n this.isVisible = false;\r\n\r\n if (this.options.onClose) {\r\n if (this.options.onClose() === false) {\r\n return;\r\n }\r\n }\r\n\r\n this.datetimeElement.classList.remove(\"show\");\r\n\r\n this.datetimeElement.classList.add(\"hide\");\r\n\r\n document.removeEventListener(\"click\", this._documentClickEvent);\r\n }\r\n\r\n /**\r\n * \uBC14\uD0D5 \uD074\uB9AD\uC2DC \uCE98\uB9B0\uB354 \uC228\uAE40 \uCC98\uB9AC.\r\n *\r\n * @param e\r\n */\r\n private _documentClickEvent = (e: Event) => {\r\n if (this.isVisible && e.target != this.targetElement && !utils.closestElement(e.target as HTMLElement, this.datetimeElement)) {\r\n this.hide();\r\n }\r\n };\r\n\r\n /**\r\n * \uD0C0\uCF13 \uC774\uBCA4\uD2B8 \uCC98\uB9AC.\r\n */\r\n private initTargetEvent() {\r\n if (this.targetElement) {\r\n this.targetElement.addEventListener(\"click\", (e: Event) => {\r\n this.show();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uBCC0\uACBD\uD6C4 \uC774\uBCA4\uD2B8\r\n */\r\n private afterChangeDatepicker() {\r\n const formatValue = this.currentDate.format(this.dateFormat);\r\n\r\n if (this.options.afterChangeDatepicker && utils.isFunction(this.options.afterChangeDatepicker)) {\r\n this.options.afterChangeDatepicker(formatValue, this.viewMode);\r\n }\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uBCC0\uACBD \uC804 \uC774\uBCA4\uD2B8.\r\n * @returns void\r\n */\r\n private beforeChangeDatepicker() {\r\n const formatValue = this.currentDate.format(this.dateFormat);\r\n\r\n if (this.options.beforeChangeDatepicker && utils.isFunction(this.options.beforeChangeDatepicker)) {\r\n const reval = this.options.beforeChangeDatepicker(formatValue, (result: boolean) => {\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n this.refresh(false);\r\n });\r\n\r\n if (reval === false) {\r\n return;\r\n }\r\n\r\n this.refresh(false);\r\n return;\r\n }\r\n\r\n this.refresh(false);\r\n }\r\n\r\n private dateChangeEvent(e: Event) {\r\n const formatValue = this.currentDate.format(this.dateFormat);\r\n\r\n if (this.options.onSelect) {\r\n if (this.options.onSelect(formatValue, this.viewMode, e) === false) {\r\n return;\r\n }\r\n }\r\n\r\n if (this.isInput) {\r\n this.targetElement.setAttribute(\"value\", formatValue);\r\n }\r\n\r\n if (!this.options.inline && this.options.autoClose) {\r\n this.hide();\r\n }\r\n }\r\n\r\n /**\r\n * datepicker template \uADF8\uB9AC\uAE30\r\n */\r\n private createDatetimeTemplate() {\r\n const showMonthAfterYear = this.options.showMonthAfterYear;\r\n\r\n let datetimeTemplate = `<div class=\"ddtp-datetime ${this.options.isRTL ? \"rtl\" : \"\"}\" view-mode=\"${this._viewMode}\">\r\n\t\t\t<div class=\"ddtp-header\">\r\n <span class=\"${showMonthAfterYear ? \"ddtp-header-year\" : \"ddtp-header-month\"}\"></span>\r\n <span class=\"${showMonthAfterYear ? \"ddtp-header-month\" : \"ddtp-header-year\"}\"></span>\r\n\r\n <span class=\"ddtp-date-move\"> \r\n <a href=\"javascript:;\" class=\"ddtp-move-btn prev\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/></svg>\r\n </a>\r\n <a href=\"javascript:;\" class=\"ddtp-move-btn next\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\r\n </a> \r\n </span>\r\n\t\t\t</div>\r\n <div class=\"ddtp-body\">\r\n <table class=\"ddtp-days\">\r\n <thead class=\"ddtp-day-header\">\r\n <tr>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[0]]}\">${Lanauage.getWeeksMessage(this.dayOrder[0])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[1]]}\">${Lanauage.getWeeksMessage(this.dayOrder[1])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[2]]}\">${Lanauage.getWeeksMessage(this.dayOrder[2])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[3]]}\">${Lanauage.getWeeksMessage(this.dayOrder[3])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[4]]}\">${Lanauage.getWeeksMessage(this.dayOrder[4])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[5]]}\">${Lanauage.getWeeksMessage(this.dayOrder[5])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[6]]}\">${Lanauage.getWeeksMessage(this.dayOrder[6])}</td>\t\t\r\n </tr>\r\n </thead>\r\n <tbody class=\"ddtp-day-body\">\r\n </tbody>\r\n \r\n <tfoot class=\"ddtp-day-footer\">\r\n <td colspan=\"7\">\r\n <div style=\"text-align:center;margin-top: 5px;${this.options.enableTodayBtn ? \"\" : \"display:none;\"}\"><button type=\"button\" class=\"time-today\">${Lanauage.getMessage(\"today\")}</button></div>\r\n <div class=\"footer-tooltip\"></div>\r\n </td>\r\n </tfoot>\r\n </table>\r\n\r\n <div class=\"ddtp-times\">\r\n <div class=\"time-container\">\r\n <div class=\"ddtp-time\">\r\n <span>H: </span><input type=\"number\" class=\"ddtp-hour\" min=\"0\" max=\"23\">\r\n <input type=\"range\" min=\"0\" max=\"23\" class=\"ddtp-hour-range\">\r\n </div>\r\n <div class=\"ddtp-time\">\r\n <span>M: </span><input type=\"number\" class=\"ddtp-minute\" min=\"0\" max=\"59\">\r\n <input type=\"range\" min=\"0\" max=\"59\" class=\"ddtp-minute-range\">\r\n </div>\r\n </div>\r\n <div class=\"time-btn\">\r\n <button type=\"button\" class=\"time-select\">${Lanauage.getMessage(\"ok\")}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"ddtp-months\">\r\n </div>\r\n\r\n <div class=\"ddtp-years\">\r\n </div>\r\n </div>\r\n </div>`;\r\n\r\n this.datetimeElement.innerHTML = datetimeTemplate;\r\n }\r\n\r\n public refresh(beforeChangeDatepickerCheck?: boolean) {\r\n if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {\r\n this.dayDraw(beforeChangeDatepickerCheck);\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.month) {\r\n this.monthDraw(beforeChangeDatepickerCheck);\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.year) {\r\n this.yearDraw(beforeChangeDatepickerCheck);\r\n }\r\n }\r\n\r\n /**\r\n * \uB144 \uB2EC\uB825 \uADF8\uB9AC\uAE30\r\n */\r\n private yearDraw(beforeChangeDatepickerCheck?: boolean) {\r\n const currentYear = this.currentDate.format(\"YYYY\");\r\n\r\n if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.year) {\r\n this.beforeChangeDatepicker();\r\n return;\r\n }\r\n\r\n const startYear = +currentYear - 8;\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-header-year\") as Element).textContent = `${startYear} ~ ${startYear + 15}`;\r\n\r\n const beforeDrawDateFlag = utils.isFunction(this.options.beforeDrawDate);\r\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\r\n\r\n const calHTML: string[] = [];\r\n for (let i = 0; i < 16; i++) {\r\n const year = startYear + i;\r\n\r\n const disabled = this.isYearDisabled(year);\r\n\r\n let addStylceClass = disabled ? \" disabled\" : \"\";\r\n\r\n let tooltip = \"\";\r\n if (beforeDrawDateFlag && beforeDrawDateFn) {\r\n const reval = beforeDrawDateFn({ mode: this._viewMode, date: year });\r\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\r\n tooltip = reval.tooltip;\r\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\r\n }\r\n\r\n calHTML.push(`<div class=\"ddtp-year ${addStylceClass}\" data-year=\"${year}\" ${tooltip}>${year}</div>`);\r\n }\r\n (this.datetimeElement.querySelector(\".ddtp-years\") as Element).innerHTML = calHTML.join(\"\");\r\n\r\n if (this.initMode == DateViewMode.year) {\r\n this.afterChangeDatepicker();\r\n }\r\n\r\n this.datetimeElement.querySelectorAll(\".ddtp-year\")?.forEach((yearEle) => {\r\n yearEle.addEventListener(\"click\", (e: Event) => {\r\n const targetEle = e.target as Element;\r\n\r\n if (targetEle) {\r\n const year = targetEle.getAttribute(\"data-year\");\r\n\r\n if (year) {\r\n const numYear = +year;\r\n\r\n if (this.isYearDisabled(numYear)) {\r\n return;\r\n }\r\n\r\n if (this.initMode == DateViewMode.year) {\r\n if (this.isYearDisabled(numYear)) {\r\n return;\r\n }\r\n this.currentDate.setYear(numYear);\r\n this.dateChangeEvent(e);\r\n return;\r\n }\r\n\r\n this.currentDate.setYear(numYear);\r\n this.viewMode = this.initMode;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \uC6D4 \uB2EC\uB825 \uADF8\uB9AC\uAE30\r\n */\r\n private monthDraw(beforeChangeDatepickerCheck?: boolean) {\r\n if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.month) {\r\n this.beforeChangeDatepicker();\r\n return;\r\n }\r\n\r\n const year = this.currentDate.format(\"YYYY\");\r\n (this.datetimeElement.querySelector(\".ddtp-header-year\") as Element).textContent = `${year}`;\r\n\r\n const monthElements = this.datetimeElement.querySelectorAll(\".ddtp-months > .ddtp-month\");\r\n\r\n if (monthElements.length > 0) {\r\n if (this.isYearDisabled(+year)) {\r\n monthElements.forEach((monthEle) => {\r\n if (!monthEle.classList.contains(\"disabled\")) {\r\n monthEle.classList.add(\"disabled\");\r\n }\r\n });\r\n return;\r\n }\r\n\r\n monthElements.forEach((monthEle, idx) => {\r\n if (this.isMonthDisabled(+year, idx)) {\r\n if (!monthEle.classList.contains(\"disabled\")) {\r\n monthEle.classList.add(\"disabled\");\r\n }\r\n } else {\r\n monthEle.classList.remove(\"disabled\");\r\n }\r\n });\r\n\r\n if (this.initMode == DateViewMode.month) {\r\n this.afterChangeDatepicker();\r\n }\r\n\r\n return;\r\n }\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-header-month\") as Element).textContent = this.currentDate.format(\"MMMM\");\r\n\r\n const beforeDrawDateFlag = utils.isFunction(this.options.beforeDrawDate);\r\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\r\n\r\n const calHTML: string[] = [];\r\n for (let i = 0; i < 12; i++) {\r\n const disabled = this.isMonthDisabled(+year, i);\r\n\r\n let addStylceClass = disabled ? \" disabled\" : \"\";\r\n let tooltip = \"\";\r\n if (beforeDrawDateFlag && beforeDrawDateFn) {\r\n const reval = beforeDrawDateFn({ mode: this._viewMode, date: year + \"/\" + (i + 1) });\r\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\r\n tooltip = reval.tooltip;\r\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\r\n }\r\n\r\n calHTML.push(`<div class=\"ddtp-month ${addStylceClass}\" data-month=\"${i}\" ${tooltip}>${Lanauage.getMonthsMessage(i, \"abbr\")}</div>`);\r\n }\r\n (this.datetimeElement.querySelector(\".ddtp-months\") as Element).innerHTML = calHTML.join(\"\");\r\n\r\n if (this.initMode == DateViewMode.month) {\r\n this.afterChangeDatepicker();\r\n }\r\n\r\n this.datetimeElement.querySelectorAll(\".ddtp-month\")?.forEach((monthEle) => {\r\n monthEle.addEventListener(\"click\", (e: Event) => {\r\n const targetEle = e.target as Element;\r\n\r\n if (targetEle) {\r\n const month = targetEle.getAttribute(\"data-month\");\r\n\r\n if (month) {\r\n if (this.isMonthDisabled(this.currentDate.getYear(), +month)) {\r\n return false;\r\n }\r\n\r\n if (this.initMode == DateViewMode.month) {\r\n this.currentDate.setMonth(+month);\r\n this.dateChangeEvent(e);\r\n return;\r\n }\r\n this.currentDate.setMonth(+month);\r\n this.viewMode = this.initMode;\r\n this.dayDraw();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uADF8\uB9AC\uAE30\r\n */\r\n private dayDraw(beforeChangeDatepickerCheck?: boolean) {\r\n if (beforeChangeDatepickerCheck !== false && (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime)) {\r\n this.beforeChangeDatepicker();\r\n return;\r\n }\r\n\r\n let monthFirstDate = this.currentDate.clone();\r\n const currentMonth = monthFirstDate.getMonth();\r\n monthFirstDate.setDate(1);\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-header-year\") as Element).textContent = monthFirstDate.format(\"YYYY\");\r\n (this.datetimeElement.querySelector(\".ddtp-header-month\") as Element).textContent = monthFirstDate.format(\"MMMM\");\r\n\r\n let day = monthFirstDate.getDay();\r\n\r\n day = day - this.dayOrder[0];\r\n\r\n if (day >= 0) {\r\n monthFirstDate.addDate(-day);\r\n } else {\r\n monthFirstDate.addDate(-(7 + day));\r\n }\r\n\r\n const beforeDrawDateFlag = utils.isFunction(this.options.beforeDrawDate);\r\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\r\n\r\n const calHTML = [];\r\n for (let i = 0; i < 42; i++) {\r\n let dateItem;\r\n if (i == 0) {\r\n dateItem = monthFirstDate;\r\n } else {\r\n dateItem = monthFirstDate.clone().addDate(i);\r\n }\r\n\r\n const dateItemFormat = dateItem.format(DEFAULT_FORMAT.date);\r\n\r\n if (i % 7 == 0) {\r\n calHTML.push((i == 0 ? \"\" : \"</tr>\") + \"<tr>\");\r\n }\r\n\r\n let disabled = this.isDayDisabled(dateItem);\r\n\r\n let addStylceClass = DAY_STYLE_CLASS[this.dayOrder[i % 7]];\r\n const dateItemMonth = dateItem.getMonth();\r\n\r\n if (dateItemMonth != currentMonth) {\r\n if (dateItemMonth < currentMonth) {\r\n addStylceClass += dateItemMonth == 1 ? \" new\" : \" old\";\r\n } else {\r\n addStylceClass += currentMonth == 1 && dateItemMonth == 12 ? \" old\" : \" new\";\r\n }\r\n }\r\n\r\n addStylceClass += this.todayDate == dateItemFormat ? \" today\" : \"\";\r\n addStylceClass += disabled ? \" disabled\" : \"\";\r\n\r\n let tooltip = \"\";\r\n if (beforeDrawDateFlag && beforeDrawDateFn) {\r\n const reval = beforeDrawDateFn({ mode: this._viewMode, item: dateItem, date: dateItem.format(this.dateFormat) });\r\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\r\n\r\n addStylceClass += reval.check ? \" event\" : \"\";\r\n tooltip = reval.tooltip;\r\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\r\n }\r\n\r\n calHTML.push(`<td class=\"ddtp-day ${addStylceClass}\" data-day=\"${dateItem.format(\"M,D\")}\" ${tooltip}>`);\r\n calHTML.push(`<span>${dateItem.format(\"d\")}</span>`);\r\n calHTML.push(\"</td>\");\r\n }\r\n\r\n calHTML.push(\"</tr>\");\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-day-body\") as Element).innerHTML = calHTML.join(\"\");\r\n\r\n if (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime) {\r\n this.afterChangeDatepicker();\r\n }\r\n }\r\n\r\n private isDayDisabled(dateItem: DaraDate) {\r\n if ((this.minDate != -1 && this.minDate > dateItem.getTime()) || (this.maxDate != -1 && this.maxDate < dateItem.getTime())) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isYearDisabled(year: number) {\r\n if ((this.minYear != -1 && this.minYear > year) || (this.maxYear != -1 && this.maxYear < year)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isMonthDisabled(year: number, month: number) {\r\n if (this.isYearDisabled(year)) {\r\n return true;\r\n }\r\n\r\n let yearMonth = +(year + utils.pad(month, 2));\r\n\r\n if ((this.minMonth != -1 && this.minMonth > yearMonth) || (this.maxMonth != -1 && this.maxMonth < yearMonth)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static setMessage(message: Message) {\r\n Lanauage.setDefaultMessage(message);\r\n }\r\n}\r\n\r\nfunction getDocSize() {\r\n return {\r\n clientHeight: Math.max(document.documentElement.clientHeight, window.innerHeight || 0),\r\n clientWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),\r\n };\r\n}\r\n", "@charset \"UTF-8\";\n.daracl-datetime-hidden {\n visibility: visible;\n width: 0px;\n height: 0px;\n z-index: 1000;\n}\n\n.daracl-datetime-wrapper {\n --color: #34495e;\n --light: #ffffff;\n --success: #0abf30;\n --error: #e24d4c;\n --warning: #e9bd0c;\n --info: #3498db;\n --background-color: #ffffff;\n --sunday: #f00d0d;\n --border-color: #d3d2d2;\n --select-background-color: #0abf30;\n --button-hover-color: #d4d4d48a;\n --disabled-background-color: #f1f1f18a;\n --today-bg: #a9d5ff;\n}\n\nbody.dark .daracl-datetime-wrapper,\n.daracl-datetime-wrapper.dark {\n --color: #d0d6e1;\n --light: #ffffff;\n --success: #0abf30;\n --error: #e24d4c;\n --warning: #e9bd0c;\n --info: #3498db;\n --background-color: #070d19;\n --sunday: #f00d0d;\n --border-color: #6e7380;\n --today-bg: #5660d9;\n --today-color: #5660d9;\n --select-background-color: #ffffff;\n --button-hover-color: #31316c;\n --disabled-background-color: #818181;\n}\n\n.daracl-datetime-wrapper {\n z-index: 1000;\n display: none;\n}\n.daracl-datetime-wrapper *,\n.daracl-datetime-wrapper *::before,\n.daracl-datetime-wrapper *::after {\n box-sizing: content-box;\n color: var(--color);\n}\n.daracl-datetime-wrapper.layer {\n position: absolute;\n}\n.daracl-datetime-wrapper input {\n background-color: transparent;\n}\n.daracl-datetime-wrapper.show {\n display: block;\n animation: fadeIn 0.5s;\n animation-fill-mode: forwards;\n}\n.daracl-datetime-wrapper.hide {\n animation: fadeOut 0.5s;\n animation-fill-mode: forwards;\n}\n.daracl-datetime-wrapper.embed {\n display: block;\n}\n.daracl-datetime-wrapper .sun > span {\n color: var(--sunday);\n}\n.daracl-datetime-wrapper .ddtp-datetime {\n border-radius: 4px;\n padding: 10px;\n width: 235px;\n background-color: var(--background-color);\n color: var(--color);\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl {\n direction: rtl;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-header .ddtp-header-year,\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-header .ddtp-header-month {\n float: right;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-header .ddtp-date-move {\n float: left;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-body .ddtp-times .time-container {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-body .ddtp-times > .time-btn {\n left: 0px;\n right: auto;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=date] .ddtp-body > .ddtp-days {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=datetime] .ddtp-body > .ddtp-times,\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=datetime] .ddtp-body > .ddtp-days {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=time] .ddtp-body > .ddtp-times {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=time] .ddtp-header {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=year] .ddtp-body > .ddtp-years {\n display: flex;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=year] .ddtp-header-month {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=month] .ddtp-body > .ddtp-months {\n display: flex;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=month] .ddtp-header-month {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-header {\n padding: 2px 5px 10px;\n line-height: 25px;\n height: 25px;\n vertical-align: middle;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-header-year {\n font-weight: bold;\n margin: 0px 10px 0px 0px;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-header-month {\n font-weight: bold;\n margin: 0px 10px 0px 0px;\n vertical-align: top;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move {\n margin-left: auto;\n vertical-align: top;\n float: right;\n direction: ltr;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move .ddtp-move-btn {\n text-decoration: none;\n font-weight: bold;\n display: inline-block;\n height: 24px;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move .ddtp-move-btn > svg {\n fill: var(--color);\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move .ddtp-move-btn:hover {\n background-color: var(--button-hover-color);\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move::after {\n content: \"\";\n clear: both;\n}\n.daracl-datetime-wrapper .ddtp-body {\n margin: -2px -10px;\n font-size: 13px;\n}\n.daracl-datetime-wrapper .ddtp-body > * {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-body button {\n display: block;\n width: 100%;\n margin-bottom: 7px;\n padding: 3px 0px;\n border-radius: 4px;\n border-color: var(--border-color);\n border-width: 1px;\n border-style: solid;\n background-color: var(--background-color);\n}\n.daracl-datetime-wrapper .ddtp-body button:hover {\n background-color: var(--button-hover-color);\n}\n.daracl-datetime-wrapper .ddtp-body .time-today:hover {\n background-color: var(--button-hover-color);\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days {\n letter-spacing: 0px;\n border-collapse: separate;\n border-spacing: 0px;\n margin: 2px 10px;\n width: inherit;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day-label {\n font-weight: bold;\n width: 35px;\n padding: 2px 5px;\n text-align: center;\n line-height: initial;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day {\n position: relative;\n text-align: center;\n padding: 7px;\n cursor: pointer;\n line-height: initial;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.event::after {\n content: \"\u2022\";\n color: #f78536;\n font-size: 1.4em;\n position: absolute;\n left: 2px;\n z-index: 10;\n top: -7px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 30px;\n height: 30px;\n background-color: var(--select-background-color);\n border-radius: 50%;\n opacity: 0;\n z-index: 0;\n transition: opacity 0.2s ease-in;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day:active:before, .daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day:hover:before {\n opacity: 0.7;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.today > span {\n z-index: 2;\n position: relative;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.today:before {\n background-color: var(--today-bg);\n z-index: 1;\n opacity: 1;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.select:before {\n background-color: var(--select-background-color);\n opacity: 0.5;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.old, .daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.new {\n opacity: 0.5;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.disabled {\n background-color: var(--disabled-background-color);\n opacity: 0.5;\n cursor: auto;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.disabled:before {\n background-color: transparent;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times {\n margin: 2px 15px;\n position: relative;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times > .time-container {\n width: calc(100% - 60px);\n display: inline-block;\n height: 60px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times input[type=number] {\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times input[type=number]::-webkit-inner-spin-button, .daracl-datetime-wrapper .ddtp-body .ddtp-times input[type=number]::-webkit-outer-spin-button {\n -webkit-appearance: none;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times > .time-btn {\n position: absolute;\n top: 9px;\n width: 55px;\n right: 0px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times > .time-btn > .time-select {\n height: 40px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time {\n display: table-row;\n width: 160px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > * {\n margin-top: 5px;\n display: table-cell;\n line-height: 20px;\n vertical-align: middle;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > span {\n width: 20px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > input[type=number] {\n width: 45px;\n margin-right: 5px;\n padding-left: 0px;\n border-radius: 4px;\n border-color: var(--border-color);\n border-width: 1px;\n text-align: center;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > input[type=range] {\n width: calc(100% - 60px);\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months {\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: space-between;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month {\n position: relative;\n flex: 1 0 30%;\n margin-bottom: 8px;\n line-height: 50px;\n text-align: center;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 50px;\n height: 50px;\n background-color: var(--select-background-color);\n border-radius: 50%;\n opacity: 0;\n z-index: 0;\n transition: opacity 0.2s ease-in;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month:active:before, .daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month:hover:before {\n opacity: 0.5;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month.disabled {\n background-color: var(--disabled-background-color);\n opacity: 0.5;\n cursor: auto;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month.disabled:before {\n background-color: transparent;\n}\n.daracl-datetime-wrapper .ddtp-years {\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: space-between;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year {\n position: relative;\n flex: 1 0 25%;\n margin-bottom: 8px;\n line-height: 50px;\n text-align: center;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 50px;\n height: 50px;\n background-color: var(--select-background-color);\n border-radius: 50%;\n opacity: 0;\n z-index: 0;\n transition: opacity 0.2s ease-in;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year:active:before, .daracl-datetime-wrapper .ddtp-years > .ddtp-year:hover:before {\n opacity: 0.5;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year.disabled {\n background-color: var(--disabled-background-color);\n opacity: 0.5;\n cursor: auto;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year.disabled:before {\n background-color: transparent;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes fadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXDAzLm9wZW5zb3VyY2VzXFxkYXJhLWRhdGV0aW1lcGlja2VyXFxzdHlsZSIsInNvdXJjZXMiOlsiZGFyYWNsLmRhdGV0aW1lcGlja2VyLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7QUFBQTtBQUFBO0VBR0U7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUlGO0VBQ0U7O0FBSUE7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdFO0FBQUE7RUFFRTs7QUFHRjtFQUNFOztBQUtGO0VBQ0U7O0FBRUY7RUFDRTtFQUNBOztBQUtOO0VBQ0U7O0FBSUE7QUFBQTtFQUVFOztBQUtGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFLRjtFQUNFOztBQUdGO0VBQ0U7O0FBS0Y7RUFDRTs7QUFHRjtFQUNFOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7RUFDQTs7QUFLTjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUtGO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBRUU7RUFDQTs7QUFJQTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUVFOztBQUdGO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBTVI7RUFDRTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFFQTtFQUVFOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBRUU7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQU9WO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFFRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7OztBQU9WO0VBQ0U7SUFDRTs7RUFHRjtJQUNFOzs7QUFJSjtFQUNFO0lBQ0U7O0VBR0Y7SUFDRSIsInNvdXJjZXNDb250ZW50IjpbIi5kYXJhY2wtZGF0ZXRpbWUtaGlkZGVuIHtcclxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gIHdpZHRoOiAwcHg7XHJcbiAgaGVpZ2h0OiAwcHg7XHJcbiAgei1pbmRleDogMTAwMDtcclxufVxyXG5cclxuLmRhcmFjbC1kYXRldGltZS13cmFwcGVyIHtcclxuICAtLWNvbG9yOiAjMzQ0OTVlO1xyXG4gIC0tbGlnaHQ6ICNmZmZmZmY7XHJcbiAgLS1zdWNjZXNzOiAjMGFiZjMwO1xyXG4gIC0tZXJyb3I6ICNlMjRkNGM7XHJcbiAgLS13YXJuaW5nOiAjZTliZDBjO1xyXG4gIC0taW5mbzogIzM0OThkYjtcclxuICAtLWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XHJcbiAgLS1zdW5kYXk6ICNmMDBkMGQ7XHJcbiAgLS1ib3JkZXItY29sb3I6ICNkM2QyZDI7XHJcbiAgLS1zZWxlY3QtYmFja2dyb3VuZC1jb2xvcjogIzBhYmYzMDtcclxuICAtLWJ1dHRvbi1ob3Zlci1jb2xvcjogI2Q0ZDRkNDhhO1xyXG4gIC0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMThhO1xyXG4gIC0tdG9kYXktYmc6ICNhOWQ1ZmY7XHJcbn1cclxuXHJcbmJvZHkuZGFyayAuZGFyYWNsLWRhdGV0aW1lLXdyYXBwZXIsXHJcbi5kYXJhY2wtZGF0ZXRpbWUtd3JhcHBlci5kYXJrIHtcclxuICAtLWNvbG9yOiAjZDBkNmUxO1xyXG4gIC0tbGlnaHQ6ICNmZmZmZmY7XHJcbiAgLS1zdWNjZXNzOiAjMGFiZjMwO1xyXG4gIC0tZXJyb3I6ICNlMjRkNGM7XHJcbiAgLS13YXJuaW5nOiAjZTliZDBjO1xyXG4gIC0taW5mbzogIzM0OThkYjtcclxuICAtLWJhY2tncm91bmQtY29sb3I6ICMwNzBkMTk7XHJcbiAgLS1zdW5kYXk6ICNmMDBkMGQ7XHJcbiAgLS1ib3JkZXItY29sb3I6ICM2ZTczODA7XHJcbiAgLS10b2RheS1iZzogIzU2NjBkOTtcclxuICAtLXRvZGF5LWNvbG9yOiAjNTY2MGQ5O1xyXG4gIC0tc2VsZWN0LWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XHJcbiAgLS1idXR0b24taG92ZXItY29sb3I6ICMzMTMxNmM7XHJcbiAgLS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOiAjODE4MTgxO1xyXG59XHJcblxyXG4uZGFyYWNsLWRhdGV0aW1lLXdyYXBwZXIge1xyXG4gIHotaW5kZXg6IDEwMDA7XHJcbiAgZGlzcGxheTogbm9uZTtcclxuXHJcbiAgKixcclxuICAqOjpiZWZvcmUsXHJcbiAgKjo6YWZ0ZXIge1xyXG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgJi5sYXllciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgfVxyXG5cclxuICBpbnB1dCB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICB9XHJcblxyXG4gICYuc2hvdyB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGFuaW1hdGlvbjogZmFkZUluIDAuNXM7XHJcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcclxuICB9XHJcblxyXG4gICYuaGlkZSB7XHJcbiAgICBhbmltYXRpb246IGZhZGVPdXQgMC41cztcclxuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xyXG4gICAgLy9hbmltYXRpb246IGRhcmFUb2FzdEhpZGUgMC4zcyBlYXNlIGZvcndhcmRzO1xyXG4gIH1cclxuXHJcbiAgJi5lbWJlZCB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICB9XHJcblxyXG4gIC5zdW4ge1xyXG4gICAgJiA+IHNwYW4ge1xyXG4gICAgICBjb2xvcjogdmFyKC0tc3VuZGF5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kZHRwLWRhdGV0aW1lIHtcclxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICB3aWR0aDogMjM1cHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XHJcbiAgICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XHJcblxyXG4gICAgJi5ydGwge1xyXG4gICAgICBkaXJlY3Rpb246IHJ0bDtcclxuXHJcbiAgICAgIC5kZHRwLWhlYWRlciB7XHJcbiAgICAgICAgLmRkdHAtaGVhZGVyLXllYXIsXHJcbiAgICAgICAgLmRkdHAtaGVhZGVyLW1vbnRoIHtcclxuICAgICAgICAgIGZsb2F0OiByaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kZHRwLWRhdGUtbW92ZSB7XHJcbiAgICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5kZHRwLWJvZHkgLmRkdHAtdGltZXMge1xyXG4gICAgICAgIC50aW1lLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICAgICAgJiA+IC50aW1lLWJ0biB7XHJcbiAgICAgICAgICBsZWZ0OiAwcHg7XHJcbiAgICAgICAgICByaWdodDogYXV0bztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cImRhdGVcIl0gLmRkdHAtYm9keSA+IC5kZHRwLWRheXMge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cImRhdGV0aW1lXCJdIHtcclxuICAgICAgLmRkdHAtYm9keSA+IC5kZHRwLXRpbWVzLFxyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAtZGF5cyB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cInRpbWVcIl0ge1xyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAtdGltZXMge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuZGR0cC1oZWFkZXIge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cInllYXJcIl0ge1xyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAteWVhcnMge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5kZHRwLWhlYWRlci1tb250aCB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICZbdmlldy1tb2RlPVwibW9udGhcIl0ge1xyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAtbW9udGhzIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuZGR0cC1oZWFkZXItbW9udGgge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kZHRwLWhlYWRlciB7XHJcbiAgICBwYWRkaW5nOiAycHggNXB4IDEwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogMjVweDtcclxuICAgIGhlaWdodDogMjVweDtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblxyXG4gICAgLmRkdHAtaGVhZGVyLXllYXIge1xyXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgbWFyZ2luOiAwcHggMTBweCAwcHggMHB4O1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLmRkdHAtaGVhZGVyLW1vbnRoIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgIG1hcmdpbjogMHB4IDEwcHggMHB4IDBweDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC5kZHRwLWRhdGUtbW92ZSB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICAgIGRpcmVjdGlvbjogbHRyO1xyXG5cclxuICAgICAgLmRkdHAtbW92ZS1idG4ge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xyXG5cclxuICAgICAgICA+IHN2ZyB7XHJcbiAgICAgICAgICBmaWxsOiB2YXIoLS1jb2xvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ob3Zlci1jb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmOjphZnRlciB7XHJcbiAgICAgICAgY29udGVudDogXCJcIjtcclxuICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmRkdHAtYm9keSB7XHJcbiAgICBtYXJnaW46IC0ycHggLTEwcHg7XHJcbiAgICBmb250LXNpemU6IDEzcHg7XHJcblxyXG4gICAgPiAqIHtcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDdweDtcclxuICAgICAgcGFkZGluZzogM3B4IDBweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1jb2xvcik7XHJcbiAgICAgIGJvcmRlci13aWR0aDogMXB4O1xyXG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ob3Zlci1jb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAudGltZS10b2RheSB7XHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ob3Zlci1jb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuZGR0cC1kYXlzIHtcclxuICAgICAgbGV0dGVyLXNwYWNpbmc6IDBweDtcclxuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcclxuICAgICAgYm9yZGVyLXNwYWNpbmc6IDBweDtcclxuICAgICAgbWFyZ2luOiAycHggMTBweDtcclxuICAgICAgd2lkdGg6IGluaGVyaXQ7XHJcblxyXG4gICAgICAuZGR0cC1kYXktbGFiZWwge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIHdpZHRoOiAzNXB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDJweCA1cHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBpbml0aWFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuZGR0cC1kYXkge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgcGFkZGluZzogN3B4O1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBsaW5lLWhlaWdodDogaW5pdGlhbDtcclxuXHJcbiAgICAgICAgJi5ldmVudDo6YWZ0ZXIge1xyXG4gICAgICAgICAgY29udGVudDogXCLigKJcIjtcclxuICAgICAgICAgIGNvbG9yOiAjZjc4NTM2O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxLjRlbTtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgIGxlZnQ6IDJweDtcclxuICAgICAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICAgICAgdG9wOiAtN3B4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgY29udGVudDogXCJcIjtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgbGVmdDogNTAlO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgIHdpZHRoOiAzMHB4O1xyXG4gICAgICAgICAgaGVpZ2h0OiAzMHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2VsZWN0LWJhY2tncm91bmQtY29sb3IpO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgICAgIHotaW5kZXg6IDA7XHJcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1pbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6YWN0aXZlOmJlZm9yZSxcclxuICAgICAgICAmOmhvdmVyOmJlZm9yZSB7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XHJcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLnRvZGF5IHtcclxuICAgICAgICAgID4gc3BhbiB7XHJcbiAgICAgICAgICAgIHotaW5kZXg6IDI7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRvZGF5LWJnKTtcclxuICAgICAgICAgICAgei1pbmRleDogMTtcclxuICAgICAgICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2Utb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5zZWxlY3Q6YmVmb3JlIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlbGVjdC1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYub2xkLFxyXG4gICAgICAgICYubmV3IHtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IGF1dG87XHJcblxyXG4gICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuZGR0cC10aW1lcyB7XHJcbiAgICAgIG1hcmdpbjogMnB4IDE1cHg7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHJcbiAgICAgID4gLnRpbWUtY29udGFpbmVyIHtcclxuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNjBweCk7XHJcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgIGhlaWdodDogNjBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5wdXRbdHlwZT1cIm51bWJlclwiXSB7XHJcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XHJcbiAgICAgICAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xyXG5cclxuICAgICAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxyXG4gICAgICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xyXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgPiAudGltZS1idG4ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICB0b3A6IDlweDtcclxuICAgICAgICB3aWR0aDogNTVweDtcclxuICAgICAgICByaWdodDogMHB4O1xyXG4gICAgICAgID4gLnRpbWUtc2VsZWN0IHtcclxuICAgICAgICAgIGhlaWdodDogNDBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5kZHRwLXRpbWUge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcclxuICAgICAgICB3aWR0aDogMTYwcHg7XHJcblxyXG4gICAgICAgID4gKiB7XHJcbiAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiBzcGFuIHtcclxuICAgICAgICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiBpbnB1dFt0eXBlPVwibnVtYmVyXCJdIHtcclxuICAgICAgICAgIHdpZHRoOiA0NXB4O1xyXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDBweDtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xyXG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiBpbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xyXG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDYwcHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5kZHRwLW1vbnRocyB7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgICAgPiAuZGR0cC1tb250aCB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIGZsZXg6IDEgMCAzMCU7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcblxyXG4gICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICB3aWR0aDogNTBweDtcclxuICAgICAgICAgIGhlaWdodDogNTBweDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlbGVjdC1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgICAgICB6LWluZGV4OiAwO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UtaW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmFjdGl2ZTpiZWZvcmUsXHJcbiAgICAgICAgJjpob3ZlcjpiZWZvcmUge1xyXG4gICAgICAgICAgb3BhY2l0eTogMC41O1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2Utb3V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5kaXNhYmxlZCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIGN1cnNvcjogYXV0bztcclxuXHJcbiAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmRkdHAteWVhcnMge1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuXHJcbiAgICA+IC5kZHRwLXllYXIge1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIGZsZXg6IDEgMCAyNSU7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG5cclxuICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB3aWR0aDogNTBweDtcclxuICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2VsZWN0LWJhY2tncm91bmQtY29sb3IpO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICAgIHotaW5kZXg6IDA7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UtaW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6YWN0aXZlOmJlZm9yZSxcclxuICAgICAgJjpob3ZlcjpiZWZvcmUge1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpO1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICBjdXJzb3I6IGF1dG87XHJcblxyXG4gICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBmYWRlSW4ge1xyXG4gIGZyb20ge1xyXG4gICAgb3BhY2l0eTogMDtcclxuICB9XHJcblxyXG4gIHRvIHtcclxuICAgIG9wYWNpdHk6IDE7XHJcbiAgfVxyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIGZhZGVPdXQge1xyXG4gIGZyb20ge1xyXG4gICAgb3BhY2l0eTogMTtcclxuICB9XHJcblxyXG4gIHRvIHtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgfVxyXG59XHJcbiJdfQ== */", "import DaraDateTimePicker from \"./DateTimePicker\";\r\n\r\nimport \"../style/daracl.datetimepicker.scss\";\r\n\r\nexport = DaraDateTimePicker;\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport DateTimePicker from \"@daracl/datetimepicker\";\r\n\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class DateRender extends Render {\r\n private element: HTMLInputElement;\r\n private dateObj: any;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n let dateOnSelectEvent: any;\r\n this.field.customOptions = Object.assign({}, this.field.customOptions);\r\n if (typeof this.field.customOptions.onSelect !== \"undefined\") {\r\n dateOnSelectEvent = typeof this.field.customOptions.onSelect;\r\n }\r\n\r\n if (utils.isUndefined(this.field.customOptions.mode)) {\r\n if (this.field.renderType == \"datemonth\" || this.field.renderType == \"datehour\") {\r\n this.field.customOptions.mode = this.field.renderType.replace(\"date\", \"\");\r\n } else {\r\n this.field.customOptions.mode = this.field.renderType;\r\n }\r\n }\r\n\r\n this.field.customOptions.onSelect = (dt: any, e: Event) => {\r\n if (dateOnSelectEvent) {\r\n dateOnSelectEvent.call(null, dt, e);\r\n }\r\n\r\n this.setValue(dt);\r\n\r\n this.valid();\r\n };\r\n\r\n this.dateObj = new DateTimePicker(this.element, this.field.customOptions, {} as any);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field text help-icon\" autocomplete=\"off\" readonly/>\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport * as utils from \"./utils\";\r\nimport { FIELD_POSITION_STYLE, ALIGN } from \"src/constants\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\n\r\nexport default {\r\n /**\r\n * field style \uCC98\uB9AC\r\n *\r\n * @param formOptions FormOptions\r\n * @param field FormField\r\n * @param beforeField FormField\r\n * @returns FieldStyle\r\n */\r\n fieldStyle(formOptions: FormOptions, field: FormField, beforeField?: FormField | null, isLabelHide?: boolean): FieldStyle {\r\n const fieldStyle = {\r\n rowStyleClass: field.orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\r\n fieldClass: \"\",\r\n fieldStyle: \"\",\r\n labelClass: \"\",\r\n labelStyle: \"\",\r\n labelAlignClass: \"\",\r\n valueClass: \"\",\r\n valueStyle: \"\",\r\n tabAlignClass: \"\",\r\n };\r\n\r\n const defaultLabelWidth = beforeField?.style?.labelWidth ?? formOptions.style.labelWidth ?? \"3\";\r\n let defaultValueWidth = beforeField?.style?.valueWidth ?? formOptions.style.valueWidth ?? \"9\";\r\n const position = beforeField?.style?.position ?? formOptions.style.position;\r\n\r\n const width = field.style?.width;\r\n const positionArr = FIELD_POSITION_STYLE[field.style?.position] ?? FIELD_POSITION_STYLE[position] ?? FIELD_POSITION_STYLE.top;\r\n\r\n fieldStyle.fieldClass = `${positionArr[0]} ${field.style?.customClass || \"\"}`;\r\n if (width) {\r\n if (utils.isNumber(width)) {\r\n fieldStyle.fieldClass += utils.isNumber(width) ? ` col-xs-${width}` : \"\";\r\n } else {\r\n fieldStyle.fieldStyle = utils.isNumber(width) ? \"\" : `width:${width};`;\r\n }\r\n }\r\n\r\n fieldStyle.tabAlignClass = \"tab-al-\" + ([\"right\", \"center\"].includes(field.style?.tabAlign) ? field.style.tabAlign : \"left\");\r\n\r\n const labelWidth = field.style?.labelWidth || defaultLabelWidth;\r\n fieldStyle.labelAlignClass = positionArr[1];\r\n\r\n if (!isLabelHide && labelWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\r\n if (utils.isNumber(labelWidth)) {\r\n const labelWidthValue = +labelWidth;\r\n defaultValueWidth = 12 - labelWidthValue;\r\n fieldStyle.labelClass = `col-xs-${labelWidthValue}`;\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : `col-xs-${defaultValueWidth}`;\r\n } else {\r\n fieldStyle.labelStyle = `width:${labelWidth};`;\r\n }\r\n }\r\n\r\n const valueWidth = field.style?.valueWidth || defaultValueWidth;\r\n if (isLabelHide && ![\"left\", \"right\"].includes(positionArr[0])) {\r\n fieldStyle.valueClass = \"col-full\";\r\n } else {\r\n if (valueWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\r\n if (utils.isNumber(valueWidth)) {\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : `col-xs-${valueWidth}`;\r\n } else {\r\n fieldStyle.valueStyle = `width:${valueWidth};`;\r\n }\r\n } else {\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : \"\";\r\n }\r\n }\r\n\r\n fieldStyle.fieldClass = spaceReplace(fieldStyle.fieldClass);\r\n fieldStyle.labelClass = spaceReplace(fieldStyle.labelClass);\r\n fieldStyle.valueClass = spaceReplace(fieldStyle.valueClass);\r\n\r\n return fieldStyle;\r\n },\r\n};\r\n\r\nfunction spaceReplace(str: string): string {\r\n return str.replace(/\\s+/g, \" \").trim();\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage } from \"src/util/validUtils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport FormTemplate from \"src/FormTemplate\";\r\nimport styleUtils from \"src/util/styleUtils\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class TabRender extends Render {\r\n private customFunction;\r\n private tabContainerElement: HTMLElement;\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n\r\n this.mounted();\r\n }\r\n\r\n mounted() {\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n this.tabContainerElement.querySelectorAll(\".tab-item\").forEach((tabItem) => {\r\n tabItem.addEventListener(\"click\", (e: any) => {\r\n this.clickEventHandler(tabItem, e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * tab item click\r\n *\r\n * @param {Element} tabItem\r\n * @param {*} evt\r\n */\r\n private clickEventHandler(tabItem: Element, evt: any) {\r\n this.setActive(tabItem.getAttribute(\"data-tab-id\") ?? \"\");\r\n }\r\n\r\n public setActive(tabId: string): void {\r\n const tabItem = this.tabContainerElement.querySelector(`[data-tab-id=\"${tabId}\"]`);\r\n\r\n if (!tabItem) return;\r\n\r\n if (!tabItem.classList.contains(\"active\")) {\r\n for (let item of tabItem?.parentElement?.children ?? []) {\r\n item.classList.remove(\"active\");\r\n }\r\n tabItem.classList.add(\"active\");\r\n }\r\n\r\n const tabPanel = this.rowElement.querySelector(`[tab-panel-id=\"${tabId}\"]`);\r\n\r\n if (!tabPanel?.classList.contains(\"active\")) {\r\n for (let item of tabPanel?.parentElement?.children ?? []) {\r\n item.classList.remove(\"active\");\r\n }\r\n\r\n tabPanel?.classList.add(\"active\");\r\n }\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * tab template\r\n *\r\n * @param {FormField} field\r\n * @param {FormTemplate} formTemplate\r\n * @param {FormOptions} options\r\n * @returns {string} template string\r\n */\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const formTemplate = this.daraForm.formTemplate;\r\n const options = this.daraForm.getOptions();\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n //tab \uC774\uBCA4\uD2B8 \uCC98\uB9AC \uD560\uAC83.\r\n let fieldStyle = styleUtils.fieldStyle(options, field);\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field \">\r\n <div class=\"tab-header ${fieldStyle.tabAlignClass}\"></div>\r\n </div>\r\n <div class=\"df-tab-body\"></div>\r\n `;\r\n\r\n if (field.children) {\r\n let firstFlag = true;\r\n\r\n const formOptions = this.getForm().getOptions();\r\n\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(formOptions, field, null, formTemplate.isLabelHide(field));\r\n\r\n for (const childField of field.children) {\r\n childField.$parent = field;\r\n formTemplate.addRowFieldInfo(childField);\r\n let id = childField.$key;\r\n\r\n let tabTemplate = `<span class=\"tab-item ${firstFlag ? \"active\" : \"\"}\" data-tab-id=\"${id}\"><a href=\"javascript:;\">${childField.label}</a></span>`;\r\n\r\n let tabBodyTemplate = `<div class=\"tab-panel ${firstFlag ? \"active\" : \"\"}\" tab-panel-id=\"${id}\">${Render.getDescriptionTemplate(childField)}\r\n <div class=\"tab-group\"></div>\r\n </div>`;\r\n\r\n const tabElement = utils.templateToElement(tabTemplate);\r\n const tabBodyElement = utils.templateToElement(tabBodyTemplate);\r\n\r\n firstFlag = false;\r\n if (tabElement) {\r\n fieldContainerElement.querySelector(\".tab-header\")?.appendChild(tabElement);\r\n }\r\n\r\n if (tabBodyElement) {\r\n fieldContainerElement.querySelector(\".df-tab-body\")?.appendChild(tabBodyElement);\r\n\r\n if (childField.children) {\r\n let tabFormOptions = {\r\n style: {\r\n width: formOptions.style.width ?? \"100%\",\r\n labelWidth: formOptions.style.labelWidth ?? 3,\r\n valueWidth: formOptions.style.valueWidth ?? 9,\r\n position: formOptions.style.position ?? \"left-right\",\r\n },\r\n useTypeValue: formOptions.useTypeValue,\r\n autoCreate: false,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n } as FormOptions;\r\n\r\n childField.$tabForm = new DaraForm(document.createElement(\"div\"), tabFormOptions);\r\n\r\n childField.$instance = new (childField.$renderType as any)(childField, tabBodyElement?.querySelector(\".tab-group\"), childField.$tabForm);\r\n\r\n childField.$tabForm.formTemplate.childTemplate(childField, fieldStyle);\r\n }\r\n }\r\n }\r\n\r\n this.tabContainerElement = fieldContainerElement;\r\n }\r\n }\r\n\r\n getValue(): any {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n let allTabValue = {} as any;\r\n\r\n let useTypeValue = this.getForm().getOptions().useTypeValue;\r\n\r\n for (const childField of this.field.children) {\r\n const childFieldValue = childField.$tabForm?.getValue(false);\r\n if (useTypeValue) {\r\n allTabValue[childField.$validName] = childFieldValue;\r\n } else {\r\n for (let [key, value] of Object.entries(childFieldValue)) {\r\n allTabValue[key] = value;\r\n }\r\n }\r\n }\r\n return allTabValue;\r\n }\r\n\r\n setValue(value: any): void {\r\n for (const childField of this.field.children) {\r\n let tabChildValue = value[childField.$validName];\r\n\r\n if (tabChildValue) {\r\n childField.$tabForm?.setValue(tabChildValue);\r\n }\r\n }\r\n }\r\n\r\n reset() {}\r\n\r\n getElement(): Element {\r\n return this.rowElement;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n\r\n const field = this.field;\r\n\r\n for (const childField of field.children) {\r\n const validResult = childField.$tabForm?.validForm();\r\n\r\n if (validResult && validResult.length > 0) {\r\n const firstItem = validResult[0];\r\n\r\n if (firstItem.message) {\r\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\r\n\r\n return firstItem;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage, resetRowElementStyleClass } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport styleUtils from \"src/util/styleUtils\";\r\nimport FormTemplate from \"src/FormTemplate\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\nimport { NumberKeyMap } from \"@t/DataMap\";\r\n\r\nlet $$idx = 0;\r\n\r\nexport default class GridRender extends Render {\r\n private customFunction;\r\n private gridForm;\r\n private allAddRowInfo = {} as NumberKeyMap;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n\r\n const gridFormOptions = {\r\n style: {\r\n width: \"100%\",\r\n labelWidth: 3,\r\n valueWidth: 9,\r\n position: \"left-right\",\r\n },\r\n autoCreate: false,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n } as FormOptions;\r\n\r\n this.gridForm = new DaraForm(document.createElement(\"div\"), gridFormOptions);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n this.addRow();\r\n\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n this.rowElement.querySelector(\".df-grid-add-row-btn\")?.addEventListener(\"click\", (evt) => {\r\n this.addRow();\r\n });\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let theadTemplate = [];\r\n let colgroupTemplate = [];\r\n let addBtnTemplate = [];\r\n addBtnTemplate.push(\"\");\r\n\r\n if (field.children) {\r\n colgroupTemplate.push(\"<colgroup>\");\r\n\r\n theadTemplate.push(\"<tr>\");\r\n\r\n colgroupTemplate.push(`<col style=\"width:38px\">`);\r\n theadTemplate.push(\"<th>\");\r\n if (field.gridOptions?.disableAddButton !== true) {\r\n theadTemplate.push(`<button type=\"button\" class=\"df-btn df-grid-add-row-btn\" title=\"Add\"><i class=\"df-icon df-add-icon\"></i></button>`);\r\n }\r\n theadTemplate.push(\"</th>\");\r\n\r\n for (const childField of field.children) {\r\n colgroupTemplate.push(`<col style=\"width:${childField.style?.width ?? \"*\"}\">`);\r\n theadTemplate.push(`<th class=\"df-grid-header\">${childField.label}</th>`);\r\n }\r\n colgroupTemplate.push(\"</colgroup>\");\r\n theadTemplate.push(\"</tr>\");\r\n }\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-grid-field\">\r\n ${addBtnTemplate.join(\"\")}\r\n <div class=\"df-grid-container ${field.style?.position ?? \"\"}\" style=\"height:${field.gridOptions?.height ?? \"auto\"};\">\r\n <table class=\"df-grid\">${colgroupTemplate.join(\"\")}<thead>${theadTemplate.join(\"\")}</thead><tbody></tbody></table>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * add row\r\n */\r\n addRow(valueItem?: any): void {\r\n let rowTemplate = [];\r\n\r\n const options = this.daraForm.getOptions();\r\n const formTemplate = this.gridForm.formTemplate;\r\n const parentName = this.field.$xssName;\r\n\r\n ++$$idx;\r\n let addColumns = [];\r\n rowTemplate.push(`<tr class=\"grid-row\">`);\r\n\r\n rowTemplate.push(\"<td>\");\r\n if (this.field.gridOptions?.disableRemoveButton !== true) {\r\n rowTemplate.push(`<button type=\"button\" data-row-idx=\"${$$idx}\" class=\"df-btn df-grid-row-remove\"><i class=\"df-icon df-remove-icon\"></i></button>`);\r\n }\r\n rowTemplate.push(\"</td>\");\r\n\r\n for (const childField of this.field.children) {\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(options, childField, null, true);\r\n\r\n let columnField = utils.merge({}, childField) as FormField;\r\n\r\n addColumns.push(columnField);\r\n columnField.$orgin = childField;\r\n columnField.name = columnField.name + \"_\" + $$idx;\r\n columnField.$xssName = parentName + \"_\" + utils.getXssFieldName(columnField);\r\n\r\n formTemplate.addRowFieldInfo(columnField);\r\n\r\n rowTemplate.push(`<td id=\"${columnField.$xssName}\"><div class=\"df-field-container ${columnField.required ? \"required\" : \"\"} \" style=\"${fieldStyle.valueStyle}\"></div></td>`);\r\n }\r\n rowTemplate.push(\"</tr>\");\r\n\r\n this.allAddRowInfo[$$idx] = addColumns;\r\n\r\n const addRowElement = utils.templateToElement(rowTemplate.join(\"\"));\r\n\r\n if (addRowElement) {\r\n this.rowElement.querySelector(\"tbody\")?.append(addRowElement);\r\n\r\n addRowElement.querySelector(\".df-grid-row-remove\")?.addEventListener(\"click\", (evt) => {\r\n this.removeRow(evt);\r\n });\r\n }\r\n\r\n valueItem = valueItem ?? {};\r\n for (let columnField of addColumns) {\r\n columnField.$instance = new (columnField.$renderType as any)(columnField, addRowElement?.querySelector(`#${columnField.$xssName}`), this.gridForm);\r\n\r\n if (valueItem[columnField.$orgin.name]) {\r\n columnField.$instance.setValue(valueItem[columnField.$orgin.name]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * remove row\r\n *\r\n * @param evt event\r\n */\r\n removeRow(evt: Event): void {\r\n const target = evt.target as Element;\r\n\r\n const rowElement = target.closest(\"tr\");\r\n\r\n if (rowElement) {\r\n if (rowElement.parentElement?.childElementCount == 1) return;\r\n\r\n let rowIdx = (evt.currentTarget as Element)?.getAttribute(\"data-row-idx\") || \"-1\";\r\n\r\n this.removeFieldInfo(rowIdx);\r\n rowElement.remove();\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param rowIdx row index\r\n */\r\n removeFieldInfo(rowIdx?: string) {\r\n let removeFieldArrs = [] as any;\r\n if (utils.isEmpty(rowIdx)) {\r\n for (let key in this.allAddRowInfo) {\r\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[key]);\r\n }\r\n this.allAddRowInfo = {} as NumberKeyMap;\r\n } else if (rowIdx) {\r\n const rowIdxNum = parseInt(rowIdx, 10);\r\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[rowIdxNum]);\r\n delete this.allAddRowInfo[rowIdxNum];\r\n }\r\n\r\n for (let columnField of removeFieldArrs) {\r\n this.gridForm.getFieldInfoMap().removeFieldInfo(columnField.name);\r\n }\r\n }\r\n\r\n allRemoveRow(): void {\r\n this.rowElement.querySelector(\"tbody\")?.replaceChildren();\r\n this.removeFieldInfo();\r\n }\r\n\r\n getValue() {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n let result = [];\r\n const children = this.field.children;\r\n const childrenLength = children.length;\r\n for (let idx in this.allAddRowInfo) {\r\n const rowColumns = this.allAddRowInfo[idx];\r\n\r\n let rowInfo = {} as any;\r\n for (let childIdx = 0; childIdx < childrenLength; childIdx++) {\r\n let childField = children[childIdx];\r\n rowInfo[childField.name] = this.gridForm.getFieldValue(rowColumns[childIdx].name); // rowColumns[childIdx].$instance.getValue();\r\n }\r\n\r\n result.push(rowInfo);\r\n }\r\n return result;\r\n }\r\n\r\n setValue(value: any): void {\r\n this.field.$value = value;\r\n\r\n let valueArr: any[] = [];\r\n if (Array.isArray(value)) {\r\n valueArr = value;\r\n } else {\r\n if (utils.isPlainObject(value)) {\r\n valueArr.push(value);\r\n }\r\n }\r\n\r\n this.allRemoveRow();\r\n\r\n for (let valueItem of valueArr) {\r\n this.addRow(valueItem);\r\n }\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement() {\r\n if (this.customFunction.getElement) {\r\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\r\n }\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n\r\n const validResult = this.gridForm.validForm();\r\n\r\n if (validResult.length > 0) {\r\n const firstItem = validResult[0];\r\n\r\n if (firstItem.message) {\r\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\r\n\r\n return firstItem;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import NumberRender from \"src/renderer/NumberRender\";\r\nimport TextAreaRender from \"src/renderer/TextAreaRender\";\r\nimport DropdownRender from \"src/renderer/DropdownRender\";\r\nimport TextRender from \"src/renderer/TextRender\";\r\nimport CheckboxRender from \"src/renderer/CheckboxRender\";\r\nimport RadioRender from \"src/renderer/RadioRender\";\r\nimport PasswordRender from \"src/renderer/PasswordRender\";\r\nimport FileRender from \"src/renderer/FileRender\";\r\nimport CustomRender from \"./renderer/CustomRender\";\r\nimport GroupRender from \"./renderer/GroupRender\";\r\nimport HiddenRender from \"./renderer/HiddenRender\";\r\nimport ButtonRender from \"./renderer/ButtonRender\";\r\nimport RangeRender from \"./renderer/RangeRender\";\r\nimport DateRender from \"./renderer/DateRender\";\r\nimport TabRender from \"./renderer/TabRender\";\r\nimport GridRender from \"./renderer/GridRender\";\r\n\r\nexport type FORM_MODE = \"new\" | \"modify\" | \"view\";\r\n\r\nexport const RULES = {\r\n NAN: \"nan\",\r\n MIN: \"minimum\",\r\n EXCLUSIVE_MIN: \"exclusiveMinimum\",\r\n MAX: \"maximum\",\r\n EXCLUSIVE_MAX: \"exclusiveMaximum\",\r\n MIN_LENGTH: \"minLength\",\r\n MAX_LENGTH: \"maxLength\",\r\n BETWEEN: \"between\",\r\n BETWEEN_EXCLUSIVE_MIN: \"betweenExclusiveMin\",\r\n BETWEEN_EXCLUSIVE_MAX: \"betweenExclusiveMax\",\r\n BETWEEN_EXCLUSIVE_MINMAX: \"betweenExclusiveMinMax\",\r\n REGEXP: \"regexp\",\r\n REQUIRED: \"required\",\r\n VALIDATOR: \"validator\",\r\n} as const;\r\n\r\nexport const FIELD_PREFIX = \"dff\"; // daracl form field\r\n\r\nexport const RENDER_TEMPLATE: any = {\r\n number: NumberRender,\r\n textarea: TextAreaRender,\r\n dropdown: DropdownRender,\r\n checkbox: CheckboxRender,\r\n radio: RadioRender,\r\n text: TextRender,\r\n password: PasswordRender,\r\n file: FileRender,\r\n custom: CustomRender,\r\n group: GroupRender,\r\n hidden: HiddenRender,\r\n button: ButtonRender,\r\n range: RangeRender,\r\n datehour: DateRender,\r\n datemonth: DateRender,\r\n date: DateRender,\r\n datetime: DateRender,\r\n tab: TabRender,\r\n grid: GridRender,\r\n};\r\n\r\nexport const ALIGN = {\r\n left: \"left\",\r\n center: \"center\",\r\n right: \"right\",\r\n} as const;\r\n\r\nexport type TEXT_ALIGN_TYPE = (typeof ALIGN)[keyof typeof ALIGN];\r\n\r\nexport type RENDER_TYPE = \"number\" | \"text\" | \"file\" | \"textarea\" | \"dropdown\" | \"radio\" | \"checkbox\" | \"date\" | \"datetime\" | \"dateyear\" | \"datemonth\" | \"datehour\" | \"group\" | \"custom\";\r\n\r\nexport type REGEXP_TYPE = \"email\" | \"url\" | \"alpha\" | \"alpha-num\";\r\n\r\nexport type PASSWORD_TYPE = \"number\" | \"upper\" | \"upper-special\" | \"upper-special-number\"; // \uC22B\uC790 | \uB300\uBB38\uC790 \uD3EC\uD568, \uB300\uBB38\uC790 \uD2B9\uC218\uBB38\uC790 \uD3EC\uD568, \uB300\uBB38\uC790 \uD2B9\uC218\uBB38\uC790 \uC22B\uC790\r\n\r\nexport type FIELD_POSITION = \"top\" | \"left\" | \"left-left\" | \"left-right\" | \"right\" | \"right-left\" | \"right-right\" | \"bottom\";\r\n\r\nexport type ORIENTATION_TYPE = \"horizontal\" | \"vertical\";\r\n\r\ninterface StringArrayMap {\r\n [key: string]: string[];\r\n}\r\n\r\nexport const FIELD_POSITION_STYLE: StringArrayMap = {\r\n \"top-left\": [\"top\", \"txt-left\"],\r\n \"top-center\": [\"top\", \"txt-center\"],\r\n \"top-right\": [\"top\", \"txt-right\"],\r\n \"left-left\": [\"\", \"txt-left\"],\r\n \"left-center\": [\"\", \"txt-center\"],\r\n \"left-right\": [\"\", \"txt-right\"],\r\n \"right-right\": [\"right\", \"txt-right\"],\r\n \"right-center\": [\"right\", \"txt-center\"],\r\n \"right-left\": [\"right\", \"txt-left\"],\r\n \"bottom-left\": [\"bottom\", \"txt-left\"],\r\n \"bottom-center\": [\"bottom\", \"txt-center\"],\r\n \"bottom-right\": [\"bottom\", \"txt-right\"],\r\n};\r\nFIELD_POSITION_STYLE[\"top\"] = FIELD_POSITION_STYLE[\"top-left\"];\r\nFIELD_POSITION_STYLE[\"right\"] = FIELD_POSITION_STYLE[\"right-right\"];\r\nFIELD_POSITION_STYLE[\"left\"] = FIELD_POSITION_STYLE[\"left-left\"];\r\nFIELD_POSITION_STYLE[\"bottom\"] = FIELD_POSITION_STYLE[\"bottom-left\"];\r\n", "import { Message } from \"@t/Message\";\r\nimport { FormField } from \"../types/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\n\r\nlet localeMessage: Message = {\r\n required: \"{label} \uD544\uC218 \uC785\uB825\uC0AC\uD56D\uC785\uB2C8\uB2E4.\",\r\n fileButton: \"\uD30C\uC77C\uCC3E\uAE30\",\r\n selection: \"\uC120\uD0DD\",\r\n string: {\r\n minLength: \"{minLength} \uAE00\uC790 \uC774\uC0C1\uC73C\uB85C \uC785\uB825\uD558\uC138\uC694.\",\r\n maxLength: \"{maxLength} \uAE00\uC790 \uC774\uD558\uB85C \uC785\uB825\uD558\uC138\uC694.\",\r\n between: \"{minLength} ~ {maxLength} \uC0AC\uC774\uC758 \uAE00\uC790\uB97C \uC785\uB825\uD558\uC138\uC694.\",\r\n },\r\n number: {\r\n nan: \"\uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n minimum: \"{minimum} \uAC12\uACFC \uAC19\uAC70\uB098 \uCEE4\uC57C \uD569\uB2C8\uB2E4\",\r\n exclusiveMinimum: \"{minimum} \uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4\",\r\n maximum: \"{maximum} \uAC12\uACFC \uAC19\uAC70\uB098 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n exclusiveMaximum: \"{maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4.\",\r\n between: \"{minimum}~{maximum} \uC0AC\uC774\uC758 \uAC12\uC744 \uC785\uB825\uD558\uC138\uC694.\",\r\n betweenExclusiveMin: \"{minimum} \uBCF4\uB2E4 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uAC19\uAC70\uB098 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n betweenExclusiveMax: \"{minimum} \uBCF4\uB2E4 \uAC19\uAC70\uB098 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n betweenExclusiveMinMax: \"{minimum} \uBCF4\uB2E4 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n },\r\n regexp: {\r\n mobile: \"\uD578\uB4DC\uD3F0 \uBC88\uD638\uAC00 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n email: \"\uC774\uBA54\uC77C\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n url: \"URL\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n alpha: \"\uC601\uBB38\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n \"alpha-num\": \"\uC601\uBB38\uACFC \uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n number: \"\uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n variable: \"\uAC12\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n \"number-char\": \"\uC22B\uC790, \uBB38\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char\": \"\uB300\uBB38\uC790\uAC00 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char-special\": \"\uB300\uBB38\uC790,\uC18C\uBB38\uC790,\uD2B9\uC218\uBB38\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char-special-number\": \"\uB300\uBB38\uC790,\uC18C\uBB38\uC790,\uD2B9\uC218\uBB38\uC790,\uC22B\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C\uD569\uB2C8\uB2E4.\",\r\n },\r\n};\r\n\r\n/**\r\n * validation \uBA54\uC2DC\uC9C0 \uCC98\uB9AC.\r\n *\r\n * @class Language\r\n * @typedef {Language}\r\n */\r\nclass Language {\r\n private lang: Message = localeMessage;\r\n\r\n /**\r\n * \uB2E4\uAD6D\uC5B4 \uBA54\uC2DC\uC9C0 \uB4F1\uB85D\r\n *\r\n * @public\r\n * @param {?Message} [lang] \uB465\uB85D\uD560 \uBA54\uC2DC\uC9C0\r\n */\r\n public set(lang?: Message) {\r\n this.lang = Object.assign({}, localeMessage, lang);\r\n }\r\n\r\n /**\r\n * \uBA54\uC2DC\uC9C0 \uC5BB\uAE30\r\n *\r\n * @public\r\n * @param {string} messageKey \uBA54\uC2DC\uC9C0 \uD0A4\r\n * @returns {*}\r\n */\r\n public getMessage(messageKey: string): any {\r\n return (this.lang as any)[messageKey];\r\n }\r\n\r\n /**\r\n * ValidResult \uAC12\uC744 \uBA54\uC2DC\uC9C0\uB85C \uBCC0\uACBD.\r\n *\r\n * @public\r\n * @param {FormField} field\r\n * @param {ValidResult} validResult\r\n * @returns {string[]}\r\n */\r\n public validMessage(field: FormField, validResult: ValidResult): string[] {\r\n let messageFormat = \"\";\r\n\r\n let messageFormats: string[] = [];\r\n\r\n if (validResult.regexp) {\r\n messageFormat = (this.lang.regexp as any)[validResult.regexp];\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n (validResult.constraint ?? []).forEach((constraint) => {\r\n if (constraint === RULES.REQUIRED) {\r\n messageFormat = message(this.lang.required, field);\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n if (field.renderType == \"number\" || field.renderType == \"range\") {\r\n messageFormat = (this.lang.number as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n } else {\r\n messageFormat = (this.lang.string as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n }\r\n });\r\n\r\n const reMessage: string[] = [];\r\n\r\n const msgParam = Object.assign({}, { name: field.name, label: field.label }, field.rule);\r\n messageFormats.forEach((msgFormat) => {\r\n if (msgFormat) {\r\n reMessage.push(message(msgFormat, msgParam));\r\n }\r\n });\r\n\r\n if (validResult.validator) {\r\n reMessage.push(validResult.validator.message);\r\n }\r\n\r\n return reMessage;\r\n }\r\n}\r\n\r\nfunction message(msgFormat: string, msgParam: any): string {\r\n return msgFormat.replace(/\\{{1,1}([A-Za-z0-9_.]*)\\}{1,1}/g, (match, key) => {\r\n return typeof msgParam[key] !== \"undefined\" ? msgParam[key] : match;\r\n });\r\n}\r\n\r\nexport default new Language();\r\n", "import { FormField } from \"@t/FormField\";\r\n\r\nimport Render from \"../renderer/Render\";\r\nimport { RENDER_TEMPLATE } from \"../constants\";\r\nimport * as utils from \"./utils\";\r\n\r\nexport const getRenderer = (field: FormField): Render => {\r\n let render;\r\n if (field.renderType) {\r\n render = RENDER_TEMPLATE[field.renderType];\r\n }\r\n\r\n if (render && (render.isDataRender() === false || !utils.isUndefined(field.name))) {\r\n return render;\r\n }\r\n\r\n if (utils.isUndefined(field.name)) {\r\n if (field.children) {\r\n return RENDER_TEMPLATE[\"group\"];\r\n } else {\r\n return RENDER_TEMPLATE[\"hidden\"];\r\n }\r\n }\r\n\r\n return RENDER_TEMPLATE[\"text\"];\r\n};\r\n", "import { FIELD_PREFIX } from \"src/constants\";\r\nimport { FormField } from \"./types/FormField\";\r\nimport { ValidResult } from \"./types/ValidResult\";\r\nimport { getRenderer } from \"./util/renderFactory\";\r\nimport Lanauage from \"./util/Lanauage\";\r\nimport * as utils from \"./util/utils\";\r\nimport DaraForm from \"./DaraForm\";\r\n\r\ninterface NumberFieldMap {\r\n [key: string]: FormField;\r\n}\r\n\r\ninterface StringNumberMap {\r\n [key: string]: string;\r\n}\r\n\r\nexport default class FieldInfoMap {\r\n private fieldIdx = 0;\r\n\r\n private allFieldInfo: NumberFieldMap = {};\r\n\r\n private keyNameMap: StringNumberMap = {};\r\n\r\n private conditionFields: string[] = [];\r\n\r\n private fieldPrefix;\r\n\r\n private form;\r\n\r\n constructor(selector: string, form: DaraForm) {\r\n this.fieldPrefix = `${FIELD_PREFIX}_${utils.getHashCode(selector)}`;\r\n this.form = form;\r\n }\r\n\r\n /**\r\n * add Field \uC815\uBCF4\r\n *\r\n * @public\r\n * @param {FormField} field \uD3FC\uD544\uB4DC \uC815\uBCF4\r\n */\r\n public addField(field: FormField) {\r\n utils.replaceXssField(field);\r\n this.fieldIdx += 1;\r\n field.$key = `${this.fieldPrefix}_${this.fieldIdx}`;\r\n field.$validName = field.name ?? field.label;\r\n this.keyNameMap[field.$validName] = field.$key;\r\n this.allFieldInfo[field.$key] = field;\r\n field.$renderType = getRenderer(field);\r\n\r\n if (field.conditional) {\r\n this.conditionFields.push(field.$key);\r\n }\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC\uBA85\uC73C\uB85C \uD544\uB4DC \uC815\uBD80 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldName \uD544\uB4DC\uBA85\r\n * @returns {FormField}\r\n */\r\n public getFieldName(fieldName: string): FormField {\r\n return this.allFieldInfo[this.keyNameMap[fieldName]];\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC \uD0A4\uB85C \uC815\uBCF4 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldKey\r\n * @returns {FormField}\r\n */\r\n public get(fieldKey: string): FormField {\r\n return this.allFieldInfo[fieldKey];\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC\uBA85 \uC788\uB294\uC9C0 \uC5EC\uBD80 \uCCB4\uD06C.\r\n *\r\n * @public\r\n * @param {string} fieldName \uD544\uB4DC\uBA85\r\n * @returns {boolean}\r\n */\r\n public hasFieldName(fieldName: string): boolean {\r\n if (this.keyNameMap[fieldName] && this.allFieldInfo[this.keyNameMap[fieldName]]) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4E0 \uD544\uB4DC \uC815\uBCF4\r\n *\r\n * @public\r\n * @returns {NumberFieldMap}\r\n */\r\n public getAllFieldInfo(): NumberFieldMap {\r\n return this.allFieldInfo;\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC \uC815\uBCF4 \uB9F5\uC5D0\uC11C \uC9C0\uC6B0\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldName\r\n */\r\n public removeFieldInfo(fieldName: string) {\r\n delete this.allFieldInfo[this.keyNameMap[fieldName]];\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4E0 \uD544\uB4DC\uAC12 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {boolean} validationCheck\r\n * @returns {*}\r\n */\r\n public getAllFieldValue(formValue: any, validationCheck: boolean) {\r\n const useTypeValue = this.form.getOptions().useTypeValue;\r\n\r\n if (validationCheck !== true) {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n return formValue;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n\r\n resolve(formValue);\r\n });\r\n }\r\n\r\n public getFormDataValue(formValue: any, validationCheck: boolean) {\r\n if (validationCheck !== true) {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n return reval;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n resolve(reval);\r\n });\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * @param field\r\n * @returns\r\n */\r\n public isConditionFieldCheck(field: FormField) {\r\n let parent = field;\r\n\r\n while (typeof parent !== \"undefined\") {\r\n if (!this.isConditionField(parent)) {\r\n return false;\r\n }\r\n\r\n parent = parent.$parent;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * field \uD65C\uC131 \uBE44\uD65C\uC131\uD654 \uC5EC\uBD80.\r\n *\r\n * @param field form field\r\n * @returns\r\n */\r\n public isConditionField(field: FormField) {\r\n if (!this.conditionFields.includes(field.$key)) {\r\n return true;\r\n }\r\n\r\n let condFlag = false;\r\n\r\n if (field.conditional.custom) {\r\n condFlag = field.conditional.custom.call(null, field);\r\n } else {\r\n if (field.conditional.field) {\r\n const condField = this.getFieldName(field.conditional.field);\r\n\r\n if (condField) {\r\n if (field.conditional.eq == condField.$instance.getValue()) {\r\n condFlag = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return condFlag;\r\n }\r\n\r\n /**\r\n * \uCEEC\uB7FC \uB85C\uC6B0 \uBCF4\uC774\uACE0 \uC548\uBCF4\uC774\uAE30 \uCCB4\uD06C.\r\n *\r\n * @public\r\n */\r\n public conditionCheck() {\r\n this.conditionFields.forEach((fieldKey) => {\r\n const fieldInfo = this.allFieldInfo[fieldKey];\r\n\r\n let condFlag = this.isConditionField(fieldInfo);\r\n\r\n if (condFlag) {\r\n fieldInfo.$instance.show();\r\n } else {\r\n fieldInfo.$instance.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * field validation check\r\n *\r\n * @param fieldInfo FormField\r\n * @returns boolean true or ValidResult\r\n */\r\n public getFieldValidation(fieldInfo: FormField, focusFlag: boolean | undefined) {\r\n if (!this.isConditionFieldCheck(fieldInfo)) {\r\n return true;\r\n }\r\n\r\n const renderInfo = fieldInfo.$instance;\r\n let fieldValid = renderInfo.valid();\r\n\r\n if (fieldValid === true) return true;\r\n\r\n if (focusFlag) {\r\n renderInfo.focus();\r\n }\r\n fieldValid = fieldValid as ValidResult;\r\n if (utils.isUndefined(fieldValid.message)) {\r\n fieldValid.message = Lanauage.validMessage(fieldInfo, fieldValid)[0];\r\n }\r\n\r\n return fieldValid;\r\n }\r\n}\r\n\r\n/**\r\n * add form value\r\n * @param formData {Object} return Object value\r\n * @param fieldInfo {FormField} field info\r\n * @param fieldValue {any} form value\r\n */\r\nfunction addFormValue(formData: any, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n\r\n formData[fieldInfo.$validName] = uploadFiles;\r\n formData[fieldInfo.$validName + \"RemoveIds\"] = fieldValue[\"removeIds\"];\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData[key] = value;\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData[fieldInfo.name] = fieldValue;\r\n }\r\n }\r\n } else {\r\n formData[fieldInfo.$validName] = fieldValue;\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n\r\nfunction addFieldFormData(formData: FormData, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n formData.delete(fieldInfo.$validName);\r\n for (let uploadFile of uploadFiles) {\r\n formData.append(fieldInfo.$validName, uploadFile);\r\n }\r\n\r\n formData.set(fieldInfo.$validName + \"RemoveIds\", fieldValue[\"removeIds\"]);\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData.set(key, value as any);\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n } else {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n", "import { FormOptions } from \"@t/FormOptions\";\r\nimport { FieldStyle, FormField } from \"@t/FormField\";\r\nimport * as utils from \"./util/utils\";\r\nimport FieldInfoMap from \"src/FieldInfoMap\";\r\n\r\nimport styleUtils from \"./util/styleUtils\";\r\nimport DaraForm from \"./DaraForm\";\r\nimport TabRender from \"./renderer/TabRender\";\r\nimport GridRender from \"./renderer/GridRender\";\r\n\r\n/**\r\n * form template\r\n *\r\n * @class FormTemplate\r\n * @typedef {FormTemplate}\r\n */\r\nexport default class FormTemplate {\r\n private readonly options: FormOptions;\r\n private readonly formElement;\r\n\r\n private fieldInfoMap;\r\n\r\n private daraform: DaraForm;\r\n\r\n private addRowFields: string[] = [];\r\n\r\n constructor(daraform: DaraForm, formElement: Element, fieldInfoMap: FieldInfoMap) {\r\n this.daraform = daraform;\r\n this.options = daraform.getOptions();\r\n this.formElement = formElement;\r\n\r\n this.fieldInfoMap = fieldInfoMap;\r\n }\r\n\r\n /**\r\n * field row \uCD94\uAC00.\r\n *\r\n * @param field\r\n */\r\n public addRow(field: FormField) {\r\n if (this.checkHiddenField(field)) {\r\n return;\r\n }\r\n\r\n this.addRowFields = [];\r\n\r\n this.addRowTemplate(field);\r\n }\r\n\r\n /**\r\n * \uADF8\uB8F9 \uD15C\uD50C\uB9BF\r\n *\r\n * @param {FormField} field\r\n * @returns {string} row template\r\n */\r\n public addRowTemplate(field: FormField): void {\r\n let labelHideFlag = this.isLabelHide(field);\r\n\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(this.options, field, null, labelHideFlag);\r\n\r\n this.addRowFieldInfo(field);\r\n\r\n const rowElement = utils.templateToElement(`\r\n <div class=\"df-row form-group ${fieldStyle.fieldClass}\" id=\"${field.$key}\">\r\n ${labelHideFlag ? \"\" : `<div class=\"df-label ${fieldStyle.labelClass} ${fieldStyle.labelAlignClass}\" title=\"${field.label ?? \"\"}\" style=\"${fieldStyle.labelStyle}\">${this.getLabelTemplate(field)}</div>`}\r\n\r\n <div class=\"df-field-container ${fieldStyle.valueClass} ${field.required ? \"required\" : \"\"}\" style=\"${fieldStyle.valueStyle}\"></div>\r\n </div>\r\n `);\r\n\r\n if (rowElement) {\r\n this.createField(field, rowElement);\r\n this.formElement.append(rowElement);\r\n\r\n if (field.children) {\r\n this.childTemplate(field, fieldStyle);\r\n }\r\n }\r\n }\r\n\r\n public createField(field: FormField, element: Element): void {\r\n field.$instance = new (field.$renderType as any)(field, element, this.daraform);\r\n }\r\n\r\n /**\r\n * child template\r\n *\r\n * @param {FormField} field\r\n * @param {FieldStyle} parentFieldStyle\r\n * @returns {*}\r\n */\r\n public childTemplate(field: FormField, parentFieldStyle: FieldStyle): void {\r\n let beforeField: FormField = null as any;\r\n let firstFlag = true;\r\n let isEmptyLabel = false;\r\n\r\n if (!(field.$renderType as any).isChildrenCreate()) {\r\n return;\r\n }\r\n\r\n const rowElement = document.createElement(\"div\");\r\n rowElement.classList.add(\"df-row\", parentFieldStyle.rowStyleClass ?? \"\");\r\n\r\n let idx = 0;\r\n\r\n for (const childField of field.children) {\r\n if (utils.isEmpty(childField)) {\r\n throw new Error(`parent field :[${field.$validName}], children index ${idx}, empty [${childField}]`);\r\n }\r\n\r\n childField.$parent = field;\r\n ++idx;\r\n\r\n if (this.checkHiddenField(childField)) {\r\n continue;\r\n }\r\n\r\n this.addRowFieldInfo(childField);\r\n\r\n if (firstFlag) {\r\n beforeField = childField;\r\n }\r\n\r\n let labelHideFlag = this.isLabelHide(childField);\r\n\r\n let childFieldStyle;\r\n\r\n let labelTemplate = \"\";\r\n if (labelHideFlag) {\r\n childFieldStyle = styleUtils.fieldStyle(this.options, childField, beforeField, !isEmptyLabel);\r\n labelTemplate = isEmptyLabel ? `<span class=\"df-label empty ${childFieldStyle.labelClass}\" style=\"${childFieldStyle.labelStyle}\"></span>` : \"\";\r\n } else {\r\n childFieldStyle = styleUtils.fieldStyle(this.options, childField, beforeField, false);\r\n labelTemplate = `<span class=\"df-label ${childFieldStyle.labelClass} ${childFieldStyle.labelAlignClass}\" title=\"${childField.label ?? \"\"}\" style=\"${childFieldStyle.labelStyle}\">${this.getLabelTemplate(childField)}</span>`;\r\n }\r\n\r\n const groupElement = utils.templateToElement(`<div class=\"form-group ${childFieldStyle.fieldClass}\" style=\"${childFieldStyle.fieldStyle}\" id=\"${childField.$key}\">\r\n ${labelTemplate}\r\n <span class=\"df-field-container ${childFieldStyle.valueClass} ${childField.required ? \"required\" : \"\"}\" style=\"${childFieldStyle.valueStyle}\"></span>\r\n </div>`);\r\n\r\n if (groupElement) {\r\n this.createField(childField, groupElement);\r\n rowElement.append(groupElement);\r\n\r\n if (childField.children) {\r\n this.childTemplate(childField, childField.children ? childFieldStyle : parentFieldStyle);\r\n }\r\n }\r\n if (!labelHideFlag) {\r\n isEmptyLabel = true;\r\n }\r\n\r\n firstFlag = false;\r\n }\r\n\r\n field.$instance.addChildField(rowElement);\r\n }\r\n\r\n /**\r\n * label template\r\n *\r\n * @param {FormField} field form field\r\n * @returns {string} template string\r\n */\r\n public getLabelTemplate(field: FormField) {\r\n const requiredTemplate = field.required ? `<span class=\"required\"></span>` : \"\";\r\n const tooltipTemplate = utils.isBlank(field.tooltip) ? \"\" : `<span class=\"df-tooltip\">?<span class=\"tooltip\">${field.tooltip}</span></span>`;\r\n\r\n return `${field.label ?? \"\"} ${tooltipTemplate} ${requiredTemplate}`;\r\n }\r\n\r\n /**\r\n * label \uC228\uAE40 \uC5EC\uBD80\r\n *\r\n * @param field formfield\r\n * @returns\r\n */\r\n public isLabelHide(field: FormField): boolean {\r\n return field.style?.labelHide || utils.isUndefined(field.label);\r\n }\r\n\r\n public checkHiddenField(field: FormField) {\r\n if (utils.isHiddenField(field)) {\r\n this.fieldInfoMap.addField(field);\r\n field.$instance = new (field.$renderType as any)(field, null, this.daraform);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * add row file map\r\n *\r\n * @param {FormField} field\r\n */\r\n public addRowFieldInfo(field: FormField) {\r\n if (!utils.isBlank(field.name) && this.fieldInfoMap.hasFieldName(field.name)) {\r\n throw new Error(`Duplicate field name \"${field.name}\"`);\r\n }\r\n\r\n this.fieldInfoMap.addField(field);\r\n this.addRowFields.push(field.$key);\r\n }\r\n}\r\n", "import { FormOptions } from \"@t/FormOptions\";\r\nimport { FormField } from \"@t/FormField\";\r\nimport * as utils from \"./util/utils\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { Message } from \"@t/Message\";\r\nimport Lanauage from \"./util/Lanauage\";\r\nimport { stringValidator } from \"./rule/stringValidator\";\r\nimport { numberValidator } from \"./rule/numberValidator\";\r\nimport { regexpValidator } from \"./rule/regexpValidator\";\r\nimport FieldInfoMap from \"src/FieldInfoMap\";\r\nimport FormTemplate from \"./FormTemplate\";\r\nimport { FORM_MODE } from \"./constants\";\r\n\r\ndeclare const APP_VERSION: string;\r\n\r\nconst defaultOptions = {\r\n style: {\r\n width: \"100%\",\r\n labelWidth: 3,\r\n valueWidth: 9,\r\n position: \"left-right\",\r\n },\r\n mode: \"new\",\r\n useTypeValue: true,\r\n autoCreate: true,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n} as FormOptions;\r\n\r\ninterface FieldMap {\r\n [key: string]: FormField;\r\n}\r\n\r\ninterface DaraFormMap {\r\n [key: string]: DaraForm;\r\n}\r\n\r\n// all instance\r\nconst allInstance: DaraFormMap = {};\r\n\r\nconst SEQ_ATTR_KEY = \"data-form-uid\";\r\n\r\nlet DARA_FORM_SEQ = 0;\r\n/**\r\n * DaraForm class\r\n *\r\n * @class DaraForm\r\n * @typedef {DaraForm}\r\n */\r\nexport default class DaraForm {\r\n public static VERSION = `${APP_VERSION}`;\r\n\r\n private readonly options;\r\n\r\n private orginFormStyleClass;\r\n\r\n private selector: string;\r\n private formElement: Element;\r\n\r\n private fieldInfoMap: FieldInfoMap;\r\n\r\n private formValue: any = {};\r\n\r\n public formTemplate: FormTemplate;\r\n\r\n constructor(formElement: Element, options: FormOptions, message?: Message) {\r\n this.options = utils.merge({}, defaultOptions, options) as FormOptions;\r\n\r\n Lanauage.set(message);\r\n\r\n if (formElement) {\r\n this.orginFormStyleClass = formElement.className;\r\n formElement.classList.add(\"daracl-form\");\r\n\r\n this.selector = `df_${++DARA_FORM_SEQ}`;\r\n formElement.setAttribute(\"name\", this.selector);\r\n formElement.setAttribute(SEQ_ATTR_KEY, this.selector);\r\n\r\n if (this.options.style.width) {\r\n formElement.setAttribute(\"style\", `width:${this.options.style.width};`);\r\n }\r\n\r\n this.formElement = formElement;\r\n this.changeMode(this.options.mode ?? \"new\");\r\n this.createForm(this.options.fields);\r\n\r\n if (this.options.autoCreate !== false) {\r\n allInstance[this.selector] = this;\r\n }\r\n } else {\r\n throw new Error(`${formElement} form selector not found`);\r\n }\r\n }\r\n\r\n public static create(formElement: Element, options: FormOptions, message?: Message): DaraForm {\r\n return new DaraForm(formElement, options, message);\r\n }\r\n\r\n public static setMessage(message: Message): void {\r\n Lanauage.set(message);\r\n }\r\n\r\n private createForm(fields: FormField[]) {\r\n this.fieldInfoMap = new FieldInfoMap(this.selector, this);\r\n //this.formElement.innerHTML = \"\";\r\n this.formTemplate = new FormTemplate(this, this.formElement, this.fieldInfoMap);\r\n\r\n if (this.options.autoCreate === false) {\r\n return;\r\n }\r\n\r\n fields.forEach((field) => {\r\n this.formTemplate.addRow(field);\r\n });\r\n this.conditionCheck();\r\n\r\n if (this.options.onMounted) {\r\n this.options.onMounted.call(this);\r\n }\r\n }\r\n\r\n /**\r\n * change mode\r\n *\r\n * @param mode form_mode default new\r\n */\r\n public changeMode = (mode: FORM_MODE): void => {\r\n this.options.mode = mode;\r\n this.formElement.setAttribute(\"data-df-mode\", mode);\r\n };\r\n\r\n /**\r\n * \uD3FC \uB370\uC774\uD130 reset\r\n */\r\n public resetForm = () => {\r\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\r\n for (const seq in fieldMap) {\r\n const fieldInfo = fieldMap[seq];\r\n const renderInfo = fieldInfo.$instance;\r\n\r\n if (renderInfo && typeof renderInfo.reset === \"function\") {\r\n renderInfo.reset();\r\n }\r\n }\r\n this.formValue = {};\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * field \uAC12 reset\r\n * @param fieldName \uD544\uB4DC\uBA85\r\n */\r\n public resetField = (fieldName: string) => {\r\n this.fieldInfoMap.getFieldName(fieldName).$instance.reset();\r\n this.formValue[fieldName] = \"\";\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * \uD544\uB4DC element \uC5BB\uAE30\r\n *\r\n * @param {string} fieldName\r\n * @returns {*}\r\n */\r\n public getFieldElement(fieldName: string) {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field?.$instance) {\r\n return field.$instance.getElement();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getField(fieldName: string): FormField {\r\n return this.fieldInfoMap.getFieldName(fieldName);\r\n }\r\n\r\n /**\r\n * field \uAC12 \uC5BB\uAE30\r\n *\r\n * @param fieldName \uD544\uB4DC\uBA85\r\n * @returns\r\n */\r\n public getFieldValue = (fieldName: string) => {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field) {\r\n return field.$instance.getValue();\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * \uD3FC \uD544\uB4DC \uAC12 \uC5BB\uAE30\r\n * @param isValid \uD3FC \uC720\uD6A8\uC131 \uAC80\uC0AC \uC5EC\uBD80 default:false|undefined true\uC77C\uACBD\uC6B0 \uAC80\uC0AC.\r\n * @returns\r\n */\r\n public getValue = (isValid: boolean): any => {\r\n return this.fieldInfoMap.getAllFieldValue(this.formValue, isValid);\r\n };\r\n\r\n public getFormDataValue = (isValid: boolean): any => {\r\n return this.fieldInfoMap.getFormDataValue(this.formValue, isValid);\r\n };\r\n\r\n /**\r\n * \uD3FC \uD544\uB4DC value \uC14B\uD305\r\n * @param values\r\n */\r\n public setValue = (values: any, dataClear?: boolean | undefined) => {\r\n if (dataClear !== false) {\r\n this.resetForm();\r\n }\r\n\r\n Object.keys(values).forEach((fieldName) => {\r\n this._setFieldValue(fieldName, values[fieldName]);\r\n });\r\n this.conditionCheck();\r\n };\r\n\r\n public setFieldValue = (fieldName: string, value: any) => {\r\n this._setFieldValue(fieldName, value);\r\n this.conditionCheck();\r\n };\r\n\r\n private _setFieldValue(fieldName: string, value: any) {\r\n this.formValue[fieldName] = value;\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (fieldInfo) {\r\n fieldInfo.$instance.setValue(value);\r\n }\r\n }\r\n\r\n public setFieldItems = (fieldName: string, values: any) => {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field) {\r\n return field.$instance.setValueItems(values);\r\n }\r\n };\r\n\r\n /**\r\n * field \uCD94\uAC00\r\n *\r\n * @param {FormField} field\r\n */\r\n public addField = (field: FormField) => {\r\n this.options.fields.push(field);\r\n this.formTemplate.addRow(field);\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * field \uC81C\uAC70\r\n *\r\n * @param {string} fieldName\r\n */\r\n public removeField = (fieldName: string) => {\r\n const element = this.getFieldElement(fieldName);\r\n\r\n if (element != null) {\r\n element.closest(\".df-row\")?.remove();\r\n }\r\n\r\n this.fieldInfoMap.removeFieldInfo(fieldName);\r\n };\r\n\r\n /**\r\n * \uD3FC \uC720\uD6A8\uC131 \uAC80\uC99D \uC5EC\uBD80\r\n *\r\n * @returns {boolean}\r\n */\r\n public isValidForm = (): boolean => {\r\n const result = this.validForm();\r\n\r\n return result.length < 1;\r\n };\r\n\r\n /**\r\n * \uC720\uD6A8\uC131 \uAC80\uC99D \uD3FC \uAC80\uC99D\uC5EC\uBD80 \uB9AC\uD134\r\n *\r\n * @returns {any[]}\r\n */\r\n public validForm = (): any[] => {\r\n let validResult = [] as any;\r\n let autoFocusFlag = this.options.autoFocus !== false;\r\n let firstFlag = true;\r\n\r\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\r\n for (const fieldKey in fieldMap) {\r\n const fieldInfo = fieldMap[fieldKey];\r\n\r\n let fieldValid = this.fieldInfoMap.getFieldValidation(fieldInfo, autoFocusFlag);\r\n\r\n if (fieldValid !== true) {\r\n autoFocusFlag = false;\r\n\r\n if (utils.isGridType(fieldInfo)) {\r\n validResult = validResult.concat(fieldValid);\r\n } else {\r\n if (firstFlag) {\r\n this.validTabCheck(fieldInfo);\r\n firstFlag = false;\r\n }\r\n validResult.push(fieldValid);\r\n }\r\n }\r\n }\r\n\r\n return validResult;\r\n };\r\n\r\n private validTabCheck(fieldInfo: FormField) {\r\n if (fieldInfo.$parent) {\r\n if (fieldInfo.$parent.renderType == \"tab\") {\r\n fieldInfo.$parent.$instance.setActive(fieldInfo.$key);\r\n }\r\n this.validTabCheck(fieldInfo.$parent);\r\n }\r\n }\r\n\r\n public isValidField = (fieldName: string): boolean => {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (utils.isUndefined(fieldInfo)) {\r\n throw new Error(`Field name [${fieldName}] not found`);\r\n }\r\n\r\n const renderInfo = fieldInfo.$instance;\r\n if (renderInfo) {\r\n return renderInfo.valid() === true;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * \uC124\uC815 \uC635\uC158 \uC5BB\uAE30\r\n */\r\n public getOptions = () => {\r\n return this.options;\r\n };\r\n\r\n public conditionCheck() {\r\n this.fieldInfoMap.conditionCheck();\r\n }\r\n\r\n public setFieldDisabled(fieldName: string, flag: boolean) {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n fieldInfo.$instance.setDisabled(flag);\r\n }\r\n\r\n /**\r\n * \uC124\uBA85 \uCD94\uAC00\r\n *\r\n * @public\r\n * @param {string} fieldName\r\n * @param {string} desc\r\n */\r\n public setFieldDescription(fieldName: string, desc: string) {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n fieldInfo.$instance.setDescription(desc);\r\n }\r\n\r\n public destroy = () => {\r\n this.formElement.className = this.orginFormStyleClass;\r\n this.formElement.replaceChildren();\r\n\r\n for (const key in this) {\r\n if (utils.hasOwnProp(this, key)) {\r\n delete this[key];\r\n delete allInstance[this.selector];\r\n }\r\n }\r\n };\r\n\r\n public static validator = {\r\n string: (value: string, field: FormField) => {\r\n return stringValidator(value, field);\r\n },\r\n number: (value: string, field: FormField) => {\r\n return numberValidator(value, field);\r\n },\r\n regexp: (value: string, field: FormField) => {\r\n let result: ValidResult = { name: field.name, constraint: [] };\r\n return regexpValidator(value, field, result);\r\n },\r\n };\r\n\r\n public static instance(ele: Element | String) {\r\n let element;\r\n if (utils.isString(ele)) {\r\n element = document.querySelector(ele);\r\n } else {\r\n element = ele;\r\n }\r\n element = element as Element;\r\n let selector = element.getAttribute(SEQ_ATTR_KEY);\r\n\r\n if (utils.isUndefined(selector) || utils.isBlank(selector)) {\r\n const keys = Object.keys(allInstance);\r\n if (keys.length > 1) {\r\n throw new Error(`selector empty : [${selector}]`);\r\n }\r\n selector = keys[0];\r\n\r\n return allInstance[selector];\r\n }\r\n }\r\n /**\r\n * \uBAA8\uB4E0 field \uC5BB\uAE30\r\n */\r\n public getFields = (): any[] => {\r\n return this.options.fields;\r\n };\r\n\r\n /**\r\n * field setting\r\n * @param fields\r\n */\r\n public setFields = (fields: any[]) => {\r\n this.options.fields = fields;\r\n this.createForm(fields);\r\n };\r\n\r\n public getFieldInfoMap() {\r\n return this.fieldInfoMap;\r\n }\r\n}\r\n", "import DaraForm from \"./DaraForm\";\r\n\r\nimport \"../style/daracl.form.scss\";\r\n\r\nimport \"@daracl/datetimepicker/style/daracl.datetimepicker.scss\";\r\n\r\nexport = DaraForm;\r\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { FormField } from \"@t/FormField\";\r\n\r\nconst xssFilter = {\r\n \"&\": \"&amp;\",\r\n \"<\": \"&lt;\",\r\n \">\": \"&gt;\",\r\n '\"': \"&quot;\",\r\n \"'\": \"&#39;\",\r\n} as any;\r\n\r\nexport const replaceXss = (inputText: string): string => {\r\n let returnText = inputText;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, xssFilter[key]);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const hasOwnProp = (obj: any, key: string): boolean => {\r\n return obj.hasOwnProperty(key);\r\n};\r\n\r\nexport const unReplace = (inputText: string): string => {\r\n let returnText = inputText;\r\n\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(xssFilter[key], key);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const unFieldName = (fieldName: string): string => {\r\n if (fieldName) {\r\n return unReplace(fieldName).replaceAll('\"', '\\\\\"');\r\n }\r\n return \"\";\r\n};\r\nexport const isBlank = (value: any): boolean => {\r\n if (value === null) return true;\r\n if (value === \"\") return true;\r\n if (typeof value === \"undefined\") return true;\r\n if (typeof value === \"string\" && (value === \"\" || value.replace(/\\s/g, \"\") === \"\")) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const isUndefined = (value: any): value is undefined => {\r\n return typeof value === \"undefined\";\r\n};\r\n\r\nexport const isFunction = (value: any): boolean => {\r\n return typeof value === \"function\";\r\n};\r\n\r\nexport const isString = (value: any): value is string => {\r\n return typeof value === \"string\";\r\n};\r\nexport const isNumber = (value: any): value is number => {\r\n if (isBlank(value)) {\r\n return false;\r\n }\r\n value = +value;\r\n return !isNaN(value);\r\n};\r\n\r\nexport const isArray = (value: any): value is Array<any> => {\r\n return Array.isArray(value);\r\n};\r\n\r\n/**\r\n * \uAC12\uC788\uB294\uC9C0 \uC5EC\uBD80 \uCCB4\uD06C.\r\n *\r\n * @param {*} value\r\n * @returns {boolean}\r\n */\r\nexport const isEmpty = (value: any): boolean => isUndefined(value) || value == null; //_isEmpty(value);\r\n\r\n/**\r\n * tab render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} tab type \uC778\uC9C0 \uC5EC\uBD80\r\n */\r\nexport const isTabType = (field: FormField): boolean => {\r\n return field && field.renderType === \"tab\";\r\n};\r\n/**\r\n * grid render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} grid type \uC778\uC9C0 \uC5EC\uBD80\r\n */\r\nexport const isGridType = (field: FormField): boolean => {\r\n return field && field.renderType === \"grid\";\r\n};\r\nexport const replaceXssField = (field: FormField): FormField => {\r\n field.$xssName = getXssFieldName(field);\r\n\r\n field.label = replaceXss(field.label);\r\n return field;\r\n};\r\n\r\n/**\r\n * \uAC12\uC744 \uBB34\uC2DC\uD558\uB294 \uD544\uB4DC\r\n *\r\n * @param field formField\r\n * @returns\r\n */\r\nexport const ignoreValueField = (field: FormField): boolean => {\r\n return isGridType(field.$parent) || isTabType(field.$parent);\r\n};\r\n\r\n/**\r\n * grid field name xss repalce\r\n *\r\n * @param {FormField} field\r\n * @returns {string} replace \uB41C field name\r\n */\r\nexport const getXssFieldName = (field: FormField): string => {\r\n if (isUndefined(field.$xssName)) {\r\n let returnText = field.name;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, \"_\");\r\n });\r\n }\r\n\r\n return \"df_\" + returnText;\r\n }\r\n\r\n return field.$xssName;\r\n};\r\n\r\nexport const getHashCode = (str: string) => {\r\n let hash = 0;\r\n if (str.length == 0) return hash;\r\n for (let i = 0; i < str.length; i++) {\r\n let tmpChar = str.charCodeAt(i);\r\n hash = (hash << 5) - hash + tmpChar;\r\n hash = hash & hash;\r\n }\r\n return String(hash).replaceAll(/-/g, \"_\");\r\n};\r\n\r\nexport const isHiddenField = (field: FormField): boolean => {\r\n if (field.renderType === \"hidden\") {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const templateToElement = (htmlTemplate: string): Element | null => {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = htmlTemplate;\r\n return template.content.firstElementChild;\r\n};\r\n\r\nexport function isPlainObject(obj: any) {\r\n // \uAC1D\uCCB4\uAC00 \uC544\uB2CC \uACBD\uC6B0 \uB610\uB294 null\uC778 \uACBD\uC6B0 false \uBC18\uD658\r\n if (typeof obj !== \"object\" || obj === null) {\r\n return false;\r\n }\r\n\r\n // \uD504\uB85C\uD1A0\uD0C0\uC785 \uCCB4\uC778\uC744 \uB530\uB77C Object \uC0DD\uC131\uC790\uB97C \uCC3E\uC74C\r\n let proto = obj;\r\n while (Object.getPrototypeOf(proto) !== null) {\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n // Object \uC0DD\uC131\uC790\uC758 prototype\uACFC \uAC19\uC73C\uBA74 Plain Object\uB85C \uD310\uB2E8\r\n return Object.getPrototypeOf(obj) === proto;\r\n}\r\n\r\nfunction isObject(value: any) {\r\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n}\r\n\r\nfunction isDate(value: any) {\r\n return value instanceof Date && !isNaN(value.valueOf());\r\n}\r\n\r\n/**\r\n * object merge\r\n * \r\n * @example\r\n ```\r\n merge({},{aaa:'bbb',ccc:'ddd'},{bbb:'bbb','aaa':'aaa'})) -> {\"aaa\": \"aaa\", \"bbb\": \"bbb\", \"ccc\": \"ddd\"}\r\n ```\r\n * @param {...any[]} value\r\n * @returns {object}\r\n */\r\nexport const merge = (...value: any[]): any => {\r\n let reval = value[0];\r\n\r\n if (!isPlainObject(reval) || isEmpty(reval)) {\r\n return reval;\r\n }\r\n\r\n let i = 1;\r\n if (Object.keys(reval).length > 0) {\r\n i = 0;\r\n reval = isArray(reval) ? [] : {};\r\n }\r\n const argLen = value.length;\r\n for (; i < argLen; i += 1) {\r\n cloneDeep(reval, value[i]);\r\n }\r\n\r\n return reval;\r\n};\r\n\r\nfunction trim(s: string): string {\r\n return s.replace(/^\\s+|\\s+$/g, \"\");\r\n}\r\n\r\nfunction cloneDeep(dst: any, src: any): any {\r\n if (isObject(src)) {\r\n return cloneObjectDeep(dst, src);\r\n }\r\n\r\n if (isArray(src)) {\r\n return cloneArrayDeep(dst, src);\r\n }\r\n\r\n if (isDate(src)) {\r\n return new src.constructor(src);\r\n }\r\n return src;\r\n}\r\n\r\n/*eslint no-param-reassign: \"error\"*/\r\nfunction cloneObjectDeep(dst: any, src: any): object {\r\n if (isFunction(src)) {\r\n return src;\r\n }\r\n\r\n for (const key of Object.keys(src)) {\r\n const val = (src as any)[key];\r\n\r\n if (isUndefined(val)) {\r\n continue;\r\n }\r\n\r\n if (val === null) {\r\n dst[key] = val;\r\n } else if (isFunction(val)) {\r\n dst[key] = val;\r\n } else if (isEmpty(dst[key])) {\r\n dst[key] = cloneDeep(isArray(val) ? [] : {}, val);\r\n } else if (!isObject(val)) {\r\n dst[key] = val;\r\n } else {\r\n cloneDeep(dst[key], val);\r\n }\r\n }\r\n return dst;\r\n}\r\n\r\nfunction cloneArrayDeep(dst: any, src: any[]) {\r\n const isObj = isPlainObject(dst);\r\n\r\n for (let i = 0; i < src.length; i += 1) {\r\n const val = src[i];\r\n let newVal;\r\n\r\n if (val == null) {\r\n newVal = val;\r\n } else {\r\n newVal = cloneDeep(isArray(val) ? [] : {}, val);\r\n }\r\n\r\n if (isObj) {\r\n (dst as any)[i] = newVal;\r\n } else {\r\n dst.push(newVal);\r\n }\r\n }\r\n return dst;\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default abstract class Render {\r\n protected daraForm;\r\n protected rowElement;\r\n protected field;\r\n\r\n private enableView: boolean = true;\r\n\r\n constructor(form: DaraForm, field: FormField, rowElement: HTMLElement) {\r\n this.daraForm = form;\r\n this.field = field;\r\n this.rowElement = rowElement;\r\n this.createField();\r\n\r\n if (field.tooltip) rowElement.querySelector(\".df-tooltip\")?.setAttribute(\"tooltip\", field.tooltip);\r\n }\r\n\r\n public setDefaultInfo() {\r\n if (utils.isUndefined(this.field.defaultValue)) {\r\n this.setValue(\"\", false);\r\n } else {\r\n this.setValue(this.field.defaultValue, false);\r\n }\r\n\r\n if (!utils.isUndefined(this.field.placeholder)) {\r\n const ele = this.getElement();\r\n if (ele instanceof Element) {\r\n ele.setAttribute(\"placeholder\", this.field.placeholder);\r\n }\r\n }\r\n }\r\n\r\n public setDefaultOption() {\r\n this.setDisabled(this.field.disabled ?? false);\r\n }\r\n\r\n public addChildField(element: Element) {\r\n this.rowElement.querySelector(\".df-field-container\")?.append(element);\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return true;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return true;\r\n }\r\n\r\n public getForm(): DaraForm {\r\n return this.daraForm;\r\n }\r\n\r\n public abstract mounted(): void;\r\n public abstract getValue(): any;\r\n public abstract setValue(value: any, changeCheckFlag?: boolean): void;\r\n public abstract reset(): void;\r\n public abstract getElement(): any;\r\n public abstract valid(): ValidResult | boolean;\r\n public abstract createField(): void;\r\n\r\n public setValueItems(value: any): void {}\r\n\r\n public static getDescriptionTemplate(field: FormField): string {\r\n return field.description ? `<div class=\"df-description\">${field.description}</div>` : \"\";\r\n }\r\n\r\n public changeEventCall(field: FormField, e: Event | null, rederInfo: Render, fieldValue: any): boolean | undefined {\r\n if (field.onChange) {\r\n let changeInfo: any = {\r\n field: field,\r\n evt: e,\r\n oldValue: field.$value,\r\n value: fieldValue,\r\n };\r\n\r\n if (field.listItem?.list) {\r\n let valuesItem = [];\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n for (let val of field.listItem.list) {\r\n let changeVal = val[valueKey];\r\n if (utils.isString(fieldValue)) {\r\n if (changeVal == fieldValue) {\r\n valuesItem.push(val);\r\n break;\r\n }\r\n } else if (utils.isArray(fieldValue)) {\r\n if (fieldValue.includes(changeVal)) {\r\n valuesItem.push(val);\r\n }\r\n }\r\n }\r\n\r\n changeInfo.valueItems = valuesItem;\r\n }\r\n\r\n if (changeInfo.oldValue != changeInfo.value && field.onChange.call(null, changeInfo) === false) {\r\n rederInfo.setValue(field.$value, false);\r\n return false;\r\n }\r\n\r\n field.$value = changeInfo.value;\r\n }\r\n\r\n this.daraForm.conditionCheck();\r\n }\r\n\r\n public focus() {\r\n this.getElement().focus();\r\n }\r\n\r\n public isEnableView() {\r\n return this.enableView;\r\n }\r\n\r\n public show() {\r\n this.enableView = true;\r\n this.rowElement.classList.remove(\"df-hidden\");\r\n }\r\n\r\n public hide() {\r\n this.enableView = false;\r\n if (!this.rowElement.classList.contains(\"df-hidden\")) {\r\n this.rowElement.classList.add(\"df-hidden\");\r\n }\r\n }\r\n\r\n /**\r\n * \uC124\uBA85 \uCD94\uAC00\r\n *\r\n * @public\r\n * @param {string} desc\r\n */\r\n public setDescription(desc: string) {\r\n const descEle = this.rowElement.querySelector(\".df-description\");\r\n if (descEle) {\r\n descEle.innerHTML = desc;\r\n } else {\r\n const fieldEle = this.rowElement.querySelector(\".df-field\");\r\n if (fieldEle) {\r\n const parser = new DOMParser();\r\n this.field.description = desc;\r\n const descEle = parser.parseFromString(Render.getDescriptionTemplate(this.field), \"text/html\").querySelector(\".df-description\");\r\n\r\n if (descEle) fieldEle.parentNode?.insertBefore(descEle, fieldEle.nextSibling);\r\n }\r\n }\r\n }\r\n\r\n public setActive(id: string): void {\r\n //console.log(\"parent\");\r\n }\r\n\r\n public setDisabled(flag: boolean) {\r\n const ele = this.getElement();\r\n if (ele instanceof HTMLElement) {\r\n if (flag === false) {\r\n this.getElement().removeAttribute(\"disabled\");\r\n } else {\r\n this.getElement().setAttribute(\"disabled\", true);\r\n }\r\n }\r\n }\r\n\r\n public commonValidator() {\r\n //this.field.diff\r\n }\r\n\r\n public static valuesValueKey(field: FormField): string {\r\n return field.listItem?.valueField ? field.listItem.valueField : \"value\";\r\n }\r\n\r\n public static valuesLabelKey(field: FormField): string {\r\n return field.listItem?.labelField ? field.listItem.labelField : \"label\";\r\n }\r\n\r\n public static valuesLabelValue(label: string, val: any) {\r\n let replaceFlag = false;\r\n const resultValue = label.replace(/\\{\\{([A-Za-z0-9_.]*)\\}\\}/g, (match, key) => {\r\n replaceFlag = true;\r\n return val[key] || \"\";\r\n });\r\n\r\n if (replaceFlag) {\r\n return resultValue;\r\n }\r\n\r\n return val[label] || \"\";\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\n\r\nconst regexp = {\r\n mobile: /^\\d{3}-\\d{3,4}-\\d{4}$/,\r\n email: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\r\n url: /^(?:(?:https?|HTTPS?|ftp|FTP):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-zA-Z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/,\r\n number: /\\d$/,\r\n alpha: /^[a-zA-Z]+$/,\r\n \"alpha-num\": /^[a-zA-Z0-9]+$/,\r\n variable: /^[a-zA-Z0-9_$][a-zA-Z0-9_$]*$/,\r\n \"number-char\": /^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]/,\r\n \"upper-char\": /^(?=.*?[A-Z])(?=.*?[a-z])/,\r\n \"upper-char-special\": /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-])/,\r\n \"upper-char-special-number\": /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]/,\r\n};\r\n\r\n/**\r\n * \uC815\uADDC\uC2DD \uC720\uD6A8\uC131 \uCCB4\uD06C.\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @param {(ValidResult | undefined)} result\r\n * @returns {ValidResult}\r\n */\r\nexport const regexpValidator = (value: string, field: FormField, result: ValidResult): ValidResult => {\r\n if (!field.$instance.isEnableView()) {\r\n return { name: field.name, constraint: [] };\r\n }\r\n\r\n if (typeof result === \"undefined\") {\r\n result = { name: field.name, constraint: [] };\r\n }\r\n\r\n const regexpType = field.regexpType;\r\n\r\n if (regexpType) {\r\n if (!regexp[regexpType].test(value)) {\r\n result.regexp = regexpType;\r\n return result;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { regexpValidator } from \"./regexpValidator\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\n/**\r\n * validator , regexp \uCCB4\uD06C .\r\n *\r\n * @param {string} value field value\r\n * @param {FormField} field field \uC815\uBCF4\r\n * @param {ValidResult} result\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const validator = (value: string, field: FormField, result: ValidResult): ValidResult | boolean => {\r\n if (field.validator) {\r\n result.validator = field.validator(field, value);\r\n if (typeof result.validator === \"object\") {\r\n return result;\r\n }\r\n }\r\n\r\n result = regexpValidator(value, field, result);\r\n\r\n if (result.regexp) {\r\n return result;\r\n }\r\n\r\n if (field.different) {\r\n const diffFieldName = field.different.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() == diffField.$instance.getValue()) {\r\n result.message = field.different.message;\r\n return result;\r\n }\r\n }\r\n\r\n if (field.identical) {\r\n const diffFieldName = field.identical.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() != diffField.$instance.getValue()) {\r\n result.message = field.identical.message;\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { validator } from \"./validator\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\n/**\r\n * \uC22B\uC790 \uC720\uD6A8\uC131 \uCCB4\uD06C\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const numberValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n const numValue = Number(value);\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (!utils.isNumber(value)) {\r\n result.constraint.push(RULES.NAN);\r\n return result;\r\n }\r\n\r\n if (validator(value, field, result) !== true) {\r\n return result;\r\n }\r\n\r\n const rule = field.rule;\r\n if (rule) {\r\n const isMinimum = utils.isNumber(rule.minimum),\r\n isMaximum = utils.isNumber(rule.maximum);\r\n\r\n let minRule = false,\r\n minExclusive = false,\r\n maxRule = false,\r\n maxExclusive = false;\r\n\r\n if (isMinimum) {\r\n if (rule.exclusiveMinimum && numValue <= rule.minimum) {\r\n minExclusive = true;\r\n } else if (numValue < rule.minimum) {\r\n minRule = true;\r\n }\r\n }\r\n\r\n if (isMaximum) {\r\n if (rule.exclusiveMaximum && numValue >= rule.maximum) {\r\n maxExclusive = true;\r\n } else if (numValue > rule.maximum) {\r\n maxRule = true;\r\n }\r\n }\r\n\r\n if (isMinimum && isMaximum && (minRule || minExclusive || maxRule || maxExclusive)) {\r\n if (rule.exclusiveMinimum && rule.exclusiveMaximum && (minExclusive || maxExclusive)) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MINMAX);\r\n } else if (minExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MIN);\r\n } else if (maxExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MAX);\r\n } else {\r\n result.constraint.push(RULES.BETWEEN);\r\n }\r\n } else {\r\n if (minExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MIN);\r\n }\r\n\r\n if (maxExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MAX);\r\n }\r\n\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX);\r\n }\r\n }\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport Lanauage from \"./Lanauage\";\r\n\r\nexport const invalidMessage = (field: FormField, rowElement: Element, validResult: ValidResult | boolean) => {\r\n if (validResult === true) {\r\n rowElement.classList.remove(\"invalid\");\r\n\r\n if (!rowElement.classList.contains(\"valid\")) {\r\n rowElement.classList.add(\"valid\");\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".help-message\");\r\n if (helpMessageElement) {\r\n helpMessageElement.innerHTML = \"\";\r\n }\r\n\r\n return;\r\n }\r\n\r\n rowElement.classList.remove(\"valid\");\r\n\r\n if (!rowElement.classList.contains(\"invalid\")) {\r\n rowElement.classList.add(\"invalid\");\r\n }\r\n\r\n if (validResult !== false) {\r\n const message: string[] = Lanauage.validMessage(field, validResult);\r\n\r\n if (validResult.message) {\r\n message.push(validResult.message);\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".help-message\");\r\n if (helpMessageElement && message.length > 0) {\r\n const msgHtml: string[] = [];\r\n message.forEach((item) => {\r\n msgHtml.push(`<div>${item}</div>`);\r\n });\r\n helpMessageElement.innerHTML = msgHtml.join(\"\");\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * remove row element style class\r\n *\r\n * @param {Element} rowElement\r\n */\r\nexport const resetRowElementStyleClass = (rowElement: Element) => {\r\n rowElement.classList.remove(\"invalid\");\r\n rowElement.classList.remove(\"valid\");\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"src/renderer/Render\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport const inputEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"input\", (e: Event) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const numberInputEvent = (field: FormField, element: HTMLInputElement, renderInfo: Render) => {\r\n element.addEventListener(\"keyup\", (e: any) => {\r\n const val = e.target.value;\r\n\r\n if (!utils.isNumber(val)) {\r\n element.value = val.replace(/[^0-9\\.\\-\\+]/g, \"\");\r\n e.preventDefault();\r\n }\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n\r\n /*\r\n element.addEventListener('input', (e: any) => {\r\n customChangeEventCall(field, e, renderInfo);\r\n renderInfo.valid();\r\n })\r\n */\r\n};\r\n\r\nexport const dropdownChangeEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"change\", (e: any) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const customChangeEventCall = (field: FormField, e: Event, renderInfo: Render, value: any) => {\r\n renderInfo.changeEventCall(field, e, renderInfo, value);\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { numberValidator } from \"src/rule/numberValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { numberInputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class NumberRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n numberInputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field number help-icon\" />\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = numberValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { validator } from \"./validator\";\r\n\r\n/**\r\n * string validator\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const stringValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n let result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n const validResult = validator(value, field, result);\r\n if (validResult !== true) {\r\n return validResult;\r\n }\r\n\r\n const rule = field.rule;\r\n\r\n if (rule) {\r\n const valueLength = value.length;\r\n\r\n const isMinNumber = utils.isNumber(rule.minLength),\r\n isMaxNumber = utils.isNumber(rule.maxLength);\r\n\r\n let minRule = false,\r\n maxRule = false;\r\n if (isMinNumber && valueLength < rule.minLength) {\r\n minRule = true;\r\n }\r\n if (isMaxNumber && valueLength > rule.maxLength) {\r\n maxRule = true;\r\n }\r\n\r\n if (isMinNumber && isMaxNumber && (minRule || maxRule)) {\r\n result.constraint.push(RULES.BETWEEN);\r\n } else {\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN_LENGTH);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX_LENGTH);\r\n }\r\n }\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class TextAreaRender extends Render {\r\n private element: HTMLTextAreaElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let rows = field.customOptions?.rows;\r\n rows = +rows > 0 ? rows : 3;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <textarea name=\"${field.$xssName}\" rows=\"${rows}\" class=\"form-field textarea help-icon\"></textarea>\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLTextAreaElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { dropdownChangeEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport Lanauage from \"src/util/Lanauage\";\r\n\r\nexport default class DropdownRender extends Render {\r\n private element: HTMLSelectElement;\r\n private defaultSelected;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n let initDefaultValue = \"\";\r\n\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n }\r\n\r\n const valueKey = DropdownRender.valuesValueKey(field);\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultSelected = itemValue;\r\n }\r\n if (itemValue == initDefaultValue) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n if (initDefaultValueFlag) {\r\n this.defaultSelected = initDefaultValue;\r\n } else if (!this.defaultSelected) {\r\n if (field.customOptions?.disableDefaultOption === true) {\r\n this.defaultSelected = this.field.listItem?.list?.length > 0 ? this.field.listItem.list[0][valueKey] || \"\" : \"\";\r\n }\r\n }\r\n\r\n if (utils.isUndefined(this.defaultSelected)) {\r\n this.defaultSelected = \"\";\r\n }\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultSelected, false);\r\n }\r\n\r\n mounted() {\r\n dropdownChangeEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let template = ` <div class=\"df-field\"><select name=\"${field.$xssName}\" class=\"form-field dropdown\">\r\n ${this.dropdownValuesTemplate(field)}\r\n </select> <i class=\"help-icon\"></i></div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n fieldContainerElement.innerHTML = template;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLSelectElement;\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n this.element.innerHTML = this.dropdownValuesTemplate(this.field);\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setValue(this.defaultSelected, false);\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required) {\r\n if (value.length < 1) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n\r\n public dropdownValuesTemplate(field: FormField) {\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n let template = \"\";\r\n\r\n if (field.customOptions?.disableDefaultOption !== true) {\r\n template += `<option value=\"\">${Lanauage.getMessage(\"selection\")}</option>`;\r\n }\r\n field.listItem?.list?.forEach((val) => {\r\n const attr = `${val.selected ? \"selected\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}`;\r\n if (utils.isUndefined(val[valueKey]) && val.label) {\r\n template += `<option value=\"${val.value || \"\"}\" ${attr}>${val.label}</option>`;\r\n } else {\r\n template += `<option value=\"${val[valueKey]}\" ${attr}>${Render.valuesLabelValue(labelKey, val)}</option>`;\r\n }\r\n });\r\n\r\n return template;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class TextRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field text help-icon\" />\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class CheckboxRender extends Render {\r\n private defaultCheckValue: any[] = [];\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.defaultCheckValue = [];\r\n let initDefaultValue = [] as any;\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n if (utils.isArray(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n } else {\r\n initDefaultValue = [field.defaultValue];\r\n }\r\n }\r\n\r\n const valueKey = CheckboxRender.valuesValueKey(field);\r\n\r\n if (utils.isUndefined(this.field.listItem)) {\r\n this.setValueItems([{ label: \"\", value: \"Y\" }]);\r\n }\r\n\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultCheckValue.push(itemValue ? itemValue : true);\r\n }\r\n if (initDefaultValue.includes(itemValue)) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n this.defaultCheckValue = initDefaultValueFlag ? initDefaultValue : this.defaultCheckValue;\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n\r\n public mounted() {\r\n this.initEvent();\r\n }\r\n\r\n public initEvent() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n ele.addEventListener(\"change\", (e: Event) => {\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n this.valid();\r\n });\r\n });\r\n }\r\n\r\n public getSelector() {\r\n return `input[type=\"checkbox\"][name=\"${this.field.$xssName}\"]`;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n const templates: string[] = [];\r\n const fieldName = field.$xssName;\r\n\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n templates.push(` <div class=\"df-field\"><div class=\"field-group\">`);\r\n field.listItem?.list?.forEach((val) => {\r\n const checkVal = val[valueKey];\r\n templates.push(`\r\n <span class=\"field ${field.listItem.orientation == \"vertical\" ? \"vertical\" : \"horizontal\"}\">\r\n <label>\r\n <input type=\"checkbox\" name=\"${fieldName}\" value=\"${checkVal ? utils.replaceXss(checkVal) : \"\"}\" class=\"form-field checkbox\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"} />\r\n ${Render.valuesLabelValue(labelKey, val)}\r\n </label>\r\n </span>\r\n `);\r\n });\r\n templates.push(`<i class=\"daracl-icon help-icon\"></i></div></div> ${Render.getDescriptionTemplate(field)}<div class=\"help-message\"></div>`);\r\n\r\n fieldContainerElement.innerHTML = templates.join(\"\");\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\r\n if (containerEle) {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n\r\n this.createField();\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n }\r\n\r\n getValue() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n if (checkboxes.length > 1) {\r\n const checkValue: any[] = [];\r\n checkboxes.forEach((ele) => {\r\n const checkEle = ele as HTMLInputElement;\r\n if (checkEle.checked) {\r\n checkValue.push(checkEle.value);\r\n }\r\n });\r\n return checkValue;\r\n } else {\r\n const checkElement = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement;\r\n\r\n if (checkElement?.checked) {\r\n return checkElement.value ? checkElement.value : true;\r\n }\r\n\r\n return checkElement.value ? \"\" : false;\r\n }\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n\r\n this.field.$value = value;\r\n if (value === true) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\r\n return;\r\n }\r\n\r\n if (value === false) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\r\n return;\r\n }\r\n\r\n let valueArr: any[] = [];\r\n if (Array.isArray(value)) {\r\n valueArr = value;\r\n } else {\r\n valueArr.push(value);\r\n }\r\n\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n (ele as HTMLInputElement).checked = false;\r\n });\r\n\r\n valueArr.forEach((val) => {\r\n const ele = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"][value=\"${val}\"]`) as HTMLInputElement;\r\n if (ele) ele.checked = true;\r\n });\r\n }\r\n\r\n reset() {\r\n if (this.field.listItem?.list?.length == 1 && this.defaultCheckValue.length == 1) {\r\n this.setValue(true, false);\r\n } else {\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): any {\r\n return this.rowElement.querySelectorAll(`[name=\"${this.field.$xssName}\"]`);\r\n }\r\n\r\n public focus() {\r\n const elements = this.getElement();\r\n\r\n if (elements && elements.length > 0) {\r\n this.getElement()[0].focus();\r\n }\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required && utils.isArray(value)) {\r\n if ((value as any[]).length < 1) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class RadioRender extends Render {\r\n private defaultCheckValue;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.defaultCheckValue = \"\";\r\n let initDefaultValue = [] as any;\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n }\r\n\r\n const valueKey = RadioRender.valuesValueKey(field);\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultCheckValue = itemValue;\r\n }\r\n\r\n if (initDefaultValue == itemValue) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n // \uCC98\uB9AC \uD560\uAC83.\r\n\r\n if (initDefaultValueFlag) {\r\n this.defaultCheckValue = initDefaultValue;\r\n } else if (!this.defaultCheckValue) {\r\n this.defaultCheckValue = this.field.listItem?.list?.length > 0 ? this.field.listItem?.list[0][valueKey] : \"\";\r\n }\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n\r\n public mounted() {\r\n this.initEvent();\r\n }\r\n\r\n public initEvent() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n ele.addEventListener(\"change\", (e: Event) => {\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n\r\n this.valid();\r\n });\r\n });\r\n }\r\n\r\n public getSelector() {\r\n return `input[type=\"radio\"][name=\"${this.field.$xssName}\"]`;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n const templates: string[] = [];\r\n const fieldName = field.$xssName;\r\n\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n templates.push(`<div class=\"df-field\"><div class=\"field-group\">`);\r\n\r\n field.listItem?.list?.forEach((val) => {\r\n const radioVal = val[valueKey];\r\n\r\n templates.push(\r\n `<span class=\"field ${field.orientation == \"vertical\" ? \"vertical\" : \"horizontal\"}\">\r\n <label>\r\n <input type=\"radio\" name=\"${fieldName}\" value=\"${radioVal}\" class=\"form-field radio\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}/>\r\n ${Render.valuesLabelValue(labelKey, val)}\r\n </label>\r\n </span>\r\n `\r\n );\r\n });\r\n templates.push(`<i class=\"daracl-icon help-icon\"></i></div></div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `);\r\n\r\n fieldContainerElement.innerHTML = templates.join(\"\");\r\n\r\n this.initEvent();\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\r\n if (containerEle) {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n\r\n this.createField();\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n }\r\n\r\n getValue() {\r\n return (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]:checked`) as HTMLInputElement)?.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n\r\n this.field.$value = value;\r\n if (value === true) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\r\n return;\r\n }\r\n\r\n if (value === false) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\r\n return;\r\n }\r\n\r\n const elements = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n elements.forEach((ele) => {\r\n let radioEle = ele as HTMLInputElement;\r\n if (radioEle.value == value) {\r\n radioEle.checked = true;\r\n } else {\r\n radioEle.checked = false;\r\n }\r\n });\r\n }\r\n\r\n reset() {\r\n this.setValue(this.defaultCheckValue, false);\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): any {\r\n return this.rowElement.querySelectorAll(this.getSelector());\r\n }\r\n\r\n public focus() {\r\n const elements = this.getElement();\r\n\r\n if (elements && elements.length > 0) {\r\n this.getElement()[0].focus();\r\n }\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required) {\r\n if (utils.isBlank(value)) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class PasswordRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"password\" name=\"${field.$xssName}\" class=\"form-field password help-icon\" autocomplete=\"off\" />\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FileInfo, FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\n\r\n/**\r\n * file validator\r\n *\r\n * @param {HTMLInputElement} element\r\n * @param {FormField} field\r\n * @param {FileInfo[]} fileList\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const fileValidator = (element: HTMLInputElement, field: FormField, fileList: FileInfo[]): ValidResult | boolean => {\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && fileList.length < 1) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FileInfo, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { fileValidator } from \"src/rule/fileValidator\";\r\nimport Lanauage from \"src/util/Lanauage\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class FileRender extends Render {\r\n private element: HTMLInputElement;\r\n private removeIds: any[] = [];\r\n private uploadFiles: any = {};\r\n private fileList: any[] = [];\r\n private fileSeq = 0;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.element = rowElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n this.fileList = field.listItem?.list || [];\r\n this.mounted();\r\n this.setDefaultOption();\r\n }\r\n\r\n mounted() {\r\n this.element.addEventListener(\"change\", (e: Event) => {\r\n const files = (e.target as HTMLInputElement)?.files;\r\n\r\n if (files) {\r\n let fileList = [];\r\n for (let item of files) {\r\n fileList.push(item);\r\n }\r\n this.addFiles(fileList);\r\n }\r\n customChangeEventCall(this.field, e, this, this.fileList);\r\n this.valid();\r\n });\r\n\r\n this.fileList.forEach((file) => {\r\n file.$seq = this.fileSeq += 1;\r\n });\r\n\r\n this.setFileList(this.fileList);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <span class=\"file-wrapper\">\r\n <label class=\"file-label\">\r\n <input type=\"file\" name=\"${field.$xssName}\" class=\"form-field file\" multiple />\r\n ${Lanauage.getMessage(\"fileButton\")}\r\n </label>\r\n <i class=\"daracl-icon help-icon\"></i>\r\n </span>\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"daracl-file-list\"></div>\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n addFiles(files: any[]) {\r\n let addFlag = false;\r\n\r\n const newFiles: FileInfo[] = [];\r\n\r\n for (let item of files) {\r\n const fileCheckList = this.fileList.filter((fileItem) => fileItem.fileName == item.name && fileItem.fileSize == item.size && fileItem.lastModified == item.lastModified);\r\n\r\n if (fileCheckList.length > 0) continue;\r\n this.fileSeq += 1;\r\n this.uploadFiles[this.fileSeq] = item;\r\n\r\n let newFileInfo = {\r\n fileName: item.name,\r\n $seq: this.fileSeq,\r\n fileSize: item.size,\r\n lastModified: item.lastModified,\r\n } as FileInfo;\r\n\r\n newFiles.push(newFileInfo);\r\n addFlag = true;\r\n }\r\n if (addFlag) {\r\n this.setFileList(newFiles);\r\n this.fileList.push(...newFiles);\r\n }\r\n }\r\n\r\n private setFileList(fileList: FileInfo[], initFlag?: boolean | undefined) {\r\n const fileListElement = this.rowElement.querySelector(\".daracl-file-list\");\r\n\r\n if (fileListElement) {\r\n if (initFlag === true) {\r\n fileListElement.innerHTML = \"\";\r\n }\r\n\r\n const fileTemplateHtml: string[] = [];\r\n\r\n fileList.forEach((file) => {\r\n fileTemplateHtml.push(`\r\n <div class=\"file-item\" data-seq=\"${file.$seq}\">\r\n ${file.fileId ? '<span class=\"file-icon download\"></span>' : '<span class=\"file-icon\"></span>'} <span class=\"file-icon remove\"></span>\r\n <span class=\"file-name\">${file.fileName}</span > \r\n </div>`);\r\n });\r\n\r\n fileListElement.insertAdjacentHTML(\"beforeend\", fileTemplateHtml.join(\"\"));\r\n\r\n fileList.forEach((item) => {\r\n this.removeFileEvent(item, fileListElement);\r\n this.downloadFileEvent(item, fileListElement);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uD30C\uC77C \uB2E4\uC6B4\uB85C\uB4DC \uC774\uBCA4\uD2B8 \uCC98\uB9AC.\r\n *\r\n * @param item\r\n * @param fileListElement\r\n */\r\n private downloadFileEvent(item: FileInfo, fileListElement: Element) {\r\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .download`);\r\n if (ele) {\r\n ele.addEventListener(\"click\", (evt: Event) => {\r\n const fileItemElement = (evt.target as Element).closest(\".file-item\");\r\n\r\n if (fileItemElement) {\r\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\r\n if (attrSeq) {\r\n const seq = parseInt(attrSeq, 10);\r\n const idx = this.fileList.findIndex((v) => v.$seq === seq);\r\n\r\n const item = this.fileList[idx];\r\n\r\n if (item[\"url\"]) {\r\n location.href = item[\"url\"];\r\n return;\r\n }\r\n\r\n if (this.field.fileDownload) {\r\n this.field.fileDownload.call(null, { file: item, field: this.field });\r\n return;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uD30C\uC77C \uC0AD\uC81C \uCC98\uB9AC.\r\n *\r\n * @param item\r\n * @param fileListElement\r\n */\r\n private removeFileEvent(item: FileInfo, fileListElement: Element) {\r\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .remove`);\r\n if (ele) {\r\n ele.addEventListener(\"click\", (evt: Event) => {\r\n const fileItemElement = (evt.target as Element).closest(\".file-item\");\r\n\r\n if (fileItemElement) {\r\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\r\n if (attrSeq) {\r\n const seq = parseInt(attrSeq, 10);\r\n const removeIdx = this.fileList.findIndex((v) => v.$seq === seq);\r\n\r\n const removeItem = this.fileList[removeIdx];\r\n\r\n this.fileList.splice(removeIdx, 1);\r\n delete this.uploadFiles[seq];\r\n fileItemElement.remove();\r\n\r\n if (removeItem.fileId) {\r\n this.removeIds.push(removeItem.fileId);\r\n }\r\n }\r\n }\r\n this.valid();\r\n });\r\n }\r\n }\r\n\r\n getValue() {\r\n return {\r\n uploadFile: Object.values(this.uploadFiles),\r\n removeIds: this.removeIds,\r\n };\r\n }\r\n\r\n public setValueItems(value: any): void {\r\n this.fileList = [];\r\n this.uploadFiles = [];\r\n this.removeIds = [];\r\n for (let file of value) {\r\n file.$seq = this.fileSeq += 1;\r\n\r\n this.fileList.push(file);\r\n }\r\n\r\n this.setFileList(this.fileList, true);\r\n }\r\n\r\n setValue(value: any): void {\r\n if (utils.isArray(value)) {\r\n this.setValueItems(value);\r\n }\r\n this.element.value = \"\";\r\n }\r\n\r\n reset() {\r\n this.setValue(\"\");\r\n this.setValueItems([]);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = fileValidator(this.element, this.field, this.fileList);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage, resetRowElementStyleClass } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\n\r\nexport default class CustomRender extends Render {\r\n private customFunction;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n }\r\n\r\n mounted() {\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldTemplate = utils.isEmpty(field.template) ? \"\" : utils.isString(field.template) ? field.template : field.template();\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = ` <div class=\"df-field\">\r\n ${fieldTemplate}\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>`;\r\n }\r\n\r\n getValue() {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n return \"\";\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (this.customFunction.setValue) {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n (this.customFunction.setValue as any).call(this, value, this.field, this.rowElement);\r\n }\r\n\r\n this.field.$value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement() {\r\n if (this.customFunction.getElement) {\r\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\r\n }\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n\r\n /**\r\n * focus\r\n */\r\n focus(): void {\r\n if (this.customFunction.focus) {\r\n (this.customFunction.focus as any).call(this, this.field, this.rowElement);\r\n }\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class GroupRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n }\r\n\r\n public mounted() {}\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n return \"\";\r\n }\r\n\r\n getValue() {\r\n return null;\r\n }\r\n\r\n setValue(value: any): void {}\r\n\r\n reset() {}\r\n\r\n getElement(): HTMLElement {\r\n return this.rowElement;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n\r\n public addChildField(element: Element) {\r\n let addContainer = this.rowElement.querySelector(\".df-field-container\");\r\n\r\n if (addContainer) {\r\n addContainer.append(element);\r\n } else {\r\n this.rowElement.append(element);\r\n }\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class HiddenRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.field.$value = field.defaultValue;\r\n }\r\n\r\n mounted() {}\r\n\r\n createField() {\r\n return ``;\r\n }\r\n\r\n getValue() {\r\n return this.field.$value;\r\n }\r\n\r\n setValue(value: any): void {\r\n this.field.$value = value;\r\n }\r\n\r\n reset() {\r\n this.setValue(this.field.defaultValue);\r\n }\r\n\r\n getElement() {\r\n return;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class ButtonRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.mounted();\r\n this.setDefaultOption();\r\n }\r\n\r\n mounted() {\r\n this.rowElement.querySelector(`#${this.field.$key}`)?.addEventListener(\"click\", (evt) => {\r\n if (this.field.onClick) {\r\n this.field.onClick.call(null, this.field);\r\n }\r\n });\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <button type=\"button\" id=\"${field.$key}\" class=\"df-btn\">${field.label}</button> ${Render.getDescriptionTemplate(field)}\r\n `;\r\n }\r\n\r\n getValue() {\r\n return \"\";\r\n }\r\n\r\n setValue(value: any): void {}\r\n\r\n reset() {\r\n this.setDisabled(false);\r\n }\r\n\r\n getElement() {\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { numberValidator } from \"src/rule/numberValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall, numberInputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class RangeRender extends Render {\r\n private element: HTMLInputElement;\r\n private rangeNumElement: Element;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.rangeNumElement = rowElement.querySelector(\".range-num\") as Element;\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n this.element.addEventListener(\"input\", (e: any) => {\r\n this.rangeNumElement.innerHTML = e.target.value;\r\n\r\n this.element.setAttribute(\"title\", e.target.value);\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n this.valid();\r\n });\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <span class=\"range-num\">${field.defaultValue ? field.defaultValue : 0}</span>\r\n <input type=\"range\" name=\"${field.$xssName}\" class=\"form-field range help-icon\" min=\"${field.rule.minimum}\" max=\"${field.rule.maximum}\"/>\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = numberValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { Message } from \"@t/Message\";\r\n\r\nlet localeMessage: Message = {\r\n year: \"Year\",\r\n month: \"Month\",\r\n day: \"Day\",\r\n am: \"AM\",\r\n pm: \"PM\",\r\n today: \"Today\",\r\n ok: \"Ok\",\r\n months: {\r\n full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n abbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n },\r\n weeks: {\r\n full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n abbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n },\r\n};\r\n\r\n/**\r\n * validation \uBA54\uC2DC\uC9C0 \uCC98\uB9AC.\r\n *\r\n * @class Language\r\n * @typedef {Language}\r\n */\r\nclass Language {\r\n private lang: Message = localeMessage;\r\n\r\n public setDefaultMessage(lang?: Message) {\r\n localeMessage = Object.assign(localeMessage, lang);\r\n }\r\n\r\n /**\r\n * \uB2E4\uAD6D\uC5B4 \uBA54\uC2DC\uC9C0 \uB4F1\uB85D\r\n *\r\n * @public\r\n * @param {?Message} [lang] \uB465\uB85D\uD560 \uBA54\uC2DC\uC9C0\r\n */\r\n public set(lang?: Message) {\r\n this.lang = Object.assign({}, localeMessage, lang);\r\n }\r\n\r\n /**\r\n * \uBA54\uC2DC\uC9C0 \uC5BB\uAE30\r\n *\r\n * @public\r\n * @param {string} messageKey \uBA54\uC2DC\uC9C0 \uD0A4\r\n * @returns {*}\r\n */\r\n public getMessage(messageKey: string): any {\r\n return (this.lang as any)[messageKey];\r\n }\r\n\r\n public getMonthsMessage(idx: number, mode: \"full\" | \"abbr\" = \"abbr\") {\r\n return (this.lang.months as any)[mode][idx] || \"\";\r\n }\r\n\r\n public getWeeksMessage(idx: number, mode: \"full\" | \"abbr\" = \"abbr\") {\r\n return (this.lang.weeks as any)[mode][idx] || \"\";\r\n }\r\n\r\n public getMonthsIdx(val: string, mode: \"full\" | \"abbr\" = \"abbr\"): number {\r\n return mode == \"full\" ? this.lang.months.full.indexOf(val) : this.lang.months.abbr.indexOf(val);\r\n }\r\n\r\n public getWeeksIdx(val: string, mode: \"full\" | \"abbr\" = \"abbr\"): number {\r\n return mode == \"full\" ? this.lang.weeks.full.indexOf(val) : this.lang.weeks.abbr.indexOf(val);\r\n }\r\n}\r\n\r\nfunction message(msgFormat: string, msgParam: any): string {\r\n return msgFormat.replace(/\\{{1,1}([A-Za-z0-9_.]*)\\}{1,1}/g, (match, key) => {\r\n return typeof msgParam[key] !== \"undefined\" ? msgParam[key] : match;\r\n });\r\n}\r\n\r\nexport default new Language();\r\n", "export const EXPRESSIONS_FORMAT = [\"YY\", \"YYYY\", \"MMMM\", \"MMM\", \"MM\", \"M\", \"dddd\", \"ddd\", \"dd\", \"d\", \"DD\", \"D\", \"S\", \"HH\", \"H\", \"hh\", \"h\", \"mm\", \"m\", \"ss\", \"s\", \"SSS\", \"zzzz\", \"zzz\", \"zz\", \"z\", \"a\", \"A\"];\r\n\r\nexport let MAX_CHAR_LENGTH = 0;\r\n\r\nexport let DEFAULT_FORMAT = {\r\n year: \"YYYY\",\r\n month: \"YYYY-MM\",\r\n date: \"YYYY-MM-DD\",\r\n time: \"HH:mm\",\r\n datetime: \"YYYY-MM-DD HH:mm\",\r\n};\r\n\r\nexport const DAY_STYLE_CLASS = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"];\r\n\r\nexport enum DateViewMode {\r\n year = \"year\",\r\n month = \"month\",\r\n date = \"date\",\r\n datetime = \"datetime\",\r\n time = \"time\",\r\n}\r\n\r\nEXPRESSIONS_FORMAT.forEach((item) => {\r\n MAX_CHAR_LENGTH = Math.max(item.length, MAX_CHAR_LENGTH);\r\n});\r\n", "const xssFilter = {\r\n \"&\": \"&amp;\",\r\n \"<\": \"&lt;\",\r\n \">\": \"&gt;\",\r\n '\"': \"&quot;\",\r\n \"'\": \"&#39;\",\r\n} as any;\r\n\r\nexport default {\r\n replace(str: string): string {\r\n let returnText = str;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, xssFilter[key]);\r\n });\r\n }\r\n return returnText;\r\n },\r\n\r\n unReplace(inputText: string): string {\r\n let returnText = inputText;\r\n\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(xssFilter[key], key);\r\n });\r\n }\r\n return returnText;\r\n },\r\n\r\n unFieldName(fieldName: string): string {\r\n if (fieldName) {\r\n return this.unReplace(fieldName).replaceAll('\"', '\\\\\"');\r\n }\r\n return \"\";\r\n },\r\n\r\n isBlank(value: any): boolean {\r\n if (value === null) return true;\r\n if (value === \"\") return true;\r\n if (typeof value === \"undefined\") return true;\r\n if (typeof value === \"string\" && (value === \"\" || value.replace(/\\s/g, \"\") === \"\")) return true;\r\n\r\n return false;\r\n },\r\n\r\n isUndefined(value: any): value is undefined {\r\n return typeof value === \"undefined\";\r\n },\r\n\r\n isFunction(value: any): boolean {\r\n return typeof value === \"function\";\r\n },\r\n\r\n isString(value: any): value is string {\r\n return typeof value === \"string\";\r\n },\r\n isNumber(value: any): value is number {\r\n if (this.isBlank(value)) {\r\n return false;\r\n }\r\n return !isNaN(value);\r\n },\r\n\r\n isArray(value: any) {\r\n return Array.isArray(value);\r\n },\r\n\r\n getHashCode(str: string) {\r\n let hash = 0;\r\n if (str.length == 0) return hash;\r\n for (let i = 0; i < str.length; i++) {\r\n let tmpChar = str.charCodeAt(i);\r\n hash = (hash << 5) - hash + tmpChar;\r\n hash = hash & hash;\r\n }\r\n return hash;\r\n },\r\n\r\n pad(str: any, length: number): string {\r\n str = String(str);\r\n while (str.length < length) {\r\n str = \"0\" + str;\r\n }\r\n return str;\r\n },\r\n\r\n closestElement(el: HTMLElement, checkElement: Element) {\r\n let currentEl: HTMLElement | null = el;\r\n while (currentEl) {\r\n if (currentEl == checkElement) {\r\n return true;\r\n }\r\n\r\n currentEl = currentEl.parentElement;\r\n }\r\n\r\n return false;\r\n },\r\n};\r\n", "import Lanauage from \"src/Lanauage\";\r\nimport { MAX_CHAR_LENGTH, EXPRESSIONS_FORMAT } from \"src/constants\";\r\nimport utils from \"src/util/utils\";\r\n\r\nexport default (date: Date, format: string) => {\r\n format = format || \"YYYY-MM-DD\";\r\n const len = format.length;\r\n\r\n let result = [];\r\n for (let i = 0; i < len; ) {\r\n let minLen = Math.min(MAX_CHAR_LENGTH, len - i);\r\n let j = minLen;\r\n for (; j > 0; j--) {\r\n const v = format.substring(i, i + j);\r\n if (EXPRESSIONS_FORMAT.includes(v)) {\r\n try {\r\n result.push(expressionsFunction[v](date));\r\n } catch (e) {\r\n console.log(EXPRESSIONS_FORMAT.includes(v), v, e);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (j < 1) {\r\n result.push(format.substring(i, i + 1));\r\n i += 1;\r\n } else {\r\n i += j;\r\n }\r\n }\r\n\r\n return result.join(\"\");\r\n};\r\n\r\nconst expressionsFunction: any = {\r\n YY: (date: Date) => {\r\n return String(date.getFullYear()).slice(-2);\r\n },\r\n YYYY: (date: Date) => {\r\n return String(date.getFullYear());\r\n },\r\n M: (date: Date) => {\r\n return String(date.getMonth() + 1);\r\n },\r\n MM: (date: Date) => {\r\n return utils.pad(date.getMonth() + 1, 2);\r\n },\r\n MMM: (date: Date) => {\r\n return Lanauage.getMonthsMessage(date.getMonth());\r\n },\r\n MMMM: (date: Date) => {\r\n return Lanauage.getMonthsMessage(date.getMonth(), \"full\");\r\n },\r\n D: (date: Date) => {\r\n return String(date.getDate());\r\n },\r\n DD: (date: Date) => {\r\n return utils.pad(date.getDate(), 2);\r\n },\r\n d: (date: Date) => {\r\n return String(date.getDate());\r\n },\r\n dd: (date: Date) => {\r\n return utils.pad(date.getDate(), 2);\r\n },\r\n ddd: (date: Date) => {\r\n return Lanauage.getWeeksMessage(date.getDay());\r\n },\r\n dddd: (date: Date) => {\r\n return Lanauage.getWeeksMessage(date.getDay(), \"full\");\r\n },\r\n H: (date: Date) => {\r\n return String(date.getHours());\r\n },\r\n HH: (date: Date) => {\r\n return utils.pad(date.getHours(), 2);\r\n },\r\n h: (date: Date) => {\r\n return getH(date);\r\n },\r\n hh: (date: Date) => {\r\n return utils.pad(getH(date), 2);\r\n },\r\n a: (date: Date) => {\r\n return String(date.getFullYear()).slice(-2);\r\n },\r\n A: (date: Date) => {\r\n return getMeridiem(date, true, true);\r\n },\r\n m: (date: Date) => {\r\n return String(date.getMinutes());\r\n },\r\n mm: (date: Date) => {\r\n return utils.pad(date.getMinutes(), 2);\r\n },\r\n s: (date: Date) => {\r\n return String(date.getSeconds());\r\n },\r\n ss: (date: Date) => {\r\n return utils.pad(date.getSeconds(), 2);\r\n },\r\n SSS: (date: Date) => {\r\n return utils.pad(date.getMilliseconds(), 3);\r\n },\r\n};\r\n\r\nfunction getH(date: Date) {\r\n let hour = date.getHours();\r\n if (hour > 12) {\r\n hour -= 12;\r\n } else if (hour < 1) {\r\n hour = 12;\r\n }\r\n return hour;\r\n}\r\n\r\nfunction getMeridiem(date: Date, isUpper: boolean, isShort: boolean) {\r\n const hour = date.getHours();\r\n let m = hour < 12 ? \"am\" : \"pm\";\r\n\r\n m = Lanauage.getMessage(m);\r\n m = isUpper ? m.toUpperCase() : m;\r\n\r\n return m;\r\n}\r\n", "import Lanauage from \"src/Lanauage\";\r\nimport { DEFAULT_FORMAT, EXPRESSIONS_FORMAT, MAX_CHAR_LENGTH } from \"src/constants\";\r\n\r\ntype DateInfo = {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hour: number;\r\n minute: number;\r\n second: number;\r\n millisecond: number;\r\n isPm: boolean;\r\n isH: boolean;\r\n timezoneOffset?: number | null;\r\n charIdx: number;\r\n};\r\n\r\nexport default (dateStr: string, format: string): Date | null => {\r\n if (dateStr.length > 1000) {\r\n return null;\r\n }\r\n\r\n format = format || DEFAULT_FORMAT.date;\r\n\r\n const dateInfo: DateInfo = {\r\n year: new Date().getFullYear(),\r\n month: 0,\r\n day: 1,\r\n hour: 0,\r\n minute: 0,\r\n second: 0,\r\n millisecond: 0,\r\n isPm: false,\r\n isH: false,\r\n charIdx: 0,\r\n };\r\n\r\n const len = format.length;\r\n let startIdx = 0;\r\n\r\n for (let i = 0; i < len; ) {\r\n let minLen = Math.min(MAX_CHAR_LENGTH, len - i);\r\n let j = minLen;\r\n for (; j > 0; j--) {\r\n const v = format.substring(i, i + j);\r\n if (EXPRESSIONS_FORMAT.includes(v)) {\r\n const expInfo = expressionsFunction[v];\r\n const val = matchFind(dateStr.substring(startIdx), expInfo[0]);\r\n expInfo[1](dateInfo, val);\r\n startIdx += val.length;\r\n break;\r\n }\r\n }\r\n\r\n if (j < 1) {\r\n i += 1;\r\n startIdx += 1;\r\n } else {\r\n i += j;\r\n }\r\n }\r\n\r\n if (dateInfo.hour != null && !dateInfo.isH) {\r\n if (dateInfo.isPm && +dateInfo.hour !== 12) {\r\n dateInfo.hour = +dateInfo.hour + 12;\r\n } else if (!dateInfo.isPm && +dateInfo.hour === 12) {\r\n dateInfo.hour = 0;\r\n }\r\n }\r\n\r\n let date: Date;\r\n\r\n date = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\r\n\r\n return date;\r\n};\r\n\r\n// match word\r\nconst matchFind = (val: string, regexp: RegExp) => {\r\n const match = regexp.exec(val);\r\n\r\n return match == null ? \"\" : match[0];\r\n};\r\n\r\n// number check regular expression\r\nconst digitsCheck: Record<string, RegExp> = {\r\n twoOptional: /\\d\\d?/,\r\n two: /\\d\\d/,\r\n three: /\\d{3}/,\r\n four: /\\d{4}/,\r\n};\r\n\r\n// word check regular expression\r\nconst word = /[^\\s]+/;\r\n\r\nconst expressionsFunction: Record<string, [RegExp, (dateInfo: DateInfo, val: string) => DateInfo]> = {\r\n YY: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.year = +((\"\" + new Date().getFullYear()).substring(0, 2) + val);\r\n return dateInfo;\r\n },\r\n ],\r\n YYYY: [\r\n digitsCheck[\"four\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.year = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n M: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = +val - 1;\r\n return dateInfo;\r\n },\r\n ],\r\n MM: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = +val - 1;\r\n return dateInfo;\r\n },\r\n ],\r\n MMM: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = Lanauage.getMonthsIdx(val, \"abbr\");\r\n return dateInfo;\r\n },\r\n ],\r\n MMMM: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.month = Lanauage.getMonthsIdx(val, \"full\");\r\n return dateInfo;\r\n },\r\n ],\r\n D: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n DD: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n d: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n dd: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.day = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n ddd: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n return dateInfo;\r\n },\r\n ],\r\n dddd: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n return dateInfo;\r\n },\r\n ],\r\n H: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n dateInfo.isH = true;\r\n return dateInfo;\r\n },\r\n ],\r\n HH: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n dateInfo.isH = true;\r\n return dateInfo;\r\n },\r\n ],\r\n h: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n hh: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.hour = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n a: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n if (Lanauage.getMessage(\"am\") != val.toLowerCase()) {\r\n dateInfo.isPm = true;\r\n }\r\n return dateInfo;\r\n },\r\n ],\r\n A: [\r\n word,\r\n (dateInfo: DateInfo, val: string) => {\r\n if (Lanauage.getMessage(\"am\") != val.toLowerCase()) {\r\n dateInfo.isPm = true;\r\n }\r\n return dateInfo;\r\n },\r\n ],\r\n m: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.minute = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n mm: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.minute = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n s: [\r\n digitsCheck[\"twoOptional\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.second = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n ss: [\r\n digitsCheck[\"two\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.second = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n SSS: [\r\n digitsCheck[\"three\"],\r\n (dateInfo: DateInfo, val: string) => {\r\n dateInfo.millisecond = +val;\r\n return dateInfo;\r\n },\r\n ],\r\n};\r\n", "import dateFormat from './format';\r\n\r\nexport default class DaraDate {\r\n\r\n private date;\r\n\r\n constructor(dt: Date) {\r\n this.date = dt;\r\n }\r\n\r\n public setYear(num: number) {\r\n this.date.setFullYear(num);\r\n return this;\r\n }\r\n\r\n public addYear(num: number) {\r\n this.date.setFullYear(this.date.getFullYear() + num);\r\n return this;\r\n }\r\n\r\n public addMonth(num: number) {\r\n this.date.setMonth(this.date.getMonth() + num);\r\n return this;\r\n }\r\n\r\n public setMonth(num: number) {\r\n this.date.setMonth(num);\r\n return this;\r\n }\r\n\r\n public setDate(num: number) {\r\n this.date.setDate(num);\r\n return this;\r\n }\r\n\r\n public addDate(num: number) {\r\n this.date.setDate(this.date.getDate() + num);\r\n return this;\r\n }\r\n\r\n public addWeek(num: number) {\r\n this.date.setDate(this.date.getDate() + (num * 7));\r\n return this;\r\n }\r\n\r\n public addHours(num: number) {\r\n this.date.setHours(this.date.getHours() + num);\r\n return this;\r\n }\r\n\r\n public setHour(num: number) {\r\n this.date.setHours(num);\r\n return this;\r\n }\r\n\r\n public addMinutes(num: number) {\r\n this.date.setMinutes(this.date.getMinutes() + num);\r\n return this;\r\n }\r\n\r\n public setMinutes(num: number) {\r\n this.date.setMinutes(num);\r\n return this;\r\n }\r\n\r\n public addSeconds(num: number) {\r\n this.date.setSeconds(this.date.getSeconds() + num);\r\n return this;\r\n }\r\n\r\n public addMilliseconds(num: number) {\r\n this.date.setMilliseconds(this.date.getMilliseconds() + num);\r\n return this;\r\n }\r\n\r\n public compare(date: Date) {\r\n\r\n if (this.date.valueOf() < date.valueOf()) {\r\n return -1;\r\n } else if (this.date.valueOf() > date.valueOf()) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n public getYear() {\r\n return this.date.getFullYear();\r\n }\r\n\r\n public getMonth() {\r\n return this.date.getMonth() + 1;\r\n }\r\n\r\n public getDate() {\r\n return this.date.getDate();\r\n }\r\n\r\n public getDay() {\r\n return this.date.getDay();\r\n }\r\n\r\n public getTime() {\r\n return this.date.getTime();\r\n }\r\n\r\n public format(format: string): string {\r\n return dateFormat(this.date, format);\r\n }\r\n\r\n public clone() {\r\n return new DaraDate(new Date(this.date.valueOf()));\r\n }\r\n\r\n}", "import { DateTimePickerOptions } from \"@t/DateTimePickerOptions\";\r\nimport { Message } from \"@t/Message\";\r\nimport format from \"./format\";\r\nimport parser from \"./util/parser\";\r\nimport Lanauage from \"./Lanauage\";\r\nimport utils from \"./util/utils\";\r\nimport DaraDate from \"./DaraDate\";\r\nimport { DAY_STYLE_CLASS, DEFAULT_FORMAT, DateViewMode } from \"./constants\";\r\n\r\ndeclare const APP_VERSION: string;\r\n\r\nlet DEFAULT_OPTIONS: DateTimePickerOptions = {\r\n inline: false, // layer or innerhtml\r\n weekStartDay: 0,\r\n initialDate: \"\",\r\n autoClose: true,\r\n isRTL: false,\r\n mode: DateViewMode.date,\r\n enableTodayBtn: true,\r\n showMonthAfterYear: false,\r\n isPositionFixed: false,\r\n format: \"\",\r\n zIndex: 1000,\r\n minDate: \"\",\r\n maxDate: \"\",\r\n beforeDrawDate: (dt) => {\r\n return {\r\n check: false,\r\n style: \"\",\r\n tooltip: \"\",\r\n };\r\n },\r\n};\r\n\r\nfunction hiddenElement() {\r\n if (document.getElementById(\"hiddenDaraDatetimeElement\") == null) {\r\n document.querySelector(\"body\")?.insertAdjacentHTML(\"beforeend\", `<div id=\"hiddenDaraDatetimeElement\" class=\"daracl-datetime-hidden\"></div>`);\r\n }\r\n\r\n return document.getElementById(\"hiddenDaraDatetimeElement\");\r\n}\r\n\r\nlet daraDatetimeIdx = 0;\r\n\r\n/**\r\n * date timepicker\r\n *\r\n * @class DateTimePicker1\r\n * @typedef {DateTimePicker}\r\n */\r\nexport default class DateTimePicker {\r\n public static VERSION = `${APP_VERSION}`;\r\n public static format = format;\r\n public static parser = parser;\r\n\r\n private readonly options;\r\n\r\n private datetimeElement;\r\n\r\n private targetElement: HTMLElement;\r\n\r\n private currentDate: DaraDate;\r\n\r\n private dateFormat: string;\r\n\r\n private todayDate: string;\r\n\r\n private isInput: boolean = false;\r\n\r\n private isVisible = false;\r\n\r\n private _viewMode: DateViewMode;\r\n\r\n private initMode: DateViewMode;\r\n\r\n private hourInputEle: HTMLInputElement;\r\n\r\n private minuteInputEle: HTMLInputElement;\r\n\r\n private minDate: number;\r\n private maxDate: number;\r\n private minYear: number = -1;\r\n private maxYear: number = -1;\r\n private minMonth: number = -1;\r\n private maxMonth: number = -1;\r\n\r\n // \uC694\uC77C \uC21C\uC11C.\r\n private dayOrder: number[] = [0, 1, 2, 3, 4, 5, 6];\r\n\r\n constructor(selector: string | HTMLElement, options: DateTimePickerOptions, message: Message) {\r\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\r\n\r\n daraDatetimeIdx += 1;\r\n\r\n let selectorElement: HTMLElement;\r\n if (typeof selector === \"string\") {\r\n selectorElement = document.querySelector(selector) as HTMLElement;\r\n } else {\r\n selectorElement = selector;\r\n }\r\n\r\n if (!selectorElement) {\r\n throw new Error(`${selector} datetimepicker element not found`);\r\n }\r\n\r\n this._viewMode = Object.keys(DateViewMode).includes(this.options.mode) ? this.options.mode : DateViewMode.date;\r\n\r\n this.initMode = this._viewMode;\r\n\r\n Lanauage.set(message);\r\n\r\n if (this.initMode == DateViewMode.year) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.year;\r\n } else if (this.initMode == DateViewMode.month) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.month;\r\n } else if (this.initMode == DateViewMode.time) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.time;\r\n } else if (this.initMode == DateViewMode.datetime) {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.datetime;\r\n } else {\r\n this.dateFormat = this.options.format || DEFAULT_FORMAT.date;\r\n }\r\n\r\n let viewDate: DaraDate;\r\n if (this.options.initialDate) {\r\n if (typeof this.options.initialDate === \"string\") {\r\n viewDate = new DaraDate(parser(this.options.initialDate, this.dateFormat) || new Date());\r\n } else {\r\n viewDate = new DaraDate(this.options.initialDate);\r\n }\r\n } else {\r\n viewDate = new DaraDate(new Date());\r\n this.options.initialDate = viewDate.format(this.dateFormat);\r\n }\r\n\r\n this.setWeekDays();\r\n\r\n this.todayDate = viewDate.format(DEFAULT_FORMAT.date);\r\n this.currentDate = viewDate;\r\n this.targetElement = selectorElement;\r\n\r\n this.minDate = this._minDate();\r\n this.maxDate = this._maxDate();\r\n\r\n if (this.options.inline) {\r\n this.datetimeElement = selectorElement;\r\n this.datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} embed`;\r\n } else {\r\n this.isInput = true;\r\n this.targetElement.setAttribute(\"value\", viewDate.format(this.dateFormat));\r\n\r\n const datetimeElement = document.createElement(\"div\");\r\n datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} layer`;\r\n datetimeElement.setAttribute(\"style\", `z-index:${this.options.zIndex};`);\r\n hiddenElement()?.appendChild(datetimeElement);\r\n\r\n this.datetimeElement = datetimeElement;\r\n\r\n this.initTargetEvent();\r\n }\r\n\r\n this.createDatetimeTemplate();\r\n\r\n if (this.isTimeMode()) {\r\n this.hourInputEle = this.datetimeElement.querySelector(\".ddtp-hour\") as HTMLInputElement;\r\n this.minuteInputEle = this.datetimeElement.querySelector(\".ddtp-minute\") as HTMLInputElement;\r\n } else {\r\n this.hourInputEle = {} as HTMLInputElement;\r\n this.minuteInputEle = {} as HTMLInputElement;\r\n }\r\n\r\n this.changeViewMode(this._viewMode);\r\n\r\n this.initHeaderEvent();\r\n\r\n this.initDateEvent();\r\n\r\n this.initTimeEvent();\r\n }\r\n setWeekDays() {\r\n let weekStartDay = this.options.weekStartDay;\r\n\r\n if (weekStartDay == 0) return;\r\n\r\n if (weekStartDay < 0 || weekStartDay > 6) {\r\n weekStartDay = 0;\r\n }\r\n\r\n for (let i = 0; i < 7; i++) {\r\n let day = weekStartDay + i;\r\n\r\n this.dayOrder[i] = day < 7 ? day : day - 7;\r\n }\r\n }\r\n\r\n public static create(selector: string | HTMLElement, options: DateTimePickerOptions, message: Message): DateTimePicker {\r\n return new DateTimePicker(selector, options, message);\r\n }\r\n\r\n /**\r\n * default date format setting\r\n * @example\r\n ```\r\n setDefaultFormat({\r\n year: \"YYYY\",\r\n month: \"YYYY-MM\",\r\n date: \"YYYY-MM-DD\",\r\n time: \"HH:mm\",\r\n datetime: \"YYYY-MM-DD HH:mm\",\r\n });\r\n ```\r\n * @public\r\n * @static\r\n * @param {*} dateFormat\r\n */\r\n public static setDefaultFormat(dateFormat: any) {\r\n Object.assign(DEFAULT_FORMAT, dateFormat);\r\n }\r\n\r\n private _minDate() {\r\n let minDate = this.options.minDate;\r\n\r\n if (minDate != \"\") {\r\n if (typeof minDate === \"string\") {\r\n const dt = parser(minDate, this.dateFormat);\r\n if (!dt) {\r\n return -1;\r\n }\r\n\r\n minDate = dt;\r\n }\r\n this.minYear = minDate.getFullYear();\r\n this.minMonth = +(this.minYear + utils.pad(minDate.getMonth(), 2));\r\n return new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), 0, 0).getTime();\r\n }\r\n return -1;\r\n }\r\n\r\n private _maxDate() {\r\n let maxDate = this.options.maxDate;\r\n\r\n if (maxDate != \"\") {\r\n if (typeof maxDate === \"string\") {\r\n const dt = parser(maxDate, this.dateFormat);\r\n if (!dt) {\r\n return -1;\r\n }\r\n\r\n maxDate = dt;\r\n }\r\n this.maxYear = maxDate.getFullYear();\r\n this.maxMonth = +(this.maxYear + utils.pad(maxDate.getMonth(), 2));\r\n return new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59).getTime();\r\n }\r\n return -1;\r\n }\r\n\r\n public set viewMode(mode: DateViewMode) {\r\n if (this._viewMode === mode) {\r\n return;\r\n }\r\n\r\n this._viewMode = mode;\r\n\r\n this.changeViewMode(mode);\r\n }\r\n\r\n public get viewMode(): DateViewMode {\r\n return this._viewMode;\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4DC change\r\n * @param mode\r\n */\r\n public changeViewMode(mode: DateViewMode) {\r\n this.datetimeElement.querySelector(\".ddtp-datetime\")?.setAttribute(\"view-mode\", mode);\r\n\r\n if (mode === \"year\") {\r\n this.yearDraw();\r\n } else if (mode === \"month\") {\r\n this.monthDraw();\r\n } else {\r\n this.dayDraw();\r\n }\r\n }\r\n\r\n /**\r\n * init header event\r\n *\r\n * @public\r\n */\r\n private initHeaderEvent() {\r\n const isRTL = this.options.isRTL;\r\n this.datetimeElement.querySelector(\".ddtp-move-btn.prev\")?.addEventListener(\"click\", (e: Event) => {\r\n this.moveDate(isRTL ? \"next\" : \"prev\", e);\r\n });\r\n\r\n this.datetimeElement.querySelector(\".ddtp-move-btn.next\")?.addEventListener(\"click\", (e: Event) => {\r\n this.moveDate(isRTL ? \"prev\" : \"next\", e);\r\n });\r\n\r\n this.datetimeElement.querySelector(\".ddtp-header-year\")?.addEventListener(\"click\", (e: Event) => {\r\n this.viewMode = DateViewMode.year;\r\n });\r\n\r\n this.datetimeElement.querySelector(\".ddtp-header-month\")?.addEventListener(\"click\", (e: Event) => {\r\n this.viewMode = DateViewMode.month;\r\n });\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uB2EC\uB825 \uC774\uBCA4\uD2B8\uCC98\uB9AC.\r\n */\r\n private initDateEvent() {\r\n this.datetimeElement.querySelector(\".ddtp-day-body\")?.addEventListener(\"click\", (e: Event) => {\r\n const targetEle = e.target as Element;\r\n\r\n if (targetEle.classList.contains(\"ddtp-day\") || targetEle.closest(\".ddtp-day\")) {\r\n const selectDate = targetEle.getAttribute(\"data-day\") || \"1\";\r\n\r\n const mmDD = selectDate.split(\",\");\r\n\r\n this.currentDate.setMonth(+mmDD[0] - 1);\r\n this.currentDate.setDate(+mmDD[1]);\r\n\r\n if (this.isDayDisabled(this.currentDate)) {\r\n return;\r\n }\r\n\r\n this.datetimeElement.querySelector(\".select\")?.classList.remove(\"select\");\r\n\r\n targetEle.classList.add(\"select\");\r\n\r\n if (this.isTimeMode()) {\r\n this.currentDate.setHour(+this.hourInputEle.value);\r\n this.currentDate.setMinutes(+this.minuteInputEle.value);\r\n }\r\n\r\n this.dateChangeEvent(e);\r\n }\r\n });\r\n\r\n // today click\r\n this.datetimeElement.querySelector(\".time-today\")?.addEventListener(\"click\", (e: Event) => {\r\n const initDate = new DaraDate(parser(this.todayDate, DEFAULT_FORMAT.date) || new Date());\r\n this.currentDate.setYear(initDate.getYear());\r\n this.currentDate.setMonth(initDate.getMonth() - 1);\r\n this.currentDate.setDate(initDate.getDate());\r\n this.changeViewMode(this.initMode);\r\n });\r\n }\r\n\r\n private isTimeMode(): boolean {\r\n return this._viewMode === DateViewMode.time || this._viewMode === DateViewMode.datetime;\r\n }\r\n\r\n /**\r\n * \uC2DC\uAC04 \uBD84 \uC124\uC815 \uC774\uBCA4\uD2B8 \uCC98\uB9AC.\r\n *\r\n * @public\r\n */\r\n public initTimeEvent() {\r\n if (!this.isTimeMode()) return;\r\n\r\n let hh = this.currentDate.format(\"HH\");\r\n\r\n const hourInputEle = this.datetimeElement.querySelector(\".ddtp-hour\") as HTMLInputElement;\r\n const hourRangeEle = this.datetimeElement.querySelector(\".ddtp-hour-range\") as HTMLInputElement;\r\n hourInputEle.value = hh;\r\n hourRangeEle.value = hh;\r\n\r\n hourInputEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n const addVal = utils.pad(targetElement.value, 2);\r\n hourInputEle.value = addVal;\r\n hourRangeEle.value = addVal;\r\n });\r\n\r\n hourRangeEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n hourInputEle.value = utils.pad(targetElement.value, 2);\r\n });\r\n\r\n let mm = this.currentDate.format(\"mm\");\r\n const minuteInputEle = this.datetimeElement.querySelector(\".ddtp-minute\") as HTMLInputElement;\r\n const minuteRangeEle = this.datetimeElement.querySelector(\".ddtp-minute-range\") as HTMLInputElement;\r\n\r\n minuteInputEle.value = mm;\r\n minuteRangeEle.value = mm;\r\n\r\n minuteInputEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n const addVal = utils.pad(targetElement.value, 2);\r\n minuteInputEle.value = addVal;\r\n minuteRangeEle.value = addVal;\r\n });\r\n\r\n minuteRangeEle.addEventListener(\"input\", (e: Event) => {\r\n const targetElement = e.target as HTMLInputElement;\r\n minuteInputEle.value = utils.pad(targetElement.value, 2);\r\n });\r\n\r\n this.datetimeElement.querySelector(\".time-select\")?.addEventListener(\"click\", (e: Event) => {\r\n this.currentDate.setHour(+hourInputEle.value);\r\n this.currentDate.setMinutes(+minuteInputEle.value);\r\n this.dateChangeEvent(e);\r\n });\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uC774\uB3D9\r\n * @param moveMode // \uC55E\uB4A4 \uC774\uB3D9 prev, next\r\n * @returns\r\n */\r\n public moveDate(moveMode: string, e: Event) {\r\n if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {\r\n this.currentDate.setDate(1);\r\n this.currentDate.addMonth(\"prev\" === moveMode ? -1 : 1);\r\n this.dayDraw();\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.month) {\r\n this.currentDate.setDate(1);\r\n this.currentDate.addYear(\"prev\" === moveMode ? -1 : 1);\r\n this.monthDraw();\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.year) {\r\n this.currentDate.setDate(1);\r\n this.currentDate.addYear(\"prev\" === moveMode ? -16 : 16);\r\n this.yearDraw();\r\n }\r\n }\r\n\r\n /**\r\n * get date value\r\n *\r\n * @returns\r\n */\r\n public getDateValue() {\r\n return this.currentDate.format(this.dateFormat);\r\n }\r\n\r\n /**\r\n * \uC635\uC158 \uC14B\uD305\r\n * @static\r\n * @param {DateTimePickerOptions} options\r\n */\r\n static setOptions(options: DateTimePickerOptions) {\r\n DEFAULT_OPTIONS = Object.assign({}, DEFAULT_OPTIONS, options);\r\n }\r\n\r\n /**\r\n * \uB2EC\uB825 \uBCF4\uC774\uAE30 \uCC98\uB9AC.\r\n *\r\n * @returns\r\n */\r\n private show() {\r\n if (this.isVisible) {\r\n return;\r\n }\r\n this.isVisible = true;\r\n\r\n const docSize = getDocSize();\r\n this.datetimeElement.classList.remove(\"hide\");\r\n\r\n this.datetimeElement.classList.add(\"show\");\r\n\r\n const rect = this.targetElement.getBoundingClientRect();\r\n\r\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\r\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\r\n\r\n const elementHeight = this.datetimeElement.offsetHeight;\r\n const targetElementHeight = this.targetElement.offsetHeight + 2;\r\n let left = rect.left + scrollLeft;\r\n\r\n let top = 0;\r\n\r\n if (this.options.isPositionFixed) {\r\n top = rect.top + targetElementHeight;\r\n left = rect.left;\r\n } else {\r\n if (rect.top + targetElementHeight + elementHeight > docSize.clientHeight && rect.top >= elementHeight) {\r\n top = scrollTop + rect.top - elementHeight - 2;\r\n } else {\r\n top = scrollTop + rect.top + targetElementHeight;\r\n }\r\n }\r\n\r\n this.datetimeElement.setAttribute(\"style\", `${this.options.isPositionFixed ? \"position:fixed;\" : \"\"}top:${top}px;left:${left}px;z-index:${this.options.zIndex}`);\r\n\r\n document.addEventListener(\"click\", this._documentClickEvent);\r\n }\r\n\r\n /**\r\n * \uB2EC\uB825 \uC228\uAE30\uAE30\r\n */\r\n private hide() {\r\n this.isVisible = false;\r\n\r\n if (this.options.onClose) {\r\n if (this.options.onClose() === false) {\r\n return;\r\n }\r\n }\r\n\r\n this.datetimeElement.classList.remove(\"show\");\r\n\r\n this.datetimeElement.classList.add(\"hide\");\r\n\r\n document.removeEventListener(\"click\", this._documentClickEvent);\r\n }\r\n\r\n /**\r\n * \uBC14\uD0D5 \uD074\uB9AD\uC2DC \uCE98\uB9B0\uB354 \uC228\uAE40 \uCC98\uB9AC.\r\n *\r\n * @param e\r\n */\r\n private _documentClickEvent = (e: Event) => {\r\n if (this.isVisible && e.target != this.targetElement && !utils.closestElement(e.target as HTMLElement, this.datetimeElement)) {\r\n this.hide();\r\n }\r\n };\r\n\r\n /**\r\n * \uD0C0\uCF13 \uC774\uBCA4\uD2B8 \uCC98\uB9AC.\r\n */\r\n private initTargetEvent() {\r\n if (this.targetElement) {\r\n this.targetElement.addEventListener(\"click\", (e: Event) => {\r\n this.show();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uBCC0\uACBD\uD6C4 \uC774\uBCA4\uD2B8\r\n */\r\n private afterChangeDatepicker() {\r\n const formatValue = this.currentDate.format(this.dateFormat);\r\n\r\n if (this.options.afterChangeDatepicker && utils.isFunction(this.options.afterChangeDatepicker)) {\r\n this.options.afterChangeDatepicker(formatValue, this.viewMode);\r\n }\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uBCC0\uACBD \uC804 \uC774\uBCA4\uD2B8.\r\n * @returns void\r\n */\r\n private beforeChangeDatepicker() {\r\n const formatValue = this.currentDate.format(this.dateFormat);\r\n\r\n if (this.options.beforeChangeDatepicker && utils.isFunction(this.options.beforeChangeDatepicker)) {\r\n const reval = this.options.beforeChangeDatepicker(formatValue, (result: boolean) => {\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n this.refresh(false);\r\n });\r\n\r\n if (reval === false) {\r\n return;\r\n }\r\n\r\n this.refresh(false);\r\n return;\r\n }\r\n\r\n this.refresh(false);\r\n }\r\n\r\n private dateChangeEvent(e: Event) {\r\n const formatValue = this.currentDate.format(this.dateFormat);\r\n\r\n if (this.options.onSelect) {\r\n if (this.options.onSelect(formatValue, this.viewMode, e) === false) {\r\n return;\r\n }\r\n }\r\n\r\n if (this.isInput) {\r\n this.targetElement.setAttribute(\"value\", formatValue);\r\n }\r\n\r\n if (!this.options.inline && this.options.autoClose) {\r\n this.hide();\r\n }\r\n }\r\n\r\n /**\r\n * datepicker template \uADF8\uB9AC\uAE30\r\n */\r\n private createDatetimeTemplate() {\r\n const showMonthAfterYear = this.options.showMonthAfterYear;\r\n\r\n let datetimeTemplate = `<div class=\"ddtp-datetime ${this.options.isRTL ? \"rtl\" : \"\"}\" view-mode=\"${this._viewMode}\">\r\n\t\t\t<div class=\"ddtp-header\">\r\n <span class=\"${showMonthAfterYear ? \"ddtp-header-year\" : \"ddtp-header-month\"}\"></span>\r\n <span class=\"${showMonthAfterYear ? \"ddtp-header-month\" : \"ddtp-header-year\"}\"></span>\r\n\r\n <span class=\"ddtp-date-move\"> \r\n <a href=\"javascript:;\" class=\"ddtp-move-btn prev\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/></svg>\r\n </a>\r\n <a href=\"javascript:;\" class=\"ddtp-move-btn next\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\r\n </a> \r\n </span>\r\n\t\t\t</div>\r\n <div class=\"ddtp-body\">\r\n <table class=\"ddtp-days\">\r\n <thead class=\"ddtp-day-header\">\r\n <tr>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[0]]}\">${Lanauage.getWeeksMessage(this.dayOrder[0])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[1]]}\">${Lanauage.getWeeksMessage(this.dayOrder[1])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[2]]}\">${Lanauage.getWeeksMessage(this.dayOrder[2])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[3]]}\">${Lanauage.getWeeksMessage(this.dayOrder[3])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[4]]}\">${Lanauage.getWeeksMessage(this.dayOrder[4])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[5]]}\">${Lanauage.getWeeksMessage(this.dayOrder[5])}</td>\t\t\r\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[6]]}\">${Lanauage.getWeeksMessage(this.dayOrder[6])}</td>\t\t\r\n </tr>\r\n </thead>\r\n <tbody class=\"ddtp-day-body\">\r\n </tbody>\r\n \r\n <tfoot class=\"ddtp-day-footer\">\r\n <td colspan=\"7\">\r\n <div style=\"text-align:center;margin-top: 5px;${this.options.enableTodayBtn ? \"\" : \"display:none;\"}\"><button type=\"button\" class=\"time-today\">${Lanauage.getMessage(\"today\")}</button></div>\r\n <div class=\"footer-tooltip\"></div>\r\n </td>\r\n </tfoot>\r\n </table>\r\n\r\n <div class=\"ddtp-times\">\r\n <div class=\"time-container\">\r\n <div class=\"ddtp-time\">\r\n <span>H: </span><input type=\"number\" class=\"ddtp-hour\" min=\"0\" max=\"23\">\r\n <input type=\"range\" min=\"0\" max=\"23\" class=\"ddtp-hour-range\">\r\n </div>\r\n <div class=\"ddtp-time\">\r\n <span>M: </span><input type=\"number\" class=\"ddtp-minute\" min=\"0\" max=\"59\">\r\n <input type=\"range\" min=\"0\" max=\"59\" class=\"ddtp-minute-range\">\r\n </div>\r\n </div>\r\n <div class=\"time-btn\">\r\n <button type=\"button\" class=\"time-select\">${Lanauage.getMessage(\"ok\")}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"ddtp-months\">\r\n </div>\r\n\r\n <div class=\"ddtp-years\">\r\n </div>\r\n </div>\r\n </div>`;\r\n\r\n this.datetimeElement.innerHTML = datetimeTemplate;\r\n }\r\n\r\n public refresh(beforeChangeDatepickerCheck?: boolean) {\r\n if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {\r\n this.dayDraw(beforeChangeDatepickerCheck);\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.month) {\r\n this.monthDraw(beforeChangeDatepickerCheck);\r\n return;\r\n }\r\n\r\n if (this._viewMode === DateViewMode.year) {\r\n this.yearDraw(beforeChangeDatepickerCheck);\r\n }\r\n }\r\n\r\n /**\r\n * \uB144 \uB2EC\uB825 \uADF8\uB9AC\uAE30\r\n */\r\n private yearDraw(beforeChangeDatepickerCheck?: boolean) {\r\n const currentYear = this.currentDate.format(\"YYYY\");\r\n\r\n if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.year) {\r\n this.beforeChangeDatepicker();\r\n return;\r\n }\r\n\r\n const startYear = +currentYear - 8;\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-header-year\") as Element).textContent = `${startYear} ~ ${startYear + 15}`;\r\n\r\n const beforeDrawDateFlag = utils.isFunction(this.options.beforeDrawDate);\r\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\r\n\r\n const calHTML: string[] = [];\r\n for (let i = 0; i < 16; i++) {\r\n const year = startYear + i;\r\n\r\n const disabled = this.isYearDisabled(year);\r\n\r\n let addStylceClass = disabled ? \" disabled\" : \"\";\r\n\r\n let tooltip = \"\";\r\n if (beforeDrawDateFlag && beforeDrawDateFn) {\r\n const reval = beforeDrawDateFn({ mode: this._viewMode, date: year });\r\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\r\n tooltip = reval.tooltip;\r\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\r\n }\r\n\r\n calHTML.push(`<div class=\"ddtp-year ${addStylceClass}\" data-year=\"${year}\" ${tooltip}>${year}</div>`);\r\n }\r\n (this.datetimeElement.querySelector(\".ddtp-years\") as Element).innerHTML = calHTML.join(\"\");\r\n\r\n if (this.initMode == DateViewMode.year) {\r\n this.afterChangeDatepicker();\r\n }\r\n\r\n this.datetimeElement.querySelectorAll(\".ddtp-year\")?.forEach((yearEle) => {\r\n yearEle.addEventListener(\"click\", (e: Event) => {\r\n const targetEle = e.target as Element;\r\n\r\n if (targetEle) {\r\n const year = targetEle.getAttribute(\"data-year\");\r\n\r\n if (year) {\r\n const numYear = +year;\r\n\r\n if (this.isYearDisabled(numYear)) {\r\n return;\r\n }\r\n\r\n if (this.initMode == DateViewMode.year) {\r\n if (this.isYearDisabled(numYear)) {\r\n return;\r\n }\r\n this.currentDate.setYear(numYear);\r\n this.dateChangeEvent(e);\r\n return;\r\n }\r\n\r\n this.currentDate.setYear(numYear);\r\n this.viewMode = this.initMode;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \uC6D4 \uB2EC\uB825 \uADF8\uB9AC\uAE30\r\n */\r\n private monthDraw(beforeChangeDatepickerCheck?: boolean) {\r\n if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.month) {\r\n this.beforeChangeDatepicker();\r\n return;\r\n }\r\n\r\n const year = this.currentDate.format(\"YYYY\");\r\n (this.datetimeElement.querySelector(\".ddtp-header-year\") as Element).textContent = `${year}`;\r\n\r\n const monthElements = this.datetimeElement.querySelectorAll(\".ddtp-months > .ddtp-month\");\r\n\r\n if (monthElements.length > 0) {\r\n if (this.isYearDisabled(+year)) {\r\n monthElements.forEach((monthEle) => {\r\n if (!monthEle.classList.contains(\"disabled\")) {\r\n monthEle.classList.add(\"disabled\");\r\n }\r\n });\r\n return;\r\n }\r\n\r\n monthElements.forEach((monthEle, idx) => {\r\n if (this.isMonthDisabled(+year, idx)) {\r\n if (!monthEle.classList.contains(\"disabled\")) {\r\n monthEle.classList.add(\"disabled\");\r\n }\r\n } else {\r\n monthEle.classList.remove(\"disabled\");\r\n }\r\n });\r\n\r\n if (this.initMode == DateViewMode.month) {\r\n this.afterChangeDatepicker();\r\n }\r\n\r\n return;\r\n }\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-header-month\") as Element).textContent = this.currentDate.format(\"MMMM\");\r\n\r\n const beforeDrawDateFlag = utils.isFunction(this.options.beforeDrawDate);\r\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\r\n\r\n const calHTML: string[] = [];\r\n for (let i = 0; i < 12; i++) {\r\n const disabled = this.isMonthDisabled(+year, i);\r\n\r\n let addStylceClass = disabled ? \" disabled\" : \"\";\r\n let tooltip = \"\";\r\n if (beforeDrawDateFlag && beforeDrawDateFn) {\r\n const reval = beforeDrawDateFn({ mode: this._viewMode, date: year + \"/\" + (i + 1) });\r\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\r\n tooltip = reval.tooltip;\r\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\r\n }\r\n\r\n calHTML.push(`<div class=\"ddtp-month ${addStylceClass}\" data-month=\"${i}\" ${tooltip}>${Lanauage.getMonthsMessage(i, \"abbr\")}</div>`);\r\n }\r\n (this.datetimeElement.querySelector(\".ddtp-months\") as Element).innerHTML = calHTML.join(\"\");\r\n\r\n if (this.initMode == DateViewMode.month) {\r\n this.afterChangeDatepicker();\r\n }\r\n\r\n this.datetimeElement.querySelectorAll(\".ddtp-month\")?.forEach((monthEle) => {\r\n monthEle.addEventListener(\"click\", (e: Event) => {\r\n const targetEle = e.target as Element;\r\n\r\n if (targetEle) {\r\n const month = targetEle.getAttribute(\"data-month\");\r\n\r\n if (month) {\r\n if (this.isMonthDisabled(this.currentDate.getYear(), +month)) {\r\n return false;\r\n }\r\n\r\n if (this.initMode == DateViewMode.month) {\r\n this.currentDate.setMonth(+month);\r\n this.dateChangeEvent(e);\r\n return;\r\n }\r\n this.currentDate.setMonth(+month);\r\n this.viewMode = this.initMode;\r\n this.dayDraw();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \uB0A0\uC9DC \uADF8\uB9AC\uAE30\r\n */\r\n private dayDraw(beforeChangeDatepickerCheck?: boolean) {\r\n if (beforeChangeDatepickerCheck !== false && (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime)) {\r\n this.beforeChangeDatepicker();\r\n return;\r\n }\r\n\r\n let monthFirstDate = this.currentDate.clone();\r\n const currentMonth = monthFirstDate.getMonth();\r\n monthFirstDate.setDate(1);\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-header-year\") as Element).textContent = monthFirstDate.format(\"YYYY\");\r\n (this.datetimeElement.querySelector(\".ddtp-header-month\") as Element).textContent = monthFirstDate.format(\"MMMM\");\r\n\r\n let day = monthFirstDate.getDay();\r\n\r\n day = day - this.dayOrder[0];\r\n\r\n if (day >= 0) {\r\n monthFirstDate.addDate(-day);\r\n } else {\r\n monthFirstDate.addDate(-(7 + day));\r\n }\r\n\r\n const beforeDrawDateFlag = utils.isFunction(this.options.beforeDrawDate);\r\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\r\n\r\n const calHTML = [];\r\n for (let i = 0; i < 42; i++) {\r\n let dateItem;\r\n if (i == 0) {\r\n dateItem = monthFirstDate;\r\n } else {\r\n dateItem = monthFirstDate.clone().addDate(i);\r\n }\r\n\r\n const dateItemFormat = dateItem.format(DEFAULT_FORMAT.date);\r\n\r\n if (i % 7 == 0) {\r\n calHTML.push((i == 0 ? \"\" : \"</tr>\") + \"<tr>\");\r\n }\r\n\r\n let disabled = this.isDayDisabled(dateItem);\r\n\r\n let addStylceClass = DAY_STYLE_CLASS[this.dayOrder[i % 7]];\r\n const dateItemMonth = dateItem.getMonth();\r\n\r\n if (dateItemMonth != currentMonth) {\r\n if (dateItemMonth < currentMonth) {\r\n addStylceClass += dateItemMonth == 1 ? \" new\" : \" old\";\r\n } else {\r\n addStylceClass += currentMonth == 1 && dateItemMonth == 12 ? \" old\" : \" new\";\r\n }\r\n }\r\n\r\n addStylceClass += this.todayDate == dateItemFormat ? \" today\" : \"\";\r\n addStylceClass += disabled ? \" disabled\" : \"\";\r\n\r\n let tooltip = \"\";\r\n if (beforeDrawDateFlag && beforeDrawDateFn) {\r\n const reval = beforeDrawDateFn({ mode: this._viewMode, item: dateItem, date: dateItem.format(this.dateFormat) });\r\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\r\n\r\n addStylceClass += reval.check ? \" event\" : \"\";\r\n tooltip = reval.tooltip;\r\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\r\n }\r\n\r\n calHTML.push(`<td class=\"ddtp-day ${addStylceClass}\" data-day=\"${dateItem.format(\"M,D\")}\" ${tooltip}>`);\r\n calHTML.push(`<span>${dateItem.format(\"d\")}</span>`);\r\n calHTML.push(\"</td>\");\r\n }\r\n\r\n calHTML.push(\"</tr>\");\r\n\r\n (this.datetimeElement.querySelector(\".ddtp-day-body\") as Element).innerHTML = calHTML.join(\"\");\r\n\r\n if (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime) {\r\n this.afterChangeDatepicker();\r\n }\r\n }\r\n\r\n private isDayDisabled(dateItem: DaraDate) {\r\n if ((this.minDate != -1 && this.minDate > dateItem.getTime()) || (this.maxDate != -1 && this.maxDate < dateItem.getTime())) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isYearDisabled(year: number) {\r\n if ((this.minYear != -1 && this.minYear > year) || (this.maxYear != -1 && this.maxYear < year)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isMonthDisabled(year: number, month: number) {\r\n if (this.isYearDisabled(year)) {\r\n return true;\r\n }\r\n\r\n let yearMonth = +(year + utils.pad(month, 2));\r\n\r\n if ((this.minMonth != -1 && this.minMonth > yearMonth) || (this.maxMonth != -1 && this.maxMonth < yearMonth)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static setMessage(message: Message) {\r\n Lanauage.setDefaultMessage(message);\r\n }\r\n}\r\n\r\nfunction getDocSize() {\r\n return {\r\n clientHeight: Math.max(document.documentElement.clientHeight, window.innerHeight || 0),\r\n clientWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),\r\n };\r\n}\r\n", "@charset \"UTF-8\";\n.daracl-datetime-hidden {\n visibility: visible;\n width: 0px;\n height: 0px;\n z-index: 1000;\n}\n\n.daracl-datetime-wrapper {\n --color: #34495e;\n --light: #ffffff;\n --success: #0abf30;\n --error: #e24d4c;\n --warning: #e9bd0c;\n --info: #3498db;\n --background-color: #ffffff;\n --sunday: #f00d0d;\n --border-color: #d3d2d2;\n --select-background-color: #0abf30;\n --button-hover-color: #d4d4d48a;\n --disabled-background-color: #f1f1f18a;\n --today-bg: #a9d5ff;\n}\n\nbody.dark .daracl-datetime-wrapper,\n.daracl-datetime-wrapper.dark {\n --color: #d0d6e1;\n --light: #ffffff;\n --success: #0abf30;\n --error: #e24d4c;\n --warning: #e9bd0c;\n --info: #3498db;\n --background-color: #070d19;\n --sunday: #f00d0d;\n --border-color: #6e7380;\n --today-bg: #5660d9;\n --today-color: #5660d9;\n --select-background-color: #ffffff;\n --button-hover-color: #31316c;\n --disabled-background-color: #818181;\n}\n\n.daracl-datetime-wrapper {\n z-index: 1000;\n display: none;\n}\n.daracl-datetime-wrapper *,\n.daracl-datetime-wrapper *::before,\n.daracl-datetime-wrapper *::after {\n box-sizing: content-box;\n color: var(--color);\n}\n.daracl-datetime-wrapper.layer {\n position: absolute;\n}\n.daracl-datetime-wrapper input {\n background-color: transparent;\n}\n.daracl-datetime-wrapper.show {\n display: block;\n animation: fadeIn 0.5s;\n animation-fill-mode: forwards;\n}\n.daracl-datetime-wrapper.hide {\n animation: fadeOut 0.5s;\n animation-fill-mode: forwards;\n}\n.daracl-datetime-wrapper.embed {\n display: block;\n}\n.daracl-datetime-wrapper .sun > span {\n color: var(--sunday);\n}\n.daracl-datetime-wrapper .ddtp-datetime {\n border-radius: 4px;\n padding: 10px;\n width: 235px;\n background-color: var(--background-color);\n color: var(--color);\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl {\n direction: rtl;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-header .ddtp-header-year,\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-header .ddtp-header-month {\n float: right;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-header .ddtp-date-move {\n float: left;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-body .ddtp-times .time-container {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime.rtl .ddtp-body .ddtp-times > .time-btn {\n left: 0px;\n right: auto;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=date] .ddtp-body > .ddtp-days {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=datetime] .ddtp-body > .ddtp-times,\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=datetime] .ddtp-body > .ddtp-days {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=time] .ddtp-body > .ddtp-times {\n display: block;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=time] .ddtp-header {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=year] .ddtp-body > .ddtp-years {\n display: flex;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=year] .ddtp-header-month {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=month] .ddtp-body > .ddtp-months {\n display: flex;\n}\n.daracl-datetime-wrapper .ddtp-datetime[view-mode=month] .ddtp-header-month {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-header {\n padding: 2px 5px 10px;\n line-height: 25px;\n height: 25px;\n vertical-align: middle;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-header-year {\n font-weight: bold;\n margin: 0px 10px 0px 0px;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-header-month {\n font-weight: bold;\n margin: 0px 10px 0px 0px;\n vertical-align: top;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move {\n margin-left: auto;\n vertical-align: top;\n float: right;\n direction: ltr;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move .ddtp-move-btn {\n text-decoration: none;\n font-weight: bold;\n display: inline-block;\n height: 24px;\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move .ddtp-move-btn > svg {\n fill: var(--color);\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move .ddtp-move-btn:hover {\n background-color: var(--button-hover-color);\n}\n.daracl-datetime-wrapper .ddtp-header .ddtp-date-move::after {\n content: \"\";\n clear: both;\n}\n.daracl-datetime-wrapper .ddtp-body {\n margin: -2px -10px;\n font-size: 13px;\n}\n.daracl-datetime-wrapper .ddtp-body > * {\n display: none;\n}\n.daracl-datetime-wrapper .ddtp-body button {\n display: block;\n width: 100%;\n margin-bottom: 7px;\n padding: 3px 0px;\n border-radius: 4px;\n border-color: var(--border-color);\n border-width: 1px;\n border-style: solid;\n background-color: var(--background-color);\n}\n.daracl-datetime-wrapper .ddtp-body button:hover {\n background-color: var(--button-hover-color);\n}\n.daracl-datetime-wrapper .ddtp-body .time-today:hover {\n background-color: var(--button-hover-color);\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days {\n letter-spacing: 0px;\n border-collapse: separate;\n border-spacing: 0px;\n margin: 2px 10px;\n width: inherit;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day-label {\n font-weight: bold;\n width: 35px;\n padding: 2px 5px;\n text-align: center;\n line-height: initial;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day {\n position: relative;\n text-align: center;\n padding: 7px;\n cursor: pointer;\n line-height: initial;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.event::after {\n content: \"\u2022\";\n color: #f78536;\n font-size: 1.4em;\n position: absolute;\n left: 2px;\n z-index: 10;\n top: -7px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 30px;\n height: 30px;\n background-color: var(--select-background-color);\n border-radius: 50%;\n opacity: 0;\n z-index: 0;\n transition: opacity 0.2s ease-in;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day:active:before, .daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day:hover:before {\n opacity: 0.7;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.today > span {\n z-index: 2;\n position: relative;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.today:before {\n background-color: var(--today-bg);\n z-index: 1;\n opacity: 1;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.select:before {\n background-color: var(--select-background-color);\n opacity: 0.5;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.old, .daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.new {\n opacity: 0.5;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.disabled {\n background-color: var(--disabled-background-color);\n opacity: 0.5;\n cursor: auto;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-days .ddtp-day.disabled:before {\n background-color: transparent;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times {\n margin: 2px 15px;\n position: relative;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times > .time-container {\n width: calc(100% - 60px);\n display: inline-block;\n height: 60px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times input[type=number] {\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times input[type=number]::-webkit-inner-spin-button, .daracl-datetime-wrapper .ddtp-body .ddtp-times input[type=number]::-webkit-outer-spin-button {\n -webkit-appearance: none;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times > .time-btn {\n position: absolute;\n top: 9px;\n width: 55px;\n right: 0px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times > .time-btn > .time-select {\n height: 40px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time {\n display: table-row;\n width: 160px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > * {\n margin-top: 5px;\n display: table-cell;\n line-height: 20px;\n vertical-align: middle;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > span {\n width: 20px;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > input[type=number] {\n width: 45px;\n margin-right: 5px;\n padding-left: 0px;\n border-radius: 4px;\n border-color: var(--border-color);\n border-width: 1px;\n text-align: center;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-times .ddtp-time > input[type=range] {\n width: calc(100% - 60px);\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months {\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: space-between;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month {\n position: relative;\n flex: 1 0 30%;\n margin-bottom: 8px;\n line-height: 50px;\n text-align: center;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 50px;\n height: 50px;\n background-color: var(--select-background-color);\n border-radius: 50%;\n opacity: 0;\n z-index: 0;\n transition: opacity 0.2s ease-in;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month:active:before, .daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month:hover:before {\n opacity: 0.5;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month.disabled {\n background-color: var(--disabled-background-color);\n opacity: 0.5;\n cursor: auto;\n}\n.daracl-datetime-wrapper .ddtp-body .ddtp-months > .ddtp-month.disabled:before {\n background-color: transparent;\n}\n.daracl-datetime-wrapper .ddtp-years {\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: space-between;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year {\n position: relative;\n flex: 1 0 25%;\n margin-bottom: 8px;\n line-height: 50px;\n text-align: center;\n cursor: pointer;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 50px;\n height: 50px;\n background-color: var(--select-background-color);\n border-radius: 50%;\n opacity: 0;\n z-index: 0;\n transition: opacity 0.2s ease-in;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year:active:before, .daracl-datetime-wrapper .ddtp-years > .ddtp-year:hover:before {\n opacity: 0.5;\n transition: opacity 0.2s ease-out;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year.disabled {\n background-color: var(--disabled-background-color);\n opacity: 0.5;\n cursor: auto;\n}\n.daracl-datetime-wrapper .ddtp-years > .ddtp-year.disabled:before {\n background-color: transparent;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes fadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXDAzLm9wZW5zb3VyY2VzXFxkYXJhLWRhdGV0aW1lcGlja2VyXFxzdHlsZSIsInNvdXJjZXMiOlsiZGFyYWNsLmRhdGV0aW1lcGlja2VyLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7QUFBQTtBQUFBO0VBR0U7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUlGO0VBQ0U7O0FBSUE7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdFO0FBQUE7RUFFRTs7QUFHRjtFQUNFOztBQUtGO0VBQ0U7O0FBRUY7RUFDRTtFQUNBOztBQUtOO0VBQ0U7O0FBSUE7QUFBQTtFQUVFOztBQUtGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFLRjtFQUNFOztBQUdGO0VBQ0U7O0FBS0Y7RUFDRTs7QUFHRjtFQUNFOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7RUFDQTs7QUFLTjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUtGO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBRUU7RUFDQTs7QUFJQTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUVFOztBQUdGO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBTVI7RUFDRTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFFQTtFQUVFOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBRUU7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQU9WO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFFRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7OztBQU9WO0VBQ0U7SUFDRTs7RUFHRjtJQUNFOzs7QUFJSjtFQUNFO0lBQ0U7O0VBR0Y7SUFDRSIsInNvdXJjZXNDb250ZW50IjpbIi5kYXJhY2wtZGF0ZXRpbWUtaGlkZGVuIHtcclxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gIHdpZHRoOiAwcHg7XHJcbiAgaGVpZ2h0OiAwcHg7XHJcbiAgei1pbmRleDogMTAwMDtcclxufVxyXG5cclxuLmRhcmFjbC1kYXRldGltZS13cmFwcGVyIHtcclxuICAtLWNvbG9yOiAjMzQ0OTVlO1xyXG4gIC0tbGlnaHQ6ICNmZmZmZmY7XHJcbiAgLS1zdWNjZXNzOiAjMGFiZjMwO1xyXG4gIC0tZXJyb3I6ICNlMjRkNGM7XHJcbiAgLS13YXJuaW5nOiAjZTliZDBjO1xyXG4gIC0taW5mbzogIzM0OThkYjtcclxuICAtLWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XHJcbiAgLS1zdW5kYXk6ICNmMDBkMGQ7XHJcbiAgLS1ib3JkZXItY29sb3I6ICNkM2QyZDI7XHJcbiAgLS1zZWxlY3QtYmFja2dyb3VuZC1jb2xvcjogIzBhYmYzMDtcclxuICAtLWJ1dHRvbi1ob3Zlci1jb2xvcjogI2Q0ZDRkNDhhO1xyXG4gIC0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMThhO1xyXG4gIC0tdG9kYXktYmc6ICNhOWQ1ZmY7XHJcbn1cclxuXHJcbmJvZHkuZGFyayAuZGFyYWNsLWRhdGV0aW1lLXdyYXBwZXIsXHJcbi5kYXJhY2wtZGF0ZXRpbWUtd3JhcHBlci5kYXJrIHtcclxuICAtLWNvbG9yOiAjZDBkNmUxO1xyXG4gIC0tbGlnaHQ6ICNmZmZmZmY7XHJcbiAgLS1zdWNjZXNzOiAjMGFiZjMwO1xyXG4gIC0tZXJyb3I6ICNlMjRkNGM7XHJcbiAgLS13YXJuaW5nOiAjZTliZDBjO1xyXG4gIC0taW5mbzogIzM0OThkYjtcclxuICAtLWJhY2tncm91bmQtY29sb3I6ICMwNzBkMTk7XHJcbiAgLS1zdW5kYXk6ICNmMDBkMGQ7XHJcbiAgLS1ib3JkZXItY29sb3I6ICM2ZTczODA7XHJcbiAgLS10b2RheS1iZzogIzU2NjBkOTtcclxuICAtLXRvZGF5LWNvbG9yOiAjNTY2MGQ5O1xyXG4gIC0tc2VsZWN0LWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XHJcbiAgLS1idXR0b24taG92ZXItY29sb3I6ICMzMTMxNmM7XHJcbiAgLS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOiAjODE4MTgxO1xyXG59XHJcblxyXG4uZGFyYWNsLWRhdGV0aW1lLXdyYXBwZXIge1xyXG4gIHotaW5kZXg6IDEwMDA7XHJcbiAgZGlzcGxheTogbm9uZTtcclxuXHJcbiAgKixcclxuICAqOjpiZWZvcmUsXHJcbiAgKjo6YWZ0ZXIge1xyXG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgJi5sYXllciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgfVxyXG5cclxuICBpbnB1dCB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICB9XHJcblxyXG4gICYuc2hvdyB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGFuaW1hdGlvbjogZmFkZUluIDAuNXM7XHJcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcclxuICB9XHJcblxyXG4gICYuaGlkZSB7XHJcbiAgICBhbmltYXRpb246IGZhZGVPdXQgMC41cztcclxuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xyXG4gICAgLy9hbmltYXRpb246IGRhcmFUb2FzdEhpZGUgMC4zcyBlYXNlIGZvcndhcmRzO1xyXG4gIH1cclxuXHJcbiAgJi5lbWJlZCB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICB9XHJcblxyXG4gIC5zdW4ge1xyXG4gICAgJiA+IHNwYW4ge1xyXG4gICAgICBjb2xvcjogdmFyKC0tc3VuZGF5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kZHRwLWRhdGV0aW1lIHtcclxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICB3aWR0aDogMjM1cHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XHJcbiAgICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XHJcblxyXG4gICAgJi5ydGwge1xyXG4gICAgICBkaXJlY3Rpb246IHJ0bDtcclxuXHJcbiAgICAgIC5kZHRwLWhlYWRlciB7XHJcbiAgICAgICAgLmRkdHAtaGVhZGVyLXllYXIsXHJcbiAgICAgICAgLmRkdHAtaGVhZGVyLW1vbnRoIHtcclxuICAgICAgICAgIGZsb2F0OiByaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kZHRwLWRhdGUtbW92ZSB7XHJcbiAgICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5kZHRwLWJvZHkgLmRkdHAtdGltZXMge1xyXG4gICAgICAgIC50aW1lLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICAgICAgJiA+IC50aW1lLWJ0biB7XHJcbiAgICAgICAgICBsZWZ0OiAwcHg7XHJcbiAgICAgICAgICByaWdodDogYXV0bztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cImRhdGVcIl0gLmRkdHAtYm9keSA+IC5kZHRwLWRheXMge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cImRhdGV0aW1lXCJdIHtcclxuICAgICAgLmRkdHAtYm9keSA+IC5kZHRwLXRpbWVzLFxyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAtZGF5cyB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cInRpbWVcIl0ge1xyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAtdGltZXMge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuZGR0cC1oZWFkZXIge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmW3ZpZXctbW9kZT1cInllYXJcIl0ge1xyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAteWVhcnMge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5kZHRwLWhlYWRlci1tb250aCB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICZbdmlldy1tb2RlPVwibW9udGhcIl0ge1xyXG4gICAgICAuZGR0cC1ib2R5ID4gLmRkdHAtbW9udGhzIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuZGR0cC1oZWFkZXItbW9udGgge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kZHRwLWhlYWRlciB7XHJcbiAgICBwYWRkaW5nOiAycHggNXB4IDEwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogMjVweDtcclxuICAgIGhlaWdodDogMjVweDtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblxyXG4gICAgLmRkdHAtaGVhZGVyLXllYXIge1xyXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgbWFyZ2luOiAwcHggMTBweCAwcHggMHB4O1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLmRkdHAtaGVhZGVyLW1vbnRoIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgIG1hcmdpbjogMHB4IDEwcHggMHB4IDBweDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC5kZHRwLWRhdGUtbW92ZSB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICAgIGRpcmVjdGlvbjogbHRyO1xyXG5cclxuICAgICAgLmRkdHAtbW92ZS1idG4ge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xyXG5cclxuICAgICAgICA+IHN2ZyB7XHJcbiAgICAgICAgICBmaWxsOiB2YXIoLS1jb2xvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ob3Zlci1jb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmOjphZnRlciB7XHJcbiAgICAgICAgY29udGVudDogXCJcIjtcclxuICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmRkdHAtYm9keSB7XHJcbiAgICBtYXJnaW46IC0ycHggLTEwcHg7XHJcbiAgICBmb250LXNpemU6IDEzcHg7XHJcblxyXG4gICAgPiAqIHtcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDdweDtcclxuICAgICAgcGFkZGluZzogM3B4IDBweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1jb2xvcik7XHJcbiAgICAgIGJvcmRlci13aWR0aDogMXB4O1xyXG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ob3Zlci1jb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAudGltZS10b2RheSB7XHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJ1dHRvbi1ob3Zlci1jb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuZGR0cC1kYXlzIHtcclxuICAgICAgbGV0dGVyLXNwYWNpbmc6IDBweDtcclxuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcclxuICAgICAgYm9yZGVyLXNwYWNpbmc6IDBweDtcclxuICAgICAgbWFyZ2luOiAycHggMTBweDtcclxuICAgICAgd2lkdGg6IGluaGVyaXQ7XHJcblxyXG4gICAgICAuZGR0cC1kYXktbGFiZWwge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIHdpZHRoOiAzNXB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDJweCA1cHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBpbml0aWFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuZGR0cC1kYXkge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgcGFkZGluZzogN3B4O1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBsaW5lLWhlaWdodDogaW5pdGlhbDtcclxuXHJcbiAgICAgICAgJi5ldmVudDo6YWZ0ZXIge1xyXG4gICAgICAgICAgY29udGVudDogXCLigKJcIjtcclxuICAgICAgICAgIGNvbG9yOiAjZjc4NTM2O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxLjRlbTtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgIGxlZnQ6IDJweDtcclxuICAgICAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICAgICAgdG9wOiAtN3B4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgY29udGVudDogXCJcIjtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgbGVmdDogNTAlO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgIHdpZHRoOiAzMHB4O1xyXG4gICAgICAgICAgaGVpZ2h0OiAzMHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2VsZWN0LWJhY2tncm91bmQtY29sb3IpO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgICAgIHotaW5kZXg6IDA7XHJcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1pbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6YWN0aXZlOmJlZm9yZSxcclxuICAgICAgICAmOmhvdmVyOmJlZm9yZSB7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XHJcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLnRvZGF5IHtcclxuICAgICAgICAgID4gc3BhbiB7XHJcbiAgICAgICAgICAgIHotaW5kZXg6IDI7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRvZGF5LWJnKTtcclxuICAgICAgICAgICAgei1pbmRleDogMTtcclxuICAgICAgICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2Utb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5zZWxlY3Q6YmVmb3JlIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlbGVjdC1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYub2xkLFxyXG4gICAgICAgICYubmV3IHtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IGF1dG87XHJcblxyXG4gICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuZGR0cC10aW1lcyB7XHJcbiAgICAgIG1hcmdpbjogMnB4IDE1cHg7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHJcbiAgICAgID4gLnRpbWUtY29udGFpbmVyIHtcclxuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNjBweCk7XHJcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgIGhlaWdodDogNjBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5wdXRbdHlwZT1cIm51bWJlclwiXSB7XHJcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XHJcbiAgICAgICAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xyXG5cclxuICAgICAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxyXG4gICAgICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xyXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgPiAudGltZS1idG4ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICB0b3A6IDlweDtcclxuICAgICAgICB3aWR0aDogNTVweDtcclxuICAgICAgICByaWdodDogMHB4O1xyXG4gICAgICAgID4gLnRpbWUtc2VsZWN0IHtcclxuICAgICAgICAgIGhlaWdodDogNDBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5kZHRwLXRpbWUge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcclxuICAgICAgICB3aWR0aDogMTYwcHg7XHJcblxyXG4gICAgICAgID4gKiB7XHJcbiAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiBzcGFuIHtcclxuICAgICAgICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiBpbnB1dFt0eXBlPVwibnVtYmVyXCJdIHtcclxuICAgICAgICAgIHdpZHRoOiA0NXB4O1xyXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDBweDtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xyXG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiBpbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xyXG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDYwcHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5kZHRwLW1vbnRocyB7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgICAgPiAuZGR0cC1tb250aCB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIGZsZXg6IDEgMCAzMCU7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcblxyXG4gICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICB3aWR0aDogNTBweDtcclxuICAgICAgICAgIGhlaWdodDogNTBweDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlbGVjdC1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgICAgICB6LWluZGV4OiAwO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UtaW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmFjdGl2ZTpiZWZvcmUsXHJcbiAgICAgICAgJjpob3ZlcjpiZWZvcmUge1xyXG4gICAgICAgICAgb3BhY2l0eTogMC41O1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2Utb3V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5kaXNhYmxlZCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIGN1cnNvcjogYXV0bztcclxuXHJcbiAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmRkdHAteWVhcnMge1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuXHJcbiAgICA+IC5kZHRwLXllYXIge1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIGZsZXg6IDEgMCAyNSU7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG5cclxuICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB3aWR0aDogNTBweDtcclxuICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2VsZWN0LWJhY2tncm91bmQtY29sb3IpO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICAgIHotaW5kZXg6IDA7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UtaW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6YWN0aXZlOmJlZm9yZSxcclxuICAgICAgJjpob3ZlcjpiZWZvcmUge1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpO1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICBjdXJzb3I6IGF1dG87XHJcblxyXG4gICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBmYWRlSW4ge1xyXG4gIGZyb20ge1xyXG4gICAgb3BhY2l0eTogMDtcclxuICB9XHJcblxyXG4gIHRvIHtcclxuICAgIG9wYWNpdHk6IDE7XHJcbiAgfVxyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIGZhZGVPdXQge1xyXG4gIGZyb20ge1xyXG4gICAgb3BhY2l0eTogMTtcclxuICB9XHJcblxyXG4gIHRvIHtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgfVxyXG59XHJcbiJdfQ== */", "import DaraDateTimePicker from \"./DateTimePicker\";\r\n\r\nimport \"../style/daracl.datetimepicker.scss\";\r\n\r\nexport = DaraDateTimePicker;\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport DateTimePicker from \"@daracl/datetimepicker\";\r\n\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class DateRender extends Render {\r\n private element: HTMLInputElement;\r\n private dateObj: any;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n let dateOnSelectEvent: any;\r\n this.field.customOptions = Object.assign({}, this.field.customOptions);\r\n if (typeof this.field.customOptions.onSelect !== \"undefined\") {\r\n dateOnSelectEvent = typeof this.field.customOptions.onSelect;\r\n }\r\n\r\n if (utils.isUndefined(this.field.customOptions.mode)) {\r\n if (this.field.renderType == \"datemonth\" || this.field.renderType == \"datehour\") {\r\n this.field.customOptions.mode = this.field.renderType.replace(\"date\", \"\");\r\n } else {\r\n this.field.customOptions.mode = this.field.renderType;\r\n }\r\n }\r\n\r\n this.field.customOptions.onSelect = (dt: any, e: Event) => {\r\n if (dateOnSelectEvent) {\r\n dateOnSelectEvent(dt, e);\r\n }\r\n\r\n this.setValue(dt);\r\n\r\n this.valid();\r\n };\r\n\r\n this.dateObj = new DateTimePicker(this.element, this.field.customOptions, {} as any);\r\n\r\n //this.loadDate();\r\n }\r\n // async loadDate() {\r\n // const DateTimePicker = await import(/*webpackChunkName:\"./dara.datetimepicker\"*/ \"@daracl/datetimepicker\");\r\n // this.dateObj = new DateTimePicker.default(this.element, this.field.customOptions, {} as any);\r\n // }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field text help-icon\" autocomplete=\"off\" readonly/>\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport * as utils from \"./utils\";\r\nimport { FIELD_POSITION_STYLE, ALIGN } from \"src/constants\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\n\r\nexport default {\r\n /**\r\n * field style \uCC98\uB9AC\r\n *\r\n * @param formOptions FormOptions\r\n * @param field FormField\r\n * @param beforeField FormField\r\n * @returns FieldStyle\r\n */\r\n fieldStyle(formOptions: FormOptions, field: FormField, beforeField?: FormField | null, isLabelHide?: boolean): FieldStyle {\r\n const fieldStyle = {\r\n rowStyleClass: field.orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\r\n fieldClass: \"\",\r\n fieldStyle: \"\",\r\n labelClass: \"\",\r\n labelStyle: \"\",\r\n labelAlignClass: \"\",\r\n valueClass: \"\",\r\n valueStyle: \"\",\r\n tabAlignClass: \"\",\r\n };\r\n\r\n const defaultLabelWidth = beforeField?.style?.labelWidth ?? formOptions.style.labelWidth ?? \"3\";\r\n let defaultValueWidth = beforeField?.style?.valueWidth ?? formOptions.style.valueWidth ?? \"9\";\r\n const position = beforeField?.style?.position ?? formOptions.style.position;\r\n\r\n const width = field.style?.width;\r\n const positionArr = FIELD_POSITION_STYLE[field.style?.position] ?? FIELD_POSITION_STYLE[position] ?? FIELD_POSITION_STYLE.top;\r\n\r\n fieldStyle.fieldClass = `${positionArr[0]} ${field.style?.customClass || \"\"}`;\r\n if (width) {\r\n if (utils.isNumber(width)) {\r\n fieldStyle.fieldClass += utils.isNumber(width) ? ` col-xs-${width}` : \"\";\r\n } else {\r\n fieldStyle.fieldStyle = utils.isNumber(width) ? \"\" : `width:${width};`;\r\n }\r\n }\r\n\r\n fieldStyle.tabAlignClass = \"tab-al-\" + ([\"right\", \"center\"].includes(field.style?.tabAlign) ? field.style.tabAlign : \"left\");\r\n\r\n const labelWidth = field.style?.labelWidth || defaultLabelWidth;\r\n fieldStyle.labelAlignClass = positionArr[1];\r\n\r\n if (!isLabelHide && labelWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\r\n if (utils.isNumber(labelWidth)) {\r\n const labelWidthValue = +labelWidth;\r\n defaultValueWidth = 12 - labelWidthValue;\r\n fieldStyle.labelClass = `col-xs-${labelWidthValue}`;\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : `col-xs-${defaultValueWidth}`;\r\n } else {\r\n fieldStyle.labelStyle = `width:${labelWidth};`;\r\n }\r\n }\r\n\r\n const valueWidth = field.style?.valueWidth || defaultValueWidth;\r\n if (isLabelHide && ![\"left\", \"right\"].includes(positionArr[0])) {\r\n fieldStyle.valueClass = \"col-full\";\r\n } else {\r\n if (valueWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\r\n if (utils.isNumber(valueWidth)) {\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : `col-xs-${valueWidth}`;\r\n } else {\r\n fieldStyle.valueStyle = `width:${valueWidth};`;\r\n }\r\n } else {\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : \"\";\r\n }\r\n }\r\n\r\n fieldStyle.fieldClass = spaceReplace(fieldStyle.fieldClass);\r\n fieldStyle.labelClass = spaceReplace(fieldStyle.labelClass);\r\n fieldStyle.valueClass = spaceReplace(fieldStyle.valueClass);\r\n\r\n return fieldStyle;\r\n },\r\n};\r\n\r\nfunction spaceReplace(str: string): string {\r\n return str.replace(/\\s+/g, \" \").trim();\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage } from \"src/util/validUtils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport FormTemplate from \"src/FormTemplate\";\r\nimport styleUtils from \"src/util/styleUtils\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class TabRender extends Render {\r\n private customFunction;\r\n private tabContainerElement: HTMLElement;\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n\r\n this.mounted();\r\n }\r\n\r\n mounted() {\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n this.tabContainerElement.querySelectorAll(\".tab-item\").forEach((tabItem) => {\r\n tabItem.addEventListener(\"click\", (e: any) => {\r\n this.clickEventHandler(tabItem, e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * tab item click\r\n *\r\n * @param {Element} tabItem\r\n * @param {*} evt\r\n */\r\n private clickEventHandler(tabItem: Element, evt: any) {\r\n this.setActive(tabItem.getAttribute(\"data-tab-id\") ?? \"\");\r\n }\r\n\r\n public setActive(tabId: string): void {\r\n const tabItem = this.tabContainerElement.querySelector(`[data-tab-id=\"${tabId}\"]`);\r\n\r\n if (!tabItem) return;\r\n\r\n if (!tabItem.classList.contains(\"active\")) {\r\n for (let item of tabItem?.parentElement?.children ?? []) {\r\n item.classList.remove(\"active\");\r\n }\r\n tabItem.classList.add(\"active\");\r\n }\r\n\r\n const tabPanel = this.rowElement.querySelector(`[tab-panel-id=\"${tabId}\"]`);\r\n\r\n if (!tabPanel?.classList.contains(\"active\")) {\r\n for (let item of tabPanel?.parentElement?.children ?? []) {\r\n item.classList.remove(\"active\");\r\n }\r\n\r\n tabPanel?.classList.add(\"active\");\r\n }\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * tab template\r\n *\r\n * @param {FormField} field\r\n * @param {FormTemplate} formTemplate\r\n * @param {FormOptions} options\r\n * @returns {string} template string\r\n */\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const formTemplate = this.daraForm.formTemplate;\r\n const options = this.daraForm.getOptions();\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n //tab \uC774\uBCA4\uD2B8 \uCC98\uB9AC \uD560\uAC83.\r\n let fieldStyle = styleUtils.fieldStyle(options, field);\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field \">\r\n <div class=\"tab-header ${fieldStyle.tabAlignClass}\"></div>\r\n </div>\r\n <div class=\"df-tab-body\"></div>\r\n `;\r\n\r\n if (field.children) {\r\n let firstFlag = true;\r\n\r\n const formOptions = this.getForm().getOptions();\r\n\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(formOptions, field, null, formTemplate.isLabelHide(field));\r\n\r\n for (const childField of field.children) {\r\n childField.$parent = field;\r\n formTemplate.addRowFieldInfo(childField);\r\n let id = childField.$key;\r\n\r\n let tabTemplate = `<span class=\"tab-item ${firstFlag ? \"active\" : \"\"}\" data-tab-id=\"${id}\"><a href=\"javascript:;\">${childField.label}</a></span>`;\r\n\r\n let tabBodyTemplate = `<div class=\"tab-panel ${firstFlag ? \"active\" : \"\"}\" tab-panel-id=\"${id}\">${Render.getDescriptionTemplate(childField)}\r\n <div class=\"tab-group\"></div>\r\n </div>`;\r\n\r\n const tabElement = utils.templateToElement(tabTemplate);\r\n const tabBodyElement = utils.templateToElement(tabBodyTemplate);\r\n\r\n firstFlag = false;\r\n if (tabElement) {\r\n fieldContainerElement.querySelector(\".tab-header\")?.appendChild(tabElement);\r\n }\r\n\r\n if (tabBodyElement) {\r\n fieldContainerElement.querySelector(\".df-tab-body\")?.appendChild(tabBodyElement);\r\n\r\n if (childField.children) {\r\n let tabFormOptions = {\r\n style: {\r\n width: formOptions.style.width ?? \"100%\",\r\n labelWidth: formOptions.style.labelWidth ?? 3,\r\n valueWidth: formOptions.style.valueWidth ?? 9,\r\n position: formOptions.style.position ?? \"left-right\",\r\n },\r\n useTypeValue: formOptions.useTypeValue,\r\n autoCreate: false,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n } as FormOptions;\r\n\r\n childField.$tabForm = new DaraForm(document.createElement(\"div\"), tabFormOptions);\r\n\r\n childField.$instance = new (childField.$renderType as any)(childField, tabBodyElement?.querySelector(\".tab-group\"), childField.$tabForm);\r\n\r\n childField.$tabForm.formTemplate.childTemplate(childField, fieldStyle);\r\n }\r\n }\r\n }\r\n\r\n this.tabContainerElement = fieldContainerElement;\r\n }\r\n }\r\n\r\n getValue(): any {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n let allTabValue = {} as any;\r\n\r\n let useTypeValue = this.getForm().getOptions().useTypeValue;\r\n\r\n for (const childField of this.field.children) {\r\n const childFieldValue = childField.$tabForm?.getValue(false);\r\n if (useTypeValue) {\r\n allTabValue[childField.$validName] = childFieldValue;\r\n } else {\r\n for (let [key, value] of Object.entries(childFieldValue)) {\r\n allTabValue[key] = value;\r\n }\r\n }\r\n }\r\n return allTabValue;\r\n }\r\n\r\n setValue(value: any): void {\r\n for (const childField of this.field.children) {\r\n let tabChildValue = value[childField.$validName];\r\n\r\n if (tabChildValue) {\r\n childField.$tabForm?.setValue(tabChildValue);\r\n }\r\n }\r\n }\r\n\r\n reset() {}\r\n\r\n getElement(): Element {\r\n return this.rowElement;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n\r\n const field = this.field;\r\n\r\n for (const childField of field.children) {\r\n const validResult = childField.$tabForm?.validForm();\r\n\r\n if (validResult && validResult.length > 0) {\r\n const firstItem = validResult[0];\r\n\r\n if (firstItem.message) {\r\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\r\n\r\n return firstItem;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage, resetRowElementStyleClass } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport styleUtils from \"src/util/styleUtils\";\r\nimport FormTemplate from \"src/FormTemplate\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\nimport { NumberKeyMap } from \"@t/DataMap\";\r\n\r\nlet $$idx = 0;\r\n\r\nexport default class GridRender extends Render {\r\n private customFunction;\r\n private gridForm;\r\n private allAddRowInfo = {} as NumberKeyMap;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n\r\n const gridFormOptions = {\r\n style: {\r\n width: \"100%\",\r\n labelWidth: 3,\r\n valueWidth: 9,\r\n position: \"left-right\",\r\n },\r\n autoCreate: false,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n } as FormOptions;\r\n\r\n this.gridForm = new DaraForm(document.createElement(\"div\"), gridFormOptions);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n this.addRow();\r\n\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n this.rowElement.querySelector(\".df-grid-add-row-btn\")?.addEventListener(\"click\", (evt) => {\r\n this.addRow();\r\n });\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let theadTemplate = [];\r\n let colgroupTemplate = [];\r\n let addBtnTemplate = [];\r\n addBtnTemplate.push(\"\");\r\n\r\n if (field.children) {\r\n colgroupTemplate.push(\"<colgroup>\");\r\n\r\n theadTemplate.push(\"<tr>\");\r\n\r\n colgroupTemplate.push(`<col style=\"width:38px\">`);\r\n theadTemplate.push(\"<th>\");\r\n if (field.gridOptions?.disableAddButton !== true) {\r\n theadTemplate.push(`<button type=\"button\" class=\"df-btn df-grid-add-row-btn\" title=\"Add\"><i class=\"df-icon df-add-icon\"></i></button>`);\r\n }\r\n theadTemplate.push(\"</th>\");\r\n\r\n for (const childField of field.children) {\r\n colgroupTemplate.push(`<col style=\"width:${childField.style?.width ?? \"*\"}\">`);\r\n theadTemplate.push(`<th class=\"df-grid-header\">${childField.label}</th>`);\r\n }\r\n colgroupTemplate.push(\"</colgroup>\");\r\n theadTemplate.push(\"</tr>\");\r\n }\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-grid-field\">\r\n ${addBtnTemplate.join(\"\")}\r\n <div class=\"df-grid-container ${field.style?.position ?? \"\"}\" style=\"height:${field.gridOptions?.height ?? \"auto\"};\">\r\n <table class=\"df-grid\">${colgroupTemplate.join(\"\")}<thead>${theadTemplate.join(\"\")}</thead><tbody></tbody></table>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * add row\r\n */\r\n addRow(valueItem?: any): void {\r\n let rowTemplate = [];\r\n\r\n const options = this.daraForm.getOptions();\r\n const formTemplate = this.gridForm.formTemplate;\r\n const parentName = this.field.$xssName;\r\n\r\n ++$$idx;\r\n let addColumns = [];\r\n rowTemplate.push(`<tr class=\"grid-row\">`);\r\n\r\n rowTemplate.push(\"<td>\");\r\n if (this.field.gridOptions?.disableRemoveButton !== true) {\r\n rowTemplate.push(`<button type=\"button\" data-row-idx=\"${$$idx}\" class=\"df-btn df-grid-row-remove\"><i class=\"df-icon df-remove-icon\"></i></button>`);\r\n }\r\n rowTemplate.push(\"</td>\");\r\n\r\n for (const childField of this.field.children) {\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(options, childField, null, true);\r\n\r\n let columnField = utils.merge({}, childField) as FormField;\r\n\r\n addColumns.push(columnField);\r\n columnField.$orgin = childField;\r\n columnField.name = columnField.name + \"_\" + $$idx;\r\n columnField.$xssName = parentName + \"_\" + utils.getXssFieldName(columnField);\r\n\r\n formTemplate.addRowFieldInfo(columnField);\r\n\r\n rowTemplate.push(`<td id=\"${columnField.$xssName}\"><div class=\"df-field-container ${columnField.required ? \"required\" : \"\"} \" style=\"${fieldStyle.valueStyle}\"></div></td>`);\r\n }\r\n rowTemplate.push(\"</tr>\");\r\n\r\n this.allAddRowInfo[$$idx] = addColumns;\r\n\r\n const addRowElement = utils.templateToElement(rowTemplate.join(\"\"));\r\n\r\n if (addRowElement) {\r\n this.rowElement.querySelector(\"tbody\")?.append(addRowElement);\r\n\r\n addRowElement.querySelector(\".df-grid-row-remove\")?.addEventListener(\"click\", (evt) => {\r\n this.removeRow(evt);\r\n });\r\n }\r\n\r\n valueItem = valueItem ?? {};\r\n for (let columnField of addColumns) {\r\n columnField.$instance = new (columnField.$renderType as any)(columnField, addRowElement?.querySelector(`#${columnField.$xssName}`), this.gridForm);\r\n\r\n if (valueItem[columnField.$orgin.name]) {\r\n columnField.$instance.setValue(valueItem[columnField.$orgin.name]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * remove row\r\n *\r\n * @param evt event\r\n */\r\n removeRow(evt: Event): void {\r\n const target = evt.target as Element;\r\n\r\n const rowElement = target.closest(\"tr\");\r\n\r\n if (rowElement) {\r\n if (rowElement.parentElement?.childElementCount == 1) return;\r\n\r\n let rowIdx = (evt.currentTarget as Element)?.getAttribute(\"data-row-idx\") || \"-1\";\r\n\r\n this.removeFieldInfo(rowIdx);\r\n rowElement.remove();\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param rowIdx row index\r\n */\r\n removeFieldInfo(rowIdx?: string) {\r\n let removeFieldArrs = [] as any;\r\n if (utils.isEmpty(rowIdx)) {\r\n for (let key in this.allAddRowInfo) {\r\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[key]);\r\n }\r\n this.allAddRowInfo = {} as NumberKeyMap;\r\n } else if (rowIdx) {\r\n const rowIdxNum = parseInt(rowIdx, 10);\r\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[rowIdxNum]);\r\n delete this.allAddRowInfo[rowIdxNum];\r\n }\r\n\r\n for (let columnField of removeFieldArrs) {\r\n this.gridForm.getFieldInfoMap().removeFieldInfo(columnField.name);\r\n }\r\n }\r\n\r\n allRemoveRow(): void {\r\n this.rowElement.querySelector(\"tbody\")?.replaceChildren();\r\n this.removeFieldInfo();\r\n }\r\n\r\n getValue() {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n let result = [];\r\n const children = this.field.children;\r\n const childrenLength = children.length;\r\n for (let idx in this.allAddRowInfo) {\r\n const rowColumns = this.allAddRowInfo[idx];\r\n\r\n let rowInfo = {} as any;\r\n for (let childIdx = 0; childIdx < childrenLength; childIdx++) {\r\n let childField = children[childIdx];\r\n rowInfo[childField.name] = this.gridForm.getFieldValue(rowColumns[childIdx].name); // rowColumns[childIdx].$instance.getValue();\r\n }\r\n\r\n result.push(rowInfo);\r\n }\r\n return result;\r\n }\r\n\r\n setValue(value: any): void {\r\n this.field.$value = value;\r\n\r\n let valueArr: any[] = [];\r\n if (Array.isArray(value)) {\r\n valueArr = value;\r\n } else {\r\n if (utils.isPlainObject(value)) {\r\n valueArr.push(value);\r\n }\r\n }\r\n\r\n this.allRemoveRow();\r\n\r\n for (let valueItem of valueArr) {\r\n this.addRow(valueItem);\r\n }\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement() {\r\n if (this.customFunction.getElement) {\r\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\r\n }\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n\r\n const validResult = this.gridForm.validForm();\r\n\r\n if (validResult.length > 0) {\r\n const firstItem = validResult[0];\r\n\r\n if (firstItem.message) {\r\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\r\n\r\n return firstItem;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import NumberRender from \"src/renderer/NumberRender\";\r\nimport TextAreaRender from \"src/renderer/TextAreaRender\";\r\nimport DropdownRender from \"src/renderer/DropdownRender\";\r\nimport TextRender from \"src/renderer/TextRender\";\r\nimport CheckboxRender from \"src/renderer/CheckboxRender\";\r\nimport RadioRender from \"src/renderer/RadioRender\";\r\nimport PasswordRender from \"src/renderer/PasswordRender\";\r\nimport FileRender from \"src/renderer/FileRender\";\r\nimport CustomRender from \"./renderer/CustomRender\";\r\nimport GroupRender from \"./renderer/GroupRender\";\r\nimport HiddenRender from \"./renderer/HiddenRender\";\r\nimport ButtonRender from \"./renderer/ButtonRender\";\r\nimport RangeRender from \"./renderer/RangeRender\";\r\nimport DateRender from \"./renderer/DateRender\";\r\nimport TabRender from \"./renderer/TabRender\";\r\nimport GridRender from \"./renderer/GridRender\";\r\n\r\nexport type FORM_MODE = \"new\" | \"modify\" | \"view\";\r\n\r\nexport const RULES = {\r\n NAN: \"nan\",\r\n MIN: \"minimum\",\r\n EXCLUSIVE_MIN: \"exclusiveMinimum\",\r\n MAX: \"maximum\",\r\n EXCLUSIVE_MAX: \"exclusiveMaximum\",\r\n MIN_LENGTH: \"minLength\",\r\n MAX_LENGTH: \"maxLength\",\r\n BETWEEN: \"between\",\r\n BETWEEN_EXCLUSIVE_MIN: \"betweenExclusiveMin\",\r\n BETWEEN_EXCLUSIVE_MAX: \"betweenExclusiveMax\",\r\n BETWEEN_EXCLUSIVE_MINMAX: \"betweenExclusiveMinMax\",\r\n REGEXP: \"regexp\",\r\n REQUIRED: \"required\",\r\n VALIDATOR: \"validator\",\r\n} as const;\r\n\r\nexport const FIELD_PREFIX = \"dff\"; // daracl form field\r\n\r\nexport const RENDER_TEMPLATE: any = {\r\n number: NumberRender,\r\n textarea: TextAreaRender,\r\n dropdown: DropdownRender,\r\n checkbox: CheckboxRender,\r\n radio: RadioRender,\r\n text: TextRender,\r\n password: PasswordRender,\r\n file: FileRender,\r\n custom: CustomRender,\r\n group: GroupRender,\r\n hidden: HiddenRender,\r\n button: ButtonRender,\r\n range: RangeRender,\r\n datehour: DateRender,\r\n datemonth: DateRender,\r\n date: DateRender,\r\n datetime: DateRender,\r\n tab: TabRender,\r\n grid: GridRender,\r\n};\r\n\r\nexport const ALIGN = {\r\n left: \"left\",\r\n center: \"center\",\r\n right: \"right\",\r\n} as const;\r\n\r\nexport type TEXT_ALIGN_TYPE = (typeof ALIGN)[keyof typeof ALIGN];\r\n\r\nexport type RENDER_TYPE = \"number\" | \"text\" | \"file\" | \"textarea\" | \"dropdown\" | \"radio\" | \"checkbox\" | \"date\" | \"datetime\" | \"dateyear\" | \"datemonth\" | \"datehour\" | \"group\" | \"custom\";\r\n\r\nexport type REGEXP_TYPE = \"email\" | \"url\" | \"alpha\" | \"alpha-num\";\r\n\r\nexport type PASSWORD_TYPE = \"number\" | \"upper\" | \"upper-special\" | \"upper-special-number\"; // \uC22B\uC790 | \uB300\uBB38\uC790 \uD3EC\uD568, \uB300\uBB38\uC790 \uD2B9\uC218\uBB38\uC790 \uD3EC\uD568, \uB300\uBB38\uC790 \uD2B9\uC218\uBB38\uC790 \uC22B\uC790\r\n\r\nexport type FIELD_POSITION = \"top\" | \"left\" | \"left-left\" | \"left-right\" | \"right\" | \"right-left\" | \"right-right\" | \"bottom\";\r\n\r\nexport type ORIENTATION_TYPE = \"horizontal\" | \"vertical\";\r\n\r\ninterface StringArrayMap {\r\n [key: string]: string[];\r\n}\r\n\r\nexport const FIELD_POSITION_STYLE: StringArrayMap = {\r\n \"top-left\": [\"top\", \"txt-left\"],\r\n \"top-center\": [\"top\", \"txt-center\"],\r\n \"top-right\": [\"top\", \"txt-right\"],\r\n \"left-left\": [\"\", \"txt-left\"],\r\n \"left-center\": [\"\", \"txt-center\"],\r\n \"left-right\": [\"\", \"txt-right\"],\r\n \"right-right\": [\"right\", \"txt-right\"],\r\n \"right-center\": [\"right\", \"txt-center\"],\r\n \"right-left\": [\"right\", \"txt-left\"],\r\n \"bottom-left\": [\"bottom\", \"txt-left\"],\r\n \"bottom-center\": [\"bottom\", \"txt-center\"],\r\n \"bottom-right\": [\"bottom\", \"txt-right\"],\r\n};\r\nFIELD_POSITION_STYLE[\"top\"] = FIELD_POSITION_STYLE[\"top-left\"];\r\nFIELD_POSITION_STYLE[\"right\"] = FIELD_POSITION_STYLE[\"right-right\"];\r\nFIELD_POSITION_STYLE[\"left\"] = FIELD_POSITION_STYLE[\"left-left\"];\r\nFIELD_POSITION_STYLE[\"bottom\"] = FIELD_POSITION_STYLE[\"bottom-left\"];\r\n", "import { Message } from \"@t/Message\";\r\nimport { FormField } from \"../types/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\n\r\nlet localeMessage: Message = {\r\n required: \"{label} \uD544\uC218 \uC785\uB825\uC0AC\uD56D\uC785\uB2C8\uB2E4.\",\r\n fileButton: \"\uD30C\uC77C\uCC3E\uAE30\",\r\n selection: \"\uC120\uD0DD\",\r\n string: {\r\n minLength: \"{minLength} \uAE00\uC790 \uC774\uC0C1\uC73C\uB85C \uC785\uB825\uD558\uC138\uC694.\",\r\n maxLength: \"{maxLength} \uAE00\uC790 \uC774\uD558\uB85C \uC785\uB825\uD558\uC138\uC694.\",\r\n between: \"{minLength} ~ {maxLength} \uC0AC\uC774\uC758 \uAE00\uC790\uB97C \uC785\uB825\uD558\uC138\uC694.\",\r\n },\r\n number: {\r\n nan: \"\uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n minimum: \"{minimum} \uAC12\uACFC \uAC19\uAC70\uB098 \uCEE4\uC57C \uD569\uB2C8\uB2E4\",\r\n exclusiveMinimum: \"{minimum} \uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4\",\r\n maximum: \"{maximum} \uAC12\uACFC \uAC19\uAC70\uB098 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n exclusiveMaximum: \"{maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4.\",\r\n between: \"{minimum}~{maximum} \uC0AC\uC774\uC758 \uAC12\uC744 \uC785\uB825\uD558\uC138\uC694.\",\r\n betweenExclusiveMin: \"{minimum} \uBCF4\uB2E4 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uAC19\uAC70\uB098 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n betweenExclusiveMax: \"{minimum} \uBCF4\uB2E4 \uAC19\uAC70\uB098 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n betweenExclusiveMinMax: \"{minimum} \uBCF4\uB2E4 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n },\r\n regexp: {\r\n mobile: \"\uD578\uB4DC\uD3F0 \uBC88\uD638\uAC00 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n email: \"\uC774\uBA54\uC77C\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n url: \"URL\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n alpha: \"\uC601\uBB38\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n \"alpha-num\": \"\uC601\uBB38\uACFC \uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n number: \"\uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n variable: \"\uAC12\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n \"number-char\": \"\uC22B\uC790, \uBB38\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char\": \"\uB300\uBB38\uC790\uAC00 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char-special\": \"\uB300\uBB38\uC790,\uC18C\uBB38\uC790,\uD2B9\uC218\uBB38\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char-special-number\": \"\uB300\uBB38\uC790,\uC18C\uBB38\uC790,\uD2B9\uC218\uBB38\uC790,\uC22B\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C\uD569\uB2C8\uB2E4.\",\r\n },\r\n};\r\n\r\n/**\r\n * validation \uBA54\uC2DC\uC9C0 \uCC98\uB9AC.\r\n *\r\n * @class Language\r\n * @typedef {Language}\r\n */\r\nclass Language {\r\n private lang: Message = localeMessage;\r\n\r\n /**\r\n * \uB2E4\uAD6D\uC5B4 \uBA54\uC2DC\uC9C0 \uB4F1\uB85D\r\n *\r\n * @public\r\n * @param {?Message} [lang] \uB465\uB85D\uD560 \uBA54\uC2DC\uC9C0\r\n */\r\n public set(lang?: Message) {\r\n this.lang = Object.assign({}, localeMessage, lang);\r\n }\r\n\r\n /**\r\n * \uBA54\uC2DC\uC9C0 \uC5BB\uAE30\r\n *\r\n * @public\r\n * @param {string} messageKey \uBA54\uC2DC\uC9C0 \uD0A4\r\n * @returns {*}\r\n */\r\n public getMessage(messageKey: string): any {\r\n return (this.lang as any)[messageKey];\r\n }\r\n\r\n /**\r\n * ValidResult \uAC12\uC744 \uBA54\uC2DC\uC9C0\uB85C \uBCC0\uACBD.\r\n *\r\n * @public\r\n * @param {FormField} field\r\n * @param {ValidResult} validResult\r\n * @returns {string[]}\r\n */\r\n public validMessage(field: FormField, validResult: ValidResult): string[] {\r\n let messageFormat = \"\";\r\n\r\n let messageFormats: string[] = [];\r\n\r\n if (validResult.regexp) {\r\n messageFormat = (this.lang.regexp as any)[validResult.regexp];\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n (validResult.constraint ?? []).forEach((constraint) => {\r\n if (constraint === RULES.REQUIRED) {\r\n messageFormat = message(this.lang.required, field);\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n if (field.renderType == \"number\" || field.renderType == \"range\") {\r\n messageFormat = (this.lang.number as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n } else {\r\n messageFormat = (this.lang.string as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n }\r\n });\r\n\r\n const reMessage: string[] = [];\r\n\r\n const msgParam = Object.assign({}, { name: field.name, label: field.label }, field.rule);\r\n messageFormats.forEach((msgFormat) => {\r\n if (msgFormat) {\r\n reMessage.push(message(msgFormat, msgParam));\r\n }\r\n });\r\n\r\n if (validResult.validator) {\r\n reMessage.push(validResult.validator.message);\r\n }\r\n\r\n return reMessage;\r\n }\r\n}\r\n\r\nfunction message(msgFormat: string, msgParam: any): string {\r\n return msgFormat.replace(/\\{{1,1}([A-Za-z0-9_.]*)\\}{1,1}/g, (match, key) => {\r\n return typeof msgParam[key] !== \"undefined\" ? msgParam[key] : match;\r\n });\r\n}\r\n\r\nexport default new Language();\r\n", "import { FormField } from \"@t/FormField\";\r\n\r\nimport Render from \"../renderer/Render\";\r\nimport { RENDER_TEMPLATE } from \"../constants\";\r\nimport * as utils from \"./utils\";\r\n\r\nexport const getRenderer = (field: FormField): Render => {\r\n let render;\r\n if (field.renderType) {\r\n render = RENDER_TEMPLATE[field.renderType];\r\n }\r\n\r\n if (render && (render.isDataRender() === false || !utils.isUndefined(field.name))) {\r\n return render;\r\n }\r\n\r\n if (utils.isUndefined(field.name)) {\r\n if (field.children) {\r\n return RENDER_TEMPLATE[\"group\"];\r\n } else {\r\n return RENDER_TEMPLATE[\"hidden\"];\r\n }\r\n }\r\n\r\n return RENDER_TEMPLATE[\"text\"];\r\n};\r\n", "import { FIELD_PREFIX } from \"src/constants\";\r\nimport { FormField } from \"./types/FormField\";\r\nimport { ValidResult } from \"./types/ValidResult\";\r\nimport { getRenderer } from \"./util/renderFactory\";\r\nimport Lanauage from \"./util/Lanauage\";\r\nimport * as utils from \"./util/utils\";\r\nimport DaraForm from \"./DaraForm\";\r\n\r\ninterface NumberFieldMap {\r\n [key: string]: FormField;\r\n}\r\n\r\ninterface StringNumberMap {\r\n [key: string]: string;\r\n}\r\n\r\nexport default class FieldInfoMap {\r\n private fieldIdx = 0;\r\n\r\n private allFieldInfo: NumberFieldMap = {};\r\n\r\n private keyNameMap: StringNumberMap = {};\r\n\r\n private conditionFields: string[] = [];\r\n\r\n private fieldPrefix;\r\n\r\n private form;\r\n\r\n constructor(selector: string, form: DaraForm) {\r\n this.fieldPrefix = `${FIELD_PREFIX}_${utils.getHashCode(selector)}`;\r\n this.form = form;\r\n }\r\n\r\n /**\r\n * add Field \uC815\uBCF4\r\n *\r\n * @public\r\n * @param {FormField} field \uD3FC\uD544\uB4DC \uC815\uBCF4\r\n */\r\n public addField(field: FormField) {\r\n utils.replaceXssField(field);\r\n this.fieldIdx += 1;\r\n field.$key = `${this.fieldPrefix}_${this.fieldIdx}`;\r\n field.$validName = field.name ?? field.label;\r\n this.keyNameMap[field.$validName] = field.$key;\r\n this.allFieldInfo[field.$key] = field;\r\n field.$renderType = getRenderer(field);\r\n\r\n if (field.conditional) {\r\n this.conditionFields.push(field.$key);\r\n }\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC\uBA85\uC73C\uB85C \uD544\uB4DC \uC815\uBD80 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldName \uD544\uB4DC\uBA85\r\n * @returns {FormField}\r\n */\r\n public getFieldName(fieldName: string): FormField {\r\n return this.allFieldInfo[this.keyNameMap[fieldName]];\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC \uD0A4\uB85C \uC815\uBCF4 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldKey\r\n * @returns {FormField}\r\n */\r\n public get(fieldKey: string): FormField {\r\n return this.allFieldInfo[fieldKey];\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC\uBA85 \uC788\uB294\uC9C0 \uC5EC\uBD80 \uCCB4\uD06C.\r\n *\r\n * @public\r\n * @param {string} fieldName \uD544\uB4DC\uBA85\r\n * @returns {boolean}\r\n */\r\n public hasFieldName(fieldName: string): boolean {\r\n if (this.keyNameMap[fieldName] && this.allFieldInfo[this.keyNameMap[fieldName]]) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4E0 \uD544\uB4DC \uC815\uBCF4\r\n *\r\n * @public\r\n * @returns {NumberFieldMap}\r\n */\r\n public getAllFieldInfo(): NumberFieldMap {\r\n return this.allFieldInfo;\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC \uC815\uBCF4 \uB9F5\uC5D0\uC11C \uC9C0\uC6B0\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldName\r\n */\r\n public removeFieldInfo(fieldName: string) {\r\n delete this.allFieldInfo[this.keyNameMap[fieldName]];\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4E0 \uD544\uB4DC\uAC12 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {boolean} validationCheck\r\n * @returns {*}\r\n */\r\n public getAllFieldValue(formValue: any, validationCheck: boolean) {\r\n const useTypeValue = this.form.getOptions().useTypeValue;\r\n\r\n if (validationCheck !== true) {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n return formValue;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n\r\n resolve(formValue);\r\n });\r\n }\r\n\r\n public getFormDataValue(formValue: any, validationCheck: boolean) {\r\n if (validationCheck !== true) {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n return reval;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n resolve(reval);\r\n });\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * @param field\r\n * @returns\r\n */\r\n public isConditionFieldCheck(field: FormField) {\r\n let parent = field;\r\n\r\n while (typeof parent !== \"undefined\") {\r\n if (!this.isConditionField(parent)) {\r\n return false;\r\n }\r\n\r\n parent = parent.$parent;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * field \uD65C\uC131 \uBE44\uD65C\uC131\uD654 \uC5EC\uBD80.\r\n *\r\n * @param field form field\r\n * @returns\r\n */\r\n public isConditionField(field: FormField) {\r\n if (!this.conditionFields.includes(field.$key)) {\r\n return true;\r\n }\r\n\r\n let condFlag = false;\r\n\r\n if (field.conditional.custom) {\r\n condFlag = field.conditional.custom.call(null, field);\r\n } else {\r\n if (field.conditional.field) {\r\n const condField = this.getFieldName(field.conditional.field);\r\n\r\n if (condField) {\r\n if (field.conditional.eq == condField.$instance.getValue()) {\r\n condFlag = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return condFlag;\r\n }\r\n\r\n /**\r\n * \uCEEC\uB7FC \uB85C\uC6B0 \uBCF4\uC774\uACE0 \uC548\uBCF4\uC774\uAE30 \uCCB4\uD06C.\r\n *\r\n * @public\r\n */\r\n public conditionCheck() {\r\n this.conditionFields.forEach((fieldKey) => {\r\n const fieldInfo = this.allFieldInfo[fieldKey];\r\n\r\n let condFlag = this.isConditionField(fieldInfo);\r\n\r\n if (condFlag) {\r\n fieldInfo.$instance.show();\r\n } else {\r\n fieldInfo.$instance.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * field validation check\r\n *\r\n * @param fieldInfo FormField\r\n * @returns boolean true or ValidResult\r\n */\r\n public getFieldValidation(fieldInfo: FormField, focusFlag: boolean | undefined) {\r\n if (!this.isConditionFieldCheck(fieldInfo)) {\r\n return true;\r\n }\r\n\r\n const renderInfo = fieldInfo.$instance;\r\n let fieldValid = renderInfo.valid();\r\n\r\n if (fieldValid === true) return true;\r\n\r\n if (focusFlag) {\r\n renderInfo.focus();\r\n }\r\n fieldValid = fieldValid as ValidResult;\r\n if (utils.isUndefined(fieldValid.message)) {\r\n fieldValid.message = Lanauage.validMessage(fieldInfo, fieldValid)[0];\r\n }\r\n\r\n return fieldValid;\r\n }\r\n}\r\n\r\n/**\r\n * add form value\r\n * @param formData {Object} return Object value\r\n * @param fieldInfo {FormField} field info\r\n * @param fieldValue {any} form value\r\n */\r\nfunction addFormValue(formData: any, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n\r\n formData[fieldInfo.$validName] = uploadFiles;\r\n formData[fieldInfo.$validName + \"RemoveIds\"] = fieldValue[\"removeIds\"];\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData[key] = value;\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData[fieldInfo.name] = fieldValue;\r\n }\r\n }\r\n } else {\r\n formData[fieldInfo.$validName] = fieldValue;\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n\r\nfunction addFieldFormData(formData: FormData, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n formData.delete(fieldInfo.$validName);\r\n for (let uploadFile of uploadFiles) {\r\n formData.append(fieldInfo.$validName, uploadFile);\r\n }\r\n\r\n formData.set(fieldInfo.$validName + \"RemoveIds\", fieldValue[\"removeIds\"]);\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData.set(key, value as any);\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n } else {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n", "import { FormOptions } from \"@t/FormOptions\";\r\nimport { FieldStyle, FormField } from \"@t/FormField\";\r\nimport * as utils from \"./util/utils\";\r\nimport FieldInfoMap from \"src/FieldInfoMap\";\r\n\r\nimport styleUtils from \"./util/styleUtils\";\r\nimport DaraForm from \"./DaraForm\";\r\nimport TabRender from \"./renderer/TabRender\";\r\nimport GridRender from \"./renderer/GridRender\";\r\n\r\n/**\r\n * form template\r\n *\r\n * @class FormTemplate\r\n * @typedef {FormTemplate}\r\n */\r\nexport default class FormTemplate {\r\n private readonly options: FormOptions;\r\n private readonly formElement;\r\n\r\n private fieldInfoMap;\r\n\r\n private daraform: DaraForm;\r\n\r\n private addRowFields: string[] = [];\r\n\r\n constructor(daraform: DaraForm, formElement: Element, fieldInfoMap: FieldInfoMap) {\r\n this.daraform = daraform;\r\n this.options = daraform.getOptions();\r\n this.formElement = formElement;\r\n\r\n this.fieldInfoMap = fieldInfoMap;\r\n }\r\n\r\n /**\r\n * field row \uCD94\uAC00.\r\n *\r\n * @param field\r\n */\r\n public addRow(field: FormField) {\r\n if (this.checkHiddenField(field)) {\r\n return;\r\n }\r\n\r\n this.addRowFields = [];\r\n\r\n this.addRowTemplate(field);\r\n }\r\n\r\n /**\r\n * \uADF8\uB8F9 \uD15C\uD50C\uB9BF\r\n *\r\n * @param {FormField} field\r\n * @returns {string} row template\r\n */\r\n public addRowTemplate(field: FormField): void {\r\n let labelHideFlag = this.isLabelHide(field);\r\n\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(this.options, field, null, labelHideFlag);\r\n\r\n this.addRowFieldInfo(field);\r\n\r\n const rowElement = utils.templateToElement(`\r\n <div class=\"df-row form-group ${fieldStyle.fieldClass}\" id=\"${field.$key}\">\r\n ${labelHideFlag ? \"\" : `<div class=\"df-label ${fieldStyle.labelClass} ${fieldStyle.labelAlignClass}\" title=\"${field.label ?? \"\"}\" style=\"${fieldStyle.labelStyle}\">${this.getLabelTemplate(field)}</div>`}\r\n\r\n <div class=\"df-field-container ${fieldStyle.valueClass} ${field.required ? \"required\" : \"\"}\" style=\"${fieldStyle.valueStyle}\"></div>\r\n </div>\r\n `);\r\n\r\n if (rowElement) {\r\n this.createField(field, rowElement);\r\n this.formElement.append(rowElement);\r\n\r\n if (field.children) {\r\n this.childTemplate(field, fieldStyle);\r\n }\r\n }\r\n }\r\n\r\n public createField(field: FormField, element: Element): void {\r\n field.$instance = new (field.$renderType as any)(field, element, this.daraform);\r\n }\r\n\r\n /**\r\n * child template\r\n *\r\n * @param {FormField} field\r\n * @param {FieldStyle} parentFieldStyle\r\n * @returns {*}\r\n */\r\n public childTemplate(field: FormField, parentFieldStyle: FieldStyle): void {\r\n let beforeField: FormField = null as any;\r\n let firstFlag = true;\r\n let isEmptyLabel = false;\r\n\r\n if (!(field.$renderType as any).isChildrenCreate()) {\r\n return;\r\n }\r\n\r\n const rowElement = document.createElement(\"div\");\r\n rowElement.classList.add(\"df-row\", parentFieldStyle.rowStyleClass ?? \"\");\r\n\r\n let idx = 0;\r\n\r\n for (const childField of field.children) {\r\n if (utils.isEmpty(childField)) {\r\n throw new Error(`parent field :[${field.$validName}], children index ${idx}, empty [${childField}]`);\r\n }\r\n\r\n childField.$parent = field;\r\n ++idx;\r\n\r\n if (this.checkHiddenField(childField)) {\r\n continue;\r\n }\r\n\r\n this.addRowFieldInfo(childField);\r\n\r\n if (firstFlag) {\r\n beforeField = childField;\r\n }\r\n\r\n let labelHideFlag = this.isLabelHide(childField);\r\n\r\n let childFieldStyle;\r\n\r\n let labelTemplate = \"\";\r\n if (labelHideFlag) {\r\n childFieldStyle = styleUtils.fieldStyle(this.options, childField, beforeField, !isEmptyLabel);\r\n labelTemplate = isEmptyLabel ? `<span class=\"df-label empty ${childFieldStyle.labelClass}\" style=\"${childFieldStyle.labelStyle}\"></span>` : \"\";\r\n } else {\r\n childFieldStyle = styleUtils.fieldStyle(this.options, childField, beforeField, false);\r\n labelTemplate = `<span class=\"df-label ${childFieldStyle.labelClass} ${childFieldStyle.labelAlignClass}\" title=\"${childField.label ?? \"\"}\" style=\"${childFieldStyle.labelStyle}\">${this.getLabelTemplate(childField)}</span>`;\r\n }\r\n\r\n const groupElement = utils.templateToElement(`<div class=\"form-group ${childFieldStyle.fieldClass}\" style=\"${childFieldStyle.fieldStyle}\" id=\"${childField.$key}\">\r\n ${labelTemplate}\r\n <span class=\"df-field-container ${childFieldStyle.valueClass} ${childField.required ? \"required\" : \"\"}\" style=\"${childFieldStyle.valueStyle}\"></span>\r\n </div>`);\r\n\r\n if (groupElement) {\r\n this.createField(childField, groupElement);\r\n rowElement.append(groupElement);\r\n\r\n if (childField.children) {\r\n this.childTemplate(childField, childField.children ? childFieldStyle : parentFieldStyle);\r\n }\r\n }\r\n if (!labelHideFlag) {\r\n isEmptyLabel = true;\r\n }\r\n\r\n firstFlag = false;\r\n }\r\n\r\n field.$instance.addChildField(rowElement);\r\n }\r\n\r\n /**\r\n * label template\r\n *\r\n * @param {FormField} field form field\r\n * @returns {string} template string\r\n */\r\n public getLabelTemplate(field: FormField) {\r\n const requiredTemplate = field.required ? `<span class=\"required\"></span>` : \"\";\r\n const tooltipTemplate = utils.isBlank(field.tooltip) ? \"\" : `<span class=\"df-tooltip\">?<span class=\"tooltip\">${field.tooltip}</span></span>`;\r\n\r\n return `${field.label ?? \"\"} ${tooltipTemplate} ${requiredTemplate}`;\r\n }\r\n\r\n /**\r\n * label \uC228\uAE40 \uC5EC\uBD80\r\n *\r\n * @param field formfield\r\n * @returns\r\n */\r\n public isLabelHide(field: FormField): boolean {\r\n return field.style?.labelHide || utils.isUndefined(field.label);\r\n }\r\n\r\n public checkHiddenField(field: FormField) {\r\n if (utils.isHiddenField(field)) {\r\n this.fieldInfoMap.addField(field);\r\n field.$instance = new (field.$renderType as any)(field, null, this.daraform);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * add row file map\r\n *\r\n * @param {FormField} field\r\n */\r\n public addRowFieldInfo(field: FormField) {\r\n if (!utils.isBlank(field.name) && this.fieldInfoMap.hasFieldName(field.name)) {\r\n throw new Error(`Duplicate field name \"${field.name}\"`);\r\n }\r\n\r\n this.fieldInfoMap.addField(field);\r\n this.addRowFields.push(field.$key);\r\n }\r\n}\r\n", "import { FormOptions } from \"@t/FormOptions\";\r\nimport { FormField } from \"@t/FormField\";\r\nimport * as utils from \"./util/utils\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { Message } from \"@t/Message\";\r\nimport Lanauage from \"./util/Lanauage\";\r\nimport { stringValidator } from \"./rule/stringValidator\";\r\nimport { numberValidator } from \"./rule/numberValidator\";\r\nimport { regexpValidator } from \"./rule/regexpValidator\";\r\nimport FieldInfoMap from \"src/FieldInfoMap\";\r\nimport FormTemplate from \"./FormTemplate\";\r\nimport { FORM_MODE } from \"./constants\";\r\n\r\ndeclare const APP_VERSION: string;\r\n\r\nconst defaultOptions = {\r\n style: {\r\n width: \"100%\",\r\n labelWidth: 3,\r\n valueWidth: 9,\r\n position: \"left-right\",\r\n },\r\n mode: \"new\",\r\n useTypeValue: true,\r\n autoCreate: true,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n} as FormOptions;\r\n\r\ninterface FieldMap {\r\n [key: string]: FormField;\r\n}\r\n\r\ninterface DaraFormMap {\r\n [key: string]: DaraForm;\r\n}\r\n\r\n// all instance\r\nconst allInstance: DaraFormMap = {};\r\n\r\nconst SEQ_ATTR_KEY = \"data-form-uid\";\r\n\r\nlet DARA_FORM_SEQ = 0;\r\n/**\r\n * DaraForm class\r\n *\r\n * @class DaraForm\r\n * @typedef {DaraForm}\r\n */\r\nexport default class DaraForm {\r\n public static VERSION = `${APP_VERSION}`;\r\n\r\n private readonly options;\r\n\r\n private orginFormStyleClass;\r\n\r\n private selector: string;\r\n private formElement: Element;\r\n\r\n private fieldInfoMap: FieldInfoMap;\r\n\r\n private formValue: any = {};\r\n\r\n public formTemplate: FormTemplate;\r\n\r\n constructor(formElement: Element, options: FormOptions, message?: Message) {\r\n this.options = utils.merge({}, defaultOptions, options) as FormOptions;\r\n\r\n Lanauage.set(message);\r\n\r\n if (formElement) {\r\n this.orginFormStyleClass = formElement.className;\r\n formElement.classList.add(\"daracl-form\");\r\n\r\n this.selector = `df_${++DARA_FORM_SEQ}`;\r\n formElement.setAttribute(\"name\", this.selector);\r\n formElement.setAttribute(SEQ_ATTR_KEY, this.selector);\r\n\r\n if (this.options.style.width) {\r\n formElement.setAttribute(\"style\", `width:${this.options.style.width};`);\r\n }\r\n\r\n this.formElement = formElement;\r\n this.changeMode(this.options.mode ?? \"new\");\r\n this.createForm(this.options.fields);\r\n\r\n if (this.options.autoCreate !== false) {\r\n allInstance[this.selector] = this;\r\n }\r\n } else {\r\n throw new Error(`${formElement} form selector not found`);\r\n }\r\n }\r\n\r\n public static create(formElement: Element, options: FormOptions, message?: Message): DaraForm {\r\n return new DaraForm(formElement, options, message);\r\n }\r\n\r\n public static setMessage(message: Message): void {\r\n Lanauage.set(message);\r\n }\r\n\r\n private createForm(fields: FormField[]) {\r\n this.fieldInfoMap = new FieldInfoMap(this.selector, this);\r\n //this.formElement.innerHTML = \"\";\r\n this.formTemplate = new FormTemplate(this, this.formElement, this.fieldInfoMap);\r\n\r\n if (this.options.autoCreate === false) {\r\n return;\r\n }\r\n\r\n fields.forEach((field) => {\r\n this.formTemplate.addRow(field);\r\n });\r\n this.conditionCheck();\r\n\r\n if (this.options.onMounted) {\r\n this.options.onMounted.call(this);\r\n }\r\n }\r\n\r\n /**\r\n * change mode\r\n *\r\n * @param mode form_mode default new\r\n */\r\n public changeMode = (mode: FORM_MODE): void => {\r\n this.options.mode = mode;\r\n this.formElement.setAttribute(\"data-df-mode\", mode);\r\n };\r\n\r\n /**\r\n * \uD3FC \uB370\uC774\uD130 reset\r\n */\r\n public resetForm = () => {\r\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\r\n for (const seq in fieldMap) {\r\n const fieldInfo = fieldMap[seq];\r\n const renderInfo = fieldInfo.$instance;\r\n\r\n if (renderInfo && typeof renderInfo.reset === \"function\") {\r\n renderInfo.reset();\r\n }\r\n }\r\n this.formValue = {};\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * field \uAC12 reset\r\n * @param fieldName \uD544\uB4DC\uBA85\r\n */\r\n public resetField = (fieldName: string) => {\r\n this.fieldInfoMap.getFieldName(fieldName).$instance.reset();\r\n this.formValue[fieldName] = \"\";\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * \uD544\uB4DC element \uC5BB\uAE30\r\n *\r\n * @param {string} fieldName\r\n * @returns {*}\r\n */\r\n public getFieldElement(fieldName: string) {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field?.$instance) {\r\n return field.$instance.getElement();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getField(fieldName: string): FormField {\r\n return this.fieldInfoMap.getFieldName(fieldName);\r\n }\r\n\r\n /**\r\n * field \uAC12 \uC5BB\uAE30\r\n *\r\n * @param fieldName \uD544\uB4DC\uBA85\r\n * @returns\r\n */\r\n public getFieldValue = (fieldName: string) => {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field) {\r\n return field.$instance.getValue();\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * \uD3FC \uD544\uB4DC \uAC12 \uC5BB\uAE30\r\n * @param isValid \uD3FC \uC720\uD6A8\uC131 \uAC80\uC0AC \uC5EC\uBD80 default:false|undefined true\uC77C\uACBD\uC6B0 \uAC80\uC0AC.\r\n * @returns\r\n */\r\n public getValue = (isValid: boolean): any => {\r\n return this.fieldInfoMap.getAllFieldValue(this.formValue, isValid);\r\n };\r\n\r\n public getFormDataValue = (isValid: boolean): any => {\r\n return this.fieldInfoMap.getFormDataValue(this.formValue, isValid);\r\n };\r\n\r\n /**\r\n * \uD3FC \uD544\uB4DC value \uC14B\uD305\r\n * @param values\r\n */\r\n public setValue = (values: any, dataClear?: boolean | undefined) => {\r\n if (dataClear !== false) {\r\n this.resetForm();\r\n }\r\n\r\n Object.keys(values).forEach((fieldName) => {\r\n this._setFieldValue(fieldName, values[fieldName]);\r\n });\r\n this.conditionCheck();\r\n };\r\n\r\n public setFieldValue = (fieldName: string, value: any) => {\r\n this._setFieldValue(fieldName, value);\r\n this.conditionCheck();\r\n };\r\n\r\n private _setFieldValue(fieldName: string, value: any) {\r\n this.formValue[fieldName] = value;\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (fieldInfo) {\r\n fieldInfo.$instance.setValue(value);\r\n }\r\n }\r\n\r\n public setFieldItems = (fieldName: string, values: any) => {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field) {\r\n return field.$instance.setValueItems(values);\r\n }\r\n };\r\n\r\n /**\r\n * field \uCD94\uAC00\r\n *\r\n * @param {FormField} field\r\n */\r\n public addField = (field: FormField) => {\r\n this.options.fields.push(field);\r\n this.formTemplate.addRow(field);\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * field \uC81C\uAC70\r\n *\r\n * @param {string} fieldName\r\n */\r\n public removeField = (fieldName: string) => {\r\n const element = this.getFieldElement(fieldName);\r\n\r\n if (element != null) {\r\n element.closest(\".df-row\")?.remove();\r\n }\r\n\r\n this.fieldInfoMap.removeFieldInfo(fieldName);\r\n };\r\n\r\n /**\r\n * \uD3FC \uC720\uD6A8\uC131 \uAC80\uC99D \uC5EC\uBD80\r\n *\r\n * @returns {boolean}\r\n */\r\n public isValidForm = (): boolean => {\r\n const result = this.validForm();\r\n\r\n return result.length < 1;\r\n };\r\n\r\n /**\r\n * \uC720\uD6A8\uC131 \uAC80\uC99D \uD3FC \uAC80\uC99D\uC5EC\uBD80 \uB9AC\uD134\r\n *\r\n * @returns {any[]}\r\n */\r\n public validForm = (): any[] => {\r\n let validResult = [] as any;\r\n let autoFocusFlag = this.options.autoFocus !== false;\r\n let firstFlag = true;\r\n\r\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\r\n for (const fieldKey in fieldMap) {\r\n const fieldInfo = fieldMap[fieldKey];\r\n\r\n let fieldValid = this.fieldInfoMap.getFieldValidation(fieldInfo, autoFocusFlag);\r\n\r\n if (fieldValid !== true) {\r\n autoFocusFlag = false;\r\n\r\n if (utils.isGridType(fieldInfo)) {\r\n validResult = validResult.concat(fieldValid);\r\n } else {\r\n if (firstFlag) {\r\n this.validTabCheck(fieldInfo);\r\n firstFlag = false;\r\n }\r\n validResult.push(fieldValid);\r\n }\r\n }\r\n }\r\n\r\n return validResult;\r\n };\r\n\r\n private validTabCheck(fieldInfo: FormField) {\r\n if (fieldInfo.$parent) {\r\n if (fieldInfo.$parent.renderType == \"tab\") {\r\n fieldInfo.$parent.$instance.setActive(fieldInfo.$key);\r\n }\r\n this.validTabCheck(fieldInfo.$parent);\r\n }\r\n }\r\n\r\n public isValidField = (fieldName: string): boolean => {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (utils.isUndefined(fieldInfo)) {\r\n throw new Error(`Field name [${fieldName}] not found`);\r\n }\r\n\r\n const renderInfo = fieldInfo.$instance;\r\n if (renderInfo) {\r\n return renderInfo.valid() === true;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * \uC124\uC815 \uC635\uC158 \uC5BB\uAE30\r\n */\r\n public getOptions = () => {\r\n return this.options;\r\n };\r\n\r\n public conditionCheck() {\r\n this.fieldInfoMap.conditionCheck();\r\n }\r\n\r\n public setFieldDisabled(fieldName: string, flag: boolean) {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n fieldInfo.$instance.setDisabled(flag);\r\n }\r\n\r\n /**\r\n * \uC124\uBA85 \uCD94\uAC00\r\n *\r\n * @public\r\n * @param {string} fieldName\r\n * @param {string} desc\r\n */\r\n public setFieldDescription(fieldName: string, desc: string) {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n fieldInfo.$instance.setDescription(desc);\r\n }\r\n\r\n public destroy = () => {\r\n this.formElement.className = this.orginFormStyleClass;\r\n this.formElement.replaceChildren();\r\n\r\n for (const key in this) {\r\n if (utils.hasOwnProp(this, key)) {\r\n delete this[key];\r\n delete allInstance[this.selector];\r\n }\r\n }\r\n };\r\n\r\n public static validator = {\r\n string: (value: string, field: FormField) => {\r\n return stringValidator(value, field);\r\n },\r\n number: (value: string, field: FormField) => {\r\n return numberValidator(value, field);\r\n },\r\n regexp: (value: string, field: FormField) => {\r\n let result: ValidResult = { name: field.name, constraint: [] };\r\n return regexpValidator(value, field, result);\r\n },\r\n };\r\n\r\n public static instance(ele: Element | String) {\r\n let element;\r\n if (utils.isString(ele)) {\r\n element = document.querySelector(ele);\r\n } else {\r\n element = ele;\r\n }\r\n element = element as Element;\r\n let selector = element.getAttribute(SEQ_ATTR_KEY);\r\n\r\n if (utils.isUndefined(selector) || utils.isBlank(selector)) {\r\n const keys = Object.keys(allInstance);\r\n if (keys.length > 1) {\r\n throw new Error(`selector empty : [${selector}]`);\r\n }\r\n selector = keys[0];\r\n\r\n return allInstance[selector];\r\n }\r\n }\r\n /**\r\n * \uBAA8\uB4E0 field \uC5BB\uAE30\r\n */\r\n public getFields = (): any[] => {\r\n return this.options.fields;\r\n };\r\n\r\n /**\r\n * field setting\r\n * @param fields\r\n */\r\n public setFields = (fields: any[]) => {\r\n this.options.fields = fields;\r\n this.createForm(fields);\r\n };\r\n\r\n public getFieldInfoMap() {\r\n return this.fieldInfoMap;\r\n }\r\n}\r\n", "import DaraForm from \"./DaraForm\";\r\n\r\nimport \"../style/daracl.form.scss\";\r\n\r\nimport \"@daracl/datetimepicker/style/daracl.datetimepicker.scss\";\r\n\r\nexport = DaraForm;\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["descEle", "message", "item", "validResult", "Lanauage_default", "DateViewMode", "xssFilter", "expressionsFunction", "regexp", "message", "exports", "module", "fieldStyle", "validResult", "localeMessage", "Language", "message"]
7
7
  }