diff --git a/docs/content/docs/2.components/1.basic/08.divider.md b/docs/content/docs/2.components/1.basic/08.divider.md index 3dad0ed..b9cc40c 100644 --- a/docs/content/docs/2.components/1.basic/08.divider.md +++ b/docs/content/docs/2.components/1.basic/08.divider.md @@ -1,7 +1,6 @@ --- title: "Divider 分割线" description: "用于分隔内容的分割线组件" -badge: Dev authors: - name: sKy username: skiyee @@ -10,11 +9,214 @@ authors: target: _blank links: - label: Source - icon: radix-icons:github-logo - to: https://github.com/skiyee/ui/blob/main/uni-ui/src/components/sk-divider.vue + icon: i-radix-icons:github-logo + to: https://github.com/skiyee/ui/blob/main/packages/skiyee-uni-ui/src/components/sk-divider.vue target: _blank --- -::warning -该组件目前处于开发阶段,诚挚邀请开发者们访问 [GitHub仓库](https://github.com/skiyee/ui){:target="_blank"} 参与技术讨论或提交贡献 -:: \ No newline at end of file +::CodePreview{path="/pages-basic/divider/base" height="180"} + + +```vue + +``` + + +:: + +## 用法 + +### Text 文本 + +| Prop | 类型 | 默认值 | 描述 | +|--------|--------------------|--------|------------------| +| `text` | `string \| number` | - | 通过属性快速设置文本内容 | + +::tip +也可以通过 [默认插槽 default](#slots) 自定义任意内容(图标、徽标或更复杂的节点) +:: + +::CodePreview{path="/pages-basic/divider/text" height="240"} + + +```vue + +``` + + +:: + +### Content Position 文本位置 + +| Prop | 类型 | 默认值 | 描述 | +|--------------------|----------------------------|----------|------------------------------------| +| `contentPosition` | `"start" \| "center" \| "end"` | `center` | 控制文本相对整条横向分割线的位置 | + +::CodePreview{path="/pages-basic/divider/position" height="240"} + + +```vue + +``` + + +:: + +### Dashed 虚线 + +| Prop | 类型 | 默认值 | 描述 | +|----------|-----------|---------|----------------| +| `dashed` | `boolean` | `false` | 是否渲染为虚线 | + +::CodePreview{path="/pages-basic/divider/dashed" height="220"} + + +```vue + +``` + + +:: + +### Color 颜色 + +| Prop | 类型 | 默认值 | 描述 | +|-------------|----------|--------|--------------------------------------| +| `color` | `string` | - | 设置线条和默认文本的颜色 | +| `textColor` | `string` | - | 仅覆盖文本颜色,优先级高于 `color` | + +::CodePreview{path="/pages-basic/divider/color" height="260"} + + +```vue + +``` + + +:: + +### Thickness 粗细 + +| Prop | 类型 | 默认值 | 描述 | +|-------------|--------------------|--------|-------------------------------------| +| `thickness` | `string \| number` | `1px` | 调整线条粗细,支持数值或任意 CSS 单位 | + +::tip +若需要完全按照 `thickness` 控制粗细,请先将 `hairline` 设置为 `false`。 +:: + +::CodePreview{path="/pages-basic/divider/thickness" height="240"} + + +```vue + +``` + + +:: + +### Hairline 发丝线 + +| Prop | 类型 | 默认值 | 描述 | +|-----------|-----------|--------|----------------------------------| +| `hairline` | `boolean` | `true` | 是否启用 1px 发丝线(细线)样式 | + +::CodePreview{path="/pages-basic/divider/hairline" height="240"} + + +```vue + +``` + + +:: + +### Orientation 方向 + +| Prop | 类型 | 默认值 | 描述 | +|---------------|----------------------------|-------------|--------------------------| +| `orientation` | `"horizontal" \| "vertical"` | `horizontal` | 选择横向或纵向分割线 | +| `length` | `string \| number` | - | 纵向分割线高度(可选) | + +::CodePreview{path="/pages-basic/divider/vertical" height="220"} + + +```vue + +``` + + +:: + +## Props 总览 + +| Prop | 描述 | +|------------------|-------------------------------------------------| +| `text` | 设置文本内容,优先级低于插槽 | +| `color` | 控制线条和默认文本颜色 | +| `textColor` | 单独覆盖文本颜色 | +| `orientation` | 横向或纵向分割线 | +| `contentPosition`| 控制横向文本位置 | +| `dashed` | 是否渲染为虚线 | +| `hairline` | 是否启用 1px 发丝线样式,关闭后可配合 `thickness` | +| `thickness` | 控制线条粗细(关闭发丝线后生效) | +| `length` | 纵向分割线高度 | +| `clax` | 传入 `@skiyee/ucv` 生成的额外类名 | + +## Slots + +| Slot | 描述 | +|-----------|--------------------| +| `default` | 自定义文案或内容 | diff --git a/examples/uni/src/pages-basic/divider/base.vue b/examples/uni/src/pages-basic/divider/base.vue new file mode 100644 index 0000000..5f7ddc9 --- /dev/null +++ b/examples/uni/src/pages-basic/divider/base.vue @@ -0,0 +1,6 @@ + diff --git a/examples/uni/src/pages-basic/divider/color.vue b/examples/uni/src/pages-basic/divider/color.vue new file mode 100644 index 0000000..055c856 --- /dev/null +++ b/examples/uni/src/pages-basic/divider/color.vue @@ -0,0 +1,7 @@ + diff --git a/examples/uni/src/pages-basic/divider/dashed.vue b/examples/uni/src/pages-basic/divider/dashed.vue new file mode 100644 index 0000000..0a4e488 --- /dev/null +++ b/examples/uni/src/pages-basic/divider/dashed.vue @@ -0,0 +1,6 @@ + diff --git a/examples/uni/src/pages-basic/divider/hairline.vue b/examples/uni/src/pages-basic/divider/hairline.vue new file mode 100644 index 0000000..8e2653e --- /dev/null +++ b/examples/uni/src/pages-basic/divider/hairline.vue @@ -0,0 +1,7 @@ + diff --git a/examples/uni/src/pages-basic/divider/position.vue b/examples/uni/src/pages-basic/divider/position.vue new file mode 100644 index 0000000..6366709 --- /dev/null +++ b/examples/uni/src/pages-basic/divider/position.vue @@ -0,0 +1,7 @@ + diff --git a/examples/uni/src/pages-basic/divider/text.vue b/examples/uni/src/pages-basic/divider/text.vue new file mode 100644 index 0000000..1a4bf78 --- /dev/null +++ b/examples/uni/src/pages-basic/divider/text.vue @@ -0,0 +1,36 @@ + diff --git a/examples/uni/src/pages-basic/divider/thickness.vue b/examples/uni/src/pages-basic/divider/thickness.vue new file mode 100644 index 0000000..96608ba --- /dev/null +++ b/examples/uni/src/pages-basic/divider/thickness.vue @@ -0,0 +1,7 @@ + diff --git a/examples/uni/src/pages-basic/divider/vertical.vue b/examples/uni/src/pages-basic/divider/vertical.vue new file mode 100644 index 0000000..a58e645 --- /dev/null +++ b/examples/uni/src/pages-basic/divider/vertical.vue @@ -0,0 +1,9 @@ + diff --git a/examples/uni/src/pages.json b/examples/uni/src/pages.json index bb82f30..5365545 100644 --- a/examples/uni/src/pages.json +++ b/examples/uni/src/pages.json @@ -107,6 +107,38 @@ "path": "button/variant", "type": "page" }, + { + "path": "divider/base", + "type": "page" + }, + { + "path": "divider/color", + "type": "page" + }, + { + "path": "divider/dashed", + "type": "page" + }, + { + "path": "divider/hairline", + "type": "page" + }, + { + "path": "divider/position", + "type": "page" + }, + { + "path": "divider/text", + "type": "page" + }, + { + "path": "divider/thickness", + "type": "page" + }, + { + "path": "divider/vertical", + "type": "page" + }, { "path": "icon/base", "type": "page" @@ -733,4 +765,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/examples/uni/types/components.d.ts b/examples/uni/types/components.d.ts index 9a8dd13..1f2d5fd 100644 --- a/examples/uni/types/components.d.ts +++ b/examples/uni/types/components.d.ts @@ -12,6 +12,7 @@ declare module 'vue' { SkCheckbox: typeof import('@skiyee/uni-ui/components/sk-checkbox.vue')['default'] SkCheckboxGroup: typeof import('@skiyee/uni-ui/components/sk-checkbox-group.vue')['default'] SkDialog: typeof import('@skiyee/uni-ui/components/sk-dialog.vue')['default'] + SkDivider: typeof import('@skiyee/uni-ui/components/sk-divider.vue')['default'] SkField: typeof import('@skiyee/uni-ui/components/sk-field.vue')['default'] SkForm: typeof import('@skiyee/uni-ui/components/sk-form.vue')['default'] SkIcon: typeof import('@skiyee/uni-ui/components/sk-icon.vue')['default'] diff --git a/examples/uni/types/pages.d.ts b/examples/uni/types/pages.d.ts index 8cb447c..f3ce86d 100644 --- a/examples/uni/types/pages.d.ts +++ b/examples/uni/types/pages.d.ts @@ -27,6 +27,14 @@ interface NavigateToOptions { "/pages-basic/button/size" | "/pages-basic/button/usage" | "/pages-basic/button/variant" | + "/pages-basic/divider/base" | + "/pages-basic/divider/color" | + "/pages-basic/divider/dashed" | + "/pages-basic/divider/hairline" | + "/pages-basic/divider/position" | + "/pages-basic/divider/text" | + "/pages-basic/divider/thickness" | + "/pages-basic/divider/vertical" | "/pages-basic/icon/base" | "/pages-basic/icon/color" | "/pages-basic/icon/name" | diff --git a/packages/skiyee-uni-ui/src/components/sk-divider.vue b/packages/skiyee-uni-ui/src/components/sk-divider.vue new file mode 100644 index 0000000..dbe24af --- /dev/null +++ b/packages/skiyee-uni-ui/src/components/sk-divider.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/packages/skiyee-uni-ui/src/styles/index.ts b/packages/skiyee-uni-ui/src/styles/index.ts index cd3dee8..0d0dd6d 100644 --- a/packages/skiyee-uni-ui/src/styles/index.ts +++ b/packages/skiyee-uni-ui/src/styles/index.ts @@ -21,6 +21,9 @@ export { SkCheckboxGroupUcv } from './sk-checkbox-group' export type { SkDialogUcvProps } from './sk-dialog' export { SkDialogUcv } from './sk-dialog' +export type { SkDividerUcvProps } from './sk-divider' +export { SkDividerUcv } from './sk-divider' + export type { SkFieldUcvProps } from './sk-field' export { SkFieldUcv } from './sk-field' diff --git a/packages/skiyee-uni-ui/src/styles/sk-divider.ts b/packages/skiyee-uni-ui/src/styles/sk-divider.ts new file mode 100644 index 0000000..6ed678a --- /dev/null +++ b/packages/skiyee-uni-ui/src/styles/sk-divider.ts @@ -0,0 +1,83 @@ +// @unocss-include +/** + * sk-divider 由 @skiyee/ucv 生成的样式组件 + * + * @author xiaoxiaohuayu + * @github https://github.com/xiaoxiaohuayu + * + * @example + * ```ts + * const classes = SkDividerUcv(props) + * ``` + * + * @see 更多示例请参考文档: https://skiyee-ui.netlify.app/docs/components/basic/divider + */ + +import type { InferProps } from '@skiyee/ucv' + +import { ucv } from '@skiyee/ucv' + +export const SkDividerUcv = ucv({ + element: { + root: 'sk-element:w-full flex items-center text-description sk-unit:py-12', + leftLine: 'flex-1 border-t border-solid border-subtle h-0', + rightLine: 'flex-1 border-t border-solid border-subtle h-0', + content: 'sk-unit:px-12 text-body-small text-secondary whitespace-nowrap', + vertical: 'w-0 border-l border-solid border-subtle self-stretch', + }, + variants: { + orientation: { + horizontal: { + root: 'w-full flex-row', + vertical: 'hidden', + leftLine: 'flex-1', + rightLine: 'flex-1', + }, + vertical: { + root: 'inline-flex flex-col items-center gap-2 sk-unit:px-8', + leftLine: 'hidden', + rightLine: 'hidden', + content: 'sk-unit:py-8 text-center', + vertical: 'block', + }, + }, + dashed: { + true: { + leftLine: 'border-dashed', + rightLine: 'border-dashed', + vertical: 'border-dashed', + }, + false: {}, + }, + contentPosition: { + start: { + leftLine: 'hidden', + content: 'pl-0', + rightLine: 'flex-1', + }, + center: { + leftLine: 'flex-1', + rightLine: 'flex-1', + }, + end: { + rightLine: 'hidden', + content: 'pr-0', + leftLine: 'flex-1', + }, + }, + hasContent: { + true: {}, + false: { + content: 'hidden', + }, + }, + }, + defaults: { + orientation: 'horizontal', + contentPosition: 'center', + dashed: false, + hasContent: true, + }, +}) + +export type SkDividerUcvProps = InferProps