@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,165 @@
1
+ // ds-footer.ts
2
+ // A site footer: the brand, columns of links, the language and theme, and the
3
+ // copyright. Drawn by 1-root/footer.css, the same classes a page without
4
+ // scripts writes.
5
+
6
+ import { LitElement, html, nothing, unsafeCSS } from "lit";
7
+ import { getText } from "../0-face/i18n";
8
+ import { define } from "../0-face/define";
9
+ import "../2-core/ds-cycle";
10
+ import metrics from "../1-root/component-metrics.css?inline";
11
+ import controls from "../1-root/controls.css?inline";
12
+ import styles from "./styles/ds-footer.css?inline";
13
+
14
+ /** A link in a footer column. */
15
+ export interface FooterLink {
16
+ /** The words: a translation key, or as written with the footer's `literal`. */
17
+ label: string;
18
+ href: string;
19
+ /** Opens elsewhere: in a new tab, with no referrer. */
20
+ external?: boolean;
21
+ /** The page being read: `aria-current="page"`. */
22
+ current?: boolean;
23
+ }
24
+
25
+ /** A footer column: a heading and its links. */
26
+ export interface FooterColumn {
27
+ heading?: string;
28
+ links: FooterLink[];
29
+ }
30
+
31
+ /** The settings a footer offers, each a `ds-cycle` of that type. */
32
+ export type FooterPreference = "language" | "theme";
33
+ const PREFERENCES: readonly FooterPreference[] = ["language", "theme"];
34
+
35
+ /** The preferences named by an attribute: every one when it is present but empty. */
36
+ export function footerPreferences(value: string | null | undefined): FooterPreference[] {
37
+ if (value == null || value === "false") return [];
38
+ const named = value.split(/[\s,]+/).filter(Boolean);
39
+ if (!named.length || named.includes("true")) return [...PREFERENCES];
40
+ return PREFERENCES.filter(name => named.includes(name));
41
+ }
42
+
43
+ /**
44
+ * @element ds-footer
45
+ * @prop {string} brand - The site's name, a link home: a translation key, or
46
+ * the words as they stand with `literal`. The `brand` slot takes its place.
47
+ * @prop {string} href - Where the brand links. `/` by default.
48
+ * @prop {string} tagline - A line about the site under the brand.
49
+ * @prop {FooterColumn[]} columns - The columns of links, eight squares each.
50
+ * @prop {string} label - The columns' accessible name, as a navigation; without it they are plain lists.
51
+ * @prop {string} owner - Who holds the copyright: the brand by default.
52
+ * @prop {number} year - The copyright's year: this year by default.
53
+ * @prop {string} preferences - `language`, `theme` or both, as `ds-cycle`
54
+ * buttons at the end of the last row; present but empty, both.
55
+ * @prop {boolean} literal - Show the words as written, never looked up.
56
+ *
57
+ * @slot brand - The brand, when it is more than words: a logo, a link of the page's own.
58
+ * @slot preferences - Controls of the page's own beside or in place of the cycles.
59
+ * @slot legal - The last line, in place of the copyright.
60
+ *
61
+ * @example
62
+ * <ds-footer brand="Name" tagline="What it does" preferences literal
63
+ * columns='[{"heading":"Product","links":[{"label":"Download","href":"/download"}]}]'>
64
+ * </ds-footer>
65
+ */
66
+ export class Footer extends LitElement {
67
+ static properties = {
68
+ brand: { type: String },
69
+ href: { type: String },
70
+ tagline: { type: String },
71
+ columns: { type: Array },
72
+ label: { type: String },
73
+ owner: { type: String },
74
+ year: { type: Number },
75
+ preferences: { type: String },
76
+ literal: { type: Boolean, reflect: true },
77
+ };
78
+
79
+ static styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
80
+
81
+ declare brand: string | undefined;
82
+ declare href: string;
83
+ declare tagline: string | undefined;
84
+ declare columns: FooterColumn[];
85
+ declare label: string | undefined;
86
+ declare owner: string | undefined;
87
+ declare year: number | undefined;
88
+ declare preferences: string | null | undefined;
89
+ declare literal: boolean;
90
+
91
+ private readonly relabel = () => this.requestUpdate();
92
+
93
+ constructor() {
94
+ super();
95
+ this.href = "/";
96
+ this.columns = [];
97
+ this.literal = false;
98
+ }
99
+
100
+ connectedCallback() {
101
+ super.connectedCallback();
102
+ window.addEventListener("language-changed", this.relabel);
103
+ window.addEventListener("translations-loaded", this.relabel);
104
+ }
105
+
106
+ disconnectedCallback() {
107
+ window.removeEventListener("language-changed", this.relabel);
108
+ window.removeEventListener("translations-loaded", this.relabel);
109
+ super.disconnectedCallback();
110
+ }
111
+
112
+ private words(value: string | undefined): string {
113
+ if (!value) return "";
114
+ return this.literal ? value : getText(value) || value;
115
+ }
116
+
117
+ private slotted(name: string): boolean {
118
+ return [...this.children].some(node => node.getAttribute("slot") === name);
119
+ }
120
+
121
+ private link(link: FooterLink) {
122
+ return html`<li><a href=${link.href} aria-current=${link.current ? "page" : nothing}
123
+ target=${link.external ? "_blank" : nothing} rel=${link.external ? "noopener noreferrer" : nothing}>${this.words(link.label)}</a></li>`;
124
+ }
125
+
126
+ render() {
127
+ const columns = (Array.isArray(this.columns) ? this.columns : []).filter(column => column && Array.isArray(column.links));
128
+ const preferences = footerPreferences(this.preferences);
129
+ const hasPreferences = preferences.length > 0 || this.slotted("preferences");
130
+ const owner = this.owner ? this.words(this.owner) : this.words(this.brand);
131
+ const year = Number.isFinite(this.year) ? this.year : new Date().getFullYear();
132
+ const brandSlotted = this.slotted("brand");
133
+ const hasBrand = brandSlotted || Boolean(this.brand) || Boolean(this.tagline);
134
+ const list = columns.map(column => html`<div class="ds-footer__column" part="column">
135
+ ${column.heading ? html`<h2 class="ds-footer__heading" part="heading">${this.words(column.heading)}</h2>` : nothing}
136
+ <ul class="ds-footer__links">${column.links.map(link => this.link(link))}</ul>
137
+ </div>`);
138
+ return html`<footer class="ds-footer" part="footer">
139
+ <div class="ds-footer__brand" part="brand" ?hidden=${!hasBrand}>
140
+ <slot name="brand" @slotchange=${this.relabel}>${this.brand ? html`<a class="ds-footer__mark" href=${this.href || "/"}>${this.words(this.brand)}</a>` : nothing}</slot>
141
+ ${this.tagline ? html`<p class="ds-footer__tagline" part="tagline">${this.words(this.tagline)}</p>` : nothing}
142
+ </div>
143
+ ${columns.length
144
+ ? this.label
145
+ ? html`<nav class="ds-footer__columns" part="columns" aria-label=${this.words(this.label)}>${list}</nav>`
146
+ : html`<div class="ds-footer__columns" part="columns">${list}</div>`
147
+ : nothing}
148
+ <div class="ds-footer__base" part="base">
149
+ <p class="ds-footer__legal" part="legal"><slot name="legal" @slotchange=${this.relabel}>${owner ? `© ${year} ${owner}` : `© ${year}`}</slot></p>
150
+ <div class="ds-footer__preferences" part="preferences" ?hidden=${!hasPreferences}>
151
+ ${preferences.map(type => html`<ds-cycle type=${type}></ds-cycle>`)}
152
+ <slot name="preferences" @slotchange=${this.relabel}></slot>
153
+ </div>
154
+ </div>
155
+ </footer>`;
156
+ }
157
+ }
158
+
159
+ define("ds-footer", Footer);
160
+
161
+ declare global {
162
+ interface HTMLElementTagNameMap {
163
+ "ds-footer": Footer;
164
+ }
165
+ }
@@ -1,74 +1,54 @@
1
- // ds-grid.ts
2
- // Simple grid layout component
3
-
4
1
  import { LitElement, html, unsafeCSS } from "lit";
5
- import { detectMobileDevice } from "../0-face/device";
2
+ import { styleMap } from "lit/directives/style-map.js";
3
+ import { define } from "../0-face/define";
6
4
  import styles from "./styles/ds-grid.css?inline";
7
5
 
8
- declare global {
9
- interface CustomElementRegistry {
10
- define(name: string, constructor: typeof LitElement): void;
11
- }
12
- var customElements: CustomElementRegistry;
13
- }
6
+ export type GridPattern = "grid" | "lines" | "columns" | "dots" | "none";
7
+ const patterns = new Set<GridPattern>(["grid", "lines", "columns", "dots", "none"]);
14
8
 
9
+ /** Decorative paper or an alignment overlay; never arranges or captures content. */
15
10
  export class Grid extends LitElement {
16
11
  static properties = {
17
- align: { type: String },
12
+ align: { type: String, reflect: true },
13
+ pattern: { type: String, reflect: true },
14
+ size: { type: Number },
15
+ rowSize: { type: Number, attribute: "row-size" },
16
+ color: { type: String },
17
+ paper: { type: String },
18
+ contained: { type: Boolean, reflect: true },
18
19
  };
19
-
20
- align?: string;
21
- private resizeObserver?: () => void;
22
- private resizeTimeout?: any;
23
-
20
+ declare align: "left" | "center" | "right";
21
+ declare pattern: GridPattern;
22
+ declare size: number;
23
+ declare rowSize: number | undefined;
24
+ declare color: string;
25
+ declare paper: string;
26
+ declare contained: boolean;
24
27
  static styles = unsafeCSS(styles);
25
28
 
26
- connectedCallback() {
27
- super.connectedCallback();
28
- this.updateMobileClass();
29
-
30
- // Listen for resize events to update mobile class
31
- this.resizeObserver = () => {
32
- if (this.resizeTimeout) {
33
- clearTimeout(this.resizeTimeout);
34
- }
35
- this.resizeTimeout = setTimeout(() => {
36
- this.updateMobileClass();
37
- }, 100);
38
- };
39
- window.addEventListener("resize", this.resizeObserver);
40
- }
41
-
42
- disconnectedCallback() {
43
- super.disconnectedCallback();
44
- if (this.resizeObserver) {
45
- window.removeEventListener("resize", this.resizeObserver);
46
- }
47
- if (this.resizeTimeout) {
48
- clearTimeout(this.resizeTimeout);
49
- }
50
- }
51
-
52
- private updateMobileClass() {
53
- const isMobile = detectMobileDevice();
54
- if (isMobile) {
55
- this.classList.add("mobile");
56
- this.classList.remove("desktop");
57
- } else {
58
- this.classList.add("desktop");
59
- this.classList.remove("mobile");
60
- }
29
+ constructor() {
30
+ super();
31
+ this.align = "center";
32
+ this.pattern = "grid";
33
+ this.size = 20;
34
+ this.rowSize = undefined;
35
+ this.color = "";
36
+ this.paper = "";
37
+ this.contained = false;
61
38
  }
62
39
 
63
40
  render() {
64
- return html``;
41
+ const size = Number.isFinite(this.size) && this.size > 0 ? this.size : 20;
42
+ const row = Number.isFinite(this.rowSize) && this.rowSize! > 0 ? this.rowSize! : size;
43
+ return html`<div aria-hidden="true" class="paper" data-pattern=${patterns.has(this.pattern) ? this.pattern : "grid"}
44
+ style=${styleMap({
45
+ "--pitch-x": `${size}px`,
46
+ "--pitch-y": `${row}px`,
47
+ "--ink": this.color || "var(--ds-grid-color, color-mix(in srgb, var(--ds-text-color, var(--text-color, currentColor)) 12%, transparent))",
48
+ "--paper": this.paper || "var(--ds-grid-paper, transparent)",
49
+ })}></div>`;
65
50
  }
66
51
  }
67
52
 
68
- customElements.define("ds-grid", Grid);
69
-
70
- declare global {
71
- interface HTMLElementTagNameMap {
72
- "ds-grid": Grid;
73
- }
74
- }
53
+ define("ds-grid", Grid);
54
+ declare global { interface HTMLElementTagNameMap { "ds-grid": Grid } }
@@ -0,0 +1,171 @@
1
+ // ds-header.ts
2
+ // A site header: the brand, the navigation with the page you are on, and the
3
+ // actions, folding into a drawer on a narrow screen. Drawn by 1-root/header.css,
4
+ // the same classes a page without scripts writes, and opened by 0-face/drawer.ts.
5
+
6
+ import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from "lit";
7
+ import { getText } from "../0-face/i18n";
8
+ import { define } from "../0-face/define";
9
+ import { attachDrawer, type Drawer } from "../0-face/drawer";
10
+ import { markCurrentLink } from "../0-face/header";
11
+ import "../2-core/ds-icon";
12
+ import metrics from "../1-root/component-metrics.css?inline";
13
+ import controls from "../1-root/controls.css?inline";
14
+ import styles from "./styles/ds-header.css?inline";
15
+
16
+ /** The shared word that names the menu button and its drawer. */
17
+ export const MENU_LABEL = "Menu";
18
+
19
+ /**
20
+ * @element ds-header
21
+ * @prop {string} brand - The site's name, a link home: a translation key, or
22
+ * the words as they stand with `literal`. The `brand` slot takes its place.
23
+ * @prop {string} href - Where the brand links. `/` by default.
24
+ * @prop {string} label - The navigation's accessible name, when a page has more than one.
25
+ * @prop {boolean} literal - Show `brand` as written, never looked up.
26
+ * @prop {boolean} sticky - Stay at the top of the page as it scrolls, on the paper.
27
+ *
28
+ * @slot - The navigation: `<a href>` links, one square high. The link to the
29
+ * address being read gets `aria-current="page"` unless one is marked.
30
+ * @slot brand - The brand, when it is more than words: a logo, a link of the page's own.
31
+ * @slot actions - Buttons or links at the end of the row.
32
+ *
33
+ * @fires ds-header-menu - The drawer opened or closed; `detail.open` says which.
34
+ *
35
+ * Below thirty squares of width the navigation and actions fold away and a
36
+ * menu button (the shared word "Menu") opens them in a drawer over the page:
37
+ * focus stays inside it, Escape, its close button, a link or the screen
38
+ * widening close it, and the page holds its scroll meanwhile.
39
+ *
40
+ * @example
41
+ * <ds-header brand="Name" literal>
42
+ * <a href="/">Home</a>
43
+ * <a href="/help">Help</a>
44
+ * <ds-button slot="actions" primary href="/download">Download</ds-button>
45
+ * </ds-header>
46
+ */
47
+ export class Header extends LitElement {
48
+ static properties = {
49
+ brand: { type: String },
50
+ href: { type: String },
51
+ label: { type: String },
52
+ literal: { type: Boolean, reflect: true },
53
+ sticky: { type: Boolean, reflect: true },
54
+ };
55
+
56
+ static styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
57
+
58
+ declare brand: string | undefined;
59
+ declare href: string;
60
+ declare label: string | undefined;
61
+ declare literal: boolean;
62
+ declare sticky: boolean;
63
+
64
+ private drawer: Drawer | null = null;
65
+ private readonly relabel = () => this.requestUpdate();
66
+
67
+ constructor() {
68
+ super();
69
+ this.href = "/";
70
+ this.literal = false;
71
+ this.sticky = false;
72
+ }
73
+
74
+ /** Whether the drawer is open. */
75
+ get menuOpen(): boolean {
76
+ return this.drawer?.isOpen ?? false;
77
+ }
78
+
79
+ /** Open the drawer (on a narrow screen, where the menu button shows). */
80
+ openMenu(): void { this.drawer?.open(); }
81
+
82
+ /** Close the drawer. */
83
+ closeMenu(): void { this.drawer?.close(); }
84
+
85
+ connectedCallback() {
86
+ super.connectedCallback();
87
+ window.addEventListener("language-changed", this.relabel);
88
+ window.addEventListener("translations-loaded", this.relabel);
89
+ }
90
+
91
+ disconnectedCallback() {
92
+ window.removeEventListener("language-changed", this.relabel);
93
+ window.removeEventListener("translations-loaded", this.relabel);
94
+ this.drawer?.destroy();
95
+ this.drawer = null;
96
+ super.disconnectedCallback();
97
+ }
98
+
99
+ protected firstUpdated() {
100
+ markCurrentLink(this.links());
101
+ }
102
+
103
+ protected updated(changed: PropertyValues<this>) {
104
+ super.updated(changed);
105
+ if (this.drawer) return;
106
+ const root = this.renderRoot;
107
+ const toggle = root.querySelector<HTMLElement>('[part="toggle"]');
108
+ const panel = root.querySelector<HTMLDialogElement>('[part="drawer"]');
109
+ if (!toggle || !panel) return;
110
+ this.drawer = attachDrawer({
111
+ toggle,
112
+ panel,
113
+ content: () => [...root.querySelectorAll(':is([part="nav"], [part="actions"]):not([hidden])')],
114
+ onToggle: open => this.dispatchEvent(new CustomEvent("ds-header-menu", { bubbles: true, composed: true, detail: { open } })),
115
+ });
116
+ }
117
+
118
+ private words(value: string | undefined): string {
119
+ if (!value) return "";
120
+ return this.literal ? value : getText(value) || value;
121
+ }
122
+
123
+ /** Light-DOM children that fill a slot: elements, or text that is not blank. */
124
+ private slotted(name: string): boolean {
125
+ return [...this.childNodes].some(node => name
126
+ ? node instanceof Element && node.getAttribute("slot") === name
127
+ : node instanceof Element ? !node.hasAttribute("slot") : node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim()));
128
+ }
129
+
130
+ private links(): HTMLAnchorElement[] {
131
+ return [...this.children].filter((child): child is HTMLAnchorElement => child instanceof HTMLAnchorElement && !child.hasAttribute("slot"));
132
+ }
133
+
134
+ private onNavChange = () => {
135
+ markCurrentLink(this.links());
136
+ this.requestUpdate();
137
+ };
138
+
139
+ render() {
140
+ const menu = getText(MENU_LABEL) || MENU_LABEL;
141
+ const close = getText("Close") || "Close";
142
+ const hasNav = this.slotted("");
143
+ const hasActions = this.slotted("actions");
144
+ const brand = this.slotted("brand")
145
+ ? html`<span class="ds-header__brand" part="brand"><slot name="brand" @slotchange=${this.relabel}></slot></span>`
146
+ : this.brand
147
+ ? html`<a class="ds-header__brand" part="brand" href=${this.href || "/"}>${this.words(this.brand)}</a>`
148
+ : html`<slot name="brand" @slotchange=${this.relabel}></slot>`;
149
+ return html`<header class="ds-header${this.sticky ? " ds-header--sticky" : ""}" part="header">
150
+ ${brand}
151
+ <nav class="ds-header__nav" part="nav" id="nav" aria-label=${this.label ? this.words(this.label) : nothing} ?hidden=${!hasNav}><slot @slotchange=${this.onNavChange}></slot></nav>
152
+ <div class="ds-header__actions" part="actions" ?hidden=${!hasActions}><slot name="actions" @slotchange=${this.relabel}></slot></div>
153
+ <button class="ds-button ds-button--icon ds-header__toggle" part="toggle" type="button" aria-label=${menu} aria-controls="drawer" ?hidden=${!hasNav && !hasActions}>
154
+ <ds-icon type="menu" size="large" aria-hidden="true"></ds-icon><ds-icon type="close" size="large" aria-hidden="true"></ds-icon>
155
+ </button>
156
+ <dialog class="ds-dialog ds-drawer" part="drawer" id="drawer" aria-label=${menu}>
157
+ <div class="ds-drawer__bar"><button class="ds-button ds-button--icon ds-drawer__close" part="close" type="button" aria-label=${close}>
158
+ <ds-icon type="close" size="large" aria-hidden="true"></ds-icon>
159
+ </button></div>
160
+ </dialog>
161
+ </header>`;
162
+ }
163
+ }
164
+
165
+ define("ds-header", Header);
166
+
167
+ declare global {
168
+ interface HTMLElementTagNameMap {
169
+ "ds-header": Header;
170
+ }
171
+ }
@@ -0,0 +1,184 @@
1
+ import { LitElement, html, unsafeCSS, type PropertyValues } from "lit";
2
+ import { ifDefined } from "lit/directives/if-defined.js";
3
+ import { define } from "../0-face/define";
4
+ import { attachDrawer, type Drawer } from "../0-face/drawer";
5
+ import { getText } from "../0-face/i18n";
6
+ import "../2-core/ds-icon";
7
+ import controls from "../1-root/controls.css?inline";
8
+ import styles from "./styles/ds-page.css?inline";
9
+
10
+ export type PageLayout = "sidebar" | "split" | "inspector" | "column" | "centered" | "tiles";
11
+ export const PAGE_LAYOUTS: readonly PageLayout[] = ["sidebar", "split", "inspector", "column", "centered", "tiles"];
12
+
13
+ /**
14
+ * A standard page: where units stand on the grid. Every layout uses the same
15
+ * five areas, so content can move between layouts without being rewritten.
16
+ *
17
+ * - `slot="header"` runs along the top of the main area
18
+ * - `slot="nav"` is the leading column: navigation, or the list in `split`
19
+ * - the default slot is the main area
20
+ * - `slot="aside"` is the trailing column, shown by `inspector`
21
+ * - `slot="footer"` runs along the bottom of the main area
22
+ *
23
+ * Columns are whole squares: `sidebar` and `inspector` lead with 12, `split`
24
+ * with 16; `column` is 32 wide and `centered` 16, and `measure` sets either in
25
+ * whole squares. A centred column stands on a whole square: the room beside it
26
+ * is rounded down to squares, so the column never straddles a grid line.
27
+ * `tiles` places each main child in a 12-square tile. Below 30 squares of
28
+ * width every layout stacks.
29
+ *
30
+ * With `drawer`, the navigation folds away below 30 squares instead of
31
+ * standing above the work: a menu button one square wide stands before the
32
+ * header and opens it in a drawer over the page (0-face/drawer.ts, the
33
+ * header's), with focus kept inside, closed by Escape, its close button, a
34
+ * link or the page widening, and the page's scroll held behind it.
35
+ *
36
+ * @element ds-page
37
+ * @attr layout - `sidebar`, `split`, `inspector`, `column`, `centered` or `tiles`.
38
+ * @attr divided - Draws a hairline between the columns.
39
+ * @attr measure - Width of the `column` or `centered` column in whole squares.
40
+ * @attr fill - Takes its container's height; each column scrolls on its own.
41
+ * @attr view - Labels each area with its slot name, for inspection.
42
+ * @attr drawer - Folds the navigation into a drawer on a narrow page.
43
+ * @attr drawer-label - The menu button's and drawer's name: a translation key, the shared word "Menu" by default.
44
+ * @fires ds-page-drawer - The drawer opened or closed; `detail.open` says which.
45
+ *
46
+ * @example
47
+ * <ds-page layout="sidebar">
48
+ * <ds-sidebar slot="nav" label="Projects"></ds-sidebar>
49
+ * <ds-row slot="header" fill>…</ds-row>
50
+ * <ds-list>…</ds-list>
51
+ * </ds-page>
52
+ */
53
+ export class Page extends LitElement {
54
+ static properties = {
55
+ layout: { type: String, reflect: true },
56
+ divided: { type: Boolean, reflect: true },
57
+ measure: { type: Number, reflect: true },
58
+ fill: { type: Boolean, reflect: true },
59
+ view: { type: Boolean, reflect: true },
60
+ drawer: { type: Boolean, reflect: true },
61
+ drawerLabel: { type: String, attribute: "drawer-label" },
62
+ };
63
+
64
+ declare layout: PageLayout;
65
+ declare divided: boolean;
66
+ declare measure: number | undefined;
67
+ declare fill: boolean;
68
+ declare view: boolean;
69
+ declare drawer: boolean;
70
+ declare drawerLabel: string | undefined;
71
+
72
+ static styles = [unsafeCSS(controls), unsafeCSS(styles)];
73
+
74
+ private navigationDrawer: Drawer | null = null;
75
+ private readonly relabel = () => this.requestUpdate();
76
+
77
+ constructor() {
78
+ super();
79
+ this.layout = "sidebar";
80
+ this.divided = false;
81
+ this.fill = false;
82
+ this.view = false;
83
+ this.drawer = false;
84
+ }
85
+
86
+ connectedCallback() {
87
+ super.connectedCallback();
88
+ window.addEventListener("language-changed", this.relabel);
89
+ window.addEventListener("translations-loaded", this.relabel);
90
+ }
91
+
92
+ disconnectedCallback() {
93
+ window.removeEventListener("language-changed", this.relabel);
94
+ window.removeEventListener("translations-loaded", this.relabel);
95
+ this.navigationDrawer?.destroy();
96
+ this.navigationDrawer = null;
97
+ super.disconnectedCallback();
98
+ }
99
+
100
+ /** Whether the navigation drawer is open. */
101
+ get drawerOpen(): boolean {
102
+ return this.navigationDrawer?.isOpen ?? false;
103
+ }
104
+
105
+ /** Open the navigation drawer (on a narrow page with `drawer`). */
106
+ openDrawer(): void { this.navigationDrawer?.open(); }
107
+
108
+ /** Close the navigation drawer. */
109
+ closeDrawer(): void { this.navigationDrawer?.close(); }
110
+
111
+ protected updated(changed: PropertyValues<this>) {
112
+ super.updated(changed);
113
+ if (!changed.has("drawer")) return;
114
+ if (!this.drawer) {
115
+ this.navigationDrawer?.destroy();
116
+ this.navigationDrawer = null;
117
+ return;
118
+ }
119
+ const root = this.renderRoot;
120
+ const toggle = root.querySelector<HTMLElement>('[part="drawer-toggle"]');
121
+ const panel = root.querySelector<HTMLDialogElement>('[part="drawer"]');
122
+ const nav = root.querySelector('[part="nav"]');
123
+ if (!toggle || !panel || !nav || this.navigationDrawer) return;
124
+ this.navigationDrawer = attachDrawer({
125
+ toggle, panel, content: [nav],
126
+ onToggle: open => this.dispatchEvent(new CustomEvent("ds-page-drawer", { bubbles: true, composed: true, detail: { open } })),
127
+ });
128
+ }
129
+
130
+ render() {
131
+ const label = getText(this.drawerLabel || "Menu") || this.drawerLabel || "Menu";
132
+ const close = getText("Close") || "Close";
133
+ return html`
134
+ <div class="page" part="page" style=${ifDefined(measureStyle(this.measure))}>
135
+ <div class="bar" part="bar" ?hidden=${!this.drawer}>
136
+ <button class="ds-button ds-button--icon" part="drawer-toggle" type="button" aria-label=${label} aria-controls="drawer">
137
+ <ds-icon type="menu" size="large" aria-hidden="true"></ds-icon><ds-icon type="close" size="large" aria-hidden="true"></ds-icon>
138
+ </button>
139
+ </div>
140
+ <dialog class="ds-dialog ds-drawer" part="drawer" id="drawer" aria-label=${label}>
141
+ <div class="ds-drawer__bar"><button class="ds-button ds-button--icon ds-drawer__close" part="drawer-close" type="button" aria-label=${close}>
142
+ <ds-icon type="close" size="large" aria-hidden="true"></ds-icon>
143
+ </button></div>
144
+ </dialog>
145
+ <div class="area nav" part="nav" data-area="nav"><slot name="nav"></slot></div>
146
+ <div class="area header" part="header" data-area="header"><slot name="header"></slot></div>
147
+ <div class="area main" part="main" data-area="main"><slot></slot></div>
148
+ <div class="area aside" part="aside" data-area="aside"><slot name="aside"></slot></div>
149
+ <div class="area footer" part="footer" data-area="footer"><slot name="footer"></slot></div>
150
+ </div>
151
+ `;
152
+ }
153
+
154
+ firstUpdated() {
155
+ // An area with nothing in it takes no room, so a header or footer is optional.
156
+ this.renderRoot.querySelectorAll("slot").forEach(slot => {
157
+ const sync = () => slot.parentElement?.toggleAttribute("data-empty", slot.assignedNodes({ flatten: true }).every(empty));
158
+ slot.addEventListener("slotchange", sync);
159
+ sync();
160
+ });
161
+ }
162
+ }
163
+
164
+ /**
165
+ * A measure is a count of squares: 28 is 28 squares, never 28.5 or 28px. A
166
+ * fraction rounds to the nearest square, and anything that is not a positive
167
+ * number is ignored so the layout keeps its own width.
168
+ */
169
+ export function measureStyle(measure: number | null | undefined): string | undefined {
170
+ const squares = Math.round(Number(measure));
171
+ return Number.isFinite(squares) && squares >= 1 ? `--ds-page-measure: calc(${squares} * var(--ds-unit))` : undefined;
172
+ }
173
+
174
+ function empty(node: Node): boolean {
175
+ return node.nodeType === Node.TEXT_NODE ? !node.textContent?.trim() : node.nodeType !== Node.ELEMENT_NODE;
176
+ }
177
+
178
+ define("ds-page", Page);
179
+
180
+ declare global {
181
+ interface HTMLElementTagNameMap {
182
+ "ds-page": Page;
183
+ }
184
+ }
@@ -40,9 +40,8 @@ export function gridText(content: string): string {
40
40
  return `<div class="ds-email-ink" style="display:block;position:relative;top:2px;padding-left:2px">${content}</div>`
41
41
  }
42
42
 
43
- /** Static equivalent of Ezo’s ezo-button[primary] containing ezo-text.
44
- * Ezo client/design/2-core/styles/ezo-button.css: 16px control, 0.5px horizontal inset.
45
- * Ezo client/design/2-core/styles/ezo-text.css: centered 15px line in a 16px text box.
43
+ /** Static equivalent of a primary ds-button containing ds-text:
44
+ * a 16px control with a 0.5px horizontal inset, and a centered 15px line in a 16px text box.
46
45
  * Half-pixel vertical padding reproduces that centering without Lit or flexbox.
47
46
  */
48
47
  export function primaryEmailButton(
@@ -9,6 +9,7 @@
9
9
  background-color: var(--background-color);
10
10
  box-sizing: border-box;
11
11
  }
12
+ :host([hidden]) { display: none !important; }
12
13
 
13
14
  /* Ensure children don't overflow */
14
15
  :host ::slotted(*) {
@@ -0,0 +1,18 @@
1
+ /* ds-document.css */
2
+ /* The element places the two columns; 1-root/document.css draws them, and the
3
+ writing in the page is drawn by prose.css, which the element brings. */
4
+
5
+ :host {
6
+ display: block;
7
+ min-width: 0;
8
+ }
9
+
10
+ :host([hidden]),
11
+ [hidden] {
12
+ display: none !important;
13
+ }
14
+
15
+ /* The page's own contents take the list's place. */
16
+ ::slotted([slot="contents"]) {
17
+ margin: 0;
18
+ }