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

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 (722) hide show
  1. package/DS1/0-face/calendar.ts +194 -0
  2. package/DS1/0-face/carousel.ts +623 -0
  3. package/DS1/0-face/component-visibility.ts +14 -0
  4. package/DS1/0-face/copy-text.ts +96 -0
  5. package/DS1/0-face/device.ts +8 -58
  6. package/DS1/0-face/dialog-swipe.ts +249 -0
  7. package/DS1/0-face/dialogs.ts +208 -0
  8. package/DS1/0-face/drawer.ts +258 -0
  9. package/DS1/0-face/feedback-words.ts +36 -0
  10. package/DS1/0-face/feedback.ts +40 -0
  11. package/DS1/0-face/format.ts +700 -0
  12. package/DS1/0-face/generated/toast-assets.ts +18 -0
  13. package/DS1/0-face/grid-fit.ts +1 -1
  14. package/DS1/0-face/grid.ts +3 -2
  15. package/DS1/0-face/header.ts +78 -0
  16. package/DS1/0-face/i18n.ts +93 -18
  17. package/DS1/0-face/keys.ts +276 -0
  18. package/DS1/0-face/languages.ts +4 -4
  19. package/DS1/0-face/layout-inspector.ts +6 -6
  20. package/DS1/0-face/library-styles.ts +33 -0
  21. package/DS1/0-face/load-toaster.ts +7 -0
  22. package/DS1/0-face/preference-options.ts +29 -0
  23. package/DS1/0-face/preferences.ts +3 -11
  24. package/DS1/0-face/pricing.ts +98 -43
  25. package/DS1/0-face/scaling.ts +160 -4
  26. package/DS1/0-face/shared-words.ts +9 -4
  27. package/DS1/0-face/sidebar.ts +201 -0
  28. package/DS1/0-face/theme-bootstrap.js +184 -0
  29. package/DS1/0-face/theme.ts +89 -47
  30. package/DS1/0-face/toast-queue.ts +157 -0
  31. package/DS1/0-face/toaster.ts +384 -0
  32. package/DS1/0-face/tooltips.ts +157 -15
  33. package/DS1/0-face/translations/da.json +60 -1
  34. package/DS1/0-face/translations/de.json +60 -1
  35. package/DS1/0-face/translations/en.json +60 -1
  36. package/DS1/0-face/translations/es.json +60 -1
  37. package/DS1/0-face/translations/fi.json +60 -1
  38. package/DS1/0-face/translations/fr.json +60 -1
  39. package/DS1/0-face/translations/is.json +60 -1
  40. package/DS1/0-face/translations/it.json +60 -1
  41. package/DS1/0-face/translations/ja.json +60 -1
  42. package/DS1/0-face/translations/ko.json +60 -1
  43. package/DS1/0-face/translations/nb.json +60 -1
  44. package/DS1/0-face/translations/pt-BR.json +60 -1
  45. package/DS1/0-face/translations/pt.json +60 -1
  46. package/DS1/0-face/translations/sv.json +60 -1
  47. package/DS1/0-face/translations/zh.json +60 -1
  48. package/DS1/0-face/translations-format.ts +3 -4
  49. package/DS1/1-root/card.css +192 -0
  50. package/DS1/1-root/carousel.css +136 -0
  51. package/DS1/1-root/cjk.css +23 -0
  52. package/DS1/1-root/component-metrics.css +1 -0
  53. package/DS1/1-root/component-tokens.css +51 -8
  54. package/DS1/1-root/controls.css +891 -14
  55. package/DS1/1-root/dialog-placement.css +191 -0
  56. package/DS1/1-root/document.css +183 -0
  57. package/DS1/1-root/drawer.css +83 -0
  58. package/DS1/1-root/empty.css +83 -0
  59. package/DS1/1-root/figures.css +141 -0
  60. package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
  61. package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
  62. package/DS1/1-root/fonts.css +69 -0
  63. package/DS1/1-root/footer.css +186 -0
  64. package/DS1/1-root/header.css +165 -0
  65. package/DS1/1-root/library-tokens.ts +91 -0
  66. package/DS1/1-root/measures.ts +53 -0
  67. package/DS1/1-root/notice.css +165 -0
  68. package/DS1/1-root/one.css +14 -84
  69. package/DS1/1-root/one.semantic.css +200 -148
  70. package/DS1/1-root/palette.css +58 -0
  71. package/DS1/1-root/palette.ts +19 -0
  72. package/DS1/1-root/progress.css +356 -0
  73. package/DS1/1-root/prose.css +202 -0
  74. package/DS1/1-root/row.css +300 -0
  75. package/DS1/1-root/table.css +111 -0
  76. package/DS1/1-root/text.css +70 -0
  77. package/DS1/2-core/button-split.ts +55 -0
  78. package/DS1/2-core/chart/chart.css +169 -0
  79. package/DS1/2-core/chart/grid-chart.ts +554 -0
  80. package/DS1/2-core/ds-avatar.ts +25 -6
  81. package/DS1/2-core/ds-badge.ts +10 -10
  82. package/DS1/2-core/ds-button.ts +111 -26
  83. package/DS1/2-core/ds-card.ts +135 -105
  84. package/DS1/2-core/ds-chart.ts +327 -0
  85. package/DS1/2-core/ds-composer.ts +8 -2
  86. package/DS1/2-core/ds-cycle.ts +97 -21
  87. package/DS1/2-core/ds-empty.ts +120 -0
  88. package/DS1/2-core/ds-icon.ts +11 -2
  89. package/DS1/2-core/ds-input.ts +165 -6
  90. package/DS1/2-core/ds-message.ts +218 -0
  91. package/DS1/2-core/ds-notice.ts +10 -0
  92. package/DS1/2-core/ds-progress.ts +380 -0
  93. package/DS1/2-core/ds-stat.ts +174 -0
  94. package/DS1/2-core/ds-switch.ts +1 -0
  95. package/DS1/2-core/ds-text.ts +15 -2
  96. package/DS1/2-core/ds-toast.ts +354 -0
  97. package/DS1/2-core/figures.ts +105 -0
  98. package/DS1/2-core/generated/ds-icon-map.ts +238 -128
  99. package/DS1/2-core/generated/icon-avatar.ts +2 -0
  100. package/DS1/2-core/generated/icons-extra.ts +120 -65
  101. package/DS1/2-core/generated/icons-immediate.ts +1 -1
  102. package/DS1/2-core/styles/ds-avatar.css +9 -8
  103. package/DS1/2-core/styles/ds-button-host.css +26 -3
  104. package/DS1/2-core/styles/ds-button-split.css +67 -0
  105. package/DS1/2-core/styles/ds-button.css +49 -15
  106. package/DS1/2-core/styles/ds-card.css +34 -0
  107. package/DS1/2-core/styles/ds-composer.css +13 -0
  108. package/DS1/2-core/styles/ds-cycle.css +10 -0
  109. package/DS1/2-core/styles/ds-empty.css +18 -0
  110. package/DS1/2-core/styles/ds-gap.css +1 -0
  111. package/DS1/2-core/styles/ds-icon.css +1 -0
  112. package/DS1/2-core/styles/ds-input.css +59 -6
  113. package/DS1/2-core/styles/ds-notice.css +32 -0
  114. package/DS1/2-core/styles/ds-progress.css +25 -0
  115. package/DS1/2-core/styles/ds-select.css +2 -2
  116. package/DS1/2-core/styles/ds-split.css +2 -62
  117. package/DS1/2-core/styles/ds-stat.css +34 -0
  118. package/DS1/2-core/styles/ds-switch.css +16 -1
  119. package/DS1/2-core/styles/ds-text.css +43 -12
  120. package/DS1/2-core/styles/ds-toast.css +182 -0
  121. package/DS1/2-core/styles/ds-tooltip.css +1 -0
  122. package/DS1/3-unit/calendar-base.ts +263 -0
  123. package/DS1/3-unit/ds-accordion.ts +9 -1
  124. package/DS1/3-unit/ds-avatar-group.ts +1 -0
  125. package/DS1/3-unit/ds-calendar-large.ts +349 -0
  126. package/DS1/3-unit/ds-calendar.ts +344 -0
  127. package/DS1/3-unit/ds-carousel.ts +368 -0
  128. package/DS1/3-unit/ds-date-picker.ts +540 -0
  129. package/DS1/3-unit/ds-form.ts +45 -37
  130. package/DS1/3-unit/ds-list.ts +48 -1
  131. package/DS1/3-unit/ds-matrix.ts +318 -0
  132. package/DS1/3-unit/ds-menu.ts +8 -4
  133. package/DS1/3-unit/ds-row.ts +84 -1
  134. package/DS1/3-unit/ds-sidebar.ts +366 -0
  135. package/DS1/3-unit/ds-table.ts +75 -34
  136. package/DS1/3-unit/styles/ds-accordion.css +1 -0
  137. package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
  138. package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
  139. package/DS1/3-unit/styles/ds-calendar.css +238 -0
  140. package/DS1/3-unit/styles/ds-carousel.css +30 -0
  141. package/DS1/3-unit/styles/ds-date-picker.css +124 -0
  142. package/DS1/3-unit/styles/ds-list.css +1 -0
  143. package/DS1/3-unit/styles/ds-matrix.css +203 -0
  144. package/DS1/3-unit/styles/ds-menu.css +31 -6
  145. package/DS1/3-unit/styles/ds-row.css +84 -2
  146. package/DS1/3-unit/styles/ds-sidebar.css +134 -0
  147. package/DS1/3-unit/styles/ds-table.css +3 -74
  148. package/DS1/4-page/ds-dialog.ts +40 -4
  149. package/DS1/4-page/ds-document.ts +240 -0
  150. package/DS1/4-page/ds-footer.ts +165 -0
  151. package/DS1/4-page/ds-grid.ts +39 -59
  152. package/DS1/4-page/ds-header.ts +171 -0
  153. package/DS1/4-page/ds-page.ts +184 -0
  154. package/DS1/4-page/email.ts +2 -3
  155. package/DS1/4-page/styles/ds-container.css +1 -0
  156. package/DS1/4-page/styles/ds-document.css +18 -0
  157. package/DS1/4-page/styles/ds-footer.css +29 -0
  158. package/DS1/4-page/styles/ds-grid.css +31 -85
  159. package/DS1/4-page/styles/ds-header.css +57 -0
  160. package/DS1/4-page/styles/ds-page.css +214 -0
  161. package/DS1/components.ts +7 -1
  162. package/DS1/index.ts +24 -6
  163. package/DS1/react/avatar.ts +4 -5
  164. package/DS1/react/button-split.ts +29 -0
  165. package/DS1/react/button.ts +32 -13
  166. package/DS1/react/carousel.ts +76 -0
  167. package/DS1/react/dialog.ts +36 -5
  168. package/DS1/react/document.ts +14 -0
  169. package/DS1/react/empty.ts +32 -0
  170. package/DS1/react/footer.ts +17 -0
  171. package/DS1/react/header.ts +15 -0
  172. package/DS1/react/input.ts +28 -17
  173. package/DS1/react/message.ts +73 -0
  174. package/DS1/react/notice.ts +59 -0
  175. package/DS1/react/page.ts +13 -0
  176. package/DS1/react/progress.ts +99 -0
  177. package/DS1/react/sidebar.ts +71 -0
  178. package/DS1/react/stat.ts +73 -0
  179. package/DS1/react/toast.ts +82 -0
  180. package/DS1/x-icon/Tabler-LICENSE.md +27 -0
  181. package/DS1/x-icon/airtable.svg +5 -0
  182. package/DS1/x-icon/attach.svg +3 -0
  183. package/DS1/x-icon/audio.svg +3 -0
  184. package/DS1/x-icon/bag-alt.svg +3 -0
  185. package/DS1/x-icon/bank.svg +3 -0
  186. package/DS1/x-icon/banknote.svg +3 -0
  187. package/DS1/x-icon/bolt.svg +3 -0
  188. package/DS1/x-icon/book-alt.svg +3 -0
  189. package/DS1/x-icon/book.svg +4 -0
  190. package/DS1/x-icon/box.svg +3 -0
  191. package/DS1/x-icon/briefcase.svg +3 -0
  192. package/DS1/x-icon/building.svg +4 -0
  193. package/DS1/x-icon/car.svg +3 -0
  194. package/DS1/x-icon/card.svg +3 -0
  195. package/DS1/x-icon/cart.svg +3 -0
  196. package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-down.svg} +1 -1
  197. package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
  198. package/DS1/x-icon/{ezo-android-screen-lists.svg → chevron-right.svg} +1 -1
  199. package/DS1/x-icon/{ezo-item-button-reopen.svg → chevron-up.svg} +1 -1
  200. package/DS1/x-icon/cloud.svg +3 -0
  201. package/DS1/x-icon/coffee.svg +3 -0
  202. package/DS1/x-icon/coins.svg +3 -0
  203. package/DS1/x-icon/cursor.svg +3 -0
  204. package/DS1/x-icon/curve.svg +7 -0
  205. package/DS1/x-icon/dislike.svg +4 -0
  206. package/DS1/x-icon/dot-bank.svg +3 -0
  207. package/DS1/x-icon/dot-banknote.svg +3 -0
  208. package/DS1/x-icon/dot-banknotes.svg +3 -0
  209. package/DS1/x-icon/dot-card.svg +3 -0
  210. package/DS1/x-icon/dot-coin.svg +3 -0
  211. package/DS1/x-icon/dot-coins.svg +3 -0
  212. package/DS1/x-icon/dot-receipt.svg +3 -0
  213. package/DS1/x-icon/dot-safe.svg +3 -0
  214. package/DS1/x-icon/dot-transfer.svg +3 -0
  215. package/DS1/x-icon/dot-wallet.svg +3 -0
  216. package/DS1/x-icon/download.svg +4 -0
  217. package/DS1/x-icon/drive.svg +5 -0
  218. package/DS1/x-icon/drop.svg +3 -0
  219. package/DS1/x-icon/dropbox.svg +3 -0
  220. package/DS1/x-icon/dumbbell.svg +3 -0
  221. package/DS1/x-icon/eye-off.svg +3 -0
  222. package/DS1/x-icon/eye.svg +3 -0
  223. package/DS1/x-icon/facebook.svg +3 -0
  224. package/DS1/x-icon/figma.svg +5 -0
  225. package/DS1/x-icon/flame.svg +3 -0
  226. package/DS1/x-icon/flip.svg +5 -0
  227. package/DS1/x-icon/food.svg +3 -0
  228. package/DS1/x-icon/fuel.svg +3 -0
  229. package/DS1/x-icon/game.svg +3 -0
  230. package/DS1/x-icon/gift.svg +3 -0
  231. package/DS1/x-icon/github.svg +3 -0
  232. package/DS1/x-icon/heart.svg +3 -0
  233. package/DS1/x-icon/history.svg +3 -0
  234. package/DS1/x-icon/home-alt.svg +3 -0
  235. package/DS1/x-icon/income.svg +3 -0
  236. package/DS1/x-icon/info.svg +5 -0
  237. package/DS1/x-icon/instagram.svg +5 -0
  238. package/DS1/x-icon/jpbank.svg +3 -0
  239. package/DS1/x-icon/key.svg +4 -0
  240. package/DS1/x-icon/keyboard.svg +3 -0
  241. package/DS1/x-icon/like.svg +4 -0
  242. package/DS1/x-icon/linkedin.svg +7 -0
  243. package/DS1/x-icon/loom.svg +6 -0
  244. package/DS1/x-icon/map.svg +4 -0
  245. package/DS1/x-icon/medical.svg +3 -0
  246. package/DS1/x-icon/minus.svg +3 -0
  247. package/DS1/x-icon/moon.svg +3 -0
  248. package/DS1/x-icon/move.svg +3 -0
  249. package/DS1/x-icon/music-alt.svg +3 -0
  250. package/DS1/x-icon/music.svg +5 -0
  251. package/DS1/x-icon/notion.svg +6 -0
  252. package/DS1/x-icon/offline.svg +3 -0
  253. package/DS1/x-icon/pause.svg +4 -0
  254. package/DS1/x-icon/paw.svg +3 -0
  255. package/DS1/x-icon/pdf.svg +3 -0
  256. package/DS1/x-icon/people.svg +5 -0
  257. package/DS1/x-icon/percent.svg +3 -0
  258. package/DS1/x-icon/phone.svg +3 -0
  259. package/DS1/x-icon/pill.svg +3 -0
  260. package/DS1/x-icon/plane.svg +3 -0
  261. package/DS1/x-icon/postal.svg +3 -0
  262. package/DS1/x-icon/present.svg +4 -0
  263. package/DS1/x-icon/reaction.svg +5 -0
  264. package/DS1/x-icon/receipt.svg +3 -0
  265. package/DS1/x-icon/refresh.svg +3 -0
  266. package/DS1/x-icon/refund.svg +3 -0
  267. package/DS1/x-icon/repeat.svg +3 -0
  268. package/DS1/x-icon/rotate.svg +4 -0
  269. package/DS1/x-icon/safe.svg +3 -0
  270. package/DS1/x-icon/school-alt.svg +3 -0
  271. package/DS1/x-icon/shield-alt.svg +3 -0
  272. package/DS1/x-icon/shield.svg +4 -0
  273. package/DS1/x-icon/shirt.svg +3 -0
  274. package/DS1/x-icon/shop.svg +3 -0
  275. package/DS1/x-icon/sign-in.svg +3 -0
  276. package/DS1/x-icon/sign-out.svg +3 -0
  277. package/DS1/x-icon/slack.svg +6 -0
  278. package/DS1/x-icon/sparkle.svg +3 -0
  279. package/DS1/x-icon/start.svg +4 -0
  280. package/DS1/x-icon/stop.svg +3 -0
  281. package/DS1/x-icon/sun.svg +3 -0
  282. package/DS1/x-icon/system.svg +4 -0
  283. package/DS1/x-icon/tag.svg +3 -0
  284. package/DS1/x-icon/ticket.svg +3 -0
  285. package/DS1/x-icon/title-struck.svg +4 -0
  286. package/DS1/x-icon/train.svg +3 -0
  287. package/DS1/x-icon/transfer.svg +3 -0
  288. package/DS1/x-icon/tv.svg +3 -0
  289. package/DS1/x-icon/upload.svg +4 -0
  290. package/DS1/x-icon/video.svg +4 -0
  291. package/DS1/x-icon/vimeo.svg +3 -0
  292. package/DS1/x-icon/wallet.svg +3 -0
  293. package/DS1/x-icon/wifi.svg +3 -0
  294. package/DS1/x-icon/window.svg +4 -0
  295. package/DS1/x-icon/wrench.svg +3 -0
  296. package/DS1/x-icon/x-brand.svg +4 -0
  297. package/DS1/x-icon/youtube.svg +4 -0
  298. package/README.md +3 -3
  299. package/dist/0-face/calendar.d.ts +75 -0
  300. package/dist/0-face/calendar.d.ts.map +1 -0
  301. package/dist/0-face/calendar.js +149 -0
  302. package/dist/0-face/carousel.d.ts +174 -0
  303. package/dist/0-face/carousel.d.ts.map +1 -0
  304. package/dist/0-face/carousel.js +583 -0
  305. package/dist/0-face/component-visibility.d.ts +7 -0
  306. package/dist/0-face/component-visibility.d.ts.map +1 -0
  307. package/dist/0-face/component-visibility.js +11 -0
  308. package/dist/0-face/copy-text.d.ts +11 -0
  309. package/dist/0-face/copy-text.d.ts.map +1 -0
  310. package/dist/0-face/copy-text.js +97 -0
  311. package/dist/0-face/device.d.ts +3 -7
  312. package/dist/0-face/device.d.ts.map +1 -1
  313. package/dist/0-face/device.js +7 -41
  314. package/dist/0-face/dialog-swipe.d.ts +49 -0
  315. package/dist/0-face/dialog-swipe.d.ts.map +1 -0
  316. package/dist/0-face/dialog-swipe.js +239 -0
  317. package/dist/0-face/dialogs.d.ts +33 -0
  318. package/dist/0-face/dialogs.d.ts.map +1 -0
  319. package/dist/0-face/dialogs.js +173 -0
  320. package/dist/0-face/drawer.d.ts +64 -0
  321. package/dist/0-face/drawer.d.ts.map +1 -0
  322. package/dist/0-face/drawer.js +256 -0
  323. package/dist/0-face/feedback-words.d.ts +21 -0
  324. package/dist/0-face/feedback-words.d.ts.map +1 -0
  325. package/dist/0-face/feedback-words.js +30 -0
  326. package/dist/0-face/feedback.d.ts +41 -0
  327. package/dist/0-face/feedback.d.ts.map +1 -0
  328. package/dist/0-face/feedback.js +35 -0
  329. package/dist/0-face/format.d.ts +166 -0
  330. package/dist/0-face/format.d.ts.map +1 -0
  331. package/dist/0-face/format.js +445 -0
  332. package/dist/0-face/generated/toast-assets.d.ts +11 -0
  333. package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
  334. package/dist/0-face/generated/toast-assets.js +14 -0
  335. package/dist/0-face/grid-fit.js +1 -1
  336. package/dist/0-face/grid.d.ts.map +1 -1
  337. package/dist/0-face/grid.js +2 -1
  338. package/dist/0-face/header.d.ts +38 -0
  339. package/dist/0-face/header.d.ts.map +1 -0
  340. package/dist/0-face/header.js +80 -0
  341. package/dist/0-face/i18n.d.ts +32 -2
  342. package/dist/0-face/i18n.d.ts.map +1 -1
  343. package/dist/0-face/i18n.js +65 -19
  344. package/dist/0-face/keys.d.ts +104 -0
  345. package/dist/0-face/keys.d.ts.map +1 -0
  346. package/dist/0-face/keys.js +253 -0
  347. package/dist/0-face/languages.d.ts +2 -2
  348. package/dist/0-face/languages.js +3 -3
  349. package/dist/0-face/layout-inspector.js +6 -6
  350. package/dist/0-face/library-styles.d.ts +7 -0
  351. package/dist/0-face/library-styles.d.ts.map +1 -0
  352. package/dist/0-face/library-styles.js +29 -0
  353. package/dist/0-face/load-toaster.d.ts +8 -0
  354. package/dist/0-face/load-toaster.d.ts.map +1 -0
  355. package/dist/0-face/load-toaster.js +7 -0
  356. package/dist/0-face/preference-options.d.ts +34 -0
  357. package/dist/0-face/preference-options.d.ts.map +1 -0
  358. package/dist/0-face/preference-options.js +1 -0
  359. package/dist/0-face/preferences.d.ts +3 -12
  360. package/dist/0-face/preferences.d.ts.map +1 -1
  361. package/dist/0-face/pricing.d.ts +19 -9
  362. package/dist/0-face/pricing.d.ts.map +1 -1
  363. package/dist/0-face/pricing.js +81 -40
  364. package/dist/0-face/scaling.d.ts +71 -1
  365. package/dist/0-face/scaling.d.ts.map +1 -1
  366. package/dist/0-face/scaling.js +108 -3
  367. package/dist/0-face/shared-words.d.ts +9 -4
  368. package/dist/0-face/shared-words.d.ts.map +1 -1
  369. package/dist/0-face/sidebar.d.ts +69 -0
  370. package/dist/0-face/sidebar.d.ts.map +1 -0
  371. package/dist/0-face/sidebar.js +191 -0
  372. package/dist/0-face/theme-bootstrap.d.ts +1 -0
  373. package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
  374. package/dist/0-face/theme-bootstrap.js +214 -0
  375. package/dist/0-face/theme.d.ts +32 -0
  376. package/dist/0-face/theme.d.ts.map +1 -1
  377. package/dist/0-face/theme.js +69 -43
  378. package/dist/0-face/toast-queue.d.ts +110 -0
  379. package/dist/0-face/toast-queue.d.ts.map +1 -0
  380. package/dist/0-face/toast-queue.js +98 -0
  381. package/dist/0-face/toaster.d.ts +27 -0
  382. package/dist/0-face/toaster.d.ts.map +1 -0
  383. package/dist/0-face/toaster.js +373 -0
  384. package/dist/0-face/tooltips.d.ts +24 -1
  385. package/dist/0-face/tooltips.d.ts.map +1 -1
  386. package/dist/0-face/tooltips.js +155 -16
  387. package/dist/0-face/translations/da.json +60 -1
  388. package/dist/0-face/translations/de.json +60 -1
  389. package/dist/0-face/translations/en.json +60 -1
  390. package/dist/0-face/translations/es.json +60 -1
  391. package/dist/0-face/translations/fi.json +60 -1
  392. package/dist/0-face/translations/fr.json +60 -1
  393. package/dist/0-face/translations/is.json +60 -1
  394. package/dist/0-face/translations/it.json +60 -1
  395. package/dist/0-face/translations/ja.json +60 -1
  396. package/dist/0-face/translations/ko.json +60 -1
  397. package/dist/0-face/translations/nb.json +60 -1
  398. package/dist/0-face/translations/pt-BR.json +60 -1
  399. package/dist/0-face/translations/pt.json +60 -1
  400. package/dist/0-face/translations/sv.json +60 -1
  401. package/dist/0-face/translations/zh.json +60 -1
  402. package/dist/0-face/translations-format.d.ts.map +1 -1
  403. package/dist/0-face/translations-format.js +3 -4
  404. package/dist/1-root/library-tokens.d.ts +31 -0
  405. package/dist/1-root/library-tokens.d.ts.map +1 -0
  406. package/dist/1-root/library-tokens.js +84 -0
  407. package/dist/1-root/measures.d.ts +52 -0
  408. package/dist/1-root/measures.d.ts.map +1 -0
  409. package/dist/1-root/measures.js +49 -0
  410. package/dist/1-root/palette.d.ts +5 -0
  411. package/dist/1-root/palette.d.ts.map +1 -1
  412. package/dist/1-root/palette.js +18 -0
  413. package/dist/2-core/button-split.d.ts +21 -0
  414. package/dist/2-core/button-split.d.ts.map +1 -0
  415. package/dist/2-core/button-split.js +48 -0
  416. package/dist/2-core/chart/grid-chart.d.ts +113 -0
  417. package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
  418. package/dist/2-core/chart/grid-chart.js +466 -0
  419. package/dist/2-core/ds-avatar.d.ts +20 -3
  420. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  421. package/dist/2-core/ds-avatar.js +19 -5
  422. package/dist/2-core/ds-badge.js +10 -13
  423. package/dist/2-core/ds-button.d.ts +76 -0
  424. package/dist/2-core/ds-button.d.ts.map +1 -1
  425. package/dist/2-core/ds-button.js +101 -26
  426. package/dist/2-core/ds-card.d.ts +76 -11
  427. package/dist/2-core/ds-card.d.ts.map +1 -1
  428. package/dist/2-core/ds-card.js +129 -105
  429. package/dist/2-core/ds-chart.d.ts +105 -0
  430. package/dist/2-core/ds-chart.d.ts.map +1 -0
  431. package/dist/2-core/ds-chart.js +390 -0
  432. package/dist/2-core/ds-composer.d.ts +7 -0
  433. package/dist/2-core/ds-composer.d.ts.map +1 -1
  434. package/dist/2-core/ds-composer.js +1 -1
  435. package/dist/2-core/ds-cycle.d.ts +36 -2
  436. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  437. package/dist/2-core/ds-cycle.js +95 -18
  438. package/dist/2-core/ds-empty.d.ts +74 -0
  439. package/dist/2-core/ds-empty.d.ts.map +1 -0
  440. package/dist/2-core/ds-empty.js +96 -0
  441. package/dist/2-core/ds-icon.d.ts +6 -0
  442. package/dist/2-core/ds-icon.d.ts.map +1 -1
  443. package/dist/2-core/ds-icon.js +12 -2
  444. package/dist/2-core/ds-input.d.ts +39 -1
  445. package/dist/2-core/ds-input.d.ts.map +1 -1
  446. package/dist/2-core/ds-input.js +150 -6
  447. package/dist/2-core/ds-message.d.ts +154 -0
  448. package/dist/2-core/ds-message.d.ts.map +1 -0
  449. package/dist/2-core/ds-message.js +177 -0
  450. package/dist/2-core/ds-notice.d.ts +13 -0
  451. package/dist/2-core/ds-notice.d.ts.map +1 -0
  452. package/dist/2-core/ds-notice.js +11 -0
  453. package/dist/2-core/ds-progress.d.ts +200 -0
  454. package/dist/2-core/ds-progress.d.ts.map +1 -0
  455. package/dist/2-core/ds-progress.js +319 -0
  456. package/dist/2-core/ds-stat.d.ts +126 -0
  457. package/dist/2-core/ds-stat.d.ts.map +1 -0
  458. package/dist/2-core/ds-stat.js +137 -0
  459. package/dist/2-core/ds-switch.d.ts +1 -0
  460. package/dist/2-core/ds-switch.d.ts.map +1 -1
  461. package/dist/2-core/ds-switch.js +1 -0
  462. package/dist/2-core/ds-text.d.ts +15 -2
  463. package/dist/2-core/ds-text.d.ts.map +1 -1
  464. package/dist/2-core/ds-text.js +13 -0
  465. package/dist/2-core/ds-toast.d.ts +139 -0
  466. package/dist/2-core/ds-toast.d.ts.map +1 -0
  467. package/dist/2-core/ds-toast.js +329 -0
  468. package/dist/2-core/figures.d.ts +56 -0
  469. package/dist/2-core/figures.d.ts.map +1 -0
  470. package/dist/2-core/figures.js +70 -0
  471. package/dist/2-core/generated/ds-icon-map.d.ts +120 -65
  472. package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
  473. package/dist/2-core/generated/ds-icon-map.js +238 -128
  474. package/dist/2-core/generated/icon-avatar.d.ts +2 -0
  475. package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
  476. package/dist/2-core/generated/icon-avatar.js +2 -0
  477. package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
  478. package/dist/2-core/generated/icons-extra.js +120 -65
  479. package/dist/2-core/generated/icons-immediate.d.ts +1 -1
  480. package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
  481. package/dist/2-core/generated/icons-immediate.js +1 -1
  482. package/dist/3-unit/calendar-base.d.ts +149 -0
  483. package/dist/3-unit/calendar-base.d.ts.map +1 -0
  484. package/dist/3-unit/calendar-base.js +172 -0
  485. package/dist/3-unit/ds-accordion.d.ts +9 -0
  486. package/dist/3-unit/ds-accordion.d.ts.map +1 -1
  487. package/dist/3-unit/ds-accordion.js +7 -1
  488. package/dist/3-unit/ds-avatar-group.d.ts +1 -0
  489. package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
  490. package/dist/3-unit/ds-calendar-large.d.ts +138 -0
  491. package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
  492. package/dist/3-unit/ds-calendar-large.js +305 -0
  493. package/dist/3-unit/ds-calendar.d.ts +175 -0
  494. package/dist/3-unit/ds-calendar.d.ts.map +1 -0
  495. package/dist/3-unit/ds-calendar.js +303 -0
  496. package/dist/3-unit/ds-carousel.d.ts +182 -0
  497. package/dist/3-unit/ds-carousel.d.ts.map +1 -0
  498. package/dist/3-unit/ds-carousel.js +327 -0
  499. package/dist/3-unit/ds-date-picker.d.ts +203 -0
  500. package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
  501. package/dist/3-unit/ds-date-picker.js +499 -0
  502. package/dist/3-unit/ds-form.d.ts.map +1 -1
  503. package/dist/3-unit/ds-form.js +38 -28
  504. package/dist/3-unit/ds-list.d.ts +12 -0
  505. package/dist/3-unit/ds-list.d.ts.map +1 -1
  506. package/dist/3-unit/ds-list.js +52 -1
  507. package/dist/3-unit/ds-matrix.d.ts +146 -0
  508. package/dist/3-unit/ds-matrix.d.ts.map +1 -0
  509. package/dist/3-unit/ds-matrix.js +248 -0
  510. package/dist/3-unit/ds-menu.d.ts +1 -1
  511. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  512. package/dist/3-unit/ds-menu.js +7 -4
  513. package/dist/3-unit/ds-row.d.ts +66 -0
  514. package/dist/3-unit/ds-row.d.ts.map +1 -1
  515. package/dist/3-unit/ds-row.js +80 -1
  516. package/dist/3-unit/ds-sidebar.d.ts +149 -0
  517. package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
  518. package/dist/3-unit/ds-sidebar.js +342 -0
  519. package/dist/3-unit/ds-table.d.ts +28 -10
  520. package/dist/3-unit/ds-table.d.ts.map +1 -1
  521. package/dist/3-unit/ds-table.js +53 -25
  522. package/dist/4-page/ds-dialog.d.ts +16 -1
  523. package/dist/4-page/ds-dialog.d.ts.map +1 -1
  524. package/dist/4-page/ds-dialog.js +39 -3
  525. package/dist/4-page/ds-document.d.ts +98 -0
  526. package/dist/4-page/ds-document.d.ts.map +1 -0
  527. package/dist/4-page/ds-document.js +213 -0
  528. package/dist/4-page/ds-footer.d.ts +100 -0
  529. package/dist/4-page/ds-footer.d.ts.map +1 -0
  530. package/dist/4-page/ds-footer.js +119 -0
  531. package/dist/4-page/ds-grid.d.ts +32 -12
  532. package/dist/4-page/ds-grid.d.ts.map +1 -1
  533. package/dist/4-page/ds-grid.js +30 -39
  534. package/dist/4-page/ds-header.d.ts +84 -0
  535. package/dist/4-page/ds-header.d.ts.map +1 -0
  536. package/dist/4-page/ds-header.js +143 -0
  537. package/dist/4-page/ds-page.d.ts +110 -0
  538. package/dist/4-page/ds-page.d.ts.map +1 -0
  539. package/dist/4-page/ds-page.js +155 -0
  540. package/dist/4-page/email.d.ts +2 -3
  541. package/dist/4-page/email.d.ts.map +1 -1
  542. package/dist/4-page/email.js +2 -3
  543. package/dist/components.d.ts +4 -1
  544. package/dist/components.d.ts.map +1 -1
  545. package/dist/components.js +4 -1
  546. package/dist/design-system-1.bundle.js +12322 -5523
  547. package/dist/design-system-1.bundle.js.map +1 -1
  548. package/dist/design-system-1.bundle.min.js +8771 -4115
  549. package/dist/design-system-1.bundle.min.js.map +1 -1
  550. package/dist/design-system-1.css +1 -1
  551. package/dist/feedback.js +541 -0
  552. package/dist/feedback.js.map +1 -0
  553. package/dist/{icons-extra-BoAACA4X.js → icons-extra-CiDDs7_-.js} +404 -312
  554. package/dist/icons-extra-CiDDs7_-.js.map +1 -0
  555. package/dist/{icons-extra-DlxTo_Y4.js → icons-extra-hauwCx07.js} +121 -66
  556. package/dist/icons-extra-hauwCx07.js.map +1 -0
  557. package/dist/index.d.ts +21 -6
  558. package/dist/index.d.ts.map +1 -1
  559. package/dist/index.js +21 -6
  560. package/dist/react/avatar.d.ts +5 -9
  561. package/dist/react/avatar.d.ts.map +1 -1
  562. package/dist/react/avatar.js +2 -2
  563. package/dist/react/button-split.d.ts +19 -0
  564. package/dist/react/button-split.d.ts.map +1 -0
  565. package/dist/react/{split.js → button-split.js} +12 -9
  566. package/dist/react/button.d.ts +18 -7
  567. package/dist/react/button.d.ts.map +1 -1
  568. package/dist/react/button.js +13 -4
  569. package/dist/react/carousel.d.ts +63 -0
  570. package/dist/react/carousel.d.ts.map +1 -0
  571. package/dist/react/carousel.js +47 -0
  572. package/dist/react/choice.d.ts +1 -1
  573. package/dist/react/context-menu.d.ts +337 -337
  574. package/dist/react/dialog.d.ts +684 -678
  575. package/dist/react/dialog.d.ts.map +1 -1
  576. package/dist/react/dialog.js +29 -3
  577. package/dist/react/document.d.ts +11 -0
  578. package/dist/react/document.d.ts.map +1 -0
  579. package/dist/react/document.js +10 -0
  580. package/dist/react/empty.d.ts +34 -0
  581. package/dist/react/empty.d.ts.map +1 -0
  582. package/dist/react/empty.js +8 -0
  583. package/dist/react/file-picker.d.ts +1 -1
  584. package/dist/react/footer.d.ts +13 -0
  585. package/dist/react/footer.d.ts.map +1 -0
  586. package/dist/react/footer.js +12 -0
  587. package/dist/react/header.d.ts +12 -0
  588. package/dist/react/header.d.ts.map +1 -0
  589. package/dist/react/header.js +11 -0
  590. package/dist/react/input.d.ts +31 -9
  591. package/dist/react/input.d.ts.map +1 -1
  592. package/dist/react/input.js +94 -94
  593. package/dist/react/message.d.ts +66 -0
  594. package/dist/react/message.d.ts.map +1 -0
  595. package/dist/react/message.js +37 -0
  596. package/dist/react/notice.d.ts +45 -0
  597. package/dist/react/notice.d.ts.map +1 -0
  598. package/dist/react/notice.js +34 -0
  599. package/dist/react/page.d.ts +10 -0
  600. package/dist/react/page.d.ts.map +1 -0
  601. package/dist/react/page.js +9 -0
  602. package/dist/react/progress.d.ts +107 -0
  603. package/dist/react/progress.d.ts.map +1 -0
  604. package/dist/react/progress.js +47 -0
  605. package/dist/react/sidebar.d.ts +54 -0
  606. package/dist/react/sidebar.d.ts.map +1 -0
  607. package/dist/react/sidebar.js +48 -0
  608. package/dist/react/stat.d.ts +78 -0
  609. package/dist/react/stat.d.ts.map +1 -0
  610. package/dist/react/stat.js +25 -0
  611. package/dist/react/toast.d.ts +37 -0
  612. package/dist/react/toast.d.ts.map +1 -0
  613. package/dist/react/toast.js +55 -0
  614. package/dist/shared-words-CyZYc_De.js +1818 -0
  615. package/dist/shared-words-CyZYc_De.js.map +1 -0
  616. package/dist/shared-words-DAVSET4Z.js +1800 -0
  617. package/dist/shared-words-DAVSET4Z.js.map +1 -0
  618. package/package.json +19 -6
  619. package/DS1/2-core/ds-banner.ts +0 -122
  620. package/DS1/2-core/ds-date.ts +0 -24
  621. package/DS1/2-core/ds-language.ts +0 -94
  622. package/DS1/2-core/ds-pagedots.ts +0 -52
  623. package/DS1/2-core/ds-split.ts +0 -122
  624. package/DS1/2-core/ds-textarea.ts +0 -136
  625. package/DS1/2-core/styles/ds-banner.css +0 -77
  626. package/DS1/2-core/styles/ds-date.css +0 -9
  627. package/DS1/2-core/styles/ds-language.css +0 -78
  628. package/DS1/2-core/styles/ds-pagedots.css +0 -31
  629. package/DS1/2-core/styles/ds-textarea.css +0 -27
  630. package/DS1/4-page/ds-layout.ts +0 -949
  631. package/DS1/4-page/styles/ds-layout.css +0 -246
  632. package/DS1/react/split.ts +0 -42
  633. package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
  634. package/DS1/x-icon/ezo-account-close.svg +0 -1
  635. package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
  636. package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
  637. package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
  638. package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
  639. package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
  640. package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
  641. package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
  642. package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
  643. package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
  644. package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
  645. package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
  646. package/DS1/x-icon/ezo-block-accordion.svg +0 -1
  647. package/DS1/x-icon/ezo-block-divider.svg +0 -1
  648. package/DS1/x-icon/ezo-block-group.svg +0 -1
  649. package/DS1/x-icon/ezo-block-image.svg +0 -1
  650. package/DS1/x-icon/ezo-block-section.svg +0 -1
  651. package/DS1/x-icon/ezo-block-table.svg +0 -1
  652. package/DS1/x-icon/ezo-code.svg +0 -14
  653. package/DS1/x-icon/ezo-down.svg +0 -3
  654. package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
  655. package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
  656. package/DS1/x-icon/ezo-item-button-header.svg +0 -3
  657. package/DS1/x-icon/ezo-item-button-open.svg +0 -3
  658. package/DS1/x-icon/ezo-item-button-star.svg +0 -3
  659. package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
  660. package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
  661. package/DS1/x-icon/ezo-item-star.svg +0 -5
  662. package/DS1/x-icon/ezo-left.svg +0 -3
  663. package/DS1/x-icon/ezo-logo.svg +0 -1
  664. package/DS1/x-icon/ezo-mic.svg +0 -8
  665. package/DS1/x-icon/ezo-move-column.svg +0 -14
  666. package/DS1/x-icon/ezo-move-row.svg +0 -18
  667. package/DS1/x-icon/ezo-navigation-check.svg +0 -1
  668. package/DS1/x-icon/ezo-note-back.svg +0 -5
  669. package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
  670. package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
  671. package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
  672. package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
  673. package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
  674. package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
  675. package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
  676. package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
  677. package/DS1/x-icon/ezo-note-more.svg +0 -7
  678. package/DS1/x-icon/ezo-note-star.svg +0 -5
  679. package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
  680. package/DS1/x-icon/ezo-play.svg +0 -5
  681. package/DS1/x-icon/ezo-premium-star.svg +0 -5
  682. package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
  683. package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
  684. package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
  685. package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
  686. package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
  687. package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
  688. package/DS1/x-icon/ezo-setting-blank.svg +0 -5
  689. package/DS1/x-icon/ezo-store-chevron.svg +0 -1
  690. package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
  691. package/DS1/x-icon/product-sources.json +0 -2557
  692. package/dist/2-core/ds-banner.d.ts +0 -68
  693. package/dist/2-core/ds-banner.d.ts.map +0 -1
  694. package/dist/2-core/ds-banner.js +0 -98
  695. package/dist/2-core/ds-date.d.ts +0 -16
  696. package/dist/2-core/ds-date.d.ts.map +0 -1
  697. package/dist/2-core/ds-date.js +0 -15
  698. package/dist/2-core/ds-language.d.ts +0 -75
  699. package/dist/2-core/ds-language.d.ts.map +0 -1
  700. package/dist/2-core/ds-language.js +0 -74
  701. package/dist/2-core/ds-pagedots.d.ts +0 -32
  702. package/dist/2-core/ds-pagedots.d.ts.map +0 -1
  703. package/dist/2-core/ds-pagedots.js +0 -36
  704. package/dist/2-core/ds-split.d.ts +0 -75
  705. package/dist/2-core/ds-split.d.ts.map +0 -1
  706. package/dist/2-core/ds-split.js +0 -101
  707. package/dist/2-core/ds-textarea.d.ts +0 -46
  708. package/dist/2-core/ds-textarea.d.ts.map +0 -1
  709. package/dist/2-core/ds-textarea.js +0 -121
  710. package/dist/4-page/ds-layout.d.ts +0 -31
  711. package/dist/4-page/ds-layout.d.ts.map +0 -1
  712. package/dist/4-page/ds-layout.js +0 -930
  713. package/dist/icons-extra-BoAACA4X.js.map +0 -1
  714. package/dist/icons-extra-DlxTo_Y4.js.map +0 -1
  715. package/dist/react/split.d.ts +0 -15
  716. package/dist/react/split.d.ts.map +0 -1
  717. package/dist/shared-words-Cg6Phtx0.js +0 -915
  718. package/dist/shared-words-Cg6Phtx0.js.map +0 -1
  719. package/dist/shared-words-Ddz0yUEF.js +0 -933
  720. package/dist/shared-words-Ddz0yUEF.js.map +0 -1
  721. /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
  722. /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
@@ -1,13 +1,64 @@
1
1
  import { LitElement, html, unsafeCSS } from "lit";
2
2
  import styles from "./styles/ds-list.css?inline";
3
3
  import { define } from "../0-face/define";
4
+ /** Children that are never items of the list. */
5
+ const NOT_ITEMS = new Set(["template", "script", "style", "slot"]);
6
+ /** Controls keep their own role: a link or a button that became a list item would no longer be announced as one. */
7
+ const CONTROLS = new Set(["a", "button", "input", "select", "textarea", "summary", "details"]);
4
8
  /**
5
9
  * A vertical stack of rows.
6
10
  *
11
+ * The element is a list (`role="list"`) and each element directly inside it an
12
+ * item (`role="listitem"`), unless the page gives either a role of its own.
13
+ * A link, button or other control directly inside keeps its own role: wrap it
14
+ * in a row (or another element) to make it an item.
15
+ *
7
16
  * @element ds-list
8
17
  * @attr columns - Lay the items out in this many equal columns.
9
18
  */
10
19
  export class List extends LitElement {
20
+ constructor() {
21
+ super(...arguments);
22
+ /** The items this element gave a role, so roles the page wrote are left alone. */
23
+ this.ownItems = new Set();
24
+ this.ownRole = false;
25
+ this.syncItems = () => {
26
+ const slot = this.shadowRoot?.querySelector("slot");
27
+ // Items only where the element is a list: a listbox or a page's own role
28
+ // decides its children's roles itself.
29
+ const list = this.getAttribute("role") === "list";
30
+ const items = new Set(list && slot ? slot.assignedElements().filter(item => !NOT_ITEMS.has(item.localName)) : []);
31
+ for (const item of this.ownItems) {
32
+ if (items.has(item))
33
+ continue;
34
+ if (item.getAttribute("role") === "listitem")
35
+ item.removeAttribute("role");
36
+ this.ownItems.delete(item);
37
+ }
38
+ for (const item of items) {
39
+ if (item.hasAttribute("role") || CONTROLS.has(item.localName))
40
+ continue;
41
+ item.setAttribute("role", "listitem");
42
+ this.ownItems.add(item);
43
+ }
44
+ };
45
+ }
46
+ connectedCallback() {
47
+ super.connectedCallback();
48
+ if (!this.hasAttribute("role")) {
49
+ this.setAttribute("role", "list");
50
+ this.ownRole = true;
51
+ }
52
+ }
53
+ disconnectedCallback() {
54
+ super.disconnectedCallback();
55
+ if (this.ownRole && this.getAttribute("role") === "list")
56
+ this.removeAttribute("role");
57
+ this.ownRole = false;
58
+ }
59
+ firstUpdated() {
60
+ this.syncItems();
61
+ }
11
62
  updated() {
12
63
  if (typeof this.columns === "number" && Number.isInteger(this.columns) && this.columns > 0)
13
64
  this.style.setProperty("--ds-list-columns", String(this.columns));
@@ -15,7 +66,7 @@ export class List extends LitElement {
15
66
  this.style.removeProperty("--ds-list-columns");
16
67
  }
17
68
  render() {
18
- return html `<slot></slot>`;
69
+ return html `<slot @slotchange=${this.syncItems}></slot>`;
19
70
  }
20
71
  }
21
72
  List.properties = {
@@ -0,0 +1,146 @@
1
+ import { LitElement, type PropertyValues } from "lit";
2
+ /** How a square is drawn. */
3
+ export type MatrixMarkKind = "fill" | "outline" | "stripes" | "dot" | "triangle" | "dash";
4
+ /** A row or a column. A column may stand in a group. */
5
+ export interface MatrixAxis {
6
+ id: string;
7
+ label: string;
8
+ /** The group a column stands in. */
9
+ group?: string;
10
+ }
11
+ /** A group of columns: a bar in its colour over them, its colour tinting their squares. */
12
+ export interface MatrixGroup {
13
+ id: string;
14
+ label: string;
15
+ /** A colour token or value, from the palette. */
16
+ color: string;
17
+ }
18
+ /** What is in the square where a row meets a column. */
19
+ export interface MatrixCell {
20
+ row: string;
21
+ column: string;
22
+ mark: MatrixMarkKind;
23
+ /** More about this square, added to its name. */
24
+ note?: string;
25
+ }
26
+ /** A mark and what it means, for the legend and the squares' names. */
27
+ export interface MatrixMark {
28
+ mark: MatrixMarkKind;
29
+ label: string;
30
+ }
31
+ /** Detail of `cell-press`: the row, the column and what is there, if anything. */
32
+ export interface MatrixPressDetail {
33
+ row: MatrixAxis;
34
+ column: MatrixAxis;
35
+ cell?: MatrixCell;
36
+ }
37
+ /** The columns in their groups' order, each with its group. */
38
+ export declare function orderColumns(columns: readonly MatrixAxis[], groups: readonly MatrixGroup[]): {
39
+ column: MatrixAxis;
40
+ group?: MatrixGroup;
41
+ }[];
42
+ /**
43
+ * @element ds-matrix
44
+ * @prop {MatrixAxis[]} rows - The rows, top to bottom (property only).
45
+ * @prop {MatrixAxis[]} columns - The columns; a column's `group` names its group (property only).
46
+ * @prop {MatrixGroup[]} groups - The column groups, in order, with their colours (property only).
47
+ * @prop {MatrixCell[]} cells - The marks (property only).
48
+ * @prop {MatrixMark[]} marks - What each mark means, drawn as the legend (property only).
49
+ * @prop {boolean} totals - A last row counting the marked squares in each column.
50
+ * @prop {string} totalsLabel - That row's name (`totals-label`); the shared word "Total".
51
+ * @prop {number} names - Squares for the row names: 8 by default.
52
+ * @prop {string} label - The matrix's name: a translation key, or literal words.
53
+ * @prop {boolean} literal - Show `label` and `totals-label` as written.
54
+ *
55
+ * @fires cell-press - A square was pressed, or Enter pressed on it; `{ row, column, cell }`.
56
+ * @fires row-press - A row's name was pressed; `{ row }`.
57
+ * @fires column-press - A column's name was pressed; `{ column }`.
58
+ *
59
+ * @example
60
+ * <ds-matrix label="Products and parts" literal totals></ds-matrix>
61
+ */
62
+ export declare class Matrix extends LitElement {
63
+ static properties: {
64
+ rows: {
65
+ attribute: boolean;
66
+ };
67
+ columns: {
68
+ attribute: boolean;
69
+ };
70
+ groups: {
71
+ attribute: boolean;
72
+ };
73
+ cells: {
74
+ attribute: boolean;
75
+ };
76
+ marks: {
77
+ attribute: boolean;
78
+ };
79
+ totals: {
80
+ type: BooleanConstructor;
81
+ reflect: boolean;
82
+ };
83
+ totalsLabel: {
84
+ type: StringConstructor;
85
+ attribute: string;
86
+ };
87
+ names: {
88
+ type: NumberConstructor;
89
+ };
90
+ label: {
91
+ type: StringConstructor;
92
+ };
93
+ literal: {
94
+ type: BooleanConstructor;
95
+ reflect: boolean;
96
+ };
97
+ lit: {
98
+ state: boolean;
99
+ };
100
+ focusAt: {
101
+ state: boolean;
102
+ };
103
+ };
104
+ static styles: import("lit").CSSResult[];
105
+ rows: MatrixAxis[];
106
+ columns: MatrixAxis[];
107
+ groups: MatrixGroup[];
108
+ cells: MatrixCell[];
109
+ marks: MatrixMark[];
110
+ totals: boolean;
111
+ totalsLabel: string | undefined;
112
+ names: number | undefined;
113
+ label: string | undefined;
114
+ literal: boolean;
115
+ /** The row and column under the pointer or focus, lit as a crosshair; -1 for neither. */
116
+ lit: {
117
+ row: number;
118
+ column: number;
119
+ } | undefined;
120
+ /** The square holding the one Tab stop. */
121
+ focusAt: {
122
+ row: number;
123
+ column: number;
124
+ };
125
+ private readonly relabel;
126
+ constructor();
127
+ connectedCallback(): void;
128
+ disconnectedCallback(): void;
129
+ protected willUpdate(changed: PropertyValues<this>): void;
130
+ private words;
131
+ private get ordered();
132
+ private markLabel;
133
+ private move;
134
+ private onKeyDown;
135
+ private pressCell;
136
+ private onClick;
137
+ private onPointerOver;
138
+ private mark;
139
+ render(): import("lit").TemplateResult<1>;
140
+ }
141
+ declare global {
142
+ interface HTMLElementTagNameMap {
143
+ "ds-matrix": Matrix;
144
+ }
145
+ }
146
+ //# sourceMappingURL=ds-matrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-matrix.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-matrix.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAMhF,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1F,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAOD,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE;YAGhE,UAAU;YAAU,WAAW;IAOzD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAaf;IAEF,MAAM,CAAC,MAAM,4BAA2C;IAEhD,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACzB,yFAAyF;IACjF,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACzD,2CAA2C;IACnC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAEjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IActD,iBAAiB;IAMjB,oBAAoB;IAMpB,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAKlD,OAAO,CAAC,KAAK;IAKb,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,CAAC,SAAS;YAIH,IAAI;IASlB,OAAO,CAAC,SAAS,CAqBf;IAEF,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,OAAO,CAOb;IAEF,OAAO,CAAC,aAAa,CAInB;IAEF,OAAO,CAAC,IAAI;IAIZ,MAAM;CAgFP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
@@ -0,0 +1,248 @@
1
+ // ds-matrix.ts
2
+ // Rows against columns, one 20px square where each pair meets: read across a
3
+ // row for what it has, down a column for who has it. Columns stand in
4
+ // coloured groups whose colour tints the squares below; their names rise at
5
+ // 45° from the middle of their column. A mark in a square says how the row
6
+ // and column meet, and the legend below names the marks.
7
+ import { LitElement, html, nothing, unsafeCSS } from "lit";
8
+ import { define } from "../0-face/define";
9
+ import { getText } from "../0-face/i18n";
10
+ import metrics from "../1-root/component-metrics.css?inline";
11
+ import styles from "./styles/ds-matrix.css?inline";
12
+ const MARKS = ["fill", "outline", "stripes", "dot", "triangle", "dash"];
13
+ const whole = (value, least, fallback) => typeof value === "number" && Number.isFinite(value) ? Math.max(least, Math.floor(value)) : fallback;
14
+ /** The columns in their groups' order, each with its group. */
15
+ export function orderColumns(columns, groups) {
16
+ const byId = new Map(groups.map(group => [group.id, group]));
17
+ const seen = new Set();
18
+ const ordered = [];
19
+ for (const id of [...groups.map(group => group.id), ...columns.map(column => column.group ?? "")]) {
20
+ if (seen.has(id))
21
+ continue;
22
+ seen.add(id);
23
+ for (const column of columns)
24
+ if ((column.group ?? "") === id)
25
+ ordered.push({ column, group: byId.get(id) });
26
+ }
27
+ return ordered;
28
+ }
29
+ /**
30
+ * @element ds-matrix
31
+ * @prop {MatrixAxis[]} rows - The rows, top to bottom (property only).
32
+ * @prop {MatrixAxis[]} columns - The columns; a column's `group` names its group (property only).
33
+ * @prop {MatrixGroup[]} groups - The column groups, in order, with their colours (property only).
34
+ * @prop {MatrixCell[]} cells - The marks (property only).
35
+ * @prop {MatrixMark[]} marks - What each mark means, drawn as the legend (property only).
36
+ * @prop {boolean} totals - A last row counting the marked squares in each column.
37
+ * @prop {string} totalsLabel - That row's name (`totals-label`); the shared word "Total".
38
+ * @prop {number} names - Squares for the row names: 8 by default.
39
+ * @prop {string} label - The matrix's name: a translation key, or literal words.
40
+ * @prop {boolean} literal - Show `label` and `totals-label` as written.
41
+ *
42
+ * @fires cell-press - A square was pressed, or Enter pressed on it; `{ row, column, cell }`.
43
+ * @fires row-press - A row's name was pressed; `{ row }`.
44
+ * @fires column-press - A column's name was pressed; `{ column }`.
45
+ *
46
+ * @example
47
+ * <ds-matrix label="Products and parts" literal totals></ds-matrix>
48
+ */
49
+ export class Matrix extends LitElement {
50
+ constructor() {
51
+ super();
52
+ this.relabel = () => this.requestUpdate();
53
+ this.onKeyDown = (event) => {
54
+ const cell = event.composedPath()[0].closest?.(".cell[data-row]");
55
+ if (!cell)
56
+ return;
57
+ const row = Number(cell.dataset.row), column = Number(cell.dataset.column);
58
+ const across = getComputedStyle(this).direction === "rtl" ? -1 : 1;
59
+ const mod = event.ctrlKey || event.metaKey;
60
+ const moves = {
61
+ ArrowUp: [row - 1, column],
62
+ ArrowDown: [row + 1, column],
63
+ ArrowLeft: [row, column - across],
64
+ ArrowRight: [row, column + across],
65
+ Home: mod ? [0, 0] : [row, 0],
66
+ End: mod ? [this.rows.length - 1, this.columns.length - 1] : [row, this.columns.length - 1],
67
+ };
68
+ if (moves[event.key]) {
69
+ event.preventDefault();
70
+ void this.move(...moves[event.key]);
71
+ }
72
+ else if (event.key === "Enter" || event.key === " ") {
73
+ event.preventDefault();
74
+ this.pressCell(row, column);
75
+ }
76
+ };
77
+ this.onClick = (event) => {
78
+ const target = event.composedPath()[0].closest?.("[data-row], [data-column]");
79
+ if (!target || target.classList.contains("count"))
80
+ return;
81
+ const { row, column } = target.dataset;
82
+ if (row !== undefined && column !== undefined)
83
+ this.pressCell(Number(row), Number(column));
84
+ else if (row !== undefined)
85
+ this.dispatchEvent(new CustomEvent("row-press", { bubbles: true, composed: true, detail: { row: this.rows[Number(row)] } }));
86
+ else if (column !== undefined)
87
+ this.dispatchEvent(new CustomEvent("column-press", { bubbles: true, composed: true, detail: { column: this.ordered[Number(column)].column } }));
88
+ };
89
+ this.onPointerOver = (event) => {
90
+ const target = event.composedPath()[0].closest?.("[data-row], [data-column]");
91
+ const next = target ? { row: Number(target.dataset.row ?? -1), column: Number(target.dataset.column ?? -1) } : undefined;
92
+ if (next?.row !== this.lit?.row || next?.column !== this.lit?.column)
93
+ this.lit = next;
94
+ };
95
+ this.rows = [];
96
+ this.columns = [];
97
+ this.groups = [];
98
+ this.cells = [];
99
+ this.marks = [];
100
+ this.totals = false;
101
+ this.literal = false;
102
+ this.focusAt = { row: 0, column: 0 };
103
+ }
104
+ connectedCallback() {
105
+ super.connectedCallback();
106
+ window.addEventListener("language-changed", this.relabel);
107
+ window.addEventListener("translations-loaded", this.relabel);
108
+ }
109
+ disconnectedCallback() {
110
+ window.removeEventListener("language-changed", this.relabel);
111
+ window.removeEventListener("translations-loaded", this.relabel);
112
+ super.disconnectedCallback();
113
+ }
114
+ willUpdate(changed) {
115
+ super.willUpdate(changed);
116
+ this.style.setProperty("--ds-matrix-names", String(whole(this.names, 2, 8)));
117
+ }
118
+ words(value, fallback) {
119
+ if (value && this.literal)
120
+ return value;
121
+ return getText(value || fallback) || value || fallback;
122
+ }
123
+ get ordered() {
124
+ return orderColumns(this.columns ?? [], this.groups ?? []);
125
+ }
126
+ markLabel(mark) {
127
+ return this.marks.find(entry => entry.mark === mark)?.label ?? mark;
128
+ }
129
+ async move(row, column) {
130
+ const rows = this.rows.length, columns = this.columns.length;
131
+ if (!rows || !columns)
132
+ return;
133
+ this.focusAt = { row: Math.max(0, Math.min(rows - 1, row)), column: Math.max(0, Math.min(columns - 1, column)) };
134
+ this.lit = this.focusAt;
135
+ await this.updateComplete;
136
+ this.renderRoot.querySelector(`.cell[data-row="${this.focusAt.row}"][data-column="${this.focusAt.column}"]`)?.focus();
137
+ }
138
+ pressCell(row, column) {
139
+ const entry = this.ordered[column];
140
+ const axis = this.rows[row];
141
+ if (!entry || !axis)
142
+ return;
143
+ const cell = this.cells.find(item => item.row === axis.id && item.column === entry.column.id);
144
+ this.focusAt = { row, column };
145
+ this.dispatchEvent(new CustomEvent("cell-press", { bubbles: true, composed: true, detail: { row: axis, column: entry.column, cell } }));
146
+ }
147
+ mark(mark) {
148
+ return MARKS.includes(mark) ? html `<i class="mark" data-mark=${mark} aria-hidden="true"></i>` : nothing;
149
+ }
150
+ render() {
151
+ const ordered = this.ordered;
152
+ const rows = this.rows ?? [];
153
+ const byPair = new Map((this.cells ?? []).map(cell => [`${cell.row}>${cell.column}`, cell]));
154
+ const lit = this.lit;
155
+ const focus = this.focusAt;
156
+ // One bar over each run of columns in the same group.
157
+ const bars = [];
158
+ ordered.forEach(({ group }, index) => {
159
+ const last = bars.at(-1);
160
+ if (last && last.group === group)
161
+ last.span++;
162
+ else
163
+ bars.push({ group, start: index, span: 1 });
164
+ });
165
+ const tint = (group) => (group ? `--ds-matrix-colour: ${group.color};` : "");
166
+ const counts = ordered.map(({ column }) => (this.cells ?? []).filter(cell => cell.column === column.id && cell.mark !== "dash" && rows.some(row => row.id === cell.row)).length);
167
+ const body = rows.length + (this.totals ? 1 : 0);
168
+ const name = this.label ? this.words(this.label, this.label) : undefined;
169
+ return html `<div class="matrix" part="matrix" @pointerover=${this.onPointerOver} @pointerleave=${() => (this.lit = undefined)}>
170
+ <div
171
+ class="grid"
172
+ part="grid"
173
+ role="grid"
174
+ aria-label=${name ?? nothing}
175
+ style=${`--ds-matrix-columns: ${ordered.length}; --ds-matrix-body: ${body};`}
176
+ @keydown=${this.onKeyDown}
177
+ @click=${this.onClick}
178
+ >
179
+ ${bars.map(bar => bar.group
180
+ ? html `<span class="group" part="group" aria-hidden="true" style=${`grid-column: ${bar.start + 2} / span ${bar.span}; ${tint(bar.group)}`}><span>${bar.group.label}</span></span>`
181
+ : nothing)}
182
+ <div role="row" class="row">
183
+ <span role="columnheader" class="corner"></span>
184
+ ${ordered.map(({ column, group }, index) => html `<span
185
+ role="columnheader"
186
+ class="column"
187
+ part="column"
188
+ data-column=${index}
189
+ ?data-lit=${lit?.column === index}
190
+ style=${`grid-column: ${index + 2}; ${tint(group)}`}
191
+ ><span>${column.label}</span></span>`)}
192
+ </div>
193
+ ${rows.map((row, r) => html `<div role="row" class="row">
194
+ <span role="rowheader" class="name" part="name" data-row=${r} ?data-lit=${lit?.row === r} style=${`grid-row: ${r + 3}`}>${row.label}</span>
195
+ ${ordered.map(({ column, group }, c) => {
196
+ const cell = byPair.get(`${row.id}>${column.id}`);
197
+ const words = `${row.label}, ${column.label}: ${cell ? this.markLabel(cell.mark) : "–"}${cell?.note ? `. ${cell.note}` : ""}`;
198
+ return html `<span
199
+ role="gridcell"
200
+ class="cell"
201
+ part="cell"
202
+ data-row=${r}
203
+ data-column=${c}
204
+ tabindex=${focus.row === r && focus.column === c ? 0 : -1}
205
+ aria-label=${words}
206
+ data-tooltip=${words}
207
+ ?data-lit=${lit !== undefined && (lit.row === r || lit.column === c)}
208
+ style=${`grid-row: ${r + 3}; grid-column: ${c + 2}; ${tint(group)}`}
209
+ >${cell ? this.mark(cell.mark) : nothing}</span>`;
210
+ })}
211
+ </div>`)}
212
+ ${this.totals
213
+ ? html `<div role="row" class="row">
214
+ <span role="rowheader" class="name totals" style=${`grid-row: ${rows.length + 3}`}>${this.words(this.totalsLabel, "Total")}</span>
215
+ ${counts.map((count, c) => html `<span
216
+ role="gridcell"
217
+ class="cell count"
218
+ part="count"
219
+ data-column=${c}
220
+ ?data-lit=${lit?.column === c}
221
+ style=${`grid-row: ${rows.length + 3}; grid-column: ${c + 2}; ${tint(ordered[c].group)}`}
222
+ >${count || ""}</span>`)}
223
+ </div>`
224
+ : nothing}
225
+ ${body && ordered.length ? html `<span class="frame" aria-hidden="true"></span>` : nothing}
226
+ </div>
227
+ ${this.marks.length
228
+ ? html `<div class="legend" part="legend">${this.marks.map(entry => html `<span class="key"><span class="key-mark">${this.mark(entry.mark)}</span>${entry.label}</span>`)}</div>`
229
+ : nothing}
230
+ </div>`;
231
+ }
232
+ }
233
+ Matrix.properties = {
234
+ rows: { attribute: false },
235
+ columns: { attribute: false },
236
+ groups: { attribute: false },
237
+ cells: { attribute: false },
238
+ marks: { attribute: false },
239
+ totals: { type: Boolean, reflect: true },
240
+ totalsLabel: { type: String, attribute: "totals-label" },
241
+ names: { type: Number },
242
+ label: { type: String },
243
+ literal: { type: Boolean, reflect: true },
244
+ lit: { state: true },
245
+ focusAt: { state: true },
246
+ };
247
+ Matrix.styles = [unsafeCSS(metrics), unsafeCSS(styles)];
248
+ define("ds-matrix", Matrix);
@@ -119,7 +119,7 @@ export declare class Menu extends LitElement {
119
119
  openAt(point: {
120
120
  x: number;
121
121
  y: number;
122
- }, invokingControl?: HTMLElement): void;
122
+ }, invokingControl?: HTMLElement | null): void;
123
123
  /** A selected action dismisses its whole branch. Products can decline it. */
124
124
  select(): void;
125
125
  private contextControl;
@@ -1 +1 @@
1
- {"version":3,"file":"ds-menu.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-menu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ds-menu.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-menu.ts"],"names":[],"mappings":"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"}
@@ -136,11 +136,14 @@ export class Menu extends LitElement {
136
136
  const left = viewport?.offsetLeft ?? 0, top = viewport?.offsetTop ?? 0;
137
137
  const width = viewport?.width ?? view.innerWidth, height = viewport?.height ?? view.innerHeight;
138
138
  const gap = parseFloat(view.getComputedStyle(this).scrollPaddingTop) || 10, unit = gap * 2;
139
- const room = Math.max(0, width - 2 * gap);
139
+ // Whole squares: the room and the height a menu may take round down to
140
+ // them, and a menu as wide as its anchor rounds that width up.
141
+ const squares = (length, round) => round(Math.max(0, length) / unit + (round === Math.floor ? 0.001 : -0.001)) * unit;
142
+ const room = squares(width - 2 * gap, Math.floor);
140
143
  this.style.maxWidth = `${room}px`;
141
- this.style.setProperty("--ds-menu-anchor-width", `${Math.min(room, Math.max(4 * unit, rect.width))}px`);
144
+ this.style.setProperty("--ds-menu-anchor-width", `${Math.min(room, Math.max(4 * unit, squares(rect.width, Math.ceil)))}px`);
142
145
  if (this.placement === "right" || this.placement === "left" || this.triggerMode === "submenu") {
143
- this.style.setProperty("--ds-menu-available-height", `${Math.max(0, height - 2 * gap)}px`);
146
+ this.style.setProperty("--ds-menu-available-height", `${squares(height - 2 * gap, Math.floor)}px`);
144
147
  const box = this.getBoundingClientRect();
145
148
  const preferLeft = this.placement === "left" || view.getComputedStyle(this).direction === "rtl";
146
149
  const toRight = left + width - rect.right, toLeft = rect.left - left;
@@ -153,7 +156,7 @@ export class Menu extends LitElement {
153
156
  const frame = this.shadowRoot?.querySelector(".frame");
154
157
  const needed = Math.min(frame?.scrollHeight ?? this.scrollHeight, 8 * unit);
155
158
  const up = this.placement === "top" ? above >= needed || above >= below : below < needed && above > below;
156
- this.style.setProperty("--ds-menu-available-height", `${Math.max(0, Math.min(height - 2 * gap, up ? above : below))}px`);
159
+ this.style.setProperty("--ds-menu-available-height", `${squares(Math.min(height - 2 * gap, up ? above : below), Math.floor)}px`);
157
160
  const box = this.getBoundingClientRect();
158
161
  this.style.left = `${Math.max(left + gap, Math.min(rect.left, left + width - gap - box.width))}px`;
159
162
  this.style.top = `${Math.max(top + gap, up ? rect.top - gap - box.height : rect.bottom + gap)}px`;
@@ -2,11 +2,30 @@ import { LitElement } from "lit";
2
2
  /**
3
3
  * A horizontal run of elements one row (`--ds-row-height`) tall.
4
4
  *
5
+ * With `href` the whole row is one link, with `interactive` one button: it
6
+ * shows the pointer over it, the press and the focus ring across the row,
7
+ * and its content keeps the row's layout. Controls in the `end` slot stay
8
+ * separately pressable. `current` marks the destination being shown
9
+ * (`aria-current="page"`); `nav` draws the row as a navigation row.
10
+ *
5
11
  * @element ds-row
6
12
  * @attr fill - Spread the children from edge to edge.
7
13
  * @attr centered - Centre the children.
8
14
  * @attr end - Push the children to the end.
9
15
  * @attr auto - Size to the content instead of one row.
16
+ * @attr stacked - Stack the children, each on its own line, sized to them (a tile or a card).
17
+ * @attr href - Make the row a link to this address.
18
+ * @attr interactive - Make the row a button.
19
+ * @attr disabled - Keep the row from being pressed.
20
+ * @attr current - The destination being shown: `aria-current="page"`, or the value given (`step`, `location`, …).
21
+ * @attr nav - Draw a navigation row: corners of two pixels, as the sidebar's rows.
22
+ * @attr label - The accessible name, when the row's words do not say it.
23
+ * @attr target - Where a link opens (`_blank`, …).
24
+ * @attr rel - The link's relationship (`noopener`, …).
25
+ * @slot - The row's content, inside its press target.
26
+ * @slot end - Controls of their own after the content, outside the press target.
27
+ * @fires ds-row-press - `{ href }`: the row was pressed. Cancel it to route a link yourself; a modified click on a link is left to the browser.
28
+ * @csspart target - The link or button that is the row's press target.
10
29
  */
11
30
  export declare class Row extends LitElement {
12
31
  static properties: {
@@ -26,13 +45,60 @@ export declare class Row extends LitElement {
26
45
  type: BooleanConstructor;
27
46
  reflect: boolean;
28
47
  };
48
+ stacked: {
49
+ type: BooleanConstructor;
50
+ reflect: boolean;
51
+ };
52
+ href: {
53
+ type: StringConstructor;
54
+ reflect: boolean;
55
+ };
56
+ interactive: {
57
+ type: BooleanConstructor;
58
+ reflect: boolean;
59
+ };
60
+ disabled: {
61
+ type: BooleanConstructor;
62
+ reflect: boolean;
63
+ };
64
+ current: {
65
+ type: StringConstructor;
66
+ reflect: boolean;
67
+ };
68
+ nav: {
69
+ type: BooleanConstructor;
70
+ reflect: boolean;
71
+ };
72
+ label: {
73
+ type: StringConstructor;
74
+ };
75
+ target: {
76
+ type: StringConstructor;
77
+ };
78
+ rel: {
79
+ type: StringConstructor;
80
+ };
29
81
  };
30
82
  fill: boolean;
31
83
  centered: boolean;
32
84
  end: boolean;
33
85
  auto: boolean;
86
+ stacked: boolean;
87
+ href: string | undefined;
88
+ interactive: boolean;
89
+ disabled: boolean;
90
+ current: string | null | undefined;
91
+ nav: boolean;
92
+ label: string | undefined;
93
+ target: string | undefined;
94
+ rel: string | undefined;
34
95
  constructor();
35
96
  static styles: import("lit").CSSResult;
97
+ /** The `aria-current` value, or none. */
98
+ private get currentValue();
99
+ /** Focuses the press target, so `row.focus()` lands on the link or button. */
100
+ focus(options?: FocusOptions): void;
101
+ private press;
36
102
  render(): import("lit").TemplateResult<1>;
37
103
  }
38
104
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"ds-row.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-row.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAIlD;;;;;;;;GAQG;AACH,qBAAa,GAAI,SAAQ,UAAU;IACjC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;MAKf;IAEM,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;;IAUtB,MAAM,CAAC,MAAM,0BAAqB;IAElC,MAAM;CAGP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,QAAQ,EAAE,GAAG,CAAC;KACf;CACF"}
1
+ {"version":3,"file":"ds-row.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-row.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAQlD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,GAAI,SAAQ,UAAU;IACjC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAcf;IAEM,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;;IAmBhC,MAAM,CAAC,MAAM,0BAAqB;IAElC,yCAAyC;IACzC,OAAO,KAAK,YAAY,GAIvB;IAED,8EAA8E;IAC9E,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY;IAM5B,OAAO,CAAC,KAAK;IAQb,MAAM;CAcP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,QAAQ,EAAE,GAAG,CAAC;KACf;CACF"}