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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/DS1/0-face/calendar.ts +194 -0
  2. package/DS1/0-face/carousel.ts +623 -0
  3. package/DS1/0-face/component-visibility.ts +14 -0
  4. package/DS1/0-face/copy-text.ts +96 -0
  5. package/DS1/0-face/device.ts +8 -58
  6. package/DS1/0-face/dialog-swipe.ts +249 -0
  7. package/DS1/0-face/dialogs.ts +208 -0
  8. package/DS1/0-face/drawer.ts +258 -0
  9. package/DS1/0-face/feedback-words.ts +36 -0
  10. package/DS1/0-face/feedback.ts +40 -0
  11. package/DS1/0-face/format.ts +700 -0
  12. package/DS1/0-face/generated/toast-assets.ts +18 -0
  13. package/DS1/0-face/grid-fit.ts +1 -1
  14. package/DS1/0-face/grid.ts +3 -2
  15. package/DS1/0-face/header.ts +78 -0
  16. package/DS1/0-face/i18n.ts +93 -18
  17. package/DS1/0-face/keys.ts +276 -0
  18. package/DS1/0-face/languages.ts +4 -4
  19. package/DS1/0-face/layout-inspector.ts +6 -6
  20. package/DS1/0-face/library-styles.ts +33 -0
  21. package/DS1/0-face/load-toaster.ts +7 -0
  22. package/DS1/0-face/preference-options.ts +29 -0
  23. package/DS1/0-face/preferences.ts +3 -11
  24. package/DS1/0-face/pricing.ts +98 -43
  25. package/DS1/0-face/scaling.ts +160 -4
  26. package/DS1/0-face/shared-words.ts +9 -4
  27. package/DS1/0-face/sidebar.ts +201 -0
  28. package/DS1/0-face/theme-bootstrap.js +184 -0
  29. package/DS1/0-face/theme.ts +89 -47
  30. package/DS1/0-face/toast-queue.ts +157 -0
  31. package/DS1/0-face/toaster.ts +384 -0
  32. package/DS1/0-face/tooltips.ts +157 -15
  33. package/DS1/0-face/translations/da.json +60 -1
  34. package/DS1/0-face/translations/de.json +60 -1
  35. package/DS1/0-face/translations/en.json +60 -1
  36. package/DS1/0-face/translations/es.json +60 -1
  37. package/DS1/0-face/translations/fi.json +60 -1
  38. package/DS1/0-face/translations/fr.json +60 -1
  39. package/DS1/0-face/translations/is.json +60 -1
  40. package/DS1/0-face/translations/it.json +60 -1
  41. package/DS1/0-face/translations/ja.json +60 -1
  42. package/DS1/0-face/translations/ko.json +60 -1
  43. package/DS1/0-face/translations/nb.json +60 -1
  44. package/DS1/0-face/translations/pt-BR.json +60 -1
  45. package/DS1/0-face/translations/pt.json +60 -1
  46. package/DS1/0-face/translations/sv.json +60 -1
  47. package/DS1/0-face/translations/zh.json +60 -1
  48. package/DS1/0-face/translations-format.ts +3 -4
  49. package/DS1/1-root/card.css +192 -0
  50. package/DS1/1-root/carousel.css +136 -0
  51. package/DS1/1-root/cjk.css +23 -0
  52. package/DS1/1-root/component-metrics.css +1 -0
  53. package/DS1/1-root/component-tokens.css +51 -8
  54. package/DS1/1-root/controls.css +891 -14
  55. package/DS1/1-root/dialog-placement.css +191 -0
  56. package/DS1/1-root/document.css +183 -0
  57. package/DS1/1-root/drawer.css +83 -0
  58. package/DS1/1-root/empty.css +83 -0
  59. package/DS1/1-root/figures.css +141 -0
  60. package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
  61. package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
  62. package/DS1/1-root/fonts.css +69 -0
  63. package/DS1/1-root/footer.css +186 -0
  64. package/DS1/1-root/header.css +165 -0
  65. package/DS1/1-root/library-tokens.ts +91 -0
  66. package/DS1/1-root/measures.ts +53 -0
  67. package/DS1/1-root/notice.css +165 -0
  68. package/DS1/1-root/one.css +14 -84
  69. package/DS1/1-root/one.semantic.css +200 -148
  70. package/DS1/1-root/palette.css +58 -0
  71. package/DS1/1-root/palette.ts +19 -0
  72. package/DS1/1-root/progress.css +356 -0
  73. package/DS1/1-root/prose.css +202 -0
  74. package/DS1/1-root/row.css +300 -0
  75. package/DS1/1-root/table.css +111 -0
  76. package/DS1/1-root/text.css +70 -0
  77. package/DS1/2-core/button-split.ts +55 -0
  78. package/DS1/2-core/chart/chart.css +169 -0
  79. package/DS1/2-core/chart/grid-chart.ts +554 -0
  80. package/DS1/2-core/ds-avatar.ts +25 -6
  81. package/DS1/2-core/ds-badge.ts +10 -10
  82. package/DS1/2-core/ds-button.ts +111 -26
  83. package/DS1/2-core/ds-card.ts +135 -105
  84. package/DS1/2-core/ds-chart.ts +327 -0
  85. package/DS1/2-core/ds-composer.ts +8 -2
  86. package/DS1/2-core/ds-cycle.ts +97 -21
  87. package/DS1/2-core/ds-empty.ts +120 -0
  88. package/DS1/2-core/ds-icon.ts +11 -2
  89. package/DS1/2-core/ds-input.ts +165 -6
  90. package/DS1/2-core/ds-message.ts +218 -0
  91. package/DS1/2-core/ds-notice.ts +10 -0
  92. package/DS1/2-core/ds-progress.ts +380 -0
  93. package/DS1/2-core/ds-stat.ts +174 -0
  94. package/DS1/2-core/ds-switch.ts +1 -0
  95. package/DS1/2-core/ds-text.ts +15 -2
  96. package/DS1/2-core/ds-toast.ts +354 -0
  97. package/DS1/2-core/figures.ts +105 -0
  98. package/DS1/2-core/generated/ds-icon-map.ts +238 -128
  99. package/DS1/2-core/generated/icon-avatar.ts +2 -0
  100. package/DS1/2-core/generated/icons-extra.ts +120 -65
  101. package/DS1/2-core/generated/icons-immediate.ts +1 -1
  102. package/DS1/2-core/styles/ds-avatar.css +9 -8
  103. package/DS1/2-core/styles/ds-button-host.css +26 -3
  104. package/DS1/2-core/styles/ds-button-split.css +67 -0
  105. package/DS1/2-core/styles/ds-button.css +49 -15
  106. package/DS1/2-core/styles/ds-card.css +34 -0
  107. package/DS1/2-core/styles/ds-composer.css +13 -0
  108. package/DS1/2-core/styles/ds-cycle.css +10 -0
  109. package/DS1/2-core/styles/ds-empty.css +18 -0
  110. package/DS1/2-core/styles/ds-gap.css +1 -0
  111. package/DS1/2-core/styles/ds-icon.css +1 -0
  112. package/DS1/2-core/styles/ds-input.css +59 -6
  113. package/DS1/2-core/styles/ds-notice.css +32 -0
  114. package/DS1/2-core/styles/ds-progress.css +25 -0
  115. package/DS1/2-core/styles/ds-select.css +2 -2
  116. package/DS1/2-core/styles/ds-split.css +2 -62
  117. package/DS1/2-core/styles/ds-stat.css +34 -0
  118. package/DS1/2-core/styles/ds-switch.css +16 -1
  119. package/DS1/2-core/styles/ds-text.css +43 -12
  120. package/DS1/2-core/styles/ds-toast.css +182 -0
  121. package/DS1/2-core/styles/ds-tooltip.css +1 -0
  122. package/DS1/3-unit/calendar-base.ts +263 -0
  123. package/DS1/3-unit/ds-accordion.ts +9 -1
  124. package/DS1/3-unit/ds-avatar-group.ts +1 -0
  125. package/DS1/3-unit/ds-calendar-large.ts +349 -0
  126. package/DS1/3-unit/ds-calendar.ts +344 -0
  127. package/DS1/3-unit/ds-carousel.ts +368 -0
  128. package/DS1/3-unit/ds-date-picker.ts +540 -0
  129. package/DS1/3-unit/ds-form.ts +45 -37
  130. package/DS1/3-unit/ds-list.ts +48 -1
  131. package/DS1/3-unit/ds-matrix.ts +318 -0
  132. package/DS1/3-unit/ds-menu.ts +8 -4
  133. package/DS1/3-unit/ds-row.ts +84 -1
  134. package/DS1/3-unit/ds-sidebar.ts +366 -0
  135. package/DS1/3-unit/ds-table.ts +75 -34
  136. package/DS1/3-unit/styles/ds-accordion.css +1 -0
  137. package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
  138. package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
  139. package/DS1/3-unit/styles/ds-calendar.css +238 -0
  140. package/DS1/3-unit/styles/ds-carousel.css +30 -0
  141. package/DS1/3-unit/styles/ds-date-picker.css +124 -0
  142. package/DS1/3-unit/styles/ds-list.css +1 -0
  143. package/DS1/3-unit/styles/ds-matrix.css +203 -0
  144. package/DS1/3-unit/styles/ds-menu.css +31 -6
  145. package/DS1/3-unit/styles/ds-row.css +84 -2
  146. package/DS1/3-unit/styles/ds-sidebar.css +134 -0
  147. package/DS1/3-unit/styles/ds-table.css +3 -74
  148. package/DS1/4-page/ds-dialog.ts +40 -4
  149. package/DS1/4-page/ds-document.ts +240 -0
  150. package/DS1/4-page/ds-footer.ts +165 -0
  151. package/DS1/4-page/ds-grid.ts +39 -59
  152. package/DS1/4-page/ds-header.ts +171 -0
  153. package/DS1/4-page/ds-page.ts +184 -0
  154. package/DS1/4-page/email.ts +2 -3
  155. package/DS1/4-page/styles/ds-container.css +1 -0
  156. package/DS1/4-page/styles/ds-document.css +18 -0
  157. package/DS1/4-page/styles/ds-footer.css +29 -0
  158. package/DS1/4-page/styles/ds-grid.css +31 -85
  159. package/DS1/4-page/styles/ds-header.css +57 -0
  160. package/DS1/4-page/styles/ds-page.css +214 -0
  161. package/DS1/components.ts +7 -1
  162. package/DS1/index.ts +24 -6
  163. package/DS1/react/avatar.ts +4 -5
  164. package/DS1/react/button-split.ts +29 -0
  165. package/DS1/react/button.ts +32 -13
  166. package/DS1/react/carousel.ts +76 -0
  167. package/DS1/react/dialog.ts +36 -5
  168. package/DS1/react/document.ts +14 -0
  169. package/DS1/react/empty.ts +32 -0
  170. package/DS1/react/footer.ts +17 -0
  171. package/DS1/react/header.ts +15 -0
  172. package/DS1/react/input.ts +28 -17
  173. package/DS1/react/message.ts +73 -0
  174. package/DS1/react/notice.ts +59 -0
  175. package/DS1/react/page.ts +13 -0
  176. package/DS1/react/progress.ts +99 -0
  177. package/DS1/react/sidebar.ts +71 -0
  178. package/DS1/react/stat.ts +73 -0
  179. package/DS1/react/toast.ts +82 -0
  180. package/DS1/x-icon/Tabler-LICENSE.md +27 -0
  181. package/DS1/x-icon/airtable.svg +5 -0
  182. package/DS1/x-icon/attach.svg +3 -0
  183. package/DS1/x-icon/audio.svg +3 -0
  184. package/DS1/x-icon/bag-alt.svg +3 -0
  185. package/DS1/x-icon/bank.svg +3 -0
  186. package/DS1/x-icon/banknote.svg +3 -0
  187. package/DS1/x-icon/bolt.svg +3 -0
  188. package/DS1/x-icon/book-alt.svg +3 -0
  189. package/DS1/x-icon/book.svg +4 -0
  190. package/DS1/x-icon/box.svg +3 -0
  191. package/DS1/x-icon/briefcase.svg +3 -0
  192. package/DS1/x-icon/building.svg +4 -0
  193. package/DS1/x-icon/car.svg +3 -0
  194. package/DS1/x-icon/card.svg +3 -0
  195. package/DS1/x-icon/cart.svg +3 -0
  196. package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-down.svg} +1 -1
  197. package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
  198. package/DS1/x-icon/{ezo-android-screen-lists.svg → chevron-right.svg} +1 -1
  199. package/DS1/x-icon/{ezo-item-button-reopen.svg → chevron-up.svg} +1 -1
  200. package/DS1/x-icon/cloud.svg +3 -0
  201. package/DS1/x-icon/coffee.svg +3 -0
  202. package/DS1/x-icon/coins.svg +3 -0
  203. package/DS1/x-icon/cursor.svg +3 -0
  204. package/DS1/x-icon/curve.svg +7 -0
  205. package/DS1/x-icon/dislike.svg +4 -0
  206. package/DS1/x-icon/dot-bank.svg +3 -0
  207. package/DS1/x-icon/dot-banknote.svg +3 -0
  208. package/DS1/x-icon/dot-banknotes.svg +3 -0
  209. package/DS1/x-icon/dot-card.svg +3 -0
  210. package/DS1/x-icon/dot-coin.svg +3 -0
  211. package/DS1/x-icon/dot-coins.svg +3 -0
  212. package/DS1/x-icon/dot-receipt.svg +3 -0
  213. package/DS1/x-icon/dot-safe.svg +3 -0
  214. package/DS1/x-icon/dot-transfer.svg +3 -0
  215. package/DS1/x-icon/dot-wallet.svg +3 -0
  216. package/DS1/x-icon/download.svg +4 -0
  217. package/DS1/x-icon/drive.svg +5 -0
  218. package/DS1/x-icon/drop.svg +3 -0
  219. package/DS1/x-icon/dropbox.svg +3 -0
  220. package/DS1/x-icon/dumbbell.svg +3 -0
  221. package/DS1/x-icon/eye-off.svg +3 -0
  222. package/DS1/x-icon/eye.svg +3 -0
  223. package/DS1/x-icon/facebook.svg +3 -0
  224. package/DS1/x-icon/figma.svg +5 -0
  225. package/DS1/x-icon/flame.svg +3 -0
  226. package/DS1/x-icon/flip.svg +5 -0
  227. package/DS1/x-icon/food.svg +3 -0
  228. package/DS1/x-icon/fuel.svg +3 -0
  229. package/DS1/x-icon/game.svg +3 -0
  230. package/DS1/x-icon/gift.svg +3 -0
  231. package/DS1/x-icon/github.svg +3 -0
  232. package/DS1/x-icon/heart.svg +3 -0
  233. package/DS1/x-icon/history.svg +3 -0
  234. package/DS1/x-icon/home-alt.svg +3 -0
  235. package/DS1/x-icon/income.svg +3 -0
  236. package/DS1/x-icon/info.svg +5 -0
  237. package/DS1/x-icon/instagram.svg +5 -0
  238. package/DS1/x-icon/jpbank.svg +3 -0
  239. package/DS1/x-icon/key.svg +4 -0
  240. package/DS1/x-icon/keyboard.svg +3 -0
  241. package/DS1/x-icon/like.svg +4 -0
  242. package/DS1/x-icon/linkedin.svg +7 -0
  243. package/DS1/x-icon/loom.svg +6 -0
  244. package/DS1/x-icon/map.svg +4 -0
  245. package/DS1/x-icon/medical.svg +3 -0
  246. package/DS1/x-icon/minus.svg +3 -0
  247. package/DS1/x-icon/moon.svg +3 -0
  248. package/DS1/x-icon/move.svg +3 -0
  249. package/DS1/x-icon/music-alt.svg +3 -0
  250. package/DS1/x-icon/music.svg +5 -0
  251. package/DS1/x-icon/notion.svg +6 -0
  252. package/DS1/x-icon/offline.svg +3 -0
  253. package/DS1/x-icon/pause.svg +4 -0
  254. package/DS1/x-icon/paw.svg +3 -0
  255. package/DS1/x-icon/pdf.svg +3 -0
  256. package/DS1/x-icon/people.svg +5 -0
  257. package/DS1/x-icon/percent.svg +3 -0
  258. package/DS1/x-icon/phone.svg +3 -0
  259. package/DS1/x-icon/pill.svg +3 -0
  260. package/DS1/x-icon/plane.svg +3 -0
  261. package/DS1/x-icon/postal.svg +3 -0
  262. package/DS1/x-icon/present.svg +4 -0
  263. package/DS1/x-icon/reaction.svg +5 -0
  264. package/DS1/x-icon/receipt.svg +3 -0
  265. package/DS1/x-icon/refresh.svg +3 -0
  266. package/DS1/x-icon/refund.svg +3 -0
  267. package/DS1/x-icon/repeat.svg +3 -0
  268. package/DS1/x-icon/rotate.svg +4 -0
  269. package/DS1/x-icon/safe.svg +3 -0
  270. package/DS1/x-icon/school-alt.svg +3 -0
  271. package/DS1/x-icon/shield-alt.svg +3 -0
  272. package/DS1/x-icon/shield.svg +4 -0
  273. package/DS1/x-icon/shirt.svg +3 -0
  274. package/DS1/x-icon/shop.svg +3 -0
  275. package/DS1/x-icon/sign-in.svg +3 -0
  276. package/DS1/x-icon/sign-out.svg +3 -0
  277. package/DS1/x-icon/slack.svg +6 -0
  278. package/DS1/x-icon/sparkle.svg +3 -0
  279. package/DS1/x-icon/start.svg +4 -0
  280. package/DS1/x-icon/stop.svg +3 -0
  281. package/DS1/x-icon/sun.svg +3 -0
  282. package/DS1/x-icon/system.svg +4 -0
  283. package/DS1/x-icon/tag.svg +3 -0
  284. package/DS1/x-icon/ticket.svg +3 -0
  285. package/DS1/x-icon/title-struck.svg +4 -0
  286. package/DS1/x-icon/train.svg +3 -0
  287. package/DS1/x-icon/transfer.svg +3 -0
  288. package/DS1/x-icon/tv.svg +3 -0
  289. package/DS1/x-icon/upload.svg +4 -0
  290. package/DS1/x-icon/video.svg +4 -0
  291. package/DS1/x-icon/vimeo.svg +3 -0
  292. package/DS1/x-icon/wallet.svg +3 -0
  293. package/DS1/x-icon/wifi.svg +3 -0
  294. package/DS1/x-icon/window.svg +4 -0
  295. package/DS1/x-icon/wrench.svg +3 -0
  296. package/DS1/x-icon/x-brand.svg +4 -0
  297. package/DS1/x-icon/youtube.svg +4 -0
  298. package/README.md +3 -3
  299. package/dist/0-face/calendar.d.ts +75 -0
  300. package/dist/0-face/calendar.d.ts.map +1 -0
  301. package/dist/0-face/calendar.js +149 -0
  302. package/dist/0-face/carousel.d.ts +174 -0
  303. package/dist/0-face/carousel.d.ts.map +1 -0
  304. package/dist/0-face/carousel.js +583 -0
  305. package/dist/0-face/component-visibility.d.ts +7 -0
  306. package/dist/0-face/component-visibility.d.ts.map +1 -0
  307. package/dist/0-face/component-visibility.js +11 -0
  308. package/dist/0-face/copy-text.d.ts +11 -0
  309. package/dist/0-face/copy-text.d.ts.map +1 -0
  310. package/dist/0-face/copy-text.js +97 -0
  311. package/dist/0-face/device.d.ts +3 -7
  312. package/dist/0-face/device.d.ts.map +1 -1
  313. package/dist/0-face/device.js +7 -41
  314. package/dist/0-face/dialog-swipe.d.ts +49 -0
  315. package/dist/0-face/dialog-swipe.d.ts.map +1 -0
  316. package/dist/0-face/dialog-swipe.js +239 -0
  317. package/dist/0-face/dialogs.d.ts +33 -0
  318. package/dist/0-face/dialogs.d.ts.map +1 -0
  319. package/dist/0-face/dialogs.js +173 -0
  320. package/dist/0-face/drawer.d.ts +64 -0
  321. package/dist/0-face/drawer.d.ts.map +1 -0
  322. package/dist/0-face/drawer.js +256 -0
  323. package/dist/0-face/feedback-words.d.ts +21 -0
  324. package/dist/0-face/feedback-words.d.ts.map +1 -0
  325. package/dist/0-face/feedback-words.js +30 -0
  326. package/dist/0-face/feedback.d.ts +41 -0
  327. package/dist/0-face/feedback.d.ts.map +1 -0
  328. package/dist/0-face/feedback.js +35 -0
  329. package/dist/0-face/format.d.ts +166 -0
  330. package/dist/0-face/format.d.ts.map +1 -0
  331. package/dist/0-face/format.js +445 -0
  332. package/dist/0-face/generated/toast-assets.d.ts +11 -0
  333. package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
  334. package/dist/0-face/generated/toast-assets.js +14 -0
  335. package/dist/0-face/grid-fit.js +1 -1
  336. package/dist/0-face/grid.d.ts.map +1 -1
  337. package/dist/0-face/grid.js +2 -1
  338. package/dist/0-face/header.d.ts +38 -0
  339. package/dist/0-face/header.d.ts.map +1 -0
  340. package/dist/0-face/header.js +80 -0
  341. package/dist/0-face/i18n.d.ts +32 -2
  342. package/dist/0-face/i18n.d.ts.map +1 -1
  343. package/dist/0-face/i18n.js +65 -19
  344. package/dist/0-face/keys.d.ts +104 -0
  345. package/dist/0-face/keys.d.ts.map +1 -0
  346. package/dist/0-face/keys.js +253 -0
  347. package/dist/0-face/languages.d.ts +2 -2
  348. package/dist/0-face/languages.js +3 -3
  349. package/dist/0-face/layout-inspector.js +6 -6
  350. package/dist/0-face/library-styles.d.ts +7 -0
  351. package/dist/0-face/library-styles.d.ts.map +1 -0
  352. package/dist/0-face/library-styles.js +29 -0
  353. package/dist/0-face/load-toaster.d.ts +8 -0
  354. package/dist/0-face/load-toaster.d.ts.map +1 -0
  355. package/dist/0-face/load-toaster.js +7 -0
  356. package/dist/0-face/preference-options.d.ts +34 -0
  357. package/dist/0-face/preference-options.d.ts.map +1 -0
  358. package/dist/0-face/preference-options.js +1 -0
  359. package/dist/0-face/preferences.d.ts +3 -12
  360. package/dist/0-face/preferences.d.ts.map +1 -1
  361. package/dist/0-face/pricing.d.ts +19 -9
  362. package/dist/0-face/pricing.d.ts.map +1 -1
  363. package/dist/0-face/pricing.js +81 -40
  364. package/dist/0-face/scaling.d.ts +71 -1
  365. package/dist/0-face/scaling.d.ts.map +1 -1
  366. package/dist/0-face/scaling.js +108 -3
  367. package/dist/0-face/shared-words.d.ts +9 -4
  368. package/dist/0-face/shared-words.d.ts.map +1 -1
  369. package/dist/0-face/sidebar.d.ts +69 -0
  370. package/dist/0-face/sidebar.d.ts.map +1 -0
  371. package/dist/0-face/sidebar.js +191 -0
  372. package/dist/0-face/theme-bootstrap.d.ts +1 -0
  373. package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
  374. package/dist/0-face/theme-bootstrap.js +214 -0
  375. package/dist/0-face/theme.d.ts +32 -0
  376. package/dist/0-face/theme.d.ts.map +1 -1
  377. package/dist/0-face/theme.js +69 -43
  378. package/dist/0-face/toast-queue.d.ts +110 -0
  379. package/dist/0-face/toast-queue.d.ts.map +1 -0
  380. package/dist/0-face/toast-queue.js +98 -0
  381. package/dist/0-face/toaster.d.ts +27 -0
  382. package/dist/0-face/toaster.d.ts.map +1 -0
  383. package/dist/0-face/toaster.js +373 -0
  384. package/dist/0-face/tooltips.d.ts +24 -1
  385. package/dist/0-face/tooltips.d.ts.map +1 -1
  386. package/dist/0-face/tooltips.js +155 -16
  387. package/dist/0-face/translations/da.json +60 -1
  388. package/dist/0-face/translations/de.json +60 -1
  389. package/dist/0-face/translations/en.json +60 -1
  390. package/dist/0-face/translations/es.json +60 -1
  391. package/dist/0-face/translations/fi.json +60 -1
  392. package/dist/0-face/translations/fr.json +60 -1
  393. package/dist/0-face/translations/is.json +60 -1
  394. package/dist/0-face/translations/it.json +60 -1
  395. package/dist/0-face/translations/ja.json +60 -1
  396. package/dist/0-face/translations/ko.json +60 -1
  397. package/dist/0-face/translations/nb.json +60 -1
  398. package/dist/0-face/translations/pt-BR.json +60 -1
  399. package/dist/0-face/translations/pt.json +60 -1
  400. package/dist/0-face/translations/sv.json +60 -1
  401. package/dist/0-face/translations/zh.json +60 -1
  402. package/dist/0-face/translations-format.d.ts.map +1 -1
  403. package/dist/0-face/translations-format.js +3 -4
  404. package/dist/1-root/library-tokens.d.ts +31 -0
  405. package/dist/1-root/library-tokens.d.ts.map +1 -0
  406. package/dist/1-root/library-tokens.js +84 -0
  407. package/dist/1-root/measures.d.ts +52 -0
  408. package/dist/1-root/measures.d.ts.map +1 -0
  409. package/dist/1-root/measures.js +49 -0
  410. package/dist/1-root/palette.d.ts +5 -0
  411. package/dist/1-root/palette.d.ts.map +1 -1
  412. package/dist/1-root/palette.js +18 -0
  413. package/dist/2-core/button-split.d.ts +21 -0
  414. package/dist/2-core/button-split.d.ts.map +1 -0
  415. package/dist/2-core/button-split.js +48 -0
  416. package/dist/2-core/chart/grid-chart.d.ts +113 -0
  417. package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
  418. package/dist/2-core/chart/grid-chart.js +466 -0
  419. package/dist/2-core/ds-avatar.d.ts +20 -3
  420. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  421. package/dist/2-core/ds-avatar.js +19 -5
  422. package/dist/2-core/ds-badge.js +10 -13
  423. package/dist/2-core/ds-button.d.ts +76 -0
  424. package/dist/2-core/ds-button.d.ts.map +1 -1
  425. package/dist/2-core/ds-button.js +101 -26
  426. package/dist/2-core/ds-card.d.ts +76 -11
  427. package/dist/2-core/ds-card.d.ts.map +1 -1
  428. package/dist/2-core/ds-card.js +129 -105
  429. package/dist/2-core/ds-chart.d.ts +105 -0
  430. package/dist/2-core/ds-chart.d.ts.map +1 -0
  431. package/dist/2-core/ds-chart.js +390 -0
  432. package/dist/2-core/ds-composer.d.ts +7 -0
  433. package/dist/2-core/ds-composer.d.ts.map +1 -1
  434. package/dist/2-core/ds-composer.js +1 -1
  435. package/dist/2-core/ds-cycle.d.ts +36 -2
  436. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  437. package/dist/2-core/ds-cycle.js +95 -18
  438. package/dist/2-core/ds-empty.d.ts +74 -0
  439. package/dist/2-core/ds-empty.d.ts.map +1 -0
  440. package/dist/2-core/ds-empty.js +96 -0
  441. package/dist/2-core/ds-icon.d.ts +6 -0
  442. package/dist/2-core/ds-icon.d.ts.map +1 -1
  443. package/dist/2-core/ds-icon.js +12 -2
  444. package/dist/2-core/ds-input.d.ts +39 -1
  445. package/dist/2-core/ds-input.d.ts.map +1 -1
  446. package/dist/2-core/ds-input.js +150 -6
  447. package/dist/2-core/ds-message.d.ts +154 -0
  448. package/dist/2-core/ds-message.d.ts.map +1 -0
  449. package/dist/2-core/ds-message.js +177 -0
  450. package/dist/2-core/ds-notice.d.ts +13 -0
  451. package/dist/2-core/ds-notice.d.ts.map +1 -0
  452. package/dist/2-core/ds-notice.js +11 -0
  453. package/dist/2-core/ds-progress.d.ts +200 -0
  454. package/dist/2-core/ds-progress.d.ts.map +1 -0
  455. package/dist/2-core/ds-progress.js +319 -0
  456. package/dist/2-core/ds-stat.d.ts +126 -0
  457. package/dist/2-core/ds-stat.d.ts.map +1 -0
  458. package/dist/2-core/ds-stat.js +137 -0
  459. package/dist/2-core/ds-switch.d.ts +1 -0
  460. package/dist/2-core/ds-switch.d.ts.map +1 -1
  461. package/dist/2-core/ds-switch.js +1 -0
  462. package/dist/2-core/ds-text.d.ts +15 -2
  463. package/dist/2-core/ds-text.d.ts.map +1 -1
  464. package/dist/2-core/ds-text.js +13 -0
  465. package/dist/2-core/ds-toast.d.ts +139 -0
  466. package/dist/2-core/ds-toast.d.ts.map +1 -0
  467. package/dist/2-core/ds-toast.js +329 -0
  468. package/dist/2-core/figures.d.ts +56 -0
  469. package/dist/2-core/figures.d.ts.map +1 -0
  470. package/dist/2-core/figures.js +70 -0
  471. package/dist/2-core/generated/ds-icon-map.d.ts +120 -65
  472. package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
  473. package/dist/2-core/generated/ds-icon-map.js +238 -128
  474. package/dist/2-core/generated/icon-avatar.d.ts +2 -0
  475. package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
  476. package/dist/2-core/generated/icon-avatar.js +2 -0
  477. package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
  478. package/dist/2-core/generated/icons-extra.js +120 -65
  479. package/dist/2-core/generated/icons-immediate.d.ts +1 -1
  480. package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
  481. package/dist/2-core/generated/icons-immediate.js +1 -1
  482. package/dist/3-unit/calendar-base.d.ts +149 -0
  483. package/dist/3-unit/calendar-base.d.ts.map +1 -0
  484. package/dist/3-unit/calendar-base.js +172 -0
  485. package/dist/3-unit/ds-accordion.d.ts +9 -0
  486. package/dist/3-unit/ds-accordion.d.ts.map +1 -1
  487. package/dist/3-unit/ds-accordion.js +7 -1
  488. package/dist/3-unit/ds-avatar-group.d.ts +1 -0
  489. package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
  490. package/dist/3-unit/ds-calendar-large.d.ts +138 -0
  491. package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
  492. package/dist/3-unit/ds-calendar-large.js +305 -0
  493. package/dist/3-unit/ds-calendar.d.ts +175 -0
  494. package/dist/3-unit/ds-calendar.d.ts.map +1 -0
  495. package/dist/3-unit/ds-calendar.js +303 -0
  496. package/dist/3-unit/ds-carousel.d.ts +182 -0
  497. package/dist/3-unit/ds-carousel.d.ts.map +1 -0
  498. package/dist/3-unit/ds-carousel.js +327 -0
  499. package/dist/3-unit/ds-date-picker.d.ts +203 -0
  500. package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
  501. package/dist/3-unit/ds-date-picker.js +499 -0
  502. package/dist/3-unit/ds-form.d.ts.map +1 -1
  503. package/dist/3-unit/ds-form.js +38 -28
  504. package/dist/3-unit/ds-list.d.ts +12 -0
  505. package/dist/3-unit/ds-list.d.ts.map +1 -1
  506. package/dist/3-unit/ds-list.js +52 -1
  507. package/dist/3-unit/ds-matrix.d.ts +146 -0
  508. package/dist/3-unit/ds-matrix.d.ts.map +1 -0
  509. package/dist/3-unit/ds-matrix.js +248 -0
  510. package/dist/3-unit/ds-menu.d.ts +1 -1
  511. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  512. package/dist/3-unit/ds-menu.js +7 -4
  513. package/dist/3-unit/ds-row.d.ts +66 -0
  514. package/dist/3-unit/ds-row.d.ts.map +1 -1
  515. package/dist/3-unit/ds-row.js +80 -1
  516. package/dist/3-unit/ds-sidebar.d.ts +149 -0
  517. package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
  518. package/dist/3-unit/ds-sidebar.js +342 -0
  519. package/dist/3-unit/ds-table.d.ts +28 -10
  520. package/dist/3-unit/ds-table.d.ts.map +1 -1
  521. package/dist/3-unit/ds-table.js +53 -25
  522. package/dist/4-page/ds-dialog.d.ts +16 -1
  523. package/dist/4-page/ds-dialog.d.ts.map +1 -1
  524. package/dist/4-page/ds-dialog.js +39 -3
  525. package/dist/4-page/ds-document.d.ts +98 -0
  526. package/dist/4-page/ds-document.d.ts.map +1 -0
  527. package/dist/4-page/ds-document.js +213 -0
  528. package/dist/4-page/ds-footer.d.ts +100 -0
  529. package/dist/4-page/ds-footer.d.ts.map +1 -0
  530. package/dist/4-page/ds-footer.js +119 -0
  531. package/dist/4-page/ds-grid.d.ts +32 -12
  532. package/dist/4-page/ds-grid.d.ts.map +1 -1
  533. package/dist/4-page/ds-grid.js +30 -39
  534. package/dist/4-page/ds-header.d.ts +84 -0
  535. package/dist/4-page/ds-header.d.ts.map +1 -0
  536. package/dist/4-page/ds-header.js +143 -0
  537. package/dist/4-page/ds-page.d.ts +110 -0
  538. package/dist/4-page/ds-page.d.ts.map +1 -0
  539. package/dist/4-page/ds-page.js +155 -0
  540. package/dist/4-page/email.d.ts +2 -3
  541. package/dist/4-page/email.d.ts.map +1 -1
  542. package/dist/4-page/email.js +2 -3
  543. package/dist/components.d.ts +4 -1
  544. package/dist/components.d.ts.map +1 -1
  545. package/dist/components.js +4 -1
  546. package/dist/design-system-1.bundle.js +12322 -5523
  547. package/dist/design-system-1.bundle.js.map +1 -1
  548. package/dist/design-system-1.bundle.min.js +8771 -4115
  549. package/dist/design-system-1.bundle.min.js.map +1 -1
  550. package/dist/design-system-1.css +1 -1
  551. package/dist/feedback.js +541 -0
  552. package/dist/feedback.js.map +1 -0
  553. package/dist/{icons-extra-BoAACA4X.js → icons-extra-CiDDs7_-.js} +404 -312
  554. package/dist/icons-extra-CiDDs7_-.js.map +1 -0
  555. package/dist/{icons-extra-DlxTo_Y4.js → icons-extra-hauwCx07.js} +121 -66
  556. package/dist/icons-extra-hauwCx07.js.map +1 -0
  557. package/dist/index.d.ts +21 -6
  558. package/dist/index.d.ts.map +1 -1
  559. package/dist/index.js +21 -6
  560. package/dist/react/avatar.d.ts +5 -9
  561. package/dist/react/avatar.d.ts.map +1 -1
  562. package/dist/react/avatar.js +2 -2
  563. package/dist/react/button-split.d.ts +19 -0
  564. package/dist/react/button-split.d.ts.map +1 -0
  565. package/dist/react/{split.js → button-split.js} +12 -9
  566. package/dist/react/button.d.ts +18 -7
  567. package/dist/react/button.d.ts.map +1 -1
  568. package/dist/react/button.js +13 -4
  569. package/dist/react/carousel.d.ts +63 -0
  570. package/dist/react/carousel.d.ts.map +1 -0
  571. package/dist/react/carousel.js +47 -0
  572. package/dist/react/choice.d.ts +1 -1
  573. package/dist/react/context-menu.d.ts +337 -337
  574. package/dist/react/dialog.d.ts +684 -678
  575. package/dist/react/dialog.d.ts.map +1 -1
  576. package/dist/react/dialog.js +29 -3
  577. package/dist/react/document.d.ts +11 -0
  578. package/dist/react/document.d.ts.map +1 -0
  579. package/dist/react/document.js +10 -0
  580. package/dist/react/empty.d.ts +34 -0
  581. package/dist/react/empty.d.ts.map +1 -0
  582. package/dist/react/empty.js +8 -0
  583. package/dist/react/file-picker.d.ts +1 -1
  584. package/dist/react/footer.d.ts +13 -0
  585. package/dist/react/footer.d.ts.map +1 -0
  586. package/dist/react/footer.js +12 -0
  587. package/dist/react/header.d.ts +12 -0
  588. package/dist/react/header.d.ts.map +1 -0
  589. package/dist/react/header.js +11 -0
  590. package/dist/react/input.d.ts +31 -9
  591. package/dist/react/input.d.ts.map +1 -1
  592. package/dist/react/input.js +94 -94
  593. package/dist/react/message.d.ts +66 -0
  594. package/dist/react/message.d.ts.map +1 -0
  595. package/dist/react/message.js +37 -0
  596. package/dist/react/notice.d.ts +45 -0
  597. package/dist/react/notice.d.ts.map +1 -0
  598. package/dist/react/notice.js +34 -0
  599. package/dist/react/page.d.ts +10 -0
  600. package/dist/react/page.d.ts.map +1 -0
  601. package/dist/react/page.js +9 -0
  602. package/dist/react/progress.d.ts +107 -0
  603. package/dist/react/progress.d.ts.map +1 -0
  604. package/dist/react/progress.js +47 -0
  605. package/dist/react/sidebar.d.ts +54 -0
  606. package/dist/react/sidebar.d.ts.map +1 -0
  607. package/dist/react/sidebar.js +48 -0
  608. package/dist/react/stat.d.ts +78 -0
  609. package/dist/react/stat.d.ts.map +1 -0
  610. package/dist/react/stat.js +25 -0
  611. package/dist/react/toast.d.ts +37 -0
  612. package/dist/react/toast.d.ts.map +1 -0
  613. package/dist/react/toast.js +55 -0
  614. package/dist/shared-words-CyZYc_De.js +1818 -0
  615. package/dist/shared-words-CyZYc_De.js.map +1 -0
  616. package/dist/shared-words-DAVSET4Z.js +1800 -0
  617. package/dist/shared-words-DAVSET4Z.js.map +1 -0
  618. package/package.json +19 -6
  619. package/DS1/2-core/ds-banner.ts +0 -122
  620. package/DS1/2-core/ds-date.ts +0 -24
  621. package/DS1/2-core/ds-language.ts +0 -94
  622. package/DS1/2-core/ds-pagedots.ts +0 -52
  623. package/DS1/2-core/ds-split.ts +0 -122
  624. package/DS1/2-core/ds-textarea.ts +0 -136
  625. package/DS1/2-core/styles/ds-banner.css +0 -77
  626. package/DS1/2-core/styles/ds-date.css +0 -9
  627. package/DS1/2-core/styles/ds-language.css +0 -78
  628. package/DS1/2-core/styles/ds-pagedots.css +0 -31
  629. package/DS1/2-core/styles/ds-textarea.css +0 -27
  630. package/DS1/4-page/ds-layout.ts +0 -949
  631. package/DS1/4-page/styles/ds-layout.css +0 -246
  632. package/DS1/react/split.ts +0 -42
  633. package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
  634. package/DS1/x-icon/ezo-account-close.svg +0 -1
  635. package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
  636. package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
  637. package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
  638. package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
  639. package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
  640. package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
  641. package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
  642. package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
  643. package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
  644. package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
  645. package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
  646. package/DS1/x-icon/ezo-block-accordion.svg +0 -1
  647. package/DS1/x-icon/ezo-block-divider.svg +0 -1
  648. package/DS1/x-icon/ezo-block-group.svg +0 -1
  649. package/DS1/x-icon/ezo-block-image.svg +0 -1
  650. package/DS1/x-icon/ezo-block-section.svg +0 -1
  651. package/DS1/x-icon/ezo-block-table.svg +0 -1
  652. package/DS1/x-icon/ezo-code.svg +0 -14
  653. package/DS1/x-icon/ezo-down.svg +0 -3
  654. package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
  655. package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
  656. package/DS1/x-icon/ezo-item-button-header.svg +0 -3
  657. package/DS1/x-icon/ezo-item-button-open.svg +0 -3
  658. package/DS1/x-icon/ezo-item-button-star.svg +0 -3
  659. package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
  660. package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
  661. package/DS1/x-icon/ezo-item-star.svg +0 -5
  662. package/DS1/x-icon/ezo-left.svg +0 -3
  663. package/DS1/x-icon/ezo-logo.svg +0 -1
  664. package/DS1/x-icon/ezo-mic.svg +0 -8
  665. package/DS1/x-icon/ezo-move-column.svg +0 -14
  666. package/DS1/x-icon/ezo-move-row.svg +0 -18
  667. package/DS1/x-icon/ezo-navigation-check.svg +0 -1
  668. package/DS1/x-icon/ezo-note-back.svg +0 -5
  669. package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
  670. package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
  671. package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
  672. package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
  673. package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
  674. package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
  675. package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
  676. package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
  677. package/DS1/x-icon/ezo-note-more.svg +0 -7
  678. package/DS1/x-icon/ezo-note-star.svg +0 -5
  679. package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
  680. package/DS1/x-icon/ezo-play.svg +0 -5
  681. package/DS1/x-icon/ezo-premium-star.svg +0 -5
  682. package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
  683. package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
  684. package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
  685. package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
  686. package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
  687. package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
  688. package/DS1/x-icon/ezo-setting-blank.svg +0 -5
  689. package/DS1/x-icon/ezo-store-chevron.svg +0 -1
  690. package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
  691. package/DS1/x-icon/product-sources.json +0 -2557
  692. package/dist/2-core/ds-banner.d.ts +0 -68
  693. package/dist/2-core/ds-banner.d.ts.map +0 -1
  694. package/dist/2-core/ds-banner.js +0 -98
  695. package/dist/2-core/ds-date.d.ts +0 -16
  696. package/dist/2-core/ds-date.d.ts.map +0 -1
  697. package/dist/2-core/ds-date.js +0 -15
  698. package/dist/2-core/ds-language.d.ts +0 -75
  699. package/dist/2-core/ds-language.d.ts.map +0 -1
  700. package/dist/2-core/ds-language.js +0 -74
  701. package/dist/2-core/ds-pagedots.d.ts +0 -32
  702. package/dist/2-core/ds-pagedots.d.ts.map +0 -1
  703. package/dist/2-core/ds-pagedots.js +0 -36
  704. package/dist/2-core/ds-split.d.ts +0 -75
  705. package/dist/2-core/ds-split.d.ts.map +0 -1
  706. package/dist/2-core/ds-split.js +0 -101
  707. package/dist/2-core/ds-textarea.d.ts +0 -46
  708. package/dist/2-core/ds-textarea.d.ts.map +0 -1
  709. package/dist/2-core/ds-textarea.js +0 -121
  710. package/dist/4-page/ds-layout.d.ts +0 -31
  711. package/dist/4-page/ds-layout.d.ts.map +0 -1
  712. package/dist/4-page/ds-layout.js +0 -930
  713. package/dist/icons-extra-BoAACA4X.js.map +0 -1
  714. package/dist/icons-extra-DlxTo_Y4.js.map +0 -1
  715. package/dist/react/split.d.ts +0 -15
  716. package/dist/react/split.d.ts.map +0 -1
  717. package/dist/shared-words-Cg6Phtx0.js +0 -915
  718. package/dist/shared-words-Cg6Phtx0.js.map +0 -1
  719. package/dist/shared-words-Ddz0yUEF.js +0 -933
  720. package/dist/shared-words-Ddz0yUEF.js.map +0 -1
  721. /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
  722. /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
@@ -0,0 +1,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
+ }
@@ -0,0 +1,29 @@
1
+ /* ds-footer.css */
2
+ /* The element places the block; 1-root/footer.css draws it and controls.css
3
+ the buttons. */
4
+
5
+ :host {
6
+ display: block;
7
+ min-width: 0;
8
+ }
9
+
10
+ :host([hidden]),
11
+ [hidden] {
12
+ display: none !important;
13
+ }
14
+
15
+ /* A brand of the page's own takes the mark's line; a slotted legal line its words. */
16
+ ::slotted([slot="brand"]) {
17
+ display: inline-flex;
18
+ align-items: center;
19
+ gap: calc(var(--ds-unit) / 2);
20
+ align-self: flex-start;
21
+ height: var(--ds-unit);
22
+ color: inherit;
23
+ text-decoration: none;
24
+ }
25
+
26
+ ::slotted([slot="legal"]) {
27
+ margin: 0;
28
+ font: inherit;
29
+ }
@@ -1,95 +1,41 @@
1
- /* ds-grid.css */
2
- /* Grid layout component styles */
3
-
1
+ /* A one-square pitch by default. Rules stay hairlines at every surface scale. */
4
2
  :host {
5
- margin-top: 0.5px !important;
6
- margin-left: 0.5px !important;
7
- display: grid;
8
- width: 1440px;
9
- height: 1280px;
10
- grid-template-columns: repeat(auto-fill, 19px);
11
- grid-template-rows: repeat(auto-fill, 19px);
12
- gap: 1px;
13
- row-rule: calc(1px * var(--sf)) solid var(--grid-color);
14
- column-rule: calc(1px * var(--sf)) solid var(--grid-color);
15
- outline: calc(1px * var(--sf)) solid light-dark(var(--sharp-blue), var(--yellow));
3
+ --grid-scale: var(--ds-sf, var(--sf, 1));
4
+ display: block;
16
5
  position: fixed;
17
6
  top: 0;
18
7
  left: 50%;
19
8
  transform: translateX(-50%);
9
+ width: var(--ds-grid-width, calc(1440px * var(--grid-scale)));
10
+ height: var(--ds-grid-height, max(100vh, calc(1280px * var(--grid-scale))));
20
11
  pointer-events: none;
21
- z-index: 300;
12
+ z-index: var(--ds-grid-z-index, 300);
22
13
  }
23
-
24
- /* DO NOT CHANGE THIS GRID CODE FOR MOBILE. ITS PERFECT FOR MOBILE. */
25
- :host(.mobile) {
26
- width: calc(100% - calc(1px * var(--sf)));
27
- max-width: 100vw;
28
- margin-left: 0.5px !important;
29
- margin-top: 0 !important;
30
- box-sizing: border-box;
31
- position: fixed;
32
- top: calc(0.5px * var(--sf));
33
- left: 50%;
34
- transform: translateX(-50%);
35
- pointer-events: none;
36
- z-index: 300;
37
- gap: calc(1px * var(--sf));
38
- grid-template-columns: repeat(14, calc(19px * var(--sf)));
39
- grid-template-rows: repeat(auto-fill, calc(19px * var(--sf)));
40
- }
41
-
42
- :host([align="left"]) {
43
- left: 0;
44
- transform: none;
45
- }
46
-
47
- :host([align="center"]) {
48
- left: 50%;
49
- transform: translateX(-50%);
14
+ :host([hidden]) { display: none !important; }
15
+ :host([align="left"]) { left: 0; transform: none; }
16
+ :host([align="right"]) { left: auto; right: 0; transform: none; }
17
+ @media (max-width: 768px) {
18
+ :host { width: calc(100% - 1px); max-width: 100vw; }
50
19
  }
51
-
52
- :host([align="right"]) {
53
- left: auto;
54
- right: 0;
55
- transform: none;
20
+ /* The containing element establishes positioning; its content stays above the paper. */
21
+ :host([contained]) { position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; transform: none; z-index: 0; }
22
+ .paper {
23
+ position: absolute;
24
+ inset: 0;
25
+ --cell: var(--ds-grid-unit, calc(var(--pitch-x) * var(--grid-scale)));
26
+ --row: var(--ds-grid-row, calc(var(--pitch-y) * var(--grid-scale)));
27
+ --stroke: var(--ds-grid-stroke, 1px);
28
+ background-color: var(--paper);
29
+ background-size: var(--cell) var(--row);
30
+ background-position: calc(var(--ds-grid-origin-x, 0px) - var(--stroke) / 2) calc(var(--ds-grid-origin-y, 0px) - var(--stroke) / 2);
31
+ background-repeat: repeat;
56
32
  }
57
-
58
- /* Visible 19px tracks when CSS Gap Decorations (`row-rule`) is unavailable */
59
- @supports not (row-rule: 1px solid black) {
60
- :host {
61
- background-image:
62
- repeating-linear-gradient(
63
- to right,
64
- transparent 0,
65
- transparent 19px,
66
- var(--grid-color) 19px,
67
- var(--grid-color) 20px
68
- ),
69
- repeating-linear-gradient(
70
- to bottom,
71
- transparent 0,
72
- transparent 19px,
73
- var(--grid-color) 19px,
74
- var(--grid-color) 20px
75
- );
76
- }
77
-
78
- :host(.mobile) {
79
- background-image:
80
- repeating-linear-gradient(
81
- to right,
82
- transparent 0,
83
- transparent calc(19px * var(--sf, 1)),
84
- var(--grid-color) calc(19px * var(--sf, 1)),
85
- var(--grid-color) calc(20px * var(--sf, 1))
86
- ),
87
- repeating-linear-gradient(
88
- to bottom,
89
- transparent 0,
90
- transparent calc(19px * var(--sf, 1)),
91
- var(--grid-color) calc(19px * var(--sf, 1)),
92
- var(--grid-color) calc(20px * var(--sf, 1))
93
- );
94
- }
33
+ [data-pattern="grid"] { background-image: linear-gradient(to right, var(--ink) var(--stroke), transparent var(--stroke)), linear-gradient(to bottom, var(--ink) var(--stroke), transparent var(--stroke)); }
34
+ [data-pattern="lines"] { background-image: linear-gradient(to bottom, var(--ink) var(--stroke), transparent var(--stroke)); }
35
+ [data-pattern="columns"] { background-image: linear-gradient(to right, var(--ink) var(--stroke), transparent var(--stroke)); }
36
+ [data-pattern="dots"] {
37
+ background-image: radial-gradient(circle, var(--ink) var(--stroke), transparent var(--stroke));
38
+ background-position: var(--ds-grid-origin-x, 0px) calc(var(--ds-grid-origin-y, 0px) - var(--row) / 2);
95
39
  }
40
+ [data-pattern="none"] { background-image: none; }
41
+ @media print { :host(:not([contained])) { display: none; } }
@@ -0,0 +1,57 @@
1
+ /* ds-header.css */
2
+ /* The element places the row; 1-root/header.css draws it, drawer.css its
3
+ drawer and controls.css the buttons. The links are the page's own, slotted:
4
+ they take the navigation's look here, and a page's own link styles win. */
5
+
6
+ :host {
7
+ display: block;
8
+ min-width: 0;
9
+ }
10
+
11
+ :host([sticky]) {
12
+ position: sticky;
13
+ top: 0;
14
+ z-index: 1;
15
+ }
16
+
17
+ :host([hidden]),
18
+ [hidden] {
19
+ display: none !important;
20
+ }
21
+
22
+ ::slotted(a) {
23
+ display: block;
24
+ height: var(--ds-unit);
25
+ color: inherit;
26
+ font: inherit;
27
+ letter-spacing: inherit;
28
+ line-height: var(--ds-unit);
29
+ text-decoration-line: underline;
30
+ text-decoration-thickness: 1px;
31
+ text-decoration-color: transparent;
32
+ text-underline-offset: calc(2px * var(--ds-sf));
33
+ white-space: nowrap;
34
+ }
35
+
36
+ ::slotted(a:hover) {
37
+ text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
38
+ }
39
+
40
+ ::slotted(a[aria-current]:not([aria-current="false"])) {
41
+ text-decoration-color: currentColor;
42
+ }
43
+
44
+ ::slotted(a:focus-visible) {
45
+ outline: 2px solid var(--ds-focus-ring);
46
+ outline-offset: 1px;
47
+ }
48
+
49
+ /* A brand of the page's own takes the brand's line. */
50
+ ::slotted([slot="brand"]) {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: calc(var(--ds-unit) / 2);
54
+ height: var(--ds-unit);
55
+ color: inherit;
56
+ text-decoration: none;
57
+ }