@bettercms-ai/mcp 0.19.0 → 0.20.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/SKILL.md +15 -5
- package/dist/index.js +2290 -49
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -315,6 +315,1970 @@ import { BetterCMS } from "@bettercms-ai/sdk";
|
|
|
315
315
|
// src/tools.ts
|
|
316
316
|
import { z } from "zod";
|
|
317
317
|
import { BetterCMSError } from "@bettercms-ai/sdk";
|
|
318
|
+
|
|
319
|
+
// ../types/src/layout-lucide-icons.ts
|
|
320
|
+
var LAYOUT_SECTION_ICONS = Object.freeze([
|
|
321
|
+
"LayoutPanelTop",
|
|
322
|
+
"PanelTop",
|
|
323
|
+
"PanelBottom",
|
|
324
|
+
"Menu",
|
|
325
|
+
"Navigation",
|
|
326
|
+
"Megaphone",
|
|
327
|
+
"GalleryHorizontal",
|
|
328
|
+
"Rows3",
|
|
329
|
+
"Grid2X2",
|
|
330
|
+
"FileText",
|
|
331
|
+
"Link",
|
|
332
|
+
"Contact",
|
|
333
|
+
"BadgeInfo",
|
|
334
|
+
"Sparkles",
|
|
335
|
+
"a-arrow-down",
|
|
336
|
+
"a-arrow-up",
|
|
337
|
+
"a-large-small",
|
|
338
|
+
"accessibility",
|
|
339
|
+
"activity",
|
|
340
|
+
"air-vent",
|
|
341
|
+
"airplay",
|
|
342
|
+
"alarm-clock-check",
|
|
343
|
+
"alarm-check",
|
|
344
|
+
"alarm-clock-minus",
|
|
345
|
+
"alarm-minus",
|
|
346
|
+
"alarm-clock-off",
|
|
347
|
+
"alarm-clock-plus",
|
|
348
|
+
"alarm-plus",
|
|
349
|
+
"alarm-clock",
|
|
350
|
+
"alarm-smoke",
|
|
351
|
+
"album",
|
|
352
|
+
"align-center-horizontal",
|
|
353
|
+
"align-center-vertical",
|
|
354
|
+
"align-end-horizontal",
|
|
355
|
+
"align-end-vertical",
|
|
356
|
+
"align-horizontal-distribute-center",
|
|
357
|
+
"align-horizontal-distribute-end",
|
|
358
|
+
"align-horizontal-distribute-start",
|
|
359
|
+
"align-horizontal-justify-center",
|
|
360
|
+
"align-horizontal-justify-end",
|
|
361
|
+
"align-horizontal-justify-start",
|
|
362
|
+
"align-horizontal-space-around",
|
|
363
|
+
"align-horizontal-space-between",
|
|
364
|
+
"align-start-horizontal",
|
|
365
|
+
"align-start-vertical",
|
|
366
|
+
"align-vertical-distribute-center",
|
|
367
|
+
"align-vertical-distribute-end",
|
|
368
|
+
"align-vertical-distribute-start",
|
|
369
|
+
"align-vertical-justify-center",
|
|
370
|
+
"align-vertical-justify-end",
|
|
371
|
+
"align-vertical-justify-start",
|
|
372
|
+
"align-vertical-space-around",
|
|
373
|
+
"align-vertical-space-between",
|
|
374
|
+
"ambulance",
|
|
375
|
+
"ampersand",
|
|
376
|
+
"ampersands",
|
|
377
|
+
"amphora",
|
|
378
|
+
"anchor",
|
|
379
|
+
"angry",
|
|
380
|
+
"annoyed",
|
|
381
|
+
"antenna",
|
|
382
|
+
"anvil",
|
|
383
|
+
"aperture",
|
|
384
|
+
"app-window-mac",
|
|
385
|
+
"app-window",
|
|
386
|
+
"apple",
|
|
387
|
+
"archive-restore",
|
|
388
|
+
"archive-x",
|
|
389
|
+
"archive",
|
|
390
|
+
"armchair",
|
|
391
|
+
"arrow-big-down-dash",
|
|
392
|
+
"arrow-big-down",
|
|
393
|
+
"arrow-big-left-dash",
|
|
394
|
+
"arrow-big-left",
|
|
395
|
+
"arrow-big-right-dash",
|
|
396
|
+
"arrow-big-right",
|
|
397
|
+
"arrow-big-up-dash",
|
|
398
|
+
"arrow-big-up",
|
|
399
|
+
"arrow-down-0-1",
|
|
400
|
+
"arrow-down-01",
|
|
401
|
+
"arrow-down-1-0",
|
|
402
|
+
"arrow-down-10",
|
|
403
|
+
"arrow-down-a-z",
|
|
404
|
+
"arrow-down-az",
|
|
405
|
+
"arrow-down-from-line",
|
|
406
|
+
"arrow-down-left",
|
|
407
|
+
"arrow-down-narrow-wide",
|
|
408
|
+
"arrow-down-right",
|
|
409
|
+
"arrow-down-to-dot",
|
|
410
|
+
"arrow-down-to-line",
|
|
411
|
+
"arrow-down-up",
|
|
412
|
+
"arrow-down-wide-narrow",
|
|
413
|
+
"sort-desc",
|
|
414
|
+
"arrow-down-z-a",
|
|
415
|
+
"arrow-down-za",
|
|
416
|
+
"arrow-down",
|
|
417
|
+
"arrow-left-from-line",
|
|
418
|
+
"arrow-left-right",
|
|
419
|
+
"arrow-left-to-line",
|
|
420
|
+
"arrow-left",
|
|
421
|
+
"arrow-right-from-line",
|
|
422
|
+
"arrow-right-left",
|
|
423
|
+
"arrow-right-to-line",
|
|
424
|
+
"arrow-right",
|
|
425
|
+
"arrow-up-0-1",
|
|
426
|
+
"arrow-up-01",
|
|
427
|
+
"arrow-up-1-0",
|
|
428
|
+
"arrow-up-10",
|
|
429
|
+
"arrow-up-a-z",
|
|
430
|
+
"arrow-up-az",
|
|
431
|
+
"arrow-up-down",
|
|
432
|
+
"arrow-up-from-dot",
|
|
433
|
+
"arrow-up-from-line",
|
|
434
|
+
"arrow-up-left",
|
|
435
|
+
"arrow-up-narrow-wide",
|
|
436
|
+
"sort-asc",
|
|
437
|
+
"arrow-up-right",
|
|
438
|
+
"arrow-up-to-line",
|
|
439
|
+
"arrow-up-wide-narrow",
|
|
440
|
+
"arrow-up-z-a",
|
|
441
|
+
"arrow-up-za",
|
|
442
|
+
"arrow-up",
|
|
443
|
+
"arrows-up-from-line",
|
|
444
|
+
"asterisk",
|
|
445
|
+
"at-sign",
|
|
446
|
+
"atom",
|
|
447
|
+
"audio-lines",
|
|
448
|
+
"audio-waveform",
|
|
449
|
+
"award",
|
|
450
|
+
"axe",
|
|
451
|
+
"axis-3d",
|
|
452
|
+
"axis-3-d",
|
|
453
|
+
"baby",
|
|
454
|
+
"backpack",
|
|
455
|
+
"badge-alert",
|
|
456
|
+
"badge-cent",
|
|
457
|
+
"badge-check",
|
|
458
|
+
"verified",
|
|
459
|
+
"badge-dollar-sign",
|
|
460
|
+
"badge-euro",
|
|
461
|
+
"badge-indian-rupee",
|
|
462
|
+
"badge-info",
|
|
463
|
+
"badge-japanese-yen",
|
|
464
|
+
"badge-minus",
|
|
465
|
+
"badge-percent",
|
|
466
|
+
"badge-plus",
|
|
467
|
+
"badge-pound-sterling",
|
|
468
|
+
"badge-question-mark",
|
|
469
|
+
"badge-help",
|
|
470
|
+
"badge-russian-ruble",
|
|
471
|
+
"badge-swiss-franc",
|
|
472
|
+
"badge-turkish-lira",
|
|
473
|
+
"badge-x",
|
|
474
|
+
"badge",
|
|
475
|
+
"baggage-claim",
|
|
476
|
+
"balloon",
|
|
477
|
+
"ban",
|
|
478
|
+
"banana",
|
|
479
|
+
"bandage",
|
|
480
|
+
"banknote-arrow-down",
|
|
481
|
+
"banknote-arrow-up",
|
|
482
|
+
"banknote-x",
|
|
483
|
+
"banknote",
|
|
484
|
+
"barcode",
|
|
485
|
+
"barrel",
|
|
486
|
+
"baseline",
|
|
487
|
+
"bath",
|
|
488
|
+
"battery-charging",
|
|
489
|
+
"battery-full",
|
|
490
|
+
"battery-low",
|
|
491
|
+
"battery-medium",
|
|
492
|
+
"battery-plus",
|
|
493
|
+
"battery-warning",
|
|
494
|
+
"battery",
|
|
495
|
+
"beaker",
|
|
496
|
+
"bean-off",
|
|
497
|
+
"bean",
|
|
498
|
+
"bed-double",
|
|
499
|
+
"bed-single",
|
|
500
|
+
"bed",
|
|
501
|
+
"beef-off",
|
|
502
|
+
"beef",
|
|
503
|
+
"beer-off",
|
|
504
|
+
"beer",
|
|
505
|
+
"bell-dot",
|
|
506
|
+
"bell-electric",
|
|
507
|
+
"bell-minus",
|
|
508
|
+
"bell-off",
|
|
509
|
+
"bell-plus",
|
|
510
|
+
"bell-ring",
|
|
511
|
+
"bell",
|
|
512
|
+
"between-horizontal-end",
|
|
513
|
+
"between-horizonal-end",
|
|
514
|
+
"between-horizontal-start",
|
|
515
|
+
"between-horizonal-start",
|
|
516
|
+
"between-vertical-end",
|
|
517
|
+
"between-vertical-start",
|
|
518
|
+
"biceps-flexed",
|
|
519
|
+
"bike",
|
|
520
|
+
"binary",
|
|
521
|
+
"binoculars",
|
|
522
|
+
"biohazard",
|
|
523
|
+
"bird",
|
|
524
|
+
"birdhouse",
|
|
525
|
+
"bitcoin",
|
|
526
|
+
"blend",
|
|
527
|
+
"blinds",
|
|
528
|
+
"blocks",
|
|
529
|
+
"bluetooth-connected",
|
|
530
|
+
"bluetooth-off",
|
|
531
|
+
"bluetooth-searching",
|
|
532
|
+
"bluetooth",
|
|
533
|
+
"bold",
|
|
534
|
+
"bolt",
|
|
535
|
+
"bomb",
|
|
536
|
+
"bone",
|
|
537
|
+
"book-a",
|
|
538
|
+
"book-alert",
|
|
539
|
+
"book-audio",
|
|
540
|
+
"book-check",
|
|
541
|
+
"book-copy",
|
|
542
|
+
"book-dashed",
|
|
543
|
+
"book-template",
|
|
544
|
+
"book-down",
|
|
545
|
+
"book-headphones",
|
|
546
|
+
"book-heart",
|
|
547
|
+
"book-image",
|
|
548
|
+
"book-key",
|
|
549
|
+
"book-lock",
|
|
550
|
+
"book-marked",
|
|
551
|
+
"book-minus",
|
|
552
|
+
"book-open-check",
|
|
553
|
+
"book-open-text",
|
|
554
|
+
"book-open",
|
|
555
|
+
"book-plus",
|
|
556
|
+
"book-search",
|
|
557
|
+
"book-text",
|
|
558
|
+
"book-type",
|
|
559
|
+
"book-up-2",
|
|
560
|
+
"book-up",
|
|
561
|
+
"book-user",
|
|
562
|
+
"book-x",
|
|
563
|
+
"book",
|
|
564
|
+
"bookmark-check",
|
|
565
|
+
"bookmark-minus",
|
|
566
|
+
"bookmark-off",
|
|
567
|
+
"bookmark-plus",
|
|
568
|
+
"bookmark-x",
|
|
569
|
+
"bookmark",
|
|
570
|
+
"boom-box",
|
|
571
|
+
"bot-message-square",
|
|
572
|
+
"bot-off",
|
|
573
|
+
"bot",
|
|
574
|
+
"bottle-wine",
|
|
575
|
+
"bow-arrow",
|
|
576
|
+
"box",
|
|
577
|
+
"boxes",
|
|
578
|
+
"braces",
|
|
579
|
+
"curly-braces",
|
|
580
|
+
"brackets",
|
|
581
|
+
"brain-circuit",
|
|
582
|
+
"brain-cog",
|
|
583
|
+
"brain",
|
|
584
|
+
"brick-wall-fire",
|
|
585
|
+
"brick-wall-shield",
|
|
586
|
+
"brick-wall",
|
|
587
|
+
"briefcase-business",
|
|
588
|
+
"briefcase-conveyor-belt",
|
|
589
|
+
"briefcase-medical",
|
|
590
|
+
"briefcase",
|
|
591
|
+
"bring-to-front",
|
|
592
|
+
"brush-cleaning",
|
|
593
|
+
"brush",
|
|
594
|
+
"bubbles",
|
|
595
|
+
"bug-off",
|
|
596
|
+
"bug-play",
|
|
597
|
+
"bug",
|
|
598
|
+
"building-2",
|
|
599
|
+
"building",
|
|
600
|
+
"bus-front",
|
|
601
|
+
"bus",
|
|
602
|
+
"cable-car",
|
|
603
|
+
"cable",
|
|
604
|
+
"cake-slice",
|
|
605
|
+
"cake",
|
|
606
|
+
"calculator",
|
|
607
|
+
"calendar-1",
|
|
608
|
+
"calendar-arrow-down",
|
|
609
|
+
"calendar-arrow-up",
|
|
610
|
+
"calendar-check-2",
|
|
611
|
+
"calendar-check",
|
|
612
|
+
"calendar-clock",
|
|
613
|
+
"calendar-cog",
|
|
614
|
+
"calendar-days",
|
|
615
|
+
"calendar-fold",
|
|
616
|
+
"calendar-heart",
|
|
617
|
+
"calendar-minus-2",
|
|
618
|
+
"calendar-minus",
|
|
619
|
+
"calendar-off",
|
|
620
|
+
"calendar-plus-2",
|
|
621
|
+
"calendar-plus",
|
|
622
|
+
"calendar-range",
|
|
623
|
+
"calendar-search",
|
|
624
|
+
"calendar-sync",
|
|
625
|
+
"calendar-x-2",
|
|
626
|
+
"calendar-x",
|
|
627
|
+
"calendar",
|
|
628
|
+
"calendars",
|
|
629
|
+
"camera-off",
|
|
630
|
+
"camera",
|
|
631
|
+
"candy-cane",
|
|
632
|
+
"candy-off",
|
|
633
|
+
"candy",
|
|
634
|
+
"cannabis-off",
|
|
635
|
+
"cannabis",
|
|
636
|
+
"captions-off",
|
|
637
|
+
"captions",
|
|
638
|
+
"subtitles",
|
|
639
|
+
"car-front",
|
|
640
|
+
"car-taxi-front",
|
|
641
|
+
"car",
|
|
642
|
+
"caravan",
|
|
643
|
+
"card-sim",
|
|
644
|
+
"carrot",
|
|
645
|
+
"case-lower",
|
|
646
|
+
"case-sensitive",
|
|
647
|
+
"case-upper",
|
|
648
|
+
"cassette-tape",
|
|
649
|
+
"cast",
|
|
650
|
+
"castle",
|
|
651
|
+
"cat",
|
|
652
|
+
"cctv-off",
|
|
653
|
+
"cctv",
|
|
654
|
+
"chart-area",
|
|
655
|
+
"area-chart",
|
|
656
|
+
"chart-bar-big",
|
|
657
|
+
"bar-chart-horizontal-big",
|
|
658
|
+
"chart-bar-decreasing",
|
|
659
|
+
"chart-bar-increasing",
|
|
660
|
+
"chart-bar-stacked",
|
|
661
|
+
"chart-bar",
|
|
662
|
+
"bar-chart-horizontal",
|
|
663
|
+
"chart-candlestick",
|
|
664
|
+
"candlestick-chart",
|
|
665
|
+
"chart-column-big",
|
|
666
|
+
"bar-chart-big",
|
|
667
|
+
"chart-column-decreasing",
|
|
668
|
+
"chart-column-increasing",
|
|
669
|
+
"bar-chart-4",
|
|
670
|
+
"chart-column-stacked",
|
|
671
|
+
"chart-column",
|
|
672
|
+
"bar-chart-3",
|
|
673
|
+
"chart-gantt",
|
|
674
|
+
"chart-line",
|
|
675
|
+
"line-chart",
|
|
676
|
+
"chart-network",
|
|
677
|
+
"chart-no-axes-column-decreasing",
|
|
678
|
+
"chart-no-axes-column-increasing",
|
|
679
|
+
"bar-chart",
|
|
680
|
+
"chart-no-axes-column",
|
|
681
|
+
"bar-chart-2",
|
|
682
|
+
"chart-no-axes-combined",
|
|
683
|
+
"chart-no-axes-gantt",
|
|
684
|
+
"gantt-chart",
|
|
685
|
+
"chart-pie",
|
|
686
|
+
"pie-chart",
|
|
687
|
+
"chart-scatter",
|
|
688
|
+
"scatter-chart",
|
|
689
|
+
"chart-spline",
|
|
690
|
+
"check-check",
|
|
691
|
+
"check-line",
|
|
692
|
+
"check",
|
|
693
|
+
"chef-hat",
|
|
694
|
+
"cherry",
|
|
695
|
+
"chess-bishop",
|
|
696
|
+
"chess-king",
|
|
697
|
+
"chess-knight",
|
|
698
|
+
"chess-pawn",
|
|
699
|
+
"chess-queen",
|
|
700
|
+
"chess-rook",
|
|
701
|
+
"chevron-down",
|
|
702
|
+
"chevron-first",
|
|
703
|
+
"chevron-last",
|
|
704
|
+
"chevron-left",
|
|
705
|
+
"chevron-right",
|
|
706
|
+
"chevron-up",
|
|
707
|
+
"chevrons-down-up",
|
|
708
|
+
"chevrons-down",
|
|
709
|
+
"chevrons-left-right-ellipsis",
|
|
710
|
+
"chevrons-left-right",
|
|
711
|
+
"chevrons-left",
|
|
712
|
+
"chevrons-right-left",
|
|
713
|
+
"chevrons-right",
|
|
714
|
+
"chevrons-up-down",
|
|
715
|
+
"chevrons-up",
|
|
716
|
+
"church",
|
|
717
|
+
"cigarette-off",
|
|
718
|
+
"cigarette",
|
|
719
|
+
"circle-alert",
|
|
720
|
+
"alert-circle",
|
|
721
|
+
"circle-arrow-down",
|
|
722
|
+
"arrow-down-circle",
|
|
723
|
+
"circle-arrow-left",
|
|
724
|
+
"arrow-left-circle",
|
|
725
|
+
"circle-arrow-out-down-left",
|
|
726
|
+
"arrow-down-left-from-circle",
|
|
727
|
+
"circle-arrow-out-down-right",
|
|
728
|
+
"arrow-down-right-from-circle",
|
|
729
|
+
"circle-arrow-out-up-left",
|
|
730
|
+
"arrow-up-left-from-circle",
|
|
731
|
+
"circle-arrow-out-up-right",
|
|
732
|
+
"arrow-up-right-from-circle",
|
|
733
|
+
"circle-arrow-right",
|
|
734
|
+
"arrow-right-circle",
|
|
735
|
+
"circle-arrow-up",
|
|
736
|
+
"arrow-up-circle",
|
|
737
|
+
"circle-check-big",
|
|
738
|
+
"check-circle",
|
|
739
|
+
"circle-check",
|
|
740
|
+
"check-circle-2",
|
|
741
|
+
"circle-chevron-down",
|
|
742
|
+
"chevron-down-circle",
|
|
743
|
+
"circle-chevron-left",
|
|
744
|
+
"chevron-left-circle",
|
|
745
|
+
"circle-chevron-right",
|
|
746
|
+
"chevron-right-circle",
|
|
747
|
+
"circle-chevron-up",
|
|
748
|
+
"chevron-up-circle",
|
|
749
|
+
"circle-dashed",
|
|
750
|
+
"circle-divide",
|
|
751
|
+
"divide-circle",
|
|
752
|
+
"circle-dollar-sign",
|
|
753
|
+
"circle-dot-dashed",
|
|
754
|
+
"circle-dot",
|
|
755
|
+
"circle-ellipsis",
|
|
756
|
+
"circle-equal",
|
|
757
|
+
"circle-fading-arrow-up",
|
|
758
|
+
"circle-fading-plus",
|
|
759
|
+
"circle-gauge",
|
|
760
|
+
"gauge-circle",
|
|
761
|
+
"circle-minus",
|
|
762
|
+
"minus-circle",
|
|
763
|
+
"circle-off",
|
|
764
|
+
"circle-parking-off",
|
|
765
|
+
"parking-circle-off",
|
|
766
|
+
"circle-parking",
|
|
767
|
+
"parking-circle",
|
|
768
|
+
"circle-pause",
|
|
769
|
+
"pause-circle",
|
|
770
|
+
"circle-percent",
|
|
771
|
+
"percent-circle",
|
|
772
|
+
"circle-pile",
|
|
773
|
+
"circle-play",
|
|
774
|
+
"play-circle",
|
|
775
|
+
"circle-plus",
|
|
776
|
+
"plus-circle",
|
|
777
|
+
"circle-pound-sterling",
|
|
778
|
+
"circle-power",
|
|
779
|
+
"power-circle",
|
|
780
|
+
"circle-question-mark",
|
|
781
|
+
"help-circle",
|
|
782
|
+
"circle-help",
|
|
783
|
+
"circle-slash-2",
|
|
784
|
+
"circle-slashed",
|
|
785
|
+
"circle-slash",
|
|
786
|
+
"circle-small",
|
|
787
|
+
"circle-star",
|
|
788
|
+
"circle-stop",
|
|
789
|
+
"stop-circle",
|
|
790
|
+
"circle-user-round",
|
|
791
|
+
"user-circle-2",
|
|
792
|
+
"circle-user",
|
|
793
|
+
"user-circle",
|
|
794
|
+
"circle-x",
|
|
795
|
+
"x-circle",
|
|
796
|
+
"circle",
|
|
797
|
+
"circuit-board",
|
|
798
|
+
"citrus",
|
|
799
|
+
"clapperboard",
|
|
800
|
+
"clipboard-check",
|
|
801
|
+
"clipboard-clock",
|
|
802
|
+
"clipboard-copy",
|
|
803
|
+
"clipboard-list",
|
|
804
|
+
"clipboard-minus",
|
|
805
|
+
"clipboard-paste",
|
|
806
|
+
"clipboard-pen-line",
|
|
807
|
+
"clipboard-signature",
|
|
808
|
+
"clipboard-pen",
|
|
809
|
+
"clipboard-edit",
|
|
810
|
+
"clipboard-plus",
|
|
811
|
+
"clipboard-type",
|
|
812
|
+
"clipboard-x",
|
|
813
|
+
"clipboard",
|
|
814
|
+
"clock-1",
|
|
815
|
+
"clock-10",
|
|
816
|
+
"clock-11",
|
|
817
|
+
"clock-12",
|
|
818
|
+
"clock-2",
|
|
819
|
+
"clock-3",
|
|
820
|
+
"clock-4",
|
|
821
|
+
"clock-5",
|
|
822
|
+
"clock-6",
|
|
823
|
+
"clock-7",
|
|
824
|
+
"clock-8",
|
|
825
|
+
"clock-9",
|
|
826
|
+
"clock-alert",
|
|
827
|
+
"clock-arrow-down",
|
|
828
|
+
"clock-arrow-up",
|
|
829
|
+
"clock-check",
|
|
830
|
+
"clock-fading",
|
|
831
|
+
"clock-plus",
|
|
832
|
+
"clock",
|
|
833
|
+
"closed-caption",
|
|
834
|
+
"cloud-alert",
|
|
835
|
+
"cloud-backup",
|
|
836
|
+
"cloud-check",
|
|
837
|
+
"cloud-cog",
|
|
838
|
+
"cloud-download",
|
|
839
|
+
"download-cloud",
|
|
840
|
+
"cloud-drizzle",
|
|
841
|
+
"cloud-fog",
|
|
842
|
+
"cloud-hail",
|
|
843
|
+
"cloud-lightning",
|
|
844
|
+
"cloud-moon-rain",
|
|
845
|
+
"cloud-moon",
|
|
846
|
+
"cloud-off",
|
|
847
|
+
"cloud-rain-wind",
|
|
848
|
+
"cloud-rain",
|
|
849
|
+
"cloud-snow",
|
|
850
|
+
"cloud-sun-rain",
|
|
851
|
+
"cloud-sun",
|
|
852
|
+
"cloud-sync",
|
|
853
|
+
"cloud-upload",
|
|
854
|
+
"upload-cloud",
|
|
855
|
+
"cloud",
|
|
856
|
+
"cloudy",
|
|
857
|
+
"clover",
|
|
858
|
+
"club",
|
|
859
|
+
"code-xml",
|
|
860
|
+
"code-2",
|
|
861
|
+
"code",
|
|
862
|
+
"coffee",
|
|
863
|
+
"cog",
|
|
864
|
+
"coins",
|
|
865
|
+
"columns-2",
|
|
866
|
+
"columns",
|
|
867
|
+
"columns-3-cog",
|
|
868
|
+
"columns-settings",
|
|
869
|
+
"table-config",
|
|
870
|
+
"columns-3",
|
|
871
|
+
"panels-left-right",
|
|
872
|
+
"columns-4",
|
|
873
|
+
"combine",
|
|
874
|
+
"command",
|
|
875
|
+
"compass",
|
|
876
|
+
"component",
|
|
877
|
+
"computer",
|
|
878
|
+
"concierge-bell",
|
|
879
|
+
"cone",
|
|
880
|
+
"construction",
|
|
881
|
+
"contact-round",
|
|
882
|
+
"contact-2",
|
|
883
|
+
"contact",
|
|
884
|
+
"container",
|
|
885
|
+
"contrast",
|
|
886
|
+
"cookie",
|
|
887
|
+
"cooking-pot",
|
|
888
|
+
"copy-check",
|
|
889
|
+
"copy-minus",
|
|
890
|
+
"copy-plus",
|
|
891
|
+
"copy-slash",
|
|
892
|
+
"copy-x",
|
|
893
|
+
"copy",
|
|
894
|
+
"copyleft",
|
|
895
|
+
"copyright",
|
|
896
|
+
"corner-down-left",
|
|
897
|
+
"corner-down-right",
|
|
898
|
+
"corner-left-down",
|
|
899
|
+
"corner-left-up",
|
|
900
|
+
"corner-right-down",
|
|
901
|
+
"corner-right-up",
|
|
902
|
+
"corner-up-left",
|
|
903
|
+
"corner-up-right",
|
|
904
|
+
"cpu",
|
|
905
|
+
"creative-commons",
|
|
906
|
+
"credit-card",
|
|
907
|
+
"croissant",
|
|
908
|
+
"crop",
|
|
909
|
+
"cross",
|
|
910
|
+
"crosshair",
|
|
911
|
+
"crown",
|
|
912
|
+
"cuboid",
|
|
913
|
+
"cup-soda",
|
|
914
|
+
"currency",
|
|
915
|
+
"cylinder",
|
|
916
|
+
"dam",
|
|
917
|
+
"database-backup",
|
|
918
|
+
"database-search",
|
|
919
|
+
"database-zap",
|
|
920
|
+
"database",
|
|
921
|
+
"decimals-arrow-left",
|
|
922
|
+
"decimals-arrow-right",
|
|
923
|
+
"delete",
|
|
924
|
+
"dessert",
|
|
925
|
+
"diameter",
|
|
926
|
+
"diamond-minus",
|
|
927
|
+
"diamond-percent",
|
|
928
|
+
"percent-diamond",
|
|
929
|
+
"diamond-plus",
|
|
930
|
+
"diamond",
|
|
931
|
+
"dice-1",
|
|
932
|
+
"dice-2",
|
|
933
|
+
"dice-3",
|
|
934
|
+
"dice-4",
|
|
935
|
+
"dice-5",
|
|
936
|
+
"dice-6",
|
|
937
|
+
"dices",
|
|
938
|
+
"diff",
|
|
939
|
+
"disc-2",
|
|
940
|
+
"disc-3",
|
|
941
|
+
"disc-album",
|
|
942
|
+
"disc",
|
|
943
|
+
"divide",
|
|
944
|
+
"dna-off",
|
|
945
|
+
"dna",
|
|
946
|
+
"dock",
|
|
947
|
+
"dog",
|
|
948
|
+
"dollar-sign",
|
|
949
|
+
"donut",
|
|
950
|
+
"door-closed-locked",
|
|
951
|
+
"door-closed",
|
|
952
|
+
"door-open",
|
|
953
|
+
"dot",
|
|
954
|
+
"download",
|
|
955
|
+
"drafting-compass",
|
|
956
|
+
"drama",
|
|
957
|
+
"drill",
|
|
958
|
+
"drone",
|
|
959
|
+
"droplet-off",
|
|
960
|
+
"droplet",
|
|
961
|
+
"droplets",
|
|
962
|
+
"drum",
|
|
963
|
+
"drumstick",
|
|
964
|
+
"dumbbell",
|
|
965
|
+
"ear-off",
|
|
966
|
+
"ear",
|
|
967
|
+
"earth-lock",
|
|
968
|
+
"earth",
|
|
969
|
+
"globe-2",
|
|
970
|
+
"eclipse",
|
|
971
|
+
"egg-fried",
|
|
972
|
+
"egg-off",
|
|
973
|
+
"egg",
|
|
974
|
+
"ellipse",
|
|
975
|
+
"ellipsis-vertical",
|
|
976
|
+
"more-vertical",
|
|
977
|
+
"ellipsis",
|
|
978
|
+
"more-horizontal",
|
|
979
|
+
"equal-approximately",
|
|
980
|
+
"equal-not",
|
|
981
|
+
"equal",
|
|
982
|
+
"eraser",
|
|
983
|
+
"ethernet-port",
|
|
984
|
+
"euro",
|
|
985
|
+
"ev-charger",
|
|
986
|
+
"expand",
|
|
987
|
+
"external-link",
|
|
988
|
+
"eye-closed",
|
|
989
|
+
"eye-off",
|
|
990
|
+
"eye",
|
|
991
|
+
"factory",
|
|
992
|
+
"fan",
|
|
993
|
+
"fast-forward",
|
|
994
|
+
"feather",
|
|
995
|
+
"fence",
|
|
996
|
+
"ferris-wheel",
|
|
997
|
+
"file-archive",
|
|
998
|
+
"file-axis-3d",
|
|
999
|
+
"file-axis-3-d",
|
|
1000
|
+
"file-badge",
|
|
1001
|
+
"file-badge-2",
|
|
1002
|
+
"file-box",
|
|
1003
|
+
"file-braces-corner",
|
|
1004
|
+
"file-json-2",
|
|
1005
|
+
"file-braces",
|
|
1006
|
+
"file-json",
|
|
1007
|
+
"file-chart-column-increasing",
|
|
1008
|
+
"file-bar-chart",
|
|
1009
|
+
"file-chart-column",
|
|
1010
|
+
"file-bar-chart-2",
|
|
1011
|
+
"file-chart-line",
|
|
1012
|
+
"file-line-chart",
|
|
1013
|
+
"file-chart-pie",
|
|
1014
|
+
"file-pie-chart",
|
|
1015
|
+
"file-check-corner",
|
|
1016
|
+
"file-check-2",
|
|
1017
|
+
"file-check",
|
|
1018
|
+
"file-clock",
|
|
1019
|
+
"file-code-corner",
|
|
1020
|
+
"file-code-2",
|
|
1021
|
+
"file-code",
|
|
1022
|
+
"file-cog",
|
|
1023
|
+
"file-cog-2",
|
|
1024
|
+
"file-diff",
|
|
1025
|
+
"file-digit",
|
|
1026
|
+
"file-down",
|
|
1027
|
+
"file-exclamation-point",
|
|
1028
|
+
"file-warning",
|
|
1029
|
+
"file-headphone",
|
|
1030
|
+
"file-audio",
|
|
1031
|
+
"file-audio-2",
|
|
1032
|
+
"file-heart",
|
|
1033
|
+
"file-image",
|
|
1034
|
+
"file-input",
|
|
1035
|
+
"file-key",
|
|
1036
|
+
"file-key-2",
|
|
1037
|
+
"file-lock",
|
|
1038
|
+
"file-lock-2",
|
|
1039
|
+
"file-minus-corner",
|
|
1040
|
+
"file-minus-2",
|
|
1041
|
+
"file-minus",
|
|
1042
|
+
"file-music",
|
|
1043
|
+
"file-output",
|
|
1044
|
+
"file-pen-line",
|
|
1045
|
+
"file-signature",
|
|
1046
|
+
"file-pen",
|
|
1047
|
+
"file-edit",
|
|
1048
|
+
"file-play",
|
|
1049
|
+
"file-video",
|
|
1050
|
+
"file-plus-corner",
|
|
1051
|
+
"file-plus-2",
|
|
1052
|
+
"file-plus",
|
|
1053
|
+
"file-question-mark",
|
|
1054
|
+
"file-question",
|
|
1055
|
+
"file-scan",
|
|
1056
|
+
"file-search-corner",
|
|
1057
|
+
"file-search-2",
|
|
1058
|
+
"file-search",
|
|
1059
|
+
"file-signal",
|
|
1060
|
+
"file-volume-2",
|
|
1061
|
+
"file-sliders",
|
|
1062
|
+
"file-spreadsheet",
|
|
1063
|
+
"file-stack",
|
|
1064
|
+
"file-symlink",
|
|
1065
|
+
"file-terminal",
|
|
1066
|
+
"file-text",
|
|
1067
|
+
"file-type-corner",
|
|
1068
|
+
"file-type-2",
|
|
1069
|
+
"file-type",
|
|
1070
|
+
"file-up",
|
|
1071
|
+
"file-user",
|
|
1072
|
+
"file-video-camera",
|
|
1073
|
+
"file-video-2",
|
|
1074
|
+
"file-volume",
|
|
1075
|
+
"file-x-corner",
|
|
1076
|
+
"file-x-2",
|
|
1077
|
+
"file-x",
|
|
1078
|
+
"file",
|
|
1079
|
+
"files",
|
|
1080
|
+
"film",
|
|
1081
|
+
"fingerprint-pattern",
|
|
1082
|
+
"fingerprint",
|
|
1083
|
+
"fire-extinguisher",
|
|
1084
|
+
"fish-off",
|
|
1085
|
+
"fish-symbol",
|
|
1086
|
+
"fish",
|
|
1087
|
+
"fishing-hook",
|
|
1088
|
+
"fishing-rod",
|
|
1089
|
+
"flag-off",
|
|
1090
|
+
"flag-triangle-left",
|
|
1091
|
+
"flag-triangle-right",
|
|
1092
|
+
"flag",
|
|
1093
|
+
"flame-kindling",
|
|
1094
|
+
"flame",
|
|
1095
|
+
"flashlight-off",
|
|
1096
|
+
"flashlight",
|
|
1097
|
+
"flask-conical-off",
|
|
1098
|
+
"flask-conical",
|
|
1099
|
+
"flask-round",
|
|
1100
|
+
"flip-horizontal-2",
|
|
1101
|
+
"flip-vertical-2",
|
|
1102
|
+
"flower-2",
|
|
1103
|
+
"flower",
|
|
1104
|
+
"focus",
|
|
1105
|
+
"fold-horizontal",
|
|
1106
|
+
"fold-vertical",
|
|
1107
|
+
"folder-archive",
|
|
1108
|
+
"folder-check",
|
|
1109
|
+
"folder-clock",
|
|
1110
|
+
"folder-closed",
|
|
1111
|
+
"folder-code",
|
|
1112
|
+
"folder-cog",
|
|
1113
|
+
"folder-cog-2",
|
|
1114
|
+
"folder-dot",
|
|
1115
|
+
"folder-down",
|
|
1116
|
+
"folder-git-2",
|
|
1117
|
+
"folder-git",
|
|
1118
|
+
"folder-heart",
|
|
1119
|
+
"folder-input",
|
|
1120
|
+
"folder-kanban",
|
|
1121
|
+
"folder-key",
|
|
1122
|
+
"folder-lock",
|
|
1123
|
+
"folder-minus",
|
|
1124
|
+
"folder-open-dot",
|
|
1125
|
+
"folder-open",
|
|
1126
|
+
"folder-output",
|
|
1127
|
+
"folder-pen",
|
|
1128
|
+
"folder-edit",
|
|
1129
|
+
"folder-plus",
|
|
1130
|
+
"folder-root",
|
|
1131
|
+
"folder-search-2",
|
|
1132
|
+
"folder-search",
|
|
1133
|
+
"folder-symlink",
|
|
1134
|
+
"folder-sync",
|
|
1135
|
+
"folder-tree",
|
|
1136
|
+
"folder-up",
|
|
1137
|
+
"folder-x",
|
|
1138
|
+
"folder",
|
|
1139
|
+
"folders",
|
|
1140
|
+
"footprints",
|
|
1141
|
+
"forklift",
|
|
1142
|
+
"form",
|
|
1143
|
+
"forward",
|
|
1144
|
+
"frame",
|
|
1145
|
+
"frown",
|
|
1146
|
+
"fuel",
|
|
1147
|
+
"fullscreen",
|
|
1148
|
+
"funnel-plus",
|
|
1149
|
+
"funnel-x",
|
|
1150
|
+
"filter-x",
|
|
1151
|
+
"funnel",
|
|
1152
|
+
"filter",
|
|
1153
|
+
"gallery-horizontal-end",
|
|
1154
|
+
"gallery-horizontal",
|
|
1155
|
+
"gallery-thumbnails",
|
|
1156
|
+
"gallery-vertical-end",
|
|
1157
|
+
"gallery-vertical",
|
|
1158
|
+
"gamepad-2",
|
|
1159
|
+
"gamepad-directional",
|
|
1160
|
+
"gamepad",
|
|
1161
|
+
"gauge",
|
|
1162
|
+
"gavel",
|
|
1163
|
+
"gem",
|
|
1164
|
+
"georgian-lari",
|
|
1165
|
+
"ghost",
|
|
1166
|
+
"gift",
|
|
1167
|
+
"git-branch-minus",
|
|
1168
|
+
"git-branch-plus",
|
|
1169
|
+
"git-branch",
|
|
1170
|
+
"git-commit-horizontal",
|
|
1171
|
+
"git-commit",
|
|
1172
|
+
"git-commit-vertical",
|
|
1173
|
+
"git-compare-arrows",
|
|
1174
|
+
"git-compare",
|
|
1175
|
+
"git-fork",
|
|
1176
|
+
"git-graph",
|
|
1177
|
+
"git-merge-conflict",
|
|
1178
|
+
"git-merge",
|
|
1179
|
+
"git-pull-request-arrow",
|
|
1180
|
+
"git-pull-request-closed",
|
|
1181
|
+
"git-pull-request-create-arrow",
|
|
1182
|
+
"git-pull-request-create",
|
|
1183
|
+
"git-pull-request-draft",
|
|
1184
|
+
"git-pull-request",
|
|
1185
|
+
"glass-water",
|
|
1186
|
+
"glasses",
|
|
1187
|
+
"globe-lock",
|
|
1188
|
+
"globe-off",
|
|
1189
|
+
"globe-x",
|
|
1190
|
+
"globe",
|
|
1191
|
+
"goal",
|
|
1192
|
+
"gpu",
|
|
1193
|
+
"graduation-cap",
|
|
1194
|
+
"grape",
|
|
1195
|
+
"grid-2x2-check",
|
|
1196
|
+
"grid-2-x-2-check",
|
|
1197
|
+
"grid-2x2-plus",
|
|
1198
|
+
"grid-2-x-2-plus",
|
|
1199
|
+
"grid-2x2-x",
|
|
1200
|
+
"grid-2-x-2-x",
|
|
1201
|
+
"grid-2x2",
|
|
1202
|
+
"grid-2-x-2",
|
|
1203
|
+
"grid-3x2",
|
|
1204
|
+
"grid-3x3",
|
|
1205
|
+
"grid",
|
|
1206
|
+
"grid-3-x-3",
|
|
1207
|
+
"grip-horizontal",
|
|
1208
|
+
"grip-vertical",
|
|
1209
|
+
"grip",
|
|
1210
|
+
"group",
|
|
1211
|
+
"guitar",
|
|
1212
|
+
"ham",
|
|
1213
|
+
"hamburger",
|
|
1214
|
+
"hammer",
|
|
1215
|
+
"hand-coins",
|
|
1216
|
+
"hand-fist",
|
|
1217
|
+
"hand-grab",
|
|
1218
|
+
"grab",
|
|
1219
|
+
"hand-heart",
|
|
1220
|
+
"hand-helping",
|
|
1221
|
+
"helping-hand",
|
|
1222
|
+
"hand-metal",
|
|
1223
|
+
"hand-platter",
|
|
1224
|
+
"hand",
|
|
1225
|
+
"handbag",
|
|
1226
|
+
"handshake",
|
|
1227
|
+
"hard-drive-download",
|
|
1228
|
+
"hard-drive-upload",
|
|
1229
|
+
"hard-drive",
|
|
1230
|
+
"hard-hat",
|
|
1231
|
+
"hash",
|
|
1232
|
+
"hat-glasses",
|
|
1233
|
+
"haze",
|
|
1234
|
+
"hd",
|
|
1235
|
+
"hdmi-port",
|
|
1236
|
+
"heading-1",
|
|
1237
|
+
"heading-2",
|
|
1238
|
+
"heading-3",
|
|
1239
|
+
"heading-4",
|
|
1240
|
+
"heading-5",
|
|
1241
|
+
"heading-6",
|
|
1242
|
+
"heading",
|
|
1243
|
+
"headphone-off",
|
|
1244
|
+
"headphones",
|
|
1245
|
+
"headset",
|
|
1246
|
+
"heart-crack",
|
|
1247
|
+
"heart-handshake",
|
|
1248
|
+
"heart-minus",
|
|
1249
|
+
"heart-off",
|
|
1250
|
+
"heart-plus",
|
|
1251
|
+
"heart-pulse",
|
|
1252
|
+
"heart",
|
|
1253
|
+
"heater",
|
|
1254
|
+
"helicopter",
|
|
1255
|
+
"hexagon",
|
|
1256
|
+
"highlighter",
|
|
1257
|
+
"history",
|
|
1258
|
+
"hop-off",
|
|
1259
|
+
"hop",
|
|
1260
|
+
"hospital",
|
|
1261
|
+
"hotel",
|
|
1262
|
+
"hourglass",
|
|
1263
|
+
"house-heart",
|
|
1264
|
+
"house-plug",
|
|
1265
|
+
"house-plus",
|
|
1266
|
+
"house-wifi",
|
|
1267
|
+
"house",
|
|
1268
|
+
"home",
|
|
1269
|
+
"ice-cream-bowl",
|
|
1270
|
+
"ice-cream-2",
|
|
1271
|
+
"ice-cream-cone",
|
|
1272
|
+
"ice-cream",
|
|
1273
|
+
"id-card-lanyard",
|
|
1274
|
+
"id-card",
|
|
1275
|
+
"image-down",
|
|
1276
|
+
"image-minus",
|
|
1277
|
+
"image-off",
|
|
1278
|
+
"image-play",
|
|
1279
|
+
"image-plus",
|
|
1280
|
+
"image-up",
|
|
1281
|
+
"image-upscale",
|
|
1282
|
+
"image",
|
|
1283
|
+
"images",
|
|
1284
|
+
"import",
|
|
1285
|
+
"inbox",
|
|
1286
|
+
"indian-rupee",
|
|
1287
|
+
"infinity",
|
|
1288
|
+
"info",
|
|
1289
|
+
"inspection-panel",
|
|
1290
|
+
"italic",
|
|
1291
|
+
"iteration-ccw",
|
|
1292
|
+
"iteration-cw",
|
|
1293
|
+
"japanese-yen",
|
|
1294
|
+
"joystick",
|
|
1295
|
+
"kanban",
|
|
1296
|
+
"kayak",
|
|
1297
|
+
"key-round",
|
|
1298
|
+
"key-square",
|
|
1299
|
+
"key",
|
|
1300
|
+
"keyboard-music",
|
|
1301
|
+
"keyboard-off",
|
|
1302
|
+
"keyboard",
|
|
1303
|
+
"lamp-ceiling",
|
|
1304
|
+
"lamp-desk",
|
|
1305
|
+
"lamp-floor",
|
|
1306
|
+
"lamp-wall-down",
|
|
1307
|
+
"lamp-wall-up",
|
|
1308
|
+
"lamp",
|
|
1309
|
+
"land-plot",
|
|
1310
|
+
"landmark",
|
|
1311
|
+
"languages",
|
|
1312
|
+
"laptop-minimal-check",
|
|
1313
|
+
"laptop-minimal",
|
|
1314
|
+
"laptop-2",
|
|
1315
|
+
"laptop",
|
|
1316
|
+
"lasso-select",
|
|
1317
|
+
"lasso",
|
|
1318
|
+
"laugh",
|
|
1319
|
+
"layers-2",
|
|
1320
|
+
"layers-plus",
|
|
1321
|
+
"layers",
|
|
1322
|
+
"layers-3",
|
|
1323
|
+
"layout-dashboard",
|
|
1324
|
+
"layout-grid",
|
|
1325
|
+
"layout-list",
|
|
1326
|
+
"layout-panel-left",
|
|
1327
|
+
"layout-panel-top",
|
|
1328
|
+
"layout-template",
|
|
1329
|
+
"leaf",
|
|
1330
|
+
"leafy-green",
|
|
1331
|
+
"lectern",
|
|
1332
|
+
"lens-concave",
|
|
1333
|
+
"lens-convex",
|
|
1334
|
+
"library-big",
|
|
1335
|
+
"library",
|
|
1336
|
+
"life-buoy",
|
|
1337
|
+
"ligature",
|
|
1338
|
+
"lightbulb-off",
|
|
1339
|
+
"lightbulb",
|
|
1340
|
+
"line-dot-right-horizontal",
|
|
1341
|
+
"line-squiggle",
|
|
1342
|
+
"line-style",
|
|
1343
|
+
"link-2-off",
|
|
1344
|
+
"link-2",
|
|
1345
|
+
"link",
|
|
1346
|
+
"list-check",
|
|
1347
|
+
"list-checks",
|
|
1348
|
+
"list-chevrons-down-up",
|
|
1349
|
+
"list-chevrons-up-down",
|
|
1350
|
+
"list-collapse",
|
|
1351
|
+
"list-end",
|
|
1352
|
+
"list-filter-plus",
|
|
1353
|
+
"list-filter",
|
|
1354
|
+
"list-indent-decrease",
|
|
1355
|
+
"outdent",
|
|
1356
|
+
"indent-decrease",
|
|
1357
|
+
"list-indent-increase",
|
|
1358
|
+
"indent",
|
|
1359
|
+
"indent-increase",
|
|
1360
|
+
"list-minus",
|
|
1361
|
+
"list-music",
|
|
1362
|
+
"list-ordered",
|
|
1363
|
+
"list-plus",
|
|
1364
|
+
"list-restart",
|
|
1365
|
+
"list-start",
|
|
1366
|
+
"list-todo",
|
|
1367
|
+
"list-tree",
|
|
1368
|
+
"list-video",
|
|
1369
|
+
"list-x",
|
|
1370
|
+
"list",
|
|
1371
|
+
"loader-circle",
|
|
1372
|
+
"loader-2",
|
|
1373
|
+
"loader-pinwheel",
|
|
1374
|
+
"loader",
|
|
1375
|
+
"locate-fixed",
|
|
1376
|
+
"locate-off",
|
|
1377
|
+
"locate",
|
|
1378
|
+
"lock-keyhole-open",
|
|
1379
|
+
"unlock-keyhole",
|
|
1380
|
+
"lock-keyhole",
|
|
1381
|
+
"lock-open",
|
|
1382
|
+
"unlock",
|
|
1383
|
+
"lock",
|
|
1384
|
+
"log-in",
|
|
1385
|
+
"log-out",
|
|
1386
|
+
"logs",
|
|
1387
|
+
"lollipop",
|
|
1388
|
+
"luggage",
|
|
1389
|
+
"magnet",
|
|
1390
|
+
"mail-check",
|
|
1391
|
+
"mail-minus",
|
|
1392
|
+
"mail-open",
|
|
1393
|
+
"mail-plus",
|
|
1394
|
+
"mail-question-mark",
|
|
1395
|
+
"mail-question",
|
|
1396
|
+
"mail-search",
|
|
1397
|
+
"mail-warning",
|
|
1398
|
+
"mail-x",
|
|
1399
|
+
"mail",
|
|
1400
|
+
"mailbox",
|
|
1401
|
+
"mails",
|
|
1402
|
+
"map-minus",
|
|
1403
|
+
"map-pin-check-inside",
|
|
1404
|
+
"map-pin-check",
|
|
1405
|
+
"map-pin-house",
|
|
1406
|
+
"map-pin-minus-inside",
|
|
1407
|
+
"map-pin-minus",
|
|
1408
|
+
"map-pin-off",
|
|
1409
|
+
"map-pin-pen",
|
|
1410
|
+
"location-edit",
|
|
1411
|
+
"map-pin-plus-inside",
|
|
1412
|
+
"map-pin-plus",
|
|
1413
|
+
"map-pin-search",
|
|
1414
|
+
"map-pin-x-inside",
|
|
1415
|
+
"map-pin-x",
|
|
1416
|
+
"map-pin",
|
|
1417
|
+
"map-pinned",
|
|
1418
|
+
"map-plus",
|
|
1419
|
+
"map",
|
|
1420
|
+
"mars-stroke",
|
|
1421
|
+
"mars",
|
|
1422
|
+
"martini",
|
|
1423
|
+
"maximize-2",
|
|
1424
|
+
"maximize",
|
|
1425
|
+
"medal",
|
|
1426
|
+
"megaphone-off",
|
|
1427
|
+
"megaphone",
|
|
1428
|
+
"meh",
|
|
1429
|
+
"memory-stick",
|
|
1430
|
+
"menu",
|
|
1431
|
+
"merge",
|
|
1432
|
+
"message-circle-check",
|
|
1433
|
+
"message-circle-code",
|
|
1434
|
+
"message-circle-dashed",
|
|
1435
|
+
"message-circle-heart",
|
|
1436
|
+
"message-circle-more",
|
|
1437
|
+
"message-circle-off",
|
|
1438
|
+
"message-circle-plus",
|
|
1439
|
+
"message-circle-question-mark",
|
|
1440
|
+
"message-circle-question",
|
|
1441
|
+
"message-circle-reply",
|
|
1442
|
+
"message-circle-warning",
|
|
1443
|
+
"message-circle-x",
|
|
1444
|
+
"message-circle",
|
|
1445
|
+
"message-square-check",
|
|
1446
|
+
"message-square-code",
|
|
1447
|
+
"message-square-dashed",
|
|
1448
|
+
"message-square-diff",
|
|
1449
|
+
"message-square-dot",
|
|
1450
|
+
"message-square-heart",
|
|
1451
|
+
"message-square-lock",
|
|
1452
|
+
"message-square-more",
|
|
1453
|
+
"message-square-off",
|
|
1454
|
+
"message-square-plus",
|
|
1455
|
+
"message-square-quote",
|
|
1456
|
+
"message-square-reply",
|
|
1457
|
+
"message-square-share",
|
|
1458
|
+
"message-square-text",
|
|
1459
|
+
"message-square-warning",
|
|
1460
|
+
"message-square-x",
|
|
1461
|
+
"message-square",
|
|
1462
|
+
"messages-square",
|
|
1463
|
+
"metronome",
|
|
1464
|
+
"mic-off",
|
|
1465
|
+
"mic-vocal",
|
|
1466
|
+
"mic-2",
|
|
1467
|
+
"mic",
|
|
1468
|
+
"microchip",
|
|
1469
|
+
"microscope",
|
|
1470
|
+
"microwave",
|
|
1471
|
+
"milestone",
|
|
1472
|
+
"milk-off",
|
|
1473
|
+
"milk",
|
|
1474
|
+
"minimize-2",
|
|
1475
|
+
"minimize",
|
|
1476
|
+
"minus",
|
|
1477
|
+
"mirror-rectangular",
|
|
1478
|
+
"mirror-round",
|
|
1479
|
+
"monitor-check",
|
|
1480
|
+
"monitor-cloud",
|
|
1481
|
+
"monitor-cog",
|
|
1482
|
+
"monitor-dot",
|
|
1483
|
+
"monitor-down",
|
|
1484
|
+
"monitor-off",
|
|
1485
|
+
"monitor-pause",
|
|
1486
|
+
"monitor-play",
|
|
1487
|
+
"monitor-smartphone",
|
|
1488
|
+
"monitor-speaker",
|
|
1489
|
+
"monitor-stop",
|
|
1490
|
+
"monitor-up",
|
|
1491
|
+
"monitor-x",
|
|
1492
|
+
"monitor",
|
|
1493
|
+
"moon-star",
|
|
1494
|
+
"moon",
|
|
1495
|
+
"motorbike",
|
|
1496
|
+
"mountain-snow",
|
|
1497
|
+
"mountain",
|
|
1498
|
+
"mouse-left",
|
|
1499
|
+
"mouse-off",
|
|
1500
|
+
"mouse-pointer-2-off",
|
|
1501
|
+
"mouse-pointer-2",
|
|
1502
|
+
"mouse-pointer-ban",
|
|
1503
|
+
"mouse-pointer-click",
|
|
1504
|
+
"mouse-pointer",
|
|
1505
|
+
"mouse-right",
|
|
1506
|
+
"mouse",
|
|
1507
|
+
"move-3d",
|
|
1508
|
+
"move-3-d",
|
|
1509
|
+
"move-diagonal-2",
|
|
1510
|
+
"move-diagonal",
|
|
1511
|
+
"move-down-left",
|
|
1512
|
+
"move-down-right",
|
|
1513
|
+
"move-down",
|
|
1514
|
+
"move-horizontal",
|
|
1515
|
+
"move-left",
|
|
1516
|
+
"move-right",
|
|
1517
|
+
"move-up-left",
|
|
1518
|
+
"move-up-right",
|
|
1519
|
+
"move-up",
|
|
1520
|
+
"move-vertical",
|
|
1521
|
+
"move",
|
|
1522
|
+
"music-2",
|
|
1523
|
+
"music-3",
|
|
1524
|
+
"music-4",
|
|
1525
|
+
"music",
|
|
1526
|
+
"navigation-2-off",
|
|
1527
|
+
"navigation-2",
|
|
1528
|
+
"navigation-off",
|
|
1529
|
+
"navigation",
|
|
1530
|
+
"network",
|
|
1531
|
+
"newspaper",
|
|
1532
|
+
"nfc",
|
|
1533
|
+
"non-binary",
|
|
1534
|
+
"notebook-pen",
|
|
1535
|
+
"notebook-tabs",
|
|
1536
|
+
"notebook-text",
|
|
1537
|
+
"notebook",
|
|
1538
|
+
"notepad-text-dashed",
|
|
1539
|
+
"notepad-text",
|
|
1540
|
+
"nut-off",
|
|
1541
|
+
"nut",
|
|
1542
|
+
"octagon-alert",
|
|
1543
|
+
"alert-octagon",
|
|
1544
|
+
"octagon-minus",
|
|
1545
|
+
"octagon-pause",
|
|
1546
|
+
"pause-octagon",
|
|
1547
|
+
"octagon-x",
|
|
1548
|
+
"x-octagon",
|
|
1549
|
+
"octagon",
|
|
1550
|
+
"omega",
|
|
1551
|
+
"option",
|
|
1552
|
+
"orbit",
|
|
1553
|
+
"origami",
|
|
1554
|
+
"package-2",
|
|
1555
|
+
"package-check",
|
|
1556
|
+
"package-minus",
|
|
1557
|
+
"package-open",
|
|
1558
|
+
"package-plus",
|
|
1559
|
+
"package-search",
|
|
1560
|
+
"package-x",
|
|
1561
|
+
"package",
|
|
1562
|
+
"paint-bucket",
|
|
1563
|
+
"paint-roller",
|
|
1564
|
+
"paintbrush-vertical",
|
|
1565
|
+
"paintbrush-2",
|
|
1566
|
+
"paintbrush",
|
|
1567
|
+
"palette",
|
|
1568
|
+
"panda",
|
|
1569
|
+
"panel-bottom-close",
|
|
1570
|
+
"panel-bottom-dashed",
|
|
1571
|
+
"panel-bottom-inactive",
|
|
1572
|
+
"panel-bottom-open",
|
|
1573
|
+
"panel-bottom",
|
|
1574
|
+
"panel-left-close",
|
|
1575
|
+
"sidebar-close",
|
|
1576
|
+
"panel-left-dashed",
|
|
1577
|
+
"panel-left-inactive",
|
|
1578
|
+
"panel-left-open",
|
|
1579
|
+
"sidebar-open",
|
|
1580
|
+
"panel-left-right-dashed",
|
|
1581
|
+
"panel-left",
|
|
1582
|
+
"sidebar",
|
|
1583
|
+
"panel-right-close",
|
|
1584
|
+
"panel-right-dashed",
|
|
1585
|
+
"panel-right-inactive",
|
|
1586
|
+
"panel-right-open",
|
|
1587
|
+
"panel-right",
|
|
1588
|
+
"panel-top-bottom-dashed",
|
|
1589
|
+
"panel-top-close",
|
|
1590
|
+
"panel-top-dashed",
|
|
1591
|
+
"panel-top-inactive",
|
|
1592
|
+
"panel-top-open",
|
|
1593
|
+
"panel-top",
|
|
1594
|
+
"panels-left-bottom",
|
|
1595
|
+
"panels-right-bottom",
|
|
1596
|
+
"panels-top-left",
|
|
1597
|
+
"layout",
|
|
1598
|
+
"paperclip",
|
|
1599
|
+
"parentheses",
|
|
1600
|
+
"parking-meter",
|
|
1601
|
+
"party-popper",
|
|
1602
|
+
"pause",
|
|
1603
|
+
"paw-print",
|
|
1604
|
+
"pc-case",
|
|
1605
|
+
"pen-line",
|
|
1606
|
+
"edit-3",
|
|
1607
|
+
"pen-off",
|
|
1608
|
+
"pen-tool",
|
|
1609
|
+
"pen",
|
|
1610
|
+
"edit-2",
|
|
1611
|
+
"pencil-line",
|
|
1612
|
+
"pencil-off",
|
|
1613
|
+
"pencil-ruler",
|
|
1614
|
+
"pencil",
|
|
1615
|
+
"pentagon",
|
|
1616
|
+
"percent",
|
|
1617
|
+
"person-standing",
|
|
1618
|
+
"philippine-peso",
|
|
1619
|
+
"phone-call",
|
|
1620
|
+
"phone-forwarded",
|
|
1621
|
+
"phone-incoming",
|
|
1622
|
+
"phone-missed",
|
|
1623
|
+
"phone-off",
|
|
1624
|
+
"phone-outgoing",
|
|
1625
|
+
"phone",
|
|
1626
|
+
"pi",
|
|
1627
|
+
"piano",
|
|
1628
|
+
"pickaxe",
|
|
1629
|
+
"picture-in-picture-2",
|
|
1630
|
+
"picture-in-picture",
|
|
1631
|
+
"piggy-bank",
|
|
1632
|
+
"pilcrow-left",
|
|
1633
|
+
"pilcrow-right",
|
|
1634
|
+
"pilcrow",
|
|
1635
|
+
"pill-bottle",
|
|
1636
|
+
"pill",
|
|
1637
|
+
"pin-off",
|
|
1638
|
+
"pin",
|
|
1639
|
+
"pipette",
|
|
1640
|
+
"pizza",
|
|
1641
|
+
"plane-landing",
|
|
1642
|
+
"plane-takeoff",
|
|
1643
|
+
"plane",
|
|
1644
|
+
"play",
|
|
1645
|
+
"plug-2",
|
|
1646
|
+
"plug-zap",
|
|
1647
|
+
"plug-zap-2",
|
|
1648
|
+
"plug",
|
|
1649
|
+
"plus",
|
|
1650
|
+
"pocket-knife",
|
|
1651
|
+
"podcast",
|
|
1652
|
+
"pointer-off",
|
|
1653
|
+
"pointer",
|
|
1654
|
+
"popcorn",
|
|
1655
|
+
"popsicle",
|
|
1656
|
+
"pound-sterling",
|
|
1657
|
+
"power-off",
|
|
1658
|
+
"power",
|
|
1659
|
+
"presentation",
|
|
1660
|
+
"printer-check",
|
|
1661
|
+
"printer-x",
|
|
1662
|
+
"printer",
|
|
1663
|
+
"projector",
|
|
1664
|
+
"proportions",
|
|
1665
|
+
"puzzle",
|
|
1666
|
+
"pyramid",
|
|
1667
|
+
"qr-code",
|
|
1668
|
+
"quote",
|
|
1669
|
+
"rabbit",
|
|
1670
|
+
"radar",
|
|
1671
|
+
"radiation",
|
|
1672
|
+
"radical",
|
|
1673
|
+
"radio-off",
|
|
1674
|
+
"radio-receiver",
|
|
1675
|
+
"radio-tower",
|
|
1676
|
+
"radio",
|
|
1677
|
+
"radius",
|
|
1678
|
+
"rainbow",
|
|
1679
|
+
"rat",
|
|
1680
|
+
"ratio",
|
|
1681
|
+
"receipt-cent",
|
|
1682
|
+
"receipt-euro",
|
|
1683
|
+
"receipt-indian-rupee",
|
|
1684
|
+
"receipt-japanese-yen",
|
|
1685
|
+
"receipt-pound-sterling",
|
|
1686
|
+
"receipt-russian-ruble",
|
|
1687
|
+
"receipt-swiss-franc",
|
|
1688
|
+
"receipt-text",
|
|
1689
|
+
"receipt-turkish-lira",
|
|
1690
|
+
"receipt",
|
|
1691
|
+
"rectangle-circle",
|
|
1692
|
+
"rectangle-ellipsis",
|
|
1693
|
+
"form-input",
|
|
1694
|
+
"rectangle-goggles",
|
|
1695
|
+
"rectangle-horizontal",
|
|
1696
|
+
"rectangle-vertical",
|
|
1697
|
+
"recycle",
|
|
1698
|
+
"redo-2",
|
|
1699
|
+
"redo-dot",
|
|
1700
|
+
"redo",
|
|
1701
|
+
"refresh-ccw-dot",
|
|
1702
|
+
"refresh-ccw",
|
|
1703
|
+
"refresh-cw-off",
|
|
1704
|
+
"refresh-cw",
|
|
1705
|
+
"refrigerator",
|
|
1706
|
+
"regex",
|
|
1707
|
+
"remove-formatting",
|
|
1708
|
+
"repeat-1",
|
|
1709
|
+
"repeat-2",
|
|
1710
|
+
"repeat",
|
|
1711
|
+
"replace-all",
|
|
1712
|
+
"replace",
|
|
1713
|
+
"reply-all",
|
|
1714
|
+
"reply",
|
|
1715
|
+
"rewind",
|
|
1716
|
+
"ribbon",
|
|
1717
|
+
"road",
|
|
1718
|
+
"rocket",
|
|
1719
|
+
"rocking-chair",
|
|
1720
|
+
"roller-coaster",
|
|
1721
|
+
"rose",
|
|
1722
|
+
"rotate-3d",
|
|
1723
|
+
"rotate-3-d",
|
|
1724
|
+
"rotate-ccw-key",
|
|
1725
|
+
"rotate-ccw-square",
|
|
1726
|
+
"rotate-ccw",
|
|
1727
|
+
"rotate-cw-square",
|
|
1728
|
+
"rotate-cw",
|
|
1729
|
+
"route-off",
|
|
1730
|
+
"route",
|
|
1731
|
+
"router",
|
|
1732
|
+
"rows-2",
|
|
1733
|
+
"rows",
|
|
1734
|
+
"rows-3",
|
|
1735
|
+
"panels-top-bottom",
|
|
1736
|
+
"rows-4",
|
|
1737
|
+
"rss",
|
|
1738
|
+
"ruler-dimension-line",
|
|
1739
|
+
"ruler",
|
|
1740
|
+
"russian-ruble",
|
|
1741
|
+
"sailboat",
|
|
1742
|
+
"salad",
|
|
1743
|
+
"sandwich",
|
|
1744
|
+
"satellite-dish",
|
|
1745
|
+
"satellite",
|
|
1746
|
+
"saudi-riyal",
|
|
1747
|
+
"save-all",
|
|
1748
|
+
"save-off",
|
|
1749
|
+
"save",
|
|
1750
|
+
"scale-3d",
|
|
1751
|
+
"scale-3-d",
|
|
1752
|
+
"scale",
|
|
1753
|
+
"scaling",
|
|
1754
|
+
"scan-barcode",
|
|
1755
|
+
"scan-eye",
|
|
1756
|
+
"scan-face",
|
|
1757
|
+
"scan-heart",
|
|
1758
|
+
"scan-line",
|
|
1759
|
+
"scan-qr-code",
|
|
1760
|
+
"scan-search",
|
|
1761
|
+
"scan-text",
|
|
1762
|
+
"scan",
|
|
1763
|
+
"school",
|
|
1764
|
+
"scissors-line-dashed",
|
|
1765
|
+
"scissors",
|
|
1766
|
+
"scooter",
|
|
1767
|
+
"screen-share-off",
|
|
1768
|
+
"screen-share",
|
|
1769
|
+
"scroll-text",
|
|
1770
|
+
"scroll",
|
|
1771
|
+
"search-alert",
|
|
1772
|
+
"search-check",
|
|
1773
|
+
"search-code",
|
|
1774
|
+
"search-slash",
|
|
1775
|
+
"search-x",
|
|
1776
|
+
"search",
|
|
1777
|
+
"section",
|
|
1778
|
+
"send-horizontal",
|
|
1779
|
+
"send-horizonal",
|
|
1780
|
+
"send-to-back",
|
|
1781
|
+
"send",
|
|
1782
|
+
"separator-horizontal",
|
|
1783
|
+
"separator-vertical",
|
|
1784
|
+
"server-cog",
|
|
1785
|
+
"server-crash",
|
|
1786
|
+
"server-off",
|
|
1787
|
+
"server",
|
|
1788
|
+
"settings-2",
|
|
1789
|
+
"settings",
|
|
1790
|
+
"shapes",
|
|
1791
|
+
"share-2",
|
|
1792
|
+
"share",
|
|
1793
|
+
"sheet",
|
|
1794
|
+
"shell",
|
|
1795
|
+
"shelving-unit",
|
|
1796
|
+
"shield-alert",
|
|
1797
|
+
"shield-ban",
|
|
1798
|
+
"shield-check",
|
|
1799
|
+
"shield-cog-corner",
|
|
1800
|
+
"shield-cog",
|
|
1801
|
+
"shield-ellipsis",
|
|
1802
|
+
"shield-half",
|
|
1803
|
+
"shield-minus",
|
|
1804
|
+
"shield-off",
|
|
1805
|
+
"shield-plus",
|
|
1806
|
+
"shield-question-mark",
|
|
1807
|
+
"shield-question",
|
|
1808
|
+
"shield-user",
|
|
1809
|
+
"shield-x",
|
|
1810
|
+
"shield-close",
|
|
1811
|
+
"shield",
|
|
1812
|
+
"ship-wheel",
|
|
1813
|
+
"ship",
|
|
1814
|
+
"shirt",
|
|
1815
|
+
"shopping-bag",
|
|
1816
|
+
"shopping-basket",
|
|
1817
|
+
"shopping-cart",
|
|
1818
|
+
"shovel",
|
|
1819
|
+
"shower-head",
|
|
1820
|
+
"shredder",
|
|
1821
|
+
"shrimp",
|
|
1822
|
+
"shrink",
|
|
1823
|
+
"shrub",
|
|
1824
|
+
"shuffle",
|
|
1825
|
+
"sigma",
|
|
1826
|
+
"signal-high",
|
|
1827
|
+
"signal-low",
|
|
1828
|
+
"signal-medium",
|
|
1829
|
+
"signal-zero",
|
|
1830
|
+
"signal",
|
|
1831
|
+
"signature",
|
|
1832
|
+
"signpost-big",
|
|
1833
|
+
"signpost",
|
|
1834
|
+
"siren",
|
|
1835
|
+
"skip-back",
|
|
1836
|
+
"skip-forward",
|
|
1837
|
+
"skull",
|
|
1838
|
+
"slash",
|
|
1839
|
+
"slice",
|
|
1840
|
+
"sliders-horizontal",
|
|
1841
|
+
"sliders-vertical",
|
|
1842
|
+
"sliders",
|
|
1843
|
+
"smartphone-charging",
|
|
1844
|
+
"smartphone-nfc",
|
|
1845
|
+
"smartphone",
|
|
1846
|
+
"smile-plus",
|
|
1847
|
+
"smile",
|
|
1848
|
+
"snail",
|
|
1849
|
+
"snowflake",
|
|
1850
|
+
"soap-dispenser-droplet",
|
|
1851
|
+
"sofa",
|
|
1852
|
+
"solar-panel",
|
|
1853
|
+
"soup",
|
|
1854
|
+
"space",
|
|
1855
|
+
"spade",
|
|
1856
|
+
"sparkle",
|
|
1857
|
+
"sparkles",
|
|
1858
|
+
"stars",
|
|
1859
|
+
"speaker",
|
|
1860
|
+
"speech",
|
|
1861
|
+
"spell-check-2",
|
|
1862
|
+
"spell-check",
|
|
1863
|
+
"spline-pointer",
|
|
1864
|
+
"spline",
|
|
1865
|
+
"split",
|
|
1866
|
+
"spool",
|
|
1867
|
+
"sport-shoe",
|
|
1868
|
+
"spotlight",
|
|
1869
|
+
"spray-can",
|
|
1870
|
+
"sprout",
|
|
1871
|
+
"square-activity",
|
|
1872
|
+
"activity-square",
|
|
1873
|
+
"square-arrow-down-left",
|
|
1874
|
+
"arrow-down-left-square",
|
|
1875
|
+
"square-arrow-down-right",
|
|
1876
|
+
"arrow-down-right-square",
|
|
1877
|
+
"square-arrow-down",
|
|
1878
|
+
"arrow-down-square",
|
|
1879
|
+
"square-arrow-left",
|
|
1880
|
+
"arrow-left-square",
|
|
1881
|
+
"square-arrow-out-down-left",
|
|
1882
|
+
"arrow-down-left-from-square",
|
|
1883
|
+
"square-arrow-out-down-right",
|
|
1884
|
+
"arrow-down-right-from-square",
|
|
1885
|
+
"square-arrow-out-up-left",
|
|
1886
|
+
"arrow-up-left-from-square",
|
|
1887
|
+
"square-arrow-out-up-right",
|
|
1888
|
+
"arrow-up-right-from-square",
|
|
1889
|
+
"square-arrow-right-enter",
|
|
1890
|
+
"square-arrow-right-exit",
|
|
1891
|
+
"square-arrow-right",
|
|
1892
|
+
"arrow-right-square",
|
|
1893
|
+
"square-arrow-up-left",
|
|
1894
|
+
"arrow-up-left-square",
|
|
1895
|
+
"square-arrow-up-right",
|
|
1896
|
+
"arrow-up-right-square",
|
|
1897
|
+
"square-arrow-up",
|
|
1898
|
+
"arrow-up-square",
|
|
1899
|
+
"square-asterisk",
|
|
1900
|
+
"asterisk-square",
|
|
1901
|
+
"square-bottom-dashed-scissors",
|
|
1902
|
+
"scissors-square-dashed-bottom",
|
|
1903
|
+
"square-centerline-dashed-horizontal",
|
|
1904
|
+
"flip-horizontal",
|
|
1905
|
+
"square-centerline-dashed-vertical",
|
|
1906
|
+
"flip-vertical",
|
|
1907
|
+
"square-chart-gantt",
|
|
1908
|
+
"gantt-chart-square",
|
|
1909
|
+
"square-gantt-chart",
|
|
1910
|
+
"square-check-big",
|
|
1911
|
+
"check-square",
|
|
1912
|
+
"square-check",
|
|
1913
|
+
"check-square-2",
|
|
1914
|
+
"square-chevron-down",
|
|
1915
|
+
"chevron-down-square",
|
|
1916
|
+
"square-chevron-left",
|
|
1917
|
+
"chevron-left-square",
|
|
1918
|
+
"square-chevron-right",
|
|
1919
|
+
"chevron-right-square",
|
|
1920
|
+
"square-chevron-up",
|
|
1921
|
+
"chevron-up-square",
|
|
1922
|
+
"square-code",
|
|
1923
|
+
"code-square",
|
|
1924
|
+
"square-dashed-bottom-code",
|
|
1925
|
+
"square-dashed-bottom",
|
|
1926
|
+
"square-dashed-kanban",
|
|
1927
|
+
"kanban-square-dashed",
|
|
1928
|
+
"square-dashed-mouse-pointer",
|
|
1929
|
+
"mouse-pointer-square-dashed",
|
|
1930
|
+
"square-dashed-text",
|
|
1931
|
+
"text-selection",
|
|
1932
|
+
"text-select",
|
|
1933
|
+
"square-dashed-top-solid",
|
|
1934
|
+
"square-dashed",
|
|
1935
|
+
"box-select",
|
|
1936
|
+
"square-divide",
|
|
1937
|
+
"divide-square",
|
|
1938
|
+
"square-dot",
|
|
1939
|
+
"dot-square",
|
|
1940
|
+
"square-equal",
|
|
1941
|
+
"equal-square",
|
|
1942
|
+
"square-function",
|
|
1943
|
+
"function-square",
|
|
1944
|
+
"square-kanban",
|
|
1945
|
+
"kanban-square",
|
|
1946
|
+
"square-library",
|
|
1947
|
+
"library-square",
|
|
1948
|
+
"square-m",
|
|
1949
|
+
"m-square",
|
|
1950
|
+
"square-menu",
|
|
1951
|
+
"menu-square",
|
|
1952
|
+
"square-minus",
|
|
1953
|
+
"minus-square",
|
|
1954
|
+
"square-mouse-pointer",
|
|
1955
|
+
"inspect",
|
|
1956
|
+
"square-parking-off",
|
|
1957
|
+
"parking-square-off",
|
|
1958
|
+
"square-parking",
|
|
1959
|
+
"parking-square",
|
|
1960
|
+
"square-pause",
|
|
1961
|
+
"square-pen",
|
|
1962
|
+
"pen-box",
|
|
1963
|
+
"edit",
|
|
1964
|
+
"pen-square",
|
|
1965
|
+
"square-percent",
|
|
1966
|
+
"percent-square",
|
|
1967
|
+
"square-pi",
|
|
1968
|
+
"pi-square",
|
|
1969
|
+
"square-pilcrow",
|
|
1970
|
+
"pilcrow-square",
|
|
1971
|
+
"square-play",
|
|
1972
|
+
"play-square",
|
|
1973
|
+
"square-plus",
|
|
1974
|
+
"plus-square",
|
|
1975
|
+
"square-power",
|
|
1976
|
+
"power-square",
|
|
1977
|
+
"square-radical",
|
|
1978
|
+
"square-round-corner",
|
|
1979
|
+
"square-scissors",
|
|
1980
|
+
"scissors-square",
|
|
1981
|
+
"square-sigma",
|
|
1982
|
+
"sigma-square",
|
|
1983
|
+
"square-slash",
|
|
1984
|
+
"slash-square",
|
|
1985
|
+
"square-split-horizontal",
|
|
1986
|
+
"split-square-horizontal",
|
|
1987
|
+
"square-split-vertical",
|
|
1988
|
+
"split-square-vertical",
|
|
1989
|
+
"square-square",
|
|
1990
|
+
"square-stack",
|
|
1991
|
+
"square-star",
|
|
1992
|
+
"square-stop",
|
|
1993
|
+
"square-terminal",
|
|
1994
|
+
"terminal-square",
|
|
1995
|
+
"square-user-round",
|
|
1996
|
+
"user-square-2",
|
|
1997
|
+
"square-user",
|
|
1998
|
+
"user-square",
|
|
1999
|
+
"square-x",
|
|
2000
|
+
"x-square",
|
|
2001
|
+
"square",
|
|
2002
|
+
"squares-exclude",
|
|
2003
|
+
"squares-intersect",
|
|
2004
|
+
"squares-subtract",
|
|
2005
|
+
"squares-unite",
|
|
2006
|
+
"squircle-dashed",
|
|
2007
|
+
"squircle",
|
|
2008
|
+
"squirrel",
|
|
2009
|
+
"stamp",
|
|
2010
|
+
"star-half",
|
|
2011
|
+
"star-off",
|
|
2012
|
+
"star",
|
|
2013
|
+
"step-back",
|
|
2014
|
+
"step-forward",
|
|
2015
|
+
"stethoscope",
|
|
2016
|
+
"sticker",
|
|
2017
|
+
"sticky-note",
|
|
2018
|
+
"stone",
|
|
2019
|
+
"store",
|
|
2020
|
+
"stretch-horizontal",
|
|
2021
|
+
"stretch-vertical",
|
|
2022
|
+
"strikethrough",
|
|
2023
|
+
"subscript",
|
|
2024
|
+
"sun-dim",
|
|
2025
|
+
"sun-medium",
|
|
2026
|
+
"sun-moon",
|
|
2027
|
+
"sun-snow",
|
|
2028
|
+
"sun",
|
|
2029
|
+
"sunrise",
|
|
2030
|
+
"sunset",
|
|
2031
|
+
"superscript",
|
|
2032
|
+
"swatch-book",
|
|
2033
|
+
"swiss-franc",
|
|
2034
|
+
"switch-camera",
|
|
2035
|
+
"sword",
|
|
2036
|
+
"swords",
|
|
2037
|
+
"syringe",
|
|
2038
|
+
"table-2",
|
|
2039
|
+
"table-cells-merge",
|
|
2040
|
+
"table-cells-split",
|
|
2041
|
+
"table-columns-split",
|
|
2042
|
+
"table-of-contents",
|
|
2043
|
+
"table-properties",
|
|
2044
|
+
"table-rows-split",
|
|
2045
|
+
"table",
|
|
2046
|
+
"tablet-smartphone",
|
|
2047
|
+
"tablet",
|
|
2048
|
+
"tablets",
|
|
2049
|
+
"tag",
|
|
2050
|
+
"tags",
|
|
2051
|
+
"tally-1",
|
|
2052
|
+
"tally-2",
|
|
2053
|
+
"tally-3",
|
|
2054
|
+
"tally-4",
|
|
2055
|
+
"tally-5",
|
|
2056
|
+
"tangent",
|
|
2057
|
+
"target",
|
|
2058
|
+
"telescope",
|
|
2059
|
+
"tent-tree",
|
|
2060
|
+
"tent",
|
|
2061
|
+
"terminal",
|
|
2062
|
+
"test-tube-diagonal",
|
|
2063
|
+
"test-tube-2",
|
|
2064
|
+
"test-tube",
|
|
2065
|
+
"test-tubes",
|
|
2066
|
+
"text-align-center",
|
|
2067
|
+
"align-center",
|
|
2068
|
+
"text-align-end",
|
|
2069
|
+
"align-right",
|
|
2070
|
+
"text-align-justify",
|
|
2071
|
+
"align-justify",
|
|
2072
|
+
"text-align-start",
|
|
2073
|
+
"text",
|
|
2074
|
+
"align-left",
|
|
2075
|
+
"text-cursor-input",
|
|
2076
|
+
"text-cursor",
|
|
2077
|
+
"text-initial",
|
|
2078
|
+
"letter-text",
|
|
2079
|
+
"text-quote",
|
|
2080
|
+
"text-search",
|
|
2081
|
+
"text-wrap",
|
|
2082
|
+
"wrap-text",
|
|
2083
|
+
"theater",
|
|
2084
|
+
"thermometer-snowflake",
|
|
2085
|
+
"thermometer-sun",
|
|
2086
|
+
"thermometer",
|
|
2087
|
+
"thumbs-down",
|
|
2088
|
+
"thumbs-up",
|
|
2089
|
+
"ticket-check",
|
|
2090
|
+
"ticket-minus",
|
|
2091
|
+
"ticket-percent",
|
|
2092
|
+
"ticket-plus",
|
|
2093
|
+
"ticket-slash",
|
|
2094
|
+
"ticket-x",
|
|
2095
|
+
"ticket",
|
|
2096
|
+
"tickets-plane",
|
|
2097
|
+
"tickets",
|
|
2098
|
+
"timer-off",
|
|
2099
|
+
"timer-reset",
|
|
2100
|
+
"timer",
|
|
2101
|
+
"toggle-left",
|
|
2102
|
+
"toggle-right",
|
|
2103
|
+
"toilet",
|
|
2104
|
+
"tool-case",
|
|
2105
|
+
"toolbox",
|
|
2106
|
+
"tornado",
|
|
2107
|
+
"torus",
|
|
2108
|
+
"touchpad-off",
|
|
2109
|
+
"touchpad",
|
|
2110
|
+
"towel-rack",
|
|
2111
|
+
"tower-control",
|
|
2112
|
+
"toy-brick",
|
|
2113
|
+
"tractor",
|
|
2114
|
+
"traffic-cone",
|
|
2115
|
+
"train-front-tunnel",
|
|
2116
|
+
"train-front",
|
|
2117
|
+
"train-track",
|
|
2118
|
+
"tram-front",
|
|
2119
|
+
"train",
|
|
2120
|
+
"transgender",
|
|
2121
|
+
"trash-2",
|
|
2122
|
+
"trash",
|
|
2123
|
+
"tree-deciduous",
|
|
2124
|
+
"tree-palm",
|
|
2125
|
+
"palmtree",
|
|
2126
|
+
"tree-pine",
|
|
2127
|
+
"trees",
|
|
2128
|
+
"trending-down",
|
|
2129
|
+
"trending-up-down",
|
|
2130
|
+
"trending-up",
|
|
2131
|
+
"triangle-alert",
|
|
2132
|
+
"alert-triangle",
|
|
2133
|
+
"triangle-dashed",
|
|
2134
|
+
"triangle-right",
|
|
2135
|
+
"triangle",
|
|
2136
|
+
"trophy",
|
|
2137
|
+
"truck-electric",
|
|
2138
|
+
"truck",
|
|
2139
|
+
"turkish-lira",
|
|
2140
|
+
"turntable",
|
|
2141
|
+
"turtle",
|
|
2142
|
+
"tv-minimal-play",
|
|
2143
|
+
"tv-minimal",
|
|
2144
|
+
"tv-2",
|
|
2145
|
+
"tv",
|
|
2146
|
+
"type-outline",
|
|
2147
|
+
"type",
|
|
2148
|
+
"umbrella-off",
|
|
2149
|
+
"umbrella",
|
|
2150
|
+
"underline",
|
|
2151
|
+
"undo-2",
|
|
2152
|
+
"undo-dot",
|
|
2153
|
+
"undo",
|
|
2154
|
+
"unfold-horizontal",
|
|
2155
|
+
"unfold-vertical",
|
|
2156
|
+
"ungroup",
|
|
2157
|
+
"university",
|
|
2158
|
+
"school-2",
|
|
2159
|
+
"unlink-2",
|
|
2160
|
+
"unlink",
|
|
2161
|
+
"unplug",
|
|
2162
|
+
"upload",
|
|
2163
|
+
"usb",
|
|
2164
|
+
"user-check",
|
|
2165
|
+
"user-cog",
|
|
2166
|
+
"user-key",
|
|
2167
|
+
"user-lock",
|
|
2168
|
+
"user-minus",
|
|
2169
|
+
"user-pen",
|
|
2170
|
+
"user-plus",
|
|
2171
|
+
"user-round-check",
|
|
2172
|
+
"user-check-2",
|
|
2173
|
+
"user-round-cog",
|
|
2174
|
+
"user-cog-2",
|
|
2175
|
+
"user-round-key",
|
|
2176
|
+
"user-round-minus",
|
|
2177
|
+
"user-minus-2",
|
|
2178
|
+
"user-round-pen",
|
|
2179
|
+
"user-round-plus",
|
|
2180
|
+
"user-plus-2",
|
|
2181
|
+
"user-round-search",
|
|
2182
|
+
"user-round-x",
|
|
2183
|
+
"user-x-2",
|
|
2184
|
+
"user-round",
|
|
2185
|
+
"user-2",
|
|
2186
|
+
"user-search",
|
|
2187
|
+
"user-star",
|
|
2188
|
+
"user-x",
|
|
2189
|
+
"user",
|
|
2190
|
+
"users-round",
|
|
2191
|
+
"users-2",
|
|
2192
|
+
"users",
|
|
2193
|
+
"utensils-crossed",
|
|
2194
|
+
"fork-knife-crossed",
|
|
2195
|
+
"utensils",
|
|
2196
|
+
"fork-knife",
|
|
2197
|
+
"utility-pole",
|
|
2198
|
+
"van",
|
|
2199
|
+
"variable",
|
|
2200
|
+
"vault",
|
|
2201
|
+
"vector-square",
|
|
2202
|
+
"vegan",
|
|
2203
|
+
"venetian-mask",
|
|
2204
|
+
"venus-and-mars",
|
|
2205
|
+
"venus",
|
|
2206
|
+
"vibrate-off",
|
|
2207
|
+
"vibrate",
|
|
2208
|
+
"video-off",
|
|
2209
|
+
"video",
|
|
2210
|
+
"videotape",
|
|
2211
|
+
"view",
|
|
2212
|
+
"voicemail",
|
|
2213
|
+
"volleyball",
|
|
2214
|
+
"volume-1",
|
|
2215
|
+
"volume-2",
|
|
2216
|
+
"volume-off",
|
|
2217
|
+
"volume-x",
|
|
2218
|
+
"volume",
|
|
2219
|
+
"vote",
|
|
2220
|
+
"wallet-cards",
|
|
2221
|
+
"wallet-minimal",
|
|
2222
|
+
"wallet-2",
|
|
2223
|
+
"wallet",
|
|
2224
|
+
"wallpaper",
|
|
2225
|
+
"wand-sparkles",
|
|
2226
|
+
"wand-2",
|
|
2227
|
+
"wand",
|
|
2228
|
+
"warehouse",
|
|
2229
|
+
"washing-machine",
|
|
2230
|
+
"watch",
|
|
2231
|
+
"waves-arrow-down",
|
|
2232
|
+
"waves-arrow-up",
|
|
2233
|
+
"waves-ladder",
|
|
2234
|
+
"waves",
|
|
2235
|
+
"waypoints",
|
|
2236
|
+
"webcam",
|
|
2237
|
+
"webhook-off",
|
|
2238
|
+
"webhook",
|
|
2239
|
+
"weight-tilde",
|
|
2240
|
+
"weight",
|
|
2241
|
+
"wheat-off",
|
|
2242
|
+
"wheat",
|
|
2243
|
+
"whole-word",
|
|
2244
|
+
"wifi-cog",
|
|
2245
|
+
"wifi-high",
|
|
2246
|
+
"wifi-low",
|
|
2247
|
+
"wifi-off",
|
|
2248
|
+
"wifi-pen",
|
|
2249
|
+
"wifi-sync",
|
|
2250
|
+
"wifi-zero",
|
|
2251
|
+
"wifi",
|
|
2252
|
+
"wind-arrow-down",
|
|
2253
|
+
"wind",
|
|
2254
|
+
"wine-off",
|
|
2255
|
+
"wine",
|
|
2256
|
+
"workflow",
|
|
2257
|
+
"worm",
|
|
2258
|
+
"wrench",
|
|
2259
|
+
"x-line-top",
|
|
2260
|
+
"x",
|
|
2261
|
+
"zap-off",
|
|
2262
|
+
"zap",
|
|
2263
|
+
"zodiac-aquarius",
|
|
2264
|
+
"zodiac-aries",
|
|
2265
|
+
"zodiac-cancer",
|
|
2266
|
+
"zodiac-capricorn",
|
|
2267
|
+
"zodiac-gemini",
|
|
2268
|
+
"zodiac-leo",
|
|
2269
|
+
"zodiac-libra",
|
|
2270
|
+
"zodiac-ophiuchus",
|
|
2271
|
+
"zodiac-pisces",
|
|
2272
|
+
"zodiac-sagittarius",
|
|
2273
|
+
"zodiac-scorpio",
|
|
2274
|
+
"zodiac-taurus",
|
|
2275
|
+
"zodiac-virgo",
|
|
2276
|
+
"zoom-in",
|
|
2277
|
+
"zoom-out"
|
|
2278
|
+
]);
|
|
2279
|
+
var LAYOUT_SECTION_ICON_SET = new Set(LAYOUT_SECTION_ICONS);
|
|
2280
|
+
|
|
2281
|
+
// src/tools.ts
|
|
318
2282
|
var FRAMEWORK_CHOICES = ["astro", "next", "react-ts", "other"];
|
|
319
2283
|
var FRAMEWORK_LABELS = {
|
|
320
2284
|
astro: "Astro \u2014 recommended default, static by default and fastest to publish",
|
|
@@ -381,7 +2345,22 @@ var fieldType = z.enum([
|
|
|
381
2345
|
// `config` verbatim — which is what the warning above demands before adding a type here.
|
|
382
2346
|
// `modular` needs config.blockSlugs; `location` takes no config.
|
|
383
2347
|
"modular",
|
|
384
|
-
"location"
|
|
2348
|
+
"location",
|
|
2349
|
+
// All LEAF types, so the pass-through branch above covers them. `document` is THE article
|
|
2350
|
+
// body — the rich document canvas, collections only, at most one per model, top level
|
|
2351
|
+
// only. It was the conspicuous omission: the dashboard shipped an editor for it while no
|
|
2352
|
+
// agent could create the field. `sections` is a page-section zone composed in the Visual
|
|
2353
|
+
// Editor, so it has no inline control.
|
|
2354
|
+
"document",
|
|
2355
|
+
"longtext",
|
|
2356
|
+
"slug",
|
|
2357
|
+
"email",
|
|
2358
|
+
"phone",
|
|
2359
|
+
"link",
|
|
2360
|
+
"color",
|
|
2361
|
+
"json",
|
|
2362
|
+
"file",
|
|
2363
|
+
"sections"
|
|
385
2364
|
]);
|
|
386
2365
|
var slug = z.string().regex(/^[a-z0-9-]+$/, "lowercase letters, numbers, and hyphens only");
|
|
387
2366
|
var fieldKey = z.string().regex(/^[a-zA-Z0-9_]+$/, "letters, numbers, and underscores only");
|
|
@@ -493,12 +2472,42 @@ function buildToolDefs(deps) {
|
|
|
493
2472
|
}
|
|
494
2473
|
};
|
|
495
2474
|
}
|
|
2475
|
+
const blockObject = z.object({
|
|
2476
|
+
type: z.enum([
|
|
2477
|
+
"heading",
|
|
2478
|
+
"text",
|
|
2479
|
+
"richtext",
|
|
2480
|
+
"image",
|
|
2481
|
+
"button",
|
|
2482
|
+
"spacer",
|
|
2483
|
+
"video",
|
|
2484
|
+
"columns",
|
|
2485
|
+
"section",
|
|
2486
|
+
"slider",
|
|
2487
|
+
"tabs",
|
|
2488
|
+
"navbar",
|
|
2489
|
+
"footer",
|
|
2490
|
+
"form",
|
|
2491
|
+
"component",
|
|
2492
|
+
"collection"
|
|
2493
|
+
]).describe("block type; section/slider/tabs/columns nest child blocks"),
|
|
2494
|
+
id: z.string().min(1).describe("stable unique block id"),
|
|
2495
|
+
props: z.record(z.string(), z.unknown()).describe(
|
|
2496
|
+
"per-type props: heading {text, level}; text/richtext {html} (NOT {text}); image {src, alt}; button {text, href}; spacer {height}; video {url}; form {formId}; component {componentId, overrides?}; navbar {links:[{label,href}], logo?, cta?}; footer {columns, copyright?}; section {children: block[]}; columns {columns: block[][], gap} \u2014 a column may NOT hold columns/section/slider/tabs; slider {slides:[{id,children}]}; tabs {tabs:[{id,label,children}]}; collection {cardComponentId?, detailComponentId?, titleField?, excerptField?, limit?, order?, emptyText?} \u2014 lists this page's published entries as cards, and renders ONE entry on /<page>/<entrySlug>"
|
|
2497
|
+
),
|
|
2498
|
+
style: z.record(z.string(), z.unknown()).optional().describe(
|
|
2499
|
+
"design tokens: theme, bg (none|surface|muted|accent|dark|custom), bgCustom hex, paddingTop/paddingBottom/paddingSides px, contentWidth (narrow|default|wide|full), align, corner, shadow, borderTop/borderBottom. A real marketing band is a `section` block carrying bg + padding + contentWidth."
|
|
2500
|
+
)
|
|
2501
|
+
});
|
|
496
2502
|
const createPageInput = z.object({
|
|
497
2503
|
title: z.string().min(1).describe("display title of the page, e.g. 'Home'"),
|
|
498
2504
|
slug: slug.describe("URL-safe path segment, unique per project, e.g. 'home'"),
|
|
499
2505
|
pageType: z.enum(["singleton", "dynamic"]).default("singleton").describe(
|
|
500
2506
|
"'singleton' = exactly one entry (Home, About, Contact); 'dynamic' = many entries sharing this schema (Blog posts, Products). Defaults to singleton."
|
|
501
2507
|
),
|
|
2508
|
+
blockJson: z.array(blockObject).optional().describe(
|
|
2509
|
+
"the page's VISUAL composition \u2014 how a components-first page is built. Place one `component` block per section: {type:'component', id:'<stable>', props:{componentId:'<id from create_component>'}}. The component must be PUBLISHED (publish_component) or it renders as nothing on the live site. Independent of `fields`, which is a typed schema for a site's own code to read."
|
|
2510
|
+
),
|
|
502
2511
|
fields: z.array(fieldObject).optional().describe("the page's typed schema fields"),
|
|
503
2512
|
metaTitle: z.string().optional().describe("SEO meta title"),
|
|
504
2513
|
metaDescription: z.string().optional().describe("SEO meta description")
|
|
@@ -629,20 +2638,53 @@ function buildToolDefs(deps) {
|
|
|
629
2638
|
fields: z.array(formFieldObject).optional().describe("REPLACES the field array \u2014 include all fields to keep"),
|
|
630
2639
|
...formSettingsShape
|
|
631
2640
|
});
|
|
632
|
-
const blockObject = z.object({
|
|
633
|
-
type: z.enum(["heading", "text", "image", "button", "spacer", "video", "columns"]).describe("block type; 'columns' nests child blocks in props.columns"),
|
|
634
|
-
id: z.string().min(1).describe("stable unique block id"),
|
|
635
|
-
props: z.record(z.string(), z.unknown()).describe(
|
|
636
|
-
"per-type props: heading {text, level}; text {text}; image {src, alt}; button {text, href}; spacer {height}; video {url}; columns {columns: block[][], gap}"
|
|
637
|
-
)
|
|
638
|
-
});
|
|
639
2641
|
const componentPropObject = z.object({
|
|
640
2642
|
key: z.string().min(1),
|
|
641
2643
|
label: z.string().min(1),
|
|
642
2644
|
target: z.object({ blockId: z.string().min(1), path: z.string().min(1) }),
|
|
643
|
-
type: z.enum(["text", "richtext", "image", "url", "boolean"]),
|
|
2645
|
+
type: z.enum(["text", "richtext", "image", "url", "boolean", "slot"]),
|
|
2646
|
+
// 'slot' holds ONE nested component instance; config.componentIds restricts what may
|
|
2647
|
+
// fill it. Absent here until now, so a slot allowlist was unreachable from stdio even
|
|
2648
|
+
// once the enum allowed the type.
|
|
2649
|
+
config: z.object({ componentIds: z.array(z.string()).optional() }).optional(),
|
|
644
2650
|
defaultValue: z.unknown().optional()
|
|
645
2651
|
});
|
|
2652
|
+
const getLayoutInput = z.object({
|
|
2653
|
+
scope: z.enum(["global", "page"]).default("global"),
|
|
2654
|
+
pageId: z.string().min(1).optional().describe("page id or slug; required for page scope"),
|
|
2655
|
+
projectId: z.string().min(1).optional().describe("required only for a workspace-scoped grant")
|
|
2656
|
+
});
|
|
2657
|
+
const layoutBinding = z.object({ inputId: z.string().min(1), fieldId: z.string().min(1) });
|
|
2658
|
+
const layoutIcon = z.string().min(1).max(80).regex(/^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[A-Z][A-Za-z0-9]+)$/).refine((value) => LAYOUT_SECTION_ICON_SET.has(value), "Select a supported Lucide icon").describe("Lucide icon name in canonical kebab-case; legacy CamelCase Layout icon names remain accepted");
|
|
2659
|
+
const sectionTarget = { sectionId: z.string().min(1) };
|
|
2660
|
+
const layoutCommand = z.discriminatedUnion("type", [
|
|
2661
|
+
z.object({ type: z.literal("set-section-values"), ...sectionTarget, values: z.record(z.string(), z.unknown()) }),
|
|
2662
|
+
z.object({ type: z.literal("set-field-value"), ...sectionTarget, fieldId: z.string().min(1), value: z.unknown() }),
|
|
2663
|
+
z.object({ type: z.literal("add-component"), ...sectionTarget, componentId: z.string().min(1), variantGroupId: z.string().min(1).optional(), bindings: z.array(layoutBinding).optional(), literalValues: z.record(z.string(), z.unknown()).optional() }),
|
|
2664
|
+
z.object({ type: z.literal("remove-item"), ...sectionTarget, itemId: z.string().min(1) }),
|
|
2665
|
+
z.object({ type: z.literal("move-component"), ...sectionTarget, itemId: z.string().min(1), index: z.number().int().nonnegative() }),
|
|
2666
|
+
z.object({ type: z.literal("move-item"), ...sectionTarget, itemId: z.string().min(1), index: z.number().int().nonnegative() }),
|
|
2667
|
+
z.object({ type: z.literal("swap-component-variant"), ...sectionTarget, itemId: z.string().min(1), componentId: z.string().min(1) }),
|
|
2668
|
+
z.object({ type: z.literal("set-page-state"), ...sectionTarget, state: z.enum(["inherit", "override-content", "customize-structure", "disable", "reset"]) }),
|
|
2669
|
+
z.object({ type: z.literal("set-section-state"), ...sectionTarget, state: z.enum(["inherit", "override-content", "customize-structure", "disable", "reset"]) }),
|
|
2670
|
+
z.object({ type: z.literal("add-section"), name: z.string().min(1), icon: layoutIcon, zone: z.enum(["before_page", "after_page"]) }),
|
|
2671
|
+
z.object({ type: z.literal("restore-section"), section: z.object({ id: z.string().min(1) }).passthrough(), data: z.object({ fields: z.record(z.string(), z.unknown()) }), placement: z.object({ zone: z.enum(["above-page-content", "below-page-content"]), localOrderKey: z.string().min(1), afterSectionId: z.string().optional(), beforeSectionId: z.string().optional() }).optional() }),
|
|
2672
|
+
z.object({ type: z.literal("update-section"), ...sectionTarget, name: z.string().min(1).optional(), icon: layoutIcon.optional(), slug: z.string().min(1).optional(), zone: z.enum(["above-page-content", "below-page-content"]).optional(), orderKey: z.string().min(1).optional() }),
|
|
2673
|
+
z.object({ type: z.literal("remove-section"), ...sectionTarget }),
|
|
2674
|
+
z.object({ type: z.literal("move-section"), ...sectionTarget, afterId: z.string().nullable().optional(), beforeId: z.string().nullable().optional() }),
|
|
2675
|
+
z.object({ type: z.literal("add-field"), ...sectionTarget, parentFieldId: z.string().optional(), fieldType: z.enum(["text", "longtext", "richtext", "number", "toggle", "date", "image", "file", "link", "email", "phone", "select", "color", "json", "reference", "multi-reference", "group", "repeater"]).optional(), field: z.object({ id: z.string(), slug: z.string(), label: z.string(), type: z.string() }).passthrough().optional() }),
|
|
2676
|
+
z.object({ type: z.literal("update-field"), ...sectionTarget, fieldId: z.string().min(1), patch: z.object({}).passthrough() }),
|
|
2677
|
+
z.object({ type: z.literal("remove-field"), ...sectionTarget, fieldId: z.string().min(1) }),
|
|
2678
|
+
z.object({ type: z.literal("move-field"), ...sectionTarget, itemId: z.string().min(1), index: z.number().int().nonnegative() }),
|
|
2679
|
+
z.object({ type: z.literal("set-bindings"), ...sectionTarget, itemId: z.string().min(1), bindings: z.array(layoutBinding), literalValues: z.record(z.string(), z.unknown()).optional() })
|
|
2680
|
+
]);
|
|
2681
|
+
const commandLayoutInput = z.object({
|
|
2682
|
+
scope: z.enum(["global", "page"]).default("global"),
|
|
2683
|
+
pageId: z.string().min(1).optional(),
|
|
2684
|
+
projectId: z.string().min(1).optional().describe("required only for a workspace-scoped grant"),
|
|
2685
|
+
command: layoutCommand.describe("one canonical discriminated Layout command; authority is derived from type"),
|
|
2686
|
+
ifMatch: z.number().int().nonnegative().describe("revision returned by get_layout")
|
|
2687
|
+
});
|
|
646
2688
|
const componentCategory = z.enum([
|
|
647
2689
|
"navbar",
|
|
648
2690
|
"footer",
|
|
@@ -988,10 +3030,10 @@ function buildToolDefs(deps) {
|
|
|
988
3030
|
// ── Pages (metadata edit; parity with remote /mcp) ──
|
|
989
3031
|
def(
|
|
990
3032
|
"update_page",
|
|
991
|
-
"Edit a page
|
|
992
|
-
"Edit a page
|
|
993
|
-
z.object({ pageId: z.string().min(1), title: z.string().optional(), slug: z.string().optional(), metaTitle: z.string().optional(), metaDescription: z.string().optional(), status: z.enum(["draft", "published"]).optional() }).shape,
|
|
994
|
-
async (c, a) => ok("Updated page.", await data(c, "PATCH", `/management/pages/${s(a.pageId)}/meta`, { title: a.title, slug: a.slug, metaTitle: a.metaTitle, metaDescription: a.metaDescription, status: a.status }))
|
|
3033
|
+
"Edit a page",
|
|
3034
|
+
"Edit a page: title, slug, SEO metaTitle/metaDescription, publish status (draft|published), and `blockJson` (its block composition \u2014 passing it REPLACES the whole array, so read get_page first). It does NOT change the field SCHEMA \u2014 use add_page_field / set_page_content for that. Renaming the slug keeps content intact. Publishing copies the draft blocks live in the same call.",
|
|
3035
|
+
z.object({ pageId: z.string().min(1), title: z.string().optional(), slug: z.string().optional(), blockJson: z.array(blockObject).optional().describe("REPLACES the page's block composition"), metaTitle: z.string().optional(), metaDescription: z.string().optional(), status: z.enum(["draft", "published"]).optional() }).shape,
|
|
3036
|
+
async (c, a) => ok("Updated page.", await data(c, "PATCH", `/management/pages/${s(a.pageId)}/meta`, { title: a.title, slug: a.slug, blockJson: a.blockJson, metaTitle: a.metaTitle, metaDescription: a.metaDescription, status: a.status }))
|
|
995
3037
|
),
|
|
996
3038
|
// ── Code + deploy (parity with remote /mcp; needs artifact:write) ──
|
|
997
3039
|
def(
|
|
@@ -1177,6 +3219,7 @@ function buildToolDefs(deps) {
|
|
|
1177
3219
|
title: args.title,
|
|
1178
3220
|
slug: args.slug,
|
|
1179
3221
|
pageType: args.pageType ?? "singleton",
|
|
3222
|
+
...args.blockJson ? { blockJson: args.blockJson } : {},
|
|
1180
3223
|
...args.fields ? { fields: args.fields.map(toField) } : {},
|
|
1181
3224
|
...args.metaTitle !== void 0 ? { metaTitle: args.metaTitle } : {},
|
|
1182
3225
|
...args.metaDescription !== void 0 ? { metaDescription: args.metaDescription } : {}
|
|
@@ -1463,6 +3506,31 @@ function buildToolDefs(deps) {
|
|
|
1463
3506
|
})
|
|
1464
3507
|
)
|
|
1465
3508
|
},
|
|
3509
|
+
// ── Project/page Layout (draft-only; publish remains dashboard-gated) ──
|
|
3510
|
+
{
|
|
3511
|
+
name: "get_layout",
|
|
3512
|
+
config: {
|
|
3513
|
+
title: "Get the project or page Layout draft",
|
|
3514
|
+
description: "Read the Global Layout or one page's Layout override, including its optimistic revision. Always read this before update_layout.",
|
|
3515
|
+
inputSchema: getLayoutInput.shape
|
|
3516
|
+
},
|
|
3517
|
+
handler: guard(async (args) => withClient(async (client) => {
|
|
3518
|
+
const layout = await client.getManagedLayout(args);
|
|
3519
|
+
return ok(`${layout.scope === "global" ? "Global" : `Page ${layout.pageSlug}`} Layout draft at revision ${layout.revision}.`, layout);
|
|
3520
|
+
}))
|
|
3521
|
+
},
|
|
3522
|
+
{
|
|
3523
|
+
name: "update_layout",
|
|
3524
|
+
config: {
|
|
3525
|
+
title: "Apply one Layout draft command",
|
|
3526
|
+
description: "Apply one permission-shaped values/composition/schema command to the Global Layout or a page override. Draft-only: this never publishes. Pass the revision from get_layout as ifMatch.",
|
|
3527
|
+
inputSchema: commandLayoutInput.shape
|
|
3528
|
+
},
|
|
3529
|
+
handler: guard(async (args) => withClient(async (client) => {
|
|
3530
|
+
const layout = await client.commandManagedLayout({ ...args, command: args.command });
|
|
3531
|
+
return ok(`Updated ${layout.scope === "global" ? "Global" : `Page ${layout.pageSlug}`} Layout draft to revision ${layout.revision}.`, layout);
|
|
3532
|
+
}))
|
|
3533
|
+
},
|
|
1466
3534
|
// ── Components (discover + author reusable symbols) ──
|
|
1467
3535
|
{
|
|
1468
3536
|
name: "list_components",
|
|
@@ -1562,6 +3630,23 @@ ${lines.join("\n")}`, found);
|
|
|
1562
3630
|
})
|
|
1563
3631
|
)
|
|
1564
3632
|
},
|
|
3633
|
+
{
|
|
3634
|
+
name: "publish_component",
|
|
3635
|
+
config: {
|
|
3636
|
+
title: "Publish a component",
|
|
3637
|
+
description: "Publish a component: copy its DRAFT definition to the live copy and re-bake every published page that embeds it. This is the ONLY way a component reaches the live site \u2014 create_component and update_component write drafts, and an unpublished component renders as NOTHING on the live site, with no error. Publish every component you place on a page. 403 PUBLISH_NOT_GRANTED means this connection may author but not publish: say so and let the user publish from the dashboard. 422 means publishing would break a Layout that uses it \u2014 the response names which.",
|
|
3638
|
+
inputSchema: getComponentInput.shape
|
|
3639
|
+
},
|
|
3640
|
+
handler: guard(
|
|
3641
|
+
async (args) => withClient(async (client) => {
|
|
3642
|
+
const res = await client.fetchJSON(
|
|
3643
|
+
client.url(`/management/components/${args.componentId}/publish`),
|
|
3644
|
+
{ method: "POST" }
|
|
3645
|
+
);
|
|
3646
|
+
return ok("Published component.", res.data);
|
|
3647
|
+
})
|
|
3648
|
+
)
|
|
3649
|
+
},
|
|
1565
3650
|
// ── AI content + SEO actions (Option B) ────────────────────────────────────
|
|
1566
3651
|
{
|
|
1567
3652
|
name: "write_content",
|
|
@@ -1611,29 +3696,144 @@ function registerTools(server, deps) {
|
|
|
1611
3696
|
|
|
1612
3697
|
// src/prompts.ts
|
|
1613
3698
|
import { z as z2 } from "zod";
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
3699
|
+
|
|
3700
|
+
// src/playbook.ts
|
|
3701
|
+
var SCHEMA_PLAYBOOK = `# Designing a BetterCMS project
|
|
3702
|
+
|
|
3703
|
+
Read this BEFORE creating anything. Confirm the shape with the user before you build it.
|
|
3704
|
+
|
|
3705
|
+
## 1. Pick the architecture first
|
|
3706
|
+
|
|
3707
|
+
**Components-first** \u2014 a marketing site. A library of reusable *components*, each a
|
|
3708
|
+
section, and thin pages that place them. Editors add, reorder and swap sections without
|
|
3709
|
+
touching a schema. This is what \`create_component\` + \`create_page(blockJson)\` are for.
|
|
3710
|
+
|
|
3711
|
+
**Schema-first** \u2014 a blog, a product catalogue, a directory: many rows sharing one shape.
|
|
3712
|
+
A collection (\`create_content_model\`) plus entries.
|
|
3713
|
+
|
|
3714
|
+
Most real sites are both: components for the marketing pages, a collection for the blog.
|
|
3715
|
+
Decide before your first call; converting later means rewriting content.
|
|
3716
|
+
|
|
3717
|
+
## 2. The decision tree
|
|
3718
|
+
|
|
3719
|
+
Repeated visual region on a page? -> a COMPONENT with sectionType (a Section)
|
|
3720
|
+
...and it comes in more than one look? -> siblings sharing that sectionType = VARIANTS
|
|
3721
|
+
A stack of mixed, reorderable content? -> kind:'block' models + a \`modular\` field
|
|
3722
|
+
A row in a list (post, author, tier)? -> a collection (kind:'model')
|
|
3723
|
+
The one body of an article? -> type:'document' (exactly one, top level)
|
|
3724
|
+
A fixed cluster of fields? -> group (never a 1-item repeater)
|
|
3725
|
+
A repeating cluster? -> repeater
|
|
3726
|
+
A list of plain strings? -> array (never a repeater of one text)
|
|
3727
|
+
Site-wide nav/footer? -> place the project's provisioned components
|
|
3728
|
+
|
|
3729
|
+
## 3. Anatomy of a real section component
|
|
3730
|
+
|
|
3731
|
+
A component that is only headings and text renders as an unstyled stack. Every section the
|
|
3732
|
+
product ships looks like this \u2014 a \`section\` block carrying \`style\`, with content nested in
|
|
3733
|
+
\`props.children\`:
|
|
3734
|
+
|
|
3735
|
+
{
|
|
3736
|
+
type: "section", id: "root",
|
|
3737
|
+
style: { bg: "surface", paddingTop: 96, paddingBottom: 96, contentWidth: "default", align: "center" },
|
|
3738
|
+
props: { children: [
|
|
3739
|
+
{ type: "heading", id: "h", props: { text: "Headline", level: 2 } },
|
|
3740
|
+
{ type: "text", id: "sub", props: { html: "<p>Supporting copy.</p>" } },
|
|
3741
|
+
{ type: "button", id: "cta", props: { text: "Get started", href: "/signup", variant: "primary" } }
|
|
3742
|
+
] }
|
|
3743
|
+
}
|
|
3744
|
+
|
|
3745
|
+
Then declare what an editor may change, via \`props\`:
|
|
3746
|
+
|
|
3747
|
+
props: [
|
|
3748
|
+
{ key: "headline", label: "Headline", target: { blockId: "h", path: "props.text" }, type: "text" },
|
|
3749
|
+
{ key: "body", label: "Body", target: { blockId: "sub", path: "props.html" }, type: "richtext" },
|
|
3750
|
+
{ key: "ctaHref", label: "CTA link", target: { blockId: "cta", path: "props.href" }, type: "url" }
|
|
3751
|
+
]
|
|
3752
|
+
|
|
3753
|
+
Declare props only for what should really be editable. Every prop is a decision an editor
|
|
3754
|
+
has to make.
|
|
3755
|
+
|
|
3756
|
+
## 4. Variants
|
|
3757
|
+
|
|
3758
|
+
Components sharing a \`sectionType\` are swappable layouts of one section family \u2014 "Hero
|
|
3759
|
+
centered" and "Hero split" both with \`sectionType: "Hero"\`. Swapping is one write and
|
|
3760
|
+
keeps content, because overrides are keyed by prop KEY.
|
|
3761
|
+
|
|
3762
|
+
So **use the same prop keys across a family**. A variant that calls it \`title\` where its
|
|
3763
|
+
sibling calls it \`headline\` silently drops that content on the swap.
|
|
3764
|
+
|
|
3765
|
+
Pair \`sectionType\` with a library \`category\` (hero, content, social-proof, conversion) or
|
|
3766
|
+
the component never appears in the editor's "Add a section" picker.
|
|
3767
|
+
|
|
3768
|
+
## 5. Blocks and modular fields
|
|
3769
|
+
|
|
3770
|
+
A \`kind:'block'\` model holds no entries of its own; it exists to be stacked inside another
|
|
3771
|
+
model's \`modular\` field. Create the blocks FIRST, then name their slugs (not ids) in
|
|
3772
|
+
\`config.blockSlugs\`. This is the page-builder shape: one \`sections\` field holding an
|
|
3773
|
+
ordered list of typed blocks.
|
|
3774
|
+
|
|
3775
|
+
## 6. Blogs
|
|
3776
|
+
|
|
3777
|
+
author collection: name, avatar, bio
|
|
3778
|
+
blog-post collection: title, slug, excerpt, cover (image),
|
|
3779
|
+
body (document), author (reference -> author)
|
|
3780
|
+
|
|
3781
|
+
\`document\` is THE article body: a rich document canvas, **collections only**, at most one
|
|
3782
|
+
per model, top level only (never inside a group or repeater). A page's body is its block
|
|
3783
|
+
content, so \`document\` on a page is rejected. Use \`richtext\` for a short formatted field,
|
|
3784
|
+
\`longtext\` for multi-line plain text.
|
|
3785
|
+
|
|
3786
|
+
Then the pages:
|
|
3787
|
+
|
|
3788
|
+
create_page slug:"blog" pageType:"dynamic" fields:[...the post schema...]
|
|
3789
|
+
blockJson: [ nav, heading, { type:"collection", id:"list", props:{} }, footer ]
|
|
3790
|
+
|
|
3791
|
+
create_content_entry per post, with pageId set to that page
|
|
3792
|
+
|
|
3793
|
+
The \`collection\` block is lane-aware: on \`/blog\` it renders a card per entry, and on
|
|
3794
|
+
\`/blog/<slug>\` it renders THAT entry. One page, both jobs. Every OTHER block in the array
|
|
3795
|
+
is interpolated per entry with \`{{fieldKey}}\` placeholders \u2014 \`{{title}}\`, \`{{cover.url}}\`,
|
|
3796
|
+
\`{{body.html}}\`. Note that richtext and document bind to \`.html\` only, never the bare name.
|
|
3797
|
+
|
|
3798
|
+
## 7. Order of operations
|
|
3799
|
+
|
|
3800
|
+
1. blocks create_content_model kind:'block' (before anything references them)
|
|
3801
|
+
2. collections create_content_model
|
|
3802
|
+
3. components create_component (they land as DRAFTS)
|
|
3803
|
+
4. publish publish_component <- every component you intend to place
|
|
3804
|
+
5. pages create_page with blockJson placing those components
|
|
3805
|
+
6. content create_content_entry / set_page_content
|
|
3806
|
+
7. publish update_page status:'published'
|
|
3807
|
+
8. check get_next_steps, and fix what it lists
|
|
3808
|
+
|
|
3809
|
+
## 8. Two ways to ship a blank site
|
|
3810
|
+
|
|
3811
|
+
**An unpublished component renders as an empty string.** Not an error, not a placeholder \u2014
|
|
3812
|
+
nothing, on a page that returns 200. If a section is missing from the live site, check
|
|
3813
|
+
\`publish_component\` before anything else.
|
|
3814
|
+
|
|
3815
|
+
**A workspace-level component (\`projectId: null\`) never reaches a live site.** It resolves
|
|
3816
|
+
in preview and is blank in production. Always pass the project's id.
|
|
3817
|
+
`;
|
|
3818
|
+
|
|
3819
|
+
// src/prompts.ts
|
|
3820
|
+
var SCHEMA_PROPOSAL_FLOW = `### Whole-project design (confirm-first) \u2192 \`create_component\` / \`create_page\` / \`create_content_model\`
|
|
3821
|
+
Design the WHOLE project from its brief or its code, and **confirm the shape with the user
|
|
3822
|
+
BEFORE creating anything**. Never silently guess.
|
|
3823
|
+
|
|
3824
|
+
1. **Read the source** \u2014 the connected repo, or the uploaded project in your working
|
|
3825
|
+
directory. For each page, identify the repeated visual regions and the list-shaped data.
|
|
3826
|
+
2. **Classify every part** using the decision tree in the playbook below. The two mistakes
|
|
3827
|
+
that matter: flattening a marketing page into loose page fields when its sections should
|
|
3828
|
+
be COMPONENTS, and giving a blog a \`richtext\` field when its body should be \`document\`.
|
|
3829
|
+
3. **Present the proposal (REQUIRED gate).** Show the component library (with each section's
|
|
3830
|
+
family and variants), the collections and their fields, and the pages that place them.
|
|
3831
|
+
Ask the user (AskUserQuestion) to confirm or adjust. Do not create anything before this.
|
|
3832
|
+
4. **Build it in the playbook's order** \u2014 blocks, collections, components, PUBLISH the
|
|
3833
|
+
components, pages, content, publish. Skipping the publish step ships a blank site.
|
|
3834
|
+
|
|
3835
|
+
${SCHEMA_PLAYBOOK}
|
|
3836
|
+
`;
|
|
1637
3837
|
var PAGE_FLOW = `### Page authoring \u2192 \`create_page\` tool
|
|
1638
3838
|
Author a page (the page-first schema). Ask, in order, via AskUserQuestion:
|
|
1639
3839
|
1. **Page type** \u2014 singleton (exactly one entry: Home, About, Contact) vs dynamic
|
|
@@ -1676,20 +3876,36 @@ Author a form (then the user embeds it with \`<BcmsForm form={getForm('Name')} /
|
|
|
1676
3876
|
4. **Confirm**, then \`create_form\` { name, fields, ... } (returns the new id), or
|
|
1677
3877
|
\`update_form\` { formId, ... } to edit (passing \`fields\` REPLACES the array \u2014 include all).
|
|
1678
3878
|
5. Offer to wire \`<BcmsForm>\` into the page/component where the user wants it.`;
|
|
1679
|
-
var COMPONENT_FLOW = `### Component authoring \u2192 \`create_component\` / \`
|
|
1680
|
-
Author a reusable
|
|
1681
|
-
|
|
1682
|
-
confirm. Never guess the layout.
|
|
3879
|
+
var COMPONENT_FLOW = `### Component authoring \u2192 \`create_component\` / \`publish_component\`
|
|
3880
|
+
Author a reusable section. blockJson is the visual definition; authoring it blind is
|
|
3881
|
+
error-prone, so go slow and confirm. Never guess the layout.
|
|
1683
3882
|
1. **Discover** \u2014 \`list_components\` / \`get_component\` (read before update; keep existing blocks).
|
|
1684
|
-
2. **Design the
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
4. **
|
|
1691
|
-
{
|
|
1692
|
-
|
|
3883
|
+
2. **Design the tree** \u2014 wrap the section in a \`section\` block carrying \`style\`
|
|
3884
|
+
(bg + paddingTop/paddingBottom + contentWidth) and nest content in props.children. See
|
|
3885
|
+
"Anatomy of a real section component" in the playbook. Give every block a stable id.
|
|
3886
|
+
3. **sectionType + category** \u2014 set both, or the component never appears in the editor's
|
|
3887
|
+
"Add a section" picker. Components sharing a sectionType are swappable VARIANTS, so reuse
|
|
3888
|
+
the same prop keys across a family or a swap drops content.
|
|
3889
|
+
4. **Props** \u2014 declare only what should really be editable:
|
|
3890
|
+
{ key, label, target: { blockId, path }, type: text|richtext|image|url|boolean|slot }.
|
|
3891
|
+
5. **Confirm the structure** (AskUserQuestion: show the block tree), then \`create_component\`.
|
|
3892
|
+
6. **\`publish_component\`.** It lands as a DRAFT, and a draft component renders as NOTHING on
|
|
3893
|
+
the live site \u2014 no error, no placeholder. This step is not optional.
|
|
3894
|
+
`;
|
|
3895
|
+
var LAYOUT_FLOW = `### Project/page Layout authoring \u2192 \`get_layout\` / \`update_layout\`
|
|
3896
|
+
Edit the project's draft Global Layout or one page's draft override. Layout publishing stays
|
|
3897
|
+
in the dashboard; these tools never change the live site.
|
|
3898
|
+
1. **Read first** \u2014 call \`get_layout\` with scope \`global\`, or scope \`page\` + pageId.
|
|
3899
|
+
Keep the returned \`revision\`; every write must pass it as \`ifMatch\`.
|
|
3900
|
+
2. **Choose one discriminated command type** \u2014 the server derives its authority family;
|
|
3901
|
+
callers cannot claim a weaker family for a schema or composition mutation.
|
|
3902
|
+
3. **Apply one canonical command** with \`update_layout\`, then use the returned revision for
|
|
3903
|
+
the next command. A 409 means somebody else edited it: re-read; never blindly retry.
|
|
3904
|
+
4. Direct fields are headless data. Only Component items render markup. Navigation/Footer
|
|
3905
|
+
are reserved Sections and cannot be deleted or moved; page overrides may inherit,
|
|
3906
|
+
override content, customize structure, or disable them.
|
|
3907
|
+
5. Read Component/Variant identities before attaching or swapping. Required values and
|
|
3908
|
+
bindings must be complete before a human publishes from the dashboard.`;
|
|
1693
3909
|
var BUILD_SITE_FLOW = `### Build a whole site (schema \u2192 pages \u2192 AI copy) \u2192 composes the flows below
|
|
1694
3910
|
End-to-end authoring from a repo or a brief. Confirm-first at every stage.
|
|
1695
3911
|
1. **Schema** \u2014 run the whole-project schema design above: propose the page/zone/field tree,
|
|
@@ -1761,6 +3977,8 @@ ${FORM_FLOW}
|
|
|
1761
3977
|
|
|
1762
3978
|
${COMPONENT_FLOW}
|
|
1763
3979
|
|
|
3980
|
+
${LAYOUT_FLOW}
|
|
3981
|
+
|
|
1764
3982
|
${BUILD_SITE_FLOW}
|
|
1765
3983
|
|
|
1766
3984
|
${LANDING_PAGES_FLOW}
|
|
@@ -1774,6 +3992,29 @@ here \u2014 route to it the same way.`
|
|
|
1774
3992
|
]
|
|
1775
3993
|
})
|
|
1776
3994
|
);
|
|
3995
|
+
server.registerPrompt(
|
|
3996
|
+
"edit_layout",
|
|
3997
|
+
{
|
|
3998
|
+
title: "Edit project or page Layout (guided)",
|
|
3999
|
+
description: "Safely edit a draft Global Layout or page override with optimistic locking. Publishing remains in the dashboard.",
|
|
4000
|
+
argsSchema: {
|
|
4001
|
+
request: z2.string().optional().describe("what to change, e.g. 'disable the footer on the pricing page'")
|
|
4002
|
+
}
|
|
4003
|
+
},
|
|
4004
|
+
({ request }) => ({
|
|
4005
|
+
messages: [{
|
|
4006
|
+
role: "user",
|
|
4007
|
+
content: {
|
|
4008
|
+
type: "text",
|
|
4009
|
+
text: `Edit the BetterCMS Layout draft.${request ? ` The user wants: "${request}".` : ""}
|
|
4010
|
+
|
|
4011
|
+
${LAYOUT_FLOW}
|
|
4012
|
+
|
|
4013
|
+
Report which scope changed and the new revision. Remind the user that publishing is a separate dashboard action.`
|
|
4014
|
+
}
|
|
4015
|
+
}]
|
|
4016
|
+
})
|
|
4017
|
+
);
|
|
1777
4018
|
server.registerPrompt(
|
|
1778
4019
|
"propose_schema",
|
|
1779
4020
|
{
|