@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.
- package/DS1/0-face/calendar.ts +194 -0
- package/DS1/0-face/carousel.ts +623 -0
- package/DS1/0-face/component-visibility.ts +14 -0
- package/DS1/0-face/copy-text.ts +96 -0
- package/DS1/0-face/device.ts +8 -58
- package/DS1/0-face/dialog-swipe.ts +249 -0
- package/DS1/0-face/dialogs.ts +208 -0
- package/DS1/0-face/drawer.ts +258 -0
- package/DS1/0-face/feedback-words.ts +36 -0
- package/DS1/0-face/feedback.ts +40 -0
- package/DS1/0-face/format.ts +700 -0
- package/DS1/0-face/generated/toast-assets.ts +18 -0
- package/DS1/0-face/grid-fit.ts +1 -1
- package/DS1/0-face/grid.ts +3 -2
- package/DS1/0-face/header.ts +78 -0
- package/DS1/0-face/i18n.ts +93 -18
- package/DS1/0-face/keys.ts +276 -0
- package/DS1/0-face/languages.ts +4 -4
- package/DS1/0-face/layout-inspector.ts +6 -6
- package/DS1/0-face/library-styles.ts +33 -0
- package/DS1/0-face/load-toaster.ts +7 -0
- package/DS1/0-face/preference-options.ts +29 -0
- package/DS1/0-face/preferences.ts +3 -11
- package/DS1/0-face/pricing.ts +98 -43
- package/DS1/0-face/scaling.ts +160 -4
- package/DS1/0-face/shared-words.ts +9 -4
- package/DS1/0-face/sidebar.ts +201 -0
- package/DS1/0-face/theme-bootstrap.js +184 -0
- package/DS1/0-face/theme.ts +89 -47
- package/DS1/0-face/toast-queue.ts +157 -0
- package/DS1/0-face/toaster.ts +384 -0
- package/DS1/0-face/tooltips.ts +157 -15
- package/DS1/0-face/translations/da.json +60 -1
- package/DS1/0-face/translations/de.json +60 -1
- package/DS1/0-face/translations/en.json +60 -1
- package/DS1/0-face/translations/es.json +60 -1
- package/DS1/0-face/translations/fi.json +60 -1
- package/DS1/0-face/translations/fr.json +60 -1
- package/DS1/0-face/translations/is.json +60 -1
- package/DS1/0-face/translations/it.json +60 -1
- package/DS1/0-face/translations/ja.json +60 -1
- package/DS1/0-face/translations/ko.json +60 -1
- package/DS1/0-face/translations/nb.json +60 -1
- package/DS1/0-face/translations/pt-BR.json +60 -1
- package/DS1/0-face/translations/pt.json +60 -1
- package/DS1/0-face/translations/sv.json +60 -1
- package/DS1/0-face/translations/zh.json +60 -1
- package/DS1/0-face/translations-format.ts +3 -4
- package/DS1/1-root/card.css +192 -0
- package/DS1/1-root/carousel.css +136 -0
- package/DS1/1-root/cjk.css +23 -0
- package/DS1/1-root/component-metrics.css +1 -0
- package/DS1/1-root/component-tokens.css +51 -8
- package/DS1/1-root/controls.css +891 -14
- package/DS1/1-root/dialog-placement.css +191 -0
- package/DS1/1-root/document.css +183 -0
- package/DS1/1-root/drawer.css +83 -0
- package/DS1/1-root/empty.css +83 -0
- package/DS1/1-root/figures.css +141 -0
- package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
- package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
- package/DS1/1-root/fonts.css +69 -0
- package/DS1/1-root/footer.css +186 -0
- package/DS1/1-root/header.css +165 -0
- package/DS1/1-root/library-tokens.ts +91 -0
- package/DS1/1-root/measures.ts +53 -0
- package/DS1/1-root/notice.css +165 -0
- package/DS1/1-root/one.css +14 -84
- package/DS1/1-root/one.semantic.css +200 -148
- package/DS1/1-root/palette.css +58 -0
- package/DS1/1-root/palette.ts +19 -0
- package/DS1/1-root/progress.css +356 -0
- package/DS1/1-root/prose.css +202 -0
- package/DS1/1-root/row.css +300 -0
- package/DS1/1-root/table.css +111 -0
- package/DS1/1-root/text.css +70 -0
- package/DS1/2-core/button-split.ts +55 -0
- package/DS1/2-core/chart/chart.css +169 -0
- package/DS1/2-core/chart/grid-chart.ts +554 -0
- package/DS1/2-core/ds-avatar.ts +25 -6
- package/DS1/2-core/ds-badge.ts +10 -10
- package/DS1/2-core/ds-button.ts +111 -26
- package/DS1/2-core/ds-card.ts +135 -105
- package/DS1/2-core/ds-chart.ts +327 -0
- package/DS1/2-core/ds-composer.ts +8 -2
- package/DS1/2-core/ds-cycle.ts +97 -21
- package/DS1/2-core/ds-empty.ts +120 -0
- package/DS1/2-core/ds-icon.ts +11 -2
- package/DS1/2-core/ds-input.ts +165 -6
- package/DS1/2-core/ds-message.ts +218 -0
- package/DS1/2-core/ds-notice.ts +10 -0
- package/DS1/2-core/ds-progress.ts +380 -0
- package/DS1/2-core/ds-stat.ts +174 -0
- package/DS1/2-core/ds-switch.ts +1 -0
- package/DS1/2-core/ds-text.ts +15 -2
- package/DS1/2-core/ds-toast.ts +354 -0
- package/DS1/2-core/figures.ts +105 -0
- package/DS1/2-core/generated/ds-icon-map.ts +238 -128
- package/DS1/2-core/generated/icon-avatar.ts +2 -0
- package/DS1/2-core/generated/icons-extra.ts +120 -65
- package/DS1/2-core/generated/icons-immediate.ts +1 -1
- package/DS1/2-core/styles/ds-avatar.css +9 -8
- package/DS1/2-core/styles/ds-button-host.css +26 -3
- package/DS1/2-core/styles/ds-button-split.css +67 -0
- package/DS1/2-core/styles/ds-button.css +49 -15
- package/DS1/2-core/styles/ds-card.css +34 -0
- package/DS1/2-core/styles/ds-composer.css +13 -0
- package/DS1/2-core/styles/ds-cycle.css +10 -0
- package/DS1/2-core/styles/ds-empty.css +18 -0
- package/DS1/2-core/styles/ds-gap.css +1 -0
- package/DS1/2-core/styles/ds-icon.css +1 -0
- package/DS1/2-core/styles/ds-input.css +59 -6
- package/DS1/2-core/styles/ds-notice.css +32 -0
- package/DS1/2-core/styles/ds-progress.css +25 -0
- package/DS1/2-core/styles/ds-select.css +2 -2
- package/DS1/2-core/styles/ds-split.css +2 -62
- package/DS1/2-core/styles/ds-stat.css +34 -0
- package/DS1/2-core/styles/ds-switch.css +16 -1
- package/DS1/2-core/styles/ds-text.css +43 -12
- package/DS1/2-core/styles/ds-toast.css +182 -0
- package/DS1/2-core/styles/ds-tooltip.css +1 -0
- package/DS1/3-unit/calendar-base.ts +263 -0
- package/DS1/3-unit/ds-accordion.ts +9 -1
- package/DS1/3-unit/ds-avatar-group.ts +1 -0
- package/DS1/3-unit/ds-calendar-large.ts +349 -0
- package/DS1/3-unit/ds-calendar.ts +344 -0
- package/DS1/3-unit/ds-carousel.ts +368 -0
- package/DS1/3-unit/ds-date-picker.ts +540 -0
- package/DS1/3-unit/ds-form.ts +45 -37
- package/DS1/3-unit/ds-list.ts +48 -1
- package/DS1/3-unit/ds-matrix.ts +318 -0
- package/DS1/3-unit/ds-menu.ts +8 -4
- package/DS1/3-unit/ds-row.ts +84 -1
- package/DS1/3-unit/ds-sidebar.ts +366 -0
- package/DS1/3-unit/ds-table.ts +75 -34
- package/DS1/3-unit/styles/ds-accordion.css +1 -0
- package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
- package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
- package/DS1/3-unit/styles/ds-calendar.css +238 -0
- package/DS1/3-unit/styles/ds-carousel.css +30 -0
- package/DS1/3-unit/styles/ds-date-picker.css +124 -0
- package/DS1/3-unit/styles/ds-list.css +1 -0
- package/DS1/3-unit/styles/ds-matrix.css +203 -0
- package/DS1/3-unit/styles/ds-menu.css +31 -6
- package/DS1/3-unit/styles/ds-row.css +84 -2
- package/DS1/3-unit/styles/ds-sidebar.css +134 -0
- package/DS1/3-unit/styles/ds-table.css +3 -74
- package/DS1/4-page/ds-dialog.ts +40 -4
- package/DS1/4-page/ds-document.ts +240 -0
- package/DS1/4-page/ds-footer.ts +165 -0
- package/DS1/4-page/ds-grid.ts +39 -59
- package/DS1/4-page/ds-header.ts +171 -0
- package/DS1/4-page/ds-page.ts +184 -0
- package/DS1/4-page/email.ts +2 -3
- package/DS1/4-page/styles/ds-container.css +1 -0
- package/DS1/4-page/styles/ds-document.css +18 -0
- package/DS1/4-page/styles/ds-footer.css +29 -0
- package/DS1/4-page/styles/ds-grid.css +31 -85
- package/DS1/4-page/styles/ds-header.css +57 -0
- package/DS1/4-page/styles/ds-page.css +214 -0
- package/DS1/components.ts +7 -1
- package/DS1/index.ts +24 -6
- package/DS1/react/avatar.ts +4 -5
- package/DS1/react/button-split.ts +29 -0
- package/DS1/react/button.ts +32 -13
- package/DS1/react/carousel.ts +76 -0
- package/DS1/react/dialog.ts +36 -5
- package/DS1/react/document.ts +14 -0
- package/DS1/react/empty.ts +32 -0
- package/DS1/react/footer.ts +17 -0
- package/DS1/react/header.ts +15 -0
- package/DS1/react/input.ts +28 -17
- package/DS1/react/message.ts +73 -0
- package/DS1/react/notice.ts +59 -0
- package/DS1/react/page.ts +13 -0
- package/DS1/react/progress.ts +99 -0
- package/DS1/react/sidebar.ts +71 -0
- package/DS1/react/stat.ts +73 -0
- package/DS1/react/toast.ts +82 -0
- package/DS1/x-icon/Tabler-LICENSE.md +27 -0
- package/DS1/x-icon/airtable.svg +5 -0
- package/DS1/x-icon/attach.svg +3 -0
- package/DS1/x-icon/audio.svg +3 -0
- package/DS1/x-icon/bag-alt.svg +3 -0
- package/DS1/x-icon/bank.svg +3 -0
- package/DS1/x-icon/banknote.svg +3 -0
- package/DS1/x-icon/bolt.svg +3 -0
- package/DS1/x-icon/book-alt.svg +3 -0
- package/DS1/x-icon/book.svg +4 -0
- package/DS1/x-icon/box.svg +3 -0
- package/DS1/x-icon/briefcase.svg +3 -0
- package/DS1/x-icon/building.svg +4 -0
- package/DS1/x-icon/car.svg +3 -0
- package/DS1/x-icon/card.svg +3 -0
- package/DS1/x-icon/cart.svg +3 -0
- package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-down.svg} +1 -1
- package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
- package/DS1/x-icon/{ezo-android-screen-lists.svg → chevron-right.svg} +1 -1
- package/DS1/x-icon/{ezo-item-button-reopen.svg → chevron-up.svg} +1 -1
- package/DS1/x-icon/cloud.svg +3 -0
- package/DS1/x-icon/coffee.svg +3 -0
- package/DS1/x-icon/coins.svg +3 -0
- package/DS1/x-icon/cursor.svg +3 -0
- package/DS1/x-icon/curve.svg +7 -0
- package/DS1/x-icon/dislike.svg +4 -0
- package/DS1/x-icon/dot-bank.svg +3 -0
- package/DS1/x-icon/dot-banknote.svg +3 -0
- package/DS1/x-icon/dot-banknotes.svg +3 -0
- package/DS1/x-icon/dot-card.svg +3 -0
- package/DS1/x-icon/dot-coin.svg +3 -0
- package/DS1/x-icon/dot-coins.svg +3 -0
- package/DS1/x-icon/dot-receipt.svg +3 -0
- package/DS1/x-icon/dot-safe.svg +3 -0
- package/DS1/x-icon/dot-transfer.svg +3 -0
- package/DS1/x-icon/dot-wallet.svg +3 -0
- package/DS1/x-icon/download.svg +4 -0
- package/DS1/x-icon/drive.svg +5 -0
- package/DS1/x-icon/drop.svg +3 -0
- package/DS1/x-icon/dropbox.svg +3 -0
- package/DS1/x-icon/dumbbell.svg +3 -0
- package/DS1/x-icon/eye-off.svg +3 -0
- package/DS1/x-icon/eye.svg +3 -0
- package/DS1/x-icon/facebook.svg +3 -0
- package/DS1/x-icon/figma.svg +5 -0
- package/DS1/x-icon/flame.svg +3 -0
- package/DS1/x-icon/flip.svg +5 -0
- package/DS1/x-icon/food.svg +3 -0
- package/DS1/x-icon/fuel.svg +3 -0
- package/DS1/x-icon/game.svg +3 -0
- package/DS1/x-icon/gift.svg +3 -0
- package/DS1/x-icon/github.svg +3 -0
- package/DS1/x-icon/heart.svg +3 -0
- package/DS1/x-icon/history.svg +3 -0
- package/DS1/x-icon/home-alt.svg +3 -0
- package/DS1/x-icon/income.svg +3 -0
- package/DS1/x-icon/info.svg +5 -0
- package/DS1/x-icon/instagram.svg +5 -0
- package/DS1/x-icon/jpbank.svg +3 -0
- package/DS1/x-icon/key.svg +4 -0
- package/DS1/x-icon/keyboard.svg +3 -0
- package/DS1/x-icon/like.svg +4 -0
- package/DS1/x-icon/linkedin.svg +7 -0
- package/DS1/x-icon/loom.svg +6 -0
- package/DS1/x-icon/map.svg +4 -0
- package/DS1/x-icon/medical.svg +3 -0
- package/DS1/x-icon/minus.svg +3 -0
- package/DS1/x-icon/moon.svg +3 -0
- package/DS1/x-icon/move.svg +3 -0
- package/DS1/x-icon/music-alt.svg +3 -0
- package/DS1/x-icon/music.svg +5 -0
- package/DS1/x-icon/notion.svg +6 -0
- package/DS1/x-icon/offline.svg +3 -0
- package/DS1/x-icon/pause.svg +4 -0
- package/DS1/x-icon/paw.svg +3 -0
- package/DS1/x-icon/pdf.svg +3 -0
- package/DS1/x-icon/people.svg +5 -0
- package/DS1/x-icon/percent.svg +3 -0
- package/DS1/x-icon/phone.svg +3 -0
- package/DS1/x-icon/pill.svg +3 -0
- package/DS1/x-icon/plane.svg +3 -0
- package/DS1/x-icon/postal.svg +3 -0
- package/DS1/x-icon/present.svg +4 -0
- package/DS1/x-icon/reaction.svg +5 -0
- package/DS1/x-icon/receipt.svg +3 -0
- package/DS1/x-icon/refresh.svg +3 -0
- package/DS1/x-icon/refund.svg +3 -0
- package/DS1/x-icon/repeat.svg +3 -0
- package/DS1/x-icon/rotate.svg +4 -0
- package/DS1/x-icon/safe.svg +3 -0
- package/DS1/x-icon/school-alt.svg +3 -0
- package/DS1/x-icon/shield-alt.svg +3 -0
- package/DS1/x-icon/shield.svg +4 -0
- package/DS1/x-icon/shirt.svg +3 -0
- package/DS1/x-icon/shop.svg +3 -0
- package/DS1/x-icon/sign-in.svg +3 -0
- package/DS1/x-icon/sign-out.svg +3 -0
- package/DS1/x-icon/slack.svg +6 -0
- package/DS1/x-icon/sparkle.svg +3 -0
- package/DS1/x-icon/start.svg +4 -0
- package/DS1/x-icon/stop.svg +3 -0
- package/DS1/x-icon/sun.svg +3 -0
- package/DS1/x-icon/system.svg +4 -0
- package/DS1/x-icon/tag.svg +3 -0
- package/DS1/x-icon/ticket.svg +3 -0
- package/DS1/x-icon/title-struck.svg +4 -0
- package/DS1/x-icon/train.svg +3 -0
- package/DS1/x-icon/transfer.svg +3 -0
- package/DS1/x-icon/tv.svg +3 -0
- package/DS1/x-icon/upload.svg +4 -0
- package/DS1/x-icon/video.svg +4 -0
- package/DS1/x-icon/vimeo.svg +3 -0
- package/DS1/x-icon/wallet.svg +3 -0
- package/DS1/x-icon/wifi.svg +3 -0
- package/DS1/x-icon/window.svg +4 -0
- package/DS1/x-icon/wrench.svg +3 -0
- package/DS1/x-icon/x-brand.svg +4 -0
- package/DS1/x-icon/youtube.svg +4 -0
- package/README.md +3 -3
- package/dist/0-face/calendar.d.ts +75 -0
- package/dist/0-face/calendar.d.ts.map +1 -0
- package/dist/0-face/calendar.js +149 -0
- package/dist/0-face/carousel.d.ts +174 -0
- package/dist/0-face/carousel.d.ts.map +1 -0
- package/dist/0-face/carousel.js +583 -0
- package/dist/0-face/component-visibility.d.ts +7 -0
- package/dist/0-face/component-visibility.d.ts.map +1 -0
- package/dist/0-face/component-visibility.js +11 -0
- package/dist/0-face/copy-text.d.ts +11 -0
- package/dist/0-face/copy-text.d.ts.map +1 -0
- package/dist/0-face/copy-text.js +97 -0
- package/dist/0-face/device.d.ts +3 -7
- package/dist/0-face/device.d.ts.map +1 -1
- package/dist/0-face/device.js +7 -41
- package/dist/0-face/dialog-swipe.d.ts +49 -0
- package/dist/0-face/dialog-swipe.d.ts.map +1 -0
- package/dist/0-face/dialog-swipe.js +239 -0
- package/dist/0-face/dialogs.d.ts +33 -0
- package/dist/0-face/dialogs.d.ts.map +1 -0
- package/dist/0-face/dialogs.js +173 -0
- package/dist/0-face/drawer.d.ts +64 -0
- package/dist/0-face/drawer.d.ts.map +1 -0
- package/dist/0-face/drawer.js +256 -0
- package/dist/0-face/feedback-words.d.ts +21 -0
- package/dist/0-face/feedback-words.d.ts.map +1 -0
- package/dist/0-face/feedback-words.js +30 -0
- package/dist/0-face/feedback.d.ts +41 -0
- package/dist/0-face/feedback.d.ts.map +1 -0
- package/dist/0-face/feedback.js +35 -0
- package/dist/0-face/format.d.ts +166 -0
- package/dist/0-face/format.d.ts.map +1 -0
- package/dist/0-face/format.js +445 -0
- package/dist/0-face/generated/toast-assets.d.ts +11 -0
- package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
- package/dist/0-face/generated/toast-assets.js +14 -0
- package/dist/0-face/grid-fit.js +1 -1
- package/dist/0-face/grid.d.ts.map +1 -1
- package/dist/0-face/grid.js +2 -1
- package/dist/0-face/header.d.ts +38 -0
- package/dist/0-face/header.d.ts.map +1 -0
- package/dist/0-face/header.js +80 -0
- package/dist/0-face/i18n.d.ts +32 -2
- package/dist/0-face/i18n.d.ts.map +1 -1
- package/dist/0-face/i18n.js +65 -19
- package/dist/0-face/keys.d.ts +104 -0
- package/dist/0-face/keys.d.ts.map +1 -0
- package/dist/0-face/keys.js +253 -0
- package/dist/0-face/languages.d.ts +2 -2
- package/dist/0-face/languages.js +3 -3
- package/dist/0-face/layout-inspector.js +6 -6
- package/dist/0-face/library-styles.d.ts +7 -0
- package/dist/0-face/library-styles.d.ts.map +1 -0
- package/dist/0-face/library-styles.js +29 -0
- package/dist/0-face/load-toaster.d.ts +8 -0
- package/dist/0-face/load-toaster.d.ts.map +1 -0
- package/dist/0-face/load-toaster.js +7 -0
- package/dist/0-face/preference-options.d.ts +34 -0
- package/dist/0-face/preference-options.d.ts.map +1 -0
- package/dist/0-face/preference-options.js +1 -0
- package/dist/0-face/preferences.d.ts +3 -12
- package/dist/0-face/preferences.d.ts.map +1 -1
- package/dist/0-face/pricing.d.ts +19 -9
- package/dist/0-face/pricing.d.ts.map +1 -1
- package/dist/0-face/pricing.js +81 -40
- package/dist/0-face/scaling.d.ts +71 -1
- package/dist/0-face/scaling.d.ts.map +1 -1
- package/dist/0-face/scaling.js +108 -3
- package/dist/0-face/shared-words.d.ts +9 -4
- package/dist/0-face/shared-words.d.ts.map +1 -1
- package/dist/0-face/sidebar.d.ts +69 -0
- package/dist/0-face/sidebar.d.ts.map +1 -0
- package/dist/0-face/sidebar.js +191 -0
- package/dist/0-face/theme-bootstrap.d.ts +1 -0
- package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
- package/dist/0-face/theme-bootstrap.js +214 -0
- package/dist/0-face/theme.d.ts +32 -0
- package/dist/0-face/theme.d.ts.map +1 -1
- package/dist/0-face/theme.js +69 -43
- package/dist/0-face/toast-queue.d.ts +110 -0
- package/dist/0-face/toast-queue.d.ts.map +1 -0
- package/dist/0-face/toast-queue.js +98 -0
- package/dist/0-face/toaster.d.ts +27 -0
- package/dist/0-face/toaster.d.ts.map +1 -0
- package/dist/0-face/toaster.js +373 -0
- package/dist/0-face/tooltips.d.ts +24 -1
- package/dist/0-face/tooltips.d.ts.map +1 -1
- package/dist/0-face/tooltips.js +155 -16
- package/dist/0-face/translations/da.json +60 -1
- package/dist/0-face/translations/de.json +60 -1
- package/dist/0-face/translations/en.json +60 -1
- package/dist/0-face/translations/es.json +60 -1
- package/dist/0-face/translations/fi.json +60 -1
- package/dist/0-face/translations/fr.json +60 -1
- package/dist/0-face/translations/is.json +60 -1
- package/dist/0-face/translations/it.json +60 -1
- package/dist/0-face/translations/ja.json +60 -1
- package/dist/0-face/translations/ko.json +60 -1
- package/dist/0-face/translations/nb.json +60 -1
- package/dist/0-face/translations/pt-BR.json +60 -1
- package/dist/0-face/translations/pt.json +60 -1
- package/dist/0-face/translations/sv.json +60 -1
- package/dist/0-face/translations/zh.json +60 -1
- package/dist/0-face/translations-format.d.ts.map +1 -1
- package/dist/0-face/translations-format.js +3 -4
- package/dist/1-root/library-tokens.d.ts +31 -0
- package/dist/1-root/library-tokens.d.ts.map +1 -0
- package/dist/1-root/library-tokens.js +84 -0
- package/dist/1-root/measures.d.ts +52 -0
- package/dist/1-root/measures.d.ts.map +1 -0
- package/dist/1-root/measures.js +49 -0
- package/dist/1-root/palette.d.ts +5 -0
- package/dist/1-root/palette.d.ts.map +1 -1
- package/dist/1-root/palette.js +18 -0
- package/dist/2-core/button-split.d.ts +21 -0
- package/dist/2-core/button-split.d.ts.map +1 -0
- package/dist/2-core/button-split.js +48 -0
- package/dist/2-core/chart/grid-chart.d.ts +113 -0
- package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
- package/dist/2-core/chart/grid-chart.js +466 -0
- package/dist/2-core/ds-avatar.d.ts +20 -3
- package/dist/2-core/ds-avatar.d.ts.map +1 -1
- package/dist/2-core/ds-avatar.js +19 -5
- package/dist/2-core/ds-badge.js +10 -13
- package/dist/2-core/ds-button.d.ts +76 -0
- package/dist/2-core/ds-button.d.ts.map +1 -1
- package/dist/2-core/ds-button.js +101 -26
- package/dist/2-core/ds-card.d.ts +76 -11
- package/dist/2-core/ds-card.d.ts.map +1 -1
- package/dist/2-core/ds-card.js +129 -105
- package/dist/2-core/ds-chart.d.ts +105 -0
- package/dist/2-core/ds-chart.d.ts.map +1 -0
- package/dist/2-core/ds-chart.js +390 -0
- package/dist/2-core/ds-composer.d.ts +7 -0
- package/dist/2-core/ds-composer.d.ts.map +1 -1
- package/dist/2-core/ds-composer.js +1 -1
- package/dist/2-core/ds-cycle.d.ts +36 -2
- package/dist/2-core/ds-cycle.d.ts.map +1 -1
- package/dist/2-core/ds-cycle.js +95 -18
- package/dist/2-core/ds-empty.d.ts +74 -0
- package/dist/2-core/ds-empty.d.ts.map +1 -0
- package/dist/2-core/ds-empty.js +96 -0
- package/dist/2-core/ds-icon.d.ts +6 -0
- package/dist/2-core/ds-icon.d.ts.map +1 -1
- package/dist/2-core/ds-icon.js +12 -2
- package/dist/2-core/ds-input.d.ts +39 -1
- package/dist/2-core/ds-input.d.ts.map +1 -1
- package/dist/2-core/ds-input.js +150 -6
- package/dist/2-core/ds-message.d.ts +154 -0
- package/dist/2-core/ds-message.d.ts.map +1 -0
- package/dist/2-core/ds-message.js +177 -0
- package/dist/2-core/ds-notice.d.ts +13 -0
- package/dist/2-core/ds-notice.d.ts.map +1 -0
- package/dist/2-core/ds-notice.js +11 -0
- package/dist/2-core/ds-progress.d.ts +200 -0
- package/dist/2-core/ds-progress.d.ts.map +1 -0
- package/dist/2-core/ds-progress.js +319 -0
- package/dist/2-core/ds-stat.d.ts +126 -0
- package/dist/2-core/ds-stat.d.ts.map +1 -0
- package/dist/2-core/ds-stat.js +137 -0
- package/dist/2-core/ds-switch.d.ts +1 -0
- package/dist/2-core/ds-switch.d.ts.map +1 -1
- package/dist/2-core/ds-switch.js +1 -0
- package/dist/2-core/ds-text.d.ts +15 -2
- package/dist/2-core/ds-text.d.ts.map +1 -1
- package/dist/2-core/ds-text.js +13 -0
- package/dist/2-core/ds-toast.d.ts +139 -0
- package/dist/2-core/ds-toast.d.ts.map +1 -0
- package/dist/2-core/ds-toast.js +329 -0
- package/dist/2-core/figures.d.ts +56 -0
- package/dist/2-core/figures.d.ts.map +1 -0
- package/dist/2-core/figures.js +70 -0
- package/dist/2-core/generated/ds-icon-map.d.ts +120 -65
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
- package/dist/2-core/generated/ds-icon-map.js +238 -128
- package/dist/2-core/generated/icon-avatar.d.ts +2 -0
- package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
- package/dist/2-core/generated/icon-avatar.js +2 -0
- package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
- package/dist/2-core/generated/icons-extra.js +120 -65
- package/dist/2-core/generated/icons-immediate.d.ts +1 -1
- package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
- package/dist/2-core/generated/icons-immediate.js +1 -1
- package/dist/3-unit/calendar-base.d.ts +149 -0
- package/dist/3-unit/calendar-base.d.ts.map +1 -0
- package/dist/3-unit/calendar-base.js +172 -0
- package/dist/3-unit/ds-accordion.d.ts +9 -0
- package/dist/3-unit/ds-accordion.d.ts.map +1 -1
- package/dist/3-unit/ds-accordion.js +7 -1
- package/dist/3-unit/ds-avatar-group.d.ts +1 -0
- package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
- package/dist/3-unit/ds-calendar-large.d.ts +138 -0
- package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar-large.js +305 -0
- package/dist/3-unit/ds-calendar.d.ts +175 -0
- package/dist/3-unit/ds-calendar.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar.js +303 -0
- package/dist/3-unit/ds-carousel.d.ts +182 -0
- package/dist/3-unit/ds-carousel.d.ts.map +1 -0
- package/dist/3-unit/ds-carousel.js +327 -0
- package/dist/3-unit/ds-date-picker.d.ts +203 -0
- package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
- package/dist/3-unit/ds-date-picker.js +499 -0
- package/dist/3-unit/ds-form.d.ts.map +1 -1
- package/dist/3-unit/ds-form.js +38 -28
- package/dist/3-unit/ds-list.d.ts +12 -0
- package/dist/3-unit/ds-list.d.ts.map +1 -1
- package/dist/3-unit/ds-list.js +52 -1
- package/dist/3-unit/ds-matrix.d.ts +146 -0
- package/dist/3-unit/ds-matrix.d.ts.map +1 -0
- package/dist/3-unit/ds-matrix.js +248 -0
- package/dist/3-unit/ds-menu.d.ts +1 -1
- package/dist/3-unit/ds-menu.d.ts.map +1 -1
- package/dist/3-unit/ds-menu.js +7 -4
- package/dist/3-unit/ds-row.d.ts +66 -0
- package/dist/3-unit/ds-row.d.ts.map +1 -1
- package/dist/3-unit/ds-row.js +80 -1
- package/dist/3-unit/ds-sidebar.d.ts +149 -0
- package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
- package/dist/3-unit/ds-sidebar.js +342 -0
- package/dist/3-unit/ds-table.d.ts +28 -10
- package/dist/3-unit/ds-table.d.ts.map +1 -1
- package/dist/3-unit/ds-table.js +53 -25
- package/dist/4-page/ds-dialog.d.ts +16 -1
- package/dist/4-page/ds-dialog.d.ts.map +1 -1
- package/dist/4-page/ds-dialog.js +39 -3
- package/dist/4-page/ds-document.d.ts +98 -0
- package/dist/4-page/ds-document.d.ts.map +1 -0
- package/dist/4-page/ds-document.js +213 -0
- package/dist/4-page/ds-footer.d.ts +100 -0
- package/dist/4-page/ds-footer.d.ts.map +1 -0
- package/dist/4-page/ds-footer.js +119 -0
- package/dist/4-page/ds-grid.d.ts +32 -12
- package/dist/4-page/ds-grid.d.ts.map +1 -1
- package/dist/4-page/ds-grid.js +30 -39
- package/dist/4-page/ds-header.d.ts +84 -0
- package/dist/4-page/ds-header.d.ts.map +1 -0
- package/dist/4-page/ds-header.js +143 -0
- package/dist/4-page/ds-page.d.ts +110 -0
- package/dist/4-page/ds-page.d.ts.map +1 -0
- package/dist/4-page/ds-page.js +155 -0
- package/dist/4-page/email.d.ts +2 -3
- package/dist/4-page/email.d.ts.map +1 -1
- package/dist/4-page/email.js +2 -3
- package/dist/components.d.ts +4 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -1
- package/dist/design-system-1.bundle.js +12322 -5523
- package/dist/design-system-1.bundle.js.map +1 -1
- package/dist/design-system-1.bundle.min.js +8771 -4115
- package/dist/design-system-1.bundle.min.js.map +1 -1
- package/dist/design-system-1.css +1 -1
- package/dist/feedback.js +541 -0
- package/dist/feedback.js.map +1 -0
- package/dist/{icons-extra-BoAACA4X.js → icons-extra-CiDDs7_-.js} +404 -312
- package/dist/icons-extra-CiDDs7_-.js.map +1 -0
- package/dist/{icons-extra-DlxTo_Y4.js → icons-extra-hauwCx07.js} +121 -66
- package/dist/icons-extra-hauwCx07.js.map +1 -0
- package/dist/index.d.ts +21 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -6
- package/dist/react/avatar.d.ts +5 -9
- package/dist/react/avatar.d.ts.map +1 -1
- package/dist/react/avatar.js +2 -2
- package/dist/react/button-split.d.ts +19 -0
- package/dist/react/button-split.d.ts.map +1 -0
- package/dist/react/{split.js → button-split.js} +12 -9
- package/dist/react/button.d.ts +18 -7
- package/dist/react/button.d.ts.map +1 -1
- package/dist/react/button.js +13 -4
- package/dist/react/carousel.d.ts +63 -0
- package/dist/react/carousel.d.ts.map +1 -0
- package/dist/react/carousel.js +47 -0
- package/dist/react/choice.d.ts +1 -1
- package/dist/react/context-menu.d.ts +337 -337
- package/dist/react/dialog.d.ts +684 -678
- package/dist/react/dialog.d.ts.map +1 -1
- package/dist/react/dialog.js +29 -3
- package/dist/react/document.d.ts +11 -0
- package/dist/react/document.d.ts.map +1 -0
- package/dist/react/document.js +10 -0
- package/dist/react/empty.d.ts +34 -0
- package/dist/react/empty.d.ts.map +1 -0
- package/dist/react/empty.js +8 -0
- package/dist/react/file-picker.d.ts +1 -1
- package/dist/react/footer.d.ts +13 -0
- package/dist/react/footer.d.ts.map +1 -0
- package/dist/react/footer.js +12 -0
- package/dist/react/header.d.ts +12 -0
- package/dist/react/header.d.ts.map +1 -0
- package/dist/react/header.js +11 -0
- package/dist/react/input.d.ts +31 -9
- package/dist/react/input.d.ts.map +1 -1
- package/dist/react/input.js +94 -94
- package/dist/react/message.d.ts +66 -0
- package/dist/react/message.d.ts.map +1 -0
- package/dist/react/message.js +37 -0
- package/dist/react/notice.d.ts +45 -0
- package/dist/react/notice.d.ts.map +1 -0
- package/dist/react/notice.js +34 -0
- package/dist/react/page.d.ts +10 -0
- package/dist/react/page.d.ts.map +1 -0
- package/dist/react/page.js +9 -0
- package/dist/react/progress.d.ts +107 -0
- package/dist/react/progress.d.ts.map +1 -0
- package/dist/react/progress.js +47 -0
- package/dist/react/sidebar.d.ts +54 -0
- package/dist/react/sidebar.d.ts.map +1 -0
- package/dist/react/sidebar.js +48 -0
- package/dist/react/stat.d.ts +78 -0
- package/dist/react/stat.d.ts.map +1 -0
- package/dist/react/stat.js +25 -0
- package/dist/react/toast.d.ts +37 -0
- package/dist/react/toast.d.ts.map +1 -0
- package/dist/react/toast.js +55 -0
- package/dist/shared-words-CyZYc_De.js +1818 -0
- package/dist/shared-words-CyZYc_De.js.map +1 -0
- package/dist/shared-words-DAVSET4Z.js +1800 -0
- package/dist/shared-words-DAVSET4Z.js.map +1 -0
- package/package.json +19 -6
- package/DS1/2-core/ds-banner.ts +0 -122
- package/DS1/2-core/ds-date.ts +0 -24
- package/DS1/2-core/ds-language.ts +0 -94
- package/DS1/2-core/ds-pagedots.ts +0 -52
- package/DS1/2-core/ds-split.ts +0 -122
- package/DS1/2-core/ds-textarea.ts +0 -136
- package/DS1/2-core/styles/ds-banner.css +0 -77
- package/DS1/2-core/styles/ds-date.css +0 -9
- package/DS1/2-core/styles/ds-language.css +0 -78
- package/DS1/2-core/styles/ds-pagedots.css +0 -31
- package/DS1/2-core/styles/ds-textarea.css +0 -27
- package/DS1/4-page/ds-layout.ts +0 -949
- package/DS1/4-page/styles/ds-layout.css +0 -246
- package/DS1/react/split.ts +0 -42
- package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
- package/DS1/x-icon/ezo-account-close.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
- package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
- package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
- package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
- package/DS1/x-icon/ezo-block-accordion.svg +0 -1
- package/DS1/x-icon/ezo-block-divider.svg +0 -1
- package/DS1/x-icon/ezo-block-group.svg +0 -1
- package/DS1/x-icon/ezo-block-image.svg +0 -1
- package/DS1/x-icon/ezo-block-section.svg +0 -1
- package/DS1/x-icon/ezo-block-table.svg +0 -1
- package/DS1/x-icon/ezo-code.svg +0 -14
- package/DS1/x-icon/ezo-down.svg +0 -3
- package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
- package/DS1/x-icon/ezo-item-button-header.svg +0 -3
- package/DS1/x-icon/ezo-item-button-open.svg +0 -3
- package/DS1/x-icon/ezo-item-button-star.svg +0 -3
- package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
- package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
- package/DS1/x-icon/ezo-item-star.svg +0 -5
- package/DS1/x-icon/ezo-left.svg +0 -3
- package/DS1/x-icon/ezo-logo.svg +0 -1
- package/DS1/x-icon/ezo-mic.svg +0 -8
- package/DS1/x-icon/ezo-move-column.svg +0 -14
- package/DS1/x-icon/ezo-move-row.svg +0 -18
- package/DS1/x-icon/ezo-navigation-check.svg +0 -1
- package/DS1/x-icon/ezo-note-back.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
- package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
- package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
- package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
- package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
- package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
- package/DS1/x-icon/ezo-note-more.svg +0 -7
- package/DS1/x-icon/ezo-note-star.svg +0 -5
- package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
- package/DS1/x-icon/ezo-play.svg +0 -5
- package/DS1/x-icon/ezo-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
- package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
- package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
- package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
- package/DS1/x-icon/ezo-setting-blank.svg +0 -5
- package/DS1/x-icon/ezo-store-chevron.svg +0 -1
- package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
- package/DS1/x-icon/product-sources.json +0 -2557
- package/dist/2-core/ds-banner.d.ts +0 -68
- package/dist/2-core/ds-banner.d.ts.map +0 -1
- package/dist/2-core/ds-banner.js +0 -98
- package/dist/2-core/ds-date.d.ts +0 -16
- package/dist/2-core/ds-date.d.ts.map +0 -1
- package/dist/2-core/ds-date.js +0 -15
- package/dist/2-core/ds-language.d.ts +0 -75
- package/dist/2-core/ds-language.d.ts.map +0 -1
- package/dist/2-core/ds-language.js +0 -74
- package/dist/2-core/ds-pagedots.d.ts +0 -32
- package/dist/2-core/ds-pagedots.d.ts.map +0 -1
- package/dist/2-core/ds-pagedots.js +0 -36
- package/dist/2-core/ds-split.d.ts +0 -75
- package/dist/2-core/ds-split.d.ts.map +0 -1
- package/dist/2-core/ds-split.js +0 -101
- package/dist/2-core/ds-textarea.d.ts +0 -46
- package/dist/2-core/ds-textarea.d.ts.map +0 -1
- package/dist/2-core/ds-textarea.js +0 -121
- package/dist/4-page/ds-layout.d.ts +0 -31
- package/dist/4-page/ds-layout.d.ts.map +0 -1
- package/dist/4-page/ds-layout.js +0 -930
- package/dist/icons-extra-BoAACA4X.js.map +0 -1
- package/dist/icons-extra-DlxTo_Y4.js.map +0 -1
- package/dist/react/split.d.ts +0 -15
- package/dist/react/split.d.ts.map +0 -1
- package/dist/shared-words-Cg6Phtx0.js +0 -915
- package/dist/shared-words-Cg6Phtx0.js.map +0 -1
- package/dist/shared-words-Ddz0yUEF.js +0 -933
- package/dist/shared-words-Ddz0yUEF.js.map +0 -1
- /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
- /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { html, LitElement, nothing, unsafeCSS, type PropertyValues } from "lit";
|
|
2
|
+
import { property, state } from "lit/decorators.js";
|
|
3
|
+
import { type DataPoint, drawSparkline, GridChart, type Marker, type Series, type SeriesKind } from "./chart/grid-chart";
|
|
4
|
+
|
|
5
|
+
import { define } from "../0-face/define";
|
|
6
|
+
import styles from "./chart/chart.css?inline";
|
|
7
|
+
export * from "./chart/grid-chart";
|
|
8
|
+
|
|
9
|
+
/** Independent chart configuration; no module-wide size or theme state. */
|
|
10
|
+
export class ChartElement extends LitElement {
|
|
11
|
+
static styles = unsafeCSS(styles);
|
|
12
|
+
@property({ type: Number }) unit = 20;
|
|
13
|
+
@property() grid: "full" | "rows" | "none" = "rows";
|
|
14
|
+
private media?: MediaQueryList;
|
|
15
|
+
private themeChanged = () => this.refreshTheme();
|
|
16
|
+
connectedCallback(): void {
|
|
17
|
+
super.connectedCallback();
|
|
18
|
+
this.media = globalThis.matchMedia?.("(prefers-color-scheme: dark)");
|
|
19
|
+
this.media?.addEventListener("change", this.themeChanged);
|
|
20
|
+
void this.updateComplete.then(() => {
|
|
21
|
+
if (!this.isConnected) return;
|
|
22
|
+
this.initialize();
|
|
23
|
+
this.refreshTheme();
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
disconnectedCallback(): void {
|
|
27
|
+
this.media?.removeEventListener("change", this.themeChanged);
|
|
28
|
+
super.disconnectedCallback();
|
|
29
|
+
}
|
|
30
|
+
protected initialize(): void {}
|
|
31
|
+
refreshTheme(): void { this.requestUpdate(); }
|
|
32
|
+
protected updated(_changed: PropertyValues): void {
|
|
33
|
+
if (!Number.isFinite(this.unit) || this.unit <= 0) this.unit = 20;
|
|
34
|
+
this.style.setProperty("--ds-chart-unit", `${this.unit}px`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Whole-pixel width of an element, kept current. */
|
|
39
|
+
function observeWidth(element: HTMLElement, callback: (width: number) => void): ResizeObserver {
|
|
40
|
+
const observer = new ResizeObserver(() => callback(Math.floor(element.getBoundingClientRect().width)));
|
|
41
|
+
observer.observe(element);
|
|
42
|
+
return observer;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class GridLineChart extends ChartElement {
|
|
46
|
+
connectedCallback(): void { this.dataset.chartKind = "line"; super.connectedCallback(); }
|
|
47
|
+
@property({ attribute: false }) data: DataPoint[] = [];
|
|
48
|
+
@property() kind: SeriesKind = "area";
|
|
49
|
+
@property({ type: Number }) base?: number;
|
|
50
|
+
@property() color = "--ds-chart-ink";
|
|
51
|
+
@property({ type: Number }) rows = 8;
|
|
52
|
+
@property({ attribute: false }) markers: Marker[] = [];
|
|
53
|
+
@property({ attribute: false }) timeRange: [number, number] | null = null;
|
|
54
|
+
@property({ type: Boolean }) extremes = false;
|
|
55
|
+
@property({ type: Boolean }) labels = false;
|
|
56
|
+
@property({ type: Boolean }) live = false;
|
|
57
|
+
@property({ attribute: false }) format: (value: number) => string = (v) => v.toFixed(2);
|
|
58
|
+
/** Changing this replays the draw-in. */
|
|
59
|
+
@property() drawKey = "";
|
|
60
|
+
|
|
61
|
+
@state() private dot: { x: number; y: number } | null = null;
|
|
62
|
+
|
|
63
|
+
private chart?: GridChart;
|
|
64
|
+
private series?: Series;
|
|
65
|
+
private observer?: ResizeObserver;
|
|
66
|
+
private scrubbing = false;
|
|
67
|
+
private dotTimer?: ReturnType<typeof setTimeout>;
|
|
68
|
+
refreshTheme(): void { this.chart?.refreshTheme(); }
|
|
69
|
+
|
|
70
|
+
render() {
|
|
71
|
+
return html`<canvas
|
|
72
|
+
@pointerdown=${this.down}
|
|
73
|
+
@pointermove=${this.move}
|
|
74
|
+
@pointerup=${this.up}
|
|
75
|
+
@pointercancel=${this.up}
|
|
76
|
+
@pointerleave=${this.leave}
|
|
77
|
+
></canvas
|
|
78
|
+
>${this.live && this.dot
|
|
79
|
+
? html`<span class="live-dot" style="transform: translate(${this.dot.x - 2}px, ${this.dot.y - 2}px)"></span>`
|
|
80
|
+
: nothing}`;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
protected initialize(): void {
|
|
84
|
+
if (this.chart) return;
|
|
85
|
+
const canvas = this.renderRoot.querySelector("canvas") as HTMLCanvasElement;
|
|
86
|
+
this.chart = new GridChart(canvas, {
|
|
87
|
+
extremes: this.extremes,
|
|
88
|
+
scaleLabels: this.labels,
|
|
89
|
+
format: this.format,
|
|
90
|
+
grid: this.grid,
|
|
91
|
+
unit: this.unit,
|
|
92
|
+
});
|
|
93
|
+
this.series = this.chart.addSeries(this.seriesOptions());
|
|
94
|
+
this.chart.subscribeCrosshairMove((event) => {
|
|
95
|
+
this.dispatchEvent(new CustomEvent("scrub", { detail: event.point, bubbles: true, composed: true }));
|
|
96
|
+
});
|
|
97
|
+
this.observer = observeWidth(this, (width) => {
|
|
98
|
+
this.chart?.resize(width, this.rows * this.unit);
|
|
99
|
+
this.placeDot();
|
|
100
|
+
});
|
|
101
|
+
void document.fonts?.ready.then(() => this.chart?.draw());
|
|
102
|
+
this.resizeToUnit();
|
|
103
|
+
this.sync(true);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
resizeToUnit(): void {
|
|
107
|
+
this.chart?.resize(Math.floor(this.getBoundingClientRect().width), this.rows * this.unit);
|
|
108
|
+
this.placeDot();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
updated(changed: PropertyValues<this>): void {
|
|
112
|
+
super.updated(changed);
|
|
113
|
+
if (!this.chart) return;
|
|
114
|
+
if (changed.has("unit") || changed.has("grid")) this.chart.applyOptions({ unit: this.unit, grid: this.grid });
|
|
115
|
+
if (changed.has("rows") || changed.has("unit")) this.resizeToUnit();
|
|
116
|
+
if (changed.has("extremes") || changed.has("labels") || changed.has("format")) {
|
|
117
|
+
this.chart.applyOptions({ extremes: this.extremes, scaleLabels: this.labels, format: this.format });
|
|
118
|
+
}
|
|
119
|
+
if (changed.has("data") || changed.has("kind") || changed.has("base") || changed.has("color") || changed.has("markers") || changed.has("timeRange")) {
|
|
120
|
+
this.sync(changed.has("drawKey"));
|
|
121
|
+
} else if (changed.has("drawKey")) {
|
|
122
|
+
this.sync(true);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
disconnectedCallback(): void {
|
|
127
|
+
super.disconnectedCallback();
|
|
128
|
+
this.observer?.disconnect();
|
|
129
|
+
clearTimeout(this.dotTimer);
|
|
130
|
+
this.chart?.destroy();
|
|
131
|
+
this.chart = undefined;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private seriesOptions() {
|
|
135
|
+
return { kind: this.kind, baseValue: this.base, color: this.color };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
private sync(animate: boolean): void {
|
|
139
|
+
if (!this.chart || !this.series) return;
|
|
140
|
+
this.chart.setTimeRange(this.timeRange);
|
|
141
|
+
this.series.applyOptions(this.seriesOptions());
|
|
142
|
+
this.series.setMarkers(this.markers);
|
|
143
|
+
this.series.setData(this.data);
|
|
144
|
+
if (animate) {
|
|
145
|
+
this.dot = null;
|
|
146
|
+
this.chart.animateIn();
|
|
147
|
+
clearTimeout(this.dotTimer);
|
|
148
|
+
this.dotTimer = setTimeout(() => this.placeDot(), 560);
|
|
149
|
+
} else {
|
|
150
|
+
this.placeDot();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private placeDot(): void {
|
|
155
|
+
const point = this.chart?.lastPoint() ?? null;
|
|
156
|
+
if (point?.x !== this.dot?.x || point?.y !== this.dot?.y) this.dot = point;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private x(event: PointerEvent): number {
|
|
160
|
+
return event.clientX - this.getBoundingClientRect().left;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private down = (event: PointerEvent) => {
|
|
164
|
+
if (event.button !== 0) return;
|
|
165
|
+
this.scrubbing = true;
|
|
166
|
+
(event.target as HTMLElement).setPointerCapture(event.pointerId);
|
|
167
|
+
this.chart?.setCrosshair(this.x(event));
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
private move = (event: PointerEvent) => {
|
|
171
|
+
if (this.scrubbing || event.pointerType === "mouse") this.chart?.setCrosshair(this.x(event));
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
private up = (event: PointerEvent) => {
|
|
175
|
+
this.scrubbing = false;
|
|
176
|
+
if (event.pointerType !== "mouse" || event.type === "pointercancel") this.chart?.setCrosshair(null);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
private leave = (event: PointerEvent) => {
|
|
180
|
+
if (!this.scrubbing && event.pointerType === "mouse") this.chart?.setCrosshair(null);
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export class GridSpark extends ChartElement {
|
|
185
|
+
connectedCallback(): void { this.dataset.chartKind = "spark"; super.connectedCallback(); }
|
|
186
|
+
@property({ attribute: false }) values: number[] = [];
|
|
187
|
+
@property({ type: Number }) base?: number;
|
|
188
|
+
@property({ type: Number }) cols = 4;
|
|
189
|
+
refreshTheme(): void { this.draw(); }
|
|
190
|
+
|
|
191
|
+
render() {
|
|
192
|
+
const last = this.values[this.values.length - 1] ?? 0;
|
|
193
|
+
const reference = this.base ?? this.values[0] ?? 0;
|
|
194
|
+
return html`<canvas class=${last >= reference ? "up" : "down"}></canvas>`;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
updated(changed: PropertyValues): void {
|
|
198
|
+
super.updated(changed);
|
|
199
|
+
this.draw();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private draw(): void {
|
|
203
|
+
const canvas = this.renderRoot.querySelector("canvas");
|
|
204
|
+
if (!canvas) return;
|
|
205
|
+
const style = getComputedStyle(canvas);
|
|
206
|
+
drawSparkline(canvas, this.values, {
|
|
207
|
+
width: this.cols * this.unit,
|
|
208
|
+
height: this.unit,
|
|
209
|
+
color: style.color,
|
|
210
|
+
base: this.base,
|
|
211
|
+
faint: style.borderTopColor,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export interface BarItem {
|
|
217
|
+
label: string;
|
|
218
|
+
value: number;
|
|
219
|
+
/** Drawn as an outline at its height, e.g. the expected figure. */
|
|
220
|
+
compare?: number;
|
|
221
|
+
tone?: "up" | "down" | "ink";
|
|
222
|
+
caption?: string;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export class GridBars extends ChartElement {
|
|
226
|
+
connectedCallback(): void { this.dataset.chartKind = "bars"; super.connectedCallback(); }
|
|
227
|
+
@property({ attribute: false }) items: BarItem[] = [];
|
|
228
|
+
@property({ type: Number }) rows = 4;
|
|
229
|
+
@property({ type: Number }) span = 2;
|
|
230
|
+
|
|
231
|
+
render() {
|
|
232
|
+
const height = (this.rows - 1) * this.unit;
|
|
233
|
+
const max = Math.max(...this.items.flatMap((item) => [item.value, item.compare ?? 0]), 1e-9);
|
|
234
|
+
const px = (v: number) => Math.max(1, Math.round((v / max) * (height - 4)));
|
|
235
|
+
return html`<div class="bars" style="--span: ${this.span}">
|
|
236
|
+
${this.items.map(
|
|
237
|
+
(item) => html`<div class="bar-cell">
|
|
238
|
+
<div class="bar-area" style="height: ${height}px">
|
|
239
|
+
${item.compare !== undefined
|
|
240
|
+
? html`<span class="bar-compare" style="height: ${px(item.compare)}px"></span>`
|
|
241
|
+
: nothing}
|
|
242
|
+
${item.value > 0
|
|
243
|
+
? html`<span class="bar-fill ${item.tone ?? "ink"}" style="height: ${px(item.value)}px"></span>`
|
|
244
|
+
: nothing}
|
|
245
|
+
</div>
|
|
246
|
+
<span class="bar-caption">${item.caption ?? ""}</span>
|
|
247
|
+
<span class="bar-label">${item.label}</span>
|
|
248
|
+
</div>`,
|
|
249
|
+
)}
|
|
250
|
+
</div>`;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export class GridRatio extends ChartElement {
|
|
255
|
+
connectedCallback(): void { this.dataset.chartKind = "ratio"; super.connectedCallback(); }
|
|
256
|
+
@property({ type: Number }) value = 0.5;
|
|
257
|
+
@state() private width = 0;
|
|
258
|
+
private observer?: ResizeObserver;
|
|
259
|
+
|
|
260
|
+
protected initialize(): void {
|
|
261
|
+
this.observer?.disconnect();
|
|
262
|
+
this.observer = observeWidth(this, (width) => {
|
|
263
|
+
this.width = width;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
disconnectedCallback(): void {
|
|
268
|
+
super.disconnectedCallback();
|
|
269
|
+
this.observer?.disconnect();
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
render() {
|
|
273
|
+
const left = Math.round(Math.max(0, this.width - 1) * Math.max(0, Math.min(1, this.value)));
|
|
274
|
+
return html`<span class="ratio-buy" style="width: ${left}px"></span
|
|
275
|
+
><span class="ratio-sell" style="width: ${Math.max(0, this.width - left - 1)}px"></span>`;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export interface RangeMark {
|
|
280
|
+
value: number;
|
|
281
|
+
label?: string;
|
|
282
|
+
kind: "dot" | "tick";
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
export class GridRange extends ChartElement {
|
|
286
|
+
connectedCallback(): void { this.dataset.chartKind = "range"; super.connectedCallback(); }
|
|
287
|
+
@property({ type: Number }) min = 0;
|
|
288
|
+
@property({ type: Number }) max = 1;
|
|
289
|
+
@property({ type: Number }) from = 0;
|
|
290
|
+
@property({ type: Number }) to = 1;
|
|
291
|
+
@property({ attribute: false }) marks: RangeMark[] = [];
|
|
292
|
+
@state() private width = 0;
|
|
293
|
+
private observer?: ResizeObserver;
|
|
294
|
+
|
|
295
|
+
protected initialize(): void {
|
|
296
|
+
this.observer?.disconnect();
|
|
297
|
+
this.observer = observeWidth(this, (width) => {
|
|
298
|
+
this.width = width;
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
disconnectedCallback(): void {
|
|
303
|
+
super.disconnectedCallback();
|
|
304
|
+
this.observer?.disconnect();
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
render() {
|
|
308
|
+
const span = Math.max(1e-9, this.max - this.min);
|
|
309
|
+
const x = (v: number) => Math.round(((v - this.min) / span) * (this.width - 1));
|
|
310
|
+
const left = x(this.from);
|
|
311
|
+
const right = x(this.to);
|
|
312
|
+
return html`<span class="range-track"></span>
|
|
313
|
+
<span class="range-fill" style="transform: translateX(${left}px); width: ${Math.max(1, right - left + 1)}px"></span>
|
|
314
|
+
${this.marks.map(
|
|
315
|
+
(mark) =>
|
|
316
|
+
html`<span class="range-${mark.kind}" style="transform: translateX(${x(mark.value) - (mark.kind === "dot" ? 2 : 0)}px)"
|
|
317
|
+
>${mark.label ? html`<span class="range-label">${mark.label}</span>` : nothing}</span
|
|
318
|
+
>`,
|
|
319
|
+
)}`;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
define("ds-chart", GridLineChart);
|
|
324
|
+
define("ds-spark", GridSpark);
|
|
325
|
+
define("ds-bars", GridBars);
|
|
326
|
+
define("ds-ratio", GridRatio);
|
|
327
|
+
define("ds-range", GridRange);
|
|
@@ -14,7 +14,13 @@ function styleRoot(root: Node) {
|
|
|
14
14
|
styledRoots.add(root);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* A range of the text, in UTF-16 offsets. `color` is any CSS colour, the
|
|
19
|
+
* accent when left out. By default the words are tinted with it; with `fill`
|
|
20
|
+
* the colour itself lies behind the words, which stay in the text colour, so
|
|
21
|
+
* a pale colour shows and every palette colour keeps the words readable.
|
|
22
|
+
*/
|
|
23
|
+
export type TextHighlight = { start: number; end: number; color?: string; fill?: boolean };
|
|
18
24
|
|
|
19
25
|
/** A native writing field with metric-preserving highlights. Products own the
|
|
20
26
|
* text and mention data; DS1 owns its face, growth and synchronized overlay.
|
|
@@ -173,7 +179,7 @@ export class Composer extends LitElement {
|
|
|
173
179
|
const parts = this.validHighlights().map(range => {
|
|
174
180
|
const before = this.text.slice(cursor, range.start);
|
|
175
181
|
cursor = range.end;
|
|
176
|
-
return html`${before}<mark style=${styleMap({ "--composer-highlight-color": range.color || undefined })}>${this.text.slice(range.start, range.end)}</mark>`;
|
|
182
|
+
return html`${before}<mark class=${range.fill ? "fill" : ""} style=${styleMap({ "--composer-highlight-color": range.color || undefined })}>${this.text.slice(range.start, range.end)}</mark>`;
|
|
177
183
|
});
|
|
178
184
|
return html`<span class="row-metric" aria-hidden="true"></span><slot @slotchange=${this.bindControl}></slot><div class="mirror" aria-hidden="true">${parts}${this.text.slice(cursor)}${"\n"}</div>`;
|
|
179
185
|
}
|
package/DS1/2-core/ds-cycle.ts
CHANGED
|
@@ -8,8 +8,9 @@ import {
|
|
|
8
8
|
setLanguage,
|
|
9
9
|
} from "../0-face/i18n";
|
|
10
10
|
import type { LanguageCode } from "../0-face/i18n";
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
11
|
+
import { LANGUAGE_METADATA, isLanguage, normalizeLanguage } from "../0-face/languages";
|
|
12
|
+
import { currentThemeMode, setThemeMode, THEME_MODES } from "../0-face/theme";
|
|
13
|
+
import type { ThemeMode } from "../0-face/theme";
|
|
13
14
|
import { savePreferences } from "../0-face/preferences";
|
|
14
15
|
import "./ds-button";
|
|
15
16
|
import "./ds-icon";
|
|
@@ -50,14 +51,34 @@ const getPageStyle = (): string => {
|
|
|
50
51
|
|
|
51
52
|
// App width utilities removed
|
|
52
53
|
|
|
54
|
+
// The settings a cycle knows by name. Any other cycle steps through its own
|
|
55
|
+
// `values` and reports each step as a `change` event.
|
|
56
|
+
/**
|
|
57
|
+
* A language's name in the language itself (`Dansk`, `日本語`): from the
|
|
58
|
+
* language list, else from the browser, else the code.
|
|
59
|
+
*/
|
|
60
|
+
export function nativeLanguageName(code: string): string {
|
|
61
|
+
if (!code) return "";
|
|
62
|
+
if (isLanguage(code)) return LANGUAGE_METADATA[code].nativeLabel;
|
|
63
|
+
const member = normalizeLanguage(code, null);
|
|
64
|
+
if (member) return LANGUAGE_METADATA[member].nativeLabel;
|
|
65
|
+
return getLanguageDisplayName(code, { locale: code });
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const SETTINGS = new Set(["language", "theme", "accent-color", "notes-style-medium", "page-style", "icon-only"]);
|
|
69
|
+
|
|
53
70
|
// Use a regular class with proper TypeScript type declarations and JSDoc comments
|
|
54
71
|
export class Cycle extends LitElement {
|
|
55
72
|
static formAssociated = true;
|
|
56
73
|
// Define reactive properties using Lit's property system
|
|
57
74
|
static get properties() {
|
|
58
75
|
return {
|
|
59
|
-
type: { type: String },
|
|
76
|
+
type: { type: String, reflect: true },
|
|
77
|
+
// Compatibility attribute; every language picker now uses the normal button.
|
|
78
|
+
chip: { type: Boolean, reflect: true },
|
|
60
79
|
values: { type: Array },
|
|
80
|
+
value: { type: String },
|
|
81
|
+
label: { type: String, reflect: true },
|
|
61
82
|
currentValue: { type: String, state: true }, // Make this a private state property
|
|
62
83
|
translationsReady: { type: Boolean, state: true }, // Track if translations are loaded
|
|
63
84
|
disabled: { type: Boolean, reflect: true },
|
|
@@ -76,7 +97,14 @@ export class Cycle extends LitElement {
|
|
|
76
97
|
// Add runtime properties using the any type
|
|
77
98
|
// These are just for TypeScript and don't create shadowing fields
|
|
78
99
|
declare type: string;
|
|
100
|
+
declare chip: boolean;
|
|
79
101
|
declare values: string[];
|
|
102
|
+
declare value: string;
|
|
103
|
+
/**
|
|
104
|
+
* The setting's name, a translation key: the button is announced as
|
|
105
|
+
* "Size: 40" while its face shows the value alone.
|
|
106
|
+
*/
|
|
107
|
+
declare label: string;
|
|
80
108
|
declare currentValue: string;
|
|
81
109
|
declare translationsReady: boolean;
|
|
82
110
|
declare disabled: boolean;
|
|
@@ -103,7 +131,10 @@ export class Cycle extends LitElement {
|
|
|
103
131
|
|
|
104
132
|
// Initialize properties with default values
|
|
105
133
|
this.type = "";
|
|
134
|
+
this.chip = false;
|
|
106
135
|
this.values = [];
|
|
136
|
+
this.value = "";
|
|
137
|
+
this.label = "";
|
|
107
138
|
this.currentValue = "";
|
|
108
139
|
this.translationsReady = false;
|
|
109
140
|
this.disabled = false;
|
|
@@ -154,19 +185,17 @@ export class Cycle extends LitElement {
|
|
|
154
185
|
this.initializeValues();
|
|
155
186
|
}
|
|
156
187
|
|
|
157
|
-
|
|
188
|
+
// Synchronous: nothing here waits, and a thrown error should surface where it happens.
|
|
189
|
+
initializeValues(): void {
|
|
158
190
|
if (this.type === "language") {
|
|
159
191
|
// Dynamically get available languages from translation data
|
|
160
192
|
const availableLanguages = getAvailableLanguagesSync();
|
|
161
193
|
this.values = availableLanguages;
|
|
162
194
|
this.currentValue = currentLanguage.value;
|
|
163
195
|
} else if (this.type === "theme") {
|
|
164
|
-
//
|
|
165
|
-
this.values = [
|
|
166
|
-
|
|
167
|
-
// Set initial value based on current theme
|
|
168
|
-
const currentThemeValue = currentTheme.get();
|
|
169
|
-
this.currentValue = currentThemeValue;
|
|
196
|
+
// Light, dark and the system's, the stored choice
|
|
197
|
+
this.values = [...THEME_MODES];
|
|
198
|
+
this.currentValue = currentThemeMode.get();
|
|
170
199
|
} else if (this.type === "accent-color") {
|
|
171
200
|
// Set up accent color cycling
|
|
172
201
|
this.values = [
|
|
@@ -225,15 +254,14 @@ export class Cycle extends LitElement {
|
|
|
225
254
|
}
|
|
226
255
|
}
|
|
227
256
|
|
|
228
|
-
|
|
257
|
+
setupInitialValue(): void {
|
|
229
258
|
if (this.type === "language") {
|
|
230
259
|
// Get current language
|
|
231
260
|
const currentLang = currentLanguage.value;
|
|
232
261
|
this.currentValue = currentLang;
|
|
233
262
|
} else if (this.type === "theme") {
|
|
234
|
-
//
|
|
235
|
-
|
|
236
|
-
this.currentValue = currentThemeValue;
|
|
263
|
+
// The stored choice, which may be the system's
|
|
264
|
+
this.currentValue = currentThemeMode.get();
|
|
237
265
|
} else if (this.type === "accent-color") {
|
|
238
266
|
// Get current accent color
|
|
239
267
|
const currentAccentColor = getAccentColor();
|
|
@@ -332,11 +360,11 @@ export class Cycle extends LitElement {
|
|
|
332
360
|
// Update current value
|
|
333
361
|
this.currentValue = newTheme;
|
|
334
362
|
|
|
335
|
-
// Set the new
|
|
336
|
-
|
|
363
|
+
// Set the new choice using the shared helper
|
|
364
|
+
setThemeMode(newTheme as ThemeMode);
|
|
337
365
|
|
|
338
366
|
// Save preferences
|
|
339
|
-
savePreferences({ theme: newTheme as
|
|
367
|
+
savePreferences({ theme: newTheme as ThemeMode });
|
|
340
368
|
|
|
341
369
|
// Theme helper already emits the change event, so no manual dispatch here
|
|
342
370
|
} else if (this.type === "accent-color") {
|
|
@@ -426,6 +454,10 @@ export class Cycle extends LitElement {
|
|
|
426
454
|
detail: { behavior: newIconOnlyValue },
|
|
427
455
|
})
|
|
428
456
|
);
|
|
457
|
+
} else if (!SETTINGS.has(this.type)) {
|
|
458
|
+
const next = this.values[(this.values.indexOf(this.currentValue) + 1) % this.values.length];
|
|
459
|
+
this.currentValue = this.value = next;
|
|
460
|
+
this.dispatchEvent(new CustomEvent("change", { detail: { value: next }, bubbles: true, composed: true }));
|
|
429
461
|
}
|
|
430
462
|
|
|
431
463
|
// Request update to re-render
|
|
@@ -434,9 +466,7 @@ export class Cycle extends LitElement {
|
|
|
434
466
|
|
|
435
467
|
getValueDisplay(value: string): string | any {
|
|
436
468
|
if (this.type === "language") {
|
|
437
|
-
return
|
|
438
|
-
locale: currentLanguage.value,
|
|
439
|
-
});
|
|
469
|
+
return nativeLanguageName(value);
|
|
440
470
|
} else if (this.type === "theme") {
|
|
441
471
|
// Try to get translated theme name
|
|
442
472
|
if (this.translationsReady) {
|
|
@@ -542,6 +572,12 @@ export class Cycle extends LitElement {
|
|
|
542
572
|
* first paint, so the inner button and any page sheet see the same word.
|
|
543
573
|
*/
|
|
544
574
|
willUpdate(changed: Map<PropertyKey, unknown>) {
|
|
575
|
+
// A cycle through its own values shows `value` when it is one of them,
|
|
576
|
+
// and otherwise the first.
|
|
577
|
+
if (!SETTINGS.has(this.type) && this.values.length) {
|
|
578
|
+
if (changed.has("value") && this.values.includes(this.value)) this.currentValue = this.value;
|
|
579
|
+
else if (!this.values.includes(this.currentValue)) this.currentValue = this.values.includes(this.value) ? this.value : this.values[0];
|
|
580
|
+
}
|
|
545
581
|
if (changed.has("variant") && this.variant) {
|
|
546
582
|
this.primary = this.variant === "primary";
|
|
547
583
|
this.secondary = this.variant === "secondary";
|
|
@@ -552,10 +588,50 @@ export class Cycle extends LitElement {
|
|
|
552
588
|
}
|
|
553
589
|
}
|
|
554
590
|
|
|
591
|
+
/** The words the face shows for the current value, for the accessible name. */
|
|
592
|
+
valueText(): string {
|
|
593
|
+
const value = this.currentValue;
|
|
594
|
+
if (this.type === "language") return nativeLanguageName(value);
|
|
595
|
+
if (this.type === "theme") return translate(value === "light" ? "Light" : value === "dark" ? "Dark" : "System");
|
|
596
|
+
if (this.type === "accent-color") return translate(this.getColorKey(value));
|
|
597
|
+
if (this.type === "page-style" || this.type === "icon-only") return translate(value === "note" ? "Note" : "Page");
|
|
598
|
+
return value;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/** "Size: 40" when the cycle has a label, so the control is named while its face shows the value alone. */
|
|
602
|
+
accessibleLabel(): string {
|
|
603
|
+
if (this.label) return `${translate(this.label)}: ${this.valueText()}`;
|
|
604
|
+
// The language picker is always named: "Language: Dansk".
|
|
605
|
+
return this.type === "language" ? `${translate("Language")}: ${this.valueText()}` : "";
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* The language picker: a native button carrying the language's code as
|
|
610
|
+
* `lang`, so each name is set in its own typeface. Always uses the normal
|
|
611
|
+
* label-sized button; legacy `chip` and `compact` attributes do not change its width.
|
|
612
|
+
*/
|
|
613
|
+
private renderLanguagePicker() {
|
|
614
|
+
const code = this.currentValue || currentLanguage.value;
|
|
615
|
+
const button = html`<button
|
|
616
|
+
type="button"
|
|
617
|
+
lang=${code}
|
|
618
|
+
aria-label=${this.accessibleLabel()}
|
|
619
|
+
?disabled=${this.disabled || this._fieldsetDisabled}
|
|
620
|
+
@click=${this.handleButtonClick}
|
|
621
|
+
>
|
|
622
|
+
${nativeLanguageName(code)}
|
|
623
|
+
</button>`;
|
|
624
|
+
return html`<ds-button fit control="slotted"
|
|
625
|
+
?primary=${this.primary && !this.secondary} ?secondary=${this.secondary}
|
|
626
|
+
?disabled=${this.disabled || this._fieldsetDisabled}>${button}</ds-button>`;
|
|
627
|
+
}
|
|
628
|
+
|
|
555
629
|
render() {
|
|
630
|
+
if (this.type === "language") return this.renderLanguagePicker();
|
|
556
631
|
return html`
|
|
557
632
|
<div class="cycle">
|
|
558
633
|
<ds-button fit
|
|
634
|
+
.label=${this.accessibleLabel()}
|
|
559
635
|
?primary=${this.primary && !this.secondary}
|
|
560
636
|
?secondary=${this.secondary}
|
|
561
637
|
?disabled=${this.disabled || this._fieldsetDisabled}
|
|
@@ -572,7 +648,7 @@ export class Cycle extends LitElement {
|
|
|
572
648
|
></ds-text>`
|
|
573
649
|
: this.type === "theme"
|
|
574
650
|
? html`<ds-text
|
|
575
|
-
text=${this.currentValue === "light" ? "Light" : "Dark"}
|
|
651
|
+
text=${this.currentValue === "light" ? "Light" : this.currentValue === "dark" ? "Dark" : "System"}
|
|
576
652
|
></ds-text>`
|
|
577
653
|
: this.type === "accent-color"
|
|
578
654
|
? html`<ds-text
|