@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.
Files changed (782) 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 +443 -0
  5. package/DS1/0-face/constraint-site.ts +201 -0
  6. package/DS1/0-face/constraints.ts +308 -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/fault-lines.ts +159 -0
  13. package/DS1/0-face/feedback-overlays.ts +5 -3
  14. package/DS1/0-face/feedback.ts +3 -0
  15. package/DS1/0-face/focus-vision.swift +31 -0
  16. package/DS1/0-face/focus.ts +181 -0
  17. package/DS1/0-face/google-face-metrics.json +102 -0
  18. package/DS1/0-face/grid.ts +61 -4
  19. package/DS1/0-face/i18n.ts +36 -18
  20. package/DS1/0-face/layout-inspector.ts +124 -98
  21. package/DS1/0-face/preference-options.ts +4 -0
  22. package/DS1/0-face/scaling.ts +21 -3
  23. package/DS1/0-face/shape.ts +43 -0
  24. package/DS1/0-face/text-contrast.ts +164 -0
  25. package/DS1/0-face/theme-bootstrap.js +43 -0
  26. package/DS1/0-face/toast-queue.ts +7 -1
  27. package/DS1/0-face/translations/da.json +10 -1
  28. package/DS1/0-face/translations/de.json +10 -1
  29. package/DS1/0-face/translations/en.json +10 -1
  30. package/DS1/0-face/translations/es.json +10 -1
  31. package/DS1/0-face/translations/fi.json +10 -1
  32. package/DS1/0-face/translations/fr.json +10 -1
  33. package/DS1/0-face/translations/is.json +10 -1
  34. package/DS1/0-face/translations/it.json +10 -1
  35. package/DS1/0-face/translations/ja.json +10 -1
  36. package/DS1/0-face/translations/ko.json +10 -1
  37. package/DS1/0-face/translations/nb.json +10 -1
  38. package/DS1/0-face/translations/pt-BR.json +10 -1
  39. package/DS1/0-face/translations/pt.json +10 -1
  40. package/DS1/0-face/translations/sv.json +10 -1
  41. package/DS1/0-face/translations/zh.json +10 -1
  42. package/DS1/0-face/word-wrap.ts +113 -0
  43. package/DS1/1-root/card.css +47 -20
  44. package/DS1/1-root/carousel.css +7 -0
  45. package/DS1/1-root/cjk.css +1 -1
  46. package/DS1/1-root/component-tokens.css +3 -2
  47. package/DS1/1-root/context.css +44 -6
  48. package/DS1/1-root/controls.css +99 -8
  49. package/DS1/1-root/document.css +9 -1
  50. package/DS1/1-root/empty.css +46 -5
  51. package/DS1/1-root/figures.css +50 -3
  52. package/DS1/1-root/fonts.css +1 -1
  53. package/DS1/1-root/footer.css +147 -16
  54. package/DS1/1-root/foundation.ts +60 -0
  55. package/DS1/1-root/guide.css +35 -0
  56. package/DS1/1-root/header.css +30 -9
  57. package/DS1/1-root/material.css +67 -0
  58. package/DS1/1-root/notice.css +10 -2
  59. package/DS1/1-root/one.css +15 -7
  60. package/DS1/1-root/progress.css +9 -1
  61. package/DS1/1-root/row.css +68 -2
  62. package/DS1/1-root/table.css +47 -4
  63. package/DS1/1-root/text.css +26 -0
  64. package/DS1/2-core/button-split.ts +10 -5
  65. package/DS1/2-core/chart/chart.css +71 -2
  66. package/DS1/2-core/chart/grid-chart.ts +2 -1
  67. package/DS1/2-core/ds-activity.ts +32 -0
  68. package/DS1/2-core/ds-app-chrome.ts +1 -0
  69. package/DS1/2-core/ds-avatar.ts +75 -7
  70. package/DS1/2-core/ds-badge.ts +8 -1
  71. package/DS1/2-core/ds-button.ts +7 -1
  72. package/DS1/2-core/ds-chart.ts +184 -49
  73. package/DS1/2-core/ds-cycle.ts +27 -186
  74. package/DS1/2-core/ds-device-bezel.ts +1 -0
  75. package/DS1/2-core/ds-empty.ts +6 -4
  76. package/DS1/2-core/ds-input.ts +23 -3
  77. package/DS1/2-core/ds-message.ts +22 -0
  78. package/DS1/2-core/ds-number.ts +349 -0
  79. package/DS1/2-core/ds-progress.ts +3 -0
  80. package/DS1/2-core/ds-radio.ts +3 -0
  81. package/DS1/2-core/ds-stat.ts +3 -0
  82. package/DS1/2-core/ds-switch.ts +5 -1
  83. package/DS1/2-core/ds-tag.ts +9 -2
  84. package/DS1/2-core/ds-text.ts +7 -0
  85. package/DS1/2-core/ds-token.ts +3 -0
  86. package/DS1/2-core/ds-tooltip.ts +17 -2
  87. package/DS1/2-core/ds-window.ts +1 -0
  88. package/DS1/2-core/generated/ds-icon-map.ts +47 -5
  89. package/DS1/2-core/generated/icons-extra.ts +24 -3
  90. package/DS1/2-core/generated/icons-immediate.ts +3 -3
  91. package/DS1/2-core/number-expression.ts +64 -0
  92. package/DS1/2-core/styles/ds-activity.css +16 -0
  93. package/DS1/2-core/styles/ds-badge.css +4 -1
  94. package/DS1/2-core/styles/ds-button-host.css +47 -13
  95. package/DS1/2-core/styles/ds-button-split.css +8 -0
  96. package/DS1/2-core/styles/ds-button.css +94 -20
  97. package/DS1/2-core/styles/ds-card.css +6 -0
  98. package/DS1/2-core/styles/ds-checkbox.css +20 -8
  99. package/DS1/2-core/styles/ds-image.css +2 -1
  100. package/DS1/2-core/styles/ds-input.css +37 -4
  101. package/DS1/2-core/styles/ds-number.css +127 -0
  102. package/DS1/2-core/styles/ds-radio.css +4 -1
  103. package/DS1/2-core/styles/ds-switch.css +34 -4
  104. package/DS1/2-core/styles/ds-tag.css +34 -6
  105. package/DS1/2-core/styles/ds-text.css +13 -4
  106. package/DS1/2-core/styles/ds-token.css +4 -1
  107. package/DS1/2-core/styles/ds-tooltip.css +13 -7
  108. package/DS1/3-unit/calendar-base.ts +5 -2
  109. package/DS1/3-unit/context-trigger.ts +29 -2
  110. package/DS1/3-unit/ds-calendar.ts +711 -37
  111. package/DS1/3-unit/ds-carousel.ts +13 -1
  112. package/DS1/3-unit/ds-context.ts +40 -2
  113. package/DS1/3-unit/ds-form.ts +47 -11
  114. package/DS1/3-unit/ds-list.ts +31 -3
  115. package/DS1/3-unit/ds-matrix.ts +3 -0
  116. package/DS1/3-unit/ds-menu.ts +9 -5
  117. package/DS1/3-unit/ds-row.ts +17 -2
  118. package/DS1/3-unit/ds-select.ts +1 -1
  119. package/DS1/3-unit/ds-sidebar.ts +18 -3
  120. package/DS1/3-unit/ds-table-of-contents.ts +166 -0
  121. package/DS1/3-unit/ds-table.ts +2 -1
  122. package/DS1/3-unit/ds-tabs.ts +40 -2
  123. package/DS1/3-unit/styles/ds-calendar.css +356 -42
  124. package/DS1/3-unit/styles/ds-context.css +38 -0
  125. package/DS1/3-unit/styles/ds-list.css +26 -1
  126. package/DS1/3-unit/styles/ds-matrix.css +4 -1
  127. package/DS1/3-unit/styles/ds-row.css +39 -0
  128. package/DS1/3-unit/styles/ds-select.css +22 -12
  129. package/DS1/3-unit/styles/ds-sidebar.css +16 -2
  130. package/DS1/3-unit/styles/ds-table-of-contents.css +40 -0
  131. package/DS1/3-unit/styles/ds-tabs.css +95 -0
  132. package/DS1/4-page/ds-container.ts +2 -1
  133. package/DS1/4-page/ds-document.ts +3 -0
  134. package/DS1/4-page/ds-footer.ts +93 -18
  135. package/DS1/4-page/ds-header.ts +5 -1
  136. package/DS1/4-page/ds-overlay.ts +8 -3
  137. package/DS1/4-page/ds-page.ts +22 -1
  138. package/DS1/4-page/email.ts +7 -4
  139. package/DS1/4-page/styles/ds-container.css +0 -1
  140. package/DS1/4-page/styles/ds-overlay.css +7 -0
  141. package/DS1/4-page/styles/ds-page.css +10 -0
  142. package/DS1/5-visual-kit/app-chrome.ts +129 -0
  143. package/DS1/5-visual-kit/bezels.ts +394 -0
  144. package/DS1/5-visual-kit/browser-icons.LICENSE +53 -0
  145. package/DS1/5-visual-kit/browser-icons.ts +47 -0
  146. package/DS1/5-visual-kit/browser-styles.ts +53 -0
  147. package/DS1/5-visual-kit/device-bezel.ts +55 -0
  148. package/DS1/5-visual-kit/instagram-frame.ts +15 -0
  149. package/DS1/5-visual-kit/instagram.ts +41 -0
  150. package/DS1/5-visual-kit/mobile-chrome.ts +25 -0
  151. package/DS1/5-visual-kit/native-icon-paths.ts +145 -0
  152. package/DS1/5-visual-kit/window.ts +22 -0
  153. package/DS1/components.ts +1 -0
  154. package/DS1/index.ts +14 -1
  155. package/DS1/react/choice.ts +4 -2
  156. package/DS1/react/context.ts +11 -6
  157. package/DS1/react/empty.ts +2 -2
  158. package/DS1/react/footer.ts +5 -5
  159. package/DS1/react/header.ts +1 -1
  160. package/DS1/react/message.ts +4 -2
  161. package/DS1/react/number.ts +53 -0
  162. package/DS1/react/sidebar.ts +4 -2
  163. package/DS1/react/table-of-contents.ts +28 -0
  164. package/DS1/x-flag/LICENSE.md +26 -0
  165. package/DS1/x-flag/ac.svg +1 -0
  166. package/DS1/x-flag/ad.svg +1 -0
  167. package/DS1/x-flag/ae.svg +1 -0
  168. package/DS1/x-flag/af.svg +1 -0
  169. package/DS1/x-flag/ag.svg +1 -0
  170. package/DS1/x-flag/ai.svg +1 -0
  171. package/DS1/x-flag/al.svg +1 -0
  172. package/DS1/x-flag/am.svg +1 -0
  173. package/DS1/x-flag/ao.svg +1 -0
  174. package/DS1/x-flag/aq.svg +1 -0
  175. package/DS1/x-flag/ar.svg +1 -0
  176. package/DS1/x-flag/as.svg +1 -0
  177. package/DS1/x-flag/at.svg +1 -0
  178. package/DS1/x-flag/au.svg +1 -0
  179. package/DS1/x-flag/aw.svg +1 -0
  180. package/DS1/x-flag/ax.svg +1 -0
  181. package/DS1/x-flag/az.svg +1 -0
  182. package/DS1/x-flag/ba.svg +1 -0
  183. package/DS1/x-flag/bb.svg +1 -0
  184. package/DS1/x-flag/bd.svg +1 -0
  185. package/DS1/x-flag/be.svg +1 -0
  186. package/DS1/x-flag/bf.svg +1 -0
  187. package/DS1/x-flag/bg.svg +1 -0
  188. package/DS1/x-flag/bh.svg +1 -0
  189. package/DS1/x-flag/bi.svg +1 -0
  190. package/DS1/x-flag/bj.svg +1 -0
  191. package/DS1/x-flag/bl.svg +1 -0
  192. package/DS1/x-flag/bm.svg +1 -0
  193. package/DS1/x-flag/bn.svg +1 -0
  194. package/DS1/x-flag/bo.svg +1 -0
  195. package/DS1/x-flag/bq-bo.svg +1 -0
  196. package/DS1/x-flag/bq-sa.svg +1 -0
  197. package/DS1/x-flag/bq-se.svg +1 -0
  198. package/DS1/x-flag/bq.svg +1 -0
  199. package/DS1/x-flag/br.svg +1 -0
  200. package/DS1/x-flag/bs.svg +1 -0
  201. package/DS1/x-flag/bt.svg +1 -0
  202. package/DS1/x-flag/bv.svg +1 -0
  203. package/DS1/x-flag/bw.svg +1 -0
  204. package/DS1/x-flag/by.svg +1 -0
  205. package/DS1/x-flag/bz.svg +1 -0
  206. package/DS1/x-flag/ca.svg +1 -0
  207. package/DS1/x-flag/cc.svg +1 -0
  208. package/DS1/x-flag/cd.svg +1 -0
  209. package/DS1/x-flag/cf.svg +1 -0
  210. package/DS1/x-flag/cg.svg +1 -0
  211. package/DS1/x-flag/ch.svg +1 -0
  212. package/DS1/x-flag/ci.svg +1 -0
  213. package/DS1/x-flag/ck.svg +1 -0
  214. package/DS1/x-flag/cl.svg +1 -0
  215. package/DS1/x-flag/cm.svg +1 -0
  216. package/DS1/x-flag/cn.svg +1 -0
  217. package/DS1/x-flag/co.svg +1 -0
  218. package/DS1/x-flag/cr.svg +1 -0
  219. package/DS1/x-flag/cu.svg +1 -0
  220. package/DS1/x-flag/cv.svg +1 -0
  221. package/DS1/x-flag/cw.svg +1 -0
  222. package/DS1/x-flag/cx.svg +1 -0
  223. package/DS1/x-flag/cy.svg +1 -0
  224. package/DS1/x-flag/cz.svg +1 -0
  225. package/DS1/x-flag/de.svg +1 -0
  226. package/DS1/x-flag/dj.svg +1 -0
  227. package/DS1/x-flag/dk.svg +1 -0
  228. package/DS1/x-flag/dm.svg +1 -0
  229. package/DS1/x-flag/do.svg +1 -0
  230. package/DS1/x-flag/dz.svg +1 -0
  231. package/DS1/x-flag/ec.svg +1 -0
  232. package/DS1/x-flag/ee.svg +1 -0
  233. package/DS1/x-flag/eg.svg +1 -0
  234. package/DS1/x-flag/eh.svg +1 -0
  235. package/DS1/x-flag/er.svg +1 -0
  236. package/DS1/x-flag/es-ct.svg +1 -0
  237. package/DS1/x-flag/es.svg +1 -0
  238. package/DS1/x-flag/et.svg +1 -0
  239. package/DS1/x-flag/eu.svg +1 -0
  240. package/DS1/x-flag/fi.svg +1 -0
  241. package/DS1/x-flag/fj.svg +1 -0
  242. package/DS1/x-flag/fk.svg +1 -0
  243. package/DS1/x-flag/fm.svg +1 -0
  244. package/DS1/x-flag/fo.svg +1 -0
  245. package/DS1/x-flag/fr.svg +1 -0
  246. package/DS1/x-flag/ga.svg +1 -0
  247. package/DS1/x-flag/gb-eng.svg +1 -0
  248. package/DS1/x-flag/gb-nir.svg +1 -0
  249. package/DS1/x-flag/gb-sct.svg +1 -0
  250. package/DS1/x-flag/gb-wls.svg +1 -0
  251. package/DS1/x-flag/gb.svg +1 -0
  252. package/DS1/x-flag/gd.svg +1 -0
  253. package/DS1/x-flag/ge.svg +1 -0
  254. package/DS1/x-flag/gf.svg +1 -0
  255. package/DS1/x-flag/gg.svg +1 -0
  256. package/DS1/x-flag/gh.svg +1 -0
  257. package/DS1/x-flag/gi.svg +1 -0
  258. package/DS1/x-flag/gl.svg +1 -0
  259. package/DS1/x-flag/gm.svg +1 -0
  260. package/DS1/x-flag/gn.svg +1 -0
  261. package/DS1/x-flag/gp.svg +1 -0
  262. package/DS1/x-flag/gq.svg +1 -0
  263. package/DS1/x-flag/gr.svg +1 -0
  264. package/DS1/x-flag/gs.svg +1 -0
  265. package/DS1/x-flag/gt.svg +1 -0
  266. package/DS1/x-flag/gu.svg +1 -0
  267. package/DS1/x-flag/gw.svg +1 -0
  268. package/DS1/x-flag/gy.svg +1 -0
  269. package/DS1/x-flag/hk.svg +1 -0
  270. package/DS1/x-flag/hm.svg +1 -0
  271. package/DS1/x-flag/hn.svg +1 -0
  272. package/DS1/x-flag/hr.svg +1 -0
  273. package/DS1/x-flag/ht.svg +1 -0
  274. package/DS1/x-flag/hu.svg +1 -0
  275. package/DS1/x-flag/ic.svg +1 -0
  276. package/DS1/x-flag/id.svg +1 -0
  277. package/DS1/x-flag/ie.svg +1 -0
  278. package/DS1/x-flag/il.svg +1 -0
  279. package/DS1/x-flag/im.svg +1 -0
  280. package/DS1/x-flag/in.svg +1 -0
  281. package/DS1/x-flag/io.svg +1 -0
  282. package/DS1/x-flag/iq.svg +1 -0
  283. package/DS1/x-flag/ir.svg +1 -0
  284. package/DS1/x-flag/is.svg +1 -0
  285. package/DS1/x-flag/it.svg +1 -0
  286. package/DS1/x-flag/je.svg +1 -0
  287. package/DS1/x-flag/jm.svg +1 -0
  288. package/DS1/x-flag/jo.svg +1 -0
  289. package/DS1/x-flag/jp.svg +1 -0
  290. package/DS1/x-flag/ke.svg +1 -0
  291. package/DS1/x-flag/kg.svg +1 -0
  292. package/DS1/x-flag/kh.svg +1 -0
  293. package/DS1/x-flag/ki.svg +1 -0
  294. package/DS1/x-flag/km.svg +1 -0
  295. package/DS1/x-flag/kn.svg +1 -0
  296. package/DS1/x-flag/kp.svg +1 -0
  297. package/DS1/x-flag/kr.svg +1 -0
  298. package/DS1/x-flag/kw.svg +1 -0
  299. package/DS1/x-flag/ky.svg +1 -0
  300. package/DS1/x-flag/kz.svg +1 -0
  301. package/DS1/x-flag/la.svg +1 -0
  302. package/DS1/x-flag/lb.svg +1 -0
  303. package/DS1/x-flag/lc.svg +1 -0
  304. package/DS1/x-flag/li.svg +1 -0
  305. package/DS1/x-flag/lk.svg +1 -0
  306. package/DS1/x-flag/lr.svg +1 -0
  307. package/DS1/x-flag/ls.svg +1 -0
  308. package/DS1/x-flag/lt.svg +1 -0
  309. package/DS1/x-flag/lu.svg +1 -0
  310. package/DS1/x-flag/lv.svg +1 -0
  311. package/DS1/x-flag/ly.svg +1 -0
  312. package/DS1/x-flag/ma.svg +1 -0
  313. package/DS1/x-flag/mc.svg +1 -0
  314. package/DS1/x-flag/md.svg +1 -0
  315. package/DS1/x-flag/me.svg +1 -0
  316. package/DS1/x-flag/mf.svg +1 -0
  317. package/DS1/x-flag/mg.svg +1 -0
  318. package/DS1/x-flag/mh.svg +1 -0
  319. package/DS1/x-flag/mk.svg +1 -0
  320. package/DS1/x-flag/ml.svg +1 -0
  321. package/DS1/x-flag/mm.svg +1 -0
  322. package/DS1/x-flag/mn.svg +1 -0
  323. package/DS1/x-flag/mo.svg +1 -0
  324. package/DS1/x-flag/mp.svg +1 -0
  325. package/DS1/x-flag/mq.svg +1 -0
  326. package/DS1/x-flag/mr.svg +1 -0
  327. package/DS1/x-flag/ms.svg +1 -0
  328. package/DS1/x-flag/mt.svg +1 -0
  329. package/DS1/x-flag/mu.svg +1 -0
  330. package/DS1/x-flag/mv.svg +1 -0
  331. package/DS1/x-flag/mw.svg +1 -0
  332. package/DS1/x-flag/mx.svg +1 -0
  333. package/DS1/x-flag/my.svg +1 -0
  334. package/DS1/x-flag/mz.svg +1 -0
  335. package/DS1/x-flag/na.svg +1 -0
  336. package/DS1/x-flag/nc.svg +1 -0
  337. package/DS1/x-flag/ne.svg +1 -0
  338. package/DS1/x-flag/nf.svg +1 -0
  339. package/DS1/x-flag/ng.svg +1 -0
  340. package/DS1/x-flag/ni.svg +1 -0
  341. package/DS1/x-flag/nl.svg +1 -0
  342. package/DS1/x-flag/no.svg +1 -0
  343. package/DS1/x-flag/np.svg +1 -0
  344. package/DS1/x-flag/nr.svg +1 -0
  345. package/DS1/x-flag/nu.svg +1 -0
  346. package/DS1/x-flag/nz.svg +1 -0
  347. package/DS1/x-flag/om.svg +1 -0
  348. package/DS1/x-flag/pa.svg +1 -0
  349. package/DS1/x-flag/pe.svg +1 -0
  350. package/DS1/x-flag/pf.svg +1 -0
  351. package/DS1/x-flag/pg.svg +1 -0
  352. package/DS1/x-flag/ph.svg +1 -0
  353. package/DS1/x-flag/pk.svg +1 -0
  354. package/DS1/x-flag/pl.svg +1 -0
  355. package/DS1/x-flag/pm.svg +1 -0
  356. package/DS1/x-flag/pn.svg +1 -0
  357. package/DS1/x-flag/pr.svg +1 -0
  358. package/DS1/x-flag/ps.svg +1 -0
  359. package/DS1/x-flag/pt.svg +1 -0
  360. package/DS1/x-flag/pw.svg +1 -0
  361. package/DS1/x-flag/py.svg +1 -0
  362. package/DS1/x-flag/qa.svg +1 -0
  363. package/DS1/x-flag/re.svg +1 -0
  364. package/DS1/x-flag/ro.svg +1 -0
  365. package/DS1/x-flag/rs.svg +1 -0
  366. package/DS1/x-flag/ru.svg +1 -0
  367. package/DS1/x-flag/rw.svg +1 -0
  368. package/DS1/x-flag/sa.svg +1 -0
  369. package/DS1/x-flag/sb.svg +1 -0
  370. package/DS1/x-flag/sc.svg +1 -0
  371. package/DS1/x-flag/sd.svg +1 -0
  372. package/DS1/x-flag/se.svg +1 -0
  373. package/DS1/x-flag/sg.svg +1 -0
  374. package/DS1/x-flag/sh.svg +1 -0
  375. package/DS1/x-flag/si.svg +1 -0
  376. package/DS1/x-flag/sj.svg +1 -0
  377. package/DS1/x-flag/sk.svg +1 -0
  378. package/DS1/x-flag/sl.svg +1 -0
  379. package/DS1/x-flag/sm.svg +1 -0
  380. package/DS1/x-flag/sn.svg +1 -0
  381. package/DS1/x-flag/so.svg +1 -0
  382. package/DS1/x-flag/sr.svg +1 -0
  383. package/DS1/x-flag/ss.svg +1 -0
  384. package/DS1/x-flag/st.svg +1 -0
  385. package/DS1/x-flag/sv.svg +1 -0
  386. package/DS1/x-flag/sx.svg +1 -0
  387. package/DS1/x-flag/sy.svg +1 -0
  388. package/DS1/x-flag/sz.svg +1 -0
  389. package/DS1/x-flag/ta.svg +1 -0
  390. package/DS1/x-flag/tc.svg +1 -0
  391. package/DS1/x-flag/td.svg +1 -0
  392. package/DS1/x-flag/tf.svg +1 -0
  393. package/DS1/x-flag/tg.svg +1 -0
  394. package/DS1/x-flag/th.svg +1 -0
  395. package/DS1/x-flag/tj.svg +1 -0
  396. package/DS1/x-flag/tk.svg +1 -0
  397. package/DS1/x-flag/tl.svg +1 -0
  398. package/DS1/x-flag/tm.svg +1 -0
  399. package/DS1/x-flag/tn.svg +1 -0
  400. package/DS1/x-flag/to.svg +1 -0
  401. package/DS1/x-flag/tr.svg +1 -0
  402. package/DS1/x-flag/tt.svg +1 -0
  403. package/DS1/x-flag/tv.svg +1 -0
  404. package/DS1/x-flag/tw.svg +1 -0
  405. package/DS1/x-flag/tz.svg +1 -0
  406. package/DS1/x-flag/ua.svg +1 -0
  407. package/DS1/x-flag/ug.svg +1 -0
  408. package/DS1/x-flag/um.svg +1 -0
  409. package/DS1/x-flag/us.svg +1 -0
  410. package/DS1/x-flag/uy.svg +1 -0
  411. package/DS1/x-flag/uz.svg +1 -0
  412. package/DS1/x-flag/va.svg +1 -0
  413. package/DS1/x-flag/vc.svg +1 -0
  414. package/DS1/x-flag/ve.svg +1 -0
  415. package/DS1/x-flag/vg.svg +1 -0
  416. package/DS1/x-flag/vi.svg +1 -0
  417. package/DS1/x-flag/vn.svg +1 -0
  418. package/DS1/x-flag/vu.svg +1 -0
  419. package/DS1/x-flag/wf.svg +1 -0
  420. package/DS1/x-flag/ws.svg +1 -0
  421. package/DS1/x-flag/xk.svg +1 -0
  422. package/DS1/x-flag/ye.svg +1 -0
  423. package/DS1/x-flag/yt.svg +1 -0
  424. package/DS1/x-flag/za.svg +1 -0
  425. package/DS1/x-flag/zm.svg +1 -0
  426. package/DS1/x-flag/zw.svg +1 -0
  427. package/DS1/x-icon/android.svg +9 -0
  428. package/DS1/x-icon/arrange-check.svg +1 -1
  429. package/DS1/x-icon/arrange-page.svg +1 -1
  430. package/DS1/x-icon/chrome.svg +7 -0
  431. package/DS1/x-icon/edge-brand.svg +6 -0
  432. package/DS1/x-icon/firefox.svg +4 -0
  433. package/DS1/x-icon/health.svg +3 -0
  434. package/DS1/x-icon/left.svg +2 -3
  435. package/DS1/x-icon/linux.svg +1 -0
  436. package/DS1/x-icon/material.svg +1 -0
  437. package/DS1/x-icon/milestone-planned.svg +3 -0
  438. package/DS1/x-icon/milestone.svg +3 -0
  439. package/DS1/x-icon/more.svg +1 -5
  440. package/DS1/x-icon/network.svg +3 -0
  441. package/DS1/x-icon/opera.svg +4 -0
  442. package/DS1/x-icon/prediction.svg +3 -0
  443. package/DS1/x-icon/priority-high.svg +3 -0
  444. package/DS1/x-icon/priority-low.svg +3 -0
  445. package/DS1/x-icon/priority-medium.svg +3 -0
  446. package/DS1/x-icon/project.svg +3 -0
  447. package/DS1/x-icon/redo.svg +2 -2
  448. package/DS1/x-icon/repeat-small.svg +3 -0
  449. package/DS1/x-icon/safari.svg +4 -0
  450. package/DS1/x-icon/scaling.svg +3 -0
  451. package/DS1/x-icon/tabs.svg +4 -0
  452. package/DS1/x-icon/windows.svg +5 -0
  453. package/README.md +3 -3
  454. package/dist/0-face/button-label.d.ts +5 -0
  455. package/dist/0-face/button-label.d.ts.map +1 -0
  456. package/dist/0-face/button-label.js +31 -0
  457. package/dist/0-face/calendar.d.ts +1 -1
  458. package/dist/0-face/calendar.d.ts.map +1 -1
  459. package/dist/0-face/calendar.js +6 -3
  460. package/dist/0-face/carousel.d.ts +9 -0
  461. package/dist/0-face/carousel.d.ts.map +1 -1
  462. package/dist/0-face/carousel.js +80 -0
  463. package/dist/0-face/constraint-panel.d.ts +43 -0
  464. package/dist/0-face/constraint-panel.d.ts.map +1 -0
  465. package/dist/0-face/constraint-panel.js +451 -0
  466. package/dist/0-face/constraint-site.d.ts +73 -0
  467. package/dist/0-face/constraint-site.d.ts.map +1 -0
  468. package/dist/0-face/constraint-site.js +186 -0
  469. package/dist/0-face/constraints.d.ts +47 -0
  470. package/dist/0-face/constraints.d.ts.map +1 -0
  471. package/dist/0-face/constraints.js +274 -0
  472. package/dist/0-face/copy-text.js +1 -1
  473. package/dist/0-face/cut-fade.d.ts +112 -0
  474. package/dist/0-face/cut-fade.d.ts.map +1 -0
  475. package/dist/0-face/cut-fade.js +274 -0
  476. package/dist/0-face/define.d.ts.map +1 -1
  477. package/dist/0-face/define.js +24 -3
  478. package/dist/0-face/face-correction.d.ts +51 -0
  479. package/dist/0-face/face-correction.d.ts.map +1 -0
  480. package/dist/0-face/face-correction.js +80 -0
  481. package/dist/0-face/failures.d.ts +16 -0
  482. package/dist/0-face/failures.d.ts.map +1 -0
  483. package/dist/0-face/failures.js +21 -0
  484. package/dist/0-face/fault-lines.d.ts +20 -0
  485. package/dist/0-face/fault-lines.d.ts.map +1 -0
  486. package/dist/0-face/fault-lines.js +172 -0
  487. package/dist/0-face/feedback-overlays.d.ts.map +1 -1
  488. package/dist/0-face/feedback-overlays.js +5 -3
  489. package/dist/0-face/feedback.d.ts +2 -0
  490. package/dist/0-face/feedback.d.ts.map +1 -1
  491. package/dist/0-face/feedback.js +1 -0
  492. package/dist/0-face/focus.d.ts +71 -0
  493. package/dist/0-face/focus.d.ts.map +1 -0
  494. package/dist/0-face/focus.js +196 -0
  495. package/dist/0-face/grid.d.ts +11 -1
  496. package/dist/0-face/grid.d.ts.map +1 -1
  497. package/dist/0-face/grid.js +90 -4
  498. package/dist/0-face/i18n.d.ts.map +1 -1
  499. package/dist/0-face/i18n.js +38 -16
  500. package/dist/0-face/layout-inspector.d.ts +5 -1
  501. package/dist/0-face/layout-inspector.d.ts.map +1 -1
  502. package/dist/0-face/layout-inspector.js +130 -104
  503. package/dist/0-face/preference-options.d.ts +4 -0
  504. package/dist/0-face/preference-options.d.ts.map +1 -1
  505. package/dist/0-face/scaling.d.ts +8 -1
  506. package/dist/0-face/scaling.d.ts.map +1 -1
  507. package/dist/0-face/scaling.js +19 -2
  508. package/dist/0-face/shape.d.ts +35 -0
  509. package/dist/0-face/shape.d.ts.map +1 -0
  510. package/dist/0-face/shape.js +23 -0
  511. package/dist/0-face/text-contrast.d.ts +22 -0
  512. package/dist/0-face/text-contrast.d.ts.map +1 -0
  513. package/dist/0-face/text-contrast.js +178 -0
  514. package/dist/0-face/theme-bootstrap.js +56 -0
  515. package/dist/0-face/toast-queue.d.ts +4 -0
  516. package/dist/0-face/toast-queue.d.ts.map +1 -1
  517. package/dist/0-face/toast-queue.js +4 -1
  518. package/dist/0-face/translations/da.json +10 -1
  519. package/dist/0-face/translations/de.json +10 -1
  520. package/dist/0-face/translations/en.json +10 -1
  521. package/dist/0-face/translations/es.json +10 -1
  522. package/dist/0-face/translations/fi.json +10 -1
  523. package/dist/0-face/translations/fr.json +10 -1
  524. package/dist/0-face/translations/is.json +10 -1
  525. package/dist/0-face/translations/it.json +10 -1
  526. package/dist/0-face/translations/ja.json +10 -1
  527. package/dist/0-face/translations/ko.json +10 -1
  528. package/dist/0-face/translations/nb.json +10 -1
  529. package/dist/0-face/translations/pt-BR.json +10 -1
  530. package/dist/0-face/translations/pt.json +10 -1
  531. package/dist/0-face/translations/sv.json +10 -1
  532. package/dist/0-face/translations/zh.json +10 -1
  533. package/dist/0-face/word-wrap.d.ts +6 -0
  534. package/dist/0-face/word-wrap.d.ts.map +1 -0
  535. package/dist/0-face/word-wrap.js +119 -0
  536. package/dist/1-root/foundation.d.ts +12 -0
  537. package/dist/1-root/foundation.d.ts.map +1 -0
  538. package/dist/1-root/foundation.js +59 -0
  539. package/dist/2-core/button-split.d.ts +1 -0
  540. package/dist/2-core/button-split.d.ts.map +1 -1
  541. package/dist/2-core/button-split.js +9 -4
  542. package/dist/2-core/chart/grid-chart.d.ts +2 -0
  543. package/dist/2-core/chart/grid-chart.d.ts.map +1 -1
  544. package/dist/2-core/chart/grid-chart.js +2 -1
  545. package/dist/2-core/ds-activity.d.ts +25 -0
  546. package/dist/2-core/ds-activity.d.ts.map +1 -0
  547. package/dist/2-core/ds-activity.js +28 -0
  548. package/dist/2-core/ds-app-chrome.d.ts +2 -0
  549. package/dist/2-core/ds-app-chrome.d.ts.map +1 -0
  550. package/dist/2-core/ds-app-chrome.js +1 -0
  551. package/dist/2-core/ds-avatar.d.ts +12 -0
  552. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  553. package/dist/2-core/ds-avatar.js +86 -7
  554. package/dist/2-core/ds-badge.d.ts +7 -1
  555. package/dist/2-core/ds-badge.d.ts.map +1 -1
  556. package/dist/2-core/ds-badge.js +8 -1
  557. package/dist/2-core/ds-button.d.ts +12 -0
  558. package/dist/2-core/ds-button.d.ts.map +1 -1
  559. package/dist/2-core/ds-button.js +4 -0
  560. package/dist/2-core/ds-chart.d.ts +28 -3
  561. package/dist/2-core/ds-chart.d.ts.map +1 -1
  562. package/dist/2-core/ds-chart.js +110 -130
  563. package/dist/2-core/ds-cycle.d.ts +2 -2
  564. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  565. package/dist/2-core/ds-cycle.js +36 -171
  566. package/dist/2-core/ds-device-bezel.d.ts +2 -0
  567. package/dist/2-core/ds-device-bezel.d.ts.map +1 -0
  568. package/dist/2-core/ds-device-bezel.js +1 -0
  569. package/dist/2-core/ds-empty.d.ts +2 -2
  570. package/dist/2-core/ds-empty.d.ts.map +1 -1
  571. package/dist/2-core/ds-empty.js +6 -4
  572. package/dist/2-core/ds-input.d.ts +7 -0
  573. package/dist/2-core/ds-input.d.ts.map +1 -1
  574. package/dist/2-core/ds-input.js +23 -3
  575. package/dist/2-core/ds-message.d.ts +11 -0
  576. package/dist/2-core/ds-message.d.ts.map +1 -1
  577. package/dist/2-core/ds-message.js +18 -0
  578. package/dist/2-core/ds-number.d.ts +86 -0
  579. package/dist/2-core/ds-number.d.ts.map +1 -0
  580. package/dist/2-core/ds-number.js +326 -0
  581. package/dist/2-core/ds-progress.d.ts +3 -0
  582. package/dist/2-core/ds-progress.d.ts.map +1 -1
  583. package/dist/2-core/ds-progress.js +3 -0
  584. package/dist/2-core/ds-radio.d.ts +3 -0
  585. package/dist/2-core/ds-radio.d.ts.map +1 -1
  586. package/dist/2-core/ds-radio.js +10 -1
  587. package/dist/2-core/ds-stat.d.ts +3 -0
  588. package/dist/2-core/ds-stat.d.ts.map +1 -1
  589. package/dist/2-core/ds-stat.js +3 -0
  590. package/dist/2-core/ds-switch.d.ts +14 -1
  591. package/dist/2-core/ds-switch.d.ts.map +1 -1
  592. package/dist/2-core/ds-switch.js +3 -1
  593. package/dist/2-core/ds-tag.d.ts +8 -1
  594. package/dist/2-core/ds-tag.d.ts.map +1 -1
  595. package/dist/2-core/ds-tag.js +12 -2
  596. package/dist/2-core/ds-text.d.ts +7 -0
  597. package/dist/2-core/ds-text.d.ts.map +1 -1
  598. package/dist/2-core/ds-text.js +7 -0
  599. package/dist/2-core/ds-token.d.ts +3 -0
  600. package/dist/2-core/ds-token.d.ts.map +1 -1
  601. package/dist/2-core/ds-token.js +3 -0
  602. package/dist/2-core/ds-tooltip.d.ts.map +1 -1
  603. package/dist/2-core/ds-tooltip.js +23 -2
  604. package/dist/2-core/ds-window.d.ts +2 -0
  605. package/dist/2-core/ds-window.d.ts.map +1 -0
  606. package/dist/2-core/ds-window.js +1 -0
  607. package/dist/2-core/generated/ds-icon-map.d.ts +27 -6
  608. package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
  609. package/dist/2-core/generated/ds-icon-map.js +47 -5
  610. package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
  611. package/dist/2-core/generated/icons-extra.js +24 -3
  612. package/dist/2-core/generated/icons-immediate.d.ts +1 -1
  613. package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
  614. package/dist/2-core/generated/icons-immediate.js +3 -3
  615. package/dist/2-core/number-expression.d.ts +12 -0
  616. package/dist/2-core/number-expression.d.ts.map +1 -0
  617. package/dist/2-core/number-expression.js +82 -0
  618. package/dist/3-unit/calendar-base.d.ts +5 -0
  619. package/dist/3-unit/calendar-base.d.ts.map +1 -1
  620. package/dist/3-unit/calendar-base.js +3 -2
  621. package/dist/3-unit/context-trigger.d.ts.map +1 -1
  622. package/dist/3-unit/context-trigger.js +32 -2
  623. package/dist/3-unit/ds-calendar.d.ts +197 -4
  624. package/dist/3-unit/ds-calendar.d.ts.map +1 -1
  625. package/dist/3-unit/ds-calendar.js +687 -45
  626. package/dist/3-unit/ds-carousel.d.ts +3 -0
  627. package/dist/3-unit/ds-carousel.d.ts.map +1 -1
  628. package/dist/3-unit/ds-carousel.js +13 -1
  629. package/dist/3-unit/ds-context.d.ts +18 -1
  630. package/dist/3-unit/ds-context.d.ts.map +1 -1
  631. package/dist/3-unit/ds-context.js +37 -1
  632. package/dist/3-unit/ds-form.d.ts +9 -0
  633. package/dist/3-unit/ds-form.d.ts.map +1 -1
  634. package/dist/3-unit/ds-form.js +52 -11
  635. package/dist/3-unit/ds-list.d.ts +20 -1
  636. package/dist/3-unit/ds-list.d.ts.map +1 -1
  637. package/dist/3-unit/ds-list.js +31 -3
  638. package/dist/3-unit/ds-matrix.d.ts +3 -0
  639. package/dist/3-unit/ds-matrix.d.ts.map +1 -1
  640. package/dist/3-unit/ds-matrix.js +3 -0
  641. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  642. package/dist/3-unit/ds-menu.js +17 -1
  643. package/dist/3-unit/ds-row.d.ts +13 -0
  644. package/dist/3-unit/ds-row.d.ts.map +1 -1
  645. package/dist/3-unit/ds-row.js +15 -2
  646. package/dist/3-unit/ds-select.js +1 -1
  647. package/dist/3-unit/ds-sidebar.d.ts +17 -0
  648. package/dist/3-unit/ds-sidebar.d.ts.map +1 -1
  649. package/dist/3-unit/ds-sidebar.js +14 -3
  650. package/dist/3-unit/ds-table-of-contents.d.ts +68 -0
  651. package/dist/3-unit/ds-table-of-contents.d.ts.map +1 -0
  652. package/dist/3-unit/ds-table-of-contents.js +190 -0
  653. package/dist/3-unit/ds-table.d.ts.map +1 -1
  654. package/dist/3-unit/ds-table.js +2 -1
  655. package/dist/3-unit/ds-tabs.d.ts +32 -1
  656. package/dist/3-unit/ds-tabs.d.ts.map +1 -1
  657. package/dist/3-unit/ds-tabs.js +39 -1
  658. package/dist/4-page/ds-container.d.ts.map +1 -1
  659. package/dist/4-page/ds-container.js +2 -1
  660. package/dist/4-page/ds-document.d.ts +3 -0
  661. package/dist/4-page/ds-document.d.ts.map +1 -1
  662. package/dist/4-page/ds-document.js +3 -0
  663. package/dist/4-page/ds-footer.d.ts +47 -7
  664. package/dist/4-page/ds-footer.d.ts.map +1 -1
  665. package/dist/4-page/ds-footer.js +58 -14
  666. package/dist/4-page/ds-header.d.ts +6 -0
  667. package/dist/4-page/ds-header.d.ts.map +1 -1
  668. package/dist/4-page/ds-header.js +4 -1
  669. package/dist/4-page/ds-overlay.d.ts +2 -2
  670. package/dist/4-page/ds-overlay.d.ts.map +1 -1
  671. package/dist/4-page/ds-overlay.js +8 -3
  672. package/dist/4-page/ds-page.d.ts +12 -0
  673. package/dist/4-page/ds-page.d.ts.map +1 -1
  674. package/dist/4-page/ds-page.js +19 -1
  675. package/dist/4-page/email.d.ts +2 -0
  676. package/dist/4-page/email.d.ts.map +1 -1
  677. package/dist/4-page/email.js +5 -4
  678. package/dist/5-visual-kit/app-chrome.d.ts +98 -0
  679. package/dist/5-visual-kit/app-chrome.d.ts.map +1 -0
  680. package/dist/5-visual-kit/app-chrome.js +119 -0
  681. package/dist/5-visual-kit/bezels.d.ts +30 -0
  682. package/dist/5-visual-kit/bezels.d.ts.map +1 -0
  683. package/dist/5-visual-kit/bezels.js +388 -0
  684. package/dist/5-visual-kit/browser-icons.d.ts +5 -0
  685. package/dist/5-visual-kit/browser-icons.d.ts.map +1 -0
  686. package/dist/5-visual-kit/browser-icons.js +51 -0
  687. package/dist/5-visual-kit/browser-styles.d.ts +3 -0
  688. package/dist/5-visual-kit/browser-styles.d.ts.map +1 -0
  689. package/dist/5-visual-kit/browser-styles.js +52 -0
  690. package/dist/5-visual-kit/device-bezel.d.ts +84 -0
  691. package/dist/5-visual-kit/device-bezel.d.ts.map +1 -0
  692. package/dist/5-visual-kit/device-bezel.js +56 -0
  693. package/dist/5-visual-kit/instagram-frame.d.ts +8 -0
  694. package/dist/5-visual-kit/instagram-frame.d.ts.map +1 -0
  695. package/dist/5-visual-kit/instagram-frame.js +13 -0
  696. package/dist/5-visual-kit/instagram.d.ts +18 -0
  697. package/dist/5-visual-kit/instagram.d.ts.map +1 -0
  698. package/dist/5-visual-kit/instagram.js +39 -0
  699. package/dist/5-visual-kit/mobile-chrome.d.ts +4 -0
  700. package/dist/5-visual-kit/mobile-chrome.d.ts.map +1 -0
  701. package/dist/5-visual-kit/mobile-chrome.js +24 -0
  702. package/dist/5-visual-kit/native-icon-paths.d.ts +146 -0
  703. package/dist/5-visual-kit/native-icon-paths.d.ts.map +1 -0
  704. package/dist/5-visual-kit/native-icon-paths.js +145 -0
  705. package/dist/5-visual-kit/window.d.ts +51 -0
  706. package/dist/5-visual-kit/window.d.ts.map +1 -0
  707. package/dist/5-visual-kit/window.js +20 -0
  708. package/dist/browser-icons-BFbS1tIx.js +56 -0
  709. package/dist/browser-icons-BFbS1tIx.js.map +1 -0
  710. package/dist/browser-icons-CT8qU77Z.js +48 -0
  711. package/dist/browser-icons-CT8qU77Z.js.map +1 -0
  712. package/dist/components.d.ts +1 -0
  713. package/dist/components.d.ts.map +1 -1
  714. package/dist/components.js +1 -0
  715. package/dist/design-system-1.bundle.js +5874 -2097
  716. package/dist/design-system-1.bundle.js.map +1 -1
  717. package/dist/design-system-1.bundle.min.js +7332 -4682
  718. package/dist/design-system-1.bundle.min.js.map +1 -1
  719. package/dist/design-system-1.css +1 -1
  720. package/dist/feedback.js +197 -167
  721. package/dist/feedback.js.map +1 -1
  722. package/dist/{icons-extra-CRxxWFjX.js → icons-extra-BMPvmQPI.js} +25 -4
  723. package/dist/icons-extra-BMPvmQPI.js.map +1 -0
  724. package/dist/{icons-extra-H5pqCM_R.js → icons-extra-BfYOw-cR.js} +83 -5
  725. package/dist/icons-extra-BfYOw-cR.js.map +1 -0
  726. package/dist/index.d.ts +12 -1
  727. package/dist/index.d.ts.map +1 -1
  728. package/dist/index.js +11 -1
  729. package/dist/instagram-CKofs55A.js +50 -0
  730. package/dist/instagram-CKofs55A.js.map +1 -0
  731. package/dist/instagram-CcYf5oiM.js +48 -0
  732. package/dist/instagram-CcYf5oiM.js.map +1 -0
  733. package/dist/lit-Ce_uWYM4.js +612 -0
  734. package/dist/lit-Ce_uWYM4.js.map +1 -0
  735. package/dist/lit-DGUVm1Ce.js +557 -0
  736. package/dist/lit-DGUVm1Ce.js.map +1 -0
  737. package/dist/native-icon-paths-CB9evXBM.js +93 -0
  738. package/dist/native-icon-paths-CB9evXBM.js.map +1 -0
  739. package/dist/native-icon-paths-zay-3g_n.js +150 -0
  740. package/dist/native-icon-paths-zay-3g_n.js.map +1 -0
  741. package/dist/react/avatar.d.ts +1 -1
  742. package/dist/react/choice.d.ts +4 -0
  743. package/dist/react/choice.d.ts.map +1 -1
  744. package/dist/react/choice.js +2 -2
  745. package/dist/react/context.d.ts +19 -4
  746. package/dist/react/context.d.ts.map +1 -1
  747. package/dist/react/context.js +4 -4
  748. package/dist/react/empty.d.ts +2 -2
  749. package/dist/react/empty.d.ts.map +1 -1
  750. package/dist/react/empty.js +1 -1
  751. package/dist/react/footer.d.ts +5 -5
  752. package/dist/react/footer.d.ts.map +1 -1
  753. package/dist/react/footer.js +2 -2
  754. package/dist/react/header.d.ts +2 -2
  755. package/dist/react/header.d.ts.map +1 -1
  756. package/dist/react/message.d.ts +4 -0
  757. package/dist/react/message.d.ts.map +1 -1
  758. package/dist/react/message.js +2 -2
  759. package/dist/react/number.d.ts +53 -0
  760. package/dist/react/number.d.ts.map +1 -0
  761. package/dist/react/number.js +25 -0
  762. package/dist/react/page.d.ts +1 -1
  763. package/dist/react/sidebar.d.ts +4 -0
  764. package/dist/react/sidebar.d.ts.map +1 -1
  765. package/dist/react/sidebar.js +2 -2
  766. package/dist/react/table-of-contents.d.ts +19 -0
  767. package/dist/react/table-of-contents.d.ts.map +1 -0
  768. package/dist/react/table-of-contents.js +28 -0
  769. package/dist/{shared-words-CdMDVtXx.js → shared-words-C5cjxMjZ.js} +151 -16
  770. package/dist/shared-words-C5cjxMjZ.js.map +1 -0
  771. package/dist/{shared-words-BtRee8xR.js → shared-words-Cdm7xd-_.js} +163 -28
  772. package/dist/shared-words-Cdm7xd-_.js.map +1 -0
  773. package/package.json +25 -12
  774. package/DS1/3-unit/ds-calendar-large.ts +0 -353
  775. package/DS1/3-unit/styles/ds-calendar-large.css +0 -178
  776. package/dist/3-unit/ds-calendar-large.d.ts +0 -142
  777. package/dist/3-unit/ds-calendar-large.d.ts.map +0 -1
  778. package/dist/3-unit/ds-calendar-large.js +0 -308
  779. package/dist/icons-extra-CRxxWFjX.js.map +0 -1
  780. package/dist/icons-extra-H5pqCM_R.js.map +0 -1
  781. package/dist/shared-words-BtRee8xR.js.map +0 -1
  782. package/dist/shared-words-CdMDVtXx.js.map +0 -1
@@ -164,6 +164,83 @@ export function nearestSlide(track, slides, current = 0) {
164
164
  });
165
165
  return nearest;
166
166
  }
167
+ /**
168
+ * A strip under the pointer. A finger, a pen or a trackpad scrolls the track
169
+ * natively; a mouse drags it the same way (snapping held off while it drags),
170
+ * and on letting go `settle` puts it on a slide. A press that ends a drag or a
171
+ * scroll, by any pointer, never presses what it started on, so a person can
172
+ * swipe across cards that open something without choosing one. Returns the
173
+ * function that stops it.
174
+ */
175
+ export function dragTrack(track, settle) {
176
+ let held = null;
177
+ let moved = false;
178
+ let quietUntil = 0;
179
+ const down = (event) => {
180
+ if (!event.isPrimary || (event.pointerType === "mouse" && event.button !== 0))
181
+ return;
182
+ held = { id: event.pointerId, x: event.clientX, left: track.scrollLeft, mouse: event.pointerType === "mouse" };
183
+ moved = false;
184
+ };
185
+ const move = (event) => {
186
+ if (!held || event.pointerId !== held.id)
187
+ return;
188
+ const dx = event.clientX - held.x;
189
+ if (!moved && Math.abs(dx) < 6)
190
+ return;
191
+ if (!moved && held.mouse) {
192
+ try {
193
+ track.setPointerCapture(event.pointerId);
194
+ }
195
+ catch { /* a pointer already gone */ }
196
+ track.setAttribute("data-dragging", "");
197
+ }
198
+ moved = true;
199
+ if (held.mouse)
200
+ track.scrollLeft = held.left - dx;
201
+ };
202
+ const up = (event) => {
203
+ if (!held || event.pointerId !== held.id)
204
+ return;
205
+ const mouse = held.mouse;
206
+ held = null;
207
+ if (!moved)
208
+ return;
209
+ quietUntil = performance.now() + 400;
210
+ if (mouse) {
211
+ track.removeAttribute("data-dragging");
212
+ settle();
213
+ }
214
+ };
215
+ // A native scroll while a finger is down is a swipe: the press it ends is not a choice.
216
+ const scrolled = () => { if (held)
217
+ moved = true; };
218
+ const click = (event) => {
219
+ if (performance.now() > quietUntil)
220
+ return;
221
+ event.preventDefault();
222
+ event.stopPropagation();
223
+ };
224
+ // A picture in a slide would be dragged out of the page instead of the strip.
225
+ const dragstart = (event) => event.preventDefault();
226
+ track.addEventListener("pointerdown", down);
227
+ track.addEventListener("pointermove", move);
228
+ track.addEventListener("pointerup", up);
229
+ track.addEventListener("pointercancel", up);
230
+ track.addEventListener("scroll", scrolled, { passive: true });
231
+ track.addEventListener("click", click, true);
232
+ track.addEventListener("dragstart", dragstart);
233
+ return () => {
234
+ track.removeEventListener("pointerdown", down);
235
+ track.removeEventListener("pointermove", move);
236
+ track.removeEventListener("pointerup", up);
237
+ track.removeEventListener("pointercancel", up);
238
+ track.removeEventListener("scroll", scrolled);
239
+ track.removeEventListener("click", click, true);
240
+ track.removeEventListener("dragstart", dragstart);
241
+ track.removeAttribute("data-dragging");
242
+ };
243
+ }
167
244
  /** Where a slide starts along the track, from the track's own start, in its scroll's terms. */
168
245
  function startOf(track, slide) {
169
246
  const box = track.getBoundingClientRect();
@@ -550,6 +627,8 @@ export function startCarousel(element, options = {}) {
550
627
  const observer = typeof MutationObserver === "function" ? new MutationObserver(() => { label(); show(current, false); }) : undefined;
551
628
  track.addEventListener("scroll", scrolled, { passive: true });
552
629
  track.addEventListener("scrollend", ended);
630
+ // A loop's drive settles the strip itself; every other strip settles on the nearest slide.
631
+ const undrag = dragTrack(track, () => (loop ? undefined : go(nearestSlide(track, slides(), current), true)));
553
632
  previousButton?.addEventListener("click", previous);
554
633
  nextButton?.addEventListener("click", next);
555
634
  observer?.observe(track, { childList: true });
@@ -562,6 +641,7 @@ export function startCarousel(element, options = {}) {
562
641
  stop() {
563
642
  track.removeEventListener("scroll", scrolled);
564
643
  track.removeEventListener("scrollend", ended);
644
+ undrag();
565
645
  previousButton?.removeEventListener("click", previous);
566
646
  nextButton?.removeEventListener("click", next);
567
647
  observer?.disconnect();
@@ -0,0 +1,43 @@
1
+ import { type Constraint, type Finding } from './constraints';
2
+ /** The presses of C, each within 800ms of the last, that toggle the panel. */
3
+ export declare const CONSTRAINT_PRESSES = 5;
4
+ /**
5
+ * A panel at the page's end edge listing every small rule the page breaks
6
+ * (constraints.ts), each with its code, what is wrong and the element ringed
7
+ * on the page; pressing one scrolls to it. It measures the page as drawn when
8
+ * it opens and again with Page. Site measures every page of the site at every
9
+ * phone width (constraint-site.ts) and lists what each breaks, with a link to
10
+ * the page. Under what is broken it says what each rule measured and kept,
11
+ * and after a Site check every page it checked. It draws over the page and
12
+ * changes nothing in it.
13
+ */
14
+ export declare function createConstraintPanel(): {
15
+ show: (mode?: "page" | "site") => void;
16
+ hide: () => void;
17
+ run: () => void;
18
+ runSite: () => Promise<void>;
19
+ toggle: () => void;
20
+ readonly findings: (Finding & {
21
+ constraint: Constraint;
22
+ })[];
23
+ };
24
+ /** The device switch a site without sign-in has instead: `?ds-owner=on` once in a browser, `?ds-owner=off` to forget it. */
25
+ export declare const OWNER_DEVICE_KEY = "ds-owner";
26
+ /**
27
+ * Whether the viewer owns the page: `<html data-ds-owner>`, which a site with
28
+ * sign-in sets from its own server-checked owner, or a browser switched on as
29
+ * the owner's (`?ds-owner=on`) on a site without sign-in.
30
+ */
31
+ export declare const isPageOwner: () => boolean;
32
+ /** What the address asks the panel to show on load: `?constraints=1` this page, `?constraints=site` every page. */
33
+ export declare function askedConstraints(search?: string): 'page' | 'site' | null;
34
+ /**
35
+ * Five presses of C toggle the constraint panel, for the page's owner only
36
+ * (`isPageOwner`): for anyone else the presses do nothing. `?constraints=1` in
37
+ * the address opens it for anyone once the page has loaded, since it only
38
+ * measures; `?constraints=site` opens it on the whole site's check. Escape
39
+ * hides it. Presses typed into a field, with a modifier or held down never
40
+ * count, and any other key starts the count again.
41
+ */
42
+ export declare function initConstraintShortcut(): void;
43
+ //# sourceMappingURL=constraint-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint-panel.d.ts","sourceRoot":"","sources":["../../DS1/0-face/constraint-panel.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAKlF,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB;kBAuSf,MAAM,GAAG,MAAM;;;;;;oBAjLI,UAAU;;EAkNlD;AAED,4HAA4H;AAC5H,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAiB3C;;;;GAIG;AACH,eAAO,MAAM,WAAW,eACiD,CAAC;AAE1E,mHAAmH;AACnH,wBAAgB,gBAAgB,CAAC,MAAM,SAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CA4C7C"}
@@ -0,0 +1,451 @@
1
+ import { paintFaultLines } from './fault-lines';
2
+ import { measureConstraints } from './constraints';
3
+ import { VIEWPORT_WIDTHS, checkSite, findSitePages, inspectInFrame, ruleLine, summarizePages, summarizeRules } from './constraint-site';
4
+ // appendChild, not append: a Worker project's types redefine append for its HTML rewriter.
5
+ /** The presses of C, each within 800ms of the last, that toggle the panel. */
6
+ export const CONSTRAINT_PRESSES = 5;
7
+ /**
8
+ * A panel at the page's end edge listing every small rule the page breaks
9
+ * (constraints.ts), each with its code, what is wrong and the element ringed
10
+ * on the page; pressing one scrolls to it. It measures the page as drawn when
11
+ * it opens and again with Page. Site measures every page of the site at every
12
+ * phone width (constraint-site.ts) and lists what each breaks, with a link to
13
+ * the page. Under what is broken it says what each rule measured and kept,
14
+ * and after a Site check every page it checked. It draws over the page and
15
+ * changes nothing in it.
16
+ */
17
+ export function createConstraintPanel() {
18
+ const panel = document.createElement('div');
19
+ panel.setAttribute('data-ds-constraint-panel', '');
20
+ panel.hidden = true;
21
+ const shadow = panel.attachShadow({ mode: 'open' });
22
+ shadow.innerHTML = `<style>
23
+ :host {
24
+ all: initial !important;
25
+ display: block !important;
26
+ position: fixed !important;
27
+ inset: 0 !important;
28
+ z-index: 2147483645 !important;
29
+ pointer-events: none !important;
30
+ color-scheme: inherit !important;
31
+ --u: calc(20px * var(--sf, 1));
32
+ --paper: var(--ds-background-color, light-dark(#f9f6ef, #1e1e1e));
33
+ --ink: var(--ds-text-color, light-dark(#2a2a2a, #e8e8e8));
34
+ --muted: var(--ds-text-color-muted, light-dark(#797979, #a0a0a0));
35
+ --line: var(--ds-border-color, light-dark(#e8e8e8, #3c3c3c));
36
+ --danger: var(--ds-danger-color, light-dark(#de0331, #ff5f5f));
37
+ }
38
+ :host([hidden]) { display: none !important; }
39
+ .fault-lines { z-index: 0 !important; }
40
+ .rings { z-index: 1; position: absolute; inset: 0; overflow: hidden; }
41
+ .frames { position: absolute; width: 0; height: 0; overflow: hidden; }
42
+ .ring {
43
+ position: absolute;
44
+ box-sizing: border-box;
45
+ border: 2px solid var(--danger);
46
+ }
47
+ .ring[data-current] { background: color-mix(in srgb, var(--danger) 12%, transparent); }
48
+ .ring span {
49
+ position: absolute;
50
+ top: -2px;
51
+ left: -2px;
52
+ min-width: var(--u);
53
+ padding: 0 4px;
54
+ box-sizing: border-box;
55
+ background: var(--danger);
56
+ color: #fff;
57
+ font: 400 12px/16px var(--ds-typeface-regular, sans-serif);
58
+ font-variant-numeric: tabular-nums;
59
+ text-align: center;
60
+ }
61
+ aside {
62
+ z-index: 2;
63
+ position: absolute;
64
+ inset-block: 0;
65
+ inset-inline-end: 0;
66
+ box-sizing: border-box;
67
+ display: flex;
68
+ flex-direction: column;
69
+ width: min(calc(16 * var(--u)), 100vw);
70
+ padding: var(--u);
71
+ overflow: auto;
72
+ background: var(--paper);
73
+ box-shadow: -1px 0 0 var(--line);
74
+ color: var(--ink);
75
+ font: 400 14px/var(--u) var(--ds-typeface-regular, sans-serif);
76
+ pointer-events: auto;
77
+ }
78
+ header { display: flex; align-items: flex-end; gap: var(--u); height: var(--u); margin-bottom: var(--u); }
79
+ header strong { flex: 1; font-weight: 400; font-family: var(--ds-typeface-medium, inherit); }
80
+ button {
81
+ all: unset;
82
+ height: var(--u);
83
+ color: var(--muted);
84
+ cursor: pointer;
85
+ }
86
+ button:hover { color: var(--ink); }
87
+ button:focus-visible { outline: 2px solid var(--ds-focus-ring, var(--ink)); outline-offset: -2px; }
88
+ ol { margin: 0; padding: 0; list-style: none; }
89
+ li + li { border-top: 1px solid var(--line); }
90
+ li > :is(button, a, div) { display: block; width: 100%; height: auto; padding-block: calc(var(--u) / 2); color: var(--ink); text-decoration: none; }
91
+ li > a:hover .page { color: var(--ink); }
92
+ li > a:focus-visible { outline: 2px solid var(--ds-focus-ring, var(--ink)); outline-offset: -2px; }
93
+ .page { color: var(--muted); text-decoration: underline; text-underline-offset: 3px; overflow-wrap: anywhere; }
94
+ .element { color: var(--muted); overflow-wrap: anywhere; }
95
+ [data-status] { color: var(--muted); margin-bottom: calc(var(--u) / 2); }
96
+ section { margin-top: var(--u); }
97
+ section[hidden] { display: none; }
98
+ h3 { margin: 0; height: var(--u); font: inherit; font-family: var(--ds-typeface-medium, inherit); border-bottom: 1px solid var(--line); }
99
+ li.rule-row > div { padding-block: calc(var(--u) / 2); }
100
+ li.page-row > a { display: flex; justify-content: space-between; align-items: flex-end; gap: calc(var(--u) / 2); padding-block: 0; min-height: var(--u); }
101
+ li.page-row .page { text-decoration: none; }
102
+ li.page-row > a:hover .page { text-decoration: underline; }
103
+ .kept { color: var(--muted); white-space: nowrap; }
104
+ .broke { color: var(--danger); white-space: nowrap; }
105
+ .code { display: flex; gap: calc(var(--u) / 2); color: var(--muted); font-variant-numeric: tabular-nums; }
106
+ .code b { color: var(--danger); font-weight: 400; }
107
+ .rule { color: var(--muted); }
108
+ p { margin: 0; }
109
+ :host([data-lines-only]) aside { inset-block: 0 auto; width: auto; padding: calc(var(--u) / 2); }
110
+ :host([data-lines-only]) aside > :not(header), :host([data-lines-only]) header > :not([data-lines], [data-close]) { display: none; }
111
+ :host([data-lines-only]) header { margin: 0; }
112
+ @media print { :host { display: none !important; } }
113
+ </style><svg class="fault-lines" aria-hidden="true"></svg><div class="rings"></div><div class="frames"></div><aside aria-label="Constraints">
114
+ <header><strong>Constraints</strong><button type="button" data-run>Page</button><button type="button" data-site>Site</button><button type="button" data-lines>Lines</button><button type="button" data-close aria-label="Close">Close</button></header>
115
+ <p data-status aria-live="polite"></p><p class="rule">Fault lines: dashed reference · red drift</p>
116
+ <ol data-findings></ol>
117
+ <section data-rules hidden><h3>Rules</h3><ol></ol></section>
118
+ <section data-pages hidden><h3>Pages</h3><ol></ol></section>
119
+ </aside>`;
120
+ const faultLines = shadow.querySelector('.fault-lines');
121
+ const rings = shadow.querySelector('.rings');
122
+ const list = shadow.querySelector('[data-findings]');
123
+ const rulesSection = shadow.querySelector('[data-rules]');
124
+ const rulesList = rulesSection.querySelector('ol');
125
+ const pagesSection = shadow.querySelector('[data-pages]');
126
+ const pagesList = pagesSection.querySelector('ol');
127
+ const status = shadow.querySelector('[data-status]');
128
+ const title = shadow.querySelector('strong');
129
+ const frames = shadow.querySelector('.frames');
130
+ const linesButton = shadow.querySelector('[data-lines]');
131
+ const setLinesOnly = (enabled) => { panel.toggleAttribute('data-lines-only', enabled); linesButton.textContent = enabled ? 'Results' : 'Lines'; };
132
+ linesButton.addEventListener('click', () => setLinesOnly(!panel.hasAttribute('data-lines-only')));
133
+ const siteButton = shadow.querySelector('[data-site]');
134
+ let site = null;
135
+ let findings = [];
136
+ let current = -1;
137
+ let frame = 0;
138
+ const place = () => {
139
+ frame = 0;
140
+ paintFaultLines(document, faultLines);
141
+ rings.replaceChildren(...findings.map(({ element }, index) => {
142
+ const rect = element.getBoundingClientRect();
143
+ const ring = document.createElement('div');
144
+ ring.className = 'ring';
145
+ ring.toggleAttribute('data-current', index === current);
146
+ ring.style.cssText = `left:${rect.left}px;top:${rect.top}px;width:${rect.width}px;height:${rect.height}px`;
147
+ const number = document.createElement('span');
148
+ number.textContent = String(index + 1);
149
+ ring.appendChild(number);
150
+ return ring;
151
+ }));
152
+ };
153
+ const schedule = () => { if (!frame)
154
+ frame = requestAnimationFrame(place); };
155
+ const layoutChanges = new MutationObserver(schedule);
156
+ const sizeChanges = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(schedule);
157
+ const stopSite = () => {
158
+ site?.abort();
159
+ site = null;
160
+ siteButton.textContent = 'Site';
161
+ };
162
+ /** What each rule measured and kept, over `total` page views (one: this page). */
163
+ const showRules = (summaries, total) => {
164
+ rulesSection.hidden = false;
165
+ rulesList.replaceChildren(...summaries.map(summary => {
166
+ const item = document.createElement('li');
167
+ item.className = 'rule-row';
168
+ const box = document.createElement('div');
169
+ const code = document.createElement('span');
170
+ code.className = 'code';
171
+ code.textContent = summary.constraint.code;
172
+ const line = document.createElement('p');
173
+ line.textContent = ruleLine(summary, total);
174
+ const rule = document.createElement('p');
175
+ rule.className = 'rule';
176
+ rule.textContent = summary.constraint.rule;
177
+ for (const part of [code, line, rule])
178
+ box.appendChild(part);
179
+ item.appendChild(box);
180
+ return item;
181
+ }));
182
+ };
183
+ /** Every page the Site check opened, a row each: kept at every width, or how much it broke and where. */
184
+ const showPages = (results) => {
185
+ const pages = summarizePages(results);
186
+ pagesSection.hidden = !pages.length;
187
+ pagesList.replaceChildren(...pages.map(({ url, widths }) => {
188
+ const item = document.createElement('li');
189
+ item.className = 'page-row';
190
+ const link = document.createElement('a');
191
+ const address = new URL(url);
192
+ address.searchParams.set('constraints', '1');
193
+ link.href = address.href;
194
+ const path = document.createElement('span');
195
+ path.className = 'page';
196
+ path.textContent = decodeURI(new URL(url).pathname);
197
+ const state = document.createElement('span');
198
+ const failed = widths.filter(width => width.broken || width.error);
199
+ state.className = failed.length ? 'broke' : 'kept';
200
+ state.textContent = failed.length
201
+ ? failed.map(({ width, broken, error }) => (error ? `${width}px not checked` : `${broken} at ${width}px`)).join(', ')
202
+ : `kept at ${widths.length} widths`;
203
+ link.appendChild(path);
204
+ link.appendChild(state);
205
+ item.appendChild(link);
206
+ return item;
207
+ }));
208
+ };
209
+ const run = () => {
210
+ stopSite();
211
+ const measured = measureConstraints(document);
212
+ findings = measured.flatMap(({ constraint, findings: found }) => found.map(finding => ({ ...finding, constraint })));
213
+ showRules(measured.map(({ constraint, measured: count, findings: found }) => ({ constraint, measured: count, views: count ? 1 : 0, broken: found.length })), 1);
214
+ pagesSection.hidden = true;
215
+ current = -1;
216
+ title.textContent = findings.length ? `Constraints · ${findings.length} broken` : 'Constraints';
217
+ status.textContent = findings.length ? `This page at ${Math.round(document.documentElement.clientWidth)}px.` : 'This page keeps every constraint.';
218
+ list.replaceChildren(...findings.map(({ constraint, message, element }, index) => {
219
+ const item = document.createElement('li');
220
+ const button = document.createElement('button');
221
+ button.type = 'button';
222
+ const code = document.createElement('span');
223
+ code.className = 'code';
224
+ const number = document.createElement('b');
225
+ number.textContent = String(index + 1);
226
+ code.appendChild(number);
227
+ code.appendChild(document.createTextNode(constraint.code));
228
+ const what = document.createElement('p');
229
+ what.textContent = message;
230
+ const rule = document.createElement('p');
231
+ rule.className = 'rule';
232
+ rule.textContent = constraint.rule;
233
+ for (const part of [code, what, rule])
234
+ button.appendChild(part);
235
+ button.addEventListener('click', () => {
236
+ current = index;
237
+ element.scrollIntoView({ block: 'center', behavior: 'smooth' });
238
+ schedule();
239
+ });
240
+ item.appendChild(button);
241
+ return item;
242
+ }));
243
+ place();
244
+ };
245
+ /** One broken rule on another page: its number, code and width, what is wrong, and a link to the page. */
246
+ const siteItem = (index, { url, width }, code, message, detail) => {
247
+ const item = document.createElement('li');
248
+ const link = document.createElement('a');
249
+ const address = new URL(url);
250
+ address.searchParams.set('constraints', '1');
251
+ link.href = address.href;
252
+ const head = document.createElement('span');
253
+ head.className = 'code';
254
+ const number = document.createElement('b');
255
+ number.textContent = String(index);
256
+ head.appendChild(number);
257
+ head.appendChild(document.createTextNode(`${code} · ${width}px`));
258
+ const what = document.createElement('p');
259
+ what.textContent = message;
260
+ const page = document.createElement('p');
261
+ page.className = 'page';
262
+ page.textContent = decodeURI(new URL(url).pathname);
263
+ const element = document.createElement('p');
264
+ element.className = 'element';
265
+ element.textContent = detail;
266
+ for (const part of [head, what, page, element])
267
+ link.appendChild(part);
268
+ item.appendChild(link);
269
+ return item;
270
+ };
271
+ /** Every page of the site at every phone width, listed as each comes in. */
272
+ const runSite = async () => {
273
+ if (site) {
274
+ stopSite();
275
+ status.textContent = 'Stopped.';
276
+ return;
277
+ }
278
+ const controller = new AbortController();
279
+ site = controller;
280
+ siteButton.textContent = 'Stop';
281
+ findings = [];
282
+ current = -1;
283
+ place();
284
+ list.replaceChildren();
285
+ rulesSection.hidden = true;
286
+ pagesSection.hidden = true;
287
+ title.textContent = 'Constraints';
288
+ status.textContent = 'Finding the pages…';
289
+ const pages = await findSitePages();
290
+ const widths = `${VIEWPORT_WIDTHS.slice(0, -1).join(', ')} and ${VIEWPORT_WIDTHS[VIEWPORT_WIDTHS.length - 1]}px`;
291
+ let broken = 0;
292
+ const results = await checkSite({
293
+ pages,
294
+ inspect: (url, widths) => inspectInFrame(frames, url, widths),
295
+ signal: controller.signal,
296
+ onResult(result, done, total) {
297
+ const found = result.error ? [{ code: 'page', message: `It could not be checked: ${result.error}.`, element: '' }] : result.findings;
298
+ for (const { code, message, element } of found)
299
+ list.appendChild(siteItem(++broken, result, code, message, element));
300
+ title.textContent = broken ? `Constraints · ${broken} broken` : 'Constraints';
301
+ status.textContent = `Checking ${done} of ${total}: ${pages.length} pages at ${widths}…`;
302
+ },
303
+ });
304
+ if (controller.signal.aborted)
305
+ return;
306
+ showRules(summarizeRules(results), results.length);
307
+ showPages(results);
308
+ site = null;
309
+ siteButton.textContent = 'Site';
310
+ status.textContent = broken
311
+ ? `${pages.length} pages at ${widths}: ${broken} broken.`
312
+ : `Every page keeps every constraint at ${widths} (${results.length} checks).`;
313
+ };
314
+ const show = (mode = 'page') => {
315
+ if (!panel.isConnected)
316
+ document.body.appendChild(panel);
317
+ panel.hidden = false;
318
+ setLinesOnly(window.innerWidth < 640);
319
+ if (mode === 'site')
320
+ void runSite();
321
+ else
322
+ run();
323
+ layoutChanges.observe(document.body, { subtree: true, childList: true, attributes: true, attributeFilter: ['style', 'class', 'hidden', 'data-ds-fault-lines', 'data-ds-fault-axis'] });
324
+ sizeChanges?.observe(document.body);
325
+ window.addEventListener('scroll', schedule, { passive: true, capture: true });
326
+ window.addEventListener('resize', schedule);
327
+ };
328
+ const hide = () => {
329
+ stopSite();
330
+ panel.hidden = true;
331
+ if (frame)
332
+ cancelAnimationFrame(frame);
333
+ frame = 0;
334
+ faultLines.replaceChildren();
335
+ layoutChanges.disconnect();
336
+ sizeChanges?.disconnect();
337
+ window.removeEventListener('scroll', schedule, { capture: true });
338
+ window.removeEventListener('resize', schedule);
339
+ };
340
+ shadow.querySelector('[data-run]').addEventListener('click', run);
341
+ siteButton.addEventListener('click', () => void runSite());
342
+ shadow.querySelector('[data-close]').addEventListener('click', hide);
343
+ return {
344
+ show,
345
+ hide,
346
+ run,
347
+ runSite,
348
+ toggle: () => (panel.hidden ? show() : hide()),
349
+ get findings() { return findings; },
350
+ };
351
+ }
352
+ /** The device switch a site without sign-in has instead: `?ds-owner=on` once in a browser, `?ds-owner=off` to forget it. */
353
+ export const OWNER_DEVICE_KEY = 'ds-owner';
354
+ /** Takes `?ds-owner=on` or `off` from the address into this browser's storage for the site. */
355
+ function rememberOwnerDevice() {
356
+ const asked = new URLSearchParams(window.location.search).get('ds-owner');
357
+ if (asked !== 'on' && asked !== 'off')
358
+ return;
359
+ try {
360
+ if (asked === 'on')
361
+ localStorage.setItem(OWNER_DEVICE_KEY, 'on');
362
+ else
363
+ localStorage.removeItem(OWNER_DEVICE_KEY);
364
+ }
365
+ catch { /* Storage blocked: the switch lasts this page alone. */ }
366
+ }
367
+ /** A browser switched on as the owner's with `?ds-owner=on`. */
368
+ const isOwnerDevice = () => {
369
+ try {
370
+ return localStorage.getItem(OWNER_DEVICE_KEY) === 'on';
371
+ }
372
+ catch {
373
+ return false;
374
+ }
375
+ };
376
+ /**
377
+ * Whether the viewer owns the page: `<html data-ds-owner>`, which a site with
378
+ * sign-in sets from its own server-checked owner, or a browser switched on as
379
+ * the owner's (`?ds-owner=on`) on a site without sign-in.
380
+ */
381
+ export const isPageOwner = () => document.documentElement.hasAttribute('data-ds-owner') || isOwnerDevice()
382
+ || new URLSearchParams(window.location.search).get('ds-owner') === 'on';
383
+ /** What the address asks the panel to show on load: `?constraints=1` this page, `?constraints=site` every page. */
384
+ export function askedConstraints(search = window.location.search) {
385
+ const asked = new URLSearchParams(search).get('constraints');
386
+ if (asked === 'site')
387
+ return 'site';
388
+ return asked === '1' || asked === 'page' || asked === '' ? 'page' : null;
389
+ }
390
+ /**
391
+ * Five presses of C toggle the constraint panel, for the page's owner only
392
+ * (`isPageOwner`): for anyone else the presses do nothing. `?constraints=1` in
393
+ * the address opens it for anyone once the page has loaded, since it only
394
+ * measures; `?constraints=site` opens it on the whole site's check. Escape
395
+ * hides it. Presses typed into a field, with a modifier or held down never
396
+ * count, and any other key starts the count again.
397
+ */
398
+ export function initConstraintShortcut() {
399
+ if (typeof document === 'undefined')
400
+ return;
401
+ const root = document.documentElement;
402
+ if (root.hasAttribute('data-ds-constraints-ready'))
403
+ return;
404
+ root.setAttribute('data-ds-constraints-ready', '');
405
+ rememberOwnerDevice();
406
+ let panel = null;
407
+ const open = () => (panel ?? (panel = createConstraintPanel()));
408
+ const asked = askedConstraints();
409
+ // Not in a frame of the site's own check, and only once the page and its pictures have drawn.
410
+ if (asked && window.parent === window) {
411
+ if (document.readyState === 'complete')
412
+ open().show(asked);
413
+ else
414
+ window.addEventListener('load', () => open().show(asked), { once: true });
415
+ }
416
+ let presses = 0;
417
+ let lastPress = 0;
418
+ const reset = () => { presses = 0; };
419
+ window.addEventListener('blur', reset);
420
+ window.addEventListener('keydown', (event) => {
421
+ const editing = document.designMode === 'on' || event.composedPath().some(target => target instanceof HTMLElement && (target.isContentEditable || target.matches('input, textarea, select, [role="textbox"], [role="combobox"]')));
422
+ if (editing || event.defaultPrevented || event.isComposing || event.repeat || event.metaKey || event.ctrlKey || event.altKey) {
423
+ reset();
424
+ return;
425
+ }
426
+ if (event.key === 'Escape')
427
+ panel?.hide();
428
+ if (event.key.toLowerCase() !== 'c') {
429
+ reset();
430
+ return;
431
+ }
432
+ const now = performance.now();
433
+ presses = now - lastPress <= 800 ? presses + 1 : 1;
434
+ lastPress = now;
435
+ if (presses === CONSTRAINT_PRESSES) {
436
+ reset();
437
+ if (isPageOwner())
438
+ open().toggle();
439
+ else
440
+ panel?.hide();
441
+ }
442
+ });
443
+ }
444
+ if (typeof document !== 'undefined') {
445
+ if (document.readyState === 'loading') {
446
+ document.addEventListener('DOMContentLoaded', initConstraintShortcut, { once: true });
447
+ }
448
+ else {
449
+ initConstraintShortcut();
450
+ }
451
+ }
@@ -0,0 +1,73 @@
1
+ import { type Constraint } from './constraints';
2
+ /** The narrowest phone still sold, the common ones and the widest. */
3
+ export declare const PHONE_WIDTHS: number[];
4
+ export declare const VIEWPORT_WIDTHS: number[];
5
+ /** Pages checked side by side, each in its own frame. */
6
+ export declare const PAGES_AT_ONCE = 3;
7
+ /** A rule broken on a page at a width, said in words, since the element stays in its frame. */
8
+ export type SiteFinding = {
9
+ code: string;
10
+ rule: string;
11
+ message: string;
12
+ element: string;
13
+ review?: boolean;
14
+ };
15
+ /** What one page at one width kept and broke: each rule's count of what it measured, and its findings. */
16
+ export type PageCheck = {
17
+ findings: SiteFinding[];
18
+ measured: Record<string, number>;
19
+ };
20
+ export type PageResult = PageCheck & {
21
+ url: string;
22
+ width: number;
23
+ error?: string;
24
+ };
25
+ /** An element as a person finds it: its tag, id and classes, and the start of its words. */
26
+ export declare function describeElement(element: Element): string;
27
+ /** The pages a sitemap lists on the site's own origin, in its order and once each; none when it lists none. */
28
+ export declare function sitemapPages(xml: string, origin: string): string[];
29
+ /** The site's pages: its sitemap's, or else the page itself and every page it links to on the site. */
30
+ export declare function findSitePages(page?: Document): Promise<string[]>;
31
+ /**
32
+ * Opens a page once in a frame inside `host`, then makes the frame as wide as each width in turn, draws
33
+ * the page at that width's phone scale, and returns what every rule measured and found at each, in the
34
+ * order of `widths`. The page reflows at each width without loading again. The address carries `ph=out`,
35
+ * the analytics opt-out most trackers honour, so the check counts no visits.
36
+ */
37
+ export declare function inspectInFrame(host: Element | ShadowRoot, url: string, widths?: number[], height?: number): Promise<PageCheck[]>;
38
+ /** Every rule on a page: what it measured, and each place it is broken, said in words. */
39
+ export declare function checkPage(page: ParentNode): PageCheck;
40
+ /**
41
+ * Checks every page at every width, `PAGES_AT_ONCE` pages side by side, and reports each page's result at
42
+ * each width as it comes. Stops starting pages when `signal` aborts. Whatever the pages store in this
43
+ * browser while they are checked is put back afterwards.
44
+ */
45
+ export declare function checkSite({ pages, widths, inspect, onResult, signal, atOnce }: {
46
+ pages: string[];
47
+ widths?: number[];
48
+ /** One page at every width, in the order of `widths`. */
49
+ inspect: (url: string, widths: number[]) => Promise<PageCheck[]>;
50
+ onResult: (result: PageResult, done: number, total: number) => void;
51
+ signal?: AbortSignal;
52
+ atOnce?: number;
53
+ }): Promise<PageResult[]>;
54
+ /** A rule over a check: how many things it measured, on how many of the page views, and how often it broke. */
55
+ export type RuleSummary = {
56
+ constraint: Constraint;
57
+ measured: number;
58
+ views: number;
59
+ broken: number;
60
+ };
61
+ export declare function summarizeRules(results: PageCheck[]): RuleSummary[];
62
+ /** What a rule did, in a sentence: kept, broken, or nothing on the pages for it to measure. `views` is how many page views were checked; one is this page. */
63
+ export declare function ruleLine({ constraint, measured, views, broken }: RuleSummary, total: number): string;
64
+ /** Every page checked, in the order checked, with how much it broke at each width. */
65
+ export declare function summarizePages(results: PageResult[]): {
66
+ url: string;
67
+ widths: {
68
+ width: number;
69
+ broken: number;
70
+ error?: string;
71
+ }[];
72
+ }[];
73
+ //# sourceMappingURL=constraint-site.d.ts.map