@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 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","names":[],"sources":["../DS1/0-face/feedback-words.ts","../DS1/0-face/generated/toast-assets.ts","../DS1/0-face/toast-queue.ts","../DS1/0-face/toaster.ts","../DS1/0-face/dialogs.ts","../DS1/0-face/load-toaster.ts","../DS1/0-face/copy-text.ts","../DS1/0-face/feedback.ts"],"sourcesContent":["/**\n * The words the feedback module shows by default (OK, Cancel, Close, Copied,\n * Could not copy, Notifications), without importing the language runtime.\n *\n * - Where the page loads the language module (`./i18n.ts`, Sync 1's\n * `languages` export), it registers its `translate()` here when it loads,\n * and the words are the shared words in the page's language once\n * `configureI18n({ sharedWords: true })` turns them on.\n * - Where it does not, they read English, and no language module, no\n * translation file and no request comes with them.\n * - `setFeedbackWords()` gives the module words of the product's own: a table\n * of the words it changes, or a function that translates each key.\n */\n\nexport type FeedbackWord = \"OK\" | \"Cancel\" | \"Close\" | \"Copied\" | \"Could not copy\" | \"Notifications\";\n/** A table of the words to change, or a function that gives each word in the page's language. */\nexport type FeedbackWords = Partial<Record<FeedbackWord, string>> | ((word: FeedbackWord) => string);\n\n/** Where the language module leaves its `translate()`; on `globalThis`, so every copy of either module finds it. */\nconst TRANSLATOR = Symbol.for(\"design-system-1.translate\");\n\nlet words: FeedbackWords | null = null;\n\n/** Give the feedback module's default words, or `null` to go back to the language module's (or English). */\nexport function setFeedbackWords(next: FeedbackWords | null): void {\n words = next;\n}\n\n/** A default word in the page's language. */\nexport function feedbackWord(word: FeedbackWord): string {\n if (typeof words === \"function\") return words(word);\n const own = words?.[word];\n if (own !== undefined) return own;\n const translate = (globalThis as unknown as Record<symbol, unknown>)[TRANSLATOR];\n return typeof translate === \"function\" ? String(translate(word)) : word;\n}\n","/**\n * Generated by scripts/toast-assets.mjs from 2-core/styles/ds-toast.css (with the\n * sheets it imports) and the x-icon files it names. Never edit it: change those\n * files and run `vp run generate:toast-assets`.\n */\n\n/** The toast's stylesheet, the same one `<ds-toast>` imports. */\nexport const toastStyles: string = \"[data-ds-shape=\\\"square\\\"], :host([data-ds-shape=\\\"square\\\"]){--ds-corner-size: 0px;--ds-corner-shape: round;--ds-button-inset: 0.5px}[data-ds-shape=\\\"rounded\\\"], :host([data-ds-shape=\\\"rounded\\\"]){--ds-corner-size: 4px;--ds-corner-shape: round;--ds-button-inset: 2.5px}[data-ds-shape=\\\"circular\\\"], :host([data-ds-shape=\\\"circular\\\"]){--ds-corner-size: 999px;--ds-corner-shape: round;--ds-button-inset: 5px}@supports (corner-shape: squircle){[data-ds-shape=\\\"rounded\\\"], :host([data-ds-shape=\\\"rounded\\\"]){--ds-corner-size: 8px;--ds-corner-shape: squircle}}:root, :host, :where([data-ds-surface]){--ds-unit: calc(var(--ds-1, 20px) * var(--ds-sf, 1));--ds-control-height: calc(var(--ds-control-size, var(--ds-08, 16px)) * var(--ds-sf, 1));--ds-row-height: calc(var(--ds-row-size, var(--ds-1, 20px)) * var(--ds-sf, 1));--ds-type-size-default: calc(var(--ds-text-size, 14px) * var(--ds-sf, 1));--ds-type-size-small: calc(var(--ds-small-text-size, 10px) * var(--ds-sf, 1));--ds-type-size-heading: calc(var(--ds-heading-text-size, 13px) * var(--ds-sf, 1));--ds-type-size-display: calc(var(--ds-display-text-size, 20px) * var(--ds-sf, 1));--ds-type-lineheight-default: calc(var(--ds-text-leading, 16px) * var(--ds-sf, 1));--ds-type-letterspacing-default: calc(var(--ds-text-tracking, -0.3px) * var(--ds-sf, 1));--ds-radius: calc(var(--ds-corner-size, 4px) * var(--ds-sf, 1));--ds-radius-card: calc(var(--ds-card-corner-size, 4px) * var(--ds-sf, 1))}:host{--ds-toast-width: calc(16 * var(--ds-unit));--ds-toast-offset: var(--ds-unit);--ds-toast-gap: calc(var(--ds-unit) - var(--ds-control-height));--ds-toast-background: var(--ds-tooltip-background, light-dark(var(--ds-black, #2a2a2a), var(--ds-white, #ffffff)));--ds-toast-color: var(--ds-tooltip-color, light-dark(var(--ds-white, #ffffff), var(--ds-black, #2a2a2a)));display: contents}section{display: contents}ol{--lift: -1;position: fixed;z-index: 2147483000;box-sizing: border-box;width: min(var(--ds-toast-width), calc(100% - 2 * var(--ds-toast-offset)));height: calc(var(--height) + var(--gaps) * var(--ds-toast-gap));margin: 0;padding: 0;list-style: none;outline: none;pointer-events: none}ol[data-y=\\\"top\\\"]{--lift: 1;top: calc(var(--ds-toast-offset) + env(safe-area-inset-top, 0px))}ol[data-y=\\\"bottom\\\"]{bottom: calc(var(--ds-toast-offset) + env(safe-area-inset-bottom, 0px))}ol[data-x=\\\"left\\\"]{left: var(--ds-toast-offset)}ol[data-x=\\\"right\\\"]{right: var(--ds-toast-offset)}ol[data-x=\\\"center\\\"]{left: 50%;transform: translateX(-50%)}:host([contained]) ol{position: absolute;z-index: var(--ds-toast-z-index, 60)}:host([contained]) ol[data-y=\\\"top\\\"]{top: var(--ds-toast-offset)}:host([contained]) ol[data-y=\\\"bottom\\\"]{bottom: var(--ds-toast-offset)}.toast{--swipe: 0px;position: absolute;left: 0;right: 0;box-sizing: border-box;width: max-content;max-width: 100%;overflow: hidden;border-radius: var(--ds-radius);background: var(--ds-toast-background);color: var(--ds-toast-color);font-family: var(--ds-typeface-regular);font-feature-settings: var(--ds-font-features);font-size: var(--ds-type-size-default);line-height: var(--ds-control-height);letter-spacing: var(--ds-type-letterspacing-default);outline: none;touch-action: none;user-select: none;pointer-events: auto;opacity: 0;transition: transform 400ms ease, opacity 400ms ease}ol[data-y=\\\"bottom\\\"] .toast{bottom: 0}ol[data-y=\\\"top\\\"] .toast{top: 0}ol[data-x=\\\"center\\\"] .toast{margin-inline: auto}ol[data-x=\\\"left\\\"] .toast{margin-right: auto}ol[data-x=\\\"right\\\"] .toast{margin-left: auto}.toast:focus-visible{outline: 2px solid var(--ds-focus-ring);outline-offset: 1px}.toast[data-mounted=\\\"false\\\"]{transform: translateY(calc(var(--lift) * -100%))}.toast[data-mounted=\\\"true\\\"]{opacity: 1}ol[data-expanded=\\\"false\\\"] .toast[data-mounted=\\\"true\\\"]{transform: translateY(calc(var(--lift) * var(--index) * var(--ds-toast-gap) + var(--swipe))) scale(calc(1 - var(--index) * 0.05))}ol[data-expanded=\\\"false\\\"] .toast[data-front=\\\"false\\\"]{height: var(--front-height)}ol[data-expanded=\\\"false\\\"] .toast[data-front=\\\"false\\\"] .body{opacity: 0}ol[data-expanded=\\\"true\\\"] .toast[data-mounted=\\\"true\\\"]{transform: translateY(calc(var(--lift) * (var(--offset) + var(--index) * var(--ds-toast-gap)) + var(--swipe)))}.toast[data-visible=\\\"false\\\"]{opacity: 0;pointer-events: none}.toast[data-swiping=\\\"true\\\"]{transition: none}.toast[data-removed=\\\"true\\\"]{opacity: 0;pointer-events: none}.toast[data-removed=\\\"true\\\"][data-front=\\\"true\\\"]{transform: translateY(calc(var(--lift) * -100%))}.toast[data-swipe-out=\\\"true\\\"]{transform: translateY(calc(var(--swipe) + var(--lift) * -100%))}.body{display: flex;align-items: flex-start;gap: calc(4px * var(--ds-sf));box-sizing: border-box;min-height: var(--ds-control-height);padding-inline: calc(4px * var(--ds-sf));transition: opacity 400ms ease}.icon{display: inline-flex;flex: 0 0 auto;align-items: center;justify-content: center;width: var(--ds-control-height);height: var(--ds-control-height);--ds-icon-color: currentColor}.icon:first-child{margin-left: calc(-4px * var(--ds-sf))}.icon > svg, .close > svg{width: calc(14px * var(--ds-sf));height: calc(14px * var(--ds-sf))}.content{flex: 1 1 auto;min-width: 0}.title, .description{white-space: normal;overflow-wrap: anywhere}.description{opacity: 0.7}.button{flex: 0 0 auto;margin: 0 0 0 calc(4px * var(--ds-sf));padding: 0;border: 0;background: none;color: inherit;font: inherit;letter-spacing: inherit;text-decoration: underline;text-underline-offset: 2px;cursor: pointer}a.button{display: inline-block}.button.cancel{opacity: 0.7}.button:focus-visible, .close:focus-visible{outline: 1px solid currentColor;outline-offset: 1px;border-radius: 1px}.close{display: inline-flex;flex: 0 0 auto;align-items: center;justify-content: center;width: var(--ds-control-height);height: var(--ds-control-height);margin: 0 calc(-4px * var(--ds-sf)) 0 0;padding: 0;border: 0;background: none;color: inherit;cursor: pointer;--ds-icon-color: currentColor}.spinner{width: calc(10px * var(--ds-sf));height: calc(10px * var(--ds-sf));box-sizing: border-box;border: 1px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color: currentColor;border-radius: 50%;animation: ds-toast-spin 720ms linear infinite}@keyframes ds-toast-spin{to{transform: rotate(360deg)}}:host([rich-colors]) .toast[data-type=\\\"success\\\"]{--ds-toast-background: var(--ds-apple-green)}:host([rich-colors]) .toast[data-type=\\\"info\\\"]{--ds-toast-background: var(--ds-zenith-blue)}:host([rich-colors]) .toast[data-type=\\\"warning\\\"]{--ds-toast-background: var(--ds-orange)}:host([rich-colors]) .toast[data-type=\\\"error\\\"]{--ds-toast-background: var(--ds-tuned-red)}:host([rich-colors]) .toast:is([data-type=\\\"success\\\"], [data-type=\\\"info\\\"], [data-type=\\\"warning\\\"], [data-type=\\\"error\\\"]){--ds-toast-color: var(--ds-black)}@media (prefers-reduced-motion: reduce){.toast, .body{transition: none}.spinner{animation: none}}\";\n\nexport type ToastIconName = \"check\" | \"close\" | \"notifications\" | \"warning\";\n\n/** The icons the page toaster draws: the toast types' own and the close button's. */\nexport const toastIcons: Readonly<Record<ToastIconName, string>> = {\n \"check\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M6.68649 11.884L12.443 6.13601L11.736 5.42715L6.68835 10.4827L4.26399 8.0501L3.55696 8.74525L6.68649 11.884Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\\n\",\n \"close\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M12.1215 4.58087L8.70453 7.99397L12.1176 11.4169L11.4106 12.112L7.99847 8.69108L4.58636 12.112L3.87836 11.4031L7.29535 7.99005L3.88226 4.56716L4.58929 3.87201L8.0014 7.29294L11.4145 3.87201L12.1215 4.58087Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\\n\",\n \"notifications\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M4.5 11.5V7.5C4.5 5.567 6.067 4 8 4C9.933 4 11.5 5.567 11.5 7.5V11.5M3 11.5H13M8 2.5V4M6.5 13.5H9.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\\n\",\n \"warning\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M8 1.8L15.2 14.3H0.8L8 1.8ZM8 3.8L2.53 13.3H13.47L8 3.8ZM7.5 6.3H8.5V10.3H7.5V6.3ZM7.5 11.3H8.5V12.3H7.5V11.3Z\\\" fill=\\\"#1E1E1E\\\"/>\\n</svg>\\n\",\n};\n","/**\n * The toasts' queue: Sonner's `toast()` calls and the observer that carries\n * them to whatever draws the stack, with no framework.\n *\n * BASED ON SONNER, the React toast library by Emil Kowalski\n * (https://sonner.emilkowal.ski, https://github.com/emilkowalski/sonner, MIT\n * licence). The calls, their options and their ids are Sonner's, so Sonner's\n * documentation describes them.\n *\n * Two toasters draw what it sends, in the same look: `<ds-toast>`\n * (`2-core/ds-toast.ts`, Lit) and the page toaster (`0-face/toaster.ts`, no\n * framework). A page shows one stack whichever it loads: a `<ds-toast>` in the\n * page takes every toast, the page toaster draws only when there is none, and\n * `toast()` with no toaster listening adds a `<ds-toast>` when the element is\n * registered and the page toaster otherwise.\n *\n * The queue lives on `globalThis`, so two copies of this module (a product\n * that vendors Design system 1 in two folders) still feed one stack.\n *\n * Where it departs from Sonner: an error is announced assertively unless it\n * says `important: false`.\n */\n\nexport type ToastId = string | number;\nexport type ToastType = \"default\" | \"success\" | \"info\" | \"warning\" | \"error\" | \"loading\";\nexport type ToastPosition = \"top-left\" | \"top-center\" | \"top-right\" | \"bottom-left\" | \"bottom-center\" | \"bottom-right\";\n/**\n * A button in a toast. Clicking it closes the toast unless `onClick` calls\n * `preventDefault()`, as in Sonner. With `href` it is a link instead (not in\n * Sonner), which still closes the toast as the page follows it.\n */\nexport interface ToastButton { label: string; onClick?: (event: MouseEvent) => void; href?: string }\nexport interface ToastOptions {\n /** Reuse an id to update a toast in place, as Sonner does. */\n id?: ToastId;\n description?: string;\n /** Milliseconds; `Infinity` keeps the toast until it is dismissed. */\n duration?: number;\n /** A Design system 1 icon name, replacing the type's icon. */\n icon?: string;\n action?: ToastButton;\n cancel?: ToastButton;\n /** False keeps the toast from being swiped or closed by a person. */\n dismissible?: boolean;\n closeButton?: boolean;\n /** Announced assertively instead of politely. Errors are, unless this is false. */\n important?: boolean;\n onDismiss?: (toast: ToastData) => void;\n onAutoClose?: (toast: ToastData) => void;\n}\nexport interface ToastData extends ToastOptions { id: ToastId; title: string; type: ToastType }\ntype Message<T> = string | ((value: T) => string);\nexport interface ToastPromiseMessages<T> extends ToastOptions {\n loading: string;\n success: Message<T>;\n error: Message<unknown>;\n finally?: () => void;\n}\n\n/** What a toaster hears: a toast to show or update, or a dismissal (every toast when the id is undefined). */\nexport type ToastSignal = { toast: ToastData } | { dismiss: ToastId | undefined };\ntype Listener = (signal: ToastSignal) => void;\n\n/** Sonner's constants, shared by both toasters; its gap and offset are rounded to squares in the stylesheet. */\nexport const TOAST_DURATION = Infinity;\nexport const VISIBLE_TOASTS = 3;\nexport const TIME_BEFORE_UNMOUNT = 200;\nexport const SWIPE_THRESHOLD = 45;\nexport const SWIPE_VELOCITY = 0.11;\n/** The Design system 1 icon each type shows. */\nexport const TOAST_ICONS: Partial<Record<ToastType, string>> = { success: \"check\", info: \"notifications\", warning: \"warning\", error: \"warning\" };\n\ninterface Queue {\n /** `<ds-toast>` elements: when one listens, it takes every toast. */\n toasters: Set<Listener>;\n /** The page toaster, which draws only while no `<ds-toast>` listens. */\n fallbacks: Set<Listener>;\n lastId: number;\n mountFallback?: () => void;\n}\n\nconst QUEUE = Symbol.for(\"design-system-1.toasts\");\n\nfunction queue(): Queue {\n const scope = globalThis as unknown as Record<symbol, Queue | undefined>;\n return (scope[QUEUE] ??= { toasters: new Set(), fallbacks: new Set(), lastId: 0 });\n}\n\n/**\n * Listen for toasts. A `<ds-toast>` listens as a toaster; the page toaster\n * listens as the fallback, hearing new toasts only while no toaster listens.\n * Returns the function that stops listening.\n */\nexport function listenForToasts(listener: Listener, { fallback = false }: { fallback?: boolean } = {}): () => void {\n const listeners = fallback ? queue().fallbacks : queue().toasters;\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n}\n\n/**\n * Whether a toast shown now is drawn: a toaster listens, the page toaster is\n * loaded, or `<ds-toast>` is registered (and so is added to the page).\n */\nexport function toasterListening(): boolean {\n const state = queue();\n return state.toasters.size > 0 || state.fallbacks.size > 0 || !!state.mountFallback || (typeof customElements !== \"undefined\" && !!customElements.get(\"ds-toast\"));\n}\n\n/** How the page toaster mounts itself when a toast arrives and nothing draws it. */\nexport function setFallbackToaster(mount: () => void): void {\n queue().mountFallback = mount;\n}\n\nfunction show(title: string, type: ToastType, options: ToastOptions = {}): ToastId {\n const state = queue();\n const id = options.id ?? ++state.lastId;\n if (!state.toasters.size && typeof document !== \"undefined\" && document.body) {\n if (typeof customElements !== \"undefined\" && customElements.get(\"ds-toast\")) document.body.appendChild(document.createElement(\"ds-toast\"));\n else if (!state.fallbacks.size) state.mountFallback?.();\n }\n const important = options.important ?? (type === \"error\" ? true : undefined);\n const data: ToastData = { ...options, ...(important === undefined ? {} : { important }), id, title, type };\n // A copy: a listener may add or remove listeners while it hears the toast.\n for (const listener of Array.from(state.toasters.size ? state.toasters : state.fallbacks)) listener({ toast: data });\n return id;\n}\n\n/** Show a toast, as Sonner's `toast()`. Returns its id. */\nexport const toast = Object.assign(\n (title: string, options?: ToastOptions): ToastId => show(title, \"default\", options),\n {\n message: (title: string, options?: ToastOptions): ToastId => show(title, \"default\", options),\n success: (title: string, options?: ToastOptions): ToastId => show(title, \"success\", options),\n info: (title: string, options?: ToastOptions): ToastId => show(title, \"info\", options),\n warning: (title: string, options?: ToastOptions): ToastId => show(title, \"warning\", options),\n error: (title: string, options?: ToastOptions): ToastId => show(title, \"error\", options),\n loading: (title: string, options?: ToastOptions): ToastId => show(title, \"loading\", options),\n /** A loading toast that becomes a success or an error when the promise settles. */\n promise<T>(promise: Promise<T> | (() => Promise<T>), messages: ToastPromiseMessages<T>): ToastId {\n const { loading, success, error, finally: done, ...options } = messages;\n const id = show(loading, \"loading\", options);\n Promise.resolve(typeof promise === \"function\" ? promise() : promise)\n .then(\n value => { show(typeof success === \"function\" ? success(value) : success, \"success\", { ...options, id }); },\n reason => { show(typeof error === \"function\" ? error(reason) : error, \"error\", { ...options, id }); },\n )\n .finally(() => done?.());\n return id;\n },\n /** Dismiss one toast, or every toast without an id. */\n dismiss(id?: ToastId): ToastId | undefined {\n const state = queue();\n for (const listener of [...state.toasters, ...state.fallbacks]) listener({ dismiss: id });\n return id;\n },\n },\n);\n","/**\n * The page toaster: Sonner's toast stack on a page without Lit or any other\n * framework. Import it (or `0-face/feedback.ts`) and call `toast()`; nothing\n * else goes in the page.\n *\n * BASED ON SONNER, the React toast library by Emil Kowalski\n * (https://sonner.emilkowal.ski, https://github.com/emilkowalski/sonner, MIT\n * licence), as `<ds-toast>` is: the same calls, options, stacking, timers,\n * hover and focus pauses, swipe, Alt+T and 400ms slide and fade.\n *\n * It shares the look rather than wrapping the element: it draws the element's\n * markup in a shadow root of its own with the element's stylesheet\n * (`2-core/styles/ds-toast.css`, as plain text in `./generated/toast-assets.ts`,\n * which `scripts/toast-assets.mjs` writes from it), so the two cannot drift\n * apart, and it needs no Lit, which a page without Lit does not have. It is\n * plain TypeScript: no `?inline` or `?raw` import, so any bundler and type\n * check reads it. It shares the queue too\n * (`0-face/toast-queue.ts`): where a `<ds-toast>` is in the page, that element\n * takes every toast and this one stays quiet, so a page never shows two stacks.\n *\n * Its region is in the page before the first toast arrives, a polite live\n * region in which each toast is announced, and an error assertively. Only\n * `transform` and `opacity` animate, and nothing moves with reduced motion.\n */\nimport { feedbackWord } from \"./feedback-words\";\nimport { toastIcons, toastStyles } from \"./generated/toast-assets\";\nimport {\n SWIPE_THRESHOLD,\n SWIPE_VELOCITY,\n TIME_BEFORE_UNMOUNT,\n TOAST_DURATION,\n TOAST_ICONS,\n VISIBLE_TOASTS,\n listenForToasts,\n setFallbackToaster,\n} from \"./toast-queue\";\nimport type { ToastButton, ToastData, ToastId, ToastPosition, ToastSignal } from \"./toast-queue\";\n\nexport { toast } from \"./toast-queue\";\nexport type { ToastButton, ToastData, ToastId, ToastOptions, ToastPosition, ToastPromiseMessages, ToastType } from \"./toast-queue\";\n\n/** Sonner's `<Toaster />` props, for the page toaster. */\nexport interface ToasterOptions {\n /** `top-left`, `top-center`, `top-right`, `bottom-left`, `bottom-center` or `bottom-right` (the default). */\n position?: ToastPosition;\n /** Keep the toasts spread out instead of stacked. */\n expand?: boolean;\n /** How many show at once; three by default. */\n visibleToasts?: number;\n /** Milliseconds each toast stays; Infinity by default, until dismissed. */\n duration?: number;\n /** A close button on every toast. */\n closeButton?: boolean;\n /** Fill success, info, warning and error toasts with their colour. */\n richColors?: boolean;\n /** The region's accessible name; the shared word \"Notifications\" by default. */\n label?: string;\n /** The close button's accessible name; the shared word \"Close\" by default. */\n closeLabel?: string;\n}\n\n/** The icons the page carries: the types' own and the close button's, in the text's colour. */\nconst INK = /(fill|stroke)=(\"|')(#1E1E1E|#2A2A2A|#000000|#000|black)\\2/gi;\nconst SVGS: Record<string, string> = Object.fromEntries(\n Object.entries(toastIcons)\n .map(([name, svg]) => [name, svg.replace(INK, '$1=\"currentColor\"')]),\n);\n\ninterface Item { data: ToastData; mounted: boolean; removed: boolean; swipeOut: boolean; index: number; offset: number; element?: HTMLLIElement; drawn?: string }\ninterface Timer { remaining: number; started: number; handle?: ReturnType<typeof setTimeout> }\n\nlet settings: ToasterOptions = {};\nlet current: PageToaster | undefined;\n\n/** Set the page toaster's options, as Sonner's `<Toaster />` props. Toasts already shown take them at once. */\nexport function configureToaster(options: ToasterOptions): void {\n settings = { ...settings, ...options };\n current?.render();\n}\n\nconst frame = (callback: () => void) => typeof requestAnimationFrame === \"function\" ? requestAnimationFrame(callback) : setTimeout(callback, 16);\n\nfunction element<K extends keyof HTMLElementTagNameMap>(name: K, attributes: Record<string, string> = {}, text?: string): HTMLElementTagNameMap[K] {\n const node = document.createElement(name);\n for (const [key, value] of Object.entries(attributes)) node.setAttribute(key, value);\n if (text !== undefined) node.textContent = text;\n return node;\n}\n\nfunction icon(name: string, className: string): HTMLSpanElement | undefined {\n const svg = SVGS[name];\n if (!svg) return undefined;\n const span = element(\"span\", { class: className, \"aria-hidden\": \"true\" });\n span.innerHTML = svg;\n return span;\n}\n\nclass PageToaster {\n readonly host = element(\"div\", { \"data-ds-toaster\": \"\" });\n private readonly section = element(\"section\", { \"aria-live\": \"polite\", \"aria-relevant\": \"additions text\", \"aria-atomic\": \"false\" });\n private readonly list = element(\"ol\", { tabindex: \"-1\" });\n private items: Item[] = [];\n private heights = new Map<ToastId, number>();\n private timers = new Map<ToastId, Timer>();\n private hovered = false;\n private focused = false;\n private interacting = false;\n private mounting = false;\n private swipe?: { id: ToastId; start: number; time: number; amount: number };\n private resizes = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(() => this.measure());\n\n constructor() {\n const root = this.host.attachShadow({ mode: \"open\" });\n root.appendChild(element(\"style\", {}, toastStyles));\n root.appendChild(this.section);\n this.section.appendChild(this.list);\n this.list.addEventListener(\"pointerenter\", () => { this.hovered = true; this.render(); });\n this.list.addEventListener(\"pointerleave\", () => { if (!this.interacting) { this.hovered = false; this.render(); } });\n this.list.addEventListener(\"focusin\", () => { this.focused = true; this.render(); });\n this.list.addEventListener(\"focusout\", event => {\n if (!(event.relatedTarget instanceof Node && root.contains(event.relatedTarget))) { this.focused = false; this.render(); }\n });\n document.addEventListener(\"keydown\", this.hotkey);\n document.addEventListener(\"visibilitychange\", this.syncTimers);\n window.addEventListener(\"language-changed\", () => this.render());\n listenForToasts(this.receive, { fallback: true });\n this.attach();\n this.render();\n }\n\n /** Back in the page if something took it out, at the end of the body. */\n attach() {\n if (!this.host.isConnected && document.body) document.body.appendChild(this.host);\n }\n\n private get live(): Item[] { return this.items.filter(item => !item.removed); }\n private get position(): ToastPosition { return settings.position ?? \"bottom-right\"; }\n private get expanded(): boolean { return !!settings.expand || ((this.hovered || this.focused) && this.live.length > 0); }\n private get paused(): boolean { return this.hovered || this.focused || this.interacting || document.hidden; }\n\n private receive = (signal: ToastSignal) => {\n if (\"dismiss\" in signal) {\n for (const item of this.live) if (signal.dismiss === undefined || item.data.id === signal.dismiss) this.removeToast(item.data.id);\n return;\n }\n this.attach();\n const data = signal.toast;\n const existing = this.live.find(item => item.data.id === data.id);\n if (existing) {\n // An update keeps what it does not change and starts its time again, as in Sonner.\n existing.data = { ...existing.data, ...data };\n this.clearTimer(data.id);\n } else {\n this.items = [{ data, mounted: false, removed: false, swipeOut: false, index: 0, offset: 0 }, ...this.items.filter(item => item.data.id !== data.id)];\n }\n this.render();\n };\n\n private removeToast(id: ToastId, how: \"dismiss\" | \"auto\" | \"swipe\" = \"dismiss\") {\n const item = this.live.find(entry => entry.data.id === id);\n if (!item) return;\n this.clearTimer(id);\n this.heights.delete(id);\n (how === \"auto\" ? item.data.onAutoClose : item.data.onDismiss)?.(item.data);\n item.removed = true;\n item.swipeOut = how === \"swipe\";\n this.render();\n setTimeout(() => {\n this.items = this.items.filter(entry => entry !== item);\n this.render();\n }, TIME_BEFORE_UNMOUNT);\n }\n\n private clearTimer(id: ToastId) {\n clearTimeout(this.timers.get(id)?.handle);\n this.timers.delete(id);\n }\n\n /** Sonner's timers: each toast keeps its remaining time while the stack is paused. */\n private syncTimers = () => {\n const now = Date.now();\n for (const item of this.live) {\n const { id, type } = item.data;\n const duration = item.data.duration ?? settings.duration ?? TOAST_DURATION;\n if (type === \"loading\" || duration === Infinity) { this.clearTimer(id); continue; }\n let timer = this.timers.get(id);\n if (!timer) { timer = { remaining: duration, started: now }; this.timers.set(id, timer); }\n if (this.paused && timer.handle !== undefined) {\n clearTimeout(timer.handle);\n timer.handle = undefined;\n timer.remaining -= now - timer.started;\n } else if (!this.paused && timer.handle === undefined) {\n timer.started = now;\n timer.handle = setTimeout(() => this.removeToast(id, \"auto\"), Math.max(0, timer.remaining));\n }\n }\n };\n\n private hotkey = (event: KeyboardEvent) => {\n if (event.altKey && event.code === \"KeyT\" && this.live.length) {\n this.focused = true;\n this.list.focus();\n this.render();\n } else if (event.key === \"Escape\" && this.focused) {\n this.focused = false;\n this.render();\n }\n };\n\n private measure() {\n let changed = false;\n for (const item of this.live) {\n const toast = item.element;\n const body = toast?.querySelector<HTMLElement>(\".body\");\n if (!toast || !body) continue;\n const height = body.offsetHeight + toast.offsetHeight - toast.clientHeight;\n if (this.heights.get(item.data.id) !== height) { this.heights.set(item.data.id, height); changed = true; }\n }\n if (changed) this.layout();\n }\n\n private press(event: MouseEvent, id: ToastId, button: ToastButton) {\n button.onClick?.(event);\n if (button.href || !event.defaultPrevented) this.removeToast(id);\n }\n\n private button(id: ToastId, button: ToastButton, kind: \"cancel\" | \"action\"): HTMLElement {\n const node: HTMLElement = button.href ? element(\"a\", { class: `button ${kind}`, href: button.href }, button.label) : element(\"button\", { class: `button ${kind}`, type: \"button\" }, button.label);\n node.addEventListener(\"click\", event => this.press(event, id, button));\n return node;\n }\n\n /** The toast's words and buttons, drawn again only when they change. */\n private draw(item: Item) {\n const { data } = item;\n const dismissible = data.dismissible !== false;\n const closeButton = (data.closeButton ?? settings.closeButton ?? true) && dismissible;\n const closeLabel = settings.closeLabel ?? feedbackWord(\"Close\");\n const key = JSON.stringify([data.title, data.description, data.type, data.icon, data.action?.label, data.action?.href, data.cancel?.label, data.cancel?.href, closeButton, closeLabel]);\n const previous = item.element?.querySelector<HTMLElement>(\".body\");\n if (item.drawn === key && previous) return;\n item.drawn = key;\n if (previous) this.resizes?.unobserve(previous);\n const body = element(\"div\", { class: \"body\", \"data-id\": String(data.id) });\n const symbol = data.type === \"loading\" ? element(\"span\", { class: \"icon\", \"aria-hidden\": \"true\" }) : icon(data.icon ?? TOAST_ICONS[data.type] ?? \"\", \"icon\");\n if (data.type === \"loading\") symbol!.appendChild(element(\"span\", { class: \"spinner\" }));\n const content = element(\"div\", { class: \"content\" });\n content.appendChild(element(\"div\", { class: \"title\" }, data.title));\n if (data.description) content.appendChild(element(\"div\", { class: \"description\" }, data.description));\n if (symbol) body.appendChild(symbol);\n body.appendChild(content);\n if (data.cancel) body.appendChild(this.button(data.id, data.cancel, \"cancel\"));\n if (data.action) body.appendChild(this.button(data.id, data.action, \"action\"));\n if (closeButton) {\n const close = element(\"button\", { class: \"close\", type: \"button\", \"aria-label\": closeLabel });\n close.innerHTML = SVGS.close!;\n close.addEventListener(\"click\", () => this.removeToast(data.id));\n body.appendChild(close);\n }\n item.element!.replaceChildren(body);\n this.resizes?.observe(body);\n }\n\n private create(item: Item): HTMLLIElement {\n const toast = element(\"li\", { class: \"toast\", role: \"status\", tabindex: \"0\", \"aria-atomic\": \"true\" });\n const id = item.data.id;\n toast.addEventListener(\"pointerdown\", event => {\n const now = this.live.find(entry => entry.data.id === id);\n if (!now || now.data.dismissible === false || now.data.type === \"loading\") return;\n if ((event.composedPath()[0] as Element | undefined)?.closest?.(\"button, a\")) return;\n toast.setPointerCapture?.(event.pointerId);\n this.swipe = { id, start: event.clientY, time: Date.now(), amount: 0 };\n this.interacting = true;\n this.syncTimers();\n });\n toast.addEventListener(\"pointermove\", event => {\n if (!this.swipe || this.swipe.id !== id) return;\n const toward = this.position.startsWith(\"top\") ? -1 : 1;\n // Only towards the edge the toast came from.\n this.swipe.amount = Math.max(0, (event.clientY - this.swipe.start) * toward);\n toast.dataset.swiping = \"true\";\n toast.style.setProperty(\"--swipe\", `${this.swipe.amount * toward}px`);\n });\n const release = () => {\n const swipe = this.swipe;\n if (!swipe || swipe.id !== id) return;\n this.swipe = undefined;\n this.interacting = false;\n delete toast.dataset.swiping;\n const velocity = swipe.amount / Math.max(1, Date.now() - swipe.time);\n if (swipe.amount >= SWIPE_THRESHOLD || velocity > SWIPE_VELOCITY) this.removeToast(id, \"swipe\");\n else toast.style.setProperty(\"--swipe\", \"0px\");\n this.syncTimers();\n };\n toast.addEventListener(\"pointerup\", release);\n toast.addEventListener(\"pointercancel\", release);\n return toast;\n }\n\n /** Draw the stack: every toast's place, and each toast's words where they changed. */\n render() {\n if (!this.live.length) { this.hovered = false; this.focused = false; }\n this.section.setAttribute(\"aria-label\", `${settings.label ?? feedbackWord(\"Notifications\")} alt+T`);\n this.host.toggleAttribute(\"rich-colors\", !!settings.richColors);\n for (const item of this.items) {\n item.element ??= this.create(item);\n this.draw(item);\n }\n this.items.forEach((item, index) => {\n if (this.list.children[index] !== item.element) this.list.insertBefore(item.element!, this.list.children[index] ?? null);\n });\n // A copy: the live collection shrinks as children leave.\n for (const child of Array.from(this.list.children)) {\n if (this.items.some(item => item.element === child)) continue;\n const body = child.querySelector(\".body\");\n if (body) this.resizes?.unobserve(body);\n child.remove();\n }\n this.layout();\n this.measure();\n this.syncTimers();\n if (!this.mounting && this.items.some(item => !item.mounted)) {\n // Mount on the next frame so the toast slides in from its edge.\n this.mounting = true;\n frame(() => {\n this.mounting = false;\n for (const item of this.items) item.mounted = true;\n this.layout();\n });\n }\n }\n\n /** Each toast's index and offset, counting live toasts only; one leaving keeps where it was. */\n private layout() {\n let offset = 0;\n this.live.forEach((item, index) => {\n item.index = index;\n item.offset = offset;\n offset += this.heights.get(item.data.id) ?? 0;\n });\n const live = this.live;\n const frontHeight = live.length ? this.heights.get(live[0]!.data.id) ?? 0 : 0;\n const expanded = this.expanded;\n const [y, x] = this.position.split(\"-\") as [\"top\" | \"bottom\", \"left\" | \"center\" | \"right\"];\n Object.assign(this.list.dataset, { y, x, expanded: String(expanded) });\n this.list.style.setProperty(\"--height\", `${expanded ? offset : frontHeight}px`);\n this.list.style.setProperty(\"--gaps\", String(expanded ? Math.max(0, live.length - 1) : 0));\n const visible = settings.visibleToasts ?? VISIBLE_TOASTS;\n for (const item of this.items) {\n const toast = item.element!;\n toast.setAttribute(\"aria-live\", item.data.important ? \"assertive\" : \"polite\");\n Object.assign(toast.dataset, {\n type: item.data.type,\n front: String(item.index === 0),\n mounted: String(item.mounted),\n removed: String(item.removed),\n swipeOut: String(item.swipeOut),\n visible: String(item.index < visible),\n });\n toast.style.setProperty(\"--index\", String(item.index));\n toast.style.setProperty(\"--offset\", `${item.offset}px`);\n toast.style.setProperty(\"--front-height\", `${frontHeight}px`);\n toast.style.zIndex = String(this.items.length - item.index);\n }\n }\n}\n\n/** The page toaster, put in the page when it is first needed. */\nexport function pageToaster(): HTMLElement | undefined {\n if (typeof document === \"undefined\" || !document.body) return undefined;\n current ??= new PageToaster();\n current.attach();\n return current.host;\n}\n\nsetFallbackToaster(() => { pageToaster(); });\n\n// The region is in the page before the first toast, so the first is announced\n// too; not where a `<ds-toast>` already draws the toasts.\nif (typeof document !== \"undefined\") {\n const ready = () => { if (typeof customElements === \"undefined\" || !customElements.get(\"ds-toast\")) pageToaster(); };\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", ready, { once: true });\n else ready();\n}\n","/**\n * Dialogs that answer with a promise, in place of the browser's `alert()`,\n * `confirm()` and `prompt()`, for pages without Lit or any other framework.\n *\n * Each is drawn on the native `dialog.ds-dialog` frame from `1-root/controls.css`\n * (which the page loads) with its native buttons, `.ds-button--primary`,\n * `--secondary` and `--danger`, and opened with `showModal()`, so the browser\n * keeps the rest of the page inert behind it. Their words default to the\n * shared words (OK, Cancel) in the page's language where the page loads the\n * language module, and English otherwise (`./feedback-words.ts`).\n *\n * - Focus moves into the dialog when it opens, and back to what had it when it\n * closes.\n * - Escape cancels; Enter in a prompt's field confirms it.\n * - A click on the backdrop cancels, except on a destructive confirmation\n * (`danger`), which takes an answer.\n * - Two never open at once: a dialog asked for while another is open waits\n * for it to close.\n * - A dialog asked for in a click opens within that click, so a phone shows\n * its keyboard for a prompt's field.\n */\nimport { feedbackWord } from \"./feedback-words\";\n\nexport interface AlertOptions {\n title: string;\n text?: string;\n /** The button's words; the shared word \"OK\" by default. */\n confirm?: string;\n}\n\nexport interface ConfirmOptions {\n title: string;\n text?: string;\n /** The confirming button's words; the shared word \"OK\" by default. Name the action when it has one (\"Delete\"). */\n confirm?: string;\n /** The cancelling button's words; the shared word \"Cancel\" by default. */\n cancel?: string;\n /** A destructive action: the confirming button in the danger colour, Cancel focused, and no backdrop dismissal. */\n danger?: boolean;\n}\n\nexport interface PromptOptions {\n title: string;\n text?: string;\n /** The field's label, shown above it; without one, the title names the field. */\n label?: string;\n value?: string;\n placeholder?: string;\n confirm?: string;\n cancel?: string;\n}\n\ntype Kind = \"alert\" | \"confirm\" | \"prompt\";\ninterface Spec {\n kind: Kind;\n title: string;\n text?: string;\n confirm: string;\n cancel?: string;\n danger?: boolean;\n field?: { label?: string; value: string; placeholder?: string };\n}\n\n/* One dialog at a time; the next waits in line. */\nconst waiting: Array<() => void> = [];\nlet open = false;\nlet count = 0;\n\nfunction inLine<T>(show: () => Promise<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const start = () => {\n open = true;\n show().then(resolve, reject).finally(() => {\n open = false;\n waiting.shift()?.();\n });\n };\n if (open) waiting.push(start);\n else start();\n });\n}\n\n/** The element with focus, inside open shadow roots too. */\nfunction focused(): HTMLElement | null {\n let active = document.activeElement;\n while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n return active instanceof HTMLElement ? active : null;\n}\n\nfunction element<K extends keyof HTMLElementTagNameMap>(name: K, attributes: Record<string, string> = {}, text?: string): HTMLElementTagNameMap[K] {\n const node = document.createElement(name);\n for (const [key, value] of Object.entries(attributes)) node.setAttribute(key, value);\n if (text !== undefined) node.textContent = text;\n return node;\n}\n\n/** Answers `true` for the confirming button, `false` for Cancel, Escape and the backdrop; a prompt answers its text. */\nfunction show(spec: Spec): Promise<boolean | string | null> {\n return new Promise(resolve => {\n const id = `ds-feedback-${++count}`;\n const opener = focused();\n const dialog = element(\"dialog\", {\n class: \"ds-dialog\",\n role: spec.kind === \"prompt\" ? \"dialog\" : \"alertdialog\",\n \"aria-labelledby\": `${id}-title`,\n \"data-ds-feedback\": spec.kind,\n });\n const header = element(\"div\", { \"data-ds-dialog\": \"header\" });\n header.appendChild(element(\"h2\", { id: `${id}-title`, \"data-ds-dialog\": \"title\" }, spec.title));\n if (spec.text) {\n header.appendChild(element(\"p\", { id: `${id}-text`, \"data-ds-dialog\": \"description\" }, spec.text));\n dialog.setAttribute(\"aria-describedby\", `${id}-text`);\n }\n dialog.appendChild(header);\n\n let input: HTMLInputElement | undefined;\n if (spec.field) {\n const field = element(\"div\", { \"data-ds-dialog\": \"field\" });\n input = element(\"input\", { id: `${id}-field`, class: \"ds-input\", type: \"text\", autocomplete: \"off\" });\n input.value = spec.field.value;\n if (spec.field.placeholder) input.placeholder = spec.field.placeholder;\n if (spec.field.label) field.appendChild(element(\"label\", { for: input.id, \"data-ds-dialog\": \"label\" }, spec.field.label));\n else input.setAttribute(\"aria-labelledby\", `${id}-title`);\n field.appendChild(input);\n dialog.appendChild(field);\n }\n\n const footer = element(\"div\", { \"data-ds-dialog\": \"footer\" });\n const cancel = spec.cancel === undefined ? undefined : element(\"button\", { type: \"button\", class: \"ds-button ds-button--secondary\", value: \"cancel\" }, spec.cancel);\n const confirm = element(\"button\", { type: \"button\", class: spec.danger ? \"ds-button ds-button--secondary ds-button--danger\" : \"ds-button ds-button--primary\", value: \"confirm\" }, spec.confirm);\n if (cancel) footer.appendChild(cancel);\n footer.appendChild(confirm);\n dialog.appendChild(footer);\n\n const declined = spec.kind === \"prompt\" ? null : false;\n let settled = false;\n const finish = (confirmed: boolean) => {\n if (settled) return;\n settled = true;\n if (dialog.open) dialog.close();\n dialog.remove();\n if (opener?.isConnected) opener.focus({ preventScroll: true });\n resolve(spec.kind === \"alert\" ? true : confirmed ? (input ? input.value : true) : declined);\n };\n\n confirm.addEventListener(\"click\", () => finish(true));\n cancel?.addEventListener(\"click\", () => finish(false));\n input?.addEventListener(\"keydown\", event => {\n if (event.key !== \"Enter\" || event.isComposing || event.shiftKey || event.altKey || event.metaKey || event.ctrlKey) return;\n event.preventDefault();\n finish(true);\n });\n dialog.addEventListener(\"cancel\", event => { event.preventDefault(); finish(false); });\n // The browser can still close it (a second Escape): that is a cancel too.\n dialog.addEventListener(\"close\", () => finish(false));\n\n // The backdrop is the dialog itself, outside its box; a press must start and end there.\n const outside = (event: MouseEvent) => {\n if (event.target !== dialog) return false;\n const box = dialog.getBoundingClientRect();\n return event.clientX < box.left || event.clientX > box.right || event.clientY < box.top || event.clientY > box.bottom;\n };\n let pressedOutside = false;\n if (!spec.danger) {\n dialog.addEventListener(\"pointerdown\", event => { pressedOutside = event.button === 0 && outside(event); });\n dialog.addEventListener(\"click\", event => {\n if (pressedOutside && outside(event)) finish(false);\n pressedOutside = false;\n });\n }\n\n const first = input ?? (spec.danger ? cancel : undefined) ?? confirm;\n first.setAttribute(\"autofocus\", \"\");\n document.body.appendChild(dialog);\n try {\n dialog.showModal();\n } catch {\n dialog.setAttribute(\"open\", \"\");\n }\n first.focus();\n input?.select();\n });\n}\n\n/** In place of `alert()`: a message with one button. Resolves when it is dismissed. */\nexport function alert(options: AlertOptions | string): Promise<void> {\n const { title, text, confirm } = typeof options === \"string\" ? { title: options } as AlertOptions : options;\n if (typeof document === \"undefined\") return Promise.resolve();\n return inLine(() => show({ kind: \"alert\", title, text, confirm: confirm ?? feedbackWord(\"OK\") })).then(() => undefined);\n}\n\n/** In place of `confirm()`: resolves to `true` when confirmed, `false` otherwise. */\nexport function confirm(options: ConfirmOptions | string): Promise<boolean> {\n const { title, text, confirm: yes, cancel, danger } = typeof options === \"string\" ? { title: options } as ConfirmOptions : options;\n if (typeof document === \"undefined\") return Promise.resolve(false);\n return inLine(() => show({ kind: \"confirm\", title, text, confirm: yes ?? feedbackWord(\"OK\"), cancel: cancel ?? feedbackWord(\"Cancel\"), danger })).then(answer => answer === true);\n}\n\n/** In place of `prompt()`: resolves to the text written, or `null` when cancelled. */\nexport function prompt(options: PromptOptions | string): Promise<string | null> {\n const { title, text, label, value = \"\", placeholder, confirm: yes, cancel } = typeof options === \"string\" ? { title: options } as PromptOptions : options;\n if (typeof document === \"undefined\") return Promise.resolve(null);\n return inLine(() => show({\n kind: \"prompt\", title, text,\n confirm: yes ?? feedbackWord(\"OK\"), cancel: cancel ?? feedbackWord(\"Cancel\"),\n field: { label, value, placeholder },\n })).then(answer => typeof answer === \"string\" ? answer : null);\n}\n","/**\n * The page toaster as copyText loads it, when it shows a toast and nothing in\n * the page draws toasts yet. Its own module, so a bundler splits the toaster\n * off for a page that imports copyText alone (`./copy-text.ts`), and keeps it\n * where the page imports it anyway (`./feedback.ts`) without a warning.\n */\nexport { pageToaster } from \"./toaster\";\n","/**\n * Copy text to the clipboard and say so in a toast, for pages with or\n * without a framework.\n *\n * It writes with the Clipboard API, and where that is missing or refused (a\n * page served over plain HTTP, an older browser) it copies from a hidden field\n * instead. The toast is the shared word \"Copied\" in the page's language,\n * shown by `<ds-toast>` where the page has one and by the page toaster\n * otherwise; a failure says \"Could not copy\".\n *\n * It is small on its own: the page toaster (`./toaster.ts`) loads only when a\n * toast is shown and nothing in the page draws toasts yet, so a page that\n * copies with `toast: false`, or has `<ds-toast>`, never loads it. Import it\n * from here, not from `./feedback.ts`, where the page needs nothing else.\n */\nimport { feedbackWord } from \"./feedback-words\";\nimport { toast, toasterListening } from \"./toast-queue\";\n\nexport interface CopyTextOptions {\n /** The toast's words when it is copied; `false` shows no toast at all. \"Copied\" by default. */\n toast?: string | false;\n}\n\n/** The open modal dialog, if any: the rest of the page is inert, so the hidden field goes in it. */\nfunction modalDialog(): HTMLDialogElement | null {\n try {\n return document.querySelector<HTMLDialogElement>(\"dialog:modal\");\n } catch {\n return null;\n }\n}\n\n/** The fallback: select the text in a hidden field and copy the selection. */\nfunction copyFromField(text: string): boolean {\n if (typeof document === \"undefined\" || !document.body) return false;\n const active = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n const selection = document.getSelection();\n const ranges = selection ? Array.from({ length: selection.rangeCount }, (_, index) => selection.getRangeAt(index)) : [];\n const field = document.createElement(\"textarea\");\n field.value = text;\n field.setAttribute(\"readonly\", \"\");\n field.setAttribute(\"aria-hidden\", \"true\");\n field.tabIndex = -1;\n field.style.cssText = \"position:fixed;top:0;left:0;width:1px;height:1px;margin:0;padding:0;border:0;opacity:0;pointer-events:none\";\n (modalDialog() ?? document.body).appendChild(field);\n field.focus({ preventScroll: true });\n field.select();\n field.setSelectionRange(0, text.length);\n let copied = false;\n try {\n copied = document.execCommand(\"copy\");\n } catch {\n copied = false;\n }\n field.remove();\n active?.focus({ preventScroll: true });\n if (selection) {\n selection.removeAllRanges();\n for (const range of ranges) selection.addRange(range);\n }\n return copied;\n}\n\n/**\n * Copy `text` and confirm it with a toast. Resolves to whether it was copied.\n * Call it from the click or key press that asks for it: browsers allow writing\n * to the clipboard only then.\n */\nexport async function copyText(text: string, options: CopyTextOptions = {}): Promise<boolean> {\n let copied = false;\n const clipboard = typeof navigator === \"undefined\" ? undefined : navigator.clipboard;\n if (clipboard?.writeText) {\n try {\n await clipboard.writeText(text);\n copied = true;\n } catch {\n copied = false;\n }\n }\n if (!copied) copied = copyFromField(text);\n if (options.toast !== false) await say(copied, copied ? options.toast ?? feedbackWord(\"Copied\") : feedbackWord(\"Could not copy\"));\n return copied;\n}\n\n/** The toast, with the page toaster loaded first where nothing in the page draws toasts yet. */\nasync function say(copied: boolean, words: string): Promise<void> {\n if (!toasterListening()) {\n try {\n (await import(\"./load-toaster\")).pageToaster();\n } catch {\n // No toaster could load: the copy itself still answers.\n }\n }\n if (copied) toast.success(words);\n else toast.error(words);\n}\n","/**\n * Feedback without Lit: toasts, dialogs that answer with a promise, and\n * copying text, from one import and with no framework. Use it in place of the\n * browser's `alert()`, `confirm()` and `prompt()`, and of a page's own toasts\n * and copy buttons.\n *\n * import { toast, confirm, prompt, alert, copyText } from \"…/0-face/feedback\";\n *\n * toast.success(\"Saved\");\n * if (await confirm({ title: \"Delete this track?\", confirm: \"Delete\", danger: true })) remove();\n * const name = await prompt({ title: \"Rename\", value: track.name });\n * await copyText(link);\n *\n * - `toast()` is Sonner's, as in `<ds-toast>` (based on Sonner, MIT licence):\n * the same calls, options and stack, drawn by the page toaster\n * (`./toaster.ts`) on a page without Lit and by `<ds-toast>` where the page\n * has one. `configureToaster()` takes Sonner's `<Toaster />` props.\n * - `alert()`, `confirm()` and `prompt()` are drawn on the native\n * `dialog.ds-dialog` frame from `1-root/controls.css`, which the page loads.\n * - Default words (`./feedback-words.ts`) are English, with no language\n * runtime. Where the page loads the language module (`./i18n.ts`, Sync 1's\n * `languages` export), they are the shared words in the page's language\n * once `configureI18n({ sharedWords: true })` turns them on.\n * `setFeedbackWords()` gives words of the product's own.\n * - It is plain TypeScript, with no `?inline` or `?raw` import, for any\n * bundler, runtime and type check. It adds nodes with `appendChild()`, not\n * `append()`, which the Workers types redeclare for their HTML rewriter;\n * tests/feedback-export-types.test.ts checks the copy under them.\n * - A page that only copies text imports `copyText` from `./copy-text.ts`,\n * which loads the page toaster only when it shows a toast.\n */\nexport { configureToaster, pageToaster, toast } from \"./toaster\";\nexport type { ToasterOptions } from \"./toaster\";\nexport type { ToastButton, ToastData, ToastId, ToastOptions, ToastPosition, ToastPromiseMessages, ToastType } from \"./toast-queue\";\nexport { alert, confirm, prompt } from \"./dialogs\";\nexport type { AlertOptions, ConfirmOptions, PromptOptions } from \"./dialogs\";\nexport { copyText } from \"./copy-text\";\nexport type { CopyTextOptions } from \"./copy-text\";\nexport { setFeedbackWords } from \"./feedback-words\";\nexport type { FeedbackWord, FeedbackWords } from \"./feedback-words\";\n"],"mappings":"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"}
|