{"version":3,"file":"ng-nest-ui-switch.mjs","sources":["../../../../lib/ng-nest/ui/switch/switch.property.ts","../../../../lib/ng-nest/ui/switch/switch.component.ts","../../../../lib/ng-nest/ui/switch/switch.component.html","../../../../lib/ng-nest/ui/switch/switch.module.ts","../../../../lib/ng-nest/ui/switch/ng-nest-ui-switch.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\nimport { XFormControlFunction, XFormOption } from '@ng-nest/ui/base-form';\r\nimport { XToBoolean, XToCssPixelValue } from '@ng-nest/ui/core';\r\nimport type { XAlign, XBoolean, XDirection, XJustify, XNumber, XSize, XTemplate } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Switch\r\n * @selector x-switch\r\n * @decorator component\r\n */\r\nexport const XSwitchPrefix = 'x-switch';\r\nconst X_SWITCH_CONFIG_NAME = 'switch';\r\n\r\n/**\r\n * Switch Property\r\n */\r\n@Component({ selector: `${XSwitchPrefix}-property`, template: '' })\r\nexport class XSwitchProperty extends XFormControlFunction(X_SWITCH_CONFIG_NAME) {\r\n  /**\r\n   * @zh_CN 显示加载中\r\n   * @en_US Show loading\r\n   */\r\n  readonly loading = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n  /**\r\n   * @zh_CN 手动控制\r\n   * @en_US Manual control\r\n   */\r\n  readonly manual = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n  /**\r\n   * @zh_CN 显示文字或者自定义模版（开启状态）\r\n   * @en_US Display text or custom template (open state)\r\n   */\r\n  readonly checkedText = input<XTemplate>();\r\n  /**\r\n   * @zh_CN 显示文字或者自定义模版（关闭状态）\r\n   * @en_US Display text or custom template (closed)\r\n   */\r\n  readonly unCheckedText = input<XTemplate>();\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 Label\r\n   */\r\n  override readonly label = input<XTemplate>('');\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 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\r\n/**\r\n * Switch Option\r\n */\r\nexport interface XSwitchOption extends XFormOption {\r\n  /**\r\n   * @zh_CN 显示加载中\r\n   * @en_US Show loading\r\n   */\r\n  loading?: boolean;\r\n  /**\r\n   * @zh_CN 手动控制\r\n   * @en_US Manual control\r\n   */\r\n  manual?: boolean;\r\n  /**\r\n   * @zh_CN 显示文字或者自定义模版（开启状态）\r\n   * @en_US Display text or custom template (open state)\r\n   */\r\n  checkedText?: XTemplate;\r\n  /**\r\n   * @zh_CN 显示文字或者自定义模版（关闭状态）\r\n   * @en_US Display text or custom template (closed)\r\n   */\r\n  unCheckedText?: XTemplate;\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 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 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","import { Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, viewChild, computed } from '@angular/core';\r\nimport { XSwitchProperty, XSwitchPrefix } from './switch.property';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\nimport { NgClass } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { XLoadingComponent } from '@ng-nest/ui/loading';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\n\r\n@Component({\r\n  selector: `${XSwitchPrefix}`,\r\n  imports: [NgClass, FormsModule, ReactiveFormsModule, XLoadingComponent, XOutletDirective],\r\n  templateUrl: './switch.component.html',\r\n  styleUrls: ['./switch.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  providers: [XValueAccessor(XSwitchComponent)]\r\n})\r\nexport class XSwitchComponent extends XSwitchProperty {\r\n  switch = viewChild.required<ElementRef<HTMLElement>>('switch');\r\n\r\n  classMap = computed(() => ({\r\n    [`${XSwitchPrefix}-${this.size()}`]: !!this.size(),\r\n    [`x-justify-${this.justify()}`]: !!this.justify(),\r\n    [`x-align-${this.align()}`]: !!this.align(),\r\n    [`x-direction-${this.direction()}`]: !!this.direction()\r\n  }));\r\n  labelMapSignal = computed(() => ({\r\n    [`x-text-align-${this.labelAlign()}`]: !!this.labelAlign()\r\n  }));\r\n\r\n  switchClick() {\r\n    if (this.disabledComputed() || this.loading() || this.manual()) return;\r\n    this.value.update((x) => !x);\r\n    if (this.onChange) this.onChange(this.value());\r\n  }\r\n}\r\n","<div\r\n  #switch\r\n  class=\"x-switch\"\r\n  [ngClass]=\"classMap()\"\r\n  [class.x-switch-loading]=\"loading()\"\r\n  [class.x-flex]=\"justify() || align() || direction()\"\r\n  [class.x-checked]=\"value()\"\r\n  [class.x-required]=\"requiredIsEmpty()\"\r\n  [class.x-disabled]=\"disabledComputed()\"\r\n  [class.x-invalid]=\"invalid()\"\r\n>\r\n  @if (label()) {\r\n    <label\r\n      [class.x-switch-label-required]=\"requiredComputed()\"\r\n      [style.width]=\"labelWidth()\"\r\n      [ngClass]=\"labelMapSignal()\"\r\n      *xOutlet=\"label()\"\r\n    >\r\n      {{ label() }}\r\n    </label>\r\n  }\r\n  <div class=\"x-switch-row\">\r\n    <div class=\"x-switch-slider\" (click)=\"switchClick()\">\r\n      <div class=\"x-switch-handle\">\r\n        <div class=\"x-switch-spinner\" [x-loading]=\"loading()\" [size]=\"size()\"></div>\r\n      </div>\r\n      <div class=\"x-switch-text\">\r\n        @if (value()) {\r\n          <ng-container *xOutlet=\"checkedText()\">{{ checkedText() }}</ng-container>\r\n        } @else {\r\n          <ng-container *xOutlet=\"unCheckedText()\">{{ unCheckedText() }}</ng-container>\r\n        }\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XSwitchComponent } from './switch.component';\r\n\r\n@NgModule({\r\n  exports: [XSwitchComponent],\r\n  imports: [XSwitchComponent]\r\n})\r\nexport class XSwitchModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}