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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/DS1/0-face/calendar.ts +194 -0
  2. package/DS1/0-face/carousel.ts +623 -0
  3. package/DS1/0-face/component-visibility.ts +14 -0
  4. package/DS1/0-face/copy-text.ts +96 -0
  5. package/DS1/0-face/device.ts +8 -58
  6. package/DS1/0-face/dialog-swipe.ts +249 -0
  7. package/DS1/0-face/dialogs.ts +208 -0
  8. package/DS1/0-face/drawer.ts +258 -0
  9. package/DS1/0-face/feedback-words.ts +36 -0
  10. package/DS1/0-face/feedback.ts +40 -0
  11. package/DS1/0-face/format.ts +700 -0
  12. package/DS1/0-face/generated/toast-assets.ts +18 -0
  13. package/DS1/0-face/grid-fit.ts +1 -1
  14. package/DS1/0-face/grid.ts +3 -2
  15. package/DS1/0-face/header.ts +78 -0
  16. package/DS1/0-face/i18n.ts +93 -18
  17. package/DS1/0-face/keys.ts +276 -0
  18. package/DS1/0-face/languages.ts +4 -4
  19. package/DS1/0-face/layout-inspector.ts +6 -6
  20. package/DS1/0-face/library-styles.ts +33 -0
  21. package/DS1/0-face/load-toaster.ts +7 -0
  22. package/DS1/0-face/preference-options.ts +29 -0
  23. package/DS1/0-face/preferences.ts +3 -11
  24. package/DS1/0-face/pricing.ts +98 -43
  25. package/DS1/0-face/scaling.ts +160 -4
  26. package/DS1/0-face/shared-words.ts +9 -4
  27. package/DS1/0-face/sidebar.ts +201 -0
  28. package/DS1/0-face/theme-bootstrap.js +184 -0
  29. package/DS1/0-face/theme.ts +89 -47
  30. package/DS1/0-face/toast-queue.ts +157 -0
  31. package/DS1/0-face/toaster.ts +384 -0
  32. package/DS1/0-face/tooltips.ts +157 -15
  33. package/DS1/0-face/translations/da.json +60 -1
  34. package/DS1/0-face/translations/de.json +60 -1
  35. package/DS1/0-face/translations/en.json +60 -1
  36. package/DS1/0-face/translations/es.json +60 -1
  37. package/DS1/0-face/translations/fi.json +60 -1
  38. package/DS1/0-face/translations/fr.json +60 -1
  39. package/DS1/0-face/translations/is.json +60 -1
  40. package/DS1/0-face/translations/it.json +60 -1
  41. package/DS1/0-face/translations/ja.json +60 -1
  42. package/DS1/0-face/translations/ko.json +60 -1
  43. package/DS1/0-face/translations/nb.json +60 -1
  44. package/DS1/0-face/translations/pt-BR.json +60 -1
  45. package/DS1/0-face/translations/pt.json +60 -1
  46. package/DS1/0-face/translations/sv.json +60 -1
  47. package/DS1/0-face/translations/zh.json +60 -1
  48. package/DS1/0-face/translations-format.ts +3 -4
  49. package/DS1/1-root/card.css +192 -0
  50. package/DS1/1-root/carousel.css +136 -0
  51. package/DS1/1-root/cjk.css +23 -0
  52. package/DS1/1-root/component-metrics.css +1 -0
  53. package/DS1/1-root/component-tokens.css +51 -8
  54. package/DS1/1-root/controls.css +891 -14
  55. package/DS1/1-root/dialog-placement.css +191 -0
  56. package/DS1/1-root/document.css +183 -0
  57. package/DS1/1-root/drawer.css +83 -0
  58. package/DS1/1-root/empty.css +83 -0
  59. package/DS1/1-root/figures.css +141 -0
  60. package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
  61. package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
  62. package/DS1/1-root/fonts.css +69 -0
  63. package/DS1/1-root/footer.css +186 -0
  64. package/DS1/1-root/header.css +165 -0
  65. package/DS1/1-root/library-tokens.ts +91 -0
  66. package/DS1/1-root/measures.ts +53 -0
  67. package/DS1/1-root/notice.css +165 -0
  68. package/DS1/1-root/one.css +14 -84
  69. package/DS1/1-root/one.semantic.css +200 -148
  70. package/DS1/1-root/palette.css +58 -0
  71. package/DS1/1-root/palette.ts +19 -0
  72. package/DS1/1-root/progress.css +356 -0
  73. package/DS1/1-root/prose.css +202 -0
  74. package/DS1/1-root/row.css +300 -0
  75. package/DS1/1-root/table.css +111 -0
  76. package/DS1/1-root/text.css +70 -0
  77. package/DS1/2-core/button-split.ts +55 -0
  78. package/DS1/2-core/chart/chart.css +169 -0
  79. package/DS1/2-core/chart/grid-chart.ts +554 -0
  80. package/DS1/2-core/ds-avatar.ts +25 -6
  81. package/DS1/2-core/ds-badge.ts +10 -10
  82. package/DS1/2-core/ds-button.ts +111 -26
  83. package/DS1/2-core/ds-card.ts +135 -105
  84. package/DS1/2-core/ds-chart.ts +327 -0
  85. package/DS1/2-core/ds-composer.ts +8 -2
  86. package/DS1/2-core/ds-cycle.ts +97 -21
  87. package/DS1/2-core/ds-empty.ts +120 -0
  88. package/DS1/2-core/ds-icon.ts +11 -2
  89. package/DS1/2-core/ds-input.ts +165 -6
  90. package/DS1/2-core/ds-message.ts +218 -0
  91. package/DS1/2-core/ds-notice.ts +10 -0
  92. package/DS1/2-core/ds-progress.ts +380 -0
  93. package/DS1/2-core/ds-stat.ts +174 -0
  94. package/DS1/2-core/ds-switch.ts +1 -0
  95. package/DS1/2-core/ds-text.ts +15 -2
  96. package/DS1/2-core/ds-toast.ts +354 -0
  97. package/DS1/2-core/figures.ts +105 -0
  98. package/DS1/2-core/generated/ds-icon-map.ts +238 -128
  99. package/DS1/2-core/generated/icon-avatar.ts +2 -0
  100. package/DS1/2-core/generated/icons-extra.ts +120 -65
  101. package/DS1/2-core/generated/icons-immediate.ts +1 -1
  102. package/DS1/2-core/styles/ds-avatar.css +9 -8
  103. package/DS1/2-core/styles/ds-button-host.css +26 -3
  104. package/DS1/2-core/styles/ds-button-split.css +67 -0
  105. package/DS1/2-core/styles/ds-button.css +49 -15
  106. package/DS1/2-core/styles/ds-card.css +34 -0
  107. package/DS1/2-core/styles/ds-composer.css +13 -0
  108. package/DS1/2-core/styles/ds-cycle.css +10 -0
  109. package/DS1/2-core/styles/ds-empty.css +18 -0
  110. package/DS1/2-core/styles/ds-gap.css +1 -0
  111. package/DS1/2-core/styles/ds-icon.css +1 -0
  112. package/DS1/2-core/styles/ds-input.css +59 -6
  113. package/DS1/2-core/styles/ds-notice.css +32 -0
  114. package/DS1/2-core/styles/ds-progress.css +25 -0
  115. package/DS1/2-core/styles/ds-select.css +2 -2
  116. package/DS1/2-core/styles/ds-split.css +2 -62
  117. package/DS1/2-core/styles/ds-stat.css +34 -0
  118. package/DS1/2-core/styles/ds-switch.css +16 -1
  119. package/DS1/2-core/styles/ds-text.css +43 -12
  120. package/DS1/2-core/styles/ds-toast.css +182 -0
  121. package/DS1/2-core/styles/ds-tooltip.css +1 -0
  122. package/DS1/3-unit/calendar-base.ts +263 -0
  123. package/DS1/3-unit/ds-accordion.ts +9 -1
  124. package/DS1/3-unit/ds-avatar-group.ts +1 -0
  125. package/DS1/3-unit/ds-calendar-large.ts +349 -0
  126. package/DS1/3-unit/ds-calendar.ts +344 -0
  127. package/DS1/3-unit/ds-carousel.ts +368 -0
  128. package/DS1/3-unit/ds-date-picker.ts +540 -0
  129. package/DS1/3-unit/ds-form.ts +45 -37
  130. package/DS1/3-unit/ds-list.ts +48 -1
  131. package/DS1/3-unit/ds-matrix.ts +318 -0
  132. package/DS1/3-unit/ds-menu.ts +8 -4
  133. package/DS1/3-unit/ds-row.ts +84 -1
  134. package/DS1/3-unit/ds-sidebar.ts +366 -0
  135. package/DS1/3-unit/ds-table.ts +75 -34
  136. package/DS1/3-unit/styles/ds-accordion.css +1 -0
  137. package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
  138. package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
  139. package/DS1/3-unit/styles/ds-calendar.css +238 -0
  140. package/DS1/3-unit/styles/ds-carousel.css +30 -0
  141. package/DS1/3-unit/styles/ds-date-picker.css +124 -0
  142. package/DS1/3-unit/styles/ds-list.css +1 -0
  143. package/DS1/3-unit/styles/ds-matrix.css +203 -0
  144. package/DS1/3-unit/styles/ds-menu.css +31 -6
  145. package/DS1/3-unit/styles/ds-row.css +84 -2
  146. package/DS1/3-unit/styles/ds-sidebar.css +134 -0
  147. package/DS1/3-unit/styles/ds-table.css +3 -74
  148. package/DS1/4-page/ds-dialog.ts +40 -4
  149. package/DS1/4-page/ds-document.ts +240 -0
  150. package/DS1/4-page/ds-footer.ts +165 -0
  151. package/DS1/4-page/ds-grid.ts +39 -59
  152. package/DS1/4-page/ds-header.ts +171 -0
  153. package/DS1/4-page/ds-page.ts +184 -0
  154. package/DS1/4-page/email.ts +2 -3
  155. package/DS1/4-page/styles/ds-container.css +1 -0
  156. package/DS1/4-page/styles/ds-document.css +18 -0
  157. package/DS1/4-page/styles/ds-footer.css +29 -0
  158. package/DS1/4-page/styles/ds-grid.css +31 -85
  159. package/DS1/4-page/styles/ds-header.css +57 -0
  160. package/DS1/4-page/styles/ds-page.css +214 -0
  161. package/DS1/components.ts +7 -1
  162. package/DS1/index.ts +24 -6
  163. package/DS1/react/avatar.ts +4 -5
  164. package/DS1/react/button-split.ts +29 -0
  165. package/DS1/react/button.ts +32 -13
  166. package/DS1/react/carousel.ts +76 -0
  167. package/DS1/react/dialog.ts +36 -5
  168. package/DS1/react/document.ts +14 -0
  169. package/DS1/react/empty.ts +32 -0
  170. package/DS1/react/footer.ts +17 -0
  171. package/DS1/react/header.ts +15 -0
  172. package/DS1/react/input.ts +28 -17
  173. package/DS1/react/message.ts +73 -0
  174. package/DS1/react/notice.ts +59 -0
  175. package/DS1/react/page.ts +13 -0
  176. package/DS1/react/progress.ts +99 -0
  177. package/DS1/react/sidebar.ts +71 -0
  178. package/DS1/react/stat.ts +73 -0
  179. package/DS1/react/toast.ts +82 -0
  180. package/DS1/x-icon/Tabler-LICENSE.md +27 -0
  181. package/DS1/x-icon/airtable.svg +5 -0
  182. package/DS1/x-icon/attach.svg +3 -0
  183. package/DS1/x-icon/audio.svg +3 -0
  184. package/DS1/x-icon/bag-alt.svg +3 -0
  185. package/DS1/x-icon/bank.svg +3 -0
  186. package/DS1/x-icon/banknote.svg +3 -0
  187. package/DS1/x-icon/bolt.svg +3 -0
  188. package/DS1/x-icon/book-alt.svg +3 -0
  189. package/DS1/x-icon/book.svg +4 -0
  190. package/DS1/x-icon/box.svg +3 -0
  191. package/DS1/x-icon/briefcase.svg +3 -0
  192. package/DS1/x-icon/building.svg +4 -0
  193. package/DS1/x-icon/car.svg +3 -0
  194. package/DS1/x-icon/card.svg +3 -0
  195. package/DS1/x-icon/cart.svg +3 -0
  196. package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-down.svg} +1 -1
  197. package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
  198. package/DS1/x-icon/{ezo-android-screen-lists.svg → chevron-right.svg} +1 -1
  199. package/DS1/x-icon/{ezo-item-button-reopen.svg → chevron-up.svg} +1 -1
  200. package/DS1/x-icon/cloud.svg +3 -0
  201. package/DS1/x-icon/coffee.svg +3 -0
  202. package/DS1/x-icon/coins.svg +3 -0
  203. package/DS1/x-icon/cursor.svg +3 -0
  204. package/DS1/x-icon/curve.svg +7 -0
  205. package/DS1/x-icon/dislike.svg +4 -0
  206. package/DS1/x-icon/dot-bank.svg +3 -0
  207. package/DS1/x-icon/dot-banknote.svg +3 -0
  208. package/DS1/x-icon/dot-banknotes.svg +3 -0
  209. package/DS1/x-icon/dot-card.svg +3 -0
  210. package/DS1/x-icon/dot-coin.svg +3 -0
  211. package/DS1/x-icon/dot-coins.svg +3 -0
  212. package/DS1/x-icon/dot-receipt.svg +3 -0
  213. package/DS1/x-icon/dot-safe.svg +3 -0
  214. package/DS1/x-icon/dot-transfer.svg +3 -0
  215. package/DS1/x-icon/dot-wallet.svg +3 -0
  216. package/DS1/x-icon/download.svg +4 -0
  217. package/DS1/x-icon/drive.svg +5 -0
  218. package/DS1/x-icon/drop.svg +3 -0
  219. package/DS1/x-icon/dropbox.svg +3 -0
  220. package/DS1/x-icon/dumbbell.svg +3 -0
  221. package/DS1/x-icon/eye-off.svg +3 -0
  222. package/DS1/x-icon/eye.svg +3 -0
  223. package/DS1/x-icon/facebook.svg +3 -0
  224. package/DS1/x-icon/figma.svg +5 -0
  225. package/DS1/x-icon/flame.svg +3 -0
  226. package/DS1/x-icon/flip.svg +5 -0
  227. package/DS1/x-icon/food.svg +3 -0
  228. package/DS1/x-icon/fuel.svg +3 -0
  229. package/DS1/x-icon/game.svg +3 -0
  230. package/DS1/x-icon/gift.svg +3 -0
  231. package/DS1/x-icon/github.svg +3 -0
  232. package/DS1/x-icon/heart.svg +3 -0
  233. package/DS1/x-icon/history.svg +3 -0
  234. package/DS1/x-icon/home-alt.svg +3 -0
  235. package/DS1/x-icon/income.svg +3 -0
  236. package/DS1/x-icon/info.svg +5 -0
  237. package/DS1/x-icon/instagram.svg +5 -0
  238. package/DS1/x-icon/jpbank.svg +3 -0
  239. package/DS1/x-icon/key.svg +4 -0
  240. package/DS1/x-icon/keyboard.svg +3 -0
  241. package/DS1/x-icon/like.svg +4 -0
  242. package/DS1/x-icon/linkedin.svg +7 -0
  243. package/DS1/x-icon/loom.svg +6 -0
  244. package/DS1/x-icon/map.svg +4 -0
  245. package/DS1/x-icon/medical.svg +3 -0
  246. package/DS1/x-icon/minus.svg +3 -0
  247. package/DS1/x-icon/moon.svg +3 -0
  248. package/DS1/x-icon/move.svg +3 -0
  249. package/DS1/x-icon/music-alt.svg +3 -0
  250. package/DS1/x-icon/music.svg +5 -0
  251. package/DS1/x-icon/notion.svg +6 -0
  252. package/DS1/x-icon/offline.svg +3 -0
  253. package/DS1/x-icon/pause.svg +4 -0
  254. package/DS1/x-icon/paw.svg +3 -0
  255. package/DS1/x-icon/pdf.svg +3 -0
  256. package/DS1/x-icon/people.svg +5 -0
  257. package/DS1/x-icon/percent.svg +3 -0
  258. package/DS1/x-icon/phone.svg +3 -0
  259. package/DS1/x-icon/pill.svg +3 -0
  260. package/DS1/x-icon/plane.svg +3 -0
  261. package/DS1/x-icon/postal.svg +3 -0
  262. package/DS1/x-icon/present.svg +4 -0
  263. package/DS1/x-icon/reaction.svg +5 -0
  264. package/DS1/x-icon/receipt.svg +3 -0
  265. package/DS1/x-icon/refresh.svg +3 -0
  266. package/DS1/x-icon/refund.svg +3 -0
  267. package/DS1/x-icon/repeat.svg +3 -0
  268. package/DS1/x-icon/rotate.svg +4 -0
  269. package/DS1/x-icon/safe.svg +3 -0
  270. package/DS1/x-icon/school-alt.svg +3 -0
  271. package/DS1/x-icon/shield-alt.svg +3 -0
  272. package/DS1/x-icon/shield.svg +4 -0
  273. package/DS1/x-icon/shirt.svg +3 -0
  274. package/DS1/x-icon/shop.svg +3 -0
  275. package/DS1/x-icon/sign-in.svg +3 -0
  276. package/DS1/x-icon/sign-out.svg +3 -0
  277. package/DS1/x-icon/slack.svg +6 -0
  278. package/DS1/x-icon/sparkle.svg +3 -0
  279. package/DS1/x-icon/start.svg +4 -0
  280. package/DS1/x-icon/stop.svg +3 -0
  281. package/DS1/x-icon/sun.svg +3 -0
  282. package/DS1/x-icon/system.svg +4 -0
  283. package/DS1/x-icon/tag.svg +3 -0
  284. package/DS1/x-icon/ticket.svg +3 -0
  285. package/DS1/x-icon/title-struck.svg +4 -0
  286. package/DS1/x-icon/train.svg +3 -0
  287. package/DS1/x-icon/transfer.svg +3 -0
  288. package/DS1/x-icon/tv.svg +3 -0
  289. package/DS1/x-icon/upload.svg +4 -0
  290. package/DS1/x-icon/video.svg +4 -0
  291. package/DS1/x-icon/vimeo.svg +3 -0
  292. package/DS1/x-icon/wallet.svg +3 -0
  293. package/DS1/x-icon/wifi.svg +3 -0
  294. package/DS1/x-icon/window.svg +4 -0
  295. package/DS1/x-icon/wrench.svg +3 -0
  296. package/DS1/x-icon/x-brand.svg +4 -0
  297. package/DS1/x-icon/youtube.svg +4 -0
  298. package/README.md +3 -3
  299. package/dist/0-face/calendar.d.ts +75 -0
  300. package/dist/0-face/calendar.d.ts.map +1 -0
  301. package/dist/0-face/calendar.js +149 -0
  302. package/dist/0-face/carousel.d.ts +174 -0
  303. package/dist/0-face/carousel.d.ts.map +1 -0
  304. package/dist/0-face/carousel.js +583 -0
  305. package/dist/0-face/component-visibility.d.ts +7 -0
  306. package/dist/0-face/component-visibility.d.ts.map +1 -0
  307. package/dist/0-face/component-visibility.js +11 -0
  308. package/dist/0-face/copy-text.d.ts +11 -0
  309. package/dist/0-face/copy-text.d.ts.map +1 -0
  310. package/dist/0-face/copy-text.js +97 -0
  311. package/dist/0-face/device.d.ts +3 -7
  312. package/dist/0-face/device.d.ts.map +1 -1
  313. package/dist/0-face/device.js +7 -41
  314. package/dist/0-face/dialog-swipe.d.ts +49 -0
  315. package/dist/0-face/dialog-swipe.d.ts.map +1 -0
  316. package/dist/0-face/dialog-swipe.js +239 -0
  317. package/dist/0-face/dialogs.d.ts +33 -0
  318. package/dist/0-face/dialogs.d.ts.map +1 -0
  319. package/dist/0-face/dialogs.js +173 -0
  320. package/dist/0-face/drawer.d.ts +64 -0
  321. package/dist/0-face/drawer.d.ts.map +1 -0
  322. package/dist/0-face/drawer.js +256 -0
  323. package/dist/0-face/feedback-words.d.ts +21 -0
  324. package/dist/0-face/feedback-words.d.ts.map +1 -0
  325. package/dist/0-face/feedback-words.js +30 -0
  326. package/dist/0-face/feedback.d.ts +41 -0
  327. package/dist/0-face/feedback.d.ts.map +1 -0
  328. package/dist/0-face/feedback.js +35 -0
  329. package/dist/0-face/format.d.ts +166 -0
  330. package/dist/0-face/format.d.ts.map +1 -0
  331. package/dist/0-face/format.js +445 -0
  332. package/dist/0-face/generated/toast-assets.d.ts +11 -0
  333. package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
  334. package/dist/0-face/generated/toast-assets.js +14 -0
  335. package/dist/0-face/grid-fit.js +1 -1
  336. package/dist/0-face/grid.d.ts.map +1 -1
  337. package/dist/0-face/grid.js +2 -1
  338. package/dist/0-face/header.d.ts +38 -0
  339. package/dist/0-face/header.d.ts.map +1 -0
  340. package/dist/0-face/header.js +80 -0
  341. package/dist/0-face/i18n.d.ts +32 -2
  342. package/dist/0-face/i18n.d.ts.map +1 -1
  343. package/dist/0-face/i18n.js +65 -19
  344. package/dist/0-face/keys.d.ts +104 -0
  345. package/dist/0-face/keys.d.ts.map +1 -0
  346. package/dist/0-face/keys.js +253 -0
  347. package/dist/0-face/languages.d.ts +2 -2
  348. package/dist/0-face/languages.js +3 -3
  349. package/dist/0-face/layout-inspector.js +6 -6
  350. package/dist/0-face/library-styles.d.ts +7 -0
  351. package/dist/0-face/library-styles.d.ts.map +1 -0
  352. package/dist/0-face/library-styles.js +29 -0
  353. package/dist/0-face/load-toaster.d.ts +8 -0
  354. package/dist/0-face/load-toaster.d.ts.map +1 -0
  355. package/dist/0-face/load-toaster.js +7 -0
  356. package/dist/0-face/preference-options.d.ts +34 -0
  357. package/dist/0-face/preference-options.d.ts.map +1 -0
  358. package/dist/0-face/preference-options.js +1 -0
  359. package/dist/0-face/preferences.d.ts +3 -12
  360. package/dist/0-face/preferences.d.ts.map +1 -1
  361. package/dist/0-face/pricing.d.ts +19 -9
  362. package/dist/0-face/pricing.d.ts.map +1 -1
  363. package/dist/0-face/pricing.js +81 -40
  364. package/dist/0-face/scaling.d.ts +71 -1
  365. package/dist/0-face/scaling.d.ts.map +1 -1
  366. package/dist/0-face/scaling.js +108 -3
  367. package/dist/0-face/shared-words.d.ts +9 -4
  368. package/dist/0-face/shared-words.d.ts.map +1 -1
  369. package/dist/0-face/sidebar.d.ts +69 -0
  370. package/dist/0-face/sidebar.d.ts.map +1 -0
  371. package/dist/0-face/sidebar.js +191 -0
  372. package/dist/0-face/theme-bootstrap.d.ts +1 -0
  373. package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
  374. package/dist/0-face/theme-bootstrap.js +214 -0
  375. package/dist/0-face/theme.d.ts +32 -0
  376. package/dist/0-face/theme.d.ts.map +1 -1
  377. package/dist/0-face/theme.js +69 -43
  378. package/dist/0-face/toast-queue.d.ts +110 -0
  379. package/dist/0-face/toast-queue.d.ts.map +1 -0
  380. package/dist/0-face/toast-queue.js +98 -0
  381. package/dist/0-face/toaster.d.ts +27 -0
  382. package/dist/0-face/toaster.d.ts.map +1 -0
  383. package/dist/0-face/toaster.js +373 -0
  384. package/dist/0-face/tooltips.d.ts +24 -1
  385. package/dist/0-face/tooltips.d.ts.map +1 -1
  386. package/dist/0-face/tooltips.js +155 -16
  387. package/dist/0-face/translations/da.json +60 -1
  388. package/dist/0-face/translations/de.json +60 -1
  389. package/dist/0-face/translations/en.json +60 -1
  390. package/dist/0-face/translations/es.json +60 -1
  391. package/dist/0-face/translations/fi.json +60 -1
  392. package/dist/0-face/translations/fr.json +60 -1
  393. package/dist/0-face/translations/is.json +60 -1
  394. package/dist/0-face/translations/it.json +60 -1
  395. package/dist/0-face/translations/ja.json +60 -1
  396. package/dist/0-face/translations/ko.json +60 -1
  397. package/dist/0-face/translations/nb.json +60 -1
  398. package/dist/0-face/translations/pt-BR.json +60 -1
  399. package/dist/0-face/translations/pt.json +60 -1
  400. package/dist/0-face/translations/sv.json +60 -1
  401. package/dist/0-face/translations/zh.json +60 -1
  402. package/dist/0-face/translations-format.d.ts.map +1 -1
  403. package/dist/0-face/translations-format.js +3 -4
  404. package/dist/1-root/library-tokens.d.ts +31 -0
  405. package/dist/1-root/library-tokens.d.ts.map +1 -0
  406. package/dist/1-root/library-tokens.js +84 -0
  407. package/dist/1-root/measures.d.ts +52 -0
  408. package/dist/1-root/measures.d.ts.map +1 -0
  409. package/dist/1-root/measures.js +49 -0
  410. package/dist/1-root/palette.d.ts +5 -0
  411. package/dist/1-root/palette.d.ts.map +1 -1
  412. package/dist/1-root/palette.js +18 -0
  413. package/dist/2-core/button-split.d.ts +21 -0
  414. package/dist/2-core/button-split.d.ts.map +1 -0
  415. package/dist/2-core/button-split.js +48 -0
  416. package/dist/2-core/chart/grid-chart.d.ts +113 -0
  417. package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
  418. package/dist/2-core/chart/grid-chart.js +466 -0
  419. package/dist/2-core/ds-avatar.d.ts +20 -3
  420. package/dist/2-core/ds-avatar.d.ts.map +1 -1
  421. package/dist/2-core/ds-avatar.js +19 -5
  422. package/dist/2-core/ds-badge.js +10 -13
  423. package/dist/2-core/ds-button.d.ts +76 -0
  424. package/dist/2-core/ds-button.d.ts.map +1 -1
  425. package/dist/2-core/ds-button.js +101 -26
  426. package/dist/2-core/ds-card.d.ts +76 -11
  427. package/dist/2-core/ds-card.d.ts.map +1 -1
  428. package/dist/2-core/ds-card.js +129 -105
  429. package/dist/2-core/ds-chart.d.ts +105 -0
  430. package/dist/2-core/ds-chart.d.ts.map +1 -0
  431. package/dist/2-core/ds-chart.js +390 -0
  432. package/dist/2-core/ds-composer.d.ts +7 -0
  433. package/dist/2-core/ds-composer.d.ts.map +1 -1
  434. package/dist/2-core/ds-composer.js +1 -1
  435. package/dist/2-core/ds-cycle.d.ts +36 -2
  436. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  437. package/dist/2-core/ds-cycle.js +95 -18
  438. package/dist/2-core/ds-empty.d.ts +74 -0
  439. package/dist/2-core/ds-empty.d.ts.map +1 -0
  440. package/dist/2-core/ds-empty.js +96 -0
  441. package/dist/2-core/ds-icon.d.ts +6 -0
  442. package/dist/2-core/ds-icon.d.ts.map +1 -1
  443. package/dist/2-core/ds-icon.js +12 -2
  444. package/dist/2-core/ds-input.d.ts +39 -1
  445. package/dist/2-core/ds-input.d.ts.map +1 -1
  446. package/dist/2-core/ds-input.js +150 -6
  447. package/dist/2-core/ds-message.d.ts +154 -0
  448. package/dist/2-core/ds-message.d.ts.map +1 -0
  449. package/dist/2-core/ds-message.js +177 -0
  450. package/dist/2-core/ds-notice.d.ts +13 -0
  451. package/dist/2-core/ds-notice.d.ts.map +1 -0
  452. package/dist/2-core/ds-notice.js +11 -0
  453. package/dist/2-core/ds-progress.d.ts +200 -0
  454. package/dist/2-core/ds-progress.d.ts.map +1 -0
  455. package/dist/2-core/ds-progress.js +319 -0
  456. package/dist/2-core/ds-stat.d.ts +126 -0
  457. package/dist/2-core/ds-stat.d.ts.map +1 -0
  458. package/dist/2-core/ds-stat.js +137 -0
  459. package/dist/2-core/ds-switch.d.ts +1 -0
  460. package/dist/2-core/ds-switch.d.ts.map +1 -1
  461. package/dist/2-core/ds-switch.js +1 -0
  462. package/dist/2-core/ds-text.d.ts +15 -2
  463. package/dist/2-core/ds-text.d.ts.map +1 -1
  464. package/dist/2-core/ds-text.js +13 -0
  465. package/dist/2-core/ds-toast.d.ts +139 -0
  466. package/dist/2-core/ds-toast.d.ts.map +1 -0
  467. package/dist/2-core/ds-toast.js +329 -0
  468. package/dist/2-core/figures.d.ts +56 -0
  469. package/dist/2-core/figures.d.ts.map +1 -0
  470. package/dist/2-core/figures.js +70 -0
  471. package/dist/2-core/generated/ds-icon-map.d.ts +120 -65
  472. package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
  473. package/dist/2-core/generated/ds-icon-map.js +238 -128
  474. package/dist/2-core/generated/icon-avatar.d.ts +2 -0
  475. package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
  476. package/dist/2-core/generated/icon-avatar.js +2 -0
  477. package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
  478. package/dist/2-core/generated/icons-extra.js +120 -65
  479. package/dist/2-core/generated/icons-immediate.d.ts +1 -1
  480. package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
  481. package/dist/2-core/generated/icons-immediate.js +1 -1
  482. package/dist/3-unit/calendar-base.d.ts +149 -0
  483. package/dist/3-unit/calendar-base.d.ts.map +1 -0
  484. package/dist/3-unit/calendar-base.js +172 -0
  485. package/dist/3-unit/ds-accordion.d.ts +9 -0
  486. package/dist/3-unit/ds-accordion.d.ts.map +1 -1
  487. package/dist/3-unit/ds-accordion.js +7 -1
  488. package/dist/3-unit/ds-avatar-group.d.ts +1 -0
  489. package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
  490. package/dist/3-unit/ds-calendar-large.d.ts +138 -0
  491. package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
  492. package/dist/3-unit/ds-calendar-large.js +305 -0
  493. package/dist/3-unit/ds-calendar.d.ts +175 -0
  494. package/dist/3-unit/ds-calendar.d.ts.map +1 -0
  495. package/dist/3-unit/ds-calendar.js +303 -0
  496. package/dist/3-unit/ds-carousel.d.ts +182 -0
  497. package/dist/3-unit/ds-carousel.d.ts.map +1 -0
  498. package/dist/3-unit/ds-carousel.js +327 -0
  499. package/dist/3-unit/ds-date-picker.d.ts +203 -0
  500. package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
  501. package/dist/3-unit/ds-date-picker.js +499 -0
  502. package/dist/3-unit/ds-form.d.ts.map +1 -1
  503. package/dist/3-unit/ds-form.js +38 -28
  504. package/dist/3-unit/ds-list.d.ts +12 -0
  505. package/dist/3-unit/ds-list.d.ts.map +1 -1
  506. package/dist/3-unit/ds-list.js +52 -1
  507. package/dist/3-unit/ds-matrix.d.ts +146 -0
  508. package/dist/3-unit/ds-matrix.d.ts.map +1 -0
  509. package/dist/3-unit/ds-matrix.js +248 -0
  510. package/dist/3-unit/ds-menu.d.ts +1 -1
  511. package/dist/3-unit/ds-menu.d.ts.map +1 -1
  512. package/dist/3-unit/ds-menu.js +7 -4
  513. package/dist/3-unit/ds-row.d.ts +66 -0
  514. package/dist/3-unit/ds-row.d.ts.map +1 -1
  515. package/dist/3-unit/ds-row.js +80 -1
  516. package/dist/3-unit/ds-sidebar.d.ts +149 -0
  517. package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
  518. package/dist/3-unit/ds-sidebar.js +342 -0
  519. package/dist/3-unit/ds-table.d.ts +28 -10
  520. package/dist/3-unit/ds-table.d.ts.map +1 -1
  521. package/dist/3-unit/ds-table.js +53 -25
  522. package/dist/4-page/ds-dialog.d.ts +16 -1
  523. package/dist/4-page/ds-dialog.d.ts.map +1 -1
  524. package/dist/4-page/ds-dialog.js +39 -3
  525. package/dist/4-page/ds-document.d.ts +98 -0
  526. package/dist/4-page/ds-document.d.ts.map +1 -0
  527. package/dist/4-page/ds-document.js +213 -0
  528. package/dist/4-page/ds-footer.d.ts +100 -0
  529. package/dist/4-page/ds-footer.d.ts.map +1 -0
  530. package/dist/4-page/ds-footer.js +119 -0
  531. package/dist/4-page/ds-grid.d.ts +32 -12
  532. package/dist/4-page/ds-grid.d.ts.map +1 -1
  533. package/dist/4-page/ds-grid.js +30 -39
  534. package/dist/4-page/ds-header.d.ts +84 -0
  535. package/dist/4-page/ds-header.d.ts.map +1 -0
  536. package/dist/4-page/ds-header.js +143 -0
  537. package/dist/4-page/ds-page.d.ts +110 -0
  538. package/dist/4-page/ds-page.d.ts.map +1 -0
  539. package/dist/4-page/ds-page.js +155 -0
  540. package/dist/4-page/email.d.ts +2 -3
  541. package/dist/4-page/email.d.ts.map +1 -1
  542. package/dist/4-page/email.js +2 -3
  543. package/dist/components.d.ts +4 -1
  544. package/dist/components.d.ts.map +1 -1
  545. package/dist/components.js +4 -1
  546. package/dist/design-system-1.bundle.js +12322 -5523
  547. package/dist/design-system-1.bundle.js.map +1 -1
  548. package/dist/design-system-1.bundle.min.js +8771 -4115
  549. package/dist/design-system-1.bundle.min.js.map +1 -1
  550. package/dist/design-system-1.css +1 -1
  551. package/dist/feedback.js +541 -0
  552. package/dist/feedback.js.map +1 -0
  553. package/dist/{icons-extra-BoAACA4X.js → icons-extra-CiDDs7_-.js} +404 -312
  554. package/dist/icons-extra-CiDDs7_-.js.map +1 -0
  555. package/dist/{icons-extra-DlxTo_Y4.js → icons-extra-hauwCx07.js} +121 -66
  556. package/dist/icons-extra-hauwCx07.js.map +1 -0
  557. package/dist/index.d.ts +21 -6
  558. package/dist/index.d.ts.map +1 -1
  559. package/dist/index.js +21 -6
  560. package/dist/react/avatar.d.ts +5 -9
  561. package/dist/react/avatar.d.ts.map +1 -1
  562. package/dist/react/avatar.js +2 -2
  563. package/dist/react/button-split.d.ts +19 -0
  564. package/dist/react/button-split.d.ts.map +1 -0
  565. package/dist/react/{split.js → button-split.js} +12 -9
  566. package/dist/react/button.d.ts +18 -7
  567. package/dist/react/button.d.ts.map +1 -1
  568. package/dist/react/button.js +13 -4
  569. package/dist/react/carousel.d.ts +63 -0
  570. package/dist/react/carousel.d.ts.map +1 -0
  571. package/dist/react/carousel.js +47 -0
  572. package/dist/react/choice.d.ts +1 -1
  573. package/dist/react/context-menu.d.ts +337 -337
  574. package/dist/react/dialog.d.ts +684 -678
  575. package/dist/react/dialog.d.ts.map +1 -1
  576. package/dist/react/dialog.js +29 -3
  577. package/dist/react/document.d.ts +11 -0
  578. package/dist/react/document.d.ts.map +1 -0
  579. package/dist/react/document.js +10 -0
  580. package/dist/react/empty.d.ts +34 -0
  581. package/dist/react/empty.d.ts.map +1 -0
  582. package/dist/react/empty.js +8 -0
  583. package/dist/react/file-picker.d.ts +1 -1
  584. package/dist/react/footer.d.ts +13 -0
  585. package/dist/react/footer.d.ts.map +1 -0
  586. package/dist/react/footer.js +12 -0
  587. package/dist/react/header.d.ts +12 -0
  588. package/dist/react/header.d.ts.map +1 -0
  589. package/dist/react/header.js +11 -0
  590. package/dist/react/input.d.ts +31 -9
  591. package/dist/react/input.d.ts.map +1 -1
  592. package/dist/react/input.js +94 -94
  593. package/dist/react/message.d.ts +66 -0
  594. package/dist/react/message.d.ts.map +1 -0
  595. package/dist/react/message.js +37 -0
  596. package/dist/react/notice.d.ts +45 -0
  597. package/dist/react/notice.d.ts.map +1 -0
  598. package/dist/react/notice.js +34 -0
  599. package/dist/react/page.d.ts +10 -0
  600. package/dist/react/page.d.ts.map +1 -0
  601. package/dist/react/page.js +9 -0
  602. package/dist/react/progress.d.ts +107 -0
  603. package/dist/react/progress.d.ts.map +1 -0
  604. package/dist/react/progress.js +47 -0
  605. package/dist/react/sidebar.d.ts +54 -0
  606. package/dist/react/sidebar.d.ts.map +1 -0
  607. package/dist/react/sidebar.js +48 -0
  608. package/dist/react/stat.d.ts +78 -0
  609. package/dist/react/stat.d.ts.map +1 -0
  610. package/dist/react/stat.js +25 -0
  611. package/dist/react/toast.d.ts +37 -0
  612. package/dist/react/toast.d.ts.map +1 -0
  613. package/dist/react/toast.js +55 -0
  614. package/dist/shared-words-CyZYc_De.js +1818 -0
  615. package/dist/shared-words-CyZYc_De.js.map +1 -0
  616. package/dist/shared-words-DAVSET4Z.js +1800 -0
  617. package/dist/shared-words-DAVSET4Z.js.map +1 -0
  618. package/package.json +19 -6
  619. package/DS1/2-core/ds-banner.ts +0 -122
  620. package/DS1/2-core/ds-date.ts +0 -24
  621. package/DS1/2-core/ds-language.ts +0 -94
  622. package/DS1/2-core/ds-pagedots.ts +0 -52
  623. package/DS1/2-core/ds-split.ts +0 -122
  624. package/DS1/2-core/ds-textarea.ts +0 -136
  625. package/DS1/2-core/styles/ds-banner.css +0 -77
  626. package/DS1/2-core/styles/ds-date.css +0 -9
  627. package/DS1/2-core/styles/ds-language.css +0 -78
  628. package/DS1/2-core/styles/ds-pagedots.css +0 -31
  629. package/DS1/2-core/styles/ds-textarea.css +0 -27
  630. package/DS1/4-page/ds-layout.ts +0 -949
  631. package/DS1/4-page/styles/ds-layout.css +0 -246
  632. package/DS1/react/split.ts +0 -42
  633. package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
  634. package/DS1/x-icon/ezo-account-close.svg +0 -1
  635. package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
  636. package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
  637. package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
  638. package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
  639. package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
  640. package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
  641. package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
  642. package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
  643. package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
  644. package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
  645. package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
  646. package/DS1/x-icon/ezo-block-accordion.svg +0 -1
  647. package/DS1/x-icon/ezo-block-divider.svg +0 -1
  648. package/DS1/x-icon/ezo-block-group.svg +0 -1
  649. package/DS1/x-icon/ezo-block-image.svg +0 -1
  650. package/DS1/x-icon/ezo-block-section.svg +0 -1
  651. package/DS1/x-icon/ezo-block-table.svg +0 -1
  652. package/DS1/x-icon/ezo-code.svg +0 -14
  653. package/DS1/x-icon/ezo-down.svg +0 -3
  654. package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
  655. package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
  656. package/DS1/x-icon/ezo-item-button-header.svg +0 -3
  657. package/DS1/x-icon/ezo-item-button-open.svg +0 -3
  658. package/DS1/x-icon/ezo-item-button-star.svg +0 -3
  659. package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
  660. package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
  661. package/DS1/x-icon/ezo-item-star.svg +0 -5
  662. package/DS1/x-icon/ezo-left.svg +0 -3
  663. package/DS1/x-icon/ezo-logo.svg +0 -1
  664. package/DS1/x-icon/ezo-mic.svg +0 -8
  665. package/DS1/x-icon/ezo-move-column.svg +0 -14
  666. package/DS1/x-icon/ezo-move-row.svg +0 -18
  667. package/DS1/x-icon/ezo-navigation-check.svg +0 -1
  668. package/DS1/x-icon/ezo-note-back.svg +0 -5
  669. package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
  670. package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
  671. package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
  672. package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
  673. package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
  674. package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
  675. package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
  676. package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
  677. package/DS1/x-icon/ezo-note-more.svg +0 -7
  678. package/DS1/x-icon/ezo-note-star.svg +0 -5
  679. package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
  680. package/DS1/x-icon/ezo-play.svg +0 -5
  681. package/DS1/x-icon/ezo-premium-star.svg +0 -5
  682. package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
  683. package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
  684. package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
  685. package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
  686. package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
  687. package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
  688. package/DS1/x-icon/ezo-setting-blank.svg +0 -5
  689. package/DS1/x-icon/ezo-store-chevron.svg +0 -1
  690. package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
  691. package/DS1/x-icon/product-sources.json +0 -2557
  692. package/dist/2-core/ds-banner.d.ts +0 -68
  693. package/dist/2-core/ds-banner.d.ts.map +0 -1
  694. package/dist/2-core/ds-banner.js +0 -98
  695. package/dist/2-core/ds-date.d.ts +0 -16
  696. package/dist/2-core/ds-date.d.ts.map +0 -1
  697. package/dist/2-core/ds-date.js +0 -15
  698. package/dist/2-core/ds-language.d.ts +0 -75
  699. package/dist/2-core/ds-language.d.ts.map +0 -1
  700. package/dist/2-core/ds-language.js +0 -74
  701. package/dist/2-core/ds-pagedots.d.ts +0 -32
  702. package/dist/2-core/ds-pagedots.d.ts.map +0 -1
  703. package/dist/2-core/ds-pagedots.js +0 -36
  704. package/dist/2-core/ds-split.d.ts +0 -75
  705. package/dist/2-core/ds-split.d.ts.map +0 -1
  706. package/dist/2-core/ds-split.js +0 -101
  707. package/dist/2-core/ds-textarea.d.ts +0 -46
  708. package/dist/2-core/ds-textarea.d.ts.map +0 -1
  709. package/dist/2-core/ds-textarea.js +0 -121
  710. package/dist/4-page/ds-layout.d.ts +0 -31
  711. package/dist/4-page/ds-layout.d.ts.map +0 -1
  712. package/dist/4-page/ds-layout.js +0 -930
  713. package/dist/icons-extra-BoAACA4X.js.map +0 -1
  714. package/dist/icons-extra-DlxTo_Y4.js.map +0 -1
  715. package/dist/react/split.d.ts +0 -15
  716. package/dist/react/split.d.ts.map +0 -1
  717. package/dist/shared-words-Cg6Phtx0.js +0 -915
  718. package/dist/shared-words-Cg6Phtx0.js.map +0 -1
  719. package/dist/shared-words-Ddz0yUEF.js +0 -933
  720. package/dist/shared-words-Ddz0yUEF.js.map +0 -1
  721. /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
  722. /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
@@ -0,0 +1,303 @@
1
+ // ds-calendar.ts
2
+ // A month on whole squares: seven days across, a week to a row. By default a
3
+ // day is four squares wide and four high (its date on the first square, two
4
+ // lines of events, one square to spare), drawn in hairline boxes. `compact`
5
+ // makes a day one square: the small month a date picker opens and a year is
6
+ // drawn from.
7
+ import { html, nothing, unsafeCSS } from "lit";
8
+ import { define } from "../0-face/define";
9
+ import { addMonths, dateNumber, eventsByDay, isoWeek, monthTitle, monthWeeks, sameMonth, startOfMonth, weekdayNames, } from "../0-face/calendar";
10
+ import { CalendarBase, readMonth, readRange } from "./calendar-base";
11
+ import "../2-core/ds-icon";
12
+ import metrics from "../1-root/component-metrics.css?inline";
13
+ import controls from "../1-root/controls.css?inline";
14
+ import styles from "./styles/ds-calendar.css?inline";
15
+ export * from "./calendar-base";
16
+ const whole = (value, least, most, fallback) => typeof value === "number" && Number.isFinite(value) ? Math.max(least, Math.min(most, Math.floor(value))) : fallback;
17
+ /**
18
+ * @element ds-calendar
19
+ * @prop {string} month - The month shown, `YYYY-MM` (or a day in it). The
20
+ * selected day's month, or today's, when left out; the arrows change it.
21
+ * @prop {string} value - The selected day, `YYYY-MM-DD`.
22
+ * @prop {boolean} selectable - Pressing a day selects it and fires `change`.
23
+ * @prop {boolean} compact - One square per day, no events written out: the
24
+ * small month.
25
+ * @prop {number} dayWidth - Squares per day (`day-width`): 4 by default, 1
26
+ * when compact.
27
+ * @prop {number} lines - Lines of events under a day's date: 2 by default.
28
+ * @prop {boolean} weekNumbers - Write the week's number (`week-numbers`) on
29
+ * its first day.
30
+ * @prop {boolean} fixed - Always draw six weeks, so the month keeps its height.
31
+ * @prop {boolean} outsideDays - Draw the days of the months before and after
32
+ * in the title grey (`outside-days`); pressing one moves there.
33
+ * @prop {boolean} range - A selectable calendar chooses a first and a last
34
+ * day; `value` is then `YYYY-MM-DD/YYYY-MM-DD`.
35
+ * @prop {boolean} noHeader - Leave out the title and arrows (`no-header`).
36
+ * @prop {boolean} noToday - Leave out the Today button (`no-today`).
37
+ * @prop {string} min - The first day a person may choose.
38
+ * @prop {string} max - The last day a person may choose.
39
+ * @prop {string} weekStart - The week's first day (`week-start`), 0–6 from
40
+ * Sunday or its English name; the language's own by default.
41
+ * @prop {string} today - The day drawn as today; the reader's own by default.
42
+ * @prop {CalendarEvent[]} events - What happens on the days (property only).
43
+ *
44
+ * @fires day-press - A day was pressed or chosen with Enter or Space;
45
+ * `{ day, events }`. Cancelable: cancelled, a selectable calendar keeps its value.
46
+ * @fires change - A person selected a day; `{ value, previous }`.
47
+ * @fires event-press - An event was pressed; `{ event, day }`.
48
+ * @fires navigate - A person moved to another month; `{ month }`.
49
+ *
50
+ * @example
51
+ * <ds-calendar month="2026-10" week-numbers></ds-calendar>
52
+ * <ds-calendar compact selectable value="2026-10-18"></ds-calendar>
53
+ * <ds-calendar compact selectable range value="2026-10-18/2026-10-24"></ds-calendar>
54
+ */
55
+ export class Calendar extends CalendarBase {
56
+ constructor() {
57
+ super();
58
+ this.weeksRun = "rows";
59
+ this.byDay = new Map();
60
+ this.onKeyDown = (event) => {
61
+ const cell = event.target.closest("[data-day]");
62
+ if (!cell)
63
+ return;
64
+ const day = cell.dataset.day;
65
+ if (event.key === "Enter" || event.key === " ") {
66
+ event.preventDefault();
67
+ this.press(day);
68
+ return;
69
+ }
70
+ if (event.key === "Escape" && this.open) {
71
+ event.stopPropagation();
72
+ this.open = undefined;
73
+ return;
74
+ }
75
+ const target = this.keyTarget(event, day);
76
+ if (!target)
77
+ return;
78
+ event.preventDefault();
79
+ if (!sameMonth(target, this.shownMonth))
80
+ this.showMonth(target, true);
81
+ void this.focusCell(target);
82
+ };
83
+ this.onClick = (event) => {
84
+ const path = event.composedPath();
85
+ const find = (selector) => path.find(node => node instanceof HTMLElement && node.matches(selector));
86
+ const cell = find("[data-day]");
87
+ if (!cell)
88
+ return;
89
+ const day = cell.dataset.day;
90
+ const more = find("[data-more]");
91
+ if (more) {
92
+ this.open = this.open === day ? undefined : day;
93
+ return;
94
+ }
95
+ const chip = find("[data-event]");
96
+ if (chip) {
97
+ const event = this.eventsOn(day)[Number(chip.dataset.event)];
98
+ if (event)
99
+ this.pressEvent(event, day);
100
+ return;
101
+ }
102
+ this.focusDay = day;
103
+ this.press(day);
104
+ // A day of the month before or after takes the calendar there.
105
+ if (!sameMonth(day, this.shownMonth))
106
+ this.showMonth(day, true);
107
+ };
108
+ /** While a range waits for its end, the day under the pointer previews it. */
109
+ this.onPointerOver = (event) => {
110
+ if (!this.range || !this.selectable)
111
+ return;
112
+ const { start, end } = readRange(this.value);
113
+ if (!start || end)
114
+ return;
115
+ const cell = event.composedPath().find(node => node instanceof HTMLElement && node.dataset?.day);
116
+ const day = cell?.dataset.day;
117
+ if (day !== this.hoverDay && (!day || this.allowed(day)))
118
+ this.hoverDay = day;
119
+ };
120
+ this.onFocusOut = (event) => {
121
+ if (this.open && !(event.relatedTarget instanceof Node && this.renderRoot.contains(event.relatedTarget)))
122
+ this.open = undefined;
123
+ };
124
+ this.compact = false;
125
+ this.weekNumbers = false;
126
+ this.fixed = false;
127
+ this.outsideDays = false;
128
+ this.noHeader = false;
129
+ this.noToday = false;
130
+ }
131
+ /** The first of the month shown. */
132
+ get shownMonth() {
133
+ return readMonth(this.month) ?? readMonth(readRange(this.value).start) ?? startOfMonth(this.todayDay);
134
+ }
135
+ get squaresPerDay() {
136
+ return whole(this.dayWidth, 1, 12, this.compact ? 1 : 4);
137
+ }
138
+ get eventLines() {
139
+ return this.compact ? 0 : whole(this.lines, 0, 12, 2);
140
+ }
141
+ eventsOn(day) {
142
+ return this.byDay.get(day) ?? [];
143
+ }
144
+ willUpdate(changed) {
145
+ super.willUpdate(changed);
146
+ this.style.setProperty("--ds-calendar-day-squares", String(this.squaresPerDay));
147
+ this.style.setProperty("--ds-calendar-lines", String(this.eventLines));
148
+ // A compact month with events writes the days without any fainter.
149
+ this.toggleAttribute("data-events", (this.events ?? []).length > 0);
150
+ this.toggleAttribute("data-roomy", this.squaresPerDay >= 2);
151
+ }
152
+ /** Shows another month and says so with `navigate`. */
153
+ showMonth(month, announce = false) {
154
+ const first = readMonth(month);
155
+ if (!first || first === this.shownMonth)
156
+ return;
157
+ this.month = first.slice(0, 7);
158
+ this.open = undefined;
159
+ if (announce)
160
+ this.announceMonth(first);
161
+ }
162
+ /** The month before, as the previous arrow does. */
163
+ previousMonth() {
164
+ this.showMonth(addMonths(this.shownMonth, -1), true);
165
+ }
166
+ /** The month after, as the next arrow does. */
167
+ nextMonth() {
168
+ this.showMonth(addMonths(this.shownMonth, 1), true);
169
+ }
170
+ /** Today's month, as the Today button does. */
171
+ showToday() {
172
+ this.showMonth(this.todayDay, true);
173
+ this.focusDay = this.todayDay;
174
+ }
175
+ /** The day holding the Tab stop: the one moved to, the selected day, today, or the first. */
176
+ get tabDay() {
177
+ const month = this.shownMonth;
178
+ for (const day of [this.focusDay, this.chosen.start, this.todayDay])
179
+ if (day && sameMonth(day, month))
180
+ return day;
181
+ return month;
182
+ }
183
+ renderHeader() {
184
+ if (this.noHeader)
185
+ return nothing;
186
+ const month = this.shownMonth;
187
+ const min = this.minDay, max = this.maxDay;
188
+ const before = Boolean(min && addMonths(month, -1).slice(0, 7) < min.slice(0, 7));
189
+ const after = Boolean(max && addMonths(month, 1).slice(0, 7) > max.slice(0, 7));
190
+ const arrow = (which) => html `<button
191
+ class="ds-button ds-button--icon nav"
192
+ part=${which}
193
+ type="button"
194
+ aria-label=${this.words(which === "previous" ? "Previous month" : "Next month")}
195
+ ?disabled=${which === "previous" ? before : after}
196
+ @click=${() => (which === "previous" ? this.previousMonth() : this.nextMonth())}
197
+ ><ds-icon type=${which === "previous" ? "chevron-left" : "chevron-right"} size="large" aria-hidden="true"></ds-icon></button>`;
198
+ const title = monthTitle(month, this.compact ? "short" : "long");
199
+ return html `<div class="header" part="header">
200
+ <span class="title" id="title" aria-live="polite">${title}</span>
201
+ <span class="controls">
202
+ ${this.noToday || this.squaresPerDay < 2 ? nothing : html `<button class="ds-button today-button" part="today" type="button" @click=${() => this.showToday()}>${this.words("Today")}</button>`}
203
+ ${arrow("previous")}
204
+ ${arrow("next")}
205
+ </span>
206
+ </div>`;
207
+ }
208
+ renderDay(day, column) {
209
+ const month = this.shownMonth;
210
+ const outside = !sameMonth(day, month);
211
+ if (outside && !this.outsideDays)
212
+ return html `<div role="gridcell" class="day outside" part="day outside"></div>`;
213
+ const events = this.eventsOn(day);
214
+ const lines = this.eventLines;
215
+ const isToday = day === this.todayDay;
216
+ const { selected, inside, first, last } = this.selection(day);
217
+ const allowed = this.allowed(day);
218
+ const unfolded = this.open === day;
219
+ const shown = unfolded || events.length <= lines ? events : events.slice(0, Math.max(0, lines - 1));
220
+ const hidden = events.length - shown.length;
221
+ const parts = ["day", isToday ? "today" : "", selected ? "selected" : ""].filter(Boolean).join(" ");
222
+ return html `<div
223
+ role="gridcell"
224
+ class="day"
225
+ part=${parts}
226
+ data-day=${day}
227
+ tabindex=${!outside && day === this.tabDay ? 0 : -1}
228
+ aria-label=${this.cellLabel(day, events)}
229
+ aria-selected=${this.selectable ? String(selected || inside) : nothing}
230
+ aria-current=${isToday ? "date" : nothing}
231
+ aria-disabled=${allowed ? nothing : "true"}
232
+ ?data-today=${isToday}
233
+ ?data-selected=${selected}
234
+ ?data-inside=${inside}
235
+ ?data-first=${first}
236
+ ?data-last=${last}
237
+ ?data-outside=${outside}
238
+ ?data-busy=${events.length > 0}
239
+ ?data-open=${unfolded}
240
+ >
241
+ <span class="date-line" aria-hidden="true">
242
+ ${this.weekNumbers && column === 0 && !this.compact ? html `<span class="week-number">${this.words("W{week}", { week: isoWeek(day) })}</span>` : nothing}
243
+ <span class="date">${dateNumber(day)}</span>
244
+ </span>
245
+ ${lines > 0 && events.length
246
+ ? html `<span class="events" aria-hidden="true">
247
+ ${shown.map(event => html `<span
248
+ class="event"
249
+ part="event"
250
+ data-event=${events.indexOf(event)}
251
+ style=${event.color ? `--ds-calendar-event-fill: ${event.color}; --ds-calendar-event-ink: var(--ds-slate)` : nothing}
252
+ >${event.time ? html `<span class="time">${event.time}</span>` : nothing}<span class="name">${event.title}</span></span>`)}
253
+ ${hidden > 0 && !unfolded ? html `<span class="more" part="more" data-more>+${hidden}</span>` : nothing}
254
+ </span>`
255
+ : nothing}
256
+ </div>`;
257
+ }
258
+ render() {
259
+ const month = this.shownMonth;
260
+ const first = this.firstDay;
261
+ const weeks = monthWeeks(month, first, this.fixed);
262
+ this.byDay = eventsByDay(this.events ?? [], weeks[0][0], weeks.at(-1)[6]);
263
+ // A compact month names its days in a letter (one square) or two (wider); a full month in short.
264
+ const short = this.compact
265
+ ? this.squaresPerDay < 2
266
+ ? weekdayNames(first, "narrow")
267
+ : weekdayNames(first, "short").map(name => (/^\p{Script=Latin}/u.test(name) ? name.replace(/\.$/, "").slice(0, 2) : name))
268
+ : weekdayNames(first, "short");
269
+ const long = weekdayNames(first, "long");
270
+ return html `<div class="calendar" part="calendar" @focusout=${this.onFocusOut} @pointerover=${this.onPointerOver} @pointerleave=${() => (this.hoverDay = undefined)}>
271
+ ${this.renderHeader()}
272
+ <div
273
+ class="grid"
274
+ part="grid"
275
+ role="grid"
276
+ aria-label=${this.nameOr(monthTitle(month))}
277
+ aria-multiselectable=${this.selectable ? String(this.range) : nothing}
278
+ @keydown=${this.onKeyDown}
279
+ @click=${this.onClick}
280
+ >
281
+ <div role="row" class="weekdays" part="weekdays">
282
+ ${short.map((name, index) => html `<span role="columnheader" class="weekday" aria-label=${long[index]}>${name}</span>`)}
283
+ </div>
284
+ ${weeks.map(week => html `<div role="row" class="week" part="week">${week.map((day, column) => this.renderDay(day, column))}</div>`)}
285
+ </div>
286
+ </div>`;
287
+ }
288
+ }
289
+ Calendar.properties = {
290
+ ...CalendarBase.properties,
291
+ month: { type: String, reflect: true },
292
+ compact: { type: Boolean, reflect: true },
293
+ dayWidth: { type: Number, attribute: "day-width" },
294
+ lines: { type: Number },
295
+ weekNumbers: { type: Boolean, attribute: "week-numbers", reflect: true },
296
+ fixed: { type: Boolean, reflect: true },
297
+ outsideDays: { type: Boolean, attribute: "outside-days", reflect: true },
298
+ noHeader: { type: Boolean, attribute: "no-header", reflect: true },
299
+ noToday: { type: Boolean, attribute: "no-today", reflect: true },
300
+ open: { state: true },
301
+ };
302
+ Calendar.styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
303
+ define("ds-calendar", Calendar);
@@ -0,0 +1,182 @@
1
+ import { LitElement, type PropertyValues } from "lit";
2
+ import "../2-core/ds-icon";
3
+ import "../2-core/ds-progress";
4
+ /** Detail of `change`: the slide now in view and the one before it. */
5
+ export interface CarouselChangeDetail {
6
+ index: number;
7
+ previous: number;
8
+ }
9
+ /**
10
+ * @element ds-carousel
11
+ * @prop {string} label - The region's name: a translation key, or literal
12
+ * words. Name what the slides show ("Colours", "What people say").
13
+ * @prop {boolean} literal - Show `label` as written, never looked up.
14
+ * @prop {number} current - The slide in view, from 0. Setting it scrolls there.
15
+ * @prop {boolean} buttons - Show previous and next buttons beside the dots.
16
+ * @prop {boolean} noDots - Leave the dots out (`no-dots`).
17
+ * @prop {boolean} end - Draw the last dot as an end marker.
18
+ * @prop {number | "auto"} slideWidth - Each slide's width in whole squares
19
+ * (`slide-width`); the carousel's own width when not set; `auto` for slides
20
+ * of their own width, a strip of several in view.
21
+ * @prop {number} gap - Squares between slides; one by default.
22
+ * @prop {string} bleed - `none` (the default) keeps the strip in its box;
23
+ * `end` runs it on to the window's end edge, the first slide still on the
24
+ * box's start; `both` runs it to both edges.
25
+ * @prop {boolean} loop - Hold the slides three times over, so the strip has no
26
+ * end. The copies are hidden from assistive technology and never focused;
27
+ * a looping carousel draws no dots.
28
+ * @prop {string} autoplay - Move on a slide at a time by itself: empty for
29
+ * every five seconds, or a number of milliseconds. Held while a person is
30
+ * in the strip or cannot see it, never under reduced motion, and always
31
+ * with a pause button.
32
+ * @prop {boolean} free - Slide freely, without stopping at slides.
33
+ *
34
+ * @slot - The slides, one element each.
35
+ *
36
+ * @fires change - A person moved to another slide: by swiping, scrolling, a
37
+ * dot or a button. `detail` is `{ index, previous }`. Setting `current` or
38
+ * calling `goTo()` does not fire it.
39
+ *
40
+ * The element is a region described as a carousel, named by `label`; each
41
+ * slide is a group labelled "2 of 5" unless the page labels it, and the
42
+ * current slide is announced politely when it changes. It moves on its own
43
+ * only with `autoplay`. `bleed`, `loop` and `autoplay` are read when the
44
+ * element first draws; put a new element in its place to change them.
45
+ *
46
+ * @example
47
+ * <ds-carousel label="Colours" slide-width="12" buttons>
48
+ * <figure>…</figure>
49
+ * <figure>…</figure>
50
+ * </ds-carousel>
51
+ */
52
+ export declare class Carousel extends LitElement {
53
+ static properties: {
54
+ label: {
55
+ type: StringConstructor;
56
+ };
57
+ literal: {
58
+ type: BooleanConstructor;
59
+ reflect: boolean;
60
+ };
61
+ current: {
62
+ type: NumberConstructor;
63
+ reflect: boolean;
64
+ };
65
+ buttons: {
66
+ type: BooleanConstructor;
67
+ reflect: boolean;
68
+ };
69
+ noDots: {
70
+ type: BooleanConstructor;
71
+ reflect: boolean;
72
+ attribute: string;
73
+ };
74
+ end: {
75
+ type: BooleanConstructor;
76
+ reflect: boolean;
77
+ };
78
+ slideWidth: {
79
+ attribute: string;
80
+ reflect: boolean;
81
+ converter: {
82
+ fromAttribute: (value: string | null) => number | "auto" | undefined;
83
+ toAttribute: (value: number | string | undefined) => string | null;
84
+ };
85
+ };
86
+ gap: {
87
+ type: NumberConstructor;
88
+ };
89
+ bleed: {
90
+ type: StringConstructor;
91
+ reflect: boolean;
92
+ };
93
+ loop: {
94
+ type: BooleanConstructor;
95
+ reflect: boolean;
96
+ };
97
+ autoplay: {
98
+ type: StringConstructor;
99
+ reflect: boolean;
100
+ };
101
+ free: {
102
+ type: BooleanConstructor;
103
+ reflect: boolean;
104
+ };
105
+ count: {
106
+ state: boolean;
107
+ };
108
+ announcement: {
109
+ state: boolean;
110
+ };
111
+ paused: {
112
+ state: boolean;
113
+ };
114
+ };
115
+ static styles: import("lit").CSSResult[];
116
+ label: string | undefined;
117
+ literal: boolean;
118
+ current: number;
119
+ buttons: boolean;
120
+ noDots: boolean;
121
+ end: boolean;
122
+ slideWidth: number | string | undefined;
123
+ gap: number | undefined;
124
+ bleed: "none" | "end" | "both";
125
+ loop: boolean;
126
+ autoplay: string | null;
127
+ free: boolean;
128
+ count: number;
129
+ announcement: string;
130
+ paused: boolean;
131
+ /** The strip's drive: the bleed's measures, the loop's copies and autoplay. */
132
+ private drive;
133
+ /** Attributes this element wrote, so what the page wrote is left alone. */
134
+ private readonly own;
135
+ /** A slide asked for by `current`, a dot or a button, kept until its scroll stops. */
136
+ private pending;
137
+ private settle;
138
+ private frame;
139
+ /** `current` changed from inside: the track is already there or on its way. */
140
+ private moving;
141
+ private readonly relabel;
142
+ constructor();
143
+ /** The slides: the elements given to the carousel, without a loop's copies. */
144
+ get slides(): HTMLElement[];
145
+ /** Milliseconds between autoplay steps; 0 for none. */
146
+ private get every();
147
+ /** Slides of their own width: a strip. */
148
+ private get strip();
149
+ private get track();
150
+ /** The slide in view, inside the count. */
151
+ private get index();
152
+ connectedCallback(): void;
153
+ disconnectedCallback(): void;
154
+ private words;
155
+ /** Writes an attribute the page has not written, and remembers it as this element's. */
156
+ private write;
157
+ private labelSlides;
158
+ protected willUpdate(changed: PropertyValues<this>): void;
159
+ protected firstUpdated(): void;
160
+ protected updated(changed: PropertyValues<this>): void;
161
+ /** Goes to a slide: smoothly, unless the reader asks for reduced motion. Fires no `change`. */
162
+ goTo(index: number): void;
163
+ /** Goes to the next slide, as the next button does. */
164
+ next(): void;
165
+ /** Goes to the previous slide, as the previous button does. */
166
+ previous(): void;
167
+ private togglePause;
168
+ private travel;
169
+ /** A person moved to `index`: show it, say it, and fire `change`. */
170
+ private show;
171
+ private move;
172
+ private readonly scrolled;
173
+ private readonly ended;
174
+ private readonly picked;
175
+ render(): import("lit").TemplateResult<1>;
176
+ }
177
+ declare global {
178
+ interface HTMLElementTagNameMap {
179
+ "ds-carousel": Carousel;
180
+ }
181
+ }
182
+ //# sourceMappingURL=ds-carousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-carousel.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-carousel.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIhF,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAO/B,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCASU,MAAM,GAAG,IAAI;qCACf,MAAM,GAAG,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUlD;IAEF,MAAM,CAAC,MAAM,4BAAqF;IAE1F,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,OAAO,CAAC,KAAK,CAA8B;IAE3C,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmC;IACvD,sFAAsF;IACtF,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,KAAK,CAAK;IAClB,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuD;;IAkB/E,+EAA+E;IAC/E,IAAI,MAAM,IAAI,WAAW,EAAE,CAE1B;IAED,uDAAuD;IACvD,OAAO,KAAK,KAAK,GAEhB;IAED,0CAA0C;IAC1C,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,KAAK,KAAK,GAEhB;IAED,2CAA2C;IAC3C,OAAO,KAAK,KAAK,GAGhB;IAED,iBAAiB;IAMjB,oBAAoB;IAUpB,OAAO,CAAC,KAAK;IAKb,wFAAwF;IACxF,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,WAAW;IAWnB,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAgBlD,SAAS,CAAC,YAAY;IAStB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAa/C,+FAA+F;IAC/F,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB,uDAAuD;IACvD,IAAI,IAAI,IAAI;IAKZ,+DAA+D;IAC/D,QAAQ,IAAI,IAAI;IAKhB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,MAAM;IASd,qEAAqE;IACrE,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAcvB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAE7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;IAEF,MAAM;CAwCP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,QAAQ,CAAC;KACzB;CACF"}