@ng-nest/ui 20.0.7 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/auto-complete/index.d.ts +33 -8
  2. package/base-form/index.d.ts +3 -3
  3. package/calendar/index.d.ts +1 -2
  4. package/cascade/index.d.ts +33 -8
  5. package/checkbox/index.d.ts +3 -3
  6. package/color-picker/index.d.ts +34 -8
  7. package/core/index.d.ts +40 -8
  8. package/date-picker/index.d.ts +57 -12
  9. package/dropdown/index.d.ts +4 -4
  10. package/fesm2022/ng-nest-ui-affix.mjs +12 -12
  11. package/fesm2022/ng-nest-ui-affix.mjs.map +1 -1
  12. package/fesm2022/ng-nest-ui-alert.mjs +35 -35
  13. package/fesm2022/ng-nest-ui-alert.mjs.map +1 -1
  14. package/fesm2022/ng-nest-ui-anchor.mjs +31 -31
  15. package/fesm2022/ng-nest-ui-anchor.mjs.map +1 -1
  16. package/fesm2022/ng-nest-ui-api.mjs +7 -7
  17. package/fesm2022/ng-nest-ui-api.mjs.map +1 -1
  18. package/fesm2022/ng-nest-ui-auto-complete.mjs +82 -72
  19. package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
  20. package/fesm2022/ng-nest-ui-avatar.mjs +31 -31
  21. package/fesm2022/ng-nest-ui-avatar.mjs.map +1 -1
  22. package/fesm2022/ng-nest-ui-back-top.mjs +18 -18
  23. package/fesm2022/ng-nest-ui-back-top.mjs.map +1 -1
  24. package/fesm2022/ng-nest-ui-badge.mjs +23 -23
  25. package/fesm2022/ng-nest-ui-badge.mjs.map +1 -1
  26. package/fesm2022/ng-nest-ui-base-form.mjs +45 -45
  27. package/fesm2022/ng-nest-ui-base-form.mjs.map +1 -1
  28. package/fesm2022/ng-nest-ui-button.mjs +42 -42
  29. package/fesm2022/ng-nest-ui-button.mjs.map +1 -1
  30. package/fesm2022/ng-nest-ui-calendar.mjs +20 -20
  31. package/fesm2022/ng-nest-ui-calendar.mjs.map +1 -1
  32. package/fesm2022/ng-nest-ui-card.mjs +15 -15
  33. package/fesm2022/ng-nest-ui-card.mjs.map +1 -1
  34. package/fesm2022/ng-nest-ui-carousel.mjs +46 -46
  35. package/fesm2022/ng-nest-ui-carousel.mjs.map +1 -1
  36. package/fesm2022/ng-nest-ui-cascade.mjs +86 -76
  37. package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
  38. package/fesm2022/ng-nest-ui-checkbox.mjs +39 -39
  39. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  40. package/fesm2022/ng-nest-ui-collapse.mjs +31 -31
  41. package/fesm2022/ng-nest-ui-collapse.mjs.map +1 -1
  42. package/fesm2022/ng-nest-ui-color-picker.mjs +91 -72
  43. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  44. package/fesm2022/ng-nest-ui-color.mjs +16 -16
  45. package/fesm2022/ng-nest-ui-color.mjs.map +1 -1
  46. package/fesm2022/ng-nest-ui-comment.mjs +21 -21
  47. package/fesm2022/ng-nest-ui-comment.mjs.map +1 -1
  48. package/fesm2022/ng-nest-ui-container.mjs +37 -37
  49. package/fesm2022/ng-nest-ui-container.mjs.map +1 -1
  50. package/fesm2022/ng-nest-ui-core.mjs +38 -22
  51. package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
  52. package/fesm2022/ng-nest-ui-crumb.mjs +13 -13
  53. package/fesm2022/ng-nest-ui-crumb.mjs.map +1 -1
  54. package/fesm2022/ng-nest-ui-date-picker.mjs +273 -253
  55. package/fesm2022/ng-nest-ui-date-picker.mjs.map +1 -1
  56. package/fesm2022/ng-nest-ui-description.mjs +31 -31
  57. package/fesm2022/ng-nest-ui-description.mjs.map +1 -1
  58. package/fesm2022/ng-nest-ui-dialog.mjs +81 -81
  59. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  60. package/fesm2022/ng-nest-ui-doc.mjs +7 -7
  61. package/fesm2022/ng-nest-ui-doc.mjs.map +1 -1
  62. package/fesm2022/ng-nest-ui-drag.mjs +10 -10
  63. package/fesm2022/ng-nest-ui-drag.mjs.map +1 -1
  64. package/fesm2022/ng-nest-ui-drawer.mjs +42 -42
  65. package/fesm2022/ng-nest-ui-drawer.mjs.map +1 -1
  66. package/fesm2022/ng-nest-ui-dropdown.mjs +49 -49
  67. package/fesm2022/ng-nest-ui-dropdown.mjs.map +1 -1
  68. package/fesm2022/ng-nest-ui-empty.mjs +12 -12
  69. package/fesm2022/ng-nest-ui-empty.mjs.map +1 -1
  70. package/fesm2022/ng-nest-ui-examples.mjs +7 -7
  71. package/fesm2022/ng-nest-ui-examples.mjs.map +1 -1
  72. package/fesm2022/ng-nest-ui-find.mjs +79 -77
  73. package/fesm2022/ng-nest-ui-find.mjs.map +1 -1
  74. package/fesm2022/ng-nest-ui-form.mjs +33 -33
  75. package/fesm2022/ng-nest-ui-form.mjs.map +1 -1
  76. package/fesm2022/ng-nest-ui-highlight.mjs +20 -20
  77. package/fesm2022/ng-nest-ui-highlight.mjs.map +1 -1
  78. package/fesm2022/ng-nest-ui-i18n.mjs +15 -15
  79. package/fesm2022/ng-nest-ui-i18n.mjs.map +1 -1
  80. package/fesm2022/ng-nest-ui-icon.mjs +21 -21
  81. package/fesm2022/ng-nest-ui-icon.mjs.map +1 -1
  82. package/fesm2022/ng-nest-ui-image.mjs +39 -39
  83. package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
  84. package/fesm2022/ng-nest-ui-inner.mjs +11 -11
  85. package/fesm2022/ng-nest-ui-inner.mjs.map +1 -1
  86. package/fesm2022/ng-nest-ui-input-number.mjs +42 -42
  87. package/fesm2022/ng-nest-ui-input-number.mjs.map +1 -1
  88. package/fesm2022/ng-nest-ui-input.mjs +102 -81
  89. package/fesm2022/ng-nest-ui-input.mjs.map +1 -1
  90. package/fesm2022/ng-nest-ui-keyword.mjs +15 -15
  91. package/fesm2022/ng-nest-ui-keyword.mjs.map +1 -1
  92. package/fesm2022/ng-nest-ui-layout.mjs +31 -31
  93. package/fesm2022/ng-nest-ui-layout.mjs.map +1 -1
  94. package/fesm2022/ng-nest-ui-link.mjs +18 -18
  95. package/fesm2022/ng-nest-ui-link.mjs.map +1 -1
  96. package/fesm2022/ng-nest-ui-list.mjs +80 -80
  97. package/fesm2022/ng-nest-ui-list.mjs.map +1 -1
  98. package/fesm2022/ng-nest-ui-loading.mjs +22 -22
  99. package/fesm2022/ng-nest-ui-loading.mjs.map +1 -1
  100. package/fesm2022/ng-nest-ui-menu.mjs +45 -45
  101. package/fesm2022/ng-nest-ui-menu.mjs.map +1 -1
  102. package/fesm2022/ng-nest-ui-message-box.mjs +10 -10
  103. package/fesm2022/ng-nest-ui-message-box.mjs.map +1 -1
  104. package/fesm2022/ng-nest-ui-message.mjs +10 -10
  105. package/fesm2022/ng-nest-ui-message.mjs.map +1 -1
  106. package/fesm2022/ng-nest-ui-notification.mjs +10 -10
  107. package/fesm2022/ng-nest-ui-notification.mjs.map +1 -1
  108. package/fesm2022/ng-nest-ui-outlet.mjs +9 -9
  109. package/fesm2022/ng-nest-ui-outlet.mjs.map +1 -1
  110. package/fesm2022/ng-nest-ui-page-header.mjs +15 -15
  111. package/fesm2022/ng-nest-ui-page-header.mjs.map +1 -1
  112. package/fesm2022/ng-nest-ui-pagination.mjs +53 -53
  113. package/fesm2022/ng-nest-ui-pagination.mjs.map +1 -1
  114. package/fesm2022/ng-nest-ui-pattern.mjs +7 -7
  115. package/fesm2022/ng-nest-ui-pattern.mjs.map +1 -1
  116. package/fesm2022/ng-nest-ui-popconfirm.mjs +27 -27
  117. package/fesm2022/ng-nest-ui-popconfirm.mjs.map +1 -1
  118. package/fesm2022/ng-nest-ui-popover.mjs +38 -38
  119. package/fesm2022/ng-nest-ui-popover.mjs.map +1 -1
  120. package/fesm2022/ng-nest-ui-portal.mjs +7 -7
  121. package/fesm2022/ng-nest-ui-portal.mjs.map +1 -1
  122. package/fesm2022/ng-nest-ui-progress.mjs +38 -38
  123. package/fesm2022/ng-nest-ui-progress.mjs.map +1 -1
  124. package/fesm2022/ng-nest-ui-radio.mjs +36 -36
  125. package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
  126. package/fesm2022/ng-nest-ui-rate.mjs +30 -30
  127. package/fesm2022/ng-nest-ui-rate.mjs.map +1 -1
  128. package/fesm2022/ng-nest-ui-resizable.mjs +16 -16
  129. package/fesm2022/ng-nest-ui-resizable.mjs.map +1 -1
  130. package/fesm2022/ng-nest-ui-result.mjs +16 -16
  131. package/fesm2022/ng-nest-ui-result.mjs.map +1 -1
  132. package/fesm2022/ng-nest-ui-ripple.mjs +13 -13
  133. package/fesm2022/ng-nest-ui-ripple.mjs.map +1 -1
  134. package/fesm2022/ng-nest-ui-scrollable.mjs +102 -19
  135. package/fesm2022/ng-nest-ui-scrollable.mjs.map +1 -1
  136. package/fesm2022/ng-nest-ui-select.mjs +121 -111
  137. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  138. package/fesm2022/ng-nest-ui-skeleton.mjs +15 -15
  139. package/fesm2022/ng-nest-ui-skeleton.mjs.map +1 -1
  140. package/fesm2022/ng-nest-ui-slider-select.mjs +54 -54
  141. package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
  142. package/fesm2022/ng-nest-ui-slider.mjs +39 -39
  143. package/fesm2022/ng-nest-ui-slider.mjs.map +1 -1
  144. package/fesm2022/ng-nest-ui-statistic.mjs +30 -30
  145. package/fesm2022/ng-nest-ui-statistic.mjs.map +1 -1
  146. package/fesm2022/ng-nest-ui-steps.mjs +19 -19
  147. package/fesm2022/ng-nest-ui-steps.mjs.map +1 -1
  148. package/fesm2022/ng-nest-ui-switch.mjs +26 -26
  149. package/fesm2022/ng-nest-ui-switch.mjs.map +1 -1
  150. package/fesm2022/ng-nest-ui-table-view.mjs +490 -242
  151. package/fesm2022/ng-nest-ui-table-view.mjs.map +1 -1
  152. package/fesm2022/ng-nest-ui-table.mjs +221 -221
  153. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  154. package/fesm2022/ng-nest-ui-tabs.mjs +58 -58
  155. package/fesm2022/ng-nest-ui-tabs.mjs.map +1 -1
  156. package/fesm2022/ng-nest-ui-tag.mjs +22 -22
  157. package/fesm2022/ng-nest-ui-tag.mjs.map +1 -1
  158. package/fesm2022/ng-nest-ui-text-retract.mjs +15 -15
  159. package/fesm2022/ng-nest-ui-text-retract.mjs.map +1 -1
  160. package/fesm2022/ng-nest-ui-textarea.mjs +41 -41
  161. package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
  162. package/fesm2022/ng-nest-ui-theme.mjs +23 -23
  163. package/fesm2022/ng-nest-ui-theme.mjs.map +1 -1
  164. package/fesm2022/ng-nest-ui-time-ago.mjs +7 -7
  165. package/fesm2022/ng-nest-ui-time-ago.mjs.map +1 -1
  166. package/fesm2022/ng-nest-ui-time-picker.mjs +104 -94
  167. package/fesm2022/ng-nest-ui-time-picker.mjs.map +1 -1
  168. package/fesm2022/ng-nest-ui-time-range.mjs +7 -7
  169. package/fesm2022/ng-nest-ui-time-range.mjs.map +1 -1
  170. package/fesm2022/ng-nest-ui-timeline.mjs +15 -15
  171. package/fesm2022/ng-nest-ui-timeline.mjs.map +1 -1
  172. package/fesm2022/ng-nest-ui-tooltip.mjs +38 -38
  173. package/fesm2022/ng-nest-ui-tooltip.mjs.map +1 -1
  174. package/fesm2022/ng-nest-ui-transfer.mjs +40 -40
  175. package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
  176. package/fesm2022/ng-nest-ui-tree-file.mjs +28 -28
  177. package/fesm2022/ng-nest-ui-tree-file.mjs.map +1 -1
  178. package/fesm2022/ng-nest-ui-tree-select.mjs +126 -116
  179. package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
  180. package/fesm2022/ng-nest-ui-tree.mjs +107 -107
  181. package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
  182. package/fesm2022/ng-nest-ui-typography.mjs +13 -13
  183. package/fesm2022/ng-nest-ui-typography.mjs.map +1 -1
  184. package/fesm2022/ng-nest-ui-upload.mjs +37 -37
  185. package/fesm2022/ng-nest-ui-upload.mjs.map +1 -1
  186. package/find/index.d.ts +5 -5
  187. package/form/index.d.ts +1 -1
  188. package/input/index.d.ts +32 -5
  189. package/input-number/index.d.ts +5 -5
  190. package/list/index.d.ts +2 -2
  191. package/message-box/index.d.ts +4 -5
  192. package/package.json +20 -20
  193. package/radio/index.d.ts +3 -3
  194. package/rate/index.d.ts +5 -5
  195. package/scrollable/index.d.ts +15 -7
  196. package/select/index.d.ts +38 -8
  197. package/slider-select/index.d.ts +3 -3
  198. package/steps/index.d.ts +1 -2
  199. package/switch/index.d.ts +3 -3
  200. package/table-view/index.d.ts +121 -79
  201. package/textarea/index.d.ts +3 -3
  202. package/theme/index.d.ts +1 -1
  203. package/time-picker/index.d.ts +33 -8
  204. package/transfer/index.d.ts +1 -1
  205. package/tree-select/index.d.ts +33 -8
  206. package/upload/index.d.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-form.mjs","sources":["../../../../lib/ng-nest/ui/form/form.property.ts","../../../../lib/ng-nest/ui/form/control.component.ts","../../../../lib/ng-nest/ui/form/control.component.html","../../../../lib/ng-nest/ui/form/form.component.ts","../../../../lib/ng-nest/ui/form/form.component.html","../../../../lib/ng-nest/ui/form/form.module.ts","../../../../lib/ng-nest/ui/form/ng-nest-ui-form.ts"],"sourcesContent":["import { XIdentity, XBoolean, XIsEmpty, XNumber, XToCssPixelValue, XToNumber, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, TemplateRef, model, input, output } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\r\nimport { XInputOption, XInputComponent } from '@ng-nest/ui/input';\r\nimport { XSelectOption, XSelectComponent } from '@ng-nest/ui/select';\r\nimport { XCascadeOption, XCascadeComponent } from '@ng-nest/ui/cascade';\r\nimport { XCheckboxOption, XCheckboxComponent } from '@ng-nest/ui/checkbox';\r\nimport { XColorPickerOption, XColorPickerComponent } from '@ng-nest/ui/color-picker';\r\nimport { XDatePickerOption, XDatePickerComponent } from '@ng-nest/ui/date-picker';\r\nimport { XInputNumberOption, XInputNumberComponent } from '@ng-nest/ui/input-number';\r\nimport { XRadioOption, XRadioComponent } from '@ng-nest/ui/radio';\r\nimport { XRateOption, XRateComponent } from '@ng-nest/ui/rate';\r\nimport { XSliderSelectOption, XSliderSelectComponent } from '@ng-nest/ui/slider-select';\r\nimport { XSwitchOption, XSwitchComponent } from '@ng-nest/ui/switch';\r\nimport { XTimePickerOption, XTimePickerComponent } from '@ng-nest/ui/time-picker';\r\nimport { XTextareaOption, XTextareaComponent } from '@ng-nest/ui/textarea';\r\nimport { XFindOption, XFindComponent } from '@ng-nest/ui/find';\r\nimport { XFormControlFunction, XFormOption } from '@ng-nest/ui/base-form';\r\nimport { XAutoCompleteOption, XAutoCompleteComponent } from '@ng-nest/ui/auto-complete';\r\n\r\n/**\r\n * Form\r\n * @selector x-form\r\n * @decorator component\r\n */\r\nexport const XFormPrefix = 'x-form';\r\nconst X_FORM_CONFIG_NAME = 'form';\r\n\r\n/**\r\n * @zh_CN 模板\r\n * @en_US Template\r\n */\r\nexport type XFormTemplate = { [property: string]: TemplateRef<any> };\r\n/**\r\n * Form Property\r\n */\r\n@Component({ selector: `${XFormPrefix}-property`, template: '' })\r\nexport class XFormProperty extends XFormControlFunction(X_FORM_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 表单 FormGroup\r\n * @en_US Form FormGroup\r\n * @default new UntypedFormGroup({})\r\n */\r\n readonly formGroup = input<UntypedFormGroup>(new UntypedFormGroup({}));\r\n /**\r\n * @zh_CN 表单名称\r\n * @en_US Form name\r\n */\r\n readonly title = input<string>('');\r\n /**\r\n * @zh_CN 控件间距\r\n * @en_US Control spacing\r\n */\r\n readonly space = input<string, XNumber>(this.config?.space ?? '1.75rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 控件宽度,24栅格\r\n * @en_US Control width, 24 grid\r\n */\r\n readonly span = input<number | null, XNumber>(null, { transform: XToNumber });\r\n /**\r\n * @zh_CN 标签后缀\r\n * @en_US Label suffix\r\n */\r\n readonly labelSuffix = input<string>(this.config?.labelSuffix ?? '');\r\n /**\r\n * @zh_CN 表单控件\r\n * @en_US Form control\r\n */\r\n readonly controls = input<XFormControlOption[] | XFormRow[]>([]);\r\n /**\r\n * @zh_CN 表单宽度\r\n * @en_US Form width\r\n */\r\n readonly width = input<string, XNumber>(this.config?.width ?? '100%', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 自定义模板\r\n * @en_US Custom template\r\n */\r\n readonly controlTpl = input<XFormTemplate>({});\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n override readonly disabled = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN Submit\r\n * @en_US Submit\r\n */\r\n readonly xSubmit = output<SubmitEvent>();\r\n}\r\n\r\n/**\r\n * @zh_CN 控件对象\r\n * @en_US Control object\r\n */\r\nexport interface XControlOption {\r\n /**\r\n * @zh_CN 列 Id\r\n * @en_US The column Id\r\n */\r\n id?: any;\r\n /**\r\n * @zh_CN 值\r\n * @en_US Value\r\n */\r\n value?: any;\r\n /**\r\n * @zh_CN 初始默认值\r\n * @en_US Default value\r\n */\r\n defaultValue?: any;\r\n /**\r\n * @zh_CN 控件类型\r\n * @en_US Control type\r\n */\r\n control?: XControlType;\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n disabled?: boolean;\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Read only\r\n */\r\n readonly?: boolean;\r\n /**\r\n * @zh_CN 必填\r\n * @en_US Required\r\n */\r\n required?: boolean;\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hide\r\n */\r\n hidden?: boolean;\r\n /**\r\n * @zh_CN 列宽\r\n * @en_US Column width\r\n */\r\n span?: number;\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular validation rules\r\n */\r\n pattern?: RegExp | RegExp[];\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verification failed prompt text\r\n */\r\n message?: string | string[];\r\n /**\r\n * @zh_CN 输入框的验证函数\r\n * @en_US Validation function of input box\r\n */\r\n inputValidator?: (value: any) => boolean;\r\n /**\r\n * @zh_CN 外部改变事件\r\n * @en_US External change event\r\n */\r\n change?: () => void;\r\n /**\r\n * @zh_CN 自定义属性\r\n * @en_US Custom attributes\r\n */\r\n [property: string]: any;\r\n}\r\n\r\n/**\r\n * @zh_CN 控件对象\r\n * @en_US Control object\r\n */\r\nexport class XControl extends XIdentity implements XControlOption {\r\n /**\r\n * @zh_CN 值\r\n * @en_US Value\r\n */\r\n value?: any;\r\n /**\r\n * @zh_CN 开启这个,执行 reset 的时候初始为设置的 value,默认为 null\r\n * @en_US Enable this. When performing a reset, the initial value is the set value, which defaults to null\r\n */\r\n nonNullable?: any;\r\n /**\r\n * @zh_CN 控件类型\r\n * @en_US Control type\r\n */\r\n control?: XControlType;\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n disabled?: boolean;\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Read only\r\n */\r\n readonly?: boolean;\r\n /**\r\n * @zh_CN 必填\r\n * @en_US Required\r\n */\r\n required?: boolean;\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hide\r\n */\r\n hidden?: boolean;\r\n /**\r\n * @zh_CN 列宽\r\n * @en_US Column width\r\n */\r\n span?: number;\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular validation rules\r\n */\r\n pattern?: RegExp | RegExp[];\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verification failed prompt text\r\n */\r\n message?: string | string[];\r\n /**\r\n * @zh_CN 输入框的验证函数\r\n * @en_US Validation function of input box\r\n */\r\n inputValidator?: (value: any) => boolean;\r\n /**\r\n * @zh_CN 外部改变事件\r\n * @en_US External change event\r\n */\r\n change?: () => void;\r\n /**\r\n * @zh_CN 设置验证\r\n * @en_US Set verification\r\n */\r\n setValidators?: () => void;\r\n /**\r\n * @zh_CN 自定义属性\r\n * @en_US Custom attributes\r\n */\r\n [property: string]: any;\r\n\r\n constructor(option: XControlOption = {}) {\r\n super();\r\n if (XIsEmpty(this.value)) this.value = '';\r\n Object.assign(this, option);\r\n }\r\n}\r\n\r\n/**\r\n * @zh_CN 表单行对象\r\n * @en_US Form row object\r\n */\r\nexport interface XFormRow {\r\n /**\r\n * @zh_CN 行标题\r\n * @en_US Row header\r\n */\r\n title?: string;\r\n /**\r\n * @zh_CN 行图标\r\n * @en_US Row icon\r\n */\r\n icon?: string;\r\n /**\r\n * @zh_CN 行中的控件\r\n * @en_US Control in row\r\n */\r\n controls: XFormControlOption[];\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hidden\r\n */\r\n hidden?: XBoolean;\r\n}\r\n\r\n/**\r\n * Control\r\n * @selector x-control\r\n * @decorator component\r\n */\r\nexport const XControlPrefix = 'x-control';\r\n\r\n/**\r\n * Control Property\r\n */\r\n@Component({ selector: `${XControlPrefix}-property`, template: '' })\r\nexport class XControlProperty {\r\n /**\r\n * @zh_CN 控件对象\r\n * @en_US Control object\r\n */\r\n readonly option = model.required<XControl>({});\r\n}\r\n\r\n/**\r\n * Form control\r\n */\r\nexport class XFormControl extends UntypedFormControl {\r\n /**\r\n * @zh_CN 提示信息\r\n * @en_US Prompt information\r\n */\r\n messages?: string[] = [];\r\n}\r\n\r\n/**\r\n * @zh_CN 表单控件参数\r\n * @en_US Form control option\r\n */\r\nexport type XFormControlOption =\r\n | XInputControlOption\r\n | XSelectControlOption\r\n | XCascadeControlOption\r\n | XCheckboxControlOption\r\n | XColorPickerControlOption\r\n | XDatePickerControlOption\r\n | XInputNumberControlOption\r\n | XRadioControlOption\r\n | XRateControlOption\r\n | XSliderSelectControlOption\r\n | XSwitchControlOption\r\n | XTimePickerControlOption\r\n | XFindControlOption\r\n | XTemplateControlOption;\r\n\r\n/**\r\n * @zh_CN 表单控件组件\r\n * @en_US Form control component\r\n */\r\nexport type XFormControlComponent =\r\n | XInputComponent\r\n | XSelectComponent\r\n | XCascadeComponent\r\n | XCheckboxComponent\r\n | XColorPickerComponent\r\n | XDatePickerComponent\r\n | XInputNumberComponent\r\n | XRadioComponent\r\n | XRateComponent\r\n | XSliderSelectComponent\r\n | XSwitchComponent\r\n | XTimePickerComponent\r\n | XTextareaComponent\r\n | XFindComponent\r\n | XAutoCompleteComponent;\r\n\r\n/**\r\n * @zh_CN 表单控件类型\r\n * @en_US Form control type\r\n */\r\nexport type XFormControlType =\r\n | XInputControl\r\n | XSelectControl\r\n | XCascadeControl\r\n | XCheckboxControl\r\n | XColorPickerControl\r\n | XDatePickerControl\r\n | XInputNumberControl\r\n | XRadioControl\r\n | XRateControl\r\n | XSliderSelectControl\r\n | XSwitchControl\r\n | XTimePickerControl\r\n | XTextareaControl\r\n | XFindControl\r\n | XAutoCompleteControl;\r\n\r\n/**\r\n * @zh_CN 表单控件类型\r\n * @en_US Form control type\r\n */\r\nexport type XControlType =\r\n | 'input'\r\n | 'select'\r\n | 'cascade'\r\n | 'checkbox'\r\n | 'color-picker'\r\n | 'date-picker'\r\n | 'input-number'\r\n | 'radio'\r\n | 'rate'\r\n | 'slider-select'\r\n | 'switch'\r\n | 'time-picker'\r\n | 'textarea'\r\n | 'find'\r\n | 'auto-complete'\r\n | 'template';\r\n\r\n/**\r\n * Input Control\r\n */\r\nexport interface XInputControlOption extends XControlOption, XInputOption {}\r\nexport class XInputControl extends XControl {\r\n constructor(option: XInputControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Select Control\r\n */\r\nexport interface XSelectControlOption extends XControlOption, XSelectOption {}\r\nexport class XSelectControl extends XControl {\r\n constructor(option: XSelectControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Cascade Control\r\n */\r\nexport interface XCascadeControlOption extends XControlOption, XCascadeOption {}\r\nexport class XCascadeControl extends XControl {\r\n constructor(option: XCascadeControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Checkbox Control\r\n */\r\nexport interface XCheckboxControlOption extends XControlOption, XCheckboxOption {}\r\nexport class XCheckboxControl extends XControl {\r\n constructor(option: XCheckboxControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * ColorPicker Control\r\n */\r\nexport interface XColorPickerControlOption extends XControlOption, XColorPickerOption {}\r\nexport class XColorPickerControl extends XControl {\r\n constructor(option: XColorPickerControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * DatePicker Control\r\n */\r\nexport interface XDatePickerControlOption extends XControlOption, XDatePickerOption {}\r\nexport class XDatePickerControl extends XControl {\r\n constructor(option: XDatePickerControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * InputNumber Control\r\n */\r\nexport interface XInputNumberControlOption extends XControlOption, XInputNumberOption {}\r\nexport class XInputNumberControl extends XControl {\r\n constructor(option: XInputNumberControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Radio Control\r\n */\r\nexport interface XRadioControlOption extends XControlOption, XRadioOption {}\r\nexport class XRadioControl extends XControl {\r\n constructor(option: XRadioControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Rate Control\r\n */\r\nexport interface XRateControlOption extends XControlOption, XRateOption {}\r\nexport class XRateControl extends XControl {\r\n constructor(option: XRateControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * SliderSelect Control\r\n */\r\nexport interface XSliderSelectControlOption extends XControlOption, XSliderSelectOption {}\r\nexport class XSliderSelectControl extends XControl {\r\n constructor(option: XSliderSelectControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Switch Control\r\n */\r\nexport interface XSwitchControlOption extends XControlOption, XSwitchOption {}\r\nexport class XSwitchControl extends XControl {\r\n constructor(option: XSwitchControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * TimePicker Control\r\n */\r\nexport interface XTimePickerControlOption extends XControlOption, XTimePickerOption {}\r\nexport class XTimePickerControl extends XControl {\r\n constructor(option: XTimePickerControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Textarea Control\r\n */\r\nexport interface XTextareaControlOption extends XControlOption, XTextareaOption {}\r\nexport class XTextareaControl extends XControl {\r\n constructor(option: XTextareaControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Find Control\r\n */\r\nexport interface XFindControlOption extends XControlOption, XFindOption {}\r\nexport class XFindControl extends XControl {\r\n constructor(option: XFindControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * AutoComplete Control\r\n */\r\nexport interface XAutoCompleteControlOption extends XControlOption, XAutoCompleteOption {}\r\nexport class XAutoCompleteControl extends XControl {\r\n constructor(option: XAutoCompleteControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Template Control\r\n */\r\nexport interface XTemplateControlOption extends XControlOption, XFormOption {}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnInit,\r\n AfterViewInit,\r\n OnDestroy,\r\n inject,\r\n viewChild,\r\n signal,\r\n ViewContainerRef,\r\n ComponentRef,\r\n OutputEmitterRef,\r\n effect\r\n} from '@angular/core';\r\nimport { XControlProperty, XFormControlOption, XFormControlComponent, XFormControl } from './form.property';\r\nimport {\r\n Validators,\r\n UntypedFormControl,\r\n ValidatorFn,\r\n FormControlStatus,\r\n FormsModule,\r\n ReactiveFormsModule\r\n} from '@angular/forms';\r\nimport { XIsEmpty, XIsFunction } from '@ng-nest/ui/core';\r\nimport { Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { XI18nForm, XI18nService, zh_CN } from '@ng-nest/ui/i18n';\r\nimport { XFormInputValidator } from '@ng-nest/ui/base-form';\r\nimport { XFormComponent } from './form.component';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { CdkPortalOutlet, ComponentPortal, Portal, PortalModule } from '@angular/cdk/portal';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XAutoCompleteComponent } from '@ng-nest/ui/auto-complete';\r\nimport { XCascadeComponent } from '@ng-nest/ui/cascade';\r\nimport { XCheckboxComponent } from '@ng-nest/ui/checkbox';\r\nimport { XColorPickerComponent } from '@ng-nest/ui/color-picker';\r\nimport { XDatePickerComponent } from '@ng-nest/ui/date-picker';\r\nimport { XFindComponent } from '@ng-nest/ui/find';\r\nimport { XInputNumberComponent } from '@ng-nest/ui/input-number';\r\nimport { XRadioComponent } from '@ng-nest/ui/radio';\r\nimport { XRateComponent } from '@ng-nest/ui/rate';\r\nimport { XSelectComponent } from '@ng-nest/ui/select';\r\nimport { XSliderSelectComponent } from '@ng-nest/ui/slider-select';\r\nimport { XSwitchComponent } from '@ng-nest/ui/switch';\r\nimport { XTextareaComponent } from '@ng-nest/ui/textarea';\r\nimport { XTimePickerComponent } from '@ng-nest/ui/time-picker';\r\n\r\n@Component({\r\n selector: 'x-control',\r\n imports: [FormsModule, ReactiveFormsModule, PortalModule],\r\n templateUrl: './control.component.html',\r\n styleUrls: ['./control.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XControlComponent extends XControlProperty implements OnInit, AfterViewInit, OnDestroy {\r\n private i18n = inject(XI18nService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private _sharedProps = signal(['span', 'direction', 'justify', 'align', 'labelWidth', 'labelAlign']);\r\n private validatorFns = signal<ValidatorFn[]>([]);\r\n private formControl = signal<UntypedFormControl | null>(null);\r\n private _unSubject = new Subject<void>();\r\n value = signal<any>(null);\r\n\r\n form = inject(XFormComponent, { optional: true })!;\r\n locale = toSignal(this.i18n.localeChange.pipe(map((x) => x.form as XI18nForm)), { initialValue: zh_CN.form });\r\n portal = signal<Portal<any> | null>(null);\r\n componentPortal!: ComponentPortal<XFormControlComponent>;\r\n componentRef!: ComponentRef<XFormControlComponent>;\r\n portalOutlet = viewChild.required(CdkPortalOutlet);\r\n\r\n constructor() {\r\n super();\r\n\r\n effect(() => {\r\n this.formControl()!.patchValue(this.value());\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.setOption();\r\n\r\n this.formControl.set(\r\n new UntypedFormControl(this.option().value, {\r\n nonNullable: this.option().nonNullable\r\n })\r\n );\r\n this.setValidators();\r\n this.formControl()!\r\n .statusChanges.pipe(takeUntil(this._unSubject))\r\n .subscribe((x) => {\r\n this.setMessages(x);\r\n });\r\n this.formControl()!\r\n .valueChanges.pipe(takeUntil(this._unSubject))\r\n .subscribe((x) => {\r\n this.componentRef?.instance?.writeValue(x);\r\n });\r\n this.option().setValidators = () => this.setValidators();\r\n this.form.formGroup().addControl(this.option().id, this.formControl());\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.componentPortal = this.createComponentPortal(this.option());\r\n this.componentRef = this.portalOutlet().attachComponentPortal(this.componentPortal);\r\n\r\n for (let key in this.option()) {\r\n if (key in this.componentRef.instance) {\r\n const val = (this.componentRef.instance as any)[key];\r\n if (XIsFunction(val)) {\r\n const valSymbols = Object.getOwnPropertySymbols(val);\r\n if (valSymbols.length !== 1) break;\r\n const valSymbol = val[valSymbols[0]];\r\n if (valSymbol.hasOwnProperty('transformFn')) {\r\n // input\r\n this.componentRef.setInput(key, this.option()[key]);\r\n } else {\r\n // signal\r\n val.set(this.option()[key]);\r\n }\r\n } else if (val instanceof OutputEmitterRef) {\r\n // output\r\n val.subscribe((x) => this.option()[key](x));\r\n }\r\n }\r\n }\r\n\r\n if (this.option().value !== undefined) {\r\n this.componentRef.instance.writeValue(this.option().value);\r\n }\r\n\r\n this.componentRef.instance.valueObservable.subscribe((x) => {\r\n this.value.set(x);\r\n });\r\n\r\n this.form.controlTypes[this.option().id] = this.option();\r\n this.form.controlComponents[this.option().id] = this.componentRef.instance;\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setValidators() {\r\n this.validatorFns.set([]);\r\n if (this.option().disabled || this.form.disabled()) {\r\n this.formControl()!.disable();\r\n } else {\r\n this.formControl()!.enable();\r\n }\r\n if (this.option().required && !this.form.disabled()) {\r\n this.validatorFns.update((x) => [...x, Validators.required]);\r\n }\r\n if (this.option().pattern) {\r\n this.setPattern();\r\n }\r\n if (XIsFunction(this.option().inputValidator)) {\r\n this.validatorFns.update((x) => [...x, XFormInputValidator(this.option().inputValidator!)]);\r\n }\r\n this.formControl()!.setValidators(this.validatorFns());\r\n this.formControl()!.updateValueAndValidity();\r\n }\r\n\r\n setOption() {\r\n for (let prop of this._sharedProps()) {\r\n if (XIsEmpty(this.option()[prop])) {\r\n this.option.update((x) => {\r\n x[prop] = (this.form as any)[prop]();\r\n return x;\r\n });\r\n }\r\n }\r\n if (XIsEmpty(this.option().label)) {\r\n this.option.update((x) => {\r\n x.label = '';\r\n return x;\r\n });\r\n }\r\n this.option.update((x) => {\r\n x.label = `${this.option().label}${this.form.labelSuffix()}`;\r\n return x;\r\n });\r\n }\r\n\r\n setPattern() {\r\n const pattern = this.option().pattern;\r\n if (Array.isArray(pattern)) {\r\n for (const pt of pattern) {\r\n this.validatorFns.update((x) => [...x, Validators.pattern(pt)]);\r\n }\r\n } else {\r\n this.validatorFns.update((x) => [...x, Validators.pattern(pattern as RegExp)]);\r\n }\r\n }\r\n\r\n getPatternMsg(pattern: string) {\r\n const controlPattern = this.option().pattern;\r\n if (Array.isArray(controlPattern)) {\r\n return (this.option().message as Array<any>)[controlPattern.findIndex((x) => String(x) === pattern)];\r\n } else {\r\n return this.option().message;\r\n }\r\n }\r\n\r\n setMessages(state: FormControlStatus) {\r\n let control = this.formControl()! as XFormControl;\r\n if (state === 'INVALID' && this.formControl()!.errors !== null) {\r\n let messages: string[] = [];\r\n for (const key in control.errors) {\r\n const label = this.option().label || this.option().id;\r\n if (key === 'required') {\r\n messages = [...messages, `${label} ${this.locale()?.required || 'required'}`];\r\n } else if (key === 'pattern') {\r\n messages = [...messages, `${label} ${this.getPatternMsg(control.errors[key].requiredPattern)}`];\r\n } else if (key === 'inputValidator') {\r\n messages = [...messages, `${label} ${this.option().message}`];\r\n }\r\n }\r\n control.messages = messages;\r\n } else if (state === 'VALID') {\r\n control.messages = [];\r\n }\r\n }\r\n\r\n createComponentPortal(option: XFormControlOption) {\r\n switch (option.control) {\r\n case 'input':\r\n return new ComponentPortal(XInputComponent, this.viewContainerRef);\r\n case 'select':\r\n return new ComponentPortal(XSelectComponent, this.viewContainerRef);\r\n case 'checkbox':\r\n return new ComponentPortal(XCheckboxComponent, this.viewContainerRef);\r\n case 'radio':\r\n return new ComponentPortal(XRadioComponent, this.viewContainerRef);\r\n case 'switch':\r\n return new ComponentPortal(XSwitchComponent, this.viewContainerRef);\r\n case 'rate':\r\n return new ComponentPortal(XRateComponent, this.viewContainerRef);\r\n case 'date-picker':\r\n return new ComponentPortal(XDatePickerComponent, this.viewContainerRef);\r\n case 'time-picker':\r\n return new ComponentPortal(XTimePickerComponent, this.viewContainerRef);\r\n case 'input-number':\r\n return new ComponentPortal(XInputNumberComponent, this.viewContainerRef);\r\n case 'slider-select':\r\n return new ComponentPortal(XSliderSelectComponent, this.viewContainerRef);\r\n case 'cascade':\r\n return new ComponentPortal(XCascadeComponent, this.viewContainerRef);\r\n case 'color-picker':\r\n return new ComponentPortal(XColorPickerComponent, this.viewContainerRef);\r\n case 'textarea':\r\n return new ComponentPortal(XTextareaComponent, this.viewContainerRef);\r\n case 'find':\r\n return new ComponentPortal(XFindComponent, this.viewContainerRef);\r\n case 'auto-complete':\r\n return new ComponentPortal(XAutoCompleteComponent, this.viewContainerRef);\r\n default:\r\n return new ComponentPortal(XInputComponent, this.viewContainerRef);\r\n }\r\n }\r\n}\r\n","<div class=\"x-control\" [formGroup]=\"form.formGroup()\">\r\n <ng-template cdkPortalOutlet></ng-template>\r\n</div>\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n SimpleChanges,\r\n OnChanges,\r\n AfterViewInit,\r\n computed\r\n} from '@angular/core';\r\nimport {\r\n XFormProperty,\r\n XFormRow,\r\n XFormPrefix,\r\n XFormControlOption,\r\n XFormControl,\r\n XFormControlComponent,\r\n XControl\r\n} from './form.property';\r\nimport { XIsChange } from '@ng-nest/ui/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { XColComponent, XRowComponent } from '@ng-nest/ui/layout';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XControlComponent } from './control.component';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\n\r\n@Component({\r\n selector: `${XFormPrefix}`,\r\n imports: [\r\n NgClass,\r\n NgTemplateOutlet,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n XRowComponent,\r\n XColComponent,\r\n XOutletDirective,\r\n XIconComponent,\r\n XControlComponent\r\n ],\r\n templateUrl: './form.component.html',\r\n styleUrls: ['./form.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XFormComponent extends XFormProperty implements OnChanges, AfterViewInit {\r\n controlsType = computed(() => {\r\n const controls = this.controls();\r\n return controls && controls.length > 0 && (controls[0] as XFormRow).controls ? 'rows' : 'controls';\r\n });\r\n controlComponents: { [property: string]: XFormControlComponent } = {};\r\n controlTypes: { [property: string]: XControl } = {};\r\n formId = Number(Math.random().toString().substring(2, 6) + Date.now()).toString(36);\r\n classMap = computed(() => ({\r\n [`${XFormPrefix}-${this.controlsType()}`]: true\r\n }));\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { disabled } = changes;\r\n XIsChange(disabled) && this.setDisabled();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setDisabled();\r\n }\r\n\r\n setDisabled() {\r\n if (Object.keys(this.controlComponents).length === 0) return;\r\n if (this.disabled()) {\r\n for (let key in this.controlComponents) {\r\n let [control, type] = [this.controlComponents[key], this.controlTypes[key]];\r\n control.disabledSignal.set(true);\r\n control.requiredSignal.set(false);\r\n control.patternSignal.set([]);\r\n type.setValidators && type.setValidators();\r\n }\r\n } else {\r\n for (let key in this.controlComponents) {\r\n let [control, type] = [this.controlComponents[key], this.controlTypes[key]];\r\n control.disabledSignal.set(type.disabled!);\r\n control.requiredSignal.set(type.required!);\r\n control.patternSignal.set(type.pattern as RegExp | RegExp[]);\r\n type.setValidators && type.setValidators();\r\n }\r\n }\r\n this.formGroup().updateValueAndValidity();\r\n }\r\n\r\n setValidator() {\r\n for (let key in this.controlComponents) {\r\n let [control, type] = [this.controlComponents[key], this.controlTypes[key]];\r\n control.formControlValidator();\r\n type.setValidators && type.setValidators();\r\n control.cdr.detectChanges();\r\n }\r\n }\r\n\r\n resetValidator() {\r\n for (let key in this.controlComponents) {\r\n let [control] = [this.controlComponents[key]];\r\n control.validatorSignal.set(false);\r\n control.cdr.detectChanges();\r\n }\r\n }\r\n\r\n getValidatorMessages(): string[] {\r\n let result: string[] = [];\r\n if (this.formGroup().valid) return result;\r\n else {\r\n const eachControls = (array: XFormControlOption[]) => {\r\n for (const ctr of array) {\r\n const formCtr = this.formGroup().controls[ctr.id] as XFormControl;\r\n if (formCtr && formCtr.invalid) {\r\n result = [...result, ...(formCtr.messages as string[])];\r\n }\r\n }\r\n };\r\n if (this.controlsType() === 'rows') {\r\n for (const row of this.controls() as XFormRow[]) {\r\n eachControls(row.controls);\r\n }\r\n } else {\r\n eachControls(this.controls() as XFormControlOption[]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n onSubmit(event: SubmitEvent) {\r\n this.setValidator();\r\n this.xSubmit.emit(event);\r\n }\r\n}\r\n","<form\r\n #form\r\n class=\"x-form\"\r\n [class.x-form-has-content]=\"content.innerHTML.trim()\"\r\n [formGroup]=\"formGroup()\"\r\n [style.width]=\"width()\"\r\n [style.padding-bottom]=\"controlsType() === 'controls' ? this.space() : '0px'\"\r\n [ngClass]=\"classMap()\"\r\n (ngSubmit)=\"onSubmit($event)\"\r\n>\r\n @if (title()) {\r\n <div class=\"x-form-title\">{{ title() }}</div>\r\n }\r\n @switch (controlsType()) {\r\n @case ('controls') {\r\n <ng-container *ngTemplateOutlet=\"controlsTemp; context: { controls: controls() }\"> </ng-container>\r\n }\r\n @case ('rows') {\r\n <ng-container *ngTemplateOutlet=\"rowsTemp; context: { rows: controls() }\"></ng-container>\r\n }\r\n }\r\n <div class=\"x-form-content\" #content><ng-content></ng-content></div>\r\n</form>\r\n\r\n<ng-template #rowsTemp let-rows=\"rows\">\r\n @for (row of rows; track row) {\r\n <div class=\"x-form-category\" [hidden]=\"row.hidden\">\r\n <ng-container *ngTemplateOutlet=\"titleTemp; context: { row: row }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"controlsTemp; context: { controls: row.controls }\"></ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #controlsTemp let-controls=\"controls\">\r\n <x-row [space]=\"space()\">\r\n @for (control of controls; track control) {\r\n <x-col [style.padding-top]=\"space()\" [span]=\"!control.span ? span() : control.span\" [hidden]=\"control.hidden\">\r\n <ng-container *xOutlet=\"controlTpl()[control.id]; context: { $option: control }\">\r\n <x-control [option]=\"control\"></x-control>\r\n </ng-container>\r\n </x-col>\r\n }\r\n </x-row>\r\n</ng-template>\r\n\r\n<ng-template #titleTemp let-row=\"row\">\r\n <label class=\"x-form-title\">\r\n @if (row.icon) {\r\n <x-icon [type]=\"row.icon\"></x-icon>\r\n }\r\n <span>{{ row.title }}</span>\r\n </label>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XFormComponent } from './form.component';\r\nimport { XControlComponent } from './control.component';\r\n\r\n@NgModule({\r\n exports: [XFormComponent, XControlComponent],\r\n imports: [XFormComponent, XControlComponent]\r\n})\r\nexport class XFormModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-form.mjs","sources":["../../../../lib/ng-nest/ui/form/form.property.ts","../../../../lib/ng-nest/ui/form/control.component.ts","../../../../lib/ng-nest/ui/form/control.component.html","../../../../lib/ng-nest/ui/form/form.component.ts","../../../../lib/ng-nest/ui/form/form.component.html","../../../../lib/ng-nest/ui/form/form.module.ts","../../../../lib/ng-nest/ui/form/ng-nest-ui-form.ts"],"sourcesContent":["import { XIdentity, XBoolean, XIsEmpty, XNumber, XToCssPixelValue, XToNumber, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, TemplateRef, model, input, output } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\r\nimport { XInputOption, XInputComponent } from '@ng-nest/ui/input';\r\nimport { XSelectOption, XSelectComponent } from '@ng-nest/ui/select';\r\nimport { XCascadeOption, XCascadeComponent } from '@ng-nest/ui/cascade';\r\nimport { XCheckboxOption, XCheckboxComponent } from '@ng-nest/ui/checkbox';\r\nimport { XColorPickerOption, XColorPickerComponent } from '@ng-nest/ui/color-picker';\r\nimport { XDatePickerOption, XDatePickerComponent } from '@ng-nest/ui/date-picker';\r\nimport { XInputNumberOption, XInputNumberComponent } from '@ng-nest/ui/input-number';\r\nimport { XRadioOption, XRadioComponent } from '@ng-nest/ui/radio';\r\nimport { XRateOption, XRateComponent } from '@ng-nest/ui/rate';\r\nimport { XSliderSelectOption, XSliderSelectComponent } from '@ng-nest/ui/slider-select';\r\nimport { XSwitchOption, XSwitchComponent } from '@ng-nest/ui/switch';\r\nimport { XTimePickerOption, XTimePickerComponent } from '@ng-nest/ui/time-picker';\r\nimport { XTextareaOption, XTextareaComponent } from '@ng-nest/ui/textarea';\r\nimport { XFindOption, XFindComponent } from '@ng-nest/ui/find';\r\nimport { XFormControlFunction, XFormOption } from '@ng-nest/ui/base-form';\r\nimport { XAutoCompleteOption, XAutoCompleteComponent } from '@ng-nest/ui/auto-complete';\r\n\r\n/**\r\n * Form\r\n * @selector x-form\r\n * @decorator component\r\n */\r\nexport const XFormPrefix = 'x-form';\r\nconst X_FORM_CONFIG_NAME = 'form';\r\n\r\n/**\r\n * @zh_CN 模板\r\n * @en_US Template\r\n */\r\nexport type XFormTemplate = { [property: string]: TemplateRef<any> };\r\n/**\r\n * Form Property\r\n */\r\n@Component({ selector: `${XFormPrefix}-property`, template: '' })\r\nexport class XFormProperty extends XFormControlFunction(X_FORM_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 表单 FormGroup\r\n * @en_US Form FormGroup\r\n * @default new UntypedFormGroup({})\r\n */\r\n readonly formGroup = input<UntypedFormGroup>(new UntypedFormGroup({}));\r\n /**\r\n * @zh_CN 表单名称\r\n * @en_US Form name\r\n */\r\n readonly title = input<string>('');\r\n /**\r\n * @zh_CN 控件间距\r\n * @en_US Control spacing\r\n */\r\n readonly space = input<string, XNumber>(this.config?.space ?? '1.75rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 控件宽度,24栅格\r\n * @en_US Control width, 24 grid\r\n */\r\n readonly span = input<number | null, XNumber>(null, { transform: XToNumber });\r\n /**\r\n * @zh_CN 标签后缀\r\n * @en_US Label suffix\r\n */\r\n readonly labelSuffix = input<string>(this.config?.labelSuffix ?? '');\r\n /**\r\n * @zh_CN 表单控件\r\n * @en_US Form control\r\n */\r\n readonly controls = input<XFormControlOption[] | XFormRow[]>([]);\r\n /**\r\n * @zh_CN 表单宽度\r\n * @en_US Form width\r\n */\r\n readonly width = input<string, XNumber>(this.config?.width ?? '100%', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 自定义模板\r\n * @en_US Custom template\r\n */\r\n readonly controlTpl = input<XFormTemplate>({});\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n override readonly disabled = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN Submit\r\n * @en_US Submit\r\n */\r\n readonly xSubmit = output<SubmitEvent>();\r\n}\r\n\r\n/**\r\n * @zh_CN 控件对象\r\n * @en_US Control object\r\n */\r\nexport interface XControlOption {\r\n /**\r\n * @zh_CN 列 Id\r\n * @en_US The column Id\r\n */\r\n id?: any;\r\n /**\r\n * @zh_CN 值\r\n * @en_US Value\r\n */\r\n value?: any;\r\n /**\r\n * @zh_CN 初始默认值\r\n * @en_US Default value\r\n */\r\n defaultValue?: any;\r\n /**\r\n * @zh_CN 控件类型\r\n * @en_US Control type\r\n */\r\n control?: XControlType;\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n disabled?: boolean;\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Read only\r\n */\r\n readonly?: boolean;\r\n /**\r\n * @zh_CN 必填\r\n * @en_US Required\r\n */\r\n required?: boolean;\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hide\r\n */\r\n hidden?: boolean;\r\n /**\r\n * @zh_CN 列宽\r\n * @en_US Column width\r\n */\r\n span?: number;\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular validation rules\r\n */\r\n pattern?: RegExp | RegExp[];\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verification failed prompt text\r\n */\r\n message?: string | string[];\r\n /**\r\n * @zh_CN 输入框的验证函数\r\n * @en_US Validation function of input box\r\n */\r\n inputValidator?: (value: any) => boolean;\r\n /**\r\n * @zh_CN 外部改变事件\r\n * @en_US External change event\r\n */\r\n change?: () => void;\r\n /**\r\n * @zh_CN 自定义属性\r\n * @en_US Custom attributes\r\n */\r\n [property: string]: any;\r\n}\r\n\r\n/**\r\n * @zh_CN 控件对象\r\n * @en_US Control object\r\n */\r\nexport class XControl extends XIdentity implements XControlOption {\r\n /**\r\n * @zh_CN 值\r\n * @en_US Value\r\n */\r\n value?: any;\r\n /**\r\n * @zh_CN 开启这个,执行 reset 的时候初始为设置的 value,默认为 null\r\n * @en_US Enable this. When performing a reset, the initial value is the set value, which defaults to null\r\n */\r\n nonNullable?: any;\r\n /**\r\n * @zh_CN 控件类型\r\n * @en_US Control type\r\n */\r\n control?: XControlType;\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n disabled?: boolean;\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Read only\r\n */\r\n readonly?: boolean;\r\n /**\r\n * @zh_CN 必填\r\n * @en_US Required\r\n */\r\n required?: boolean;\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hide\r\n */\r\n hidden?: boolean;\r\n /**\r\n * @zh_CN 列宽\r\n * @en_US Column width\r\n */\r\n span?: number;\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular validation rules\r\n */\r\n pattern?: RegExp | RegExp[];\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verification failed prompt text\r\n */\r\n message?: string | string[];\r\n /**\r\n * @zh_CN 输入框的验证函数\r\n * @en_US Validation function of input box\r\n */\r\n inputValidator?: (value: any) => boolean;\r\n /**\r\n * @zh_CN 外部改变事件\r\n * @en_US External change event\r\n */\r\n change?: () => void;\r\n /**\r\n * @zh_CN 设置验证\r\n * @en_US Set verification\r\n */\r\n setValidators?: () => void;\r\n /**\r\n * @zh_CN 自定义属性\r\n * @en_US Custom attributes\r\n */\r\n [property: string]: any;\r\n\r\n constructor(option: XControlOption = {}) {\r\n super();\r\n if (XIsEmpty(this.value)) this.value = '';\r\n Object.assign(this, option);\r\n }\r\n}\r\n\r\n/**\r\n * @zh_CN 表单行对象\r\n * @en_US Form row object\r\n */\r\nexport interface XFormRow {\r\n /**\r\n * @zh_CN 行标题\r\n * @en_US Row header\r\n */\r\n title?: string;\r\n /**\r\n * @zh_CN 行图标\r\n * @en_US Row icon\r\n */\r\n icon?: string;\r\n /**\r\n * @zh_CN 行中的控件\r\n * @en_US Control in row\r\n */\r\n controls: XFormControlOption[];\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hidden\r\n */\r\n hidden?: XBoolean;\r\n}\r\n\r\n/**\r\n * Control\r\n * @selector x-control\r\n * @decorator component\r\n */\r\nexport const XControlPrefix = 'x-control';\r\n\r\n/**\r\n * Control Property\r\n */\r\n@Component({ selector: `${XControlPrefix}-property`, template: '' })\r\nexport class XControlProperty {\r\n /**\r\n * @zh_CN 控件对象\r\n * @en_US Control object\r\n */\r\n readonly option = model.required<XControl>({});\r\n}\r\n\r\n/**\r\n * Form control\r\n */\r\nexport class XFormControl extends UntypedFormControl {\r\n /**\r\n * @zh_CN 提示信息\r\n * @en_US Prompt information\r\n */\r\n messages?: string[] = [];\r\n}\r\n\r\n/**\r\n * @zh_CN 表单控件参数\r\n * @en_US Form control option\r\n */\r\nexport type XFormControlOption =\r\n | XInputControlOption\r\n | XSelectControlOption\r\n | XCascadeControlOption\r\n | XCheckboxControlOption\r\n | XColorPickerControlOption\r\n | XDatePickerControlOption\r\n | XInputNumberControlOption\r\n | XRadioControlOption\r\n | XRateControlOption\r\n | XSliderSelectControlOption\r\n | XSwitchControlOption\r\n | XTimePickerControlOption\r\n | XFindControlOption\r\n | XTemplateControlOption;\r\n\r\n/**\r\n * @zh_CN 表单控件组件\r\n * @en_US Form control component\r\n */\r\nexport type XFormControlComponent =\r\n | XInputComponent\r\n | XSelectComponent\r\n | XCascadeComponent\r\n | XCheckboxComponent\r\n | XColorPickerComponent\r\n | XDatePickerComponent\r\n | XInputNumberComponent\r\n | XRadioComponent\r\n | XRateComponent\r\n | XSliderSelectComponent\r\n | XSwitchComponent\r\n | XTimePickerComponent\r\n | XTextareaComponent\r\n | XFindComponent\r\n | XAutoCompleteComponent;\r\n\r\n/**\r\n * @zh_CN 表单控件类型\r\n * @en_US Form control type\r\n */\r\nexport type XFormControlType =\r\n | XInputControl\r\n | XSelectControl\r\n | XCascadeControl\r\n | XCheckboxControl\r\n | XColorPickerControl\r\n | XDatePickerControl\r\n | XInputNumberControl\r\n | XRadioControl\r\n | XRateControl\r\n | XSliderSelectControl\r\n | XSwitchControl\r\n | XTimePickerControl\r\n | XTextareaControl\r\n | XFindControl\r\n | XAutoCompleteControl;\r\n\r\n/**\r\n * @zh_CN 表单控件类型\r\n * @en_US Form control type\r\n */\r\nexport type XControlType =\r\n | 'input'\r\n | 'select'\r\n | 'cascade'\r\n | 'checkbox'\r\n | 'color-picker'\r\n | 'date-picker'\r\n | 'input-number'\r\n | 'radio'\r\n | 'rate'\r\n | 'slider-select'\r\n | 'switch'\r\n | 'time-picker'\r\n | 'textarea'\r\n | 'find'\r\n | 'auto-complete'\r\n | 'template';\r\n\r\n/**\r\n * Input Control\r\n */\r\nexport interface XInputControlOption extends XControlOption, XInputOption {}\r\nexport class XInputControl extends XControl {\r\n constructor(option: XInputControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Select Control\r\n */\r\nexport interface XSelectControlOption extends XControlOption, XSelectOption {}\r\nexport class XSelectControl extends XControl {\r\n constructor(option: XSelectControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Cascade Control\r\n */\r\nexport interface XCascadeControlOption extends XControlOption, XCascadeOption {}\r\nexport class XCascadeControl extends XControl {\r\n constructor(option: XCascadeControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Checkbox Control\r\n */\r\nexport interface XCheckboxControlOption extends XControlOption, XCheckboxOption {}\r\nexport class XCheckboxControl extends XControl {\r\n constructor(option: XCheckboxControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * ColorPicker Control\r\n */\r\nexport interface XColorPickerControlOption extends XControlOption, XColorPickerOption {}\r\nexport class XColorPickerControl extends XControl {\r\n constructor(option: XColorPickerControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * DatePicker Control\r\n */\r\nexport interface XDatePickerControlOption extends XControlOption, XDatePickerOption {}\r\nexport class XDatePickerControl extends XControl {\r\n constructor(option: XDatePickerControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * InputNumber Control\r\n */\r\nexport interface XInputNumberControlOption extends XControlOption, XInputNumberOption {}\r\nexport class XInputNumberControl extends XControl {\r\n constructor(option: XInputNumberControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Radio Control\r\n */\r\nexport interface XRadioControlOption extends XControlOption, XRadioOption {}\r\nexport class XRadioControl extends XControl {\r\n constructor(option: XRadioControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Rate Control\r\n */\r\nexport interface XRateControlOption extends XControlOption, XRateOption {}\r\nexport class XRateControl extends XControl {\r\n constructor(option: XRateControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * SliderSelect Control\r\n */\r\nexport interface XSliderSelectControlOption extends XControlOption, XSliderSelectOption {}\r\nexport class XSliderSelectControl extends XControl {\r\n constructor(option: XSliderSelectControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Switch Control\r\n */\r\nexport interface XSwitchControlOption extends XControlOption, XSwitchOption {}\r\nexport class XSwitchControl extends XControl {\r\n constructor(option: XSwitchControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * TimePicker Control\r\n */\r\nexport interface XTimePickerControlOption extends XControlOption, XTimePickerOption {}\r\nexport class XTimePickerControl extends XControl {\r\n constructor(option: XTimePickerControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Textarea Control\r\n */\r\nexport interface XTextareaControlOption extends XControlOption, XTextareaOption {}\r\nexport class XTextareaControl extends XControl {\r\n constructor(option: XTextareaControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Find Control\r\n */\r\nexport interface XFindControlOption extends XControlOption, XFindOption {}\r\nexport class XFindControl extends XControl {\r\n constructor(option: XFindControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * AutoComplete Control\r\n */\r\nexport interface XAutoCompleteControlOption extends XControlOption, XAutoCompleteOption {}\r\nexport class XAutoCompleteControl extends XControl {\r\n constructor(option: XAutoCompleteControlOption = {}) {\r\n super(option);\r\n }\r\n}\r\n\r\n/**\r\n * Template Control\r\n */\r\nexport interface XTemplateControlOption extends XControlOption, XFormOption {}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnInit,\r\n AfterViewInit,\r\n OnDestroy,\r\n inject,\r\n viewChild,\r\n signal,\r\n ViewContainerRef,\r\n ComponentRef,\r\n OutputEmitterRef,\r\n effect\r\n} from '@angular/core';\r\nimport { XControlProperty, XFormControlOption, XFormControlComponent, XFormControl } from './form.property';\r\nimport {\r\n Validators,\r\n UntypedFormControl,\r\n ValidatorFn,\r\n FormControlStatus,\r\n FormsModule,\r\n ReactiveFormsModule\r\n} from '@angular/forms';\r\nimport { XIsEmpty, XIsFunction } from '@ng-nest/ui/core';\r\nimport { Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { XI18nForm, XI18nService, zh_CN } from '@ng-nest/ui/i18n';\r\nimport { XFormInputValidator } from '@ng-nest/ui/base-form';\r\nimport { XFormComponent } from './form.component';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { CdkPortalOutlet, ComponentPortal, Portal, PortalModule } from '@angular/cdk/portal';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XAutoCompleteComponent } from '@ng-nest/ui/auto-complete';\r\nimport { XCascadeComponent } from '@ng-nest/ui/cascade';\r\nimport { XCheckboxComponent } from '@ng-nest/ui/checkbox';\r\nimport { XColorPickerComponent } from '@ng-nest/ui/color-picker';\r\nimport { XDatePickerComponent } from '@ng-nest/ui/date-picker';\r\nimport { XFindComponent } from '@ng-nest/ui/find';\r\nimport { XInputNumberComponent } from '@ng-nest/ui/input-number';\r\nimport { XRadioComponent } from '@ng-nest/ui/radio';\r\nimport { XRateComponent } from '@ng-nest/ui/rate';\r\nimport { XSelectComponent } from '@ng-nest/ui/select';\r\nimport { XSliderSelectComponent } from '@ng-nest/ui/slider-select';\r\nimport { XSwitchComponent } from '@ng-nest/ui/switch';\r\nimport { XTextareaComponent } from '@ng-nest/ui/textarea';\r\nimport { XTimePickerComponent } from '@ng-nest/ui/time-picker';\r\n\r\n@Component({\r\n selector: 'x-control',\r\n imports: [FormsModule, ReactiveFormsModule, PortalModule],\r\n templateUrl: './control.component.html',\r\n styleUrls: ['./control.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XControlComponent extends XControlProperty implements OnInit, AfterViewInit, OnDestroy {\r\n private i18n = inject(XI18nService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private _sharedProps = signal(['span', 'direction', 'justify', 'align', 'labelWidth', 'labelAlign']);\r\n private validatorFns = signal<ValidatorFn[]>([]);\r\n private formControl = signal<UntypedFormControl | null>(null);\r\n private _unSubject = new Subject<void>();\r\n value = signal<any>(null);\r\n\r\n form = inject(XFormComponent, { optional: true })!;\r\n locale = toSignal(this.i18n.localeChange.pipe(map((x) => x.form as XI18nForm)), { initialValue: zh_CN.form });\r\n portal = signal<Portal<any> | null>(null);\r\n componentPortal!: ComponentPortal<XFormControlComponent>;\r\n componentRef!: ComponentRef<XFormControlComponent>;\r\n portalOutlet = viewChild.required(CdkPortalOutlet);\r\n\r\n constructor() {\r\n super();\r\n\r\n effect(() => {\r\n this.formControl()!.patchValue(this.value());\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.setOption();\r\n\r\n this.formControl.set(\r\n new UntypedFormControl(this.option().value, {\r\n nonNullable: this.option().nonNullable\r\n })\r\n );\r\n this.setValidators();\r\n this.formControl()!\r\n .statusChanges.pipe(takeUntil(this._unSubject))\r\n .subscribe((x) => {\r\n this.setMessages(x);\r\n });\r\n this.formControl()!\r\n .valueChanges.pipe(takeUntil(this._unSubject))\r\n .subscribe((x) => {\r\n this.componentRef?.instance?.writeValue(x);\r\n });\r\n this.option().setValidators = () => this.setValidators();\r\n this.form.formGroup().addControl(this.option().id, this.formControl());\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.componentPortal = this.createComponentPortal(this.option());\r\n this.componentRef = this.portalOutlet().attachComponentPortal(this.componentPortal);\r\n\r\n for (let key in this.option()) {\r\n if (key in this.componentRef.instance) {\r\n const val = (this.componentRef.instance as any)[key];\r\n if (XIsFunction(val)) {\r\n const valSymbols = Object.getOwnPropertySymbols(val);\r\n if (valSymbols.length !== 1) break;\r\n const valSymbol = val[valSymbols[0]];\r\n if (valSymbol.hasOwnProperty('transformFn')) {\r\n // input\r\n this.componentRef.setInput(key, this.option()[key]);\r\n } else {\r\n // signal\r\n val.set(this.option()[key]);\r\n }\r\n } else if (val instanceof OutputEmitterRef) {\r\n // output\r\n val.subscribe((x) => this.option()[key](x));\r\n }\r\n }\r\n }\r\n\r\n if (this.option().value !== undefined) {\r\n this.componentRef.instance.writeValue(this.option().value);\r\n }\r\n\r\n this.componentRef.instance.valueObservable.subscribe((x) => {\r\n this.value.set(x);\r\n });\r\n\r\n this.form.controlTypes[this.option().id] = this.option();\r\n this.form.controlComponents[this.option().id] = this.componentRef.instance;\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setValidators() {\r\n this.validatorFns.set([]);\r\n if (this.option().disabled || this.form.disabled()) {\r\n this.formControl()!.disable();\r\n } else {\r\n this.formControl()!.enable();\r\n }\r\n if (this.option().required && !this.form.disabled()) {\r\n this.validatorFns.update((x) => [...x, Validators.required]);\r\n }\r\n if (this.option().pattern) {\r\n this.setPattern();\r\n }\r\n if (XIsFunction(this.option().inputValidator)) {\r\n this.validatorFns.update((x) => [...x, XFormInputValidator(this.option().inputValidator!)]);\r\n }\r\n this.formControl()!.setValidators(this.validatorFns());\r\n this.formControl()!.updateValueAndValidity();\r\n }\r\n\r\n setOption() {\r\n for (let prop of this._sharedProps()) {\r\n if (XIsEmpty(this.option()[prop])) {\r\n this.option.update((x) => {\r\n x[prop] = (this.form as any)[prop]();\r\n return x;\r\n });\r\n }\r\n }\r\n if (XIsEmpty(this.option().label)) {\r\n this.option.update((x) => {\r\n x.label = '';\r\n return x;\r\n });\r\n }\r\n this.option.update((x) => {\r\n x.label = `${this.option().label}${this.form.labelSuffix()}`;\r\n return x;\r\n });\r\n }\r\n\r\n setPattern() {\r\n const pattern = this.option().pattern;\r\n if (Array.isArray(pattern)) {\r\n for (const pt of pattern) {\r\n this.validatorFns.update((x) => [...x, Validators.pattern(pt)]);\r\n }\r\n } else {\r\n this.validatorFns.update((x) => [...x, Validators.pattern(pattern as RegExp)]);\r\n }\r\n }\r\n\r\n getPatternMsg(pattern: string) {\r\n const controlPattern = this.option().pattern;\r\n if (Array.isArray(controlPattern)) {\r\n return (this.option().message as Array<any>)[controlPattern.findIndex((x) => String(x) === pattern)];\r\n } else {\r\n return this.option().message;\r\n }\r\n }\r\n\r\n setMessages(state: FormControlStatus) {\r\n let control = this.formControl()! as XFormControl;\r\n if (state === 'INVALID' && this.formControl()!.errors !== null) {\r\n let messages: string[] = [];\r\n for (const key in control.errors) {\r\n const label = this.option().label || this.option().id;\r\n if (key === 'required') {\r\n messages = [...messages, `${label} ${this.locale()?.required || 'required'}`];\r\n } else if (key === 'pattern') {\r\n messages = [...messages, `${label} ${this.getPatternMsg(control.errors[key].requiredPattern)}`];\r\n } else if (key === 'inputValidator') {\r\n messages = [...messages, `${label} ${this.option().message}`];\r\n }\r\n }\r\n control.messages = messages;\r\n } else if (state === 'VALID') {\r\n control.messages = [];\r\n }\r\n }\r\n\r\n createComponentPortal(option: XFormControlOption) {\r\n switch (option.control) {\r\n case 'input':\r\n return new ComponentPortal(XInputComponent, this.viewContainerRef);\r\n case 'select':\r\n return new ComponentPortal(XSelectComponent, this.viewContainerRef);\r\n case 'checkbox':\r\n return new ComponentPortal(XCheckboxComponent, this.viewContainerRef);\r\n case 'radio':\r\n return new ComponentPortal(XRadioComponent, this.viewContainerRef);\r\n case 'switch':\r\n return new ComponentPortal(XSwitchComponent, this.viewContainerRef);\r\n case 'rate':\r\n return new ComponentPortal(XRateComponent, this.viewContainerRef);\r\n case 'date-picker':\r\n return new ComponentPortal(XDatePickerComponent, this.viewContainerRef);\r\n case 'time-picker':\r\n return new ComponentPortal(XTimePickerComponent, this.viewContainerRef);\r\n case 'input-number':\r\n return new ComponentPortal(XInputNumberComponent, this.viewContainerRef);\r\n case 'slider-select':\r\n return new ComponentPortal(XSliderSelectComponent, this.viewContainerRef);\r\n case 'cascade':\r\n return new ComponentPortal(XCascadeComponent, this.viewContainerRef);\r\n case 'color-picker':\r\n return new ComponentPortal(XColorPickerComponent, this.viewContainerRef);\r\n case 'textarea':\r\n return new ComponentPortal(XTextareaComponent, this.viewContainerRef);\r\n case 'find':\r\n return new ComponentPortal(XFindComponent, this.viewContainerRef);\r\n case 'auto-complete':\r\n return new ComponentPortal(XAutoCompleteComponent, this.viewContainerRef);\r\n default:\r\n return new ComponentPortal(XInputComponent, this.viewContainerRef);\r\n }\r\n }\r\n}\r\n","<div class=\"x-control\" [formGroup]=\"form.formGroup()\">\r\n <ng-template cdkPortalOutlet></ng-template>\r\n</div>\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n SimpleChanges,\r\n OnChanges,\r\n AfterViewInit,\r\n computed\r\n} from '@angular/core';\r\nimport {\r\n XFormProperty,\r\n XFormRow,\r\n XFormPrefix,\r\n XFormControlOption,\r\n XFormControl,\r\n XFormControlComponent,\r\n XControl\r\n} from './form.property';\r\nimport { XIsChange } from '@ng-nest/ui/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { XColComponent, XRowComponent } from '@ng-nest/ui/layout';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XControlComponent } from './control.component';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\n\r\n@Component({\r\n selector: `${XFormPrefix}`,\r\n imports: [\r\n NgClass,\r\n NgTemplateOutlet,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n XRowComponent,\r\n XColComponent,\r\n XOutletDirective,\r\n XIconComponent,\r\n XControlComponent\r\n ],\r\n templateUrl: './form.component.html',\r\n styleUrls: ['./form.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XFormComponent extends XFormProperty implements OnChanges, AfterViewInit {\r\n controlsType = computed(() => {\r\n const controls = this.controls();\r\n return controls && controls.length > 0 && (controls[0] as XFormRow).controls ? 'rows' : 'controls';\r\n });\r\n controlComponents: { [property: string]: XFormControlComponent } = {};\r\n controlTypes: { [property: string]: XControl } = {};\r\n formId = Number(Math.random().toString().substring(2, 6) + Date.now()).toString(36);\r\n classMap = computed(() => ({\r\n [`${XFormPrefix}-${this.controlsType()}`]: true\r\n }));\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { disabled } = changes;\r\n XIsChange(disabled) && this.setDisabled();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setDisabled();\r\n }\r\n\r\n setDisabled() {\r\n if (Object.keys(this.controlComponents).length === 0) return;\r\n if (this.disabled()) {\r\n for (let key in this.controlComponents) {\r\n let [control, type] = [this.controlComponents[key], this.controlTypes[key]];\r\n control.disabledSignal.set(true);\r\n control.requiredSignal.set(false);\r\n control.patternSignal.set([]);\r\n type.setValidators && type.setValidators();\r\n }\r\n } else {\r\n for (let key in this.controlComponents) {\r\n let [control, type] = [this.controlComponents[key], this.controlTypes[key]];\r\n control.disabledSignal.set(type.disabled!);\r\n control.requiredSignal.set(type.required!);\r\n control.patternSignal.set(type.pattern as RegExp | RegExp[]);\r\n type.setValidators && type.setValidators();\r\n }\r\n }\r\n this.formGroup().updateValueAndValidity();\r\n }\r\n\r\n setValidator() {\r\n for (let key in this.controlComponents) {\r\n let [control, type] = [this.controlComponents[key], this.controlTypes[key]];\r\n control.formControlValidator();\r\n type.setValidators && type.setValidators();\r\n control.cdr.detectChanges();\r\n }\r\n }\r\n\r\n resetValidator() {\r\n for (let key in this.controlComponents) {\r\n let [control] = [this.controlComponents[key]];\r\n control.validatorSignal.set(false);\r\n control.cdr.detectChanges();\r\n }\r\n }\r\n\r\n getValidatorMessages(): string[] {\r\n let result: string[] = [];\r\n if (this.formGroup().valid) return result;\r\n else {\r\n const eachControls = (array: XFormControlOption[]) => {\r\n for (const ctr of array) {\r\n const formCtr = this.formGroup().controls[ctr.id] as XFormControl;\r\n if (formCtr && formCtr.invalid) {\r\n result = [...result, ...(formCtr.messages as string[])];\r\n }\r\n }\r\n };\r\n if (this.controlsType() === 'rows') {\r\n for (const row of this.controls() as XFormRow[]) {\r\n eachControls(row.controls);\r\n }\r\n } else {\r\n eachControls(this.controls() as XFormControlOption[]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n onSubmit(event: SubmitEvent) {\r\n this.setValidator();\r\n this.xSubmit.emit(event);\r\n }\r\n}\r\n","<form\r\n #form\r\n class=\"x-form\"\r\n [class.x-form-has-content]=\"content.innerHTML.trim()\"\r\n [formGroup]=\"formGroup()\"\r\n [style.width]=\"width()\"\r\n [style.padding-bottom]=\"controlsType() === 'controls' ? this.space() : '0px'\"\r\n [ngClass]=\"classMap()\"\r\n (ngSubmit)=\"onSubmit($event)\"\r\n>\r\n @if (title()) {\r\n <div class=\"x-form-title\">{{ title() }}</div>\r\n }\r\n @switch (controlsType()) {\r\n @case ('controls') {\r\n <ng-container *ngTemplateOutlet=\"controlsTemp; context: { controls: controls() }\"> </ng-container>\r\n }\r\n @case ('rows') {\r\n <ng-container *ngTemplateOutlet=\"rowsTemp; context: { rows: controls() }\"></ng-container>\r\n }\r\n }\r\n <div class=\"x-form-content\" #content><ng-content></ng-content></div>\r\n</form>\r\n\r\n<ng-template #rowsTemp let-rows=\"rows\">\r\n @for (row of rows; track row) {\r\n <div class=\"x-form-category\" [hidden]=\"row.hidden\">\r\n <ng-container *ngTemplateOutlet=\"titleTemp; context: { row: row }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"controlsTemp; context: { controls: row.controls }\"></ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #controlsTemp let-controls=\"controls\">\r\n <x-row [space]=\"space()\">\r\n @for (control of controls; track control) {\r\n <x-col [style.padding-top]=\"space()\" [span]=\"!control.span ? span() : control.span\" [hidden]=\"control.hidden\">\r\n <ng-container *xOutlet=\"controlTpl()[control.id]; context: { $option: control }\">\r\n <x-control [option]=\"control\"></x-control>\r\n </ng-container>\r\n </x-col>\r\n }\r\n </x-row>\r\n</ng-template>\r\n\r\n<ng-template #titleTemp let-row=\"row\">\r\n <label class=\"x-form-title\">\r\n @if (row.icon) {\r\n <x-icon [type]=\"row.icon\"></x-icon>\r\n }\r\n <span>{{ row.title }}</span>\r\n </label>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XFormComponent } from './form.component';\r\nimport { XControlComponent } from './control.component';\r\n\r\n@NgModule({\r\n exports: [XFormComponent, XControlComponent],\r\n imports: [XFormComponent, XControlComponent]\r\n})\r\nexport class XFormModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -23,27 +23,27 @@ class XHighlightProperty extends XPropertyFunction(X_HIGHLIGHT_CONFIG_NAME) {
23
23
  * @zh_CN 代码类型
24
24
  * @en_US Code type
25
25
  */
26
- this.type = input();
26
+ this.type = input(...(ngDevMode ? [undefined, { debugName: "type" }] : []));
27
27
  /**
28
28
  * @zh_CN 数据
29
29
  * @en_US Data
30
30
  */
31
- this.data = input();
31
+ this.data = input(...(ngDevMode ? [undefined, { debugName: "data" }] : []));
32
32
  /**
33
33
  * @zh_CN 高亮行数据
34
34
  * @en_US Highlight row data
35
35
  */
36
- this.highlightLines = input({});
36
+ this.highlightLines = input({}, ...(ngDevMode ? [{ debugName: "highlightLines" }] : []));
37
37
  /**
38
38
  * @zh_CN 显示复制按钮
39
39
  * @en_US display copy
40
40
  */
41
- this.showCopy = input(false, { transform: XToBoolean });
41
+ this.showCopy = input(false, ...(ngDevMode ? [{ debugName: "showCopy", transform: XToBoolean }] : [{ transform: XToBoolean }]));
42
42
  }
43
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
44
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.0", type: XHighlightProperty, isStandalone: true, selector: "x-highlight-property", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, highlightLines: { classPropertyName: "highlightLines", publicName: "highlightLines", isSignal: true, isRequired: false, transformFunction: null }, showCopy: { classPropertyName: "showCopy", publicName: "showCopy", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
43
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
44
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.4", type: XHighlightProperty, isStandalone: true, selector: "x-highlight-property", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, highlightLines: { classPropertyName: "highlightLines", publicName: "highlightLines", isSignal: true, isRequired: false, transformFunction: null }, showCopy: { classPropertyName: "showCopy", publicName: "showCopy", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightProperty, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightProperty, decorators: [{
47
47
  type: Component,
48
48
  args: [{ selector: `${XHighlightPrefix}-property`, template: '' }]
49
49
  }] });
@@ -54,10 +54,10 @@ class XHighlightService {
54
54
  this.isBrowser = isPlatformBrowser(this.platformId);
55
55
  this.prism = this.isBrowser ? window['Prism'] : null;
56
56
  }
57
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
58
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightService, providedIn: 'root' }); }
57
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
58
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightService, providedIn: 'root' }); }
59
59
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightService, decorators: [{
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightService, decorators: [{
61
61
  type: Injectable,
62
62
  args: [{ providedIn: 'root' }]
63
63
  }] });
@@ -67,8 +67,8 @@ class XHighlightComponent extends XHighlightProperty {
67
67
  super(...arguments);
68
68
  this.className = XHighlightPrefix;
69
69
  this.codeRef = viewChild.required('code');
70
- this.lineHeight = signal(1.375);
71
- this.iconCopy = signal('fto-copy');
70
+ this.lineHeight = signal(1.375, ...(ngDevMode ? [{ debugName: "lineHeight" }] : []));
71
+ this.iconCopy = signal('fto-copy', ...(ngDevMode ? [{ debugName: "iconCopy" }] : []));
72
72
  this.platformId = inject(PLATFORM_ID);
73
73
  this.isBrowser = isPlatformBrowser(this.platformId);
74
74
  this.sanitizer = inject(DomSanitizer);
@@ -95,7 +95,7 @@ class XHighlightComponent extends XHighlightProperty {
95
95
  this.createLineNumbers(lines) +
96
96
  this.createHighlightLines());
97
97
  }
98
- });
98
+ }, ...(ngDevMode ? [{ debugName: "display" }] : []));
99
99
  }
100
100
  createLineNumbers(lines) {
101
101
  let result = '';
@@ -127,10 +127,10 @@ class XHighlightComponent extends XHighlightProperty {
127
127
  this.iconCopy.set('fto-copy');
128
128
  });
129
129
  }
130
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
131
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.0", type: XHighlightComponent, isStandalone: true, selector: "x-highlight", host: { properties: { "class": "this.className" } }, viewQueries: [{ propertyName: "codeRef", first: true, predicate: ["code"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<pre>\r\n <code #code class=\"language-{{ type() }}\" [innerHTML]=\"display()\"></code>\r\n</pre>\r\n<div class=\"x-highlight-actions\">\r\n @if (showCopy()) {\r\n <x-button class=\"x-highlight-copy\" [icon]=\"iconCopy()\" onlyIcon flat (click)=\"onCopy()\"></x-button>\r\n }\r\n</div>\r\n", styles: [".x-highlight{margin:0;padding:0}.x-highlight{display:block;line-height:0;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);position:relative}.x-highlight>pre{display:flex;padding:1.5rem 1.5rem 1.5rem 3.5rem;margin:0;overflow:auto;background-color:var(--x-background);border-radius:var(--x-border-radius);counter-reset:line-number}.x-highlight>pre>code{position:relative;line-height:1.375rem;text-shadow:none;white-space:inherit;min-width:100%;color:var(--x-text-100)}.x-highlight>pre>code>span.line-numbers{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.5rem;width:3.5rem;letter-spacing:-1px;-webkit-user-select:none;user-select:none;color:var(--x-text-400)}.x-highlight>pre>code>span.line-numbers>span:before{border-right:var(--x-border-width) var(--x-border-style) var(--x-border);padding-right:.5rem;margin-right:var(--x-font-size);text-align:right;pointer-events:none;display:block;counter-increment:line-number;content:counter(line-number)}.x-highlight>pre>code>.line-highlight{position:absolute;opacity:.1;pointer-events:none;line-height:inherit;white-space:pre;width:calc(100% + 5rem);left:-3.5rem}.x-highlight>pre>code>.line-highlight.primary{background-color:var(--x-primary)}.x-highlight>pre>code>.line-highlight.success{background-color:var(--x-success)}.x-highlight>pre>code>.line-highlight.warning{background-color:var(--x-warning)}.x-highlight>pre>code>.line-highlight.danger{background-color:var(--x-danger)}.x-highlight>pre>code>.line-highlight.info{background-color:var(--x-info)}.x-highlight-actions{position:absolute;top:0;right:0}\n"], dependencies: [{ kind: "component", type: XButtonComponent, selector: "x-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
130
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
131
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.4", type: XHighlightComponent, isStandalone: true, selector: "x-highlight", host: { properties: { "class": "this.className" } }, viewQueries: [{ propertyName: "codeRef", first: true, predicate: ["code"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<pre>\r\n <code #code class=\"language-{{ type() }}\" [innerHTML]=\"display()\"></code>\r\n</pre>\r\n<div class=\"x-highlight-actions\">\r\n @if (showCopy()) {\r\n <x-button class=\"x-highlight-copy\" [icon]=\"iconCopy()\" onlyIcon flat (click)=\"onCopy()\"></x-button>\r\n }\r\n</div>\r\n", styles: [".x-highlight{margin:0;padding:0}.x-highlight{display:block;line-height:0;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);position:relative}.x-highlight>pre{display:flex;padding:1.5rem 1.5rem 1.5rem 3.5rem;margin:0;overflow:auto;background-color:var(--x-background);border-radius:var(--x-border-radius);counter-reset:line-number}.x-highlight>pre>code{position:relative;line-height:1.375rem;text-shadow:none;white-space:inherit;min-width:100%;color:var(--x-text-100)}.x-highlight>pre>code>span.line-numbers{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.5rem;width:3.5rem;letter-spacing:-1px;-webkit-user-select:none;user-select:none;color:var(--x-text-400)}.x-highlight>pre>code>span.line-numbers>span:before{border-right:var(--x-border-width) var(--x-border-style) var(--x-border);padding-right:.5rem;margin-right:var(--x-font-size);text-align:right;pointer-events:none;display:block;counter-increment:line-number;content:counter(line-number)}.x-highlight>pre>code>.line-highlight{position:absolute;opacity:.1;pointer-events:none;line-height:inherit;white-space:pre;width:calc(100% + 5rem);left:-3.5rem}.x-highlight>pre>code>.line-highlight.primary{background-color:var(--x-primary)}.x-highlight>pre>code>.line-highlight.success{background-color:var(--x-success)}.x-highlight>pre>code>.line-highlight.warning{background-color:var(--x-warning)}.x-highlight>pre>code>.line-highlight.danger{background-color:var(--x-danger)}.x-highlight>pre>code>.line-highlight.info{background-color:var(--x-info)}.x-highlight-actions{position:absolute;top:0;right:0}\n"], dependencies: [{ kind: "component", type: XButtonComponent, selector: "x-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
132
132
  }
133
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightComponent, decorators: [{
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightComponent, decorators: [{
134
134
  type: Component,
135
135
  args: [{ selector: `${XHighlightPrefix}`, imports: [XButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<pre>\r\n <code #code class=\"language-{{ type() }}\" [innerHTML]=\"display()\"></code>\r\n</pre>\r\n<div class=\"x-highlight-actions\">\r\n @if (showCopy()) {\r\n <x-button class=\"x-highlight-copy\" [icon]=\"iconCopy()\" onlyIcon flat (click)=\"onCopy()\"></x-button>\r\n }\r\n</div>\r\n", styles: [".x-highlight{margin:0;padding:0}.x-highlight{display:block;line-height:0;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);position:relative}.x-highlight>pre{display:flex;padding:1.5rem 1.5rem 1.5rem 3.5rem;margin:0;overflow:auto;background-color:var(--x-background);border-radius:var(--x-border-radius);counter-reset:line-number}.x-highlight>pre>code{position:relative;line-height:1.375rem;text-shadow:none;white-space:inherit;min-width:100%;color:var(--x-text-100)}.x-highlight>pre>code>span.line-numbers{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.5rem;width:3.5rem;letter-spacing:-1px;-webkit-user-select:none;user-select:none;color:var(--x-text-400)}.x-highlight>pre>code>span.line-numbers>span:before{border-right:var(--x-border-width) var(--x-border-style) var(--x-border);padding-right:.5rem;margin-right:var(--x-font-size);text-align:right;pointer-events:none;display:block;counter-increment:line-number;content:counter(line-number)}.x-highlight>pre>code>.line-highlight{position:absolute;opacity:.1;pointer-events:none;line-height:inherit;white-space:pre;width:calc(100% + 5rem);left:-3.5rem}.x-highlight>pre>code>.line-highlight.primary{background-color:var(--x-primary)}.x-highlight>pre>code>.line-highlight.success{background-color:var(--x-success)}.x-highlight>pre>code>.line-highlight.warning{background-color:var(--x-warning)}.x-highlight>pre>code>.line-highlight.danger{background-color:var(--x-danger)}.x-highlight>pre>code>.line-highlight.info{background-color:var(--x-info)}.x-highlight-actions{position:absolute;top:0;right:0}\n"] }]
136
136
  }], propDecorators: { className: [{
@@ -139,11 +139,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImpor
139
139
  }] } });
140
140
 
141
141
  class XHighlightModule {
142
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
143
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.0", ngImport: i0, type: XHighlightModule, imports: [XHighlightComponent], exports: [XHighlightComponent] }); }
144
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightModule, imports: [XHighlightComponent] }); }
142
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
143
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: XHighlightModule, imports: [XHighlightComponent], exports: [XHighlightComponent] }); }
144
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightModule, imports: [XHighlightComponent] }); }
145
145
  }
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XHighlightModule, decorators: [{
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XHighlightModule, decorators: [{
147
147
  type: NgModule,
148
148
  args: [{
149
149
  exports: [XHighlightComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-highlight.mjs","sources":["../../../../lib/ng-nest/ui/highlight/highlight.property.ts","../../../../lib/ng-nest/ui/highlight/highlight.service.ts","../../../../lib/ng-nest/ui/highlight/highlight.component.ts","../../../../lib/ng-nest/ui/highlight/highlight.component.html","../../../../lib/ng-nest/ui/highlight/highlight.module.ts","../../../../lib/ng-nest/ui/highlight/ng-nest-ui-highlight.ts"],"sourcesContent":["import { XPropertyFunction, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, input } from '@angular/core';\r\nimport type { XBoolean } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Highlight\r\n * @selector x-highlight\r\n * @decorator component\r\n */\r\nexport const XHighlightPrefix = 'x-highlight';\r\nconst X_HIGHLIGHT_CONFIG_NAME = 'highlight';\r\n\r\n/**\r\n * Highlight Property\r\n */\r\n@Component({ selector: `${XHighlightPrefix}-property`, template: '' })\r\nexport class XHighlightProperty extends XPropertyFunction(X_HIGHLIGHT_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 代码类型\r\n * @en_US Code type\r\n */\r\n readonly type = input<string>();\r\n /**\r\n * @zh_CN 数据\r\n * @en_US Data\r\n */\r\n readonly data = input<string>();\r\n /**\r\n * @zh_CN 高亮行数据\r\n * @en_US Highlight row data\r\n */\r\n readonly highlightLines = input<XHighlightLines>({});\r\n /**\r\n * @zh_CN 显示复制按钮\r\n * @en_US display copy\r\n */\r\n readonly showCopy = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 高亮行数据\r\n * 示例:{'danger': '1, 2, 4', 'primary': '7-10, 12, 15-20'}\r\n * @en_US Highlight row data\r\n * Example:{'danger': '1, 2, 4', 'primary': '7-10, 12, 15-20'}\r\n */\r\nexport interface XHighlightLines {\r\n /**\r\n * @zh_CN 主色\r\n * @en_US Primary\r\n */\r\n primary?: string;\r\n /**\r\n * @zh_CN 成功\r\n * @en_US Success\r\n */\r\n success?: string;\r\n /**\r\n * @zh_CN 警告\r\n * @en_US Warning\r\n */\r\n warning?: string;\r\n /**\r\n * @zh_CN 危险\r\n * @en_US Danger\r\n */\r\n danger?: string;\r\n /**\r\n * @zh_CN 信息\r\n * @en_US Info\r\n */\r\n info?: string;\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class XHighlightService {\r\n platformId = inject(PLATFORM_ID);\r\n isBrowser = isPlatformBrowser(this.platformId);\r\n prism = this.isBrowser ? (window as any)['Prism'] : null;\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n inject,\r\n PLATFORM_ID,\r\n signal,\r\n computed,\r\n HostBinding,\r\n viewChild\r\n} from '@angular/core';\r\nimport { XHighlightPrefix, XHighlightProperty } from './highlight.property';\r\nimport { XIsEmpty } from '@ng-nest/ui/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { delay, of } from 'rxjs';\r\nimport { XButtonComponent } from '@ng-nest/ui/button';\r\nimport { XHighlightService } from './highlight.service';\r\n\r\n@Component({\r\n selector: `${XHighlightPrefix}`,\r\n imports: [XButtonComponent],\r\n templateUrl: './highlight.component.html',\r\n styleUrls: ['./style/index.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XHighlightComponent extends XHighlightProperty {\r\n @HostBinding('class') className = XHighlightPrefix;\r\n codeRef = viewChild.required<ElementRef<HTMLElement>>('code');\r\n lineHeight = signal(1.375);\r\n iconCopy = signal('fto-copy');\r\n\r\n platformId = inject(PLATFORM_ID);\r\n isBrowser = isPlatformBrowser(this.platformId);\r\n private sanitizer = inject(DomSanitizer);\r\n private highlight = inject(XHighlightService);\r\n display = computed(() => {\r\n const type = this.type();\r\n let data = this.data();\r\n if (XIsEmpty(type)) return;\r\n if (XIsEmpty(data)) data = '';\r\n if (!this.highlight.prism && this.isBrowser) {\r\n console.warn(\r\n `${XHighlightPrefix}: [${type}] file are not supported, the prismjs plugin is used for highlight, so configure the introduction in angular.json.`\r\n );\r\n return this.sanitizer.bypassSecurityTrustHtml(data!);\r\n }\r\n const lines = data!.split(/\\n(?!$)/g);\r\n if (this.highlight.prism?.languages?.[type!]) {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.highlight.prism?.highlight(data, this.highlight.prism.languages[type!], type) +\r\n this.createLineNumbers(lines) +\r\n this.createHighlightLines()\r\n );\r\n } else {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.highlight.prism?.highlight(data, this.highlight.prism.languages['bash'], 'bash') +\r\n this.createLineNumbers(lines) +\r\n this.createHighlightLines()\r\n );\r\n }\r\n });\r\n\r\n createLineNumbers(lines: string[]) {\r\n let result = '';\r\n if (lines.length > 0) {\r\n result = `<span class=\"line-numbers\">${new Array(lines.length + 1).join('<span></span>')}</span>`;\r\n }\r\n return result;\r\n }\r\n\r\n createHighlightLines() {\r\n let result = '';\r\n const lines = this.highlightLines();\r\n for (const key in lines) {\r\n const spt = (lines as any)[key].split(',');\r\n for (const st of spt) {\r\n const sp = st.split('-');\r\n const top = this.lineHeight() * (Number(sp[0]) - 1);\r\n const height = this.lineHeight() * (sp.length === 2 ? Number(sp[1]) - Number(sp[0]) + 1 : 1);\r\n result += `<div class=\"line-highlight ${key}\" style=\"top: ${top}rem; height: ${height}rem\"></div>`;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async onCopy() {\r\n this.iconCopy.set('fto-check');\r\n await navigator.clipboard.writeText(this.data() as string);\r\n of(true)\r\n .pipe(delay(2000))\r\n .subscribe(() => {\r\n this.iconCopy.set('fto-copy');\r\n });\r\n }\r\n}\r\n","<pre>\r\n <code #code class=\"language-{{ type() }}\" [innerHTML]=\"display()\"></code>\r\n</pre>\r\n<div class=\"x-highlight-actions\">\r\n @if (showCopy()) {\r\n <x-button class=\"x-highlight-copy\" [icon]=\"iconCopy()\" onlyIcon flat (click)=\"onCopy()\"></x-button>\r\n }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XHighlightComponent } from './highlight.component';\r\n\r\n@NgModule({\r\n exports: [XHighlightComponent],\r\n imports: [XHighlightComponent]\r\n})\r\nexport class XHighlightModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-highlight.mjs","sources":["../../../../lib/ng-nest/ui/highlight/highlight.property.ts","../../../../lib/ng-nest/ui/highlight/highlight.service.ts","../../../../lib/ng-nest/ui/highlight/highlight.component.ts","../../../../lib/ng-nest/ui/highlight/highlight.component.html","../../../../lib/ng-nest/ui/highlight/highlight.module.ts","../../../../lib/ng-nest/ui/highlight/ng-nest-ui-highlight.ts"],"sourcesContent":["import { XPropertyFunction, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, input } from '@angular/core';\r\nimport type { XBoolean } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Highlight\r\n * @selector x-highlight\r\n * @decorator component\r\n */\r\nexport const XHighlightPrefix = 'x-highlight';\r\nconst X_HIGHLIGHT_CONFIG_NAME = 'highlight';\r\n\r\n/**\r\n * Highlight Property\r\n */\r\n@Component({ selector: `${XHighlightPrefix}-property`, template: '' })\r\nexport class XHighlightProperty extends XPropertyFunction(X_HIGHLIGHT_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 代码类型\r\n * @en_US Code type\r\n */\r\n readonly type = input<string>();\r\n /**\r\n * @zh_CN 数据\r\n * @en_US Data\r\n */\r\n readonly data = input<string>();\r\n /**\r\n * @zh_CN 高亮行数据\r\n * @en_US Highlight row data\r\n */\r\n readonly highlightLines = input<XHighlightLines>({});\r\n /**\r\n * @zh_CN 显示复制按钮\r\n * @en_US display copy\r\n */\r\n readonly showCopy = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 高亮行数据\r\n * 示例:{'danger': '1, 2, 4', 'primary': '7-10, 12, 15-20'}\r\n * @en_US Highlight row data\r\n * Example:{'danger': '1, 2, 4', 'primary': '7-10, 12, 15-20'}\r\n */\r\nexport interface XHighlightLines {\r\n /**\r\n * @zh_CN 主色\r\n * @en_US Primary\r\n */\r\n primary?: string;\r\n /**\r\n * @zh_CN 成功\r\n * @en_US Success\r\n */\r\n success?: string;\r\n /**\r\n * @zh_CN 警告\r\n * @en_US Warning\r\n */\r\n warning?: string;\r\n /**\r\n * @zh_CN 危险\r\n * @en_US Danger\r\n */\r\n danger?: string;\r\n /**\r\n * @zh_CN 信息\r\n * @en_US Info\r\n */\r\n info?: string;\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class XHighlightService {\r\n platformId = inject(PLATFORM_ID);\r\n isBrowser = isPlatformBrowser(this.platformId);\r\n prism = this.isBrowser ? (window as any)['Prism'] : null;\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n inject,\r\n PLATFORM_ID,\r\n signal,\r\n computed,\r\n HostBinding,\r\n viewChild\r\n} from '@angular/core';\r\nimport { XHighlightPrefix, XHighlightProperty } from './highlight.property';\r\nimport { XIsEmpty } from '@ng-nest/ui/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { delay, of } from 'rxjs';\r\nimport { XButtonComponent } from '@ng-nest/ui/button';\r\nimport { XHighlightService } from './highlight.service';\r\n\r\n@Component({\r\n selector: `${XHighlightPrefix}`,\r\n imports: [XButtonComponent],\r\n templateUrl: './highlight.component.html',\r\n styleUrls: ['./style/index.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XHighlightComponent extends XHighlightProperty {\r\n @HostBinding('class') className = XHighlightPrefix;\r\n codeRef = viewChild.required<ElementRef<HTMLElement>>('code');\r\n lineHeight = signal(1.375);\r\n iconCopy = signal('fto-copy');\r\n\r\n platformId = inject(PLATFORM_ID);\r\n isBrowser = isPlatformBrowser(this.platformId);\r\n private sanitizer = inject(DomSanitizer);\r\n private highlight = inject(XHighlightService);\r\n display = computed(() => {\r\n const type = this.type();\r\n let data = this.data();\r\n if (XIsEmpty(type)) return;\r\n if (XIsEmpty(data)) data = '';\r\n if (!this.highlight.prism && this.isBrowser) {\r\n console.warn(\r\n `${XHighlightPrefix}: [${type}] file are not supported, the prismjs plugin is used for highlight, so configure the introduction in angular.json.`\r\n );\r\n return this.sanitizer.bypassSecurityTrustHtml(data!);\r\n }\r\n const lines = data!.split(/\\n(?!$)/g);\r\n if (this.highlight.prism?.languages?.[type!]) {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.highlight.prism?.highlight(data, this.highlight.prism.languages[type!], type) +\r\n this.createLineNumbers(lines) +\r\n this.createHighlightLines()\r\n );\r\n } else {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.highlight.prism?.highlight(data, this.highlight.prism.languages['bash'], 'bash') +\r\n this.createLineNumbers(lines) +\r\n this.createHighlightLines()\r\n );\r\n }\r\n });\r\n\r\n createLineNumbers(lines: string[]) {\r\n let result = '';\r\n if (lines.length > 0) {\r\n result = `<span class=\"line-numbers\">${new Array(lines.length + 1).join('<span></span>')}</span>`;\r\n }\r\n return result;\r\n }\r\n\r\n createHighlightLines() {\r\n let result = '';\r\n const lines = this.highlightLines();\r\n for (const key in lines) {\r\n const spt = (lines as any)[key].split(',');\r\n for (const st of spt) {\r\n const sp = st.split('-');\r\n const top = this.lineHeight() * (Number(sp[0]) - 1);\r\n const height = this.lineHeight() * (sp.length === 2 ? Number(sp[1]) - Number(sp[0]) + 1 : 1);\r\n result += `<div class=\"line-highlight ${key}\" style=\"top: ${top}rem; height: ${height}rem\"></div>`;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async onCopy() {\r\n this.iconCopy.set('fto-check');\r\n await navigator.clipboard.writeText(this.data() as string);\r\n of(true)\r\n .pipe(delay(2000))\r\n .subscribe(() => {\r\n this.iconCopy.set('fto-copy');\r\n });\r\n }\r\n}\r\n","<pre>\r\n <code #code class=\"language-{{ type() }}\" [innerHTML]=\"display()\"></code>\r\n</pre>\r\n<div class=\"x-highlight-actions\">\r\n @if (showCopy()) {\r\n <x-button class=\"x-highlight-copy\" [icon]=\"iconCopy()\" onlyIcon flat (click)=\"onCopy()\"></x-button>\r\n }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XHighlightComponent } from './highlight.component';\r\n\r\n@NgModule({\r\n exports: [XHighlightComponent],\r\n imports: [XHighlightComponent]\r\n})\r\nexport class XHighlightModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -233,10 +233,10 @@ class XI18nService {
233
233
  }
234
234
  return index === depth ? res : null;
235
235
  }
236
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
237
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nService, providedIn: 'root' }); }
236
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
237
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nService, providedIn: 'root' }); }
238
238
  }
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nService, decorators: [{
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nService, decorators: [{
240
240
  type: Injectable,
241
241
  args: [{
242
242
  providedIn: 'root'
@@ -256,10 +256,10 @@ class XI18nPipe {
256
256
  }
257
257
  return this.catchContent;
258
258
  }
259
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nPipe, deps: [{ token: XI18nService }], target: i0.ɵɵFactoryTarget.Pipe }); }
260
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.0", ngImport: i0, type: XI18nPipe, isStandalone: true, name: "xI18n", pure: false }); }
259
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nPipe, deps: [{ token: XI18nService }], target: i0.ɵɵFactoryTarget.Pipe }); }
260
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: XI18nPipe, isStandalone: true, name: "xI18n", pure: false }); }
261
261
  }
262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nPipe, decorators: [{
262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nPipe, decorators: [{
263
263
  type: Pipe,
264
264
  args: [{
265
265
  name: 'xI18n',
@@ -269,7 +269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImpor
269
269
 
270
270
  class XI18nDirective {
271
271
  constructor() {
272
- this.path = input('', { alias: 'x-i18n' });
272
+ this.path = input('', ...(ngDevMode ? [{ debugName: "path", alias: 'x-i18n' }] : [{ alias: 'x-i18n' }]));
273
273
  this.locale = inject(XI18nService);
274
274
  this.elementRef = inject((ElementRef));
275
275
  this.localeChanged = toSignal(this.locale.localeChange);
@@ -278,13 +278,13 @@ class XI18nDirective {
278
278
  return this.locale.translate(this.path());
279
279
  }
280
280
  return '';
281
- });
281
+ }, ...(ngDevMode ? [{ debugName: "content" }] : []));
282
282
  effect(() => (this.elementRef.nativeElement.innerText = this.content()));
283
283
  }
284
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
285
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.0", type: XI18nDirective, isStandalone: true, selector: "[x-i18n]", inputs: { path: { classPropertyName: "path", publicName: "x-i18n", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
284
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
285
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.4", type: XI18nDirective, isStandalone: true, selector: "[x-i18n]", inputs: { path: { classPropertyName: "path", publicName: "x-i18n", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
286
286
  }
287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nDirective, decorators: [{
287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nDirective, decorators: [{
288
288
  type: Directive,
289
289
  args: [{
290
290
  selector: '[x-i18n]'
@@ -292,11 +292,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImpor
292
292
  }], ctorParameters: () => [] });
293
293
 
294
294
  class XI18nModule {
295
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
296
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.0", ngImport: i0, type: XI18nModule, imports: [XI18nPipe, XI18nDirective], exports: [XI18nPipe, XI18nDirective] }); }
297
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nModule }); }
295
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
296
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: XI18nModule, imports: [XI18nPipe, XI18nDirective], exports: [XI18nPipe, XI18nDirective] }); }
297
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nModule }); }
298
298
  }
299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: XI18nModule, decorators: [{
299
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: XI18nModule, decorators: [{
300
300
  type: NgModule,
301
301
  args: [{
302
302
  imports: [XI18nPipe, XI18nDirective],