@unmap/themes 0.2.0 → 0.3.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/README.md +2 -2
- package/dist/index.d.ts +151 -6
- package/dist/index.js +886 -50
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -142,9 +142,64 @@ var cobalt = {
|
|
|
142
142
|
950: "#0F1629",
|
|
143
143
|
1e3: "#080B15"
|
|
144
144
|
};
|
|
145
|
+
var rose = {
|
|
146
|
+
25: "#FFF3F3",
|
|
147
|
+
50: "#FFEBEA",
|
|
148
|
+
100: "#FFDFDE",
|
|
149
|
+
200: "#FECFCE",
|
|
150
|
+
300: "#FCBDBC",
|
|
151
|
+
400: "#F8A4A4",
|
|
152
|
+
500: "#E48687",
|
|
153
|
+
600: "#BA6D6D",
|
|
154
|
+
700: "#8D5151",
|
|
155
|
+
800: "#643838",
|
|
156
|
+
850: "#4B2929",
|
|
157
|
+
900: "#351B1B",
|
|
158
|
+
950: "#241111",
|
|
159
|
+
1e3: "#150808"
|
|
160
|
+
};
|
|
161
|
+
var lilac = {
|
|
162
|
+
25: "#F8F5FF",
|
|
163
|
+
50: "#F2EDFF",
|
|
164
|
+
100: "#EAE4F9",
|
|
165
|
+
200: "#DFD8EE",
|
|
166
|
+
300: "#D2CBE1",
|
|
167
|
+
400: "#C1BACF",
|
|
168
|
+
500: "#A7A1B5",
|
|
169
|
+
600: "#888296",
|
|
170
|
+
700: "#676174",
|
|
171
|
+
800: "#4A415A",
|
|
172
|
+
850: "#382E4A",
|
|
173
|
+
900: "#281C3C",
|
|
174
|
+
950: "#1C0E30",
|
|
175
|
+
1e3: "#110225"
|
|
176
|
+
};
|
|
177
|
+
var aqua = {
|
|
178
|
+
100: "#C7F1F5",
|
|
179
|
+
200: "#ACE3E9",
|
|
180
|
+
300: "#89D2DB",
|
|
181
|
+
400: "#57BEC9",
|
|
182
|
+
500: "#00A6B3",
|
|
183
|
+
600: "#00858F",
|
|
184
|
+
700: "#00636B",
|
|
185
|
+
800: "#004349",
|
|
186
|
+
900: "#05292D",
|
|
187
|
+
950: "#081B1D",
|
|
188
|
+
980: "#060E0F"
|
|
189
|
+
};
|
|
145
190
|
|
|
146
191
|
// src/recipe.ts
|
|
147
|
-
var THEME_BASES = [
|
|
192
|
+
var THEME_BASES = [
|
|
193
|
+
"base",
|
|
194
|
+
"muted",
|
|
195
|
+
"outdoor",
|
|
196
|
+
"decimal",
|
|
197
|
+
"blueprint",
|
|
198
|
+
"blush",
|
|
199
|
+
"orchid",
|
|
200
|
+
"canopy",
|
|
201
|
+
"lagoon"
|
|
202
|
+
];
|
|
148
203
|
var RETIRED_BASES = {
|
|
149
204
|
relief: "outdoor",
|
|
150
205
|
street: "base"
|
|
@@ -251,6 +306,9 @@ var STOCK_RAMPS = {
|
|
|
251
306
|
mist,
|
|
252
307
|
jade,
|
|
253
308
|
cobalt,
|
|
309
|
+
rose,
|
|
310
|
+
lilac,
|
|
311
|
+
aqua,
|
|
254
312
|
ember
|
|
255
313
|
};
|
|
256
314
|
function buildRecipes(r) {
|
|
@@ -258,10 +316,10 @@ function buildRecipes(r) {
|
|
|
258
316
|
background: r.paper[100],
|
|
259
317
|
earth: r.paper[25],
|
|
260
318
|
water: r.sky[200],
|
|
261
|
-
parkA: r.verdant[
|
|
262
|
-
parkB: r.verdant[
|
|
263
|
-
woodA: r.verdant[
|
|
264
|
-
woodB: r.verdant[
|
|
319
|
+
parkA: r.verdant[200],
|
|
320
|
+
parkB: r.verdant[300],
|
|
321
|
+
woodA: r.verdant[200],
|
|
322
|
+
woodB: r.verdant[300],
|
|
265
323
|
scrubA: r.verdant[200],
|
|
266
324
|
scrubB: r.verdant[300],
|
|
267
325
|
sand: r.sandstone[200],
|
|
@@ -325,7 +383,7 @@ function buildRecipes(r) {
|
|
|
325
383
|
farmland: r.verdant[100],
|
|
326
384
|
glacier: r.paper[25],
|
|
327
385
|
scrub: r.verdant[200],
|
|
328
|
-
forest: r.verdant[
|
|
386
|
+
forest: r.verdant[300]
|
|
329
387
|
}
|
|
330
388
|
};
|
|
331
389
|
const BASE_DARK = {
|
|
@@ -999,16 +1057,623 @@ function buildRecipes(r) {
|
|
|
999
1057
|
forest: r.cobalt[600]
|
|
1000
1058
|
}
|
|
1001
1059
|
};
|
|
1060
|
+
const BLUSH_LIGHT = {
|
|
1061
|
+
background: r.ember[200],
|
|
1062
|
+
earth: r.rose[300],
|
|
1063
|
+
water: r.ember[200],
|
|
1064
|
+
parkA: r.verdant[300],
|
|
1065
|
+
parkB: r.verdant[400],
|
|
1066
|
+
woodA: r.verdant[300],
|
|
1067
|
+
woodB: r.verdant[400],
|
|
1068
|
+
scrubA: r.sandstone[200],
|
|
1069
|
+
scrubB: r.sandstone[300],
|
|
1070
|
+
sand: r.sandstone[200],
|
|
1071
|
+
beach: r.sandstone[100],
|
|
1072
|
+
glacier: r.rose[100],
|
|
1073
|
+
institutional: r.rose[200],
|
|
1074
|
+
pedestrian: r.lilac[200],
|
|
1075
|
+
aerodrome: r.rose[200],
|
|
1076
|
+
runway: r.ember[200],
|
|
1077
|
+
pier: r.sandstone[300],
|
|
1078
|
+
buildings: r.rose[500],
|
|
1079
|
+
railway: r.sandstone[100],
|
|
1080
|
+
boundaries: r.rose[700],
|
|
1081
|
+
roads: {
|
|
1082
|
+
other: r.ember[200],
|
|
1083
|
+
otherCasing: r.rose[300],
|
|
1084
|
+
minor: r.ember[200],
|
|
1085
|
+
minorCasing: r.rose[300],
|
|
1086
|
+
service: r.ember[200],
|
|
1087
|
+
serviceCasing: r.rose[300],
|
|
1088
|
+
major: r.ember[200],
|
|
1089
|
+
majorCasing: r.rose[400],
|
|
1090
|
+
highway: "#FFFFFF",
|
|
1091
|
+
highwayCasing: r.rose[400],
|
|
1092
|
+
link: r.ember[200],
|
|
1093
|
+
linkCasing: r.rose[400]
|
|
1094
|
+
},
|
|
1095
|
+
tunnelFill: r.rose[200],
|
|
1096
|
+
tunnelCasing: r.rose[300],
|
|
1097
|
+
bridgeCasing: r.rose[500],
|
|
1098
|
+
labels: {
|
|
1099
|
+
city: r.paper[1e3],
|
|
1100
|
+
cityHalo: r.rose[25],
|
|
1101
|
+
state: r.rose[800],
|
|
1102
|
+
stateHalo: r.rose[25],
|
|
1103
|
+
country: r.rose[800],
|
|
1104
|
+
subplace: r.rose[700],
|
|
1105
|
+
subplaceHalo: r.rose[25],
|
|
1106
|
+
address: r.rose[800],
|
|
1107
|
+
addressHalo: r.rose[25],
|
|
1108
|
+
roadMinor: r.rose[800],
|
|
1109
|
+
roadMinorHalo: r.rose[25],
|
|
1110
|
+
roadMajor: r.rose[850],
|
|
1111
|
+
roadMajorHalo: r.rose[25],
|
|
1112
|
+
ocean: r.ember[700]
|
|
1113
|
+
},
|
|
1114
|
+
pois: {
|
|
1115
|
+
blue: r.cobalt[700],
|
|
1116
|
+
green: r.verdant[700],
|
|
1117
|
+
lapis: r.cobalt[700],
|
|
1118
|
+
pink: r.rose[700],
|
|
1119
|
+
red: r.rose[700],
|
|
1120
|
+
slategray: r.rose[700],
|
|
1121
|
+
tangerine: r.ember[700],
|
|
1122
|
+
turquoise: r.sky[700]
|
|
1123
|
+
},
|
|
1124
|
+
landcover: {
|
|
1125
|
+
grassland: r.verdant[300],
|
|
1126
|
+
barren: r.sandstone[200],
|
|
1127
|
+
urban_area: r.rose[400],
|
|
1128
|
+
farmland: r.verdant[200],
|
|
1129
|
+
glacier: r.rose[100],
|
|
1130
|
+
scrub: r.verdant[200],
|
|
1131
|
+
forest: r.verdant[400]
|
|
1132
|
+
}
|
|
1133
|
+
};
|
|
1134
|
+
const BLUSH_DARK = {
|
|
1135
|
+
background: r.rose[1e3],
|
|
1136
|
+
earth: r.rose[900],
|
|
1137
|
+
water: r.rose[1e3],
|
|
1138
|
+
parkA: r.verdant[800],
|
|
1139
|
+
parkB: r.verdant[700],
|
|
1140
|
+
woodA: r.verdant[800],
|
|
1141
|
+
woodB: r.verdant[700],
|
|
1142
|
+
scrubA: r.verdant[900],
|
|
1143
|
+
scrubB: r.verdant[800],
|
|
1144
|
+
sand: r.sandstone[500],
|
|
1145
|
+
beach: r.sandstone[400],
|
|
1146
|
+
glacier: r.rose[700],
|
|
1147
|
+
institutional: r.rose[850],
|
|
1148
|
+
pedestrian: r.lilac[900],
|
|
1149
|
+
aerodrome: r.rose[850],
|
|
1150
|
+
runway: r.rose[800],
|
|
1151
|
+
pier: r.sandstone[500],
|
|
1152
|
+
buildings: r.rose[700],
|
|
1153
|
+
railway: r.rose[700],
|
|
1154
|
+
boundaries: r.rose[500],
|
|
1155
|
+
roads: {
|
|
1156
|
+
other: r.rose[850],
|
|
1157
|
+
otherCasing: r.rose[1e3],
|
|
1158
|
+
minor: r.rose[800],
|
|
1159
|
+
minorCasing: r.rose[1e3],
|
|
1160
|
+
service: r.rose[850],
|
|
1161
|
+
serviceCasing: r.rose[1e3],
|
|
1162
|
+
major: r.rose[700],
|
|
1163
|
+
majorCasing: r.rose[1e3],
|
|
1164
|
+
highway: r.rose[600],
|
|
1165
|
+
highwayCasing: r.rose[1e3],
|
|
1166
|
+
link: r.rose[700],
|
|
1167
|
+
linkCasing: r.rose[1e3]
|
|
1168
|
+
},
|
|
1169
|
+
tunnelFill: r.rose[900],
|
|
1170
|
+
tunnelCasing: r.rose[1e3],
|
|
1171
|
+
bridgeCasing: r.rose[1e3],
|
|
1172
|
+
labels: {
|
|
1173
|
+
city: r.rose[100],
|
|
1174
|
+
cityHalo: r.rose[1e3],
|
|
1175
|
+
state: r.rose[500],
|
|
1176
|
+
stateHalo: r.rose[1e3],
|
|
1177
|
+
country: r.rose[500],
|
|
1178
|
+
subplace: r.rose[500],
|
|
1179
|
+
subplaceHalo: r.rose[1e3],
|
|
1180
|
+
address: r.rose[500],
|
|
1181
|
+
addressHalo: r.rose[1e3],
|
|
1182
|
+
roadMinor: r.rose[500],
|
|
1183
|
+
roadMinorHalo: r.rose[1e3],
|
|
1184
|
+
roadMajor: r.rose[400],
|
|
1185
|
+
roadMajorHalo: r.rose[1e3],
|
|
1186
|
+
ocean: r.ember[400]
|
|
1187
|
+
},
|
|
1188
|
+
pois: {
|
|
1189
|
+
blue: r.cobalt[400],
|
|
1190
|
+
green: r.verdant[400],
|
|
1191
|
+
lapis: r.cobalt[400],
|
|
1192
|
+
pink: r.rose[400],
|
|
1193
|
+
red: r.rose[400],
|
|
1194
|
+
slategray: r.rose[500],
|
|
1195
|
+
tangerine: r.ember[400],
|
|
1196
|
+
turquoise: r.sky[400]
|
|
1197
|
+
},
|
|
1198
|
+
landcover: {
|
|
1199
|
+
grassland: r.verdant[800],
|
|
1200
|
+
barren: r.sandstone[500],
|
|
1201
|
+
urban_area: r.rose[900],
|
|
1202
|
+
farmland: r.verdant[900],
|
|
1203
|
+
glacier: r.rose[700],
|
|
1204
|
+
scrub: r.verdant[900],
|
|
1205
|
+
forest: r.verdant[700]
|
|
1206
|
+
}
|
|
1207
|
+
};
|
|
1208
|
+
const ORCHID_LIGHT = {
|
|
1209
|
+
background: r.lilac[25],
|
|
1210
|
+
earth: r.lilac[200],
|
|
1211
|
+
water: r.sky[300],
|
|
1212
|
+
parkA: r.aqua[300],
|
|
1213
|
+
parkB: r.aqua[400],
|
|
1214
|
+
woodA: r.jade[500],
|
|
1215
|
+
woodB: r.jade[600],
|
|
1216
|
+
scrubA: r.sandstone[300],
|
|
1217
|
+
scrubB: r.sandstone[400],
|
|
1218
|
+
sand: r.sandstone[300],
|
|
1219
|
+
beach: r.sandstone[200],
|
|
1220
|
+
glacier: r.lilac[100],
|
|
1221
|
+
institutional: r.lilac[300],
|
|
1222
|
+
pedestrian: r.lilac[300],
|
|
1223
|
+
aerodrome: r.sandstone[100],
|
|
1224
|
+
runway: r.lilac[25],
|
|
1225
|
+
pier: r.cobalt[500],
|
|
1226
|
+
buildings: r.lilac[300],
|
|
1227
|
+
railway: r.lilac[400],
|
|
1228
|
+
boundaries: r.cobalt[900],
|
|
1229
|
+
roads: {
|
|
1230
|
+
other: "#FFFFFF",
|
|
1231
|
+
otherCasing: r.lilac[200],
|
|
1232
|
+
minor: "#FFFFFF",
|
|
1233
|
+
minorCasing: r.lilac[200],
|
|
1234
|
+
service: "#FFFFFF",
|
|
1235
|
+
serviceCasing: r.lilac[200],
|
|
1236
|
+
major: "#FFFFFF",
|
|
1237
|
+
majorCasing: r.lilac[300],
|
|
1238
|
+
highway: "#FFFFFF",
|
|
1239
|
+
highwayCasing: r.lilac[400],
|
|
1240
|
+
link: "#FFFFFF",
|
|
1241
|
+
linkCasing: r.lilac[300]
|
|
1242
|
+
},
|
|
1243
|
+
tunnelFill: r.lilac[100],
|
|
1244
|
+
tunnelCasing: r.lilac[200],
|
|
1245
|
+
bridgeCasing: r.lilac[500],
|
|
1246
|
+
labels: {
|
|
1247
|
+
city: r.cobalt[950],
|
|
1248
|
+
cityHalo: r.lilac[25],
|
|
1249
|
+
state: r.lilac[700],
|
|
1250
|
+
stateHalo: r.lilac[25],
|
|
1251
|
+
country: r.lilac[850],
|
|
1252
|
+
subplace: r.lilac[700],
|
|
1253
|
+
subplaceHalo: r.lilac[25],
|
|
1254
|
+
address: r.lilac[700],
|
|
1255
|
+
addressHalo: r.lilac[25],
|
|
1256
|
+
roadMinor: r.lilac[800],
|
|
1257
|
+
roadMinorHalo: r.lilac[25],
|
|
1258
|
+
roadMajor: r.lilac[850],
|
|
1259
|
+
roadMajorHalo: r.lilac[25],
|
|
1260
|
+
ocean: r.cobalt[800]
|
|
1261
|
+
},
|
|
1262
|
+
pois: {
|
|
1263
|
+
blue: r.cobalt[700],
|
|
1264
|
+
green: r.jade[700],
|
|
1265
|
+
lapis: r.cobalt[700],
|
|
1266
|
+
pink: r.rose[600],
|
|
1267
|
+
red: r.rose[700],
|
|
1268
|
+
slategray: r.lilac[700],
|
|
1269
|
+
tangerine: r.ember[700],
|
|
1270
|
+
turquoise: r.aqua[700]
|
|
1271
|
+
},
|
|
1272
|
+
landcover: {
|
|
1273
|
+
grassland: r.jade[400],
|
|
1274
|
+
barren: r.sandstone[300],
|
|
1275
|
+
urban_area: r.lilac[200],
|
|
1276
|
+
farmland: r.jade[500],
|
|
1277
|
+
glacier: r.lilac[100],
|
|
1278
|
+
scrub: r.verdant[400],
|
|
1279
|
+
forest: r.jade[500]
|
|
1280
|
+
}
|
|
1281
|
+
};
|
|
1282
|
+
const ORCHID_DARK = {
|
|
1283
|
+
background: r.lilac[1e3],
|
|
1284
|
+
earth: r.lilac[900],
|
|
1285
|
+
water: r.sky[980],
|
|
1286
|
+
parkA: r.aqua[800],
|
|
1287
|
+
parkB: r.aqua[700],
|
|
1288
|
+
woodA: r.jade[800],
|
|
1289
|
+
woodB: r.jade[700],
|
|
1290
|
+
scrubA: r.sandstone[500],
|
|
1291
|
+
scrubB: r.sandstone[500],
|
|
1292
|
+
sand: r.sandstone[500],
|
|
1293
|
+
beach: r.sandstone[400],
|
|
1294
|
+
glacier: r.lilac[700],
|
|
1295
|
+
institutional: r.lilac[850],
|
|
1296
|
+
pedestrian: r.lilac[850],
|
|
1297
|
+
aerodrome: r.lilac[850],
|
|
1298
|
+
runway: r.lilac[800],
|
|
1299
|
+
pier: r.cobalt[600],
|
|
1300
|
+
buildings: r.lilac[800],
|
|
1301
|
+
railway: r.lilac[700],
|
|
1302
|
+
boundaries: r.cobalt[400],
|
|
1303
|
+
roads: {
|
|
1304
|
+
other: r.lilac[850],
|
|
1305
|
+
otherCasing: r.lilac[1e3],
|
|
1306
|
+
minor: r.lilac[800],
|
|
1307
|
+
minorCasing: r.lilac[1e3],
|
|
1308
|
+
service: r.lilac[850],
|
|
1309
|
+
serviceCasing: r.lilac[1e3],
|
|
1310
|
+
major: r.lilac[700],
|
|
1311
|
+
majorCasing: r.lilac[1e3],
|
|
1312
|
+
highway: r.lilac[600],
|
|
1313
|
+
highwayCasing: r.lilac[1e3],
|
|
1314
|
+
link: r.lilac[700],
|
|
1315
|
+
linkCasing: r.lilac[1e3]
|
|
1316
|
+
},
|
|
1317
|
+
tunnelFill: r.lilac[900],
|
|
1318
|
+
tunnelCasing: r.lilac[1e3],
|
|
1319
|
+
bridgeCasing: r.lilac[1e3],
|
|
1320
|
+
labels: {
|
|
1321
|
+
city: r.lilac[100],
|
|
1322
|
+
cityHalo: r.lilac[1e3],
|
|
1323
|
+
state: r.lilac[500],
|
|
1324
|
+
stateHalo: r.lilac[1e3],
|
|
1325
|
+
country: r.lilac[500],
|
|
1326
|
+
subplace: r.lilac[500],
|
|
1327
|
+
subplaceHalo: r.lilac[1e3],
|
|
1328
|
+
address: r.lilac[500],
|
|
1329
|
+
addressHalo: r.lilac[1e3],
|
|
1330
|
+
roadMinor: r.lilac[500],
|
|
1331
|
+
roadMinorHalo: r.lilac[1e3],
|
|
1332
|
+
roadMajor: r.lilac[400],
|
|
1333
|
+
roadMajorHalo: r.lilac[1e3],
|
|
1334
|
+
ocean: r.sky[400]
|
|
1335
|
+
},
|
|
1336
|
+
pois: {
|
|
1337
|
+
blue: r.cobalt[400],
|
|
1338
|
+
green: r.jade[400],
|
|
1339
|
+
lapis: r.cobalt[400],
|
|
1340
|
+
pink: r.rose[400],
|
|
1341
|
+
red: r.rose[400],
|
|
1342
|
+
slategray: r.lilac[500],
|
|
1343
|
+
tangerine: r.ember[400],
|
|
1344
|
+
turquoise: r.aqua[400]
|
|
1345
|
+
},
|
|
1346
|
+
landcover: {
|
|
1347
|
+
grassland: r.jade[800],
|
|
1348
|
+
barren: r.sandstone[500],
|
|
1349
|
+
urban_area: r.lilac[900],
|
|
1350
|
+
farmland: r.jade[900],
|
|
1351
|
+
glacier: r.lilac[700],
|
|
1352
|
+
scrub: r.verdant[800],
|
|
1353
|
+
forest: r.jade[800]
|
|
1354
|
+
}
|
|
1355
|
+
};
|
|
1356
|
+
const CANOPY_LIGHT = {
|
|
1357
|
+
background: r.verdant[100],
|
|
1358
|
+
earth: r.sandstone[200],
|
|
1359
|
+
water: r.cobalt[600],
|
|
1360
|
+
parkA: r.verdant[800],
|
|
1361
|
+
parkB: r.verdant[700],
|
|
1362
|
+
woodA: r.verdant[600],
|
|
1363
|
+
woodB: r.verdant[700],
|
|
1364
|
+
scrubA: r.sandstone[500],
|
|
1365
|
+
scrubB: r.sandstone[400],
|
|
1366
|
+
sand: r.sandstone[200],
|
|
1367
|
+
beach: r.sandstone[100],
|
|
1368
|
+
glacier: r.paper[25],
|
|
1369
|
+
institutional: r.rose[200],
|
|
1370
|
+
pedestrian: r.rose[100],
|
|
1371
|
+
aerodrome: r.lilac[500],
|
|
1372
|
+
runway: r.paper[1e3],
|
|
1373
|
+
pier: r.sky[300],
|
|
1374
|
+
buildings: r.ember[700],
|
|
1375
|
+
railway: r.paper[950],
|
|
1376
|
+
boundaries: r.graphite[300],
|
|
1377
|
+
roads: {
|
|
1378
|
+
other: r.rose[1e3],
|
|
1379
|
+
otherCasing: r.sandstone[200],
|
|
1380
|
+
minor: r.rose[1e3],
|
|
1381
|
+
minorCasing: r.sandstone[200],
|
|
1382
|
+
service: r.rose[1e3],
|
|
1383
|
+
serviceCasing: r.sandstone[200],
|
|
1384
|
+
major: r.rose[1e3],
|
|
1385
|
+
majorCasing: r.sandstone[100],
|
|
1386
|
+
highway: r.rose[1e3],
|
|
1387
|
+
highwayCasing: r.sandstone[100],
|
|
1388
|
+
link: r.rose[1e3],
|
|
1389
|
+
linkCasing: r.sandstone[100]
|
|
1390
|
+
},
|
|
1391
|
+
tunnelFill: r.rose[900],
|
|
1392
|
+
tunnelCasing: r.sandstone[200],
|
|
1393
|
+
bridgeCasing: r.sandstone[100],
|
|
1394
|
+
labels: {
|
|
1395
|
+
city: r.paper[1e3],
|
|
1396
|
+
cityHalo: r.sandstone[100],
|
|
1397
|
+
state: r.paper[800],
|
|
1398
|
+
stateHalo: r.sandstone[100],
|
|
1399
|
+
country: r.paper[800],
|
|
1400
|
+
subplace: r.paper[700],
|
|
1401
|
+
subplaceHalo: r.sandstone[100],
|
|
1402
|
+
address: r.paper[800],
|
|
1403
|
+
addressHalo: r.sandstone[100],
|
|
1404
|
+
roadMinor: r.paper[800],
|
|
1405
|
+
roadMinorHalo: r.sandstone[100],
|
|
1406
|
+
roadMajor: r.paper[900],
|
|
1407
|
+
roadMajorHalo: r.sandstone[100],
|
|
1408
|
+
ocean: r.cobalt[25]
|
|
1409
|
+
},
|
|
1410
|
+
pois: {
|
|
1411
|
+
blue: r.cobalt[700],
|
|
1412
|
+
green: r.verdant[700],
|
|
1413
|
+
lapis: r.cobalt[700],
|
|
1414
|
+
pink: r.rose[600],
|
|
1415
|
+
red: r.rose[700],
|
|
1416
|
+
slategray: r.paper[700],
|
|
1417
|
+
tangerine: r.ember[700],
|
|
1418
|
+
turquoise: r.sky[700]
|
|
1419
|
+
},
|
|
1420
|
+
landcover: {
|
|
1421
|
+
grassland: r.verdant[500],
|
|
1422
|
+
barren: r.sandstone[400],
|
|
1423
|
+
urban_area: r.rose[600],
|
|
1424
|
+
farmland: r.verdant[600],
|
|
1425
|
+
glacier: r.paper[25],
|
|
1426
|
+
scrub: r.sandstone[500],
|
|
1427
|
+
forest: r.verdant[800]
|
|
1428
|
+
}
|
|
1429
|
+
};
|
|
1430
|
+
const CANOPY_DARK = {
|
|
1431
|
+
background: r.paper[950],
|
|
1432
|
+
earth: r.paper[900],
|
|
1433
|
+
water: r.cobalt[950],
|
|
1434
|
+
parkA: r.verdant[900],
|
|
1435
|
+
parkB: r.verdant[800],
|
|
1436
|
+
woodA: r.verdant[800],
|
|
1437
|
+
woodB: r.verdant[800],
|
|
1438
|
+
scrubA: r.paper[850],
|
|
1439
|
+
scrubB: r.paper[850],
|
|
1440
|
+
sand: r.sandstone[500],
|
|
1441
|
+
beach: r.sandstone[400],
|
|
1442
|
+
glacier: r.paper[700],
|
|
1443
|
+
institutional: r.paper[850],
|
|
1444
|
+
pedestrian: r.rose[900],
|
|
1445
|
+
aerodrome: r.lilac[850],
|
|
1446
|
+
runway: r.paper[800],
|
|
1447
|
+
pier: r.sky[700],
|
|
1448
|
+
buildings: r.ember[700],
|
|
1449
|
+
railway: r.paper[700],
|
|
1450
|
+
boundaries: r.graphite[600],
|
|
1451
|
+
roads: {
|
|
1452
|
+
other: r.sandstone[500],
|
|
1453
|
+
otherCasing: r.paper[1e3],
|
|
1454
|
+
minor: r.sandstone[400],
|
|
1455
|
+
minorCasing: r.paper[1e3],
|
|
1456
|
+
service: r.sandstone[500],
|
|
1457
|
+
serviceCasing: r.paper[1e3],
|
|
1458
|
+
major: r.sandstone[300],
|
|
1459
|
+
majorCasing: r.paper[1e3],
|
|
1460
|
+
highway: r.sandstone[200],
|
|
1461
|
+
highwayCasing: r.paper[1e3],
|
|
1462
|
+
link: r.sandstone[300],
|
|
1463
|
+
linkCasing: r.paper[1e3]
|
|
1464
|
+
},
|
|
1465
|
+
tunnelFill: r.paper[900],
|
|
1466
|
+
tunnelCasing: r.paper[1e3],
|
|
1467
|
+
bridgeCasing: r.paper[1e3],
|
|
1468
|
+
labels: {
|
|
1469
|
+
city: r.sandstone[100],
|
|
1470
|
+
cityHalo: r.paper[1e3],
|
|
1471
|
+
state: r.sandstone[300],
|
|
1472
|
+
stateHalo: r.paper[1e3],
|
|
1473
|
+
country: r.sandstone[300],
|
|
1474
|
+
subplace: r.sandstone[300],
|
|
1475
|
+
subplaceHalo: r.paper[1e3],
|
|
1476
|
+
address: r.sandstone[300],
|
|
1477
|
+
addressHalo: r.paper[1e3],
|
|
1478
|
+
roadMinor: r.sandstone[300],
|
|
1479
|
+
roadMinorHalo: r.paper[1e3],
|
|
1480
|
+
roadMajor: r.sandstone[200],
|
|
1481
|
+
roadMajorHalo: r.paper[1e3],
|
|
1482
|
+
ocean: r.cobalt[300]
|
|
1483
|
+
},
|
|
1484
|
+
pois: {
|
|
1485
|
+
blue: r.cobalt[400],
|
|
1486
|
+
green: r.verdant[400],
|
|
1487
|
+
lapis: r.cobalt[400],
|
|
1488
|
+
pink: r.rose[400],
|
|
1489
|
+
red: r.rose[400],
|
|
1490
|
+
slategray: r.sandstone[300],
|
|
1491
|
+
tangerine: r.ember[400],
|
|
1492
|
+
turquoise: r.sky[400]
|
|
1493
|
+
},
|
|
1494
|
+
landcover: {
|
|
1495
|
+
grassland: r.verdant[900],
|
|
1496
|
+
barren: r.sandstone[500],
|
|
1497
|
+
urban_area: r.rose[900],
|
|
1498
|
+
farmland: r.verdant[900],
|
|
1499
|
+
glacier: r.paper[700],
|
|
1500
|
+
scrub: r.paper[850],
|
|
1501
|
+
forest: r.verdant[900]
|
|
1502
|
+
}
|
|
1503
|
+
};
|
|
1504
|
+
const LAGOON_LIGHT = {
|
|
1505
|
+
background: r.verdant[100],
|
|
1506
|
+
earth: r.verdant[100],
|
|
1507
|
+
water: r.wave[200],
|
|
1508
|
+
parkA: r.aqua[300],
|
|
1509
|
+
parkB: r.aqua[400],
|
|
1510
|
+
woodA: r.wave[300],
|
|
1511
|
+
woodB: r.wave[400],
|
|
1512
|
+
scrubA: r.verdant[300],
|
|
1513
|
+
scrubB: r.verdant[400],
|
|
1514
|
+
sand: r.sandstone[200],
|
|
1515
|
+
beach: r.verdant[100],
|
|
1516
|
+
glacier: r.graphite[50],
|
|
1517
|
+
institutional: r.verdant[200],
|
|
1518
|
+
pedestrian: r.wave[100],
|
|
1519
|
+
aerodrome: r.paper[200],
|
|
1520
|
+
runway: r.verdant[100],
|
|
1521
|
+
pier: r.sky[300],
|
|
1522
|
+
buildings: r.graphite[100],
|
|
1523
|
+
railway: r.graphite[25],
|
|
1524
|
+
boundaries: r.graphite[500],
|
|
1525
|
+
roads: {
|
|
1526
|
+
other: "#FFFFFF",
|
|
1527
|
+
otherCasing: r.verdant[200],
|
|
1528
|
+
minor: "#FFFFFF",
|
|
1529
|
+
minorCasing: r.verdant[200],
|
|
1530
|
+
service: "#FFFFFF",
|
|
1531
|
+
serviceCasing: r.verdant[200],
|
|
1532
|
+
major: "#FFFFFF",
|
|
1533
|
+
majorCasing: r.verdant[300],
|
|
1534
|
+
highway: "#FFFFFF",
|
|
1535
|
+
highwayCasing: r.verdant[300],
|
|
1536
|
+
link: "#FFFFFF",
|
|
1537
|
+
linkCasing: r.verdant[300]
|
|
1538
|
+
},
|
|
1539
|
+
tunnelFill: r.graphite[50],
|
|
1540
|
+
tunnelCasing: r.verdant[200],
|
|
1541
|
+
bridgeCasing: r.graphite[400],
|
|
1542
|
+
labels: {
|
|
1543
|
+
city: r.graphite[800],
|
|
1544
|
+
cityHalo: r.verdant[100],
|
|
1545
|
+
state: r.graphite[700],
|
|
1546
|
+
stateHalo: r.verdant[100],
|
|
1547
|
+
country: r.graphite[700],
|
|
1548
|
+
subplace: r.graphite[700],
|
|
1549
|
+
subplaceHalo: r.verdant[100],
|
|
1550
|
+
address: r.graphite[700],
|
|
1551
|
+
addressHalo: r.verdant[100],
|
|
1552
|
+
roadMinor: r.graphite[700],
|
|
1553
|
+
roadMinorHalo: r.verdant[100],
|
|
1554
|
+
roadMajor: r.graphite[800],
|
|
1555
|
+
roadMajorHalo: r.verdant[100],
|
|
1556
|
+
ocean: r.wave[800]
|
|
1557
|
+
},
|
|
1558
|
+
pois: {
|
|
1559
|
+
blue: r.wave[700],
|
|
1560
|
+
green: r.verdant[700],
|
|
1561
|
+
lapis: r.sky[700],
|
|
1562
|
+
pink: r.rose[600],
|
|
1563
|
+
red: r.rose[700],
|
|
1564
|
+
slategray: r.graphite[700],
|
|
1565
|
+
tangerine: r.sandstone[500],
|
|
1566
|
+
turquoise: r.aqua[700]
|
|
1567
|
+
},
|
|
1568
|
+
landcover: {
|
|
1569
|
+
grassland: r.verdant[400],
|
|
1570
|
+
barren: r.sandstone[200],
|
|
1571
|
+
urban_area: r.verdant[100],
|
|
1572
|
+
farmland: r.verdant[300],
|
|
1573
|
+
glacier: r.graphite[50],
|
|
1574
|
+
scrub: r.verdant[300],
|
|
1575
|
+
forest: r.wave[300]
|
|
1576
|
+
}
|
|
1577
|
+
};
|
|
1578
|
+
const LAGOON_DARK = {
|
|
1579
|
+
background: r.verdant[900],
|
|
1580
|
+
earth: r.verdant[900],
|
|
1581
|
+
water: r.wave[980],
|
|
1582
|
+
parkA: r.aqua[800],
|
|
1583
|
+
parkB: r.aqua[700],
|
|
1584
|
+
woodA: r.wave[800],
|
|
1585
|
+
woodB: r.wave[700],
|
|
1586
|
+
scrubA: r.verdant[800],
|
|
1587
|
+
scrubB: r.verdant[800],
|
|
1588
|
+
sand: r.sandstone[500],
|
|
1589
|
+
beach: r.verdant[800],
|
|
1590
|
+
glacier: r.graphite[700],
|
|
1591
|
+
institutional: r.verdant[800],
|
|
1592
|
+
pedestrian: r.wave[900],
|
|
1593
|
+
aerodrome: r.graphite[800],
|
|
1594
|
+
runway: r.verdant[800],
|
|
1595
|
+
pier: r.sky[600],
|
|
1596
|
+
buildings: r.verdant[800],
|
|
1597
|
+
railway: r.graphite[700],
|
|
1598
|
+
boundaries: r.graphite[600],
|
|
1599
|
+
roads: {
|
|
1600
|
+
other: r.verdant[700],
|
|
1601
|
+
otherCasing: r.verdant[900],
|
|
1602
|
+
minor: r.verdant[600],
|
|
1603
|
+
minorCasing: r.verdant[900],
|
|
1604
|
+
service: r.verdant[700],
|
|
1605
|
+
serviceCasing: r.verdant[900],
|
|
1606
|
+
major: r.verdant[500],
|
|
1607
|
+
majorCasing: r.verdant[900],
|
|
1608
|
+
highway: r.verdant[400],
|
|
1609
|
+
highwayCasing: r.verdant[900],
|
|
1610
|
+
link: r.verdant[500],
|
|
1611
|
+
linkCasing: r.verdant[900]
|
|
1612
|
+
},
|
|
1613
|
+
tunnelFill: r.verdant[800],
|
|
1614
|
+
tunnelCasing: r.verdant[900],
|
|
1615
|
+
bridgeCasing: r.verdant[900],
|
|
1616
|
+
labels: {
|
|
1617
|
+
city: r.verdant[100],
|
|
1618
|
+
cityHalo: r.verdant[900],
|
|
1619
|
+
state: r.verdant[300],
|
|
1620
|
+
stateHalo: r.verdant[900],
|
|
1621
|
+
country: r.verdant[300],
|
|
1622
|
+
subplace: r.verdant[300],
|
|
1623
|
+
subplaceHalo: r.verdant[900],
|
|
1624
|
+
address: r.verdant[300],
|
|
1625
|
+
addressHalo: r.verdant[900],
|
|
1626
|
+
roadMinor: r.verdant[300],
|
|
1627
|
+
roadMinorHalo: r.verdant[900],
|
|
1628
|
+
roadMajor: r.verdant[200],
|
|
1629
|
+
roadMajorHalo: r.verdant[900],
|
|
1630
|
+
ocean: r.wave[400]
|
|
1631
|
+
},
|
|
1632
|
+
pois: {
|
|
1633
|
+
blue: r.wave[400],
|
|
1634
|
+
green: r.verdant[400],
|
|
1635
|
+
lapis: r.sky[400],
|
|
1636
|
+
pink: r.rose[400],
|
|
1637
|
+
red: r.rose[400],
|
|
1638
|
+
slategray: r.graphite[400],
|
|
1639
|
+
tangerine: r.sandstone[400],
|
|
1640
|
+
turquoise: r.aqua[400]
|
|
1641
|
+
},
|
|
1642
|
+
landcover: {
|
|
1643
|
+
grassland: r.verdant[800],
|
|
1644
|
+
barren: r.sandstone[500],
|
|
1645
|
+
urban_area: r.verdant[900],
|
|
1646
|
+
farmland: r.verdant[800],
|
|
1647
|
+
glacier: r.graphite[700],
|
|
1648
|
+
scrub: r.verdant[800],
|
|
1649
|
+
forest: r.wave[800]
|
|
1650
|
+
}
|
|
1651
|
+
};
|
|
1002
1652
|
return {
|
|
1003
1653
|
base: { light: BASE_LIGHT, dark: BASE_DARK },
|
|
1004
1654
|
muted: { light: MUTED_LIGHT, dark: MUTED_DARK },
|
|
1005
1655
|
outdoor: { light: OUTDOOR_LIGHT, dark: OUTDOOR_DARK },
|
|
1006
1656
|
decimal: { light: DECIMAL_LIGHT, dark: DECIMAL_DARK },
|
|
1007
|
-
blueprint: { light: BLUEPRINT_LIGHT, dark: BLUEPRINT_DARK }
|
|
1657
|
+
blueprint: { light: BLUEPRINT_LIGHT, dark: BLUEPRINT_DARK },
|
|
1658
|
+
blush: { light: BLUSH_LIGHT, dark: BLUSH_DARK },
|
|
1659
|
+
orchid: { light: ORCHID_LIGHT, dark: ORCHID_DARK },
|
|
1660
|
+
canopy: { light: CANOPY_LIGHT, dark: CANOPY_DARK },
|
|
1661
|
+
lagoon: { light: LAGOON_LIGHT, dark: LAGOON_DARK }
|
|
1008
1662
|
};
|
|
1009
1663
|
}
|
|
1010
1664
|
var RECIPES = buildRecipes(STOCK_RAMPS);
|
|
1011
1665
|
|
|
1666
|
+
// src/doc.ts
|
|
1667
|
+
var LAYER_GROUPS = [
|
|
1668
|
+
"land",
|
|
1669
|
+
"water",
|
|
1670
|
+
"buildings",
|
|
1671
|
+
"roads",
|
|
1672
|
+
"boundaries",
|
|
1673
|
+
"buildings3d",
|
|
1674
|
+
"labels"
|
|
1675
|
+
];
|
|
1676
|
+
|
|
1012
1677
|
// src/validate.ts
|
|
1013
1678
|
var ThemeError = class extends Error {
|
|
1014
1679
|
detail;
|
|
@@ -1072,7 +1737,42 @@ function walkLeaf(value, colorKeys, bounds, path, errors) {
|
|
|
1072
1737
|
}
|
|
1073
1738
|
}
|
|
1074
1739
|
var HALF_KEYS = ["basemap", "marker", "route"];
|
|
1075
|
-
var DOC_KEYS = ["v", "name", "base", "seeds", "light", "dark"];
|
|
1740
|
+
var DOC_KEYS = ["v", "name", "base", "seeds", "layers", "light", "dark"];
|
|
1741
|
+
var LAYERS_KEYS = ["visible", "order"];
|
|
1742
|
+
var isLayerGroup = (v) => typeof v === "string" && LAYER_GROUPS.includes(v);
|
|
1743
|
+
function walkLayers(value, errors) {
|
|
1744
|
+
if (!isRecord(value)) {
|
|
1745
|
+
errors.push("layers: must be an object");
|
|
1746
|
+
return;
|
|
1747
|
+
}
|
|
1748
|
+
for (const key of Object.keys(value)) {
|
|
1749
|
+
if (!LAYERS_KEYS.includes(key)) errors.push(`layers.${key}: unknown field`);
|
|
1750
|
+
}
|
|
1751
|
+
if (value.visible !== void 0) {
|
|
1752
|
+
if (!isRecord(value.visible)) {
|
|
1753
|
+
errors.push("layers.visible: must be an object");
|
|
1754
|
+
} else {
|
|
1755
|
+
for (const [group, v] of Object.entries(value.visible)) {
|
|
1756
|
+
if (!isLayerGroup(group)) errors.push(`layers.visible.${group}: unknown layer group`);
|
|
1757
|
+
else if (typeof v !== "boolean") errors.push(`layers.visible.${group}: must be a boolean`);
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1761
|
+
if (value.order !== void 0) {
|
|
1762
|
+
const order = value.order;
|
|
1763
|
+
if (!Array.isArray(order)) {
|
|
1764
|
+
errors.push("layers.order: must be an array");
|
|
1765
|
+
} else {
|
|
1766
|
+
order.forEach((g, i) => {
|
|
1767
|
+
if (!isLayerGroup(g)) errors.push(`layers.order[${i}]: unknown layer group`);
|
|
1768
|
+
});
|
|
1769
|
+
const known = order.filter(isLayerGroup);
|
|
1770
|
+
if (new Set(known).size !== known.length || known.length !== LAYER_GROUPS.length) {
|
|
1771
|
+
errors.push(`layers.order: must list each of ${LAYER_GROUPS.join(", ")} exactly once`);
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
}
|
|
1775
|
+
}
|
|
1076
1776
|
var SEED_COLOR_KEYS = ["land", "water", "nature", "accent"];
|
|
1077
1777
|
var REQUIRED_SEED_KEYS = ["land", "water", "nature"];
|
|
1078
1778
|
function validateTheme(input) {
|
|
@@ -1101,6 +1801,7 @@ function validateTheme(input) {
|
|
|
1101
1801
|
}
|
|
1102
1802
|
}
|
|
1103
1803
|
}
|
|
1804
|
+
if (input.layers !== void 0) walkLayers(input.layers, errors);
|
|
1104
1805
|
const reference = RECIPES.base.light;
|
|
1105
1806
|
for (const mode of ["light", "dark"]) {
|
|
1106
1807
|
const half = input[mode];
|
|
@@ -1133,7 +1834,11 @@ var STYLE_THEMES = {
|
|
|
1133
1834
|
muted: { v: 1, name: "muted", base: "muted" },
|
|
1134
1835
|
outdoor: { v: 1, name: "outdoor", base: "outdoor" },
|
|
1135
1836
|
decimal: { v: 1, name: "decimal", base: "decimal" },
|
|
1136
|
-
blueprint: { v: 1, name: "blueprint", base: "blueprint" }
|
|
1837
|
+
blueprint: { v: 1, name: "blueprint", base: "blueprint" },
|
|
1838
|
+
blush: { v: 1, name: "blush", base: "blush" },
|
|
1839
|
+
orchid: { v: 1, name: "orchid", base: "orchid" },
|
|
1840
|
+
canopy: { v: 1, name: "canopy", base: "canopy" },
|
|
1841
|
+
lagoon: { v: 1, name: "lagoon", base: "lagoon" }
|
|
1137
1842
|
};
|
|
1138
1843
|
|
|
1139
1844
|
// src/oklch.ts
|
|
@@ -1381,6 +2086,9 @@ function generateTheme(base, seeds) {
|
|
|
1381
2086
|
graphite: reRamp(STOCK_RAMPS.graphite, seeds.land, MUTED_CHROMA_CAP),
|
|
1382
2087
|
jade: reRamp(STOCK_RAMPS.jade, seeds.land, CHROMA_CAP),
|
|
1383
2088
|
cobalt: reRamp(STOCK_RAMPS.cobalt, seeds.land, CHROMA_CAP),
|
|
2089
|
+
rose: reRamp(STOCK_RAMPS.rose, seeds.land, CHROMA_CAP),
|
|
2090
|
+
lilac: reRamp(STOCK_RAMPS.lilac, seeds.land, NEUTRAL_CHROMA_CAP),
|
|
2091
|
+
aqua: reRamp(STOCK_RAMPS.aqua, seeds.nature, CHROMA_CAP),
|
|
1384
2092
|
wave: reRamp(STOCK_RAMPS.wave, seeds.water, CHROMA_CAP),
|
|
1385
2093
|
sky: reRamp(STOCK_RAMPS.sky, seeds.water, CHROMA_CAP),
|
|
1386
2094
|
mist: reRamp(STOCK_RAMPS.mist, seeds.water, CHROMA_CAP),
|
|
@@ -1455,7 +2163,11 @@ var STYLE_ENCODE = {
|
|
|
1455
2163
|
muted: 1,
|
|
1456
2164
|
outdoor: 4,
|
|
1457
2165
|
decimal: 5,
|
|
1458
|
-
blueprint: 6
|
|
2166
|
+
blueprint: 6,
|
|
2167
|
+
blush: 8,
|
|
2168
|
+
orchid: 9,
|
|
2169
|
+
canopy: 10,
|
|
2170
|
+
lagoon: 11
|
|
1459
2171
|
};
|
|
1460
2172
|
var STYLE_DECODE = [
|
|
1461
2173
|
"base",
|
|
@@ -1465,16 +2177,26 @@ var STYLE_DECODE = [
|
|
|
1465
2177
|
"outdoor",
|
|
1466
2178
|
"decimal",
|
|
1467
2179
|
"blueprint",
|
|
1468
|
-
void 0
|
|
2180
|
+
void 0,
|
|
2181
|
+
"blush",
|
|
2182
|
+
"orchid",
|
|
2183
|
+
"canopy",
|
|
2184
|
+
"lagoon"
|
|
1469
2185
|
];
|
|
1470
2186
|
var PRESET_OFFSET = 8n;
|
|
1471
2187
|
var ORIGINAL_SLOTS = 5n;
|
|
1472
2188
|
var ORIGINAL_PRESET_LIMIT = 64n;
|
|
1473
|
-
var
|
|
1474
|
-
var
|
|
1475
|
-
var
|
|
2189
|
+
var LATER_OFFSET = PRESET_OFFSET + ORIGINAL_PRESET_LIMIT * ORIGINAL_SLOTS;
|
|
2190
|
+
var LATER_LANES = 3n;
|
|
2191
|
+
var LATER_ROWS = 232n;
|
|
2192
|
+
var WAVE2_BASE = 5;
|
|
2193
|
+
var WAVE3_BASE = 8;
|
|
2194
|
+
var WAVE3_BARE_ROWS = 32n;
|
|
2195
|
+
var WAVE3_STYLE_COLUMNS = 20n;
|
|
2196
|
+
var WAVE3_PRESET_LIMIT = (LATER_ROWS - WAVE3_BARE_ROWS) / WAVE3_STYLE_COLUMNS;
|
|
1476
2197
|
var CUSTOM_OFFSET = 1024n;
|
|
1477
|
-
var
|
|
2198
|
+
var ESCAPE_SLOT = 7n;
|
|
2199
|
+
var ESCAPE_BITS = 5n;
|
|
1478
2200
|
var sameHex = (a, b) => a.toLowerCase() === b.toLowerCase();
|
|
1479
2201
|
function isThemePresetCode(code) {
|
|
1480
2202
|
return PRESET_CODE_RE.test(code);
|
|
@@ -1543,27 +2265,39 @@ function encodeBits(bits) {
|
|
|
1543
2265
|
return PRESET_CODE_PREFIX + toBase62(bits);
|
|
1544
2266
|
}
|
|
1545
2267
|
function encodePreset(doc) {
|
|
1546
|
-
const
|
|
1547
|
-
if (
|
|
2268
|
+
const index = STYLE_ENCODE[doc.base];
|
|
2269
|
+
if (index === void 0) return null;
|
|
2270
|
+
const s = BigInt(index);
|
|
1548
2271
|
if (isBareStyle(doc)) {
|
|
1549
|
-
return encodeBits(
|
|
2272
|
+
if (index < WAVE3_BASE) return encodeBits(s);
|
|
2273
|
+
return encodeBits(LATER_OFFSET + (s - BigInt(WAVE3_BASE)) * LATER_LANES + 2n);
|
|
1550
2274
|
}
|
|
1551
2275
|
if (!doc.seeds || !generatedMatch(doc)) return null;
|
|
1552
2276
|
const presetIndex = findPresetIndex(doc.seeds);
|
|
1553
2277
|
if (presetIndex >= 0) {
|
|
1554
2278
|
const p = BigInt(presetIndex);
|
|
1555
|
-
if (
|
|
1556
|
-
if (p < ORIGINAL_PRESET_LIMIT)
|
|
1557
|
-
|
|
2279
|
+
if (index < WAVE2_BASE) {
|
|
2280
|
+
if (p < ORIGINAL_PRESET_LIMIT) return encodeBits(PRESET_OFFSET + p * ORIGINAL_SLOTS + s);
|
|
2281
|
+
} else if (index < WAVE3_BASE) {
|
|
2282
|
+
if (p < LATER_ROWS) {
|
|
2283
|
+
return encodeBits(LATER_OFFSET + p * LATER_LANES + (s - BigInt(WAVE2_BASE)));
|
|
1558
2284
|
}
|
|
1559
|
-
} else if (p <
|
|
1560
|
-
|
|
2285
|
+
} else if (p < WAVE3_PRESET_LIMIT && s - BigInt(WAVE3_BASE) < WAVE3_STYLE_COLUMNS) {
|
|
2286
|
+
const row = WAVE3_BARE_ROWS + p * WAVE3_STYLE_COLUMNS + (s - BigInt(WAVE3_BASE));
|
|
2287
|
+
return encodeBits(LATER_OFFSET + row * LATER_LANES + 2n);
|
|
1561
2288
|
}
|
|
1562
2289
|
}
|
|
1563
2290
|
if (!doc.seeds.accent) return null;
|
|
1564
2291
|
const filled = { ...DEFAULT_SEEDS, ...doc.seeds };
|
|
1565
|
-
let bits
|
|
1566
|
-
let shift
|
|
2292
|
+
let bits;
|
|
2293
|
+
let shift;
|
|
2294
|
+
if (index < WAVE3_BASE) {
|
|
2295
|
+
bits = CUSTOM_OFFSET + s;
|
|
2296
|
+
shift = 3n;
|
|
2297
|
+
} else {
|
|
2298
|
+
bits = CUSTOM_OFFSET + ESCAPE_SLOT + (s - BigInt(WAVE3_BASE) << 3n);
|
|
2299
|
+
shift = 3n + ESCAPE_BITS;
|
|
2300
|
+
}
|
|
1567
2301
|
for (const key of SEED_KEYS) {
|
|
1568
2302
|
bits += rgb24(filled[key]) << shift;
|
|
1569
2303
|
shift += 24n;
|
|
@@ -1575,38 +2309,48 @@ function decodePreset(code) {
|
|
|
1575
2309
|
throw new ThemeError("invalid theme", ["code is not a valid preset"]);
|
|
1576
2310
|
}
|
|
1577
2311
|
const bits = fromBase62(code.slice(PRESET_CODE_PREFIX.length));
|
|
2312
|
+
const styleAt = (index) => {
|
|
2313
|
+
const base2 = STYLE_DECODE[index];
|
|
2314
|
+
if (!base2) throw new ThemeError("invalid theme", ["preset style is out of range"]);
|
|
2315
|
+
return base2;
|
|
2316
|
+
};
|
|
2317
|
+
const presetAt = (index) => {
|
|
2318
|
+
const preset = THEME_PRESETS[index];
|
|
2319
|
+
if (!preset) throw new ThemeError("invalid theme", ["preset is out of range"]);
|
|
2320
|
+
return preset;
|
|
2321
|
+
};
|
|
1578
2322
|
if (bits < PRESET_OFFSET) {
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
return
|
|
2323
|
+
return structuredClone(STYLE_THEMES[styleAt(Number(bits))]);
|
|
2324
|
+
}
|
|
2325
|
+
if (bits < LATER_OFFSET) {
|
|
2326
|
+
const n = bits - PRESET_OFFSET;
|
|
2327
|
+
return generateTheme(styleAt(Number(n % ORIGINAL_SLOTS)), presetAt(Number(n / ORIGINAL_SLOTS)).seeds);
|
|
1584
2328
|
}
|
|
1585
2329
|
if (bits < CUSTOM_OFFSET) {
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
presetIndex = Number(n / ORIGINAL_SLOTS);
|
|
1592
|
-
} else {
|
|
1593
|
-
const n = bits - LATER_PRESET_OFFSET;
|
|
1594
|
-
slot = LATER_SLOT_BASE + Number(n % LATER_SLOTS);
|
|
1595
|
-
presetIndex = Number(n / LATER_SLOTS);
|
|
2330
|
+
const n = bits - LATER_OFFSET;
|
|
2331
|
+
const lane = Number(n % LATER_LANES);
|
|
2332
|
+
const row = n / LATER_LANES;
|
|
2333
|
+
if (lane < 2) {
|
|
2334
|
+
return generateTheme(styleAt(WAVE2_BASE + lane), presetAt(Number(row)).seeds);
|
|
1596
2335
|
}
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
if (!base2 || !preset) {
|
|
1600
|
-
throw new ThemeError("invalid theme", ["preset is out of range"]);
|
|
2336
|
+
if (row < WAVE3_BARE_ROWS) {
|
|
2337
|
+
return structuredClone(STYLE_THEMES[styleAt(WAVE3_BASE + Number(row))]);
|
|
1601
2338
|
}
|
|
1602
|
-
|
|
2339
|
+
const j = row - WAVE3_BARE_ROWS;
|
|
2340
|
+
const base2 = styleAt(WAVE3_BASE + Number(j % WAVE3_STYLE_COLUMNS));
|
|
2341
|
+
return generateTheme(base2, presetAt(Number(j / WAVE3_STYLE_COLUMNS)).seeds);
|
|
1603
2342
|
}
|
|
1604
2343
|
const payload = bits - CUSTOM_OFFSET;
|
|
1605
|
-
const
|
|
1606
|
-
|
|
1607
|
-
|
|
2344
|
+
const slot = payload & 7n;
|
|
2345
|
+
let base;
|
|
2346
|
+
let rest;
|
|
2347
|
+
if (slot === ESCAPE_SLOT) {
|
|
2348
|
+
base = styleAt(WAVE3_BASE + Number(payload >> 3n & (1n << ESCAPE_BITS) - 1n));
|
|
2349
|
+
rest = payload >> 3n + ESCAPE_BITS;
|
|
2350
|
+
} else {
|
|
2351
|
+
base = styleAt(Number(slot));
|
|
2352
|
+
rest = payload >> 3n;
|
|
1608
2353
|
}
|
|
1609
|
-
let rest = payload >> 3n;
|
|
1610
2354
|
const seeds = { ...DEFAULT_SEEDS };
|
|
1611
2355
|
for (const key of SEED_KEYS) {
|
|
1612
2356
|
seeds[key] = fromRgb24(rest & 0xffffffn);
|
|
@@ -1625,6 +2369,86 @@ function registryThemeKey(doc) {
|
|
|
1625
2369
|
return presetId(THEME_PRESETS[presetIndex].name);
|
|
1626
2370
|
}
|
|
1627
2371
|
|
|
2372
|
+
// src/layers.ts
|
|
2373
|
+
var DEFAULT_LAYER_VISIBILITY = {
|
|
2374
|
+
land: true,
|
|
2375
|
+
water: true,
|
|
2376
|
+
buildings: true,
|
|
2377
|
+
roads: true,
|
|
2378
|
+
boundaries: true,
|
|
2379
|
+
buildings3d: false,
|
|
2380
|
+
labels: true
|
|
2381
|
+
};
|
|
2382
|
+
var BUILDINGS_3D_LAYER_ID = "buildings_3d";
|
|
2383
|
+
var LAND_LINES = /* @__PURE__ */ new Set(["roads_runway", "roads_taxiway"]);
|
|
2384
|
+
function layerGroupOf(layer) {
|
|
2385
|
+
const { id, type } = layer;
|
|
2386
|
+
if (type === "symbol") return "labels";
|
|
2387
|
+
if (id === "background") return null;
|
|
2388
|
+
if (id === BUILDINGS_3D_LAYER_ID) return "buildings3d";
|
|
2389
|
+
if (id === "buildings") return "buildings";
|
|
2390
|
+
if (id.startsWith("water")) return "water";
|
|
2391
|
+
if (id.startsWith("boundaries")) return "boundaries";
|
|
2392
|
+
if (LAND_LINES.has(id)) return "land";
|
|
2393
|
+
if (id.startsWith("roads")) return "roads";
|
|
2394
|
+
if (id === "earth" || id === "landcover" || id.startsWith("landuse")) return "land";
|
|
2395
|
+
return null;
|
|
2396
|
+
}
|
|
2397
|
+
function isLayerVisible(layers, group) {
|
|
2398
|
+
return layers?.visible?.[group] ?? DEFAULT_LAYER_VISIBILITY[group];
|
|
2399
|
+
}
|
|
2400
|
+
function effectiveLayerOrder(layers) {
|
|
2401
|
+
return layers?.order ?? LAYER_GROUPS;
|
|
2402
|
+
}
|
|
2403
|
+
function isStockLayerOrder(order) {
|
|
2404
|
+
return !order || order.length === LAYER_GROUPS.length && order.every((g, i) => g === LAYER_GROUPS[i]);
|
|
2405
|
+
}
|
|
2406
|
+
function isStockLayers(layers) {
|
|
2407
|
+
if (!layers) return true;
|
|
2408
|
+
if (!isStockLayerOrder(layers.order)) return false;
|
|
2409
|
+
return LAYER_GROUPS.every((g) => isLayerVisible(layers, g) === DEFAULT_LAYER_VISIBILITY[g]);
|
|
2410
|
+
}
|
|
2411
|
+
function buildings3dLayer(source, color) {
|
|
2412
|
+
return {
|
|
2413
|
+
id: BUILDINGS_3D_LAYER_ID,
|
|
2414
|
+
type: "fill-extrusion",
|
|
2415
|
+
source,
|
|
2416
|
+
"source-layer": "buildings",
|
|
2417
|
+
minzoom: 13,
|
|
2418
|
+
filter: ["in", "kind", "building", "building_part"],
|
|
2419
|
+
paint: {
|
|
2420
|
+
"fill-extrusion-color": color,
|
|
2421
|
+
"fill-extrusion-height": ["coalesce", ["get", "height"], 6],
|
|
2422
|
+
"fill-extrusion-base": ["coalesce", ["get", "min_height"], 0],
|
|
2423
|
+
"fill-extrusion-opacity": 0.85
|
|
2424
|
+
}
|
|
2425
|
+
};
|
|
2426
|
+
}
|
|
2427
|
+
function applyThemeLayers(styleLayers, layers, buildingsColor) {
|
|
2428
|
+
if (isStockLayers(layers)) return styleLayers;
|
|
2429
|
+
const visible = (g) => isLayerVisible(layers, g);
|
|
2430
|
+
const tagged = styleLayers.map((layer) => ({ layer, group: layerGroupOf(layer) }));
|
|
2431
|
+
const source = styleLayers.find((l) => l.id === "buildings")?.source ?? "unmap";
|
|
2432
|
+
const extrusion = visible("buildings3d") ? buildings3dLayer(source, buildingsColor) : null;
|
|
2433
|
+
if (isStockLayerOrder(layers?.order)) {
|
|
2434
|
+
const kept = tagged.filter(({ group }) => group === null || visible(group)).map((t) => t.layer);
|
|
2435
|
+
if (!extrusion) return kept;
|
|
2436
|
+
const firstLabel = kept.findIndex((l) => layerGroupOf(l) === "labels");
|
|
2437
|
+
const at = firstLabel === -1 ? kept.length : firstLabel;
|
|
2438
|
+
return [...kept.slice(0, at), extrusion, ...kept.slice(at)];
|
|
2439
|
+
}
|
|
2440
|
+
const out = tagged.filter(({ group }) => group === null).map((t) => t.layer);
|
|
2441
|
+
for (const group of effectiveLayerOrder(layers)) {
|
|
2442
|
+
if (!visible(group)) continue;
|
|
2443
|
+
if (group === "buildings3d") {
|
|
2444
|
+
if (extrusion) out.push(extrusion);
|
|
2445
|
+
continue;
|
|
2446
|
+
}
|
|
2447
|
+
for (const t of tagged) if (t.group === group) out.push(t.layer);
|
|
2448
|
+
}
|
|
2449
|
+
return out;
|
|
2450
|
+
}
|
|
2451
|
+
|
|
1628
2452
|
// src/codec.ts
|
|
1629
2453
|
var THEME_CODE_PREFIX = "ut1.";
|
|
1630
2454
|
var MAX_CODE_LENGTH = 4096;
|
|
@@ -1669,7 +2493,7 @@ async function through(bytes, transform, cap) {
|
|
|
1669
2493
|
}
|
|
1670
2494
|
async function encodeTheme(doc) {
|
|
1671
2495
|
const valid = validateTheme(doc);
|
|
1672
|
-
const preset = encodePreset(valid);
|
|
2496
|
+
const preset = isStockLayers(valid.layers) ? encodePreset(valid) : null;
|
|
1673
2497
|
if (preset) return preset;
|
|
1674
2498
|
const json = new TextEncoder().encode(JSON.stringify(valid));
|
|
1675
2499
|
const packed = await through(json, new CompressionStream("deflate"), Number.POSITIVE_INFINITY);
|
|
@@ -1713,10 +2537,13 @@ async function decodeDeflate(code) {
|
|
|
1713
2537
|
return validateTheme(parsed);
|
|
1714
2538
|
}
|
|
1715
2539
|
export {
|
|
2540
|
+
BUILDINGS_3D_LAYER_ID,
|
|
2541
|
+
DEFAULT_LAYER_VISIBILITY,
|
|
1716
2542
|
DEFAULT_MARKER,
|
|
1717
2543
|
DEFAULT_ROUTE,
|
|
1718
2544
|
DEFAULT_SEEDS,
|
|
1719
2545
|
LABEL_PAIRS,
|
|
2546
|
+
LAYER_GROUPS,
|
|
1720
2547
|
MAX_CODE_LENGTH,
|
|
1721
2548
|
MODES,
|
|
1722
2549
|
PRESET_CODE_PREFIX,
|
|
@@ -1728,12 +2555,15 @@ export {
|
|
|
1728
2555
|
THEME_CODE_PREFIX,
|
|
1729
2556
|
THEME_PRESETS,
|
|
1730
2557
|
ThemeError,
|
|
2558
|
+
applyThemeLayers,
|
|
2559
|
+
aqua,
|
|
1731
2560
|
buildRecipes,
|
|
1732
2561
|
cobalt,
|
|
1733
2562
|
contrast,
|
|
1734
2563
|
contrastWarnings,
|
|
1735
2564
|
decodePreset,
|
|
1736
2565
|
decodeTheme,
|
|
2566
|
+
effectiveLayerOrder,
|
|
1737
2567
|
ember,
|
|
1738
2568
|
encodePreset,
|
|
1739
2569
|
encodeTheme,
|
|
@@ -1741,8 +2571,13 @@ export {
|
|
|
1741
2571
|
graphite,
|
|
1742
2572
|
hexToOklch,
|
|
1743
2573
|
ink,
|
|
2574
|
+
isLayerVisible,
|
|
2575
|
+
isStockLayerOrder,
|
|
2576
|
+
isStockLayers,
|
|
1744
2577
|
isThemePresetCode,
|
|
1745
2578
|
jade,
|
|
2579
|
+
layerGroupOf,
|
|
2580
|
+
lilac,
|
|
1746
2581
|
makeFlavor,
|
|
1747
2582
|
mergeRecipe,
|
|
1748
2583
|
mist,
|
|
@@ -1752,6 +2587,7 @@ export {
|
|
|
1752
2587
|
presetId,
|
|
1753
2588
|
registryThemeKey,
|
|
1754
2589
|
resolveTheme,
|
|
2590
|
+
rose,
|
|
1755
2591
|
sandstone,
|
|
1756
2592
|
shuffleSeeds,
|
|
1757
2593
|
sky,
|