From 9d4d39f10fcc9bd48c983f44ffd47fdcea7c520a Mon Sep 17 00:00:00 2001 From: 07akioni <07akioni2@gmail.com> Date: Fri, 16 Apr 2021 02:33:18 +0800 Subject: [PATCH] feat(ellipsis): clsPrefix --- src/ellipsis/index.ts | 1 + src/ellipsis/src/Ellipsis.tsx | 36 +++++++++++++++++------------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/ellipsis/index.ts b/src/ellipsis/index.ts index c7b5aa75b..1624ed519 100644 --- a/src/ellipsis/index.ts +++ b/src/ellipsis/index.ts @@ -1 +1,2 @@ export { default as NEllipsis } from './src/Ellipsis' +export type { EllipsisProps } from './src/Ellipsis' diff --git a/src/ellipsis/src/Ellipsis.tsx b/src/ellipsis/src/Ellipsis.tsx index 27039dbbe..a8157b853 100644 --- a/src/ellipsis/src/Ellipsis.tsx +++ b/src/ellipsis/src/Ellipsis.tsx @@ -1,24 +1,20 @@ -import { - defineComponent, - h, - ref, - PropType, - computed, - mergeProps, - ExtractPropTypes -} from 'vue' +import { defineComponent, h, ref, PropType, computed, mergeProps } from 'vue' import type { PopoverProps } from '../../popover/src/Popover' import { TooltipInst } from '../../tooltip/src/Tooltip' import { NTooltip } from '../../tooltip' -import { useTheme } from '../../_mixins' +import { useConfig, useTheme } from '../../_mixins' import type { ThemeProps } from '../../_mixins' +import type { ExtractPublicPropTypes } from '../../_utils' import { ellipsisLight } from '../styles' import type { EllipsisTheme } from '../styles' import style from './styles/index.cssr' -const lineClampClass = 'n-ellpisis--line-clamp' +function createLineClampClass (clsPrefix: string): string { + return `${clsPrefix}-ellpisis--line-clamp` +} const ellpisisProps = { + ...(useTheme.props as ThemeProps<EllipsisTheme>), expandTrigger: String as PropType<'click'>, lineClamp: [Number, String] as PropType<string | number>, tooltip: { @@ -27,22 +23,21 @@ const ellpisisProps = { } } as const -export type EllipsisProps = Partial<ExtractPropTypes<typeof ellpisisProps>> +export type EllipsisProps = ExtractPublicPropTypes<typeof ellpisisProps> export default defineComponent({ name: 'Ellipsis', inheritAttrs: false, - props: { - ...(useTheme.props as ThemeProps<EllipsisTheme>), - ...ellpisisProps - }, + props: ellpisisProps, setup (props, { slots, attrs }) { + const { mergedClsPrefix } = useConfig(props) const mergedTheme = useTheme( 'Ellipsis', 'ellipsis', style, ellipsisLight, - props + props, + mergedClsPrefix ) const triggerRef = ref<HTMLElement | null>(null) const tooltipRef = ref<TooltipInst | null>(null) @@ -96,8 +91,10 @@ export default defineComponent({ <span {...mergeProps(attrs, { class: [ - 'n-ellpisis', - props.lineClamp !== undefined ? lineClampClass : undefined + `${mergedClsPrefix.value}-ellpisis`, + props.lineClamp !== undefined + ? createLineClampClass(mergedClsPrefix.value) + : undefined ], style: ellpisisStyleRef.value })} @@ -110,6 +107,7 @@ export default defineComponent({ function syncEllipsisStyle (trigger: HTMLElement): void { if (!trigger) return const latestStyle = ellpisisStyleRef.value + const lineClampClass = createLineClampClass(mergedClsPrefix.value) if (props.lineClamp !== undefined) { if (!trigger.classList.contains(lineClampClass)) { trigger.classList.add(lineClampClass)