@malilion/block-ui-tokens 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 +16 -0
- package/dist/breakpoints.d.ts +14 -0
- package/dist/breakpoints.d.ts.map +1 -0
- package/dist/breakpoints.js +12 -0
- package/dist/colors.d.ts +96 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +108 -0
- package/dist/contrast.d.ts +5 -0
- package/dist/contrast.d.ts.map +1 -0
- package/dist/contrast.js +15 -0
- package/dist/css.d.ts +17 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +76 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/motion.d.ts +14 -0
- package/dist/motion.d.ts.map +1 -0
- package/dist/motion.js +12 -0
- package/dist/radius.d.ts +10 -0
- package/dist/radius.d.ts.map +1 -0
- package/dist/radius.js +8 -0
- package/dist/shadow.d.ts +19 -0
- package/dist/shadow.d.ts.map +1 -0
- package/dist/shadow.js +19 -0
- package/dist/sizes.d.ts +14 -0
- package/dist/sizes.d.ts.map +1 -0
- package/dist/sizes.js +13 -0
- package/dist/spacing.d.ts +16 -0
- package/dist/spacing.d.ts.map +1 -0
- package/dist/spacing.js +14 -0
- package/dist/textures.d.ts +12 -0
- package/dist/textures.d.ts.map +1 -0
- package/dist/textures.js +119 -0
- package/dist/typography.d.ts +65 -0
- package/dist/typography.d.ts.map +1 -0
- package/dist/typography.js +38 -0
- package/dist/zIndex.d.ts +11 -0
- package/dist/zIndex.d.ts.map +1 -0
- package/dist/zIndex.js +10 -0
- package/package.json +48 -0
- package/tokens.css +256 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Block UI Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# @malilion/block-ui-tokens
|
|
2
|
+
|
|
3
|
+
Design tokens for [Block UI](https://github.com/malilion/BlockUI): block-material colors (each with an AA-compliant `on*` text color), a 4px spacing grid, typography, radius (max 6px), pixel bevel shadows, snappy motion, sizes, z-index, breakpoints and procedural pixel textures.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pnpm add @malilion/block-ui-tokens
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { colors, spacing, motion, contrastRatio } from "@malilion/block-ui-tokens";
|
|
11
|
+
import "@malilion/block-ui-tokens/tokens.css"; // --block-* CSS variables + [data-material] rules
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`@malilion/block-ui-react` already includes this stylesheet in `@malilion/block-ui-react/styles.css`.
|
|
15
|
+
|
|
16
|
+
MIT License
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const breakpoints: {
|
|
2
|
+
readonly sm: "640px";
|
|
3
|
+
readonly md: "768px";
|
|
4
|
+
readonly lg: "1024px";
|
|
5
|
+
readonly xl: "1280px";
|
|
6
|
+
};
|
|
7
|
+
export type Breakpoint = keyof typeof breakpoints;
|
|
8
|
+
/** Media queries matching PRD §50 (mobile < 768, tablet 768–1023, desktop ≥ 1024). */
|
|
9
|
+
export declare const media: {
|
|
10
|
+
readonly mobile: "(max-width: 767.98px)";
|
|
11
|
+
readonly tablet: "(min-width: 768px) and (max-width: 1023.98px)";
|
|
12
|
+
readonly desktop: "(min-width: 1024px)";
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=breakpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoints.d.ts","sourceRoot":"","sources":["../src/breakpoints.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,WAAW,CAAC;AAElD,sFAAsF;AACtF,eAAO,MAAM,KAAK;;;;CAIR,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const breakpoints = {
|
|
2
|
+
sm: "640px",
|
|
3
|
+
md: "768px",
|
|
4
|
+
lg: "1024px",
|
|
5
|
+
xl: "1280px",
|
|
6
|
+
};
|
|
7
|
+
/** Media queries matching PRD §50 (mobile < 768, tablet 768–1023, desktop ≥ 1024). */
|
|
8
|
+
export const media = {
|
|
9
|
+
mobile: "(max-width: 767.98px)",
|
|
10
|
+
tablet: "(min-width: 768px) and (max-width: 1023.98px)",
|
|
11
|
+
desktop: "(min-width: 1024px)",
|
|
12
|
+
};
|
package/dist/colors.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block UI color tokens.
|
|
3
|
+
*
|
|
4
|
+
* Base values follow the PRD palette. Each "material" also carries a light
|
|
5
|
+
* highlight, a dark shade (used by the pixel bevel) and an `on` color that is
|
|
6
|
+
* guaranteed to reach WCAG AA (4.5:1) against the base.
|
|
7
|
+
*
|
|
8
|
+
* Deviation from PRD: `stone` is #737373 instead of #777777 so that white text
|
|
9
|
+
* on stone reaches 4.5:1 (#777777 only reaches 4.48:1).
|
|
10
|
+
*/
|
|
11
|
+
export declare const colors: {
|
|
12
|
+
readonly grass: "#5D9B3D";
|
|
13
|
+
readonly grassLight: "#7EBE55";
|
|
14
|
+
readonly grassDark: "#356B28";
|
|
15
|
+
readonly onGrass: "#0F230A";
|
|
16
|
+
readonly dirt: "#79553A";
|
|
17
|
+
readonly dirtLight: "#98704F";
|
|
18
|
+
readonly dirtDark: "#553A27";
|
|
19
|
+
readonly onDirt: "#FFFFFF";
|
|
20
|
+
readonly wood: "#8A5A2B";
|
|
21
|
+
readonly woodLight: "#AA7843";
|
|
22
|
+
readonly woodDark: "#5E3C1C";
|
|
23
|
+
readonly onWood: "#FFFFFF";
|
|
24
|
+
readonly stone: "#737373";
|
|
25
|
+
readonly stoneLight: "#959595";
|
|
26
|
+
readonly stoneDark: "#414141";
|
|
27
|
+
readonly onStone: "#FFFFFF";
|
|
28
|
+
readonly deepslate: "#292929";
|
|
29
|
+
readonly deepslateLight: "#3B3B3B";
|
|
30
|
+
readonly deepslateDark: "#1A1A1A";
|
|
31
|
+
readonly onDeepslate: "#FFFFFF";
|
|
32
|
+
readonly sand: "#D8C78E";
|
|
33
|
+
readonly sandLight: "#EDE1B4";
|
|
34
|
+
readonly sandDark: "#A8955C";
|
|
35
|
+
readonly onSand: "#1F1A0B";
|
|
36
|
+
readonly water: "#3B82C4";
|
|
37
|
+
readonly waterLight: "#62A3DE";
|
|
38
|
+
readonly waterDark: "#24568A";
|
|
39
|
+
readonly onWater: "#050E18";
|
|
40
|
+
readonly diamond: "#52D9D0";
|
|
41
|
+
readonly diamondLight: "#A5F3EE";
|
|
42
|
+
readonly diamondDark: "#1E9B93";
|
|
43
|
+
readonly onDiamond: "#0B1F1E";
|
|
44
|
+
readonly emerald: "#35B84B";
|
|
45
|
+
readonly emeraldLight: "#71DD80";
|
|
46
|
+
readonly emeraldDark: "#1E7A2F";
|
|
47
|
+
readonly onEmerald: "#0B1F0E";
|
|
48
|
+
readonly gold: "#F2C94C";
|
|
49
|
+
readonly goldLight: "#FCE48C";
|
|
50
|
+
readonly goldDark: "#B88A1B";
|
|
51
|
+
readonly onGold: "#2A1A05";
|
|
52
|
+
readonly redstone: "#B52A24";
|
|
53
|
+
readonly redstoneLight: "#E0473F";
|
|
54
|
+
readonly redstoneDark: "#7A1814";
|
|
55
|
+
readonly onRedstone: "#FFFFFF";
|
|
56
|
+
readonly obsidian: "#251B31";
|
|
57
|
+
readonly obsidianLight: "#3E2D54";
|
|
58
|
+
readonly obsidianDark: "#140E1C";
|
|
59
|
+
readonly onObsidian: "#FFFFFF";
|
|
60
|
+
readonly nether: "#702929";
|
|
61
|
+
readonly netherLight: "#954040";
|
|
62
|
+
readonly netherDark: "#4A1919";
|
|
63
|
+
readonly onNether: "#FFFFFF";
|
|
64
|
+
readonly amethyst: "#9A6BD6";
|
|
65
|
+
readonly amethystLight: "#BE9BEC";
|
|
66
|
+
readonly amethystDark: "#6A44A0";
|
|
67
|
+
readonly onAmethyst: "#160C24";
|
|
68
|
+
readonly lava: "#E8772E";
|
|
69
|
+
readonly lavaLight: "#FFAE4A";
|
|
70
|
+
readonly lavaDark: "#A8461A";
|
|
71
|
+
readonly onLava: "#200C03";
|
|
72
|
+
readonly iron: "#D8D8D8";
|
|
73
|
+
readonly ironDark: "#9C9C9C";
|
|
74
|
+
readonly coal: "#2E2E2E";
|
|
75
|
+
readonly outline: "#17191C";
|
|
76
|
+
readonly white: "#FFFFFF";
|
|
77
|
+
readonly black: "#000000";
|
|
78
|
+
readonly textPrimary: "#FFFFFF";
|
|
79
|
+
readonly textSecondary: "#C9CDD2";
|
|
80
|
+
readonly textDisabled: "#8A9097";
|
|
81
|
+
readonly background: "#1D2025";
|
|
82
|
+
};
|
|
83
|
+
export type ColorToken = keyof typeof colors;
|
|
84
|
+
/** Materials usable as component variants (buttons, badges, progress, cards). */
|
|
85
|
+
export declare const materials: readonly ["grass", "dirt", "wood", "stone", "deepslate", "sand", "water", "diamond", "emerald", "gold", "redstone", "obsidian", "nether", "amethyst", "lava"];
|
|
86
|
+
export type Material = (typeof materials)[number];
|
|
87
|
+
/** Item rarity → material mapping used by slots and tooltips. */
|
|
88
|
+
export declare const rarityColors: {
|
|
89
|
+
readonly common: "textPrimary";
|
|
90
|
+
readonly uncommon: "gold";
|
|
91
|
+
readonly rare: "diamond";
|
|
92
|
+
readonly epic: "amethyst";
|
|
93
|
+
readonly legendary: "lava";
|
|
94
|
+
};
|
|
95
|
+
export type Rarity = keyof typeof rarityColors;
|
|
96
|
+
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFT,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,SAAS,+JAgBZ,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD,iEAAiE;AACjE,eAAO,MAAM,YAAY;;;;;;CAMsB,CAAC;AAEhD,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,YAAY,CAAC"}
|
package/dist/colors.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block UI color tokens.
|
|
3
|
+
*
|
|
4
|
+
* Base values follow the PRD palette. Each "material" also carries a light
|
|
5
|
+
* highlight, a dark shade (used by the pixel bevel) and an `on` color that is
|
|
6
|
+
* guaranteed to reach WCAG AA (4.5:1) against the base.
|
|
7
|
+
*
|
|
8
|
+
* Deviation from PRD: `stone` is #737373 instead of #777777 so that white text
|
|
9
|
+
* on stone reaches 4.5:1 (#777777 only reaches 4.48:1).
|
|
10
|
+
*/
|
|
11
|
+
export const colors = {
|
|
12
|
+
grass: "#5D9B3D",
|
|
13
|
+
grassLight: "#7EBE55",
|
|
14
|
+
grassDark: "#356B28",
|
|
15
|
+
onGrass: "#0F230A",
|
|
16
|
+
dirt: "#79553A",
|
|
17
|
+
dirtLight: "#98704F",
|
|
18
|
+
dirtDark: "#553A27",
|
|
19
|
+
onDirt: "#FFFFFF",
|
|
20
|
+
wood: "#8A5A2B",
|
|
21
|
+
woodLight: "#AA7843",
|
|
22
|
+
woodDark: "#5E3C1C",
|
|
23
|
+
onWood: "#FFFFFF",
|
|
24
|
+
stone: "#737373",
|
|
25
|
+
stoneLight: "#959595",
|
|
26
|
+
stoneDark: "#414141",
|
|
27
|
+
onStone: "#FFFFFF",
|
|
28
|
+
deepslate: "#292929",
|
|
29
|
+
deepslateLight: "#3B3B3B",
|
|
30
|
+
deepslateDark: "#1A1A1A",
|
|
31
|
+
onDeepslate: "#FFFFFF",
|
|
32
|
+
sand: "#D8C78E",
|
|
33
|
+
sandLight: "#EDE1B4",
|
|
34
|
+
sandDark: "#A8955C",
|
|
35
|
+
onSand: "#1F1A0B",
|
|
36
|
+
water: "#3B82C4",
|
|
37
|
+
waterLight: "#62A3DE",
|
|
38
|
+
waterDark: "#24568A",
|
|
39
|
+
onWater: "#050E18",
|
|
40
|
+
diamond: "#52D9D0",
|
|
41
|
+
diamondLight: "#A5F3EE",
|
|
42
|
+
diamondDark: "#1E9B93",
|
|
43
|
+
onDiamond: "#0B1F1E",
|
|
44
|
+
emerald: "#35B84B",
|
|
45
|
+
emeraldLight: "#71DD80",
|
|
46
|
+
emeraldDark: "#1E7A2F",
|
|
47
|
+
onEmerald: "#0B1F0E",
|
|
48
|
+
gold: "#F2C94C",
|
|
49
|
+
goldLight: "#FCE48C",
|
|
50
|
+
goldDark: "#B88A1B",
|
|
51
|
+
onGold: "#2A1A05",
|
|
52
|
+
redstone: "#B52A24",
|
|
53
|
+
redstoneLight: "#E0473F",
|
|
54
|
+
redstoneDark: "#7A1814",
|
|
55
|
+
onRedstone: "#FFFFFF",
|
|
56
|
+
obsidian: "#251B31",
|
|
57
|
+
obsidianLight: "#3E2D54",
|
|
58
|
+
obsidianDark: "#140E1C",
|
|
59
|
+
onObsidian: "#FFFFFF",
|
|
60
|
+
nether: "#702929",
|
|
61
|
+
netherLight: "#954040",
|
|
62
|
+
netherDark: "#4A1919",
|
|
63
|
+
onNether: "#FFFFFF",
|
|
64
|
+
amethyst: "#9A6BD6",
|
|
65
|
+
amethystLight: "#BE9BEC",
|
|
66
|
+
amethystDark: "#6A44A0",
|
|
67
|
+
onAmethyst: "#160C24",
|
|
68
|
+
lava: "#E8772E",
|
|
69
|
+
lavaLight: "#FFAE4A",
|
|
70
|
+
lavaDark: "#A8461A",
|
|
71
|
+
onLava: "#200C03",
|
|
72
|
+
iron: "#D8D8D8",
|
|
73
|
+
ironDark: "#9C9C9C",
|
|
74
|
+
coal: "#2E2E2E",
|
|
75
|
+
outline: "#17191C",
|
|
76
|
+
white: "#FFFFFF",
|
|
77
|
+
black: "#000000",
|
|
78
|
+
textPrimary: "#FFFFFF",
|
|
79
|
+
textSecondary: "#C9CDD2",
|
|
80
|
+
textDisabled: "#8A9097",
|
|
81
|
+
background: "#1D2025",
|
|
82
|
+
};
|
|
83
|
+
/** Materials usable as component variants (buttons, badges, progress, cards). */
|
|
84
|
+
export const materials = [
|
|
85
|
+
"grass",
|
|
86
|
+
"dirt",
|
|
87
|
+
"wood",
|
|
88
|
+
"stone",
|
|
89
|
+
"deepslate",
|
|
90
|
+
"sand",
|
|
91
|
+
"water",
|
|
92
|
+
"diamond",
|
|
93
|
+
"emerald",
|
|
94
|
+
"gold",
|
|
95
|
+
"redstone",
|
|
96
|
+
"obsidian",
|
|
97
|
+
"nether",
|
|
98
|
+
"amethyst",
|
|
99
|
+
"lava",
|
|
100
|
+
];
|
|
101
|
+
/** Item rarity → material mapping used by slots and tooltips. */
|
|
102
|
+
export const rarityColors = {
|
|
103
|
+
common: "textPrimary",
|
|
104
|
+
uncommon: "gold",
|
|
105
|
+
rare: "diamond",
|
|
106
|
+
epic: "amethyst",
|
|
107
|
+
legendary: "lava",
|
|
108
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** WCAG 2.x relative luminance of a `#rrggbb` color. */
|
|
2
|
+
export declare function relativeLuminance(hex: string): number;
|
|
3
|
+
/** WCAG contrast ratio between two `#rrggbb` colors (1 – 21). */
|
|
4
|
+
export declare function contrastRatio(foreground: string, background: string): number;
|
|
5
|
+
//# sourceMappingURL=contrast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contrast.d.ts","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK5E"}
|
package/dist/contrast.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** WCAG 2.x relative luminance of a `#rrggbb` color. */
|
|
2
|
+
export function relativeLuminance(hex) {
|
|
3
|
+
const value = Number.parseInt(hex.replace("#", ""), 16);
|
|
4
|
+
const channels = [(value >> 16) & 255, (value >> 8) & 255, value & 255].map((channel) => {
|
|
5
|
+
const c = channel / 255;
|
|
6
|
+
return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
7
|
+
});
|
|
8
|
+
const [r = 0, g = 0, b = 0] = channels;
|
|
9
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
10
|
+
}
|
|
11
|
+
/** WCAG contrast ratio between two `#rrggbb` colors (1 – 21). */
|
|
12
|
+
export function contrastRatio(foreground, background) {
|
|
13
|
+
const [light, dark] = [relativeLuminance(foreground), relativeLuminance(background)].sort((a, b) => b - a);
|
|
14
|
+
return (light + 0.05) / (dark + 0.05);
|
|
15
|
+
}
|
package/dist/css.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { colors } from "./colors.js";
|
|
2
|
+
/** camelCase / PascalCase → kebab-case (`grassDark` → `grass-dark`, `2xl` → `2xl`). */
|
|
3
|
+
export declare function toKebab(value: string): string;
|
|
4
|
+
/** CSS variable name for a color token. `background` maps to the PRD's `--block-bg`. */
|
|
5
|
+
export declare function colorVar(token: keyof typeof colors): string;
|
|
6
|
+
type Entries = Array<[string, string]>;
|
|
7
|
+
/** Every token as `[cssVariableName, value]`, in output order. */
|
|
8
|
+
export declare function tokenEntries(): Entries;
|
|
9
|
+
/**
|
|
10
|
+
* `[data-material="…"]` rules. Components set `data-material` and read the
|
|
11
|
+
* generic `--block-mat*` variables, so every material variant stays token-driven.
|
|
12
|
+
*/
|
|
13
|
+
export declare function materialCss(): string;
|
|
14
|
+
/** Generates `tokens.css` — the CSS custom properties for every design token. */
|
|
15
|
+
export declare function generateTokensCss(): string;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=css.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../src/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,aAAa,CAAC;AAWhD,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,MAAM,GAAG,MAAM,CAE3D;AAED,KAAK,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAMvC,kEAAkE;AAClE,wBAAgB,YAAY,IAAI,OAAO,CAyBtC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAkBpC;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
|
package/dist/css.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { colors, materials } from "./colors.js";
|
|
2
|
+
import { spacing } from "./spacing.js";
|
|
3
|
+
import { fontFamily, fontSize, fontWeight, letterSpacing, lineHeight } from "./typography.js";
|
|
4
|
+
import { radius } from "./radius.js";
|
|
5
|
+
import { border, shadow } from "./shadow.js";
|
|
6
|
+
import { easing, motion } from "./motion.js";
|
|
7
|
+
import { sizes } from "./sizes.js";
|
|
8
|
+
import { zIndex } from "./zIndex.js";
|
|
9
|
+
import { textures } from "./textures.js";
|
|
10
|
+
import { relativeLuminance } from "./contrast.js";
|
|
11
|
+
/** camelCase / PascalCase → kebab-case (`grassDark` → `grass-dark`, `2xl` → `2xl`). */
|
|
12
|
+
export function toKebab(value) {
|
|
13
|
+
return value.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
/** CSS variable name for a color token. `background` maps to the PRD's `--block-bg`. */
|
|
16
|
+
export function colorVar(token) {
|
|
17
|
+
return token === "background" ? "--block-bg" : `--block-${toKebab(token)}`;
|
|
18
|
+
}
|
|
19
|
+
function group(prefix, record) {
|
|
20
|
+
return Object.entries(record).map(([key, value]) => [`--block-${prefix}${toKebab(key)}`, value]);
|
|
21
|
+
}
|
|
22
|
+
/** Every token as `[cssVariableName, value]`, in output order. */
|
|
23
|
+
export function tokenEntries() {
|
|
24
|
+
const colorEntries = Object.entries(colors).map(([key, value]) => [
|
|
25
|
+
colorVar(key),
|
|
26
|
+
value.toLowerCase(),
|
|
27
|
+
]);
|
|
28
|
+
return [
|
|
29
|
+
...colorEntries,
|
|
30
|
+
...group("space-", spacing),
|
|
31
|
+
...group("font-", fontFamily),
|
|
32
|
+
...group("font-size-", fontSize),
|
|
33
|
+
...group("font-weight-", fontWeight),
|
|
34
|
+
...group("line-height-", lineHeight),
|
|
35
|
+
...group("letter-spacing-", letterSpacing),
|
|
36
|
+
...group("radius-", radius),
|
|
37
|
+
["--block-border-width", border.width],
|
|
38
|
+
["--block-border-width-thin", border.widthThin],
|
|
39
|
+
["--block-border-color", border.color.toLowerCase()],
|
|
40
|
+
...group("shadow-", shadow),
|
|
41
|
+
...group("duration-", motion),
|
|
42
|
+
...group("ease-", easing),
|
|
43
|
+
...group("size-", sizes),
|
|
44
|
+
...group("z-", zIndex),
|
|
45
|
+
...group("texture-", textures),
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* `[data-material="…"]` rules. Components set `data-material` and read the
|
|
50
|
+
* generic `--block-mat*` variables, so every material variant stays token-driven.
|
|
51
|
+
*/
|
|
52
|
+
export function materialCss() {
|
|
53
|
+
return materials
|
|
54
|
+
.map((material) => {
|
|
55
|
+
const name = toKebab(material);
|
|
56
|
+
const onKey = `on${material.charAt(0).toUpperCase()}${material.slice(1)}`;
|
|
57
|
+
const lightText = relativeLuminance(colors[onKey]) > 0.5;
|
|
58
|
+
return [
|
|
59
|
+
`[data-material="${name}"] {`,
|
|
60
|
+
` --block-mat: var(--block-${name});`,
|
|
61
|
+
` --block-mat-light: var(--block-${name}-light);`,
|
|
62
|
+
` --block-mat-dark: var(--block-${name}-dark);`,
|
|
63
|
+
` --block-mat-on: var(--block-on-${name});`,
|
|
64
|
+
` --block-mat-text-shadow: ${lightText ? "var(--block-shadow-text)" : "var(--block-shadow-text-light)"};`,
|
|
65
|
+
`}`,
|
|
66
|
+
].join("\n");
|
|
67
|
+
})
|
|
68
|
+
.join("\n");
|
|
69
|
+
}
|
|
70
|
+
/** Generates `tokens.css` — the CSS custom properties for every design token. */
|
|
71
|
+
export function generateTokensCss() {
|
|
72
|
+
const body = tokenEntries()
|
|
73
|
+
.map(([name, value]) => ` ${name}: ${value};`)
|
|
74
|
+
.join("\n");
|
|
75
|
+
return `/* Generated by @malilion/block-ui-tokens — do not edit by hand. Run \`pnpm generate\`. */\n:root {\n${body}\n}\n\n${materialCss()}\n`;
|
|
76
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./colors.js";
|
|
2
|
+
export * from "./spacing.js";
|
|
3
|
+
export * from "./typography.js";
|
|
4
|
+
export * from "./radius.js";
|
|
5
|
+
export * from "./shadow.js";
|
|
6
|
+
export * from "./motion.js";
|
|
7
|
+
export * from "./sizes.js";
|
|
8
|
+
export * from "./zIndex.js";
|
|
9
|
+
export * from "./breakpoints.js";
|
|
10
|
+
export * from "./textures.js";
|
|
11
|
+
export { colorVar, generateTokensCss, materialCss, toKebab, tokenEntries } from "./css.js";
|
|
12
|
+
export { contrastRatio, relativeLuminance } from "./contrast.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./colors.js";
|
|
2
|
+
export * from "./spacing.js";
|
|
3
|
+
export * from "./typography.js";
|
|
4
|
+
export * from "./radius.js";
|
|
5
|
+
export * from "./shadow.js";
|
|
6
|
+
export * from "./motion.js";
|
|
7
|
+
export * from "./sizes.js";
|
|
8
|
+
export * from "./zIndex.js";
|
|
9
|
+
export * from "./breakpoints.js";
|
|
10
|
+
export * from "./textures.js";
|
|
11
|
+
export { colorVar, generateTokensCss, materialCss, toKebab, tokenEntries } from "./css.js";
|
|
12
|
+
export { contrastRatio, relativeLuminance } from "./contrast.js";
|
package/dist/motion.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Snappy, mechanical motion. Nothing above 160ms by default (PRD §17). */
|
|
2
|
+
export declare const motion: {
|
|
3
|
+
readonly instant: "80ms";
|
|
4
|
+
readonly fast: "120ms";
|
|
5
|
+
readonly normal: "160ms";
|
|
6
|
+
};
|
|
7
|
+
export declare const easing: {
|
|
8
|
+
/** Pixel-step easing for mechanical feedback. */
|
|
9
|
+
readonly step: "steps(2, end)";
|
|
10
|
+
readonly snap: "cubic-bezier(0.2, 0, 0, 1)";
|
|
11
|
+
readonly linear: "linear";
|
|
12
|
+
};
|
|
13
|
+
export type MotionToken = keyof typeof motion;
|
|
14
|
+
//# sourceMappingURL=motion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,eAAO,MAAM,MAAM;IACjB,iDAAiD;;;;CAIzC,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,MAAM,CAAC"}
|
package/dist/motion.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Snappy, mechanical motion. Nothing above 160ms by default (PRD §17). */
|
|
2
|
+
export const motion = {
|
|
3
|
+
instant: "80ms",
|
|
4
|
+
fast: "120ms",
|
|
5
|
+
normal: "160ms",
|
|
6
|
+
};
|
|
7
|
+
export const easing = {
|
|
8
|
+
/** Pixel-step easing for mechanical feedback. */
|
|
9
|
+
step: "steps(2, end)",
|
|
10
|
+
snap: "cubic-bezier(0.2, 0, 0, 1)",
|
|
11
|
+
linear: "linear",
|
|
12
|
+
};
|
package/dist/radius.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Block UI never rounds more than 6px (PRD §15). */
|
|
2
|
+
export declare const radius: {
|
|
3
|
+
readonly none: "0px";
|
|
4
|
+
readonly xs: "2px";
|
|
5
|
+
readonly sm: "4px";
|
|
6
|
+
readonly md: "6px";
|
|
7
|
+
};
|
|
8
|
+
export declare const MAX_RADIUS_PX = 6;
|
|
9
|
+
export type RadiusToken = keyof typeof radius;
|
|
10
|
+
//# sourceMappingURL=radius.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radius.d.ts","sourceRoot":"","sources":["../src/radius.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,eAAO,MAAM,MAAM;;;;;CAKT,CAAC;AAEX,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,MAAM,CAAC"}
|
package/dist/radius.js
ADDED
package/dist/shadow.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Pixel border + bevel used by every block surface (PRD §16). */
|
|
2
|
+
export declare const border: {
|
|
3
|
+
readonly width: "3px";
|
|
4
|
+
readonly widthThin: "2px";
|
|
5
|
+
readonly color: "#17191C";
|
|
6
|
+
};
|
|
7
|
+
export declare const shadow: {
|
|
8
|
+
readonly bevelLight: "rgba(255, 255, 255, 0.14)";
|
|
9
|
+
readonly bevelDark: "rgba(0, 0, 0, 0.38)";
|
|
10
|
+
/** Raised block: light top-left, dark bottom-right. */
|
|
11
|
+
readonly bevel: "inset 3px 3px 0 rgba(255, 255, 255, 0.14), inset -3px -3px 0 rgba(0, 0, 0, 0.38)";
|
|
12
|
+
/** Sunken block (slots, inputs): dark top-left, light bottom-right. */
|
|
13
|
+
readonly inset: "inset 3px 3px 0 rgba(0, 0, 0, 0.38), inset -3px -3px 0 rgba(255, 255, 255, 0.1)";
|
|
14
|
+
/** Hard pixel drop shadow — never blurred. */
|
|
15
|
+
readonly drop: "4px 4px 0 rgba(0, 0, 0, 0.45)";
|
|
16
|
+
readonly text: "2px 2px 0 rgba(0, 0, 0, 0.55)";
|
|
17
|
+
readonly textLight: "1px 1px 0 rgba(255, 255, 255, 0.35)";
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=shadow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadow.d.ts","sourceRoot":"","sources":["../src/shadow.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,eAAO,MAAM,MAAM;;;IAGjB,uDAAuD;;IAEvD,uEAAuE;;IAEvE,8CAA8C;;;;CAItC,CAAC"}
|
package/dist/shadow.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { colors } from "./colors.js";
|
|
2
|
+
/** Pixel border + bevel used by every block surface (PRD §16). */
|
|
3
|
+
export const border = {
|
|
4
|
+
width: "3px",
|
|
5
|
+
widthThin: "2px",
|
|
6
|
+
color: colors.outline,
|
|
7
|
+
};
|
|
8
|
+
export const shadow = {
|
|
9
|
+
bevelLight: "rgba(255, 255, 255, 0.14)",
|
|
10
|
+
bevelDark: "rgba(0, 0, 0, 0.38)",
|
|
11
|
+
/** Raised block: light top-left, dark bottom-right. */
|
|
12
|
+
bevel: "inset 3px 3px 0 rgba(255, 255, 255, 0.14), inset -3px -3px 0 rgba(0, 0, 0, 0.38)",
|
|
13
|
+
/** Sunken block (slots, inputs): dark top-left, light bottom-right. */
|
|
14
|
+
inset: "inset 3px 3px 0 rgba(0, 0, 0, 0.38), inset -3px -3px 0 rgba(255, 255, 255, 0.1)",
|
|
15
|
+
/** Hard pixel drop shadow — never blurred. */
|
|
16
|
+
drop: "4px 4px 0 rgba(0, 0, 0, 0.45)",
|
|
17
|
+
text: "2px 2px 0 rgba(0, 0, 0, 0.55)",
|
|
18
|
+
textLight: "1px 1px 0 rgba(255, 255, 255, 0.35)",
|
|
19
|
+
};
|
package/dist/sizes.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const sizes: {
|
|
2
|
+
readonly slotSm: "40px";
|
|
3
|
+
readonly slotMd: "52px";
|
|
4
|
+
readonly slotLg: "64px";
|
|
5
|
+
readonly iconSm: "16px";
|
|
6
|
+
readonly iconMd: "24px";
|
|
7
|
+
readonly iconLg: "32px";
|
|
8
|
+
readonly controlSm: "32px";
|
|
9
|
+
readonly controlMd: "40px";
|
|
10
|
+
readonly controlLg: "48px";
|
|
11
|
+
readonly sidebar: "248px";
|
|
12
|
+
readonly sidebarCollapsed: "72px";
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=sizes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sizes.d.ts","sourceRoot":"","sources":["../src/sizes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK;;;;;;;;;;;;CAYR,CAAC"}
|
package/dist/sizes.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** 4px grid. Keys are multiples of 4px. */
|
|
2
|
+
export declare const spacing: {
|
|
3
|
+
readonly 0: "0px";
|
|
4
|
+
readonly 1: "4px";
|
|
5
|
+
readonly 2: "8px";
|
|
6
|
+
readonly 3: "12px";
|
|
7
|
+
readonly 4: "16px";
|
|
8
|
+
readonly 5: "20px";
|
|
9
|
+
readonly 6: "24px";
|
|
10
|
+
readonly 8: "32px";
|
|
11
|
+
readonly 10: "40px";
|
|
12
|
+
readonly 12: "48px";
|
|
13
|
+
readonly 16: "64px";
|
|
14
|
+
};
|
|
15
|
+
export type SpacingToken = keyof typeof spacing;
|
|
16
|
+
//# sourceMappingURL=spacing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacing.d.ts","sourceRoot":"","sources":["../src/spacing.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,eAAO,MAAM,OAAO;;;;;;;;;;;;CAYV,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,OAAO,CAAC"}
|
package/dist/spacing.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const textures: {
|
|
2
|
+
readonly stone: string;
|
|
3
|
+
readonly deepslate: string;
|
|
4
|
+
readonly dirt: string;
|
|
5
|
+
readonly grass: string;
|
|
6
|
+
readonly planks: string;
|
|
7
|
+
readonly netherrack: string;
|
|
8
|
+
readonly endStone: string;
|
|
9
|
+
readonly obsidian: string;
|
|
10
|
+
};
|
|
11
|
+
export type TextureToken = keyof typeof textures;
|
|
12
|
+
//# sourceMappingURL=textures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textures.d.ts","sourceRoot":"","sources":["../src/textures.ts"],"names":[],"mappings":"AAoIA,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,QAAQ,CAAC"}
|
package/dist/textures.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { colors } from "./colors.js";
|
|
2
|
+
function mulberry32(seed) {
|
|
3
|
+
let a = seed;
|
|
4
|
+
return () => {
|
|
5
|
+
a |= 0;
|
|
6
|
+
a = (a + 0x6d2b79f5) | 0;
|
|
7
|
+
let t = Math.imul(a ^ (a >>> 15), 1 | a);
|
|
8
|
+
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
|
|
9
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function noiseGrid(size, palette, weights, seed) {
|
|
13
|
+
const rand = mulberry32(seed);
|
|
14
|
+
const total = weights.reduce((sum, w) => sum + w, 0);
|
|
15
|
+
const grid = [];
|
|
16
|
+
for (let y = 0; y < size; y += 1) {
|
|
17
|
+
const row = [];
|
|
18
|
+
for (let x = 0; x < size; x += 1) {
|
|
19
|
+
let pick = rand() * total;
|
|
20
|
+
let index = 0;
|
|
21
|
+
for (; index < weights.length - 1; index += 1) {
|
|
22
|
+
pick -= weights[index] ?? 0;
|
|
23
|
+
if (pick < 0)
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
row.push(palette[index] ?? palette[0] ?? "#000");
|
|
27
|
+
}
|
|
28
|
+
grid.push(row);
|
|
29
|
+
}
|
|
30
|
+
return grid;
|
|
31
|
+
}
|
|
32
|
+
function gridToSvg(grid) {
|
|
33
|
+
const height = grid.length;
|
|
34
|
+
const width = grid[0]?.length ?? 0;
|
|
35
|
+
const paths = new Map();
|
|
36
|
+
grid.forEach((row, y) => {
|
|
37
|
+
let x = 0;
|
|
38
|
+
while (x < row.length) {
|
|
39
|
+
const color = row[x] ?? "";
|
|
40
|
+
let run = 1;
|
|
41
|
+
while (row[x + run] === color)
|
|
42
|
+
run += 1;
|
|
43
|
+
paths.set(color, `${paths.get(color) ?? ""}M${x} ${y}h${run}v1h-${run}z`);
|
|
44
|
+
x += run;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
const body = [...paths.entries()].map(([fill, d]) => `<path fill='${fill}' d='${d}'/>`).join("");
|
|
48
|
+
return `<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${width} ${height}' shape-rendering='crispEdges'>${body}</svg>`;
|
|
49
|
+
}
|
|
50
|
+
function toDataUri(svg) {
|
|
51
|
+
const encoded = svg.replace(/#/g, "%23").replace(/</g, "%3C").replace(/>/g, "%3E");
|
|
52
|
+
return `url("data:image/svg+xml,${encoded}")`;
|
|
53
|
+
}
|
|
54
|
+
function stone() {
|
|
55
|
+
return noiseGrid(16, ["#6E6E6E", "#7A7A7A", "#626262", "#858585"], [5, 4, 2, 1], 7);
|
|
56
|
+
}
|
|
57
|
+
function deepslate() {
|
|
58
|
+
const grid = noiseGrid(16, ["#2C2C2E", "#333336", "#252527", "#3A3A3D"], [5, 3, 3, 1], 11);
|
|
59
|
+
// Horizontal strata — deepslate's layered look.
|
|
60
|
+
[3, 8, 13].forEach((y) => {
|
|
61
|
+
grid[y] = grid[y]?.map((c, x) => ((x + y) % 5 === 0 ? c : "#212123")) ?? [];
|
|
62
|
+
});
|
|
63
|
+
return grid;
|
|
64
|
+
}
|
|
65
|
+
function dirt() {
|
|
66
|
+
return noiseGrid(16, [colors.dirt, "#6B4A32", "#8A6343", "#5A3E2A"], [5, 3, 2, 1], 23);
|
|
67
|
+
}
|
|
68
|
+
function grassTop() {
|
|
69
|
+
const grid = dirt();
|
|
70
|
+
const rand = mulberry32(42);
|
|
71
|
+
for (let x = 0; x < 16; x += 1) {
|
|
72
|
+
const depth = 3 + Math.floor(rand() * 3);
|
|
73
|
+
for (let y = 0; y < depth; y += 1) {
|
|
74
|
+
const row = grid[y];
|
|
75
|
+
if (row)
|
|
76
|
+
row[x] = rand() > 0.7 ? colors.grassDark : rand() > 0.5 ? colors.grassLight : colors.grass;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return grid;
|
|
80
|
+
}
|
|
81
|
+
function planks() {
|
|
82
|
+
const grid = noiseGrid(16, [colors.wood, "#7D5126", "#966532"], [6, 3, 2], 5);
|
|
83
|
+
[3, 7, 11, 15].forEach((y) => {
|
|
84
|
+
grid[y] = new Array(16).fill(colors.woodDark);
|
|
85
|
+
});
|
|
86
|
+
// Staggered plank seams.
|
|
87
|
+
[
|
|
88
|
+
[1, 5],
|
|
89
|
+
[5, 12],
|
|
90
|
+
[9, 2],
|
|
91
|
+
[13, 9],
|
|
92
|
+
].forEach(([y, x]) => {
|
|
93
|
+
for (let dy = 0; dy < 3; dy += 1) {
|
|
94
|
+
const row = grid[(y ?? 0) + dy];
|
|
95
|
+
if (row)
|
|
96
|
+
row[x ?? 0] = colors.woodDark;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return grid;
|
|
100
|
+
}
|
|
101
|
+
function netherrack() {
|
|
102
|
+
return noiseGrid(16, ["#6A2626", "#7E2F2F", "#582020", "#8F3A35"], [5, 3, 2, 1], 66);
|
|
103
|
+
}
|
|
104
|
+
function endStone() {
|
|
105
|
+
return noiseGrid(16, ["#2A2036", "#30253E", "#241B2F", "#3A2D4B"], [5, 3, 3, 1], 99);
|
|
106
|
+
}
|
|
107
|
+
function obsidian() {
|
|
108
|
+
return noiseGrid(16, [colors.obsidian, "#1C1426", "#2F2240", "#3E2D54"], [6, 3, 2, 1], 13);
|
|
109
|
+
}
|
|
110
|
+
export const textures = {
|
|
111
|
+
stone: toDataUri(gridToSvg(stone())),
|
|
112
|
+
deepslate: toDataUri(gridToSvg(deepslate())),
|
|
113
|
+
dirt: toDataUri(gridToSvg(dirt())),
|
|
114
|
+
grass: toDataUri(gridToSvg(grassTop())),
|
|
115
|
+
planks: toDataUri(gridToSvg(planks())),
|
|
116
|
+
netherrack: toDataUri(gridToSvg(netherrack())),
|
|
117
|
+
endStone: toDataUri(gridToSvg(endStone())),
|
|
118
|
+
obsidian: toDataUri(gridToSvg(obsidian())),
|
|
119
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export declare const fontFamily: {
|
|
2
|
+
/** Pixel display font for headings, buttons, labels and counters. */
|
|
3
|
+
readonly display: "\"Silkscreen\", \"Press Start 2P\", \"Courier New\", ui-monospace, monospace";
|
|
4
|
+
/** Readable body font. Pixel fonts are reserved for short labels (PRD §5.3). */
|
|
5
|
+
readonly body: "ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Noto Sans TC\", \"Helvetica Neue\", Arial, sans-serif";
|
|
6
|
+
readonly mono: "ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace";
|
|
7
|
+
};
|
|
8
|
+
export declare const fontSize: {
|
|
9
|
+
readonly xs: "11px";
|
|
10
|
+
readonly sm: "12px";
|
|
11
|
+
readonly md: "14px";
|
|
12
|
+
readonly lg: "16px";
|
|
13
|
+
readonly xl: "20px";
|
|
14
|
+
readonly "2xl": "24px";
|
|
15
|
+
readonly "3xl": "32px";
|
|
16
|
+
};
|
|
17
|
+
export declare const fontWeight: {
|
|
18
|
+
readonly regular: "400";
|
|
19
|
+
readonly medium: "500";
|
|
20
|
+
readonly bold: "700";
|
|
21
|
+
};
|
|
22
|
+
export declare const lineHeight: {
|
|
23
|
+
readonly tight: "1.15";
|
|
24
|
+
readonly normal: "1.45";
|
|
25
|
+
readonly relaxed: "1.6";
|
|
26
|
+
};
|
|
27
|
+
export declare const letterSpacing: {
|
|
28
|
+
readonly normal: "0";
|
|
29
|
+
readonly wide: "0.04em";
|
|
30
|
+
readonly wider: "0.08em";
|
|
31
|
+
};
|
|
32
|
+
export declare const typography: {
|
|
33
|
+
readonly fontFamily: {
|
|
34
|
+
/** Pixel display font for headings, buttons, labels and counters. */
|
|
35
|
+
readonly display: "\"Silkscreen\", \"Press Start 2P\", \"Courier New\", ui-monospace, monospace";
|
|
36
|
+
/** Readable body font. Pixel fonts are reserved for short labels (PRD §5.3). */
|
|
37
|
+
readonly body: "ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Noto Sans TC\", \"Helvetica Neue\", Arial, sans-serif";
|
|
38
|
+
readonly mono: "ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace";
|
|
39
|
+
};
|
|
40
|
+
readonly fontSize: {
|
|
41
|
+
readonly xs: "11px";
|
|
42
|
+
readonly sm: "12px";
|
|
43
|
+
readonly md: "14px";
|
|
44
|
+
readonly lg: "16px";
|
|
45
|
+
readonly xl: "20px";
|
|
46
|
+
readonly "2xl": "24px";
|
|
47
|
+
readonly "3xl": "32px";
|
|
48
|
+
};
|
|
49
|
+
readonly fontWeight: {
|
|
50
|
+
readonly regular: "400";
|
|
51
|
+
readonly medium: "500";
|
|
52
|
+
readonly bold: "700";
|
|
53
|
+
};
|
|
54
|
+
readonly lineHeight: {
|
|
55
|
+
readonly tight: "1.15";
|
|
56
|
+
readonly normal: "1.45";
|
|
57
|
+
readonly relaxed: "1.6";
|
|
58
|
+
};
|
|
59
|
+
readonly letterSpacing: {
|
|
60
|
+
readonly normal: "0";
|
|
61
|
+
readonly wide: "0.04em";
|
|
62
|
+
readonly wider: "0.08em";
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=typography.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typography.d.ts","sourceRoot":"","sources":["../src/typography.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;IACrB,qEAAqE;;IAErE,gFAAgF;;;CAGxE,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;;CAQX,CAAC;AAEX,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX,eAAO,MAAM,UAAU;;QAnCrB,qEAAqE;;QAErE,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCxE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const fontFamily = {
|
|
2
|
+
/** Pixel display font for headings, buttons, labels and counters. */
|
|
3
|
+
display: '"Silkscreen", "Press Start 2P", "Courier New", ui-monospace, monospace',
|
|
4
|
+
/** Readable body font. Pixel fonts are reserved for short labels (PRD §5.3). */
|
|
5
|
+
body: 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans TC", "Helvetica Neue", Arial, sans-serif',
|
|
6
|
+
mono: 'ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace',
|
|
7
|
+
};
|
|
8
|
+
export const fontSize = {
|
|
9
|
+
xs: "11px",
|
|
10
|
+
sm: "12px",
|
|
11
|
+
md: "14px",
|
|
12
|
+
lg: "16px",
|
|
13
|
+
xl: "20px",
|
|
14
|
+
"2xl": "24px",
|
|
15
|
+
"3xl": "32px",
|
|
16
|
+
};
|
|
17
|
+
export const fontWeight = {
|
|
18
|
+
regular: "400",
|
|
19
|
+
medium: "500",
|
|
20
|
+
bold: "700",
|
|
21
|
+
};
|
|
22
|
+
export const lineHeight = {
|
|
23
|
+
tight: "1.15",
|
|
24
|
+
normal: "1.45",
|
|
25
|
+
relaxed: "1.6",
|
|
26
|
+
};
|
|
27
|
+
export const letterSpacing = {
|
|
28
|
+
normal: "0",
|
|
29
|
+
wide: "0.04em",
|
|
30
|
+
wider: "0.08em",
|
|
31
|
+
};
|
|
32
|
+
export const typography = {
|
|
33
|
+
fontFamily,
|
|
34
|
+
fontSize,
|
|
35
|
+
fontWeight,
|
|
36
|
+
lineHeight,
|
|
37
|
+
letterSpacing,
|
|
38
|
+
};
|
package/dist/zIndex.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const zIndex: {
|
|
2
|
+
readonly base: "0";
|
|
3
|
+
readonly raised: "1";
|
|
4
|
+
readonly dropdown: "100";
|
|
5
|
+
readonly sticky: "200";
|
|
6
|
+
readonly tooltip: "300";
|
|
7
|
+
readonly overlay: "400";
|
|
8
|
+
readonly modal: "500";
|
|
9
|
+
readonly toast: "600";
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=zIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zIndex.d.ts","sourceRoot":"","sources":["../src/zIndex.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC"}
|
package/dist/zIndex.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@malilion/block-ui-tokens",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Design tokens (colors, spacing, typography, motion…) for Block UI.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Block UI Contributors",
|
|
7
|
+
"homepage": "https://malilion.github.io/BlockUI/",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/malilion/BlockUI.git",
|
|
11
|
+
"directory": "packages/tokens"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/malilion/BlockUI/issues"
|
|
15
|
+
},
|
|
16
|
+
"type": "module",
|
|
17
|
+
"sideEffects": [
|
|
18
|
+
"*.css"
|
|
19
|
+
],
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"@block-ui/source": "./src/index.ts",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./tokens.css": "./tokens.css",
|
|
27
|
+
"./package.json": "./package.json"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"tokens.css",
|
|
32
|
+
"README.md",
|
|
33
|
+
"LICENSE"
|
|
34
|
+
],
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"block-ui",
|
|
40
|
+
"design-tokens",
|
|
41
|
+
"pixel"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc -p tsconfig.build.json && node scripts/generate-css.mjs",
|
|
45
|
+
"generate": "tsc -p tsconfig.build.json && node scripts/generate-css.mjs",
|
|
46
|
+
"typecheck": "tsc -p tsconfig.json"
|
|
47
|
+
}
|
|
48
|
+
}
|
package/tokens.css
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/* Generated by @malilion/block-ui-tokens — do not edit by hand. Run `pnpm generate`. */
|
|
2
|
+
:root {
|
|
3
|
+
--block-grass: #5d9b3d;
|
|
4
|
+
--block-grass-light: #7ebe55;
|
|
5
|
+
--block-grass-dark: #356b28;
|
|
6
|
+
--block-on-grass: #0f230a;
|
|
7
|
+
--block-dirt: #79553a;
|
|
8
|
+
--block-dirt-light: #98704f;
|
|
9
|
+
--block-dirt-dark: #553a27;
|
|
10
|
+
--block-on-dirt: #ffffff;
|
|
11
|
+
--block-wood: #8a5a2b;
|
|
12
|
+
--block-wood-light: #aa7843;
|
|
13
|
+
--block-wood-dark: #5e3c1c;
|
|
14
|
+
--block-on-wood: #ffffff;
|
|
15
|
+
--block-stone: #737373;
|
|
16
|
+
--block-stone-light: #959595;
|
|
17
|
+
--block-stone-dark: #414141;
|
|
18
|
+
--block-on-stone: #ffffff;
|
|
19
|
+
--block-deepslate: #292929;
|
|
20
|
+
--block-deepslate-light: #3b3b3b;
|
|
21
|
+
--block-deepslate-dark: #1a1a1a;
|
|
22
|
+
--block-on-deepslate: #ffffff;
|
|
23
|
+
--block-sand: #d8c78e;
|
|
24
|
+
--block-sand-light: #ede1b4;
|
|
25
|
+
--block-sand-dark: #a8955c;
|
|
26
|
+
--block-on-sand: #1f1a0b;
|
|
27
|
+
--block-water: #3b82c4;
|
|
28
|
+
--block-water-light: #62a3de;
|
|
29
|
+
--block-water-dark: #24568a;
|
|
30
|
+
--block-on-water: #050e18;
|
|
31
|
+
--block-diamond: #52d9d0;
|
|
32
|
+
--block-diamond-light: #a5f3ee;
|
|
33
|
+
--block-diamond-dark: #1e9b93;
|
|
34
|
+
--block-on-diamond: #0b1f1e;
|
|
35
|
+
--block-emerald: #35b84b;
|
|
36
|
+
--block-emerald-light: #71dd80;
|
|
37
|
+
--block-emerald-dark: #1e7a2f;
|
|
38
|
+
--block-on-emerald: #0b1f0e;
|
|
39
|
+
--block-gold: #f2c94c;
|
|
40
|
+
--block-gold-light: #fce48c;
|
|
41
|
+
--block-gold-dark: #b88a1b;
|
|
42
|
+
--block-on-gold: #2a1a05;
|
|
43
|
+
--block-redstone: #b52a24;
|
|
44
|
+
--block-redstone-light: #e0473f;
|
|
45
|
+
--block-redstone-dark: #7a1814;
|
|
46
|
+
--block-on-redstone: #ffffff;
|
|
47
|
+
--block-obsidian: #251b31;
|
|
48
|
+
--block-obsidian-light: #3e2d54;
|
|
49
|
+
--block-obsidian-dark: #140e1c;
|
|
50
|
+
--block-on-obsidian: #ffffff;
|
|
51
|
+
--block-nether: #702929;
|
|
52
|
+
--block-nether-light: #954040;
|
|
53
|
+
--block-nether-dark: #4a1919;
|
|
54
|
+
--block-on-nether: #ffffff;
|
|
55
|
+
--block-amethyst: #9a6bd6;
|
|
56
|
+
--block-amethyst-light: #be9bec;
|
|
57
|
+
--block-amethyst-dark: #6a44a0;
|
|
58
|
+
--block-on-amethyst: #160c24;
|
|
59
|
+
--block-lava: #e8772e;
|
|
60
|
+
--block-lava-light: #ffae4a;
|
|
61
|
+
--block-lava-dark: #a8461a;
|
|
62
|
+
--block-on-lava: #200c03;
|
|
63
|
+
--block-iron: #d8d8d8;
|
|
64
|
+
--block-iron-dark: #9c9c9c;
|
|
65
|
+
--block-coal: #2e2e2e;
|
|
66
|
+
--block-outline: #17191c;
|
|
67
|
+
--block-white: #ffffff;
|
|
68
|
+
--block-black: #000000;
|
|
69
|
+
--block-text-primary: #ffffff;
|
|
70
|
+
--block-text-secondary: #c9cdd2;
|
|
71
|
+
--block-text-disabled: #8a9097;
|
|
72
|
+
--block-bg: #1d2025;
|
|
73
|
+
--block-space-0: 0px;
|
|
74
|
+
--block-space-1: 4px;
|
|
75
|
+
--block-space-2: 8px;
|
|
76
|
+
--block-space-3: 12px;
|
|
77
|
+
--block-space-4: 16px;
|
|
78
|
+
--block-space-5: 20px;
|
|
79
|
+
--block-space-6: 24px;
|
|
80
|
+
--block-space-8: 32px;
|
|
81
|
+
--block-space-10: 40px;
|
|
82
|
+
--block-space-12: 48px;
|
|
83
|
+
--block-space-16: 64px;
|
|
84
|
+
--block-font-display: "Silkscreen", "Press Start 2P", "Courier New", ui-monospace, monospace;
|
|
85
|
+
--block-font-body: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans TC", "Helvetica Neue", Arial, sans-serif;
|
|
86
|
+
--block-font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
|
|
87
|
+
--block-font-size-xs: 11px;
|
|
88
|
+
--block-font-size-sm: 12px;
|
|
89
|
+
--block-font-size-md: 14px;
|
|
90
|
+
--block-font-size-lg: 16px;
|
|
91
|
+
--block-font-size-xl: 20px;
|
|
92
|
+
--block-font-size-2xl: 24px;
|
|
93
|
+
--block-font-size-3xl: 32px;
|
|
94
|
+
--block-font-weight-regular: 400;
|
|
95
|
+
--block-font-weight-medium: 500;
|
|
96
|
+
--block-font-weight-bold: 700;
|
|
97
|
+
--block-line-height-tight: 1.15;
|
|
98
|
+
--block-line-height-normal: 1.45;
|
|
99
|
+
--block-line-height-relaxed: 1.6;
|
|
100
|
+
--block-letter-spacing-normal: 0;
|
|
101
|
+
--block-letter-spacing-wide: 0.04em;
|
|
102
|
+
--block-letter-spacing-wider: 0.08em;
|
|
103
|
+
--block-radius-none: 0px;
|
|
104
|
+
--block-radius-xs: 2px;
|
|
105
|
+
--block-radius-sm: 4px;
|
|
106
|
+
--block-radius-md: 6px;
|
|
107
|
+
--block-border-width: 3px;
|
|
108
|
+
--block-border-width-thin: 2px;
|
|
109
|
+
--block-border-color: #17191c;
|
|
110
|
+
--block-shadow-bevel-light: rgba(255, 255, 255, 0.14);
|
|
111
|
+
--block-shadow-bevel-dark: rgba(0, 0, 0, 0.38);
|
|
112
|
+
--block-shadow-bevel: inset 3px 3px 0 rgba(255, 255, 255, 0.14), inset -3px -3px 0 rgba(0, 0, 0, 0.38);
|
|
113
|
+
--block-shadow-inset: inset 3px 3px 0 rgba(0, 0, 0, 0.38), inset -3px -3px 0 rgba(255, 255, 255, 0.1);
|
|
114
|
+
--block-shadow-drop: 4px 4px 0 rgba(0, 0, 0, 0.45);
|
|
115
|
+
--block-shadow-text: 2px 2px 0 rgba(0, 0, 0, 0.55);
|
|
116
|
+
--block-shadow-text-light: 1px 1px 0 rgba(255, 255, 255, 0.35);
|
|
117
|
+
--block-duration-instant: 80ms;
|
|
118
|
+
--block-duration-fast: 120ms;
|
|
119
|
+
--block-duration-normal: 160ms;
|
|
120
|
+
--block-ease-step: steps(2, end);
|
|
121
|
+
--block-ease-snap: cubic-bezier(0.2, 0, 0, 1);
|
|
122
|
+
--block-ease-linear: linear;
|
|
123
|
+
--block-size-slot-sm: 40px;
|
|
124
|
+
--block-size-slot-md: 52px;
|
|
125
|
+
--block-size-slot-lg: 64px;
|
|
126
|
+
--block-size-icon-sm: 16px;
|
|
127
|
+
--block-size-icon-md: 24px;
|
|
128
|
+
--block-size-icon-lg: 32px;
|
|
129
|
+
--block-size-control-sm: 32px;
|
|
130
|
+
--block-size-control-md: 40px;
|
|
131
|
+
--block-size-control-lg: 48px;
|
|
132
|
+
--block-size-sidebar: 248px;
|
|
133
|
+
--block-size-sidebar-collapsed: 72px;
|
|
134
|
+
--block-z-base: 0;
|
|
135
|
+
--block-z-raised: 1;
|
|
136
|
+
--block-z-dropdown: 100;
|
|
137
|
+
--block-z-sticky: 200;
|
|
138
|
+
--block-z-tooltip: 300;
|
|
139
|
+
--block-z-overlay: 400;
|
|
140
|
+
--block-z-modal: 500;
|
|
141
|
+
--block-z-toast: 600;
|
|
142
|
+
--block-texture-stone: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%236E6E6E' d='M0 0h2v1h-2zM5 0h1v1h-1zM7 0h1v1h-1zM10 0h2v1h-2zM14 0h2v1h-2zM0 1h1v1h-1zM2 1h1v1h-1zM4 1h1v1h-1zM6 1h4v1h-4zM12 1h1v1h-1zM5 2h3v1h-3zM9 2h2v1h-2zM12 2h1v1h-1zM2 3h4v1h-4zM7 3h2v1h-2zM10 3h2v1h-2zM2 4h1v1h-1zM13 4h1v1h-1zM15 4h1v1h-1zM10 5h4v1h-4zM1 6h1v1h-1zM6 6h1v1h-1zM12 6h1v1h-1zM0 7h3v1h-3zM12 7h1v1h-1zM0 8h1v1h-1zM4 8h2v1h-2zM8 8h5v1h-5zM15 8h1v1h-1zM0 9h2v1h-2zM4 9h2v1h-2zM11 9h1v1h-1zM13 9h1v1h-1zM0 10h2v1h-2zM6 10h1v1h-1zM8 10h2v1h-2zM12 10h1v1h-1zM0 11h1v1h-1zM2 11h1v1h-1zM13 11h1v1h-1zM15 11h1v1h-1zM2 12h3v1h-3zM8 12h3v1h-3zM0 13h1v1h-1zM2 13h1v1h-1zM4 13h1v1h-1zM11 13h1v1h-1zM14 13h1v1h-1zM5 14h3v1h-3zM9 14h1v1h-1zM14 14h1v1h-1zM3 15h1v1h-1zM7 15h2v1h-2zM10 15h2v1h-2zM13 15h1v1h-1zM15 15h1v1h-1z'/%3E%3Cpath fill='%23858585' d='M2 0h1v1h-1zM3 1h1v1h-1zM1 2h1v1h-1zM3 2h1v1h-1zM15 2h1v1h-1zM13 3h1v1h-1zM1 4h1v1h-1zM6 4h1v1h-1zM9 4h2v1h-2zM3 5h1v1h-1zM14 5h1v1h-1zM5 6h1v1h-1zM7 6h1v1h-1zM13 6h1v1h-1zM7 7h1v1h-1zM10 7h1v1h-1zM14 8h1v1h-1zM7 10h1v1h-1zM13 10h1v1h-1zM5 11h1v1h-1zM10 11h1v1h-1zM7 12h1v1h-1zM12 12h1v1h-1zM15 12h1v1h-1zM1 13h1v1h-1zM4 14h1v1h-1zM0 15h1v1h-1zM5 15h1v1h-1z'/%3E%3Cpath fill='%237A7A7A' d='M3 0h2v1h-2zM6 0h1v1h-1zM8 0h2v1h-2zM13 0h1v1h-1zM1 1h1v1h-1zM10 1h1v1h-1zM14 1h2v1h-2zM0 2h1v1h-1zM2 2h1v1h-1zM8 2h1v1h-1zM13 2h2v1h-2zM0 3h2v1h-2zM9 3h1v1h-1zM12 3h1v1h-1zM14 3h1v1h-1zM0 4h1v1h-1zM3 4h2v1h-2zM8 4h1v1h-1zM11 4h1v1h-1zM14 4h1v1h-1zM0 5h2v1h-2zM4 5h1v1h-1zM6 5h4v1h-4zM0 6h1v1h-1zM2 6h3v1h-3zM8 6h1v1h-1zM10 6h1v1h-1zM14 6h2v1h-2zM5 7h2v1h-2zM8 7h2v1h-2zM11 7h1v1h-1zM13 7h1v1h-1zM1 8h3v1h-3zM6 8h2v1h-2zM2 9h2v1h-2zM7 9h1v1h-1zM9 9h1v1h-1zM12 9h1v1h-1zM14 9h1v1h-1zM5 10h1v1h-1zM10 10h1v1h-1zM14 10h2v1h-2zM1 11h1v1h-1zM4 11h1v1h-1zM7 11h3v1h-3zM11 11h2v1h-2zM14 11h1v1h-1zM0 12h1v1h-1zM5 12h2v1h-2zM11 12h1v1h-1zM3 13h1v1h-1zM5 13h1v1h-1zM7 13h4v1h-4zM13 13h1v1h-1zM15 13h1v1h-1zM0 14h3v1h-3zM8 14h1v1h-1zM12 14h1v1h-1zM15 14h1v1h-1zM1 15h1v1h-1zM14 15h1v1h-1z'/%3E%3Cpath fill='%23626262' d='M12 0h1v1h-1zM5 1h1v1h-1zM11 1h1v1h-1zM13 1h1v1h-1zM4 2h1v1h-1zM11 2h1v1h-1zM6 3h1v1h-1zM15 3h1v1h-1zM5 4h1v1h-1zM7 4h1v1h-1zM12 4h1v1h-1zM2 5h1v1h-1zM5 5h1v1h-1zM15 5h1v1h-1zM9 6h1v1h-1zM11 6h1v1h-1zM3 7h2v1h-2zM14 7h2v1h-2zM13 8h1v1h-1zM6 9h1v1h-1zM8 9h1v1h-1zM10 9h1v1h-1zM15 9h1v1h-1zM2 10h3v1h-3zM11 10h1v1h-1zM3 11h1v1h-1zM6 11h1v1h-1zM1 12h1v1h-1zM13 12h2v1h-2zM6 13h1v1h-1zM12 13h1v1h-1zM3 14h1v1h-1zM10 14h2v1h-2zM13 14h1v1h-1zM2 15h1v1h-1zM4 15h1v1h-1zM6 15h1v1h-1zM9 15h1v1h-1zM12 15h1v1h-1z'/%3E%3C/svg%3E");
|
|
143
|
+
--block-texture-deepslate: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%23333336' d='M0 0h4v1h-4zM5 0h1v1h-1zM7 0h4v1h-4zM12 0h1v1h-1zM4 1h1v1h-1zM6 1h3v1h-3zM13 1h1v1h-1zM6 2h2v1h-2zM12 3h1v1h-1zM0 4h1v1h-1zM3 4h1v1h-1zM8 4h2v1h-2zM15 4h1v1h-1zM2 5h2v1h-2zM5 5h1v1h-1zM13 5h2v1h-2zM0 6h2v1h-2zM4 6h4v1h-4zM9 6h2v1h-2zM15 6h1v1h-1zM5 7h1v1h-1zM8 7h3v1h-3zM15 7h1v1h-1zM12 8h1v1h-1zM3 9h1v1h-1zM10 9h1v1h-1zM12 9h2v1h-2zM0 10h1v1h-1zM2 10h1v1h-1zM6 10h1v1h-1zM10 10h1v1h-1zM14 10h2v1h-2zM7 11h1v1h-1zM3 12h1v1h-1zM5 12h1v1h-1zM13 12h1v1h-1zM15 12h1v1h-1zM2 13h1v1h-1zM0 14h1v1h-1zM6 14h2v1h-2zM14 14h1v1h-1zM4 15h2v1h-2zM8 15h2v1h-2zM11 15h1v1h-1zM14 15h1v1h-1z'/%3E%3Cpath fill='%23252527' d='M4 0h1v1h-1zM11 0h1v1h-1zM13 0h2v1h-2zM9 1h3v1h-3zM0 2h1v1h-1zM4 2h1v1h-1zM8 2h1v1h-1zM10 2h2v1h-2zM15 2h1v1h-1zM1 4h1v1h-1zM5 4h1v1h-1zM14 4h1v1h-1zM7 5h1v1h-1zM12 5h1v1h-1zM2 6h1v1h-1zM12 6h1v1h-1zM4 7h1v1h-1zM12 7h1v1h-1zM2 8h1v1h-1zM7 8h1v1h-1zM4 9h2v1h-2zM3 10h1v1h-1zM12 10h1v1h-1zM3 11h1v1h-1zM5 11h1v1h-1zM8 11h3v1h-3zM13 11h1v1h-1zM2 12h1v1h-1zM4 12h1v1h-1zM6 12h2v1h-2zM9 12h1v1h-1zM11 14h1v1h-1zM3 15h1v1h-1z'/%3E%3Cpath fill='%232C2C2E' d='M6 0h1v1h-1zM15 0h1v1h-1zM0 1h4v1h-4zM5 1h1v1h-1zM12 1h1v1h-1zM14 1h2v1h-2zM2 2h2v1h-2zM5 2h1v1h-1zM9 2h1v1h-1zM12 2h3v1h-3zM2 3h1v1h-1zM7 3h1v1h-1zM2 4h1v1h-1zM4 4h1v1h-1zM6 4h2v1h-2zM10 4h3v1h-3zM0 5h1v1h-1zM4 5h1v1h-1zM6 5h1v1h-1zM8 5h4v1h-4zM15 5h1v1h-1zM8 6h1v1h-1zM13 6h2v1h-2zM1 7h1v1h-1zM3 7h1v1h-1zM6 7h2v1h-2zM11 7h1v1h-1zM13 7h2v1h-2zM0 9h2v1h-2zM8 9h2v1h-2zM11 9h1v1h-1zM14 9h2v1h-2zM1 10h1v1h-1zM4 10h2v1h-2zM7 10h1v1h-1zM9 10h1v1h-1zM11 10h1v1h-1zM13 10h1v1h-1zM0 11h3v1h-3zM4 11h1v1h-1zM6 11h1v1h-1zM11 11h2v1h-2zM14 11h2v1h-2zM0 12h2v1h-2zM8 12h1v1h-1zM10 12h3v1h-3zM14 12h1v1h-1zM7 13h1v1h-1zM1 14h4v1h-4zM8 14h1v1h-1zM10 14h1v1h-1zM12 14h2v1h-2zM15 14h1v1h-1zM0 15h3v1h-3zM7 15h1v1h-1zM10 15h1v1h-1zM13 15h1v1h-1zM15 15h1v1h-1z'/%3E%3Cpath fill='%233A3A3D' d='M1 2h1v1h-1zM13 4h1v1h-1zM1 5h1v1h-1zM3 6h1v1h-1zM11 6h1v1h-1zM0 7h1v1h-1zM2 7h1v1h-1zM2 9h1v1h-1zM6 9h2v1h-2zM8 10h1v1h-1zM12 13h1v1h-1zM5 14h1v1h-1zM9 14h1v1h-1zM6 15h1v1h-1zM12 15h1v1h-1z'/%3E%3Cpath fill='%23212123' d='M0 3h2v1h-2zM3 3h4v1h-4zM8 3h4v1h-4zM13 3h3v1h-3zM0 8h2v1h-2zM3 8h4v1h-4zM8 8h4v1h-4zM13 8h3v1h-3zM0 13h2v1h-2zM3 13h4v1h-4zM8 13h4v1h-4zM13 13h3v1h-3z'/%3E%3C/svg%3E");
|
|
144
|
+
--block-texture-dirt: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%2379553A' d='M0 0h2v1h-2zM3 0h3v1h-3zM9 0h1v1h-1zM11 0h2v1h-2zM1 1h2v1h-2zM5 1h1v1h-1zM7 1h2v1h-2zM10 1h1v1h-1zM12 1h1v1h-1zM5 2h2v1h-2zM12 2h1v1h-1zM14 2h2v1h-2zM1 3h1v1h-1zM5 3h1v1h-1zM9 3h5v1h-5zM15 3h1v1h-1zM3 4h2v1h-2zM7 4h2v1h-2zM13 4h2v1h-2zM1 5h4v1h-4zM7 5h1v1h-1zM10 5h1v1h-1zM1 6h2v1h-2zM10 6h1v1h-1zM12 6h1v1h-1zM15 6h1v1h-1zM0 7h1v1h-1zM2 7h5v1h-5zM9 7h1v1h-1zM12 7h2v1h-2zM15 7h1v1h-1zM3 8h3v1h-3zM7 8h1v1h-1zM10 8h1v1h-1zM13 8h1v1h-1zM0 9h2v1h-2zM5 9h3v1h-3zM9 9h1v1h-1zM13 9h1v1h-1zM2 10h1v1h-1zM4 10h1v1h-1zM7 10h1v1h-1zM12 10h3v1h-3zM2 11h2v1h-2zM5 11h3v1h-3zM9 11h1v1h-1zM11 11h1v1h-1zM13 11h3v1h-3zM2 12h5v1h-5zM8 12h1v1h-1zM10 12h1v1h-1zM13 12h1v1h-1zM15 12h1v1h-1zM1 13h1v1h-1zM3 13h1v1h-1zM5 13h3v1h-3zM9 13h1v1h-1zM13 13h1v1h-1zM15 13h1v1h-1zM0 14h6v1h-6zM9 14h1v1h-1zM12 14h1v1h-1zM1 15h2v1h-2zM6 15h1v1h-1zM10 15h2v1h-2z'/%3E%3Cpath fill='%236B4A32' d='M2 0h1v1h-1zM6 0h1v1h-1zM10 0h1v1h-1zM15 0h1v1h-1zM3 1h1v1h-1zM11 1h1v1h-1zM13 1h1v1h-1zM2 2h1v1h-1zM4 2h1v1h-1zM7 2h1v1h-1zM11 2h1v1h-1zM2 3h1v1h-1zM6 3h2v1h-2zM14 3h1v1h-1zM0 4h1v1h-1zM2 4h1v1h-1zM6 4h1v1h-1zM12 4h1v1h-1zM15 4h1v1h-1zM0 5h1v1h-1zM5 5h1v1h-1zM8 5h2v1h-2zM12 5h2v1h-2zM4 6h6v1h-6zM14 6h1v1h-1zM8 7h1v1h-1zM10 7h1v1h-1zM14 7h1v1h-1zM0 8h3v1h-3zM6 8h1v1h-1zM8 8h2v1h-2zM15 8h1v1h-1zM2 9h3v1h-3zM10 9h1v1h-1zM14 9h1v1h-1zM0 10h1v1h-1zM3 10h1v1h-1zM8 10h3v1h-3zM0 11h1v1h-1zM8 11h1v1h-1zM1 12h1v1h-1zM9 12h1v1h-1zM12 12h1v1h-1zM0 13h1v1h-1zM10 13h2v1h-2zM6 14h1v1h-1zM13 14h1v1h-1zM4 15h2v1h-2zM7 15h3v1h-3zM12 15h3v1h-3z'/%3E%3Cpath fill='%235A3E2A' d='M7 0h1v1h-1zM13 0h1v1h-1zM4 1h1v1h-1zM14 1h1v1h-1zM1 2h1v1h-1zM9 2h1v1h-1zM1 4h1v1h-1zM6 5h1v1h-1zM11 5h1v1h-1zM14 5h1v1h-1zM13 6h1v1h-1zM1 7h1v1h-1zM11 7h1v1h-1zM12 8h1v1h-1zM1 10h1v1h-1zM1 11h1v1h-1zM12 11h1v1h-1zM4 13h1v1h-1zM8 13h1v1h-1zM12 13h1v1h-1zM8 14h1v1h-1zM11 14h1v1h-1z'/%3E%3Cpath fill='%238A6343' d='M8 0h1v1h-1zM14 0h1v1h-1zM0 1h1v1h-1zM6 1h1v1h-1zM9 1h1v1h-1zM15 1h1v1h-1zM0 2h1v1h-1zM3 2h1v1h-1zM8 2h1v1h-1zM10 2h1v1h-1zM13 2h1v1h-1zM0 3h1v1h-1zM3 3h2v1h-2zM8 3h1v1h-1zM5 4h1v1h-1zM9 4h3v1h-3zM15 5h1v1h-1zM0 6h1v1h-1zM3 6h1v1h-1zM11 6h1v1h-1zM7 7h1v1h-1zM11 8h1v1h-1zM14 8h1v1h-1zM8 9h1v1h-1zM11 9h2v1h-2zM15 9h1v1h-1zM5 10h2v1h-2zM11 10h1v1h-1zM15 10h1v1h-1zM4 11h1v1h-1zM10 11h1v1h-1zM0 12h1v1h-1zM7 12h1v1h-1zM11 12h1v1h-1zM14 12h1v1h-1zM2 13h1v1h-1zM14 13h1v1h-1zM7 14h1v1h-1zM10 14h1v1h-1zM14 14h2v1h-2zM0 15h1v1h-1zM3 15h1v1h-1zM15 15h1v1h-1z'/%3E%3C/svg%3E");
|
|
145
|
+
--block-texture-grass: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%237EBE55' d='M0 0h2v1h-2zM3 0h1v1h-1zM9 0h1v1h-1zM11 0h1v1h-1zM14 0h2v1h-2zM5 1h1v1h-1zM7 1h3v1h-3zM13 1h1v1h-1zM2 2h2v1h-2zM6 2h1v1h-1zM8 2h1v1h-1zM11 2h1v1h-1zM15 2h1v1h-1zM0 3h2v1h-2zM4 3h1v1h-1zM6 3h1v1h-1zM9 3h1v1h-1zM12 3h3v1h-3zM9 4h1v1h-1zM12 4h2v1h-2z'/%3E%3Cpath fill='%235D9B3D' d='M2 0h1v1h-1zM5 0h2v1h-2zM8 0h1v1h-1zM10 0h1v1h-1zM13 0h1v1h-1zM0 1h1v1h-1zM3 1h2v1h-2zM6 1h1v1h-1zM10 1h1v1h-1zM12 1h1v1h-1zM14 1h2v1h-2zM0 2h2v1h-2zM4 2h1v1h-1zM7 2h1v1h-1zM13 2h1v1h-1zM2 3h1v1h-1zM10 3h2v1h-2zM11 4h1v1h-1zM15 4h1v1h-1z'/%3E%3Cpath fill='%23356B28' d='M4 0h1v1h-1zM7 0h1v1h-1zM12 0h1v1h-1zM1 1h2v1h-2zM11 1h1v1h-1zM5 2h1v1h-1zM9 2h2v1h-2zM12 2h1v1h-1zM14 2h1v1h-1zM15 3h1v1h-1z'/%3E%3Cpath fill='%238A6343' d='M3 3h1v1h-1zM8 3h1v1h-1zM5 4h1v1h-1zM10 4h1v1h-1zM15 5h1v1h-1zM0 6h1v1h-1zM3 6h1v1h-1zM11 6h1v1h-1zM7 7h1v1h-1zM11 8h1v1h-1zM14 8h1v1h-1zM8 9h1v1h-1zM11 9h2v1h-2zM15 9h1v1h-1zM5 10h2v1h-2zM11 10h1v1h-1zM15 10h1v1h-1zM4 11h1v1h-1zM10 11h1v1h-1zM0 12h1v1h-1zM7 12h1v1h-1zM11 12h1v1h-1zM14 12h1v1h-1zM2 13h1v1h-1zM14 13h1v1h-1zM7 14h1v1h-1zM10 14h1v1h-1zM14 14h2v1h-2zM0 15h1v1h-1zM3 15h1v1h-1zM15 15h1v1h-1z'/%3E%3Cpath fill='%2379553A' d='M5 3h1v1h-1zM3 4h2v1h-2zM7 4h2v1h-2zM14 4h1v1h-1zM1 5h4v1h-4zM7 5h1v1h-1zM10 5h1v1h-1zM1 6h2v1h-2zM10 6h1v1h-1zM12 6h1v1h-1zM15 6h1v1h-1zM0 7h1v1h-1zM2 7h5v1h-5zM9 7h1v1h-1zM12 7h2v1h-2zM15 7h1v1h-1zM3 8h3v1h-3zM7 8h1v1h-1zM10 8h1v1h-1zM13 8h1v1h-1zM0 9h2v1h-2zM5 9h3v1h-3zM9 9h1v1h-1zM13 9h1v1h-1zM2 10h1v1h-1zM4 10h1v1h-1zM7 10h1v1h-1zM12 10h3v1h-3zM2 11h2v1h-2zM5 11h3v1h-3zM9 11h1v1h-1zM11 11h1v1h-1zM13 11h3v1h-3zM2 12h5v1h-5zM8 12h1v1h-1zM10 12h1v1h-1zM13 12h1v1h-1zM15 12h1v1h-1zM1 13h1v1h-1zM3 13h1v1h-1zM5 13h3v1h-3zM9 13h1v1h-1zM13 13h1v1h-1zM15 13h1v1h-1zM0 14h6v1h-6zM9 14h1v1h-1zM12 14h1v1h-1zM1 15h2v1h-2zM6 15h1v1h-1zM10 15h2v1h-2z'/%3E%3Cpath fill='%236B4A32' d='M7 3h1v1h-1zM0 4h1v1h-1zM2 4h1v1h-1zM6 4h1v1h-1zM0 5h1v1h-1zM5 5h1v1h-1zM8 5h2v1h-2zM12 5h2v1h-2zM4 6h6v1h-6zM14 6h1v1h-1zM8 7h1v1h-1zM10 7h1v1h-1zM14 7h1v1h-1zM0 8h3v1h-3zM6 8h1v1h-1zM8 8h2v1h-2zM15 8h1v1h-1zM2 9h3v1h-3zM10 9h1v1h-1zM14 9h1v1h-1zM0 10h1v1h-1zM3 10h1v1h-1zM8 10h3v1h-3zM0 11h1v1h-1zM8 11h1v1h-1zM1 12h1v1h-1zM9 12h1v1h-1zM12 12h1v1h-1zM0 13h1v1h-1zM10 13h2v1h-2zM6 14h1v1h-1zM13 14h1v1h-1zM4 15h2v1h-2zM7 15h3v1h-3zM12 15h3v1h-3z'/%3E%3Cpath fill='%235A3E2A' d='M1 4h1v1h-1zM6 5h1v1h-1zM11 5h1v1h-1zM14 5h1v1h-1zM13 6h1v1h-1zM1 7h1v1h-1zM11 7h1v1h-1zM12 8h1v1h-1zM1 10h1v1h-1zM1 11h1v1h-1zM12 11h1v1h-1zM4 13h1v1h-1zM8 13h1v1h-1zM12 13h1v1h-1zM8 14h1v1h-1zM11 14h1v1h-1z'/%3E%3C/svg%3E");
|
|
146
|
+
--block-texture-planks: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%237D5126' d='M0 0h2v1h-2zM3 0h1v1h-1zM5 0h2v1h-2zM10 0h3v1h-3zM2 1h2v1h-2zM6 1h1v1h-1zM6 2h1v1h-1zM9 2h2v1h-2zM12 2h2v1h-2zM15 2h1v1h-1zM2 4h1v1h-1zM7 4h1v1h-1zM13 4h1v1h-1zM15 4h1v1h-1zM6 5h1v1h-1zM10 5h2v1h-2zM1 6h2v1h-2zM4 6h1v1h-1zM6 6h1v1h-1zM14 6h1v1h-1zM0 8h1v1h-1zM2 8h2v1h-2zM8 8h1v1h-1zM10 8h1v1h-1zM12 8h1v1h-1zM5 9h2v1h-2zM9 9h1v1h-1zM13 9h1v1h-1zM0 10h1v1h-1zM6 10h5v1h-5zM12 10h1v1h-1zM1 12h1v1h-1zM13 12h3v1h-3zM7 13h1v1h-1zM2 14h3v1h-3zM11 14h1v1h-1zM14 14h1v1h-1z'/%3E%3Cpath fill='%238A5A2B' d='M2 0h1v1h-1zM4 0h1v1h-1zM7 0h1v1h-1zM9 0h1v1h-1zM13 0h3v1h-3zM1 1h1v1h-1zM4 1h1v1h-1zM7 1h4v1h-4zM12 1h2v1h-2zM15 1h1v1h-1zM0 2h1v1h-1zM2 2h3v1h-3zM8 2h1v1h-1zM11 2h1v1h-1zM14 2h1v1h-1zM0 4h2v1h-2zM3 4h2v1h-2zM6 4h1v1h-1zM9 4h2v1h-2zM0 5h6v1h-6zM7 5h3v1h-3zM13 5h2v1h-2zM0 6h1v1h-1zM3 6h1v1h-1zM7 6h5v1h-5zM13 6h1v1h-1zM15 6h1v1h-1zM1 8h1v1h-1zM4 8h4v1h-4zM13 8h3v1h-3zM0 9h2v1h-2zM3 9h2v1h-2zM7 9h1v1h-1zM11 9h2v1h-2zM14 9h2v1h-2zM1 10h1v1h-1zM3 10h3v1h-3zM11 10h1v1h-1zM13 10h3v1h-3zM0 12h1v1h-1zM2 12h2v1h-2zM5 12h5v1h-5zM11 12h2v1h-2zM0 13h3v1h-3zM5 13h2v1h-2zM8 13h1v1h-1zM10 13h2v1h-2zM13 13h3v1h-3zM1 14h1v1h-1zM5 14h2v1h-2zM8 14h1v1h-1zM10 14h1v1h-1zM12 14h2v1h-2z'/%3E%3Cpath fill='%23966532' d='M8 0h1v1h-1zM0 1h1v1h-1zM11 1h1v1h-1zM14 1h1v1h-1zM1 2h1v1h-1zM7 2h1v1h-1zM5 4h1v1h-1zM8 4h1v1h-1zM11 4h2v1h-2zM14 4h1v1h-1zM15 5h1v1h-1zM5 6h1v1h-1zM9 8h1v1h-1zM11 8h1v1h-1zM8 9h1v1h-1zM10 9h1v1h-1zM4 12h1v1h-1zM10 12h1v1h-1zM3 13h2v1h-2zM12 13h1v1h-1zM0 14h1v1h-1zM7 14h1v1h-1zM15 14h1v1h-1z'/%3E%3Cpath fill='%235E3C1C' d='M5 1h1v1h-1zM5 2h1v1h-1zM0 3h16v1h-16zM12 5h1v1h-1zM12 6h1v1h-1zM0 7h16v1h-16zM2 9h1v1h-1zM2 10h1v1h-1zM0 11h16v1h-16zM9 13h1v1h-1zM9 14h1v1h-1zM0 15h16v1h-16z'/%3E%3C/svg%3E");
|
|
147
|
+
--block-texture-netherrack: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%236A2626' d='M0 0h3v1h-3zM6 0h2v1h-2zM9 0h3v1h-3zM14 0h1v1h-1zM1 1h1v1h-1zM4 1h2v1h-2zM8 1h3v1h-3zM12 1h2v1h-2zM15 1h1v1h-1zM0 2h4v1h-4zM9 2h1v1h-1zM13 2h1v1h-1zM1 3h4v1h-4zM6 3h3v1h-3zM12 3h2v1h-2zM0 4h2v1h-2zM4 4h1v1h-1zM6 4h4v1h-4zM11 4h5v1h-5zM5 5h2v1h-2zM8 5h1v1h-1zM10 5h3v1h-3zM14 5h2v1h-2zM0 6h2v1h-2zM3 6h2v1h-2zM6 6h2v1h-2zM9 6h2v1h-2zM12 6h4v1h-4zM1 7h2v1h-2zM6 7h1v1h-1zM9 7h3v1h-3zM13 7h1v1h-1zM15 7h1v1h-1zM0 8h1v1h-1zM7 8h4v1h-4zM12 8h1v1h-1zM14 8h1v1h-1zM2 9h1v1h-1zM4 9h1v1h-1zM6 9h1v1h-1zM8 9h3v1h-3zM14 9h2v1h-2zM3 10h4v1h-4zM8 10h1v1h-1zM10 10h4v1h-4zM0 11h1v1h-1zM5 11h4v1h-4zM10 11h2v1h-2zM13 11h1v1h-1zM0 12h1v1h-1zM2 12h2v1h-2zM5 12h2v1h-2zM8 12h3v1h-3zM12 12h2v1h-2zM0 13h2v1h-2zM5 13h2v1h-2zM10 13h3v1h-3zM0 14h1v1h-1zM2 14h2v1h-2zM7 14h1v1h-1zM9 14h1v1h-1zM11 14h1v1h-1zM0 15h4v1h-4zM5 15h1v1h-1zM11 15h1v1h-1zM14 15h2v1h-2z'/%3E%3Cpath fill='%23582020' d='M3 0h1v1h-1zM5 0h1v1h-1zM15 0h1v1h-1zM7 1h1v1h-1zM8 2h1v1h-1zM11 2h1v1h-1zM15 2h1v1h-1zM5 3h1v1h-1zM9 3h1v1h-1zM11 3h1v1h-1zM14 3h1v1h-1zM1 5h1v1h-1zM7 5h1v1h-1zM0 7h1v1h-1zM6 8h1v1h-1zM11 8h1v1h-1zM13 8h1v1h-1zM15 8h1v1h-1zM0 9h1v1h-1zM3 9h1v1h-1zM5 9h1v1h-1zM7 9h1v1h-1zM11 9h1v1h-1zM15 10h1v1h-1zM2 11h1v1h-1zM9 11h1v1h-1zM14 11h1v1h-1zM15 12h1v1h-1zM2 13h1v1h-1zM4 13h1v1h-1zM9 13h1v1h-1zM5 14h1v1h-1zM8 14h1v1h-1zM14 14h2v1h-2zM7 15h4v1h-4z'/%3E%3Cpath fill='%237E2F2F' d='M4 0h1v1h-1zM8 0h1v1h-1zM13 0h1v1h-1zM2 1h1v1h-1zM6 1h1v1h-1zM11 1h1v1h-1zM14 1h1v1h-1zM4 2h1v1h-1zM6 2h1v1h-1zM10 2h1v1h-1zM12 2h1v1h-1zM14 2h1v1h-1zM0 3h1v1h-1zM15 3h1v1h-1zM2 4h1v1h-1zM5 4h1v1h-1zM10 4h1v1h-1zM0 5h1v1h-1zM3 5h2v1h-2zM9 5h1v1h-1zM2 6h1v1h-1zM5 6h1v1h-1zM11 6h1v1h-1zM3 7h3v1h-3zM7 7h2v1h-2zM14 7h1v1h-1zM2 8h3v1h-3zM0 10h3v1h-3zM7 10h1v1h-1zM9 10h1v1h-1zM1 11h1v1h-1zM3 11h1v1h-1zM12 11h1v1h-1zM15 11h1v1h-1zM1 12h1v1h-1zM4 12h1v1h-1zM7 12h1v1h-1zM11 12h1v1h-1zM14 12h1v1h-1zM3 13h1v1h-1zM7 13h2v1h-2zM13 13h3v1h-3zM1 14h1v1h-1zM4 14h1v1h-1zM10 14h1v1h-1zM12 14h2v1h-2zM4 15h1v1h-1zM6 15h1v1h-1zM12 15h1v1h-1z'/%3E%3Cpath fill='%238F3A35' d='M12 0h1v1h-1zM0 1h1v1h-1zM3 1h1v1h-1zM5 2h1v1h-1zM7 2h1v1h-1zM10 3h1v1h-1zM3 4h1v1h-1zM2 5h1v1h-1zM13 5h1v1h-1zM8 6h1v1h-1zM12 7h1v1h-1zM1 8h1v1h-1zM5 8h1v1h-1zM1 9h1v1h-1zM12 9h2v1h-2zM14 10h1v1h-1zM4 11h1v1h-1zM6 14h1v1h-1zM13 15h1v1h-1z'/%3E%3C/svg%3E");
|
|
148
|
+
--block-texture-end-stone: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%232A2036' d='M0 0h1v1h-1zM4 0h1v1h-1zM6 0h3v1h-3zM10 0h3v1h-3zM14 0h2v1h-2zM3 1h1v1h-1zM6 1h1v1h-1zM10 1h1v1h-1zM12 1h1v1h-1zM15 1h1v1h-1zM0 2h2v1h-2zM3 2h1v1h-1zM5 2h1v1h-1zM11 2h1v1h-1zM15 2h1v1h-1zM0 3h1v1h-1zM4 3h1v1h-1zM9 3h1v1h-1zM13 3h1v1h-1zM15 3h1v1h-1zM0 4h1v1h-1zM2 4h2v1h-2zM5 4h1v1h-1zM7 4h1v1h-1zM11 4h1v1h-1zM14 4h1v1h-1zM2 5h3v1h-3zM8 5h1v1h-1zM10 5h2v1h-2zM13 5h1v1h-1zM3 6h2v1h-2zM8 6h1v1h-1zM10 6h2v1h-2zM13 6h1v1h-1zM15 6h1v1h-1zM0 7h1v1h-1zM3 7h1v1h-1zM9 7h2v1h-2zM1 8h1v1h-1zM3 8h1v1h-1zM9 8h2v1h-2zM13 8h1v1h-1zM0 9h2v1h-2zM3 9h1v1h-1zM6 9h1v1h-1zM11 9h5v1h-5zM2 10h1v1h-1zM4 10h1v1h-1zM7 10h1v1h-1zM10 10h5v1h-5zM4 11h1v1h-1zM8 11h1v1h-1zM11 11h1v1h-1zM13 11h1v1h-1zM1 12h2v1h-2zM4 12h1v1h-1zM13 12h3v1h-3zM7 13h2v1h-2zM13 13h1v1h-1zM15 13h1v1h-1zM0 14h1v1h-1zM2 14h1v1h-1zM4 14h1v1h-1zM6 14h1v1h-1zM10 14h2v1h-2zM0 15h1v1h-1zM2 15h1v1h-1zM4 15h4v1h-4zM9 15h1v1h-1zM11 15h1v1h-1zM13 15h2v1h-2z'/%3E%3Cpath fill='%23241B2F' d='M1 0h1v1h-1zM3 0h1v1h-1zM5 0h1v1h-1zM9 0h1v1h-1zM13 0h1v1h-1zM1 1h1v1h-1zM5 1h1v1h-1zM7 1h1v1h-1zM14 1h1v1h-1zM2 2h1v1h-1zM4 2h1v1h-1zM6 2h1v1h-1zM9 2h2v1h-2zM13 2h1v1h-1zM5 3h2v1h-2zM8 3h1v1h-1zM10 3h1v1h-1zM12 3h1v1h-1zM14 3h1v1h-1zM4 4h1v1h-1zM6 4h1v1h-1zM10 4h1v1h-1zM13 4h1v1h-1zM0 5h1v1h-1zM5 5h1v1h-1zM7 5h1v1h-1zM12 5h1v1h-1zM14 5h1v1h-1zM0 6h3v1h-3zM5 6h1v1h-1zM7 6h1v1h-1zM2 7h1v1h-1zM6 7h2v1h-2zM14 7h2v1h-2zM0 8h1v1h-1zM2 8h1v1h-1zM5 8h1v1h-1zM11 8h2v1h-2zM15 8h1v1h-1zM2 9h1v1h-1zM7 9h1v1h-1zM9 9h1v1h-1zM0 10h1v1h-1zM3 10h1v1h-1zM8 10h1v1h-1zM0 11h1v1h-1zM2 11h1v1h-1zM5 11h1v1h-1zM7 11h1v1h-1zM15 11h1v1h-1zM5 12h1v1h-1zM7 12h2v1h-2zM12 12h1v1h-1zM3 13h3v1h-3zM10 13h2v1h-2zM5 14h1v1h-1zM9 14h1v1h-1zM14 14h1v1h-1zM10 15h1v1h-1zM15 15h1v1h-1z'/%3E%3Cpath fill='%2330253E' d='M2 0h1v1h-1zM0 1h1v1h-1zM2 1h1v1h-1zM4 1h1v1h-1zM9 1h1v1h-1zM13 1h1v1h-1zM7 2h2v1h-2zM12 2h1v1h-1zM14 2h1v1h-1zM1 3h1v1h-1zM3 3h1v1h-1zM7 3h1v1h-1zM11 3h1v1h-1zM1 4h1v1h-1zM8 4h2v1h-2zM15 4h1v1h-1zM6 5h1v1h-1zM9 5h1v1h-1zM6 6h1v1h-1zM12 6h1v1h-1zM14 6h1v1h-1zM1 7h1v1h-1zM4 7h2v1h-2zM8 7h1v1h-1zM12 7h2v1h-2zM8 8h1v1h-1zM14 8h1v1h-1zM5 9h1v1h-1zM1 10h1v1h-1zM5 10h2v1h-2zM9 10h1v1h-1zM15 10h1v1h-1zM1 11h1v1h-1zM3 11h1v1h-1zM6 11h1v1h-1zM9 11h2v1h-2zM12 11h1v1h-1zM14 11h1v1h-1zM0 12h1v1h-1zM3 12h1v1h-1zM6 12h1v1h-1zM9 12h3v1h-3zM1 13h2v1h-2zM9 13h1v1h-1zM12 13h1v1h-1zM14 13h1v1h-1zM1 14h1v1h-1zM3 14h1v1h-1zM7 14h2v1h-2zM12 14h2v1h-2zM15 14h1v1h-1zM1 15h1v1h-1zM3 15h1v1h-1zM8 15h1v1h-1zM12 15h1v1h-1z'/%3E%3Cpath fill='%233A2D4B' d='M8 1h1v1h-1zM11 1h1v1h-1zM2 3h1v1h-1zM12 4h1v1h-1zM1 5h1v1h-1zM15 5h1v1h-1zM9 6h1v1h-1zM11 7h1v1h-1zM4 8h1v1h-1zM6 8h2v1h-2zM4 9h1v1h-1zM8 9h1v1h-1zM10 9h1v1h-1zM0 13h1v1h-1zM6 13h1v1h-1z'/%3E%3C/svg%3E");
|
|
149
|
+
--block-texture-obsidian: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' shape-rendering='crispEdges'%3E%3Cpath fill='%231C1426' d='M0 0h1v1h-1zM8 0h1v1h-1zM10 0h1v1h-1zM14 0h1v1h-1zM0 1h2v1h-2zM3 1h1v1h-1zM5 1h1v1h-1zM8 1h1v1h-1zM1 2h1v1h-1zM5 2h1v1h-1zM7 2h1v1h-1zM15 3h1v1h-1zM4 4h1v1h-1zM6 4h3v1h-3zM10 4h1v1h-1zM12 4h1v1h-1zM15 4h1v1h-1zM2 5h1v1h-1zM4 6h1v1h-1zM9 6h1v1h-1zM12 6h1v1h-1zM15 6h1v1h-1zM6 7h1v1h-1zM0 8h1v1h-1zM4 8h1v1h-1zM8 8h1v1h-1zM11 8h2v1h-2zM3 9h1v1h-1zM5 9h1v1h-1zM10 9h1v1h-1zM12 9h1v1h-1zM0 10h1v1h-1zM2 10h1v1h-1zM5 10h2v1h-2zM8 10h1v1h-1zM12 10h1v1h-1zM2 11h1v1h-1zM4 11h1v1h-1zM6 11h2v1h-2zM11 11h1v1h-1zM15 11h1v1h-1zM3 12h1v1h-1zM15 12h1v1h-1zM1 13h1v1h-1zM3 13h1v1h-1zM6 13h1v1h-1zM9 13h1v1h-1zM6 15h1v1h-1zM8 15h1v1h-1zM10 15h1v1h-1zM12 15h1v1h-1zM15 15h1v1h-1z'/%3E%3Cpath fill='%23251B31' d='M1 0h7v1h-7zM12 0h2v1h-2zM15 0h1v1h-1zM2 1h1v1h-1zM4 1h1v1h-1zM6 1h2v1h-2zM9 1h6v1h-6zM0 2h1v1h-1zM2 2h3v1h-3zM6 2h1v1h-1zM8 2h6v1h-6zM15 2h1v1h-1zM0 3h1v1h-1zM2 3h3v1h-3zM8 3h3v1h-3zM12 3h3v1h-3zM2 4h2v1h-2zM14 4h1v1h-1zM0 5h2v1h-2zM3 5h3v1h-3zM7 5h1v1h-1zM10 5h1v1h-1zM13 5h3v1h-3zM0 6h4v1h-4zM6 6h1v1h-1zM10 6h2v1h-2zM13 6h1v1h-1zM4 7h1v1h-1zM7 7h3v1h-3zM11 7h5v1h-5zM6 8h2v1h-2zM10 8h1v1h-1zM14 8h1v1h-1zM1 9h1v1h-1zM4 9h1v1h-1zM7 9h1v1h-1zM9 9h1v1h-1zM11 9h1v1h-1zM14 9h1v1h-1zM3 10h2v1h-2zM7 10h1v1h-1zM9 10h1v1h-1zM13 10h2v1h-2zM3 11h1v1h-1zM5 11h1v1h-1zM8 11h2v1h-2zM13 11h2v1h-2zM0 12h3v1h-3zM4 12h2v1h-2zM7 12h1v1h-1zM10 12h1v1h-1zM13 12h2v1h-2zM0 13h1v1h-1zM2 13h1v1h-1zM4 13h2v1h-2zM7 13h2v1h-2zM10 13h6v1h-6zM6 14h7v1h-7zM1 15h3v1h-3zM9 15h1v1h-1zM11 15h1v1h-1zM13 15h1v1h-1z'/%3E%3Cpath fill='%232F2240' d='M9 0h1v1h-1zM11 0h1v1h-1zM15 1h1v1h-1zM1 3h1v1h-1zM5 3h1v1h-1zM7 3h1v1h-1zM11 3h1v1h-1zM0 4h1v1h-1zM5 4h1v1h-1zM11 4h1v1h-1zM13 4h1v1h-1zM6 5h1v1h-1zM9 5h1v1h-1zM11 5h2v1h-2zM5 6h1v1h-1zM7 6h1v1h-1zM14 6h1v1h-1zM0 7h4v1h-4zM5 7h1v1h-1zM10 7h1v1h-1zM5 8h1v1h-1zM9 8h1v1h-1zM13 8h1v1h-1zM15 8h1v1h-1zM0 9h1v1h-1zM6 9h1v1h-1zM8 9h1v1h-1zM15 9h1v1h-1zM1 10h1v1h-1zM10 10h2v1h-2zM15 10h1v1h-1zM0 11h1v1h-1zM12 11h1v1h-1zM9 12h1v1h-1zM11 12h2v1h-2zM0 14h2v1h-2zM4 14h2v1h-2zM15 14h1v1h-1zM4 15h1v1h-1zM7 15h1v1h-1zM14 15h1v1h-1z'/%3E%3Cpath fill='%233E2D54' d='M14 2h1v1h-1zM6 3h1v1h-1zM1 4h1v1h-1zM9 4h1v1h-1zM8 5h1v1h-1zM8 6h1v1h-1zM1 8h3v1h-3zM2 9h1v1h-1zM13 9h1v1h-1zM1 11h1v1h-1zM10 11h1v1h-1zM6 12h1v1h-1zM8 12h1v1h-1zM2 14h2v1h-2zM13 14h2v1h-2zM0 15h1v1h-1zM5 15h1v1h-1z'/%3E%3C/svg%3E");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
[data-material="grass"] {
|
|
153
|
+
--block-mat: var(--block-grass);
|
|
154
|
+
--block-mat-light: var(--block-grass-light);
|
|
155
|
+
--block-mat-dark: var(--block-grass-dark);
|
|
156
|
+
--block-mat-on: var(--block-on-grass);
|
|
157
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
158
|
+
}
|
|
159
|
+
[data-material="dirt"] {
|
|
160
|
+
--block-mat: var(--block-dirt);
|
|
161
|
+
--block-mat-light: var(--block-dirt-light);
|
|
162
|
+
--block-mat-dark: var(--block-dirt-dark);
|
|
163
|
+
--block-mat-on: var(--block-on-dirt);
|
|
164
|
+
--block-mat-text-shadow: var(--block-shadow-text);
|
|
165
|
+
}
|
|
166
|
+
[data-material="wood"] {
|
|
167
|
+
--block-mat: var(--block-wood);
|
|
168
|
+
--block-mat-light: var(--block-wood-light);
|
|
169
|
+
--block-mat-dark: var(--block-wood-dark);
|
|
170
|
+
--block-mat-on: var(--block-on-wood);
|
|
171
|
+
--block-mat-text-shadow: var(--block-shadow-text);
|
|
172
|
+
}
|
|
173
|
+
[data-material="stone"] {
|
|
174
|
+
--block-mat: var(--block-stone);
|
|
175
|
+
--block-mat-light: var(--block-stone-light);
|
|
176
|
+
--block-mat-dark: var(--block-stone-dark);
|
|
177
|
+
--block-mat-on: var(--block-on-stone);
|
|
178
|
+
--block-mat-text-shadow: var(--block-shadow-text);
|
|
179
|
+
}
|
|
180
|
+
[data-material="deepslate"] {
|
|
181
|
+
--block-mat: var(--block-deepslate);
|
|
182
|
+
--block-mat-light: var(--block-deepslate-light);
|
|
183
|
+
--block-mat-dark: var(--block-deepslate-dark);
|
|
184
|
+
--block-mat-on: var(--block-on-deepslate);
|
|
185
|
+
--block-mat-text-shadow: var(--block-shadow-text);
|
|
186
|
+
}
|
|
187
|
+
[data-material="sand"] {
|
|
188
|
+
--block-mat: var(--block-sand);
|
|
189
|
+
--block-mat-light: var(--block-sand-light);
|
|
190
|
+
--block-mat-dark: var(--block-sand-dark);
|
|
191
|
+
--block-mat-on: var(--block-on-sand);
|
|
192
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
193
|
+
}
|
|
194
|
+
[data-material="water"] {
|
|
195
|
+
--block-mat: var(--block-water);
|
|
196
|
+
--block-mat-light: var(--block-water-light);
|
|
197
|
+
--block-mat-dark: var(--block-water-dark);
|
|
198
|
+
--block-mat-on: var(--block-on-water);
|
|
199
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
200
|
+
}
|
|
201
|
+
[data-material="diamond"] {
|
|
202
|
+
--block-mat: var(--block-diamond);
|
|
203
|
+
--block-mat-light: var(--block-diamond-light);
|
|
204
|
+
--block-mat-dark: var(--block-diamond-dark);
|
|
205
|
+
--block-mat-on: var(--block-on-diamond);
|
|
206
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
207
|
+
}
|
|
208
|
+
[data-material="emerald"] {
|
|
209
|
+
--block-mat: var(--block-emerald);
|
|
210
|
+
--block-mat-light: var(--block-emerald-light);
|
|
211
|
+
--block-mat-dark: var(--block-emerald-dark);
|
|
212
|
+
--block-mat-on: var(--block-on-emerald);
|
|
213
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
214
|
+
}
|
|
215
|
+
[data-material="gold"] {
|
|
216
|
+
--block-mat: var(--block-gold);
|
|
217
|
+
--block-mat-light: var(--block-gold-light);
|
|
218
|
+
--block-mat-dark: var(--block-gold-dark);
|
|
219
|
+
--block-mat-on: var(--block-on-gold);
|
|
220
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
221
|
+
}
|
|
222
|
+
[data-material="redstone"] {
|
|
223
|
+
--block-mat: var(--block-redstone);
|
|
224
|
+
--block-mat-light: var(--block-redstone-light);
|
|
225
|
+
--block-mat-dark: var(--block-redstone-dark);
|
|
226
|
+
--block-mat-on: var(--block-on-redstone);
|
|
227
|
+
--block-mat-text-shadow: var(--block-shadow-text);
|
|
228
|
+
}
|
|
229
|
+
[data-material="obsidian"] {
|
|
230
|
+
--block-mat: var(--block-obsidian);
|
|
231
|
+
--block-mat-light: var(--block-obsidian-light);
|
|
232
|
+
--block-mat-dark: var(--block-obsidian-dark);
|
|
233
|
+
--block-mat-on: var(--block-on-obsidian);
|
|
234
|
+
--block-mat-text-shadow: var(--block-shadow-text);
|
|
235
|
+
}
|
|
236
|
+
[data-material="nether"] {
|
|
237
|
+
--block-mat: var(--block-nether);
|
|
238
|
+
--block-mat-light: var(--block-nether-light);
|
|
239
|
+
--block-mat-dark: var(--block-nether-dark);
|
|
240
|
+
--block-mat-on: var(--block-on-nether);
|
|
241
|
+
--block-mat-text-shadow: var(--block-shadow-text);
|
|
242
|
+
}
|
|
243
|
+
[data-material="amethyst"] {
|
|
244
|
+
--block-mat: var(--block-amethyst);
|
|
245
|
+
--block-mat-light: var(--block-amethyst-light);
|
|
246
|
+
--block-mat-dark: var(--block-amethyst-dark);
|
|
247
|
+
--block-mat-on: var(--block-on-amethyst);
|
|
248
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
249
|
+
}
|
|
250
|
+
[data-material="lava"] {
|
|
251
|
+
--block-mat: var(--block-lava);
|
|
252
|
+
--block-mat-light: var(--block-lava-light);
|
|
253
|
+
--block-mat-dark: var(--block-lava-dark);
|
|
254
|
+
--block-mat-on: var(--block-on-lava);
|
|
255
|
+
--block-mat-text-shadow: var(--block-shadow-text-light);
|
|
256
|
+
}
|