vueless
Version:
Vue Styleless UI Component Library, powered by Tailwind CSS.
533 lines (508 loc) • 13.1 kB
JavaScript
/**
* The file has `.js` extension to support both node and browser scripts without a file transpilation.
* Please do not change the extension if you do not fully understand the consequences.
*/
/* Custom Vueless colors */
export const BRAND_COLOR = "brand";
export const GRAY_COLOR = "gray";
export const COOL_COLOR = "cool";
export const GRAYSCALE_COLOR = "grayscale";
/* Vueless dark mode */
export const DARK_MODE_SELECTOR = "vl-dark";
export const LIGHT_MODE_SELECTOR = "vl-light";
export const COLOR_MODE_KEY = "vl-color-mode";
/* Vueless defaults */
export const DEFAULT_BRAND_COLOR = GRAYSCALE_COLOR;
export const DEFAULT_GRAY_COLOR = COOL_COLOR;
export const DEFAULT_OUTLINE = 2; /* pixels */
export const OUTLINE_DECREMENT = 1; /* pixels */
export const OUTLINE_INCREMENT = 1; /* pixels */
export const DEFAULT_ROUNDING = 8; /* pixels */
export const ROUNDING_DECREMENT = 4; /* pixels */
export const ROUNDING_INCREMENT = 6; /* pixels */
export const DEFAULT_BASE_CLASSES = `
text-gray-900 dark:text-gray-100
`;
/* Vueless supported colors and shades */
export const COLOR_SHADES = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
export const GRAY_COLORS = ["slate", COOL_COLOR, "zinc", "neutral", "stone"];
export const BRAND_COLORS = [
"red",
"orange",
"amber",
"yellow",
"lime",
"green",
"emerald",
"teal",
"cyan",
"sky",
"blue",
"indigo",
"violet",
"purple",
"fuchsia",
"pink",
"rose",
];
/* Vueless merge class strategy types */
export const STRATEGY_TYPE = {
merge: "merge",
replace: "replace",
overwrite: "overwrite",
};
/* CVA (Class Variance Authority) default config keys */
export const CVA_CONFIG_KEY = {
base: "base",
variants: "variants",
compoundVariants: "compoundVariants",
defaultVariants: "defaultVariants",
};
/* Vueless default config keys */
export const SYSTEM_CONFIG_KEY = {
i18n: "i18n",
defaults: "defaults",
strategy: "strategy",
safelist: "safelist",
transition: "transition",
safelistColors: "safelistColors",
...CVA_CONFIG_KEY,
};
/* UIcon non-props defaults */
export const ICON_NON_PROPS_DEFAULTS = ["library", "path", "style", "weight"];
/* Component to folder mapping. */
export const COMPONENTS = {
/* Buttons & Links */
UButton: "ui.button",
ULink: "ui.button-link",
UToggle: "ui.button-toggle",
/* Dropdowns */
UDropdownButton: "ui.dropdown-button",
UDropdownBadge: "ui.dropdown-badge",
UDropdownLink: "ui.dropdown-link",
UDropdownList: "ui.dropdown-list",
/* Form Inputs & Controls */
UInput: "ui.form-input",
UInputFile: "ui.form-input-file",
UInputMoney: "ui.form-input-money",
UInputSearch: "ui.form-input-search",
UInputNumber: "ui.form-input-number",
UInputRating: "ui.form-input-rating",
UTextarea: "ui.form-textarea",
USelect: "ui.form-select",
UCheckbox: "ui.form-checkbox",
UCheckboxGroup: "ui.form-checkbox-group",
UCheckboxMultiState: "ui.form-checkbox-multi-state",
USwitch: "ui.form-switch",
URadio: "ui.form-radio",
URadioGroup: "ui.form-radio-group",
UCalendar: "ui.form-calendar",
UDatePicker: "ui.form-date-picker",
UDatePickerRange: "ui.form-date-picker-range",
UColorPicker: "ui.form-color-picker",
ULabel: "ui.form-label",
/* Text & Content */
UHeader: "ui.text-header",
UText: "ui.text-block",
UAlert: "ui.text-alert",
UNotify: "ui.text-notify",
UMoney: "ui.text-money",
UFile: "ui.text-file",
UFiles: "ui.text-files",
UEmpty: "ui.text-empty",
UBadge: "ui.text-badge",
UNumber: "ui.text-number",
/* Containers */
UDivider: "ui.container-divider",
UCol: "ui.container-col",
URow: "ui.container-row",
UGroup: "ui.container-group",
UGroups: "ui.container-groups",
UAccordion: "ui.container-accordion",
UCard: "ui.container-card",
UModal: "ui.container-modal",
UModalConfirm: "ui.container-modal-confirm",
UPage: "ui.container-page",
/* Images and Icons */
UIcon: "ui.image-icon",
UAvatar: "ui.image-avatar",
/* Data */
UTable: "ui.data-table",
UDataList: "ui.data-list",
/* Navigation */
UTab: "ui.navigation-tab",
UTabs: "ui.navigation-tabs",
UProgress: "ui.navigation-progress",
UPagination: "ui.navigation-pagination",
UBreadcrumbs: "ui.navigation-breadcrumbs",
/* Loaders and Skeletons */
ULoader: "ui.loader",
ULoaderProgress: "ui.loader-progress",
ULoaderOverlay: "ui.loader-overlay",
/* Other */
UDot: "ui.other-dot",
UThemeColorToggle: "ui.other-theme-color-toggle",
};
/**
* Extending Tailwind Merge by vueless custom tailwind classes.
* All lists of rules available here:
* https://github.com/dcastil/tailwind-merge/blob/v2.3.0/src/lib/default-config.ts
*/
export const TAILWIND_MERGE_EXTENSION = {
extend: {
theme: {
spacing: ["safe-top", "safe-bottom", "safe-left", "safe-right"],
},
classGroups: {
"outline-w": [{ outline: ["dynamic", "dynamic-sm", "dynamic-lg"] }],
"font-size": [{ text: ["2xs"] }],
rounded: [{ rounded: ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-s": [{ "rounded-s": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-e": [{ "rounded-e": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-t": [{ "rounded-t": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-r": [{ "rounded-r": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-b": [{ "rounded-b": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-l": [{ "rounded-l": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-ss": [{ "rounded-ss": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-se": [{ "rounded-se": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-ee": [{ "rounded-ee": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-es": [{ "rounded-es": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-tl": [{ "rounded-tl": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-tr": [{ "rounded-tr": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-br": [{ "rounded-br": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
"rounded-bl": [{ "rounded-bl": ["dynamic", "dynamic-sm", "dynamic-lg", "inherit"] }],
},
},
};
/* SVGO config for preparing SVG icons. */
export const DEFAULT_SVGO_CONFIG = {
plugins: [
{
name: "preset-default",
params: {
overrides: {
removeViewBox: false,
convertColors: {
currentColor: true,
},
},
},
},
],
};
/* Vueless general */
export const ICONS_DIR = "assets/icons";
export const VUELESS_LIBRARY = "vueless";
export const STORYBOOK_DIR = "storybook";
export const VUELESS_CONFIG_FILE_NAME = "vueless.config";
export const VUELESS_CACHE_DIR = "node_modules/.cache/vueless";
export const VUELESS_DIR = `node_modules/${VUELESS_LIBRARY}`;
export const VUELESS_LOCAL_DIR = `src`;
export const VUELESS_ICONS_DIR = `${VUELESS_DIR}/${ICONS_DIR}`;
export const VUELESS_ICONS_LOCAL_DIR = `src/${ICONS_DIR}`;
export const VUELESS_ICONS_CACHED_DIR = `${VUELESS_CACHE_DIR}/${ICONS_DIR}`;
export const VUELESS_CONFIGS_CACHED_DIR = `${VUELESS_CACHE_DIR}/configs`;
/* System error codes */
export const DEFAULT_EXIT_CODE = 0;
export const FAILURE_CODE = 1;
/* Other */
export const PX_IN_REM = 16;
export const NESTED_COMPONENT_PATTERN_REG_EXP = /\{(U[^}]*)}/;
export const EXTENDS_PATTERN_REG_EXP = /\{>[^}]*}/g;
export const DYNAMIC_COLOR_PATTERN = "{color}";
export const TAILWIND_COLOR_OPACITY_DELIMITER = "/";
export const TAILWIND_VARIANT_DELIMITER = ":";
export const TAILWIND_VARIANT_DELIMITER_REG_EXP = /:(?![^[]*])/;
export const JAVASCRIPT_EXT = ".js";
export const TYPESCRIPT_EXT = ".ts";
/* Default tailwind colors */
export const TAILWIND_COLORS = {
white: "#ffffff",
slate: {
50: "#f8fafc",
100: "#f1f5f9",
200: "#e2e8f0",
300: "#cbd5e1",
400: "#94a3b8",
500: "#64748b",
600: "#475569",
700: "#334155",
800: "#1e293b",
900: "#0f172a",
950: "#020617",
},
/* ex. `gray` color */
cool: {
50: "#f9fafb",
100: "#f3f4f6",
200: "#e5e7eb",
300: "#d1d5db",
400: "#9ca3af",
500: "#6b7280",
600: "#4b5563",
700: "#374151",
800: "#1f2937",
900: "#111827",
950: "#030712",
},
zinc: {
50: "#fafafa",
100: "#f4f4f5",
200: "#e4e4e7",
300: "#d4d4d8",
400: "#a1a1aa",
500: "#71717a",
600: "#52525b",
700: "#3f3f46",
800: "#27272a",
900: "#18181b",
950: "#09090b",
},
neutral: {
50: "#fafafa",
100: "#f5f5f5",
200: "#e5e5e5",
300: "#d4d4d4",
400: "#a3a3a3",
500: "#737373",
600: "#525252",
700: "#404040",
800: "#262626",
900: "#171717",
950: "#0a0a0a",
},
stone: {
50: "#fafaf9",
100: "#f5f5f4",
200: "#e7e5e4",
300: "#d6d3d1",
400: "#a8a29e",
500: "#78716c",
600: "#57534e",
700: "#44403c",
800: "#292524",
900: "#1c1917",
950: "#0c0a09",
},
red: {
50: "#fef2f2",
100: "#fee2e2",
200: "#fecaca",
300: "#fca5a5",
400: "#f87171",
500: "#ef4444",
600: "#dc2626",
700: "#b91c1c",
800: "#991b1b",
900: "#7f1d1d",
950: "#450a0a",
},
orange: {
50: "#fff7ed",
100: "#ffedd5",
200: "#fed7aa",
300: "#fdba74",
400: "#fb923c",
500: "#f97316",
600: "#ea580c",
700: "#c2410c",
800: "#9a3412",
900: "#7c2d12",
950: "#431407",
},
amber: {
50: "#fffbeb",
100: "#fef3c7",
200: "#fde68a",
300: "#fcd34d",
400: "#fbbf24",
500: "#f59e0b",
600: "#d97706",
700: "#b45309",
800: "#92400e",
900: "#78350f",
950: "#451a03",
},
yellow: {
50: "#fefce8",
100: "#fef9c3",
200: "#fef08a",
300: "#fde047",
400: "#facc15",
500: "#eab308",
600: "#ca8a04",
700: "#a16207",
800: "#854d0e",
900: "#713f12",
950: "#422006",
},
lime: {
50: "#f7fee7",
100: "#ecfccb",
200: "#d9f99d",
300: "#bef264",
400: "#a3e635",
500: "#84cc16",
600: "#65a30d",
700: "#4d7c0f",
800: "#3f6212",
900: "#365314",
950: "#1a2e05",
},
green: {
50: "#f0fdf4",
100: "#dcfce7",
200: "#bbf7d0",
300: "#86efac",
400: "#4ade80",
500: "#22c55e",
600: "#16a34a",
700: "#15803d",
800: "#166534",
900: "#14532d",
950: "#052e16",
},
emerald: {
50: "#ecfdf5",
100: "#d1fae5",
200: "#a7f3d0",
300: "#6ee7b7",
400: "#34d399",
500: "#10b981",
600: "#059669",
700: "#047857",
800: "#065f46",
900: "#064e3b",
950: "#022c22",
},
teal: {
50: "#f0fdfa",
100: "#ccfbf1",
200: "#99f6e4",
300: "#5eead4",
400: "#2dd4bf",
500: "#14b8a6",
600: "#0d9488",
700: "#0f766e",
800: "#115e59",
900: "#134e4a",
950: "#042f2e",
},
cyan: {
50: "#ecfeff",
100: "#cffafe",
200: "#a5f3fc",
300: "#67e8f9",
400: "#22d3ee",
500: "#06b6d4",
600: "#0891b2",
700: "#0e7490",
800: "#155e75",
900: "#164e63",
950: "#083344",
},
sky: {
50: "#f0f9ff",
100: "#e0f2fe",
200: "#bae6fd",
300: "#7dd3fc",
400: "#38bdf8",
500: "#0ea5e9",
600: "#0284c7",
700: "#0369a1",
800: "#075985",
900: "#0c4a6e",
950: "#082f49",
},
blue: {
50: "#eff6ff",
100: "#dbeafe",
200: "#bfdbfe",
300: "#93c5fd",
400: "#60a5fa",
500: "#3b82f6",
600: "#2563eb",
700: "#1d4ed8",
800: "#1e40af",
900: "#1e3a8a",
950: "#172554",
},
indigo: {
50: "#eef2ff",
100: "#e0e7ff",
200: "#c7d2fe",
300: "#a5b4fc",
400: "#818cf8",
500: "#6366f1",
600: "#4f46e5",
700: "#4338ca",
800: "#3730a3",
900: "#312e81",
950: "#1e1b4b",
},
violet: {
50: "#f5f3ff",
100: "#ede9fe",
200: "#ddd6fe",
300: "#c4b5fd",
400: "#a78bfa",
500: "#8b5cf6",
600: "#7c3aed",
700: "#6d28d9",
800: "#5b21b6",
900: "#4c1d95",
950: "#2e1065",
},
purple: {
50: "#faf5ff",
100: "#f3e8ff",
200: "#e9d5ff",
300: "#d8b4fe",
400: "#c084fc",
500: "#a855f7",
600: "#9333ea",
700: "#7e22ce",
800: "#6b21a8",
900: "#581c87",
950: "#3b0764",
},
fuchsia: {
50: "#fdf4ff",
100: "#fae8ff",
200: "#f5d0fe",
300: "#f0abfc",
400: "#e879f9",
500: "#d946ef",
600: "#c026d3",
700: "#a21caf",
800: "#86198f",
900: "#701a75",
950: "#4a044e",
},
pink: {
50: "#fdf2f8",
100: "#fce7f3",
200: "#fbcfe8",
300: "#f9a8d4",
400: "#f472b6",
500: "#ec4899",
600: "#db2777",
700: "#be185d",
800: "#9d174d",
900: "#831843",
950: "#500724",
},
rose: {
50: "#fff1f2",
100: "#ffe4e6",
200: "#fecdd3",
300: "#fda4af",
400: "#fb7185",
500: "#f43f5e",
600: "#e11d48",
700: "#be123c",
800: "#9f1239",
900: "#881337",
950: "#4c0519",
},
};