@sankhyatronics/sankhya-cms 0.1.16 → 0.2.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 (111) hide show
  1. package/custom-elements.json +842 -213
  2. package/dist/bento-grid/index.d.ts +8 -1
  3. package/dist/bento-grid/index.js +2 -1
  4. package/dist/card/index.d.ts +3 -4
  5. package/dist/card/index.js +1 -1
  6. package/dist/{chunk-LEXZKGQX.js → chunk-2DXHPEB5.js} +1 -1
  7. package/dist/chunk-2DXHPEB5.js.map +1 -0
  8. package/dist/{chunk-R5G6KFTJ.js → chunk-2FJDNJ7R.js} +1 -1
  9. package/dist/chunk-2FJDNJ7R.js.map +1 -0
  10. package/dist/{chunk-ZN4LIKVG.js → chunk-3OEEOBHB.js} +1 -1
  11. package/dist/chunk-3OEEOBHB.js.map +1 -0
  12. package/dist/{chunk-BMHMNXIA.js → chunk-4AFOKKSU.js} +1 -1
  13. package/dist/chunk-4AFOKKSU.js.map +1 -0
  14. package/dist/{chunk-76AVBQUA.js → chunk-5C6C6K5U.js} +98 -4
  15. package/dist/chunk-5C6C6K5U.js.map +1 -0
  16. package/dist/{chunk-7NLZND6Q.js → chunk-5F5PTVWR.js} +27 -2
  17. package/dist/chunk-5F5PTVWR.js.map +1 -0
  18. package/dist/chunk-5MY6OWMK.js +125 -0
  19. package/dist/chunk-5MY6OWMK.js.map +1 -0
  20. package/dist/{chunk-FLY7TNRT.js → chunk-7NIWQWTA.js} +1 -1
  21. package/dist/chunk-7NIWQWTA.js.map +1 -0
  22. package/dist/{chunk-ALI26WOB.js → chunk-EE6PAN3B.js} +33 -2
  23. package/dist/chunk-EE6PAN3B.js.map +1 -0
  24. package/dist/chunk-FML6AG2V.js +107 -0
  25. package/dist/chunk-FML6AG2V.js.map +1 -0
  26. package/dist/{chunk-VWS53WY4.js → chunk-HMUZON6I.js} +49 -4
  27. package/dist/chunk-HMUZON6I.js.map +1 -0
  28. package/dist/{chunk-G3CF7MBO.js → chunk-J6EO4R73.js} +27 -1
  29. package/dist/{chunk-G3CF7MBO.js.map → chunk-J6EO4R73.js.map} +1 -1
  30. package/dist/chunk-O4FCRKDX.js +178 -0
  31. package/dist/chunk-O4FCRKDX.js.map +1 -0
  32. package/dist/{chunk-SMLR736E.js → chunk-OELI3IWC.js} +1 -1
  33. package/dist/chunk-OELI3IWC.js.map +1 -0
  34. package/dist/{chunk-JQY2G4QK.js → chunk-OLA35A2O.js} +1 -1
  35. package/dist/chunk-OLA35A2O.js.map +1 -0
  36. package/dist/{chunk-YQ42EBK5.js → chunk-PHEGSCOM.js} +1 -1
  37. package/dist/chunk-PHEGSCOM.js.map +1 -0
  38. package/dist/{chunk-5EBWMPJS.js → chunk-QLA4BH2B.js} +5 -5
  39. package/dist/chunk-QLA4BH2B.js.map +1 -0
  40. package/dist/{chunk-JKBWZLG4.js → chunk-SQ3OZO32.js} +141 -3
  41. package/dist/chunk-SQ3OZO32.js.map +1 -0
  42. package/dist/chunk-UAIUBPDN.js +11 -0
  43. package/dist/chunk-UAIUBPDN.js.map +1 -0
  44. package/dist/{chunk-XWB4CKDU.js → chunk-XUGEXERO.js} +6 -6
  45. package/dist/chunk-XUGEXERO.js.map +1 -0
  46. package/dist/chunk-ZRC5BVDX.js +219 -0
  47. package/dist/chunk-ZRC5BVDX.js.map +1 -0
  48. package/dist/cms-theme.css +7 -0
  49. package/dist/content-block/index.d.ts +2 -3
  50. package/dist/content-block/index.js +3 -2
  51. package/dist/dropdown/index.d.ts +8 -11
  52. package/dist/dropdown/index.js +1 -1
  53. package/dist/feature-split/index.js +2 -1
  54. package/dist/features-section/index.d.ts +4 -4
  55. package/dist/features-section/index.js +4 -3
  56. package/dist/flow/index.d.ts +35 -0
  57. package/dist/flow/index.js +9 -0
  58. package/dist/flow/index.js.map +1 -0
  59. package/dist/header/index.d.ts +8 -15
  60. package/dist/header/index.js +1 -1
  61. package/dist/hero/index.d.ts +18 -3
  62. package/dist/hero/index.js +1 -1
  63. package/dist/icon-button/index.d.ts +2 -4
  64. package/dist/icon-button/index.js +1 -1
  65. package/dist/index.d.ts +3 -0
  66. package/dist/index.js +38 -25
  67. package/dist/items-accordion/index.d.ts +5 -0
  68. package/dist/items-accordion/index.js +2 -1
  69. package/dist/markdown/index.d.ts +1 -2
  70. package/dist/markdown/index.js +2 -1
  71. package/dist/mega-menu/index.d.ts +2 -2
  72. package/dist/mega-menu/index.js +1 -1
  73. package/dist/menu-grid/index.d.ts +2 -3
  74. package/dist/menu-grid/index.js +1 -1
  75. package/dist/menu-grid-item/index.d.ts +6 -8
  76. package/dist/menu-grid-item/index.js +1 -1
  77. package/dist/menu-item/index.d.ts +5 -7
  78. package/dist/menu-item/index.js +1 -1
  79. package/dist/promo-banner/index.d.ts +14 -3
  80. package/dist/promo-banner/index.js +1 -1
  81. package/dist/schema/index.d.ts +3 -0
  82. package/dist/schema/index.js +3 -0
  83. package/dist/schema/index.js.map +1 -1
  84. package/dist/section/index.d.ts +3 -0
  85. package/dist/section/index.js +1 -1
  86. package/dist/steps/index.d.ts +33 -0
  87. package/dist/steps/index.js +10 -0
  88. package/dist/steps/index.js.map +1 -0
  89. package/dist/tag-strip/index.d.ts +26 -0
  90. package/dist/tag-strip/index.js +9 -0
  91. package/dist/tag-strip/index.js.map +1 -0
  92. package/dist/tooltip/index.d.ts +18 -6
  93. package/dist/tooltip/index.js +1 -1
  94. package/package.json +14 -2
  95. package/dist/chunk-5EBWMPJS.js.map +0 -1
  96. package/dist/chunk-76AVBQUA.js.map +0 -1
  97. package/dist/chunk-7NLZND6Q.js.map +0 -1
  98. package/dist/chunk-ALI26WOB.js.map +0 -1
  99. package/dist/chunk-BMHMNXIA.js.map +0 -1
  100. package/dist/chunk-FLY7TNRT.js.map +0 -1
  101. package/dist/chunk-JKBWZLG4.js.map +0 -1
  102. package/dist/chunk-JQY2G4QK.js.map +0 -1
  103. package/dist/chunk-LEXZKGQX.js.map +0 -1
  104. package/dist/chunk-R5G6KFTJ.js.map +0 -1
  105. package/dist/chunk-SMLR736E.js.map +0 -1
  106. package/dist/chunk-VWS53WY4.js.map +0 -1
  107. package/dist/chunk-XCA3XFFG.js +0 -74
  108. package/dist/chunk-XCA3XFFG.js.map +0 -1
  109. package/dist/chunk-XWB4CKDU.js.map +0 -1
  110. package/dist/chunk-YQ42EBK5.js.map +0 -1
  111. package/dist/chunk-ZN4LIKVG.js.map +0 -1
@@ -248,7 +248,7 @@
248
248
  "declarations": [
249
249
  {
250
250
  "kind": "class",
251
- "description": "A responsive 4-column bento grid of icon/image cards. Items are set via the `items` property.",
251
+ "description": "A responsive 4-column bento grid of icon/image cards. Items are set via the `items` property.\nDescriptions are Markdown. A card links as a whole when it has `href` alone; with `actionLabel`\nthe link becomes a button inside the card.",
252
252
  "name": "BentoGrid",
253
253
  "cssProperties": [
254
254
  {
@@ -366,7 +366,7 @@
366
366
  "declarations": [
367
367
  {
368
368
  "kind": "class",
369
- "description": "A surfaced container — content goes in the default slot. Ports `SankhyaUI`'s React `Card`\n(`variant`, `padding`, `elevation`, `hoverable`, `inverted`); `onClick` is just a native `click`\nlistener on the element. `padding` takes `none | small | medium | large` (the source's\n`sm|md|lg`, spelled like `paddingScaleStyles`); `elevation` takes `none | sm | md | lg`.",
369
+ "description": "A surfaced container — content goes in the default slot. Attributes: `variant`, `padding`,\n`elevation`, `hoverable`, `inverted`; a click handler is just a native `click` listener on the\nelement. `padding` takes `none | small | medium | large`; `elevation` takes `none | sm | md | lg`.",
370
370
  "name": "Card",
371
371
  "members": [
372
372
  {
@@ -910,192 +910,6 @@
910
910
  }
911
911
  ]
912
912
  },
913
- {
914
- "kind": "javascript-module",
915
- "path": "src/content-block/ContentBlock.ts",
916
- "declarations": [
917
- {
918
- "kind": "class",
919
- "description": "A long-form article section: centered title/subtitle, an optional featured image with caption,\nthen Markdown body text. Ports `SankhyaUI`'s React `ContentBlock`. The body comes from\n`content-src` (a Markdown URL, as in the source) or an inline `content` string (added so the\nblock works without a fetch); `content-src` wins when both are set.",
920
- "name": "ContentBlock",
921
- "cssProperties": [
922
- {
923
- "description": "Overrides the block's padding.",
924
- "name": "--st-content-block-padding"
925
- }
926
- ],
927
- "members": [
928
- {
929
- "kind": "field",
930
- "name": "title",
931
- "type": {
932
- "text": "string"
933
- },
934
- "default": "''",
935
- "attribute": "title"
936
- },
937
- {
938
- "kind": "field",
939
- "name": "subtitle",
940
- "type": {
941
- "text": "string"
942
- },
943
- "default": "''",
944
- "attribute": "subtitle"
945
- },
946
- {
947
- "kind": "field",
948
- "name": "contentSrc",
949
- "type": {
950
- "text": "string"
951
- },
952
- "default": "''",
953
- "description": "URL of a Markdown file.",
954
- "attribute": "content-src"
955
- },
956
- {
957
- "kind": "field",
958
- "name": "content",
959
- "type": {
960
- "text": "string"
961
- },
962
- "default": "''",
963
- "description": "Inline Markdown, used when `content-src` is not set.",
964
- "attribute": "content"
965
- },
966
- {
967
- "kind": "field",
968
- "name": "imageSrc",
969
- "type": {
970
- "text": "string"
971
- },
972
- "default": "''",
973
- "attribute": "image-src"
974
- },
975
- {
976
- "kind": "field",
977
- "name": "imageAlt",
978
- "type": {
979
- "text": "string"
980
- },
981
- "default": "''",
982
- "attribute": "image-alt"
983
- },
984
- {
985
- "kind": "field",
986
- "name": "imageCaption",
987
- "type": {
988
- "text": "string"
989
- },
990
- "default": "''",
991
- "attribute": "image-caption"
992
- },
993
- {
994
- "kind": "field",
995
- "name": "inverted",
996
- "type": {
997
- "text": "boolean"
998
- },
999
- "default": "false",
1000
- "attribute": "inverted",
1001
- "reflects": true
1002
- }
1003
- ],
1004
- "attributes": [
1005
- {
1006
- "name": "title",
1007
- "type": {
1008
- "text": "string"
1009
- },
1010
- "default": "''",
1011
- "fieldName": "title"
1012
- },
1013
- {
1014
- "name": "subtitle",
1015
- "type": {
1016
- "text": "string"
1017
- },
1018
- "default": "''",
1019
- "fieldName": "subtitle"
1020
- },
1021
- {
1022
- "name": "content-src",
1023
- "type": {
1024
- "text": "string"
1025
- },
1026
- "default": "''",
1027
- "description": "URL of a Markdown file.",
1028
- "fieldName": "contentSrc"
1029
- },
1030
- {
1031
- "name": "content",
1032
- "type": {
1033
- "text": "string"
1034
- },
1035
- "default": "''",
1036
- "description": "Inline Markdown, used when `content-src` is not set.",
1037
- "fieldName": "content"
1038
- },
1039
- {
1040
- "name": "image-src",
1041
- "type": {
1042
- "text": "string"
1043
- },
1044
- "default": "''",
1045
- "fieldName": "imageSrc"
1046
- },
1047
- {
1048
- "name": "image-alt",
1049
- "type": {
1050
- "text": "string"
1051
- },
1052
- "default": "''",
1053
- "fieldName": "imageAlt"
1054
- },
1055
- {
1056
- "name": "image-caption",
1057
- "type": {
1058
- "text": "string"
1059
- },
1060
- "default": "''",
1061
- "fieldName": "imageCaption"
1062
- },
1063
- {
1064
- "name": "inverted",
1065
- "type": {
1066
- "text": "boolean"
1067
- },
1068
- "default": "false",
1069
- "fieldName": "inverted"
1070
- }
1071
- ],
1072
- "superclass": {
1073
- "name": "LitElement",
1074
- "package": "lit"
1075
- },
1076
- "tagName": "st-content-block",
1077
- "customElement": true
1078
- }
1079
- ],
1080
- "exports": [
1081
- {
1082
- "kind": "js",
1083
- "name": "ContentBlock",
1084
- "declaration": {
1085
- "name": "ContentBlock",
1086
- "module": "src/content-block/ContentBlock.ts"
1087
- }
1088
- },
1089
- {
1090
- "kind": "custom-element-definition",
1091
- "name": "st-content-block",
1092
- "declaration": {
1093
- "name": "ContentBlock",
1094
- "module": "src/content-block/ContentBlock.ts"
1095
- }
1096
- }
1097
- ]
1098
- },
1099
913
  {
1100
914
  "kind": "javascript-module",
1101
915
  "path": "src/chip/Chip.ts",
@@ -1396,10 +1210,196 @@
1396
1210
  },
1397
1211
  {
1398
1212
  "kind": "custom-element-definition",
1399
- "name": "st-cookie-consent",
1213
+ "name": "st-cookie-consent",
1214
+ "declaration": {
1215
+ "name": "CookieConsent",
1216
+ "module": "src/cookie-consent/CookieConsent.ts"
1217
+ }
1218
+ }
1219
+ ]
1220
+ },
1221
+ {
1222
+ "kind": "javascript-module",
1223
+ "path": "src/content-block/ContentBlock.ts",
1224
+ "declarations": [
1225
+ {
1226
+ "kind": "class",
1227
+ "description": "A long-form article section: centered title/subtitle, an optional featured image with caption,\nthen Markdown body text. The body comes from `content-src` (a Markdown URL) or an inline\n`content` string (so the block works without a fetch); `content-src` wins when both are set.",
1228
+ "name": "ContentBlock",
1229
+ "cssProperties": [
1230
+ {
1231
+ "description": "Overrides the block's padding.",
1232
+ "name": "--st-content-block-padding"
1233
+ }
1234
+ ],
1235
+ "members": [
1236
+ {
1237
+ "kind": "field",
1238
+ "name": "title",
1239
+ "type": {
1240
+ "text": "string"
1241
+ },
1242
+ "default": "''",
1243
+ "attribute": "title"
1244
+ },
1245
+ {
1246
+ "kind": "field",
1247
+ "name": "subtitle",
1248
+ "type": {
1249
+ "text": "string"
1250
+ },
1251
+ "default": "''",
1252
+ "attribute": "subtitle"
1253
+ },
1254
+ {
1255
+ "kind": "field",
1256
+ "name": "contentSrc",
1257
+ "type": {
1258
+ "text": "string"
1259
+ },
1260
+ "default": "''",
1261
+ "description": "URL of a Markdown file.",
1262
+ "attribute": "content-src"
1263
+ },
1264
+ {
1265
+ "kind": "field",
1266
+ "name": "content",
1267
+ "type": {
1268
+ "text": "string"
1269
+ },
1270
+ "default": "''",
1271
+ "description": "Inline Markdown, used when `content-src` is not set.",
1272
+ "attribute": "content"
1273
+ },
1274
+ {
1275
+ "kind": "field",
1276
+ "name": "imageSrc",
1277
+ "type": {
1278
+ "text": "string"
1279
+ },
1280
+ "default": "''",
1281
+ "attribute": "image-src"
1282
+ },
1283
+ {
1284
+ "kind": "field",
1285
+ "name": "imageAlt",
1286
+ "type": {
1287
+ "text": "string"
1288
+ },
1289
+ "default": "''",
1290
+ "attribute": "image-alt"
1291
+ },
1292
+ {
1293
+ "kind": "field",
1294
+ "name": "imageCaption",
1295
+ "type": {
1296
+ "text": "string"
1297
+ },
1298
+ "default": "''",
1299
+ "attribute": "image-caption"
1300
+ },
1301
+ {
1302
+ "kind": "field",
1303
+ "name": "inverted",
1304
+ "type": {
1305
+ "text": "boolean"
1306
+ },
1307
+ "default": "false",
1308
+ "attribute": "inverted",
1309
+ "reflects": true
1310
+ }
1311
+ ],
1312
+ "attributes": [
1313
+ {
1314
+ "name": "title",
1315
+ "type": {
1316
+ "text": "string"
1317
+ },
1318
+ "default": "''",
1319
+ "fieldName": "title"
1320
+ },
1321
+ {
1322
+ "name": "subtitle",
1323
+ "type": {
1324
+ "text": "string"
1325
+ },
1326
+ "default": "''",
1327
+ "fieldName": "subtitle"
1328
+ },
1329
+ {
1330
+ "name": "content-src",
1331
+ "type": {
1332
+ "text": "string"
1333
+ },
1334
+ "default": "''",
1335
+ "description": "URL of a Markdown file.",
1336
+ "fieldName": "contentSrc"
1337
+ },
1338
+ {
1339
+ "name": "content",
1340
+ "type": {
1341
+ "text": "string"
1342
+ },
1343
+ "default": "''",
1344
+ "description": "Inline Markdown, used when `content-src` is not set.",
1345
+ "fieldName": "content"
1346
+ },
1347
+ {
1348
+ "name": "image-src",
1349
+ "type": {
1350
+ "text": "string"
1351
+ },
1352
+ "default": "''",
1353
+ "fieldName": "imageSrc"
1354
+ },
1355
+ {
1356
+ "name": "image-alt",
1357
+ "type": {
1358
+ "text": "string"
1359
+ },
1360
+ "default": "''",
1361
+ "fieldName": "imageAlt"
1362
+ },
1363
+ {
1364
+ "name": "image-caption",
1365
+ "type": {
1366
+ "text": "string"
1367
+ },
1368
+ "default": "''",
1369
+ "fieldName": "imageCaption"
1370
+ },
1371
+ {
1372
+ "name": "inverted",
1373
+ "type": {
1374
+ "text": "boolean"
1375
+ },
1376
+ "default": "false",
1377
+ "fieldName": "inverted"
1378
+ }
1379
+ ],
1380
+ "superclass": {
1381
+ "name": "LitElement",
1382
+ "package": "lit"
1383
+ },
1384
+ "tagName": "st-content-block",
1385
+ "customElement": true
1386
+ }
1387
+ ],
1388
+ "exports": [
1389
+ {
1390
+ "kind": "js",
1391
+ "name": "ContentBlock",
1392
+ "declaration": {
1393
+ "name": "ContentBlock",
1394
+ "module": "src/content-block/ContentBlock.ts"
1395
+ }
1396
+ },
1397
+ {
1398
+ "kind": "custom-element-definition",
1399
+ "name": "st-content-block",
1400
1400
  "declaration": {
1401
- "name": "CookieConsent",
1402
- "module": "src/cookie-consent/CookieConsent.ts"
1401
+ "name": "ContentBlock",
1402
+ "module": "src/content-block/ContentBlock.ts"
1403
1403
  }
1404
1404
  }
1405
1405
  ]
@@ -1507,7 +1507,7 @@
1507
1507
  "declarations": [
1508
1508
  {
1509
1509
  "kind": "class",
1510
- "description": "A labeled trigger + slotted dropdown panel — nav menus (typically holding an `st-menu-grid`),\naction menus, anything \"click a trigger, show content under it\". A 1:1 port of `SankhyaUI`'s\nReact `Dropdown` (`SankhyaCMS/SankhyaUI/src/components/Dropdown`): same markup\n(`.menu` > `.menu-title` + `.menu-dropdown`), sizes, 0.3s slide/fade, and behavior —\n\n- only one dropdown is open at a time (the source's `DropdownProvider`, built in here, so no\n provider element is needed);\n- a mousedown outside, Escape, or a click inside the panel closes it;\n- an `href` trigger toggles the panel when it has content, and is a plain link when it doesn't;\n- `inline` opens the panel in the flow, the source's `.touch-device` layout.\n\nColors and the panel's surface come from the suite theme (the source left those to the\nconsumer's `className`/`itemGroupClassName` utility classes). Two source rules are left out\nbecause they break existing suite uses (`st-source-bar`'s site/library menus): the 100vw panel\nat <=768px (overflows the screen from wherever the trigger sits; the header uses `inline`\ninstead) and `overflow: hidden` on slotted children (clips their focus rings). Suite additions\nkept on top: `align`, `active`, `disabled`, `inline`, and the `dropdown-toggle` event — plus\n`mega` and `open-on-hover` for an okta.com-style mega menu (see `st-mega-menu`).",
1510
+ "description": "A labeled trigger + slotted dropdown panel — nav menus (typically holding an `st-menu-grid`),\naction menus, anything \"click a trigger, show content under it\". Markup\n(`.menu` > `.menu-title` + `.menu-dropdown`), sizes, 0.3s slide/fade, and behavior —\n\n- only one dropdown is open at a time (a shared provider is built in, so no provider element\n is needed);\n- a mousedown outside, Escape, or a click inside the panel closes it;\n- an `href` trigger toggles the panel when it has content, and is a plain link when it doesn't;\n- `inline` opens the panel in the flow, the source's `.touch-device` layout.\n\nColors and the panel's surface come from the suite theme. The panel is never 100vw wide at\n<=768px (it would overflow the screen from wherever the trigger sits; use `inline` in headers\ninstead), and slotted children are not clipped with `overflow: hidden` (that would cut off their\nfocus rings). Other attributes: `align`, `active`, `disabled`, `inline`, the `dropdown-toggle`\nevent, and `mega` plus `open-on-hover` for a mega menu (see `st-mega-menu`).",
1511
1511
  "name": "Dropdown",
1512
1512
  "cssProperties": [
1513
1513
  {
@@ -2445,7 +2445,7 @@
2445
2445
  "declarations": [
2446
2446
  {
2447
2447
  "kind": "class",
2448
- "description": "A titled grid of feature tiles. Ports `SankhyaUI`'s React `FeaturesSection`: tiles come from the\n`items` property, from slotted `st-feature-item` elements (the source's `children`), or both\n(slotted first). `columns` sets the grid width (default 2; one column below 768px). `inverted`\nis passed on to the `items` tiles; slotted tiles need their own `inverted` attribute.",
2448
+ "description": "A titled grid of feature tiles. Tiles come from the `items` property, from slotted\n`st-feature-item` elements, or both (slotted first). `columns` sets the grid width (default 2;\none column below 768px). `inverted` is passed on to the `items` tiles; slotted tiles need their\nown `inverted` attribute.",
2449
2449
  "name": "FeaturesSection",
2450
2450
  "cssProperties": [
2451
2451
  {
@@ -2581,6 +2581,126 @@
2581
2581
  }
2582
2582
  ]
2583
2583
  },
2584
+ {
2585
+ "kind": "javascript-module",
2586
+ "path": "src/flow/Flow.ts",
2587
+ "declarations": [
2588
+ {
2589
+ "kind": "class",
2590
+ "description": "A left-to-right process or architecture flow: boxes joined by arrows. Boxes come in three looks\n(`solid`, `outline`, `accent`); the arrows are decorative (`aria-hidden`), and the list is exposed\nas an ordered list. Below 600px the row stacks vertically and the arrows point down.\n`inverted` puts the flow on the dark band (`--st-cms-band-dark-bg`).",
2591
+ "name": "Flow",
2592
+ "cssProperties": [
2593
+ {
2594
+ "description": "Overrides the block's padding.",
2595
+ "name": "--st-flow-padding"
2596
+ }
2597
+ ],
2598
+ "cssParts": [
2599
+ {
2600
+ "description": "The ordered list of nodes.",
2601
+ "name": "flow"
2602
+ },
2603
+ {
2604
+ "description": "Each step's box (a `li`'s child).",
2605
+ "name": "node"
2606
+ },
2607
+ {
2608
+ "description": "The box's label.",
2609
+ "name": "label"
2610
+ },
2611
+ {
2612
+ "description": "The box's caption.",
2613
+ "name": "caption"
2614
+ },
2615
+ {
2616
+ "description": "The arrow between two boxes.",
2617
+ "name": "arrow"
2618
+ }
2619
+ ],
2620
+ "members": [
2621
+ {
2622
+ "kind": "field",
2623
+ "name": "nodes",
2624
+ "type": {
2625
+ "text": "FlowNode[]"
2626
+ },
2627
+ "default": "[]",
2628
+ "description": "The boxes, in order."
2629
+ },
2630
+ {
2631
+ "kind": "field",
2632
+ "name": "label",
2633
+ "type": {
2634
+ "text": "string"
2635
+ },
2636
+ "default": "''",
2637
+ "description": "Accessible name for the list of steps.",
2638
+ "attribute": "label"
2639
+ },
2640
+ {
2641
+ "kind": "field",
2642
+ "name": "inverted",
2643
+ "type": {
2644
+ "text": "boolean"
2645
+ },
2646
+ "default": "false",
2647
+ "description": "Puts the flow on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
2648
+ "attribute": "inverted",
2649
+ "reflects": true
2650
+ },
2651
+ {
2652
+ "kind": "method",
2653
+ "name": "arrow",
2654
+ "privacy": "private"
2655
+ }
2656
+ ],
2657
+ "attributes": [
2658
+ {
2659
+ "name": "label",
2660
+ "type": {
2661
+ "text": "string"
2662
+ },
2663
+ "default": "''",
2664
+ "description": "Accessible name for the list of steps.",
2665
+ "fieldName": "label"
2666
+ },
2667
+ {
2668
+ "name": "inverted",
2669
+ "type": {
2670
+ "text": "boolean"
2671
+ },
2672
+ "default": "false",
2673
+ "description": "Puts the flow on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
2674
+ "fieldName": "inverted"
2675
+ }
2676
+ ],
2677
+ "superclass": {
2678
+ "name": "LitElement",
2679
+ "package": "lit"
2680
+ },
2681
+ "tagName": "st-flow",
2682
+ "customElement": true
2683
+ }
2684
+ ],
2685
+ "exports": [
2686
+ {
2687
+ "kind": "js",
2688
+ "name": "Flow",
2689
+ "declaration": {
2690
+ "name": "Flow",
2691
+ "module": "src/flow/Flow.ts"
2692
+ }
2693
+ },
2694
+ {
2695
+ "kind": "custom-element-definition",
2696
+ "name": "st-flow",
2697
+ "declaration": {
2698
+ "name": "Flow",
2699
+ "module": "src/flow/Flow.ts"
2700
+ }
2701
+ }
2702
+ ]
2703
+ },
2584
2704
  {
2585
2705
  "kind": "javascript-module",
2586
2706
  "path": "src/footer/Footer.ts",
@@ -2858,7 +2978,7 @@
2858
2978
  "declarations": [
2859
2979
  {
2860
2980
  "kind": "class",
2861
- "description": "The app-shell header bar — brand (image + title, or title alone) on the left, a `slot=\"menu\"`\nfor primary nav (e.g. `st-dropdown`/`st-menu-grid` mega-menus, or plain links) taking the\nmiddle, and a `slot=\"utility\"` for account/app-switcher/theme controls on the right. Ported\nfrom `SankhyaUI`'s React `Header` (a separate, unrelated marketing-site project) to this\npackage's Lit conventions and this workspace's actual needs — that source component takes an\n`imageSrc` logo with no text fallback, but none of this suite's apps has a logo image today, so\n`title` is the primary brand prop here and `brand-image-url` is optional, mirroring\n`st-app-header`'s own brand/title split (this component's slotted-menu/utility shape is a\ndeliberately different, more generic surface than `st-app-header`'s fixed nav-links/user-menu\nprops — pick whichever fits a given app's header).\n\nLayout follows the source's `Header.css`: the menu starts 4rem after the brand, the utility\ncontrols sit after a vertical divider, and below `BREAKPOINT_TABLET` (900px here; 768px in the\nsource) `menu`/`utility` collapse behind a hamburger toggle into a full-screen layer under the\ntoggle (closes on Escape or a click inside it), where the menu's `st-dropdown`s are switched to\n`inline` so they open in the flow — the same two slotted elements just get repositioned by CSS\n(`.mobile-panel`'s `display: contents` at desktop width vs. a real fixed-position box below\n`BREAKPOINT_TABLET`), rather than the slots being duplicated in the template, since a shadow\nroot can only ever assign a given light-DOM child to the *first* slot of a given name.\n\nAn optional `slot=\"brand-extra\"` sits right after the brand (e.g. an edition badge such as\n\"🇮🇳 India Edition\"); unlike `menu`/`utility` it stays in the bar at every width.\n\nAlso carries an optional built-in language switcher (`languages`/`currentLanguageCode`, fires\n`language-change`) — ported from `st-app-header`'s own implementation verbatim rather than\nrebuilt, since the source `Header`'s reference story shows an equivalent flag/language `Select`\nas a first-class header utility. Hidden entirely when `languages` has fewer than two entries.\nThis component has no translation logic itself; the consuming app owns what a language `code`\nmeans and which content it re-renders in response.",
2981
+ "description": "The app-shell header bar — brand (image + title, or title alone) on the left, a `slot=\"menu\"`\nfor primary nav (e.g. `st-dropdown`/`st-menu-grid` mega-menus, or plain links) taking the\nmiddle, and a `slot=\"utility\"` for account/app-switcher/theme controls on the right. `title` is\nthe primary brand prop; `brand-image-url` is optional. For a fixed nav-links/user-menu header,\nuse `st-app-header` instead.\n\nLayout: the menu starts 4rem after the brand, the utility\ncontrols sit after a vertical divider, and below `BREAKPOINT_TABLET` (900px) `menu`/`utility`\ncollapse behind a hamburger toggle into a full-screen layer under the\ntoggle (closes on Escape or a click inside it), where the menu's `st-dropdown`s are switched to\n`inline` so they open in the flow — the same two slotted elements just get repositioned by CSS\n(`.mobile-panel`'s `display: contents` at desktop width vs. a real fixed-position box below\n`BREAKPOINT_TABLET`), rather than the slots being duplicated in the template, since a shadow\nroot can only ever assign a given light-DOM child to the *first* slot of a given name.\n\nAn optional `slot=\"brand-extra\"` sits right after the brand (e.g. an edition badge such as\n\"🇮🇳 India Edition\"); unlike `menu`/`utility` it stays in the bar at every width.\n\nAlso carries an optional built-in language switcher (`languages`/`currentLanguageCode`, fires\n`language-change`). Hidden entirely when `languages` has fewer than two entries.\nThis component has no translation logic itself; the consuming app owns what a language `code`\nmeans and which content it re-renders in response.",
2862
2982
  "name": "Header",
2863
2983
  "cssProperties": [
2864
2984
  {
@@ -3152,7 +3272,7 @@
3152
3272
  "kind": "field",
3153
3273
  "name": "syncInlineDropdowns",
3154
3274
  "privacy": "private",
3155
- "description": "While the hamburger layout is on, the dropdowns in the header open in the flow of the\nfull-screen panel instead of floating over it (SankhyaUI's touch-device layout)."
3275
+ "description": "While the hamburger layout is on, the dropdowns in the header open in the flow of the\nfull-screen panel instead of floating over it (the touch-device layout)."
3156
3276
  },
3157
3277
  {
3158
3278
  "kind": "field",
@@ -3435,7 +3555,7 @@
3435
3555
  "declarations": [
3436
3556
  {
3437
3557
  "kind": "class",
3438
- "description": "Full-width hero banner: background image with a darkening overlay, optional eyebrow, title,\noptional subtitle and up to two call-to-action links. Port of `SankhyaUI`'s React `Hero`; the\nframer-motion entrance is redone as CSS keyframes (skipped under `prefers-reduced-motion`).\n\n`size`, `content-position` and `overlay=\"gradient\"` give the large editorial layout (copy on the\nlower left over a gradient that darkens towards it) used by enterprise marketing heroes; the\ndefaults keep the original centered banner. Put several heroes in an `st-carousel` with\n`indicator-style=\"tabs\"` for a tabbed hero carousel.",
3558
+ "description": "Full-width hero banner: background image with a darkening overlay, optional eyebrow, title,\noptional subtitle and up to two call-to-action links. The entrance animation is CSS keyframes\n(skipped under `prefers-reduced-motion`).\n\n`size`, `content-position` and `overlay=\"gradient\"` give the large editorial layout (copy on the\nlower left over a gradient that darkens towards it) used by enterprise marketing heroes; the\ndefaults keep the original centered banner. Put several heroes in an `st-carousel` with\n`indicator-style=\"tabs\"` for a tabbed hero carousel.\n\n`badge` is a pill above the title; `highlights` is a row of check-marked points under the buttons.\n`layout=\"split\"` swaps the background for a two-column layout: copy on one side, `image-src` as an\n`<img>` (alt from `image-alt`) on the other, on normal page colours with no overlay.",
3439
3559
  "name": "Hero",
3440
3560
  "cssProperties": [
3441
3561
  {
@@ -3452,6 +3572,18 @@
3452
3572
  "description": "The small label above the title.",
3453
3573
  "name": "eyebrow"
3454
3574
  },
3575
+ {
3576
+ "description": "The pill above the title.",
3577
+ "name": "badge"
3578
+ },
3579
+ {
3580
+ "description": "The row of check-marked points.",
3581
+ "name": "highlights"
3582
+ },
3583
+ {
3584
+ "description": "The image in `layout=\"split\"`.",
3585
+ "name": "image"
3586
+ },
3455
3587
  {
3456
3588
  "description": "The outlined second button.",
3457
3589
  "name": "secondary-action"
@@ -3571,6 +3703,46 @@
3571
3703
  "default": "''",
3572
3704
  "attribute": "secondary-href"
3573
3705
  },
3706
+ {
3707
+ "kind": "field",
3708
+ "name": "badge",
3709
+ "type": {
3710
+ "text": "string"
3711
+ },
3712
+ "default": "''",
3713
+ "description": "Small pill above the title (e.g. \"New\", \"Now available\").",
3714
+ "attribute": "badge"
3715
+ },
3716
+ {
3717
+ "kind": "field",
3718
+ "name": "highlights",
3719
+ "type": {
3720
+ "text": "string[]"
3721
+ },
3722
+ "default": "[]",
3723
+ "description": "Check-marked points shown in a row under the buttons."
3724
+ },
3725
+ {
3726
+ "kind": "field",
3727
+ "name": "layout",
3728
+ "type": {
3729
+ "text": "'background' | 'split'"
3730
+ },
3731
+ "default": "'background'",
3732
+ "description": "`background` (default) puts `image-src` behind the copy; `split` puts copy and image side by side.",
3733
+ "attribute": "layout",
3734
+ "reflects": true
3735
+ },
3736
+ {
3737
+ "kind": "field",
3738
+ "name": "imageAlt",
3739
+ "type": {
3740
+ "text": "string"
3741
+ },
3742
+ "default": "''",
3743
+ "description": "Alt text of the image in `layout=\"split\"`. Empty marks it as decorative.",
3744
+ "attribute": "image-alt"
3745
+ },
3574
3746
  {
3575
3747
  "kind": "field",
3576
3748
  "name": "size",
@@ -3760,6 +3932,33 @@
3760
3932
  "default": "''",
3761
3933
  "fieldName": "secondaryHref"
3762
3934
  },
3935
+ {
3936
+ "name": "badge",
3937
+ "type": {
3938
+ "text": "string"
3939
+ },
3940
+ "default": "''",
3941
+ "description": "Small pill above the title (e.g. \"New\", \"Now available\").",
3942
+ "fieldName": "badge"
3943
+ },
3944
+ {
3945
+ "name": "layout",
3946
+ "type": {
3947
+ "text": "'background' | 'split'"
3948
+ },
3949
+ "default": "'background'",
3950
+ "description": "`background` (default) puts `image-src` behind the copy; `split` puts copy and image side by side.",
3951
+ "fieldName": "layout"
3952
+ },
3953
+ {
3954
+ "name": "image-alt",
3955
+ "type": {
3956
+ "text": "string"
3957
+ },
3958
+ "default": "''",
3959
+ "description": "Alt text of the image in `layout=\"split\"`. Empty marks it as decorative.",
3960
+ "fieldName": "imageAlt"
3961
+ },
3763
3962
  {
3764
3963
  "name": "size",
3765
3964
  "type": {
@@ -3821,7 +4020,7 @@
3821
4020
  "declarations": [
3822
4021
  {
3823
4022
  "kind": "class",
3824
- "description": "A small, icon-only action button — ported from `SankhyaUI`'s React `IconButton` (a separate,\nunrelated marketing-site project; that source takes an iconify string `icon` prop, this package\nhas no iconify dependency, so the icon is default-slotted content instead, same convention as\n`st-dropdown`/`st-menu-grid-item`'s `slot=\"icon\"`).\n\nFires a plain native `click` — no custom event, since a caller just wants an ordinary button.",
4023
+ "description": "A small, icon-only action button. The icon is default-slotted content (the package has no icon\nlibrary dependency), the same convention as `st-dropdown`/`st-menu-grid-item`'s `slot=\"icon\"`.\n\nFires a plain native `click` — no custom event, since a caller just wants an ordinary button.",
3825
4024
  "name": "IconButton",
3826
4025
  "members": [
3827
4026
  {
@@ -3897,7 +4096,7 @@
3897
4096
  "declarations": [
3898
4097
  {
3899
4098
  "kind": "class",
3900
- "description": "A vertical list of collapsible title/content rows; one open at a time unless `allow-multiple`.",
4099
+ "description": "A vertical list of collapsible title/content rows; one open at a time unless `allow-multiple`.\nEach row's `content` is Markdown, sanitized. `open-first` starts with the first row open.",
3901
4100
  "name": "ItemsAccordion",
3902
4101
  "cssProperties": [
3903
4102
  {
@@ -3941,6 +4140,16 @@
3941
4140
  "default": "false",
3942
4141
  "attribute": "allow-multiple"
3943
4142
  },
4143
+ {
4144
+ "kind": "field",
4145
+ "name": "openFirst",
4146
+ "type": {
4147
+ "text": "boolean"
4148
+ },
4149
+ "default": "false",
4150
+ "description": "Starts with the first row open. Applies when `items` or this flag changes while nothing is open.",
4151
+ "attribute": "open-first"
4152
+ },
3944
4153
  {
3945
4154
  "kind": "field",
3946
4155
  "name": "openIds",
@@ -3993,6 +4202,15 @@
3993
4202
  },
3994
4203
  "default": "false",
3995
4204
  "fieldName": "allowMultiple"
4205
+ },
4206
+ {
4207
+ "name": "open-first",
4208
+ "type": {
4209
+ "text": "boolean"
4210
+ },
4211
+ "default": "false",
4212
+ "description": "Starts with the first row open. Applies when `items` or this flag changes while nothing is open.",
4213
+ "fieldName": "openFirst"
3996
4214
  }
3997
4215
  ],
3998
4216
  "superclass": {
@@ -4183,7 +4401,7 @@
4183
4401
  "declarations": [
4184
4402
  {
4185
4403
  "kind": "class",
4186
- "description": "Renders Markdown (GFM, single newlines become `<br>`) from either an inline `content` string or\na `src` URL it fetches. Ports `SankhyaUI`'s `useMarkdown` hook + `react-markdown` (remark-gfm,\nremark-breaks); output is sanitized with DOMPurify. `src` wins over `content` when both are set.\nWhile a fetch is pending it shows \"Loading content...\"; on failure \"Error loading content.\" and\na `markdown-error` event (detail: `{ error }`).\n\nText color is inherited from the parent so inverted containers just work.",
4404
+ "description": "Renders Markdown (GFM, single newlines become `<br>`) from either an inline `content` string or\na `src` URL it fetches. Output is sanitized with DOMPurify. `src` wins over `content` when both are set.\nWhile a fetch is pending it shows \"Loading content...\"; on failure \"Error loading content.\" and\na `markdown-error` event (detail: `{ error }`).\n\nText color is inherited from the parent so inverted containers just work.",
4187
4405
  "name": "Markdown",
4188
4406
  "members": [
4189
4407
  {
@@ -4777,10 +4995,10 @@
4777
4995
  "kind": "field",
4778
4996
  "name": "variant",
4779
4997
  "type": {
4780
- "text": "'story' | 'overlay'"
4998
+ "text": "'story' | 'overlay' | 'tip'"
4781
4999
  },
4782
5000
  "default": "'story'",
4783
- "description": "`story` (default) or `overlay` — see the element description.",
5001
+ "description": "`story` (default), `overlay` (dark, over an image or gradient) or `tip` (light blue, for a hint).",
4784
5002
  "attribute": "variant",
4785
5003
  "reflects": true
4786
5004
  },
@@ -4904,10 +5122,10 @@
4904
5122
  {
4905
5123
  "name": "variant",
4906
5124
  "type": {
4907
- "text": "'story' | 'overlay'"
5125
+ "text": "'story' | 'overlay' | 'tip'"
4908
5126
  },
4909
5127
  "default": "'story'",
4910
- "description": "`story` (default) or `overlay` — see the element description.",
5128
+ "description": "`story` (default), `overlay` (dark, over an image or gradient) or `tip` (light blue, for a hint).",
4911
5129
  "fieldName": "variant"
4912
5130
  },
4913
5131
  {
@@ -5029,7 +5247,7 @@
5029
5247
  "declarations": [
5030
5248
  {
5031
5249
  "kind": "class",
5032
- "description": "A responsive grid of `st-menu-grid-item`s — the \"rich\" nav-menu layout (icon + title +\ndescription per entry, arranged in columns), typically slotted into `st-dropdown`'s default\nslot. A 1:1 port of `SankhyaUI`'s React `MenuGrid` (`SankhyaCMS/SankhyaUI/src/components/Menu`):\nsame markup (`.menu-grid-container` > `.menu-grid.columns-N`), gap and breakpoints (768px: 2–4\ncolumns → 2; 480px: everything → 1; a 1-column grid stays 1).",
5250
+ "description": "A responsive grid of `st-menu-grid-item`s — the \"rich\" nav-menu layout (icon + title +\ndescription per entry, arranged in columns), typically slotted into `st-dropdown`'s default\nslot. Markup is `.menu-grid-container` > `.menu-grid.columns-N`; breakpoints: at 768px, 2–4\ncolumns become 2; at 480px, everything becomes 1 (a 1-column grid stays 1).",
5033
5251
  "name": "MenuGrid",
5034
5252
  "members": [
5035
5253
  {
@@ -5106,7 +5324,7 @@
5106
5324
  "declarations": [
5107
5325
  {
5108
5326
  "kind": "class",
5109
- "description": "One entry in an `st-menu-grid` — icon (via `slot=\"icon\"`) + title on one line, an optional\ndescription below, and an optional corner badge (\"New\", \"Popular\", ...). A 1:1 port of\n`SankhyaUI`'s React `MenuGridItem` (`SankhyaCMS/SankhyaUI/src/components/Menu`): same markup and\nCSS, with its `motion` effects redone in CSS — fades up the first time it scrolls into view,\nscales to 1.02 on hover / 0.98 while pressed, the icon tilts on hover, the badge pops in.\nColors come from the suite theme rather than per-item utility classes.\n\nAn `http(s)` `href` opens in a new tab, like the source. Any other `href` fires a *cancelable*\n`menu-grid-item-select` event (detail: `{ href }`) first: a host doing client-side routing calls\n`event.preventDefault()` on it, which also cancels the anchor's own navigation (the source used\nreact-router's `Link` here; the suite apps have no router).",
5327
+ "description": "One entry in an `st-menu-grid` — icon (via `slot=\"icon\"`) + title on one line, an optional\ndescription below, and an optional corner badge (\"New\", \"Popular\", ...). Effects are CSS:\nfades up the first time it scrolls into view, scales to 1.02 on hover / 0.98 while pressed, the\nicon tilts on hover, the badge pops in. Colors come from the suite theme rather than per-item\nutility classes.\n\nAn `http(s)` `href` opens in a new tab. Any other `href` fires a *cancelable*\n`menu-grid-item-select` event (detail: `{ href }`) first: a host doing client-side routing calls\n`event.preventDefault()` on it, which also cancels the anchor's own navigation.",
5110
5328
  "name": "MenuGridItem",
5111
5329
  "members": [
5112
5330
  {
@@ -5309,7 +5527,7 @@
5309
5527
  "declarations": [
5310
5528
  {
5311
5529
  "kind": "class",
5312
- "description": "A single flat nav row — icon (`slot=\"icon\"`) + title + badge on one line, an optional\ndescription below — as opposed to `st-menu-grid-item`'s card for a multi-column grid. A 1:1\nport of `SankhyaUI`'s React `MenuItem` (`SankhyaCMS/SankhyaUI/src/components/Menu`): same\nmarkup and CSS, with its `motion` effects redone in CSS — nudges right and scales to 1.01 on\nhover / 0.99 while pressed, the icon tilts on hover, the badge pops in, the description fades\nin. Colors come from the suite theme rather than per-item utility classes.\n\nRenders a real `<a href>` but fires a *cancelable* `menu-item-select` event (detail: `{ href }`)\nbefore navigating — a host doing client-side routing calls `event.preventDefault()` on it (the\nsource used react-router's `Link` here; the suite apps have no router).",
5530
+ "description": "A single flat nav row — icon (`slot=\"icon\"`) + title + badge on one line, an optional\ndescription below — as opposed to `st-menu-grid-item`'s card for a multi-column grid. Effects\nare CSS: nudges right and scales to 1.01 on hover / 0.99 while pressed, the icon tilts on hover,\nthe badge pops in, the description fades in. Colors come from the suite theme rather than\nper-item utility classes.\n\nRenders a real `<a href>` but fires a *cancelable* `menu-item-select` event (detail: `{ href }`)\nbefore navigating — a host doing client-side routing calls `event.preventDefault()` on it.",
5313
5531
  "name": "MenuItem",
5314
5532
  "cssProperties": [
5315
5533
  {
@@ -5575,7 +5793,7 @@
5575
5793
  "declarations": [
5576
5794
  {
5577
5795
  "kind": "class",
5578
- "description": "Rounded call-to-action banner (title, subtitle, one outlined button) on a dark panel or a\nbackground image. Port of `SankhyaUI`'s React `PromoBanner`; the button fires an `action` event\n(detail `{ href }`, empty unless set) in place of `onAction`.",
5796
+ "description": "Rounded call-to-action banner (title, subtitle, one or two outlined buttons) on a dark panel or a\nbackground image. The buttons fire an `action` event\n(detail `{ href }`, empty unless set; the secondary button adds `kind: 'secondary'`).\n`onAction`. `variant=\"accent\"` fills the banner with the brand colour.",
5579
5797
  "name": "PromoBanner",
5580
5798
  "cssProperties": [
5581
5799
  {
@@ -5587,6 +5805,16 @@
5587
5805
  "name": "--st-promo-banner-padding"
5588
5806
  }
5589
5807
  ],
5808
+ "cssParts": [
5809
+ {
5810
+ "description": "The primary button.",
5811
+ "name": "action"
5812
+ },
5813
+ {
5814
+ "description": "The second button.",
5815
+ "name": "secondary-action"
5816
+ }
5817
+ ],
5590
5818
  "members": [
5591
5819
  {
5592
5820
  "kind": "field",
@@ -5633,6 +5861,37 @@
5633
5861
  "default": "''",
5634
5862
  "attribute": "image-src"
5635
5863
  },
5864
+ {
5865
+ "kind": "field",
5866
+ "name": "secondaryActionLabel",
5867
+ "type": {
5868
+ "text": "string"
5869
+ },
5870
+ "default": "''",
5871
+ "description": "Label of a second, outlined button next to the first.",
5872
+ "attribute": "secondary-action-label"
5873
+ },
5874
+ {
5875
+ "kind": "field",
5876
+ "name": "secondaryHref",
5877
+ "type": {
5878
+ "text": "string"
5879
+ },
5880
+ "default": "''",
5881
+ "description": "Target of the second button, sent in the `action` event detail.",
5882
+ "attribute": "secondary-href"
5883
+ },
5884
+ {
5885
+ "kind": "field",
5886
+ "name": "variant",
5887
+ "type": {
5888
+ "text": "'default' | 'accent'"
5889
+ },
5890
+ "default": "'default'",
5891
+ "description": "`default` is the dark panel; `accent` fills the banner with the brand colour and makes the first button white.",
5892
+ "attribute": "variant",
5893
+ "reflects": true
5894
+ },
5636
5895
  {
5637
5896
  "kind": "field",
5638
5897
  "name": "inverted",
@@ -5647,6 +5906,17 @@
5647
5906
  "kind": "field",
5648
5907
  "name": "onAction",
5649
5908
  "privacy": "private"
5909
+ },
5910
+ {
5911
+ "kind": "field",
5912
+ "name": "onSecondaryAction",
5913
+ "privacy": "private"
5914
+ }
5915
+ ],
5916
+ "events": [
5917
+ {
5918
+ "description": "Detail `{ href, kind? }`. `kind` is `secondary` for the second button only.",
5919
+ "name": "action"
5650
5920
  }
5651
5921
  ],
5652
5922
  "attributes": [
@@ -5690,6 +5960,33 @@
5690
5960
  "default": "''",
5691
5961
  "fieldName": "imageSrc"
5692
5962
  },
5963
+ {
5964
+ "name": "secondary-action-label",
5965
+ "type": {
5966
+ "text": "string"
5967
+ },
5968
+ "default": "''",
5969
+ "description": "Label of a second, outlined button next to the first.",
5970
+ "fieldName": "secondaryActionLabel"
5971
+ },
5972
+ {
5973
+ "name": "secondary-href",
5974
+ "type": {
5975
+ "text": "string"
5976
+ },
5977
+ "default": "''",
5978
+ "description": "Target of the second button, sent in the `action` event detail.",
5979
+ "fieldName": "secondaryHref"
5980
+ },
5981
+ {
5982
+ "name": "variant",
5983
+ "type": {
5984
+ "text": "'default' | 'accent'"
5985
+ },
5986
+ "default": "'default'",
5987
+ "description": "`default` is the dark panel; `accent` fills the banner with the brand colour and makes the first button white.",
5988
+ "fieldName": "variant"
5989
+ },
5693
5990
  {
5694
5991
  "name": "inverted",
5695
5992
  "type": {
@@ -5752,6 +6049,10 @@
5752
6049
  {
5753
6050
  "description": "The heading block.",
5754
6051
  "name": "header"
6052
+ },
6053
+ {
6054
+ "description": "The wrapper around the slot (the grid when `columns` is 2).",
6055
+ "name": "content"
5755
6056
  }
5756
6057
  ],
5757
6058
  "slots": [
@@ -5832,6 +6133,17 @@
5832
6133
  "attribute": "width",
5833
6134
  "reflects": true
5834
6135
  },
6136
+ {
6137
+ "kind": "field",
6138
+ "name": "columns",
6139
+ "type": {
6140
+ "text": "1 | 2"
6141
+ },
6142
+ "default": "1",
6143
+ "description": "Columns for the slotted children: `1` (default, stacked) or `2` (two equal columns, stacked again below 720px).",
6144
+ "attribute": "columns",
6145
+ "reflects": true
6146
+ },
5835
6147
  {
5836
6148
  "kind": "field",
5837
6149
  "name": "textAlignment",
@@ -5901,9 +6213,18 @@
5901
6213
  "type": {
5902
6214
  "text": "'contained' | 'narrow' | 'full'"
5903
6215
  },
5904
- "default": "'contained'",
5905
- "description": "`contained` (default, the page container width), `narrow` (reading width) or `full` (edge to edge).",
5906
- "fieldName": "width"
6216
+ "default": "'contained'",
6217
+ "description": "`contained` (default, the page container width), `narrow` (reading width) or `full` (edge to edge).",
6218
+ "fieldName": "width"
6219
+ },
6220
+ {
6221
+ "name": "columns",
6222
+ "type": {
6223
+ "text": "1 | 2"
6224
+ },
6225
+ "default": "1",
6226
+ "description": "Columns for the slotted children: `1` (default, stacked) or `2` (two equal columns, stacked again below 720px).",
6227
+ "fieldName": "columns"
5907
6228
  },
5908
6229
  {
5909
6230
  "name": "text-alignment",
@@ -6360,6 +6681,278 @@
6360
6681
  }
6361
6682
  ]
6362
6683
  },
6684
+ {
6685
+ "kind": "javascript-module",
6686
+ "path": "src/steps/Steps.ts",
6687
+ "declarations": [
6688
+ {
6689
+ "kind": "class",
6690
+ "description": "A numbered process: a responsive grid of cards, each with an automatic \"01\", \"02\", ... number, a\ntitle and a description. `highlightLast` makes the final card a dark navy call-out, the way\nenterprise pages close a how-it-works sequence. `inverted` puts the whole block on the dark band.",
6691
+ "name": "Steps",
6692
+ "cssProperties": [
6693
+ {
6694
+ "description": "Overrides the block's padding.",
6695
+ "name": "--st-steps-padding"
6696
+ }
6697
+ ],
6698
+ "cssParts": [
6699
+ {
6700
+ "description": "The eyebrow/title/subtitle block.",
6701
+ "name": "header"
6702
+ },
6703
+ {
6704
+ "description": "Each step card (an `li`).",
6705
+ "name": "card"
6706
+ },
6707
+ {
6708
+ "description": "The step number.",
6709
+ "name": "number"
6710
+ }
6711
+ ],
6712
+ "members": [
6713
+ {
6714
+ "kind": "field",
6715
+ "name": "eyebrow",
6716
+ "type": {
6717
+ "text": "string"
6718
+ },
6719
+ "default": "''",
6720
+ "description": "Small uppercase label above the title.",
6721
+ "attribute": "eyebrow"
6722
+ },
6723
+ {
6724
+ "kind": "field",
6725
+ "name": "title",
6726
+ "type": {
6727
+ "text": "string"
6728
+ },
6729
+ "default": "''",
6730
+ "attribute": "title"
6731
+ },
6732
+ {
6733
+ "kind": "field",
6734
+ "name": "subtitle",
6735
+ "type": {
6736
+ "text": "string"
6737
+ },
6738
+ "default": "''",
6739
+ "attribute": "subtitle"
6740
+ },
6741
+ {
6742
+ "kind": "field",
6743
+ "name": "items",
6744
+ "type": {
6745
+ "text": "StepItem[]"
6746
+ },
6747
+ "default": "[]",
6748
+ "description": "The steps, in order."
6749
+ },
6750
+ {
6751
+ "kind": "field",
6752
+ "name": "highlightLast",
6753
+ "type": {
6754
+ "text": "boolean"
6755
+ },
6756
+ "default": "false",
6757
+ "description": "Renders the last step as a dark navy call-out card.",
6758
+ "attribute": "highlight-last",
6759
+ "reflects": true
6760
+ },
6761
+ {
6762
+ "kind": "field",
6763
+ "name": "inverted",
6764
+ "type": {
6765
+ "text": "boolean"
6766
+ },
6767
+ "default": "false",
6768
+ "description": "Puts the block on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
6769
+ "attribute": "inverted",
6770
+ "reflects": true
6771
+ }
6772
+ ],
6773
+ "attributes": [
6774
+ {
6775
+ "name": "eyebrow",
6776
+ "type": {
6777
+ "text": "string"
6778
+ },
6779
+ "default": "''",
6780
+ "description": "Small uppercase label above the title.",
6781
+ "fieldName": "eyebrow"
6782
+ },
6783
+ {
6784
+ "name": "title",
6785
+ "type": {
6786
+ "text": "string"
6787
+ },
6788
+ "default": "''",
6789
+ "fieldName": "title"
6790
+ },
6791
+ {
6792
+ "name": "subtitle",
6793
+ "type": {
6794
+ "text": "string"
6795
+ },
6796
+ "default": "''",
6797
+ "fieldName": "subtitle"
6798
+ },
6799
+ {
6800
+ "name": "highlight-last",
6801
+ "type": {
6802
+ "text": "boolean"
6803
+ },
6804
+ "default": "false",
6805
+ "description": "Renders the last step as a dark navy call-out card.",
6806
+ "fieldName": "highlightLast"
6807
+ },
6808
+ {
6809
+ "name": "inverted",
6810
+ "type": {
6811
+ "text": "boolean"
6812
+ },
6813
+ "default": "false",
6814
+ "description": "Puts the block on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
6815
+ "fieldName": "inverted"
6816
+ }
6817
+ ],
6818
+ "superclass": {
6819
+ "name": "LitElement",
6820
+ "package": "lit"
6821
+ },
6822
+ "tagName": "st-steps",
6823
+ "customElement": true
6824
+ }
6825
+ ],
6826
+ "exports": [
6827
+ {
6828
+ "kind": "js",
6829
+ "name": "Steps",
6830
+ "declaration": {
6831
+ "name": "Steps",
6832
+ "module": "src/steps/Steps.ts"
6833
+ }
6834
+ },
6835
+ {
6836
+ "kind": "custom-element-definition",
6837
+ "name": "st-steps",
6838
+ "declaration": {
6839
+ "name": "Steps",
6840
+ "module": "src/steps/Steps.ts"
6841
+ }
6842
+ }
6843
+ ]
6844
+ },
6845
+ {
6846
+ "kind": "javascript-module",
6847
+ "path": "src/tag-strip/TagStrip.ts",
6848
+ "declarations": [
6849
+ {
6850
+ "kind": "class",
6851
+ "description": "A single bordered band: a small uppercase label on the left and a run of bold items beside it\n(e.g. \"Supported platforms: AWS · Azure · GCP\"). Items wrap onto new lines on narrow screens.\n`inverted` puts the band on the dark band (`--st-cms-band-dark-bg`).",
6852
+ "name": "TagStrip",
6853
+ "cssProperties": [
6854
+ {
6855
+ "description": "Overrides the block's padding.",
6856
+ "name": "--st-tag-strip-padding"
6857
+ }
6858
+ ],
6859
+ "cssParts": [
6860
+ {
6861
+ "description": "The bordered band.",
6862
+ "name": "strip"
6863
+ },
6864
+ {
6865
+ "description": "The uppercase label.",
6866
+ "name": "label"
6867
+ },
6868
+ {
6869
+ "description": "The list of items.",
6870
+ "name": "items"
6871
+ },
6872
+ {
6873
+ "description": "Each item (an `li`).",
6874
+ "name": "item"
6875
+ }
6876
+ ],
6877
+ "members": [
6878
+ {
6879
+ "kind": "field",
6880
+ "name": "label",
6881
+ "type": {
6882
+ "text": "string"
6883
+ },
6884
+ "default": "''",
6885
+ "description": "Small uppercase label at the start of the band. Omit it for items alone.",
6886
+ "attribute": "label"
6887
+ },
6888
+ {
6889
+ "kind": "field",
6890
+ "name": "items",
6891
+ "type": {
6892
+ "text": "string[]"
6893
+ },
6894
+ "default": "[]",
6895
+ "description": "The items, shown in order."
6896
+ },
6897
+ {
6898
+ "kind": "field",
6899
+ "name": "inverted",
6900
+ "type": {
6901
+ "text": "boolean"
6902
+ },
6903
+ "default": "false",
6904
+ "description": "Puts the band on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
6905
+ "attribute": "inverted",
6906
+ "reflects": true
6907
+ }
6908
+ ],
6909
+ "attributes": [
6910
+ {
6911
+ "name": "label",
6912
+ "type": {
6913
+ "text": "string"
6914
+ },
6915
+ "default": "''",
6916
+ "description": "Small uppercase label at the start of the band. Omit it for items alone.",
6917
+ "fieldName": "label"
6918
+ },
6919
+ {
6920
+ "name": "inverted",
6921
+ "type": {
6922
+ "text": "boolean"
6923
+ },
6924
+ "default": "false",
6925
+ "description": "Puts the band on the dark band (`--st-cms-band-dark-bg`), which stays dark in the dark theme.",
6926
+ "fieldName": "inverted"
6927
+ }
6928
+ ],
6929
+ "superclass": {
6930
+ "name": "LitElement",
6931
+ "package": "lit"
6932
+ },
6933
+ "tagName": "st-tag-strip",
6934
+ "customElement": true
6935
+ }
6936
+ ],
6937
+ "exports": [
6938
+ {
6939
+ "kind": "js",
6940
+ "name": "TagStrip",
6941
+ "declaration": {
6942
+ "name": "TagStrip",
6943
+ "module": "src/tag-strip/TagStrip.ts"
6944
+ }
6945
+ },
6946
+ {
6947
+ "kind": "custom-element-definition",
6948
+ "name": "st-tag-strip",
6949
+ "declaration": {
6950
+ "name": "TagStrip",
6951
+ "module": "src/tag-strip/TagStrip.ts"
6952
+ }
6953
+ }
6954
+ ]
6955
+ },
6363
6956
  {
6364
6957
  "kind": "javascript-module",
6365
6958
  "path": "src/testimonials/Testimonials.ts",
@@ -6678,7 +7271,7 @@
6678
7271
  "declarations": [
6679
7272
  {
6680
7273
  "kind": "class",
6681
- "description": "A small label that shows above a control on hover and on keyboard focus. Wrap the control (a button\nor an icon button) in it and pass the same words as its accessible name in `text`. The bubble is\ndecorative (`aria-hidden`): the control's own `aria-label` is what a screen reader announces, so the\nwords aren't read twice.\n\nThe bubble is positioned by the wrapper, so put the tooltip where it has room above: it's not\nclipped by the wrapper's own box, but it is clipped by an ancestor with `overflow: hidden`.",
7274
+ "description": "A small label that shows above a control: after a short rest on hover, and at once on keyboard focus.\nWrap the control (a button or an icon button) in it and pass the same words as its accessible name in\n`text`. The control is still the thing that's announced; the bubble is decorative (`aria-hidden`), so the\nwords aren't read twice.\n\nThe bubble is `position: fixed` and placed from the wrapper's position when it shows, so a clipping\nancestor (a card or panel with `overflow: hidden`) can't cut it off. It shows around a control that\ncan't act right now too, as long as that control is focusable or hoverable (use `aria-disabled`, not\nthe native `disabled`, which takes a control out of focus and pointer events).",
6682
7275
  "name": "Tooltip",
6683
7276
  "members": [
6684
7277
  {
@@ -6688,8 +7281,44 @@
6688
7281
  "text": "string"
6689
7282
  },
6690
7283
  "default": "''",
6691
- "description": "The words shown in the bubble: the same words as the control's accessible name.",
7284
+ "description": "The words shown in the bubble: the same words as the control's accessible name, or the reason the\ncontrol can't act right now.",
6692
7285
  "attribute": "text"
7286
+ },
7287
+ {
7288
+ "kind": "field",
7289
+ "name": "bubble",
7290
+ "type": {
7291
+ "text": "HTMLElement | undefined"
7292
+ },
7293
+ "privacy": "private"
7294
+ },
7295
+ {
7296
+ "kind": "field",
7297
+ "name": "timer",
7298
+ "type": {
7299
+ "text": "number | undefined"
7300
+ },
7301
+ "privacy": "private"
7302
+ },
7303
+ {
7304
+ "kind": "field",
7305
+ "name": "onPointerEnter",
7306
+ "privacy": "private"
7307
+ },
7308
+ {
7309
+ "kind": "method",
7310
+ "name": "cancel",
7311
+ "privacy": "private"
7312
+ },
7313
+ {
7314
+ "kind": "field",
7315
+ "name": "show",
7316
+ "privacy": "private"
7317
+ },
7318
+ {
7319
+ "kind": "field",
7320
+ "name": "hide",
7321
+ "privacy": "private"
6693
7322
  }
6694
7323
  ],
6695
7324
  "attributes": [
@@ -6699,7 +7328,7 @@
6699
7328
  "text": "string"
6700
7329
  },
6701
7330
  "default": "''",
6702
- "description": "The words shown in the bubble: the same words as the control's accessible name.",
7331
+ "description": "The words shown in the bubble: the same words as the control's accessible name, or the reason the\ncontrol can't act right now.",
6703
7332
  "fieldName": "text"
6704
7333
  }
6705
7334
  ],