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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (771) hide show
  1. package/DS1/0-face/calendar.ts +194 -0
  2. package/DS1/0-face/carousel.ts +623 -0
  3. package/DS1/0-face/component-visibility.ts +13 -0
  4. package/DS1/0-face/copy-text.ts +96 -0
  5. package/DS1/0-face/device.ts +8 -58
  6. package/DS1/0-face/dialog-swipe.ts +249 -0
  7. package/DS1/0-face/dialogs.ts +208 -0
  8. package/DS1/0-face/drawer.ts +258 -0
  9. package/DS1/0-face/feedback-words.ts +36 -0
  10. package/DS1/0-face/feedback.ts +40 -0
  11. package/DS1/0-face/format.ts +700 -0
  12. package/DS1/0-face/generated/toast-assets.ts +18 -0
  13. package/DS1/0-face/grid-fit.ts +1 -1
  14. package/DS1/0-face/grid.ts +3 -2
  15. package/DS1/0-face/header.ts +78 -0
  16. package/DS1/0-face/i18n.ts +93 -18
  17. package/DS1/0-face/keys.ts +276 -0
  18. package/DS1/0-face/languages.ts +4 -4
  19. package/DS1/0-face/layout-inspector.ts +6 -6
  20. package/DS1/0-face/library-styles.ts +33 -0
  21. package/DS1/0-face/load-toaster.ts +7 -0
  22. package/DS1/0-face/preference-options.ts +29 -0
  23. package/DS1/0-face/preferences.ts +3 -11
  24. package/DS1/0-face/pricing.ts +98 -43
  25. package/DS1/0-face/scaling.ts +160 -4
  26. package/DS1/0-face/shared-words.ts +9 -4
  27. package/DS1/0-face/sidebar.ts +201 -0
  28. package/DS1/0-face/theme-bootstrap.js +184 -0
  29. package/DS1/0-face/theme.ts +89 -47
  30. package/DS1/0-face/toast-queue.ts +157 -0
  31. package/DS1/0-face/toaster.ts +384 -0
  32. package/DS1/0-face/tooltips.ts +157 -15
  33. package/DS1/0-face/translations/da.json +60 -1
  34. package/DS1/0-face/translations/de.json +60 -1
  35. package/DS1/0-face/translations/en.json +60 -1
  36. package/DS1/0-face/translations/es.json +60 -1
  37. package/DS1/0-face/translations/fi.json +60 -1
  38. package/DS1/0-face/translations/fr.json +60 -1
  39. package/DS1/0-face/translations/is.json +60 -1
  40. package/DS1/0-face/translations/it.json +60 -1
  41. package/DS1/0-face/translations/ja.json +60 -1
  42. package/DS1/0-face/translations/ko.json +60 -1
  43. package/DS1/0-face/translations/nb.json +60 -1
  44. package/DS1/0-face/translations/pt-BR.json +60 -1
  45. package/DS1/0-face/translations/pt.json +60 -1
  46. package/DS1/0-face/translations/sv.json +60 -1
  47. package/DS1/0-face/translations/zh.json +60 -1
  48. package/DS1/0-face/translations-format.ts +3 -4
  49. package/DS1/1-root/card.css +192 -0
  50. package/DS1/1-root/carousel.css +136 -0
  51. package/DS1/1-root/cjk.css +23 -0
  52. package/DS1/1-root/component-metrics.css +1 -0
  53. package/DS1/1-root/component-tokens.css +51 -8
  54. package/DS1/1-root/controls.css +887 -14
  55. package/DS1/1-root/dialog-placement.css +191 -0
  56. package/DS1/1-root/document.css +183 -0
  57. package/DS1/1-root/drawer.css +83 -0
  58. package/DS1/1-root/empty.css +83 -0
  59. package/DS1/1-root/figures.css +141 -0
  60. package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
  61. package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
  62. package/DS1/1-root/fonts.css +69 -0
  63. package/DS1/1-root/footer.css +186 -0
  64. package/DS1/1-root/header.css +165 -0
  65. package/DS1/1-root/kbd.css +46 -0
  66. package/DS1/1-root/library-tokens.ts +91 -0
  67. package/DS1/1-root/measures.ts +53 -0
  68. package/DS1/1-root/notice.css +165 -0
  69. package/DS1/1-root/one.css +14 -84
  70. package/DS1/1-root/one.semantic.css +200 -148
  71. package/DS1/1-root/palette.css +58 -0
  72. package/DS1/1-root/palette.ts +19 -0
  73. package/DS1/1-root/progress.css +356 -0
  74. package/DS1/1-root/prose.css +202 -0
  75. package/DS1/1-root/row.css +297 -0
  76. package/DS1/1-root/table.css +111 -0
  77. package/DS1/1-root/text.css +70 -0
  78. package/DS1/2-core/button-split.ts +55 -0
  79. package/DS1/2-core/chart/chart.css +169 -0
  80. package/DS1/2-core/chart/grid-chart.ts +554 -0
  81. package/DS1/2-core/ds-avatar.ts +25 -6
  82. package/DS1/2-core/ds-badge.ts +10 -10
  83. package/DS1/2-core/ds-button.ts +111 -26
  84. package/DS1/2-core/ds-card.ts +135 -105
  85. package/DS1/2-core/ds-chart.ts +327 -0
  86. package/DS1/2-core/ds-composer.ts +8 -2
  87. package/DS1/2-core/ds-cycle.ts +97 -21
  88. package/DS1/2-core/ds-empty.ts +120 -0
  89. package/DS1/2-core/ds-icon.ts +11 -2
  90. package/DS1/2-core/ds-input.ts +165 -6
  91. package/DS1/2-core/ds-kbd.ts +78 -0
  92. package/DS1/2-core/ds-loading.ts +72 -0
  93. package/DS1/2-core/ds-notice.ts +180 -0
  94. package/DS1/2-core/ds-progress.ts +380 -0
  95. package/DS1/2-core/ds-spacing-handle.ts +22 -0
  96. package/DS1/2-core/ds-stat.ts +174 -0
  97. package/DS1/2-core/ds-switch.ts +1 -0
  98. package/DS1/2-core/ds-text.ts +15 -2
  99. package/DS1/2-core/ds-toast.ts +354 -0
  100. package/DS1/2-core/figures.ts +105 -0
  101. package/DS1/2-core/generated/ds-icon-map.ts +234 -128
  102. package/DS1/2-core/generated/icon-avatar.ts +2 -0
  103. package/DS1/2-core/generated/icons-extra.ts +118 -65
  104. package/DS1/2-core/generated/icons-immediate.ts +1 -1
  105. package/DS1/2-core/spacing-handle.ts +95 -0
  106. package/DS1/2-core/styles/ds-avatar.css +9 -8
  107. package/DS1/2-core/styles/ds-button-host.css +26 -3
  108. package/DS1/2-core/styles/ds-button-split.css +67 -0
  109. package/DS1/2-core/styles/ds-button.css +49 -15
  110. package/DS1/2-core/styles/ds-card.css +34 -0
  111. package/DS1/2-core/styles/ds-composer.css +13 -0
  112. package/DS1/2-core/styles/ds-cycle.css +69 -0
  113. package/DS1/2-core/styles/ds-empty.css +18 -0
  114. package/DS1/2-core/styles/ds-gap.css +1 -0
  115. package/DS1/2-core/styles/ds-icon.css +1 -0
  116. package/DS1/2-core/styles/ds-input.css +59 -6
  117. package/DS1/2-core/styles/ds-kbd.css +12 -0
  118. package/DS1/2-core/styles/ds-loading.css +13 -0
  119. package/DS1/2-core/styles/ds-notice.css +30 -0
  120. package/DS1/2-core/styles/ds-progress.css +25 -0
  121. package/DS1/2-core/styles/ds-select.css +2 -2
  122. package/DS1/2-core/styles/ds-spacing-handle.css +8 -0
  123. package/DS1/2-core/styles/ds-split.css +2 -62
  124. package/DS1/2-core/styles/ds-stat.css +34 -0
  125. package/DS1/2-core/styles/ds-switch.css +16 -1
  126. package/DS1/2-core/styles/ds-text.css +43 -12
  127. package/DS1/2-core/styles/ds-toast.css +182 -0
  128. package/DS1/2-core/styles/ds-tooltip.css +1 -0
  129. package/DS1/3-unit/calendar-base.ts +263 -0
  130. package/DS1/3-unit/ds-accordion.ts +9 -1
  131. package/DS1/3-unit/ds-avatar-group.ts +1 -0
  132. package/DS1/3-unit/ds-calendar-large.ts +349 -0
  133. package/DS1/3-unit/ds-calendar.ts +344 -0
  134. package/DS1/3-unit/ds-carousel.ts +368 -0
  135. package/DS1/3-unit/ds-date-picker.ts +540 -0
  136. package/DS1/3-unit/ds-form.ts +45 -37
  137. package/DS1/3-unit/ds-list.ts +48 -1
  138. package/DS1/3-unit/ds-matrix.ts +318 -0
  139. package/DS1/3-unit/ds-menu.ts +8 -4
  140. package/DS1/3-unit/ds-row.ts +84 -1
  141. package/DS1/3-unit/ds-sidebar.ts +280 -0
  142. package/DS1/3-unit/ds-table.ts +75 -34
  143. package/DS1/3-unit/styles/ds-accordion.css +1 -0
  144. package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
  145. package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
  146. package/DS1/3-unit/styles/ds-calendar.css +238 -0
  147. package/DS1/3-unit/styles/ds-carousel.css +30 -0
  148. package/DS1/3-unit/styles/ds-date-picker.css +124 -0
  149. package/DS1/3-unit/styles/ds-list.css +1 -0
  150. package/DS1/3-unit/styles/ds-matrix.css +203 -0
  151. package/DS1/3-unit/styles/ds-menu.css +31 -6
  152. package/DS1/3-unit/styles/ds-row.css +84 -2
  153. package/DS1/3-unit/styles/ds-sidebar.css +117 -0
  154. package/DS1/3-unit/styles/ds-table.css +3 -74
  155. package/DS1/4-page/ds-dialog.ts +40 -4
  156. package/DS1/4-page/ds-document.ts +240 -0
  157. package/DS1/4-page/ds-footer.ts +165 -0
  158. package/DS1/4-page/ds-grid.ts +39 -59
  159. package/DS1/4-page/ds-header.ts +171 -0
  160. package/DS1/4-page/ds-page.ts +184 -0
  161. package/DS1/4-page/email.ts +2 -3
  162. package/DS1/4-page/styles/ds-container.css +1 -0
  163. package/DS1/4-page/styles/ds-document.css +18 -0
  164. package/DS1/4-page/styles/ds-footer.css +29 -0
  165. package/DS1/4-page/styles/ds-grid.css +31 -85
  166. package/DS1/4-page/styles/ds-header.css +57 -0
  167. package/DS1/4-page/styles/ds-page.css +214 -0
  168. package/DS1/components.ts +7 -1
  169. package/DS1/index.ts +26 -6
  170. package/DS1/react/avatar.ts +4 -5
  171. package/DS1/react/button-split.ts +29 -0
  172. package/DS1/react/button.ts +32 -13
  173. package/DS1/react/carousel.ts +76 -0
  174. package/DS1/react/dialog.ts +36 -5
  175. package/DS1/react/document.ts +14 -0
  176. package/DS1/react/empty.ts +32 -0
  177. package/DS1/react/footer.ts +17 -0
  178. package/DS1/react/header.ts +15 -0
  179. package/DS1/react/input.ts +28 -17
  180. package/DS1/react/kbd.ts +21 -0
  181. package/DS1/react/loading.ts +18 -0
  182. package/DS1/react/notice.ts +59 -0
  183. package/DS1/react/page.ts +13 -0
  184. package/DS1/react/progress.ts +99 -0
  185. package/DS1/react/sidebar.ts +60 -0
  186. package/DS1/react/spacing-handle.ts +21 -0
  187. package/DS1/react/stat.ts +73 -0
  188. package/DS1/react/toast.ts +82 -0
  189. package/DS1/x-icon/Tabler-LICENSE.md +27 -0
  190. package/DS1/x-icon/airtable.svg +5 -0
  191. package/DS1/x-icon/attach.svg +3 -0
  192. package/DS1/x-icon/audio.svg +3 -0
  193. package/DS1/x-icon/bag-alt.svg +3 -0
  194. package/DS1/x-icon/bank.svg +3 -0
  195. package/DS1/x-icon/banknote.svg +3 -0
  196. package/DS1/x-icon/bolt.svg +3 -0
  197. package/DS1/x-icon/book-alt.svg +3 -0
  198. package/DS1/x-icon/book.svg +4 -0
  199. package/DS1/x-icon/box.svg +3 -0
  200. package/DS1/x-icon/briefcase.svg +3 -0
  201. package/DS1/x-icon/building.svg +4 -0
  202. package/DS1/x-icon/car.svg +3 -0
  203. package/DS1/x-icon/card.svg +3 -0
  204. package/DS1/x-icon/cart.svg +3 -0
  205. package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
  206. package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-right.svg} +1 -1
  207. package/DS1/x-icon/cloud.svg +3 -0
  208. package/DS1/x-icon/coffee.svg +3 -0
  209. package/DS1/x-icon/coins.svg +3 -0
  210. package/DS1/x-icon/cursor.svg +3 -0
  211. package/DS1/x-icon/curve.svg +7 -0
  212. package/DS1/x-icon/dislike.svg +4 -0
  213. package/DS1/x-icon/dot-bank.svg +3 -0
  214. package/DS1/x-icon/dot-banknote.svg +3 -0
  215. package/DS1/x-icon/dot-banknotes.svg +3 -0
  216. package/DS1/x-icon/dot-card.svg +3 -0
  217. package/DS1/x-icon/dot-coin.svg +3 -0
  218. package/DS1/x-icon/dot-coins.svg +3 -0
  219. package/DS1/x-icon/dot-receipt.svg +3 -0
  220. package/DS1/x-icon/dot-safe.svg +3 -0
  221. package/DS1/x-icon/dot-transfer.svg +3 -0
  222. package/DS1/x-icon/dot-wallet.svg +3 -0
  223. package/DS1/x-icon/download.svg +4 -0
  224. package/DS1/x-icon/drive.svg +5 -0
  225. package/DS1/x-icon/drop.svg +3 -0
  226. package/DS1/x-icon/dropbox.svg +3 -0
  227. package/DS1/x-icon/dumbbell.svg +3 -0
  228. package/DS1/x-icon/eye-off.svg +3 -0
  229. package/DS1/x-icon/eye.svg +3 -0
  230. package/DS1/x-icon/facebook.svg +3 -0
  231. package/DS1/x-icon/figma.svg +5 -0
  232. package/DS1/x-icon/flame.svg +3 -0
  233. package/DS1/x-icon/flip.svg +5 -0
  234. package/DS1/x-icon/food.svg +3 -0
  235. package/DS1/x-icon/fuel.svg +3 -0
  236. package/DS1/x-icon/game.svg +3 -0
  237. package/DS1/x-icon/gift.svg +3 -0
  238. package/DS1/x-icon/github.svg +3 -0
  239. package/DS1/x-icon/heart.svg +3 -0
  240. package/DS1/x-icon/history.svg +3 -0
  241. package/DS1/x-icon/home-alt.svg +3 -0
  242. package/DS1/x-icon/income.svg +3 -0
  243. package/DS1/x-icon/info.svg +5 -0
  244. package/DS1/x-icon/instagram.svg +5 -0
  245. package/DS1/x-icon/jpbank.svg +3 -0
  246. package/DS1/x-icon/key.svg +4 -0
  247. package/DS1/x-icon/keyboard.svg +3 -0
  248. package/DS1/x-icon/like.svg +4 -0
  249. package/DS1/x-icon/linkedin.svg +7 -0
  250. package/DS1/x-icon/loom.svg +6 -0
  251. package/DS1/x-icon/map.svg +4 -0
  252. package/DS1/x-icon/medical.svg +3 -0
  253. package/DS1/x-icon/{ezo-android-screen-lists.svg → minus.svg} +1 -1
  254. package/DS1/x-icon/moon.svg +3 -0
  255. package/DS1/x-icon/move.svg +3 -0
  256. package/DS1/x-icon/music-alt.svg +3 -0
  257. package/DS1/x-icon/music.svg +5 -0
  258. package/DS1/x-icon/notion.svg +6 -0
  259. package/DS1/x-icon/offline.svg +3 -0
  260. package/DS1/x-icon/pause.svg +4 -0
  261. package/DS1/x-icon/paw.svg +3 -0
  262. package/DS1/x-icon/pdf.svg +3 -0
  263. package/DS1/x-icon/people.svg +5 -0
  264. package/DS1/x-icon/percent.svg +3 -0
  265. package/DS1/x-icon/phone.svg +3 -0
  266. package/DS1/x-icon/pill.svg +3 -0
  267. package/DS1/x-icon/plane.svg +3 -0
  268. package/DS1/x-icon/postal.svg +3 -0
  269. package/DS1/x-icon/present.svg +4 -0
  270. package/DS1/x-icon/reaction.svg +5 -0
  271. package/DS1/x-icon/receipt.svg +3 -0
  272. package/DS1/x-icon/refresh.svg +3 -0
  273. package/DS1/x-icon/refund.svg +3 -0
  274. package/DS1/x-icon/repeat.svg +3 -0
  275. package/DS1/x-icon/rotate.svg +4 -0
  276. package/DS1/x-icon/safe.svg +3 -0
  277. package/DS1/x-icon/school-alt.svg +3 -0
  278. package/DS1/x-icon/shield-alt.svg +3 -0
  279. package/DS1/x-icon/shield.svg +4 -0
  280. package/DS1/x-icon/shirt.svg +3 -0
  281. package/DS1/x-icon/shop.svg +3 -0
  282. package/DS1/x-icon/sign-in.svg +3 -0
  283. package/DS1/x-icon/sign-out.svg +3 -0
  284. package/DS1/x-icon/slack.svg +6 -0
  285. package/DS1/x-icon/sparkle.svg +3 -0
  286. package/DS1/x-icon/start.svg +4 -0
  287. package/DS1/x-icon/{ezo-item-button-reopen.svg → stop.svg} +1 -1
  288. package/DS1/x-icon/sun.svg +3 -0
  289. package/DS1/x-icon/system.svg +4 -0
  290. package/DS1/x-icon/tag.svg +3 -0
  291. package/DS1/x-icon/ticket.svg +3 -0
  292. package/DS1/x-icon/title-struck.svg +4 -0
  293. package/DS1/x-icon/train.svg +3 -0
  294. package/DS1/x-icon/transfer.svg +3 -0
  295. package/DS1/x-icon/tv.svg +3 -0
  296. package/DS1/x-icon/upload.svg +4 -0
  297. package/DS1/x-icon/video.svg +4 -0
  298. package/DS1/x-icon/vimeo.svg +3 -0
  299. package/DS1/x-icon/wallet.svg +3 -0
  300. package/DS1/x-icon/wifi.svg +3 -0
  301. package/DS1/x-icon/window.svg +4 -0
  302. package/DS1/x-icon/wrench.svg +3 -0
  303. package/DS1/x-icon/x-brand.svg +4 -0
  304. package/DS1/x-icon/youtube.svg +4 -0
  305. package/README.md +3 -3
  306. package/dist/0-face/calendar.d.ts +75 -0
  307. package/dist/0-face/calendar.d.ts.map +1 -0
  308. package/dist/0-face/calendar.js +149 -0
  309. package/dist/0-face/carousel.d.ts +174 -0
  310. package/dist/0-face/carousel.d.ts.map +1 -0
  311. package/dist/0-face/carousel.js +583 -0
  312. package/dist/0-face/component-visibility.d.ts +7 -0
  313. package/dist/0-face/component-visibility.d.ts.map +1 -0
  314. package/dist/0-face/component-visibility.js +10 -0
  315. package/dist/0-face/copy-text.d.ts +11 -0
  316. package/dist/0-face/copy-text.d.ts.map +1 -0
  317. package/dist/0-face/copy-text.js +97 -0
  318. package/dist/0-face/device.d.ts +3 -7
  319. package/dist/0-face/device.d.ts.map +1 -1
  320. package/dist/0-face/device.js +7 -41
  321. package/dist/0-face/dialog-swipe.d.ts +49 -0
  322. package/dist/0-face/dialog-swipe.d.ts.map +1 -0
  323. package/dist/0-face/dialog-swipe.js +239 -0
  324. package/dist/0-face/dialogs.d.ts +33 -0
  325. package/dist/0-face/dialogs.d.ts.map +1 -0
  326. package/dist/0-face/dialogs.js +173 -0
  327. package/dist/0-face/drawer.d.ts +64 -0
  328. package/dist/0-face/drawer.d.ts.map +1 -0
  329. package/dist/0-face/drawer.js +256 -0
  330. package/dist/0-face/feedback-words.d.ts +21 -0
  331. package/dist/0-face/feedback-words.d.ts.map +1 -0
  332. package/dist/0-face/feedback-words.js +30 -0
  333. package/dist/0-face/feedback.d.ts +41 -0
  334. package/dist/0-face/feedback.d.ts.map +1 -0
  335. package/dist/0-face/feedback.js +35 -0
  336. package/dist/0-face/format.d.ts +166 -0
  337. package/dist/0-face/format.d.ts.map +1 -0
  338. package/dist/0-face/format.js +445 -0
  339. package/dist/0-face/generated/toast-assets.d.ts +11 -0
  340. package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
  341. package/dist/0-face/generated/toast-assets.js +14 -0
  342. package/dist/0-face/grid-fit.js +1 -1
  343. package/dist/0-face/grid.d.ts.map +1 -1
  344. package/dist/0-face/grid.js +2 -1
  345. package/dist/0-face/header.d.ts +38 -0
  346. package/dist/0-face/header.d.ts.map +1 -0
  347. package/dist/0-face/header.js +80 -0
  348. package/dist/0-face/i18n.d.ts +32 -2
  349. package/dist/0-face/i18n.d.ts.map +1 -1
  350. package/dist/0-face/i18n.js +65 -19
  351. package/dist/0-face/keys.d.ts +104 -0
  352. package/dist/0-face/keys.d.ts.map +1 -0
  353. package/dist/0-face/keys.js +253 -0
  354. package/dist/0-face/languages.d.ts +2 -2
  355. package/dist/0-face/languages.js +3 -3
  356. package/dist/0-face/layout-inspector.js +6 -6
  357. package/dist/0-face/library-styles.d.ts +7 -0
  358. package/dist/0-face/library-styles.d.ts.map +1 -0
  359. package/dist/0-face/library-styles.js +29 -0
  360. package/dist/0-face/load-toaster.d.ts +8 -0
  361. package/dist/0-face/load-toaster.d.ts.map +1 -0
  362. package/dist/0-face/load-toaster.js +7 -0
  363. package/dist/0-face/preference-options.d.ts +34 -0
  364. package/dist/0-face/preference-options.d.ts.map +1 -0
  365. package/dist/0-face/preference-options.js +1 -0
  366. package/dist/0-face/preferences.d.ts +3 -12
  367. package/dist/0-face/preferences.d.ts.map +1 -1
  368. package/dist/0-face/pricing.d.ts +19 -9
  369. package/dist/0-face/pricing.d.ts.map +1 -1
  370. package/dist/0-face/pricing.js +81 -40
  371. package/dist/0-face/scaling.d.ts +71 -1
  372. package/dist/0-face/scaling.d.ts.map +1 -1
  373. package/dist/0-face/scaling.js +108 -3
  374. package/dist/0-face/shared-words.d.ts +9 -4
  375. package/dist/0-face/shared-words.d.ts.map +1 -1
  376. package/dist/0-face/sidebar.d.ts +69 -0
  377. package/dist/0-face/sidebar.d.ts.map +1 -0
  378. package/dist/0-face/sidebar.js +191 -0
  379. package/dist/0-face/theme-bootstrap.d.ts +1 -0
  380. package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
  381. package/dist/0-face/theme-bootstrap.js +214 -0
  382. package/dist/0-face/theme.d.ts +32 -0
  383. package/dist/0-face/theme.d.ts.map +1 -1
  384. package/dist/0-face/theme.js +69 -43
  385. package/dist/0-face/toast-queue.d.ts +110 -0
  386. package/dist/0-face/toast-queue.d.ts.map +1 -0
  387. package/dist/0-face/toast-queue.js +98 -0
  388. package/dist/0-face/toaster.d.ts +27 -0
  389. package/dist/0-face/toaster.d.ts.map +1 -0
  390. package/dist/0-face/toaster.js +373 -0
  391. package/dist/0-face/tooltips.d.ts +24 -1
  392. package/dist/0-face/tooltips.d.ts.map +1 -1
  393. package/dist/0-face/tooltips.js +155 -16
  394. package/dist/0-face/translations/da.json +60 -1
  395. package/dist/0-face/translations/de.json +60 -1
  396. package/dist/0-face/translations/en.json +60 -1
  397. package/dist/0-face/translations/es.json +60 -1
  398. package/dist/0-face/translations/fi.json +60 -1
  399. package/dist/0-face/translations/fr.json +60 -1
  400. package/dist/0-face/translations/is.json +60 -1
  401. package/dist/0-face/translations/it.json +60 -1
  402. package/dist/0-face/translations/ja.json +60 -1
  403. package/dist/0-face/translations/ko.json +60 -1
  404. package/dist/0-face/translations/nb.json +60 -1
  405. package/dist/0-face/translations/pt-BR.json +60 -1
  406. package/dist/0-face/translations/pt.json +60 -1
  407. package/dist/0-face/translations/sv.json +60 -1
  408. package/dist/0-face/translations/zh.json +60 -1
  409. package/dist/0-face/translations-format.d.ts.map +1 -1
  410. package/dist/0-face/translations-format.js +3 -4
  411. package/dist/0-face/tree.d.ts +69 -0
  412. package/dist/0-face/tree.d.ts.map +1 -0
  413. package/dist/0-face/tree.js +191 -0
  414. package/dist/1-root/library-tokens.d.ts +31 -0
  415. package/dist/1-root/library-tokens.d.ts.map +1 -0
  416. package/dist/1-root/library-tokens.js +84 -0
  417. package/dist/1-root/measures.d.ts +52 -0
  418. package/dist/1-root/measures.d.ts.map +1 -0
  419. package/dist/1-root/measures.js +49 -0
  420. package/dist/1-root/palette.d.ts +5 -0
  421. package/dist/1-root/palette.d.ts.map +1 -1
  422. package/dist/1-root/palette.js +18 -0
  423. package/dist/2-core/button-split.d.ts +21 -0
  424. package/dist/2-core/button-split.d.ts.map +1 -0
  425. package/dist/2-core/button-split.js +48 -0
  426. package/dist/2-core/chart/grid-chart.d.ts +113 -0
  427. package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
  428. package/dist/2-core/chart/grid-chart.js +466 -0
  429. package/dist/2-core/ds-avatar.d.ts +20 -3
  430. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  431. package/dist/2-core/ds-avatar.js +19 -5
  432. package/dist/2-core/ds-badge.js +10 -13
  433. package/dist/2-core/ds-banner.d.ts +23 -7
  434. package/dist/2-core/ds-banner.d.ts.map +1 -1
  435. package/dist/2-core/ds-banner.js +48 -12
  436. package/dist/2-core/ds-button.d.ts +76 -0
  437. package/dist/2-core/ds-button.d.ts.map +1 -1
  438. package/dist/2-core/ds-button.js +101 -26
  439. package/dist/2-core/ds-card.d.ts +76 -11
  440. package/dist/2-core/ds-card.d.ts.map +1 -1
  441. package/dist/2-core/ds-card.js +129 -105
  442. package/dist/2-core/ds-chart.d.ts +105 -0
  443. package/dist/2-core/ds-chart.d.ts.map +1 -0
  444. package/dist/2-core/ds-chart.js +390 -0
  445. package/dist/2-core/ds-composer.d.ts +7 -0
  446. package/dist/2-core/ds-composer.d.ts.map +1 -1
  447. package/dist/2-core/ds-composer.js +1 -1
  448. package/dist/2-core/ds-cycle.d.ts +36 -2
  449. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  450. package/dist/2-core/ds-cycle.js +95 -18
  451. package/dist/2-core/ds-empty.d.ts +74 -0
  452. package/dist/2-core/ds-empty.d.ts.map +1 -0
  453. package/dist/2-core/ds-empty.js +96 -0
  454. package/dist/2-core/ds-icon.d.ts +6 -0
  455. package/dist/2-core/ds-icon.d.ts.map +1 -1
  456. package/dist/2-core/ds-icon.js +12 -2
  457. package/dist/2-core/ds-input.d.ts +39 -1
  458. package/dist/2-core/ds-input.d.ts.map +1 -1
  459. package/dist/2-core/ds-input.js +150 -6
  460. package/dist/2-core/ds-kbd.d.ts +48 -0
  461. package/dist/2-core/ds-kbd.d.ts.map +1 -0
  462. package/dist/2-core/ds-kbd.js +65 -0
  463. package/dist/2-core/ds-language.d.ts +8 -1
  464. package/dist/2-core/ds-language.d.ts.map +1 -1
  465. package/dist/2-core/ds-language.js +2 -2
  466. package/dist/2-core/ds-loading.d.ts +40 -0
  467. package/dist/2-core/ds-loading.d.ts.map +1 -0
  468. package/dist/2-core/ds-loading.js +63 -0
  469. package/dist/2-core/ds-meter.d.ts +103 -0
  470. package/dist/2-core/ds-meter.d.ts.map +1 -0
  471. package/dist/2-core/ds-meter.js +124 -0
  472. package/dist/2-core/ds-notice.d.ts +103 -0
  473. package/dist/2-core/ds-notice.d.ts.map +1 -0
  474. package/dist/2-core/ds-notice.js +152 -0
  475. package/dist/2-core/ds-pagedots.d.ts +64 -7
  476. package/dist/2-core/ds-pagedots.d.ts.map +1 -1
  477. package/dist/2-core/ds-pagedots.js +124 -18
  478. package/dist/2-core/ds-progress.d.ts +200 -0
  479. package/dist/2-core/ds-progress.d.ts.map +1 -0
  480. package/dist/2-core/ds-progress.js +319 -0
  481. package/dist/2-core/ds-spacing-handle.d.ts +25 -0
  482. package/dist/2-core/ds-spacing-handle.d.ts.map +1 -0
  483. package/dist/2-core/ds-spacing-handle.js +25 -0
  484. package/dist/2-core/ds-split.d.ts +4 -67
  485. package/dist/2-core/ds-split.d.ts.map +1 -1
  486. package/dist/2-core/ds-split.js +4 -98
  487. package/dist/2-core/ds-stat.d.ts +126 -0
  488. package/dist/2-core/ds-stat.d.ts.map +1 -0
  489. package/dist/2-core/ds-stat.js +137 -0
  490. package/dist/2-core/ds-steps.d.ts +72 -0
  491. package/dist/2-core/ds-steps.d.ts.map +1 -0
  492. package/dist/2-core/ds-steps.js +114 -0
  493. package/dist/2-core/ds-switch.d.ts +1 -0
  494. package/dist/2-core/ds-switch.d.ts.map +1 -1
  495. package/dist/2-core/ds-switch.js +1 -0
  496. package/dist/2-core/ds-text.d.ts +15 -2
  497. package/dist/2-core/ds-text.d.ts.map +1 -1
  498. package/dist/2-core/ds-text.js +13 -0
  499. package/dist/2-core/ds-textarea.d.ts.map +1 -1
  500. package/dist/2-core/ds-textarea.js +1 -0
  501. package/dist/2-core/ds-toast.d.ts +139 -0
  502. package/dist/2-core/ds-toast.d.ts.map +1 -0
  503. package/dist/2-core/ds-toast.js +329 -0
  504. package/dist/2-core/ds-toggle.d.ts +11 -0
  505. package/dist/2-core/ds-toggle.d.ts.map +1 -0
  506. package/dist/2-core/ds-toggle.js +10 -0
  507. package/dist/2-core/figures.d.ts +56 -0
  508. package/dist/2-core/figures.d.ts.map +1 -0
  509. package/dist/2-core/figures.js +70 -0
  510. package/dist/2-core/generated/ds-icon-map.d.ts +118 -65
  511. package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
  512. package/dist/2-core/generated/ds-icon-map.js +234 -128
  513. package/dist/2-core/generated/icon-avatar.d.ts +2 -0
  514. package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
  515. package/dist/2-core/generated/icon-avatar.js +2 -0
  516. package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
  517. package/dist/2-core/generated/icons-extra.js +118 -65
  518. package/dist/2-core/generated/icons-immediate.d.ts +1 -1
  519. package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
  520. package/dist/2-core/generated/icons-immediate.js +1 -1
  521. package/dist/2-core/spacing-handle.d.ts +28 -0
  522. package/dist/2-core/spacing-handle.d.ts.map +1 -0
  523. package/dist/2-core/spacing-handle.js +146 -0
  524. package/dist/3-unit/calendar-base.d.ts +149 -0
  525. package/dist/3-unit/calendar-base.d.ts.map +1 -0
  526. package/dist/3-unit/calendar-base.js +172 -0
  527. package/dist/3-unit/ds-accordion.d.ts +9 -0
  528. package/dist/3-unit/ds-accordion.d.ts.map +1 -1
  529. package/dist/3-unit/ds-accordion.js +7 -1
  530. package/dist/3-unit/ds-avatar-group.d.ts +1 -0
  531. package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
  532. package/dist/3-unit/ds-calendar-large.d.ts +138 -0
  533. package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
  534. package/dist/3-unit/ds-calendar-large.js +305 -0
  535. package/dist/3-unit/ds-calendar.d.ts +175 -0
  536. package/dist/3-unit/ds-calendar.d.ts.map +1 -0
  537. package/dist/3-unit/ds-calendar.js +303 -0
  538. package/dist/3-unit/ds-carousel.d.ts +182 -0
  539. package/dist/3-unit/ds-carousel.d.ts.map +1 -0
  540. package/dist/3-unit/ds-carousel.js +327 -0
  541. package/dist/3-unit/ds-date-picker.d.ts +203 -0
  542. package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
  543. package/dist/3-unit/ds-date-picker.js +499 -0
  544. package/dist/3-unit/ds-form.d.ts.map +1 -1
  545. package/dist/3-unit/ds-form.js +38 -28
  546. package/dist/3-unit/ds-list.d.ts +12 -0
  547. package/dist/3-unit/ds-list.d.ts.map +1 -1
  548. package/dist/3-unit/ds-list.js +52 -1
  549. package/dist/3-unit/ds-matrix.d.ts +146 -0
  550. package/dist/3-unit/ds-matrix.d.ts.map +1 -0
  551. package/dist/3-unit/ds-matrix.js +248 -0
  552. package/dist/3-unit/ds-menu.d.ts +1 -1
  553. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  554. package/dist/3-unit/ds-menu.js +7 -4
  555. package/dist/3-unit/ds-row.d.ts +66 -0
  556. package/dist/3-unit/ds-row.d.ts.map +1 -1
  557. package/dist/3-unit/ds-row.js +80 -1
  558. package/dist/3-unit/ds-sidebar.d.ts +108 -0
  559. package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
  560. package/dist/3-unit/ds-sidebar.js +268 -0
  561. package/dist/3-unit/ds-table.d.ts +28 -10
  562. package/dist/3-unit/ds-table.d.ts.map +1 -1
  563. package/dist/3-unit/ds-table.js +53 -25
  564. package/dist/3-unit/ds-tree.d.ts +69 -0
  565. package/dist/3-unit/ds-tree.d.ts.map +1 -0
  566. package/dist/3-unit/ds-tree.js +136 -0
  567. package/dist/4-page/ds-dialog.d.ts +16 -1
  568. package/dist/4-page/ds-dialog.d.ts.map +1 -1
  569. package/dist/4-page/ds-dialog.js +39 -3
  570. package/dist/4-page/ds-document.d.ts +98 -0
  571. package/dist/4-page/ds-document.d.ts.map +1 -0
  572. package/dist/4-page/ds-document.js +213 -0
  573. package/dist/4-page/ds-footer.d.ts +100 -0
  574. package/dist/4-page/ds-footer.d.ts.map +1 -0
  575. package/dist/4-page/ds-footer.js +119 -0
  576. package/dist/4-page/ds-grid.d.ts +32 -12
  577. package/dist/4-page/ds-grid.d.ts.map +1 -1
  578. package/dist/4-page/ds-grid.js +30 -39
  579. package/dist/4-page/ds-header.d.ts +84 -0
  580. package/dist/4-page/ds-header.d.ts.map +1 -0
  581. package/dist/4-page/ds-header.js +143 -0
  582. package/dist/4-page/ds-layout.d.ts +1 -0
  583. package/dist/4-page/ds-layout.d.ts.map +1 -1
  584. package/dist/4-page/ds-layout.js +1 -1
  585. package/dist/4-page/ds-page.d.ts +110 -0
  586. package/dist/4-page/ds-page.d.ts.map +1 -0
  587. package/dist/4-page/ds-page.js +155 -0
  588. package/dist/4-page/email.d.ts +2 -3
  589. package/dist/4-page/email.d.ts.map +1 -1
  590. package/dist/4-page/email.js +2 -3
  591. package/dist/components.d.ts +4 -1
  592. package/dist/components.d.ts.map +1 -1
  593. package/dist/components.js +4 -1
  594. package/dist/design-system-1.bundle.js +11304 -4322
  595. package/dist/design-system-1.bundle.js.map +1 -1
  596. package/dist/design-system-1.bundle.min.js +8867 -4132
  597. package/dist/design-system-1.bundle.min.js.map +1 -1
  598. package/dist/design-system-1.css +1 -1
  599. package/dist/feedback.js +541 -0
  600. package/dist/feedback.js.map +1 -0
  601. package/dist/icons-extra-B4Iotc7s.js +298 -0
  602. package/dist/icons-extra-B4Iotc7s.js.map +1 -0
  603. package/dist/icons-extra-C4sCgoUj.js +185 -0
  604. package/dist/icons-extra-C4sCgoUj.js.map +1 -0
  605. package/dist/icons-extra-DSav6uTU.js +300 -0
  606. package/dist/icons-extra-DSav6uTU.js.map +1 -0
  607. package/dist/icons-extra-Dc_yVWIz.js +1024 -0
  608. package/dist/icons-extra-Dc_yVWIz.js.map +1 -0
  609. package/dist/icons-extra-cfzoudMf.js +1030 -0
  610. package/dist/icons-extra-cfzoudMf.js.map +1 -0
  611. package/dist/icons-extra-g_xpwZhZ.js +631 -0
  612. package/dist/icons-extra-g_xpwZhZ.js.map +1 -0
  613. package/dist/index.d.ts +23 -6
  614. package/dist/index.d.ts.map +1 -1
  615. package/dist/index.js +23 -6
  616. package/dist/react/avatar.d.ts +5 -9
  617. package/dist/react/avatar.d.ts.map +1 -1
  618. package/dist/react/avatar.js +2 -2
  619. package/dist/react/button-split.d.ts +19 -0
  620. package/dist/react/button-split.d.ts.map +1 -0
  621. package/dist/react/button-split.js +35 -0
  622. package/dist/react/button.d.ts +18 -7
  623. package/dist/react/button.d.ts.map +1 -1
  624. package/dist/react/button.js +13 -4
  625. package/dist/react/carousel.d.ts +63 -0
  626. package/dist/react/carousel.d.ts.map +1 -0
  627. package/dist/react/carousel.js +47 -0
  628. package/dist/react/choice.d.ts +1 -1
  629. package/dist/react/context-menu.d.ts +337 -337
  630. package/dist/react/dialog.d.ts +684 -678
  631. package/dist/react/dialog.d.ts.map +1 -1
  632. package/dist/react/dialog.js +29 -3
  633. package/dist/react/document.d.ts +11 -0
  634. package/dist/react/document.d.ts.map +1 -0
  635. package/dist/react/document.js +10 -0
  636. package/dist/react/empty.d.ts +34 -0
  637. package/dist/react/empty.d.ts.map +1 -0
  638. package/dist/react/empty.js +8 -0
  639. package/dist/react/file-picker.d.ts +1 -1
  640. package/dist/react/footer.d.ts +13 -0
  641. package/dist/react/footer.d.ts.map +1 -0
  642. package/dist/react/footer.js +12 -0
  643. package/dist/react/header.d.ts +12 -0
  644. package/dist/react/header.d.ts.map +1 -0
  645. package/dist/react/header.js +11 -0
  646. package/dist/react/input.d.ts +31 -9
  647. package/dist/react/input.d.ts.map +1 -1
  648. package/dist/react/input.js +94 -94
  649. package/dist/react/kbd.d.ts +26 -0
  650. package/dist/react/kbd.d.ts.map +1 -0
  651. package/dist/react/kbd.js +8 -0
  652. package/dist/react/loading.d.ts +14 -0
  653. package/dist/react/loading.d.ts.map +1 -0
  654. package/dist/react/loading.js +14 -0
  655. package/dist/react/meter.d.ts +64 -0
  656. package/dist/react/meter.d.ts.map +1 -0
  657. package/dist/react/meter.js +15 -0
  658. package/dist/react/notice.d.ts +45 -0
  659. package/dist/react/notice.d.ts.map +1 -0
  660. package/dist/react/notice.js +34 -0
  661. package/dist/react/page.d.ts +10 -0
  662. package/dist/react/page.d.ts.map +1 -0
  663. package/dist/react/page.js +9 -0
  664. package/dist/react/progress.d.ts +107 -0
  665. package/dist/react/progress.d.ts.map +1 -0
  666. package/dist/react/progress.js +47 -0
  667. package/dist/react/sidebar.d.ts +44 -0
  668. package/dist/react/sidebar.d.ts.map +1 -0
  669. package/dist/react/sidebar.js +41 -0
  670. package/dist/react/spacing-handle.d.ts +13 -0
  671. package/dist/react/spacing-handle.d.ts.map +1 -0
  672. package/dist/react/spacing-handle.js +18 -0
  673. package/dist/react/split.d.ts +6 -14
  674. package/dist/react/split.d.ts.map +1 -1
  675. package/dist/react/split.js +5 -31
  676. package/dist/react/stat.d.ts +78 -0
  677. package/dist/react/stat.d.ts.map +1 -0
  678. package/dist/react/stat.js +25 -0
  679. package/dist/react/steps.d.ts +36 -0
  680. package/dist/react/steps.d.ts.map +1 -0
  681. package/dist/react/steps.js +10 -0
  682. package/dist/react/toast.d.ts +37 -0
  683. package/dist/react/toast.d.ts.map +1 -0
  684. package/dist/react/toast.js +55 -0
  685. package/dist/react/tree.d.ts +31 -0
  686. package/dist/react/tree.d.ts.map +1 -0
  687. package/dist/react/tree.js +37 -0
  688. package/dist/shared-words-BfnT24Fe.js +1635 -0
  689. package/dist/shared-words-BfnT24Fe.js.map +1 -0
  690. package/dist/shared-words-CyZYc_De.js +1818 -0
  691. package/dist/shared-words-CyZYc_De.js.map +1 -0
  692. package/dist/shared-words-DAVSET4Z.js +1800 -0
  693. package/dist/shared-words-DAVSET4Z.js.map +1 -0
  694. package/dist/shared-words-UCvnkctb.js +1653 -0
  695. package/dist/shared-words-UCvnkctb.js.map +1 -0
  696. package/package.json +16 -5
  697. package/DS1/2-core/ds-banner.ts +0 -122
  698. package/DS1/2-core/ds-date.ts +0 -24
  699. package/DS1/2-core/ds-language.ts +0 -94
  700. package/DS1/2-core/ds-pagedots.ts +0 -52
  701. package/DS1/2-core/ds-split.ts +0 -122
  702. package/DS1/2-core/ds-textarea.ts +0 -136
  703. package/DS1/2-core/styles/ds-banner.css +0 -77
  704. package/DS1/2-core/styles/ds-date.css +0 -9
  705. package/DS1/2-core/styles/ds-language.css +0 -78
  706. package/DS1/2-core/styles/ds-pagedots.css +0 -31
  707. package/DS1/2-core/styles/ds-textarea.css +0 -27
  708. package/DS1/4-page/ds-layout.ts +0 -949
  709. package/DS1/4-page/styles/ds-layout.css +0 -246
  710. package/DS1/react/split.ts +0 -42
  711. package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
  712. package/DS1/x-icon/ezo-account-close.svg +0 -1
  713. package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
  714. package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
  715. package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
  716. package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
  717. package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
  718. package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
  719. package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
  720. package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
  721. package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
  722. package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
  723. package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
  724. package/DS1/x-icon/ezo-block-accordion.svg +0 -1
  725. package/DS1/x-icon/ezo-block-divider.svg +0 -1
  726. package/DS1/x-icon/ezo-block-group.svg +0 -1
  727. package/DS1/x-icon/ezo-block-image.svg +0 -1
  728. package/DS1/x-icon/ezo-block-section.svg +0 -1
  729. package/DS1/x-icon/ezo-block-table.svg +0 -1
  730. package/DS1/x-icon/ezo-code.svg +0 -14
  731. package/DS1/x-icon/ezo-down.svg +0 -3
  732. package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
  733. package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
  734. package/DS1/x-icon/ezo-item-button-header.svg +0 -3
  735. package/DS1/x-icon/ezo-item-button-open.svg +0 -3
  736. package/DS1/x-icon/ezo-item-button-star.svg +0 -3
  737. package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
  738. package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
  739. package/DS1/x-icon/ezo-item-star.svg +0 -5
  740. package/DS1/x-icon/ezo-left.svg +0 -3
  741. package/DS1/x-icon/ezo-logo.svg +0 -1
  742. package/DS1/x-icon/ezo-mic.svg +0 -8
  743. package/DS1/x-icon/ezo-move-column.svg +0 -14
  744. package/DS1/x-icon/ezo-move-row.svg +0 -18
  745. package/DS1/x-icon/ezo-navigation-check.svg +0 -1
  746. package/DS1/x-icon/ezo-note-back.svg +0 -5
  747. package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
  748. package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
  749. package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
  750. package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
  751. package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
  752. package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
  753. package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
  754. package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
  755. package/DS1/x-icon/ezo-note-more.svg +0 -7
  756. package/DS1/x-icon/ezo-note-star.svg +0 -5
  757. package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
  758. package/DS1/x-icon/ezo-play.svg +0 -5
  759. package/DS1/x-icon/ezo-premium-star.svg +0 -5
  760. package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
  761. package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
  762. package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
  763. package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
  764. package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
  765. package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
  766. package/DS1/x-icon/ezo-setting-blank.svg +0 -5
  767. package/DS1/x-icon/ezo-store-chevron.svg +0 -1
  768. package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
  769. package/DS1/x-icon/product-sources.json +0 -2557
  770. /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
  771. /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
@@ -0,0 +1,76 @@
1
+ /** A carousel in React: the slides stay in the light DOM, so they render on
2
+ * the server and read in tests; ds-carousel snaps them, draws the dots and
3
+ * buttons and announces the slide in view. The region and its name are in the
4
+ * markup from the first render. Browser-only registration of ds-carousel stays
5
+ * in the product's runtime entry. */
6
+ import { createElement as h, forwardRef, useEffect, useLayoutEffect, useRef, type HTMLAttributes, type ReactNode } from "react";
7
+ import type { Carousel as CarouselElement, CarouselChangeDetail } from "../3-unit/ds-carousel";
8
+
9
+ export type { CarouselChangeDetail } from "../3-unit/ds-carousel";
10
+ export type CarouselProps = Omit<HTMLAttributes<CarouselElement>, "onChange"> & {
11
+ /** The region's name: what the slides show. */
12
+ label: string;
13
+ /** The slide in view, from 0. Changing it scrolls there. */
14
+ current?: number;
15
+ /** Show previous and next buttons beside the dots. */
16
+ buttons?: boolean;
17
+ /** Show the dots; on by default. */
18
+ dots?: boolean;
19
+ /** Draw the last dot as an end marker. */
20
+ end?: boolean;
21
+ /** Each slide's width in whole squares; the carousel's own width when not set; `"auto"` for slides of their own width, a strip. */
22
+ slideWidth?: number | "auto";
23
+ /** Squares between slides; one by default. */
24
+ gap?: number;
25
+ /** A strip's bleed: `end` runs it on to the window's end edge, `both` to both edges. */
26
+ bleed?: "none" | "end" | "both";
27
+ /** Hold the slides three times over, so the strip has no end; draws no dots. */
28
+ loop?: boolean;
29
+ /** Move on by itself: `true` for every five seconds, or milliseconds. Always with a pause button. */
30
+ autoplay?: boolean | number;
31
+ /** Slide freely, without stopping at slides. */
32
+ free?: boolean;
33
+ /** A person moved to another slide. */
34
+ onChange?: (index: number, previous: number) => void;
35
+ children?: ReactNode;
36
+ };
37
+
38
+ const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
39
+
40
+ export const Carousel = forwardRef<CarouselElement, CarouselProps>(function Carousel(
41
+ { label, current, buttons, dots = true, end, slideWidth, gap, bleed, loop, autoplay, free, onChange, children, ...props }, ref,
42
+ ) {
43
+ const host = useRef<CarouselElement | null>(null);
44
+ useCommitEffect(() => {
45
+ const element = host.current;
46
+ if (!element || !onChange) return;
47
+ const change = (event: Event) => {
48
+ if (event.target !== element) return;
49
+ const { index, previous } = (event as CustomEvent<CarouselChangeDetail>).detail;
50
+ onChange(index, previous);
51
+ };
52
+ element.addEventListener("change", change);
53
+ return () => element.removeEventListener("change", change);
54
+ });
55
+ return h("ds-carousel", {
56
+ role: "region",
57
+ "aria-label": label,
58
+ ...props,
59
+ label,
60
+ literal: true,
61
+ current,
62
+ buttons: buttons || undefined,
63
+ "no-dots": dots ? undefined : true,
64
+ end: end || undefined,
65
+ "slide-width": slideWidth,
66
+ gap,
67
+ bleed: bleed && bleed !== "none" ? bleed : undefined,
68
+ loop: loop || undefined,
69
+ autoplay: autoplay === true ? "" : typeof autoplay === "number" ? String(autoplay) : undefined,
70
+ free: free || undefined,
71
+ ref: (element: CarouselElement | null) => {
72
+ host.current = element;
73
+ if (typeof ref === "function") ref(element); else if (ref) ref.current = element;
74
+ },
75
+ }, children);
76
+ });
@@ -1,7 +1,7 @@
1
1
  /** Optional React composition; behavior and appearance belong to ds-dialog. */
2
- import { createContext, createElement, useContext, useId, useLayoutEffect, useRef, useState, type HTMLAttributes, type ReactNode, type Ref } from "react";
2
+ import { createContext, createElement, useContext, useEffect, useId, useLayoutEffect, useRef, useState, type HTMLAttributes, type ReactNode, type Ref } from "react";
3
3
  import { createPortal } from "react-dom";
4
- import type { Dialog as DialogElement, DialogCloseReason } from "../4-page/ds-dialog";
4
+ import type { Dialog as DialogElement, DialogCloseReason, DialogPlacement } from "../4-page/ds-dialog";
5
5
 
6
6
  const DialogContext = createContext<{ open: boolean; change: (open: boolean, reason?: DialogCloseReason) => void; title: string; description: string } | null>(null);
7
7
  const useDialog = () => {
@@ -10,7 +10,7 @@ const useDialog = () => {
10
10
  return context;
11
11
  };
12
12
 
13
- export interface DialogProps { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean, reason?: DialogCloseReason) => void; children: ReactNode }
13
+ export interface DialogProps { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean, reason?: DialogCloseReason) => void; children?: ReactNode }
14
14
  export function Dialog({ open, defaultOpen = false, onOpenChange, children }: DialogProps) {
15
15
  const [internal, setInternal] = useState(defaultOpen);
16
16
  const id = useId();
@@ -40,11 +40,41 @@ export interface DialogContentProps extends HTMLAttributes<HTMLDialogElement> {
40
40
  flush?: boolean;
41
41
  /** Rotate a document frame while keeping it within the viewport. */
42
42
  rotated?: boolean;
43
+ /**
44
+ * Where it stands: `"center"` (the default), a `"sheet"` from the bottom, or
45
+ * a drawer at the `"end"` or `"start"`. These slide out before they leave
46
+ * the page, and a finger swipes them away (reason `"swipe"`).
47
+ */
48
+ placement?: DialogPlacement;
43
49
  }
44
- export function DialogContent({ children, portal = true, nonModal = false, closeOnOutside = false, blockOutside = false, holdScroll = false, anchor = null, returnFocus = null, closeLabel = "Close", showClose = true, closeOnEscape = true, closeOnBackdrop = true, fullScreen = false, flush = false, rotated = false, ...props }: DialogContentProps) {
50
+
51
+ /** The longest a sliding dialog stays on the page after closing, should its transition never end. */
52
+ const LEAVING = 600;
53
+ export function DialogContent({ children, portal = true, nonModal = false, closeOnOutside = false, blockOutside = false, holdScroll = false, anchor = null, returnFocus = null, closeLabel = "Close", showClose = true, closeOnEscape = true, closeOnBackdrop = true, fullScreen = false, flush = false, rotated = false, placement = "center", ...props }: DialogContentProps) {
45
54
  const context = useDialog();
46
55
  const host = useRef<DialogElement>(null);
47
56
  const [mounted, setMounted] = useState(false);
57
+ // A sheet or drawer stays on the page while it slides out, then leaves.
58
+ const sliding = placement !== "center";
59
+ const [leaving, setLeaving] = useState(false);
60
+ const [wasOpen, setWasOpen] = useState(context.open);
61
+ if (wasOpen !== context.open) {
62
+ setWasOpen(context.open);
63
+ setLeaving(!context.open && sliding && mounted);
64
+ }
65
+ useEffect(() => {
66
+ if (!leaving) return;
67
+ const native = host.current?.querySelector("dialog");
68
+ const done = () => setLeaving(false);
69
+ const ended = (event: Event) => {
70
+ const { propertyName, pseudoElement } = event as TransitionEvent;
71
+ if (event.target === native && !pseudoElement && (propertyName === "transform" || propertyName === "opacity")) done();
72
+ };
73
+ native?.addEventListener("transitionend", ended);
74
+ native?.addEventListener("transitioncancel", ended);
75
+ const timer = setTimeout(done, LEAVING);
76
+ return () => { clearTimeout(timer); native?.removeEventListener("transitionend", ended); native?.removeEventListener("transitioncancel", ended); };
77
+ }, [leaving]);
48
78
  // A portal has no server location. Keep the server and first client render
49
79
  // identical, including when the application initially requests an open modal.
50
80
  useLayoutEffect(() => { setMounted(true); }, []);
@@ -77,10 +107,11 @@ export function DialogContent({ children, portal = true, nonModal = false, close
77
107
  element.holdScroll = holdScroll;
78
108
  element.anchor = anchor;
79
109
  element.returnFocus = returnFocus;
110
+ element.placement = placement;
80
111
  element.open = context.open;
81
112
  return () => element.removeEventListener("ds-close-request", close);
82
113
  });
83
- if (!mounted || !context.open) return null;
114
+ if (!mounted || (!context.open && !leaving)) return null;
84
115
  const content = createElement("ds-dialog", { ref: host },
85
116
  createElement("dialog", { ...props, "data-ds-dialog-fullscreen": fullScreen || undefined, "data-ds-dialog-flush": flush || undefined, "data-ds-dialog-rotated": rotated || undefined }, children,
86
117
  showClose && createElement("ds-button", { control: "slotted", icon: true, "data-ds-dialog": "close" },
@@ -0,0 +1,14 @@
1
+ import { createElement, forwardRef, type HTMLAttributes } from "react";
2
+ import type { DocumentPage as DocumentElement } from "../4-page/ds-document";
3
+
4
+ export type DocumentPageProps = HTMLAttributes<DocumentElement> &
5
+ Partial<Pick<DocumentElement, "levels" | "label" | "literal" | "hideContents">>;
6
+ /**
7
+ * A document page: the children are the writing (native headings,
8
+ * paragraphs and a `<dl className="ds-definitions">`), in the light DOM so
9
+ * they render on the server; the element builds the contents from them.
10
+ * Browser-only registration stays in the product's runtime entry for SSR.
11
+ */
12
+ export const DocumentPage = forwardRef<DocumentElement, DocumentPageProps>(function DocumentPage({ hideContents, ...props }, ref) {
13
+ return createElement("ds-document", { ...props, "hide-contents": hideContents || undefined, "data-ds-prose": "", ref });
14
+ });
@@ -0,0 +1,32 @@
1
+ /** An empty state in React: the words stay in the light DOM, so they render on
2
+ * the server and read in tests; ds-empty draws them. Browser-only registration
3
+ * of ds-empty stays in the product's runtime entry. */
4
+ import { createElement as h, forwardRef, type HTMLAttributes, type ReactNode } from "react";
5
+ import type { Empty as EmptyElement } from "../2-core/ds-empty";
6
+
7
+ export type EmptyProps = Omit<HTMLAttributes<EmptyElement>, "title"> & {
8
+ /** The title. Unset, the shared words' "Nothing here yet" in the current language. */
9
+ heading?: ReactNode;
10
+ /** The line under the title; `children` take its place when given. */
11
+ text?: ReactNode;
12
+ /** An icon from the library on the square above the title. */
13
+ icon?: string;
14
+ /** The buttons or links that fill the place, on one row. */
15
+ actions?: ReactNode;
16
+ /** Centre the words in the space the element stands in. */
17
+ centered?: boolean;
18
+ /** Make the title a heading of this level (1–6). */
19
+ level?: number;
20
+ };
21
+
22
+ const title = (content: ReactNode) =>
23
+ content == null || content === false || content === "" ? null : h("span", { slot: "heading" }, content);
24
+
25
+ export const Empty = forwardRef<EmptyElement, EmptyProps>(function Empty(
26
+ { heading, text, icon, actions, centered, level, children, ...props }, ref,
27
+ ) {
28
+ return h("ds-empty", { ...props, icon, centered: centered || undefined, level, ref },
29
+ title(heading),
30
+ children ?? text,
31
+ actions == null || actions === false ? null : h("div", { slot: "actions", style: { display: "contents" } }, actions));
32
+ });
@@ -0,0 +1,17 @@
1
+ import { createElement, forwardRef, type HTMLAttributes } from "react";
2
+ import type { Footer as FooterElement } from "../4-page/ds-footer";
3
+
4
+ export type { FooterColumn, FooterLink, FooterPreference } from "../4-page/ds-footer";
5
+ export type FooterProps = Omit<HTMLAttributes<FooterElement>, "columns"> &
6
+ Partial<Pick<FooterElement, "brand" | "href" | "tagline" | "columns" | "label" | "owner" | "year" | "preferences" | "literal">>;
7
+ /**
8
+ * A site footer from data: `columns` is set as a property, so React passes
9
+ * the array as it stands. A brand, preferences or legal line of the page's own
10
+ * take `slot="brand"`, `slot="preferences"` and `slot="legal"`. A page that
11
+ * must render its links on the server writes the `.ds-footer` classes instead.
12
+ * Browser-only registration stays in the product's runtime entry for SSR.
13
+ */
14
+ export const Footer = forwardRef<FooterElement, FooterProps>(function Footer({ preferences, ...props }, ref) {
15
+ // `preferences` present but empty means every preference, as the attribute does.
16
+ return createElement("ds-footer", { ...props, preferences: preferences === undefined ? undefined : String(preferences), ref });
17
+ });
@@ -0,0 +1,15 @@
1
+ import { createElement, forwardRef, type HTMLAttributes } from "react";
2
+ import type { Header as HeaderElement } from "../4-page/ds-header";
3
+
4
+ export type HeaderProps = HTMLAttributes<HeaderElement> &
5
+ Partial<Pick<HeaderElement, "brand" | "href" | "label" | "literal" | "sticky">>;
6
+ /**
7
+ * A site header. Its navigation is the children: `<a href>` links, in the
8
+ * light DOM so they render on the server; actions take `slot="actions"`, a
9
+ * brand of the page's own `slot="brand"`. Typed so a React product needs no
10
+ * `IntrinsicElements` entry of its own for `ds-header`. Browser-only
11
+ * registration stays in the product's runtime entry for SSR.
12
+ */
13
+ export const Header = forwardRef<HeaderElement, HeaderProps>(function Header(props, ref) {
14
+ return createElement("ds-header", { ...props, ref });
15
+ });
@@ -24,7 +24,24 @@ export type InputProps = Omit<
24
24
  variant?: InputElement["variant"];
25
25
  revealable?: boolean;
26
26
  quietFocus?: boolean;
27
+ /** The label on the row above the field, as written. */
28
+ label?: string;
29
+ /** The label as a translation key, shown in the page's language. */
30
+ labelText?: string;
31
+ /** The placeholder as a translation key; `placeholder` is as written. */
32
+ placeholderKey?: string;
33
+ /** The error under the field, as written, in the danger colour. */
27
34
  error?: string;
35
+ /** The error as a translation key. */
36
+ errorText?: string;
37
+ /** Suggestions offered while typing; `list` names a `<datalist>` instead. */
38
+ suggestions?: InputElement["suggestions"];
39
+ /** A text area: the field across whole rows. */
40
+ multiline?: boolean;
41
+ rows?: number;
42
+ wrap?: "soft" | "hard" | "off";
43
+ autoGrow?: boolean;
44
+ maxRows?: number;
28
45
  };
29
46
  const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
30
47
  /** Native listeners cross Lit's shadow boundary without React's input tracker.
@@ -48,18 +65,7 @@ function setRef(ref: Ref<InputElement> | undefined, field: InputElement | null)
48
65
  if (ref) ref.current = field;
49
66
  }
50
67
 
51
- type FieldProps = InputProps & {
52
- rows?: number;
53
- wrap?: "soft" | "hard" | "off";
54
- autoGrow?: boolean;
55
- maxRows?: number;
56
- };
57
- export type TextareaProps = Omit<
58
- FieldProps,
59
- "type" | "revealable" | "min" | "max" | "step" | "pattern"
60
- > & { variant?: "field" | "plain" };
61
- function fieldAdapter<Props extends FieldProps>(tag: "ds-input" | "ds-textarea") {
62
- return forwardRef<InputElement, Props>(function Field(
68
+ export const Input = forwardRef<InputElement, InputProps>(function Field(
63
69
  {
64
70
  value,
65
71
  defaultValue,
@@ -79,8 +85,12 @@ function fieldAdapter<Props extends FieldProps>(tag: "ds-input" | "ds-textarea")
79
85
  type = "text",
80
86
  variant = "field",
81
87
  quietFocus,
88
+ multiline,
82
89
  autoGrow,
83
90
  maxRows,
91
+ labelText,
92
+ placeholderKey,
93
+ errorText,
84
94
  ...props
85
95
  },
86
96
  forwardedRef,
@@ -158,7 +168,7 @@ function fieldAdapter<Props extends FieldProps>(tag: "ds-input" | "ds-textarea")
158
168
  element.removeEventListener(name, callback, capture);
159
169
  };
160
170
  });
161
- return createElement(tag, {
171
+ return createElement("ds-input", {
162
172
  ...attributes,
163
173
  ref,
164
174
  type,
@@ -175,10 +185,11 @@ function fieldAdapter<Props extends FieldProps>(tag: "ds-input" | "ds-textarea")
175
185
  step: step == null ? undefined : String(step),
176
186
  spellcheck: spellCheck === undefined ? undefined : String(spellCheck),
177
187
  "quiet-focus": quietFocus,
188
+ "label-text": labelText,
189
+ "placeholder-key": placeholderKey,
190
+ "error-text": errorText,
191
+ multiline: multiline || undefined,
178
192
  "auto-grow": autoGrow,
179
193
  "max-rows": maxRows,
180
194
  });
181
- });
182
- }
183
- export const Input = fieldAdapter<InputProps>("ds-input");
184
- export const Textarea = fieldAdapter<TextareaProps>("ds-textarea");
195
+ });
@@ -0,0 +1,21 @@
1
+ /** A keyboard shortcut's hint in React: ds-kbd writes the shortcut as the
2
+ * reader's platform does (⇧⌘D, Ctrl+Shift+D). Browser-only registration of
3
+ * ds-kbd stays in the product's runtime entry; children are words of the
4
+ * product's own, shown when there is no `shortcut`. */
5
+ import { createElement as h, forwardRef, type HTMLAttributes, type ReactNode } from "react";
6
+ import type { Kbd as KbdElement } from "../2-core/ds-kbd";
7
+ import type { KeyPlatform } from "../0-face/keys";
8
+
9
+ export type KbdProps = HTMLAttributes<KbdElement> & {
10
+ /** The shortcut, written once for every platform: `mod+shift+d`, `escape`, `?`. */
11
+ shortcut?: string;
12
+ /** The words alone in the title grey, as a menu entry writes its shortcut. */
13
+ plain?: boolean;
14
+ /** Write it for this platform rather than the reader's own. */
15
+ platform?: KeyPlatform;
16
+ children?: ReactNode;
17
+ };
18
+
19
+ export const Kbd = forwardRef<KbdElement, KbdProps>(function Kbd({ shortcut, plain, platform, children, ...props }, ref) {
20
+ return h("ds-kbd", { ...props, shortcut, plain: plain || undefined, platform, ref }, children);
21
+ });
@@ -0,0 +1,18 @@
1
+ import { createElement, Fragment, type CSSProperties, type ReactNode } from "react";
2
+ import { getText } from "../0-face/i18n";
3
+ import styles from "../2-core/styles/ds-loading.css?inline";
4
+ export const loadingStyles = styles;
5
+ /** SSR-safe automatic feedback. Decorative when a containing status owns the label.
6
+ * Shared markup and CSS work before hydration; no DOM runtime is imported.
7
+ * Unset, the label is the shared word "Loading" in the page's language. A
8
+ * spinner in a button or field is one control high, elsewhere one square. */
9
+ export function LoadingIndicator({ label, variant = "bar", decorative = false, className = "", style }: {
10
+ label?: string; variant?: "bar" | "spinner"; decorative?: boolean; className?: string; style?: CSSProperties;
11
+ }): ReactNode {
12
+ const name = decorative ? undefined : label || getText("Loading") || "Loading";
13
+ return createElement(Fragment, null, createElement("style", null, styles),
14
+ createElement("span", { className: `ds-loading ${className}`, style, "data-variant": variant,
15
+ role: decorative ? undefined : "status", "aria-label": name,
16
+ "aria-hidden": decorative || undefined, "aria-busy": decorative ? undefined : true },
17
+ createElement("span", { className: "ds-loading__fill", "aria-hidden": true })));
18
+ }
@@ -0,0 +1,59 @@
1
+ /** An inline notice in React: the words stay in the light DOM, so they render
2
+ * on the server and read in tests; ds-notice draws them and is the live region.
3
+ * Browser-only registration of ds-notice stays in the product's runtime entry. */
4
+ import { createElement as h, forwardRef, useEffect, useLayoutEffect, useRef, type HTMLAttributes, type ReactNode } from "react";
5
+ import type { Notice as NoticeElement, NoticeTone } from "../2-core/ds-notice";
6
+
7
+ export type { NoticeTone } from "../2-core/ds-notice";
8
+ export type NoticeProps = Omit<HTMLAttributes<NoticeElement>, "title"> & {
9
+ /** The mark's colour and icon; danger also colours the words. Neutral by default. */
10
+ tone?: NoticeTone;
11
+ /** A title on the first line. */
12
+ heading?: ReactNode;
13
+ /** The text; `children` take its place when given. */
14
+ text?: ReactNode;
15
+ /** An icon from the library in place of the tone's own. */
16
+ icon?: string;
17
+ /** Buttons or links on the row under the words. */
18
+ actions?: ReactNode;
19
+ /** Show the close button. On by default when `onDismiss` is given. */
20
+ dismissible?: boolean;
21
+ /** A strip across the top of its positioning context instead of a block in the flow. */
22
+ banner?: boolean;
23
+ /** The close button was pressed. The product removes the notice; without
24
+ * this callback the element hides itself. */
25
+ onDismiss?: () => void;
26
+ };
27
+
28
+ const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
29
+ const title = (content: ReactNode) =>
30
+ content == null || content === false || content === "" ? null : h("span", { slot: "heading" }, content);
31
+
32
+ export const Notice = forwardRef<NoticeElement, NoticeProps>(function Notice(
33
+ { tone, heading, text, icon, actions, dismissible, banner, onDismiss, children, ...props }, ref,
34
+ ) {
35
+ const host = useRef<NoticeElement | null>(null);
36
+ useCommitEffect(() => {
37
+ const element = host.current;
38
+ if (!element || !onDismiss) return;
39
+ const dismiss = (event: Event) => {
40
+ if (event.target !== element) return;
41
+ event.preventDefault();
42
+ onDismiss();
43
+ };
44
+ element.addEventListener("ds-notice-dismiss", dismiss);
45
+ return () => element.removeEventListener("ds-notice-dismiss", dismiss);
46
+ });
47
+ // The live region is in the markup from the first render, on the server too.
48
+ return h("ds-notice", {
49
+ role: tone === "danger" ? "alert" : "status",
50
+ ...props, tone, icon, banner: banner || undefined, dismissible: (dismissible ?? Boolean(onDismiss)) || undefined,
51
+ ref: (element: NoticeElement | null) => {
52
+ host.current = element;
53
+ if (typeof ref === "function") ref(element); else if (ref) ref.current = element;
54
+ },
55
+ },
56
+ title(heading),
57
+ children ?? text,
58
+ actions == null || actions === false ? null : h("div", { slot: "actions", style: { display: "contents" } }, actions));
59
+ });
@@ -0,0 +1,13 @@
1
+ import { createElement, forwardRef, type HTMLAttributes } from "react";
2
+ import type { Page as PageElement } from "../4-page/ds-page";
3
+
4
+ export type PageProps = HTMLAttributes<PageElement> &
5
+ Partial<Pick<PageElement, "layout" | "divided" | "measure" | "fill" | "view">>;
6
+ /**
7
+ * A standard page. Typed so a React product needs no `IntrinsicElements`
8
+ * entry of its own for `ds-page`; `measure` is a count of squares.
9
+ * Browser-only registration stays in the product's runtime entry for SSR.
10
+ */
11
+ export const Page = forwardRef<PageElement, PageProps>(function Page(props, ref) {
12
+ return createElement("ds-page", { ...props, ref });
13
+ });
@@ -0,0 +1,99 @@
1
+ /** Progress in React. A value against its range puts its role and values in
2
+ * the markup from the first render, on the server too, written in the
3
+ * language. Steps arrive as a property, with what belongs under each step in
4
+ * a vertical sequence slotted from the light DOM. Dots are a group whose
5
+ * picks come back as `onSelect`. Register ds-progress in the browser before
6
+ * hydration. */
7
+ import { createElement as h, forwardRef, useEffect, useLayoutEffect, useRef, type HTMLAttributes, type ReactNode } from "react";
8
+ import type { Progress as ProgressElement, ProgressSelectDetail, Step } from "../2-core/ds-progress";
9
+ import { meterAria, type FigureFormat } from "../2-core/figures";
10
+
11
+ export type { Step, StepState } from "../2-core/ds-progress";
12
+ export type ProgressProps = Omit<HTMLAttributes<ProgressElement>, "title" | "children" | "onSelect"> & {
13
+ /** The value. Past `max`, it is over. */
14
+ value?: number;
15
+ /** The start of the range, 0 by default. */
16
+ min?: number;
17
+ /** The end of the range, 1 by default. */
18
+ max?: number;
19
+ /** Draw the range in this many squares instead of a bar. */
20
+ squares?: number;
21
+ /** Show it as over whatever its value. */
22
+ over?: boolean;
23
+ /** What the value says, in place of "7 of 10". */
24
+ valuetext?: string;
25
+ /** How the value and the range are written in the words. */
26
+ format?: FigureFormat;
27
+ /** The ISO 4217 code for money. */
28
+ currency?: string;
29
+ /** The money is counted in the currency's minor unit. */
30
+ minor?: boolean;
31
+ /** Money in whole units only. */
32
+ whole?: boolean;
33
+ /** Decimals in the words. */
34
+ digits?: number;
35
+ /** Write the words in this language rather than the current one. */
36
+ language?: string;
37
+ /** A sequence: the steps in order, names or `{ label, state, href }`. */
38
+ steps?: Step[];
39
+ /** The number of the current step, counted from 1. */
40
+ current?: number;
41
+ /** One step to a row, with `bodies` under them. */
42
+ vertical?: boolean;
43
+ /** In a vertical sequence, what belongs under each step, by its place in `steps`. */
44
+ bodies?: ReactNode[];
45
+ /** A dot for each of this many pages. */
46
+ dots?: number;
47
+ /** The current dot, from 0. */
48
+ active?: number;
49
+ /** Draw the last dot as an end marker. */
50
+ end?: boolean;
51
+ /** Each dot's name, with `{index}` for its number from 1. */
52
+ dotLabel?: string;
53
+ /** A person picked a dot. */
54
+ onSelect?: (index: number, previous: number) => void;
55
+ /** The element's name for assistive technology. */
56
+ label?: string;
57
+ /** Show the words as written, never looked up. On by default: React writes its own words. */
58
+ literal?: boolean;
59
+ };
60
+
61
+ const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
62
+
63
+ export const Progress = forwardRef<ProgressElement, ProgressProps>(function Progress(
64
+ { value, min = 0, max = 1, squares, over, valuetext, format, currency, minor, whole, digits, language,
65
+ steps, current, vertical, bodies, dots, active, end, dotLabel, onSelect, label, literal = true, ...props }, ref,
66
+ ) {
67
+ const host = useRef<ProgressElement | null>(null);
68
+ useCommitEffect(() => {
69
+ const element = host.current;
70
+ if (!element || !onSelect) return;
71
+ const select = (event: Event) => {
72
+ if (event.target !== element) return;
73
+ const { index, previous } = (event as CustomEvent<ProgressSelectDetail>).detail;
74
+ onSelect(index, previous);
75
+ };
76
+ element.addEventListener("select", select);
77
+ return () => element.removeEventListener("select", select);
78
+ });
79
+ const attach = (element: ProgressElement | null) => {
80
+ host.current = element;
81
+ if (typeof ref === "function") ref(element); else if (ref) ref.current = element;
82
+ };
83
+ if (steps) {
84
+ return h("ds-progress", { ...props, steps, current, vertical: vertical || undefined, label, literal: literal || undefined, ref: attach },
85
+ vertical ? bodies?.map((body, index) => body == null || body === false
86
+ ? null
87
+ : h("div", { key: index, slot: `step-${index + 1}`, style: { display: "contents" } }, body)) : null);
88
+ }
89
+ if (dots !== undefined) {
90
+ return h("ds-progress", { role: "group", "aria-label": label, ...props, dots, active, end: end || undefined, "dot-label": dotLabel, label, literal: literal || undefined, ref: attach });
91
+ }
92
+ const aria = meterAria(value ?? 0, min, max, { over, format, currency, minor, whole, digits, language });
93
+ return h("ds-progress", {
94
+ role: "meter", "aria-valuenow": aria.now, "aria-valuemin": aria.min, "aria-valuemax": aria.max,
95
+ "aria-valuetext": valuetext || aria.text, "aria-label": label,
96
+ ...props, value: value ?? 0, min, max, squares, over: over || undefined, label, valuetext, format, currency,
97
+ minor: minor || undefined, whole: whole || undefined, digits, literal: literal || undefined, ref: attach,
98
+ });
99
+ });
@@ -0,0 +1,60 @@
1
+ /** A sidebar in React: the rows go to ds-sidebar as a property, its events come
2
+ * back as callbacks; `tree` makes it a tree of nested things. Browser-only
3
+ * registration of ds-sidebar stays in the product's runtime entry; on the
4
+ * server the element renders empty and fills on load. */
5
+ import { createElement as h, forwardRef, useEffect, useLayoutEffect, useRef, type HTMLAttributes } from "react";
6
+ import type { Sidebar as SidebarElement, SidebarItem } from "../3-unit/ds-sidebar";
7
+
8
+ export type { SidebarItem };
9
+
10
+ export type SidebarProps = Omit<HTMLAttributes<SidebarElement>, "onSelect" | "onToggle"> & {
11
+ /** The visible rows, in order; leave out the children of a closed row. */
12
+ items: SidebarItem[];
13
+ /** The navigation's or the tree's accessible name. */
14
+ label?: string;
15
+ /** The empty state's words. */
16
+ empty?: string;
17
+ /** A tree of nested things instead of navigation. */
18
+ tree?: boolean;
19
+ /** A row asks to open (`true`) or close. */
20
+ onToggle?: (id: string, expanded: boolean) => void;
21
+ /** A click, Space or Enter chose a tree row. */
22
+ onSelect?: (id: string) => void;
23
+ /** A row was pressed (navigation), or Enter or a double click opened one (a tree). */
24
+ onActivate?: (id: string) => void;
25
+ /** A row's own action was pressed. */
26
+ onAction?: (id: string, action: string) => void;
27
+ };
28
+
29
+ const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
30
+
31
+ export const Sidebar = forwardRef<SidebarElement, SidebarProps>(function Sidebar(
32
+ { items, label, empty, tree, onToggle, onSelect, onActivate, onAction, ...props }, ref,
33
+ ) {
34
+ const host = useRef<SidebarElement>(null);
35
+ useCommitEffect(() => {
36
+ const element = host.current; if (!element) return;
37
+ element.items = items;
38
+ }, [items]);
39
+ useCommitEffect(() => {
40
+ const element = host.current; if (!element) return;
41
+ const detail = (event: Event) => (event as CustomEvent<{ id: string; expanded?: boolean; action?: string }>).detail;
42
+ const toggle = (event: Event) => { const d = detail(event); onToggle?.(d.id, Boolean(d.expanded)); };
43
+ const select = (event: Event) => onSelect?.(detail(event).id);
44
+ const activate = (event: Event) => onActivate?.(detail(event).id);
45
+ const action = (event: Event) => { const d = detail(event); onAction?.(d.id, d.action ?? ""); };
46
+ element.addEventListener("sidebar-toggle", toggle);
47
+ element.addEventListener("sidebar-select", select);
48
+ element.addEventListener("sidebar-activate", activate);
49
+ element.addEventListener("sidebar-action", action);
50
+ return () => {
51
+ element.removeEventListener("sidebar-toggle", toggle);
52
+ element.removeEventListener("sidebar-select", select);
53
+ element.removeEventListener("sidebar-activate", activate);
54
+ element.removeEventListener("sidebar-action", action);
55
+ };
56
+ });
57
+ return h("ds-sidebar", { ...props, label, empty, tree: tree || undefined,
58
+ ref: (element: SidebarElement | null) => { host.current = element; if (typeof ref === "function") ref(element); else if (ref) ref.current = element; },
59
+ });
60
+ });
@@ -0,0 +1,21 @@
1
+ import { createElement, useEffect, useLayoutEffect, useRef, type CSSProperties, type ReactNode, type MouseEvent } from "react";
2
+ import { bindSpacingHandle, type SpacingOptions } from "../2-core/spacing-handle";
3
+ import styles from "../2-core/styles/ds-spacing-handle.css?inline";
4
+ const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
5
+ export interface SpacingHandleProps extends SpacingOptions {
6
+ label: string; valueText?: string; className?: string; style?: CSSProperties;
7
+ children?: ReactNode; onDoubleClick?: (event: MouseEvent<HTMLSpanElement>) => void;
8
+ }
9
+ /** Internal app chrome. Shared native target, keyboard/pointer controller and face. */
10
+ export function SpacingHandle(props: SpacingHandleProps): ReactNode {
11
+ const ref = useRef<HTMLSpanElement>(null);
12
+ const latest = useRef(props); latest.current = props;
13
+ useCommitEffect(() => ref.current ? bindSpacingHandle(ref.current, () => latest.current) : undefined, []);
14
+ return createElement("span", { ref, className: `ds-spacing-control ${props.className ?? ""}`, style: props.style,
15
+ role: "slider", tabIndex: props.disabled ? -1 : 0, "aria-label": props.label,
16
+ "aria-orientation": props.axis ?? "horizontal", "aria-valuemin": props.min ?? 0,
17
+ "aria-valuemax": props.max ?? 1000000, "aria-valuenow": props.value,
18
+ "aria-valuetext": props.valueText ?? String(props.value), "aria-disabled": !!props.disabled,
19
+ onDoubleClick: props.onDoubleClick, onClick: (e: MouseEvent) => e.stopPropagation(),
20
+ }, createElement("style", null, styles), props.children ?? createElement("span", { className: "ds-spacing-label", "aria-hidden": true }, props.value));
21
+ }