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

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