@ng-nest/ui 19.0.0 → 19.0.2

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 (100) hide show
  1. package/anchor/anchor.component.d.ts +3 -1
  2. package/api/api.component.d.ts +1 -1
  3. package/auto-complete/auto-complete.component.d.ts +1 -3
  4. package/auto-complete/auto-complete.property.d.ts +1 -1
  5. package/base-form/base-form.component.d.ts +1 -1
  6. package/base-form/base-form.property.d.ts +0 -104
  7. package/carousel/carousel-panel.component.d.ts +1 -1
  8. package/cascade/cascade.component.d.ts +1 -2
  9. package/cascade/cascade.property.d.ts +1 -1
  10. package/checkbox/checkbox.property.d.ts +6 -1
  11. package/collapse/collapse.component.d.ts +1 -3
  12. package/collapse/collapse.property.d.ts +1 -15
  13. package/color-picker/color-picker.component.d.ts +0 -1
  14. package/color-picker/color-picker.property.d.ts +1 -1
  15. package/core/config/config.d.ts +1 -0
  16. package/date-picker/date-picker.component.d.ts +0 -1
  17. package/date-picker/date-picker.property.d.ts +2 -2
  18. package/dialog/dialog-portal.component.d.ts +5 -3
  19. package/dropdown/dropdown.component.d.ts +0 -1
  20. package/fesm2022/ng-nest-ui-anchor.mjs +11 -7
  21. package/fesm2022/ng-nest-ui-anchor.mjs.map +1 -1
  22. package/fesm2022/ng-nest-ui-api.mjs +4 -4
  23. package/fesm2022/ng-nest-ui-api.mjs.map +1 -1
  24. package/fesm2022/ng-nest-ui-auto-complete.mjs +14 -23
  25. package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
  26. package/fesm2022/ng-nest-ui-back-top.mjs +1 -1
  27. package/fesm2022/ng-nest-ui-back-top.mjs.map +1 -1
  28. package/fesm2022/ng-nest-ui-base-form.mjs +23 -120
  29. package/fesm2022/ng-nest-ui-base-form.mjs.map +1 -1
  30. package/fesm2022/ng-nest-ui-calendar.mjs +1 -6
  31. package/fesm2022/ng-nest-ui-calendar.mjs.map +1 -1
  32. package/fesm2022/ng-nest-ui-carousel.mjs +3 -11
  33. package/fesm2022/ng-nest-ui-carousel.mjs.map +1 -1
  34. package/fesm2022/ng-nest-ui-cascade.mjs +1 -7
  35. package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
  36. package/fesm2022/ng-nest-ui-checkbox.mjs +2 -2
  37. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  38. package/fesm2022/ng-nest-ui-collapse.mjs +6 -28
  39. package/fesm2022/ng-nest-ui-collapse.mjs.map +1 -1
  40. package/fesm2022/ng-nest-ui-color-picker.mjs +0 -3
  41. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  42. package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
  43. package/fesm2022/ng-nest-ui-date-picker.mjs +0 -3
  44. package/fesm2022/ng-nest-ui-date-picker.mjs.map +1 -1
  45. package/fesm2022/ng-nest-ui-dialog.mjs +11 -5
  46. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  47. package/fesm2022/ng-nest-ui-dropdown.mjs +0 -3
  48. package/fesm2022/ng-nest-ui-dropdown.mjs.map +1 -1
  49. package/fesm2022/ng-nest-ui-image.mjs +2 -2
  50. package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
  51. package/fesm2022/ng-nest-ui-select.mjs +4 -6
  52. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  53. package/fesm2022/ng-nest-ui-table.mjs +28 -12
  54. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  55. package/fesm2022/ng-nest-ui-textarea.mjs +2 -2
  56. package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
  57. package/fesm2022/ng-nest-ui-time-picker.mjs +0 -3
  58. package/fesm2022/ng-nest-ui-time-picker.mjs.map +1 -1
  59. package/fesm2022/ng-nest-ui-timeline.mjs +1 -11
  60. package/fesm2022/ng-nest-ui-timeline.mjs.map +1 -1
  61. package/fesm2022/ng-nest-ui-tooltip.mjs +30 -19
  62. package/fesm2022/ng-nest-ui-tooltip.mjs.map +1 -1
  63. package/fesm2022/ng-nest-ui-transfer.mjs +8 -3
  64. package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
  65. package/fesm2022/ng-nest-ui-tree-file.mjs +2 -2
  66. package/fesm2022/ng-nest-ui-tree-file.mjs.map +1 -1
  67. package/fesm2022/ng-nest-ui-tree-select.mjs +93 -53
  68. package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
  69. package/fesm2022/ng-nest-ui-tree.mjs +10 -5
  70. package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
  71. package/fesm2022/ng-nest-ui-upload.mjs +3 -6
  72. package/fesm2022/ng-nest-ui-upload.mjs.map +1 -1
  73. package/find/find.property.d.ts +1 -1
  74. package/form/form.property.d.ts +1 -1
  75. package/input/input.property.d.ts +1 -1
  76. package/input-number/input-number.property.d.ts +1 -1
  77. package/list/list.property.d.ts +1 -1
  78. package/package.json +61 -61
  79. package/radio/radio.property.d.ts +1 -1
  80. package/rate/rate.property.d.ts +1 -1
  81. package/select/select.component.d.ts +0 -1
  82. package/select/select.property.d.ts +1 -1
  83. package/slider-select/slider-select.property.d.ts +1 -1
  84. package/switch/switch.property.d.ts +1 -1
  85. package/table/table-body.component.d.ts +2 -0
  86. package/table/table.component.d.ts +2 -2
  87. package/table/table.property.d.ts +12 -1
  88. package/textarea/textarea.property.d.ts +1 -1
  89. package/theme/theme.property.d.ts +1 -1
  90. package/time-picker/time-picker.component.d.ts +0 -1
  91. package/time-picker/time-picker.property.d.ts +1 -1
  92. package/timeline/timeline.property.d.ts +1 -11
  93. package/tooltip/tooltip.directive.d.ts +5 -3
  94. package/transfer/transfer.property.d.ts +1 -1
  95. package/tree/tree.property.d.ts +6 -1
  96. package/tree-select/tree-select-portal.component.d.ts +1 -4
  97. package/tree-select/tree-select.component.d.ts +13 -6
  98. package/tree-select/tree-select.property.d.ts +2 -12
  99. package/upload/upload.component.d.ts +0 -1
  100. package/upload/upload.property.d.ts +1 -1
@@ -9,7 +9,6 @@ import { takeUntil, filter, debounceTime, distinctUntilChanged } from 'rxjs/oper
9
9
  import { XListComponent } from '@ng-nest/ui/list';
10
10
  import { Overlay } from '@angular/cdk/overlay';
11
11
  import { DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER, ESCAPE } from '@angular/cdk/keycodes';
12
- import { DOCUMENT } from '@angular/common';
13
12
  import * as i1 from '@angular/forms';
14
13
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
15
14
  import { toSignal } from '@angular/core/rxjs-interop';
@@ -272,7 +271,6 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
272
271
  this.closeSubject = new Subject();
273
272
  this.keydownSubject = new Subject();
274
273
  this.unSubject = new Subject();
275
- this.document = inject(DOCUMENT);
276
274
  this.portalService = inject(XPortalService);
277
275
  this.viewContainerRef = inject(ViewContainerRef);
278
276
  this.overlay = inject(Overlay);
@@ -333,8 +331,6 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
333
331
  });
334
332
  }
335
333
  setParantScroll() {
336
- if (!this.document)
337
- return;
338
334
  const parents = XParents(this.elementRef.nativeElement);
339
335
  let firstScroll = null;
340
336
  for (let item of parents) {
@@ -360,25 +356,20 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
360
356
  return this.portalOverlayRef()?.hasAttached();
361
357
  }
362
358
  closePortal() {
363
- if (this.portalAttached()) {
364
- this.portalOverlayRef()?.detach();
365
- this.active.set(false);
366
- if (this.onlySelect()) {
367
- if (!this.nodes()
368
- .map((x) => x.label)
369
- .includes(this.value())) {
370
- this.value.set('');
371
- if (this.onChange)
372
- this.onChange(this.value());
373
- this.inputChange.next(this.value());
374
- }
375
- }
376
- return true;
359
+ if (!this.portalAttached())
360
+ return;
361
+ this.portalOverlayRef()?.detach();
362
+ this.active.set(false);
363
+ if (!this.onlySelect())
364
+ return;
365
+ if (!this.nodes()
366
+ .map((x) => x.label)
367
+ .includes(this.value())) {
368
+ this.value.set('');
369
+ if (this.onChange)
370
+ this.onChange(this.value());
371
+ this.inputChange.next(this.value());
377
372
  }
378
- return false;
379
- }
380
- destroyPortal() {
381
- this.portalOverlayRef()?.dispose();
382
373
  }
383
374
  showPortal() {
384
375
  if (XIsEmpty(this.value()) || this.disabledComputed() || this.iconSpin() || this.animating())
@@ -524,7 +515,7 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
524
515
  }
525
516
  }
526
517
  }
527
- if (!this.onlySelect) {
518
+ if (!this.onlySelect()) {
528
519
  this.onChange && this.onChange(value);
529
520
  }
530
521
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-auto-complete.mjs","sources":["../../../../lib/ng-nest/ui/auto-complete/auto-complete.property.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.module.ts","../../../../lib/ng-nest/ui/auto-complete/ng-nest-ui-auto-complete.ts"],"sourcesContent":["import {\r\n XParentIdentityProperty,\r\n XData,\r\n XPositionTopBottom,\r\n XSize,\r\n XBoolean,\r\n XAlign,\r\n XJustify,\r\n XDirection,\r\n XTemplate,\r\n XToNumber,\r\n XNumber,\r\n XToBoolean,\r\n XToCssPixelValue\r\n} from '@ng-nest/ui/core';\r\nimport { Component, TemplateRef, input, model, output } from '@angular/core';\r\nimport { XFormControlFunction, XFormOption } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * AutoComplete\r\n * @selector x-auto-complete\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePrefix = 'x-auto-complete';\r\nconst X_AUTOCOMPLETE_CONFIG_NAME = 'autoComplete';\r\n\r\n/**\r\n * AutoComplete Property\r\n */\r\n@Component({ selector: `${XAutoCompletePrefix}-property`, template: '' })\r\nexport class XAutoCompleteProperty extends XFormControlFunction(X_AUTOCOMPLETE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n readonly data = input<XData<XAutoCompleteNode>>([]);\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n readonly debounceTime = input<number, XNumber>(this.config?.debounceTime ?? 200, { transform: XToNumber });\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n readonly placement = input<XPositionTopBottom>(this.config?.placement ?? 'bottom');\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n readonly nodeTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 显示边框\r\n * @en_US Display Border\r\n */\r\n readonly bordered = input<boolean, XBoolean>(this.config?.bordered ?? true, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 匹配区分大小写\r\n * @en_US Case-sensitive\r\n */\r\n readonly caseSensitive = input<boolean, XBoolean>(this.config?.caseSensitive ?? true, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 只能是选择的值\r\n * @en_US Can only be the value of choice\r\n */\r\n readonly onlySelect = input<boolean, XBoolean>(this.config?.onlySelect ?? false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n override readonly size = input<XSize>(this.config?.size ?? 'medium');\r\n /**\r\n * @zh_CN 输入框点击样式\r\n * @en_US Input pointer\r\n */\r\n override readonly pointer = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 标签\r\n * @en_US Label\r\n */\r\n override readonly label = input<string>('');\r\n /**\r\n * @zh_CN 标签宽度\r\n * @en_US Label width\r\n */\r\n override readonly labelWidth = input<string, XNumber>('', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 标签文字对齐方式\r\n * @en_US Label text alignment method\r\n */\r\n override readonly labelAlign = input<XAlign>('start');\r\n /**\r\n * @zh_CN flex 布局下的子元素水平排列方式\r\n * @en_US The level of sub-element level arrangement under flex layout\r\n */\r\n override readonly justify = input<XJustify>('start');\r\n /**\r\n * @zh_CN flex 布局下的子元素垂直排列方式\r\n * @en_US sub-element vertical arrangement method under flex layout\r\n */\r\n override readonly align = input<XAlign>('start');\r\n /**\r\n * @zh_CN flex 布局下的子元素排列方向\r\n * @en_US The direction of the sub-element arrangement under flex layout\r\n */\r\n override readonly direction = input<XDirection>('column');\r\n /**\r\n * @zh_CN 输入提示信息\r\n * @en_US Enter prompt information\r\n */\r\n override readonly placeholder = input<string | string[]>('');\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 必填\r\n * @en_US Required\r\n */\r\n override readonly required = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Readonly\r\n */\r\n override readonly readonly = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 值模板\r\n * @en_US Node template\r\n */\r\n override readonly valueTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 值模板参数\r\n * @en_US Node template\r\n */\r\n override readonly valueTplContext = input();\r\n /**\r\n * @zh_CN 前置标签\r\n * @en_US Before label\r\n */\r\n override readonly before = input<XTemplate>();\r\n /**\r\n * @zh_CN 后置标签\r\n * @en_US After label\r\n */\r\n override readonly after = input<XTemplate>();\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular verification rules\r\n */\r\n override readonly pattern = input<RegExp | RegExp[] | any>(null);\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verify not pass the prompt text\r\n */\r\n override readonly message = input<string | string[]>([]);\r\n /**\r\n * @zh_CN 激活状态\r\n * @en_US Activation state\r\n */\r\n override readonly active = model<boolean>(false);\r\n /**\r\n * @zh_CN 输入验证函数\r\n * @en_US Enter the verification function\r\n */\r\n override readonly inputValidator = input<(value: any) => boolean>();\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n readonly nodeEmit = output<XAutoCompleteNode>();\r\n}\r\n\r\n/**\r\n * AutoComplete Option\r\n */\r\nexport interface XAutoCompleteOption extends XFormOption {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n data?: XData<XAutoCompleteNode>;\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n debounceTime?: number;\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n placement?: XPositionTopBottom;\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n nodeTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 显示边框\r\n * @en_US Display Border\r\n */\r\n bordered?: boolean;\r\n /**\r\n * @zh_CN 匹配区分大小写\r\n * @en_US Case-sensitive\r\n */\r\n caseSensitive?: boolean;\r\n /**\r\n * @zh_CN 只能是选择的值\r\n * @en_US Can only be the value of choice\r\n */\r\n onlySelect?: boolean;\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n size?: XSize;\r\n /**\r\n * @zh_CN 输入框点击样式\r\n * @en_US Input pointer\r\n */\r\n pointer?: boolean;\r\n /**\r\n * @zh_CN 标签\r\n * @en_US Label\r\n */\r\n label?: string;\r\n /**\r\n * @zh_CN 标签宽度\r\n * @en_US Label width\r\n */\r\n labelWidth?: string;\r\n /**\r\n * @zh_CN 标签文字对齐方式\r\n * @en_US Label text alignment method\r\n */\r\n labelAlign?: XAlign;\r\n /**\r\n * @zh_CN flex 布局下的子元素水平排列方式\r\n * @en_US The level of sub-element level arrangement under flex layout\r\n */\r\n justify?: XJustify;\r\n /**\r\n * @zh_CN flex 布局下的子元素垂直排列方式\r\n * @en_US sub-element vertical arrangement method under flex layout\r\n */\r\n align?: XAlign;\r\n /**\r\n * @zh_CN flex 布局下的子元素排列方向\r\n * @en_US The direction of the sub-element arrangement under flex layout\r\n */\r\n direction?: XDirection;\r\n /**\r\n * @zh_CN 输入提示信息\r\n * @en_US Enter prompt information\r\n */\r\n placeholder?: string;\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 Required\r\n */\r\n required?: boolean;\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Readonly\r\n */\r\n readonly?: boolean;\r\n /**\r\n * @zh_CN 值模板\r\n * @en_US Node template\r\n */\r\n valueTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 值模板参数\r\n * @en_US Node template\r\n */\r\n valueTplContext?: any;\r\n /**\r\n * @zh_CN 前置标签\r\n * @en_US Before label\r\n */\r\n before?: XTemplate;\r\n /**\r\n * @zh_CN 后置标签\r\n * @en_US After label\r\n */\r\n after?: XTemplate;\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular verification rules\r\n */\r\n pattern?: RegExp | RegExp[];\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verify not pass the prompt text\r\n */\r\n message?: string | string[];\r\n /**\r\n * @zh_CN 激活状态\r\n * @en_US Activation state\r\n */\r\n active?: boolean;\r\n /**\r\n * @zh_CN 输入验证函数\r\n * @en_US Enter the verification function\r\n */\r\n inputValidator?: (value: any) => boolean;\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n nodeEmit?: (node: XAutoCompleteNode) => void;\r\n}\r\n\r\n/**\r\n * @zh_CN AutoComplete 数据对象\r\n * @en_US AutoComplete data object\r\n */\r\nexport interface XAutoCompleteNode extends XParentIdentityProperty<XAutoCompleteNode> {}\r\n\r\n/**\r\n * AutoComplete Portal\r\n * @selector x-auto-complete-portal\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePortalPrefix = 'x-auto-complete-portal';\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnInit,\r\n HostBinding,\r\n HostListener,\r\n TemplateRef,\r\n input,\r\n viewChild,\r\n signal,\r\n model,\r\n output,\r\n DestroyRef,\r\n inject\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompletePortalPrefix } from './auto-complete.property';\r\nimport { Subject } from 'rxjs';\r\nimport { XConnectBaseAnimation, XPositionTopBottom } from '@ng-nest/ui/core';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { XListComponent } from '@ng-nest/ui/list';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePortalPrefix}`,\r\n imports: [XListComponent],\r\n templateUrl: './auto-complete-portal.component.html',\r\n styleUrls: ['./auto-complete-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XConnectBaseAnimation]\r\n})\r\nexport class XAutoCompletePortalComponent implements OnInit {\r\n @HostBinding('@x-connect-base-animation') public get getPlacement() {\r\n return this.placement();\r\n }\r\n @HostListener('@x-connect-base-animation.done', ['$event']) done() {\r\n if (this.destroy()) return;\r\n this.animating.emit(false);\r\n }\r\n @HostListener('@x-connect-base-animation.start', ['$event']) start() {\r\n if (this.destroy()) return;\r\n this.animating.emit(true);\r\n }\r\n list = viewChild.required('list', { read: XListComponent });\r\n\r\n data = input<XAutoCompleteNode[]>();\r\n value = input<any>();\r\n placement = input<XPositionTopBottom>();\r\n nodeTpl = input<TemplateRef<any>>();\r\n inputCom = input<XInputComponent>();\r\n keywordText = model<string>('');\r\n caseSensitive = input<boolean>(false);\r\n animating = output<boolean>();\r\n nodeClick = output<XAutoCompleteNode>();\r\n closeSubject!: Subject<void>;\r\n keydownSubject!: Subject<KeyboardEvent>;\r\n active = signal(-1);\r\n destroy = signal(false);\r\n private unSubject = new Subject<void>();\r\n private destroyRef = inject(DestroyRef);\r\n\r\n ngOnInit(): void {\r\n this.closeSubject.pipe(takeUntil(this.unSubject)).subscribe(() => {\r\n this.list().setUnActive(this.active());\r\n });\r\n this.keydownSubject.pipe(takeUntil(this.unSubject)).subscribe((x) => {\r\n this.list().keydown(x);\r\n });\r\n this.destroyRef.onDestroy(() => {\r\n this.destroy.set(true);\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n });\r\n }\r\n\r\n stopPropagation(event: Event): void {\r\n event.stopPropagation();\r\n }\r\n\r\n onNodeClick(node: XAutoCompleteNode) {\r\n this.keywordText.set(node.label);\r\n this.nodeClick.emit(node);\r\n }\r\n\r\n onActive(num: number) {\r\n this.active.set(num);\r\n }\r\n\r\n onTabOut() {\r\n this.closeSubject.next();\r\n }\r\n}\r\n","<div\r\n #autoCompletePortal\r\n class=\"x-auto-complete-portal\"\r\n tabindex=\"-1\"\r\n (click)=\"inputCom()?.inputFocus('focus'); stopPropagation($event)\"\r\n>\r\n <x-list\r\n #list\r\n [data]=\"data()!\"\r\n (nodeClick)=\"onNodeClick($event)\"\r\n (keyManagerChange)=\"onActive($event)\"\r\n (keyManagerTabOut)=\"onTabOut()\"\r\n [nodeTpl]=\"nodeTpl()\"\r\n [scrollElement]=\"autoCompletePortal\"\r\n [keywordText]=\"keywordText()\"\r\n [caseSensitive]=\"caseSensitive()\"\r\n [inPortal]=\"true\"\r\n ></x-list>\r\n</div>\r\n","import { BehaviorSubject, Subject, fromEvent } from 'rxjs';\r\nimport {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n SimpleChanges,\r\n OnChanges,\r\n ViewContainerRef,\r\n inject,\r\n signal,\r\n viewChild,\r\n ComponentRef,\r\n effect,\r\n computed\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompleteProperty, XAutoCompletePrefix } from './auto-complete.property';\r\nimport {\r\n XIsEmpty,\r\n XIsObservable,\r\n XIsChange,\r\n XSetData,\r\n XPositionTopBottom,\r\n XIsFunction,\r\n XParents,\r\n XPlacement\r\n} from '@ng-nest/ui/core';\r\nimport { XPortalService, XPortalConnectedPosition } from '@ng-nest/ui/portal';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XAutoCompletePortalComponent } from './auto-complete-portal.component';\r\nimport {\r\n Overlay,\r\n FlexibleConnectedPositionStrategy,\r\n ConnectedOverlayPositionChange,\r\n OverlayConfig,\r\n OverlayRef\r\n} from '@angular/cdk/overlay';\r\nimport { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\r\nimport { DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER, ESCAPE } from '@angular/cdk/keycodes';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePrefix}`,\r\n imports: [FormsModule, ReactiveFormsModule, XInputComponent],\r\n templateUrl: './auto-complete.component.html',\r\n styleUrls: ['./auto-complete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XAutoCompleteComponent)]\r\n})\r\nexport class XAutoCompleteComponent extends XAutoCompleteProperty implements OnInit, OnChanges {\r\n inputCom = viewChild.required('inputCom', { read: XInputComponent });\r\n\r\n nodes = signal<XAutoCompleteNode[]>([]);\r\n searchNodes = signal<XAutoCompleteNode[]>([]);\r\n icon = signal('');\r\n iconSpin = signal(false);\r\n animating = signal(false);\r\n\r\n valueTplContextSignal = signal<{ $node: any; $isValue: boolean }>({ $node: null, $isValue: true });\r\n valueTplContextComputed = computed(() => {\r\n return this.valueTplContext() ? this.valueTplContext() : this.valueTplContextSignal();\r\n });\r\n\r\n inputChange = new BehaviorSubject<any>(null);\r\n closeSubject: Subject<void> = new Subject();\r\n keydownSubject: Subject<KeyboardEvent> = new Subject();\r\n private unSubject = new Subject<void>();\r\n private document = inject(DOCUMENT);\r\n private portalService = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private overlay = inject(Overlay);\r\n private elementRef = inject(ElementRef);\r\n\r\n private realPlacement = signal<XPlacement | null>(null);\r\n portalComponent = signal<ComponentRef<XAutoCompletePortalComponent> | null>(null);\r\n portalOverlayRef = signal<OverlayRef | null>(null);\r\n inputChanged = toSignal(this.inputChange.pipe(filter((x) => x !== null)));\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.portalComponent()?.setInput('value', this.value()));\r\n effect(() => this.portalComponent()?.setInput('placement', this.realPlacement()));\r\n effect(() => this.portalComponent()?.setInput('data', this.searchNodes()));\r\n effect(() => this.portalComponent()?.setInput('nodeTpl', this.nodeTpl()));\r\n effect(() => this.portalComponent()?.setInput('caseSensitive', this.caseSensitive()));\r\n effect(() => this.portalComponent()?.setInput('inputCom', this.inputCom()));\r\n effect(() => this.portalComponent()?.setInput('keywordText', this.inputChanged()));\r\n }\r\n\r\n ngOnInit() {\r\n this.setSubject();\r\n this.setParantScroll();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { data } = changes;\r\n XIsChange(data) && this.setData();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setPortal();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n setData() {\r\n if (XIsObservable(this.data()) || XIsFunction(this.data())) return;\r\n XSetData<XAutoCompleteNode>(this.data(), this.unSubject).subscribe((x) => {\r\n this.nodes.set(x);\r\n this.searchNodes.set(x);\r\n this.setPortal();\r\n });\r\n }\r\n\r\n setSubject() {\r\n this.closeSubject.pipe(takeUntil(this.unSubject)).subscribe(() => {\r\n this.closePortal();\r\n });\r\n this.inputChange\r\n .pipe(\r\n filter((x) => x !== null),\r\n debounceTime(this.debounceTime() as number),\r\n distinctUntilChanged(),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe((x) => {\r\n this.modelChange(x);\r\n });\r\n this.keydownSubject.pipe(takeUntil(this.unSubject)).subscribe((x) => {\r\n const keyCode = x.keyCode;\r\n if (!this.portalAttached() && [DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER].includes(keyCode)) {\r\n this.inputChange.next(this.value());\r\n }\r\n if (this.portalAttached() && [ESCAPE].includes(keyCode)) {\r\n this.closeSubject.next();\r\n }\r\n });\r\n }\r\n\r\n setParantScroll() {\r\n if (!this.document) return;\r\n const parents = XParents(this.elementRef.nativeElement);\r\n let firstScroll: HTMLElement | null = null;\r\n for (let item of parents) {\r\n if (item.clientHeight < item.scrollHeight) {\r\n firstScroll = item;\r\n break;\r\n }\r\n }\r\n if (firstScroll && firstScroll.tagName !== 'BODY') {\r\n fromEvent(firstScroll, 'scroll')\r\n .pipe(\r\n filter(() => this.portalAttached()!),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe(() => {\r\n this.portalOverlayRef()?.updatePosition();\r\n const eract = this.elementRef.nativeElement.getBoundingClientRect();\r\n const frect = firstScroll!.getBoundingClientRect();\r\n if (eract.top + eract.height - frect.top < 0 || eract.bottom > frect.bottom) {\r\n this.closeSubject.next();\r\n }\r\n });\r\n }\r\n }\r\n\r\n portalAttached() {\r\n return this.portalOverlayRef()?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portalOverlayRef()?.detach();\r\n this.active.set(false);\r\n if (this.onlySelect()) {\r\n if (\r\n !this.nodes()\r\n .map((x) => x.label)\r\n .includes(this.value())\r\n ) {\r\n this.value.set('');\r\n if (this.onChange) this.onChange(this.value());\r\n this.inputChange.next(this.value());\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n destroyPortal() {\r\n this.portalOverlayRef()?.dispose();\r\n }\r\n\r\n showPortal() {\r\n if (XIsEmpty(this.value()) || this.disabledComputed() || this.iconSpin() || this.animating()) return;\r\n this.active.set(true);\r\n if ((XIsObservable(this.data()) && this.nodes.length === 0) || XIsFunction(this.data())) {\r\n this.icon.set('fto-loader');\r\n this.iconSpin.set(true);\r\n XSetData<XAutoCompleteNode>(this.data(), this.unSubject, true, this.value()).subscribe((x) => {\r\n this.icon.set('');\r\n this.iconSpin.set(false);\r\n this.nodes.set(x);\r\n this.createPortal();\r\n });\r\n } else {\r\n this.createPortal();\r\n }\r\n }\r\n\r\n createPortal() {\r\n this.nodes()\r\n .filter((x) => x.selected)\r\n .map((x) => (x.selected = false));\r\n if (XIsFunction(this.data())) {\r\n this.searchNodes.set(this.nodes());\r\n } else if (!XIsEmpty(this.value())) {\r\n this.setSearchNodes(this.value());\r\n }\r\n const box = this.inputCom().inputRef().nativeElement.getBoundingClientRect();\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n width: box.width,\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n };\r\n this.setPosition(config);\r\n const portal = this.portalService.attach({\r\n content: XAutoCompletePortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n let { componentRef, overlayRef } = portal;\r\n if (!componentRef || !overlayRef) return;\r\n this.portalComponent.set(componentRef);\r\n this.portalOverlayRef.set(overlayRef);\r\n this.realPlacement.set(this.placement());\r\n overlayRef\r\n ?.outsidePointerEvents()\r\n .pipe(takeUntil(this.unSubject))\r\n .subscribe(() => {\r\n this.closeSubject.next();\r\n });\r\n const { animating, nodeClick } = componentRef.instance;\r\n animating.subscribe((ing: boolean) => this.animating.set(ing));\r\n nodeClick.subscribe((node: XAutoCompleteNode) => this.onNodeClick(node));\r\n Object.assign(componentRef.instance, {\r\n closeSubject: this.closeSubject,\r\n keydownSubject: this.keydownSubject\r\n });\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this.unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n if (place !== this.realPlacement()) {\r\n this.realPlacement.set(place);\r\n this.portalOverlayRef()?.updatePosition();\r\n }\r\n });\r\n }\r\n\r\n onNodeClick(node: XAutoCompleteNode) {\r\n if (this.value() === node.label) {\r\n this.nodeEmit.emit(node);\r\n this.closeSubject.next();\r\n return;\r\n }\r\n this.value.set(node.label);\r\n this.valueTplContextSignal.update((x) => {\r\n x.$node = node;\r\n return { ...x };\r\n });\r\n this.inputCom().inputFocus();\r\n if (this.onChange) this.onChange(this.value());\r\n this.nodeEmit.emit(node);\r\n this.closeSubject.next();\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: this.inputCom().inputRef(),\r\n placement: [this.placement() as XPositionTopBottom, 'bottom-start', 'bottom-end', 'top-start', 'top-end'],\r\n transformOriginOn: 'x-auto-complete-portal'\r\n });\r\n }\r\n\r\n setPortal() {\r\n this.portalAttached() && this.portalOverlayRef()?.updatePositionStrategy(this.setPlacement());\r\n }\r\n\r\n setSearchNodes(value: string | number) {\r\n if (this.caseSensitive()) {\r\n this.searchNodes.set(this.nodes().filter((x) => x.label.indexOf(value) >= 0));\r\n } else {\r\n this.searchNodes.set(\r\n this.nodes().filter((x) => (x.label as string).toLowerCase().indexOf((value as string).toLowerCase()) >= 0)\r\n );\r\n }\r\n }\r\n\r\n modelChange(value: string | number) {\r\n if (XIsFunction(this.data())) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n this.icon.set('fto-loader');\r\n this.iconSpin.set(true);\r\n XSetData<XAutoCompleteNode>(this.data(), this.unSubject, true, value as any).subscribe((x) => {\r\n this.icon.set('');\r\n this.iconSpin.set(false);\r\n this.nodes.set(x);\r\n this.searchNodes.set(this.nodes());\r\n });\r\n }\r\n }\r\n if (!this.onlySelect()) {\r\n this.onChange && this.onChange(value);\r\n }\r\n return;\r\n }\r\n if (this.nodes()) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n this.setSearchNodes(value);\r\n }\r\n }\r\n }\r\n if (!this.onlySelect) {\r\n this.onChange && this.onChange(value);\r\n }\r\n }\r\n\r\n onKeydown($event: KeyboardEvent) {\r\n this.keydownSubject.next($event);\r\n }\r\n\r\n onInput(_event: Event) {\r\n this.formControlValidator();\r\n setTimeout(() => {\r\n this.inputChange.next(this.value());\r\n });\r\n }\r\n}\r\n","<div #autoComplete class=\"x-auto-complete\">\r\n <div class=\"x-auto-complete-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"false\"\r\n [(ngModel)]=\"value\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContextComputed()\"\r\n [size]=\"size()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"before()\"\r\n [after]=\"after()\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n [pointer]=\"pointer()\"\r\n [(active)]=\"active\"\r\n (xInput)=\"onInput($event)\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n (xClick)=\"showPortal()\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XAutoCompleteComponent } from './auto-complete.component';\r\n\r\n@NgModule({\r\n exports: [XAutoCompleteComponent],\r\n imports: [XAutoCompleteComponent]\r\n})\r\nexport class XAutoCompleteModule {}\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-auto-complete.mjs","sources":["../../../../lib/ng-nest/ui/auto-complete/auto-complete.property.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.module.ts","../../../../lib/ng-nest/ui/auto-complete/ng-nest-ui-auto-complete.ts"],"sourcesContent":["import {\r\n XParentIdentityProperty,\r\n XData,\r\n XPositionTopBottom,\r\n XSize,\r\n XBoolean,\r\n XAlign,\r\n XJustify,\r\n XDirection,\r\n XTemplate,\r\n XToNumber,\r\n XNumber,\r\n XToBoolean,\r\n XToCssPixelValue\r\n} from '@ng-nest/ui/core';\r\nimport { Component, TemplateRef, input, model, output } from '@angular/core';\r\nimport { XFormControlFunction, XFormOption } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * AutoComplete\r\n * @selector x-auto-complete\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePrefix = 'x-auto-complete';\r\nconst X_AUTOCOMPLETE_CONFIG_NAME = 'autoComplete';\r\n\r\n/**\r\n * AutoComplete Property\r\n */\r\n@Component({ selector: `${XAutoCompletePrefix}-property`, template: '' })\r\nexport class XAutoCompleteProperty extends XFormControlFunction(X_AUTOCOMPLETE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n readonly data = input<XData<XAutoCompleteNode>>([]);\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n readonly debounceTime = input<number, XNumber>(this.config?.debounceTime ?? 200, { transform: XToNumber });\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n readonly placement = input<XPositionTopBottom>(this.config?.placement ?? 'bottom');\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n readonly nodeTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 显示边框\r\n * @en_US Display Border\r\n */\r\n readonly bordered = input<boolean, XBoolean>(this.config?.bordered ?? true, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 匹配区分大小写\r\n * @en_US Case-sensitive\r\n */\r\n readonly caseSensitive = input<boolean, XBoolean>(this.config?.caseSensitive ?? true, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 只能是选择的值\r\n * @en_US Can only be the value of choice\r\n */\r\n readonly onlySelect = input<boolean, XBoolean>(this.config?.onlySelect ?? false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n override readonly size = input<XSize>(this.config?.size ?? 'medium');\r\n /**\r\n * @zh_CN 输入框点击样式\r\n * @en_US Input pointer\r\n */\r\n override readonly pointer = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 标签\r\n * @en_US Label\r\n */\r\n override readonly label = input<string>('');\r\n /**\r\n * @zh_CN 标签宽度\r\n * @en_US Label width\r\n */\r\n override readonly labelWidth = input<string, XNumber>('', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 标签文字对齐方式\r\n * @en_US Label text alignment method\r\n */\r\n override readonly labelAlign = input<XAlign>('start');\r\n /**\r\n * @zh_CN flex 布局下的子元素水平排列方式\r\n * @en_US The level of sub-element level arrangement under flex layout\r\n */\r\n override readonly justify = input<XJustify>('start');\r\n /**\r\n * @zh_CN flex 布局下的子元素垂直排列方式\r\n * @en_US sub-element vertical arrangement method under flex layout\r\n */\r\n override readonly align = input<XAlign>('start');\r\n /**\r\n * @zh_CN flex 布局下的子元素排列方向\r\n * @en_US The direction of the sub-element arrangement under flex layout\r\n */\r\n override readonly direction = input<XDirection>('column');\r\n /**\r\n * @zh_CN 输入提示信息\r\n * @en_US Enter prompt information\r\n */\r\n override readonly placeholder = input<string | string[]>('');\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 必填\r\n * @en_US Required\r\n */\r\n override readonly required = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Readonly\r\n */\r\n override readonly readonly = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 值模板\r\n * @en_US Node template\r\n */\r\n override readonly valueTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 值模板参数\r\n * @en_US Node template\r\n */\r\n override readonly valueTplContext = input();\r\n /**\r\n * @zh_CN 前置标签\r\n * @en_US Before label\r\n */\r\n override readonly before = input<XTemplate>();\r\n /**\r\n * @zh_CN 后置标签\r\n * @en_US After label\r\n */\r\n override readonly after = input<XTemplate>();\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular verification rules\r\n */\r\n override readonly pattern = input<RegExp | RegExp[] | any>(null);\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verify not pass the prompt text\r\n */\r\n override readonly message = input<string | string[]>([]);\r\n /**\r\n * @zh_CN 激活状态\r\n * @en_US Activation state\r\n */\r\n override readonly active = model<boolean>(false);\r\n /**\r\n * @zh_CN 输入验证函数\r\n * @en_US Enter the verification function\r\n */\r\n override readonly inputValidator = input<(value: any) => boolean>();\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n readonly nodeEmit = output<XAutoCompleteNode>();\r\n}\r\n\r\n/**\r\n * AutoComplete Option\r\n */\r\nexport interface XAutoCompleteOption extends XFormOption {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n data?: XData<XAutoCompleteNode>;\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n debounceTime?: number;\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n placement?: XPositionTopBottom;\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n nodeTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 显示边框\r\n * @en_US Display Border\r\n */\r\n bordered?: boolean;\r\n /**\r\n * @zh_CN 匹配区分大小写\r\n * @en_US Case-sensitive\r\n */\r\n caseSensitive?: boolean;\r\n /**\r\n * @zh_CN 只能是选择的值\r\n * @en_US Can only be the value of choice\r\n */\r\n onlySelect?: boolean;\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n size?: XSize;\r\n /**\r\n * @zh_CN 输入框点击样式\r\n * @en_US Input pointer\r\n */\r\n pointer?: boolean;\r\n /**\r\n * @zh_CN 标签\r\n * @en_US Label\r\n */\r\n label?: string;\r\n /**\r\n * @zh_CN 标签宽度\r\n * @en_US Label width\r\n */\r\n labelWidth?: string;\r\n /**\r\n * @zh_CN 标签文字对齐方式\r\n * @en_US Label text alignment method\r\n */\r\n labelAlign?: XAlign;\r\n /**\r\n * @zh_CN flex 布局下的子元素水平排列方式\r\n * @en_US The level of sub-element level arrangement under flex layout\r\n */\r\n justify?: XJustify;\r\n /**\r\n * @zh_CN flex 布局下的子元素垂直排列方式\r\n * @en_US sub-element vertical arrangement method under flex layout\r\n */\r\n align?: XAlign;\r\n /**\r\n * @zh_CN flex 布局下的子元素排列方向\r\n * @en_US The direction of the sub-element arrangement under flex layout\r\n */\r\n direction?: XDirection;\r\n /**\r\n * @zh_CN 输入提示信息\r\n * @en_US Enter prompt information\r\n */\r\n placeholder?: string;\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 Required\r\n */\r\n required?: boolean;\r\n /**\r\n * @zh_CN 只读\r\n * @en_US Readonly\r\n */\r\n readonly?: boolean;\r\n /**\r\n * @zh_CN 值模板\r\n * @en_US Node template\r\n */\r\n valueTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 值模板参数\r\n * @en_US Node template\r\n */\r\n valueTplContext?: any;\r\n /**\r\n * @zh_CN 前置标签\r\n * @en_US Before label\r\n */\r\n before?: XTemplate;\r\n /**\r\n * @zh_CN 后置标签\r\n * @en_US After label\r\n */\r\n after?: XTemplate;\r\n /**\r\n * @zh_CN 正则验证规则\r\n * @en_US Regular verification rules\r\n */\r\n pattern?: RegExp | RegExp[];\r\n /**\r\n * @zh_CN 验证不通过提示文字\r\n * @en_US Verify not pass the prompt text\r\n */\r\n message?: string | string[];\r\n /**\r\n * @zh_CN 激活状态\r\n * @en_US Activation state\r\n */\r\n active?: boolean;\r\n /**\r\n * @zh_CN 输入验证函数\r\n * @en_US Enter the verification function\r\n */\r\n inputValidator?: (value: any) => boolean;\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n nodeEmit?: (node: XAutoCompleteNode) => void;\r\n}\r\n\r\n/**\r\n * @zh_CN AutoComplete 数据对象\r\n * @en_US AutoComplete data object\r\n */\r\nexport interface XAutoCompleteNode extends XParentIdentityProperty<XAutoCompleteNode> {}\r\n\r\n/**\r\n * AutoComplete Portal\r\n * @selector x-auto-complete-portal\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePortalPrefix = 'x-auto-complete-portal';\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnInit,\r\n HostBinding,\r\n HostListener,\r\n TemplateRef,\r\n input,\r\n viewChild,\r\n signal,\r\n model,\r\n output,\r\n DestroyRef,\r\n inject\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompletePortalPrefix } from './auto-complete.property';\r\nimport { Subject } from 'rxjs';\r\nimport { XConnectBaseAnimation, XPositionTopBottom } from '@ng-nest/ui/core';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { XListComponent } from '@ng-nest/ui/list';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePortalPrefix}`,\r\n imports: [XListComponent],\r\n templateUrl: './auto-complete-portal.component.html',\r\n styleUrls: ['./auto-complete-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XConnectBaseAnimation]\r\n})\r\nexport class XAutoCompletePortalComponent implements OnInit {\r\n @HostBinding('@x-connect-base-animation') public get getPlacement() {\r\n return this.placement();\r\n }\r\n @HostListener('@x-connect-base-animation.done', ['$event']) done() {\r\n if (this.destroy()) return;\r\n this.animating.emit(false);\r\n }\r\n @HostListener('@x-connect-base-animation.start', ['$event']) start() {\r\n if (this.destroy()) return;\r\n this.animating.emit(true);\r\n }\r\n list = viewChild.required('list', { read: XListComponent });\r\n\r\n data = input<XAutoCompleteNode[]>();\r\n value = input<any>();\r\n placement = input<XPositionTopBottom>();\r\n nodeTpl = input<TemplateRef<any>>();\r\n inputCom = input<XInputComponent>();\r\n keywordText = model<string>('');\r\n caseSensitive = input<boolean>(false);\r\n animating = output<boolean>();\r\n nodeClick = output<XAutoCompleteNode>();\r\n closeSubject!: Subject<void>;\r\n keydownSubject!: Subject<KeyboardEvent>;\r\n active = signal(-1);\r\n destroy = signal(false);\r\n private unSubject = new Subject<void>();\r\n private destroyRef = inject(DestroyRef);\r\n\r\n ngOnInit(): void {\r\n this.closeSubject.pipe(takeUntil(this.unSubject)).subscribe(() => {\r\n this.list().setUnActive(this.active());\r\n });\r\n this.keydownSubject.pipe(takeUntil(this.unSubject)).subscribe((x) => {\r\n this.list().keydown(x);\r\n });\r\n this.destroyRef.onDestroy(() => {\r\n this.destroy.set(true);\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n });\r\n }\r\n\r\n stopPropagation(event: Event): void {\r\n event.stopPropagation();\r\n }\r\n\r\n onNodeClick(node: XAutoCompleteNode) {\r\n this.keywordText.set(node.label);\r\n this.nodeClick.emit(node);\r\n }\r\n\r\n onActive(num: number) {\r\n this.active.set(num);\r\n }\r\n\r\n onTabOut() {\r\n this.closeSubject.next();\r\n }\r\n}\r\n","<div\r\n #autoCompletePortal\r\n class=\"x-auto-complete-portal\"\r\n tabindex=\"-1\"\r\n (click)=\"inputCom()?.inputFocus('focus'); stopPropagation($event)\"\r\n>\r\n <x-list\r\n #list\r\n [data]=\"data()!\"\r\n (nodeClick)=\"onNodeClick($event)\"\r\n (keyManagerChange)=\"onActive($event)\"\r\n (keyManagerTabOut)=\"onTabOut()\"\r\n [nodeTpl]=\"nodeTpl()\"\r\n [scrollElement]=\"autoCompletePortal\"\r\n [keywordText]=\"keywordText()\"\r\n [caseSensitive]=\"caseSensitive()\"\r\n [inPortal]=\"true\"\r\n ></x-list>\r\n</div>\r\n","import { BehaviorSubject, Subject, fromEvent } from 'rxjs';\r\nimport {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n SimpleChanges,\r\n OnChanges,\r\n ViewContainerRef,\r\n inject,\r\n signal,\r\n viewChild,\r\n ComponentRef,\r\n effect,\r\n computed\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompleteProperty, XAutoCompletePrefix } from './auto-complete.property';\r\nimport {\r\n XIsEmpty,\r\n XIsObservable,\r\n XIsChange,\r\n XSetData,\r\n XPositionTopBottom,\r\n XIsFunction,\r\n XParents,\r\n XPlacement\r\n} from '@ng-nest/ui/core';\r\nimport { XPortalService, XPortalConnectedPosition } from '@ng-nest/ui/portal';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XAutoCompletePortalComponent } from './auto-complete-portal.component';\r\nimport {\r\n Overlay,\r\n FlexibleConnectedPositionStrategy,\r\n ConnectedOverlayPositionChange,\r\n OverlayConfig,\r\n OverlayRef\r\n} from '@angular/cdk/overlay';\r\nimport { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\r\nimport { DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER, ESCAPE } from '@angular/cdk/keycodes';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePrefix}`,\r\n imports: [FormsModule, ReactiveFormsModule, XInputComponent],\r\n templateUrl: './auto-complete.component.html',\r\n styleUrls: ['./auto-complete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XAutoCompleteComponent)]\r\n})\r\nexport class XAutoCompleteComponent extends XAutoCompleteProperty implements OnInit, OnChanges {\r\n inputCom = viewChild.required('inputCom', { read: XInputComponent });\r\n\r\n nodes = signal<XAutoCompleteNode[]>([]);\r\n searchNodes = signal<XAutoCompleteNode[]>([]);\r\n icon = signal('');\r\n iconSpin = signal(false);\r\n animating = signal(false);\r\n\r\n valueTplContextSignal = signal<{ $node: any; $isValue: boolean }>({ $node: null, $isValue: true });\r\n valueTplContextComputed = computed(() => {\r\n return this.valueTplContext() ? this.valueTplContext() : this.valueTplContextSignal();\r\n });\r\n\r\n inputChange = new BehaviorSubject<any>(null);\r\n closeSubject: Subject<void> = new Subject();\r\n keydownSubject: Subject<KeyboardEvent> = new Subject();\r\n private unSubject = new Subject<void>();\r\n private portalService = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private overlay = inject(Overlay);\r\n private elementRef = inject(ElementRef);\r\n\r\n private realPlacement = signal<XPlacement | null>(null);\r\n portalComponent = signal<ComponentRef<XAutoCompletePortalComponent> | null>(null);\r\n portalOverlayRef = signal<OverlayRef | null>(null);\r\n inputChanged = toSignal(this.inputChange.pipe(filter((x) => x !== null)));\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.portalComponent()?.setInput('value', this.value()));\r\n effect(() => this.portalComponent()?.setInput('placement', this.realPlacement()));\r\n effect(() => this.portalComponent()?.setInput('data', this.searchNodes()));\r\n effect(() => this.portalComponent()?.setInput('nodeTpl', this.nodeTpl()));\r\n effect(() => this.portalComponent()?.setInput('caseSensitive', this.caseSensitive()));\r\n effect(() => this.portalComponent()?.setInput('inputCom', this.inputCom()));\r\n effect(() => this.portalComponent()?.setInput('keywordText', this.inputChanged()));\r\n }\r\n\r\n ngOnInit() {\r\n this.setSubject();\r\n this.setParantScroll();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { data } = changes;\r\n XIsChange(data) && this.setData();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setPortal();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n setData() {\r\n if (XIsObservable(this.data()) || XIsFunction(this.data())) return;\r\n XSetData<XAutoCompleteNode>(this.data(), this.unSubject).subscribe((x) => {\r\n this.nodes.set(x);\r\n this.searchNodes.set(x);\r\n this.setPortal();\r\n });\r\n }\r\n\r\n setSubject() {\r\n this.closeSubject.pipe(takeUntil(this.unSubject)).subscribe(() => {\r\n this.closePortal();\r\n });\r\n this.inputChange\r\n .pipe(\r\n filter((x) => x !== null),\r\n debounceTime(this.debounceTime() as number),\r\n distinctUntilChanged(),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe((x) => {\r\n this.modelChange(x);\r\n });\r\n this.keydownSubject.pipe(takeUntil(this.unSubject)).subscribe((x) => {\r\n const keyCode = x.keyCode;\r\n if (!this.portalAttached() && [DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER].includes(keyCode)) {\r\n this.inputChange.next(this.value());\r\n }\r\n if (this.portalAttached() && [ESCAPE].includes(keyCode)) {\r\n this.closeSubject.next();\r\n }\r\n });\r\n }\r\n\r\n setParantScroll() {\r\n const parents = XParents(this.elementRef.nativeElement);\r\n let firstScroll: HTMLElement | null = null;\r\n for (let item of parents) {\r\n if (item.clientHeight < item.scrollHeight) {\r\n firstScroll = item;\r\n break;\r\n }\r\n }\r\n if (firstScroll && firstScroll.tagName !== 'BODY') {\r\n fromEvent(firstScroll, 'scroll')\r\n .pipe(\r\n filter(() => this.portalAttached()!),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe(() => {\r\n this.portalOverlayRef()?.updatePosition();\r\n const eract = this.elementRef.nativeElement.getBoundingClientRect();\r\n const frect = firstScroll!.getBoundingClientRect();\r\n if (eract.top + eract.height - frect.top < 0 || eract.bottom > frect.bottom) {\r\n this.closeSubject.next();\r\n }\r\n });\r\n }\r\n }\r\n\r\n portalAttached() {\r\n return this.portalOverlayRef()?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (!this.portalAttached()) return;\r\n this.portalOverlayRef()?.detach();\r\n this.active.set(false);\r\n if (!this.onlySelect()) return;\r\n if (\r\n !this.nodes()\r\n .map((x) => x.label)\r\n .includes(this.value())\r\n ) {\r\n this.value.set('');\r\n if (this.onChange) this.onChange(this.value());\r\n this.inputChange.next(this.value());\r\n }\r\n }\r\n\r\n showPortal() {\r\n if (XIsEmpty(this.value()) || this.disabledComputed() || this.iconSpin() || this.animating()) return;\r\n this.active.set(true);\r\n if ((XIsObservable(this.data()) && this.nodes.length === 0) || XIsFunction(this.data())) {\r\n this.icon.set('fto-loader');\r\n this.iconSpin.set(true);\r\n XSetData<XAutoCompleteNode>(this.data(), this.unSubject, true, this.value()).subscribe((x) => {\r\n this.icon.set('');\r\n this.iconSpin.set(false);\r\n this.nodes.set(x);\r\n this.createPortal();\r\n });\r\n } else {\r\n this.createPortal();\r\n }\r\n }\r\n\r\n createPortal() {\r\n this.nodes()\r\n .filter((x) => x.selected)\r\n .map((x) => (x.selected = false));\r\n if (XIsFunction(this.data())) {\r\n this.searchNodes.set(this.nodes());\r\n } else if (!XIsEmpty(this.value())) {\r\n this.setSearchNodes(this.value());\r\n }\r\n const box = this.inputCom().inputRef().nativeElement.getBoundingClientRect();\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n width: box.width,\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n };\r\n this.setPosition(config);\r\n const portal = this.portalService.attach({\r\n content: XAutoCompletePortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n let { componentRef, overlayRef } = portal;\r\n if (!componentRef || !overlayRef) return;\r\n this.portalComponent.set(componentRef);\r\n this.portalOverlayRef.set(overlayRef);\r\n this.realPlacement.set(this.placement());\r\n overlayRef\r\n ?.outsidePointerEvents()\r\n .pipe(takeUntil(this.unSubject))\r\n .subscribe(() => {\r\n this.closeSubject.next();\r\n });\r\n const { animating, nodeClick } = componentRef.instance;\r\n animating.subscribe((ing: boolean) => this.animating.set(ing));\r\n nodeClick.subscribe((node: XAutoCompleteNode) => this.onNodeClick(node));\r\n Object.assign(componentRef.instance, {\r\n closeSubject: this.closeSubject,\r\n keydownSubject: this.keydownSubject\r\n });\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this.unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n if (place !== this.realPlacement()) {\r\n this.realPlacement.set(place);\r\n this.portalOverlayRef()?.updatePosition();\r\n }\r\n });\r\n }\r\n\r\n onNodeClick(node: XAutoCompleteNode) {\r\n if (this.value() === node.label) {\r\n this.nodeEmit.emit(node);\r\n this.closeSubject.next();\r\n return;\r\n }\r\n this.value.set(node.label);\r\n this.valueTplContextSignal.update((x) => {\r\n x.$node = node;\r\n return { ...x };\r\n });\r\n this.inputCom().inputFocus();\r\n if (this.onChange) this.onChange(this.value());\r\n this.nodeEmit.emit(node);\r\n this.closeSubject.next();\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: this.inputCom().inputRef(),\r\n placement: [this.placement() as XPositionTopBottom, 'bottom-start', 'bottom-end', 'top-start', 'top-end'],\r\n transformOriginOn: 'x-auto-complete-portal'\r\n });\r\n }\r\n\r\n setPortal() {\r\n this.portalAttached() && this.portalOverlayRef()?.updatePositionStrategy(this.setPlacement());\r\n }\r\n\r\n setSearchNodes(value: string | number) {\r\n if (this.caseSensitive()) {\r\n this.searchNodes.set(this.nodes().filter((x) => x.label.indexOf(value) >= 0));\r\n } else {\r\n this.searchNodes.set(\r\n this.nodes().filter((x) => (x.label as string).toLowerCase().indexOf((value as string).toLowerCase()) >= 0)\r\n );\r\n }\r\n }\r\n\r\n modelChange(value: string | number) {\r\n if (XIsFunction(this.data())) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n this.icon.set('fto-loader');\r\n this.iconSpin.set(true);\r\n XSetData<XAutoCompleteNode>(this.data(), this.unSubject, true, value as any).subscribe((x) => {\r\n this.icon.set('');\r\n this.iconSpin.set(false);\r\n this.nodes.set(x);\r\n this.searchNodes.set(this.nodes());\r\n });\r\n }\r\n }\r\n if (!this.onlySelect()) {\r\n this.onChange && this.onChange(value);\r\n }\r\n return;\r\n }\r\n if (this.nodes()) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n this.setSearchNodes(value);\r\n }\r\n }\r\n }\r\n if (!this.onlySelect()) {\r\n this.onChange && this.onChange(value);\r\n }\r\n }\r\n\r\n onKeydown($event: KeyboardEvent) {\r\n this.keydownSubject.next($event);\r\n }\r\n\r\n onInput(_event: Event) {\r\n this.formControlValidator();\r\n setTimeout(() => {\r\n this.inputChange.next(this.value());\r\n });\r\n }\r\n}\r\n","<div #autoComplete class=\"x-auto-complete\">\r\n <div class=\"x-auto-complete-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"false\"\r\n [(ngModel)]=\"value\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContextComputed()\"\r\n [size]=\"size()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"before()\"\r\n [after]=\"after()\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n [pointer]=\"pointer()\"\r\n [(active)]=\"active\"\r\n (xInput)=\"onInput($event)\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n (xClick)=\"showPortal()\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XAutoCompleteComponent } from './auto-complete.component';\r\n\r\n@NgModule({\r\n exports: [XAutoCompleteComponent],\r\n imports: [XAutoCompleteComponent]\r\n})\r\nexport class XAutoCompleteModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -67,7 +67,7 @@ class XBackTopComponent extends XBackTopProperty {
67
67
  this.scroll = computed(() => {
68
68
  const tg = this.target();
69
69
  if (!tg)
70
- return this.doc.defaultView;
70
+ return this.doc?.defaultView;
71
71
  return XIsString(tg) ? this.doc?.querySelector(tg) : tg;
72
72
  });
73
73
  effect(() => this.addEvent());
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-back-top.mjs","sources":["../../../../lib/ng-nest/ui/back-top/back-top.property.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.html","../../../../lib/ng-nest/ui/back-top/back-top.module.ts","../../../../lib/ng-nest/ui/back-top/ng-nest-ui-back-top.ts"],"sourcesContent":["import { XPropertyFunction, XToCssPixelValue, XToNumber } from '@ng-nest/ui/core';\r\nimport { TemplateRef, Component, input } from '@angular/core';\r\nimport type { XNumber } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * BackTop\r\n * @selector x-back-top\r\n * @decorator component\r\n */\r\nexport const XBackTopPrefix = 'x-back-top';\r\nconst X_BACK_TOP_CONFIG_NAME = 'backTop';\r\n\r\n/**\r\n * BackTop Property\r\n */\r\n@Component({ selector: `${XBackTopPrefix}-property`, template: '' })\r\nexport class XBackTopProperty extends XPropertyFunction(X_BACK_TOP_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 距离右边的距离\r\n * @en_US Distance to the right\r\n */\r\n readonly right = input<string, XNumber>(this.config?.right ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 距离底部的距离\r\n * @en_US Distance from bottom\r\n */\r\n readonly bottom = input<string, XNumber>(this.config?.bottom ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 滚动多少高度后显示\r\n * @en_US Display after scrolling how much height\r\n */\r\n readonly visibilityHeight = input<number, XNumber>(this.config?.visibilityHeight ?? 200, { transform: XToNumber });\r\n /**\r\n * @zh_CN 内容模板\r\n * @en_US Content template\r\n */\r\n readonly template = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 滚动的元素\r\n * @en_US Scroll element\r\n */\r\n readonly target = input<string | HTMLElement>();\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewContainerRef,\r\n inject,\r\n viewChild,\r\n computed,\r\n effect,\r\n signal\r\n} from '@angular/core';\r\nimport { XBackTopPrefix, XBackTopProperty } from './back-top.property';\r\nimport { XRequestAnimationFrame, XIsNumber, XIsString } from '@ng-nest/ui/core';\r\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { throttleTime, takeUntil, map, tap } from 'rxjs/operators';\r\nimport { XPortalService, XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { XLinkComponent } from '@ng-nest/ui/link';\r\n\r\n@Component({\r\n selector: `${XBackTopPrefix}`,\r\n imports: [NgTemplateOutlet, XLinkComponent],\r\n templateUrl: './back-top.component.html',\r\n styleUrls: ['./back-top.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XBackTopComponent extends XBackTopProperty implements OnDestroy {\r\n backTopTpl = viewChild.required<TemplateRef<void>>('backTopTpl');\r\n visiable = signal(false);\r\n scrolling = signal(false);\r\n portalRef!: XPortalOverlayRef<any>;\r\n private doc = inject(DOCUMENT);\r\n private portal = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private unSubject = new Subject<void>();\r\n\r\n scroll = computed(() => {\r\n const tg = this.target();\r\n if (!tg) return this.doc.defaultView;\r\n return XIsString(tg) ? this.doc?.querySelector(tg) : tg;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.addEvent());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n onBackTop() {\r\n if (!this.scrolling()) {\r\n this.scrolling.set(true);\r\n this.scrollTo(0, 200);\r\n }\r\n }\r\n\r\n private addEvent() {\r\n this.unSubject.next();\r\n fromEvent(this.scroll()!, 'scroll')\r\n .pipe(\r\n throttleTime(20),\r\n map(() => this.scrollTop()),\r\n tap((x) => this.setVisible(x)),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe();\r\n }\r\n\r\n private scrollTop() {\r\n if (this.scroll() === this.doc.defaultView) {\r\n return this.doc.documentElement.scrollTop;\r\n } else {\r\n return (this.scroll() as HTMLElement).scrollTop;\r\n }\r\n }\r\n\r\n private setVisible(scrollTop: number) {\r\n const visible = scrollTop >= (this.visibilityHeight() as number);\r\n console.log(this.visibilityHeight(), scrollTop, visible);\r\n if (this.visiable() !== visible) {\r\n this.visiable.set(visible);\r\n if (this.visiable()) {\r\n this.portalRef = this.portal.attach({\r\n content: this.backTopTpl(),\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n positionStrategy: this.portal.setPlace('bottom-end', ...['0', this.right(), this.bottom(), '0'])\r\n }\r\n });\r\n } else {\r\n this.portalRef?.overlayRef?.hasAttached() && this.portalRef.overlayRef.detach();\r\n }\r\n }\r\n }\r\n\r\n private scrollTo(to: number, duration: number) {\r\n const difference = to - this.scrollTop();\r\n const perTick = (difference / duration) * 10;\r\n XRequestAnimationFrame(() => {\r\n const num = this.scrollTop() + perTick;\r\n if (XIsNumber(num) && num !== Infinity) {\r\n this.setScrollTop(num);\r\n }\r\n if (this.scrollTop() === to || duration <= 0) {\r\n this.scrolling.set(false);\r\n return;\r\n } else {\r\n this.scrollTo(to, duration - 10);\r\n }\r\n });\r\n }\r\n\r\n private setScrollTop(top: number) {\r\n if (this.scroll() === this.doc.defaultView) {\r\n this.doc.documentElement!.scrollTop = top!;\r\n } else {\r\n (this.scroll() as HTMLElement).scrollTop = top!;\r\n }\r\n }\r\n}\r\n","<ng-template #backTopTpl>\r\n <div class=\"x-back-top\" (click)=\"onBackTop()\">\r\n @if (!template()) {\r\n <x-link icon=\"fto-arrow-up\"> </x-link>\r\n }\r\n @if (template()) {\r\n <ng-container *ngTemplateOutlet=\"template()!\"></ng-container>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBackTopComponent } from './back-top.component';\r\n@NgModule({\r\n exports: [XBackTopComponent],\r\n imports: [XBackTopComponent]\r\n})\r\nexport class XBackTopModule {}\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-back-top.mjs","sources":["../../../../lib/ng-nest/ui/back-top/back-top.property.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.html","../../../../lib/ng-nest/ui/back-top/back-top.module.ts","../../../../lib/ng-nest/ui/back-top/ng-nest-ui-back-top.ts"],"sourcesContent":["import { XPropertyFunction, XToCssPixelValue, XToNumber } from '@ng-nest/ui/core';\r\nimport { TemplateRef, Component, input } from '@angular/core';\r\nimport type { XNumber } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * BackTop\r\n * @selector x-back-top\r\n * @decorator component\r\n */\r\nexport const XBackTopPrefix = 'x-back-top';\r\nconst X_BACK_TOP_CONFIG_NAME = 'backTop';\r\n\r\n/**\r\n * BackTop Property\r\n */\r\n@Component({ selector: `${XBackTopPrefix}-property`, template: '' })\r\nexport class XBackTopProperty extends XPropertyFunction(X_BACK_TOP_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 距离右边的距离\r\n * @en_US Distance to the right\r\n */\r\n readonly right = input<string, XNumber>(this.config?.right ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 距离底部的距离\r\n * @en_US Distance from bottom\r\n */\r\n readonly bottom = input<string, XNumber>(this.config?.bottom ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 滚动多少高度后显示\r\n * @en_US Display after scrolling how much height\r\n */\r\n readonly visibilityHeight = input<number, XNumber>(this.config?.visibilityHeight ?? 200, { transform: XToNumber });\r\n /**\r\n * @zh_CN 内容模板\r\n * @en_US Content template\r\n */\r\n readonly template = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 滚动的元素\r\n * @en_US Scroll element\r\n */\r\n readonly target = input<string | HTMLElement>();\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewContainerRef,\r\n inject,\r\n viewChild,\r\n computed,\r\n effect,\r\n signal\r\n} from '@angular/core';\r\nimport { XBackTopPrefix, XBackTopProperty } from './back-top.property';\r\nimport { XRequestAnimationFrame, XIsNumber, XIsString } from '@ng-nest/ui/core';\r\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { throttleTime, takeUntil, map, tap } from 'rxjs/operators';\r\nimport { XPortalService, XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { XLinkComponent } from '@ng-nest/ui/link';\r\n\r\n@Component({\r\n selector: `${XBackTopPrefix}`,\r\n imports: [NgTemplateOutlet, XLinkComponent],\r\n templateUrl: './back-top.component.html',\r\n styleUrls: ['./back-top.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XBackTopComponent extends XBackTopProperty implements OnDestroy {\r\n backTopTpl = viewChild.required<TemplateRef<void>>('backTopTpl');\r\n visiable = signal(false);\r\n scrolling = signal(false);\r\n portalRef!: XPortalOverlayRef<any>;\r\n private doc = inject(DOCUMENT);\r\n private portal = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private unSubject = new Subject<void>();\r\n\r\n scroll = computed(() => {\r\n const tg = this.target();\r\n if (!tg) return this.doc?.defaultView;\r\n return XIsString(tg) ? this.doc?.querySelector(tg) : tg;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.addEvent());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n onBackTop() {\r\n if (!this.scrolling()) {\r\n this.scrolling.set(true);\r\n this.scrollTo(0, 200);\r\n }\r\n }\r\n\r\n private addEvent() {\r\n this.unSubject.next();\r\n fromEvent(this.scroll()!, 'scroll')\r\n .pipe(\r\n throttleTime(20),\r\n map(() => this.scrollTop()),\r\n tap((x) => this.setVisible(x)),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe();\r\n }\r\n\r\n private scrollTop() {\r\n if (this.scroll() === this.doc.defaultView) {\r\n return this.doc.documentElement.scrollTop;\r\n } else {\r\n return (this.scroll() as HTMLElement).scrollTop;\r\n }\r\n }\r\n\r\n private setVisible(scrollTop: number) {\r\n const visible = scrollTop >= (this.visibilityHeight() as number);\r\n console.log(this.visibilityHeight(), scrollTop, visible);\r\n if (this.visiable() !== visible) {\r\n this.visiable.set(visible);\r\n if (this.visiable()) {\r\n this.portalRef = this.portal.attach({\r\n content: this.backTopTpl(),\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n positionStrategy: this.portal.setPlace('bottom-end', ...['0', this.right(), this.bottom(), '0'])\r\n }\r\n });\r\n } else {\r\n this.portalRef?.overlayRef?.hasAttached() && this.portalRef.overlayRef.detach();\r\n }\r\n }\r\n }\r\n\r\n private scrollTo(to: number, duration: number) {\r\n const difference = to - this.scrollTop();\r\n const perTick = (difference / duration) * 10;\r\n XRequestAnimationFrame(() => {\r\n const num = this.scrollTop() + perTick;\r\n if (XIsNumber(num) && num !== Infinity) {\r\n this.setScrollTop(num);\r\n }\r\n if (this.scrollTop() === to || duration <= 0) {\r\n this.scrolling.set(false);\r\n return;\r\n } else {\r\n this.scrollTo(to, duration - 10);\r\n }\r\n });\r\n }\r\n\r\n private setScrollTop(top: number) {\r\n if (this.scroll() === this.doc.defaultView) {\r\n this.doc.documentElement!.scrollTop = top!;\r\n } else {\r\n (this.scroll() as HTMLElement).scrollTop = top!;\r\n }\r\n }\r\n}\r\n","<ng-template #backTopTpl>\r\n <div class=\"x-back-top\" (click)=\"onBackTop()\">\r\n @if (!template()) {\r\n <x-link icon=\"fto-arrow-up\"> </x-link>\r\n }\r\n @if (template()) {\r\n <ng-container *ngTemplateOutlet=\"template()!\"></ng-container>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBackTopComponent } from './back-top.component';\r\n@NgModule({\r\n exports: [XBackTopComponent],\r\n imports: [XBackTopComponent]\r\n})\r\nexport class XBackTopModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,122 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, model, Component, forwardRef, inject, ChangeDetectorRef, computed, signal, NgModule } from '@angular/core';
3
- import { XProperty, XToCssPixelValue, XToBoolean, XIsFunction, XConfigService, XIsEmpty, XIsUndefined, XIsNull } from '@ng-nest/ui/core';
3
+ import { XProperty, XToBoolean, XToCssPixelValue, XConfigService, XIsEmpty, XIsUndefined, XIsNull } from '@ng-nest/ui/core';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
 
6
- /**
7
- * 表单对象共有的参数
8
- */
9
- class XFormProp extends XProperty {
10
- constructor() {
11
- super(...arguments);
12
- /**
13
- * @zh_CN 标签
14
- * @en_US Label
15
- */
16
- this.label = input('');
17
- /**
18
- * @zh_CN 标签宽度
19
- * @en_US Label width
20
- */
21
- this.labelWidth = input('', { transform: XToCssPixelValue });
22
- /**
23
- * @zh_CN 标签文字对齐方式
24
- * @en_US Label text alignment method
25
- */
26
- this.labelAlign = input('start');
27
- /**
28
- * @zh_CN flex 布局下的子元素水平排列方式
29
- * @en_US The level of sub-element level arrangement under flex layout
30
- */
31
- this.justify = input('start');
32
- /**
33
- * @zh_CN flex 布局下的子元素垂直排列方式
34
- * @en_US sub-element vertical arrangement method under flex layout
35
- */
36
- this.align = input('start');
37
- /**
38
- * @zh_CN flex 布局下的子元素排列方向
39
- * @en_US The direction of the sub-element arrangement under flex layout
40
- */
41
- this.direction = input('column');
42
- /**
43
- * @zh_CN 尺寸
44
- * @en_US Size
45
- */
46
- this.size = input('medium');
47
- /**
48
- * @zh_CN 输入提示信息
49
- * @en_US Enter prompt information
50
- */
51
- this.placeholder = input('');
52
- /**
53
- * @zh_CN 禁用
54
- * @en_US Disabled
55
- */
56
- this.disabled = input(false, { transform: XToBoolean });
57
- /**
58
- * @zh_CN 必填
59
- * @en_US Required
60
- */
61
- this.required = input(false, { transform: XToBoolean });
62
- /**
63
- * @zh_CN 只读
64
- * @en_US Readonly
65
- */
66
- this.readonly = input(false, { transform: XToBoolean });
67
- /**
68
- * @zh_CN 值模板
69
- * @en_US Node template
70
- */
71
- this.valueTpl = input();
72
- /**
73
- * @zh_CN 值模板参数
74
- * @en_US Node template
75
- */
76
- this.valueTplContext = input();
77
- /**
78
- * @zh_CN 前置标签
79
- * @en_US Before label
80
- */
81
- this.before = input();
82
- /**
83
- * @zh_CN 后置标签
84
- * @en_US After label
85
- */
86
- this.after = input();
87
- /**
88
- * @zh_CN 正则验证规则
89
- * @en_US Regular verification rules
90
- */
91
- this.pattern = input();
92
- /**
93
- * @zh_CN 验证不通过提示文字
94
- * @en_US Verify not pass the prompt text
95
- */
96
- this.message = input('');
97
- /**
98
- * @zh_CN 激活状态
99
- * @en_US Activation state
100
- */
101
- this.active = model(false);
102
- /**
103
- * @zh_CN 输入框点击样式
104
- * @en_US Enter box click style
105
- */
106
- this.pointer = input(false, { transform: XToBoolean });
107
- /**
108
- * @zh_CN 输入验证函数
109
- * @en_US Enter the verification function
110
- */
111
- this.inputValidator = input();
112
- }
113
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: XFormProp, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
114
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.1", type: XFormProp, isStandalone: true, selector: "x-form-prop", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null }, labelAlign: { classPropertyName: "labelAlign", publicName: "labelAlign", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, valueTpl: { classPropertyName: "valueTpl", publicName: "valueTpl", isSignal: true, isRequired: false, transformFunction: null }, valueTplContext: { classPropertyName: "valueTplContext", publicName: "valueTplContext", isSignal: true, isRequired: false, transformFunction: null }, before: { classPropertyName: "before", publicName: "before", isSignal: true, isRequired: false, transformFunction: null }, after: { classPropertyName: "after", publicName: "after", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, pointer: { classPropertyName: "pointer", publicName: "pointer", isSignal: true, isRequired: false, transformFunction: null }, inputValidator: { classPropertyName: "inputValidator", publicName: "inputValidator", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
115
- }
116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: XFormProp, decorators: [{
117
- type: Component,
118
- args: [{ selector: 'x-form-prop', template: '' }]
119
- }] });
120
6
  /**
121
7
  * 表单对象共有的参数
122
8
  */
@@ -242,8 +128,6 @@ function XValueAccessor(component) {
242
128
  }
243
129
  function XFormInputValidator(func) {
244
130
  return (control) => {
245
- if (!XIsFunction(func))
246
- return null;
247
131
  const invalid = !func(control.value);
248
132
  return invalid ? { inputValidator: true } : null;
249
133
  };
@@ -267,7 +151,6 @@ function XFormControlFunction(configName) {
267
151
  for (const pt of pattern) {
268
152
  result = !new RegExp(pt).test(this.value());
269
153
  if (result) {
270
- this.invalidIndex.set(index);
271
154
  break;
272
155
  }
273
156
  index++;
@@ -292,7 +175,27 @@ function XFormControlFunction(configName) {
292
175
  return message;
293
176
  }
294
177
  });
295
- this.invalidIndex = signal(0);
178
+ this.invalidIndex = computed(() => {
179
+ let res = 0;
180
+ let index = 0;
181
+ const pattern = this.patternComputed();
182
+ if (!this.validatorComputed() || XIsUndefined(pattern) || XIsNull(pattern))
183
+ return 0;
184
+ if (Array.isArray(pattern)) {
185
+ for (const pt of pattern) {
186
+ const result = !new RegExp(pt).test(this.value());
187
+ if (result) {
188
+ res = index;
189
+ break;
190
+ }
191
+ index++;
192
+ }
193
+ return res;
194
+ }
195
+ else {
196
+ return 0;
197
+ }
198
+ });
296
199
  this.value = signal(undefined);
297
200
  this.validatorSignal = signal(false);
298
201
  this.disabledSignal = signal(false);
@@ -351,5 +254,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
351
254
  * Generated bundle index. Do not edit.
352
255
  */
353
256
 
354
- export { XBaseFormModule, XFormControlFunction, XFormControlProp, XFormInputValidator, XFormProp, XValueAccessor };
257
+ export { XBaseFormModule, XFormControlFunction, XFormControlProp, XFormInputValidator, XValueAccessor };
355
258
  //# sourceMappingURL=ng-nest-ui-base-form.mjs.map