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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/DS1/0-face/calendar.ts +194 -0
  2. package/DS1/0-face/carousel.ts +623 -0
  3. package/DS1/0-face/component-visibility.ts +14 -0
  4. package/DS1/0-face/copy-text.ts +96 -0
  5. package/DS1/0-face/device.ts +8 -58
  6. package/DS1/0-face/dialog-swipe.ts +249 -0
  7. package/DS1/0-face/dialogs.ts +208 -0
  8. package/DS1/0-face/drawer.ts +258 -0
  9. package/DS1/0-face/feedback-words.ts +36 -0
  10. package/DS1/0-face/feedback.ts +40 -0
  11. package/DS1/0-face/format.ts +700 -0
  12. package/DS1/0-face/generated/toast-assets.ts +18 -0
  13. package/DS1/0-face/grid-fit.ts +1 -1
  14. package/DS1/0-face/grid.ts +3 -2
  15. package/DS1/0-face/header.ts +78 -0
  16. package/DS1/0-face/i18n.ts +93 -18
  17. package/DS1/0-face/keys.ts +276 -0
  18. package/DS1/0-face/languages.ts +4 -4
  19. package/DS1/0-face/layout-inspector.ts +6 -6
  20. package/DS1/0-face/library-styles.ts +33 -0
  21. package/DS1/0-face/load-toaster.ts +7 -0
  22. package/DS1/0-face/preference-options.ts +29 -0
  23. package/DS1/0-face/preferences.ts +3 -11
  24. package/DS1/0-face/pricing.ts +98 -43
  25. package/DS1/0-face/scaling.ts +160 -4
  26. package/DS1/0-face/shared-words.ts +9 -4
  27. package/DS1/0-face/sidebar.ts +201 -0
  28. package/DS1/0-face/theme-bootstrap.js +184 -0
  29. package/DS1/0-face/theme.ts +89 -47
  30. package/DS1/0-face/toast-queue.ts +157 -0
  31. package/DS1/0-face/toaster.ts +384 -0
  32. package/DS1/0-face/tooltips.ts +157 -15
  33. package/DS1/0-face/translations/da.json +60 -1
  34. package/DS1/0-face/translations/de.json +60 -1
  35. package/DS1/0-face/translations/en.json +60 -1
  36. package/DS1/0-face/translations/es.json +60 -1
  37. package/DS1/0-face/translations/fi.json +60 -1
  38. package/DS1/0-face/translations/fr.json +60 -1
  39. package/DS1/0-face/translations/is.json +60 -1
  40. package/DS1/0-face/translations/it.json +60 -1
  41. package/DS1/0-face/translations/ja.json +60 -1
  42. package/DS1/0-face/translations/ko.json +60 -1
  43. package/DS1/0-face/translations/nb.json +60 -1
  44. package/DS1/0-face/translations/pt-BR.json +60 -1
  45. package/DS1/0-face/translations/pt.json +60 -1
  46. package/DS1/0-face/translations/sv.json +60 -1
  47. package/DS1/0-face/translations/zh.json +60 -1
  48. package/DS1/0-face/translations-format.ts +3 -4
  49. package/DS1/1-root/card.css +192 -0
  50. package/DS1/1-root/carousel.css +136 -0
  51. package/DS1/1-root/cjk.css +23 -0
  52. package/DS1/1-root/component-metrics.css +1 -0
  53. package/DS1/1-root/component-tokens.css +51 -8
  54. package/DS1/1-root/controls.css +891 -14
  55. package/DS1/1-root/dialog-placement.css +191 -0
  56. package/DS1/1-root/document.css +183 -0
  57. package/DS1/1-root/drawer.css +83 -0
  58. package/DS1/1-root/empty.css +83 -0
  59. package/DS1/1-root/figures.css +141 -0
  60. package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
  61. package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
  62. package/DS1/1-root/fonts.css +69 -0
  63. package/DS1/1-root/footer.css +186 -0
  64. package/DS1/1-root/header.css +165 -0
  65. package/DS1/1-root/library-tokens.ts +91 -0
  66. package/DS1/1-root/measures.ts +53 -0
  67. package/DS1/1-root/notice.css +165 -0
  68. package/DS1/1-root/one.css +14 -84
  69. package/DS1/1-root/one.semantic.css +200 -148
  70. package/DS1/1-root/palette.css +58 -0
  71. package/DS1/1-root/palette.ts +19 -0
  72. package/DS1/1-root/progress.css +356 -0
  73. package/DS1/1-root/prose.css +202 -0
  74. package/DS1/1-root/row.css +300 -0
  75. package/DS1/1-root/table.css +111 -0
  76. package/DS1/1-root/text.css +70 -0
  77. package/DS1/2-core/button-split.ts +55 -0
  78. package/DS1/2-core/chart/chart.css +169 -0
  79. package/DS1/2-core/chart/grid-chart.ts +554 -0
  80. package/DS1/2-core/ds-avatar.ts +25 -6
  81. package/DS1/2-core/ds-badge.ts +10 -10
  82. package/DS1/2-core/ds-button.ts +111 -26
  83. package/DS1/2-core/ds-card.ts +135 -105
  84. package/DS1/2-core/ds-chart.ts +327 -0
  85. package/DS1/2-core/ds-composer.ts +8 -2
  86. package/DS1/2-core/ds-cycle.ts +97 -21
  87. package/DS1/2-core/ds-empty.ts +120 -0
  88. package/DS1/2-core/ds-icon.ts +11 -2
  89. package/DS1/2-core/ds-input.ts +165 -6
  90. package/DS1/2-core/ds-message.ts +218 -0
  91. package/DS1/2-core/ds-notice.ts +10 -0
  92. package/DS1/2-core/ds-progress.ts +380 -0
  93. package/DS1/2-core/ds-stat.ts +174 -0
  94. package/DS1/2-core/ds-switch.ts +1 -0
  95. package/DS1/2-core/ds-text.ts +15 -2
  96. package/DS1/2-core/ds-toast.ts +354 -0
  97. package/DS1/2-core/figures.ts +105 -0
  98. package/DS1/2-core/generated/ds-icon-map.ts +238 -128
  99. package/DS1/2-core/generated/icon-avatar.ts +2 -0
  100. package/DS1/2-core/generated/icons-extra.ts +120 -65
  101. package/DS1/2-core/generated/icons-immediate.ts +1 -1
  102. package/DS1/2-core/styles/ds-avatar.css +9 -8
  103. package/DS1/2-core/styles/ds-button-host.css +26 -3
  104. package/DS1/2-core/styles/ds-button-split.css +67 -0
  105. package/DS1/2-core/styles/ds-button.css +49 -15
  106. package/DS1/2-core/styles/ds-card.css +34 -0
  107. package/DS1/2-core/styles/ds-composer.css +13 -0
  108. package/DS1/2-core/styles/ds-cycle.css +10 -0
  109. package/DS1/2-core/styles/ds-empty.css +18 -0
  110. package/DS1/2-core/styles/ds-gap.css +1 -0
  111. package/DS1/2-core/styles/ds-icon.css +1 -0
  112. package/DS1/2-core/styles/ds-input.css +59 -6
  113. package/DS1/2-core/styles/ds-notice.css +32 -0
  114. package/DS1/2-core/styles/ds-progress.css +25 -0
  115. package/DS1/2-core/styles/ds-select.css +2 -2
  116. package/DS1/2-core/styles/ds-split.css +2 -62
  117. package/DS1/2-core/styles/ds-stat.css +34 -0
  118. package/DS1/2-core/styles/ds-switch.css +16 -1
  119. package/DS1/2-core/styles/ds-text.css +43 -12
  120. package/DS1/2-core/styles/ds-toast.css +182 -0
  121. package/DS1/2-core/styles/ds-tooltip.css +1 -0
  122. package/DS1/3-unit/calendar-base.ts +263 -0
  123. package/DS1/3-unit/ds-accordion.ts +9 -1
  124. package/DS1/3-unit/ds-avatar-group.ts +1 -0
  125. package/DS1/3-unit/ds-calendar-large.ts +349 -0
  126. package/DS1/3-unit/ds-calendar.ts +344 -0
  127. package/DS1/3-unit/ds-carousel.ts +368 -0
  128. package/DS1/3-unit/ds-date-picker.ts +540 -0
  129. package/DS1/3-unit/ds-form.ts +45 -37
  130. package/DS1/3-unit/ds-list.ts +48 -1
  131. package/DS1/3-unit/ds-matrix.ts +318 -0
  132. package/DS1/3-unit/ds-menu.ts +8 -4
  133. package/DS1/3-unit/ds-row.ts +84 -1
  134. package/DS1/3-unit/ds-sidebar.ts +366 -0
  135. package/DS1/3-unit/ds-table.ts +75 -34
  136. package/DS1/3-unit/styles/ds-accordion.css +1 -0
  137. package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
  138. package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
  139. package/DS1/3-unit/styles/ds-calendar.css +238 -0
  140. package/DS1/3-unit/styles/ds-carousel.css +30 -0
  141. package/DS1/3-unit/styles/ds-date-picker.css +124 -0
  142. package/DS1/3-unit/styles/ds-list.css +1 -0
  143. package/DS1/3-unit/styles/ds-matrix.css +203 -0
  144. package/DS1/3-unit/styles/ds-menu.css +31 -6
  145. package/DS1/3-unit/styles/ds-row.css +84 -2
  146. package/DS1/3-unit/styles/ds-sidebar.css +134 -0
  147. package/DS1/3-unit/styles/ds-table.css +3 -74
  148. package/DS1/4-page/ds-dialog.ts +40 -4
  149. package/DS1/4-page/ds-document.ts +240 -0
  150. package/DS1/4-page/ds-footer.ts +165 -0
  151. package/DS1/4-page/ds-grid.ts +39 -59
  152. package/DS1/4-page/ds-header.ts +171 -0
  153. package/DS1/4-page/ds-page.ts +184 -0
  154. package/DS1/4-page/email.ts +2 -3
  155. package/DS1/4-page/styles/ds-container.css +1 -0
  156. package/DS1/4-page/styles/ds-document.css +18 -0
  157. package/DS1/4-page/styles/ds-footer.css +29 -0
  158. package/DS1/4-page/styles/ds-grid.css +31 -85
  159. package/DS1/4-page/styles/ds-header.css +57 -0
  160. package/DS1/4-page/styles/ds-page.css +214 -0
  161. package/DS1/components.ts +7 -1
  162. package/DS1/index.ts +24 -6
  163. package/DS1/react/avatar.ts +4 -5
  164. package/DS1/react/button-split.ts +29 -0
  165. package/DS1/react/button.ts +32 -13
  166. package/DS1/react/carousel.ts +76 -0
  167. package/DS1/react/dialog.ts +36 -5
  168. package/DS1/react/document.ts +14 -0
  169. package/DS1/react/empty.ts +32 -0
  170. package/DS1/react/footer.ts +17 -0
  171. package/DS1/react/header.ts +15 -0
  172. package/DS1/react/input.ts +28 -17
  173. package/DS1/react/message.ts +73 -0
  174. package/DS1/react/notice.ts +59 -0
  175. package/DS1/react/page.ts +13 -0
  176. package/DS1/react/progress.ts +99 -0
  177. package/DS1/react/sidebar.ts +71 -0
  178. package/DS1/react/stat.ts +73 -0
  179. package/DS1/react/toast.ts +82 -0
  180. package/DS1/x-icon/Tabler-LICENSE.md +27 -0
  181. package/DS1/x-icon/airtable.svg +5 -0
  182. package/DS1/x-icon/attach.svg +3 -0
  183. package/DS1/x-icon/audio.svg +3 -0
  184. package/DS1/x-icon/bag-alt.svg +3 -0
  185. package/DS1/x-icon/bank.svg +3 -0
  186. package/DS1/x-icon/banknote.svg +3 -0
  187. package/DS1/x-icon/bolt.svg +3 -0
  188. package/DS1/x-icon/book-alt.svg +3 -0
  189. package/DS1/x-icon/book.svg +4 -0
  190. package/DS1/x-icon/box.svg +3 -0
  191. package/DS1/x-icon/briefcase.svg +3 -0
  192. package/DS1/x-icon/building.svg +4 -0
  193. package/DS1/x-icon/car.svg +3 -0
  194. package/DS1/x-icon/card.svg +3 -0
  195. package/DS1/x-icon/cart.svg +3 -0
  196. package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-down.svg} +1 -1
  197. package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
  198. package/DS1/x-icon/{ezo-android-screen-lists.svg → chevron-right.svg} +1 -1
  199. package/DS1/x-icon/{ezo-item-button-reopen.svg → chevron-up.svg} +1 -1
  200. package/DS1/x-icon/cloud.svg +3 -0
  201. package/DS1/x-icon/coffee.svg +3 -0
  202. package/DS1/x-icon/coins.svg +3 -0
  203. package/DS1/x-icon/cursor.svg +3 -0
  204. package/DS1/x-icon/curve.svg +7 -0
  205. package/DS1/x-icon/dislike.svg +4 -0
  206. package/DS1/x-icon/dot-bank.svg +3 -0
  207. package/DS1/x-icon/dot-banknote.svg +3 -0
  208. package/DS1/x-icon/dot-banknotes.svg +3 -0
  209. package/DS1/x-icon/dot-card.svg +3 -0
  210. package/DS1/x-icon/dot-coin.svg +3 -0
  211. package/DS1/x-icon/dot-coins.svg +3 -0
  212. package/DS1/x-icon/dot-receipt.svg +3 -0
  213. package/DS1/x-icon/dot-safe.svg +3 -0
  214. package/DS1/x-icon/dot-transfer.svg +3 -0
  215. package/DS1/x-icon/dot-wallet.svg +3 -0
  216. package/DS1/x-icon/download.svg +4 -0
  217. package/DS1/x-icon/drive.svg +5 -0
  218. package/DS1/x-icon/drop.svg +3 -0
  219. package/DS1/x-icon/dropbox.svg +3 -0
  220. package/DS1/x-icon/dumbbell.svg +3 -0
  221. package/DS1/x-icon/eye-off.svg +3 -0
  222. package/DS1/x-icon/eye.svg +3 -0
  223. package/DS1/x-icon/facebook.svg +3 -0
  224. package/DS1/x-icon/figma.svg +5 -0
  225. package/DS1/x-icon/flame.svg +3 -0
  226. package/DS1/x-icon/flip.svg +5 -0
  227. package/DS1/x-icon/food.svg +3 -0
  228. package/DS1/x-icon/fuel.svg +3 -0
  229. package/DS1/x-icon/game.svg +3 -0
  230. package/DS1/x-icon/gift.svg +3 -0
  231. package/DS1/x-icon/github.svg +3 -0
  232. package/DS1/x-icon/heart.svg +3 -0
  233. package/DS1/x-icon/history.svg +3 -0
  234. package/DS1/x-icon/home-alt.svg +3 -0
  235. package/DS1/x-icon/income.svg +3 -0
  236. package/DS1/x-icon/info.svg +5 -0
  237. package/DS1/x-icon/instagram.svg +5 -0
  238. package/DS1/x-icon/jpbank.svg +3 -0
  239. package/DS1/x-icon/key.svg +4 -0
  240. package/DS1/x-icon/keyboard.svg +3 -0
  241. package/DS1/x-icon/like.svg +4 -0
  242. package/DS1/x-icon/linkedin.svg +7 -0
  243. package/DS1/x-icon/loom.svg +6 -0
  244. package/DS1/x-icon/map.svg +4 -0
  245. package/DS1/x-icon/medical.svg +3 -0
  246. package/DS1/x-icon/minus.svg +3 -0
  247. package/DS1/x-icon/moon.svg +3 -0
  248. package/DS1/x-icon/move.svg +3 -0
  249. package/DS1/x-icon/music-alt.svg +3 -0
  250. package/DS1/x-icon/music.svg +5 -0
  251. package/DS1/x-icon/notion.svg +6 -0
  252. package/DS1/x-icon/offline.svg +3 -0
  253. package/DS1/x-icon/pause.svg +4 -0
  254. package/DS1/x-icon/paw.svg +3 -0
  255. package/DS1/x-icon/pdf.svg +3 -0
  256. package/DS1/x-icon/people.svg +5 -0
  257. package/DS1/x-icon/percent.svg +3 -0
  258. package/DS1/x-icon/phone.svg +3 -0
  259. package/DS1/x-icon/pill.svg +3 -0
  260. package/DS1/x-icon/plane.svg +3 -0
  261. package/DS1/x-icon/postal.svg +3 -0
  262. package/DS1/x-icon/present.svg +4 -0
  263. package/DS1/x-icon/reaction.svg +5 -0
  264. package/DS1/x-icon/receipt.svg +3 -0
  265. package/DS1/x-icon/refresh.svg +3 -0
  266. package/DS1/x-icon/refund.svg +3 -0
  267. package/DS1/x-icon/repeat.svg +3 -0
  268. package/DS1/x-icon/rotate.svg +4 -0
  269. package/DS1/x-icon/safe.svg +3 -0
  270. package/DS1/x-icon/school-alt.svg +3 -0
  271. package/DS1/x-icon/shield-alt.svg +3 -0
  272. package/DS1/x-icon/shield.svg +4 -0
  273. package/DS1/x-icon/shirt.svg +3 -0
  274. package/DS1/x-icon/shop.svg +3 -0
  275. package/DS1/x-icon/sign-in.svg +3 -0
  276. package/DS1/x-icon/sign-out.svg +3 -0
  277. package/DS1/x-icon/slack.svg +6 -0
  278. package/DS1/x-icon/sparkle.svg +3 -0
  279. package/DS1/x-icon/start.svg +4 -0
  280. package/DS1/x-icon/stop.svg +3 -0
  281. package/DS1/x-icon/sun.svg +3 -0
  282. package/DS1/x-icon/system.svg +4 -0
  283. package/DS1/x-icon/tag.svg +3 -0
  284. package/DS1/x-icon/ticket.svg +3 -0
  285. package/DS1/x-icon/title-struck.svg +4 -0
  286. package/DS1/x-icon/train.svg +3 -0
  287. package/DS1/x-icon/transfer.svg +3 -0
  288. package/DS1/x-icon/tv.svg +3 -0
  289. package/DS1/x-icon/upload.svg +4 -0
  290. package/DS1/x-icon/video.svg +4 -0
  291. package/DS1/x-icon/vimeo.svg +3 -0
  292. package/DS1/x-icon/wallet.svg +3 -0
  293. package/DS1/x-icon/wifi.svg +3 -0
  294. package/DS1/x-icon/window.svg +4 -0
  295. package/DS1/x-icon/wrench.svg +3 -0
  296. package/DS1/x-icon/x-brand.svg +4 -0
  297. package/DS1/x-icon/youtube.svg +4 -0
  298. package/README.md +3 -3
  299. package/dist/0-face/calendar.d.ts +75 -0
  300. package/dist/0-face/calendar.d.ts.map +1 -0
  301. package/dist/0-face/calendar.js +149 -0
  302. package/dist/0-face/carousel.d.ts +174 -0
  303. package/dist/0-face/carousel.d.ts.map +1 -0
  304. package/dist/0-face/carousel.js +583 -0
  305. package/dist/0-face/component-visibility.d.ts +7 -0
  306. package/dist/0-face/component-visibility.d.ts.map +1 -0
  307. package/dist/0-face/component-visibility.js +11 -0
  308. package/dist/0-face/copy-text.d.ts +11 -0
  309. package/dist/0-face/copy-text.d.ts.map +1 -0
  310. package/dist/0-face/copy-text.js +97 -0
  311. package/dist/0-face/device.d.ts +3 -7
  312. package/dist/0-face/device.d.ts.map +1 -1
  313. package/dist/0-face/device.js +7 -41
  314. package/dist/0-face/dialog-swipe.d.ts +49 -0
  315. package/dist/0-face/dialog-swipe.d.ts.map +1 -0
  316. package/dist/0-face/dialog-swipe.js +239 -0
  317. package/dist/0-face/dialogs.d.ts +33 -0
  318. package/dist/0-face/dialogs.d.ts.map +1 -0
  319. package/dist/0-face/dialogs.js +173 -0
  320. package/dist/0-face/drawer.d.ts +64 -0
  321. package/dist/0-face/drawer.d.ts.map +1 -0
  322. package/dist/0-face/drawer.js +256 -0
  323. package/dist/0-face/feedback-words.d.ts +21 -0
  324. package/dist/0-face/feedback-words.d.ts.map +1 -0
  325. package/dist/0-face/feedback-words.js +30 -0
  326. package/dist/0-face/feedback.d.ts +41 -0
  327. package/dist/0-face/feedback.d.ts.map +1 -0
  328. package/dist/0-face/feedback.js +35 -0
  329. package/dist/0-face/format.d.ts +166 -0
  330. package/dist/0-face/format.d.ts.map +1 -0
  331. package/dist/0-face/format.js +445 -0
  332. package/dist/0-face/generated/toast-assets.d.ts +11 -0
  333. package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
  334. package/dist/0-face/generated/toast-assets.js +14 -0
  335. package/dist/0-face/grid-fit.js +1 -1
  336. package/dist/0-face/grid.d.ts.map +1 -1
  337. package/dist/0-face/grid.js +2 -1
  338. package/dist/0-face/header.d.ts +38 -0
  339. package/dist/0-face/header.d.ts.map +1 -0
  340. package/dist/0-face/header.js +80 -0
  341. package/dist/0-face/i18n.d.ts +32 -2
  342. package/dist/0-face/i18n.d.ts.map +1 -1
  343. package/dist/0-face/i18n.js +65 -19
  344. package/dist/0-face/keys.d.ts +104 -0
  345. package/dist/0-face/keys.d.ts.map +1 -0
  346. package/dist/0-face/keys.js +253 -0
  347. package/dist/0-face/languages.d.ts +2 -2
  348. package/dist/0-face/languages.js +3 -3
  349. package/dist/0-face/layout-inspector.js +6 -6
  350. package/dist/0-face/library-styles.d.ts +7 -0
  351. package/dist/0-face/library-styles.d.ts.map +1 -0
  352. package/dist/0-face/library-styles.js +29 -0
  353. package/dist/0-face/load-toaster.d.ts +8 -0
  354. package/dist/0-face/load-toaster.d.ts.map +1 -0
  355. package/dist/0-face/load-toaster.js +7 -0
  356. package/dist/0-face/preference-options.d.ts +34 -0
  357. package/dist/0-face/preference-options.d.ts.map +1 -0
  358. package/dist/0-face/preference-options.js +1 -0
  359. package/dist/0-face/preferences.d.ts +3 -12
  360. package/dist/0-face/preferences.d.ts.map +1 -1
  361. package/dist/0-face/pricing.d.ts +19 -9
  362. package/dist/0-face/pricing.d.ts.map +1 -1
  363. package/dist/0-face/pricing.js +81 -40
  364. package/dist/0-face/scaling.d.ts +71 -1
  365. package/dist/0-face/scaling.d.ts.map +1 -1
  366. package/dist/0-face/scaling.js +108 -3
  367. package/dist/0-face/shared-words.d.ts +9 -4
  368. package/dist/0-face/shared-words.d.ts.map +1 -1
  369. package/dist/0-face/sidebar.d.ts +69 -0
  370. package/dist/0-face/sidebar.d.ts.map +1 -0
  371. package/dist/0-face/sidebar.js +191 -0
  372. package/dist/0-face/theme-bootstrap.d.ts +1 -0
  373. package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
  374. package/dist/0-face/theme-bootstrap.js +214 -0
  375. package/dist/0-face/theme.d.ts +32 -0
  376. package/dist/0-face/theme.d.ts.map +1 -1
  377. package/dist/0-face/theme.js +69 -43
  378. package/dist/0-face/toast-queue.d.ts +110 -0
  379. package/dist/0-face/toast-queue.d.ts.map +1 -0
  380. package/dist/0-face/toast-queue.js +98 -0
  381. package/dist/0-face/toaster.d.ts +27 -0
  382. package/dist/0-face/toaster.d.ts.map +1 -0
  383. package/dist/0-face/toaster.js +373 -0
  384. package/dist/0-face/tooltips.d.ts +24 -1
  385. package/dist/0-face/tooltips.d.ts.map +1 -1
  386. package/dist/0-face/tooltips.js +155 -16
  387. package/dist/0-face/translations/da.json +60 -1
  388. package/dist/0-face/translations/de.json +60 -1
  389. package/dist/0-face/translations/en.json +60 -1
  390. package/dist/0-face/translations/es.json +60 -1
  391. package/dist/0-face/translations/fi.json +60 -1
  392. package/dist/0-face/translations/fr.json +60 -1
  393. package/dist/0-face/translations/is.json +60 -1
  394. package/dist/0-face/translations/it.json +60 -1
  395. package/dist/0-face/translations/ja.json +60 -1
  396. package/dist/0-face/translations/ko.json +60 -1
  397. package/dist/0-face/translations/nb.json +60 -1
  398. package/dist/0-face/translations/pt-BR.json +60 -1
  399. package/dist/0-face/translations/pt.json +60 -1
  400. package/dist/0-face/translations/sv.json +60 -1
  401. package/dist/0-face/translations/zh.json +60 -1
  402. package/dist/0-face/translations-format.d.ts.map +1 -1
  403. package/dist/0-face/translations-format.js +3 -4
  404. package/dist/1-root/library-tokens.d.ts +31 -0
  405. package/dist/1-root/library-tokens.d.ts.map +1 -0
  406. package/dist/1-root/library-tokens.js +84 -0
  407. package/dist/1-root/measures.d.ts +52 -0
  408. package/dist/1-root/measures.d.ts.map +1 -0
  409. package/dist/1-root/measures.js +49 -0
  410. package/dist/1-root/palette.d.ts +5 -0
  411. package/dist/1-root/palette.d.ts.map +1 -1
  412. package/dist/1-root/palette.js +18 -0
  413. package/dist/2-core/button-split.d.ts +21 -0
  414. package/dist/2-core/button-split.d.ts.map +1 -0
  415. package/dist/2-core/button-split.js +48 -0
  416. package/dist/2-core/chart/grid-chart.d.ts +113 -0
  417. package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
  418. package/dist/2-core/chart/grid-chart.js +466 -0
  419. package/dist/2-core/ds-avatar.d.ts +20 -3
  420. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  421. package/dist/2-core/ds-avatar.js +19 -5
  422. package/dist/2-core/ds-badge.js +10 -13
  423. package/dist/2-core/ds-button.d.ts +76 -0
  424. package/dist/2-core/ds-button.d.ts.map +1 -1
  425. package/dist/2-core/ds-button.js +101 -26
  426. package/dist/2-core/ds-card.d.ts +76 -11
  427. package/dist/2-core/ds-card.d.ts.map +1 -1
  428. package/dist/2-core/ds-card.js +129 -105
  429. package/dist/2-core/ds-chart.d.ts +105 -0
  430. package/dist/2-core/ds-chart.d.ts.map +1 -0
  431. package/dist/2-core/ds-chart.js +390 -0
  432. package/dist/2-core/ds-composer.d.ts +7 -0
  433. package/dist/2-core/ds-composer.d.ts.map +1 -1
  434. package/dist/2-core/ds-composer.js +1 -1
  435. package/dist/2-core/ds-cycle.d.ts +36 -2
  436. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  437. package/dist/2-core/ds-cycle.js +95 -18
  438. package/dist/2-core/ds-empty.d.ts +74 -0
  439. package/dist/2-core/ds-empty.d.ts.map +1 -0
  440. package/dist/2-core/ds-empty.js +96 -0
  441. package/dist/2-core/ds-icon.d.ts +6 -0
  442. package/dist/2-core/ds-icon.d.ts.map +1 -1
  443. package/dist/2-core/ds-icon.js +12 -2
  444. package/dist/2-core/ds-input.d.ts +39 -1
  445. package/dist/2-core/ds-input.d.ts.map +1 -1
  446. package/dist/2-core/ds-input.js +150 -6
  447. package/dist/2-core/ds-message.d.ts +154 -0
  448. package/dist/2-core/ds-message.d.ts.map +1 -0
  449. package/dist/2-core/ds-message.js +177 -0
  450. package/dist/2-core/ds-notice.d.ts +13 -0
  451. package/dist/2-core/ds-notice.d.ts.map +1 -0
  452. package/dist/2-core/ds-notice.js +11 -0
  453. package/dist/2-core/ds-progress.d.ts +200 -0
  454. package/dist/2-core/ds-progress.d.ts.map +1 -0
  455. package/dist/2-core/ds-progress.js +319 -0
  456. package/dist/2-core/ds-stat.d.ts +126 -0
  457. package/dist/2-core/ds-stat.d.ts.map +1 -0
  458. package/dist/2-core/ds-stat.js +137 -0
  459. package/dist/2-core/ds-switch.d.ts +1 -0
  460. package/dist/2-core/ds-switch.d.ts.map +1 -1
  461. package/dist/2-core/ds-switch.js +1 -0
  462. package/dist/2-core/ds-text.d.ts +15 -2
  463. package/dist/2-core/ds-text.d.ts.map +1 -1
  464. package/dist/2-core/ds-text.js +13 -0
  465. package/dist/2-core/ds-toast.d.ts +139 -0
  466. package/dist/2-core/ds-toast.d.ts.map +1 -0
  467. package/dist/2-core/ds-toast.js +329 -0
  468. package/dist/2-core/figures.d.ts +56 -0
  469. package/dist/2-core/figures.d.ts.map +1 -0
  470. package/dist/2-core/figures.js +70 -0
  471. package/dist/2-core/generated/ds-icon-map.d.ts +120 -65
  472. package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
  473. package/dist/2-core/generated/ds-icon-map.js +238 -128
  474. package/dist/2-core/generated/icon-avatar.d.ts +2 -0
  475. package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
  476. package/dist/2-core/generated/icon-avatar.js +2 -0
  477. package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
  478. package/dist/2-core/generated/icons-extra.js +120 -65
  479. package/dist/2-core/generated/icons-immediate.d.ts +1 -1
  480. package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
  481. package/dist/2-core/generated/icons-immediate.js +1 -1
  482. package/dist/3-unit/calendar-base.d.ts +149 -0
  483. package/dist/3-unit/calendar-base.d.ts.map +1 -0
  484. package/dist/3-unit/calendar-base.js +172 -0
  485. package/dist/3-unit/ds-accordion.d.ts +9 -0
  486. package/dist/3-unit/ds-accordion.d.ts.map +1 -1
  487. package/dist/3-unit/ds-accordion.js +7 -1
  488. package/dist/3-unit/ds-avatar-group.d.ts +1 -0
  489. package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
  490. package/dist/3-unit/ds-calendar-large.d.ts +138 -0
  491. package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
  492. package/dist/3-unit/ds-calendar-large.js +305 -0
  493. package/dist/3-unit/ds-calendar.d.ts +175 -0
  494. package/dist/3-unit/ds-calendar.d.ts.map +1 -0
  495. package/dist/3-unit/ds-calendar.js +303 -0
  496. package/dist/3-unit/ds-carousel.d.ts +182 -0
  497. package/dist/3-unit/ds-carousel.d.ts.map +1 -0
  498. package/dist/3-unit/ds-carousel.js +327 -0
  499. package/dist/3-unit/ds-date-picker.d.ts +203 -0
  500. package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
  501. package/dist/3-unit/ds-date-picker.js +499 -0
  502. package/dist/3-unit/ds-form.d.ts.map +1 -1
  503. package/dist/3-unit/ds-form.js +38 -28
  504. package/dist/3-unit/ds-list.d.ts +12 -0
  505. package/dist/3-unit/ds-list.d.ts.map +1 -1
  506. package/dist/3-unit/ds-list.js +52 -1
  507. package/dist/3-unit/ds-matrix.d.ts +146 -0
  508. package/dist/3-unit/ds-matrix.d.ts.map +1 -0
  509. package/dist/3-unit/ds-matrix.js +248 -0
  510. package/dist/3-unit/ds-menu.d.ts +1 -1
  511. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  512. package/dist/3-unit/ds-menu.js +7 -4
  513. package/dist/3-unit/ds-row.d.ts +66 -0
  514. package/dist/3-unit/ds-row.d.ts.map +1 -1
  515. package/dist/3-unit/ds-row.js +80 -1
  516. package/dist/3-unit/ds-sidebar.d.ts +149 -0
  517. package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
  518. package/dist/3-unit/ds-sidebar.js +342 -0
  519. package/dist/3-unit/ds-table.d.ts +28 -10
  520. package/dist/3-unit/ds-table.d.ts.map +1 -1
  521. package/dist/3-unit/ds-table.js +53 -25
  522. package/dist/4-page/ds-dialog.d.ts +16 -1
  523. package/dist/4-page/ds-dialog.d.ts.map +1 -1
  524. package/dist/4-page/ds-dialog.js +39 -3
  525. package/dist/4-page/ds-document.d.ts +98 -0
  526. package/dist/4-page/ds-document.d.ts.map +1 -0
  527. package/dist/4-page/ds-document.js +213 -0
  528. package/dist/4-page/ds-footer.d.ts +100 -0
  529. package/dist/4-page/ds-footer.d.ts.map +1 -0
  530. package/dist/4-page/ds-footer.js +119 -0
  531. package/dist/4-page/ds-grid.d.ts +32 -12
  532. package/dist/4-page/ds-grid.d.ts.map +1 -1
  533. package/dist/4-page/ds-grid.js +30 -39
  534. package/dist/4-page/ds-header.d.ts +84 -0
  535. package/dist/4-page/ds-header.d.ts.map +1 -0
  536. package/dist/4-page/ds-header.js +143 -0
  537. package/dist/4-page/ds-page.d.ts +110 -0
  538. package/dist/4-page/ds-page.d.ts.map +1 -0
  539. package/dist/4-page/ds-page.js +155 -0
  540. package/dist/4-page/email.d.ts +2 -3
  541. package/dist/4-page/email.d.ts.map +1 -1
  542. package/dist/4-page/email.js +2 -3
  543. package/dist/components.d.ts +4 -1
  544. package/dist/components.d.ts.map +1 -1
  545. package/dist/components.js +4 -1
  546. package/dist/design-system-1.bundle.js +12322 -5523
  547. package/dist/design-system-1.bundle.js.map +1 -1
  548. package/dist/design-system-1.bundle.min.js +8771 -4115
  549. package/dist/design-system-1.bundle.min.js.map +1 -1
  550. package/dist/design-system-1.css +1 -1
  551. package/dist/feedback.js +541 -0
  552. package/dist/feedback.js.map +1 -0
  553. package/dist/{icons-extra-BoAACA4X.js → icons-extra-CiDDs7_-.js} +404 -312
  554. package/dist/icons-extra-CiDDs7_-.js.map +1 -0
  555. package/dist/{icons-extra-DlxTo_Y4.js → icons-extra-hauwCx07.js} +121 -66
  556. package/dist/icons-extra-hauwCx07.js.map +1 -0
  557. package/dist/index.d.ts +21 -6
  558. package/dist/index.d.ts.map +1 -1
  559. package/dist/index.js +21 -6
  560. package/dist/react/avatar.d.ts +5 -9
  561. package/dist/react/avatar.d.ts.map +1 -1
  562. package/dist/react/avatar.js +2 -2
  563. package/dist/react/button-split.d.ts +19 -0
  564. package/dist/react/button-split.d.ts.map +1 -0
  565. package/dist/react/{split.js → button-split.js} +12 -9
  566. package/dist/react/button.d.ts +18 -7
  567. package/dist/react/button.d.ts.map +1 -1
  568. package/dist/react/button.js +13 -4
  569. package/dist/react/carousel.d.ts +63 -0
  570. package/dist/react/carousel.d.ts.map +1 -0
  571. package/dist/react/carousel.js +47 -0
  572. package/dist/react/choice.d.ts +1 -1
  573. package/dist/react/context-menu.d.ts +337 -337
  574. package/dist/react/dialog.d.ts +684 -678
  575. package/dist/react/dialog.d.ts.map +1 -1
  576. package/dist/react/dialog.js +29 -3
  577. package/dist/react/document.d.ts +11 -0
  578. package/dist/react/document.d.ts.map +1 -0
  579. package/dist/react/document.js +10 -0
  580. package/dist/react/empty.d.ts +34 -0
  581. package/dist/react/empty.d.ts.map +1 -0
  582. package/dist/react/empty.js +8 -0
  583. package/dist/react/file-picker.d.ts +1 -1
  584. package/dist/react/footer.d.ts +13 -0
  585. package/dist/react/footer.d.ts.map +1 -0
  586. package/dist/react/footer.js +12 -0
  587. package/dist/react/header.d.ts +12 -0
  588. package/dist/react/header.d.ts.map +1 -0
  589. package/dist/react/header.js +11 -0
  590. package/dist/react/input.d.ts +31 -9
  591. package/dist/react/input.d.ts.map +1 -1
  592. package/dist/react/input.js +94 -94
  593. package/dist/react/message.d.ts +66 -0
  594. package/dist/react/message.d.ts.map +1 -0
  595. package/dist/react/message.js +37 -0
  596. package/dist/react/notice.d.ts +45 -0
  597. package/dist/react/notice.d.ts.map +1 -0
  598. package/dist/react/notice.js +34 -0
  599. package/dist/react/page.d.ts +10 -0
  600. package/dist/react/page.d.ts.map +1 -0
  601. package/dist/react/page.js +9 -0
  602. package/dist/react/progress.d.ts +107 -0
  603. package/dist/react/progress.d.ts.map +1 -0
  604. package/dist/react/progress.js +47 -0
  605. package/dist/react/sidebar.d.ts +54 -0
  606. package/dist/react/sidebar.d.ts.map +1 -0
  607. package/dist/react/sidebar.js +48 -0
  608. package/dist/react/stat.d.ts +78 -0
  609. package/dist/react/stat.d.ts.map +1 -0
  610. package/dist/react/stat.js +25 -0
  611. package/dist/react/toast.d.ts +37 -0
  612. package/dist/react/toast.d.ts.map +1 -0
  613. package/dist/react/toast.js +55 -0
  614. package/dist/shared-words-CyZYc_De.js +1818 -0
  615. package/dist/shared-words-CyZYc_De.js.map +1 -0
  616. package/dist/shared-words-DAVSET4Z.js +1800 -0
  617. package/dist/shared-words-DAVSET4Z.js.map +1 -0
  618. package/package.json +19 -6
  619. package/DS1/2-core/ds-banner.ts +0 -122
  620. package/DS1/2-core/ds-date.ts +0 -24
  621. package/DS1/2-core/ds-language.ts +0 -94
  622. package/DS1/2-core/ds-pagedots.ts +0 -52
  623. package/DS1/2-core/ds-split.ts +0 -122
  624. package/DS1/2-core/ds-textarea.ts +0 -136
  625. package/DS1/2-core/styles/ds-banner.css +0 -77
  626. package/DS1/2-core/styles/ds-date.css +0 -9
  627. package/DS1/2-core/styles/ds-language.css +0 -78
  628. package/DS1/2-core/styles/ds-pagedots.css +0 -31
  629. package/DS1/2-core/styles/ds-textarea.css +0 -27
  630. package/DS1/4-page/ds-layout.ts +0 -949
  631. package/DS1/4-page/styles/ds-layout.css +0 -246
  632. package/DS1/react/split.ts +0 -42
  633. package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
  634. package/DS1/x-icon/ezo-account-close.svg +0 -1
  635. package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
  636. package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
  637. package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
  638. package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
  639. package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
  640. package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
  641. package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
  642. package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
  643. package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
  644. package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
  645. package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
  646. package/DS1/x-icon/ezo-block-accordion.svg +0 -1
  647. package/DS1/x-icon/ezo-block-divider.svg +0 -1
  648. package/DS1/x-icon/ezo-block-group.svg +0 -1
  649. package/DS1/x-icon/ezo-block-image.svg +0 -1
  650. package/DS1/x-icon/ezo-block-section.svg +0 -1
  651. package/DS1/x-icon/ezo-block-table.svg +0 -1
  652. package/DS1/x-icon/ezo-code.svg +0 -14
  653. package/DS1/x-icon/ezo-down.svg +0 -3
  654. package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
  655. package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
  656. package/DS1/x-icon/ezo-item-button-header.svg +0 -3
  657. package/DS1/x-icon/ezo-item-button-open.svg +0 -3
  658. package/DS1/x-icon/ezo-item-button-star.svg +0 -3
  659. package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
  660. package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
  661. package/DS1/x-icon/ezo-item-star.svg +0 -5
  662. package/DS1/x-icon/ezo-left.svg +0 -3
  663. package/DS1/x-icon/ezo-logo.svg +0 -1
  664. package/DS1/x-icon/ezo-mic.svg +0 -8
  665. package/DS1/x-icon/ezo-move-column.svg +0 -14
  666. package/DS1/x-icon/ezo-move-row.svg +0 -18
  667. package/DS1/x-icon/ezo-navigation-check.svg +0 -1
  668. package/DS1/x-icon/ezo-note-back.svg +0 -5
  669. package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
  670. package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
  671. package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
  672. package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
  673. package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
  674. package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
  675. package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
  676. package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
  677. package/DS1/x-icon/ezo-note-more.svg +0 -7
  678. package/DS1/x-icon/ezo-note-star.svg +0 -5
  679. package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
  680. package/DS1/x-icon/ezo-play.svg +0 -5
  681. package/DS1/x-icon/ezo-premium-star.svg +0 -5
  682. package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
  683. package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
  684. package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
  685. package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
  686. package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
  687. package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
  688. package/DS1/x-icon/ezo-setting-blank.svg +0 -5
  689. package/DS1/x-icon/ezo-store-chevron.svg +0 -1
  690. package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
  691. package/DS1/x-icon/product-sources.json +0 -2557
  692. package/dist/2-core/ds-banner.d.ts +0 -68
  693. package/dist/2-core/ds-banner.d.ts.map +0 -1
  694. package/dist/2-core/ds-banner.js +0 -98
  695. package/dist/2-core/ds-date.d.ts +0 -16
  696. package/dist/2-core/ds-date.d.ts.map +0 -1
  697. package/dist/2-core/ds-date.js +0 -15
  698. package/dist/2-core/ds-language.d.ts +0 -75
  699. package/dist/2-core/ds-language.d.ts.map +0 -1
  700. package/dist/2-core/ds-language.js +0 -74
  701. package/dist/2-core/ds-pagedots.d.ts +0 -32
  702. package/dist/2-core/ds-pagedots.d.ts.map +0 -1
  703. package/dist/2-core/ds-pagedots.js +0 -36
  704. package/dist/2-core/ds-split.d.ts +0 -75
  705. package/dist/2-core/ds-split.d.ts.map +0 -1
  706. package/dist/2-core/ds-split.js +0 -101
  707. package/dist/2-core/ds-textarea.d.ts +0 -46
  708. package/dist/2-core/ds-textarea.d.ts.map +0 -1
  709. package/dist/2-core/ds-textarea.js +0 -121
  710. package/dist/4-page/ds-layout.d.ts +0 -31
  711. package/dist/4-page/ds-layout.d.ts.map +0 -1
  712. package/dist/4-page/ds-layout.js +0 -930
  713. package/dist/icons-extra-BoAACA4X.js.map +0 -1
  714. package/dist/icons-extra-DlxTo_Y4.js.map +0 -1
  715. package/dist/react/split.d.ts +0 -15
  716. package/dist/react/split.d.ts.map +0 -1
  717. package/dist/shared-words-Cg6Phtx0.js +0 -915
  718. package/dist/shared-words-Cg6Phtx0.js.map +0 -1
  719. package/dist/shared-words-Ddz0yUEF.js +0 -933
  720. package/dist/shared-words-Ddz0yUEF.js.map +0 -1
  721. /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
  722. /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
@@ -0,0 +1,327 @@
1
+ import { html, LitElement, nothing, unsafeCSS, type PropertyValues } from "lit";
2
+ import { property, state } from "lit/decorators.js";
3
+ import { type DataPoint, drawSparkline, GridChart, type Marker, type Series, type SeriesKind } from "./chart/grid-chart";
4
+
5
+ import { define } from "../0-face/define";
6
+ import styles from "./chart/chart.css?inline";
7
+ export * from "./chart/grid-chart";
8
+
9
+ /** Independent chart configuration; no module-wide size or theme state. */
10
+ export class ChartElement extends LitElement {
11
+ static styles = unsafeCSS(styles);
12
+ @property({ type: Number }) unit = 20;
13
+ @property() grid: "full" | "rows" | "none" = "rows";
14
+ private media?: MediaQueryList;
15
+ private themeChanged = () => this.refreshTheme();
16
+ connectedCallback(): void {
17
+ super.connectedCallback();
18
+ this.media = globalThis.matchMedia?.("(prefers-color-scheme: dark)");
19
+ this.media?.addEventListener("change", this.themeChanged);
20
+ void this.updateComplete.then(() => {
21
+ if (!this.isConnected) return;
22
+ this.initialize();
23
+ this.refreshTheme();
24
+ });
25
+ }
26
+ disconnectedCallback(): void {
27
+ this.media?.removeEventListener("change", this.themeChanged);
28
+ super.disconnectedCallback();
29
+ }
30
+ protected initialize(): void {}
31
+ refreshTheme(): void { this.requestUpdate(); }
32
+ protected updated(_changed: PropertyValues): void {
33
+ if (!Number.isFinite(this.unit) || this.unit <= 0) this.unit = 20;
34
+ this.style.setProperty("--ds-chart-unit", `${this.unit}px`);
35
+ }
36
+ }
37
+
38
+ /** Whole-pixel width of an element, kept current. */
39
+ function observeWidth(element: HTMLElement, callback: (width: number) => void): ResizeObserver {
40
+ const observer = new ResizeObserver(() => callback(Math.floor(element.getBoundingClientRect().width)));
41
+ observer.observe(element);
42
+ return observer;
43
+ }
44
+
45
+ export class GridLineChart extends ChartElement {
46
+ connectedCallback(): void { this.dataset.chartKind = "line"; super.connectedCallback(); }
47
+ @property({ attribute: false }) data: DataPoint[] = [];
48
+ @property() kind: SeriesKind = "area";
49
+ @property({ type: Number }) base?: number;
50
+ @property() color = "--ds-chart-ink";
51
+ @property({ type: Number }) rows = 8;
52
+ @property({ attribute: false }) markers: Marker[] = [];
53
+ @property({ attribute: false }) timeRange: [number, number] | null = null;
54
+ @property({ type: Boolean }) extremes = false;
55
+ @property({ type: Boolean }) labels = false;
56
+ @property({ type: Boolean }) live = false;
57
+ @property({ attribute: false }) format: (value: number) => string = (v) => v.toFixed(2);
58
+ /** Changing this replays the draw-in. */
59
+ @property() drawKey = "";
60
+
61
+ @state() private dot: { x: number; y: number } | null = null;
62
+
63
+ private chart?: GridChart;
64
+ private series?: Series;
65
+ private observer?: ResizeObserver;
66
+ private scrubbing = false;
67
+ private dotTimer?: ReturnType<typeof setTimeout>;
68
+ refreshTheme(): void { this.chart?.refreshTheme(); }
69
+
70
+ render() {
71
+ return html`<canvas
72
+ @pointerdown=${this.down}
73
+ @pointermove=${this.move}
74
+ @pointerup=${this.up}
75
+ @pointercancel=${this.up}
76
+ @pointerleave=${this.leave}
77
+ ></canvas
78
+ >${this.live && this.dot
79
+ ? html`<span class="live-dot" style="transform: translate(${this.dot.x - 2}px, ${this.dot.y - 2}px)"></span>`
80
+ : nothing}`;
81
+ }
82
+
83
+ protected initialize(): void {
84
+ if (this.chart) return;
85
+ const canvas = this.renderRoot.querySelector("canvas") as HTMLCanvasElement;
86
+ this.chart = new GridChart(canvas, {
87
+ extremes: this.extremes,
88
+ scaleLabels: this.labels,
89
+ format: this.format,
90
+ grid: this.grid,
91
+ unit: this.unit,
92
+ });
93
+ this.series = this.chart.addSeries(this.seriesOptions());
94
+ this.chart.subscribeCrosshairMove((event) => {
95
+ this.dispatchEvent(new CustomEvent("scrub", { detail: event.point, bubbles: true, composed: true }));
96
+ });
97
+ this.observer = observeWidth(this, (width) => {
98
+ this.chart?.resize(width, this.rows * this.unit);
99
+ this.placeDot();
100
+ });
101
+ void document.fonts?.ready.then(() => this.chart?.draw());
102
+ this.resizeToUnit();
103
+ this.sync(true);
104
+ }
105
+
106
+ resizeToUnit(): void {
107
+ this.chart?.resize(Math.floor(this.getBoundingClientRect().width), this.rows * this.unit);
108
+ this.placeDot();
109
+ }
110
+
111
+ updated(changed: PropertyValues<this>): void {
112
+ super.updated(changed);
113
+ if (!this.chart) return;
114
+ if (changed.has("unit") || changed.has("grid")) this.chart.applyOptions({ unit: this.unit, grid: this.grid });
115
+ if (changed.has("rows") || changed.has("unit")) this.resizeToUnit();
116
+ if (changed.has("extremes") || changed.has("labels") || changed.has("format")) {
117
+ this.chart.applyOptions({ extremes: this.extremes, scaleLabels: this.labels, format: this.format });
118
+ }
119
+ if (changed.has("data") || changed.has("kind") || changed.has("base") || changed.has("color") || changed.has("markers") || changed.has("timeRange")) {
120
+ this.sync(changed.has("drawKey"));
121
+ } else if (changed.has("drawKey")) {
122
+ this.sync(true);
123
+ }
124
+ }
125
+
126
+ disconnectedCallback(): void {
127
+ super.disconnectedCallback();
128
+ this.observer?.disconnect();
129
+ clearTimeout(this.dotTimer);
130
+ this.chart?.destroy();
131
+ this.chart = undefined;
132
+ }
133
+
134
+ private seriesOptions() {
135
+ return { kind: this.kind, baseValue: this.base, color: this.color };
136
+ }
137
+
138
+ private sync(animate: boolean): void {
139
+ if (!this.chart || !this.series) return;
140
+ this.chart.setTimeRange(this.timeRange);
141
+ this.series.applyOptions(this.seriesOptions());
142
+ this.series.setMarkers(this.markers);
143
+ this.series.setData(this.data);
144
+ if (animate) {
145
+ this.dot = null;
146
+ this.chart.animateIn();
147
+ clearTimeout(this.dotTimer);
148
+ this.dotTimer = setTimeout(() => this.placeDot(), 560);
149
+ } else {
150
+ this.placeDot();
151
+ }
152
+ }
153
+
154
+ private placeDot(): void {
155
+ const point = this.chart?.lastPoint() ?? null;
156
+ if (point?.x !== this.dot?.x || point?.y !== this.dot?.y) this.dot = point;
157
+ }
158
+
159
+ private x(event: PointerEvent): number {
160
+ return event.clientX - this.getBoundingClientRect().left;
161
+ }
162
+
163
+ private down = (event: PointerEvent) => {
164
+ if (event.button !== 0) return;
165
+ this.scrubbing = true;
166
+ (event.target as HTMLElement).setPointerCapture(event.pointerId);
167
+ this.chart?.setCrosshair(this.x(event));
168
+ };
169
+
170
+ private move = (event: PointerEvent) => {
171
+ if (this.scrubbing || event.pointerType === "mouse") this.chart?.setCrosshair(this.x(event));
172
+ };
173
+
174
+ private up = (event: PointerEvent) => {
175
+ this.scrubbing = false;
176
+ if (event.pointerType !== "mouse" || event.type === "pointercancel") this.chart?.setCrosshair(null);
177
+ };
178
+
179
+ private leave = (event: PointerEvent) => {
180
+ if (!this.scrubbing && event.pointerType === "mouse") this.chart?.setCrosshair(null);
181
+ };
182
+ }
183
+
184
+ export class GridSpark extends ChartElement {
185
+ connectedCallback(): void { this.dataset.chartKind = "spark"; super.connectedCallback(); }
186
+ @property({ attribute: false }) values: number[] = [];
187
+ @property({ type: Number }) base?: number;
188
+ @property({ type: Number }) cols = 4;
189
+ refreshTheme(): void { this.draw(); }
190
+
191
+ render() {
192
+ const last = this.values[this.values.length - 1] ?? 0;
193
+ const reference = this.base ?? this.values[0] ?? 0;
194
+ return html`<canvas class=${last >= reference ? "up" : "down"}></canvas>`;
195
+ }
196
+
197
+ updated(changed: PropertyValues): void {
198
+ super.updated(changed);
199
+ this.draw();
200
+ }
201
+
202
+ private draw(): void {
203
+ const canvas = this.renderRoot.querySelector("canvas");
204
+ if (!canvas) return;
205
+ const style = getComputedStyle(canvas);
206
+ drawSparkline(canvas, this.values, {
207
+ width: this.cols * this.unit,
208
+ height: this.unit,
209
+ color: style.color,
210
+ base: this.base,
211
+ faint: style.borderTopColor,
212
+ });
213
+ }
214
+ }
215
+
216
+ export interface BarItem {
217
+ label: string;
218
+ value: number;
219
+ /** Drawn as an outline at its height, e.g. the expected figure. */
220
+ compare?: number;
221
+ tone?: "up" | "down" | "ink";
222
+ caption?: string;
223
+ }
224
+
225
+ export class GridBars extends ChartElement {
226
+ connectedCallback(): void { this.dataset.chartKind = "bars"; super.connectedCallback(); }
227
+ @property({ attribute: false }) items: BarItem[] = [];
228
+ @property({ type: Number }) rows = 4;
229
+ @property({ type: Number }) span = 2;
230
+
231
+ render() {
232
+ const height = (this.rows - 1) * this.unit;
233
+ const max = Math.max(...this.items.flatMap((item) => [item.value, item.compare ?? 0]), 1e-9);
234
+ const px = (v: number) => Math.max(1, Math.round((v / max) * (height - 4)));
235
+ return html`<div class="bars" style="--span: ${this.span}">
236
+ ${this.items.map(
237
+ (item) => html`<div class="bar-cell">
238
+ <div class="bar-area" style="height: ${height}px">
239
+ ${item.compare !== undefined
240
+ ? html`<span class="bar-compare" style="height: ${px(item.compare)}px"></span>`
241
+ : nothing}
242
+ ${item.value > 0
243
+ ? html`<span class="bar-fill ${item.tone ?? "ink"}" style="height: ${px(item.value)}px"></span>`
244
+ : nothing}
245
+ </div>
246
+ <span class="bar-caption">${item.caption ?? ""}</span>
247
+ <span class="bar-label">${item.label}</span>
248
+ </div>`,
249
+ )}
250
+ </div>`;
251
+ }
252
+ }
253
+
254
+ export class GridRatio extends ChartElement {
255
+ connectedCallback(): void { this.dataset.chartKind = "ratio"; super.connectedCallback(); }
256
+ @property({ type: Number }) value = 0.5;
257
+ @state() private width = 0;
258
+ private observer?: ResizeObserver;
259
+
260
+ protected initialize(): void {
261
+ this.observer?.disconnect();
262
+ this.observer = observeWidth(this, (width) => {
263
+ this.width = width;
264
+ });
265
+ }
266
+
267
+ disconnectedCallback(): void {
268
+ super.disconnectedCallback();
269
+ this.observer?.disconnect();
270
+ }
271
+
272
+ render() {
273
+ const left = Math.round(Math.max(0, this.width - 1) * Math.max(0, Math.min(1, this.value)));
274
+ return html`<span class="ratio-buy" style="width: ${left}px"></span
275
+ ><span class="ratio-sell" style="width: ${Math.max(0, this.width - left - 1)}px"></span>`;
276
+ }
277
+ }
278
+
279
+ export interface RangeMark {
280
+ value: number;
281
+ label?: string;
282
+ kind: "dot" | "tick";
283
+ }
284
+
285
+ export class GridRange extends ChartElement {
286
+ connectedCallback(): void { this.dataset.chartKind = "range"; super.connectedCallback(); }
287
+ @property({ type: Number }) min = 0;
288
+ @property({ type: Number }) max = 1;
289
+ @property({ type: Number }) from = 0;
290
+ @property({ type: Number }) to = 1;
291
+ @property({ attribute: false }) marks: RangeMark[] = [];
292
+ @state() private width = 0;
293
+ private observer?: ResizeObserver;
294
+
295
+ protected initialize(): void {
296
+ this.observer?.disconnect();
297
+ this.observer = observeWidth(this, (width) => {
298
+ this.width = width;
299
+ });
300
+ }
301
+
302
+ disconnectedCallback(): void {
303
+ super.disconnectedCallback();
304
+ this.observer?.disconnect();
305
+ }
306
+
307
+ render() {
308
+ const span = Math.max(1e-9, this.max - this.min);
309
+ const x = (v: number) => Math.round(((v - this.min) / span) * (this.width - 1));
310
+ const left = x(this.from);
311
+ const right = x(this.to);
312
+ return html`<span class="range-track"></span>
313
+ <span class="range-fill" style="transform: translateX(${left}px); width: ${Math.max(1, right - left + 1)}px"></span>
314
+ ${this.marks.map(
315
+ (mark) =>
316
+ html`<span class="range-${mark.kind}" style="transform: translateX(${x(mark.value) - (mark.kind === "dot" ? 2 : 0)}px)"
317
+ >${mark.label ? html`<span class="range-label">${mark.label}</span>` : nothing}</span
318
+ >`,
319
+ )}`;
320
+ }
321
+ }
322
+
323
+ define("ds-chart", GridLineChart);
324
+ define("ds-spark", GridSpark);
325
+ define("ds-bars", GridBars);
326
+ define("ds-ratio", GridRatio);
327
+ define("ds-range", GridRange);
@@ -14,7 +14,13 @@ function styleRoot(root: Node) {
14
14
  styledRoots.add(root);
15
15
  }
16
16
 
17
- export type TextHighlight = { start: number; end: number; color?: string };
17
+ /**
18
+ * A range of the text, in UTF-16 offsets. `color` is any CSS colour, the
19
+ * accent when left out. By default the words are tinted with it; with `fill`
20
+ * the colour itself lies behind the words, which stay in the text colour, so
21
+ * a pale colour shows and every palette colour keeps the words readable.
22
+ */
23
+ export type TextHighlight = { start: number; end: number; color?: string; fill?: boolean };
18
24
 
19
25
  /** A native writing field with metric-preserving highlights. Products own the
20
26
  * text and mention data; DS1 owns its face, growth and synchronized overlay.
@@ -173,7 +179,7 @@ export class Composer extends LitElement {
173
179
  const parts = this.validHighlights().map(range => {
174
180
  const before = this.text.slice(cursor, range.start);
175
181
  cursor = range.end;
176
- return html`${before}<mark style=${styleMap({ "--composer-highlight-color": range.color || undefined })}>${this.text.slice(range.start, range.end)}</mark>`;
182
+ return html`${before}<mark class=${range.fill ? "fill" : ""} style=${styleMap({ "--composer-highlight-color": range.color || undefined })}>${this.text.slice(range.start, range.end)}</mark>`;
177
183
  });
178
184
  return html`<span class="row-metric" aria-hidden="true"></span><slot @slotchange=${this.bindControl}></slot><div class="mirror" aria-hidden="true">${parts}${this.text.slice(cursor)}${"\n"}</div>`;
179
185
  }
@@ -8,8 +8,9 @@ import {
8
8
  setLanguage,
9
9
  } from "../0-face/i18n";
10
10
  import type { LanguageCode } from "../0-face/i18n";
11
- import { currentTheme, setTheme } from "../0-face/theme";
12
- import type { ThemeType } from "../0-face/theme";
11
+ import { LANGUAGE_METADATA, isLanguage, normalizeLanguage } from "../0-face/languages";
12
+ import { currentThemeMode, setThemeMode, THEME_MODES } from "../0-face/theme";
13
+ import type { ThemeMode } from "../0-face/theme";
13
14
  import { savePreferences } from "../0-face/preferences";
14
15
  import "./ds-button";
15
16
  import "./ds-icon";
@@ -50,14 +51,34 @@ const getPageStyle = (): string => {
50
51
 
51
52
  // App width utilities removed
52
53
 
54
+ // The settings a cycle knows by name. Any other cycle steps through its own
55
+ // `values` and reports each step as a `change` event.
56
+ /**
57
+ * A language's name in the language itself (`Dansk`, `日本語`): from the
58
+ * language list, else from the browser, else the code.
59
+ */
60
+ export function nativeLanguageName(code: string): string {
61
+ if (!code) return "";
62
+ if (isLanguage(code)) return LANGUAGE_METADATA[code].nativeLabel;
63
+ const member = normalizeLanguage(code, null);
64
+ if (member) return LANGUAGE_METADATA[member].nativeLabel;
65
+ return getLanguageDisplayName(code, { locale: code });
66
+ }
67
+
68
+ const SETTINGS = new Set(["language", "theme", "accent-color", "notes-style-medium", "page-style", "icon-only"]);
69
+
53
70
  // Use a regular class with proper TypeScript type declarations and JSDoc comments
54
71
  export class Cycle extends LitElement {
55
72
  static formAssociated = true;
56
73
  // Define reactive properties using Lit's property system
57
74
  static get properties() {
58
75
  return {
59
- type: { type: String },
76
+ type: { type: String, reflect: true },
77
+ // Compatibility attribute; every language picker now uses the normal button.
78
+ chip: { type: Boolean, reflect: true },
60
79
  values: { type: Array },
80
+ value: { type: String },
81
+ label: { type: String, reflect: true },
61
82
  currentValue: { type: String, state: true }, // Make this a private state property
62
83
  translationsReady: { type: Boolean, state: true }, // Track if translations are loaded
63
84
  disabled: { type: Boolean, reflect: true },
@@ -76,7 +97,14 @@ export class Cycle extends LitElement {
76
97
  // Add runtime properties using the any type
77
98
  // These are just for TypeScript and don't create shadowing fields
78
99
  declare type: string;
100
+ declare chip: boolean;
79
101
  declare values: string[];
102
+ declare value: string;
103
+ /**
104
+ * The setting's name, a translation key: the button is announced as
105
+ * "Size: 40" while its face shows the value alone.
106
+ */
107
+ declare label: string;
80
108
  declare currentValue: string;
81
109
  declare translationsReady: boolean;
82
110
  declare disabled: boolean;
@@ -103,7 +131,10 @@ export class Cycle extends LitElement {
103
131
 
104
132
  // Initialize properties with default values
105
133
  this.type = "";
134
+ this.chip = false;
106
135
  this.values = [];
136
+ this.value = "";
137
+ this.label = "";
107
138
  this.currentValue = "";
108
139
  this.translationsReady = false;
109
140
  this.disabled = false;
@@ -154,19 +185,17 @@ export class Cycle extends LitElement {
154
185
  this.initializeValues();
155
186
  }
156
187
 
157
- async initializeValues() {
188
+ // Synchronous: nothing here waits, and a thrown error should surface where it happens.
189
+ initializeValues(): void {
158
190
  if (this.type === "language") {
159
191
  // Dynamically get available languages from translation data
160
192
  const availableLanguages = getAvailableLanguagesSync();
161
193
  this.values = availableLanguages;
162
194
  this.currentValue = currentLanguage.value;
163
195
  } else if (this.type === "theme") {
164
- // Set up theme cycling
165
- this.values = ["light", "dark"];
166
-
167
- // Set initial value based on current theme
168
- const currentThemeValue = currentTheme.get();
169
- this.currentValue = currentThemeValue;
196
+ // Light, dark and the system's, the stored choice
197
+ this.values = [...THEME_MODES];
198
+ this.currentValue = currentThemeMode.get();
170
199
  } else if (this.type === "accent-color") {
171
200
  // Set up accent color cycling
172
201
  this.values = [
@@ -225,15 +254,14 @@ export class Cycle extends LitElement {
225
254
  }
226
255
  }
227
256
 
228
- async setupInitialValue() {
257
+ setupInitialValue(): void {
229
258
  if (this.type === "language") {
230
259
  // Get current language
231
260
  const currentLang = currentLanguage.value;
232
261
  this.currentValue = currentLang;
233
262
  } else if (this.type === "theme") {
234
- // Get current theme
235
- const currentThemeValue = currentTheme.get();
236
- this.currentValue = currentThemeValue;
263
+ // The stored choice, which may be the system's
264
+ this.currentValue = currentThemeMode.get();
237
265
  } else if (this.type === "accent-color") {
238
266
  // Get current accent color
239
267
  const currentAccentColor = getAccentColor();
@@ -332,11 +360,11 @@ export class Cycle extends LitElement {
332
360
  // Update current value
333
361
  this.currentValue = newTheme;
334
362
 
335
- // Set the new theme using the shared helper
336
- setTheme(newTheme as ThemeType);
363
+ // Set the new choice using the shared helper
364
+ setThemeMode(newTheme as ThemeMode);
337
365
 
338
366
  // Save preferences
339
- savePreferences({ theme: newTheme as ThemeType });
367
+ savePreferences({ theme: newTheme as ThemeMode });
340
368
 
341
369
  // Theme helper already emits the change event, so no manual dispatch here
342
370
  } else if (this.type === "accent-color") {
@@ -426,6 +454,10 @@ export class Cycle extends LitElement {
426
454
  detail: { behavior: newIconOnlyValue },
427
455
  })
428
456
  );
457
+ } else if (!SETTINGS.has(this.type)) {
458
+ const next = this.values[(this.values.indexOf(this.currentValue) + 1) % this.values.length];
459
+ this.currentValue = this.value = next;
460
+ this.dispatchEvent(new CustomEvent("change", { detail: { value: next }, bubbles: true, composed: true }));
429
461
  }
430
462
 
431
463
  // Request update to re-render
@@ -434,9 +466,7 @@ export class Cycle extends LitElement {
434
466
 
435
467
  getValueDisplay(value: string): string | any {
436
468
  if (this.type === "language") {
437
- return getLanguageDisplayName(value, {
438
- locale: currentLanguage.value,
439
- });
469
+ return nativeLanguageName(value);
440
470
  } else if (this.type === "theme") {
441
471
  // Try to get translated theme name
442
472
  if (this.translationsReady) {
@@ -542,6 +572,12 @@ export class Cycle extends LitElement {
542
572
  * first paint, so the inner button and any page sheet see the same word.
543
573
  */
544
574
  willUpdate(changed: Map<PropertyKey, unknown>) {
575
+ // A cycle through its own values shows `value` when it is one of them,
576
+ // and otherwise the first.
577
+ if (!SETTINGS.has(this.type) && this.values.length) {
578
+ if (changed.has("value") && this.values.includes(this.value)) this.currentValue = this.value;
579
+ else if (!this.values.includes(this.currentValue)) this.currentValue = this.values.includes(this.value) ? this.value : this.values[0];
580
+ }
545
581
  if (changed.has("variant") && this.variant) {
546
582
  this.primary = this.variant === "primary";
547
583
  this.secondary = this.variant === "secondary";
@@ -552,10 +588,50 @@ export class Cycle extends LitElement {
552
588
  }
553
589
  }
554
590
 
591
+ /** The words the face shows for the current value, for the accessible name. */
592
+ valueText(): string {
593
+ const value = this.currentValue;
594
+ if (this.type === "language") return nativeLanguageName(value);
595
+ if (this.type === "theme") return translate(value === "light" ? "Light" : value === "dark" ? "Dark" : "System");
596
+ if (this.type === "accent-color") return translate(this.getColorKey(value));
597
+ if (this.type === "page-style" || this.type === "icon-only") return translate(value === "note" ? "Note" : "Page");
598
+ return value;
599
+ }
600
+
601
+ /** "Size: 40" when the cycle has a label, so the control is named while its face shows the value alone. */
602
+ accessibleLabel(): string {
603
+ if (this.label) return `${translate(this.label)}: ${this.valueText()}`;
604
+ // The language picker is always named: "Language: Dansk".
605
+ return this.type === "language" ? `${translate("Language")}: ${this.valueText()}` : "";
606
+ }
607
+
608
+ /**
609
+ * The language picker: a native button carrying the language's code as
610
+ * `lang`, so each name is set in its own typeface. Always uses the normal
611
+ * label-sized button; legacy `chip` and `compact` attributes do not change its width.
612
+ */
613
+ private renderLanguagePicker() {
614
+ const code = this.currentValue || currentLanguage.value;
615
+ const button = html`<button
616
+ type="button"
617
+ lang=${code}
618
+ aria-label=${this.accessibleLabel()}
619
+ ?disabled=${this.disabled || this._fieldsetDisabled}
620
+ @click=${this.handleButtonClick}
621
+ >
622
+ ${nativeLanguageName(code)}
623
+ </button>`;
624
+ return html`<ds-button fit control="slotted"
625
+ ?primary=${this.primary && !this.secondary} ?secondary=${this.secondary}
626
+ ?disabled=${this.disabled || this._fieldsetDisabled}>${button}</ds-button>`;
627
+ }
628
+
555
629
  render() {
630
+ if (this.type === "language") return this.renderLanguagePicker();
556
631
  return html`
557
632
  <div class="cycle">
558
633
  <ds-button fit
634
+ .label=${this.accessibleLabel()}
559
635
  ?primary=${this.primary && !this.secondary}
560
636
  ?secondary=${this.secondary}
561
637
  ?disabled=${this.disabled || this._fieldsetDisabled}
@@ -572,7 +648,7 @@ export class Cycle extends LitElement {
572
648
  ></ds-text>`
573
649
  : this.type === "theme"
574
650
  ? html`<ds-text
575
- text=${this.currentValue === "light" ? "Light" : "Dark"}
651
+ text=${this.currentValue === "light" ? "Light" : this.currentValue === "dark" ? "Dark" : "System"}
576
652
  ></ds-text>`
577
653
  : this.type === "accent-color"
578
654
  ? html`<ds-text