@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,201 @@
1
+ /**
2
+ * The keyboard and pointer of a tree of rows, shared by `<ds-sidebar tree>`
3
+ * and the native `.ds-sidebar` classes of `row.css`.
4
+ *
5
+ * A tree is one stop for Tab: the row that has the focus (the selected row
6
+ * at first, otherwise the first) carries `tabindex="0"` and every other row
7
+ * `-1`. Up and Down move between rows that are not disabled, Home and End to
8
+ * the first and last; Right opens a closed row and enters an open one; Left
9
+ * closes an open row and moves to its parent; a printed character moves to
10
+ * the next row whose label starts with it. Space selects the row, Enter
11
+ * selects and activates it, as a double click does.
12
+ *
13
+ * `treeStep()` is that model alone, on the visible rows. `connectSidebar()`
14
+ * puts it on a native tree: rows with `role="treeitem"` and `aria-level`,
15
+ * flat, in order, inside an element with `role="tree"`. It dispatches the
16
+ * same events as `<ds-sidebar tree>` (`sidebar-toggle`, `sidebar-select`,
17
+ * `sidebar-activate`, each with `{ id }`), and unless the page cancels one
18
+ * it does what the event asks: opens or closes the row, hiding the rows
19
+ * inside it, or selects it.
20
+ */
21
+
22
+ /** A visible row of a tree, as the keyboard sees it. */
23
+ export interface TreeRow {
24
+ /** 1 for a row at the root. */
25
+ level: number;
26
+ /** `true` open, `false` closed; a leaf has none. */
27
+ expanded?: boolean;
28
+ disabled?: boolean;
29
+ /** The words the type-ahead matches. */
30
+ label?: string;
31
+ }
32
+
33
+ /** What a key asks of the tree: move the focus to a row, open or close the row, select or activate it. */
34
+ export interface TreeStep {
35
+ focus?: number;
36
+ toggle?: boolean;
37
+ select?: boolean;
38
+ activate?: boolean;
39
+ }
40
+
41
+ const available = (rows: readonly TreeRow[], from: number, step: 1 | -1) => {
42
+ for (let index = from; index >= 0 && index < rows.length; index += step) if (!rows[index]!.disabled) return index;
43
+ return undefined;
44
+ };
45
+
46
+ /** The next row after `index` whose label starts with `letter`, from the top again after the last. */
47
+ function typeahead(rows: readonly TreeRow[], index: number, letter: string) {
48
+ const wanted = letter.toLocaleLowerCase();
49
+ for (let offset = 1; offset <= rows.length; offset++) {
50
+ const at = (index + offset) % rows.length;
51
+ const row = rows[at]!;
52
+ if (!row.disabled && (row.label ?? "").trim().toLocaleLowerCase().startsWith(wanted)) return at;
53
+ }
54
+ return undefined;
55
+ }
56
+
57
+ /**
58
+ * What `key` does on the row at `index` of the visible `rows`, or
59
+ * `undefined` when the tree leaves the key alone.
60
+ */
61
+ export function treeStep(rows: readonly TreeRow[], index: number, key: string): TreeStep | undefined {
62
+ const row = rows[index];
63
+ if (!row) return undefined;
64
+ switch (key) {
65
+ case "ArrowDown": return { focus: available(rows, index + 1, 1) ?? index };
66
+ case "ArrowUp": return { focus: available(rows, index - 1, -1) ?? index };
67
+ case "Home": return { focus: available(rows, 0, 1) ?? index };
68
+ case "End": return { focus: available(rows, rows.length - 1, -1) ?? index };
69
+ case "ArrowRight":
70
+ if (row.expanded === false) return row.disabled ? {} : { toggle: true };
71
+ if (row.expanded && (rows[index + 1]?.level ?? 0) > row.level) return { focus: available(rows, index + 1, 1) ?? index };
72
+ return {};
73
+ case "ArrowLeft": {
74
+ if (row.expanded && !row.disabled) return { toggle: false };
75
+ for (let at = index - 1; at >= 0; at--) if (rows[at]!.level < row.level) return rows[at]!.disabled ? {} : { focus: at };
76
+ return {};
77
+ }
78
+ case "Enter": return row.disabled ? {} : { select: true, activate: true };
79
+ case " ": return row.disabled ? {} : { select: true };
80
+ default: {
81
+ // One printed character, a letter outside the basic plane included; named keys are longer.
82
+ if (!/^\S$/u.test(key)) return undefined;
83
+ const at = typeahead(rows, index, key);
84
+ return at === undefined ? {} : { focus: at };
85
+ }
86
+ }
87
+ }
88
+
89
+ /** The events a tree sends, the same from `<ds-sidebar tree>` and a native tree. */
90
+ export interface SidebarEvents {
91
+ "sidebar-toggle": CustomEvent<{ id: string; expanded: boolean }>;
92
+ "sidebar-select": CustomEvent<{ id: string }>;
93
+ "sidebar-activate": CustomEvent<{ id: string }>;
94
+ }
95
+
96
+ const ITEM = '[role="treeitem"]';
97
+ const level = (item: Element) => Math.max(1, Number.parseInt(item.getAttribute("aria-level") ?? "1", 10) || 1);
98
+ const expandedOf = (item: Element) => {
99
+ const value = item.getAttribute("aria-expanded");
100
+ return value === null ? undefined : value === "true";
101
+ };
102
+ const disabledOf = (item: Element) => item.getAttribute("aria-disabled") === "true";
103
+ const labelOf = (item: Element) => (item.querySelector(".ds-sidebar__label") ?? item).textContent ?? "";
104
+ /** A row's name in the events: `data-id`, else its `id`. */
105
+ const idOf = (item: HTMLElement) => item.dataset.id ?? item.id;
106
+
107
+ /**
108
+ * Gives a native tree its keyboard and pointer. Returns a function that
109
+ * takes them away again.
110
+ *
111
+ * <ul class="ds-sidebar" role="tree" aria-label="Files">
112
+ * <li class="ds-sidebar__item" role="treeitem" aria-level="1" aria-expanded="true" data-id="src">
113
+ * <span class="ds-sidebar__disclosure" aria-hidden="true"></span>
114
+ * <span class="ds-sidebar__label">src</span>
115
+ * </li>
116
+ * <li class="ds-sidebar__item" role="treeitem" aria-level="2" data-id="main">…</li>
117
+ * </ul>
118
+ */
119
+ export function connectSidebar(tree: HTMLElement): () => void {
120
+ const items = () => [...tree.querySelectorAll<HTMLElement>(ITEM)];
121
+ const visible = () => items().filter(item => !item.hidden && !item.closest("[hidden]"));
122
+
123
+ /** Exactly one visible row is the Tab stop: the focused one, else the selected one, else the first available. */
124
+ const rove = (focus?: HTMLElement) => {
125
+ const rows = visible();
126
+ const current = focus ?? rows.find(item => item.tabIndex === 0 && !disabledOf(item)) ?? rows.find(item => item.getAttribute("aria-selected") === "true") ?? rows.find(item => !disabledOf(item)) ?? rows[0];
127
+ for (const item of items()) item.tabIndex = item === current ? 0 : -1;
128
+ return current;
129
+ };
130
+
131
+ const send = <K extends keyof SidebarEvents>(name: K, detail: SidebarEvents[K]["detail"]) =>
132
+ tree.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true, cancelable: true }));
133
+
134
+ /** Opens or closes a row and shows or hides the rows inside it, keeping closed rows inside it closed. */
135
+ const toggle = (item: HTMLElement, expanded: boolean) => {
136
+ if (!send("sidebar-toggle", { id: idOf(item), expanded })) return;
137
+ item.setAttribute("aria-expanded", String(expanded));
138
+ const all = items();
139
+ const own = level(item);
140
+ let closedAt = Infinity;
141
+ for (const row of all.slice(all.indexOf(item) + 1)) {
142
+ const depth = level(row);
143
+ if (depth <= own) break;
144
+ if (depth <= closedAt) closedAt = Infinity;
145
+ row.hidden = !expanded || depth > closedAt;
146
+ if (expanded && !row.hidden && row.getAttribute("aria-expanded") === "false") closedAt = depth;
147
+ }
148
+ rove(item);
149
+ };
150
+
151
+ const select = (item: HTMLElement) => {
152
+ if (!send("sidebar-select", { id: idOf(item) })) return;
153
+ for (const row of items()) if (row.hasAttribute("aria-selected") || row === item) row.setAttribute("aria-selected", String(row === item));
154
+ };
155
+
156
+ const focus = (item: HTMLElement) => { rove(item); item.focus(); };
157
+
158
+ const keydown = (event: KeyboardEvent) => {
159
+ if (event.altKey || event.ctrlKey || event.metaKey) return;
160
+ const item = (event.target as Element | null)?.closest<HTMLElement>(ITEM);
161
+ if (!item || !tree.contains(item)) return;
162
+ const rows = visible();
163
+ const step = treeStep(rows.map(row => ({ level: level(row), expanded: expandedOf(row), disabled: disabledOf(row), label: labelOf(row) })), rows.indexOf(item), event.key);
164
+ if (!step) return;
165
+ event.preventDefault();
166
+ if (step.toggle !== undefined) toggle(item, step.toggle);
167
+ if (step.select) select(item);
168
+ if (step.activate) send("sidebar-activate", { id: idOf(item) });
169
+ if (step.focus !== undefined && rows[step.focus]) focus(rows[step.focus]!);
170
+ };
171
+
172
+ const click = (event: MouseEvent) => {
173
+ const item = (event.target as Element | null)?.closest<HTMLElement>(ITEM);
174
+ if (!item || !tree.contains(item) || disabledOf(item)) return;
175
+ const disclosure = (event.target as Element).closest(".ds-sidebar__disclosure");
176
+ if (disclosure && expandedOf(item) !== undefined) toggle(item, !expandedOf(item));
177
+ else select(item);
178
+ focus(item);
179
+ };
180
+
181
+ const dblclick = (event: MouseEvent) => {
182
+ const item = (event.target as Element | null)?.closest<HTMLElement>(ITEM);
183
+ if (!item || !tree.contains(item) || disabledOf(item) || (event.target as Element).closest(".ds-sidebar__disclosure")) return;
184
+ send("sidebar-activate", { id: idOf(item) });
185
+ };
186
+
187
+ if (!tree.hasAttribute("role")) tree.setAttribute("role", "tree");
188
+ rove();
189
+ // Rows the page adds or removes keep one Tab stop.
190
+ const observer = typeof MutationObserver === "undefined" ? undefined : new MutationObserver(() => { if (!items().some(item => item.tabIndex === 0 && !item.hidden)) rove(); });
191
+ observer?.observe(tree, { childList: true, subtree: true });
192
+ tree.addEventListener("keydown", keydown);
193
+ tree.addEventListener("click", click);
194
+ tree.addEventListener("dblclick", dblclick);
195
+ return () => {
196
+ observer?.disconnect();
197
+ tree.removeEventListener("keydown", keydown);
198
+ tree.removeEventListener("click", click);
199
+ tree.removeEventListener("dblclick", dblclick);
200
+ };
201
+ }
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Design system 1's theme, on before the first paint.
3
+ *
4
+ * A classic script for the <head>: inline it before the stylesheets, or load it
5
+ * there with a plain <script src> (not a module), which holds rendering until
6
+ * it has run. It needs nothing else and waits for nothing.
7
+ *
8
+ * It reads the stored choice, light, dark or system, and puts the theme on
9
+ * the root element at once (with nothing stored, `themeDefault`: system
10
+ * unless the product says light or dark):
11
+ * - the class `light-theme` or `dark-theme`, the canonical mark the
12
+ * stylesheets key on;
13
+ * - `data-theme="light"` or `"dark"`, the same, for pages that key on it;
14
+ * - `color-scheme`, so light-dark() tokens and the browser's controls follow;
15
+ * - `--lightningcss-light` and `--lightningcss-dark`, so CSS compiled with
16
+ * Lightning CSS's light-dark() fallback follows the choice, not the system;
17
+ * - the canvas behind the page and the theme-color meta, in the paper.
18
+ * It also sets `lang` from the language module's stored choice, or from the
19
+ * address when the product takes the language from there.
20
+ *
21
+ * Then it keeps the page right: in system mode it follows
22
+ * prefers-color-scheme as it changes, and it applies the choice again when
23
+ * another tab stores one and when a page returns from the back-forward cache.
24
+ * A change after the first paint crosses over in a view transition of the
25
+ * root, unless the reader asks for reduced motion.
26
+ *
27
+ * `window.DS_ONE_THEME` is the runtime: `mode()`, `theme()`, `set(mode)` and
28
+ * `apply()`; a change dispatches `theme-changed` on window with
29
+ * `{ theme, mode }`. `0-face/theme.ts` runs this same file, so the components
30
+ * and a page without them share one implementation, whichever loads first.
31
+ *
32
+ * Set options before it on `window.DS_ONE_PREFERENCES`: `themeStorageKey`
33
+ * (`"ds-one:theme"` by default), `themeDefault` (`"light"`, `"dark"` or
34
+ * `"system"`, the default) for a visitor who has chosen nothing yet,
35
+ * `themeMode: "system"` to follow the system and never read or write a stored
36
+ * choice, and `themePaper` as `{ light, dark }` colours for the canvas, or
37
+ * `false` to leave the background and theme-color to the page. The language
38
+ * follows `window.DS_ONE_I18N`: `storageKey` (`"language"`), `persist: false`,
39
+ * `languages`, `routing` with `languageFromAddress: true` (a prefix such as
40
+ * `/ja/…` wins over the stored choice), and `langTarget` (set, the root's
41
+ * `lang` is left alone).
42
+ */
43
+ (function () {
44
+ if (typeof window === "undefined" || typeof document === "undefined" || window.DS_ONE_THEME) return;
45
+ var root = document.documentElement;
46
+ var MODES = ["light", "dark", "system"];
47
+ // Design system 1's languages (0-face/languages.ts), the prefixes an address may carry by default.
48
+ var LANGUAGES = ["da", "de", "en", "es", "fi", "fr", "is", "it", "ja", "ko", "nb", "nn", "no", "pt", "pt-BR", "sv", "zh"];
49
+ var PAPER = { light: "#ffffff", dark: "#2a2a2a" };
50
+ // A choice that cannot be stored, or one made while the page follows the system, lasts for this page.
51
+ var session = null;
52
+ var shown = null;
53
+ var shownMode = null;
54
+ var crossing = null;
55
+
56
+ function options() { return window.DS_ONE_PREFERENCES || {}; }
57
+ function key() { return options().themeStorageKey || "ds-one:theme"; }
58
+ function query(media) {
59
+ try { return window.matchMedia ? window.matchMedia(media) : null; } catch { return null; }
60
+ }
61
+
62
+ function mode() {
63
+ if (session) return session;
64
+ if (options().themeMode === "system") return "system";
65
+ try {
66
+ var stored = window.localStorage.getItem(key());
67
+ if (MODES.indexOf(stored) >= 0) return stored;
68
+ } catch { /* Storage can be blocked. */ }
69
+ var first = options().themeDefault;
70
+ return MODES.indexOf(first) >= 0 ? first : "system";
71
+ }
72
+
73
+ function resolve(choice) {
74
+ if (choice !== "system") return choice;
75
+ var system = query("(prefers-color-scheme: dark)");
76
+ return system && system.matches ? "dark" : "light";
77
+ }
78
+
79
+ function paint(theme) {
80
+ root.classList.remove(theme === "dark" ? "light-theme" : "dark-theme");
81
+ root.classList.add(theme + "-theme");
82
+ root.setAttribute("data-theme", theme);
83
+ root.style.colorScheme = theme;
84
+ root.style.setProperty("--lightningcss-light", theme === "light" ? "initial" : " ");
85
+ root.style.setProperty("--lightningcss-dark", theme === "dark" ? "initial" : " ");
86
+ var paper = options().themePaper;
87
+ if (paper === false) return;
88
+ var colour = (paper && paper[theme]) || PAPER[theme];
89
+ root.style.backgroundColor = colour;
90
+ var meta = document.querySelector('meta[name="theme-color"]:not([media])');
91
+ if (!meta && document.head) {
92
+ meta = document.createElement("meta");
93
+ meta.setAttribute("name", "theme-color");
94
+ document.head.appendChild(meta);
95
+ }
96
+ if (meta) meta.setAttribute("content", colour);
97
+ }
98
+
99
+ // The two themes are two pictures of one page: cross from one to the other.
100
+ function cross(theme) {
101
+ var reduced = query("(prefers-reduced-motion: reduce)");
102
+ if (typeof document.startViewTransition !== "function" || (reduced && reduced.matches) || document.visibilityState === "hidden") {
103
+ paint(theme);
104
+ return;
105
+ }
106
+ if (crossing) crossing.skipTransition();
107
+ var painted = false;
108
+ var once = function () { if (!painted) { painted = true; paint(theme); } };
109
+ try {
110
+ var transition = document.startViewTransition(once);
111
+ crossing = transition;
112
+ // A skipped crossing rejects all three promises; none may swallow the change.
113
+ void transition.ready.catch(function () {});
114
+ void transition.updateCallbackDone.catch(once);
115
+ void transition.finished.catch(function () {}).then(function () { if (crossing === transition) crossing = null; });
116
+ } catch {
117
+ once();
118
+ }
119
+ }
120
+
121
+ function apply() {
122
+ var choice = mode();
123
+ var theme = resolve(choice);
124
+ var first = shown === null;
125
+ var moved = theme !== shown || choice !== shownMode;
126
+ if (!first && theme !== shown) cross(theme);
127
+ else paint(theme);
128
+ shown = theme;
129
+ shownMode = choice;
130
+ if (!first && moved) window.dispatchEvent(new CustomEvent("theme-changed", { detail: { theme: theme, mode: choice } }));
131
+ }
132
+
133
+ function set(choice) {
134
+ if (MODES.indexOf(choice) < 0) return;
135
+ session = null;
136
+ if (options().themeMode === "system") {
137
+ if (choice !== "system") session = choice;
138
+ } else {
139
+ try { window.localStorage.setItem(key(), choice); } catch { session = choice; }
140
+ }
141
+ apply();
142
+ }
143
+
144
+ var i18n = window.DS_ONE_I18N || {};
145
+ // The language an address names in its first segment (`/pt-br/…` gives pt-BR), as the language module reads it.
146
+ function addressLanguage() {
147
+ if (!i18n.languageFromAddress) return null;
148
+ var routing = i18n.routing || {};
149
+ var prefixed = (routing.languages && routing.languages.length ? routing.languages : null) || (i18n.languages && i18n.languages.length ? i18n.languages : null) || LANGUAGES;
150
+ var segment = String((window.location && window.location.pathname) || "").split("/")[1] || "";
151
+ var slug = segment.toLowerCase().replace(/_/g, "-");
152
+ if (!slug) return null;
153
+ for (var index = 0; index < prefixed.length; index++) {
154
+ if (String(prefixed[index]).toLowerCase().replace(/_/g, "-") === slug) return String(prefixed[index]);
155
+ }
156
+ return null;
157
+ }
158
+ function storedLanguage() {
159
+ if (i18n.persist === false) return null;
160
+ try {
161
+ var language = window.localStorage.getItem(i18n.storageKey || "language");
162
+ if (language && (!i18n.languages || i18n.languages.indexOf(language) >= 0)) return language;
163
+ } catch { /* Storage can be blocked. */ }
164
+ return null;
165
+ }
166
+ if (i18n.langTarget === undefined) {
167
+ var language = addressLanguage() || storedLanguage();
168
+ if (language && /^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/.test(language)) root.lang = language;
169
+ }
170
+
171
+ window.DS_ONE_THEME = {
172
+ mode: function () { return shownMode; },
173
+ theme: function () { return shown; },
174
+ set: set,
175
+ apply: function () { apply(); },
176
+ };
177
+ apply();
178
+
179
+ var system = query("(prefers-color-scheme: dark)");
180
+ if (system && system.addEventListener) system.addEventListener("change", function () { apply(); });
181
+ else if (system && system.addListener) system.addListener(function () { apply(); });
182
+ window.addEventListener("storage", function (event) { if (event.key === null || event.key === key()) apply(); });
183
+ window.addEventListener("pageshow", function () { apply(); });
184
+ })();
@@ -1,58 +1,100 @@
1
+ /**
2
+ * Light, dark or system, remembered in one stored choice.
3
+ *
4
+ * The runtime is `theme-bootstrap.js`, the classic script a page inlines in
5
+ * its <head> so the first paint is already in the chosen theme. Imported here
6
+ * as well, it installs itself when the page did not inline it, so the
7
+ * components and a page without them share one implementation. This module
8
+ * mirrors it in signals for the components.
9
+ *
10
+ * The theme is marked on the root element by the class `light-theme` or
11
+ * `dark-theme` (canonical), `data-theme="light|dark"` (for pages that key on
12
+ * the attribute) and `color-scheme`. In system mode it follows
13
+ * prefers-color-scheme as it changes. A visitor who has chosen nothing sees
14
+ * `themeDefault` from `window.DS_ONE_PREFERENCES` (system unless the product
15
+ * says light or dark).
16
+ *
17
+ * A page without the components copies it with Sync 1's `root` export,
18
+ * `"modules": ["theme"]` (this file, the head script and the options type);
19
+ * it needs `@lit-labs/signals`.
20
+ */
1
21
  import { signal } from "@lit-labs/signals";
2
- import { preferenceStorageKey } from "./preferences";
22
+ import "./theme-bootstrap.js";
23
+ import type { PreferenceOptions } from "./preference-options";
3
24
 
25
+ /** The theme on the page. */
4
26
  export type ThemeType = "light" | "dark";
27
+ /** The stored choice: a theme, or the system's. */
28
+ export type ThemeMode = ThemeType | "system";
29
+ export const THEME_MODES: readonly ThemeMode[] = ["light", "dark", "system"];
5
30
 
6
- function getInitialTheme(): ThemeType {
7
- if (typeof window === "undefined") {
8
- return "light";
9
- }
31
+ /** `window.DS_ONE_THEME`, installed by `theme-bootstrap.js`. */
32
+ export interface ThemeRuntime {
33
+ /** The choice in effect: light, dark or system. */
34
+ mode(): ThemeMode;
35
+ /** The theme on the page. */
36
+ theme(): ThemeType;
37
+ /** Choose and remember light, dark or system, and put it on the page. */
38
+ set(mode: ThemeMode): void;
39
+ /** Read the stored choice, the options and the system again, and put them on the page. */
40
+ apply(): void;
41
+ }
42
+
43
+ declare global {
44
+ interface Window { DS_ONE_THEME?: ThemeRuntime; }
45
+ }
46
+
47
+ function runtime(): ThemeRuntime | undefined {
48
+ return typeof window === "undefined" ? undefined : window.DS_ONE_THEME;
49
+ }
50
+
51
+ // Options set since the head script ran (a product's storage key, system mode) take effect now.
52
+ runtime()?.apply();
10
53
 
11
- let storedTheme: string | null = null;
12
- try { storedTheme = window.localStorage?.getItem(preferenceStorageKey("theme")); } catch { /* Storage can be unavailable. */ }
13
- if (storedTheme === "light" || storedTheme === "dark") {
14
- return storedTheme;
15
- }
54
+ export const currentTheme = signal<ThemeType>(runtime()?.theme() ?? "light");
55
+ export const currentThemeMode = signal<ThemeMode>(runtime()?.mode() ?? "system");
16
56
 
17
- // Check system preference
18
- const prefersDark = window.matchMedia?.("(prefers-color-scheme: dark)").matches;
19
- return prefersDark ? "dark" : "light";
57
+ function sync(): void {
58
+ const theme = runtime();
59
+ if (!theme) return;
60
+ currentTheme.set(theme.theme());
61
+ currentThemeMode.set(theme.mode());
20
62
  }
21
63
 
22
- export const currentTheme = signal<ThemeType>(getInitialTheme());
64
+ if (typeof window !== "undefined") window.addEventListener("theme-changed", sync);
23
65
 
66
+ export function getThemeMode(): ThemeMode {
67
+ return runtime()?.mode() ?? currentThemeMode.get();
68
+ }
69
+
70
+ /** Choose light, dark or system, store it and put it on the page; `theme-changed` follows a change. */
71
+ export function setThemeMode(mode: ThemeMode): void {
72
+ runtime()?.set(mode);
73
+ sync();
74
+ }
75
+
76
+ /** Choose light or dark. `setThemeMode("system")` hands the choice back to the system. */
24
77
  export function setTheme(theme: ThemeType): void {
25
- if (theme === currentTheme.get()) {
26
- return;
27
- }
28
-
29
- currentTheme.set(theme);
30
-
31
- if (typeof window !== "undefined") {
32
- try {
33
- window.localStorage?.setItem(preferenceStorageKey("theme"), theme);
34
- } catch (error) {
35
- console.warn("ds-one: unable to persist theme preference", error);
36
- }
37
-
38
- const root = window.document?.documentElement;
39
- if (root) {
40
- root.classList.remove("light-theme", "dark-theme");
41
- root.classList.add(`${theme}-theme`);
42
- }
43
-
44
- window.dispatchEvent(
45
- new CustomEvent("theme-changed", { detail: { theme } })
46
- );
47
- }
48
- }
49
-
50
- // Initialize theme on load
51
- if (typeof window !== "undefined") {
52
- const theme = currentTheme.get();
53
- const root = window.document?.documentElement;
54
- if (root) {
55
- root.classList.remove("light-theme", "dark-theme");
56
- root.classList.add(`${theme}-theme`);
57
- }
78
+ setThemeMode(theme);
79
+ }
80
+
81
+ /**
82
+ * Bind an automatic surface to system appearance, leaving stored choices
83
+ * intact: nothing is read from or written to storage until the returned
84
+ * function hands the page back to its stored choice.
85
+ */
86
+ export function followSystemTheme(): () => void {
87
+ if (typeof window === "undefined") return () => {};
88
+ const previous = window.DS_ONE_PREFERENCES?.themeMode;
89
+ const following: PreferenceOptions = { ...window.DS_ONE_PREFERENCES, themeMode: "system" };
90
+ window.DS_ONE_PREFERENCES = following;
91
+ setThemeMode("system");
92
+ return () => {
93
+ const options = { ...window.DS_ONE_PREFERENCES };
94
+ if (previous) options.themeMode = previous;
95
+ else delete options.themeMode;
96
+ window.DS_ONE_PREFERENCES = options;
97
+ runtime()?.apply();
98
+ sync();
99
+ };
58
100
  }