@aziontech/theme 4.3.1 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/v4/globals.css +105 -8
- package/dist/v4/globals.scss +105 -8
- package/package.json +1 -1
- package/src/scripts/build-tokens.mjs +12 -0
- package/src/scripts/compile-primitives.js +1 -1
- package/src/scripts/compile-theme.js +1 -1
- package/src/scripts/measure-comment.mjs +47 -0
- package/src/tokens/README.md +10 -2
- package/src/tokens/primitives/shape/shape.js +1 -1
- package/src/tokens/semantic/layouts.data.d.ts +8 -2
- package/src/tokens/semantic/layouts.data.d.ts.map +1 -1
- package/src/tokens/semantic/layouts.data.js +85 -24
- package/src/tokens/semantic/texts.data.d.ts +50 -0
- package/src/tokens/semantic/texts.data.d.ts.map +1 -1
- package/src/tokens/semantic/texts.data.js +86 -14
package/dist/v4/globals.css
CHANGED
|
@@ -704,8 +704,9 @@
|
|
|
704
704
|
--layout-measure-focused: var(--container-4xl);
|
|
705
705
|
--layout-measure-form: var(--container-4xl);
|
|
706
706
|
--layout-measure-form-create: var(--container-5xl);
|
|
707
|
-
--layout-measure-
|
|
708
|
-
--
|
|
707
|
+
--layout-measure-content: var(--container-3xl);
|
|
708
|
+
--layout-measure-site: var(--container-6xl);
|
|
709
|
+
--layout-measure-site-header: var(--container-7xl);
|
|
709
710
|
--layout-measure-control: var(--container-3xs);
|
|
710
711
|
--text-big-number-md-font-size: 1.25rem;
|
|
711
712
|
--text-big-number-md-line-height: 1.25;
|
|
@@ -719,72 +720,108 @@
|
|
|
719
720
|
--text-big-number-lg-line-height: 1.25;
|
|
720
721
|
--text-big-number-lg-font-weight: 400;
|
|
721
722
|
--text-big-number-lg-font-family: Proto Mono;
|
|
723
|
+
--text-amount-lg-text-wrap-style: balance;
|
|
724
|
+
--text-amount-lg-font-size: 1.875rem;
|
|
725
|
+
--text-amount-lg-line-height: 1.25;
|
|
726
|
+
--text-amount-lg-font-weight: 400;
|
|
727
|
+
--text-amount-lg-letter-spacing: -0.08em;
|
|
728
|
+
--text-amount-md-text-wrap-style: balance;
|
|
729
|
+
--text-amount-md-font-size: 1rem;
|
|
730
|
+
--text-amount-md-line-height: 1.25;
|
|
731
|
+
--text-amount-md-font-weight: 400;
|
|
732
|
+
--text-amount-md-letter-spacing: -0.08em;
|
|
733
|
+
--text-amount-sm-font-size: 1rem;
|
|
734
|
+
--text-amount-sm-line-height: 1.5;
|
|
735
|
+
--text-amount-sm-font-weight: 400;
|
|
736
|
+
--text-amount-sm-letter-spacing: -0.08em;
|
|
737
|
+
--text-heading-2xl-text-wrap-style: balance;
|
|
722
738
|
--text-heading-2xl-font-size: 1.875rem;
|
|
723
739
|
--text-heading-2xl-line-height: 1.25;
|
|
724
740
|
--text-heading-2xl-font-weight: 400;
|
|
741
|
+
--text-heading-2xl-letter-spacing: -0.05rem;
|
|
742
|
+
--text-heading-xl-text-wrap-style: balance;
|
|
725
743
|
--text-heading-xl-font-size: 1.25rem;
|
|
726
744
|
--text-heading-xl-line-height: 1.25;
|
|
727
745
|
--text-heading-xl-font-weight: 400;
|
|
746
|
+
--text-heading-xl-letter-spacing: -0.05rem;
|
|
747
|
+
--text-heading-lg-text-wrap-style: balance;
|
|
728
748
|
--text-heading-lg-font-size: 1.125rem;
|
|
729
749
|
--text-heading-lg-line-height: 1.25;
|
|
730
750
|
--text-heading-lg-font-weight: 400;
|
|
751
|
+
--text-heading-lg-letter-spacing: -0.05rem;
|
|
752
|
+
--text-heading-md-text-wrap-style: balance;
|
|
731
753
|
--text-heading-md-font-size: 1rem;
|
|
732
754
|
--text-heading-md-line-height: 1.25;
|
|
733
755
|
--text-heading-md-font-weight: 400;
|
|
756
|
+
--text-heading-md-letter-spacing: -0.05rem;
|
|
757
|
+
--text-heading-sm-text-wrap-style: balance;
|
|
734
758
|
--text-heading-sm-font-size: 0.875rem;
|
|
735
759
|
--text-heading-sm-line-height: 1.375;
|
|
736
760
|
--text-heading-sm-font-weight: 400;
|
|
761
|
+
--text-heading-sm-letter-spacing: -0.05rem;
|
|
762
|
+
--text-heading-xs-text-wrap-style: balance;
|
|
737
763
|
--text-heading-xs-font-size: 1rem;
|
|
738
764
|
--text-heading-xs-line-height: 1.375;
|
|
739
765
|
--text-heading-xs-font-weight: 400;
|
|
766
|
+
--text-heading-xs-letter-spacing: -0.05rem;
|
|
767
|
+
--text-heading-xxs-text-wrap-style: balance;
|
|
740
768
|
--text-heading-xxs-font-size: 0.875rem;
|
|
741
769
|
--text-heading-xxs-line-height: 1.375;
|
|
742
770
|
--text-heading-xxs-font-weight: 400;
|
|
771
|
+
--text-heading-xxs-letter-spacing: -0.05rem;
|
|
743
772
|
--text-label-lg-font-size: 1rem;
|
|
744
773
|
--text-label-lg-line-height: 1.5;
|
|
745
774
|
--text-label-lg-font-weight: 400;
|
|
775
|
+
--text-label-lg-letter-spacing: -0.025rem;
|
|
746
776
|
--text-label-md-font-size: 0.875rem;
|
|
747
777
|
--text-label-md-line-height: 1.5;
|
|
748
778
|
--text-label-md-font-weight: 400;
|
|
779
|
+
--text-label-md-letter-spacing: -0.025rem;
|
|
749
780
|
--text-label-sm-font-size: 0.75rem;
|
|
750
781
|
--text-label-sm-line-height: 1.5;
|
|
751
782
|
--text-label-sm-font-weight: 400;
|
|
783
|
+
--text-label-sm-letter-spacing: -0.025rem;
|
|
752
784
|
--text-label-code-sm-font-family: Roboto Mono;
|
|
753
785
|
--text-label-code-sm-font-size: 0.75rem;
|
|
754
786
|
--text-label-code-sm-line-height: 1;
|
|
755
787
|
--text-label-code-sm-font-weight: 400;
|
|
756
|
-
--text-label-code-sm-letter-spacing: 0;
|
|
788
|
+
--text-label-code-sm-letter-spacing: 0.025rem;
|
|
757
789
|
--text-body-code-sm-text-wrap-style: pretty;
|
|
758
790
|
--text-body-code-sm-font-family: Roboto Mono;
|
|
759
791
|
--text-body-code-sm-font-size: 0.75rem;
|
|
760
792
|
--text-body-code-sm-line-height: 1.625;
|
|
761
793
|
--text-body-code-sm-font-weight: 400;
|
|
762
|
-
--text-body-code-sm-letter-spacing: 0;
|
|
794
|
+
--text-body-code-sm-letter-spacing: 0.025rem;
|
|
763
795
|
--text-label-code-md-font-family: Roboto Mono;
|
|
764
796
|
--text-label-code-md-font-size: 0.875rem;
|
|
765
797
|
--text-label-code-md-line-height: 1;
|
|
766
798
|
--text-label-code-md-font-weight: 400;
|
|
767
|
-
--text-label-code-md-letter-spacing: 0;
|
|
799
|
+
--text-label-code-md-letter-spacing: 0.025rem;
|
|
768
800
|
--text-label-code-lg-font-family: Roboto Mono;
|
|
769
801
|
--text-label-code-lg-font-size: 1rem;
|
|
770
802
|
--text-label-code-lg-line-height: 1;
|
|
771
803
|
--text-label-code-lg-font-weight: 400;
|
|
772
|
-
--text-label-code-lg-letter-spacing: 0;
|
|
804
|
+
--text-label-code-lg-letter-spacing: 0.025rem;
|
|
805
|
+
--text-body-lg-text-wrap-style: pretty;
|
|
773
806
|
--text-body-lg-font-size: 1rem;
|
|
774
807
|
--text-body-lg-font-weight: 400;
|
|
775
808
|
--text-body-lg-line-height: 1.375;
|
|
809
|
+
--text-body-md-text-wrap-style: pretty;
|
|
776
810
|
--text-body-md-font-size: 1rem;
|
|
777
811
|
--text-body-md-font-weight: 400;
|
|
778
812
|
--text-body-md-line-height: 1.375;
|
|
779
813
|
--text-body-prose-md-font-size: 1rem;
|
|
780
814
|
--text-body-prose-md-font-weight: 400;
|
|
781
815
|
--text-body-prose-md-line-height: 1.625;
|
|
816
|
+
--text-body-sm-text-wrap-style: pretty;
|
|
782
817
|
--text-body-sm-font-size: 0.875rem;
|
|
783
818
|
--text-body-sm-font-weight: 400;
|
|
784
819
|
--text-body-sm-line-height: 1.375;
|
|
820
|
+
--text-body-xs-text-wrap-style: pretty;
|
|
785
821
|
--text-body-xs-font-size: 0.75rem;
|
|
786
822
|
--text-body-xs-font-weight: 400;
|
|
787
823
|
--text-body-xs-line-height: 1.375;
|
|
824
|
+
--text-body-xxs-text-wrap-style: pretty;
|
|
788
825
|
--text-body-xxs-font-size: 0.75rem;
|
|
789
826
|
--text-body-xxs-font-weight: 400;
|
|
790
827
|
--text-body-xxs-line-height: 1.5;
|
|
@@ -835,6 +872,8 @@
|
|
|
835
872
|
--text-big-number-md-font-size: 1.5rem;
|
|
836
873
|
--text-big-number-sm-font-size: 1.25rem;
|
|
837
874
|
--text-big-number-lg-font-size: 2.25rem;
|
|
875
|
+
--text-amount-lg-font-size: 3rem;
|
|
876
|
+
--text-amount-md-font-size: 1.25rem;
|
|
838
877
|
--text-heading-2xl-font-size: 3rem;
|
|
839
878
|
--text-heading-xl-font-size: 1.875rem;
|
|
840
879
|
--text-heading-md-font-size: 1.25rem;
|
|
@@ -845,6 +884,8 @@
|
|
|
845
884
|
@media (min-width: 768px) {
|
|
846
885
|
--text-big-number-md-font-size: 2.25rem;
|
|
847
886
|
--text-big-number-lg-font-size: 3.5rem;
|
|
887
|
+
--text-amount-lg-font-size: 3.5rem;
|
|
888
|
+
--text-amount-md-font-size: 1.5rem;
|
|
848
889
|
--text-heading-2xl-font-size: 3.5rem;
|
|
849
890
|
--text-heading-xl-font-size: 2.25rem;
|
|
850
891
|
--text-heading-lg-font-size: 1.875rem;
|
|
@@ -1148,64 +1189,104 @@
|
|
|
1148
1189
|
font-family: var(--text-big-number-lg-font-family);
|
|
1149
1190
|
}
|
|
1150
1191
|
|
|
1192
|
+
@utility text-amount-lg {
|
|
1193
|
+
text-wrap-style: var(--text-amount-lg-text-wrap-style);
|
|
1194
|
+
font-size: var(--text-amount-lg-font-size);
|
|
1195
|
+
line-height: var(--text-amount-lg-line-height);
|
|
1196
|
+
font-weight: var(--text-amount-lg-font-weight);
|
|
1197
|
+
letter-spacing: var(--text-amount-lg-letter-spacing);
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
@utility text-amount-md {
|
|
1201
|
+
text-wrap-style: var(--text-amount-md-text-wrap-style);
|
|
1202
|
+
font-size: var(--text-amount-md-font-size);
|
|
1203
|
+
line-height: var(--text-amount-md-line-height);
|
|
1204
|
+
font-weight: var(--text-amount-md-font-weight);
|
|
1205
|
+
letter-spacing: var(--text-amount-md-letter-spacing);
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
@utility text-amount-sm {
|
|
1209
|
+
font-size: var(--text-amount-sm-font-size);
|
|
1210
|
+
line-height: var(--text-amount-sm-line-height);
|
|
1211
|
+
font-weight: var(--text-amount-sm-font-weight);
|
|
1212
|
+
letter-spacing: var(--text-amount-sm-letter-spacing);
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1151
1215
|
@utility text-heading-2xl {
|
|
1216
|
+
text-wrap-style: var(--text-heading-2xl-text-wrap-style);
|
|
1152
1217
|
font-size: var(--text-heading-2xl-font-size);
|
|
1153
1218
|
line-height: var(--text-heading-2xl-line-height);
|
|
1154
1219
|
font-weight: var(--text-heading-2xl-font-weight);
|
|
1220
|
+
letter-spacing: var(--text-heading-2xl-letter-spacing);
|
|
1155
1221
|
}
|
|
1156
1222
|
|
|
1157
1223
|
@utility text-heading-xl {
|
|
1224
|
+
text-wrap-style: var(--text-heading-xl-text-wrap-style);
|
|
1158
1225
|
font-size: var(--text-heading-xl-font-size);
|
|
1159
1226
|
line-height: var(--text-heading-xl-line-height);
|
|
1160
1227
|
font-weight: var(--text-heading-xl-font-weight);
|
|
1228
|
+
letter-spacing: var(--text-heading-xl-letter-spacing);
|
|
1161
1229
|
}
|
|
1162
1230
|
|
|
1163
1231
|
@utility text-heading-lg {
|
|
1232
|
+
text-wrap-style: var(--text-heading-lg-text-wrap-style);
|
|
1164
1233
|
font-size: var(--text-heading-lg-font-size);
|
|
1165
1234
|
line-height: var(--text-heading-lg-line-height);
|
|
1166
1235
|
font-weight: var(--text-heading-lg-font-weight);
|
|
1236
|
+
letter-spacing: var(--text-heading-lg-letter-spacing);
|
|
1167
1237
|
}
|
|
1168
1238
|
|
|
1169
1239
|
@utility text-heading-md {
|
|
1240
|
+
text-wrap-style: var(--text-heading-md-text-wrap-style);
|
|
1170
1241
|
font-size: var(--text-heading-md-font-size);
|
|
1171
1242
|
line-height: var(--text-heading-md-line-height);
|
|
1172
1243
|
font-weight: var(--text-heading-md-font-weight);
|
|
1244
|
+
letter-spacing: var(--text-heading-md-letter-spacing);
|
|
1173
1245
|
}
|
|
1174
1246
|
|
|
1175
1247
|
@utility text-heading-sm {
|
|
1248
|
+
text-wrap-style: var(--text-heading-sm-text-wrap-style);
|
|
1176
1249
|
font-size: var(--text-heading-sm-font-size);
|
|
1177
1250
|
line-height: var(--text-heading-sm-line-height);
|
|
1178
1251
|
font-weight: var(--text-heading-sm-font-weight);
|
|
1252
|
+
letter-spacing: var(--text-heading-sm-letter-spacing);
|
|
1179
1253
|
}
|
|
1180
1254
|
|
|
1181
1255
|
@utility text-heading-xs {
|
|
1256
|
+
text-wrap-style: var(--text-heading-xs-text-wrap-style);
|
|
1182
1257
|
font-size: var(--text-heading-xs-font-size);
|
|
1183
1258
|
line-height: var(--text-heading-xs-line-height);
|
|
1184
1259
|
font-weight: var(--text-heading-xs-font-weight);
|
|
1260
|
+
letter-spacing: var(--text-heading-xs-letter-spacing);
|
|
1185
1261
|
}
|
|
1186
1262
|
|
|
1187
1263
|
@utility text-heading-xxs {
|
|
1264
|
+
text-wrap-style: var(--text-heading-xxs-text-wrap-style);
|
|
1188
1265
|
font-size: var(--text-heading-xxs-font-size);
|
|
1189
1266
|
line-height: var(--text-heading-xxs-line-height);
|
|
1190
1267
|
font-weight: var(--text-heading-xxs-font-weight);
|
|
1268
|
+
letter-spacing: var(--text-heading-xxs-letter-spacing);
|
|
1191
1269
|
}
|
|
1192
1270
|
|
|
1193
1271
|
@utility text-label-lg {
|
|
1194
1272
|
font-size: var(--text-label-lg-font-size);
|
|
1195
1273
|
line-height: var(--text-label-lg-line-height);
|
|
1196
1274
|
font-weight: var(--text-label-lg-font-weight);
|
|
1275
|
+
letter-spacing: var(--text-label-lg-letter-spacing);
|
|
1197
1276
|
}
|
|
1198
1277
|
|
|
1199
1278
|
@utility text-label-md {
|
|
1200
1279
|
font-size: var(--text-label-md-font-size);
|
|
1201
1280
|
line-height: var(--text-label-md-line-height);
|
|
1202
1281
|
font-weight: var(--text-label-md-font-weight);
|
|
1282
|
+
letter-spacing: var(--text-label-md-letter-spacing);
|
|
1203
1283
|
}
|
|
1204
1284
|
|
|
1205
1285
|
@utility text-label-sm {
|
|
1206
1286
|
font-size: var(--text-label-sm-font-size);
|
|
1207
1287
|
line-height: var(--text-label-sm-line-height);
|
|
1208
1288
|
font-weight: var(--text-label-sm-font-weight);
|
|
1289
|
+
letter-spacing: var(--text-label-sm-letter-spacing);
|
|
1209
1290
|
}
|
|
1210
1291
|
|
|
1211
1292
|
@utility text-label-code-sm {
|
|
@@ -1242,12 +1323,14 @@
|
|
|
1242
1323
|
}
|
|
1243
1324
|
|
|
1244
1325
|
@utility text-body-lg {
|
|
1326
|
+
text-wrap-style: var(--text-body-lg-text-wrap-style);
|
|
1245
1327
|
font-size: var(--text-body-lg-font-size);
|
|
1246
1328
|
font-weight: var(--text-body-lg-font-weight);
|
|
1247
1329
|
line-height: var(--text-body-lg-line-height);
|
|
1248
1330
|
}
|
|
1249
1331
|
|
|
1250
1332
|
@utility text-body-md {
|
|
1333
|
+
text-wrap-style: var(--text-body-md-text-wrap-style);
|
|
1251
1334
|
font-size: var(--text-body-md-font-size);
|
|
1252
1335
|
font-weight: var(--text-body-md-font-weight);
|
|
1253
1336
|
line-height: var(--text-body-md-line-height);
|
|
@@ -1260,18 +1343,21 @@
|
|
|
1260
1343
|
}
|
|
1261
1344
|
|
|
1262
1345
|
@utility text-body-sm {
|
|
1346
|
+
text-wrap-style: var(--text-body-sm-text-wrap-style);
|
|
1263
1347
|
font-size: var(--text-body-sm-font-size);
|
|
1264
1348
|
font-weight: var(--text-body-sm-font-weight);
|
|
1265
1349
|
line-height: var(--text-body-sm-line-height);
|
|
1266
1350
|
}
|
|
1267
1351
|
|
|
1268
1352
|
@utility text-body-xs {
|
|
1353
|
+
text-wrap-style: var(--text-body-xs-text-wrap-style);
|
|
1269
1354
|
font-size: var(--text-body-xs-font-size);
|
|
1270
1355
|
font-weight: var(--text-body-xs-font-weight);
|
|
1271
1356
|
line-height: var(--text-body-xs-line-height);
|
|
1272
1357
|
}
|
|
1273
1358
|
|
|
1274
1359
|
@utility text-body-xxs {
|
|
1360
|
+
text-wrap-style: var(--text-body-xxs-text-wrap-style);
|
|
1275
1361
|
font-size: var(--text-body-xxs-font-size);
|
|
1276
1362
|
font-weight: var(--text-body-xxs-font-weight);
|
|
1277
1363
|
line-height: var(--text-body-xxs-line-height);
|
|
@@ -1396,14 +1482,20 @@
|
|
|
1396
1482
|
&:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
|
|
1397
1483
|
}
|
|
1398
1484
|
|
|
1399
|
-
@utility layout-column-
|
|
1400
|
-
--layout-column-measure: var(--layout-measure-
|
|
1485
|
+
@utility layout-column-content {
|
|
1486
|
+
--layout-column-measure: var(--layout-measure-content);
|
|
1401
1487
|
margin-inline: auto;
|
|
1402
1488
|
width: 100%;
|
|
1403
1489
|
max-width: var(--layout-column-measure);
|
|
1404
1490
|
&:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
|
|
1405
1491
|
}
|
|
1406
1492
|
|
|
1493
|
+
@utility layout-column-site {
|
|
1494
|
+
margin-inline: auto;
|
|
1495
|
+
width: 100%;
|
|
1496
|
+
max-width: min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline));
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1407
1499
|
@utility layout-field-control {
|
|
1408
1500
|
&:not(#\#) { display: flex; flex: 1 1 0%; justify-content: flex-end; max-width: var(--layout-measure-control); }
|
|
1409
1501
|
}
|
|
@@ -1553,6 +1645,11 @@
|
|
|
1553
1645
|
@utility border-info-contrast { border-color: var(--info-contrast); }
|
|
1554
1646
|
|
|
1555
1647
|
@layer base {
|
|
1648
|
+
html {
|
|
1649
|
+
-webkit-font-smoothing: antialiased;
|
|
1650
|
+
-moz-osx-font-smoothing: grayscale;
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1556
1653
|
button:not(:disabled),
|
|
1557
1654
|
[role="button"]:not([aria-disabled="true"]),
|
|
1558
1655
|
summary {
|
package/dist/v4/globals.scss
CHANGED
|
@@ -704,8 +704,9 @@
|
|
|
704
704
|
--layout-measure-focused: var(--container-4xl);
|
|
705
705
|
--layout-measure-form: var(--container-4xl);
|
|
706
706
|
--layout-measure-form-create: var(--container-5xl);
|
|
707
|
-
--layout-measure-
|
|
708
|
-
--
|
|
707
|
+
--layout-measure-content: var(--container-3xl);
|
|
708
|
+
--layout-measure-site: var(--container-6xl);
|
|
709
|
+
--layout-measure-site-header: var(--container-7xl);
|
|
709
710
|
--layout-measure-control: var(--container-3xs);
|
|
710
711
|
--text-big-number-md-font-size: 1.25rem;
|
|
711
712
|
--text-big-number-md-line-height: 1.25;
|
|
@@ -719,72 +720,108 @@
|
|
|
719
720
|
--text-big-number-lg-line-height: 1.25;
|
|
720
721
|
--text-big-number-lg-font-weight: 400;
|
|
721
722
|
--text-big-number-lg-font-family: Proto Mono;
|
|
723
|
+
--text-amount-lg-text-wrap-style: balance;
|
|
724
|
+
--text-amount-lg-font-size: 1.875rem;
|
|
725
|
+
--text-amount-lg-line-height: 1.25;
|
|
726
|
+
--text-amount-lg-font-weight: 400;
|
|
727
|
+
--text-amount-lg-letter-spacing: -0.08em;
|
|
728
|
+
--text-amount-md-text-wrap-style: balance;
|
|
729
|
+
--text-amount-md-font-size: 1rem;
|
|
730
|
+
--text-amount-md-line-height: 1.25;
|
|
731
|
+
--text-amount-md-font-weight: 400;
|
|
732
|
+
--text-amount-md-letter-spacing: -0.08em;
|
|
733
|
+
--text-amount-sm-font-size: 1rem;
|
|
734
|
+
--text-amount-sm-line-height: 1.5;
|
|
735
|
+
--text-amount-sm-font-weight: 400;
|
|
736
|
+
--text-amount-sm-letter-spacing: -0.08em;
|
|
737
|
+
--text-heading-2xl-text-wrap-style: balance;
|
|
722
738
|
--text-heading-2xl-font-size: 1.875rem;
|
|
723
739
|
--text-heading-2xl-line-height: 1.25;
|
|
724
740
|
--text-heading-2xl-font-weight: 400;
|
|
741
|
+
--text-heading-2xl-letter-spacing: -0.05rem;
|
|
742
|
+
--text-heading-xl-text-wrap-style: balance;
|
|
725
743
|
--text-heading-xl-font-size: 1.25rem;
|
|
726
744
|
--text-heading-xl-line-height: 1.25;
|
|
727
745
|
--text-heading-xl-font-weight: 400;
|
|
746
|
+
--text-heading-xl-letter-spacing: -0.05rem;
|
|
747
|
+
--text-heading-lg-text-wrap-style: balance;
|
|
728
748
|
--text-heading-lg-font-size: 1.125rem;
|
|
729
749
|
--text-heading-lg-line-height: 1.25;
|
|
730
750
|
--text-heading-lg-font-weight: 400;
|
|
751
|
+
--text-heading-lg-letter-spacing: -0.05rem;
|
|
752
|
+
--text-heading-md-text-wrap-style: balance;
|
|
731
753
|
--text-heading-md-font-size: 1rem;
|
|
732
754
|
--text-heading-md-line-height: 1.25;
|
|
733
755
|
--text-heading-md-font-weight: 400;
|
|
756
|
+
--text-heading-md-letter-spacing: -0.05rem;
|
|
757
|
+
--text-heading-sm-text-wrap-style: balance;
|
|
734
758
|
--text-heading-sm-font-size: 0.875rem;
|
|
735
759
|
--text-heading-sm-line-height: 1.375;
|
|
736
760
|
--text-heading-sm-font-weight: 400;
|
|
761
|
+
--text-heading-sm-letter-spacing: -0.05rem;
|
|
762
|
+
--text-heading-xs-text-wrap-style: balance;
|
|
737
763
|
--text-heading-xs-font-size: 1rem;
|
|
738
764
|
--text-heading-xs-line-height: 1.375;
|
|
739
765
|
--text-heading-xs-font-weight: 400;
|
|
766
|
+
--text-heading-xs-letter-spacing: -0.05rem;
|
|
767
|
+
--text-heading-xxs-text-wrap-style: balance;
|
|
740
768
|
--text-heading-xxs-font-size: 0.875rem;
|
|
741
769
|
--text-heading-xxs-line-height: 1.375;
|
|
742
770
|
--text-heading-xxs-font-weight: 400;
|
|
771
|
+
--text-heading-xxs-letter-spacing: -0.05rem;
|
|
743
772
|
--text-label-lg-font-size: 1rem;
|
|
744
773
|
--text-label-lg-line-height: 1.5;
|
|
745
774
|
--text-label-lg-font-weight: 400;
|
|
775
|
+
--text-label-lg-letter-spacing: -0.025rem;
|
|
746
776
|
--text-label-md-font-size: 0.875rem;
|
|
747
777
|
--text-label-md-line-height: 1.5;
|
|
748
778
|
--text-label-md-font-weight: 400;
|
|
779
|
+
--text-label-md-letter-spacing: -0.025rem;
|
|
749
780
|
--text-label-sm-font-size: 0.75rem;
|
|
750
781
|
--text-label-sm-line-height: 1.5;
|
|
751
782
|
--text-label-sm-font-weight: 400;
|
|
783
|
+
--text-label-sm-letter-spacing: -0.025rem;
|
|
752
784
|
--text-label-code-sm-font-family: Roboto Mono;
|
|
753
785
|
--text-label-code-sm-font-size: 0.75rem;
|
|
754
786
|
--text-label-code-sm-line-height: 1;
|
|
755
787
|
--text-label-code-sm-font-weight: 400;
|
|
756
|
-
--text-label-code-sm-letter-spacing: 0;
|
|
788
|
+
--text-label-code-sm-letter-spacing: 0.025rem;
|
|
757
789
|
--text-body-code-sm-text-wrap-style: pretty;
|
|
758
790
|
--text-body-code-sm-font-family: Roboto Mono;
|
|
759
791
|
--text-body-code-sm-font-size: 0.75rem;
|
|
760
792
|
--text-body-code-sm-line-height: 1.625;
|
|
761
793
|
--text-body-code-sm-font-weight: 400;
|
|
762
|
-
--text-body-code-sm-letter-spacing: 0;
|
|
794
|
+
--text-body-code-sm-letter-spacing: 0.025rem;
|
|
763
795
|
--text-label-code-md-font-family: Roboto Mono;
|
|
764
796
|
--text-label-code-md-font-size: 0.875rem;
|
|
765
797
|
--text-label-code-md-line-height: 1;
|
|
766
798
|
--text-label-code-md-font-weight: 400;
|
|
767
|
-
--text-label-code-md-letter-spacing: 0;
|
|
799
|
+
--text-label-code-md-letter-spacing: 0.025rem;
|
|
768
800
|
--text-label-code-lg-font-family: Roboto Mono;
|
|
769
801
|
--text-label-code-lg-font-size: 1rem;
|
|
770
802
|
--text-label-code-lg-line-height: 1;
|
|
771
803
|
--text-label-code-lg-font-weight: 400;
|
|
772
|
-
--text-label-code-lg-letter-spacing: 0;
|
|
804
|
+
--text-label-code-lg-letter-spacing: 0.025rem;
|
|
805
|
+
--text-body-lg-text-wrap-style: pretty;
|
|
773
806
|
--text-body-lg-font-size: 1rem;
|
|
774
807
|
--text-body-lg-font-weight: 400;
|
|
775
808
|
--text-body-lg-line-height: 1.375;
|
|
809
|
+
--text-body-md-text-wrap-style: pretty;
|
|
776
810
|
--text-body-md-font-size: 1rem;
|
|
777
811
|
--text-body-md-font-weight: 400;
|
|
778
812
|
--text-body-md-line-height: 1.375;
|
|
779
813
|
--text-body-prose-md-font-size: 1rem;
|
|
780
814
|
--text-body-prose-md-font-weight: 400;
|
|
781
815
|
--text-body-prose-md-line-height: 1.625;
|
|
816
|
+
--text-body-sm-text-wrap-style: pretty;
|
|
782
817
|
--text-body-sm-font-size: 0.875rem;
|
|
783
818
|
--text-body-sm-font-weight: 400;
|
|
784
819
|
--text-body-sm-line-height: 1.375;
|
|
820
|
+
--text-body-xs-text-wrap-style: pretty;
|
|
785
821
|
--text-body-xs-font-size: 0.75rem;
|
|
786
822
|
--text-body-xs-font-weight: 400;
|
|
787
823
|
--text-body-xs-line-height: 1.375;
|
|
824
|
+
--text-body-xxs-text-wrap-style: pretty;
|
|
788
825
|
--text-body-xxs-font-size: 0.75rem;
|
|
789
826
|
--text-body-xxs-font-weight: 400;
|
|
790
827
|
--text-body-xxs-line-height: 1.5;
|
|
@@ -835,6 +872,8 @@
|
|
|
835
872
|
--text-big-number-md-font-size: 1.5rem;
|
|
836
873
|
--text-big-number-sm-font-size: 1.25rem;
|
|
837
874
|
--text-big-number-lg-font-size: 2.25rem;
|
|
875
|
+
--text-amount-lg-font-size: 3rem;
|
|
876
|
+
--text-amount-md-font-size: 1.25rem;
|
|
838
877
|
--text-heading-2xl-font-size: 3rem;
|
|
839
878
|
--text-heading-xl-font-size: 1.875rem;
|
|
840
879
|
--text-heading-md-font-size: 1.25rem;
|
|
@@ -845,6 +884,8 @@
|
|
|
845
884
|
@media (min-width: 768px) {
|
|
846
885
|
--text-big-number-md-font-size: 2.25rem;
|
|
847
886
|
--text-big-number-lg-font-size: 3.5rem;
|
|
887
|
+
--text-amount-lg-font-size: 3.5rem;
|
|
888
|
+
--text-amount-md-font-size: 1.5rem;
|
|
848
889
|
--text-heading-2xl-font-size: 3.5rem;
|
|
849
890
|
--text-heading-xl-font-size: 2.25rem;
|
|
850
891
|
--text-heading-lg-font-size: 1.875rem;
|
|
@@ -1148,64 +1189,104 @@
|
|
|
1148
1189
|
font-family: var(--text-big-number-lg-font-family);
|
|
1149
1190
|
}
|
|
1150
1191
|
|
|
1192
|
+
@utility text-amount-lg {
|
|
1193
|
+
text-wrap-style: var(--text-amount-lg-text-wrap-style);
|
|
1194
|
+
font-size: var(--text-amount-lg-font-size);
|
|
1195
|
+
line-height: var(--text-amount-lg-line-height);
|
|
1196
|
+
font-weight: var(--text-amount-lg-font-weight);
|
|
1197
|
+
letter-spacing: var(--text-amount-lg-letter-spacing);
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
@utility text-amount-md {
|
|
1201
|
+
text-wrap-style: var(--text-amount-md-text-wrap-style);
|
|
1202
|
+
font-size: var(--text-amount-md-font-size);
|
|
1203
|
+
line-height: var(--text-amount-md-line-height);
|
|
1204
|
+
font-weight: var(--text-amount-md-font-weight);
|
|
1205
|
+
letter-spacing: var(--text-amount-md-letter-spacing);
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
@utility text-amount-sm {
|
|
1209
|
+
font-size: var(--text-amount-sm-font-size);
|
|
1210
|
+
line-height: var(--text-amount-sm-line-height);
|
|
1211
|
+
font-weight: var(--text-amount-sm-font-weight);
|
|
1212
|
+
letter-spacing: var(--text-amount-sm-letter-spacing);
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1151
1215
|
@utility text-heading-2xl {
|
|
1216
|
+
text-wrap-style: var(--text-heading-2xl-text-wrap-style);
|
|
1152
1217
|
font-size: var(--text-heading-2xl-font-size);
|
|
1153
1218
|
line-height: var(--text-heading-2xl-line-height);
|
|
1154
1219
|
font-weight: var(--text-heading-2xl-font-weight);
|
|
1220
|
+
letter-spacing: var(--text-heading-2xl-letter-spacing);
|
|
1155
1221
|
}
|
|
1156
1222
|
|
|
1157
1223
|
@utility text-heading-xl {
|
|
1224
|
+
text-wrap-style: var(--text-heading-xl-text-wrap-style);
|
|
1158
1225
|
font-size: var(--text-heading-xl-font-size);
|
|
1159
1226
|
line-height: var(--text-heading-xl-line-height);
|
|
1160
1227
|
font-weight: var(--text-heading-xl-font-weight);
|
|
1228
|
+
letter-spacing: var(--text-heading-xl-letter-spacing);
|
|
1161
1229
|
}
|
|
1162
1230
|
|
|
1163
1231
|
@utility text-heading-lg {
|
|
1232
|
+
text-wrap-style: var(--text-heading-lg-text-wrap-style);
|
|
1164
1233
|
font-size: var(--text-heading-lg-font-size);
|
|
1165
1234
|
line-height: var(--text-heading-lg-line-height);
|
|
1166
1235
|
font-weight: var(--text-heading-lg-font-weight);
|
|
1236
|
+
letter-spacing: var(--text-heading-lg-letter-spacing);
|
|
1167
1237
|
}
|
|
1168
1238
|
|
|
1169
1239
|
@utility text-heading-md {
|
|
1240
|
+
text-wrap-style: var(--text-heading-md-text-wrap-style);
|
|
1170
1241
|
font-size: var(--text-heading-md-font-size);
|
|
1171
1242
|
line-height: var(--text-heading-md-line-height);
|
|
1172
1243
|
font-weight: var(--text-heading-md-font-weight);
|
|
1244
|
+
letter-spacing: var(--text-heading-md-letter-spacing);
|
|
1173
1245
|
}
|
|
1174
1246
|
|
|
1175
1247
|
@utility text-heading-sm {
|
|
1248
|
+
text-wrap-style: var(--text-heading-sm-text-wrap-style);
|
|
1176
1249
|
font-size: var(--text-heading-sm-font-size);
|
|
1177
1250
|
line-height: var(--text-heading-sm-line-height);
|
|
1178
1251
|
font-weight: var(--text-heading-sm-font-weight);
|
|
1252
|
+
letter-spacing: var(--text-heading-sm-letter-spacing);
|
|
1179
1253
|
}
|
|
1180
1254
|
|
|
1181
1255
|
@utility text-heading-xs {
|
|
1256
|
+
text-wrap-style: var(--text-heading-xs-text-wrap-style);
|
|
1182
1257
|
font-size: var(--text-heading-xs-font-size);
|
|
1183
1258
|
line-height: var(--text-heading-xs-line-height);
|
|
1184
1259
|
font-weight: var(--text-heading-xs-font-weight);
|
|
1260
|
+
letter-spacing: var(--text-heading-xs-letter-spacing);
|
|
1185
1261
|
}
|
|
1186
1262
|
|
|
1187
1263
|
@utility text-heading-xxs {
|
|
1264
|
+
text-wrap-style: var(--text-heading-xxs-text-wrap-style);
|
|
1188
1265
|
font-size: var(--text-heading-xxs-font-size);
|
|
1189
1266
|
line-height: var(--text-heading-xxs-line-height);
|
|
1190
1267
|
font-weight: var(--text-heading-xxs-font-weight);
|
|
1268
|
+
letter-spacing: var(--text-heading-xxs-letter-spacing);
|
|
1191
1269
|
}
|
|
1192
1270
|
|
|
1193
1271
|
@utility text-label-lg {
|
|
1194
1272
|
font-size: var(--text-label-lg-font-size);
|
|
1195
1273
|
line-height: var(--text-label-lg-line-height);
|
|
1196
1274
|
font-weight: var(--text-label-lg-font-weight);
|
|
1275
|
+
letter-spacing: var(--text-label-lg-letter-spacing);
|
|
1197
1276
|
}
|
|
1198
1277
|
|
|
1199
1278
|
@utility text-label-md {
|
|
1200
1279
|
font-size: var(--text-label-md-font-size);
|
|
1201
1280
|
line-height: var(--text-label-md-line-height);
|
|
1202
1281
|
font-weight: var(--text-label-md-font-weight);
|
|
1282
|
+
letter-spacing: var(--text-label-md-letter-spacing);
|
|
1203
1283
|
}
|
|
1204
1284
|
|
|
1205
1285
|
@utility text-label-sm {
|
|
1206
1286
|
font-size: var(--text-label-sm-font-size);
|
|
1207
1287
|
line-height: var(--text-label-sm-line-height);
|
|
1208
1288
|
font-weight: var(--text-label-sm-font-weight);
|
|
1289
|
+
letter-spacing: var(--text-label-sm-letter-spacing);
|
|
1209
1290
|
}
|
|
1210
1291
|
|
|
1211
1292
|
@utility text-label-code-sm {
|
|
@@ -1242,12 +1323,14 @@
|
|
|
1242
1323
|
}
|
|
1243
1324
|
|
|
1244
1325
|
@utility text-body-lg {
|
|
1326
|
+
text-wrap-style: var(--text-body-lg-text-wrap-style);
|
|
1245
1327
|
font-size: var(--text-body-lg-font-size);
|
|
1246
1328
|
font-weight: var(--text-body-lg-font-weight);
|
|
1247
1329
|
line-height: var(--text-body-lg-line-height);
|
|
1248
1330
|
}
|
|
1249
1331
|
|
|
1250
1332
|
@utility text-body-md {
|
|
1333
|
+
text-wrap-style: var(--text-body-md-text-wrap-style);
|
|
1251
1334
|
font-size: var(--text-body-md-font-size);
|
|
1252
1335
|
font-weight: var(--text-body-md-font-weight);
|
|
1253
1336
|
line-height: var(--text-body-md-line-height);
|
|
@@ -1260,18 +1343,21 @@
|
|
|
1260
1343
|
}
|
|
1261
1344
|
|
|
1262
1345
|
@utility text-body-sm {
|
|
1346
|
+
text-wrap-style: var(--text-body-sm-text-wrap-style);
|
|
1263
1347
|
font-size: var(--text-body-sm-font-size);
|
|
1264
1348
|
font-weight: var(--text-body-sm-font-weight);
|
|
1265
1349
|
line-height: var(--text-body-sm-line-height);
|
|
1266
1350
|
}
|
|
1267
1351
|
|
|
1268
1352
|
@utility text-body-xs {
|
|
1353
|
+
text-wrap-style: var(--text-body-xs-text-wrap-style);
|
|
1269
1354
|
font-size: var(--text-body-xs-font-size);
|
|
1270
1355
|
font-weight: var(--text-body-xs-font-weight);
|
|
1271
1356
|
line-height: var(--text-body-xs-line-height);
|
|
1272
1357
|
}
|
|
1273
1358
|
|
|
1274
1359
|
@utility text-body-xxs {
|
|
1360
|
+
text-wrap-style: var(--text-body-xxs-text-wrap-style);
|
|
1275
1361
|
font-size: var(--text-body-xxs-font-size);
|
|
1276
1362
|
font-weight: var(--text-body-xxs-font-weight);
|
|
1277
1363
|
line-height: var(--text-body-xxs-line-height);
|
|
@@ -1396,14 +1482,20 @@
|
|
|
1396
1482
|
&:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
|
|
1397
1483
|
}
|
|
1398
1484
|
|
|
1399
|
-
@utility layout-column-
|
|
1400
|
-
--layout-column-measure: var(--layout-measure-
|
|
1485
|
+
@utility layout-column-content {
|
|
1486
|
+
--layout-column-measure: var(--layout-measure-content);
|
|
1401
1487
|
margin-inline: auto;
|
|
1402
1488
|
width: 100%;
|
|
1403
1489
|
max-width: var(--layout-column-measure);
|
|
1404
1490
|
&:is(.layout-boundary, .layout-boundary-inline) { max-width: calc(var(--layout-column-measure) + 2 * var(--layout-boundary-inline)); }
|
|
1405
1491
|
}
|
|
1406
1492
|
|
|
1493
|
+
@utility layout-column-site {
|
|
1494
|
+
margin-inline: auto;
|
|
1495
|
+
width: 100%;
|
|
1496
|
+
max-width: min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline));
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1407
1499
|
@utility layout-field-control {
|
|
1408
1500
|
&:not(#\#) { display: flex; flex: 1 1 0%; justify-content: flex-end; max-width: var(--layout-measure-control); }
|
|
1409
1501
|
}
|
|
@@ -1553,6 +1645,11 @@
|
|
|
1553
1645
|
@utility border-info-contrast { border-color: var(--info-contrast); }
|
|
1554
1646
|
|
|
1555
1647
|
@layer base {
|
|
1648
|
+
html {
|
|
1649
|
+
-webkit-font-smoothing: antialiased;
|
|
1650
|
+
-moz-osx-font-smoothing: grayscale;
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1556
1653
|
button:not(:disabled),
|
|
1557
1654
|
[role="button"]:not([aria-disabled="true"]),
|
|
1558
1655
|
summary {
|
package/package.json
CHANGED
|
@@ -35,11 +35,13 @@ import { animateExtras, keyframes } from '../tokens/primitives/animations/keyfra
|
|
|
35
35
|
import { breakpoints } from '../tokens/primitives/breakpoints.js';
|
|
36
36
|
import { compilePrimitivesVars } from './compile-primitives.js';
|
|
37
37
|
import { compileThemeCss, compileThemeVars } from './compile-theme.js';
|
|
38
|
+
import { container } from '../tokens/primitives/shape/container.js';
|
|
38
39
|
import { containersData } from '../tokens/semantic/containers.data.js';
|
|
39
40
|
import { layoutsData, layoutsUtilities } from '../tokens/semantic/layouts.data.js';
|
|
40
41
|
import { spacingsData } from '../tokens/semantic/spacings.data.js';
|
|
41
42
|
import { textsData } from '../tokens/semantic/texts.data.js';
|
|
42
43
|
import { zIndicesData } from '../tokens/semantic/z-indices.data.js';
|
|
44
|
+
import { assertMeasureCommentsMatch } from './measure-comment.mjs';
|
|
43
45
|
import { assertNoZeroWithUnit } from './zero-unit.mjs';
|
|
44
46
|
|
|
45
47
|
const BREAKPOINT_ORDER = ['sm', 'md', 'lg', 'xl', '2xl'];
|
|
@@ -270,6 +272,11 @@ const emitLayoutUtilities = () => emitUtilities(layoutsUtilities);
|
|
|
270
272
|
const emitBaseLayer = () =>
|
|
271
273
|
[
|
|
272
274
|
'@layer base {',
|
|
275
|
+
' html {',
|
|
276
|
+
' -webkit-font-smoothing: antialiased;',
|
|
277
|
+
' -moz-osx-font-smoothing: grayscale;',
|
|
278
|
+
' }',
|
|
279
|
+
'',
|
|
273
280
|
' button:not(:disabled),',
|
|
274
281
|
' [role="button"]:not([aria-disabled="true"]),',
|
|
275
282
|
' summary {',
|
|
@@ -431,6 +438,11 @@ const importIdx = rawCss.indexOf(IMPORT_LINE);
|
|
|
431
438
|
if (importIdx === -1) throw new Error('emitCssV4 output is missing the tailwind import line');
|
|
432
439
|
const afterImport = importIdx + IMPORT_LINE.length;
|
|
433
440
|
const css = `${rawCss.slice(0, afterImport)}\n\n${fontsCss}${rawCss.slice(afterImport)}`;
|
|
441
|
+
assertMeasureCommentsMatch(
|
|
442
|
+
await readFile(resolve(__dirname, '../tokens/semantic/layouts.data.js'), 'utf8'),
|
|
443
|
+
container,
|
|
444
|
+
'tokens/semantic/layouts.data.js',
|
|
445
|
+
);
|
|
434
446
|
assertNoZeroWithUnit(css, 'globals.css');
|
|
435
447
|
await writeFile(resolve(dir, 'globals.css'), css, 'utf8');
|
|
436
448
|
await writeFile(resolve(dir, 'globals.scss'), css, 'utf8');
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
* but for primitives only — no semantic light/dark split.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { primitives as colorPrimitives } from '../tokens/primitives/colors/colors.js'
|
|
11
10
|
import { animate } from '../tokens/primitives/animations/animate.js'
|
|
12
11
|
import { ease } from '../tokens/primitives/animations/ease.js'
|
|
13
12
|
import { borderWidths } from '../tokens/primitives/border-widths.js'
|
|
14
13
|
import { breakpoints } from '../tokens/primitives/breakpoints.js'
|
|
14
|
+
import { primitives as colorPrimitives } from '../tokens/primitives/colors/colors.js'
|
|
15
15
|
import { blur } from '../tokens/primitives/effects/blur.js'
|
|
16
16
|
import { dropShadow } from '../tokens/primitives/effects/drop-shadow.js'
|
|
17
17
|
import { insetShadow } from '../tokens/primitives/effects/inset-shadow.js'
|
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
} from '../tokens/primitives/colors/colors.js'
|
|
14
14
|
import { accent } from '../tokens/theme/accent.js'
|
|
15
15
|
import { background } from '../tokens/theme/background.js'
|
|
16
|
-
import { codeSintax } from '../tokens/theme/code-sintax.js'
|
|
17
16
|
import { border } from '../tokens/theme/border.js'
|
|
17
|
+
import { codeSintax } from '../tokens/theme/code-sintax.js'
|
|
18
18
|
import { danger } from '../tokens/theme/feedback/danger.js'
|
|
19
19
|
import { info } from '../tokens/theme/feedback/info.js'
|
|
20
20
|
import { success } from '../tokens/theme/feedback/success.js'
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Measure-comment gate for the layout tokens — the check that keeps a `// 1620px`
|
|
3
|
+
* annotation honest against the `var(--container-*)` it annotates. The VALUE is the
|
|
4
|
+
* source of truth; the comment is a reader's convenience, and a comment that disagrees
|
|
5
|
+
* with it is worse than no comment at all.
|
|
6
|
+
*
|
|
7
|
+
* Nothing else sees this: the annotation is a JS comment, so it never reaches the
|
|
8
|
+
* compiled CSS the zero-unit gate reads, and no linter resolves a `var()` back to the
|
|
9
|
+
* rung it names. A value can therefore be changed — or reverted — under a comment that
|
|
10
|
+
* still describes the old one, with every gate green. Pure: node built-ins only.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const MEASURE_LINE = /'([\w-]+)':\s*'var\(--container-([\w]+)\)',?\s*\/\/\s*(\d+)px/
|
|
14
|
+
|
|
15
|
+
/** Every `'token': 'var(--container-X)', // Npx` line, as `{ token, rung, claimed, n }`. */
|
|
16
|
+
export const findMeasureComments = (sourceText) =>
|
|
17
|
+
sourceText.split('\n').flatMap((line, i) => {
|
|
18
|
+
const m = line.match(MEASURE_LINE)
|
|
19
|
+
return m ? [{ token: m[1], rung: m[2], claimed: Number(m[3]), n: i + 1 }] : []
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Throw when a measure comment disagrees with the container rung it annotates, or names
|
|
24
|
+
* a rung that does not exist. `container` is the rung table; `source` names the artifact.
|
|
25
|
+
*/
|
|
26
|
+
export const assertMeasureCommentsMatch = (sourceText, container, source = 'layouts.data.js') => {
|
|
27
|
+
const rows = findMeasureComments(sourceText)
|
|
28
|
+
const wrong = rows.flatMap(({ token, rung, claimed, n }) => {
|
|
29
|
+
const real = container[rung]
|
|
30
|
+
if (real === undefined) return [{ token, rung, claimed, n, real: null }]
|
|
31
|
+
return parseInt(real, 10) === claimed ? [] : [{ token, rung, claimed, n, real }]
|
|
32
|
+
})
|
|
33
|
+
if (wrong.length === 0) return
|
|
34
|
+
|
|
35
|
+
const detail = wrong
|
|
36
|
+
.map(({ token, rung, claimed, n, real }) =>
|
|
37
|
+
real === null
|
|
38
|
+
? ` ${source}:${n} ${token} → --container-${rung} is not a rung of the ladder`
|
|
39
|
+
: ` ${source}:${n} ${token} → --container-${rung} is ${real}, comment says ${claimed}px`
|
|
40
|
+
)
|
|
41
|
+
.join('\n')
|
|
42
|
+
throw new Error(
|
|
43
|
+
`build:tokens — ${wrong.length} measure comment(s) disagree with the token value.\n${detail}\n` +
|
|
44
|
+
'The value is the source of truth: fix the comment to match it, or change the rung if the ' +
|
|
45
|
+
'value is what is wrong. Rungs live in src/tokens/primitives/shape/container.js.'
|
|
46
|
+
)
|
|
47
|
+
}
|
package/src/tokens/README.md
CHANGED
|
@@ -117,6 +117,8 @@ src/
|
|
|
117
117
|
├── refs.js # tokenRef helper + isTokenRef guard + assertResolvedRefs
|
|
118
118
|
├── compile-primitives.js # flattens primitive trees into CSS vars
|
|
119
119
|
├── compile-theme.js # semantic light/dark compiler (exported as ./theme-colors)
|
|
120
|
+
├── zero-unit.mjs # build gate: a zero length carries no unit
|
|
121
|
+
├── measure-comment.mjs # build gate: a `// Npx` comment matches its rung
|
|
120
122
|
└── build-tokens.mjs # main entrypoint: emits the dist/v4 bundle
|
|
121
123
|
```
|
|
122
124
|
|
|
@@ -202,8 +204,14 @@ free. Giving it its own map would duplicate the spacing scale into layout and le
|
|
|
202
204
|
|
|
203
205
|
The group also ships `layoutsUtilities`, the container-system classes (`.layout-column`,
|
|
204
206
|
`.layout-boundary`, …) emitted as Tailwind v4 `@utility` blocks so they support variants
|
|
205
|
-
(`md:layout-column`).
|
|
206
|
-
|
|
207
|
+
(`md:layout-column`). Each entry is a rule body: a string value is a declaration, an object value is
|
|
208
|
+
a nested rule keyed by a literal selector (`'&:first-child'`).
|
|
209
|
+
|
|
210
|
+
A measure carries a `// 1620px` annotation for the reader, and **the token value is the source of
|
|
211
|
+
truth for it** — the comment is a convenience, never the decision. `measure-comment.mjs` resolves
|
|
212
|
+
every annotated `var(--container-*)` back to its rung and **fails the build** when the two disagree,
|
|
213
|
+
because nothing else can see this: the annotation is a JS comment, so it never reaches the compiled
|
|
214
|
+
CSS, and no linter resolves a `var()` to the value it names.
|
|
207
215
|
|
|
208
216
|
---
|
|
209
217
|
|
|
@@ -23,11 +23,17 @@ export const layoutsData: {
|
|
|
23
23
|
'layout-measure-focused': string;
|
|
24
24
|
'layout-measure-form': string;
|
|
25
25
|
'layout-measure-form-create': string;
|
|
26
|
-
'layout-measure-
|
|
27
|
-
'
|
|
26
|
+
'layout-measure-content': string;
|
|
27
|
+
'layout-measure-site': string;
|
|
28
|
+
'layout-measure-site-header': string;
|
|
28
29
|
'layout-measure-control': string;
|
|
29
30
|
};
|
|
30
31
|
export const layoutsUtilities: {
|
|
32
|
+
'layout-column-site': {
|
|
33
|
+
'margin-inline': string;
|
|
34
|
+
width: string;
|
|
35
|
+
'max-width': string;
|
|
36
|
+
};
|
|
31
37
|
'layout-field-control': {
|
|
32
38
|
'&:not(#\\#)': {
|
|
33
39
|
display: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layouts.data.d.ts","sourceRoot":"","sources":["layouts.data.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH
|
|
1
|
+
{"version":3,"file":"layouts.data.d.ts","sourceRoot":"","sources":["layouts.data.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;;EAuIC;AAmDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2IC"}
|
|
@@ -75,38 +75,61 @@ export const layoutsData = {
|
|
|
75
75
|
* the far left of a 1600px row from the input it names, and the eye has to travel
|
|
76
76
|
* the whole measure to pair them.
|
|
77
77
|
*
|
|
78
|
-
*
|
|
79
|
-
* read line by line, and past ~90 characters the eye loses the start of the next
|
|
80
|
-
* on the return sweep — a limit that has nothing to do with how wide the payload
|
|
81
|
-
* which is why it is far tighter than every other measure here and why it does not
|
|
82
|
-
* move when a rail collapses and frees up room. A
|
|
83
|
-
* rails; this caps what is between them.
|
|
78
|
+
* CONTENT pages are the one column capped by TYPOGRAPHY rather than by layout. Prose
|
|
79
|
+
* is read line by line, and past ~90 characters the eye loses the start of the next
|
|
80
|
+
* line on the return sweep — a limit that has nothing to do with how wide the payload
|
|
81
|
+
* is, which is why it is far tighter than every other measure here and why it does not
|
|
82
|
+
* move when a rail collapses and frees up room. A documentation page is already
|
|
83
|
+
* flanked by two rails; this caps what is between them.
|
|
84
|
+
*
|
|
85
|
+
* IT IS NAMED FOR THE PAYLOAD, NOT FOR THE SECTION. The cap is a line length, so every
|
|
86
|
+
* page whose payload is flowing copy takes it — documentation today, the blog and any
|
|
87
|
+
* other article page next — and none of them has to re-derive the same limit under a
|
|
88
|
+
* name that says "docs". By the same rule, a page inside the documentation that is NOT
|
|
89
|
+
* read line by line (its home, a directory of cards) takes a wider measure: what picks
|
|
90
|
+
* the column is the payload, never the URL.
|
|
84
91
|
*/
|
|
85
92
|
'layout-measure': 'var(--container-7xl)', // 1620px — data pages
|
|
86
93
|
'layout-measure-focused': 'var(--container-4xl)', // 1024px — home
|
|
87
94
|
'layout-measure-form': 'var(--container-4xl)', // 1024px — settings, forms
|
|
88
95
|
'layout-measure-form-create': 'var(--container-5xl)', // 1192px — create flows
|
|
89
|
-
'layout-measure-
|
|
96
|
+
'layout-measure-content': 'var(--container-3xl)', // 876px — prose columns (docs, blog)
|
|
90
97
|
|
|
91
98
|
/*
|
|
92
|
-
* MEASURE (site) — the marketing site's
|
|
93
|
-
*
|
|
99
|
+
* MEASURE (site) — the marketing site's columns, and the only measures in this file
|
|
100
|
+
* that are not a console page's. There are TWO, because the page and the bar above it
|
|
101
|
+
* do not answer the same question.
|
|
102
|
+
*
|
|
103
|
+
* --layout-measure-site IS THE PAGE'S FRAME. The azion.com pages are a single
|
|
104
|
+
* vertical frame: the hero's inner column, every section below it, the docs home and
|
|
105
|
+
* the footer all sit on the SAME centred column, and the border-x that runs down the
|
|
106
|
+
* page is only continuous because they agree to the pixel. That is why this is a token
|
|
107
|
+
* rather than a width re-typed per band — the frame is one decision, and one place is
|
|
108
|
+
* where it has to live.
|
|
109
|
+
*
|
|
110
|
+
* --layout-measure-site-header IS THE BAR'S, AND IT IS DELIBERATELY ONE RUNG WIDER.
|
|
111
|
+
* A bar is chrome, not content: it carries the brand at one end of the window and the
|
|
112
|
+
* account actions at the other, held apart by a navigation region in the middle, so it
|
|
113
|
+
* wants the room a reading frame deliberately refuses. Held to the page's measure that
|
|
114
|
+
* middle region ran out of room on a laptop long before the page did. The bar is the
|
|
115
|
+
* ONE band allowed outside the frame, and it says so in a token of its own — which is
|
|
116
|
+
* also what keeps the exception reviewable in both directions: nobody widens the bar by
|
|
117
|
+
* retuning the page, and nobody widens the page by retuning the bar.
|
|
94
118
|
*
|
|
95
|
-
* The
|
|
96
|
-
*
|
|
97
|
-
* and
|
|
98
|
-
*
|
|
99
|
-
* band — the frame is one decision, and one place is where it has to live.
|
|
119
|
+
* The two part company only above the caps, and by a fixed step. Measured against the
|
|
120
|
+
* page frame: one shared inset up to 1280, 2px apart at 1440 (the frame has just
|
|
121
|
+
* capped), 82 at 1600, and a flat 92 from 1668 up, where the bar caps too — half the
|
|
122
|
+
* 232px between the two measures, less the boundary the bar keeps.
|
|
100
123
|
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* have to line up. Retuning either must not move the other.
|
|
124
|
+
* Both are rungs of the shared container ladder (primitives/shape/container.js), not
|
|
125
|
+
* numbers chosen for a page. The page snaps to the scale, the scale does not bend to
|
|
126
|
+
* the page, which is the same rule --layout-measure follows. They are their own tokens
|
|
127
|
+
* rather than references to a console measure because the questions differ: a console
|
|
128
|
+
* measure caps a PAYLOAD (a table, a form), while these are the widths of a FRAME and
|
|
129
|
+
* of the chrome above it. Retuning any of the three must not move the others.
|
|
108
130
|
*/
|
|
109
|
-
'
|
|
131
|
+
'layout-measure-site': 'var(--container-6xl)', // 1388px — the marketing site column
|
|
132
|
+
'layout-measure-site-header': 'var(--container-7xl)', // 1620px — the site bar, one rung wider
|
|
110
133
|
/*
|
|
111
134
|
* MEASURE (control) — the widest the *right side* of an item-group field row may
|
|
112
135
|
* get. An ItemGroup row is two columns: the content names the field (title +
|
|
@@ -137,7 +160,7 @@ const COLUMN_MEASURE = {
|
|
|
137
160
|
'layout-column-focused': 'var(--layout-measure-focused)',
|
|
138
161
|
'layout-column-form': 'var(--layout-measure-form)',
|
|
139
162
|
'layout-form-create': 'var(--layout-measure-form-create)',
|
|
140
|
-
'layout-column-
|
|
163
|
+
'layout-column-content': 'var(--layout-measure-content)'
|
|
141
164
|
}
|
|
142
165
|
|
|
143
166
|
/**
|
|
@@ -244,11 +267,49 @@ export const layoutsUtilities = {
|
|
|
244
267
|
// 1192px column a 256px control side left every input pinned to the far right,
|
|
245
268
|
// a head-turn away from the label naming it; 472px pulls the control back
|
|
246
269
|
// toward its label and gives the radio blocks room to read.
|
|
247
|
-
name === 'layout-form-create'
|
|
270
|
+
name === 'layout-form-create'
|
|
271
|
+
? { '--layout-measure-control': 'var(--container-md)' }
|
|
272
|
+
: undefined
|
|
248
273
|
)
|
|
249
274
|
])
|
|
250
275
|
),
|
|
251
276
|
|
|
277
|
+
/*
|
|
278
|
+
* THE SITE FRAME — the marketing page's column, and the one column in this file whose
|
|
279
|
+
* cap is a FRAME width rather than a content width.
|
|
280
|
+
*
|
|
281
|
+
* IT IS INSET FROM THE WINDOW AT EVERY WIDTH, and that is the whole reason it exists as
|
|
282
|
+
* a utility. On a wide screen the inset is free: --layout-measure-site is narrower than
|
|
283
|
+
* the window, `margin-inline: auto` centres the column, and its rules read as the page's
|
|
284
|
+
* vertical frame with canvas either side. Below the cap that stops doing anything — the
|
|
285
|
+
* column becomes the window — and the two rules land ON the window edges, where a
|
|
286
|
+
* hairline is not a frame, it is a seam against the bezel. So the frame that organises
|
|
287
|
+
* the whole desktop layout simply ceased to exist on a phone, and the headline above it
|
|
288
|
+
* (which pads by the boundary) opened a boundary inside a rule drawn at x=0.
|
|
289
|
+
*
|
|
290
|
+
* ONE `min()` COVERS THE WHOLE RANGE, WITH NO BREAKPOINT. The cap is whichever binds
|
|
291
|
+
* first: the measure, or the window less a boundary a side. While the measure is the
|
|
292
|
+
* smaller the column is capped and centred and the boundary term is inert; once the
|
|
293
|
+
* window is narrower than the measure — precisely where the cap has stopped working —
|
|
294
|
+
* the boundary term takes over and IS the inset. The two mechanisms hand off to each
|
|
295
|
+
* other, so a phone gets the same framed column a desktop gets, one boundary in from
|
|
296
|
+
* each edge.
|
|
297
|
+
*
|
|
298
|
+
* NO PADDING, DELIBERATELY. The inset belongs to the frame, not to the copy: the bands
|
|
299
|
+
* inside are grids whose `gap-px` rules have to reach the frame's own verticals, and a
|
|
300
|
+
* padding here would pull them off it. A band that wants its content inset too adds
|
|
301
|
+
* `layout-boundary-inline` on top (that is what SectionContainer's `padded` does).
|
|
302
|
+
*
|
|
303
|
+
* This is the shape /site/pricing worked out band by band and carried in a wrapper div;
|
|
304
|
+
* as a utility it is one element, pixel-identical at every width, and every other page
|
|
305
|
+
* and the footer get it by naming the column instead of re-deriving it.
|
|
306
|
+
*/
|
|
307
|
+
'layout-column-site': {
|
|
308
|
+
'margin-inline': 'auto',
|
|
309
|
+
width: '100%',
|
|
310
|
+
'max-width': 'min(var(--layout-measure-site), 100% - 2 * var(--layout-boundary-inline))'
|
|
311
|
+
},
|
|
312
|
+
|
|
252
313
|
/*
|
|
253
314
|
* The control side of an item-group field row: the same geometry every settings row
|
|
254
315
|
* hand-repeated, with the cap coming from --layout-measure-control so a band retunes
|
|
@@ -28,7 +28,36 @@ export const textsData: {
|
|
|
28
28
|
fontWeight: number;
|
|
29
29
|
fontFamily: string;
|
|
30
30
|
};
|
|
31
|
+
'text-amount-lg': {
|
|
32
|
+
textWrapStyle: string;
|
|
33
|
+
fontSize: {
|
|
34
|
+
_: string;
|
|
35
|
+
sm: string;
|
|
36
|
+
md: string;
|
|
37
|
+
};
|
|
38
|
+
lineHeight: number;
|
|
39
|
+
fontWeight: number;
|
|
40
|
+
letterSpacing: string;
|
|
41
|
+
};
|
|
42
|
+
'text-amount-md': {
|
|
43
|
+
textWrapStyle: string;
|
|
44
|
+
fontSize: {
|
|
45
|
+
_: string;
|
|
46
|
+
sm: string;
|
|
47
|
+
md: string;
|
|
48
|
+
};
|
|
49
|
+
lineHeight: number;
|
|
50
|
+
fontWeight: number;
|
|
51
|
+
letterSpacing: string;
|
|
52
|
+
};
|
|
53
|
+
'text-amount-sm': {
|
|
54
|
+
fontSize: string;
|
|
55
|
+
lineHeight: number;
|
|
56
|
+
fontWeight: number;
|
|
57
|
+
letterSpacing: string;
|
|
58
|
+
};
|
|
31
59
|
'text-heading-2xl': {
|
|
60
|
+
textWrapStyle: string;
|
|
32
61
|
fontSize: {
|
|
33
62
|
_: string;
|
|
34
63
|
sm: string;
|
|
@@ -36,8 +65,10 @@ export const textsData: {
|
|
|
36
65
|
};
|
|
37
66
|
lineHeight: number;
|
|
38
67
|
fontWeight: number;
|
|
68
|
+
letterSpacing: string;
|
|
39
69
|
};
|
|
40
70
|
'text-heading-xl': {
|
|
71
|
+
textWrapStyle: string;
|
|
41
72
|
fontSize: {
|
|
42
73
|
_: string;
|
|
43
74
|
sm: string;
|
|
@@ -45,16 +76,20 @@ export const textsData: {
|
|
|
45
76
|
};
|
|
46
77
|
lineHeight: number;
|
|
47
78
|
fontWeight: number;
|
|
79
|
+
letterSpacing: string;
|
|
48
80
|
};
|
|
49
81
|
'text-heading-lg': {
|
|
82
|
+
textWrapStyle: string;
|
|
50
83
|
fontSize: {
|
|
51
84
|
_: string;
|
|
52
85
|
md: string;
|
|
53
86
|
};
|
|
54
87
|
lineHeight: number;
|
|
55
88
|
fontWeight: number;
|
|
89
|
+
letterSpacing: string;
|
|
56
90
|
};
|
|
57
91
|
'text-heading-md': {
|
|
92
|
+
textWrapStyle: string;
|
|
58
93
|
fontSize: {
|
|
59
94
|
_: string;
|
|
60
95
|
sm: string;
|
|
@@ -62,8 +97,10 @@ export const textsData: {
|
|
|
62
97
|
};
|
|
63
98
|
lineHeight: number;
|
|
64
99
|
fontWeight: number;
|
|
100
|
+
letterSpacing: string;
|
|
65
101
|
};
|
|
66
102
|
'text-heading-sm': {
|
|
103
|
+
textWrapStyle: string;
|
|
67
104
|
fontSize: {
|
|
68
105
|
_: string;
|
|
69
106
|
sm: string;
|
|
@@ -71,31 +108,39 @@ export const textsData: {
|
|
|
71
108
|
};
|
|
72
109
|
lineHeight: number;
|
|
73
110
|
fontWeight: number;
|
|
111
|
+
letterSpacing: string;
|
|
74
112
|
};
|
|
75
113
|
'text-heading-xs': {
|
|
114
|
+
textWrapStyle: string;
|
|
76
115
|
fontSize: string;
|
|
77
116
|
lineHeight: number;
|
|
78
117
|
fontWeight: number;
|
|
118
|
+
letterSpacing: string;
|
|
79
119
|
};
|
|
80
120
|
'text-heading-xxs': {
|
|
121
|
+
textWrapStyle: string;
|
|
81
122
|
fontSize: string;
|
|
82
123
|
lineHeight: number;
|
|
83
124
|
fontWeight: number;
|
|
125
|
+
letterSpacing: string;
|
|
84
126
|
};
|
|
85
127
|
'text-label-lg': {
|
|
86
128
|
fontSize: string;
|
|
87
129
|
lineHeight: number;
|
|
88
130
|
fontWeight: number;
|
|
131
|
+
letterSpacing: string;
|
|
89
132
|
};
|
|
90
133
|
'text-label-md': {
|
|
91
134
|
fontSize: string;
|
|
92
135
|
lineHeight: number;
|
|
93
136
|
fontWeight: number;
|
|
137
|
+
letterSpacing: string;
|
|
94
138
|
};
|
|
95
139
|
'text-label-sm': {
|
|
96
140
|
fontSize: string;
|
|
97
141
|
lineHeight: number;
|
|
98
142
|
fontWeight: number;
|
|
143
|
+
letterSpacing: string;
|
|
99
144
|
};
|
|
100
145
|
'text-label-code-sm': {
|
|
101
146
|
fontFamily: string;
|
|
@@ -127,6 +172,7 @@ export const textsData: {
|
|
|
127
172
|
letterSpacing: string;
|
|
128
173
|
};
|
|
129
174
|
'text-body-lg': {
|
|
175
|
+
textWrapStyle: string;
|
|
130
176
|
fontSize: {
|
|
131
177
|
_: string;
|
|
132
178
|
md: string;
|
|
@@ -135,6 +181,7 @@ export const textsData: {
|
|
|
135
181
|
lineHeight: number;
|
|
136
182
|
};
|
|
137
183
|
'text-body-md': {
|
|
184
|
+
textWrapStyle: string;
|
|
138
185
|
fontSize: string;
|
|
139
186
|
fontWeight: number;
|
|
140
187
|
lineHeight: number;
|
|
@@ -145,16 +192,19 @@ export const textsData: {
|
|
|
145
192
|
lineHeight: number;
|
|
146
193
|
};
|
|
147
194
|
'text-body-sm': {
|
|
195
|
+
textWrapStyle: string;
|
|
148
196
|
fontSize: string;
|
|
149
197
|
fontWeight: number;
|
|
150
198
|
lineHeight: number;
|
|
151
199
|
};
|
|
152
200
|
'text-body-xs': {
|
|
201
|
+
textWrapStyle: string;
|
|
153
202
|
fontSize: string;
|
|
154
203
|
fontWeight: number;
|
|
155
204
|
lineHeight: number;
|
|
156
205
|
};
|
|
157
206
|
'text-body-xxs': {
|
|
207
|
+
textWrapStyle: string;
|
|
158
208
|
fontSize: string;
|
|
159
209
|
fontWeight: number;
|
|
160
210
|
lineHeight: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texts.data.d.ts","sourceRoot":"","sources":["texts.data.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"texts.data.d.ts","sourceRoot":"","sources":["texts.data.js"],"names":[],"mappings":"AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2OE,8FAA8F;;;;;;;;;;;;;;;;;;EAkB/F"}
|
|
@@ -9,6 +9,16 @@
|
|
|
9
9
|
* Optional `states` emits pseudo-class rules (e.g. `.text-link:hover`). Bundles
|
|
10
10
|
* with `fontSize: 'inherit'` are omitted from the Tailwind `fontSize` preset.
|
|
11
11
|
*
|
|
12
|
+
* `textWrapStyle` — the LONGHAND, never the `textWrap` shorthand. `text-wrap: pretty`
|
|
13
|
+
* is `text-wrap-mode: wrap` + `text-wrap-style: pretty`, so a typography utility
|
|
14
|
+
* written that way does not just choose how lines break: it decides THAT the text
|
|
15
|
+
* wraps, and it beats `truncate` / `whitespace-nowrap` on the same element (equal
|
|
16
|
+
* specificity, and this utility sorts later). Every `truncate text-body-sm` in the
|
|
17
|
+
* codebase therefore wrapped to two lines with an ellipsis that never appeared —
|
|
18
|
+
* measurably, table rows grew from 48px to 56px wherever a cell's text was longer
|
|
19
|
+
* than its column. The longhand keeps the balance/pretty intent and leaves wrapping
|
|
20
|
+
* to whoever owns the element.
|
|
21
|
+
*
|
|
12
22
|
* Mapping used during the port:
|
|
13
23
|
* old `large` (≤640) → `_`
|
|
14
24
|
* old `medium` (≤768) → `sm` (≥640)
|
|
@@ -41,62 +51,119 @@ export const textsData = {
|
|
|
41
51
|
fontWeight: fontWeight.normal,
|
|
42
52
|
fontFamily: fontFamily.display
|
|
43
53
|
},
|
|
54
|
+
// ── The amount ladder (Currency) ─────────────────────────────────────────
|
|
55
|
+
//
|
|
56
|
+
// The three sizes `Currency` typesets a monetary amount at, one per reading
|
|
57
|
+
// distance: `sm` inside a table row or list cell, `md` an amount stated as a fact on
|
|
58
|
+
// a card, `lg` the headline figure of a pricing card. Each MIRRORS the heading/label
|
|
59
|
+
// token it used to borrow (`text-label-lg`, `text-heading-md`, `text-heading-2xl`) —
|
|
60
|
+
// same size ramp, same leading, same weight — and adds the one thing that made
|
|
61
|
+
// borrowing wrong: the amount's negative tracking.
|
|
62
|
+
//
|
|
63
|
+
// `-0.08em` is PROPORTIONAL, and deliberately so, which is why it lives here and not
|
|
64
|
+
// in `tracking.js`. That scale is absolute (`rem`) on purpose so a step resolves to a
|
|
65
|
+
// fixed measure at any font size (see its docstring), and it therefore holds no
|
|
66
|
+
// `-0.08em`-equivalent step. A figure is the one place where the tracking has to
|
|
67
|
+
// scale WITH the glyphs: the Figma amount specifies −1.28px @16px, −1.92px @24px and
|
|
68
|
+
// −4.48px @56px, which is one ratio, not three steps. Expressing it as `em` is what
|
|
69
|
+
// makes a single declaration correct at all three sizes and at every breakpoint of
|
|
70
|
+
// `lg`'s responsive ramp.
|
|
71
|
+
//
|
|
72
|
+
// Dedicated tokens rather than tracking added to the borrowed ones: `text-heading-2xl`
|
|
73
|
+
// sets every hero headline in the system, and a hero is prose, not a numeral.
|
|
74
|
+
'text-amount-lg': {
|
|
75
|
+
textWrapStyle: 'balance',
|
|
76
|
+
fontSize: { _: fontSize['3xl'], sm: fontSize['5xl'], md: fontSize['6xl'] },
|
|
77
|
+
lineHeight: leading.tight,
|
|
78
|
+
fontWeight: fontWeight.normal,
|
|
79
|
+
letterSpacing: '-0.08em'
|
|
80
|
+
},
|
|
81
|
+
'text-amount-md': {
|
|
82
|
+
textWrapStyle: 'balance',
|
|
83
|
+
fontSize: { _: fontSize.base, sm: fontSize.xl, md: fontSize['2xl'] },
|
|
84
|
+
lineHeight: leading.tight,
|
|
85
|
+
fontWeight: fontWeight.normal,
|
|
86
|
+
letterSpacing: '-0.08em'
|
|
87
|
+
},
|
|
88
|
+
'text-amount-sm': {
|
|
89
|
+
fontSize: fontSize.base,
|
|
90
|
+
lineHeight: leading.normal,
|
|
91
|
+
fontWeight: fontWeight.normal,
|
|
92
|
+
letterSpacing: '-0.08em'
|
|
93
|
+
},
|
|
44
94
|
'text-heading-2xl': {
|
|
95
|
+
textWrapStyle: 'balance',
|
|
45
96
|
fontSize: { _: fontSize['3xl'], sm: fontSize['5xl'], md: fontSize['6xl'] },
|
|
46
97
|
lineHeight: leading.tight,
|
|
47
|
-
fontWeight: fontWeight.normal
|
|
98
|
+
fontWeight: fontWeight.normal,
|
|
99
|
+
letterSpacing: tracking.tighter
|
|
48
100
|
},
|
|
49
101
|
'text-heading-xl': {
|
|
102
|
+
textWrapStyle: 'balance',
|
|
50
103
|
fontSize: { _: fontSize.xl, sm: fontSize['3xl'], md: fontSize['4xl'] },
|
|
51
104
|
lineHeight: leading.tight,
|
|
52
|
-
fontWeight: fontWeight.normal
|
|
105
|
+
fontWeight: fontWeight.normal,
|
|
106
|
+
letterSpacing: tracking.tighter
|
|
53
107
|
},
|
|
54
108
|
'text-heading-lg': {
|
|
109
|
+
textWrapStyle: 'balance',
|
|
55
110
|
fontSize: { _: fontSize.lg, md: fontSize['3xl'] },
|
|
56
111
|
lineHeight: leading.tight,
|
|
57
|
-
fontWeight: fontWeight.normal
|
|
112
|
+
fontWeight: fontWeight.normal,
|
|
113
|
+
letterSpacing: tracking.tighter
|
|
58
114
|
},
|
|
59
115
|
'text-heading-md': {
|
|
116
|
+
textWrapStyle: 'balance',
|
|
60
117
|
fontSize: { _: fontSize.base, sm: fontSize.xl, md: fontSize['2xl'] },
|
|
61
118
|
lineHeight: leading.tight,
|
|
62
|
-
fontWeight: fontWeight.normal
|
|
119
|
+
fontWeight: fontWeight.normal,
|
|
120
|
+
letterSpacing: tracking.tighter
|
|
63
121
|
},
|
|
64
122
|
'text-heading-sm': {
|
|
123
|
+
textWrapStyle: 'balance',
|
|
65
124
|
fontSize: { _: fontSize.sm, sm: fontSize.base, md: fontSize.lg },
|
|
66
125
|
lineHeight: leading.snug,
|
|
67
|
-
fontWeight: fontWeight.normal
|
|
126
|
+
fontWeight: fontWeight.normal,
|
|
127
|
+
letterSpacing: tracking.tighter
|
|
68
128
|
},
|
|
69
129
|
'text-heading-xs': {
|
|
130
|
+
textWrapStyle: 'balance',
|
|
70
131
|
fontSize: fontSize.base,
|
|
71
132
|
lineHeight: leading.snug,
|
|
72
|
-
fontWeight: fontWeight.normal
|
|
133
|
+
fontWeight: fontWeight.normal,
|
|
134
|
+
letterSpacing: tracking.tighter
|
|
73
135
|
},
|
|
74
136
|
'text-heading-xxs': {
|
|
137
|
+
textWrapStyle: 'balance',
|
|
75
138
|
fontSize: fontSize.sm,
|
|
76
139
|
lineHeight: leading.snug,
|
|
77
|
-
fontWeight: fontWeight.normal
|
|
140
|
+
fontWeight: fontWeight.normal,
|
|
141
|
+
letterSpacing: tracking.tighter
|
|
78
142
|
},
|
|
79
143
|
'text-label-lg': {
|
|
80
144
|
fontSize: fontSize.base,
|
|
81
145
|
lineHeight: leading.normal,
|
|
82
|
-
fontWeight: fontWeight.normal
|
|
146
|
+
fontWeight: fontWeight.normal,
|
|
147
|
+
letterSpacing: tracking.tight
|
|
83
148
|
},
|
|
84
149
|
'text-label-md': {
|
|
85
150
|
fontSize: fontSize.sm,
|
|
86
151
|
lineHeight: leading.normal,
|
|
87
|
-
fontWeight: fontWeight.normal
|
|
152
|
+
fontWeight: fontWeight.normal,
|
|
153
|
+
letterSpacing: tracking.tight
|
|
88
154
|
},
|
|
89
155
|
'text-label-sm': {
|
|
90
156
|
fontSize: fontSize.xs,
|
|
91
157
|
lineHeight: leading.normal,
|
|
92
|
-
fontWeight: fontWeight.normal
|
|
158
|
+
fontWeight: fontWeight.normal,
|
|
159
|
+
letterSpacing: tracking.tight
|
|
93
160
|
},
|
|
94
161
|
'text-label-code-sm': {
|
|
95
162
|
fontFamily: fontFamily.code,
|
|
96
163
|
fontSize: fontSize.xs,
|
|
97
164
|
lineHeight: leading.none,
|
|
98
165
|
fontWeight: fontWeight.normal,
|
|
99
|
-
letterSpacing: tracking.
|
|
166
|
+
letterSpacing: tracking.wide
|
|
100
167
|
},
|
|
101
168
|
'text-body-code-sm': {
|
|
102
169
|
textWrapStyle: 'pretty',
|
|
@@ -104,28 +171,30 @@ export const textsData = {
|
|
|
104
171
|
fontSize: fontSize.xs,
|
|
105
172
|
lineHeight: leading.relaxed,
|
|
106
173
|
fontWeight: fontWeight.normal,
|
|
107
|
-
letterSpacing: tracking.
|
|
174
|
+
letterSpacing: tracking.wide
|
|
108
175
|
},
|
|
109
176
|
'text-label-code-md': {
|
|
110
177
|
fontFamily: fontFamily.code,
|
|
111
178
|
fontSize: fontSize.sm,
|
|
112
179
|
lineHeight: leading.none,
|
|
113
180
|
fontWeight: fontWeight.normal,
|
|
114
|
-
letterSpacing: tracking.
|
|
181
|
+
letterSpacing: tracking.wide
|
|
115
182
|
},
|
|
116
183
|
'text-label-code-lg': {
|
|
117
184
|
fontFamily: fontFamily.code,
|
|
118
185
|
fontSize: fontSize.base,
|
|
119
186
|
lineHeight: leading.none,
|
|
120
187
|
fontWeight: fontWeight.normal,
|
|
121
|
-
letterSpacing: tracking.
|
|
188
|
+
letterSpacing: tracking.wide
|
|
122
189
|
},
|
|
123
190
|
'text-body-lg': {
|
|
191
|
+
textWrapStyle: 'pretty',
|
|
124
192
|
fontSize: { _: fontSize.base, md: fontSize.lg },
|
|
125
193
|
fontWeight: fontWeight.normal,
|
|
126
194
|
lineHeight: leading.snug
|
|
127
195
|
},
|
|
128
196
|
'text-body-md': {
|
|
197
|
+
textWrapStyle: 'pretty',
|
|
129
198
|
fontSize: fontSize.base,
|
|
130
199
|
fontWeight: fontWeight.normal,
|
|
131
200
|
lineHeight: leading.snug
|
|
@@ -136,16 +205,19 @@ export const textsData = {
|
|
|
136
205
|
lineHeight: leading.relaxed
|
|
137
206
|
},
|
|
138
207
|
'text-body-sm': {
|
|
208
|
+
textWrapStyle: 'pretty',
|
|
139
209
|
fontSize: fontSize.sm,
|
|
140
210
|
fontWeight: fontWeight.normal,
|
|
141
211
|
lineHeight: leading.snug
|
|
142
212
|
},
|
|
143
213
|
'text-body-xs': {
|
|
214
|
+
textWrapStyle: 'pretty',
|
|
144
215
|
fontSize: fontSize.xs,
|
|
145
216
|
fontWeight: fontWeight.normal,
|
|
146
217
|
lineHeight: leading.snug
|
|
147
218
|
},
|
|
148
219
|
'text-body-xxs': {
|
|
220
|
+
textWrapStyle: 'pretty',
|
|
149
221
|
fontSize: fontSize.xs,
|
|
150
222
|
fontWeight: fontWeight.normal,
|
|
151
223
|
lineHeight: leading.normal
|