chore: server-and-serverless template
This commit is contained in:
3
packages/mantine-theme/active.json
Normal file
3
packages/mantine-theme/active.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"id": "default"
|
||||
}
|
||||
6
packages/mantine-theme/base.json
Normal file
6
packages/mantine-theme/base.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"fontFamily": "IBM Plex Sans, sans-serif",
|
||||
"headings": {
|
||||
"fontFamily": "IBM Plex Sans, sans-serif"
|
||||
}
|
||||
}
|
||||
38
packages/mantine-theme/index.ts
Normal file
38
packages/mantine-theme/index.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { createTheme, type MantineColorsTuple, type MantineThemeOverride } from '@mantine/core'
|
||||
import { generateColors } from '@mantine/colors-generator'
|
||||
import base from './base.json'
|
||||
import active from './active.json'
|
||||
import { palettes } from './palettes'
|
||||
|
||||
export type Palette = {
|
||||
name: string
|
||||
description?: string
|
||||
primaryColor?: string
|
||||
bases?: Record<string, string>
|
||||
}
|
||||
|
||||
// Each palette extends the shared base (fonts, radius, component defaults) and
|
||||
// auto-expands its `bases` hexes into full 10-shade Mantine scales, so a palette
|
||||
// only declares one colour per semantic role. Deterministic, so a previewed
|
||||
// palette and a persisted one render identically.
|
||||
export const buildTheme = (palette: Palette): MantineThemeOverride => {
|
||||
const colors: Record<string, MantineColorsTuple> = Object.fromEntries(
|
||||
Object.entries(palette.bases ?? {}).map(([role, hex]) => [role, generateColors(hex)]),
|
||||
)
|
||||
return createTheme({
|
||||
...(base as MantineThemeOverride),
|
||||
...(palette.primaryColor ? { primaryColor: palette.primaryColor } : {}),
|
||||
...(Object.keys(colors).length ? { colors } : {}),
|
||||
})
|
||||
}
|
||||
|
||||
export const themes: Record<string, MantineThemeOverride> = Object.fromEntries(
|
||||
Object.entries(palettes).map(([id, palette]) => [id, buildTheme(palette as Palette)]),
|
||||
)
|
||||
|
||||
export { palettes }
|
||||
export const activeId = active.id
|
||||
export const activeTheme: MantineThemeOverride = themes[active.id] ?? themes.default
|
||||
|
||||
// Back-compat: existing imports of `theme` resolve to the active palette.
|
||||
export const theme = activeTheme
|
||||
25
packages/mantine-theme/package.json
Normal file
25
packages/mantine-theme/package.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@project/mantine-themes",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./base.json": "./base.json",
|
||||
"./active.json": "./active.json"
|
||||
},
|
||||
"scripts": {
|
||||
"tsc": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@mantine/colors-generator": "^9.2.1",
|
||||
"chroma-js": "^3.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@mantine/core": "^9.2.1",
|
||||
"typescript": "^5.9"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@mantine/core": "^9.2.1"
|
||||
}
|
||||
}
|
||||
4
packages/mantine-theme/palettes/default.json
Normal file
4
packages/mantine-theme/palettes/default.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "Default",
|
||||
"primaryColor": "blue"
|
||||
}
|
||||
7
packages/mantine-theme/palettes/emerald.json
Normal file
7
packages/mantine-theme/palettes/emerald.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "Emerald",
|
||||
"primaryColor": "emerald",
|
||||
"bases": {
|
||||
"emerald": "#059669"
|
||||
}
|
||||
}
|
||||
9
packages/mantine-theme/palettes/index.ts
Normal file
9
packages/mantine-theme/palettes/index.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
// Generated by the fabric-theme tool — do not edit by hand.
|
||||
// Lists every palette JSON in this directory. Add palettes via the theme tool.
|
||||
import p_default from './default.json'
|
||||
import p_emerald from './emerald.json'
|
||||
|
||||
export const palettes: Record<string, unknown> = {
|
||||
default: p_default,
|
||||
emerald: p_emerald,
|
||||
}
|
||||
15
packages/mantine-theme/tsconfig.json
Normal file
15
packages/mantine-theme/tsconfig.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "Bundler",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"resolveJsonModule": true,
|
||||
"noEmit": true,
|
||||
"types": []
|
||||
},
|
||||
"include": ["index.ts", "base.json", "active.json", "palettes/**/*.ts", "palettes/**/*.json"]
|
||||
}
|
||||
Reference in New Issue
Block a user