@0001-labs/design-system-1 0.3.0-alpha.28 → 0.3.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/DS1/0-face/button-label.ts +28 -0
- package/DS1/0-face/calendar.ts +6 -4
- package/DS1/0-face/carousel.ts +70 -0
- package/DS1/0-face/constraint-panel.ts +443 -0
- package/DS1/0-face/constraint-site.ts +201 -0
- package/DS1/0-face/constraints.ts +308 -0
- package/DS1/0-face/copy-text.ts +1 -1
- package/DS1/0-face/cut-fade.ts +312 -0
- package/DS1/0-face/define.ts +30 -2
- package/DS1/0-face/face-correction.ts +96 -0
- package/DS1/0-face/failures.ts +32 -0
- package/DS1/0-face/fault-lines.ts +159 -0
- package/DS1/0-face/feedback-overlays.ts +5 -3
- package/DS1/0-face/feedback.ts +3 -0
- package/DS1/0-face/focus-vision.swift +31 -0
- package/DS1/0-face/focus.ts +181 -0
- package/DS1/0-face/google-face-metrics.json +102 -0
- package/DS1/0-face/grid.ts +61 -4
- package/DS1/0-face/i18n.ts +36 -18
- package/DS1/0-face/layout-inspector.ts +124 -98
- package/DS1/0-face/preference-options.ts +4 -0
- package/DS1/0-face/scaling.ts +21 -3
- package/DS1/0-face/shape.ts +43 -0
- package/DS1/0-face/text-contrast.ts +164 -0
- package/DS1/0-face/theme-bootstrap.js +43 -0
- package/DS1/0-face/toast-queue.ts +7 -1
- package/DS1/0-face/translations/da.json +10 -1
- package/DS1/0-face/translations/de.json +10 -1
- package/DS1/0-face/translations/en.json +10 -1
- package/DS1/0-face/translations/es.json +10 -1
- package/DS1/0-face/translations/fi.json +10 -1
- package/DS1/0-face/translations/fr.json +10 -1
- package/DS1/0-face/translations/is.json +10 -1
- package/DS1/0-face/translations/it.json +10 -1
- package/DS1/0-face/translations/ja.json +10 -1
- package/DS1/0-face/translations/ko.json +10 -1
- package/DS1/0-face/translations/nb.json +10 -1
- package/DS1/0-face/translations/pt-BR.json +10 -1
- package/DS1/0-face/translations/pt.json +10 -1
- package/DS1/0-face/translations/sv.json +10 -1
- package/DS1/0-face/translations/zh.json +10 -1
- package/DS1/0-face/word-wrap.ts +113 -0
- package/DS1/1-root/card.css +47 -20
- package/DS1/1-root/carousel.css +7 -0
- package/DS1/1-root/cjk.css +1 -1
- package/DS1/1-root/component-tokens.css +3 -2
- package/DS1/1-root/context.css +44 -6
- package/DS1/1-root/controls.css +99 -8
- package/DS1/1-root/document.css +9 -1
- package/DS1/1-root/empty.css +46 -5
- package/DS1/1-root/figures.css +50 -3
- package/DS1/1-root/fonts.css +1 -1
- package/DS1/1-root/footer.css +147 -16
- package/DS1/1-root/foundation.ts +60 -0
- package/DS1/1-root/guide.css +35 -0
- package/DS1/1-root/header.css +30 -9
- package/DS1/1-root/material.css +67 -0
- package/DS1/1-root/notice.css +10 -2
- package/DS1/1-root/one.css +15 -7
- package/DS1/1-root/progress.css +9 -1
- package/DS1/1-root/row.css +68 -2
- package/DS1/1-root/table.css +47 -4
- package/DS1/1-root/text.css +26 -0
- package/DS1/2-core/button-split.ts +10 -5
- package/DS1/2-core/chart/chart.css +71 -2
- package/DS1/2-core/chart/grid-chart.ts +2 -1
- package/DS1/2-core/ds-activity.ts +32 -0
- package/DS1/2-core/ds-app-chrome.ts +1 -0
- package/DS1/2-core/ds-avatar.ts +75 -7
- package/DS1/2-core/ds-badge.ts +8 -1
- package/DS1/2-core/ds-button.ts +7 -1
- package/DS1/2-core/ds-chart.ts +184 -49
- package/DS1/2-core/ds-cycle.ts +27 -186
- package/DS1/2-core/ds-device-bezel.ts +1 -0
- package/DS1/2-core/ds-empty.ts +6 -4
- package/DS1/2-core/ds-input.ts +23 -3
- package/DS1/2-core/ds-message.ts +22 -0
- package/DS1/2-core/ds-number.ts +349 -0
- package/DS1/2-core/ds-progress.ts +3 -0
- package/DS1/2-core/ds-radio.ts +3 -0
- package/DS1/2-core/ds-stat.ts +3 -0
- package/DS1/2-core/ds-switch.ts +5 -1
- package/DS1/2-core/ds-tag.ts +9 -2
- package/DS1/2-core/ds-text.ts +7 -0
- package/DS1/2-core/ds-token.ts +3 -0
- package/DS1/2-core/ds-tooltip.ts +17 -2
- package/DS1/2-core/ds-window.ts +1 -0
- package/DS1/2-core/generated/ds-icon-map.ts +47 -5
- package/DS1/2-core/generated/icons-extra.ts +24 -3
- package/DS1/2-core/generated/icons-immediate.ts +3 -3
- package/DS1/2-core/number-expression.ts +64 -0
- package/DS1/2-core/styles/ds-activity.css +16 -0
- package/DS1/2-core/styles/ds-badge.css +4 -1
- package/DS1/2-core/styles/ds-button-host.css +47 -13
- package/DS1/2-core/styles/ds-button-split.css +8 -0
- package/DS1/2-core/styles/ds-button.css +94 -20
- package/DS1/2-core/styles/ds-card.css +6 -0
- package/DS1/2-core/styles/ds-checkbox.css +20 -8
- package/DS1/2-core/styles/ds-image.css +2 -1
- package/DS1/2-core/styles/ds-input.css +37 -4
- package/DS1/2-core/styles/ds-number.css +127 -0
- package/DS1/2-core/styles/ds-radio.css +4 -1
- package/DS1/2-core/styles/ds-switch.css +34 -4
- package/DS1/2-core/styles/ds-tag.css +34 -6
- package/DS1/2-core/styles/ds-text.css +13 -4
- package/DS1/2-core/styles/ds-token.css +4 -1
- package/DS1/2-core/styles/ds-tooltip.css +13 -7
- package/DS1/3-unit/calendar-base.ts +5 -2
- package/DS1/3-unit/context-trigger.ts +29 -2
- package/DS1/3-unit/ds-calendar.ts +711 -37
- package/DS1/3-unit/ds-carousel.ts +13 -1
- package/DS1/3-unit/ds-context.ts +40 -2
- package/DS1/3-unit/ds-form.ts +47 -11
- package/DS1/3-unit/ds-list.ts +31 -3
- package/DS1/3-unit/ds-matrix.ts +3 -0
- package/DS1/3-unit/ds-menu.ts +9 -5
- package/DS1/3-unit/ds-row.ts +17 -2
- package/DS1/3-unit/ds-select.ts +1 -1
- package/DS1/3-unit/ds-sidebar.ts +18 -3
- package/DS1/3-unit/ds-table-of-contents.ts +166 -0
- package/DS1/3-unit/ds-table.ts +2 -1
- package/DS1/3-unit/ds-tabs.ts +40 -2
- package/DS1/3-unit/styles/ds-calendar.css +356 -42
- package/DS1/3-unit/styles/ds-context.css +38 -0
- package/DS1/3-unit/styles/ds-list.css +26 -1
- package/DS1/3-unit/styles/ds-matrix.css +4 -1
- package/DS1/3-unit/styles/ds-row.css +39 -0
- package/DS1/3-unit/styles/ds-select.css +22 -12
- package/DS1/3-unit/styles/ds-sidebar.css +16 -2
- package/DS1/3-unit/styles/ds-table-of-contents.css +40 -0
- package/DS1/3-unit/styles/ds-tabs.css +95 -0
- package/DS1/4-page/ds-container.ts +2 -1
- package/DS1/4-page/ds-document.ts +3 -0
- package/DS1/4-page/ds-footer.ts +93 -18
- package/DS1/4-page/ds-header.ts +5 -1
- package/DS1/4-page/ds-overlay.ts +8 -3
- package/DS1/4-page/ds-page.ts +22 -1
- package/DS1/4-page/email.ts +7 -4
- package/DS1/4-page/styles/ds-container.css +0 -1
- package/DS1/4-page/styles/ds-overlay.css +7 -0
- package/DS1/4-page/styles/ds-page.css +10 -0
- package/DS1/5-visual-kit/app-chrome.ts +129 -0
- package/DS1/5-visual-kit/bezels.ts +394 -0
- package/DS1/5-visual-kit/browser-icons.LICENSE +53 -0
- package/DS1/5-visual-kit/browser-icons.ts +47 -0
- package/DS1/5-visual-kit/browser-styles.ts +53 -0
- package/DS1/5-visual-kit/device-bezel.ts +55 -0
- package/DS1/5-visual-kit/instagram-frame.ts +15 -0
- package/DS1/5-visual-kit/instagram.ts +41 -0
- package/DS1/5-visual-kit/mobile-chrome.ts +25 -0
- package/DS1/5-visual-kit/native-icon-paths.ts +145 -0
- package/DS1/5-visual-kit/window.ts +22 -0
- package/DS1/components.ts +1 -0
- package/DS1/index.ts +14 -1
- package/DS1/react/choice.ts +4 -2
- package/DS1/react/context.ts +11 -6
- package/DS1/react/empty.ts +2 -2
- package/DS1/react/footer.ts +5 -5
- package/DS1/react/header.ts +1 -1
- package/DS1/react/message.ts +4 -2
- package/DS1/react/number.ts +53 -0
- package/DS1/react/sidebar.ts +4 -2
- package/DS1/react/table-of-contents.ts +28 -0
- package/DS1/x-flag/LICENSE.md +26 -0
- package/DS1/x-flag/ac.svg +1 -0
- package/DS1/x-flag/ad.svg +1 -0
- package/DS1/x-flag/ae.svg +1 -0
- package/DS1/x-flag/af.svg +1 -0
- package/DS1/x-flag/ag.svg +1 -0
- package/DS1/x-flag/ai.svg +1 -0
- package/DS1/x-flag/al.svg +1 -0
- package/DS1/x-flag/am.svg +1 -0
- package/DS1/x-flag/ao.svg +1 -0
- package/DS1/x-flag/aq.svg +1 -0
- package/DS1/x-flag/ar.svg +1 -0
- package/DS1/x-flag/as.svg +1 -0
- package/DS1/x-flag/at.svg +1 -0
- package/DS1/x-flag/au.svg +1 -0
- package/DS1/x-flag/aw.svg +1 -0
- package/DS1/x-flag/ax.svg +1 -0
- package/DS1/x-flag/az.svg +1 -0
- package/DS1/x-flag/ba.svg +1 -0
- package/DS1/x-flag/bb.svg +1 -0
- package/DS1/x-flag/bd.svg +1 -0
- package/DS1/x-flag/be.svg +1 -0
- package/DS1/x-flag/bf.svg +1 -0
- package/DS1/x-flag/bg.svg +1 -0
- package/DS1/x-flag/bh.svg +1 -0
- package/DS1/x-flag/bi.svg +1 -0
- package/DS1/x-flag/bj.svg +1 -0
- package/DS1/x-flag/bl.svg +1 -0
- package/DS1/x-flag/bm.svg +1 -0
- package/DS1/x-flag/bn.svg +1 -0
- package/DS1/x-flag/bo.svg +1 -0
- package/DS1/x-flag/bq-bo.svg +1 -0
- package/DS1/x-flag/bq-sa.svg +1 -0
- package/DS1/x-flag/bq-se.svg +1 -0
- package/DS1/x-flag/bq.svg +1 -0
- package/DS1/x-flag/br.svg +1 -0
- package/DS1/x-flag/bs.svg +1 -0
- package/DS1/x-flag/bt.svg +1 -0
- package/DS1/x-flag/bv.svg +1 -0
- package/DS1/x-flag/bw.svg +1 -0
- package/DS1/x-flag/by.svg +1 -0
- package/DS1/x-flag/bz.svg +1 -0
- package/DS1/x-flag/ca.svg +1 -0
- package/DS1/x-flag/cc.svg +1 -0
- package/DS1/x-flag/cd.svg +1 -0
- package/DS1/x-flag/cf.svg +1 -0
- package/DS1/x-flag/cg.svg +1 -0
- package/DS1/x-flag/ch.svg +1 -0
- package/DS1/x-flag/ci.svg +1 -0
- package/DS1/x-flag/ck.svg +1 -0
- package/DS1/x-flag/cl.svg +1 -0
- package/DS1/x-flag/cm.svg +1 -0
- package/DS1/x-flag/cn.svg +1 -0
- package/DS1/x-flag/co.svg +1 -0
- package/DS1/x-flag/cr.svg +1 -0
- package/DS1/x-flag/cu.svg +1 -0
- package/DS1/x-flag/cv.svg +1 -0
- package/DS1/x-flag/cw.svg +1 -0
- package/DS1/x-flag/cx.svg +1 -0
- package/DS1/x-flag/cy.svg +1 -0
- package/DS1/x-flag/cz.svg +1 -0
- package/DS1/x-flag/de.svg +1 -0
- package/DS1/x-flag/dj.svg +1 -0
- package/DS1/x-flag/dk.svg +1 -0
- package/DS1/x-flag/dm.svg +1 -0
- package/DS1/x-flag/do.svg +1 -0
- package/DS1/x-flag/dz.svg +1 -0
- package/DS1/x-flag/ec.svg +1 -0
- package/DS1/x-flag/ee.svg +1 -0
- package/DS1/x-flag/eg.svg +1 -0
- package/DS1/x-flag/eh.svg +1 -0
- package/DS1/x-flag/er.svg +1 -0
- package/DS1/x-flag/es-ct.svg +1 -0
- package/DS1/x-flag/es.svg +1 -0
- package/DS1/x-flag/et.svg +1 -0
- package/DS1/x-flag/eu.svg +1 -0
- package/DS1/x-flag/fi.svg +1 -0
- package/DS1/x-flag/fj.svg +1 -0
- package/DS1/x-flag/fk.svg +1 -0
- package/DS1/x-flag/fm.svg +1 -0
- package/DS1/x-flag/fo.svg +1 -0
- package/DS1/x-flag/fr.svg +1 -0
- package/DS1/x-flag/ga.svg +1 -0
- package/DS1/x-flag/gb-eng.svg +1 -0
- package/DS1/x-flag/gb-nir.svg +1 -0
- package/DS1/x-flag/gb-sct.svg +1 -0
- package/DS1/x-flag/gb-wls.svg +1 -0
- package/DS1/x-flag/gb.svg +1 -0
- package/DS1/x-flag/gd.svg +1 -0
- package/DS1/x-flag/ge.svg +1 -0
- package/DS1/x-flag/gf.svg +1 -0
- package/DS1/x-flag/gg.svg +1 -0
- package/DS1/x-flag/gh.svg +1 -0
- package/DS1/x-flag/gi.svg +1 -0
- package/DS1/x-flag/gl.svg +1 -0
- package/DS1/x-flag/gm.svg +1 -0
- package/DS1/x-flag/gn.svg +1 -0
- package/DS1/x-flag/gp.svg +1 -0
- package/DS1/x-flag/gq.svg +1 -0
- package/DS1/x-flag/gr.svg +1 -0
- package/DS1/x-flag/gs.svg +1 -0
- package/DS1/x-flag/gt.svg +1 -0
- package/DS1/x-flag/gu.svg +1 -0
- package/DS1/x-flag/gw.svg +1 -0
- package/DS1/x-flag/gy.svg +1 -0
- package/DS1/x-flag/hk.svg +1 -0
- package/DS1/x-flag/hm.svg +1 -0
- package/DS1/x-flag/hn.svg +1 -0
- package/DS1/x-flag/hr.svg +1 -0
- package/DS1/x-flag/ht.svg +1 -0
- package/DS1/x-flag/hu.svg +1 -0
- package/DS1/x-flag/ic.svg +1 -0
- package/DS1/x-flag/id.svg +1 -0
- package/DS1/x-flag/ie.svg +1 -0
- package/DS1/x-flag/il.svg +1 -0
- package/DS1/x-flag/im.svg +1 -0
- package/DS1/x-flag/in.svg +1 -0
- package/DS1/x-flag/io.svg +1 -0
- package/DS1/x-flag/iq.svg +1 -0
- package/DS1/x-flag/ir.svg +1 -0
- package/DS1/x-flag/is.svg +1 -0
- package/DS1/x-flag/it.svg +1 -0
- package/DS1/x-flag/je.svg +1 -0
- package/DS1/x-flag/jm.svg +1 -0
- package/DS1/x-flag/jo.svg +1 -0
- package/DS1/x-flag/jp.svg +1 -0
- package/DS1/x-flag/ke.svg +1 -0
- package/DS1/x-flag/kg.svg +1 -0
- package/DS1/x-flag/kh.svg +1 -0
- package/DS1/x-flag/ki.svg +1 -0
- package/DS1/x-flag/km.svg +1 -0
- package/DS1/x-flag/kn.svg +1 -0
- package/DS1/x-flag/kp.svg +1 -0
- package/DS1/x-flag/kr.svg +1 -0
- package/DS1/x-flag/kw.svg +1 -0
- package/DS1/x-flag/ky.svg +1 -0
- package/DS1/x-flag/kz.svg +1 -0
- package/DS1/x-flag/la.svg +1 -0
- package/DS1/x-flag/lb.svg +1 -0
- package/DS1/x-flag/lc.svg +1 -0
- package/DS1/x-flag/li.svg +1 -0
- package/DS1/x-flag/lk.svg +1 -0
- package/DS1/x-flag/lr.svg +1 -0
- package/DS1/x-flag/ls.svg +1 -0
- package/DS1/x-flag/lt.svg +1 -0
- package/DS1/x-flag/lu.svg +1 -0
- package/DS1/x-flag/lv.svg +1 -0
- package/DS1/x-flag/ly.svg +1 -0
- package/DS1/x-flag/ma.svg +1 -0
- package/DS1/x-flag/mc.svg +1 -0
- package/DS1/x-flag/md.svg +1 -0
- package/DS1/x-flag/me.svg +1 -0
- package/DS1/x-flag/mf.svg +1 -0
- package/DS1/x-flag/mg.svg +1 -0
- package/DS1/x-flag/mh.svg +1 -0
- package/DS1/x-flag/mk.svg +1 -0
- package/DS1/x-flag/ml.svg +1 -0
- package/DS1/x-flag/mm.svg +1 -0
- package/DS1/x-flag/mn.svg +1 -0
- package/DS1/x-flag/mo.svg +1 -0
- package/DS1/x-flag/mp.svg +1 -0
- package/DS1/x-flag/mq.svg +1 -0
- package/DS1/x-flag/mr.svg +1 -0
- package/DS1/x-flag/ms.svg +1 -0
- package/DS1/x-flag/mt.svg +1 -0
- package/DS1/x-flag/mu.svg +1 -0
- package/DS1/x-flag/mv.svg +1 -0
- package/DS1/x-flag/mw.svg +1 -0
- package/DS1/x-flag/mx.svg +1 -0
- package/DS1/x-flag/my.svg +1 -0
- package/DS1/x-flag/mz.svg +1 -0
- package/DS1/x-flag/na.svg +1 -0
- package/DS1/x-flag/nc.svg +1 -0
- package/DS1/x-flag/ne.svg +1 -0
- package/DS1/x-flag/nf.svg +1 -0
- package/DS1/x-flag/ng.svg +1 -0
- package/DS1/x-flag/ni.svg +1 -0
- package/DS1/x-flag/nl.svg +1 -0
- package/DS1/x-flag/no.svg +1 -0
- package/DS1/x-flag/np.svg +1 -0
- package/DS1/x-flag/nr.svg +1 -0
- package/DS1/x-flag/nu.svg +1 -0
- package/DS1/x-flag/nz.svg +1 -0
- package/DS1/x-flag/om.svg +1 -0
- package/DS1/x-flag/pa.svg +1 -0
- package/DS1/x-flag/pe.svg +1 -0
- package/DS1/x-flag/pf.svg +1 -0
- package/DS1/x-flag/pg.svg +1 -0
- package/DS1/x-flag/ph.svg +1 -0
- package/DS1/x-flag/pk.svg +1 -0
- package/DS1/x-flag/pl.svg +1 -0
- package/DS1/x-flag/pm.svg +1 -0
- package/DS1/x-flag/pn.svg +1 -0
- package/DS1/x-flag/pr.svg +1 -0
- package/DS1/x-flag/ps.svg +1 -0
- package/DS1/x-flag/pt.svg +1 -0
- package/DS1/x-flag/pw.svg +1 -0
- package/DS1/x-flag/py.svg +1 -0
- package/DS1/x-flag/qa.svg +1 -0
- package/DS1/x-flag/re.svg +1 -0
- package/DS1/x-flag/ro.svg +1 -0
- package/DS1/x-flag/rs.svg +1 -0
- package/DS1/x-flag/ru.svg +1 -0
- package/DS1/x-flag/rw.svg +1 -0
- package/DS1/x-flag/sa.svg +1 -0
- package/DS1/x-flag/sb.svg +1 -0
- package/DS1/x-flag/sc.svg +1 -0
- package/DS1/x-flag/sd.svg +1 -0
- package/DS1/x-flag/se.svg +1 -0
- package/DS1/x-flag/sg.svg +1 -0
- package/DS1/x-flag/sh.svg +1 -0
- package/DS1/x-flag/si.svg +1 -0
- package/DS1/x-flag/sj.svg +1 -0
- package/DS1/x-flag/sk.svg +1 -0
- package/DS1/x-flag/sl.svg +1 -0
- package/DS1/x-flag/sm.svg +1 -0
- package/DS1/x-flag/sn.svg +1 -0
- package/DS1/x-flag/so.svg +1 -0
- package/DS1/x-flag/sr.svg +1 -0
- package/DS1/x-flag/ss.svg +1 -0
- package/DS1/x-flag/st.svg +1 -0
- package/DS1/x-flag/sv.svg +1 -0
- package/DS1/x-flag/sx.svg +1 -0
- package/DS1/x-flag/sy.svg +1 -0
- package/DS1/x-flag/sz.svg +1 -0
- package/DS1/x-flag/ta.svg +1 -0
- package/DS1/x-flag/tc.svg +1 -0
- package/DS1/x-flag/td.svg +1 -0
- package/DS1/x-flag/tf.svg +1 -0
- package/DS1/x-flag/tg.svg +1 -0
- package/DS1/x-flag/th.svg +1 -0
- package/DS1/x-flag/tj.svg +1 -0
- package/DS1/x-flag/tk.svg +1 -0
- package/DS1/x-flag/tl.svg +1 -0
- package/DS1/x-flag/tm.svg +1 -0
- package/DS1/x-flag/tn.svg +1 -0
- package/DS1/x-flag/to.svg +1 -0
- package/DS1/x-flag/tr.svg +1 -0
- package/DS1/x-flag/tt.svg +1 -0
- package/DS1/x-flag/tv.svg +1 -0
- package/DS1/x-flag/tw.svg +1 -0
- package/DS1/x-flag/tz.svg +1 -0
- package/DS1/x-flag/ua.svg +1 -0
- package/DS1/x-flag/ug.svg +1 -0
- package/DS1/x-flag/um.svg +1 -0
- package/DS1/x-flag/us.svg +1 -0
- package/DS1/x-flag/uy.svg +1 -0
- package/DS1/x-flag/uz.svg +1 -0
- package/DS1/x-flag/va.svg +1 -0
- package/DS1/x-flag/vc.svg +1 -0
- package/DS1/x-flag/ve.svg +1 -0
- package/DS1/x-flag/vg.svg +1 -0
- package/DS1/x-flag/vi.svg +1 -0
- package/DS1/x-flag/vn.svg +1 -0
- package/DS1/x-flag/vu.svg +1 -0
- package/DS1/x-flag/wf.svg +1 -0
- package/DS1/x-flag/ws.svg +1 -0
- package/DS1/x-flag/xk.svg +1 -0
- package/DS1/x-flag/ye.svg +1 -0
- package/DS1/x-flag/yt.svg +1 -0
- package/DS1/x-flag/za.svg +1 -0
- package/DS1/x-flag/zm.svg +1 -0
- package/DS1/x-flag/zw.svg +1 -0
- package/DS1/x-icon/android.svg +9 -0
- package/DS1/x-icon/arrange-check.svg +1 -1
- package/DS1/x-icon/arrange-page.svg +1 -1
- package/DS1/x-icon/chrome.svg +7 -0
- package/DS1/x-icon/edge-brand.svg +6 -0
- package/DS1/x-icon/firefox.svg +4 -0
- package/DS1/x-icon/health.svg +3 -0
- package/DS1/x-icon/left.svg +2 -3
- package/DS1/x-icon/linux.svg +1 -0
- package/DS1/x-icon/material.svg +1 -0
- package/DS1/x-icon/milestone-planned.svg +3 -0
- package/DS1/x-icon/milestone.svg +3 -0
- package/DS1/x-icon/more.svg +1 -5
- package/DS1/x-icon/network.svg +3 -0
- package/DS1/x-icon/opera.svg +4 -0
- package/DS1/x-icon/prediction.svg +3 -0
- package/DS1/x-icon/priority-high.svg +3 -0
- package/DS1/x-icon/priority-low.svg +3 -0
- package/DS1/x-icon/priority-medium.svg +3 -0
- package/DS1/x-icon/project.svg +3 -0
- package/DS1/x-icon/redo.svg +2 -2
- package/DS1/x-icon/repeat-small.svg +3 -0
- package/DS1/x-icon/safari.svg +4 -0
- package/DS1/x-icon/scaling.svg +3 -0
- package/DS1/x-icon/tabs.svg +4 -0
- package/DS1/x-icon/windows.svg +5 -0
- package/README.md +3 -3
- package/dist/0-face/button-label.d.ts +5 -0
- package/dist/0-face/button-label.d.ts.map +1 -0
- package/dist/0-face/button-label.js +31 -0
- package/dist/0-face/calendar.d.ts +1 -1
- package/dist/0-face/calendar.d.ts.map +1 -1
- package/dist/0-face/calendar.js +6 -3
- package/dist/0-face/carousel.d.ts +9 -0
- package/dist/0-face/carousel.d.ts.map +1 -1
- package/dist/0-face/carousel.js +80 -0
- package/dist/0-face/constraint-panel.d.ts +43 -0
- package/dist/0-face/constraint-panel.d.ts.map +1 -0
- package/dist/0-face/constraint-panel.js +451 -0
- package/dist/0-face/constraint-site.d.ts +73 -0
- package/dist/0-face/constraint-site.d.ts.map +1 -0
- package/dist/0-face/constraint-site.js +186 -0
- package/dist/0-face/constraints.d.ts +47 -0
- package/dist/0-face/constraints.d.ts.map +1 -0
- package/dist/0-face/constraints.js +274 -0
- package/dist/0-face/copy-text.js +1 -1
- package/dist/0-face/cut-fade.d.ts +112 -0
- package/dist/0-face/cut-fade.d.ts.map +1 -0
- package/dist/0-face/cut-fade.js +274 -0
- package/dist/0-face/define.d.ts.map +1 -1
- package/dist/0-face/define.js +24 -3
- package/dist/0-face/face-correction.d.ts +51 -0
- package/dist/0-face/face-correction.d.ts.map +1 -0
- package/dist/0-face/face-correction.js +80 -0
- package/dist/0-face/failures.d.ts +16 -0
- package/dist/0-face/failures.d.ts.map +1 -0
- package/dist/0-face/failures.js +21 -0
- package/dist/0-face/fault-lines.d.ts +20 -0
- package/dist/0-face/fault-lines.d.ts.map +1 -0
- package/dist/0-face/fault-lines.js +172 -0
- package/dist/0-face/feedback-overlays.d.ts.map +1 -1
- package/dist/0-face/feedback-overlays.js +5 -3
- package/dist/0-face/feedback.d.ts +2 -0
- package/dist/0-face/feedback.d.ts.map +1 -1
- package/dist/0-face/feedback.js +1 -0
- package/dist/0-face/focus.d.ts +71 -0
- package/dist/0-face/focus.d.ts.map +1 -0
- package/dist/0-face/focus.js +196 -0
- package/dist/0-face/grid.d.ts +11 -1
- package/dist/0-face/grid.d.ts.map +1 -1
- package/dist/0-face/grid.js +90 -4
- package/dist/0-face/i18n.d.ts.map +1 -1
- package/dist/0-face/i18n.js +38 -16
- package/dist/0-face/layout-inspector.d.ts +5 -1
- package/dist/0-face/layout-inspector.d.ts.map +1 -1
- package/dist/0-face/layout-inspector.js +130 -104
- package/dist/0-face/preference-options.d.ts +4 -0
- package/dist/0-face/preference-options.d.ts.map +1 -1
- package/dist/0-face/scaling.d.ts +8 -1
- package/dist/0-face/scaling.d.ts.map +1 -1
- package/dist/0-face/scaling.js +19 -2
- package/dist/0-face/shape.d.ts +35 -0
- package/dist/0-face/shape.d.ts.map +1 -0
- package/dist/0-face/shape.js +23 -0
- package/dist/0-face/text-contrast.d.ts +22 -0
- package/dist/0-face/text-contrast.d.ts.map +1 -0
- package/dist/0-face/text-contrast.js +178 -0
- package/dist/0-face/theme-bootstrap.js +56 -0
- package/dist/0-face/toast-queue.d.ts +4 -0
- package/dist/0-face/toast-queue.d.ts.map +1 -1
- package/dist/0-face/toast-queue.js +4 -1
- package/dist/0-face/translations/da.json +10 -1
- package/dist/0-face/translations/de.json +10 -1
- package/dist/0-face/translations/en.json +10 -1
- package/dist/0-face/translations/es.json +10 -1
- package/dist/0-face/translations/fi.json +10 -1
- package/dist/0-face/translations/fr.json +10 -1
- package/dist/0-face/translations/is.json +10 -1
- package/dist/0-face/translations/it.json +10 -1
- package/dist/0-face/translations/ja.json +10 -1
- package/dist/0-face/translations/ko.json +10 -1
- package/dist/0-face/translations/nb.json +10 -1
- package/dist/0-face/translations/pt-BR.json +10 -1
- package/dist/0-face/translations/pt.json +10 -1
- package/dist/0-face/translations/sv.json +10 -1
- package/dist/0-face/translations/zh.json +10 -1
- package/dist/0-face/word-wrap.d.ts +6 -0
- package/dist/0-face/word-wrap.d.ts.map +1 -0
- package/dist/0-face/word-wrap.js +119 -0
- package/dist/1-root/foundation.d.ts +12 -0
- package/dist/1-root/foundation.d.ts.map +1 -0
- package/dist/1-root/foundation.js +59 -0
- package/dist/2-core/button-split.d.ts +1 -0
- package/dist/2-core/button-split.d.ts.map +1 -1
- package/dist/2-core/button-split.js +9 -4
- package/dist/2-core/chart/grid-chart.d.ts +2 -0
- package/dist/2-core/chart/grid-chart.d.ts.map +1 -1
- package/dist/2-core/chart/grid-chart.js +2 -1
- package/dist/2-core/ds-activity.d.ts +25 -0
- package/dist/2-core/ds-activity.d.ts.map +1 -0
- package/dist/2-core/ds-activity.js +28 -0
- package/dist/2-core/ds-app-chrome.d.ts +2 -0
- package/dist/2-core/ds-app-chrome.d.ts.map +1 -0
- package/dist/2-core/ds-app-chrome.js +1 -0
- package/dist/2-core/ds-avatar.d.ts +12 -0
- package/dist/2-core/ds-avatar.d.ts.map +1 -1
- package/dist/2-core/ds-avatar.js +86 -7
- package/dist/2-core/ds-badge.d.ts +7 -1
- package/dist/2-core/ds-badge.d.ts.map +1 -1
- package/dist/2-core/ds-badge.js +8 -1
- package/dist/2-core/ds-button.d.ts +12 -0
- package/dist/2-core/ds-button.d.ts.map +1 -1
- package/dist/2-core/ds-button.js +4 -0
- package/dist/2-core/ds-chart.d.ts +28 -3
- package/dist/2-core/ds-chart.d.ts.map +1 -1
- package/dist/2-core/ds-chart.js +110 -130
- package/dist/2-core/ds-cycle.d.ts +2 -2
- package/dist/2-core/ds-cycle.d.ts.map +1 -1
- package/dist/2-core/ds-cycle.js +36 -171
- package/dist/2-core/ds-device-bezel.d.ts +2 -0
- package/dist/2-core/ds-device-bezel.d.ts.map +1 -0
- package/dist/2-core/ds-device-bezel.js +1 -0
- package/dist/2-core/ds-empty.d.ts +2 -2
- package/dist/2-core/ds-empty.d.ts.map +1 -1
- package/dist/2-core/ds-empty.js +6 -4
- package/dist/2-core/ds-input.d.ts +7 -0
- package/dist/2-core/ds-input.d.ts.map +1 -1
- package/dist/2-core/ds-input.js +23 -3
- package/dist/2-core/ds-message.d.ts +11 -0
- package/dist/2-core/ds-message.d.ts.map +1 -1
- package/dist/2-core/ds-message.js +18 -0
- package/dist/2-core/ds-number.d.ts +86 -0
- package/dist/2-core/ds-number.d.ts.map +1 -0
- package/dist/2-core/ds-number.js +326 -0
- package/dist/2-core/ds-progress.d.ts +3 -0
- package/dist/2-core/ds-progress.d.ts.map +1 -1
- package/dist/2-core/ds-progress.js +3 -0
- package/dist/2-core/ds-radio.d.ts +3 -0
- package/dist/2-core/ds-radio.d.ts.map +1 -1
- package/dist/2-core/ds-radio.js +10 -1
- package/dist/2-core/ds-stat.d.ts +3 -0
- package/dist/2-core/ds-stat.d.ts.map +1 -1
- package/dist/2-core/ds-stat.js +3 -0
- package/dist/2-core/ds-switch.d.ts +14 -1
- package/dist/2-core/ds-switch.d.ts.map +1 -1
- package/dist/2-core/ds-switch.js +3 -1
- package/dist/2-core/ds-tag.d.ts +8 -1
- package/dist/2-core/ds-tag.d.ts.map +1 -1
- package/dist/2-core/ds-tag.js +12 -2
- package/dist/2-core/ds-text.d.ts +7 -0
- package/dist/2-core/ds-text.d.ts.map +1 -1
- package/dist/2-core/ds-text.js +7 -0
- package/dist/2-core/ds-token.d.ts +3 -0
- package/dist/2-core/ds-token.d.ts.map +1 -1
- package/dist/2-core/ds-token.js +3 -0
- package/dist/2-core/ds-tooltip.d.ts.map +1 -1
- package/dist/2-core/ds-tooltip.js +23 -2
- package/dist/2-core/ds-window.d.ts +2 -0
- package/dist/2-core/ds-window.d.ts.map +1 -0
- package/dist/2-core/ds-window.js +1 -0
- package/dist/2-core/generated/ds-icon-map.d.ts +27 -6
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
- package/dist/2-core/generated/ds-icon-map.js +47 -5
- package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
- package/dist/2-core/generated/icons-extra.js +24 -3
- package/dist/2-core/generated/icons-immediate.d.ts +1 -1
- package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
- package/dist/2-core/generated/icons-immediate.js +3 -3
- package/dist/2-core/number-expression.d.ts +12 -0
- package/dist/2-core/number-expression.d.ts.map +1 -0
- package/dist/2-core/number-expression.js +82 -0
- package/dist/3-unit/calendar-base.d.ts +5 -0
- package/dist/3-unit/calendar-base.d.ts.map +1 -1
- package/dist/3-unit/calendar-base.js +3 -2
- package/dist/3-unit/context-trigger.d.ts.map +1 -1
- package/dist/3-unit/context-trigger.js +32 -2
- package/dist/3-unit/ds-calendar.d.ts +197 -4
- package/dist/3-unit/ds-calendar.d.ts.map +1 -1
- package/dist/3-unit/ds-calendar.js +687 -45
- package/dist/3-unit/ds-carousel.d.ts +3 -0
- package/dist/3-unit/ds-carousel.d.ts.map +1 -1
- package/dist/3-unit/ds-carousel.js +13 -1
- package/dist/3-unit/ds-context.d.ts +18 -1
- package/dist/3-unit/ds-context.d.ts.map +1 -1
- package/dist/3-unit/ds-context.js +37 -1
- package/dist/3-unit/ds-form.d.ts +9 -0
- package/dist/3-unit/ds-form.d.ts.map +1 -1
- package/dist/3-unit/ds-form.js +52 -11
- package/dist/3-unit/ds-list.d.ts +20 -1
- package/dist/3-unit/ds-list.d.ts.map +1 -1
- package/dist/3-unit/ds-list.js +31 -3
- package/dist/3-unit/ds-matrix.d.ts +3 -0
- package/dist/3-unit/ds-matrix.d.ts.map +1 -1
- package/dist/3-unit/ds-matrix.js +3 -0
- package/dist/3-unit/ds-menu.d.ts.map +1 -1
- package/dist/3-unit/ds-menu.js +17 -1
- package/dist/3-unit/ds-row.d.ts +13 -0
- package/dist/3-unit/ds-row.d.ts.map +1 -1
- package/dist/3-unit/ds-row.js +15 -2
- package/dist/3-unit/ds-select.js +1 -1
- package/dist/3-unit/ds-sidebar.d.ts +17 -0
- package/dist/3-unit/ds-sidebar.d.ts.map +1 -1
- package/dist/3-unit/ds-sidebar.js +14 -3
- package/dist/3-unit/ds-table-of-contents.d.ts +68 -0
- package/dist/3-unit/ds-table-of-contents.d.ts.map +1 -0
- package/dist/3-unit/ds-table-of-contents.js +190 -0
- package/dist/3-unit/ds-table.d.ts.map +1 -1
- package/dist/3-unit/ds-table.js +2 -1
- package/dist/3-unit/ds-tabs.d.ts +32 -1
- package/dist/3-unit/ds-tabs.d.ts.map +1 -1
- package/dist/3-unit/ds-tabs.js +39 -1
- package/dist/4-page/ds-container.d.ts.map +1 -1
- package/dist/4-page/ds-container.js +2 -1
- package/dist/4-page/ds-document.d.ts +3 -0
- package/dist/4-page/ds-document.d.ts.map +1 -1
- package/dist/4-page/ds-document.js +3 -0
- package/dist/4-page/ds-footer.d.ts +47 -7
- package/dist/4-page/ds-footer.d.ts.map +1 -1
- package/dist/4-page/ds-footer.js +58 -14
- package/dist/4-page/ds-header.d.ts +6 -0
- package/dist/4-page/ds-header.d.ts.map +1 -1
- package/dist/4-page/ds-header.js +4 -1
- package/dist/4-page/ds-overlay.d.ts +2 -2
- package/dist/4-page/ds-overlay.d.ts.map +1 -1
- package/dist/4-page/ds-overlay.js +8 -3
- package/dist/4-page/ds-page.d.ts +12 -0
- package/dist/4-page/ds-page.d.ts.map +1 -1
- package/dist/4-page/ds-page.js +19 -1
- package/dist/4-page/email.d.ts +2 -0
- package/dist/4-page/email.d.ts.map +1 -1
- package/dist/4-page/email.js +5 -4
- package/dist/5-visual-kit/app-chrome.d.ts +98 -0
- package/dist/5-visual-kit/app-chrome.d.ts.map +1 -0
- package/dist/5-visual-kit/app-chrome.js +119 -0
- package/dist/5-visual-kit/bezels.d.ts +30 -0
- package/dist/5-visual-kit/bezels.d.ts.map +1 -0
- package/dist/5-visual-kit/bezels.js +388 -0
- package/dist/5-visual-kit/browser-icons.d.ts +5 -0
- package/dist/5-visual-kit/browser-icons.d.ts.map +1 -0
- package/dist/5-visual-kit/browser-icons.js +51 -0
- package/dist/5-visual-kit/browser-styles.d.ts +3 -0
- package/dist/5-visual-kit/browser-styles.d.ts.map +1 -0
- package/dist/5-visual-kit/browser-styles.js +52 -0
- package/dist/5-visual-kit/device-bezel.d.ts +84 -0
- package/dist/5-visual-kit/device-bezel.d.ts.map +1 -0
- package/dist/5-visual-kit/device-bezel.js +56 -0
- package/dist/5-visual-kit/instagram-frame.d.ts +8 -0
- package/dist/5-visual-kit/instagram-frame.d.ts.map +1 -0
- package/dist/5-visual-kit/instagram-frame.js +13 -0
- package/dist/5-visual-kit/instagram.d.ts +18 -0
- package/dist/5-visual-kit/instagram.d.ts.map +1 -0
- package/dist/5-visual-kit/instagram.js +39 -0
- package/dist/5-visual-kit/mobile-chrome.d.ts +4 -0
- package/dist/5-visual-kit/mobile-chrome.d.ts.map +1 -0
- package/dist/5-visual-kit/mobile-chrome.js +24 -0
- package/dist/5-visual-kit/native-icon-paths.d.ts +146 -0
- package/dist/5-visual-kit/native-icon-paths.d.ts.map +1 -0
- package/dist/5-visual-kit/native-icon-paths.js +145 -0
- package/dist/5-visual-kit/window.d.ts +51 -0
- package/dist/5-visual-kit/window.d.ts.map +1 -0
- package/dist/5-visual-kit/window.js +20 -0
- package/dist/browser-icons-BFbS1tIx.js +56 -0
- package/dist/browser-icons-BFbS1tIx.js.map +1 -0
- package/dist/browser-icons-CT8qU77Z.js +48 -0
- package/dist/browser-icons-CT8qU77Z.js.map +1 -0
- package/dist/components.d.ts +1 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +1 -0
- package/dist/design-system-1.bundle.js +5874 -2097
- package/dist/design-system-1.bundle.js.map +1 -1
- package/dist/design-system-1.bundle.min.js +7332 -4682
- package/dist/design-system-1.bundle.min.js.map +1 -1
- package/dist/design-system-1.css +1 -1
- package/dist/feedback.js +197 -167
- package/dist/feedback.js.map +1 -1
- package/dist/{icons-extra-CRxxWFjX.js → icons-extra-BMPvmQPI.js} +25 -4
- package/dist/icons-extra-BMPvmQPI.js.map +1 -0
- package/dist/{icons-extra-H5pqCM_R.js → icons-extra-BfYOw-cR.js} +83 -5
- package/dist/icons-extra-BfYOw-cR.js.map +1 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/instagram-CKofs55A.js +50 -0
- package/dist/instagram-CKofs55A.js.map +1 -0
- package/dist/instagram-CcYf5oiM.js +48 -0
- package/dist/instagram-CcYf5oiM.js.map +1 -0
- package/dist/lit-Ce_uWYM4.js +612 -0
- package/dist/lit-Ce_uWYM4.js.map +1 -0
- package/dist/lit-DGUVm1Ce.js +557 -0
- package/dist/lit-DGUVm1Ce.js.map +1 -0
- package/dist/native-icon-paths-CB9evXBM.js +93 -0
- package/dist/native-icon-paths-CB9evXBM.js.map +1 -0
- package/dist/native-icon-paths-zay-3g_n.js +150 -0
- package/dist/native-icon-paths-zay-3g_n.js.map +1 -0
- package/dist/react/avatar.d.ts +1 -1
- package/dist/react/choice.d.ts +4 -0
- package/dist/react/choice.d.ts.map +1 -1
- package/dist/react/choice.js +2 -2
- package/dist/react/context.d.ts +19 -4
- package/dist/react/context.d.ts.map +1 -1
- package/dist/react/context.js +4 -4
- package/dist/react/empty.d.ts +2 -2
- package/dist/react/empty.d.ts.map +1 -1
- package/dist/react/empty.js +1 -1
- package/dist/react/footer.d.ts +5 -5
- package/dist/react/footer.d.ts.map +1 -1
- package/dist/react/footer.js +2 -2
- package/dist/react/header.d.ts +2 -2
- package/dist/react/header.d.ts.map +1 -1
- package/dist/react/message.d.ts +4 -0
- package/dist/react/message.d.ts.map +1 -1
- package/dist/react/message.js +2 -2
- package/dist/react/number.d.ts +53 -0
- package/dist/react/number.d.ts.map +1 -0
- package/dist/react/number.js +25 -0
- package/dist/react/page.d.ts +1 -1
- package/dist/react/sidebar.d.ts +4 -0
- package/dist/react/sidebar.d.ts.map +1 -1
- package/dist/react/sidebar.js +2 -2
- package/dist/react/table-of-contents.d.ts +19 -0
- package/dist/react/table-of-contents.d.ts.map +1 -0
- package/dist/react/table-of-contents.js +28 -0
- package/dist/{shared-words-CdMDVtXx.js → shared-words-C5cjxMjZ.js} +151 -16
- package/dist/shared-words-C5cjxMjZ.js.map +1 -0
- package/dist/{shared-words-BtRee8xR.js → shared-words-Cdm7xd-_.js} +163 -28
- package/dist/shared-words-Cdm7xd-_.js.map +1 -0
- package/package.json +25 -12
- package/DS1/3-unit/ds-calendar-large.ts +0 -353
- package/DS1/3-unit/styles/ds-calendar-large.css +0 -178
- package/dist/3-unit/ds-calendar-large.d.ts +0 -142
- package/dist/3-unit/ds-calendar-large.d.ts.map +0 -1
- package/dist/3-unit/ds-calendar-large.js +0 -308
- package/dist/icons-extra-CRxxWFjX.js.map +0 -1
- package/dist/icons-extra-H5pqCM_R.js.map +0 -1
- package/dist/shared-words-BtRee8xR.js.map +0 -1
- package/dist/shared-words-CdMDVtXx.js.map +0 -1
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
:host([columns]) {
|
|
16
16
|
display: grid;
|
|
17
17
|
grid-template-columns: repeat(var(--ds-list-columns, 2), minmax(0, 1fr));
|
|
18
|
-
column-gap: var(--ds-list-column-gap, calc(
|
|
18
|
+
column-gap: var(--ds-list-column-gap, calc(var(--ds-unit) / 2));
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
:host([columns="2"]) {
|
|
@@ -25,3 +25,28 @@
|
|
|
25
25
|
:host([columns="3"]) {
|
|
26
26
|
--ds-list-columns: 3;
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
/* The group's name on the square above its rows: words on the lower sixteen of the square with
|
|
30
|
+
the spare four above, in the muted ink, as a day's heading stands over Money's payments. It
|
|
31
|
+
names the list (aria-label), so the drawn words are hidden from assistive technology. */
|
|
32
|
+
.heading {
|
|
33
|
+
box-sizing: border-box;
|
|
34
|
+
flex: none;
|
|
35
|
+
grid-column: 1 / -1;
|
|
36
|
+
width: 100%;
|
|
37
|
+
height: var(--ds-unit);
|
|
38
|
+
padding-top: calc(4px * var(--ds-sf));
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
color: var(--ds-list-heading-color, var(--ds-text-color-muted));
|
|
41
|
+
font-family: var(--ds-typeface-regular);
|
|
42
|
+
font-feature-settings: var(--ds-font-features);
|
|
43
|
+
font-size: var(--ds-type-size-default);
|
|
44
|
+
font-weight: var(--ds-type-weight-default);
|
|
45
|
+
line-height: var(--ds-type-lineheight-default);
|
|
46
|
+
letter-spacing: var(--ds-type-letterspacing-default);
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
text-overflow: clip;
|
|
49
|
+
}
|
|
50
|
+
/* A cut heading fades over its last square, never an ellipsis (0-face/cut-fade.ts marks it). */
|
|
51
|
+
.heading[data-cut="end"] { mask-image: linear-gradient(to right, #000 calc(100% - var(--ds-unit)), transparent); }
|
|
52
|
+
:host(:dir(rtl)) .heading[data-cut="end"] { mask-image: linear-gradient(to left, #000 calc(100% - var(--ds-unit)), transparent); }
|
|
@@ -91,10 +91,13 @@
|
|
|
91
91
|
padding-inline-end: calc(4px * var(--ds-sf, 1));
|
|
92
92
|
overflow: hidden;
|
|
93
93
|
text-align: end;
|
|
94
|
-
text-overflow:
|
|
94
|
+
text-overflow: clip;
|
|
95
95
|
white-space: nowrap;
|
|
96
96
|
cursor: pointer;
|
|
97
97
|
}
|
|
98
|
+
/* A cut name fades over its last square, never an ellipsis (0-face/cut-fade.ts marks it). */
|
|
99
|
+
.name[data-cut="end"] { mask-image: linear-gradient(to right, #000 calc(100% - var(--ds-unit)), transparent); }
|
|
100
|
+
:host(:dir(rtl)) .name[data-cut="end"] { mask-image: linear-gradient(to left, #000 calc(100% - var(--ds-unit)), transparent); }
|
|
98
101
|
.name[data-lit] { background: var(--ds-row-fill-hover, var(--ds-fill)); }
|
|
99
102
|
.name.totals { color: var(--ds-title-color); cursor: default; }
|
|
100
103
|
|
|
@@ -124,6 +124,45 @@
|
|
|
124
124
|
:host([disabled]) .target { cursor: default; opacity: 0.5; }
|
|
125
125
|
:host([disabled]) .target::after { background: none; }
|
|
126
126
|
|
|
127
|
+
/*
|
|
128
|
+
* The parts of a record's row (payments, events, people): a 16px picture before the
|
|
129
|
+
* name (an avatar tile, a large icon) takes the first sixteen of its square, and the row's 4px
|
|
130
|
+
* gap puts the words on the next square. The name hugs its words and gives way first; once
|
|
131
|
+
* the element has measured it cut (`data-cut="end"`), it fades out over its last square,
|
|
132
|
+
* never an ellipsis. A tag stands after the name, and the value (a figure, a date) at the
|
|
133
|
+
* row's end in tabular figures.
|
|
134
|
+
*/
|
|
135
|
+
::slotted(.ds-row__picture) {
|
|
136
|
+
flex: none;
|
|
137
|
+
box-sizing: border-box;
|
|
138
|
+
width: var(--ds-control-height);
|
|
139
|
+
height: var(--ds-control-height);
|
|
140
|
+
margin: 0;
|
|
141
|
+
padding: 0;
|
|
142
|
+
}
|
|
143
|
+
::slotted(.ds-row__name) {
|
|
144
|
+
flex: 0 1 auto;
|
|
145
|
+
min-width: 0;
|
|
146
|
+
overflow: hidden;
|
|
147
|
+
white-space: nowrap;
|
|
148
|
+
text-overflow: clip;
|
|
149
|
+
}
|
|
150
|
+
::slotted(.ds-row__name[data-cut="end"]) {
|
|
151
|
+
mask-image: linear-gradient(to right, #000 calc(100% - var(--ds-unit)), transparent);
|
|
152
|
+
}
|
|
153
|
+
:host(:dir(rtl)) ::slotted(.ds-row__name[data-cut="end"]) {
|
|
154
|
+
mask-image: linear-gradient(to left, #000 calc(100% - var(--ds-unit)), transparent);
|
|
155
|
+
}
|
|
156
|
+
::slotted(.ds-row__value) {
|
|
157
|
+
flex: none;
|
|
158
|
+
/* Important: a page's `* { margin: 0 }` reset (Tailwind's preflight, say)
|
|
159
|
+
reaches the slotted value from outside and would leave it after the name. */
|
|
160
|
+
margin-inline-start: auto !important;
|
|
161
|
+
white-space: nowrap;
|
|
162
|
+
text-align: end;
|
|
163
|
+
font-variant-numeric: tabular-nums;
|
|
164
|
+
}
|
|
165
|
+
|
|
127
166
|
/* A navigation row: the sidebar's two-pixel corners. */
|
|
128
167
|
:host([nav]) { --ds-row-radius: calc(2px * var(--ds-sf)); }
|
|
129
168
|
|
|
@@ -2,28 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
4
|
* Select as a field, around a native <select> (`data-field`): the menu
|
|
5
|
-
* engine's own rules (an action menu's) do not reach it. One
|
|
6
|
-
*
|
|
5
|
+
* engine's own rules (an action menu's) do not reach it. One control high
|
|
6
|
+
* (16px), standing at the foot of its line on the lower sixteen as a button
|
|
7
|
+
* does, and hugging its options by default; a list one square a visible row.
|
|
7
8
|
*/
|
|
8
9
|
:host([data-field]) {
|
|
9
10
|
--ds-select-unit: calc(var(--ds-1) * var(--ds-sf));
|
|
10
11
|
display: inline-flex;
|
|
11
12
|
position: relative;
|
|
12
|
-
vertical-align:
|
|
13
|
-
width:
|
|
13
|
+
vertical-align: bottom;
|
|
14
|
+
width: max-content;
|
|
14
15
|
max-width: 100%;
|
|
15
16
|
min-width: 0;
|
|
16
17
|
max-height: none;
|
|
17
|
-
height:
|
|
18
|
+
height: var(--ds-control-height);
|
|
19
|
+
}
|
|
20
|
+
:host([data-field]:not([data-listbox])) {
|
|
21
|
+
width: max-content !important;
|
|
22
|
+
flex: 0 0 auto !important;
|
|
23
|
+
justify-self: start !important;
|
|
18
24
|
}
|
|
19
25
|
:host([hidden]) { display: none !important; }
|
|
20
26
|
::slotted(select) {
|
|
21
27
|
appearance: none !important;
|
|
22
28
|
box-sizing: border-box !important;
|
|
23
29
|
display: block !important;
|
|
24
|
-
|
|
30
|
+
field-sizing: content;
|
|
31
|
+
width: auto !important;
|
|
25
32
|
min-width: 0 !important;
|
|
26
|
-
max-width:
|
|
33
|
+
max-width: 100% !important;
|
|
27
34
|
height: 100% !important;
|
|
28
35
|
min-height: 0 !important;
|
|
29
36
|
margin: 0 !important;
|
|
@@ -37,7 +44,7 @@
|
|
|
37
44
|
font-size: var(--ds-type-size-default) !important;
|
|
38
45
|
font-weight: var(--ds-type-weight-default) !important;
|
|
39
46
|
letter-spacing: var(--ds-type-letterspacing-default) !important;
|
|
40
|
-
line-height: calc(var(--ds-
|
|
47
|
+
line-height: calc(var(--ds-control-height) - 2px) !important;
|
|
41
48
|
box-shadow: none !important;
|
|
42
49
|
cursor: pointer !important;
|
|
43
50
|
}
|
|
@@ -47,8 +54,8 @@
|
|
|
47
54
|
inset-inline-end: calc(2px * var(--ds-sf));
|
|
48
55
|
top: 50%;
|
|
49
56
|
transform: translateY(-50%);
|
|
50
|
-
width:
|
|
51
|
-
height:
|
|
57
|
+
width: var(--ds-control-height);
|
|
58
|
+
height: var(--ds-control-height);
|
|
52
59
|
background: var(--ds-input-color);
|
|
53
60
|
mask: var(--ds-select-arrow) center / contain no-repeat;
|
|
54
61
|
}
|
|
@@ -59,14 +66,17 @@
|
|
|
59
66
|
::slotted(select[multiple]),
|
|
60
67
|
::slotted(select[size]:not([size="0"]):not([size="1"])) {
|
|
61
68
|
padding: 0 calc(4px * var(--ds-sf)) !important;
|
|
69
|
+
line-height: calc(var(--ds-select-unit) - 2px) !important;
|
|
62
70
|
}
|
|
63
71
|
|
|
72
|
+
:host([data-listbox]) { width: calc(8 * var(--ds-select-unit)); height: calc(var(--ds-select-rows, 1) * var(--ds-select-unit)); }
|
|
73
|
+
:host([data-listbox]) ::slotted(select) { width: 100% !important; }
|
|
74
|
+
|
|
64
75
|
/* Intrinsic width uses the native option sizing, including translated labels. */
|
|
65
76
|
:host([fit]:not([data-listbox])) { width: max-content; }
|
|
66
77
|
:host([fit]:not([data-listbox])) ::slotted(select) { width: auto !important; max-width: 100% !important; }
|
|
67
78
|
|
|
68
|
-
/* A settings chip keeps the same native picker,
|
|
69
|
-
:host([chip]:not([data-listbox])) { height: var(--ds-control-height); }
|
|
79
|
+
/* A settings chip keeps the same native picker and height, filled as a button. */
|
|
70
80
|
:host([chip]:not([data-listbox])) ::slotted(select) {
|
|
71
81
|
border: 0 !important;
|
|
72
82
|
background: var(--ds-button-background-color-secondary) !important;
|
|
@@ -42,7 +42,13 @@ ds-icon { transform: rotate(0deg); }
|
|
|
42
42
|
ds-icon[data-open] { transform: rotate(90deg); }
|
|
43
43
|
.choice { flex: 0 1 auto; min-width: 0; }
|
|
44
44
|
.name:has(ds-icon) { display: flex; align-items: center; gap: calc(4px * var(--ds-sf)); }
|
|
45
|
-
.name { overflow: hidden; white-space: nowrap; text-overflow:
|
|
45
|
+
.name { overflow: hidden; white-space: nowrap; text-overflow: clip; }
|
|
46
|
+
/* Cut words fade over their last square, never an ellipsis (0-face/cut-fade.ts marks them). */
|
|
47
|
+
:is(.name, .tree .label)[data-cut="end"] { mask-image: linear-gradient(to right, #000 calc(100% - var(--ds-unit)), transparent); }
|
|
48
|
+
:host(:dir(rtl)) :is(.name, .tree .label)[data-cut="end"] { mask-image: linear-gradient(to left, #000 calc(100% - var(--ds-unit)), transparent); }
|
|
49
|
+
/* A detail (a version) follows the label in the small muted type, 4px after its words and on their line, cut with them. */
|
|
50
|
+
.detail { margin-inline-start: calc(4px * var(--ds-sf)); font-size: var(--ds-type-size-small); line-height: 1; color: var(--ds-text-color-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
51
|
+
.name:has(ds-icon) .detail { margin-inline-start: 0; }
|
|
46
52
|
.meta { flex: none; padding-inline-start: calc(4px * var(--ds-sf)); font-size: var(--ds-type-size-small); color: var(--ds-text-color-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
47
53
|
.action { margin-inline-start: calc(4px * var(--ds-sf)); --ds-text-size: 10px; --ds-button-color: var(--ds-text-color-muted); }
|
|
48
54
|
.empty { margin: 0; padding: calc(var(--ds-unit) / 2); color: var(--ds-text-color-muted); }
|
|
@@ -105,7 +111,7 @@ ds-icon[data-open] { transform: rotate(90deg); }
|
|
|
105
111
|
min-width: 0;
|
|
106
112
|
padding-inline-start: calc(4px * var(--ds-sf));
|
|
107
113
|
overflow: hidden;
|
|
108
|
-
text-overflow:
|
|
114
|
+
text-overflow: clip;
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -132,3 +138,11 @@ ds-icon[data-open] { transform: rotate(90deg); }
|
|
|
132
138
|
|
|
133
139
|
:host([disclosure-position="start"]) .row { padding-inline-start: calc(4px * var(--ds-sf) + var(--depth) * var(--ds-unit)); }
|
|
134
140
|
:host([disclosure-position="start"]) .row:not(:has(.disclosure)) .choice { margin-inline-start: var(--ds-unit); }
|
|
141
|
+
|
|
142
|
+
/* Narrow: eight squares wide, each row hugging its words, so the pointer's and the current
|
|
143
|
+
row's fill wrap the label (and its meta and disclosure) 4px either side instead of running
|
|
144
|
+
across the column. Rows still stand one square apart, half a square further in per level. */
|
|
145
|
+
:host([narrow]) { width: calc(8 * var(--ds-unit)); }
|
|
146
|
+
:host([narrow]) nav { display: flex; flex-direction: column; align-items: flex-start; }
|
|
147
|
+
:host([narrow]) .row { width: fit-content; max-width: 100%; }
|
|
148
|
+
:host([narrow]) .spacer { display: none; }
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
@import "../../1-root/component-metrics.css";
|
|
2
|
+
:host {
|
|
3
|
+
display: block;
|
|
4
|
+
width: var(--ds-toc-width, calc(12 * var(--ds-unit)));
|
|
5
|
+
max-width: 100%;
|
|
6
|
+
color: var(--ds-text-color);
|
|
7
|
+
font-family: var(--ds-typeface-regular);
|
|
8
|
+
font-size: var(--ds-type-size-default);
|
|
9
|
+
font-weight: var(--ds-type-weight-default);
|
|
10
|
+
line-height: var(--ds-type-lineheight-default);
|
|
11
|
+
letter-spacing: var(--ds-type-letterspacing-default);
|
|
12
|
+
}
|
|
13
|
+
:host([hidden]) { display: none !important; }
|
|
14
|
+
.title { display: flex; align-items: flex-end; min-height: var(--ds-unit); }
|
|
15
|
+
.links { margin-top: var(--ds-unit); }
|
|
16
|
+
a, ::slotted(a) {
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
display: block;
|
|
19
|
+
min-height: var(--ds-unit);
|
|
20
|
+
padding-top: calc(4px * var(--ds-sf));
|
|
21
|
+
padding-inline-start: calc(var(--toc-depth, 0) * var(--ds-unit));
|
|
22
|
+
color: var(--ds-toc-color, var(--ds-text-color-muted));
|
|
23
|
+
font: inherit;
|
|
24
|
+
line-height: var(--ds-type-lineheight-default);
|
|
25
|
+
letter-spacing: inherit;
|
|
26
|
+
text-decoration: none;
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
text-overflow: clip;
|
|
30
|
+
}
|
|
31
|
+
/* A cut label fades over its last square, never an ellipsis (0-face/cut-fade.ts marks it). */
|
|
32
|
+
a[data-cut="end"], ::slotted(a[data-cut="end"]) {
|
|
33
|
+
mask-image: linear-gradient(to right, #000 calc(100% - var(--ds-unit)), transparent);
|
|
34
|
+
}
|
|
35
|
+
:host(:dir(rtl)) a[data-cut="end"], :host(:dir(rtl)) ::slotted(a[data-cut="end"]) {
|
|
36
|
+
mask-image: linear-gradient(to left, #000 calc(100% - var(--ds-unit)), transparent);
|
|
37
|
+
}
|
|
38
|
+
a:hover, ::slotted(a:hover) { color: var(--ds-text-color); text-decoration: underline; }
|
|
39
|
+
a[aria-current], ::slotted(a[aria-current]) { color: var(--ds-toc-current-color, var(--ds-sharp-blue)); }
|
|
40
|
+
a:focus-visible, ::slotted(a:focus-visible) { outline: 1px solid var(--ds-focus-ring); outline-offset: 1px; }
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
height: var(--ds-row-height);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
:host([hidden]) { display: none !important; }
|
|
16
|
+
|
|
15
17
|
:host([wrap]) {
|
|
16
18
|
flex-wrap: wrap;
|
|
17
19
|
height: auto;
|
|
@@ -42,3 +44,96 @@
|
|
|
42
44
|
--ds-button-background: var(--ds-button-background-color-primary);
|
|
43
45
|
--ds-button-color: var(--ds-button-text-color-on-accent);
|
|
44
46
|
}
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
* Text tabs (`text`): the words alone, no fill in any state, the current one
|
|
50
|
+
* in the ink and the others muted until the pointer is over them. The tabs
|
|
51
|
+
* stay 4px apart, as every tab run, each with its 4px of padding, so the words
|
|
52
|
+
* stand twelve apart; the run is drawn 4px back so the first word starts on
|
|
53
|
+
* the column's edge, as a heading would.
|
|
54
|
+
*/
|
|
55
|
+
:host([text]) {
|
|
56
|
+
/* Important: a page's `* { margin: 0 }` reset (Tailwind's preflight, say)
|
|
57
|
+
reaches the host from outside and would set the first word 4px in. */
|
|
58
|
+
margin-inline-start: calc(-4px * var(--ds-sf)) !important;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
:host([text]) ::slotted(ds-button),
|
|
62
|
+
:host([text]) ::slotted(ds-button:hover),
|
|
63
|
+
:host([text]) ::slotted(ds-button[active]) {
|
|
64
|
+
--ds-button-background: transparent;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
:host([text]) ::slotted(ds-button) {
|
|
68
|
+
--ds-button-color: var(--ds-text-color-muted);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
:host([text]) ::slotted(ds-button:hover),
|
|
72
|
+
:host([text]) ::slotted(ds-button[active]) {
|
|
73
|
+
--ds-button-color: var(--ds-text-color);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* Split tabs (`split`): joined into one face a control high, as the split
|
|
78
|
+
* button draws it: a pixel of the paper between them, the run's outer corners
|
|
79
|
+
* rounded (each tab's `segment` place), the tabs muted on the secondary
|
|
80
|
+
* ground, the current one on the accent.
|
|
81
|
+
*/
|
|
82
|
+
:host([split]) {
|
|
83
|
+
display: inline-flex;
|
|
84
|
+
align-items: stretch;
|
|
85
|
+
gap: 1px;
|
|
86
|
+
height: var(--ds-control-height);
|
|
87
|
+
vertical-align: bottom;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
:host([split]) ::slotted(ds-button) {
|
|
91
|
+
--ds-button-height: var(--ds-control-height);
|
|
92
|
+
--ds-button-padding: 0 calc(5px * var(--ds-sf));
|
|
93
|
+
--ds-button-background: var(--ds-button-background-color-secondary);
|
|
94
|
+
--ds-button-color: var(--ds-text-color-muted);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
:host([split]) ::slotted(ds-button:hover) {
|
|
98
|
+
--ds-button-background: var(--ds-button-background-color-secondary);
|
|
99
|
+
--ds-button-color: var(--ds-text-color);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:host([split]) ::slotted(ds-button[active]) {
|
|
103
|
+
--ds-button-background: var(--ds-accent-color);
|
|
104
|
+
--ds-button-color: var(--ds-button-text-color-on-accent);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* Paper tabs (`paper`): a notebook's tabs hanging from a page's top edge.
|
|
109
|
+
* Each tab is a row high with its words on the sixteen, half a square of room
|
|
110
|
+
* at its sides, the tabs 4px apart, rounded at the top and square at the foot
|
|
111
|
+
* where they join the page (each tab's `paper` mark, which the run sets):
|
|
112
|
+
* the current one on the paper's colour in the ink, so it reads as part of
|
|
113
|
+
* the page below; the others on the quiet fill in the muted ink, lit under
|
|
114
|
+
* the pointer. The run stands at the page's edge; the page places it, over a
|
|
115
|
+
* header's band, say, so the tabs hang into it.
|
|
116
|
+
*/
|
|
117
|
+
:host([paper]) {
|
|
118
|
+
align-items: flex-end;
|
|
119
|
+
height: var(--ds-row-height);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
:host([paper]) ::slotted(ds-button) {
|
|
123
|
+
--ds-button-height: var(--ds-row-height);
|
|
124
|
+
--ds-button-padding: 0 calc(10px * var(--ds-sf));
|
|
125
|
+
--ds-button-background: var(--ds-button-background-color-secondary);
|
|
126
|
+
--ds-button-color: var(--ds-text-color-muted);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
:host([paper]) ::slotted(ds-button:hover) {
|
|
130
|
+
--ds-button-background: var(--ds-fill-hover);
|
|
131
|
+
--ds-button-color: var(--ds-text-color);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
:host([paper]) ::slotted(ds-button[active]),
|
|
135
|
+
:host([paper]) ::slotted(ds-button[active]:hover) {
|
|
136
|
+
/* The page's own colour: a product's --ds-background, else the paper's. */
|
|
137
|
+
--ds-button-background: var(--ds-background, var(--background, Canvas));
|
|
138
|
+
--ds-button-color: var(--ds-text-color);
|
|
139
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { define } from "../0-face/define";
|
|
1
2
|
// ds-container.ts
|
|
2
3
|
// Container component with responsive width constraints
|
|
3
4
|
|
|
@@ -19,7 +20,7 @@ export class Container extends LitElement {
|
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
define("ds-container", Container);
|
|
23
24
|
|
|
24
25
|
declare global {
|
|
25
26
|
interface HTMLElementTagNameMap {
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
8
8
|
import { getText } from "../0-face/i18n";
|
|
9
9
|
import { define } from "../0-face/define";
|
|
10
|
+
import { CutFades } from "../0-face/cut-fade";
|
|
10
11
|
import metrics from "../1-root/component-metrics.css?inline";
|
|
11
12
|
import documentSheet from "../1-root/document.css?inline";
|
|
12
13
|
import documentRules from "../1-root/document.css?raw";
|
|
@@ -97,6 +98,8 @@ export class DocumentPage extends LitElement {
|
|
|
97
98
|
};
|
|
98
99
|
|
|
99
100
|
static styles = [unsafeCSS(metrics), unsafeCSS(documentSheet), unsafeCSS(styles)];
|
|
101
|
+
/** Words cut short fade over their last square, never an ellipsis: marks them `data-cut="end"` while they do not fit. */
|
|
102
|
+
protected readonly cuts = new CutFades(this, { selector: ".ds-document__toc-list a" });
|
|
100
103
|
|
|
101
104
|
declare levels: string;
|
|
102
105
|
declare label: string | undefined;
|
package/DS1/4-page/ds-footer.ts
CHANGED
|
@@ -1,42 +1,78 @@
|
|
|
1
1
|
// ds-footer.ts
|
|
2
|
-
// A site footer: the brand, columns of links
|
|
3
|
-
//
|
|
2
|
+
// A site footer: the brand, columns of links or contact lines, round marks
|
|
3
|
+
// stacked at the row's end, the language and theme, the copyright and the
|
|
4
|
+
// policies under it. Drawn by 1-root/footer.css, the same classes a page without
|
|
4
5
|
// scripts writes.
|
|
5
6
|
|
|
6
7
|
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
7
8
|
import { getText } from "../0-face/i18n";
|
|
8
9
|
import { define } from "../0-face/define";
|
|
10
|
+
import { CutFades } from "../0-face/cut-fade";
|
|
9
11
|
import "../2-core/ds-cycle";
|
|
10
12
|
import metrics from "../1-root/component-metrics.css?inline";
|
|
11
13
|
import controls from "../1-root/controls.css?inline";
|
|
12
14
|
import styles from "./styles/ds-footer.css?inline";
|
|
13
15
|
|
|
14
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* A line in a footer column: a link, or, without `href`, words alone (an
|
|
18
|
+
* address, a registration number). In a column with words alone its links
|
|
19
|
+
* are underlined, so they can be told from the words around them.
|
|
20
|
+
*/
|
|
15
21
|
export interface FooterLink {
|
|
16
22
|
/** The words: a translation key, or as written with the footer's `literal`. */
|
|
17
23
|
label: string;
|
|
18
|
-
|
|
24
|
+
/** Where it leads. Without it the line is words alone. */
|
|
25
|
+
href?: string;
|
|
19
26
|
/** Opens elsewhere: in a new tab, with no referrer. */
|
|
20
27
|
external?: boolean;
|
|
21
28
|
/** The page being read: `aria-current="page"`. */
|
|
22
29
|
current?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The link drawn as a mark, its label its accessible name: the icon file's
|
|
32
|
+
* address (`icons/instagram.svg`, as Sync 1's `icons` export copies it). A
|
|
33
|
+
* column's icon links stand first, in a row of their own, or stacked as
|
|
34
|
+
* round marks with the column's `icons: "stack"`.
|
|
35
|
+
*/
|
|
36
|
+
icon?: string;
|
|
23
37
|
}
|
|
24
38
|
|
|
25
|
-
/**
|
|
39
|
+
/** How a column's icon links stand: in a row first (`row`), or stacked as round marks (`stack`). */
|
|
40
|
+
export type FooterIcons = "row" | "stack";
|
|
41
|
+
|
|
42
|
+
/** A footer column: a heading and its lines. */
|
|
26
43
|
export interface FooterColumn {
|
|
27
44
|
heading?: string;
|
|
45
|
+
/** The heading as a link: where it leads. */
|
|
46
|
+
href?: string;
|
|
28
47
|
links: FooterLink[];
|
|
48
|
+
/** The column's width in whole squares: eight by default. */
|
|
49
|
+
width?: number;
|
|
50
|
+
/**
|
|
51
|
+
* `stack` draws its icon links as round marks one control high, one a line,
|
|
52
|
+
* the column one square wide at the end of the row; the heading then names
|
|
53
|
+
* the marks for assistive technology. `row` (the default) stands them first,
|
|
54
|
+
* in a row of their own.
|
|
55
|
+
*/
|
|
56
|
+
icons?: FooterIcons;
|
|
29
57
|
}
|
|
30
58
|
|
|
31
59
|
/** The settings a footer offers, each a `ds-cycle` of that type. */
|
|
32
|
-
export type FooterPreference = "language" | "theme";
|
|
33
|
-
const PREFERENCES: readonly FooterPreference[] = ["language", "theme"];
|
|
60
|
+
export type FooterPreference = "language" | "theme" | "shape";
|
|
61
|
+
const PREFERENCES: readonly FooterPreference[] = ["language", "theme", "shape"];
|
|
62
|
+
/** What an empty `preferences` offers: the shape only when it is named. */
|
|
63
|
+
const DEFAULT_PREFERENCES: readonly FooterPreference[] = ["language", "theme"];
|
|
64
|
+
|
|
65
|
+
/** A column's width in whole squares, from its `width`: eight when it is missing or not a positive number. */
|
|
66
|
+
export function footerColumnWidth(width: unknown): number {
|
|
67
|
+
const squares = Math.round(Number(width));
|
|
68
|
+
return Number.isFinite(squares) && squares >= 1 ? squares : 8;
|
|
69
|
+
}
|
|
34
70
|
|
|
35
|
-
/** The preferences named by an attribute:
|
|
71
|
+
/** The preferences named by an attribute: language and theme when it is present but empty. */
|
|
36
72
|
export function footerPreferences(value: string | null | undefined): FooterPreference[] {
|
|
37
73
|
if (value == null || value === "false") return [];
|
|
38
74
|
const named = value.split(/[\s,]+/).filter(Boolean);
|
|
39
|
-
if (!named.length || named.includes("true")) return [...
|
|
75
|
+
if (!named.length || named.includes("true")) return [...DEFAULT_PREFERENCES];
|
|
40
76
|
return PREFERENCES.filter(name => named.includes(name));
|
|
41
77
|
}
|
|
42
78
|
|
|
@@ -46,11 +82,14 @@ export function footerPreferences(value: string | null | undefined): FooterPrefe
|
|
|
46
82
|
* the words as they stand with `literal`. The `brand` slot takes its place.
|
|
47
83
|
* @prop {string} href - Where the brand links. `/` by default.
|
|
48
84
|
* @prop {string} tagline - A line about the site under the brand.
|
|
49
|
-
* @prop {FooterColumn[]} columns - The columns of links, eight squares each
|
|
85
|
+
* @prop {FooterColumn[]} columns - The columns of links or lines, eight squares each
|
|
86
|
+
* unless a column names its `width`.
|
|
50
87
|
* @prop {string} label - The columns' accessible name, as a navigation; without it they are plain lists.
|
|
51
88
|
* @prop {string} owner - Who holds the copyright: the brand by default.
|
|
52
89
|
* @prop {number} year - The copyright's year: this year by default.
|
|
53
|
-
* @prop {
|
|
90
|
+
* @prop {FooterLink[]} policies - Links under the copyright (privacy, terms), each
|
|
91
|
+
* drawn as a secondary button.
|
|
92
|
+
* @prop {string} preferences - `language`, `theme`, `shape` or several, as `ds-cycle`
|
|
54
93
|
* buttons at the end of the last row; present but empty, both.
|
|
55
94
|
* @prop {boolean} literal - Show the words as written, never looked up.
|
|
56
95
|
*
|
|
@@ -72,11 +111,14 @@ export class Footer extends LitElement {
|
|
|
72
111
|
label: { type: String },
|
|
73
112
|
owner: { type: String },
|
|
74
113
|
year: { type: Number },
|
|
114
|
+
policies: { type: Array },
|
|
75
115
|
preferences: { type: String },
|
|
76
116
|
literal: { type: Boolean, reflect: true },
|
|
77
117
|
};
|
|
78
118
|
|
|
79
119
|
static styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
|
|
120
|
+
/** Words cut short fade over their last square, never an ellipsis: marks them `data-cut="end"` while they do not fit. */
|
|
121
|
+
protected readonly cuts = new CutFades(this, { selector: ".ds-footer__links > li > *, .ds-footer__heading > a" });
|
|
80
122
|
|
|
81
123
|
declare brand: string | undefined;
|
|
82
124
|
declare href: string;
|
|
@@ -85,6 +127,7 @@ export class Footer extends LitElement {
|
|
|
85
127
|
declare label: string | undefined;
|
|
86
128
|
declare owner: string | undefined;
|
|
87
129
|
declare year: number | undefined;
|
|
130
|
+
declare policies: FooterLink[];
|
|
88
131
|
declare preferences: string | null | undefined;
|
|
89
132
|
declare literal: boolean;
|
|
90
133
|
|
|
@@ -94,6 +137,7 @@ export class Footer extends LitElement {
|
|
|
94
137
|
super();
|
|
95
138
|
this.href = "/";
|
|
96
139
|
this.columns = [];
|
|
140
|
+
this.policies = [];
|
|
97
141
|
this.literal = false;
|
|
98
142
|
}
|
|
99
143
|
|
|
@@ -118,9 +162,39 @@ export class Footer extends LitElement {
|
|
|
118
162
|
return [...this.children].some(node => node.getAttribute("slot") === name);
|
|
119
163
|
}
|
|
120
164
|
|
|
165
|
+
private iconLink(link: FooterLink) {
|
|
166
|
+
return html`<li><a href=${link.href} aria-label=${this.words(link.label)} aria-current=${link.current ? "page" : nothing}
|
|
167
|
+
target=${link.external ? "_blank" : nothing} rel=${link.external ? "noopener noreferrer" : nothing}><span class="ds-icon" aria-hidden="true" style=${`--ds-icon: url("${link.icon}")`}></span></a></li>`;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private anchor(link: FooterLink, className?: string) {
|
|
171
|
+
return html`<a class=${className ?? nothing} href=${link.href!} aria-current=${link.current ? "page" : nothing}
|
|
172
|
+
target=${link.external ? "_blank" : nothing} rel=${link.external ? "noopener noreferrer" : nothing}>${this.words(link.label)}</a>`;
|
|
173
|
+
}
|
|
174
|
+
|
|
121
175
|
private link(link: FooterLink) {
|
|
122
|
-
return html`<li
|
|
123
|
-
|
|
176
|
+
return html`<li>${link.href ? this.anchor(link) : html`<span>${this.words(link.label)}</span>`}</li>`;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private column(column: FooterColumn) {
|
|
180
|
+
const stack = column.icons === "stack";
|
|
181
|
+
const icons = column.links.filter(link => link.icon && link.href);
|
|
182
|
+
const lines = column.links.filter(link => !(link.icon && link.href));
|
|
183
|
+
const width = footerColumnWidth(column.width);
|
|
184
|
+
const heading = column.heading ? this.words(column.heading) : "";
|
|
185
|
+
if (stack) {
|
|
186
|
+
return html`<div class="ds-footer__column ds-footer__column--stack" part="column">
|
|
187
|
+
<ul class="ds-footer__icons" part="icons" aria-label=${heading || nothing}>${icons.map(link => this.iconLink(link))}</ul>
|
|
188
|
+
${lines.length ? html`<ul class="ds-footer__links">${lines.map(link => this.link(link))}</ul>` : nothing}
|
|
189
|
+
</div>`;
|
|
190
|
+
}
|
|
191
|
+
return html`<div class="ds-footer__column" part="column" style=${width === 8 ? nothing : `--ds-footer-column-width: ${width}`}>
|
|
192
|
+
${heading
|
|
193
|
+
? html`<h2 class="ds-footer__heading" part="heading">${column.href ? html`<a href=${column.href}>${heading}</a>` : heading}</h2>`
|
|
194
|
+
: nothing}
|
|
195
|
+
${icons.length ? html`<ul class="ds-footer__icons" part="icons">${icons.map(link => this.iconLink(link))}</ul>` : nothing}
|
|
196
|
+
<ul class="ds-footer__links">${lines.map(link => this.link(link))}</ul>
|
|
197
|
+
</div>`;
|
|
124
198
|
}
|
|
125
199
|
|
|
126
200
|
render() {
|
|
@@ -131,10 +205,8 @@ export class Footer extends LitElement {
|
|
|
131
205
|
const year = Number.isFinite(this.year) ? this.year : new Date().getFullYear();
|
|
132
206
|
const brandSlotted = this.slotted("brand");
|
|
133
207
|
const hasBrand = brandSlotted || Boolean(this.brand) || Boolean(this.tagline);
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
<ul class="ds-footer__links">${column.links.map(link => this.link(link))}</ul>
|
|
137
|
-
</div>`);
|
|
208
|
+
const policies = (Array.isArray(this.policies) ? this.policies : []).filter(link => link && link.href);
|
|
209
|
+
const list = columns.map(column => this.column(column));
|
|
138
210
|
return html`<footer class="ds-footer" part="footer">
|
|
139
211
|
<div class="ds-footer__brand" part="brand" ?hidden=${!hasBrand}>
|
|
140
212
|
<slot name="brand" @slotchange=${this.relabel}>${this.brand ? html`<a class="ds-footer__mark" href=${this.href || "/"}>${this.words(this.brand)}</a>` : nothing}</slot>
|
|
@@ -147,8 +219,11 @@ export class Footer extends LitElement {
|
|
|
147
219
|
: nothing}
|
|
148
220
|
<div class="ds-footer__base" part="base">
|
|
149
221
|
<p class="ds-footer__legal" part="legal"><slot name="legal" @slotchange=${this.relabel}>${owner ? `© ${year} ${owner}` : `© ${year}`}</slot></p>
|
|
222
|
+
${policies.length
|
|
223
|
+
? html`<ul class="ds-footer__policies" part="policies">${policies.map(link => html`<li>${this.anchor(link, "ds-button ds-button--secondary")}</li>`)}</ul>`
|
|
224
|
+
: nothing}
|
|
150
225
|
<div class="ds-footer__preferences" part="preferences" ?hidden=${!hasPreferences}>
|
|
151
|
-
${preferences.map(type => html`<ds-cycle type=${type}></ds-cycle>`)}
|
|
226
|
+
${preferences.map(type => html`<ds-cycle type=${type} label=${type === "shape" ? "Shape" : nothing}></ds-cycle>`)}
|
|
152
227
|
<slot name="preferences" @slotchange=${this.relabel}></slot>
|
|
153
228
|
</div>
|
|
154
229
|
</div>
|
package/DS1/4-page/ds-header.ts
CHANGED
|
@@ -23,6 +23,7 @@ export const MENU_LABEL = "Menu";
|
|
|
23
23
|
* @prop {string} href - Where the brand links. `/` by default.
|
|
24
24
|
* @prop {string} label - The navigation's accessible name, when a page has more than one.
|
|
25
25
|
* @prop {boolean} literal - Show `brand` as written, never looked up.
|
|
26
|
+
* @prop {"site" | "app"} variant - Site navigation or a compact app title bar.
|
|
26
27
|
* @prop {boolean} sticky - Stay at the top of the page as it scrolls, on the paper.
|
|
27
28
|
*
|
|
28
29
|
* @slot - The navigation: `<a href>` links, one square high. The link to the
|
|
@@ -46,6 +47,7 @@ export const MENU_LABEL = "Menu";
|
|
|
46
47
|
*/
|
|
47
48
|
export class Header extends LitElement {
|
|
48
49
|
static properties = {
|
|
50
|
+
variant: { type: String, reflect: true },
|
|
49
51
|
brand: { type: String },
|
|
50
52
|
href: { type: String },
|
|
51
53
|
label: { type: String },
|
|
@@ -55,6 +57,7 @@ export class Header extends LitElement {
|
|
|
55
57
|
|
|
56
58
|
static styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
|
|
57
59
|
|
|
60
|
+
declare variant: "site" | "app";
|
|
58
61
|
declare brand: string | undefined;
|
|
59
62
|
declare href: string;
|
|
60
63
|
declare label: string | undefined;
|
|
@@ -66,6 +69,7 @@ export class Header extends LitElement {
|
|
|
66
69
|
|
|
67
70
|
constructor() {
|
|
68
71
|
super();
|
|
72
|
+
this.variant = "site";
|
|
69
73
|
this.href = "/";
|
|
70
74
|
this.literal = false;
|
|
71
75
|
this.sticky = false;
|
|
@@ -146,7 +150,7 @@ export class Header extends LitElement {
|
|
|
146
150
|
: this.brand
|
|
147
151
|
? html`<a class="ds-header__brand" part="brand" href=${this.href || "/"}>${this.words(this.brand)}</a>`
|
|
148
152
|
: html`<slot name="brand" @slotchange=${this.relabel}></slot>`;
|
|
149
|
-
return html`<header class="ds-header${this.sticky ? " ds-header--sticky" : ""}" part="header">
|
|
153
|
+
return html`<header class="ds-header${this.variant === "app" ? " ds-header--app" : ""}${this.sticky ? " ds-header--sticky" : ""}" part="header">
|
|
150
154
|
${brand}
|
|
151
155
|
<nav class="ds-header__nav" part="nav" id="nav" aria-label=${this.label ? this.words(this.label) : nothing} ?hidden=${!hasNav}><slot @slotchange=${this.onNavChange}></slot></nav>
|
|
152
156
|
<div class="ds-header__actions" part="actions" ?hidden=${!hasActions}><slot name="actions" @slotchange=${this.relabel}></slot></div>
|