@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
@@ -1,14 +1,36 @@
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";
5
+ /** The values `aria-current` takes besides `page`. */
6
+ const CURRENT = new Set(["page", "step", "location", "date", "time", "true"]);
4
7
  /**
5
8
  * A horizontal run of elements one row (`--ds-row-height`) tall.
6
9
  *
10
+ * With `href` the whole row is one link, with `interactive` one button: it
11
+ * shows the pointer over it, the press and the focus ring across the row,
12
+ * and its content keeps the row's layout. Controls in the `end` slot stay
13
+ * separately pressable. `current` marks the destination being shown
14
+ * (`aria-current="page"`); `nav` draws the row as a navigation row.
15
+ *
7
16
  * @element ds-row
8
17
  * @attr fill - Spread the children from edge to edge.
9
18
  * @attr centered - Centre the children.
10
19
  * @attr end - Push the children to the end.
11
20
  * @attr auto - Size to the content instead of one row.
21
+ * @attr stacked - Stack the children, each on its own line, sized to them (a tile or a card).
22
+ * @attr href - Make the row a link to this address.
23
+ * @attr interactive - Make the row a button.
24
+ * @attr disabled - Keep the row from being pressed.
25
+ * @attr current - The destination being shown: `aria-current="page"`, or the value given (`step`, `location`, …).
26
+ * @attr nav - Draw a navigation row: corners of two pixels, as the sidebar's rows.
27
+ * @attr label - The accessible name, when the row's words do not say it.
28
+ * @attr target - Where a link opens (`_blank`, …).
29
+ * @attr rel - The link's relationship (`noopener`, …).
30
+ * @slot - The row's content, inside its press target.
31
+ * @slot end - Controls of their own after the content, outside the press target.
32
+ * @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.
33
+ * @csspart target - The link or button that is the row's press target.
12
34
  */
13
35
  export class Row extends LitElement {
14
36
  constructor() {
@@ -17,9 +39,57 @@ export class Row extends LitElement {
17
39
  this.centered = false;
18
40
  this.end = false;
19
41
  this.auto = false;
42
+ this.stacked = false;
43
+ this.href = undefined;
44
+ this.interactive = false;
45
+ this.disabled = false;
46
+ this.current = undefined;
47
+ this.nav = false;
48
+ this.label = undefined;
49
+ this.target = undefined;
50
+ this.rel = undefined;
51
+ }
52
+ /** The `aria-current` value, or none. */
53
+ get currentValue() {
54
+ const value = this.current;
55
+ if (value === null || value === undefined || value === "false")
56
+ return undefined;
57
+ return CURRENT.has(value) ? value : "page";
58
+ }
59
+ /** Focuses the press target, so `row.focus()` lands on the link or button. */
60
+ focus(options) {
61
+ const target = this.renderRoot?.querySelector(".target");
62
+ if (target)
63
+ target.focus(options);
64
+ else
65
+ super.focus(options);
66
+ }
67
+ press(event) {
68
+ if (this.disabled) {
69
+ event.preventDefault();
70
+ return;
71
+ }
72
+ // A link keeps the browser's new tab, download and context menu.
73
+ if (this.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0))
74
+ return;
75
+ const go = this.dispatchEvent(new CustomEvent("ds-row-press", { detail: { href: this.href || undefined }, bubbles: true, composed: true, cancelable: true }));
76
+ if (!go)
77
+ event.preventDefault();
20
78
  }
21
79
  render() {
22
- return html `<slot></slot>`;
80
+ if (!this.href && !this.interactive)
81
+ return html `<slot></slot>`;
82
+ const current = this.currentValue;
83
+ const label = this.label || undefined;
84
+ const content = html `<slot></slot>`;
85
+ const target = this.href
86
+ ? this.disabled
87
+ ? html `<a class="target" part="target" role="link" aria-disabled="true" aria-label=${ifDefined(label)}>${content}</a>`
88
+ : html `<a class="target" part="target" href=${this.href} target=${ifDefined(this.target || undefined)} rel=${ifDefined(this.rel || undefined)}
89
+ aria-current=${ifDefined(current)} aria-label=${ifDefined(label)} @click=${this.press}>${content}</a>`
90
+ : html `<button class="target" part="target" type="button" ?disabled=${this.disabled}
91
+ aria-current=${ifDefined(current)} aria-label=${ifDefined(label)} @click=${this.press}>${content}</button>`;
92
+ return html `${target}<slot name="end"></slot>`;
23
93
  }
24
94
  }
25
95
  Row.properties = {
@@ -27,6 +97,15 @@ Row.properties = {
27
97
  centered: { type: Boolean, reflect: true },
28
98
  end: { type: Boolean, reflect: true },
29
99
  auto: { type: Boolean, reflect: true },
100
+ stacked: { type: Boolean, reflect: true },
101
+ href: { type: String, reflect: true },
102
+ interactive: { type: Boolean, reflect: true },
103
+ disabled: { type: Boolean, reflect: true },
104
+ current: { type: String, reflect: true },
105
+ nav: { type: Boolean, reflect: true },
106
+ label: { type: String },
107
+ target: { type: String },
108
+ rel: { type: String },
30
109
  };
31
110
  Row.styles = unsafeCSS(styles);
32
111
  define("ds-row", Row);
@@ -0,0 +1,108 @@
1
+ import { LitElement } from "lit";
2
+ import "../0-face/tooltips";
3
+ import "../2-core/ds-button";
4
+ import "../2-core/ds-icon";
5
+ import "./ds-row";
6
+ /** Visible rows. The application owns hierarchy, expansion, selection and routing. */
7
+ export interface SidebarItem {
8
+ id: string;
9
+ /** Words a person reads; shown as written, never translated. */
10
+ label: string;
11
+ /** Decorative leading icon; the label remains the accessible name. */
12
+ icon?: string;
13
+ /** 0 for a row at the root; each level stands further in. */
14
+ depth?: number;
15
+ href?: string;
16
+ /** `true` open, `false` closed; leave it out for a leaf. */
17
+ expanded?: boolean;
18
+ /** The destination being shown (navigation). */
19
+ current?: boolean;
20
+ /** The row chosen (a tree). */
21
+ selected?: boolean;
22
+ disabled?: boolean;
23
+ /** Small muted words at the row's end: a count, a size. */
24
+ meta?: string;
25
+ action?: {
26
+ id: string;
27
+ label: string;
28
+ };
29
+ }
30
+ /**
31
+ * Compact navigation composed from Row, Button and Icon: the application's
32
+ * places, each row a link or a button and its own Tab stop. A label cut
33
+ * short by the column's width shows in full in the shared tooltip
34
+ * (`data-tooltip`, drawn by `0-face/tooltips.ts`); a label that fits carries
35
+ * none, and no row carries the browser's `title`.
36
+ *
37
+ * With `tree`, it is a tree of the things inside one place (files, groups, a
38
+ * page's parts): rows one square high, each level one square further in, a
39
+ * disclosure arrow on its own square before each label. `role="tree"` with
40
+ * one `role="treeitem"` per row, `aria-level`, `aria-expanded` and
41
+ * `aria-selected`; one Tab stop, the keyboard of the tree pattern (see
42
+ * `0-face/sidebar.ts`). The application keeps the rows: it passes the
43
+ * visible ones in `items`, in order, and answers the events.
44
+ *
45
+ * @element ds-sidebar
46
+ * @attr label - The navigation's or the tree's accessible name.
47
+ * @attr tree - A tree of nested things instead of navigation.
48
+ * @fires sidebar-toggle - `{ id, expanded }`: a row asks to open or close.
49
+ * @fires sidebar-activate - `{ id }`: a row was pressed (navigation), or Enter or a double click opened one (a tree).
50
+ * @fires sidebar-select - `{ id }`: a click, Space or Enter chose a tree row.
51
+ * @fires sidebar-action - `{ id, action }`: a row's own action was pressed.
52
+ */
53
+ export declare class Sidebar extends LitElement {
54
+ static properties: {
55
+ items: {
56
+ attribute: boolean;
57
+ };
58
+ label: {
59
+ type: StringConstructor;
60
+ };
61
+ empty: {
62
+ type: StringConstructor;
63
+ };
64
+ tree: {
65
+ type: BooleanConstructor;
66
+ reflect: boolean;
67
+ };
68
+ };
69
+ items: SidebarItem[];
70
+ label: string;
71
+ empty: string;
72
+ tree: boolean;
73
+ static styles: import("lit").CSSResult;
74
+ /** In a tree, the row that holds the Tab stop. */
75
+ private focusId?;
76
+ constructor();
77
+ private resizeObserver?;
78
+ private fontsReady;
79
+ connectedCallback(): void;
80
+ disconnectedCallback(): void;
81
+ updated(): void;
82
+ /** Only a label that does not fit its row gets a tooltip, holding the whole label. */
83
+ private markCutLabels;
84
+ private request;
85
+ private toggle;
86
+ private activate;
87
+ /** Moves the focus to a row after `updateComplete`. */
88
+ focusItem(id: string): void;
89
+ /** Scrolls the current destination, or the selected tree row, into view. */
90
+ scrollToCurrent(): void;
91
+ /** The row a pointer or keyboard event happened on, for a context menu or a drag of the application's own. */
92
+ itemFromEvent(event: Event): SidebarItem | undefined;
93
+ private row;
94
+ /** A tree's Tab stop: the row last focused while it is still shown, else the selected row, else the first available. */
95
+ private stop;
96
+ private press;
97
+ private open;
98
+ private treeKeydown;
99
+ private renderTree;
100
+ private navigate;
101
+ render(): import("lit").TemplateResult<1>;
102
+ }
103
+ declare global {
104
+ interface HTMLElementTagNameMap {
105
+ "ds-sidebar": Sidebar;
106
+ }
107
+ }
108
+ //# sourceMappingURL=ds-sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-sidebar.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-sidebar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,KAAK,CAAC;AAK3D,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,UAAU,CAAC;AAGlB,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;MAKf;IACM,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,MAAM,0BAAqB;IAElC,kDAAkD;IAClD,OAAO,CAAC,OAAO,CAAC,CAAS;;IAUzB,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,UAAU,CAAS;IAE3B,iBAAiB;IAWjB,oBAAoB;IAKpB,OAAO;IAIP,sFAAsF;IACtF,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,QAAQ;IAQhB,uDAAuD;IACvD,SAAS,CAAC,EAAE,EAAE,MAAM;IAOpB,4EAA4E;IAC5E,eAAe;IAIf,8GAA8G;IAC9G,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,GAAG,SAAS;IAKpD,OAAO,CAAC,GAAG;IAIX,wHAAwH;IACxH,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IAqClB,OAAO,CAAC,QAAQ;IAqBhB,MAAM;CAiCP;AAGD,OAAO,CAAC,MAAM,CAAC;IAAE,UAAU,qBAAqB;QAAG,YAAY,EAAE,OAAO,CAAA;KAAE;CAAE"}
@@ -0,0 +1,268 @@
1
+ import { LitElement, html, nothing, unsafeCSS } from "lit";
2
+ import { repeat } from "lit/directives/repeat.js";
3
+ import { ifDefined } from "lit/directives/if-defined.js";
4
+ import { define } from "../0-face/define";
5
+ import { treeStep } from "../0-face/sidebar";
6
+ import "../0-face/tooltips";
7
+ import "../2-core/ds-button";
8
+ import "../2-core/ds-icon";
9
+ import "./ds-row";
10
+ import styles from "./styles/ds-sidebar.css?inline";
11
+ /**
12
+ * Compact navigation composed from Row, Button and Icon: the application's
13
+ * places, each row a link or a button and its own Tab stop. A label cut
14
+ * short by the column's width shows in full in the shared tooltip
15
+ * (`data-tooltip`, drawn by `0-face/tooltips.ts`); a label that fits carries
16
+ * none, and no row carries the browser's `title`.
17
+ *
18
+ * With `tree`, it is a tree of the things inside one place (files, groups, a
19
+ * page's parts): rows one square high, each level one square further in, a
20
+ * disclosure arrow on its own square before each label. `role="tree"` with
21
+ * one `role="treeitem"` per row, `aria-level`, `aria-expanded` and
22
+ * `aria-selected`; one Tab stop, the keyboard of the tree pattern (see
23
+ * `0-face/sidebar.ts`). The application keeps the rows: it passes the
24
+ * visible ones in `items`, in order, and answers the events.
25
+ *
26
+ * @element ds-sidebar
27
+ * @attr label - The navigation's or the tree's accessible name.
28
+ * @attr tree - A tree of nested things instead of navigation.
29
+ * @fires sidebar-toggle - `{ id, expanded }`: a row asks to open or close.
30
+ * @fires sidebar-activate - `{ id }`: a row was pressed (navigation), or Enter or a double click opened one (a tree).
31
+ * @fires sidebar-select - `{ id }`: a click, Space or Enter chose a tree row.
32
+ * @fires sidebar-action - `{ id, action }`: a row's own action was pressed.
33
+ */
34
+ export class Sidebar extends LitElement {
35
+ constructor() {
36
+ super();
37
+ this.fontsReady = false;
38
+ this.items = [];
39
+ this.label = "Navigation";
40
+ this.empty = "No items";
41
+ this.tree = false;
42
+ }
43
+ connectedCallback() {
44
+ super.connectedCallback();
45
+ if (typeof ResizeObserver !== "undefined") {
46
+ this.resizeObserver ?? (this.resizeObserver = new ResizeObserver(() => this.markCutLabels()));
47
+ this.resizeObserver.observe(this);
48
+ }
49
+ // Labels measured before the typeface arrives are measured again once it has.
50
+ const fonts = this.fontsReady ? undefined : document.fonts?.ready;
51
+ if (fonts)
52
+ void fonts.then(() => { this.fontsReady = true; this.markCutLabels(); });
53
+ }
54
+ disconnectedCallback() {
55
+ this.resizeObserver?.disconnect();
56
+ super.disconnectedCallback();
57
+ }
58
+ updated() {
59
+ this.markCutLabels();
60
+ }
61
+ /** Only a label that does not fit its row gets a tooltip, holding the whole label. */
62
+ markCutLabels() {
63
+ const labels = new Map(this.items.map(item => [item.id, item.label]));
64
+ this.renderRoot.querySelectorAll("[data-item]").forEach(control => {
65
+ const name = control.querySelector(".name");
66
+ const label = labels.get(control.dataset.item ?? "");
67
+ if (label && name && name.scrollWidth > name.clientWidth)
68
+ control.dataset.tooltip = label;
69
+ else
70
+ delete control.dataset.tooltip;
71
+ });
72
+ }
73
+ request(name, detail) {
74
+ return this.dispatchEvent(new CustomEvent(`sidebar-${name}`, { detail, bubbles: true, composed: true, cancelable: true }));
75
+ }
76
+ toggle(item) {
77
+ this.request("toggle", { id: item.id, expanded: !item.expanded });
78
+ }
79
+ activate(event, item) {
80
+ if (item.disabled) {
81
+ event.preventDefault();
82
+ return;
83
+ }
84
+ // Let native links retain new-tab, download and context-menu behaviour.
85
+ if (item.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0))
86
+ return;
87
+ if (!item.href && item.expanded !== undefined) {
88
+ this.toggle(item);
89
+ return;
90
+ }
91
+ if (!this.request("activate", { id: item.id }))
92
+ event.preventDefault();
93
+ }
94
+ /** Moves the focus to a row after `updateComplete`. */
95
+ focusItem(id) {
96
+ const row = this.row(id);
97
+ if (!row)
98
+ return;
99
+ if (this.tree) {
100
+ this.focusId = id;
101
+ this.requestUpdate();
102
+ row.tabIndex = 0;
103
+ }
104
+ row.focus();
105
+ }
106
+ /** Scrolls the current destination, or the selected tree row, into view. */
107
+ scrollToCurrent() {
108
+ this.renderRoot.querySelector('[aria-current="page"], [aria-selected="true"]')?.scrollIntoView({ block: "nearest" });
109
+ }
110
+ /** The row a pointer or keyboard event happened on, for a context menu or a drag of the application's own. */
111
+ itemFromEvent(event) {
112
+ const row = event.composedPath().find((node) => node instanceof HTMLElement && node.dataset.item !== undefined && this.renderRoot.contains(node));
113
+ return row ? this.items.find(item => item.id === row.dataset.item) : undefined;
114
+ }
115
+ row(id) {
116
+ return [...this.renderRoot.querySelectorAll("[data-item]")].find(row => row.dataset.item === id);
117
+ }
118
+ /** A tree's Tab stop: the row last focused while it is still shown, else the selected row, else the first available. */
119
+ stop() {
120
+ const usable = this.items.filter(item => !item.disabled);
121
+ return usable.find(item => item.id === this.focusId)?.id ?? usable.find(item => item.selected)?.id ?? usable[0]?.id;
122
+ }
123
+ press(event, item) {
124
+ if (item.disabled)
125
+ return;
126
+ this.focusItem(item.id);
127
+ const disclosure = event.composedPath().some(node => node instanceof HTMLElement && node.classList.contains("disclosure"));
128
+ if (disclosure && item.expanded !== undefined)
129
+ this.request("toggle", { id: item.id, expanded: !item.expanded });
130
+ else
131
+ this.request("select", { id: item.id });
132
+ }
133
+ open(event, item) {
134
+ if (item.disabled || event.composedPath().some(node => node instanceof HTMLElement && node.classList.contains("disclosure")))
135
+ return;
136
+ this.request("activate", { id: item.id });
137
+ }
138
+ treeKeydown(event, item) {
139
+ if (event.altKey || event.ctrlKey || event.metaKey)
140
+ return;
141
+ const index = this.items.indexOf(item);
142
+ const step = treeStep(this.items.map(row => ({ level: Math.max(0, row.depth ?? 0) + 1, expanded: row.expanded, disabled: row.disabled, label: row.label })), index, event.key);
143
+ if (!step)
144
+ return;
145
+ event.preventDefault();
146
+ if (step.toggle !== undefined)
147
+ this.request("toggle", { id: item.id, expanded: step.toggle });
148
+ if (step.select)
149
+ this.request("select", { id: item.id });
150
+ if (step.activate)
151
+ this.request("activate", { id: item.id });
152
+ const target = step.focus === undefined ? undefined : this.items[step.focus];
153
+ if (target)
154
+ this.focusItem(target.id);
155
+ }
156
+ renderTree() {
157
+ const stop = this.stop();
158
+ // Each row's place among its siblings, for aria-setsize and aria-posinset.
159
+ const places = new Map();
160
+ const open = [];
161
+ for (const item of this.items) {
162
+ const depth = Math.max(0, item.depth ?? 0);
163
+ open.length = depth + 1;
164
+ const siblings = (open[depth] ?? (open[depth] = []));
165
+ siblings.push(item);
166
+ for (const [index, sibling] of siblings.entries())
167
+ places.set(sibling.id, [index + 1, siblings.length]);
168
+ }
169
+ return html `<slot name="header"></slot><div class="tree" role="tree" aria-label=${ifDefined(this.label || undefined)} part="tree">
170
+ ${repeat(this.items, item => item.id, item => {
171
+ const depth = Math.max(0, item.depth ?? 0);
172
+ const [position, size] = places.get(item.id) ?? [1, 1];
173
+ return html `<div class="item" role="treeitem" data-item=${item.id}
174
+ aria-level=${depth + 1} aria-setsize=${size} aria-posinset=${position}
175
+ aria-expanded=${ifDefined(item.expanded === undefined ? undefined : String(item.expanded))}
176
+ aria-selected=${String(Boolean(item.selected))}
177
+ aria-disabled=${ifDefined(item.disabled ? "true" : undefined)}
178
+ tabindex=${item.id === stop ? 0 : -1}
179
+ style=${`--depth:${depth}`}
180
+ @click=${(event) => this.press(event, item)}
181
+ @dblclick=${(event) => this.open(event, item)}
182
+ @keydown=${(event) => this.treeKeydown(event, item)}
183
+ @focus=${() => { this.focusId = item.id; }}>
184
+ <span class="disclosure" aria-hidden="true">${item.expanded === undefined ? nothing : html `<ds-icon type="right" ?data-open=${item.expanded}></ds-icon>`}</span>
185
+ ${item.icon ? html `<span class="icon" aria-hidden="true"><ds-icon type=${item.icon}></ds-icon></span>` : nothing}
186
+ <span class="label">${item.label}</span>
187
+ ${item.meta ? html `<span class="meta">${item.meta}</span>` : nothing}
188
+ </div>`;
189
+ })}
190
+ ${this.items.length ? nothing : html `<p class="empty" role="status">${this.empty}</p>`}
191
+ </div><slot name="footer"></slot>`;
192
+ }
193
+ navigate(event, item) {
194
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
195
+ return;
196
+ const index = this.items.indexOf(item);
197
+ let target;
198
+ const available = this.items.filter(row => !row.disabled);
199
+ const position = available.indexOf(item);
200
+ if (event.key === "ArrowDown")
201
+ target = available[Math.min(position + 1, available.length - 1)];
202
+ else if (event.key === "ArrowUp")
203
+ target = available[Math.max(position - 1, 0)];
204
+ else if (event.key === "Home")
205
+ target = available[0];
206
+ else if (event.key === "End")
207
+ target = available[available.length - 1];
208
+ else if (event.key === "ArrowRight") {
209
+ if (item.expanded === false)
210
+ this.toggle(item);
211
+ else if (item.expanded && (this.items[index + 1]?.depth ?? 0) > (item.depth ?? 0))
212
+ target = this.items[index + 1];
213
+ }
214
+ else if (event.key === "ArrowLeft") {
215
+ if (item.expanded)
216
+ this.toggle(item);
217
+ else
218
+ target = this.items.slice(0, index).reverse().find(row => (row.depth ?? 0) < (item.depth ?? 0) && !row.disabled);
219
+ }
220
+ else
221
+ return;
222
+ event.preventDefault();
223
+ if (target && !target.disabled)
224
+ this.focusItem(target.id);
225
+ }
226
+ render() {
227
+ if (this.tree)
228
+ return this.renderTree();
229
+ return html `<slot name="header"></slot><nav aria-label=${this.label}>
230
+ ${repeat(this.items, item => item.id, item => html `
231
+ <ds-row class="row" ?data-current=${item.current} ?data-disabled=${item.disabled}
232
+ style=${`--depth:${Math.max(0, item.depth ?? 0)}`}>
233
+ <ds-button control="slotted" class="choice" ?disabled=${item.disabled}>
234
+ ${item.href && !item.disabled ? html `
235
+ <a href=${item.href} data-item=${item.id} aria-current=${ifDefined(item.current ? "page" : undefined)}
236
+ @click=${(event) => this.activate(event, item)}
237
+ @keydown=${(event) => this.navigate(event, item)}><span class="name">${item.icon ? html `<ds-icon type=${item.icon} aria-hidden="true"></ds-icon>` : nothing}${item.label}</span></a>` : html `
238
+ <button type="button" data-item=${item.id} ?disabled=${item.disabled}
239
+ aria-expanded=${ifDefined(item.expanded === undefined ? undefined : String(item.expanded))}
240
+ aria-current=${ifDefined(item.current ? "page" : undefined)}
241
+ @click=${(event) => this.activate(event, item)}
242
+ @keydown=${(event) => this.navigate(event, item)}><span class="name">${item.icon ? html `<ds-icon type=${item.icon} aria-hidden="true"></ds-icon>` : nothing}${item.label}</span></button>`}
243
+ </ds-button>
244
+ ${item.expanded !== undefined ? html `
245
+ <ds-button control="slotted" icon class="disclosure">
246
+ <button type="button" aria-label=${`${item.expanded ? "Collapse" : "Expand"} ${item.label}`}
247
+ aria-expanded=${item.expanded} @click=${() => this.toggle(item)}>
248
+ <ds-icon type="right" aria-hidden="true" ?data-open=${item.expanded}></ds-icon>
249
+ </button>
250
+ </ds-button>` : nothing}
251
+ <span class="spacer" aria-hidden="true"></span>
252
+ ${item.meta ? html `<span class="meta">${item.meta}</span>` : nothing}
253
+ ${item.action ? html `<ds-button control="slotted" fit class="action"><button type="button"
254
+ aria-label=${`${item.action.label}: ${item.label}`}
255
+ @click=${() => this.request("action", { id: item.id, action: item.action.id })}>${item.action.label}</button></ds-button>` : nothing}
256
+ </ds-row>`)}
257
+ ${this.items.length ? nothing : html `<p class="empty" role="status">${this.empty}</p>`}
258
+ </nav><slot name="footer"></slot>`;
259
+ }
260
+ }
261
+ Sidebar.properties = {
262
+ items: { attribute: false },
263
+ label: { type: String },
264
+ empty: { type: String },
265
+ tree: { type: Boolean, reflect: true },
266
+ };
267
+ Sidebar.styles = unsafeCSS(styles);
268
+ define("ds-sidebar", Sidebar);
@@ -1,10 +1,13 @@
1
1
  import { LitElement } from "lit";
2
- export interface TableRow {
3
- product: string;
4
- users: string;
5
- retention: string;
6
- status?: string;
2
+ /** A column: the key it reads from each row, its header, and whether it holds numbers. */
3
+ export interface TableColumn {
4
+ key: string;
5
+ label: string;
6
+ /** Sets the column to its end in tabular figures. Unset, a column of numbers is numeric. */
7
+ numeric?: boolean;
7
8
  }
9
+ /** A row: values by column key, or by column position. */
10
+ export type TableRow = Record<string, unknown> | readonly unknown[];
8
11
  export declare class DsTable extends LitElement {
9
12
  static properties: {
10
13
  data: {
@@ -13,16 +16,31 @@ export declare class DsTable extends LitElement {
13
16
  columns: {
14
17
  type: ArrayConstructor;
15
18
  };
16
- showStatus: {
19
+ footer: {
20
+ type: ObjectConstructor;
21
+ };
22
+ sticky: {
17
23
  type: BooleanConstructor;
18
- attribute: string;
24
+ reflect: boolean;
25
+ };
26
+ label: {
27
+ type: StringConstructor;
19
28
  };
20
29
  };
30
+ /** The body rows. */
21
31
  data: TableRow[];
22
- columns: string[];
23
- showStatus: boolean;
32
+ /** Headers as labels (`"Users"` reads `users`) or columns; unset, the first row's keys. */
33
+ columns: (string | TableColumn)[];
34
+ /** A totals row under the body. */
35
+ footer: TableRow | undefined;
36
+ /** Keeps the first column in place while the table scrolls sideways. */
37
+ sticky: boolean;
38
+ /** The table's accessible name. */
39
+ label: string | undefined;
24
40
  constructor();
25
- static styles: import("lit").CSSResult;
41
+ static styles: import("lit").CSSResult[];
42
+ private resolvedColumns;
43
+ private row;
26
44
  render(): import("lit").TemplateResult<1>;
27
45
  }
28
46
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"ds-table.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-table.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAGlD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACrC,MAAM,CAAC,UAAU;;;;;;;;;;;MAIf;IAEM,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;;IAS5B,MAAM,CAAC,MAAM,0BAAqB;IAElC,MAAM;CA0BP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
1
+ {"version":3,"file":"ds-table.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-table.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAA4B,MAAM,KAAK,CAAC;AAK3D,0FAA0F;AAC1F,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,0DAA0D;AAC1D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,OAAO,EAAE,CAAC;AAKpE,qBAAa,OAAQ,SAAQ,UAAU;IACrC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;MAMf;IAEF,qBAAqB;IACb,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzB,2FAA2F;IACnF,OAAO,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;IAC1C,mCAAmC;IAC3B,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,wEAAwE;IAChE,MAAM,EAAE,OAAO,CAAC;IACxB,mCAAmC;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;;IASlC,MAAM,CAAC,MAAM,4BAA6D;IAE1E,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,GAAG;IASX,MAAM;CAcP;AAaD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
@@ -1,35 +1,53 @@
1
1
  // ds-table.ts
2
- // Data table component
3
- import { LitElement, html, unsafeCSS } from "lit";
2
+ // A data table: rows one square high on hairlines, drawn from data with the
3
+ // same rules as a native `<table class="ds-table">` (1-root/table.css).
4
+ import { LitElement, html, nothing, unsafeCSS } from "lit";
5
+ import metrics from "../1-root/component-metrics.css?inline";
6
+ import table from "../1-root/table.css?inline";
4
7
  import styles from "./styles/ds-table.css?inline";
8
+ const capitalised = (key) => key.charAt(0).toUpperCase() + key.slice(1);
9
+ const blank = (value) => value === undefined || value === null || value === "";
5
10
  export class DsTable extends LitElement {
6
11
  constructor() {
7
12
  super();
8
13
  this.data = [];
9
- this.columns = ["Product", "Users", "Retention"];
10
- this.showStatus = true;
14
+ this.columns = [];
15
+ this.sticky = false;
16
+ }
17
+ resolvedColumns() {
18
+ const named = this.columns.length > 0;
19
+ const given = named
20
+ ? this.columns
21
+ : Object.keys(this.data.find(row => !Array.isArray(row)) ?? {});
22
+ const rows = this.footer ? [...this.data, this.footer] : this.data;
23
+ return given.map((column, index) => {
24
+ const resolved = typeof column !== "string" ? column
25
+ : named ? { key: column.toLowerCase(), label: column }
26
+ : { key: column, label: capitalised(column) };
27
+ const values = rows.map(row => cell(row, resolved.key, index)).filter(value => !blank(value));
28
+ const numeric = resolved.numeric ?? (values.length > 0 && values.every(value => typeof value === "number"));
29
+ return { ...resolved, numeric };
30
+ });
31
+ }
32
+ row(row, columns) {
33
+ return html `<tr>${columns.map((column, index) => {
34
+ const value = text(cell(row, column.key, index));
35
+ return index === 0
36
+ ? html `<th scope="row" ?data-numeric=${column.numeric}>${value}</th>`
37
+ : html `<td ?data-numeric=${column.numeric}>${value}</td>`;
38
+ })}</tr>`;
11
39
  }
12
40
  render() {
41
+ const columns = this.resolvedColumns();
13
42
  return html `
14
- <div class="table-container">
15
- <div class="table-header">
16
- <div class="header-cell product-cell">Product</div>
17
- <div class="header-cell users-cell">Users</div>
18
- <div class="header-cell retention-cell">Retention</div>
19
- ${this.showStatus ? html `<div class="header-cell">Status</div>` : ""}
20
- </div>
21
- <div class="table-body">
22
- ${this.data.map((row, rowIndex) => html `
23
- <div class="data-cell product-cell">${row.product}</div>
24
- <div class="data-cell users-cell">${row.users}</div>
25
- <div class="data-cell retention-cell">${row.retention}</div>
26
- ${this.showStatus
27
- ? html `<div class="data-cell status-cell">
28
- ${row.status || "Pending"}
29
- </div>`
30
- : ""}
31
- `)}
32
- </div>
43
+ <div class="ds-table-scroll" part="scroll">
44
+ <table class="ds-table" part="table" ?data-sticky=${this.sticky} aria-label=${this.label ?? nothing}>
45
+ <thead>
46
+ <tr>${columns.map(column => html `<th scope="col" ?data-numeric=${column.numeric}>${column.label}</th>`)}</tr>
47
+ </thead>
48
+ <tbody>${this.data.map(row => this.row(row, columns))}</tbody>
49
+ ${this.footer ? html `<tfoot>${this.row(this.footer, columns)}</tfoot>` : nothing}
50
+ </table>
33
51
  </div>
34
52
  `;
35
53
  }
@@ -37,7 +55,17 @@ export class DsTable extends LitElement {
37
55
  DsTable.properties = {
38
56
  data: { type: Array },
39
57
  columns: { type: Array },
40
- showStatus: { type: Boolean, attribute: "show-status" },
58
+ footer: { type: Object },
59
+ sticky: { type: Boolean, reflect: true },
60
+ label: { type: String },
41
61
  };
42
- DsTable.styles = unsafeCSS(styles);
62
+ DsTable.styles = [unsafeCSS(metrics), unsafeCSS(table), unsafeCSS(styles)];
63
+ function cell(row, key, index) {
64
+ return Array.isArray(row) ? row[index] : row[key];
65
+ }
66
+ function text(value) {
67
+ if (blank(value))
68
+ return "";
69
+ return typeof value === "number" ? value.toLocaleString() : String(value);
70
+ }
43
71
  customElements.define("ds-table", DsTable);