it-tools/dist/server/chunks/chunk-6003391e.js
2024-04-28 00:48:29 +08:00

295 lines
8.9 KiB
JavaScript

import { watch, computed, defineComponent, toRefs, unref, createVNode, resolveDynamicComponent, mergeProps, withCtx, renderSlot, useSSRContext } from 'vue';
import { ssrRenderVNode, ssrRenderSlot } from 'vue/server-renderer';
import { useDark, useToggle, useMediaQuery, useStorage } from '@vueuse/core';
import { defineStore } from 'pinia';
const useStyleStore = defineStore("style", {
state: () => {
const isDarkTheme = useDark();
const toggleDark = useToggle(isDarkTheme);
const isSmallScreen = useMediaQuery("(max-width: 700px)");
const isMenuCollapsed = useStorage("isMenuCollapsed", isSmallScreen.value);
watch(isSmallScreen, (v) => isMenuCollapsed.value = v);
return {
isDarkTheme,
toggleDark,
isMenuCollapsed,
isSmallScreen
};
}
});
function defineThemes(themes) {
return {
themes,
useTheme() {
const styleStore = useStyleStore();
return computed(() => themes[styleStore.isDarkTheme ? "dark" : "light"]);
}
};
}
const { themes: appThemes, useTheme: useAppTheme } = defineThemes({
light: {
background: "#ffffff",
text: {
baseColor: "#333639",
mutedColor: "#767c82"
},
default: {
color: "rgba(46, 51, 56, 0.05)",
colorHover: "rgba(46, 51, 56, 0.09)",
colorPressed: "rgba(46, 51, 56, 0.22)"
},
primary: {
color: "#18a058",
colorHover: "#1ea54c",
colorPressed: "#0C7A43",
colorFaded: "#18a0582f"
},
warning: {
color: "#f59e0b",
colorHover: "#f59e0b",
colorPressed: "#f59e0b",
colorFaded: "#f59e0b2f"
},
success: {
color: "#18a058",
colorHover: "#36ad6a",
colorPressed: "#0c7a43",
colorFaded: "#18a0582f"
},
error: {
color: "#d03050",
colorHover: "#de576d",
colorPressed: "#ab1f3f",
colorFaded: "#d030502a"
}
},
dark: {
background: "#1e1e1e",
text: {
baseColor: "#ffffffd1",
mutedColor: "#ffffff80"
},
default: {
color: "rgba(255, 255, 255, 0.08)",
colorHover: "rgba(255, 255, 255, 0.12)",
colorPressed: "rgba(255, 255, 255, 0.24)"
},
primary: {
color: "#1ea54c",
colorHover: "#36AD6A",
colorPressed: "#0C7A43",
colorFaded: "#18a0582f"
},
warning: {
color: "#f59e0b",
colorHover: "#f59e0b",
colorPressed: "#f59e0b",
colorFaded: "#f59e0b2f"
},
success: {
color: "#18a058",
colorHover: "#36ad6a",
colorPressed: "#0c7a43",
colorFaded: "#18a0582f"
},
error: {
color: "#e88080",
colorHover: "#e98b8b",
colorPressed: "#e57272",
colorFaded: "#e8808029"
}
}
});
const clampHex = (value) => Math.max(0, Math.min(255, Math.round(value)));
function lighten(color, amount) {
const alpha = color.length === 9 ? color.slice(7) : "";
const num = Number.parseInt(color.slice(1, 7), 16);
const r = clampHex((num >> 16 & 255) + amount);
const g = clampHex((num >> 8 & 255) + amount);
const b = clampHex((num & 255) + amount);
return `#${(r << 16 | g << 8 | b).toString(16).padStart(6, "0")}${alpha}`;
}
function darken(color, amount) {
return lighten(color, -amount);
}
function createState({
textColor,
backgroundColor,
hoverBackground,
hoveredTextColor = textColor,
pressedBackground,
pressedTextColor = textColor
}) {
return {
textColor,
backgroundColor,
hover: { textColor: hoveredTextColor, backgroundColor: hoverBackground },
pressed: { textColor: pressedTextColor, backgroundColor: pressedBackground }
};
}
function createTheme({ style }) {
const theme = appThemes[style];
return {
size: {
small: {
width: "28px",
fontSize: "12px"
},
medium: {
width: "34px",
fontSize: "14px"
},
large: {
width: "40px",
fontSize: "16px"
}
},
basic: {
default: createState({
textColor: theme.text.baseColor,
backgroundColor: theme.default.color,
hoverBackground: theme.default.colorHover,
pressedBackground: theme.default.colorPressed
}),
primary: createState({
textColor: theme.primary.color,
backgroundColor: theme.primary.colorFaded,
hoverBackground: lighten(theme.primary.colorFaded, 30),
pressedBackground: darken(theme.primary.colorFaded, 30)
}),
warning: createState({
textColor: theme.warning.color,
backgroundColor: theme.warning.colorFaded,
hoverBackground: lighten(theme.warning.colorFaded, 30),
pressedBackground: darken(theme.warning.colorFaded, 30)
}),
error: createState({
textColor: theme.error.color,
backgroundColor: theme.error.colorFaded,
hoverBackground: lighten(theme.error.colorFaded, 30),
pressedBackground: darken(theme.error.colorFaded, 30)
})
},
text: {
default: createState({
textColor: theme.text.baseColor,
backgroundColor: "transparent",
hoverBackground: theme.default.colorHover,
pressedBackground: theme.default.colorPressed
}),
primary: createState({
textColor: theme.primary.color,
backgroundColor: "transparent",
hoverBackground: theme.primary.colorFaded,
pressedBackground: darken(theme.primary.colorFaded, 30)
}),
warning: createState({
textColor: darken(theme.warning.color, 20),
backgroundColor: "transparent",
hoverBackground: theme.warning.colorFaded,
pressedBackground: darken(theme.warning.colorFaded, 30)
}),
error: createState({
textColor: darken(theme.error.color, 20),
backgroundColor: "transparent",
hoverBackground: theme.error.colorFaded,
pressedBackground: darken(theme.error.colorFaded, 30)
})
}
};
}
const { useTheme } = defineThemes({
dark: createTheme({ style: "dark" }),
light: createTheme({ style: "light" })
});
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "c-button",
__ssrInlineRender: true,
props: {
type: { default: "default" },
variant: { default: "basic" },
disabled: { type: Boolean, default: false },
round: { type: Boolean, default: false },
circle: { type: Boolean, default: false },
href: { default: void 0 },
to: { default: void 0 },
size: { default: "medium" }
},
emits: ["click"],
setup(__props, { emit: emits }) {
const props = __props;
const { variant, disabled, round, circle, href, type, to, size: sizeName } = toRefs(props);
function handleClick(event) {
if (!disabled.value) {
emits("click", event);
}
}
const theme = useTheme();
const variantTheme = computed(() => theme.value[variant.value][type.value]);
const tag = computed(() => {
if (href.value) {
return "a";
}
if (to.value) {
return "router-link";
}
return "button";
});
const appTheme = useAppTheme();
const size = computed(() => theme.value.size[sizeName.value]);
return (_ctx, _push, _parent, _attrs) => {
const _cssVars = { style: {
"--9a468bfe": unref(size).fontSize,
"--09441655": unref(size).width,
"--e1cab870": unref(variantTheme).textColor,
"--645976e7": unref(variantTheme).backgroundColor,
"--cea95e96": unref(variantTheme).hover.backgroundColor,
"--369e4b1b": unref(variantTheme).pressed.backgroundColor,
"--c8f65826": unref(appTheme).primary.color
} };
ssrRenderVNode(_push, createVNode(resolveDynamicComponent(unref(tag)), mergeProps({
href: unref(href) ?? unref(to),
class: ["c-button", { disabled: unref(disabled), round: unref(round), circle: unref(circle) }],
to: unref(to),
onClick: handleClick
}, _attrs, _cssVars), {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
ssrRenderSlot(_ctx.$slots, "default", {}, null, _push2, _parent2, _scopeId);
} else {
return [
renderSlot(_ctx.$slots, "default", {}, void 0, true)
];
}
}),
_: 3
}), _parent);
};
}
});
/* unplugin-vue-components disabled */const cButton_vue_vue_type_style_index_0_scoped_147876cf_lang = '';
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("src/ui/c-button/c-button.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-147876cf"]]);
export { _export_sfc as _, __unplugin_components_0 as a, appThemes as b, useAppTheme as c, defineThemes as d, darken as e, useStyleStore as u };