{"version":3,"file":"skeleton.mjs","sources":["../../../../../../../packages/components/skeleton/src/skeleton.tsx"],"sourcesContent":["import { type ExtractPropTypes, type PropType, defineComponent } from 'vue'\n\n// Utils\nimport {\n  type Numeric,\n  addUnit,\n  makeNumericProp,\n  makeStringProp,\n  numericProp,\n  truthProp,\n} from '@xzx-design/utils'\n\n// Components\nimport { useNamespace } from '@xzx-design/hooks'\nimport SkeletonTitle from './skeleton-title'\nimport SkeletonAvatar from './skeleton-avatar'\nimport SkeletonParagraph, { DEFAULT_ROW_WIDTH } from './skeleton-paragraph'\n\n// Types\nimport type { SkeletonAvatarShape } from './skeleton-avatar'\n\nconst DEFAULT_LAST_ROW_WIDTH = '60%'\n\nexport const skeletonProps = {\n  row: makeNumericProp(0),\n  round: Boolean,\n  title: Boolean,\n  titleWidth: numericProp,\n  avatar: Boolean,\n  avatarSize: numericProp,\n  avatarShape: makeStringProp<SkeletonAvatarShape>('round'),\n  loading: truthProp,\n  animate: truthProp,\n  rowWidth: {\n    type: [Number, String, Array] as PropType<Numeric | Numeric[]>,\n    default: DEFAULT_ROW_WIDTH,\n  },\n}\n\nexport type SkeletonProps = ExtractPropTypes<typeof skeletonProps>\n\nconst name = 'XzxSkeleton'\n\nexport default defineComponent({\n  name,\n  __name: name,\n  inheritAttrs: false,\n  props: skeletonProps,\n  setup(props, { slots, attrs }) {\n    const { bem } = useNamespace('skeleton')\n    const renderAvatar = () => {\n      if (props.avatar) {\n        return (\n          <SkeletonAvatar\n            avatarShape={props.avatarShape}\n            avatarSize={props.avatarSize}\n          />\n        )\n      }\n    }\n\n    const renderTitle = () => {\n      if (props.title) {\n        return (\n          <SkeletonTitle round={props.round} titleWidth={props.titleWidth} />\n        )\n      }\n    }\n\n    const getRowWidth = (index: number) => {\n      const { rowWidth } = props\n\n      if (rowWidth === DEFAULT_ROW_WIDTH && index === +props.row - 1) {\n        return DEFAULT_LAST_ROW_WIDTH\n      }\n\n      if (Array.isArray(rowWidth)) {\n        return rowWidth[index]\n      }\n\n      return rowWidth\n    }\n\n    const renderRows = () =>\n      Array.from({ length: +props.row })\n        .fill('')\n        .map((_, i) => (\n          <SkeletonParagraph\n            key={i}\n            round={props.round}\n            rowWidth={addUnit(getRowWidth(i))}\n          />\n        ))\n\n    const renderContents = () => {\n      if (slots.template) {\n        return slots.template()\n      }\n\n      return (\n        <>\n          {renderAvatar()}\n          <div class={bem('content')}>\n            {renderTitle()}\n            {renderRows()}\n          </div>\n        </>\n      )\n    }\n\n    return () => {\n      if (!props.loading) {\n        return slots.default?.()\n      }\n\n      return (\n        <div\n          class={bem({ animate: props.animate, round: props.round })}\n          {...attrs}\n        >\n          {renderContents()}\n        </div>\n      )\n    }\n  },\n})\n"],"names":["DEFAULT_LAST_ROW_WIDTH","skeletonProps","row","makeNumericProp","round","Boolean","title","titleWidth","numericProp","avatar","avatarSize","avatarShape","makeStringProp","loading","truthProp","animate","rowWidth","type","Number","String","Array","default","DEFAULT_ROW_WIDTH","name","defineComponent","__name","inheritAttrs","props","setup","slots","attrs","bem","useNamespace","renderAvatar","_createVNode","SkeletonAvatar","renderTitle","SkeletonTitle","getRowWidth","index","isArray","renderRows","from","length","fill","map","_","i","SkeletonParagraph","addUnit","renderContents","template","_Fragment","_mergeProps"],"mappings":"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"}