@gmb/bitmark-parser-generator 5.11.0 → 5.13.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.
@@ -295,6 +295,8 @@ var BitType = {
295
295
  exampleList: "example-list",
296
296
  extractorAiChat: "extractor-ai-chat",
297
297
  extractorBlock: "extractor-block",
298
+ extractorBlueprint: "extractor-blueprint",
299
+ extractorBlueprintConfiguration: "extractor-blueprint-configuration",
298
300
  extractorConfiguration: "extractor-configuration",
299
301
  extractorImage: "extractor-image",
300
302
  extractorImageCollapsible: "extractor-image-collapsible",
@@ -478,6 +480,7 @@ var BitType = {
478
480
  pageOpenBookList: "page-open-book-list",
479
481
  printBook: "print-book",
480
482
  openBookChapter: "open-book-chapter",
483
+ openBookChapterTeaser: "open-book-chapter-teaser",
481
484
  pagePerson: "page-person",
482
485
  pageProduct: "page-product",
483
486
  pageProductList: "page-product-list",
@@ -641,6 +644,7 @@ var BitType = {
641
644
  table: "table",
642
645
  tableAlt: "table-alt",
643
646
  tableExtended: "table-extended",
647
+ tableExtendedImage: "table-extended-image",
644
648
  tableImage: "table-image",
645
649
  tableImageAlt: "table-image-alt",
646
650
  takePicture: "take-picture",
@@ -827,6 +831,8 @@ var AbstractTagConfig = class {
827
831
  __publicField(this, "chain");
828
832
  __publicField(this, "jsonKey");
829
833
  // If the json key is different from the tag
834
+ __publicField(this, "secondaryJsonKey");
835
+ // Heading card alternate path
830
836
  __publicField(this, "deprecated");
831
837
  this.type = params.type;
832
838
  this.configKey = params.configKey;
@@ -835,6 +841,7 @@ var AbstractTagConfig = class {
835
841
  this.minCount = params.minCount;
836
842
  this.chain = params.chain;
837
843
  this.jsonKey = params.jsonKey;
844
+ this.secondaryJsonKey = params.secondaryJsonKey;
838
845
  this.deprecated = params.deprecated;
839
846
  }
840
847
  };
@@ -956,18 +963,22 @@ var ResourceTagConfig = class extends AbstractTagConfig {
956
963
 
957
964
  // src/model/config/CardVariantConfig.ts
958
965
  var CardVariantConfig = class {
959
- // Default: 1
960
- constructor(tags2, bodyAllowed, bodyRequired, repeatCount) {
966
+ // JSON path for body text
967
+ constructor(tags2, bodyAllowed, bodyRequired, repeatCount, jsonKey) {
961
968
  __publicField(this, "tags");
962
969
  __publicField(this, "bodyAllowed");
963
970
  // Default: true
964
971
  __publicField(this, "bodyRequired");
965
972
  // Default: false
966
973
  __publicField(this, "repeatCount");
974
+ // Default: 1
975
+ // JSON mapping fields
976
+ __publicField(this, "jsonKey");
967
977
  this.tags = tags2;
968
978
  this.bodyAllowed = bodyAllowed == null ? true : bodyAllowed;
969
979
  this.bodyRequired = bodyRequired;
970
980
  this.repeatCount = repeatCount;
981
+ this.jsonKey = jsonKey;
971
982
  }
972
983
  toString(options) {
973
984
  const opts = Object.assign({}, options);
@@ -989,27 +1000,63 @@ ${tag.toString(opts)}`;
989
1000
  }
990
1001
  };
991
1002
 
1003
+ // src/model/config/CardSideConfig.ts
1004
+ var CardSideConfig = class {
1005
+ constructor(name, repeat, variants) {
1006
+ __publicField(this, "name");
1007
+ __publicField(this, "repeat");
1008
+ __publicField(this, "variants");
1009
+ this.name = name;
1010
+ this.repeat = repeat;
1011
+ this.variants = variants;
1012
+ }
1013
+ toString(options) {
1014
+ const opts = Object.assign({}, options);
1015
+ let s = "";
1016
+ s += `[Side: ${this.name}]`;
1017
+ if (this.repeat) s += " (repeat)";
1018
+ let variantNo = 0;
1019
+ for (const variant of this.variants) {
1020
+ s += `
1021
+ [Variant ${variantNo}]`;
1022
+ s += `
1023
+ ${variant.toString(opts)}`;
1024
+ variantNo++;
1025
+ }
1026
+ return s;
1027
+ }
1028
+ };
1029
+
992
1030
  // src/model/config/CardSetConfig.ts
993
1031
  var CardSetConfig = class {
994
- constructor(configKey, variants) {
1032
+ constructor(configKey, jsonKey, itemType, sections, sides) {
995
1033
  __publicField(this, "configKey");
996
- __publicField(this, "variants");
1034
+ __publicField(this, "jsonKey");
1035
+ __publicField(this, "itemType");
1036
+ __publicField(this, "sections");
1037
+ __publicField(this, "sides");
997
1038
  this.configKey = configKey;
998
- this.variants = variants;
1039
+ this.jsonKey = jsonKey;
1040
+ this.itemType = itemType;
1041
+ this.sections = sections;
1042
+ this.sides = sides;
1043
+ }
1044
+ // Legacy accessor — provides the same shape as the old `variants: CardVariantConfig[][]`
1045
+ // so downstream consumers (Config.getCardSetVariantConfig, etc.) continue to work.
1046
+ get variants() {
1047
+ return this.sides.map((side) => side.variants);
999
1048
  }
1000
1049
  toString(options) {
1001
1050
  const opts = Object.assign({}, options);
1002
1051
  let s = "";
1003
- let sideNo = 0;
1004
- let variantNo = 0;
1005
- for (const sides of this.variants) {
1006
- for (const variant of sides) {
1007
- s += `[Card - Side ${sideNo}, Variant ${variantNo}]`;
1008
- s += `
1009
- ${variant.toString(opts)}`;
1010
- variantNo++;
1011
- }
1012
- sideNo++;
1052
+ s += `[CardSet: ${this.configKey}]`;
1053
+ s += `
1054
+ jsonKey: ${this.jsonKey}`;
1055
+ s += `
1056
+ itemType: ${this.itemType}`;
1057
+ for (const side of this.sides) {
1058
+ s += `
1059
+ ${side.toString(opts)}`;
1013
1060
  }
1014
1061
  return s;
1015
1062
  }
@@ -2162,589 +2209,947 @@ var import_superenum15 = require("@ncoderz/superenum");
2162
2209
 
2163
2210
  // src/config/raw/cardSets.ts
2164
2211
  var CARDSETS = {
2165
- [CardSetConfigKey.definitionList]: {
2166
- variants: [
2167
- [
2168
- {
2169
- tags: [
2170
- {
2171
- key: ConfigKey.group_standardItemLeadInstructionHint,
2172
- description: "Standard tags for lead, instruction, and hint."
2173
- },
2174
- {
2175
- key: ConfigKey.property_example,
2176
- description: "Example text for the definition.",
2177
- format: TagFormat.plainText
2178
- },
2179
- {
2180
- key: ConfigKey.tag_title,
2181
- description: "Title of the definition."
2182
- },
2183
- {
2184
- key: ConfigKey.group_resourceIcon,
2185
- description: "Icon resource for the definition."
2186
- }
2187
- ],
2188
- repeatCount: Count.infinity
2189
- }
2190
- ]
2212
+ //
2213
+ // flashcard
2214
+ //
2215
+ [CardSetConfigKey.flashcard]: {
2216
+ jsonKey: "cards",
2217
+ sides: [
2218
+ {
2219
+ name: "question",
2220
+ variants: [
2221
+ {
2222
+ jsonKey: "question.text",
2223
+ tags: [
2224
+ {
2225
+ key: ConfigKey.group_standardTags,
2226
+ description: "Standard tags for the flashcard."
2227
+ },
2228
+ {
2229
+ key: ConfigKey.tag_title,
2230
+ description: "Title of the flashcard."
2231
+ },
2232
+ {
2233
+ key: ConfigKey.group_resourceIcon,
2234
+ description: "Icon resource for the flashcard.",
2235
+ jsonKey: "question.icon"
2236
+ }
2237
+ ]
2238
+ }
2239
+ ]
2240
+ },
2241
+ {
2242
+ name: "answer",
2243
+ variants: [
2244
+ {
2245
+ jsonKey: "answer.text",
2246
+ tags: [
2247
+ {
2248
+ key: ConfigKey.group_standardTags,
2249
+ description: "Standard tags for the flashcard."
2250
+ },
2251
+ {
2252
+ key: ConfigKey.tag_title,
2253
+ description: "Title of the flashcard."
2254
+ },
2255
+ {
2256
+ key: ConfigKey.group_resourceIcon,
2257
+ description: "Icon resource for the flashcard.",
2258
+ jsonKey: "answer.icon"
2259
+ }
2260
+ ]
2261
+ },
2262
+ {
2263
+ jsonKey: "alternativeAnswers[].text",
2264
+ tags: [
2265
+ {
2266
+ key: ConfigKey.group_standardTags,
2267
+ description: "Standard tags for the flashcard."
2268
+ },
2269
+ {
2270
+ key: ConfigKey.tag_title,
2271
+ description: "Title of the flashcard."
2272
+ },
2273
+ {
2274
+ key: ConfigKey.group_resourceIcon,
2275
+ description: "Icon resource for the flashcard."
2276
+ }
2277
+ ],
2278
+ repeatCount: Count.infinity
2279
+ }
2280
+ ]
2281
+ }
2191
2282
  ]
2192
2283
  },
2193
- [CardSetConfigKey.flashcard]: {
2194
- variants: [
2195
- [
2196
- {
2197
- tags: [
2198
- {
2199
- key: ConfigKey.group_standardItemLeadInstructionHint,
2200
- description: "Standard tags for lead, instruction, and hint."
2201
- },
2202
- {
2203
- key: ConfigKey.property_example,
2204
- description: "Example text for the flashcard.",
2205
- format: TagFormat.plainText
2206
- },
2207
- {
2208
- key: ConfigKey.tag_title,
2209
- description: "Title of the flashcard."
2210
- },
2211
- {
2212
- key: ConfigKey.group_resourceIcon,
2213
- description: "Icon resource for the flashcard."
2214
- }
2215
- ],
2216
- repeatCount: Count.infinity
2217
- }
2218
- ]
2284
+ //
2285
+ // definition-list
2286
+ //
2287
+ [CardSetConfigKey.definitionList]: {
2288
+ jsonKey: "definitions",
2289
+ sides: [
2290
+ {
2291
+ name: "term",
2292
+ variants: [
2293
+ {
2294
+ jsonKey: "term.text",
2295
+ tags: [
2296
+ {
2297
+ key: ConfigKey.group_standardTags,
2298
+ description: "Standard tags for the definition."
2299
+ },
2300
+ {
2301
+ key: ConfigKey.tag_title,
2302
+ description: "Title of the definition.",
2303
+ secondaryJsonKey: "heading.forKeys"
2304
+ },
2305
+ {
2306
+ key: ConfigKey.group_resourceIcon,
2307
+ description: "Icon resource for the definition.",
2308
+ jsonKey: "term.icon"
2309
+ }
2310
+ ]
2311
+ }
2312
+ ]
2313
+ },
2314
+ {
2315
+ name: "definition",
2316
+ variants: [
2317
+ {
2318
+ jsonKey: "definition.text",
2319
+ tags: [
2320
+ {
2321
+ key: ConfigKey.group_standardTags,
2322
+ description: "Standard tags for the definition."
2323
+ },
2324
+ {
2325
+ key: ConfigKey.tag_title,
2326
+ description: "Title of the definition.",
2327
+ secondaryJsonKey: "heading.forValues"
2328
+ },
2329
+ {
2330
+ key: ConfigKey.group_resourceIcon,
2331
+ description: "Icon resource for the definition.",
2332
+ jsonKey: "definition.icon"
2333
+ }
2334
+ ]
2335
+ },
2336
+ {
2337
+ jsonKey: "alternativeDefinitions[].text",
2338
+ tags: [
2339
+ {
2340
+ key: ConfigKey.group_standardTags,
2341
+ description: "Standard tags for the definition."
2342
+ },
2343
+ {
2344
+ key: ConfigKey.tag_title,
2345
+ description: "Title of the definition."
2346
+ },
2347
+ {
2348
+ key: ConfigKey.group_resourceIcon,
2349
+ description: "Icon resource for the definition."
2350
+ }
2351
+ ],
2352
+ repeatCount: Count.infinity
2353
+ }
2354
+ ]
2355
+ }
2219
2356
  ]
2220
2357
  },
2221
- [CardSetConfigKey.elements]: {
2222
- variants: [
2223
- [
2224
- {
2225
- tags: [
2226
- {
2227
- key: ConfigKey.group_standardItemLeadInstructionHint,
2228
- description: "Standard tags for lead, instruction, and hint."
2229
- },
2230
- {
2231
- key: ConfigKey.property_example,
2232
- description: "Example text for the element.",
2233
- format: TagFormat.plainText
2234
- }
2235
- ],
2236
- repeatCount: Count.infinity
2237
- }
2238
- ]
2358
+ //
2359
+ // match-pairs
2360
+ //
2361
+ [CardSetConfigKey.matchPairs]: {
2362
+ jsonKey: "pairs",
2363
+ sides: [
2364
+ {
2365
+ name: "key",
2366
+ variants: [
2367
+ {
2368
+ jsonKey: "key",
2369
+ tags: [
2370
+ {
2371
+ key: ConfigKey.group_standardTags,
2372
+ description: "Standard tags for the match pair."
2373
+ },
2374
+ {
2375
+ key: ConfigKey.tag_title,
2376
+ description: "Title of the match pair.",
2377
+ secondaryJsonKey: "heading.forKeys"
2378
+ },
2379
+ {
2380
+ key: ConfigKey.property_isCaseSensitive,
2381
+ description: "Property to indicate if the match is case sensitive.",
2382
+ format: TagFormat.boolean
2383
+ },
2384
+ {
2385
+ key: ConfigKey.resource_audio,
2386
+ description: "Audio resource for the match pair.",
2387
+ jsonKey: "keyAudio"
2388
+ },
2389
+ {
2390
+ key: ConfigKey.resource_image,
2391
+ description: "Image resource for the match pair.",
2392
+ jsonKey: "keyImage"
2393
+ }
2394
+ ]
2395
+ }
2396
+ ]
2397
+ },
2398
+ {
2399
+ name: "values",
2400
+ repeat: true,
2401
+ variants: [
2402
+ {
2403
+ jsonKey: "values[]",
2404
+ tags: [
2405
+ {
2406
+ key: ConfigKey.group_standardTags,
2407
+ description: "Standard tags for the match pair."
2408
+ },
2409
+ {
2410
+ key: ConfigKey.tag_title,
2411
+ description: "Title of the match pair.",
2412
+ secondaryJsonKey: "heading.forValues"
2413
+ },
2414
+ {
2415
+ key: ConfigKey.property_isCaseSensitive,
2416
+ description: "Property to indicate if the match is case sensitive.",
2417
+ format: TagFormat.boolean
2418
+ }
2419
+ ],
2420
+ repeatCount: Count.infinity
2421
+ }
2422
+ ]
2423
+ }
2239
2424
  ]
2240
2425
  },
2241
- [CardSetConfigKey.statements]: {
2242
- variants: [
2243
- [
2244
- {
2245
- tags: [
2246
- {
2247
- key: ConfigKey.tag_true,
2248
- description: "Tag for true statements.",
2249
- maxCount: 1
2250
- },
2251
- {
2252
- key: ConfigKey.tag_false,
2253
- description: "Tag for false statements.",
2254
- maxCount: 1
2255
- },
2256
- {
2257
- key: ConfigKey.group_standardItemLeadInstructionHint,
2258
- description: "Standard tags for lead, instruction, and hint."
2259
- },
2260
- {
2261
- key: ConfigKey.property_example,
2262
- description: "Example text for the statement.",
2263
- format: TagFormat.plainText
2264
- }
2265
- ],
2266
- bodyAllowed: false
2267
- }
2268
- ]
2426
+ //
2427
+ // match-audio-pairs
2428
+ //
2429
+ [CardSetConfigKey.matchAudioPairs]: {
2430
+ jsonKey: "pairs",
2431
+ sides: [
2432
+ {
2433
+ name: "key",
2434
+ variants: [
2435
+ {
2436
+ jsonKey: "key",
2437
+ tags: [
2438
+ {
2439
+ key: ConfigKey.group_standardTags,
2440
+ description: "Standard tags for the audio match pair."
2441
+ },
2442
+ {
2443
+ key: ConfigKey.tag_title,
2444
+ description: "Title of the audio match pair.",
2445
+ secondaryJsonKey: "heading.forKeys"
2446
+ },
2447
+ {
2448
+ key: ConfigKey.resource_audio,
2449
+ description: "Audio resource for the match pair.",
2450
+ jsonKey: "keyAudio"
2451
+ }
2452
+ ]
2453
+ }
2454
+ ]
2455
+ },
2456
+ {
2457
+ name: "values",
2458
+ repeat: true,
2459
+ variants: [
2460
+ {
2461
+ jsonKey: "values[]",
2462
+ tags: [
2463
+ {
2464
+ key: ConfigKey.group_standardTags,
2465
+ description: "Standard tags for the audio match pair."
2466
+ },
2467
+ {
2468
+ key: ConfigKey.tag_title,
2469
+ description: "Title of the audio match pair.",
2470
+ secondaryJsonKey: "heading.forValues"
2471
+ },
2472
+ {
2473
+ key: ConfigKey.resource_audio,
2474
+ description: "Audio resource for the match pair."
2475
+ }
2476
+ ],
2477
+ repeatCount: Count.infinity
2478
+ }
2479
+ ]
2480
+ }
2269
2481
  ]
2270
2482
  },
2271
- [CardSetConfigKey.quiz]: {
2272
- variants: [
2273
- [
2274
- {
2275
- tags: [
2276
- {
2277
- key: ConfigKey.group_trueFalse,
2278
- description: "Group for true/false questions."
2279
- },
2280
- {
2281
- key: ConfigKey.group_standardItemLeadInstructionHint,
2282
- description: "Standard tags for lead, instruction, and hint."
2283
- },
2284
- {
2285
- key: ConfigKey.property_example,
2286
- description: "Example text for the quiz question.",
2287
- format: TagFormat.plainText
2288
- }
2289
- ],
2290
- bodyAllowed: false
2291
- }
2292
- ]
2483
+ //
2484
+ // match-image-pairs
2485
+ //
2486
+ [CardSetConfigKey.matchImagePairs]: {
2487
+ jsonKey: "pairs",
2488
+ sides: [
2489
+ {
2490
+ name: "key",
2491
+ variants: [
2492
+ {
2493
+ jsonKey: "key",
2494
+ tags: [
2495
+ {
2496
+ key: ConfigKey.group_standardTags,
2497
+ description: "Standard tags for the image match pair."
2498
+ },
2499
+ {
2500
+ key: ConfigKey.tag_title,
2501
+ description: "Title of the image match pair.",
2502
+ secondaryJsonKey: "heading.forKeys"
2503
+ },
2504
+ {
2505
+ key: ConfigKey.resource_image,
2506
+ description: "Image resource for the match pair.",
2507
+ jsonKey: "keyImage"
2508
+ }
2509
+ ]
2510
+ }
2511
+ ]
2512
+ },
2513
+ {
2514
+ name: "values",
2515
+ repeat: true,
2516
+ variants: [
2517
+ {
2518
+ jsonKey: "values[]",
2519
+ tags: [
2520
+ {
2521
+ key: ConfigKey.group_standardTags,
2522
+ description: "Standard tags for the image match pair."
2523
+ },
2524
+ {
2525
+ key: ConfigKey.tag_title,
2526
+ description: "Title of the image match pair.",
2527
+ secondaryJsonKey: "heading.forValues"
2528
+ },
2529
+ {
2530
+ key: ConfigKey.resource_image,
2531
+ description: "Image resource for the match pair."
2532
+ }
2533
+ ],
2534
+ repeatCount: Count.infinity
2535
+ }
2536
+ ]
2537
+ }
2293
2538
  ]
2294
2539
  },
2295
- [CardSetConfigKey.feedback]: {
2296
- variants: [
2297
- // Side 1
2298
- [
2299
- // Variant 1..N
2300
- {
2301
- tags: [
2302
- {
2303
- key: ConfigKey.group_standardItemLeadInstructionHint,
2304
- description: "Standard tags for lead, instruction, and hint."
2305
- },
2306
- {
2307
- key: ConfigKey.group_trueFalse,
2308
- description: "Group for true/false feedback."
2309
- },
2310
- {
2311
- key: ConfigKey.tag_title,
2312
- description: "Title of the feedback."
2313
- }
2314
- ],
2315
- bodyAllowed: false
2316
- }
2317
- ],
2318
- // Side 2
2319
- [
2320
- // Variant 1..N
2321
- {
2322
- tags: [
2323
- {
2324
- key: ConfigKey.group_standardItemLeadInstructionHint,
2325
- description: "Standard tags for lead, instruction, and hint."
2326
- },
2327
- {
2328
- key: ConfigKey.property_reasonableNumOfChars,
2329
- description: "Property for reasonable number of characters.",
2330
- format: TagFormat.number
2331
- },
2332
- {
2333
- key: ConfigKey.property_example,
2334
- description: "Example text for the feedback.",
2335
- format: TagFormat.plainText
2336
- },
2337
- {
2338
- key: ConfigKey.tag_title,
2339
- description: "Title of the feedback."
2340
- }
2341
- ],
2342
- bodyAllowed: true
2343
- }
2344
- ]
2540
+ //
2541
+ // match-matrix
2542
+ //
2543
+ [CardSetConfigKey.matchMatrix]: {
2544
+ jsonKey: "matrix",
2545
+ sides: [
2546
+ {
2547
+ name: "key",
2548
+ variants: [
2549
+ {
2550
+ jsonKey: "key",
2551
+ tags: [
2552
+ {
2553
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2554
+ description: "Standard tags for lead, instruction, and hint."
2555
+ },
2556
+ {
2557
+ key: ConfigKey.property_example,
2558
+ description: "Example text for the match matrix.",
2559
+ format: TagFormat.plainText
2560
+ },
2561
+ {
2562
+ key: ConfigKey.tag_title,
2563
+ description: "Title of the match matrix.",
2564
+ secondaryJsonKey: "heading.forKeys"
2565
+ },
2566
+ {
2567
+ key: ConfigKey.property_isCaseSensitive,
2568
+ description: "Property to indicate if the match is case sensitive.",
2569
+ format: TagFormat.boolean
2570
+ }
2571
+ ]
2572
+ }
2573
+ ]
2574
+ },
2575
+ {
2576
+ name: "cell",
2577
+ repeat: true,
2578
+ variants: [
2579
+ {
2580
+ jsonKey: "cells[{s}].values[]",
2581
+ tags: [
2582
+ {
2583
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2584
+ description: "Standard tags for lead, instruction, and hint."
2585
+ },
2586
+ {
2587
+ key: ConfigKey.property_example,
2588
+ description: "Example text for the match matrix.",
2589
+ format: TagFormat.plainText
2590
+ },
2591
+ {
2592
+ key: ConfigKey.tag_title,
2593
+ description: "Title of the match matrix.",
2594
+ secondaryJsonKey: "heading.forValues"
2595
+ },
2596
+ {
2597
+ key: ConfigKey.property_isCaseSensitive,
2598
+ description: "Property to indicate if the match is case sensitive.",
2599
+ format: TagFormat.boolean
2600
+ }
2601
+ ],
2602
+ repeatCount: Count.infinity
2603
+ }
2604
+ ]
2605
+ }
2345
2606
  ]
2346
2607
  },
2347
- [CardSetConfigKey.questions]: {
2348
- variants: [
2349
- [
2350
- {
2351
- tags: [
2352
- {
2353
- key: ConfigKey.property_reasonableNumOfChars,
2354
- description: "Property for reasonable number of characters.",
2355
- format: TagFormat.number
2356
- },
2357
- {
2358
- key: ConfigKey.tag_sampleSolution,
2359
- description: "Sample solution for the question."
2360
- },
2361
- {
2362
- key: ConfigKey.property_sampleSolution,
2363
- description: "Property for sample solution text.",
2364
- format: TagFormat.plainText
2365
- },
2366
- {
2367
- key: ConfigKey.property_additionalSolutions,
2368
- description: "Property for additional solutions.",
2369
- format: TagFormat.plainText,
2370
- maxCount: Count.infinity
2371
- },
2372
- {
2373
- key: ConfigKey.property_partialAnswer,
2374
- description: "Property for partial answer text.",
2375
- format: TagFormat.plainText
2376
- },
2377
- {
2378
- key: ConfigKey.group_standardItemLeadInstructionHint,
2379
- description: "Standard tags for lead, instruction, and hint."
2380
- },
2381
- {
2382
- key: ConfigKey.property_example,
2383
- description: "Example text for the question.",
2384
- format: TagFormat.plainText
2385
- }
2386
- ],
2387
- repeatCount: Count.infinity
2388
- }
2389
- ]
2608
+ //
2609
+ // statements
2610
+ //
2611
+ [CardSetConfigKey.statements]: {
2612
+ jsonKey: "statements",
2613
+ sides: [
2614
+ {
2615
+ name: "statement",
2616
+ variants: [
2617
+ {
2618
+ jsonKey: "statement",
2619
+ tags: [
2620
+ {
2621
+ key: ConfigKey.tag_true,
2622
+ description: "Tag for true statements.",
2623
+ maxCount: 1
2624
+ },
2625
+ {
2626
+ key: ConfigKey.tag_false,
2627
+ description: "Tag for false statements.",
2628
+ maxCount: 1
2629
+ },
2630
+ {
2631
+ key: ConfigKey.group_standardTags,
2632
+ description: "Standard tags for the statement."
2633
+ }
2634
+ ],
2635
+ bodyAllowed: false
2636
+ }
2637
+ ]
2638
+ }
2390
2639
  ]
2391
2640
  },
2392
- // matchPairs
2393
- // TODO: We actually need to allow for different card configurations, because titles are valid on the first card only.
2394
- // For now we allow them to be valid on all cards, but we need to change this.
2395
- [CardSetConfigKey.matchPairs]: {
2396
- variants: [
2397
- // Side 1
2398
- [
2399
- // Variant 1..N
2400
- {
2401
- tags: [
2402
- {
2403
- key: ConfigKey.group_standardItemLeadInstructionHint,
2404
- description: "Standard tags for lead, instruction, and hint."
2405
- },
2406
- {
2407
- key: ConfigKey.property_example,
2408
- description: "Example text for the match pair.",
2409
- format: TagFormat.plainText
2410
- },
2411
- {
2412
- key: ConfigKey.tag_title,
2413
- description: "Title of the match pair."
2414
- },
2415
- {
2416
- key: ConfigKey.property_isCaseSensitive,
2417
- description: "Property to indicate if the match is case sensitive.",
2418
- format: TagFormat.boolean
2419
- }
2420
- ],
2421
- repeatCount: Count.infinity
2422
- }
2423
- ]
2641
+ //
2642
+ // quiz
2643
+ //
2644
+ [CardSetConfigKey.quiz]: {
2645
+ jsonKey: "quizzes",
2646
+ sides: [
2647
+ {
2648
+ name: "choices",
2649
+ variants: [
2650
+ {
2651
+ jsonKey: null,
2652
+ tags: [
2653
+ {
2654
+ key: ConfigKey.group_trueFalse,
2655
+ description: "Group for true/false questions."
2656
+ },
2657
+ {
2658
+ key: ConfigKey.group_standardTags,
2659
+ description: "Standard tags for the quiz."
2660
+ }
2661
+ ],
2662
+ bodyAllowed: false
2663
+ }
2664
+ ]
2665
+ }
2424
2666
  ]
2425
2667
  },
2426
- [CardSetConfigKey.matchAudioPairs]: {
2427
- variants: [
2428
- // Side 1
2429
- [
2430
- // Variant 1..N
2431
- {
2432
- tags: [
2433
- {
2434
- key: ConfigKey.group_standardItemLeadInstructionHint,
2435
- description: "Standard tags for lead, instruction, and hint."
2436
- },
2437
- {
2438
- key: ConfigKey.property_example,
2439
- description: "Example text for the audio match pair.",
2440
- format: TagFormat.plainText
2441
- },
2442
- {
2443
- key: ConfigKey.tag_title,
2444
- description: "Title of the audio match pair."
2445
- },
2446
- {
2447
- key: ConfigKey.resource_audio,
2448
- description: "Audio resource for the match pair."
2449
- }
2450
- ],
2451
- repeatCount: Count.infinity
2452
- }
2453
- ]
2668
+ //
2669
+ // feedback
2670
+ //
2671
+ [CardSetConfigKey.feedback]: {
2672
+ jsonKey: "feedbacks",
2673
+ sides: [
2674
+ {
2675
+ name: "choices",
2676
+ variants: [
2677
+ {
2678
+ jsonKey: null,
2679
+ tags: [
2680
+ {
2681
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2682
+ description: "Standard tags for lead, instruction, and hint."
2683
+ },
2684
+ {
2685
+ key: ConfigKey.group_trueFalse,
2686
+ description: "Group for true/false feedback."
2687
+ },
2688
+ {
2689
+ key: ConfigKey.tag_title,
2690
+ description: "Title of the feedback.",
2691
+ secondaryJsonKey: "heading.forKeys"
2692
+ }
2693
+ ],
2694
+ bodyAllowed: false
2695
+ }
2696
+ ]
2697
+ },
2698
+ {
2699
+ name: "reason",
2700
+ variants: [
2701
+ {
2702
+ jsonKey: "reason.text",
2703
+ tags: [
2704
+ {
2705
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2706
+ description: "Standard tags for lead, instruction, and hint."
2707
+ },
2708
+ {
2709
+ key: ConfigKey.property_reasonableNumOfChars,
2710
+ description: "Property for reasonable number of characters.",
2711
+ format: TagFormat.number
2712
+ },
2713
+ {
2714
+ key: ConfigKey.property_example,
2715
+ description: "Example text for the feedback.",
2716
+ format: TagFormat.plainText
2717
+ },
2718
+ {
2719
+ key: ConfigKey.tag_title,
2720
+ description: "Title of the feedback.",
2721
+ secondaryJsonKey: "heading.forValues"
2722
+ }
2723
+ ],
2724
+ bodyAllowed: true
2725
+ }
2726
+ ]
2727
+ }
2454
2728
  ]
2455
2729
  },
2456
- [CardSetConfigKey.matchImagePairs]: {
2457
- variants: [
2458
- // Side 1
2459
- [
2460
- // Variant 1..N
2461
- {
2462
- tags: [
2463
- {
2464
- key: ConfigKey.group_standardItemLeadInstructionHint,
2465
- description: "Standard tags for lead, instruction, and hint."
2466
- },
2467
- {
2468
- key: ConfigKey.property_example,
2469
- description: "Example text for the image match pair.",
2470
- format: TagFormat.plainText
2471
- },
2472
- {
2473
- key: ConfigKey.tag_title,
2474
- description: "Title of the image match pair."
2475
- },
2476
- {
2477
- key: ConfigKey.resource_image,
2478
- description: "Image resource for the match pair."
2479
- }
2480
- ],
2481
- repeatCount: Count.infinity
2482
- }
2483
- ]
2730
+ //
2731
+ // questions
2732
+ //
2733
+ [CardSetConfigKey.questions]: {
2734
+ jsonKey: "questions",
2735
+ sides: [
2736
+ {
2737
+ name: "question",
2738
+ variants: [
2739
+ {
2740
+ jsonKey: "question",
2741
+ tags: [
2742
+ {
2743
+ key: ConfigKey.property_reasonableNumOfChars,
2744
+ description: "Property for reasonable number of characters.",
2745
+ format: TagFormat.number
2746
+ },
2747
+ {
2748
+ key: ConfigKey.tag_sampleSolution,
2749
+ description: "Sample solution for the question."
2750
+ },
2751
+ {
2752
+ key: ConfigKey.property_sampleSolution,
2753
+ description: "Property for sample solution text.",
2754
+ format: TagFormat.plainText
2755
+ },
2756
+ {
2757
+ key: ConfigKey.property_additionalSolutions,
2758
+ description: "Property for additional solutions.",
2759
+ format: TagFormat.plainText,
2760
+ maxCount: Count.infinity
2761
+ },
2762
+ {
2763
+ key: ConfigKey.property_partialAnswer,
2764
+ description: "Property for partial answer text.",
2765
+ format: TagFormat.plainText
2766
+ },
2767
+ {
2768
+ key: ConfigKey.group_standardTags,
2769
+ description: "Standard tags for the question."
2770
+ }
2771
+ ]
2772
+ }
2773
+ ]
2774
+ }
2484
2775
  ]
2485
2776
  },
2486
- [CardSetConfigKey.matchMatrix]: {
2487
- variants: [
2488
- // Side 1
2489
- [
2490
- // Variant 1..N
2491
- {
2492
- tags: [
2493
- {
2494
- key: ConfigKey.group_standardItemLeadInstructionHint,
2495
- description: "Standard tags for lead, instruction, and hint."
2496
- },
2497
- {
2498
- key: ConfigKey.property_example,
2499
- description: "Example text for the match matrix.",
2500
- format: TagFormat.plainText
2501
- },
2502
- {
2503
- key: ConfigKey.tag_title,
2504
- description: "Title of the match matrix."
2505
- },
2506
- {
2507
- key: ConfigKey.property_isCaseSensitive,
2508
- description: "Property to indicate if the match is case sensitive.",
2509
- format: TagFormat.boolean
2510
- }
2511
- ],
2512
- repeatCount: Count.infinity
2513
- }
2514
- ]
2777
+ //
2778
+ // elements
2779
+ //
2780
+ [CardSetConfigKey.elements]: {
2781
+ jsonKey: null,
2782
+ sides: [
2783
+ {
2784
+ name: "element",
2785
+ repeat: true,
2786
+ variants: [
2787
+ {
2788
+ jsonKey: "elements[]",
2789
+ tags: [
2790
+ {
2791
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2792
+ description: "Standard tags for lead, instruction, and hint."
2793
+ },
2794
+ {
2795
+ key: ConfigKey.property_example,
2796
+ description: "Example text for the element.",
2797
+ format: TagFormat.plainText
2798
+ }
2799
+ ],
2800
+ repeatCount: Count.infinity
2801
+ }
2802
+ ]
2803
+ }
2515
2804
  ]
2516
2805
  },
2806
+ //
2807
+ // table
2808
+ //
2517
2809
  [CardSetConfigKey.table]: {
2518
- variants: [
2519
- // Side 1
2520
- [
2521
- // Variant 1..N
2522
- {
2523
- tags: [
2524
- {
2525
- key: ConfigKey.group_standardItemLeadInstructionHint,
2526
- description: "Standard tags for lead, instruction, and hint."
2527
- },
2528
- {
2529
- key: ConfigKey.tag_title,
2530
- description: "Title of the table."
2531
- },
2532
- {
2533
- key: ConfigKey.property_tableCellType,
2534
- description: "Table cell type (th/td).",
2535
- format: TagFormat.plainText
2536
- },
2537
- {
2538
- key: ConfigKey.property_tableRowSpan,
2539
- description: "Number of rows the cell spans.",
2540
- format: TagFormat.number
2541
- },
2542
- {
2543
- key: ConfigKey.property_tableColSpan,
2544
- description: "Number of columns the cell spans.",
2545
- format: TagFormat.number
2546
- },
2547
- {
2548
- key: ConfigKey.property_tableScope,
2549
- description: "Scope attribute for header cells.",
2550
- format: TagFormat.plainText
2551
- }
2552
- ],
2553
- repeatCount: Count.infinity
2554
- }
2555
- ]
2810
+ jsonKey: "table.data",
2811
+ itemType: "array",
2812
+ sides: [
2813
+ {
2814
+ name: "cell",
2815
+ repeat: true,
2816
+ variants: [
2817
+ {
2818
+ jsonKey: null,
2819
+ tags: [
2820
+ {
2821
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2822
+ description: "Standard tags for lead, instruction, and hint."
2823
+ },
2824
+ {
2825
+ key: ConfigKey.tag_title,
2826
+ description: "Title of the table.",
2827
+ secondaryJsonKey: "table.columns[]"
2828
+ },
2829
+ {
2830
+ key: ConfigKey.property_tableCellType,
2831
+ description: "Table cell type (th/td).",
2832
+ format: TagFormat.plainText
2833
+ },
2834
+ {
2835
+ key: ConfigKey.property_tableRowSpan,
2836
+ description: "Number of rows the cell spans.",
2837
+ format: TagFormat.number
2838
+ },
2839
+ {
2840
+ key: ConfigKey.property_tableColSpan,
2841
+ description: "Number of columns the cell spans.",
2842
+ format: TagFormat.number
2843
+ },
2844
+ {
2845
+ key: ConfigKey.property_tableScope,
2846
+ description: "Scope attribute for header cells.",
2847
+ format: TagFormat.plainText
2848
+ }
2849
+ ],
2850
+ repeatCount: Count.infinity
2851
+ }
2852
+ ]
2853
+ }
2556
2854
  ]
2557
2855
  },
2856
+ //
2857
+ // table-extended
2858
+ //
2859
+ [CardSetConfigKey.tableExtended]: {
2860
+ jsonKey: null,
2861
+ sections: {
2862
+ default: { jsonKey: "tableExtended.body.rows" },
2863
+ "table-header": { jsonKey: "tableExtended.header.rows" },
2864
+ "table-footer": { jsonKey: "tableExtended.footer.rows" }
2865
+ },
2866
+ sides: [
2867
+ {
2868
+ name: "cell",
2869
+ repeat: true,
2870
+ variants: [
2871
+ {
2872
+ jsonKey: "content",
2873
+ tags: [
2874
+ {
2875
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2876
+ description: "Standard tags for lead, instruction, and hint."
2877
+ },
2878
+ {
2879
+ key: ConfigKey.tag_title,
2880
+ description: "Title of the table cell."
2881
+ },
2882
+ {
2883
+ key: ConfigKey.property_tableCellType,
2884
+ description: "Table cell type (th/td).",
2885
+ format: TagFormat.plainText
2886
+ },
2887
+ {
2888
+ key: ConfigKey.property_tableRowSpan,
2889
+ description: "Number of rows the cell spans.",
2890
+ format: TagFormat.number
2891
+ },
2892
+ {
2893
+ key: ConfigKey.property_tableColSpan,
2894
+ description: "Number of columns the cell spans.",
2895
+ format: TagFormat.number
2896
+ },
2897
+ {
2898
+ key: ConfigKey.property_tableScope,
2899
+ description: "Scope attribute for header cells.",
2900
+ format: TagFormat.plainText
2901
+ }
2902
+ ],
2903
+ repeatCount: Count.infinity
2904
+ }
2905
+ ]
2906
+ }
2907
+ ]
2908
+ },
2909
+ //
2910
+ // pronunciation-table
2911
+ //
2558
2912
  [CardSetConfigKey.pronunciationTable]: {
2559
- variants: [
2560
- // Side 1
2561
- [
2562
- // Variant 1..N
2563
- {
2564
- tags: [
2565
- {
2566
- key: ConfigKey.group_standardItemLeadInstructionHint,
2567
- description: "Standard tags for lead, instruction, and hint."
2568
- },
2569
- {
2570
- key: ConfigKey.tag_title,
2571
- description: "Title of the pronunciation table."
2572
- },
2573
- {
2574
- key: ConfigKey.resource_audio,
2575
- description: "Audio resource for the pronunciation table."
2576
- }
2577
- ],
2578
- repeatCount: Count.infinity
2579
- }
2580
- ]
2913
+ jsonKey: "pronunciationTable.data",
2914
+ itemType: "array",
2915
+ sides: [
2916
+ {
2917
+ name: "cell",
2918
+ repeat: true,
2919
+ variants: [
2920
+ {
2921
+ jsonKey: "body",
2922
+ tags: [
2923
+ {
2924
+ key: ConfigKey.group_standardItemLeadInstructionHint,
2925
+ description: "Standard tags for lead, instruction, and hint."
2926
+ },
2927
+ {
2928
+ key: ConfigKey.tag_title,
2929
+ description: "Title of the pronunciation table."
2930
+ },
2931
+ {
2932
+ key: ConfigKey.resource_audio,
2933
+ description: "Audio resource for the pronunciation table.",
2934
+ jsonKey: "audio"
2935
+ }
2936
+ ],
2937
+ repeatCount: Count.infinity
2938
+ }
2939
+ ]
2940
+ }
2581
2941
  ]
2582
2942
  },
2943
+ //
2944
+ // bot-action-responses
2945
+ //
2583
2946
  [CardSetConfigKey.botActionResponses]: {
2584
- variants: [
2585
- [
2586
- {
2587
- tags: [
2588
- {
2589
- key: ConfigKey.property_reaction,
2590
- description: "Reaction to the bot action.",
2591
- format: TagFormat.plainText
2592
- },
2593
- {
2594
- key: ConfigKey.group_standardItemLeadInstructionHint,
2595
- description: "Standard tags for lead, instruction, and hint."
2596
- },
2597
- {
2598
- key: ConfigKey.property_example,
2599
- description: "Example text for the bot action response.",
2600
- format: TagFormat.plainText
2601
- }
2602
- ]
2603
- }
2604
- ]
2947
+ jsonKey: "responses",
2948
+ sides: [
2949
+ {
2950
+ name: "response",
2951
+ variants: [
2952
+ {
2953
+ jsonKey: "feedback",
2954
+ tags: [
2955
+ {
2956
+ key: ConfigKey.property_reaction,
2957
+ description: "Reaction to the bot action.",
2958
+ format: TagFormat.plainText
2959
+ },
2960
+ {
2961
+ key: ConfigKey.tag_item,
2962
+ description: "The item for the bot action response.",
2963
+ chain: [
2964
+ {
2965
+ key: ConfigKey.tag_item,
2966
+ description: "The lead, page number, source page number, and margin number.",
2967
+ maxCount: 4
2968
+ }
2969
+ ]
2970
+ },
2971
+ {
2972
+ key: ConfigKey.tag_instruction,
2973
+ description: "The response label for the bot action.",
2974
+ jsonKey: "response"
2975
+ },
2976
+ {
2977
+ key: ConfigKey.property_example,
2978
+ description: "Example text for the bot action response.",
2979
+ format: TagFormat.plainText
2980
+ }
2981
+ ]
2982
+ }
2983
+ ]
2984
+ }
2605
2985
  ]
2606
2986
  },
2987
+ //
2988
+ // cloze-list
2989
+ //
2607
2990
  [CardSetConfigKey.clozeList]: {
2608
- variants: [
2609
- [
2610
- {
2611
- tags: [
2612
- {
2613
- key: ConfigKey.group_standardTags,
2614
- description: "Standard tags for cloze items."
2615
- },
2616
- {
2617
- key: ConfigKey.group_gap,
2618
- description: "Group for gap tags in cloze items."
2619
- }
2620
- ]
2621
- }
2622
- ]
2991
+ jsonKey: "listItems",
2992
+ sides: [
2993
+ {
2994
+ name: "content",
2995
+ variants: [
2996
+ {
2997
+ jsonKey: "body",
2998
+ tags: [
2999
+ {
3000
+ key: ConfigKey.group_standardTags,
3001
+ description: "Standard tags for cloze items."
3002
+ },
3003
+ {
3004
+ key: ConfigKey.group_gap,
3005
+ description: "Group for gap tags in cloze items."
3006
+ }
3007
+ ]
3008
+ }
3009
+ ]
3010
+ }
2623
3011
  ]
2624
3012
  },
3013
+ //
3014
+ // example-bit-list
3015
+ //
2625
3016
  [CardSetConfigKey.exampleBitList]: {
2626
- variants: [
2627
- [
2628
- {
2629
- tags: [
2630
- {
2631
- key: ConfigKey.group_standardTags,
2632
- description: "Standard tags for example bits."
2633
- },
2634
- {
2635
- key: ConfigKey.tag_title,
2636
- description: "Title of the example bit."
2637
- }
2638
- ],
2639
- repeatCount: Count.infinity
2640
- }
2641
- ]
3017
+ jsonKey: "listItems",
3018
+ sides: [
3019
+ {
3020
+ name: "item",
3021
+ variants: [
3022
+ {
3023
+ jsonKey: "body",
3024
+ tags: [
3025
+ {
3026
+ key: ConfigKey.group_standardTags,
3027
+ description: "Standard tags for example bits."
3028
+ },
3029
+ {
3030
+ key: ConfigKey.tag_title,
3031
+ description: "Title of the example bit."
3032
+ }
3033
+ ]
3034
+ }
3035
+ ]
3036
+ }
2642
3037
  ]
2643
3038
  },
3039
+ //
3040
+ // ingredients
3041
+ //
2644
3042
  [CardSetConfigKey.ingredients]: {
2645
- variants: [
2646
- [
2647
- {
2648
- tags: [
2649
- {
2650
- key: ConfigKey.tag_title,
2651
- description: "Title of the ingredient."
2652
- },
2653
- {
2654
- key: ConfigKey.group_trueFalse,
2655
- description: "Group for true/false properties of the ingredient."
2656
- },
2657
- {
2658
- key: ConfigKey.group_standardItemLeadInstructionHint,
2659
- description: "Standard tags for lead, instruction, and hint."
2660
- },
2661
- {
2662
- key: ConfigKey.property_unit,
2663
- description: "Unit of measurement for the ingredient.",
2664
- format: TagFormat.plainText
2665
- },
2666
- {
2667
- key: ConfigKey.property_unitAbbr,
2668
- description: "Abbreviation for the unit of measurement.",
2669
- format: TagFormat.plainText
2670
- },
2671
- {
2672
- key: ConfigKey.property_decimalPlaces,
2673
- description: "Number of decimal places for the ingredient quantity.",
2674
- format: TagFormat.number,
2675
- defaultValue: "1"
2676
- },
2677
- {
2678
- key: ConfigKey.property_disableCalculation,
2679
- description: "Disable calculation for the ingredient.",
2680
- format: TagFormat.boolean
2681
- }
2682
- ],
2683
- repeatCount: Count.infinity
2684
- }
2685
- ]
3043
+ jsonKey: "ingredients",
3044
+ sides: [
3045
+ {
3046
+ name: "ingredient",
3047
+ variants: [
3048
+ {
3049
+ jsonKey: "ingredient",
3050
+ tags: [
3051
+ {
3052
+ key: ConfigKey.tag_title,
3053
+ description: "Title of the ingredient."
3054
+ },
3055
+ {
3056
+ key: ConfigKey.group_trueFalse,
3057
+ description: "Group for true/false properties of the ingredient."
3058
+ },
3059
+ {
3060
+ key: ConfigKey.tag_item,
3061
+ description: "The item for the ingredient.",
3062
+ chain: [
3063
+ {
3064
+ key: ConfigKey.tag_item,
3065
+ description: "Lead, page number, source page number, and margin number.",
3066
+ maxCount: 4
3067
+ }
3068
+ ]
3069
+ },
3070
+ {
3071
+ key: ConfigKey.tag_instruction,
3072
+ description: "The quantity of the ingredient.",
3073
+ jsonKey: "quantity"
3074
+ },
3075
+ {
3076
+ key: ConfigKey.tag_hint,
3077
+ description: "The hint for the ingredient."
3078
+ },
3079
+ {
3080
+ key: ConfigKey.property_unit,
3081
+ description: "Unit of measurement for the ingredient.",
3082
+ format: TagFormat.plainText
3083
+ },
3084
+ {
3085
+ key: ConfigKey.property_unitAbbr,
3086
+ description: "Abbreviation for the unit of measurement.",
3087
+ format: TagFormat.plainText
3088
+ },
3089
+ {
3090
+ key: ConfigKey.property_decimalPlaces,
3091
+ description: "Number of decimal places for the ingredient quantity.",
3092
+ format: TagFormat.number,
3093
+ defaultValue: "1"
3094
+ },
3095
+ {
3096
+ key: ConfigKey.property_disableCalculation,
3097
+ description: "Disable calculation for the ingredient.",
3098
+ format: TagFormat.boolean
3099
+ }
3100
+ ]
3101
+ }
3102
+ ]
3103
+ }
2686
3104
  ]
2687
3105
  },
2688
- // DEPRECATED - TO BE REMOVED IN THE FUTURE
2689
- // [CardSetConfigKey._captionDefinitionsList]: {
2690
- // variants: [
2691
- // // Side 1
2692
- // [
2693
- // // Variant 1..N
2694
- // {
2695
- // tags: [
2696
- // {
2697
- // type: BitTagType.tag,
2698
- // configKey: TagConfigKey.title,
2699
- // },
2700
- // ],
2701
- // repeatCount: Count.infinity,
2702
- // },
2703
- // ],
2704
- // ],
2705
- // },
3106
+ //
3107
+ // book-reference-list
3108
+ //
2706
3109
  [CardSetConfigKey.bookReferenceList]: {
2707
- variants: [
2708
- // Side 1
2709
- [
2710
- // Variant 1..N
2711
- {
2712
- tags: [
2713
- {
2714
- key: ConfigKey.group_standardTags,
2715
- description: "Standard tags for book references."
2716
- },
2717
- {
2718
- key: ConfigKey.property_refAuthor,
2719
- description: "Author of the book.",
2720
- format: TagFormat.plainText,
2721
- maxCount: Count.infinity
2722
- },
2723
- {
2724
- key: ConfigKey.property_refBookTitle,
2725
- description: "Title of the book.",
2726
- format: TagFormat.plainText
2727
- },
2728
- {
2729
- key: ConfigKey.property_refPublisher,
2730
- description: "Publisher of the book.",
2731
- format: TagFormat.plainText,
2732
- maxCount: Count.infinity
2733
- },
2734
- {
2735
- key: ConfigKey.property_refPublicationYear,
2736
- description: "Year of publication of the book.",
2737
- format: TagFormat.plainText
2738
- },
2739
- {
2740
- key: ConfigKey.property_citationStyle,
2741
- description: "Citation style for the book reference.",
2742
- format: TagFormat.plainText
2743
- }
2744
- ],
2745
- repeatCount: Count.infinity
2746
- }
2747
- ]
3110
+ jsonKey: "bookReferences",
3111
+ sides: [
3112
+ {
3113
+ name: "reference",
3114
+ variants: [
3115
+ {
3116
+ jsonKey: null,
3117
+ tags: [
3118
+ {
3119
+ key: ConfigKey.group_standardTags,
3120
+ description: "Standard tags for book references."
3121
+ },
3122
+ {
3123
+ key: ConfigKey.property_refAuthor,
3124
+ description: "Author of the book.",
3125
+ format: TagFormat.plainText,
3126
+ maxCount: Count.infinity
3127
+ },
3128
+ {
3129
+ key: ConfigKey.property_refBookTitle,
3130
+ description: "Title of the book.",
3131
+ format: TagFormat.plainText
3132
+ },
3133
+ {
3134
+ key: ConfigKey.property_refPublisher,
3135
+ description: "Publisher of the book.",
3136
+ format: TagFormat.plainText,
3137
+ maxCount: Count.infinity
3138
+ },
3139
+ {
3140
+ key: ConfigKey.property_refPublicationYear,
3141
+ description: "Year of publication of the book.",
3142
+ format: TagFormat.plainText
3143
+ },
3144
+ {
3145
+ key: ConfigKey.property_citationStyle,
3146
+ description: "Citation style for the book reference.",
3147
+ format: TagFormat.plainText
3148
+ }
3149
+ ]
3150
+ }
3151
+ ]
3152
+ }
2748
3153
  ]
2749
3154
  }
2750
3155
  };
@@ -4410,20 +4815,34 @@ var ConfigHydrator = class {
4410
4815
  if (!_cardSet) return void 0;
4411
4816
  const _cardSetConfig = CARDSETS[_cardSet];
4412
4817
  if (!_cardSetConfig) throw new Error(`No config found for card set config key '${_cardSet}'`);
4413
- const variants = [];
4414
- for (const _variants of _cardSetConfig.variants) {
4818
+ const sides = [];
4819
+ for (const _side of _cardSetConfig.sides) {
4415
4820
  const variantsOfSide = [];
4416
- for (const _variant of _variants) {
4821
+ for (const _variant of _side.variants) {
4417
4822
  const v = this.hydrateCardVariantConfig(_variant);
4418
4823
  variantsOfSide.push(v);
4419
4824
  }
4420
- variants.push(variantsOfSide);
4825
+ const sideConfig = new CardSideConfig(_side.name, _side.repeat ?? false, variantsOfSide);
4826
+ sides.push(sideConfig);
4421
4827
  }
4422
- const cardSetConfig = new CardSetConfig(_cardSet, variants);
4828
+ const cardSetConfig = new CardSetConfig(
4829
+ _cardSet,
4830
+ _cardSetConfig.jsonKey,
4831
+ _cardSetConfig.itemType ?? "object",
4832
+ _cardSetConfig.sections,
4833
+ sides
4834
+ );
4423
4835
  return cardSetConfig;
4424
4836
  }
4425
4837
  hydrateTagConfig(_tag) {
4426
- const { key: _configKey, maxCount, minCount, chain: _chain, deprecated } = _tag;
4838
+ const {
4839
+ key: _configKey,
4840
+ maxCount,
4841
+ minCount,
4842
+ chain: _chain,
4843
+ secondaryJsonKey,
4844
+ deprecated
4845
+ } = _tag;
4427
4846
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4428
4847
  if (!configKey) throw new Error(`No tag key found for config key '${configKey}'`);
4429
4848
  const tag = (0, import_superenum15.Enum)(Tag).fromValue(configKey);
@@ -4438,6 +4857,7 @@ var ConfigHydrator = class {
4438
4857
  maxCount: maxCount ?? MAX_COUNT_DEFAULT,
4439
4858
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4440
4859
  chain,
4860
+ secondaryJsonKey,
4441
4861
  deprecated
4442
4862
  });
4443
4863
  return {
@@ -4456,7 +4876,8 @@ var ConfigHydrator = class {
4456
4876
  format,
4457
4877
  values,
4458
4878
  defaultValue,
4459
- jsonKey
4879
+ jsonKey,
4880
+ secondaryJsonKey
4460
4881
  } = _tag;
4461
4882
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4462
4883
  if (!configKey) throw new Error(`No property key found for config key '${configKey}'`);
@@ -4472,6 +4893,7 @@ var ConfigHydrator = class {
4472
4893
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4473
4894
  chain,
4474
4895
  jsonKey,
4896
+ secondaryJsonKey,
4475
4897
  format,
4476
4898
  values,
4477
4899
  defaultValue,
@@ -4484,7 +4906,15 @@ var ConfigHydrator = class {
4484
4906
  };
4485
4907
  }
4486
4908
  hydrateResourceTagConfig(_tag) {
4487
- const { key: _configKey, maxCount, minCount, chain: _chain, deprecated, jsonKey } = _tag;
4909
+ const {
4910
+ key: _configKey,
4911
+ maxCount,
4912
+ minCount,
4913
+ chain: _chain,
4914
+ deprecated,
4915
+ jsonKey,
4916
+ secondaryJsonKey
4917
+ } = _tag;
4488
4918
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4489
4919
  if (!configKey) throw new Error(`No resource key found for config key '${configKey}'`);
4490
4920
  const tag = _configKey.substring(1);
@@ -4499,6 +4929,7 @@ var ConfigHydrator = class {
4499
4929
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4500
4930
  chain,
4501
4931
  jsonKey,
4932
+ secondaryJsonKey,
4502
4933
  deprecated
4503
4934
  });
4504
4935
  return {
@@ -4530,9 +4961,15 @@ var ConfigHydrator = class {
4530
4961
  };
4531
4962
  }
4532
4963
  hydrateCardVariantConfig(_variant) {
4533
- const { tags: _tags, bodyAllowed, bodyRequired, repeatCount } = _variant;
4964
+ const { tags: _tags, bodyAllowed, bodyRequired, repeatCount, jsonKey } = _variant;
4534
4965
  const tags2 = this.hydrateTagsConfig(_tags);
4535
- const cardSetConfig = new CardVariantConfig(tags2.tags, bodyAllowed, bodyRequired, repeatCount);
4966
+ const cardSetConfig = new CardVariantConfig(
4967
+ tags2.tags,
4968
+ bodyAllowed,
4969
+ bodyRequired,
4970
+ repeatCount,
4971
+ jsonKey
4972
+ );
4536
4973
  return cardSetConfig;
4537
4974
  }
4538
4975
  };
@@ -7298,6 +7735,12 @@ var BITS = {
7298
7735
  description: "Extractor configuration bit, used to configure extractors in articles or books",
7299
7736
  textFormatDefault: TextFormat2.plainText
7300
7737
  },
7738
+ [BitType.extractorBlueprintConfiguration]: {
7739
+ since: "5.11.0",
7740
+ baseBitType: BitType._standard,
7741
+ description: "Extractor blueprint configuration bit, used to specify extractor blueprint configuration when extracting from blueprints",
7742
+ textFormatDefault: TextFormat2.plainText
7743
+ },
7301
7744
  [BitType.extractorImage]: {
7302
7745
  since: "4.3.0",
7303
7746
  baseBitType: BitType._standard,
@@ -7323,6 +7766,12 @@ var BITS = {
7323
7766
  baseBitType: BitType.extractorImage,
7324
7767
  description: "Collapsible extractor images bit, used for images extracted from PDFs"
7325
7768
  },
7769
+ [BitType.extractorBlueprint]: {
7770
+ since: "5.12.0",
7771
+ baseBitType: BitType._standard,
7772
+ description: "Extractor blueprint bit, used to provide blueprint information about extractors",
7773
+ textFormatDefault: TextFormat2.json
7774
+ },
7326
7775
  [BitType.extractorInformation]: {
7327
7776
  since: "3.8.0",
7328
7777
  baseBitType: BitType._standard,
@@ -7525,6 +7974,11 @@ var BITS = {
7525
7974
  baseBitType: BitType.pageOpenBook,
7526
7975
  description: "Open book chapter bit, derived from page-open-book, used to create chapter pages that open books"
7527
7976
  },
7977
+ [BitType.openBookChapterTeaser]: {
7978
+ since: "4.16.0",
7979
+ baseBitType: BitType.openBookChapter,
7980
+ description: "Open book chapter teaser bit, equal to open-book-chapter, used to create teaser chapter pages that open books"
7981
+ },
7528
7982
  [BitType.pageOpenBookList]: {
7529
7983
  since: "2.1.0",
7530
7984
  baseBitType: BitType.article,
@@ -9427,6 +9881,38 @@ var BITS = {
9427
9881
  baseBitType: BitType.table,
9428
9882
  description: "Extended table bit, used to create complex tables with all HTML table features"
9429
9883
  },
9884
+ [BitType.tableExtendedImage]: {
9885
+ since: "5.13.0",
9886
+ baseBitType: BitType.tableExtended,
9887
+ description: "Extended table image bit, used to create complex tables with images and all HTML table features",
9888
+ tags: [
9889
+ {
9890
+ key: ConfigKey.property_caption,
9891
+ description: "Caption for the table image, used to provide a description for the image",
9892
+ format: TagFormat.bitmarkText
9893
+ },
9894
+ {
9895
+ key: ConfigKey.resource_backgroundWallpaper,
9896
+ description: "Background wallpaper for the image, used to set a background for the image",
9897
+ chain: [
9898
+ {
9899
+ key: ConfigKey.group_resourceImageCommon,
9900
+ description: "Common resource image tags for images"
9901
+ }
9902
+ ]
9903
+ },
9904
+ {
9905
+ key: ConfigKey.group_resourceBitTags,
9906
+ description: "Resource bit tags for images, used to define additional properties for images"
9907
+ },
9908
+ {
9909
+ key: ConfigKey.group_resourceImage,
9910
+ description: "Resource image tags for images, used to attach images to the bit",
9911
+ minCount: 1
9912
+ }
9913
+ ],
9914
+ resourceAttachmentAllowed: false
9915
+ },
9430
9916
  [BitType.tableAlt]: {
9431
9917
  since: "1.16.0",
9432
9918
  baseBitType: BitType.table,
@@ -10345,6 +10831,7 @@ var Config = class {
10345
10831
  maxCount: 1,
10346
10832
  chain: tag.chain,
10347
10833
  jsonKey: tag.jsonKey,
10834
+ secondaryJsonKey: tag.secondaryJsonKey,
10348
10835
  deprecated: tag.deprecated
10349
10836
  });
10350
10837
  finalResourceTags[k] = newTag;
@@ -10449,7 +10936,7 @@ var instance2 = new Config();
10449
10936
  // src/generated/package_info.ts
10450
10937
  var PACKAGE_INFO = {
10451
10938
  "name": "@gmb/bitmark-parser-generator",
10452
- "version": "5.11.0",
10939
+ "version": "5.13.0",
10453
10940
  "author": "Get More Brain Ltd",
10454
10941
  "license": "ISC",
10455
10942
  "description": "A bitmark parser and generator using Peggy.js"
@@ -12353,6 +12840,7 @@ var TextGenerator = class _TextGenerator extends AstWalkerGenerator {
12353
12840
  * @param ast bitmark text AST
12354
12841
  */
12355
12842
  generateSync(ast, textFormat, textLocation, options) {
12843
+ if (!ast || !Array.isArray(ast)) return "";
12356
12844
  this.generateOptions = Object.assign({}, options);
12357
12845
  this.validateGenerateOptions(ast);
12358
12846
  if (!this.generateOptions.plainTextDividerAllowed) {
@@ -34442,6 +34930,7 @@ function propertyContentProcessor(context, contentDepth, tagsConfig, content, ta
34442
34930
  minCount: 1,
34443
34931
  chain: void 0,
34444
34932
  jsonKey: void 0,
34933
+ secondaryJsonKey: void 0,
34445
34934
  format: TagFormat.bitmarkText,
34446
34935
  values: void 0,
34447
34936
  defaultValue: void 0,