@0001-labs/design-system-1 0.3.0-alpha.13 → 0.3.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DS1/0-face/calendar.ts +194 -0
- package/DS1/0-face/carousel.ts +623 -0
- package/DS1/0-face/component-visibility.ts +13 -0
- package/DS1/0-face/copy-text.ts +96 -0
- package/DS1/0-face/device.ts +8 -58
- package/DS1/0-face/dialog-swipe.ts +249 -0
- package/DS1/0-face/dialogs.ts +208 -0
- package/DS1/0-face/drawer.ts +258 -0
- package/DS1/0-face/feedback-words.ts +36 -0
- package/DS1/0-face/feedback.ts +40 -0
- package/DS1/0-face/format.ts +700 -0
- package/DS1/0-face/generated/toast-assets.ts +18 -0
- package/DS1/0-face/grid-fit.ts +1 -1
- package/DS1/0-face/grid.ts +3 -2
- package/DS1/0-face/header.ts +78 -0
- package/DS1/0-face/i18n.ts +93 -18
- package/DS1/0-face/keys.ts +276 -0
- package/DS1/0-face/languages.ts +4 -4
- package/DS1/0-face/layout-inspector.ts +6 -6
- package/DS1/0-face/library-styles.ts +33 -0
- package/DS1/0-face/load-toaster.ts +7 -0
- package/DS1/0-face/preference-options.ts +29 -0
- package/DS1/0-face/preferences.ts +3 -11
- package/DS1/0-face/pricing.ts +98 -43
- package/DS1/0-face/scaling.ts +160 -4
- package/DS1/0-face/shared-words.ts +9 -4
- package/DS1/0-face/sidebar.ts +201 -0
- package/DS1/0-face/theme-bootstrap.js +184 -0
- package/DS1/0-face/theme.ts +89 -47
- package/DS1/0-face/toast-queue.ts +157 -0
- package/DS1/0-face/toaster.ts +384 -0
- package/DS1/0-face/tooltips.ts +157 -15
- package/DS1/0-face/translations/da.json +60 -1
- package/DS1/0-face/translations/de.json +60 -1
- package/DS1/0-face/translations/en.json +60 -1
- package/DS1/0-face/translations/es.json +60 -1
- package/DS1/0-face/translations/fi.json +60 -1
- package/DS1/0-face/translations/fr.json +60 -1
- package/DS1/0-face/translations/is.json +60 -1
- package/DS1/0-face/translations/it.json +60 -1
- package/DS1/0-face/translations/ja.json +60 -1
- package/DS1/0-face/translations/ko.json +60 -1
- package/DS1/0-face/translations/nb.json +60 -1
- package/DS1/0-face/translations/pt-BR.json +60 -1
- package/DS1/0-face/translations/pt.json +60 -1
- package/DS1/0-face/translations/sv.json +60 -1
- package/DS1/0-face/translations/zh.json +60 -1
- package/DS1/0-face/translations-format.ts +3 -4
- package/DS1/1-root/card.css +192 -0
- package/DS1/1-root/carousel.css +136 -0
- package/DS1/1-root/cjk.css +23 -0
- package/DS1/1-root/component-metrics.css +1 -0
- package/DS1/1-root/component-tokens.css +51 -8
- package/DS1/1-root/controls.css +887 -14
- package/DS1/1-root/dialog-placement.css +191 -0
- package/DS1/1-root/document.css +183 -0
- package/DS1/1-root/drawer.css +83 -0
- package/DS1/1-root/empty.css +83 -0
- package/DS1/1-root/figures.css +141 -0
- package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
- package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
- package/DS1/1-root/fonts.css +69 -0
- package/DS1/1-root/footer.css +186 -0
- package/DS1/1-root/header.css +165 -0
- package/DS1/1-root/kbd.css +46 -0
- package/DS1/1-root/library-tokens.ts +91 -0
- package/DS1/1-root/measures.ts +53 -0
- package/DS1/1-root/notice.css +165 -0
- package/DS1/1-root/one.css +14 -84
- package/DS1/1-root/one.semantic.css +200 -148
- package/DS1/1-root/palette.css +58 -0
- package/DS1/1-root/palette.ts +19 -0
- package/DS1/1-root/progress.css +356 -0
- package/DS1/1-root/prose.css +202 -0
- package/DS1/1-root/row.css +297 -0
- package/DS1/1-root/table.css +111 -0
- package/DS1/1-root/text.css +70 -0
- package/DS1/2-core/button-split.ts +55 -0
- package/DS1/2-core/chart/chart.css +169 -0
- package/DS1/2-core/chart/grid-chart.ts +554 -0
- package/DS1/2-core/ds-avatar.ts +25 -6
- package/DS1/2-core/ds-badge.ts +10 -10
- package/DS1/2-core/ds-button.ts +111 -26
- package/DS1/2-core/ds-card.ts +135 -105
- package/DS1/2-core/ds-chart.ts +327 -0
- package/DS1/2-core/ds-composer.ts +8 -2
- package/DS1/2-core/ds-cycle.ts +97 -21
- package/DS1/2-core/ds-empty.ts +120 -0
- package/DS1/2-core/ds-icon.ts +11 -2
- package/DS1/2-core/ds-input.ts +165 -6
- package/DS1/2-core/ds-kbd.ts +78 -0
- package/DS1/2-core/ds-loading.ts +72 -0
- package/DS1/2-core/ds-notice.ts +180 -0
- package/DS1/2-core/ds-progress.ts +380 -0
- package/DS1/2-core/ds-spacing-handle.ts +22 -0
- package/DS1/2-core/ds-stat.ts +174 -0
- package/DS1/2-core/ds-switch.ts +1 -0
- package/DS1/2-core/ds-text.ts +15 -2
- package/DS1/2-core/ds-toast.ts +354 -0
- package/DS1/2-core/figures.ts +105 -0
- package/DS1/2-core/generated/ds-icon-map.ts +234 -128
- package/DS1/2-core/generated/icon-avatar.ts +2 -0
- package/DS1/2-core/generated/icons-extra.ts +118 -65
- package/DS1/2-core/generated/icons-immediate.ts +1 -1
- package/DS1/2-core/spacing-handle.ts +95 -0
- package/DS1/2-core/styles/ds-avatar.css +9 -8
- package/DS1/2-core/styles/ds-button-host.css +26 -3
- package/DS1/2-core/styles/ds-button-split.css +67 -0
- package/DS1/2-core/styles/ds-button.css +49 -15
- package/DS1/2-core/styles/ds-card.css +34 -0
- package/DS1/2-core/styles/ds-composer.css +13 -0
- package/DS1/2-core/styles/ds-cycle.css +69 -0
- package/DS1/2-core/styles/ds-empty.css +18 -0
- package/DS1/2-core/styles/ds-gap.css +1 -0
- package/DS1/2-core/styles/ds-icon.css +1 -0
- package/DS1/2-core/styles/ds-input.css +59 -6
- package/DS1/2-core/styles/ds-kbd.css +12 -0
- package/DS1/2-core/styles/ds-loading.css +13 -0
- package/DS1/2-core/styles/ds-notice.css +30 -0
- package/DS1/2-core/styles/ds-progress.css +25 -0
- package/DS1/2-core/styles/ds-select.css +2 -2
- package/DS1/2-core/styles/ds-spacing-handle.css +8 -0
- package/DS1/2-core/styles/ds-split.css +2 -62
- package/DS1/2-core/styles/ds-stat.css +34 -0
- package/DS1/2-core/styles/ds-switch.css +16 -1
- package/DS1/2-core/styles/ds-text.css +43 -12
- package/DS1/2-core/styles/ds-toast.css +182 -0
- package/DS1/2-core/styles/ds-tooltip.css +1 -0
- package/DS1/3-unit/calendar-base.ts +263 -0
- package/DS1/3-unit/ds-accordion.ts +9 -1
- package/DS1/3-unit/ds-avatar-group.ts +1 -0
- package/DS1/3-unit/ds-calendar-large.ts +349 -0
- package/DS1/3-unit/ds-calendar.ts +344 -0
- package/DS1/3-unit/ds-carousel.ts +368 -0
- package/DS1/3-unit/ds-date-picker.ts +540 -0
- package/DS1/3-unit/ds-form.ts +45 -37
- package/DS1/3-unit/ds-list.ts +48 -1
- package/DS1/3-unit/ds-matrix.ts +318 -0
- package/DS1/3-unit/ds-menu.ts +8 -4
- package/DS1/3-unit/ds-row.ts +84 -1
- package/DS1/3-unit/ds-sidebar.ts +280 -0
- package/DS1/3-unit/ds-table.ts +75 -34
- package/DS1/3-unit/styles/ds-accordion.css +1 -0
- package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
- package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
- package/DS1/3-unit/styles/ds-calendar.css +238 -0
- package/DS1/3-unit/styles/ds-carousel.css +30 -0
- package/DS1/3-unit/styles/ds-date-picker.css +124 -0
- package/DS1/3-unit/styles/ds-list.css +1 -0
- package/DS1/3-unit/styles/ds-matrix.css +203 -0
- package/DS1/3-unit/styles/ds-menu.css +31 -6
- package/DS1/3-unit/styles/ds-row.css +84 -2
- package/DS1/3-unit/styles/ds-sidebar.css +117 -0
- package/DS1/3-unit/styles/ds-table.css +3 -74
- package/DS1/4-page/ds-dialog.ts +40 -4
- package/DS1/4-page/ds-document.ts +240 -0
- package/DS1/4-page/ds-footer.ts +165 -0
- package/DS1/4-page/ds-grid.ts +39 -59
- package/DS1/4-page/ds-header.ts +171 -0
- package/DS1/4-page/ds-page.ts +184 -0
- package/DS1/4-page/email.ts +2 -3
- package/DS1/4-page/styles/ds-container.css +1 -0
- package/DS1/4-page/styles/ds-document.css +18 -0
- package/DS1/4-page/styles/ds-footer.css +29 -0
- package/DS1/4-page/styles/ds-grid.css +31 -85
- package/DS1/4-page/styles/ds-header.css +57 -0
- package/DS1/4-page/styles/ds-page.css +214 -0
- package/DS1/components.ts +7 -1
- package/DS1/index.ts +26 -6
- package/DS1/react/avatar.ts +4 -5
- package/DS1/react/button-split.ts +29 -0
- package/DS1/react/button.ts +32 -13
- package/DS1/react/carousel.ts +76 -0
- package/DS1/react/dialog.ts +36 -5
- package/DS1/react/document.ts +14 -0
- package/DS1/react/empty.ts +32 -0
- package/DS1/react/footer.ts +17 -0
- package/DS1/react/header.ts +15 -0
- package/DS1/react/input.ts +28 -17
- package/DS1/react/kbd.ts +21 -0
- package/DS1/react/loading.ts +18 -0
- package/DS1/react/notice.ts +59 -0
- package/DS1/react/page.ts +13 -0
- package/DS1/react/progress.ts +99 -0
- package/DS1/react/sidebar.ts +60 -0
- package/DS1/react/spacing-handle.ts +21 -0
- package/DS1/react/stat.ts +73 -0
- package/DS1/react/toast.ts +82 -0
- package/DS1/x-icon/Tabler-LICENSE.md +27 -0
- package/DS1/x-icon/airtable.svg +5 -0
- package/DS1/x-icon/attach.svg +3 -0
- package/DS1/x-icon/audio.svg +3 -0
- package/DS1/x-icon/bag-alt.svg +3 -0
- package/DS1/x-icon/bank.svg +3 -0
- package/DS1/x-icon/banknote.svg +3 -0
- package/DS1/x-icon/bolt.svg +3 -0
- package/DS1/x-icon/book-alt.svg +3 -0
- package/DS1/x-icon/book.svg +4 -0
- package/DS1/x-icon/box.svg +3 -0
- package/DS1/x-icon/briefcase.svg +3 -0
- package/DS1/x-icon/building.svg +4 -0
- package/DS1/x-icon/car.svg +3 -0
- package/DS1/x-icon/card.svg +3 -0
- package/DS1/x-icon/cart.svg +3 -0
- package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
- package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-right.svg} +1 -1
- package/DS1/x-icon/cloud.svg +3 -0
- package/DS1/x-icon/coffee.svg +3 -0
- package/DS1/x-icon/coins.svg +3 -0
- package/DS1/x-icon/cursor.svg +3 -0
- package/DS1/x-icon/curve.svg +7 -0
- package/DS1/x-icon/dislike.svg +4 -0
- package/DS1/x-icon/dot-bank.svg +3 -0
- package/DS1/x-icon/dot-banknote.svg +3 -0
- package/DS1/x-icon/dot-banknotes.svg +3 -0
- package/DS1/x-icon/dot-card.svg +3 -0
- package/DS1/x-icon/dot-coin.svg +3 -0
- package/DS1/x-icon/dot-coins.svg +3 -0
- package/DS1/x-icon/dot-receipt.svg +3 -0
- package/DS1/x-icon/dot-safe.svg +3 -0
- package/DS1/x-icon/dot-transfer.svg +3 -0
- package/DS1/x-icon/dot-wallet.svg +3 -0
- package/DS1/x-icon/download.svg +4 -0
- package/DS1/x-icon/drive.svg +5 -0
- package/DS1/x-icon/drop.svg +3 -0
- package/DS1/x-icon/dropbox.svg +3 -0
- package/DS1/x-icon/dumbbell.svg +3 -0
- package/DS1/x-icon/eye-off.svg +3 -0
- package/DS1/x-icon/eye.svg +3 -0
- package/DS1/x-icon/facebook.svg +3 -0
- package/DS1/x-icon/figma.svg +5 -0
- package/DS1/x-icon/flame.svg +3 -0
- package/DS1/x-icon/flip.svg +5 -0
- package/DS1/x-icon/food.svg +3 -0
- package/DS1/x-icon/fuel.svg +3 -0
- package/DS1/x-icon/game.svg +3 -0
- package/DS1/x-icon/gift.svg +3 -0
- package/DS1/x-icon/github.svg +3 -0
- package/DS1/x-icon/heart.svg +3 -0
- package/DS1/x-icon/history.svg +3 -0
- package/DS1/x-icon/home-alt.svg +3 -0
- package/DS1/x-icon/income.svg +3 -0
- package/DS1/x-icon/info.svg +5 -0
- package/DS1/x-icon/instagram.svg +5 -0
- package/DS1/x-icon/jpbank.svg +3 -0
- package/DS1/x-icon/key.svg +4 -0
- package/DS1/x-icon/keyboard.svg +3 -0
- package/DS1/x-icon/like.svg +4 -0
- package/DS1/x-icon/linkedin.svg +7 -0
- package/DS1/x-icon/loom.svg +6 -0
- package/DS1/x-icon/map.svg +4 -0
- package/DS1/x-icon/medical.svg +3 -0
- package/DS1/x-icon/{ezo-android-screen-lists.svg → minus.svg} +1 -1
- package/DS1/x-icon/moon.svg +3 -0
- package/DS1/x-icon/move.svg +3 -0
- package/DS1/x-icon/music-alt.svg +3 -0
- package/DS1/x-icon/music.svg +5 -0
- package/DS1/x-icon/notion.svg +6 -0
- package/DS1/x-icon/offline.svg +3 -0
- package/DS1/x-icon/pause.svg +4 -0
- package/DS1/x-icon/paw.svg +3 -0
- package/DS1/x-icon/pdf.svg +3 -0
- package/DS1/x-icon/people.svg +5 -0
- package/DS1/x-icon/percent.svg +3 -0
- package/DS1/x-icon/phone.svg +3 -0
- package/DS1/x-icon/pill.svg +3 -0
- package/DS1/x-icon/plane.svg +3 -0
- package/DS1/x-icon/postal.svg +3 -0
- package/DS1/x-icon/present.svg +4 -0
- package/DS1/x-icon/reaction.svg +5 -0
- package/DS1/x-icon/receipt.svg +3 -0
- package/DS1/x-icon/refresh.svg +3 -0
- package/DS1/x-icon/refund.svg +3 -0
- package/DS1/x-icon/repeat.svg +3 -0
- package/DS1/x-icon/rotate.svg +4 -0
- package/DS1/x-icon/safe.svg +3 -0
- package/DS1/x-icon/school-alt.svg +3 -0
- package/DS1/x-icon/shield-alt.svg +3 -0
- package/DS1/x-icon/shield.svg +4 -0
- package/DS1/x-icon/shirt.svg +3 -0
- package/DS1/x-icon/shop.svg +3 -0
- package/DS1/x-icon/sign-in.svg +3 -0
- package/DS1/x-icon/sign-out.svg +3 -0
- package/DS1/x-icon/slack.svg +6 -0
- package/DS1/x-icon/sparkle.svg +3 -0
- package/DS1/x-icon/start.svg +4 -0
- package/DS1/x-icon/{ezo-item-button-reopen.svg → stop.svg} +1 -1
- package/DS1/x-icon/sun.svg +3 -0
- package/DS1/x-icon/system.svg +4 -0
- package/DS1/x-icon/tag.svg +3 -0
- package/DS1/x-icon/ticket.svg +3 -0
- package/DS1/x-icon/title-struck.svg +4 -0
- package/DS1/x-icon/train.svg +3 -0
- package/DS1/x-icon/transfer.svg +3 -0
- package/DS1/x-icon/tv.svg +3 -0
- package/DS1/x-icon/upload.svg +4 -0
- package/DS1/x-icon/video.svg +4 -0
- package/DS1/x-icon/vimeo.svg +3 -0
- package/DS1/x-icon/wallet.svg +3 -0
- package/DS1/x-icon/wifi.svg +3 -0
- package/DS1/x-icon/window.svg +4 -0
- package/DS1/x-icon/wrench.svg +3 -0
- package/DS1/x-icon/x-brand.svg +4 -0
- package/DS1/x-icon/youtube.svg +4 -0
- package/README.md +3 -3
- package/dist/0-face/calendar.d.ts +75 -0
- package/dist/0-face/calendar.d.ts.map +1 -0
- package/dist/0-face/calendar.js +149 -0
- package/dist/0-face/carousel.d.ts +174 -0
- package/dist/0-face/carousel.d.ts.map +1 -0
- package/dist/0-face/carousel.js +583 -0
- package/dist/0-face/component-visibility.d.ts +7 -0
- package/dist/0-face/component-visibility.d.ts.map +1 -0
- package/dist/0-face/component-visibility.js +10 -0
- package/dist/0-face/copy-text.d.ts +11 -0
- package/dist/0-face/copy-text.d.ts.map +1 -0
- package/dist/0-face/copy-text.js +97 -0
- package/dist/0-face/device.d.ts +3 -7
- package/dist/0-face/device.d.ts.map +1 -1
- package/dist/0-face/device.js +7 -41
- package/dist/0-face/dialog-swipe.d.ts +49 -0
- package/dist/0-face/dialog-swipe.d.ts.map +1 -0
- package/dist/0-face/dialog-swipe.js +239 -0
- package/dist/0-face/dialogs.d.ts +33 -0
- package/dist/0-face/dialogs.d.ts.map +1 -0
- package/dist/0-face/dialogs.js +173 -0
- package/dist/0-face/drawer.d.ts +64 -0
- package/dist/0-face/drawer.d.ts.map +1 -0
- package/dist/0-face/drawer.js +256 -0
- package/dist/0-face/feedback-words.d.ts +21 -0
- package/dist/0-face/feedback-words.d.ts.map +1 -0
- package/dist/0-face/feedback-words.js +30 -0
- package/dist/0-face/feedback.d.ts +41 -0
- package/dist/0-face/feedback.d.ts.map +1 -0
- package/dist/0-face/feedback.js +35 -0
- package/dist/0-face/format.d.ts +166 -0
- package/dist/0-face/format.d.ts.map +1 -0
- package/dist/0-face/format.js +445 -0
- package/dist/0-face/generated/toast-assets.d.ts +11 -0
- package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
- package/dist/0-face/generated/toast-assets.js +14 -0
- package/dist/0-face/grid-fit.js +1 -1
- package/dist/0-face/grid.d.ts.map +1 -1
- package/dist/0-face/grid.js +2 -1
- package/dist/0-face/header.d.ts +38 -0
- package/dist/0-face/header.d.ts.map +1 -0
- package/dist/0-face/header.js +80 -0
- package/dist/0-face/i18n.d.ts +32 -2
- package/dist/0-face/i18n.d.ts.map +1 -1
- package/dist/0-face/i18n.js +65 -19
- package/dist/0-face/keys.d.ts +104 -0
- package/dist/0-face/keys.d.ts.map +1 -0
- package/dist/0-face/keys.js +253 -0
- package/dist/0-face/languages.d.ts +2 -2
- package/dist/0-face/languages.js +3 -3
- package/dist/0-face/layout-inspector.js +6 -6
- package/dist/0-face/library-styles.d.ts +7 -0
- package/dist/0-face/library-styles.d.ts.map +1 -0
- package/dist/0-face/library-styles.js +29 -0
- package/dist/0-face/load-toaster.d.ts +8 -0
- package/dist/0-face/load-toaster.d.ts.map +1 -0
- package/dist/0-face/load-toaster.js +7 -0
- package/dist/0-face/preference-options.d.ts +34 -0
- package/dist/0-face/preference-options.d.ts.map +1 -0
- package/dist/0-face/preference-options.js +1 -0
- package/dist/0-face/preferences.d.ts +3 -12
- package/dist/0-face/preferences.d.ts.map +1 -1
- package/dist/0-face/pricing.d.ts +19 -9
- package/dist/0-face/pricing.d.ts.map +1 -1
- package/dist/0-face/pricing.js +81 -40
- package/dist/0-face/scaling.d.ts +71 -1
- package/dist/0-face/scaling.d.ts.map +1 -1
- package/dist/0-face/scaling.js +108 -3
- package/dist/0-face/shared-words.d.ts +9 -4
- package/dist/0-face/shared-words.d.ts.map +1 -1
- package/dist/0-face/sidebar.d.ts +69 -0
- package/dist/0-face/sidebar.d.ts.map +1 -0
- package/dist/0-face/sidebar.js +191 -0
- package/dist/0-face/theme-bootstrap.d.ts +1 -0
- package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
- package/dist/0-face/theme-bootstrap.js +214 -0
- package/dist/0-face/theme.d.ts +32 -0
- package/dist/0-face/theme.d.ts.map +1 -1
- package/dist/0-face/theme.js +69 -43
- package/dist/0-face/toast-queue.d.ts +110 -0
- package/dist/0-face/toast-queue.d.ts.map +1 -0
- package/dist/0-face/toast-queue.js +98 -0
- package/dist/0-face/toaster.d.ts +27 -0
- package/dist/0-face/toaster.d.ts.map +1 -0
- package/dist/0-face/toaster.js +373 -0
- package/dist/0-face/tooltips.d.ts +24 -1
- package/dist/0-face/tooltips.d.ts.map +1 -1
- package/dist/0-face/tooltips.js +155 -16
- package/dist/0-face/translations/da.json +60 -1
- package/dist/0-face/translations/de.json +60 -1
- package/dist/0-face/translations/en.json +60 -1
- package/dist/0-face/translations/es.json +60 -1
- package/dist/0-face/translations/fi.json +60 -1
- package/dist/0-face/translations/fr.json +60 -1
- package/dist/0-face/translations/is.json +60 -1
- package/dist/0-face/translations/it.json +60 -1
- package/dist/0-face/translations/ja.json +60 -1
- package/dist/0-face/translations/ko.json +60 -1
- package/dist/0-face/translations/nb.json +60 -1
- package/dist/0-face/translations/pt-BR.json +60 -1
- package/dist/0-face/translations/pt.json +60 -1
- package/dist/0-face/translations/sv.json +60 -1
- package/dist/0-face/translations/zh.json +60 -1
- package/dist/0-face/translations-format.d.ts.map +1 -1
- package/dist/0-face/translations-format.js +3 -4
- package/dist/0-face/tree.d.ts +69 -0
- package/dist/0-face/tree.d.ts.map +1 -0
- package/dist/0-face/tree.js +191 -0
- package/dist/1-root/library-tokens.d.ts +31 -0
- package/dist/1-root/library-tokens.d.ts.map +1 -0
- package/dist/1-root/library-tokens.js +84 -0
- package/dist/1-root/measures.d.ts +52 -0
- package/dist/1-root/measures.d.ts.map +1 -0
- package/dist/1-root/measures.js +49 -0
- package/dist/1-root/palette.d.ts +5 -0
- package/dist/1-root/palette.d.ts.map +1 -1
- package/dist/1-root/palette.js +18 -0
- package/dist/2-core/button-split.d.ts +21 -0
- package/dist/2-core/button-split.d.ts.map +1 -0
- package/dist/2-core/button-split.js +48 -0
- package/dist/2-core/chart/grid-chart.d.ts +113 -0
- package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
- package/dist/2-core/chart/grid-chart.js +466 -0
- package/dist/2-core/ds-avatar.d.ts +20 -3
- package/dist/2-core/ds-avatar.d.ts.map +1 -1
- package/dist/2-core/ds-avatar.js +19 -5
- package/dist/2-core/ds-badge.js +10 -13
- package/dist/2-core/ds-banner.d.ts +23 -7
- package/dist/2-core/ds-banner.d.ts.map +1 -1
- package/dist/2-core/ds-banner.js +48 -12
- package/dist/2-core/ds-button.d.ts +76 -0
- package/dist/2-core/ds-button.d.ts.map +1 -1
- package/dist/2-core/ds-button.js +101 -26
- package/dist/2-core/ds-card.d.ts +76 -11
- package/dist/2-core/ds-card.d.ts.map +1 -1
- package/dist/2-core/ds-card.js +129 -105
- package/dist/2-core/ds-chart.d.ts +105 -0
- package/dist/2-core/ds-chart.d.ts.map +1 -0
- package/dist/2-core/ds-chart.js +390 -0
- package/dist/2-core/ds-composer.d.ts +7 -0
- package/dist/2-core/ds-composer.d.ts.map +1 -1
- package/dist/2-core/ds-composer.js +1 -1
- package/dist/2-core/ds-cycle.d.ts +36 -2
- package/dist/2-core/ds-cycle.d.ts.map +1 -1
- package/dist/2-core/ds-cycle.js +95 -18
- package/dist/2-core/ds-empty.d.ts +74 -0
- package/dist/2-core/ds-empty.d.ts.map +1 -0
- package/dist/2-core/ds-empty.js +96 -0
- package/dist/2-core/ds-icon.d.ts +6 -0
- package/dist/2-core/ds-icon.d.ts.map +1 -1
- package/dist/2-core/ds-icon.js +12 -2
- package/dist/2-core/ds-input.d.ts +39 -1
- package/dist/2-core/ds-input.d.ts.map +1 -1
- package/dist/2-core/ds-input.js +150 -6
- package/dist/2-core/ds-kbd.d.ts +48 -0
- package/dist/2-core/ds-kbd.d.ts.map +1 -0
- package/dist/2-core/ds-kbd.js +65 -0
- package/dist/2-core/ds-language.d.ts +8 -1
- package/dist/2-core/ds-language.d.ts.map +1 -1
- package/dist/2-core/ds-language.js +2 -2
- package/dist/2-core/ds-loading.d.ts +40 -0
- package/dist/2-core/ds-loading.d.ts.map +1 -0
- package/dist/2-core/ds-loading.js +63 -0
- package/dist/2-core/ds-meter.d.ts +103 -0
- package/dist/2-core/ds-meter.d.ts.map +1 -0
- package/dist/2-core/ds-meter.js +124 -0
- package/dist/2-core/ds-notice.d.ts +103 -0
- package/dist/2-core/ds-notice.d.ts.map +1 -0
- package/dist/2-core/ds-notice.js +152 -0
- package/dist/2-core/ds-pagedots.d.ts +64 -7
- package/dist/2-core/ds-pagedots.d.ts.map +1 -1
- package/dist/2-core/ds-pagedots.js +124 -18
- package/dist/2-core/ds-progress.d.ts +200 -0
- package/dist/2-core/ds-progress.d.ts.map +1 -0
- package/dist/2-core/ds-progress.js +319 -0
- package/dist/2-core/ds-spacing-handle.d.ts +25 -0
- package/dist/2-core/ds-spacing-handle.d.ts.map +1 -0
- package/dist/2-core/ds-spacing-handle.js +25 -0
- package/dist/2-core/ds-split.d.ts +4 -67
- package/dist/2-core/ds-split.d.ts.map +1 -1
- package/dist/2-core/ds-split.js +4 -98
- package/dist/2-core/ds-stat.d.ts +126 -0
- package/dist/2-core/ds-stat.d.ts.map +1 -0
- package/dist/2-core/ds-stat.js +137 -0
- package/dist/2-core/ds-steps.d.ts +72 -0
- package/dist/2-core/ds-steps.d.ts.map +1 -0
- package/dist/2-core/ds-steps.js +114 -0
- package/dist/2-core/ds-switch.d.ts +1 -0
- package/dist/2-core/ds-switch.d.ts.map +1 -1
- package/dist/2-core/ds-switch.js +1 -0
- package/dist/2-core/ds-text.d.ts +15 -2
- package/dist/2-core/ds-text.d.ts.map +1 -1
- package/dist/2-core/ds-text.js +13 -0
- package/dist/2-core/ds-textarea.d.ts.map +1 -1
- package/dist/2-core/ds-textarea.js +1 -0
- package/dist/2-core/ds-toast.d.ts +139 -0
- package/dist/2-core/ds-toast.d.ts.map +1 -0
- package/dist/2-core/ds-toast.js +329 -0
- package/dist/2-core/ds-toggle.d.ts +11 -0
- package/dist/2-core/ds-toggle.d.ts.map +1 -0
- package/dist/2-core/ds-toggle.js +10 -0
- package/dist/2-core/figures.d.ts +56 -0
- package/dist/2-core/figures.d.ts.map +1 -0
- package/dist/2-core/figures.js +70 -0
- package/dist/2-core/generated/ds-icon-map.d.ts +118 -65
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
- package/dist/2-core/generated/ds-icon-map.js +234 -128
- package/dist/2-core/generated/icon-avatar.d.ts +2 -0
- package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
- package/dist/2-core/generated/icon-avatar.js +2 -0
- package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
- package/dist/2-core/generated/icons-extra.js +118 -65
- package/dist/2-core/generated/icons-immediate.d.ts +1 -1
- package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
- package/dist/2-core/generated/icons-immediate.js +1 -1
- package/dist/2-core/spacing-handle.d.ts +28 -0
- package/dist/2-core/spacing-handle.d.ts.map +1 -0
- package/dist/2-core/spacing-handle.js +146 -0
- package/dist/3-unit/calendar-base.d.ts +149 -0
- package/dist/3-unit/calendar-base.d.ts.map +1 -0
- package/dist/3-unit/calendar-base.js +172 -0
- package/dist/3-unit/ds-accordion.d.ts +9 -0
- package/dist/3-unit/ds-accordion.d.ts.map +1 -1
- package/dist/3-unit/ds-accordion.js +7 -1
- package/dist/3-unit/ds-avatar-group.d.ts +1 -0
- package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
- package/dist/3-unit/ds-calendar-large.d.ts +138 -0
- package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar-large.js +305 -0
- package/dist/3-unit/ds-calendar.d.ts +175 -0
- package/dist/3-unit/ds-calendar.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar.js +303 -0
- package/dist/3-unit/ds-carousel.d.ts +182 -0
- package/dist/3-unit/ds-carousel.d.ts.map +1 -0
- package/dist/3-unit/ds-carousel.js +327 -0
- package/dist/3-unit/ds-date-picker.d.ts +203 -0
- package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
- package/dist/3-unit/ds-date-picker.js +499 -0
- package/dist/3-unit/ds-form.d.ts.map +1 -1
- package/dist/3-unit/ds-form.js +38 -28
- package/dist/3-unit/ds-list.d.ts +12 -0
- package/dist/3-unit/ds-list.d.ts.map +1 -1
- package/dist/3-unit/ds-list.js +52 -1
- package/dist/3-unit/ds-matrix.d.ts +146 -0
- package/dist/3-unit/ds-matrix.d.ts.map +1 -0
- package/dist/3-unit/ds-matrix.js +248 -0
- package/dist/3-unit/ds-menu.d.ts +1 -1
- package/dist/3-unit/ds-menu.d.ts.map +1 -1
- package/dist/3-unit/ds-menu.js +7 -4
- package/dist/3-unit/ds-row.d.ts +66 -0
- package/dist/3-unit/ds-row.d.ts.map +1 -1
- package/dist/3-unit/ds-row.js +80 -1
- package/dist/3-unit/ds-sidebar.d.ts +108 -0
- package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
- package/dist/3-unit/ds-sidebar.js +268 -0
- package/dist/3-unit/ds-table.d.ts +28 -10
- package/dist/3-unit/ds-table.d.ts.map +1 -1
- package/dist/3-unit/ds-table.js +53 -25
- package/dist/3-unit/ds-tree.d.ts +69 -0
- package/dist/3-unit/ds-tree.d.ts.map +1 -0
- package/dist/3-unit/ds-tree.js +136 -0
- package/dist/4-page/ds-dialog.d.ts +16 -1
- package/dist/4-page/ds-dialog.d.ts.map +1 -1
- package/dist/4-page/ds-dialog.js +39 -3
- package/dist/4-page/ds-document.d.ts +98 -0
- package/dist/4-page/ds-document.d.ts.map +1 -0
- package/dist/4-page/ds-document.js +213 -0
- package/dist/4-page/ds-footer.d.ts +100 -0
- package/dist/4-page/ds-footer.d.ts.map +1 -0
- package/dist/4-page/ds-footer.js +119 -0
- package/dist/4-page/ds-grid.d.ts +32 -12
- package/dist/4-page/ds-grid.d.ts.map +1 -1
- package/dist/4-page/ds-grid.js +30 -39
- package/dist/4-page/ds-header.d.ts +84 -0
- package/dist/4-page/ds-header.d.ts.map +1 -0
- package/dist/4-page/ds-header.js +143 -0
- package/dist/4-page/ds-layout.d.ts +1 -0
- package/dist/4-page/ds-layout.d.ts.map +1 -1
- package/dist/4-page/ds-layout.js +1 -1
- package/dist/4-page/ds-page.d.ts +110 -0
- package/dist/4-page/ds-page.d.ts.map +1 -0
- package/dist/4-page/ds-page.js +155 -0
- package/dist/4-page/email.d.ts +2 -3
- package/dist/4-page/email.d.ts.map +1 -1
- package/dist/4-page/email.js +2 -3
- package/dist/components.d.ts +4 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -1
- package/dist/design-system-1.bundle.js +11304 -4322
- package/dist/design-system-1.bundle.js.map +1 -1
- package/dist/design-system-1.bundle.min.js +8867 -4132
- package/dist/design-system-1.bundle.min.js.map +1 -1
- package/dist/design-system-1.css +1 -1
- package/dist/feedback.js +541 -0
- package/dist/feedback.js.map +1 -0
- package/dist/icons-extra-B4Iotc7s.js +298 -0
- package/dist/icons-extra-B4Iotc7s.js.map +1 -0
- package/dist/icons-extra-C4sCgoUj.js +185 -0
- package/dist/icons-extra-C4sCgoUj.js.map +1 -0
- package/dist/icons-extra-DSav6uTU.js +300 -0
- package/dist/icons-extra-DSav6uTU.js.map +1 -0
- package/dist/icons-extra-Dc_yVWIz.js +1024 -0
- package/dist/icons-extra-Dc_yVWIz.js.map +1 -0
- package/dist/icons-extra-cfzoudMf.js +1030 -0
- package/dist/icons-extra-cfzoudMf.js.map +1 -0
- package/dist/icons-extra-g_xpwZhZ.js +631 -0
- package/dist/icons-extra-g_xpwZhZ.js.map +1 -0
- package/dist/index.d.ts +23 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -6
- package/dist/react/avatar.d.ts +5 -9
- package/dist/react/avatar.d.ts.map +1 -1
- package/dist/react/avatar.js +2 -2
- package/dist/react/button-split.d.ts +19 -0
- package/dist/react/button-split.d.ts.map +1 -0
- package/dist/react/button-split.js +35 -0
- package/dist/react/button.d.ts +18 -7
- package/dist/react/button.d.ts.map +1 -1
- package/dist/react/button.js +13 -4
- package/dist/react/carousel.d.ts +63 -0
- package/dist/react/carousel.d.ts.map +1 -0
- package/dist/react/carousel.js +47 -0
- package/dist/react/choice.d.ts +1 -1
- package/dist/react/context-menu.d.ts +337 -337
- package/dist/react/dialog.d.ts +684 -678
- package/dist/react/dialog.d.ts.map +1 -1
- package/dist/react/dialog.js +29 -3
- package/dist/react/document.d.ts +11 -0
- package/dist/react/document.d.ts.map +1 -0
- package/dist/react/document.js +10 -0
- package/dist/react/empty.d.ts +34 -0
- package/dist/react/empty.d.ts.map +1 -0
- package/dist/react/empty.js +8 -0
- package/dist/react/file-picker.d.ts +1 -1
- package/dist/react/footer.d.ts +13 -0
- package/dist/react/footer.d.ts.map +1 -0
- package/dist/react/footer.js +12 -0
- package/dist/react/header.d.ts +12 -0
- package/dist/react/header.d.ts.map +1 -0
- package/dist/react/header.js +11 -0
- package/dist/react/input.d.ts +31 -9
- package/dist/react/input.d.ts.map +1 -1
- package/dist/react/input.js +94 -94
- package/dist/react/kbd.d.ts +26 -0
- package/dist/react/kbd.d.ts.map +1 -0
- package/dist/react/kbd.js +8 -0
- package/dist/react/loading.d.ts +14 -0
- package/dist/react/loading.d.ts.map +1 -0
- package/dist/react/loading.js +14 -0
- package/dist/react/meter.d.ts +64 -0
- package/dist/react/meter.d.ts.map +1 -0
- package/dist/react/meter.js +15 -0
- package/dist/react/notice.d.ts +45 -0
- package/dist/react/notice.d.ts.map +1 -0
- package/dist/react/notice.js +34 -0
- package/dist/react/page.d.ts +10 -0
- package/dist/react/page.d.ts.map +1 -0
- package/dist/react/page.js +9 -0
- package/dist/react/progress.d.ts +107 -0
- package/dist/react/progress.d.ts.map +1 -0
- package/dist/react/progress.js +47 -0
- package/dist/react/sidebar.d.ts +44 -0
- package/dist/react/sidebar.d.ts.map +1 -0
- package/dist/react/sidebar.js +41 -0
- package/dist/react/spacing-handle.d.ts +13 -0
- package/dist/react/spacing-handle.d.ts.map +1 -0
- package/dist/react/spacing-handle.js +18 -0
- package/dist/react/split.d.ts +6 -14
- package/dist/react/split.d.ts.map +1 -1
- package/dist/react/split.js +5 -31
- package/dist/react/stat.d.ts +78 -0
- package/dist/react/stat.d.ts.map +1 -0
- package/dist/react/stat.js +25 -0
- package/dist/react/steps.d.ts +36 -0
- package/dist/react/steps.d.ts.map +1 -0
- package/dist/react/steps.js +10 -0
- package/dist/react/toast.d.ts +37 -0
- package/dist/react/toast.d.ts.map +1 -0
- package/dist/react/toast.js +55 -0
- package/dist/react/tree.d.ts +31 -0
- package/dist/react/tree.d.ts.map +1 -0
- package/dist/react/tree.js +37 -0
- package/dist/shared-words-BfnT24Fe.js +1635 -0
- package/dist/shared-words-BfnT24Fe.js.map +1 -0
- package/dist/shared-words-CyZYc_De.js +1818 -0
- package/dist/shared-words-CyZYc_De.js.map +1 -0
- package/dist/shared-words-DAVSET4Z.js +1800 -0
- package/dist/shared-words-DAVSET4Z.js.map +1 -0
- package/dist/shared-words-UCvnkctb.js +1653 -0
- package/dist/shared-words-UCvnkctb.js.map +1 -0
- package/package.json +16 -5
- package/DS1/2-core/ds-banner.ts +0 -122
- package/DS1/2-core/ds-date.ts +0 -24
- package/DS1/2-core/ds-language.ts +0 -94
- package/DS1/2-core/ds-pagedots.ts +0 -52
- package/DS1/2-core/ds-split.ts +0 -122
- package/DS1/2-core/ds-textarea.ts +0 -136
- package/DS1/2-core/styles/ds-banner.css +0 -77
- package/DS1/2-core/styles/ds-date.css +0 -9
- package/DS1/2-core/styles/ds-language.css +0 -78
- package/DS1/2-core/styles/ds-pagedots.css +0 -31
- package/DS1/2-core/styles/ds-textarea.css +0 -27
- package/DS1/4-page/ds-layout.ts +0 -949
- package/DS1/4-page/styles/ds-layout.css +0 -246
- package/DS1/react/split.ts +0 -42
- package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
- package/DS1/x-icon/ezo-account-close.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
- package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
- package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
- package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
- package/DS1/x-icon/ezo-block-accordion.svg +0 -1
- package/DS1/x-icon/ezo-block-divider.svg +0 -1
- package/DS1/x-icon/ezo-block-group.svg +0 -1
- package/DS1/x-icon/ezo-block-image.svg +0 -1
- package/DS1/x-icon/ezo-block-section.svg +0 -1
- package/DS1/x-icon/ezo-block-table.svg +0 -1
- package/DS1/x-icon/ezo-code.svg +0 -14
- package/DS1/x-icon/ezo-down.svg +0 -3
- package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
- package/DS1/x-icon/ezo-item-button-header.svg +0 -3
- package/DS1/x-icon/ezo-item-button-open.svg +0 -3
- package/DS1/x-icon/ezo-item-button-star.svg +0 -3
- package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
- package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
- package/DS1/x-icon/ezo-item-star.svg +0 -5
- package/DS1/x-icon/ezo-left.svg +0 -3
- package/DS1/x-icon/ezo-logo.svg +0 -1
- package/DS1/x-icon/ezo-mic.svg +0 -8
- package/DS1/x-icon/ezo-move-column.svg +0 -14
- package/DS1/x-icon/ezo-move-row.svg +0 -18
- package/DS1/x-icon/ezo-navigation-check.svg +0 -1
- package/DS1/x-icon/ezo-note-back.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
- package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
- package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
- package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
- package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
- package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
- package/DS1/x-icon/ezo-note-more.svg +0 -7
- package/DS1/x-icon/ezo-note-star.svg +0 -5
- package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
- package/DS1/x-icon/ezo-play.svg +0 -5
- package/DS1/x-icon/ezo-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
- package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
- package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
- package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
- package/DS1/x-icon/ezo-setting-blank.svg +0 -5
- package/DS1/x-icon/ezo-store-chevron.svg +0 -1
- package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
- package/DS1/x-icon/product-sources.json +0 -2557
- /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
- /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copy text to the clipboard and say so in a toast, for pages with or
|
|
3
|
+
* without a framework.
|
|
4
|
+
*
|
|
5
|
+
* It writes with the Clipboard API, and where that is missing or refused (a
|
|
6
|
+
* page served over plain HTTP, an older browser) it copies from a hidden field
|
|
7
|
+
* instead. The toast is the shared word "Copied" in the page's language,
|
|
8
|
+
* shown by `<ds-toast>` where the page has one and by the page toaster
|
|
9
|
+
* otherwise; a failure says "Could not copy".
|
|
10
|
+
*
|
|
11
|
+
* It is small on its own: the page toaster (`./toaster.ts`) loads only when a
|
|
12
|
+
* toast is shown and nothing in the page draws toasts yet, so a page that
|
|
13
|
+
* copies with `toast: false`, or has `<ds-toast>`, never loads it. Import it
|
|
14
|
+
* from here, not from `./feedback.ts`, where the page needs nothing else.
|
|
15
|
+
*/
|
|
16
|
+
import { feedbackWord } from "./feedback-words";
|
|
17
|
+
import { toast, toasterListening } from "./toast-queue";
|
|
18
|
+
/** The open modal dialog, if any: the rest of the page is inert, so the hidden field goes in it. */
|
|
19
|
+
function modalDialog() {
|
|
20
|
+
try {
|
|
21
|
+
return document.querySelector("dialog:modal");
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** The fallback: select the text in a hidden field and copy the selection. */
|
|
28
|
+
function copyFromField(text) {
|
|
29
|
+
if (typeof document === "undefined" || !document.body)
|
|
30
|
+
return false;
|
|
31
|
+
const active = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
32
|
+
const selection = document.getSelection();
|
|
33
|
+
const ranges = selection ? Array.from({ length: selection.rangeCount }, (_, index) => selection.getRangeAt(index)) : [];
|
|
34
|
+
const field = document.createElement("textarea");
|
|
35
|
+
field.value = text;
|
|
36
|
+
field.setAttribute("readonly", "");
|
|
37
|
+
field.setAttribute("aria-hidden", "true");
|
|
38
|
+
field.tabIndex = -1;
|
|
39
|
+
field.style.cssText = "position:fixed;top:0;left:0;width:1px;height:1px;margin:0;padding:0;border:0;opacity:0;pointer-events:none";
|
|
40
|
+
(modalDialog() ?? document.body).appendChild(field);
|
|
41
|
+
field.focus({ preventScroll: true });
|
|
42
|
+
field.select();
|
|
43
|
+
field.setSelectionRange(0, text.length);
|
|
44
|
+
let copied = false;
|
|
45
|
+
try {
|
|
46
|
+
copied = document.execCommand("copy");
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
copied = false;
|
|
50
|
+
}
|
|
51
|
+
field.remove();
|
|
52
|
+
active?.focus({ preventScroll: true });
|
|
53
|
+
if (selection) {
|
|
54
|
+
selection.removeAllRanges();
|
|
55
|
+
for (const range of ranges)
|
|
56
|
+
selection.addRange(range);
|
|
57
|
+
}
|
|
58
|
+
return copied;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Copy `text` and confirm it with a toast. Resolves to whether it was copied.
|
|
62
|
+
* Call it from the click or key press that asks for it: browsers allow writing
|
|
63
|
+
* to the clipboard only then.
|
|
64
|
+
*/
|
|
65
|
+
export async function copyText(text, options = {}) {
|
|
66
|
+
let copied = false;
|
|
67
|
+
const clipboard = typeof navigator === "undefined" ? undefined : navigator.clipboard;
|
|
68
|
+
if (clipboard?.writeText) {
|
|
69
|
+
try {
|
|
70
|
+
await clipboard.writeText(text);
|
|
71
|
+
copied = true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
copied = false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (!copied)
|
|
78
|
+
copied = copyFromField(text);
|
|
79
|
+
if (options.toast !== false)
|
|
80
|
+
await say(copied, copied ? options.toast ?? feedbackWord("Copied") : feedbackWord("Could not copy"));
|
|
81
|
+
return copied;
|
|
82
|
+
}
|
|
83
|
+
/** The toast, with the page toaster loaded first where nothing in the page draws toasts yet. */
|
|
84
|
+
async function say(copied, words) {
|
|
85
|
+
if (!toasterListening()) {
|
|
86
|
+
try {
|
|
87
|
+
(await import("./load-toaster")).pageToaster();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// No toaster could load: the copy itself still answers.
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (copied)
|
|
94
|
+
toast.success(words);
|
|
95
|
+
else
|
|
96
|
+
toast.error(words);
|
|
97
|
+
}
|
package/dist/0-face/device.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ScalingConfig } from "./scaling";
|
|
2
|
-
export type { ScalingConfig, ScalingMode } from "./scaling";
|
|
2
|
+
export type { ScalingConfig, ScalingMode, ScalingOptions, ScalingSnap } from "./scaling";
|
|
3
|
+
export { applyScaling, detectMobileDevice, startScaling, toDevicePixel, toLayoutStep } from "./scaling";
|
|
3
4
|
export type DeviceType = "mobile" | "tablet" | "desktop";
|
|
4
5
|
export interface DeviceInfo {
|
|
5
6
|
isMobile: boolean;
|
|
@@ -15,11 +16,6 @@ export interface DeviceInfo {
|
|
|
15
16
|
export declare const scalingFactor: import("@lit-labs/signals").Signal.State<number>;
|
|
16
17
|
/** Current scaling configuration */
|
|
17
18
|
export declare const scalingConfig: import("@lit-labs/signals").Signal.State<ScalingConfig>;
|
|
18
|
-
/**
|
|
19
|
-
* Comprehensive mobile device detection
|
|
20
|
-
* Combines user agent detection, touch capability, and viewport size
|
|
21
|
-
*/
|
|
22
|
-
export declare function detectMobileDevice(): boolean;
|
|
23
19
|
/**
|
|
24
20
|
* Get detailed device information
|
|
25
21
|
*/
|
|
@@ -38,7 +34,7 @@ export declare function calculateScalingFactor(viewportWidth: number, config?: S
|
|
|
38
34
|
export declare function setScalingConfig(config: Partial<ScalingConfig>): void;
|
|
39
35
|
/**
|
|
40
36
|
* Update the scaling factor based on current viewport
|
|
41
|
-
* Desktop always uses factor 1; mobile uses computed factor
|
|
37
|
+
* Desktop always uses factor 1; mobile uses computed factor (see scaling.ts)
|
|
42
38
|
*/
|
|
43
39
|
export declare function updateScalingFactor(): void;
|
|
44
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../DS1/0-face/device.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../DS1/0-face/device.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoG,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AACjJ,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAMxG,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qCAAqC;AACrC,eAAO,MAAM,aAAa,kDAAoB,CAAC;AAE/C,oCAAoC;AACpC,eAAO,MAAM,aAAa,yDAA8C,CAAC;AAMzE;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CA6B1C;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,aAAmC,GAC1C,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CASrE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAa1C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGhD;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CA8ChD;AAiCD;;;GAGG;AACH,wBAAgB,OAAO,IAAI,IAAI,CA4H9B"}
|
package/dist/0-face/device.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// device.ts
|
|
2
2
|
// Device detection, context utilities, and responsive scaling
|
|
3
3
|
import { signal } from "@lit-labs/signals";
|
|
4
|
-
import { calculateScalingFactor as calculateScale, defaultScalingConfig } from "./scaling";
|
|
4
|
+
import { applyScaling, calculateScalingFactor as calculateScale, defaultScalingConfig, detectMobileDevice } from "./scaling";
|
|
5
|
+
// One rule for which screens scale, shared with pages that copy scaling.ts alone.
|
|
6
|
+
export { applyScaling, detectMobileDevice, startScaling, toDevicePixel, toLayoutStep } from "./scaling";
|
|
5
7
|
/** Reactive scaling factor signal */
|
|
6
8
|
export const scalingFactor = signal(1);
|
|
7
9
|
/** Current scaling configuration */
|
|
@@ -9,28 +11,6 @@ export const scalingConfig = signal(defaultScalingConfig);
|
|
|
9
11
|
// ============================================================================
|
|
10
12
|
// Device Detection
|
|
11
13
|
// ============================================================================
|
|
12
|
-
/**
|
|
13
|
-
* Comprehensive mobile device detection
|
|
14
|
-
* Combines user agent detection, touch capability, and viewport size
|
|
15
|
-
*/
|
|
16
|
-
export function detectMobileDevice() {
|
|
17
|
-
if (typeof navigator === "undefined" || typeof window === "undefined") {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
const nav = navigator;
|
|
21
|
-
const win = window;
|
|
22
|
-
const ua = (nav && (nav.userAgent || nav.vendor)) || (win && win.opera) || "";
|
|
23
|
-
// User agent based detection
|
|
24
|
-
const uaMatchesMobile = /Mobile|Android|iP(ad|hone|od)|IEMobile|BlackBerry|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)|Windows Phone|Phone|Tablet/i.test(ua);
|
|
25
|
-
// Touch capability detection
|
|
26
|
-
const touchPoints = (nav && nav.maxTouchPoints) || 0;
|
|
27
|
-
const isTouchCapable = touchPoints > 1;
|
|
28
|
-
// Viewport detection
|
|
29
|
-
const narrowViewport = win
|
|
30
|
-
? Math.min(win.innerWidth || 0, win.innerHeight || 0) <= 820
|
|
31
|
-
: false;
|
|
32
|
-
return uaMatchesMobile || (isTouchCapable && narrowViewport);
|
|
33
|
-
}
|
|
34
14
|
/**
|
|
35
15
|
* Get detailed device information
|
|
36
16
|
*/
|
|
@@ -86,31 +66,17 @@ export function setScalingConfig(config) {
|
|
|
86
66
|
}
|
|
87
67
|
/**
|
|
88
68
|
* Update the scaling factor based on current viewport
|
|
89
|
-
* Desktop always uses factor 1; mobile uses computed factor
|
|
69
|
+
* Desktop always uses factor 1; mobile uses computed factor (see scaling.ts)
|
|
90
70
|
*/
|
|
91
71
|
export function updateScalingFactor() {
|
|
92
72
|
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
93
73
|
return;
|
|
94
74
|
}
|
|
95
|
-
const isMobile = detectMobileDevice();
|
|
96
|
-
// Desktop: always use factor 1
|
|
97
|
-
if (!isMobile) {
|
|
98
|
-
const factor = 1;
|
|
99
|
-
scalingFactor.set(factor);
|
|
100
|
-
document.documentElement.style.setProperty("--sf", factor.toString());
|
|
101
|
-
window.dispatchEvent(new CustomEvent("scaling-changed", {
|
|
102
|
-
detail: { scalingFactor: factor, config: scalingConfig.get() },
|
|
103
|
-
}));
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
// Mobile: compute scaling based on viewport
|
|
107
|
-
const viewportWidth = document.documentElement.clientWidth;
|
|
108
75
|
const config = scalingConfig.get();
|
|
109
|
-
const
|
|
110
|
-
scalingFactor.set(
|
|
111
|
-
document.documentElement.style.setProperty("--sf", newFactor.toString());
|
|
76
|
+
const factor = applyScaling(config);
|
|
77
|
+
scalingFactor.set(factor);
|
|
112
78
|
window.dispatchEvent(new CustomEvent("scaling-changed", {
|
|
113
|
-
detail: { scalingFactor:
|
|
79
|
+
detail: { scalingFactor: factor, config },
|
|
114
80
|
}));
|
|
115
81
|
}
|
|
116
82
|
/**
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swipe a sheet or a drawer away: a finger that drags a dialog towards the
|
|
3
|
+
* edge it came from moves it, and letting go far or fast enough dismisses it.
|
|
4
|
+
* `ds-dialog` binds it for `placement="sheet"`, `"end"` and `"start"`; a page
|
|
5
|
+
* without Lit binds its own `dialog.ds-dialog--sheet` (or `--end`, `--start`)
|
|
6
|
+
* with `bindDialogSwipe(dialog)`. Plain TypeScript with no framework.
|
|
7
|
+
*
|
|
8
|
+
* It follows the finger as touch does on Apple's platforms:
|
|
9
|
+
*
|
|
10
|
+
* - Touch alone; a mouse or a trackpad closes with Escape or the close button.
|
|
11
|
+
* - Ten pixels of movement before it decides, then it tracks the finger one
|
|
12
|
+
* to one from where it was grabbed, a moving dialog included (it starts
|
|
13
|
+
* from the dialog's place on screen, not from where it was going).
|
|
14
|
+
* - A drag along the content's own scroll is the content's: a sheet scrolled
|
|
15
|
+
* down scrolls back up first, a horizontal strip in a drawer scrolls, and a
|
|
16
|
+
* slider, a range input or anything marked `data-ds-dialog-no-swipe` keeps
|
|
17
|
+
* its touches.
|
|
18
|
+
* - Dragged the other way, it gives a little and pulls back (rubber-banding).
|
|
19
|
+
* - On release it projects where the throw would come to rest (the
|
|
20
|
+
* deceleration of a scroll, rate 0.998) and dismisses when that is past half
|
|
21
|
+
* its size and the finger is not moving back; otherwise it settles home.
|
|
22
|
+
* - The backdrop fades as the dialog goes (`--ds-dialog-progress`).
|
|
23
|
+
*
|
|
24
|
+
* Dismissing asks first, as a close button does: the element sends
|
|
25
|
+
* `ds-close-request` with the reason `"swipe"`, the native frame a cancelable
|
|
26
|
+
* `ds-close-request` on the dialog, and closes it when no listener prevents
|
|
27
|
+
* that. Declined (a form with unsaved changes asking first), it settles home.
|
|
28
|
+
* The motion itself is dialog-placement.css's, in transform alone.
|
|
29
|
+
*/
|
|
30
|
+
export type DialogPlacement = "center" | "sheet" | "end" | "start";
|
|
31
|
+
export interface DialogSwipeOptions {
|
|
32
|
+
/** Where the dialog stands, read at each touch; from its class or `data-ds-placement` by default. */
|
|
33
|
+
placement?: DialogPlacement | (() => DialogPlacement);
|
|
34
|
+
/**
|
|
35
|
+
* Called when a swipe would dismiss it. By default a cancelable
|
|
36
|
+
* `ds-close-request` (`detail.reason` `"swipe"`) on the dialog, then
|
|
37
|
+
* `dialog.close()` unless a listener prevented it. Still open two frames
|
|
38
|
+
* later, the dialog settles home.
|
|
39
|
+
*/
|
|
40
|
+
onDismiss?: (dialog: HTMLDialogElement) => void;
|
|
41
|
+
}
|
|
42
|
+
/** A dialog's placement, from `data-ds-placement` or its `ds-dialog--` class. */
|
|
43
|
+
export declare function dialogPlacement(dialog: HTMLDialogElement): DialogPlacement;
|
|
44
|
+
/**
|
|
45
|
+
* Let a finger swipe a sheet or drawer away. Returns the function that
|
|
46
|
+
* unbinds it and clears what it set on the dialog.
|
|
47
|
+
*/
|
|
48
|
+
export declare function bindDialogSwipe(dialog: HTMLDialogElement, options?: DialogSwipeOptions): () => void;
|
|
49
|
+
//# sourceMappingURL=dialog-swipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog-swipe.d.ts","sourceRoot":"","sources":["../../DS1/0-face/dialog-swipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,qGAAqG;IACrG,SAAS,CAAC,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,CAAC;IACtD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACjD;AAaD,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAK1E;AA4DD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,IAAI,CA2HvG"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swipe a sheet or a drawer away: a finger that drags a dialog towards the
|
|
3
|
+
* edge it came from moves it, and letting go far or fast enough dismisses it.
|
|
4
|
+
* `ds-dialog` binds it for `placement="sheet"`, `"end"` and `"start"`; a page
|
|
5
|
+
* without Lit binds its own `dialog.ds-dialog--sheet` (or `--end`, `--start`)
|
|
6
|
+
* with `bindDialogSwipe(dialog)`. Plain TypeScript with no framework.
|
|
7
|
+
*
|
|
8
|
+
* It follows the finger as touch does on Apple's platforms:
|
|
9
|
+
*
|
|
10
|
+
* - Touch alone; a mouse or a trackpad closes with Escape or the close button.
|
|
11
|
+
* - Ten pixels of movement before it decides, then it tracks the finger one
|
|
12
|
+
* to one from where it was grabbed, a moving dialog included (it starts
|
|
13
|
+
* from the dialog's place on screen, not from where it was going).
|
|
14
|
+
* - A drag along the content's own scroll is the content's: a sheet scrolled
|
|
15
|
+
* down scrolls back up first, a horizontal strip in a drawer scrolls, and a
|
|
16
|
+
* slider, a range input or anything marked `data-ds-dialog-no-swipe` keeps
|
|
17
|
+
* its touches.
|
|
18
|
+
* - Dragged the other way, it gives a little and pulls back (rubber-banding).
|
|
19
|
+
* - On release it projects where the throw would come to rest (the
|
|
20
|
+
* deceleration of a scroll, rate 0.998) and dismisses when that is past half
|
|
21
|
+
* its size and the finger is not moving back; otherwise it settles home.
|
|
22
|
+
* - The backdrop fades as the dialog goes (`--ds-dialog-progress`).
|
|
23
|
+
*
|
|
24
|
+
* Dismissing asks first, as a close button does: the element sends
|
|
25
|
+
* `ds-close-request` with the reason `"swipe"`, the native frame a cancelable
|
|
26
|
+
* `ds-close-request` on the dialog, and closes it when no listener prevents
|
|
27
|
+
* that. Declined (a form with unsaved changes asking first), it settles home.
|
|
28
|
+
* The motion itself is dialog-placement.css's, in transform alone.
|
|
29
|
+
*/
|
|
30
|
+
/** Ten pixels before a touch is a drag, as the platforms wait. */
|
|
31
|
+
const SLOP = 10;
|
|
32
|
+
/** A scroll's deceleration: where a throw at this speed comes to rest. */
|
|
33
|
+
const DECELERATION = 0.998;
|
|
34
|
+
const project = (velocity) => ((velocity / 1000) * DECELERATION) / (1 - DECELERATION);
|
|
35
|
+
/** Past its edge the dialog follows less the further it goes. */
|
|
36
|
+
const rubberband = (overshoot, dimension, constant = 0.55) => (overshoot * dimension * constant) / (dimension + constant * Math.abs(overshoot));
|
|
37
|
+
const PLACEMENTS = new Set(["center", "sheet", "end", "start"]);
|
|
38
|
+
/** A dialog's placement, from `data-ds-placement` or its `ds-dialog--` class. */
|
|
39
|
+
export function dialogPlacement(dialog) {
|
|
40
|
+
const marked = dialog.getAttribute("data-ds-placement");
|
|
41
|
+
if (marked && PLACEMENTS.has(marked))
|
|
42
|
+
return marked;
|
|
43
|
+
for (const placement of ["sheet", "end", "start"])
|
|
44
|
+
if (dialog.classList.contains(`ds-dialog--${placement}`))
|
|
45
|
+
return placement;
|
|
46
|
+
return "center";
|
|
47
|
+
}
|
|
48
|
+
/** The axis the dialog leaves along, and the sign of the way out on it. */
|
|
49
|
+
function direction(dialog, placement) {
|
|
50
|
+
if (placement === "sheet")
|
|
51
|
+
return { axis: "y", sign: 1 };
|
|
52
|
+
const rtl = dialog.ownerDocument.defaultView?.getComputedStyle(dialog).direction === "rtl";
|
|
53
|
+
const right = (placement === "end") !== rtl;
|
|
54
|
+
return { axis: "x", sign: right ? 1 : -1 };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* True when the content under the finger would scroll for this drag, so it
|
|
58
|
+
* keeps the touch: a finger moving down on content scrolled down scrolls it
|
|
59
|
+
* back up first, and one moving up scrolls it on while there is more.
|
|
60
|
+
*/
|
|
61
|
+
function contentScrolls(path, dialog, axis, along) {
|
|
62
|
+
const view = dialog.ownerDocument.defaultView;
|
|
63
|
+
for (const node of path) {
|
|
64
|
+
if (!(node instanceof Element))
|
|
65
|
+
continue;
|
|
66
|
+
const style = view?.getComputedStyle(node);
|
|
67
|
+
if (axis === "y") {
|
|
68
|
+
const scrolls = /auto|scroll/.test(style?.overflowY ?? "") && node.scrollHeight > node.clientHeight;
|
|
69
|
+
if (scrolls && (along > 0 ? node.scrollTop > 0 : node.scrollTop + node.clientHeight < node.scrollHeight - 1))
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const scrolls = /auto|scroll/.test(style?.overflowX ?? "") && node.scrollWidth > node.clientWidth;
|
|
74
|
+
if (scrolls)
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
if (node === dialog)
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
/** The dialog's place on screen along its axis, towards its edge, from its live transform. */
|
|
83
|
+
function presented(dialog, axis, sign) {
|
|
84
|
+
const view = dialog.ownerDocument.defaultView;
|
|
85
|
+
const transform = view?.getComputedStyle(dialog).transform;
|
|
86
|
+
if (!transform || transform === "none" || typeof DOMMatrixReadOnly === "undefined")
|
|
87
|
+
return 0;
|
|
88
|
+
try {
|
|
89
|
+
const matrix = new DOMMatrixReadOnly(transform);
|
|
90
|
+
return sign * (axis === "y" ? matrix.m42 : matrix.m41);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Let a finger swipe a sheet or drawer away. Returns the function that
|
|
98
|
+
* unbinds it and clears what it set on the dialog.
|
|
99
|
+
*/
|
|
100
|
+
export function bindDialogSwipe(dialog, options = {}) {
|
|
101
|
+
const placementNow = () => {
|
|
102
|
+
const given = typeof options.placement === "function" ? options.placement() : options.placement;
|
|
103
|
+
return given ?? dialogPlacement(dialog);
|
|
104
|
+
};
|
|
105
|
+
let gesture = null;
|
|
106
|
+
let settleTimer = 0;
|
|
107
|
+
const view = dialog.ownerDocument.defaultView;
|
|
108
|
+
const frame = (callback) => (view?.requestAnimationFrame ? view.requestAnimationFrame(callback) : view?.setTimeout(callback, 16) ?? 0);
|
|
109
|
+
const write = (offset, size, sign) => {
|
|
110
|
+
dialog.style.setProperty("--ds-dialog-drag", `${sign * offset}px`);
|
|
111
|
+
dialog.style.setProperty("--ds-dialog-progress", String(size > 0 ? Math.min(1, Math.max(0, offset / size)) : 0));
|
|
112
|
+
};
|
|
113
|
+
const clear = () => {
|
|
114
|
+
dialog.style.removeProperty("--ds-dialog-drag");
|
|
115
|
+
dialog.style.removeProperty("--ds-dialog-progress");
|
|
116
|
+
dialog.removeAttribute("data-ds-dialog-dragging");
|
|
117
|
+
};
|
|
118
|
+
/** Home: the stylesheet's transition takes it back from where it is. */
|
|
119
|
+
const settle = () => {
|
|
120
|
+
dialog.removeAttribute("data-ds-dialog-dragging");
|
|
121
|
+
dialog.style.setProperty("--ds-dialog-drag", "0px");
|
|
122
|
+
dialog.style.setProperty("--ds-dialog-progress", "0");
|
|
123
|
+
};
|
|
124
|
+
const dismiss = () => {
|
|
125
|
+
dialog.removeAttribute("data-ds-dialog-dragging");
|
|
126
|
+
if (options.onDismiss)
|
|
127
|
+
options.onDismiss(dialog);
|
|
128
|
+
else {
|
|
129
|
+
const request = new CustomEvent("ds-close-request", { detail: { reason: "swipe" }, bubbles: true, composed: true, cancelable: true });
|
|
130
|
+
if (dialog.dispatchEvent(request))
|
|
131
|
+
dialog.close();
|
|
132
|
+
}
|
|
133
|
+
// A product may close it a moment later (a framework's state); declined, it goes home.
|
|
134
|
+
const token = ++settleTimer;
|
|
135
|
+
frame(() => frame(() => { if (token === settleTimer && dialog.open)
|
|
136
|
+
settle(); }));
|
|
137
|
+
};
|
|
138
|
+
const onStart = (event) => {
|
|
139
|
+
const placement = placementNow();
|
|
140
|
+
if (!dialog.open || placement === "center")
|
|
141
|
+
return;
|
|
142
|
+
if (event.touches.length !== 1) {
|
|
143
|
+
if (gesture?.mode === "drag")
|
|
144
|
+
settle();
|
|
145
|
+
gesture = null;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const path = event.composedPath();
|
|
149
|
+
if (path.some(node => node instanceof Element && node.matches('[data-ds-dialog-no-swipe], input[type="range"], [role="slider"]')))
|
|
150
|
+
return;
|
|
151
|
+
const touch = event.touches[0];
|
|
152
|
+
const { axis, sign } = direction(dialog, placement);
|
|
153
|
+
gesture = { id: touch.identifier, x: touch.clientX, y: touch.clientY, base: Math.max(0, presented(dialog, axis, sign)), start: 0, mode: "pending", offset: 0, samples: [], target: event.target, path };
|
|
154
|
+
};
|
|
155
|
+
const onMove = (event) => {
|
|
156
|
+
if (!gesture || gesture.mode === "ignore")
|
|
157
|
+
return;
|
|
158
|
+
const touch = [...event.touches].find(each => each.identifier === gesture.id);
|
|
159
|
+
if (!touch)
|
|
160
|
+
return;
|
|
161
|
+
const placement = placementNow();
|
|
162
|
+
if (placement === "center") {
|
|
163
|
+
gesture = null;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const { axis, sign } = direction(dialog, placement);
|
|
167
|
+
const dx = touch.clientX - gesture.x, dy = touch.clientY - gesture.y;
|
|
168
|
+
const along = axis === "y" ? dy * sign : dx * sign;
|
|
169
|
+
const across = axis === "y" ? dx : dy;
|
|
170
|
+
if (gesture.mode === "pending") {
|
|
171
|
+
if (Math.hypot(dx, dy) < SLOP)
|
|
172
|
+
return;
|
|
173
|
+
if (Math.abs(along) <= Math.abs(across) || contentScrolls(gesture.path, dialog, axis, along)) {
|
|
174
|
+
gesture.mode = "ignore";
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
gesture.mode = "drag";
|
|
178
|
+
gesture.start = along;
|
|
179
|
+
settleTimer++;
|
|
180
|
+
dialog.setAttribute("data-ds-dialog-dragging", "");
|
|
181
|
+
}
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
const rect = dialog.getBoundingClientRect();
|
|
184
|
+
const size = axis === "y" ? rect.height : rect.width;
|
|
185
|
+
const raw = gesture.base + along - gesture.start;
|
|
186
|
+
gesture.offset = raw < 0 ? rubberband(raw, size || 1) : raw;
|
|
187
|
+
write(gesture.offset, size, sign);
|
|
188
|
+
const time = event.timeStamp || (view?.performance?.now() ?? Date.now());
|
|
189
|
+
gesture.samples.push({ time, offset: gesture.offset });
|
|
190
|
+
while (gesture.samples.length > 2 && time - gesture.samples[0].time > 150)
|
|
191
|
+
gesture.samples.shift();
|
|
192
|
+
};
|
|
193
|
+
const onEnd = (event) => {
|
|
194
|
+
if (!gesture)
|
|
195
|
+
return;
|
|
196
|
+
if ([...event.touches].some(each => each.identifier === gesture.id))
|
|
197
|
+
return;
|
|
198
|
+
const ended = gesture;
|
|
199
|
+
gesture = null;
|
|
200
|
+
if (ended.mode !== "drag")
|
|
201
|
+
return;
|
|
202
|
+
const placement = placementNow();
|
|
203
|
+
const { axis } = direction(dialog, placement === "center" ? "sheet" : placement);
|
|
204
|
+
const rect = dialog.getBoundingClientRect();
|
|
205
|
+
const size = axis === "y" ? rect.height : rect.width;
|
|
206
|
+
// The speed of the last tenth of a second: a finger held still before letting go throws nothing.
|
|
207
|
+
const now = event.timeStamp || (view?.performance?.now() ?? Date.now());
|
|
208
|
+
const recent = ended.samples.filter(sample => now - sample.time <= 100);
|
|
209
|
+
const first = recent[0], last = recent[recent.length - 1];
|
|
210
|
+
const elapsed = first && last ? last.time - first.time : 0;
|
|
211
|
+
const velocity = first && last && elapsed > 0 ? ((last.offset - first.offset) / elapsed) * 1000 : 0;
|
|
212
|
+
const resting = ended.offset + project(velocity);
|
|
213
|
+
if (event.type !== "touchcancel" && placement !== "center" && ended.offset > 0 && resting > size / 2 && velocity > -100)
|
|
214
|
+
dismiss();
|
|
215
|
+
else
|
|
216
|
+
settle();
|
|
217
|
+
};
|
|
218
|
+
// Open again: it starts from its edge, with nothing left of the last drag.
|
|
219
|
+
const observer = new MutationObserver(() => { if (dialog.open) {
|
|
220
|
+
settleTimer++;
|
|
221
|
+
gesture = null;
|
|
222
|
+
clear();
|
|
223
|
+
} });
|
|
224
|
+
observer.observe(dialog, { attributes: true, attributeFilter: ["open"] });
|
|
225
|
+
dialog.addEventListener("touchstart", onStart, { passive: true });
|
|
226
|
+
dialog.addEventListener("touchmove", onMove, { passive: false });
|
|
227
|
+
dialog.addEventListener("touchend", onEnd, { passive: true });
|
|
228
|
+
dialog.addEventListener("touchcancel", onEnd, { passive: true });
|
|
229
|
+
return () => {
|
|
230
|
+
observer.disconnect();
|
|
231
|
+
dialog.removeEventListener("touchstart", onStart);
|
|
232
|
+
dialog.removeEventListener("touchmove", onMove);
|
|
233
|
+
dialog.removeEventListener("touchend", onEnd);
|
|
234
|
+
dialog.removeEventListener("touchcancel", onEnd);
|
|
235
|
+
settleTimer++;
|
|
236
|
+
gesture = null;
|
|
237
|
+
clear();
|
|
238
|
+
};
|
|
239
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface AlertOptions {
|
|
2
|
+
title: string;
|
|
3
|
+
text?: string;
|
|
4
|
+
/** The button's words; the shared word "OK" by default. */
|
|
5
|
+
confirm?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ConfirmOptions {
|
|
8
|
+
title: string;
|
|
9
|
+
text?: string;
|
|
10
|
+
/** The confirming button's words; the shared word "OK" by default. Name the action when it has one ("Delete"). */
|
|
11
|
+
confirm?: string;
|
|
12
|
+
/** The cancelling button's words; the shared word "Cancel" by default. */
|
|
13
|
+
cancel?: string;
|
|
14
|
+
/** A destructive action: the confirming button in the danger colour, Cancel focused, and no backdrop dismissal. */
|
|
15
|
+
danger?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface PromptOptions {
|
|
18
|
+
title: string;
|
|
19
|
+
text?: string;
|
|
20
|
+
/** The field's label, shown above it; without one, the title names the field. */
|
|
21
|
+
label?: string;
|
|
22
|
+
value?: string;
|
|
23
|
+
placeholder?: string;
|
|
24
|
+
confirm?: string;
|
|
25
|
+
cancel?: string;
|
|
26
|
+
}
|
|
27
|
+
/** In place of `alert()`: a message with one button. Resolves when it is dismissed. */
|
|
28
|
+
export declare function alert(options: AlertOptions | string): Promise<void>;
|
|
29
|
+
/** In place of `confirm()`: resolves to `true` when confirmed, `false` otherwise. */
|
|
30
|
+
export declare function confirm(options: ConfirmOptions | string): Promise<boolean>;
|
|
31
|
+
/** In place of `prompt()`: resolves to the text written, or `null` when cancelled. */
|
|
32
|
+
export declare function prompt(options: PromptOptions | string): Promise<string | null>;
|
|
33
|
+
//# sourceMappingURL=dialogs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../DS1/0-face/dialogs.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kHAAkH;IAClH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mHAAmH;IACnH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsID,uFAAuF;AACvF,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;AAED,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI1E;AAED,sFAAsF;AACtF,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ9E"}
|