@eunomia/elements 1.0.0-beta.5 → 1.0.0-beta.6

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 (455) hide show
  1. package/README.md +1 -1
  2. package/dist/breakpoints.d.ts +37 -10
  3. package/dist/breakpoints.js +38 -10
  4. package/dist/cdn/components/chunks/{chunk-MMLIPCOY.js → chunk-22D3SRFR.js} +1 -1
  5. package/dist/cdn/components/chunks/{chunk-OW7XKDCH.js → chunk-2Y2EU2CI.js} +16 -16
  6. package/dist/cdn/components/chunks/{chunk-LFCXUVDO.js → chunk-4PI6RDUS.js} +1 -1
  7. package/dist/cdn/components/chunks/chunk-624VJYNA.js +1 -0
  8. package/dist/cdn/components/chunks/{chunk-5XJLIHAU.js → chunk-7KKWYPHY.js} +4 -2
  9. package/dist/cdn/components/chunks/chunk-A3X4KD2X.js +1 -0
  10. package/dist/cdn/components/chunks/chunk-BKZGTCMF.js +1 -0
  11. package/dist/cdn/components/chunks/{chunk-GW3VP2L7.js → chunk-BO3JOEWM.js} +1 -1
  12. package/dist/cdn/components/chunks/{chunk-EAKYD33D.js → chunk-BQFJR2UP.js} +4 -4
  13. package/dist/cdn/components/chunks/chunk-EUWUDCBZ.js +1 -0
  14. package/dist/cdn/components/chunks/{chunk-P32B7BFD.js → chunk-FF3I7C3C.js} +15 -15
  15. package/dist/cdn/components/chunks/{chunk-74AOAB4X.js → chunk-FOILAXLL.js} +6 -5
  16. package/dist/cdn/components/chunks/{chunk-E4IS25H7.js → chunk-G5SBDQQ3.js} +1 -1
  17. package/dist/cdn/components/chunks/{chunk-LGLQ36QB.js → chunk-GDBPWZN6.js} +1 -1
  18. package/dist/cdn/components/chunks/{chunk-S2UCEWNG.js → chunk-JYIIWN2P.js} +13 -11
  19. package/dist/cdn/components/chunks/{chunk-IDKZKLJR.js → chunk-KDN4O5W2.js} +24 -11
  20. package/dist/cdn/components/chunks/chunk-KSZRQRN4.js +1 -0
  21. package/dist/cdn/components/chunks/{chunk-PED5ATYN.js → chunk-L2ADCEN7.js} +1 -1
  22. package/dist/cdn/components/chunks/chunk-LMVW522V.js +1 -0
  23. package/dist/cdn/components/chunks/{chunk-5XJGYXW7.js → chunk-MOMYII3P.js} +1 -1
  24. package/dist/cdn/components/chunks/{chunk-2XASWWKR.js → chunk-MQQ4BGVJ.js} +5 -5
  25. package/dist/cdn/components/chunks/{chunk-A4EQSU36.js → chunk-O7PHBLH2.js} +1 -1
  26. package/dist/cdn/components/chunks/chunk-PD62MBOJ.js +1 -0
  27. package/dist/cdn/components/chunks/{chunk-KBH5PCUO.js → chunk-PE4DAXHQ.js} +1 -1
  28. package/dist/cdn/components/chunks/{chunk-6ETDXUH2.js → chunk-PMPSJG5V.js} +7 -7
  29. package/dist/cdn/components/chunks/{chunk-5EVP7YNE.js → chunk-PPCHQG7P.js} +1 -1
  30. package/dist/cdn/components/chunks/{chunk-AIS3UICU.js → chunk-QZ5SHR3I.js} +9 -5
  31. package/dist/cdn/components/chunks/{chunk-32DTNR52.js → chunk-RS7TWEMQ.js} +1 -1
  32. package/dist/cdn/components/chunks/chunk-SMTIDNGW.js +1 -0
  33. package/dist/cdn/components/chunks/{chunk-MPQP4R54.js → chunk-SZYEBMG6.js} +10 -9
  34. package/dist/cdn/components/chunks/{chunk-JRGM3W7I.js → chunk-UDVB4LAE.js} +5 -2
  35. package/dist/cdn/components/chunks/{chunk-L65WUTXM.js → chunk-UYZR4JXZ.js} +12 -7
  36. package/dist/cdn/components/chunks/chunk-VG6NAAIV.js +1 -0
  37. package/dist/cdn/components/chunks/chunk-VJCNHMQZ.js +10 -0
  38. package/dist/cdn/components/chunks/chunk-VOTRXBDS.js +38 -0
  39. package/dist/cdn/components/chunks/{chunk-DKOPI7QA.js → chunk-VYFR364B.js} +73 -63
  40. package/dist/cdn/components/chunks/{chunk-SD2WHGPF.js → chunk-XDPRWUKN.js} +1 -1
  41. package/dist/cdn/components/chunks/{chunk-XH6NREVZ.js → chunk-YITWLCD3.js} +1 -1
  42. package/dist/cdn/components/chunks/{chunk-BQHYZB2W.js → chunk-ZBN4HTWP.js} +1 -1
  43. package/dist/cdn/components/chunks/{chunk-NBIENHLV.js → chunk-ZKZV2YG5.js} +18 -18
  44. package/dist/cdn/components/eun-alert.js +24 -16
  45. package/dist/cdn/components/eun-animate.js +12 -8
  46. package/dist/cdn/components/eun-badge.js +1 -1
  47. package/dist/cdn/components/eun-breadcrumb.js +25 -41
  48. package/dist/cdn/components/eun-button.js +1 -1
  49. package/dist/cdn/components/eun-calendar.js +67 -65
  50. package/dist/cdn/components/eun-card.js +32 -17
  51. package/dist/cdn/components/eun-carousel.js +66 -35
  52. package/dist/cdn/components/eun-check-card.js +13 -6
  53. package/dist/cdn/components/eun-checkbox-list.js +4 -4
  54. package/dist/cdn/components/eun-checkbox.js +1 -1
  55. package/dist/cdn/components/eun-chip.js +1 -1
  56. package/dist/cdn/components/eun-collapse.js +56 -27
  57. package/dist/cdn/components/eun-color-picker.js +53 -52
  58. package/dist/cdn/components/eun-counter.js +9 -8
  59. package/dist/cdn/components/eun-date-picker.js +59 -56
  60. package/dist/cdn/components/eun-description-list.js +152 -0
  61. package/dist/cdn/components/eun-divider.js +1 -1
  62. package/dist/cdn/components/eun-drawer.js +32 -18
  63. package/dist/cdn/components/eun-dropdown-button.js +1 -1
  64. package/dist/cdn/components/eun-dropdown-item.js +6 -5
  65. package/dist/cdn/components/eun-fab.js +17 -16
  66. package/dist/cdn/components/eun-icon.js +1 -1
  67. package/dist/cdn/components/eun-image-card.js +79 -22
  68. package/dist/cdn/components/eun-image-carousel.js +92 -47
  69. package/dist/cdn/components/eun-infinite-list.js +23 -11
  70. package/dist/cdn/components/eun-input-file.js +14 -13
  71. package/dist/cdn/components/eun-input-phone.js +15 -15
  72. package/dist/cdn/components/eun-input.js +1 -1
  73. package/dist/cdn/components/eun-label.js +4 -4
  74. package/dist/cdn/components/eun-link.js +78 -29
  75. package/dist/cdn/components/eun-loader.js +1 -1
  76. package/dist/cdn/components/eun-modal.js +17 -10
  77. package/dist/cdn/components/eun-pagination.js +17 -12
  78. package/dist/cdn/components/eun-password-strength.js +6 -2
  79. package/dist/cdn/components/eun-progress-bar.js +13 -5
  80. package/dist/cdn/components/eun-radio-card.js +16 -9
  81. package/dist/cdn/components/eun-radio-list.js +4 -4
  82. package/dist/cdn/components/eun-radio.js +1 -1
  83. package/dist/cdn/components/eun-scheduler-event-editor.js +1 -1
  84. package/dist/cdn/components/eun-scheduler-event.js +1 -1
  85. package/dist/cdn/components/eun-scheduler.js +36 -36
  86. package/dist/cdn/components/eun-search.js +11 -10
  87. package/dist/cdn/components/eun-select.js +12 -11
  88. package/dist/cdn/components/eun-sidebar.js +34 -20
  89. package/dist/cdn/components/eun-skeleton.js +1 -1
  90. package/dist/cdn/components/eun-slider.js +15 -14
  91. package/dist/cdn/components/eun-sliding-card.js +8 -4
  92. package/dist/cdn/components/eun-step.js +17 -6
  93. package/dist/cdn/components/eun-stepper.js +17 -6
  94. package/dist/cdn/components/eun-switch.js +10 -8
  95. package/dist/cdn/components/eun-tab-group.js +22 -17
  96. package/dist/cdn/components/eun-tab-panel.js +11 -3
  97. package/dist/cdn/components/eun-tab.js +1 -1
  98. package/dist/cdn/components/eun-table-action-bar.js +1 -1
  99. package/dist/cdn/components/eun-table.js +572 -31
  100. package/dist/cdn/components/eun-tag.js +13 -7
  101. package/dist/cdn/components/eun-textarea.js +23 -23
  102. package/dist/cdn/components/eun-time-picker.js +17 -15
  103. package/dist/cdn/components/eun-toast.js +36 -16
  104. package/dist/cdn/components/eun-toggle-group.js +53 -34
  105. package/dist/cdn/components/eun-toggle-item.js +16 -15
  106. package/dist/cdn/components/eun-toggle.js +12 -10
  107. package/dist/cdn/components/eun-toolbar.js +62 -52
  108. package/dist/cdn/components/eun-tooltip.js +30 -14
  109. package/dist/cdn/styles/breakpoints.scss +8 -0
  110. package/dist/cdn/styles/eunomia-grid.scss +6 -0
  111. package/dist/cdn/styles/eunomia-themes.css +1 -1
  112. package/dist/cdn/styles/themes/eunomia-theme.css +1 -1
  113. package/dist/cdn/styles/themes/eunomia-theme.scss +4 -3
  114. package/dist/cdn/styles/themes/mixins/eunomia-a11y-color.mixin.scss +34 -1
  115. package/dist/cdn/styles/themes/mixins/eunomia-neutrals.mixin.scss +4 -0
  116. package/dist/cdn/styles/themes/mixins/eunomia-states.mixin.scss +36 -12
  117. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia-dark.mixin.scss +10 -10
  118. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.mixin.scss +10 -10
  119. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.css +1 -1
  120. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.scss +3 -2
  121. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire-dark.mixin.scss +10 -10
  122. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.mixin.scss +10 -10
  123. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.css +1 -1
  124. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.scss +3 -2
  125. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest-dark.mixin.scss +10 -10
  126. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.mixin.scss +10 -10
  127. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.css +1 -1
  128. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.scss +3 -2
  129. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold-dark.mixin.scss +10 -10
  130. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.mixin.scss +10 -10
  131. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.css +1 -1
  132. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.scss +3 -2
  133. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean-dark.mixin.scss +10 -10
  134. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.mixin.scss +10 -10
  135. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.css +1 -1
  136. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.scss +3 -2
  137. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon-dark.mixin.scss +10 -10
  138. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.mixin.scss +10 -10
  139. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.css +1 -1
  140. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.scss +3 -2
  141. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet-dark.mixin.scss +10 -10
  142. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.mixin.scss +10 -10
  143. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.css +1 -1
  144. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.scss +3 -2
  145. package/dist/cdn/styles/tools/indexes/eunomia-media-queries.index.scss +1 -3
  146. package/dist/cdn/styles/tools/indexes/eunomia-tools.index.scss +1 -0
  147. package/dist/cdn/styles/tools/mixins/layout/eunomia-grid.mixin.scss +117 -53
  148. package/dist/cdn/styles/tools/mixins/media-queries/eunomia-media-queries.mixin.scss +69 -0
  149. package/dist/cdn/styles/tools/mixins/settings/eunomia-alpha.mixin.scss +28 -4
  150. package/dist/cdn/styles/tools/mixins/settings/eunomia-motion.mixin.scss +9 -0
  151. package/dist/cdn/styles/tools/variables/eunomia.breakpoints.scss +4 -0
  152. package/dist/components/action/button/button.d.ts +7 -2
  153. package/dist/components/action/button/button.js +7 -2
  154. package/dist/components/action/button/button.styles.js +51 -36
  155. package/dist/components/action/dropdown-button/dropdown-button.d.ts +2 -2
  156. package/dist/components/action/dropdown-button/dropdown-button.js +11 -10
  157. package/dist/components/action/dropdown-button/dropdown-button.styles.js +3 -2
  158. package/dist/components/action/dropdown-button/dropdown-item.js +5 -6
  159. package/dist/components/action/dropdown-button/dropdown-item.styles.js +3 -2
  160. package/dist/components/action/fab/fab.styles.js +14 -13
  161. package/dist/components/action/link/link.d.ts +7 -3
  162. package/dist/components/action/link/link.js +11 -7
  163. package/dist/components/action/link/link.styles.js +66 -15
  164. package/dist/components/action/shared-styles/button-palette.styles.js +15 -15
  165. package/dist/components/action/toggle/toggle-group.d.ts +2 -0
  166. package/dist/components/action/toggle/toggle-group.js +5 -3
  167. package/dist/components/action/toggle/toggle-group.styles.d.ts +2 -0
  168. package/dist/components/action/toggle/toggle-group.styles.js +42 -21
  169. package/dist/components/action/toggle/toggle-item.styles.js +13 -12
  170. package/dist/components/action/toggle/toggle.d.ts +2 -0
  171. package/dist/components/action/toggle/toggle.js +2 -0
  172. package/dist/components/action/toggle/toggle.styles.d.ts +2 -0
  173. package/dist/components/action/toggle/toggle.styles.js +12 -8
  174. package/dist/components/alert/alert/alert.d.ts +2 -0
  175. package/dist/components/alert/alert/alert.js +2 -0
  176. package/dist/components/alert/alert/alert.styles.js +23 -13
  177. package/dist/components/alert/drawer/drawer.d.ts +3 -1
  178. package/dist/components/alert/drawer/drawer.js +4 -2
  179. package/dist/components/alert/drawer/drawer.styles.js +25 -9
  180. package/dist/components/alert/modal/modal.d.ts +3 -1
  181. package/dist/components/alert/modal/modal.js +4 -2
  182. package/dist/components/alert/modal/modal.styles.js +16 -7
  183. package/dist/components/alert/toast/toast.d.ts +2 -0
  184. package/dist/components/alert/toast/toast.js +2 -0
  185. package/dist/components/alert/toast/toast.styles.js +37 -15
  186. package/dist/components/content/card/card.d.ts +7 -3
  187. package/dist/components/content/card/card.js +7 -3
  188. package/dist/components/content/card/card.styles.js +26 -11
  189. package/dist/components/content/card/image-card.d.ts +60 -6
  190. package/dist/components/content/card/image-card.js +120 -11
  191. package/dist/components/content/card/image-card.styles.js +66 -15
  192. package/dist/components/content/card/sliding-card.d.ts +2 -0
  193. package/dist/components/content/card/sliding-card.js +2 -0
  194. package/dist/components/content/card/sliding-card.styles.js +5 -1
  195. package/dist/components/content/collapse/collapse.d.ts +10 -1
  196. package/dist/components/content/collapse/collapse.js +12 -2
  197. package/dist/components/content/collapse/collapse.styles.d.ts +10 -1
  198. package/dist/components/content/collapse/collapse.styles.js +56 -18
  199. package/dist/components/content/description-list/description-list.d.ts +87 -0
  200. package/dist/components/content/description-list/description-list.js +107 -0
  201. package/dist/components/content/description-list/description-list.styles.d.ts +1 -0
  202. package/dist/components/content/description-list/description-list.styles.js +185 -0
  203. package/dist/components/content/icon/icon.d.ts +2 -0
  204. package/dist/components/content/icon/icon.js +2 -0
  205. package/dist/components/content/icon/icon.style.js +4 -1
  206. package/dist/components/content/image-carousel/image-carousel.d.ts +30 -19
  207. package/dist/components/content/image-carousel/image-carousel.js +48 -45
  208. package/dist/components/content/image-carousel/image-carousel.styles.js +69 -30
  209. package/dist/components/content/password-strength/password-strength.styles.js +5 -1
  210. package/dist/components/content/progress-bar/progress-bar.styles.js +12 -4
  211. package/dist/components/content/shared-styles/card-link.styles.js +4 -3
  212. package/dist/components/content/shared-styles/tone-surface.styles.d.ts +5 -0
  213. package/dist/components/content/shared-styles/tone-surface.styles.js +19 -14
  214. package/dist/components/content/tag/tag.d.ts +4 -0
  215. package/dist/components/content/tag/tag.js +4 -0
  216. package/dist/components/content/tag/tag.styles.js +14 -4
  217. package/dist/components/content/tooltip/tooltip.d.ts +3 -2
  218. package/dist/components/content/tooltip/tooltip.js +9 -16
  219. package/dist/components/content/tooltip/tooltip.styles.js +25 -7
  220. package/dist/components/form/checkbox/check-card.d.ts +4 -1
  221. package/dist/components/form/checkbox/check-card.js +4 -1
  222. package/dist/components/form/checkbox/check-card.styles.js +13 -4
  223. package/dist/components/form/checkbox/checkbox-list.d.ts +4 -1
  224. package/dist/components/form/checkbox/checkbox-list.js +11 -7
  225. package/dist/components/form/checkbox/checkbox.d.ts +4 -1
  226. package/dist/components/form/checkbox/checkbox.js +4 -1
  227. package/dist/components/form/checkbox/checkbox.styles.js +2 -2
  228. package/dist/components/form/color-picker/color-picker.d.ts +7 -1
  229. package/dist/components/form/color-picker/color-picker.js +19 -21
  230. package/dist/components/form/color-picker/color-picker.styles.js +6 -5
  231. package/dist/components/form/counter/counter.d.ts +4 -1
  232. package/dist/components/form/counter/counter.js +5 -2
  233. package/dist/components/form/counter/counter.styles.js +5 -4
  234. package/dist/components/form/date-picker/date-picker.d.ts +37 -33
  235. package/dist/components/form/date-picker/date-picker.js +32 -42
  236. package/dist/components/form/date-picker/date-picker.styles.js +8 -5
  237. package/dist/components/form/input/input.d.ts +7 -1
  238. package/dist/components/form/input/input.js +8 -2
  239. package/dist/components/form/input-file/input-file.d.ts +4 -1
  240. package/dist/components/form/input-file/input-file.js +8 -5
  241. package/dist/components/form/input-file/input-file.styles.js +3 -2
  242. package/dist/components/form/input-phone/input-phone.d.ts +8 -2
  243. package/dist/components/form/input-phone/input-phone.js +13 -17
  244. package/dist/components/form/input-phone/input-phone.styles.js +4 -4
  245. package/dist/components/form/label/label.styles.js +3 -3
  246. package/dist/components/form/radio/radio-card.d.ts +5 -2
  247. package/dist/components/form/radio/radio-card.js +5 -2
  248. package/dist/components/form/radio/radio-card.styles.js +14 -5
  249. package/dist/components/form/radio/radio-list.d.ts +5 -2
  250. package/dist/components/form/radio/radio-list.js +14 -10
  251. package/dist/components/form/radio/radio.d.ts +5 -2
  252. package/dist/components/form/radio/radio.js +5 -2
  253. package/dist/components/form/radio/radio.styles.js +4 -4
  254. package/dist/components/form/search/search.d.ts +2 -1
  255. package/dist/components/form/search/search.js +6 -15
  256. package/dist/components/form/search/search.styles.js +5 -4
  257. package/dist/components/form/select/select.d.ts +9 -2
  258. package/dist/components/form/select/select.js +15 -18
  259. package/dist/components/form/select/select.styles.js +3 -2
  260. package/dist/components/form/shared-styles/card.styles.js +5 -4
  261. package/dist/components/form/shared-styles/field.styles.js +16 -6
  262. package/dist/components/form/shared-styles/form-labels.styles.js +1 -1
  263. package/dist/components/form/slider/slider.d.ts +4 -1
  264. package/dist/components/form/slider/slider.js +5 -2
  265. package/dist/components/form/slider/slider.styles.js +8 -7
  266. package/dist/components/form/switch/switch.d.ts +4 -1
  267. package/dist/components/form/switch/switch.js +4 -1
  268. package/dist/components/form/switch/switch.styles.js +7 -5
  269. package/dist/components/form/textarea/textarea.d.ts +7 -1
  270. package/dist/components/form/textarea/textarea.js +14 -8
  271. package/dist/components/form/time-picker/time-picker-columns.styles.js +4 -2
  272. package/dist/components/form/time-picker/time-picker-list.styles.js +2 -1
  273. package/dist/components/form/time-picker/time-picker.d.ts +6 -2
  274. package/dist/components/form/time-picker/time-picker.js +22 -26
  275. package/dist/components/form/time-picker/time-picker.styles.js +4 -3
  276. package/dist/components/layout/animate/animate.d.ts +37 -15
  277. package/dist/components/layout/animate/animate.js +35 -15
  278. package/dist/components/layout/animate/animate.styles.js +9 -16
  279. package/dist/components/layout/infinite-list/infinite-list.d.ts +33 -10
  280. package/dist/components/layout/infinite-list/infinite-list.js +115 -18
  281. package/dist/components/layout/infinite-list/infinite-list.styles.d.ts +3 -0
  282. package/dist/components/layout/infinite-list/infinite-list.styles.js +17 -5
  283. package/dist/components/loader/loader/loader.styles.js +3 -1
  284. package/dist/components/navigation/breadcrumb/breadcrumb.d.ts +31 -45
  285. package/dist/components/navigation/breadcrumb/breadcrumb.js +111 -77
  286. package/dist/components/navigation/breadcrumb/breadcrumb.styles.d.ts +3 -0
  287. package/dist/components/navigation/breadcrumb/breadcrumb.styles.js +22 -26
  288. package/dist/components/navigation/carousel/carousel.d.ts +30 -10
  289. package/dist/components/navigation/carousel/carousel.js +37 -18
  290. package/dist/components/navigation/carousel/carousel.styles.js +60 -20
  291. package/dist/components/navigation/pagination/pagination.styles.js +8 -3
  292. package/dist/components/navigation/sidebar/sidebar.d.ts +2 -0
  293. package/dist/components/navigation/sidebar/sidebar.js +2 -0
  294. package/dist/components/navigation/sidebar/sidebar.styles.js +27 -11
  295. package/dist/components/navigation/stepper/step.styles.js +16 -5
  296. package/dist/components/navigation/stepper/stepper.styles.js +16 -5
  297. package/dist/components/navigation/tabs/tab/tab.d.ts +11 -0
  298. package/dist/components/navigation/tabs/tab/tab.js +11 -0
  299. package/dist/components/navigation/tabs/tab/tab.styles.js +22 -16
  300. package/dist/components/navigation/tabs/tab-group/tab-group.js +7 -8
  301. package/dist/components/navigation/tabs/tab-group/tab-group.styles.js +19 -14
  302. package/dist/components/navigation/tabs/tab-panel/tab-panel.d.ts +4 -0
  303. package/dist/components/navigation/tabs/tab-panel/tab-panel.js +4 -0
  304. package/dist/components/navigation/tabs/tab-panel/tab-panel.styles.js +18 -1
  305. package/dist/components/navigation/toolbar/toolbar.d.ts +17 -49
  306. package/dist/components/navigation/toolbar/toolbar.js +23 -71
  307. package/dist/components/navigation/toolbar/toolbar.styles.js +59 -36
  308. package/dist/events/table-row-click.event.d.ts +5 -4
  309. package/dist/events/table-row-click.event.js +10 -5
  310. package/dist/features/scheduler/calendar/calendar.d.ts +6 -6
  311. package/dist/features/scheduler/calendar/calendar.js +6 -5
  312. package/dist/features/scheduler/calendar/calendar.styles.js +8 -6
  313. package/dist/features/scheduler/scheduler/scheduler.d.ts +1 -1
  314. package/dist/features/scheduler/scheduler/scheduler.js +9 -23
  315. package/dist/features/scheduler/scheduler/scheduler.styles.js +6 -4
  316. package/dist/features/scheduler/scheduler-event/scheduler-event.d.ts +2 -0
  317. package/dist/features/scheduler/scheduler-event/scheduler-event.js +2 -0
  318. package/dist/features/scheduler/scheduler-event/scheduler-event.styles.js +10 -4
  319. package/dist/features/scheduler/shared/scheduler-hour-grid.styles.js +3 -3
  320. package/dist/features/scheduler/shared/scheduler-month-view.styles.js +2 -2
  321. package/dist/features/scheduler/shared/scheduler-year-view.styles.js +2 -2
  322. package/dist/features/table/table/table-native.styles.d.ts +28 -0
  323. package/dist/features/table/table/table-native.styles.js +502 -0
  324. package/dist/features/table/table/table.d.ts +342 -294
  325. package/dist/features/table/table/table.js +820 -546
  326. package/dist/features/table/table/table.styles.js +31 -17
  327. package/dist/features/table/table/table.types.d.ts +11 -20
  328. package/dist/features/table/table/table.utils.d.ts +6 -36
  329. package/dist/features/table/table/table.utils.js +16 -65
  330. package/dist/features/table/table-action-bar/table-action-bar.d.ts +33 -16
  331. package/dist/features/table/table-action-bar/table-action-bar.js +15 -22
  332. package/dist/features/table/table-action-bar/table-action-bar.styles.js +15 -3
  333. package/dist/i18n/en.d.ts +31 -0
  334. package/dist/i18n/en.js +31 -0
  335. package/dist/i18n/fr.js +35 -0
  336. package/dist/index.d.ts +4 -10
  337. package/dist/index.js +6 -10
  338. package/dist/mixins/check.mixin.js +4 -5
  339. package/dist/mixins/form.mixin.d.ts +17 -1
  340. package/dist/mixins/form.mixin.js +80 -25
  341. package/dist/mixins/radio.mixin.js +4 -5
  342. package/dist/mixins/validators.mixin.d.ts +7 -1
  343. package/dist/mixins/validators.mixin.js +36 -17
  344. package/dist/ssr/animate-ssr.css +3 -2
  345. package/dist/ssr/button-ssr.css +319 -0
  346. package/dist/ssr/card-ssr.css +184 -0
  347. package/dist/ssr/description-list-ssr.css +150 -0
  348. package/dist/ssr/links-ssr.css +1 -1
  349. package/dist/ssr/table-ssr.css +472 -0
  350. package/dist/ssr/tag-ssr.css +197 -0
  351. package/dist/ssr/toolbar-ssr.css +5 -1
  352. package/dist/utils/drag-drop.utils.js +18 -2
  353. package/dist/utils/dropdown-menu.utils.d.ts +2 -2
  354. package/dist/utils/dropdown-menu.utils.js +4 -14
  355. package/dist/utils/light-dom-styles.utils.d.ts +14 -0
  356. package/dist/utils/light-dom-styles.utils.js +37 -0
  357. package/dist/utils/media.styles.d.ts +19 -0
  358. package/dist/utils/media.styles.js +23 -0
  359. package/dist/utils/motion.utils.d.ts +40 -0
  360. package/dist/utils/motion.utils.js +51 -0
  361. package/dist/utils/theme-generator.utils.d.ts +6 -1
  362. package/dist/utils/theme-generator.utils.js +59 -20
  363. package/package.json +17 -28
  364. package/styles/breakpoints.scss +8 -0
  365. package/styles/eunomia-grid.scss +6 -0
  366. package/styles/themes/eunomia-theme.scss +4 -3
  367. package/styles/themes/mixins/eunomia-a11y-color.mixin.scss +34 -1
  368. package/styles/themes/mixins/eunomia-neutrals.mixin.scss +4 -0
  369. package/styles/themes/mixins/eunomia-states.mixin.scss +36 -12
  370. package/styles/themes/prebuilt-themes/eunomia/eunomia-dark.mixin.scss +10 -10
  371. package/styles/themes/prebuilt-themes/eunomia/eunomia.mixin.scss +10 -10
  372. package/styles/themes/prebuilt-themes/eunomia/eunomia.theme.scss +3 -2
  373. package/styles/themes/prebuilt-themes/fire/eunomia-fire-dark.mixin.scss +10 -10
  374. package/styles/themes/prebuilt-themes/fire/eunomia-fire.mixin.scss +10 -10
  375. package/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.scss +3 -2
  376. package/styles/themes/prebuilt-themes/forest/eunomia-forest-dark.mixin.scss +10 -10
  377. package/styles/themes/prebuilt-themes/forest/eunomia-forest.mixin.scss +10 -10
  378. package/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.scss +3 -2
  379. package/styles/themes/prebuilt-themes/gold/eunomia-gold-dark.mixin.scss +10 -10
  380. package/styles/themes/prebuilt-themes/gold/eunomia-gold.mixin.scss +10 -10
  381. package/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.scss +3 -2
  382. package/styles/themes/prebuilt-themes/ocean/eunomia-ocean-dark.mixin.scss +10 -10
  383. package/styles/themes/prebuilt-themes/ocean/eunomia-ocean.mixin.scss +10 -10
  384. package/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.scss +3 -2
  385. package/styles/themes/prebuilt-themes/salmon/eunomia-salmon-dark.mixin.scss +10 -10
  386. package/styles/themes/prebuilt-themes/salmon/eunomia-salmon.mixin.scss +10 -10
  387. package/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.scss +3 -2
  388. package/styles/themes/prebuilt-themes/violet/eunomia-violet-dark.mixin.scss +10 -10
  389. package/styles/themes/prebuilt-themes/violet/eunomia-violet.mixin.scss +10 -10
  390. package/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.scss +3 -2
  391. package/styles/tools/indexes/eunomia-media-queries.index.scss +1 -3
  392. package/styles/tools/indexes/eunomia-tools.index.scss +1 -0
  393. package/styles/tools/mixins/layout/eunomia-grid.mixin.scss +117 -53
  394. package/styles/tools/mixins/media-queries/eunomia-media-queries.mixin.scss +69 -0
  395. package/styles/tools/mixins/settings/eunomia-alpha.mixin.scss +28 -4
  396. package/styles/tools/mixins/settings/eunomia-motion.mixin.scss +9 -0
  397. package/styles/tools/variables/eunomia.breakpoints.scss +4 -0
  398. package/dist/cdn/components/chunks/chunk-A6KGFALA.js +0 -132
  399. package/dist/cdn/components/chunks/chunk-CEDHJUUH.js +0 -1
  400. package/dist/cdn/components/chunks/chunk-D2M4BV5Y.js +0 -328
  401. package/dist/cdn/components/chunks/chunk-E74CM7UG.js +0 -66
  402. package/dist/cdn/components/chunks/chunk-EST3M4AO.js +0 -1
  403. package/dist/cdn/components/chunks/chunk-GU6BVMFJ.js +0 -1
  404. package/dist/cdn/components/chunks/chunk-KVYUNKUO.js +0 -27
  405. package/dist/cdn/components/chunks/chunk-OAULRKHQ.js +0 -38
  406. package/dist/cdn/components/chunks/chunk-PCM7D3YF.js +0 -84
  407. package/dist/cdn/components/chunks/chunk-SJWRE6PW.js +0 -1
  408. package/dist/cdn/components/chunks/chunk-T4PTHUYF.js +0 -10
  409. package/dist/cdn/components/chunks/chunk-VRGRCYIO.js +0 -1
  410. package/dist/cdn/components/chunks/chunk-X2AUBZD2.js +0 -30
  411. package/dist/cdn/components/eun-breadcrumb-item.js +0 -93
  412. package/dist/cdn/components/eun-table-cell.js +0 -1
  413. package/dist/cdn/components/eun-table-column.js +0 -1
  414. package/dist/cdn/components/eun-table-header.js +0 -1
  415. package/dist/cdn/components/eun-table-item.js +0 -1
  416. package/dist/cdn/components/eun-table-skeleton-row.js +0 -1
  417. package/dist/cdn/styles/tools/mixins/media-queries/eunomia-device.mixin.scss +0 -14
  418. package/dist/cdn/styles/tools/mixins/media-queries/eunomia-gte.mixin.scss +0 -26
  419. package/dist/cdn/styles/tools/mixins/media-queries/eunomia-lte.mixin.scss +0 -26
  420. package/dist/components/navigation/breadcrumb/breadcrumb-item.d.ts +0 -77
  421. package/dist/components/navigation/breadcrumb/breadcrumb-item.js +0 -130
  422. package/dist/components/navigation/breadcrumb/breadcrumb-item.styles.d.ts +0 -6
  423. package/dist/components/navigation/breadcrumb/breadcrumb-item.styles.js +0 -78
  424. package/dist/features/table/native-table.css +0 -276
  425. package/dist/features/table/shared-styles/table-row.styles.d.ts +0 -7
  426. package/dist/features/table/shared-styles/table-row.styles.js +0 -47
  427. package/dist/features/table/shared-styles/table-shared.styles.d.ts +0 -23
  428. package/dist/features/table/shared-styles/table-shared.styles.js +0 -33
  429. package/dist/features/table/table-cell/table-cell.d.ts +0 -59
  430. package/dist/features/table/table-cell/table-cell.js +0 -73
  431. package/dist/features/table/table-cell/table-cell.styles.d.ts +0 -1
  432. package/dist/features/table/table-cell/table-cell.styles.js +0 -46
  433. package/dist/features/table/table-column/table-column.d.ts +0 -73
  434. package/dist/features/table/table-column/table-column.js +0 -89
  435. package/dist/features/table/table-column/table-column.styles.d.ts +0 -1
  436. package/dist/features/table/table-column/table-column.styles.js +0 -51
  437. package/dist/features/table/table-header/table-header.d.ts +0 -102
  438. package/dist/features/table/table-header/table-header.js +0 -165
  439. package/dist/features/table/table-header/table-header.styles.d.ts +0 -1
  440. package/dist/features/table/table-header/table-header.styles.js +0 -147
  441. package/dist/features/table/table-item/table-item.d.ts +0 -179
  442. package/dist/features/table/table-item/table-item.js +0 -291
  443. package/dist/features/table/table-item/table-item.styles.d.ts +0 -1
  444. package/dist/features/table/table-item/table-item.styles.js +0 -404
  445. package/dist/features/table/table-managed/table-managed.d.ts +0 -19
  446. package/dist/features/table/table-managed/table-managed.js +0 -128
  447. package/dist/features/table/table-skeleton-row/table-skeleton-row.d.ts +0 -46
  448. package/dist/features/table/table-skeleton-row/table-skeleton-row.js +0 -110
  449. package/dist/features/table/table-skeleton-row/table-skeleton-row.styles.d.ts +0 -12
  450. package/dist/features/table/table-skeleton-row/table-skeleton-row.styles.js +0 -65
  451. package/dist/mixins/table-row.mixin.d.ts +0 -37
  452. package/dist/mixins/table-row.mixin.js +0 -103
  453. package/styles/tools/mixins/media-queries/eunomia-device.mixin.scss +0 -14
  454. package/styles/tools/mixins/media-queries/eunomia-gte.mixin.scss +0 -26
  455. package/styles/tools/mixins/media-queries/eunomia-lte.mixin.scss +0 -26
@@ -81,6 +81,8 @@ const EXIT_FALLBACK_MS = 600;
81
81
  * @cssprop [--toast-content-color] - Sets the color of the description and action content, independently of the heading and icon color
82
82
  * @cssprop [--toast-border-radius] - Sets the corner radius of the toast
83
83
  * @cssprop [--toast-padding] - Sets the padding of the toast
84
+ * @cssprop [--toast-padding-block] - Sets the vertical padding, as one length applied to both sides. Ignored when --toast-padding is set
85
+ * @cssprop [--toast-padding-inline] - Sets the horizontal padding, as one length applied to both sides. Ignored when --toast-padding is set
84
86
  * @cssprop [--toast-gap] - Sets the gap between the icon column and the heading and content column
85
87
  * @cssprop [--toast-row-gap] - Sets the gap between the heading, description, and action rows
86
88
  * @cssprop [--toast-shadow] - Sets the shadow of the toast
@@ -16,6 +16,8 @@ import { css } from "lit";
16
16
  * [--toast-content-color] - Set a custom color for the description/action content, independent of the heading/icon color
17
17
  * [--toast-border-radius] - Set a custom border radius
18
18
  * [--toast-padding] - Set a custom padding
19
+ * [--toast-padding-block] - Set a custom vertical padding, as one length applied to both sides. Ignored when --toast-padding is set
20
+ * [--toast-padding-inline] - Set a custom horizontal padding, as one length applied to both sides. Ignored when --toast-padding is set
19
21
  * [--toast-gap] - Set a custom gap between the icon column and the heading/content column
20
22
  * [--toast-row-gap] - Set a custom gap between the heading, description, and action rows
21
23
  * [--toast-shadow] - Set a custom shadow
@@ -33,14 +35,17 @@ const base = css `
33
35
  z-index: var(--toast-z-index, 2147483000);
34
36
  font-family: var(--eun-font-family, "Mulish", sans-serif);
35
37
  --_gapEdge: var(--toast-viewport-gap, var(--eun-space-m, 16px));
36
- --_transitionDuration: var(--toast-transition-duration, 0.3s);
38
+ --_transitionDuration: var(
39
+ --toast-transition-duration,
40
+ var(--eun-duration-xl, 300ms)
41
+ );
37
42
  --_baseX: var(--_enterX, 0px);
38
43
  --_baseY: var(--_enterY, 0px);
39
44
  visibility: hidden;
40
45
  opacity: 0;
41
46
  transition:
42
- opacity var(--_transitionDuration) ease,
43
- transform var(--_transitionDuration) ease,
47
+ opacity var(--_transitionDuration) var(--eun-easing-default, ease),
48
+ transform var(--_transitionDuration) var(--eun-easing-default, ease),
44
49
  visibility 0s linear var(--_transitionDuration);
45
50
  }
46
51
 
@@ -50,8 +55,8 @@ const base = css `
50
55
  --_baseX: 0px;
51
56
  --_baseY: 0px;
52
57
  transition:
53
- opacity var(--_transitionDuration) ease,
54
- transform var(--_transitionDuration) ease,
58
+ opacity var(--_transitionDuration) var(--eun-easing-default, ease),
59
+ transform var(--_transitionDuration) var(--eun-easing-default, ease),
55
60
  visibility 0s linear 0s;
56
61
  }
57
62
 
@@ -145,25 +150,25 @@ const base = css `
145
150
  --_titleColor: var(--eun-text-color, #071621);
146
151
  }
147
152
  :host([severity="info"]) {
148
- --_background: var(--eun-color-info-30, #f0f7fa);
153
+ --_background: var(--eun-color-info-alpha-5, #097faf0d);
149
154
  --_backgroundFilled: var(--eun-color-info-100, #097faf);
150
155
  --_borderColor: var(--eun-color-info-100, #097faf);
151
156
  --_titleColor: var(--eun-color-info-100, #097faf);
152
157
  }
153
158
  :host([severity="success"]) {
154
- --_background: var(--eun-color-success-30, #f1f9f4);
159
+ --_background: var(--eun-color-success-alpha-5, #1a99480d);
155
160
  --_backgroundFilled: var(--eun-color-success-100, #1a9948);
156
161
  --_borderColor: var(--eun-color-success-100, #1a9948);
157
162
  --_titleColor: var(--eun-color-success-100, #1a9948);
158
163
  }
159
164
  :host([severity="warning"]) {
160
- --_background: var(--eun-color-warning-30, #fcf5f0);
165
+ --_background: var(--eun-color-warning-alpha-5, #c852070d);
161
166
  --_backgroundFilled: var(--eun-color-warning-100, #c85207);
162
167
  --_borderColor: var(--eun-color-warning-100, #c85207);
163
168
  --_titleColor: var(--eun-color-warning-100, #c85207);
164
169
  }
165
170
  :host([severity="critical"]) {
166
- --_background: var(--eun-color-critical-30, #faf0f1);
171
+ --_background: var(--eun-color-critical-alpha-5, #aa00140d);
167
172
  --_backgroundFilled: var(--eun-color-critical-100, #aa0014);
168
173
  --_borderColor: var(--eun-color-critical-100, #aa0014);
169
174
  --_titleColor: var(--eun-color-critical-100, #aa0014);
@@ -189,8 +194,13 @@ const base = css `
189
194
  /* Every appearance carries the same border box (transparent unless
190
195
  drawn), taken out of the padding, so switching appearance or adding a
191
196
  --toast-border-* never changes the size. */
192
- border: var(--_bw) solid var(--toast-border-color, var(--_frame, transparent));
193
- padding: var(--toast-padding, max(0px, calc(var(--eun-space-m, 16px) - var(--_bw))));
197
+ border: var(--_bw) solid
198
+ var(--toast-border-color, var(--_frame, transparent));
199
+ padding: var(
200
+ --toast-padding,
201
+ var(--toast-padding-block, max(0px, calc(var(--eun-space-m, 16px) - var(--_bw))))
202
+ var(--toast-padding-inline, max(0px, calc(var(--eun-space-m, 16px) - var(--_bw))))
203
+ );
194
204
  border-radius: var(--toast-border-radius, var(--eun-border-radius-m, 8px));
195
205
  box-shadow: var(
196
206
  --toast-shadow,
@@ -223,7 +233,10 @@ const base = css `
223
233
  }
224
234
  :host([appearance="outline"]) #toast {
225
235
  --_frame: var(--_borderColor);
226
- background: var(--toast-background-color, var(--eun-surface-color, #ffffff));
236
+ background: var(
237
+ --toast-background-color,
238
+ var(--eun-surface-color, #ffffff)
239
+ );
227
240
  }
228
241
  :host([appearance="fill"]) #toast {
229
242
  background: var(--toast-background-color, var(--_backgroundFilled));
@@ -242,14 +255,20 @@ const base = css `
242
255
  }
243
256
 
244
257
  slot[name="icon"] {
245
- --icon-color: var(--toast-icon-color, var(--toast-color, var(--_titleColor)));
258
+ --icon-color: var(
259
+ --toast-icon-color,
260
+ var(--toast-color, var(--_titleColor))
261
+ );
246
262
  grid-column: 1;
247
263
  grid-row: 1;
248
264
  align-self: center;
249
265
  display: flex;
250
266
  }
251
267
  :host([appearance="fill"]) slot[name="icon"] {
252
- --icon-color: var(--toast-icon-color, var(--toast-color, var(--_onFilled, #fff)));
268
+ --icon-color: var(
269
+ --toast-icon-color,
270
+ var(--toast-color, var(--_onFilled, #fff))
271
+ );
253
272
  }
254
273
 
255
274
  #description,
@@ -290,7 +309,10 @@ const base = css `
290
309
 
291
310
  :host([closeable]) #toast {
292
311
  padding-right: calc(
293
- var(--toast-padding, max(0px, calc(var(--eun-space-s, 8px) - var(--_bw)))) +
312
+ var(
313
+ --toast-padding,
314
+ var(--toast-padding-inline, max(0px, calc(var(--eun-space-s, 8px) - var(--_bw))))
315
+ ) +
294
316
  var(--eun-space-l, 32px)
295
317
  );
296
318
  }
@@ -25,15 +25,17 @@ declare const EunomiaCard_base: import("../../../utils/constructor.type.js").Con
25
25
  * and announces it through the anchor's aria-description.
26
26
  *
27
27
  * @slot [default] - The card's content, arranged in a column by `--card-gap`. A native anchor as a direct child links the whole card when href is unset
28
- * @csspart card - The outer box, a link once href is set, a plain container otherwise. Exposed for effects the card's CSS custom properties don't cover, such as a hover accent
28
+ * @csspart card - The outer box, a link once href is set, a plain container otherwise. Exposed for effects the card's CSS custom properties don't cover, such as a hover accent. It isolates its own stacking context, so a decoration placed at z-index -1 stays above its background and below its content
29
29
  * @prop {'default' | 'fill' | 'raised'} [appearance='default'] - The card's surface style. Default is a plain surface colored box with a border. Fill and raised both drop the border, fill for a muted tinted background and raised for a drop shadow. All three animate a border, tint, or shadow change on hover or focus regardless of whether the card is a link, though the accompanying lift is narrower
30
30
  * @prop {string} href - The URL the card navigates to. When set, the card renders as a link instead of a plain wrapper
31
31
  * @prop {'_blank' | '_self' | '_parent' | '_top'} target - Where to open the linked URL. Only used when href is set. Opening in a new tab automatically adds an external link badge and announces it to assistive technology, in the current locale
32
32
  * @prop {string} [locale] - The locale used to resolve the "opens in a new tab" announcement. Defaults to the one set with setDefaultLocale, English otherwise
33
33
  * @prop {string} download - The filename used when the linked URL is downloaded instead of navigated to. Only used when href is set
34
- * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically
34
+ * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically. Ignored with a slotted anchor, which takes it instead
35
35
  * @fires {NavigationEvent} eunnavigate - Fired before following href, so a client-side router can intercept the navigation. Not fired for downloads, and cancelable
36
36
  * @cssprop [--card-padding] - Sets the padding of the card
37
+ * @cssprop [--card-padding-block] - Sets the vertical padding, as one length applied to both sides. Ignored when --card-padding is set
38
+ * @cssprop [--card-padding-inline] - Sets the horizontal padding, as one length applied to both sides. Ignored when --card-padding is set
37
39
  * @cssprop [--card-gap] - Sets the gap between the card's own direct children
38
40
  * @cssprop [--card-border-radius] - Sets the corner radius of the card
39
41
  * @cssprop [--card-border-color] - Sets the border color, for every appearance. Fill and raised have no border by default, so it draws one when set
@@ -42,7 +44,9 @@ declare const EunomiaCard_base: import("../../../utils/constructor.type.js").Con
42
44
  * @cssprop [--card-fill-background] - Sets the background color for the fill appearance
43
45
  * @cssprop [--card-fill-hover-background] - Sets the background color on hover for the fill appearance
44
46
  * @cssprop [--card-shadow] - Sets a box shadow for the default appearance, none by default. Replaced by a subtle elevation for the raised appearance, and unused by fill
45
- * @cssprop [--card-raised-hover-shadow] - Sets the box shadow on hover for the raised appearance
47
+ * @cssprop [--card-raised-hover-shadow] - Sets the box shadow on hover for the raised appearance. Ignored when --card-hover-shadow is set
48
+ * @cssprop [--card-hover-shadow] - Sets the box shadow on hover or focus, for every appearance, linked or not. Defaults to the resting shadow, or a deeper one for raised
49
+ * @cssprop [--card-overflow] - Sets the overflow of the card, visible by default. Set it to hidden to clip a decoration or a full-bleed image to the rounded corners
46
50
  * @cssprop [--card-hover-transform] - Sets a transform applied on hover or focus, for every appearance. Setting this always applies it, link or not. Left unset, a small lift only applies to linked cards, since a non-linked card gets the border, tint, or shadow change on hover but stays in place otherwise
47
51
  * @cssprop [--card-hover-border-color] - Sets the border color on hover or focus, for every appearance, including fill and raised, whose border is otherwise transparent rather than absent, reserving the space so the color reveals with no layout shift. Defaults to the primary color when `href` is set, otherwise the border stays exactly as it is at rest (unchanged for default, still transparent for fill/raised) — hovering a non-link card gives no color feedback, since there's nothing to click
48
52
  * @cssprop [--card-hover-background] - Sets the background color on hover or focus, for the default appearance only, unchanged by default. See card-fill-hover-background for the fill appearance
@@ -42,15 +42,17 @@ export const EunomiaCardTagName = "eun-card";
42
42
  * and announces it through the anchor's aria-description.
43
43
  *
44
44
  * @slot [default] - The card's content, arranged in a column by `--card-gap`. A native anchor as a direct child links the whole card when href is unset
45
- * @csspart card - The outer box, a link once href is set, a plain container otherwise. Exposed for effects the card's CSS custom properties don't cover, such as a hover accent
45
+ * @csspart card - The outer box, a link once href is set, a plain container otherwise. Exposed for effects the card's CSS custom properties don't cover, such as a hover accent. It isolates its own stacking context, so a decoration placed at z-index -1 stays above its background and below its content
46
46
  * @prop {'default' | 'fill' | 'raised'} [appearance='default'] - The card's surface style. Default is a plain surface colored box with a border. Fill and raised both drop the border, fill for a muted tinted background and raised for a drop shadow. All three animate a border, tint, or shadow change on hover or focus regardless of whether the card is a link, though the accompanying lift is narrower
47
47
  * @prop {string} href - The URL the card navigates to. When set, the card renders as a link instead of a plain wrapper
48
48
  * @prop {'_blank' | '_self' | '_parent' | '_top'} target - Where to open the linked URL. Only used when href is set. Opening in a new tab automatically adds an external link badge and announces it to assistive technology, in the current locale
49
49
  * @prop {string} [locale] - The locale used to resolve the "opens in a new tab" announcement. Defaults to the one set with setDefaultLocale, English otherwise
50
50
  * @prop {string} download - The filename used when the linked URL is downloaded instead of navigated to. Only used when href is set
51
- * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically
51
+ * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically. Ignored with a slotted anchor, which takes it instead
52
52
  * @fires {NavigationEvent} eunnavigate - Fired before following href, so a client-side router can intercept the navigation. Not fired for downloads, and cancelable
53
53
  * @cssprop [--card-padding] - Sets the padding of the card
54
+ * @cssprop [--card-padding-block] - Sets the vertical padding, as one length applied to both sides. Ignored when --card-padding is set
55
+ * @cssprop [--card-padding-inline] - Sets the horizontal padding, as one length applied to both sides. Ignored when --card-padding is set
54
56
  * @cssprop [--card-gap] - Sets the gap between the card's own direct children
55
57
  * @cssprop [--card-border-radius] - Sets the corner radius of the card
56
58
  * @cssprop [--card-border-color] - Sets the border color, for every appearance. Fill and raised have no border by default, so it draws one when set
@@ -59,7 +61,9 @@ export const EunomiaCardTagName = "eun-card";
59
61
  * @cssprop [--card-fill-background] - Sets the background color for the fill appearance
60
62
  * @cssprop [--card-fill-hover-background] - Sets the background color on hover for the fill appearance
61
63
  * @cssprop [--card-shadow] - Sets a box shadow for the default appearance, none by default. Replaced by a subtle elevation for the raised appearance, and unused by fill
62
- * @cssprop [--card-raised-hover-shadow] - Sets the box shadow on hover for the raised appearance
64
+ * @cssprop [--card-raised-hover-shadow] - Sets the box shadow on hover for the raised appearance. Ignored when --card-hover-shadow is set
65
+ * @cssprop [--card-hover-shadow] - Sets the box shadow on hover or focus, for every appearance, linked or not. Defaults to the resting shadow, or a deeper one for raised
66
+ * @cssprop [--card-overflow] - Sets the overflow of the card, visible by default. Set it to hidden to clip a decoration or a full-bleed image to the rounded corners
63
67
  * @cssprop [--card-hover-transform] - Sets a transform applied on hover or focus, for every appearance. Setting this always applies it, link or not. Left unset, a small lift only applies to linked cards, since a non-linked card gets the border, tint, or shadow change on hover but stays in place otherwise
64
68
  * @cssprop [--card-hover-border-color] - Sets the border color on hover or focus, for every appearance, including fill and raised, whose border is otherwise transparent rather than absent, reserving the space so the color reveals with no layout shift. Defaults to the primary color when `href` is set, otherwise the border stays exactly as it is at rest (unchanged for default, still transparent for fill/raised) — hovering a non-link card gives no color feedback, since there's nothing to click
65
69
  * @cssprop [--card-hover-background] - Sets the background color on hover or focus, for the default appearance only, unchanged by default. See card-fill-hover-background for the fill appearance
@@ -17,9 +17,15 @@ const base = css `
17
17
  flex-direction: column;
18
18
  gap: var(--card-gap, var(--eun-space-s, 8px));
19
19
  position: relative;
20
+ isolation: isolate;
20
21
  box-sizing: border-box;
21
22
  height: 100%;
22
- padding: var(--card-padding, var(--eun-space-m, 16px));
23
+ overflow: var(--card-overflow, visible);
24
+ padding: var(
25
+ --card-padding,
26
+ var(--card-padding-block, var(--eun-space-m, 16px))
27
+ var(--card-padding-inline, var(--eun-space-m, 16px))
28
+ );
23
29
  border-radius: var(--card-border-radius, var(--eun-border-radius-m, 8px));
24
30
  border: var(--card-border-width, var(--eun-border-width-s, 1px)) solid
25
31
  var(--card-border-color, var(--eun-border-color, #dee0e7));
@@ -31,11 +37,15 @@ const base = css `
31
37
  outline: 2px solid transparent;
32
38
  transition: var(
33
39
  --card-transition,
34
- transform var(--card-hover-duration, 0.3s) ease,
35
- outline 0.2s ease-out,
36
- box-shadow var(--card-hover-duration, 0.3s) ease,
37
- background-color var(--card-hover-duration, 0.3s) ease,
38
- border-color var(--card-hover-duration, 0.3s) ease
40
+ transform var(--card-hover-duration, var(--eun-duration-xl, 300ms))
41
+ var(--eun-easing-default, ease),
42
+ outline var(--eun-duration-m, 200ms) var(--eun-easing-out, ease-out),
43
+ box-shadow var(--card-hover-duration, var(--eun-duration-xl, 300ms))
44
+ var(--eun-easing-default, ease),
45
+ background-color var(--card-hover-duration, var(--eun-duration-xl, 300ms))
46
+ var(--eun-easing-default, ease),
47
+ border-color var(--card-hover-duration, var(--eun-duration-xl, 300ms))
48
+ var(--eun-easing-default, ease)
39
49
  );
40
50
  }
41
51
 
@@ -95,6 +105,7 @@ const base = css `
95
105
  #card:hover,
96
106
  #card:focus-visible {
97
107
  border-color: var(--card-hover-border-color, var(--_hoverBorderDefault));
108
+ box-shadow: var(--card-hover-shadow, var(--card-shadow, none));
98
109
  }
99
110
 
100
111
  :host([appearance="fill"]) #card {
@@ -122,11 +133,14 @@ const base = css `
122
133
  :host([appearance="raised"]) #card:hover {
123
134
  transform: var(--card-hover-transform, var(--_hoverLift));
124
135
  box-shadow: var(
125
- --card-raised-hover-shadow,
136
+ --card-hover-shadow,
126
137
  var(
127
- --eun-shadow-m,
128
- rgba(0, 0, 0, 0.1) 0px 10px 15px -3px,
129
- rgba(0, 0, 0, 0.05) 0px 4px 6px -2px
138
+ --card-raised-hover-shadow,
139
+ var(
140
+ --eun-shadow-m,
141
+ rgba(0, 0, 0, 0.1) 0px 10px 15px -3px,
142
+ rgba(0, 0, 0, 0.05) 0px 4px 6px -2px
143
+ )
130
144
  )
131
145
  );
132
146
  }
@@ -148,7 +162,8 @@ const base = css `
148
162
  z-index: 1;
149
163
  border-radius: var(--card-border-radius, var(--eun-border-radius-m, 8px));
150
164
  outline: 2px solid transparent;
151
- transition: outline 0.2s ease-out;
165
+ transition: outline var(--eun-duration-m, 200ms)
166
+ var(--eun-easing-out, ease-out);
152
167
  }
153
168
  ::slotted(a:focus-visible)::after {
154
169
  outline-color: var(
@@ -1,4 +1,4 @@
1
- import { LitElement, TemplateResult } from "lit";
1
+ import { LitElement, PropertyValues, TemplateResult } from "lit";
2
2
  /**
3
3
  * Tag name of the image card component.
4
4
  */
@@ -11,34 +11,52 @@ declare const EunomiaImageCard_base: import("../../../utils/constructor.type.js"
11
11
  * family.
12
12
  *
13
13
  * Like every card in this family, setting href turns the whole card into a
14
- * link.
14
+ * link. Without href, a native anchor slotted into title links the whole
15
+ * card instead, stretched over its surface, so the link exists in the
16
+ * server-rendered HTML and can be a framework's own link component. When
17
+ * it opens in a new tab, the card shows the external link badge and
18
+ * announces it through the anchor's aria-description.
19
+ *
20
+ * The footer stretches to the card's height, so a card in a grid row can
21
+ * push its last line to the bottom with margin-top auto. It isn't
22
+ * rendered at all while title and description are both empty.
15
23
  *
16
24
  * @slot [image] - The card's image, as a plain image element shown edge to edge, ignoring padding. The alt text is the author's own responsibility: describe the image, or leave it empty when it's purely decorative and the title or description already convey the same information
17
- * @slot [title] - The card's title, below the image. Use a heading element at whatever level fits the surrounding page structure
18
- * @slot [description] - The card's description, below the title
25
+ * @slot [title] - The card's title, below the image. Use a heading element at whatever level fits the surrounding page structure. A native anchor slotted here links the whole card when href is unset. The title typography is inherited, so a composition styles its own parts freely
26
+ * @slot [description] - The card's description, below the title. Its typography is inherited too
19
27
  * @csspart card - The outer box, a link once href is set, a plain container otherwise. Exposed for effects the card's CSS custom properties don't cover, such as a hover accent
28
+ * @csspart footer - The box holding the title and description, below the image
20
29
  * @prop {string} href - The URL the card navigates to. When set, the card renders as a link instead of a plain wrapper
21
30
  * @prop {'_blank' | '_self' | '_parent' | '_top'} target - Where to open the linked URL. Only used when href is set. Opening in a new tab automatically adds an external link badge and announces it to assistive technology
22
31
  * @prop {string} [locale] - The locale used to resolve the "opens in a new tab" announcement. Defaults to the one set with setDefaultLocale, English otherwise
23
32
  * @prop {string} download - The filename used when the linked URL is downloaded instead of navigated to. Only used when href is set
24
- * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically
33
+ * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically. Ignored with a slotted anchor, which takes it instead
25
34
  * @fires {NavigationEvent} eunnavigate - Fired before following href, so a client-side router can intercept the navigation. Not fired for downloads, and cancelable
26
35
  * @cssprop [--card-padding] - Sets the padding of the footer, holding the title and description
36
+ * @cssprop [--card-padding-block] - Sets the vertical padding, as one length applied to both sides. Ignored when --card-padding is set
37
+ * @cssprop [--card-padding-inline] - Sets the horizontal padding, as one length applied to both sides. Ignored when --card-padding is set
27
38
  * @cssprop [--card-gap] - Sets the gap between the title and description
28
39
  * @cssprop [--card-border-radius] - Sets the corner radius of the card
29
40
  * @cssprop [--card-border-color] - Sets the border color of the card
30
41
  * @cssprop [--card-border-width] - Sets the width of the border
31
42
  * @cssprop [--card-background] - Sets the background color of the card
32
43
  * @cssprop [--card-shadow] - Sets a box shadow, none by default
44
+ * @cssprop [--card-hover-shadow] - Sets the box shadow on hover or focus, linked or not. Defaults to the resting shadow
45
+ * @cssprop [--card-overflow] - Sets the overflow of the card, hidden by default so the image follows the rounded corners
33
46
  * @cssprop [--card-hover-transform] - Sets a transform applied on hover or focus, for linked cards only, defaulting to a small lift
34
47
  * @cssprop [--card-hover-border-color] - Sets the border color on hover or focus. Defaults to the primary color when `href` is set, otherwise the border stays exactly as it is at rest — hovering a non-link card gives no color feedback, since there's nothing to click
35
48
  * @cssprop [--card-hover-background] - Sets the background color on hover or focus, linked or not, unchanged by default
36
49
  * @cssprop [--card-hover-duration] - Sets the duration of the hover transition
37
50
  * @cssprop [--card-transition] - Overrides the card's whole hover transition, for example to animate an extra property alongside the built-in ones. Defaults to transform, box shadow, background color, and border color
38
51
  * @cssprop [--card-focus-outline-color] - Sets the focus outline color, for linked cards only
39
- * @cssprop [--image-card-image-height] - Sets the height of the image
52
+ * @cssprop [--image-card-image-height] - Sets the height of the image, 180px by default. Set it to auto to size the image from its aspect ratio instead
53
+ * @cssprop [--image-card-image-aspect-ratio] - Sets the aspect ratio of the image, such as 4 / 3. Only applies once --image-card-image-height is auto
40
54
  * @cssprop [--image-card-title-size] - Sets the font size of the title
55
+ * @cssprop [--image-card-title-weight] - Sets the font weight of the title
56
+ * @cssprop [--image-card-title-color] - Sets the color of the title
41
57
  * @cssprop [--image-card-description-size] - Sets the font size of the description
58
+ * @cssprop [--image-card-description-weight] - Sets the font weight of the description
59
+ * @cssprop [--image-card-description-color] - Sets the color of the description
42
60
  * @cssprop [--card-link-badge-offset] - Sets the inset of the external link badge from the card's top and right edges
43
61
  * @cssprop [--card-link-badge-size] - Sets the diameter of the external link badge
44
62
  * @cssprop [--card-link-badge-background] - Sets the background color of the external link badge
@@ -46,6 +64,7 @@ declare const EunomiaImageCard_base: import("../../../utils/constructor.type.js"
46
64
  * @element eun-image-card
47
65
  */
48
66
  export declare class EunomiaImageCard extends EunomiaImageCard_base {
67
+ #private;
49
68
  /**
50
69
  * Styles to import to the component.
51
70
  *
@@ -54,6 +73,41 @@ export declare class EunomiaImageCard extends EunomiaImageCard_base {
54
73
  * @readonly
55
74
  */
56
75
  static readonly styles: import("lit").CSSResult[];
76
+ /**
77
+ * Whether the slotted anchor has keyboard focus. The ring is drawn on
78
+ * the card itself, since the card clips its content and an outline
79
+ * around the stretched anchor would be cut off.
80
+ * @internal
81
+ */
82
+ private anchorFocusVisible;
83
+ /**
84
+ * The native `<a>` slotted into `title` while `href` is unset, which
85
+ * then links the whole card. Navigation, `target`/`rel` and the new-tab
86
+ * hint are the consumer's own in this mode.
87
+ * @internal
88
+ */
89
+ private get slottedAnchor();
90
+ /**
91
+ * Whether anything is slotted into `title` or `description`. The footer
92
+ * isn't rendered otherwise, so an image-only card has no empty band
93
+ * under its image.
94
+ * @internal
95
+ */
96
+ private get hasFooterContent();
97
+ connectedCallback(): void;
98
+ disconnectedCallback(): void;
99
+ /**
100
+ * Tracks keyboard focus on the slotted anchor.
101
+ * @private
102
+ */
103
+ private handleFocusChange;
104
+ /**
105
+ * Re-renders when a slot changes, so an anchor or a footer slot added or
106
+ * removed after the first render is picked up.
107
+ * @private
108
+ */
109
+ private handleSlotChange;
110
+ protected updated(changed: PropertyValues): void;
57
111
  render(): TemplateResult;
58
112
  }
59
113
  declare global {
@@ -4,9 +4,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement } from "lit/decorators.js";
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _EunomiaImageCard_newTab;
13
+ import { customElement, state } from "lit/decorators.js";
8
14
  import { html, LitElement } from "lit";
15
+ import { classMap } from "lit/directives/class-map.js";
9
16
  import { CardLinkMixin } from "../../../mixins/card-link.mixin.js";
17
+ import { warnIgnoredHostLinkAttributes } from "../../../utils/navigation.utils.js";
18
+ import { NewTabAnchorController } from "../../../utils/new-tab-anchor.controller.js";
10
19
  import { imageCardStyles } from "./image-card.styles.js";
11
20
  import { cardLinkStyles } from "../shared-styles/card-link.styles.js";
12
21
  /**
@@ -20,34 +29,52 @@ export const EunomiaImageCardTagName = "eun-image-card";
20
29
  * family.
21
30
  *
22
31
  * Like every card in this family, setting href turns the whole card into a
23
- * link.
32
+ * link. Without href, a native anchor slotted into title links the whole
33
+ * card instead, stretched over its surface, so the link exists in the
34
+ * server-rendered HTML and can be a framework's own link component. When
35
+ * it opens in a new tab, the card shows the external link badge and
36
+ * announces it through the anchor's aria-description.
37
+ *
38
+ * The footer stretches to the card's height, so a card in a grid row can
39
+ * push its last line to the bottom with margin-top auto. It isn't
40
+ * rendered at all while title and description are both empty.
24
41
  *
25
42
  * @slot [image] - The card's image, as a plain image element shown edge to edge, ignoring padding. The alt text is the author's own responsibility: describe the image, or leave it empty when it's purely decorative and the title or description already convey the same information
26
- * @slot [title] - The card's title, below the image. Use a heading element at whatever level fits the surrounding page structure
27
- * @slot [description] - The card's description, below the title
43
+ * @slot [title] - The card's title, below the image. Use a heading element at whatever level fits the surrounding page structure. A native anchor slotted here links the whole card when href is unset. The title typography is inherited, so a composition styles its own parts freely
44
+ * @slot [description] - The card's description, below the title. Its typography is inherited too
28
45
  * @csspart card - The outer box, a link once href is set, a plain container otherwise. Exposed for effects the card's CSS custom properties don't cover, such as a hover accent
46
+ * @csspart footer - The box holding the title and description, below the image
29
47
  * @prop {string} href - The URL the card navigates to. When set, the card renders as a link instead of a plain wrapper
30
48
  * @prop {'_blank' | '_self' | '_parent' | '_top'} target - Where to open the linked URL. Only used when href is set. Opening in a new tab automatically adds an external link badge and announces it to assistive technology
31
49
  * @prop {string} [locale] - The locale used to resolve the "opens in a new tab" announcement. Defaults to the one set with setDefaultLocale, English otherwise
32
50
  * @prop {string} download - The filename used when the linked URL is downloaded instead of navigated to. Only used when href is set
33
- * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically
51
+ * @attr {string} aria-label - An accessible label that overrides the card content. When the card also opens in a new tab, a note announcing it is appended automatically. Ignored with a slotted anchor, which takes it instead
34
52
  * @fires {NavigationEvent} eunnavigate - Fired before following href, so a client-side router can intercept the navigation. Not fired for downloads, and cancelable
35
53
  * @cssprop [--card-padding] - Sets the padding of the footer, holding the title and description
54
+ * @cssprop [--card-padding-block] - Sets the vertical padding, as one length applied to both sides. Ignored when --card-padding is set
55
+ * @cssprop [--card-padding-inline] - Sets the horizontal padding, as one length applied to both sides. Ignored when --card-padding is set
36
56
  * @cssprop [--card-gap] - Sets the gap between the title and description
37
57
  * @cssprop [--card-border-radius] - Sets the corner radius of the card
38
58
  * @cssprop [--card-border-color] - Sets the border color of the card
39
59
  * @cssprop [--card-border-width] - Sets the width of the border
40
60
  * @cssprop [--card-background] - Sets the background color of the card
41
61
  * @cssprop [--card-shadow] - Sets a box shadow, none by default
62
+ * @cssprop [--card-hover-shadow] - Sets the box shadow on hover or focus, linked or not. Defaults to the resting shadow
63
+ * @cssprop [--card-overflow] - Sets the overflow of the card, hidden by default so the image follows the rounded corners
42
64
  * @cssprop [--card-hover-transform] - Sets a transform applied on hover or focus, for linked cards only, defaulting to a small lift
43
65
  * @cssprop [--card-hover-border-color] - Sets the border color on hover or focus. Defaults to the primary color when `href` is set, otherwise the border stays exactly as it is at rest — hovering a non-link card gives no color feedback, since there's nothing to click
44
66
  * @cssprop [--card-hover-background] - Sets the background color on hover or focus, linked or not, unchanged by default
45
67
  * @cssprop [--card-hover-duration] - Sets the duration of the hover transition
46
68
  * @cssprop [--card-transition] - Overrides the card's whole hover transition, for example to animate an extra property alongside the built-in ones. Defaults to transform, box shadow, background color, and border color
47
69
  * @cssprop [--card-focus-outline-color] - Sets the focus outline color, for linked cards only
48
- * @cssprop [--image-card-image-height] - Sets the height of the image
70
+ * @cssprop [--image-card-image-height] - Sets the height of the image, 180px by default. Set it to auto to size the image from its aspect ratio instead
71
+ * @cssprop [--image-card-image-aspect-ratio] - Sets the aspect ratio of the image, such as 4 / 3. Only applies once --image-card-image-height is auto
49
72
  * @cssprop [--image-card-title-size] - Sets the font size of the title
73
+ * @cssprop [--image-card-title-weight] - Sets the font weight of the title
74
+ * @cssprop [--image-card-title-color] - Sets the color of the title
50
75
  * @cssprop [--image-card-description-size] - Sets the font size of the description
76
+ * @cssprop [--image-card-description-weight] - Sets the font weight of the description
77
+ * @cssprop [--image-card-description-color] - Sets the color of the description
51
78
  * @cssprop [--card-link-badge-offset] - Sets the inset of the external link badge from the card's top and right edges
52
79
  * @cssprop [--card-link-badge-size] - Sets the diameter of the external link badge
53
80
  * @cssprop [--card-link-badge-background] - Sets the background color of the external link badge
@@ -55,21 +82,100 @@ export const EunomiaImageCardTagName = "eun-image-card";
55
82
  * @element eun-image-card
56
83
  */
57
84
  let EunomiaImageCard = class EunomiaImageCard extends CardLinkMixin(LitElement) {
85
+ constructor() {
86
+ super(...arguments);
87
+ /**
88
+ * Whether the slotted anchor has keyboard focus. The ring is drawn on
89
+ * the card itself, since the card clips its content and an outline
90
+ * around the stretched anchor would be cut off.
91
+ * @internal
92
+ */
93
+ this.anchorFocusVisible = false;
94
+ /**
95
+ * Announces the slotted anchor opening in a new tab.
96
+ * @internal
97
+ */
98
+ _EunomiaImageCard_newTab.set(this, new NewTabAnchorController(this, () => this.slottedAnchor, () => this.dictionary.link.opensInNewTab));
99
+ /**
100
+ * Tracks keyboard focus on the slotted anchor.
101
+ * @private
102
+ */
103
+ this.handleFocusChange = () => {
104
+ const anchor = this.slottedAnchor;
105
+ this.anchorFocusVisible =
106
+ !!anchor &&
107
+ anchor === document.activeElement &&
108
+ anchor.matches(":focus-visible");
109
+ };
110
+ /**
111
+ * Re-renders when a slot changes, so an anchor or a footer slot added or
112
+ * removed after the first render is picked up.
113
+ * @private
114
+ */
115
+ this.handleSlotChange = () => {
116
+ this.requestUpdate();
117
+ };
118
+ }
119
+ /**
120
+ * The native `<a>` slotted into `title` while `href` is unset, which
121
+ * then links the whole card. Navigation, `target`/`rel` and the new-tab
122
+ * hint are the consumer's own in this mode.
123
+ * @internal
124
+ */
125
+ get slottedAnchor() {
126
+ return this.href ? null : this.querySelector(':scope > a[slot="title"]');
127
+ }
128
+ /**
129
+ * Whether anything is slotted into `title` or `description`. The footer
130
+ * isn't rendered otherwise, so an image-only card has no empty band
131
+ * under its image.
132
+ * @internal
133
+ */
134
+ get hasFooterContent() {
135
+ return !!this.querySelector(':scope > [slot="title"], :scope > [slot="description"]');
136
+ }
137
+ connectedCallback() {
138
+ super.connectedCallback();
139
+ this.addEventListener("focusin", this.handleFocusChange);
140
+ this.addEventListener("focusout", this.handleFocusChange);
141
+ }
142
+ disconnectedCallback() {
143
+ this.removeEventListener("focusin", this.handleFocusChange);
144
+ this.removeEventListener("focusout", this.handleFocusChange);
145
+ super.disconnectedCallback();
146
+ }
147
+ updated(changed) {
148
+ super.updated(changed);
149
+ if (this.slottedAnchor) {
150
+ warnIgnoredHostLinkAttributes(this);
151
+ }
152
+ }
58
153
  render() {
59
154
  const inner = html `
60
155
  <slot name="image"></slot>
61
- <div id="footer">
62
- <slot name="title"></slot>
63
- <slot name="description"></slot>
156
+ <div id="footer" part="footer" ?hidden=${!this.hasFooterContent}>
157
+ <slot name="title" @slotchange=${this.handleSlotChange}></slot>
158
+ <slot name="description" @slotchange=${this.handleSlotChange}></slot>
64
159
  </div>
65
- ${this.renderExternalLinkBadge()}
160
+ ${this.renderExternalLinkBadge(__classPrivateFieldGet(this, _EunomiaImageCard_newTab, "f").isBlank)}
66
161
  `;
67
162
  if (this.href) {
68
163
  return this.renderCardLink("card", inner);
69
164
  }
70
- return html `<div id="card" part="card">${inner}</div>`;
165
+ const anchored = !!this.slottedAnchor;
166
+ return html `<div
167
+ id="card"
168
+ part="card"
169
+ class=${classMap({
170
+ "slotted-link": anchored,
171
+ "focus-visible": anchored && this.anchorFocusVisible,
172
+ })}
173
+ >
174
+ ${inner}
175
+ </div>`;
71
176
  }
72
177
  };
178
+ _EunomiaImageCard_newTab = new WeakMap();
73
179
  /**
74
180
  * Styles to import to the component.
75
181
  *
@@ -78,6 +184,9 @@ let EunomiaImageCard = class EunomiaImageCard extends CardLinkMixin(LitElement)
78
184
  * @readonly
79
185
  */
80
186
  EunomiaImageCard.styles = [imageCardStyles, cardLinkStyles];
187
+ __decorate([
188
+ state()
189
+ ], EunomiaImageCard.prototype, "anchorFocusVisible", void 0);
81
190
  EunomiaImageCard = __decorate([
82
191
  customElement(EunomiaImageCardTagName)
83
192
  ], EunomiaImageCard);