@sondor-technology/sondor-components 1.0.9 → 1.0.10

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 (431) hide show
  1. package/dist/components/accordion/accordion.constants.d.ts +5 -0
  2. package/dist/components/accordion/accordion.constants.d.ts.map +1 -0
  3. package/dist/components/accordion/accordion.constants.js +3 -0
  4. package/dist/components/accordion/accordion.constants.js.map +1 -0
  5. package/dist/components/accordion/accordion.d.ts +29 -0
  6. package/dist/components/accordion/accordion.d.ts.map +1 -0
  7. package/dist/components/accordion/accordion.js +226 -0
  8. package/dist/components/accordion/accordion.js.map +1 -0
  9. package/dist/components/alert/alert.constants.d.ts +2 -0
  10. package/dist/components/alert/alert.constants.d.ts.map +1 -1
  11. package/dist/components/alert/alert.d.ts +50 -2
  12. package/dist/components/alert/alert.d.ts.map +1 -1
  13. package/dist/components/alert/alert.js +285 -16
  14. package/dist/components/alert/alert.js.map +1 -1
  15. package/dist/components/avatar/avatar.d.ts +20 -0
  16. package/dist/components/avatar/avatar.d.ts.map +1 -0
  17. package/dist/components/avatar/avatar.js +100 -0
  18. package/dist/components/avatar/avatar.js.map +1 -0
  19. package/dist/components/back-to-top/back-to-top.d.ts +29 -0
  20. package/dist/components/back-to-top/back-to-top.d.ts.map +1 -0
  21. package/dist/components/back-to-top/back-to-top.js +149 -0
  22. package/dist/components/back-to-top/back-to-top.js.map +1 -0
  23. package/dist/components/bar-chart/bar-chart.d.ts +42 -0
  24. package/dist/components/bar-chart/bar-chart.d.ts.map +1 -0
  25. package/dist/components/bar-chart/bar-chart.js +298 -0
  26. package/dist/components/bar-chart/bar-chart.js.map +1 -0
  27. package/dist/components/breadcrumb/breadcrumb.js +2 -2
  28. package/dist/components/button/button.d.ts +1 -0
  29. package/dist/components/button/button.d.ts.map +1 -1
  30. package/dist/components/button/button.js +8 -8
  31. package/dist/components/button/button.js.map +1 -1
  32. package/dist/components/button-group/button-group.js +4 -4
  33. package/dist/components/calendar/calendar.d.ts.map +1 -1
  34. package/dist/components/calendar/calendar.js +11 -9
  35. package/dist/components/calendar/calendar.js.map +1 -1
  36. package/dist/components/chart/chart-base.d.ts +59 -0
  37. package/dist/components/chart/chart-base.d.ts.map +1 -0
  38. package/dist/components/chart/chart-base.js +261 -0
  39. package/dist/components/chart/chart-base.js.map +1 -0
  40. package/dist/components/chart/chart.utils.d.ts +27 -0
  41. package/dist/components/chart/chart.utils.d.ts.map +1 -0
  42. package/dist/components/chart/chart.utils.js +117 -0
  43. package/dist/components/chart/chart.utils.js.map +1 -0
  44. package/dist/components/code-block/code-block.d.ts +5 -0
  45. package/dist/components/code-block/code-block.d.ts.map +1 -1
  46. package/dist/components/code-block/code-block.js +34 -24
  47. package/dist/components/code-block/code-block.js.map +1 -1
  48. package/dist/components/consent/consent.d.ts +63 -0
  49. package/dist/components/consent/consent.d.ts.map +1 -0
  50. package/dist/components/consent/consent.js +327 -0
  51. package/dist/components/consent/consent.js.map +1 -0
  52. package/dist/components/consent/consent.utils.d.ts +36 -0
  53. package/dist/components/consent/consent.utils.d.ts.map +1 -0
  54. package/dist/components/consent/consent.utils.js +82 -0
  55. package/dist/components/consent/consent.utils.js.map +1 -0
  56. package/dist/components/contact/contact.d.ts +22 -0
  57. package/dist/components/contact/contact.d.ts.map +1 -0
  58. package/dist/components/contact/contact.js +83 -0
  59. package/dist/components/contact/contact.js.map +1 -0
  60. package/dist/components/container/container.d.ts +20 -0
  61. package/dist/components/container/container.d.ts.map +1 -0
  62. package/dist/components/container/container.js +68 -0
  63. package/dist/components/container/container.js.map +1 -0
  64. package/dist/components/content-card/content-card.js +4 -4
  65. package/dist/components/context-menu/context-menu.d.ts +89 -0
  66. package/dist/components/context-menu/context-menu.d.ts.map +1 -0
  67. package/dist/components/context-menu/context-menu.js +414 -0
  68. package/dist/components/context-menu/context-menu.js.map +1 -0
  69. package/dist/components/cron-builder/cron-builder.d.ts.map +1 -1
  70. package/dist/components/cron-builder/cron-builder.js +13 -11
  71. package/dist/components/cron-builder/cron-builder.js.map +1 -1
  72. package/dist/components/cta/cta.d.ts +20 -0
  73. package/dist/components/cta/cta.d.ts.map +1 -0
  74. package/dist/components/cta/cta.js +64 -0
  75. package/dist/components/cta/cta.js.map +1 -0
  76. package/dist/components/drawer/drawer.js +6 -6
  77. package/dist/components/faq/faq-item.d.ts +22 -0
  78. package/dist/components/faq/faq-item.d.ts.map +1 -0
  79. package/dist/components/faq/faq-item.js +117 -0
  80. package/dist/components/faq/faq-item.js.map +1 -0
  81. package/dist/components/faq/faq.d.ts +18 -0
  82. package/dist/components/faq/faq.d.ts.map +1 -0
  83. package/dist/components/faq/faq.js +38 -0
  84. package/dist/components/faq/faq.js.map +1 -0
  85. package/dist/components/feature-grid/feature-grid.d.ts +22 -0
  86. package/dist/components/feature-grid/feature-grid.d.ts.map +1 -0
  87. package/dist/components/feature-grid/feature-grid.js +55 -0
  88. package/dist/components/feature-grid/feature-grid.js.map +1 -0
  89. package/dist/components/feature-grid/feature.d.ts +18 -0
  90. package/dist/components/feature-grid/feature.d.ts.map +1 -0
  91. package/dist/components/feature-grid/feature.js +91 -0
  92. package/dist/components/feature-grid/feature.js.map +1 -0
  93. package/dist/components/field/field.js +2 -2
  94. package/dist/components/footer/footer.js +4 -4
  95. package/dist/components/form/form-reset.d.ts +7 -0
  96. package/dist/components/form/form-reset.d.ts.map +1 -0
  97. package/dist/components/form/form-reset.js +47 -0
  98. package/dist/components/form/form-reset.js.map +1 -0
  99. package/dist/components/form/form.d.ts +5 -0
  100. package/dist/components/form/form.d.ts.map +1 -1
  101. package/dist/components/form/form.js +17 -3
  102. package/dist/components/form/form.js.map +1 -1
  103. package/dist/components/grid/grid.d.ts +5 -0
  104. package/dist/components/grid/grid.d.ts.map +1 -1
  105. package/dist/components/grid/grid.js +86 -4
  106. package/dist/components/grid/grid.js.map +1 -1
  107. package/dist/components/heat-map/heat-map.d.ts +39 -0
  108. package/dist/components/heat-map/heat-map.d.ts.map +1 -0
  109. package/dist/components/heat-map/heat-map.js +306 -0
  110. package/dist/components/heat-map/heat-map.js.map +1 -0
  111. package/dist/components/hero/hero.d.ts +26 -0
  112. package/dist/components/hero/hero.d.ts.map +1 -0
  113. package/dist/components/hero/hero.js +132 -0
  114. package/dist/components/hero/hero.js.map +1 -0
  115. package/dist/components/icon/icon-paths.d.ts +84 -0
  116. package/dist/components/icon/icon-paths.d.ts.map +1 -1
  117. package/dist/components/icon/icon-paths.js +89 -0
  118. package/dist/components/icon/icon-paths.js.map +1 -1
  119. package/dist/components/icon/icon.d.ts +2 -0
  120. package/dist/components/icon/icon.d.ts.map +1 -1
  121. package/dist/components/icon/icon.js +10 -1
  122. package/dist/components/icon/icon.js.map +1 -1
  123. package/dist/components/image/image.d.ts +31 -0
  124. package/dist/components/image/image.d.ts.map +1 -0
  125. package/dist/components/image/image.js +179 -0
  126. package/dist/components/image/image.js.map +1 -0
  127. package/dist/components/input/input.js +4 -4
  128. package/dist/components/lazy/lazy.d.ts +34 -0
  129. package/dist/components/lazy/lazy.d.ts.map +1 -0
  130. package/dist/components/lazy/lazy.js +104 -0
  131. package/dist/components/lazy/lazy.js.map +1 -0
  132. package/dist/components/line-chart/line-chart.d.ts +37 -0
  133. package/dist/components/line-chart/line-chart.d.ts.map +1 -0
  134. package/dist/components/line-chart/line-chart.js +271 -0
  135. package/dist/components/line-chart/line-chart.js.map +1 -0
  136. package/dist/components/list/list-item.d.ts +45 -0
  137. package/dist/components/list/list-item.d.ts.map +1 -0
  138. package/dist/components/list/list-item.js +263 -0
  139. package/dist/components/list/list-item.js.map +1 -0
  140. package/dist/components/list/list.d.ts +50 -0
  141. package/dist/components/list/list.d.ts.map +1 -0
  142. package/dist/components/list/list.js +161 -0
  143. package/dist/components/list/list.js.map +1 -0
  144. package/dist/components/logo-cloud/logo-cloud.d.ts +19 -0
  145. package/dist/components/logo-cloud/logo-cloud.d.ts.map +1 -0
  146. package/dist/components/logo-cloud/logo-cloud.js +66 -0
  147. package/dist/components/logo-cloud/logo-cloud.js.map +1 -0
  148. package/dist/components/modal/modal.d.ts +12 -0
  149. package/dist/components/modal/modal.d.ts.map +1 -1
  150. package/dist/components/modal/modal.js +40 -11
  151. package/dist/components/modal/modal.js.map +1 -1
  152. package/dist/components/page-layout/page-layout.js +8 -8
  153. package/dist/components/pagination/pagination.d.ts +15 -0
  154. package/dist/components/pagination/pagination.d.ts.map +1 -0
  155. package/dist/components/pagination/pagination.js +126 -0
  156. package/dist/components/pagination/pagination.js.map +1 -0
  157. package/dist/components/pagination/pagination.utils.d.ts +3 -0
  158. package/dist/components/pagination/pagination.utils.d.ts.map +1 -0
  159. package/dist/components/pagination/pagination.utils.js +19 -0
  160. package/dist/components/pagination/pagination.utils.js.map +1 -0
  161. package/dist/components/pie-chart/pie-chart.d.ts +33 -0
  162. package/dist/components/pie-chart/pie-chart.d.ts.map +1 -0
  163. package/dist/components/pie-chart/pie-chart.js +233 -0
  164. package/dist/components/pie-chart/pie-chart.js.map +1 -0
  165. package/dist/components/pin-input/pin-input.js +4 -4
  166. package/dist/components/popover/popover.d.ts.map +1 -1
  167. package/dist/components/popover/popover.js +1 -3
  168. package/dist/components/popover/popover.js.map +1 -1
  169. package/dist/components/post-list/post-card.d.ts +16 -0
  170. package/dist/components/post-list/post-card.d.ts.map +1 -0
  171. package/dist/components/post-list/post-card.js +22 -0
  172. package/dist/components/post-list/post-card.js.map +1 -0
  173. package/dist/components/post-list/post-list.d.ts +17 -0
  174. package/dist/components/post-list/post-list.d.ts.map +1 -0
  175. package/dist/components/post-list/post-list.js +23 -0
  176. package/dist/components/post-list/post-list.js.map +1 -0
  177. package/dist/components/pricing/pricing-tier.d.ts +23 -0
  178. package/dist/components/pricing/pricing-tier.d.ts.map +1 -0
  179. package/dist/components/pricing/pricing-tier.js +144 -0
  180. package/dist/components/pricing/pricing-tier.js.map +1 -0
  181. package/dist/components/pricing/pricing.d.ts +18 -0
  182. package/dist/components/pricing/pricing.d.ts.map +1 -0
  183. package/dist/components/pricing/pricing.js +38 -0
  184. package/dist/components/pricing/pricing.js.map +1 -0
  185. package/dist/components/progress/progress.d.ts +17 -0
  186. package/dist/components/progress/progress.d.ts.map +1 -0
  187. package/dist/components/progress/progress.js +109 -0
  188. package/dist/components/progress/progress.js.map +1 -0
  189. package/dist/components/project-grid/project-card.d.ts +17 -0
  190. package/dist/components/project-grid/project-card.d.ts.map +1 -0
  191. package/dist/components/project-grid/project-card.js +23 -0
  192. package/dist/components/project-grid/project-card.js.map +1 -0
  193. package/dist/components/project-grid/project-grid.d.ts +17 -0
  194. package/dist/components/project-grid/project-grid.d.ts.map +1 -0
  195. package/dist/components/project-grid/project-grid.js +23 -0
  196. package/dist/components/project-grid/project-grid.js.map +1 -0
  197. package/dist/components/radio/radio.js +1 -1
  198. package/dist/components/reveal/reveal.constants.d.ts +10 -0
  199. package/dist/components/reveal/reveal.constants.d.ts.map +1 -0
  200. package/dist/components/reveal/reveal.constants.js +11 -0
  201. package/dist/components/reveal/reveal.constants.js.map +1 -0
  202. package/dist/components/reveal/reveal.d.ts +64 -0
  203. package/dist/components/reveal/reveal.d.ts.map +1 -0
  204. package/dist/components/reveal/reveal.js +352 -0
  205. package/dist/components/reveal/reveal.js.map +1 -0
  206. package/dist/components/scroll-progress/scroll-progress.d.ts +32 -0
  207. package/dist/components/scroll-progress/scroll-progress.d.ts.map +1 -0
  208. package/dist/components/scroll-progress/scroll-progress.js +120 -0
  209. package/dist/components/scroll-progress/scroll-progress.js.map +1 -0
  210. package/dist/components/section/card-row.d.ts +30 -0
  211. package/dist/components/section/card-row.d.ts.map +1 -0
  212. package/dist/components/section/card-row.js +174 -0
  213. package/dist/components/section/card-row.js.map +1 -0
  214. package/dist/components/section/card.d.ts +27 -0
  215. package/dist/components/section/card.d.ts.map +1 -0
  216. package/dist/components/section/card.js +205 -0
  217. package/dist/components/section/card.js.map +1 -0
  218. package/dist/components/section/row-item.d.ts +22 -0
  219. package/dist/components/section/row-item.d.ts.map +1 -0
  220. package/dist/components/section/row-item.js +53 -0
  221. package/dist/components/section/row-item.js.map +1 -0
  222. package/dist/components/section/section.d.ts +70 -0
  223. package/dist/components/section/section.d.ts.map +1 -0
  224. package/dist/components/section/section.js +240 -0
  225. package/dist/components/section/section.js.map +1 -0
  226. package/dist/components/select/select.js +3 -3
  227. package/dist/components/series-nav/series-nav.d.ts +29 -0
  228. package/dist/components/series-nav/series-nav.d.ts.map +1 -0
  229. package/dist/components/series-nav/series-nav.js +178 -0
  230. package/dist/components/series-nav/series-nav.js.map +1 -0
  231. package/dist/components/site-header/site-header.d.ts +51 -0
  232. package/dist/components/site-header/site-header.d.ts.map +1 -0
  233. package/dist/components/site-header/site-header.js +296 -0
  234. package/dist/components/site-header/site-header.js.map +1 -0
  235. package/dist/components/skeleton/skeleton.js +7 -7
  236. package/dist/components/sparkline/sparkline.d.ts +19 -0
  237. package/dist/components/sparkline/sparkline.d.ts.map +1 -0
  238. package/dist/components/sparkline/sparkline.js +99 -0
  239. package/dist/components/sparkline/sparkline.js.map +1 -0
  240. package/dist/components/spinner/spinner.d.ts +13 -0
  241. package/dist/components/spinner/spinner.d.ts.map +1 -0
  242. package/dist/components/spinner/spinner.js +65 -0
  243. package/dist/components/spinner/spinner.js.map +1 -0
  244. package/dist/components/split/split.d.ts +23 -0
  245. package/dist/components/split/split.d.ts.map +1 -0
  246. package/dist/components/split/split.js +104 -0
  247. package/dist/components/split/split.js.map +1 -0
  248. package/dist/components/stack/stack.d.ts +21 -0
  249. package/dist/components/stack/stack.d.ts.map +1 -0
  250. package/dist/components/stack/stack.js +102 -0
  251. package/dist/components/stack/stack.js.map +1 -0
  252. package/dist/components/stat-card/stat-card.d.ts +35 -0
  253. package/dist/components/stat-card/stat-card.d.ts.map +1 -0
  254. package/dist/components/stat-card/stat-card.js +199 -0
  255. package/dist/components/stat-card/stat-card.js.map +1 -0
  256. package/dist/components/stats/stat.d.ts +16 -0
  257. package/dist/components/stats/stat.d.ts.map +1 -0
  258. package/dist/components/stats/stat.js +51 -0
  259. package/dist/components/stats/stat.js.map +1 -0
  260. package/dist/components/stats/stats.d.ts +19 -0
  261. package/dist/components/stats/stats.d.ts.map +1 -0
  262. package/dist/components/stats/stats.js +45 -0
  263. package/dist/components/stats/stats.js.map +1 -0
  264. package/dist/components/switch/switch.js +2 -2
  265. package/dist/components/table/data-table.d.ts +115 -27
  266. package/dist/components/table/data-table.d.ts.map +1 -1
  267. package/dist/components/table/data-table.js +1012 -411
  268. package/dist/components/table/data-table.js.map +1 -1
  269. package/dist/components/table/data-table.utils.d.ts +81 -0
  270. package/dist/components/table/data-table.utils.d.ts.map +1 -0
  271. package/dist/components/table/data-table.utils.js +208 -0
  272. package/dist/components/table/data-table.utils.js.map +1 -0
  273. package/dist/components/table/table.d.ts +28 -0
  274. package/dist/components/table/table.d.ts.map +1 -1
  275. package/dist/components/table/table.js +161 -33
  276. package/dist/components/table/table.js.map +1 -1
  277. package/dist/components/team/person.d.ts +19 -0
  278. package/dist/components/team/person.d.ts.map +1 -0
  279. package/dist/components/team/person.js +123 -0
  280. package/dist/components/team/person.js.map +1 -0
  281. package/dist/components/team/team.d.ts +18 -0
  282. package/dist/components/team/team.d.ts.map +1 -0
  283. package/dist/components/team/team.js +36 -0
  284. package/dist/components/team/team.js.map +1 -0
  285. package/dist/components/testimonials/testimonial.d.ts +18 -0
  286. package/dist/components/testimonials/testimonial.d.ts.map +1 -0
  287. package/dist/components/testimonials/testimonial.js +115 -0
  288. package/dist/components/testimonials/testimonial.js.map +1 -0
  289. package/dist/components/testimonials/testimonials.d.ts +18 -0
  290. package/dist/components/testimonials/testimonials.d.ts.map +1 -0
  291. package/dist/components/testimonials/testimonials.js +36 -0
  292. package/dist/components/testimonials/testimonials.js.map +1 -0
  293. package/dist/components/textarea/textarea.js +3 -3
  294. package/dist/components/theme-toggle/theme-toggle.js +1 -1
  295. package/dist/components/time-picker/time-picker.js +3 -3
  296. package/dist/components/timeline/timeline-item.d.ts +18 -0
  297. package/dist/components/timeline/timeline-item.d.ts.map +1 -0
  298. package/dist/components/timeline/timeline-item.js +102 -0
  299. package/dist/components/timeline/timeline-item.js.map +1 -0
  300. package/dist/components/timeline/timeline.d.ts +18 -0
  301. package/dist/components/timeline/timeline.d.ts.map +1 -0
  302. package/dist/components/timeline/timeline.js +30 -0
  303. package/dist/components/timeline/timeline.js.map +1 -0
  304. package/dist/components/toast/toast.d.ts +33 -0
  305. package/dist/components/toast/toast.d.ts.map +1 -0
  306. package/dist/components/toast/toast.js +147 -0
  307. package/dist/components/toast/toast.js.map +1 -0
  308. package/dist/components/toggle-group/toggle-button.d.ts +2 -0
  309. package/dist/components/toggle-group/toggle-button.d.ts.map +1 -1
  310. package/dist/components/toggle-group/toggle-button.js +12 -4
  311. package/dist/components/toggle-group/toggle-button.js.map +1 -1
  312. package/dist/components/toggle-group/toggle-group.js +4 -4
  313. package/dist/components/tooltip/tooltip.js +21 -21
  314. package/dist/components/vertical-nav/vertical-nav-group.js +3 -3
  315. package/dist/components/vertical-nav/vertical-nav-item.js +4 -4
  316. package/dist/components/video-embed/video-embed.d.ts +37 -0
  317. package/dist/components/video-embed/video-embed.d.ts.map +1 -0
  318. package/dist/components/video-embed/video-embed.js +183 -0
  319. package/dist/components/video-embed/video-embed.js.map +1 -0
  320. package/dist/index.d.ts +107 -0
  321. package/dist/index.d.ts.map +1 -0
  322. package/dist/index.js +104 -0
  323. package/dist/index.js.map +1 -0
  324. package/dist/styles/index.css +205 -2
  325. package/dist/styles/reset.d.ts.map +1 -1
  326. package/dist/styles/reset.js +5 -0
  327. package/dist/styles/reset.js.map +1 -1
  328. package/package.json +210 -7
  329. package/src/components/accordion/accordion.constants.ts +5 -0
  330. package/src/components/accordion/accordion.ts +209 -0
  331. package/src/components/alert/alert.constants.ts +3 -0
  332. package/src/components/alert/alert.ts +284 -17
  333. package/src/components/avatar/avatar.ts +84 -0
  334. package/src/components/back-to-top/back-to-top.ts +140 -0
  335. package/src/components/bar-chart/bar-chart.ts +295 -0
  336. package/src/components/breadcrumb/breadcrumb.ts +2 -2
  337. package/src/components/button/button.ts +9 -8
  338. package/src/components/button-group/button-group.ts +4 -4
  339. package/src/components/calendar/calendar.ts +12 -9
  340. package/src/components/chart/chart-base.ts +275 -0
  341. package/src/components/chart/chart.utils.ts +140 -0
  342. package/src/components/code-block/code-block.ts +35 -24
  343. package/src/components/consent/consent.ts +312 -0
  344. package/src/components/consent/consent.utils.ts +110 -0
  345. package/src/components/contact/contact.ts +83 -0
  346. package/src/components/container/container.ts +60 -0
  347. package/src/components/content-card/content-card.ts +4 -4
  348. package/src/components/context-menu/context-menu.ts +426 -0
  349. package/src/components/cron-builder/cron-builder.ts +21 -18
  350. package/src/components/cta/cta.ts +64 -0
  351. package/src/components/drawer/drawer.ts +6 -6
  352. package/src/components/faq/faq-item.ts +110 -0
  353. package/src/components/faq/faq.ts +40 -0
  354. package/src/components/feature-grid/feature-grid.ts +52 -0
  355. package/src/components/feature-grid/feature.ts +84 -0
  356. package/src/components/field/field.ts +2 -2
  357. package/src/components/footer/footer.ts +4 -4
  358. package/src/components/form/form-reset.ts +45 -0
  359. package/src/components/form/form.ts +17 -3
  360. package/src/components/grid/grid.ts +73 -4
  361. package/src/components/heat-map/heat-map.ts +292 -0
  362. package/src/components/hero/hero.ts +132 -0
  363. package/src/components/icon/icon-paths.ts +92 -1
  364. package/src/components/icon/icon.ts +8 -1
  365. package/src/components/image/image.ts +165 -0
  366. package/src/components/input/input.ts +4 -4
  367. package/src/components/lazy/lazy.ts +94 -0
  368. package/src/components/line-chart/line-chart.ts +271 -0
  369. package/src/components/list/list-item.ts +225 -0
  370. package/src/components/list/list.ts +157 -0
  371. package/src/components/logo-cloud/logo-cloud.ts +65 -0
  372. package/src/components/modal/modal.ts +37 -11
  373. package/src/components/page-layout/page-layout.ts +8 -8
  374. package/src/components/pagination/pagination.ts +120 -0
  375. package/src/components/pagination/pagination.utils.ts +14 -0
  376. package/src/components/pie-chart/pie-chart.ts +230 -0
  377. package/src/components/pin-input/pin-input.ts +4 -4
  378. package/src/components/popover/popover.ts +1 -3
  379. package/src/components/post-list/post-card.ts +18 -0
  380. package/src/components/post-list/post-list.ts +19 -0
  381. package/src/components/pricing/pricing-tier.ts +132 -0
  382. package/src/components/pricing/pricing.ts +39 -0
  383. package/src/components/progress/progress.ts +95 -0
  384. package/src/components/project-grid/project-card.ts +19 -0
  385. package/src/components/project-grid/project-grid.ts +19 -0
  386. package/src/components/radio/radio.ts +1 -1
  387. package/src/components/reveal/reveal.constants.ts +20 -0
  388. package/src/components/reveal/reveal.ts +344 -0
  389. package/src/components/scroll-progress/scroll-progress.ts +119 -0
  390. package/src/components/section/card-row.ts +152 -0
  391. package/src/components/section/card.ts +197 -0
  392. package/src/components/section/row-item.ts +38 -0
  393. package/src/components/section/section.ts +232 -0
  394. package/src/components/select/select.ts +3 -3
  395. package/src/components/series-nav/series-nav.ts +164 -0
  396. package/src/components/site-header/site-header.ts +276 -0
  397. package/src/components/skeleton/skeleton.ts +7 -7
  398. package/src/components/sparkline/sparkline.ts +83 -0
  399. package/src/components/spinner/spinner.ts +55 -0
  400. package/src/components/split/split.ts +106 -0
  401. package/src/components/stack/stack.ts +88 -0
  402. package/src/components/stat-card/stat-card.ts +179 -0
  403. package/src/components/stats/stat.ts +49 -0
  404. package/src/components/stats/stats.ts +47 -0
  405. package/src/components/switch/switch.ts +2 -2
  406. package/src/components/table/data-table.ts +1015 -425
  407. package/src/components/table/data-table.utils.ts +276 -0
  408. package/src/components/table/table.ts +168 -38
  409. package/src/components/team/person.ts +113 -0
  410. package/src/components/team/team.ts +37 -0
  411. package/src/components/testimonials/testimonial.ts +108 -0
  412. package/src/components/testimonials/testimonials.ts +37 -0
  413. package/src/components/textarea/textarea.ts +3 -3
  414. package/src/components/theme-toggle/theme-toggle.ts +1 -1
  415. package/src/components/time-picker/time-picker.ts +3 -3
  416. package/src/components/timeline/timeline-item.ts +100 -0
  417. package/src/components/timeline/timeline.ts +31 -0
  418. package/src/components/toast/toast.ts +153 -0
  419. package/src/components/toggle-group/toggle-button.ts +9 -4
  420. package/src/components/toggle-group/toggle-group.ts +4 -4
  421. package/src/components/tooltip/tooltip.ts +21 -21
  422. package/src/components/vertical-nav/vertical-nav-group.ts +3 -3
  423. package/src/components/vertical-nav/vertical-nav-item.ts +4 -4
  424. package/src/components/video-embed/video-embed.ts +162 -0
  425. package/src/index.ts +108 -0
  426. package/src/styles/globals.css +63 -0
  427. package/src/styles/index.css +3 -1
  428. package/src/styles/prose.css +154 -0
  429. package/src/styles/reset.ts +5 -0
  430. package/src/styles/theme.css +53 -1
  431. package/src/styles/typography.css +1 -0
@@ -0,0 +1,152 @@
1
+ import {html, css, nothing, PropertyValues, TemplateResult} from "lit";
2
+ import {property, state} from "lit/decorators.js";
3
+ import {StSection} from "./section.js";
4
+ import {StCard} from "./card.js";
5
+
6
+ /**
7
+ * Base for rows that list cards (blog posts, projects). Cards sit in a grid or a single column and
8
+ * can be filtered by topic: add `filterable` and a button appears for every topic used in the
9
+ * cards' `tags`.
10
+ */
11
+ export abstract class StCardRow extends StSection {
12
+ /** The most columns on wide screens (grid layout). */
13
+ @property({type: Number}) columns = 3;
14
+ /** `grid` or one card per row. */
15
+ @property({type: String, reflect: true}) layout: "grid" | "list" = "grid";
16
+ /** Shows topic buttons that filter the cards. */
17
+ @property({type: Boolean, reflect: true}) filterable = false;
18
+ @property({type: String, attribute: "filter-label"}) filterLabel = "Filter by topic";
19
+ @property({type: String, attribute: "all-label"}) allLabel = "All";
20
+
21
+ @state() private _tags: string[] = [];
22
+ @state() private _active = "";
23
+ @state() private _visible = 0;
24
+ @state() private _total = 0;
25
+
26
+ static styles = [
27
+ ...StSection.styles,
28
+ css`
29
+ .items {
30
+ --_columns: 3;
31
+ --_gap: var(--st-spacing-lg);
32
+ display: grid;
33
+ gap: var(--_gap);
34
+ grid-template-columns: repeat(
35
+ auto-fill,
36
+ minmax(max(16rem, calc((100% - (var(--_columns) - 1) * var(--_gap)) / var(--_columns))), 1fr)
37
+ );
38
+ }
39
+
40
+ :host([layout="list"]) .items {
41
+ grid-template-columns: minmax(0, 1fr);
42
+ }
43
+
44
+ .filters {
45
+ display: flex;
46
+ flex-wrap: wrap;
47
+ justify-content: center;
48
+ gap: var(--st-spacing-sm);
49
+ margin-bottom: var(--st-spacing-xl);
50
+ }
51
+
52
+ .chip {
53
+ padding: var(--st-spacing-xs) var(--st-spacing-md);
54
+ border: 1px solid var(--st-color-border);
55
+ border-radius: 999px;
56
+ background: none;
57
+ color: var(--st-color-text);
58
+ cursor: pointer;
59
+ }
60
+
61
+ .chip:hover {
62
+ background: var(--st-color-surface-hover);
63
+ }
64
+
65
+ .chip[aria-pressed="true"] {
66
+ border-color: var(--st-color-primary);
67
+ background: var(--st-color-primary);
68
+ color: var(--st-color-bg);
69
+ }
70
+
71
+ .chip:focus-visible {
72
+ outline: 2px solid var(--st-color-primary);
73
+ outline-offset: 2px;
74
+ }
75
+
76
+ .status {
77
+ position: absolute;
78
+ width: 1px;
79
+ height: 1px;
80
+ overflow: hidden;
81
+ clip-path: inset(50%);
82
+ }
83
+ `,
84
+ ];
85
+
86
+ private get _cards(): StCard[] {
87
+ const slot = this.renderRoot?.querySelector<HTMLSlotElement>(".items slot");
88
+ return (slot?.assignedElements({flatten: true}) ?? []).filter((el): el is StCard => el instanceof StCard);
89
+ }
90
+
91
+ protected updated(changed: PropertyValues<this>) {
92
+ super.updated(changed);
93
+ this.renderRoot
94
+ .querySelector<HTMLElement>(".items")
95
+ ?.style.setProperty("--_columns", String(Math.max(1, this.columns)));
96
+ if (changed.has("layout")) this._cards.forEach((card) => (card.layout = this.layout));
97
+ }
98
+
99
+ private _onCardsChange = (e: Event) => {
100
+ this._onItemsChange(e);
101
+ const cards = this._cards;
102
+ cards.forEach((card) => (card.layout = this.layout));
103
+ this._tags = [...new Set(cards.flatMap((card) => card.tagList))].sort((a, b) => a.localeCompare(b));
104
+ this._total = cards.length;
105
+ this._applyFilter();
106
+ };
107
+
108
+ private _applyFilter() {
109
+ const cards = this._cards;
110
+ cards.forEach((card) => card.toggleAttribute("hidden", !!this._active && !card.tagList.includes(this._active)));
111
+ this._visible = cards.filter((card) => !card.hidden).length;
112
+ }
113
+
114
+ private _choose(tag: string) {
115
+ this._active = tag;
116
+ this._applyFilter();
117
+ this.dispatchEvent(
118
+ new CustomEvent("st-filter", {detail: {tag: tag || null, count: this._visible}, bubbles: true, composed: true}),
119
+ );
120
+ }
121
+
122
+ private _renderFilters(): TemplateResult | typeof nothing {
123
+ if (!this.filterable || this._tags.length === 0) return nothing;
124
+ return html`
125
+ <div class="filters" role="group" aria-label=${this.filterLabel}>
126
+ ${["", ...this._tags].map(
127
+ (tag) => html`
128
+ <button
129
+ type="button"
130
+ class="chip"
131
+ aria-pressed=${this._active === tag ? "true" : "false"}
132
+ @click=${() => this._choose(tag)}
133
+ >
134
+ ${tag || this.allLabel}
135
+ </button>
136
+ `,
137
+ )}
138
+ </div>
139
+ <p class="status" role="status">${this._visible} of ${this._total} shown</p>
140
+ `;
141
+ }
142
+
143
+ render() {
144
+ return this.frame(
145
+ html`
146
+ ${this._renderFilters()}
147
+ <div class="items"><slot @slotchange=${this._onCardsChange}></slot></div>
148
+ `,
149
+ {animated: false},
150
+ );
151
+ }
152
+ }
@@ -0,0 +1,197 @@
1
+ import {html, css, TemplateResult} from "lit";
2
+ import {property} from "lit/decorators.js";
3
+ import {resetStyles} from "../../styles/reset.js";
4
+ import {StRowItem} from "./row-item.js";
5
+
6
+ /**
7
+ * Base for the cards in a filterable list (a blog post, a project). A card is a link target as a
8
+ * whole: pressing anywhere on it follows the link in its `title`, while that link stays a normal
9
+ * anchor in your markup for keyboard users, screen readers and search engines.
10
+ *
11
+ * Slots: `image`, `meta` (a date, reading time, tags), `title` (a heading containing the link),
12
+ * the default slot (a short description) and `footer` (extra links or buttons).
13
+ */
14
+ export abstract class StCard extends StRowItem {
15
+ /** Comma-separated topics, used by the list's filter, such as `web, design`. */
16
+ @property({type: String}) tags = "";
17
+ /** Set by the list: a column of cards, or one card per row with the picture beside it. */
18
+ @property({type: String, reflect: true}) layout: "grid" | "list" = "grid";
19
+
20
+ static styles = [
21
+ resetStyles,
22
+ css`
23
+ :host {
24
+ display: block;
25
+ }
26
+
27
+ article {
28
+ display: flex;
29
+ flex-direction: column;
30
+ height: 100%;
31
+ overflow: hidden;
32
+ border: 1px solid var(--st-color-border);
33
+ border-radius: var(--st-radius-lg);
34
+ background: var(--st-row-card-bg, var(--st-color-surface));
35
+ transition:
36
+ border-color 0.2s ease,
37
+ box-shadow 0.2s ease;
38
+ }
39
+
40
+ :host([data-linked]) article {
41
+ cursor: pointer;
42
+ }
43
+
44
+ :host([data-linked]:hover) article {
45
+ border-color: var(--st-color-primary);
46
+ box-shadow: var(--st-shadow-md);
47
+ }
48
+
49
+ :host(:focus-within) article {
50
+ border-color: var(--st-color-primary);
51
+ outline: 2px solid var(--st-color-primary);
52
+ outline-offset: 2px;
53
+ }
54
+
55
+ .image:empty,
56
+ .image[hidden] {
57
+ display: none;
58
+ }
59
+
60
+ .image ::slotted(*) {
61
+ display: block;
62
+ width: 100%;
63
+ height: 100%;
64
+ aspect-ratio: 16 / 9;
65
+ object-fit: cover;
66
+ }
67
+
68
+ .body {
69
+ display: grid;
70
+ flex: 1;
71
+ align-content: start;
72
+ gap: var(--st-spacing-sm);
73
+ padding: var(--st-spacing-lg);
74
+ }
75
+
76
+ ::slotted([slot="meta"]) {
77
+ display: flex;
78
+ flex-wrap: wrap;
79
+ gap: var(--st-spacing-sm);
80
+ color: var(--st-color-text-muted);
81
+ font-size: var(--st-font-size-sm);
82
+ }
83
+
84
+ ::slotted([slot="title"]) {
85
+ margin: 0 !important;
86
+ font-size: var(--st-font-size-xl) !important;
87
+ }
88
+
89
+ .description {
90
+ color: var(--st-color-text-muted);
91
+ }
92
+
93
+ .description ::slotted(*) {
94
+ margin: 0;
95
+ }
96
+
97
+ .footer {
98
+ display: flex;
99
+ flex-wrap: wrap;
100
+ gap: var(--st-spacing-md);
101
+ padding: 0 var(--st-spacing-lg) var(--st-spacing-lg);
102
+ }
103
+
104
+ .footer[hidden] {
105
+ display: none;
106
+ }
107
+
108
+ .content {
109
+ display: contents;
110
+ }
111
+
112
+ /* One card per row, with the picture beside the text. */
113
+ @media (min-width: 40rem) {
114
+ :host([layout="list"]) article {
115
+ flex-direction: row;
116
+ }
117
+
118
+ :host([layout="list"]) .image {
119
+ flex: 0 0 34%;
120
+ }
121
+
122
+ :host([layout="list"]) .image ::slotted(*) {
123
+ aspect-ratio: auto;
124
+ }
125
+
126
+ :host([layout="list"]) .content {
127
+ display: flex;
128
+ flex: 1;
129
+ flex-direction: column;
130
+ }
131
+ }
132
+
133
+ @media (prefers-reduced-motion: reduce) {
134
+ article {
135
+ transition: none;
136
+ }
137
+ }
138
+ `,
139
+ ];
140
+
141
+ /** The topics as a clean list. */
142
+ get tagList(): string[] {
143
+ return this.tags
144
+ .split(",")
145
+ .map((tag) => tag.trim())
146
+ .filter(Boolean);
147
+ }
148
+
149
+ connectedCallback() {
150
+ super.connectedCallback();
151
+ this.addEventListener("click", this._onClick);
152
+ this._markLinked();
153
+ }
154
+
155
+ disconnectedCallback() {
156
+ this.removeEventListener("click", this._onClick);
157
+ super.disconnectedCallback();
158
+ }
159
+
160
+ private _titleLink(): HTMLAnchorElement | null {
161
+ return this.querySelector<HTMLAnchorElement>(':scope > [slot="title"] a[href], :scope > a[slot="title"]');
162
+ }
163
+
164
+ private _markLinked() {
165
+ this.toggleAttribute("data-linked", !!this._titleLink());
166
+ }
167
+
168
+ private _onClick = (e: MouseEvent) => {
169
+ if (e.defaultPrevented || e.button !== 0) return;
170
+ // Real links, buttons and fields inside the card keep doing their own thing.
171
+ const interactive = e
172
+ .composedPath()
173
+ .some((el) => el instanceof HTMLElement && el !== this && el.matches("a, button, input, select, textarea, summary"));
174
+ if (interactive) return;
175
+ this._titleLink()?.click();
176
+ };
177
+
178
+ protected renderCard(): TemplateResult {
179
+ return this.frame(html`
180
+ <article>
181
+ <div class="image"><slot name="image"></slot></div>
182
+ <div class="content">
183
+ <div class="body">
184
+ <slot name="meta"></slot>
185
+ <slot name="title" @slotchange=${() => this._markLinked()}></slot>
186
+ <div class="description"><slot></slot></div>
187
+ </div>
188
+ <div class="footer"><slot name="footer"></slot></div>
189
+ </div>
190
+ </article>
191
+ `);
192
+ }
193
+
194
+ render() {
195
+ return this.renderCard();
196
+ }
197
+ }
@@ -0,0 +1,38 @@
1
+ import {LitElement, html, TemplateResult} from "lit";
2
+ import {property} from "lit/decorators.js";
3
+ import type {RevealEffect} from "../reveal/reveal.constants.js";
4
+ import "../reveal/reveal.js";
5
+
6
+ /**
7
+ * Base class for the repeated items inside a row (a feature, a stat, a testimonial...). It makes
8
+ * each item animate in as it is scrolled to. The row hands down its own `reveal` setting and a
9
+ * small delay by position, so items arrive one after another. Set `reveal` on an item to
10
+ * override the row.
11
+ */
12
+ export abstract class StRowItem extends LitElement {
13
+ /** How the item animates in. Leave empty to follow the row it is in. */
14
+ @property({type: String, reflect: true}) reveal: RevealEffect | "" = "";
15
+ /** The row's own effect, set by the row. */
16
+ @property({attribute: false}) inheritedReveal: RevealEffect = "slide-up";
17
+ /** Milliseconds before the animation starts. Set by the row. */
18
+ @property({type: Number, attribute: "reveal-delay"}) revealDelay = 0;
19
+
20
+ /** The effect in use: the item's own, otherwise its row's. */
21
+ get effect(): RevealEffect {
22
+ return this.reveal || this.inheritedReveal;
23
+ }
24
+
25
+ /** Wraps the item's content so it animates in. */
26
+ protected frame(content: TemplateResult): TemplateResult {
27
+ return html`
28
+ <st-reveal
29
+ effect=${this.effect}
30
+ delay=${this.revealDelay}
31
+ offset="5"
32
+ style="display: block; height: 100%"
33
+ >
34
+ ${content}
35
+ </st-reveal>
36
+ `;
37
+ }
38
+ }
@@ -0,0 +1,232 @@
1
+ import {LitElement, html, css, nothing, isServer, PropertyValues, TemplateResult} from "lit";
2
+ import {customElement, property, state} from "lit/decorators.js";
3
+ import {resetStyles} from "../../styles/reset.js";
4
+ import type {ContainerSize} from "../container/container.js";
5
+ import type {RevealEffect} from "../reveal/reveal.constants.js";
6
+ import "../container/container.js";
7
+ import "../reveal/reveal.js";
8
+ import {StRowItem} from "./row-item.js";
9
+
10
+ export const sectionTones = ["auto", "default", "surface", "accent"] as const;
11
+ export type SectionTone = (typeof sectionTones)[number];
12
+ export const sectionSpaces = ["none", "sm", "md", "lg"] as const;
13
+ export type SectionSpace = (typeof sectionSpaces)[number];
14
+
15
+ const HEADER_SLOTS = ["eyebrow", "title", "lead"];
16
+
17
+ /** Items in a row animate in turn, three at a time, so late items don't wait to be seen. */
18
+ const ITEM_DELAY_MS = 120;
19
+ const ITEMS_PER_WAVE = 3;
20
+
21
+ /**
22
+ * A full-width row of a page: a background, responsive vertical spacing, a centred container and
23
+ * an optional header made of an eyebrow, title and lead. Stack rows to build a page. The ready-made
24
+ * rows (hero, features, call to action and so on) are all built on it, so every row shares the
25
+ * same spacing, header, tones and animation, and any row can follow any other.
26
+ *
27
+ * Slots: `eyebrow`, `title`, `lead` (the header: slot real headings so search engines and screen
28
+ * readers understand the page outline) and the default slot for the content.
29
+ *
30
+ * Tone: by default (`auto`) neighbouring rows alternate between the page and surface colours, so
31
+ * stacked rows are visually separated with no effort. Set `tone` to choose one yourself.
32
+ *
33
+ * Animation: the header and content animate in as they scroll into view (`reveal`, turn off with
34
+ * `reveal="none"`). Give the host an `id` to link to it (`#pricing`). Off-screen rows are not
35
+ * rendered until they are near the viewport (`content-visibility`); add `eager` to turn that off.
36
+ */
37
+ @customElement("st-section")
38
+ export class StSection extends LitElement {
39
+ /** `auto` alternates between rows; the others are fixed. */
40
+ @property({type: String, reflect: true}) tone: SectionTone = "auto";
41
+ /** Vertical padding. */
42
+ @property({type: String, reflect: true}) space: SectionSpace = "md";
43
+ /** Maximum width of the content. */
44
+ @property({type: String, reflect: true}) width: ContainerSize = "lg";
45
+ /** Alignment of the header block. */
46
+ @property({type: String, reflect: true}) align: "start" | "center" = "center";
47
+ /** How the row animates in as it is scrolled to. `none` turns it off. */
48
+ @property({type: String, reflect: true}) reveal: RevealEffect = "slide-up";
49
+ /** Accessible name. When set the section becomes a labelled landmark. */
50
+ @property({type: String}) label = "";
51
+ /** Renders immediately even when off screen. */
52
+ @property({type: Boolean, reflect: true}) eager = false;
53
+
54
+ @state() private _hasHeader = false;
55
+
56
+ static styles = [
57
+ resetStyles,
58
+ css`
59
+ :host {
60
+ display: block;
61
+ /* The align attribute doubles as an old HTML text-align hint; only the header should centre. */
62
+ text-align: start;
63
+ scroll-margin-top: var(--st-section-scroll-offset, var(--st-site-header-height, 0px));
64
+ background: var(--_bg, var(--st-color-bg));
65
+ color: var(--_fg, var(--st-color-text));
66
+ --_pad: var(--st-section-space-md);
67
+ /* Cards and tiles inside a row read this so they stand out from the row behind them. */
68
+ --st-row-card-bg: var(--st-color-surface);
69
+ }
70
+
71
+ :host(:not([eager])) {
72
+ content-visibility: auto;
73
+ contain-intrinsic-size: auto 36rem;
74
+ }
75
+
76
+ :host([tone="surface"]) {
77
+ --_bg: var(--st-color-surface);
78
+ --st-row-card-bg: var(--st-color-bg);
79
+ }
80
+
81
+ /* Auto: every second row takes the surface colour. Pure CSS, so it also works before any
82
+ JavaScript runs and with server rendering. */
83
+ :host([tone="auto"]:nth-child(even)) {
84
+ --_bg: var(--st-color-surface);
85
+ --st-row-card-bg: var(--st-color-bg);
86
+ }
87
+
88
+ :host([tone="accent"]) {
89
+ --_bg: var(--st-color-primary);
90
+ --_fg: var(--st-color-on-primary);
91
+ --_muted: var(--st-color-on-primary);
92
+ --st-row-card-bg: rgb(255 255 255 / 0.12);
93
+ }
94
+
95
+ :host([space="none"]) {
96
+ --_pad: 0;
97
+ }
98
+ :host([space="sm"]) {
99
+ --_pad: var(--st-section-space-sm);
100
+ }
101
+ :host([space="lg"]) {
102
+ --_pad: var(--st-section-space-lg);
103
+ }
104
+
105
+ .section {
106
+ padding-block: var(--_pad);
107
+ }
108
+
109
+ .header {
110
+ display: grid;
111
+ gap: var(--st-spacing-sm);
112
+ max-width: 48rem;
113
+ margin-bottom: var(--st-spacing-2xl);
114
+ }
115
+
116
+ :host([align="center"]) .header {
117
+ margin-inline: auto;
118
+ text-align: center;
119
+ }
120
+
121
+ ::slotted([slot="eyebrow"]) {
122
+ margin: 0;
123
+ color: var(--_eyebrow, var(--st-color-primary-text));
124
+ font-size: var(--st-font-size-sm);
125
+ font-weight: var(--st-font-weight-bold);
126
+ letter-spacing: 0.08em;
127
+ text-transform: uppercase;
128
+ }
129
+
130
+ :host([tone="accent"]) ::slotted([slot="eyebrow"]) {
131
+ --_eyebrow: var(--st-color-on-primary);
132
+ }
133
+
134
+ ::slotted([slot="title"]) {
135
+ margin: 0 !important;
136
+ color: inherit;
137
+ font-size: var(--st-font-size-3xl) !important;
138
+ line-height: var(--st-line-height-tight) !important;
139
+ }
140
+
141
+ ::slotted([slot="lead"]) {
142
+ margin: 0;
143
+ color: var(--_muted, var(--st-color-text-muted));
144
+ font-size: var(--st-font-size-lg);
145
+ }
146
+
147
+ [hidden] {
148
+ display: none !important;
149
+ }
150
+ `,
151
+ ];
152
+
153
+ private _onHeaderSlotChange = () => (this._hasHeader = this._headerPresent());
154
+
155
+ protected willUpdate(changed: PropertyValues<this>) {
156
+ // Know about the header before the first render, so a row at the top of the page is shown
157
+ // straight away instead of fading in once its header is discovered. (The server cannot look.)
158
+ if (!this.hasUpdated) this._hasHeader = isServer || this._headerPresent();
159
+ super.willUpdate(changed);
160
+ }
161
+
162
+ private _headerPresent() {
163
+ return HEADER_SLOTS.some((name) => this.querySelector(`:scope > [slot="${name}"]`));
164
+ }
165
+
166
+ /** Hands the row's animation settings to any item components inside it. */
167
+ protected _onItemsChange = (e: Event) => {
168
+ const items = (e.target as HTMLSlotElement)
169
+ .assignedElements({flatten: true})
170
+ .filter((el): el is StRowItem => el instanceof StRowItem);
171
+ items.forEach((item, i) => {
172
+ item.inheritedReveal = this.reveal;
173
+ item.revealDelay = (i % ITEMS_PER_WAVE) * ITEM_DELAY_MS;
174
+ });
175
+ };
176
+
177
+ protected updated(changed: PropertyValues<this>) {
178
+ // A row that changes its animation after load passes the change on to its items.
179
+ if (changed.has("reveal") && changed.get("reveal") !== undefined) {
180
+ this.renderRoot.querySelector("slot:not([name])")?.dispatchEvent(new Event("slotchange"));
181
+ }
182
+ }
183
+
184
+ /** The eyebrow, title and lead. Rows that lay the header out themselves call this directly. */
185
+ protected renderHeader(): TemplateResult {
186
+ return html`
187
+ <st-reveal class="header-reveal" effect=${this.reveal} ?hidden=${!this._hasHeader}>
188
+ <div class="header">
189
+ ${HEADER_SLOTS.map(
190
+ (name) => html`<slot name=${name} @slotchange=${this._onHeaderSlotChange}></slot>`,
191
+ )}
192
+ </div>
193
+ </st-reveal>
194
+ `;
195
+ }
196
+
197
+ /** Wraps part of a row so it animates in with the row's effect. */
198
+ protected animateIn(content: TemplateResult, delay = 0): TemplateResult {
199
+ return html`<st-reveal effect=${this.reveal} delay=${delay}>${content}</st-reveal>`;
200
+ }
201
+
202
+ /**
203
+ * The band every row sits in. Pass the row's content.
204
+ * - `header: false`: the row lays the header out itself and calls `renderHeader()`.
205
+ * - `animated: false`: the row animates its own parts (or its items do), so the content is not
206
+ * wrapped in a second animation.
207
+ */
208
+ protected frame(
209
+ content: TemplateResult,
210
+ options: {header?: boolean; animated?: boolean} = {},
211
+ ): TemplateResult {
212
+ const {header = true, animated = true} = options;
213
+ return html`
214
+ <div class="section" role=${this.label ? "region" : nothing} aria-label=${this.label || nothing}>
215
+ <st-container size=${this.width}>
216
+ ${header ? this.renderHeader() : nothing}
217
+ ${animated ? this.animateIn(content, 100) : content}
218
+ </st-container>
219
+ </div>
220
+ `;
221
+ }
222
+
223
+ render() {
224
+ return this.frame(html`<slot @slotchange=${this._onItemsChange}></slot>`);
225
+ }
226
+ }
227
+
228
+ declare global {
229
+ interface HTMLElementTagNameMap {
230
+ "st-section": StSection;
231
+ }
232
+ }
@@ -94,7 +94,7 @@ export class StSelect extends LitElement {
94
94
  }
95
95
 
96
96
  .combobox.is-invalid {
97
- border-color: var(--st-color-danger, #dc2626);
97
+ border-color: var(--st-color-danger);
98
98
  }
99
99
 
100
100
  .combobox:focus-visible {
@@ -136,7 +136,7 @@ export class StSelect extends LitElement {
136
136
  background: var(--st-color-surface);
137
137
  border: 1px solid var(--st-color-border);
138
138
  border-radius: var(--st-radius-md);
139
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
139
+ box-shadow: var(--st-shadow-md);
140
140
  overflow: hidden;
141
141
  }
142
142
 
@@ -191,7 +191,7 @@ export class StSelect extends LitElement {
191
191
  display: block;
192
192
  margin-top: var(--st-spacing-xs);
193
193
  font-size: var(--st-font-size-xs);
194
- color: var(--st-color-danger, #dc2626);
194
+ color: var(--st-color-danger);
195
195
  }
196
196
 
197
197
  .hidden-native {