@livenetworks/ashlar 2.2.0 → 2.2.1

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 (353) 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 +96 -95
  347. package/theme/components/_translations.scss +118 -111
  348. package/theme/config/mixins/_app-shell.scss +14 -0
  349. package/theme/config/mixins/_count.scss +48 -0
  350. package/theme/config/mixins/_index.scss +1 -0
  351. package/theme/config/mixins/_nav.scss +3 -11
  352. package/theme/config/mixins/_translations.scss +126 -124
  353. package/web-types.json +2365 -2351
package/package.json CHANGED
@@ -1,95 +1,96 @@
1
- {
2
- "name": "@livenetworks/ashlar",
3
- "version": "2.2.0",
4
- "description": "LiveNetworks unified frontend library - CSS framework and vanilla JS components",
5
- "license": "GPL-3.0-or-later",
6
- "author": "Live Networks",
7
- "type": "module",
8
- "publishConfig": {
9
- "access": "public"
10
- },
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/livenetworks/ln-ashlar.git"
14
- },
15
- "homepage": "https://github.com/livenetworks/ln-ashlar#readme",
16
- "bugs": "https://github.com/livenetworks/ln-ashlar/issues",
17
- "keywords": [
18
- "css",
19
- "scss",
20
- "design-system",
21
- "frontend",
22
- "components",
23
- "vanilla-js"
24
- ],
25
- "main": "./dist/ln-ashlar.js",
26
- "style": "./dist/ln-ashlar.css",
27
- "web-types": "./web-types.json",
28
- "files": [
29
- "dist/",
30
- "theme/",
31
- "components/",
32
- "ln-ashlar.html-data.json",
33
- "web-types.json"
34
- ],
35
- "exports": {
36
- ".": {
37
- "import": "./dist/ln-ashlar.js",
38
- "default": "./dist/ln-ashlar.js"
39
- },
40
- "./core.css": "./dist/ln-ashlar-core.css",
41
- "./theme.css": "./dist/ln-ashlar-theme.css",
42
- "./full.css": "./dist/ln-ashlar.css",
43
- "./landing.css": "./dist/ln-ashlar-landing.css",
44
- "./presentation.css": "./dist/ln-ashlar-landing.css",
45
- "./dev.css": "./dist/ln-ashlar-dev.css",
46
- "./dev.js": "./dist/ln-ashlar-dev.js",
47
- "./theme/*": "./theme/*",
48
- "./components/*": "./components/*",
49
- "./tailwind.css": "./dist/ln-ashlar-tailwind.css"
50
- },
51
- "scripts": {
52
- "test": "npm run sync:ln-schemas:check && npm run sync:ln-events:check && npm run sync:css-tokens:check && node --test \"tests/*.test.js\"",
53
- "test:p0": "node --test tests/p0-data-integrity.test.js",
54
- "test:headless": "node tests/headless/run-all.mjs",
55
- "dev": "node scripts/build.mjs --watch",
56
- "build": "npm run sync:ln-schemas && npm run sync:ln-events && npm run sync:css-tokens && node scripts/build.mjs && npm run build:tailwind && npm run build:dev-css && npm run build:demos",
57
- "build:tailwind": "node scripts/build-tailwind.mjs",
58
- "build:demos": "npm run build:demo-index && npm run build:demo-admin && npm run build:demo-docuflow && npm run build:demo-spa && npm run build:demo-landing && npm run build:demo-corporate",
59
- "build:dev-css": "sass theme/ln-ashlar-dev.scss demo/dist/ln-ashlar-dev.css --no-source-map --style=compressed",
60
- "generate:brand-assets": "powershell -ExecutionPolicy Bypass -File scripts/generate-brand-assets.ps1 && node scripts/generate-svg-favicon.mjs",
61
- "build:demo-index": "sass demo/index.scss demo/index.css --no-source-map --style=compressed",
62
- "build:demo-admin": "sass demo/admin/src/admin.scss demo/admin/dist/admin.css --no-source-map --style=compressed && sass demo/admin/src/admin-relaxed.scss demo/admin/dist/admin-relaxed.css --no-source-map --style=compressed && node -e \"const fs = require('fs'); fs.copyFileSync('demo/admin/src/demo.js', 'demo/admin/dist/demo.js')\" && node demo/admin/src/build-pages.mjs",
63
- "build:demo-docuflow": "sass demo/docuflow/docuflow.scss demo/docuflow/dist/docuflow.css --no-source-map --style=compressed",
64
- "build:demo-spa": "node demo/spa/build.mjs",
65
- "build:demo-landing": "sass demo/landing/landing.scss demo/landing/landing.css --no-source-map --style=compressed",
66
- "build:demo-corporate": "sass demo/corporate/corporate.scss demo/corporate/corporate.css --no-source-map --style=compressed",
67
- "sync:ln-schemas": "node scripts/sync-ln-schemas.mjs",
68
- "sync:ln-schemas:check": "node scripts/sync-ln-schemas.mjs --check",
69
- "sync:ln-events": "node scripts/sync-ln-events.mjs",
70
- "sync:ln-events:check": "node scripts/sync-ln-events.mjs --check",
71
- "sync:ln-events:strict": "node scripts/sync-ln-events.mjs --strict",
72
- "sync:css-tokens": "node scripts/sync-css-tokens.mjs",
73
- "sync:css-tokens:check": "node scripts/sync-css-tokens.mjs --check",
74
- "manifest": "node scripts/extract-manifest.mjs",
75
- "manifest:file": "node scripts/extract-manifest.mjs --output=docs/manifest.txt",
76
- "generate:llms": "node scripts/generate-llms.mjs",
77
- "generate:llms:check": "node scripts/generate-llms.mjs --check",
78
- "test:visual": "node tests/headless/visual-run.mjs",
79
- "test:perf": "node tests/headless/perf-run.mjs",
80
- "test:perf:history": "node tests/headless/perf-run.mjs --history",
81
- "test:perf:compare": "node tests/headless/perf-run.mjs --compare",
82
- "test:perf:density": "node tests/headless/perf-density.mjs",
83
- "test:dual": "node tests/headless/dual-run.mjs"
84
- },
85
- "devDependencies": {
86
- "@tabler/icons": "^3.41.1",
87
- "@tailwindcss/cli": "^4.3.3",
88
- "fake-indexeddb": "^6.2.4",
89
- "flag-icons": "^7.5.0",
90
- "puppeteer-core": "^25.1.0",
91
- "sass-embedded": "^1.83.0",
92
- "tailwindcss": "^4.3.3",
93
- "vite": "^6.0.0"
94
- }
95
- }
1
+ {
2
+ "name": "@livenetworks/ashlar",
3
+ "version": "2.2.1",
4
+ "description": "LiveNetworks unified frontend library - CSS framework and vanilla JS components",
5
+ "license": "GPL-3.0-or-later",
6
+ "author": "Live Networks",
7
+ "type": "module",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/livenetworks/ln-ashlar.git"
14
+ },
15
+ "homepage": "https://github.com/livenetworks/ln-ashlar#readme",
16
+ "bugs": "https://github.com/livenetworks/ln-ashlar/issues",
17
+ "keywords": [
18
+ "css",
19
+ "scss",
20
+ "design-system",
21
+ "frontend",
22
+ "components",
23
+ "vanilla-js"
24
+ ],
25
+ "main": "./dist/ln-ashlar.js",
26
+ "style": "./dist/ln-ashlar.css",
27
+ "web-types": "./web-types.json",
28
+ "files": [
29
+ "dist/",
30
+ "theme/",
31
+ "components/",
32
+ "assets/",
33
+ "ln-ashlar.html-data.json",
34
+ "web-types.json"
35
+ ],
36
+ "exports": {
37
+ ".": {
38
+ "import": "./dist/ln-ashlar.js",
39
+ "default": "./dist/ln-ashlar.js"
40
+ },
41
+ "./core.css": "./dist/ln-ashlar-core.css",
42
+ "./theme.css": "./dist/ln-ashlar-theme.css",
43
+ "./full.css": "./dist/ln-ashlar.css",
44
+ "./landing.css": "./dist/ln-ashlar-landing.css",
45
+ "./presentation.css": "./dist/ln-ashlar-landing.css",
46
+ "./dev.css": "./dist/ln-ashlar-dev.css",
47
+ "./dev.js": "./dist/ln-ashlar-dev.js",
48
+ "./theme/*": "./theme/*",
49
+ "./components/*": "./components/*",
50
+ "./tailwind.css": "./dist/ln-ashlar-tailwind.css"
51
+ },
52
+ "scripts": {
53
+ "test": "npm run sync:ln-schemas:check && npm run sync:ln-events:check && npm run sync:css-tokens:check && node --test \"tests/*.test.js\"",
54
+ "test:p0": "node --test tests/p0-data-integrity.test.js",
55
+ "test:headless": "node tests/headless/run-all.mjs",
56
+ "dev": "node scripts/build.mjs --watch",
57
+ "build": "npm run sync:ln-schemas && npm run sync:ln-events && npm run sync:css-tokens && node scripts/build.mjs && npm run build:tailwind && npm run build:dev-css && npm run build:demos",
58
+ "build:tailwind": "node scripts/build-tailwind.mjs",
59
+ "build:demos": "npm run build:demo-index && npm run build:demo-admin && npm run build:demo-docuflow && npm run build:demo-spa && npm run build:demo-landing && npm run build:demo-corporate",
60
+ "build:dev-css": "sass theme/ln-ashlar-dev.scss demo/dist/ln-ashlar-dev.css --no-source-map --style=compressed",
61
+ "generate:brand-assets": "powershell -ExecutionPolicy Bypass -File scripts/generate-brand-assets.ps1 && node scripts/generate-svg-favicon.mjs",
62
+ "build:demo-index": "sass demo/index.scss demo/index.css --no-source-map --style=compressed",
63
+ "build:demo-admin": "sass demo/admin/src/admin.scss demo/admin/dist/admin.css --no-source-map --style=compressed && sass demo/admin/src/admin-relaxed.scss demo/admin/dist/admin-relaxed.css --no-source-map --style=compressed && node -e \"const fs = require('fs'); fs.copyFileSync('demo/admin/src/demo.js', 'demo/admin/dist/demo.js')\" && node demo/admin/src/build-pages.mjs",
64
+ "build:demo-docuflow": "sass demo/docuflow/docuflow.scss demo/docuflow/dist/docuflow.css --no-source-map --style=compressed",
65
+ "build:demo-spa": "node demo/spa/build.mjs",
66
+ "build:demo-landing": "sass demo/landing/landing.scss demo/landing/landing.css --no-source-map --style=compressed",
67
+ "build:demo-corporate": "sass demo/corporate/corporate.scss demo/corporate/corporate.css --no-source-map --style=compressed",
68
+ "sync:ln-schemas": "node scripts/sync-ln-schemas.mjs",
69
+ "sync:ln-schemas:check": "node scripts/sync-ln-schemas.mjs --check",
70
+ "sync:ln-events": "node scripts/sync-ln-events.mjs",
71
+ "sync:ln-events:check": "node scripts/sync-ln-events.mjs --check",
72
+ "sync:ln-events:strict": "node scripts/sync-ln-events.mjs --strict",
73
+ "sync:css-tokens": "node scripts/sync-css-tokens.mjs",
74
+ "sync:css-tokens:check": "node scripts/sync-css-tokens.mjs --check",
75
+ "manifest": "node scripts/extract-manifest.mjs",
76
+ "manifest:file": "node scripts/extract-manifest.mjs --output=docs/manifest.txt",
77
+ "generate:llms": "node scripts/generate-llms.mjs",
78
+ "generate:llms:check": "node scripts/generate-llms.mjs --check",
79
+ "test:visual": "node tests/headless/visual-run.mjs",
80
+ "test:perf": "node tests/headless/perf-run.mjs",
81
+ "test:perf:history": "node tests/headless/perf-run.mjs --history",
82
+ "test:perf:compare": "node tests/headless/perf-run.mjs --compare",
83
+ "test:perf:density": "node tests/headless/perf-density.mjs",
84
+ "test:dual": "node tests/headless/dual-run.mjs"
85
+ },
86
+ "devDependencies": {
87
+ "@tabler/icons": "^3.41.1",
88
+ "@tailwindcss/cli": "^4.3.3",
89
+ "fake-indexeddb": "^6.2.4",
90
+ "flag-icons": "^7.5.0",
91
+ "puppeteer-core": "^25.1.0",
92
+ "sass-embedded": "^1.83.0",
93
+ "tailwindcss": "^4.3.3",
94
+ "vite": "^6.0.0"
95
+ }
96
+ }
@@ -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
+ }
@@ -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
 
@@ -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
+ }
@@ -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.