@aravindc26/velu 0.11.6 → 0.11.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aravindc26/velu",
3
- "version": "0.11.6",
3
+ "version": "0.11.9",
4
4
  "description": "A modern documentation site generator powered by Markdown and JSON configuration",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,6 +40,14 @@
40
40
  "type": "string",
41
41
  "description": "Site name shown in metadata and brand text."
42
42
  },
43
+ "description": {
44
+ "type": "string",
45
+ "description": "Default site-wide meta description used for SEO. Applied as a fallback when individual pages do not specify their own description."
46
+ },
47
+ "variables": {
48
+ "$ref": "#/definitions/variablesConfig",
49
+ "description": "Global variables reusable in docs content and config using {{variableName}} syntax."
50
+ },
43
51
  "title": {
44
52
  "type": "string",
45
53
  "description": "Legacy alias for site name. Used when `name` is not provided."
@@ -273,163 +281,375 @@
273
281
  "$ref": "#/definitions/seoConfig",
274
282
  "description": "SEO configuration for metadata and indexing behavior."
275
283
  },
276
- "redirects": {
277
- "type": "array",
278
- "description": "Permanent or temporary redirects for moved pages.",
279
- "items": {
280
- "$ref": "#/definitions/redirect"
281
- }
284
+ "metadata": {
285
+ "$ref": "#/definitions/metadataConfig",
286
+ "description": "Metadata settings applied across documentation pages."
282
287
  },
283
- "navigation": {
288
+ "footer": {
289
+ "$ref": "#/definitions/footerConfig",
290
+ "description": "Footer configuration, including social links."
291
+ },
292
+ "footerSocials": {
293
+ "$ref": "#/definitions/footerSocials",
294
+ "description": "Legacy alias for footer social links."
295
+ },
296
+ "banner": {
284
297
  "type": "object",
285
- "description": "Defines the site navigation hierarchy. Use 'tabs' for single-language sites, or 'languages' for per-language navigation (like Mintlify).",
298
+ "description": "Global announcement banner displayed at the top of every page.",
286
299
  "properties": {
287
- "openapi": {
288
- "$ref": "#/definitions/openapiSource",
289
- "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
290
- },
291
- "tabs": {
292
- "type": "array",
293
- "description": "Top-level navigation tabs (single-language mode). Ignored when 'languages' is present.",
294
- "items": {
295
- "$ref": "#/definitions/tab"
296
- },
297
- "minItems": 1
298
- },
299
- "dropdowns": {
300
- "type": "array",
301
- "description": "Top-level dropdown containers. Each dropdown can include groups, pages, anchors, or links.",
302
- "items": {
303
- "$ref": "#/definitions/dropdown"
304
- },
305
- "minItems": 1
306
- },
307
- "groups": {
308
- "type": "array",
309
- "description": "Top-level sidebar groups when tabs/dropdowns are not used.",
310
- "items": {
311
- "$ref": "#/definitions/group"
312
- },
313
- "minItems": 1
300
+ "content": {
301
+ "type": "string",
302
+ "description": "Banner message. Supports plain text and Markdown links."
314
303
  },
315
- "pages": {
304
+ "dismissible": {
305
+ "type": "boolean",
306
+ "description": "Allow users to dismiss the banner.",
307
+ "default": false
308
+ }
309
+ },
310
+ "required": ["content"]
311
+ },
312
+ "contextual": {
313
+ "type": "object",
314
+ "description": "Configure which options appear in the page-level contextual menu dropdown (copy, AI chat, MCP, IDE integrations).",
315
+ "properties": {
316
+ "options": {
316
317
  "type": "array",
317
- "description": "Top-level pages when tabs/dropdowns are not used.",
318
+ "description": "List of contextual menu options. Use built-in IDs (strings) or custom objects with title and href.",
318
319
  "items": {
319
320
  "oneOf": [
320
321
  {
321
- "$ref": "#/definitions/page"
322
+ "type": "string",
323
+ "enum": ["copy", "view", "chatgpt", "claude", "perplexity", "grok", "mcp", "add-mcp", "cursor", "vscode"]
322
324
  },
323
325
  {
324
- "$ref": "#/definitions/separator"
325
- },
326
- {
327
- "$ref": "#/definitions/link"
326
+ "type": "object",
327
+ "properties": {
328
+ "title": { "type": "string" },
329
+ "description": { "type": "string" },
330
+ "icon": { "type": "string" },
331
+ "href": { "type": "string" }
332
+ },
333
+ "required": ["title", "href"]
328
334
  }
329
335
  ]
330
- },
331
- "minItems": 1
332
- },
333
- "languages": {
334
- "type": "array",
335
- "description": "Per-language navigation. Each entry defines tabs/groups/pages for one language. First entry is the default language (no URL prefix).",
336
- "items": {
337
- "$ref": "#/definitions/languageNav"
338
- },
339
- "minItems": 1
340
- },
341
- "products": {
342
- "type": "array",
343
- "description": "Multi-product navigation. Each product can define its own tabs or top-level pages.",
344
- "items": {
345
- "$ref": "#/definitions/productNav"
346
- },
347
- "minItems": 1
348
- },
349
- "versions": {
350
- "type": "array",
351
- "description": "Versioned navigation. Each version defines its own set of tabs.",
352
- "items": {
353
- "$ref": "#/definitions/versionNav"
354
- },
355
- "minItems": 1
356
- },
357
- "anchors": {
358
- "type": "array",
359
- "description": "Prominent external links displayed in the navbar (e.g. GitHub, Discord).",
360
- "items": {
361
- "$ref": "#/definitions/anchor"
362
336
  }
363
- },
364
- "global": {
365
- "type": "object",
366
- "description": "Cross-cutting navigation elements visible on every page.",
337
+ }
338
+ }
339
+ },
340
+ "redirects": {
341
+ "type": "array",
342
+ "description": "Permanent or temporary redirects for moved pages.",
343
+ "items": {
344
+ "$ref": "#/definitions/redirect"
345
+ }
346
+ },
347
+ "navigation": {
348
+ "type": "object",
349
+ "description": "Defines the site navigation hierarchy. Use 'tabs' for single-language sites, or 'languages' for per-language navigation (like Mintlify).",
350
+ "oneOf": [
351
+ {
352
+ "required": ["tabs"],
367
353
  "properties": {
368
354
  "tabs": {
369
355
  "type": "array",
370
- "description": "Global external tabs shown across all pages.",
371
- "items": {
372
- "$ref": "#/definitions/globalTab"
373
- }
356
+ "description": "Top-level navigation tabs (single-language mode).",
357
+ "items": { "$ref": "#/definitions/tab" },
358
+ "minItems": 1
374
359
  },
375
- "anchors": {
376
- "type": "array",
377
- "description": "Global anchors shown across all tabs.",
378
- "items": {
379
- "$ref": "#/definitions/anchor"
380
- }
360
+ "global": {
361
+ "type": "object",
362
+ "description": "Cross-cutting navigation elements visible on every page.",
363
+ "properties": {
364
+ "tabs": {
365
+ "type": "array",
366
+ "description": "Global external tabs shown across all pages.",
367
+ "items": { "$ref": "#/definitions/globalTab" }
368
+ },
369
+ "anchors": {
370
+ "type": "array",
371
+ "description": "Global anchors shown across all tabs.",
372
+ "items": { "$ref": "#/definitions/anchor" }
373
+ }
374
+ },
375
+ "additionalProperties": false
376
+ },
377
+ "openapi": {
378
+ "$ref": "#/definitions/openapiSource",
379
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
380
+ },
381
+ "asyncapi": {
382
+ "$ref": "#/definitions/openapiSource",
383
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
381
384
  }
382
385
  },
383
386
  "additionalProperties": false
384
387
  },
385
- "asyncapi": {
386
- "$ref": "#/definitions/openapiSource",
387
- "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
388
- }
389
- },
390
- "anyOf": [
391
- {
392
- "required": [
393
- "tabs"
394
- ]
395
- },
396
388
  {
397
- "required": [
398
- "dropdowns"
399
- ]
389
+ "required": ["groups"],
390
+ "properties": {
391
+ "groups": {
392
+ "type": "array",
393
+ "description": "Top-level sidebar groups when tabs/dropdowns are not used.",
394
+ "items": { "$ref": "#/definitions/group" },
395
+ "minItems": 1
396
+ },
397
+ "global": {
398
+ "type": "object",
399
+ "description": "Cross-cutting navigation elements visible on every page.",
400
+ "properties": {
401
+ "tabs": {
402
+ "type": "array",
403
+ "description": "Global external tabs shown across all pages.",
404
+ "items": { "$ref": "#/definitions/globalTab" }
405
+ },
406
+ "anchors": {
407
+ "type": "array",
408
+ "description": "Global anchors shown across all tabs.",
409
+ "items": { "$ref": "#/definitions/anchor" }
410
+ }
411
+ },
412
+ "additionalProperties": false
413
+ },
414
+ "openapi": {
415
+ "$ref": "#/definitions/openapiSource",
416
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
417
+ },
418
+ "asyncapi": {
419
+ "$ref": "#/definitions/openapiSource",
420
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
421
+ }
422
+ },
423
+ "additionalProperties": false
400
424
  },
401
425
  {
402
- "required": [
403
- "groups"
404
- ]
426
+ "required": ["pages"],
427
+ "properties": {
428
+ "pages": {
429
+ "type": "array",
430
+ "description": "Top-level pages when tabs/dropdowns are not used.",
431
+ "items": {
432
+ "oneOf": [
433
+ { "$ref": "#/definitions/page" },
434
+ { "$ref": "#/definitions/separator" },
435
+ { "$ref": "#/definitions/link" }
436
+ ]
437
+ },
438
+ "minItems": 1
439
+ },
440
+ "global": {
441
+ "type": "object",
442
+ "description": "Cross-cutting navigation elements visible on every page.",
443
+ "properties": {
444
+ "tabs": {
445
+ "type": "array",
446
+ "description": "Global external tabs shown across all pages.",
447
+ "items": { "$ref": "#/definitions/globalTab" }
448
+ },
449
+ "anchors": {
450
+ "type": "array",
451
+ "description": "Global anchors shown across all tabs.",
452
+ "items": { "$ref": "#/definitions/anchor" }
453
+ }
454
+ },
455
+ "additionalProperties": false
456
+ },
457
+ "openapi": {
458
+ "$ref": "#/definitions/openapiSource",
459
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
460
+ },
461
+ "asyncapi": {
462
+ "$ref": "#/definitions/openapiSource",
463
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
464
+ }
465
+ },
466
+ "additionalProperties": false
405
467
  },
406
468
  {
407
- "required": [
408
- "pages"
409
- ]
469
+ "required": ["dropdowns"],
470
+ "properties": {
471
+ "dropdowns": {
472
+ "type": "array",
473
+ "description": "Top-level dropdown containers. Each dropdown can include groups, pages, anchors, or links.",
474
+ "items": { "$ref": "#/definitions/dropdown" },
475
+ "minItems": 1
476
+ },
477
+ "global": {
478
+ "type": "object",
479
+ "description": "Cross-cutting navigation elements visible on every page.",
480
+ "properties": {
481
+ "tabs": {
482
+ "type": "array",
483
+ "description": "Global external tabs shown across all pages.",
484
+ "items": { "$ref": "#/definitions/globalTab" }
485
+ },
486
+ "anchors": {
487
+ "type": "array",
488
+ "description": "Global anchors shown across all tabs.",
489
+ "items": { "$ref": "#/definitions/anchor" }
490
+ }
491
+ },
492
+ "additionalProperties": false
493
+ },
494
+ "openapi": {
495
+ "$ref": "#/definitions/openapiSource",
496
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
497
+ },
498
+ "asyncapi": {
499
+ "$ref": "#/definitions/openapiSource",
500
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
501
+ }
502
+ },
503
+ "additionalProperties": false
410
504
  },
411
505
  {
412
- "required": [
413
- "languages"
414
- ]
506
+ "required": ["languages"],
507
+ "properties": {
508
+ "languages": {
509
+ "type": "array",
510
+ "description": "Per-language navigation. Each entry defines tabs/groups/pages for one language. First entry is the default language (no URL prefix).",
511
+ "items": { "$ref": "#/definitions/languageNav" },
512
+ "minItems": 1
513
+ },
514
+ "global": {
515
+ "type": "object",
516
+ "description": "Cross-cutting navigation elements visible on every page.",
517
+ "properties": {
518
+ "tabs": {
519
+ "type": "array",
520
+ "description": "Global external tabs shown across all pages.",
521
+ "items": { "$ref": "#/definitions/globalTab" }
522
+ },
523
+ "anchors": {
524
+ "type": "array",
525
+ "description": "Global anchors shown across all tabs.",
526
+ "items": { "$ref": "#/definitions/anchor" }
527
+ }
528
+ },
529
+ "additionalProperties": false
530
+ },
531
+ "openapi": {
532
+ "$ref": "#/definitions/openapiSource",
533
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
534
+ },
535
+ "asyncapi": {
536
+ "$ref": "#/definitions/openapiSource",
537
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
538
+ }
539
+ },
540
+ "additionalProperties": false
415
541
  },
416
542
  {
417
- "required": [
418
- "products"
419
- ]
543
+ "required": ["products"],
544
+ "properties": {
545
+ "products": {
546
+ "type": "array",
547
+ "description": "Multi-product navigation. Each product can define its own tabs or top-level pages.",
548
+ "items": { "$ref": "#/definitions/productNav" },
549
+ "minItems": 1
550
+ },
551
+ "global": {
552
+ "type": "object",
553
+ "description": "Cross-cutting navigation elements visible on every page.",
554
+ "properties": {
555
+ "tabs": {
556
+ "type": "array",
557
+ "description": "Global external tabs shown across all pages.",
558
+ "items": { "$ref": "#/definitions/globalTab" }
559
+ },
560
+ "anchors": {
561
+ "type": "array",
562
+ "description": "Global anchors shown across all tabs.",
563
+ "items": { "$ref": "#/definitions/anchor" }
564
+ }
565
+ },
566
+ "additionalProperties": false
567
+ },
568
+ "openapi": {
569
+ "$ref": "#/definitions/openapiSource",
570
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
571
+ },
572
+ "asyncapi": {
573
+ "$ref": "#/definitions/openapiSource",
574
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
575
+ }
576
+ },
577
+ "additionalProperties": false
420
578
  },
421
579
  {
422
- "required": [
423
- "versions"
424
- ]
580
+ "required": ["versions"],
581
+ "properties": {
582
+ "versions": {
583
+ "type": "array",
584
+ "description": "Versioned navigation. Each version defines its own set of tabs.",
585
+ "items": { "$ref": "#/definitions/versionNav" },
586
+ "minItems": 1
587
+ },
588
+ "global": {
589
+ "type": "object",
590
+ "description": "Cross-cutting navigation elements visible on every page.",
591
+ "properties": {
592
+ "tabs": {
593
+ "type": "array",
594
+ "description": "Global external tabs shown across all pages.",
595
+ "items": { "$ref": "#/definitions/globalTab" }
596
+ },
597
+ "anchors": {
598
+ "type": "array",
599
+ "description": "Global anchors shown across all tabs.",
600
+ "items": { "$ref": "#/definitions/anchor" }
601
+ }
602
+ },
603
+ "additionalProperties": false
604
+ },
605
+ "openapi": {
606
+ "$ref": "#/definitions/openapiSource",
607
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
608
+ },
609
+ "asyncapi": {
610
+ "$ref": "#/definitions/openapiSource",
611
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
612
+ }
613
+ },
614
+ "additionalProperties": false
425
615
  },
426
616
  {
427
- "required": [
428
- "anchors"
429
- ]
617
+ "required": ["anchors"],
618
+ "properties": {
619
+ "anchors": {
620
+ "type": "array",
621
+ "description": "Prominent external links displayed in the navbar (e.g. GitHub, Discord).",
622
+ "items": { "$ref": "#/definitions/anchor" }
623
+ },
624
+ "global": {
625
+ "type": "object",
626
+ "description": "Cross-cutting navigation elements visible on every page.",
627
+ "properties": {
628
+ "tabs": {
629
+ "type": "array",
630
+ "description": "Global external tabs shown across all pages.",
631
+ "items": { "$ref": "#/definitions/globalTab" }
632
+ },
633
+ "anchors": {
634
+ "type": "array",
635
+ "description": "Global anchors shown across all tabs.",
636
+ "items": { "$ref": "#/definitions/anchor" }
637
+ }
638
+ },
639
+ "additionalProperties": false
640
+ },
641
+ "openapi": {
642
+ "$ref": "#/definitions/openapiSource",
643
+ "description": "Default OpenAPI source inherited by tabs/groups/pages in this navigation section."
644
+ },
645
+ "asyncapi": {
646
+ "$ref": "#/definitions/openapiSource",
647
+ "description": "Default AsyncAPI source inherited by tabs/groups/pages in this navigation section."
648
+ }
649
+ },
650
+ "additionalProperties": false
430
651
  }
431
- ],
432
- "additionalProperties": false
652
+ ]
433
653
  },
434
654
  "asyncapi": {
435
655
  "$ref": "#/definitions/openapiSource",
@@ -438,6 +658,23 @@
438
658
  },
439
659
  "additionalProperties": false,
440
660
  "definitions": {
661
+ "footerSocials": {
662
+ "type": "object",
663
+ "description": "Map of social network keys to URLs (for example {\"x\":\"https://x.com/org\",\"github\":\"https://github.com/org\"}).",
664
+ "additionalProperties": {
665
+ "type": "string",
666
+ "minLength": 1
667
+ }
668
+ },
669
+ "footerConfig": {
670
+ "type": "object",
671
+ "properties": {
672
+ "socials": {
673
+ "$ref": "#/definitions/footerSocials"
674
+ }
675
+ },
676
+ "additionalProperties": false
677
+ },
441
678
  "themeAsset": {
442
679
  "description": "Theme-aware asset path. Supports a string or an object with light/dark variants.",
443
680
  "oneOf": [
@@ -513,6 +750,30 @@
513
750
  },
514
751
  "additionalProperties": false
515
752
  },
753
+ "metadataConfig": {
754
+ "type": "object",
755
+ "description": "Metadata configuration for documentation pages.",
756
+ "properties": {
757
+ "timestamp": {
758
+ "type": "boolean",
759
+ "description": "Show the last modified date on all docs pages.",
760
+ "default": false
761
+ }
762
+ },
763
+ "additionalProperties": false
764
+ },
765
+ "variablesConfig": {
766
+ "type": "object",
767
+ "description": "Set of custom variables used throughout documentation and docs.json values.",
768
+ "propertyNames": {
769
+ "pattern": "^[A-Za-z0-9.-]+$",
770
+ "description": "Variable names can include letters, numbers, periods, and hyphens."
771
+ },
772
+ "additionalProperties": {
773
+ "type": "string",
774
+ "description": "Variable value."
775
+ }
776
+ },
516
777
  "openapiSource": {
517
778
  "description": "OpenAPI source value. Supports a spec URL/path, a list of sources, or an object form.",
518
779
  "oneOf": [