@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,214 @@
|
|
|
1
|
+
@import "../../1-root/component-metrics.css";
|
|
2
|
+
|
|
3
|
+
/* ds-page.css
|
|
4
|
+
* Five areas, six arrangements. Every width is whole squares; areas are
|
|
5
|
+
* separated by one square down the page and two across. An empty area takes
|
|
6
|
+
* no room, so its margin goes with it.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
:host {
|
|
10
|
+
--ds-page-nav: calc(12 * var(--ds-unit));
|
|
11
|
+
--ds-page-aside: calc(12 * var(--ds-unit));
|
|
12
|
+
--ds-page-measure: calc(32 * var(--ds-unit));
|
|
13
|
+
--ds-page-tile: calc(12 * var(--ds-unit));
|
|
14
|
+
--ds-page-gap: calc(2 * var(--ds-unit));
|
|
15
|
+
--ds-page-line: var(--ds-border-color, var(--ds-slate-light));
|
|
16
|
+
/* How far the content stands outside its column on each side, the column's place and the
|
|
17
|
+
grid's lines kept: a phone's lists take a little more width, their words a longer line
|
|
18
|
+
(Money sets 4px). Zero by default. */
|
|
19
|
+
--ds-page-bleed: 0px;
|
|
20
|
+
box-sizing: border-box;
|
|
21
|
+
display: block;
|
|
22
|
+
container-type: inline-size;
|
|
23
|
+
min-width: 0;
|
|
24
|
+
color: var(--ds-text-color);
|
|
25
|
+
font-family: var(--ds-typeface-regular);
|
|
26
|
+
font-feature-settings: var(--ds-font-features);
|
|
27
|
+
font-size: var(--ds-type-size-default);
|
|
28
|
+
line-height: var(--ds-type-lineheight-default);
|
|
29
|
+
letter-spacing: var(--ds-type-letterspacing-default);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:host([hidden]) { display: none; }
|
|
33
|
+
:host([fill]) { height: 100%; }
|
|
34
|
+
|
|
35
|
+
.page {
|
|
36
|
+
box-sizing: border-box;
|
|
37
|
+
display: grid;
|
|
38
|
+
column-gap: var(--ds-page-gap);
|
|
39
|
+
grid-template-columns: var(--ds-page-nav) minmax(0, 1fr);
|
|
40
|
+
grid-template-rows: auto minmax(0, 1fr) auto auto;
|
|
41
|
+
grid-template-areas:
|
|
42
|
+
"nav header"
|
|
43
|
+
"nav main"
|
|
44
|
+
"nav aside"
|
|
45
|
+
"nav footer";
|
|
46
|
+
min-height: 100%;
|
|
47
|
+
padding: var(--ds-unit) calc(var(--ds-unit) - var(--ds-page-bleed));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
:host([fill]) .page { height: 100%; }
|
|
51
|
+
|
|
52
|
+
.area { position: relative; min-width: 0; }
|
|
53
|
+
/* The drawer's menu button: shown only on a narrow page with `drawer`. */
|
|
54
|
+
.bar { display: none; grid-area: bar; }
|
|
55
|
+
.bar[hidden] { display: none !important; }
|
|
56
|
+
.area[data-empty] { display: none; }
|
|
57
|
+
.nav { grid-area: nav; }
|
|
58
|
+
.header { grid-area: header; margin-block-end: var(--ds-unit); }
|
|
59
|
+
.main { grid-area: main; }
|
|
60
|
+
.aside { grid-area: aside; margin-block-start: var(--ds-unit); }
|
|
61
|
+
.footer { grid-area: footer; margin-block-start: var(--ds-unit); }
|
|
62
|
+
|
|
63
|
+
:host([fill]) :is(.nav, .main, .aside) { min-height: 0; overflow: auto; }
|
|
64
|
+
|
|
65
|
+
/* List and detail: a wider leading column holds the list. */
|
|
66
|
+
:host([layout="split"]) { --ds-page-nav: calc(16 * var(--ds-unit)); }
|
|
67
|
+
|
|
68
|
+
/* Inspector: navigation, the work, and its properties beside it. */
|
|
69
|
+
:host([layout="inspector"]) .page {
|
|
70
|
+
grid-template-columns: var(--ds-page-nav) minmax(0, 1fr) var(--ds-page-aside);
|
|
71
|
+
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
72
|
+
grid-template-areas:
|
|
73
|
+
"nav header aside"
|
|
74
|
+
"nav main aside"
|
|
75
|
+
"nav footer aside";
|
|
76
|
+
}
|
|
77
|
+
:host([layout="inspector"]) .aside { margin-block-start: 0; }
|
|
78
|
+
|
|
79
|
+
/* One column down the middle; centred is narrower and sits in the middle of
|
|
80
|
+
* the height it is given. Tiles fill the width with 12-square tiles.
|
|
81
|
+
*
|
|
82
|
+
* A centred column stands on a whole square. The room beside it is shared out
|
|
83
|
+
* and rounded down to squares, then added to the page's own square of padding,
|
|
84
|
+
* so when the room is an odd number of squares the extra one falls on the
|
|
85
|
+
* trailing side instead of leaving the column on a half. 100% is the width of
|
|
86
|
+
* the element; with less room than the measure needs, the padding stays one
|
|
87
|
+
* square and the column takes what is left. */
|
|
88
|
+
:host(:is([layout="column"], [layout="centered"], [layout="tiles"])) .page {
|
|
89
|
+
grid-template-columns: minmax(0, calc(var(--ds-page-measure) + 2 * var(--ds-page-bleed)));
|
|
90
|
+
grid-template-rows: auto auto minmax(0, 1fr) auto auto;
|
|
91
|
+
grid-template-areas: "header" "nav" "main" "aside" "footer";
|
|
92
|
+
}
|
|
93
|
+
:host(:is([layout="column"], [layout="centered"])) .page {
|
|
94
|
+
justify-content: start;
|
|
95
|
+
padding-inline-start: calc(var(--ds-unit) + max(0px, round(down, calc((100% - 2 * var(--ds-unit) - var(--ds-page-measure)) / 2), var(--ds-unit))) - var(--ds-page-bleed));
|
|
96
|
+
}
|
|
97
|
+
:host(:is([layout="column"], [layout="centered"], [layout="tiles"])) .nav { margin-block-end: var(--ds-unit); }
|
|
98
|
+
|
|
99
|
+
:host([layout="centered"]) { --ds-page-measure: calc(16 * var(--ds-unit)); }
|
|
100
|
+
:host([layout="centered"]) .page { grid-template-rows: auto; align-content: center; }
|
|
101
|
+
|
|
102
|
+
:host([layout="tiles"]) .page { grid-template-columns: minmax(0, 1fr); }
|
|
103
|
+
:host([layout="tiles"]) .main {
|
|
104
|
+
display: grid;
|
|
105
|
+
grid-template-columns: repeat(auto-fill, var(--ds-page-tile));
|
|
106
|
+
grid-auto-rows: auto;
|
|
107
|
+
gap: var(--ds-unit);
|
|
108
|
+
align-items: start;
|
|
109
|
+
align-content: start;
|
|
110
|
+
}
|
|
111
|
+
:host([layout="tiles"]) .main ::slotted(*) { min-width: 0; }
|
|
112
|
+
:host([layout="tiles"]) .main ::slotted([data-tile="wide"]) { grid-column: span 2; }
|
|
113
|
+
:host([layout="tiles"]) .main ::slotted([data-tile="full"]) { grid-column: 1 / -1; }
|
|
114
|
+
|
|
115
|
+
/* Hairlines between columns, on the grid line in the middle of the gap. The
|
|
116
|
+
* column reaches across half the gap to draw it, so its content keeps its
|
|
117
|
+
* whole width. */
|
|
118
|
+
:host([divided]:not([layout="column"]):not([layout="centered"]):not([layout="tiles"])) .nav {
|
|
119
|
+
border-inline-end: 1px solid var(--ds-page-line);
|
|
120
|
+
padding-inline-end: calc(var(--ds-page-gap) / 2 - 1px);
|
|
121
|
+
margin-inline-end: calc(var(--ds-page-gap) / -2);
|
|
122
|
+
}
|
|
123
|
+
:host([divided][layout="inspector"]) .aside {
|
|
124
|
+
border-inline-start: 1px solid var(--ds-page-line);
|
|
125
|
+
padding-inline-start: calc(var(--ds-page-gap) / 2 - 1px);
|
|
126
|
+
margin-inline-start: calc(var(--ds-page-gap) / -2);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Narrower than navigation, the work and its properties: properties go below. */
|
|
130
|
+
@container (max-width: 959px) {
|
|
131
|
+
:host([layout="inspector"]) .page {
|
|
132
|
+
grid-template-columns: var(--ds-page-nav) minmax(0, 1fr);
|
|
133
|
+
grid-template-rows: auto minmax(0, 1fr) auto auto;
|
|
134
|
+
grid-template-areas:
|
|
135
|
+
"nav header"
|
|
136
|
+
"nav main"
|
|
137
|
+
"nav aside"
|
|
138
|
+
"nav footer";
|
|
139
|
+
}
|
|
140
|
+
:host([layout="inspector"]) .aside { margin-block-start: var(--ds-unit); }
|
|
141
|
+
:host([divided][layout="inspector"]) .aside { border-inline-start: 0; padding-inline-start: 0; margin-inline-start: 0; }
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Phone width: every layout is one column, navigation first. */
|
|
145
|
+
@container (max-width: 599px) {
|
|
146
|
+
.page,
|
|
147
|
+
:host([layout="inspector"]) .page {
|
|
148
|
+
grid-template-columns: minmax(0, 1fr);
|
|
149
|
+
grid-template-rows: auto;
|
|
150
|
+
grid-template-areas: "nav" "header" "main" "aside" "footer";
|
|
151
|
+
column-gap: 0;
|
|
152
|
+
align-content: start;
|
|
153
|
+
}
|
|
154
|
+
.nav { margin-block-end: var(--ds-unit); }
|
|
155
|
+
:host([divided]:not([layout="column"]):not([layout="centered"]):not([layout="tiles"])) .nav {
|
|
156
|
+
border-inline-end: 0;
|
|
157
|
+
padding-inline-end: 0;
|
|
158
|
+
margin-inline-end: 0;
|
|
159
|
+
border-block-end: 1px solid var(--ds-page-line);
|
|
160
|
+
padding-block-end: calc(var(--ds-unit) - 1px);
|
|
161
|
+
}
|
|
162
|
+
:host([fill]) :is(.nav, .main, .aside) { overflow: visible; }
|
|
163
|
+
:host([fill]) .page { height: auto; }
|
|
164
|
+
:host([layout="tiles"]) .main { display: flex; flex-direction: column; align-items: stretch; }
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* Phone width with a drawer: the navigation folds away and the menu button
|
|
168
|
+
* stands in a one-square column before the header. In the drawer the
|
|
169
|
+
* navigation takes the panel's width, with none of the page's margins. */
|
|
170
|
+
@container (max-width: 599px) {
|
|
171
|
+
:host([drawer]) .page,
|
|
172
|
+
:host([drawer][layout="inspector"]) .page {
|
|
173
|
+
grid-template-columns: var(--ds-unit) minmax(0, 1fr);
|
|
174
|
+
column-gap: var(--ds-unit);
|
|
175
|
+
grid-template-areas: "bar header" "main main" "aside aside" "footer footer";
|
|
176
|
+
}
|
|
177
|
+
:host([drawer]) .bar {
|
|
178
|
+
display: flex;
|
|
179
|
+
align-items: center;
|
|
180
|
+
justify-content: center;
|
|
181
|
+
height: var(--ds-unit);
|
|
182
|
+
margin-block-end: var(--ds-unit);
|
|
183
|
+
}
|
|
184
|
+
:host([drawer]) .page > .nav { display: none; }
|
|
185
|
+
}
|
|
186
|
+
/* Important, as the layouts' own margins and hairlines for the navigation
|
|
187
|
+
* reach it by more specific selectors. */
|
|
188
|
+
.ds-drawer > .nav {
|
|
189
|
+
margin: 0 !important;
|
|
190
|
+
padding: 0 !important;
|
|
191
|
+
border: 0 !important;
|
|
192
|
+
overflow: visible !important;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* Inspection: each area outlined and named by its slot, in the corner its
|
|
196
|
+
* content is least likely to use. */
|
|
197
|
+
:host([view]) .area:not([data-empty]) {
|
|
198
|
+
outline: 1px dashed color-mix(in srgb, var(--ds-pink) 80%, var(--ds-text-color));
|
|
199
|
+
outline-offset: -1px;
|
|
200
|
+
}
|
|
201
|
+
:host([view]) .area:not([data-empty])::before {
|
|
202
|
+
content: attr(data-area);
|
|
203
|
+
position: absolute;
|
|
204
|
+
z-index: 1;
|
|
205
|
+
inset-block-end: 0;
|
|
206
|
+
inset-inline-end: 0;
|
|
207
|
+
height: var(--ds-unit);
|
|
208
|
+
padding-inline: calc(4px * var(--ds-sf));
|
|
209
|
+
font-size: var(--ds-type-size-small);
|
|
210
|
+
line-height: var(--ds-unit);
|
|
211
|
+
color: var(--ds-black);
|
|
212
|
+
background: var(--ds-pink);
|
|
213
|
+
pointer-events: none;
|
|
214
|
+
}
|
package/DS1/components.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
export * from "./2-core/ds-button";
|
|
3
3
|
export * from "./2-core/ds-text";
|
|
4
4
|
export * from "./2-core/ds-input";
|
|
5
|
-
export * from "./2-core/ds-textarea";
|
|
6
5
|
export * from "./2-core/ds-gap";
|
|
7
6
|
export * from "./2-core/ds-icon";
|
|
8
7
|
export * from "./2-core/ds-tooltip";
|
|
@@ -11,3 +10,10 @@ export * from "./3-unit/ds-list";
|
|
|
11
10
|
export * from "./3-unit/ds-menu";
|
|
12
11
|
export * from "./3-unit/ds-tabs";
|
|
13
12
|
export * from "./4-page/ds-panel";
|
|
13
|
+
export * from "./4-page/ds-page";
|
|
14
|
+
|
|
15
|
+
export * from "./3-unit/ds-sidebar";
|
|
16
|
+
|
|
17
|
+
export * from "./4-page/ds-grid";
|
|
18
|
+
|
|
19
|
+
export * from "./2-core/ds-chart";
|
package/DS1/index.ts
CHANGED
|
@@ -26,35 +26,39 @@ export * from "./0-face/i18n";
|
|
|
26
26
|
export * from "./0-face/languages";
|
|
27
27
|
export * from "./0-face/language-routing";
|
|
28
28
|
export * from "./0-face/translations-format";
|
|
29
|
+
export * from "./0-face/format";
|
|
29
30
|
export * from "./0-face/preferences";
|
|
30
31
|
export * from "./0-face/pricing";
|
|
31
32
|
export * from "./0-face/theme";
|
|
33
|
+
export * from "./0-face/keys";
|
|
34
|
+
export * from "./0-face/sidebar";
|
|
32
35
|
|
|
33
36
|
// ============================================================================
|
|
34
37
|
// 2-core: Core Components
|
|
35
38
|
// ============================================================================
|
|
36
39
|
|
|
37
|
-
export * from "./2-core/ds-banner";
|
|
38
40
|
export * from "./2-core/ds-badge";
|
|
39
41
|
export * from "./2-core/ds-button";
|
|
40
42
|
export * from "./2-core/ds-checkbox";
|
|
41
43
|
export * from "./2-core/ds-radio";
|
|
42
44
|
export * from "./2-core/ds-switch";
|
|
43
|
-
export * from "./2-core/ds-split";
|
|
44
45
|
export * from "./2-core/ds-select";
|
|
45
46
|
export * from "./2-core/ds-color";
|
|
46
47
|
export * from "./2-core/ds-swatch";
|
|
47
48
|
export * from "./2-core/ds-card";
|
|
48
49
|
export * from "./2-core/ds-cycle";
|
|
49
|
-
export * from "./2-core/ds-
|
|
50
|
+
export * from "./2-core/ds-empty";
|
|
50
51
|
export * from "./2-core/ds-gap";
|
|
51
52
|
export * from "./2-core/ds-icon";
|
|
52
53
|
export * from "./2-core/ds-input";
|
|
53
54
|
export * from "./2-core/ds-file-picker";
|
|
54
|
-
export * from "./2-core/ds-textarea";
|
|
55
55
|
export * from "./2-core/ds-composer";
|
|
56
|
-
export * from "./2-core/ds-
|
|
56
|
+
export * from "./2-core/ds-message";
|
|
57
|
+
export * from "./2-core/ds-notice";
|
|
58
|
+
export * from "./2-core/ds-stat";
|
|
59
|
+
export * from "./2-core/ds-progress";
|
|
57
60
|
export * from "./2-core/ds-text";
|
|
61
|
+
export * from "./2-core/ds-toast";
|
|
58
62
|
export * from "./2-core/ds-tooltip";
|
|
59
63
|
|
|
60
64
|
// ============================================================================
|
|
@@ -64,8 +68,13 @@ export * from "./2-core/ds-tooltip";
|
|
|
64
68
|
export * from "./3-unit/ds-accordion";
|
|
65
69
|
export * from "./2-core/ds-avatar";
|
|
66
70
|
export * from "./3-unit/ds-avatar-group";
|
|
71
|
+
export * from "./3-unit/ds-calendar";
|
|
72
|
+
export * from "./3-unit/ds-calendar-large";
|
|
73
|
+
export * from "./3-unit/ds-carousel";
|
|
74
|
+
export * from "./3-unit/ds-date-picker";
|
|
67
75
|
export * from "./3-unit/ds-form";
|
|
68
76
|
export * from "./3-unit/ds-list";
|
|
77
|
+
export * from "./3-unit/ds-matrix";
|
|
69
78
|
export * from "./3-unit/ds-row";
|
|
70
79
|
export * from "./3-unit/ds-table";
|
|
71
80
|
|
|
@@ -75,7 +84,10 @@ export * from "./3-unit/ds-table";
|
|
|
75
84
|
|
|
76
85
|
export * from "./4-page/ds-container";
|
|
77
86
|
export * from "./4-page/ds-grid";
|
|
78
|
-
export * from "./4-page/ds-
|
|
87
|
+
export * from "./4-page/ds-page";
|
|
88
|
+
export * from "./4-page/ds-header";
|
|
89
|
+
export * from "./4-page/ds-footer";
|
|
90
|
+
export * from "./4-page/ds-document";
|
|
79
91
|
|
|
80
92
|
export * from "./3-unit/ds-menu";
|
|
81
93
|
export * from "./3-unit/ds-tabs";
|
|
@@ -84,3 +96,9 @@ export * from "./4-page/ds-dialog";
|
|
|
84
96
|
|
|
85
97
|
export * from "./2-core/ds-token";
|
|
86
98
|
export * from "./3-unit/ds-token-field";
|
|
99
|
+
|
|
100
|
+
export * from "./3-unit/ds-sidebar";
|
|
101
|
+
|
|
102
|
+
export * from "./2-core/ds-chart";
|
|
103
|
+
|
|
104
|
+
export * from "./0-face/component-visibility";
|
package/DS1/react/avatar.ts
CHANGED
|
@@ -17,6 +17,7 @@ export type AvatarProps = Omit<HTMLAttributes<AvatarElement>, "children"> &
|
|
|
17
17
|
| "pending"
|
|
18
18
|
| "plain"
|
|
19
19
|
| "color"
|
|
20
|
+
| "ink"
|
|
20
21
|
>
|
|
21
22
|
>;
|
|
22
23
|
/** Browser-only registration stays in the product's runtime entry for SSR. */
|
|
@@ -24,14 +25,12 @@ export const Avatar = forwardRef<AvatarElement, AvatarProps>(function Avatar(pro
|
|
|
24
25
|
return createElement("ds-avatar", { ...props, ref });
|
|
25
26
|
});
|
|
26
27
|
|
|
27
|
-
export type LogoProps = Omit<AvatarProps, "
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
/** A monochrome brand mark fitted into the page's image area. */
|
|
28
|
+
export type LogoProps = Omit<AvatarProps, "size" | "fit" | "mask" | "plain" | "shape">;
|
|
29
|
+
/** A monochrome brand mark fitted into the page's image area; without `src`, its `initial`. */
|
|
31
30
|
export const Logo = forwardRef<AvatarElement, LogoProps>(function Logo(props, ref) {
|
|
32
31
|
return createElement("ds-avatar", {
|
|
33
32
|
size: "fill",
|
|
34
|
-
|
|
33
|
+
logo: true,
|
|
35
34
|
fit: "contain",
|
|
36
35
|
mask: true,
|
|
37
36
|
plain: true,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Controlled state for Button's split mode. The shared Button owns its face. */
|
|
2
|
+
import { createElement, useEffect, useLayoutEffect, useRef, type CSSProperties, type ReactNode, type Ref } from "react";
|
|
3
|
+
import type { Button as ButtonElement, SplitSegment } from "../2-core/ds-button";
|
|
4
|
+
export type { SplitSegment };
|
|
5
|
+
const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
6
|
+
export interface SplitButtonProps<T extends string> {
|
|
7
|
+
split: true; segments: ReadonlyArray<SplitSegment<T>>; value?: T;
|
|
8
|
+
onPress: (value: T) => void; label: string; className?: string; style?: CSSProperties;
|
|
9
|
+
disabled?: boolean; compact?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export function SplitButton<T extends string>({ segments, value, onPress, label, className, style, disabled = false, compact = false, forwardedRef }: SplitButtonProps<T> & { forwardedRef?: Ref<ButtonElement> }): ReactNode {
|
|
12
|
+
const ref = useRef<ButtonElement | null>(null);
|
|
13
|
+
useCommitEffect(() => {
|
|
14
|
+
const element = ref.current; if (!element) return;
|
|
15
|
+
element.split = true; element.segments = segments; element.value = value ?? "";
|
|
16
|
+
element.actions = value === undefined; element.disabled = disabled; element.compact = compact; element.literal = true;
|
|
17
|
+
const press = (event: Event) => {
|
|
18
|
+
if (event.target !== element) return;
|
|
19
|
+
if (event.type === "change") event.preventDefault();
|
|
20
|
+
onPress((event as CustomEvent<{ value: T }>).detail.value);
|
|
21
|
+
};
|
|
22
|
+
element.addEventListener("change", press); element.addEventListener("press", press);
|
|
23
|
+
return () => { element.removeEventListener("change", press); element.removeEventListener("press", press); };
|
|
24
|
+
});
|
|
25
|
+
return createElement("ds-button", { ref: (element: ButtonElement | null) => {
|
|
26
|
+
ref.current = element;
|
|
27
|
+
if (typeof forwardedRef === "function") forwardedRef(element); else if (forwardedRef) forwardedRef.current = element;
|
|
28
|
+
}, split: true, "aria-label": label, className, style });
|
|
29
|
+
}
|
package/DS1/react/button.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
/** Native semantics and React events; the shared Lit element owns the face. */
|
|
2
|
-
import { createElement, forwardRef, type AnchorHTMLAttributes, type ButtonHTMLAttributes } from "react";
|
|
2
|
+
import { createElement, forwardRef, type AnchorHTMLAttributes, type ReactElement, type RefAttributes, type Ref, type ButtonHTMLAttributes } from "react";
|
|
3
|
+
import { SplitButton, type SplitButtonProps } from "./button-split";
|
|
4
|
+
export type { SplitButtonProps, SplitSegment } from "./button-split";
|
|
3
5
|
import type { Button as ButtonElement } from "../2-core/ds-button";
|
|
4
6
|
|
|
5
7
|
export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &
|
|
6
|
-
Partial<Pick<ButtonElement, "primary" | "secondary" | "active" | "choice" | "icon" | "wide" | "fit" | "danger" | "menuItem">>;
|
|
8
|
+
Partial<Pick<ButtonElement, "primary" | "secondary" | "active" | "choice" | "icon" | "wide" | "fixed" | "fit" | "danger" | "menuItem">>;
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
const ButtonControl = forwardRef<HTMLButtonElement, ButtonProps | SplitButtonProps<string>>(function Button(
|
|
11
|
+
props, ref,
|
|
12
|
+
) {
|
|
13
|
+
if ("split" in props && props.split) return createElement(SplitButton, { ...props, forwardedRef: ref as unknown as Ref<ButtonElement> });
|
|
14
|
+
const {
|
|
10
15
|
children,
|
|
11
16
|
className,
|
|
12
17
|
style,
|
|
@@ -16,16 +21,15 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button
|
|
|
16
21
|
choice,
|
|
17
22
|
icon,
|
|
18
23
|
wide,
|
|
24
|
+
fixed,
|
|
19
25
|
fit,
|
|
20
26
|
danger,
|
|
21
27
|
menuItem,
|
|
22
28
|
disabled,
|
|
23
29
|
hidden,
|
|
24
30
|
type = "button",
|
|
25
|
-
...
|
|
26
|
-
}
|
|
27
|
-
ref,
|
|
28
|
-
) {
|
|
31
|
+
...nativeProps
|
|
32
|
+
} = props as ButtonProps;
|
|
29
33
|
return createElement(
|
|
30
34
|
"ds-button",
|
|
31
35
|
{
|
|
@@ -36,6 +40,7 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button
|
|
|
36
40
|
choice,
|
|
37
41
|
icon,
|
|
38
42
|
wide,
|
|
43
|
+
fixed,
|
|
39
44
|
fit,
|
|
40
45
|
danger,
|
|
41
46
|
menuItem,
|
|
@@ -44,18 +49,32 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button
|
|
|
44
49
|
className,
|
|
45
50
|
style,
|
|
46
51
|
},
|
|
47
|
-
createElement("button", { ...
|
|
52
|
+
createElement("button", { ...nativeProps, ref, type, disabled, hidden }, children),
|
|
48
53
|
);
|
|
49
54
|
});
|
|
50
55
|
|
|
51
|
-
|
|
56
|
+
export const Button = ButtonControl as unknown as {
|
|
57
|
+
<const T extends string>(props: SplitButtonProps<T> & RefAttributes<ButtonElement>): ReactElement | null;
|
|
58
|
+
(props: ButtonProps & RefAttributes<HTMLButtonElement>): ReactElement | null;
|
|
59
|
+
displayName?: string;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A real link: browser navigation, context menus and modifier clicks survive.
|
|
64
|
+
* As `<ds-button href>`: `target="_blank"` gets `rel="noopener noreferrer"`
|
|
65
|
+
* unless `rel` is given, and a disabled link loses its `href` and `target`, is
|
|
66
|
+
* left out of the tab order and stays a link (`role="link"`, `aria-disabled`).
|
|
67
|
+
*/
|
|
52
68
|
export type ButtonLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> &
|
|
53
|
-
Partial<Pick<ButtonElement, "primary" | "secondary" | "active" | "choice" | "icon" | "wide" | "fit" | "danger" | "menuItem">> & {disabled?: boolean};
|
|
69
|
+
Partial<Pick<ButtonElement, "primary" | "secondary" | "active" | "choice" | "icon" | "wide" | "fixed" | "fit" | "danger" | "menuItem">> & {disabled?: boolean};
|
|
54
70
|
export const ButtonLink = forwardRef<HTMLAnchorElement, ButtonLinkProps>(function ButtonLink(
|
|
55
|
-
{children, className, style, primary, secondary, active, choice, icon, wide, fit, danger, menuItem, disabled, hidden, href, onClick, onAuxClick, tabIndex, ...props}, ref,
|
|
71
|
+
{children, className, style, primary, secondary, active, choice, icon, wide, fixed, fit, danger, menuItem, disabled, hidden, href, target, rel, role, onClick, onAuxClick, tabIndex, ...props}, ref,
|
|
56
72
|
) {
|
|
57
|
-
return createElement("ds-button", {control: "slotted", primary, secondary, active, choice, icon, wide, fit, danger, menuItem, disabled, hidden, className, style},
|
|
73
|
+
return createElement("ds-button", {control: "slotted", primary, secondary, active, choice, icon, wide, fixed, fit, danger, menuItem, disabled, hidden, className, style},
|
|
58
74
|
createElement("a", {...props, ref, href: disabled ? undefined : href, hidden,
|
|
75
|
+
target: disabled ? undefined : target,
|
|
76
|
+
rel: disabled ? undefined : rel ?? (target === "_blank" ? "noopener noreferrer" : undefined),
|
|
77
|
+
role: role ?? (disabled ? "link" : undefined),
|
|
59
78
|
"aria-disabled": disabled || undefined, tabIndex: disabled ? -1 : tabIndex,
|
|
60
79
|
onClick: event => { if (disabled) { event.preventDefault(); event.stopPropagation(); } else onClick?.(event); },
|
|
61
80
|
onAuxClick: event => { if (disabled) { event.preventDefault(); event.stopPropagation(); } else onAuxClick?.(event); },
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** A carousel in React: the slides stay in the light DOM, so they render on
|
|
2
|
+
* the server and read in tests; ds-carousel snaps them, draws the dots and
|
|
3
|
+
* buttons and announces the slide in view. The region and its name are in the
|
|
4
|
+
* markup from the first render. Browser-only registration of ds-carousel stays
|
|
5
|
+
* in the product's runtime entry. */
|
|
6
|
+
import { createElement as h, forwardRef, useEffect, useLayoutEffect, useRef, type HTMLAttributes, type ReactNode } from "react";
|
|
7
|
+
import type { Carousel as CarouselElement, CarouselChangeDetail } from "../3-unit/ds-carousel";
|
|
8
|
+
|
|
9
|
+
export type { CarouselChangeDetail } from "../3-unit/ds-carousel";
|
|
10
|
+
export type CarouselProps = Omit<HTMLAttributes<CarouselElement>, "onChange"> & {
|
|
11
|
+
/** The region's name: what the slides show. */
|
|
12
|
+
label: string;
|
|
13
|
+
/** The slide in view, from 0. Changing it scrolls there. */
|
|
14
|
+
current?: number;
|
|
15
|
+
/** Show previous and next buttons beside the dots. */
|
|
16
|
+
buttons?: boolean;
|
|
17
|
+
/** Show the dots; on by default. */
|
|
18
|
+
dots?: boolean;
|
|
19
|
+
/** Draw the last dot as an end marker. */
|
|
20
|
+
end?: boolean;
|
|
21
|
+
/** Each slide's width in whole squares; the carousel's own width when not set; `"auto"` for slides of their own width, a strip. */
|
|
22
|
+
slideWidth?: number | "auto";
|
|
23
|
+
/** Squares between slides; one by default. */
|
|
24
|
+
gap?: number;
|
|
25
|
+
/** A strip's bleed: `end` runs it on to the window's end edge, `both` to both edges. */
|
|
26
|
+
bleed?: "none" | "end" | "both";
|
|
27
|
+
/** Hold the slides three times over, so the strip has no end; draws no dots. */
|
|
28
|
+
loop?: boolean;
|
|
29
|
+
/** Move on by itself: `true` for every five seconds, or milliseconds. Always with a pause button. */
|
|
30
|
+
autoplay?: boolean | number;
|
|
31
|
+
/** Slide freely, without stopping at slides. */
|
|
32
|
+
free?: boolean;
|
|
33
|
+
/** A person moved to another slide. */
|
|
34
|
+
onChange?: (index: number, previous: number) => void;
|
|
35
|
+
children?: ReactNode;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const useCommitEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
39
|
+
|
|
40
|
+
export const Carousel = forwardRef<CarouselElement, CarouselProps>(function Carousel(
|
|
41
|
+
{ label, current, buttons, dots = true, end, slideWidth, gap, bleed, loop, autoplay, free, onChange, children, ...props }, ref,
|
|
42
|
+
) {
|
|
43
|
+
const host = useRef<CarouselElement | null>(null);
|
|
44
|
+
useCommitEffect(() => {
|
|
45
|
+
const element = host.current;
|
|
46
|
+
if (!element || !onChange) return;
|
|
47
|
+
const change = (event: Event) => {
|
|
48
|
+
if (event.target !== element) return;
|
|
49
|
+
const { index, previous } = (event as CustomEvent<CarouselChangeDetail>).detail;
|
|
50
|
+
onChange(index, previous);
|
|
51
|
+
};
|
|
52
|
+
element.addEventListener("change", change);
|
|
53
|
+
return () => element.removeEventListener("change", change);
|
|
54
|
+
});
|
|
55
|
+
return h("ds-carousel", {
|
|
56
|
+
role: "region",
|
|
57
|
+
"aria-label": label,
|
|
58
|
+
...props,
|
|
59
|
+
label,
|
|
60
|
+
literal: true,
|
|
61
|
+
current,
|
|
62
|
+
buttons: buttons || undefined,
|
|
63
|
+
"no-dots": dots ? undefined : true,
|
|
64
|
+
end: end || undefined,
|
|
65
|
+
"slide-width": slideWidth,
|
|
66
|
+
gap,
|
|
67
|
+
bleed: bleed && bleed !== "none" ? bleed : undefined,
|
|
68
|
+
loop: loop || undefined,
|
|
69
|
+
autoplay: autoplay === true ? "" : typeof autoplay === "number" ? String(autoplay) : undefined,
|
|
70
|
+
free: free || undefined,
|
|
71
|
+
ref: (element: CarouselElement | null) => {
|
|
72
|
+
host.current = element;
|
|
73
|
+
if (typeof ref === "function") ref(element); else if (ref) ref.current = element;
|
|
74
|
+
},
|
|
75
|
+
}, children);
|
|
76
|
+
});
|
package/DS1/react/dialog.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Optional React composition; behavior and appearance belong to ds-dialog. */
|
|
2
|
-
import { createContext, createElement, useContext, useId, useLayoutEffect, useRef, useState, type HTMLAttributes, type ReactNode, type Ref } from "react";
|
|
2
|
+
import { createContext, createElement, useContext, useEffect, useId, useLayoutEffect, useRef, useState, type HTMLAttributes, type ReactNode, type Ref } from "react";
|
|
3
3
|
import { createPortal } from "react-dom";
|
|
4
|
-
import type { Dialog as DialogElement, DialogCloseReason } from "../4-page/ds-dialog";
|
|
4
|
+
import type { Dialog as DialogElement, DialogCloseReason, DialogPlacement } from "../4-page/ds-dialog";
|
|
5
5
|
|
|
6
6
|
const DialogContext = createContext<{ open: boolean; change: (open: boolean, reason?: DialogCloseReason) => void; title: string; description: string } | null>(null);
|
|
7
7
|
const useDialog = () => {
|
|
@@ -10,7 +10,7 @@ const useDialog = () => {
|
|
|
10
10
|
return context;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
export interface DialogProps { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean, reason?: DialogCloseReason) => void; children
|
|
13
|
+
export interface DialogProps { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean, reason?: DialogCloseReason) => void; children?: ReactNode }
|
|
14
14
|
export function Dialog({ open, defaultOpen = false, onOpenChange, children }: DialogProps) {
|
|
15
15
|
const [internal, setInternal] = useState(defaultOpen);
|
|
16
16
|
const id = useId();
|
|
@@ -40,11 +40,41 @@ export interface DialogContentProps extends HTMLAttributes<HTMLDialogElement> {
|
|
|
40
40
|
flush?: boolean;
|
|
41
41
|
/** Rotate a document frame while keeping it within the viewport. */
|
|
42
42
|
rotated?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Where it stands: `"center"` (the default), a `"sheet"` from the bottom, or
|
|
45
|
+
* a drawer at the `"end"` or `"start"`. These slide out before they leave
|
|
46
|
+
* the page, and a finger swipes them away (reason `"swipe"`).
|
|
47
|
+
*/
|
|
48
|
+
placement?: DialogPlacement;
|
|
43
49
|
}
|
|
44
|
-
|
|
50
|
+
|
|
51
|
+
/** The longest a sliding dialog stays on the page after closing, should its transition never end. */
|
|
52
|
+
const LEAVING = 600;
|
|
53
|
+
export function DialogContent({ children, portal = true, nonModal = false, closeOnOutside = false, blockOutside = false, holdScroll = false, anchor = null, returnFocus = null, closeLabel = "Close", showClose = true, closeOnEscape = true, closeOnBackdrop = true, fullScreen = false, flush = false, rotated = false, placement = "center", ...props }: DialogContentProps) {
|
|
45
54
|
const context = useDialog();
|
|
46
55
|
const host = useRef<DialogElement>(null);
|
|
47
56
|
const [mounted, setMounted] = useState(false);
|
|
57
|
+
// A sheet or drawer stays on the page while it slides out, then leaves.
|
|
58
|
+
const sliding = placement !== "center";
|
|
59
|
+
const [leaving, setLeaving] = useState(false);
|
|
60
|
+
const [wasOpen, setWasOpen] = useState(context.open);
|
|
61
|
+
if (wasOpen !== context.open) {
|
|
62
|
+
setWasOpen(context.open);
|
|
63
|
+
setLeaving(!context.open && sliding && mounted);
|
|
64
|
+
}
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (!leaving) return;
|
|
67
|
+
const native = host.current?.querySelector("dialog");
|
|
68
|
+
const done = () => setLeaving(false);
|
|
69
|
+
const ended = (event: Event) => {
|
|
70
|
+
const { propertyName, pseudoElement } = event as TransitionEvent;
|
|
71
|
+
if (event.target === native && !pseudoElement && (propertyName === "transform" || propertyName === "opacity")) done();
|
|
72
|
+
};
|
|
73
|
+
native?.addEventListener("transitionend", ended);
|
|
74
|
+
native?.addEventListener("transitioncancel", ended);
|
|
75
|
+
const timer = setTimeout(done, LEAVING);
|
|
76
|
+
return () => { clearTimeout(timer); native?.removeEventListener("transitionend", ended); native?.removeEventListener("transitioncancel", ended); };
|
|
77
|
+
}, [leaving]);
|
|
48
78
|
// A portal has no server location. Keep the server and first client render
|
|
49
79
|
// identical, including when the application initially requests an open modal.
|
|
50
80
|
useLayoutEffect(() => { setMounted(true); }, []);
|
|
@@ -77,10 +107,11 @@ export function DialogContent({ children, portal = true, nonModal = false, close
|
|
|
77
107
|
element.holdScroll = holdScroll;
|
|
78
108
|
element.anchor = anchor;
|
|
79
109
|
element.returnFocus = returnFocus;
|
|
110
|
+
element.placement = placement;
|
|
80
111
|
element.open = context.open;
|
|
81
112
|
return () => element.removeEventListener("ds-close-request", close);
|
|
82
113
|
});
|
|
83
|
-
if (!mounted || !context.open) return null;
|
|
114
|
+
if (!mounted || (!context.open && !leaving)) return null;
|
|
84
115
|
const content = createElement("ds-dialog", { ref: host },
|
|
85
116
|
createElement("dialog", { ...props, "data-ds-dialog-fullscreen": fullScreen || undefined, "data-ds-dialog-flush": flush || undefined, "data-ds-dialog-rotated": rotated || undefined }, children,
|
|
86
117
|
showClose && createElement("ds-button", { control: "slotted", icon: true, "data-ds-dialog": "close" },
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createElement, forwardRef, type HTMLAttributes } from "react";
|
|
2
|
+
import type { DocumentPage as DocumentElement } from "../4-page/ds-document";
|
|
3
|
+
|
|
4
|
+
export type DocumentPageProps = HTMLAttributes<DocumentElement> &
|
|
5
|
+
Partial<Pick<DocumentElement, "levels" | "label" | "literal" | "hideContents">>;
|
|
6
|
+
/**
|
|
7
|
+
* A document page: the children are the writing (native headings,
|
|
8
|
+
* paragraphs and a `<dl className="ds-definitions">`), in the light DOM so
|
|
9
|
+
* they render on the server; the element builds the contents from them.
|
|
10
|
+
* Browser-only registration stays in the product's runtime entry for SSR.
|
|
11
|
+
*/
|
|
12
|
+
export const DocumentPage = forwardRef<DocumentElement, DocumentPageProps>(function DocumentPage({ hideContents, ...props }, ref) {
|
|
13
|
+
return createElement("ds-document", { ...props, "hide-contents": hideContents || undefined, "data-ds-prose": "", ref });
|
|
14
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** An empty state in React: the words stay in the light DOM, so they render on
|
|
2
|
+
* the server and read in tests; ds-empty draws them. Browser-only registration
|
|
3
|
+
* of ds-empty stays in the product's runtime entry. */
|
|
4
|
+
import { createElement as h, forwardRef, type HTMLAttributes, type ReactNode } from "react";
|
|
5
|
+
import type { Empty as EmptyElement } from "../2-core/ds-empty";
|
|
6
|
+
|
|
7
|
+
export type EmptyProps = Omit<HTMLAttributes<EmptyElement>, "title"> & {
|
|
8
|
+
/** The title. Unset, the shared words' "Nothing here yet" in the current language. */
|
|
9
|
+
heading?: ReactNode;
|
|
10
|
+
/** The line under the title; `children` take its place when given. */
|
|
11
|
+
text?: ReactNode;
|
|
12
|
+
/** An icon from the library on the square above the title. */
|
|
13
|
+
icon?: string;
|
|
14
|
+
/** The buttons or links that fill the place, on one row. */
|
|
15
|
+
actions?: ReactNode;
|
|
16
|
+
/** Centre the words in the space the element stands in. */
|
|
17
|
+
centered?: boolean;
|
|
18
|
+
/** Make the title a heading of this level (1–6). */
|
|
19
|
+
level?: number;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const title = (content: ReactNode) =>
|
|
23
|
+
content == null || content === false || content === "" ? null : h("span", { slot: "heading" }, content);
|
|
24
|
+
|
|
25
|
+
export const Empty = forwardRef<EmptyElement, EmptyProps>(function Empty(
|
|
26
|
+
{ heading, text, icon, actions, centered, level, children, ...props }, ref,
|
|
27
|
+
) {
|
|
28
|
+
return h("ds-empty", { ...props, icon, centered: centered || undefined, level, ref },
|
|
29
|
+
title(heading),
|
|
30
|
+
children ?? text,
|
|
31
|
+
actions == null || actions === false ? null : h("div", { slot: "actions", style: { display: "contents" } }, actions));
|
|
32
|
+
});
|