@vectoriox/iox-ui 5.39.0 → 5.41.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/composite-core/index.d.ts +210 -12
- package/design-core/index.d.ts +694 -17
- package/fesm2022/vectoriox-iox-ui-actions-core.mjs +4 -3
- package/fesm2022/vectoriox-iox-ui-actions-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-composite-core.mjs +535 -121
- package/fesm2022/vectoriox-iox-ui-composite-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-design-core.mjs +843 -45
- package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs +894 -21
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui.mjs +3945 -3914
- package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
- package/generation-core/index.d.ts +625 -5
- package/index.d.ts +22 -1
- package/package.json +1 -1
- package/src/actions-core/element-actions.ts +4 -3
- package/src/composite-core/accordion.ts +1 -0
- package/src/composite-core/composite-kinds.ts +42 -6
- package/src/composite-core/exclusive-runtime.ts +60 -10
- package/src/composite-core/exclusive.ts +64 -0
- package/src/composite-core/public-api.ts +5 -2
- package/src/composite-core/segmented.ts +349 -0
- package/src/composite-core/structure.ts +6 -1
- package/src/composite-core/tabs.ts +6 -3
- package/src/design-core/contrast-audit.ts +8 -3
- package/src/design-core/flavor-spec.generated.ts +832 -41
- package/src/generation-core/compose-site.ts +248 -12
- package/src/generation-core/nav-shape.ts +53 -3
- package/src/generation-core/node-baselines.generated.ts +49 -0
- package/src/generation-core/patterns.ts +20 -0
- package/src/generation-core/site-spec.generated.ts +595 -0
- package/styles/iox-design.css +19 -0
|
@@ -892,6 +892,512 @@ declare const SPEC_SITE_PATTERNS: {
|
|
|
892
892
|
}];
|
|
893
893
|
};
|
|
894
894
|
};
|
|
895
|
+
readonly "pricing.tiers": {
|
|
896
|
+
readonly family: "pricing";
|
|
897
|
+
readonly label: "Pricing — plans with a monthly / yearly switch";
|
|
898
|
+
readonly node: {
|
|
899
|
+
readonly t: "Section";
|
|
900
|
+
readonly es: "section";
|
|
901
|
+
readonly c: readonly [{
|
|
902
|
+
readonly t: "Container";
|
|
903
|
+
readonly es: "box";
|
|
904
|
+
readonly lay: {
|
|
905
|
+
readonly display: "flex";
|
|
906
|
+
readonly flexDirection: "column";
|
|
907
|
+
readonly gap: "8px";
|
|
908
|
+
readonly alignItems: "center";
|
|
909
|
+
readonly textAlign: "center";
|
|
910
|
+
};
|
|
911
|
+
readonly c: readonly [{
|
|
912
|
+
readonly t: "Text";
|
|
913
|
+
readonly es: "eyebrow";
|
|
914
|
+
readonly slot: "eyebrow";
|
|
915
|
+
readonly ph: "copy";
|
|
916
|
+
readonly text: "Pricing";
|
|
917
|
+
}, {
|
|
918
|
+
readonly t: "Heading";
|
|
919
|
+
readonly es: "h2";
|
|
920
|
+
readonly level: "h2";
|
|
921
|
+
readonly slot: "title";
|
|
922
|
+
readonly ph: "copy";
|
|
923
|
+
readonly text: "Plans";
|
|
924
|
+
}];
|
|
925
|
+
}, {
|
|
926
|
+
readonly t: "Container";
|
|
927
|
+
readonly recipe: "segmented";
|
|
928
|
+
readonly name: "Billing period";
|
|
929
|
+
readonly lay: {
|
|
930
|
+
readonly alignSelf: "center";
|
|
931
|
+
};
|
|
932
|
+
readonly resp: {
|
|
933
|
+
readonly mobile: {
|
|
934
|
+
readonly position: "sticky";
|
|
935
|
+
readonly top: "calc(12px + env(safe-area-inset-top, 0px))";
|
|
936
|
+
readonly zIndex: "2";
|
|
937
|
+
};
|
|
938
|
+
};
|
|
939
|
+
}, {
|
|
940
|
+
readonly t: "Container";
|
|
941
|
+
readonly es: "box";
|
|
942
|
+
readonly layer: "Plans";
|
|
943
|
+
readonly lay: {
|
|
944
|
+
readonly display: "grid";
|
|
945
|
+
readonly gridTemplateColumns: "repeat(3, minmax(0, 1fr))";
|
|
946
|
+
readonly gap: "var(--iox-space-gap)";
|
|
947
|
+
readonly alignItems: "stretch";
|
|
948
|
+
};
|
|
949
|
+
readonly resp: {
|
|
950
|
+
readonly mobile: {
|
|
951
|
+
readonly gridTemplateColumns: "minmax(0, 1fr)";
|
|
952
|
+
};
|
|
953
|
+
};
|
|
954
|
+
readonly c: readonly [{
|
|
955
|
+
readonly t: "Container";
|
|
956
|
+
readonly recipe: "card";
|
|
957
|
+
readonly layout: "top";
|
|
958
|
+
readonly ph: "copy";
|
|
959
|
+
readonly parts: {
|
|
960
|
+
readonly media: false;
|
|
961
|
+
readonly eyebrow: false;
|
|
962
|
+
readonly badge: false;
|
|
963
|
+
readonly actions: false;
|
|
964
|
+
};
|
|
965
|
+
readonly words: {
|
|
966
|
+
readonly title: "First plan";
|
|
967
|
+
readonly text: "Who this plan is for, in one sentence.";
|
|
968
|
+
};
|
|
969
|
+
readonly c: readonly [{
|
|
970
|
+
readonly t: "Container";
|
|
971
|
+
readonly es: "box";
|
|
972
|
+
readonly layer: "Price · Monthly";
|
|
973
|
+
readonly shownWhen: "monthly";
|
|
974
|
+
readonly lay: {
|
|
975
|
+
readonly display: "flex";
|
|
976
|
+
readonly alignItems: "baseline";
|
|
977
|
+
readonly flexWrap: "wrap";
|
|
978
|
+
readonly gap: "6px";
|
|
979
|
+
};
|
|
980
|
+
readonly c: readonly [{
|
|
981
|
+
readonly t: "Text";
|
|
982
|
+
readonly es: "price";
|
|
983
|
+
readonly ph: "price";
|
|
984
|
+
readonly text: "Monthly price";
|
|
985
|
+
}, {
|
|
986
|
+
readonly t: "Text";
|
|
987
|
+
readonly es: "small";
|
|
988
|
+
readonly text: "per month";
|
|
989
|
+
}];
|
|
990
|
+
}, {
|
|
991
|
+
readonly t: "Container";
|
|
992
|
+
readonly es: "box";
|
|
993
|
+
readonly layer: "Price · Yearly";
|
|
994
|
+
readonly shownWhen: "yearly";
|
|
995
|
+
readonly lay: {
|
|
996
|
+
readonly display: "flex";
|
|
997
|
+
readonly alignItems: "baseline";
|
|
998
|
+
readonly flexWrap: "wrap";
|
|
999
|
+
readonly gap: "6px";
|
|
1000
|
+
};
|
|
1001
|
+
readonly c: readonly [{
|
|
1002
|
+
readonly t: "Text";
|
|
1003
|
+
readonly es: "price";
|
|
1004
|
+
readonly ph: "price";
|
|
1005
|
+
readonly text: "Yearly price";
|
|
1006
|
+
}, {
|
|
1007
|
+
readonly t: "Text";
|
|
1008
|
+
readonly es: "small";
|
|
1009
|
+
readonly text: "per year";
|
|
1010
|
+
}];
|
|
1011
|
+
}, {
|
|
1012
|
+
readonly t: "Container";
|
|
1013
|
+
readonly es: "box";
|
|
1014
|
+
readonly layer: "Includes";
|
|
1015
|
+
readonly lay: {
|
|
1016
|
+
readonly display: "flex";
|
|
1017
|
+
readonly flexDirection: "column";
|
|
1018
|
+
readonly gap: "8px";
|
|
1019
|
+
};
|
|
1020
|
+
readonly c: readonly [{
|
|
1021
|
+
readonly t: "Container";
|
|
1022
|
+
readonly es: "box";
|
|
1023
|
+
readonly lay: {
|
|
1024
|
+
readonly display: "flex";
|
|
1025
|
+
readonly flexWrap: "nowrap";
|
|
1026
|
+
readonly gap: "8px";
|
|
1027
|
+
readonly alignItems: "flex-start";
|
|
1028
|
+
};
|
|
1029
|
+
readonly c: readonly [{
|
|
1030
|
+
readonly t: "Icon";
|
|
1031
|
+
readonly es: "icon";
|
|
1032
|
+
readonly icon: "ph ph-check";
|
|
1033
|
+
}, {
|
|
1034
|
+
readonly t: "Text";
|
|
1035
|
+
readonly es: "body";
|
|
1036
|
+
readonly ph: "copy";
|
|
1037
|
+
readonly text: "What this plan includes";
|
|
1038
|
+
}];
|
|
1039
|
+
}, {
|
|
1040
|
+
readonly t: "Container";
|
|
1041
|
+
readonly es: "box";
|
|
1042
|
+
readonly lay: {
|
|
1043
|
+
readonly display: "flex";
|
|
1044
|
+
readonly flexWrap: "nowrap";
|
|
1045
|
+
readonly gap: "8px";
|
|
1046
|
+
readonly alignItems: "flex-start";
|
|
1047
|
+
};
|
|
1048
|
+
readonly c: readonly [{
|
|
1049
|
+
readonly t: "Icon";
|
|
1050
|
+
readonly es: "icon";
|
|
1051
|
+
readonly icon: "ph ph-check";
|
|
1052
|
+
}, {
|
|
1053
|
+
readonly t: "Text";
|
|
1054
|
+
readonly es: "body";
|
|
1055
|
+
readonly ph: "copy";
|
|
1056
|
+
readonly text: "What this plan includes";
|
|
1057
|
+
}];
|
|
1058
|
+
}, {
|
|
1059
|
+
readonly t: "Container";
|
|
1060
|
+
readonly es: "box";
|
|
1061
|
+
readonly lay: {
|
|
1062
|
+
readonly display: "flex";
|
|
1063
|
+
readonly flexWrap: "nowrap";
|
|
1064
|
+
readonly gap: "8px";
|
|
1065
|
+
readonly alignItems: "flex-start";
|
|
1066
|
+
};
|
|
1067
|
+
readonly c: readonly [{
|
|
1068
|
+
readonly t: "Icon";
|
|
1069
|
+
readonly es: "icon";
|
|
1070
|
+
readonly icon: "ph ph-check";
|
|
1071
|
+
}, {
|
|
1072
|
+
readonly t: "Text";
|
|
1073
|
+
readonly es: "body";
|
|
1074
|
+
readonly ph: "copy";
|
|
1075
|
+
readonly text: "What this plan includes";
|
|
1076
|
+
}];
|
|
1077
|
+
}];
|
|
1078
|
+
}, {
|
|
1079
|
+
readonly t: "Container";
|
|
1080
|
+
readonly es: "box";
|
|
1081
|
+
readonly role: "card.actions";
|
|
1082
|
+
readonly layer: "Buttons";
|
|
1083
|
+
readonly lay: {
|
|
1084
|
+
readonly display: "flex";
|
|
1085
|
+
readonly flexWrap: "wrap";
|
|
1086
|
+
readonly gap: "8px";
|
|
1087
|
+
readonly alignItems: "center";
|
|
1088
|
+
readonly width: "100%";
|
|
1089
|
+
readonly margin: "auto 0px 0px 0px";
|
|
1090
|
+
readonly padding: "6px 0px 0px 0px";
|
|
1091
|
+
};
|
|
1092
|
+
readonly c: readonly [{
|
|
1093
|
+
readonly t: "ButtonBlock";
|
|
1094
|
+
readonly es: "button-primary";
|
|
1095
|
+
readonly href: "/contact";
|
|
1096
|
+
readonly text: "Choose this plan";
|
|
1097
|
+
}];
|
|
1098
|
+
}];
|
|
1099
|
+
}, {
|
|
1100
|
+
readonly t: "Container";
|
|
1101
|
+
readonly recipe: "card";
|
|
1102
|
+
readonly layout: "top";
|
|
1103
|
+
readonly ph: "copy";
|
|
1104
|
+
readonly scheme: "accent";
|
|
1105
|
+
readonly badge: "neutral";
|
|
1106
|
+
readonly parts: {
|
|
1107
|
+
readonly media: false;
|
|
1108
|
+
readonly eyebrow: false;
|
|
1109
|
+
readonly badge: true;
|
|
1110
|
+
readonly actions: false;
|
|
1111
|
+
};
|
|
1112
|
+
readonly words: {
|
|
1113
|
+
readonly title: "Second plan";
|
|
1114
|
+
readonly text: "Who this plan is for, in one sentence.";
|
|
1115
|
+
readonly badge: "Most popular";
|
|
1116
|
+
};
|
|
1117
|
+
readonly c: readonly [{
|
|
1118
|
+
readonly t: "Container";
|
|
1119
|
+
readonly es: "box";
|
|
1120
|
+
readonly layer: "Price · Monthly";
|
|
1121
|
+
readonly shownWhen: "monthly";
|
|
1122
|
+
readonly lay: {
|
|
1123
|
+
readonly display: "flex";
|
|
1124
|
+
readonly alignItems: "baseline";
|
|
1125
|
+
readonly flexWrap: "wrap";
|
|
1126
|
+
readonly gap: "6px";
|
|
1127
|
+
};
|
|
1128
|
+
readonly c: readonly [{
|
|
1129
|
+
readonly t: "Text";
|
|
1130
|
+
readonly es: "price";
|
|
1131
|
+
readonly ph: "price";
|
|
1132
|
+
readonly text: "Monthly price";
|
|
1133
|
+
}, {
|
|
1134
|
+
readonly t: "Text";
|
|
1135
|
+
readonly es: "small";
|
|
1136
|
+
readonly text: "per month";
|
|
1137
|
+
}];
|
|
1138
|
+
}, {
|
|
1139
|
+
readonly t: "Container";
|
|
1140
|
+
readonly es: "box";
|
|
1141
|
+
readonly layer: "Price · Yearly";
|
|
1142
|
+
readonly shownWhen: "yearly";
|
|
1143
|
+
readonly lay: {
|
|
1144
|
+
readonly display: "flex";
|
|
1145
|
+
readonly alignItems: "baseline";
|
|
1146
|
+
readonly flexWrap: "wrap";
|
|
1147
|
+
readonly gap: "6px";
|
|
1148
|
+
};
|
|
1149
|
+
readonly c: readonly [{
|
|
1150
|
+
readonly t: "Text";
|
|
1151
|
+
readonly es: "price";
|
|
1152
|
+
readonly ph: "price";
|
|
1153
|
+
readonly text: "Yearly price";
|
|
1154
|
+
}, {
|
|
1155
|
+
readonly t: "Text";
|
|
1156
|
+
readonly es: "small";
|
|
1157
|
+
readonly text: "per year";
|
|
1158
|
+
}];
|
|
1159
|
+
}, {
|
|
1160
|
+
readonly t: "Container";
|
|
1161
|
+
readonly es: "box";
|
|
1162
|
+
readonly layer: "Includes";
|
|
1163
|
+
readonly lay: {
|
|
1164
|
+
readonly display: "flex";
|
|
1165
|
+
readonly flexDirection: "column";
|
|
1166
|
+
readonly gap: "8px";
|
|
1167
|
+
};
|
|
1168
|
+
readonly c: readonly [{
|
|
1169
|
+
readonly t: "Container";
|
|
1170
|
+
readonly es: "box";
|
|
1171
|
+
readonly lay: {
|
|
1172
|
+
readonly display: "flex";
|
|
1173
|
+
readonly flexWrap: "nowrap";
|
|
1174
|
+
readonly gap: "8px";
|
|
1175
|
+
readonly alignItems: "flex-start";
|
|
1176
|
+
};
|
|
1177
|
+
readonly c: readonly [{
|
|
1178
|
+
readonly t: "Icon";
|
|
1179
|
+
readonly es: "icon";
|
|
1180
|
+
readonly icon: "ph ph-check";
|
|
1181
|
+
}, {
|
|
1182
|
+
readonly t: "Text";
|
|
1183
|
+
readonly es: "body";
|
|
1184
|
+
readonly ph: "copy";
|
|
1185
|
+
readonly text: "What this plan includes";
|
|
1186
|
+
}];
|
|
1187
|
+
}, {
|
|
1188
|
+
readonly t: "Container";
|
|
1189
|
+
readonly es: "box";
|
|
1190
|
+
readonly lay: {
|
|
1191
|
+
readonly display: "flex";
|
|
1192
|
+
readonly flexWrap: "nowrap";
|
|
1193
|
+
readonly gap: "8px";
|
|
1194
|
+
readonly alignItems: "flex-start";
|
|
1195
|
+
};
|
|
1196
|
+
readonly c: readonly [{
|
|
1197
|
+
readonly t: "Icon";
|
|
1198
|
+
readonly es: "icon";
|
|
1199
|
+
readonly icon: "ph ph-check";
|
|
1200
|
+
}, {
|
|
1201
|
+
readonly t: "Text";
|
|
1202
|
+
readonly es: "body";
|
|
1203
|
+
readonly ph: "copy";
|
|
1204
|
+
readonly text: "What this plan includes";
|
|
1205
|
+
}];
|
|
1206
|
+
}, {
|
|
1207
|
+
readonly t: "Container";
|
|
1208
|
+
readonly es: "box";
|
|
1209
|
+
readonly lay: {
|
|
1210
|
+
readonly display: "flex";
|
|
1211
|
+
readonly flexWrap: "nowrap";
|
|
1212
|
+
readonly gap: "8px";
|
|
1213
|
+
readonly alignItems: "flex-start";
|
|
1214
|
+
};
|
|
1215
|
+
readonly c: readonly [{
|
|
1216
|
+
readonly t: "Icon";
|
|
1217
|
+
readonly es: "icon";
|
|
1218
|
+
readonly icon: "ph ph-check";
|
|
1219
|
+
}, {
|
|
1220
|
+
readonly t: "Text";
|
|
1221
|
+
readonly es: "body";
|
|
1222
|
+
readonly ph: "copy";
|
|
1223
|
+
readonly text: "What this plan includes";
|
|
1224
|
+
}];
|
|
1225
|
+
}];
|
|
1226
|
+
}, {
|
|
1227
|
+
readonly t: "Container";
|
|
1228
|
+
readonly es: "box";
|
|
1229
|
+
readonly role: "card.actions";
|
|
1230
|
+
readonly layer: "Buttons";
|
|
1231
|
+
readonly lay: {
|
|
1232
|
+
readonly display: "flex";
|
|
1233
|
+
readonly flexWrap: "wrap";
|
|
1234
|
+
readonly gap: "8px";
|
|
1235
|
+
readonly alignItems: "center";
|
|
1236
|
+
readonly width: "100%";
|
|
1237
|
+
readonly margin: "auto 0px 0px 0px";
|
|
1238
|
+
readonly padding: "6px 0px 0px 0px";
|
|
1239
|
+
};
|
|
1240
|
+
readonly c: readonly [{
|
|
1241
|
+
readonly t: "ButtonBlock";
|
|
1242
|
+
readonly es: "button-primary";
|
|
1243
|
+
readonly href: "/contact";
|
|
1244
|
+
readonly text: "Choose this plan";
|
|
1245
|
+
}];
|
|
1246
|
+
}];
|
|
1247
|
+
}, {
|
|
1248
|
+
readonly t: "Container";
|
|
1249
|
+
readonly recipe: "card";
|
|
1250
|
+
readonly layout: "top";
|
|
1251
|
+
readonly ph: "copy";
|
|
1252
|
+
readonly parts: {
|
|
1253
|
+
readonly media: false;
|
|
1254
|
+
readonly eyebrow: false;
|
|
1255
|
+
readonly badge: false;
|
|
1256
|
+
readonly actions: false;
|
|
1257
|
+
};
|
|
1258
|
+
readonly words: {
|
|
1259
|
+
readonly title: "Third plan";
|
|
1260
|
+
readonly text: "Who this plan is for, in one sentence.";
|
|
1261
|
+
};
|
|
1262
|
+
readonly c: readonly [{
|
|
1263
|
+
readonly t: "Container";
|
|
1264
|
+
readonly es: "box";
|
|
1265
|
+
readonly layer: "Price · Monthly";
|
|
1266
|
+
readonly shownWhen: "monthly";
|
|
1267
|
+
readonly lay: {
|
|
1268
|
+
readonly display: "flex";
|
|
1269
|
+
readonly alignItems: "baseline";
|
|
1270
|
+
readonly flexWrap: "wrap";
|
|
1271
|
+
readonly gap: "6px";
|
|
1272
|
+
};
|
|
1273
|
+
readonly c: readonly [{
|
|
1274
|
+
readonly t: "Text";
|
|
1275
|
+
readonly es: "price";
|
|
1276
|
+
readonly ph: "price";
|
|
1277
|
+
readonly text: "Monthly price";
|
|
1278
|
+
}, {
|
|
1279
|
+
readonly t: "Text";
|
|
1280
|
+
readonly es: "small";
|
|
1281
|
+
readonly text: "per month";
|
|
1282
|
+
}];
|
|
1283
|
+
}, {
|
|
1284
|
+
readonly t: "Container";
|
|
1285
|
+
readonly es: "box";
|
|
1286
|
+
readonly layer: "Price · Yearly";
|
|
1287
|
+
readonly shownWhen: "yearly";
|
|
1288
|
+
readonly lay: {
|
|
1289
|
+
readonly display: "flex";
|
|
1290
|
+
readonly alignItems: "baseline";
|
|
1291
|
+
readonly flexWrap: "wrap";
|
|
1292
|
+
readonly gap: "6px";
|
|
1293
|
+
};
|
|
1294
|
+
readonly c: readonly [{
|
|
1295
|
+
readonly t: "Text";
|
|
1296
|
+
readonly es: "price";
|
|
1297
|
+
readonly ph: "price";
|
|
1298
|
+
readonly text: "Yearly price";
|
|
1299
|
+
}, {
|
|
1300
|
+
readonly t: "Text";
|
|
1301
|
+
readonly es: "small";
|
|
1302
|
+
readonly text: "per year";
|
|
1303
|
+
}];
|
|
1304
|
+
}, {
|
|
1305
|
+
readonly t: "Container";
|
|
1306
|
+
readonly es: "box";
|
|
1307
|
+
readonly layer: "Includes";
|
|
1308
|
+
readonly lay: {
|
|
1309
|
+
readonly display: "flex";
|
|
1310
|
+
readonly flexDirection: "column";
|
|
1311
|
+
readonly gap: "8px";
|
|
1312
|
+
};
|
|
1313
|
+
readonly c: readonly [{
|
|
1314
|
+
readonly t: "Container";
|
|
1315
|
+
readonly es: "box";
|
|
1316
|
+
readonly lay: {
|
|
1317
|
+
readonly display: "flex";
|
|
1318
|
+
readonly flexWrap: "nowrap";
|
|
1319
|
+
readonly gap: "8px";
|
|
1320
|
+
readonly alignItems: "flex-start";
|
|
1321
|
+
};
|
|
1322
|
+
readonly c: readonly [{
|
|
1323
|
+
readonly t: "Icon";
|
|
1324
|
+
readonly es: "icon";
|
|
1325
|
+
readonly icon: "ph ph-check";
|
|
1326
|
+
}, {
|
|
1327
|
+
readonly t: "Text";
|
|
1328
|
+
readonly es: "body";
|
|
1329
|
+
readonly ph: "copy";
|
|
1330
|
+
readonly text: "What this plan includes";
|
|
1331
|
+
}];
|
|
1332
|
+
}, {
|
|
1333
|
+
readonly t: "Container";
|
|
1334
|
+
readonly es: "box";
|
|
1335
|
+
readonly lay: {
|
|
1336
|
+
readonly display: "flex";
|
|
1337
|
+
readonly flexWrap: "nowrap";
|
|
1338
|
+
readonly gap: "8px";
|
|
1339
|
+
readonly alignItems: "flex-start";
|
|
1340
|
+
};
|
|
1341
|
+
readonly c: readonly [{
|
|
1342
|
+
readonly t: "Icon";
|
|
1343
|
+
readonly es: "icon";
|
|
1344
|
+
readonly icon: "ph ph-check";
|
|
1345
|
+
}, {
|
|
1346
|
+
readonly t: "Text";
|
|
1347
|
+
readonly es: "body";
|
|
1348
|
+
readonly ph: "copy";
|
|
1349
|
+
readonly text: "What this plan includes";
|
|
1350
|
+
}];
|
|
1351
|
+
}, {
|
|
1352
|
+
readonly t: "Container";
|
|
1353
|
+
readonly es: "box";
|
|
1354
|
+
readonly lay: {
|
|
1355
|
+
readonly display: "flex";
|
|
1356
|
+
readonly flexWrap: "nowrap";
|
|
1357
|
+
readonly gap: "8px";
|
|
1358
|
+
readonly alignItems: "flex-start";
|
|
1359
|
+
};
|
|
1360
|
+
readonly c: readonly [{
|
|
1361
|
+
readonly t: "Icon";
|
|
1362
|
+
readonly es: "icon";
|
|
1363
|
+
readonly icon: "ph ph-check";
|
|
1364
|
+
}, {
|
|
1365
|
+
readonly t: "Text";
|
|
1366
|
+
readonly es: "body";
|
|
1367
|
+
readonly ph: "copy";
|
|
1368
|
+
readonly text: "What this plan includes";
|
|
1369
|
+
}];
|
|
1370
|
+
}];
|
|
1371
|
+
}, {
|
|
1372
|
+
readonly t: "Container";
|
|
1373
|
+
readonly es: "box";
|
|
1374
|
+
readonly role: "card.actions";
|
|
1375
|
+
readonly layer: "Buttons";
|
|
1376
|
+
readonly lay: {
|
|
1377
|
+
readonly display: "flex";
|
|
1378
|
+
readonly flexWrap: "wrap";
|
|
1379
|
+
readonly gap: "8px";
|
|
1380
|
+
readonly alignItems: "center";
|
|
1381
|
+
readonly width: "100%";
|
|
1382
|
+
readonly margin: "auto 0px 0px 0px";
|
|
1383
|
+
readonly padding: "6px 0px 0px 0px";
|
|
1384
|
+
};
|
|
1385
|
+
readonly c: readonly [{
|
|
1386
|
+
readonly t: "ButtonBlock";
|
|
1387
|
+
readonly es: "button-primary";
|
|
1388
|
+
readonly href: "/contact";
|
|
1389
|
+
readonly text: "Choose this plan";
|
|
1390
|
+
}];
|
|
1391
|
+
}];
|
|
1392
|
+
}];
|
|
1393
|
+
}];
|
|
1394
|
+
readonly lay: {
|
|
1395
|
+
readonly display: "flex";
|
|
1396
|
+
readonly flexDirection: "column";
|
|
1397
|
+
readonly gap: "32px";
|
|
1398
|
+
};
|
|
1399
|
+
};
|
|
1400
|
+
};
|
|
895
1401
|
readonly "hero.full-bleed-media": {
|
|
896
1402
|
readonly family: "hero";
|
|
897
1403
|
readonly label: "Hero — words over a background video";
|
|
@@ -1395,6 +1901,12 @@ interface SitePlan {
|
|
|
1395
1901
|
* `binds`, a binding path per part: `image`, `eyebrow`, `title`, `text`; `href` + `param` link the whole card
|
|
1396
1902
|
* through its title). A header pattern's `phoneMenu` names its phone shape (drawer · bar · both), stamped by
|
|
1397
1903
|
* `planNavShape` (CC1).
|
|
1904
|
+
*
|
|
1905
|
+
* CC4b (`pricing.tiers`): `recipe: 'segmented'` stamps a Segmented control (Monthly · Yearly, named by `name`, its own
|
|
1906
|
+
* `lay` / `resp`) · `shownWhen` hides a node at base and shows it while the pattern's segmented option of that key is
|
|
1907
|
+
* on (the targeted `trigger-on`) · `ph: 'price'` a price the studio types (a publish-blocking placeholder showing its
|
|
1908
|
+
* label) · on a card recipe: `words` (title / text / badge), `badge` (the badge's tone), `scheme` (the Brand card), and
|
|
1909
|
+
* `c` — nodes joining its Content column · `icon` an Icon's glyph · `layer` the node's name in the layer tree.
|
|
1398
1910
|
*/
|
|
1399
1911
|
interface PatternNode {
|
|
1400
1912
|
readonly t: string;
|
|
@@ -1433,6 +1945,16 @@ interface PatternNode {
|
|
|
1433
1945
|
readonly opens?: string;
|
|
1434
1946
|
/** CC3: a control's accessible name (`ariaLabel`). */
|
|
1435
1947
|
readonly name?: string;
|
|
1948
|
+
/** CC4b: hidden at base, shown while the pattern's Segmented option with this key is on. */
|
|
1949
|
+
readonly shownWhen?: string;
|
|
1950
|
+
/** CC4b: a card recipe's words (its title, text, badge). */
|
|
1951
|
+
readonly words?: Readonly<Record<string, string>>;
|
|
1952
|
+
/** CC4b: a card recipe's badge tone (`neutral` · `success` · `warning` · `accent`). */
|
|
1953
|
+
readonly badge?: string;
|
|
1954
|
+
/** CC4b: an Icon's glyph (`ph ph-check`). */
|
|
1955
|
+
readonly icon?: string;
|
|
1956
|
+
/** CC4b: the node's name in the layer tree (`Price · Monthly`). */
|
|
1957
|
+
readonly layer?: string;
|
|
1436
1958
|
}
|
|
1437
1959
|
/** The composite-core recipes a pattern may stamp (`recipe`). */
|
|
1438
1960
|
declare enum PatternRecipe {
|
|
@@ -1443,6 +1965,8 @@ declare enum PatternRecipe {
|
|
|
1443
1965
|
/** CC4a: Tabs — Manual (three placeholder tabs), or From content when the section names a list `binding`: the tab
|
|
1444
1966
|
* list and the panels are both Repeaters over it, one row giving its tab AND its panel. */
|
|
1445
1967
|
Tabs = "tabs",
|
|
1968
|
+
/** CC4b: the Segmented control — Monthly · Yearly, named by the pattern (`name`). */
|
|
1969
|
+
Segmented = "segmented",
|
|
1446
1970
|
/** CC3: the accessible carousel — a named Slider whose controls are parts, one quote per slide (placeholders). */
|
|
1447
1971
|
Carousel = "carousel",
|
|
1448
1972
|
/** CC3: the Lightbox — a Dialog holding a Slider over the node's `src` (the gallery's own source). */
|
|
@@ -1476,7 +2000,9 @@ declare enum PatternPlaceholder {
|
|
|
1476
2000
|
Copy = "copy",
|
|
1477
2001
|
Image = "image",
|
|
1478
2002
|
/** CC3: a clip the studio uploads (a Video's file): the poster blank until then, publish-blocking. */
|
|
1479
|
-
Video = "video"
|
|
2003
|
+
Video = "video",
|
|
2004
|
+
/** CC4b (Q37): a price the studio types — free text, publish-blocking, its label shown meanwhile, never a number. */
|
|
2005
|
+
Price = "price"
|
|
1480
2006
|
}
|
|
1481
2007
|
/** CC3: what an `opens` node opens. */
|
|
1482
2008
|
declare enum PatternOpens {
|
|
@@ -1707,8 +2233,16 @@ declare enum PlaceholderKind {
|
|
|
1707
2233
|
/** An image slot with no image: the empty-image placeholder (DS3). */
|
|
1708
2234
|
Image = "image",
|
|
1709
2235
|
/** CC3: a video slot with no clip — the studio uploads its own (the poster blank meanwhile). */
|
|
1710
|
-
Video = "video"
|
|
2236
|
+
Video = "video",
|
|
2237
|
+
/** CC4b (Q37): a price — a FACT the customer could be held to. Free text the studio types ("₪ 1,200", "From $40",
|
|
2238
|
+
* "On request"); its label shows meanwhile ("Monthly price"), never a number. No currency model. */
|
|
2239
|
+
Price = "price"
|
|
1711
2240
|
}
|
|
2241
|
+
/** The placeholders a page cannot be published with unfilled (W4's gate): a fact, a price, the studio's own video.
|
|
2242
|
+
* Copy and an empty image are the author's to rewrite, never blocking. */
|
|
2243
|
+
declare const PUBLISH_BLOCKING_PLACEHOLDERS: ReadonlySet<PlaceholderKind>;
|
|
2244
|
+
/** True when a placeholder of `kind` blocks publishing until the studio fills it. */
|
|
2245
|
+
declare function blocksPublish(kind: PlaceholderKind): boolean;
|
|
1712
2246
|
interface ComposedPlaceholder {
|
|
1713
2247
|
nodeId: string;
|
|
1714
2248
|
/** The page key, or the global slot (`header` / `footer`), the node lives in. */
|
|
@@ -1805,6 +2339,66 @@ declare function parseSampleImageRef(value: unknown): number | null;
|
|
|
1805
2339
|
* composer never repairs a plan. `context` carries what the composer may not read for itself (the year).
|
|
1806
2340
|
*/
|
|
1807
2341
|
declare function composeSite(plan: SitePlan, context: ComposeContext): ComposedSite;
|
|
2342
|
+
/** The header pattern the Studio template stamps — and the builder palette's "Navigation bar". */
|
|
2343
|
+
declare const SITE_HEADER_PATTERN = "nav.inline-cta";
|
|
2344
|
+
/** A page of the studio as the builder lists it. */
|
|
2345
|
+
interface SitePageRef {
|
|
2346
|
+
readonly name: string;
|
|
2347
|
+
readonly route: string;
|
|
2348
|
+
readonly isHome?: boolean;
|
|
2349
|
+
}
|
|
2350
|
+
/** What the header is composed from when there is no Site Plan: the studio's name and its pages. */
|
|
2351
|
+
interface NavHeaderInput {
|
|
2352
|
+
readonly business: SiteBusiness;
|
|
2353
|
+
/** Every page of the studio, in the order the navigation should list them. */
|
|
2354
|
+
readonly pages: ReadonlyArray<SitePageRef>;
|
|
2355
|
+
}
|
|
2356
|
+
interface NavHeaderOptions {
|
|
2357
|
+
/** The header's id; its parts' ids derive from it (`<id>-0-1-…`), so a fresh id gives fresh parts. */
|
|
2358
|
+
readonly id: string;
|
|
2359
|
+
/** A phone-shape part's id (the builder passes its id generator). */
|
|
2360
|
+
readonly newId?: (suffix: string) => string;
|
|
2361
|
+
}
|
|
2362
|
+
interface ComposedNavHeader {
|
|
2363
|
+
/** The header — a global BEFORE element — carrying the pattern's phone shape (the drawer). */
|
|
2364
|
+
header: SerializedNode;
|
|
2365
|
+
issues: ComposeIssue[];
|
|
2366
|
+
}
|
|
2367
|
+
/** The pages a navigation links to: every page but Home (the brand links there) and template pages
|
|
2368
|
+
* (a `/work/:slug` route has no single address), in the studio's order. */
|
|
2369
|
+
declare function siteNavPages(pages: ReadonlyArray<SitePageRef>): SitePageRef[];
|
|
2370
|
+
/**
|
|
2371
|
+
* The Studio template's header, composed for a studio that has no Site Plan — the builder palette's
|
|
2372
|
+
* "Navigation bar". THE SAME pattern and the same composer as `composeSite`: the brand (the business name),
|
|
2373
|
+
* one plain Link per navigation page, the call to action (W1.1's one dangling-link rule when the studio has
|
|
2374
|
+
* no /contact page: an email to the business, else removed), and the pattern's phone shape. Pure.
|
|
2375
|
+
*/
|
|
2376
|
+
declare function composeNavHeader(input: NavHeaderInput, options: NavHeaderOptions): ComposedNavHeader;
|
|
2377
|
+
/** The pricing section (CC4b, board 10): plans with a Monthly / Yearly switch — the library and the palette, never a
|
|
2378
|
+
* Studio page (Q35). */
|
|
2379
|
+
declare const PRICING_PATTERN = "pricing.tiers";
|
|
2380
|
+
/** What a section is composed from when there is no Site Plan: the studio's name, its pages (the routes a link may
|
|
2381
|
+
* reach) and its facts. */
|
|
2382
|
+
interface SectionInput {
|
|
2383
|
+
readonly business?: SiteBusiness;
|
|
2384
|
+
readonly pages?: ReadonlyArray<SitePageRef>;
|
|
2385
|
+
}
|
|
2386
|
+
interface SectionOptions {
|
|
2387
|
+
/** The section's id; its parts' ids derive from it (`<id>-0-1-…`), so a fresh id gives fresh parts. */
|
|
2388
|
+
readonly id: string;
|
|
2389
|
+
}
|
|
2390
|
+
interface ComposedSection {
|
|
2391
|
+
section: SerializedNode;
|
|
2392
|
+
placeholders: ComposedPlaceholder[];
|
|
2393
|
+
issues: ComposeIssue[];
|
|
2394
|
+
}
|
|
2395
|
+
/**
|
|
2396
|
+
* ONE library pattern composed on its own — the builder palette's ready-made sections (CC4b: "Pricing", the
|
|
2397
|
+
* `pricing.tiers` pattern). THE SAME pattern and composer as `composeSite`: its words, its placeholders (a price shows
|
|
2398
|
+
* its label, never a number) and the one dangling-link rule — except a button to a page the studio lacks keeps its
|
|
2399
|
+
* words, unlinked, for the author to link. Pure.
|
|
2400
|
+
*/
|
|
2401
|
+
declare function composeSection(patternId: string, input: SectionInput, options: SectionOptions): ComposedSection;
|
|
1808
2402
|
|
|
1809
2403
|
/**
|
|
1810
2404
|
* The phone shapes of a navigation bar (complex-components plan CC1, §7a + R1; boards 1–3). ONE pure tree
|
|
@@ -1864,6 +2458,8 @@ interface NavShapeOptions {
|
|
|
1864
2458
|
barItems?: number;
|
|
1865
2459
|
/** A new part's id (the builder passes its id generator). Default: `<nav id>-<suffix>`. */
|
|
1866
2460
|
newId?: (suffix: string) => string;
|
|
2461
|
+
/** The studio's pages, for a header that links to none (a hand-built one): its menu lists these. */
|
|
2462
|
+
pages?: ReadonlyArray<NavPage>;
|
|
1867
2463
|
}
|
|
1868
2464
|
interface NavShapeResult {
|
|
1869
2465
|
/** The globals after the edit (the Navigation bar edited in place, the drawer/bar added or removed). */
|
|
@@ -1896,6 +2492,18 @@ declare function navShapeOf(globals: ReadonlyArray<SerializedNode>): NavShape |
|
|
|
1896
2492
|
declare function navShapeBreakpoint(globals: ReadonlyArray<SerializedNode>): PhoneMenuBreakpoint;
|
|
1897
2493
|
/** The pages the header links to, in order: its Links (W1.1 — one plain Link per page in the navigation). */
|
|
1898
2494
|
declare function navPages(root: SerializedNode): NavPage[];
|
|
2495
|
+
/** Where a phone menu's pages come from: the header's own page Links, else the studio's pages. */
|
|
2496
|
+
declare enum NavPagesSource {
|
|
2497
|
+
Header = "header",
|
|
2498
|
+
Site = "site",
|
|
2499
|
+
None = "none"
|
|
2500
|
+
}
|
|
2501
|
+
/** The pages a phone menu lists: the header's (`navPages`), else `sitePages` — a hand-built header with no
|
|
2502
|
+
* page links still gets a working menu. */
|
|
2503
|
+
declare function phoneMenuPages(root: SerializedNode, sitePages?: ReadonlyArray<NavPage>): {
|
|
2504
|
+
pages: NavPage[];
|
|
2505
|
+
source: NavPagesSource;
|
|
2506
|
+
};
|
|
1899
2507
|
/**
|
|
1900
2508
|
* Put a site's header into `shape`. The Navigation bar is `navId` or the global carrying the root role
|
|
1901
2509
|
* (else the first Container wearing `nav`, which this then marks with roles). Returns new globals;
|
|
@@ -1911,7 +2519,19 @@ interface AddBarItemResult {
|
|
|
1911
2519
|
* The bar's Items list "Add item" (board 2): one more item, before More — the next navigation page the
|
|
1912
2520
|
* bar does not link to yet (Home when every page is there). Refused at five (Q2). Input not mutated.
|
|
1913
2521
|
*/
|
|
1914
|
-
declare function addBarItem(globals: ReadonlyArray<SerializedNode>, options?: Pick<NavShapeOptions, 'newId'>): AddBarItemResult;
|
|
2522
|
+
declare function addBarItem(globals: ReadonlyArray<SerializedNode>, options?: Pick<NavShapeOptions, 'newId' | 'pages'>): AddBarItemResult;
|
|
2523
|
+
interface BarItemsEditResult {
|
|
2524
|
+
globals: SerializedNode[];
|
|
2525
|
+
/** False when nothing changed: no bar, an unknown item, or the bar would drop below three items (Q2). */
|
|
2526
|
+
changed: boolean;
|
|
2527
|
+
}
|
|
2528
|
+
/**
|
|
2529
|
+
* The bar's Items list "Remove" (board 2): the item goes, More included — refused below three items (Q2:
|
|
2530
|
+
* 3–5), so the bar never shrinks into something a thumb cannot use. Input not mutated.
|
|
2531
|
+
*/
|
|
2532
|
+
declare function removeBarItem(globals: ReadonlyArray<SerializedNode>, itemId: string): BarItemsEditResult;
|
|
2533
|
+
/** The bar's Items list drag-to-reorder (board 2): item `from` moves to `to`. Input not mutated. */
|
|
2534
|
+
declare function moveBarItem(globals: ReadonlyArray<SerializedNode>, from: number, to: number): BarItemsEditResult;
|
|
1915
2535
|
|
|
1916
|
-
export { BAR_ITEMS_MAX, BAR_ITEMS_MIN, BASELINE_ROLES, BaselineRole, BindScope, CardBindTarget, ComposeError, ComposeIssueCode, DANGLING_LINK_CODES, DEFAULT_PHONE_MENU_BREAKPOINT, FACT_KEYS, GlobalSlot, NAV_PART_LABELS, NAV_SHAPE_COPY, NEUTRAL_STYLE_PROPS, NODE_BASELINES, NavRole, NavShape, NavShapeError, PatternDirective, PatternGlobalPosition, PatternOpens, PatternPlaceholder, PatternRecipe, PhoneMenuBreakpoint, PlaceholderKind, PlanDataSourceMode, PlanDataSourceType, RelativeOp, SAMPLE_IMAGE_REF, SITE_FACT_LABELS, SITE_PATTERNS, SITE_PLAN_VERSION, SITE_TEMPLATES, SPEC_SITE_FACTS, SPEC_SITE_PATTERNS, SPEC_SITE_PLAN_SHAPE, SPEC_SITE_TEMPLATES, STUDIO_TEMPLATE, SitePlanError, SitePlanIssueCode, SitePlanSourceKind, SiteTemplateError, SiteTemplateId, addBarItem, altSourceScopes, assertStyleSlots, assertValidSitePlan, barIconForRoute, composeSite, createSerializedNode, findNavRoot, navPages, navShapeBreakpoint, navShapeOf, nextSourceOf, nodeBindPaths, parseSampleImageRef, patternById, patternNeedsBinding, patternNodes, patternOptionalParts, patternScopes, patternSlots, patternTakesBinding, planFromTemplate, planNavShape, releasedLayoutDefaults, requiredShapeKeys, routeParams, sampleImageRef, setStyleProps, shapeKeys, validateSitePlan, walkSerialized };
|
|
1917
|
-
export type { AddBarItemResult, CmsDataSourcePlan, ComposeContext, ComposeIssue, ComposedDataSource, ComposedItem, ComposedPage, ComposedPlaceholder, ComposedRoute, ComposedSite, ContentFieldPlan, ContentSeedPlan, ContentTypePlan, CreateNodeOptions, DataSourcePlan, FactKey, NavPage, NavShapeOptions, NavShapeResult, NodeBaseline, PagePlan, PageSectionPlan, PatternNode, RelativeDataSourcePlan, SerializedBinding, SerializedNode, SerializedResponsive, SiteBusiness, SitePattern, SitePlan, SitePlanIssue, SitePlanSource, SitePlanValidation, SiteTemplate, TemplatePlanInput };
|
|
2536
|
+
export { BAR_ITEMS_MAX, BAR_ITEMS_MIN, BASELINE_ROLES, BaselineRole, BindScope, CardBindTarget, ComposeError, ComposeIssueCode, DANGLING_LINK_CODES, DEFAULT_PHONE_MENU_BREAKPOINT, FACT_KEYS, GlobalSlot, NAV_PART_LABELS, NAV_SHAPE_COPY, NEUTRAL_STYLE_PROPS, NODE_BASELINES, NavPagesSource, NavRole, NavShape, NavShapeError, PRICING_PATTERN, PUBLISH_BLOCKING_PLACEHOLDERS, PatternDirective, PatternGlobalPosition, PatternOpens, PatternPlaceholder, PatternRecipe, PhoneMenuBreakpoint, PlaceholderKind, PlanDataSourceMode, PlanDataSourceType, RelativeOp, SAMPLE_IMAGE_REF, SITE_FACT_LABELS, SITE_HEADER_PATTERN, SITE_PATTERNS, SITE_PLAN_VERSION, SITE_TEMPLATES, SPEC_SITE_FACTS, SPEC_SITE_PATTERNS, SPEC_SITE_PLAN_SHAPE, SPEC_SITE_TEMPLATES, STUDIO_TEMPLATE, SitePlanError, SitePlanIssueCode, SitePlanSourceKind, SiteTemplateError, SiteTemplateId, addBarItem, altSourceScopes, assertStyleSlots, assertValidSitePlan, barIconForRoute, blocksPublish, composeNavHeader, composeSection, composeSite, createSerializedNode, findNavRoot, moveBarItem, navPages, navShapeBreakpoint, navShapeOf, nextSourceOf, nodeBindPaths, parseSampleImageRef, patternById, patternNeedsBinding, patternNodes, patternOptionalParts, patternScopes, patternSlots, patternTakesBinding, phoneMenuPages, planFromTemplate, planNavShape, releasedLayoutDefaults, removeBarItem, requiredShapeKeys, routeParams, sampleImageRef, setStyleProps, shapeKeys, siteNavPages, validateSitePlan, walkSerialized };
|
|
2537
|
+
export type { AddBarItemResult, BarItemsEditResult, CmsDataSourcePlan, ComposeContext, ComposeIssue, ComposedDataSource, ComposedItem, ComposedNavHeader, ComposedPage, ComposedPlaceholder, ComposedRoute, ComposedSection, ComposedSite, ContentFieldPlan, ContentSeedPlan, ContentTypePlan, CreateNodeOptions, DataSourcePlan, FactKey, NavHeaderInput, NavHeaderOptions, NavPage, NavShapeOptions, NavShapeResult, NodeBaseline, PagePlan, PageSectionPlan, PatternNode, RelativeDataSourcePlan, SectionInput, SectionOptions, SerializedBinding, SerializedNode, SerializedResponsive, SiteBusiness, SitePageRef, SitePattern, SitePlan, SitePlanIssue, SitePlanSource, SitePlanValidation, SiteTemplate, TemplatePlanInput };
|