@sankhyatronics/sankhya-cms 0.1.6 → 0.1.7

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.
@@ -670,6 +670,192 @@
670
670
  }
671
671
  ]
672
672
  },
673
+ {
674
+ "kind": "javascript-module",
675
+ "path": "src/content-block/ContentBlock.ts",
676
+ "declarations": [
677
+ {
678
+ "kind": "class",
679
+ "description": "A long-form article section: centered title/subtitle, an optional featured image with caption,\r\nthen Markdown body text. Ports `SankhyaUI`'s React `ContentBlock`. The body comes from\r\n`content-src` (a Markdown URL, as in the source) or an inline `content` string (added so the\r\nblock works without a fetch); `content-src` wins when both are set.",
680
+ "name": "ContentBlock",
681
+ "cssProperties": [
682
+ {
683
+ "description": "Overrides the block's padding.",
684
+ "name": "--st-content-block-padding"
685
+ }
686
+ ],
687
+ "members": [
688
+ {
689
+ "kind": "field",
690
+ "name": "title",
691
+ "type": {
692
+ "text": "string"
693
+ },
694
+ "default": "''",
695
+ "attribute": "title"
696
+ },
697
+ {
698
+ "kind": "field",
699
+ "name": "subtitle",
700
+ "type": {
701
+ "text": "string"
702
+ },
703
+ "default": "''",
704
+ "attribute": "subtitle"
705
+ },
706
+ {
707
+ "kind": "field",
708
+ "name": "contentSrc",
709
+ "type": {
710
+ "text": "string"
711
+ },
712
+ "default": "''",
713
+ "description": "URL of a Markdown file.",
714
+ "attribute": "content-src"
715
+ },
716
+ {
717
+ "kind": "field",
718
+ "name": "content",
719
+ "type": {
720
+ "text": "string"
721
+ },
722
+ "default": "''",
723
+ "description": "Inline Markdown, used when `content-src` is not set.",
724
+ "attribute": "content"
725
+ },
726
+ {
727
+ "kind": "field",
728
+ "name": "imageSrc",
729
+ "type": {
730
+ "text": "string"
731
+ },
732
+ "default": "''",
733
+ "attribute": "image-src"
734
+ },
735
+ {
736
+ "kind": "field",
737
+ "name": "imageAlt",
738
+ "type": {
739
+ "text": "string"
740
+ },
741
+ "default": "''",
742
+ "attribute": "image-alt"
743
+ },
744
+ {
745
+ "kind": "field",
746
+ "name": "imageCaption",
747
+ "type": {
748
+ "text": "string"
749
+ },
750
+ "default": "''",
751
+ "attribute": "image-caption"
752
+ },
753
+ {
754
+ "kind": "field",
755
+ "name": "inverted",
756
+ "type": {
757
+ "text": "boolean"
758
+ },
759
+ "default": "false",
760
+ "attribute": "inverted",
761
+ "reflects": true
762
+ }
763
+ ],
764
+ "attributes": [
765
+ {
766
+ "name": "title",
767
+ "type": {
768
+ "text": "string"
769
+ },
770
+ "default": "''",
771
+ "fieldName": "title"
772
+ },
773
+ {
774
+ "name": "subtitle",
775
+ "type": {
776
+ "text": "string"
777
+ },
778
+ "default": "''",
779
+ "fieldName": "subtitle"
780
+ },
781
+ {
782
+ "name": "content-src",
783
+ "type": {
784
+ "text": "string"
785
+ },
786
+ "default": "''",
787
+ "description": "URL of a Markdown file.",
788
+ "fieldName": "contentSrc"
789
+ },
790
+ {
791
+ "name": "content",
792
+ "type": {
793
+ "text": "string"
794
+ },
795
+ "default": "''",
796
+ "description": "Inline Markdown, used when `content-src` is not set.",
797
+ "fieldName": "content"
798
+ },
799
+ {
800
+ "name": "image-src",
801
+ "type": {
802
+ "text": "string"
803
+ },
804
+ "default": "''",
805
+ "fieldName": "imageSrc"
806
+ },
807
+ {
808
+ "name": "image-alt",
809
+ "type": {
810
+ "text": "string"
811
+ },
812
+ "default": "''",
813
+ "fieldName": "imageAlt"
814
+ },
815
+ {
816
+ "name": "image-caption",
817
+ "type": {
818
+ "text": "string"
819
+ },
820
+ "default": "''",
821
+ "fieldName": "imageCaption"
822
+ },
823
+ {
824
+ "name": "inverted",
825
+ "type": {
826
+ "text": "boolean"
827
+ },
828
+ "default": "false",
829
+ "fieldName": "inverted"
830
+ }
831
+ ],
832
+ "superclass": {
833
+ "name": "LitElement",
834
+ "package": "lit"
835
+ },
836
+ "tagName": "st-content-block",
837
+ "customElement": true
838
+ }
839
+ ],
840
+ "exports": [
841
+ {
842
+ "kind": "js",
843
+ "name": "ContentBlock",
844
+ "declaration": {
845
+ "name": "ContentBlock",
846
+ "module": "src/content-block/ContentBlock.ts"
847
+ }
848
+ },
849
+ {
850
+ "kind": "custom-element-definition",
851
+ "name": "st-content-block",
852
+ "declaration": {
853
+ "name": "ContentBlock",
854
+ "module": "src/content-block/ContentBlock.ts"
855
+ }
856
+ }
857
+ ]
858
+ },
673
859
  {
674
860
  "kind": "javascript-module",
675
861
  "path": "src/cookie-consent/CookieConsent.ts",
@@ -861,282 +1047,96 @@
861
1047
  },
862
1048
  {
863
1049
  "kind": "javascript-module",
864
- "path": "src/content-block/ContentBlock.ts",
1050
+ "path": "src/dropdown/Dropdown.ts",
865
1051
  "declarations": [
866
1052
  {
867
1053
  "kind": "class",
868
- "description": "A long-form article section: centered title/subtitle, an optional featured image with caption,\r\nthen Markdown body text. Ports `SankhyaUI`'s React `ContentBlock`. The body comes from\r\n`content-src` (a Markdown URL, as in the source) or an inline `content` string (added so the\r\nblock works without a fetch); `content-src` wins when both are set.",
869
- "name": "ContentBlock",
1054
+ "description": "A labeled trigger + slotted dropdown panel — nav menus (typically holding an `st-menu-grid`),\r\naction menus, anything \"click a trigger, show content under it\". A 1:1 port of `SankhyaUI`'s\r\nReact `Dropdown` (`SankhyaCMS/SankhyaUI/src/components/Dropdown`): same markup\r\n(`.menu` > `.menu-title` + `.menu-dropdown`), sizes, 0.3s slide/fade, and behavior —\r\n\r\n- only one dropdown is open at a time (the source's `DropdownProvider`, built in here, so no\r\n provider element is needed);\r\n- a mousedown outside, Escape, or a click inside the panel closes it;\r\n- an `href` trigger toggles the panel when it has content, and is a plain link when it doesn't;\r\n- `inline` opens the panel in the flow, the source's `.touch-device` layout.\r\n\r\nColors and the panel's surface come from the suite theme (the source left those to the\r\nconsumer's `className`/`itemGroupClassName` utility classes). Two source rules are left out\r\nbecause they break existing suite uses (`st-source-bar`'s site/library menus): the 100vw panel\r\nat <=768px (overflows the screen from wherever the trigger sits; the header uses `inline`\r\ninstead) and `overflow: hidden` on slotted children (clips their focus rings). Suite additions\r\nkept on top: `align`, `active`, `disabled`, `inline`, and the `dropdown-toggle` event — plus\r\n`mega` and `open-on-hover` for an okta.com-style mega menu (see `st-mega-menu`).",
1055
+ "name": "Dropdown",
870
1056
  "cssProperties": [
871
1057
  {
872
- "description": "Overrides the block's padding.",
873
- "name": "--st-content-block-padding"
1058
+ "description": "Maximum width of a `mega` panel (default `1400px`).",
1059
+ "name": "--st-mega-menu-max-width"
1060
+ },
1061
+ {
1062
+ "description": "Minimum space between a `mega` panel and the header's sides (default `1rem`).",
1063
+ "name": "--st-mega-menu-inset"
1064
+ },
1065
+ {
1066
+ "description": "Space between the header and a `mega` panel (default `12px`).",
1067
+ "name": "--st-mega-menu-gap"
1068
+ },
1069
+ {
1070
+ "description": "Corner radius of a `mega` panel (default `24px`).",
1071
+ "name": "--st-mega-menu-radius"
874
1072
  }
875
1073
  ],
876
1074
  "members": [
877
1075
  {
878
1076
  "kind": "field",
879
- "name": "title",
1077
+ "name": "openDropdown",
880
1078
  "type": {
881
- "text": "string"
1079
+ "text": "Dropdown | null"
882
1080
  },
883
- "default": "''",
884
- "attribute": "title"
1081
+ "privacy": "private",
1082
+ "static": true,
1083
+ "default": "null",
1084
+ "description": "The open dropdown, if any — the source's `DropdownContext.activeDropdown`."
885
1085
  },
886
1086
  {
887
1087
  "kind": "field",
888
- "name": "subtitle",
1088
+ "name": "label",
889
1089
  "type": {
890
1090
  "text": "string"
891
1091
  },
892
1092
  "default": "''",
893
- "attribute": "subtitle"
1093
+ "description": "Trigger label text (source: `title`, renamed because `title` is the native tooltip\r\nattribute). Leave empty to show only `slot=\"icon\"`.",
1094
+ "attribute": "label"
894
1095
  },
895
1096
  {
896
1097
  "kind": "field",
897
- "name": "contentSrc",
1098
+ "name": "href",
898
1099
  "type": {
899
1100
  "text": "string"
900
1101
  },
901
1102
  "default": "''",
902
- "description": "URL of a Markdown file.",
903
- "attribute": "content-src"
1103
+ "description": "Renders the trigger as an `<a href>`. With panel content the click toggles the panel (as in\r\nthe source); with none it navigates.",
1104
+ "attribute": "href"
904
1105
  },
905
1106
  {
906
1107
  "kind": "field",
907
- "name": "content",
1108
+ "name": "iconPosition",
908
1109
  "type": {
909
- "text": "string"
1110
+ "text": "'left' | 'right'"
910
1111
  },
911
- "default": "''",
912
- "description": "Inline Markdown, used when `content-src` is not set.",
913
- "attribute": "content"
1112
+ "default": "'left'",
1113
+ "attribute": "icon-position"
914
1114
  },
915
1115
  {
916
1116
  "kind": "field",
917
- "name": "imageSrc",
1117
+ "name": "iconSize",
918
1118
  "type": {
919
1119
  "text": "string"
920
1120
  },
921
- "default": "''",
922
- "attribute": "image-src"
1121
+ "default": "'1.2rem'",
1122
+ "description": "Inline `width`/`height` of the `slot=\"icon\"` wrapper (source: `iconSize`, default `1.2rem`).",
1123
+ "attribute": "icon-size"
923
1124
  },
924
1125
  {
925
1126
  "kind": "field",
926
- "name": "imageAlt",
1127
+ "name": "iconColor",
927
1128
  "type": {
928
1129
  "text": "string"
929
1130
  },
930
- "default": "''",
931
- "attribute": "image-alt"
1131
+ "default": "'currentColor'",
1132
+ "description": "Inline `color` of the `slot=\"icon\"` wrapper (source: `iconColor`).",
1133
+ "attribute": "icon-color"
932
1134
  },
933
1135
  {
934
1136
  "kind": "field",
935
- "name": "imageCaption",
1137
+ "name": "align",
936
1138
  "type": {
937
- "text": "string"
938
- },
939
- "default": "''",
940
- "attribute": "image-caption"
941
- },
942
- {
943
- "kind": "field",
944
- "name": "inverted",
945
- "type": {
946
- "text": "boolean"
947
- },
948
- "default": "false",
949
- "attribute": "inverted",
950
- "reflects": true
951
- }
952
- ],
953
- "attributes": [
954
- {
955
- "name": "title",
956
- "type": {
957
- "text": "string"
958
- },
959
- "default": "''",
960
- "fieldName": "title"
961
- },
962
- {
963
- "name": "subtitle",
964
- "type": {
965
- "text": "string"
966
- },
967
- "default": "''",
968
- "fieldName": "subtitle"
969
- },
970
- {
971
- "name": "content-src",
972
- "type": {
973
- "text": "string"
974
- },
975
- "default": "''",
976
- "description": "URL of a Markdown file.",
977
- "fieldName": "contentSrc"
978
- },
979
- {
980
- "name": "content",
981
- "type": {
982
- "text": "string"
983
- },
984
- "default": "''",
985
- "description": "Inline Markdown, used when `content-src` is not set.",
986
- "fieldName": "content"
987
- },
988
- {
989
- "name": "image-src",
990
- "type": {
991
- "text": "string"
992
- },
993
- "default": "''",
994
- "fieldName": "imageSrc"
995
- },
996
- {
997
- "name": "image-alt",
998
- "type": {
999
- "text": "string"
1000
- },
1001
- "default": "''",
1002
- "fieldName": "imageAlt"
1003
- },
1004
- {
1005
- "name": "image-caption",
1006
- "type": {
1007
- "text": "string"
1008
- },
1009
- "default": "''",
1010
- "fieldName": "imageCaption"
1011
- },
1012
- {
1013
- "name": "inverted",
1014
- "type": {
1015
- "text": "boolean"
1016
- },
1017
- "default": "false",
1018
- "fieldName": "inverted"
1019
- }
1020
- ],
1021
- "superclass": {
1022
- "name": "LitElement",
1023
- "package": "lit"
1024
- },
1025
- "tagName": "st-content-block",
1026
- "customElement": true
1027
- }
1028
- ],
1029
- "exports": [
1030
- {
1031
- "kind": "js",
1032
- "name": "ContentBlock",
1033
- "declaration": {
1034
- "name": "ContentBlock",
1035
- "module": "src/content-block/ContentBlock.ts"
1036
- }
1037
- },
1038
- {
1039
- "kind": "custom-element-definition",
1040
- "name": "st-content-block",
1041
- "declaration": {
1042
- "name": "ContentBlock",
1043
- "module": "src/content-block/ContentBlock.ts"
1044
- }
1045
- }
1046
- ]
1047
- },
1048
- {
1049
- "kind": "javascript-module",
1050
- "path": "src/dropdown/Dropdown.ts",
1051
- "declarations": [
1052
- {
1053
- "kind": "class",
1054
- "description": "A labeled trigger + slotted dropdown panel — nav menus (typically holding an `st-menu-grid`),\r\naction menus, anything \"click a trigger, show content under it\". A 1:1 port of `SankhyaUI`'s\r\nReact `Dropdown` (`SankhyaCMS/SankhyaUI/src/components/Dropdown`): same markup\r\n(`.menu` > `.menu-title` + `.menu-dropdown`), sizes, 0.3s slide/fade, and behavior —\r\n\r\n- only one dropdown is open at a time (the source's `DropdownProvider`, built in here, so no\r\n provider element is needed);\r\n- a mousedown outside, Escape, or a click inside the panel closes it;\r\n- an `href` trigger toggles the panel when it has content, and is a plain link when it doesn't;\r\n- `inline` opens the panel in the flow, the source's `.touch-device` layout.\r\n\r\nColors and the panel's surface come from the suite theme (the source left those to the\r\nconsumer's `className`/`itemGroupClassName` utility classes). Two source rules are left out\r\nbecause they break existing suite uses (`st-source-bar`'s site/library menus): the 100vw panel\r\nat <=768px (overflows the screen from wherever the trigger sits; the header uses `inline`\r\ninstead) and `overflow: hidden` on slotted children (clips their focus rings). Suite additions\r\nkept on top: `align`, `active`, `disabled`, `inline`, and the `dropdown-toggle` event — plus\r\n`mega` and `open-on-hover` for an okta.com-style mega menu (see `st-mega-menu`).",
1055
- "name": "Dropdown",
1056
- "cssProperties": [
1057
- {
1058
- "description": "Maximum width of a `mega` panel (default `1400px`).",
1059
- "name": "--st-mega-menu-max-width"
1060
- },
1061
- {
1062
- "description": "Minimum space between a `mega` panel and the header's sides (default `1rem`).",
1063
- "name": "--st-mega-menu-inset"
1064
- },
1065
- {
1066
- "description": "Space between the header and a `mega` panel (default `12px`).",
1067
- "name": "--st-mega-menu-gap"
1068
- },
1069
- {
1070
- "description": "Corner radius of a `mega` panel (default `24px`).",
1071
- "name": "--st-mega-menu-radius"
1072
- }
1073
- ],
1074
- "members": [
1075
- {
1076
- "kind": "field",
1077
- "name": "openDropdown",
1078
- "type": {
1079
- "text": "Dropdown | null"
1080
- },
1081
- "privacy": "private",
1082
- "static": true,
1083
- "default": "null",
1084
- "description": "The open dropdown, if any — the source's `DropdownContext.activeDropdown`."
1085
- },
1086
- {
1087
- "kind": "field",
1088
- "name": "label",
1089
- "type": {
1090
- "text": "string"
1091
- },
1092
- "default": "''",
1093
- "description": "Trigger label text (source: `title`, renamed because `title` is the native tooltip\r\nattribute). Leave empty to show only `slot=\"icon\"`.",
1094
- "attribute": "label"
1095
- },
1096
- {
1097
- "kind": "field",
1098
- "name": "href",
1099
- "type": {
1100
- "text": "string"
1101
- },
1102
- "default": "''",
1103
- "description": "Renders the trigger as an `<a href>`. With panel content the click toggles the panel (as in\r\nthe source); with none it navigates.",
1104
- "attribute": "href"
1105
- },
1106
- {
1107
- "kind": "field",
1108
- "name": "iconPosition",
1109
- "type": {
1110
- "text": "'left' | 'right'"
1111
- },
1112
- "default": "'left'",
1113
- "attribute": "icon-position"
1114
- },
1115
- {
1116
- "kind": "field",
1117
- "name": "iconSize",
1118
- "type": {
1119
- "text": "string"
1120
- },
1121
- "default": "'1.2rem'",
1122
- "description": "Inline `width`/`height` of the `slot=\"icon\"` wrapper (source: `iconSize`, default `1.2rem`).",
1123
- "attribute": "icon-size"
1124
- },
1125
- {
1126
- "kind": "field",
1127
- "name": "iconColor",
1128
- "type": {
1129
- "text": "string"
1130
- },
1131
- "default": "'currentColor'",
1132
- "description": "Inline `color` of the `slot=\"icon\"` wrapper (source: `iconColor`).",
1133
- "attribute": "icon-color"
1134
- },
1135
- {
1136
- "kind": "field",
1137
- "name": "align",
1138
- "type": {
1139
- "text": "'left' | 'right'"
1139
+ "text": "'left' | 'right'"
1140
1140
  },
1141
1141
  "default": "'left'",
1142
1142
  "description": "Which edge of the trigger the panel lines up with.",
@@ -1236,6 +1236,17 @@
1236
1236
  "attribute": "mega",
1237
1237
  "reflects": true
1238
1238
  },
1239
+ {
1240
+ "kind": "field",
1241
+ "name": "bar",
1242
+ "type": {
1243
+ "text": "boolean"
1244
+ },
1245
+ "default": "false",
1246
+ "description": "Styles a non-`mega` trigger like a mega one — a pill that turns solid accent while open — so\r\na plain dropdown (e.g. \"+ New\") lines up with mega triggers in the same header bar.",
1247
+ "attribute": "bar",
1248
+ "reflects": true
1249
+ },
1239
1250
  {
1240
1251
  "kind": "field",
1241
1252
  "name": "openOnHover",
@@ -1573,6 +1584,15 @@
1573
1584
  "description": "Mega-menu panel (okta.com style), typically holding an `st-mega-menu`: the panel spans the\r\nfull width of the nearest positioned ancestor — `st-header` — right under it, instead of\r\nhanging off the trigger. In `st-header`'s hamburger layout (`inline`) it slides in over the\r\nscreen with a Back button rather than opening as an accordion. A click inside the panel only\r\ncloses it when it lands on a link.",
1574
1585
  "fieldName": "mega"
1575
1586
  },
1587
+ {
1588
+ "name": "bar",
1589
+ "type": {
1590
+ "text": "boolean"
1591
+ },
1592
+ "default": "false",
1593
+ "description": "Styles a non-`mega` trigger like a mega one — a pill that turns solid accent while open — so\r\na plain dropdown (e.g. \"+ New\") lines up with mega triggers in the same header bar.",
1594
+ "fieldName": "bar"
1595
+ },
1576
1596
  {
1577
1597
  "name": "open-on-hover",
1578
1598
  "type": {
@@ -2107,602 +2127,665 @@
2107
2127
  },
2108
2128
  {
2109
2129
  "kind": "javascript-module",
2110
- "path": "src/footer/Footer.ts",
2130
+ "path": "src/header/Header.ts",
2111
2131
  "declarations": [
2112
2132
  {
2113
2133
  "kind": "class",
2114
- "description": "The footer, in two layouts:\r\n\r\n- **Bar** (default): a copyright line plus an optional \"powered by\" link — what the suite's\r\n authenticated apps use.\r\n- **Site**: when `columns`, `socialLinks`, `description` or `imageSrc` is set, the footer becomes a\r\n marketing-site footer — brand (logo/company name, description, social icons), link columns and a\r\n bottom bar with the copyright and \"powered by\".\r\n\r\nFires a cancelable `footer-link` event (detail `{ href }`) when an internal link is clicked.",
2115
- "name": "Footer",
2134
+ "description": "The app-shell header bar — brand (image + title, or title alone) on the left, a `slot=\"menu\"`\r\nfor primary nav (e.g. `st-dropdown`/`st-menu-grid` mega-menus, or plain links) taking the\r\nmiddle, and a `slot=\"utility\"` for account/app-switcher/theme controls on the right. Ported\r\nfrom `SankhyaUI`'s React `Header` (a separate, unrelated marketing-site project) to this\r\npackage's Lit conventions and this workspace's actual needs — that source component takes an\r\n`imageSrc` logo with no text fallback, but none of this suite's apps has a logo image today, so\r\n`title` is the primary brand prop here and `brand-image-url` is optional, mirroring\r\n`st-app-header`'s own brand/title split (this component's slotted-menu/utility shape is a\r\ndeliberately different, more generic surface than `st-app-header`'s fixed nav-links/user-menu\r\nprops — pick whichever fits a given app's header).\r\n\r\nLayout follows the source's `Header.css`: the menu starts 4rem after the brand, the utility\r\ncontrols sit after a vertical divider, and below `BREAKPOINT_TABLET` (900px here; 768px in the\r\nsource) `menu`/`utility` collapse behind a hamburger toggle into a full-screen layer under the\r\ntoggle (closes on Escape or a click inside it), where the menu's `st-dropdown`s are switched to\r\n`inline` so they open in the flow — the same two slotted elements just get repositioned by CSS\r\n(`.mobile-panel`'s `display: contents` at desktop width vs. a real fixed-position box below\r\n`BREAKPOINT_TABLET`), rather than the slots being duplicated in the template, since a shadow\r\nroot can only ever assign a given light-DOM child to the *first* slot of a given name.\r\n\r\nAlso carries an optional built-in language switcher (`languages`/`currentLanguageCode`, fires\r\n`language-change`) — ported from `st-app-header`'s own implementation verbatim rather than\r\nrebuilt, since the source `Header`'s reference story shows an equivalent flag/language `Select`\r\nas a first-class header utility. Hidden entirely when `languages` has fewer than two entries.\r\nThis component has no translation logic itself; the consuming app owns what a language `code`\r\nmeans and which content it re-renders in response.",
2135
+ "name": "Header",
2116
2136
  "members": [
2117
2137
  {
2118
2138
  "kind": "field",
2119
- "name": "inverted",
2139
+ "name": "title",
2120
2140
  "type": {
2121
- "text": "boolean"
2141
+ "text": "string"
2122
2142
  },
2123
- "default": "false",
2124
- "description": "Inverts the footer's color roles (light-on-dark instead of dark-on-light) — matches the\r\nsource component's `inverted` (from its shared `BaseProps`), same as `st-header`'s.",
2125
- "attribute": "inverted",
2126
- "reflects": true
2143
+ "default": "''",
2144
+ "attribute": "title"
2127
2145
  },
2128
2146
  {
2129
2147
  "kind": "field",
2130
- "name": "companyName",
2148
+ "name": "brandImageUrl",
2131
2149
  "type": {
2132
2150
  "text": "string"
2133
2151
  },
2134
2152
  "default": "''",
2135
- "description": "Used to build the default `copyright` line (`© {year} {companyName}`) when `copyright` isn't set explicitly.",
2136
- "attribute": "company-name"
2153
+ "description": "Optional logo image URL, shown before `title`. Omitted entirely when empty — none of this suite's apps has one today. Matches the source component's `imageSrc` (renamed here to pair with `title`/`logoHref`, since this component's only image use is the brand mark).",
2154
+ "attribute": "brand-image-url"
2137
2155
  },
2138
2156
  {
2139
2157
  "kind": "field",
2140
- "name": "copyright",
2158
+ "name": "altText",
2141
2159
  "type": {
2142
2160
  "text": "string"
2143
2161
  },
2144
- "default": "''",
2145
- "description": "Overrides the default computed copyright line entirely.",
2146
- "attribute": "copyright"
2162
+ "default": "'Logo'",
2163
+ "description": "`alt` text for the brand image — matches the source component's `altText` (default `'Logo'`).",
2164
+ "attribute": "alt-text"
2147
2165
  },
2148
2166
  {
2149
2167
  "kind": "field",
2150
- "name": "poweredBy",
2168
+ "name": "logoHref",
2151
2169
  "type": {
2152
2170
  "text": "string"
2153
2171
  },
2154
2172
  "default": "''",
2155
- "attribute": "powered-by"
2173
+ "description": "Wraps the brand in an `<a>` when set (e.g. `/`); a plain non-link `<div>` otherwise.",
2174
+ "attribute": "logoHref"
2156
2175
  },
2157
2176
  {
2158
2177
  "kind": "field",
2159
- "name": "poweredByLink",
2178
+ "name": "logoTarget",
2160
2179
  "type": {
2161
2180
  "text": "string"
2162
2181
  },
2163
- "default": "''",
2164
- "attribute": "powered-by-link"
2165
- },
2182
+ "default": "'_self'",
2183
+ "description": "`target` for the brand `<a>` — matches the source component's `logoTarget` (default `_self`). No effect when `logoHref` isn't set.",
2184
+ "attribute": "logo-target"
2185
+ },
2166
2186
  {
2167
2187
  "kind": "field",
2168
- "name": "version",
2188
+ "name": "logoClassName",
2169
2189
  "type": {
2170
2190
  "text": "string"
2171
2191
  },
2172
2192
  "default": "''",
2173
- "description": "App version, rendered as `v{version}` after the copyright line — for apps that show their own\r\nversion in the footer rather than the header title.",
2174
- "attribute": "version"
2193
+ "description": "Extra class(es) appended to the brand link/div — matches the source component's `logoClassName`.",
2194
+ "attribute": "logo-class-name"
2175
2195
  },
2176
2196
  {
2177
2197
  "kind": "field",
2178
- "name": "imageSrc",
2198
+ "name": "inverted",
2179
2199
  "type": {
2180
- "text": "string"
2200
+ "text": "boolean"
2181
2201
  },
2182
- "default": "''",
2183
- "description": "Logo shown in the brand block (site layout).",
2184
- "attribute": "image-src"
2202
+ "default": "false",
2203
+ "description": "Inverts the header's color roles (light-on-dark instead of dark-on-light) — matches the\r\nsource component's `inverted` (from its shared `BaseProps`).",
2204
+ "attribute": "inverted",
2205
+ "reflects": true
2185
2206
  },
2186
2207
  {
2187
2208
  "kind": "field",
2188
- "name": "description",
2209
+ "name": "sticky",
2189
2210
  "type": {
2190
- "text": "string"
2211
+ "text": "boolean"
2191
2212
  },
2192
- "default": "''",
2193
- "description": "Short blurb under the logo (site layout).",
2194
- "attribute": "description"
2213
+ "default": "false",
2214
+ "attribute": "sticky",
2215
+ "reflects": true
2195
2216
  },
2196
2217
  {
2197
2218
  "kind": "field",
2198
- "name": "columns",
2219
+ "name": "transparent",
2199
2220
  "type": {
2200
- "text": "FooterColumn[]"
2221
+ "text": "boolean"
2201
2222
  },
2202
- "default": "[]",
2203
- "description": "Link columns (site layout)."
2223
+ "default": "false",
2224
+ "description": "Fixes the header over the top of the page and makes it see-through, with light text\r\n(`--st-header-transparent-color`), until the page scrolls past `scroll-threshold` — for a\r\nheader laid over a dark hero. It then takes its normal background and a shadow. The page\r\ncontent starts under it, so the first section should leave room for the 64px bar.",
2225
+ "attribute": "transparent",
2226
+ "reflects": true
2204
2227
  },
2205
2228
  {
2206
2229
  "kind": "field",
2207
- "name": "socialLinks",
2230
+ "name": "hideOnScroll",
2208
2231
  "type": {
2209
- "text": "FooterSocialLink[]"
2232
+ "text": "boolean"
2210
2233
  },
2211
- "default": "[]",
2212
- "description": "Social icon links under the description (site layout)."
2234
+ "default": "false",
2235
+ "description": "Slides the header out of view while the page scrolls down and back in when it scrolls up.",
2236
+ "attribute": "hide-on-scroll",
2237
+ "reflects": true
2213
2238
  },
2214
2239
  {
2215
2240
  "kind": "field",
2216
- "name": "isSite",
2241
+ "name": "scrollThreshold",
2217
2242
  "type": {
2218
- "text": "boolean"
2243
+ "text": "number"
2219
2244
  },
2220
- "privacy": "private",
2221
- "readonly": true
2245
+ "default": "8",
2246
+ "description": "Scroll distance in px after which the header counts as `scrolled`.",
2247
+ "attribute": "scroll-threshold"
2222
2248
  },
2223
2249
  {
2224
2250
  "kind": "field",
2225
- "name": "resolvedCopyright",
2251
+ "name": "scrolled",
2226
2252
  "type": {
2227
- "text": "string"
2253
+ "text": "boolean"
2228
2254
  },
2229
- "privacy": "private",
2230
- "readonly": true
2255
+ "default": "false",
2256
+ "description": "True once the page has scrolled past `scroll-threshold`; reflected so pages can style `st-header[scrolled]`. Set by the header, never from outside.",
2257
+ "attribute": "scrolled",
2258
+ "reflects": true
2231
2259
  },
2232
2260
  {
2233
- "kind": "method",
2234
- "name": "onLinkClick",
2235
- "privacy": "private",
2236
- "return": {
2237
- "type": {
2238
- "text": "void"
2239
- }
2261
+ "kind": "field",
2262
+ "name": "scrollHidden",
2263
+ "type": {
2264
+ "text": "boolean"
2240
2265
  },
2241
- "parameters": [
2242
- {
2243
- "name": "event",
2244
- "type": {
2245
- "text": "MouseEvent"
2246
- }
2247
- },
2248
- {
2249
- "name": "href",
2250
- "type": {
2251
- "text": "string"
2252
- }
2253
- }
2254
- ]
2266
+ "default": "false",
2267
+ "description": "True while `hide-on-scroll` has slid the header away. Set by the header, never from outside.",
2268
+ "attribute": "scroll-hidden",
2269
+ "reflects": true
2255
2270
  },
2256
2271
  {
2257
- "kind": "method",
2258
- "name": "renderLink",
2272
+ "kind": "field",
2273
+ "name": "lastScrollY",
2274
+ "type": {
2275
+ "text": "number"
2276
+ },
2259
2277
  "privacy": "private",
2260
- "parameters": [
2261
- {
2262
- "name": "link",
2263
- "type": {
2264
- "text": "FooterLink"
2265
- }
2266
- }
2267
- ]
2278
+ "default": "0"
2268
2279
  },
2269
2280
  {
2270
- "kind": "method",
2271
- "name": "renderPoweredBy",
2272
- "privacy": "private"
2281
+ "kind": "field",
2282
+ "name": "scrollFrame",
2283
+ "type": {
2284
+ "text": "number"
2285
+ },
2286
+ "privacy": "private",
2287
+ "default": "0"
2273
2288
  },
2274
2289
  {
2275
- "kind": "method",
2276
- "name": "renderSite",
2290
+ "kind": "field",
2291
+ "name": "onScroll",
2277
2292
  "privacy": "private"
2278
- }
2279
- ],
2280
- "attributes": [
2293
+ },
2281
2294
  {
2282
- "name": "inverted",
2295
+ "kind": "field",
2296
+ "name": "languages",
2283
2297
  "type": {
2284
- "text": "boolean"
2298
+ "text": "{ code: string; label: string }[]"
2285
2299
  },
2286
- "default": "false",
2287
- "description": "Inverts the footer's color roles (light-on-dark instead of dark-on-light) — matches the\r\nsource component's `inverted` (from its shared `BaseProps`), same as `st-header`'s.",
2288
- "fieldName": "inverted"
2300
+ "default": "[]",
2301
+ "description": "Language switcher options, e.g. `[{ code: 'en', label: 'English' }, ...]` — hidden entirely\r\nwhen empty or when only one language is offered (same convention as `st-app-header`'s\r\n`languages`, which this reuses verbatim). This component has no translation logic itself —\r\nselecting an option fires `language-change` (detail: `{ code }`), and the consuming app owns\r\nwhat `code` actually means and which content it re-renders."
2289
2302
  },
2290
2303
  {
2291
- "name": "company-name",
2304
+ "kind": "field",
2305
+ "name": "currentLanguageCode",
2292
2306
  "type": {
2293
2307
  "text": "string"
2294
2308
  },
2295
2309
  "default": "''",
2296
- "description": "Used to build the default `copyright` line (`© {year} {companyName}`) when `copyright` isn't set explicitly.",
2297
- "fieldName": "companyName"
2310
+ "attribute": "current-language-code"
2298
2311
  },
2299
2312
  {
2300
- "name": "copyright",
2313
+ "kind": "field",
2314
+ "name": "languageMenuLabel",
2301
2315
  "type": {
2302
2316
  "text": "string"
2303
2317
  },
2304
- "default": "''",
2305
- "description": "Overrides the default computed copyright line entirely.",
2306
- "fieldName": "copyright"
2318
+ "default": "'Language'",
2319
+ "attribute": "language-menu-label"
2307
2320
  },
2308
2321
  {
2309
- "name": "powered-by",
2322
+ "kind": "field",
2323
+ "name": "mobileOpen",
2310
2324
  "type": {
2311
- "text": "string"
2325
+ "text": "boolean"
2312
2326
  },
2313
- "default": "''",
2314
- "fieldName": "poweredBy"
2327
+ "default": "false",
2328
+ "description": "Internal open/closed state for the mobile nav overlay, reflected to an attribute purely so\r\nthe `:host([mobile-open])` CSS selector above can react to it — not meant to be set from\r\noutside.",
2329
+ "attribute": "mobile-open",
2330
+ "reflects": true
2315
2331
  },
2316
2332
  {
2317
- "name": "powered-by-link",
2333
+ "kind": "field",
2334
+ "name": "compact",
2318
2335
  "type": {
2319
- "text": "string"
2336
+ "text": "boolean"
2320
2337
  },
2321
- "default": "''",
2322
- "fieldName": "poweredByLink"
2338
+ "default": "false",
2339
+ "description": "True while the menu doesn't fit the bar at the current width: the header then shows the same\r\nhamburger layout it uses on a narrow screen. Set by `evaluateFit`, never from outside.",
2340
+ "attribute": "compact",
2341
+ "reflects": true
2323
2342
  },
2324
2343
  {
2325
- "name": "version",
2344
+ "kind": "field",
2345
+ "name": "languageMenuOpen",
2326
2346
  "type": {
2327
- "text": "string"
2347
+ "text": "boolean"
2328
2348
  },
2329
- "default": "''",
2330
- "description": "App version, rendered as `v{version}` after the copyright line — for apps that show their own\r\nversion in the footer rather than the header title.",
2331
- "fieldName": "version"
2349
+ "privacy": "private",
2350
+ "default": "false"
2332
2351
  },
2333
2352
  {
2334
- "name": "image-src",
2353
+ "kind": "field",
2354
+ "name": "hasUtility",
2335
2355
  "type": {
2336
- "text": "string"
2356
+ "text": "boolean"
2357
+ },
2358
+ "privacy": "private",
2359
+ "default": "false",
2360
+ "description": "Whether `slot=\"utility\"` has content — an empty utility row (and its divider) is hidden."
2361
+ },
2362
+ {
2363
+ "kind": "field",
2364
+ "name": "resizeObserver",
2365
+ "type": {
2366
+ "text": "ResizeObserver | undefined"
2367
+ },
2368
+ "privacy": "private"
2369
+ },
2370
+ {
2371
+ "kind": "field",
2372
+ "name": "narrowQuery",
2373
+ "type": {
2374
+ "text": "MediaQueryList | undefined"
2375
+ },
2376
+ "privacy": "private",
2377
+ "description": "Matches below BREAKPOINT_TABLET, where the hamburger layout is always on."
2378
+ },
2379
+ {
2380
+ "kind": "field",
2381
+ "name": "inlinedDropdowns",
2382
+ "privacy": "private",
2383
+ "default": "new Set<HTMLElement & { inline: boolean; open: boolean }>()",
2384
+ "description": "The dropdowns this header switched to `inline` — only these are switched back, so a caller's\r\nown `inline` setting is left alone."
2385
+ },
2386
+ {
2387
+ "kind": "field",
2388
+ "name": "syncInlineDropdowns",
2389
+ "privacy": "private",
2390
+ "description": "While the hamburger layout is on, the dropdowns in the header open in the flow of the\r\nfull-screen panel instead of floating over it (SankhyaUI's touch-device layout)."
2391
+ },
2392
+ {
2393
+ "kind": "field",
2394
+ "name": "onUtilitySlotChange",
2395
+ "privacy": "private"
2396
+ },
2397
+ {
2398
+ "kind": "field",
2399
+ "name": "onMenuSlotChange",
2400
+ "privacy": "private"
2401
+ },
2402
+ {
2403
+ "kind": "field",
2404
+ "name": "collapsedAtWidth",
2405
+ "type": {
2406
+ "text": "number"
2407
+ },
2408
+ "privacy": "private",
2409
+ "default": "0",
2410
+ "description": "The bar width at which the menu last overflowed — the bar only expands again once it is\r\nclearly wider than this, so it can't flip back and forth right at the threshold."
2411
+ },
2412
+ {
2413
+ "kind": "field",
2414
+ "name": "evaluateFit",
2415
+ "privacy": "private",
2416
+ "description": "Collapses to the hamburger layout when the slotted menu overflows its row, and expands again\r\nonce there is room. The collapsed layout hides the menu, so the room it needs can't be\r\nmeasured then; the width remembered when it collapsed stands in for it."
2417
+ },
2418
+ {
2419
+ "kind": "method",
2420
+ "name": "menuOverflows",
2421
+ "privacy": "private",
2422
+ "return": {
2423
+ "type": {
2424
+ "text": "boolean"
2425
+ }
2426
+ },
2427
+ "description": "Whether the visible menu items reach past the right edge of the menu row. Measured from the\r\nitems' own boxes (the slotted elements and their direct children), not the row's scrollWidth:\r\na closed dropdown's absolutely positioned panel also counts towards scrollWidth, which would\r\nreport overflow at any width."
2428
+ },
2429
+ {
2430
+ "kind": "field",
2431
+ "name": "lightDomObserver",
2432
+ "type": {
2433
+ "text": "MutationObserver | undefined"
2434
+ },
2435
+ "privacy": "private"
2436
+ },
2437
+ {
2438
+ "kind": "field",
2439
+ "name": "closeOnEscape",
2440
+ "privacy": "private"
2441
+ },
2442
+ {
2443
+ "kind": "field",
2444
+ "name": "closeLanguageMenuOnOutsideClick",
2445
+ "privacy": "private"
2446
+ },
2447
+ {
2448
+ "kind": "method",
2449
+ "name": "renderLanguageMenu",
2450
+ "privacy": "private"
2451
+ },
2452
+ {
2453
+ "kind": "method",
2454
+ "name": "onLanguageSelect",
2455
+ "privacy": "private",
2456
+ "return": {
2457
+ "type": {
2458
+ "text": "void"
2459
+ }
2337
2460
  },
2338
- "default": "''",
2339
- "description": "Logo shown in the brand block (site layout).",
2340
- "fieldName": "imageSrc"
2461
+ "parameters": [
2462
+ {
2463
+ "name": "code",
2464
+ "type": {
2465
+ "text": "string"
2466
+ }
2467
+ }
2468
+ ]
2341
2469
  },
2342
2470
  {
2343
- "name": "description",
2471
+ "kind": "method",
2472
+ "name": "renderBrand",
2473
+ "privacy": "private"
2474
+ }
2475
+ ],
2476
+ "events": [
2477
+ {
2478
+ "name": "language-change",
2344
2479
  "type": {
2345
- "text": "string"
2346
- },
2347
- "default": "''",
2348
- "description": "Short blurb under the logo (site layout).",
2349
- "fieldName": "description"
2480
+ "text": "CustomEvent"
2481
+ }
2350
2482
  }
2351
2483
  ],
2352
- "superclass": {
2353
- "name": "LitElement",
2354
- "package": "lit"
2355
- },
2356
- "tagName": "st-footer",
2357
- "customElement": true
2358
- }
2359
- ],
2360
- "exports": [
2361
- {
2362
- "kind": "js",
2363
- "name": "Footer",
2364
- "declaration": {
2365
- "name": "Footer",
2366
- "module": "src/footer/Footer.ts"
2367
- }
2368
- },
2369
- {
2370
- "kind": "custom-element-definition",
2371
- "name": "st-footer",
2372
- "declaration": {
2373
- "name": "Footer",
2374
- "module": "src/footer/Footer.ts"
2375
- }
2376
- }
2377
- ]
2378
- },
2379
- {
2380
- "kind": "javascript-module",
2381
- "path": "src/header/Header.ts",
2382
- "declarations": [
2383
- {
2384
- "kind": "class",
2385
- "description": "The app-shell header bar — brand (image + title, or title alone) on the left, a `slot=\"menu\"`\r\nfor primary nav (e.g. `st-dropdown`/`st-menu-grid` mega-menus, or plain links) taking the\r\nmiddle, and a `slot=\"utility\"` for account/app-switcher/theme controls on the right. Ported\r\nfrom `SankhyaUI`'s React `Header` (a separate, unrelated marketing-site project) to this\r\npackage's Lit conventions and this workspace's actual needs — that source component takes an\r\n`imageSrc` logo with no text fallback, but none of this suite's apps has a logo image today, so\r\n`title` is the primary brand prop here and `brand-image-url` is optional, mirroring\r\n`st-app-header`'s own brand/title split (this component's slotted-menu/utility shape is a\r\ndeliberately different, more generic surface than `st-app-header`'s fixed nav-links/user-menu\r\nprops — pick whichever fits a given app's header).\r\n\r\nLayout follows the source's `Header.css`: the menu starts 4rem after the brand, the utility\r\ncontrols sit after a vertical divider, and below `BREAKPOINT_TABLET` (900px here; 768px in the\r\nsource) `menu`/`utility` collapse behind a hamburger toggle into a full-screen layer under the\r\ntoggle (closes on Escape or a click inside it), where the menu's `st-dropdown`s are switched to\r\n`inline` so they open in the flow — the same two slotted elements just get repositioned by CSS\r\n(`.mobile-panel`'s `display: contents` at desktop width vs. a real fixed-position box below\r\n`BREAKPOINT_TABLET`), rather than the slots being duplicated in the template, since a shadow\r\nroot can only ever assign a given light-DOM child to the *first* slot of a given name.\r\n\r\nAlso carries an optional built-in language switcher (`languages`/`currentLanguageCode`, fires\r\n`language-change`) — ported from `st-app-header`'s own implementation verbatim rather than\r\nrebuilt, since the source `Header`'s reference story shows an equivalent flag/language `Select`\r\nas a first-class header utility. Hidden entirely when `languages` has fewer than two entries.\r\nThis component has no translation logic itself; the consuming app owns what a language `code`\r\nmeans and which content it re-renders in response.",
2386
- "name": "Header",
2387
- "members": [
2484
+ "attributes": [
2388
2485
  {
2389
- "kind": "field",
2390
2486
  "name": "title",
2391
2487
  "type": {
2392
2488
  "text": "string"
2393
2489
  },
2394
2490
  "default": "''",
2395
- "attribute": "title"
2491
+ "fieldName": "title"
2396
2492
  },
2397
2493
  {
2398
- "kind": "field",
2399
- "name": "brandImageUrl",
2494
+ "name": "brand-image-url",
2400
2495
  "type": {
2401
2496
  "text": "string"
2402
2497
  },
2403
2498
  "default": "''",
2404
2499
  "description": "Optional logo image URL, shown before `title`. Omitted entirely when empty — none of this suite's apps has one today. Matches the source component's `imageSrc` (renamed here to pair with `title`/`logoHref`, since this component's only image use is the brand mark).",
2405
- "attribute": "brand-image-url"
2500
+ "fieldName": "brandImageUrl"
2406
2501
  },
2407
2502
  {
2408
- "kind": "field",
2409
- "name": "altText",
2503
+ "name": "alt-text",
2410
2504
  "type": {
2411
2505
  "text": "string"
2412
2506
  },
2413
2507
  "default": "'Logo'",
2414
2508
  "description": "`alt` text for the brand image — matches the source component's `altText` (default `'Logo'`).",
2415
- "attribute": "alt-text"
2509
+ "fieldName": "altText"
2416
2510
  },
2417
2511
  {
2418
- "kind": "field",
2419
2512
  "name": "logoHref",
2420
2513
  "type": {
2421
2514
  "text": "string"
2422
2515
  },
2423
2516
  "default": "''",
2424
2517
  "description": "Wraps the brand in an `<a>` when set (e.g. `/`); a plain non-link `<div>` otherwise.",
2425
- "attribute": "logoHref"
2518
+ "fieldName": "logoHref"
2426
2519
  },
2427
2520
  {
2428
- "kind": "field",
2429
- "name": "logoTarget",
2521
+ "name": "logo-target",
2430
2522
  "type": {
2431
2523
  "text": "string"
2432
2524
  },
2433
2525
  "default": "'_self'",
2434
2526
  "description": "`target` for the brand `<a>` — matches the source component's `logoTarget` (default `_self`). No effect when `logoHref` isn't set.",
2435
- "attribute": "logo-target"
2527
+ "fieldName": "logoTarget"
2436
2528
  },
2437
2529
  {
2438
- "kind": "field",
2439
- "name": "logoClassName",
2530
+ "name": "logo-class-name",
2440
2531
  "type": {
2441
2532
  "text": "string"
2442
2533
  },
2443
2534
  "default": "''",
2444
2535
  "description": "Extra class(es) appended to the brand link/div — matches the source component's `logoClassName`.",
2445
- "attribute": "logo-class-name"
2536
+ "fieldName": "logoClassName"
2446
2537
  },
2447
2538
  {
2448
- "kind": "field",
2449
2539
  "name": "inverted",
2450
2540
  "type": {
2451
2541
  "text": "boolean"
2452
2542
  },
2453
2543
  "default": "false",
2454
2544
  "description": "Inverts the header's color roles (light-on-dark instead of dark-on-light) — matches the\r\nsource component's `inverted` (from its shared `BaseProps`).",
2455
- "attribute": "inverted",
2456
- "reflects": true
2545
+ "fieldName": "inverted"
2457
2546
  },
2458
2547
  {
2459
- "kind": "field",
2460
2548
  "name": "sticky",
2461
2549
  "type": {
2462
2550
  "text": "boolean"
2463
2551
  },
2464
2552
  "default": "false",
2465
- "attribute": "sticky",
2466
- "reflects": true
2553
+ "fieldName": "sticky"
2467
2554
  },
2468
2555
  {
2469
- "kind": "field",
2470
2556
  "name": "transparent",
2471
2557
  "type": {
2472
2558
  "text": "boolean"
2473
2559
  },
2474
2560
  "default": "false",
2475
2561
  "description": "Fixes the header over the top of the page and makes it see-through, with light text\r\n(`--st-header-transparent-color`), until the page scrolls past `scroll-threshold` — for a\r\nheader laid over a dark hero. It then takes its normal background and a shadow. The page\r\ncontent starts under it, so the first section should leave room for the 64px bar.",
2476
- "attribute": "transparent",
2477
- "reflects": true
2562
+ "fieldName": "transparent"
2478
2563
  },
2479
2564
  {
2480
- "kind": "field",
2481
- "name": "hideOnScroll",
2565
+ "name": "hide-on-scroll",
2482
2566
  "type": {
2483
2567
  "text": "boolean"
2484
2568
  },
2485
2569
  "default": "false",
2486
2570
  "description": "Slides the header out of view while the page scrolls down and back in when it scrolls up.",
2487
- "attribute": "hide-on-scroll",
2488
- "reflects": true
2571
+ "fieldName": "hideOnScroll"
2489
2572
  },
2490
2573
  {
2491
- "kind": "field",
2492
- "name": "scrollThreshold",
2574
+ "name": "scroll-threshold",
2493
2575
  "type": {
2494
2576
  "text": "number"
2495
2577
  },
2496
2578
  "default": "8",
2497
2579
  "description": "Scroll distance in px after which the header counts as `scrolled`.",
2498
- "attribute": "scroll-threshold"
2580
+ "fieldName": "scrollThreshold"
2499
2581
  },
2500
2582
  {
2501
- "kind": "field",
2502
2583
  "name": "scrolled",
2503
2584
  "type": {
2504
2585
  "text": "boolean"
2505
2586
  },
2506
2587
  "default": "false",
2507
2588
  "description": "True once the page has scrolled past `scroll-threshold`; reflected so pages can style `st-header[scrolled]`. Set by the header, never from outside.",
2508
- "attribute": "scrolled",
2509
- "reflects": true
2589
+ "fieldName": "scrolled"
2510
2590
  },
2511
2591
  {
2512
- "kind": "field",
2513
- "name": "scrollHidden",
2592
+ "name": "scroll-hidden",
2514
2593
  "type": {
2515
2594
  "text": "boolean"
2516
2595
  },
2517
2596
  "default": "false",
2518
2597
  "description": "True while `hide-on-scroll` has slid the header away. Set by the header, never from outside.",
2519
- "attribute": "scroll-hidden",
2520
- "reflects": true
2521
- },
2522
- {
2523
- "kind": "field",
2524
- "name": "lastScrollY",
2525
- "type": {
2526
- "text": "number"
2527
- },
2528
- "privacy": "private",
2529
- "default": "0"
2530
- },
2531
- {
2532
- "kind": "field",
2533
- "name": "scrollFrame",
2534
- "type": {
2535
- "text": "number"
2536
- },
2537
- "privacy": "private",
2538
- "default": "0"
2539
- },
2540
- {
2541
- "kind": "field",
2542
- "name": "onScroll",
2543
- "privacy": "private"
2544
- },
2545
- {
2546
- "kind": "field",
2547
- "name": "languages",
2548
- "type": {
2549
- "text": "{ code: string; label: string }[]"
2550
- },
2551
- "default": "[]",
2552
- "description": "Language switcher options, e.g. `[{ code: 'en', label: 'English' }, ...]` — hidden entirely\r\nwhen empty or when only one language is offered (same convention as `st-app-header`'s\r\n`languages`, which this reuses verbatim). This component has no translation logic itself —\r\nselecting an option fires `language-change` (detail: `{ code }`), and the consuming app owns\r\nwhat `code` actually means and which content it re-renders."
2598
+ "fieldName": "scrollHidden"
2553
2599
  },
2554
2600
  {
2555
- "kind": "field",
2556
- "name": "currentLanguageCode",
2601
+ "name": "current-language-code",
2557
2602
  "type": {
2558
2603
  "text": "string"
2559
2604
  },
2560
2605
  "default": "''",
2561
- "attribute": "current-language-code"
2606
+ "fieldName": "currentLanguageCode"
2562
2607
  },
2563
2608
  {
2564
- "kind": "field",
2565
- "name": "languageMenuLabel",
2609
+ "name": "language-menu-label",
2566
2610
  "type": {
2567
2611
  "text": "string"
2568
2612
  },
2569
2613
  "default": "'Language'",
2570
- "attribute": "language-menu-label"
2614
+ "fieldName": "languageMenuLabel"
2571
2615
  },
2572
2616
  {
2573
- "kind": "field",
2574
- "name": "mobileOpen",
2617
+ "name": "mobile-open",
2575
2618
  "type": {
2576
2619
  "text": "boolean"
2577
2620
  },
2578
2621
  "default": "false",
2579
2622
  "description": "Internal open/closed state for the mobile nav overlay, reflected to an attribute purely so\r\nthe `:host([mobile-open])` CSS selector above can react to it — not meant to be set from\r\noutside.",
2580
- "attribute": "mobile-open",
2581
- "reflects": true
2623
+ "fieldName": "mobileOpen"
2582
2624
  },
2583
2625
  {
2584
- "kind": "field",
2585
2626
  "name": "compact",
2586
2627
  "type": {
2587
2628
  "text": "boolean"
2588
2629
  },
2589
2630
  "default": "false",
2590
2631
  "description": "True while the menu doesn't fit the bar at the current width: the header then shows the same\r\nhamburger layout it uses on a narrow screen. Set by `evaluateFit`, never from outside.",
2591
- "attribute": "compact",
2592
- "reflects": true
2593
- },
2594
- {
2595
- "kind": "field",
2596
- "name": "languageMenuOpen",
2597
- "type": {
2598
- "text": "boolean"
2599
- },
2600
- "privacy": "private",
2601
- "default": "false"
2602
- },
2632
+ "fieldName": "compact"
2633
+ }
2634
+ ],
2635
+ "superclass": {
2636
+ "name": "LitElement",
2637
+ "package": "lit"
2638
+ },
2639
+ "tagName": "st-header",
2640
+ "customElement": true
2641
+ }
2642
+ ],
2643
+ "exports": [
2644
+ {
2645
+ "kind": "js",
2646
+ "name": "Header",
2647
+ "declaration": {
2648
+ "name": "Header",
2649
+ "module": "src/header/Header.ts"
2650
+ }
2651
+ },
2652
+ {
2653
+ "kind": "custom-element-definition",
2654
+ "name": "st-header",
2655
+ "declaration": {
2656
+ "name": "Header",
2657
+ "module": "src/header/Header.ts"
2658
+ }
2659
+ }
2660
+ ]
2661
+ },
2662
+ {
2663
+ "kind": "javascript-module",
2664
+ "path": "src/footer/Footer.ts",
2665
+ "declarations": [
2666
+ {
2667
+ "kind": "class",
2668
+ "description": "The footer, in two layouts:\r\n\r\n- **Bar** (default): a copyright line plus an optional \"powered by\" link — what the suite's\r\n authenticated apps use.\r\n- **Site**: when `columns`, `socialLinks`, `description` or `imageSrc` is set, the footer becomes a\r\n marketing-site footer — brand (logo/company name, description, social icons), link columns and a\r\n bottom bar with the copyright and \"powered by\".\r\n\r\nFires a cancelable `footer-link` event (detail `{ href }`) when an internal link is clicked.",
2669
+ "name": "Footer",
2670
+ "members": [
2603
2671
  {
2604
2672
  "kind": "field",
2605
- "name": "hasUtility",
2673
+ "name": "inverted",
2606
2674
  "type": {
2607
2675
  "text": "boolean"
2608
2676
  },
2609
- "privacy": "private",
2610
2677
  "default": "false",
2611
- "description": "Whether `slot=\"utility\"` has content — an empty utility row (and its divider) is hidden."
2678
+ "description": "Inverts the footer's color roles (light-on-dark instead of dark-on-light) — matches the\r\nsource component's `inverted` (from its shared `BaseProps`), same as `st-header`'s.",
2679
+ "attribute": "inverted",
2680
+ "reflects": true
2612
2681
  },
2613
2682
  {
2614
2683
  "kind": "field",
2615
- "name": "resizeObserver",
2684
+ "name": "companyName",
2616
2685
  "type": {
2617
- "text": "ResizeObserver | undefined"
2686
+ "text": "string"
2618
2687
  },
2619
- "privacy": "private"
2688
+ "default": "''",
2689
+ "description": "Used to build the default `copyright` line (`© {year} {companyName}`) when `copyright` isn't set explicitly.",
2690
+ "attribute": "company-name"
2620
2691
  },
2621
2692
  {
2622
2693
  "kind": "field",
2623
- "name": "narrowQuery",
2694
+ "name": "copyright",
2624
2695
  "type": {
2625
- "text": "MediaQueryList | undefined"
2696
+ "text": "string"
2626
2697
  },
2627
- "privacy": "private",
2628
- "description": "Matches below BREAKPOINT_TABLET, where the hamburger layout is always on."
2629
- },
2630
- {
2631
- "kind": "field",
2632
- "name": "inlinedDropdowns",
2633
- "privacy": "private",
2634
- "default": "new Set<HTMLElement & { inline: boolean; open: boolean }>()",
2635
- "description": "The dropdowns this header switched to `inline` — only these are switched back, so a caller's\r\nown `inline` setting is left alone."
2698
+ "default": "''",
2699
+ "description": "Overrides the default computed copyright line entirely.",
2700
+ "attribute": "copyright"
2636
2701
  },
2637
2702
  {
2638
2703
  "kind": "field",
2639
- "name": "syncInlineDropdowns",
2640
- "privacy": "private",
2641
- "description": "While the hamburger layout is on, the dropdowns in the header open in the flow of the\r\nfull-screen panel instead of floating over it (SankhyaUI's touch-device layout)."
2704
+ "name": "poweredBy",
2705
+ "type": {
2706
+ "text": "string"
2707
+ },
2708
+ "default": "''",
2709
+ "attribute": "powered-by"
2642
2710
  },
2643
2711
  {
2644
2712
  "kind": "field",
2645
- "name": "onUtilitySlotChange",
2646
- "privacy": "private"
2713
+ "name": "poweredByLink",
2714
+ "type": {
2715
+ "text": "string"
2716
+ },
2717
+ "default": "''",
2718
+ "attribute": "powered-by-link"
2647
2719
  },
2648
2720
  {
2649
2721
  "kind": "field",
2650
- "name": "onMenuSlotChange",
2651
- "privacy": "private"
2722
+ "name": "version",
2723
+ "type": {
2724
+ "text": "string"
2725
+ },
2726
+ "default": "''",
2727
+ "description": "App version, rendered as `v{version}` after the copyright line — for apps that show their own\r\nversion in the footer rather than the header title.",
2728
+ "attribute": "version"
2652
2729
  },
2653
2730
  {
2654
2731
  "kind": "field",
2655
- "name": "collapsedAtWidth",
2732
+ "name": "imageSrc",
2656
2733
  "type": {
2657
- "text": "number"
2734
+ "text": "string"
2658
2735
  },
2659
- "privacy": "private",
2660
- "default": "0",
2661
- "description": "The bar width at which the menu last overflowed — the bar only expands again once it is\r\nclearly wider than this, so it can't flip back and forth right at the threshold."
2736
+ "default": "''",
2737
+ "description": "Logo shown in the brand block (site layout).",
2738
+ "attribute": "image-src"
2662
2739
  },
2663
2740
  {
2664
2741
  "kind": "field",
2665
- "name": "evaluateFit",
2666
- "privacy": "private",
2667
- "description": "Collapses to the hamburger layout when the slotted menu overflows its row, and expands again\r\nonce there is room. The collapsed layout hides the menu, so the room it needs can't be\r\nmeasured then; the width remembered when it collapsed stands in for it."
2668
- },
2669
- {
2670
- "kind": "method",
2671
- "name": "menuOverflows",
2672
- "privacy": "private",
2673
- "return": {
2674
- "type": {
2675
- "text": "boolean"
2676
- }
2742
+ "name": "description",
2743
+ "type": {
2744
+ "text": "string"
2677
2745
  },
2678
- "description": "Whether the visible menu items reach past the right edge of the menu row. Measured from the\r\nitems' own boxes (the slotted elements and their direct children), not the row's scrollWidth:\r\na closed dropdown's absolutely positioned panel also counts towards scrollWidth, which would\r\nreport overflow at any width."
2746
+ "default": "''",
2747
+ "description": "Short blurb under the logo (site layout).",
2748
+ "attribute": "description"
2679
2749
  },
2680
2750
  {
2681
2751
  "kind": "field",
2682
- "name": "lightDomObserver",
2752
+ "name": "columns",
2683
2753
  "type": {
2684
- "text": "MutationObserver | undefined"
2754
+ "text": "FooterColumn[]"
2685
2755
  },
2686
- "privacy": "private"
2756
+ "default": "[]",
2757
+ "description": "Link columns (site layout)."
2687
2758
  },
2688
2759
  {
2689
2760
  "kind": "field",
2690
- "name": "closeOnEscape",
2691
- "privacy": "private"
2761
+ "name": "socialLinks",
2762
+ "type": {
2763
+ "text": "FooterSocialLink[]"
2764
+ },
2765
+ "default": "[]",
2766
+ "description": "Social icon links under the description (site layout)."
2692
2767
  },
2693
2768
  {
2694
2769
  "kind": "field",
2695
- "name": "closeLanguageMenuOnOutsideClick",
2696
- "privacy": "private"
2770
+ "name": "isSite",
2771
+ "type": {
2772
+ "text": "boolean"
2773
+ },
2774
+ "privacy": "private",
2775
+ "readonly": true
2697
2776
  },
2698
2777
  {
2699
- "kind": "method",
2700
- "name": "renderLanguageMenu",
2701
- "privacy": "private"
2778
+ "kind": "field",
2779
+ "name": "resolvedCopyright",
2780
+ "type": {
2781
+ "text": "string"
2782
+ },
2783
+ "privacy": "private",
2784
+ "readonly": true
2702
2785
  },
2703
2786
  {
2704
2787
  "kind": "method",
2705
- "name": "onLanguageSelect",
2788
+ "name": "onLinkClick",
2706
2789
  "privacy": "private",
2707
2790
  "return": {
2708
2791
  "type": {
@@ -2711,7 +2794,13 @@
2711
2794
  },
2712
2795
  "parameters": [
2713
2796
  {
2714
- "name": "code",
2797
+ "name": "event",
2798
+ "type": {
2799
+ "text": "MouseEvent"
2800
+ }
2801
+ },
2802
+ {
2803
+ "name": "href",
2715
2804
  "type": {
2716
2805
  "text": "string"
2717
2806
  }
@@ -2720,192 +2809,123 @@
2720
2809
  },
2721
2810
  {
2722
2811
  "kind": "method",
2723
- "name": "renderBrand",
2812
+ "name": "renderLink",
2813
+ "privacy": "private",
2814
+ "parameters": [
2815
+ {
2816
+ "name": "link",
2817
+ "type": {
2818
+ "text": "FooterLink"
2819
+ }
2820
+ }
2821
+ ]
2822
+ },
2823
+ {
2824
+ "kind": "method",
2825
+ "name": "renderPoweredBy",
2724
2826
  "privacy": "private"
2725
- }
2726
- ],
2727
- "events": [
2827
+ },
2728
2828
  {
2729
- "name": "language-change",
2730
- "type": {
2731
- "text": "CustomEvent"
2732
- }
2829
+ "kind": "method",
2830
+ "name": "renderSite",
2831
+ "privacy": "private"
2733
2832
  }
2734
2833
  ],
2735
2834
  "attributes": [
2736
2835
  {
2737
- "name": "title",
2836
+ "name": "inverted",
2738
2837
  "type": {
2739
- "text": "string"
2838
+ "text": "boolean"
2740
2839
  },
2741
- "default": "''",
2742
- "fieldName": "title"
2840
+ "default": "false",
2841
+ "description": "Inverts the footer's color roles (light-on-dark instead of dark-on-light) — matches the\r\nsource component's `inverted` (from its shared `BaseProps`), same as `st-header`'s.",
2842
+ "fieldName": "inverted"
2743
2843
  },
2744
2844
  {
2745
- "name": "brand-image-url",
2845
+ "name": "company-name",
2746
2846
  "type": {
2747
2847
  "text": "string"
2748
2848
  },
2749
2849
  "default": "''",
2750
- "description": "Optional logo image URL, shown before `title`. Omitted entirely when empty — none of this suite's apps has one today. Matches the source component's `imageSrc` (renamed here to pair with `title`/`logoHref`, since this component's only image use is the brand mark).",
2751
- "fieldName": "brandImageUrl"
2850
+ "description": "Used to build the default `copyright` line (`© {year} {companyName}`) when `copyright` isn't set explicitly.",
2851
+ "fieldName": "companyName"
2752
2852
  },
2753
2853
  {
2754
- "name": "alt-text",
2854
+ "name": "copyright",
2755
2855
  "type": {
2756
2856
  "text": "string"
2757
2857
  },
2758
- "default": "'Logo'",
2759
- "description": "`alt` text for the brand image — matches the source component's `altText` (default `'Logo'`).",
2760
- "fieldName": "altText"
2858
+ "default": "''",
2859
+ "description": "Overrides the default computed copyright line entirely.",
2860
+ "fieldName": "copyright"
2761
2861
  },
2762
2862
  {
2763
- "name": "logoHref",
2863
+ "name": "powered-by",
2764
2864
  "type": {
2765
2865
  "text": "string"
2766
2866
  },
2767
2867
  "default": "''",
2768
- "description": "Wraps the brand in an `<a>` when set (e.g. `/`); a plain non-link `<div>` otherwise.",
2769
- "fieldName": "logoHref"
2868
+ "fieldName": "poweredBy"
2770
2869
  },
2771
2870
  {
2772
- "name": "logo-target",
2871
+ "name": "powered-by-link",
2773
2872
  "type": {
2774
2873
  "text": "string"
2775
2874
  },
2776
- "default": "'_self'",
2777
- "description": "`target` for the brand `<a>` — matches the source component's `logoTarget` (default `_self`). No effect when `logoHref` isn't set.",
2778
- "fieldName": "logoTarget"
2875
+ "default": "''",
2876
+ "fieldName": "poweredByLink"
2779
2877
  },
2780
2878
  {
2781
- "name": "logo-class-name",
2879
+ "name": "version",
2782
2880
  "type": {
2783
2881
  "text": "string"
2784
2882
  },
2785
2883
  "default": "''",
2786
- "description": "Extra class(es) appended to the brand link/div — matches the source component's `logoClassName`.",
2787
- "fieldName": "logoClassName"
2788
- },
2789
- {
2790
- "name": "inverted",
2791
- "type": {
2792
- "text": "boolean"
2793
- },
2794
- "default": "false",
2795
- "description": "Inverts the header's color roles (light-on-dark instead of dark-on-light) — matches the\r\nsource component's `inverted` (from its shared `BaseProps`).",
2796
- "fieldName": "inverted"
2797
- },
2798
- {
2799
- "name": "sticky",
2800
- "type": {
2801
- "text": "boolean"
2802
- },
2803
- "default": "false",
2804
- "fieldName": "sticky"
2805
- },
2806
- {
2807
- "name": "transparent",
2808
- "type": {
2809
- "text": "boolean"
2810
- },
2811
- "default": "false",
2812
- "description": "Fixes the header over the top of the page and makes it see-through, with light text\r\n(`--st-header-transparent-color`), until the page scrolls past `scroll-threshold` — for a\r\nheader laid over a dark hero. It then takes its normal background and a shadow. The page\r\ncontent starts under it, so the first section should leave room for the 64px bar.",
2813
- "fieldName": "transparent"
2814
- },
2815
- {
2816
- "name": "hide-on-scroll",
2817
- "type": {
2818
- "text": "boolean"
2819
- },
2820
- "default": "false",
2821
- "description": "Slides the header out of view while the page scrolls down and back in when it scrolls up.",
2822
- "fieldName": "hideOnScroll"
2823
- },
2824
- {
2825
- "name": "scroll-threshold",
2826
- "type": {
2827
- "text": "number"
2828
- },
2829
- "default": "8",
2830
- "description": "Scroll distance in px after which the header counts as `scrolled`.",
2831
- "fieldName": "scrollThreshold"
2832
- },
2833
- {
2834
- "name": "scrolled",
2835
- "type": {
2836
- "text": "boolean"
2837
- },
2838
- "default": "false",
2839
- "description": "True once the page has scrolled past `scroll-threshold`; reflected so pages can style `st-header[scrolled]`. Set by the header, never from outside.",
2840
- "fieldName": "scrolled"
2841
- },
2842
- {
2843
- "name": "scroll-hidden",
2844
- "type": {
2845
- "text": "boolean"
2846
- },
2847
- "default": "false",
2848
- "description": "True while `hide-on-scroll` has slid the header away. Set by the header, never from outside.",
2849
- "fieldName": "scrollHidden"
2884
+ "description": "App version, rendered as `v{version}` after the copyright line — for apps that show their own\r\nversion in the footer rather than the header title.",
2885
+ "fieldName": "version"
2850
2886
  },
2851
2887
  {
2852
- "name": "current-language-code",
2888
+ "name": "image-src",
2853
2889
  "type": {
2854
2890
  "text": "string"
2855
2891
  },
2856
2892
  "default": "''",
2857
- "fieldName": "currentLanguageCode"
2893
+ "description": "Logo shown in the brand block (site layout).",
2894
+ "fieldName": "imageSrc"
2858
2895
  },
2859
2896
  {
2860
- "name": "language-menu-label",
2897
+ "name": "description",
2861
2898
  "type": {
2862
2899
  "text": "string"
2863
2900
  },
2864
- "default": "'Language'",
2865
- "fieldName": "languageMenuLabel"
2866
- },
2867
- {
2868
- "name": "mobile-open",
2869
- "type": {
2870
- "text": "boolean"
2871
- },
2872
- "default": "false",
2873
- "description": "Internal open/closed state for the mobile nav overlay, reflected to an attribute purely so\r\nthe `:host([mobile-open])` CSS selector above can react to it — not meant to be set from\r\noutside.",
2874
- "fieldName": "mobileOpen"
2875
- },
2876
- {
2877
- "name": "compact",
2878
- "type": {
2879
- "text": "boolean"
2880
- },
2881
- "default": "false",
2882
- "description": "True while the menu doesn't fit the bar at the current width: the header then shows the same\r\nhamburger layout it uses on a narrow screen. Set by `evaluateFit`, never from outside.",
2883
- "fieldName": "compact"
2901
+ "default": "''",
2902
+ "description": "Short blurb under the logo (site layout).",
2903
+ "fieldName": "description"
2884
2904
  }
2885
2905
  ],
2886
2906
  "superclass": {
2887
2907
  "name": "LitElement",
2888
2908
  "package": "lit"
2889
2909
  },
2890
- "tagName": "st-header",
2910
+ "tagName": "st-footer",
2891
2911
  "customElement": true
2892
2912
  }
2893
2913
  ],
2894
2914
  "exports": [
2895
2915
  {
2896
2916
  "kind": "js",
2897
- "name": "Header",
2917
+ "name": "Footer",
2898
2918
  "declaration": {
2899
- "name": "Header",
2900
- "module": "src/header/Header.ts"
2919
+ "name": "Footer",
2920
+ "module": "src/footer/Footer.ts"
2901
2921
  }
2902
2922
  },
2903
2923
  {
2904
2924
  "kind": "custom-element-definition",
2905
- "name": "st-header",
2925
+ "name": "st-footer",
2906
2926
  "declaration": {
2907
- "name": "Header",
2908
- "module": "src/header/Header.ts"
2927
+ "name": "Footer",
2928
+ "module": "src/footer/Footer.ts"
2909
2929
  }
2910
2930
  }
2911
2931
  ]
@@ -4359,69 +4379,304 @@
4359
4379
  "name": "MenuGrid",
4360
4380
  "members": [
4361
4381
  {
4362
- "kind": "field",
4363
- "name": "columns",
4382
+ "kind": "field",
4383
+ "name": "columns",
4384
+ "type": {
4385
+ "text": "number"
4386
+ },
4387
+ "default": "3",
4388
+ "description": "Number of columns at full width (1–4, same as the source component's `columns-N` classes).",
4389
+ "attribute": "columns"
4390
+ },
4391
+ {
4392
+ "kind": "field",
4393
+ "name": "gridClassName",
4394
+ "type": {
4395
+ "text": "string"
4396
+ },
4397
+ "default": "''",
4398
+ "description": "Extra class(es) appended to the inner grid element — the source component's `gridClassName`.\r\nIts outer `className` is the host element itself here: set a `class` attribute on `st-menu-grid`.",
4399
+ "attribute": "grid-class-name"
4400
+ }
4401
+ ],
4402
+ "attributes": [
4403
+ {
4404
+ "name": "columns",
4405
+ "type": {
4406
+ "text": "number"
4407
+ },
4408
+ "default": "3",
4409
+ "description": "Number of columns at full width (1–4, same as the source component's `columns-N` classes).",
4410
+ "fieldName": "columns"
4411
+ },
4412
+ {
4413
+ "name": "grid-class-name",
4414
+ "type": {
4415
+ "text": "string"
4416
+ },
4417
+ "default": "''",
4418
+ "description": "Extra class(es) appended to the inner grid element — the source component's `gridClassName`.\r\nIts outer `className` is the host element itself here: set a `class` attribute on `st-menu-grid`.",
4419
+ "fieldName": "gridClassName"
4420
+ }
4421
+ ],
4422
+ "superclass": {
4423
+ "name": "LitElement",
4424
+ "package": "lit"
4425
+ },
4426
+ "tagName": "st-menu-grid",
4427
+ "customElement": true
4428
+ }
4429
+ ],
4430
+ "exports": [
4431
+ {
4432
+ "kind": "js",
4433
+ "name": "MenuGrid",
4434
+ "declaration": {
4435
+ "name": "MenuGrid",
4436
+ "module": "src/menu-grid/MenuGrid.ts"
4437
+ }
4438
+ },
4439
+ {
4440
+ "kind": "custom-element-definition",
4441
+ "name": "st-menu-grid",
4442
+ "declaration": {
4443
+ "name": "MenuGrid",
4444
+ "module": "src/menu-grid/MenuGrid.ts"
4445
+ }
4446
+ }
4447
+ ]
4448
+ },
4449
+ {
4450
+ "kind": "javascript-module",
4451
+ "path": "src/menu-item/MenuItem.ts",
4452
+ "declarations": [
4453
+ {
4454
+ "kind": "class",
4455
+ "description": "A single flat nav row — icon (`slot=\"icon\"`) + title + badge on one line, an optional\r\ndescription below — as opposed to `st-menu-grid-item`'s card for a multi-column grid. A 1:1\r\nport of `SankhyaUI`'s React `MenuItem` (`SankhyaCMS/SankhyaUI/src/components/Menu`): same\r\nmarkup and CSS, with its `motion` effects redone in CSS — nudges right and scales to 1.01 on\r\nhover / 0.99 while pressed, the icon tilts on hover, the badge pops in, the description fades\r\nin. Colors come from the suite theme rather than per-item utility classes.\r\n\r\nRenders a real `<a href>` but fires a *cancelable* `menu-item-select` event (detail: `{ href }`)\r\nbefore navigating — a host doing client-side routing calls `event.preventDefault()` on it (the\r\nsource used react-router's `Link` here; the suite apps have no router).",
4456
+ "name": "MenuItem",
4457
+ "members": [
4458
+ {
4459
+ "kind": "field",
4460
+ "name": "shadowRootOptions",
4461
+ "type": {
4462
+ "text": "object"
4463
+ },
4464
+ "static": true,
4465
+ "default": "{ ...LitElement.shadowRootOptions, delegatesFocus: true }",
4466
+ "description": "`focus()` on the element focuses its link, so `st-dropdown` can arrow-key between items."
4467
+ },
4468
+ {
4469
+ "kind": "field",
4470
+ "name": "title",
4471
+ "type": {
4472
+ "text": "string"
4473
+ },
4474
+ "default": "''",
4475
+ "attribute": "title"
4476
+ },
4477
+ {
4478
+ "kind": "field",
4479
+ "name": "href",
4480
+ "type": {
4481
+ "text": "string"
4482
+ },
4483
+ "default": "''",
4484
+ "attribute": "href"
4485
+ },
4486
+ {
4487
+ "kind": "field",
4488
+ "name": "description",
4489
+ "type": {
4490
+ "text": "string"
4491
+ },
4492
+ "default": "''",
4493
+ "attribute": "description"
4494
+ },
4495
+ {
4496
+ "kind": "field",
4497
+ "name": "badge",
4498
+ "type": {
4499
+ "text": "string"
4500
+ },
4501
+ "default": "''",
4502
+ "description": "Small trailing label, e.g. a count or \"New\"/\"Beta\" — omit for none.",
4503
+ "attribute": "badge"
4504
+ },
4505
+ {
4506
+ "kind": "field",
4507
+ "name": "active",
4508
+ "type": {
4509
+ "text": "boolean"
4510
+ },
4511
+ "default": "false",
4512
+ "description": "Highlights this row as the current page (source: `isActive`).",
4513
+ "attribute": "active",
4514
+ "reflects": true
4515
+ },
4516
+ {
4517
+ "kind": "field",
4518
+ "name": "compact",
4519
+ "type": {
4520
+ "text": "boolean"
4521
+ },
4522
+ "default": "false",
4523
+ "attribute": "compact",
4524
+ "reflects": true
4525
+ },
4526
+ {
4527
+ "kind": "field",
4528
+ "name": "showDescription",
4529
+ "type": {
4530
+ "text": "boolean"
4531
+ },
4532
+ "default": "true",
4533
+ "description": "Suppresses the description even when `description` is set (source: `showDescription`, default `true`).",
4534
+ "attribute": "show-description"
4535
+ },
4536
+ {
4537
+ "kind": "field",
4538
+ "name": "target",
4539
+ "type": {
4540
+ "text": "string"
4541
+ },
4542
+ "default": "'_self'",
4543
+ "description": "`target` for the `<a>` (source default `_self`).",
4544
+ "attribute": "target"
4545
+ },
4546
+ {
4547
+ "kind": "field",
4548
+ "name": "variant",
4549
+ "type": {
4550
+ "text": "'default' | 'link' | 'bar'"
4551
+ },
4552
+ "default": "'default'",
4553
+ "description": "`default` (a row with a hover box), `link` (a plain text link, as in `st-mega-menu-column`;\r\nmarked with an arrow when it opens a new tab) or `bar` (a top-level item in a header bar,\r\nshaped like a mega `st-dropdown`'s trigger pill so it lines up with the dropdowns beside it).",
4554
+ "attribute": "variant",
4555
+ "reflects": true
4556
+ },
4557
+ {
4558
+ "kind": "field",
4559
+ "name": "hasIcon",
4560
+ "type": {
4561
+ "text": "boolean"
4562
+ },
4563
+ "privacy": "private",
4564
+ "default": "false",
4565
+ "description": "Whether `slot=\"icon\"` has content, so an omitted icon leaves no empty box."
4566
+ },
4567
+ {
4568
+ "kind": "field",
4569
+ "name": "onIconSlotChange",
4570
+ "privacy": "private"
4571
+ },
4572
+ {
4573
+ "kind": "field",
4574
+ "name": "onClick",
4575
+ "privacy": "private"
4576
+ }
4577
+ ],
4578
+ "attributes": [
4579
+ {
4580
+ "name": "title",
4581
+ "type": {
4582
+ "text": "string"
4583
+ },
4584
+ "default": "''",
4585
+ "fieldName": "title"
4586
+ },
4587
+ {
4588
+ "name": "href",
4589
+ "type": {
4590
+ "text": "string"
4591
+ },
4592
+ "default": "''",
4593
+ "fieldName": "href"
4594
+ },
4595
+ {
4596
+ "name": "description",
4597
+ "type": {
4598
+ "text": "string"
4599
+ },
4600
+ "default": "''",
4601
+ "fieldName": "description"
4602
+ },
4603
+ {
4604
+ "name": "badge",
4605
+ "type": {
4606
+ "text": "string"
4607
+ },
4608
+ "default": "''",
4609
+ "description": "Small trailing label, e.g. a count or \"New\"/\"Beta\" — omit for none.",
4610
+ "fieldName": "badge"
4611
+ },
4612
+ {
4613
+ "name": "active",
4614
+ "type": {
4615
+ "text": "boolean"
4616
+ },
4617
+ "default": "false",
4618
+ "description": "Highlights this row as the current page (source: `isActive`).",
4619
+ "fieldName": "active"
4620
+ },
4621
+ {
4622
+ "name": "compact",
4364
4623
  "type": {
4365
- "text": "number"
4624
+ "text": "boolean"
4366
4625
  },
4367
- "default": "3",
4368
- "description": "Number of columns at full width (1–4, same as the source component's `columns-N` classes).",
4369
- "attribute": "columns"
4626
+ "default": "false",
4627
+ "fieldName": "compact"
4370
4628
  },
4371
4629
  {
4372
- "kind": "field",
4373
- "name": "gridClassName",
4630
+ "name": "show-description",
4374
4631
  "type": {
4375
- "text": "string"
4632
+ "text": "boolean"
4376
4633
  },
4377
- "default": "''",
4378
- "description": "Extra class(es) appended to the inner grid element — the source component's `gridClassName`.\r\nIts outer `className` is the host element itself here: set a `class` attribute on `st-menu-grid`.",
4379
- "attribute": "grid-class-name"
4380
- }
4381
- ],
4382
- "attributes": [
4634
+ "default": "true",
4635
+ "description": "Suppresses the description even when `description` is set (source: `showDescription`, default `true`).",
4636
+ "fieldName": "showDescription"
4637
+ },
4383
4638
  {
4384
- "name": "columns",
4639
+ "name": "target",
4385
4640
  "type": {
4386
- "text": "number"
4641
+ "text": "string"
4387
4642
  },
4388
- "default": "3",
4389
- "description": "Number of columns at full width (1–4, same as the source component's `columns-N` classes).",
4390
- "fieldName": "columns"
4643
+ "default": "'_self'",
4644
+ "description": "`target` for the `<a>` (source default `_self`).",
4645
+ "fieldName": "target"
4391
4646
  },
4392
4647
  {
4393
- "name": "grid-class-name",
4648
+ "name": "variant",
4394
4649
  "type": {
4395
- "text": "string"
4650
+ "text": "'default' | 'link' | 'bar'"
4396
4651
  },
4397
- "default": "''",
4398
- "description": "Extra class(es) appended to the inner grid element — the source component's `gridClassName`.\r\nIts outer `className` is the host element itself here: set a `class` attribute on `st-menu-grid`.",
4399
- "fieldName": "gridClassName"
4652
+ "default": "'default'",
4653
+ "description": "`default` (a row with a hover box), `link` (a plain text link, as in `st-mega-menu-column`;\r\nmarked with an arrow when it opens a new tab) or `bar` (a top-level item in a header bar,\r\nshaped like a mega `st-dropdown`'s trigger pill so it lines up with the dropdowns beside it).",
4654
+ "fieldName": "variant"
4400
4655
  }
4401
4656
  ],
4402
4657
  "superclass": {
4403
4658
  "name": "LitElement",
4404
4659
  "package": "lit"
4405
4660
  },
4406
- "tagName": "st-menu-grid",
4661
+ "tagName": "st-menu-item",
4407
4662
  "customElement": true
4408
4663
  }
4409
4664
  ],
4410
4665
  "exports": [
4411
4666
  {
4412
4667
  "kind": "js",
4413
- "name": "MenuGrid",
4668
+ "name": "MenuItem",
4414
4669
  "declaration": {
4415
- "name": "MenuGrid",
4416
- "module": "src/menu-grid/MenuGrid.ts"
4670
+ "name": "MenuItem",
4671
+ "module": "src/menu-item/MenuItem.ts"
4417
4672
  }
4418
4673
  },
4419
4674
  {
4420
4675
  "kind": "custom-element-definition",
4421
- "name": "st-menu-grid",
4676
+ "name": "st-menu-item",
4422
4677
  "declaration": {
4423
- "name": "MenuGrid",
4424
- "module": "src/menu-grid/MenuGrid.ts"
4678
+ "name": "MenuItem",
4679
+ "module": "src/menu-item/MenuItem.ts"
4425
4680
  }
4426
4681
  }
4427
4682
  ]
@@ -4659,259 +4914,53 @@
4659
4914
  },
4660
4915
  {
4661
4916
  "kind": "field",
4662
- "name": "subtitle",
4663
- "type": {
4664
- "text": "string"
4665
- },
4666
- "default": "''",
4667
- "attribute": "subtitle"
4668
- },
4669
- {
4670
- "kind": "field",
4671
- "name": "actionLabel",
4672
- "type": {
4673
- "text": "string"
4674
- },
4675
- "default": "''",
4676
- "attribute": "action-label"
4677
- },
4678
- {
4679
- "kind": "field",
4680
- "name": "href",
4681
- "type": {
4682
- "text": "string"
4683
- },
4684
- "default": "''",
4685
- "attribute": "href"
4686
- },
4687
- {
4688
- "kind": "field",
4689
- "name": "imageSrc",
4690
- "type": {
4691
- "text": "string"
4692
- },
4693
- "default": "''",
4694
- "attribute": "image-src"
4695
- },
4696
- {
4697
- "kind": "field",
4698
- "name": "inverted",
4699
- "type": {
4700
- "text": "boolean"
4701
- },
4702
- "default": "false",
4703
- "attribute": "inverted",
4704
- "reflects": true
4705
- },
4706
- {
4707
- "kind": "field",
4708
- "name": "onAction",
4709
- "privacy": "private"
4710
- }
4711
- ],
4712
- "attributes": [
4713
- {
4714
- "name": "title",
4715
- "type": {
4716
- "text": "string"
4717
- },
4718
- "default": "''",
4719
- "fieldName": "title"
4720
- },
4721
- {
4722
- "name": "subtitle",
4723
- "type": {
4724
- "text": "string"
4725
- },
4726
- "default": "''",
4727
- "fieldName": "subtitle"
4728
- },
4729
- {
4730
- "name": "action-label",
4731
- "type": {
4732
- "text": "string"
4733
- },
4734
- "default": "''",
4735
- "fieldName": "actionLabel"
4736
- },
4737
- {
4738
- "name": "href",
4739
- "type": {
4740
- "text": "string"
4741
- },
4742
- "default": "''",
4743
- "fieldName": "href"
4744
- },
4745
- {
4746
- "name": "image-src",
4747
- "type": {
4748
- "text": "string"
4749
- },
4750
- "default": "''",
4751
- "fieldName": "imageSrc"
4752
- },
4753
- {
4754
- "name": "inverted",
4755
- "type": {
4756
- "text": "boolean"
4757
- },
4758
- "default": "false",
4759
- "fieldName": "inverted"
4760
- }
4761
- ],
4762
- "superclass": {
4763
- "name": "LitElement",
4764
- "package": "lit"
4765
- },
4766
- "tagName": "st-promo-banner",
4767
- "customElement": true
4768
- }
4769
- ],
4770
- "exports": [
4771
- {
4772
- "kind": "js",
4773
- "name": "PromoBanner",
4774
- "declaration": {
4775
- "name": "PromoBanner",
4776
- "module": "src/promo-banner/PromoBanner.ts"
4777
- }
4778
- },
4779
- {
4780
- "kind": "custom-element-definition",
4781
- "name": "st-promo-banner",
4782
- "declaration": {
4783
- "name": "PromoBanner",
4784
- "module": "src/promo-banner/PromoBanner.ts"
4785
- }
4786
- }
4787
- ]
4788
- },
4789
- {
4790
- "kind": "javascript-module",
4791
- "path": "src/menu-item/MenuItem.ts",
4792
- "declarations": [
4793
- {
4794
- "kind": "class",
4795
- "description": "A single flat nav row — icon (`slot=\"icon\"`) + title + badge on one line, an optional\r\ndescription below — as opposed to `st-menu-grid-item`'s card for a multi-column grid. A 1:1\r\nport of `SankhyaUI`'s React `MenuItem` (`SankhyaCMS/SankhyaUI/src/components/Menu`): same\r\nmarkup and CSS, with its `motion` effects redone in CSS — nudges right and scales to 1.01 on\r\nhover / 0.99 while pressed, the icon tilts on hover, the badge pops in, the description fades\r\nin. Colors come from the suite theme rather than per-item utility classes.\r\n\r\nRenders a real `<a href>` but fires a *cancelable* `menu-item-select` event (detail: `{ href }`)\r\nbefore navigating — a host doing client-side routing calls `event.preventDefault()` on it (the\r\nsource used react-router's `Link` here; the suite apps have no router).",
4796
- "name": "MenuItem",
4797
- "members": [
4798
- {
4799
- "kind": "field",
4800
- "name": "shadowRootOptions",
4801
- "type": {
4802
- "text": "object"
4803
- },
4804
- "static": true,
4805
- "default": "{ ...LitElement.shadowRootOptions, delegatesFocus: true }",
4806
- "description": "`focus()` on the element focuses its link, so `st-dropdown` can arrow-key between items."
4807
- },
4808
- {
4809
- "kind": "field",
4810
- "name": "title",
4811
- "type": {
4812
- "text": "string"
4813
- },
4814
- "default": "''",
4815
- "attribute": "title"
4816
- },
4817
- {
4818
- "kind": "field",
4819
- "name": "href",
4820
- "type": {
4821
- "text": "string"
4822
- },
4823
- "default": "''",
4824
- "attribute": "href"
4825
- },
4826
- {
4827
- "kind": "field",
4828
- "name": "description",
4829
- "type": {
4830
- "text": "string"
4831
- },
4832
- "default": "''",
4833
- "attribute": "description"
4834
- },
4835
- {
4836
- "kind": "field",
4837
- "name": "badge",
4838
- "type": {
4839
- "text": "string"
4840
- },
4841
- "default": "''",
4842
- "description": "Small trailing label, e.g. a count or \"New\"/\"Beta\" — omit for none.",
4843
- "attribute": "badge"
4844
- },
4845
- {
4846
- "kind": "field",
4847
- "name": "active",
4848
- "type": {
4849
- "text": "boolean"
4850
- },
4851
- "default": "false",
4852
- "description": "Highlights this row as the current page (source: `isActive`).",
4853
- "attribute": "active",
4854
- "reflects": true
4855
- },
4856
- {
4857
- "kind": "field",
4858
- "name": "compact",
4917
+ "name": "subtitle",
4859
4918
  "type": {
4860
- "text": "boolean"
4919
+ "text": "string"
4861
4920
  },
4862
- "default": "false",
4863
- "attribute": "compact",
4864
- "reflects": true
4921
+ "default": "''",
4922
+ "attribute": "subtitle"
4865
4923
  },
4866
4924
  {
4867
4925
  "kind": "field",
4868
- "name": "showDescription",
4926
+ "name": "actionLabel",
4869
4927
  "type": {
4870
- "text": "boolean"
4928
+ "text": "string"
4871
4929
  },
4872
- "default": "true",
4873
- "description": "Suppresses the description even when `description` is set (source: `showDescription`, default `true`).",
4874
- "attribute": "show-description"
4930
+ "default": "''",
4931
+ "attribute": "action-label"
4875
4932
  },
4876
4933
  {
4877
4934
  "kind": "field",
4878
- "name": "target",
4935
+ "name": "href",
4879
4936
  "type": {
4880
4937
  "text": "string"
4881
4938
  },
4882
- "default": "'_self'",
4883
- "description": "`target` for the `<a>` (source default `_self`).",
4884
- "attribute": "target"
4939
+ "default": "''",
4940
+ "attribute": "href"
4885
4941
  },
4886
4942
  {
4887
4943
  "kind": "field",
4888
- "name": "variant",
4944
+ "name": "imageSrc",
4889
4945
  "type": {
4890
- "text": "'default' | 'link' | 'bar'"
4946
+ "text": "string"
4891
4947
  },
4892
- "default": "'default'",
4893
- "description": "`default` (a row with a hover box), `link` (a plain text link, as in `st-mega-menu-column`;\r\nmarked with an arrow when it opens a new tab) or `bar` (a top-level item in a header bar,\r\nshaped like a mega `st-dropdown`'s trigger pill so it lines up with the dropdowns beside it).",
4894
- "attribute": "variant",
4895
- "reflects": true
4948
+ "default": "''",
4949
+ "attribute": "image-src"
4896
4950
  },
4897
4951
  {
4898
4952
  "kind": "field",
4899
- "name": "hasIcon",
4953
+ "name": "inverted",
4900
4954
  "type": {
4901
4955
  "text": "boolean"
4902
4956
  },
4903
- "privacy": "private",
4904
4957
  "default": "false",
4905
- "description": "Whether `slot=\"icon\"` has content, so an omitted icon leaves no empty box."
4906
- },
4907
- {
4908
- "kind": "field",
4909
- "name": "onIconSlotChange",
4910
- "privacy": "private"
4958
+ "attribute": "inverted",
4959
+ "reflects": true
4911
4960
  },
4912
4961
  {
4913
4962
  "kind": "field",
4914
- "name": "onClick",
4963
+ "name": "onAction",
4915
4964
  "privacy": "private"
4916
4965
  }
4917
4966
  ],
@@ -4925,98 +4974,69 @@
4925
4974
  "fieldName": "title"
4926
4975
  },
4927
4976
  {
4928
- "name": "href",
4977
+ "name": "subtitle",
4929
4978
  "type": {
4930
4979
  "text": "string"
4931
4980
  },
4932
4981
  "default": "''",
4933
- "fieldName": "href"
4982
+ "fieldName": "subtitle"
4934
4983
  },
4935
4984
  {
4936
- "name": "description",
4985
+ "name": "action-label",
4937
4986
  "type": {
4938
4987
  "text": "string"
4939
4988
  },
4940
4989
  "default": "''",
4941
- "fieldName": "description"
4990
+ "fieldName": "actionLabel"
4942
4991
  },
4943
4992
  {
4944
- "name": "badge",
4993
+ "name": "href",
4945
4994
  "type": {
4946
4995
  "text": "string"
4947
4996
  },
4948
4997
  "default": "''",
4949
- "description": "Small trailing label, e.g. a count or \"New\"/\"Beta\" — omit for none.",
4950
- "fieldName": "badge"
4998
+ "fieldName": "href"
4951
4999
  },
4952
5000
  {
4953
- "name": "active",
5001
+ "name": "image-src",
4954
5002
  "type": {
4955
- "text": "boolean"
5003
+ "text": "string"
4956
5004
  },
4957
- "default": "false",
4958
- "description": "Highlights this row as the current page (source: `isActive`).",
4959
- "fieldName": "active"
5005
+ "default": "''",
5006
+ "fieldName": "imageSrc"
4960
5007
  },
4961
5008
  {
4962
- "name": "compact",
5009
+ "name": "inverted",
4963
5010
  "type": {
4964
5011
  "text": "boolean"
4965
5012
  },
4966
5013
  "default": "false",
4967
- "fieldName": "compact"
4968
- },
4969
- {
4970
- "name": "show-description",
4971
- "type": {
4972
- "text": "boolean"
4973
- },
4974
- "default": "true",
4975
- "description": "Suppresses the description even when `description` is set (source: `showDescription`, default `true`).",
4976
- "fieldName": "showDescription"
4977
- },
4978
- {
4979
- "name": "target",
4980
- "type": {
4981
- "text": "string"
4982
- },
4983
- "default": "'_self'",
4984
- "description": "`target` for the `<a>` (source default `_self`).",
4985
- "fieldName": "target"
4986
- },
4987
- {
4988
- "name": "variant",
4989
- "type": {
4990
- "text": "'default' | 'link' | 'bar'"
4991
- },
4992
- "default": "'default'",
4993
- "description": "`default` (a row with a hover box), `link` (a plain text link, as in `st-mega-menu-column`;\r\nmarked with an arrow when it opens a new tab) or `bar` (a top-level item in a header bar,\r\nshaped like a mega `st-dropdown`'s trigger pill so it lines up with the dropdowns beside it).",
4994
- "fieldName": "variant"
5014
+ "fieldName": "inverted"
4995
5015
  }
4996
5016
  ],
4997
5017
  "superclass": {
4998
5018
  "name": "LitElement",
4999
5019
  "package": "lit"
5000
5020
  },
5001
- "tagName": "st-menu-item",
5021
+ "tagName": "st-promo-banner",
5002
5022
  "customElement": true
5003
5023
  }
5004
5024
  ],
5005
5025
  "exports": [
5006
5026
  {
5007
5027
  "kind": "js",
5008
- "name": "MenuItem",
5028
+ "name": "PromoBanner",
5009
5029
  "declaration": {
5010
- "name": "MenuItem",
5011
- "module": "src/menu-item/MenuItem.ts"
5030
+ "name": "PromoBanner",
5031
+ "module": "src/promo-banner/PromoBanner.ts"
5012
5032
  }
5013
5033
  },
5014
5034
  {
5015
5035
  "kind": "custom-element-definition",
5016
- "name": "st-menu-item",
5036
+ "name": "st-promo-banner",
5017
5037
  "declaration": {
5018
- "name": "MenuItem",
5019
- "module": "src/menu-item/MenuItem.ts"
5038
+ "name": "PromoBanner",
5039
+ "module": "src/promo-banner/PromoBanner.ts"
5020
5040
  }
5021
5041
  }
5022
5042
  ]
@@ -5237,77 +5257,6 @@
5237
5257
  }
5238
5258
  ]
5239
5259
  },
5240
- {
5241
- "kind": "javascript-module",
5242
- "path": "src/stats/Stats.ts",
5243
- "declarations": [
5244
- {
5245
- "kind": "class",
5246
- "description": "Responsive grid of headline numbers with a label and optional description. Port of React `Stats`.\r\n`inverted` puts it on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
5247
- "name": "Stats",
5248
- "cssProperties": [
5249
- {
5250
- "description": "Overrides the block's padding.",
5251
- "name": "--st-stats-padding"
5252
- }
5253
- ],
5254
- "members": [
5255
- {
5256
- "kind": "field",
5257
- "name": "items",
5258
- "type": {
5259
- "text": "StatItem[]"
5260
- },
5261
- "default": "[]"
5262
- },
5263
- {
5264
- "kind": "field",
5265
- "name": "inverted",
5266
- "type": {
5267
- "text": "boolean"
5268
- },
5269
- "default": "false",
5270
- "attribute": "inverted",
5271
- "reflects": true
5272
- }
5273
- ],
5274
- "attributes": [
5275
- {
5276
- "name": "inverted",
5277
- "type": {
5278
- "text": "boolean"
5279
- },
5280
- "default": "false",
5281
- "fieldName": "inverted"
5282
- }
5283
- ],
5284
- "superclass": {
5285
- "name": "LitElement",
5286
- "package": "lit"
5287
- },
5288
- "tagName": "st-stats",
5289
- "customElement": true
5290
- }
5291
- ],
5292
- "exports": [
5293
- {
5294
- "kind": "js",
5295
- "name": "Stats",
5296
- "declaration": {
5297
- "name": "Stats",
5298
- "module": "src/stats/Stats.ts"
5299
- }
5300
- },
5301
- {
5302
- "kind": "custom-element-definition",
5303
- "name": "st-stats",
5304
- "declaration": {
5305
- "name": "Stats",
5306
- "module": "src/stats/Stats.ts"
5307
- }
5308
- }
5309
- ]
5310
- },
5311
5260
  {
5312
5261
  "kind": "javascript-module",
5313
5262
  "path": "src/select/Select.ts",
@@ -5845,6 +5794,77 @@
5845
5794
  }
5846
5795
  }
5847
5796
  ]
5797
+ },
5798
+ {
5799
+ "kind": "javascript-module",
5800
+ "path": "src/stats/Stats.ts",
5801
+ "declarations": [
5802
+ {
5803
+ "kind": "class",
5804
+ "description": "Responsive grid of headline numbers with a label and optional description. Port of React `Stats`.\r\n`inverted` puts it on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
5805
+ "name": "Stats",
5806
+ "cssProperties": [
5807
+ {
5808
+ "description": "Overrides the block's padding.",
5809
+ "name": "--st-stats-padding"
5810
+ }
5811
+ ],
5812
+ "members": [
5813
+ {
5814
+ "kind": "field",
5815
+ "name": "items",
5816
+ "type": {
5817
+ "text": "StatItem[]"
5818
+ },
5819
+ "default": "[]"
5820
+ },
5821
+ {
5822
+ "kind": "field",
5823
+ "name": "inverted",
5824
+ "type": {
5825
+ "text": "boolean"
5826
+ },
5827
+ "default": "false",
5828
+ "attribute": "inverted",
5829
+ "reflects": true
5830
+ }
5831
+ ],
5832
+ "attributes": [
5833
+ {
5834
+ "name": "inverted",
5835
+ "type": {
5836
+ "text": "boolean"
5837
+ },
5838
+ "default": "false",
5839
+ "fieldName": "inverted"
5840
+ }
5841
+ ],
5842
+ "superclass": {
5843
+ "name": "LitElement",
5844
+ "package": "lit"
5845
+ },
5846
+ "tagName": "st-stats",
5847
+ "customElement": true
5848
+ }
5849
+ ],
5850
+ "exports": [
5851
+ {
5852
+ "kind": "js",
5853
+ "name": "Stats",
5854
+ "declaration": {
5855
+ "name": "Stats",
5856
+ "module": "src/stats/Stats.ts"
5857
+ }
5858
+ },
5859
+ {
5860
+ "kind": "custom-element-definition",
5861
+ "name": "st-stats",
5862
+ "declaration": {
5863
+ "name": "Stats",
5864
+ "module": "src/stats/Stats.ts"
5865
+ }
5866
+ }
5867
+ ]
5848
5868
  }
5849
5869
  ]
5850
5870
  }