@livenetworks/ashlar 2.2.0 → 2.2.2

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 (360) hide show
  1. package/assets/brand/android-chrome-192x192.png +0 -0
  2. package/assets/brand/android-chrome-512x512.png +0 -0
  3. package/assets/brand/apple-touch-icon.png +0 -0
  4. package/assets/brand/favicon-16x16.png +0 -0
  5. package/assets/brand/favicon-32x32.png +0 -0
  6. package/assets/brand/favicon-48x48.png +0 -0
  7. package/assets/brand/favicon-dark-128x128.png +0 -0
  8. package/assets/brand/favicon-dark-16x16.png +0 -0
  9. package/assets/brand/favicon-dark-180x180.png +0 -0
  10. package/assets/brand/favicon-dark-192x192.png +0 -0
  11. package/assets/brand/favicon-dark-256x256.png +0 -0
  12. package/assets/brand/favicon-dark-32x32.png +0 -0
  13. package/assets/brand/favicon-dark-48x48.png +0 -0
  14. package/assets/brand/favicon-dark-512x512.png +0 -0
  15. package/assets/brand/favicon-dark-64x64.png +0 -0
  16. package/assets/brand/favicon-dark.ico +0 -0
  17. package/assets/brand/favicon-dark.png +0 -0
  18. package/assets/brand/favicon-light-128x128.png +0 -0
  19. package/assets/brand/favicon-light-16x16.png +0 -0
  20. package/assets/brand/favicon-light-180x180.png +0 -0
  21. package/assets/brand/favicon-light-192x192.png +0 -0
  22. package/assets/brand/favicon-light-256x256.png +0 -0
  23. package/assets/brand/favicon-light-32x32.png +0 -0
  24. package/assets/brand/favicon-light-48x48.png +0 -0
  25. package/assets/brand/favicon-light-512x512.png +0 -0
  26. package/assets/brand/favicon-light-64x64.png +0 -0
  27. package/assets/brand/favicon-light.ico +0 -0
  28. package/assets/brand/favicon-light.png +0 -0
  29. package/assets/brand/favicon.ico +0 -0
  30. package/assets/brand/favicon.png +0 -0
  31. package/assets/brand/favicon.svg +12 -0
  32. package/assets/brand/ln-ashlar-emblem-dark-128.png +0 -0
  33. package/assets/brand/ln-ashlar-emblem-dark-16.png +0 -0
  34. package/assets/brand/ln-ashlar-emblem-dark-256.png +0 -0
  35. package/assets/brand/ln-ashlar-emblem-dark-32.png +0 -0
  36. package/assets/brand/ln-ashlar-emblem-dark-64.png +0 -0
  37. package/assets/brand/ln-ashlar-emblem-dark.png +0 -0
  38. package/assets/brand/ln-ashlar-emblem-light-128.png +0 -0
  39. package/assets/brand/ln-ashlar-emblem-light-16.png +0 -0
  40. package/assets/brand/ln-ashlar-emblem-light-256.png +0 -0
  41. package/assets/brand/ln-ashlar-emblem-light-32.png +0 -0
  42. package/assets/brand/ln-ashlar-emblem-light-64.png +0 -0
  43. package/assets/brand/ln-ashlar-emblem-light.png +0 -0
  44. package/assets/brand/ln-ashlar-logo-dark-128.png +0 -0
  45. package/assets/brand/ln-ashlar-logo-dark-256.png +0 -0
  46. package/assets/brand/ln-ashlar-logo-dark-512.png +0 -0
  47. package/assets/brand/ln-ashlar-logo-dark.png +0 -0
  48. package/assets/brand/ln-ashlar-logo-light-128.png +0 -0
  49. package/assets/brand/ln-ashlar-logo-light-256.png +0 -0
  50. package/assets/brand/ln-ashlar-logo-light-512.png +0 -0
  51. package/assets/brand/ln-ashlar-logo-light.png +0 -0
  52. package/assets/brand/site.webmanifest +41 -0
  53. package/assets/brand/source/ln-ashlar-icon-dark-1024.png +0 -0
  54. package/assets/brand/source/ln-ashlar-icon-dark-uncropped-1024.png +0 -0
  55. package/assets/brand/source/ln-ashlar-icon-light-1024.png +0 -0
  56. package/assets/brand/source/ln-ashlar-icon-light-uncropped-1024.png +0 -0
  57. package/assets/flags/ad.svg +150 -0
  58. package/assets/flags/ae.svg +6 -0
  59. package/assets/flags/af.svg +81 -0
  60. package/assets/flags/ag.svg +14 -0
  61. package/assets/flags/ai.svg +29 -0
  62. package/assets/flags/al.svg +5 -0
  63. package/assets/flags/am.svg +5 -0
  64. package/assets/flags/ao.svg +13 -0
  65. package/assets/flags/aq.svg +5 -0
  66. package/assets/flags/ar.svg +32 -0
  67. package/assets/flags/arab.svg +109 -0
  68. package/assets/flags/as.svg +72 -0
  69. package/assets/flags/asean.svg +13 -0
  70. package/assets/flags/at.svg +4 -0
  71. package/assets/flags/au.svg +8 -0
  72. package/assets/flags/aw.svg +186 -0
  73. package/assets/flags/ax.svg +18 -0
  74. package/assets/flags/az.svg +8 -0
  75. package/assets/flags/ba.svg +12 -0
  76. package/assets/flags/bb.svg +6 -0
  77. package/assets/flags/bd.svg +4 -0
  78. package/assets/flags/be.svg +7 -0
  79. package/assets/flags/bf.svg +7 -0
  80. package/assets/flags/bg.svg +5 -0
  81. package/assets/flags/bh.svg +4 -0
  82. package/assets/flags/bi.svg +15 -0
  83. package/assets/flags/bj.svg +14 -0
  84. package/assets/flags/bl.svg +5 -0
  85. package/assets/flags/bm.svg +97 -0
  86. package/assets/flags/bn.svg +36 -0
  87. package/assets/flags/bo.svg +673 -0
  88. package/assets/flags/bq.svg +5 -0
  89. package/assets/flags/br.svg +45 -0
  90. package/assets/flags/bs.svg +13 -0
  91. package/assets/flags/bt.svg +89 -0
  92. package/assets/flags/bv.svg +13 -0
  93. package/assets/flags/bw.svg +7 -0
  94. package/assets/flags/by.svg +18 -0
  95. package/assets/flags/bz.svg +145 -0
  96. package/assets/flags/ca.svg +4 -0
  97. package/assets/flags/cc.svg +19 -0
  98. package/assets/flags/cd.svg +5 -0
  99. package/assets/flags/cefta.svg +13 -0
  100. package/assets/flags/cf.svg +15 -0
  101. package/assets/flags/cg.svg +12 -0
  102. package/assets/flags/ch.svg +9 -0
  103. package/assets/flags/ci.svg +7 -0
  104. package/assets/flags/ck.svg +9 -0
  105. package/assets/flags/cl.svg +13 -0
  106. package/assets/flags/cm.svg +15 -0
  107. package/assets/flags/cn.svg +11 -0
  108. package/assets/flags/co.svg +7 -0
  109. package/assets/flags/cp.svg +7 -0
  110. package/assets/flags/cr.svg +7 -0
  111. package/assets/flags/cu.svg +13 -0
  112. package/assets/flags/cv.svg +13 -0
  113. package/assets/flags/cw.svg +14 -0
  114. package/assets/flags/cx.svg +15 -0
  115. package/assets/flags/cy.svg +6 -0
  116. package/assets/flags/cz.svg +5 -0
  117. package/assets/flags/de.svg +5 -0
  118. package/assets/flags/dg.svg +130 -0
  119. package/assets/flags/dj.svg +13 -0
  120. package/assets/flags/dk.svg +5 -0
  121. package/assets/flags/dm.svg +152 -0
  122. package/assets/flags/do.svg +121 -0
  123. package/assets/flags/dz.svg +5 -0
  124. package/assets/flags/eac.svg +48 -0
  125. package/assets/flags/ec.svg +138 -0
  126. package/assets/flags/ee.svg +5 -0
  127. package/assets/flags/eg.svg +38 -0
  128. package/assets/flags/eh.svg +16 -0
  129. package/assets/flags/er.svg +8 -0
  130. package/assets/flags/es-ct.svg +4 -0
  131. package/assets/flags/es-ga.svg +187 -0
  132. package/assets/flags/es-pv.svg +5 -0
  133. package/assets/flags/es.svg +544 -0
  134. package/assets/flags/et.svg +14 -0
  135. package/assets/flags/eu.svg +28 -0
  136. package/assets/flags/fi.svg +5 -0
  137. package/assets/flags/fj.svg +120 -0
  138. package/assets/flags/fk.svg +90 -0
  139. package/assets/flags/fm.svg +11 -0
  140. package/assets/flags/fo.svg +12 -0
  141. package/assets/flags/fr.svg +5 -0
  142. package/assets/flags/ga.svg +7 -0
  143. package/assets/flags/gb-eng.svg +5 -0
  144. package/assets/flags/gb-nir.svg +132 -0
  145. package/assets/flags/gb-sct.svg +4 -0
  146. package/assets/flags/gb-wls.svg +9 -0
  147. package/assets/flags/gb.svg +7 -0
  148. package/assets/flags/gd.svg +27 -0
  149. package/assets/flags/ge.svg +6 -0
  150. package/assets/flags/gf.svg +5 -0
  151. package/assets/flags/gg.svg +9 -0
  152. package/assets/flags/gh.svg +6 -0
  153. package/assets/flags/gi.svg +32 -0
  154. package/assets/flags/gl.svg +4 -0
  155. package/assets/flags/gm.svg +14 -0
  156. package/assets/flags/gn.svg +7 -0
  157. package/assets/flags/gp.svg +5 -0
  158. package/assets/flags/gq.svg +23 -0
  159. package/assets/flags/gr.svg +16 -0
  160. package/assets/flags/gs.svg +133 -0
  161. package/assets/flags/gt.svg +204 -0
  162. package/assets/flags/gu.svg +19 -0
  163. package/assets/flags/gw.svg +13 -0
  164. package/assets/flags/gy.svg +9 -0
  165. package/assets/flags/hk.svg +8 -0
  166. package/assets/flags/hm.svg +8 -0
  167. package/assets/flags/hn.svg +18 -0
  168. package/assets/flags/hr.svg +58 -0
  169. package/assets/flags/ht.svg +116 -0
  170. package/assets/flags/hu.svg +7 -0
  171. package/assets/flags/ic.svg +7 -0
  172. package/assets/flags/id.svg +4 -0
  173. package/assets/flags/ie.svg +7 -0
  174. package/assets/flags/il.svg +14 -0
  175. package/assets/flags/im.svg +36 -0
  176. package/assets/flags/in.svg +25 -0
  177. package/assets/flags/io.svg +130 -0
  178. package/assets/flags/iq.svg +10 -0
  179. package/assets/flags/ir.svg +219 -0
  180. package/assets/flags/is.svg +12 -0
  181. package/assets/flags/it.svg +7 -0
  182. package/assets/flags/je.svg +62 -0
  183. package/assets/flags/jm.svg +8 -0
  184. package/assets/flags/jo.svg +16 -0
  185. package/assets/flags/jp.svg +11 -0
  186. package/assets/flags/ke.svg +23 -0
  187. package/assets/flags/kg.svg +4 -0
  188. package/assets/flags/kh.svg +61 -0
  189. package/assets/flags/ki.svg +36 -0
  190. package/assets/flags/km.svg +16 -0
  191. package/assets/flags/kn.svg +14 -0
  192. package/assets/flags/kp.svg +15 -0
  193. package/assets/flags/kr.svg +24 -0
  194. package/assets/flags/kw.svg +13 -0
  195. package/assets/flags/ky.svg +103 -0
  196. package/assets/flags/kz.svg +36 -0
  197. package/assets/flags/la.svg +12 -0
  198. package/assets/flags/lb.svg +15 -0
  199. package/assets/flags/lc.svg +8 -0
  200. package/assets/flags/li.svg +43 -0
  201. package/assets/flags/lk.svg +22 -0
  202. package/assets/flags/lr.svg +14 -0
  203. package/assets/flags/ls.svg +8 -0
  204. package/assets/flags/lt.svg +7 -0
  205. package/assets/flags/lu.svg +5 -0
  206. package/assets/flags/lv.svg +6 -0
  207. package/assets/flags/ly.svg +13 -0
  208. package/assets/flags/ma.svg +4 -0
  209. package/assets/flags/mc.svg +6 -0
  210. package/assets/flags/md.svg +70 -0
  211. package/assets/flags/me.svg +116 -0
  212. package/assets/flags/mf.svg +5 -0
  213. package/assets/flags/mg.svg +7 -0
  214. package/assets/flags/mh.svg +7 -0
  215. package/assets/flags/mk.svg +5 -0
  216. package/assets/flags/ml.svg +7 -0
  217. package/assets/flags/mm.svg +12 -0
  218. package/assets/flags/mn.svg +14 -0
  219. package/assets/flags/mo.svg +9 -0
  220. package/assets/flags/mp.svg +86 -0
  221. package/assets/flags/mq.svg +5 -0
  222. package/assets/flags/mr.svg +6 -0
  223. package/assets/flags/ms.svg +29 -0
  224. package/assets/flags/mt.svg +58 -0
  225. package/assets/flags/mu.svg +8 -0
  226. package/assets/flags/mv.svg +6 -0
  227. package/assets/flags/mw.svg +10 -0
  228. package/assets/flags/mx.svg +382 -0
  229. package/assets/flags/my.svg +26 -0
  230. package/assets/flags/mz.svg +21 -0
  231. package/assets/flags/na.svg +16 -0
  232. package/assets/flags/nc.svg +13 -0
  233. package/assets/flags/ne.svg +6 -0
  234. package/assets/flags/nf.svg +9 -0
  235. package/assets/flags/ng.svg +6 -0
  236. package/assets/flags/ni.svg +129 -0
  237. package/assets/flags/nl.svg +5 -0
  238. package/assets/flags/no.svg +7 -0
  239. package/assets/flags/np.svg +13 -0
  240. package/assets/flags/nr.svg +12 -0
  241. package/assets/flags/nu.svg +10 -0
  242. package/assets/flags/nz.svg +36 -0
  243. package/assets/flags/om.svg +115 -0
  244. package/assets/flags/pa.svg +14 -0
  245. package/assets/flags/pc.svg +33 -0
  246. package/assets/flags/pe.svg +4 -0
  247. package/assets/flags/pf.svg +19 -0
  248. package/assets/flags/pg.svg +9 -0
  249. package/assets/flags/ph.svg +6 -0
  250. package/assets/flags/pk.svg +15 -0
  251. package/assets/flags/pl.svg +6 -0
  252. package/assets/flags/pm.svg +5 -0
  253. package/assets/flags/pn.svg +53 -0
  254. package/assets/flags/pr.svg +13 -0
  255. package/assets/flags/ps.svg +6 -0
  256. package/assets/flags/pt.svg +57 -0
  257. package/assets/flags/pw.svg +11 -0
  258. package/assets/flags/py.svg +157 -0
  259. package/assets/flags/qa.svg +4 -0
  260. package/assets/flags/re.svg +5 -0
  261. package/assets/flags/ro.svg +7 -0
  262. package/assets/flags/rs.svg +292 -0
  263. package/assets/flags/ru.svg +5 -0
  264. package/assets/flags/rw.svg +13 -0
  265. package/assets/flags/sa.svg +25 -0
  266. package/assets/flags/sb.svg +13 -0
  267. package/assets/flags/sc.svg +7 -0
  268. package/assets/flags/sd.svg +13 -0
  269. package/assets/flags/se.svg +4 -0
  270. package/assets/flags/sg.svg +13 -0
  271. package/assets/flags/sh-ac.svg +689 -0
  272. package/assets/flags/sh-hl.svg +164 -0
  273. package/assets/flags/sh-ta.svg +76 -0
  274. package/assets/flags/sh.svg +7 -0
  275. package/assets/flags/si.svg +18 -0
  276. package/assets/flags/sj.svg +7 -0
  277. package/assets/flags/sk.svg +9 -0
  278. package/assets/flags/sl.svg +7 -0
  279. package/assets/flags/sm.svg +75 -0
  280. package/assets/flags/sn.svg +8 -0
  281. package/assets/flags/so.svg +11 -0
  282. package/assets/flags/sr.svg +6 -0
  283. package/assets/flags/ss.svg +8 -0
  284. package/assets/flags/st.svg +16 -0
  285. package/assets/flags/sv.svg +593 -0
  286. package/assets/flags/sx.svg +56 -0
  287. package/assets/flags/sy.svg +6 -0
  288. package/assets/flags/sz.svg +34 -0
  289. package/assets/flags/tc.svg +50 -0
  290. package/assets/flags/td.svg +7 -0
  291. package/assets/flags/tf.svg +15 -0
  292. package/assets/flags/tg.svg +14 -0
  293. package/assets/flags/th.svg +7 -0
  294. package/assets/flags/tj.svg +22 -0
  295. package/assets/flags/tk.svg +5 -0
  296. package/assets/flags/tl.svg +13 -0
  297. package/assets/flags/tm.svg +204 -0
  298. package/assets/flags/tn.svg +4 -0
  299. package/assets/flags/to.svg +10 -0
  300. package/assets/flags/tr.svg +8 -0
  301. package/assets/flags/tt.svg +5 -0
  302. package/assets/flags/tv.svg +9 -0
  303. package/assets/flags/tw.svg +34 -0
  304. package/assets/flags/tz.svg +13 -0
  305. package/assets/flags/ua.svg +6 -0
  306. package/assets/flags/ug.svg +30 -0
  307. package/assets/flags/um.svg +9 -0
  308. package/assets/flags/un.svg +16 -0
  309. package/assets/flags/us.svg +9 -0
  310. package/assets/flags/uy.svg +28 -0
  311. package/assets/flags/uz.svg +30 -0
  312. package/assets/flags/va.svg +190 -0
  313. package/assets/flags/vc.svg +8 -0
  314. package/assets/flags/ve.svg +26 -0
  315. package/assets/flags/vg.svg +59 -0
  316. package/assets/flags/vi.svg +28 -0
  317. package/assets/flags/vn.svg +11 -0
  318. package/assets/flags/vu.svg +21 -0
  319. package/assets/flags/wf.svg +5 -0
  320. package/assets/flags/ws.svg +7 -0
  321. package/assets/flags/xk.svg +5 -0
  322. package/assets/flags/xx.svg +4 -0
  323. package/assets/flags/ye.svg +7 -0
  324. package/assets/flags/yt.svg +5 -0
  325. package/assets/flags/za.svg +17 -0
  326. package/assets/flags/zm.svg +27 -0
  327. package/assets/flags/zw.svg +21 -0
  328. package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
  329. package/components/ln-date/ln-date.js +1 -1
  330. package/components/ln-debug/ln-debug.js +1 -1
  331. package/components/ln-debug/src/generated-attributes.js +306 -304
  332. package/components/ln-external-links/ln-external-links.js +1 -1
  333. package/components/ln-filter/ln-filter.js +1 -1
  334. package/components/ln-obfuscator/ln-obfuscator.js +1 -1
  335. package/components/ln-sort/ln-sort.js +1 -1
  336. package/components/ln-table/ln-table.js +1 -1
  337. package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
  338. package/components/ln-toast/ln-toast.js +1 -1
  339. package/components/ln-translations/README.md +202 -120
  340. package/components/ln-translations/ln-translations.js +1 -1
  341. package/components/ln-translations/ln-translations.schema.json +136 -120
  342. package/components/ln-translations/src/ln-translations.js +354 -295
  343. package/components/ln-translations/src/translations-model.js +221 -0
  344. package/components/ln-validate/ln-validate.js +1 -1
  345. package/ln-ashlar.html-data.json +1832 -1824
  346. package/package.json +2 -1
  347. package/theme/components/_translations.scss +118 -111
  348. package/theme/config/_breakpoints.scss +8 -0
  349. package/theme/config/mixins/_app-shell.scss +14 -0
  350. package/theme/config/mixins/_card.scss +7 -4
  351. package/theme/config/mixins/_count.scss +48 -0
  352. package/theme/config/mixins/_dropdown.scss +5 -1
  353. package/theme/config/mixins/_index.scss +1 -0
  354. package/theme/config/mixins/_nav.scss +3 -11
  355. package/theme/config/mixins/_popover.scss +12 -1
  356. package/theme/config/mixins/_translations.scss +126 -124
  357. package/theme/presentation/_effects.scss +68 -0
  358. package/theme/presentation/_navbar.scss +72 -1
  359. package/theme/presentation/_typography.scss +13 -0
  360. package/web-types.json +2365 -2351
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livenetworks/ashlar",
3
- "version": "2.2.0",
3
+ "version": "2.2.2",
4
4
  "description": "LiveNetworks unified frontend library - CSS framework and vanilla JS components",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "author": "Live Networks",
@@ -29,6 +29,7 @@
29
29
  "dist/",
30
30
  "theme/",
31
31
  "components/",
32
+ "assets/",
32
33
  "ln-ashlar.html-data.json",
33
34
  "web-types.json"
34
35
  ],
@@ -1,111 +1,118 @@
1
- @use '../config/mixins' as *;
2
-
3
- [data-ln-translatable-lang] {
4
- @include translations-flag-input;
5
- }
6
-
7
- [data-ln-toggle] button[data-ln-translations-lang] {
8
- @include translations-dropdown-flag;
9
- }
10
-
11
- // ─── Flag icons per language ─────────────────────────────────────
12
- // Lang code (ISO 639-1) -> country flag (ISO 3166-1 alpha-2).
13
-
14
- $lang-flag-overrides: (
15
- en: 'gb',
16
- sq: 'al',
17
- sr: 'rs',
18
- ja: 'jp',
19
- ko: 'kr',
20
- zh: 'cn',
21
- cs: 'cz',
22
- da: 'dk',
23
- el: 'gr',
24
- he: 'il',
25
- hi: 'in',
26
- uk: 'ua',
27
- vi: 'vn',
28
- sv: 'se',
29
- nb: 'no',
30
- nn: 'no',
31
- ca: 'es',
32
- eu: 'es',
33
- gl: 'es',
34
- fa: 'ir',
35
- ar: 'sa',
36
- ms: 'my',
37
- sl: 'si',
38
- et: 'ee',
39
- ka: 'ge',
40
- hy: 'am',
41
- be: 'by',
42
- bs: 'ba',
43
- hr: 'hr',
44
- ga: 'ie',
45
- cy: 'gb',
46
- sw: 'ke',
47
- bn: 'bd',
48
- ur: 'pk',
49
- ta: 'lk',
50
- te: 'in',
51
- ml: 'in',
52
- kn: 'in',
53
- mr: 'in',
54
- gu: 'in',
55
- pa: 'in',
56
- ne: 'np',
57
- km: 'kh',
58
- lo: 'la',
59
- my: 'mm',
60
- af: 'za',
61
- zu: 'za',
62
- );
63
-
64
- $lang-auto: mk, de, fr, it, bg, pt, ro, nl, pl, fi, hu, lt, lv, tr, az, is, mt, lb, no, ru, th, id;
65
-
66
- @each $lang, $country in $lang-flag-overrides {
67
- [data-ln-translatable-lang="#{$lang}"],
68
- [data-ln-translations-active] [data-ln-translations-lang="#{$lang}"],
69
- [data-ln-toggle] button[data-ln-translations-lang="#{$lang}"]::before {
70
- background-image: url('/assets/flags/#{$country}.svg');
71
- }
72
- }
73
-
74
- @each $lang in $lang-auto {
75
- [data-ln-translatable-lang="#{$lang}"],
76
- [data-ln-translations-active] [data-ln-translations-lang="#{$lang}"],
77
- [data-ln-toggle] button[data-ln-translations-lang="#{$lang}"]::before {
78
- background-image: url('/assets/flags/#{$lang}.svg');
79
- }
80
- }
81
-
82
- // ─── Header actions ──────────────────────────────────────────────
83
-
84
- .ln-translations__actions {
85
- @include translations-actions;
86
- }
87
-
88
- [data-ln-translations-active] {
89
- @include translations-active-list;
90
- }
91
-
92
- [data-ln-translations-active] p {
93
- @include translations-badge;
94
- }
95
-
96
- [data-ln-translations-active] button {
97
- @include translations-badge-remove;
98
- }
99
-
100
- [data-ln-translations-add] {
101
- @include translations-add-button;
102
- }
103
-
104
- // ─── Reduced motion ─────────────────────────────────────────────
105
-
106
- @media (prefers-reduced-motion: reduce) {
107
- [data-ln-translations-add],
108
- [data-ln-translations-active] button {
109
- transition: none;
110
- }
111
- }
1
+ @use '../config/mixins' as *;
2
+
3
+ // Configurable base path for flags (resolves relative to compiled CSS)
4
+ $flag-base-path: '../../assets/flags' !default;
5
+
6
+ [data-ln-translatable-lang] {
7
+ @include translations-flag-input;
8
+ }
9
+
10
+ textarea[data-ln-translatable-lang] {
11
+ background-position: var(--size-sm-up) calc(var(--size-sm) + (var(--size-lg) - var(--size-md-up) * 3 / 4) / 2);
12
+ }
13
+
14
+ button[data-ln-translations-lang] {
15
+ @include translations-dropdown-flag;
16
+ }
17
+
18
+ // ─── Flag icons per language ─────────────────────────────────────
19
+ // Lang code (ISO 639-1) -> country flag (ISO 3166-1 alpha-2).
20
+
21
+ $lang-flag-overrides: (
22
+ en: 'gb',
23
+ sq: 'al',
24
+ sr: 'rs',
25
+ ja: 'jp',
26
+ ko: 'kr',
27
+ zh: 'cn',
28
+ cs: 'cz',
29
+ da: 'dk',
30
+ el: 'gr',
31
+ he: 'il',
32
+ hi: 'in',
33
+ uk: 'ua',
34
+ vi: 'vn',
35
+ sv: 'se',
36
+ nb: 'no',
37
+ nn: 'no',
38
+ ca: 'es',
39
+ eu: 'es',
40
+ gl: 'es',
41
+ fa: 'ir',
42
+ ar: 'sa',
43
+ ms: 'my',
44
+ sl: 'si',
45
+ et: 'ee',
46
+ ka: 'ge',
47
+ hy: 'am',
48
+ be: 'by',
49
+ bs: 'ba',
50
+ hr: 'hr',
51
+ ga: 'ie',
52
+ cy: 'gb',
53
+ sw: 'ke',
54
+ bn: 'bd',
55
+ ur: 'pk',
56
+ ta: 'lk',
57
+ te: 'in',
58
+ ml: 'in',
59
+ kn: 'in',
60
+ mr: 'in',
61
+ gu: 'in',
62
+ pa: 'in',
63
+ ne: 'np',
64
+ km: 'kh',
65
+ lo: 'la',
66
+ my: 'mm',
67
+ af: 'za',
68
+ zu: 'za',
69
+ );
70
+
71
+ $lang-auto: mk, de, fr, it, bg, pt, ro, nl, pl, fi, hu, lt, lv, tr, az, is, mt, lb, no, ru, th, id;
72
+
73
+ @each $lang, $country in $lang-flag-overrides {
74
+ [data-ln-translatable-lang="#{$lang}"],
75
+ [data-ln-translations-active] [data-ln-translations-lang="#{$lang}"],
76
+ button[data-ln-translations-lang="#{$lang}"]::before {
77
+ background-image: var(--ln-flag-#{$lang}, url('#{$flag-base-path}/#{$country}.svg'));
78
+ }
79
+ }
80
+
81
+ @each $lang in $lang-auto {
82
+ [data-ln-translatable-lang="#{$lang}"],
83
+ [data-ln-translations-active] [data-ln-translations-lang="#{$lang}"],
84
+ button[data-ln-translations-lang="#{$lang}"]::before {
85
+ background-image: var(--ln-flag-#{$lang}, url('#{$flag-base-path}/#{$lang}.svg'));
86
+ }
87
+ }
88
+
89
+ // ─── Header actions ──────────────────────────────────────────────
90
+
91
+ .ln-translations__actions {
92
+ @include translations-actions;
93
+ }
94
+
95
+ [data-ln-translations-active] {
96
+ @include translations-active-list;
97
+ }
98
+
99
+ [data-ln-translations-active] p {
100
+ @include translations-badge;
101
+ }
102
+
103
+ [data-ln-translations-active] button {
104
+ @include translations-badge-remove;
105
+ }
106
+
107
+ [data-ln-translations-add] {
108
+ @include translations-add-button;
109
+ }
110
+
111
+ // ─── Reduced motion ─────────────────────────────────────────────
112
+
113
+ @media (prefers-reduced-motion: reduce) {
114
+ [data-ln-translations-add],
115
+ [data-ln-translations-active] button {
116
+ transition: none;
117
+ }
118
+ }
@@ -28,6 +28,12 @@ $bp-xl: 1280px;
28
28
  $bp-2xl: 1536px;
29
29
  $bp-3xl: 1920px;
30
30
 
31
+ // -----------------------------------------------------------------------
32
+ // Presentation navbar collapse (for @media — presentation/_navbar.scss)
33
+ // -----------------------------------------------------------------------
34
+ // Below this width .site-header hides .nav-menu and shows .menu-toggle.
35
+ $bp-nav: 820px;
36
+
31
37
  // -----------------------------------------------------------------------
32
38
  // Container-query breakpoints (for @container — components)
33
39
  // -----------------------------------------------------------------------
@@ -46,6 +52,7 @@ $cq-wide: 1120px;
46
52
  --bp-xl: #{$bp-xl};
47
53
  --bp-2xl: #{$bp-2xl};
48
54
  --bp-3xl: #{$bp-3xl};
55
+ --bp-nav: #{$bp-nav};
49
56
 
50
57
  --cq-narrow: #{$cq-narrow};
51
58
  --cq-compact: #{$cq-compact};
@@ -65,6 +72,7 @@ $breakpoints: (
65
72
  xl: $bp-xl,
66
73
  2xl: $bp-2xl,
67
74
  3xl: $bp-3xl,
75
+ nav: $bp-nav,
68
76
  narrow: $cq-narrow,
69
77
  compact: $cq-compact,
70
78
  medium: $cq-medium,
@@ -12,6 +12,7 @@
12
12
  @use 'interaction' as *;
13
13
  @use 'sidebar' as *;
14
14
  @use 'card' as *;
15
+ @use 'count' as *;
15
16
 
16
17
  // ─── App Shell ──────────────────────────────────────────────────────────────
17
18
  // Mobile-ready application shell: fixed header, sidebar drawer, scrim overlay.
@@ -159,6 +160,19 @@
159
160
  border: 0;
160
161
  }
161
162
  }
163
+
164
+ // Unread counter — <data value="3">3</data> as a direct child,
165
+ // pinned over the corner. Solid accent; tone via status class
166
+ // (<data value="3" class="error">3</data>).
167
+ &:has(> data) {
168
+ @include relative;
169
+ }
170
+
171
+ > data {
172
+ @include count;
173
+ @include count-solid;
174
+ @include count-overlay;
175
+ }
162
176
  }
163
177
  }
164
178
 
@@ -30,13 +30,16 @@
30
30
 
31
31
  // Only whole-card links/buttons signal interaction. Passive containers
32
32
  // must not respond merely because the pointer crosses their content.
33
+ // A whole-card link is the card's ONLY child (`> a:only-child`); a link
34
+ // that sits next to other content (a "Read more" under a paragraph) is
35
+ // an ordinary link and leaves the card alone.
33
36
  &:is(a, button):hover:not(:disabled),
34
- &:has(> a:hover) {
37
+ &:has(> a:only-child:hover) {
35
38
  --color-border: color-mix(in srgb, var(--color-accent) 35%, transparent);
36
39
  }
37
40
 
38
41
  &:is(a, button):focus-visible,
39
- &:has(> a:focus-visible) {
42
+ &:has(> a:only-child:focus-visible) {
40
43
  @include focus-ring;
41
44
  }
42
45
 
@@ -56,7 +59,7 @@
56
59
  }
57
60
 
58
61
  // Whole-card-as-link: <a> wraps card content and fills the card.
59
- > a {
62
+ > a:only-child {
60
63
  @include flex-col;
61
64
  @include flex-1;
62
65
  text-decoration: none;
@@ -263,7 +266,7 @@
263
266
 
264
267
  @mixin _card-accent-base {
265
268
  &:is(a, button):hover:not(:disabled),
266
- &:has(> a:hover) {
269
+ &:has(> a:only-child:hover) {
267
270
  background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
268
271
  }
269
272
  }
@@ -0,0 +1,48 @@
1
+ @use 'display' as *;
2
+ @use 'typography' as *;
3
+ @use 'position' as *;
4
+
5
+ // ─── Count ──────────────────────────────────────────────────────────────────
6
+ // Numeric counter pill — unread items, queue sizes, list totals. The
7
+ // element is <data value="24">24</data>: the value attribute carries the
8
+ // machine-readable number, the text the formatted one.
9
+ //
10
+ // @include count; ← neutral pill, tinted from --color-fg
11
+ // @include count-solid; ← delta: solid accent fill. Tone follows the
12
+ // semantic-color cascade — <data class="error">
13
+ // @include count-overlay; ← delta: pinned over the top-end corner of the
14
+ // nearest positioned ancestor (icon buttons).
15
+ // The host must be positioned.
16
+ //
17
+ // Bound structurally by @mixin nav (a > data) and @mixin app-header-actions
18
+ // (button > data).
19
+ // ────────────────────────────────────────────────────────────────────────────
20
+
21
+ @mixin count {
22
+ @include flex-shrink-0;
23
+ padding: 0 var(--size-xs-up);
24
+ min-width: 1.5rem;
25
+ text-align: center;
26
+ border-radius: var(--radius-full);
27
+ @include text-xs;
28
+ @include font-semibold;
29
+ font-variant-numeric: tabular-nums;
30
+ background: color-mix(in srgb, var(--color-fg) 12%, transparent);
31
+ }
32
+
33
+ @mixin count-solid {
34
+ background: var(--color-accent);
35
+ color: var(--color-accent-fg);
36
+ }
37
+
38
+ @mixin count-overlay {
39
+ @include absolute;
40
+ // em, not rem — the offsets and the circle track the counter's own
41
+ // font-size, so a rebound size keeps the same geometry.
42
+ inset-block-start: -0.5em;
43
+ inset-inline-end: -0.5em;
44
+ min-width: 1.5em;
45
+ padding-inline: var(--size-2xs);
46
+ line-height: 1.5em;
47
+ pointer-events: none;
48
+ }
@@ -141,7 +141,6 @@
141
141
  @include fixed;
142
142
  inset: auto;
143
143
  margin: 0;
144
- padding: var(--padding-y);
145
144
  min-width: var(--dropdown-min-width, 14rem);
146
145
  @include enter-scale-fade;
147
146
 
@@ -167,4 +166,9 @@
167
166
  }
168
167
 
169
168
  @include menu-items;
169
+
170
+ // Panel inset — after menu-items on purpose: the panel IS the <ul>,
171
+ // and menu-items' list reset (padding: 0) would otherwise zero it,
172
+ // leaving the item highlight flush against the panel border.
173
+ padding: var(--padding-y);
170
174
  }
@@ -22,6 +22,7 @@
22
22
  @forward 'accordion';
23
23
  @forward 'card';
24
24
  @forward 'chip';
25
+ @forward 'count';
25
26
  @forward 'nav';
26
27
  @forward 'btn';
27
28
  @forward 'form';
@@ -8,6 +8,7 @@
8
8
  @use 'motion' as *;
9
9
  @use 'interaction' as *;
10
10
  @use 'position' as *;
11
+ @use 'count' as *;
11
12
 
12
13
  // ─── Nav ────────────────────────────────────────────────────────────────────
13
14
  // Navigation structure reset. Layout (flex-col, h-full) and background come
@@ -64,21 +65,12 @@
64
65
 
65
66
  // Trailing counter — <data value="24">24</data> as the last child of a.
66
67
  a > data {
67
- @include flex-shrink-0;
68
+ @include count;
68
69
  margin-inline-start: auto;
69
- padding: 0 var(--size-xs-up);
70
- min-width: 1.5rem;
71
- text-align: center;
72
- border-radius: var(--radius-full);
73
- @include text-xs;
74
- @include font-semibold;
75
- font-variant-numeric: tabular-nums;
76
- background: color-mix(in srgb, var(--color-fg) 12%, transparent);
77
70
  }
78
71
 
79
72
  a[aria-current="page"] > data {
80
- background: var(--color-accent);
81
- color: var(--color-accent-fg);
73
+ @include count-solid;
82
74
  }
83
75
 
84
76
  // Section heading — small uppercase eyebrow, clearly not a link.
@@ -5,6 +5,7 @@
5
5
  @use 'form' as *;
6
6
  @use 'focus' as *;
7
7
  @use 'dropdown' as *;
8
+ @use 'typography' as *;
8
9
 
9
10
  @mixin popover {
10
11
  @include floating-panel;
@@ -37,7 +38,17 @@
37
38
  margin: var(--size-xs) 0;
38
39
  }
39
40
 
40
- > ul {
41
+ // Menu popover caption (profile menu: <p> + <hr> + <nav><ul>) — sits on
42
+ // the item labels' inline grid instead of the bare panel inset.
43
+ &:has(> ul > li > :is(a, button), > nav > ul > li > :is(a, button)) > p {
44
+ margin: 0;
45
+ padding: var(--padding-y) var(--padding-x);
46
+ @include typography(body-sm);
47
+ }
48
+
49
+ // `nav > ul` is the canonical profile-menu shape (see ln-popover markup).
50
+ > ul,
51
+ > nav > ul {
41
52
  list-style: none;
42
53
  padding: 0;
43
54
  margin: 0;