@0001-labs/design-system-1 0.3.0-alpha.28 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (769) hide show
  1. package/DS1/0-face/button-label.ts +28 -0
  2. package/DS1/0-face/calendar.ts +6 -4
  3. package/DS1/0-face/carousel.ts +70 -0
  4. package/DS1/0-face/constraint-panel.ts +422 -0
  5. package/DS1/0-face/constraint-site.ts +200 -0
  6. package/DS1/0-face/constraints.ts +281 -0
  7. package/DS1/0-face/copy-text.ts +1 -1
  8. package/DS1/0-face/cut-fade.ts +312 -0
  9. package/DS1/0-face/define.ts +30 -2
  10. package/DS1/0-face/face-correction.ts +96 -0
  11. package/DS1/0-face/failures.ts +32 -0
  12. package/DS1/0-face/feedback-overlays.ts +5 -3
  13. package/DS1/0-face/feedback.ts +3 -0
  14. package/DS1/0-face/focus-vision.swift +31 -0
  15. package/DS1/0-face/focus.ts +181 -0
  16. package/DS1/0-face/google-face-metrics.json +102 -0
  17. package/DS1/0-face/grid.ts +61 -4
  18. package/DS1/0-face/i18n.ts +36 -18
  19. package/DS1/0-face/layout-inspector.ts +124 -98
  20. package/DS1/0-face/preference-options.ts +4 -0
  21. package/DS1/0-face/scaling.ts +21 -3
  22. package/DS1/0-face/shape.ts +43 -0
  23. package/DS1/0-face/text-contrast.ts +164 -0
  24. package/DS1/0-face/theme-bootstrap.js +43 -0
  25. package/DS1/0-face/toast-queue.ts +7 -1
  26. package/DS1/0-face/translations/da.json +10 -1
  27. package/DS1/0-face/translations/de.json +10 -1
  28. package/DS1/0-face/translations/en.json +10 -1
  29. package/DS1/0-face/translations/es.json +10 -1
  30. package/DS1/0-face/translations/fi.json +10 -1
  31. package/DS1/0-face/translations/fr.json +10 -1
  32. package/DS1/0-face/translations/is.json +10 -1
  33. package/DS1/0-face/translations/it.json +10 -1
  34. package/DS1/0-face/translations/ja.json +10 -1
  35. package/DS1/0-face/translations/ko.json +10 -1
  36. package/DS1/0-face/translations/nb.json +10 -1
  37. package/DS1/0-face/translations/pt-BR.json +10 -1
  38. package/DS1/0-face/translations/pt.json +10 -1
  39. package/DS1/0-face/translations/sv.json +10 -1
  40. package/DS1/0-face/translations/zh.json +10 -1
  41. package/DS1/0-face/word-wrap.ts +113 -0
  42. package/DS1/1-root/card.css +47 -20
  43. package/DS1/1-root/carousel.css +7 -0
  44. package/DS1/1-root/cjk.css +1 -1
  45. package/DS1/1-root/component-tokens.css +3 -2
  46. package/DS1/1-root/context.css +44 -6
  47. package/DS1/1-root/controls.css +99 -8
  48. package/DS1/1-root/document.css +9 -1
  49. package/DS1/1-root/empty.css +46 -5
  50. package/DS1/1-root/figures.css +50 -3
  51. package/DS1/1-root/fonts.css +1 -1
  52. package/DS1/1-root/footer.css +147 -16
  53. package/DS1/1-root/foundation.ts +60 -0
  54. package/DS1/1-root/guide.css +35 -0
  55. package/DS1/1-root/header.css +30 -9
  56. package/DS1/1-root/material.css +67 -0
  57. package/DS1/1-root/notice.css +10 -2
  58. package/DS1/1-root/one.css +14 -7
  59. package/DS1/1-root/progress.css +9 -1
  60. package/DS1/1-root/row.css +68 -2
  61. package/DS1/1-root/table.css +47 -4
  62. package/DS1/1-root/text.css +26 -0
  63. package/DS1/2-core/button-split.ts +10 -5
  64. package/DS1/2-core/chart/chart.css +71 -2
  65. package/DS1/2-core/chart/grid-chart.ts +2 -1
  66. package/DS1/2-core/ds-activity.ts +32 -0
  67. package/DS1/2-core/ds-app-chrome.ts +1 -0
  68. package/DS1/2-core/ds-avatar.ts +35 -6
  69. package/DS1/2-core/ds-badge.ts +8 -1
  70. package/DS1/2-core/ds-button.ts +7 -1
  71. package/DS1/2-core/ds-chart.ts +184 -49
  72. package/DS1/2-core/ds-cycle.ts +27 -186
  73. package/DS1/2-core/ds-device-bezel.ts +1 -0
  74. package/DS1/2-core/ds-empty.ts +6 -4
  75. package/DS1/2-core/ds-input.ts +23 -3
  76. package/DS1/2-core/ds-message.ts +22 -0
  77. package/DS1/2-core/ds-number.ts +349 -0
  78. package/DS1/2-core/ds-progress.ts +3 -0
  79. package/DS1/2-core/ds-radio.ts +3 -0
  80. package/DS1/2-core/ds-stat.ts +3 -0
  81. package/DS1/2-core/ds-switch.ts +5 -1
  82. package/DS1/2-core/ds-tag.ts +9 -2
  83. package/DS1/2-core/ds-text.ts +7 -0
  84. package/DS1/2-core/ds-token.ts +3 -0
  85. package/DS1/2-core/ds-tooltip.ts +17 -2
  86. package/DS1/2-core/ds-window.ts +1 -0
  87. package/DS1/2-core/generated/ds-icon-map.ts +47 -5
  88. package/DS1/2-core/generated/icons-extra.ts +24 -3
  89. package/DS1/2-core/generated/icons-immediate.ts +3 -3
  90. package/DS1/2-core/number-expression.ts +64 -0
  91. package/DS1/2-core/styles/ds-activity.css +16 -0
  92. package/DS1/2-core/styles/ds-badge.css +4 -1
  93. package/DS1/2-core/styles/ds-button-host.css +45 -12
  94. package/DS1/2-core/styles/ds-button-split.css +8 -0
  95. package/DS1/2-core/styles/ds-button.css +92 -19
  96. package/DS1/2-core/styles/ds-card.css +6 -0
  97. package/DS1/2-core/styles/ds-checkbox.css +20 -8
  98. package/DS1/2-core/styles/ds-image.css +2 -1
  99. package/DS1/2-core/styles/ds-input.css +37 -4
  100. package/DS1/2-core/styles/ds-number.css +127 -0
  101. package/DS1/2-core/styles/ds-radio.css +4 -1
  102. package/DS1/2-core/styles/ds-switch.css +34 -4
  103. package/DS1/2-core/styles/ds-tag.css +32 -5
  104. package/DS1/2-core/styles/ds-text.css +13 -4
  105. package/DS1/2-core/styles/ds-token.css +4 -1
  106. package/DS1/2-core/styles/ds-tooltip.css +13 -7
  107. package/DS1/3-unit/calendar-base.ts +5 -2
  108. package/DS1/3-unit/ds-calendar.ts +711 -37
  109. package/DS1/3-unit/ds-carousel.ts +13 -1
  110. package/DS1/3-unit/ds-context.ts +40 -2
  111. package/DS1/3-unit/ds-form.ts +45 -10
  112. package/DS1/3-unit/ds-list.ts +31 -3
  113. package/DS1/3-unit/ds-matrix.ts +3 -0
  114. package/DS1/3-unit/ds-menu.ts +9 -5
  115. package/DS1/3-unit/ds-row.ts +17 -2
  116. package/DS1/3-unit/ds-select.ts +1 -1
  117. package/DS1/3-unit/ds-sidebar.ts +18 -3
  118. package/DS1/3-unit/ds-table-of-contents.ts +166 -0
  119. package/DS1/3-unit/ds-tabs.ts +40 -2
  120. package/DS1/3-unit/styles/ds-calendar.css +356 -42
  121. package/DS1/3-unit/styles/ds-context.css +38 -0
  122. package/DS1/3-unit/styles/ds-list.css +26 -1
  123. package/DS1/3-unit/styles/ds-matrix.css +4 -1
  124. package/DS1/3-unit/styles/ds-row.css +39 -0
  125. package/DS1/3-unit/styles/ds-select.css +22 -12
  126. package/DS1/3-unit/styles/ds-sidebar.css +16 -2
  127. package/DS1/3-unit/styles/ds-table-of-contents.css +40 -0
  128. package/DS1/3-unit/styles/ds-tabs.css +95 -0
  129. package/DS1/4-page/ds-document.ts +3 -0
  130. package/DS1/4-page/ds-footer.ts +93 -18
  131. package/DS1/4-page/ds-header.ts +5 -1
  132. package/DS1/4-page/ds-overlay.ts +8 -3
  133. package/DS1/4-page/ds-page.ts +22 -1
  134. package/DS1/4-page/email.ts +7 -4
  135. package/DS1/4-page/styles/ds-container.css +0 -1
  136. package/DS1/4-page/styles/ds-overlay.css +7 -0
  137. package/DS1/4-page/styles/ds-page.css +10 -0
  138. package/DS1/5-visual-kit/app-chrome.ts +129 -0
  139. package/DS1/5-visual-kit/bezels.ts +394 -0
  140. package/DS1/5-visual-kit/browser-icons.LICENSE +53 -0
  141. package/DS1/5-visual-kit/browser-icons.ts +47 -0
  142. package/DS1/5-visual-kit/browser-styles.ts +53 -0
  143. package/DS1/5-visual-kit/device-bezel.ts +55 -0
  144. package/DS1/5-visual-kit/instagram-frame.ts +15 -0
  145. package/DS1/5-visual-kit/instagram.ts +41 -0
  146. package/DS1/5-visual-kit/mobile-chrome.ts +25 -0
  147. package/DS1/5-visual-kit/native-icon-paths.ts +145 -0
  148. package/DS1/5-visual-kit/window.ts +22 -0
  149. package/DS1/components.ts +1 -0
  150. package/DS1/index.ts +14 -1
  151. package/DS1/react/choice.ts +4 -2
  152. package/DS1/react/context.ts +11 -6
  153. package/DS1/react/empty.ts +2 -2
  154. package/DS1/react/footer.ts +5 -5
  155. package/DS1/react/header.ts +1 -1
  156. package/DS1/react/message.ts +4 -2
  157. package/DS1/react/number.ts +53 -0
  158. package/DS1/react/sidebar.ts +4 -2
  159. package/DS1/react/table-of-contents.ts +28 -0
  160. package/DS1/x-flag/LICENSE.md +26 -0
  161. package/DS1/x-flag/ac.svg +1 -0
  162. package/DS1/x-flag/ad.svg +1 -0
  163. package/DS1/x-flag/ae.svg +1 -0
  164. package/DS1/x-flag/af.svg +1 -0
  165. package/DS1/x-flag/ag.svg +1 -0
  166. package/DS1/x-flag/ai.svg +1 -0
  167. package/DS1/x-flag/al.svg +1 -0
  168. package/DS1/x-flag/am.svg +1 -0
  169. package/DS1/x-flag/ao.svg +1 -0
  170. package/DS1/x-flag/aq.svg +1 -0
  171. package/DS1/x-flag/ar.svg +1 -0
  172. package/DS1/x-flag/as.svg +1 -0
  173. package/DS1/x-flag/at.svg +1 -0
  174. package/DS1/x-flag/au.svg +1 -0
  175. package/DS1/x-flag/aw.svg +1 -0
  176. package/DS1/x-flag/ax.svg +1 -0
  177. package/DS1/x-flag/az.svg +1 -0
  178. package/DS1/x-flag/ba.svg +1 -0
  179. package/DS1/x-flag/bb.svg +1 -0
  180. package/DS1/x-flag/bd.svg +1 -0
  181. package/DS1/x-flag/be.svg +1 -0
  182. package/DS1/x-flag/bf.svg +1 -0
  183. package/DS1/x-flag/bg.svg +1 -0
  184. package/DS1/x-flag/bh.svg +1 -0
  185. package/DS1/x-flag/bi.svg +1 -0
  186. package/DS1/x-flag/bj.svg +1 -0
  187. package/DS1/x-flag/bl.svg +1 -0
  188. package/DS1/x-flag/bm.svg +1 -0
  189. package/DS1/x-flag/bn.svg +1 -0
  190. package/DS1/x-flag/bo.svg +1 -0
  191. package/DS1/x-flag/bq-bo.svg +1 -0
  192. package/DS1/x-flag/bq-sa.svg +1 -0
  193. package/DS1/x-flag/bq-se.svg +1 -0
  194. package/DS1/x-flag/bq.svg +1 -0
  195. package/DS1/x-flag/br.svg +1 -0
  196. package/DS1/x-flag/bs.svg +1 -0
  197. package/DS1/x-flag/bt.svg +1 -0
  198. package/DS1/x-flag/bv.svg +1 -0
  199. package/DS1/x-flag/bw.svg +1 -0
  200. package/DS1/x-flag/by.svg +1 -0
  201. package/DS1/x-flag/bz.svg +1 -0
  202. package/DS1/x-flag/ca.svg +1 -0
  203. package/DS1/x-flag/cc.svg +1 -0
  204. package/DS1/x-flag/cd.svg +1 -0
  205. package/DS1/x-flag/cf.svg +1 -0
  206. package/DS1/x-flag/cg.svg +1 -0
  207. package/DS1/x-flag/ch.svg +1 -0
  208. package/DS1/x-flag/ci.svg +1 -0
  209. package/DS1/x-flag/ck.svg +1 -0
  210. package/DS1/x-flag/cl.svg +1 -0
  211. package/DS1/x-flag/cm.svg +1 -0
  212. package/DS1/x-flag/cn.svg +1 -0
  213. package/DS1/x-flag/co.svg +1 -0
  214. package/DS1/x-flag/cr.svg +1 -0
  215. package/DS1/x-flag/cu.svg +1 -0
  216. package/DS1/x-flag/cv.svg +1 -0
  217. package/DS1/x-flag/cw.svg +1 -0
  218. package/DS1/x-flag/cx.svg +1 -0
  219. package/DS1/x-flag/cy.svg +1 -0
  220. package/DS1/x-flag/cz.svg +1 -0
  221. package/DS1/x-flag/de.svg +1 -0
  222. package/DS1/x-flag/dj.svg +1 -0
  223. package/DS1/x-flag/dk.svg +1 -0
  224. package/DS1/x-flag/dm.svg +1 -0
  225. package/DS1/x-flag/do.svg +1 -0
  226. package/DS1/x-flag/dz.svg +1 -0
  227. package/DS1/x-flag/ec.svg +1 -0
  228. package/DS1/x-flag/ee.svg +1 -0
  229. package/DS1/x-flag/eg.svg +1 -0
  230. package/DS1/x-flag/eh.svg +1 -0
  231. package/DS1/x-flag/er.svg +1 -0
  232. package/DS1/x-flag/es-ct.svg +1 -0
  233. package/DS1/x-flag/es.svg +1 -0
  234. package/DS1/x-flag/et.svg +1 -0
  235. package/DS1/x-flag/eu.svg +1 -0
  236. package/DS1/x-flag/fi.svg +1 -0
  237. package/DS1/x-flag/fj.svg +1 -0
  238. package/DS1/x-flag/fk.svg +1 -0
  239. package/DS1/x-flag/fm.svg +1 -0
  240. package/DS1/x-flag/fo.svg +1 -0
  241. package/DS1/x-flag/fr.svg +1 -0
  242. package/DS1/x-flag/ga.svg +1 -0
  243. package/DS1/x-flag/gb-eng.svg +1 -0
  244. package/DS1/x-flag/gb-nir.svg +1 -0
  245. package/DS1/x-flag/gb-sct.svg +1 -0
  246. package/DS1/x-flag/gb-wls.svg +1 -0
  247. package/DS1/x-flag/gb.svg +1 -0
  248. package/DS1/x-flag/gd.svg +1 -0
  249. package/DS1/x-flag/ge.svg +1 -0
  250. package/DS1/x-flag/gf.svg +1 -0
  251. package/DS1/x-flag/gg.svg +1 -0
  252. package/DS1/x-flag/gh.svg +1 -0
  253. package/DS1/x-flag/gi.svg +1 -0
  254. package/DS1/x-flag/gl.svg +1 -0
  255. package/DS1/x-flag/gm.svg +1 -0
  256. package/DS1/x-flag/gn.svg +1 -0
  257. package/DS1/x-flag/gp.svg +1 -0
  258. package/DS1/x-flag/gq.svg +1 -0
  259. package/DS1/x-flag/gr.svg +1 -0
  260. package/DS1/x-flag/gs.svg +1 -0
  261. package/DS1/x-flag/gt.svg +1 -0
  262. package/DS1/x-flag/gu.svg +1 -0
  263. package/DS1/x-flag/gw.svg +1 -0
  264. package/DS1/x-flag/gy.svg +1 -0
  265. package/DS1/x-flag/hk.svg +1 -0
  266. package/DS1/x-flag/hm.svg +1 -0
  267. package/DS1/x-flag/hn.svg +1 -0
  268. package/DS1/x-flag/hr.svg +1 -0
  269. package/DS1/x-flag/ht.svg +1 -0
  270. package/DS1/x-flag/hu.svg +1 -0
  271. package/DS1/x-flag/ic.svg +1 -0
  272. package/DS1/x-flag/id.svg +1 -0
  273. package/DS1/x-flag/ie.svg +1 -0
  274. package/DS1/x-flag/il.svg +1 -0
  275. package/DS1/x-flag/im.svg +1 -0
  276. package/DS1/x-flag/in.svg +1 -0
  277. package/DS1/x-flag/io.svg +1 -0
  278. package/DS1/x-flag/iq.svg +1 -0
  279. package/DS1/x-flag/ir.svg +1 -0
  280. package/DS1/x-flag/is.svg +1 -0
  281. package/DS1/x-flag/it.svg +1 -0
  282. package/DS1/x-flag/je.svg +1 -0
  283. package/DS1/x-flag/jm.svg +1 -0
  284. package/DS1/x-flag/jo.svg +1 -0
  285. package/DS1/x-flag/jp.svg +1 -0
  286. package/DS1/x-flag/ke.svg +1 -0
  287. package/DS1/x-flag/kg.svg +1 -0
  288. package/DS1/x-flag/kh.svg +1 -0
  289. package/DS1/x-flag/ki.svg +1 -0
  290. package/DS1/x-flag/km.svg +1 -0
  291. package/DS1/x-flag/kn.svg +1 -0
  292. package/DS1/x-flag/kp.svg +1 -0
  293. package/DS1/x-flag/kr.svg +1 -0
  294. package/DS1/x-flag/kw.svg +1 -0
  295. package/DS1/x-flag/ky.svg +1 -0
  296. package/DS1/x-flag/kz.svg +1 -0
  297. package/DS1/x-flag/la.svg +1 -0
  298. package/DS1/x-flag/lb.svg +1 -0
  299. package/DS1/x-flag/lc.svg +1 -0
  300. package/DS1/x-flag/li.svg +1 -0
  301. package/DS1/x-flag/lk.svg +1 -0
  302. package/DS1/x-flag/lr.svg +1 -0
  303. package/DS1/x-flag/ls.svg +1 -0
  304. package/DS1/x-flag/lt.svg +1 -0
  305. package/DS1/x-flag/lu.svg +1 -0
  306. package/DS1/x-flag/lv.svg +1 -0
  307. package/DS1/x-flag/ly.svg +1 -0
  308. package/DS1/x-flag/ma.svg +1 -0
  309. package/DS1/x-flag/mc.svg +1 -0
  310. package/DS1/x-flag/md.svg +1 -0
  311. package/DS1/x-flag/me.svg +1 -0
  312. package/DS1/x-flag/mf.svg +1 -0
  313. package/DS1/x-flag/mg.svg +1 -0
  314. package/DS1/x-flag/mh.svg +1 -0
  315. package/DS1/x-flag/mk.svg +1 -0
  316. package/DS1/x-flag/ml.svg +1 -0
  317. package/DS1/x-flag/mm.svg +1 -0
  318. package/DS1/x-flag/mn.svg +1 -0
  319. package/DS1/x-flag/mo.svg +1 -0
  320. package/DS1/x-flag/mp.svg +1 -0
  321. package/DS1/x-flag/mq.svg +1 -0
  322. package/DS1/x-flag/mr.svg +1 -0
  323. package/DS1/x-flag/ms.svg +1 -0
  324. package/DS1/x-flag/mt.svg +1 -0
  325. package/DS1/x-flag/mu.svg +1 -0
  326. package/DS1/x-flag/mv.svg +1 -0
  327. package/DS1/x-flag/mw.svg +1 -0
  328. package/DS1/x-flag/mx.svg +1 -0
  329. package/DS1/x-flag/my.svg +1 -0
  330. package/DS1/x-flag/mz.svg +1 -0
  331. package/DS1/x-flag/na.svg +1 -0
  332. package/DS1/x-flag/nc.svg +1 -0
  333. package/DS1/x-flag/ne.svg +1 -0
  334. package/DS1/x-flag/nf.svg +1 -0
  335. package/DS1/x-flag/ng.svg +1 -0
  336. package/DS1/x-flag/ni.svg +1 -0
  337. package/DS1/x-flag/nl.svg +1 -0
  338. package/DS1/x-flag/no.svg +1 -0
  339. package/DS1/x-flag/np.svg +1 -0
  340. package/DS1/x-flag/nr.svg +1 -0
  341. package/DS1/x-flag/nu.svg +1 -0
  342. package/DS1/x-flag/nz.svg +1 -0
  343. package/DS1/x-flag/om.svg +1 -0
  344. package/DS1/x-flag/pa.svg +1 -0
  345. package/DS1/x-flag/pe.svg +1 -0
  346. package/DS1/x-flag/pf.svg +1 -0
  347. package/DS1/x-flag/pg.svg +1 -0
  348. package/DS1/x-flag/ph.svg +1 -0
  349. package/DS1/x-flag/pk.svg +1 -0
  350. package/DS1/x-flag/pl.svg +1 -0
  351. package/DS1/x-flag/pm.svg +1 -0
  352. package/DS1/x-flag/pn.svg +1 -0
  353. package/DS1/x-flag/pr.svg +1 -0
  354. package/DS1/x-flag/ps.svg +1 -0
  355. package/DS1/x-flag/pt.svg +1 -0
  356. package/DS1/x-flag/pw.svg +1 -0
  357. package/DS1/x-flag/py.svg +1 -0
  358. package/DS1/x-flag/qa.svg +1 -0
  359. package/DS1/x-flag/re.svg +1 -0
  360. package/DS1/x-flag/ro.svg +1 -0
  361. package/DS1/x-flag/rs.svg +1 -0
  362. package/DS1/x-flag/ru.svg +1 -0
  363. package/DS1/x-flag/rw.svg +1 -0
  364. package/DS1/x-flag/sa.svg +1 -0
  365. package/DS1/x-flag/sb.svg +1 -0
  366. package/DS1/x-flag/sc.svg +1 -0
  367. package/DS1/x-flag/sd.svg +1 -0
  368. package/DS1/x-flag/se.svg +1 -0
  369. package/DS1/x-flag/sg.svg +1 -0
  370. package/DS1/x-flag/sh.svg +1 -0
  371. package/DS1/x-flag/si.svg +1 -0
  372. package/DS1/x-flag/sj.svg +1 -0
  373. package/DS1/x-flag/sk.svg +1 -0
  374. package/DS1/x-flag/sl.svg +1 -0
  375. package/DS1/x-flag/sm.svg +1 -0
  376. package/DS1/x-flag/sn.svg +1 -0
  377. package/DS1/x-flag/so.svg +1 -0
  378. package/DS1/x-flag/sr.svg +1 -0
  379. package/DS1/x-flag/ss.svg +1 -0
  380. package/DS1/x-flag/st.svg +1 -0
  381. package/DS1/x-flag/sv.svg +1 -0
  382. package/DS1/x-flag/sx.svg +1 -0
  383. package/DS1/x-flag/sy.svg +1 -0
  384. package/DS1/x-flag/sz.svg +1 -0
  385. package/DS1/x-flag/ta.svg +1 -0
  386. package/DS1/x-flag/tc.svg +1 -0
  387. package/DS1/x-flag/td.svg +1 -0
  388. package/DS1/x-flag/tf.svg +1 -0
  389. package/DS1/x-flag/tg.svg +1 -0
  390. package/DS1/x-flag/th.svg +1 -0
  391. package/DS1/x-flag/tj.svg +1 -0
  392. package/DS1/x-flag/tk.svg +1 -0
  393. package/DS1/x-flag/tl.svg +1 -0
  394. package/DS1/x-flag/tm.svg +1 -0
  395. package/DS1/x-flag/tn.svg +1 -0
  396. package/DS1/x-flag/to.svg +1 -0
  397. package/DS1/x-flag/tr.svg +1 -0
  398. package/DS1/x-flag/tt.svg +1 -0
  399. package/DS1/x-flag/tv.svg +1 -0
  400. package/DS1/x-flag/tw.svg +1 -0
  401. package/DS1/x-flag/tz.svg +1 -0
  402. package/DS1/x-flag/ua.svg +1 -0
  403. package/DS1/x-flag/ug.svg +1 -0
  404. package/DS1/x-flag/um.svg +1 -0
  405. package/DS1/x-flag/us.svg +1 -0
  406. package/DS1/x-flag/uy.svg +1 -0
  407. package/DS1/x-flag/uz.svg +1 -0
  408. package/DS1/x-flag/va.svg +1 -0
  409. package/DS1/x-flag/vc.svg +1 -0
  410. package/DS1/x-flag/ve.svg +1 -0
  411. package/DS1/x-flag/vg.svg +1 -0
  412. package/DS1/x-flag/vi.svg +1 -0
  413. package/DS1/x-flag/vn.svg +1 -0
  414. package/DS1/x-flag/vu.svg +1 -0
  415. package/DS1/x-flag/wf.svg +1 -0
  416. package/DS1/x-flag/ws.svg +1 -0
  417. package/DS1/x-flag/xk.svg +1 -0
  418. package/DS1/x-flag/ye.svg +1 -0
  419. package/DS1/x-flag/yt.svg +1 -0
  420. package/DS1/x-flag/za.svg +1 -0
  421. package/DS1/x-flag/zm.svg +1 -0
  422. package/DS1/x-flag/zw.svg +1 -0
  423. package/DS1/x-icon/android.svg +9 -0
  424. package/DS1/x-icon/arrange-check.svg +1 -1
  425. package/DS1/x-icon/arrange-page.svg +1 -1
  426. package/DS1/x-icon/chrome.svg +7 -0
  427. package/DS1/x-icon/edge-brand.svg +6 -0
  428. package/DS1/x-icon/firefox.svg +4 -0
  429. package/DS1/x-icon/health.svg +3 -0
  430. package/DS1/x-icon/left.svg +2 -3
  431. package/DS1/x-icon/linux.svg +1 -0
  432. package/DS1/x-icon/material.svg +1 -0
  433. package/DS1/x-icon/milestone-planned.svg +3 -0
  434. package/DS1/x-icon/milestone.svg +3 -0
  435. package/DS1/x-icon/more.svg +1 -5
  436. package/DS1/x-icon/network.svg +3 -0
  437. package/DS1/x-icon/opera.svg +4 -0
  438. package/DS1/x-icon/prediction.svg +3 -0
  439. package/DS1/x-icon/priority-high.svg +3 -0
  440. package/DS1/x-icon/priority-low.svg +3 -0
  441. package/DS1/x-icon/priority-medium.svg +3 -0
  442. package/DS1/x-icon/project.svg +3 -0
  443. package/DS1/x-icon/redo.svg +2 -2
  444. package/DS1/x-icon/repeat-small.svg +3 -0
  445. package/DS1/x-icon/safari.svg +4 -0
  446. package/DS1/x-icon/scaling.svg +3 -0
  447. package/DS1/x-icon/tabs.svg +4 -0
  448. package/DS1/x-icon/windows.svg +5 -0
  449. package/README.md +3 -3
  450. package/dist/0-face/button-label.d.ts +5 -0
  451. package/dist/0-face/button-label.d.ts.map +1 -0
  452. package/dist/0-face/button-label.js +31 -0
  453. package/dist/0-face/calendar.d.ts +1 -1
  454. package/dist/0-face/calendar.d.ts.map +1 -1
  455. package/dist/0-face/calendar.js +6 -3
  456. package/dist/0-face/carousel.d.ts +9 -0
  457. package/dist/0-face/carousel.d.ts.map +1 -1
  458. package/dist/0-face/carousel.js +80 -0
  459. package/dist/0-face/constraint-panel.d.ts +43 -0
  460. package/dist/0-face/constraint-panel.d.ts.map +1 -0
  461. package/dist/0-face/constraint-panel.js +429 -0
  462. package/dist/0-face/constraint-site.d.ts +72 -0
  463. package/dist/0-face/constraint-site.d.ts.map +1 -0
  464. package/dist/0-face/constraint-site.js +185 -0
  465. package/dist/0-face/constraints.d.ts +47 -0
  466. package/dist/0-face/constraints.d.ts.map +1 -0
  467. package/dist/0-face/constraints.js +247 -0
  468. package/dist/0-face/copy-text.js +1 -1
  469. package/dist/0-face/cut-fade.d.ts +112 -0
  470. package/dist/0-face/cut-fade.d.ts.map +1 -0
  471. package/dist/0-face/cut-fade.js +274 -0
  472. package/dist/0-face/define.d.ts.map +1 -1
  473. package/dist/0-face/define.js +24 -3
  474. package/dist/0-face/face-correction.d.ts +51 -0
  475. package/dist/0-face/face-correction.d.ts.map +1 -0
  476. package/dist/0-face/face-correction.js +80 -0
  477. package/dist/0-face/failures.d.ts +16 -0
  478. package/dist/0-face/failures.d.ts.map +1 -0
  479. package/dist/0-face/failures.js +21 -0
  480. package/dist/0-face/feedback-overlays.d.ts.map +1 -1
  481. package/dist/0-face/feedback-overlays.js +5 -3
  482. package/dist/0-face/feedback.d.ts +2 -0
  483. package/dist/0-face/feedback.d.ts.map +1 -1
  484. package/dist/0-face/feedback.js +1 -0
  485. package/dist/0-face/focus.d.ts +71 -0
  486. package/dist/0-face/focus.d.ts.map +1 -0
  487. package/dist/0-face/focus.js +196 -0
  488. package/dist/0-face/grid.d.ts +11 -1
  489. package/dist/0-face/grid.d.ts.map +1 -1
  490. package/dist/0-face/grid.js +90 -4
  491. package/dist/0-face/i18n.d.ts.map +1 -1
  492. package/dist/0-face/i18n.js +38 -16
  493. package/dist/0-face/layout-inspector.d.ts +5 -1
  494. package/dist/0-face/layout-inspector.d.ts.map +1 -1
  495. package/dist/0-face/layout-inspector.js +130 -104
  496. package/dist/0-face/preference-options.d.ts +4 -0
  497. package/dist/0-face/preference-options.d.ts.map +1 -1
  498. package/dist/0-face/scaling.d.ts +8 -1
  499. package/dist/0-face/scaling.d.ts.map +1 -1
  500. package/dist/0-face/scaling.js +19 -2
  501. package/dist/0-face/shape.d.ts +35 -0
  502. package/dist/0-face/shape.d.ts.map +1 -0
  503. package/dist/0-face/shape.js +23 -0
  504. package/dist/0-face/text-contrast.d.ts +22 -0
  505. package/dist/0-face/text-contrast.d.ts.map +1 -0
  506. package/dist/0-face/text-contrast.js +178 -0
  507. package/dist/0-face/theme-bootstrap.js +56 -0
  508. package/dist/0-face/toast-queue.d.ts +4 -0
  509. package/dist/0-face/toast-queue.d.ts.map +1 -1
  510. package/dist/0-face/toast-queue.js +4 -1
  511. package/dist/0-face/translations/da.json +10 -1
  512. package/dist/0-face/translations/de.json +10 -1
  513. package/dist/0-face/translations/en.json +10 -1
  514. package/dist/0-face/translations/es.json +10 -1
  515. package/dist/0-face/translations/fi.json +10 -1
  516. package/dist/0-face/translations/fr.json +10 -1
  517. package/dist/0-face/translations/is.json +10 -1
  518. package/dist/0-face/translations/it.json +10 -1
  519. package/dist/0-face/translations/ja.json +10 -1
  520. package/dist/0-face/translations/ko.json +10 -1
  521. package/dist/0-face/translations/nb.json +10 -1
  522. package/dist/0-face/translations/pt-BR.json +10 -1
  523. package/dist/0-face/translations/pt.json +10 -1
  524. package/dist/0-face/translations/sv.json +10 -1
  525. package/dist/0-face/translations/zh.json +10 -1
  526. package/dist/0-face/word-wrap.d.ts +6 -0
  527. package/dist/0-face/word-wrap.d.ts.map +1 -0
  528. package/dist/0-face/word-wrap.js +119 -0
  529. package/dist/1-root/foundation.d.ts +12 -0
  530. package/dist/1-root/foundation.d.ts.map +1 -0
  531. package/dist/1-root/foundation.js +59 -0
  532. package/dist/2-core/button-split.d.ts +1 -0
  533. package/dist/2-core/button-split.d.ts.map +1 -1
  534. package/dist/2-core/button-split.js +9 -4
  535. package/dist/2-core/chart/grid-chart.d.ts +2 -0
  536. package/dist/2-core/chart/grid-chart.d.ts.map +1 -1
  537. package/dist/2-core/chart/grid-chart.js +2 -1
  538. package/dist/2-core/ds-activity.d.ts +25 -0
  539. package/dist/2-core/ds-activity.d.ts.map +1 -0
  540. package/dist/2-core/ds-activity.js +28 -0
  541. package/dist/2-core/ds-app-chrome.d.ts +2 -0
  542. package/dist/2-core/ds-app-chrome.d.ts.map +1 -0
  543. package/dist/2-core/ds-app-chrome.js +1 -0
  544. package/dist/2-core/ds-avatar.d.ts +7 -0
  545. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  546. package/dist/2-core/ds-avatar.js +41 -6
  547. package/dist/2-core/ds-badge.d.ts +7 -1
  548. package/dist/2-core/ds-badge.d.ts.map +1 -1
  549. package/dist/2-core/ds-badge.js +8 -1
  550. package/dist/2-core/ds-button.d.ts +12 -0
  551. package/dist/2-core/ds-button.d.ts.map +1 -1
  552. package/dist/2-core/ds-button.js +4 -0
  553. package/dist/2-core/ds-chart.d.ts +28 -3
  554. package/dist/2-core/ds-chart.d.ts.map +1 -1
  555. package/dist/2-core/ds-chart.js +110 -130
  556. package/dist/2-core/ds-cycle.d.ts +2 -2
  557. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  558. package/dist/2-core/ds-cycle.js +36 -171
  559. package/dist/2-core/ds-device-bezel.d.ts +2 -0
  560. package/dist/2-core/ds-device-bezel.d.ts.map +1 -0
  561. package/dist/2-core/ds-device-bezel.js +1 -0
  562. package/dist/2-core/ds-empty.d.ts +2 -2
  563. package/dist/2-core/ds-empty.d.ts.map +1 -1
  564. package/dist/2-core/ds-empty.js +6 -4
  565. package/dist/2-core/ds-input.d.ts +7 -0
  566. package/dist/2-core/ds-input.d.ts.map +1 -1
  567. package/dist/2-core/ds-input.js +23 -3
  568. package/dist/2-core/ds-message.d.ts +11 -0
  569. package/dist/2-core/ds-message.d.ts.map +1 -1
  570. package/dist/2-core/ds-message.js +18 -0
  571. package/dist/2-core/ds-number.d.ts +86 -0
  572. package/dist/2-core/ds-number.d.ts.map +1 -0
  573. package/dist/2-core/ds-number.js +326 -0
  574. package/dist/2-core/ds-progress.d.ts +3 -0
  575. package/dist/2-core/ds-progress.d.ts.map +1 -1
  576. package/dist/2-core/ds-progress.js +3 -0
  577. package/dist/2-core/ds-radio.d.ts +3 -0
  578. package/dist/2-core/ds-radio.d.ts.map +1 -1
  579. package/dist/2-core/ds-radio.js +10 -1
  580. package/dist/2-core/ds-stat.d.ts +3 -0
  581. package/dist/2-core/ds-stat.d.ts.map +1 -1
  582. package/dist/2-core/ds-stat.js +3 -0
  583. package/dist/2-core/ds-switch.d.ts +14 -1
  584. package/dist/2-core/ds-switch.d.ts.map +1 -1
  585. package/dist/2-core/ds-switch.js +3 -1
  586. package/dist/2-core/ds-tag.d.ts +8 -1
  587. package/dist/2-core/ds-tag.d.ts.map +1 -1
  588. package/dist/2-core/ds-tag.js +12 -2
  589. package/dist/2-core/ds-text.d.ts +7 -0
  590. package/dist/2-core/ds-text.d.ts.map +1 -1
  591. package/dist/2-core/ds-text.js +7 -0
  592. package/dist/2-core/ds-token.d.ts +3 -0
  593. package/dist/2-core/ds-token.d.ts.map +1 -1
  594. package/dist/2-core/ds-token.js +3 -0
  595. package/dist/2-core/ds-tooltip.d.ts.map +1 -1
  596. package/dist/2-core/ds-tooltip.js +23 -2
  597. package/dist/2-core/ds-window.d.ts +2 -0
  598. package/dist/2-core/ds-window.d.ts.map +1 -0
  599. package/dist/2-core/ds-window.js +1 -0
  600. package/dist/2-core/generated/ds-icon-map.d.ts +27 -6
  601. package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
  602. package/dist/2-core/generated/ds-icon-map.js +47 -5
  603. package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
  604. package/dist/2-core/generated/icons-extra.js +24 -3
  605. package/dist/2-core/generated/icons-immediate.d.ts +1 -1
  606. package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
  607. package/dist/2-core/generated/icons-immediate.js +3 -3
  608. package/dist/2-core/number-expression.d.ts +12 -0
  609. package/dist/2-core/number-expression.d.ts.map +1 -0
  610. package/dist/2-core/number-expression.js +82 -0
  611. package/dist/3-unit/calendar-base.d.ts +5 -0
  612. package/dist/3-unit/calendar-base.d.ts.map +1 -1
  613. package/dist/3-unit/calendar-base.js +3 -2
  614. package/dist/3-unit/ds-calendar.d.ts +197 -4
  615. package/dist/3-unit/ds-calendar.d.ts.map +1 -1
  616. package/dist/3-unit/ds-calendar.js +687 -45
  617. package/dist/3-unit/ds-carousel.d.ts +3 -0
  618. package/dist/3-unit/ds-carousel.d.ts.map +1 -1
  619. package/dist/3-unit/ds-carousel.js +13 -1
  620. package/dist/3-unit/ds-context.d.ts +18 -1
  621. package/dist/3-unit/ds-context.d.ts.map +1 -1
  622. package/dist/3-unit/ds-context.js +37 -1
  623. package/dist/3-unit/ds-form.d.ts +9 -0
  624. package/dist/3-unit/ds-form.d.ts.map +1 -1
  625. package/dist/3-unit/ds-form.js +50 -10
  626. package/dist/3-unit/ds-list.d.ts +20 -1
  627. package/dist/3-unit/ds-list.d.ts.map +1 -1
  628. package/dist/3-unit/ds-list.js +31 -3
  629. package/dist/3-unit/ds-matrix.d.ts +3 -0
  630. package/dist/3-unit/ds-matrix.d.ts.map +1 -1
  631. package/dist/3-unit/ds-matrix.js +3 -0
  632. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  633. package/dist/3-unit/ds-menu.js +17 -1
  634. package/dist/3-unit/ds-row.d.ts +13 -0
  635. package/dist/3-unit/ds-row.d.ts.map +1 -1
  636. package/dist/3-unit/ds-row.js +15 -2
  637. package/dist/3-unit/ds-select.js +1 -1
  638. package/dist/3-unit/ds-sidebar.d.ts +17 -0
  639. package/dist/3-unit/ds-sidebar.d.ts.map +1 -1
  640. package/dist/3-unit/ds-sidebar.js +14 -3
  641. package/dist/3-unit/ds-table-of-contents.d.ts +68 -0
  642. package/dist/3-unit/ds-table-of-contents.d.ts.map +1 -0
  643. package/dist/3-unit/ds-table-of-contents.js +190 -0
  644. package/dist/3-unit/ds-tabs.d.ts +32 -1
  645. package/dist/3-unit/ds-tabs.d.ts.map +1 -1
  646. package/dist/3-unit/ds-tabs.js +39 -1
  647. package/dist/4-page/ds-document.d.ts +3 -0
  648. package/dist/4-page/ds-document.d.ts.map +1 -1
  649. package/dist/4-page/ds-document.js +3 -0
  650. package/dist/4-page/ds-footer.d.ts +47 -7
  651. package/dist/4-page/ds-footer.d.ts.map +1 -1
  652. package/dist/4-page/ds-footer.js +58 -14
  653. package/dist/4-page/ds-header.d.ts +6 -0
  654. package/dist/4-page/ds-header.d.ts.map +1 -1
  655. package/dist/4-page/ds-header.js +4 -1
  656. package/dist/4-page/ds-overlay.d.ts +2 -2
  657. package/dist/4-page/ds-overlay.d.ts.map +1 -1
  658. package/dist/4-page/ds-overlay.js +8 -3
  659. package/dist/4-page/ds-page.d.ts +12 -0
  660. package/dist/4-page/ds-page.d.ts.map +1 -1
  661. package/dist/4-page/ds-page.js +19 -1
  662. package/dist/4-page/email.d.ts +2 -0
  663. package/dist/4-page/email.d.ts.map +1 -1
  664. package/dist/4-page/email.js +5 -4
  665. package/dist/5-visual-kit/app-chrome.d.ts +98 -0
  666. package/dist/5-visual-kit/app-chrome.d.ts.map +1 -0
  667. package/dist/5-visual-kit/app-chrome.js +119 -0
  668. package/dist/5-visual-kit/bezels.d.ts +30 -0
  669. package/dist/5-visual-kit/bezels.d.ts.map +1 -0
  670. package/dist/5-visual-kit/bezels.js +388 -0
  671. package/dist/5-visual-kit/browser-icons.d.ts +5 -0
  672. package/dist/5-visual-kit/browser-icons.d.ts.map +1 -0
  673. package/dist/5-visual-kit/browser-icons.js +51 -0
  674. package/dist/5-visual-kit/browser-styles.d.ts +3 -0
  675. package/dist/5-visual-kit/browser-styles.d.ts.map +1 -0
  676. package/dist/5-visual-kit/browser-styles.js +52 -0
  677. package/dist/5-visual-kit/device-bezel.d.ts +84 -0
  678. package/dist/5-visual-kit/device-bezel.d.ts.map +1 -0
  679. package/dist/5-visual-kit/device-bezel.js +56 -0
  680. package/dist/5-visual-kit/instagram-frame.d.ts +8 -0
  681. package/dist/5-visual-kit/instagram-frame.d.ts.map +1 -0
  682. package/dist/5-visual-kit/instagram-frame.js +13 -0
  683. package/dist/5-visual-kit/instagram.d.ts +18 -0
  684. package/dist/5-visual-kit/instagram.d.ts.map +1 -0
  685. package/dist/5-visual-kit/instagram.js +39 -0
  686. package/dist/5-visual-kit/mobile-chrome.d.ts +4 -0
  687. package/dist/5-visual-kit/mobile-chrome.d.ts.map +1 -0
  688. package/dist/5-visual-kit/mobile-chrome.js +24 -0
  689. package/dist/5-visual-kit/native-icon-paths.d.ts +146 -0
  690. package/dist/5-visual-kit/native-icon-paths.d.ts.map +1 -0
  691. package/dist/5-visual-kit/native-icon-paths.js +145 -0
  692. package/dist/5-visual-kit/window.d.ts +51 -0
  693. package/dist/5-visual-kit/window.d.ts.map +1 -0
  694. package/dist/5-visual-kit/window.js +20 -0
  695. package/dist/browser-icons-BFbS1tIx.js +56 -0
  696. package/dist/browser-icons-BFbS1tIx.js.map +1 -0
  697. package/dist/browser-icons-CT8qU77Z.js +48 -0
  698. package/dist/browser-icons-CT8qU77Z.js.map +1 -0
  699. package/dist/components.d.ts +1 -0
  700. package/dist/components.d.ts.map +1 -1
  701. package/dist/components.js +1 -0
  702. package/dist/design-system-1.bundle.js +5514 -2077
  703. package/dist/design-system-1.bundle.js.map +1 -1
  704. package/dist/design-system-1.bundle.min.js +7026 -4628
  705. package/dist/design-system-1.bundle.min.js.map +1 -1
  706. package/dist/design-system-1.css +1 -1
  707. package/dist/feedback.js +197 -167
  708. package/dist/feedback.js.map +1 -1
  709. package/dist/{icons-extra-CRxxWFjX.js → icons-extra-BMPvmQPI.js} +25 -4
  710. package/dist/icons-extra-BMPvmQPI.js.map +1 -0
  711. package/dist/{icons-extra-H5pqCM_R.js → icons-extra-BfYOw-cR.js} +83 -5
  712. package/dist/icons-extra-BfYOw-cR.js.map +1 -0
  713. package/dist/index.d.ts +12 -1
  714. package/dist/index.d.ts.map +1 -1
  715. package/dist/index.js +11 -1
  716. package/dist/instagram-CKofs55A.js +50 -0
  717. package/dist/instagram-CKofs55A.js.map +1 -0
  718. package/dist/instagram-CcYf5oiM.js +48 -0
  719. package/dist/instagram-CcYf5oiM.js.map +1 -0
  720. package/dist/lit-Ce_uWYM4.js +612 -0
  721. package/dist/lit-Ce_uWYM4.js.map +1 -0
  722. package/dist/lit-DGUVm1Ce.js +557 -0
  723. package/dist/lit-DGUVm1Ce.js.map +1 -0
  724. package/dist/native-icon-paths-CB9evXBM.js +93 -0
  725. package/dist/native-icon-paths-CB9evXBM.js.map +1 -0
  726. package/dist/native-icon-paths-zay-3g_n.js +150 -0
  727. package/dist/native-icon-paths-zay-3g_n.js.map +1 -0
  728. package/dist/react/avatar.d.ts +1 -1
  729. package/dist/react/choice.d.ts +4 -0
  730. package/dist/react/choice.d.ts.map +1 -1
  731. package/dist/react/choice.js +2 -2
  732. package/dist/react/context.d.ts +19 -4
  733. package/dist/react/context.d.ts.map +1 -1
  734. package/dist/react/context.js +4 -4
  735. package/dist/react/empty.d.ts +2 -2
  736. package/dist/react/empty.d.ts.map +1 -1
  737. package/dist/react/empty.js +1 -1
  738. package/dist/react/footer.d.ts +5 -5
  739. package/dist/react/footer.d.ts.map +1 -1
  740. package/dist/react/footer.js +2 -2
  741. package/dist/react/header.d.ts +2 -2
  742. package/dist/react/header.d.ts.map +1 -1
  743. package/dist/react/message.d.ts +4 -0
  744. package/dist/react/message.d.ts.map +1 -1
  745. package/dist/react/message.js +2 -2
  746. package/dist/react/number.d.ts +53 -0
  747. package/dist/react/number.d.ts.map +1 -0
  748. package/dist/react/number.js +25 -0
  749. package/dist/react/page.d.ts +1 -1
  750. package/dist/react/sidebar.d.ts +4 -0
  751. package/dist/react/sidebar.d.ts.map +1 -1
  752. package/dist/react/sidebar.js +2 -2
  753. package/dist/react/table-of-contents.d.ts +19 -0
  754. package/dist/react/table-of-contents.d.ts.map +1 -0
  755. package/dist/react/table-of-contents.js +28 -0
  756. package/dist/{shared-words-CdMDVtXx.js → shared-words-C5cjxMjZ.js} +151 -16
  757. package/dist/shared-words-C5cjxMjZ.js.map +1 -0
  758. package/dist/{shared-words-BtRee8xR.js → shared-words-Cdm7xd-_.js} +163 -28
  759. package/dist/shared-words-Cdm7xd-_.js.map +1 -0
  760. package/package.json +23 -12
  761. package/DS1/3-unit/ds-calendar-large.ts +0 -353
  762. package/DS1/3-unit/styles/ds-calendar-large.css +0 -178
  763. package/dist/3-unit/ds-calendar-large.d.ts +0 -142
  764. package/dist/3-unit/ds-calendar-large.d.ts.map +0 -1
  765. package/dist/3-unit/ds-calendar-large.js +0 -308
  766. package/dist/icons-extra-CRxxWFjX.js.map +0 -1
  767. package/dist/icons-extra-H5pqCM_R.js.map +0 -1
  768. package/dist/shared-words-BtRee8xR.js.map +0 -1
  769. package/dist/shared-words-CdMDVtXx.js.map +0 -1
@@ -1,23 +1,51 @@
1
1
  import { LitElement } from "lit";
2
+ import { CutFades } from "../0-face/cut-fade";
2
3
  import "../2-core/ds-cycle";
3
- /** A link in a footer column. */
4
+ /**
5
+ * A line in a footer column: a link, or, without `href`, words alone (an
6
+ * address, a registration number). In a column with words alone its links
7
+ * are underlined, so they can be told from the words around them.
8
+ */
4
9
  export interface FooterLink {
5
10
  /** The words: a translation key, or as written with the footer's `literal`. */
6
11
  label: string;
7
- href: string;
12
+ /** Where it leads. Without it the line is words alone. */
13
+ href?: string;
8
14
  /** Opens elsewhere: in a new tab, with no referrer. */
9
15
  external?: boolean;
10
16
  /** The page being read: `aria-current="page"`. */
11
17
  current?: boolean;
18
+ /**
19
+ * The link drawn as a mark, its label its accessible name: the icon file's
20
+ * address (`icons/instagram.svg`, as Sync 1's `icons` export copies it). A
21
+ * column's icon links stand first, in a row of their own, or stacked as
22
+ * round marks with the column's `icons: "stack"`.
23
+ */
24
+ icon?: string;
12
25
  }
13
- /** A footer column: a heading and its links. */
26
+ /** How a column's icon links stand: in a row first (`row`), or stacked as round marks (`stack`). */
27
+ export type FooterIcons = "row" | "stack";
28
+ /** A footer column: a heading and its lines. */
14
29
  export interface FooterColumn {
15
30
  heading?: string;
31
+ /** The heading as a link: where it leads. */
32
+ href?: string;
16
33
  links: FooterLink[];
34
+ /** The column's width in whole squares: eight by default. */
35
+ width?: number;
36
+ /**
37
+ * `stack` draws its icon links as round marks one control high, one a line,
38
+ * the column one square wide at the end of the row; the heading then names
39
+ * the marks for assistive technology. `row` (the default) stands them first,
40
+ * in a row of their own.
41
+ */
42
+ icons?: FooterIcons;
17
43
  }
18
44
  /** The settings a footer offers, each a `ds-cycle` of that type. */
19
- export type FooterPreference = "language" | "theme";
20
- /** The preferences named by an attribute: every one when it is present but empty. */
45
+ export type FooterPreference = "language" | "theme" | "shape";
46
+ /** A column's width in whole squares, from its `width`: eight when it is missing or not a positive number. */
47
+ export declare function footerColumnWidth(width: unknown): number;
48
+ /** The preferences named by an attribute: language and theme when it is present but empty. */
21
49
  export declare function footerPreferences(value: string | null | undefined): FooterPreference[];
22
50
  /**
23
51
  * @element ds-footer
@@ -25,11 +53,14 @@ export declare function footerPreferences(value: string | null | undefined): Foo
25
53
  * the words as they stand with `literal`. The `brand` slot takes its place.
26
54
  * @prop {string} href - Where the brand links. `/` by default.
27
55
  * @prop {string} tagline - A line about the site under the brand.
28
- * @prop {FooterColumn[]} columns - The columns of links, eight squares each.
56
+ * @prop {FooterColumn[]} columns - The columns of links or lines, eight squares each
57
+ * unless a column names its `width`.
29
58
  * @prop {string} label - The columns' accessible name, as a navigation; without it they are plain lists.
30
59
  * @prop {string} owner - Who holds the copyright: the brand by default.
31
60
  * @prop {number} year - The copyright's year: this year by default.
32
- * @prop {string} preferences - `language`, `theme` or both, as `ds-cycle`
61
+ * @prop {FooterLink[]} policies - Links under the copyright (privacy, terms), each
62
+ * drawn as a secondary button.
63
+ * @prop {string} preferences - `language`, `theme`, `shape` or several, as `ds-cycle`
33
64
  * buttons at the end of the last row; present but empty, both.
34
65
  * @prop {boolean} literal - Show the words as written, never looked up.
35
66
  *
@@ -65,6 +96,9 @@ export declare class Footer extends LitElement {
65
96
  year: {
66
97
  type: NumberConstructor;
67
98
  };
99
+ policies: {
100
+ type: ArrayConstructor;
101
+ };
68
102
  preferences: {
69
103
  type: StringConstructor;
70
104
  };
@@ -74,6 +108,8 @@ export declare class Footer extends LitElement {
74
108
  };
75
109
  };
76
110
  static styles: import("lit").CSSResult[];
111
+ /** Words cut short fade over their last square, never an ellipsis: marks them `data-cut="end"` while they do not fit. */
112
+ protected readonly cuts: CutFades;
77
113
  brand: string | undefined;
78
114
  href: string;
79
115
  tagline: string | undefined;
@@ -81,6 +117,7 @@ export declare class Footer extends LitElement {
81
117
  label: string | undefined;
82
118
  owner: string | undefined;
83
119
  year: number | undefined;
120
+ policies: FooterLink[];
84
121
  preferences: string | null | undefined;
85
122
  literal: boolean;
86
123
  private readonly relabel;
@@ -89,7 +126,10 @@ export declare class Footer extends LitElement {
89
126
  disconnectedCallback(): void;
90
127
  private words;
91
128
  private slotted;
129
+ private iconLink;
130
+ private anchor;
92
131
  private link;
132
+ private column;
93
133
  render(): import("lit").TemplateResult<1>;
94
134
  }
95
135
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"ds-footer.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-footer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAA4B,MAAM,KAAK,CAAC;AAG3D,OAAO,oBAAoB,CAAC;AAK5B,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,CAAC;AAGpD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,EAAE,CAKtF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAErE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAStD,iBAAiB;IAMjB,oBAAoB;IAMpB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAKZ,MAAM;CA+BP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
1
+ {"version":3,"file":"ds-footer.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-footer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAA4B,MAAM,KAAK,CAAC;AAG3D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,oBAAoB,CAAC;AAK5B;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,oGAAoG;AACpG,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,CAAC;AAE1C,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAK9D,8GAA8G;AAC9G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGxD;AAED,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,EAAE,CAKtF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAWf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAC7E,yHAAyH;IACzH,SAAS,CAAC,QAAQ,CAAC,IAAI,WAA2F;IAE1G,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAUtD,iBAAiB;IAMjB,oBAAoB;IAMpB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,MAAM;IAqBd,MAAM;CAgCP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
@@ -1,22 +1,31 @@
1
1
  // ds-footer.ts
2
- // A site footer: the brand, columns of links, the language and theme, and the
3
- // copyright. Drawn by 1-root/footer.css, the same classes a page without
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
  import { LitElement, html, nothing, unsafeCSS } from "lit";
6
7
  import { getText } from "../0-face/i18n";
7
8
  import { define } from "../0-face/define";
9
+ import { CutFades } from "../0-face/cut-fade";
8
10
  import "../2-core/ds-cycle";
9
11
  import metrics from "../1-root/component-metrics.css?inline";
10
12
  import controls from "../1-root/controls.css?inline";
11
13
  import styles from "./styles/ds-footer.css?inline";
12
- const PREFERENCES = ["language", "theme"];
13
- /** The preferences named by an attribute: every one when it is present but empty. */
14
+ const PREFERENCES = ["language", "theme", "shape"];
15
+ /** What an empty `preferences` offers: the shape only when it is named. */
16
+ const DEFAULT_PREFERENCES = ["language", "theme"];
17
+ /** A column's width in whole squares, from its `width`: eight when it is missing or not a positive number. */
18
+ export function footerColumnWidth(width) {
19
+ const squares = Math.round(Number(width));
20
+ return Number.isFinite(squares) && squares >= 1 ? squares : 8;
21
+ }
22
+ /** The preferences named by an attribute: language and theme when it is present but empty. */
14
23
  export function footerPreferences(value) {
15
24
  if (value == null || value === "false")
16
25
  return [];
17
26
  const named = value.split(/[\s,]+/).filter(Boolean);
18
27
  if (!named.length || named.includes("true"))
19
- return [...PREFERENCES];
28
+ return [...DEFAULT_PREFERENCES];
20
29
  return PREFERENCES.filter(name => named.includes(name));
21
30
  }
22
31
  /**
@@ -25,11 +34,14 @@ export function footerPreferences(value) {
25
34
  * the words as they stand with `literal`. The `brand` slot takes its place.
26
35
  * @prop {string} href - Where the brand links. `/` by default.
27
36
  * @prop {string} tagline - A line about the site under the brand.
28
- * @prop {FooterColumn[]} columns - The columns of links, eight squares each.
37
+ * @prop {FooterColumn[]} columns - The columns of links or lines, eight squares each
38
+ * unless a column names its `width`.
29
39
  * @prop {string} label - The columns' accessible name, as a navigation; without it they are plain lists.
30
40
  * @prop {string} owner - Who holds the copyright: the brand by default.
31
41
  * @prop {number} year - The copyright's year: this year by default.
32
- * @prop {string} preferences - `language`, `theme` or both, as `ds-cycle`
42
+ * @prop {FooterLink[]} policies - Links under the copyright (privacy, terms), each
43
+ * drawn as a secondary button.
44
+ * @prop {string} preferences - `language`, `theme`, `shape` or several, as `ds-cycle`
33
45
  * buttons at the end of the last row; present but empty, both.
34
46
  * @prop {boolean} literal - Show the words as written, never looked up.
35
47
  *
@@ -45,9 +57,12 @@ export function footerPreferences(value) {
45
57
  export class Footer extends LitElement {
46
58
  constructor() {
47
59
  super();
60
+ /** Words cut short fade over their last square, never an ellipsis: marks them `data-cut="end"` while they do not fit. */
61
+ this.cuts = new CutFades(this, { selector: ".ds-footer__links > li > *, .ds-footer__heading > a" });
48
62
  this.relabel = () => this.requestUpdate();
49
63
  this.href = "/";
50
64
  this.columns = [];
65
+ this.policies = [];
51
66
  this.literal = false;
52
67
  }
53
68
  connectedCallback() {
@@ -68,9 +83,36 @@ export class Footer extends LitElement {
68
83
  slotted(name) {
69
84
  return [...this.children].some(node => node.getAttribute("slot") === name);
70
85
  }
86
+ iconLink(link) {
87
+ return html `<li><a href=${link.href} aria-label=${this.words(link.label)} aria-current=${link.current ? "page" : nothing}
88
+ 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>`;
89
+ }
90
+ anchor(link, className) {
91
+ return html `<a class=${className ?? nothing} href=${link.href} aria-current=${link.current ? "page" : nothing}
92
+ target=${link.external ? "_blank" : nothing} rel=${link.external ? "noopener noreferrer" : nothing}>${this.words(link.label)}</a>`;
93
+ }
71
94
  link(link) {
72
- return html `<li><a href=${link.href} aria-current=${link.current ? "page" : nothing}
73
- target=${link.external ? "_blank" : nothing} rel=${link.external ? "noopener noreferrer" : nothing}>${this.words(link.label)}</a></li>`;
95
+ return html `<li>${link.href ? this.anchor(link) : html `<span>${this.words(link.label)}</span>`}</li>`;
96
+ }
97
+ column(column) {
98
+ const stack = column.icons === "stack";
99
+ const icons = column.links.filter(link => link.icon && link.href);
100
+ const lines = column.links.filter(link => !(link.icon && link.href));
101
+ const width = footerColumnWidth(column.width);
102
+ const heading = column.heading ? this.words(column.heading) : "";
103
+ if (stack) {
104
+ return html `<div class="ds-footer__column ds-footer__column--stack" part="column">
105
+ <ul class="ds-footer__icons" part="icons" aria-label=${heading || nothing}>${icons.map(link => this.iconLink(link))}</ul>
106
+ ${lines.length ? html `<ul class="ds-footer__links">${lines.map(link => this.link(link))}</ul>` : nothing}
107
+ </div>`;
108
+ }
109
+ return html `<div class="ds-footer__column" part="column" style=${width === 8 ? nothing : `--ds-footer-column-width: ${width}`}>
110
+ ${heading
111
+ ? html `<h2 class="ds-footer__heading" part="heading">${column.href ? html `<a href=${column.href}>${heading}</a>` : heading}</h2>`
112
+ : nothing}
113
+ ${icons.length ? html `<ul class="ds-footer__icons" part="icons">${icons.map(link => this.iconLink(link))}</ul>` : nothing}
114
+ <ul class="ds-footer__links">${lines.map(link => this.link(link))}</ul>
115
+ </div>`;
74
116
  }
75
117
  render() {
76
118
  const columns = (Array.isArray(this.columns) ? this.columns : []).filter(column => column && Array.isArray(column.links));
@@ -80,10 +122,8 @@ export class Footer extends LitElement {
80
122
  const year = Number.isFinite(this.year) ? this.year : new Date().getFullYear();
81
123
  const brandSlotted = this.slotted("brand");
82
124
  const hasBrand = brandSlotted || Boolean(this.brand) || Boolean(this.tagline);
83
- const list = columns.map(column => html `<div class="ds-footer__column" part="column">
84
- ${column.heading ? html `<h2 class="ds-footer__heading" part="heading">${this.words(column.heading)}</h2>` : nothing}
85
- <ul class="ds-footer__links">${column.links.map(link => this.link(link))}</ul>
86
- </div>`);
125
+ const policies = (Array.isArray(this.policies) ? this.policies : []).filter(link => link && link.href);
126
+ const list = columns.map(column => this.column(column));
87
127
  return html `<footer class="ds-footer" part="footer">
88
128
  <div class="ds-footer__brand" part="brand" ?hidden=${!hasBrand}>
89
129
  <slot name="brand" @slotchange=${this.relabel}>${this.brand ? html `<a class="ds-footer__mark" href=${this.href || "/"}>${this.words(this.brand)}</a>` : nothing}</slot>
@@ -96,8 +136,11 @@ export class Footer extends LitElement {
96
136
  : nothing}
97
137
  <div class="ds-footer__base" part="base">
98
138
  <p class="ds-footer__legal" part="legal"><slot name="legal" @slotchange=${this.relabel}>${owner ? `© ${year} ${owner}` : `© ${year}`}</slot></p>
139
+ ${policies.length
140
+ ? html `<ul class="ds-footer__policies" part="policies">${policies.map(link => html `<li>${this.anchor(link, "ds-button ds-button--secondary")}</li>`)}</ul>`
141
+ : nothing}
99
142
  <div class="ds-footer__preferences" part="preferences" ?hidden=${!hasPreferences}>
100
- ${preferences.map(type => html `<ds-cycle type=${type}></ds-cycle>`)}
143
+ ${preferences.map(type => html `<ds-cycle type=${type} label=${type === "shape" ? "Shape" : nothing}></ds-cycle>`)}
101
144
  <slot name="preferences" @slotchange=${this.relabel}></slot>
102
145
  </div>
103
146
  </div>
@@ -112,6 +155,7 @@ Footer.properties = {
112
155
  label: { type: String },
113
156
  owner: { type: String },
114
157
  year: { type: Number },
158
+ policies: { type: Array },
115
159
  preferences: { type: String },
116
160
  literal: { type: Boolean, reflect: true },
117
161
  };
@@ -9,6 +9,7 @@ export declare const MENU_LABEL = "Menu";
9
9
  * @prop {string} href - Where the brand links. `/` by default.
10
10
  * @prop {string} label - The navigation's accessible name, when a page has more than one.
11
11
  * @prop {boolean} literal - Show `brand` as written, never looked up.
12
+ * @prop {"site" | "app"} variant - Site navigation or a compact app title bar.
12
13
  * @prop {boolean} sticky - Stay at the top of the page as it scrolls, on the paper.
13
14
  *
14
15
  * @slot - The navigation: `<a href>` links, one square high. The link to the
@@ -32,6 +33,10 @@ export declare const MENU_LABEL = "Menu";
32
33
  */
33
34
  export declare class Header extends LitElement {
34
35
  static properties: {
36
+ variant: {
37
+ type: StringConstructor;
38
+ reflect: boolean;
39
+ };
35
40
  brand: {
36
41
  type: StringConstructor;
37
42
  };
@@ -51,6 +56,7 @@ export declare class Header extends LitElement {
51
56
  };
52
57
  };
53
58
  static styles: import("lit").CSSResult[];
59
+ variant: "site" | "app";
54
60
  brand: string | undefined;
55
61
  href: string;
56
62
  label: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ds-header.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-header.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAKhF,OAAO,mBAAmB,CAAC;AAK3B,iEAAiE;AACjE,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;MAMf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAErE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAExB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAStD,kCAAkC;IAClC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,yEAAyE;IACzE,QAAQ,IAAI,IAAI;IAEhB,wBAAwB;IACxB,SAAS,IAAI,IAAI;IAEjB,iBAAiB;IAMjB,oBAAoB;IAQpB,SAAS,CAAC,YAAY;IAItB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAe/C,OAAO,CAAC,KAAK;IAKb,gFAAgF;IAChF,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,WAAW,CAGjB;IAEF,MAAM;CAwBP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
1
+ {"version":3,"file":"ds-header.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-header.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAKhF,OAAO,mBAAmB,CAAC;AAK3B,iEAAiE;AACjE,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;MAOf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAErE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAExB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAUtD,kCAAkC;IAClC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,yEAAyE;IACzE,QAAQ,IAAI,IAAI;IAEhB,wBAAwB;IACxB,SAAS,IAAI,IAAI;IAEjB,iBAAiB;IAMjB,oBAAoB;IAQpB,SAAS,CAAC,YAAY;IAItB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAe/C,OAAO,CAAC,KAAK;IAKb,gFAAgF;IAChF,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,WAAW,CAGjB;IAEF,MAAM;CAwBP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
@@ -20,6 +20,7 @@ export const MENU_LABEL = "Menu";
20
20
  * @prop {string} href - Where the brand links. `/` by default.
21
21
  * @prop {string} label - The navigation's accessible name, when a page has more than one.
22
22
  * @prop {boolean} literal - Show `brand` as written, never looked up.
23
+ * @prop {"site" | "app"} variant - Site navigation or a compact app title bar.
23
24
  * @prop {boolean} sticky - Stay at the top of the page as it scrolls, on the paper.
24
25
  *
25
26
  * @slot - The navigation: `<a href>` links, one square high. The link to the
@@ -50,6 +51,7 @@ export class Header extends LitElement {
50
51
  markCurrentLink(this.links());
51
52
  this.requestUpdate();
52
53
  };
54
+ this.variant = "site";
53
55
  this.href = "/";
54
56
  this.literal = false;
55
57
  this.sticky = false;
@@ -117,7 +119,7 @@ export class Header extends LitElement {
117
119
  : this.brand
118
120
  ? html `<a class="ds-header__brand" part="brand" href=${this.href || "/"}>${this.words(this.brand)}</a>`
119
121
  : html `<slot name="brand" @slotchange=${this.relabel}></slot>`;
120
- return html `<header class="ds-header${this.sticky ? " ds-header--sticky" : ""}" part="header">
122
+ return html `<header class="ds-header${this.variant === "app" ? " ds-header--app" : ""}${this.sticky ? " ds-header--sticky" : ""}" part="header">
121
123
  ${brand}
122
124
  <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>
123
125
  <div class="ds-header__actions" part="actions" ?hidden=${!hasActions}><slot name="actions" @slotchange=${this.relabel}></slot></div>
@@ -133,6 +135,7 @@ export class Header extends LitElement {
133
135
  }
134
136
  }
135
137
  Header.properties = {
138
+ variant: { type: String, reflect: true },
136
139
  brand: { type: String },
137
140
  href: { type: String },
138
141
  label: { type: String },
@@ -17,7 +17,7 @@ export type OverlayCloseReason = "escape" | "backdrop" | "outside" | "button" |
17
17
  * `<dialog>` that keeps forms and accessible ID references together. The
18
18
  * browser owns the top layer, inert background and modal focus navigation.
19
19
  * Listen to ds-close-request and preventDefault to control whether it closes.
20
- * `type` says what it is: a `modal` in the centre (the default), a `sheet`
20
+ * `type` says what it is: a `modal` in the centre (the default; a sheet on a phone), a `sheet`
21
21
  * from the foot of the screen, a `drawer` at the `side` `"end"` (the default)
22
22
  * or `"start"`, a `popover` at the `anchor` point, or the whole `screen`. A
23
23
  * sheet and a drawer slide in and out and a finger swipes them away (reason
@@ -100,7 +100,7 @@ export declare class Overlay extends LitElement {
100
100
  connectedCallback(): void;
101
101
  disconnectedCallback(): void;
102
102
  protected updated(): void;
103
- /** Its type as it is drawn: an unknown one is a modal. */
103
+ /** Its type as it is drawn: an unknown one is a modal, and a modal on a phone is a sheet (Joachim, 20 October 2026: no modals on a phone at all). */
104
104
  get kind(): OverlayType;
105
105
  /** A modeless overlay leaves the page live: a popover always, any other with `non-modal`. */
106
106
  get modeless(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ds-overlay.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-overlay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ds-overlay.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-overlay.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ import placementStyles from "../1-root/overlay.css?inline";
10
10
  import metrics from "../1-root/component-metrics.css?inline";
11
11
  const dialogStyles = `${frameStyles}\n${placementStyles}`;
12
12
  const TYPES = new Set(["modal", "sheet", "drawer", "popover", "screen"]);
13
+ /** A phone's width, as `0-face/grid.ts` reads it. */
14
+ const onPhone = () => typeof matchMedia === "function" && matchMedia("(max-width: 768px)").matches;
13
15
  const openDialogs = new WeakMap();
14
16
  const scrollStyles = new WeakMap();
15
17
  /** One owner per declaration, including mixed modal and stationary panels. */
@@ -68,7 +70,7 @@ function styleRoot(root) {
68
70
  * `<dialog>` that keeps forms and accessible ID references together. The
69
71
  * browser owns the top layer, inert background and modal focus navigation.
70
72
  * Listen to ds-close-request and preventDefault to control whether it closes.
71
- * `type` says what it is: a `modal` in the centre (the default), a `sheet`
73
+ * `type` says what it is: a `modal` in the centre (the default; a sheet on a phone), a `sheet`
72
74
  * from the foot of the screen, a `drawer` at the `side` `"end"` (the default)
73
75
  * or `"start"`, a `popover` at the `anchor` point, or the whole `screen`. A
74
76
  * sheet and a drawer slide in and out and a finger swipes them away (reason
@@ -202,8 +204,11 @@ export class Overlay extends LitElement {
202
204
  super.disconnectedCallback();
203
205
  }
204
206
  updated() { this.syncType(); this.syncOpen(); this.place(); }
205
- /** Its type as it is drawn: an unknown one is a modal. */
206
- get kind() { return TYPES.has(this.type) ? this.type : "modal"; }
207
+ /** Its type as it is drawn: an unknown one is a modal, and a modal on a phone is a sheet (Joachim, 20 October 2026: no modals on a phone at all). */
208
+ get kind() {
209
+ const type = TYPES.has(this.type) ? this.type : "modal";
210
+ return type === "modal" && onPhone() ? "sheet" : type;
211
+ }
207
212
  /** A modeless overlay leaves the page live: a popover always, any other with `non-modal`. */
208
213
  get modeless() { return this.nonModal || this.kind === "popover"; }
209
214
  /** The edge it comes from and a finger swipes it back to. */
@@ -12,6 +12,9 @@ export declare const PAGE_LAYOUTS: readonly PageLayout[];
12
12
  * - `slot="aside"` is the trailing column, shown by `inspector`
13
13
  * - `slot="footer"` runs along the bottom of the main area
14
14
  *
15
+ * The main area is the document's main landmark (`role="main"`), unless the
16
+ * page stands inside a `<main>` or another page, or is given a `<main>` itself.
17
+ *
15
18
  * Columns are whole squares: `sidebar` and `inspector` lead with 12, `split`
16
19
  * with 16; `column` is 32 wide and `centered` 16, and `measure` sets either in
17
20
  * whole squares. A centred column stands on a whole square: the room beside it
@@ -72,6 +75,9 @@ export declare class Page extends LitElement {
72
75
  type: StringConstructor;
73
76
  attribute: string;
74
77
  };
78
+ landmark: {
79
+ state: boolean;
80
+ };
75
81
  };
76
82
  layout: PageLayout;
77
83
  divided: boolean;
@@ -80,10 +86,16 @@ export declare class Page extends LitElement {
80
86
  view: boolean;
81
87
  drawer: boolean;
82
88
  drawerLabel: string | undefined;
89
+ private landmark;
83
90
  static styles: import("lit").CSSResult[];
84
91
  private navigationDrawer;
85
92
  private readonly relabel;
86
93
  constructor();
94
+ /**
95
+ * The main area is the page's main landmark, unless the page stands inside
96
+ * one (or inside another page) or is given its own `<main>`.
97
+ */
98
+ private readonly syncLandmark;
87
99
  connectedCallback(): void;
88
100
  disconnectedCallback(): void;
89
101
  /** Whether the navigation drawer is open. */
@@ -1 +1 @@
1
- {"version":3,"file":"ds-page.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAKvE,OAAO,mBAAmB,CAAC;AAI3B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAC7F,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAqE,CAAC;AAEpH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,IAAK,SAAQ,UAAU;IAClC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQf;IAEM,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,MAAM,CAAC,MAAM,4BAA4C;IAEzD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAWtD,iBAAiB;IAMjB,oBAAoB;IAQpB,6CAA6C;IAC7C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,mEAAmE;IACnE,UAAU,IAAI,IAAI;IAElB,mCAAmC;IACnC,WAAW,IAAI,IAAI;IAEnB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAmB/C,MAAM;IAwBN,YAAY;CAQb;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGnF;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,IAAI,CAAC;KACjB;CACF"}
1
+ {"version":3,"file":"ds-page.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAKvE,OAAO,mBAAmB,CAAC;AAM3B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAC7F,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAqE,CAAC;AAEpH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,IAAK,SAAQ,UAAU;IAClC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MASf;IAEM,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAgB,QAAQ,CAAU;IAElC,MAAM,CAAC,MAAM,4BAA4C;IAEzD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAYtD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAK3B;IAEF,iBAAiB;IAOjB,oBAAoB;IAQpB,6CAA6C;IAC7C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,mEAAmE;IACnE,UAAU,IAAI,IAAI;IAElB,mCAAmC;IACnC,WAAW,IAAI,IAAI;IAEnB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAmB/C,MAAM;IAwBN,YAAY;CASb;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGnF;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,IAAI,CAAC;KACjB;CACF"}
@@ -6,6 +6,7 @@ import { getText } from "../0-face/i18n";
6
6
  import "../2-core/ds-icon";
7
7
  import controls from "../1-root/controls.css?inline";
8
8
  import styles from "./styles/ds-page.css?inline";
9
+ const MAIN = "main, [role='main']";
9
10
  export const PAGE_LAYOUTS = ["sidebar", "split", "inspector", "column", "centered", "tiles"];
10
11
  /**
11
12
  * A standard page: where units stand on the grid. Every layout uses the same
@@ -17,6 +18,9 @@ export const PAGE_LAYOUTS = ["sidebar", "split", "inspector", "column", "centere
17
18
  * - `slot="aside"` is the trailing column, shown by `inspector`
18
19
  * - `slot="footer"` runs along the bottom of the main area
19
20
  *
21
+ * The main area is the document's main landmark (`role="main"`), unless the
22
+ * page stands inside a `<main>` or another page, or is given a `<main>` itself.
23
+ *
20
24
  * Columns are whole squares: `sidebar` and `inspector` lead with 12, `split`
21
25
  * with 16; `column` is 32 wide and `centered` 16, and `measure` sets either in
22
26
  * whole squares. A centred column stands on a whole square: the room beside it
@@ -52,14 +56,26 @@ export class Page extends LitElement {
52
56
  super();
53
57
  this.navigationDrawer = null;
54
58
  this.relabel = () => this.requestUpdate();
59
+ /**
60
+ * The main area is the page's main landmark, unless the page stands inside
61
+ * one (or inside another page) or is given its own `<main>`.
62
+ */
63
+ this.syncLandmark = () => {
64
+ const slot = this.renderRoot?.querySelector?.("slot:not([name])");
65
+ const given = slot?.assignedElements({ flatten: true }).some(element => element.matches(MAIN) || !!element.querySelector(MAIN));
66
+ const inside = !!this.parentElement?.closest(`${MAIN}, ds-page`);
67
+ this.landmark = !given && !inside;
68
+ };
55
69
  this.layout = "sidebar";
56
70
  this.divided = false;
57
71
  this.fill = false;
58
72
  this.view = false;
59
73
  this.drawer = false;
74
+ this.landmark = true;
60
75
  }
61
76
  connectedCallback() {
62
77
  super.connectedCallback();
78
+ this.syncLandmark();
63
79
  window.addEventListener("language-changed", this.relabel);
64
80
  window.addEventListener("translations-loaded", this.relabel);
65
81
  }
@@ -115,7 +131,7 @@ export class Page extends LitElement {
115
131
  </dialog>
116
132
  <div class="area nav" part="nav" data-area="nav"><slot name="nav"></slot></div>
117
133
  <div class="area header" part="header" data-area="header"><slot name="header"></slot></div>
118
- <div class="area main" part="main" data-area="main"><slot></slot></div>
134
+ <div class="area main" part="main" data-area="main" role=${ifDefined(this.landmark ? "main" : undefined)}><slot @slotchange=${this.syncLandmark}></slot></div>
119
135
  <div class="area aside" part="aside" data-area="aside"><slot name="aside"></slot></div>
120
136
  <div class="area footer" part="footer" data-area="footer"><slot name="footer"></slot></div>
121
137
  </div>
@@ -128,6 +144,7 @@ export class Page extends LitElement {
128
144
  slot.addEventListener("slotchange", sync);
129
145
  sync();
130
146
  });
147
+ this.syncLandmark();
131
148
  }
132
149
  }
133
150
  Page.properties = {
@@ -138,6 +155,7 @@ Page.properties = {
138
155
  view: { type: Boolean, reflect: true },
139
156
  drawer: { type: Boolean, reflect: true },
140
157
  drawerLabel: { type: String, attribute: "drawer-label" },
158
+ landmark: { state: true },
141
159
  };
142
160
  Page.styles = [unsafeCSS(controls), unsafeCSS(styles)];
143
161
  /**
@@ -22,6 +22,8 @@ export interface EmailFrameOptions {
22
22
  language?: string;
23
23
  fontUrl?: string;
24
24
  wideLabel?: boolean;
25
+ /** Plain paper with a wider reading column, without visible grid ruling. */
26
+ plain?: boolean;
25
27
  /** Trusted HTML from a template renderer, never raw user input. */
26
28
  headerHtml?: string;
27
29
  beforeHeaderHtml?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../DS1/4-page/email.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,GAAG,YAAY,CAAA;AAE5B,eAAO,MAAM,IAAI,6DAA6D,CAAA;AAC9E,eAAO,MAAM,SAAS,0LAAwI,CAAA;AAe9J,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYhD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AA2DD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB3E;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,CAAC,GAAG,EAAE,GAAG,EAAO,GAAG,MAAM,CAGpE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;EAS5I"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../DS1/4-page/email.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,GAAG,YAAY,CAAA;AAE5B,eAAO,MAAM,IAAI,6DAA6D,CAAA;AAC9E,eAAO,MAAM,SAAS,0LAAwI,CAAA;AAe9J,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYhD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AA2DD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAsB3E;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,CAAC,GAAG,EAAE,GAAG,EAAO,GAAG,MAAM,CAGpE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;EAS5I"}
@@ -94,11 +94,12 @@ const darkStyles = `
94
94
  /** Rows are trusted template HTML. Escape every interpolated user value. */
95
95
  export function emailFrame(options, body) {
96
96
  const { product, homeUrl, title, preheader = '', language = 'en', fontUrl, wideLabel = false, headerHtml, beforeHeaderHtml = '', brandStyles = '' } = options;
97
+ const plain = options.plain === true;
97
98
  return `<!doctype html>
98
99
  <html lang="${escapeHtml(language)}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="color-scheme" content="light dark"><meta name="supported-color-schemes" content="light dark"><title>${escapeHtml(title)}</title>
99
100
  <style>
100
- ${responsiveStyles}
101
- ${darkStyles}
101
+ ${plain ? `@media screen and (max-width:700px) {.ds-email-page {width:100% !important;max-width:480px !important;}.ds-email-outer {padding:40px 20px !important;}}` : responsiveStyles}
102
+ ${plain ? `@media (prefers-color-scheme:dark) {.ds-email-paper {background-color:#171717 !important;}.ds-email-type {color:#eeeeee !important;}}` : darkStyles}
102
103
  ${fontUrl ? `@font-face { font-family:'GT-America-Standard-Regular'; src:url('${escapeHtml(fontUrl)}') format('woff2'); font-weight:400; font-style:normal; mso-font-alt:Arial; }` : ''}
103
104
  ${brandStyles}
104
105
  </style>
@@ -106,8 +107,8 @@ ${brandStyles}
106
107
  </head>
107
108
  <body class="ds-email-type" style="margin:0;padding:0;background-color:#ffffff;${emailType};-webkit-text-size-adjust:100%">
108
109
  ${preheader ? `<div style="display:none;max-height:0;overflow:hidden;opacity:0;mso-hide:all">${escapeHtml(preheader)}</div>` : ''}
109
- <table class="ds-email-paper ds-email-type" role="presentation" width="100%" cellpadding="0" cellspacing="0" style="min-height:640px;background-color:#ffffff;background-image:${grid};background-size:20px 100%,100% calc(100% - 28px);background-position:${gridPosition};background-repeat:repeat-x,no-repeat;${emailType}"><tr><td class="ds-email-outer" align="center" valign="top" style="padding:28px 20px 20px">
110
- <table class="ds-email-page ds-email-type" role="presentation" width="240" cellpadding="0" cellspacing="0" style="width:240px;table-layout:fixed;border-collapse:collapse;${emailType}">
110
+ <table class="ds-email-paper ds-email-type" role="presentation" width="100%" cellpadding="0" cellspacing="0" style="${plain ? 'background-color:#ffffff;' : `min-height:640px;background-color:#ffffff;background-image:${grid};background-size:20px 100%,100% calc(100% - 28px);background-position:${gridPosition};background-repeat:repeat-x,no-repeat;`}${emailType}"><tr><td class="ds-email-outer" align="center" valign="top" style="padding:${plain ? '40px 20px' : '28px 20px 20px'}">
111
+ <table class="ds-email-page ds-email-type" role="presentation" width="${plain ? 480 : 240}" cellpadding="0" cellspacing="0" style="width:${plain ? 480 : 240}px;max-width:100%;table-layout:fixed;border-collapse:collapse;${emailType}">
111
112
  ${beforeHeaderHtml}
112
113
  ${headerHtml ?? `<tr><td class="ds-email-cell-row" align="right" height="20" style="height:20px;padding:0;font-size:0;line-height:0"><a href="${escapeHtml(homeUrl)}" class="ds-email-cell ds-email-cell-label${wideLabel ? ' ds-email-cell-wide' : ''}" style="text-decoration:none;position:relative;display:block;margin-left:auto;box-sizing:border-box;width:${wideLabel ? 160 : 80}px;height:20px;border:0;background:#e6e6e6;font-family:${font};font-size:14px;line-height:20px;mso-line-height-rule:exactly;font-weight:400;letter-spacing:normal;color:#797979;text-align:left"><span class="ds-email-cell-ink" style="display:block;box-sizing:border-box;padding:0 4px;white-space:nowrap;overflow:hidden">${escapeHtml(product)}</span></a></td></tr>`}
113
114
  ${body}