@0001-labs/design-system-1 0.3.0-alpha.13 → 0.3.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DS1/0-face/calendar.ts +194 -0
- package/DS1/0-face/carousel.ts +623 -0
- package/DS1/0-face/component-visibility.ts +13 -0
- package/DS1/0-face/copy-text.ts +96 -0
- package/DS1/0-face/device.ts +8 -58
- package/DS1/0-face/dialog-swipe.ts +249 -0
- package/DS1/0-face/dialogs.ts +208 -0
- package/DS1/0-face/drawer.ts +258 -0
- package/DS1/0-face/feedback-words.ts +36 -0
- package/DS1/0-face/feedback.ts +40 -0
- package/DS1/0-face/format.ts +700 -0
- package/DS1/0-face/generated/toast-assets.ts +18 -0
- package/DS1/0-face/grid-fit.ts +1 -1
- package/DS1/0-face/grid.ts +3 -2
- package/DS1/0-face/header.ts +78 -0
- package/DS1/0-face/i18n.ts +93 -18
- package/DS1/0-face/keys.ts +276 -0
- package/DS1/0-face/languages.ts +4 -4
- package/DS1/0-face/layout-inspector.ts +6 -6
- package/DS1/0-face/library-styles.ts +33 -0
- package/DS1/0-face/load-toaster.ts +7 -0
- package/DS1/0-face/preference-options.ts +29 -0
- package/DS1/0-face/preferences.ts +3 -11
- package/DS1/0-face/pricing.ts +98 -43
- package/DS1/0-face/scaling.ts +160 -4
- package/DS1/0-face/shared-words.ts +9 -4
- package/DS1/0-face/sidebar.ts +201 -0
- package/DS1/0-face/theme-bootstrap.js +184 -0
- package/DS1/0-face/theme.ts +89 -47
- package/DS1/0-face/toast-queue.ts +157 -0
- package/DS1/0-face/toaster.ts +384 -0
- package/DS1/0-face/tooltips.ts +157 -15
- package/DS1/0-face/translations/da.json +60 -1
- package/DS1/0-face/translations/de.json +60 -1
- package/DS1/0-face/translations/en.json +60 -1
- package/DS1/0-face/translations/es.json +60 -1
- package/DS1/0-face/translations/fi.json +60 -1
- package/DS1/0-face/translations/fr.json +60 -1
- package/DS1/0-face/translations/is.json +60 -1
- package/DS1/0-face/translations/it.json +60 -1
- package/DS1/0-face/translations/ja.json +60 -1
- package/DS1/0-face/translations/ko.json +60 -1
- package/DS1/0-face/translations/nb.json +60 -1
- package/DS1/0-face/translations/pt-BR.json +60 -1
- package/DS1/0-face/translations/pt.json +60 -1
- package/DS1/0-face/translations/sv.json +60 -1
- package/DS1/0-face/translations/zh.json +60 -1
- package/DS1/0-face/translations-format.ts +3 -4
- package/DS1/1-root/card.css +192 -0
- package/DS1/1-root/carousel.css +136 -0
- package/DS1/1-root/cjk.css +23 -0
- package/DS1/1-root/component-metrics.css +1 -0
- package/DS1/1-root/component-tokens.css +51 -8
- package/DS1/1-root/controls.css +887 -14
- package/DS1/1-root/dialog-placement.css +191 -0
- package/DS1/1-root/document.css +183 -0
- package/DS1/1-root/drawer.css +83 -0
- package/DS1/1-root/empty.css +83 -0
- package/DS1/1-root/figures.css +141 -0
- package/DS1/1-root/fonts/Iosevka-LICENSE.md +3 -1
- package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
- package/DS1/1-root/fonts.css +69 -0
- package/DS1/1-root/footer.css +186 -0
- package/DS1/1-root/header.css +165 -0
- package/DS1/1-root/kbd.css +46 -0
- package/DS1/1-root/library-tokens.ts +91 -0
- package/DS1/1-root/measures.ts +53 -0
- package/DS1/1-root/notice.css +165 -0
- package/DS1/1-root/one.css +14 -84
- package/DS1/1-root/one.semantic.css +200 -148
- package/DS1/1-root/palette.css +58 -0
- package/DS1/1-root/palette.ts +19 -0
- package/DS1/1-root/progress.css +356 -0
- package/DS1/1-root/prose.css +202 -0
- package/DS1/1-root/row.css +297 -0
- package/DS1/1-root/table.css +111 -0
- package/DS1/1-root/text.css +70 -0
- package/DS1/2-core/button-split.ts +55 -0
- package/DS1/2-core/chart/chart.css +169 -0
- package/DS1/2-core/chart/grid-chart.ts +554 -0
- package/DS1/2-core/ds-avatar.ts +25 -6
- package/DS1/2-core/ds-badge.ts +10 -10
- package/DS1/2-core/ds-button.ts +111 -26
- package/DS1/2-core/ds-card.ts +135 -105
- package/DS1/2-core/ds-chart.ts +327 -0
- package/DS1/2-core/ds-composer.ts +8 -2
- package/DS1/2-core/ds-cycle.ts +97 -21
- package/DS1/2-core/ds-empty.ts +120 -0
- package/DS1/2-core/ds-icon.ts +11 -2
- package/DS1/2-core/ds-input.ts +165 -6
- package/DS1/2-core/ds-kbd.ts +78 -0
- package/DS1/2-core/ds-loading.ts +72 -0
- package/DS1/2-core/ds-notice.ts +180 -0
- package/DS1/2-core/ds-progress.ts +380 -0
- package/DS1/2-core/ds-spacing-handle.ts +22 -0
- package/DS1/2-core/ds-stat.ts +174 -0
- package/DS1/2-core/ds-switch.ts +1 -0
- package/DS1/2-core/ds-text.ts +15 -2
- package/DS1/2-core/ds-toast.ts +354 -0
- package/DS1/2-core/figures.ts +105 -0
- package/DS1/2-core/generated/ds-icon-map.ts +234 -128
- package/DS1/2-core/generated/icon-avatar.ts +2 -0
- package/DS1/2-core/generated/icons-extra.ts +118 -65
- package/DS1/2-core/generated/icons-immediate.ts +1 -1
- package/DS1/2-core/spacing-handle.ts +95 -0
- package/DS1/2-core/styles/ds-avatar.css +9 -8
- package/DS1/2-core/styles/ds-button-host.css +26 -3
- package/DS1/2-core/styles/ds-button-split.css +67 -0
- package/DS1/2-core/styles/ds-button.css +49 -15
- package/DS1/2-core/styles/ds-card.css +34 -0
- package/DS1/2-core/styles/ds-composer.css +13 -0
- package/DS1/2-core/styles/ds-cycle.css +69 -0
- package/DS1/2-core/styles/ds-empty.css +18 -0
- package/DS1/2-core/styles/ds-gap.css +1 -0
- package/DS1/2-core/styles/ds-icon.css +1 -0
- package/DS1/2-core/styles/ds-input.css +59 -6
- package/DS1/2-core/styles/ds-kbd.css +12 -0
- package/DS1/2-core/styles/ds-loading.css +13 -0
- package/DS1/2-core/styles/ds-notice.css +30 -0
- package/DS1/2-core/styles/ds-progress.css +25 -0
- package/DS1/2-core/styles/ds-select.css +2 -2
- package/DS1/2-core/styles/ds-spacing-handle.css +8 -0
- package/DS1/2-core/styles/ds-split.css +2 -62
- package/DS1/2-core/styles/ds-stat.css +34 -0
- package/DS1/2-core/styles/ds-switch.css +16 -1
- package/DS1/2-core/styles/ds-text.css +43 -12
- package/DS1/2-core/styles/ds-toast.css +182 -0
- package/DS1/2-core/styles/ds-tooltip.css +1 -0
- package/DS1/3-unit/calendar-base.ts +263 -0
- package/DS1/3-unit/ds-accordion.ts +9 -1
- package/DS1/3-unit/ds-avatar-group.ts +1 -0
- package/DS1/3-unit/ds-calendar-large.ts +349 -0
- package/DS1/3-unit/ds-calendar.ts +344 -0
- package/DS1/3-unit/ds-carousel.ts +368 -0
- package/DS1/3-unit/ds-date-picker.ts +540 -0
- package/DS1/3-unit/ds-form.ts +45 -37
- package/DS1/3-unit/ds-list.ts +48 -1
- package/DS1/3-unit/ds-matrix.ts +318 -0
- package/DS1/3-unit/ds-menu.ts +8 -4
- package/DS1/3-unit/ds-row.ts +84 -1
- package/DS1/3-unit/ds-sidebar.ts +280 -0
- package/DS1/3-unit/ds-table.ts +75 -34
- package/DS1/3-unit/styles/ds-accordion.css +1 -0
- package/DS1/3-unit/styles/ds-avatar-group.css +2 -4
- package/DS1/3-unit/styles/ds-calendar-large.css +165 -0
- package/DS1/3-unit/styles/ds-calendar.css +238 -0
- package/DS1/3-unit/styles/ds-carousel.css +30 -0
- package/DS1/3-unit/styles/ds-date-picker.css +124 -0
- package/DS1/3-unit/styles/ds-list.css +1 -0
- package/DS1/3-unit/styles/ds-matrix.css +203 -0
- package/DS1/3-unit/styles/ds-menu.css +31 -6
- package/DS1/3-unit/styles/ds-row.css +84 -2
- package/DS1/3-unit/styles/ds-sidebar.css +117 -0
- package/DS1/3-unit/styles/ds-table.css +3 -74
- package/DS1/4-page/ds-dialog.ts +40 -4
- package/DS1/4-page/ds-document.ts +240 -0
- package/DS1/4-page/ds-footer.ts +165 -0
- package/DS1/4-page/ds-grid.ts +39 -59
- package/DS1/4-page/ds-header.ts +171 -0
- package/DS1/4-page/ds-page.ts +184 -0
- package/DS1/4-page/email.ts +2 -3
- package/DS1/4-page/styles/ds-container.css +1 -0
- package/DS1/4-page/styles/ds-document.css +18 -0
- package/DS1/4-page/styles/ds-footer.css +29 -0
- package/DS1/4-page/styles/ds-grid.css +31 -85
- package/DS1/4-page/styles/ds-header.css +57 -0
- package/DS1/4-page/styles/ds-page.css +214 -0
- package/DS1/components.ts +7 -1
- package/DS1/index.ts +26 -6
- package/DS1/react/avatar.ts +4 -5
- package/DS1/react/button-split.ts +29 -0
- package/DS1/react/button.ts +32 -13
- package/DS1/react/carousel.ts +76 -0
- package/DS1/react/dialog.ts +36 -5
- package/DS1/react/document.ts +14 -0
- package/DS1/react/empty.ts +32 -0
- package/DS1/react/footer.ts +17 -0
- package/DS1/react/header.ts +15 -0
- package/DS1/react/input.ts +28 -17
- package/DS1/react/kbd.ts +21 -0
- package/DS1/react/loading.ts +18 -0
- package/DS1/react/notice.ts +59 -0
- package/DS1/react/page.ts +13 -0
- package/DS1/react/progress.ts +99 -0
- package/DS1/react/sidebar.ts +60 -0
- package/DS1/react/spacing-handle.ts +21 -0
- package/DS1/react/stat.ts +73 -0
- package/DS1/react/toast.ts +82 -0
- package/DS1/x-icon/Tabler-LICENSE.md +27 -0
- package/DS1/x-icon/airtable.svg +5 -0
- package/DS1/x-icon/attach.svg +3 -0
- package/DS1/x-icon/audio.svg +3 -0
- package/DS1/x-icon/bag-alt.svg +3 -0
- package/DS1/x-icon/bank.svg +3 -0
- package/DS1/x-icon/banknote.svg +3 -0
- package/DS1/x-icon/bolt.svg +3 -0
- package/DS1/x-icon/book-alt.svg +3 -0
- package/DS1/x-icon/book.svg +4 -0
- package/DS1/x-icon/box.svg +3 -0
- package/DS1/x-icon/briefcase.svg +3 -0
- package/DS1/x-icon/building.svg +4 -0
- package/DS1/x-icon/car.svg +3 -0
- package/DS1/x-icon/card.svg +3 -0
- package/DS1/x-icon/cart.svg +3 -0
- package/DS1/x-icon/{ezo-item-button-start.svg → chevron-left.svg} +1 -1
- package/DS1/x-icon/{ezo-android-screen-stats.svg → chevron-right.svg} +1 -1
- package/DS1/x-icon/cloud.svg +3 -0
- package/DS1/x-icon/coffee.svg +3 -0
- package/DS1/x-icon/coins.svg +3 -0
- package/DS1/x-icon/cursor.svg +3 -0
- package/DS1/x-icon/curve.svg +7 -0
- package/DS1/x-icon/dislike.svg +4 -0
- package/DS1/x-icon/dot-bank.svg +3 -0
- package/DS1/x-icon/dot-banknote.svg +3 -0
- package/DS1/x-icon/dot-banknotes.svg +3 -0
- package/DS1/x-icon/dot-card.svg +3 -0
- package/DS1/x-icon/dot-coin.svg +3 -0
- package/DS1/x-icon/dot-coins.svg +3 -0
- package/DS1/x-icon/dot-receipt.svg +3 -0
- package/DS1/x-icon/dot-safe.svg +3 -0
- package/DS1/x-icon/dot-transfer.svg +3 -0
- package/DS1/x-icon/dot-wallet.svg +3 -0
- package/DS1/x-icon/download.svg +4 -0
- package/DS1/x-icon/drive.svg +5 -0
- package/DS1/x-icon/drop.svg +3 -0
- package/DS1/x-icon/dropbox.svg +3 -0
- package/DS1/x-icon/dumbbell.svg +3 -0
- package/DS1/x-icon/eye-off.svg +3 -0
- package/DS1/x-icon/eye.svg +3 -0
- package/DS1/x-icon/facebook.svg +3 -0
- package/DS1/x-icon/figma.svg +5 -0
- package/DS1/x-icon/flame.svg +3 -0
- package/DS1/x-icon/flip.svg +5 -0
- package/DS1/x-icon/food.svg +3 -0
- package/DS1/x-icon/fuel.svg +3 -0
- package/DS1/x-icon/game.svg +3 -0
- package/DS1/x-icon/gift.svg +3 -0
- package/DS1/x-icon/github.svg +3 -0
- package/DS1/x-icon/heart.svg +3 -0
- package/DS1/x-icon/history.svg +3 -0
- package/DS1/x-icon/home-alt.svg +3 -0
- package/DS1/x-icon/income.svg +3 -0
- package/DS1/x-icon/info.svg +5 -0
- package/DS1/x-icon/instagram.svg +5 -0
- package/DS1/x-icon/jpbank.svg +3 -0
- package/DS1/x-icon/key.svg +4 -0
- package/DS1/x-icon/keyboard.svg +3 -0
- package/DS1/x-icon/like.svg +4 -0
- package/DS1/x-icon/linkedin.svg +7 -0
- package/DS1/x-icon/loom.svg +6 -0
- package/DS1/x-icon/map.svg +4 -0
- package/DS1/x-icon/medical.svg +3 -0
- package/DS1/x-icon/{ezo-android-screen-lists.svg → minus.svg} +1 -1
- package/DS1/x-icon/moon.svg +3 -0
- package/DS1/x-icon/move.svg +3 -0
- package/DS1/x-icon/music-alt.svg +3 -0
- package/DS1/x-icon/music.svg +5 -0
- package/DS1/x-icon/notion.svg +6 -0
- package/DS1/x-icon/offline.svg +3 -0
- package/DS1/x-icon/pause.svg +4 -0
- package/DS1/x-icon/paw.svg +3 -0
- package/DS1/x-icon/pdf.svg +3 -0
- package/DS1/x-icon/people.svg +5 -0
- package/DS1/x-icon/percent.svg +3 -0
- package/DS1/x-icon/phone.svg +3 -0
- package/DS1/x-icon/pill.svg +3 -0
- package/DS1/x-icon/plane.svg +3 -0
- package/DS1/x-icon/postal.svg +3 -0
- package/DS1/x-icon/present.svg +4 -0
- package/DS1/x-icon/reaction.svg +5 -0
- package/DS1/x-icon/receipt.svg +3 -0
- package/DS1/x-icon/refresh.svg +3 -0
- package/DS1/x-icon/refund.svg +3 -0
- package/DS1/x-icon/repeat.svg +3 -0
- package/DS1/x-icon/rotate.svg +4 -0
- package/DS1/x-icon/safe.svg +3 -0
- package/DS1/x-icon/school-alt.svg +3 -0
- package/DS1/x-icon/shield-alt.svg +3 -0
- package/DS1/x-icon/shield.svg +4 -0
- package/DS1/x-icon/shirt.svg +3 -0
- package/DS1/x-icon/shop.svg +3 -0
- package/DS1/x-icon/sign-in.svg +3 -0
- package/DS1/x-icon/sign-out.svg +3 -0
- package/DS1/x-icon/slack.svg +6 -0
- package/DS1/x-icon/sparkle.svg +3 -0
- package/DS1/x-icon/start.svg +4 -0
- package/DS1/x-icon/{ezo-item-button-reopen.svg → stop.svg} +1 -1
- package/DS1/x-icon/sun.svg +3 -0
- package/DS1/x-icon/system.svg +4 -0
- package/DS1/x-icon/tag.svg +3 -0
- package/DS1/x-icon/ticket.svg +3 -0
- package/DS1/x-icon/title-struck.svg +4 -0
- package/DS1/x-icon/train.svg +3 -0
- package/DS1/x-icon/transfer.svg +3 -0
- package/DS1/x-icon/tv.svg +3 -0
- package/DS1/x-icon/upload.svg +4 -0
- package/DS1/x-icon/video.svg +4 -0
- package/DS1/x-icon/vimeo.svg +3 -0
- package/DS1/x-icon/wallet.svg +3 -0
- package/DS1/x-icon/wifi.svg +3 -0
- package/DS1/x-icon/window.svg +4 -0
- package/DS1/x-icon/wrench.svg +3 -0
- package/DS1/x-icon/x-brand.svg +4 -0
- package/DS1/x-icon/youtube.svg +4 -0
- package/README.md +3 -3
- package/dist/0-face/calendar.d.ts +75 -0
- package/dist/0-face/calendar.d.ts.map +1 -0
- package/dist/0-face/calendar.js +149 -0
- package/dist/0-face/carousel.d.ts +174 -0
- package/dist/0-face/carousel.d.ts.map +1 -0
- package/dist/0-face/carousel.js +583 -0
- package/dist/0-face/component-visibility.d.ts +7 -0
- package/dist/0-face/component-visibility.d.ts.map +1 -0
- package/dist/0-face/component-visibility.js +10 -0
- package/dist/0-face/copy-text.d.ts +11 -0
- package/dist/0-face/copy-text.d.ts.map +1 -0
- package/dist/0-face/copy-text.js +97 -0
- package/dist/0-face/device.d.ts +3 -7
- package/dist/0-face/device.d.ts.map +1 -1
- package/dist/0-face/device.js +7 -41
- package/dist/0-face/dialog-swipe.d.ts +49 -0
- package/dist/0-face/dialog-swipe.d.ts.map +1 -0
- package/dist/0-face/dialog-swipe.js +239 -0
- package/dist/0-face/dialogs.d.ts +33 -0
- package/dist/0-face/dialogs.d.ts.map +1 -0
- package/dist/0-face/dialogs.js +173 -0
- package/dist/0-face/drawer.d.ts +64 -0
- package/dist/0-face/drawer.d.ts.map +1 -0
- package/dist/0-face/drawer.js +256 -0
- package/dist/0-face/feedback-words.d.ts +21 -0
- package/dist/0-face/feedback-words.d.ts.map +1 -0
- package/dist/0-face/feedback-words.js +30 -0
- package/dist/0-face/feedback.d.ts +41 -0
- package/dist/0-face/feedback.d.ts.map +1 -0
- package/dist/0-face/feedback.js +35 -0
- package/dist/0-face/format.d.ts +166 -0
- package/dist/0-face/format.d.ts.map +1 -0
- package/dist/0-face/format.js +445 -0
- package/dist/0-face/generated/toast-assets.d.ts +11 -0
- package/dist/0-face/generated/toast-assets.d.ts.map +1 -0
- package/dist/0-face/generated/toast-assets.js +14 -0
- package/dist/0-face/grid-fit.js +1 -1
- package/dist/0-face/grid.d.ts.map +1 -1
- package/dist/0-face/grid.js +2 -1
- package/dist/0-face/header.d.ts +38 -0
- package/dist/0-face/header.d.ts.map +1 -0
- package/dist/0-face/header.js +80 -0
- package/dist/0-face/i18n.d.ts +32 -2
- package/dist/0-face/i18n.d.ts.map +1 -1
- package/dist/0-face/i18n.js +65 -19
- package/dist/0-face/keys.d.ts +104 -0
- package/dist/0-face/keys.d.ts.map +1 -0
- package/dist/0-face/keys.js +253 -0
- package/dist/0-face/languages.d.ts +2 -2
- package/dist/0-face/languages.js +3 -3
- package/dist/0-face/layout-inspector.js +6 -6
- package/dist/0-face/library-styles.d.ts +7 -0
- package/dist/0-face/library-styles.d.ts.map +1 -0
- package/dist/0-face/library-styles.js +29 -0
- package/dist/0-face/load-toaster.d.ts +8 -0
- package/dist/0-face/load-toaster.d.ts.map +1 -0
- package/dist/0-face/load-toaster.js +7 -0
- package/dist/0-face/preference-options.d.ts +34 -0
- package/dist/0-face/preference-options.d.ts.map +1 -0
- package/dist/0-face/preference-options.js +1 -0
- package/dist/0-face/preferences.d.ts +3 -12
- package/dist/0-face/preferences.d.ts.map +1 -1
- package/dist/0-face/pricing.d.ts +19 -9
- package/dist/0-face/pricing.d.ts.map +1 -1
- package/dist/0-face/pricing.js +81 -40
- package/dist/0-face/scaling.d.ts +71 -1
- package/dist/0-face/scaling.d.ts.map +1 -1
- package/dist/0-face/scaling.js +108 -3
- package/dist/0-face/shared-words.d.ts +9 -4
- package/dist/0-face/shared-words.d.ts.map +1 -1
- package/dist/0-face/sidebar.d.ts +69 -0
- package/dist/0-face/sidebar.d.ts.map +1 -0
- package/dist/0-face/sidebar.js +191 -0
- package/dist/0-face/theme-bootstrap.d.ts +1 -0
- package/dist/0-face/theme-bootstrap.d.ts.map +1 -0
- package/dist/0-face/theme-bootstrap.js +214 -0
- package/dist/0-face/theme.d.ts +32 -0
- package/dist/0-face/theme.d.ts.map +1 -1
- package/dist/0-face/theme.js +69 -43
- package/dist/0-face/toast-queue.d.ts +110 -0
- package/dist/0-face/toast-queue.d.ts.map +1 -0
- package/dist/0-face/toast-queue.js +98 -0
- package/dist/0-face/toaster.d.ts +27 -0
- package/dist/0-face/toaster.d.ts.map +1 -0
- package/dist/0-face/toaster.js +373 -0
- package/dist/0-face/tooltips.d.ts +24 -1
- package/dist/0-face/tooltips.d.ts.map +1 -1
- package/dist/0-face/tooltips.js +155 -16
- package/dist/0-face/translations/da.json +60 -1
- package/dist/0-face/translations/de.json +60 -1
- package/dist/0-face/translations/en.json +60 -1
- package/dist/0-face/translations/es.json +60 -1
- package/dist/0-face/translations/fi.json +60 -1
- package/dist/0-face/translations/fr.json +60 -1
- package/dist/0-face/translations/is.json +60 -1
- package/dist/0-face/translations/it.json +60 -1
- package/dist/0-face/translations/ja.json +60 -1
- package/dist/0-face/translations/ko.json +60 -1
- package/dist/0-face/translations/nb.json +60 -1
- package/dist/0-face/translations/pt-BR.json +60 -1
- package/dist/0-face/translations/pt.json +60 -1
- package/dist/0-face/translations/sv.json +60 -1
- package/dist/0-face/translations/zh.json +60 -1
- package/dist/0-face/translations-format.d.ts.map +1 -1
- package/dist/0-face/translations-format.js +3 -4
- package/dist/0-face/tree.d.ts +69 -0
- package/dist/0-face/tree.d.ts.map +1 -0
- package/dist/0-face/tree.js +191 -0
- package/dist/1-root/library-tokens.d.ts +31 -0
- package/dist/1-root/library-tokens.d.ts.map +1 -0
- package/dist/1-root/library-tokens.js +84 -0
- package/dist/1-root/measures.d.ts +52 -0
- package/dist/1-root/measures.d.ts.map +1 -0
- package/dist/1-root/measures.js +49 -0
- package/dist/1-root/palette.d.ts +5 -0
- package/dist/1-root/palette.d.ts.map +1 -1
- package/dist/1-root/palette.js +18 -0
- package/dist/2-core/button-split.d.ts +21 -0
- package/dist/2-core/button-split.d.ts.map +1 -0
- package/dist/2-core/button-split.js +48 -0
- package/dist/2-core/chart/grid-chart.d.ts +113 -0
- package/dist/2-core/chart/grid-chart.d.ts.map +1 -0
- package/dist/2-core/chart/grid-chart.js +466 -0
- package/dist/2-core/ds-avatar.d.ts +20 -3
- package/dist/2-core/ds-avatar.d.ts.map +1 -1
- package/dist/2-core/ds-avatar.js +19 -5
- package/dist/2-core/ds-badge.js +10 -13
- package/dist/2-core/ds-banner.d.ts +23 -7
- package/dist/2-core/ds-banner.d.ts.map +1 -1
- package/dist/2-core/ds-banner.js +48 -12
- package/dist/2-core/ds-button.d.ts +76 -0
- package/dist/2-core/ds-button.d.ts.map +1 -1
- package/dist/2-core/ds-button.js +101 -26
- package/dist/2-core/ds-card.d.ts +76 -11
- package/dist/2-core/ds-card.d.ts.map +1 -1
- package/dist/2-core/ds-card.js +129 -105
- package/dist/2-core/ds-chart.d.ts +105 -0
- package/dist/2-core/ds-chart.d.ts.map +1 -0
- package/dist/2-core/ds-chart.js +390 -0
- package/dist/2-core/ds-composer.d.ts +7 -0
- package/dist/2-core/ds-composer.d.ts.map +1 -1
- package/dist/2-core/ds-composer.js +1 -1
- package/dist/2-core/ds-cycle.d.ts +36 -2
- package/dist/2-core/ds-cycle.d.ts.map +1 -1
- package/dist/2-core/ds-cycle.js +95 -18
- package/dist/2-core/ds-empty.d.ts +74 -0
- package/dist/2-core/ds-empty.d.ts.map +1 -0
- package/dist/2-core/ds-empty.js +96 -0
- package/dist/2-core/ds-icon.d.ts +6 -0
- package/dist/2-core/ds-icon.d.ts.map +1 -1
- package/dist/2-core/ds-icon.js +12 -2
- package/dist/2-core/ds-input.d.ts +39 -1
- package/dist/2-core/ds-input.d.ts.map +1 -1
- package/dist/2-core/ds-input.js +150 -6
- package/dist/2-core/ds-kbd.d.ts +48 -0
- package/dist/2-core/ds-kbd.d.ts.map +1 -0
- package/dist/2-core/ds-kbd.js +65 -0
- package/dist/2-core/ds-language.d.ts +8 -1
- package/dist/2-core/ds-language.d.ts.map +1 -1
- package/dist/2-core/ds-language.js +2 -2
- package/dist/2-core/ds-loading.d.ts +40 -0
- package/dist/2-core/ds-loading.d.ts.map +1 -0
- package/dist/2-core/ds-loading.js +63 -0
- package/dist/2-core/ds-meter.d.ts +103 -0
- package/dist/2-core/ds-meter.d.ts.map +1 -0
- package/dist/2-core/ds-meter.js +124 -0
- package/dist/2-core/ds-notice.d.ts +103 -0
- package/dist/2-core/ds-notice.d.ts.map +1 -0
- package/dist/2-core/ds-notice.js +152 -0
- package/dist/2-core/ds-pagedots.d.ts +64 -7
- package/dist/2-core/ds-pagedots.d.ts.map +1 -1
- package/dist/2-core/ds-pagedots.js +124 -18
- package/dist/2-core/ds-progress.d.ts +200 -0
- package/dist/2-core/ds-progress.d.ts.map +1 -0
- package/dist/2-core/ds-progress.js +319 -0
- package/dist/2-core/ds-spacing-handle.d.ts +25 -0
- package/dist/2-core/ds-spacing-handle.d.ts.map +1 -0
- package/dist/2-core/ds-spacing-handle.js +25 -0
- package/dist/2-core/ds-split.d.ts +4 -67
- package/dist/2-core/ds-split.d.ts.map +1 -1
- package/dist/2-core/ds-split.js +4 -98
- package/dist/2-core/ds-stat.d.ts +126 -0
- package/dist/2-core/ds-stat.d.ts.map +1 -0
- package/dist/2-core/ds-stat.js +137 -0
- package/dist/2-core/ds-steps.d.ts +72 -0
- package/dist/2-core/ds-steps.d.ts.map +1 -0
- package/dist/2-core/ds-steps.js +114 -0
- package/dist/2-core/ds-switch.d.ts +1 -0
- package/dist/2-core/ds-switch.d.ts.map +1 -1
- package/dist/2-core/ds-switch.js +1 -0
- package/dist/2-core/ds-text.d.ts +15 -2
- package/dist/2-core/ds-text.d.ts.map +1 -1
- package/dist/2-core/ds-text.js +13 -0
- package/dist/2-core/ds-textarea.d.ts.map +1 -1
- package/dist/2-core/ds-textarea.js +1 -0
- package/dist/2-core/ds-toast.d.ts +139 -0
- package/dist/2-core/ds-toast.d.ts.map +1 -0
- package/dist/2-core/ds-toast.js +329 -0
- package/dist/2-core/ds-toggle.d.ts +11 -0
- package/dist/2-core/ds-toggle.d.ts.map +1 -0
- package/dist/2-core/ds-toggle.js +10 -0
- package/dist/2-core/figures.d.ts +56 -0
- package/dist/2-core/figures.d.ts.map +1 -0
- package/dist/2-core/figures.js +70 -0
- package/dist/2-core/generated/ds-icon-map.d.ts +118 -65
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
- package/dist/2-core/generated/ds-icon-map.js +234 -128
- package/dist/2-core/generated/icon-avatar.d.ts +2 -0
- package/dist/2-core/generated/icon-avatar.d.ts.map +1 -0
- package/dist/2-core/generated/icon-avatar.js +2 -0
- package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
- package/dist/2-core/generated/icons-extra.js +118 -65
- package/dist/2-core/generated/icons-immediate.d.ts +1 -1
- package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
- package/dist/2-core/generated/icons-immediate.js +1 -1
- package/dist/2-core/spacing-handle.d.ts +28 -0
- package/dist/2-core/spacing-handle.d.ts.map +1 -0
- package/dist/2-core/spacing-handle.js +146 -0
- package/dist/3-unit/calendar-base.d.ts +149 -0
- package/dist/3-unit/calendar-base.d.ts.map +1 -0
- package/dist/3-unit/calendar-base.js +172 -0
- package/dist/3-unit/ds-accordion.d.ts +9 -0
- package/dist/3-unit/ds-accordion.d.ts.map +1 -1
- package/dist/3-unit/ds-accordion.js +7 -1
- package/dist/3-unit/ds-avatar-group.d.ts +1 -0
- package/dist/3-unit/ds-avatar-group.d.ts.map +1 -1
- package/dist/3-unit/ds-calendar-large.d.ts +138 -0
- package/dist/3-unit/ds-calendar-large.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar-large.js +305 -0
- package/dist/3-unit/ds-calendar.d.ts +175 -0
- package/dist/3-unit/ds-calendar.d.ts.map +1 -0
- package/dist/3-unit/ds-calendar.js +303 -0
- package/dist/3-unit/ds-carousel.d.ts +182 -0
- package/dist/3-unit/ds-carousel.d.ts.map +1 -0
- package/dist/3-unit/ds-carousel.js +327 -0
- package/dist/3-unit/ds-date-picker.d.ts +203 -0
- package/dist/3-unit/ds-date-picker.d.ts.map +1 -0
- package/dist/3-unit/ds-date-picker.js +499 -0
- package/dist/3-unit/ds-form.d.ts.map +1 -1
- package/dist/3-unit/ds-form.js +38 -28
- package/dist/3-unit/ds-list.d.ts +12 -0
- package/dist/3-unit/ds-list.d.ts.map +1 -1
- package/dist/3-unit/ds-list.js +52 -1
- package/dist/3-unit/ds-matrix.d.ts +146 -0
- package/dist/3-unit/ds-matrix.d.ts.map +1 -0
- package/dist/3-unit/ds-matrix.js +248 -0
- package/dist/3-unit/ds-menu.d.ts +1 -1
- package/dist/3-unit/ds-menu.d.ts.map +1 -1
- package/dist/3-unit/ds-menu.js +7 -4
- package/dist/3-unit/ds-row.d.ts +66 -0
- package/dist/3-unit/ds-row.d.ts.map +1 -1
- package/dist/3-unit/ds-row.js +80 -1
- package/dist/3-unit/ds-sidebar.d.ts +108 -0
- package/dist/3-unit/ds-sidebar.d.ts.map +1 -0
- package/dist/3-unit/ds-sidebar.js +268 -0
- package/dist/3-unit/ds-table.d.ts +28 -10
- package/dist/3-unit/ds-table.d.ts.map +1 -1
- package/dist/3-unit/ds-table.js +53 -25
- package/dist/3-unit/ds-tree.d.ts +69 -0
- package/dist/3-unit/ds-tree.d.ts.map +1 -0
- package/dist/3-unit/ds-tree.js +136 -0
- package/dist/4-page/ds-dialog.d.ts +16 -1
- package/dist/4-page/ds-dialog.d.ts.map +1 -1
- package/dist/4-page/ds-dialog.js +39 -3
- package/dist/4-page/ds-document.d.ts +98 -0
- package/dist/4-page/ds-document.d.ts.map +1 -0
- package/dist/4-page/ds-document.js +213 -0
- package/dist/4-page/ds-footer.d.ts +100 -0
- package/dist/4-page/ds-footer.d.ts.map +1 -0
- package/dist/4-page/ds-footer.js +119 -0
- package/dist/4-page/ds-grid.d.ts +32 -12
- package/dist/4-page/ds-grid.d.ts.map +1 -1
- package/dist/4-page/ds-grid.js +30 -39
- package/dist/4-page/ds-header.d.ts +84 -0
- package/dist/4-page/ds-header.d.ts.map +1 -0
- package/dist/4-page/ds-header.js +143 -0
- package/dist/4-page/ds-layout.d.ts +1 -0
- package/dist/4-page/ds-layout.d.ts.map +1 -1
- package/dist/4-page/ds-layout.js +1 -1
- package/dist/4-page/ds-page.d.ts +110 -0
- package/dist/4-page/ds-page.d.ts.map +1 -0
- package/dist/4-page/ds-page.js +155 -0
- package/dist/4-page/email.d.ts +2 -3
- package/dist/4-page/email.d.ts.map +1 -1
- package/dist/4-page/email.js +2 -3
- package/dist/components.d.ts +4 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -1
- package/dist/design-system-1.bundle.js +11304 -4322
- package/dist/design-system-1.bundle.js.map +1 -1
- package/dist/design-system-1.bundle.min.js +8867 -4132
- package/dist/design-system-1.bundle.min.js.map +1 -1
- package/dist/design-system-1.css +1 -1
- package/dist/feedback.js +541 -0
- package/dist/feedback.js.map +1 -0
- package/dist/icons-extra-B4Iotc7s.js +298 -0
- package/dist/icons-extra-B4Iotc7s.js.map +1 -0
- package/dist/icons-extra-C4sCgoUj.js +185 -0
- package/dist/icons-extra-C4sCgoUj.js.map +1 -0
- package/dist/icons-extra-DSav6uTU.js +300 -0
- package/dist/icons-extra-DSav6uTU.js.map +1 -0
- package/dist/icons-extra-Dc_yVWIz.js +1024 -0
- package/dist/icons-extra-Dc_yVWIz.js.map +1 -0
- package/dist/icons-extra-cfzoudMf.js +1030 -0
- package/dist/icons-extra-cfzoudMf.js.map +1 -0
- package/dist/icons-extra-g_xpwZhZ.js +631 -0
- package/dist/icons-extra-g_xpwZhZ.js.map +1 -0
- package/dist/index.d.ts +23 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -6
- package/dist/react/avatar.d.ts +5 -9
- package/dist/react/avatar.d.ts.map +1 -1
- package/dist/react/avatar.js +2 -2
- package/dist/react/button-split.d.ts +19 -0
- package/dist/react/button-split.d.ts.map +1 -0
- package/dist/react/button-split.js +35 -0
- package/dist/react/button.d.ts +18 -7
- package/dist/react/button.d.ts.map +1 -1
- package/dist/react/button.js +13 -4
- package/dist/react/carousel.d.ts +63 -0
- package/dist/react/carousel.d.ts.map +1 -0
- package/dist/react/carousel.js +47 -0
- package/dist/react/choice.d.ts +1 -1
- package/dist/react/context-menu.d.ts +337 -337
- package/dist/react/dialog.d.ts +684 -678
- package/dist/react/dialog.d.ts.map +1 -1
- package/dist/react/dialog.js +29 -3
- package/dist/react/document.d.ts +11 -0
- package/dist/react/document.d.ts.map +1 -0
- package/dist/react/document.js +10 -0
- package/dist/react/empty.d.ts +34 -0
- package/dist/react/empty.d.ts.map +1 -0
- package/dist/react/empty.js +8 -0
- package/dist/react/file-picker.d.ts +1 -1
- package/dist/react/footer.d.ts +13 -0
- package/dist/react/footer.d.ts.map +1 -0
- package/dist/react/footer.js +12 -0
- package/dist/react/header.d.ts +12 -0
- package/dist/react/header.d.ts.map +1 -0
- package/dist/react/header.js +11 -0
- package/dist/react/input.d.ts +31 -9
- package/dist/react/input.d.ts.map +1 -1
- package/dist/react/input.js +94 -94
- package/dist/react/kbd.d.ts +26 -0
- package/dist/react/kbd.d.ts.map +1 -0
- package/dist/react/kbd.js +8 -0
- package/dist/react/loading.d.ts +14 -0
- package/dist/react/loading.d.ts.map +1 -0
- package/dist/react/loading.js +14 -0
- package/dist/react/meter.d.ts +64 -0
- package/dist/react/meter.d.ts.map +1 -0
- package/dist/react/meter.js +15 -0
- package/dist/react/notice.d.ts +45 -0
- package/dist/react/notice.d.ts.map +1 -0
- package/dist/react/notice.js +34 -0
- package/dist/react/page.d.ts +10 -0
- package/dist/react/page.d.ts.map +1 -0
- package/dist/react/page.js +9 -0
- package/dist/react/progress.d.ts +107 -0
- package/dist/react/progress.d.ts.map +1 -0
- package/dist/react/progress.js +47 -0
- package/dist/react/sidebar.d.ts +44 -0
- package/dist/react/sidebar.d.ts.map +1 -0
- package/dist/react/sidebar.js +41 -0
- package/dist/react/spacing-handle.d.ts +13 -0
- package/dist/react/spacing-handle.d.ts.map +1 -0
- package/dist/react/spacing-handle.js +18 -0
- package/dist/react/split.d.ts +6 -14
- package/dist/react/split.d.ts.map +1 -1
- package/dist/react/split.js +5 -31
- package/dist/react/stat.d.ts +78 -0
- package/dist/react/stat.d.ts.map +1 -0
- package/dist/react/stat.js +25 -0
- package/dist/react/steps.d.ts +36 -0
- package/dist/react/steps.d.ts.map +1 -0
- package/dist/react/steps.js +10 -0
- package/dist/react/toast.d.ts +37 -0
- package/dist/react/toast.d.ts.map +1 -0
- package/dist/react/toast.js +55 -0
- package/dist/react/tree.d.ts +31 -0
- package/dist/react/tree.d.ts.map +1 -0
- package/dist/react/tree.js +37 -0
- package/dist/shared-words-BfnT24Fe.js +1635 -0
- package/dist/shared-words-BfnT24Fe.js.map +1 -0
- package/dist/shared-words-CyZYc_De.js +1818 -0
- package/dist/shared-words-CyZYc_De.js.map +1 -0
- package/dist/shared-words-DAVSET4Z.js +1800 -0
- package/dist/shared-words-DAVSET4Z.js.map +1 -0
- package/dist/shared-words-UCvnkctb.js +1653 -0
- package/dist/shared-words-UCvnkctb.js.map +1 -0
- package/package.json +16 -5
- package/DS1/2-core/ds-banner.ts +0 -122
- package/DS1/2-core/ds-date.ts +0 -24
- package/DS1/2-core/ds-language.ts +0 -94
- package/DS1/2-core/ds-pagedots.ts +0 -52
- package/DS1/2-core/ds-split.ts +0 -122
- package/DS1/2-core/ds-textarea.ts +0 -136
- package/DS1/2-core/styles/ds-banner.css +0 -77
- package/DS1/2-core/styles/ds-date.css +0 -9
- package/DS1/2-core/styles/ds-language.css +0 -78
- package/DS1/2-core/styles/ds-pagedots.css +0 -31
- package/DS1/2-core/styles/ds-textarea.css +0 -27
- package/DS1/4-page/ds-layout.ts +0 -949
- package/DS1/4-page/styles/ds-layout.css +0 -246
- package/DS1/react/split.ts +0 -42
- package/DS1/x-icon/ezo-accordion-chevron.svg +0 -11
- package/DS1/x-icon/ezo-account-close.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-archive.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-calendar.svg +0 -6
- package/DS1/x-icon/ezo-android-screen-camera.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-check.svg +0 -3
- package/DS1/x-icon/ezo-android-screen-compose.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-globe.svg +0 -1
- package/DS1/x-icon/ezo-android-screen-shared.svg +0 -5
- package/DS1/x-icon/ezo-android-screen-store.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-views.svg +0 -4
- package/DS1/x-icon/ezo-android-screen-work.svg +0 -3
- package/DS1/x-icon/ezo-arrow-cursor.svg +0 -8
- package/DS1/x-icon/ezo-block-accordion.svg +0 -1
- package/DS1/x-icon/ezo-block-divider.svg +0 -1
- package/DS1/x-icon/ezo-block-group.svg +0 -1
- package/DS1/x-icon/ezo-block-image.svg +0 -1
- package/DS1/x-icon/ezo-block-section.svg +0 -1
- package/DS1/x-icon/ezo-block-table.svg +0 -1
- package/DS1/x-icon/ezo-code.svg +0 -14
- package/DS1/x-icon/ezo-down.svg +0 -3
- package/DS1/x-icon/ezo-figma-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-item-button-complete.svg +0 -4
- package/DS1/x-icon/ezo-item-button-header.svg +0 -3
- package/DS1/x-icon/ezo-item-button-open.svg +0 -3
- package/DS1/x-icon/ezo-item-button-star.svg +0 -3
- package/DS1/x-icon/ezo-item-button-unheader.svg +0 -7
- package/DS1/x-icon/ezo-item-button-unstar.svg +0 -5
- package/DS1/x-icon/ezo-item-star.svg +0 -5
- package/DS1/x-icon/ezo-left.svg +0 -3
- package/DS1/x-icon/ezo-logo.svg +0 -1
- package/DS1/x-icon/ezo-mic.svg +0 -8
- package/DS1/x-icon/ezo-move-column.svg +0 -14
- package/DS1/x-icon/ezo-move-row.svg +0 -18
- package/DS1/x-icon/ezo-navigation-check.svg +0 -1
- package/DS1/x-icon/ezo-note-back.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-complete.svg +0 -11
- package/DS1/x-icon/ezo-note-menu-delete.svg +0 -4
- package/DS1/x-icon/ezo-note-menu-duplicate.svg +0 -8
- package/DS1/x-icon/ezo-note-menu-note.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-page.svg +0 -3
- package/DS1/x-icon/ezo-note-menu-star.svg +0 -5
- package/DS1/x-icon/ezo-note-menu-start.svg +0 -6
- package/DS1/x-icon/ezo-note-menu-stop.svg +0 -6
- package/DS1/x-icon/ezo-note-more.svg +0 -7
- package/DS1/x-icon/ezo-note-star.svg +0 -5
- package/DS1/x-icon/ezo-pattern-call-to-action.svg +0 -1
- package/DS1/x-icon/ezo-play.svg +0 -5
- package/DS1/x-icon/ezo-premium-star.svg +0 -5
- package/DS1/x-icon/ezo-setting-1xdots.svg +0 -13
- package/DS1/x-icon/ezo-setting-1xgrid.svg +0 -10
- package/DS1/x-icon/ezo-setting-1xlines.svg +0 -7
- package/DS1/x-icon/ezo-setting-2xdots.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xgrid.svg +0 -8
- package/DS1/x-icon/ezo-setting-2xlines.svg +0 -6
- package/DS1/x-icon/ezo-setting-blank.svg +0 -5
- package/DS1/x-icon/ezo-store-chevron.svg +0 -1
- package/DS1/x-icon/ezo-upgrade-close.svg +0 -5
- package/DS1/x-icon/product-sources.json +0 -2557
- /package/DS1/x-icon/{ezo-password-visibility-see.svg → password-see.svg} +0 -0
- /package/DS1/x-icon/{ezo-password-visibility-unsee.svg → password-unsee.svg} +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// ds-document.ts
|
|
2
|
+
// A document page (terms, a privacy policy, a legal notice, a help article):
|
|
3
|
+
// the writing as prose, with contents built from its headings that mark the
|
|
4
|
+
// section in view. Drawn by 1-root/document.css, the same classes a page
|
|
5
|
+
// without scripts writes; the writing stays in the page and prose.css draws it.
|
|
6
|
+
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
7
|
+
import { getText } from "../0-face/i18n";
|
|
8
|
+
import { define } from "../0-face/define";
|
|
9
|
+
import metrics from "../1-root/component-metrics.css?inline";
|
|
10
|
+
import documentSheet from "../1-root/document.css?inline";
|
|
11
|
+
import documentRules from "../1-root/document.css?raw";
|
|
12
|
+
import proseRules from "../1-root/prose.css?raw";
|
|
13
|
+
import styles from "./styles/ds-document.css?inline";
|
|
14
|
+
/** The shared word over the contents. */
|
|
15
|
+
export const CONTENTS_LABEL = "Contents";
|
|
16
|
+
/**
|
|
17
|
+
* An id for a heading from its words: letters and digits in any script,
|
|
18
|
+
* joined by hyphens, unique among `taken`. Words with none of either get
|
|
19
|
+
* `section-<n>`.
|
|
20
|
+
*/
|
|
21
|
+
export function headingId(text, taken, index) {
|
|
22
|
+
const base = text.normalize("NFKC").toLowerCase().trim().replace(/[^\p{L}\p{N}]+/gu, "-").replace(/^-+|-+$/g, "") || `section-${index + 1}`;
|
|
23
|
+
let id = base;
|
|
24
|
+
for (let n = 2; taken.has(id); n++)
|
|
25
|
+
id = `${base}-${n}`;
|
|
26
|
+
taken.add(id);
|
|
27
|
+
return id;
|
|
28
|
+
}
|
|
29
|
+
/** The heading levels an attribute names, between 2 and 6: `2` by default, `2 3` for two levels. */
|
|
30
|
+
export function documentLevels(value) {
|
|
31
|
+
const levels = [...new Set(String(value ?? "2").split(/[\s,]+/).map(Number).filter(level => Number.isInteger(level) && level >= 2 && level <= 6))].sort();
|
|
32
|
+
return levels.length ? levels : [2];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The rules for the writing, which stands in the page: prose.css and the
|
|
36
|
+
* definition table, adopted once per root the element stands in. Their
|
|
37
|
+
* imports (the tokens) are left out: the element's host carries the measures,
|
|
38
|
+
* and the writing inherits them.
|
|
39
|
+
*/
|
|
40
|
+
const styledRoots = new WeakSet();
|
|
41
|
+
function styleRoot(root) {
|
|
42
|
+
const target = root instanceof ShadowRoot ? root : root instanceof Document ? root : null;
|
|
43
|
+
if (!target || styledRoots.has(target) || typeof CSSStyleSheet === "undefined" || !("adoptedStyleSheets" in target))
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
const sheet = new CSSStyleSheet();
|
|
47
|
+
sheet.replaceSync([proseRules, documentRules].map(css => css.replace(/^@import[^;]*;\s*$/gm, "")).join("\n"));
|
|
48
|
+
target.adoptedStyleSheets = [...target.adoptedStyleSheets, sheet];
|
|
49
|
+
styledRoots.add(target);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// A browser without constructable sheets keeps the page's own copy of prose.css.
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @element ds-document
|
|
57
|
+
* @prop {string} levels - The heading levels the contents list: `2` by default, `2 3` for two.
|
|
58
|
+
* @prop {string} label - The contents' title: a translation key, the shared word "Contents" by default.
|
|
59
|
+
* @prop {boolean} literal - Show `label` as written, never looked up.
|
|
60
|
+
* @prop {boolean} hideContents - Leave the contents out (`hide-contents`).
|
|
61
|
+
*
|
|
62
|
+
* @slot - The writing: native headings, paragraphs, lists, tables and a
|
|
63
|
+
* definition table (`<dl class="ds-definitions">`), as prose. The element
|
|
64
|
+
* marks itself `data-ds-prose` and brings the prose sheet.
|
|
65
|
+
* @slot contents - Contents of the page's own, in place of the built ones.
|
|
66
|
+
*
|
|
67
|
+
* The contents list the writing's headings at `levels`, giving a heading an
|
|
68
|
+
* id from its words when it has none. A link scrolls to its heading, and the
|
|
69
|
+
* section in view is marked `aria-current="location"`. With fewer than two
|
|
70
|
+
* headings there are no contents.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* <ds-document>
|
|
74
|
+
* <h1>Terms</h1>
|
|
75
|
+
* <h2>Using the service</h2><p>…</p>
|
|
76
|
+
* <h2>Payments</h2><p>…</p>
|
|
77
|
+
* </ds-document>
|
|
78
|
+
*/
|
|
79
|
+
export class DocumentPage extends LitElement {
|
|
80
|
+
constructor() {
|
|
81
|
+
super();
|
|
82
|
+
this.relabel = () => this.requestUpdate();
|
|
83
|
+
this.observer = null;
|
|
84
|
+
this.frame = 0;
|
|
85
|
+
/**
|
|
86
|
+
* The section in view: the last heading at or above a fifth of the way down
|
|
87
|
+
* the view, or, scrolled to the foot of the page, the last heading in view.
|
|
88
|
+
*/
|
|
89
|
+
this.onScroll = () => {
|
|
90
|
+
cancelAnimationFrame(this.frame);
|
|
91
|
+
this.frame = requestAnimationFrame(() => {
|
|
92
|
+
const view = window.innerHeight || 0;
|
|
93
|
+
// At the foot of the page the last sections cannot reach the line: the last one in view is current.
|
|
94
|
+
const end = document.documentElement;
|
|
95
|
+
const line = view && window.scrollY > 0 && window.scrollY + view >= end.scrollHeight - 1 ? view : view / 5;
|
|
96
|
+
let current = null;
|
|
97
|
+
for (const entry of this.entries) {
|
|
98
|
+
const heading = this.heading(entry.id);
|
|
99
|
+
if (!heading)
|
|
100
|
+
continue;
|
|
101
|
+
if (heading.getBoundingClientRect().top <= line)
|
|
102
|
+
current = entry.id;
|
|
103
|
+
else
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
this.current = current ?? this.entries[0]?.id ?? null;
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
this.levels = "2";
|
|
110
|
+
this.literal = false;
|
|
111
|
+
this.hideContents = false;
|
|
112
|
+
this.entries = [];
|
|
113
|
+
this.current = null;
|
|
114
|
+
}
|
|
115
|
+
connectedCallback() {
|
|
116
|
+
super.connectedCallback();
|
|
117
|
+
styleRoot(this.getRootNode());
|
|
118
|
+
if (!this.hasAttribute("data-ds-prose"))
|
|
119
|
+
this.setAttribute("data-ds-prose", "");
|
|
120
|
+
window.addEventListener("language-changed", this.relabel);
|
|
121
|
+
window.addEventListener("translations-loaded", this.relabel);
|
|
122
|
+
document.addEventListener("scroll", this.onScroll, { capture: true, passive: true });
|
|
123
|
+
window.addEventListener("resize", this.onScroll, { passive: true });
|
|
124
|
+
this.observer = new MutationObserver(() => this.collect());
|
|
125
|
+
this.observer.observe(this, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ["id"] });
|
|
126
|
+
this.collect();
|
|
127
|
+
}
|
|
128
|
+
disconnectedCallback() {
|
|
129
|
+
window.removeEventListener("language-changed", this.relabel);
|
|
130
|
+
window.removeEventListener("translations-loaded", this.relabel);
|
|
131
|
+
document.removeEventListener("scroll", this.onScroll, { capture: true });
|
|
132
|
+
window.removeEventListener("resize", this.onScroll);
|
|
133
|
+
this.observer?.disconnect();
|
|
134
|
+
this.observer = null;
|
|
135
|
+
cancelAnimationFrame(this.frame);
|
|
136
|
+
super.disconnectedCallback();
|
|
137
|
+
}
|
|
138
|
+
willUpdate(changed) {
|
|
139
|
+
if (changed.has("levels") && this.hasUpdated)
|
|
140
|
+
this.collect();
|
|
141
|
+
}
|
|
142
|
+
/** The headings the contents list, in the order they stand. */
|
|
143
|
+
get headings() {
|
|
144
|
+
const levels = documentLevels(this.levels);
|
|
145
|
+
return [...this.querySelectorAll(levels.map(level => `h${level}`).join(","))]
|
|
146
|
+
.filter(heading => !heading.closest("[data-ds-not-prose]") && !heading.closest('[slot="contents"]'));
|
|
147
|
+
}
|
|
148
|
+
/** Reads the headings again: their words, levels and ids. */
|
|
149
|
+
collect() {
|
|
150
|
+
const taken = new Set([...this.querySelectorAll("[id]")].map(element => element.id));
|
|
151
|
+
const entries = this.headings.map((heading, index) => {
|
|
152
|
+
const text = (heading.textContent ?? "").replace(/\s+/g, " ").trim();
|
|
153
|
+
if (!heading.id) {
|
|
154
|
+
// Writing an id is a change the observer would hear; it reads the same.
|
|
155
|
+
heading.id = headingId(text, taken, index);
|
|
156
|
+
}
|
|
157
|
+
return { id: heading.id, text, level: Number(heading.tagName.slice(1)) };
|
|
158
|
+
});
|
|
159
|
+
const same = entries.length === this.entries.length && entries.every((entry, i) => entry.id === this.entries[i].id && entry.text === this.entries[i].text && entry.level === this.entries[i].level);
|
|
160
|
+
if (!same)
|
|
161
|
+
this.entries = entries;
|
|
162
|
+
this.onScroll();
|
|
163
|
+
}
|
|
164
|
+
heading(id) {
|
|
165
|
+
return this.headings.find(heading => heading.id === id);
|
|
166
|
+
}
|
|
167
|
+
follow(event, id) {
|
|
168
|
+
if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)
|
|
169
|
+
return;
|
|
170
|
+
const heading = this.heading(id);
|
|
171
|
+
if (!heading)
|
|
172
|
+
return;
|
|
173
|
+
event.preventDefault();
|
|
174
|
+
const smooth = !window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
175
|
+
heading.scrollIntoView({ block: "start", behavior: smooth ? "smooth" : "auto" });
|
|
176
|
+
if (!heading.hasAttribute("tabindex"))
|
|
177
|
+
heading.setAttribute("tabindex", "-1");
|
|
178
|
+
heading.focus({ preventScroll: true });
|
|
179
|
+
history.replaceState(history.state, "", `#${id}`);
|
|
180
|
+
this.current = id;
|
|
181
|
+
}
|
|
182
|
+
render() {
|
|
183
|
+
const label = this.literal ? this.label || CONTENTS_LABEL : getText(this.label || CONTENTS_LABEL) || this.label || CONTENTS_LABEL;
|
|
184
|
+
const top = Math.min(...this.entries.map(entry => entry.level));
|
|
185
|
+
const own = [...this.children].some(child => child.getAttribute("slot") === "contents");
|
|
186
|
+
const showContents = !this.hideContents && (own || this.entries.length >= 2);
|
|
187
|
+
return html `<div class="ds-document" part="document">
|
|
188
|
+
<nav class="ds-document__toc" part="contents" aria-labelledby="contents-title" ?hidden=${!showContents}>
|
|
189
|
+
<div class="ds-document__contents">
|
|
190
|
+
<p class="ds-document__toc-title" id="contents-title" part="contents-title">${label}</p>
|
|
191
|
+
<slot name="contents" @slotchange=${this.relabel}>
|
|
192
|
+
<ol class="ds-document__toc-list" part="contents-list">
|
|
193
|
+
${this.entries.map(entry => html `<li class=${entry.level > top ? "ds-document__toc-sub" : nothing}>
|
|
194
|
+
<a href="#${entry.id}" aria-current=${this.current === entry.id ? "location" : nothing} @click=${(event) => this.follow(event, entry.id)}>${entry.text}</a>
|
|
195
|
+
</li>`)}
|
|
196
|
+
</ol>
|
|
197
|
+
</slot>
|
|
198
|
+
</div>
|
|
199
|
+
</nav>
|
|
200
|
+
<div class="ds-document__body" part="body"><slot></slot></div>
|
|
201
|
+
</div>`;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
DocumentPage.properties = {
|
|
205
|
+
levels: { type: String },
|
|
206
|
+
label: { type: String },
|
|
207
|
+
literal: { type: Boolean, reflect: true },
|
|
208
|
+
hideContents: { type: Boolean, attribute: "hide-contents", reflect: true },
|
|
209
|
+
entries: { state: true },
|
|
210
|
+
current: { state: true },
|
|
211
|
+
};
|
|
212
|
+
DocumentPage.styles = [unsafeCSS(metrics), unsafeCSS(documentSheet), unsafeCSS(styles)];
|
|
213
|
+
define("ds-document", DocumentPage);
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
import "../2-core/ds-cycle";
|
|
3
|
+
/** A link in a footer column. */
|
|
4
|
+
export interface FooterLink {
|
|
5
|
+
/** The words: a translation key, or as written with the footer's `literal`. */
|
|
6
|
+
label: string;
|
|
7
|
+
href: string;
|
|
8
|
+
/** Opens elsewhere: in a new tab, with no referrer. */
|
|
9
|
+
external?: boolean;
|
|
10
|
+
/** The page being read: `aria-current="page"`. */
|
|
11
|
+
current?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** A footer column: a heading and its links. */
|
|
14
|
+
export interface FooterColumn {
|
|
15
|
+
heading?: string;
|
|
16
|
+
links: FooterLink[];
|
|
17
|
+
}
|
|
18
|
+
/** The settings a footer offers, each a `ds-cycle` of that type. */
|
|
19
|
+
export type FooterPreference = "language" | "theme";
|
|
20
|
+
/** The preferences named by an attribute: every one when it is present but empty. */
|
|
21
|
+
export declare function footerPreferences(value: string | null | undefined): FooterPreference[];
|
|
22
|
+
/**
|
|
23
|
+
* @element ds-footer
|
|
24
|
+
* @prop {string} brand - The site's name, a link home: a translation key, or
|
|
25
|
+
* the words as they stand with `literal`. The `brand` slot takes its place.
|
|
26
|
+
* @prop {string} href - Where the brand links. `/` by default.
|
|
27
|
+
* @prop {string} tagline - A line about the site under the brand.
|
|
28
|
+
* @prop {FooterColumn[]} columns - The columns of links, eight squares each.
|
|
29
|
+
* @prop {string} label - The columns' accessible name, as a navigation; without it they are plain lists.
|
|
30
|
+
* @prop {string} owner - Who holds the copyright: the brand by default.
|
|
31
|
+
* @prop {number} year - The copyright's year: this year by default.
|
|
32
|
+
* @prop {string} preferences - `language`, `theme` or both, as `ds-cycle`
|
|
33
|
+
* buttons at the end of the last row; present but empty, both.
|
|
34
|
+
* @prop {boolean} literal - Show the words as written, never looked up.
|
|
35
|
+
*
|
|
36
|
+
* @slot brand - The brand, when it is more than words: a logo, a link of the page's own.
|
|
37
|
+
* @slot preferences - Controls of the page's own beside or in place of the cycles.
|
|
38
|
+
* @slot legal - The last line, in place of the copyright.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* <ds-footer brand="Name" tagline="What it does" preferences literal
|
|
42
|
+
* columns='[{"heading":"Product","links":[{"label":"Download","href":"/download"}]}]'>
|
|
43
|
+
* </ds-footer>
|
|
44
|
+
*/
|
|
45
|
+
export declare class Footer extends LitElement {
|
|
46
|
+
static properties: {
|
|
47
|
+
brand: {
|
|
48
|
+
type: StringConstructor;
|
|
49
|
+
};
|
|
50
|
+
href: {
|
|
51
|
+
type: StringConstructor;
|
|
52
|
+
};
|
|
53
|
+
tagline: {
|
|
54
|
+
type: StringConstructor;
|
|
55
|
+
};
|
|
56
|
+
columns: {
|
|
57
|
+
type: ArrayConstructor;
|
|
58
|
+
};
|
|
59
|
+
label: {
|
|
60
|
+
type: StringConstructor;
|
|
61
|
+
};
|
|
62
|
+
owner: {
|
|
63
|
+
type: StringConstructor;
|
|
64
|
+
};
|
|
65
|
+
year: {
|
|
66
|
+
type: NumberConstructor;
|
|
67
|
+
};
|
|
68
|
+
preferences: {
|
|
69
|
+
type: StringConstructor;
|
|
70
|
+
};
|
|
71
|
+
literal: {
|
|
72
|
+
type: BooleanConstructor;
|
|
73
|
+
reflect: boolean;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
static styles: import("lit").CSSResult[];
|
|
77
|
+
brand: string | undefined;
|
|
78
|
+
href: string;
|
|
79
|
+
tagline: string | undefined;
|
|
80
|
+
columns: FooterColumn[];
|
|
81
|
+
label: string | undefined;
|
|
82
|
+
owner: string | undefined;
|
|
83
|
+
year: number | undefined;
|
|
84
|
+
preferences: string | null | undefined;
|
|
85
|
+
literal: boolean;
|
|
86
|
+
private readonly relabel;
|
|
87
|
+
constructor();
|
|
88
|
+
connectedCallback(): void;
|
|
89
|
+
disconnectedCallback(): void;
|
|
90
|
+
private words;
|
|
91
|
+
private slotted;
|
|
92
|
+
private link;
|
|
93
|
+
render(): import("lit").TemplateResult<1>;
|
|
94
|
+
}
|
|
95
|
+
declare global {
|
|
96
|
+
interface HTMLElementTagNameMap {
|
|
97
|
+
"ds-footer": Footer;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=ds-footer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ds-footer.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-footer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAA4B,MAAM,KAAK,CAAC;AAG3D,OAAO,oBAAoB,CAAC;AAK5B,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,CAAC;AAGpD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,EAAE,CAKtF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAErE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAStD,iBAAiB;IAMjB,oBAAoB;IAMpB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAKZ,MAAM;CA+BP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// ds-footer.ts
|
|
2
|
+
// A site footer: the brand, columns of links, the language and theme, and the
|
|
3
|
+
// copyright. Drawn by 1-root/footer.css, the same classes a page without
|
|
4
|
+
// scripts writes.
|
|
5
|
+
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
6
|
+
import { getText } from "../0-face/i18n";
|
|
7
|
+
import { define } from "../0-face/define";
|
|
8
|
+
import "../2-core/ds-cycle";
|
|
9
|
+
import metrics from "../1-root/component-metrics.css?inline";
|
|
10
|
+
import controls from "../1-root/controls.css?inline";
|
|
11
|
+
import styles from "./styles/ds-footer.css?inline";
|
|
12
|
+
const PREFERENCES = ["language", "theme"];
|
|
13
|
+
/** The preferences named by an attribute: every one when it is present but empty. */
|
|
14
|
+
export function footerPreferences(value) {
|
|
15
|
+
if (value == null || value === "false")
|
|
16
|
+
return [];
|
|
17
|
+
const named = value.split(/[\s,]+/).filter(Boolean);
|
|
18
|
+
if (!named.length || named.includes("true"))
|
|
19
|
+
return [...PREFERENCES];
|
|
20
|
+
return PREFERENCES.filter(name => named.includes(name));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @element ds-footer
|
|
24
|
+
* @prop {string} brand - The site's name, a link home: a translation key, or
|
|
25
|
+
* the words as they stand with `literal`. The `brand` slot takes its place.
|
|
26
|
+
* @prop {string} href - Where the brand links. `/` by default.
|
|
27
|
+
* @prop {string} tagline - A line about the site under the brand.
|
|
28
|
+
* @prop {FooterColumn[]} columns - The columns of links, eight squares each.
|
|
29
|
+
* @prop {string} label - The columns' accessible name, as a navigation; without it they are plain lists.
|
|
30
|
+
* @prop {string} owner - Who holds the copyright: the brand by default.
|
|
31
|
+
* @prop {number} year - The copyright's year: this year by default.
|
|
32
|
+
* @prop {string} preferences - `language`, `theme` or both, as `ds-cycle`
|
|
33
|
+
* buttons at the end of the last row; present but empty, both.
|
|
34
|
+
* @prop {boolean} literal - Show the words as written, never looked up.
|
|
35
|
+
*
|
|
36
|
+
* @slot brand - The brand, when it is more than words: a logo, a link of the page's own.
|
|
37
|
+
* @slot preferences - Controls of the page's own beside or in place of the cycles.
|
|
38
|
+
* @slot legal - The last line, in place of the copyright.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* <ds-footer brand="Name" tagline="What it does" preferences literal
|
|
42
|
+
* columns='[{"heading":"Product","links":[{"label":"Download","href":"/download"}]}]'>
|
|
43
|
+
* </ds-footer>
|
|
44
|
+
*/
|
|
45
|
+
export class Footer extends LitElement {
|
|
46
|
+
constructor() {
|
|
47
|
+
super();
|
|
48
|
+
this.relabel = () => this.requestUpdate();
|
|
49
|
+
this.href = "/";
|
|
50
|
+
this.columns = [];
|
|
51
|
+
this.literal = false;
|
|
52
|
+
}
|
|
53
|
+
connectedCallback() {
|
|
54
|
+
super.connectedCallback();
|
|
55
|
+
window.addEventListener("language-changed", this.relabel);
|
|
56
|
+
window.addEventListener("translations-loaded", this.relabel);
|
|
57
|
+
}
|
|
58
|
+
disconnectedCallback() {
|
|
59
|
+
window.removeEventListener("language-changed", this.relabel);
|
|
60
|
+
window.removeEventListener("translations-loaded", this.relabel);
|
|
61
|
+
super.disconnectedCallback();
|
|
62
|
+
}
|
|
63
|
+
words(value) {
|
|
64
|
+
if (!value)
|
|
65
|
+
return "";
|
|
66
|
+
return this.literal ? value : getText(value) || value;
|
|
67
|
+
}
|
|
68
|
+
slotted(name) {
|
|
69
|
+
return [...this.children].some(node => node.getAttribute("slot") === name);
|
|
70
|
+
}
|
|
71
|
+
link(link) {
|
|
72
|
+
return html `<li><a href=${link.href} aria-current=${link.current ? "page" : nothing}
|
|
73
|
+
target=${link.external ? "_blank" : nothing} rel=${link.external ? "noopener noreferrer" : nothing}>${this.words(link.label)}</a></li>`;
|
|
74
|
+
}
|
|
75
|
+
render() {
|
|
76
|
+
const columns = (Array.isArray(this.columns) ? this.columns : []).filter(column => column && Array.isArray(column.links));
|
|
77
|
+
const preferences = footerPreferences(this.preferences);
|
|
78
|
+
const hasPreferences = preferences.length > 0 || this.slotted("preferences");
|
|
79
|
+
const owner = this.owner ? this.words(this.owner) : this.words(this.brand);
|
|
80
|
+
const year = Number.isFinite(this.year) ? this.year : new Date().getFullYear();
|
|
81
|
+
const brandSlotted = this.slotted("brand");
|
|
82
|
+
const hasBrand = brandSlotted || Boolean(this.brand) || Boolean(this.tagline);
|
|
83
|
+
const list = columns.map(column => html `<div class="ds-footer__column" part="column">
|
|
84
|
+
${column.heading ? html `<h2 class="ds-footer__heading" part="heading">${this.words(column.heading)}</h2>` : nothing}
|
|
85
|
+
<ul class="ds-footer__links">${column.links.map(link => this.link(link))}</ul>
|
|
86
|
+
</div>`);
|
|
87
|
+
return html `<footer class="ds-footer" part="footer">
|
|
88
|
+
<div class="ds-footer__brand" part="brand" ?hidden=${!hasBrand}>
|
|
89
|
+
<slot name="brand" @slotchange=${this.relabel}>${this.brand ? html `<a class="ds-footer__mark" href=${this.href || "/"}>${this.words(this.brand)}</a>` : nothing}</slot>
|
|
90
|
+
${this.tagline ? html `<p class="ds-footer__tagline" part="tagline">${this.words(this.tagline)}</p>` : nothing}
|
|
91
|
+
</div>
|
|
92
|
+
${columns.length
|
|
93
|
+
? this.label
|
|
94
|
+
? html `<nav class="ds-footer__columns" part="columns" aria-label=${this.words(this.label)}>${list}</nav>`
|
|
95
|
+
: html `<div class="ds-footer__columns" part="columns">${list}</div>`
|
|
96
|
+
: nothing}
|
|
97
|
+
<div class="ds-footer__base" part="base">
|
|
98
|
+
<p class="ds-footer__legal" part="legal"><slot name="legal" @slotchange=${this.relabel}>${owner ? `© ${year} ${owner}` : `© ${year}`}</slot></p>
|
|
99
|
+
<div class="ds-footer__preferences" part="preferences" ?hidden=${!hasPreferences}>
|
|
100
|
+
${preferences.map(type => html `<ds-cycle type=${type}></ds-cycle>`)}
|
|
101
|
+
<slot name="preferences" @slotchange=${this.relabel}></slot>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</footer>`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
Footer.properties = {
|
|
108
|
+
brand: { type: String },
|
|
109
|
+
href: { type: String },
|
|
110
|
+
tagline: { type: String },
|
|
111
|
+
columns: { type: Array },
|
|
112
|
+
label: { type: String },
|
|
113
|
+
owner: { type: String },
|
|
114
|
+
year: { type: Number },
|
|
115
|
+
preferences: { type: String },
|
|
116
|
+
literal: { type: Boolean, reflect: true },
|
|
117
|
+
};
|
|
118
|
+
Footer.styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
|
|
119
|
+
define("ds-footer", Footer);
|
package/dist/4-page/ds-grid.d.ts
CHANGED
|
@@ -1,23 +1,43 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
define(name: string, constructor: typeof LitElement): void;
|
|
5
|
-
}
|
|
6
|
-
var customElements: CustomElementRegistry;
|
|
7
|
-
}
|
|
2
|
+
export type GridPattern = "grid" | "lines" | "columns" | "dots" | "none";
|
|
3
|
+
/** Decorative paper or an alignment overlay; never arranges or captures content. */
|
|
8
4
|
export declare class Grid extends LitElement {
|
|
9
5
|
static properties: {
|
|
10
6
|
align: {
|
|
11
7
|
type: StringConstructor;
|
|
8
|
+
reflect: boolean;
|
|
9
|
+
};
|
|
10
|
+
pattern: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
reflect: boolean;
|
|
13
|
+
};
|
|
14
|
+
size: {
|
|
15
|
+
type: NumberConstructor;
|
|
16
|
+
};
|
|
17
|
+
rowSize: {
|
|
18
|
+
type: NumberConstructor;
|
|
19
|
+
attribute: string;
|
|
20
|
+
};
|
|
21
|
+
color: {
|
|
22
|
+
type: StringConstructor;
|
|
23
|
+
};
|
|
24
|
+
paper: {
|
|
25
|
+
type: StringConstructor;
|
|
26
|
+
};
|
|
27
|
+
contained: {
|
|
28
|
+
type: BooleanConstructor;
|
|
29
|
+
reflect: boolean;
|
|
12
30
|
};
|
|
13
31
|
};
|
|
14
|
-
align
|
|
15
|
-
|
|
16
|
-
|
|
32
|
+
align: "left" | "center" | "right";
|
|
33
|
+
pattern: GridPattern;
|
|
34
|
+
size: number;
|
|
35
|
+
rowSize: number | undefined;
|
|
36
|
+
color: string;
|
|
37
|
+
paper: string;
|
|
38
|
+
contained: boolean;
|
|
17
39
|
static styles: import("lit").CSSResult;
|
|
18
|
-
|
|
19
|
-
disconnectedCallback(): void;
|
|
20
|
-
private updateMobileClass;
|
|
40
|
+
constructor();
|
|
21
41
|
render(): import("lit").TemplateResult<1>;
|
|
22
42
|
}
|
|
23
43
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ds-grid.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-grid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ds-grid.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAC;AAKlD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAGzE,oFAAoF;AACpF,qBAAa,IAAK,SAAQ,UAAU;IAClC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;MAQf;IACM,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,MAAM,0BAAqB;;IAalC,MAAM;CAWP;AAGD,OAAO,CAAC,MAAM,CAAC;IAAE,UAAU,qBAAqB;QAAG,SAAS,EAAE,IAAI,CAAA;KAAE;CAAE"}
|
package/dist/4-page/ds-grid.js
CHANGED
|
@@ -1,49 +1,40 @@
|
|
|
1
|
-
// ds-grid.ts
|
|
2
|
-
// Simple grid layout component
|
|
3
1
|
import { LitElement, html, unsafeCSS } from "lit";
|
|
4
|
-
import {
|
|
2
|
+
import { styleMap } from "lit/directives/style-map.js";
|
|
3
|
+
import { define } from "../0-face/define";
|
|
5
4
|
import styles from "./styles/ds-grid.css?inline";
|
|
5
|
+
const patterns = new Set(["grid", "lines", "columns", "dots", "none"]);
|
|
6
|
+
/** Decorative paper or an alignment overlay; never arranges or captures content. */
|
|
6
7
|
export class Grid extends LitElement {
|
|
7
|
-
|
|
8
|
-
super
|
|
9
|
-
this.
|
|
10
|
-
|
|
11
|
-
this.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.updateMobileClass();
|
|
17
|
-
}, 100);
|
|
18
|
-
};
|
|
19
|
-
window.addEventListener("resize", this.resizeObserver);
|
|
20
|
-
}
|
|
21
|
-
disconnectedCallback() {
|
|
22
|
-
super.disconnectedCallback();
|
|
23
|
-
if (this.resizeObserver) {
|
|
24
|
-
window.removeEventListener("resize", this.resizeObserver);
|
|
25
|
-
}
|
|
26
|
-
if (this.resizeTimeout) {
|
|
27
|
-
clearTimeout(this.resizeTimeout);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
updateMobileClass() {
|
|
31
|
-
const isMobile = detectMobileDevice();
|
|
32
|
-
if (isMobile) {
|
|
33
|
-
this.classList.add("mobile");
|
|
34
|
-
this.classList.remove("desktop");
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
this.classList.add("desktop");
|
|
38
|
-
this.classList.remove("mobile");
|
|
39
|
-
}
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
this.align = "center";
|
|
11
|
+
this.pattern = "grid";
|
|
12
|
+
this.size = 20;
|
|
13
|
+
this.rowSize = undefined;
|
|
14
|
+
this.color = "";
|
|
15
|
+
this.paper = "";
|
|
16
|
+
this.contained = false;
|
|
40
17
|
}
|
|
41
18
|
render() {
|
|
42
|
-
|
|
19
|
+
const size = Number.isFinite(this.size) && this.size > 0 ? this.size : 20;
|
|
20
|
+
const row = Number.isFinite(this.rowSize) && this.rowSize > 0 ? this.rowSize : size;
|
|
21
|
+
return html `<div aria-hidden="true" class="paper" data-pattern=${patterns.has(this.pattern) ? this.pattern : "grid"}
|
|
22
|
+
style=${styleMap({
|
|
23
|
+
"--pitch-x": `${size}px`,
|
|
24
|
+
"--pitch-y": `${row}px`,
|
|
25
|
+
"--ink": this.color || "var(--ds-grid-color, color-mix(in srgb, var(--ds-text-color, var(--text-color, currentColor)) 12%, transparent))",
|
|
26
|
+
"--paper": this.paper || "var(--ds-grid-paper, transparent)",
|
|
27
|
+
})}></div>`;
|
|
43
28
|
}
|
|
44
29
|
}
|
|
45
30
|
Grid.properties = {
|
|
46
|
-
align: { type: String },
|
|
31
|
+
align: { type: String, reflect: true },
|
|
32
|
+
pattern: { type: String, reflect: true },
|
|
33
|
+
size: { type: Number },
|
|
34
|
+
rowSize: { type: Number, attribute: "row-size" },
|
|
35
|
+
color: { type: String },
|
|
36
|
+
paper: { type: String },
|
|
37
|
+
contained: { type: Boolean, reflect: true },
|
|
47
38
|
};
|
|
48
39
|
Grid.styles = unsafeCSS(styles);
|
|
49
|
-
|
|
40
|
+
define("ds-grid", Grid);
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
2
|
+
import "../2-core/ds-icon";
|
|
3
|
+
/** The shared word that names the menu button and its drawer. */
|
|
4
|
+
export declare const MENU_LABEL = "Menu";
|
|
5
|
+
/**
|
|
6
|
+
* @element ds-header
|
|
7
|
+
* @prop {string} brand - The site's name, a link home: a translation key, or
|
|
8
|
+
* the words as they stand with `literal`. The `brand` slot takes its place.
|
|
9
|
+
* @prop {string} href - Where the brand links. `/` by default.
|
|
10
|
+
* @prop {string} label - The navigation's accessible name, when a page has more than one.
|
|
11
|
+
* @prop {boolean} literal - Show `brand` as written, never looked up.
|
|
12
|
+
* @prop {boolean} sticky - Stay at the top of the page as it scrolls, on the paper.
|
|
13
|
+
*
|
|
14
|
+
* @slot - The navigation: `<a href>` links, one square high. The link to the
|
|
15
|
+
* address being read gets `aria-current="page"` unless one is marked.
|
|
16
|
+
* @slot brand - The brand, when it is more than words: a logo, a link of the page's own.
|
|
17
|
+
* @slot actions - Buttons or links at the end of the row.
|
|
18
|
+
*
|
|
19
|
+
* @fires ds-header-menu - The drawer opened or closed; `detail.open` says which.
|
|
20
|
+
*
|
|
21
|
+
* Below thirty squares of width the navigation and actions fold away and a
|
|
22
|
+
* menu button (the shared word "Menu") opens them in a drawer over the page:
|
|
23
|
+
* focus stays inside it, Escape, its close button, a link or the screen
|
|
24
|
+
* widening close it, and the page holds its scroll meanwhile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* <ds-header brand="Name" literal>
|
|
28
|
+
* <a href="/">Home</a>
|
|
29
|
+
* <a href="/help">Help</a>
|
|
30
|
+
* <ds-button slot="actions" primary href="/download">Download</ds-button>
|
|
31
|
+
* </ds-header>
|
|
32
|
+
*/
|
|
33
|
+
export declare class Header extends LitElement {
|
|
34
|
+
static properties: {
|
|
35
|
+
brand: {
|
|
36
|
+
type: StringConstructor;
|
|
37
|
+
};
|
|
38
|
+
href: {
|
|
39
|
+
type: StringConstructor;
|
|
40
|
+
};
|
|
41
|
+
label: {
|
|
42
|
+
type: StringConstructor;
|
|
43
|
+
};
|
|
44
|
+
literal: {
|
|
45
|
+
type: BooleanConstructor;
|
|
46
|
+
reflect: boolean;
|
|
47
|
+
};
|
|
48
|
+
sticky: {
|
|
49
|
+
type: BooleanConstructor;
|
|
50
|
+
reflect: boolean;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
static styles: import("lit").CSSResult[];
|
|
54
|
+
brand: string | undefined;
|
|
55
|
+
href: string;
|
|
56
|
+
label: string | undefined;
|
|
57
|
+
literal: boolean;
|
|
58
|
+
sticky: boolean;
|
|
59
|
+
private drawer;
|
|
60
|
+
private readonly relabel;
|
|
61
|
+
constructor();
|
|
62
|
+
/** Whether the drawer is open. */
|
|
63
|
+
get menuOpen(): boolean;
|
|
64
|
+
/** Open the drawer (on a narrow screen, where the menu button shows). */
|
|
65
|
+
openMenu(): void;
|
|
66
|
+
/** Close the drawer. */
|
|
67
|
+
closeMenu(): void;
|
|
68
|
+
connectedCallback(): void;
|
|
69
|
+
disconnectedCallback(): void;
|
|
70
|
+
protected firstUpdated(): void;
|
|
71
|
+
protected updated(changed: PropertyValues<this>): void;
|
|
72
|
+
private words;
|
|
73
|
+
/** Light-DOM children that fill a slot: elements, or text that is not blank. */
|
|
74
|
+
private slotted;
|
|
75
|
+
private links;
|
|
76
|
+
private onNavChange;
|
|
77
|
+
render(): import("lit").TemplateResult<1>;
|
|
78
|
+
}
|
|
79
|
+
declare global {
|
|
80
|
+
interface HTMLElementTagNameMap {
|
|
81
|
+
"ds-header": Header;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ds-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ds-header.d.ts","sourceRoot":"","sources":["../../DS1/4-page/ds-header.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAKhF,OAAO,mBAAmB,CAAC;AAK3B,iEAAiE;AACjE,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;MAMf;IAEF,MAAM,CAAC,MAAM,4BAAgE;IAErE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAExB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;;IAStD,kCAAkC;IAClC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,yEAAyE;IACzE,QAAQ,IAAI,IAAI;IAEhB,wBAAwB;IACxB,SAAS,IAAI,IAAI;IAEjB,iBAAiB;IAMjB,oBAAoB;IAQpB,SAAS,CAAC,YAAY;IAItB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAe/C,OAAO,CAAC,KAAK;IAKb,gFAAgF;IAChF,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,WAAW,CAGjB;IAEF,MAAM;CAwBP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
|