Commit a8eb6146 authored by Zhang Xiaojie's avatar Zhang Xiaojie

Initial commit

parents
!/.storybook
module.exports = {
root: true,
env: {
node: true,
es2021: true,
"vue/setup-compiler-macros": true,
},
extends: [
"eslint:recommended",
"@vue/prettier",
"@vue/typescript/recommended",
"plugin:vue/vue3-essential",
"plugin:storybook/recommended",
"plugin:markdown/recommended",
],
parserOptions: {
ecmaVersion: 2020,
},
rules: {
"no-console": "warn",
"@typescript-eslint/explicit-module-boundary-types": "off",
},
};
.DS_Store
node_modules
/dist
/docs
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Miscellaneous
.temp
.cache
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Storybook
storybook-static
const { loadConfigFromFile, mergeConfig } = require("vite");
const vueI18n = require("@intlify/vite-plugin-vue-i18n").default;
const eslintPlugin = require("vite-plugin-eslint").default;
const path = require("path");
module.exports = {
stories: ["../src/**/*.stories.@(js|ts)"],
addons: [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-a11y",
// "storybook-dark-mode",
{
name: "@storybook/addon-postcss",
options: {
postcssLoaderOptions: {
implementation: require("postcss"),
},
},
},
],
framework: "@storybook/vue3",
core: {
builder: "storybook-builder-vite",
},
typescript: {
check: false,
checkOptions: {},
reactDocgen: "react-docgen-typescript",
reactDocgenTypescriptOptions: {
shouldExtractLiteralValuesFromEnum: true,
propFilter: (prop) =>
prop.parent ? !/node_modules/.test(prop.parent.fileName) : true,
},
},
async viteFinal(previousConfig) {
const { config } = await loadConfigFromFile(
path.resolve(__dirname, "../vite.config.ts")
);
return mergeConfig(previousConfig, {
...config,
plugins: [
vueI18n({
include: path.resolve(__dirname, "../src/locales/**"),
compositionOnly: false,
runtimeOnly: false,
}),
eslintPlugin(),
],
});
},
};
// .storybook/manager.js
import { themes } from "@storybook/theming";
import { addons } from "@storybook/addons";
import mxmTheme from "./mxmTheme";
addons.setConfig({
isFullscreen: false,
showNav: true,
showPanel: true,
panelPosition: "right",
enableShortcuts: true,
isToolshown: true,
theme: themes.dark,
selectedPanel: undefined,
initialActive: "sidebar",
sidebar: {
showRoots: false,
collapsedRoots: ["other"],
},
toolbar: {
title: { hidden: false },
zoom: { hidden: false },
eject: { hidden: false },
copy: { hidden: false },
fullscreen: { hidden: false },
},
});
// .storybook/YourTheme.js
import { create } from "@storybook/theming";
// base: 'light' | 'dark';
// colorPrimary?: string;
// colorSecondary?: string;
// appBg?: string;
// appContentBg?: string;
// appBorderColor?: string;
// appBorderRadius?: number;
// fontBase?: string;
// fontCode?: string;
// textColor?: string;
// textInverseColor?: string;
// textMutedColor?: string;
// barTextColor?: string;
// barSelectedColor?: string;
// barBg?: string;
// inputBg?: string;
// inputBorder?: string;
// inputTextColor?: string;
// inputBorderRadius?: number;
// brandTitle?: string;
// brandUrl?: string;
// brandImage?: string;
// gridCellSize?: number;
export default create({
base: "light",
brandTitle: "MxM Web Components",
brandUrl: "http://www.baidu.com",
brandImage:"https://cdn.jsdelivr.net/gh/mxm-web-develop/mxm_materials@main/mxm_logo_black.png",
// colorPrimary: 'hotpink',
// colorSecondary: 'deepskyblue',
// // UI
appBg: "#F2F7F2",
appContentBg: "#FFFFFF",
appBorderColor: "#090C08",
appBorderRadius: 5,
// // Typography
// fontBase: '"Open Sans", sans-serif',
// fontCode: 'monospace',
// // Text colors
textColor: "#090C08",
textInverseColor: "#586F7C",
// // Toolbar default and active colors
// barTextColor: 'silver',
barSelectedColor: "#E89005",
barBg: "#E6EFE6",
// // Form colors
inputBg: "#E6EFE6",
inputBorder: "#2E3D29",
inputTextColor: "#090C08",
inputBorderRadius: 5,
// brandTitle: 'My custom storybook',
// brandUrl: 'https://example.com',
// brandImage: 'https://place-hold.it/350x150',
});
// .storybook/preview.js
import mxmTheme from "./mxmTheme";
import { themes } from "@storybook/theming";
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
docs: {
theme: themes.dark,
},
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
};
MIT License
Copyright (c) 2022 Miguel Bento
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
# MxM Vue3 的组件轮子工厂,支持storybook可视化,rollup treeshark打包发布流程化
import {
defineComponent,
openBlock,
createElementBlock,
createElementVNode,
toDisplayString,
computed,
normalizeClass,
unref,
normalizeStyle,
} from "vue";
const _hoisted_1 = { class: "w-40 h-32 bg-blue-300" };
const _hoisted_2 = { class: "divide-y-0 py-5" };
var script$1 = defineComponent({
props: {
header: { type: String, required: true, default: "card header" },
content: { type: String, required: false },
},
setup(__props) {
return (_ctx, _cache) => {
return (
openBlock(),
createElementBlock("div", _hoisted_1, [
createElementVNode(
"div",
_hoisted_2,
toDisplayString(__props.header),
1
),
createElementVNode(
"div",
null,
toDisplayString(__props.content ? __props.content : "没有内容"),
1
),
])
);
};
},
});
script$1.__file = "src/components/src/MxmCard/index.vue";
script$1.install = (app) => {
app.component(script$1.name, script$1);
};
var script = defineComponent({
props: {
label: { type: String, required: true },
primary: { type: Boolean, required: false, default: false },
backgroundColor: { type: String, required: false },
size: { type: String, required: true },
},
emits: ["click"],
setup(__props, { emit }) {
const props = __props;
const onClick = () => {
emit("click");
};
const classes = computed(() => ({
"storybook-button": true,
"storybook-button--primary": props.primary,
"storybook-button--secondary": !props.primary,
[`storybook-button--${props.size || "medium"}`]: true,
}));
const style = computed(() => ({
backgroundColor: props.backgroundColor,
}));
return (_ctx, _cache) => {
return (
openBlock(),
createElementBlock(
"button",
{
type: "button",
class: normalizeClass(unref(classes)),
onClick: onClick,
style: normalizeStyle(unref(style)),
},
toDisplayString(__props.label),
7
)
);
};
},
});
script.__scopeId = "data-v-53984b98";
script.__file = "src/components/src/BasicButton/index.vue";
script.install = (app) => {
app.component(script.name, script);
};
const components = [script$1, script];
const install = (app) => {
components.map((component) => app.component(component.name, component));
};
export { script as BasicButton, script$1 as MxmCard, install as default };
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
(function (global, factory) {
typeof exports === "object" && typeof module !== "undefined"
? factory(exports, require("vue"))
: typeof define === "function" && define.amd
? define(["exports", "vue"], factory)
: ((global =
typeof globalThis !== "undefined" ? globalThis : global || self),
factory((global.mxmui = {}), global.Vue));
})(this, function (exports, vue) {
"use strict";
const _hoisted_1 = { class: "w-40 h-32 bg-blue-300" };
const _hoisted_2 = { class: "divide-y-0 py-5" };
var script$1 = vue.defineComponent({
props: {
header: { type: String, required: true, default: "card header" },
content: { type: String, required: false },
},
setup(__props) {
return (_ctx, _cache) => {
return (
vue.openBlock(),
vue.createElementBlock("div", _hoisted_1, [
vue.createElementVNode(
"div",
_hoisted_2,
vue.toDisplayString(__props.header),
1
),
vue.createElementVNode(
"div",
null,
vue.toDisplayString(
__props.content ? __props.content : "没有内容"
),
1
),
])
);
};
},
});
script$1.__file = "src/components/src/MxmCard/index.vue";
script$1.install = (app) => {
app.component(script$1.name, script$1);
};
var script = vue.defineComponent({
props: {
label: { type: String, required: true },
primary: { type: Boolean, required: false, default: false },
backgroundColor: { type: String, required: false },
size: { type: String, required: true },
},
emits: ["click"],
setup(__props, { emit }) {
const props = __props;
const onClick = () => {
emit("click");
};
const classes = vue.computed(() => ({
"storybook-button": true,
"storybook-button--primary": props.primary,
"storybook-button--secondary": !props.primary,
[`storybook-button--${props.size || "medium"}`]: true,
}));
const style = vue.computed(() => ({
backgroundColor: props.backgroundColor,
}));
return (_ctx, _cache) => {
return (
vue.openBlock(),
vue.createElementBlock(
"button",
{
type: "button",
class: vue.normalizeClass(vue.unref(classes)),
onClick: onClick,
style: vue.normalizeStyle(vue.unref(style)),
},
vue.toDisplayString(__props.label),
7
)
);
};
},
});
script.__scopeId = "data-v-53984b98";
script.__file = "src/components/src/BasicButton/index.vue";
script.install = (app) => {
app.component(script.name, script);
};
const components = [script$1, script];
const install = (app) => {
components.map((component) => app.component(component.name, component));
};
exports.BasicButton = script;
exports.MxmCard = script$1;
exports["default"] = install;
Object.defineProperty(exports, "__esModule", { value: true });
});
{
"name": "mxmui",
"version": "1.0.3",
"license": "MIT",
"module": "mxmui/index.esm.js",
"main": "mxmui/index.js",
"umd": "mxmui/index.js",
"typings": "mxmui/components/index.d.ts",
"author": "mxm",
"files": [
"mxmui",
"README.md"
],
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build",
"serve": "vite preview",
"storybook": "start-storybook -p 6006",
"storybook:refresh": "yarn storybook --no-manager-cache",
"build:storybook": "build-storybook",
"lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src",
"format": "prettier . --write",
"build:c": "yarn rollup -c"
},
"dependencies": {
"vue": "^3.2.16",
"vue-i18n": "^9.2.0-beta.30"
},
"devDependencies": {
"@babel/core": "^7.16.0",
"@intlify/vite-plugin-vue-i18n": "^3.2.1",
"@rollup/plugin-node-resolve": "^13.1.3",
"@storybook/addon-a11y": "^6.4.19",
"@storybook/addon-actions": "^6.4.19",
"@storybook/addon-essentials": "^6.4.19",
"@storybook/addon-links": "^6.4.19",
"@storybook/addon-postcss": "^2.0.0",
"@storybook/addons": "^6.4.19",
"@storybook/theming": "^6.4.19",
"@storybook/vue3": "^6.4.19",
"@typescript-eslint/eslint-plugin": "^5.0.0",
"@typescript-eslint/parser": "^5.0.0",
"@vitejs/plugin-vue": "^2.2.2",
"@vue/eslint-config-prettier": "^7.0.0",
"@vue/eslint-config-typescript": "^10.0.0",
"autoprefixer": "^10.4.2",
"babel-loader": "^8.2.3",
"eslint": "^8.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-markdown": "^2.2.1",
"eslint-plugin-prettier": "4.0.0",
"eslint-plugin-storybook": "^0.5.7",
"eslint-plugin-vue": "^8.0.1",
"gh-pages": "^3.2.3",
"postcss": "^8.4.7",
"postcss-import": "^14.0.2",
"prettier": "^2.5.0",
"rollup": "^2.68.0",
"rollup-plugin-generate-package-json": "^3.2.0",
"rollup-plugin-import-css": "^3.0.2",
"rollup-plugin-postcss": "^4.0.2",
"rollup-plugin-styles": "^4.0.0",
"rollup-plugin-terser": "^7.0.2",
"rollup-plugin-typescript2": "^0.31.2",
"rollup-plugin-vue": "^6.0.0",
"sass": "^1.44.0",
"storybook-builder-vite": "^0.1.17",
"storybook-dark-mode": "^1.0.9",
"tailwindcss": "^3.0.23",
"tslib": "^2.3.1",
"typescript": "^4.5.5",
"vite": "^2.8.4",
"vite-plugin-eslint": "^1.3.0",
"vue-loader": "^16.8.3",
"vue-tsc": "^0.31.4"
}
}
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
\ No newline at end of file
import pkg from "./package.json";
import typescript from "rollup-plugin-typescript2";
import vue from "rollup-plugin-vue";
import { nodeResolve } from "@rollup/plugin-node-resolve";
import postcss from "rollup-plugin-postcss";
import { terser } from "rollup-plugin-terser";
import postcssImport from "postcss-import";
import tailwindcss from "tailwindcss";
import generatePackageJson from "rollup-plugin-generate-package-json";
import { resolve } from "path";
function createEntry(options) {
const config = {
input: ["./src/components/index.ts"],
external: ["vue"],
output: {
file: resolve(__dirname, options.file),
name: options.name,
exports: "named",
format: options.format,
globals: {
vue: "Vue",
},
},
plugins: [
nodeResolve(),
typescript({
tsconfigOverride: {
compilerOptions: {
declaration: options.format === "es",
},
// include: ["src/components/**/*.vue"],
exclude: ["node_modules", "src/stories", "src/pages", "src/main.ts"],
},
}),
vue(),
postcss({
extensions: [".css"],
extract: resolve("mxmui/style.css"),
plugins: [postcssImport(), tailwindcss()],
}),
generatePackageJson({
outputFolder: "mxmui",
baseContents: (pkg) => ({
name: pkg.name + "-lib",
version: pkg.version,
license: pkg.license,
module: "index.esm.js",
main: "index.js",
umd: "index.js",
typings: "components/index.d.ts",
author: "mxm",
}),
}),
terser(),
],
};
return config;
}
export default [
createEntry({ file: pkg.module, format: "es", name: pkg.name }),
createEntry({ file: pkg.umd, format: "umd", name: pkg.name }),
];
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import links from "@/data/links.json";
import ShoppingWrapper from "./components/src/Slg_Wrapper";
import { ShoppingCard as SC } from "./components/src/Slg_ShoppingCard/index.vue"
import Slg_BasicButton from "./components/src/Slg_BasicButton";
import HotCard from "./components/src/Slg_HotCard";
import recList from "./data/recList";
import { computed, onMounted, ref } from "vue";
const { t } = useI18n();
const getImgURL = (src: string) => {
return new URL(`./assets/svg/${src}.svg`, import.meta.url).href;
};
const mappedList = computed(() => {
const list = recList.map(i => {
i.iconURL = getImgURL(i.iconURL)
i.cartURL = getImgURL(i.cartURL)
return i
})
return list as Array<SC>
})
const handleCart = () => {
console.log('handleCart');
}
const handleFav = () => {
console.log('handleFav');
}
</script>
<template>
<!-- <a
v-for="{ alt, src, href } in links"
:key="alt"
class="logo-link"
:href="href"
>
<img class="logo" :alt="alt" :src="getImgURL(src)" />
</a>-->
<div class="slg-w-72 slg-h-52 slg-bg-blue-400">
<div class="slg-w-60">
<Slg_BasicButton />
</div>
</div>
<div style="width: 266px; height: 266px;">
<HotCard main-header="数字藏品" second-header="25M+" content="数字艺术商品已销售" imgURL="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF"/>
</div>
<!-- <div class="w-8/12 mx-auto">
<ShoppingWrapper
:list="mappedList"
header="爆款推荐"
:icon-left="getImgURL('ts')"
:icon-right="getImgURL('ts')"
@add-to-fav="handleFav"
@add-to-cart="handleCart"
gap-x="1rem"
:colNumber="4"
></ShoppingWrapper>
</div>-->
</template>
<style></style>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg height="285.09601" viewBox="0 0 323.99971 285.09601" width="323.99973" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1.2548929 0 0 1.2548929 -22.9868 -19.949332)">
<path d="m97.021 99.016l48.432-27.962c1.212-.7 2.706-.7 3.918 0l48.433 27.962c1.211.7 1.959 1.993 1.959 3.393v55.924c0 1.399-.748 2.693-1.959 3.394l-48.433 27.962c-1.212.7-2.706.7-3.918 0l-48.432-27.962c-1.212-.7-1.959-1.994-1.959-3.394v-55.924c.001-1.4.748-2.693 1.959-3.393" fill="#8080F2"/>
<path d="m273.336 124.488l-57.867-100.672c-2.102-3.64-5.985-6.325-10.188-6.325h-115.736c-4.204 0-8.088 2.685-10.19 6.325l-57.867 100.45c-2.102 3.641-2.102 8.236 0 11.877l57.867 99.847c2.102 3.64 5.986 5.501 10.19 5.501h115.735c4.203 0 8.087-1.805 10.188-5.446l57.867-100.01c2.104-3.639 2.104-7.907.001-11.547m-47.917 48.41c0 1.48-.891 2.849-2.174 3.59l-73.71 42.527c-1.282.74-2.888.74-4.17 0l-73.767-42.527c-1.282-.741-2.179-2.109-2.179-3.59v-85.055c0-1.481.884-2.849 2.167-3.59l73.707-42.527c1.282-.741 2.886-.741 4.168 0l73.772 42.527c1.283.741 2.186 2.109 2.186 3.59z" fill="#4b32c3"/>
</g>
</svg>
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 210 210" width="2500" height="2500"><style>.st0{fill:#56b3b4}.st1{fill:#ea5e5e}.st2{fill:#bf85bf}.st3{fill:#f7ba3e}.st4{opacity:.5;fill:#4d616e;enable-background:new}</style><title>prettier-icon-dark</title><g id="Page-1"><g id="prettier-icon-dark"><g id="Icon-_x28_Dark_x29_"><g id="Group"><path id="Rectangle" class="st0" d="M155 40h10c2.8 0 5 2.2 5 5s-2.2 5-5 5h-10c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_1_" class="st1" d="M5 200h50c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_2_" class="st2" d="M125 120h30c2.8 0 5 2.2 5 5s-2.2 5-5 5h-30c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_3_" class="st1" d="M65 120h40c2.8 0 5 2.2 5 5s-2.2 5-5 5H65c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_4_" class="st0" d="M5 120h40c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_5_" class="st2" d="M5 160h50c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_6_" class="st2" d="M5 80h50c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_7_" class="st3" d="M55 20h100c2.8 0 5 2.2 5 5s-2.2 5-5 5H55c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_8_" class="st1" d="M5 20h30c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_9_" class="st3" d="M45 180h10c2.8 0 5 2.2 5 5s-2.2 5-5 5H45c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_10_" class="st0" d="M45 60h10c2.8 0 5 2.2 5 5s-2.2 5-5 5H45c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_11_" class="st0" d="M5 180h20c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_12_" class="st3" d="M5 60h20c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_13_" class="st4" d="M135 180h10c2.8 0 5 2.2 5 5s-2.2 5-5 5h-10c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_14_" class="st4" d="M75 180h40c2.8 0 5 2.2 5 5s-2.2 5-5 5H75c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_15_" class="st4" d="M165 180h40c2.8 0 5 2.2 5 5s-2.2 5-5 5h-40c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_16_" class="st0" d="M85 100h80c2.8 0 5 2.2 5 5s-2.2 5-5 5H85c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_17_" class="st3" d="M35 100h30c2.8 0 5 2.2 5 5s-2.2 5-5 5H35c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_18_" class="st1" d="M5 100h10c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_19_" class="st2" d="M95 40h40c2.8 0 5 2.2 5 5s-2.2 5-5 5H95c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_20_" class="st0" d="M5 40h70c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_21_" class="st3" d="M35 140h90c2.8 0 5 2.2 5 5s-2.2 5-5 5H35c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_22_" class="st2" d="M5 140h10c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_23_" class="st1" d="M125 60h50c2.8 0 5 2.2 5 5s-2.2 5-5 5h-50c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_24_" class="st3" d="M125 80h50c2.8 0 5 2.2 5 5s-2.2 5-5 5h-50c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_25_" class="st0" d="M5 0h120c2.8 0 5 2.2 5 5s-2.2 5-5 5H5c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_26_" class="st4" d="M145 0h60c2.8 0 5 2.2 5 5s-2.2 5-5 5h-60c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_27_" class="st4" d="M145 140h20c2.8 0 5 2.2 5 5s-2.2 5-5 5h-20c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_28_" class="st4" d="M185 140h20c2.8 0 5 2.2 5 5s-2.2 5-5 5h-20c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_29_" class="st4" d="M175 120h30c2.8 0 5 2.2 5 5s-2.2 5-5 5h-30c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_30_" class="st4" d="M175 20h30c2.8 0 5 2.2 5 5s-2.2 5-5 5h-30c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_31_" class="st4" d="M185 100h20c2.8 0 5 2.2 5 5s-2.2 5-5 5h-20c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_32_" class="st4" d="M185 40h20c2.8 0 5 2.2 5 5s-2.2 5-5 5h-20c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_33_" class="st4" d="M195 60h10c2.8 0 5 2.2 5 5s-2.2 5-5 5h-10c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_34_" class="st4" d="M195 80h10c2.8 0 5 2.2 5 5s-2.2 5-5 5h-10c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_35_" class="st4" d="M115 160h90c2.8 0 5 2.2 5 5s-2.2 5-5 5h-90c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_36_" class="st4" d="M75 160h20c2.8 0 5 2.2 5 5s-2.2 5-5 5H75c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_37_" class="st4" d="M155 200h50c2.8 0 5 2.2 5 5s-2.2 5-5 5h-50c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_38_" class="st4" d="M75 200h60c2.8 0 5 2.2 5 5s-2.2 5-5 5H75c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_39_" class="st4" d="M75 60h30c2.8 0 5 2.2 5 5s-2.2 5-5 5H75c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/><path id="Rectangle_40_" class="st4" d="M75 80h30c2.8 0 5 2.2 5 5s-2.2 5-5 5H75c-2.8 0-5-2.2-5-5s2.2-5 5-5z"/></g></g></g></g></svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="256px" height="319px" viewBox="0 0 256 319" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
<path d="M9.87245893,293.324145 L0.0114611411,30.5732167 C-0.314208957,21.8955842 6.33948896,14.5413918 15.0063196,13.9997149 L238.494389,0.0317105427 C247.316188,-0.519651867 254.914637,6.18486163 255.466,15.0066607 C255.486773,15.339032 255.497167,15.6719708 255.497167,16.0049907 L255.497167,302.318596 C255.497167,311.157608 248.331732,318.323043 239.492719,318.323043 C239.253266,318.323043 239.013844,318.317669 238.774632,318.306926 L25.1475605,308.712253 C16.8276309,308.338578 10.1847994,301.646603 9.87245893,293.324145 L9.87245893,293.324145 Z" id="path-1"></path>
<use fill="#FF4785" fill-rule="nonzero" xlink:href="#path-1"></use>
<path d="M188.665358,39.126973 L190.191903,2.41148534 L220.883535,0 L222.205755,37.8634126 C222.251771,39.1811466 221.22084,40.2866846 219.903106,40.3327009 C219.338869,40.3524045 218.785907,40.1715096 218.342409,39.8221376 L206.506729,30.4984116 L192.493574,41.1282444 C191.443077,41.9251106 189.945493,41.7195021 189.148627,40.6690048 C188.813185,40.2267976 188.6423,39.6815326 188.665358,39.126973 Z M149.413703,119.980309 C149.413703,126.206975 191.355678,123.222696 196.986019,118.848893 C196.986019,76.4467826 174.234041,54.1651411 132.57133,54.1651411 C90.9086182,54.1651411 67.5656805,76.7934542 67.5656805,110.735941 C67.5656805,169.85244 147.345341,170.983856 147.345341,203.229219 C147.345341,212.280549 142.913138,217.654777 133.162291,217.654777 C120.456641,217.654777 115.433477,211.165914 116.024438,189.103298 C116.024438,184.317101 67.5656805,182.824962 66.0882793,189.103298 C62.3262146,242.56887 95.6363019,257.990394 133.753251,257.990394 C170.688279,257.990394 199.645341,238.303123 199.645341,202.663511 C199.645341,139.304202 118.683759,141.001326 118.683759,109.604526 C118.683759,96.8760922 128.139127,95.178968 133.753251,95.178968 C139.662855,95.178968 150.300143,96.2205679 149.413703,119.980309 Z" fill="#FFFFFF" fill-rule="nonzero" mask="url(#mask-2)"></path>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="512" height="512" fill="none" version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<title>TypeScript logo</title>
<rect width="512" height="512" rx="50" fill="#3178c6"/>
<path d="m317 407v50c8.1 4.2 18 7.3 29 9.4s23 3.1 35 3.1c12 0 23-1.1 34-3.4 11-2.3 20-6.1 28-11 8.1-5.3 15-12 19-21s7.1-19 7.1-32c0-9.1-1.4-17-4.1-24s-6.6-13-12-18c-5.1-5.3-11-10-18-14s-15-8.2-24-12c-6.6-2.7-12-5.3-18-7.9-5.2-2.6-9.7-5.2-13-7.8-3.7-2.7-6.5-5.5-8.5-8.4-2-3-3-6.3-3-10 0-3.4 0.89-6.5 2.7-9.3s4.3-5.1 7.5-7.1c3.2-2 7.2-3.5 12-4.6 4.7-1.1 9.9-1.6 16-1.6 4.2 0 8.6 0.31 13 0.94 4.6 0.63 9.3 1.6 14 2.9 4.7 1.3 9.3 2.9 14 4.9 4.4 2 8.5 4.3 12 6.9v-47c-7.6-2.9-16-5.1-25-6.5s-19-2.1-31-2.1c-12 0-23 1.3-34 3.8s-20 6.5-28 12c-8.1 5.4-14 12-19 21-4.7 8.4-7 18-7 30 0 15 4.3 28 13 38 8.6 11 22 19 39 27 6.9 2.8 13 5.6 19 8.3s11 5.5 15 8.4c4.3 2.9 7.7 6.1 10 9.5 2.5 3.4 3.8 7.4 3.8 12 0 3.2-0.78 6.2-2.3 9s-3.9 5.2-7.1 7.2-7.1 3.6-12 4.8c-4.7 1.1-10 1.7-17 1.7-11 0-22-1.9-32-5.7-11-3.8-21-9.5-30-17zm-84-123h64v-41h-179v41h64v183h51z" clip-rule="evenodd" fill="#fff" fill-rule="evenodd" style="fill:#fff"/>
</svg>
<svg width="410" height="404" viewBox="0 0 410 404" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M399.641 59.5246L215.643 388.545C211.844 395.338 202.084 395.378 198.228 388.618L10.5817 59.5563C6.38087 52.1896 12.6802 43.2665 21.0281 44.7586L205.223 77.6824C206.398 77.8924 207.601 77.8904 208.776 77.6763L389.119 44.8058C397.439 43.2894 403.768 52.1434 399.641 59.5246Z" fill="url(#paint0_linear)"/>
<path d="M292.965 1.5744L156.801 28.2552C154.563 28.6937 152.906 30.5903 152.771 32.8664L144.395 174.33C144.198 177.662 147.258 180.248 150.51 179.498L188.42 170.749C191.967 169.931 195.172 173.055 194.443 176.622L183.18 231.775C182.422 235.487 185.907 238.661 189.532 237.56L212.947 230.446C216.577 229.344 220.065 232.527 219.297 236.242L201.398 322.875C200.278 328.294 207.486 331.249 210.492 326.603L212.5 323.5L323.454 102.072C325.312 98.3645 322.108 94.137 318.036 94.9228L279.014 102.454C275.347 103.161 272.227 99.746 273.262 96.1583L298.731 7.86689C299.767 4.27314 296.636 0.855181 292.965 1.5744Z" fill="url(#paint1_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="6.00017" y1="32.9999" x2="235" y2="344" gradientUnits="userSpaceOnUse">
<stop stop-color="#41D1FF"/>
<stop offset="1" stop-color="#BD34FE"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="194.651" y1="8.81818" x2="236.076" y2="292.989" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFEA83"/>
<stop offset="0.0833333" stop-color="#FFDD35"/>
<stop offset="1" stop-color="#FFA800"/>
</linearGradient>
</defs>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 261.76 226.69" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"/></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"/></g></g></svg>
export declare type Size = "small" | "medium" | "large";
export type Size = "small" | "medium" | "large";
import MxmCard from "./src/MxmCard";
import BasicButton from "./src/BasicButton";
import ShoppingCard from "./src/Slg_ShoppingCard"
import ShoppingWrapper from "./src/Slg_Wrapper"
import { App } from "vue";
const components = [MxmCard, BasicButton,ShoppingCard,ShoppingWrapper];
const install = (app: App) => {
components.map((component) => app.component(component.name, component));
};
export { MxmCard, BasicButton,ShoppingCard,ShoppingWrapper };
export default install;
import BasicButton from "./index.vue";
import { App } from "vue";
BasicButton.install = (app: App) => {
app.component(BasicButton.name, BasicButton);
};
export default BasicButton;
<template>
<button type="button" :class="classes" @click="onClick" :style="style">
{{ label }}
</button>
</template>
<script setup lang="ts">
export type Size = "small" | "medium" | "large";
import { computed } from "vue";
interface Props {
label: string;
primary?: boolean;
backgroundColor?: string;
size: Size;
}
interface Emits {
(e: "click"): void;
}
const props = withDefaults(defineProps<Props>(), { primary: false });
const emit = defineEmits<Emits>();
const onClick = () => {
emit("click");
};
const classes = computed(() => ({
"storybook-button": true,
"storybook-button--primary": props.primary,
"storybook-button--secondary": !props.primary,
[`storybook-button--${props.size || "medium"}`]: true,
}));
const style = computed(() => ({
backgroundColor: props.backgroundColor,
}));
</script>
<style scoped>
@tailwind base;
@tailwind components;
@tailwind utilities;
.storybook-button {
font-family: "Overpass", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-weight: 700;
border: 0;
border-radius: 3em;
cursor: pointer;
display: inline-block;
line-height: 1;
}
.storybook-button--small {
font-size: 12px;
padding: 10px 16px;
}
.storybook-button--medium {
font-size: 14px;
padding: 11px 20px;
}
.storybook-button--large {
font-size: 16px;
padding: 12px 24px;
}
</style>
import MxmCard from "./index.vue";
import { App } from "vue";
MxmCard.install = (app: App) => {
app.component(MxmCard.name, MxmCard);
};
export default MxmCard;
<script setup lang="ts">
export interface MxMCard {
header: string;
content?: string;
}
withDefaults(defineProps<MxMCard>(), { header: "card header" });
</script>
<template>
<div class="w-40 h-32 bg-blue-300">
<div class="divide-y-0 py-5">{{ header }}</div>
<div>{{ content ? content : "没有内容" }}</div>
</div>
</template>
<style scpoed>
@tailwind base;
@tailwind components;
@tailwind utilities;
</style>
import Slg_BasicButton from "./index.vue";
import { App } from "vue";
Slg_BasicButton.install = (app: App) => {
app.component(Slg_BasicButton.name, Slg_BasicButton);
};
export default Slg_BasicButton;
<script setup lang="ts">
import { computed } from 'vue';
type Size = 'SM' | 'L'
type Pattern = 'PRIMARY' | 'SECOND' | 'ROUND' | 'BLUR'
interface Slg_BasicButton {
height?: Size,
pattern?: Pattern,
iconURL?: string
labelColor?: string,
bgColor?: string,
borderColor?: string,
label?: string
}
const props = withDefaults(defineProps<Slg_BasicButton>(), {
height: 'SM',
pattern: 'SECOND',
bgColor: 'rgba(247, 245, 230, 1)',
labelColor: '#2E2E22',
borderColor: '#2E2E22',
label: 'BUTTON'
})
const btnStyleObj = computed(() => {
let styleObj
if (props.pattern == 'PRIMARY') {
styleObj = {
borderColor: props.borderColor,
}
}
else if (props.pattern == 'SECOND' || props.pattern == 'ROUND') {
styleObj = {
backgroundColor: props.bgColor
}
}
return styleObj
})
const btnStyleClass = computed(() => ({
[`slg-button--${props.pattern}`]: true
}))
const labelStyleClass = computed(() => {
return props.height == 'SM' ? 'slg-text-xs my-2 slg-font-medium' : 'slg-text-sm my-3 slg-font-bold'
})
interface Emits {
(e: "click"): void;
}
const emit = defineEmits<Emits>()
const onClick = () => {
emit('click')
}
</script>
<template>
<button
class="slg-w-full slg-flex slg-justify-center slg-items-center"
:class="btnStyleClass"
:style="btnStyleObj"
@click="onClick"
>
<img
v-if="iconURL"
:src="iconURL"
class="slg-w-2 slg-h-2 slg-justify-center slg-items-center"
:class="pattern == 'ROUND' ? ' slg-h-6 slg-w-6' : ' slg-h-2 slg-w-2 slg-mr-3'"
/>
<span v-if="label" :style="{ color: labelColor }" :class="labelStyleClass">
{{
pattern == 'ROUND' && iconURL ?
'' :
label
}}
</span>
</button>
</template>
<style>
.slg-button--PRIMARY {
background-color: white;
border-width: 1px;
}
.slg-button--ROUND {
border-radius: 9999px;
width: 40px;
height: 40px;
font-size: 8px;
}
.slg-button--SECOND {
border: none;
}
.slg-button--BLUR {
border-width: 1px;
border-color: rgba(255, 255, 255);
background-color: rgba(255, 255, 255, 0.5);
color: #dd2e41;
-webkit-backdrop-filter: blur(5px);
backdrop-filter: blur(5px);
}
</style>
import Slg_HotCard from "./index.vue";
import { App } from "vue";
Slg_HotCard.install = (app: App) => {
app.component(Slg_HotCard.name, Slg_HotCard);
};
export default Slg_HotCard;
<script lang="ts" setup>
import { computed } from 'vue';
export type Pattern = 'VERTICAL' | 'HORIZON'
export interface HotCard {
mainHeader?: string,
secondHeader?: string,
content?: string,
imgURL?: string,
setBg?:boolean,
pattern?: Pattern,
reverse?: boolean,
bgColor?: string,
headerColor?: string
}
const props = withDefaults(defineProps<HotCard>(), {
mainHeader: 'Main Header',
secondHeader: 'Second Header',
content: 'Content',
pattern: 'HORIZON',
reverse: true,
bgColor: '#000000',
headerColor: '#ffffff'
})
interface Emits {
(e: 'click'): void
}
const emits = defineEmits<Emits>()
const display = computed(() => {
let display = props.pattern == 'HORIZON' ? ' slg-flex-row' : ' slg-flex-col'
if (props.reverse) {
display += '-reverse'
}
return display
})
const cardStyleObj = computed(() => {
return {
backgroundColor: props.bgColor,
}
})
const fontStyle = computed(() => {
return props.headerColor
})
// const bgStyle = computed(()=>{
// return props.setBg?''
// })
const onClick = () => {
emits('click')
}
</script>
<template>
<div
class="slg-flex slg-justify-between slg-w-full slg-h-full slg-relative"
@click="onClick"
:style="cardStyleObj"
:class="display"
>
<!-- content -->
<div class="slg-mt-12 slg-flex-1 slg-flex slg-flex-col slg-items-center slg-pb-14 slg-pl-1 slg-relative slg-z-10">
<div>
<div v-if="mainHeader" class="slg-text-40" :style="{ color: fontStyle }">{{ mainHeader }}</div>
<div
v-if="secondHeader"
class="slg-text-31 slg-mt-7 slg-pl-2"
:style="{ color: fontStyle }"
>{{ secondHeader }}</div>
<div v-if="content" class="slg-text-lightGray slg-text-18 slg-mt-4 slg-pl-2">{{ content }}</div>
</div>
</div>
<!-- img -->
<img
v-if="imgURL"
class="slg-self-end slg-absolute slg-top-0 slg-bottom-0 slg-left-0 slg-right-0 slg-h-auto slg-w-auto"
src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF"
style=""
/>
</div>
</template>
\ No newline at end of file
import ShoppingCard from "./index.vue";
import { App } from "vue";
ShoppingCard.install = (app: App) => {
app.component(ShoppingCard.name, ShoppingCard);
};
export default ShoppingCard;
<script setup lang="ts">
import { propsToAttrMap } from '@vue/shared';
import { computed } from 'vue';
export type itemStatus = "IN" | "SOLDOUT"
export interface ShoppingCard {
itemName: string;
intro: string;
price: string,
discount?: string,
likes: string,
status: itemStatus,
imgURL: string,
iconURL: string,
cartURL: string,
showRTIcon?: boolean
secondaryColor?: string
}
interface Emits {
(e: "addtofavor"): void;
(e: "addtocart"): void;
}
enum BTN_EVENT {
BTN1 = "ADDTOCARD",
BTN2 = "ADDFAV"
}
const props = withDefaults(defineProps<ShoppingCard>(), {
showRTIcon: true
});
const emit = defineEmits<Emits>();
const handleClick = (e: Event, type: BTN_EVENT) => {
if (type == BTN_EVENT.BTN1) {
emit("addtocart")
}
else if (type == BTN_EVENT.BTN2) {
emit("addtofavor")
}
}
const secondaryColor = computed(() => {
return props.secondaryColor ? props.secondaryColor : '#A67744'
})
</script>
<template>
<div>
<div class="bg-purple-200 relative" style="height: 346px;">
<img :src="imgURL" class="w-full h-full object-cover" />
<button
v-if="showRTIcon"
@click="handleClick($event, BTN_EVENT.BTN2)"
class="absolute flex items-center top-3 right-4 rounded-2xl bg-white bg-opacity-50 border-white text-red-400 py-3 px-4 text-xs"
>
<img :src="iconURL" class="w-4 h-4 pr-1" />
{{ likes }}
</button>
</div>
<div>
<div class="text-sm font-bold pt-3 text-mainContent">
<div v-if="status == 'IN'">{{ itemName }}</div>
<div v-else class="flex items-center">
<span class="text-xs pr-2" :style="{ color: secondaryColor }">已售罄</span>
<strike>{{ itemName }}</strike>
</div>
</div>
<div class="text-xs pt-1 text-mainContent">{{ intro }}</div>
<div class="pt-2 pb-3 text-xs">
<span
:class="discount ? 'font-semibold' : ' text-mainContent'"
:style="discount ? { color: secondaryColor } : ''"
class="pr-2"
>{{ discount ? discount : price }}</span>
<strike v-if="discount">{{ price }}</strike>
</div>
</div>
<button
type="button"
class="border w-full border-black text-xs py-2 flex items-center justify-center"
@click="handleClick($event, BTN_EVENT.BTN1)"
>
<img :src="cartURL" class="w-2 h-2 mr-3" />
加入购物车
</button>
</div>
</template>
<style scpoed>
@tailwind base;
@tailwind components;
@tailwind utilities;
</style>
import Wrapper from "./index.vue";
import { App } from "vue";
Wrapper.install = (app: App) => {
app.component(Wrapper.name, Wrapper);
};
export default Wrapper;
<script setup lang="ts">
import { computed, ref } from 'vue';
import ShoppingCard from '../Slg_ShoppingCard';
import { ShoppingCard as SC } from '../Slg_ShoppingCard/index.vue';
interface Slg_Wrapper {
list: Array<SC>
header?: string
iconLeft?: string
iconRight?: string
pattern?: Pattern
colNumber?: number
gapX?:string
}
type Pattern = 'swipe' | 'static'
const props = withDefaults(defineProps<Slg_Wrapper>(), {
pattern: 'swipe',
colNumber: 6,
gapX:'1rem',
})
interface Emits {
(e: "swipeLeft"): void;
(e: "swipeRight"): void;
(e: "addToFav"): void;
(e: "addToCart"): void;
}
const emit = defineEmits<Emits>()
enum BTN_EVENT {
BTN1 = "SWIPELEFT",
BTN2 = "SWIPERIGHT",
BTN3 = "FAV",
BTN4 = "CART"
}
const handleClick = (type: BTN_EVENT) => {
switch (type) {
case BTN_EVENT.BTN1:
if (props.pattern == 'swipe') {
if (offset.value == 0) return
offset.value = offset.value - props.colNumber
return
}
emit("swipeLeft")
break;
case BTN_EVENT.BTN2:
if (props.pattern == 'swipe') {
if (offset.value >= props.list.length - props.colNumber) return
offset.value = offset.value + props.colNumber
return
}
emit("swipeRight")
break;
case BTN_EVENT.BTN3:
emit("addToFav")
break;
case BTN_EVENT.BTN4:
emit("addToCart")
break;
}
}
/* handle Swipe pattern */
const offset = ref(0)
const slicedList = computed(() => {
return props.pattern == "static" ? props.list : props.list.slice(offset.value, offset.value + props.colNumber)
})
const swipeStyleClass = computed(() => {
return `grid grid-rows-1`
})
const swipeStyleObj = computed(()=>{
return {
gridTemplateColumns:`repeat(${props.colNumber}, minmax(0, 1fr))`,
columnGap:props.gapX
}
})
</script>
<template>
<div class="mx-auto relative">
<div v-if="pattern == 'swipe'" class="flex absolute right-0">
<div class="w-10 h-10 bg-red-300 rounded-full mr-4 flex justify-center items-center">
<img :src="iconLeft" class="w-6 h-6" @click="handleClick(BTN_EVENT.BTN1)" />
</div>
<div class="w-10 h-10 bg-red-500 rounded-full flex justify-center items-center">
<img :src="iconRight" class="w-6 h-6" @click="handleClick(BTN_EVENT.BTN2)" />
</div>
</div>
<div class="text-center text-mainHeader font-bold text-3xl">{{ header }}</div>
<div
class=" mt-12"
:class="pattern == 'static' ? ' flex justify-between flex-wrap' : swipeStyleClass"
:style="swipeStyleObj"
>
<div v-for="(i, index) in slicedList" :key="index" >
<ShoppingCard
@addtocart="handleClick(BTN_EVENT.BTN4)"
@addtofavor="handleClick(BTN_EVENT.BTN3)"
secondaryColor="#DD2E41"
:itemName="i.itemName"
:intro="i.intro"
:price="i.price"
:discount="i.discount"
:status="i.status"
:likes="i.likes"
:imgURL="i.imgURL"
:iconURL="i.iconURL"
:cartURL="i.cartURL"
/>
</div>
</div>
</div>
</template>
<div>
</div>
<style scpoed>
@tailwind base;
@tailwind components;
@tailwind utilities;
</style>
/* @tailwind base;
@tailwind components;
@tailwind utilities; */
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
[
{
"href": "https://vitejs.dev/",
"alt": "Vite logo",
"src": "vite"
},
{
"href": "https://v3.vuejs.org/",
"alt": "Vue 3 logo",
"src": "vue"
},
{
"href": "https://storybook.js.org/",
"alt": "Storybook logo",
"src": "storybook"
},
{
"href": "https://www.typescriptlang.org/",
"alt": "TS logo",
"src": "ts"
},
{
"href": "https://eslint.org//",
"alt": "ESLint logo",
"src": "eslint"
},
{
"href": "https://prettier.io/",
"alt": "Prettier logo",
"src": "prettier"
}
]
export default [
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
status: "SOLDOUT",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
},
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
discount: "$18.99",
status: "IN",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
},
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
discount: "$18.99",
status: "IN",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
},
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
discount: "$18.99",
status: "IN",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
},
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
discount: "$18.99",
status: "IN",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1699409092,3263312049&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
},
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
discount: "$18.99",
status: "IN",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1699409092,3263312049&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
},
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
discount: "$18.99",
status: "IN",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1699409092,3263312049&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
},
{
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$24.99",
discount: "$18.99",
status: "IN",
likes: "1.3k",
imgURL: "https://t7.baidu.com/it/u=1699409092,3263312049&fm=193&f=GIF",
iconURL: "ts",
cartURL: "ts"
}
]
\ No newline at end of file
{
"welcome": "Welcome to Vite + Vue 3 + Storybook + Typescript",
"setup": "Recommended IDE setup:",
"see-readme": {
"see": "see",
"more-info": "for more information."
},
"docs": "Docs",
"check-reactivity": "Check reactivity",
"count": "no clicks | {count} click | {count} clicks",
"hmr": {
"edit": "Edit",
"test": "to test hot module replacement"
},
"select-locale": "Select locale"
}
{
"welcome": "Bem vindo a Vite + Vue 3 + Storybook + Typescript",
"setup": "Configuração de IDE recomendada:",
"check-reactivity": "Verifique a reatividade",
"count": "sem cliques | {count} clique | {count} cliques",
"docs": "Documentos",
"hmr.edit": "Editar",
"hmr.test": "para testar a HMR",
"see-readme.more-info": "Para mais informações.",
"see-readme.see": "Veja"
}
{
"check-reactivity": "检查反应性",
"count": "没有点击 | 点击 {count} | 点击 {count} 次 ",
"docs": "文档",
"hmr.edit": "编辑",
"hmr.test": "测试热模块更换",
"see-readme.more-info": "了解更多信息。",
"see-readme.see": "看",
"setup": "推荐的 IDE 设置:",
"welcome": "欢迎使用 Vite + Vue 3 + Storybook + Typescript"
}
import messages from "@intlify/vite-plugin-vue-i18n/messages";
import { createApp } from "vue";
import { createI18n } from "vue-i18n";
import App from "./App.vue";
const i18n = createI18n({
locale: localStorage.locale || "en",
messages,
});
createApp(App).use(i18n).mount("#app");
<script setup lang="ts">
interface Props {
user: Record<string, unknown>;
}
const props = defineProps<Props>();
interface Emit {
(e: "login"): void;
(e: "logout"): void;
(e: "createAccount"): void;
}
const emit = defineEmits<Emit>();
</script>
<template>
<article>
<section>
<h2>Pages in Storybook</h2>
<p>
We recommend building UIs with a
<a
href="https://componentdriven.org"
target="_blank"
rel="noopener noreferrer"
>
<strong>component-driven</strong>
</a>
process starting with atomic components and ending with pages.
</p>
<p>
Render pages with mock data. This makes it easy to build and review page
states without needing to navigate to them in your app. Here are some
handy patterns for managing page data in Storybook:
</p>
<ul>
<li>
Use a higher-level connected component. Storybook helps you compose
such data from the "args" of child component stories
</li>
<li>
Assemble data in the page component from your services. You can mock
these services out using Storybook.
</li>
</ul>
<p>
Get a guided tutorial on component-driven development at
<a
href="https://storybook.js.org/tutorials/"
target="_blank"
rel="noopener noreferrer"
>Storybook tutorials</a
>
. Read more in the
<a
href="https://storybook.js.org/docs"
target="_blank"
rel="noopener noreferrer"
>docs</a
>
.
</p>
<div class="tip-wrapper">
<span class="tip">Tip</span>
Adjust the width of the canvas with the
<svg
width="10"
height="10"
viewBox="0 0 12 12"
xmlns="http://www.w3.org/2000/svg"
>
<g fill="none" fill-rule="evenodd">
<path
d="M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z"
id="a"
fill="#999"
/>
</g>
</svg>
Viewports addon in the toolbar
</div>
</section>
</article>
</template>
<style>
section {
font-family: "Nunito Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 24px;
padding: 48px 20px;
margin: 0 auto;
max-width: 600px;
color: #333;
}
section h2 {
font-weight: 900;
font-size: 32px;
line-height: 1;
margin: 0 0 4px;
display: inline-block;
vertical-align: top;
}
section p {
margin: 1em 0;
}
section a {
text-decoration: none;
color: #1ea7fd;
}
section ul {
padding-left: 30px;
margin: 1em 0;
}
section li {
margin-bottom: 8px;
}
section .tip {
display: inline-block;
border-radius: 1em;
font-size: 11px;
line-height: 12px;
font-weight: 700;
background: #e7fdd8;
color: #66bf3c;
padding: 4px 12px;
margin-right: 10px;
vertical-align: top;
}
section .tip-wrapper {
font-size: 13px;
line-height: 20px;
margin-top: 40px;
margin-bottom: 40px;
}
section .tip-wrapper svg {
display: inline-block;
height: 12px;
width: 12px;
margin-right: 4px;
vertical-align: top;
margin-top: 3px;
}
section .tip-wrapper svg path {
fill: #1ea7fd;
}
</style>
/// <reference types="vite/client" />
declare module "*.vue" {
import { DefineComponent } from "vue";
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
const component: DefineComponent<{}, {}, any>;
export default component;
}
declare module "*.svg" {
import type { DefineComponent } from "vue";
const component: DefineComponent;
export default component;
}
declare module "*.png" {
import type { DefineComponent } from "vue";
const component: DefineComponent;
export default component;
}
import { Story } from "@storybook/vue3";
import BasicButton from "../components/src/BasicButton";
// More on default export: https://storybook.js.org/docs/vue/writing-stories/introduction#default-export
export default {
title: "Example/Basic Button",
component: BasicButton,
// More on argTypes: https://storybook.js.org/docs/vue/api/argtypes
argTypes: {
backgroundColor: { control: "color" },
onClick: {},
size: {
control: { type: "select" },
options: ["small", "medium", "large"],
},
},
};
// More on component templates: https://storybook.js.org/docs/vue/writing-stories/introduction#using-args
const Template: Story = (args) => ({
// Components used in your story `template` are defined in the `components` object
components: { BasicButton },
// The story's `args` need to be mapped into the template through the `setup()` method
setup() {
return { args };
},
// And then the `args` are bound to your component with `v-bind="args"`
template: '<basic-button v-bind="args" />',
});
export const Primary = Template.bind({});
// More on args: https://storybook.js.org/docs/vue/writing-stories/args
Primary.args = {
primary: true,
label: "Button",
};
export const Secondary = Template.bind({});
Secondary.args = {
label: "Button",
};
export const Large = Template.bind({});
Large.args = {
size: "large",
label: "Button",
};
export const Small = Template.bind({});
Small.args = {
size: "small",
label: "Button",
};
import { Story } from "@storybook/vue3";
import MxmCard from "../components/src/MxmCard";
export default {
title: "Example/Card",
component: MxmCard,
// More on argTypes: https://storybook.js.org/docs/vue/api/argtypes
// argTypes: {
// backgroundColor: { control: "color" },
// onClick: {},
// size: {
// control: { type: "select" },
// options: ["small", "medium", "large"],
// },
// },
};
const Template: Story = (args) => ({
// Components used in your story `template` are defined in the `components` object
components: { MxmCard },
// The story's `args` need to be mapped into the template through the `setup()` method
setup() {
return { args };
},
// And then the `args` are bound to your component with `v-bind="args"`
template: '<mxm-card v-bind="args" />',
});
export const Primary = Template.bind({});
// More on args: https://storybook.js.org/docs/vue/writing-stories/args
Primary.args = {
header: "kkkk",
content: "this is content",
};
import MyPage from "../pages/Page.vue";
// import * as HeaderStories from "./Header.stories";
export default {
title: "Pages/Page",
component: MyPage,
};
const Template = (args) => ({
// Components used in your story `template` are defined in the `components` object
components: { MyPage },
// The story's `args` need to be mapped into the template through the `setup()` method
setup() {
// Story args can be mapped to keys in the returned object
return { user: args.user };
},
// Then, those values can be accessed directly in the template
template: '<my-page :user="user" />',
});
export const LoggedIn = Template.bind({});
LoggedIn.args = {
// More on composing args: https://storybook.js.org/docs/vue/writing-stories/args#args-composition
// ...HeaderStories.LoggedIn.args,
};
export const LoggedOut = Template.bind({});
LoggedOut.args = {
// ...HeaderStories.LoggedOut.args,
};
This diff is collapsed.
import { Story } from "@storybook/vue3";
import ShoppingWrapper from "../components/src/Slg_Wrapper";
// More on default export: https://storybook.js.org/docs/vue/writing-stories/introduction#default-export
export default {
title: "Example/ShoppingWrapper",
component: ShoppingWrapper,
// More on argTypes: https://storybook.js.org/docs/vue/api/argtypes
argTypes: {
// list: Array<SC>
// header?: string
// iconLeft?: string
// iconRight?: string
// pattern?: Pattern
// colNumber?: number
// gapX?:string
pa: {
control: { type: "select" },
options: ["IN", "SOLDOUT"],
},
onClick: {},
},
};
// More on component templates: https://storybook.js.org/docs/vue/writing-stories/introduction#using-args
const Template: Story = (args) => ({
// Components used in your story `template` are defined in the `components` object
components: { ShoppingWrapper },
// The story's `args` need to be mapped into the template through the `setup()` method
setup() {
return { args };
},
// And then the `args` are bound to your component with `v-bind="args"`
template: '<ShoppingCard v-bind="args" />',
});
export const Normal = Template.bind({});
Normal.args = {
status: "IN",
itemName: "Sunburn Ointment",
intro: "All Natural Ingredients.",
price: "$99.99",
likes: "1.5k",
imgURL: "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF",
iconURL: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48dGl0bGU+aWxsdXN0cmF0aW9uL2RpcmVjdGlvbjwvdGl0bGU+PGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+PGcgaWQ9ImlsbHVzdHJhdGlvbi9kaXJlY3Rpb24iIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZSIgZmlsbD0iI0ZGRDQ3NiIgZD0iTTIzLjQ5MTcwMTUsMzMuNjAzMDY0MSBMMi45Mzg0MDI1OCwzMS40MzIxMDMzIEMyLjM4OTE3MzE2LDMxLjM3NDA5MDQgMS45OTA5NjM0NiwzMC44ODE4MjMzIDIuMDQ4OTc2MzEsMzAuMzMyNTkzOSBDMi4wNzQ3NTE1LDMwLjA4ODU3MDUgMi4xODkzNDg2MSwyOS44NjI1NDE5IDIuMzcwOTU3MjIsMjkuNjk3NTI2NSBMMzQuMjYwOTEwNSwwLjcyMTI4NTMyNSBDMzQuNjY5NjYxNCwwLjM0OTg4MTA0OSAzNS4zMDIxMDIyLDAuMzgwMTU2NDggMzUuNjczNTA2NCwwLjc4ODkwNzM5MyBDMzUuOTIzMjYyMSwxLjA2Mzc3NzMxIDM2LjAwMDExMzMsMS40NTQ0MjA5NiAzNS44NzMwOTAxLDEuODAzNDE0NDcgTDI0LjUzNjQzNTcsMzIuOTUwNjE2NCBDMjQuMzc5MzQ3MywzMy4zODIyMTMzIDIzLjk0ODQ1NjUsMzMuNjUxMzA5MiAyMy40OTE3MDE1LDMzLjYwMzA2NDEgWiIvPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZS1Db3B5IiBmaWxsPSIjRkZDNDQ1IiBkPSJNMjQuMzE2MzU5NywzMy4yODgxMDI5IEMyNC4wMzA2NTc1LDMzLjAxMzg0NjIgMjMuOTMzNzI0NiwzMi41OTY4MjMyIDI0LjA2OTE3NiwzMi4yMjQ2NzM1IEwzNS4wOTE5MjMsMS45Mzk5MjUxIEMzNS4yMjY2MDc1LDEuNTY5ODgyNDMgMzUuNTY1OTI0OSwxLjMxMzMzNjEzIDM1Ljk1ODY2NjksMS4yODQ2MDk1NSBDMzYuNTA5NDgwMiwxLjI0NDMyMTA2IDM2Ljk4ODY2MjgsMS42NTgxODMxOCAzNy4wMjg5NTEzLDIuMjA4OTk2NDcgTDQwLjI0Mzc1NTcsNDYuMTYwOTI1NiBDNDAuMjY0NDM1NSw0Ni40NDM2NTQ2IDQwLjE2NDE0NDYsNDYuNzIxODc1MiAzOS45Njc4MjkzLDQ2LjkyNjM4MzMgQzM5LjU4NTM2NzIsNDcuMzI0ODA2NyAzOC45NTIzMzQ0LDQ3LjMzNzc0NTggMzguNTUzOTExMSw0Ni45NTUyODM3IEwyNC4zMTYzNTk3LDMzLjI4ODEwMjkgWiIvPjwvZz48L3N2Zz4=",
cartURL: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48dGl0bGU+aWxsdXN0cmF0aW9uL2RpcmVjdGlvbjwvdGl0bGU+PGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+PGcgaWQ9ImlsbHVzdHJhdGlvbi9kaXJlY3Rpb24iIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZSIgZmlsbD0iI0ZGRDQ3NiIgZD0iTTIzLjQ5MTcwMTUsMzMuNjAzMDY0MSBMMi45Mzg0MDI1OCwzMS40MzIxMDMzIEMyLjM4OTE3MzE2LDMxLjM3NDA5MDQgMS45OTA5NjM0NiwzMC44ODE4MjMzIDIuMDQ4OTc2MzEsMzAuMzMyNTkzOSBDMi4wNzQ3NTE1LDMwLjA4ODU3MDUgMi4xODkzNDg2MSwyOS44NjI1NDE5IDIuMzcwOTU3MjIsMjkuNjk3NTI2NSBMMzQuMjYwOTEwNSwwLjcyMTI4NTMyNSBDMzQuNjY5NjYxNCwwLjM0OTg4MTA0OSAzNS4zMDIxMDIyLDAuMzgwMTU2NDggMzUuNjczNTA2NCwwLjc4ODkwNzM5MyBDMzUuOTIzMjYyMSwxLjA2Mzc3NzMxIDM2LjAwMDExMzMsMS40NTQ0MjA5NiAzNS44NzMwOTAxLDEuODAzNDE0NDcgTDI0LjUzNjQzNTcsMzIuOTUwNjE2NCBDMjQuMzc5MzQ3MywzMy4zODIyMTMzIDIzLjk0ODQ1NjUsMzMuNjUxMzA5MiAyMy40OTE3MDE1LDMzLjYwMzA2NDEgWiIvPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZS1Db3B5IiBmaWxsPSIjRkZDNDQ1IiBkPSJNMjQuMzE2MzU5NywzMy4yODgxMDI5IEMyNC4wMzA2NTc1LDMzLjAxMzg0NjIgMjMuOTMzNzI0NiwzMi41OTY4MjMyIDI0LjA2OTE3NiwzMi4yMjQ2NzM1IEwzNS4wOTE5MjMsMS45Mzk5MjUxIEMzNS4yMjY2MDc1LDEuNTY5ODgyNDMgMzUuNTY1OTI0OSwxLjMxMzMzNjEzIDM1Ljk1ODY2NjksMS4yODQ2MDk1NSBDMzYuNTA5NDgwMiwxLjI0NDMyMTA2IDM2Ljk4ODY2MjgsMS42NTgxODMxOCAzNy4wMjg5NTEzLDIuMjA4OTk2NDcgTDQwLjI0Mzc1NTcsNDYuMTYwOTI1NiBDNDAuMjY0NDM1NSw0Ni40NDM2NTQ2IDQwLjE2NDE0NDYsNDYuNzIxODc1MiAzOS45Njc4MjkzLDQ2LjkyNjM4MzMgQzM5LjU4NTM2NzIsNDcuMzI0ODA2NyAzOC45NTIzMzQ0LDQ3LjMzNzc0NTggMzguNTUzOTExMSw0Ni45NTUyODM3IEwyNC4zMTYzNTk3LDMzLjI4ODEwMjkgWiIvPjwvZz48L3N2Zz4="
};
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/code-brackets</title><g id="illustration/code-brackets" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Combined-Shape" fill="#87E6E5" d="M11.4139325,12 C11.7605938,12 12,12.5059743 12,13.3779712 L12,17.4951758 L6.43502246,23.3839989 C5.85499251,23.9978337 5.85499251,25.0021663 6.43502246,25.6160011 L12,31.5048242 L12,35.6220288 C12,36.4939606 11.7605228,37 11.4139325,37 C11.2725831,37 11.1134406,36.9158987 10.9453839,36.7379973 L0.435022463,25.6160011 C-0.145007488,25.0021663 -0.145007488,23.9978337 0.435022463,23.3839989 L10.9453839,12.2620027 C11.1134051,12.0841663 11.2725831,12 11.4139325,12 Z M36.5860675,12 C36.7274169,12 36.8865594,12.0841013 37.0546161,12.2620027 L47.5649775,23.3839989 C48.1450075,23.9978337 48.1450075,25.0021663 47.5649775,25.6160011 L37.0546161,36.7379973 C36.8865949,36.9158337 36.7274169,37 36.5860675,37 C36.2394062,37 36,36.4940257 36,35.6220288 L36,31.5048242 L41.5649775,25.6160011 C42.1450075,25.0021663 42.1450075,23.9978337 41.5649775,23.3839989 L36,17.4951758 L36,13.3779712 C36,12.5060394 36.2394772,12 36.5860675,12 Z"/><rect id="Rectangle-7-Copy-5" width="35.57" height="4" x="5.009" y="22.662" fill="#A0DB77" rx="2" transform="translate(22.793959, 24.662305) rotate(-75.000000) translate(-22.793959, -24.662305)"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/colors</title><g id="illustration/colors" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><circle id="Oval" cx="23.763" cy="16.192" r="13.271" fill="#FC521F" opacity=".6"/><circle id="Oval-Copy" cx="15.468" cy="32.308" r="13.271" fill="#66BF3C" opacity=".6"/><path id="Combined-Shape" fill="#FF5F95" d="M15.4683651,19.0362231 C21.5434817,19.0362231 26.6652087,23.1181689 28.2404554,28.6889694 C26.8420385,29.1906678 25.3344184,29.4637769 23.7630101,29.4637769 C17.6878936,29.4637769 12.5661666,25.3818311 10.9909199,19.8110306 C12.3898993,19.3092302 13.8972501,19.0362231 15.4683651,19.0362231 Z"/><circle id="Oval-Copy-2" cx="32.532" cy="32.308" r="13.271" fill="#1EA7FD" opacity=".6"/><path id="Combined-Shape" fill="#87E6E5" d="M24.00025,22.1417324 C26.897967,24.5762286 28.7397972,28.2268506 28.7397972,32.3076552 C28.7397972,36.3884597 26.897967,40.0390817 24.00025,42.4735779 C21.1018087,40.038637 19.2602028,36.3882111 19.2602028,32.3076552 C19.2602028,28.2815316 21.0530043,24.6741393 23.8838362,22.2402492 Z"/><path id="Combined-Shape" fill="#FBD178" d="M32.5316349,19.0362231 C33.9415155,19.0362231 35.3000478,19.2560712 36.5748203,19.6633557 C35.0489179,25.3104816 29.8909911,29.4637769 23.7630101,29.4637769 C22.3527608,29.4637769 20.9938866,29.2438138 19.7188247,28.8363247 C21.2451195,23.1900077 26.403293,19.0362231 32.5316349,19.0362231 Z"/><path id="Combined-Shape" fill="#FFF" d="M24.00025,22.1417324 L24.0124326,22.1519799 C24.1747744,22.288701 24.3337918,22.4292434 24.4893463,22.5734686 L24.3896855,22.4820008 C24.4671836,22.552408 24.5438453,22.6237194 24.619654,22.6959185 L24.4893463,22.5734686 C24.5690639,22.6473803 24.6478719,22.7222591 24.7257519,22.7980864 L24.619654,22.6959185 C24.6907654,22.7636441 24.7611262,22.8321506 24.8307226,22.9014245 L24.7257519,22.7980864 C24.8120661,22.8821258 24.8972403,22.9673303 24.981249,23.0536745 L24.8307226,22.9014245 C24.9073006,22.9776475 24.9829531,23.0547994 25.0576619,23.132862 L25.057852,23.1330605 C25.3140855,23.4007967 25.559391,23.679459 25.7928375,23.9681079 L25.7230574,23.8825538 C25.7985998,23.9743942 25.8729325,24.0672672 25.9460311,24.1611484 L25.7928375,23.9681079 C25.8624256,24.0541514 25.93096,24.1410823 25.998421,24.228881 L25.9460311,24.1611484 C26.0074362,24.2400115 26.0679704,24.319586 26.1276194,24.3998576 L25.998421,24.228881 C26.0663495,24.317288 26.1331896,24.4065749 26.1989214,24.4967216 L26.1276194,24.3998576 C26.204848,24.5037867 26.2805926,24.6088841 26.3548219,24.7151187 L26.1989214,24.4967216 C26.2678555,24.59126 26.3355706,24.6867441 26.4020436,24.7831507 L26.3548219,24.7151187 C26.4130013,24.798383 26.4702498,24.8823459 26.5265523,24.9669921 L26.4020436,24.7831507 C26.4678788,24.8786322 26.5324956,24.9750187 26.5958716,25.0722875 L26.5959296,25.0723765 C26.736338,25.2878741 26.870709,25.5077955 26.9987399,25.7318073 L26.9410662,25.6319089 C26.9973106,25.7283602 27.0523736,25.8255849 27.1062352,25.9235633 L26.9987399,25.7318073 C27.0539848,25.8284676 27.1080492,25.9258895 27.1609136,26.0240532 L27.1606656,26.0235927 C27.2696676,26.2259984 27.3733426,26.4310837 27.4717677,26.6391379 L27.4715275,26.6386302 C27.5541941,26.8133735 27.6329386,26.9896914 27.7079006,27.1679911 C27.7630163,27.299081 27.8161443,27.431391 27.8671831,27.5647345 L27.804312,27.4036517 C27.8391482,27.4912057 27.8730792,27.5792182 27.9060936,27.6676774 L27.8671831,27.5647345 C27.906613,27.6677486 27.9447959,27.7713796 27.9817136,27.8756091 L27.9060936,27.6676774 C27.946474,27.7758735 27.9854831,27.884738 28.0230997,27.9942498 L27.9817136,27.8756091 C28.0144978,27.9681688 28.0462842,28.0612004 28.0770597,28.1546911 L28.0230997,27.9942498 C28.0618265,28.1069941 28.0990774,28.2204244 28.1348294,28.3345177 L28.0770597,28.1546911 C28.1112208,28.2584663 28.1441365,28.3628071 28.175789,28.4676958 L28.1756797,28.4673338 L28.2408136,28.6893554 C28.2284694,28.6937793 28.2161167,28.6981854 28.2037557,28.7025737 L28.2404554,28.6889694 C27.9517707,28.7925384 27.6584322,28.8863659 27.3608394,28.97006 L27.3609965,28.9702524 C27.0695498,29.0519815 26.7741843,29.1241944 26.4751174,29.1863314 L26.5385665,29.1730829 C26.3901218,29.2046704 26.2407589,29.2337757 26.0905233,29.2603535 L26.4751174,29.1863314 C26.3367402,29.215082 26.1975707,29.2416755 26.0576458,29.2660754 L26.0905233,29.2603535 C25.9366833,29.2875689 25.7819282,29.312134 25.6263069,29.334 L26.0576458,29.2660754 C25.9017815,29.2932549 25.7449801,29.3177127 25.5872928,29.3393985 L25.6263069,29.334 C25.493366,29.3526793 25.3597929,29.3693888 25.2256182,29.3840982 L25.5872928,29.3393985 C25.4326976,29.360659 25.277251,29.3792552 25.1210012,29.3951396 L25.2256182,29.3840982 C25.0570566,29.4025774 24.8875455,29.4178998 24.7171453,29.4300052 L25.1210012,29.3951396 C24.9661341,29.4108835 24.810478,29.4239634 24.6540799,29.4343333 L24.7171453,29.4300052 C24.5612618,29.4410793 24.4046342,29.4494611 24.2473088,29.4551045 L24.6540799,29.4343333 C24.5098436,29.4438967 24.3649762,29.4511552 24.2195147,29.4560724 L24.2473088,29.4551045 C24.0865878,29.4608697 23.9251385,29.4637769 23.7630101,29.4637769 L23.3130142,29.4562912 C23.2993121,29.4558347 23.2856153,29.4553574 23.2719237,29.4548593 C22.9596275,29.4434959 22.6502324,29.4213577 22.3439491,29.3888006 L22.3886972,29.3934808 C22.2468147,29.3788837 22.105595,29.3620515 21.9650736,29.3430199 L22.3439491,29.3888006 C22.1914515,29.3725905 22.0397254,29.3537976 21.8888152,29.3324664 L21.9650736,29.3430199 C21.8025527,29.3210088 21.6409661,29.2960557 21.4803691,29.2682161 L21.8888152,29.3324664 C21.7352182,29.3107553 21.5824665,29.2864149 21.4306071,29.2594919 L21.4803691,29.2682161 C21.3506285,29.2457255 21.2215338,29.221351 21.0931142,29.1951218 L21.4306071,29.2594919 C21.2772401,29.2323016 21.1247833,29.2024774 20.973285,29.1700676 L21.0931142,29.1951218 C20.9267071,29.1611338 20.7614335,29.1240315 20.5973571,29.0838786 L20.973285,29.1700676 C20.825476,29.138447 20.6785795,29.1043653 20.5326403,29.0678674 L20.5973571,29.0838786 C20.4596684,29.0501832 20.3228227,29.0143396 20.1868576,28.9763851 L20.5326403,29.0678674 C20.3930822,29.0329653 20.2543997,28.9958536 20.1166319,28.9565718 L20.1169729,28.956669 L19.7188247,28.8363247 L19.7188247,28.8363247 L19.7880988,28.5894836 C19.8166627,28.4914193 19.8463277,28.3938241 19.8770797,28.2967124 L19.8480041,28.389868 C19.888904,28.2573207 19.931824,28.1256601 19.9767281,27.9949221 L19.8770797,28.2967124 C19.9117081,28.1873592 19.9477148,28.0786191 19.9850793,27.9705124 L19.9853117,27.9700125 C20.1152243,27.5939638 20.2618428,27.2250995 20.4240731,26.8647811 L20.345088,27.0439391 C20.3899401,26.9402428 20.4360767,26.8372321 20.4834778,26.7349269 L20.4240731,26.8647811 C20.461061,26.78263 20.4988604,26.7009231 20.5374612,26.6196707 L20.4834778,26.7349269 C20.5344734,26.6248636 20.5869326,26.515617 20.6408302,26.4072119 L20.5374612,26.6196707 C20.5871241,26.5151329 20.6381134,26.4113474 20.6904074,26.308336 L20.6408302,26.4072119 C20.681671,26.3250682 20.7233378,26.2434076 20.7658197,26.1622412 L20.7658807,26.1619302 C20.8435258,26.013775 20.923959,25.866962 21.0070529,25.7218685 C21.2050227,25.3759931 21.4182299,25.0398756 21.6456589,24.7144306 L21.5286537,24.8848257 C21.5876708,24.7975143 21.6476996,24.7109431 21.7087233,24.6251289 L21.6456589,24.7144306 C21.6993229,24.6376387 21.7537788,24.5614411 21.8090146,24.4858495 L21.7087233,24.6251289 C21.7826333,24.5211934 21.8580028,24.4183683 21.9348018,24.3166836 L21.8090146,24.4858495 C21.8722751,24.3992759 21.9365587,24.3134973 22.0018475,24.2285315 L22.0016895,24.2288802 C22.3179789,23.8171232 22.6576794,23.4247699 23.0189296,23.053491 L22.8296293,23.2521975 C22.9033796,23.1732135 22.9780829,23.095131 23.0537208,23.0179683 L23.0189296,23.053491 C23.083529,22.9870982 23.1488175,22.9213793 23.2147836,22.8563459 L23.0537208,23.0179683 C23.131055,22.9390752 23.2093662,22.8611436 23.2886348,22.7841931 L23.2147836,22.8563459 C23.2821211,22.7899605 23.3501645,22.7242893 23.4189017,22.6593447 L23.2886348,22.7841931 C23.3852399,22.6904132 23.4832671,22.5980904 23.582681,22.5072602 L23.4189017,22.6593447 C23.4912637,22.5909753 23.5643945,22.523411 23.6382797,22.4566663 L23.582681,22.5072602 C23.6715916,22.4260264 23.7616113,22.3459865 23.8527148,22.2671658 L23.8525967,22.2671923 C23.8915062,22.2336043 23.9304941,22.2002638 23.9696766,22.1671464 L24.00025,22.1417324 Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/comments</title><g id="illustration/comments" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Path" fill="#96D07C" d="M2.52730803,17.9196415 C2.44329744,17.9745167 2.36370847,18.000488 2.29303375,18.000488 C2.1197031,18.000488 2,17.8443588 2,17.5752855 L2,4 C2,1.790861 3.790861,3.23296945e-13 6,3.23296945e-13 L33.9995117,3.23296945e-13 C36.2086507,3.23296945e-13 37.9995117,1.790861 37.9995117,4 L37.9995117,9.999512 C37.9995117,12.208651 36.2086507,13.999512 33.9995117,13.999512 L8,13.999512 C7.83499225,13.999512 7.6723181,13.9895206 7.51254954,13.9701099 L2.52730803,17.9196415 Z"/><path id="Path" fill="#73E1E0" d="M7.51066,44.9703679 L2.52730803,47.9186655 C2.44329744,47.9735407 2.36370847,47.999512 2.29303375,47.999512 C2.1197031,47.999512 2,47.8433828 2,47.5743095 L2,35 C2,32.790861 3.790861,31 6,31 L26,31 C28.209139,31 30,32.790861 30,35 L30,41 C30,43.209139 28.209139,45 26,45 L8,45 C7.8343417,45 7.67103544,44.9899297 7.51066,44.9703679 Z"/><path id="Path" fill="#FFD476" d="M46,19.5 L46,33.0747975 C46,33.3438708 45.8802969,33.5 45.7069663,33.5 C45.6362915,33.5 45.5567026,33.4740287 45.472692,33.4191535 L40.4887103,29.4704446 C40.3285371,29.489956 40.1654415,29.5 40,29.5 L18,29.5 C15.790861,29.5 14,27.709139 14,25.5 L14,19.5 C14,17.290861 15.790861,15.5 18,15.5 L42,15.5 C44.209139,15.5 46,17.290861 46,19.5 Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/direction</title><g id="illustration/direction" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Combined-Shape" fill="#FFD476" d="M23.4917015,33.6030641 L2.93840258,31.4321033 C2.38917316,31.3740904 1.99096346,30.8818233 2.04897631,30.3325939 C2.0747515,30.0885705 2.18934861,29.8625419 2.37095722,29.6975265 L34.2609105,0.721285325 C34.6696614,0.349881049 35.3021022,0.38015648 35.6735064,0.788907393 C35.9232621,1.06377731 36.0001133,1.45442096 35.8730901,1.80341447 L24.5364357,32.9506164 C24.3793473,33.3822133 23.9484565,33.6513092 23.4917015,33.6030641 L23.4917015,33.6030641 Z"/><path id="Combined-Shape-Copy" fill="#FFC445" d="M24.3163597,33.2881029 C24.0306575,33.0138462 23.9337246,32.5968232 24.069176,32.2246735 L35.091923,1.9399251 C35.2266075,1.56988243 35.5659249,1.31333613 35.9586669,1.28460955 C36.5094802,1.24432106 36.9886628,1.65818318 37.0289513,2.20899647 L40.2437557,46.1609256 C40.2644355,46.4436546 40.1641446,46.7218752 39.9678293,46.9263833 C39.5853672,47.3248067 38.9523344,47.3377458 38.5539111,46.9552837 L24.3163597,33.2881029 L24.3163597,33.2881029 Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/flow</title><g id="illustration/flow" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Combined-Shape" fill="#79C9FC" fill-rule="nonzero" d="M30,29 C32.7614237,29 35,26.7614237 35,24 C35,14.6111593 27.3888407,7 18,7 C8.61115925,7 1,14.6111593 1,24 C1,33.3888407 8.61115925,41 18,41 C19.3333404,41 20.6447683,40.8466238 21.9154603,40.5471706 C19.5096374,39.3319645 17.5510566,37.8612875 16.0456579,36.1314815 C14.1063138,33.9030427 12.769443,31.0725999 12.0293806,27.6556449 C11.360469,26.565281 11,25.3082308 11,24 C11,20.1340068 14.1340068,17 18,17 C21.8659932,17 25,20.1340068 25,24 C25,26.125 27.7040312,29 30,29 Z"/><path id="Combined-Shape-Copy" fill="#FFC445" fill-rule="nonzero" d="M42,29 C44.7614237,29 47,26.7614237 47,24 C47,14.6111593 39.3888407,7 30,7 C20.6111593,7 13,14.6111593 13,24 C13,33.3888407 20.6111593,41 30,41 C31.3333404,41 32.6447683,40.8466238 33.9154603,40.5471706 C31.5096374,39.3319645 29.4051056,37.9781963 28.0456579,36.1314815 C26.0625,33.4375 23,27.1875 23,24 C23,20.1340068 26.1340068,17 30,17 C33.8659932,17 37,20.1340068 37,24 C37.02301,26.3435241 39.7040312,29 42,29 Z" transform="translate(30.000000, 24.000000) scale(-1, -1) translate(-30.000000, -24.000000)"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/plugin</title><g id="illustration/plugin" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Combined-Shape" fill="#79C9FC" d="M26,15.3994248 C26,15.4091303 26,15.4188459 26,15.4285714 L26,21.4694881 C25.8463595,21.4969567 25.6941676,21.51275 25.5873784,21.51275 C25.4974117,21.51275 25.4230979,21.4768034 25.377756,21.4206259 L25.2660784,21.2822603 L25.1317423,21.1657666 C24.2436317,20.3956144 23.100098,19.9633214 21.895551,19.9633214 C19.2039137,19.9633214 17,22.1075558 17,24.7804643 C17,27.4533728 19.2039137,29.5976071 21.895551,29.5976071 C23.1972122,29.5976071 24.3149423,29.2878193 25.1231445,28.3613697 C25.4542273,27.9818463 25.568273,27.9073214 25.5873784,27.9073214 C25.681532,27.9073214 25.8352452,27.9239643 26,27.9524591 L26,32.5714286 C26,32.5811541 26,32.5908697 26,32.6005752 L26,33 C26,35.209139 24.209139,37 22,37 L4,37 C1.790861,37 0,35.209139 0,33 L0,15 C0,12.790861 1.790861,11 4,11 L22,11 C24.209139,11 26,12.790861 26,15 L26,15.3994248 Z"/><path id="Path" fill="#87E6E5" d="M27.9998779,32.5714286 C27.9998779,33.3604068 28.6572726,34 29.4682101,34 L46.5315458,34 C47.3424832,34 47.9998779,33.3604068 47.9998779,32.5714286 L47.9998779,15.4285714 C47.9998779,14.6395932 47.3424832,14 46.5315458,14 L29.4682101,14 C28.6572726,14 27.9998779,14.6395932 27.9998779,15.4285714 L27.9998779,21.8355216 C27.9334367,22.2650514 27.8567585,22.6454496 27.746391,22.8084643 C27.4245309,23.2838571 26.2402709,23.51275 25.5873784,23.51275 C24.8705773,23.51275 24.2322714,23.1857725 23.8214379,22.6767605 C23.3096996,22.2329909 22.6349941,21.9633214 21.895551,21.9633214 C20.2963823,21.9633214 19,23.2245992 19,24.7804643 C19,26.3363293 20.2963823,27.5976071 21.895551,27.5976071 C22.5398535,27.5976071 23.2399343,27.477727 23.6160247,27.0466112 C24.1396029,26.4464286 24.7367044,25.9073214 25.5873784,25.9073214 C26.2402709,25.9073214 27.5912951,26.1766031 27.8226692,26.6116071 C27.8819199,26.7230038 27.9403239,26.921677 27.9998779,27.1556219 L27.9998779,32.5714286 Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/repo</title><g id="illustration/repo" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Rectangle-62-Copy" fill="#B7F0EF" d="M27.2217723,9.04506931 L41.2217723,6.2682098 C43.3886973,5.83840648 45.4937616,7.2466219 45.9235649,9.41354696 C45.9743993,9.66983721 46,9.93049166 46,10.1917747 L46,32.581381 C46,34.4904961 44.650862,36.1335143 42.7782277,36.5049459 L28.7782277,39.2818054 C26.6113027,39.7116087 24.5062384,38.3033933 24.0764351,36.1364682 C24.0256007,35.880178 24,35.6195235 24,35.3582405 L24,12.9686342 C24,11.0595191 25.349138,9.4165009 27.2217723,9.04506931 Z" opacity=".7"/><path id="Combined-Shape" fill="#87E6E5" d="M6.77822775,6.2682098 L20.7782277,9.04506931 C22.650862,9.4165009 24,11.0595191 24,12.9686342 L24,35.3582405 C24,37.5673795 22.209139,39.3582405 20,39.3582405 C19.738717,39.3582405 19.4780625,39.3326398 19.2217723,39.2818054 L5.22177225,36.5049459 C3.34913798,36.1335143 2,34.4904961 2,32.581381 L2,10.1917747 C2,7.98263571 3.790861,6.19177471 6,6.19177471 C6.26128305,6.19177471 6.5219375,6.21737537 6.77822775,6.2682098 Z"/><path id="Rectangle-63-Copy-2" fill="#61C1FD" d="M22,10 C23.1666667,10.2291667 24.0179036,10.625 24.5537109,11.1875 C25.0895182,11.75 25.5716146,12.875 26,14.5625 C26,29.3020833 26,37.5208333 26,39.21875 C26,40.9166667 26.4241536,42.9583333 27.2724609,45.34375 L24.5537109,41.875 L22.9824219,45.34375 C22.327474,43.1979167 22,41.2291667 22,39.4375 C22,37.6458333 22,27.8333333 22,10 Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" version="1.1" viewBox="0 0 48 48"><title>illustration/stackalt</title><g id="illustration/stackalt" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><path id="Combined-Shape" fill="#FFAE00" d="M23.8628277,0 L23.8628277,48 L3.32291648,36.2491883 L3.32155653,11.9499781 L23.8628277,0 Z M23.8670509,0 L44.408322,11.9499781 L44.4069621,36.2491883 L23.8670509,48 L23.8670509,0 Z" opacity=".196"/><path id="Rectangle-46-Copy-3" fill="#66BF3C" d="M15.8232279,19.1155258 L24.7368455,21.4714881 C29.6053842,22.7582937 33.4077423,26.5606518 34.694548,31.4291905 L37.0505103,40.3428082 C37.6150232,42.4786032 36.3412474,44.6676353 34.2054524,45.2321482 C33.5569474,45.4035549 32.87575,45.4091235 32.2245294,45.2483418 L23.3459013,43.0562718 C18.2976962,41.809906 14.3561301,37.8683399 13.1097642,32.8201348 L10.9176943,23.9415066 C10.3881737,21.7967682 11.6975664,19.6288529 13.8423049,19.0993322 C14.4935255,18.9385505 15.1747229,18.9441191 15.8232279,19.1155258 Z" opacity=".5" transform="translate(23.999997, 32.166058) rotate(-45.000000) translate(-23.999997, -32.166058)"/><path id="Rectangle-46-Copy-2" fill="#FFAE00" d="M15.8232279,11.2216893 L24.7368455,13.5776516 C29.6053842,14.8644572 33.4077423,18.6668153 34.694548,23.5353541 L37.0505103,32.4489717 C37.6150232,34.5847667 36.3412474,36.7737988 34.2054524,37.3383117 C33.5569474,37.5097184 32.87575,37.515287 32.2245294,37.3545053 L23.3459013,35.1624353 C18.2976962,33.9160695 14.3561301,29.9745034 13.1097642,24.9262983 L10.9176943,16.0476701 C10.3881737,13.9029317 11.6975664,11.7350164 13.8423049,11.2054957 C14.4935255,11.044714 15.1747229,11.0502826 15.8232279,11.2216893 Z" opacity=".5" transform="translate(23.999997, 24.272222) rotate(-45.000000) translate(-23.999997, -24.272222)"/><path id="Rectangle-46-Copy" fill="#FC521F" d="M15.8232279,3.32785281 L24.7368455,5.68381509 C29.6053842,6.97062075 33.4077423,10.7729788 34.694548,15.6415176 L37.0505103,24.5551352 C37.6150232,26.6909302 36.3412474,28.8799623 34.2054524,29.4444752 C33.5569474,29.6158819 32.87575,29.6214505 32.2245294,29.4606688 L23.3459013,27.2685988 C18.2976962,26.022233 14.3561301,22.0806669 13.1097642,17.0324618 L10.9176943,8.15383364 C10.3881737,6.00909519 11.6975664,3.84117987 13.8423049,3.31165925 C14.4935255,3.15087753 15.1747229,3.15644615 15.8232279,3.32785281 Z" opacity=".5" transform="translate(23.999997, 16.378385) rotate(-45.000000) translate(-23.999997, -16.378385)"/></g></svg>
\ No newline at end of file
module.exports = {
content: ["./src/**/*.{html,js,ts,vue}"],
prefix: 'slg-',
theme: {
minWidth:{
'bodySet':'1087px',
},
extend: {
textColor:{
mainHeader:'#354E57',
mainContent:"#2E2E22",
gold:'#A67744',
lightGray:'#F7F7F7'
},
spacing:{
'body':'1087px'
},
fontSize:{
40:['40px','56px'],
31:['31px','35px'],
18:['18px','25px']
}
},
},
plugins: [],
};
{
"compilerOptions": {
"removeComments": true,
"forceConsistentCasingInFileNames": true,
"target": "esnext",
"module": "esnext",
"strict": true,
"strictBindCallApply": true,
"importHelpers": true,
"moduleResolution": "node",
"isolatedModules": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"sourceMap": true,
"baseUrl": "./",
"types": ["vite/client", "@intlify/vite-plugin-vue-i18n/client"],
"paths": {
"@/*": ["src/*"],
"~/*": ["src/components/*"]
},
"lib": ["esnext", "dom", "dom.iterable", "scripthost"]
},
"include": ["vite.config.*", "src/**/*", "src/**/*.vue", "rollup.config.js"],
"exclude": ["node_modules", "**/*.stories.ts"]
}
import vueI18n from "@intlify/vite-plugin-vue-i18n";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import { fileURLToPath, URL } from "url";
import { defineConfig } from "vite";
import eslintPlugin from "vite-plugin-eslint";
// https://vitejs.dev/config/
export default defineConfig({
base: "./",
plugins: [
vue(),
vueI18n({
include: resolve(__dirname, "./src/locales/**"),
runtimeOnly: false,
}),
eslintPlugin(),
],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
"~": fileURLToPath(new URL("./src/components", import.meta.url)),
},
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "@/styles/boot.scss" as *;`,
},
},
},
server: { port: 8080 },
});
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment