@0001-labs/design-system-1 0.3.0-alpha.27 → 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 (777) 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/library-tokens.ts +1 -2
  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 +14 -7
  60. package/DS1/1-root/palette.ts +3 -3
  61. package/DS1/1-root/progress.css +9 -1
  62. package/DS1/1-root/row.css +68 -2
  63. package/DS1/1-root/table.css +47 -4
  64. package/DS1/1-root/text.css +26 -0
  65. package/DS1/2-core/button-split.ts +10 -5
  66. package/DS1/2-core/chart/chart.css +71 -2
  67. package/DS1/2-core/chart/grid-chart.ts +2 -1
  68. package/DS1/2-core/ds-activity.ts +32 -0
  69. package/DS1/2-core/ds-app-chrome.ts +1 -0
  70. package/DS1/2-core/ds-avatar.ts +35 -6
  71. package/DS1/2-core/ds-badge.ts +8 -1
  72. package/DS1/2-core/ds-button.ts +7 -1
  73. package/DS1/2-core/ds-chart.ts +184 -49
  74. package/DS1/2-core/ds-cycle.ts +27 -186
  75. package/DS1/2-core/ds-device-bezel.ts +1 -0
  76. package/DS1/2-core/ds-empty.ts +6 -4
  77. package/DS1/2-core/ds-input.ts +23 -3
  78. package/DS1/2-core/ds-message.ts +22 -0
  79. package/DS1/2-core/ds-number.ts +349 -0
  80. package/DS1/2-core/ds-progress.ts +3 -0
  81. package/DS1/2-core/ds-radio.ts +3 -0
  82. package/DS1/2-core/ds-stat.ts +3 -0
  83. package/DS1/2-core/ds-switch.ts +5 -1
  84. package/DS1/2-core/ds-tag.ts +9 -2
  85. package/DS1/2-core/ds-text.ts +7 -0
  86. package/DS1/2-core/ds-token.ts +3 -0
  87. package/DS1/2-core/ds-tooltip.ts +17 -2
  88. package/DS1/2-core/ds-window.ts +1 -0
  89. package/DS1/2-core/generated/ds-icon-map.ts +47 -5
  90. package/DS1/2-core/generated/icons-extra.ts +24 -3
  91. package/DS1/2-core/generated/icons-immediate.ts +3 -3
  92. package/DS1/2-core/number-expression.ts +64 -0
  93. package/DS1/2-core/styles/ds-activity.css +16 -0
  94. package/DS1/2-core/styles/ds-badge.css +4 -1
  95. package/DS1/2-core/styles/ds-button-host.css +45 -12
  96. package/DS1/2-core/styles/ds-button-split.css +8 -0
  97. package/DS1/2-core/styles/ds-button.css +92 -19
  98. package/DS1/2-core/styles/ds-card.css +6 -0
  99. package/DS1/2-core/styles/ds-checkbox.css +20 -8
  100. package/DS1/2-core/styles/ds-image.css +2 -1
  101. package/DS1/2-core/styles/ds-input.css +37 -4
  102. package/DS1/2-core/styles/ds-number.css +127 -0
  103. package/DS1/2-core/styles/ds-radio.css +4 -1
  104. package/DS1/2-core/styles/ds-switch.css +34 -4
  105. package/DS1/2-core/styles/ds-tag.css +32 -5
  106. package/DS1/2-core/styles/ds-text.css +13 -4
  107. package/DS1/2-core/styles/ds-token.css +4 -1
  108. package/DS1/2-core/styles/ds-tooltip.css +13 -7
  109. package/DS1/3-unit/calendar-base.ts +5 -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 +45 -10
  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-tabs.ts +40 -2
  122. package/DS1/3-unit/styles/ds-calendar.css +356 -42
  123. package/DS1/3-unit/styles/ds-context.css +38 -0
  124. package/DS1/3-unit/styles/ds-list.css +26 -1
  125. package/DS1/3-unit/styles/ds-matrix.css +4 -1
  126. package/DS1/3-unit/styles/ds-row.css +39 -0
  127. package/DS1/3-unit/styles/ds-select.css +22 -12
  128. package/DS1/3-unit/styles/ds-sidebar.css +16 -2
  129. package/DS1/3-unit/styles/ds-table-of-contents.css +40 -0
  130. package/DS1/3-unit/styles/ds-tabs.css +95 -0
  131. package/DS1/4-page/ds-document.ts +3 -0
  132. package/DS1/4-page/ds-footer.ts +93 -18
  133. package/DS1/4-page/ds-header.ts +5 -1
  134. package/DS1/4-page/ds-overlay.ts +8 -3
  135. package/DS1/4-page/ds-page.ts +22 -1
  136. package/DS1/4-page/email.ts +7 -4
  137. package/DS1/4-page/styles/ds-container.css +0 -1
  138. package/DS1/4-page/styles/ds-overlay.css +7 -0
  139. package/DS1/4-page/styles/ds-page.css +10 -0
  140. package/DS1/5-visual-kit/app-chrome.ts +129 -0
  141. package/DS1/5-visual-kit/bezels.ts +394 -0
  142. package/DS1/5-visual-kit/browser-icons.LICENSE +53 -0
  143. package/DS1/5-visual-kit/browser-icons.ts +47 -0
  144. package/DS1/5-visual-kit/browser-styles.ts +53 -0
  145. package/DS1/5-visual-kit/device-bezel.ts +55 -0
  146. package/DS1/5-visual-kit/instagram-frame.ts +15 -0
  147. package/DS1/5-visual-kit/instagram.ts +41 -0
  148. package/DS1/5-visual-kit/mobile-chrome.ts +25 -0
  149. package/DS1/5-visual-kit/native-icon-paths.ts +145 -0
  150. package/DS1/5-visual-kit/window.ts +22 -0
  151. package/DS1/components.ts +1 -0
  152. package/DS1/index.ts +14 -1
  153. package/DS1/react/choice.ts +4 -2
  154. package/DS1/react/context.ts +11 -6
  155. package/DS1/react/empty.ts +2 -2
  156. package/DS1/react/footer.ts +5 -5
  157. package/DS1/react/header.ts +1 -1
  158. package/DS1/react/message.ts +4 -2
  159. package/DS1/react/number.ts +53 -0
  160. package/DS1/react/sidebar.ts +4 -2
  161. package/DS1/react/table-of-contents.ts +28 -0
  162. package/DS1/x-flag/LICENSE.md +26 -0
  163. package/DS1/x-flag/ac.svg +1 -0
  164. package/DS1/x-flag/ad.svg +1 -0
  165. package/DS1/x-flag/ae.svg +1 -0
  166. package/DS1/x-flag/af.svg +1 -0
  167. package/DS1/x-flag/ag.svg +1 -0
  168. package/DS1/x-flag/ai.svg +1 -0
  169. package/DS1/x-flag/al.svg +1 -0
  170. package/DS1/x-flag/am.svg +1 -0
  171. package/DS1/x-flag/ao.svg +1 -0
  172. package/DS1/x-flag/aq.svg +1 -0
  173. package/DS1/x-flag/ar.svg +1 -0
  174. package/DS1/x-flag/as.svg +1 -0
  175. package/DS1/x-flag/at.svg +1 -0
  176. package/DS1/x-flag/au.svg +1 -0
  177. package/DS1/x-flag/aw.svg +1 -0
  178. package/DS1/x-flag/ax.svg +1 -0
  179. package/DS1/x-flag/az.svg +1 -0
  180. package/DS1/x-flag/ba.svg +1 -0
  181. package/DS1/x-flag/bb.svg +1 -0
  182. package/DS1/x-flag/bd.svg +1 -0
  183. package/DS1/x-flag/be.svg +1 -0
  184. package/DS1/x-flag/bf.svg +1 -0
  185. package/DS1/x-flag/bg.svg +1 -0
  186. package/DS1/x-flag/bh.svg +1 -0
  187. package/DS1/x-flag/bi.svg +1 -0
  188. package/DS1/x-flag/bj.svg +1 -0
  189. package/DS1/x-flag/bl.svg +1 -0
  190. package/DS1/x-flag/bm.svg +1 -0
  191. package/DS1/x-flag/bn.svg +1 -0
  192. package/DS1/x-flag/bo.svg +1 -0
  193. package/DS1/x-flag/bq-bo.svg +1 -0
  194. package/DS1/x-flag/bq-sa.svg +1 -0
  195. package/DS1/x-flag/bq-se.svg +1 -0
  196. package/DS1/x-flag/bq.svg +1 -0
  197. package/DS1/x-flag/br.svg +1 -0
  198. package/DS1/x-flag/bs.svg +1 -0
  199. package/DS1/x-flag/bt.svg +1 -0
  200. package/DS1/x-flag/bv.svg +1 -0
  201. package/DS1/x-flag/bw.svg +1 -0
  202. package/DS1/x-flag/by.svg +1 -0
  203. package/DS1/x-flag/bz.svg +1 -0
  204. package/DS1/x-flag/ca.svg +1 -0
  205. package/DS1/x-flag/cc.svg +1 -0
  206. package/DS1/x-flag/cd.svg +1 -0
  207. package/DS1/x-flag/cf.svg +1 -0
  208. package/DS1/x-flag/cg.svg +1 -0
  209. package/DS1/x-flag/ch.svg +1 -0
  210. package/DS1/x-flag/ci.svg +1 -0
  211. package/DS1/x-flag/ck.svg +1 -0
  212. package/DS1/x-flag/cl.svg +1 -0
  213. package/DS1/x-flag/cm.svg +1 -0
  214. package/DS1/x-flag/cn.svg +1 -0
  215. package/DS1/x-flag/co.svg +1 -0
  216. package/DS1/x-flag/cr.svg +1 -0
  217. package/DS1/x-flag/cu.svg +1 -0
  218. package/DS1/x-flag/cv.svg +1 -0
  219. package/DS1/x-flag/cw.svg +1 -0
  220. package/DS1/x-flag/cx.svg +1 -0
  221. package/DS1/x-flag/cy.svg +1 -0
  222. package/DS1/x-flag/cz.svg +1 -0
  223. package/DS1/x-flag/de.svg +1 -0
  224. package/DS1/x-flag/dj.svg +1 -0
  225. package/DS1/x-flag/dk.svg +1 -0
  226. package/DS1/x-flag/dm.svg +1 -0
  227. package/DS1/x-flag/do.svg +1 -0
  228. package/DS1/x-flag/dz.svg +1 -0
  229. package/DS1/x-flag/ec.svg +1 -0
  230. package/DS1/x-flag/ee.svg +1 -0
  231. package/DS1/x-flag/eg.svg +1 -0
  232. package/DS1/x-flag/eh.svg +1 -0
  233. package/DS1/x-flag/er.svg +1 -0
  234. package/DS1/x-flag/es-ct.svg +1 -0
  235. package/DS1/x-flag/es.svg +1 -0
  236. package/DS1/x-flag/et.svg +1 -0
  237. package/DS1/x-flag/eu.svg +1 -0
  238. package/DS1/x-flag/fi.svg +1 -0
  239. package/DS1/x-flag/fj.svg +1 -0
  240. package/DS1/x-flag/fk.svg +1 -0
  241. package/DS1/x-flag/fm.svg +1 -0
  242. package/DS1/x-flag/fo.svg +1 -0
  243. package/DS1/x-flag/fr.svg +1 -0
  244. package/DS1/x-flag/ga.svg +1 -0
  245. package/DS1/x-flag/gb-eng.svg +1 -0
  246. package/DS1/x-flag/gb-nir.svg +1 -0
  247. package/DS1/x-flag/gb-sct.svg +1 -0
  248. package/DS1/x-flag/gb-wls.svg +1 -0
  249. package/DS1/x-flag/gb.svg +1 -0
  250. package/DS1/x-flag/gd.svg +1 -0
  251. package/DS1/x-flag/ge.svg +1 -0
  252. package/DS1/x-flag/gf.svg +1 -0
  253. package/DS1/x-flag/gg.svg +1 -0
  254. package/DS1/x-flag/gh.svg +1 -0
  255. package/DS1/x-flag/gi.svg +1 -0
  256. package/DS1/x-flag/gl.svg +1 -0
  257. package/DS1/x-flag/gm.svg +1 -0
  258. package/DS1/x-flag/gn.svg +1 -0
  259. package/DS1/x-flag/gp.svg +1 -0
  260. package/DS1/x-flag/gq.svg +1 -0
  261. package/DS1/x-flag/gr.svg +1 -0
  262. package/DS1/x-flag/gs.svg +1 -0
  263. package/DS1/x-flag/gt.svg +1 -0
  264. package/DS1/x-flag/gu.svg +1 -0
  265. package/DS1/x-flag/gw.svg +1 -0
  266. package/DS1/x-flag/gy.svg +1 -0
  267. package/DS1/x-flag/hk.svg +1 -0
  268. package/DS1/x-flag/hm.svg +1 -0
  269. package/DS1/x-flag/hn.svg +1 -0
  270. package/DS1/x-flag/hr.svg +1 -0
  271. package/DS1/x-flag/ht.svg +1 -0
  272. package/DS1/x-flag/hu.svg +1 -0
  273. package/DS1/x-flag/ic.svg +1 -0
  274. package/DS1/x-flag/id.svg +1 -0
  275. package/DS1/x-flag/ie.svg +1 -0
  276. package/DS1/x-flag/il.svg +1 -0
  277. package/DS1/x-flag/im.svg +1 -0
  278. package/DS1/x-flag/in.svg +1 -0
  279. package/DS1/x-flag/io.svg +1 -0
  280. package/DS1/x-flag/iq.svg +1 -0
  281. package/DS1/x-flag/ir.svg +1 -0
  282. package/DS1/x-flag/is.svg +1 -0
  283. package/DS1/x-flag/it.svg +1 -0
  284. package/DS1/x-flag/je.svg +1 -0
  285. package/DS1/x-flag/jm.svg +1 -0
  286. package/DS1/x-flag/jo.svg +1 -0
  287. package/DS1/x-flag/jp.svg +1 -0
  288. package/DS1/x-flag/ke.svg +1 -0
  289. package/DS1/x-flag/kg.svg +1 -0
  290. package/DS1/x-flag/kh.svg +1 -0
  291. package/DS1/x-flag/ki.svg +1 -0
  292. package/DS1/x-flag/km.svg +1 -0
  293. package/DS1/x-flag/kn.svg +1 -0
  294. package/DS1/x-flag/kp.svg +1 -0
  295. package/DS1/x-flag/kr.svg +1 -0
  296. package/DS1/x-flag/kw.svg +1 -0
  297. package/DS1/x-flag/ky.svg +1 -0
  298. package/DS1/x-flag/kz.svg +1 -0
  299. package/DS1/x-flag/la.svg +1 -0
  300. package/DS1/x-flag/lb.svg +1 -0
  301. package/DS1/x-flag/lc.svg +1 -0
  302. package/DS1/x-flag/li.svg +1 -0
  303. package/DS1/x-flag/lk.svg +1 -0
  304. package/DS1/x-flag/lr.svg +1 -0
  305. package/DS1/x-flag/ls.svg +1 -0
  306. package/DS1/x-flag/lt.svg +1 -0
  307. package/DS1/x-flag/lu.svg +1 -0
  308. package/DS1/x-flag/lv.svg +1 -0
  309. package/DS1/x-flag/ly.svg +1 -0
  310. package/DS1/x-flag/ma.svg +1 -0
  311. package/DS1/x-flag/mc.svg +1 -0
  312. package/DS1/x-flag/md.svg +1 -0
  313. package/DS1/x-flag/me.svg +1 -0
  314. package/DS1/x-flag/mf.svg +1 -0
  315. package/DS1/x-flag/mg.svg +1 -0
  316. package/DS1/x-flag/mh.svg +1 -0
  317. package/DS1/x-flag/mk.svg +1 -0
  318. package/DS1/x-flag/ml.svg +1 -0
  319. package/DS1/x-flag/mm.svg +1 -0
  320. package/DS1/x-flag/mn.svg +1 -0
  321. package/DS1/x-flag/mo.svg +1 -0
  322. package/DS1/x-flag/mp.svg +1 -0
  323. package/DS1/x-flag/mq.svg +1 -0
  324. package/DS1/x-flag/mr.svg +1 -0
  325. package/DS1/x-flag/ms.svg +1 -0
  326. package/DS1/x-flag/mt.svg +1 -0
  327. package/DS1/x-flag/mu.svg +1 -0
  328. package/DS1/x-flag/mv.svg +1 -0
  329. package/DS1/x-flag/mw.svg +1 -0
  330. package/DS1/x-flag/mx.svg +1 -0
  331. package/DS1/x-flag/my.svg +1 -0
  332. package/DS1/x-flag/mz.svg +1 -0
  333. package/DS1/x-flag/na.svg +1 -0
  334. package/DS1/x-flag/nc.svg +1 -0
  335. package/DS1/x-flag/ne.svg +1 -0
  336. package/DS1/x-flag/nf.svg +1 -0
  337. package/DS1/x-flag/ng.svg +1 -0
  338. package/DS1/x-flag/ni.svg +1 -0
  339. package/DS1/x-flag/nl.svg +1 -0
  340. package/DS1/x-flag/no.svg +1 -0
  341. package/DS1/x-flag/np.svg +1 -0
  342. package/DS1/x-flag/nr.svg +1 -0
  343. package/DS1/x-flag/nu.svg +1 -0
  344. package/DS1/x-flag/nz.svg +1 -0
  345. package/DS1/x-flag/om.svg +1 -0
  346. package/DS1/x-flag/pa.svg +1 -0
  347. package/DS1/x-flag/pe.svg +1 -0
  348. package/DS1/x-flag/pf.svg +1 -0
  349. package/DS1/x-flag/pg.svg +1 -0
  350. package/DS1/x-flag/ph.svg +1 -0
  351. package/DS1/x-flag/pk.svg +1 -0
  352. package/DS1/x-flag/pl.svg +1 -0
  353. package/DS1/x-flag/pm.svg +1 -0
  354. package/DS1/x-flag/pn.svg +1 -0
  355. package/DS1/x-flag/pr.svg +1 -0
  356. package/DS1/x-flag/ps.svg +1 -0
  357. package/DS1/x-flag/pt.svg +1 -0
  358. package/DS1/x-flag/pw.svg +1 -0
  359. package/DS1/x-flag/py.svg +1 -0
  360. package/DS1/x-flag/qa.svg +1 -0
  361. package/DS1/x-flag/re.svg +1 -0
  362. package/DS1/x-flag/ro.svg +1 -0
  363. package/DS1/x-flag/rs.svg +1 -0
  364. package/DS1/x-flag/ru.svg +1 -0
  365. package/DS1/x-flag/rw.svg +1 -0
  366. package/DS1/x-flag/sa.svg +1 -0
  367. package/DS1/x-flag/sb.svg +1 -0
  368. package/DS1/x-flag/sc.svg +1 -0
  369. package/DS1/x-flag/sd.svg +1 -0
  370. package/DS1/x-flag/se.svg +1 -0
  371. package/DS1/x-flag/sg.svg +1 -0
  372. package/DS1/x-flag/sh.svg +1 -0
  373. package/DS1/x-flag/si.svg +1 -0
  374. package/DS1/x-flag/sj.svg +1 -0
  375. package/DS1/x-flag/sk.svg +1 -0
  376. package/DS1/x-flag/sl.svg +1 -0
  377. package/DS1/x-flag/sm.svg +1 -0
  378. package/DS1/x-flag/sn.svg +1 -0
  379. package/DS1/x-flag/so.svg +1 -0
  380. package/DS1/x-flag/sr.svg +1 -0
  381. package/DS1/x-flag/ss.svg +1 -0
  382. package/DS1/x-flag/st.svg +1 -0
  383. package/DS1/x-flag/sv.svg +1 -0
  384. package/DS1/x-flag/sx.svg +1 -0
  385. package/DS1/x-flag/sy.svg +1 -0
  386. package/DS1/x-flag/sz.svg +1 -0
  387. package/DS1/x-flag/ta.svg +1 -0
  388. package/DS1/x-flag/tc.svg +1 -0
  389. package/DS1/x-flag/td.svg +1 -0
  390. package/DS1/x-flag/tf.svg +1 -0
  391. package/DS1/x-flag/tg.svg +1 -0
  392. package/DS1/x-flag/th.svg +1 -0
  393. package/DS1/x-flag/tj.svg +1 -0
  394. package/DS1/x-flag/tk.svg +1 -0
  395. package/DS1/x-flag/tl.svg +1 -0
  396. package/DS1/x-flag/tm.svg +1 -0
  397. package/DS1/x-flag/tn.svg +1 -0
  398. package/DS1/x-flag/to.svg +1 -0
  399. package/DS1/x-flag/tr.svg +1 -0
  400. package/DS1/x-flag/tt.svg +1 -0
  401. package/DS1/x-flag/tv.svg +1 -0
  402. package/DS1/x-flag/tw.svg +1 -0
  403. package/DS1/x-flag/tz.svg +1 -0
  404. package/DS1/x-flag/ua.svg +1 -0
  405. package/DS1/x-flag/ug.svg +1 -0
  406. package/DS1/x-flag/um.svg +1 -0
  407. package/DS1/x-flag/us.svg +1 -0
  408. package/DS1/x-flag/uy.svg +1 -0
  409. package/DS1/x-flag/uz.svg +1 -0
  410. package/DS1/x-flag/va.svg +1 -0
  411. package/DS1/x-flag/vc.svg +1 -0
  412. package/DS1/x-flag/ve.svg +1 -0
  413. package/DS1/x-flag/vg.svg +1 -0
  414. package/DS1/x-flag/vi.svg +1 -0
  415. package/DS1/x-flag/vn.svg +1 -0
  416. package/DS1/x-flag/vu.svg +1 -0
  417. package/DS1/x-flag/wf.svg +1 -0
  418. package/DS1/x-flag/ws.svg +1 -0
  419. package/DS1/x-flag/xk.svg +1 -0
  420. package/DS1/x-flag/ye.svg +1 -0
  421. package/DS1/x-flag/yt.svg +1 -0
  422. package/DS1/x-flag/za.svg +1 -0
  423. package/DS1/x-flag/zm.svg +1 -0
  424. package/DS1/x-flag/zw.svg +1 -0
  425. package/DS1/x-icon/android.svg +9 -0
  426. package/DS1/x-icon/arrange-check.svg +1 -1
  427. package/DS1/x-icon/arrange-page.svg +1 -1
  428. package/DS1/x-icon/chrome.svg +7 -0
  429. package/DS1/x-icon/edge-brand.svg +6 -0
  430. package/DS1/x-icon/firefox.svg +4 -0
  431. package/DS1/x-icon/health.svg +3 -0
  432. package/DS1/x-icon/left.svg +2 -3
  433. package/DS1/x-icon/linux.svg +1 -0
  434. package/DS1/x-icon/material.svg +1 -0
  435. package/DS1/x-icon/milestone-planned.svg +3 -0
  436. package/DS1/x-icon/milestone.svg +3 -0
  437. package/DS1/x-icon/more.svg +1 -5
  438. package/DS1/x-icon/network.svg +3 -0
  439. package/DS1/x-icon/opera.svg +4 -0
  440. package/DS1/x-icon/prediction.svg +3 -0
  441. package/DS1/x-icon/priority-high.svg +3 -0
  442. package/DS1/x-icon/priority-low.svg +3 -0
  443. package/DS1/x-icon/priority-medium.svg +3 -0
  444. package/DS1/x-icon/project.svg +3 -0
  445. package/DS1/x-icon/redo.svg +2 -2
  446. package/DS1/x-icon/repeat-small.svg +3 -0
  447. package/DS1/x-icon/safari.svg +4 -0
  448. package/DS1/x-icon/scaling.svg +3 -0
  449. package/DS1/x-icon/tabs.svg +4 -0
  450. package/DS1/x-icon/windows.svg +5 -0
  451. package/README.md +10 -6
  452. package/dist/0-face/button-label.d.ts +5 -0
  453. package/dist/0-face/button-label.d.ts.map +1 -0
  454. package/dist/0-face/button-label.js +31 -0
  455. package/dist/0-face/calendar.d.ts +1 -1
  456. package/dist/0-face/calendar.d.ts.map +1 -1
  457. package/dist/0-face/calendar.js +6 -3
  458. package/dist/0-face/carousel.d.ts +9 -0
  459. package/dist/0-face/carousel.d.ts.map +1 -1
  460. package/dist/0-face/carousel.js +80 -0
  461. package/dist/0-face/constraint-panel.d.ts +43 -0
  462. package/dist/0-face/constraint-panel.d.ts.map +1 -0
  463. package/dist/0-face/constraint-panel.js +429 -0
  464. package/dist/0-face/constraint-site.d.ts +72 -0
  465. package/dist/0-face/constraint-site.d.ts.map +1 -0
  466. package/dist/0-face/constraint-site.js +185 -0
  467. package/dist/0-face/constraints.d.ts +47 -0
  468. package/dist/0-face/constraints.d.ts.map +1 -0
  469. package/dist/0-face/constraints.js +247 -0
  470. package/dist/0-face/copy-text.js +1 -1
  471. package/dist/0-face/cut-fade.d.ts +112 -0
  472. package/dist/0-face/cut-fade.d.ts.map +1 -0
  473. package/dist/0-face/cut-fade.js +274 -0
  474. package/dist/0-face/define.d.ts.map +1 -1
  475. package/dist/0-face/define.js +24 -3
  476. package/dist/0-face/face-correction.d.ts +51 -0
  477. package/dist/0-face/face-correction.d.ts.map +1 -0
  478. package/dist/0-face/face-correction.js +80 -0
  479. package/dist/0-face/failures.d.ts +16 -0
  480. package/dist/0-face/failures.d.ts.map +1 -0
  481. package/dist/0-face/failures.js +21 -0
  482. package/dist/0-face/feedback-overlays.d.ts.map +1 -1
  483. package/dist/0-face/feedback-overlays.js +5 -3
  484. package/dist/0-face/feedback.d.ts +2 -0
  485. package/dist/0-face/feedback.d.ts.map +1 -1
  486. package/dist/0-face/feedback.js +1 -0
  487. package/dist/0-face/focus.d.ts +71 -0
  488. package/dist/0-face/focus.d.ts.map +1 -0
  489. package/dist/0-face/focus.js +196 -0
  490. package/dist/0-face/grid.d.ts +11 -1
  491. package/dist/0-face/grid.d.ts.map +1 -1
  492. package/dist/0-face/grid.js +90 -4
  493. package/dist/0-face/i18n.d.ts.map +1 -1
  494. package/dist/0-face/i18n.js +38 -16
  495. package/dist/0-face/layout-inspector.d.ts +5 -1
  496. package/dist/0-face/layout-inspector.d.ts.map +1 -1
  497. package/dist/0-face/layout-inspector.js +130 -104
  498. package/dist/0-face/preference-options.d.ts +4 -0
  499. package/dist/0-face/preference-options.d.ts.map +1 -1
  500. package/dist/0-face/scaling.d.ts +8 -1
  501. package/dist/0-face/scaling.d.ts.map +1 -1
  502. package/dist/0-face/scaling.js +19 -2
  503. package/dist/0-face/shape.d.ts +35 -0
  504. package/dist/0-face/shape.d.ts.map +1 -0
  505. package/dist/0-face/shape.js +23 -0
  506. package/dist/0-face/text-contrast.d.ts +22 -0
  507. package/dist/0-face/text-contrast.d.ts.map +1 -0
  508. package/dist/0-face/text-contrast.js +178 -0
  509. package/dist/0-face/theme-bootstrap.js +56 -0
  510. package/dist/0-face/toast-queue.d.ts +4 -0
  511. package/dist/0-face/toast-queue.d.ts.map +1 -1
  512. package/dist/0-face/toast-queue.js +4 -1
  513. package/dist/0-face/translations/da.json +10 -1
  514. package/dist/0-face/translations/de.json +10 -1
  515. package/dist/0-face/translations/en.json +10 -1
  516. package/dist/0-face/translations/es.json +10 -1
  517. package/dist/0-face/translations/fi.json +10 -1
  518. package/dist/0-face/translations/fr.json +10 -1
  519. package/dist/0-face/translations/is.json +10 -1
  520. package/dist/0-face/translations/it.json +10 -1
  521. package/dist/0-face/translations/ja.json +10 -1
  522. package/dist/0-face/translations/ko.json +10 -1
  523. package/dist/0-face/translations/nb.json +10 -1
  524. package/dist/0-face/translations/pt-BR.json +10 -1
  525. package/dist/0-face/translations/pt.json +10 -1
  526. package/dist/0-face/translations/sv.json +10 -1
  527. package/dist/0-face/translations/zh.json +10 -1
  528. package/dist/0-face/word-wrap.d.ts +6 -0
  529. package/dist/0-face/word-wrap.d.ts.map +1 -0
  530. package/dist/0-face/word-wrap.js +119 -0
  531. package/dist/1-root/foundation.d.ts +12 -0
  532. package/dist/1-root/foundation.d.ts.map +1 -0
  533. package/dist/1-root/foundation.js +59 -0
  534. package/dist/1-root/library-tokens.d.ts.map +1 -1
  535. package/dist/1-root/library-tokens.js +1 -2
  536. package/dist/1-root/palette.d.ts +2 -2
  537. package/dist/1-root/palette.d.ts.map +1 -1
  538. package/dist/1-root/palette.js +3 -3
  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 +7 -0
  552. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  553. package/dist/2-core/ds-avatar.js +41 -6
  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/ds-calendar.d.ts +197 -4
  622. package/dist/3-unit/ds-calendar.d.ts.map +1 -1
  623. package/dist/3-unit/ds-calendar.js +687 -45
  624. package/dist/3-unit/ds-carousel.d.ts +3 -0
  625. package/dist/3-unit/ds-carousel.d.ts.map +1 -1
  626. package/dist/3-unit/ds-carousel.js +13 -1
  627. package/dist/3-unit/ds-context.d.ts +18 -1
  628. package/dist/3-unit/ds-context.d.ts.map +1 -1
  629. package/dist/3-unit/ds-context.js +37 -1
  630. package/dist/3-unit/ds-form.d.ts +9 -0
  631. package/dist/3-unit/ds-form.d.ts.map +1 -1
  632. package/dist/3-unit/ds-form.js +50 -10
  633. package/dist/3-unit/ds-list.d.ts +20 -1
  634. package/dist/3-unit/ds-list.d.ts.map +1 -1
  635. package/dist/3-unit/ds-list.js +31 -3
  636. package/dist/3-unit/ds-matrix.d.ts +3 -0
  637. package/dist/3-unit/ds-matrix.d.ts.map +1 -1
  638. package/dist/3-unit/ds-matrix.js +3 -0
  639. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  640. package/dist/3-unit/ds-menu.js +17 -1
  641. package/dist/3-unit/ds-row.d.ts +13 -0
  642. package/dist/3-unit/ds-row.d.ts.map +1 -1
  643. package/dist/3-unit/ds-row.js +15 -2
  644. package/dist/3-unit/ds-select.js +1 -1
  645. package/dist/3-unit/ds-sidebar.d.ts +17 -0
  646. package/dist/3-unit/ds-sidebar.d.ts.map +1 -1
  647. package/dist/3-unit/ds-sidebar.js +14 -3
  648. package/dist/3-unit/ds-table-of-contents.d.ts +68 -0
  649. package/dist/3-unit/ds-table-of-contents.d.ts.map +1 -0
  650. package/dist/3-unit/ds-table-of-contents.js +190 -0
  651. package/dist/3-unit/ds-tabs.d.ts +32 -1
  652. package/dist/3-unit/ds-tabs.d.ts.map +1 -1
  653. package/dist/3-unit/ds-tabs.js +39 -1
  654. package/dist/4-page/ds-document.d.ts +3 -0
  655. package/dist/4-page/ds-document.d.ts.map +1 -1
  656. package/dist/4-page/ds-document.js +3 -0
  657. package/dist/4-page/ds-footer.d.ts +47 -7
  658. package/dist/4-page/ds-footer.d.ts.map +1 -1
  659. package/dist/4-page/ds-footer.js +58 -14
  660. package/dist/4-page/ds-header.d.ts +6 -0
  661. package/dist/4-page/ds-header.d.ts.map +1 -1
  662. package/dist/4-page/ds-header.js +4 -1
  663. package/dist/4-page/ds-overlay.d.ts +2 -2
  664. package/dist/4-page/ds-overlay.d.ts.map +1 -1
  665. package/dist/4-page/ds-overlay.js +8 -3
  666. package/dist/4-page/ds-page.d.ts +12 -0
  667. package/dist/4-page/ds-page.d.ts.map +1 -1
  668. package/dist/4-page/ds-page.js +19 -1
  669. package/dist/4-page/email.d.ts +2 -0
  670. package/dist/4-page/email.d.ts.map +1 -1
  671. package/dist/4-page/email.js +5 -4
  672. package/dist/5-visual-kit/app-chrome.d.ts +98 -0
  673. package/dist/5-visual-kit/app-chrome.d.ts.map +1 -0
  674. package/dist/5-visual-kit/app-chrome.js +119 -0
  675. package/dist/5-visual-kit/bezels.d.ts +30 -0
  676. package/dist/5-visual-kit/bezels.d.ts.map +1 -0
  677. package/dist/5-visual-kit/bezels.js +388 -0
  678. package/dist/5-visual-kit/browser-icons.d.ts +5 -0
  679. package/dist/5-visual-kit/browser-icons.d.ts.map +1 -0
  680. package/dist/5-visual-kit/browser-icons.js +51 -0
  681. package/dist/5-visual-kit/browser-styles.d.ts +3 -0
  682. package/dist/5-visual-kit/browser-styles.d.ts.map +1 -0
  683. package/dist/5-visual-kit/browser-styles.js +52 -0
  684. package/dist/5-visual-kit/device-bezel.d.ts +84 -0
  685. package/dist/5-visual-kit/device-bezel.d.ts.map +1 -0
  686. package/dist/5-visual-kit/device-bezel.js +56 -0
  687. package/dist/5-visual-kit/instagram-frame.d.ts +8 -0
  688. package/dist/5-visual-kit/instagram-frame.d.ts.map +1 -0
  689. package/dist/5-visual-kit/instagram-frame.js +13 -0
  690. package/dist/5-visual-kit/instagram.d.ts +18 -0
  691. package/dist/5-visual-kit/instagram.d.ts.map +1 -0
  692. package/dist/5-visual-kit/instagram.js +39 -0
  693. package/dist/5-visual-kit/mobile-chrome.d.ts +4 -0
  694. package/dist/5-visual-kit/mobile-chrome.d.ts.map +1 -0
  695. package/dist/5-visual-kit/mobile-chrome.js +24 -0
  696. package/dist/5-visual-kit/native-icon-paths.d.ts +146 -0
  697. package/dist/5-visual-kit/native-icon-paths.d.ts.map +1 -0
  698. package/dist/5-visual-kit/native-icon-paths.js +145 -0
  699. package/dist/5-visual-kit/window.d.ts +51 -0
  700. package/dist/5-visual-kit/window.d.ts.map +1 -0
  701. package/dist/5-visual-kit/window.js +20 -0
  702. package/dist/browser-icons-BFbS1tIx.js +56 -0
  703. package/dist/browser-icons-BFbS1tIx.js.map +1 -0
  704. package/dist/browser-icons-CT8qU77Z.js +48 -0
  705. package/dist/browser-icons-CT8qU77Z.js.map +1 -0
  706. package/dist/components.d.ts +1 -0
  707. package/dist/components.d.ts.map +1 -1
  708. package/dist/components.js +1 -0
  709. package/dist/design-system-1.bundle.js +5505 -2068
  710. package/dist/design-system-1.bundle.js.map +1 -1
  711. package/dist/design-system-1.bundle.min.js +7026 -4628
  712. package/dist/design-system-1.bundle.min.js.map +1 -1
  713. package/dist/design-system-1.css +1 -1
  714. package/dist/feedback.js +197 -167
  715. package/dist/feedback.js.map +1 -1
  716. package/dist/{icons-extra-CRxxWFjX.js → icons-extra-BMPvmQPI.js} +25 -4
  717. package/dist/icons-extra-BMPvmQPI.js.map +1 -0
  718. package/dist/{icons-extra-H5pqCM_R.js → icons-extra-BfYOw-cR.js} +83 -5
  719. package/dist/icons-extra-BfYOw-cR.js.map +1 -0
  720. package/dist/index.d.ts +12 -1
  721. package/dist/index.d.ts.map +1 -1
  722. package/dist/index.js +11 -1
  723. package/dist/instagram-CKofs55A.js +50 -0
  724. package/dist/instagram-CKofs55A.js.map +1 -0
  725. package/dist/instagram-CcYf5oiM.js +48 -0
  726. package/dist/instagram-CcYf5oiM.js.map +1 -0
  727. package/dist/lit-Ce_uWYM4.js +612 -0
  728. package/dist/lit-Ce_uWYM4.js.map +1 -0
  729. package/dist/lit-DGUVm1Ce.js +557 -0
  730. package/dist/lit-DGUVm1Ce.js.map +1 -0
  731. package/dist/native-icon-paths-CB9evXBM.js +93 -0
  732. package/dist/native-icon-paths-CB9evXBM.js.map +1 -0
  733. package/dist/native-icon-paths-zay-3g_n.js +150 -0
  734. package/dist/native-icon-paths-zay-3g_n.js.map +1 -0
  735. package/dist/react/avatar.d.ts +1 -1
  736. package/dist/react/choice.d.ts +4 -0
  737. package/dist/react/choice.d.ts.map +1 -1
  738. package/dist/react/choice.js +2 -2
  739. package/dist/react/context.d.ts +19 -4
  740. package/dist/react/context.d.ts.map +1 -1
  741. package/dist/react/context.js +4 -4
  742. package/dist/react/empty.d.ts +2 -2
  743. package/dist/react/empty.d.ts.map +1 -1
  744. package/dist/react/empty.js +1 -1
  745. package/dist/react/footer.d.ts +5 -5
  746. package/dist/react/footer.d.ts.map +1 -1
  747. package/dist/react/footer.js +2 -2
  748. package/dist/react/header.d.ts +2 -2
  749. package/dist/react/header.d.ts.map +1 -1
  750. package/dist/react/message.d.ts +4 -0
  751. package/dist/react/message.d.ts.map +1 -1
  752. package/dist/react/message.js +2 -2
  753. package/dist/react/number.d.ts +53 -0
  754. package/dist/react/number.d.ts.map +1 -0
  755. package/dist/react/number.js +25 -0
  756. package/dist/react/page.d.ts +1 -1
  757. package/dist/react/sidebar.d.ts +4 -0
  758. package/dist/react/sidebar.d.ts.map +1 -1
  759. package/dist/react/sidebar.js +2 -2
  760. package/dist/react/table-of-contents.d.ts +19 -0
  761. package/dist/react/table-of-contents.d.ts.map +1 -0
  762. package/dist/react/table-of-contents.js +28 -0
  763. package/dist/{shared-words-CdMDVtXx.js → shared-words-C5cjxMjZ.js} +151 -16
  764. package/dist/shared-words-C5cjxMjZ.js.map +1 -0
  765. package/dist/{shared-words-BtRee8xR.js → shared-words-Cdm7xd-_.js} +163 -28
  766. package/dist/shared-words-Cdm7xd-_.js.map +1 -0
  767. package/package.json +24 -13
  768. package/DS1/1-root/one.semantic.css +0 -735
  769. package/DS1/3-unit/ds-calendar-large.ts +0 -353
  770. package/DS1/3-unit/styles/ds-calendar-large.css +0 -178
  771. package/dist/3-unit/ds-calendar-large.d.ts +0 -142
  772. package/dist/3-unit/ds-calendar-large.d.ts.map +0 -1
  773. package/dist/3-unit/ds-calendar-large.js +0 -308
  774. package/dist/icons-extra-CRxxWFjX.js.map +0 -1
  775. package/dist/icons-extra-H5pqCM_R.js.map +0 -1
  776. package/dist/shared-words-BtRee8xR.js.map +0 -1
  777. package/dist/shared-words-CdMDVtXx.js.map +0 -1
@@ -1,4 +1,8 @@
1
- /** Inspect named page areas without changing their size, opacity, or interaction. */
1
+ /**
2
+ * Inspect a page's layout without changing its size, opacity, or interaction:
3
+ * named areas in dashed outlines with their name and size, text and fields in
4
+ * green boxes, and every component (a custom element) outlined with its tag name.
5
+ */
2
6
  export function createLayoutInspector() {
3
7
  const root = document.documentElement;
4
8
  const overlay = document.createElement('div');
@@ -17,116 +21,110 @@ export function createLayoutInspector() {
17
21
  color-scheme: inherit !important;
18
22
  }
19
23
  :host([hidden]) { display: none !important; }
20
- .veil, .areas { position: absolute; inset: 0; overflow: hidden; }
21
- .veil { background: color-mix(in srgb, var(--page-background, Canvas) 78%, transparent); }
22
- .area {
24
+ .boxes { position: absolute; inset: 0; overflow: hidden; }
25
+ .box {
23
26
  position: absolute;
24
27
  box-sizing: border-box;
25
- display: grid;
26
- place-items: center;
27
- background: color-mix(in srgb, var(--pastel) 40%, transparent);
28
- border: 1px solid color-mix(in srgb, var(--pastel) 65%, #82718d);
28
+ border: 1px solid var(--tint);
29
29
  }
30
- .name {
31
- box-sizing: border-box;
32
- max-width: 100%;
33
- padding: 3px 8px;
34
- background: var(--page-background, Canvas);
35
- color: var(--base-slate, CanvasText);
36
- font: 400 14px/20px var(--font-regular, var(--typeface-regular, sans-serif));
37
- text-align: center;
38
- overflow-wrap: anywhere;
39
- }
40
- .area[data-container] {
41
- background: transparent;
42
- }
43
- .area[data-container] > .name {
44
- position: absolute;
45
- top: 0;
46
- left: 0;
47
- }
48
- .area[data-compact] .name {
30
+ .area { --tint: #efc9dc; border-style: dashed; }
31
+ .text { --tint: #bfe0cd; background: color-mix(in srgb, var(--tint) 18%, transparent); }
32
+ .field { --tint: #bfe0cd; background: color-mix(in srgb, var(--tint) 45%, transparent); }
33
+ .component { --tint: #d5c9ef; }
34
+ .tag {
49
35
  position: absolute;
50
- bottom: 100%;
51
- left: 50%;
52
- transform: translateX(-50%);
53
- width: max-content;
54
- max-width: none;
55
- padding: 2px 4px;
56
- font-size: 12px;
57
- line-height: 16px;
58
- white-space: nowrap;
59
- }
60
- .dimensions {
61
- display: block;
62
- font-size: 12px;
63
- line-height: 16px;
36
+ box-sizing: border-box;
37
+ display: flex;
38
+ gap: 6px;
39
+ padding: 0 4px;
40
+ background: var(--tint);
41
+ color: #2a2530;
42
+ font: 400 12px/16px var(--font-regular, var(--typeface-regular, sans-serif));
64
43
  font-variant-numeric: tabular-nums;
65
44
  white-space: nowrap;
66
45
  }
46
+ .area > .tag { top: -1px; right: -1px; }
47
+ .component > .tag { bottom: 100%; left: -1px; }
48
+ .component[data-inside] > .tag { bottom: auto; top: -1px; }
49
+ .measure { opacity: 0.7; }
67
50
  @media print { :host { display: none !important; } }
68
- </style><div class="veil"></div><div class="areas"></div>`;
51
+ </style><div class="boxes"></div>`;
69
52
  document.body.appendChild(overlay);
70
- const layer = shadow.querySelector<HTMLDivElement>('.areas')!;
71
- const colors = ['#efc9dc', '#d5c9ef', '#c2d9eb', '#bfe0cd', '#eee3b7', '#efcfb8'];
53
+ const layer = shadow.querySelector<HTMLDivElement>('.boxes')!;
54
+ type Kind = 'area' | 'text' | 'field' | 'component';
55
+ // A page of thousands of words draws its first boxes and stops.
56
+ const limit = 2000;
57
+ const fields = new Set(['input', 'textarea', 'select', 'img', 'picture', 'svg', 'video', 'canvas', 'iframe']);
58
+ const skipped = new Set(['script', 'style', 'template', 'noscript', 'link', 'meta', 'slot']);
59
+ // Primitives drawn as what they show rather than named: words, an icon,
60
+ // and a gap with nothing to see.
61
+ const primitives: Record<string, Kind | 'none'> = { 'ds-text': 'text', 'ds-icon': 'field', 'ds-gap': 'none' };
72
62
  let frame = 0;
73
63
  let visible = false;
74
64
  const observed = new Set<HTMLElement>();
75
65
  const observedRoots = new Set<ShadowRoot>();
76
-
77
- const getAreas = () => {
78
- const named: HTMLElement[] = [];
79
- const collect = (scope: Document | ShadowRoot | HTMLElement) => {
80
- named.push(...scope.querySelectorAll<HTMLElement>('[data-ds-area]'));
81
- scope.querySelectorAll<HTMLElement>('[data-ds-layout-root]').forEach((host) => {
82
- if (!host.shadowRoot) return;
83
- if (!observedRoots.has(host.shadowRoot)) {
84
- mutations.observe(host.shadowRoot, { subtree: true, childList: true, characterData: true });
85
- observedRoots.add(host.shadowRoot);
66
+ const collect = () => {
67
+ const areas: HTMLElement[] = [];
68
+ const words: [HTMLElement, Kind][] = [];
69
+ const components: HTMLElement[] = [];
70
+ const visit = (parent: Element | ShadowRoot, inText: boolean) => {
71
+ for (const element of Array.from(parent.children) as HTMLElement[]) {
72
+ const name = element.localName;
73
+ if (skipped.has(name) || element.hasAttribute('data-ds-layout-overlay') || element.hasAttribute('data-ds-grid-overlay')) continue;
74
+ if (element.hasAttribute('data-ds-area')) areas.push(element);
75
+ const primitive = primitives[name];
76
+ if (primitive === 'none') continue;
77
+ const component = !primitive && name.includes('-');
78
+ if (component) components.push(element);
79
+ if (fields.has(name) || primitive === 'field') {
80
+ if (!inText) words.push([element, 'field']);
81
+ continue;
86
82
  }
87
- collect(host.shadowRoot);
88
- });
83
+ const text = !inText && !component && (primitive === 'text' || Array.from(element.childNodes).some((node) =>
84
+ node.nodeType === Node.TEXT_NODE && node.textContent!.trim() !== ''));
85
+ if (text) words.push([element, 'text']);
86
+ // A design system component is drawn whole; an app's own component is
87
+ // opened, so what it holds is drawn too.
88
+ const content = element.shadowRoot;
89
+ if (content && !primitive && (!name.startsWith('ds-') || element.hasAttribute('data-ds-layout-root'))) {
90
+ if (!observedRoots.has(content)) {
91
+ mutations.observe(content, { subtree: true, childList: true, characterData: true });
92
+ observedRoots.add(content);
93
+ }
94
+ visit(content, inText || text);
95
+ }
96
+ visit(element, inText || text);
97
+ }
89
98
  };
90
- collect(document.querySelector<HTMLElement>('[data-ds-inspect-active]') ?? document);
91
- if (named.length) return named;
99
+ visit(document.querySelector<HTMLElement>('[data-ds-inspect-active]') ?? document.body, false);
92
100
  // Semantic fallback for pages that have not supplied their own area names.
93
- return Array.from(document.querySelectorAll<HTMLElement>('header, main, section, footer, one-footer'))
101
+ const named = areas.length ? areas : Array.from(document.querySelectorAll<HTMLElement>('header, main, section, footer, one-footer'))
94
102
  .filter((element) => !element.querySelector('section, header, footer, one-footer'));
103
+ return { areas: named, words, components };
95
104
  };
96
- const render = () => {
97
- frame = 0;
98
- if (!visible) return;
99
- const areas = getAreas();
100
- const current = new Set(areas);
101
- for (const element of observed) {
102
- if (!current.has(element)) { resize.unobserve(element); observed.delete(element); }
105
+
106
+ const tag = (name: string, ...measures: string[]) => {
107
+ const label = document.createElement('span');
108
+ label.className = 'tag';
109
+ label.textContent = name;
110
+ for (const measure of measures) {
111
+ const part = document.createElement('span');
112
+ part.className = 'measure';
113
+ part.textContent = measure;
114
+ label.appendChild(part);
103
115
  }
104
- const fragments = document.createDocumentFragment();
105
- areas.forEach((element, index) => {
106
- if (!observed.has(element)) { resize.observe(element); observed.add(element); }
107
- const rect = element.getBoundingClientRect();
108
- if (!rect.width || !rect.height || rect.bottom <= 0 || rect.top >= innerHeight || rect.right <= 0 || rect.left >= innerWidth) return;
109
- if (getComputedStyle(element).visibility === 'hidden') return;
110
- const panel = document.createElement('div');
111
- panel.className = 'area';
112
- panel.toggleAttribute('data-container', !!element.shadowRoot?.querySelector('[data-ds-area]'));
113
- panel.toggleAttribute('data-compact', rect.width < 80 || rect.height < 24);
114
- panel.style.left = `${rect.left}px`;
115
- panel.style.top = `${rect.top}px`;
116
- panel.style.width = `${rect.width}px`;
117
- panel.style.height = `${rect.height}px`;
118
- panel.style.setProperty('--pastel', colors[index % colors.length] ?? null);
119
- const label = document.createElement('span');
120
- label.className = 'name';
116
+ return label;
117
+ };
118
+ const box = (element: HTMLElement, kind: Kind, rect: DOMRect) => {
119
+ const panel = document.createElement('div');
120
+ panel.className = `box ${kind}`;
121
+ panel.style.left = `${rect.left}px`;
122
+ panel.style.top = `${rect.top}px`;
123
+ panel.style.width = `${rect.width}px`;
124
+ panel.style.height = `${rect.height}px`;
125
+ if (kind === 'area') {
121
126
  const areaName = element.dataset.dsArea || element.getAttribute('aria-label') ||
122
127
  (element.localName === 'one-footer' ? 'footer' : element.localName);
123
- label.textContent = areaName.replace(/[-_]/g, ' ').replace(/^./, (letter) => letter.toUpperCase());
124
- const dimensions = document.createElement('span');
125
- dimensions.className = 'dimensions';
126
- dimensions.textContent = `${Number(rect.width.toFixed(1))} × ${Number(rect.height.toFixed(1))} px`;
127
- label.appendChild(dimensions);
128
- const ratio = document.createElement('span');
129
- ratio.className = 'dimensions';
130
128
  // Reduce dimensions measured to a tenth of a CSS pixel; use a decimal
131
129
  // for fluid shapes whose exact fraction would be too long to read.
132
130
  const width = Math.max(1, Math.round(rect.width * 10));
@@ -138,14 +136,42 @@ export function createLayoutInspector() {
138
136
  }
139
137
  const horizontal = width / divisor;
140
138
  const vertical = height / divisor;
141
- ratio.textContent = horizontal <= 100 && vertical <= 100
142
- ? `${horizontal}:${vertical}`
143
- : `≈ ${Number((rect.width / rect.height).toFixed(2))}:1`;
144
- label.appendChild(ratio);
145
- panel.appendChild(label);
146
- fragments.appendChild(panel);
147
- });
148
- layer.replaceChildren(fragments);
139
+ panel.appendChild(tag(
140
+ areaName.replace(/[-_]/g, ' ').replace(/^./, (letter) => letter.toUpperCase()),
141
+ `${Number(rect.width.toFixed(1))} × ${Number(rect.height.toFixed(1))}`,
142
+ horizontal <= 100 && vertical <= 100 ? `${horizontal}:${vertical}` : `≈ ${Number((rect.width / rect.height).toFixed(2))}:1`,
143
+ ));
144
+ } else if (kind === 'component') {
145
+ // A name with no room above the component stands inside it.
146
+ panel.toggleAttribute('data-inside', rect.top < 16);
147
+ panel.appendChild(tag(element.localName));
148
+ }
149
+ return panel;
150
+ };
151
+ const render = () => {
152
+ frame = 0;
153
+ if (!visible) return;
154
+ const { areas, words, components } = collect();
155
+ const watched = new Set([...areas, ...components]);
156
+ for (const element of observed) {
157
+ if (!watched.has(element)) { resize.unobserve(element); observed.delete(element); }
158
+ }
159
+ for (const element of watched) {
160
+ if (!observed.has(element)) { resize.observe(element); observed.add(element); }
161
+ }
162
+ // Areas first, then words, then components, so component names lie on top.
163
+ const drawn: HTMLElement[] = [];
164
+ const draw = (element: HTMLElement, kind: Kind) => {
165
+ if (drawn.length >= limit) return;
166
+ const rect = element.getBoundingClientRect();
167
+ if (!rect.width || !rect.height || rect.bottom <= 0 || rect.top >= innerHeight || rect.right <= 0 || rect.left >= innerWidth) return;
168
+ if (getComputedStyle(element).visibility === 'hidden') return;
169
+ drawn.push(box(element, kind, rect));
170
+ };
171
+ areas.forEach((element) => draw(element, 'area'));
172
+ words.forEach(([element, kind]) => draw(element, kind));
173
+ components.forEach((element) => draw(element, 'component'));
174
+ layer.replaceChildren(...drawn);
149
175
  };
150
176
  const schedule = () => { if (visible && !frame) frame = requestAnimationFrame(render); };
151
177
  const resize = new ResizeObserver(schedule);
@@ -22,6 +22,10 @@ export interface PreferenceOptions {
22
22
  * (`--background`) by default. `false` leaves both to the page.
23
23
  */
24
24
  themePaper?: { light: string; dark: string } | false;
25
+ /** Where the shape is stored: `"ds-one:shape"` by default. */
26
+ shapeStorageKey?: string;
27
+ /** The shape for a visitor who has chosen none; without it the components keep their own corners. */
28
+ shapeDefault?: "square" | "rounded" | "circular";
25
29
  }
26
30
 
27
31
  declare global {
@@ -5,7 +5,8 @@
5
5
  * mobile browser, or a touch screen whose shorter side is at most 820px) is
6
6
  * drawn as if the screen were 280 units wide: the scale is the page's width
7
7
  * over 280, never under 0.75 or over 2, so a 375px phone draws everything a
8
- * third larger.
8
+ * third larger. The page's width is never taken as more than the screen's, so
9
+ * a page that a phone has widened and zoomed out never scales itself larger.
9
10
  *
10
11
  * `startScaling()` puts the scale on the page and keeps it there through
11
12
  * resizes and turns; `applyScaling()` does it once. Both set `--sf` and, on a
@@ -145,10 +146,27 @@ export function applyScaling(options: ScalingOptions = {}): number {
145
146
  return applyPage(root ?? document.documentElement, config);
146
147
  }
147
148
 
149
+ /**
150
+ * The screen's own width as it is held, in CSS pixels: the widest a page on it
151
+ * is laid out at, or 0 when the browser does not say. iOS gives the screen's
152
+ * upright width whichever way it is turned, so the side is taken by the turn.
153
+ */
154
+ export function screenWidth(): number {
155
+ const { width = 0, height = 0 } = window.screen ?? {};
156
+ if (!width || !height) return 0;
157
+ const turn = window.screen.orientation?.type;
158
+ const landscape = turn ? turn.startsWith("landscape") : window.matchMedia?.("(orientation: landscape)").matches ?? width > height;
159
+ return landscape ? Math.max(width, height) : Math.min(width, height);
160
+ }
161
+
148
162
  function applyPage(root: HTMLElement, config: Partial<ScalingConfig>): number {
149
163
  const mobile = detectMobileDevice();
150
- // The page's width without its scroll bar.
151
- const width = document.documentElement.clientWidth || window.innerWidth || 0;
164
+ // The page's width without its scroll bar, never more than the screen's: when something reaches
165
+ // past the edge, a phone's browser widens the page and zooms out, and a scale read from that
166
+ // width would draw everything larger, which keeps the page too wide and zoomed out.
167
+ const page = document.documentElement.clientWidth || window.innerWidth || 0;
168
+ const held = mobile ? screenWidth() : 0;
169
+ const width = held ? Math.min(page, held) : page;
152
170
  const factor = mobile ? calculateScalingFactor(width, { ...defaultScalingConfig, ...config }, window.devicePixelRatio || 1) : 1;
153
171
  root.style.setProperty("--sf", String(factor));
154
172
  root.toggleAttribute("data-mobile", mobile);
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Square, rounded or circular: the corners every component draws, chosen once
3
+ * and remembered (Ezo's Shape setting, for every product).
4
+ *
5
+ * The runtime is the second part of `theme-bootstrap.js`, which a page inlines
6
+ * in its <head> so the first paint already has the shape; imported here, it
7
+ * installs itself when the page did not. It marks the root with
8
+ * `data-ds-shape`, which `1-root/component-appearance.css` reads: square
9
+ * corners, rounded ones (squircles where the browser draws them) or pills. A
10
+ * visitor who has chosen nothing sees `shapeDefault` from
11
+ * `window.DS_ONE_PREFERENCES`, or the components' own corners. Offer the
12
+ * choice with `<ds-cycle type="shape">`.
13
+ */
14
+ import "./theme-bootstrap.js";
15
+
16
+ export type Shape = "square" | "rounded" | "circular";
17
+ export const SHAPES: readonly Shape[] = ["square", "rounded", "circular"];
18
+
19
+ /** `window.DS_ONE_SHAPE`, installed by `theme-bootstrap.js`. */
20
+ export interface ShapeRuntime {
21
+ /** The shape in effect, or null when none is chosen. */
22
+ shape(): Shape | null;
23
+ /** Choose and remember a shape, and put it on the page. */
24
+ set(shape: Shape): void;
25
+ /** Read the stored choice and the options again, and put them on the page. */
26
+ apply(): Shape | null;
27
+ }
28
+
29
+ declare global {
30
+ interface Window {
31
+ DS_ONE_SHAPE?: ShapeRuntime;
32
+ }
33
+ }
34
+
35
+ /** The shape in effect: the stored choice, else `shapeDefault`, else rounded (the components' own corners). */
36
+ export function getShape(): Shape {
37
+ return window.DS_ONE_SHAPE?.shape() ?? "rounded";
38
+ }
39
+
40
+ /** Choose and remember a shape. */
41
+ export function setShape(shape: Shape): void {
42
+ window.DS_ONE_SHAPE?.set(shape);
43
+ }
@@ -0,0 +1,164 @@
1
+ // Rendered text, across slots and open shadow roots. Token pairs alone cannot
2
+ // tell what ink a component actually draws on its own surface.
3
+ export type RGBA = [number, number, number, number];
4
+ const clear: RGBA = [0, 0, 0, 0];
5
+ export const TEXT_CONTRAST_MINIMUM = 4.5;
6
+ export const contrastRatio = (a: RGBA, b: RGBA) => {
7
+ const luminance = (c: RGBA) => c.slice(0, 3).map(v => v <= .04045 ? v / 12.92 : ((v + .055) / 1.055) ** 2.4)
8
+ .reduce((sum, v, i) => sum + v * [0.2126, 0.7152, 0.0722][i]!, 0);
9
+ const [high, low] = [luminance(a), luminance(b)].sort((x, y) => y - x);
10
+ return (high! + .05) / (low! + .05);
11
+ };
12
+ export function composite(top: RGBA, bottom: RGBA): RGBA {
13
+ const alpha = top[3] + bottom[3] * (1 - top[3]);
14
+ return alpha ? [...[0, 1, 2].map(i => (top[i]! * top[3] + bottom[i]! * bottom[3] * (1 - top[3])) / alpha), alpha] as RGBA : [...clear];
15
+ }
16
+ const styleOf = (e: Element, pseudo?: string) => e.ownerDocument.defaultView!.getComputedStyle(e, pseudo);
17
+ /** The painted parent, including the slot's styles and the shadow host's surface. */
18
+ export function paintedParent(e: Element): Element | null {
19
+ return e.assignedSlot ?? e.parentElement ?? (e.getRootNode() as ShadowRoot).host ?? null;
20
+ }
21
+
22
+ /** Computed RGB stays full precision; modern colour spaces use the browser's sRGB canvas conversion. */
23
+ export function colorReader(document: Document) {
24
+ const cache = new Map<string, RGBA | null>();
25
+ let context: CanvasRenderingContext2D | null | undefined;
26
+ return (value: string): RGBA | null => {
27
+ if (cache.has(value)) return cache.get(value)!;
28
+ let color: RGBA | null = null;
29
+ if (value === 'transparent') color = [...clear];
30
+ const rgb = /^rgba?\(([^)]+)\)$/.exec(value);
31
+ if (rgb) {
32
+ const parts = rgb[1]!.split(/[\s,/]+/).filter(Boolean);
33
+ if (parts.length >= 3) color = [...parts.slice(0, 3).map(v => parseFloat(v) / (v.endsWith('%') ? 100 : 255)), parts[3] ? parseFloat(parts[3]) / (parts[3].endsWith('%') ? 100 : 1) : 1] as RGBA;
34
+ } else if (value && document.defaultView?.CSS.supports('color', value)) {
35
+ context ??= document.createElement('canvas').getContext('2d', { willReadFrequently: true });
36
+ if (context) {
37
+ context.clearRect(0, 0, 1, 1);
38
+ context.fillStyle = value;
39
+ context.fillRect(0, 0, 1, 1);
40
+ color = Array.from(context.getImageData(0, 0, 1, 1).data, v => v / 255) as RGBA;
41
+ }
42
+ }
43
+ cache.set(value, color);
44
+ return color;
45
+ };
46
+ }
47
+
48
+ type TextSample = { element: Element; text: string; pseudo?: string; paintElement?: Element };
49
+ function visible(e: Element) {
50
+ if (!e.getClientRects().length && styleOf(e).display !== 'contents') return false;
51
+ if (styleOf(e).visibility !== 'visible') return false;
52
+ for (let p: Element | null = e; p; p = paintedParent(p)) {
53
+ const s = styleOf(p);
54
+ if (s.display === 'none' || s.contentVisibility === 'hidden' || Number(s.opacity) === 0
55
+ || p.matches(':disabled, [aria-disabled="true"], [data-ds-constraint-panel]')) return false;
56
+ }
57
+ return true;
58
+ }
59
+
60
+ /** Text nodes are visited once in their composed position; hidden menus and inactive controls do not count. */
61
+ function textSamples(root: ParentNode): TextSample[] {
62
+ const samples: TextSample[] = [];
63
+ const seen = new Set<Node>();
64
+ function visit(node: Node) {
65
+ if (seen.has(node)) return;
66
+ seen.add(node);
67
+ if (node.nodeType === 3) {
68
+ const text = node.textContent?.trim();
69
+ const element = node.parentElement;
70
+ const paintElement = (node as Text).assignedSlot ?? element;
71
+ if (text && element && paintElement && visible(paintElement)) {
72
+ const range = element.ownerDocument.createRange();
73
+ range.selectNodeContents(node);
74
+ if (Array.from(range.getClientRects()).some(r => r.width > 0 && r.height > 0)) samples.push({ element, text, paintElement });
75
+ }
76
+ return;
77
+ }
78
+ if (node.nodeType === 1) {
79
+ const e = node as Element;
80
+ if (e.matches('script, style, template, noscript, option, [data-ds-constraint-panel]')) return;
81
+ if (visible(e)) {
82
+ if (e.localName === 'input' || e.localName === 'textarea') {
83
+ const input = e as HTMLInputElement;
84
+ if (!['hidden', 'checkbox', 'radio', 'range', 'color', 'file', 'image'].includes(input.type)) {
85
+ if (input.value) samples.push({ element: e, text: input.type === 'password' ? 'Password value' : input.value });
86
+ else if (input.placeholder) samples.push({ element: e, text: input.placeholder, pseudo: '::placeholder' });
87
+ }
88
+ } else if (e.localName === 'select') {
89
+ const text = (e as unknown as HTMLSelectElement).selectedOptions[0]?.textContent?.trim();
90
+ if (text) samples.push({ element: e, text });
91
+ }
92
+ for (const pseudo of ['::before', '::after']) {
93
+ const s = styleOf(e, pseudo);
94
+ if (/^["'].*["']$/.test(s.content) && s.content.slice(1, -1).trim() && s.display !== 'none' && s.visibility === 'visible' && Number(s.opacity) !== 0) {
95
+ samples.push({ element: e, text: s.content.slice(1, -1), pseudo });
96
+ }
97
+ }
98
+ }
99
+ if (e.localName === 'slot') {
100
+ const assigned = (e as HTMLSlotElement).assignedNodes({ flatten: true });
101
+ (assigned.length ? assigned : Array.from(e.childNodes)).forEach(visit);
102
+ return;
103
+ }
104
+ if (e.shadowRoot) { visit(e.shadowRoot); return; }
105
+ // Values/placeholder above represent these controls, not their fallback children.
106
+ if (e.matches('input, textarea, select')) return;
107
+ }
108
+ node.childNodes.forEach(visit);
109
+ }
110
+ visit(root as Node);
111
+ return samples;
112
+ }
113
+
114
+ export type TextContrastResult = { element: Element; text: string; ratio?: number; reason?: string; foreground?: string; background?: string };
115
+ const rgbLabel = (c: RGBA) => `rgb(${c.slice(0, 3).map(v => Math.round(v * 255)).join(', ')})`;
116
+
117
+ export function measureTextContrast(root: ParentNode): TextContrastResult[] {
118
+ const document = (root as Node).ownerDocument ?? root as Document;
119
+ const read = colorReader(document);
120
+ const styles = new Map<Element, CSSStyleDeclaration>();
121
+ const style = (e: Element) => { if (!styles.has(e)) styles.set(e, styleOf(e)); return styles.get(e)!; };
122
+ return textSamples(root).map(({ element, text, pseudo, paintElement = element }) => {
123
+ const result: TextContrastResult = { element, text: text.replace(/\s+/g, ' ').slice(0, 60) };
124
+ const inkStyle = pseudo ? styleOf(element, pseudo) : style(paintElement);
125
+ let foreground = read(inkStyle.getPropertyValue('-webkit-text-fill-color') || inkStyle.color);
126
+ let background: RGBA = [...clear];
127
+ if (!foreground) return { ...result, reason: 'The rendered text colour could not be resolved.' };
128
+ const chain: CSSStyleDeclaration[] = [];
129
+ if (pseudo) chain.push(inkStyle);
130
+ for (let p: Element | null = paintElement; p; p = paintedParent(p)) chain.push(style(p));
131
+ for (const s of chain) {
132
+ if (s.mixBlendMode && s.mixBlendMode !== 'normal' || s.filter && s.filter !== 'none' || s.backdropFilter && s.backdropFilter !== 'none') {
133
+ return { ...result, reason: 'A blend or filter needs a visual contrast review.' };
134
+ }
135
+ if (background[3] < 1 && s.backgroundImage && s.backgroundImage !== 'none') {
136
+ return { ...result, reason: 'Text over an image or gradient needs a visual contrast review.' };
137
+ }
138
+ const fill = read(s.backgroundColor);
139
+ if (!fill) return { ...result, reason: 'The rendered background colour could not be resolved.' };
140
+ foreground = composite(foreground, fill);
141
+ background = composite(background, fill);
142
+ const opacity = Number(s.opacity);
143
+ foreground[3] *= opacity;
144
+ background[3] *= opacity;
145
+ }
146
+ // With no declared page background, compare both possible user-agent canvases.
147
+ // Usually the opaque html/body surface makes these identical.
148
+ const candidates: RGBA[] = [[1, 1, 1, 1], [0, 0, 0, 1]];
149
+ const pairs = candidates.map(canvas => ({ foreground: composite(foreground!, canvas), background: composite(background, canvas) }));
150
+ const values = pairs.map(pair => ({ ...pair, ratio: contrastRatio(pair.foreground, pair.background) })).sort((a, b) => a.ratio - b.ratio);
151
+ const worst = values[0]!;
152
+ if (background[3] < 1 && worst.ratio < TEXT_CONTRAST_MINIMUM) return { ...result, reason: 'Declare an opaque page background so text contrast can be verified.' };
153
+ return { ...result, ratio: worst.ratio, foreground: rgbLabel(worst.foreground), background: rgbLabel(worst.background) };
154
+ });
155
+ }
156
+
157
+ export function inspectTextContrast(root: ParentNode) {
158
+ return measureTextContrast(root).flatMap(result => {
159
+ const label = `“${result.text}”`;
160
+ // What cannot be measured is a review for a person, not a broken rule; a colour that could not be read is.
161
+ if (result.reason) return [{ element: result.element, message: `${label}: ${result.reason}`, review: /visual contrast review/.test(result.reason) }];
162
+ return result.ratio! < TEXT_CONTRAST_MINIMUM ? [{ element: result.element, message: `${label} has ${result.ratio!.toFixed(2)}:1 text contrast (${result.foreground} on ${result.background}); at least ${TEXT_CONTRAST_MINIMUM}:1 is required.` }] : [];
163
+ });
164
+ }
@@ -182,3 +182,46 @@
182
182
  window.addEventListener("storage", function (event) { if (event.key === null || event.key === key()) apply(); });
183
183
  window.addEventListener("pageshow", function () { apply(); });
184
184
  })();
185
+
186
+ /**
187
+ * The shape, on before the first paint as well: square, rounded or circular,
188
+ * the corners every component draws (component-appearance.css keys on
189
+ * `data-ds-shape` on the root). Rounded draws squircles where the browser
190
+ * can. With nothing stored it is `shapeDefault` from
191
+ * `window.DS_ONE_PREFERENCES`, and without that the root carries no shape and
192
+ * the components keep their own corners. It is stored under `shapeStorageKey`
193
+ * (`"ds-one:shape"`), applied again when another tab stores one, and changed
194
+ * with `window.DS_ONE_SHAPE.set(shape)`, which dispatches `shape-changed` on
195
+ * window with `{ shape }`.
196
+ */
197
+ (function () {
198
+ if (typeof window === "undefined" || typeof document === "undefined" || window.DS_ONE_SHAPE) return;
199
+ var root = document.documentElement;
200
+ var SHAPES = ["square", "rounded", "circular"];
201
+ var session = null;
202
+ function options() { return window.DS_ONE_PREFERENCES || {}; }
203
+ function key() { return options().shapeStorageKey || "ds-one:shape"; }
204
+ function stored() {
205
+ if (session) return session;
206
+ try {
207
+ var saved = window.localStorage.getItem(key());
208
+ if (SHAPES.indexOf(saved) >= 0) return saved;
209
+ } catch { /* Storage can be blocked. */ }
210
+ return SHAPES.indexOf(options().shapeDefault) >= 0 ? options().shapeDefault : null;
211
+ }
212
+ function apply() {
213
+ var shape = stored();
214
+ if (shape) root.setAttribute("data-ds-shape", shape);
215
+ else root.removeAttribute("data-ds-shape");
216
+ return shape;
217
+ }
218
+ function set(shape) {
219
+ if (SHAPES.indexOf(shape) < 0) return;
220
+ try { window.localStorage.setItem(key(), shape); session = null; } catch { session = shape; }
221
+ apply();
222
+ window.dispatchEvent(new CustomEvent("shape-changed", { detail: { shape: shape } }));
223
+ }
224
+ window.DS_ONE_SHAPE = { shape: stored, set: set, apply: apply };
225
+ apply();
226
+ window.addEventListener("storage", function (event) { if (event.key === null || event.key === key()) apply(); });
227
+ })();
@@ -21,6 +21,8 @@
21
21
  * says `important: false`.
22
22
  */
23
23
 
24
+ import { reportFailure, type Failure } from "./failures";
25
+
24
26
  export type ToastId = string | number;
25
27
  export type ToastType = "default" | "success" | "info" | "warning" | "error" | "loading";
26
28
  export type ToastPosition = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
@@ -31,6 +33,9 @@ export type ToastPosition = "top-left" | "top-center" | "top-right" | "bottom-le
31
33
  */
32
34
  export interface ToastButton { label: string; onClick?: (event: MouseEvent) => void; href?: string }
33
35
  export interface ToastOptions {
36
+ /** A real failed operation to report. Omit for validation and expected refusals.
37
+ * Authored code and summary only; the visible title/description are never reported. */
38
+ failure?: Failure;
34
39
  /** Reuse an id to update a toast in place, as Sonner does. */
35
40
  id?: ToastId;
36
41
  description?: string;
@@ -122,6 +127,7 @@ function show(title: string, type: ToastType, options: ToastOptions = {}): Toast
122
127
  const data: ToastData = { ...options, ...(important === undefined ? {} : { important }), id, title, type };
123
128
  // A copy: a listener may add or remove listeners while it hears the toast.
124
129
  for (const listener of Array.from(state.toasters.size ? state.toasters : state.fallbacks)) listener({ toast: data });
130
+ if (type === "error" && options.failure) reportFailure(options.failure);
125
131
  return id;
126
132
  }
127
133
 
@@ -142,7 +148,7 @@ export const toast = Object.assign(
142
148
  Promise.resolve(typeof promise === "function" ? promise() : promise)
143
149
  .then(
144
150
  value => { show(typeof success === "function" ? success(value) : success, "success", { ...options, id }); },
145
- reason => { show(typeof error === "function" ? error(reason) : error, "error", { ...options, id }); },
151
+ reason => { show(typeof error === "function" ? error(reason) : error, "error", { ...options, id, ...(options.failure ? { failure: { ...options.failure, error: reason } } : {}) }); },
146
152
  )
147
153
  .finally(() => done?.());
148
154
  return id;
@@ -30,6 +30,10 @@
30
30
  "Light": "Lys",
31
31
  "Dark": "Mørk",
32
32
  "System": "System",
33
+ "Shape": "Form",
34
+ "Square": "Firkantet",
35
+ "Rounded": "Afrundet",
36
+ "Circular": "Cirkulær",
33
37
  "Note": "Note",
34
38
  "Page": "Side",
35
39
  "Red": "Rød",
@@ -124,6 +128,11 @@
124
128
  "Total": "I alt",
125
129
  "End date": "Slutdato",
126
130
  "Include time": "Medtag klokkeslæt",
127
- "Time": "Klokkeslæt"
131
+ "Time": "Klokkeslæt",
132
+ "Day": "Dag",
133
+ "Week": "Uge",
134
+ "Month": "Måned",
135
+ "Swimlane": "Baner",
136
+ "View": "Visning"
128
137
  }
129
138
  }
@@ -30,6 +30,10 @@
30
30
  "Light": "Hell",
31
31
  "Dark": "Dunkel",
32
32
  "System": "System",
33
+ "Shape": "Form",
34
+ "Square": "Eckig",
35
+ "Rounded": "Abgerundet",
36
+ "Circular": "Rund",
33
37
  "Note": "Notiz",
34
38
  "Page": "Seite",
35
39
  "Red": "Rot",
@@ -124,6 +128,11 @@
124
128
  "Total": "Gesamt",
125
129
  "End date": "Enddatum",
126
130
  "Include time": "Uhrzeit hinzufügen",
127
- "Time": "Uhrzeit"
131
+ "Time": "Uhrzeit",
132
+ "Day": "Tag",
133
+ "Week": "Woche",
134
+ "Month": "Monat",
135
+ "Swimlane": "Bahnen",
136
+ "View": "Ansicht"
128
137
  }
129
138
  }