@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
package/dist/3-unit/ds-list.js
CHANGED
|
@@ -1,13 +1,64 @@
|
|
|
1
1
|
import { LitElement, html, unsafeCSS } from "lit";
|
|
2
2
|
import styles from "./styles/ds-list.css?inline";
|
|
3
3
|
import { define } from "../0-face/define";
|
|
4
|
+
/** Children that are never items of the list. */
|
|
5
|
+
const NOT_ITEMS = new Set(["template", "script", "style", "slot"]);
|
|
6
|
+
/** Controls keep their own role: a link or a button that became a list item would no longer be announced as one. */
|
|
7
|
+
const CONTROLS = new Set(["a", "button", "input", "select", "textarea", "summary", "details"]);
|
|
4
8
|
/**
|
|
5
9
|
* A vertical stack of rows.
|
|
6
10
|
*
|
|
11
|
+
* The element is a list (`role="list"`) and each element directly inside it an
|
|
12
|
+
* item (`role="listitem"`), unless the page gives either a role of its own.
|
|
13
|
+
* A link, button or other control directly inside keeps its own role: wrap it
|
|
14
|
+
* in a row (or another element) to make it an item.
|
|
15
|
+
*
|
|
7
16
|
* @element ds-list
|
|
8
17
|
* @attr columns - Lay the items out in this many equal columns.
|
|
9
18
|
*/
|
|
10
19
|
export class List extends LitElement {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
/** The items this element gave a role, so roles the page wrote are left alone. */
|
|
23
|
+
this.ownItems = new Set();
|
|
24
|
+
this.ownRole = false;
|
|
25
|
+
this.syncItems = () => {
|
|
26
|
+
const slot = this.shadowRoot?.querySelector("slot");
|
|
27
|
+
// Items only where the element is a list: a listbox or a page's own role
|
|
28
|
+
// decides its children's roles itself.
|
|
29
|
+
const list = this.getAttribute("role") === "list";
|
|
30
|
+
const items = new Set(list && slot ? slot.assignedElements().filter(item => !NOT_ITEMS.has(item.localName)) : []);
|
|
31
|
+
for (const item of this.ownItems) {
|
|
32
|
+
if (items.has(item))
|
|
33
|
+
continue;
|
|
34
|
+
if (item.getAttribute("role") === "listitem")
|
|
35
|
+
item.removeAttribute("role");
|
|
36
|
+
this.ownItems.delete(item);
|
|
37
|
+
}
|
|
38
|
+
for (const item of items) {
|
|
39
|
+
if (item.hasAttribute("role") || CONTROLS.has(item.localName))
|
|
40
|
+
continue;
|
|
41
|
+
item.setAttribute("role", "listitem");
|
|
42
|
+
this.ownItems.add(item);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
connectedCallback() {
|
|
47
|
+
super.connectedCallback();
|
|
48
|
+
if (!this.hasAttribute("role")) {
|
|
49
|
+
this.setAttribute("role", "list");
|
|
50
|
+
this.ownRole = true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
disconnectedCallback() {
|
|
54
|
+
super.disconnectedCallback();
|
|
55
|
+
if (this.ownRole && this.getAttribute("role") === "list")
|
|
56
|
+
this.removeAttribute("role");
|
|
57
|
+
this.ownRole = false;
|
|
58
|
+
}
|
|
59
|
+
firstUpdated() {
|
|
60
|
+
this.syncItems();
|
|
61
|
+
}
|
|
11
62
|
updated() {
|
|
12
63
|
if (typeof this.columns === "number" && Number.isInteger(this.columns) && this.columns > 0)
|
|
13
64
|
this.style.setProperty("--ds-list-columns", String(this.columns));
|
|
@@ -15,7 +66,7 @@ export class List extends LitElement {
|
|
|
15
66
|
this.style.removeProperty("--ds-list-columns");
|
|
16
67
|
}
|
|
17
68
|
render() {
|
|
18
|
-
return html `<slot></slot>`;
|
|
69
|
+
return html `<slot @slotchange=${this.syncItems}></slot>`;
|
|
19
70
|
}
|
|
20
71
|
}
|
|
21
72
|
List.properties = {
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
2
|
+
/** How a square is drawn. */
|
|
3
|
+
export type MatrixMarkKind = "fill" | "outline" | "stripes" | "dot" | "triangle" | "dash";
|
|
4
|
+
/** A row or a column. A column may stand in a group. */
|
|
5
|
+
export interface MatrixAxis {
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
/** The group a column stands in. */
|
|
9
|
+
group?: string;
|
|
10
|
+
}
|
|
11
|
+
/** A group of columns: a bar in its colour over them, its colour tinting their squares. */
|
|
12
|
+
export interface MatrixGroup {
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
/** A colour token or value, from the palette. */
|
|
16
|
+
color: string;
|
|
17
|
+
}
|
|
18
|
+
/** What is in the square where a row meets a column. */
|
|
19
|
+
export interface MatrixCell {
|
|
20
|
+
row: string;
|
|
21
|
+
column: string;
|
|
22
|
+
mark: MatrixMarkKind;
|
|
23
|
+
/** More about this square, added to its name. */
|
|
24
|
+
note?: string;
|
|
25
|
+
}
|
|
26
|
+
/** A mark and what it means, for the legend and the squares' names. */
|
|
27
|
+
export interface MatrixMark {
|
|
28
|
+
mark: MatrixMarkKind;
|
|
29
|
+
label: string;
|
|
30
|
+
}
|
|
31
|
+
/** Detail of `cell-press`: the row, the column and what is there, if anything. */
|
|
32
|
+
export interface MatrixPressDetail {
|
|
33
|
+
row: MatrixAxis;
|
|
34
|
+
column: MatrixAxis;
|
|
35
|
+
cell?: MatrixCell;
|
|
36
|
+
}
|
|
37
|
+
/** The columns in their groups' order, each with its group. */
|
|
38
|
+
export declare function orderColumns(columns: readonly MatrixAxis[], groups: readonly MatrixGroup[]): {
|
|
39
|
+
column: MatrixAxis;
|
|
40
|
+
group?: MatrixGroup;
|
|
41
|
+
}[];
|
|
42
|
+
/**
|
|
43
|
+
* @element ds-matrix
|
|
44
|
+
* @prop {MatrixAxis[]} rows - The rows, top to bottom (property only).
|
|
45
|
+
* @prop {MatrixAxis[]} columns - The columns; a column's `group` names its group (property only).
|
|
46
|
+
* @prop {MatrixGroup[]} groups - The column groups, in order, with their colours (property only).
|
|
47
|
+
* @prop {MatrixCell[]} cells - The marks (property only).
|
|
48
|
+
* @prop {MatrixMark[]} marks - What each mark means, drawn as the legend (property only).
|
|
49
|
+
* @prop {boolean} totals - A last row counting the marked squares in each column.
|
|
50
|
+
* @prop {string} totalsLabel - That row's name (`totals-label`); the shared word "Total".
|
|
51
|
+
* @prop {number} names - Squares for the row names: 8 by default.
|
|
52
|
+
* @prop {string} label - The matrix's name: a translation key, or literal words.
|
|
53
|
+
* @prop {boolean} literal - Show `label` and `totals-label` as written.
|
|
54
|
+
*
|
|
55
|
+
* @fires cell-press - A square was pressed, or Enter pressed on it; `{ row, column, cell }`.
|
|
56
|
+
* @fires row-press - A row's name was pressed; `{ row }`.
|
|
57
|
+
* @fires column-press - A column's name was pressed; `{ column }`.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* <ds-matrix label="Products and parts" literal totals></ds-matrix>
|
|
61
|
+
*/
|
|
62
|
+
export declare class Matrix extends LitElement {
|
|
63
|
+
static properties: {
|
|
64
|
+
rows: {
|
|
65
|
+
attribute: boolean;
|
|
66
|
+
};
|
|
67
|
+
columns: {
|
|
68
|
+
attribute: boolean;
|
|
69
|
+
};
|
|
70
|
+
groups: {
|
|
71
|
+
attribute: boolean;
|
|
72
|
+
};
|
|
73
|
+
cells: {
|
|
74
|
+
attribute: boolean;
|
|
75
|
+
};
|
|
76
|
+
marks: {
|
|
77
|
+
attribute: boolean;
|
|
78
|
+
};
|
|
79
|
+
totals: {
|
|
80
|
+
type: BooleanConstructor;
|
|
81
|
+
reflect: boolean;
|
|
82
|
+
};
|
|
83
|
+
totalsLabel: {
|
|
84
|
+
type: StringConstructor;
|
|
85
|
+
attribute: string;
|
|
86
|
+
};
|
|
87
|
+
names: {
|
|
88
|
+
type: NumberConstructor;
|
|
89
|
+
};
|
|
90
|
+
label: {
|
|
91
|
+
type: StringConstructor;
|
|
92
|
+
};
|
|
93
|
+
literal: {
|
|
94
|
+
type: BooleanConstructor;
|
|
95
|
+
reflect: boolean;
|
|
96
|
+
};
|
|
97
|
+
lit: {
|
|
98
|
+
state: boolean;
|
|
99
|
+
};
|
|
100
|
+
focusAt: {
|
|
101
|
+
state: boolean;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
static styles: import("lit").CSSResult[];
|
|
105
|
+
rows: MatrixAxis[];
|
|
106
|
+
columns: MatrixAxis[];
|
|
107
|
+
groups: MatrixGroup[];
|
|
108
|
+
cells: MatrixCell[];
|
|
109
|
+
marks: MatrixMark[];
|
|
110
|
+
totals: boolean;
|
|
111
|
+
totalsLabel: string | undefined;
|
|
112
|
+
names: number | undefined;
|
|
113
|
+
label: string | undefined;
|
|
114
|
+
literal: boolean;
|
|
115
|
+
/** The row and column under the pointer or focus, lit as a crosshair; -1 for neither. */
|
|
116
|
+
lit: {
|
|
117
|
+
row: number;
|
|
118
|
+
column: number;
|
|
119
|
+
} | undefined;
|
|
120
|
+
/** The square holding the one Tab stop. */
|
|
121
|
+
focusAt: {
|
|
122
|
+
row: number;
|
|
123
|
+
column: number;
|
|
124
|
+
};
|
|
125
|
+
private readonly relabel;
|
|
126
|
+
constructor();
|
|
127
|
+
connectedCallback(): void;
|
|
128
|
+
disconnectedCallback(): void;
|
|
129
|
+
protected willUpdate(changed: PropertyValues<this>): void;
|
|
130
|
+
private words;
|
|
131
|
+
private get ordered();
|
|
132
|
+
private markLabel;
|
|
133
|
+
private move;
|
|
134
|
+
private onKeyDown;
|
|
135
|
+
private pressCell;
|
|
136
|
+
private onClick;
|
|
137
|
+
private onPointerOver;
|
|
138
|
+
private mark;
|
|
139
|
+
render(): import("lit").TemplateResult<1>;
|
|
140
|
+
}
|
|
141
|
+
declare global {
|
|
142
|
+
interface HTMLElementTagNameMap {
|
|
143
|
+
"ds-matrix": Matrix;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=ds-matrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ds-matrix.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-matrix.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAMhF,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1F,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAOD,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE;YAGhE,UAAU;YAAU,WAAW;IAOzD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAaf;IAEF,MAAM,CAAC,MAAM,4BAA2C;IAEhD,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACzB,yFAAyF;IACjF,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACzD,2CAA2C;IACnC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAEjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IActD,iBAAiB;IAMjB,oBAAoB;IAMpB,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAKlD,OAAO,CAAC,KAAK;IAKb,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,CAAC,SAAS;YAIH,IAAI;IASlB,OAAO,CAAC,SAAS,CAqBf;IAEF,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,OAAO,CAOb;IAEF,OAAO,CAAC,aAAa,CAInB;IAEF,OAAO,CAAC,IAAI;IAIZ,MAAM;CAgFP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
// ds-matrix.ts
|
|
2
|
+
// Rows against columns, one 20px square where each pair meets: read across a
|
|
3
|
+
// row for what it has, down a column for who has it. Columns stand in
|
|
4
|
+
// coloured groups whose colour tints the squares below; their names rise at
|
|
5
|
+
// 45° from the middle of their column. A mark in a square says how the row
|
|
6
|
+
// and column meet, and the legend below names the marks.
|
|
7
|
+
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
8
|
+
import { define } from "../0-face/define";
|
|
9
|
+
import { getText } from "../0-face/i18n";
|
|
10
|
+
import metrics from "../1-root/component-metrics.css?inline";
|
|
11
|
+
import styles from "./styles/ds-matrix.css?inline";
|
|
12
|
+
const MARKS = ["fill", "outline", "stripes", "dot", "triangle", "dash"];
|
|
13
|
+
const whole = (value, least, fallback) => typeof value === "number" && Number.isFinite(value) ? Math.max(least, Math.floor(value)) : fallback;
|
|
14
|
+
/** The columns in their groups' order, each with its group. */
|
|
15
|
+
export function orderColumns(columns, groups) {
|
|
16
|
+
const byId = new Map(groups.map(group => [group.id, group]));
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
const ordered = [];
|
|
19
|
+
for (const id of [...groups.map(group => group.id), ...columns.map(column => column.group ?? "")]) {
|
|
20
|
+
if (seen.has(id))
|
|
21
|
+
continue;
|
|
22
|
+
seen.add(id);
|
|
23
|
+
for (const column of columns)
|
|
24
|
+
if ((column.group ?? "") === id)
|
|
25
|
+
ordered.push({ column, group: byId.get(id) });
|
|
26
|
+
}
|
|
27
|
+
return ordered;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @element ds-matrix
|
|
31
|
+
* @prop {MatrixAxis[]} rows - The rows, top to bottom (property only).
|
|
32
|
+
* @prop {MatrixAxis[]} columns - The columns; a column's `group` names its group (property only).
|
|
33
|
+
* @prop {MatrixGroup[]} groups - The column groups, in order, with their colours (property only).
|
|
34
|
+
* @prop {MatrixCell[]} cells - The marks (property only).
|
|
35
|
+
* @prop {MatrixMark[]} marks - What each mark means, drawn as the legend (property only).
|
|
36
|
+
* @prop {boolean} totals - A last row counting the marked squares in each column.
|
|
37
|
+
* @prop {string} totalsLabel - That row's name (`totals-label`); the shared word "Total".
|
|
38
|
+
* @prop {number} names - Squares for the row names: 8 by default.
|
|
39
|
+
* @prop {string} label - The matrix's name: a translation key, or literal words.
|
|
40
|
+
* @prop {boolean} literal - Show `label` and `totals-label` as written.
|
|
41
|
+
*
|
|
42
|
+
* @fires cell-press - A square was pressed, or Enter pressed on it; `{ row, column, cell }`.
|
|
43
|
+
* @fires row-press - A row's name was pressed; `{ row }`.
|
|
44
|
+
* @fires column-press - A column's name was pressed; `{ column }`.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* <ds-matrix label="Products and parts" literal totals></ds-matrix>
|
|
48
|
+
*/
|
|
49
|
+
export class Matrix extends LitElement {
|
|
50
|
+
constructor() {
|
|
51
|
+
super();
|
|
52
|
+
this.relabel = () => this.requestUpdate();
|
|
53
|
+
this.onKeyDown = (event) => {
|
|
54
|
+
const cell = event.composedPath()[0].closest?.(".cell[data-row]");
|
|
55
|
+
if (!cell)
|
|
56
|
+
return;
|
|
57
|
+
const row = Number(cell.dataset.row), column = Number(cell.dataset.column);
|
|
58
|
+
const across = getComputedStyle(this).direction === "rtl" ? -1 : 1;
|
|
59
|
+
const mod = event.ctrlKey || event.metaKey;
|
|
60
|
+
const moves = {
|
|
61
|
+
ArrowUp: [row - 1, column],
|
|
62
|
+
ArrowDown: [row + 1, column],
|
|
63
|
+
ArrowLeft: [row, column - across],
|
|
64
|
+
ArrowRight: [row, column + across],
|
|
65
|
+
Home: mod ? [0, 0] : [row, 0],
|
|
66
|
+
End: mod ? [this.rows.length - 1, this.columns.length - 1] : [row, this.columns.length - 1],
|
|
67
|
+
};
|
|
68
|
+
if (moves[event.key]) {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
void this.move(...moves[event.key]);
|
|
71
|
+
}
|
|
72
|
+
else if (event.key === "Enter" || event.key === " ") {
|
|
73
|
+
event.preventDefault();
|
|
74
|
+
this.pressCell(row, column);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
this.onClick = (event) => {
|
|
78
|
+
const target = event.composedPath()[0].closest?.("[data-row], [data-column]");
|
|
79
|
+
if (!target || target.classList.contains("count"))
|
|
80
|
+
return;
|
|
81
|
+
const { row, column } = target.dataset;
|
|
82
|
+
if (row !== undefined && column !== undefined)
|
|
83
|
+
this.pressCell(Number(row), Number(column));
|
|
84
|
+
else if (row !== undefined)
|
|
85
|
+
this.dispatchEvent(new CustomEvent("row-press", { bubbles: true, composed: true, detail: { row: this.rows[Number(row)] } }));
|
|
86
|
+
else if (column !== undefined)
|
|
87
|
+
this.dispatchEvent(new CustomEvent("column-press", { bubbles: true, composed: true, detail: { column: this.ordered[Number(column)].column } }));
|
|
88
|
+
};
|
|
89
|
+
this.onPointerOver = (event) => {
|
|
90
|
+
const target = event.composedPath()[0].closest?.("[data-row], [data-column]");
|
|
91
|
+
const next = target ? { row: Number(target.dataset.row ?? -1), column: Number(target.dataset.column ?? -1) } : undefined;
|
|
92
|
+
if (next?.row !== this.lit?.row || next?.column !== this.lit?.column)
|
|
93
|
+
this.lit = next;
|
|
94
|
+
};
|
|
95
|
+
this.rows = [];
|
|
96
|
+
this.columns = [];
|
|
97
|
+
this.groups = [];
|
|
98
|
+
this.cells = [];
|
|
99
|
+
this.marks = [];
|
|
100
|
+
this.totals = false;
|
|
101
|
+
this.literal = false;
|
|
102
|
+
this.focusAt = { row: 0, column: 0 };
|
|
103
|
+
}
|
|
104
|
+
connectedCallback() {
|
|
105
|
+
super.connectedCallback();
|
|
106
|
+
window.addEventListener("language-changed", this.relabel);
|
|
107
|
+
window.addEventListener("translations-loaded", this.relabel);
|
|
108
|
+
}
|
|
109
|
+
disconnectedCallback() {
|
|
110
|
+
window.removeEventListener("language-changed", this.relabel);
|
|
111
|
+
window.removeEventListener("translations-loaded", this.relabel);
|
|
112
|
+
super.disconnectedCallback();
|
|
113
|
+
}
|
|
114
|
+
willUpdate(changed) {
|
|
115
|
+
super.willUpdate(changed);
|
|
116
|
+
this.style.setProperty("--ds-matrix-names", String(whole(this.names, 2, 8)));
|
|
117
|
+
}
|
|
118
|
+
words(value, fallback) {
|
|
119
|
+
if (value && this.literal)
|
|
120
|
+
return value;
|
|
121
|
+
return getText(value || fallback) || value || fallback;
|
|
122
|
+
}
|
|
123
|
+
get ordered() {
|
|
124
|
+
return orderColumns(this.columns ?? [], this.groups ?? []);
|
|
125
|
+
}
|
|
126
|
+
markLabel(mark) {
|
|
127
|
+
return this.marks.find(entry => entry.mark === mark)?.label ?? mark;
|
|
128
|
+
}
|
|
129
|
+
async move(row, column) {
|
|
130
|
+
const rows = this.rows.length, columns = this.columns.length;
|
|
131
|
+
if (!rows || !columns)
|
|
132
|
+
return;
|
|
133
|
+
this.focusAt = { row: Math.max(0, Math.min(rows - 1, row)), column: Math.max(0, Math.min(columns - 1, column)) };
|
|
134
|
+
this.lit = this.focusAt;
|
|
135
|
+
await this.updateComplete;
|
|
136
|
+
this.renderRoot.querySelector(`.cell[data-row="${this.focusAt.row}"][data-column="${this.focusAt.column}"]`)?.focus();
|
|
137
|
+
}
|
|
138
|
+
pressCell(row, column) {
|
|
139
|
+
const entry = this.ordered[column];
|
|
140
|
+
const axis = this.rows[row];
|
|
141
|
+
if (!entry || !axis)
|
|
142
|
+
return;
|
|
143
|
+
const cell = this.cells.find(item => item.row === axis.id && item.column === entry.column.id);
|
|
144
|
+
this.focusAt = { row, column };
|
|
145
|
+
this.dispatchEvent(new CustomEvent("cell-press", { bubbles: true, composed: true, detail: { row: axis, column: entry.column, cell } }));
|
|
146
|
+
}
|
|
147
|
+
mark(mark) {
|
|
148
|
+
return MARKS.includes(mark) ? html `<i class="mark" data-mark=${mark} aria-hidden="true"></i>` : nothing;
|
|
149
|
+
}
|
|
150
|
+
render() {
|
|
151
|
+
const ordered = this.ordered;
|
|
152
|
+
const rows = this.rows ?? [];
|
|
153
|
+
const byPair = new Map((this.cells ?? []).map(cell => [`${cell.row}>${cell.column}`, cell]));
|
|
154
|
+
const lit = this.lit;
|
|
155
|
+
const focus = this.focusAt;
|
|
156
|
+
// One bar over each run of columns in the same group.
|
|
157
|
+
const bars = [];
|
|
158
|
+
ordered.forEach(({ group }, index) => {
|
|
159
|
+
const last = bars.at(-1);
|
|
160
|
+
if (last && last.group === group)
|
|
161
|
+
last.span++;
|
|
162
|
+
else
|
|
163
|
+
bars.push({ group, start: index, span: 1 });
|
|
164
|
+
});
|
|
165
|
+
const tint = (group) => (group ? `--ds-matrix-colour: ${group.color};` : "");
|
|
166
|
+
const counts = ordered.map(({ column }) => (this.cells ?? []).filter(cell => cell.column === column.id && cell.mark !== "dash" && rows.some(row => row.id === cell.row)).length);
|
|
167
|
+
const body = rows.length + (this.totals ? 1 : 0);
|
|
168
|
+
const name = this.label ? this.words(this.label, this.label) : undefined;
|
|
169
|
+
return html `<div class="matrix" part="matrix" @pointerover=${this.onPointerOver} @pointerleave=${() => (this.lit = undefined)}>
|
|
170
|
+
<div
|
|
171
|
+
class="grid"
|
|
172
|
+
part="grid"
|
|
173
|
+
role="grid"
|
|
174
|
+
aria-label=${name ?? nothing}
|
|
175
|
+
style=${`--ds-matrix-columns: ${ordered.length}; --ds-matrix-body: ${body};`}
|
|
176
|
+
@keydown=${this.onKeyDown}
|
|
177
|
+
@click=${this.onClick}
|
|
178
|
+
>
|
|
179
|
+
${bars.map(bar => bar.group
|
|
180
|
+
? html `<span class="group" part="group" aria-hidden="true" style=${`grid-column: ${bar.start + 2} / span ${bar.span}; ${tint(bar.group)}`}><span>${bar.group.label}</span></span>`
|
|
181
|
+
: nothing)}
|
|
182
|
+
<div role="row" class="row">
|
|
183
|
+
<span role="columnheader" class="corner"></span>
|
|
184
|
+
${ordered.map(({ column, group }, index) => html `<span
|
|
185
|
+
role="columnheader"
|
|
186
|
+
class="column"
|
|
187
|
+
part="column"
|
|
188
|
+
data-column=${index}
|
|
189
|
+
?data-lit=${lit?.column === index}
|
|
190
|
+
style=${`grid-column: ${index + 2}; ${tint(group)}`}
|
|
191
|
+
><span>${column.label}</span></span>`)}
|
|
192
|
+
</div>
|
|
193
|
+
${rows.map((row, r) => html `<div role="row" class="row">
|
|
194
|
+
<span role="rowheader" class="name" part="name" data-row=${r} ?data-lit=${lit?.row === r} style=${`grid-row: ${r + 3}`}>${row.label}</span>
|
|
195
|
+
${ordered.map(({ column, group }, c) => {
|
|
196
|
+
const cell = byPair.get(`${row.id}>${column.id}`);
|
|
197
|
+
const words = `${row.label}, ${column.label}: ${cell ? this.markLabel(cell.mark) : "–"}${cell?.note ? `. ${cell.note}` : ""}`;
|
|
198
|
+
return html `<span
|
|
199
|
+
role="gridcell"
|
|
200
|
+
class="cell"
|
|
201
|
+
part="cell"
|
|
202
|
+
data-row=${r}
|
|
203
|
+
data-column=${c}
|
|
204
|
+
tabindex=${focus.row === r && focus.column === c ? 0 : -1}
|
|
205
|
+
aria-label=${words}
|
|
206
|
+
data-tooltip=${words}
|
|
207
|
+
?data-lit=${lit !== undefined && (lit.row === r || lit.column === c)}
|
|
208
|
+
style=${`grid-row: ${r + 3}; grid-column: ${c + 2}; ${tint(group)}`}
|
|
209
|
+
>${cell ? this.mark(cell.mark) : nothing}</span>`;
|
|
210
|
+
})}
|
|
211
|
+
</div>`)}
|
|
212
|
+
${this.totals
|
|
213
|
+
? html `<div role="row" class="row">
|
|
214
|
+
<span role="rowheader" class="name totals" style=${`grid-row: ${rows.length + 3}`}>${this.words(this.totalsLabel, "Total")}</span>
|
|
215
|
+
${counts.map((count, c) => html `<span
|
|
216
|
+
role="gridcell"
|
|
217
|
+
class="cell count"
|
|
218
|
+
part="count"
|
|
219
|
+
data-column=${c}
|
|
220
|
+
?data-lit=${lit?.column === c}
|
|
221
|
+
style=${`grid-row: ${rows.length + 3}; grid-column: ${c + 2}; ${tint(ordered[c].group)}`}
|
|
222
|
+
>${count || ""}</span>`)}
|
|
223
|
+
</div>`
|
|
224
|
+
: nothing}
|
|
225
|
+
${body && ordered.length ? html `<span class="frame" aria-hidden="true"></span>` : nothing}
|
|
226
|
+
</div>
|
|
227
|
+
${this.marks.length
|
|
228
|
+
? html `<div class="legend" part="legend">${this.marks.map(entry => html `<span class="key"><span class="key-mark">${this.mark(entry.mark)}</span>${entry.label}</span>`)}</div>`
|
|
229
|
+
: nothing}
|
|
230
|
+
</div>`;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
Matrix.properties = {
|
|
234
|
+
rows: { attribute: false },
|
|
235
|
+
columns: { attribute: false },
|
|
236
|
+
groups: { attribute: false },
|
|
237
|
+
cells: { attribute: false },
|
|
238
|
+
marks: { attribute: false },
|
|
239
|
+
totals: { type: Boolean, reflect: true },
|
|
240
|
+
totalsLabel: { type: String, attribute: "totals-label" },
|
|
241
|
+
names: { type: Number },
|
|
242
|
+
label: { type: String },
|
|
243
|
+
literal: { type: Boolean, reflect: true },
|
|
244
|
+
lit: { state: true },
|
|
245
|
+
focusAt: { state: true },
|
|
246
|
+
};
|
|
247
|
+
Matrix.styles = [unsafeCSS(metrics), unsafeCSS(styles)];
|
|
248
|
+
define("ds-matrix", Matrix);
|
package/dist/3-unit/ds-menu.d.ts
CHANGED
|
@@ -119,7 +119,7 @@ export declare class Menu extends LitElement {
|
|
|
119
119
|
openAt(point: {
|
|
120
120
|
x: number;
|
|
121
121
|
y: number;
|
|
122
|
-
}, invokingControl?: HTMLElement): void;
|
|
122
|
+
}, invokingControl?: HTMLElement | null): void;
|
|
123
123
|
/** A selected action dismisses its whole branch. Products can decline it. */
|
|
124
124
|
select(): void;
|
|
125
125
|
private contextControl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ds-menu.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAElD,OAAO,qBAAqB,CAAC;AAC7B,OAAO,0BAA0B,CAAC;AAClC,OAAO,mBAAmB,CAAC;AAM3B,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAClF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAChH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;AAIvH;6EAC6E;AAC7E,qBAAa,IAAK,SAAQ,UAAU;IAClC,MAAM,CAAC,MAAM,0BAAqB;IAClC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAcf;IACM,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACtB,4EAA4E;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/C,WAAW,EAAE,eAAe,CAAC;IACrC,sEAAsE;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,cAAc,CAAC,CAA4C;IACnE,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgC;IACnD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAClC,OAAO,CAAC,eAAe,CAAC,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,KAAK,UAAU,GAAgF;IACtG,OAAO,KAAK,QAAQ,GAAsD;;IAiB1E,iBAAiB;IAKjB,oBAAoB;IAQpB,OAAO;IA0BP,+DAA+D;IAC/D,SAAS;IACT,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,iBAAiB;IAKzB,4FAA4F;IAC5F,MAAM,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"ds-menu.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-menu.ts"],"names":[],"mappings":"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"}
|
package/dist/3-unit/ds-menu.js
CHANGED
|
@@ -136,11 +136,14 @@ export class Menu extends LitElement {
|
|
|
136
136
|
const left = viewport?.offsetLeft ?? 0, top = viewport?.offsetTop ?? 0;
|
|
137
137
|
const width = viewport?.width ?? view.innerWidth, height = viewport?.height ?? view.innerHeight;
|
|
138
138
|
const gap = parseFloat(view.getComputedStyle(this).scrollPaddingTop) || 10, unit = gap * 2;
|
|
139
|
-
|
|
139
|
+
// Whole squares: the room and the height a menu may take round down to
|
|
140
|
+
// them, and a menu as wide as its anchor rounds that width up.
|
|
141
|
+
const squares = (length, round) => round(Math.max(0, length) / unit + (round === Math.floor ? 0.001 : -0.001)) * unit;
|
|
142
|
+
const room = squares(width - 2 * gap, Math.floor);
|
|
140
143
|
this.style.maxWidth = `${room}px`;
|
|
141
|
-
this.style.setProperty("--ds-menu-anchor-width", `${Math.min(room, Math.max(4 * unit, rect.width))}px`);
|
|
144
|
+
this.style.setProperty("--ds-menu-anchor-width", `${Math.min(room, Math.max(4 * unit, squares(rect.width, Math.ceil)))}px`);
|
|
142
145
|
if (this.placement === "right" || this.placement === "left" || this.triggerMode === "submenu") {
|
|
143
|
-
this.style.setProperty("--ds-menu-available-height", `${
|
|
146
|
+
this.style.setProperty("--ds-menu-available-height", `${squares(height - 2 * gap, Math.floor)}px`);
|
|
144
147
|
const box = this.getBoundingClientRect();
|
|
145
148
|
const preferLeft = this.placement === "left" || view.getComputedStyle(this).direction === "rtl";
|
|
146
149
|
const toRight = left + width - rect.right, toLeft = rect.left - left;
|
|
@@ -153,7 +156,7 @@ export class Menu extends LitElement {
|
|
|
153
156
|
const frame = this.shadowRoot?.querySelector(".frame");
|
|
154
157
|
const needed = Math.min(frame?.scrollHeight ?? this.scrollHeight, 8 * unit);
|
|
155
158
|
const up = this.placement === "top" ? above >= needed || above >= below : below < needed && above > below;
|
|
156
|
-
this.style.setProperty("--ds-menu-available-height", `${
|
|
159
|
+
this.style.setProperty("--ds-menu-available-height", `${squares(Math.min(height - 2 * gap, up ? above : below), Math.floor)}px`);
|
|
157
160
|
const box = this.getBoundingClientRect();
|
|
158
161
|
this.style.left = `${Math.max(left + gap, Math.min(rect.left, left + width - gap - box.width))}px`;
|
|
159
162
|
this.style.top = `${Math.max(top + gap, up ? rect.top - gap - box.height : rect.bottom + gap)}px`;
|
package/dist/3-unit/ds-row.d.ts
CHANGED
|
@@ -2,11 +2,30 @@ import { LitElement } from "lit";
|
|
|
2
2
|
/**
|
|
3
3
|
* A horizontal run of elements one row (`--ds-row-height`) tall.
|
|
4
4
|
*
|
|
5
|
+
* With `href` the whole row is one link, with `interactive` one button: it
|
|
6
|
+
* shows the pointer over it, the press and the focus ring across the row,
|
|
7
|
+
* and its content keeps the row's layout. Controls in the `end` slot stay
|
|
8
|
+
* separately pressable. `current` marks the destination being shown
|
|
9
|
+
* (`aria-current="page"`); `nav` draws the row as a navigation row.
|
|
10
|
+
*
|
|
5
11
|
* @element ds-row
|
|
6
12
|
* @attr fill - Spread the children from edge to edge.
|
|
7
13
|
* @attr centered - Centre the children.
|
|
8
14
|
* @attr end - Push the children to the end.
|
|
9
15
|
* @attr auto - Size to the content instead of one row.
|
|
16
|
+
* @attr stacked - Stack the children, each on its own line, sized to them (a tile or a card).
|
|
17
|
+
* @attr href - Make the row a link to this address.
|
|
18
|
+
* @attr interactive - Make the row a button.
|
|
19
|
+
* @attr disabled - Keep the row from being pressed.
|
|
20
|
+
* @attr current - The destination being shown: `aria-current="page"`, or the value given (`step`, `location`, …).
|
|
21
|
+
* @attr nav - Draw a navigation row: corners of two pixels, as the sidebar's rows.
|
|
22
|
+
* @attr label - The accessible name, when the row's words do not say it.
|
|
23
|
+
* @attr target - Where a link opens (`_blank`, …).
|
|
24
|
+
* @attr rel - The link's relationship (`noopener`, …).
|
|
25
|
+
* @slot - The row's content, inside its press target.
|
|
26
|
+
* @slot end - Controls of their own after the content, outside the press target.
|
|
27
|
+
* @fires ds-row-press - `{ href }`: the row was pressed. Cancel it to route a link yourself; a modified click on a link is left to the browser.
|
|
28
|
+
* @csspart target - The link or button that is the row's press target.
|
|
10
29
|
*/
|
|
11
30
|
export declare class Row extends LitElement {
|
|
12
31
|
static properties: {
|
|
@@ -26,13 +45,60 @@ export declare class Row extends LitElement {
|
|
|
26
45
|
type: BooleanConstructor;
|
|
27
46
|
reflect: boolean;
|
|
28
47
|
};
|
|
48
|
+
stacked: {
|
|
49
|
+
type: BooleanConstructor;
|
|
50
|
+
reflect: boolean;
|
|
51
|
+
};
|
|
52
|
+
href: {
|
|
53
|
+
type: StringConstructor;
|
|
54
|
+
reflect: boolean;
|
|
55
|
+
};
|
|
56
|
+
interactive: {
|
|
57
|
+
type: BooleanConstructor;
|
|
58
|
+
reflect: boolean;
|
|
59
|
+
};
|
|
60
|
+
disabled: {
|
|
61
|
+
type: BooleanConstructor;
|
|
62
|
+
reflect: boolean;
|
|
63
|
+
};
|
|
64
|
+
current: {
|
|
65
|
+
type: StringConstructor;
|
|
66
|
+
reflect: boolean;
|
|
67
|
+
};
|
|
68
|
+
nav: {
|
|
69
|
+
type: BooleanConstructor;
|
|
70
|
+
reflect: boolean;
|
|
71
|
+
};
|
|
72
|
+
label: {
|
|
73
|
+
type: StringConstructor;
|
|
74
|
+
};
|
|
75
|
+
target: {
|
|
76
|
+
type: StringConstructor;
|
|
77
|
+
};
|
|
78
|
+
rel: {
|
|
79
|
+
type: StringConstructor;
|
|
80
|
+
};
|
|
29
81
|
};
|
|
30
82
|
fill: boolean;
|
|
31
83
|
centered: boolean;
|
|
32
84
|
end: boolean;
|
|
33
85
|
auto: boolean;
|
|
86
|
+
stacked: boolean;
|
|
87
|
+
href: string | undefined;
|
|
88
|
+
interactive: boolean;
|
|
89
|
+
disabled: boolean;
|
|
90
|
+
current: string | null | undefined;
|
|
91
|
+
nav: boolean;
|
|
92
|
+
label: string | undefined;
|
|
93
|
+
target: string | undefined;
|
|
94
|
+
rel: string | undefined;
|
|
34
95
|
constructor();
|
|
35
96
|
static styles: import("lit").CSSResult;
|
|
97
|
+
/** The `aria-current` value, or none. */
|
|
98
|
+
private get currentValue();
|
|
99
|
+
/** Focuses the press target, so `row.focus()` lands on the link or button. */
|
|
100
|
+
focus(options?: FocusOptions): void;
|
|
101
|
+
private press;
|
|
36
102
|
render(): import("lit").TemplateResult<1>;
|
|
37
103
|
}
|
|
38
104
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ds-row.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-row.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"ds-row.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-row.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAQlD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,GAAI,SAAQ,UAAU;IACjC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAcf;IAEM,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;;IAmBhC,MAAM,CAAC,MAAM,0BAAqB;IAElC,yCAAyC;IACzC,OAAO,KAAK,YAAY,GAIvB;IAED,8EAA8E;IAC9E,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY;IAM5B,OAAO,CAAC,KAAK;IAQb,MAAM;CAcP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,QAAQ,EAAE,GAAG,CAAC;KACf;CACF"}
|