@unmap/themes 0.2.0 → 0.5.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/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 = ["base", "muted", "outdoor", "decimal", "blueprint"];
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[300],
262
- parkB: r.verdant[400],
263
- woodA: r.verdant[300],
264
- woodB: r.verdant[400],
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[400]
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 LATER_PRESET_OFFSET = PRESET_OFFSET + ORIGINAL_PRESET_LIMIT * ORIGINAL_SLOTS;
1474
- var LATER_SLOT_BASE = 5;
1475
- var LATER_SLOTS = 3n;
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 LATER_PRESET_LIMIT = (CUSTOM_OFFSET - LATER_PRESET_OFFSET) / LATER_SLOTS;
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 slot = STYLE_ENCODE[doc.base];
1547
- if (slot === void 0) return null;
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(BigInt(slot));
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 (slot < LATER_SLOT_BASE) {
1556
- if (p < ORIGINAL_PRESET_LIMIT) {
1557
- return encodeBits(PRESET_OFFSET + p * ORIGINAL_SLOTS + BigInt(slot));
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 < LATER_PRESET_LIMIT) {
1560
- return encodeBits(LATER_PRESET_OFFSET + p * LATER_SLOTS + BigInt(slot - LATER_SLOT_BASE));
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 = CUSTOM_OFFSET + BigInt(slot);
1566
- let shift = 3n;
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
- const base2 = STYLE_DECODE[Number(bits)];
1580
- if (!base2) {
1581
- throw new ThemeError("invalid theme", ["preset style slot is out of range"]);
1582
- }
1583
- return structuredClone(STYLE_THEMES[base2]);
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
- let slot;
1587
- let presetIndex;
1588
- if (bits < LATER_PRESET_OFFSET) {
1589
- const n = bits - PRESET_OFFSET;
1590
- slot = Number(n % ORIGINAL_SLOTS);
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
- const base2 = STYLE_DECODE[slot];
1598
- const preset = THEME_PRESETS[presetIndex];
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
- return generateTheme(base2, preset.seeds);
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 base = STYLE_DECODE[Number(payload & 7n)];
1606
- if (!base) {
1607
- throw new ThemeError("invalid theme", ["preset style slot is out of range"]);
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,