@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
@@ -2,14 +2,28 @@
2
2
  // Core button component
3
3
 
4
4
  import { html, unsafeCSS } from "lit";
5
+ import { ifDefined } from "lit/directives/if-defined.js";
5
6
  import "./ds-text";
6
7
  import { Control } from "../0-face/control";
7
8
  import { define } from "../0-face/define";
8
9
  import hostStyles from "./styles/ds-button-host.css?inline";
9
10
  import styles from "./styles/ds-button.css?inline";
10
11
 
12
+ import { renderSplit, focusSplit, type SplitSegment } from "./button-split";
13
+ import splitStyles from "./styles/ds-button-split.css?inline";
14
+ export type { SplitSegment } from "./button-split";
15
+
11
16
  export class Button extends Control {
17
+ static formAssociated = true;
12
18
  static properties = {
19
+ split: { type: Boolean, reflect: true },
20
+ options: { type: String },
21
+ segments: { attribute: false },
22
+ value: { type: String, reflect: true },
23
+ actions: { type: Boolean, reflect: true },
24
+ literal: { type: Boolean, reflect: true },
25
+ compact: { type: Boolean, reflect: true },
26
+ _fieldsetDisabled: { state: true },
13
27
  primary: { type: Boolean, reflect: true },
14
28
  secondary: { type: Boolean, reflect: true },
15
29
  control: { type: String, reflect: true, noAccessor: true },
@@ -17,16 +31,32 @@ export class Button extends Control {
17
31
  choice: { type: Boolean, reflect: true },
18
32
  icon: { type: Boolean, reflect: true },
19
33
  wide: { type: Boolean, reflect: true },
34
+ fixed: { type: Boolean, reflect: true },
20
35
  fit: { type: Boolean, reflect: true },
21
36
  danger: { type: Boolean, reflect: true },
22
37
  menuItem: { type: Boolean, reflect: true, attribute: "menu-item" },
23
38
  blank: { type: Boolean, reflect: true },
24
39
  language: { type: String },
25
40
  text: { type: String },
41
+ label: { type: String },
26
42
  href: { type: String },
43
+ target: { type: String },
44
+ rel: { type: String },
27
45
  _loading: { type: Boolean, state: true },
28
46
  };
29
47
 
48
+ declare split: boolean;
49
+ declare options: string;
50
+ declare segments: ReadonlyArray<SplitSegment> | undefined;
51
+ declare value: string;
52
+ declare actions: boolean;
53
+ declare literal: boolean;
54
+ declare compact: boolean;
55
+ declare private _fieldsetDisabled: boolean;
56
+ private splitRole = false;
57
+ get splitDisabled(): boolean { return this.disabled || this._fieldsetDisabled; }
58
+ private splitLanguageChanged = () => { if (this.split) this.requestUpdate(); };
59
+
30
60
  // Public properties
31
61
  declare primary: boolean;
32
62
  declare secondary: boolean;
@@ -34,6 +64,7 @@ export class Button extends Control {
34
64
  declare choice: boolean;
35
65
  declare icon: boolean;
36
66
  declare wide: boolean;
67
+ declare fixed: boolean;
37
68
  declare fit: boolean;
38
69
  declare danger: boolean;
39
70
  declare menuItem: boolean;
@@ -45,21 +76,43 @@ export class Button extends Control {
45
76
  this.syncControl();
46
77
  this.requestUpdate("control", old);
47
78
  }
48
- protected get hostControl(): boolean { return this.control === "host"; }
79
+ protected get hostControl(): boolean { return this.control === "host" && !this.split; }
49
80
  declare blank: boolean;
50
81
  declare language: string;
51
82
  declare text: string;
83
+ /**
84
+ * The control's accessible name, as given, for a face that does not say
85
+ * what the button does on its own: a value, a number or an icon. Pass words
86
+ * already in the page's language.
87
+ */
88
+ declare label: string;
89
+ /**
90
+ * With `href` the face is a real link (`<a part="control">`): the browser
91
+ * navigates, so middle-click, ⌘- or Ctrl-click, Copy link and Enter work as
92
+ * on any link. `target` and `rel` go on the link; `blank` is `target="_blank"`,
93
+ * which gets `rel="noopener noreferrer"` unless `rel` says otherwise. A
94
+ * disabled link has no `href`, so it cannot navigate.
95
+ */
52
96
  declare href: string;
97
+ declare target: string;
98
+ declare rel: string;
53
99
 
54
100
  // Private state
55
101
  declare _loading: boolean;
56
102
 
57
103
  constructor() {
58
104
  super();
105
+ if (typeof this.attachInternals === "function") this.attachInternals();
106
+ this.split = false; this.options = ""; this.value = "";
107
+ this.actions = false; this.literal = false; this.compact = false; this._fieldsetDisabled = false;
108
+ this.addEventListener("click", event => {
109
+ if (this._fieldsetDisabled) { event.preventDefault(); event.stopImmediatePropagation(); }
110
+ }, { capture: true });
59
111
  this.active = false;
60
112
  this.choice = false;
61
113
  this.icon = false;
62
114
  this.wide = false;
115
+ this.fixed = false;
63
116
  this.fit = false;
64
117
  this.danger = false;
65
118
  this.menuItem = false;
@@ -69,88 +122,120 @@ export class Button extends Control {
69
122
  this.blank = false;
70
123
  this.language = "en-US";
71
124
  this.text = "";
125
+ this.label = "";
72
126
  this.href = "";
127
+ this.target = "";
128
+ this.rel = "";
73
129
  this._loading = false;
74
130
  }
75
131
 
76
- static styles = [unsafeCSS(styles), unsafeCSS(hostStyles)];
132
+ static styles = [unsafeCSS(styles), unsafeCSS(hostStyles), unsafeCSS(splitStyles)];
77
133
 
78
134
  /**
79
135
  * A button holding only an icon — every close button — says so on its host,
80
136
  * so its styles can make it a 16-unit square with the icon filling it.
81
137
  */
82
138
  _reflectIcon() {
83
- if (this.control !== "native") return;
139
+ if (this.control !== "native" || this.split) return;
84
140
  const only = this.firstElementChild;
85
141
  const icon = !this.text && this.childElementCount === 1 && only?.localName === 'ds-icon' && !(this.textContent ?? '').trim();
86
142
  this.toggleAttribute('icon', !!icon);
87
143
  }
88
144
 
89
145
  private syncSlottedControl() {
90
- if (this.control !== "slotted") return;
146
+ if (this.control !== "slotted" || this.split) return;
91
147
  const button = this.querySelector<HTMLButtonElement>(":scope > button");
92
- if (button) button.disabled = this.disabled;
148
+ if (button) button.disabled = this.splitDisabled;
149
+ }
150
+
151
+ /** A split is a named group from the moment it is in the document, before its first render. */
152
+ private syncSplitRole() {
153
+ if (this.split && !this.hasAttribute("role")) { this.setAttribute("role", "group"); this.splitRole = true; }
154
+ else if (!this.split && this.splitRole) { this.removeAttribute("role"); this.splitRole = false; this.syncControl(); }
93
155
  }
94
156
 
95
157
  updated() {
158
+ this.syncSplitRole();
96
159
  this.syncSlottedControl();
97
160
  }
98
161
 
99
162
  focus(options?: FocusOptions) {
163
+ if (this.split) { focusSplit(this, options); return; }
100
164
  if (this.control === "slotted") this.querySelector<HTMLElement>(":scope > :is(button, a)")?.focus(options);
101
165
  else if (this.hostControl) super.focus(options);
102
- else this.shadowRoot?.querySelector("button")?.focus(options);
166
+ else this.shadowRoot?.querySelector<HTMLElement>('[part="control"]')?.focus(options);
103
167
  }
104
168
 
105
169
  connectedCallback() {
106
170
  super.connectedCallback();
171
+ this.syncSplitRole();
107
172
  this._reflectIcon();
108
173
  this.syncSlottedControl();
174
+ window.addEventListener("language-changed", this.splitLanguageChanged);
175
+ window.addEventListener("translations-loaded", this.splitLanguageChanged);
176
+ }
177
+
178
+ disconnectedCallback() {
179
+ window.removeEventListener("language-changed", this.splitLanguageChanged);
180
+ window.removeEventListener("translations-loaded", this.splitLanguageChanged);
181
+ super.disconnectedCallback();
109
182
  }
183
+ formDisabledCallback(disabled: boolean) { this._fieldsetDisabled = disabled; this.syncSlottedControl(); }
110
184
 
111
185
  render() {
186
+ if (this.split) return renderSplit(this);
112
187
  const hasTextProps = this.text;
113
188
  if (this.control === "slotted") return html`<slot @slotchange=${this.syncSlottedControl}></slot>`;
114
189
  if (this.hostControl) return html`<slot name="icon"></slot><slot></slot><slot name="trailing"></slot>`;
115
190
 
191
+ const content = hasTextProps
192
+ ? html`<ds-text .text=${this.text}></ds-text>`
193
+ : html`<slot @slotchange=${this._reflectIcon}></slot>`;
194
+
195
+ if (this.href) {
196
+ const disabled = this.splitDisabled;
197
+ const target = this.target || (this.blank ? "_blank" : "");
198
+ const rel = this.rel || (target === "_blank" ? "noopener noreferrer" : "");
199
+ return html`<a
200
+ part="control"
201
+ ?primary=${this.primary}
202
+ ?secondary=${this.secondary}
203
+ href=${ifDefined(disabled ? undefined : this.href)}
204
+ target=${ifDefined(disabled || !target ? undefined : target)}
205
+ rel=${ifDefined(disabled || !rel ? undefined : rel)}
206
+ role=${ifDefined(disabled ? "link" : undefined)}
207
+ aria-disabled=${ifDefined(disabled ? "true" : undefined)}
208
+ aria-label=${ifDefined(this.label || undefined)}
209
+ @click=${this._handleClick}
210
+ >${content}</a>`;
211
+ }
212
+
116
213
  return html`
117
214
  <button
215
+ part="control"
118
216
  type="button"
119
217
  ?primary=${this.primary}
120
218
  ?secondary=${this.secondary}
121
- ?disabled=${this.disabled}
219
+ ?disabled=${this.splitDisabled}
220
+ aria-label=${ifDefined(this.label || undefined)}
122
221
  @click=${this._handleClick}
123
222
  >
124
- ${hasTextProps
125
- ? html`<ds-text .text=${this.text}></ds-text>`
126
- : html`<slot @slotchange=${this._reflectIcon}></slot>`}
223
+ ${content}
127
224
  </button>
128
225
  `;
129
226
  }
130
227
 
131
228
  private _handleClick(e: Event) {
132
229
  // Prevent any action if disabled and stop event propagation
133
- if (this.disabled) {
134
- e.preventDefault();
135
- e.stopPropagation();
136
- return;
137
- }
138
-
139
- // If href is provided, navigate to the URL and do not bubble further
140
- if (this.href) {
230
+ if (this.splitDisabled) {
141
231
  e.preventDefault();
142
232
  e.stopPropagation();
143
- if (this.blank) {
144
- window.open(this.href, "_blank", "noopener,noreferrer");
145
- } else {
146
- window.location.href = this.href;
147
- }
148
233
  return;
149
234
  }
150
235
 
151
- // Otherwise, rely on the native 'click' event bubbling from the inner
152
- // <button> through the shadow boundary to consumers of <ds-button>.
153
- // Do not re-dispatch a synthetic 'click' here to avoid duplicate events.
236
+ // Otherwise the native click bubbles from the inner <button> or <a>
237
+ // through the shadow boundary to consumers of <ds-button>, and a link
238
+ // navigates as the browser does. Nothing is re-dispatched or redirected.
154
239
  }
155
240
  }
156
241
 
@@ -1,134 +1,164 @@
1
1
  // ds-card.ts
2
- // Card component for displaying content in a contained box
3
-
4
- import { LitElement, html, css } from "lit";
5
-
2
+ // A card: one thing on a fill of its own, its name, a title, writing and a
3
+ // picture that can run off its foot. Drawn by 1-root/card.css, the same
4
+ // classes a page without scripts writes.
5
+
6
+ import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from "lit";
7
+ import { define } from "../0-face/define";
8
+ import metrics from "../1-root/component-metrics.css?inline";
9
+ import card from "../1-root/card.css?inline";
10
+ import styles from "./styles/ds-card.css?inline";
11
+
12
+ /** A whole number of squares, or `undefined` for a value that is not one. */
13
+ const squares = (value: number | undefined) =>
14
+ typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : undefined;
15
+
16
+ const PADDING: Record<string, string> = {
17
+ none: "0px",
18
+ small: "calc(var(--ds-unit) / 2)",
19
+ medium: "var(--ds-unit)",
20
+ large: "calc(var(--ds-unit) * 2)",
21
+ };
22
+
23
+ type Slot = "label" | "title" | "media";
24
+
25
+ /**
26
+ * @element ds-card
27
+ * @prop {string} href - A destination: the whole card becomes one link.
28
+ * @prop {boolean} interactive - The whole card is one button-like press
29
+ * target that fires `ds-card-press`; use `href` for a destination.
30
+ * @prop {string} tone - A palette colour for the fill (`sharp-blue`,
31
+ * `apple-green`, `pink`…), drawn as its pastel and dim in dark mode, or
32
+ * `ink` for the ink with the paper's words. The quiet fill by default.
33
+ * @prop {string} variant - `filled` (the default) or `outlined`, a 1px line
34
+ * and no fill.
35
+ * @prop {number} width - The card's width in whole squares.
36
+ * @prop {number} height - The card's height in whole squares.
37
+ * @prop {string} padding - `none`, `small` (half a square), `medium` (one,
38
+ * the default) or `large` (two).
39
+ * @prop {string} media - Where the picture stands: `start` (the default),
40
+ * `center`, or `bleed` to run on past the padding to the end edge.
41
+ * @prop {boolean} disabled - Neither pressed nor followed.
42
+ *
43
+ * @slot label - The thing's name, muted, on one square.
44
+ * @slot title - The title, display size, a square and a half a line.
45
+ * @slot - Writing, one square a line.
46
+ * @slot media - A picture of it, a square below the words; it may run off
47
+ * the card's foot and end edge and is cut there.
48
+ *
49
+ * @fires ds-card-press - An `interactive` card was pressed (click, Enter or Space).
50
+ *
51
+ * @example
52
+ * <ds-card href="/lists" tone="sharp-blue" width="14" height="22" media="center">
53
+ * <span slot="label">Lists</span>
54
+ * <span slot="title">Lists on one grid</span>
55
+ * <img slot="media" src="lists.webp" alt="A list on a phone" />
56
+ * </ds-card>
57
+ */
6
58
  export class Card extends LitElement {
7
59
  static properties = {
8
- variant: { type: String, reflect: true },
9
- elevation: { type: Number, reflect: true },
60
+ href: { type: String, reflect: true },
10
61
  interactive: { type: Boolean, reflect: true },
11
- disabled: { type: Boolean, reflect: true },
62
+ tone: { type: String, reflect: true },
63
+ variant: { type: String, reflect: true },
64
+ width: { type: Number, reflect: true },
65
+ height: { type: Number, reflect: true },
12
66
  padding: { type: String, reflect: true },
67
+ media: { type: String, reflect: true },
68
+ disabled: { type: Boolean, reflect: true },
69
+ filled: { state: true },
13
70
  };
14
71
 
15
- declare variant: "default" | "outlined" | "elevated" | "filled";
16
- declare elevation: number;
72
+ static styles = [unsafeCSS(metrics), unsafeCSS(card), unsafeCSS(styles)];
73
+
74
+ declare href: string | undefined;
17
75
  declare interactive: boolean;
18
- declare disabled: boolean;
76
+ declare tone: string | undefined;
77
+ declare variant: "filled" | "outlined";
78
+ declare width: number | undefined;
79
+ declare height: number | undefined;
19
80
  declare padding: "none" | "small" | "medium" | "large";
81
+ declare media: "start" | "center" | "bleed";
82
+ declare disabled: boolean;
83
+ /** The named slots that hold something. */
84
+ declare filled: Set<Slot>;
20
85
 
21
86
  constructor() {
22
87
  super();
23
- this.variant = "default";
24
- this.elevation = 1;
25
88
  this.interactive = false;
26
- this.disabled = false;
89
+ this.variant = "filled";
27
90
  this.padding = "medium";
91
+ this.media = "start";
92
+ this.disabled = false;
93
+ this.filled = new Set();
28
94
  }
29
95
 
30
- static styles = css`
31
- :host {
32
- display: block;
33
- box-sizing: border-box;
34
- border-radius: calc(var(--025) * var(--sf, 1));
35
- background-color: var(--card-background, var(--surface-color, #fff));
36
- color: var(--text-color-primary);
37
- transition:
38
- box-shadow 0.2s ease,
39
- transform 0.2s ease;
40
- }
41
-
42
- :host([variant="default"]) {
43
- background-color: var(--card-background, var(--surface-color, #fff));
44
- border: 1px solid var(--border-color, rgba(0, 0, 0, 0.1));
45
- }
46
-
47
- :host([variant="outlined"]) {
48
- background-color: transparent;
49
- border: 1px solid var(--border-color, rgba(0, 0, 0, 0.2));
50
- }
51
-
52
- :host([variant="elevated"]) {
53
- background-color: var(--card-background, var(--surface-color, #fff));
54
- border: none;
55
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
56
- }
57
-
58
- :host([variant="filled"]) {
59
- background-color: var(
60
- --card-background-filled,
61
- var(--surface-color-secondary, #f5f5f5)
62
- );
63
- border: none;
64
- }
65
-
66
- :host([elevation="0"]) {
67
- box-shadow: none;
68
- }
69
-
70
- :host([elevation="1"]) {
71
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
72
- }
73
-
74
- :host([elevation="2"]) {
75
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
76
- }
77
-
78
- :host([elevation="3"]) {
79
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.16);
80
- }
81
-
82
- :host([interactive]) {
83
- cursor: pointer;
84
- }
85
-
86
- :host([interactive]:hover:not([disabled])) {
87
- transform: translateY(-2px);
88
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
89
- }
90
-
91
- :host([interactive]:active:not([disabled])) {
92
- transform: translateY(0);
93
- }
94
-
95
- :host([disabled]) {
96
- opacity: 0.5;
97
- pointer-events: none;
98
- }
99
-
100
- :host([padding="none"]) {
101
- padding: 0;
102
- }
103
-
104
- :host([padding="small"]) {
105
- padding: calc(var(--025) * var(--sf, 1));
106
- }
96
+ protected willUpdate(changed: PropertyValues<this>) {
97
+ super.willUpdate(changed);
98
+ if (!this.hasUpdated) this.filled = this.read();
99
+ const width = squares(this.width);
100
+ const height = squares(this.height);
101
+ if (width) this.style.setProperty("--ds-card-width", `calc(var(--ds-unit) * ${width})`);
102
+ else this.style.removeProperty("--ds-card-width");
103
+ if (height) this.style.setProperty("--ds-card-height", `calc(var(--ds-unit) * ${height})`);
104
+ else this.style.removeProperty("--ds-card-height");
105
+ this.style.setProperty("--ds-card-padding", PADDING[this.padding] ?? PADDING.medium);
106
+ }
107
107
 
108
- :host([padding="medium"]) {
109
- padding: calc(var(--05) * var(--sf, 1));
108
+ /** The named slots the card's children fill, read from the children so the first paint already has them. */
109
+ private read(): Set<Slot> {
110
+ const filled = new Set<Slot>();
111
+ for (const child of this.children) {
112
+ const name = child.getAttribute("slot");
113
+ if (name === "label" || name === "title" || name === "media") filled.add(name);
110
114
  }
115
+ return filled;
116
+ }
111
117
 
112
- :host([padding="large"]) {
113
- padding: calc(var(--1) * var(--sf, 1));
114
- }
118
+ private readonly changed = () => {
119
+ const next = this.read();
120
+ if ([...next].join() !== [...this.filled].join()) this.filled = next;
121
+ };
115
122
 
116
- .card-content {
117
- width: 100%;
118
- height: 100%;
123
+ private press(event: Event) {
124
+ if (!this.interactive || this.disabled) return;
125
+ if (event instanceof KeyboardEvent) {
126
+ if (event.key !== "Enter" && event.key !== " ") return;
127
+ event.preventDefault();
119
128
  }
120
- `;
129
+ this.dispatchEvent(new CustomEvent("ds-card-press", { bubbles: true, composed: true }));
130
+ }
121
131
 
122
132
  render() {
123
- return html`
124
- <div class="card-content" part="content">
125
- <slot></slot>
126
- </div>
127
- `;
133
+ const tone = this.tone || nothing;
134
+ const media = this.media === "center" || this.media === "bleed" ? ` ds-card__media--${this.media}` : "";
135
+ const parts = html`
136
+ <span class="ds-card__label" part="label" ?hidden=${!this.filled.has("label")}><slot name="label" @slotchange=${this.changed}></slot></span>
137
+ <span class="ds-card__title" part="title" ?hidden=${!this.filled.has("title")}><slot name="title" @slotchange=${this.changed}></slot></span>
138
+ <div class="ds-card__body" part="body"><slot></slot></div>
139
+ <div class="ds-card__media${media}" part="media" ?hidden=${!this.filled.has("media")}><slot name="media" @slotchange=${this.changed}></slot></div>`;
140
+ const className = `ds-card${this.variant === "outlined" ? " ds-card--outlined" : ""}`;
141
+ if (this.href && !this.disabled) {
142
+ return html`<a class=${className} part="card" href=${this.href} data-tone=${tone}>${parts}</a>`;
143
+ }
144
+ if (this.interactive) {
145
+ return html`<div
146
+ class=${className}
147
+ part="card"
148
+ role="button"
149
+ tabindex=${this.disabled ? -1 : 0}
150
+ aria-disabled=${this.disabled ? "true" : nothing}
151
+ data-interactive
152
+ data-tone=${tone}
153
+ @click=${this.press}
154
+ @keydown=${this.press}
155
+ >${parts}</div>`;
156
+ }
157
+ return html`<div class=${className} part="card" data-tone=${tone}>${parts}</div>`;
128
158
  }
129
159
  }
130
160
 
131
- customElements.define("ds-card", Card);
161
+ define("ds-card", Card);
132
162
 
133
163
  declare global {
134
164
  interface HTMLElementTagNameMap {