mapshaper 0.7.67 → 0.7.68
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/mapshaper.js +858 -410
- package/package.json +1 -1
- package/www/index.html +10 -3
- package/www/mapshaper-gui.js +417 -240
- package/www/mapshaper.js +858 -410
- package/www/page.css +261 -112
package/www/page.css
CHANGED
|
@@ -944,46 +944,156 @@ body.sidebar-panels-resizing .sidebar-panels-resize-handle::before,
|
|
|
944
944
|
}
|
|
945
945
|
}
|
|
946
946
|
|
|
947
|
+
:root {
|
|
948
|
+
--sidebar-strip-height: 33px;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
/* Icon buttons for opening the sidebar, shown on the map while the sidebar is
|
|
952
|
+
closed. Sized and styled to mirror the .nav-buttons on the right, and like
|
|
953
|
+
them hidden on the splash screen: body.map-view is set once data is
|
|
954
|
+
imported or the splash popup is dismissed. */
|
|
947
955
|
.sidebar-tabs {
|
|
948
956
|
position: absolute;
|
|
949
|
-
top:
|
|
957
|
+
top: 35px; /* 29px header + the 6px offset of .nav-buttons */
|
|
950
958
|
left: 0;
|
|
951
959
|
z-index: 40;
|
|
960
|
+
padding: 3px;
|
|
961
|
+
background-color: white;
|
|
962
|
+
border-radius: 7px;
|
|
952
963
|
pointer-events: auto;
|
|
953
964
|
}
|
|
954
965
|
|
|
966
|
+
body:not(.map-view) .sidebar-tabs {
|
|
967
|
+
display: none;
|
|
968
|
+
}
|
|
969
|
+
|
|
955
970
|
body.sidebar-open .sidebar-tabs {
|
|
956
|
-
|
|
957
|
-
margin-left: -1.5px;
|
|
971
|
+
display: none;
|
|
958
972
|
}
|
|
959
973
|
|
|
960
974
|
body.sidebar-tabs-over-popup .sidebar-tabs {
|
|
961
975
|
z-index: 90;
|
|
962
976
|
}
|
|
963
977
|
|
|
978
|
+
/* keep the line intersection readout clear of the buttons */
|
|
979
|
+
body:not(.sidebar-open) .intersection-display {
|
|
980
|
+
left: 44px;
|
|
981
|
+
}
|
|
982
|
+
|
|
964
983
|
.sidebar-tab {
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
984
|
+
position: relative;
|
|
985
|
+
padding: 3px 4px;
|
|
986
|
+
line-height: 1;
|
|
987
|
+
cursor: pointer;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
.sidebar-icon {
|
|
991
|
+
display: block;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
.sidebar-icon * {
|
|
995
|
+
fill: var(--theme-col);
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
.sidebar-tab.console-tab {
|
|
999
|
+
padding-top: 8px;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
.sidebar-tab:hover .sidebar-icon * {
|
|
1003
|
+
fill: #166689;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
/* Tooltip to the right of the button, matching the .nav-btn tooltips */
|
|
1007
|
+
.sidebar-tab[data-tooltip]:hover::after {
|
|
1008
|
+
content: attr(data-tooltip);
|
|
1009
|
+
position: absolute;
|
|
1010
|
+
top: 50%;
|
|
1011
|
+
left: calc(100% + 3px);
|
|
1012
|
+
transform: translateY(-50%);
|
|
1013
|
+
pointer-events: none;
|
|
1014
|
+
background-color: rgba(255, 255, 255, 0.85);
|
|
1015
|
+
color: var(--colored-text);
|
|
1016
|
+
font-size: 12px;
|
|
1017
|
+
line-height: 12px;
|
|
1018
|
+
padding: 3px 6px 4px 6px;
|
|
1019
|
+
white-space: nowrap;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
/* centre on the icon, which the console button's extra top padding lowers */
|
|
1023
|
+
.sidebar-tab.console-tab[data-tooltip]:hover::after {
|
|
1024
|
+
top: calc(50% + 2px);
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
/* Panel toggles at the top of the open sidebar. Each toggles its own panel,
|
|
1028
|
+
so both can be on at once. */
|
|
1029
|
+
.sidebar-strip {
|
|
1030
|
+
display: none;
|
|
1031
|
+
position: absolute;
|
|
1032
|
+
top: 29px;
|
|
1033
|
+
left: 0;
|
|
1034
|
+
z-index: 30;
|
|
1035
|
+
width: var(--left-sidebar-width);
|
|
1036
|
+
max-width: 100%;
|
|
1037
|
+
height: var(--sidebar-strip-height);
|
|
1038
|
+
box-sizing: border-box;
|
|
1039
|
+
align-items: flex-start;
|
|
1040
|
+
gap: 6px;
|
|
1041
|
+
padding: 7px 10px 0 10px;
|
|
1042
|
+
background-color: white;
|
|
1043
|
+
border-right: 1px solid #c6c6c6;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
body.sidebar-open .sidebar-strip {
|
|
1047
|
+
display: flex;
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
body.sidebar-open .sidebar-panels {
|
|
1051
|
+
margin-top: calc(29px + var(--sidebar-strip-height));
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
.sidebar-strip-btn {
|
|
1055
|
+
display: flex;
|
|
1056
|
+
align-items: center;
|
|
1057
|
+
gap: 5px;
|
|
1058
|
+
padding: 2px 8px 2px 6px;
|
|
1059
|
+
border: 1px solid #cfdde4;
|
|
1060
|
+
border-radius: 12px;
|
|
1061
|
+
color: var(--theme-col);
|
|
974
1062
|
font-size: 13px;
|
|
975
1063
|
font-weight: 500;
|
|
1064
|
+
line-height: 14px;
|
|
976
1065
|
cursor: pointer;
|
|
977
|
-
|
|
1066
|
+
user-select: none;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
.sidebar-strip-btn:hover {
|
|
1070
|
+
border-color: var(--theme-col);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
.sidebar-strip-btn.active {
|
|
1074
|
+
background-color: var(--theme-col);
|
|
1075
|
+
border-color: var(--theme-col);
|
|
1076
|
+
color: white;
|
|
978
1077
|
}
|
|
979
1078
|
|
|
980
|
-
.sidebar-
|
|
1079
|
+
.sidebar-strip-btn.active:hover {
|
|
981
1080
|
background-color: var(--dk-theme-col);
|
|
1081
|
+
border-color: var(--dk-theme-col);
|
|
982
1082
|
}
|
|
983
1083
|
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
1084
|
+
.sidebar-strip-btn.active .sidebar-icon * {
|
|
1085
|
+
fill: white;
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
/* matches the × of .label-style-close on the tool panels */
|
|
1089
|
+
.sidebar-hide-btn {
|
|
1090
|
+
margin-left: auto;
|
|
1091
|
+
padding: 3px 0 0 4px;
|
|
1092
|
+
font-size: 16px;
|
|
1093
|
+
line-height: 1;
|
|
1094
|
+
cursor: pointer;
|
|
1095
|
+
user-select: none;
|
|
1096
|
+
color: black;
|
|
987
1097
|
}
|
|
988
1098
|
|
|
989
1099
|
|
|
@@ -1198,7 +1308,7 @@ body.simplify .layer-control-btn {
|
|
|
1198
1308
|
max-height: 500px;
|
|
1199
1309
|
overflow: hidden;
|
|
1200
1310
|
overflow-y: auto;
|
|
1201
|
-
padding:
|
|
1311
|
+
padding: 2px 14px 10px 14px;
|
|
1202
1312
|
pointer-events: auto;
|
|
1203
1313
|
border-radius: 9px;
|
|
1204
1314
|
}
|
|
@@ -1242,10 +1352,42 @@ body.simplify .layer-control-btn {
|
|
|
1242
1352
|
font-size: 13px;
|
|
1243
1353
|
}
|
|
1244
1354
|
|
|
1355
|
+
/* "Add files" and "Draw: labels · points · ..." are two groups, and a narrow
|
|
1356
|
+
sidebar wraps between them, so the second line starts with "Draw:". The dot
|
|
1357
|
+
between them is each group's ::before, hung to the group's left: a group that
|
|
1358
|
+
starts a line has its dot pushed past the left edge of the row and clipped,
|
|
1359
|
+
so no line ends or begins with a stray dot. */
|
|
1245
1360
|
.layer-add-links {
|
|
1246
1361
|
margin: 2px 0 2px 0;
|
|
1247
1362
|
font-size: 13px;
|
|
1248
1363
|
line-height: 1.2;
|
|
1364
|
+
overflow: hidden;
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
.layer-add-links-inner {
|
|
1368
|
+
display: flex;
|
|
1369
|
+
flex-wrap: wrap;
|
|
1370
|
+
margin-left: -1.6em;
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
/* The padding holds the dot, so that a group long enough to wrap starts its
|
|
1374
|
+
later lines at the row's edge rather than under the clipped dot. */
|
|
1375
|
+
.layer-add-links-group {
|
|
1376
|
+
padding-left: 1.6em;
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
.layer-add-links-group::before {
|
|
1380
|
+
content: "·";
|
|
1381
|
+
display: inline-block;
|
|
1382
|
+
width: 1.6em;
|
|
1383
|
+
margin-left: -1.6em;
|
|
1384
|
+
text-align: center;
|
|
1385
|
+
color: #777;
|
|
1386
|
+
font-weight: bold;
|
|
1387
|
+
}
|
|
1388
|
+
|
|
1389
|
+
.layer-add-links-group:first-child {
|
|
1390
|
+
white-space: nowrap;
|
|
1249
1391
|
}
|
|
1250
1392
|
|
|
1251
1393
|
.layer-menu-link {
|
|
@@ -1301,7 +1443,7 @@ body.simplify .layer-control-btn {
|
|
|
1301
1443
|
.map-frame-empty {
|
|
1302
1444
|
cursor: pointer;
|
|
1303
1445
|
font-size: 12px;
|
|
1304
|
-
padding:
|
|
1446
|
+
padding: 4px 0;
|
|
1305
1447
|
}
|
|
1306
1448
|
|
|
1307
1449
|
.pin-all img,
|
|
@@ -1401,12 +1543,47 @@ img.eye-btn {
|
|
|
1401
1543
|
z-index: 1;
|
|
1402
1544
|
}
|
|
1403
1545
|
|
|
1404
|
-
|
|
1546
|
+
/* Name and contents on one line. The contents column has a fixed width, so it
|
|
1547
|
+
lines up from row to row, and the name takes the rest, truncated if long. */
|
|
1548
|
+
.layer-item .layer-row {
|
|
1549
|
+
display: flex;
|
|
1550
|
+
align-items: baseline;
|
|
1551
|
+
gap: 12px;
|
|
1552
|
+
margin-right: 44px; /* room for row controls */
|
|
1405
1553
|
line-height: 17px;
|
|
1406
|
-
margin-bottom: 1px;
|
|
1407
1554
|
white-space: nowrap;
|
|
1408
1555
|
}
|
|
1409
1556
|
|
|
1557
|
+
.layer-item .layer-name-col {
|
|
1558
|
+
flex: 1 1 auto;
|
|
1559
|
+
min-width: 0;
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
/* wraps a point layer that lists several kinds of feature */
|
|
1563
|
+
.layer-item .layer-contents {
|
|
1564
|
+
flex: none;
|
|
1565
|
+
width: 9em;
|
|
1566
|
+
white-space: normal;
|
|
1567
|
+
font-size: 12.5px;
|
|
1568
|
+
color: #666;
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
/* bar on the left edge of the active layer; a shadow rather than a border, so
|
|
1572
|
+
the row's text keeps its alignment with the other rows */
|
|
1573
|
+
.layer-menu .layer-item.active {
|
|
1574
|
+
box-shadow: inset 5px 0 0 var(--theme-col);
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
/* hints at a tooltip that counts the features with null geometry */
|
|
1578
|
+
.layer-item .layer-contents.has-nulls span {
|
|
1579
|
+
border-bottom: 1px dotted #999;
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
/* a name being edited is shown in full, over the contents column */
|
|
1583
|
+
.layer-item:has(.layer-name.editing) .layer-contents {
|
|
1584
|
+
visibility: hidden;
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1410
1587
|
.layer-item .layer-name {
|
|
1411
1588
|
display: inline-block;
|
|
1412
1589
|
max-width: 100%;
|
|
@@ -1446,20 +1623,6 @@ img.eye-btn {
|
|
|
1446
1623
|
background-color: #f7f7f7;
|
|
1447
1624
|
}
|
|
1448
1625
|
|
|
1449
|
-
.layer-item .row > div {
|
|
1450
|
-
display: inline-block;
|
|
1451
|
-
}
|
|
1452
|
-
|
|
1453
|
-
.layer-item .col1 {
|
|
1454
|
-
width: 84px;
|
|
1455
|
-
}
|
|
1456
|
-
|
|
1457
|
-
.layer-item .row1 .col2 {
|
|
1458
|
-
margin-right: 44px; /* room for row controls */
|
|
1459
|
-
max-width: calc(100% - 132px);
|
|
1460
|
-
vertical-align: top;
|
|
1461
|
-
}
|
|
1462
|
-
|
|
1463
1626
|
|
|
1464
1627
|
.layer-item.drag-target:not(.active) {
|
|
1465
1628
|
background-color: #f7f7f7;
|
|
@@ -2649,12 +2812,12 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
2649
2812
|
width: 100%;
|
|
2650
2813
|
}
|
|
2651
2814
|
|
|
2652
|
-
/*
|
|
2653
|
-
|
|
2654
|
-
|
|
2815
|
+
/* The neatline's width sits beside the colour and opacity it applies to, and
|
|
2816
|
+
the background row leaves the column empty rather than pushing a lone field
|
|
2817
|
+
onto a line of its own. */
|
|
2655
2818
|
.frame-properties-form .label-split-row {
|
|
2656
2819
|
column-gap: 8px;
|
|
2657
|
-
grid-template-columns: 1fr 54px
|
|
2820
|
+
grid-template-columns: 1fr 54px;
|
|
2658
2821
|
}
|
|
2659
2822
|
|
|
2660
2823
|
/* Wide enough for "Aspect ratio", and fixed rather than auto so that the ratio
|
|
@@ -2732,9 +2895,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
2732
2895
|
width: 130px;
|
|
2733
2896
|
}
|
|
2734
2897
|
|
|
2735
|
-
/* Stretches so that the margin field ends where the fields above it do: the
|
|
2736
|
-
row is shorter than they are, and a ragged right edge reads as unfinished
|
|
2737
|
-
rather than as deliberate grouping. */
|
|
2738
2898
|
.frame-create-margin {
|
|
2739
2899
|
align-items: center;
|
|
2740
2900
|
display: flex;
|
|
@@ -2743,11 +2903,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
2743
2903
|
min-width: 0; /* a flex item defaults to min-width:auto and will not shrink below its field */
|
|
2744
2904
|
}
|
|
2745
2905
|
|
|
2746
|
-
.frame-create-margin > span {
|
|
2747
|
-
color: #555;
|
|
2748
|
-
font-size: 12px;
|
|
2749
|
-
}
|
|
2750
|
-
|
|
2751
2906
|
.frame-create-margin > input {
|
|
2752
2907
|
box-sizing: border-box;
|
|
2753
2908
|
flex: 1;
|
|
@@ -2784,6 +2939,7 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
2784
2939
|
grid-template-columns: 1fr 1fr 54px;
|
|
2785
2940
|
}
|
|
2786
2941
|
|
|
2942
|
+
.frame-create-margin > span,
|
|
2787
2943
|
.frame-input-cell > span {
|
|
2788
2944
|
color: #555;
|
|
2789
2945
|
font-size: 12px;
|
|
@@ -3080,8 +3236,9 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3080
3236
|
different place.
|
|
3081
3237
|
|
|
3082
3238
|
Bottom-aligned, so that a caption above one control cannot push it out of
|
|
3083
|
-
line with the control beside it: the
|
|
3084
|
-
|
|
3239
|
+
line with the control beside it: the frame's neatline width has a "Width"
|
|
3240
|
+
over it and the colour beside it has a longer caption, and the two still
|
|
3241
|
+
have to be level. */
|
|
3085
3242
|
.label-split-row {
|
|
3086
3243
|
display: grid;
|
|
3087
3244
|
grid-template-columns: 1fr var(--label-split-b-width);
|
|
@@ -3096,28 +3253,26 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3096
3253
|
color: #555;
|
|
3097
3254
|
}
|
|
3098
3255
|
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3256
|
+
.label-editing-status,
|
|
3257
|
+
.label-style-panel .label-style-row.label-style-selection-row > span {
|
|
3258
|
+
font-size: 12px;
|
|
3259
|
+
color: #555;
|
|
3260
|
+
}
|
|
3261
|
+
|
|
3104
3262
|
.label-style-panel .label-style-row > span,
|
|
3105
|
-
.label-style-panel .label-style-selection-row > span,
|
|
3106
3263
|
.label-style-panel .label-split-cell > span,
|
|
3107
3264
|
.label-style-panel .label-style-row > .label-style-row-label,
|
|
3108
3265
|
.label-style-panel .label-split-cell > .label-style-row-label,
|
|
3109
|
-
.label-style-panel .
|
|
3266
|
+
.label-style-panel .frame-input-cell > span,
|
|
3110
3267
|
.label-style-panel .point-style-note {
|
|
3111
|
-
font-size:
|
|
3268
|
+
font-size: 11px;
|
|
3269
|
+
color: #555;
|
|
3112
3270
|
}
|
|
3113
3271
|
|
|
3114
3272
|
.label-split-row .label-split-cell + .label-split-cell {
|
|
3115
3273
|
white-space: nowrap;
|
|
3116
3274
|
}
|
|
3117
3275
|
|
|
3118
|
-
/* Each column's control fills its column: the widths are the grid's to decide
|
|
3119
|
-
now, and a control keeping a width of its own would sit inside its cell
|
|
3120
|
-
rather than lining up with the one above it. */
|
|
3121
3276
|
.label-split-cell > select,
|
|
3122
3277
|
.label-split-cell > .size-field,
|
|
3123
3278
|
.label-split-cell > input[type="text"] {
|
|
@@ -3191,7 +3346,7 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3191
3346
|
/* Whitespace and a bold heading separate the sections; a rule as well would be
|
|
3192
3347
|
a third answer to a question already settled twice. */
|
|
3193
3348
|
.label-style-panel .label-style-section + .label-style-section {
|
|
3194
|
-
margin-top:
|
|
3349
|
+
margin-top: 10px;
|
|
3195
3350
|
padding-top: 0;
|
|
3196
3351
|
border-top: 0;
|
|
3197
3352
|
}
|
|
@@ -3210,25 +3365,17 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3210
3365
|
align-self: center;
|
|
3211
3366
|
}
|
|
3212
3367
|
|
|
3213
|
-
/* A section switched off shows only its heading (see setSectionCollapsed())
|
|
3214
|
-
|
|
3215
|
-
.label-style-panel .label-style-section.collapsed > :not(.label-style-section-title),
|
|
3216
|
-
.label-style-panel .label-style-section.collapsed .label-icon-size-caption {
|
|
3368
|
+
/* A section switched off shows only its heading (see setSectionCollapsed()). */
|
|
3369
|
+
.label-style-panel .label-style-section.collapsed > :not(.label-style-section-title) {
|
|
3217
3370
|
display: none;
|
|
3218
3371
|
}
|
|
3219
3372
|
|
|
3220
|
-
/* .hidden is one class and the rule above is two, so a heading told to hide
|
|
3221
|
-
would go on being laid out. The circle panel hides its Circles heading once
|
|
3222
|
-
the points are circles: the panel's title says so, and the section is the
|
|
3223
|
-
only thing left in it. */
|
|
3224
3373
|
.label-style-panel .label-style-section-title.hidden {
|
|
3225
3374
|
display: none;
|
|
3226
3375
|
}
|
|
3227
3376
|
|
|
3228
|
-
/* 15.5px is what the dialogs subhead at (.info-box h4); the weight is the
|
|
3229
|
-
sketch's, which wants these read as headings rather than as captions. */
|
|
3230
3377
|
.label-style-panel .label-style-section-name {
|
|
3231
|
-
font-size:
|
|
3378
|
+
font-size: 15px;
|
|
3232
3379
|
color: #222;
|
|
3233
3380
|
}
|
|
3234
3381
|
|
|
@@ -3261,22 +3408,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3261
3408
|
overflow: hidden;
|
|
3262
3409
|
}
|
|
3263
3410
|
|
|
3264
|
-
/* Closer to the heading above it than a row usually is, because that heading
|
|
3265
|
-
line carries this row's "Size" caption: the gap between a caption and the
|
|
3266
|
-
field it names is 2px everywhere else in the panel. */
|
|
3267
|
-
.text-style-panel .label-icon-shapes-row {
|
|
3268
|
-
margin-top: 2px;
|
|
3269
|
-
}
|
|
3270
|
-
|
|
3271
|
-
/* Pushed to the right and given the width of a split row's narrow column, so
|
|
3272
|
-
that it sits over the size field a row below it. */
|
|
3273
|
-
.text-style-panel .label-icon-size-caption {
|
|
3274
|
-
width: var(--label-split-b-width);
|
|
3275
|
-
margin-left: auto;
|
|
3276
|
-
font-weight: normal;
|
|
3277
|
-
color: #555;
|
|
3278
|
-
}
|
|
3279
|
-
|
|
3280
3411
|
/* Darker than the app's default placeholder. These fields show the value the
|
|
3281
3412
|
renderer will use when the property is absent -- 0 and auto are true of the
|
|
3282
3413
|
label, they are just not stored on it -- so at #aaa they read as a control
|
|
@@ -3320,9 +3451,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3320
3451
|
background: #f0f0f0;
|
|
3321
3452
|
}
|
|
3322
3453
|
|
|
3323
|
-
/* A grey fill, not the inverse the panel's other buttons use: the glyph is
|
|
3324
|
-
what identifies the choice, and reversing it out makes the selected shape
|
|
3325
|
-
the hardest one to read. */
|
|
3326
3454
|
.label-style-panel .label-btn-group .label-panel-btn.selected {
|
|
3327
3455
|
background: #dcdcdc;
|
|
3328
3456
|
color: black;
|
|
@@ -3390,9 +3518,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3390
3518
|
margin-top: 0;
|
|
3391
3519
|
}
|
|
3392
3520
|
|
|
3393
|
-
/* The cell a colour field sits in, which is also what its picker hangs from:
|
|
3394
|
-
the picker is wider than the panel, so it opens over the map, and anchoring
|
|
3395
|
-
it to the cell keeps it on the same side of the panel as its field. */
|
|
3396
3521
|
.label-color-row {
|
|
3397
3522
|
position: relative;
|
|
3398
3523
|
}
|
|
@@ -3415,10 +3540,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3415
3540
|
opacity: 0.45;
|
|
3416
3541
|
}
|
|
3417
3542
|
|
|
3418
|
-
/* A button with a word on it: Clear style, Random fills, Create. The same
|
|
3419
|
-
shape as Save current in the saved styles row, which is the same kind of
|
|
3420
|
-
thing -- a named action, as wide as its name -- and the same height as the
|
|
3421
|
-
fields above it. */
|
|
3422
3543
|
.label-panel-action-btn {
|
|
3423
3544
|
box-sizing: border-box;
|
|
3424
3545
|
display: inline-flex;
|
|
@@ -3428,6 +3549,7 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3428
3549
|
border: 1px solid var(--label-field-border);
|
|
3429
3550
|
border-radius: var(--label-field-radius);
|
|
3430
3551
|
background-color: white;
|
|
3552
|
+
font-size: 12px;
|
|
3431
3553
|
color: var(--normal-text);
|
|
3432
3554
|
cursor: pointer;
|
|
3433
3555
|
user-select: none;
|
|
@@ -3449,9 +3571,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3449
3571
|
gap: 4px 6px;
|
|
3450
3572
|
}
|
|
3451
3573
|
|
|
3452
|
-
/* A swatch and its hex value inside one border: the pair is one answer to one
|
|
3453
|
-
question, and a separate button beside a text box reads as two. The swatch
|
|
3454
|
-
keeps its own outline so that white does not disappear into the field. */
|
|
3455
3574
|
.label-style-panel .label-color-field {
|
|
3456
3575
|
display: flex;
|
|
3457
3576
|
align-items: center;
|
|
@@ -3472,8 +3591,8 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3472
3591
|
width: 13px;
|
|
3473
3592
|
height: 13px;
|
|
3474
3593
|
margin-right: 6px;
|
|
3475
|
-
border: 1px solid
|
|
3476
|
-
border-radius: 2px;
|
|
3594
|
+
border: 1px solid rgba(0,0,0,0.22);
|
|
3595
|
+
/* border-radius: 2px; */
|
|
3477
3596
|
}
|
|
3478
3597
|
|
|
3479
3598
|
/* A swatch for a selection whose colours disagree: split rather than empty,
|
|
@@ -3505,6 +3624,23 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3505
3624
|
opacity: 0.45;
|
|
3506
3625
|
}
|
|
3507
3626
|
|
|
3627
|
+
/* The opacity at the end of a colour field, behind a divider the height of the
|
|
3628
|
+
field. Wide enough for "100%" and for "mixed", and no wider: the hex value
|
|
3629
|
+
beside it gets the rest. Selectors as specific as the colour field's input
|
|
3630
|
+
rules above, which would otherwise stretch it and take its divider away. */
|
|
3631
|
+
.label-style-panel .label-color-field input.label-opacity-input,
|
|
3632
|
+
.label-style-panel .label-color-field input.label-opacity-input:focus {
|
|
3633
|
+
flex: none;
|
|
3634
|
+
align-self: stretch;
|
|
3635
|
+
width: 44px;
|
|
3636
|
+
height: auto;
|
|
3637
|
+
margin: 0 -3px 0 4px;
|
|
3638
|
+
padding: 0 4px 0 6px;
|
|
3639
|
+
border: none;
|
|
3640
|
+
border-left: 1px solid var(--label-field-border);
|
|
3641
|
+
border-radius: 0;
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3508
3644
|
.label-color-row .label-color-picker input[type="text"] {
|
|
3509
3645
|
width: 45px;
|
|
3510
3646
|
}
|
|
@@ -3514,10 +3650,6 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
3514
3650
|
box-sizing: border-box;
|
|
3515
3651
|
}
|
|
3516
3652
|
|
|
3517
|
-
/* What a section of this panel says when there is nothing in it to set: the
|
|
3518
|
-
layer is drawn some way this panel cannot edit, or the thing the section is
|
|
3519
|
-
for has to be made in the console. Set like a caption, not like a field's
|
|
3520
|
-
value. */
|
|
3521
3653
|
.point-style-note {
|
|
3522
3654
|
color: #555;
|
|
3523
3655
|
line-height: 1.3;
|
|
@@ -3667,10 +3799,6 @@ body.dragging-color-picker * {
|
|
|
3667
3799
|
display: none;
|
|
3668
3800
|
}
|
|
3669
3801
|
|
|
3670
|
-
.label-editing-status {
|
|
3671
|
-
color: #555;
|
|
3672
|
-
}
|
|
3673
|
-
|
|
3674
3802
|
.label-style-selection-row .label-editing-clear {
|
|
3675
3803
|
margin-left: 8px;
|
|
3676
3804
|
color: var(--colored-text);
|
|
@@ -3701,7 +3829,7 @@ body.dragging-color-picker * {
|
|
|
3701
3829
|
.text-style-panel .label-position-grid {
|
|
3702
3830
|
grid-template-columns: repeat(3, 10px);
|
|
3703
3831
|
gap: 3px;
|
|
3704
|
-
margin-top: -
|
|
3832
|
+
margin-top: -15px;
|
|
3705
3833
|
margin-bottom: 3px;
|
|
3706
3834
|
}
|
|
3707
3835
|
|
|
@@ -3973,6 +4101,27 @@ body.dragging-color-picker * {
|
|
|
3973
4101
|
top: 1px;
|
|
3974
4102
|
}
|
|
3975
4103
|
|
|
4104
|
+
/* Active-layer name at the top of the arrow menu. inline-size containment
|
|
4105
|
+
keeps a long name from widening the menu: the heading takes the width set
|
|
4106
|
+
by the tool names and cuts the layer name short with an ellipsis. */
|
|
4107
|
+
.nav-menu-heading {
|
|
4108
|
+
contain: inline-size;
|
|
4109
|
+
overflow: hidden;
|
|
4110
|
+
text-overflow: ellipsis;
|
|
4111
|
+
white-space: nowrap;
|
|
4112
|
+
margin: 1px 10px 3px 10px;
|
|
4113
|
+
padding: 1px 0 3px 0;
|
|
4114
|
+
border-bottom: 1px solid #e4e4e4;
|
|
4115
|
+
color: #999;
|
|
4116
|
+
font-size: 11px;
|
|
4117
|
+
line-height: 12px;
|
|
4118
|
+
}
|
|
4119
|
+
|
|
4120
|
+
.nav-menu-divider {
|
|
4121
|
+
margin: 4px 10px;
|
|
4122
|
+
border-top: 1px solid #e4e4e4;
|
|
4123
|
+
}
|
|
4124
|
+
|
|
3976
4125
|
.save-menu {
|
|
3977
4126
|
text-align: right;
|
|
3978
4127
|
padding-bottom: 5px;
|