init
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import fs from "fs";
|
||||
import MarkdownIt from "markdown-it";
|
||||
import { RuleBlock } from "markdown-it/lib/parser_block";
|
||||
|
||||
export default (md: MarkdownIt): void => {
|
||||
const parser: RuleBlock = (state, startLine, endLine, silent) => {
|
||||
const CH = "<".charCodeAt(0);
|
||||
const pos = state.bMarks[startLine] + state.tShift[startLine];
|
||||
const max = state.eMarks[startLine];
|
||||
if (state.sCount[startLine] - state.blkIndent >= 4) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < 3; ++i) {
|
||||
const ch = state.src.charCodeAt(pos + i);
|
||||
if (ch !== CH || pos + i >= max) return false;
|
||||
}
|
||||
if (silent) {
|
||||
return true;
|
||||
}
|
||||
const start = pos + 3;
|
||||
const end = state.skipSpacesBack(max, pos);
|
||||
const rawPath = state.src
|
||||
.slice(start, end)
|
||||
.trim()
|
||||
.replace(/^@/, process.cwd());
|
||||
const content = fs.existsSync(rawPath)
|
||||
? fs.readFileSync(rawPath).toString()
|
||||
: "Not found: " + rawPath;
|
||||
const meta = rawPath.replace(rawPath, "");
|
||||
state.line = startLine + 1;
|
||||
const token = state.push("fence", "code", 0);
|
||||
token.info = rawPath.split(".").pop() + meta;
|
||||
token.content = content;
|
||||
token.markup = "```";
|
||||
token.map = [startLine, startLine + 1];
|
||||
return true;
|
||||
};
|
||||
md.block.ruler.before("fence", "snippet", parser);
|
||||
};
|
||||
@@ -0,0 +1,138 @@
|
||||
.layui-form-item {
|
||||
margin-bottom: 20px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.layui-form-item-right .layui-form-label {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.layui-form-item-left .layui-form-label {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.layui-form-item-top .layui-form-label {
|
||||
text-align: left;
|
||||
float: none;
|
||||
}
|
||||
|
||||
.layui-form-item-top > div {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.layui-form-item:after {
|
||||
content: "\20";
|
||||
clear: both;
|
||||
display: block;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.layui-form-label {
|
||||
float: left;
|
||||
display: block;
|
||||
width: 95px;
|
||||
padding-right: 15px;
|
||||
line-height: 38px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.layui-form-label-col {
|
||||
display: block;
|
||||
float: none;
|
||||
padding: 9px 0;
|
||||
line-height: 20px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-inline {
|
||||
margin-bottom: 5px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.layui-input-block {
|
||||
margin-left: 110px;
|
||||
min-height: 36px;
|
||||
}
|
||||
|
||||
.layui-input-inline {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-input-inline {
|
||||
float: left;
|
||||
width: 190px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.layui-form-text .layui-input-inline {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.layui-form-mid {
|
||||
float: left;
|
||||
display: block;
|
||||
padding: 9px 0 !important;
|
||||
line-height: 20px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.layui-form-danger + .layui-form-select .layui-input,
|
||||
.layui-form-danger:focus {
|
||||
border-color: #ff5722 !important;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-form-checkbox {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-form-checkbox[lay-skin="primary"] {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.layui-required {
|
||||
color: #ff5722;
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.layui-form .layui-form-item {
|
||||
.layui-input-block,
|
||||
.layui-input-inline {
|
||||
.layui-form-danger {
|
||||
&, .layui-textarea, .layui-tag-input, .layui-input {
|
||||
border-color: #ff5722 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.layui-error-message {
|
||||
color: #ff5722;
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
padding-top: 5px;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.layui-error-message-anim {
|
||||
-ms-transform-origin: 0 0;
|
||||
-webkit-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
-webkit-animation: layui-top-show-anim 0.3s ease 1;
|
||||
animation: layui-top-show-anim 0.3s ease 1;
|
||||
}
|
||||
|
||||
@keyframes layui-top-show-anim {
|
||||
0% {
|
||||
opacity: 0.3;
|
||||
transform: rotateX(45deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: rotateX(0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
::: anchor
|
||||
:::
|
||||
|
||||
::: title 基本介绍
|
||||
:::
|
||||
|
||||
::: describe 用来代表用户或事物,支持图片、图标或字符展示。
|
||||
:::
|
||||
|
||||
::: title 基础使用
|
||||
:::
|
||||
|
||||
::: demo 使用 `lay-avatar` 标签, 创建头像
|
||||
|
||||
<template>
|
||||
<lay-space>
|
||||
<lay-avatar :src="src"></lay-avatar>
|
||||
<lay-avatar> Bai </lay-avatar>
|
||||
<lay-avatar></lay-avatar>
|
||||
<lay-avatar icon="layui-icon-face-smile"></lay-avatar>
|
||||
</lay-space>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
|
||||
const src = ref("https://portrait.gitee.com/uploads/avatars/user/1611/4835367_Jmysy_1578975358.png")
|
||||
|
||||
return {
|
||||
src
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
:::
|
||||
|
||||
::: title 圆角头像
|
||||
:::
|
||||
|
||||
::: demo 通过 `radius` 属性, 开启头像圆角。
|
||||
|
||||
<template>
|
||||
<lay-avatar :src="src" radius></lay-avatar>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
export default {
|
||||
setup() {
|
||||
|
||||
const src = "https://portrait.gitee.com/uploads/avatars/user/1611/4835367_Jmysy_1578975358.png"
|
||||
|
||||
return {
|
||||
src
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
:::
|
||||
|
||||
::: title 尺寸大小
|
||||
:::
|
||||
|
||||
::: demo 通过 `size` 属性, 设置头像大小。
|
||||
|
||||
<template>
|
||||
<lay-avatar :src="src" size="xs"></lay-avatar>
|
||||
|
||||
<lay-avatar :src="src" size="sm"></lay-avatar>
|
||||
|
||||
<lay-avatar :src="src"></lay-avatar>
|
||||
|
||||
<lay-avatar :src="src" size="lg"></lay-avatar>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
|
||||
const src = "https://portrait.gitee.com/uploads/avatars/user/1611/4835367_Jmysy_1578975358.png"
|
||||
|
||||
return {
|
||||
src
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
:::
|
||||
|
||||
::: title 头像列表
|
||||
:::
|
||||
|
||||
::: demo 通过 `lay-avatar-list` 标签, 创建头像列表。
|
||||
|
||||
<template>
|
||||
<lay-avatar-list>
|
||||
<lay-avatar :src="src" radius></lay-avatar>
|
||||
<lay-avatar :src="src" radius></lay-avatar>
|
||||
<lay-avatar :src="src" radius></lay-avatar>
|
||||
<lay-avatar :src="src" radius></lay-avatar>
|
||||
<lay-avatar :src="src" radius></lay-avatar>
|
||||
</lay-avatar-list>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
|
||||
const src = "https://portrait.gitee.com/uploads/avatars/user/1611/4835367_Jmysy_1578975358.png"
|
||||
|
||||
return {
|
||||
src
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
:::
|
||||
|
||||
::: title Avatar 属性
|
||||
:::
|
||||
|
||||
::: table
|
||||
|
||||
| 属性 | 描述 | 可选值 |
|
||||
| ------ | ---- | -------------- |
|
||||
| src | 图源 | -- |
|
||||
| size | 尺寸 | `xs` `sm` `lg` |
|
||||
| radius | 圆形 | `true` `false` |
|
||||
| alt | 描述图像的替换文本 | -- |
|
||||
|
||||
:::
|
||||
|
||||
::: contributor avatar
|
||||
:::
|
||||
|
||||
::: previousNext avatar
|
||||
:::
|
||||
@@ -0,0 +1,44 @@
|
||||
import vue from "@vitejs/plugin-vue";
|
||||
import vueJsx from "@vitejs/plugin-vue-jsx";
|
||||
import Markdown from "vite-plugin-md";
|
||||
import container from "markdown-it-container";
|
||||
import preWrapper from "./pre-wrapper";
|
||||
import highlight from "./highlight";
|
||||
import snippet from "./snippet";
|
||||
import demo from "./create-demo";
|
||||
import createTitle from "./create-title";
|
||||
import createQuote from "./create-quote";
|
||||
import createDescribe from "./create-describe";
|
||||
import createTable from "./create-table";
|
||||
import createAnchor from "./create-anchor";
|
||||
import createPreviousNext from "./create-previous-next";
|
||||
import createContributor from "./create-contributor";
|
||||
|
||||
const plugins = [
|
||||
vue({
|
||||
include: [/\.vue$/, /\.md$/],
|
||||
}),
|
||||
vueJsx(),
|
||||
Markdown({
|
||||
markdownItOptions: {
|
||||
html: true,
|
||||
linkify: true,
|
||||
typographer: true,
|
||||
highlight,
|
||||
},
|
||||
markdownItSetup(md) {
|
||||
md.use(snippet)
|
||||
.use(preWrapper)
|
||||
.use(container, "demo", demo)
|
||||
.use(...createTable("table"))
|
||||
.use(...createQuote("quote"))
|
||||
.use(...createTitle("title"))
|
||||
.use(...createDescribe("describe"))
|
||||
.use(...createAnchor("anchor"))
|
||||
.use(...createPreviousNext("previousNext"))
|
||||
.use(...createContributor("contributor"));
|
||||
},
|
||||
}),
|
||||
] as any;
|
||||
|
||||
export default plugins;
|
||||
@@ -0,0 +1,92 @@
|
||||
::: anchor
|
||||
:::
|
||||
|
||||
::: title 基本介绍
|
||||
:::
|
||||
|
||||
::: describe 页面容器, 用于控制内容的边距。
|
||||
:::
|
||||
|
||||
::: title 普通容器
|
||||
:::
|
||||
|
||||
::: demo
|
||||
|
||||
<template>
|
||||
<lay-container>
|
||||
<div class="container-demo"></div>
|
||||
</lay-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
|
||||
return {
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.container-demo {
|
||||
width:100%;
|
||||
height: 300px;
|
||||
background: #79C48C;
|
||||
border-radius: 2px;
|
||||
}
|
||||
</style>
|
||||
|
||||
:::
|
||||
|
||||
::: title 流式容器
|
||||
:::
|
||||
|
||||
::: demo
|
||||
|
||||
<template>
|
||||
<lay-container fluid>
|
||||
<div class="container-demo"></div>
|
||||
</lay-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
|
||||
return {
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.container-demo {
|
||||
width:100%;
|
||||
height: 300px;
|
||||
background: #79C48C;
|
||||
}
|
||||
</style>
|
||||
|
||||
:::
|
||||
|
||||
::: title 容器属性
|
||||
:::
|
||||
|
||||
::: table
|
||||
|
||||
| 属性 | 描述 | 类型 | 默认值 | 可选值 |
|
||||
| ----- | ------ | -------------- |------ | -------------- |
|
||||
| fluid | 流模式 | `boolean` `string` | `flase` | `true` `false` |
|
||||
|
||||
:::
|
||||
|
||||
::: contributor container
|
||||
:::
|
||||
|
||||
::: previousNext container
|
||||
:::
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
export default {
|
||||
name: "RateHalfIcon",
|
||||
};
|
||||
</script>
|
||||
<script setup lang="ts">
|
||||
import LayIcon from "../component/icon/index";
|
||||
|
||||
const props = defineProps<{
|
||||
color?: string;
|
||||
size?: string;
|
||||
}>();
|
||||
</script>
|
||||
<template>
|
||||
<lay-icon
|
||||
:color="props.color"
|
||||
:size="props.size"
|
||||
type="layui-icon-rate-half"
|
||||
/>
|
||||
</template>
|
||||
Reference in New Issue
Block a user