@0001-labs/design-system-1 0.3.0-alpha.13 → 0.3.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DS1/0-face/calendar.ts +194 -0
- package/DS1/0-face/carousel.ts +623 -0
- package/DS1/0-face/component-visibility.ts +13 -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 +887 -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/kbd.css +46 -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 +297 -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-kbd.ts +78 -0
- package/DS1/2-core/ds-loading.ts +72 -0
- package/DS1/2-core/ds-notice.ts +180 -0
- package/DS1/2-core/ds-progress.ts +380 -0
- package/DS1/2-core/ds-spacing-handle.ts +22 -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 +234 -128
- package/DS1/2-core/generated/icon-avatar.ts +2 -0
- package/DS1/2-core/generated/icons-extra.ts +118 -65
- package/DS1/2-core/generated/icons-immediate.ts +1 -1
- package/DS1/2-core/spacing-handle.ts +95 -0
- 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 +69 -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-kbd.css +12 -0
- package/DS1/2-core/styles/ds-loading.css +13 -0
- package/DS1/2-core/styles/ds-notice.css +30 -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-spacing-handle.css +8 -0
- 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 +280 -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 +117 -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 +26 -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/kbd.ts +21 -0
- package/DS1/react/loading.ts +18 -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 +60 -0
- package/DS1/react/spacing-handle.ts +21 -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-item-button-start.svg → chevron-left.svg} +1 -1
- package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-right.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/{ezo-android-screen-lists.svg → minus.svg} +1 -1
- 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/{ezo-item-button-reopen.svg → stop.svg} +1 -1
- 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 +10 -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/0-face/tree.d.ts +69 -0
- package/dist/0-face/tree.d.ts.map +1 -0
- package/dist/0-face/tree.js +191 -0
- 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-banner.d.ts +23 -7
- package/dist/2-core/ds-banner.d.ts.map +1 -1
- package/dist/2-core/ds-banner.js +48 -12
- 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-kbd.d.ts +48 -0
- package/dist/2-core/ds-kbd.d.ts.map +1 -0
- package/dist/2-core/ds-kbd.js +65 -0
- package/dist/2-core/ds-language.d.ts +8 -1
- package/dist/2-core/ds-language.d.ts.map +1 -1
- package/dist/2-core/ds-language.js +2 -2
- package/dist/2-core/ds-loading.d.ts +40 -0
- package/dist/2-core/ds-loading.d.ts.map +1 -0
- package/dist/2-core/ds-loading.js +63 -0
- package/dist/2-core/ds-meter.d.ts +103 -0
- package/dist/2-core/ds-meter.d.ts.map +1 -0
- package/dist/2-core/ds-meter.js +124 -0
- package/dist/2-core/ds-notice.d.ts +103 -0
- package/dist/2-core/ds-notice.d.ts.map +1 -0
- package/dist/2-core/ds-notice.js +152 -0
- package/dist/2-core/ds-pagedots.d.ts +64 -7
- package/dist/2-core/ds-pagedots.d.ts.map +1 -1
- package/dist/2-core/ds-pagedots.js +124 -18
- 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-spacing-handle.d.ts +25 -0
- package/dist/2-core/ds-spacing-handle.d.ts.map +1 -0
- package/dist/2-core/ds-spacing-handle.js +25 -0
- package/dist/2-core/ds-split.d.ts +4 -67
- package/dist/2-core/ds-split.d.ts.map +1 -1
- package/dist/2-core/ds-split.js +4 -98
- 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-steps.d.ts +72 -0
- package/dist/2-core/ds-steps.d.ts.map +1 -0
- package/dist/2-core/ds-steps.js +114 -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-textarea.d.ts.map +1 -1
- package/dist/2-core/ds-textarea.js +1 -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/ds-toggle.d.ts +11 -0
- package/dist/2-core/ds-toggle.d.ts.map +1 -0
- package/dist/2-core/ds-toggle.js +10 -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 +118 -65
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
- package/dist/2-core/generated/ds-icon-map.js +234 -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 +118 -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/2-core/spacing-handle.d.ts +28 -0
- package/dist/2-core/spacing-handle.d.ts.map +1 -0
- package/dist/2-core/spacing-handle.js +146 -0
- 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 +108 -0
- package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
- package/dist/3-unit/ds-sidebar.js +268 -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/3-unit/ds-tree.d.ts +69 -0
- package/dist/3-unit/ds-tree.d.ts.map +1 -0
- package/dist/3-unit/ds-tree.js +136 -0
- 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-layout.d.ts +1 -0
- package/dist/4-page/ds-layout.d.ts.map +1 -1
- package/dist/4-page/ds-layout.js +1 -1
- 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 +11304 -4322
- package/dist/design-system-1.bundle.js.map +1 -1
- package/dist/design-system-1.bundle.min.js +8867 -4132
- 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-B4Iotc7s.js +298 -0
- package/dist/icons-extra-B4Iotc7s.js.map +1 -0
- package/dist/icons-extra-C4sCgoUj.js +185 -0
- package/dist/icons-extra-C4sCgoUj.js.map +1 -0
- package/dist/icons-extra-DSav6uTU.js +300 -0
- package/dist/icons-extra-DSav6uTU.js.map +1 -0
- package/dist/icons-extra-Dc_yVWIz.js +1024 -0
- package/dist/icons-extra-Dc_yVWIz.js.map +1 -0
- package/dist/icons-extra-cfzoudMf.js +1030 -0
- package/dist/icons-extra-cfzoudMf.js.map +1 -0
- package/dist/icons-extra-g_xpwZhZ.js +631 -0
- package/dist/icons-extra-g_xpwZhZ.js.map +1 -0
- package/dist/index.d.ts +23 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -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/button-split.js +35 -0
- 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/kbd.d.ts +26 -0
- package/dist/react/kbd.d.ts.map +1 -0
- package/dist/react/kbd.js +8 -0
- package/dist/react/loading.d.ts +14 -0
- package/dist/react/loading.d.ts.map +1 -0
- package/dist/react/loading.js +14 -0
- package/dist/react/meter.d.ts +64 -0
- package/dist/react/meter.d.ts.map +1 -0
- package/dist/react/meter.js +15 -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 +44 -0
- package/dist/react/sidebar.d.ts.map +1 -0
- package/dist/react/sidebar.js +41 -0
- package/dist/react/spacing-handle.d.ts +13 -0
- package/dist/react/spacing-handle.d.ts.map +1 -0
- package/dist/react/spacing-handle.js +18 -0
- package/dist/react/split.d.ts +6 -14
- package/dist/react/split.d.ts.map +1 -1
- package/dist/react/split.js +5 -31
- 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/steps.d.ts +36 -0
- package/dist/react/steps.d.ts.map +1 -0
- package/dist/react/steps.js +10 -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/react/tree.d.ts +31 -0
- package/dist/react/tree.d.ts.map +1 -0
- package/dist/react/tree.js +37 -0
- package/dist/shared-words-BfnT24Fe.js +1635 -0
- package/dist/shared-words-BfnT24Fe.js.map +1 -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/dist/shared-words-UCvnkctb.js +1653 -0
- package/dist/shared-words-UCvnkctb.js.map +1 -0
- package/package.json +16 -5
- 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/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,124 @@
|
|
|
1
|
+
// ds-meter.ts
|
|
2
|
+
// How much of a range a value fills, one square high: a bar half a square
|
|
3
|
+
// high, or the range in squares. Past the end it is "over", filled whole in
|
|
4
|
+
// the danger colour. Drawn by 1-root/figures.css, the same classes a page
|
|
5
|
+
// without scripts writes.
|
|
6
|
+
import { LitElement, html, unsafeCSS } from "lit";
|
|
7
|
+
import { getText } from "../0-face/i18n";
|
|
8
|
+
import { define } from "../0-face/define";
|
|
9
|
+
import { figureFormat, meterAria } from "./figures";
|
|
10
|
+
import metrics from "../1-root/component-metrics.css?inline";
|
|
11
|
+
import figures from "../1-root/figures.css?inline";
|
|
12
|
+
import styles from "./styles/ds-meter.css?inline";
|
|
13
|
+
/** The most squares a meter draws. */
|
|
14
|
+
const MOST_SQUARES = 100;
|
|
15
|
+
/**
|
|
16
|
+
* @element ds-meter
|
|
17
|
+
* @prop {number} value - The value. Past `max`, the meter is over.
|
|
18
|
+
* @prop {number} min - The start of the range, 0 by default.
|
|
19
|
+
* @prop {number} max - The end of the range, 1 by default.
|
|
20
|
+
* @prop {number} squares - Draw the range in this many squares, one square each, instead of a bar.
|
|
21
|
+
* @prop {boolean} over - Show the meter as over whatever its value, where the page decides it.
|
|
22
|
+
* @prop {string} label - The meter's name for assistive technology: a translation key, or literal words.
|
|
23
|
+
* @prop {string} valuetext - What the value says (`aria-valuetext`), in place of "7 of 10".
|
|
24
|
+
* @prop {"number" | "compact" | "percent" | "money"} format - How the value and the range are written in the words.
|
|
25
|
+
* @prop {string} currency - The ISO 4217 code for money.
|
|
26
|
+
* @prop {boolean} minor - The money is counted in the currency's minor unit.
|
|
27
|
+
* @prop {boolean} whole - Money in whole units only.
|
|
28
|
+
* @prop {number} digits - Decimals in the words.
|
|
29
|
+
* @prop {boolean} literal - Show `label` and `valuetext` as written, never looked up.
|
|
30
|
+
*
|
|
31
|
+
* The element is `role="meter"` with `aria-valuenow`, `aria-valuemin`,
|
|
32
|
+
* `aria-valuemax` and `aria-valuetext`. `aria-valuenow` stays inside the
|
|
33
|
+
* range, as ARIA requires; the words say when the value is past its end
|
|
34
|
+
* ("12 of 10, over by 2").
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* <ds-meter label="Spent" value="7400" max="10000" format="money" currency="DKK"></ds-meter>
|
|
38
|
+
* <ds-meter label="Seats" value="7" max="10" squares="10"></ds-meter>
|
|
39
|
+
*/
|
|
40
|
+
export class Meter extends LitElement {
|
|
41
|
+
constructor() {
|
|
42
|
+
super();
|
|
43
|
+
this.relabel = () => this.requestUpdate();
|
|
44
|
+
this.value = 0;
|
|
45
|
+
this.min = 0;
|
|
46
|
+
this.max = 1;
|
|
47
|
+
this.over = false;
|
|
48
|
+
this.format = "number";
|
|
49
|
+
this.minor = false;
|
|
50
|
+
this.whole = false;
|
|
51
|
+
this.literal = false;
|
|
52
|
+
}
|
|
53
|
+
connectedCallback() {
|
|
54
|
+
super.connectedCallback();
|
|
55
|
+
window.addEventListener("language-changed", this.relabel);
|
|
56
|
+
window.addEventListener("translations-loaded", this.relabel);
|
|
57
|
+
window.addEventListener("translations-ready", this.relabel);
|
|
58
|
+
}
|
|
59
|
+
disconnectedCallback() {
|
|
60
|
+
window.removeEventListener("language-changed", this.relabel);
|
|
61
|
+
window.removeEventListener("translations-loaded", this.relabel);
|
|
62
|
+
window.removeEventListener("translations-ready", this.relabel);
|
|
63
|
+
super.disconnectedCallback();
|
|
64
|
+
}
|
|
65
|
+
words(value) {
|
|
66
|
+
if (!value)
|
|
67
|
+
return "";
|
|
68
|
+
return this.literal ? value : getText(value) || value;
|
|
69
|
+
}
|
|
70
|
+
/** The values the meter says and draws, in the current language. */
|
|
71
|
+
get aria() {
|
|
72
|
+
return meterAria(this.value, this.min, this.max, {
|
|
73
|
+
over: this.over, format: figureFormat(this.format), currency: this.currency,
|
|
74
|
+
minor: this.minor, whole: this.whole, digits: this.digits,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** How many squares the range is drawn in, or 0 for a bar. */
|
|
78
|
+
get squareCount() {
|
|
79
|
+
const count = Math.floor(Number(this.squares));
|
|
80
|
+
return Number.isFinite(count) && count > 0 ? Math.min(MOST_SQUARES, count) : 0;
|
|
81
|
+
}
|
|
82
|
+
willUpdate(changed) {
|
|
83
|
+
super.willUpdate(changed);
|
|
84
|
+
const aria = this.aria;
|
|
85
|
+
const label = this.words(this.label);
|
|
86
|
+
this.setAttribute("role", "meter");
|
|
87
|
+
this.setAttribute("aria-valuenow", String(aria.now));
|
|
88
|
+
this.setAttribute("aria-valuemin", String(aria.min));
|
|
89
|
+
this.setAttribute("aria-valuemax", String(aria.max));
|
|
90
|
+
this.setAttribute("aria-valuetext", this.words(this.valuetext) || aria.text);
|
|
91
|
+
if (label)
|
|
92
|
+
this.setAttribute("aria-label", label);
|
|
93
|
+
else if (changed.has("label"))
|
|
94
|
+
this.removeAttribute("aria-label");
|
|
95
|
+
this.toggleAttribute("data-over", aria.over);
|
|
96
|
+
}
|
|
97
|
+
render() {
|
|
98
|
+
const aria = this.aria;
|
|
99
|
+
const count = this.squareCount;
|
|
100
|
+
const over = aria.over ? " ds-meter--over" : "";
|
|
101
|
+
if (count) {
|
|
102
|
+
const on = Math.round(aria.fraction * count);
|
|
103
|
+
return html `<div class="ds-meter ds-meter--squares${over}" part="meter">${Array.from({ length: count }, (_, index) => html `<span class="ds-meter__square${index < on ? " ds-meter__square--on" : ""}" part="square"></span>`)}</div>`;
|
|
104
|
+
}
|
|
105
|
+
return html `<div class="ds-meter${over}" part="meter" style="--ds-meter-value: ${aria.fraction}"><span class="ds-meter__fill" part="fill"></span></div>`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
Meter.properties = {
|
|
109
|
+
value: { type: Number },
|
|
110
|
+
min: { type: Number },
|
|
111
|
+
max: { type: Number },
|
|
112
|
+
squares: { type: Number },
|
|
113
|
+
over: { type: Boolean, reflect: true },
|
|
114
|
+
label: { type: String },
|
|
115
|
+
valuetext: { type: String },
|
|
116
|
+
format: { type: String },
|
|
117
|
+
currency: { type: String },
|
|
118
|
+
minor: { type: Boolean },
|
|
119
|
+
whole: { type: Boolean },
|
|
120
|
+
digits: { type: Number },
|
|
121
|
+
literal: { type: Boolean, reflect: true },
|
|
122
|
+
};
|
|
123
|
+
Meter.styles = [unsafeCSS(metrics), unsafeCSS(figures), unsafeCSS(styles)];
|
|
124
|
+
define("ds-meter", Meter);
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
2
|
+
import "./ds-icon";
|
|
3
|
+
export type NoticeTone = "neutral" | "success" | "warning" | "danger";
|
|
4
|
+
/** The icon each tone's mark carries unless `icon` names another. */
|
|
5
|
+
export declare const NOTICE_ICONS: Readonly<Record<NoticeTone, string>>;
|
|
6
|
+
/** Detail of `ds-notice-dismiss`. Cancel the event to keep the notice and remove it yourself. */
|
|
7
|
+
export interface NoticeDismissDetail {
|
|
8
|
+
tone: NoticeTone;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @element ds-notice
|
|
12
|
+
* @prop {"neutral" | "success" | "warning" | "danger"} tone - The mark's colour
|
|
13
|
+
* and icon; danger also turns the words into the danger colour. Neutral by default.
|
|
14
|
+
* @prop {string} heading - A title: a translation key, or literal words.
|
|
15
|
+
* @prop {string} text - The text: a translation key, or literal words.
|
|
16
|
+
* @prop {boolean} literal - Show `heading` and `text` as written, never looked up.
|
|
17
|
+
* @prop {string} icon - An icon from the library in place of the tone's own.
|
|
18
|
+
* @prop {boolean} dismissible - Show a close button at the end of the first line.
|
|
19
|
+
* @prop {boolean} banner - A strip one square high across the top of its
|
|
20
|
+
* positioning context, filled in the tone's colour, its words, actions and
|
|
21
|
+
* close button on one line; it reserves no room in the flow.
|
|
22
|
+
*
|
|
23
|
+
* @slot - The text, when it needs more than words: a link, a strong word.
|
|
24
|
+
* @slot heading - The title, as inline content.
|
|
25
|
+
* @slot icon - An icon of the page's own inside the mark.
|
|
26
|
+
* @slot actions - Buttons or links on the row under the words.
|
|
27
|
+
*
|
|
28
|
+
* @fires ds-notice-dismiss - The close button was pressed. Cancelable: unless
|
|
29
|
+
* it is cancelled, the notice hides itself.
|
|
30
|
+
*
|
|
31
|
+
* The element is a live region: `role="status"`, or `role="alert"` for danger,
|
|
32
|
+
* unless the page gives it a role of its own.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* <ds-notice tone="danger" heading="Couldn't save" dismissible>
|
|
36
|
+
* Your changes are kept on this device.
|
|
37
|
+
* <ds-button slot="actions" secondary>Try again</ds-button>
|
|
38
|
+
* </ds-notice>
|
|
39
|
+
*/
|
|
40
|
+
export declare class Notice extends LitElement {
|
|
41
|
+
static properties: {
|
|
42
|
+
tone: {
|
|
43
|
+
type: StringConstructor;
|
|
44
|
+
reflect: boolean;
|
|
45
|
+
};
|
|
46
|
+
heading: {
|
|
47
|
+
type: StringConstructor;
|
|
48
|
+
};
|
|
49
|
+
text: {
|
|
50
|
+
type: StringConstructor;
|
|
51
|
+
};
|
|
52
|
+
literal: {
|
|
53
|
+
type: BooleanConstructor;
|
|
54
|
+
reflect: boolean;
|
|
55
|
+
};
|
|
56
|
+
icon: {
|
|
57
|
+
type: StringConstructor;
|
|
58
|
+
};
|
|
59
|
+
dismissible: {
|
|
60
|
+
type: BooleanConstructor;
|
|
61
|
+
reflect: boolean;
|
|
62
|
+
};
|
|
63
|
+
banner: {
|
|
64
|
+
type: BooleanConstructor;
|
|
65
|
+
reflect: boolean;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
static styles: import("lit").CSSResult[];
|
|
69
|
+
tone: NoticeTone;
|
|
70
|
+
heading: string | undefined;
|
|
71
|
+
text: string | undefined;
|
|
72
|
+
literal: boolean;
|
|
73
|
+
icon: string | undefined;
|
|
74
|
+
dismissible: boolean;
|
|
75
|
+
banner: boolean;
|
|
76
|
+
/** The role this element last set, so a role the page wrote is left alone. */
|
|
77
|
+
private ownRole;
|
|
78
|
+
private readonly relabel;
|
|
79
|
+
constructor();
|
|
80
|
+
/** The tone in effect: an unknown value reads as neutral. */
|
|
81
|
+
get resolvedTone(): NoticeTone;
|
|
82
|
+
connectedCallback(): void;
|
|
83
|
+
disconnectedCallback(): void;
|
|
84
|
+
protected willUpdate(changed: PropertyValues<this>): void;
|
|
85
|
+
private syncRole;
|
|
86
|
+
private words;
|
|
87
|
+
/**
|
|
88
|
+
* Whether light-DOM content fills a slot: elements, or text that is not
|
|
89
|
+
* blank. The blank text between slotted children still counts as assigned
|
|
90
|
+
* to the default slot and hides its fallback, so `text` is drawn beside the
|
|
91
|
+
* slot rather than inside it.
|
|
92
|
+
*/
|
|
93
|
+
private slotted;
|
|
94
|
+
/** Ask to close: hides the notice unless a listener cancels `ds-notice-dismiss`. */
|
|
95
|
+
dismiss(): boolean;
|
|
96
|
+
render(): import("lit").TemplateResult<1>;
|
|
97
|
+
}
|
|
98
|
+
declare global {
|
|
99
|
+
interface HTMLElementTagNameMap {
|
|
100
|
+
"ds-notice": Notice;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=ds-notice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ds-notice.d.ts","sourceRoot":"","sources":["../../DS1/2-core/ds-notice.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGhF,OAAO,WAAW,CAAC;AAKnB,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtE,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAK7D,CAAC;AAEF,iGAAiG;AACjG,MAAM,WAAW,mBAAmB;IAAG,IAAI,EAAE,UAAU,CAAA;CAAE;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;MAQf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAErE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAExB,8EAA8E;IAC9E,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAUtD,6DAA6D;IAC7D,IAAI,YAAY,IAAI,UAAU,CAE7B;IAED,iBAAiB;IAOjB,oBAAoB;IAMpB,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAKlD,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,KAAK;IAKb;;;;;OAKG;IACH,OAAO,CAAC,OAAO;IAMf,oFAAoF;IACpF,OAAO,IAAI,OAAO;IASlB,MAAM;CAuBP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// ds-notice.ts
|
|
2
|
+
// An inline notice in the flow of the page: a tone, a title and/or text,
|
|
3
|
+
// actions and an optional dismiss; with `banner`, a strip across the top of
|
|
4
|
+
// its positioning context instead. Drawn by 1-root/notice.css, the same
|
|
5
|
+
// classes a page without scripts writes.
|
|
6
|
+
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
7
|
+
import { getText } from "../0-face/i18n";
|
|
8
|
+
import { define } from "../0-face/define";
|
|
9
|
+
import "./ds-icon";
|
|
10
|
+
import metrics from "../1-root/component-metrics.css?inline";
|
|
11
|
+
import controls from "../1-root/controls.css?inline";
|
|
12
|
+
import styles from "./styles/ds-notice.css?inline";
|
|
13
|
+
const TONES = ["neutral", "success", "warning", "danger"];
|
|
14
|
+
/** The icon each tone's mark carries unless `icon` names another. */
|
|
15
|
+
export const NOTICE_ICONS = {
|
|
16
|
+
neutral: "info",
|
|
17
|
+
success: "check",
|
|
18
|
+
warning: "warning",
|
|
19
|
+
danger: "warning",
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* @element ds-notice
|
|
23
|
+
* @prop {"neutral" | "success" | "warning" | "danger"} tone - The mark's colour
|
|
24
|
+
* and icon; danger also turns the words into the danger colour. Neutral by default.
|
|
25
|
+
* @prop {string} heading - A title: a translation key, or literal words.
|
|
26
|
+
* @prop {string} text - The text: a translation key, or literal words.
|
|
27
|
+
* @prop {boolean} literal - Show `heading` and `text` as written, never looked up.
|
|
28
|
+
* @prop {string} icon - An icon from the library in place of the tone's own.
|
|
29
|
+
* @prop {boolean} dismissible - Show a close button at the end of the first line.
|
|
30
|
+
* @prop {boolean} banner - A strip one square high across the top of its
|
|
31
|
+
* positioning context, filled in the tone's colour, its words, actions and
|
|
32
|
+
* close button on one line; it reserves no room in the flow.
|
|
33
|
+
*
|
|
34
|
+
* @slot - The text, when it needs more than words: a link, a strong word.
|
|
35
|
+
* @slot heading - The title, as inline content.
|
|
36
|
+
* @slot icon - An icon of the page's own inside the mark.
|
|
37
|
+
* @slot actions - Buttons or links on the row under the words.
|
|
38
|
+
*
|
|
39
|
+
* @fires ds-notice-dismiss - The close button was pressed. Cancelable: unless
|
|
40
|
+
* it is cancelled, the notice hides itself.
|
|
41
|
+
*
|
|
42
|
+
* The element is a live region: `role="status"`, or `role="alert"` for danger,
|
|
43
|
+
* unless the page gives it a role of its own.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* <ds-notice tone="danger" heading="Couldn't save" dismissible>
|
|
47
|
+
* Your changes are kept on this device.
|
|
48
|
+
* <ds-button slot="actions" secondary>Try again</ds-button>
|
|
49
|
+
* </ds-notice>
|
|
50
|
+
*/
|
|
51
|
+
export class Notice extends LitElement {
|
|
52
|
+
constructor() {
|
|
53
|
+
super();
|
|
54
|
+
/** The role this element last set, so a role the page wrote is left alone. */
|
|
55
|
+
this.ownRole = null;
|
|
56
|
+
this.relabel = () => this.requestUpdate();
|
|
57
|
+
this.tone = "neutral";
|
|
58
|
+
this.literal = false;
|
|
59
|
+
this.dismissible = false;
|
|
60
|
+
this.banner = false;
|
|
61
|
+
}
|
|
62
|
+
/** The tone in effect: an unknown value reads as neutral. */
|
|
63
|
+
get resolvedTone() {
|
|
64
|
+
return TONES.includes(this.tone) ? this.tone : "neutral";
|
|
65
|
+
}
|
|
66
|
+
connectedCallback() {
|
|
67
|
+
super.connectedCallback();
|
|
68
|
+
window.addEventListener("language-changed", this.relabel);
|
|
69
|
+
window.addEventListener("translations-loaded", this.relabel);
|
|
70
|
+
this.syncRole();
|
|
71
|
+
}
|
|
72
|
+
disconnectedCallback() {
|
|
73
|
+
window.removeEventListener("language-changed", this.relabel);
|
|
74
|
+
window.removeEventListener("translations-loaded", this.relabel);
|
|
75
|
+
super.disconnectedCallback();
|
|
76
|
+
}
|
|
77
|
+
willUpdate(changed) {
|
|
78
|
+
super.willUpdate(changed);
|
|
79
|
+
if (changed.has("tone"))
|
|
80
|
+
this.syncRole();
|
|
81
|
+
}
|
|
82
|
+
syncRole() {
|
|
83
|
+
if (!this.isConnected)
|
|
84
|
+
return;
|
|
85
|
+
const current = this.getAttribute("role");
|
|
86
|
+
if (current !== null && current !== this.ownRole)
|
|
87
|
+
return;
|
|
88
|
+
this.ownRole = this.resolvedTone === "danger" ? "alert" : "status";
|
|
89
|
+
if (current !== this.ownRole)
|
|
90
|
+
this.setAttribute("role", this.ownRole);
|
|
91
|
+
}
|
|
92
|
+
words(value) {
|
|
93
|
+
if (!value)
|
|
94
|
+
return "";
|
|
95
|
+
return this.literal ? value : getText(value) || value;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Whether light-DOM content fills a slot: elements, or text that is not
|
|
99
|
+
* blank. The blank text between slotted children still counts as assigned
|
|
100
|
+
* to the default slot and hides its fallback, so `text` is drawn beside the
|
|
101
|
+
* slot rather than inside it.
|
|
102
|
+
*/
|
|
103
|
+
slotted(name) {
|
|
104
|
+
return [...this.childNodes].some(node => name
|
|
105
|
+
? node instanceof Element && node.getAttribute("slot") === name
|
|
106
|
+
: node instanceof Element ? !node.hasAttribute("slot") : node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim()));
|
|
107
|
+
}
|
|
108
|
+
/** Ask to close: hides the notice unless a listener cancels `ds-notice-dismiss`. */
|
|
109
|
+
dismiss() {
|
|
110
|
+
const event = new CustomEvent("ds-notice-dismiss", {
|
|
111
|
+
bubbles: true, composed: true, cancelable: true, detail: { tone: this.resolvedTone },
|
|
112
|
+
});
|
|
113
|
+
if (!this.dispatchEvent(event))
|
|
114
|
+
return false;
|
|
115
|
+
this.hidden = true;
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
render() {
|
|
119
|
+
const tone = this.resolvedTone;
|
|
120
|
+
const heading = this.words(this.heading);
|
|
121
|
+
const text = this.words(this.text);
|
|
122
|
+
const hasHeading = Boolean(heading) || this.slotted("heading");
|
|
123
|
+
const slottedText = this.slotted("");
|
|
124
|
+
const hasText = Boolean(text) || slottedText;
|
|
125
|
+
const hasActions = this.slotted("actions");
|
|
126
|
+
const changed = () => this.requestUpdate();
|
|
127
|
+
return html `<div class="ds-notice${tone === "neutral" ? "" : ` ds-notice--${tone}`}${this.banner ? " ds-notice--banner" : ""}" part="notice">
|
|
128
|
+
<span class="ds-notice__mark" part="mark" aria-hidden="true">
|
|
129
|
+
<slot name="icon" @slotchange=${changed}><ds-icon size="large" .type=${this.icon || NOTICE_ICONS[tone]}></ds-icon></slot>
|
|
130
|
+
</span>
|
|
131
|
+
<div class="ds-notice__title" part="title" ?hidden=${!hasHeading}><slot name="heading" @slotchange=${changed}>${heading}</slot></div>
|
|
132
|
+
<div class="ds-notice__text" part="text" ?hidden=${!hasText}><slot @slotchange=${changed}></slot>${slottedText ? nothing : text}</div>
|
|
133
|
+
<div class="ds-notice__actions" part="actions" ?hidden=${!hasActions}><slot name="actions" @slotchange=${changed}></slot></div>
|
|
134
|
+
${this.dismissible
|
|
135
|
+
? html `<button class="ds-button ds-button--icon ds-notice__dismiss" part="dismiss" type="button" aria-label=${getText("Close") || "Close"} @click=${() => this.dismiss()}>
|
|
136
|
+
<ds-icon type="close" aria-hidden="true"></ds-icon>
|
|
137
|
+
</button>`
|
|
138
|
+
: nothing}
|
|
139
|
+
</div>`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
Notice.properties = {
|
|
143
|
+
tone: { type: String, reflect: true },
|
|
144
|
+
heading: { type: String },
|
|
145
|
+
text: { type: String },
|
|
146
|
+
literal: { type: Boolean, reflect: true },
|
|
147
|
+
icon: { type: String },
|
|
148
|
+
dismissible: { type: Boolean, reflect: true },
|
|
149
|
+
banner: { type: Boolean, reflect: true },
|
|
150
|
+
};
|
|
151
|
+
Notice.styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
|
|
152
|
+
define("ds-notice", Notice);
|
|
@@ -1,27 +1,84 @@
|
|
|
1
|
-
import { LitElement } from "lit";
|
|
1
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
2
|
+
/** Detail of `select`. Cancel the event to keep the current dot where it is. */
|
|
3
|
+
export interface PagedotsSelectDetail {
|
|
4
|
+
/** The dot picked, from 0. */
|
|
5
|
+
index: number;
|
|
6
|
+
/** The dot that was current. */
|
|
7
|
+
previous: number;
|
|
8
|
+
}
|
|
2
9
|
/**
|
|
3
|
-
*
|
|
10
|
+
* @element ds-pagedots
|
|
11
|
+
* @prop {number} count - How many dots. Three by default.
|
|
12
|
+
* @prop {number} active - The current dot, from 0.
|
|
13
|
+
* @prop {boolean} end - Draw the last dot as an end marker (a ring in the
|
|
14
|
+
* text colour) unless it is current: a way on to something else.
|
|
15
|
+
* @prop {string} label - The group's name: a translation key, or literal
|
|
16
|
+
* words. The shared word "Slides" by default.
|
|
17
|
+
* @prop {string} dotLabel - Each dot's name, with `{index}` for its number
|
|
18
|
+
* from 1: the shared words' "Slide {index}" by default.
|
|
19
|
+
* @prop {boolean} literal - Show `label` and `dotLabel` as written, never looked up.
|
|
20
|
+
*
|
|
21
|
+
* @fires select - A person picked a dot, by a click or a key. `detail` is
|
|
22
|
+
* `{ index, previous }`. Cancelable: unless it is cancelled, the dot becomes
|
|
23
|
+
* current.
|
|
24
|
+
*
|
|
25
|
+
* The element is a group of buttons. Only the current dot is in the tab
|
|
26
|
+
* order; the arrow keys (following the reading direction), Home and End move
|
|
27
|
+
* to the others and pick them.
|
|
4
28
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
29
|
+
* @example
|
|
30
|
+
* <ds-pagedots count="5" active="1"></ds-pagedots>
|
|
7
31
|
*/
|
|
8
32
|
export declare class Pagedots extends LitElement {
|
|
9
33
|
static properties: {
|
|
10
|
-
/** Number of dots to display */
|
|
11
34
|
count: {
|
|
12
35
|
type: NumberConstructor;
|
|
13
36
|
reflect: boolean;
|
|
14
37
|
};
|
|
15
|
-
/** Index of the active dot (0-based) */
|
|
16
38
|
active: {
|
|
17
39
|
type: NumberConstructor;
|
|
18
40
|
reflect: boolean;
|
|
19
41
|
};
|
|
42
|
+
end: {
|
|
43
|
+
type: BooleanConstructor;
|
|
44
|
+
reflect: boolean;
|
|
45
|
+
};
|
|
46
|
+
label: {
|
|
47
|
+
type: StringConstructor;
|
|
48
|
+
};
|
|
49
|
+
dotLabel: {
|
|
50
|
+
type: StringConstructor;
|
|
51
|
+
attribute: string;
|
|
52
|
+
};
|
|
53
|
+
literal: {
|
|
54
|
+
type: BooleanConstructor;
|
|
55
|
+
reflect: boolean;
|
|
56
|
+
};
|
|
20
57
|
};
|
|
58
|
+
static styles: import("lit").CSSResult[];
|
|
21
59
|
count: number;
|
|
22
60
|
active: number;
|
|
61
|
+
end: boolean;
|
|
62
|
+
label: string | undefined;
|
|
63
|
+
dotLabel: string | undefined;
|
|
64
|
+
literal: boolean;
|
|
65
|
+
/** The role this element last set, so a role the page wrote is left alone. */
|
|
66
|
+
private ownRole;
|
|
67
|
+
private focusAfterUpdate;
|
|
68
|
+
private readonly relabel;
|
|
23
69
|
constructor();
|
|
24
|
-
|
|
70
|
+
/** The number of dots drawn: a whole number, never below zero. */
|
|
71
|
+
get dots(): number;
|
|
72
|
+
/** The current dot, inside the count. */
|
|
73
|
+
get current(): number;
|
|
74
|
+
connectedCallback(): void;
|
|
75
|
+
disconnectedCallback(): void;
|
|
76
|
+
private words;
|
|
77
|
+
protected willUpdate(changed: PropertyValues<this>): void;
|
|
78
|
+
protected updated(changed: PropertyValues<this>): void;
|
|
79
|
+
/** Pick a dot as a person would: fires `select` and, unless it is cancelled, makes it current. */
|
|
80
|
+
select(index: number): boolean;
|
|
81
|
+
private keydown;
|
|
25
82
|
render(): import("lit").TemplateResult<1>;
|
|
26
83
|
}
|
|
27
84
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ds-pagedots.d.ts","sourceRoot":"","sources":["../../DS1/2-core/ds-pagedots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ds-pagedots.d.ts","sourceRoot":"","sources":["../../DS1/2-core/ds-pagedots.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAmB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAQvE,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;MAOf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAErE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IAEzB,8EAA8E;IAC9E,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAUtD,kEAAkE;IAClE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,yCAAyC;IACzC,IAAI,OAAO,IAAI,MAAM,CAGpB;IAED,iBAAiB;IAWjB,oBAAoB;IAMpB,OAAO,CAAC,KAAK;IAKb,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAKlD,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAO/C,kGAAkG;IAClG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAW9B,OAAO,CAAC,OAAO;IAYf,MAAM;CAmBP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,QAAQ,CAAC;KACzB;CACF"}
|
|
@@ -1,36 +1,142 @@
|
|
|
1
|
+
// ds-pagedots.ts
|
|
2
|
+
// A dot for each slide or page, one square each: the ones passed, the current
|
|
3
|
+
// one, the next and the rest, and an optional end marker. Pressing a dot or
|
|
4
|
+
// moving with the arrow keys, Home and End fires `select`. Drawn by
|
|
5
|
+
// 1-root/carousel.css, the same classes a page without scripts writes.
|
|
1
6
|
import { LitElement, html, unsafeCSS } from "lit";
|
|
7
|
+
import { getText } from "../0-face/i18n";
|
|
8
|
+
import { define } from "../0-face/define";
|
|
9
|
+
import { dotForKey, dotState } from "../0-face/carousel";
|
|
10
|
+
import metrics from "../1-root/component-metrics.css?inline";
|
|
11
|
+
import carousel from "../1-root/carousel.css?inline";
|
|
2
12
|
import styles from "./styles/ds-pagedots.css?inline";
|
|
3
13
|
/**
|
|
4
|
-
*
|
|
14
|
+
* @element ds-pagedots
|
|
15
|
+
* @prop {number} count - How many dots. Three by default.
|
|
16
|
+
* @prop {number} active - The current dot, from 0.
|
|
17
|
+
* @prop {boolean} end - Draw the last dot as an end marker (a ring in the
|
|
18
|
+
* text colour) unless it is current: a way on to something else.
|
|
19
|
+
* @prop {string} label - The group's name: a translation key, or literal
|
|
20
|
+
* words. The shared word "Slides" by default.
|
|
21
|
+
* @prop {string} dotLabel - Each dot's name, with `{index}` for its number
|
|
22
|
+
* from 1: the shared words' "Slide {index}" by default.
|
|
23
|
+
* @prop {boolean} literal - Show `label` and `dotLabel` as written, never looked up.
|
|
5
24
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
25
|
+
* @fires select - A person picked a dot, by a click or a key. `detail` is
|
|
26
|
+
* `{ index, previous }`. Cancelable: unless it is cancelled, the dot becomes
|
|
27
|
+
* current.
|
|
28
|
+
*
|
|
29
|
+
* The element is a group of buttons. Only the current dot is in the tab
|
|
30
|
+
* order; the arrow keys (following the reading direction), Home and End move
|
|
31
|
+
* to the others and pick them.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* <ds-pagedots count="5" active="1"></ds-pagedots>
|
|
8
35
|
*/
|
|
9
36
|
export class Pagedots extends LitElement {
|
|
10
37
|
constructor() {
|
|
11
38
|
super();
|
|
39
|
+
/** The role this element last set, so a role the page wrote is left alone. */
|
|
40
|
+
this.ownRole = null;
|
|
41
|
+
this.focusAfterUpdate = false;
|
|
42
|
+
this.relabel = () => this.requestUpdate();
|
|
12
43
|
this.count = 3;
|
|
13
44
|
this.active = 0;
|
|
45
|
+
this.end = false;
|
|
46
|
+
this.literal = false;
|
|
47
|
+
}
|
|
48
|
+
/** The number of dots drawn: a whole number, never below zero. */
|
|
49
|
+
get dots() {
|
|
50
|
+
return Number.isFinite(this.count) ? Math.max(0, Math.floor(this.count)) : 0;
|
|
51
|
+
}
|
|
52
|
+
/** The current dot, inside the count. */
|
|
53
|
+
get current() {
|
|
54
|
+
const active = Number.isFinite(this.active) ? Math.floor(this.active) : 0;
|
|
55
|
+
return Math.max(0, Math.min(this.dots - 1, active));
|
|
56
|
+
}
|
|
57
|
+
connectedCallback() {
|
|
58
|
+
super.connectedCallback();
|
|
59
|
+
window.addEventListener("language-changed", this.relabel);
|
|
60
|
+
window.addEventListener("translations-loaded", this.relabel);
|
|
61
|
+
const role = this.getAttribute("role");
|
|
62
|
+
if (role === null || role === this.ownRole) {
|
|
63
|
+
this.ownRole = "group";
|
|
64
|
+
this.setAttribute("role", "group");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
disconnectedCallback() {
|
|
68
|
+
window.removeEventListener("language-changed", this.relabel);
|
|
69
|
+
window.removeEventListener("translations-loaded", this.relabel);
|
|
70
|
+
super.disconnectedCallback();
|
|
71
|
+
}
|
|
72
|
+
words(value, fallback, params) {
|
|
73
|
+
const text = value && this.literal ? value : getText(value || fallback, params) || value || fallback;
|
|
74
|
+
return params ? text.replace(/\{\{?(\w+)\}?\}/g, (whole, name) => (name in params ? String(params[name]) : whole)) : text;
|
|
75
|
+
}
|
|
76
|
+
willUpdate(changed) {
|
|
77
|
+
super.willUpdate(changed);
|
|
78
|
+
if (!this.hasAttribute("aria-labelledby"))
|
|
79
|
+
this.setAttribute("aria-label", this.words(this.label, "Slides"));
|
|
80
|
+
}
|
|
81
|
+
updated(changed) {
|
|
82
|
+
super.updated(changed);
|
|
83
|
+
if (!this.focusAfterUpdate)
|
|
84
|
+
return;
|
|
85
|
+
this.focusAfterUpdate = false;
|
|
86
|
+
this.renderRoot.querySelector('[aria-current="true"]')?.focus();
|
|
87
|
+
}
|
|
88
|
+
/** Pick a dot as a person would: fires `select` and, unless it is cancelled, makes it current. */
|
|
89
|
+
select(index) {
|
|
90
|
+
if (this.dots === 0)
|
|
91
|
+
return false;
|
|
92
|
+
const target = Math.max(0, Math.min(this.dots - 1, Math.floor(index)));
|
|
93
|
+
const event = new CustomEvent("select", {
|
|
94
|
+
bubbles: true, composed: true, cancelable: true, detail: { index: target, previous: this.current },
|
|
95
|
+
});
|
|
96
|
+
if (!this.dispatchEvent(event))
|
|
97
|
+
return false;
|
|
98
|
+
this.active = target;
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
keydown(event, index) {
|
|
102
|
+
const to = dotForKey(event.key, index, this.dots, getComputedStyle(this).direction === "rtl");
|
|
103
|
+
if (to === undefined)
|
|
104
|
+
return;
|
|
105
|
+
event.preventDefault();
|
|
106
|
+
if (this.select(to)) {
|
|
107
|
+
this.focusAfterUpdate = true;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// A cancelled pick leaves the current dot as it is; focus still follows the key.
|
|
111
|
+
this.renderRoot.querySelectorAll(".ds-pagedots__dot")[to]?.focus();
|
|
14
112
|
}
|
|
15
113
|
render() {
|
|
16
|
-
const
|
|
17
|
-
return html
|
|
18
|
-
${
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
114
|
+
const current = this.current;
|
|
115
|
+
return html `<div class="ds-pagedots" part="dots">
|
|
116
|
+
${Array.from({ length: this.dots }, (_, index) => {
|
|
117
|
+
const state = dotState(index, current, this.dots, this.end);
|
|
118
|
+
return html `<button
|
|
119
|
+
class="ds-pagedots__dot"
|
|
120
|
+
part="dot"
|
|
121
|
+
type="button"
|
|
122
|
+
data-state=${state}
|
|
123
|
+
aria-label=${this.words(this.dotLabel, "Slide {index}", { index: index + 1 })}
|
|
124
|
+
aria-current=${state === "current" ? "true" : "false"}
|
|
125
|
+
tabindex=${state === "current" ? 0 : -1}
|
|
126
|
+
@click=${() => this.select(index)}
|
|
127
|
+
@keydown=${(event) => this.keydown(event, index)}
|
|
128
|
+
></button>`;
|
|
129
|
+
})}
|
|
130
|
+
</div>`;
|
|
27
131
|
}
|
|
28
132
|
}
|
|
29
133
|
Pagedots.properties = {
|
|
30
|
-
/** Number of dots to display */
|
|
31
134
|
count: { type: Number, reflect: true },
|
|
32
|
-
/** Index of the active dot (0-based) */
|
|
33
135
|
active: { type: Number, reflect: true },
|
|
136
|
+
end: { type: Boolean, reflect: true },
|
|
137
|
+
label: { type: String },
|
|
138
|
+
dotLabel: { type: String, attribute: "dot-label" },
|
|
139
|
+
literal: { type: Boolean, reflect: true },
|
|
34
140
|
};
|
|
35
|
-
Pagedots.styles = unsafeCSS(styles);
|
|
36
|
-
|
|
141
|
+
Pagedots.styles = [unsafeCSS(metrics), unsafeCSS(carousel), unsafeCSS(styles)];
|
|
142
|
+
define("ds-pagedots", Pagedots);
|