{"version":3,"file":"ng-nest-ui-skeleton.mjs","sources":["../../../../lib/ng-nest/ui/skeleton/skeleton.property.ts","../../../../lib/ng-nest/ui/skeleton/skeleton.component.ts","../../../../lib/ng-nest/ui/skeleton/skeleton.component.html","../../../../lib/ng-nest/ui/skeleton/skeleton.module.ts","../../../../lib/ng-nest/ui/skeleton/ng-nest-ui-skeleton.ts"],"sourcesContent":["import { XPropertyFunction, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, input } from '@angular/core';\r\nimport type { XStyle, XBoolean } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Skeleton\r\n * @selector x-skeleton\r\n * @decorator component\r\n */\r\nexport const XSkeletonPrefix = 'x-skeleton';\r\nconst X_SKELETON_CONFIG_NAME = 'skeleton';\r\n\r\n/**\r\n * @zh_CN 骨架默认数据\r\n * @en_US Skeleton default data\r\n */\r\nexport const XSkeletonData: XSkeletonRow[] = [\r\n  { cols: [{ width: '10rem', type: 'title' }] },\r\n  { cols: [{}] },\r\n  { cols: [{}] },\r\n  { cols: [{ span: 16 }] }\r\n];\r\n\r\n/**\r\n * Skeleton Property\r\n */\r\n@Component({ selector: `${XSkeletonPrefix}-property`, template: '' })\r\nexport class XSkeletonProperty extends XPropertyFunction(X_SKELETON_CONFIG_NAME) {\r\n  /**\r\n   * @zh_CN 骨架数据\r\n   * @en_US Skeleton data\r\n   */\r\n  readonly data = input<XSkeletonRow[]>(XSkeletonData);\r\n  /**\r\n   * @zh_CN 加载中\r\n   * @en_US Loading\r\n   */\r\n  readonly loading = input<boolean, XBoolean>(true, { transform: XToBoolean });\r\n  /**\r\n   * @zh_CN 激活动画\r\n   * @en_US Activate animation\r\n   */\r\n  readonly active = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n  /**\r\n   * @zh_CN 显示边框\r\n   * @en_US Show border\r\n   */\r\n  readonly border = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 行\r\n * @en_US Row\r\n */\r\nexport interface XSkeletonRow {\r\n  /**\r\n   * @zh_CN 列\r\n   * @en_US Column\r\n   */\r\n  cols?: XSkeletonCol[];\r\n  /**\r\n   * @zh_CN flex 布局\r\n   * @en_US flex layout\r\n   */\r\n  flex?: boolean;\r\n  /**\r\n   * @zh_CN 列间距\r\n   * @en_US Column spacing\r\n   */\r\n  space?: string;\r\n  /**\r\n   * @zh_CN 外边距\r\n   * @en_US Margin\r\n   */\r\n  margin?: string;\r\n  /**\r\n   * @zh_CN 样式\r\n   * @en_US Style\r\n   */\r\n  style?: XStyle;\r\n}\r\n\r\n/**\r\n * @zh_CN 列\r\n * @en_US Column\r\n */\r\nexport interface XSkeletonCol {\r\n  /**\r\n   * @zh_CN 24栅格布局，列占的宽度\r\n   * @en_US 24 grid layout, column width\r\n   */\r\n  span?: number;\r\n  /**\r\n   * @zh_CN 宽度\r\n   * @en_US Width\r\n   */\r\n  width?: string;\r\n  /**\r\n   * @zh_CN 高度\r\n   * @en_US Height\r\n   */\r\n  height?: string;\r\n  /**\r\n   * @zh_CN 列类型\r\n   * @en_US Column type\r\n   */\r\n  type?: XSkeletonType;\r\n  /**\r\n   * @zh_CN 子集\r\n   * @en_US Rows\r\n   */\r\n  rows?: XSkeletonRow[];\r\n  /**\r\n   * @zh_CN 样式\r\n   * @en_US Style\r\n   */\r\n  style?: XStyle;\r\n}\r\n\r\n/**\r\n * @zh_CN 列类型\r\n * @en_US Column type\r\n */\r\nexport type XSkeletonType = 'title' | 'img' | 'avatar' | 'transparent';\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, inject, computed } from '@angular/core';\r\nimport { XSkeletonPrefix, XSkeletonProperty } from './skeleton.property';\r\nimport { DOCUMENT, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { XColComponent, XRowComponent } from '@ng-nest/ui/layout';\r\nimport { XComputedStyle, XToCssPx } from '@ng-nest/ui/core';\r\n\r\n@Component({\r\n  selector: `${XSkeletonPrefix}`,\r\n  imports: [NgClass, NgTemplateOutlet, NgStyle, XRowComponent, XColComponent],\r\n  templateUrl: './skeleton.component.html',\r\n  styleUrls: ['./skeleton.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XSkeletonComponent extends XSkeletonProperty {\r\n  private document = inject(DOCUMENT);\r\n  private fontSize = computed(() => parseFloat(XComputedStyle(this.document.documentElement, 'font-size')));\r\n\r\n  toCssPx(value: string) {\r\n    if (!value) return NaN;\r\n    return XToCssPx(value, this.fontSize());\r\n  }\r\n}\r\n","@if (loading()) {\r\n  <div #skeleton class=\"x-skeleton\" [class.x-skeleton-active]=\"active()\" [class.x-skeleton-border]=\"border()\">\r\n    <ng-container *ngTemplateOutlet=\"rowsTpl; context: { rows: data() }\"></ng-container>\r\n  </div>\r\n} @else {\r\n  <ng-content></ng-content>\r\n}\r\n\r\n<ng-template #rowsTpl let-rows=\"rows\">\r\n  @for (row of rows; track row) {\r\n    <x-row [space]=\"row.space\" [justify]=\"row.flex ? 'start' : undefined\" [ngStyle]=\"row.style\">\r\n      @for (col of row.cols; track col) {\r\n        <x-col\r\n          [span]=\"col.span\"\r\n          [inherit]=\"col.width || col.height ? true : false\"\r\n          [ngStyle]=\"col.style\"\r\n          [style.padding-top.px]=\"border() && toCssPx(row.space) / 2\"\r\n          [style.padding-bottom.px]=\"border() && toCssPx(row.space) / 2\"\r\n          [ngClass]=\"{\r\n            title: col.type === 'title',\r\n            img: col.type === 'img',\r\n            avatar: col.type === 'avatar',\r\n            transparent: col.type === 'transparent',\r\n            'has-child': col.rows\r\n          }\"\r\n        >\r\n          <div [style.width]=\"col.width\" [style.height]=\"col.height\">\r\n            @if (col.rows) {\r\n              <ng-container *ngTemplateOutlet=\"rowsTpl; context: { rows: col.rows }\"></ng-container>\r\n            }\r\n          </div>\r\n        </x-col>\r\n      }\r\n    </x-row>\r\n  }\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XSkeletonComponent } from './skeleton.component';\r\n\r\n@NgModule({\r\n  exports: [XSkeletonComponent],\r\n  imports: [XSkeletonComponent]\r\n})\r\nexport class XSkeletonModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}