@livenetworks/ashlar 2.1.13 → 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.
- package/assets/brand/android-chrome-192x192.png +0 -0
- package/assets/brand/android-chrome-512x512.png +0 -0
- package/assets/brand/apple-touch-icon.png +0 -0
- package/assets/brand/favicon-16x16.png +0 -0
- package/assets/brand/favicon-32x32.png +0 -0
- package/assets/brand/favicon-48x48.png +0 -0
- package/assets/brand/favicon-dark-128x128.png +0 -0
- package/assets/brand/favicon-dark-16x16.png +0 -0
- package/assets/brand/favicon-dark-180x180.png +0 -0
- package/assets/brand/favicon-dark-192x192.png +0 -0
- package/assets/brand/favicon-dark-256x256.png +0 -0
- package/assets/brand/favicon-dark-32x32.png +0 -0
- package/assets/brand/favicon-dark-48x48.png +0 -0
- package/assets/brand/favicon-dark-512x512.png +0 -0
- package/assets/brand/favicon-dark-64x64.png +0 -0
- package/assets/brand/favicon-dark.ico +0 -0
- package/assets/brand/favicon-dark.png +0 -0
- package/assets/brand/favicon-light-128x128.png +0 -0
- package/assets/brand/favicon-light-16x16.png +0 -0
- package/assets/brand/favicon-light-180x180.png +0 -0
- package/assets/brand/favicon-light-192x192.png +0 -0
- package/assets/brand/favicon-light-256x256.png +0 -0
- package/assets/brand/favicon-light-32x32.png +0 -0
- package/assets/brand/favicon-light-48x48.png +0 -0
- package/assets/brand/favicon-light-512x512.png +0 -0
- package/assets/brand/favicon-light-64x64.png +0 -0
- package/assets/brand/favicon-light.ico +0 -0
- package/assets/brand/favicon-light.png +0 -0
- package/assets/brand/favicon.ico +0 -0
- package/assets/brand/favicon.png +0 -0
- package/assets/brand/favicon.svg +12 -0
- package/assets/brand/ln-ashlar-emblem-dark-128.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-16.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-256.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-32.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark-64.png +0 -0
- package/assets/brand/ln-ashlar-emblem-dark.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-128.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-16.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-256.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-32.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light-64.png +0 -0
- package/assets/brand/ln-ashlar-emblem-light.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark-128.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark-256.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark-512.png +0 -0
- package/assets/brand/ln-ashlar-logo-dark.png +0 -0
- package/assets/brand/ln-ashlar-logo-light-128.png +0 -0
- package/assets/brand/ln-ashlar-logo-light-256.png +0 -0
- package/assets/brand/ln-ashlar-logo-light-512.png +0 -0
- package/assets/brand/ln-ashlar-logo-light.png +0 -0
- package/assets/brand/site.webmanifest +41 -0
- package/assets/brand/source/ln-ashlar-icon-dark-1024.png +0 -0
- package/assets/brand/source/ln-ashlar-icon-dark-uncropped-1024.png +0 -0
- package/assets/brand/source/ln-ashlar-icon-light-1024.png +0 -0
- package/assets/brand/source/ln-ashlar-icon-light-uncropped-1024.png +0 -0
- package/assets/flags/ad.svg +150 -0
- package/assets/flags/ae.svg +6 -0
- package/assets/flags/af.svg +81 -0
- package/assets/flags/ag.svg +14 -0
- package/assets/flags/ai.svg +29 -0
- package/assets/flags/al.svg +5 -0
- package/assets/flags/am.svg +5 -0
- package/assets/flags/ao.svg +13 -0
- package/assets/flags/aq.svg +5 -0
- package/assets/flags/ar.svg +32 -0
- package/assets/flags/arab.svg +109 -0
- package/assets/flags/as.svg +72 -0
- package/assets/flags/asean.svg +13 -0
- package/assets/flags/at.svg +4 -0
- package/assets/flags/au.svg +8 -0
- package/assets/flags/aw.svg +186 -0
- package/assets/flags/ax.svg +18 -0
- package/assets/flags/az.svg +8 -0
- package/assets/flags/ba.svg +12 -0
- package/assets/flags/bb.svg +6 -0
- package/assets/flags/bd.svg +4 -0
- package/assets/flags/be.svg +7 -0
- package/assets/flags/bf.svg +7 -0
- package/assets/flags/bg.svg +5 -0
- package/assets/flags/bh.svg +4 -0
- package/assets/flags/bi.svg +15 -0
- package/assets/flags/bj.svg +14 -0
- package/assets/flags/bl.svg +5 -0
- package/assets/flags/bm.svg +97 -0
- package/assets/flags/bn.svg +36 -0
- package/assets/flags/bo.svg +673 -0
- package/assets/flags/bq.svg +5 -0
- package/assets/flags/br.svg +45 -0
- package/assets/flags/bs.svg +13 -0
- package/assets/flags/bt.svg +89 -0
- package/assets/flags/bv.svg +13 -0
- package/assets/flags/bw.svg +7 -0
- package/assets/flags/by.svg +18 -0
- package/assets/flags/bz.svg +145 -0
- package/assets/flags/ca.svg +4 -0
- package/assets/flags/cc.svg +19 -0
- package/assets/flags/cd.svg +5 -0
- package/assets/flags/cefta.svg +13 -0
- package/assets/flags/cf.svg +15 -0
- package/assets/flags/cg.svg +12 -0
- package/assets/flags/ch.svg +9 -0
- package/assets/flags/ci.svg +7 -0
- package/assets/flags/ck.svg +9 -0
- package/assets/flags/cl.svg +13 -0
- package/assets/flags/cm.svg +15 -0
- package/assets/flags/cn.svg +11 -0
- package/assets/flags/co.svg +7 -0
- package/assets/flags/cp.svg +7 -0
- package/assets/flags/cr.svg +7 -0
- package/assets/flags/cu.svg +13 -0
- package/assets/flags/cv.svg +13 -0
- package/assets/flags/cw.svg +14 -0
- package/assets/flags/cx.svg +15 -0
- package/assets/flags/cy.svg +6 -0
- package/assets/flags/cz.svg +5 -0
- package/assets/flags/de.svg +5 -0
- package/assets/flags/dg.svg +130 -0
- package/assets/flags/dj.svg +13 -0
- package/assets/flags/dk.svg +5 -0
- package/assets/flags/dm.svg +152 -0
- package/assets/flags/do.svg +121 -0
- package/assets/flags/dz.svg +5 -0
- package/assets/flags/eac.svg +48 -0
- package/assets/flags/ec.svg +138 -0
- package/assets/flags/ee.svg +5 -0
- package/assets/flags/eg.svg +38 -0
- package/assets/flags/eh.svg +16 -0
- package/assets/flags/er.svg +8 -0
- package/assets/flags/es-ct.svg +4 -0
- package/assets/flags/es-ga.svg +187 -0
- package/assets/flags/es-pv.svg +5 -0
- package/assets/flags/es.svg +544 -0
- package/assets/flags/et.svg +14 -0
- package/assets/flags/eu.svg +28 -0
- package/assets/flags/fi.svg +5 -0
- package/assets/flags/fj.svg +120 -0
- package/assets/flags/fk.svg +90 -0
- package/assets/flags/fm.svg +11 -0
- package/assets/flags/fo.svg +12 -0
- package/assets/flags/fr.svg +5 -0
- package/assets/flags/ga.svg +7 -0
- package/assets/flags/gb-eng.svg +5 -0
- package/assets/flags/gb-nir.svg +132 -0
- package/assets/flags/gb-sct.svg +4 -0
- package/assets/flags/gb-wls.svg +9 -0
- package/assets/flags/gb.svg +7 -0
- package/assets/flags/gd.svg +27 -0
- package/assets/flags/ge.svg +6 -0
- package/assets/flags/gf.svg +5 -0
- package/assets/flags/gg.svg +9 -0
- package/assets/flags/gh.svg +6 -0
- package/assets/flags/gi.svg +32 -0
- package/assets/flags/gl.svg +4 -0
- package/assets/flags/gm.svg +14 -0
- package/assets/flags/gn.svg +7 -0
- package/assets/flags/gp.svg +5 -0
- package/assets/flags/gq.svg +23 -0
- package/assets/flags/gr.svg +16 -0
- package/assets/flags/gs.svg +133 -0
- package/assets/flags/gt.svg +204 -0
- package/assets/flags/gu.svg +19 -0
- package/assets/flags/gw.svg +13 -0
- package/assets/flags/gy.svg +9 -0
- package/assets/flags/hk.svg +8 -0
- package/assets/flags/hm.svg +8 -0
- package/assets/flags/hn.svg +18 -0
- package/assets/flags/hr.svg +58 -0
- package/assets/flags/ht.svg +116 -0
- package/assets/flags/hu.svg +7 -0
- package/assets/flags/ic.svg +7 -0
- package/assets/flags/id.svg +4 -0
- package/assets/flags/ie.svg +7 -0
- package/assets/flags/il.svg +14 -0
- package/assets/flags/im.svg +36 -0
- package/assets/flags/in.svg +25 -0
- package/assets/flags/io.svg +130 -0
- package/assets/flags/iq.svg +10 -0
- package/assets/flags/ir.svg +219 -0
- package/assets/flags/is.svg +12 -0
- package/assets/flags/it.svg +7 -0
- package/assets/flags/je.svg +62 -0
- package/assets/flags/jm.svg +8 -0
- package/assets/flags/jo.svg +16 -0
- package/assets/flags/jp.svg +11 -0
- package/assets/flags/ke.svg +23 -0
- package/assets/flags/kg.svg +4 -0
- package/assets/flags/kh.svg +61 -0
- package/assets/flags/ki.svg +36 -0
- package/assets/flags/km.svg +16 -0
- package/assets/flags/kn.svg +14 -0
- package/assets/flags/kp.svg +15 -0
- package/assets/flags/kr.svg +24 -0
- package/assets/flags/kw.svg +13 -0
- package/assets/flags/ky.svg +103 -0
- package/assets/flags/kz.svg +36 -0
- package/assets/flags/la.svg +12 -0
- package/assets/flags/lb.svg +15 -0
- package/assets/flags/lc.svg +8 -0
- package/assets/flags/li.svg +43 -0
- package/assets/flags/lk.svg +22 -0
- package/assets/flags/lr.svg +14 -0
- package/assets/flags/ls.svg +8 -0
- package/assets/flags/lt.svg +7 -0
- package/assets/flags/lu.svg +5 -0
- package/assets/flags/lv.svg +6 -0
- package/assets/flags/ly.svg +13 -0
- package/assets/flags/ma.svg +4 -0
- package/assets/flags/mc.svg +6 -0
- package/assets/flags/md.svg +70 -0
- package/assets/flags/me.svg +116 -0
- package/assets/flags/mf.svg +5 -0
- package/assets/flags/mg.svg +7 -0
- package/assets/flags/mh.svg +7 -0
- package/assets/flags/mk.svg +5 -0
- package/assets/flags/ml.svg +7 -0
- package/assets/flags/mm.svg +12 -0
- package/assets/flags/mn.svg +14 -0
- package/assets/flags/mo.svg +9 -0
- package/assets/flags/mp.svg +86 -0
- package/assets/flags/mq.svg +5 -0
- package/assets/flags/mr.svg +6 -0
- package/assets/flags/ms.svg +29 -0
- package/assets/flags/mt.svg +58 -0
- package/assets/flags/mu.svg +8 -0
- package/assets/flags/mv.svg +6 -0
- package/assets/flags/mw.svg +10 -0
- package/assets/flags/mx.svg +382 -0
- package/assets/flags/my.svg +26 -0
- package/assets/flags/mz.svg +21 -0
- package/assets/flags/na.svg +16 -0
- package/assets/flags/nc.svg +13 -0
- package/assets/flags/ne.svg +6 -0
- package/assets/flags/nf.svg +9 -0
- package/assets/flags/ng.svg +6 -0
- package/assets/flags/ni.svg +129 -0
- package/assets/flags/nl.svg +5 -0
- package/assets/flags/no.svg +7 -0
- package/assets/flags/np.svg +13 -0
- package/assets/flags/nr.svg +12 -0
- package/assets/flags/nu.svg +10 -0
- package/assets/flags/nz.svg +36 -0
- package/assets/flags/om.svg +115 -0
- package/assets/flags/pa.svg +14 -0
- package/assets/flags/pc.svg +33 -0
- package/assets/flags/pe.svg +4 -0
- package/assets/flags/pf.svg +19 -0
- package/assets/flags/pg.svg +9 -0
- package/assets/flags/ph.svg +6 -0
- package/assets/flags/pk.svg +15 -0
- package/assets/flags/pl.svg +6 -0
- package/assets/flags/pm.svg +5 -0
- package/assets/flags/pn.svg +53 -0
- package/assets/flags/pr.svg +13 -0
- package/assets/flags/ps.svg +6 -0
- package/assets/flags/pt.svg +57 -0
- package/assets/flags/pw.svg +11 -0
- package/assets/flags/py.svg +157 -0
- package/assets/flags/qa.svg +4 -0
- package/assets/flags/re.svg +5 -0
- package/assets/flags/ro.svg +7 -0
- package/assets/flags/rs.svg +292 -0
- package/assets/flags/ru.svg +5 -0
- package/assets/flags/rw.svg +13 -0
- package/assets/flags/sa.svg +25 -0
- package/assets/flags/sb.svg +13 -0
- package/assets/flags/sc.svg +7 -0
- package/assets/flags/sd.svg +13 -0
- package/assets/flags/se.svg +4 -0
- package/assets/flags/sg.svg +13 -0
- package/assets/flags/sh-ac.svg +689 -0
- package/assets/flags/sh-hl.svg +164 -0
- package/assets/flags/sh-ta.svg +76 -0
- package/assets/flags/sh.svg +7 -0
- package/assets/flags/si.svg +18 -0
- package/assets/flags/sj.svg +7 -0
- package/assets/flags/sk.svg +9 -0
- package/assets/flags/sl.svg +7 -0
- package/assets/flags/sm.svg +75 -0
- package/assets/flags/sn.svg +8 -0
- package/assets/flags/so.svg +11 -0
- package/assets/flags/sr.svg +6 -0
- package/assets/flags/ss.svg +8 -0
- package/assets/flags/st.svg +16 -0
- package/assets/flags/sv.svg +593 -0
- package/assets/flags/sx.svg +56 -0
- package/assets/flags/sy.svg +6 -0
- package/assets/flags/sz.svg +34 -0
- package/assets/flags/tc.svg +50 -0
- package/assets/flags/td.svg +7 -0
- package/assets/flags/tf.svg +15 -0
- package/assets/flags/tg.svg +14 -0
- package/assets/flags/th.svg +7 -0
- package/assets/flags/tj.svg +22 -0
- package/assets/flags/tk.svg +5 -0
- package/assets/flags/tl.svg +13 -0
- package/assets/flags/tm.svg +204 -0
- package/assets/flags/tn.svg +4 -0
- package/assets/flags/to.svg +10 -0
- package/assets/flags/tr.svg +8 -0
- package/assets/flags/tt.svg +5 -0
- package/assets/flags/tv.svg +9 -0
- package/assets/flags/tw.svg +34 -0
- package/assets/flags/tz.svg +13 -0
- package/assets/flags/ua.svg +6 -0
- package/assets/flags/ug.svg +30 -0
- package/assets/flags/um.svg +9 -0
- package/assets/flags/un.svg +16 -0
- package/assets/flags/us.svg +9 -0
- package/assets/flags/uy.svg +28 -0
- package/assets/flags/uz.svg +30 -0
- package/assets/flags/va.svg +190 -0
- package/assets/flags/vc.svg +8 -0
- package/assets/flags/ve.svg +26 -0
- package/assets/flags/vg.svg +59 -0
- package/assets/flags/vi.svg +28 -0
- package/assets/flags/vn.svg +11 -0
- package/assets/flags/vu.svg +21 -0
- package/assets/flags/wf.svg +5 -0
- package/assets/flags/ws.svg +7 -0
- package/assets/flags/xk.svg +5 -0
- package/assets/flags/xx.svg +4 -0
- package/assets/flags/ye.svg +7 -0
- package/assets/flags/yt.svg +5 -0
- package/assets/flags/za.svg +17 -0
- package/assets/flags/zm.svg +27 -0
- package/assets/flags/zw.svg +21 -0
- package/components/COMPONENTS.md +80 -80
- package/components/ln-api-connector/ln-api-connector.schema.json +105 -105
- package/components/ln-chart/ln-chart-dev.scss +0 -4
- package/components/ln-core/README.md +21 -21
- package/components/ln-core/ln-core.schema.json +120 -120
- package/components/ln-core/query.js +113 -113
- package/components/ln-data-coordinator/README.md +2 -0
- package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
- package/components/ln-data-coordinator/ln-data-coordinator.schema.json +196 -196
- package/components/ln-data-coordinator/src/ln-data-coordinator.js +457 -432
- package/components/ln-data-store/ln-data-store.schema.json +92 -92
- package/components/ln-date/ln-date.js +1 -1
- package/components/ln-date/src/ln-date.js +1 -1
- package/components/ln-debug/ln-debug.js +1 -1
- package/components/ln-debug/ln-debug.schema.json +28 -28
- package/components/ln-debug/src/generated-attributes.js +4 -0
- package/components/ln-dropdown/ln-dropdown.schema.json +90 -90
- package/components/ln-external-links/README.md +19 -19
- package/components/ln-external-links/ln-external-links.js +1 -1
- package/components/ln-external-links/ln-external-links.schema.json +9 -0
- package/components/ln-external-links/ln-external-links.scss +12 -0
- package/components/ln-external-links/src/ln-external-links.js +3 -2
- package/components/ln-filter/README.md +2 -1
- package/components/ln-filter/ln-filter.js +1 -1
- package/components/ln-filter/ln-filter.schema.json +157 -169
- package/components/ln-filter/src/ln-filter.js +1 -3
- package/components/ln-form/ln-form.schema.json +57 -57
- package/components/ln-key/ln-key.js +1 -1
- package/components/ln-key/ln-key.schema.json +8 -0
- package/components/ln-key/src/ln-key.js +8 -5
- package/components/ln-obfuscator/ln-obfuscator.js +1 -1
- package/components/ln-obfuscator/ln-obfuscator.schema.json +6 -0
- package/components/ln-obfuscator/src/ln-obfuscator.js +2 -2
- package/components/ln-options/ln-options.schema.json +47 -47
- package/components/ln-popover/ln-popover.schema.json +82 -82
- package/components/ln-progress/ln-progress.schema.json +0 -13
- package/components/ln-search/ln-search.schema.json +111 -111
- package/components/ln-sort/README.md +1 -0
- package/components/ln-sort/ln-sort.js +1 -1
- package/components/ln-sort/ln-sort.schema.json +100 -112
- package/components/ln-sort/src/sort-model.js +1 -6
- package/components/ln-sortable/ln-sortable.schema.json +38 -38
- package/components/ln-sortable/ln-sortable.scss +25 -25
- package/components/ln-table/README.md +8 -1
- package/components/ln-table/ln-table.js +1 -1
- package/components/ln-table/ln-table.schema.json +195 -195
- package/components/ln-table/src/ln-table.js +43 -7
- package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
- package/components/ln-table-coordinator/ln-table-coordinator.schema.json +18 -0
- package/components/ln-table-coordinator/src/ln-table-coordinator.js +104 -2
- package/components/ln-toast/README.md +1 -1
- package/components/ln-toast/ln-toast.js +1 -1
- package/components/ln-toast/ln-toast.schema.json +6 -0
- package/components/ln-toast/src/ln-toast.js +1 -1
- package/components/ln-translations/README.md +202 -120
- package/components/ln-translations/ln-translations.js +1 -1
- package/components/ln-translations/ln-translations.schema.json +136 -120
- package/components/ln-translations/src/ln-translations.js +354 -295
- package/components/ln-translations/src/translations-model.js +221 -0
- package/components/ln-validate/README.md +6 -6
- package/components/ln-validate/ln-validate-dev.scss +0 -5
- package/components/ln-validate/ln-validate.js +1 -1
- package/components/ln-validate/ln-validate.schema.json +0 -6
- package/components/ln-validate/src/ln-validate.js +48 -29
- package/ln-ashlar.html-data.json +26 -8
- package/package.json +3 -2
- package/theme/README.md +7 -6
- package/theme/base/_global.scss +2 -2
- package/theme/base/_reset.scss +11 -0
- package/theme/components/_app-shell.scss +0 -8
- package/theme/components/_form.scss +6 -6
- package/theme/components/_ln-table.scss +6 -3
- package/theme/components/_scrollbar.scss +5 -4
- package/theme/components/_sortable.scss +19 -19
- package/theme/components/_stat-card.scss +1 -0
- package/theme/components/_table.scss +10 -33
- package/theme/components/_translations.scss +118 -111
- package/theme/config/_density.scss +236 -104
- package/theme/config/_palette.scss +71 -49
- package/theme/config/_theme.scss +27 -31
- package/theme/config/_tokens.scss +28 -26
- package/theme/config/mixins/_app-shell.scss +31 -21
- package/theme/config/mixins/_btn.scss +4 -2
- package/theme/config/mixins/_card.scss +87 -67
- package/theme/config/mixins/_colors.scss +2 -1
- package/theme/config/mixins/_count.scss +48 -0
- package/theme/config/mixins/_display.scss +12 -0
- package/theme/config/mixins/_footer.scss +3 -1
- package/theme/config/mixins/_form.scss +48 -16
- package/theme/config/mixins/_index.scss +1 -0
- package/theme/config/mixins/_layout.scss +9 -0
- package/theme/config/mixins/_ln-table.scss +22 -15
- package/theme/config/mixins/_modal.scss +3 -0
- package/theme/config/mixins/_nav.scss +19 -4
- package/theme/config/mixins/_sidebar.scss +2 -1
- package/theme/config/mixins/_stat-card.scss +33 -2
- package/theme/config/mixins/_status-badge.scss +1 -0
- package/theme/config/mixins/_table.scss +81 -39
- package/theme/config/mixins/_tabs.scss +31 -0
- package/theme/config/mixins/_toast.scss +0 -1
- package/theme/config/mixins/_translations.scss +126 -124
- package/theme/designs/relaxed/_card.scss +12 -0
- package/theme/designs/relaxed/_layout.scss +24 -0
- package/theme/ln-ashlar-core.scss +1 -0
- package/theme/ln-ashlar-dev.scss +0 -1
- package/theme/ln-ashlar-relaxed.scss +67 -0
- package/theme/tailwind/components.css +561 -24
- package/theme/utilities/_utilities.scss +1 -11
- package/web-types.json +38 -10
- package/components/ln-progress/ln-progress-dev.scss +0 -8
|
@@ -17,19 +17,18 @@
|
|
|
17
17
|
|
|
18
18
|
@mixin form-label {
|
|
19
19
|
@include block;
|
|
20
|
-
|
|
20
|
+
// label-md / medium — a 12px semibold caption over every field reads
|
|
21
|
+
// as dialog-box chrome; field labels sit one step under body text.
|
|
22
|
+
@include typography(label-md);
|
|
21
23
|
@include font-medium;
|
|
22
24
|
color: var(--color-fg);
|
|
23
25
|
// Structural label-to-input gap (not shell rhythm).
|
|
24
26
|
--margin-block: 0.375rem;
|
|
25
27
|
margin-bottom: var(--margin-block);
|
|
26
28
|
|
|
27
|
-
// Required indicator — red *
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
:is(.form-element, .form-group, .form-field):has([required]) > &,
|
|
31
|
-
label:has([required]) &,
|
|
32
|
-
&:has(~ :is(input, select, textarea)[required]) {
|
|
29
|
+
// Required indicator — red * when any control under the label's parent is required
|
|
30
|
+
// (siblings, nested field shells).
|
|
31
|
+
:has([required]) > & {
|
|
33
32
|
&::after {
|
|
34
33
|
content: ' *';
|
|
35
34
|
color: hsl(var(--color-error));
|
|
@@ -38,6 +37,21 @@
|
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
|
|
40
|
+
// Field wrapper — zero-specificity rules so form-grid's `> * { margin: 0 }` wins.
|
|
41
|
+
@mixin form-element {
|
|
42
|
+
// Stacked outside a form-grid (modal bodies, settings panels).
|
|
43
|
+
:where(&) + :where(&) {
|
|
44
|
+
--margin-block: var(--size-md);
|
|
45
|
+
margin-top: var(--margin-block);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Trailing feedback after the control gets slot treatment.
|
|
49
|
+
:where(& > :is(input, select, textarea, [data-ln-date-field], search) ~ :not(input)) {
|
|
50
|
+
@include form-slot;
|
|
51
|
+
color: var(--fg-muted);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
41
55
|
@mixin form-grid {
|
|
42
56
|
--gap: var(--size-md);
|
|
43
57
|
container-type: inline-size;
|
|
@@ -83,28 +97,42 @@
|
|
|
83
97
|
|
|
84
98
|
@mixin _form-focus-style {
|
|
85
99
|
border-color: var(--color-accent);
|
|
86
|
-
|
|
100
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent) 20%, transparent);
|
|
87
101
|
}
|
|
88
102
|
|
|
89
103
|
// ─── Text inputs, textareas, selects ────────────────────────────
|
|
90
104
|
|
|
91
105
|
@mixin form-input {
|
|
92
106
|
@include w-full;
|
|
93
|
-
--padding-y: var(--input-padding-y, var(--size-
|
|
94
|
-
--padding-x: var(--size-
|
|
107
|
+
--padding-y: var(--input-padding-y, var(--size-xs-up));
|
|
108
|
+
--padding-x: var(--size-sm-up);
|
|
95
109
|
padding: var(--padding-y) var(--padding-x);
|
|
96
110
|
font-size: var(--font-size);
|
|
97
|
-
line
|
|
111
|
+
// Shared control line box — same height as a sibling button.
|
|
112
|
+
line-height: var(--control-line-height);
|
|
98
113
|
color: var(--color-fg);
|
|
99
|
-
|
|
114
|
+
// Enabled fields read as writable surfaces: base fill, hairline shadow.
|
|
115
|
+
// A grey fill is reserved for :disabled.
|
|
116
|
+
--color-bg: var(--input-bg, var(--bg-base));
|
|
100
117
|
background: var(--color-bg);
|
|
101
118
|
// Control boundary, not a divider — 1.4.11 wants 3:1 here.
|
|
102
|
-
--color-border: var(--border-ui);
|
|
119
|
+
--color-border: var(--input-border, var(--border-ui));
|
|
103
120
|
@include border;
|
|
104
121
|
border-radius: var(--radius);
|
|
105
|
-
|
|
122
|
+
box-shadow: var(--input-shadow, var(--shadow-xs));
|
|
123
|
+
// Colour + ring only — `all` would animate padding/font-size when the
|
|
124
|
+
// density tier switches, making fields visibly "breathe".
|
|
125
|
+
transition:
|
|
126
|
+
color var(--transition-base),
|
|
127
|
+
background-color var(--transition-base),
|
|
128
|
+
border-color var(--transition-base),
|
|
129
|
+
box-shadow var(--transition-base);
|
|
106
130
|
outline: none;
|
|
107
131
|
|
|
132
|
+
&:hover:not(:disabled):not(:focus-visible) {
|
|
133
|
+
--color-border: var(--input-border-hover, var(--border-strong-hover));
|
|
134
|
+
}
|
|
135
|
+
|
|
108
136
|
&:focus-visible {
|
|
109
137
|
@include _form-focus-style;
|
|
110
138
|
}
|
|
@@ -119,6 +147,7 @@
|
|
|
119
147
|
@include cursor-not-allowed;
|
|
120
148
|
--color-bg: var(--bg-sunken);
|
|
121
149
|
background: var(--color-bg);
|
|
150
|
+
box-shadow: none;
|
|
122
151
|
}
|
|
123
152
|
|
|
124
153
|
// Hide native UA clear button on <input type="search"> — we never use it;
|
|
@@ -130,6 +159,8 @@
|
|
|
130
159
|
}
|
|
131
160
|
|
|
132
161
|
@mixin form-textarea {
|
|
162
|
+
// Multi-line text keeps the reading line-height, not the control box.
|
|
163
|
+
line-height: var(--line-height);
|
|
133
164
|
min-height: 6rem;
|
|
134
165
|
resize: vertical;
|
|
135
166
|
|
|
@@ -440,12 +471,13 @@
|
|
|
440
471
|
@include flex;
|
|
441
472
|
@include items-center;
|
|
442
473
|
gap: var(--gap);
|
|
443
|
-
--padding-y: var(--input-padding-y, var(--size-
|
|
474
|
+
--padding-y: var(--input-padding-y, var(--size-xs-up));
|
|
444
475
|
--padding-x: var(--size-md);
|
|
445
476
|
padding: var(--padding-y) var(--padding-x);
|
|
446
477
|
@include cursor-pointer;
|
|
447
478
|
@include transition;
|
|
448
479
|
@include text-sm;
|
|
480
|
+
line-height: var(--control-line-height);
|
|
449
481
|
@include font-medium;
|
|
450
482
|
margin-bottom: 0;
|
|
451
483
|
border-radius: var(--radius);
|
|
@@ -482,7 +514,7 @@
|
|
|
482
514
|
// Lets .error/.success/.warning/.info parents cascade to the checked-
|
|
483
515
|
// state hover via the .success { --color-primary } chain. See
|
|
484
516
|
// _btn.scss for the syntax rationale (number form, not percentage).
|
|
485
|
-
--color-accent-hover: hsl(from var(--color-accent) h s calc(l -
|
|
517
|
+
--color-accent-hover: hsl(from var(--color-accent) h s calc(l + var(--accent-hover-shift)));
|
|
486
518
|
|
|
487
519
|
background-color: var(--color-bg);
|
|
488
520
|
border-color: transparent;
|
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
// Layout — grid, stack, container
|
|
6
6
|
|
|
7
|
+
// Respond to available parent width, including sidebars and panel gutters.
|
|
8
|
+
// The min() allows a single item to shrink below its preferred minimum.
|
|
9
|
+
@mixin grid-auto($min: var(--grid-item-min-width)) {
|
|
10
|
+
display: grid;
|
|
11
|
+
gap: var(--gap);
|
|
12
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, #{$min}), 1fr));
|
|
13
|
+
}
|
|
14
|
+
|
|
7
15
|
@mixin _grid-base {
|
|
8
16
|
display: grid;
|
|
9
17
|
--gap: var(--size-lg);
|
|
@@ -110,6 +118,7 @@
|
|
|
110
118
|
|
|
111
119
|
> * {
|
|
112
120
|
--radius: 0;
|
|
121
|
+
--panel-radius: 0;
|
|
113
122
|
--shadow: none;
|
|
114
123
|
}
|
|
115
124
|
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
// .ln-table__toolbar { @include ln-table-toolbar; }
|
|
23
23
|
//
|
|
24
24
|
// Sort/filter button styling is SHARED via scss/components/_table.scss
|
|
25
|
-
// (.table-sort
|
|
25
|
+
// (.table-sort helper class, [data-ln-table-col-filter] binding + the :has() stack
|
|
26
26
|
// in @mixin table-base). No ln-table-specific sort/filter button mixins here.
|
|
27
27
|
// Under D1 (Option A) the <th> is no longer the sort click target, so no
|
|
28
28
|
// ln-table-specific cursor:pointer / select-none on the <th> is needed.
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
min-width: var(--table-min-width, 768px);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
//
|
|
57
|
-
//
|
|
56
|
+
// Pinned under the sibling toolbar when one exists (ln-table-toolbar-stack).
|
|
57
|
+
// Opaque so scrolled rows never bleed through.
|
|
58
58
|
thead {
|
|
59
|
-
@include sticky-top;
|
|
59
|
+
@include sticky-top(var(--table-toolbar-block-size, 0));
|
|
60
60
|
background: var(--color-bg);
|
|
61
61
|
isolation: isolate;
|
|
62
62
|
}
|
|
@@ -89,7 +89,8 @@
|
|
|
89
89
|
gap: var(--size-md);
|
|
90
90
|
position: sticky;
|
|
91
91
|
top: 0;
|
|
92
|
-
|
|
92
|
+
// One step above the thead: at the table's end the thead slides under it.
|
|
93
|
+
z-index: calc(var(--z-sticky) + 1);
|
|
93
94
|
border-radius: 0;
|
|
94
95
|
background: var(--color-bg);
|
|
95
96
|
border-bottom: var(--border-width) solid var(--border-subtle);
|
|
@@ -99,6 +100,22 @@
|
|
|
99
100
|
font-size: 1rem;
|
|
100
101
|
font-weight: 600;
|
|
101
102
|
color: var(--color-fg);
|
|
103
|
+
// Single line keeps the toolbar at its token block-size.
|
|
104
|
+
@include truncate;
|
|
105
|
+
min-inline-size: 0;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// ─── Toolbar + sticky thead stack ─────────────────────────
|
|
110
|
+
// Applied to the toolbar's parent. The toolbar is one control row, so its
|
|
111
|
+
// block-size is known from tokens; every sticky thead below pins under it.
|
|
112
|
+
// Declared on the parent: the thead is in a sibling subtree.
|
|
113
|
+
|
|
114
|
+
@mixin ln-table-toolbar-stack {
|
|
115
|
+
--table-toolbar-block-size: calc(2 * var(--card-padding-y) + var(--control-line-height) + 2 * var(--size-xs) + 3 * var(--border-width));
|
|
116
|
+
|
|
117
|
+
> :has(+ table) {
|
|
118
|
+
min-block-size: var(--table-toolbar-block-size);
|
|
102
119
|
}
|
|
103
120
|
}
|
|
104
121
|
|
|
@@ -173,16 +190,6 @@
|
|
|
173
190
|
}
|
|
174
191
|
}
|
|
175
192
|
|
|
176
|
-
// ─── Card mode container query ────────────────────────────
|
|
177
|
-
|
|
178
|
-
@mixin ln-table-card-mode {
|
|
179
|
-
@container table (max-width: 640px) {
|
|
180
|
-
colgroup { display: none; }
|
|
181
|
-
table { table-layout: auto !important; }
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
193
|
// ─── Footer ───────────────────────────────────────────────
|
|
187
194
|
|
|
188
195
|
@mixin ln-table-footer {
|
|
@@ -99,6 +99,9 @@
|
|
|
99
99
|
@mixin modal-panel {
|
|
100
100
|
@include section-card;
|
|
101
101
|
margin-bottom: 0;
|
|
102
|
+
// Overlays take the larger radius step — the same corner as a resting
|
|
103
|
+
// card would make the dialog read as another panel, not a layer above.
|
|
104
|
+
border-radius: var(--modal-radius, var(--radius-lg));
|
|
102
105
|
// Explicit role-scale read — modals use max elevation (deeper than
|
|
103
106
|
// the --shadow-floating default used by floating panels).
|
|
104
107
|
box-shadow: var(--shadow-xl);
|
|
@@ -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
|
|
@@ -40,6 +41,7 @@
|
|
|
40
41
|
gap: var(--gap);
|
|
41
42
|
padding-block: var(--padding-y);
|
|
42
43
|
@include typography(body-sm);
|
|
44
|
+
@include font-medium;
|
|
43
45
|
color: var(--color-fg);
|
|
44
46
|
text-decoration: none;
|
|
45
47
|
// Always-present 1px border slot. Color defaults to transparent
|
|
@@ -50,7 +52,8 @@
|
|
|
50
52
|
margin: calc(-1 * var(--border-width));
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
.nav-icon
|
|
55
|
+
.nav-icon,
|
|
56
|
+
a > .ln-icon {
|
|
54
57
|
@include flex-shrink-0;
|
|
55
58
|
@include size(1.25rem);
|
|
56
59
|
}
|
|
@@ -60,15 +63,27 @@
|
|
|
60
63
|
@include truncate;
|
|
61
64
|
}
|
|
62
65
|
|
|
66
|
+
// Trailing counter — <data value="24">24</data> as the last child of a.
|
|
67
|
+
a > data {
|
|
68
|
+
@include count;
|
|
69
|
+
margin-inline-start: auto;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
a[aria-current="page"] > data {
|
|
73
|
+
@include count-solid;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Section heading — small uppercase eyebrow, clearly not a link.
|
|
63
77
|
.nav-section {
|
|
64
78
|
--color-fg: var(--fg-muted);
|
|
65
79
|
--padding-y: var(--size-sm);
|
|
66
80
|
padding-block: var(--padding-y);
|
|
81
|
+
padding-inline: var(--padding-x);
|
|
67
82
|
@include text-xs;
|
|
68
|
-
@include font-
|
|
83
|
+
@include font-semibold;
|
|
69
84
|
color: var(--color-fg);
|
|
70
|
-
@include
|
|
71
|
-
letter-spacing:
|
|
85
|
+
@include uppercase;
|
|
86
|
+
letter-spacing: var(--tracking-wider);
|
|
72
87
|
// Structural margin above section header.
|
|
73
88
|
--margin-block: var(--size-md);
|
|
74
89
|
margin-top: var(--margin-block);
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
@use 'colors' as *;
|
|
5
5
|
@use 'borders' as *;
|
|
6
6
|
@use 'transitions' as *;
|
|
7
|
+
@use 'position' as *;
|
|
7
8
|
|
|
8
9
|
@mixin stat-card {
|
|
9
10
|
--shadow: var(--shadow-resting);
|
|
11
|
+
@include relative;
|
|
10
12
|
@include flex-col;
|
|
11
13
|
--gap: var(--size-xs);
|
|
12
14
|
gap: var(--gap);
|
|
@@ -27,12 +29,31 @@
|
|
|
27
29
|
> [data-ln-stat-label] {
|
|
28
30
|
--color-fg: var(--fg-muted);
|
|
29
31
|
@include typography(label-md);
|
|
32
|
+
@include font-medium;
|
|
30
33
|
color: var(--color-fg);
|
|
31
|
-
text-transform: uppercase;
|
|
32
|
-
letter-spacing: var(--tracking-wide);
|
|
33
34
|
margin: 0;
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
// Icon tile — a direct-child <svg class="ln-icon"> pinned top-right,
|
|
38
|
+
// tinted with the card's accent (tone).
|
|
39
|
+
> .ln-icon {
|
|
40
|
+
position: absolute;
|
|
41
|
+
inset-block-start: var(--padding-y);
|
|
42
|
+
inset-inline-end: var(--padding-x);
|
|
43
|
+
width: 1.25rem;
|
|
44
|
+
height: 1.25rem;
|
|
45
|
+
padding: var(--size-xs-up);
|
|
46
|
+
box-sizing: content-box;
|
|
47
|
+
border-radius: var(--radius);
|
|
48
|
+
background: var(--color-accent-tint-strong);
|
|
49
|
+
color: var(--color-accent);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&:has(> .ln-icon) > [data-ln-stat-label] {
|
|
53
|
+
padding-inline-end: 2.75rem;
|
|
54
|
+
min-block-size: 2rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
36
57
|
> [data-ln-stat-value] {
|
|
37
58
|
@include typography(heading-lg);
|
|
38
59
|
font-weight: var(--font-bold);
|
|
@@ -67,3 +88,13 @@
|
|
|
67
88
|
}
|
|
68
89
|
}
|
|
69
90
|
}
|
|
91
|
+
|
|
92
|
+
// ─── Tone ────────────────────────────────────────────────────────
|
|
93
|
+
// Accent strip on the leading edge in the card's accent colour. The
|
|
94
|
+
// tone itself comes from the semantic-color cascade (--color-primary →
|
|
95
|
+
// --color-accent), e.g. [data-ln-stat-card].success.
|
|
96
|
+
@mixin stat-card-tone {
|
|
97
|
+
--border-inline-start: var(--size-2xs) solid var(--color-accent);
|
|
98
|
+
--color-accent: hsl(var(--color-primary));
|
|
99
|
+
--color-accent-tint-strong: hsl(var(--color-primary-light));
|
|
100
|
+
}
|
|
@@ -6,16 +6,16 @@
|
|
|
6
6
|
@use 'borders' as *;
|
|
7
7
|
@use 'transitions' as *;
|
|
8
8
|
@use 'position' as *;
|
|
9
|
+
@use 'breakpoints' as *;
|
|
9
10
|
@use 'motion' as *;
|
|
10
11
|
@use 'interaction' as *;
|
|
11
12
|
@use 'form' as *;
|
|
12
13
|
@use 'btn' as *;
|
|
13
14
|
@use 'card' as *;
|
|
14
|
-
@use 'ln-table';
|
|
15
15
|
|
|
16
16
|
// ─── Base table ─────────────────────────────────────────────────
|
|
17
17
|
|
|
18
|
-
@mixin table-base($sticky:
|
|
18
|
+
@mixin table-base($sticky: true, $responsive: true) {
|
|
19
19
|
@include w-full;
|
|
20
20
|
background: var(--color-bg);
|
|
21
21
|
--radius: var(--radius-lg);
|
|
@@ -46,23 +46,23 @@
|
|
|
46
46
|
thead {
|
|
47
47
|
--color-bg: var(--bg-sunken);
|
|
48
48
|
background: var(--color-bg);
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
|
|
51
50
|
@if $sticky {
|
|
52
|
-
@include sticky-top;
|
|
51
|
+
@include sticky-top(var(--table-toolbar-block-size, 0));
|
|
53
52
|
}
|
|
54
|
-
}
|
|
55
53
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
// Opaque, so scrolled rows never show through the pinned header.
|
|
55
|
+
th { background: var(--color-bg); }
|
|
56
|
+
|
|
57
|
+
// On the cells: the separate border model ignores row-group borders.
|
|
58
|
+
> tr:last-child > th {
|
|
59
|
+
border-block-end: var(--border-block-end, var(--border-width) solid var(--border-subtle));
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
th {
|
|
64
64
|
@include text-left;
|
|
65
|
-
padding: var(--padding-y) var(--padding-x);
|
|
65
|
+
padding: var(--table-cell-padding-y) var(--table-cell-padding-x);
|
|
66
66
|
@include font-semibold;
|
|
67
67
|
font-size: var(--text-xs);
|
|
68
68
|
letter-spacing: 0.05em;
|
|
@@ -78,11 +78,11 @@
|
|
|
78
78
|
text-overflow: ellipsis;
|
|
79
79
|
|
|
80
80
|
// Shared header-button stack — cascading single vs double action
|
|
81
|
-
&:has(:is([data-ln-sort],
|
|
81
|
+
&:has(:is([data-ln-sort], [data-ln-table-col-filter])) {
|
|
82
82
|
min-width: var(--th-single-action-min-width, 6rem);
|
|
83
83
|
padding-inline-end: calc(var(--padding-x, var(--size-md)) + 2rem);
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
[data-ln-table-col-filter],
|
|
86
86
|
[data-ln-sort] {
|
|
87
87
|
position: absolute;
|
|
88
88
|
top: 50%;
|
|
@@ -92,7 +92,11 @@
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
&:
|
|
95
|
+
&:hover [data-ln-table-col-filter] {
|
|
96
|
+
opacity: 0.7;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
&:has([data-ln-sort]):has([data-ln-table-col-filter]) {
|
|
96
100
|
min-width: var(--th-double-action-min-width, 8.5rem);
|
|
97
101
|
padding-inline-end: calc(var(--padding-x, var(--size-md)) + 3.75rem);
|
|
98
102
|
|
|
@@ -119,7 +123,7 @@
|
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
td {
|
|
122
|
-
padding: var(--padding-y) var(--padding-x);
|
|
126
|
+
padding: var(--table-cell-padding-y) var(--table-cell-padding-x);
|
|
123
127
|
border-block-end: var(--border-width) solid var(--border-subtle);
|
|
124
128
|
font-size: var(--text-sm);
|
|
125
129
|
line-height: var(--line-height);
|
|
@@ -150,7 +154,7 @@
|
|
|
150
154
|
// Sticky section footer inside sticky/enhanced tables
|
|
151
155
|
@if $sticky {
|
|
152
156
|
> footer {
|
|
153
|
-
padding: var(--padding-y) var(--padding-x);
|
|
157
|
+
padding: var(--table-cell-padding-y) var(--table-cell-padding-x);
|
|
154
158
|
border-block-start: var(--border-block-start, var(--border-width) solid var(--color-border));
|
|
155
159
|
--color-bg: var(--bg-sunken);
|
|
156
160
|
background: var(--color-bg);
|
|
@@ -161,52 +165,72 @@
|
|
|
161
165
|
z-index: var(--z-sticky);
|
|
162
166
|
}
|
|
163
167
|
}
|
|
168
|
+
|
|
169
|
+
// Narrow viewports: one record per card. Viewport, not container — a table
|
|
170
|
+
// box cannot be a size container (inner display type table).
|
|
171
|
+
@if $responsive {
|
|
172
|
+
@include mq-down(md) {
|
|
173
|
+
@include table-responsive;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
164
176
|
}
|
|
165
177
|
|
|
166
|
-
// ─── Responsive (
|
|
167
|
-
//
|
|
178
|
+
// ─── Responsive (stacked record cards) ──────────────────────────
|
|
179
|
+
// Applied ON the table. Label column comes from td[data-label]; cells
|
|
180
|
+
// without it span the card (section headers, empty state, checkboxes).
|
|
168
181
|
|
|
169
182
|
@mixin table-responsive {
|
|
170
|
-
|
|
183
|
+
// Drop column geometry: wrapper min-widths, row-height clamp, and
|
|
184
|
+
// ln-table's inline fixed layout + locked colgroup.
|
|
185
|
+
--table-min-width: 0px;
|
|
186
|
+
--density-row-h: auto;
|
|
187
|
+
table-layout: auto !important;
|
|
188
|
+
|
|
189
|
+
// Column-header row only: an in-thead toolbar row (first row) stays.
|
|
190
|
+
> colgroup,
|
|
191
|
+
> thead > tr:last-child {
|
|
171
192
|
@include hidden;
|
|
172
193
|
}
|
|
173
194
|
|
|
174
|
-
|
|
195
|
+
// Flush records: separation lives inside offsetHeight, so ln-table's
|
|
196
|
+
// virtual row-height maths stays exact.
|
|
197
|
+
> tbody > tr {
|
|
175
198
|
@include block;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
@include overflow-hidden;
|
|
199
|
+
border-block-end: var(--border-width-strong) solid var(--color-border);
|
|
200
|
+
|
|
201
|
+
&:last-child {
|
|
202
|
+
border-block-end: none;
|
|
203
|
+
}
|
|
182
204
|
}
|
|
183
205
|
|
|
184
206
|
td {
|
|
185
207
|
@include block;
|
|
186
|
-
|
|
187
|
-
// Stacked rows need taller vertical rhythm than desktop table cells.
|
|
208
|
+
text-align: start;
|
|
188
209
|
--padding-y: var(--size-sm-up);
|
|
189
210
|
--padding-x: var(--size-md);
|
|
190
211
|
padding: var(--padding-y) var(--padding-x);
|
|
191
|
-
|
|
212
|
+
border-block-end: none;
|
|
192
213
|
@include relative;
|
|
193
|
-
|
|
214
|
+
}
|
|
194
215
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
216
|
+
// Outranks table-base's `tr:last-child td` by source order.
|
|
217
|
+
tr > td:not(:last-child) {
|
|
218
|
+
@include border-b;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
td[data-label] {
|
|
222
|
+
text-align: end;
|
|
223
|
+
padding-inline-start: 50%;
|
|
198
224
|
|
|
199
225
|
&::before {
|
|
200
226
|
content: attr(data-label);
|
|
201
227
|
@include absolute;
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
// Geometric — label width less the gutter to value column.
|
|
206
|
-
width: calc(50% - var(--size-lg));
|
|
228
|
+
inset-block: 0;
|
|
229
|
+
inset-inline-start: var(--padding-x);
|
|
230
|
+
inline-size: calc(50% - var(--size-lg));
|
|
207
231
|
@include flex;
|
|
208
232
|
@include items-center;
|
|
209
|
-
|
|
233
|
+
text-align: start;
|
|
210
234
|
@include font-semibold;
|
|
211
235
|
--color-fg: var(--fg-muted);
|
|
212
236
|
color: var(--color-fg);
|
|
@@ -215,6 +239,22 @@
|
|
|
215
239
|
@include truncate;
|
|
216
240
|
}
|
|
217
241
|
}
|
|
242
|
+
|
|
243
|
+
.table-row-actions {
|
|
244
|
+
position: static !important;
|
|
245
|
+
opacity: 1 !important;
|
|
246
|
+
visibility: visible !important;
|
|
247
|
+
pointer-events: auto !important;
|
|
248
|
+
transform: none !important;
|
|
249
|
+
background: transparent !important;
|
|
250
|
+
padding-inline-start: 0 !important;
|
|
251
|
+
justify-content: flex-end;
|
|
252
|
+
margin-block-start: var(--size-xs);
|
|
253
|
+
|
|
254
|
+
&::before {
|
|
255
|
+
display: none !important;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
218
258
|
}
|
|
219
259
|
|
|
220
260
|
// ─── Variants ───────────────────────────────────────────────────
|
|
@@ -293,6 +333,8 @@
|
|
|
293
333
|
@include table-header-btn-base;
|
|
294
334
|
vertical-align: middle;
|
|
295
335
|
position: relative;
|
|
336
|
+
|
|
337
|
+
&.ln-filter-active { @include table-filter-active; }
|
|
296
338
|
}
|
|
297
339
|
|
|
298
340
|
@mixin table-filter-active {
|
|
@@ -57,6 +57,37 @@
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
// ─── Segmented variant ──────────────────────────────────────────
|
|
61
|
+
// Pill track for compact panel-level switches (e.g. in a panel header).
|
|
62
|
+
// Usage: #register-tabs > nav { @include tabs-nav-segmented; }
|
|
63
|
+
@mixin tabs-nav-segmented {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
gap: var(--size-2xs);
|
|
66
|
+
padding: var(--size-2xs);
|
|
67
|
+
border: 0;
|
|
68
|
+
border-radius: var(--radius);
|
|
69
|
+
background: var(--bg-recessed);
|
|
70
|
+
|
|
71
|
+
[data-ln-tab] {
|
|
72
|
+
--padding-y: var(--size-xs);
|
|
73
|
+
--padding-x: var(--size-sm-up);
|
|
74
|
+
margin: 0;
|
|
75
|
+
border-block-end: 0;
|
|
76
|
+
border-radius: calc(var(--radius) - var(--size-2xs));
|
|
77
|
+
|
|
78
|
+
&:hover {
|
|
79
|
+
background: transparent;
|
|
80
|
+
color: var(--color-fg);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
[data-ln-tab][data-active] {
|
|
85
|
+
background: var(--bg-elevated);
|
|
86
|
+
color: var(--color-accent);
|
|
87
|
+
box-shadow: var(--shadow-xs);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
60
91
|
@mixin tabs-panel {
|
|
61
92
|
--padding-y: var(--size-lg);
|
|
62
93
|
--padding-x: var(--size-lg);
|