@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
@@ -0,0 +1,120 @@
1
+ // ds-empty.ts
2
+ // An empty state: a place with nothing in it yet, and what to do about it.
3
+ // Drawn by 1-root/empty.css, the same classes a page without scripts writes.
4
+
5
+ import { LitElement, html, nothing, unsafeCSS } from "lit";
6
+ import { getText } from "../0-face/i18n";
7
+ import { define } from "../0-face/define";
8
+ import "./ds-icon";
9
+ import metrics from "../1-root/component-metrics.css?inline";
10
+ import empty from "../1-root/empty.css?inline";
11
+ import styles from "./styles/ds-empty.css?inline";
12
+
13
+ /** The shared words' title for an empty place, in the current language. */
14
+ export const EMPTY_HEADING = "Nothing here yet";
15
+
16
+ /**
17
+ * @element ds-empty
18
+ * @prop {string} heading - The title: a translation key, or the words as they
19
+ * stand with `literal`. Unset, the shared words' "Nothing here yet".
20
+ * @prop {string} text - The line under it: a translation key, or literal words.
21
+ * @prop {boolean} literal - Show `heading` and `text` as written, never looked up.
22
+ * @prop {string} icon - An icon from the library on the square above the title.
23
+ * @prop {boolean} centered - Centre the words in the space the element stands in.
24
+ * @prop {number} level - Make the title a heading of this level (1–6).
25
+ *
26
+ * @slot - The text, when it needs more than words: a link, a strong word.
27
+ * @slot heading - The title, as inline content.
28
+ * @slot icon - An icon of the page's own, in place of `icon`.
29
+ * @slot actions - The buttons or links that fill the place, on one row.
30
+ *
31
+ * @example
32
+ * <ds-empty icon="search" heading="No results" text="Try another word.">
33
+ * <ds-button slot="actions" secondary>Clear the search</ds-button>
34
+ * </ds-empty>
35
+ */
36
+ export class Empty extends LitElement {
37
+ static properties = {
38
+ heading: { type: String },
39
+ text: { type: String },
40
+ literal: { type: Boolean, reflect: true },
41
+ icon: { type: String },
42
+ centered: { type: Boolean, reflect: true },
43
+ level: { type: Number },
44
+ };
45
+
46
+ static styles = [unsafeCSS(metrics), unsafeCSS(empty), unsafeCSS(styles)];
47
+
48
+ declare heading: string | undefined;
49
+ declare text: string | undefined;
50
+ declare literal: boolean;
51
+ declare icon: string | undefined;
52
+ declare centered: boolean;
53
+ declare level: number | undefined;
54
+
55
+ private readonly relabel = () => this.requestUpdate();
56
+
57
+ constructor() {
58
+ super();
59
+ this.literal = false;
60
+ this.centered = false;
61
+ }
62
+
63
+ connectedCallback() {
64
+ super.connectedCallback();
65
+ window.addEventListener("language-changed", this.relabel);
66
+ window.addEventListener("translations-loaded", this.relabel);
67
+ }
68
+
69
+ disconnectedCallback() {
70
+ window.removeEventListener("language-changed", this.relabel);
71
+ window.removeEventListener("translations-loaded", this.relabel);
72
+ super.disconnectedCallback();
73
+ }
74
+
75
+ private words(value: string | undefined): string {
76
+ if (!value) return "";
77
+ return this.literal ? value : getText(value) || value;
78
+ }
79
+
80
+ /**
81
+ * Whether light-DOM content fills a slot: elements, or text that is not
82
+ * blank. The blank text between slotted children still counts as assigned
83
+ * to the default slot and hides its fallback, so `text` is drawn beside the
84
+ * slot rather than inside it.
85
+ */
86
+ private slotted(name: string): boolean {
87
+ return [...this.childNodes].some(node => name
88
+ ? node instanceof Element && node.getAttribute("slot") === name
89
+ : node instanceof Element ? !node.hasAttribute("slot") : node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim()));
90
+ }
91
+
92
+ render() {
93
+ const heading = this.heading ? this.words(this.heading) : getText(EMPTY_HEADING) || EMPTY_HEADING;
94
+ const text = this.words(this.text);
95
+ const hasIcon = Boolean(this.icon) || this.slotted("icon");
96
+ const slottedText = this.slotted("");
97
+ const hasText = Boolean(text) || slottedText;
98
+ const hasActions = this.slotted("actions");
99
+ const level = this.level && this.level >= 1 && this.level <= 6 ? Math.round(this.level) : undefined;
100
+ const changed = () => this.requestUpdate();
101
+ return html`<div class="ds-empty${this.centered ? " ds-empty--centered" : ""}" part="empty">
102
+ <div class="ds-empty__icon" part="icon" aria-hidden="true" ?hidden=${!hasIcon}>
103
+ <slot name="icon" @slotchange=${changed}>${this.icon ? html`<ds-icon size="large" .type=${this.icon}></ds-icon>` : nothing}</slot>
104
+ </div>
105
+ <div class="ds-empty__title" part="title" role=${level ? "heading" : nothing} aria-level=${level ?? nothing}>
106
+ <slot name="heading" @slotchange=${changed}>${heading}</slot>
107
+ </div>
108
+ <div class="ds-empty__text" part="text" ?hidden=${!hasText}><slot @slotchange=${changed}></slot>${slottedText ? nothing : text}</div>
109
+ <div class="ds-empty__actions" part="actions" ?hidden=${!hasActions}><slot name="actions" @slotchange=${changed}></slot></div>
110
+ </div>`;
111
+ }
112
+ }
113
+
114
+ define("ds-empty", Empty);
115
+
116
+ declare global {
117
+ interface HTMLElementTagNameMap {
118
+ "ds-empty": Empty;
119
+ }
120
+ }
@@ -7,6 +7,15 @@ import { define } from "../0-face/define";
7
7
 
8
8
  const iconNameToSvgMap: Record<string, string> = { ...immediateIcons }
9
9
  const deferred = new Set<string>(deferredIconNames)
10
+
11
+ /**
12
+ * Make library drawings available at once, outside the immediate set: a
13
+ * component that always draws one icon (ds-avatar's person) ships that
14
+ * drawing with itself, so it never waits for the deferred chunk.
15
+ */
16
+ export function provideIcons(icons: Readonly<Record<string, string>>): void {
17
+ for (const [name, svg] of Object.entries(icons)) iconNameToSvgMap[name.toLowerCase()] ??= svg
18
+ }
10
19
  let extraReady = false
11
20
  let extraLoading: Promise<void> | undefined
12
21
  function loadExtraIcons(): Promise<void> {
@@ -30,8 +39,8 @@ function loadExtraIcons(): Promise<void> {
30
39
  * one-colour icon is turned over to `currentColor` here, where the component
31
40
  * puts it on the page, so it takes the colour of the text around it.
32
41
  *
33
- * An icon with colours of its own is left exactly as drawn. Consistency's block
34
- * and pattern tiles set dark ink on a coloured ground, and a brand mark keeps
42
+ * An icon with colours of its own is left exactly as drawn. The block and
43
+ * pattern tiles set dark ink on a coloured ground, and a brand mark keeps
35
44
  * the colours that make it that brand. `white` never counts as a colour: in
36
45
  * this set it is the rectangle inside a `<clipPath>`.
37
46
  */
@@ -3,10 +3,11 @@
3
3
 
4
4
  import { LitElement, html, unsafeCSS, type CSSResultGroup, type PropertyDeclarations } from "lit";
5
5
  import { live } from "lit/directives/live.js";
6
+ import { styleMap } from "lit/directives/style-map.js";
6
7
  import { ifDefined } from "lit/directives/if-defined.js";
7
8
  import { define } from "../0-face/define";
8
- import seeIcon from "../x-icon/ezo-password-visibility-see.svg?url";
9
- import unseeIcon from "../x-icon/ezo-password-visibility-unsee.svg?url";
9
+ import seeIcon from "../x-icon/password-see.svg?url";
10
+ import unseeIcon from "../x-icon/password-unsee.svg?url";
10
11
  import { getText, currentLanguage } from "../0-face/i18n";
11
12
  import "./ds-text";
12
13
  import styles from "./styles/ds-input.css?inline";
@@ -20,7 +21,16 @@ export class Input extends LitElement {
20
21
  private initialValue: string | undefined;
21
22
  static properties: PropertyDeclarations = {
22
23
  type: { type: String, reflect: true },
24
+ // A text area: the same field across whole rows.
25
+ multiline: { type: Boolean, reflect: true },
26
+ rows: { type: Number },
27
+ maxRows: { type: Number, attribute: "max-rows" },
28
+ autoGrow: { type: Boolean, attribute: "auto-grow", reflect: true },
29
+ wrap: { type: String },
23
30
  inputMode: { type: String, attribute: "inputmode" },
31
+ enterKeyHint: { type: String, attribute: "enterkeyhint" },
32
+ list: { type: String },
33
+ suggestions: { attribute: false },
24
34
  ariaLabel: { type: String, attribute: "aria-label" },
25
35
  ariaLabelledBy: { type: String, attribute: "aria-labelledby" },
26
36
  ariaDescribedBy: { type: String, attribute: "aria-describedby" },
@@ -64,9 +74,30 @@ export class Input extends LitElement {
64
74
  | "url"
65
75
  | "search"
66
76
  | "date"
77
+ | "month"
78
+ | "week"
67
79
  | "time"
68
80
  | "datetime-local";
81
+ declare multiline: boolean;
82
+ declare rows: number;
83
+ declare maxRows: number;
84
+ declare autoGrow: boolean;
85
+ declare wrap: "soft" | "hard" | "off";
86
+ private resizeFrame = 0;
87
+ private measuredWidth = 0;
88
+ private resizeObserver?: ResizeObserver;
89
+ private readonly fontsChanged = () => this.resizeToContent();
69
90
  declare inputMode: string;
91
+ /** The return key's label on a touch keyboard: enter, done, go, next, previous, search or send. */
92
+ declare enterKeyHint: string;
93
+ /**
94
+ * The id of a `<datalist>` beside the field. A shadow root keeps the inner
95
+ * input from reaching it, so its options are mirrored inside, and kept in step.
96
+ */
97
+ declare list: string;
98
+ /** Suggestions offered while typing, as a datalist would. Wins over `list`. */
99
+ declare suggestions: readonly (string | { value: string; label?: string })[];
100
+ private listObserver?: MutationObserver;
70
101
  declare ariaLabel: string;
71
102
  declare ariaLabelledBy: string;
72
103
  declare ariaDescribedBy: string;
@@ -104,7 +135,15 @@ export class Input extends LitElement {
104
135
  constructor() {
105
136
  super();
106
137
  this.type = "text";
138
+ this.multiline = false;
139
+ this.rows = 3;
140
+ this.maxRows = 10;
141
+ this.autoGrow = false;
142
+ this.wrap = "soft";
107
143
  this.inputMode = "";
144
+ this.enterKeyHint = "";
145
+ this.list = "";
146
+ this.suggestions = [];
108
147
  this.ariaLabel = "";
109
148
  this.ariaLabelledBy = "";
110
149
  this.ariaDescribedBy = "";
@@ -161,6 +200,18 @@ export class Input extends LitElement {
161
200
 
162
201
  // Also listen for translations loaded event
163
202
  window.addEventListener("translations-loaded", this.boundHandlers.languageChanged);
203
+ if (typeof ResizeObserver !== "undefined") {
204
+ this.resizeObserver = new ResizeObserver((entries) => {
205
+ if (this.clientWidth !== this.measuredWidth || entries.some(entry => entry.target !== this)) {
206
+ this.measuredWidth = this.clientWidth;
207
+ this.resizeToContent();
208
+ }
209
+ });
210
+ this.resizeObserver.observe(this);
211
+ const metric = this.shadowRoot?.querySelector(".row-metric");
212
+ if (metric) this.resizeObserver.observe(metric);
213
+ }
214
+ document.fonts?.addEventListener("loadingdone", this.fontsChanged);
164
215
  }
165
216
 
166
217
  disconnectedCallback() {
@@ -168,10 +219,24 @@ export class Input extends LitElement {
168
219
  this.removeEventListener("click", this.focusFromLabel);
169
220
  window.removeEventListener("language-changed", this.boundHandlers.languageChanged);
170
221
  window.removeEventListener("translations-loaded", this.boundHandlers.languageChanged);
222
+ this.listObserver?.disconnect();
223
+ this.listObserver = undefined;
224
+ this.resizeObserver?.disconnect();
225
+ document.fonts?.removeEventListener("loadingdone", this.fontsChanged);
226
+ cancelAnimationFrame(this.resizeFrame);
171
227
  }
172
228
 
173
229
  firstUpdated(): void {
174
230
  if (this.autofocus) this.focus();
231
+ // A fixed-width field can change scale without changing its width. Measure
232
+ // one shared row separately from the content height that we set ourselves.
233
+ const metric = this.shadowRoot?.querySelector(".row-metric");
234
+ if (metric) this.resizeObserver?.observe(metric);
235
+ }
236
+
237
+ willUpdate(changed: Map<string, unknown>): void {
238
+ // A multiline field stands on its own by default, in the field treatment.
239
+ if (changed.has("multiline") && this.multiline && this.variant === "default" && !this.hasAttribute("variant")) this.variant = "field";
175
240
  }
176
241
 
177
242
  updated(changedProperties: Map<string, unknown>) {
@@ -182,14 +247,45 @@ export class Input extends LitElement {
182
247
  }
183
248
  if (this.initialValue === undefined) this.initialValue = this.value;
184
249
  if (changedProperties.has("type") && this.type !== "password") this._passwordVisible = false;
250
+ if (this.multiline) this.resizeToContent();
251
+ if (changedProperties.has("list")) this.observeList();
185
252
  this.syncForm();
186
253
  }
187
254
 
255
+ private listSource(): HTMLDataListElement | null {
256
+ if (!this.list) return null;
257
+ const root = this.getRootNode() as Document | ShadowRoot;
258
+ const source = root.getElementById?.(this.list);
259
+ return source instanceof HTMLDataListElement ? source : null;
260
+ }
261
+
262
+ private observeList(): void {
263
+ this.listObserver?.disconnect();
264
+ this.listObserver = undefined;
265
+ const source = this.listSource();
266
+ if (!source || typeof MutationObserver === "undefined") return;
267
+ this.listObserver = new MutationObserver(() => this.requestUpdate());
268
+ this.listObserver.observe(source, { childList: true, subtree: true, attributes: true, characterData: true });
269
+ }
270
+
271
+ /** The options the field offers, from `suggestions` or the named datalist. */
272
+ protected suggestionOptions(): { value: string; label?: string }[] {
273
+ if (this.suggestions?.length) return this.suggestions.map((option) => (typeof option === "string" ? { value: option } : option));
274
+ const source = this.listSource();
275
+ return source ? [...source.options].map((option) => ({ value: option.value, label: option.label !== option.value ? option.label : undefined })) : [];
276
+ }
277
+
278
+ protected renderSuggestions(options: { value: string; label?: string }[]) {
279
+ return options.length
280
+ ? html`<datalist id="suggestions">${options.map((option) => html`<option value=${option.value} label=${ifDefined(option.label)}></option>`)}</datalist>`
281
+ : null;
282
+ }
283
+
188
284
  protected get input(): HTMLInputElement | HTMLTextAreaElement | null {
189
285
  return this.shadowRoot?.querySelector("input, textarea") ?? null;
190
286
  }
191
287
  protected get isMultiline(): boolean {
192
- return false;
288
+ return this.multiline;
193
289
  }
194
290
  get selectionStart(): number | null {
195
291
  return this.input?.selectionStart ?? null;
@@ -411,7 +507,68 @@ export class Input extends LitElement {
411
507
  this.input?.select();
412
508
  }
413
509
 
510
+ /** Grow on the row grid, bounded by maxRows; the remainder scrolls. */
511
+ private resizeToContent(): void {
512
+ cancelAnimationFrame(this.resizeFrame);
513
+ const control = this.input;
514
+ if (!control || !this.multiline) return;
515
+ if (!this.autoGrow) {
516
+ control.style.height = "";
517
+ control.style.overflowY = "";
518
+ return;
519
+ }
520
+ this.resizeFrame = requestAnimationFrame(() => {
521
+ if (!this.isConnected) return;
522
+ const computed = getComputedStyle(control);
523
+ const row =
524
+ parseFloat(computed.getPropertyValue("--ds-row-height")) ||
525
+ 20 * (parseFloat(computed.getPropertyValue("--ds-sf")) || 1);
526
+ const minimum = Math.max(1, Math.floor(this.rows || 1)) * row;
527
+ const maximum = Math.max(minimum, Math.floor(this.maxRows || this.rows || 1) * row);
528
+ control.style.height = "0px";
529
+ const border = parseFloat(computed.borderTopWidth) + parseFloat(computed.borderBottomWidth);
530
+ const needed = Math.ceil((control.scrollHeight + border) / row) * row;
531
+ control.style.height = `${Math.max(minimum, Math.min(maximum, needed))}px`;
532
+ control.style.overflowY = needed > maximum ? "auto" : "hidden";
533
+ });
534
+ }
535
+
536
+ /** The multiline field: a native textarea across whole rows. */
537
+ protected renderMultiline(hasError: boolean, description: string) {
538
+ const rows = Math.max(1, Math.floor(this.rows || 1));
539
+ return html`<span class="row-metric" aria-hidden="true"></span><textarea
540
+ id="input"
541
+ part="input"
542
+ aria-label=${ifDefined(this.accessibleLabel())}
543
+ aria-invalid=${ifDefined(this.ariaInvalid || (hasError ? "true" : undefined))}
544
+ aria-describedby=${ifDefined([description ? "description" : "", hasError ? "error" : ""].filter(Boolean).join(" ") || undefined)}
545
+ inputmode=${ifDefined(this.inputMode || undefined)}
546
+ enterkeyhint=${ifDefined(this.enterKeyHint || undefined)}
547
+ spellcheck=${ifDefined(this.spellcheckHint || undefined)}
548
+ .name=${this.name}
549
+ .value=${live(this.value)}
550
+ .placeholder=${this._placeholder || this.placeholder}
551
+ ?disabled=${this.disabled || this._formDisabled}
552
+ ?readonly=${this.readonly}
553
+ ?required=${this.required}
554
+ ?autofocus=${this.autofocus}
555
+ autocomplete=${this.autocomplete}
556
+ minlength=${ifDefined(this.minlength || undefined)}
557
+ maxlength=${ifDefined(this.maxlength >= 0 ? this.maxlength : undefined)}
558
+ rows=${rows}
559
+ wrap=${this.wrap || "soft"}
560
+ style=${styleMap({ "--ds-textarea-rows": String(rows) })}
561
+ class=${hasError ? "has-error" : ""}
562
+ @input=${this._handleInput}
563
+ @change=${this.handleChange}
564
+ @focus=${this._handleFocus}
565
+ @blur=${this._handleBlur}
566
+ ></textarea>`;
567
+ }
568
+
414
569
  protected renderControl(hasError: boolean, description: string) {
570
+ if (this.multiline) return this.renderMultiline(hasError, description);
571
+ const suggestions = this.suggestionOptions();
415
572
  return html`<input
416
573
  id="input"
417
574
  part="input"
@@ -420,6 +577,8 @@ export class Input extends LitElement {
420
577
  aria-invalid=${ifDefined(this.ariaInvalid || (hasError ? "true" : undefined))}
421
578
  aria-describedby=${ifDefined([description ? "description" : "", hasError ? "error" : ""].filter(Boolean).join(" ") || undefined)}
422
579
  inputmode=${ifDefined(this.inputMode || undefined)}
580
+ enterkeyhint=${ifDefined(this.enterKeyHint || undefined)}
581
+ list=${ifDefined(suggestions.length ? "suggestions" : undefined)}
423
582
  spellcheck=${ifDefined(this.spellcheckHint || undefined)}
424
583
  .name=${this.name}
425
584
  .value=${live(this.value)}
@@ -441,7 +600,7 @@ export class Input extends LitElement {
441
600
  @keydown=${this.handleKeyDown}
442
601
  @focus=${this._handleFocus}
443
602
  @blur=${this._handleBlur}
444
- />`;
603
+ />${this.renderSuggestions(suggestions)}`;
445
604
  }
446
605
 
447
606
  render() {
@@ -455,7 +614,7 @@ export class Input extends LitElement {
455
614
  .join(" ");
456
615
 
457
616
  return html`
458
- <div class="input-wrapper">
617
+ <div class=${hasError ? "input-wrapper has-error" : "input-wrapper"}>
459
618
  ${
460
619
  this.label || this.labelText
461
620
  ? html`
@@ -499,7 +658,7 @@ export class Input extends LitElement {
499
658
  hasError
500
659
  ? html`
501
660
  <div id="error" class="error-message" role="status">
502
- ${this.errorText ? html`<ds-text .text=${this.errorText}></ds-text>` : this.error}
661
+ ${this.errorText ? html`<ds-text wrap .text=${this.errorText}></ds-text>` : this.error}
503
662
  </div>
504
663
  `
505
664
  : null
@@ -0,0 +1,78 @@
1
+ // ds-kbd.ts
2
+ // A keyboard shortcut's hint: the shortcut written as the platform writes it
3
+ // (⇧⌘D on Apple platforms, Ctrl+Shift+D elsewhere), drawn by 1-root/kbd.css,
4
+ // the same class a page without scripts puts on a native <kbd>.
5
+
6
+ import { LitElement, html, unsafeCSS } from "lit";
7
+ import { define } from "../0-face/define";
8
+ import { shortcutLabel, type KeyPlatform } from "../0-face/keys";
9
+ import metrics from "../1-root/component-metrics.css?inline";
10
+ import kbd from "../1-root/kbd.css?inline";
11
+ import styles from "./styles/ds-kbd.css?inline";
12
+
13
+ /**
14
+ * @element ds-kbd
15
+ * @prop {string} shortcut - The shortcut, written once for every platform:
16
+ * `mod+shift+d`, `mod+enter`, `escape`, `?`. Unset, the slotted words show
17
+ * as written.
18
+ * @prop {boolean} plain - The words alone in the title grey, with no fill, as
19
+ * a menu entry writes its shortcut.
20
+ * @prop {"apple" | "other"} platform - Write it for this platform rather than
21
+ * the device's own (a help page showing both).
22
+ *
23
+ * @slot - Words of the page's own, when there is no `shortcut`.
24
+ *
25
+ * @example
26
+ * <ds-kbd shortcut="mod+k"></ds-kbd>
27
+ */
28
+ export class Kbd extends LitElement {
29
+ static properties = {
30
+ shortcut: { type: String },
31
+ plain: { type: Boolean, reflect: true },
32
+ platform: { type: String },
33
+ };
34
+
35
+ static styles = [unsafeCSS(metrics), unsafeCSS(kbd), unsafeCSS(styles)];
36
+
37
+ declare shortcut: string | undefined;
38
+ declare plain: boolean;
39
+ declare platform: KeyPlatform | undefined;
40
+
41
+ private readonly relabel = () => this.requestUpdate();
42
+
43
+ constructor() {
44
+ super();
45
+ this.plain = false;
46
+ }
47
+
48
+ connectedCallback() {
49
+ super.connectedCallback();
50
+ // Ctrl, Shift and the other words follow the page's language.
51
+ window.addEventListener("language-changed", this.relabel);
52
+ window.addEventListener("translations-loaded", this.relabel);
53
+ }
54
+
55
+ disconnectedCallback() {
56
+ window.removeEventListener("language-changed", this.relabel);
57
+ window.removeEventListener("translations-loaded", this.relabel);
58
+ super.disconnectedCallback();
59
+ }
60
+
61
+ /** The words the hint shows: the shortcut's label, or empty when it shows its slot. */
62
+ get label(): string {
63
+ if (!this.shortcut) return "";
64
+ try {
65
+ return shortcutLabel(this.shortcut, this.platform ? { platform: this.platform } : undefined);
66
+ } catch {
67
+ return this.shortcut;
68
+ }
69
+ }
70
+
71
+ render() {
72
+ const label = this.label;
73
+ return html`<kbd part="kbd" class=${this.plain ? "ds-kbd ds-kbd--plain" : "ds-kbd"}>${label || html`<slot></slot>`}</kbd>`;
74
+ }
75
+ }
76
+
77
+ define("ds-kbd", Kbd);
78
+ declare global { interface HTMLElementTagNameMap { "ds-kbd": Kbd } }
@@ -0,0 +1,72 @@
1
+ import { LitElement, html, unsafeCSS } from "lit";
2
+ import { define } from "../0-face/define";
3
+ import { getText } from "../0-face/i18n";
4
+ import styles from "./styles/ds-loading.css?inline";
5
+
6
+ /** The shared word a busy indicator reads without a label of its own. */
7
+ export const LOADING_LABEL = "Loading";
8
+
9
+ /**
10
+ * The controls a spinner can stand in: buttons and fields. Inside one, the
11
+ * spinner is one control high, the size of the icon it stands in for.
12
+ * `ds-loading.css` names the same controls for the light-DOM markup.
13
+ */
14
+ export const LOADING_CONTROLS =
15
+ "button, [role='button'], ds-button, .ds-button, ds-input, ds-select, .ds-field, .ds-input, .ds-select";
16
+
17
+ /** Whether an element stands in a control, across shadow roots. */
18
+ export function inLoadingControl(element: Element): boolean {
19
+ let node: Element | null = element.parentElement ?? hostOf(element);
20
+ while (node) {
21
+ if (node.closest(LOADING_CONTROLS)) return true;
22
+ node = hostOf(node);
23
+ }
24
+ return false;
25
+ }
26
+
27
+ function hostOf(element: Element): Element | null {
28
+ const root = element.getRootNode();
29
+ return root instanceof ShadowRoot ? root.host : null;
30
+ }
31
+
32
+ /** @internal Automatic pending-state feedback, not user-insertable content.
33
+ * Label must describe the current operation; unset, it is the shared word
34
+ * "Loading" in the page's language. The containing app controls mounting.
35
+ * A spinner in a button or field is one control high (16px), elsewhere one
36
+ * square; `--ds-loading-size` sets it outright.
37
+ * --ds-loading-width/fill/duration preserve the surrounding brand. */
38
+ export class LoadingIndicator extends LitElement {
39
+ static properties = {
40
+ label: { type: String },
41
+ variant: { type: String },
42
+ inControl: { state: true },
43
+ };
44
+ static styles = unsafeCSS(styles);
45
+ // Declared, not class fields, so Lit's reactive accessors are not shadowed.
46
+ declare label: string;
47
+ declare variant: string;
48
+ declare inControl: boolean;
49
+ constructor() {
50
+ super();
51
+ this.label = "";
52
+ this.variant = "bar";
53
+ this.inControl = false;
54
+ }
55
+ private readonly relabel = () => this.requestUpdate();
56
+ connectedCallback() {
57
+ super.connectedCallback();
58
+ this.inControl = inLoadingControl(this);
59
+ window.addEventListener("language-changed", this.relabel);
60
+ window.addEventListener("translations-loaded", this.relabel);
61
+ }
62
+ disconnectedCallback() {
63
+ window.removeEventListener("language-changed", this.relabel);
64
+ window.removeEventListener("translations-loaded", this.relabel);
65
+ super.disconnectedCallback();
66
+ }
67
+ render() {
68
+ const label = this.label || getText(LOADING_LABEL) || LOADING_LABEL;
69
+ return html`<span class="ds-loading" data-variant=${this.variant} data-context=${this.inControl ? "control" : "page"} role="status" aria-label=${label} aria-busy="true"><span class="ds-loading__fill" aria-hidden="true"></span></span>`;
70
+ }
71
+ }
72
+ define("ds-loading", LoadingIndicator);