@vectoriox/iox-ui 5.77.0 → 5.79.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.
Files changed (33) hide show
  1. package/design-core/index.d.ts +34 -4
  2. package/fesm2022/vectoriox-iox-ui-design-core.mjs +34 -4
  3. package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
  4. package/fesm2022/vectoriox-iox-ui-generation-core.mjs +950 -15
  5. package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
  6. package/fesm2022/vectoriox-iox-ui-harness-core.mjs +38 -3
  7. package/fesm2022/vectoriox-iox-ui-harness-core.mjs.map +1 -1
  8. package/fesm2022/vectoriox-iox-ui-media-core.mjs +23 -1
  9. package/fesm2022/vectoriox-iox-ui-media-core.mjs.map +1 -1
  10. package/fesm2022/vectoriox-iox-ui-scene-core.mjs +3 -6
  11. package/fesm2022/vectoriox-iox-ui-scene-core.mjs.map +1 -1
  12. package/generation-core/index.d.ts +585 -8
  13. package/harness-core/index.d.ts +40 -2
  14. package/media-core/index.d.ts +19 -1
  15. package/package.json +1 -1
  16. package/scene-core/index.d.ts +1 -4
  17. package/src/design-core/flavor-spec.generated.ts +34 -4
  18. package/src/generation-core/compose-site.ts +25 -2
  19. package/src/generation-core/film.ts +91 -0
  20. package/src/generation-core/patterns.ts +41 -4
  21. package/src/generation-core/plan-wire.ts +4 -2
  22. package/src/generation-core/public-api.ts +1 -0
  23. package/src/generation-core/serialized-node.ts +3 -0
  24. package/src/generation-core/showcase.ts +32 -7
  25. package/src/generation-core/site-plan.model.ts +8 -0
  26. package/src/generation-core/site-spec.generated.ts +738 -1
  27. package/src/generation-core/validate-site-plan.ts +57 -2
  28. package/src/harness-core/business-types.ts +3 -0
  29. package/src/harness-core/generation-view.ts +3 -1
  30. package/src/harness-core/harness-spec.generated.ts +32 -2
  31. package/src/harness-core/motion.ts +8 -1
  32. package/src/media-core/frames.ts +23 -0
  33. package/src/scene-core/scene-edit.ts +3 -5
@@ -12,7 +12,11 @@ export const SPEC_SITE_PLAN_SHAPE = {
12
12
  "contentTypes": "contentType[]",
13
13
  "dataSources": "(cmsDataSource | relativeDataSource)[] — merged by alias into the org library",
14
14
  "pages": "page[]",
15
- "globals": "globals"
15
+ "globals": "globals",
16
+ "film?": "film — the owner's film as pictures (SC6b), set by the build and placed by placeFilm; never a model's"
17
+ },
18
+ "film": {
19
+ "sequence": "object — a media-core FrameSequence: where the numbered pictures live, how many, their size"
16
20
  },
17
21
  "sourceTemplate": {
18
22
  "kind": "'template'",
@@ -417,6 +421,719 @@ export const SPEC_SITE_ARCHETYPES = {
417
421
  } as const;
418
422
 
419
423
  export const SPEC_SITE_PATTERNS = {
424
+ "hero.scene-depth": {
425
+ "family": "hero",
426
+ "scene": true,
427
+ "label": "Hero — a picture that opens as you scroll",
428
+ "intent": "One strong picture of the work that opens and settles while the page holds still — a first screen that moves, for a studio with a picture worth it.",
429
+ "node": {
430
+ "t": "Section",
431
+ "es": "section",
432
+ "scheme": "inverse",
433
+ "role": "scene",
434
+ "lay": {
435
+ "position": "relative",
436
+ "display": "block",
437
+ "width": "100%",
438
+ "height": "300vh",
439
+ "padding": "0px"
440
+ },
441
+ "c": [
442
+ {
443
+ "t": "Container",
444
+ "role": "scene.stage",
445
+ "lay": {
446
+ "position": "sticky",
447
+ "top": "0px",
448
+ "display": "block",
449
+ "width": "100%",
450
+ "height": "100svh",
451
+ "overflow": "hidden",
452
+ "padding": "0px"
453
+ },
454
+ "c": [
455
+ {
456
+ "t": "Image",
457
+ "es": "media",
458
+ "ph": "image",
459
+ "lay": {
460
+ "position": "absolute",
461
+ "top": "0px",
462
+ "left": "0px",
463
+ "width": "100%",
464
+ "height": "100%",
465
+ "aspectRatio": "auto",
466
+ "borderRadius": "0px",
467
+ "objectFit": "cover"
468
+ },
469
+ "tracks": [
470
+ {
471
+ "prop": "scale",
472
+ "keys": [
473
+ [
474
+ 0,
475
+ 1.3
476
+ ],
477
+ [
478
+ 1,
479
+ 1
480
+ ]
481
+ ]
482
+ },
483
+ {
484
+ "prop": "clip",
485
+ "from": "bottom",
486
+ "keys": [
487
+ [
488
+ 0,
489
+ 38
490
+ ],
491
+ [
492
+ 0.42,
493
+ 100
494
+ ]
495
+ ]
496
+ }
497
+ ]
498
+ },
499
+ {
500
+ "t": "Container",
501
+ "es": "media-scrim",
502
+ "lay": {
503
+ "display": "flex",
504
+ "flexDirection": "column",
505
+ "gap": "14px",
506
+ "position": "absolute",
507
+ "left": "0px",
508
+ "bottom": "0px",
509
+ "width": "100%",
510
+ "padding": "48px 32px 56px 32px"
511
+ },
512
+ "c": [
513
+ {
514
+ "t": "Heading",
515
+ "es": "display",
516
+ "level": "h1",
517
+ "slot": "headline",
518
+ "max": 56,
519
+ "fromBusiness": "name",
520
+ "tracks": [
521
+ {
522
+ "prop": "y",
523
+ "keys": [
524
+ [
525
+ 0,
526
+ 0
527
+ ],
528
+ [
529
+ 1,
530
+ -6
531
+ ]
532
+ ]
533
+ }
534
+ ]
535
+ },
536
+ {
537
+ "t": "Text",
538
+ "es": "lead",
539
+ "slot": "lead",
540
+ "max": 180,
541
+ "fromBusiness": "tagline",
542
+ "ph": "copy",
543
+ "tracks": [
544
+ {
545
+ "prop": "opacity",
546
+ "keys": [
547
+ [
548
+ 0.45,
549
+ 0
550
+ ],
551
+ [
552
+ 0.6,
553
+ 1
554
+ ]
555
+ ]
556
+ }
557
+ ]
558
+ },
559
+ {
560
+ "t": "ButtonBlock",
561
+ "es": "button-primary",
562
+ "href": "/contact",
563
+ "slot": "cta",
564
+ "max": 24,
565
+ "text": "Get in touch",
566
+ "tracks": [
567
+ {
568
+ "prop": "opacity",
569
+ "keys": [
570
+ [
571
+ 0.5,
572
+ 0
573
+ ],
574
+ [
575
+ 0.65,
576
+ 1
577
+ ]
578
+ ]
579
+ }
580
+ ]
581
+ }
582
+ ]
583
+ }
584
+ ]
585
+ }
586
+ ]
587
+ }
588
+ },
589
+ "hero.scene-object": {
590
+ "family": "hero",
591
+ "scene": true,
592
+ "film": true,
593
+ "label": "Hero — your film plays as you scroll",
594
+ "intent": "The studio's own film plays forward and back with the scroll behind the headline while the page holds still.",
595
+ "node": {
596
+ "t": "Section",
597
+ "es": "section",
598
+ "scheme": "inverse",
599
+ "role": "scene",
600
+ "lay": {
601
+ "position": "relative",
602
+ "display": "block",
603
+ "width": "100%",
604
+ "height": "300vh",
605
+ "padding": "0px"
606
+ },
607
+ "c": [
608
+ {
609
+ "t": "Container",
610
+ "role": "scene.stage",
611
+ "lay": {
612
+ "position": "sticky",
613
+ "top": "0px",
614
+ "display": "block",
615
+ "width": "100%",
616
+ "height": "100svh",
617
+ "overflow": "hidden",
618
+ "padding": "0px"
619
+ },
620
+ "c": [
621
+ {
622
+ "t": "Video",
623
+ "es": "media",
624
+ "film": true,
625
+ "lay": {
626
+ "position": "absolute",
627
+ "top": "0px",
628
+ "left": "0px",
629
+ "width": "100%",
630
+ "height": "100%",
631
+ "aspectRatio": "auto",
632
+ "borderRadius": "0px"
633
+ },
634
+ "tracks": [
635
+ {
636
+ "prop": "play",
637
+ "keys": [
638
+ [
639
+ 0,
640
+ 0
641
+ ],
642
+ [
643
+ 1,
644
+ 100
645
+ ]
646
+ ]
647
+ }
648
+ ]
649
+ },
650
+ {
651
+ "t": "Container",
652
+ "es": "media-scrim",
653
+ "lay": {
654
+ "display": "flex",
655
+ "flexDirection": "column",
656
+ "gap": "14px",
657
+ "position": "absolute",
658
+ "left": "0px",
659
+ "bottom": "0px",
660
+ "width": "100%",
661
+ "padding": "48px 32px 56px 32px"
662
+ },
663
+ "c": [
664
+ {
665
+ "t": "Heading",
666
+ "es": "display",
667
+ "level": "h1",
668
+ "slot": "headline",
669
+ "max": 56,
670
+ "fromBusiness": "name",
671
+ "tracks": [
672
+ {
673
+ "prop": "y",
674
+ "keys": [
675
+ [
676
+ 0,
677
+ 0
678
+ ],
679
+ [
680
+ 1,
681
+ -6
682
+ ]
683
+ ]
684
+ }
685
+ ]
686
+ },
687
+ {
688
+ "t": "Text",
689
+ "es": "lead",
690
+ "slot": "lead",
691
+ "max": 180,
692
+ "fromBusiness": "tagline",
693
+ "ph": "copy",
694
+ "tracks": [
695
+ {
696
+ "prop": "opacity",
697
+ "keys": [
698
+ [
699
+ 0.3,
700
+ 0
701
+ ],
702
+ [
703
+ 0.45,
704
+ 1
705
+ ]
706
+ ]
707
+ }
708
+ ]
709
+ },
710
+ {
711
+ "t": "ButtonBlock",
712
+ "es": "button-primary",
713
+ "href": "/contact",
714
+ "slot": "cta",
715
+ "max": 24,
716
+ "text": "Get in touch",
717
+ "tracks": [
718
+ {
719
+ "prop": "opacity",
720
+ "keys": [
721
+ [
722
+ 0.35,
723
+ 0
724
+ ],
725
+ [
726
+ 0.5,
727
+ 1
728
+ ]
729
+ ]
730
+ }
731
+ ]
732
+ }
733
+ ]
734
+ }
735
+ ]
736
+ }
737
+ ]
738
+ }
739
+ },
740
+ "story.scene-chapters": {
741
+ "family": "story",
742
+ "scene": true,
743
+ "label": "Story — three chapters on one held stage",
744
+ "intent": "How you work in three short chapters that take turns over one picture while the page holds still — a process worth slowing down for.",
745
+ "node": {
746
+ "t": "Section",
747
+ "es": "section",
748
+ "scheme": "inverse",
749
+ "role": "scene",
750
+ "lay": {
751
+ "position": "relative",
752
+ "display": "block",
753
+ "width": "100%",
754
+ "height": "400vh",
755
+ "padding": "0px"
756
+ },
757
+ "c": [
758
+ {
759
+ "t": "Container",
760
+ "role": "scene.stage",
761
+ "lay": {
762
+ "position": "sticky",
763
+ "top": "0px",
764
+ "display": "block",
765
+ "width": "100%",
766
+ "height": "100svh",
767
+ "overflow": "hidden",
768
+ "padding": "0px"
769
+ },
770
+ "c": [
771
+ {
772
+ "t": "Image",
773
+ "es": "media",
774
+ "ph": "image",
775
+ "lay": {
776
+ "position": "absolute",
777
+ "top": "0px",
778
+ "left": "0px",
779
+ "width": "100%",
780
+ "height": "100%",
781
+ "aspectRatio": "auto",
782
+ "borderRadius": "0px",
783
+ "objectFit": "cover"
784
+ },
785
+ "tracks": [
786
+ {
787
+ "prop": "scale",
788
+ "keys": [
789
+ [
790
+ 0,
791
+ 1.12
792
+ ],
793
+ [
794
+ 1,
795
+ 1
796
+ ]
797
+ ]
798
+ }
799
+ ]
800
+ },
801
+ {
802
+ "t": "Container",
803
+ "es": "media-scrim",
804
+ "lay": {
805
+ "position": "absolute",
806
+ "left": "0px",
807
+ "bottom": "0px",
808
+ "width": "100%",
809
+ "height": "62%",
810
+ "padding": "0px"
811
+ },
812
+ "c": [
813
+ {
814
+ "t": "Container",
815
+ "es": "box",
816
+ "lay": {
817
+ "display": "flex",
818
+ "flexDirection": "column",
819
+ "gap": "12px",
820
+ "position": "absolute",
821
+ "left": "32px",
822
+ "right": "32px",
823
+ "bottom": "56px",
824
+ "maxWidth": "640px"
825
+ },
826
+ "tracks": [
827
+ {
828
+ "prop": "opacity",
829
+ "keys": [
830
+ [
831
+ 0,
832
+ 1
833
+ ],
834
+ [
835
+ 0.26,
836
+ 1
837
+ ],
838
+ [
839
+ 0.33,
840
+ 0
841
+ ]
842
+ ]
843
+ },
844
+ {
845
+ "prop": "y",
846
+ "keys": [
847
+ [
848
+ 0.26,
849
+ 0
850
+ ],
851
+ [
852
+ 0.33,
853
+ -6
854
+ ]
855
+ ]
856
+ }
857
+ ],
858
+ "c": [
859
+ {
860
+ "t": "Text",
861
+ "es": "eyebrow",
862
+ "slot": "eyebrow",
863
+ "max": 32,
864
+ "ph": "copy",
865
+ "text": "How we work"
866
+ },
867
+ {
868
+ "t": "Heading",
869
+ "es": "h2",
870
+ "level": "h2",
871
+ "slot": "title",
872
+ "max": 52,
873
+ "ph": "copy",
874
+ "text": "It starts with a conversation"
875
+ },
876
+ {
877
+ "t": "Text",
878
+ "es": "lead",
879
+ "slot": "text",
880
+ "max": 180,
881
+ "ph": "copy",
882
+ "text": "What the first step is, in a sentence or two."
883
+ }
884
+ ]
885
+ },
886
+ {
887
+ "t": "Container",
888
+ "es": "box",
889
+ "lay": {
890
+ "display": "flex",
891
+ "flexDirection": "column",
892
+ "gap": "12px",
893
+ "position": "absolute",
894
+ "left": "32px",
895
+ "right": "32px",
896
+ "bottom": "56px",
897
+ "maxWidth": "640px"
898
+ },
899
+ "tracks": [
900
+ {
901
+ "prop": "opacity",
902
+ "keys": [
903
+ [
904
+ 0.33,
905
+ 0
906
+ ],
907
+ [
908
+ 0.4,
909
+ 1
910
+ ],
911
+ [
912
+ 0.6,
913
+ 1
914
+ ],
915
+ [
916
+ 0.67,
917
+ 0
918
+ ]
919
+ ]
920
+ },
921
+ {
922
+ "prop": "y",
923
+ "keys": [
924
+ [
925
+ 0.33,
926
+ 6
927
+ ],
928
+ [
929
+ 0.4,
930
+ 0
931
+ ],
932
+ [
933
+ 0.6,
934
+ 0
935
+ ],
936
+ [
937
+ 0.67,
938
+ -6
939
+ ]
940
+ ]
941
+ }
942
+ ],
943
+ "c": [
944
+ {
945
+ "t": "Heading",
946
+ "es": "h2",
947
+ "level": "h2",
948
+ "slot": "title2",
949
+ "max": 52,
950
+ "ph": "copy",
951
+ "text": "Then we make it"
952
+ },
953
+ {
954
+ "t": "Text",
955
+ "es": "lead",
956
+ "slot": "text2",
957
+ "max": 180,
958
+ "ph": "copy",
959
+ "text": "What the middle of the work is, in a sentence or two."
960
+ }
961
+ ]
962
+ },
963
+ {
964
+ "t": "Container",
965
+ "es": "box",
966
+ "lay": {
967
+ "display": "flex",
968
+ "flexDirection": "column",
969
+ "gap": "12px",
970
+ "position": "absolute",
971
+ "left": "32px",
972
+ "right": "32px",
973
+ "bottom": "56px",
974
+ "maxWidth": "640px"
975
+ },
976
+ "tracks": [
977
+ {
978
+ "prop": "opacity",
979
+ "keys": [
980
+ [
981
+ 0.67,
982
+ 0
983
+ ],
984
+ [
985
+ 0.74,
986
+ 1
987
+ ],
988
+ [
989
+ 1,
990
+ 1
991
+ ]
992
+ ]
993
+ },
994
+ {
995
+ "prop": "y",
996
+ "keys": [
997
+ [
998
+ 0.67,
999
+ 6
1000
+ ],
1001
+ [
1002
+ 0.74,
1003
+ 0
1004
+ ]
1005
+ ]
1006
+ }
1007
+ ],
1008
+ "c": [
1009
+ {
1010
+ "t": "Heading",
1011
+ "es": "h2",
1012
+ "level": "h2",
1013
+ "slot": "title3",
1014
+ "max": 52,
1015
+ "ph": "copy",
1016
+ "text": "And it is yours"
1017
+ },
1018
+ {
1019
+ "t": "Text",
1020
+ "es": "lead",
1021
+ "slot": "text3",
1022
+ "max": 180,
1023
+ "ph": "copy",
1024
+ "text": "What the client leaves with, in a sentence or two."
1025
+ }
1026
+ ]
1027
+ }
1028
+ ]
1029
+ }
1030
+ ]
1031
+ }
1032
+ ]
1033
+ }
1034
+ },
1035
+ "proof.scene-words": {
1036
+ "family": "proof",
1037
+ "scene": true,
1038
+ "label": "A testimonial that lights word by word",
1039
+ "intent": "One client's words, lit one word at a time while the page holds still — only once the studio has a real quote worth slowing down for.",
1040
+ "node": {
1041
+ "t": "Section",
1042
+ "es": "section",
1043
+ "role": "scene",
1044
+ "lay": {
1045
+ "position": "relative",
1046
+ "display": "block",
1047
+ "width": "100%",
1048
+ "height": "250vh",
1049
+ "padding": "0px"
1050
+ },
1051
+ "c": [
1052
+ {
1053
+ "t": "Container",
1054
+ "role": "scene.stage",
1055
+ "lay": {
1056
+ "position": "sticky",
1057
+ "top": "0px",
1058
+ "display": "flex",
1059
+ "width": "100%",
1060
+ "height": "100svh",
1061
+ "overflow": "hidden",
1062
+ "padding": "32px 32px 32px 32px",
1063
+ "alignItems": "center",
1064
+ "justifyContent": "center"
1065
+ },
1066
+ "c": [
1067
+ {
1068
+ "t": "Container",
1069
+ "es": "box",
1070
+ "lay": {
1071
+ "display": "flex",
1072
+ "flexDirection": "column",
1073
+ "gap": "20px",
1074
+ "maxWidth": "900px",
1075
+ "width": "100%",
1076
+ "margin": "0px auto 0px auto"
1077
+ },
1078
+ "c": [
1079
+ {
1080
+ "t": "Text",
1081
+ "es": "eyebrow",
1082
+ "slot": "eyebrow",
1083
+ "max": 32,
1084
+ "ph": "copy",
1085
+ "text": "What clients say"
1086
+ },
1087
+ {
1088
+ "t": "Heading",
1089
+ "es": "h2",
1090
+ "level": "h2",
1091
+ "ph": "copy",
1092
+ "text": "A sentence a client actually said, in their own words.",
1093
+ "tracks": [
1094
+ {
1095
+ "prop": "words",
1096
+ "keys": [
1097
+ [
1098
+ 0.08,
1099
+ 0
1100
+ ],
1101
+ [
1102
+ 0.7,
1103
+ 100
1104
+ ]
1105
+ ]
1106
+ }
1107
+ ]
1108
+ },
1109
+ {
1110
+ "t": "Text",
1111
+ "es": "small",
1112
+ "ph": "copy",
1113
+ "text": "[Client name] · [Project, city]",
1114
+ "tracks": [
1115
+ {
1116
+ "prop": "opacity",
1117
+ "keys": [
1118
+ [
1119
+ 0.7,
1120
+ 0
1121
+ ],
1122
+ [
1123
+ 0.82,
1124
+ 1
1125
+ ]
1126
+ ]
1127
+ }
1128
+ ]
1129
+ }
1130
+ ]
1131
+ }
1132
+ ]
1133
+ }
1134
+ ]
1135
+ }
1136
+ },
420
1137
  "nav.inline-cta": {
421
1138
  "family": "nav",
422
1139
  "label": "Navigation bar",
@@ -4924,6 +5641,16 @@ export const SPEC_SITE_LIBRARY = [
4924
5641
  "family": "hero",
4925
5642
  "composed": true
4926
5643
  },
5644
+ {
5645
+ "id": "hero.scene-depth",
5646
+ "family": "hero",
5647
+ "composed": true
5648
+ },
5649
+ {
5650
+ "id": "hero.scene-object",
5651
+ "family": "hero",
5652
+ "composed": true
5653
+ },
4927
5654
  {
4928
5655
  "id": "proof.logo-strip",
4929
5656
  "family": "proof",
@@ -4944,6 +5671,11 @@ export const SPEC_SITE_LIBRARY = [
4944
5671
  "family": "proof",
4945
5672
  "composed": true
4946
5673
  },
5674
+ {
5675
+ "id": "proof.scene-words",
5676
+ "family": "proof",
5677
+ "composed": true
5678
+ },
4947
5679
  {
4948
5680
  "id": "feature.triad",
4949
5681
  "family": "feature",
@@ -4999,6 +5731,11 @@ export const SPEC_SITE_LIBRARY = [
4999
5731
  "family": "story",
5000
5732
  "composed": true
5001
5733
  },
5734
+ {
5735
+ "id": "story.scene-chapters",
5736
+ "family": "story",
5737
+ "composed": true
5738
+ },
5002
5739
  {
5003
5740
  "id": "cta.banner",
5004
5741
  "family": "cta",