@gmb/bitmark-parser-generator 5.10.0 → 5.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -309,6 +309,8 @@ var BitType = {
309
309
  exampleList: "example-list",
310
310
  extractorAiChat: "extractor-ai-chat",
311
311
  extractorBlock: "extractor-block",
312
+ extractorBlueprint: "extractor-blueprint",
313
+ extractorBlueprintConfiguration: "extractor-blueprint-configuration",
312
314
  extractorConfiguration: "extractor-configuration",
313
315
  extractorImage: "extractor-image",
314
316
  extractorImageCollapsible: "extractor-image-collapsible",
@@ -492,6 +494,7 @@ var BitType = {
492
494
  pageOpenBookList: "page-open-book-list",
493
495
  printBook: "print-book",
494
496
  openBookChapter: "open-book-chapter",
497
+ openBookChapterTeaser: "open-book-chapter-teaser",
495
498
  pagePerson: "page-person",
496
499
  pageProduct: "page-product",
497
500
  pageProductList: "page-product-list",
@@ -841,6 +844,8 @@ var AbstractTagConfig = class {
841
844
  __publicField(this, "chain");
842
845
  __publicField(this, "jsonKey");
843
846
  // If the json key is different from the tag
847
+ __publicField(this, "secondaryJsonKey");
848
+ // Heading card alternate path
844
849
  __publicField(this, "deprecated");
845
850
  this.type = params.type;
846
851
  this.configKey = params.configKey;
@@ -849,6 +854,7 @@ var AbstractTagConfig = class {
849
854
  this.minCount = params.minCount;
850
855
  this.chain = params.chain;
851
856
  this.jsonKey = params.jsonKey;
857
+ this.secondaryJsonKey = params.secondaryJsonKey;
852
858
  this.deprecated = params.deprecated;
853
859
  }
854
860
  };
@@ -970,18 +976,22 @@ var ResourceTagConfig = class extends AbstractTagConfig {
970
976
 
971
977
  // src/model/config/CardVariantConfig.ts
972
978
  var CardVariantConfig = class {
973
- // Default: 1
974
- constructor(tags2, bodyAllowed, bodyRequired, repeatCount) {
979
+ // JSON path for body text
980
+ constructor(tags2, bodyAllowed, bodyRequired, repeatCount, jsonKey) {
975
981
  __publicField(this, "tags");
976
982
  __publicField(this, "bodyAllowed");
977
983
  // Default: true
978
984
  __publicField(this, "bodyRequired");
979
985
  // Default: false
980
986
  __publicField(this, "repeatCount");
987
+ // Default: 1
988
+ // JSON mapping fields
989
+ __publicField(this, "jsonKey");
981
990
  this.tags = tags2;
982
991
  this.bodyAllowed = bodyAllowed == null ? true : bodyAllowed;
983
992
  this.bodyRequired = bodyRequired;
984
993
  this.repeatCount = repeatCount;
994
+ this.jsonKey = jsonKey;
985
995
  }
986
996
  toString(options) {
987
997
  const opts = Object.assign({}, options);
@@ -1003,27 +1013,63 @@ ${tag.toString(opts)}`;
1003
1013
  }
1004
1014
  };
1005
1015
 
1016
+ // src/model/config/CardSideConfig.ts
1017
+ var CardSideConfig = class {
1018
+ constructor(name, repeat, variants) {
1019
+ __publicField(this, "name");
1020
+ __publicField(this, "repeat");
1021
+ __publicField(this, "variants");
1022
+ this.name = name;
1023
+ this.repeat = repeat;
1024
+ this.variants = variants;
1025
+ }
1026
+ toString(options) {
1027
+ const opts = Object.assign({}, options);
1028
+ let s = "";
1029
+ s += `[Side: ${this.name}]`;
1030
+ if (this.repeat) s += " (repeat)";
1031
+ let variantNo = 0;
1032
+ for (const variant of this.variants) {
1033
+ s += `
1034
+ [Variant ${variantNo}]`;
1035
+ s += `
1036
+ ${variant.toString(opts)}`;
1037
+ variantNo++;
1038
+ }
1039
+ return s;
1040
+ }
1041
+ };
1042
+
1006
1043
  // src/model/config/CardSetConfig.ts
1007
1044
  var CardSetConfig = class {
1008
- constructor(configKey, variants) {
1045
+ constructor(configKey, jsonKey, itemType, sections, sides) {
1009
1046
  __publicField(this, "configKey");
1010
- __publicField(this, "variants");
1047
+ __publicField(this, "jsonKey");
1048
+ __publicField(this, "itemType");
1049
+ __publicField(this, "sections");
1050
+ __publicField(this, "sides");
1011
1051
  this.configKey = configKey;
1012
- this.variants = variants;
1052
+ this.jsonKey = jsonKey;
1053
+ this.itemType = itemType;
1054
+ this.sections = sections;
1055
+ this.sides = sides;
1056
+ }
1057
+ // Legacy accessor — provides the same shape as the old `variants: CardVariantConfig[][]`
1058
+ // so downstream consumers (Config.getCardSetVariantConfig, etc.) continue to work.
1059
+ get variants() {
1060
+ return this.sides.map((side) => side.variants);
1013
1061
  }
1014
1062
  toString(options) {
1015
1063
  const opts = Object.assign({}, options);
1016
1064
  let s = "";
1017
- let sideNo = 0;
1018
- let variantNo = 0;
1019
- for (const sides of this.variants) {
1020
- for (const variant of sides) {
1021
- s += `[Card - Side ${sideNo}, Variant ${variantNo}]`;
1022
- s += `
1023
- ${variant.toString(opts)}`;
1024
- variantNo++;
1025
- }
1026
- sideNo++;
1065
+ s += `[CardSet: ${this.configKey}]`;
1066
+ s += `
1067
+ jsonKey: ${this.jsonKey}`;
1068
+ s += `
1069
+ itemType: ${this.itemType}`;
1070
+ for (const side of this.sides) {
1071
+ s += `
1072
+ ${side.toString(opts)}`;
1027
1073
  }
1028
1074
  return s;
1029
1075
  }
@@ -2176,589 +2222,947 @@ var import_superenum15 = require("@ncoderz/superenum");
2176
2222
 
2177
2223
  // src/config/raw/cardSets.ts
2178
2224
  var CARDSETS = {
2179
- [CardSetConfigKey.definitionList]: {
2180
- variants: [
2181
- [
2182
- {
2183
- tags: [
2184
- {
2185
- key: ConfigKey.group_standardItemLeadInstructionHint,
2186
- description: "Standard tags for lead, instruction, and hint."
2187
- },
2188
- {
2189
- key: ConfigKey.property_example,
2190
- description: "Example text for the definition.",
2191
- format: TagFormat.plainText
2192
- },
2193
- {
2194
- key: ConfigKey.tag_title,
2195
- description: "Title of the definition."
2196
- },
2197
- {
2198
- key: ConfigKey.group_resourceIcon,
2199
- description: "Icon resource for the definition."
2200
- }
2201
- ],
2202
- repeatCount: Count.infinity
2203
- }
2204
- ]
2225
+ //
2226
+ // flashcard
2227
+ //
2228
+ [CardSetConfigKey.flashcard]: {
2229
+ jsonKey: "cards",
2230
+ sides: [
2231
+ {
2232
+ name: "question",
2233
+ variants: [
2234
+ {
2235
+ jsonKey: "question.text",
2236
+ tags: [
2237
+ {
2238
+ key: ConfigKey.group_standardTags,
2239
+ description: "Standard tags for the flashcard."
2240
+ },
2241
+ {
2242
+ key: ConfigKey.tag_title,
2243
+ description: "Title of the flashcard."
2244
+ },
2245
+ {
2246
+ key: ConfigKey.group_resourceIcon,
2247
+ description: "Icon resource for the flashcard.",
2248
+ jsonKey: "question.icon"
2249
+ }
2250
+ ]
2251
+ }
2252
+ ]
2253
+ },
2254
+ {
2255
+ name: "answer",
2256
+ variants: [
2257
+ {
2258
+ jsonKey: "answer.text",
2259
+ tags: [
2260
+ {
2261
+ key: ConfigKey.group_standardTags,
2262
+ description: "Standard tags for the flashcard."
2263
+ },
2264
+ {
2265
+ key: ConfigKey.tag_title,
2266
+ description: "Title of the flashcard."
2267
+ },
2268
+ {
2269
+ key: ConfigKey.group_resourceIcon,
2270
+ description: "Icon resource for the flashcard.",
2271
+ jsonKey: "answer.icon"
2272
+ }
2273
+ ]
2274
+ },
2275
+ {
2276
+ jsonKey: "alternativeAnswers[].text",
2277
+ tags: [
2278
+ {
2279
+ key: ConfigKey.group_standardTags,
2280
+ description: "Standard tags for the flashcard."
2281
+ },
2282
+ {
2283
+ key: ConfigKey.tag_title,
2284
+ description: "Title of the flashcard."
2285
+ },
2286
+ {
2287
+ key: ConfigKey.group_resourceIcon,
2288
+ description: "Icon resource for the flashcard."
2289
+ }
2290
+ ],
2291
+ repeatCount: Count.infinity
2292
+ }
2293
+ ]
2294
+ }
2205
2295
  ]
2206
2296
  },
2207
- [CardSetConfigKey.flashcard]: {
2208
- variants: [
2209
- [
2210
- {
2211
- tags: [
2212
- {
2213
- key: ConfigKey.group_standardItemLeadInstructionHint,
2214
- description: "Standard tags for lead, instruction, and hint."
2215
- },
2216
- {
2217
- key: ConfigKey.property_example,
2218
- description: "Example text for the flashcard.",
2219
- format: TagFormat.plainText
2220
- },
2221
- {
2222
- key: ConfigKey.tag_title,
2223
- description: "Title of the flashcard."
2224
- },
2225
- {
2226
- key: ConfigKey.group_resourceIcon,
2227
- description: "Icon resource for the flashcard."
2228
- }
2229
- ],
2230
- repeatCount: Count.infinity
2231
- }
2232
- ]
2297
+ //
2298
+ // definition-list
2299
+ //
2300
+ [CardSetConfigKey.definitionList]: {
2301
+ jsonKey: "definitions",
2302
+ sides: [
2303
+ {
2304
+ name: "term",
2305
+ variants: [
2306
+ {
2307
+ jsonKey: "term.text",
2308
+ tags: [
2309
+ {
2310
+ key: ConfigKey.group_standardTags,
2311
+ description: "Standard tags for the definition."
2312
+ },
2313
+ {
2314
+ key: ConfigKey.tag_title,
2315
+ description: "Title of the definition.",
2316
+ secondaryJsonKey: "heading.forKeys"
2317
+ },
2318
+ {
2319
+ key: ConfigKey.group_resourceIcon,
2320
+ description: "Icon resource for the definition.",
2321
+ jsonKey: "term.icon"
2322
+ }
2323
+ ]
2324
+ }
2325
+ ]
2326
+ },
2327
+ {
2328
+ name: "definition",
2329
+ variants: [
2330
+ {
2331
+ jsonKey: "definition.text",
2332
+ tags: [
2333
+ {
2334
+ key: ConfigKey.group_standardTags,
2335
+ description: "Standard tags for the definition."
2336
+ },
2337
+ {
2338
+ key: ConfigKey.tag_title,
2339
+ description: "Title of the definition.",
2340
+ secondaryJsonKey: "heading.forValues"
2341
+ },
2342
+ {
2343
+ key: ConfigKey.group_resourceIcon,
2344
+ description: "Icon resource for the definition.",
2345
+ jsonKey: "definition.icon"
2346
+ }
2347
+ ]
2348
+ },
2349
+ {
2350
+ jsonKey: "alternativeDefinitions[].text",
2351
+ tags: [
2352
+ {
2353
+ key: ConfigKey.group_standardTags,
2354
+ description: "Standard tags for the definition."
2355
+ },
2356
+ {
2357
+ key: ConfigKey.tag_title,
2358
+ description: "Title of the definition."
2359
+ },
2360
+ {
2361
+ key: ConfigKey.group_resourceIcon,
2362
+ description: "Icon resource for the definition."
2363
+ }
2364
+ ],
2365
+ repeatCount: Count.infinity
2366
+ }
2367
+ ]
2368
+ }
2233
2369
  ]
2234
2370
  },
2235
- [CardSetConfigKey.elements]: {
2236
- variants: [
2237
- [
2238
- {
2239
- tags: [
2240
- {
2241
- key: ConfigKey.group_standardItemLeadInstructionHint,
2242
- description: "Standard tags for lead, instruction, and hint."
2243
- },
2244
- {
2245
- key: ConfigKey.property_example,
2246
- description: "Example text for the element.",
2247
- format: TagFormat.plainText
2248
- }
2249
- ],
2250
- repeatCount: Count.infinity
2251
- }
2252
- ]
2371
+ //
2372
+ // match-pairs
2373
+ //
2374
+ [CardSetConfigKey.matchPairs]: {
2375
+ jsonKey: "pairs",
2376
+ sides: [
2377
+ {
2378
+ name: "key",
2379
+ variants: [
2380
+ {
2381
+ jsonKey: "key",
2382
+ tags: [
2383
+ {
2384
+ key: ConfigKey.group_standardTags,
2385
+ description: "Standard tags for the match pair."
2386
+ },
2387
+ {
2388
+ key: ConfigKey.tag_title,
2389
+ description: "Title of the match pair.",
2390
+ secondaryJsonKey: "heading.forKeys"
2391
+ },
2392
+ {
2393
+ key: ConfigKey.property_isCaseSensitive,
2394
+ description: "Property to indicate if the match is case sensitive.",
2395
+ format: TagFormat.boolean
2396
+ },
2397
+ {
2398
+ key: ConfigKey.resource_audio,
2399
+ description: "Audio resource for the match pair.",
2400
+ jsonKey: "keyAudio"
2401
+ },
2402
+ {
2403
+ key: ConfigKey.resource_image,
2404
+ description: "Image resource for the match pair.",
2405
+ jsonKey: "keyImage"
2406
+ }
2407
+ ]
2408
+ }
2409
+ ]
2410
+ },
2411
+ {
2412
+ name: "values",
2413
+ repeat: true,
2414
+ variants: [
2415
+ {
2416
+ jsonKey: "values[]",
2417
+ tags: [
2418
+ {
2419
+ key: ConfigKey.group_standardTags,
2420
+ description: "Standard tags for the match pair."
2421
+ },
2422
+ {
2423
+ key: ConfigKey.tag_title,
2424
+ description: "Title of the match pair.",
2425
+ secondaryJsonKey: "heading.forValues"
2426
+ },
2427
+ {
2428
+ key: ConfigKey.property_isCaseSensitive,
2429
+ description: "Property to indicate if the match is case sensitive.",
2430
+ format: TagFormat.boolean
2431
+ }
2432
+ ],
2433
+ repeatCount: Count.infinity
2434
+ }
2435
+ ]
2436
+ }
2253
2437
  ]
2254
2438
  },
2255
- [CardSetConfigKey.statements]: {
2256
- variants: [
2257
- [
2258
- {
2259
- tags: [
2260
- {
2261
- key: ConfigKey.tag_true,
2262
- description: "Tag for true statements.",
2263
- maxCount: 1
2264
- },
2265
- {
2266
- key: ConfigKey.tag_false,
2267
- description: "Tag for false statements.",
2268
- maxCount: 1
2269
- },
2270
- {
2271
- key: ConfigKey.group_standardItemLeadInstructionHint,
2272
- description: "Standard tags for lead, instruction, and hint."
2273
- },
2274
- {
2275
- key: ConfigKey.property_example,
2276
- description: "Example text for the statement.",
2277
- format: TagFormat.plainText
2278
- }
2279
- ],
2280
- bodyAllowed: false
2281
- }
2282
- ]
2439
+ //
2440
+ // match-audio-pairs
2441
+ //
2442
+ [CardSetConfigKey.matchAudioPairs]: {
2443
+ jsonKey: "pairs",
2444
+ sides: [
2445
+ {
2446
+ name: "key",
2447
+ variants: [
2448
+ {
2449
+ jsonKey: "key",
2450
+ tags: [
2451
+ {
2452
+ key: ConfigKey.group_standardTags,
2453
+ description: "Standard tags for the audio match pair."
2454
+ },
2455
+ {
2456
+ key: ConfigKey.tag_title,
2457
+ description: "Title of the audio match pair.",
2458
+ secondaryJsonKey: "heading.forKeys"
2459
+ },
2460
+ {
2461
+ key: ConfigKey.resource_audio,
2462
+ description: "Audio resource for the match pair.",
2463
+ jsonKey: "keyAudio"
2464
+ }
2465
+ ]
2466
+ }
2467
+ ]
2468
+ },
2469
+ {
2470
+ name: "values",
2471
+ repeat: true,
2472
+ variants: [
2473
+ {
2474
+ jsonKey: "values[]",
2475
+ tags: [
2476
+ {
2477
+ key: ConfigKey.group_standardTags,
2478
+ description: "Standard tags for the audio match pair."
2479
+ },
2480
+ {
2481
+ key: ConfigKey.tag_title,
2482
+ description: "Title of the audio match pair.",
2483
+ secondaryJsonKey: "heading.forValues"
2484
+ },
2485
+ {
2486
+ key: ConfigKey.resource_audio,
2487
+ description: "Audio resource for the match pair."
2488
+ }
2489
+ ],
2490
+ repeatCount: Count.infinity
2491
+ }
2492
+ ]
2493
+ }
2283
2494
  ]
2284
2495
  },
2285
- [CardSetConfigKey.quiz]: {
2286
- variants: [
2287
- [
2288
- {
2289
- tags: [
2290
- {
2291
- key: ConfigKey.group_trueFalse,
2292
- description: "Group for true/false questions."
2293
- },
2294
- {
2295
- key: ConfigKey.group_standardItemLeadInstructionHint,
2296
- description: "Standard tags for lead, instruction, and hint."
2297
- },
2298
- {
2299
- key: ConfigKey.property_example,
2300
- description: "Example text for the quiz question.",
2301
- format: TagFormat.plainText
2302
- }
2303
- ],
2304
- bodyAllowed: false
2305
- }
2306
- ]
2496
+ //
2497
+ // match-image-pairs
2498
+ //
2499
+ [CardSetConfigKey.matchImagePairs]: {
2500
+ jsonKey: "pairs",
2501
+ sides: [
2502
+ {
2503
+ name: "key",
2504
+ variants: [
2505
+ {
2506
+ jsonKey: "key",
2507
+ tags: [
2508
+ {
2509
+ key: ConfigKey.group_standardTags,
2510
+ description: "Standard tags for the image match pair."
2511
+ },
2512
+ {
2513
+ key: ConfigKey.tag_title,
2514
+ description: "Title of the image match pair.",
2515
+ secondaryJsonKey: "heading.forKeys"
2516
+ },
2517
+ {
2518
+ key: ConfigKey.resource_image,
2519
+ description: "Image resource for the match pair.",
2520
+ jsonKey: "keyImage"
2521
+ }
2522
+ ]
2523
+ }
2524
+ ]
2525
+ },
2526
+ {
2527
+ name: "values",
2528
+ repeat: true,
2529
+ variants: [
2530
+ {
2531
+ jsonKey: "values[]",
2532
+ tags: [
2533
+ {
2534
+ key: ConfigKey.group_standardTags,
2535
+ description: "Standard tags for the image match pair."
2536
+ },
2537
+ {
2538
+ key: ConfigKey.tag_title,
2539
+ description: "Title of the image match pair.",
2540
+ secondaryJsonKey: "heading.forValues"
2541
+ },
2542
+ {
2543
+ key: ConfigKey.resource_image,
2544
+ description: "Image resource for the match pair."
2545
+ }
2546
+ ],
2547
+ repeatCount: Count.infinity
2548
+ }
2549
+ ]
2550
+ }
2307
2551
  ]
2308
2552
  },
2309
- [CardSetConfigKey.feedback]: {
2310
- variants: [
2311
- // Side 1
2312
- [
2313
- // Variant 1..N
2314
- {
2315
- tags: [
2316
- {
2317
- key: ConfigKey.group_standardItemLeadInstructionHint,
2318
- description: "Standard tags for lead, instruction, and hint."
2319
- },
2320
- {
2321
- key: ConfigKey.group_trueFalse,
2322
- description: "Group for true/false feedback."
2323
- },
2324
- {
2325
- key: ConfigKey.tag_title,
2326
- description: "Title of the feedback."
2327
- }
2328
- ],
2329
- bodyAllowed: false
2330
- }
2331
- ],
2332
- // Side 2
2333
- [
2334
- // Variant 1..N
2335
- {
2336
- tags: [
2337
- {
2338
- key: ConfigKey.group_standardItemLeadInstructionHint,
2339
- description: "Standard tags for lead, instruction, and hint."
2340
- },
2341
- {
2342
- key: ConfigKey.property_reasonableNumOfChars,
2343
- description: "Property for reasonable number of characters.",
2344
- format: TagFormat.number
2345
- },
2346
- {
2347
- key: ConfigKey.property_example,
2348
- description: "Example text for the feedback.",
2349
- format: TagFormat.plainText
2350
- },
2351
- {
2352
- key: ConfigKey.tag_title,
2353
- description: "Title of the feedback."
2354
- }
2355
- ],
2356
- bodyAllowed: true
2357
- }
2358
- ]
2553
+ //
2554
+ // match-matrix
2555
+ //
2556
+ [CardSetConfigKey.matchMatrix]: {
2557
+ jsonKey: "matrix",
2558
+ sides: [
2559
+ {
2560
+ name: "key",
2561
+ variants: [
2562
+ {
2563
+ jsonKey: "key",
2564
+ tags: [
2565
+ {
2566
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2567
+ description: "Standard tags for lead, instruction, and hint."
2568
+ },
2569
+ {
2570
+ key: ConfigKey.property_example,
2571
+ description: "Example text for the match matrix.",
2572
+ format: TagFormat.plainText
2573
+ },
2574
+ {
2575
+ key: ConfigKey.tag_title,
2576
+ description: "Title of the match matrix.",
2577
+ secondaryJsonKey: "heading.forKeys"
2578
+ },
2579
+ {
2580
+ key: ConfigKey.property_isCaseSensitive,
2581
+ description: "Property to indicate if the match is case sensitive.",
2582
+ format: TagFormat.boolean
2583
+ }
2584
+ ]
2585
+ }
2586
+ ]
2587
+ },
2588
+ {
2589
+ name: "cell",
2590
+ repeat: true,
2591
+ variants: [
2592
+ {
2593
+ jsonKey: "cells[{s}].values[]",
2594
+ tags: [
2595
+ {
2596
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2597
+ description: "Standard tags for lead, instruction, and hint."
2598
+ },
2599
+ {
2600
+ key: ConfigKey.property_example,
2601
+ description: "Example text for the match matrix.",
2602
+ format: TagFormat.plainText
2603
+ },
2604
+ {
2605
+ key: ConfigKey.tag_title,
2606
+ description: "Title of the match matrix.",
2607
+ secondaryJsonKey: "heading.forValues"
2608
+ },
2609
+ {
2610
+ key: ConfigKey.property_isCaseSensitive,
2611
+ description: "Property to indicate if the match is case sensitive.",
2612
+ format: TagFormat.boolean
2613
+ }
2614
+ ],
2615
+ repeatCount: Count.infinity
2616
+ }
2617
+ ]
2618
+ }
2359
2619
  ]
2360
2620
  },
2361
- [CardSetConfigKey.questions]: {
2362
- variants: [
2363
- [
2364
- {
2365
- tags: [
2366
- {
2367
- key: ConfigKey.property_reasonableNumOfChars,
2368
- description: "Property for reasonable number of characters.",
2369
- format: TagFormat.number
2370
- },
2371
- {
2372
- key: ConfigKey.tag_sampleSolution,
2373
- description: "Sample solution for the question."
2374
- },
2375
- {
2376
- key: ConfigKey.property_sampleSolution,
2377
- description: "Property for sample solution text.",
2378
- format: TagFormat.plainText
2379
- },
2380
- {
2381
- key: ConfigKey.property_additionalSolutions,
2382
- description: "Property for additional solutions.",
2383
- format: TagFormat.plainText,
2384
- maxCount: Count.infinity
2385
- },
2386
- {
2387
- key: ConfigKey.property_partialAnswer,
2388
- description: "Property for partial answer text.",
2389
- format: TagFormat.plainText
2390
- },
2391
- {
2392
- key: ConfigKey.group_standardItemLeadInstructionHint,
2393
- description: "Standard tags for lead, instruction, and hint."
2394
- },
2395
- {
2396
- key: ConfigKey.property_example,
2397
- description: "Example text for the question.",
2398
- format: TagFormat.plainText
2399
- }
2400
- ],
2401
- repeatCount: Count.infinity
2402
- }
2403
- ]
2621
+ //
2622
+ // statements
2623
+ //
2624
+ [CardSetConfigKey.statements]: {
2625
+ jsonKey: "statements",
2626
+ sides: [
2627
+ {
2628
+ name: "statement",
2629
+ variants: [
2630
+ {
2631
+ jsonKey: "statement",
2632
+ tags: [
2633
+ {
2634
+ key: ConfigKey.tag_true,
2635
+ description: "Tag for true statements.",
2636
+ maxCount: 1
2637
+ },
2638
+ {
2639
+ key: ConfigKey.tag_false,
2640
+ description: "Tag for false statements.",
2641
+ maxCount: 1
2642
+ },
2643
+ {
2644
+ key: ConfigKey.group_standardTags,
2645
+ description: "Standard tags for the statement."
2646
+ }
2647
+ ],
2648
+ bodyAllowed: false
2649
+ }
2650
+ ]
2651
+ }
2404
2652
  ]
2405
2653
  },
2406
- // matchPairs
2407
- // TODO: We actually need to allow for different card configurations, because titles are valid on the first card only.
2408
- // For now we allow them to be valid on all cards, but we need to change this.
2409
- [CardSetConfigKey.matchPairs]: {
2410
- variants: [
2411
- // Side 1
2412
- [
2413
- // Variant 1..N
2414
- {
2415
- tags: [
2416
- {
2417
- key: ConfigKey.group_standardItemLeadInstructionHint,
2418
- description: "Standard tags for lead, instruction, and hint."
2419
- },
2420
- {
2421
- key: ConfigKey.property_example,
2422
- description: "Example text for the match pair.",
2423
- format: TagFormat.plainText
2424
- },
2425
- {
2426
- key: ConfigKey.tag_title,
2427
- description: "Title of the match pair."
2428
- },
2429
- {
2430
- key: ConfigKey.property_isCaseSensitive,
2431
- description: "Property to indicate if the match is case sensitive.",
2432
- format: TagFormat.boolean
2433
- }
2434
- ],
2435
- repeatCount: Count.infinity
2436
- }
2437
- ]
2654
+ //
2655
+ // quiz
2656
+ //
2657
+ [CardSetConfigKey.quiz]: {
2658
+ jsonKey: "quizzes",
2659
+ sides: [
2660
+ {
2661
+ name: "choices",
2662
+ variants: [
2663
+ {
2664
+ jsonKey: null,
2665
+ tags: [
2666
+ {
2667
+ key: ConfigKey.group_trueFalse,
2668
+ description: "Group for true/false questions."
2669
+ },
2670
+ {
2671
+ key: ConfigKey.group_standardTags,
2672
+ description: "Standard tags for the quiz."
2673
+ }
2674
+ ],
2675
+ bodyAllowed: false
2676
+ }
2677
+ ]
2678
+ }
2438
2679
  ]
2439
2680
  },
2440
- [CardSetConfigKey.matchAudioPairs]: {
2441
- variants: [
2442
- // Side 1
2443
- [
2444
- // Variant 1..N
2445
- {
2446
- tags: [
2447
- {
2448
- key: ConfigKey.group_standardItemLeadInstructionHint,
2449
- description: "Standard tags for lead, instruction, and hint."
2450
- },
2451
- {
2452
- key: ConfigKey.property_example,
2453
- description: "Example text for the audio match pair.",
2454
- format: TagFormat.plainText
2455
- },
2456
- {
2457
- key: ConfigKey.tag_title,
2458
- description: "Title of the audio match pair."
2459
- },
2460
- {
2461
- key: ConfigKey.resource_audio,
2462
- description: "Audio resource for the match pair."
2463
- }
2464
- ],
2465
- repeatCount: Count.infinity
2466
- }
2467
- ]
2681
+ //
2682
+ // feedback
2683
+ //
2684
+ [CardSetConfigKey.feedback]: {
2685
+ jsonKey: "feedbacks",
2686
+ sides: [
2687
+ {
2688
+ name: "choices",
2689
+ variants: [
2690
+ {
2691
+ jsonKey: null,
2692
+ tags: [
2693
+ {
2694
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2695
+ description: "Standard tags for lead, instruction, and hint."
2696
+ },
2697
+ {
2698
+ key: ConfigKey.group_trueFalse,
2699
+ description: "Group for true/false feedback."
2700
+ },
2701
+ {
2702
+ key: ConfigKey.tag_title,
2703
+ description: "Title of the feedback.",
2704
+ secondaryJsonKey: "heading.forKeys"
2705
+ }
2706
+ ],
2707
+ bodyAllowed: false
2708
+ }
2709
+ ]
2710
+ },
2711
+ {
2712
+ name: "reason",
2713
+ variants: [
2714
+ {
2715
+ jsonKey: "reason.text",
2716
+ tags: [
2717
+ {
2718
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2719
+ description: "Standard tags for lead, instruction, and hint."
2720
+ },
2721
+ {
2722
+ key: ConfigKey.property_reasonableNumOfChars,
2723
+ description: "Property for reasonable number of characters.",
2724
+ format: TagFormat.number
2725
+ },
2726
+ {
2727
+ key: ConfigKey.property_example,
2728
+ description: "Example text for the feedback.",
2729
+ format: TagFormat.plainText
2730
+ },
2731
+ {
2732
+ key: ConfigKey.tag_title,
2733
+ description: "Title of the feedback.",
2734
+ secondaryJsonKey: "heading.forValues"
2735
+ }
2736
+ ],
2737
+ bodyAllowed: true
2738
+ }
2739
+ ]
2740
+ }
2468
2741
  ]
2469
2742
  },
2470
- [CardSetConfigKey.matchImagePairs]: {
2471
- variants: [
2472
- // Side 1
2473
- [
2474
- // Variant 1..N
2475
- {
2476
- tags: [
2477
- {
2478
- key: ConfigKey.group_standardItemLeadInstructionHint,
2479
- description: "Standard tags for lead, instruction, and hint."
2480
- },
2481
- {
2482
- key: ConfigKey.property_example,
2483
- description: "Example text for the image match pair.",
2484
- format: TagFormat.plainText
2485
- },
2486
- {
2487
- key: ConfigKey.tag_title,
2488
- description: "Title of the image match pair."
2489
- },
2490
- {
2491
- key: ConfigKey.resource_image,
2492
- description: "Image resource for the match pair."
2493
- }
2494
- ],
2495
- repeatCount: Count.infinity
2496
- }
2497
- ]
2743
+ //
2744
+ // questions
2745
+ //
2746
+ [CardSetConfigKey.questions]: {
2747
+ jsonKey: "questions",
2748
+ sides: [
2749
+ {
2750
+ name: "question",
2751
+ variants: [
2752
+ {
2753
+ jsonKey: "question",
2754
+ tags: [
2755
+ {
2756
+ key: ConfigKey.property_reasonableNumOfChars,
2757
+ description: "Property for reasonable number of characters.",
2758
+ format: TagFormat.number
2759
+ },
2760
+ {
2761
+ key: ConfigKey.tag_sampleSolution,
2762
+ description: "Sample solution for the question."
2763
+ },
2764
+ {
2765
+ key: ConfigKey.property_sampleSolution,
2766
+ description: "Property for sample solution text.",
2767
+ format: TagFormat.plainText
2768
+ },
2769
+ {
2770
+ key: ConfigKey.property_additionalSolutions,
2771
+ description: "Property for additional solutions.",
2772
+ format: TagFormat.plainText,
2773
+ maxCount: Count.infinity
2774
+ },
2775
+ {
2776
+ key: ConfigKey.property_partialAnswer,
2777
+ description: "Property for partial answer text.",
2778
+ format: TagFormat.plainText
2779
+ },
2780
+ {
2781
+ key: ConfigKey.group_standardTags,
2782
+ description: "Standard tags for the question."
2783
+ }
2784
+ ]
2785
+ }
2786
+ ]
2787
+ }
2498
2788
  ]
2499
2789
  },
2500
- [CardSetConfigKey.matchMatrix]: {
2501
- variants: [
2502
- // Side 1
2503
- [
2504
- // Variant 1..N
2505
- {
2506
- tags: [
2507
- {
2508
- key: ConfigKey.group_standardItemLeadInstructionHint,
2509
- description: "Standard tags for lead, instruction, and hint."
2510
- },
2511
- {
2512
- key: ConfigKey.property_example,
2513
- description: "Example text for the match matrix.",
2514
- format: TagFormat.plainText
2515
- },
2516
- {
2517
- key: ConfigKey.tag_title,
2518
- description: "Title of the match matrix."
2519
- },
2520
- {
2521
- key: ConfigKey.property_isCaseSensitive,
2522
- description: "Property to indicate if the match is case sensitive.",
2523
- format: TagFormat.boolean
2524
- }
2525
- ],
2526
- repeatCount: Count.infinity
2527
- }
2528
- ]
2790
+ //
2791
+ // elements
2792
+ //
2793
+ [CardSetConfigKey.elements]: {
2794
+ jsonKey: null,
2795
+ sides: [
2796
+ {
2797
+ name: "element",
2798
+ repeat: true,
2799
+ variants: [
2800
+ {
2801
+ jsonKey: "elements[]",
2802
+ tags: [
2803
+ {
2804
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2805
+ description: "Standard tags for lead, instruction, and hint."
2806
+ },
2807
+ {
2808
+ key: ConfigKey.property_example,
2809
+ description: "Example text for the element.",
2810
+ format: TagFormat.plainText
2811
+ }
2812
+ ],
2813
+ repeatCount: Count.infinity
2814
+ }
2815
+ ]
2816
+ }
2529
2817
  ]
2530
2818
  },
2819
+ //
2820
+ // table
2821
+ //
2531
2822
  [CardSetConfigKey.table]: {
2532
- variants: [
2533
- // Side 1
2534
- [
2535
- // Variant 1..N
2536
- {
2537
- tags: [
2538
- {
2539
- key: ConfigKey.group_standardItemLeadInstructionHint,
2540
- description: "Standard tags for lead, instruction, and hint."
2541
- },
2542
- {
2543
- key: ConfigKey.tag_title,
2544
- description: "Title of the table."
2545
- },
2546
- {
2547
- key: ConfigKey.property_tableCellType,
2548
- description: "Table cell type (th/td).",
2549
- format: TagFormat.plainText
2550
- },
2551
- {
2552
- key: ConfigKey.property_tableRowSpan,
2553
- description: "Number of rows the cell spans.",
2554
- format: TagFormat.number
2555
- },
2556
- {
2557
- key: ConfigKey.property_tableColSpan,
2558
- description: "Number of columns the cell spans.",
2559
- format: TagFormat.number
2560
- },
2561
- {
2562
- key: ConfigKey.property_tableScope,
2563
- description: "Scope attribute for header cells.",
2564
- format: TagFormat.plainText
2565
- }
2566
- ],
2567
- repeatCount: Count.infinity
2568
- }
2569
- ]
2823
+ jsonKey: "table.data",
2824
+ itemType: "array",
2825
+ sides: [
2826
+ {
2827
+ name: "cell",
2828
+ repeat: true,
2829
+ variants: [
2830
+ {
2831
+ jsonKey: null,
2832
+ tags: [
2833
+ {
2834
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2835
+ description: "Standard tags for lead, instruction, and hint."
2836
+ },
2837
+ {
2838
+ key: ConfigKey.tag_title,
2839
+ description: "Title of the table.",
2840
+ secondaryJsonKey: "table.columns[]"
2841
+ },
2842
+ {
2843
+ key: ConfigKey.property_tableCellType,
2844
+ description: "Table cell type (th/td).",
2845
+ format: TagFormat.plainText
2846
+ },
2847
+ {
2848
+ key: ConfigKey.property_tableRowSpan,
2849
+ description: "Number of rows the cell spans.",
2850
+ format: TagFormat.number
2851
+ },
2852
+ {
2853
+ key: ConfigKey.property_tableColSpan,
2854
+ description: "Number of columns the cell spans.",
2855
+ format: TagFormat.number
2856
+ },
2857
+ {
2858
+ key: ConfigKey.property_tableScope,
2859
+ description: "Scope attribute for header cells.",
2860
+ format: TagFormat.plainText
2861
+ }
2862
+ ],
2863
+ repeatCount: Count.infinity
2864
+ }
2865
+ ]
2866
+ }
2867
+ ]
2868
+ },
2869
+ //
2870
+ // table-extended
2871
+ //
2872
+ [CardSetConfigKey.tableExtended]: {
2873
+ jsonKey: null,
2874
+ sections: {
2875
+ default: { jsonKey: "tableExtended.body.rows" },
2876
+ "table-header": { jsonKey: "tableExtended.header.rows" },
2877
+ "table-footer": { jsonKey: "tableExtended.footer.rows" }
2878
+ },
2879
+ sides: [
2880
+ {
2881
+ name: "cell",
2882
+ repeat: true,
2883
+ variants: [
2884
+ {
2885
+ jsonKey: "content",
2886
+ tags: [
2887
+ {
2888
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2889
+ description: "Standard tags for lead, instruction, and hint."
2890
+ },
2891
+ {
2892
+ key: ConfigKey.tag_title,
2893
+ description: "Title of the table cell."
2894
+ },
2895
+ {
2896
+ key: ConfigKey.property_tableCellType,
2897
+ description: "Table cell type (th/td).",
2898
+ format: TagFormat.plainText
2899
+ },
2900
+ {
2901
+ key: ConfigKey.property_tableRowSpan,
2902
+ description: "Number of rows the cell spans.",
2903
+ format: TagFormat.number
2904
+ },
2905
+ {
2906
+ key: ConfigKey.property_tableColSpan,
2907
+ description: "Number of columns the cell spans.",
2908
+ format: TagFormat.number
2909
+ },
2910
+ {
2911
+ key: ConfigKey.property_tableScope,
2912
+ description: "Scope attribute for header cells.",
2913
+ format: TagFormat.plainText
2914
+ }
2915
+ ],
2916
+ repeatCount: Count.infinity
2917
+ }
2918
+ ]
2919
+ }
2570
2920
  ]
2571
2921
  },
2922
+ //
2923
+ // pronunciation-table
2924
+ //
2572
2925
  [CardSetConfigKey.pronunciationTable]: {
2573
- variants: [
2574
- // Side 1
2575
- [
2576
- // Variant 1..N
2577
- {
2578
- tags: [
2579
- {
2580
- key: ConfigKey.group_standardItemLeadInstructionHint,
2581
- description: "Standard tags for lead, instruction, and hint."
2582
- },
2583
- {
2584
- key: ConfigKey.tag_title,
2585
- description: "Title of the pronunciation table."
2586
- },
2587
- {
2588
- key: ConfigKey.resource_audio,
2589
- description: "Audio resource for the pronunciation table."
2590
- }
2591
- ],
2592
- repeatCount: Count.infinity
2593
- }
2594
- ]
2926
+ jsonKey: "pronunciationTable.data",
2927
+ itemType: "array",
2928
+ sides: [
2929
+ {
2930
+ name: "cell",
2931
+ repeat: true,
2932
+ variants: [
2933
+ {
2934
+ jsonKey: "body",
2935
+ tags: [
2936
+ {
2937
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2938
+ description: "Standard tags for lead, instruction, and hint."
2939
+ },
2940
+ {
2941
+ key: ConfigKey.tag_title,
2942
+ description: "Title of the pronunciation table."
2943
+ },
2944
+ {
2945
+ key: ConfigKey.resource_audio,
2946
+ description: "Audio resource for the pronunciation table.",
2947
+ jsonKey: "audio"
2948
+ }
2949
+ ],
2950
+ repeatCount: Count.infinity
2951
+ }
2952
+ ]
2953
+ }
2595
2954
  ]
2596
2955
  },
2956
+ //
2957
+ // bot-action-responses
2958
+ //
2597
2959
  [CardSetConfigKey.botActionResponses]: {
2598
- variants: [
2599
- [
2600
- {
2601
- tags: [
2602
- {
2603
- key: ConfigKey.property_reaction,
2604
- description: "Reaction to the bot action.",
2605
- format: TagFormat.plainText
2606
- },
2607
- {
2608
- key: ConfigKey.group_standardItemLeadInstructionHint,
2609
- description: "Standard tags for lead, instruction, and hint."
2610
- },
2611
- {
2612
- key: ConfigKey.property_example,
2613
- description: "Example text for the bot action response.",
2614
- format: TagFormat.plainText
2615
- }
2616
- ]
2617
- }
2618
- ]
2960
+ jsonKey: "responses",
2961
+ sides: [
2962
+ {
2963
+ name: "response",
2964
+ variants: [
2965
+ {
2966
+ jsonKey: "feedback",
2967
+ tags: [
2968
+ {
2969
+ key: ConfigKey.property_reaction,
2970
+ description: "Reaction to the bot action.",
2971
+ format: TagFormat.plainText
2972
+ },
2973
+ {
2974
+ key: ConfigKey.tag_item,
2975
+ description: "The item for the bot action response.",
2976
+ chain: [
2977
+ {
2978
+ key: ConfigKey.tag_item,
2979
+ description: "The lead, page number, source page number, and margin number.",
2980
+ maxCount: 4
2981
+ }
2982
+ ]
2983
+ },
2984
+ {
2985
+ key: ConfigKey.tag_instruction,
2986
+ description: "The response label for the bot action.",
2987
+ jsonKey: "response"
2988
+ },
2989
+ {
2990
+ key: ConfigKey.property_example,
2991
+ description: "Example text for the bot action response.",
2992
+ format: TagFormat.plainText
2993
+ }
2994
+ ]
2995
+ }
2996
+ ]
2997
+ }
2619
2998
  ]
2620
2999
  },
3000
+ //
3001
+ // cloze-list
3002
+ //
2621
3003
  [CardSetConfigKey.clozeList]: {
2622
- variants: [
2623
- [
2624
- {
2625
- tags: [
2626
- {
2627
- key: ConfigKey.group_standardTags,
2628
- description: "Standard tags for cloze items."
2629
- },
2630
- {
2631
- key: ConfigKey.group_gap,
2632
- description: "Group for gap tags in cloze items."
2633
- }
2634
- ]
2635
- }
2636
- ]
3004
+ jsonKey: "listItems",
3005
+ sides: [
3006
+ {
3007
+ name: "content",
3008
+ variants: [
3009
+ {
3010
+ jsonKey: "body",
3011
+ tags: [
3012
+ {
3013
+ key: ConfigKey.group_standardTags,
3014
+ description: "Standard tags for cloze items."
3015
+ },
3016
+ {
3017
+ key: ConfigKey.group_gap,
3018
+ description: "Group for gap tags in cloze items."
3019
+ }
3020
+ ]
3021
+ }
3022
+ ]
3023
+ }
2637
3024
  ]
2638
3025
  },
3026
+ //
3027
+ // example-bit-list
3028
+ //
2639
3029
  [CardSetConfigKey.exampleBitList]: {
2640
- variants: [
2641
- [
2642
- {
2643
- tags: [
2644
- {
2645
- key: ConfigKey.group_standardTags,
2646
- description: "Standard tags for example bits."
2647
- },
2648
- {
2649
- key: ConfigKey.tag_title,
2650
- description: "Title of the example bit."
2651
- }
2652
- ],
2653
- repeatCount: Count.infinity
2654
- }
2655
- ]
3030
+ jsonKey: "listItems",
3031
+ sides: [
3032
+ {
3033
+ name: "item",
3034
+ variants: [
3035
+ {
3036
+ jsonKey: "body",
3037
+ tags: [
3038
+ {
3039
+ key: ConfigKey.group_standardTags,
3040
+ description: "Standard tags for example bits."
3041
+ },
3042
+ {
3043
+ key: ConfigKey.tag_title,
3044
+ description: "Title of the example bit."
3045
+ }
3046
+ ]
3047
+ }
3048
+ ]
3049
+ }
2656
3050
  ]
2657
3051
  },
3052
+ //
3053
+ // ingredients
3054
+ //
2658
3055
  [CardSetConfigKey.ingredients]: {
2659
- variants: [
2660
- [
2661
- {
2662
- tags: [
2663
- {
2664
- key: ConfigKey.tag_title,
2665
- description: "Title of the ingredient."
2666
- },
2667
- {
2668
- key: ConfigKey.group_trueFalse,
2669
- description: "Group for true/false properties of the ingredient."
2670
- },
2671
- {
2672
- key: ConfigKey.group_standardItemLeadInstructionHint,
2673
- description: "Standard tags for lead, instruction, and hint."
2674
- },
2675
- {
2676
- key: ConfigKey.property_unit,
2677
- description: "Unit of measurement for the ingredient.",
2678
- format: TagFormat.plainText
2679
- },
2680
- {
2681
- key: ConfigKey.property_unitAbbr,
2682
- description: "Abbreviation for the unit of measurement.",
2683
- format: TagFormat.plainText
2684
- },
2685
- {
2686
- key: ConfigKey.property_decimalPlaces,
2687
- description: "Number of decimal places for the ingredient quantity.",
2688
- format: TagFormat.number,
2689
- defaultValue: "1"
2690
- },
2691
- {
2692
- key: ConfigKey.property_disableCalculation,
2693
- description: "Disable calculation for the ingredient.",
2694
- format: TagFormat.boolean
2695
- }
2696
- ],
2697
- repeatCount: Count.infinity
2698
- }
2699
- ]
3056
+ jsonKey: "ingredients",
3057
+ sides: [
3058
+ {
3059
+ name: "ingredient",
3060
+ variants: [
3061
+ {
3062
+ jsonKey: "ingredient",
3063
+ tags: [
3064
+ {
3065
+ key: ConfigKey.tag_title,
3066
+ description: "Title of the ingredient."
3067
+ },
3068
+ {
3069
+ key: ConfigKey.group_trueFalse,
3070
+ description: "Group for true/false properties of the ingredient."
3071
+ },
3072
+ {
3073
+ key: ConfigKey.tag_item,
3074
+ description: "The item for the ingredient.",
3075
+ chain: [
3076
+ {
3077
+ key: ConfigKey.tag_item,
3078
+ description: "Lead, page number, source page number, and margin number.",
3079
+ maxCount: 4
3080
+ }
3081
+ ]
3082
+ },
3083
+ {
3084
+ key: ConfigKey.tag_instruction,
3085
+ description: "The quantity of the ingredient.",
3086
+ jsonKey: "quantity"
3087
+ },
3088
+ {
3089
+ key: ConfigKey.tag_hint,
3090
+ description: "The hint for the ingredient."
3091
+ },
3092
+ {
3093
+ key: ConfigKey.property_unit,
3094
+ description: "Unit of measurement for the ingredient.",
3095
+ format: TagFormat.plainText
3096
+ },
3097
+ {
3098
+ key: ConfigKey.property_unitAbbr,
3099
+ description: "Abbreviation for the unit of measurement.",
3100
+ format: TagFormat.plainText
3101
+ },
3102
+ {
3103
+ key: ConfigKey.property_decimalPlaces,
3104
+ description: "Number of decimal places for the ingredient quantity.",
3105
+ format: TagFormat.number,
3106
+ defaultValue: "1"
3107
+ },
3108
+ {
3109
+ key: ConfigKey.property_disableCalculation,
3110
+ description: "Disable calculation for the ingredient.",
3111
+ format: TagFormat.boolean
3112
+ }
3113
+ ]
3114
+ }
3115
+ ]
3116
+ }
2700
3117
  ]
2701
3118
  },
2702
- // DEPRECATED - TO BE REMOVED IN THE FUTURE
2703
- // [CardSetConfigKey._captionDefinitionsList]: {
2704
- // variants: [
2705
- // // Side 1
2706
- // [
2707
- // // Variant 1..N
2708
- // {
2709
- // tags: [
2710
- // {
2711
- // type: BitTagType.tag,
2712
- // configKey: TagConfigKey.title,
2713
- // },
2714
- // ],
2715
- // repeatCount: Count.infinity,
2716
- // },
2717
- // ],
2718
- // ],
2719
- // },
3119
+ //
3120
+ // book-reference-list
3121
+ //
2720
3122
  [CardSetConfigKey.bookReferenceList]: {
2721
- variants: [
2722
- // Side 1
2723
- [
2724
- // Variant 1..N
2725
- {
2726
- tags: [
2727
- {
2728
- key: ConfigKey.group_standardTags,
2729
- description: "Standard tags for book references."
2730
- },
2731
- {
2732
- key: ConfigKey.property_refAuthor,
2733
- description: "Author of the book.",
2734
- format: TagFormat.plainText,
2735
- maxCount: Count.infinity
2736
- },
2737
- {
2738
- key: ConfigKey.property_refBookTitle,
2739
- description: "Title of the book.",
2740
- format: TagFormat.plainText
2741
- },
2742
- {
2743
- key: ConfigKey.property_refPublisher,
2744
- description: "Publisher of the book.",
2745
- format: TagFormat.plainText,
2746
- maxCount: Count.infinity
2747
- },
2748
- {
2749
- key: ConfigKey.property_refPublicationYear,
2750
- description: "Year of publication of the book.",
2751
- format: TagFormat.plainText
2752
- },
2753
- {
2754
- key: ConfigKey.property_citationStyle,
2755
- description: "Citation style for the book reference.",
2756
- format: TagFormat.plainText
2757
- }
2758
- ],
2759
- repeatCount: Count.infinity
2760
- }
2761
- ]
3123
+ jsonKey: "bookReferences",
3124
+ sides: [
3125
+ {
3126
+ name: "reference",
3127
+ variants: [
3128
+ {
3129
+ jsonKey: null,
3130
+ tags: [
3131
+ {
3132
+ key: ConfigKey.group_standardTags,
3133
+ description: "Standard tags for book references."
3134
+ },
3135
+ {
3136
+ key: ConfigKey.property_refAuthor,
3137
+ description: "Author of the book.",
3138
+ format: TagFormat.plainText,
3139
+ maxCount: Count.infinity
3140
+ },
3141
+ {
3142
+ key: ConfigKey.property_refBookTitle,
3143
+ description: "Title of the book.",
3144
+ format: TagFormat.plainText
3145
+ },
3146
+ {
3147
+ key: ConfigKey.property_refPublisher,
3148
+ description: "Publisher of the book.",
3149
+ format: TagFormat.plainText,
3150
+ maxCount: Count.infinity
3151
+ },
3152
+ {
3153
+ key: ConfigKey.property_refPublicationYear,
3154
+ description: "Year of publication of the book.",
3155
+ format: TagFormat.plainText
3156
+ },
3157
+ {
3158
+ key: ConfigKey.property_citationStyle,
3159
+ description: "Citation style for the book reference.",
3160
+ format: TagFormat.plainText
3161
+ }
3162
+ ]
3163
+ }
3164
+ ]
3165
+ }
2762
3166
  ]
2763
3167
  }
2764
3168
  };
@@ -3492,7 +3896,7 @@ var GROUPS = {
3492
3896
  description: "If true, the book allows printing",
3493
3897
  format: TagFormat.enumeration,
3494
3898
  values: ["enforceFalse", "enforceTrue", "useSpaceConfiguration"],
3495
- defaultValue: "enforceFalse"
3899
+ defaultValue: "useSpaceConfiguration"
3496
3900
  },
3497
3901
  {
3498
3902
  key: ConfigKey.property_hasPrintRestriction,
@@ -4424,20 +4828,34 @@ var ConfigHydrator = class {
4424
4828
  if (!_cardSet) return void 0;
4425
4829
  const _cardSetConfig = CARDSETS[_cardSet];
4426
4830
  if (!_cardSetConfig) throw new Error(`No config found for card set config key '${_cardSet}'`);
4427
- const variants = [];
4428
- for (const _variants of _cardSetConfig.variants) {
4831
+ const sides = [];
4832
+ for (const _side of _cardSetConfig.sides) {
4429
4833
  const variantsOfSide = [];
4430
- for (const _variant of _variants) {
4834
+ for (const _variant of _side.variants) {
4431
4835
  const v = this.hydrateCardVariantConfig(_variant);
4432
4836
  variantsOfSide.push(v);
4433
4837
  }
4434
- variants.push(variantsOfSide);
4838
+ const sideConfig = new CardSideConfig(_side.name, _side.repeat ?? false, variantsOfSide);
4839
+ sides.push(sideConfig);
4435
4840
  }
4436
- const cardSetConfig = new CardSetConfig(_cardSet, variants);
4841
+ const cardSetConfig = new CardSetConfig(
4842
+ _cardSet,
4843
+ _cardSetConfig.jsonKey,
4844
+ _cardSetConfig.itemType ?? "object",
4845
+ _cardSetConfig.sections,
4846
+ sides
4847
+ );
4437
4848
  return cardSetConfig;
4438
4849
  }
4439
4850
  hydrateTagConfig(_tag) {
4440
- const { key: _configKey, maxCount, minCount, chain: _chain, deprecated } = _tag;
4851
+ const {
4852
+ key: _configKey,
4853
+ maxCount,
4854
+ minCount,
4855
+ chain: _chain,
4856
+ secondaryJsonKey,
4857
+ deprecated
4858
+ } = _tag;
4441
4859
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4442
4860
  if (!configKey) throw new Error(`No tag key found for config key '${configKey}'`);
4443
4861
  const tag = (0, import_superenum15.Enum)(Tag).fromValue(configKey);
@@ -4452,6 +4870,7 @@ var ConfigHydrator = class {
4452
4870
  maxCount: maxCount ?? MAX_COUNT_DEFAULT,
4453
4871
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4454
4872
  chain,
4873
+ secondaryJsonKey,
4455
4874
  deprecated
4456
4875
  });
4457
4876
  return {
@@ -4470,7 +4889,8 @@ var ConfigHydrator = class {
4470
4889
  format,
4471
4890
  values,
4472
4891
  defaultValue,
4473
- jsonKey
4892
+ jsonKey,
4893
+ secondaryJsonKey
4474
4894
  } = _tag;
4475
4895
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4476
4896
  if (!configKey) throw new Error(`No property key found for config key '${configKey}'`);
@@ -4486,6 +4906,7 @@ var ConfigHydrator = class {
4486
4906
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4487
4907
  chain,
4488
4908
  jsonKey,
4909
+ secondaryJsonKey,
4489
4910
  format,
4490
4911
  values,
4491
4912
  defaultValue,
@@ -4498,7 +4919,15 @@ var ConfigHydrator = class {
4498
4919
  };
4499
4920
  }
4500
4921
  hydrateResourceTagConfig(_tag) {
4501
- const { key: _configKey, maxCount, minCount, chain: _chain, deprecated, jsonKey } = _tag;
4922
+ const {
4923
+ key: _configKey,
4924
+ maxCount,
4925
+ minCount,
4926
+ chain: _chain,
4927
+ deprecated,
4928
+ jsonKey,
4929
+ secondaryJsonKey
4930
+ } = _tag;
4502
4931
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4503
4932
  if (!configKey) throw new Error(`No resource key found for config key '${configKey}'`);
4504
4933
  const tag = _configKey.substring(1);
@@ -4513,6 +4942,7 @@ var ConfigHydrator = class {
4513
4942
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4514
4943
  chain,
4515
4944
  jsonKey,
4945
+ secondaryJsonKey,
4516
4946
  deprecated
4517
4947
  });
4518
4948
  return {
@@ -4544,9 +4974,15 @@ var ConfigHydrator = class {
4544
4974
  };
4545
4975
  }
4546
4976
  hydrateCardVariantConfig(_variant) {
4547
- const { tags: _tags, bodyAllowed, bodyRequired, repeatCount } = _variant;
4977
+ const { tags: _tags, bodyAllowed, bodyRequired, repeatCount, jsonKey } = _variant;
4548
4978
  const tags2 = this.hydrateTagsConfig(_tags);
4549
- const cardSetConfig = new CardVariantConfig(tags2.tags, bodyAllowed, bodyRequired, repeatCount);
4979
+ const cardSetConfig = new CardVariantConfig(
4980
+ tags2.tags,
4981
+ bodyAllowed,
4982
+ bodyRequired,
4983
+ repeatCount,
4984
+ jsonKey
4985
+ );
4550
4986
  return cardSetConfig;
4551
4987
  }
4552
4988
  };
@@ -7312,6 +7748,12 @@ var BITS = {
7312
7748
  description: "Extractor configuration bit, used to configure extractors in articles or books",
7313
7749
  textFormatDefault: TextFormat.plainText
7314
7750
  },
7751
+ [BitType.extractorBlueprintConfiguration]: {
7752
+ since: "5.11.0",
7753
+ baseBitType: BitType._standard,
7754
+ description: "Extractor blueprint configuration bit, used to specify extractor blueprint configuration when extracting from blueprints",
7755
+ textFormatDefault: TextFormat.plainText
7756
+ },
7315
7757
  [BitType.extractorImage]: {
7316
7758
  since: "4.3.0",
7317
7759
  baseBitType: BitType._standard,
@@ -7337,6 +7779,12 @@ var BITS = {
7337
7779
  baseBitType: BitType.extractorImage,
7338
7780
  description: "Collapsible extractor images bit, used for images extracted from PDFs"
7339
7781
  },
7782
+ [BitType.extractorBlueprint]: {
7783
+ since: "5.12.0",
7784
+ baseBitType: BitType._standard,
7785
+ description: "Extractor blueprint bit, used to provide blueprint information about extractors",
7786
+ textFormatDefault: TextFormat.json
7787
+ },
7340
7788
  [BitType.extractorInformation]: {
7341
7789
  since: "3.8.0",
7342
7790
  baseBitType: BitType._standard,
@@ -7539,6 +7987,11 @@ var BITS = {
7539
7987
  baseBitType: BitType.pageOpenBook,
7540
7988
  description: "Open book chapter bit, derived from page-open-book, used to create chapter pages that open books"
7541
7989
  },
7990
+ [BitType.openBookChapterTeaser]: {
7991
+ since: "4.16.0",
7992
+ baseBitType: BitType.openBookChapter,
7993
+ description: "Open book chapter teaser bit, equal to open-book-chapter, used to create teaser chapter pages that open books"
7994
+ },
7542
7995
  [BitType.pageOpenBookList]: {
7543
7996
  since: "2.1.0",
7544
7997
  baseBitType: BitType.article,
@@ -10359,6 +10812,7 @@ var Config = class {
10359
10812
  maxCount: 1,
10360
10813
  chain: tag.chain,
10361
10814
  jsonKey: tag.jsonKey,
10815
+ secondaryJsonKey: tag.secondaryJsonKey,
10362
10816
  deprecated: tag.deprecated
10363
10817
  });
10364
10818
  finalResourceTags[k] = newTag;
@@ -10463,7 +10917,7 @@ var instance2 = new Config();
10463
10917
  // src/generated/package_info.ts
10464
10918
  var PACKAGE_INFO = {
10465
10919
  "name": "@gmb/bitmark-parser-generator",
10466
- "version": "5.10.0",
10920
+ "version": "5.12.0",
10467
10921
  "author": "Get More Brain Ltd",
10468
10922
  "license": "ISC",
10469
10923
  "description": "A bitmark parser and generator using Peggy.js"
@@ -30733,7 +31187,7 @@ var JsonGenerator = class extends AstWalkerGenerator {
30733
31187
  }
30734
31188
  if (instance2.isOfBitType(bitType, BitType.book)) {
30735
31189
  if (bitJson.maxTocChapterLevel == null) bitJson.maxTocChapterLevel = -1;
30736
- if (bitJson.allowPrint == null) bitJson.allowPrint = "enforceFalse";
31190
+ if (bitJson.allowPrint == null) bitJson.allowPrint = "useSpaceConfiguration";
30737
31191
  if (bitJson.hasPrintRestriction == null) bitJson.hasPrintRestriction = true;
30738
31192
  if (bitJson.enforceUpdateOverUserInput == null) bitJson.enforceUpdateOverUserInput = false;
30739
31193
  if (bitJson.hasMarkAsDone == null) bitJson.hasMarkAsDone = false;
@@ -34474,6 +34928,7 @@ function propertyContentProcessor(context, contentDepth, tagsConfig, content, ta
34474
34928
  minCount: 1,
34475
34929
  chain: void 0,
34476
34930
  jsonKey: void 0,
34931
+ secondaryJsonKey: void 0,
34477
34932
  format: TagFormat.bitmarkText,
34478
34933
  values: void 0,
34479
34934
  defaultValue: void 0,
@@ -39327,7 +39782,7 @@ var ConfigBuilder = class {
39327
39782
  const processTagEntries = (tag, tagNameChain) => {
39328
39783
  const tags2 = [];
39329
39784
  let tagName = tag.key;
39330
- const jsonKey = keyToJsonKey(tagName, tagNameChain);
39785
+ const jsonKey = tag.jsonKey ?? keyToJsonKey(tagName, tagNameChain);
39331
39786
  const tagType = typeFromConfigKey(tag.key);
39332
39787
  let format = "";
39333
39788
  let chain = void 0;
@@ -39356,7 +39811,8 @@ var ConfigBuilder = class {
39356
39811
  for (const groupKey of resolvedGroups) {
39357
39812
  tags2.push({
39358
39813
  type: "group",
39359
- key: groupKey
39814
+ key: groupKey,
39815
+ ...tag.jsonKey ? { jsonKey: tag.jsonKey } : {}
39360
39816
  });
39361
39817
  }
39362
39818
  return tags2;
@@ -39372,6 +39828,7 @@ var ConfigBuilder = class {
39372
39828
  type: "tag",
39373
39829
  key: tagName,
39374
39830
  jsonKey,
39831
+ ...tag.secondaryJsonKey ? { secondaryJsonKey: tag.secondaryJsonKey } : {},
39375
39832
  format,
39376
39833
  default: null,
39377
39834
  alwaysInclude: false,
@@ -39390,8 +39847,8 @@ var ConfigBuilder = class {
39390
39847
  const cardSetConfig = CARDSETS[cardSetKey];
39391
39848
  if (!cardSetConfig) return void 0;
39392
39849
  const normalizedKey = normalizeCardKey(cardSetKey);
39393
- const sides = cardSetConfig.variants.map((variantList) => {
39394
- const variants = variantList.map((variant) => {
39850
+ const sides = cardSetConfig.sides.map((side) => {
39851
+ const variants = side.variants.map((variant) => {
39395
39852
  const variantTags = [];
39396
39853
  const variantTagEntries = Object.entries(variant.tags ?? []).sort((a, b) => {
39397
39854
  const tagA = a[1];
@@ -39405,16 +39862,24 @@ var ConfigBuilder = class {
39405
39862
  variantTags.push(...processTagEntries(variantTag, []));
39406
39863
  }
39407
39864
  return {
39865
+ ...variant.jsonKey !== void 0 ? { jsonKey: variant.jsonKey } : {},
39408
39866
  tags: variantTags,
39409
39867
  repeatCount: variant.repeatCount ?? 1,
39410
39868
  bodyAllowed: variant.bodyAllowed ?? true,
39411
39869
  bodyRequired: variant.bodyRequired ?? false
39412
39870
  };
39413
39871
  });
39414
- return { variants };
39872
+ return {
39873
+ name: side.name,
39874
+ ...side.repeat ? { repeat: side.repeat } : {},
39875
+ variants
39876
+ };
39415
39877
  });
39416
39878
  return {
39417
39879
  key: normalizedKey,
39880
+ jsonKey: cardSetConfig.jsonKey,
39881
+ ...cardSetConfig.itemType && cardSetConfig.itemType !== "object" ? { itemType: cardSetConfig.itemType } : {},
39882
+ ...cardSetConfig.sections ? { sections: cardSetConfig.sections } : {},
39418
39883
  sides
39419
39884
  };
39420
39885
  };