@symblight/md-colors 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +108 -0
- package/dist/client.esm.js +7044 -0
- package/dist/client.esm.js.map +7 -0
- package/dist/client.js +97 -0
- package/dist/client.js.map +7 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +7 -0
- package/package.json +51 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// tokens.mjs
|
|
2
|
+
import {
|
|
3
|
+
argbFromHex,
|
|
4
|
+
themeFromSourceColor,
|
|
5
|
+
hexFromArgb,
|
|
6
|
+
MaterialDynamicColors,
|
|
7
|
+
SchemeContent,
|
|
8
|
+
Hct
|
|
9
|
+
} from "@material/material-color-utilities";
|
|
10
|
+
import { converter, formatCss } from "culori";
|
|
11
|
+
var oklch = converter("oklch");
|
|
12
|
+
var materialColors = {
|
|
13
|
+
"surface-container-highest": MaterialDynamicColors.surfaceContainerHighest,
|
|
14
|
+
"surface-container-high": MaterialDynamicColors.surfaceContainerHigh,
|
|
15
|
+
"surface-dim": MaterialDynamicColors.surfaceDim,
|
|
16
|
+
"surface-bright": MaterialDynamicColors.surfaceBright,
|
|
17
|
+
"surface-container-lowest": MaterialDynamicColors.surfaceContainerLowest,
|
|
18
|
+
"surface-container-low": MaterialDynamicColors.surfaceContainerLow
|
|
19
|
+
};
|
|
20
|
+
function setSchemeProperties(scheme, suffix = "") {
|
|
21
|
+
let result = {};
|
|
22
|
+
for (const [key, value] of Object.entries(scheme)) {
|
|
23
|
+
const token = key.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
24
|
+
const color = hexFromArgb(value);
|
|
25
|
+
const converted = oklch(color);
|
|
26
|
+
const name = formatCss(converted);
|
|
27
|
+
const variableName = `--md-sys-color-${token}${suffix}`;
|
|
28
|
+
result[variableName] = name;
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
function generateTokens(config = { scheme: "light", sourceColor: "#1D5D78" }) {
|
|
33
|
+
const theme = themeFromSourceColor(argbFromHex(config.sourceColor), []);
|
|
34
|
+
const scheme = new SchemeContent(
|
|
35
|
+
Hct.fromInt(argbFromHex(config.sourceColor)),
|
|
36
|
+
config.scheme === "dark",
|
|
37
|
+
0
|
|
38
|
+
);
|
|
39
|
+
let palette = {};
|
|
40
|
+
for (const [key, value] of Object.entries(materialColors)) {
|
|
41
|
+
palette[key] = value.getArgb(scheme);
|
|
42
|
+
}
|
|
43
|
+
const currentTheme = theme.schemes[config.scheme].toJSON();
|
|
44
|
+
const tokens = setSchemeProperties({ ...currentTheme, ...palette });
|
|
45
|
+
return tokens;
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
generateTokens,
|
|
49
|
+
setSchemeProperties
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../tokens.mjs"],
|
|
4
|
+
"sourcesContent": ["import {\n argbFromHex,\n themeFromSourceColor,\n hexFromArgb,\n MaterialDynamicColors,\n SchemeContent,\n Hct,\n} from \"@material/material-color-utilities\";\nimport { converter, formatCss } from \"culori\";\n\nlet oklch = converter(\"oklch\");\n\nconst materialColors = {\n \"surface-container-highest\": MaterialDynamicColors.surfaceContainerHighest,\n \"surface-container-high\": MaterialDynamicColors.surfaceContainerHigh,\n \"surface-dim\": MaterialDynamicColors.surfaceDim,\n \"surface-bright\": MaterialDynamicColors.surfaceBright,\n \"surface-container-lowest\": MaterialDynamicColors.surfaceContainerLowest,\n \"surface-container-low\": MaterialDynamicColors.surfaceContainerLow,\n};\n\n/**\n * Converts a Material color scheme object into a map of CSS custom property\n * names to oklch color values.\n *\n * Each camelCase key is converted to kebab-case and prefixed with\n * `--md-sys-color-`. An optional suffix can be appended to the variable name.\n *\n * @param {Record<string, number>} scheme - Map of token names to ARGB integers.\n * @param {string} [suffix=\"\"] - Optional suffix appended to every variable name.\n * @returns {Record<string, string>} Map of CSS variable names to oklch strings.\n *\n * @example\n * const vars = setSchemeProperties({ primary: 0xff1d5d78 });\n * // { \"--md-sys-color-primary\": \"oklch(\u2026)\" }\n */\nexport function setSchemeProperties(scheme, suffix = \"\") {\n let result = {};\n for (const [key, value] of Object.entries(scheme)) {\n const token = key.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n const color = hexFromArgb(value);\n const converted = oklch(color);\n const name = formatCss(converted);\n const variableName = `--md-sys-color-${token}${suffix}`;\n result[variableName] = name;\n }\n\n return result;\n}\n\n/**\n * Generates a full set of Material Design 3 color tokens for a given source\n * color and color scheme.\n *\n * Tokens cover the standard MD3 scheme palette plus additional surface\n * container roles provided by {@link MaterialDynamicColors}. All color values\n * are expressed as oklch CSS strings so they can be used directly in\n * `var(--md-sys-color-*)` declarations.\n *\n * @param {{ scheme?: \"light\" | \"dark\", sourceColor?: string }} [config]\n * @param {string} [config.sourceColor=\"#1D5D78\"] - Seed color as a hex string (e.g. `\"#6750A4\"`).\n * @param {\"light\" | \"dark\"} [config.scheme=\"light\"] - Color scheme variant.\n * @returns {Record<string, string>} Map of CSS variable names to oklch color strings.\n *\n * @example\n * const tokens = generateTokens({ sourceColor: \"#6750A4\", scheme: \"dark\" });\n * // { \"--md-sys-color-primary\": \"oklch(\u2026)\", \u2026 }\n */\nexport function generateTokens(config = { scheme: \"light\", sourceColor: \"#1D5D78\" }) {\n const theme = themeFromSourceColor(argbFromHex(config.sourceColor), []);\n\n const scheme = new SchemeContent(\n Hct.fromInt(argbFromHex(config.sourceColor)),\n config.scheme === \"dark\",\n 0\n );\n let palette = {};\n for (const [key, value] of Object.entries(materialColors)) {\n palette[key] = value.getArgb(scheme);\n }\n const currentTheme = theme.schemes[config.scheme].toJSON();\n const tokens = setSchemeProperties({ ...currentTheme, ...palette });\n\n return tokens;\n}\n"],
|
|
5
|
+
"mappings": ";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,WAAW,iBAAiB;AAErC,IAAI,QAAQ,UAAU,OAAO;AAE7B,IAAM,iBAAiB;AAAA,EACrB,6BAA6B,sBAAsB;AAAA,EACnD,0BAA0B,sBAAsB;AAAA,EAChD,eAAe,sBAAsB;AAAA,EACrC,kBAAkB,sBAAsB;AAAA,EACxC,4BAA4B,sBAAsB;AAAA,EAClD,yBAAyB,sBAAsB;AACjD;AAiBO,SAAS,oBAAoB,QAAQ,SAAS,IAAI;AACvD,MAAI,SAAS,CAAC;AACd,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAM,QAAQ,IAAI,QAAQ,mBAAmB,OAAO,EAAE,YAAY;AAClE,UAAM,QAAQ,YAAY,KAAK;AAC/B,UAAM,YAAY,MAAM,KAAK;AAC7B,UAAM,OAAO,UAAU,SAAS;AAChC,UAAM,eAAe,kBAAkB,KAAK,GAAG,MAAM;AACrD,WAAO,YAAY,IAAI;AAAA,EACzB;AAEA,SAAO;AACT;AAoBO,SAAS,eAAe,SAAS,EAAE,QAAQ,SAAS,aAAa,UAAU,GAAG;AACnF,QAAM,QAAQ,qBAAqB,YAAY,OAAO,WAAW,GAAG,CAAC,CAAC;AAEtE,QAAM,SAAS,IAAI;AAAA,IACjB,IAAI,QAAQ,YAAY,OAAO,WAAW,CAAC;AAAA,IAC3C,OAAO,WAAW;AAAA,IAClB;AAAA,EACF;AACA,MAAI,UAAU,CAAC;AACf,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,cAAc,GAAG;AACzD,YAAQ,GAAG,IAAI,MAAM,QAAQ,MAAM;AAAA,EACrC;AACA,QAAM,eAAe,MAAM,QAAQ,OAAO,MAAM,EAAE,OAAO;AACzD,QAAM,SAAS,oBAAoB,EAAE,GAAG,cAAc,GAAG,QAAQ,CAAC;AAElE,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@symblight/md-colors",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Material Design 3 color token generator — CSS custom property output in oklch format",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": false,
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"./client": {
|
|
13
|
+
"import": "./dist/client.esm.js",
|
|
14
|
+
"default": "./dist/client.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"README.md"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "node build.mjs",
|
|
24
|
+
"generate-theme": "node create-theme-file.mjs",
|
|
25
|
+
"prepublishOnly": "npm run build",
|
|
26
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
|
|
27
|
+
},
|
|
28
|
+
"jest": {
|
|
29
|
+
"testEnvironment": "node",
|
|
30
|
+
"transform": {}
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"material-design",
|
|
34
|
+
"material-design-3",
|
|
35
|
+
"md3",
|
|
36
|
+
"color-tokens",
|
|
37
|
+
"css-variables",
|
|
38
|
+
"oklch",
|
|
39
|
+
"design-system"
|
|
40
|
+
],
|
|
41
|
+
"author": "Aleksei Tkachenko <leshtkachenko@gmail.com>",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@material/material-color-utilities": "^0.3.0",
|
|
45
|
+
"culori": "^4.0.2"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"esbuild": "^0.27.4",
|
|
49
|
+
"jest": "^30.3.0"
|
|
50
|
+
}
|
|
51
|
+
}
|