@0001-labs/design-system-1 0.3.0-alpha.13 → 0.3.0-alpha.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DS1/0-face/calendar.ts +194 -0
- package/DS1/0-face/carousel.ts +623 -0
- package/DS1/0-face/component-visibility.ts +14 -0
- package/DS1/0-face/copy-text.ts +96 -0
- package/DS1/0-face/device.ts +8 -58
- package/DS1/0-face/dialog-swipe.ts +249 -0
- package/DS1/0-face/dialogs.ts +208 -0
- package/DS1/0-face/drawer.ts +258 -0
- package/DS1/0-face/feedback-words.ts +36 -0
- package/DS1/0-face/feedback.ts +40 -0
- package/DS1/0-face/format.ts +700 -0
- package/DS1/0-face/generated/toast-assets.ts +18 -0
- package/DS1/0-face/grid-fit.ts +1 -1
- package/DS1/0-face/grid.ts +3 -2
- package/DS1/0-face/header.ts +78 -0
- package/DS1/0-face/i18n.ts +93 -18
- package/DS1/0-face/keys.ts +276 -0
- package/DS1/0-face/languages.ts +4 -4
- package/DS1/0-face/layout-inspector.ts +6 -6
- package/DS1/0-face/library-styles.ts +33 -0
- package/DS1/0-face/load-toaster.ts +7 -0
- package/DS1/0-face/preference-options.ts +29 -0
- package/DS1/0-face/preferences.ts +3 -11
- package/DS1/0-face/pricing.ts +98 -43
- package/DS1/0-face/scaling.ts +160 -4
- package/DS1/0-face/shared-words.ts +9 -4
- package/DS1/0-face/sidebar.ts +201 -0
- package/DS1/0-face/theme-bootstrap.js +184 -0
- package/DS1/0-face/theme.ts +89 -47
- package/DS1/0-face/toast-queue.ts +157 -0
- package/DS1/0-face/toaster.ts +384 -0
- package/DS1/0-face/tooltips.ts +157 -15
- package/DS1/0-face/translations/da.json +60 -1
- package/DS1/0-face/translations/de.json +60 -1
- package/DS1/0-face/translations/en.json +60 -1
- package/DS1/0-face/translations/es.json +60 -1
- package/DS1/0-face/translations/fi.json +60 -1
- package/DS1/0-face/translations/fr.json +60 -1
- package/DS1/0-face/translations/is.json +60 -1
- package/DS1/0-face/translations/it.json +60 -1
- package/DS1/0-face/translations/ja.json +60 -1
- package/DS1/0-face/translations/ko.json +60 -1
- package/DS1/0-face/translations/nb.json +60 -1
- package/DS1/0-face/translations/pt-BR.json +60 -1
- package/DS1/0-face/translations/pt.json +60 -1
- package/DS1/0-face/translations/sv.json +60 -1
- package/DS1/0-face/translations/zh.json +60 -1
- package/DS1/0-face/translations-format.ts +3 -4
- package/DS1/1-root/card.css +192 -0
- package/DS1/1-root/carousel.css +136 -0
- package/DS1/1-root/cjk.css +23 -0
- package/DS1/1-root/component-metrics.css +1 -0
- package/DS1/1-root/component-tokens.css +51 -8
- package/DS1/1-root/controls.css +891 -14
- package/DS1/1-root/dialog-placement.css +191 -0
- package/DS1/1-root/document.css +183 -0
- package/DS1/1-root/drawer.css +83 -0
- package/DS1/1-root/empty.css +83 -0
- package/DS1/1-root/figures.css +141 -0
- package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
- package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
- package/DS1/1-root/fonts.css +69 -0
- package/DS1/1-root/footer.css +186 -0
- package/DS1/1-root/header.css +165 -0
- package/DS1/1-root/library-tokens.ts +91 -0
- package/DS1/1-root/measures.ts +53 -0
- package/DS1/1-root/notice.css +165 -0
- package/DS1/1-root/one.css +14 -84
- package/DS1/1-root/one.semantic.css +200 -148
- package/DS1/1-root/palette.css +58 -0
- package/DS1/1-root/palette.ts +19 -0
- package/DS1/1-root/progress.css +356 -0
- package/DS1/1-root/prose.css +202 -0
- package/DS1/1-root/row.css +300 -0
- package/DS1/1-root/table.css +111 -0
- package/DS1/1-root/text.css +70 -0
- package/DS1/2-core/button-split.ts +55 -0
- package/DS1/2-core/chart/chart.css +169 -0
- package/DS1/2-core/chart/grid-chart.ts +554 -0
- package/DS1/2-core/ds-avatar.ts +25 -6
- package/DS1/2-core/ds-badge.ts +10 -10
- package/DS1/2-core/ds-button.ts +111 -26
- package/DS1/2-core/ds-card.ts +135 -105
- package/DS1/2-core/ds-chart.ts +327 -0
- package/DS1/2-core/ds-composer.ts +8 -2
- package/DS1/2-core/ds-cycle.ts +97 -21
- package/DS1/2-core/ds-empty.ts +120 -0
- package/DS1/2-core/ds-icon.ts +11 -2
- package/DS1/2-core/ds-input.ts +165 -6
- package/DS1/2-core/ds-message.ts +218 -0
- package/DS1/2-core/ds-notice.ts +10 -0
- package/DS1/2-core/ds-progress.ts +380 -0
- package/DS1/2-core/ds-stat.ts +174 -0
- package/DS1/2-core/ds-switch.ts +1 -0
- package/DS1/2-core/ds-text.ts +15 -2
- package/DS1/2-core/ds-toast.ts +354 -0
- package/DS1/2-core/figures.ts +105 -0
- package/DS1/2-core/generated/ds-icon-map.ts +238 -128
- package/DS1/2-core/generated/icon-avatar.ts +2 -0
- package/DS1/2-core/generated/icons-extra.ts +120 -65
- package/DS1/2-core/generated/icons-immediate.ts +1 -1
- package/DS1/2-core/styles/ds-avatar.css +9 -8
- package/DS1/2-core/styles/ds-button-host.css +26 -3
- package/DS1/2-core/styles/ds-button-split.css +67 -0
- package/DS1/2-core/styles/ds-button.css +49 -15
- package/DS1/2-core/styles/ds-card.css +34 -0
- package/DS1/2-core/styles/ds-composer.css +13 -0
- package/DS1/2-core/styles/ds-cycle.css +10 -0
- package/DS1/2-core/styles/ds-empty.css +18 -0
- package/DS1/2-core/styles/ds-gap.css +1 -0
- package/DS1/2-core/styles/ds-icon.css +1 -0
- package/DS1/2-core/styles/ds-input.css +59 -6
- package/DS1/2-core/styles/ds-notice.css +32 -0
- package/DS1/2-core/styles/ds-progress.css +25 -0
- package/DS1/2-core/styles/ds-select.css +2 -2
- package/DS1/2-core/styles/ds-split.css +2 -62
- package/DS1/2-core/styles/ds-stat.css +34 -0
- package/DS1/2-core/styles/ds-switch.css +16 -1
- package/DS1/2-core/styles/ds-text.css +43 -12
- package/DS1/2-core/styles/ds-toast.css +182 -0
- package/DS1/2-core/styles/ds-tooltip.css +1 -0
- package/DS1/3-unit/calendar-base.ts +263 -0
- package/DS1/3-unit/ds-accordion.ts +9 -1
- package/DS1/3-unit/ds-avatar-group.ts +1 -0
- package/DS1/3-unit/ds-calendar-large.ts +349 -0
- package/DS1/3-unit/ds-calendar.ts +344 -0
- package/DS1/3-unit/ds-carousel.ts +368 -0
- package/DS1/3-unit/ds-date-picker.ts +540 -0
- package/DS1/3-unit/ds-form.ts +45 -37
- package/DS1/3-unit/ds-list.ts +48 -1
- package/DS1/3-unit/ds-matrix.ts +318 -0
- package/DS1/3-unit/ds-menu.ts +8 -4
- package/DS1/3-unit/ds-row.ts +84 -1
- package/DS1/3-unit/ds-sidebar.ts +366 -0
- package/DS1/3-unit/ds-table.ts +75 -34
- package/DS1/3-unit/styles/ds-accordion.css +1 -0
- package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
- package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
- package/DS1/3-unit/styles/ds-calendar.css +238 -0
- package/DS1/3-unit/styles/ds-carousel.css +30 -0
- package/DS1/3-unit/styles/ds-date-picker.css +124 -0
- package/DS1/3-unit/styles/ds-list.css +1 -0
- package/DS1/3-unit/styles/ds-matrix.css +203 -0
- package/DS1/3-unit/styles/ds-menu.css +31 -6
- package/DS1/3-unit/styles/ds-row.css +84 -2
- package/DS1/3-unit/styles/ds-sidebar.css +134 -0
- package/DS1/3-unit/styles/ds-table.css +3 -74
- package/DS1/4-page/ds-dialog.ts +40 -4
- package/DS1/4-page/ds-document.ts +240 -0
- package/DS1/4-page/ds-footer.ts +165 -0
- package/DS1/4-page/ds-grid.ts +39 -59
- package/DS1/4-page/ds-header.ts +171 -0
- package/DS1/4-page/ds-page.ts +184 -0
- package/DS1/4-page/email.ts +2 -3
- package/DS1/4-page/styles/ds-container.css +1 -0
- package/DS1/4-page/styles/ds-document.css +18 -0
- package/DS1/4-page/styles/ds-footer.css +29 -0
- package/DS1/4-page/styles/ds-grid.css +31 -85
- package/DS1/4-page/styles/ds-header.css +57 -0
- package/DS1/4-page/styles/ds-page.css +214 -0
- package/DS1/components.ts +7 -1
- package/DS1/index.ts +24 -6
- package/DS1/react/avatar.ts +4 -5
- package/DS1/react/button-split.ts +29 -0
- package/DS1/react/button.ts +32 -13
- package/DS1/react/carousel.ts +76 -0
- package/DS1/react/dialog.ts +36 -5
- package/DS1/react/document.ts +14 -0
- package/DS1/react/empty.ts +32 -0
- package/DS1/react/footer.ts +17 -0
- package/DS1/react/header.ts +15 -0
- package/DS1/react/input.ts +28 -17
- package/DS1/react/message.ts +73 -0
- package/DS1/react/notice.ts +59 -0
- package/DS1/react/page.ts +13 -0
- package/DS1/react/progress.ts +99 -0
- package/DS1/react/sidebar.ts +71 -0
- package/DS1/react/stat.ts +73 -0
- package/DS1/react/toast.ts +82 -0
- package/DS1/x-icon/Tabler-LICENSE.md +27 -0
- package/DS1/x-icon/airtable.svg +5 -0
- package/DS1/x-icon/attach.svg +3 -0
- package/DS1/x-icon/audio.svg +3 -0
- package/DS1/x-icon/bag-alt.svg +3 -0
- package/DS1/x-icon/bank.svg +3 -0
- package/DS1/x-icon/banknote.svg +3 -0
- package/DS1/x-icon/bolt.svg +3 -0
- package/DS1/x-icon/book-alt.svg +3 -0
- package/DS1/x-icon/book.svg +4 -0
- package/DS1/x-icon/box.svg +3 -0
- package/DS1/x-icon/briefcase.svg +3 -0
- package/DS1/x-icon/building.svg +4 -0
- package/DS1/x-icon/car.svg +3 -0
- package/DS1/x-icon/card.svg +3 -0
- package/DS1/x-icon/cart.svg +3 -0
- package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-down.svg} +1 -1
- package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
- package/DS1/x-icon/{ezo-android-screen-lists.svg → chevron-right.svg} +1 -1
- package/DS1/x-icon/{ezo-item-button-reopen.svg → chevron-up.svg} +1 -1
- package/DS1/x-icon/cloud.svg +3 -0
- package/DS1/x-icon/coffee.svg +3 -0
- package/DS1/x-icon/coins.svg +3 -0
- package/DS1/x-icon/cursor.svg +3 -0
- package/DS1/x-icon/curve.svg +7 -0
- package/DS1/x-icon/dislike.svg +4 -0
- package/DS1/x-icon/dot-bank.svg +3 -0
- package/DS1/x-icon/dot-banknote.svg +3 -0
- package/DS1/x-icon/dot-banknotes.svg +3 -0
- package/DS1/x-icon/dot-card.svg +3 -0
- package/DS1/x-icon/dot-coin.svg +3 -0
- package/DS1/x-icon/dot-coins.svg +3 -0
- package/DS1/x-icon/dot-receipt.svg +3 -0
- package/DS1/x-icon/dot-safe.svg +3 -0
- package/DS1/x-icon/dot-transfer.svg +3 -0
- package/DS1/x-icon/dot-wallet.svg +3 -0
- package/DS1/x-icon/download.svg +4 -0
- package/DS1/x-icon/drive.svg +5 -0
- package/DS1/x-icon/drop.svg +3 -0
- package/DS1/x-icon/dropbox.svg +3 -0
- package/DS1/x-icon/dumbbell.svg +3 -0
- package/DS1/x-icon/eye-off.svg +3 -0
- package/DS1/x-icon/eye.svg +3 -0
- package/DS1/x-icon/facebook.svg +3 -0
- package/DS1/x-icon/figma.svg +5 -0
- package/DS1/x-icon/flame.svg +3 -0
- package/DS1/x-icon/flip.svg +5 -0
- package/DS1/x-icon/food.svg +3 -0
- package/DS1/x-icon/fuel.svg +3 -0
- package/DS1/x-icon/game.svg +3 -0
- package/DS1/x-icon/gift.svg +3 -0
- package/DS1/x-icon/github.svg +3 -0
- package/DS1/x-icon/heart.svg +3 -0
- package/DS1/x-icon/history.svg +3 -0
- package/DS1/x-icon/home-alt.svg +3 -0
- package/DS1/x-icon/income.svg +3 -0
- package/DS1/x-icon/info.svg +5 -0
- package/DS1/x-icon/instagram.svg +5 -0
- package/DS1/x-icon/jpbank.svg +3 -0
- package/DS1/x-icon/key.svg +4 -0
- package/DS1/x-icon/keyboard.svg +3 -0
- package/DS1/x-icon/like.svg +4 -0
- package/DS1/x-icon/linkedin.svg +7 -0
- package/DS1/x-icon/loom.svg +6 -0
- package/DS1/x-icon/map.svg +4 -0
- package/DS1/x-icon/medical.svg +3 -0
- package/DS1/x-icon/minus.svg +3 -0
- package/DS1/x-icon/moon.svg +3 -0
- package/DS1/x-icon/move.svg +3 -0
- package/DS1/x-icon/music-alt.svg +3 -0
- package/DS1/x-icon/music.svg +5 -0
- package/DS1/x-icon/notion.svg +6 -0
- package/DS1/x-icon/offline.svg +3 -0
- package/DS1/x-icon/pause.svg +4 -0
- package/DS1/x-icon/paw.svg +3 -0
- package/DS1/x-icon/pdf.svg +3 -0
- package/DS1/x-icon/people.svg +5 -0
- package/DS1/x-icon/percent.svg +3 -0
- package/DS1/x-icon/phone.svg +3 -0
- package/DS1/x-icon/pill.svg +3 -0
- package/DS1/x-icon/plane.svg +3 -0
- package/DS1/x-icon/postal.svg +3 -0
- package/DS1/x-icon/present.svg +4 -0
- package/DS1/x-icon/reaction.svg +5 -0
- package/DS1/x-icon/receipt.svg +3 -0
- package/DS1/x-icon/refresh.svg +3 -0
- package/DS1/x-icon/refund.svg +3 -0
- package/DS1/x-icon/repeat.svg +3 -0
- package/DS1/x-icon/rotate.svg +4 -0
- package/DS1/x-icon/safe.svg +3 -0
- package/DS1/x-icon/school-alt.svg +3 -0
- package/DS1/x-icon/shield-alt.svg +3 -0
- package/DS1/x-icon/shield.svg +4 -0
- package/DS1/x-icon/shirt.svg +3 -0
- package/DS1/x-icon/shop.svg +3 -0
- package/DS1/x-icon/sign-in.svg +3 -0
- package/DS1/x-icon/sign-out.svg +3 -0
- package/DS1/x-icon/slack.svg +6 -0
- package/DS1/x-icon/sparkle.svg +3 -0
- package/DS1/x-icon/start.svg +4 -0
- package/DS1/x-icon/stop.svg +3 -0
- package/DS1/x-icon/sun.svg +3 -0
- package/DS1/x-icon/system.svg +4 -0
- package/DS1/x-icon/tag.svg +3 -0
- package/DS1/x-icon/ticket.svg +3 -0
- package/DS1/x-icon/title-struck.svg +4 -0
- package/DS1/x-icon/train.svg +3 -0
- package/DS1/x-icon/transfer.svg +3 -0
- package/DS1/x-icon/tv.svg +3 -0
- package/DS1/x-icon/upload.svg +4 -0
- package/DS1/x-icon/video.svg +4 -0
- package/DS1/x-icon/vimeo.svg +3 -0
- package/DS1/x-icon/wallet.svg +3 -0
- package/DS1/x-icon/wifi.svg +3 -0
- package/DS1/x-icon/window.svg +4 -0
- package/DS1/x-icon/wrench.svg +3 -0
- package/DS1/x-icon/x-brand.svg +4 -0
- package/DS1/x-icon/youtube.svg +4 -0
- package/README.md +3 -3
- package/dist/0-face/calendar.d.ts +75 -0
- package/dist/0-face/calendar.d.ts.map +1 -0
- package/dist/0-face/calendar.js +149 -0
- package/dist/0-face/carousel.d.ts +174 -0
- package/dist/0-face/carousel.d.ts.map +1 -0
- package/dist/0-face/carousel.js +583 -0
- package/dist/0-face/component-visibility.d.ts +7 -0
- package/dist/0-face/component-visibility.d.ts.map +1 -0
- package/dist/0-face/component-visibility.js +11 -0
- package/dist/0-face/copy-text.d.ts +11 -0
- package/dist/0-face/copy-text.d.ts.map +1 -0
- package/dist/0-face/copy-text.js +97 -0
- package/dist/0-face/device.d.ts +3 -7
- package/dist/0-face/device.d.ts.map +1 -1
- package/dist/0-face/device.js +7 -41
- package/dist/0-face/dialog-swipe.d.ts +49 -0
- package/dist/0-face/dialog-swipe.d.ts.map +1 -0
- package/dist/0-face/dialog-swipe.js +239 -0
- package/dist/0-face/dialogs.d.ts +33 -0
- package/dist/0-face/dialogs.d.ts.map +1 -0
- package/dist/0-face/dialogs.js +173 -0
- package/dist/0-face/drawer.d.ts +64 -0
- package/dist/0-face/drawer.d.ts.map +1 -0
- package/dist/0-face/drawer.js +256 -0
- package/dist/0-face/feedback-words.d.ts +21 -0
- package/dist/0-face/feedback-words.d.ts.map +1 -0
- package/dist/0-face/feedback-words.js +30 -0
- package/dist/0-face/feedback.d.ts +41 -0
- package/dist/0-face/feedback.d.ts.map +1 -0
- package/dist/0-face/feedback.js +35 -0
- package/dist/0-face/format.d.ts +166 -0
- package/dist/0-face/format.d.ts.map +1 -0
- package/dist/0-face/format.js +445 -0
- package/dist/0-face/generated/toast-assets.d.ts +11 -0
- package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
- package/dist/0-face/generated/toast-assets.js +14 -0
- package/dist/0-face/grid-fit.js +1 -1
- package/dist/0-face/grid.d.ts.map +1 -1
- package/dist/0-face/grid.js +2 -1
- package/dist/0-face/header.d.ts +38 -0
- package/dist/0-face/header.d.ts.map +1 -0
- package/dist/0-face/header.js +80 -0
- package/dist/0-face/i18n.d.ts +32 -2
- package/dist/0-face/i18n.d.ts.map +1 -1
- package/dist/0-face/i18n.js +65 -19
- package/dist/0-face/keys.d.ts +104 -0
- package/dist/0-face/keys.d.ts.map +1 -0
- package/dist/0-face/keys.js +253 -0
- package/dist/0-face/languages.d.ts +2 -2
- package/dist/0-face/languages.js +3 -3
- package/dist/0-face/layout-inspector.js +6 -6
- package/dist/0-face/library-styles.d.ts +7 -0
- package/dist/0-face/library-styles.d.ts.map +1 -0
- package/dist/0-face/library-styles.js +29 -0
- package/dist/0-face/load-toaster.d.ts +8 -0
- package/dist/0-face/load-toaster.d.ts.map +1 -0
- package/dist/0-face/load-toaster.js +7 -0
- package/dist/0-face/preference-options.d.ts +34 -0
- package/dist/0-face/preference-options.d.ts.map +1 -0
- package/dist/0-face/preference-options.js +1 -0
- package/dist/0-face/preferences.d.ts +3 -12
- package/dist/0-face/preferences.d.ts.map +1 -1
- package/dist/0-face/pricing.d.ts +19 -9
- package/dist/0-face/pricing.d.ts.map +1 -1
- package/dist/0-face/pricing.js +81 -40
- package/dist/0-face/scaling.d.ts +71 -1
- package/dist/0-face/scaling.d.ts.map +1 -1
- package/dist/0-face/scaling.js +108 -3
- package/dist/0-face/shared-words.d.ts +9 -4
- package/dist/0-face/shared-words.d.ts.map +1 -1
- package/dist/0-face/sidebar.d.ts +69 -0
- package/dist/0-face/sidebar.d.ts.map +1 -0
- package/dist/0-face/sidebar.js +191 -0
- package/dist/0-face/theme-bootstrap.d.ts +1 -0
- package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
- package/dist/0-face/theme-bootstrap.js +214 -0
- package/dist/0-face/theme.d.ts +32 -0
- package/dist/0-face/theme.d.ts.map +1 -1
- package/dist/0-face/theme.js +69 -43
- package/dist/0-face/toast-queue.d.ts +110 -0
- package/dist/0-face/toast-queue.d.ts.map +1 -0
- package/dist/0-face/toast-queue.js +98 -0
- package/dist/0-face/toaster.d.ts +27 -0
- package/dist/0-face/toaster.d.ts.map +1 -0
- package/dist/0-face/toaster.js +373 -0
- package/dist/0-face/tooltips.d.ts +24 -1
- package/dist/0-face/tooltips.d.ts.map +1 -1
- package/dist/0-face/tooltips.js +155 -16
- package/dist/0-face/translations/da.json +60 -1
- package/dist/0-face/translations/de.json +60 -1
- package/dist/0-face/translations/en.json +60 -1
- package/dist/0-face/translations/es.json +60 -1
- package/dist/0-face/translations/fi.json +60 -1
- package/dist/0-face/translations/fr.json +60 -1
- package/dist/0-face/translations/is.json +60 -1
- package/dist/0-face/translations/it.json +60 -1
- package/dist/0-face/translations/ja.json +60 -1
- package/dist/0-face/translations/ko.json +60 -1
- package/dist/0-face/translations/nb.json +60 -1
- package/dist/0-face/translations/pt-BR.json +60 -1
- package/dist/0-face/translations/pt.json +60 -1
- package/dist/0-face/translations/sv.json +60 -1
- package/dist/0-face/translations/zh.json +60 -1
- package/dist/0-face/translations-format.d.ts.map +1 -1
- package/dist/0-face/translations-format.js +3 -4
- package/dist/1-root/library-tokens.d.ts +31 -0
- package/dist/1-root/library-tokens.d.ts.map +1 -0
- package/dist/1-root/library-tokens.js +84 -0
- package/dist/1-root/measures.d.ts +52 -0
- package/dist/1-root/measures.d.ts.map +1 -0
- package/dist/1-root/measures.js +49 -0
- package/dist/1-root/palette.d.ts +5 -0
- package/dist/1-root/palette.d.ts.map +1 -1
- package/dist/1-root/palette.js +18 -0
- package/dist/2-core/button-split.d.ts +21 -0
- package/dist/2-core/button-split.d.ts.map +1 -0
- package/dist/2-core/button-split.js +48 -0
- package/dist/2-core/chart/grid-chart.d.ts +113 -0
- package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
- package/dist/2-core/chart/grid-chart.js +466 -0
- package/dist/2-core/ds-avatar.d.ts +20 -3
- package/dist/2-core/ds-avatar.d.ts.map +1 -1
- package/dist/2-core/ds-avatar.js +19 -5
- package/dist/2-core/ds-badge.js +10 -13
- package/dist/2-core/ds-button.d.ts +76 -0
- package/dist/2-core/ds-button.d.ts.map +1 -1
- package/dist/2-core/ds-button.js +101 -26
- package/dist/2-core/ds-card.d.ts +76 -11
- package/dist/2-core/ds-card.d.ts.map +1 -1
- package/dist/2-core/ds-card.js +129 -105
- package/dist/2-core/ds-chart.d.ts +105 -0
- package/dist/2-core/ds-chart.d.ts.map +1 -0
- package/dist/2-core/ds-chart.js +390 -0
- package/dist/2-core/ds-composer.d.ts +7 -0
- package/dist/2-core/ds-composer.d.ts.map +1 -1
- package/dist/2-core/ds-composer.js +1 -1
- package/dist/2-core/ds-cycle.d.ts +36 -2
- package/dist/2-core/ds-cycle.d.ts.map +1 -1
- package/dist/2-core/ds-cycle.js +95 -18
- package/dist/2-core/ds-empty.d.ts +74 -0
- package/dist/2-core/ds-empty.d.ts.map +1 -0
- package/dist/2-core/ds-empty.js +96 -0
- package/dist/2-core/ds-icon.d.ts +6 -0
- package/dist/2-core/ds-icon.d.ts.map +1 -1
- package/dist/2-core/ds-icon.js +12 -2
- package/dist/2-core/ds-input.d.ts +39 -1
- package/dist/2-core/ds-input.d.ts.map +1 -1
- package/dist/2-core/ds-input.js +150 -6
- package/dist/2-core/ds-message.d.ts +154 -0
- package/dist/2-core/ds-message.d.ts.map +1 -0
- package/dist/2-core/ds-message.js +177 -0
- package/dist/2-core/ds-notice.d.ts +13 -0
- package/dist/2-core/ds-notice.d.ts.map +1 -0
- package/dist/2-core/ds-notice.js +11 -0
- package/dist/2-core/ds-progress.d.ts +200 -0
- package/dist/2-core/ds-progress.d.ts.map +1 -0
- package/dist/2-core/ds-progress.js +319 -0
- package/dist/2-core/ds-stat.d.ts +126 -0
- package/dist/2-core/ds-stat.d.ts.map +1 -0
- package/dist/2-core/ds-stat.js +137 -0
- package/dist/2-core/ds-switch.d.ts +1 -0
- package/dist/2-core/ds-switch.d.ts.map +1 -1
- package/dist/2-core/ds-switch.js +1 -0
- package/dist/2-core/ds-text.d.ts +15 -2
- package/dist/2-core/ds-text.d.ts.map +1 -1
- package/dist/2-core/ds-text.js +13 -0
- package/dist/2-core/ds-toast.d.ts +139 -0
- package/dist/2-core/ds-toast.d.ts.map +1 -0
- package/dist/2-core/ds-toast.js +329 -0
- package/dist/2-core/figures.d.ts +56 -0
- package/dist/2-core/figures.d.ts.map +1 -0
- package/dist/2-core/figures.js +70 -0
- package/dist/2-core/generated/ds-icon-map.d.ts +120 -65
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
- package/dist/2-core/generated/ds-icon-map.js +238 -128
- package/dist/2-core/generated/icon-avatar.d.ts +2 -0
- package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
- package/dist/2-core/generated/icon-avatar.js +2 -0
- package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
- package/dist/2-core/generated/icons-extra.js +120 -65
- package/dist/2-core/generated/icons-immediate.d.ts +1 -1
- package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
- package/dist/2-core/generated/icons-immediate.js +1 -1
- package/dist/3-unit/calendar-base.d.ts +149 -0
- package/dist/3-unit/calendar-base.d.ts.map +1 -0
- package/dist/3-unit/calendar-base.js +172 -0
- package/dist/3-unit/ds-accordion.d.ts +9 -0
- package/dist/3-unit/ds-accordion.d.ts.map +1 -1
- package/dist/3-unit/ds-accordion.js +7 -1
- package/dist/3-unit/ds-avatar-group.d.ts +1 -0
- package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
- package/dist/3-unit/ds-calendar-large.d.ts +138 -0
- package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar-large.js +305 -0
- package/dist/3-unit/ds-calendar.d.ts +175 -0
- package/dist/3-unit/ds-calendar.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar.js +303 -0
- package/dist/3-unit/ds-carousel.d.ts +182 -0
- package/dist/3-unit/ds-carousel.d.ts.map +1 -0
- package/dist/3-unit/ds-carousel.js +327 -0
- package/dist/3-unit/ds-date-picker.d.ts +203 -0
- package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
- package/dist/3-unit/ds-date-picker.js +499 -0
- package/dist/3-unit/ds-form.d.ts.map +1 -1
- package/dist/3-unit/ds-form.js +38 -28
- package/dist/3-unit/ds-list.d.ts +12 -0
- package/dist/3-unit/ds-list.d.ts.map +1 -1
- package/dist/3-unit/ds-list.js +52 -1
- package/dist/3-unit/ds-matrix.d.ts +146 -0
- package/dist/3-unit/ds-matrix.d.ts.map +1 -0
- package/dist/3-unit/ds-matrix.js +248 -0
- package/dist/3-unit/ds-menu.d.ts +1 -1
- package/dist/3-unit/ds-menu.d.ts.map +1 -1
- package/dist/3-unit/ds-menu.js +7 -4
- package/dist/3-unit/ds-row.d.ts +66 -0
- package/dist/3-unit/ds-row.d.ts.map +1 -1
- package/dist/3-unit/ds-row.js +80 -1
- package/dist/3-unit/ds-sidebar.d.ts +149 -0
- package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
- package/dist/3-unit/ds-sidebar.js +342 -0
- package/dist/3-unit/ds-table.d.ts +28 -10
- package/dist/3-unit/ds-table.d.ts.map +1 -1
- package/dist/3-unit/ds-table.js +53 -25
- package/dist/4-page/ds-dialog.d.ts +16 -1
- package/dist/4-page/ds-dialog.d.ts.map +1 -1
- package/dist/4-page/ds-dialog.js +39 -3
- package/dist/4-page/ds-document.d.ts +98 -0
- package/dist/4-page/ds-document.d.ts.map +1 -0
- package/dist/4-page/ds-document.js +213 -0
- package/dist/4-page/ds-footer.d.ts +100 -0
- package/dist/4-page/ds-footer.d.ts.map +1 -0
- package/dist/4-page/ds-footer.js +119 -0
- package/dist/4-page/ds-grid.d.ts +32 -12
- package/dist/4-page/ds-grid.d.ts.map +1 -1
- package/dist/4-page/ds-grid.js +30 -39
- package/dist/4-page/ds-header.d.ts +84 -0
- package/dist/4-page/ds-header.d.ts.map +1 -0
- package/dist/4-page/ds-header.js +143 -0
- package/dist/4-page/ds-page.d.ts +110 -0
- package/dist/4-page/ds-page.d.ts.map +1 -0
- package/dist/4-page/ds-page.js +155 -0
- package/dist/4-page/email.d.ts +2 -3
- package/dist/4-page/email.d.ts.map +1 -1
- package/dist/4-page/email.js +2 -3
- package/dist/components.d.ts +4 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -1
- package/dist/design-system-1.bundle.js +12322 -5523
- package/dist/design-system-1.bundle.js.map +1 -1
- package/dist/design-system-1.bundle.min.js +8771 -4115
- package/dist/design-system-1.bundle.min.js.map +1 -1
- package/dist/design-system-1.css +1 -1
- package/dist/feedback.js +541 -0
- package/dist/feedback.js.map +1 -0
- package/dist/{icons-extra-BoAACA4X.js → icons-extra-CiDDs7_-.js} +404 -312
- package/dist/icons-extra-CiDDs7_-.js.map +1 -0
- package/dist/{icons-extra-DlxTo_Y4.js → icons-extra-hauwCx07.js} +121 -66
- package/dist/icons-extra-hauwCx07.js.map +1 -0
- package/dist/index.d.ts +21 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -6
- package/dist/react/avatar.d.ts +5 -9
- package/dist/react/avatar.d.ts.map +1 -1
- package/dist/react/avatar.js +2 -2
- package/dist/react/button-split.d.ts +19 -0
- package/dist/react/button-split.d.ts.map +1 -0
- package/dist/react/{split.js → button-split.js} +12 -9
- package/dist/react/button.d.ts +18 -7
- package/dist/react/button.d.ts.map +1 -1
- package/dist/react/button.js +13 -4
- package/dist/react/carousel.d.ts +63 -0
- package/dist/react/carousel.d.ts.map +1 -0
- package/dist/react/carousel.js +47 -0
- package/dist/react/choice.d.ts +1 -1
- package/dist/react/context-menu.d.ts +337 -337
- package/dist/react/dialog.d.ts +684 -678
- package/dist/react/dialog.d.ts.map +1 -1
- package/dist/react/dialog.js +29 -3
- package/dist/react/document.d.ts +11 -0
- package/dist/react/document.d.ts.map +1 -0
- package/dist/react/document.js +10 -0
- package/dist/react/empty.d.ts +34 -0
- package/dist/react/empty.d.ts.map +1 -0
- package/dist/react/empty.js +8 -0
- package/dist/react/file-picker.d.ts +1 -1
- package/dist/react/footer.d.ts +13 -0
- package/dist/react/footer.d.ts.map +1 -0
- package/dist/react/footer.js +12 -0
- package/dist/react/header.d.ts +12 -0
- package/dist/react/header.d.ts.map +1 -0
- package/dist/react/header.js +11 -0
- package/dist/react/input.d.ts +31 -9
- package/dist/react/input.d.ts.map +1 -1
- package/dist/react/input.js +94 -94
- package/dist/react/message.d.ts +66 -0
- package/dist/react/message.d.ts.map +1 -0
- package/dist/react/message.js +37 -0
- package/dist/react/notice.d.ts +45 -0
- package/dist/react/notice.d.ts.map +1 -0
- package/dist/react/notice.js +34 -0
- package/dist/react/page.d.ts +10 -0
- package/dist/react/page.d.ts.map +1 -0
- package/dist/react/page.js +9 -0
- package/dist/react/progress.d.ts +107 -0
- package/dist/react/progress.d.ts.map +1 -0
- package/dist/react/progress.js +47 -0
- package/dist/react/sidebar.d.ts +54 -0
- package/dist/react/sidebar.d.ts.map +1 -0
- package/dist/react/sidebar.js +48 -0
- package/dist/react/stat.d.ts +78 -0
- package/dist/react/stat.d.ts.map +1 -0
- package/dist/react/stat.js +25 -0
- package/dist/react/toast.d.ts +37 -0
- package/dist/react/toast.d.ts.map +1 -0
- package/dist/react/toast.js +55 -0
- package/dist/shared-words-CyZYc_De.js +1818 -0
- package/dist/shared-words-CyZYc_De.js.map +1 -0
- package/dist/shared-words-DAVSET4Z.js +1800 -0
- package/dist/shared-words-DAVSET4Z.js.map +1 -0
- package/package.json +19 -6
- package/DS1/2-core/ds-banner.ts +0 -122
- package/DS1/2-core/ds-date.ts +0 -24
- package/DS1/2-core/ds-language.ts +0 -94
- package/DS1/2-core/ds-pagedots.ts +0 -52
- package/DS1/2-core/ds-split.ts +0 -122
- package/DS1/2-core/ds-textarea.ts +0 -136
- package/DS1/2-core/styles/ds-banner.css +0 -77
- package/DS1/2-core/styles/ds-date.css +0 -9
- package/DS1/2-core/styles/ds-language.css +0 -78
- package/DS1/2-core/styles/ds-pagedots.css +0 -31
- package/DS1/2-core/styles/ds-textarea.css +0 -27
- package/DS1/4-page/ds-layout.ts +0 -949
- package/DS1/4-page/styles/ds-layout.css +0 -246
- package/DS1/react/split.ts +0 -42
- package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
- package/DS1/x-icon/ezo-account-close.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
- package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
- package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
- package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
- package/DS1/x-icon/ezo-block-accordion.svg +0 -1
- package/DS1/x-icon/ezo-block-divider.svg +0 -1
- package/DS1/x-icon/ezo-block-group.svg +0 -1
- package/DS1/x-icon/ezo-block-image.svg +0 -1
- package/DS1/x-icon/ezo-block-section.svg +0 -1
- package/DS1/x-icon/ezo-block-table.svg +0 -1
- package/DS1/x-icon/ezo-code.svg +0 -14
- package/DS1/x-icon/ezo-down.svg +0 -3
- package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
- package/DS1/x-icon/ezo-item-button-header.svg +0 -3
- package/DS1/x-icon/ezo-item-button-open.svg +0 -3
- package/DS1/x-icon/ezo-item-button-star.svg +0 -3
- package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
- package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
- package/DS1/x-icon/ezo-item-star.svg +0 -5
- package/DS1/x-icon/ezo-left.svg +0 -3
- package/DS1/x-icon/ezo-logo.svg +0 -1
- package/DS1/x-icon/ezo-mic.svg +0 -8
- package/DS1/x-icon/ezo-move-column.svg +0 -14
- package/DS1/x-icon/ezo-move-row.svg +0 -18
- package/DS1/x-icon/ezo-navigation-check.svg +0 -1
- package/DS1/x-icon/ezo-note-back.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
- package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
- package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
- package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
- package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
- package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
- package/DS1/x-icon/ezo-note-more.svg +0 -7
- package/DS1/x-icon/ezo-note-star.svg +0 -5
- package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
- package/DS1/x-icon/ezo-play.svg +0 -5
- package/DS1/x-icon/ezo-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
- package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
- package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
- package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
- package/DS1/x-icon/ezo-setting-blank.svg +0 -5
- package/DS1/x-icon/ezo-store-chevron.svg +0 -1
- package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
- package/DS1/x-icon/product-sources.json +0 -2557
- package/dist/2-core/ds-banner.d.ts +0 -68
- package/dist/2-core/ds-banner.d.ts.map +0 -1
- package/dist/2-core/ds-banner.js +0 -98
- package/dist/2-core/ds-date.d.ts +0 -16
- package/dist/2-core/ds-date.d.ts.map +0 -1
- package/dist/2-core/ds-date.js +0 -15
- package/dist/2-core/ds-language.d.ts +0 -75
- package/dist/2-core/ds-language.d.ts.map +0 -1
- package/dist/2-core/ds-language.js +0 -74
- package/dist/2-core/ds-pagedots.d.ts +0 -32
- package/dist/2-core/ds-pagedots.d.ts.map +0 -1
- package/dist/2-core/ds-pagedots.js +0 -36
- package/dist/2-core/ds-split.d.ts +0 -75
- package/dist/2-core/ds-split.d.ts.map +0 -1
- package/dist/2-core/ds-split.js +0 -101
- package/dist/2-core/ds-textarea.d.ts +0 -46
- package/dist/2-core/ds-textarea.d.ts.map +0 -1
- package/dist/2-core/ds-textarea.js +0 -121
- package/dist/4-page/ds-layout.d.ts +0 -31
- package/dist/4-page/ds-layout.d.ts.map +0 -1
- package/dist/4-page/ds-layout.js +0 -930
- package/dist/icons-extra-BoAACA4X.js.map +0 -1
- package/dist/icons-extra-DlxTo_Y4.js.map +0 -1
- package/dist/react/split.d.ts +0 -15
- package/dist/react/split.d.ts.map +0 -1
- package/dist/shared-words-Cg6Phtx0.js +0 -915
- package/dist/shared-words-Cg6Phtx0.js.map +0 -1
- package/dist/shared-words-Ddz0yUEF.js +0 -933
- package/dist/shared-words-Ddz0yUEF.js.map +0 -1
- /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
- /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A drawer: parts of a page folded away on a narrow screen and opened over it
|
|
3
|
+
* from a menu button. Plain TypeScript with no Lit and no framework, so a page
|
|
4
|
+
* of native HTML uses it as the elements do.
|
|
5
|
+
*
|
|
6
|
+
* `attachDrawer()` ties a toggle button to the parts it folds away (a
|
|
7
|
+
* header's navigation and actions, a page's navigation). Opening moves them
|
|
8
|
+
* into a native `<dialog class="ds-dialog ds-drawer">` laid over the screen
|
|
9
|
+
* (1-root/drawer.css draws it), shown modally so the rest of the page is
|
|
10
|
+
* inert, with a close button where the toggle stood. While it is open:
|
|
11
|
+
*
|
|
12
|
+
* - Tab and Shift+Tab go round the panel's controls and never leave it;
|
|
13
|
+
* - Escape, the close button, a link in the panel and the toggle going out of
|
|
14
|
+
* sight (the screen widened) close it;
|
|
15
|
+
* - the page behind holds its scroll, and gets it back as it was.
|
|
16
|
+
*
|
|
17
|
+
* Closing puts every part back where it was and returns focus to the toggle.
|
|
18
|
+
* The toggle carries `aria-expanded` and `aria-controls`; its accessible name
|
|
19
|
+
* stays the same (Menu) open or closed.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const drawer = attachDrawer({ toggle, content: [nav, actions], closeLabel: "Close" });
|
|
23
|
+
* drawer.open();
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
export interface DrawerOptions {
|
|
27
|
+
/** The button that opens the drawer, and stands for it while it is closed. */
|
|
28
|
+
toggle: HTMLElement;
|
|
29
|
+
/** What the drawer holds while it is open: moved into the panel in this order and back on closing. */
|
|
30
|
+
content: readonly Element[] | (() => readonly Element[]);
|
|
31
|
+
/**
|
|
32
|
+
* The panel to open, with its close button marked `.ds-drawer__close`. A
|
|
33
|
+
* `<dialog class="ds-dialog ds-drawer">` is made beside the toggle when none
|
|
34
|
+
* is given, its close button a copy of the toggle.
|
|
35
|
+
*/
|
|
36
|
+
panel?: HTMLDialogElement;
|
|
37
|
+
/** Where a new panel goes: after the toggle by default. */
|
|
38
|
+
container?: Element | ShadowRoot;
|
|
39
|
+
/** The panel's accessible name: the toggle's own name by default. */
|
|
40
|
+
label?: string;
|
|
41
|
+
/** The close button's accessible name. "Close" by default. */
|
|
42
|
+
closeLabel?: string;
|
|
43
|
+
/** Close when a link in the panel is followed. On by default. */
|
|
44
|
+
closeOnLink?: boolean;
|
|
45
|
+
/** Called after the drawer opens or closes. */
|
|
46
|
+
onToggle?: (open: boolean) => void;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface Drawer {
|
|
50
|
+
readonly panel: HTMLDialogElement;
|
|
51
|
+
readonly isOpen: boolean;
|
|
52
|
+
open(): void;
|
|
53
|
+
close(): void;
|
|
54
|
+
toggle(): void;
|
|
55
|
+
/** Close it, take the panel away if it was made here, and stop listening. */
|
|
56
|
+
destroy(): void;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const FOCUSABLE = 'a[href], area[href], button, input:not([type="hidden"]), select, textarea, iframe, summary, [contenteditable=""], [contenteditable="true"], [tabindex]';
|
|
60
|
+
|
|
61
|
+
/** The drawers open on each document, the last opened last: only it answers the keys. */
|
|
62
|
+
const openDrawers = new WeakMap<Document, object[]>();
|
|
63
|
+
|
|
64
|
+
/** The drawer that holds each document's scroll, so two drawers never fight over it. */
|
|
65
|
+
const scrollHolders = new WeakMap<Document, { owners: Set<object>; overflow: string; overscroll: string; x: number; y: number }>();
|
|
66
|
+
|
|
67
|
+
function holdScroll(document: Document, owner: object): void {
|
|
68
|
+
let held = scrollHolders.get(document);
|
|
69
|
+
if (!held) {
|
|
70
|
+
const root = document.documentElement.style;
|
|
71
|
+
held = { owners: new Set(), overflow: root.overflow, overscroll: root.overscrollBehavior, x: document.defaultView?.scrollX ?? 0, y: document.defaultView?.scrollY ?? 0 };
|
|
72
|
+
scrollHolders.set(document, held);
|
|
73
|
+
root.overflow = "hidden";
|
|
74
|
+
root.overscrollBehavior = "none";
|
|
75
|
+
}
|
|
76
|
+
held.owners.add(owner);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function releaseScroll(document: Document, owner: object): void {
|
|
80
|
+
const held = scrollHolders.get(document);
|
|
81
|
+
if (!held || !held.owners.delete(owner) || held.owners.size) return;
|
|
82
|
+
const root = document.documentElement.style;
|
|
83
|
+
root.overflow = held.overflow;
|
|
84
|
+
root.overscrollBehavior = held.overscroll;
|
|
85
|
+
scrollHolders.delete(document);
|
|
86
|
+
const view = document.defaultView;
|
|
87
|
+
if (view && (view.scrollX !== held.x || view.scrollY !== held.y)) view.scrollTo(held.x, held.y);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** The element that has focus, inside open shadow roots too. */
|
|
91
|
+
export function deepActiveElement(document: Document): Element | null {
|
|
92
|
+
let active = document.activeElement;
|
|
93
|
+
while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
|
|
94
|
+
return active;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function shown(element: Element): boolean {
|
|
98
|
+
if (element.closest("[hidden], [inert]")) return false;
|
|
99
|
+
const check = (element as Element & { checkVisibility?: (options?: object) => boolean }).checkVisibility;
|
|
100
|
+
return typeof check === "function" ? check.call(element, { visibilityProperty: true }) : true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* The controls Tab reaches inside a root, in order: through open shadow roots
|
|
105
|
+
* and the elements a slot shows.
|
|
106
|
+
*/
|
|
107
|
+
export function tabbables(root: Element): HTMLElement[] {
|
|
108
|
+
const found: HTMLElement[] = [];
|
|
109
|
+
const visit = (node: Element) => {
|
|
110
|
+
if (node instanceof HTMLElement && node.matches(FOCUSABLE) && node.tabIndex >= 0 && !(node as HTMLButtonElement).disabled && shown(node)) found.push(node);
|
|
111
|
+
if (node.shadowRoot) for (const child of node.shadowRoot.children) visit(child);
|
|
112
|
+
const children = node instanceof HTMLSlotElement ? node.assignedElements({ flatten: true }) : [...node.children];
|
|
113
|
+
for (const child of children) visit(child);
|
|
114
|
+
};
|
|
115
|
+
for (const child of root.children) visit(child);
|
|
116
|
+
return found;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function attachDrawer(options: DrawerOptions): Drawer {
|
|
120
|
+
const { toggle } = options;
|
|
121
|
+
const document = toggle.ownerDocument;
|
|
122
|
+
const made = !options.panel;
|
|
123
|
+
const panel = options.panel ?? document.createElement("dialog");
|
|
124
|
+
let placeholders: [Element, Comment][] = [];
|
|
125
|
+
let open = false;
|
|
126
|
+
/** The button in the panel that closes it: made here, or the panel's own `.ds-drawer__close`. */
|
|
127
|
+
let closeButton: HTMLElement | null = options.panel?.querySelector<HTMLElement>(".ds-drawer__close") ?? null;
|
|
128
|
+
|
|
129
|
+
if (made) {
|
|
130
|
+
panel.className = "ds-dialog ds-drawer";
|
|
131
|
+
const bar = document.createElement("div");
|
|
132
|
+
bar.className = "ds-drawer__bar";
|
|
133
|
+
// The close button is a copy of the toggle, so it shows the same icons
|
|
134
|
+
// (the second one, close) in the same place.
|
|
135
|
+
closeButton = toggle.cloneNode(true) as HTMLElement;
|
|
136
|
+
closeButton.removeAttribute("id");
|
|
137
|
+
closeButton.removeAttribute("aria-controls");
|
|
138
|
+
closeButton.removeAttribute("aria-expanded");
|
|
139
|
+
closeButton.removeAttribute("aria-haspopup");
|
|
140
|
+
closeButton.classList.remove("ds-drawer__toggle", "ds-header__toggle");
|
|
141
|
+
closeButton.classList.add("ds-drawer__close");
|
|
142
|
+
closeButton.setAttribute("aria-label", options.closeLabel || "Close");
|
|
143
|
+
if (closeButton instanceof HTMLButtonElement) closeButton.type = "button";
|
|
144
|
+
bar.append(closeButton);
|
|
145
|
+
panel.append(bar);
|
|
146
|
+
if (options.container) options.container.append(panel);
|
|
147
|
+
else toggle.after(panel);
|
|
148
|
+
}
|
|
149
|
+
panel.classList.add("ds-drawer");
|
|
150
|
+
const label = () => options.label || toggle.getAttribute("aria-label") || toggle.textContent?.trim() || "";
|
|
151
|
+
if (!panel.hasAttribute("aria-label") && !panel.hasAttribute("aria-labelledby") && label()) panel.setAttribute("aria-label", label());
|
|
152
|
+
if (!panel.id) panel.id = `ds-drawer-${Math.random().toString(36).slice(2, 10)}`;
|
|
153
|
+
if (!toggle.hasAttribute("aria-controls")) toggle.setAttribute("aria-controls", panel.id);
|
|
154
|
+
toggle.setAttribute("aria-expanded", "false");
|
|
155
|
+
toggle.setAttribute("aria-haspopup", "dialog");
|
|
156
|
+
toggle.classList.add("ds-drawer__toggle");
|
|
157
|
+
|
|
158
|
+
const parts = () => (typeof options.content === "function" ? options.content() : options.content).filter(Boolean);
|
|
159
|
+
|
|
160
|
+
function show() {
|
|
161
|
+
if (open || !toggle.isConnected) return;
|
|
162
|
+
open = true;
|
|
163
|
+
const content = parts();
|
|
164
|
+
placeholders = content.map(element => {
|
|
165
|
+
const mark = document.createComment("ds-drawer");
|
|
166
|
+
element.before(mark);
|
|
167
|
+
return [element, mark];
|
|
168
|
+
});
|
|
169
|
+
panel.append(...content);
|
|
170
|
+
holdScroll(document, drawer);
|
|
171
|
+
const stack = openDrawers.get(document) ?? [];
|
|
172
|
+
openDrawers.set(document, [...stack.filter(entry => entry !== drawer), drawer]);
|
|
173
|
+
toggle.setAttribute("aria-expanded", "true");
|
|
174
|
+
if (typeof panel.showModal === "function" && panel.isConnected) {
|
|
175
|
+
try { panel.showModal(); } catch { panel.setAttribute("open", ""); }
|
|
176
|
+
} else panel.setAttribute("open", "");
|
|
177
|
+
// The panel's first control takes focus: the close button.
|
|
178
|
+
(closeButton ?? tabbables(panel)[0])?.focus({ preventScroll: true });
|
|
179
|
+
view?.addEventListener("resize", onResize);
|
|
180
|
+
// Bubbling, so a menu or dialog inside the panel takes its own Escape first.
|
|
181
|
+
document.addEventListener("keydown", onKey);
|
|
182
|
+
options.onToggle?.(true);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function hide() {
|
|
186
|
+
if (!open) return;
|
|
187
|
+
open = false;
|
|
188
|
+
if (panel.open) panel.close();
|
|
189
|
+
panel.removeAttribute("open");
|
|
190
|
+
for (const [element, mark] of placeholders) {
|
|
191
|
+
if (mark.isConnected) mark.replaceWith(element);
|
|
192
|
+
else mark.remove();
|
|
193
|
+
}
|
|
194
|
+
placeholders = [];
|
|
195
|
+
releaseScroll(document, drawer);
|
|
196
|
+
openDrawers.set(document, (openDrawers.get(document) ?? []).filter(entry => entry !== drawer));
|
|
197
|
+
toggle.setAttribute("aria-expanded", "false");
|
|
198
|
+
view?.removeEventListener("resize", onResize);
|
|
199
|
+
document.removeEventListener("keydown", onKey);
|
|
200
|
+
if (toggle.isConnected && shown(toggle)) toggle.focus({ preventScroll: true });
|
|
201
|
+
options.onToggle?.(false);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const view = document.defaultView;
|
|
205
|
+
const onToggleClick = () => (open ? hide() : show());
|
|
206
|
+
const onResize = () => { if (open && !shown(toggle)) hide(); };
|
|
207
|
+
const onKey = (event: KeyboardEvent) => {
|
|
208
|
+
if (!open || event.defaultPrevented || openDrawers.get(document)?.slice(-1)[0] !== drawer) return;
|
|
209
|
+
if (event.key === "Escape") {
|
|
210
|
+
event.preventDefault();
|
|
211
|
+
hide();
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (event.key !== "Tab") return;
|
|
215
|
+
const controls = tabbables(panel);
|
|
216
|
+
if (!controls.length) { event.preventDefault(); return; }
|
|
217
|
+
const active = deepActiveElement(document);
|
|
218
|
+
const first = controls[0]!, last = controls[controls.length - 1]!;
|
|
219
|
+
const index = active ? controls.indexOf(active as HTMLElement) : -1;
|
|
220
|
+
if (event.shiftKey && index <= 0) { event.preventDefault(); last.focus(); }
|
|
221
|
+
else if (!event.shiftKey && (index === -1 || active === last)) { event.preventDefault(); first.focus(); }
|
|
222
|
+
};
|
|
223
|
+
// Escape on a modal dialog is its cancel: close through the drawer so the parts go back.
|
|
224
|
+
const onCancel = (event: Event) => { event.preventDefault(); hide(); };
|
|
225
|
+
const onNativeClose = () => { if (open) hide(); };
|
|
226
|
+
const onPanelClick = (event: MouseEvent) => {
|
|
227
|
+
const path = event.composedPath();
|
|
228
|
+
if (closeButton && path.includes(closeButton)) { hide(); return; }
|
|
229
|
+
// A link closes it even when a router takes the click (and prevents its default).
|
|
230
|
+
if (options.closeOnLink === false) return;
|
|
231
|
+
// Only what stands inside the panel: the path up to it.
|
|
232
|
+
if (path.slice(0, path.indexOf(panel)).some(node => node instanceof Element && node.matches("a[href]"))) hide();
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
toggle.addEventListener("click", onToggleClick);
|
|
236
|
+
panel.addEventListener("cancel", onCancel);
|
|
237
|
+
panel.addEventListener("close", onNativeClose);
|
|
238
|
+
panel.addEventListener("click", onPanelClick);
|
|
239
|
+
|
|
240
|
+
const drawer: Drawer = {
|
|
241
|
+
panel,
|
|
242
|
+
get isOpen() { return open; },
|
|
243
|
+
open: show,
|
|
244
|
+
close: hide,
|
|
245
|
+
toggle: onToggleClick,
|
|
246
|
+
destroy() {
|
|
247
|
+
hide();
|
|
248
|
+
toggle.removeEventListener("click", onToggleClick);
|
|
249
|
+
panel.removeEventListener("cancel", onCancel);
|
|
250
|
+
panel.removeEventListener("close", onNativeClose);
|
|
251
|
+
panel.removeEventListener("click", onPanelClick);
|
|
252
|
+
toggle.removeAttribute("aria-expanded");
|
|
253
|
+
toggle.removeAttribute("aria-haspopup");
|
|
254
|
+
if (made) panel.remove();
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
return drawer;
|
|
258
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The words the feedback module shows by default (OK, Cancel, Close, Copied,
|
|
3
|
+
* Could not copy, Notifications), without importing the language runtime.
|
|
4
|
+
*
|
|
5
|
+
* - Where the page loads the language module (`./i18n.ts`, Sync 1's
|
|
6
|
+
* `languages` export), it registers its `translate()` here when it loads,
|
|
7
|
+
* and the words are the shared words in the page's language once
|
|
8
|
+
* `configureI18n({ sharedWords: true })` turns them on.
|
|
9
|
+
* - Where it does not, they read English, and no language module, no
|
|
10
|
+
* translation file and no request comes with them.
|
|
11
|
+
* - `setFeedbackWords()` gives the module words of the product's own: a table
|
|
12
|
+
* of the words it changes, or a function that translates each key.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export type FeedbackWord = "OK" | "Cancel" | "Close" | "Copied" | "Could not copy" | "Notifications";
|
|
16
|
+
/** A table of the words to change, or a function that gives each word in the page's language. */
|
|
17
|
+
export type FeedbackWords = Partial<Record<FeedbackWord, string>> | ((word: FeedbackWord) => string);
|
|
18
|
+
|
|
19
|
+
/** Where the language module leaves its `translate()`; on `globalThis`, so every copy of either module finds it. */
|
|
20
|
+
const TRANSLATOR = Symbol.for("design-system-1.translate");
|
|
21
|
+
|
|
22
|
+
let words: FeedbackWords | null = null;
|
|
23
|
+
|
|
24
|
+
/** Give the feedback module's default words, or `null` to go back to the language module's (or English). */
|
|
25
|
+
export function setFeedbackWords(next: FeedbackWords | null): void {
|
|
26
|
+
words = next;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A default word in the page's language. */
|
|
30
|
+
export function feedbackWord(word: FeedbackWord): string {
|
|
31
|
+
if (typeof words === "function") return words(word);
|
|
32
|
+
const own = words?.[word];
|
|
33
|
+
if (own !== undefined) return own;
|
|
34
|
+
const translate = (globalThis as unknown as Record<symbol, unknown>)[TRANSLATOR];
|
|
35
|
+
return typeof translate === "function" ? String(translate(word)) : word;
|
|
36
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback without Lit: toasts, dialogs that answer with a promise, and
|
|
3
|
+
* copying text, from one import and with no framework. Use it in place of the
|
|
4
|
+
* browser's `alert()`, `confirm()` and `prompt()`, and of a page's own toasts
|
|
5
|
+
* and copy buttons.
|
|
6
|
+
*
|
|
7
|
+
* import { toast, confirm, prompt, alert, copyText } from "…/0-face/feedback";
|
|
8
|
+
*
|
|
9
|
+
* toast.success("Saved");
|
|
10
|
+
* if (await confirm({ title: "Delete this track?", confirm: "Delete", danger: true })) remove();
|
|
11
|
+
* const name = await prompt({ title: "Rename", value: track.name });
|
|
12
|
+
* await copyText(link);
|
|
13
|
+
*
|
|
14
|
+
* - `toast()` is Sonner's, as in `<ds-toast>` (based on Sonner, MIT licence):
|
|
15
|
+
* the same calls, options and stack, drawn by the page toaster
|
|
16
|
+
* (`./toaster.ts`) on a page without Lit and by `<ds-toast>` where the page
|
|
17
|
+
* has one. `configureToaster()` takes Sonner's `<Toaster />` props.
|
|
18
|
+
* - `alert()`, `confirm()` and `prompt()` are drawn on the native
|
|
19
|
+
* `dialog.ds-dialog` frame from `1-root/controls.css`, which the page loads.
|
|
20
|
+
* - Default words (`./feedback-words.ts`) are English, with no language
|
|
21
|
+
* runtime. Where the page loads the language module (`./i18n.ts`, Sync 1's
|
|
22
|
+
* `languages` export), they are the shared words in the page's language
|
|
23
|
+
* once `configureI18n({ sharedWords: true })` turns them on.
|
|
24
|
+
* `setFeedbackWords()` gives words of the product's own.
|
|
25
|
+
* - It is plain TypeScript, with no `?inline` or `?raw` import, for any
|
|
26
|
+
* bundler, runtime and type check. It adds nodes with `appendChild()`, not
|
|
27
|
+
* `append()`, which the Workers types redeclare for their HTML rewriter;
|
|
28
|
+
* tests/feedback-export-types.test.ts checks the copy under them.
|
|
29
|
+
* - A page that only copies text imports `copyText` from `./copy-text.ts`,
|
|
30
|
+
* which loads the page toaster only when it shows a toast.
|
|
31
|
+
*/
|
|
32
|
+
export { configureToaster, pageToaster, toast } from "./toaster";
|
|
33
|
+
export type { ToasterOptions } from "./toaster";
|
|
34
|
+
export type { ToastButton, ToastData, ToastId, ToastOptions, ToastPosition, ToastPromiseMessages, ToastType } from "./toast-queue";
|
|
35
|
+
export { alert, confirm, prompt } from "./dialogs";
|
|
36
|
+
export type { AlertOptions, ConfirmOptions, PromptOptions } from "./dialogs";
|
|
37
|
+
export { copyText } from "./copy-text";
|
|
38
|
+
export type { CopyTextOptions } from "./copy-text";
|
|
39
|
+
export { setFeedbackWords } from "./feedback-words";
|
|
40
|
+
export type { FeedbackWord, FeedbackWords } from "./feedback-words";
|