@0001-labs/design-system-1 0.0.0-stage → 0.3.0-alpha.13
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/control.ts +99 -0
- package/DS1/0-face/define.ts +5 -0
- package/DS1/0-face/device.ts +414 -0
- package/DS1/0-face/grid-fit.ts +63 -0
- package/DS1/0-face/grid.ts +144 -0
- package/DS1/0-face/i18n.ts +1023 -0
- package/DS1/0-face/language-routing.ts +135 -0
- package/DS1/0-face/language-validator.ts +46 -0
- package/DS1/0-face/languages.ts +242 -0
- package/DS1/0-face/layout-inspector.ts +184 -0
- package/DS1/0-face/preferences.ts +39 -0
- package/DS1/0-face/pricing.ts +57 -0
- package/DS1/0-face/scaling.ts +25 -0
- package/DS1/0-face/shared-words.ts +45 -0
- package/DS1/0-face/theme.ts +58 -0
- package/DS1/0-face/tooltips.ts +82 -0
- package/DS1/0-face/translations/da.json +63 -0
- package/DS1/0-face/translations/de.json +63 -0
- package/DS1/0-face/translations/en.json +63 -0
- package/DS1/0-face/translations/es.json +63 -0
- package/DS1/0-face/translations/fi.json +63 -0
- package/DS1/0-face/translations/fr.json +63 -0
- package/DS1/0-face/translations/is.json +56 -0
- package/DS1/0-face/translations/it.json +63 -0
- package/DS1/0-face/translations/ja.json +63 -0
- package/DS1/0-face/translations/ko.json +63 -0
- package/DS1/0-face/translations/nb.json +63 -0
- package/DS1/0-face/translations/pt-BR.json +63 -0
- package/DS1/0-face/translations/pt.json +63 -0
- package/DS1/0-face/translations/sv.json +63 -0
- package/DS1/0-face/translations/zh.json +63 -0
- package/DS1/0-face/translations-format.ts +216 -0
- package/DS1/1-root/component-appearance.css +32 -0
- package/DS1/1-root/component-metrics.css +21 -0
- package/DS1/1-root/component-tokens.css +90 -0
- package/DS1/1-root/controls.css +261 -0
- package/DS1/1-root/fonts/GT-America-Compressed-Regular.woff2 +0 -0
- package/DS1/1-root/fonts/GT-America-Standard-Medium.woff2 +0 -0
- package/DS1/1-root/fonts/GT-America-Standard-Regular.woff2 +0 -0
- package/DS1/1-root/fonts/GT-Canon-M-Standard-Medium-Trial.woff2 +0 -0
- package/DS1/1-root/fonts/Inter-Arrows.woff2 +0 -0
- package/DS1/1-root/fonts/Inter-LICENSE.md +7 -0
- package/DS1/1-root/fonts/Iosevka-LICENSE.md +7 -0
- package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
- package/DS1/1-root/grid.css +31 -0
- package/DS1/1-root/one.css +602 -0
- package/DS1/1-root/one.semantic.css +683 -0
- package/DS1/1-root/palette.ts +91 -0
- package/DS1/2-core/ds-avatar.ts +130 -0
- package/DS1/2-core/ds-badge.ts +77 -0
- package/DS1/2-core/ds-banner.ts +122 -0
- package/DS1/2-core/ds-button.ts +163 -0
- package/DS1/2-core/ds-card.ts +137 -0
- package/DS1/2-core/ds-checkbox.ts +14 -0
- package/DS1/2-core/ds-color.ts +32 -0
- package/DS1/2-core/ds-composer.ts +182 -0
- package/DS1/2-core/ds-cycle.ts +628 -0
- package/DS1/2-core/ds-date.ts +24 -0
- package/DS1/2-core/ds-file-picker.ts +83 -0
- package/DS1/2-core/ds-gap.ts +34 -0
- package/DS1/2-core/ds-icon.ts +161 -0
- package/DS1/2-core/ds-input.ts +518 -0
- package/DS1/2-core/ds-language.ts +94 -0
- package/DS1/2-core/ds-pagedots.ts +52 -0
- package/DS1/2-core/ds-radio.ts +25 -0
- package/DS1/2-core/ds-select.ts +44 -0
- package/DS1/2-core/ds-split.ts +122 -0
- package/DS1/2-core/ds-swatch.ts +20 -0
- package/DS1/2-core/ds-switch.ts +13 -0
- package/DS1/2-core/ds-text.ts +190 -0
- package/DS1/2-core/ds-textarea.ts +136 -0
- package/DS1/2-core/ds-token.ts +40 -0
- package/DS1/2-core/ds-tooltip.ts +115 -0
- package/DS1/2-core/generated/ds-icon-map.ts +583 -0
- package/DS1/2-core/generated/icons-extra.ts +243 -0
- package/DS1/2-core/generated/icons-immediate.ts +49 -0
- package/DS1/2-core/styles/ds-avatar.css +125 -0
- package/DS1/2-core/styles/ds-badge.css +26 -0
- package/DS1/2-core/styles/ds-banner.css +77 -0
- package/DS1/2-core/styles/ds-button-host.css +214 -0
- package/DS1/2-core/styles/ds-button.css +131 -0
- package/DS1/2-core/styles/ds-checkbox.css +48 -0
- package/DS1/2-core/styles/ds-color.css +24 -0
- package/DS1/2-core/styles/ds-composer-frame.css +11 -0
- package/DS1/2-core/styles/ds-composer.css +55 -0
- package/DS1/2-core/styles/ds-cycle.css +18 -0
- package/DS1/2-core/styles/ds-date.css +9 -0
- package/DS1/2-core/styles/ds-file-picker.css +66 -0
- package/DS1/2-core/styles/ds-gap.css +71 -0
- package/DS1/2-core/styles/ds-icon.css +44 -0
- package/DS1/2-core/styles/ds-input.css +233 -0
- package/DS1/2-core/styles/ds-language.css +78 -0
- package/DS1/2-core/styles/ds-pagedots.css +31 -0
- package/DS1/2-core/styles/ds-radio.css +83 -0
- package/DS1/2-core/styles/ds-select.css +95 -0
- package/DS1/2-core/styles/ds-split.css +62 -0
- package/DS1/2-core/styles/ds-switch.css +50 -0
- package/DS1/2-core/styles/ds-text.css +87 -0
- package/DS1/2-core/styles/ds-textarea.css +27 -0
- package/DS1/2-core/styles/ds-token.css +9 -0
- package/DS1/2-core/styles/ds-tooltip.css +37 -0
- package/DS1/3-unit/context-trigger.ts +104 -0
- package/DS1/3-unit/ds-accordion.ts +120 -0
- package/DS1/3-unit/ds-avatar-group.ts +99 -0
- package/DS1/3-unit/ds-form.ts +304 -0
- package/DS1/3-unit/ds-list.ts +36 -0
- package/DS1/3-unit/ds-menu.ts +482 -0
- package/DS1/3-unit/ds-row.ts +48 -0
- package/DS1/3-unit/ds-table.ts +68 -0
- package/DS1/3-unit/ds-tabs.ts +77 -0
- package/DS1/3-unit/ds-token-field.ts +127 -0
- package/DS1/3-unit/styles/context-trigger.css +6 -0
- package/DS1/3-unit/styles/ds-accordion.css +64 -0
- package/DS1/3-unit/styles/ds-avatar-group.css +51 -0
- package/DS1/3-unit/styles/ds-list.css +26 -0
- package/DS1/3-unit/styles/ds-menu.css +97 -0
- package/DS1/3-unit/styles/ds-row.css +37 -0
- package/DS1/3-unit/styles/ds-table.css +80 -0
- package/DS1/3-unit/styles/ds-tabs.css +44 -0
- package/DS1/3-unit/styles/ds-token-field.css +11 -0
- package/DS1/4-page/ds-container.ts +28 -0
- package/DS1/4-page/ds-dialog.ts +331 -0
- package/DS1/4-page/ds-grid.ts +74 -0
- package/DS1/4-page/ds-layout.ts +949 -0
- package/DS1/4-page/ds-panel.ts +38 -0
- package/DS1/4-page/email.ts +170 -0
- package/DS1/4-page/styles/ds-container.css +35 -0
- package/DS1/4-page/styles/ds-dialog.css +94 -0
- package/DS1/4-page/styles/ds-grid.css +95 -0
- package/DS1/4-page/styles/ds-layout.css +246 -0
- package/DS1/4-page/styles/ds-panel.css +31 -0
- package/DS1/components.ts +13 -0
- package/DS1/index.ts +86 -0
- package/DS1/react/accordion.ts +33 -0
- package/DS1/react/avatar-group.ts +11 -0
- package/DS1/react/avatar.ts +42 -0
- package/DS1/react/badge.ts +7 -0
- package/DS1/react/button.ts +63 -0
- package/DS1/react/choice.ts +64 -0
- package/DS1/react/composer.ts +18 -0
- package/DS1/react/context-menu.ts +167 -0
- package/DS1/react/dialog.ts +102 -0
- package/DS1/react/file-picker.ts +34 -0
- package/DS1/react/input.ts +184 -0
- package/DS1/react/menu.ts +28 -0
- package/DS1/react/split.ts +42 -0
- package/DS1/react/token-field.ts +32 -0
- package/DS1/vite-env.d.ts +13 -0
- package/DS1/x-icon/1x.svg +4 -0
- package/DS1/x-icon/1xdots.svg +11 -0
- package/DS1/x-icon/1xgrid.svg +8 -0
- package/DS1/x-icon/1xlines.svg +5 -0
- package/DS1/x-icon/2x.svg +4 -0
- package/DS1/x-icon/2xdots.svg +18 -0
- package/DS1/x-icon/2xgrid-alt-2.svg +9 -0
- package/DS1/x-icon/2xgrid-alt-3.svg +8 -0
- package/DS1/x-icon/2xgrid-alt.svg +15 -0
- package/DS1/x-icon/2xgrid.svg +6 -0
- package/DS1/x-icon/2xlines.svg +6 -0
- package/DS1/x-icon/4x4.svg +18 -0
- package/DS1/x-icon/app.svg +4 -0
- package/DS1/x-icon/apple.svg +3 -0
- package/DS1/x-icon/archive-alt.svg +4 -0
- package/DS1/x-icon/archive.svg +4 -0
- package/DS1/x-icon/arrange-archive.svg +1 -0
- package/DS1/x-icon/arrange-check.svg +1 -0
- package/DS1/x-icon/arrange-chevron.svg +1 -0
- package/DS1/x-icon/arrange-connect.svg +1 -0
- package/DS1/x-icon/arrange-draft.svg +1 -0
- package/DS1/x-icon/arrange-dropdown.svg +1 -0
- package/DS1/x-icon/arrange-home.svg +1 -0
- package/DS1/x-icon/arrange-link.svg +1 -0
- package/DS1/x-icon/arrange-menu.svg +1 -0
- package/DS1/x-icon/arrange-more.svg +1 -0
- package/DS1/x-icon/arrange-page.svg +1 -0
- package/DS1/x-icon/arrange-plus.svg +1 -0
- package/DS1/x-icon/arrange-site.svg +1 -0
- package/DS1/x-icon/avatar.svg +4 -0
- package/DS1/x-icon/badge-bands-3d.svg +1 -0
- package/DS1/x-icon/badge-bands.svg +1 -0
- package/DS1/x-icon/badge-blue-fan-3d.svg +1 -0
- package/DS1/x-icon/badge-blue-fan.svg +1 -0
- package/DS1/x-icon/badge-bricks-3d.svg +1 -0
- package/DS1/x-icon/badge-bricks.svg +1 -0
- package/DS1/x-icon/badge-broken-stripes-3d.svg +1 -0
- package/DS1/x-icon/badge-broken-stripes.svg +1 -0
- package/DS1/x-icon/badge-checker-3d.svg +1 -0
- package/DS1/x-icon/badge-checker.svg +1 -0
- package/DS1/x-icon/badge-diamond-3d.svg +1 -0
- package/DS1/x-icon/badge-diamond.svg +1 -0
- package/DS1/x-icon/badge-fan-3d.svg +1 -0
- package/DS1/x-icon/badge-fan-dark-3d.svg +1 -0
- package/DS1/x-icon/badge-fan-dark.svg +1 -0
- package/DS1/x-icon/badge-fan.svg +1 -0
- package/DS1/x-icon/badge-halves-3d.svg +1 -0
- package/DS1/x-icon/badge-halves-green-3d.svg +1 -0
- package/DS1/x-icon/badge-halves-green.svg +1 -0
- package/DS1/x-icon/badge-halves.svg +1 -0
- package/DS1/x-icon/badge-red-3d.svg +1 -0
- package/DS1/x-icon/badge-red-blue-bricks-3d.svg +1 -0
- package/DS1/x-icon/badge-red-blue-bricks.svg +1 -0
- package/DS1/x-icon/badge-red.svg +1 -0
- package/DS1/x-icon/badge-round-fan-3d.svg +1 -0
- package/DS1/x-icon/badge-round-fan.svg +1 -0
- package/DS1/x-icon/badge-shard-3d.svg +1 -0
- package/DS1/x-icon/badge-shard.svg +1 -0
- package/DS1/x-icon/badge-split-circle-3d.svg +1 -0
- package/DS1/x-icon/badge-split-circle.svg +1 -0
- package/DS1/x-icon/badge-tall-bricks-3d.svg +1 -0
- package/DS1/x-icon/badge-tall-bricks.svg +1 -0
- package/DS1/x-icon/badge-weave-3d.svg +1 -0
- package/DS1/x-icon/badge-weave.svg +1 -0
- package/DS1/x-icon/bag.svg +4 -0
- package/DS1/x-icon/block-accordion.svg +1 -0
- package/DS1/x-icon/block-banner.svg +1 -0
- package/DS1/x-icon/block-breadcrumbs.svg +1 -0
- package/DS1/x-icon/block-button.svg +1 -0
- package/DS1/x-icon/block-divider.svg +1 -0
- package/DS1/x-icon/block-forms.svg +1 -0
- package/DS1/x-icon/block-group.svg +1 -0
- package/DS1/x-icon/block-heading.svg +1 -0
- package/DS1/x-icon/block-image.svg +1 -0
- package/DS1/x-icon/block-logo-marquee.svg +1 -0
- package/DS1/x-icon/block-page-progress.svg +1 -0
- package/DS1/x-icon/block-section.svg +1 -0
- package/DS1/x-icon/block-table.svg +1 -0
- package/DS1/x-icon/block-tabs.svg +1 -0
- package/DS1/x-icon/block-text.svg +1 -0
- package/DS1/x-icon/bold.svg +3 -0
- package/DS1/x-icon/bullet.svg +5 -0
- package/DS1/x-icon/calendar.svg +6 -0
- package/DS1/x-icon/callout.svg +5 -0
- package/DS1/x-icon/camera.svg +5 -0
- package/DS1/x-icon/categories.svg +12 -0
- package/DS1/x-icon/check-alt.svg +3 -0
- package/DS1/x-icon/check.svg +3 -0
- package/DS1/x-icon/close.svg +3 -0
- package/DS1/x-icon/code-block.svg +4 -0
- package/DS1/x-icon/code.svg +3 -0
- package/DS1/x-icon/collapse.svg +3 -0
- package/DS1/x-icon/color.svg +4 -0
- package/DS1/x-icon/column.svg +3 -0
- package/DS1/x-icon/comment.svg +3 -0
- package/DS1/x-icon/compose.svg +4 -0
- package/DS1/x-icon/connect.svg +5 -0
- package/DS1/x-icon/content.svg +6 -0
- package/DS1/x-icon/default.svg +4 -0
- package/DS1/x-icon/delete.svg +5 -0
- package/DS1/x-icon/dictate.svg +6 -0
- package/DS1/x-icon/divider.svg +3 -0
- package/DS1/x-icon/down.svg +3 -0
- package/DS1/x-icon/duplicate.svg +8 -0
- package/DS1/x-icon/email.svg +3 -0
- package/DS1/x-icon/equation.svg +3 -0
- package/DS1/x-icon/exercise.svg +3 -0
- package/DS1/x-icon/expand.svg +3 -0
- package/DS1/x-icon/ezo-accordion-chevron.svg +11 -0
- package/DS1/x-icon/ezo-account-close.svg +1 -0
- package/DS1/x-icon/ezo-android-screen-archive.svg +4 -0
- package/DS1/x-icon/ezo-android-screen-calendar.svg +6 -0
- package/DS1/x-icon/ezo-android-screen-camera.svg +5 -0
- package/DS1/x-icon/ezo-android-screen-check.svg +3 -0
- package/DS1/x-icon/ezo-android-screen-compose.svg +4 -0
- package/DS1/x-icon/ezo-android-screen-globe.svg +1 -0
- package/DS1/x-icon/ezo-android-screen-lists.svg +3 -0
- package/DS1/x-icon/ezo-android-screen-shared.svg +5 -0
- package/DS1/x-icon/ezo-android-screen-stats.svg +3 -0
- package/DS1/x-icon/ezo-android-screen-store.svg +4 -0
- package/DS1/x-icon/ezo-android-screen-views.svg +4 -0
- package/DS1/x-icon/ezo-android-screen-work.svg +3 -0
- package/DS1/x-icon/ezo-arrow-cursor.svg +8 -0
- package/DS1/x-icon/ezo-block-accordion.svg +1 -0
- package/DS1/x-icon/ezo-block-divider.svg +1 -0
- package/DS1/x-icon/ezo-block-group.svg +1 -0
- package/DS1/x-icon/ezo-block-image.svg +1 -0
- package/DS1/x-icon/ezo-block-section.svg +1 -0
- package/DS1/x-icon/ezo-block-table.svg +1 -0
- package/DS1/x-icon/ezo-code.svg +14 -0
- package/DS1/x-icon/ezo-down.svg +3 -0
- package/DS1/x-icon/ezo-figma-premium-star.svg +5 -0
- package/DS1/x-icon/ezo-item-button-complete.svg +4 -0
- package/DS1/x-icon/ezo-item-button-header.svg +3 -0
- package/DS1/x-icon/ezo-item-button-open.svg +3 -0
- package/DS1/x-icon/ezo-item-button-reopen.svg +3 -0
- package/DS1/x-icon/ezo-item-button-star.svg +3 -0
- package/DS1/x-icon/ezo-item-button-start.svg +3 -0
- package/DS1/x-icon/ezo-item-button-unheader.svg +7 -0
- package/DS1/x-icon/ezo-item-button-unstar.svg +5 -0
- package/DS1/x-icon/ezo-item-star.svg +5 -0
- package/DS1/x-icon/ezo-left.svg +3 -0
- package/DS1/x-icon/ezo-logo.svg +1 -0
- package/DS1/x-icon/ezo-mic.svg +8 -0
- package/DS1/x-icon/ezo-move-column.svg +14 -0
- package/DS1/x-icon/ezo-move-row.svg +18 -0
- package/DS1/x-icon/ezo-navigation-check.svg +1 -0
- package/DS1/x-icon/ezo-note-back.svg +5 -0
- package/DS1/x-icon/ezo-note-menu-complete.svg +11 -0
- package/DS1/x-icon/ezo-note-menu-delete.svg +4 -0
- package/DS1/x-icon/ezo-note-menu-duplicate.svg +8 -0
- package/DS1/x-icon/ezo-note-menu-note.svg +5 -0
- package/DS1/x-icon/ezo-note-menu-page.svg +3 -0
- package/DS1/x-icon/ezo-note-menu-star.svg +5 -0
- package/DS1/x-icon/ezo-note-menu-start.svg +6 -0
- package/DS1/x-icon/ezo-note-menu-stop.svg +6 -0
- package/DS1/x-icon/ezo-note-more.svg +7 -0
- package/DS1/x-icon/ezo-note-star.svg +5 -0
- package/DS1/x-icon/ezo-password-visibility-see.svg +6 -0
- package/DS1/x-icon/ezo-password-visibility-unsee.svg +9 -0
- package/DS1/x-icon/ezo-pattern-call-to-action.svg +1 -0
- package/DS1/x-icon/ezo-play.svg +5 -0
- package/DS1/x-icon/ezo-premium-star.svg +5 -0
- package/DS1/x-icon/ezo-setting-1xdots.svg +13 -0
- package/DS1/x-icon/ezo-setting-1xgrid.svg +10 -0
- package/DS1/x-icon/ezo-setting-1xlines.svg +7 -0
- package/DS1/x-icon/ezo-setting-2xdots.svg +8 -0
- package/DS1/x-icon/ezo-setting-2xgrid.svg +8 -0
- package/DS1/x-icon/ezo-setting-2xlines.svg +6 -0
- package/DS1/x-icon/ezo-setting-blank.svg +5 -0
- package/DS1/x-icon/ezo-store-chevron.svg +1 -0
- package/DS1/x-icon/ezo-upgrade-close.svg +5 -0
- package/DS1/x-icon/folder.svg +3 -0
- package/DS1/x-icon/form.svg +5 -0
- package/DS1/x-icon/gallery.svg +3 -0
- package/DS1/x-icon/globe.svg +1 -0
- package/DS1/x-icon/google.svg +6 -0
- package/DS1/x-icon/group-alt-2.svg +3 -0
- package/DS1/x-icon/group-alt.svg +7 -0
- package/DS1/x-icon/group.svg +3 -0
- package/DS1/x-icon/h1.svg +3 -0
- package/DS1/x-icon/h2.svg +3 -0
- package/DS1/x-icon/h3.svg +3 -0
- package/DS1/x-icon/handle.svg +8 -0
- package/DS1/x-icon/head.svg +3 -0
- package/DS1/x-icon/help-alt.svg +3 -0
- package/DS1/x-icon/help.svg +5 -0
- package/DS1/x-icon/home.svg +3 -0
- package/DS1/x-icon/icon.svg +4 -0
- package/DS1/x-icon/image.svg +5 -0
- package/DS1/x-icon/in.svg +4 -0
- package/DS1/x-icon/indent.svg +4 -0
- package/DS1/x-icon/italic.svg +3 -0
- package/DS1/x-icon/item.svg +3 -0
- package/DS1/x-icon/left.svg +4 -0
- package/DS1/x-icon/life.svg +8 -0
- package/DS1/x-icon/link.svg +3 -0
- package/DS1/x-icon/list-line.svg +3 -0
- package/DS1/x-icon/lists.svg +3 -0
- package/DS1/x-icon/lock-filled.svg +3 -0
- package/DS1/x-icon/lock.svg +3 -0
- package/DS1/x-icon/logo-marquee.svg +5 -0
- package/DS1/x-icon/loop.svg +6 -0
- package/DS1/x-icon/mention.svg +4 -0
- package/DS1/x-icon/menu.svg +3 -0
- package/DS1/x-icon/mic.svg +5 -0
- package/DS1/x-icon/minimize-alt.svg +4 -0
- package/DS1/x-icon/minimize.svg +4 -0
- package/DS1/x-icon/money.svg +6 -0
- package/DS1/x-icon/more.svg +5 -0
- package/DS1/x-icon/navigation-check.svg +1 -0
- package/DS1/x-icon/note-alt-2.svg +6 -0
- package/DS1/x-icon/note-alt.svg +4 -0
- package/DS1/x-icon/note-lines.svg +6 -0
- package/DS1/x-icon/note.svg +4 -0
- package/DS1/x-icon/notifications.svg +3 -0
- package/DS1/x-icon/numbered.svg +4 -0
- package/DS1/x-icon/open-alt.svg +3 -0
- package/DS1/x-icon/open-source.svg +3 -0
- package/DS1/x-icon/open.svg +3 -0
- package/DS1/x-icon/outdent.svg +4 -0
- package/DS1/x-icon/pad.svg +8 -0
- package/DS1/x-icon/page-18.svg +3 -0
- package/DS1/x-icon/page-alt.svg +3 -0
- package/DS1/x-icon/page-note.svg +1 -0
- package/DS1/x-icon/page.svg +3 -0
- package/DS1/x-icon/panel.svg +4 -0
- package/DS1/x-icon/pattern-call-to-action.svg +1 -0
- package/DS1/x-icon/pattern-card.svg +1 -0
- package/DS1/x-icon/pattern-feature.svg +1 -0
- package/DS1/x-icon/pattern-hero.svg +1 -0
- package/DS1/x-icon/pen.svg +4 -0
- package/DS1/x-icon/play-alt.svg +3 -0
- package/DS1/x-icon/plus.svg +3 -0
- package/DS1/x-icon/product-sources.json +2557 -0
- package/DS1/x-icon/quote.svg +3 -0
- package/DS1/x-icon/redo.svg +3 -0
- package/DS1/x-icon/relationships.svg +3 -0
- package/DS1/x-icon/rewind-30-alt.svg +4 -0
- package/DS1/x-icon/rewind-30.svg +5 -0
- package/DS1/x-icon/rewind.svg +5 -0
- package/DS1/x-icon/right.svg +3 -0
- package/DS1/x-icon/row.svg +3 -0
- package/DS1/x-icon/school.svg +4 -0
- package/DS1/x-icon/sdown.svg +3 -0
- package/DS1/x-icon/search-30.svg +4 -0
- package/DS1/x-icon/search.svg +3 -0
- package/DS1/x-icon/see-30.svg +4 -0
- package/DS1/x-icon/see.svg +4 -0
- package/DS1/x-icon/settings.svg +8 -0
- package/DS1/x-icon/shared.svg +5 -0
- package/DS1/x-icon/slash.svg +3 -0
- package/DS1/x-icon/star-alt-2.svg +3 -0
- package/DS1/x-icon/star-alt.svg +3 -0
- package/DS1/x-icon/star.svg +3 -0
- package/DS1/x-icon/stats.svg +3 -0
- package/DS1/x-icon/status-alt.svg +11 -0
- package/DS1/x-icon/status-filled.svg +26 -0
- package/DS1/x-icon/status.svg +10 -0
- package/DS1/x-icon/store.svg +4 -0
- package/DS1/x-icon/strike.svg +3 -0
- package/DS1/x-icon/sup.svg +3 -0
- package/DS1/x-icon/table.svg +4 -0
- package/DS1/x-icon/template.svg +4 -0
- package/DS1/x-icon/templates.svg +4 -0
- package/DS1/x-icon/text.svg +3 -0
- package/DS1/x-icon/title.svg +3 -0
- package/DS1/x-icon/titlestyle.svg +11 -0
- package/DS1/x-icon/todo.svg +5 -0
- package/DS1/x-icon/toggle.svg +4 -0
- package/DS1/x-icon/triangle.svg +3 -0
- package/DS1/x-icon/underline.svg +3 -0
- package/DS1/x-icon/undo.svg +3 -0
- package/DS1/x-icon/ungroup.svg +4 -0
- package/DS1/x-icon/unhead.svg +7 -0
- package/DS1/x-icon/unicon.svg +6 -0
- package/DS1/x-icon/unlock.svg +3 -0
- package/DS1/x-icon/unmic.svg +6 -0
- package/DS1/x-icon/unsee.svg +5 -0
- package/DS1/x-icon/unstar.svg +5 -0
- package/DS1/x-icon/untitle.svg +7 -0
- package/DS1/x-icon/up-right.svg +3 -0
- package/DS1/x-icon/up.svg +3 -0
- package/DS1/x-icon/views.svg +4 -0
- package/DS1/x-icon/warning.svg +3 -0
- package/DS1/x-icon/work.svg +3 -0
- package/LICENSE +21 -0
- package/README.md +240 -2
- package/dist/0-face/control.d.ts +24 -0
- package/dist/0-face/control.d.ts.map +1 -0
- package/dist/0-face/control.js +117 -0
- package/dist/0-face/define.d.ts +3 -0
- package/dist/0-face/define.d.ts.map +1 -0
- package/dist/0-face/define.js +7 -0
- package/dist/0-face/device.d.ts +71 -0
- package/dist/0-face/device.d.ts.map +1 -0
- package/dist/0-face/device.js +318 -0
- package/dist/0-face/grid-fit.d.ts +3 -0
- package/dist/0-face/grid-fit.d.ts.map +1 -0
- package/dist/0-face/grid-fit.js +73 -0
- package/dist/0-face/grid.d.ts +3 -0
- package/dist/0-face/grid.d.ts.map +1 -0
- package/dist/0-face/grid.js +144 -0
- package/dist/0-face/i18n.d.ts +138 -0
- package/dist/0-face/i18n.d.ts.map +1 -0
- package/dist/0-face/i18n.js +725 -0
- package/dist/0-face/language-routing.d.ts +47 -0
- package/dist/0-face/language-routing.d.ts.map +1 -0
- package/dist/0-face/language-routing.js +91 -0
- package/dist/0-face/language-validator.d.ts +11 -0
- package/dist/0-face/language-validator.d.ts.map +1 -0
- package/dist/0-face/language-validator.js +31 -0
- package/dist/0-face/languages.d.ts +53 -0
- package/dist/0-face/languages.d.ts.map +1 -0
- package/dist/0-face/languages.js +192 -0
- package/dist/0-face/layout-inspector.d.ts +6 -0
- package/dist/0-face/layout-inspector.d.ts.map +1 -0
- package/dist/0-face/layout-inspector.js +197 -0
- package/dist/0-face/preferences.d.ts +20 -0
- package/dist/0-face/preferences.d.ts.map +1 -0
- package/dist/0-face/preferences.js +19 -0
- package/dist/0-face/pricing.d.ts +15 -0
- package/dist/0-face/pricing.d.ts.map +1 -0
- package/dist/0-face/pricing.js +46 -0
- package/dist/0-face/scaling.d.ts +10 -0
- package/dist/0-face/scaling.d.ts.map +1 -0
- package/dist/0-face/scaling.js +14 -0
- package/dist/0-face/shared-words.d.ts +14 -0
- package/dist/0-face/shared-words.d.ts.map +1 -0
- package/dist/0-face/shared-words.js +32 -0
- package/dist/0-face/theme.d.ts +4 -0
- package/dist/0-face/theme.d.ts.map +1 -0
- package/dist/0-face/theme.js +48 -0
- package/dist/0-face/tooltips.d.ts +8 -0
- package/dist/0-face/tooltips.d.ts.map +1 -0
- package/dist/0-face/tooltips.js +90 -0
- package/dist/0-face/translations/da.json +63 -0
- package/dist/0-face/translations/de.json +63 -0
- package/dist/0-face/translations/en.json +63 -0
- package/dist/0-face/translations/es.json +63 -0
- package/dist/0-face/translations/fi.json +63 -0
- package/dist/0-face/translations/fr.json +63 -0
- package/dist/0-face/translations/is.json +56 -0
- package/dist/0-face/translations/it.json +63 -0
- package/dist/0-face/translations/ja.json +63 -0
- package/dist/0-face/translations/ko.json +63 -0
- package/dist/0-face/translations/nb.json +63 -0
- package/dist/0-face/translations/pt-BR.json +63 -0
- package/dist/0-face/translations/pt.json +63 -0
- package/dist/0-face/translations/sv.json +63 -0
- package/dist/0-face/translations/zh.json +63 -0
- package/dist/0-face/translations-format.d.ts +62 -0
- package/dist/0-face/translations-format.d.ts.map +1 -0
- package/dist/0-face/translations-format.js +159 -0
- package/dist/1-root/palette.d.ts +31 -0
- package/dist/1-root/palette.d.ts.map +1 -0
- package/dist/1-root/palette.js +83 -0
- package/dist/2-core/ds-avatar.d.ts +82 -0
- package/dist/2-core/ds-avatar.d.ts.map +1 -0
- package/dist/2-core/ds-avatar.js +102 -0
- package/dist/2-core/ds-badge.d.ts +33 -0
- package/dist/2-core/ds-badge.d.ts.map +1 -0
- package/dist/2-core/ds-badge.js +77 -0
- package/dist/2-core/ds-banner.d.ts +68 -0
- package/dist/2-core/ds-banner.d.ts.map +1 -0
- package/dist/2-core/ds-banner.js +98 -0
- package/dist/2-core/ds-button.d.ts +102 -0
- package/dist/2-core/ds-button.d.ts.map +1 -0
- package/dist/2-core/ds-button.js +133 -0
- package/dist/2-core/ds-card.d.ts +39 -0
- package/dist/2-core/ds-card.d.ts.map +1 -0
- package/dist/2-core/ds-card.js +119 -0
- package/dist/2-core/ds-checkbox.d.ts +13 -0
- package/dist/2-core/ds-checkbox.d.ts.map +1 -0
- package/dist/2-core/ds-checkbox.js +11 -0
- package/dist/2-core/ds-color.d.ts +15 -0
- package/dist/2-core/ds-color.d.ts.map +1 -0
- package/dist/2-core/ds-color.js +30 -0
- package/dist/2-core/ds-composer.d.ts +69 -0
- package/dist/2-core/ds-composer.d.ts.map +1 -0
- package/dist/2-core/ds-composer.js +183 -0
- package/dist/2-core/ds-cycle.d.ts +85 -0
- package/dist/2-core/ds-cycle.d.ts.map +1 -0
- package/dist/2-core/ds-cycle.js +497 -0
- package/dist/2-core/ds-date.d.ts +16 -0
- package/dist/2-core/ds-date.d.ts.map +1 -0
- package/dist/2-core/ds-date.js +15 -0
- package/dist/2-core/ds-file-picker.d.ts +65 -0
- package/dist/2-core/ds-file-picker.d.ts.map +1 -0
- package/dist/2-core/ds-file-picker.js +80 -0
- package/dist/2-core/ds-gap.d.ts +27 -0
- package/dist/2-core/ds-gap.d.ts.map +1 -0
- package/dist/2-core/ds-gap.js +22 -0
- package/dist/2-core/ds-icon.d.ts +58 -0
- package/dist/2-core/ds-icon.d.ts.map +1 -0
- package/dist/2-core/ds-icon.js +128 -0
- package/dist/2-core/ds-input.d.ts +97 -0
- package/dist/2-core/ds-input.d.ts.map +1 -0
- package/dist/2-core/ds-input.js +429 -0
- package/dist/2-core/ds-language.d.ts +75 -0
- package/dist/2-core/ds-language.d.ts.map +1 -0
- package/dist/2-core/ds-language.js +74 -0
- package/dist/2-core/ds-pagedots.d.ts +32 -0
- package/dist/2-core/ds-pagedots.d.ts.map +1 -0
- package/dist/2-core/ds-pagedots.js +36 -0
- package/dist/2-core/ds-radio.d.ts +35 -0
- package/dist/2-core/ds-radio.d.ts.map +1 -0
- package/dist/2-core/ds-radio.js +19 -0
- package/dist/2-core/ds-select.d.ts +30 -0
- package/dist/2-core/ds-select.d.ts.map +1 -0
- package/dist/2-core/ds-select.js +45 -0
- package/dist/2-core/ds-split.d.ts +75 -0
- package/dist/2-core/ds-split.d.ts.map +1 -0
- package/dist/2-core/ds-split.js +101 -0
- package/dist/2-core/ds-swatch.d.ts +24 -0
- package/dist/2-core/ds-swatch.d.ts.map +1 -0
- package/dist/2-core/ds-swatch.js +16 -0
- package/dist/2-core/ds-switch.d.ts +13 -0
- package/dist/2-core/ds-switch.d.ts.map +1 -0
- package/dist/2-core/ds-switch.js +10 -0
- package/dist/2-core/ds-text.d.ts +75 -0
- package/dist/2-core/ds-text.d.ts.map +1 -0
- package/dist/2-core/ds-text.js +142 -0
- package/dist/2-core/ds-textarea.d.ts +46 -0
- package/dist/2-core/ds-textarea.d.ts.map +1 -0
- package/dist/2-core/ds-textarea.js +121 -0
- package/dist/2-core/ds-token.d.ts +48 -0
- package/dist/2-core/ds-token.d.ts.map +1 -0
- package/dist/2-core/ds-token.js +44 -0
- package/dist/2-core/ds-tooltip.d.ts +48 -0
- package/dist/2-core/ds-tooltip.d.ts.map +1 -0
- package/dist/2-core/ds-tooltip.js +99 -0
- package/dist/2-core/generated/ds-icon-map.d.ts +295 -0
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -0
- package/dist/2-core/generated/ds-icon-map.js +579 -0
- package/dist/2-core/generated/icons-extra.d.ts +2 -0
- package/dist/2-core/generated/icons-extra.d.ts.map +1 -0
- package/dist/2-core/generated/icons-extra.js +243 -0
- package/dist/2-core/generated/icons-immediate.d.ts +3 -0
- package/dist/2-core/generated/icons-immediate.d.ts.map +1 -0
- package/dist/2-core/generated/icons-immediate.js +49 -0
- package/dist/3-unit/context-trigger.d.ts +22 -0
- package/dist/3-unit/context-trigger.d.ts.map +1 -0
- package/dist/3-unit/context-trigger.js +130 -0
- package/dist/3-unit/ds-accordion.d.ts +55 -0
- package/dist/3-unit/ds-accordion.d.ts.map +1 -0
- package/dist/3-unit/ds-accordion.js +105 -0
- package/dist/3-unit/ds-avatar-group.d.ts +40 -0
- package/dist/3-unit/ds-avatar-group.d.ts.map +1 -0
- package/dist/3-unit/ds-avatar-group.js +84 -0
- package/dist/3-unit/ds-form.d.ts +70 -0
- package/dist/3-unit/ds-form.d.ts.map +1 -0
- package/dist/3-unit/ds-form.js +232 -0
- package/dist/3-unit/ds-list.d.ts +25 -0
- package/dist/3-unit/ds-list.d.ts.map +1 -0
- package/dist/3-unit/ds-list.js +25 -0
- package/dist/3-unit/ds-menu.d.ts +162 -0
- package/dist/3-unit/ds-menu.d.ts.map +1 -0
- package/dist/3-unit/ds-menu.js +607 -0
- package/dist/3-unit/ds-row.d.ts +43 -0
- package/dist/3-unit/ds-row.d.ts.map +1 -0
- package/dist/3-unit/ds-row.js +32 -0
- package/dist/3-unit/ds-table.d.ts +33 -0
- package/dist/3-unit/ds-table.d.ts.map +1 -0
- package/dist/3-unit/ds-table.js +43 -0
- package/dist/3-unit/ds-tabs.d.ts +50 -0
- package/dist/3-unit/ds-tabs.d.ts.map +1 -0
- package/dist/3-unit/ds-tabs.js +64 -0
- package/dist/3-unit/ds-token-field.d.ts +64 -0
- package/dist/3-unit/ds-token-field.d.ts.map +1 -0
- package/dist/3-unit/ds-token-field.js +184 -0
- package/dist/4-page/ds-container.d.ts +17 -0
- package/dist/4-page/ds-container.d.ts.map +1 -0
- package/dist/4-page/ds-container.js +11 -0
- package/dist/4-page/ds-dialog.d.ts +105 -0
- package/dist/4-page/ds-dialog.d.ts.map +1 -0
- package/dist/4-page/ds-dialog.js +358 -0
- package/dist/4-page/ds-grid.d.ts +28 -0
- package/dist/4-page/ds-grid.d.ts.map +1 -0
- package/dist/4-page/ds-grid.js +49 -0
- package/dist/4-page/ds-layout.d.ts +31 -0
- package/dist/4-page/ds-layout.d.ts.map +1 -0
- package/dist/4-page/ds-layout.js +930 -0
- package/dist/4-page/ds-panel.d.ts +26 -0
- package/dist/4-page/ds-panel.d.ts.map +1 -0
- package/dist/4-page/ds-panel.js +29 -0
- package/dist/4-page/email.d.ts +49 -0
- package/dist/4-page/email.d.ts.map +1 -0
- package/dist/4-page/email.js +134 -0
- package/dist/components.d.ts +14 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +13 -0
- package/dist/design-system-1.bundle.js +9115 -0
- package/dist/design-system-1.bundle.js.map +1 -0
- package/dist/design-system-1.bundle.min.js +6879 -0
- package/dist/design-system-1.bundle.min.js.map +1 -0
- package/dist/design-system-1.css +2 -0
- package/dist/icons-extra-BoAACA4X.js +944 -0
- package/dist/icons-extra-BoAACA4X.js.map +1 -0
- package/dist/icons-extra-DlxTo_Y4.js +247 -0
- package/dist/icons-extra-DlxTo_Y4.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/react/accordion.d.ts +21 -0
- package/dist/react/accordion.d.ts.map +1 -0
- package/dist/react/accordion.js +30 -0
- package/dist/react/avatar-group.d.ts +6 -0
- package/dist/react/avatar-group.d.ts.map +1 -0
- package/dist/react/avatar-group.js +5 -0
- package/dist/react/avatar.d.ts +13 -0
- package/dist/react/avatar.d.ts.map +1 -0
- package/dist/react/avatar.js +18 -0
- package/dist/react/badge.d.ts +11 -0
- package/dist/react/badge.d.ts.map +1 -0
- package/dist/react/badge.js +4 -0
- package/dist/react/button.d.ts +13 -0
- package/dist/react/button.d.ts.map +1 -0
- package/dist/react/button.js +37 -0
- package/dist/react/choice.d.ts +43 -0
- package/dist/react/choice.d.ts.map +1 -0
- package/dist/react/choice.js +32 -0
- package/dist/react/composer.d.ts +17 -0
- package/dist/react/composer.d.ts.map +1 -0
- package/dist/react/composer.js +8 -0
- package/dist/react/context-menu.d.ts +657 -0
- package/dist/react/context-menu.d.ts.map +1 -0
- package/dist/react/context-menu.js +133 -0
- package/dist/react/dialog.d.ts +1173 -0
- package/dist/react/dialog.d.ts.map +1 -0
- package/dist/react/dialog.js +79 -0
- package/dist/react/file-picker.d.ts +29 -0
- package/dist/react/file-picker.d.ts.map +1 -0
- package/dist/react/file-picker.js +17 -0
- package/dist/react/input.d.ts +35 -0
- package/dist/react/input.d.ts.map +1 -0
- package/dist/react/input.js +128 -0
- package/dist/react/menu.d.ts +37 -0
- package/dist/react/menu.d.ts.map +1 -0
- package/dist/react/menu.js +31 -0
- package/dist/react/split.d.ts +15 -0
- package/dist/react/split.d.ts.map +1 -0
- package/dist/react/split.js +32 -0
- package/dist/react/token-field.d.ts +36 -0
- package/dist/react/token-field.d.ts.map +1 -0
- package/dist/react/token-field.js +33 -0
- package/dist/shared-words-Cg6Phtx0.js +915 -0
- package/dist/shared-words-Cg6Phtx0.js.map +1 -0
- package/dist/shared-words-Ddz0yUEF.js +933 -0
- package/dist/shared-words-Ddz0yUEF.js.map +1 -0
- package/package.json +149 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-system-1.bundle.js","names":["s","t","e","i","t","i","s","e","h","o","n","r","l","c","a","u","d","f","v","m","p","y","b","S","M","j","t","o","i","n","e","l","d","c","f","r","s","u","m","p","h","s","o","r","c","h","n","e","f","t","i","h","t","s","o","i","i","s","l","o","r","t","l","t","o","r","e","s","o","n","r","i","c","i","e","o","n","l","t","s","i","t","e","r","o","#syncDisabled","#disabled","#onKeyDown","#onKeyUp","#onClick","#enabledTabIndex","s","t","n","i","o","r","i","o","e","r","s","t","i","t","n","o","r","e","s","t","t","e","r","s"],"sources":["../node_modules/.pnpm/signal-polyfill@0.2.2/node_modules/signal-polyfill/dist/index.js","../node_modules/.pnpm/@lit-labs+signals@0.1.3/node_modules/@lit-labs/signals/lib/signal-watcher.js","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive.js","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive-helpers.js","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/async-directive.js","../node_modules/.pnpm/@lit-labs+signals@0.1.3/node_modules/@lit-labs/signals/lib/watch.js","../node_modules/.pnpm/@lit-labs+signals@0.1.3/node_modules/@lit-labs/signals/lib/html-tag.js","../node_modules/.pnpm/@lit-labs+signals@0.1.3/node_modules/@lit-labs/signals/index.js","../DS1/0-face/scaling.ts","../DS1/0-face/device.ts","../DS1/0-face/languages.ts","../DS1/0-face/language-routing.ts","../DS1/0-face/translations-format.ts","../DS1/0-face/i18n.ts","../DS1/0-face/layout-inspector.ts","../DS1/0-face/grid-fit.ts","../DS1/0-face/grid.ts","../DS1/0-face/tooltips.ts","../DS1/0-face/preferences.ts","../DS1/0-face/pricing.ts","../DS1/0-face/theme.ts","../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../DS1/0-face/define.ts","../DS1/2-core/styles/ds-text.css?inline","../DS1/2-core/ds-text.ts","../DS1/0-face/control.ts","../DS1/2-core/styles/ds-button-host.css?inline","../DS1/2-core/styles/ds-button.css?inline","../DS1/2-core/ds-button.ts","../DS1/2-core/styles/ds-banner.css?inline","../DS1/2-core/ds-banner.ts","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/unsafe-html.js","../DS1/2-core/styles/ds-icon.css?inline","../DS1/2-core/generated/icons-immediate.ts","../DS1/2-core/ds-icon.ts","../DS1/2-core/styles/ds-badge.css?inline","../DS1/2-core/ds-badge.ts","../DS1/2-core/styles/ds-checkbox.css?inline","../DS1/2-core/ds-checkbox.ts","../DS1/2-core/styles/ds-radio.css?inline","../DS1/2-core/ds-radio.ts","../DS1/2-core/styles/ds-switch.css?inline","../DS1/2-core/ds-switch.ts","../DS1/2-core/styles/ds-split.css?inline","../DS1/2-core/ds-split.ts","../DS1/2-core/styles/ds-select.css?inline","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/style-map.js","../DS1/2-core/ds-swatch.ts","../DS1/2-core/ds-select.ts","../DS1/2-core/styles/ds-color.css?inline","../DS1/1-root/component-metrics.css?inline","../DS1/2-core/ds-color.ts","../DS1/2-core/ds-card.ts","../DS1/2-core/styles/ds-cycle.css?inline","../DS1/2-core/ds-cycle.ts","../DS1/2-core/styles/ds-date.css?inline","../DS1/2-core/ds-date.ts","../DS1/2-core/styles/ds-gap.css?inline","../DS1/2-core/ds-gap.ts","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/live.js","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/if-defined.js","../DS1/x-icon/ezo-password-visibility-see.svg?url","../DS1/x-icon/ezo-password-visibility-unsee.svg?url","../DS1/2-core/styles/ds-input.css?inline","../DS1/2-core/ds-input.ts","../DS1/2-core/styles/ds-file-picker.css?inline","../DS1/2-core/ds-file-picker.ts","../DS1/2-core/styles/ds-textarea.css?inline","../DS1/2-core/ds-textarea.ts","../DS1/2-core/styles/ds-composer.css?inline","../DS1/2-core/styles/ds-composer-frame.css?inline","../DS1/2-core/ds-composer.ts","../DS1/2-core/styles/ds-language.css?inline","../DS1/2-core/ds-language.ts","../DS1/2-core/styles/ds-tooltip.css?inline","../DS1/2-core/ds-tooltip.ts","../DS1/3-unit/styles/ds-row.css?inline","../DS1/3-unit/ds-row.ts","../DS1/3-unit/styles/ds-accordion.css?inline","../DS1/3-unit/ds-accordion.ts","../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/keyed.js","../DS1/2-core/styles/ds-avatar.css?inline","../DS1/2-core/ds-avatar.ts","../DS1/3-unit/styles/ds-avatar-group.css?inline","../DS1/3-unit/ds-avatar-group.ts","../DS1/3-unit/ds-form.ts","../DS1/3-unit/styles/ds-list.css?inline","../DS1/3-unit/ds-list.ts","../DS1/3-unit/styles/ds-table.css?inline","../DS1/3-unit/ds-table.ts","../DS1/4-page/styles/ds-container.css?inline","../DS1/4-page/ds-container.ts","../DS1/4-page/styles/ds-grid.css?inline","../DS1/4-page/ds-grid.ts","../DS1/4-page/styles/ds-layout.css?inline","../DS1/4-page/ds-layout.ts","../DS1/3-unit/styles/ds-menu.css?inline","../DS1/3-unit/context-trigger.ts","../DS1/3-unit/ds-menu.ts","../DS1/3-unit/styles/ds-tabs.css?inline","../DS1/3-unit/ds-tabs.ts","../DS1/4-page/styles/ds-panel.css?inline","../DS1/4-page/ds-panel.ts","../DS1/4-page/styles/ds-dialog.css?inline","../DS1/4-page/ds-dialog.ts","../DS1/2-core/styles/ds-token.css?inline","../DS1/2-core/ds-token.ts","../DS1/3-unit/styles/ds-token-field.css?inline","../DS1/3-unit/ds-token-field.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nvar __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateIn = (member, obj) => {\n if (Object(obj) !== obj)\n throw TypeError('Cannot use the \"in\" operator on this value');\n return member.has(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateMethod = (obj, member, method) => {\n __accessCheck(obj, member, \"access private method\");\n return method;\n};\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction defaultEquals(a, b) {\n return Object.is(a, b);\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet activeConsumer = null;\nlet inNotificationPhase = false;\nlet epoch = 1;\nconst SIGNAL = /* @__PURE__ */ Symbol(\"SIGNAL\");\nfunction setActiveConsumer(consumer) {\n const prev = activeConsumer;\n activeConsumer = consumer;\n return prev;\n}\nfunction getActiveConsumer() {\n return activeConsumer;\n}\nfunction isInNotificationPhase() {\n return inNotificationPhase;\n}\nconst REACTIVE_NODE = {\n version: 0,\n lastCleanEpoch: 0,\n dirty: false,\n producerNode: void 0,\n producerLastReadVersion: void 0,\n producerIndexOfThis: void 0,\n nextProducerIndex: 0,\n liveConsumerNode: void 0,\n liveConsumerIndexOfThis: void 0,\n consumerAllowSignalWrites: false,\n consumerIsAlwaysLive: false,\n producerMustRecompute: () => false,\n producerRecomputeValue: () => {\n },\n consumerMarkedDirty: () => {\n },\n consumerOnSignalRead: () => {\n }\n};\nfunction producerAccessed(node) {\n if (inNotificationPhase) {\n throw new Error(\n typeof ngDevMode !== \"undefined\" && ngDevMode ? `Assertion error: signal read during notification phase` : \"\"\n );\n }\n if (activeConsumer === null) {\n return;\n }\n activeConsumer.consumerOnSignalRead(node);\n const idx = activeConsumer.nextProducerIndex++;\n assertConsumerNode(activeConsumer);\n if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {\n if (consumerIsLive(activeConsumer)) {\n const staleProducer = activeConsumer.producerNode[idx];\n producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);\n }\n }\n if (activeConsumer.producerNode[idx] !== node) {\n activeConsumer.producerNode[idx] = node;\n activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;\n }\n activeConsumer.producerLastReadVersion[idx] = node.version;\n}\nfunction producerIncrementEpoch() {\n epoch++;\n}\nfunction producerUpdateValueVersion(node) {\n if (!node.dirty && node.lastCleanEpoch === epoch) {\n return;\n }\n if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {\n node.dirty = false;\n node.lastCleanEpoch = epoch;\n return;\n }\n node.producerRecomputeValue(node);\n node.dirty = false;\n node.lastCleanEpoch = epoch;\n}\nfunction producerNotifyConsumers(node) {\n if (node.liveConsumerNode === void 0) {\n return;\n }\n const prev = inNotificationPhase;\n inNotificationPhase = true;\n try {\n for (const consumer of node.liveConsumerNode) {\n if (!consumer.dirty) {\n consumerMarkDirty(consumer);\n }\n }\n } finally {\n inNotificationPhase = prev;\n }\n}\nfunction producerUpdatesAllowed() {\n return (activeConsumer == null ? void 0 : activeConsumer.consumerAllowSignalWrites) !== false;\n}\nfunction consumerMarkDirty(node) {\n var _a;\n node.dirty = true;\n producerNotifyConsumers(node);\n (_a = node.consumerMarkedDirty) == null ? void 0 : _a.call(node.wrapper ?? node);\n}\nfunction consumerBeforeComputation(node) {\n node && (node.nextProducerIndex = 0);\n return setActiveConsumer(node);\n}\nfunction consumerAfterComputation(node, prevConsumer) {\n setActiveConsumer(prevConsumer);\n if (!node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0) {\n return;\n }\n if (consumerIsLive(node)) {\n for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {\n producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n }\n }\n while (node.producerNode.length > node.nextProducerIndex) {\n node.producerNode.pop();\n node.producerLastReadVersion.pop();\n node.producerIndexOfThis.pop();\n }\n}\nfunction consumerPollProducersForChange(node) {\n assertConsumerNode(node);\n for (let i = 0; i < node.producerNode.length; i++) {\n const producer = node.producerNode[i];\n const seenVersion = node.producerLastReadVersion[i];\n if (seenVersion !== producer.version) {\n return true;\n }\n producerUpdateValueVersion(producer);\n if (seenVersion !== producer.version) {\n return true;\n }\n }\n return false;\n}\nfunction producerAddLiveConsumer(node, consumer, indexOfThis) {\n var _a;\n assertProducerNode(node);\n assertConsumerNode(node);\n if (node.liveConsumerNode.length === 0) {\n (_a = node.watched) == null ? void 0 : _a.call(node.wrapper);\n for (let i = 0; i < node.producerNode.length; i++) {\n node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);\n }\n }\n node.liveConsumerIndexOfThis.push(indexOfThis);\n return node.liveConsumerNode.push(consumer) - 1;\n}\nfunction producerRemoveLiveConsumerAtIndex(node, idx) {\n var _a;\n assertProducerNode(node);\n assertConsumerNode(node);\n if (typeof ngDevMode !== \"undefined\" && ngDevMode && idx >= node.liveConsumerNode.length) {\n throw new Error(\n `Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`\n );\n }\n if (node.liveConsumerNode.length === 1) {\n (_a = node.unwatched) == null ? void 0 : _a.call(node.wrapper);\n for (let i = 0; i < node.producerNode.length; i++) {\n producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n }\n }\n const lastIdx = node.liveConsumerNode.length - 1;\n node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];\n node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];\n node.liveConsumerNode.length--;\n node.liveConsumerIndexOfThis.length--;\n if (idx < node.liveConsumerNode.length) {\n const idxProducer = node.liveConsumerIndexOfThis[idx];\n const consumer = node.liveConsumerNode[idx];\n assertConsumerNode(consumer);\n consumer.producerIndexOfThis[idxProducer] = idx;\n }\n}\nfunction consumerIsLive(node) {\n var _a;\n return node.consumerIsAlwaysLive || (((_a = node == null ? void 0 : node.liveConsumerNode) == null ? void 0 : _a.length) ?? 0) > 0;\n}\nfunction assertConsumerNode(node) {\n node.producerNode ?? (node.producerNode = []);\n node.producerIndexOfThis ?? (node.producerIndexOfThis = []);\n node.producerLastReadVersion ?? (node.producerLastReadVersion = []);\n}\nfunction assertProducerNode(node) {\n node.liveConsumerNode ?? (node.liveConsumerNode = []);\n node.liveConsumerIndexOfThis ?? (node.liveConsumerIndexOfThis = []);\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction computedGet(node) {\n producerUpdateValueVersion(node);\n producerAccessed(node);\n if (node.value === ERRORED) {\n throw node.error;\n }\n return node.value;\n}\nfunction createComputed(computation) {\n const node = Object.create(COMPUTED_NODE);\n node.computation = computation;\n const computed = () => computedGet(node);\n computed[SIGNAL] = node;\n return computed;\n}\nconst UNSET = /* @__PURE__ */ Symbol(\"UNSET\");\nconst COMPUTING = /* @__PURE__ */ Symbol(\"COMPUTING\");\nconst ERRORED = /* @__PURE__ */ Symbol(\"ERRORED\");\nconst COMPUTED_NODE = /* @__PURE__ */ (() => {\n return {\n ...REACTIVE_NODE,\n value: UNSET,\n dirty: true,\n error: null,\n equal: defaultEquals,\n producerMustRecompute(node) {\n return node.value === UNSET || node.value === COMPUTING;\n },\n producerRecomputeValue(node) {\n if (node.value === COMPUTING) {\n throw new Error(\"Detected cycle in computations.\");\n }\n const oldValue = node.value;\n node.value = COMPUTING;\n const prevConsumer = consumerBeforeComputation(node);\n let newValue;\n let wasEqual = false;\n try {\n newValue = node.computation.call(node.wrapper);\n const oldOk = oldValue !== UNSET && oldValue !== ERRORED;\n wasEqual = oldOk && node.equal.call(node.wrapper, oldValue, newValue);\n } catch (err) {\n newValue = ERRORED;\n node.error = err;\n } finally {\n consumerAfterComputation(node, prevConsumer);\n }\n if (wasEqual) {\n node.value = oldValue;\n return;\n }\n node.value = newValue;\n node.version++;\n }\n };\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction defaultThrowError() {\n throw new Error();\n}\nlet throwInvalidWriteToSignalErrorFn = defaultThrowError;\nfunction throwInvalidWriteToSignalError() {\n throwInvalidWriteToSignalErrorFn();\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createSignal(initialValue) {\n const node = Object.create(SIGNAL_NODE);\n node.value = initialValue;\n const getter = () => {\n producerAccessed(node);\n return node.value;\n };\n getter[SIGNAL] = node;\n return getter;\n}\nfunction signalGetFn() {\n producerAccessed(this);\n return this.value;\n}\nfunction signalSetFn(node, newValue) {\n if (!producerUpdatesAllowed()) {\n throwInvalidWriteToSignalError();\n }\n if (!node.equal.call(node.wrapper, node.value, newValue)) {\n node.value = newValue;\n signalValueChanged(node);\n }\n}\nconst SIGNAL_NODE = /* @__PURE__ */ (() => {\n return {\n ...REACTIVE_NODE,\n equal: defaultEquals,\n value: void 0\n };\n})();\nfunction signalValueChanged(node) {\n node.version++;\n producerIncrementEpoch();\n producerNotifyConsumers(node);\n}\n/**\n * @license\n * Copyright 2024 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst NODE = Symbol(\"node\");\nvar Signal;\n((Signal2) => {\n var _a, _brand, brand_fn, _b, _brand2, brand_fn2;\n class State {\n constructor(initialValue, options = {}) {\n __privateAdd(this, _brand);\n __publicField(this, _a);\n const ref = createSignal(initialValue);\n const node = ref[SIGNAL];\n this[NODE] = node;\n node.wrapper = this;\n if (options) {\n const equals = options.equals;\n if (equals) {\n node.equal = equals;\n }\n node.watched = options[Signal2.subtle.watched];\n node.unwatched = options[Signal2.subtle.unwatched];\n }\n }\n get() {\n if (!(0, Signal2.isState)(this))\n throw new TypeError(\"Wrong receiver type for Signal.State.prototype.get\");\n return signalGetFn.call(this[NODE]);\n }\n set(newValue) {\n if (!(0, Signal2.isState)(this))\n throw new TypeError(\"Wrong receiver type for Signal.State.prototype.set\");\n if (isInNotificationPhase()) {\n throw new Error(\"Writes to signals not permitted during Watcher callback\");\n }\n const ref = this[NODE];\n signalSetFn(ref, newValue);\n }\n }\n _a = NODE;\n _brand = new WeakSet();\n brand_fn = function() {\n };\n Signal2.isState = (s) => typeof s === \"object\" && __privateIn(_brand, s);\n Signal2.State = State;\n class Computed {\n // Create a Signal which evaluates to the value returned by the callback.\n // Callback is called with this signal as the parameter.\n constructor(computation, options) {\n __privateAdd(this, _brand2);\n __publicField(this, _b);\n const ref = createComputed(computation);\n const node = ref[SIGNAL];\n node.consumerAllowSignalWrites = true;\n this[NODE] = node;\n node.wrapper = this;\n if (options) {\n const equals = options.equals;\n if (equals) {\n node.equal = equals;\n }\n node.watched = options[Signal2.subtle.watched];\n node.unwatched = options[Signal2.subtle.unwatched];\n }\n }\n get() {\n if (!(0, Signal2.isComputed)(this))\n throw new TypeError(\"Wrong receiver type for Signal.Computed.prototype.get\");\n return computedGet(this[NODE]);\n }\n }\n _b = NODE;\n _brand2 = new WeakSet();\n brand_fn2 = function() {\n };\n Signal2.isComputed = (c) => typeof c === \"object\" && __privateIn(_brand2, c);\n Signal2.Computed = Computed;\n ((subtle2) => {\n var _a2, _brand3, brand_fn3, _assertSignals, assertSignals_fn;\n function untrack(cb) {\n let output;\n let prevActiveConsumer = null;\n try {\n prevActiveConsumer = setActiveConsumer(null);\n output = cb();\n } finally {\n setActiveConsumer(prevActiveConsumer);\n }\n return output;\n }\n subtle2.untrack = untrack;\n function introspectSources(sink) {\n var _a3;\n if (!(0, Signal2.isComputed)(sink) && !(0, Signal2.isWatcher)(sink)) {\n throw new TypeError(\"Called introspectSources without a Computed or Watcher argument\");\n }\n return ((_a3 = sink[NODE].producerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? [];\n }\n subtle2.introspectSources = introspectSources;\n function introspectSinks(signal) {\n var _a3;\n if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) {\n throw new TypeError(\"Called introspectSinks without a Signal argument\");\n }\n return ((_a3 = signal[NODE].liveConsumerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? [];\n }\n subtle2.introspectSinks = introspectSinks;\n function hasSinks(signal) {\n if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) {\n throw new TypeError(\"Called hasSinks without a Signal argument\");\n }\n const liveConsumerNode = signal[NODE].liveConsumerNode;\n if (!liveConsumerNode)\n return false;\n return liveConsumerNode.length > 0;\n }\n subtle2.hasSinks = hasSinks;\n function hasSources(signal) {\n if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isWatcher)(signal)) {\n throw new TypeError(\"Called hasSources without a Computed or Watcher argument\");\n }\n const producerNode = signal[NODE].producerNode;\n if (!producerNode)\n return false;\n return producerNode.length > 0;\n }\n subtle2.hasSources = hasSources;\n class Watcher {\n // When a (recursive) source of Watcher is written to, call this callback,\n // if it hasn't already been called since the last `watch` call.\n // No signals may be read or written during the notify.\n constructor(notify) {\n __privateAdd(this, _brand3);\n __privateAdd(this, _assertSignals);\n __publicField(this, _a2);\n let node = Object.create(REACTIVE_NODE);\n node.wrapper = this;\n node.consumerMarkedDirty = notify;\n node.consumerIsAlwaysLive = true;\n node.consumerAllowSignalWrites = false;\n node.producerNode = [];\n this[NODE] = node;\n }\n // Add these signals to the Watcher's set, and set the watcher to run its\n // notify callback next time any signal in the set (or one of its dependencies) changes.\n // Can be called with no arguments just to reset the \"notified\" state, so that\n // the notify callback will be invoked again.\n watch(...signals) {\n if (!(0, Signal2.isWatcher)(this)) {\n throw new TypeError(\"Called unwatch without Watcher receiver\");\n }\n __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals);\n const node = this[NODE];\n node.dirty = false;\n const prev = setActiveConsumer(node);\n for (const signal of signals) {\n producerAccessed(signal[NODE]);\n }\n setActiveConsumer(prev);\n }\n // Remove these signals from the watched set (e.g., for an effect which is disposed)\n unwatch(...signals) {\n if (!(0, Signal2.isWatcher)(this)) {\n throw new TypeError(\"Called unwatch without Watcher receiver\");\n }\n __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals);\n const node = this[NODE];\n assertConsumerNode(node);\n for (let i = node.producerNode.length - 1; i >= 0; i--) {\n if (signals.includes(node.producerNode[i].wrapper)) {\n producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n const lastIdx = node.producerNode.length - 1;\n node.producerNode[i] = node.producerNode[lastIdx];\n node.producerIndexOfThis[i] = node.producerIndexOfThis[lastIdx];\n node.producerNode.length--;\n node.producerIndexOfThis.length--;\n node.nextProducerIndex--;\n if (i < node.producerNode.length) {\n const idxConsumer = node.producerIndexOfThis[i];\n const producer = node.producerNode[i];\n assertProducerNode(producer);\n producer.liveConsumerIndexOfThis[idxConsumer] = i;\n }\n }\n }\n }\n // Returns the set of computeds in the Watcher's set which are still yet\n // to be re-evaluated\n getPending() {\n if (!(0, Signal2.isWatcher)(this)) {\n throw new TypeError(\"Called getPending without Watcher receiver\");\n }\n const node = this[NODE];\n return node.producerNode.filter((n) => n.dirty).map((n) => n.wrapper);\n }\n }\n _a2 = NODE;\n _brand3 = new WeakSet();\n brand_fn3 = function() {\n };\n _assertSignals = new WeakSet();\n assertSignals_fn = function(signals) {\n for (const signal of signals) {\n if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) {\n throw new TypeError(\"Called watch/unwatch without a Computed or State argument\");\n }\n }\n };\n Signal2.isWatcher = (w) => __privateIn(_brand3, w);\n subtle2.Watcher = Watcher;\n function currentComputed() {\n var _a3;\n return (_a3 = getActiveConsumer()) == null ? void 0 : _a3.wrapper;\n }\n subtle2.currentComputed = currentComputed;\n subtle2.watched = Symbol(\"watched\");\n subtle2.unwatched = Symbol(\"unwatched\");\n })(Signal2.subtle || (Signal2.subtle = {}));\n})(Signal || (Signal = {}));\nexport {\n Signal\n};\n","import{Signal as t}from\"signal-polyfill\";\n/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const i=Symbol(\"SignalWatcherBrand\"),s=new FinalizationRegistry((({watcher:t,signal:i})=>{t.unwatch(i)})),h=new WeakMap;function e(e){return!0===e[i]?(console.warn(\"SignalWatcher should not be applied to the same class more than once.\"),e):class extends e{constructor(){super(...arguments),this._$St=new t.State(0),this._$Si=!1,this._$So=!0,this._$Sh=new Set}_$Sl(){if(void 0!==this._$Su)return;this._$Sv=new t.Computed((()=>{this._$St.get(),super.performUpdate()}));const i=this._$Su=new t.subtle.Watcher((function(){const t=h.get(this);void 0!==t&&(!1===t._$Si&&t.requestUpdate(),this.watch())}));h.set(i,this),s.register(this,{watcher:i,signal:this._$Sv}),i.watch(this._$Sv)}_$Sp(){void 0!==this._$Su&&(this._$Su.unwatch(this._$Sv),this._$Sv=void 0,this._$Su=void 0)}performUpdate(){this.isUpdatePending&&(this._$Sl(),this._$Si=!0,this._$St.set(this._$St.get()+1),this._$Si=!1,this._$Sv.get())}update(t){try{this._$So?(this._$So=!1,super.update(t)):this._$Sh.forEach((t=>t.commit()))}finally{this.isUpdatePending=!1,this._$Sh.clear()}}requestUpdate(t,i,s){this._$So=!0,super.requestUpdate(t,i,s)}connectedCallback(){super.connectedCallback(),this.requestUpdate()}disconnectedCallback(){super.disconnectedCallback(),queueMicrotask((()=>{!1===this.isConnected&&this._$Sp()}))}_(t){this._$Sh.add(t);const i=this._$So;this.requestUpdate(),this._$So=i}m(t){this._$Sh.delete(t)}}}export{e as SignalWatcher};\n//# sourceMappingURL=signal-watcher.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{directive as i}from\"lit/directive.js\";import{AsyncDirective as t}from\"lit/async-directive.js\";import{Signal as s}from\"signal-polyfill\";\n/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class h extends t{_$Sl(){if(void 0!==this._$Su)return;this._$SW=new s.Computed((()=>{var i;return null===(i=this._$Sj)||void 0===i?void 0:i.get()}));const i=this._$Su=new s.subtle.Watcher((()=>{var t;null===(t=this._$SO)||void 0===t||t._(this),i.watch()}));i.watch(this._$SW)}_$Sp(){var i;void 0!==this._$Su&&(this._$Su.unwatch(this._$SW),this._$SW=void 0,this._$Su=void 0,null===(i=this._$SO)||void 0===i||i.m(this))}commit(){this.setValue(s.subtle.untrack((()=>{var i;return null===(i=this._$SW)||void 0===i?void 0:i.get()})))}render(i){return s.subtle.untrack((()=>i.get()))}update(i,[t]){var h,o;return null!==(h=this._$SO)&&void 0!==h||(this._$SO=null===(o=i.options)||void 0===o?void 0:o.host),t!==this._$Sj&&void 0!==this._$Sj&&this._$Sp(),this._$Sj=t,this._$Sl(),s.subtle.untrack((()=>this._$SW.get()))}disconnected(){this._$Sp()}reconnected(){this._$Sl()}}const o=i(h);export{h as WatchDirective,o as watch};\n//# sourceMappingURL=watch.js.map\n","import{html as o,svg as t}from\"lit/html.js\";import{watch as s}from\"./watch.js\";import{Signal as i}from\"signal-polyfill\";\n/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const m=o=>(t,...m)=>o(t,...m.map((o=>o instanceof i.State||o instanceof i.Computed?s(o):o))),l=m(o),r=m(t);export{l as html,r as svg,m as withWatch};\n//# sourceMappingURL=html-tag.js.map\n","import{Signal as t}from\"signal-polyfill\";export*from\"signal-polyfill\";export{SignalWatcher}from\"./lib/signal-watcher.js\";export{WatchDirective,watch}from\"./lib/watch.js\";export{html,svg,withWatch}from\"./lib/html-tag.js\";\n/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const l=t.State,o=t.Computed,r=(l,o)=>new t.State(l,o),i=(l,o)=>new t.Computed(l,o);export{o as Computed,l as State,i as computed,r as signal};\n//# sourceMappingURL=index.js.map\n","/* Design system 1 responsive scale calculation, shared with native HTML sites */\nexport type ScalingMode = \"auto\" | \"fixed\" | \"fluid\";\n\nexport interface ScalingConfig {\n mode: ScalingMode;\n baseWidth: number;\n minScale: number;\n maxScale: number;\n}\n\n// ============================================================================\n// Configuration & Signals\n// ============================================================================\n\nexport const defaultScalingConfig: ScalingConfig = {\n mode: \"auto\",\n baseWidth: 280,\n minScale: 0.75,\n maxScale: 2.0,\n};\n\nexport function calculateScalingFactor(viewportWidth: number, config: ScalingConfig = defaultScalingConfig): number {\n if (config.mode === \"fixed\") return 1;\n return Number(Math.max(config.minScale, Math.min(config.maxScale, viewportWidth / config.baseWidth)).toFixed(3));\n}\n","// device.ts\n// Device detection, context utilities, and responsive scaling\n\nimport { signal } from \"@lit-labs/signals\";\nimport { calculateScalingFactor as calculateScale, defaultScalingConfig, type ScalingConfig } from \"./scaling\";\nexport type { ScalingConfig, ScalingMode } from \"./scaling\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DeviceType = \"mobile\" | \"tablet\" | \"desktop\";\n\nexport interface DeviceInfo {\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n isTouchCapable: boolean;\n deviceType: DeviceType;\n userAgent: string;\n screenWidth: number;\n screenHeight: number;\n}\n\n/** Reactive scaling factor signal */\nexport const scalingFactor = signal<number>(1);\n\n/** Current scaling configuration */\nexport const scalingConfig = signal<ScalingConfig>(defaultScalingConfig);\n\n// ============================================================================\n// Device Detection\n// ============================================================================\n\n/**\n * Comprehensive mobile device detection\n * Combines user agent detection, touch capability, and viewport size\n */\nexport function detectMobileDevice(): boolean {\n if (typeof navigator === \"undefined\" || typeof window === \"undefined\") {\n return false;\n }\n\n const nav = navigator as any;\n const win = window as any;\n const ua: string =\n (nav && (nav.userAgent || nav.vendor)) || (win && win.opera) || \"\";\n\n // User agent based detection\n const uaMatchesMobile =\n /Mobile|Android|iP(ad|hone|od)|IEMobile|BlackBerry|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)|Windows Phone|Phone|Tablet/i.test(\n ua\n );\n\n // Touch capability detection\n const touchPoints = (nav && nav.maxTouchPoints) || 0;\n const isTouchCapable = touchPoints > 1;\n\n // Viewport detection\n const narrowViewport = win\n ? Math.min(win.innerWidth || 0, win.innerHeight || 0) <= 820\n : false;\n\n return uaMatchesMobile || (isTouchCapable && narrowViewport);\n}\n\n/**\n * Get detailed device information\n */\nexport function getDeviceInfo(): DeviceInfo {\n const isMobile = detectMobileDevice();\n const nav = navigator as any;\n const win = window as any;\n\n const touchPoints = (nav && nav.maxTouchPoints) || 0;\n const isTouchCapable = touchPoints > 1;\n\n // Use clientWidth instead of innerWidth to exclude scrollbars\n const screenWidth =\n typeof document !== \"undefined\"\n ? document.documentElement.clientWidth\n : win?.innerWidth || 0;\n const screenHeight =\n typeof document !== \"undefined\"\n ? document.documentElement.clientHeight\n : win?.innerHeight || 0;\n const isTablet = isMobile && Math.min(screenWidth, screenHeight) >= 600;\n\n return {\n isMobile,\n isTablet,\n isDesktop: !isMobile,\n isTouchCapable,\n deviceType: isMobile ? (isTablet ? \"tablet\" : \"mobile\") : \"desktop\",\n userAgent: (nav && (nav.userAgent || nav.vendor)) || \"\",\n screenWidth,\n screenHeight,\n };\n}\n\n// ============================================================================\n// Scaling\n// ============================================================================\n\n/**\n * Calculate the scaling factor based on viewport width\n * @param viewportWidth - Current viewport width in pixels\n * @param config - Scaling configuration\n * @returns The calculated scaling factor\n */\nexport function calculateScalingFactor(\n viewportWidth: number,\n config: ScalingConfig = scalingConfig.get()\n): number {\n return calculateScale(viewportWidth, config);\n}\n\n/**\n * Set the scaling configuration\n * @param config - Partial scaling configuration to apply\n */\nexport function setScalingConfig(config: Partial<ScalingConfig>): void {\n const currentConfig = scalingConfig.get();\n const newConfig = { ...currentConfig, ...config };\n scalingConfig.set(newConfig);\n\n // Recalculate scaling factor if in browser\n if (typeof window !== \"undefined\") {\n updateScalingFactor();\n }\n}\n\n/**\n * Update the scaling factor based on current viewport\n * Desktop always uses factor 1; mobile uses computed factor\n */\nexport function updateScalingFactor(): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const isMobile = detectMobileDevice();\n\n // Desktop: always use factor 1\n if (!isMobile) {\n const factor = 1;\n scalingFactor.set(factor);\n document.documentElement.style.setProperty(\"--sf\", factor.toString());\n window.dispatchEvent(\n new CustomEvent(\"scaling-changed\", {\n detail: { scalingFactor: factor, config: scalingConfig.get() },\n })\n );\n return;\n }\n\n // Mobile: compute scaling based on viewport\n const viewportWidth = document.documentElement.clientWidth;\n const config = scalingConfig.get();\n const newFactor = calculateScalingFactor(viewportWidth, config);\n\n scalingFactor.set(newFactor);\n document.documentElement.style.setProperty(\"--sf\", newFactor.toString());\n\n window.dispatchEvent(\n new CustomEvent(\"scaling-changed\", {\n detail: { scalingFactor: newFactor, config },\n })\n );\n}\n\n/**\n * Get the current scaling factor\n * @returns The current scaling factor\n */\nexport function getScalingFactor(): number {\n return scalingFactor.get();\n}\n\n/**\n * Convert a design pixel value to scaled pixels\n * @param designPx - The design pixel value (based on 280px width)\n * @returns The scaled pixel value\n */\nexport function scale(designPx: number): number {\n return designPx * scalingFactor.get();\n}\n\n/**\n * Convert a scaled pixel value back to design pixels\n * @param scaledPx - The scaled pixel value\n * @returns The design pixel value\n */\nexport function unscale(scaledPx: number): number {\n const factor = scalingFactor.get();\n return factor === 0 ? scaledPx : scaledPx / factor;\n}\n\n// ============================================================================\n// Unified Initialization\n// ============================================================================\n\n/**\n * Initialize device detection and scaling\n * Sets CSS classes (.mobile/.desktop) and --sf custom property\n */\nexport function initDeviceDetection(): DeviceInfo {\n const deviceInfo = getDeviceInfo();\n\n if (typeof document === \"undefined\") {\n return deviceInfo;\n }\n\n // Set device class on html element\n if (deviceInfo.isMobile) {\n document.documentElement.classList.add(\"mobile\");\n document.documentElement.classList.remove(\"desktop\");\n } else {\n document.documentElement.classList.add(\"desktop\");\n document.documentElement.classList.remove(\"mobile\");\n }\n\n // Update scaling factor (handles --sf CSS property)\n updateScalingFactor();\n\n // Log device info\n const factor = scalingFactor.get();\n if (deviceInfo.isMobile) {\n console.log(\n `[Design system 1] Mobile device detected - ${deviceInfo.deviceType} (${deviceInfo.screenWidth}x${deviceInfo.screenHeight}), scaling factor: ${factor.toFixed(2)}`\n );\n } else {\n console.log(\n `[Design system 1] Desktop device detected (${deviceInfo.screenWidth}x${deviceInfo.screenHeight})`\n );\n }\n\n // Log additional details in development mode\n if (typeof window !== \"undefined\" && (window as any).DS_ONE_DEBUG) {\n console.log(\"[Design system 1] Device Info:\", {\n type: deviceInfo.deviceType,\n isMobile: deviceInfo.isMobile,\n isTablet: deviceInfo.isTablet,\n isDesktop: deviceInfo.isDesktop,\n isTouchCapable: deviceInfo.isTouchCapable,\n viewport: `${deviceInfo.screenWidth}x${deviceInfo.screenHeight}`,\n scalingFactor: factor,\n userAgent: deviceInfo.userAgent,\n });\n }\n\n return deviceInfo;\n}\n\n// Auto-initialize when module loads\nif (typeof window !== \"undefined\") {\n // Wait for DOM to be ready\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => {\n initDeviceDetection();\n });\n } else {\n // DOM is already ready\n initDeviceDetection();\n }\n\n // Single debounced resize handler for both device detection + scaling\n let resizeTimeout: ReturnType<typeof setTimeout>;\n window.addEventListener(\"resize\", () => {\n clearTimeout(resizeTimeout);\n resizeTimeout = setTimeout(() => {\n initDeviceDetection();\n }, 100);\n });\n\n // Also handle orientation change\n window.addEventListener(\"orientationchange\", () => {\n setTimeout(initDeviceDetection, 100);\n });\n}\n\n// ============================================================================\n// App-like Behavior\n// ============================================================================\n\n/**\n * Disable double-tap to zoom in the browser (app-like behavior)\n * Prevents all zoom gestures including double-tap and pinch-to-zoom\n */\nexport function applike(): void {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\n return;\n }\n\n // Set viewport meta tag to prevent zoom - this is the most important step\n let viewport = document.querySelector('meta[name=\"viewport\"]');\n if (!viewport) {\n viewport = document.createElement(\"meta\");\n viewport.setAttribute(\"name\", \"viewport\");\n document.head.appendChild(viewport);\n }\n viewport.setAttribute(\n \"content\",\n \"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"\n );\n\n // Apply touch-action: pan-x pan-y globally to prevent zoom but allow panning\n const style = document.createElement(\"style\");\n style.id = \"ds-one-applike-style\";\n style.textContent = `\n * {\n touch-action: pan-x pan-y !important;\n -ms-touch-action: pan-x pan-y !important;\n }\n html, body {\n touch-action: pan-x pan-y !important;\n -ms-touch-action: pan-x pan-y !important;\n }\n `;\n // Remove existing style if present\n const existingStyle = document.getElementById(\"ds-one-applike-style\");\n if (existingStyle) {\n existingStyle.remove();\n }\n document.head.appendChild(style);\n\n // Track touch events to prevent double-tap zoom\n let lastTouchEnd = 0;\n let touchStartTime = 0;\n\n const preventZoom = (event: TouchEvent | WheelEvent | Event) => {\n // Prevent pinch zoom (two fingers)\n if (event instanceof TouchEvent) {\n if (event.touches.length > 1) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const now = Date.now();\n\n if (event.type === \"touchstart\") {\n // If touchstart happens within 300ms of last touchend, it's likely a double-tap\n if (now - lastTouchEnd < 300) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n touchStartTime = now;\n } else if (event.type === \"touchend\") {\n const touchDuration = now - touchStartTime;\n // If this is a quick tap (< 300ms) and happened soon after previous touchend, prevent it\n if (touchDuration < 300 && now - lastTouchEnd < 300) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n lastTouchEnd = now;\n } else if (event.type === \"touchmove\") {\n // Prevent any touchmove that might trigger zoom\n if (event.touches.length > 1) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n }\n\n // Prevent wheel zoom with ctrl/cmd key (common on trackpads)\n if (event instanceof WheelEvent && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n };\n\n // Use capture phase to catch events earlier\n const options = { passive: false, capture: true };\n\n // Prevent all zoom gestures - use capture phase\n document.addEventListener(\"touchstart\", preventZoom, options);\n document.addEventListener(\"touchmove\", preventZoom, options);\n document.addEventListener(\"touchend\", preventZoom, options);\n document.addEventListener(\"touchcancel\", preventZoom, options);\n\n // Prevent wheel zoom\n document.addEventListener(\"wheel\", preventZoom, options);\n\n // Prevent gesture events (iOS Safari) - use capture phase\n document.addEventListener(\n \"gesturestart\",\n (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n options\n );\n document.addEventListener(\n \"gesturechange\",\n (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n options\n );\n document.addEventListener(\n \"gestureend\",\n (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n options\n );\n}\n","/**\n * The languages every 0001 product chooses from: one list, with the name of\n * each in English and in itself, and how to read whatever a browser, a URL or\n * a saved setting calls a language.\n *\n * No browser code, so a product's backend (Convex, Node) imports it as well.\n * Each product turns on the subset it translates (`configureI18n({ languages })`).\n */\n\n/** Every language Design system 1 knows, in the order pickers show them. */\nexport const LANGUAGES = [\n \"da\",\n \"de\",\n \"en\",\n \"es\",\n \"fi\",\n \"fr\",\n \"is\",\n \"it\",\n \"ja\",\n \"ko\",\n \"nb\",\n \"nn\",\n \"no\",\n \"pt\",\n \"pt-BR\",\n \"sv\",\n \"zh\",\n] as const;\n\nexport type Language = (typeof LANGUAGES)[number];\n\n/** The language every product falls back to. */\nexport const DEFAULT_LANGUAGE: Language = \"en\";\n\nexport type LanguageMetadata = {\n code: Language;\n /** The name in English */\n label: string;\n /** The name in the language itself, as a picker shows it */\n nativeLabel: string;\n /** Other tags that mean this language, lower case (`da-dk`) */\n aliases: readonly string[];\n};\n\nexport const LANGUAGE_METADATA: Readonly<Record<Language, LanguageMetadata>> = {\n da: { code: \"da\", label: \"Danish\", nativeLabel: \"Dansk\", aliases: [\"da-dk\"] },\n de: {\n code: \"de\",\n label: \"German\",\n nativeLabel: \"Deutsch\",\n aliases: [\"de-de\", \"de-at\", \"de-ch\"],\n },\n en: {\n code: \"en\",\n label: \"English\",\n nativeLabel: \"English\",\n aliases: [\"en-us\", \"en-gb\", \"en-ca\", \"en-au\", \"en-nz\", \"en-ie\"],\n },\n es: {\n code: \"es\",\n label: \"Spanish\",\n nativeLabel: \"Español\",\n aliases: [\"es-es\", \"es-mx\", \"es-ar\", \"es-cl\", \"es-co\"],\n },\n fi: { code: \"fi\", label: \"Finnish\", nativeLabel: \"Suomi\", aliases: [\"fi-fi\"] },\n fr: {\n code: \"fr\",\n label: \"French\",\n nativeLabel: \"Français\",\n aliases: [\"fr-fr\", \"fr-ca\", \"fr-be\", \"fr-ch\"],\n },\n is: { code: \"is\", label: \"Icelandic\", nativeLabel: \"Íslenska\", aliases: [\"is-is\"] },\n it: { code: \"it\", label: \"Italian\", nativeLabel: \"Italiano\", aliases: [\"it-it\", \"it-ch\"] },\n ja: { code: \"ja\", label: \"Japanese\", nativeLabel: \"日本語\", aliases: [\"ja-jp\"] },\n ko: { code: \"ko\", label: \"Korean\", nativeLabel: \"한국어\", aliases: [\"ko-kr\"] },\n nb: {\n code: \"nb\",\n label: \"Norwegian Bokmål\",\n nativeLabel: \"Norsk bokmål\",\n aliases: [\"nb-no\"],\n },\n nn: {\n code: \"nn\",\n label: \"Norwegian Nynorsk\",\n nativeLabel: \"Norsk nynorsk\",\n aliases: [\"nn-no\"],\n },\n no: { code: \"no\", label: \"Norwegian\", nativeLabel: \"Norsk\", aliases: [\"no-no\"] },\n pt: { code: \"pt\", label: \"Portuguese\", nativeLabel: \"Português\", aliases: [\"pt-pt\"] },\n \"pt-BR\": {\n code: \"pt-BR\",\n label: \"Brazilian Portuguese\",\n nativeLabel: \"Português (Brasil)\",\n aliases: [\"pt-br\"],\n },\n sv: { code: \"sv\", label: \"Swedish\", nativeLabel: \"Svenska\", aliases: [\"sv-se\", \"sv-fi\"] },\n zh: {\n code: \"zh\",\n label: \"Chinese\",\n nativeLabel: \"中文\",\n aliases: [\"zh-cn\", \"zh-tw\", \"zh-hk\", \"zh-sg\", \"zh-hans\", \"zh-hant\"],\n },\n};\n\n/**\n * Languages close enough to stand in for each other, nearest first. A product\n * that speaks only one of them gets it for the others (Link speaks `nb`, so\n * `no` and `nn` read as `nb`; it speaks `pt-BR`, so `pt` reads as `pt-BR`), and\n * a missing word is looked up in them before English.\n */\nconst RELATED_LANGUAGES: Readonly<Partial<Record<Language, readonly Language[]>>> = {\n nb: [\"no\", \"nn\"],\n no: [\"nb\", \"nn\"],\n nn: [\"nb\", \"no\"],\n pt: [\"pt-BR\"],\n \"pt-BR\": [\"pt\"],\n};\n\n/** Every tag, lower case, to the language it means. */\nconst ALIASES = new Map<string, Language>();\nfor (const code of LANGUAGES) {\n ALIASES.set(code.toLowerCase(), code);\n for (const alias of LANGUAGE_METADATA[code].aliases) {\n ALIASES.set(alias, code);\n }\n}\n\nconst ORDER = new Map<string, number>(LANGUAGES.map((code, index) => [code, index]));\n\n/** Whether a value is one of the list's codes, exactly as written there. */\nexport function isLanguage(value: unknown): value is Language {\n return typeof value === \"string\" && ORDER.has(value);\n}\n\nfunction primarySubtag(tag: string): string {\n return tag.split(\"-\")[0] ?? \"\";\n}\n\n/** The first of `language` and its relatives that `allowed` holds. */\nfunction within(language: Language, allowed: ReadonlySet<Language>): Language | null {\n if (allowed.has(language)) {\n return language;\n }\n return RELATED_LANGUAGES[language]?.find((related) => allowed.has(related)) ?? null;\n}\n\n/**\n * Read any way of naming a language as one of the list: `da-DK`, `nb_NO`,\n * `pt-br`, or a browser's list (`\"nl-NL,da;q=0.8\"`, the first language it\n * knows wins). Pass the product's languages to land on one it speaks: a\n * relative stands in where the product lacks the language itself, so with\n * Link's languages `no` and `nn` read as `nb`, and `pt` as `pt-BR`. Returns\n * `fallback` when nothing matches (`null` to tell).\n */\nexport function normalizeLanguage(\n input: string | null | undefined,\n fallback?: Language,\n languages?: readonly Language[]\n): Language;\nexport function normalizeLanguage(\n input: string | null | undefined,\n fallback: null,\n languages?: readonly Language[]\n): Language | null;\nexport function normalizeLanguage(\n input: string | null | undefined,\n fallback: Language | null = DEFAULT_LANGUAGE,\n languages: readonly Language[] = LANGUAGES\n): Language | null {\n const allowed = new Set(languages);\n const tokens = String(input ?? \"\")\n .split(\",\")\n .map((token) => token.split(\";\")[0]?.trim().toLowerCase().replace(/_/g, \"-\") ?? \"\")\n .filter(Boolean);\n\n for (const token of tokens) {\n const exact = ALIASES.get(token);\n const match = exact ? within(exact, allowed) : null;\n if (match) {\n return match;\n }\n const base = ALIASES.get(primarySubtag(token));\n const baseMatch = base ? within(base, allowed) : null;\n if (baseMatch) {\n return baseMatch;\n }\n }\n\n return fallback;\n}\n\n/**\n * The languages of `subset` that the list knows, in the list's order, each\n * once. Codes are matched whatever their case (`pt-br` is `pt-BR`); others are\n * left out.\n */\nexport function pickLanguages(subset: Iterable<string>): Language[] {\n const wanted = new Set<Language>();\n for (const code of subset) {\n const member = ALIASES.get(String(code).toLowerCase().replace(/_/g, \"-\"));\n if (member && member.toLowerCase() === String(code).toLowerCase().replace(/_/g, \"-\")) {\n wanted.add(member);\n }\n }\n return LANGUAGES.filter((code) => wanted.has(code));\n}\n\n/**\n * Where a language sits in the list's order, for sorting: the code itself,\n * else its primary subtag; codes the list does not know come last.\n */\nexport function languageOrder(code: string): number {\n const normalized = String(code ?? \"\").toLowerCase().replace(/_/g, \"-\");\n const member = ALIASES.get(normalized) ?? ALIASES.get(primarySubtag(normalized));\n return member ? (ORDER.get(member) ?? LANGUAGES.length) : LANGUAGES.length;\n}\n\n/**\n * The languages to look a word up in for `language`, before English: the\n * language as given, its primary subtag (`ja-JP` reads `ja`), then its\n * relatives (`nn` reads `nb`, `pt-BR` reads `pt`).\n */\nexport function fallbackLanguages(language: string): string[] {\n const codes: string[] = [];\n const add = (code: string | undefined) => {\n if (code && !codes.includes(code)) {\n codes.push(code);\n }\n };\n\n add(language);\n const normalized = String(language ?? \"\").toLowerCase().replace(/_/g, \"-\");\n const member = ALIASES.get(normalized);\n add(member);\n add(primarySubtag(normalized));\n const related = member ?? ALIASES.get(primarySubtag(normalized));\n for (const code of related ? (RELATED_LANGUAGES[related] ?? []) : []) {\n add(code);\n }\n return codes;\n}\n","/**\n * Addresses that carry a language: `/ja/pricing` is the pricing page in\n * Japanese, `/pricing` the same page in the default language.\n *\n * Pure functions on paths, with no window access, so they run in a browser,\n * a Worker or a test alike. A product says which languages get a prefix and\n * whether the default language has one, through `configureLanguageRouting`\n * (or `configureI18n({ routing })`), or per call.\n */\nimport { DEFAULT_LANGUAGE, LANGUAGES } from \"./languages\";\n\nexport type LanguageRoutingOptions = {\n /** The languages that get a prefix. Defaults to every language in the list. */\n languages?: readonly string[];\n /** The language of an address without a prefix. Defaults to `en`. */\n defaultLanguage?: string;\n /**\n * Whether the default language has a prefix too (`/en/pricing`). Off by\n * default: the default language's addresses carry none.\n */\n prefixDefaultLanguage?: boolean;\n};\n\nexport type LanguagePath = {\n /** The language the address names, as configured (`pt-BR`), or null */\n language: string | null;\n /** The address without the prefix, always starting with `/` */\n restPath: string;\n};\n\nlet routing: LanguageRoutingOptions = {};\n\n/** Set which languages get a prefix, and whether the default language has one. */\nexport function configureLanguageRouting(options: LanguageRoutingOptions): void {\n routing = { ...routing, ...options };\n}\n\n/** The routing options in force, with the defaults filled in. */\nexport function getLanguageRoutingOptions(): Required<LanguageRoutingOptions> {\n return resolve();\n}\n\nfunction resolve(options?: LanguageRoutingOptions): Required<LanguageRoutingOptions> {\n const merged = { ...routing, ...options };\n return {\n languages: merged.languages?.length ? merged.languages : LANGUAGES,\n defaultLanguage: merged.defaultLanguage || DEFAULT_LANGUAGE,\n prefixDefaultLanguage: merged.prefixDefaultLanguage ?? false,\n };\n}\n\n/** A language's segment in an address: its code in lower case (`pt-br`). */\nexport function languageSlug(language: string): string {\n return String(language ?? \"\").toLowerCase().replace(/_/g, \"-\");\n}\n\n/**\n * The configured language a path segment names (`pt-br` gives `pt-BR`), or\n * null. Matching ignores case.\n */\nexport function languageFromSlug(\n segment: string,\n languages: readonly string[] = resolve().languages\n): string | null {\n const slug = languageSlug(segment);\n if (!slug) {\n return null;\n }\n return languages.find((code) => languageSlug(code) === slug) ?? null;\n}\n\n/** Whether a path segment names one of the languages that get a prefix. */\nexport function isLanguageSlug(segment: string, languages?: readonly string[]): boolean {\n return languageFromSlug(segment, languages) !== null;\n}\n\n/** Split an address into its path and what follows (`?query#hash`). */\nfunction splitSuffix(path: string): [string, string] {\n const index = path.search(/[?#]/);\n return index === -1 ? [path, \"\"] : [path.slice(0, index), path.slice(index)];\n}\n\n/**\n * The language an address names in its first segment, and the address\n * without it: `/ja/pricing` gives `{ language: \"ja\", restPath: \"/pricing\" }`,\n * `/pricing` gives `{ language: null, restPath: \"/pricing\" }`. A query and\n * hash stay on the rest.\n */\nexport function parseLanguagePath(\n pathname: string,\n options?: LanguageRoutingOptions\n): LanguagePath {\n const { languages } = resolve(options);\n const [path, suffix] = splitSuffix(pathname || \"/\");\n const absolute = path.startsWith(\"/\") ? path : `/${path}`;\n const first = absolute.split(\"/\")[1] ?? \"\";\n const language = languageFromSlug(first, languages);\n\n if (!language) {\n return { language: null, restPath: `${absolute}${suffix}` };\n }\n\n const rest = absolute.slice(first.length + 1) || \"/\";\n return { language, restPath: `${rest}${suffix}` };\n}\n\n/** The address without a language prefix: `/ja/pricing` gives `/pricing`. */\nexport function stripLanguagePrefix(path: string, options?: LanguageRoutingOptions): string {\n return parseLanguagePath(path, options).restPath;\n}\n\n/**\n * The address in `language`: `withLanguagePrefix(\"/pricing\", \"ja\")` gives\n * `/ja/pricing`. A prefix already there is replaced, never doubled. The\n * default language, and languages without a prefix, give the bare address\n * (unless `prefixDefaultLanguage` is on).\n */\nexport function withLanguagePrefix(\n path: string,\n language: string,\n options?: LanguageRoutingOptions\n): string {\n const resolved = resolve(options);\n const rest = stripLanguagePrefix(path, options);\n const configured = languageFromSlug(language, resolved.languages);\n const isDefault = languageSlug(language) === languageSlug(resolved.defaultLanguage);\n\n if (!configured || (isDefault && !resolved.prefixDefaultLanguage)) {\n return rest;\n }\n\n const [restPath, suffix] = splitSuffix(rest);\n const tail = restPath === \"/\" ? \"\" : restPath;\n return `/${languageSlug(configured)}${tail}${suffix}`;\n}\n","/**\n * The one translations file format every 0001 product writes its words in.\n *\n * { \"<language>\": { \"<key>\": \"<text>\" } }\n *\n * - `<language>` is a code from the language list (`da`, `pt-BR`).\n * - `<key>` is any string. Ezo, the 0001 site and Peer key by the English\n * sentence (`\"Send\": \"Send\"`); Link and Consistency key by a dotted id\n * (`\"settings.language\": \"Language\"`). Both are the same format.\n * - English (`en`) is the fallback table. When a key is missing from `en`\n * too, the key itself is the English text, so a sentence key needs no\n * English entry and an id key needs one.\n * - Placeholders are `{name}` and `{{name}}` alike; `fillPlaceholders` (and\n * `translate(key, params)`) fill both.\n * - A per-language file (`/translations/da.json`) holds one language's table,\n * wrapped as `{ \"da\": { … } }` (or bare, `{ … }`, which `readLanguageFile`\n * wraps).\n * - A product can ship the same shape as a TypeScript module and pass it to\n * `loadTranslations`.\n *\n * A word is looked up in the language, its primary subtag (`ja-JP` reads\n * `ja`), its relatives (`nn` reads `nb`, `pt-BR` reads `pt`), then English,\n * then the key itself. See `resolveText`.\n */\nimport { DEFAULT_LANGUAGE, LANGUAGES, fallbackLanguages } from \"./languages\";\n\n/** One language's words, key to text. Values may be absent (a `Partial` table). */\nexport type TranslationTable = { readonly [key: string]: string | undefined };\n\n/** Every language's words, keyed by language code. */\nexport type TranslationsFile = { readonly [language: string]: TranslationTable | undefined };\n\n/** Values for a text's placeholders, by name. */\nexport type TranslationParams = { readonly [name: string]: string | number | boolean };\n\n/** The language whose table is the fallback. */\nexport const FALLBACK_LANGUAGE = DEFAULT_LANGUAGE;\n\nconst PLACEHOLDER = /\\{\\{\\s*([\\w.-]+)\\s*\\}\\}|\\{([\\w.-]+)\\}/g;\n\n/** The names of a text's placeholders, `{name}` and `{{name}}` alike, each once. */\nexport function placeholdersIn(text: string): string[] {\n const names: string[] = [];\n for (const match of String(text ?? \"\").matchAll(PLACEHOLDER)) {\n const name = match[1] ?? match[2];\n if (name && !names.includes(name)) {\n names.push(name);\n }\n }\n return names;\n}\n\n/**\n * Fill a text's placeholders, `{name}` and `{{name}}` alike. A placeholder\n * with no value is left as written, so it shows rather than vanishing.\n */\nexport function fillPlaceholders(text: string, params?: TranslationParams): string {\n if (!params) {\n return text;\n }\n return text.replace(PLACEHOLDER, (whole, double: string | undefined, single: string | undefined) => {\n const name = (double ?? single) as string;\n return Object.prototype.hasOwnProperty.call(params, name) ? String(params[name]) : whole;\n });\n}\n\n/** A key's English text: the `en` table's, else the key itself. */\nexport function englishText(file: TranslationsFile, key: string): string {\n return file[FALLBACK_LANGUAGE]?.[key] || key;\n}\n\nexport type ResolvedText = {\n text: string;\n /** The language the text was found in, or null when the key itself was used */\n language: string | null;\n};\n\n/**\n * A key's text in `language`, from several sets of words: for each language\n * in the fallback order (the language, its primary subtag, its relatives,\n * English), the first set that has the key wins. With no text anywhere, the\n * key itself. Placeholders are filled from `params`.\n */\nexport function resolveText(\n key: string,\n language: string,\n sources: readonly (TranslationsFile | undefined)[],\n params?: TranslationParams\n): ResolvedText {\n const order = fallbackLanguages(language);\n if (!order.includes(FALLBACK_LANGUAGE)) {\n order.push(FALLBACK_LANGUAGE);\n }\n\n for (const code of order) {\n for (const source of sources) {\n const text = source?.[code]?.[key];\n if (text) {\n return { text: fillPlaceholders(text, params), language: code };\n }\n }\n }\n return { text: fillPlaceholders(key, params), language: null };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * A per-language file's words as a translations file: `{ \"da\": { … } }` as it\n * is, a bare `{ … }` table wrapped under `language`. Null when it is neither.\n */\nexport function readLanguageFile(language: string, value: unknown): TranslationsFile | null {\n if (!isPlainObject(value)) {\n return null;\n }\n const wrapped = value[language];\n if (isPlainObject(wrapped)) {\n return value as TranslationsFile;\n }\n const values = Object.values(value);\n if (values.length > 0 && values.every((text) => typeof text === \"string\")) {\n return { [language]: value as TranslationTable };\n }\n if (values.length > 0 && values.every(isPlainObject)) {\n return value as TranslationsFile;\n }\n return null;\n}\n\nexport type TranslationsCheck = {\n /** True when the value is a translations file a product can load */\n valid: boolean;\n /** What makes it unloadable */\n errors: string[];\n /** What loads but is likely a mistake */\n warnings: string[];\n};\n\nexport type TranslationsCheckOptions = {\n /** The languages the file may hold. Defaults to the language list. */\n languages?: readonly string[];\n};\n\nconst ID_KEY = /^[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)+$/;\n\n/**\n * Check a value against the format. Errors: it is not an object of language\n * tables, or a text is not a string. Warnings: a language outside the list,\n * an id key (`settings.language`) with no English text, a translation whose\n * placeholders differ from its English text's.\n */\nexport function validateTranslations(\n value: unknown,\n options: TranslationsCheckOptions = {}\n): TranslationsCheck {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!isPlainObject(value)) {\n return {\n valid: false,\n errors: [\"Expected an object keyed by language code.\"],\n warnings,\n };\n }\n\n const known = new Set((options.languages ?? LANGUAGES).map((code) => code.toLowerCase()));\n const file = value as Record<string, unknown>;\n const english = isPlainObject(file[FALLBACK_LANGUAGE])\n ? (file[FALLBACK_LANGUAGE] as Record<string, unknown>)\n : {};\n\n for (const [language, table] of Object.entries(file)) {\n if (!isPlainObject(table)) {\n errors.push(`\"${language}\" should hold an object of words.`);\n continue;\n }\n if (!known.has(language.toLowerCase())) {\n warnings.push(`\"${language}\" is not in the language list.`);\n }\n\n for (const [key, text] of Object.entries(table)) {\n if (text === undefined) {\n continue;\n }\n if (typeof text !== \"string\") {\n errors.push(`\"${language}\" → \"${key}\" should be a string.`);\n continue;\n }\n if (language === FALLBACK_LANGUAGE) {\n continue;\n }\n\n const source = typeof english[key] === \"string\" ? (english[key] as string) : undefined;\n if (source === undefined && ID_KEY.test(key)) {\n warnings.push(`\"${key}\" has no English text, so English readers see the key.`);\n }\n const expected = placeholdersIn(source ?? key).sort().join(\", \");\n const found = placeholdersIn(text).sort().join(\", \");\n if (expected !== found) {\n warnings.push(\n `\"${language}\" → \"${key}\" has placeholders [${found}] where English has [${expected}].`\n );\n }\n }\n }\n\n return { valid: errors.length === 0, errors, warnings: [...new Set(warnings)] };\n}\n\n/** Whether a value is a translations file a product can load. */\nexport function isTranslationsFile(value: unknown): value is TranslationsFile {\n return validateTranslations(value).valid;\n}\n","import {\n LANGUAGES,\n LANGUAGE_METADATA,\n fallbackLanguages,\n isLanguage,\n languageOrder,\n normalizeLanguage,\n} from \"./languages\";\nimport type { Language } from \"./languages\";\nimport { configureLanguageRouting } from \"./language-routing\";\nimport type { LanguageRoutingOptions } from \"./language-routing\";\nimport { readLanguageFile, resolveText } from \"./translations-format\";\nimport type {\n TranslationParams,\n TranslationTable,\n TranslationsFile,\n} from \"./translations-format\";\n\n// Define the supported languages using ISO codes (extensible)\nexport type LanguageCode = string;\n\n// One language's words, key to text\nexport type TranslationData = {\n [key: string]: string;\n};\n\n// Every language's words, keyed by language code\nexport type TranslationMap = Record<string, TranslationData>;\n\n/**\n * How a product sets up the language module. Every field is optional: without\n * any, the module behaves as it always has (the whole table from\n * `./translations.json`, the languages offered are the ones in the words).\n *\n * Pass it to `configureI18n()` straight after importing the module, or put it\n * on `window.DS_ONE_I18N` before the module loads.\n */\nexport type I18nOptions = {\n /** Fetch external words at startup. Disable when the product supplies them in code. */\n autoLoad?: boolean;\n /**\n * Every language the product speaks. When set, the picker offers these\n * whether or not their words have arrived yet, which matters when a page\n * loads only its own language (`languageFile`). Without it, the languages\n * offered are the ones found in the loaded words.\n */\n languages?: readonly LanguageCode[];\n /**\n * Where one language's words are published, so a page loads its own\n * language rather than the whole table: a pattern with `{language}` in it\n * (`\"/translations/{language}.json\"`) or a function. Each file holds\n * `{ \"<language>\": { …words } }`. When a language's file is missing, the\n * whole table is the fallback. Without it, only the whole table is loaded.\n */\n languageFile?: string | ((language: LanguageCode) => string) | null;\n /**\n * Where the whole table is published. Defaults to `./translations.json`.\n * `window.DS_ONE_TRANSLATIONS_FILE` and the `data-ds-one-translations`,\n * `ds-one:translations` and `ds-one-translations` markers in the page win\n * over it.\n */\n translationsFile?: string;\n /** The localStorage key that keeps the chosen language. Defaults to `language`. */\n storageKey?: string;\n /**\n * Report keys with no translation on the console, each once. Off by\n * default, since components also show what people write themselves, and\n * that is not a key anyone forgot. `window.DS_ONE_I18N_DEBUG = true` or\n * localStorage `ds-one:i18n-debug` set to `on` turn it on as well.\n */\n reportMissingKeys?: boolean | (() => boolean);\n /**\n * Load Design system 1's shared interface words (buttons, sign-in, empty\n * states, dates, language names) beneath the product's own words, so the\n * product's text wins where both have a key. Off by default.\n */\n sharedWords?: boolean;\n /**\n * Which languages get an address prefix (`/ja/…`) and whether the default\n * language has one; see `configureLanguageRouting`. Without `languages`\n * here, the product's `languages` get a prefix.\n */\n routing?: LanguageRoutingOptions;\n};\n\n// Bundled translations (keys.json may not exist - will use external translations if not available)\n// This is a fallback for when external translations aren't loaded\nlet translationKeys: TranslationMap = {};\n\n/**\n * Every language Design system 1 orders, names and maps browser languages to:\n * the list in `./languages` (`LANGUAGES`). A product turns on the ones it\n * translates with `configureI18n({ languages })`.\n */\nexport const SUPPORTED_LANGUAGES: readonly Language[] = LANGUAGES;\n\nconst DISPLAY_NAME_CACHE = new Map<string, Intl.DisplayNames>();\nlet displayNameFallbackWarningShown = false;\n\n// Declare window property for external translations\ndeclare global {\n interface Window {\n DS_ONE_TRANSLATIONS?: Record<string, TranslationData>;\n DS_ONE_TRANSLATIONS_FILE?: string;\n DS_ONE_I18N?: I18nOptions;\n DS_ONE_I18N_DEBUG?: boolean;\n }\n}\n\nconst DEFAULT_TRANSLATION_FILE = \"./translations.json\";\nconst DEFAULT_STORAGE_KEY = \"language\";\nconst DEBUG_STORAGE_KEY = \"ds-one:i18n-debug\";\n\nconst defaultLanguage: LanguageCode = \"en\";\n\nlet i18nOptions: I18nOptions =\n typeof window !== \"undefined\" && window.DS_ONE_I18N\n ? { ...window.DS_ONE_I18N }\n : {};\n\n// Design system 1's shared words, kept apart from the product's so a product's\n// file arriving never wipes them, and looked up beneath the product's words.\nlet sharedWords: TranslationsFile | undefined;\n\n// ============================================================================\n// Storage\n// ============================================================================\n\nfunction storage(): Storage | undefined {\n try {\n return typeof window !== \"undefined\"\n ? (window.localStorage ?? undefined)\n : undefined;\n } catch {\n // Storage can be blocked (private windows, cleared site data)\n return undefined;\n }\n}\n\nfunction storageKey(): string {\n return i18nOptions.storageKey || DEFAULT_STORAGE_KEY;\n}\n\nfunction readStoredLanguage(): LanguageCode | null {\n try {\n return (storage()?.getItem(storageKey()) as LanguageCode | null) || null;\n } catch {\n return null;\n }\n}\n\nfunction storeLanguage(language: LanguageCode): void {\n try {\n storage()?.setItem(storageKey(), language);\n } catch {\n // The choice still holds for this page\n }\n}\n\n// ============================================================================\n// Language codes\n// ============================================================================\n\nfunction extractPrimarySubtag(code: LanguageCode): string {\n if (!code) {\n return \"\";\n }\n return code.toLowerCase().split(/[-_]/)[0] ?? \"\";\n}\n\n/**\n * The language whose file a page loads for `language`: one of the configured\n * languages when a list is set (null when it speaks none of them), otherwise\n * the primary subtag.\n */\nfunction fileLanguage(language: LanguageCode): LanguageCode | null {\n const configured = i18nOptions.languages;\n if (!configured || configured.length === 0) {\n return extractPrimarySubtag(language) || null;\n }\n\n const normalized = (language || \"\").toLowerCase().replace(\"_\", \"-\");\n const exact = configured.find((code) => code.toLowerCase() === normalized);\n if (exact) {\n return exact;\n }\n\n const primary = extractPrimarySubtag(language);\n return configured.find((code) => code.toLowerCase() === primary) ?? null;\n}\n\nfunction languageFileFor(language: LanguageCode): string | null {\n const pattern = i18nOptions.languageFile;\n if (!pattern) {\n return null;\n }\n const path =\n typeof pattern === \"function\"\n ? pattern(language)\n : pattern.split(\"{language}\").join(language);\n return normalizeCandidate(path);\n}\n\n// ============================================================================\n// Loading translations\n// ============================================================================\n\n// CDN Loader: Automatically detects and loads translation JSON files\n// for CDN users who want to use external translations\n\nlet loadAttempted = false;\n\nfunction normalizeCandidate(path: string): string | null {\n if (!path) {\n return null;\n }\n const trimmed = path.trim();\n if (!trimmed) {\n return null;\n }\n\n if (\n trimmed.startsWith(\"./\") ||\n trimmed.startsWith(\"../\") ||\n trimmed.startsWith(\"/\") ||\n /^https?:\\/\\//i.test(trimmed)\n ) {\n return trimmed;\n }\n\n return `./${trimmed}`;\n}\n\nfunction findAttributeCandidate(): string | null {\n if (typeof document === \"undefined\" || !document.querySelector) {\n return null;\n }\n\n const scriptWithAttribute = document.querySelector(\n \"script[data-ds-one-translations]\"\n );\n const scriptCandidate = scriptWithAttribute?.getAttribute(\n \"data-ds-one-translations\"\n );\n if (scriptCandidate) {\n return scriptCandidate;\n }\n\n const metaCandidate = document\n .querySelector('meta[name=\"ds-one:translations\"]')\n ?.getAttribute(\"content\");\n if (metaCandidate) {\n return metaCandidate;\n }\n\n const linkCandidate = document\n .querySelector('link[rel=\"ds-one-translations\"]')\n ?.getAttribute(\"href\");\n if (linkCandidate) {\n return linkCandidate;\n }\n\n return null;\n}\n\n/** Where the whole table is: what the page names, else the option, else the default. */\nfunction resolveTableSources(): string[] {\n const candidates: string[] = [];\n\n const windowCandidate =\n typeof window !== \"undefined\" ? window.DS_ONE_TRANSLATIONS_FILE : null;\n const attributeCandidate = findAttributeCandidate();\n\n // Only use explicitly configured paths, or the single default\n const windowNormalized = normalizeCandidate(windowCandidate ?? \"\");\n if (windowNormalized) {\n candidates.push(windowNormalized);\n }\n\n const attrNormalized = normalizeCandidate(attributeCandidate ?? \"\");\n if (attrNormalized && !candidates.includes(attrNormalized)) {\n candidates.push(attrNormalized);\n }\n\n // Only try the default if no explicit path was configured\n if (candidates.length === 0) {\n candidates.push(\n normalizeCandidate(i18nOptions.translationsFile ?? \"\") ??\n DEFAULT_TRANSLATION_FILE\n );\n }\n\n return candidates;\n}\n\nfunction resolveTranslationSources(): string[] {\n const tables = resolveTableSources();\n // With one file per language, the page's own language first, then the\n // whole table.\n const startLanguage =\n fileLanguage(currentLanguage.value) ?? defaultLanguage;\n const own = languageFileFor(startLanguage);\n return own ? [own, ...tables.filter((source) => source !== own)] : tables;\n}\n\n/** The language whose own file `source` is, when it is one. */\nfunction languageOfSource(source: string): LanguageCode | undefined {\n const start = fileLanguage(currentLanguage.value) ?? defaultLanguage;\n return languageFileFor(start) === source ? start : undefined;\n}\n\nfunction validateTranslationMap(\n candidate: unknown\n): candidate is TranslationMap {\n if (!candidate || typeof candidate !== \"object\") {\n return false;\n }\n\n return Object.values(candidate).every(\n (entry) => entry && typeof entry === \"object\"\n );\n}\n\n// One request per file, shared by startup and a language switch alike. A file\n// that failed is forgotten, so a later attempt asks again.\nconst translationFiles = new Map<string, Promise<TranslationMap | null>>();\n\nfunction fetchTranslationFile(\n source: string,\n language?: LanguageCode\n): Promise<TranslationMap | null> {\n let pending = translationFiles.get(source);\n if (!pending) {\n pending = readTranslationFile(source, language).then((translations) => {\n if (!translations) {\n translationFiles.delete(source);\n }\n return translations;\n });\n translationFiles.set(source, pending);\n }\n return pending;\n}\n\nasync function readTranslationFile(\n source: string,\n language?: LanguageCode\n): Promise<TranslationMap | null> {\n try {\n const response = await fetch(source);\n\n if (!response.ok) {\n // 404 is expected if no translations file exists - don't log as error\n return null;\n }\n\n const json: unknown = await response.json();\n // A language's own file may hold its table bare ({ \"Save\": \"Gem\" })\n const translations = language\n ? (readLanguageFile(language, json) ?? json)\n : json;\n\n if (!validateTranslationMap(translations)) {\n console.warn(\n `[Design system 1] Invalid translation format in ${source}. Expected object with language codes as keys.`\n );\n return null;\n }\n\n const languages = Object.keys(translations);\n if (languages.length === 0) {\n console.warn(`[Design system 1] No languages found in ${source}`);\n return null;\n }\n\n return translations;\n } catch {\n // Silently fail - file likely doesn't exist or isn't valid JSON\n return null;\n }\n}\n\n/** Add words to what is loaded, keeping the languages already there. */\nfunction mergeTranslations(translations: TranslationMap): void {\n if (typeof window === \"undefined\") {\n translationKeys = { ...translationKeys, ...translations };\n return;\n }\n window.DS_ONE_TRANSLATIONS = {\n ...window.DS_ONE_TRANSLATIONS,\n ...translations,\n };\n}\n\n/**\n * Attempts to load translations from a JSON file in the same directory\n */\nasync function loadExternalTranslations(): Promise<boolean> {\n // Only attempt once\n if (loadAttempted) {\n return false;\n }\n loadAttempted = true;\n\n if (typeof window === \"undefined\") {\n return false;\n }\n\n // Check if translations are already loaded (e.g., by the application)\n if (\n window.DS_ONE_TRANSLATIONS &&\n Object.keys(window.DS_ONE_TRANSLATIONS).length > 0\n ) {\n debugLog(\n `Translations already loaded (${Object.keys(window.DS_ONE_TRANSLATIONS).length} languages), skipping auto-load`\n );\n return true;\n }\n\n const sources = resolveTranslationSources();\n\n for (const source of sources) {\n const translations = await fetchTranslationFile(\n source,\n languageOfSource(source)\n );\n if (!translations) {\n continue;\n }\n\n mergeTranslations(translations);\n\n const languages = Object.keys(translations);\n debugLog(\n `External translations loaded from ${source}: ${languages.length} language(s) – ${languages.join(\", \")}`\n );\n\n window.dispatchEvent(new CustomEvent(\"translations-ready\"));\n return true;\n }\n\n debugLog(\n `No external translations found at ${sources[0] ?? DEFAULT_TRANSLATION_FILE}. Using bundled translations.`\n );\n\n return false;\n}\n\nconst languageLoads = new Map<string, Promise<void>>();\n\n/**\n * Fetch a language's words when the page needs one it has not got: its own\n * file, or the whole table when that file is missing. Does nothing unless\n * `languageFile` is configured, since otherwise the whole table, with every\n * language in it, is what the page loads at startup.\n */\nexport function loadLanguage(language: LanguageCode): Promise<void> {\n if (typeof window === \"undefined\" || !i18nOptions.languageFile) {\n return Promise.resolve();\n }\n\n const code = fileLanguage(language) ?? defaultLanguage;\n if (getTranslationData()[code]) {\n return Promise.resolve();\n }\n\n let pending = languageLoads.get(code);\n if (!pending) {\n pending = (async () => {\n const own = languageFileFor(code);\n let translations = own ? await fetchTranslationFile(own, code) : null;\n for (const source of resolveTableSources()) {\n if (translations) {\n break;\n }\n translations = await fetchTranslationFile(source);\n }\n if (!translations) {\n return;\n }\n mergeTranslations(translations);\n window.dispatchEvent(new CustomEvent(\"translations-ready\"));\n })();\n languageLoads.set(code, pending);\n }\n return pending;\n}\n\n// Get translation data - prioritize external, fall back to bundled\nfunction getTranslationData(): TranslationMap {\n // Check for externally loaded translations first (CDN usage)\n if (typeof window !== \"undefined\" && window.DS_ONE_TRANSLATIONS) {\n return window.DS_ONE_TRANSLATIONS;\n }\n\n // Fall back to bundled translations\n return translationKeys;\n}\n\n// ============================================================================\n// Language names and ordering\n// ============================================================================\n\nfunction sortLanguageCodes(codes: LanguageCode[]): LanguageCode[] {\n return [...codes].sort((a, b) => {\n const priorityA = languageOrder(a);\n const priorityB = languageOrder(b);\n\n if (priorityA !== priorityB) {\n return priorityA - priorityB;\n }\n\n return a.localeCompare(b);\n });\n}\n\nfunction getDisplayNameForLocale(\n locale: string,\n code: LanguageCode\n): string | undefined {\n const normalizedLocale = locale?.replace(\"_\", \"-\");\n if (!normalizedLocale) {\n return undefined;\n }\n\n try {\n let displayNames = DISPLAY_NAME_CACHE.get(normalizedLocale);\n\n if (!displayNames) {\n displayNames = new Intl.DisplayNames([normalizedLocale], {\n type: \"language\",\n });\n DISPLAY_NAME_CACHE.set(normalizedLocale, displayNames);\n }\n\n const cleanedCode = code.replace(\"_\", \"-\");\n\n // Try full tag first\n const fullMatch = displayNames.of(cleanedCode);\n if (fullMatch && fullMatch !== cleanedCode) {\n return fullMatch;\n }\n\n // Then the primary subtag\n const baseMatch = displayNames.of(extractPrimarySubtag(cleanedCode));\n if (baseMatch) {\n return baseMatch;\n }\n } catch {\n // Intl.DisplayNames may not be supported; fall back gracefully\n if (!displayNameFallbackWarningShown) {\n console.info(\n \"[Design system 1] Intl.DisplayNames is not available, using fallback language names.\"\n );\n displayNameFallbackWarningShown = true;\n }\n }\n\n return undefined;\n}\n\n// English names from the language list, for when Intl.DisplayNames is missing\nfunction getFallbackDisplayName(code: LanguageCode): string | undefined {\n const language = normalizeLanguage(code, null);\n return language ? LANGUAGE_METADATA[language].label : undefined;\n}\n\nexport function getLanguageDisplayName(\n code: LanguageCode,\n options: { locale?: string } = {}\n): string {\n if (!code) {\n return \"\";\n }\n\n const localesToTry: string[] = [];\n\n if (options.locale) {\n localesToTry.push(options.locale);\n }\n\n if (typeof navigator !== \"undefined\") {\n if (Array.isArray(navigator.languages)) {\n localesToTry.push(...navigator.languages);\n }\n if (navigator.language) {\n localesToTry.push(navigator.language);\n }\n }\n\n localesToTry.push(defaultLanguage);\n localesToTry.push(\"en\");\n\n const tried = new Set<string>();\n\n for (const locale of localesToTry) {\n if (!locale || tried.has(locale)) {\n continue;\n }\n tried.add(locale);\n\n const displayName = getDisplayNameForLocale(locale, code);\n if (displayName) {\n return displayName;\n }\n }\n\n const fallback = getFallbackDisplayName(code);\n if (fallback) {\n return fallback;\n }\n\n // Fall back to the primary subtag in uppercase\n const primary = extractPrimarySubtag(code);\n return primary ? primary.toUpperCase() : code;\n}\n\n// ============================================================================\n// Browser language\n// ============================================================================\n\n/** The languages a browser's language may become: the product's, else the list. */\nfunction configuredLanguages(): readonly LanguageCode[] | null {\n return i18nOptions.languages?.length ? i18nOptions.languages : null;\n}\n\n/**\n * A browser language tag as one the product speaks: within the configured\n * languages when they are set (a relative standing in, so `no` reads `nb` for\n * a product that speaks `nb`), else within the whole list. Null when none fits.\n */\nfunction resolvePreferredLanguage(languageTag: string): LanguageCode | null {\n if (!languageTag) {\n return null;\n }\n\n const configured = configuredLanguages();\n const members = configured\n ? configured.filter(isLanguage)\n : (LANGUAGES as readonly Language[]);\n\n const match = members.length\n ? normalizeLanguage(languageTag, null, members)\n : null;\n if (match) {\n return match;\n }\n\n // A configured language outside the list (`nl`), by its primary subtag\n return configured ? fileLanguage(languageTag) : null;\n}\n\n/**\n * The browser's language, as one the product speaks: the first of the\n * browser's languages that fits. When none does, a product that configured\n * its languages gets English; one that configured nothing gets the browser's\n * own tag, since its words may still be loaded under it.\n */\nexport function getBrowserLanguage(): LanguageCode {\n if (typeof navigator === \"undefined\" || !navigator) {\n return defaultLanguage;\n }\n\n const candidates = [\n navigator.language,\n ...(Array.isArray(navigator.languages) ? navigator.languages : []),\n ].filter((tag): tag is string => Boolean(tag));\n\n for (const candidate of candidates) {\n const resolved = resolvePreferredLanguage(candidate);\n if (resolved) {\n return resolved;\n }\n }\n\n if (!configuredLanguages() && candidates[0]) {\n return candidates[0];\n }\n return defaultLanguage;\n}\n\n// ============================================================================\n// Current language\n// ============================================================================\n\nfunction dispatchLanguageChanged(language: LanguageCode): void {\n if (typeof window === \"undefined\") {\n return;\n }\n window.dispatchEvent(\n new CustomEvent(\"language-changed\", {\n detail: { language },\n bubbles: true,\n composed: true,\n })\n );\n}\n\n// Create a reactive signal for the current language (Portfolio pattern)\nexport const currentLanguage = {\n value: readStoredLanguage() || getBrowserLanguage(),\n set: function (lang: LanguageCode) {\n this.value = lang;\n storeLanguage(lang);\n void loadLanguage(lang);\n // What reads the document's language (dates, screen readers, hyphenation)\n // follows too, rather than keeping the language the page was opened in.\n if (typeof document !== \"undefined\" && document.documentElement) {\n document.documentElement.lang = lang;\n }\n dispatchLanguageChanged(lang);\n },\n};\n\n/**\n * Set the language module up for a product (see `I18nOptions`). Call it\n * straight after importing the module: the first translations are fetched\n * once the code that imported it has run. Called later, it fetches the current\n * language's file if one is now configured.\n */\nexport function configureI18n(next: I18nOptions): void {\n const previousKey = storageKey();\n const previousLanguages = i18nOptions.languages;\n i18nOptions = { ...i18nOptions, ...next };\n\n applyRouting();\n\n if (\n storageKey() !== previousKey ||\n i18nOptions.languages !== previousLanguages\n ) {\n // The stored choice under the new key, or the browser's language, as one\n // the product speaks\n const stored = readStoredLanguage();\n let language: LanguageCode = stored || getBrowserLanguage();\n if (stored && configuredLanguages()) {\n language = resolvePreferredLanguage(stored) ?? defaultLanguage;\n }\n if (language !== currentLanguage.value) {\n currentLanguage.value = language;\n dispatchLanguageChanged(language);\n }\n }\n\n if (next.sharedWords) {\n void loadSharedWords();\n }\n\n if (loadAttempted && i18nOptions.languageFile) {\n void loadLanguage(currentLanguage.value);\n }\n}\n\n/** Address prefixes follow the product's languages unless routing names its own. */\nfunction applyRouting(): void {\n if (!i18nOptions.routing && !i18nOptions.languages) {\n return;\n }\n configureLanguageRouting({\n ...(i18nOptions.languages ? { languages: i18nOptions.languages } : {}),\n ...i18nOptions.routing,\n });\n}\n\nlet sharedWordsLoad: Promise<void> | null = null;\n\n/**\n * Load Design system 1's shared interface words beneath the product's own\n * (what `configureI18n({ sharedWords: true })` does). They arrive in a chunk\n * of their own, so products that do not use them do not carry them.\n */\nexport function loadSharedWords(): Promise<void> {\n if (!sharedWordsLoad) {\n sharedWordsLoad = import(\"./shared-words\").then(({ SHARED_WORDS }) => {\n sharedWords = SHARED_WORDS;\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"translations-ready\"));\n }\n });\n }\n return sharedWordsLoad;\n}\n\napplyRouting();\nif (i18nOptions.sharedWords) {\n void loadSharedWords();\n}\n\n// Auto-load translations when this module is imported (for CDN bundle).\n// Waits a task, so a product can configure the module first, even after a\n// dynamic import.\nif (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n const start = () => {\n if (i18nOptions.autoLoad !== false) void loadExternalTranslations();\n };\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", start);\n } else {\n // DOM is already ready\n setTimeout(start, 0);\n }\n}\n\n// Listen for external translations being loaded\nif (typeof window !== \"undefined\") {\n window.addEventListener(\"translations-ready\", () => {\n // Dispatch that translations are loaded\n window.dispatchEvent(new CustomEvent(\"translations-loaded\"));\n\n // Dispatch language-changed to update all components\n dispatchLanguageChanged(currentLanguage.value);\n });\n\n // Initialize translations on module load\n // Use setTimeout to give other parts of the app time to set up event listeners first\n setTimeout(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n window.dispatchEvent(new CustomEvent(\"translations-loaded\"));\n\n // Also dispatch language-changed with the current language\n dispatchLanguageChanged(currentLanguage.value);\n }, 100);\n}\n\n// ============================================================================\n// Looking words up\n// ============================================================================\n\n// Missing keys are ordinary: the same components carry what people write\n// themselves, and a list called \"Iroco.com\" is not a key anyone forgot. So the\n// console stays quiet unless someone is hunting for a missing key, and then\n// each key is only reported once.\nconst REPORTED_MISSING_KEYS = new Set<string>();\n\n// Loading is quiet too: what loaded, and from where, is only said when\n// someone has turned the debug switch on.\nfunction debugLog(message: string): void {\n if (!debugSwitchOn()) {\n return;\n }\n console.info(`[Design system 1] ${message}`);\n}\n\nfunction debugSwitchOn(): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n if (window.DS_ONE_I18N_DEBUG === true) {\n return true;\n }\n try {\n return storage()?.getItem(DEBUG_STORAGE_KEY) === \"on\";\n } catch {\n return false;\n }\n}\n\nfunction missingKeyReportingOn(): boolean {\n const option = i18nOptions.reportMissingKeys;\n try {\n if (typeof option === \"function\" ? option() : option) {\n return true;\n }\n } catch {\n // A failing check reports nothing\n }\n\n return debugSwitchOn();\n}\n\nfunction reportMissingKey(key: string, language: LanguageCode): void {\n if (!missingKeyReportingOn()) {\n return;\n }\n const seen = `${language}:${key}`;\n if (REPORTED_MISSING_KEYS.has(seen)) {\n return;\n }\n REPORTED_MISSING_KEYS.add(seen);\n console.warn(\n `[Design system 1 (Internationalization)] No translation found for key \"${key}\" in \"${language}\"`\n );\n}\n\n/**\n * A key's text in the current language, with its placeholders (`{name}` and\n * `{{name}}` alike) filled from `params`.\n */\nexport function translate(key: string, params?: TranslationParams): string {\n return textInLanguage(key, currentLanguage.value, params);\n}\n\n/**\n * A key's text in a given language, whatever the page's own language is (a\n * drawing made for one language, say). The fallback order: the language, its\n * primary subtag (`ja-JP` reads `ja`), its relatives (`nn` reads `nb`,\n * `pt-BR` reads `pt`), English, then the key itself. In each, the product's\n * words come before the shared words.\n */\nexport function textInLanguage(\n key: string,\n language: LanguageCode,\n params?: TranslationParams\n): string {\n const data = getTranslationData();\n const resolved = resolveText(key, language, [data, sharedWords], params);\n if (resolved.language !== null) {\n return resolved.text;\n }\n\n // Loaded a language at a time, English may not have arrived yet\n const codes = fallbackLanguages(language);\n if (\n !codes.includes(defaultLanguage) &&\n !data?.[defaultLanguage] &&\n codes.some((code) => data?.[code])\n ) {\n void loadLanguage(defaultLanguage);\n }\n\n reportMissingKey(key, codes[codes.length - 1] ?? language);\n return resolved.text;\n}\n\nexport function hasTranslation(\n key: string,\n language: LanguageCode = currentLanguage.value\n): boolean {\n if (!key) {\n return false;\n }\n\n const codes = fallbackLanguages(language);\n if (!codes.includes(defaultLanguage)) {\n codes.push(defaultLanguage);\n }\n\n return [getTranslationData(), sharedWords].some((source) =>\n codes.some((code) => {\n const langData = source?.[code];\n return Boolean(\n langData && Object.prototype.hasOwnProperty.call(langData, key)\n );\n })\n );\n}\n\n// Get text - synchronous version for components\nexport function getText(key: string, params?: TranslationParams): string {\n return translate(key, params);\n}\n\n// Get available languages: the configured ones, else the ones in the loaded words\nexport function getAvailableLanguages(): Promise<LanguageCode[]> {\n return Promise.resolve(getAvailableLanguagesSync());\n}\n\n// Synchronous version for immediate use\nexport function getAvailableLanguagesSync(): LanguageCode[] {\n if (i18nOptions.languages && i18nOptions.languages.length > 0) {\n return sortLanguageCodes([...i18nOptions.languages]);\n }\n\n const currentData = getTranslationData();\n\n if (currentData && Object.keys(currentData).length > 0) {\n return sortLanguageCodes(Object.keys(currentData));\n }\n return [defaultLanguage];\n}\n\n/**\n * Add words to what is loaded: one language's (`loadTranslations(\"da\", {…})`)\n * or several at once (`loadTranslations({ en: {…}, da: {…} })`), from a JSON\n * file or a TypeScript module of the same shape (a `Partial` table is fine).\n * Components update as they do when a translation file arrives.\n */\nexport function loadTranslations(\n language: LanguageCode,\n translations: TranslationTable\n): void;\nexport function loadTranslations(translations: TranslationsFile): void;\nexport function loadTranslations(\n languageOrMap: LanguageCode | TranslationsFile,\n translations?: TranslationTable\n): void {\n const map: TranslationsFile =\n typeof languageOrMap === \"string\"\n ? { [languageOrMap]: translations ?? {} }\n : languageOrMap;\n\n if (!validateTranslationMap(map)) {\n console.warn(\n \"[Design system 1] loadTranslations expects words keyed by language code.\"\n );\n return;\n }\n\n const data = getTranslationData();\n const merged: TranslationMap = {};\n for (const [code, words] of Object.entries(map)) {\n const defined: TranslationData = {};\n for (const [key, text] of Object.entries(words ?? {})) {\n if (typeof text === \"string\") {\n defined[key] = text;\n }\n }\n merged[code] = { ...data[code], ...defined };\n }\n mergeTranslations(merged);\n\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"translations-ready\"));\n }\n}\n\n// Set language (Portfolio pattern)\nexport function setLanguage(language: LanguageCode): void {\n // The signal owns persistence, loading, document language and notification.\n currentLanguage.set(language);\n}\n","/** Inspect named page areas without changing their size, opacity, or interaction. */\nexport function createLayoutInspector() {\n const root = document.documentElement;\n const overlay = document.createElement('div');\n overlay.setAttribute('data-ds-layout-overlay', '');\n overlay.setAttribute('aria-hidden', 'true');\n overlay.hidden = true;\n const shadow = overlay.attachShadow({ mode: 'open' });\n shadow.innerHTML = `<style>\n :host {\n all: initial !important;\n display: block !important;\n position: fixed !important;\n inset: 0 !important;\n z-index: 2147483646 !important;\n pointer-events: none !important;\n color-scheme: inherit !important;\n }\n :host([hidden]) { display: none !important; }\n .veil, .areas { position: absolute; inset: 0; overflow: hidden; }\n .veil { background: color-mix(in srgb, var(--page-background, Canvas) 78%, transparent); }\n .area {\n position: absolute;\n box-sizing: border-box;\n display: grid;\n place-items: center;\n background: color-mix(in srgb, var(--pastel) 40%, transparent);\n border: 1px solid color-mix(in srgb, var(--pastel) 65%, #82718d);\n }\n .name {\n box-sizing: border-box;\n max-width: 100%;\n padding: 3px 8px;\n background: var(--page-background, Canvas);\n color: var(--base-slate, CanvasText);\n font: 400 14px/20px var(--font-regular, var(--typeface-regular, sans-serif));\n text-align: center;\n overflow-wrap: anywhere;\n }\n .area[data-container] {\n background: transparent;\n }\n .area[data-container] > .name {\n position: absolute;\n top: 0;\n left: 0;\n }\n .area[data-compact] .name {\n position: absolute;\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n width: max-content;\n max-width: none;\n padding: 2px 4px;\n font-size: 12px;\n line-height: 16px;\n white-space: nowrap;\n }\n .dimensions {\n display: block;\n font-size: 12px;\n line-height: 16px;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n }\n @media print { :host { display: none !important; } }\n </style><div class=\"veil\"></div><div class=\"areas\"></div>`;\n document.body.append(overlay);\n const layer = shadow.querySelector<HTMLDivElement>('.areas')!;\n const colors = ['#efc9dc', '#d5c9ef', '#c2d9eb', '#bfe0cd', '#eee3b7', '#efcfb8'];\n let frame = 0;\n let visible = false;\n const observed = new Set<HTMLElement>();\n const observedRoots = new Set<ShadowRoot>();\n\n const getAreas = () => {\n const named: HTMLElement[] = [];\n const collect = (scope: Document | ShadowRoot | HTMLElement) => {\n named.push(...scope.querySelectorAll<HTMLElement>('[data-ds-area]'));\n scope.querySelectorAll<HTMLElement>('[data-ds-layout-root]').forEach((host) => {\n if (!host.shadowRoot) return;\n if (!observedRoots.has(host.shadowRoot)) {\n mutations.observe(host.shadowRoot, { subtree: true, childList: true, characterData: true });\n observedRoots.add(host.shadowRoot);\n }\n collect(host.shadowRoot);\n });\n };\n collect(document.querySelector<HTMLElement>('[data-ds-inspect-active]') ?? document);\n if (named.length) return named;\n // Semantic fallback for pages that have not supplied their own area names.\n return Array.from(document.querySelectorAll<HTMLElement>('header, main, section, footer, one-footer'))\n .filter((element) => !element.querySelector('section, header, footer, one-footer'));\n };\n const render = () => {\n frame = 0;\n if (!visible) return;\n const areas = getAreas();\n const current = new Set(areas);\n for (const element of observed) {\n if (!current.has(element)) { resize.unobserve(element); observed.delete(element); }\n }\n const fragments = document.createDocumentFragment();\n areas.forEach((element, index) => {\n if (!observed.has(element)) { resize.observe(element); observed.add(element); }\n const rect = element.getBoundingClientRect();\n if (!rect.width || !rect.height || rect.bottom <= 0 || rect.top >= innerHeight || rect.right <= 0 || rect.left >= innerWidth) return;\n if (getComputedStyle(element).visibility === 'hidden') return;\n const panel = document.createElement('div');\n panel.className = 'area';\n panel.toggleAttribute('data-container', !!element.shadowRoot?.querySelector('[data-ds-area]'));\n panel.toggleAttribute('data-compact', rect.width < 80 || rect.height < 24);\n panel.style.left = `${rect.left}px`;\n panel.style.top = `${rect.top}px`;\n panel.style.width = `${rect.width}px`;\n panel.style.height = `${rect.height}px`;\n panel.style.setProperty('--pastel', colors[index % colors.length]);\n const label = document.createElement('span');\n label.className = 'name';\n const areaName = element.dataset.dsArea || element.getAttribute('aria-label') ||\n (element.localName === 'one-footer' ? 'footer' : element.localName);\n label.textContent = areaName.replace(/[-_]/g, ' ').replace(/^./, (letter) => letter.toUpperCase());\n const dimensions = document.createElement('span');\n dimensions.className = 'dimensions';\n dimensions.textContent = `${Number(rect.width.toFixed(1))} × ${Number(rect.height.toFixed(1))} px`;\n label.append(dimensions);\n const ratio = document.createElement('span');\n ratio.className = 'dimensions';\n // Reduce dimensions measured to a tenth of a CSS pixel; use a decimal\n // for fluid shapes whose exact fraction would be too long to read.\n const width = Math.max(1, Math.round(rect.width * 10));\n const height = Math.max(1, Math.round(rect.height * 10));\n let divisor = width;\n let remainder = height;\n while (remainder) {\n [divisor, remainder] = [remainder, divisor % remainder];\n }\n const horizontal = width / divisor;\n const vertical = height / divisor;\n ratio.textContent = horizontal <= 100 && vertical <= 100\n ? `${horizontal}:${vertical}`\n : `≈ ${Number((rect.width / rect.height).toFixed(2))}:1`;\n label.append(ratio);\n panel.append(label);\n fragments.append(panel);\n });\n layer.replaceChildren(fragments);\n };\n const schedule = () => { if (visible && !frame) frame = requestAnimationFrame(render); };\n const resize = new ResizeObserver(schedule);\n const mutations = new MutationObserver(schedule);\n const setVisible = (next: boolean) => {\n if (next === visible) return;\n visible = next;\n overlay.hidden = !visible;\n root.toggleAttribute('data-ds-layout-visible', visible);\n if (visible) {\n resize.observe(document.body);\n mutations.observe(document.body, { subtree: true, childList: true, characterData: true });\n window.addEventListener('scroll', schedule, { passive: true, capture: true });\n window.addEventListener('resize', schedule);\n window.addEventListener('scaling-changed', schedule);\n window.addEventListener('design-system-layout-sized', schedule);\n window.addEventListener('design-system-layout-ready', schedule);\n schedule();\n } else {\n resize.disconnect();\n observed.clear();\n mutations.disconnect();\n observedRoots.clear();\n window.removeEventListener('scroll', schedule, true);\n window.removeEventListener('resize', schedule);\n window.removeEventListener('scaling-changed', schedule);\n window.removeEventListener('design-system-layout-sized', schedule);\n window.removeEventListener('design-system-layout-ready', schedule);\n cancelAnimationFrame(frame);\n frame = 0;\n layer.replaceChildren();\n }\n window.dispatchEvent(new CustomEvent('design-system-layout-changed', { detail: { visible } }));\n };\n return { toggle: () => setVisible(!visible), hide: () => setVisible(false) };\n}\n","/** Round named area heights up to the shared unit without clipping their content. */\nexport function initGridFit(): void {\n const scopes = Array.from(document.querySelectorAll<HTMLElement>('[data-ds-grid-fit]'));\n if (!scopes.length || document.documentElement.hasAttribute('data-ds-grid-fit-ready')) return;\n document.documentElement.setAttribute('data-ds-grid-fit-ready', '');\n\n const measure = document.createElement('div');\n measure.setAttribute('aria-hidden', 'true');\n measure.style.cssText = 'position:fixed;left:0;top:0;width:0;height:var(--ds-grid-unit,20px);visibility:hidden;pointer-events:none;contain:strict';\n document.body.append(measure);\n const originalMinimums = new Map<HTMLElement, string>();\n const observed = new Set<HTMLElement>();\n let frame = 0;\n\n const fit = () => {\n frame = 0;\n const unit = measure.getBoundingClientRect().height;\n if (unit <= 0) return;\n const elements = scopes.flatMap((scope) => Array.from(scope.querySelectorAll<HTMLElement>('[data-ds-area]')));\n const current = new Set(elements);\n for (const [element, minimum] of originalMinimums) {\n if (!current.has(element)) {\n element.style.minHeight = minimum;\n originalMinimums.delete(element);\n }\n }\n // Restore natural heights first, allowing containers to shrink after a\n // translation, font, or viewport change as well as grow.\n elements.forEach((element) => {\n if (!originalMinimums.has(element)) originalMinimums.set(element, element.style.minHeight);\n element.style.minHeight = originalMinimums.get(element)!;\n });\n // Fit children before their containing areas so nested measurements agree.\n [...elements].reverse().forEach((element) => {\n const height = element.getBoundingClientRect().height;\n if (!height || getComputedStyle(element).display === 'none') return;\n const rounded = Math.max(1, Math.ceil((height - 0.02) / unit)) * unit;\n element.style.minHeight = `${rounded}px`;\n });\n\n const targets = new Set<HTMLElement>([measure, ...scopes, ...elements]);\n elements.forEach((element) => {\n for (const child of element.children) if (child instanceof HTMLElement) targets.add(child);\n });\n for (const element of observed) {\n if (!targets.has(element)) { resize.unobserve(element); observed.delete(element); }\n }\n for (const element of targets) {\n if (!observed.has(element)) { resize.observe(element); observed.add(element); }\n }\n window.dispatchEvent(new CustomEvent('design-system-layout-sized'));\n };\n const schedule = () => { if (!frame) frame = requestAnimationFrame(fit); };\n const resize = new ResizeObserver(schedule);\n const changes = new MutationObserver(schedule);\n scopes.forEach((scope) => changes.observe(scope, { subtree: true, childList: true, characterData: true }));\n window.addEventListener('resize', schedule);\n window.addEventListener('scaling-changed', schedule);\n window.addEventListener('language-changed', schedule);\n document.fonts.addEventListener('loadingdone', schedule);\n void document.fonts.ready.then(schedule);\n fit();\n}\n","import { createLayoutInspector } from './layout-inspector';\nimport { initGridFit } from './grid-fit';\n\n/** Triple G toggles the grid; triple L inspects named layout areas. */\nexport function initGridShortcut(): void {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n if (root.hasAttribute(\"data-ds-grid-ready\")) return;\n root.setAttribute(\"data-ds-grid-ready\", \"\");\n root.setAttribute(\"data-design-system\", \"1\");\n initGridFit();\n\n const overlay = document.createElement(\"div\");\n overlay.setAttribute(\"data-ds-grid-overlay\", \"\");\n overlay.setAttribute(\"aria-hidden\", \"true\");\n overlay.hidden = true;\n const shadow = overlay.attachShadow({ mode: \"open\" });\n shadow.innerHTML = `<style>\n :host {\n all: initial !important;\n display: block !important;\n color-scheme: inherit !important;\n position: fixed !important;\n inset: 0 !important;\n pointer-events: none !important;\n z-index: var(--ds-grid-z-index, 2147483647) !important;\n }\n :host([hidden]) { display: none !important; }\n .grid {\n position: absolute;\n inset: 0;\n --cell: var(--ds-grid-unit, calc(var(--unit, 20px) * var(--sf, 1)));\n --line: var(--ds-grid-color, light-dark(#61528440, #e0caff50));\n background-image:\n linear-gradient(to right, var(--line) 1px, transparent 1px),\n linear-gradient(to bottom, var(--line) 1px, transparent 1px);\n background-size: var(--cell) var(--cell);\n background-position:\n calc(var(--ds-grid-origin-x, 0px) - var(--ds-grid-scroll-x, 0px) - var(--ds-grid-line-offset, 0px))\n calc(var(--ds-grid-origin-y, 0px) - var(--ds-grid-scroll-y, 0px) - var(--ds-grid-line-offset, 0px));\n }\n @media print { :host { display: none !important; } }\n </style><div class=\"grid\"></div>`;\n document.body.append(overlay);\n const layout = createLayoutInspector();\n\n const updatePosition = () => {\n overlay.style.setProperty(\"--ds-grid-scroll-x\", `${window.scrollX}px`);\n overlay.style.setProperty(\"--ds-grid-scroll-y\", `${window.scrollY}px`);\n };\n const setVisible = (visible: boolean) => {\n overlay.hidden = !visible;\n root.toggleAttribute(\"data-ds-grid-visible\", visible);\n if (visible) {\n updatePosition();\n window.addEventListener(\"scroll\", updatePosition, { passive: true });\n } else {\n window.removeEventListener(\"scroll\", updatePosition);\n }\n window.dispatchEvent(new CustomEvent(\"design-system-grid-changed\", { detail: { visible } }));\n };\n\n window.addEventListener(\"design-system-toggle-grid\", () => setVisible(overlay.hidden !== false));\n window.addEventListener(\"design-system-toggle-layout\", () => layout.toggle());\n\n const preview = new URLSearchParams(window.location.search);\n if (preview.get('grid') === '1') setVisible(true);\n if (preview.get('layout') === '1') layout.toggle();\n\n if (import.meta.env?.DEV) {\n const mobile = window.matchMedia('(max-width: 768px)');\n let taps = 0;\n let lastTap = 0;\n let touch: { id: number; x: number; y: number; time: number } | null = null;\n const resetTaps = () => { taps = 0; touch = null; };\n window.addEventListener('pointerdown', (event: PointerEvent) => {\n if (!mobile.matches || event.pointerType !== 'touch' || !event.isPrimary) {\n resetTaps();\n return;\n }\n touch = { id: event.pointerId, x: event.clientX, y: event.clientY, time: performance.now() };\n }, { passive: true, capture: true });\n window.addEventListener('pointerup', (event: PointerEvent) => {\n if (!touch || event.pointerId !== touch.id) return;\n const now = performance.now();\n const moved = Math.hypot(event.clientX - touch.x, event.clientY - touch.y);\n if (moved > 12 || now - touch.time > 350) {\n resetTaps();\n return;\n }\n touch = null;\n taps = now - lastTap <= 500 ? taps + 1 : 1;\n lastTap = now;\n if (taps === 3) {\n resetTaps();\n setVisible(false);\n layout.hide();\n }\n }, { passive: true, capture: true });\n window.addEventListener('pointercancel', resetTaps, { passive: true });\n window.addEventListener('blur', resetTaps);\n mobile.addEventListener('change', resetTaps);\n }\n\n let presses = 0;\n let lastPress = 0;\n let lastKey = '';\n const reset = () => { presses = 0; lastKey = ''; };\n window.addEventListener(\"blur\", reset);\n window.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n const editing = document.designMode === \"on\" || event.composedPath().some((target) =>\n target instanceof HTMLElement && (\n target.isContentEditable || target.matches('input, textarea, select, [role=\"textbox\"], [role=\"combobox\"]')\n )\n );\n if (editing || event.defaultPrevented || event.isComposing || event.repeat || event.metaKey || event.ctrlKey || event.altKey) {\n reset();\n return;\n }\n if (event.key === \"Escape\") { setVisible(false); layout.hide(); }\n const key = event.key.toLowerCase();\n if (key !== 'g' && key !== 'l') {\n reset();\n return;\n }\n const now = performance.now();\n presses = key === lastKey && now - lastPress <= 800 ? presses + 1 : 1;\n lastKey = key;\n lastPress = now;\n if (presses === 3) {\n reset();\n if (key === 'g') setVisible(overlay.hidden !== false);\n else layout.toggle();\n }\n });\n}\n\nif (typeof document !== \"undefined\") {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", initGridShortcut, { once: true });\n } else {\n initGridShortcut();\n }\n}\n","/**\n * One tooltip for a whole page: any element with `data-tooltip=\"…\"` shows its text in Design system 1's tooltip,\n * Ezo's label: 16px high, black with white text (white on black in dark mode), 4px corners, 14px regular, 2.5px at\n * the sides, two pixels above the element, shown at once. `data-tooltip-colour` gives it a colour of its own. The same look as `<ds-tooltip>`, without wrapping each element in a component, so a table of\n * hundreds of cells can carry one each. Long text wraps at 320px on 20px lines.\n */\nexport function initTooltips(): void {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n if (root.hasAttribute(\"data-ds-tooltips-ready\")) return;\n root.setAttribute(\"data-ds-tooltips-ready\", \"\");\n\n const bubble = document.createElement(\"div\");\n bubble.setAttribute(\"data-ds-tooltip\", \"\");\n bubble.setAttribute(\"role\", \"tooltip\");\n bubble.id = \"ds-tooltip\";\n const style = document.createElement(\"style\");\n style.textContent = `\n [data-ds-tooltip] {\n position: fixed; z-index: 2147483646; top: 0; left: 0; pointer-events: none; visibility: hidden;\n max-width: 320px; min-height: 16px; box-sizing: border-box; padding: 0 2.5px; border-radius: 4px;\n background: var(--ds-tooltip-background, light-dark(#000, #fff));\n color: var(--ds-tooltip-color, light-dark(#fff, #000));\n font-family: var(--typeface-regular, var(--font-regular, system-ui)), sans-serif;\n font-size: 14px; font-weight: 400; line-height: 16px; letter-spacing: 0; white-space: nowrap;\n }\n [data-ds-tooltip].is-wide { white-space: normal; }\n [data-ds-tooltip].is-visible { visibility: visible; }\n @media print { [data-ds-tooltip] { display: none; } }\n `;\n document.head.appendChild(style);\n document.body.appendChild(bubble);\n\n let current: HTMLElement | null = null;\n const place = (target: HTMLElement) => {\n const box = target.getBoundingClientRect();\n const width = bubble.offsetWidth;\n const height = bubble.offsetHeight;\n const left = Math.min(Math.max(4, box.left + box.width / 2 - width / 2), window.innerWidth - width - 4);\n // Above the element, two pixels clear; below it when there is no room above.\n const top = box.top - height - 2 >= 4 ? box.top - height - 2 : box.bottom + 2;\n bubble.style.transform = `translate(${Math.round(left)}px, ${Math.round(top)}px)`;\n };\n const show = (target: HTMLElement) => {\n const text = target.dataset.tooltip;\n if (!text) return;\n current = target;\n bubble.textContent = text;\n // A colour of its own, as Ezo's labels take the accent: data-tooltip-colour=\"#f5aad1\", lettered in the ink.\n const colour = target.dataset.tooltipColour;\n bubble.style.setProperty(\"--ds-tooltip-background\", colour || \"\");\n bubble.style.setProperty(\"--ds-tooltip-color\", colour ? \"#1e1e1e\" : \"\");\n if (!colour) { bubble.style.removeProperty(\"--ds-tooltip-background\"); bubble.style.removeProperty(\"--ds-tooltip-color\"); }\n // One line, as Ezo's; a long text wraps at 320px instead of running off the page.\n bubble.classList.remove(\"is-wide\");\n if (bubble.scrollWidth > 320) bubble.classList.add(\"is-wide\");\n target.setAttribute(\"aria-describedby\", bubble.id);\n place(target);\n bubble.classList.add(\"is-visible\");\n };\n const hide = () => {\n current?.removeAttribute(\"aria-describedby\");\n current = null;\n bubble.classList.remove(\"is-visible\");\n };\n const find = (event: Event) => (event.target as Element | null)?.closest?.<HTMLElement>(\"[data-tooltip]\") ?? null;\n\n document.addEventListener(\"pointerover\", (event) => {\n const target = find(event);\n if (target !== current) target ? show(target) : hide();\n }, { passive: true });\n document.addEventListener(\"pointerleave\", hide, { passive: true });\n document.addEventListener(\"focusin\", (event) => { const target = find(event); if (target) show(target); });\n document.addEventListener(\"focusout\", hide);\n document.addEventListener(\"keydown\", (event) => { if (event.key === \"Escape\") hide(); });\n window.addEventListener(\"scroll\", hide, { passive: true, capture: true });\n}\n\nif (typeof document !== \"undefined\") {\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", initTooltips, { once: true });\n else initTooltips();\n}\n","import type { LanguageCode } from \"./i18n\";\nimport type { ThemeType } from \"./theme\";\n\nexport type Preferences = {\n language?: LanguageCode;\n theme?: ThemeType;\n [key: string]: unknown;\n};\n\n/** Product storage names are configuration; the implementation stays shared. */\nexport interface PreferenceOptions {\n storageKey?: string;\n themeStorageKey?: string;\n}\n\ndeclare global {\n interface Window { DS_ONE_PREFERENCES?: PreferenceOptions; }\n}\n\nexport function preferenceStorageKey(kind: \"preferences\" | \"theme\"): string {\n const options = typeof window === \"undefined\" ? undefined : window.DS_ONE_PREFERENCES;\n return (kind === \"theme\" ? options?.themeStorageKey : options?.storageKey) || `ds-one:${kind}`;\n}\n\nexport function savePreferences(preferences: Preferences): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n try {\n const key = preferenceStorageKey(\"preferences\");\n const raw = window.localStorage?.getItem(key);\n const existing = raw ? (JSON.parse(raw) as Record<string, unknown>) : {};\n const next = { ...existing, ...preferences };\n window.localStorage?.setItem(key, JSON.stringify(next));\n } catch (error) {\n console.warn(\"ds-one: unable to persist preferences\", error);\n }\n}\n","/**\n * Currency label utilities for regional price display\n *\n * Note: This module provides currency symbols/labels based on language and region.\n * Consider moving this functionality into i18n.ts as it's region/locale-related.\n * Actual price values will be stored in a database or managed via Stripe.\n */\n\nimport type { LanguageCode } from \"./i18n\";\n\ntype PriceLabelOptions = {\n language: LanguageCode;\n country?: string;\n};\n\n// Simple price label mapping based on language/country\nconst PRICE_LABELS: Record<string, string> = {\n da: \"kr.\",\n nb: \"kr.\",\n sv: \"kr.\",\n de: \"€\",\n en: \"$\",\n pt: \"€\",\n es: \"€\",\n zh: \"¥\",\n ja: \"¥\",\n ko: \"₩\",\n};\n\nexport function getPriceLabel(options: PriceLabelOptions): string {\n const { language, country } = options;\n\n // If country is provided, try to map it to a currency\n if (country) {\n const countryUpper = country.toUpperCase();\n // Add country-specific mappings if needed\n if (countryUpper === \"US\" || countryUpper === \"USA\") {\n return \"$\";\n }\n if (countryUpper === \"GB\" || countryUpper === \"UK\") {\n return \"£\";\n }\n if (countryUpper === \"JP\" || countryUpper === \"JPN\") {\n return \"¥\";\n }\n if (countryUpper === \"CN\" || countryUpper === \"CHN\") {\n return \"¥\";\n }\n if (countryUpper === \"KR\" || countryUpper === \"KOR\") {\n return \"₩\";\n }\n }\n\n // Fall back to language-based mapping\n const primaryLang = language.toLowerCase().split(/[-_]/)[0];\n return PRICE_LABELS[primaryLang] || \"$\";\n}\n","import { signal } from \"@lit-labs/signals\";\nimport { preferenceStorageKey } from \"./preferences\";\n\nexport type ThemeType = \"light\" | \"dark\";\n\nfunction getInitialTheme(): ThemeType {\n if (typeof window === \"undefined\") {\n return \"light\";\n }\n\n let storedTheme: string | null = null;\n try { storedTheme = window.localStorage?.getItem(preferenceStorageKey(\"theme\")); } catch { /* Storage can be unavailable. */ }\n if (storedTheme === \"light\" || storedTheme === \"dark\") {\n return storedTheme;\n }\n\n // Check system preference\n const prefersDark = window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches;\n return prefersDark ? \"dark\" : \"light\";\n}\n\nexport const currentTheme = signal<ThemeType>(getInitialTheme());\n\nexport function setTheme(theme: ThemeType): void {\n if (theme === currentTheme.get()) {\n return;\n }\n\n currentTheme.set(theme);\n\n if (typeof window !== \"undefined\") {\n try {\n window.localStorage?.setItem(preferenceStorageKey(\"theme\"), theme);\n } catch (error) {\n console.warn(\"ds-one: unable to persist theme preference\", error);\n }\n\n const root = window.document?.documentElement;\n if (root) {\n root.classList.remove(\"light-theme\", \"dark-theme\");\n root.classList.add(`${theme}-theme`);\n }\n\n window.dispatchEvent(\n new CustomEvent(\"theme-changed\", { detail: { theme } })\n );\n }\n}\n\n// Initialize theme on load\nif (typeof window !== \"undefined\") {\n const theme = currentTheme.get();\n const root = window.document?.documentElement;\n if (root) {\n root.classList.remove(\"light-theme\", \"dark-theme\");\n root.classList.add(`${theme}-theme`);\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/** Register a shared element once; a fresh page picks up changes during HMR. */\nexport function define(name: string, element: CustomElementConstructor): void {\n if (typeof customElements === \"undefined\") return;\n if (!customElements.get(name)) customElements.define(name, element);\n}\n","@import \"../../1-root/component-metrics.css\";\n\n/* ds-text.css */\n/* Text component styles for displaying translations */\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n height: var(--ds-control-height);\n font-family: var(--ds-typeface-regular);\n font-size: var(--ds-type-size-default);\n font-weight: var(--ds-type-weight-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n text-align: left;\n text-transform: var(--text-transform-default);\n text-decoration: var(--text-decoration-default);\n vertical-align: middle;\n white-space: nowrap;\n color: inherit;\n}\n\n:host([data-language=\"ja\"]) {\n font-family: var(--ds-typeface-regular-jp, var(--typeface-regular-jp));\n}\n\n:host([data-language=\"zh\"]),\n:host([data-language=\"zh-hant\"]) {\n font-family: var(--ds-typeface-regular-zh-hant, var(--typeface-regular-zh-hant));\n font-weight: var(--ds-type-weight-default, 400);\n}\n\n:host([data-language=\"zh-hans\"]) {\n font-family: var(--ds-typeface-regular-zh-hans, var(--typeface-regular-zh-hans));\n font-weight: var(--ds-type-weight-default, 400);\n}\n\n:host span {\n color: inherit;\n}\n\n/* ds-text.css */\n\n:host([literal]) {\n height: auto;\n min-height: var(--ds-control-height);\n display: inline-block;\n min-width: 0;\n max-width: 100%;\n overflow: var(--ds-text-overflow, hidden);\n color: var(--ds-text-tone, inherit);\n font-family: var(--ds-typeface-regular);\n font-feature-settings: var(--ds-font-features);\n font-size: var(--ds-type-size-default);\n font-weight: var(--ds-type-weight-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:host([literal][strong]) {\n font-weight: var(--ds-type-weight-bold);\n}\n\n:host([literal][wrap]) {\n overflow: visible;\n white-space: normal;\n}\n\n:host([literal][tone=\"muted\"]) {\n --ds-text-tone: var(--ds-text-color-muted);\n}\n\n:host([literal][tone=\"title\"]) {\n --ds-text-tone: var(--ds-title-color);\n}\n\n:host([literal][size=\"small\"]) {\n font-size: var(--ds-type-size-small);\n}\n\n:host([literal][size=\"heading\"]) {\n font-size: var(--ds-type-size-heading);\n line-height: var(--ds-row-height);\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { getText, currentLanguage } from \"../0-face/i18n\";\nimport { define } from \"../0-face/define\";\nimport styles from \"./styles/ds-text.css?inline\";\n\n/**\n * A component for displaying text from translations\n *\n * @element ds-text\n * @prop {string} text - The translation key (optional if using slot content)\n * @prop {boolean} literal - The text is what someone wrote, not a key: show it\n * as it stands, never looked up, never translated\n *\n * @example\n * // Using slot content as the key (preferred)\n * <ds-text>Welcome to the app</ds-text>\n *\n * // Using text attribute (still supported)\n * <ds-text text=\"Welcome to the app\"></ds-text>\n *\n * // Something a person typed: a list title, an item, a search they saved\n * <ds-text literal text=\"Marketing plan\"></ds-text>\n */\nexport class Text extends LitElement {\n static get properties() {\n return {\n text: { type: String, reflect: true },\n literal: { type: Boolean, reflect: true },\n tone: { type: String, reflect: true },\n size: { type: String, reflect: true },\n strong: { type: Boolean, reflect: true },\n wrap: { type: Boolean, reflect: true },\n _text: { type: String, state: true },\n };\n }\n\n declare text: string;\n declare literal: boolean;\n declare tone?: \"muted\" | \"title\";\n declare size?: \"small\" | \"heading\";\n declare strong: boolean;\n declare wrap: boolean;\n declare _text: string;\n declare _currentLanguage: string;\n private _slotKey: string = \"\";\n private boundHandlers: { languageChanged: EventListener };\n\n constructor() {\n super();\n this.text = \"\";\n this.literal = false;\n this.strong = false;\n this.wrap = false;\n this._text = \"\";\n this._currentLanguage = currentLanguage.value;\n\n // Create bound event handlers for proper cleanup\n this.boundHandlers = {\n languageChanged: (() => {\n this._currentLanguage = currentLanguage.value;\n this._updateLanguageAttribute();\n this._loadText();\n this.requestUpdate();\n }) as EventListener,\n };\n }\n\n static styles = unsafeCSS(styles);\n\n connectedCallback() {\n super.connectedCallback();\n\n // Capture slot content as the translation key if no text attribute\n if (!this.text && !this.literal) {\n const slotContent = this.textContent?.trim() || \"\";\n if (slotContent) {\n this._slotKey = slotContent;\n // Clear the slot content - we'll render the translation in shadow DOM\n this.textContent = \"\";\n }\n }\n\n this._currentLanguage = currentLanguage.value;\n this._updateLanguageAttribute();\n this._loadText();\n\n // Listen for language changes\n window.addEventListener(\n \"language-changed\",\n this.boundHandlers.languageChanged\n );\n\n // Also listen for translations loaded event\n window.addEventListener(\n \"translations-loaded\",\n this.boundHandlers.languageChanged\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\n \"language-changed\",\n this.boundHandlers.languageChanged\n );\n window.removeEventListener(\n \"translations-loaded\",\n this.boundHandlers.languageChanged\n );\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has(\"text\") || changedProperties.has(\"literal\")) {\n this._loadText();\n }\n }\n\n _updateLanguageAttribute() {\n const lang = this._currentLanguage || currentLanguage.value;\n // Handles \"ja\", \"ja-JP\", \"zh-Hant\", \"zh-Hans\", etc.\n const parts = (lang || \"\").toLowerCase().split(/[-_]/).filter(Boolean);\n const primaryLang = parts[0] || \"\";\n\n if (primaryLang === \"ja\") {\n this.setAttribute(\"data-language\", \"ja\");\n return;\n }\n\n if (primaryLang === \"zh\") {\n // Prefer explicit script; otherwise infer from common regions.\n const hasHans =\n parts.includes(\"hans\") || parts.includes(\"cn\") || parts.includes(\"sg\");\n const hasHant =\n parts.includes(\"hant\") ||\n parts.includes(\"tw\") ||\n parts.includes(\"hk\") ||\n parts.includes(\"mo\");\n\n if (hasHans) this.setAttribute(\"data-language\", \"zh-hans\");\n else if (hasHant) this.setAttribute(\"data-language\", \"zh-hant\");\n else this.setAttribute(\"data-language\", \"zh\");\n return;\n }\n\n this.removeAttribute(\"data-language\");\n }\n\n _loadText() {\n // Use text attribute first, then slot content as fallback\n const key = this.text || this._slotKey;\n\n if (!key) {\n this._text = \"\";\n this._updateLanguageAttribute();\n return;\n }\n\n // What someone wrote stands as it is: a list called \"Home\" stays \"Home\",\n // and nothing about it reaches the translations.\n if (this.literal) {\n this._text = key;\n this._updateLanguageAttribute();\n return;\n }\n\n try {\n const translatedText = getText(key);\n this._text = translatedText || key;\n } catch (error) {\n console.error(\"Error loading text for key:\", key, error);\n this._text = key;\n }\n this._updateLanguageAttribute();\n }\n\n render() {\n if (this.literal && !this.text) return html`<slot></slot>`;\n return html`<span>${this._text || this.text || this._slotKey}</span>`;\n }\n}\n\ndefine(\"ds-text\", Text);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-text\": Text;\n }\n}\n","import { LitElement, type PropertyDeclarations } from \"lit\";\n\n/**\n * The element is the control.\n *\n * A host control carries the role,\n * takes focus, answers Enter and Space, and reports itself disabled. React's\n * handlers, the accessibility tree and Testing Library then all meet one node\n * in the light DOM, and there is no second interactive element nested inside\n * the first.\n *\n * The role defaults to `button`; an element that is a tab, an option or a menu\n * item says so with its own `role` attribute, which is left as written.\n */\nexport abstract class Control extends LitElement {\n static properties: PropertyDeclarations = {\n // The accessor is our own: disabled changes what the element does and\n // what assistive technology hears, so it reaches the DOM at once rather\n // than on Lit's next update.\n disabled: { type: Boolean, reflect: true, noAccessor: true },\n };\n\n #disabled = false;\n #enabledTabIndex: string | null | undefined;\n protected get hostControl(): boolean { return true; }\n protected syncControl(): void { if (this.isConnected) this.#syncDisabled(); }\n\n get disabled(): boolean {\n return this.#disabled;\n }\n\n set disabled(value: boolean) {\n const old = this.#disabled;\n this.#disabled = Boolean(value);\n // An element may not gain attributes before it is in a document; React\n // sets properties first, and connectedCallback catches up.\n if (this.isConnected) this.#syncDisabled();\n this.requestUpdate(\"disabled\", old);\n }\n\n constructor() {\n super();\n this.addEventListener(\"keydown\", this.#onKeyDown);\n this.addEventListener(\"keyup\", this.#onKeyUp);\n // Registered on the element itself so it runs before the click reaches\n // React's root listener.\n this.addEventListener(\"click\", this.#onClick, { capture: true });\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n if (this.hostControl && !this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"button\");\n this.#syncDisabled();\n }\n\n #syncDisabled(): void {\n this.toggleAttribute(\"disabled\", this.#disabled);\n if (!this.hostControl) return;\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"button\");\n if (this.#disabled) {\n if (this.#enabledTabIndex === undefined) this.#enabledTabIndex = this.getAttribute(\"tabindex\");\n this.setAttribute(\"aria-disabled\", \"true\");\n this.setAttribute(\"tabindex\", \"-1\");\n } else {\n this.removeAttribute(\"aria-disabled\");\n if (this.#enabledTabIndex !== undefined) {\n if (this.#enabledTabIndex === null) this.setAttribute(\"tabindex\", \"0\");\n else this.setAttribute(\"tabindex\", this.#enabledTabIndex);\n this.#enabledTabIndex = undefined;\n } else if (!this.hasAttribute(\"tabindex\")) this.setAttribute(\"tabindex\", \"0\");\n }\n }\n\n #onClick = (event: Event): void => {\n if (!this.disabled) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n };\n\n #onKeyDown = (event: KeyboardEvent): void => {\n if (!this.hostControl || this.disabled || event.target !== this) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n this.click();\n } else if (event.key === \" \") {\n // Space clicks on release, as a native button does; stop the page from\n // scrolling in the meantime.\n event.preventDefault();\n }\n };\n\n #onKeyUp = (event: KeyboardEvent): void => {\n if (!this.hostControl || this.disabled || event.target !== this) return;\n if (event.key === \" \") {\n event.preventDefault();\n this.click();\n }\n };\n}\n","@import \"../../1-root/component-metrics.css\";\n\n/* ds-button.css */\n\n:host([control=\"host\"]),\n:host([control=\"slotted\"]) ::slotted(:is(button, a)) {\n box-sizing: border-box !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: var(--ds-button-align, flex-start) !important;\n gap: var(--ds-button-gap, calc(4px * var(--ds-sf))) !important;\n min-width: 0 !important;\n max-width: 100% !important;\n height: var(--ds-button-height, var(--ds-control-height)) !important;\n /* Important, so a page's `* { padding: 0 }` reset cannot reach it: the\n padding is set through --ds-button-padding. */\n padding: var(--ds-button-padding, 0) !important;\n border-radius: var(--ds-radius) !important;\n corner-shape: var(--ds-corner-shape, round) !important;\n background: var(--ds-button-background, transparent) !important;\n color: var(--ds-button-color, var(--ds-button-text-color)) !important;\n font-family: var(--ds-typeface-regular) !important;\n font-feature-settings: var(--ds-font-features) !important;\n font-size: var(--ds-type-size-default) !important;\n font-weight: var(--ds-type-weight-default) !important;\n line-height: var(--ds-type-lineheight-default) !important;\n letter-spacing: var(--ds-type-letterspacing-default) !important;\n white-space: nowrap !important;\n cursor: pointer !important;\n user-select: none !important;\n -webkit-user-select: none !important;\n -webkit-tap-highlight-color: transparent !important;\n outline: none !important;\n transition: opacity 120ms ease !important;\n}\n\n:host([control=\"host\"]) ::slotted(*) {\n flex: 0 0 auto !important;\n}\n\n:host([fit][control=\"slotted\"]) ::slotted(:is(button, a)) {\n width: max-content !important;\n min-width: var(--ds-button-min-width, 0px) !important;\n justify-content: var(--ds-button-align, flex-start) !important;\n}\n\n:host([control=\"host\"][primary]),\n:host([control=\"slotted\"][primary]) {\n --ds-button-padding: 0 calc(var(--ds-button-inset, 4px) * var(--ds-sf));\n --ds-button-background: var(--ds-button-background-color-primary);\n --ds-button-color: var(--ds-button-text-color-on-accent);\n}\n\n:host([control=\"host\"][secondary]),\n:host([control=\"slotted\"][secondary]) {\n --ds-button-padding: 0 calc(var(--ds-button-inset, 4px) * var(--ds-sf));\n --ds-button-background: var(--ds-button-background-color-secondary);\n}\n\n:host([control=\"host\"][secondary]:hover:not([disabled])),\n:host([control=\"slotted\"][secondary]:hover:not([disabled])) {\n --ds-button-background: var(--ds-fill-hover);\n}\n\n:host([control=\"host\"][active]),\n:host([control=\"slotted\"][active]) {\n --ds-button-background: var(--ds-fill);\n}\n\n/* A tab: muted until it is hovered or current. */\n:host([control=\"host\"][role=\"tab\"]),\n:host([control=\"host\"][choice]),\n:host([control=\"slotted\"][choice]) {\n --ds-button-padding: 0 calc(4px * var(--ds-sf));\n --ds-button-color: var(--ds-text-color-muted);\n}\n\n:host([control=\"host\"][role=\"tab\"]:hover:not([disabled])),\n:host([control=\"host\"][choice]:hover:not([disabled])),\n:host([control=\"slotted\"][choice]:hover:not([disabled])) {\n --ds-button-background: color-mix(in srgb, var(--ds-fill) 72%, transparent);\n --ds-button-color: var(--ds-text-color);\n}\n\n:host([control=\"host\"][role=\"tab\"][active]),\n:host([control=\"host\"][role=\"tab\"][active]:hover:not([disabled])),\n:host([control=\"host\"][choice][active]),\n:host([control=\"host\"][choice][active]:hover:not([disabled])),\n:host([control=\"slotted\"][choice][active]),\n:host([control=\"slotted\"][choice][active]:hover:not([disabled])) {\n --ds-button-background: var(--ds-fill);\n --ds-button-color: var(--ds-text-color);\n}\n\n:host([control=\"host\"]) ::slotted([slot=\"icon\"]) {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: var(--ds-control-height) !important;\n height: var(--ds-control-height) !important;\n}\n\n:host([control=\"host\"]) ::slotted([slot=\"trailing\"]) {\n color: var(--ds-text-color-muted) !important;\n font-variant-numeric: tabular-nums !important;\n}\n\n:host([control=\"host\"][icon]),\n:host([control=\"slotted\"][icon]) {\n justify-content: center !important;\n width: var(--ds-button-height, var(--ds-control-height)) !important;\n height: var(--ds-button-height, var(--ds-control-height)) !important;\n padding: 0 !important;\n color: var(--ds-button-color, var(--ds-text-color-muted)) !important;\n}\n\n:host([control=\"host\"][icon]:hover:not([disabled])) {\n --ds-button-color: var(--ds-text-color);\n}\n\n/* A choice in a ds-menu: a full-width row, filled under the pointer or focus. */\n:host([control=\"host\"][role=\"option\"]),\n:host([control=\"host\"][role=\"menuitem\"]),\n:host([control=\"host\"][role=\"menuitemradio\"]),\n:host([control=\"host\"][role=\"menuitemcheckbox\"]) {\n --ds-button-height: auto;\n --ds-button-padding: calc(4px * var(--ds-sf)) calc(6px * var(--ds-sf));\n width: var(--ds-button-width, 100%) !important;\n min-height: var(--ds-row-height) !important;\n border-radius: var(--ds-radius) !important;\n}\n\n:host([control=\"host\"][role=\"option\"]:hover),\n:host([control=\"host\"][role=\"menuitem\"]:hover),\n:host([control=\"host\"][role=\"menuitemradio\"]:hover),\n:host([control=\"host\"][role=\"menuitemcheckbox\"]:hover),\n:host([control=\"host\"][role=\"option\"]:focus-visible),\n:host([control=\"host\"][role=\"menuitem\"]:focus-visible) {\n --ds-button-background: var(--ds-fill);\n outline: none !important;\n}\n\n:host([control=\"host\"][role=\"option\"][active]) {\n --ds-button-background: var(--ds-fill);\n}\n\n:host([control=\"host\"]:focus-visible),\n:host([control=\"slotted\"]) ::slotted(:is(button, a):focus-visible) {\n outline: 2px solid var(--ds-focus-ring) !important;\n outline-offset: 1px !important;\n}\n\n:host([control=\"host\"][disabled]),\n:host([control=\"slotted\"]) ::slotted(:is(button:disabled, a[aria-disabled=\"true\"])) {\n cursor: default !important;\n opacity: 0.5 !important;\n pointer-events: none !important;\n}\n\n/* The light-DOM button keeps native forms, submitters and fieldset semantics.\n DS1 owns its face; product layout belongs on the host. */\n:host([control=\"slotted\"]) ::slotted(:is(button, a)) {\n appearance: none !important;\n box-sizing: border-box !important;\n border: 0 !important;\n margin: 0 !important;\n width: 100% !important;\n min-height: var(--ds-button-height, var(--ds-control-height)) !important;\n max-height: var(--ds-button-height, var(--ds-control-height)) !important;\n box-shadow: none !important;\n text-align: start !important;\n text-transform: none !important;\n text-decoration: none !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n}\n:host([control=\"slotted\"][icon]) ::slotted(:is(button, a)) {\n justify-content: center !important;\n}\n\n:host([control=\"slotted\"]) {\n /* The native focus ring extends beyond the face; only its text is clipped. */\n overflow: visible;\n --ds-button-height: var(--ds-row-height);\n width: var(--ds-button-width, calc(4 * var(--ds-unit)));\n}\n:host([control=\"slotted\"][wide]) {\n width: var(--ds-button-width, calc(8 * var(--ds-unit)));\n}\n:host([control=\"slotted\"][fit]) {\n width: max-content;\n}\n\n:host([control=\"host\"][danger]),\n:host([control=\"slotted\"][danger]) {\n --ds-button-color: var(--ds-tuned-red);\n}\n\n:host([control=\"slotted\"][hidden]) { display: none !important; }\n\n/* Native actions in menus, including grouped and nested choices. */\n:host([menu-item]) {\n flex: 0 0 auto;\n width: 100%;\n --ds-button-height: var(--ds-row-height);\n --ds-button-align: flex-start;\n --ds-button-padding: 0 calc(4px * var(--ds-sf));\n}\n:host([menu-item]:is(:hover, :focus-within):not([disabled])) {\n --ds-button-background: var(--ds-fill);\n}\n:host([menu-item][control=\"slotted\"]) ::slotted([aria-checked=\"true\"]) {\n box-shadow: inset 0 0 0 1px var(--ds-focus-ring) !important;\n}\n","/* ds-button.css */\n/* Core button component styles */\n\n:host {\n display: inline-flex;\n min-width: 0;\n flex: 0 1 auto;\n max-width: 100%;\n /* Clipped along the line only: a word that runs long ends in an ellipsis,\n but the descenders of g, y, p and j hang below the 16-unit box as they\n would anywhere else, instead of being cut off at its edge. */\n overflow-x: clip;\n overflow-y: visible;\n}\n\n/* Intrinsic chips stay within their row without product shadow-root sheets. */\n:host([fit]) {\n flex: 0 0 auto;\n width: max-content;\n}\n:host([fit]) button {\n flex: 0 0 auto;\n width: max-content;\n min-width: var(--ds-button-min-width, 0px);\n justify-content: var(--ds-button-align, flex-start);\n}\n:host([fit]) button ds-text,\n:host([fit]) button ::slotted(*) {\n flex: 0 0 auto;\n width: max-content;\n}\n\nbutton {\n box-sizing: border-box;\n max-height: var(--ds-control-height);\n height: var(--ds-control-height);\n min-height: var(--ds-control-height);\n width: 100%;\n max-width: 100%;\n min-width: 0;\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n border: none;\n border-radius: var(--ds-radius);\n corner-shape: var(--ds-corner-shape, round);\n cursor: pointer;\n padding: 0;\n color: var(--button-color, var(--button-text-color));\n font-family: var(--ds-typeface-regular);\n font-size: var(--ds-type-size-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n -webkit-tap-highlight-color: transparent;\n white-space: nowrap;\n overflow-x: clip;\n overflow-y: visible;\n text-overflow: ellipsis;\n /* Default to no-background when no variant is specified */\n background-color: transparent;\n text-decoration: none;\n}\n\nbutton ds-text,\nbutton ::slotted(*) {\n overflow-x: clip;\n overflow-y: visible;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n text-align: left;\n justify-content: flex-start;\n color: inherit;\n}\n\nbutton[primary] {\n background-color: var(--accent-color);\n color: var(--button-text-color-on-light, var(--black));\n text-decoration-line: none;\n font-family: var(--ds-typeface-regular);\n padding: 0 calc(var(--ds-button-inset, 4px) * var(--ds-sf));\n}\n\nbutton[secondary] {\n background-color: var(--button-background-color-secondary);\n color: var(--button-text-color-secondary, var(--black));\n font-family: var(--ds-typeface-regular);\n padding: 0 calc(var(--ds-button-inset, 4px) * var(--ds-sf));\n}\n\n.loading {\n opacity: 0.7;\n}\n\n/* A button that holds only an icon — every close button — is a 16-unit\n square, scaled with the page, in the shape's corners: the icon fills it,\n no word-padding around it, so the glyph's lines are the same size wherever\n a page or a panel closes, on the web and in the app alike. The element\n marks itself `icon` when its only child is an ds-icon. */\n:host([icon]) {\n flex: 0 0 auto;\n width: var(--ds-control-height);\n height: var(--ds-control-height);\n}\n:host([icon]) button {\n width: var(--ds-control-height);\n padding: 0 !important;\n justify-content: center;\n}\n:host([icon]) ::slotted(ds-icon) {\n flex: 0 0 auto;\n width: var(--ds-control-height);\n height: var(--ds-control-height);\n}\n\n/* A button marked `square` is a 16-unit square whatever it holds, a count\n or an initial, its words in its middle with no word-padding around them. */\n:host([square]) {\n flex: 0 0 auto;\n width: var(--ds-control-height);\n}\n:host([square]) button {\n width: var(--ds-control-height);\n padding: 0 !important;\n justify-content: center;\n}\n\n/* A segment gets its outside corners from the enclosing split control. */\n:host([segment]) button {\n border-radius: 0 !important;\n}\n","// ds-button.ts\n// Core button component\n\nimport { html, unsafeCSS } from \"lit\";\nimport \"./ds-text\";\nimport { Control } from \"../0-face/control\";\nimport { define } from \"../0-face/define\";\nimport hostStyles from \"./styles/ds-button-host.css?inline\";\nimport styles from \"./styles/ds-button.css?inline\";\n\nexport class Button extends Control {\n static properties = {\n primary: { type: Boolean, reflect: true },\n secondary: { type: Boolean, reflect: true },\n control: { type: String, reflect: true, noAccessor: true },\n active: { type: Boolean, reflect: true },\n choice: { type: Boolean, reflect: true },\n icon: { type: Boolean, reflect: true },\n wide: { type: Boolean, reflect: true },\n fit: { type: Boolean, reflect: true },\n danger: { type: Boolean, reflect: true },\n menuItem: { type: Boolean, reflect: true, attribute: \"menu-item\" },\n blank: { type: Boolean, reflect: true },\n language: { type: String },\n text: { type: String },\n href: { type: String },\n _loading: { type: Boolean, state: true },\n };\n\n // Public properties\n declare primary: boolean;\n declare secondary: boolean;\n declare active: boolean;\n declare choice: boolean;\n declare icon: boolean;\n declare wide: boolean;\n declare fit: boolean;\n declare danger: boolean;\n declare menuItem: boolean;\n private _control = \"native\";\n get control(): string { return this._control; }\n set control(value: string) {\n const old = this._control;\n this._control = value;\n this.syncControl();\n this.requestUpdate(\"control\", old);\n }\n protected get hostControl(): boolean { return this.control === \"host\"; }\n declare blank: boolean;\n declare language: string;\n declare text: string;\n declare href: string;\n\n // Private state\n declare _loading: boolean;\n\n constructor() {\n super();\n this.active = false;\n this.choice = false;\n this.icon = false;\n this.wide = false;\n this.fit = false;\n this.danger = false;\n this.menuItem = false;\n this.primary = false; // Default to no-background (no attribute)\n this.secondary = false;\n this.disabled = false;\n this.blank = false;\n this.language = \"en-US\";\n this.text = \"\";\n this.href = \"\";\n this._loading = false;\n }\n\n static styles = [unsafeCSS(styles), unsafeCSS(hostStyles)];\n\n /**\n * A button holding only an icon — every close button — says so on its host,\n * so its styles can make it a 16-unit square with the icon filling it.\n */\n _reflectIcon() {\n if (this.control !== \"native\") return;\n const only = this.firstElementChild;\n const icon = !this.text && this.childElementCount === 1 && only?.localName === 'ds-icon' && !(this.textContent ?? '').trim();\n this.toggleAttribute('icon', !!icon);\n }\n\n private syncSlottedControl() {\n if (this.control !== \"slotted\") return;\n const button = this.querySelector<HTMLButtonElement>(\":scope > button\");\n if (button) button.disabled = this.disabled;\n }\n\n updated() {\n this.syncSlottedControl();\n }\n\n focus(options?: FocusOptions) {\n if (this.control === \"slotted\") this.querySelector<HTMLElement>(\":scope > :is(button, a)\")?.focus(options);\n else if (this.hostControl) super.focus(options);\n else this.shadowRoot?.querySelector(\"button\")?.focus(options);\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._reflectIcon();\n this.syncSlottedControl();\n }\n\n render() {\n const hasTextProps = this.text;\n if (this.control === \"slotted\") return html`<slot @slotchange=${this.syncSlottedControl}></slot>`;\n if (this.hostControl) return html`<slot name=\"icon\"></slot><slot></slot><slot name=\"trailing\"></slot>`;\n\n return html`\n <button\n type=\"button\"\n ?primary=${this.primary}\n ?secondary=${this.secondary}\n ?disabled=${this.disabled}\n @click=${this._handleClick}\n >\n ${hasTextProps\n ? html`<ds-text .text=${this.text}></ds-text>`\n : html`<slot @slotchange=${this._reflectIcon}></slot>`}\n </button>\n `;\n }\n\n private _handleClick(e: Event) {\n // Prevent any action if disabled and stop event propagation\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n // If href is provided, navigate to the URL and do not bubble further\n if (this.href) {\n e.preventDefault();\n e.stopPropagation();\n if (this.blank) {\n window.open(this.href, \"_blank\", \"noopener,noreferrer\");\n } else {\n window.location.href = this.href;\n }\n return;\n }\n\n // Otherwise, rely on the native 'click' event bubbling from the inner\n // <button> through the shadow boundary to consumers of <ds-button>.\n // Do not re-dispatch a synthetic 'click' here to avoid duplicate events.\n }\n}\n\ndefine(\"ds-button\", Button);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-button\": Button;\n }\n}\n","/* ds-banner.css */\n/* Fixed banner component styles for notifications/alerts */\n\n:host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: calc(var(--unit) * var(--sf, 1));\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--unit) * var(--sf, 1));\n box-sizing: border-box;\n z-index: 9999;\n}\n\n:host([variant=\"warning\"]) {\n background-color: color-mix(in srgb, var(--yellow) 50%, transparent);\n --banner-text-color: color-mix(in srgb, var(--black) 50%, transparent);\n --banner-action-color: var(--slate);\n}\n\n:host([variant=\"info\"]) {\n background-color: rgba(var(--sharp-blue-rgb, 0, 122, 255), 0.7);\n --banner-text-color: var(--white, #fff);\n --banner-action-color: var(--white, #fff);\n}\n\n:host([variant=\"success\"]) {\n background-color: rgba(var(--apple-green-rgb, 52, 199, 89), 0.7);\n --banner-text-color: var(--white, #fff);\n --banner-action-color: var(--white, #fff);\n}\n\n:host([variant=\"error\"]) {\n background-color: rgba(var(--tuned-red-rgb, 255, 59, 48), 0.7);\n --banner-text-color: var(--white, #fff);\n --banner-action-color: var(--slate, #1e1e1e);\n}\n\n.text-wrapper {\n flex: 1;\n cursor: pointer;\n user-select: none;\n}\n\n.text-wrapper ds-text,\n.text-wrapper .version {\n color: var(--banner-text-color);\n}\n\n.action-wrapper {\n font-size: calc(12px * var(--sf, 1));\n}\n\n.action-wrapper a {\n color: var(--banner-action-color);\n text-decoration: none;\n font-family: var(--typeface-regular);\n font-size: calc(12px * var(--sf, 1));\n cursor: pointer;\n pointer-events: auto;\n display: inline-block;\n}\n\n.action-wrapper a:hover {\n opacity: 0.8;\n}\n\n.action-wrapper ds-text {\n color: var(--banner-action-color);\n font-family: var(--typeface-regular);\n font-size: calc(12px * var(--sf, 1));\n pointer-events: none;\n}\n","// ds-banner.ts\n// Fixed banner component for notifications/alerts\n\nimport { LitElement, html, unsafeCSS } from \"lit\";\nimport { getText } from \"../0-face/i18n.js\";\nimport \"./ds-text.js\";\nimport \"./ds-button.js\";\nimport styles from \"./styles/ds-banner.css?inline\";\n\ndeclare global {\n interface CustomElementRegistry {\n define(name: string, constructor: typeof LitElement): void;\n }\n var customElements: CustomElementRegistry;\n}\n\nexport class Banner extends LitElement {\n static properties = {\n text: { type: String },\n action: { type: String },\n href: { type: String },\n mailto: { type: String },\n subject: { type: String },\n describe: { type: String },\n appVersion: { type: String, attribute: \"app-version\" },\n variant: { type: String },\n version: { type: String },\n _showVersion: { type: Boolean, state: true },\n };\n\n text: string = \"\";\n action: string = \"\";\n href: string = \"\";\n mailto: string = \"\";\n subject: string = \"\";\n describe: string = \"\";\n appVersion: string = \"\";\n variant: string = \"warning\"; // warning, info, success, error\n version: string = \"\";\n _showVersion: boolean = false;\n\n private _boundUpdate = () => this.requestUpdate();\n\n connectedCallback() {\n super.connectedCallback();\n // Listen for translations and language changes to rebuild mailto URL\n window.addEventListener(\"translations-loaded\", this._boundUpdate);\n window.addEventListener(\"language-changed\", this._boundUpdate);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"translations-loaded\", this._boundUpdate);\n window.removeEventListener(\"language-changed\", this._boundUpdate);\n }\n\n static styles = unsafeCSS(styles);\n\n private _toggleVersion() {\n if (this.version) {\n this._showVersion = !this._showVersion;\n }\n }\n\n private _getMailtoHref(): string {\n // If a direct href is provided, use it\n if (this.href && this.href !== \"#\") return this.href;\n\n // If mailto is provided, build internationalized URL\n if (this.mailto) {\n try {\n const subject = this.subject\n ? getText(this.subject) || this.subject\n : \"Issue report\";\n const describe = this.describe\n ? getText(this.describe) || this.describe\n : \"Describe the issue:\";\n const appVersionLabel = this.appVersion\n ? getText(this.appVersion) || this.appVersion\n : \"App version:\";\n\n const body = `${describe}\\n\\n\\n${appVersionLabel} ${this.version || \"\"}`;\n\n return `mailto:${this.mailto}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;\n } catch (error) {\n // Fallback if translations fail\n return `mailto:${this.mailto}?subject=Issue%20report&body=Describe%20the%20issue%3A%0A%0A%0AApp%20version%3A%20${this.version || \"\"}`;\n }\n }\n\n return \"#\";\n }\n\n render() {\n const mailtoHref = this._getMailtoHref();\n\n return html`\n <div class=\"text-wrapper\" @click=${this._toggleVersion}>\n ${this._showVersion && this.version\n ? html`<ds-text text=${this.version}></ds-text>`\n : html`<ds-text text=${this.text}><slot></slot></ds-text>`}\n </div>\n ${this.action\n ? html`\n <div class=\"action-wrapper\">\n <a href=${mailtoHref}>\n <ds-text text=${this.action}></ds-text>\n </a>\n </div>\n `\n : \"\"}\n `;\n }\n}\n\ncustomElements.define(\"ds-banner\", Banner);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-banner\": Banner;\n }\n}\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","/* ds-icon.css */\n\n:host {\n --ds-icon-box: calc(var(--ds-icon-size, 14px) * var(--ds-sf));\n display: inline-flex;\n flex: 0 0 auto;\n justify-content: center;\n align-items: center;\n width: var(--ds-icon-box);\n height: calc(var(--ds-icon-box) / var(--ds-icon-ratio, 1));\n color: var(--ds-icon-color, currentColor);\n background: transparent;\n}\n\n:host([size=\"small\"]) {\n --ds-icon-size: 12px;\n}\n\n:host([size=\"large\"]) {\n --ds-icon-size: 16px;\n}\n\n/* An accent tile with dark ink. */\n:host([variant=\"primary\"]) {\n color: var(--ds-button-text-color-on-accent);\n background: var(--ds-accent-color);\n}\n\n/* A grey tile. */\n:host([variant=\"secondary\"]) {\n background: var(--ds-fill);\n}\n\nsvg,\n::slotted(svg),\n::slotted(img) {\n display: block;\n width: 100%;\n height: 100%;\n}\n::slotted(img) {\n object-fit: contain;\n border-radius: var(--ds-icon-radius, 0px);\n}\n","// Generated by scripts/generate-icons.ts from DS1/x-icon.\nexport const icons: Readonly<Record<string, string>> = {\n \"app\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"4.5\\\" y=\\\"2.5\\\" width=\\\"7\\\" height=\\\"11\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M6.5 11.5H9.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"apple\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M12.0351 10.793C11.8838 11.1424 11.7048 11.464 11.4974 11.7597C11.2147 12.1627 10.9832 12.4418 10.8048 12.5967C10.5283 12.851 10.232 12.9812 9.91475 12.9886C9.68698 12.9886 9.41229 12.9238 9.09255 12.7924C8.77176 12.6615 8.47695 12.5967 8.20739 12.5967C7.92469 12.5967 7.62148 12.6615 7.29717 12.7924C6.97237 12.9238 6.71071 12.9924 6.51065 12.9991C6.2064 13.0121 5.90314 12.8782 5.60044 12.5967C5.40723 12.4282 5.16557 12.1393 4.87607 11.73C4.56547 11.293 4.3101 10.7862 4.11005 10.2085C3.8958 9.58443 3.78839 8.98013 3.78839 8.39508C3.78839 7.72492 3.9332 7.14691 4.22325 6.66254C4.45121 6.27348 4.75447 5.96658 5.13403 5.74128C5.51359 5.51597 5.9237 5.40116 6.36535 5.39382C6.60701 5.39382 6.92391 5.46857 7.31773 5.61548C7.71043 5.76288 7.96259 5.83763 8.07314 5.83763C8.15579 5.83763 8.4359 5.75023 8.91077 5.57597C9.35983 5.41437 9.73883 5.34746 10.0493 5.37382C10.8906 5.44172 11.5227 5.77337 11.9431 6.37089C11.1906 6.8268 10.8184 7.46536 10.8258 8.28453C10.8326 8.9226 11.0641 9.45357 11.519 9.87516C11.7252 10.0708 11.9554 10.2221 12.2116 10.3295C12.156 10.4906 12.0974 10.6449 12.0351 10.793ZM10.1055 3.20006C10.1055 3.70017 9.92277 4.16713 9.55859 4.59933C9.11909 5.11315 8.5875 5.41005 8.01104 5.3632C8.0037 5.3032 7.99944 5.24006 7.99944 5.1737C7.99944 4.69359 8.20844 4.17978 8.5796 3.75967C8.76491 3.54696 9.00058 3.37009 9.28637 3.22901C9.57155 3.09002 9.84129 3.01316 10.095 3C10.1024 3.06686 10.1055 3.13372 10.1055 3.20006Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"archive\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M2.5 3.5H13.5V5.5H12.5V12.5H3.5V5.5H2.5Z\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M6.5 8.5H9.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"bag\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"2.5\\\" y=\\\"5.5\\\" width=\\\"11\\\" height=\\\"8\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M5.5 7.5V4.5C5.5 3.12 6.62 2 8 2C9.38 2 10.5 3.12 10.5 4.5V7.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"calendar\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"3.5\\\" y=\\\"4.5\\\" width=\\\"9\\\" height=\\\"8\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M3.5 6.5H12.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M5.5 3.5V5.5M10.5 3.5V5.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M5.5 8.5H9.5M5.5 10.5H9.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"camera\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M2.5 12.5V4.5H5.5L6.5 3.5H9.5L10.5 4.5H13.5V12.5Z\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<circle cx=\\\"8\\\" cy=\\\"8.5\\\" r=\\\"2\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<rect x=\\\"11\\\" y=\\\"6\\\" width=\\\"1\\\" height=\\\"1\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"check\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M6.68649 11.884L12.443 6.13601L11.736 5.42715L6.68835 10.4827L4.26399 8.0501L3.55696 8.74525L6.68649 11.884Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"close\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M12.1215 4.58087L8.70453 7.99397L12.1176 11.4169L11.4106 12.112L7.99847 8.69108L4.58636 12.112L3.87836 11.4031L7.29535 7.99005L3.88226 4.56716L4.58929 3.87201L8.0014 7.29294L11.4145 3.87201L12.1215 4.58087Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"collapse\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 12 12\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M2 4L6 8L10 4\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.5\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"/>\\n</svg></svg>\",\n \"compose\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M8 2.5H2.5V13.5H13.5V8\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M6.5 9.5V8L12 2.5L13.5 4L8 9.5H6.5Z\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"delete\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 12 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M1 3H11M4.5 3V1.5H7.5V3M2.5 3V12.5C2.5 13.0523 2.94772 13.5 3.5 13.5H8.5C9.05228 13.5 9.5 13.0523 9.5 12.5V3\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" fill=\\\"none\\\"/>\\n<line x1=\\\"4.5\\\" y1=\\\"5.5\\\" x2=\\\"4.5\\\" y2=\\\"11\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\"/>\\n<line x1=\\\"7.5\\\" y1=\\\"5.5\\\" x2=\\\"7.5\\\" y2=\\\"11\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\"/>\\n</svg></svg>\",\n \"down\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\">\\n <path d=\\\"M7.49645 12.5178V2.86102e-06H8.50702L8.50841 12.5174L11.4156 9.61018L12.1095 10.317L8.00173 14.4248L3.8905 10.3135L4.59784 9.60619L7.49645 12.5178Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"duplicate\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\">\\n<g id=\\\"Icons\\\">\\n<g id=\\\"Duplicate\\\">\\n<path id=\\\"âD\\\" d=\\\"M2.41924 3.49777C2.08493 3.49777 1.78024 3.57818 1.50517 3.73898C1.23434 3.90402 1.0164 4.12196 0.851364 4.39279C0.690557 4.66786 0.610153 4.97254 0.610153 5.30685C0.610153 5.63693 0.690557 5.93739 0.851364 6.20822C1.0164 6.47905 1.23434 6.69276 1.50517 6.84933C1.78024 7.01014 2.08493 7.09055 2.41924 7.09055H7.82109C8.15117 7.09055 8.45374 7.01014 8.72881 6.84933C9.00387 6.69276 9.22181 6.47905 9.38261 6.20822C9.54342 5.93739 9.62383 5.63693 9.62383 5.30685C9.62383 4.97254 9.54342 4.66786 9.38261 4.39279C9.22181 4.12196 9.00387 3.90402 8.72881 3.73898C8.45374 3.57818 8.15117 3.49777 7.82109 3.49777C7.49101 3.49777 7.18844 3.57818 6.91338 3.73898C6.64254 3.90402 6.42461 4.12196 6.25957 4.39279C6.09876 4.66786 6.01836 4.97254 6.01836 5.30685V10.677C6.01836 11.007 6.09876 11.3096 6.25957 11.5847C6.42461 11.8598 6.64254 12.0777 6.91338 12.2385C7.18844 12.4035 7.49101 12.4861 7.82109 12.4861C8.15117 12.4861 8.45374 12.4035 8.72881 12.2385C9.00387 12.0777 9.22181 11.8598 9.38261 11.5847C9.54342 11.3096 9.62383 11.007 9.62383 10.677C9.62383 10.3427 9.54342 10.0401 9.38261 9.76926C9.22181 9.49842 9.00387 9.2826 8.72881 9.1218C8.45374 8.96522 8.15117 8.88693 7.82109 8.88693H3.7205C3.58086 8.88693 3.46237 8.9356 3.36504 9.03293C3.26771 9.13026 3.21904 9.24663 3.21904 9.38205C3.21904 9.5217 3.26771 9.64019 3.36504 9.73752C3.46237 9.83485 3.58086 9.88351 3.7205 9.88351H7.80205C8.02633 9.88351 8.21676 9.95969 8.37334 10.112C8.52991 10.2686 8.6082 10.4569 8.6082 10.677C8.6082 10.897 8.52991 11.0832 8.37334 11.2356C8.22099 11.3921 8.03691 11.4704 7.82109 11.4704C7.60527 11.4704 7.41907 11.3921 7.2625 11.2356C7.10592 11.079 7.02763 10.8864 7.02763 10.6579V5.31955C7.02763 5.09527 7.10592 4.90484 7.2625 4.74826C7.41907 4.59168 7.60527 4.5134 7.82109 4.5134C8.03691 4.5134 8.22099 4.58957 8.37334 4.74191C8.52991 4.89849 8.6082 5.0868 8.6082 5.30685C8.6082 5.52691 8.52991 5.71522 8.37334 5.8718C8.21676 6.02837 8.02633 6.10666 7.80205 6.10666H2.43828C2.21399 6.10666 2.02145 6.02837 1.86064 5.8718C1.70407 5.71522 1.62578 5.52691 1.62578 5.30685C1.62578 5.0868 1.70195 4.89849 1.85429 4.74191C2.01087 4.58957 2.19918 4.5134 2.41924 4.5134C2.63082 4.5134 2.81491 4.59168 2.97148 4.74826C3.12806 4.90907 3.20634 5.0995 3.20634 5.31955V10.6579C3.20634 10.8864 3.12806 11.079 2.97148 11.2356C2.81491 11.3921 2.63082 11.4704 2.41924 11.4704C2.19918 11.4704 2.01087 11.3921 1.85429 11.2356C1.70195 11.0832 1.62578 10.897 1.62578 10.677C1.62578 10.4569 1.70407 10.2686 1.86064 10.112C2.02145 9.95969 2.21399 9.88351 2.43828 9.88351H3.7205C3.85169 9.88351 3.96595 9.83485 4.06328 9.73752C4.16061 9.64019 4.20927 9.5217 4.20927 9.38205C4.20927 9.24663 4.16061 9.13026 4.06328 9.03293C3.96595 8.9356 3.85169 8.88693 3.7205 8.88693H2.41924C2.08493 8.88693 1.78024 8.96522 1.50517 9.1218C1.23434 9.2826 1.0164 9.49842 0.851364 9.76926C0.690557 10.0401 0.610153 10.3427 0.610153 10.677C0.610153 11.007 0.690557 11.3096 0.851364 11.5847C1.0164 11.8598 1.23434 12.0777 1.50517 12.2385C1.78024 12.4035 2.08493 12.4861 2.41924 12.4861C2.74931 12.4861 3.04977 12.4035 3.3206 12.2385C3.59567 12.0777 3.8136 11.8598 3.97441 11.5847C4.13945 11.3096 4.22197 11.007 4.22197 10.677V5.30685C4.22197 4.97254 4.13945 4.66786 3.97441 4.39279C3.8136 4.12196 3.59567 3.90402 3.3206 3.73898C3.04977 3.57818 2.74931 3.49777 2.41924 3.49777Z\\\" fill=\\\"currentColor\\\" />\\n<path id=\\\"âD_2\\\" d=\\\"M10.4239 3.37692V12.6069H12.6079C14.4409 12.6069 15.3899 11.4759 15.3899 9.23992V6.89992C15.3899 4.57292 14.4279 3.37692 12.5819 3.37692H10.4239ZM12.4909 4.44292C13.4919 4.44292 13.9469 5.22292 13.9469 6.75692V9.27892C13.9469 10.8389 13.5049 11.5409 12.4909 11.5409H11.8149V4.44292H12.4909Z\\\" fill=\\\"currentColor\\\" />\\n</g>\\n</g>\\n</svg>\",\n \"email\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 11\\\" fill=\\\"none\\\">\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M14.0871 0.989435L0.930906 0.988037L0.930542 11L13.0753 11H14.0871V0.989435ZM7.50709 8.0566L1.94249 2.49201L1.94248 9.98814H13.0753V2.48839L7.50709 8.0566ZM2.85116 2L7.50709 6.65593L12.1515 1.99952L2.85116 2Z\\\" fill=\\\"currentColor\\\"/>\\n</svg></svg>\",\n \"expand\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 12 12\\\" fill=\\\"none\\\">\\n <path d=\\\"M0 5.81415V0H5.80924L5.81842 0.990424H1.70698L11.0089 10.2943L10.9997 6.18585H12V12H6.19076L6.18158 11.0096H10.293L0.99115 1.70573L1.00033 5.81415H0Z\\\" fill=\\\"currentColor\\\"/>\\n</svg></svg>\",\n \"folder\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M2.5 13.5V3.5H6.5L8 5.5H13.5V13.5Z\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"google\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M13.0004 8.11502C13.0004 7.77514 12.9723 7.43342 12.9123 7.09904H8.10071V9.02447H10.8561C10.7418 9.64542 10.3744 10.1948 9.83641 10.5438V11.7932H11.4803C12.4456 10.9223 13.0004 9.63627 13.0004 8.11502Z\\\" fill=\\\"#4285F4\\\"/>\\n<path d=\\\"M8.10074 13.0001C9.47654 13.0001 10.6368 12.5573 11.4821 11.793L9.83829 10.5437C9.38094 10.8487 8.79049 11.0214 8.10259 11.0214C6.77176 11.0214 5.64336 10.1413 5.23849 8.95818H3.54215V10.2461C4.40813 11.9345 6.17195 13.0001 8.10074 13.0001Z\\\" fill=\\\"#34A853\\\"/>\\n<path d=\\\"M5.23681 8.95856C5.02313 8.33756 5.02313 7.66515 5.23681 7.04416V5.75627H3.54234C2.81882 7.1691 2.81863 8.83323 3.54215 10.2461L5.23681 8.95856Z\\\" fill=\\\"#FBBC04\\\"/>\\n<path d=\\\"M8.10074 4.97895C8.82799 4.96793 9.53089 5.23616 10.0576 5.72854L11.514 4.30101C10.5918 3.45222 9.36784 2.98556 8.10074 3.00026C6.17195 3.00026 4.40832 4.06603 3.54234 5.75627L5.23681 7.04416C5.63981 5.85915 6.76989 4.97895 8.10074 4.97895Z\\\" fill=\\\"#EA4335\\\"/>\\n</svg>\",\n \"home\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 12 12\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M1 5L6 1L11 5V11H7.5V7.5H4.5V11H1V5Z\\\" fill=\\\"currentColor\\\"/>\\n</svg></svg>\",\n \"left\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"9\\\" viewBox=\\\"0 0 16 9\\\" fill=\\\"none\\\">\\n <path d=\\\"M1.90697 3.60594H15.0636V4.61651L1.90734 4.61791L4.81456 7.52513L4.10774 8.21898L-1.23978e-05 4.11123L4.11122 0L4.81855 0.707338L1.90697 3.60594Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"lists\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M2.5 4H13.5M2.5 8H13.5M2.5 12H13.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"lock\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M8 2.60742C9.53669 2.60746 10.7822 3.85296 10.7822 5.38965V7.64746H11.5996V13.3926H4.40039V7.64746H5.21777V5.38965C5.21779 3.85295 6.4633 2.60744 8 2.60742ZM8 3.62695C7.02663 3.62697 6.23733 4.41628 6.2373 5.38965V7.64746H9.7627V5.38965C9.76267 4.41629 8.97336 3.62699 8 3.62695Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"loop\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M12.0037 1.96826L12.0037 7.12486L14.9023 4.21328L15.6096 4.92061L11.4984 9.03184L7.39064 4.92409L8.08449 4.21727L10.9917 7.12449L10.9931 2.98673L5.00853 3.00323V1.98475L12.0037 1.96826Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M3.99657 14.0318L3.99657 8.87523L1.09796 11.7868L0.390625 11.0795L4.50185 6.96825L8.6096 11.076L7.91576 11.7828L5.00853 8.8756L5.00714 13.0134L10.9917 12.9972V14.0157L3.99657 14.0318Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M10.9917 12.9972V14.0157H12.0037V12.9973V9.85949L10.9917 9.85912V12.9972Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M3.99657 5.1225V6.14098H5.00853V5.12251V1.98475L3.99657 1.98438V5.1225Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"mic\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 10 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"2.5\\\" y=\\\"1\\\" width=\\\"5\\\" height=\\\"7\\\" rx=\\\"2.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" fill=\\\"none\\\"/>\\n<path d=\\\"M1 6C1 8.76142 2.79086 11 5 11C7.20914 11 9 8.76142 9 6\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" fill=\\\"none\\\"/>\\n<line x1=\\\"5\\\" y1=\\\"11\\\" x2=\\\"5\\\" y2=\\\"13\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\"/>\\n</svg></svg>\",\n \"more\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 12 4\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<circle cx=\\\"2\\\" cy=\\\"2\\\" r=\\\"1.5\\\" fill=\\\"currentColor\\\"/>\\n<circle cx=\\\"6\\\" cy=\\\"2\\\" r=\\\"1.5\\\" fill=\\\"currentColor\\\"/>\\n<circle cx=\\\"10\\\" cy=\\\"2\\\" r=\\\"1.5\\\" fill=\\\"currentColor\\\"/>\\n</svg></svg>\",\n \"note\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M13.9653 3.31348V12.6865H2.03467V3.31348H13.9653ZM3.03467 11.6865H12.9653V4.31348H3.03467V11.6865Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M8.00641 7.08004V7.99996H3.71344V7.08004H8.00641ZM9.9527 5.08004V5.99996H3.71344V5.08004H9.9527Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"open\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M1.96 7.81289V1.9592H7.80797L7.81721 2.95636H3.67836L13.0422 12.3235L13.033 8.18711H14.04V14.0408H8.19203L8.18279 13.0436H12.3216L2.95776 3.67653L2.967 7.81289H1.96Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"pad\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"3.5\\\" y=\\\"2.5\\\" width=\\\"9\\\" height=\\\"11\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M3.5 5.5H12.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<rect x=\\\"6\\\" y=\\\"8\\\" width=\\\"1\\\" height=\\\"1\\\" fill=\\\"currentColor\\\"/>\\n<rect x=\\\"9\\\" y=\\\"8\\\" width=\\\"1\\\" height=\\\"1\\\" fill=\\\"currentColor\\\"/>\\n<rect x=\\\"6\\\" y=\\\"11\\\" width=\\\"1\\\" height=\\\"1\\\" fill=\\\"currentColor\\\"/>\\n<rect x=\\\"9\\\" y=\\\"11\\\" width=\\\"1\\\" height=\\\"1\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"pen\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M2.5 13.5L3.5 10.5L11 3L13 5L5.5 12.5Z\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M9.5 4.5L11.5 6.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"plus\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M8.50235 2.6739L8.4996 7.5035L13.3334 7.51044L13.325 8.50193L8.49328 8.49569L8.49951 13.3274L7.49764 13.3268L7.50039 8.49717L2.66663 8.49024L2.67503 7.49875L7.50672 7.50499L7.50117 2.67261L8.50235 2.6739Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"right\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M13.1566 8.60594H0V9.61651L13.1562 9.61791L10.249 12.5251L10.9558 13.219L15.0636 9.11123L10.9524 5L10.245 5.70734L13.1566 8.60594Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"sdown\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M8.50361 11.1717L8.50222 2.92134L7.49165 2.92134L7.49165 11.1713L4.58442 8.26409L3.89058 8.97091L7.99833 13.0787L12.1096 8.96744L11.4022 8.2601L8.50361 11.1717Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"search\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M9.08545 6.62646C9.08545 5.25128 7.9704 4.13623 6.59521 4.13623C5.22003 4.13623 4.10498 5.25128 4.10498 6.62646C4.10498 8.00165 5.22003 9.1167 6.59521 9.1167C7.9704 9.1167 9.08545 8.00165 9.08545 6.62646ZM10.105 6.62646C10.105 7.39551 9.85647 8.10577 9.43701 8.68408L12.9146 12.1616L12.1929 12.8833L8.72412 9.41455C8.13339 9.86631 7.39632 10.1362 6.59521 10.1362C4.6567 10.1362 3.08545 8.56498 3.08545 6.62646C3.08545 4.68795 4.6567 3.1167 6.59521 3.1167C8.53373 3.1167 10.105 4.68795 10.105 6.62646Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"see\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M8.07669 3.70416C10.1007 3.70416 11.795 4.74149 12.9566 5.73248C13.5418 6.23179 14.005 6.72991 14.3218 7.10358C14.4804 7.29069 14.6032 7.44763 14.687 7.55865C14.7289 7.61411 14.7615 7.65861 14.7837 7.68951C14.7947 7.70477 14.8031 7.71711 14.8091 7.72565C14.812 7.72971 14.8143 7.73297 14.8159 7.73541C14.8167 7.73644 14.8174 7.73762 14.8179 7.73834L14.8189 7.73932C14.819 7.73947 14.8195 7.74054 14.4409 8.00006L14.8189 8.25983L14.8179 8.2608C14.8174 8.2616 14.8168 8.26345 14.8159 8.26471C14.8142 8.26716 14.812 8.27042 14.8091 8.27448C14.8031 8.28303 14.7947 8.29531 14.7837 8.31061C14.7615 8.34152 14.7289 8.38597 14.687 8.44147C14.6032 8.5525 14.4805 8.70941 14.3218 8.89655C14.005 9.27021 13.5418 9.76835 12.9566 10.2676C11.795 11.2586 10.1006 12.296 8.07669 12.296C6.05499 12.296 4.32326 11.2606 3.12552 10.2725C2.52184 9.77448 2.04049 9.27717 1.7095 8.90436C1.54374 8.71764 1.4147 8.56095 1.32669 8.45026C1.28274 8.39498 1.24843 8.35111 1.22513 8.32037C1.21356 8.30511 1.20507 8.29275 1.19876 8.28424C1.19566 8.28005 1.19275 8.27694 1.19095 8.27448C1.19016 8.27341 1.18952 8.27227 1.189 8.27155L1.18802 8.27057V8.26959L0.99173 8.00006L1.18802 7.73053V7.72955L1.189 7.72858C1.18953 7.72784 1.19013 7.72676 1.19095 7.72565C1.19276 7.72318 1.19563 7.72011 1.19876 7.71588C1.20506 7.70738 1.21356 7.69502 1.22513 7.67975C1.24842 7.64902 1.28277 7.6051 1.32669 7.54987C1.4147 7.43918 1.54374 7.28248 1.7095 7.09576C2.04048 6.72296 2.52183 6.22565 3.12552 5.7276C4.32326 4.73948 6.05499 3.70417 8.07669 3.70416ZM8.07669 4.62213C6.36481 4.62213 4.83715 5.50531 3.7095 6.43561C3.15087 6.8965 2.70364 7.35865 2.39603 7.70514C2.29735 7.81629 2.21535 7.91722 2.147 8.00006C2.21534 8.08289 2.29738 8.18387 2.39603 8.29498C2.70365 8.64147 3.15087 9.10363 3.7095 9.56451C4.83715 10.4948 6.36481 11.378 8.07669 11.378C9.7862 11.378 11.2738 10.4968 12.3609 9.5694C12.9 9.10949 13.3285 8.64854 13.6216 8.3028C13.7189 8.18799 13.7987 8.0844 13.8648 8.00006C13.7987 7.91573 13.7189 7.81214 13.6216 7.69733C13.3285 7.35158 12.9 6.89064 12.3609 6.43073C11.2738 5.50334 9.78624 4.62213 8.07669 4.62213ZM14.9976 8.00006L14.8199 8.25983L14.4409 8.00006L14.8199 7.7403L14.9976 8.00006Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M8.15292 5.66766C9.44109 5.66766 10.4858 6.71157 10.4859 7.99969C10.4859 9.28796 9.44119 10.3327 8.15292 10.3327C6.8648 10.3325 5.82089 9.28786 5.82089 7.99969C5.82106 6.71167 6.8649 5.66783 8.15292 5.66766Z\\\" fill=\\\"currentColor\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.81\\\"/>\\n</svg>\",\n \"shared\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<circle cx=\\\"5\\\" cy=\\\"8\\\" r=\\\"3.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<clipPath id=\\\"shared-behind\\\"><path d=\\\"M0 0H16V16H0ZM10 8A5 5 0 1 0 0 8A5 5 0 1 0 10 8Z\\\" clip-rule=\\\"evenodd\\\"/></clipPath>\\n<circle cx=\\\"11\\\" cy=\\\"8\\\" r=\\\"3.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\" clip-path=\\\"url(#shared-behind)\\\"/>\\n</svg>\",\n \"star\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M4.38604 13.4L5.77704 9.26605L2.42304 7.01705H6.53104L8.00004 2.58405L9.49504 7.01705H13.577L10.223 9.26605L11.64 13.4L8.00004 10.761L4.38604 13.4Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"stats\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M4 7V13M8 3V13M12 5V13\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"store\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"4\\\" y=\\\"4\\\" width=\\\"8\\\" height=\\\"8\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M8 4V12M4 8H12\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"sup\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M7.49658 4.82836L7.49798 13.0787L8.50855 13.0787L8.50855 4.82873L11.4158 7.73596L12.1096 7.02913L8.00187 2.92138L3.89064 7.03261L4.59798 7.73995L7.49658 4.82836Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"template\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"3.5\\\" y=\\\"2.5\\\" width=\\\"9\\\" height=\\\"11\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M5.5 6.5H9.5M5.5 8.5H9.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\",\n \"unlock\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M10.8617 2.90512C12.3984 2.90512 13.6438 4.15073 13.644 5.68735V7.95688H12.6244V5.68735C12.6243 4.71406 11.835 3.92465 10.8617 3.92465C9.88855 3.92482 9.09917 4.71417 9.09903 5.68735V7.59164H9.81583V13.3377H2.61563V7.59164H8.0795V5.68735C8.07964 4.15084 9.32522 2.90529 10.8617 2.90512ZM3.63516 12.3172H8.79532V8.61118H3.63516V12.3172Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"unmic\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"><svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 10 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"2.5\\\" y=\\\"1\\\" width=\\\"5\\\" height=\\\"7\\\" rx=\\\"2.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" fill=\\\"none\\\"/>\\n<path d=\\\"M1 6C1 8.76142 2.79086 11 5 11C7.20914 11 9 8.76142 9 6\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" fill=\\\"none\\\"/>\\n<line x1=\\\"5\\\" y1=\\\"11\\\" x2=\\\"5\\\" y2=\\\"13\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\"/>\\n<line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"9\\\" y2=\\\"13\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\"/>\\n</svg></svg>\",\n \"unsee\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M12.4541 12.789L13.1743 12.0688L12.6027 11.4967L12.6 11.4994L12.0137 10.9144C11.7332 11.103 11.4336 11.283 11.1164 11.4457L11.4068 11.7363L11.4046 11.7385L12.4541 12.789Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M5.96371 6.28857L9.79315 10.1213C10.0642 9.91923 10.2966 9.66816 10.4772 9.38122L6.69735 5.60959C6.41317 5.78931 6.16435 6.0199 5.96371 6.28857Z\\\" fill=\\\"currentColor\\\"/>\\n<path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M3.68238 4.00893L3.09583 3.42183L3.79957 2.7181L3.816 2.70167L5.35651 4.24363L6.05746 4.94524L6.712 5.6004L10.4818 9.3738L11.3559 10.2487L12.0181 10.9115L12.6027 11.4967L12.6 11.4994L12.0137 10.9144C11.7332 11.103 11.4336 11.283 11.1164 11.4457L11.4068 11.7363L11.4046 11.7385L11.1136 11.4472L10.4275 10.7604L9.79075 10.1231L5.96207 6.29078L5.08276 5.41064L4.4124 4.73965L3.68238 4.00893ZM12.6382 10.4584C12.7502 10.37 12.8582 10.2812 12.9619 10.1927C13.5472 9.69339 14.0104 9.19525 14.3271 8.82158C14.4858 8.63445 14.6085 8.47754 14.6924 8.36651C14.7343 8.31101 14.7669 8.26656 14.7891 8.23565L14.7965 8.22527L14.8089 8.20741L14.8145 8.19951L14.8213 8.18975C14.8218 8.18905 14.8222 8.18816 14.8225 8.18737L14.8232 8.18584L14.8242 8.18487L15.0029 7.9251L14.8252 7.66533L14.4463 7.9251C14.8248 7.66558 14.8243 7.66451 14.8242 7.66436L14.8232 7.66338L14.8213 7.66045L14.8145 7.65069C14.8085 7.64215 14.8 7.62981 14.7891 7.61455C14.7669 7.58365 14.7343 7.53915 14.6924 7.48369C14.6085 7.37267 14.4858 7.21573 14.3271 7.02862C14.0104 6.65495 13.5472 6.15682 12.9619 5.65752C11.8003 4.66652 10.106 3.6292 8.08203 3.6292C7.38933 3.6292 6.73067 3.75074 6.11587 3.95029L6.86093 4.69373C7.25481 4.60011 7.6629 4.54717 8.08203 4.54717C9.79158 4.54717 11.2792 5.42838 12.3662 6.35576C12.9053 6.81567 13.3338 7.27662 13.627 7.62237C13.7119 7.72259 13.7835 7.81425 13.8443 7.89203L13.8701 7.9251L13.8442 7.95828C13.7834 8.03603 13.7119 8.12766 13.627 8.22783C13.3338 8.57358 12.9053 9.03452 12.3662 9.49444C12.2436 9.599 12.116 9.70298 11.9835 9.80517L12.6382 10.4584ZM5.58478 6.99004L9.09135 10.4996C8.80023 10.6051 8.48611 10.6626 8.15857 10.6626C6.64663 10.6626 5.42096 9.43698 5.42096 7.92504C5.42096 7.59666 5.47878 7.28179 5.58478 6.99004ZM10.371 11.7804L9.65051 11.0593C9.15436 11.2126 8.62958 11.303 8.08203 11.303C6.37015 11.303 4.84249 10.4199 3.71484 9.48955C3.15622 9.02867 2.70899 8.56651 2.40137 8.22002C2.31556 8.12337 2.24231 8.03438 2.17972 7.95834L2.15234 7.9251L2.17972 7.89186C2.24231 7.81582 2.31553 7.72686 2.40137 7.63018C2.70898 7.28369 3.15621 6.82154 3.71484 6.36065C3.93564 6.17849 4.17177 5.99814 4.42162 5.82588L3.76309 5.16678C3.53867 5.32681 3.32756 5.49036 3.13086 5.65264C2.52717 6.15069 2.04582 6.648 1.71484 7.0208C1.54908 7.20752 1.42004 7.36421 1.33203 7.4749C1.28811 7.53014 1.25376 7.57406 1.23047 7.60479C1.22314 7.61446 1.21704 7.62297 1.21196 7.63006L1.2041 7.64092C1.20236 7.64328 1.20069 7.64527 1.19925 7.647L1.19629 7.65069L1.19434 7.65362L1.19336 7.65557L0.99707 7.9251L1.19336 8.19561L1.19434 8.19658L1.19629 8.19951L1.19926 8.20322C1.20071 8.20495 1.20238 8.20695 1.2041 8.20928L1.21195 8.22013C1.21704 8.22723 1.22314 8.23575 1.23047 8.24541C1.25377 8.27615 1.28809 8.32002 1.33203 8.3753C1.42004 8.48598 1.54908 8.64268 1.71484 8.8294C2.04583 9.20221 2.52718 9.69952 3.13086 10.1976C4.3286 11.1857 6.06033 12.221 8.08203 12.221C8.90391 12.221 9.67144 12.0499 10.371 11.7804ZM10.8048 8.62904C10.8644 8.4044 10.8962 8.16843 10.8962 7.92504C10.8962 6.4131 9.6705 5.18743 8.15857 5.18743C7.91309 5.18743 7.67517 5.21974 7.44881 5.28033L10.8048 8.62904ZM9.79315 10.1213L5.96371 6.28857C6.16435 6.0199 6.41317 5.78931 6.69735 5.60959L10.4772 9.38122C10.2966 9.66816 10.0642 9.91923 9.79315 10.1213Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"unstar\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M10.1972 12.3545L7.99995 10.7617L4.3857 13.4014L5.7773 9.2666L2.42281 7.01758H4.86031L10.1972 12.3545Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M13.039 12.6807L12.3193 13.4014L2.96089 4.03418L3.68062 3.31348L13.039 12.6807Z\\\" fill=\\\"currentColor\\\"/>\\n<path d=\\\"M9.49507 7.01758H13.5771L10.5205 9.06738L7.01363 5.56055L7.99995 2.58496L9.49507 7.01758Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"up\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path d=\\\"M7.49645 3.48222V16H8.50702L8.50841 3.48259L11.4156 6.38982L12.1095 5.68299L8.00173 1.57524L3.8905 5.68647L4.59784 6.39381L7.49645 3.48222Z\\\" fill=\\\"currentColor\\\"/>\\n</svg>\",\n \"views\": \"<svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<circle cx=\\\"7\\\" cy=\\\"7\\\" r=\\\"4.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n<path d=\\\"M10.2 10.2L13.5 13.5\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"0.92\\\"/>\\n</svg>\"\n}\nexport const deferredIconNames = [\"1x\",\"1xdots\",\"1xgrid\",\"1xlines\",\"2x\",\"2xdots\",\"2xgrid\",\"2xgrid-alt\",\"2xgrid-alt-2\",\"2xgrid-alt-3\",\"2xlines\",\"4x4\",\"archive-alt\",\"arrange-archive\",\"arrange-check\",\"arrange-chevron\",\"arrange-connect\",\"arrange-draft\",\"arrange-dropdown\",\"arrange-home\",\"arrange-link\",\"arrange-menu\",\"arrange-more\",\"arrange-page\",\"arrange-plus\",\"arrange-site\",\"avatar\",\"badge-bands\",\"badge-bands-3d\",\"badge-blue-fan\",\"badge-blue-fan-3d\",\"badge-bricks\",\"badge-bricks-3d\",\"badge-broken-stripes\",\"badge-broken-stripes-3d\",\"badge-checker\",\"badge-checker-3d\",\"badge-diamond\",\"badge-diamond-3d\",\"badge-fan\",\"badge-fan-3d\",\"badge-fan-dark\",\"badge-fan-dark-3d\",\"badge-halves\",\"badge-halves-3d\",\"badge-halves-green\",\"badge-halves-green-3d\",\"badge-red\",\"badge-red-3d\",\"badge-red-blue-bricks\",\"badge-red-blue-bricks-3d\",\"badge-round-fan\",\"badge-round-fan-3d\",\"badge-shard\",\"badge-shard-3d\",\"badge-split-circle\",\"badge-split-circle-3d\",\"badge-tall-bricks\",\"badge-tall-bricks-3d\",\"badge-weave\",\"badge-weave-3d\",\"block-accordion\",\"block-banner\",\"block-breadcrumbs\",\"block-button\",\"block-divider\",\"block-forms\",\"block-group\",\"block-heading\",\"block-image\",\"block-logo-marquee\",\"block-page-progress\",\"block-section\",\"block-table\",\"block-tabs\",\"block-text\",\"bold\",\"bullet\",\"callout\",\"categories\",\"check-alt\",\"code\",\"code-block\",\"color\",\"column\",\"comment\",\"connect\",\"content\",\"default\",\"dictate\",\"divider\",\"equation\",\"exercise\",\"ezo-accordion-chevron\",\"ezo-account-close\",\"ezo-android-screen-archive\",\"ezo-android-screen-calendar\",\"ezo-android-screen-camera\",\"ezo-android-screen-check\",\"ezo-android-screen-compose\",\"ezo-android-screen-globe\",\"ezo-android-screen-lists\",\"ezo-android-screen-shared\",\"ezo-android-screen-stats\",\"ezo-android-screen-store\",\"ezo-android-screen-views\",\"ezo-android-screen-work\",\"ezo-arrow-cursor\",\"ezo-block-accordion\",\"ezo-block-divider\",\"ezo-block-group\",\"ezo-block-image\",\"ezo-block-section\",\"ezo-block-table\",\"ezo-code\",\"ezo-down\",\"ezo-figma-premium-star\",\"ezo-item-button-complete\",\"ezo-item-button-header\",\"ezo-item-button-open\",\"ezo-item-button-reopen\",\"ezo-item-button-star\",\"ezo-item-button-start\",\"ezo-item-button-unheader\",\"ezo-item-button-unstar\",\"ezo-item-star\",\"ezo-left\",\"ezo-logo\",\"ezo-mic\",\"ezo-move-column\",\"ezo-move-row\",\"ezo-navigation-check\",\"ezo-note-back\",\"ezo-note-menu-complete\",\"ezo-note-menu-delete\",\"ezo-note-menu-duplicate\",\"ezo-note-menu-note\",\"ezo-note-menu-page\",\"ezo-note-menu-star\",\"ezo-note-menu-start\",\"ezo-note-menu-stop\",\"ezo-note-more\",\"ezo-note-star\",\"ezo-password-visibility-see\",\"ezo-password-visibility-unsee\",\"ezo-pattern-call-to-action\",\"ezo-play\",\"ezo-premium-star\",\"ezo-setting-1xdots\",\"ezo-setting-1xgrid\",\"ezo-setting-1xlines\",\"ezo-setting-2xdots\",\"ezo-setting-2xgrid\",\"ezo-setting-2xlines\",\"ezo-setting-blank\",\"ezo-store-chevron\",\"ezo-upgrade-close\",\"form\",\"gallery\",\"globe\",\"group\",\"group-alt\",\"group-alt-2\",\"h1\",\"h2\",\"h3\",\"handle\",\"head\",\"help\",\"help-alt\",\"icon\",\"image\",\"in\",\"indent\",\"italic\",\"item\",\"life\",\"link\",\"list-line\",\"lock-filled\",\"logo-marquee\",\"mention\",\"menu\",\"minimize\",\"minimize-alt\",\"money\",\"navigation-check\",\"note-alt\",\"note-alt-2\",\"note-lines\",\"notifications\",\"numbered\",\"open-alt\",\"open-source\",\"outdent\",\"page\",\"page-18\",\"page-alt\",\"page-note\",\"panel\",\"pattern-call-to-action\",\"pattern-card\",\"pattern-feature\",\"pattern-hero\",\"play-alt\",\"quote\",\"redo\",\"relationships\",\"rewind\",\"rewind-30\",\"rewind-30-alt\",\"row\",\"school\",\"search-30\",\"see-30\",\"settings\",\"slash\",\"star-alt\",\"star-alt-2\",\"status\",\"status-alt\",\"status-filled\",\"strike\",\"table\",\"templates\",\"text\",\"title\",\"titlestyle\",\"todo\",\"toggle\",\"triangle\",\"underline\",\"undo\",\"ungroup\",\"unhead\",\"unicon\",\"untitle\",\"up-right\",\"warning\",\"work\"] as const\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport styles from \"./styles/ds-icon.css?inline\";\nimport type { IconName } from \"./generated/ds-icon-map\";\nimport { icons as immediateIcons, deferredIconNames } from \"./generated/icons-immediate\";\nimport { define } from \"../0-face/define\";\n\nconst iconNameToSvgMap: Record<string, string> = { ...immediateIcons }\nconst deferred = new Set<string>(deferredIconNames)\nlet extraReady = false\nlet extraLoading: Promise<void> | undefined\nfunction loadExtraIcons(): Promise<void> {\n return (extraLoading ??= import('./generated/icons-extra')\n .then(({ icons }) => {\n Object.assign(iconNameToSvgMap, icons)\n extraReady = true\n })\n .catch((error) => {\n extraLoading = undefined\n throw error\n }))\n}\n\n\n/**\n * The ink an icon was drawn in, whatever the file happens to say.\n *\n * DS one's icons are exported with the design's own dark ink baked into every\n * path — #1E1E1E, #2A2A2A, plain black — so on dark paper they disappear. A\n * one-colour icon is turned over to `currentColor` here, where the component\n * puts it on the page, so it takes the colour of the text around it.\n *\n * An icon with colours of its own is left exactly as drawn. Consistency's block\n * and pattern tiles set dark ink on a coloured ground, and a brand mark keeps\n * the colours that make it that brand. `white` never counts as a colour: in\n * this set it is the rectangle inside a `<clipPath>`.\n */\nconst INK = /(fill|stroke)=(\"|')(#1E1E1E|#2A2A2A|#000000|#000|black)\\2/gi;\nconst PAINT = /(?:fill|stroke)=(\"|')([^\"']+)\\1/gi;\nconst NOT_A_COLOUR = /^(none|currentColor|white|#fff|#ffffff|url\\(.*\\))$/i;\nconst INK_VALUE = /^(#1E1E1E|#2A2A2A|#000000|#000|black)$/i;\n\nconst themed = new Map<string, string>();\n\nfunction hasOwnColours(svg: string): boolean {\n for (const [, , value] of svg.matchAll(PAINT)) {\n if (!NOT_A_COLOUR.test(value) && !INK_VALUE.test(value)) return true;\n }\n return false;\n}\n\nexport function themeIconSvg(svg: string): string {\n const known = themed.get(svg);\n if (known !== undefined) return known;\n const next = hasOwnColours(svg) ? svg : svg.replace(INK, '$1=\"currentColor\"');\n themed.set(svg, next);\n return next;\n}\n\nexport type IconVariant = \"glyph\" | \"primary\" | \"secondary\";\n\n/**\n * Icon component that renders SVG icons from the design system icon set.\n *\n * Usage:\n * <ds-icon type=\"close\"></ds-icon>\n * <ds-icon type=\"home\" variant=\"primary\"></ds-icon>\n *\n * Variants:\n * - glyph (default): No background, inherits text color. Like text.\n * - primary: Accent color background with contrasting icon color.\n * - secondary: Subtle background with icon color.\n *\n * An icon that is not in the set can be given as content instead:\n * <ds-icon><svg>…</svg></ds-icon>\n *\n * Size is `--ds-icon-size` (14px by default) times `--ds-sf`; `size=\"small\"`\n * draws it at 12px and `size=\"large\"` at 16px. Colour is `--ds-icon-color`,\n * which follows the text.\n */\nexport class Icon extends LitElement {\n static properties = {\n type: { type: String, reflect: true },\n variant: { type: String, reflect: true },\n size: { type: String, reflect: true },\n };\n\n private _type: IconName | \"\" = \"\";\n private _iconsReady: Promise<void> | undefined;\n private _failedType: string | undefined;\n declare variant: IconVariant;\n declare size: \"small\" | \"large\" | undefined;\n\n constructor() {\n super();\n this.variant = \"glyph\";\n }\n\n get type(): IconName | \"\" {\n return this._type;\n }\n\n set type(val: IconName | \"\") {\n const oldVal = this._type;\n this._type = val;\n this.requestUpdate(\"type\", oldVal);\n }\n\n /** Awaiting an icon also waits for its requested artwork and final render. */\n protected async getUpdateComplete(): Promise<boolean> {\n await super.getUpdateComplete()\n await this._iconsReady\n return super.getUpdateComplete()\n }\n\n static styles = unsafeCSS(styles);\n\n render() {\n if (!this._type) {\n return html`<slot></slot>`;\n }\n\n const svg = iconNameToSvgMap[this._type.toLowerCase() as IconName];\n if (svg) {\n return html`${unsafeHTML(themeIconSvg(svg))}`;\n }\n\n if (\n !extraReady &&\n deferred.has(this._type.toLowerCase()) &&\n !this._iconsReady &&\n this._failedType !== this._type\n ) {\n const requested = this._type\n this._iconsReady = loadExtraIcons()\n .then(() => {\n this._failedType = undefined\n this.requestUpdate()\n })\n .catch(() => {\n this._failedType = requested\n })\n .finally(() => {\n this._iconsReady = undefined\n })\n }\n\n // Fallback to slot if icon not found\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-icon\", Icon);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-icon\": Icon;\n }\n}\n\nexport type { IconName };\n","@import \"../../1-root/component-metrics.css\";\n\n:host { display: inline-flex; flex: 0 0 auto; min-width: 0; max-width: 100%; vertical-align: middle; }\n:host([hidden]) { display: none !important; }\n.frame {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n gap: calc(4px * var(--ds-sf));\n height: var(--ds-row-height);\n min-width: var(--ds-row-height);\n max-width: 100%;\n padding-inline: calc(4px * var(--ds-sf));\n background: var(--ds-badge-background, var(--ds-fill));\n color: var(--ds-badge-color, var(--ds-text-color));\n font-family: var(--ds-typeface-regular);\n font-feature-settings: var(--ds-font-features);\n font-size: var(--ds-type-size-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n}\n.label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\nds-icon { flex: 0 0 auto; }\n.icon-only { position: relative; width: var(--ds-row-height); padding: 0; justify-content: center; }\n/* Keep the words available to assistive technology when only the icon fits. */\n.icon-only .label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport \"./ds-icon\";\nimport styles from \"./styles/ds-badge.css?inline\";\n\n/** A noninteractive status label. Products own its words and status meaning. */\nexport class Badge extends LitElement {\n static properties = {\n icon: { type: String },\n iconOnly: { type: Boolean, attribute: \"icon-only\", reflect: true },\n };\n static styles = unsafeCSS(styles);\n declare icon: string;\n declare iconOnly: boolean;\n private observer?: ResizeObserver;\n private contentObserver?: MutationObserver;\n private measureFrame = 0;\n\n constructor() { super(); this.icon = \"\"; this.iconOnly = false; }\n\n connectedCallback() {\n super.connectedCallback();\n this.updateComplete.then(() => {\n if (!this.isConnected) return;\n this.contentObserver?.disconnect();\n this.contentObserver = new MutationObserver(this.scheduleMeasure);\n this.contentObserver.observe(this, {childList: true, subtree: true, characterData: true});\n if (typeof ResizeObserver !== \"undefined\") {\n this.observer?.disconnect();\n this.observer = new ResizeObserver(this.scheduleMeasure);\n this.observer.observe(this);\n this.observer.observe(this.shadowRoot!.querySelector(\".label\")!);\n }\n document.fonts?.ready.then(this.scheduleMeasure);\n document.fonts?.addEventListener(\"loadingdone\", this.scheduleMeasure);\n this.scheduleMeasure();\n });\n }\n\n disconnectedCallback() {\n this.observer?.disconnect();\n this.contentObserver?.disconnect();\n document.fonts?.removeEventListener(\"loadingdone\", this.scheduleMeasure);\n cancelAnimationFrame(this.measureFrame);\n this.measureFrame = 0;\n super.disconnectedCallback();\n }\n\n updated() { this.scheduleMeasure(); }\n private scheduleMeasure = () => {\n if (!this.isConnected || this.measureFrame) return;\n this.measureFrame = requestAnimationFrame(() => {\n this.measureFrame = 0;\n const frame = this.shadowRoot!.querySelector<HTMLElement>(\".frame\")!;\n if (this.iconOnly && this.icon) { frame.style.removeProperty(\"width\"); return; }\n const unit = frame.getBoundingClientRect().height;\n if (!unit) return;\n const label = this.shadowRoot!.querySelector<HTMLElement>(\".label\")!;\n const icon = this.shadowRoot!.querySelector(\"ds-icon\");\n const styles = getComputedStyle(frame);\n const natural = label.scrollWidth + parseFloat(styles.paddingLeft) + parseFloat(styles.paddingRight)\n + (icon ? icon.getBoundingClientRect().width + parseFloat(styles.columnGap) : 0);\n const width = `${Math.max(1, Math.ceil(natural / unit)) * unit}px`;\n if (frame.style.width !== width) frame.style.width = width;\n });\n };\n\n render() {\n const iconOnly = this.iconOnly && !!this.icon;\n return html`<span class=${iconOnly ? \"frame icon-only\" : \"frame\"} part=\"frame\">\n ${this.icon ? html`<ds-icon .type=${this.icon} aria-hidden=\"true\"></ds-icon>` : null}\n <span class=\"label\"><slot @slotchange=${this.scheduleMeasure}></slot></span>\n </span>`;\n }\n}\ndefine(\"ds-badge\", Badge);\ndeclare global { interface HTMLElementTagNameMap { \"ds-badge\": Badge } }\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n --ds-choice-unit: calc(var(--ds-1) * var(--ds-sf));\n display: inline-flex;\n flex: 0 0 auto;\n vertical-align: middle;\n width: var(--ds-choice-unit);\n height: var(--ds-choice-unit);\n}\n:host([hidden]) { display: none !important; }\n::slotted(input[type=\"checkbox\"]) {\n appearance: none !important;\n box-sizing: border-box !important;\n display: grid !important;\n place-items: center !important;\n width: 100% !important;\n min-width: 0 !important;\n height: 100% !important;\n min-height: 0 !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 1px solid var(--ds-border-color) !important;\n border-radius: var(--ds-radius) !important;\n corner-shape: var(--ds-corner-shape, round) !important;\n background: var(--ds-input-background) !important;\n color: var(--ds-button-text-color-on-accent) !important;\n box-shadow: none !important;\n cursor: pointer !important;\n}\n::slotted(input:checked), ::slotted(input:indeterminate) { background: var(--ds-accent-color) !important; }\n::slotted(input)::before {\n content: \"\";\n width: calc(.8 * var(--ds-choice-unit));\n height: calc(.8 * var(--ds-choice-unit));\n background: currentColor;\n mask: var(--ds-checkbox-mark) center / contain no-repeat;\n opacity: 0;\n}\n::slotted(input:checked)::before { opacity: 1; }\n::slotted(input:indeterminate)::before {\n width: calc(var(--ds-choice-unit) / 2);\n height: calc(2px * var(--ds-sf));\n mask: none;\n opacity: 1;\n}\n::slotted(input:focus-visible) { outline: 2px solid var(--ds-focus-ring) !important; outline-offset: 1px !important; }\n::slotted(input:disabled) { cursor: default !important; opacity: .5 !important; }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport check from \"../x-icon/check.svg?raw\";\nimport styles from \"./styles/ds-checkbox.css?inline\";\n\n/** A shared checkbox face around a native input, including forms, labels and reset. */\nexport class Checkbox extends LitElement {\n static styles = [unsafeCSS(styles), unsafeCSS(`:host { --ds-checkbox-mark: url(\"data:image/svg+xml,${encodeURIComponent(check)}\"); }`)];\n focus(options?: FocusOptions) { this.querySelector<HTMLInputElement>(\":scope > input\")?.focus(options); }\n render() { return html`<slot></slot>`; }\n}\n\ndefine(\"ds-checkbox\", Checkbox);\ndeclare global { interface HTMLElementTagNameMap { \"ds-checkbox\": Checkbox } }\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n display: inline-flex;\n position: relative;\n flex: 0 0 auto;\n vertical-align: middle;\n width: var(--ds-unit);\n height: var(--ds-unit);\n}\n:host([hidden]) { display: none !important; }\n::slotted(input[type=\"radio\"]) {\n appearance: none !important;\n box-sizing: border-box !important;\n display: grid !important;\n place-items: center !important;\n width: 100% !important;\n min-width: 0 !important;\n height: 100% !important;\n min-height: 0 !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 1px solid var(--ds-border-color) !important;\n border-radius: 50% !important;\n background: var(--ds-input-background) !important;\n color: var(--ds-text-color) !important;\n box-shadow: none !important;\n cursor: pointer !important;\n}\n::slotted(input[hidden]) { display: none !important; }\n::slotted(input)::before {\n content: \"\";\n width: calc(var(--ds-unit) / 2);\n height: calc(var(--ds-unit) / 2);\n border-radius: 50%;\n background: currentColor;\n opacity: 0;\n}\n::slotted(input:checked)::before { opacity: 1; }\n::slotted(input:focus-visible) { outline: 2px solid var(--ds-focus-ring) !important; outline-offset: 1px !important; }\n::slotted(input:disabled) { cursor: default !important; opacity: .5 !important; }\n\n:host([choice]) { width: calc(4 * var(--ds-unit)); }\n:host([choice][compact]) { width: var(--ds-unit); }\n:host([choice][preview]) { height: calc(3 * var(--ds-unit)); }\n:host([choice]) ::slotted(input) {\n position: absolute !important;\n inset: 0 !important;\n opacity: 1 !important;\n border-radius: var(--ds-radius) !important;\n background: transparent !important;\n z-index: 1;\n}\n:host([choice]) ::slotted(input)::before { display: none; }\n:host([choice]) ::slotted(input:checked) { border-color: var(--ds-text-color) !important; }\n:host([choice]) ::slotted(input:disabled) { background: color-mix(in srgb, var(--ds-paper) 60%, transparent) !important; }\n.face {\n display: grid;\n grid-template-rows: minmax(0, 1fr);\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: hidden;\n border: 1px solid transparent;\n border-radius: var(--ds-radius);\n background: var(--ds-input-background);\n color: var(--ds-text-color);\n pointer-events: none;\n}\n:host([preview]) .face { grid-template-rows: minmax(0, 1fr) calc(var(--ds-unit) - 1px); }\n.preview { display: grid; min-height: 0; overflow: hidden; }\n::slotted([slot=\"preview\"]) { display: block; width: 100%; height: 100%; min-width: 0; min-height: 0; }\n.label {\n align-self: center;\n overflow: hidden;\n padding-inline: calc(4px * var(--ds-sf));\n font: 400 var(--ds-type-size-default) / var(--ds-type-lineheight-default) var(--ds-typeface-regular);\n letter-spacing: var(--ds-type-letterspacing-default);\n white-space: nowrap;\n text-align: center;\n text-overflow: ellipsis;\n}\n:host([compact]) .label { padding-inline: 0; }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport styles from \"./styles/ds-radio.css?inline\";\n\n/** Native radios keep their group, keyboard, labels and form. DS1 owns the face. */\nexport class Radio extends LitElement {\n static properties = {\n choice: { type: Boolean, reflect: true },\n compact: { type: Boolean, reflect: true },\n preview: { type: Boolean, reflect: true },\n label: { type: String },\n };\n static styles = unsafeCSS(styles);\n declare choice: boolean;\n declare compact: boolean;\n declare preview: boolean;\n declare label: string;\n constructor() { super(); this.choice = false; this.compact = false; this.preview = false; this.label = \"\"; }\n focus(options?: FocusOptions) { this.querySelector<HTMLInputElement>(\":scope > input\")?.focus(options); }\n render() {\n return html`<slot></slot>${this.choice ? html`<span class=\"face\" aria-hidden=\"true\">${this.preview ? html`<span class=\"preview\"><slot name=\"preview\"></slot></span>` : null}<span class=\"label\">${this.label}</span></span>` : null}`;\n }\n}\ndefine(\"ds-radio\", Radio);\ndeclare global { interface HTMLElementTagNameMap { \"ds-radio\": Radio } }\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n --ds-choice-unit: calc(var(--ds-1) * var(--ds-sf));\n display: inline-flex;\n flex: 0 0 auto;\n vertical-align: middle;\n width: calc(2 * var(--ds-choice-unit));\n height: var(--ds-choice-unit);\n}\n:host([hidden]) { display: none !important; }\n::slotted(button) {\n appearance: none !important;\n box-sizing: border-box !important;\n position: relative !important;\n display: block !important;\n width: 100% !important;\n min-width: 0 !important;\n height: 100% !important;\n min-height: 0 !important;\n padding: calc(2px * var(--ds-sf)) !important;\n margin: 0 !important;\n border: 0 !important;\n border-radius: var(--ds-radius) !important;\n corner-shape: var(--ds-corner-shape, round) !important;\n background: var(--ds-fill) !important;\n color: var(--ds-text-color-muted) !important;\n box-shadow: none !important;\n cursor: pointer !important;\n touch-action: manipulation;\n}\n::slotted(button)::after {\n content: \"\";\n display: block;\n width: calc(var(--ds-choice-unit) - 4px * var(--ds-sf));\n height: 100%;\n border-radius: var(--ds-radius);\n corner-shape: var(--ds-corner-shape, round);\n background: currentColor;\n transform: translateX(0);\n transition: transform 140ms ease;\n}\n::slotted(button[aria-checked=\"true\"]) {\n background: var(--ds-accent-color) !important;\n color: var(--ds-button-text-color-on-accent) !important;\n}\n::slotted(button[aria-checked=\"true\"])::after { transform: translateX(var(--ds-choice-unit)); }\n::slotted(button:focus-visible) { outline: 2px solid var(--ds-focus-ring) !important; outline-offset: 1px !important; }\n::slotted(button:disabled) { cursor: default !important; opacity: .5 !important; }\n@media (prefers-reduced-motion: reduce) { ::slotted(button)::after { transition: none; } }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport styles from \"./styles/ds-switch.css?inline\";\n\n/** The shared switch face. The slotted button retains native activation and refs. */\nexport class Switch extends LitElement {\n static styles = unsafeCSS(styles);\n focus(options?: FocusOptions) { this.querySelector<HTMLButtonElement>(\":scope > button\")?.focus(options); }\n render() { return html`<slot></slot>`; }\n}\n\ndefine(\"ds-switch\", Switch);\ndeclare global { interface HTMLElementTagNameMap { \"ds-switch\": Switch } }\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n display: inline-flex;\n flex: none;\n align-items: stretch;\n height: var(--ds-control-height);\n gap: 1px;\n vertical-align: bottom;\n}\n:host([hidden]) { display: none; }\n\nbutton {\n appearance: none;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--ds-control-height);\n margin: 0;\n padding: 0 calc(5px * var(--ds-sf));\n border: 0;\n border-radius: 0;\n corner-shape: var(--ds-corner-shape, round);\n background: var(--ds-button-background-color-secondary);\n color: var(--ds-text-color-muted);\n font-family: var(--ds-typeface-regular);\n font-feature-settings: var(--ds-font-features);\n font-size: var(--ds-type-size-default);\n font-weight: var(--ds-type-weight-default);\n line-height: var(--ds-control-height);\n letter-spacing: var(--ds-type-letterspacing-default);\n white-space: nowrap;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\nbutton:first-child {\n border-start-start-radius: var(--ds-radius);\n border-end-start-radius: var(--ds-radius);\n}\nbutton:last-child {\n border-start-end-radius: var(--ds-radius);\n border-end-end-radius: var(--ds-radius);\n}\nbutton[data-icon] { width: var(--ds-control-height); padding: 0; }\nds-icon { --ds-icon-size: 16px; color: inherit; }\nds-text { color: inherit; }\n/* Compact numeric views: a single digit is a square; longer values use the\n shared compressed face and smaller inset. Products supply only the labels. */\n:host([compact]) button:not([data-icon], [data-short]) {\n --ds-typeface-regular: var(--ds-typeface-compressed);\n padding-inline: calc(3px * var(--ds-sf));\n}\n:host([compact]) button[data-short] { width: var(--ds-control-height); padding: 0; }\nbutton:hover:not(:disabled, [aria-pressed=\"true\"]) { color: var(--ds-text-color); }\nbutton[aria-pressed=\"true\"] {\n background: var(--ds-accent-color);\n color: var(--ds-button-text-color-on-accent);\n cursor: default;\n}\nbutton:disabled { cursor: default; opacity: 0.5; }\nbutton:focus-visible { outline: 1px solid currentColor; outline-offset: -2px; }\n","import { LitElement, html, nothing, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport { getText } from \"../0-face/i18n\";\nimport \"./ds-icon\";\nimport \"./ds-text\";\nimport styles from \"./styles/ds-split.css?inline\";\n\nexport interface SplitSegment<T extends string = string> {\n value: T;\n label: string;\n icon?: string;\n disabled?: boolean;\n}\n\n/** A compact group of choices or repeated actions, sharing outside corners.\n * `change` requests a choice; preventDefault keeps the current value. `press`\n * reports every activation in actions mode. Neither mode submits a form.\n */\nexport class Split extends LitElement {\n static formAssociated = true;\n static properties = {\n options: { type: String },\n segments: { attribute: false },\n value: { type: String, reflect: true },\n disabled: { type: Boolean, reflect: true },\n actions: { type: Boolean, reflect: true },\n literal: { type: Boolean, reflect: true },\n compact: { type: Boolean, reflect: true },\n _fieldsetDisabled: { state: true },\n };\n\n declare options: string;\n declare segments: ReadonlyArray<SplitSegment> | undefined;\n declare value: string;\n declare disabled: boolean;\n declare actions: boolean;\n declare literal: boolean;\n declare compact: boolean;\n declare private _fieldsetDisabled: boolean;\n\n constructor() {\n super();\n // Association supplies native disabled-fieldset behavior, without adding\n // a form value or making an action button into a submitter.\n if (typeof this.attachInternals === \"function\") this.attachInternals();\n this.options = \"\";\n this.value = \"\";\n this.disabled = false;\n this.actions = false;\n this.literal = false;\n this.compact = false;\n this._fieldsetDisabled = false;\n }\n\n static styles = unsafeCSS(styles);\n private languageChanged = () => this.requestUpdate();\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"group\");\n window.addEventListener(\"language-changed\", this.languageChanged);\n window.addEventListener(\"translations-loaded\", this.languageChanged);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"language-changed\", this.languageChanged);\n window.removeEventListener(\"translations-loaded\", this.languageChanged);\n }\n\n formDisabledCallback(disabled: boolean) { this._fieldsetDisabled = disabled; }\n\n /** String convenience for HTML: day:Day,back:@left:Back. Use segments for\n * labels containing commas/colons, translated product labels or disabling\n * individual actions. An explicit empty array renders no choices.\n */\n private get choices(): ReadonlyArray<SplitSegment> {\n return this.segments ?? this.options.split(\",\").map(part => part.trim()).filter(Boolean).map(part => {\n const colon = part.indexOf(\":\");\n if (colon < 0) return { value: part.toLowerCase(), label: part };\n const value = part.slice(0, colon).trim();\n const label = part.slice(colon + 1).trim();\n if (!label.startsWith(\"@\")) return { value, label };\n const end = label.indexOf(\":\");\n return { value, icon: label.slice(1, end < 0 ? undefined : end).trim(), label: end < 0 ? value : label.slice(end + 1).trim() };\n });\n }\n\n private press(segment: SplitSegment) {\n if (this.disabled || this._fieldsetDisabled || segment.disabled) return;\n if (this.actions) {\n this.dispatchEvent(new CustomEvent(\"press\", { detail: { value: segment.value }, bubbles: true, composed: true }));\n } else if (segment.value !== this.value) {\n const accepted = this.dispatchEvent(new CustomEvent(\"change\", {\n detail: { value: segment.value }, bubbles: true, composed: true, cancelable: true,\n }));\n if (accepted) this.value = segment.value;\n }\n }\n\n focus(options?: FocusOptions) {\n const buttons = [...this.renderRoot.querySelectorAll<HTMLButtonElement>(\"button:not(:disabled)\")];\n (buttons.find(button => button.getAttribute(\"aria-pressed\") === \"true\") ?? buttons[0])?.focus(options);\n }\n\n render() {\n return html`${this.choices.map(segment => html`<button\n type=\"button\" part=\"segment\" value=${segment.value}\n aria-pressed=${this.actions ? nothing : String(segment.value === this.value)}\n aria-label=${segment.icon ? (this.literal ? segment.label : getText(segment.label)) : nothing}\n ?data-icon=${!!segment.icon}\n ?data-short=${segment.label.length === 1}\n ?disabled=${this.disabled || this._fieldsetDisabled || segment.disabled}\n @click=${() => this.press(segment)}\n >${segment.icon\n ? html`<ds-icon type=${segment.icon} aria-hidden=\"true\"></ds-icon>`\n : html`<ds-text .text=${segment.label} .literal=${this.literal}></ds-text>`}</button>`)}`;\n }\n}\n\ndefine(\"ds-split\", Split);\ndeclare global { interface HTMLElementTagNameMap { \"ds-split\": Split } }\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n --ds-select-unit: calc(var(--ds-1) * var(--ds-sf));\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n width: calc(8 * var(--ds-select-unit));\n max-width: 100%;\n min-width: 0;\n height: calc(var(--ds-select-rows, 1) * var(--ds-select-unit));\n}\n:host([hidden]) { display: none !important; }\n::slotted(select) {\n appearance: none !important;\n box-sizing: border-box !important;\n display: block !important;\n width: 100% !important;\n min-width: 0 !important;\n max-width: none !important;\n height: 100% !important;\n min-height: 0 !important;\n margin: 0 !important;\n padding: 0 var(--ds-select-unit) 0 calc(4px * var(--ds-sf)) !important;\n border: 1px solid var(--ds-border-color) !important;\n border-radius: var(--ds-radius) !important;\n corner-shape: var(--ds-corner-shape, round) !important;\n background: var(--ds-input-background) !important;\n color: var(--ds-input-color) !important;\n font-family: var(--ds-typeface-regular) !important;\n font-size: var(--ds-type-size-default) !important;\n font-weight: var(--ds-type-weight-default) !important;\n letter-spacing: var(--ds-type-letterspacing-default) !important;\n line-height: calc(var(--ds-select-unit) - 2px) !important;\n box-shadow: none !important;\n cursor: pointer !important;\n}\nspan {\n position: absolute;\n pointer-events: none;\n inset-inline-end: calc(2px * var(--ds-sf));\n top: 50%;\n transform: translateY(-50%);\n width: calc(.8 * var(--ds-select-unit));\n height: calc(.8 * var(--ds-select-unit));\n background: var(--ds-input-color);\n mask: var(--ds-select-arrow) center / contain no-repeat;\n}\n::slotted(select:focus-visible) { outline: 2px solid var(--ds-focus-ring) !important; outline-offset: 1px !important; }\n::slotted(select:disabled) { cursor: default !important; opacity: .5 !important; }\nspan.disabled { opacity: .5; }\nspan[hidden] { display: none; }\n::slotted(select[multiple]),\n::slotted(select[size]:not([size=\"0\"]):not([size=\"1\"])) {\n padding: 0 calc(4px * var(--ds-sf)) !important;\n}\n\n/* Intrinsic width uses the native option sizing, including translated labels. */\n:host([fit]:not([data-listbox])) { width: max-content; }\n:host([fit]:not([data-listbox])) ::slotted(select) { width: auto !important; max-width: 100% !important; }\n\n/* A settings chip keeps the same native picker, on the shared control height. */\n:host([chip]:not([data-listbox])) { height: var(--ds-control-height); }\n:host([chip]:not([data-listbox])) ::slotted(select) {\n border: 0 !important;\n background: var(--ds-button-background-color-secondary) !important;\n color: var(--ds-button-text-color-secondary) !important;\n line-height: var(--ds-control-height) !important;\n}\n:host([chip][primary]:not([data-listbox])) ::slotted(select) {\n background: var(--ds-button-background-color-primary) !important;\n color: var(--ds-button-text-color-on-accent) !important;\n}\n:host([chip]) span { background: var(--ds-button-text-color-secondary); }\n:host([chip][primary]) span { background: var(--ds-button-text-color-on-accent); }\n\n/* A colour choice uses the shared swatch; the native select remains the hit target. */\n:host([swatch]:not([swatch=\"\"]):not([data-listbox])) {\n width: var(--ds-select-unit);\n height: var(--ds-select-unit);\n border-radius: var(--ds-radius);\n background: var(--ds-input-background);\n}\n:host([swatch]:not([swatch=\"\"]):not([data-listbox])) ::slotted(select) {\n width: 100% !important;\n opacity: 0 !important;\n position: relative !important;\n z-index: 1;\n}\n:host([swatch]:not([swatch=\"\"]):not([data-listbox]):focus-within) {\n outline: 2px solid var(--ds-focus-ring);\n outline-offset: 1px;\n}\nds-swatch { pointer-events: none; position: absolute; inset: 0; margin: auto; }\nds-swatch.disabled { opacity: .5; }\n","import{noChange as t}from\"../lit-html.js\";import{directive as e,Directive as r,PartType as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const n=\"important\",i=\" !\"+n,o=e(class extends r{constructor(t){if(super(t),t.type!==s.ATTRIBUTE||\"style\"!==t.name||t.strings?.length>2)throw Error(\"The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.\")}render(t){return Object.keys(t).reduce((e,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes(\"-\")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,\"-$&\").toLowerCase()}:${s};`},\"\")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(r)),this.render(r);for(const t of this.ft)null==r[t]&&(this.ft.delete(t),t.includes(\"-\")?s.removeProperty(t):s[t]=null);for(const t in r){const e=r[t];if(null!=e){this.ft.add(t);const r=\"string\"==typeof e&&e.endsWith(i);t.includes(\"-\")||r?s.setProperty(t,r?e.slice(0,-11):e,r?n:\"\"):s[t]=e}}return t}});export{o as styleMap};\n//# sourceMappingURL=style-map.js.map\n","import { LitElement, html, css } from \"lit\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { define } from \"../0-face/define\";\n\n/** A colour sample, composed with ds-button for selectable library choices. */\nexport class Swatch extends LitElement {\n static properties = { value: { type: String }, selected: { type: Boolean, reflect: true } };\n declare value: string;\n declare selected: boolean;\n constructor() { super(); this.value = \"transparent\"; this.selected = false; }\n static styles = css`\n :host { display: inline-block; flex: 0 0 auto; width: calc(var(--ds-08) * var(--ds-sf)); height: calc(var(--ds-08) * var(--ds-sf)); vertical-align: middle; }\n :host([hidden]) { display: none !important; }\n span { display: block; box-sizing: border-box; width: 100%; height: 100%; border: 1px solid var(--ds-border-color); }\n :host([selected]) span { outline: 2px solid var(--ds-text-color); outline-offset: 0; }\n `;\n render() { return html`<span style=${styleMap({ backgroundColor: this.value })}></span>`; }\n}\ndefine(\"ds-swatch\", Swatch);\ndeclare global { interface HTMLElementTagNameMap { \"ds-swatch\": Swatch } }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport down from \"../x-icon/down.svg?raw\";\nimport styles from \"./styles/ds-select.css?inline\";\nimport \"./ds-swatch\";\n\n/** Native selection, labels and forms; one shared face and scale. */\nexport class Select extends LitElement {\n static properties = { swatch: { type: String, reflect: true } };\n declare swatch: string | undefined;\n constructor() { super(); this.swatch = undefined; }\n static styles = [unsafeCSS(styles), unsafeCSS(`:host { --ds-select-arrow: url(\"data:image/svg+xml,${encodeURIComponent(down)}\"); }`)];\n private listbox = false;\n private disabled = false;\n private observer = new MutationObserver(() => this.syncRows());\n private control() {\n const select = this.querySelector(\"select\");\n return select?.parentElement === this ? select : null;\n }\n private syncRows() {\n const select = this.control();\n this.style.setProperty(\"--ds-select-rows\", String(select ? select.size || (select.multiple ? 4 : 1) : 1));\n this.listbox = Boolean(select && (select.multiple || select.size > 1));\n this.toggleAttribute(\"data-listbox\", this.listbox);\n this.disabled = Boolean(select?.matches(\":disabled\"));\n this.requestUpdate();\n }\n private observeControl() {\n this.observer.disconnect();\n const select = this.control();\n if (select) this.observer.observe(select, { attributes: true, attributeFilter: [\"size\", \"multiple\", \"disabled\"] });\n for (let parent = this.parentElement; parent; parent = parent.parentElement) {\n if (parent.localName === \"fieldset\") this.observer.observe(parent, { attributes: true, attributeFilter: [\"disabled\"] });\n }\n this.syncRows();\n }\n connectedCallback() { super.connectedCallback(); this.observeControl(); }\n disconnectedCallback() { this.observer.disconnect(); super.disconnectedCallback(); }\n focus(options?: FocusOptions) { this.control()?.focus(options); }\n render() { return html`<slot @slotchange=${this.observeControl}></slot><span aria-hidden=\"true\" ?hidden=${this.listbox || Boolean(this.swatch)} class=${this.disabled ? \"disabled\" : \"\"}></span>${this.swatch && !this.listbox ? html`<ds-swatch aria-hidden=\"true\" .value=${this.swatch} class=${this.disabled ? \"disabled\" : \"\"}></ds-swatch>` : null}`; }\n}\n\ndefine(\"ds-select\", Select);\ndeclare global { interface HTMLElementTagNameMap { \"ds-select\": Select } }\n","/* The native colour control stays in light DOM, including its browser picker. */\nds-color > input[type=\"color\"] {\n appearance: none !important;\n box-sizing: border-box !important;\n display: block !important;\n width: 100% !important;\n height: 100% !important;\n min-width: 0 !important;\n min-height: 0 !important;\n margin: 0 !important;\n padding: calc(2px * var(--ds-sf)) !important;\n border: 1px solid var(--ds-border-color) !important;\n border-radius: var(--ds-radius) !important;\n corner-shape: var(--ds-corner-shape, round) !important;\n background: var(--ds-input-background) !important;\n box-shadow: none !important;\n cursor: pointer !important;\n}\nds-color > input[type=\"color\"]::-webkit-color-swatch-wrapper { padding: 0; }\nds-color > input[type=\"color\"]::-webkit-color-swatch { border: 0; border-radius: 0; }\nds-color > input[type=\"color\"]::-moz-color-swatch { border: 0; border-radius: 0; }\nds-color > input[type=\"color\"]:focus-visible { outline: 2px solid var(--ds-focus-ring) !important; outline-offset: 1px !important; }\nds-color > input[type=\"color\"]:disabled { opacity: .5 !important; cursor: default !important; }\nds-color > input[type=\"color\"][hidden] { display: none !important; }\n","@import \"./component-appearance.css\";\n\n/* Resolve dimensions where a component is drawn. Inherited calc() values have\n * already used their ancestor's scale. Base tokens stay unscaled and inherit;\n * resolved tokens can still be overridden directly on a component.\n * data-ds-surface gives ordinary layout elements the same scaled measures.\n */\n:root,\n:host,\n:where([data-ds-surface]) {\n --ds-unit: calc(var(--ds-1, 20px) * var(--ds-sf, 1));\n --ds-control-height: calc(var(--ds-control-size, var(--ds-08, 16px)) * var(--ds-sf, 1));\n --ds-row-height: calc(var(--ds-row-size, var(--ds-1, 20px)) * var(--ds-sf, 1));\n --ds-type-size-default: calc(var(--ds-text-size, 14px) * var(--ds-sf, 1));\n --ds-type-size-small: calc(var(--ds-small-text-size, 10px) * var(--ds-sf, 1));\n --ds-type-size-heading: calc(var(--ds-heading-text-size, 13px) * var(--ds-sf, 1));\n --ds-type-lineheight-default: calc(var(--ds-text-leading, 16px) * var(--ds-sf, 1));\n --ds-type-letterspacing-default: calc(var(--ds-text-tracking, -0.3px) * var(--ds-sf, 1));\n --ds-radius: calc(var(--ds-corner-size, 4px) * var(--ds-sf, 1));\n --ds-radius-card: calc(var(--ds-card-corner-size, 4px) * var(--ds-sf, 1));\n}\n","import { LitElement, html, css, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport \"./styles/ds-color.css\";\nimport styles from \"./styles/ds-color.css?inline\";\nimport metrics from \"../1-root/component-metrics.css?inline\";\n\nconst styledRoots = new WeakSet<ShadowRoot>();\n\n/** A native colour input owns the platform picker, labels, forms and reset. */\nexport class ColorInput extends LitElement {\n static styles = [unsafeCSS(metrics), css`\n :host {\n --ds-color-unit: calc(var(--ds-1) * var(--ds-sf));\n display: inline-flex; flex: 0 0 auto;\n width: calc(2 * var(--ds-color-unit)); height: var(--ds-color-unit);\n }\n :host([hidden]) { display: none !important; }\n `];\n connectedCallback() {\n super.connectedCallback();\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && !styledRoots.has(root)) {\n const sheet = new CSSStyleSheet(); sheet.replaceSync(styles);\n root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];\n styledRoots.add(root);\n }\n }\n focus(options?: FocusOptions) { this.querySelector(\"input\")?.focus(options); }\n render() { return html`<slot></slot>`; }\n}\ndefine(\"ds-color\", ColorInput);\ndeclare global { interface HTMLElementTagNameMap { \"ds-color\": ColorInput } }\n","// ds-card.ts\n// Card component for displaying content in a contained box\n\nimport { LitElement, html, css } from \"lit\";\n\nexport class Card extends LitElement {\n static properties = {\n variant: { type: String, reflect: true },\n elevation: { type: Number, reflect: true },\n interactive: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n padding: { type: String, reflect: true },\n };\n\n declare variant: \"default\" | \"outlined\" | \"elevated\" | \"filled\";\n declare elevation: number;\n declare interactive: boolean;\n declare disabled: boolean;\n declare padding: \"none\" | \"small\" | \"medium\" | \"large\";\n\n constructor() {\n super();\n this.variant = \"default\";\n this.elevation = 1;\n this.interactive = false;\n this.disabled = false;\n this.padding = \"medium\";\n }\n\n static styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n border-radius: calc(var(--025) * var(--sf, 1));\n background-color: var(--card-background, var(--surface-color, #fff));\n color: var(--text-color-primary);\n transition:\n box-shadow 0.2s ease,\n transform 0.2s ease;\n }\n\n :host([variant=\"default\"]) {\n background-color: var(--card-background, var(--surface-color, #fff));\n border: 1px solid var(--border-color, rgba(0, 0, 0, 0.1));\n }\n\n :host([variant=\"outlined\"]) {\n background-color: transparent;\n border: 1px solid var(--border-color, rgba(0, 0, 0, 0.2));\n }\n\n :host([variant=\"elevated\"]) {\n background-color: var(--card-background, var(--surface-color, #fff));\n border: none;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n\n :host([variant=\"filled\"]) {\n background-color: var(\n --card-background-filled,\n var(--surface-color-secondary, #f5f5f5)\n );\n border: none;\n }\n\n :host([elevation=\"0\"]) {\n box-shadow: none;\n }\n\n :host([elevation=\"1\"]) {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n }\n\n :host([elevation=\"2\"]) {\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);\n }\n\n :host([elevation=\"3\"]) {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.16);\n }\n\n :host([interactive]) {\n cursor: pointer;\n }\n\n :host([interactive]:hover:not([disabled])) {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n :host([interactive]:active:not([disabled])) {\n transform: translateY(0);\n }\n\n :host([disabled]) {\n opacity: 0.5;\n pointer-events: none;\n }\n\n :host([padding=\"none\"]) {\n padding: 0;\n }\n\n :host([padding=\"small\"]) {\n padding: calc(var(--025) * var(--sf, 1));\n }\n\n :host([padding=\"medium\"]) {\n padding: calc(var(--05) * var(--sf, 1));\n }\n\n :host([padding=\"large\"]) {\n padding: calc(var(--1) * var(--sf, 1));\n }\n\n .card-content {\n width: 100%;\n height: 100%;\n }\n `;\n\n render() {\n return html`\n <div class=\"card-content\" part=\"content\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ncustomElements.define(\"ds-card\", Card);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-card\": Card;\n }\n}\n","/* ds-cycle.css */\n/* Cycle component styles for cycling through options */\n\n:host {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n width: max-content;\n min-width: 0;\n max-width: 100%;\n}\n\n.cycle {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n max-width: 100%;\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport {\n translate,\n currentLanguage,\n getAvailableLanguagesSync,\n getLanguageDisplayName,\n setLanguage,\n} from \"../0-face/i18n\";\nimport type { LanguageCode } from \"../0-face/i18n\";\nimport { currentTheme, setTheme } from \"../0-face/theme\";\nimport type { ThemeType } from \"../0-face/theme\";\nimport { savePreferences } from \"../0-face/preferences\";\nimport \"./ds-button\";\nimport \"./ds-icon\";\nimport \"./ds-text\";\nimport styles from \"./styles/ds-cycle.css?inline\";\n\n// Accent color utilities\nconst saveAccentColor = (color: string) => {\n localStorage.setItem(\"accentColor\", color);\n};\n\nconst getAccentColor = (): string => {\n return localStorage.getItem(\"accentColor\") || \"--sharp-blue\"; // Default color if none set\n};\n\nconst applyAccentColor = () => {\n const color = getAccentColor();\n document.documentElement.style.setProperty(\"--accent-color\", `var(${color})`);\n};\n\n// Notes style medium utilities\nconst saveNotesStyleMedium = (style: string) => {\n localStorage.setItem(\"notesStyleMedium\", style);\n};\n\nconst getNotesStyleMedium = (): string => {\n return localStorage.getItem(\"notesStyleMedium\") || \"note\"; // Default to note\n};\n\n// Note behavior utilities\nconst savePageStyle = (style: string) => {\n localStorage.setItem(\"pageStyle\", style);\n};\n\nconst getPageStyle = (): string => {\n return localStorage.getItem(\"pageStyle\") || \"note\"; // Default to note\n};\n\n// App width utilities removed\n\n// Use a regular class with proper TypeScript type declarations and JSDoc comments\nexport class Cycle extends LitElement {\n static formAssociated = true;\n // Define reactive properties using Lit's property system\n static get properties() {\n return {\n type: { type: String },\n values: { type: Array },\n currentValue: { type: String, state: true }, // Make this a private state property\n translationsReady: { type: Boolean, state: true }, // Track if translations are loaded\n disabled: { type: Boolean, reflect: true },\n _fieldsetDisabled: { state: true },\n variant: { type: String },\n // The same two words a button takes: `primary` is a chip in the accent,\n // `secondary` a grey one. Neither given, the type decides (below), and\n // the choice is written back onto the host so a page sheet can read it.\n primary: { type: Boolean, reflect: true },\n secondary: { type: Boolean, reflect: true },\n };\n }\n\n static styles = unsafeCSS(styles);\n\n // Add runtime properties using the any type\n // These are just for TypeScript and don't create shadowing fields\n declare type: string;\n declare values: string[];\n declare currentValue: string;\n declare translationsReady: boolean;\n declare disabled: boolean;\n declare protected _fieldsetDisabled: boolean;\n declare variant: string;\n declare primary: boolean;\n declare secondary: boolean;\n\n // Store bound event handlers for proper cleanup\n private boundHandlers: {\n translationsLoaded: EventListener;\n languageChanged: EventListener;\n handleLanguageChanged: EventListener;\n handleThemeChanged: EventListener;\n handleAccentColorChanged: EventListener;\n handleNoteBehaviorChanged: EventListener;\n };\n\n constructor() {\n super();\n if (typeof this.attachInternals === \"function\") this.attachInternals();\n this._fieldsetDisabled = false;\n this.variant = \"\";\n\n // Initialize properties with default values\n this.type = \"\";\n this.values = [];\n this.currentValue = \"\";\n this.translationsReady = false;\n this.disabled = false;\n this.primary = false;\n this.secondary = false;\n\n // Bind event handlers to this instance for proper cleanup\n this.boundHandlers = {\n translationsLoaded: this.handleTranslationsLoaded.bind(this),\n languageChanged: this.handleLanguageChanged.bind(this),\n handleLanguageChanged: this.handleLanguageChanged.bind(this),\n handleThemeChanged: this.handleThemeChanged.bind(this),\n handleAccentColorChanged: this.handleAccentColorChanged.bind(this),\n handleNoteBehaviorChanged: this.handleNoteBehaviorChanged.bind(this),\n };\n }\n\n formDisabledCallback(disabled: boolean) { this._fieldsetDisabled = disabled; }\n\n focus(options?: FocusOptions) { this.shadowRoot?.querySelector<HTMLElement>(\"ds-button, button\")?.focus(options); }\n\n connectedCallback() {\n super.connectedCallback();\n\n // Add event listeners\n window.addEventListener(\n \"translations-loaded\",\n this.boundHandlers.translationsLoaded\n );\n window.addEventListener(\n \"language-changed\",\n this.boundHandlers.languageChanged\n );\n window.addEventListener(\n \"theme-changed\",\n this.boundHandlers.handleThemeChanged\n );\n window.addEventListener(\n \"accent-color-changed\",\n this.boundHandlers.handleAccentColorChanged\n );\n window.addEventListener(\n \"page-style-changed\",\n this.boundHandlers.handleNoteBehaviorChanged\n );\n\n // Initialize the component\n this.initializeValues();\n }\n\n async initializeValues() {\n if (this.type === \"language\") {\n // Dynamically get available languages from translation data\n const availableLanguages = getAvailableLanguagesSync();\n this.values = availableLanguages;\n this.currentValue = currentLanguage.value;\n } else if (this.type === \"theme\") {\n // Set up theme cycling\n this.values = [\"light\", \"dark\"];\n\n // Set initial value based on current theme\n const currentThemeValue = currentTheme.get();\n this.currentValue = currentThemeValue;\n } else if (this.type === \"accent-color\") {\n // Set up accent color cycling\n this.values = [\n \"--apple-green\",\n \"--every-green\",\n \"--zenith-blue\",\n \"--sharp-blue\",\n \"--pink\",\n \"--tuned-red\",\n \"--orange\",\n \"--yellow\",\n ];\n\n // Set initial value based on current accent color\n const currentAccentColor = getAccentColor();\n this.currentValue = currentAccentColor;\n\n // Apply the accent color to ensure it's active\n applyAccentColor();\n } else if (this.type === \"notes-style-medium\") {\n // Set up notes style medium cycling\n this.values = [\"default\", \"big\", \"gallery\"];\n\n // Set initial value based on current notes style medium\n const currentNotesStyle = getNotesStyleMedium();\n this.currentValue = currentNotesStyle;\n\n // Check if this should be disabled based on note behavior\n const currentPageStyle = getPageStyle();\n this.disabled = currentPageStyle === \"note\";\n } else if (this.type === \"page-style\") {\n // Set up page style cycling\n this.values = [\"note\", \"page\"];\n\n // Set initial value based on current page style\n const currentPageStyle = getPageStyle();\n this.currentValue = currentPageStyle;\n } else if (this.type === \"icon-only\") {\n // Set up icon-only cycling (no label)\n this.values = [\"note\", \"page\"];\n\n // Set initial value\n this.currentValue = this.values[0];\n }\n\n // Request update to re-render with new values\n this.requestUpdate();\n }\n\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n super.attributeChangedCallback(name, oldValue, newValue);\n\n if (name === \"type\" && oldValue !== newValue) {\n // Type changed, reinitialize values\n this.initializeValues();\n }\n }\n\n async setupInitialValue() {\n if (this.type === \"language\") {\n // Get current language\n const currentLang = currentLanguage.value;\n this.currentValue = currentLang;\n } else if (this.type === \"theme\") {\n // Get current theme\n const currentThemeValue = currentTheme.get();\n this.currentValue = currentThemeValue;\n } else if (this.type === \"accent-color\") {\n // Get current accent color\n const currentAccentColor = getAccentColor();\n this.currentValue = currentAccentColor;\n\n // Apply the accent color to ensure it's active\n applyAccentColor();\n } else if (this.type === \"notes-style-medium\") {\n // Get current notes style medium\n const currentNotesStyle = getNotesStyleMedium();\n this.currentValue = currentNotesStyle;\n\n // Check if this should be disabled based on note behavior\n const currentPageStyle = getPageStyle();\n this.disabled = currentPageStyle === \"note\";\n } else if (this.type === \"page-style\") {\n // Get current page style\n const currentPageStyle = getPageStyle();\n this.currentValue = currentPageStyle;\n } else if (this.type === \"icon-only\") {\n // Get current page style for icon-only\n const currentPageStyle = getPageStyle();\n this.currentValue = currentPageStyle;\n }\n\n this.requestUpdate();\n }\n\n handleSettingsChanges() {\n // Handle any settings changes that might affect this component\n this.setupInitialValue();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n // Remove event listeners\n window.removeEventListener(\n \"translations-loaded\",\n this.boundHandlers.translationsLoaded\n );\n window.removeEventListener(\n \"language-changed\",\n this.boundHandlers.languageChanged\n );\n window.removeEventListener(\n \"theme-changed\",\n this.boundHandlers.handleThemeChanged\n );\n window.removeEventListener(\n \"accent-color-changed\",\n this.boundHandlers.handleAccentColorChanged\n );\n window.removeEventListener(\n \"page-style-changed\",\n this.boundHandlers.handleNoteBehaviorChanged\n );\n }\n\n handleButtonClick(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n\n // Don't handle clicks if disabled\n if (this.disabled || this._fieldsetDisabled || !this.values.length || this.values.every(value => value === this.currentValue)) {\n return;\n }\n\n if (this.type === \"language\") {\n // Cycle through available languages\n const currentIndex = this.values.indexOf(this.currentValue);\n const nextIndex = (currentIndex + 1) % this.values.length;\n const newLanguage = this.values[nextIndex];\n\n // Update current value\n this.currentValue = newLanguage;\n\n // Set the new language with view transition like Portfolio\n if ((document as any).startViewTransition) {\n (document as any).startViewTransition(() => {\n setLanguage(newLanguage as LanguageCode);\n });\n } else {\n setLanguage(newLanguage as LanguageCode);\n }\n\n // Save preferences\n savePreferences({ language: newLanguage as LanguageCode });\n\n } else if (this.type === \"theme\") {\n // Cycle through themes\n const currentIndex = this.values.indexOf(this.currentValue);\n const nextIndex = (currentIndex + 1) % this.values.length;\n const newTheme = this.values[nextIndex];\n\n // Update current value\n this.currentValue = newTheme;\n\n // Set the new theme using the shared helper\n setTheme(newTheme as ThemeType);\n\n // Save preferences\n savePreferences({ theme: newTheme as ThemeType });\n\n // Theme helper already emits the change event, so no manual dispatch here\n } else if (this.type === \"accent-color\") {\n // Cycle through accent colors\n const currentIndex = this.values.indexOf(this.currentValue);\n const nextIndex = (currentIndex + 1) % this.values.length;\n const newColor = this.values[nextIndex];\n\n // Update current value\n this.currentValue = newColor;\n\n // Save the new accent color\n saveAccentColor(newColor);\n\n // Apply the new accent color\n applyAccentColor();\n\n // Save preferences\n savePreferences({ accentColor: newColor });\n\n // Dispatch accent color change event\n window.dispatchEvent(\n new CustomEvent(\"accent-color-changed\", {\n detail: { color: newColor },\n })\n );\n } else if (this.type === \"notes-style-medium\") {\n // Cycle through notes style medium options\n const currentIndex = this.values.indexOf(this.currentValue);\n const nextIndex = (currentIndex + 1) % this.values.length;\n const newStyle = this.values[nextIndex];\n\n // Update current value\n this.currentValue = newStyle;\n\n // Save the new notes style medium\n saveNotesStyleMedium(newStyle);\n\n // Save preferences\n savePreferences({ notesStyleMedium: newStyle });\n\n // Dispatch notes style medium change event\n window.dispatchEvent(\n new CustomEvent(\"notes-style-medium-changed\", {\n detail: { style: newStyle },\n })\n );\n } else if (this.type === \"page-style\") {\n // Cycle through note behavior options\n const currentIndex = this.values.indexOf(this.currentValue);\n const nextIndex = (currentIndex + 1) % this.values.length;\n const newBehavior = this.values[nextIndex];\n\n // Update current value\n this.currentValue = newBehavior;\n\n // Save the new note behavior\n savePageStyle(newBehavior);\n\n // Save preferences\n savePreferences({ pageStyle: newBehavior });\n\n // Dispatch note behavior change event\n window.dispatchEvent(\n new CustomEvent(\"page-style-changed\", {\n detail: { behavior: newBehavior },\n })\n );\n } else if (this.type === \"icon-only\") {\n // Cycle through icon-only options (note/page)\n const currentIndex = this.values.indexOf(this.currentValue);\n const nextIndex = (currentIndex + 1) % this.values.length;\n const newIconOnlyValue = this.values[nextIndex];\n\n // Update current value\n this.currentValue = newIconOnlyValue;\n\n // Save the new page style\n savePageStyle(newIconOnlyValue);\n\n // Save preferences\n savePreferences({ pageStyle: newIconOnlyValue });\n\n // Dispatch page style change event\n window.dispatchEvent(\n new CustomEvent(\"page-style-changed\", {\n detail: { behavior: newIconOnlyValue },\n })\n );\n }\n\n // Request update to re-render\n this.requestUpdate();\n }\n\n getValueDisplay(value: string): string | any {\n if (this.type === \"language\") {\n return getLanguageDisplayName(value, {\n locale: currentLanguage.value,\n });\n } else if (this.type === \"theme\") {\n // Try to get translated theme name\n if (this.translationsReady) {\n const translatedName = translate(value);\n if (translatedName && translatedName !== value) {\n return translatedName;\n }\n }\n\n // Fall back to the theme value itself\n return value;\n } else if (this.type === \"accent-color\") {\n // Get color name from CSS variable\n return this.getColorName(value);\n } else if (this.type === \"notes-style-medium\") {\n // Return SVG icon for notes style medium\n return this.getNotesStyleIcon(value);\n } else if (this.type === \"page-style\") {\n // Return translated text for note behavior\n if (this.translationsReady) {\n const translatedText = translate(value === \"note\" ? \"Note\" : \"Page\");\n if (\n translatedText &&\n translatedText !== (value === \"note\" ? \"Note\" : \"Page\")\n ) {\n return translatedText;\n }\n }\n return value;\n } else if (this.type === \"icon-only\") {\n // Return SVG icon for icon-only type (note/page icons)\n if (value === \"note\") {\n return html`<ds-icon type=\"note\"></ds-icon>`;\n } else if (value === \"page\") {\n return html`<ds-icon type=\"page\"></ds-icon>`;\n }\n return html`<span>${value}</span>`;\n }\n\n return value;\n }\n\n getColorKey(colorVar: string): string {\n // Map CSS variables to translation text keys\n const colorMap: { [key: string]: string } = {\n \"--tuned-red\": \"Red\",\n \"--orange\": \"Orange\",\n \"--yellow\": \"Yellow\",\n \"--apple-green\": \"Apple green\",\n \"--every-green\": \"Green\",\n \"--zenith-blue\": \"Light blue\",\n \"--sharp-blue\": \"Blue\",\n \"--pink\": \"Pink\",\n };\n\n return colorMap[colorVar] || colorVar.replace(\"--\", \"\").replace(\"-\", \" \");\n }\n\n getColorName(colorVar: string): string {\n // Map CSS variables to translation text keys\n const colorMap: { [key: string]: string } = {\n \"--tuned-red\": \"Red\",\n \"--orange\": \"Orange\",\n \"--yellow\": \"Yellow\",\n \"--apple-green\": \"Apple green\",\n \"--every-green\": \"Green\",\n \"--zenith-blue\": \"Light blue\",\n \"--sharp-blue\": \"Blue\",\n \"--pink\": \"Pink\",\n };\n\n const translationText = colorMap[colorVar];\n if (translationText && this.translationsReady) {\n const translatedName = translate(translationText);\n if (translatedName && translatedName !== translationText) {\n return translatedName;\n }\n }\n\n // Fallback to simple name conversion\n return colorVar.replace(\"--\", \"\").replace(\"-\", \" \");\n }\n\n getNotesStyleIcon(style: string) {\n if (style === \"page\") {\n return html`<ds-icon type=\"page\"></ds-icon>`;\n } else if (style === \"note\") {\n return html`<ds-icon type=\"note\"></ds-icon>`;\n } else if (style === \"default\") {\n return html`<ds-icon type=\"default\"></ds-icon>`;\n } else if (style === \"big\") {\n return html`<ds-icon type=\"big\"></ds-icon>`;\n } else if (style === \"gallery\") {\n return html`<ds-icon type=\"gallery\"></ds-icon>`;\n }\n return html`<span>${style}</span>`;\n }\n\n /**\n * A cycle without a stated look takes the one its type has always had: the\n * language and theme cycles are grey chips, every other one, the accent\n * colour's included, is in the accent. Written onto the host before the\n * first paint, so the inner button and any page sheet see the same word.\n */\n willUpdate(changed: Map<PropertyKey, unknown>) {\n if (changed.has(\"variant\") && this.variant) {\n this.primary = this.variant === \"primary\";\n this.secondary = this.variant === \"secondary\";\n }\n if ((!this.hasUpdated || changed.has(\"type\")) && !this.primary && !this.secondary) {\n if (this.type === \"language\" || this.type === \"theme\") this.secondary = true;\n else this.primary = true;\n }\n }\n\n render() {\n return html`\n <div class=\"cycle\">\n <ds-button fit\n ?primary=${this.primary && !this.secondary}\n ?secondary=${this.secondary}\n ?disabled=${this.disabled || this._fieldsetDisabled}\n @click=${this.handleButtonClick}\n >\n ${this.type === \"notes-style-medium\" || this.type === \"icon-only\"\n ? html`<span\n style=\"display: inline-flex; align-items: center; gap: var(--025)\"\n >${this.getValueDisplay(this.currentValue)}</span\n >`\n : this.type === \"language\"\n ? html`<ds-text\n literal text=${this.getValueDisplay(this.currentValue)}\n ></ds-text>`\n : this.type === \"theme\"\n ? html`<ds-text\n text=${this.currentValue === \"light\" ? \"Light\" : \"Dark\"}\n ></ds-text>`\n : this.type === \"accent-color\"\n ? html`<ds-text\n text=${this.getColorKey(this.currentValue)}\n ></ds-text>`\n : this.type === \"page-style\"\n ? html`<ds-text\n text=${this.currentValue === \"note\" ? \"Note\" : \"Page\"}\n ></ds-text>`\n : html`<ds-text\n literal text=${this.getValueDisplay(this.currentValue)}\n ></ds-text>`}\n </ds-button>\n </div>\n `;\n }\n\n private handleTranslationsLoaded() {\n this.translationsReady = true;\n\n // Refresh language values if this is a language cycle\n if (this.type === \"language\") {\n const availableLanguages = getAvailableLanguagesSync();\n this.values = availableLanguages;\n }\n\n this.setupInitialValue();\n }\n\n private handleLanguageChanged() {\n this.setupInitialValue();\n }\n\n private handleThemeChanged() {\n this.setupInitialValue();\n }\n\n private handleAccentColorChanged() {\n this.setupInitialValue();\n }\n\n private handleNoteBehaviorChanged() {\n this.setupInitialValue();\n }\n}\n\ndefine(\"ds-cycle\", Cycle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-cycle\": Cycle;\n }\n}\n","/* ds-date.css */\n/* Date component styles for displaying the current year */\n\n:host {\n display: inline;\n font-family: var(--typeface-regular, var(--typeface-regular-regular));\n font-size: inherit;\n color: inherit;\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-date.css?inline\";\n\n/**\n * A component for displaying the current year\n *\n * @element ds-date\n */\nexport class DateComponent extends LitElement {\n static styles = unsafeCSS(styles);\n\n render() {\n const year = new Date().getFullYear();\n return html`<span>${year}</span>`;\n }\n}\n\ncustomElements.define(\"ds-date\", DateComponent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-date\": DateComponent;\n }\n}\n","/* ds-gap.css */\n\n:host {\n --ds-gap-size: var(--ds-1);\n display: block;\n flex: 0 0 auto;\n width: 100%;\n height: calc(var(--ds-gap-size) * var(--ds-sf) + var(--ds-gap-rows, 1) * var(--ds-gap-row-space, 0px));\n}\n\n:host([size=\"025\"]) {\n --ds-gap-size: var(--ds-025);\n}\n\n:host([size=\"05\"]) {\n --ds-gap-size: var(--ds-05);\n}\n\n:host([size=\"08\"]) {\n --ds-gap-size: var(--ds-08);\n}\n\n:host([size=\"2\"]) {\n --ds-gap-size: var(--ds-2);\n}\n\n:host([tenth]), :host([size=\"01\"]) { --ds-gap-size: var(--ds-01); }\n\n:host([quarter]), :host([size=\"025\"]) { --ds-gap-size: var(--ds-025); }\n\n:host([half]), :host([size=\"05\"]) { --ds-gap-size: var(--ds-05); }\n\n:host([eight-tenth]), :host([size=\"08\"]) { --ds-gap-size: var(--ds-08); }\n\n:host([unit]), :host([size=\"1\"]) { --ds-gap-size: calc(var(--ds-1) * 1); }\n\n:host([double]), :host([size=\"2\"]) { --ds-gap-size: calc(var(--ds-1) * 2); }\n\n:host([triple]), :host([size=\"3\"]) { --ds-gap-size: calc(var(--ds-1) * 3); }\n\n:host([quad]), :host([size=\"4\"]) { --ds-gap-size: calc(var(--ds-1) * 4); }\n\n:host([oct]), :host([size=\"8\"]) { --ds-gap-size: calc(var(--ds-1) * 8); }\n\n:host([dozen]), :host([size=\"12\"]) { --ds-gap-size: calc(var(--ds-1) * 12); }\n\n:host([tenth]) { --ds-gap-rows: 0; }\n\n:host([quarter]) { --ds-gap-rows: 0; }\n\n:host([half]) { --ds-gap-rows: 0; }\n\n:host([eight-tenth]) { --ds-gap-rows: 0; }\n\n:host([size=\"01\"]) { --ds-gap-rows: 0; }\n\n:host([size=\"025\"]) { --ds-gap-rows: 0; }\n\n:host([size=\"05\"]) { --ds-gap-rows: 0; }\n\n:host([size=\"08\"]) { --ds-gap-rows: 0; }\n\n:host([double]), :host([size=\"2\"]) { --ds-gap-rows: 2; }\n\n:host([triple]), :host([size=\"3\"]) { --ds-gap-rows: 3; }\n\n:host([quad]), :host([size=\"4\"]) { --ds-gap-rows: 4; }\n\n:host([oct]), :host([size=\"8\"]) { --ds-gap-rows: 8; }\n\n:host([dozen]), :host([size=\"12\"]) { --ds-gap-rows: 12; }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-gap.css?inline\";\nimport { define } from \"../0-face/define\";\n\n/**\n * Vertical space on the unit scale.\n *\n * @element ds-gap\n * @attr size - \"025\", \"05\", \"08\", \"1\" (the default) or \"2\" units.\n *\n * @example\n * <ds-gap size=\"05\"></ds-gap>\n */\nexport class Gap extends LitElement {\n static properties = {\n size: { type: String, reflect: true },\n };\n\n declare size: \"025\" | \"05\" | \"08\" | \"1\" | \"2\" | undefined;\n\n static styles = unsafeCSS(styles);\n\n render() {\n return html``;\n }\n}\n\ndefine(\"ds-gap\", Gap);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-gap\": Gap;\n }\n}\n","import{noChange as r,nothing as e}from\"../lit-html.js\";import{directive as i,Directive as t,PartType as n}from\"../directive.js\";import{isSingleExpression as o,setCommittedValue as s}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const l=i(class extends t{constructor(r){if(super(r),r.type!==n.PROPERTY&&r.type!==n.ATTRIBUTE&&r.type!==n.BOOLEAN_ATTRIBUTE)throw Error(\"The `live` directive is not allowed on child or event bindings\");if(!o(r))throw Error(\"`live` bindings can only contain a single expression\")}render(r){return r}update(i,[t]){if(t===r||t===e)return t;const o=i.element,l=i.name;if(i.type===n.PROPERTY){if(t===o[l])return r}else if(i.type===n.BOOLEAN_ATTRIBUTE){if(!!t===o.hasAttribute(l))return r}else if(i.type===n.ATTRIBUTE&&o.getAttribute(l)===t+\"\")return r;return s(i),t}});export{l as live};\n//# sourceMappingURL=live.js.map\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=o=>o??t;export{o as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%3e%3csvg%20preserveAspectRatio='none'%20overflow='visible'%20style='display:%20block;'%20width='16'%20height='16'%20viewBox='0%200%2014.0059%208.5918'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Group%2090'%3e%3cpath%20id='Vector%20(Stroke)'%20d='M7.08496%201.43051e-06C9.10892%201.43051e-06%2010.8032%201.03732%2011.9648%202.02832C12.5501%202.52762%2013.0133%203.02575%2013.3301%203.39942C13.4887%203.58653%2013.6115%203.74347%2013.6953%203.85449C13.7372%203.90995%2013.7698%203.95445%2013.792%203.98535C13.8029%204.00061%2013.8114%204.01295%2013.8174%204.02149C13.8202%204.02555%2013.8225%204.02881%2013.8242%204.03125C13.8249%204.03228%2013.8257%204.03346%2013.8262%204.03418L13.8271%204.03516C13.8273%204.03531%2013.8278%204.03638%2013.4492%204.2959L13.8271%204.55567L13.8262%204.55664C13.8256%204.55744%2013.8251%204.55929%2013.8242%204.56055C13.8225%204.563%2013.8202%204.56626%2013.8174%204.57031C13.8114%204.57887%2013.803%204.59115%2013.792%204.60645C13.7698%204.63736%2013.7372%204.68181%2013.6953%204.73731C13.6115%204.84834%2013.4887%205.00525%2013.3301%205.19238C13.0133%205.56604%2012.5501%206.06419%2011.9648%206.56348C10.8032%207.55446%209.10889%208.5918%207.08496%208.5918C5.06326%208.5918%203.33153%207.55649%202.13379%206.56836C1.53011%206.07032%201.04876%205.57301%200.717773%205.2002C0.55201%205.01348%200.422971%204.85678%200.334961%204.7461C0.291015%204.69082%200.2567%204.64695%200.233398%204.61621C0.221828%204.60095%200.213338%204.58859%200.207031%204.58008C0.203926%204.57589%200.201023%204.57277%200.199219%204.57031C0.198435%204.56924%200.197795%204.56811%200.197266%204.56738L0.196289%204.56641V4.56543L0%204.2959L0.196289%204.02637V4.02539L0.197266%204.02442C0.197805%204.02368%200.198405%204.0226%200.199219%204.02149C0.201027%204.01902%200.203896%204.01595%200.207031%204.01172C0.21333%204.00322%200.221826%203.99086%200.233398%203.97559C0.256689%203.94486%200.291044%203.90094%200.334961%203.8457C0.422971%203.73501%200.55201%203.57832%200.717773%203.3916C1.04875%203.0188%201.5301%202.52149%202.13379%202.02344C3.33153%201.03531%205.06326%203.87222e-06%207.08496%201.43051e-06ZM7.08496%200.91797C5.37308%200.917973%203.84542%201.80115%202.71777%202.73145C2.15914%203.19234%201.71191%203.65449%201.4043%204.00098C1.30562%204.11212%201.22362%204.21306%201.15527%204.2959C1.22361%204.37872%201.30565%204.47971%201.4043%204.59082C1.71192%204.93731%202.15914%205.39947%202.71777%205.86035C3.84542%206.79065%205.37308%207.67383%207.08496%207.67383C8.79447%207.67383%2010.2821%206.7926%2011.3691%205.86524C11.9082%205.40533%2012.3368%204.94438%2012.6299%204.59863C12.7272%204.48383%2012.807%204.38024%2012.873%204.2959C12.807%204.21156%2012.7272%204.10798%2012.6299%203.99317C12.3368%203.64742%2011.9082%203.18647%2011.3691%202.72656C10.2821%201.79918%208.79451%200.91797%207.08496%200.91797ZM14.0059%204.2959L13.8281%204.55567L13.4492%204.2959L13.8281%204.03613L14.0059%204.2959Z'%20fill='currentColor'/%3e%3cpath%20id='Ellipse%2040'%20d='M7.16119%201.9635C8.44936%201.9635%209.49404%203.00741%209.4942%204.29554C9.4942%205.5838%208.44946%206.62854%207.16119%206.62854C5.87307%206.62838%204.82916%205.5837%204.82916%204.29554C4.82933%203.00751%205.87317%201.96367%207.16119%201.9635Z'%20fill='currentColor'%20stroke='currentColor'%20stroke-width='0.81'/%3e%3c/g%3e%3c/svg%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20preserveAspectRatio='none'%20overflow='visible'%20style='display:%20block;'%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Unsee'%3e%3cg%20id='Vector'%3e%3cpath%20d='M12.4541%2012.789L13.1743%2012.0688L12.6027%2011.4967L12.6%2011.4994L12.0137%2010.9144C11.7332%2011.103%2011.4336%2011.283%2011.1164%2011.4457L11.4068%2011.7363L11.4046%2011.7385L12.4541%2012.789Z'%20fill='currentColor'/%3e%3cpath%20d='M5.96371%206.28858L9.79315%2010.1213C10.0642%209.91923%2010.2966%209.66817%2010.4772%209.38122L6.69735%205.60959C6.41317%205.78931%206.16435%206.01991%205.96371%206.28858Z'%20fill='currentColor'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M3.68238%204.00893L3.09583%203.42184L3.79957%202.7181L3.816%202.70167L5.35651%204.24363L6.05746%204.94524L6.712%205.6004L10.4818%209.3738L11.3559%2010.2487L12.0181%2010.9115L12.6027%2011.4967L12.6%2011.4994L12.0137%2010.9144C11.7332%2011.103%2011.4336%2011.283%2011.1164%2011.4457L11.4068%2011.7363L11.4046%2011.7385L11.1136%2011.4472L10.4275%2010.7604L9.79075%2010.1231L5.96207%206.29078L5.08276%205.41064L4.4124%204.73965L3.68238%204.00893ZM12.6382%2010.4584C12.7502%2010.37%2012.8582%2010.2812%2012.9619%2010.1927C13.5472%209.69339%2014.0104%209.19525%2014.3271%208.82159C14.4858%208.63445%2014.6085%208.47754%2014.6924%208.36651C14.7343%208.31101%2014.7669%208.26656%2014.7891%208.23565L14.7965%208.22527L14.8089%208.20741L14.8145%208.19952L14.8213%208.18975C14.8218%208.18905%2014.8222%208.18816%2014.8225%208.18737L14.8232%208.18584L14.8242%208.18487L15.0029%207.9251L14.8252%207.66534L14.4463%207.9251C14.8248%207.66558%2014.8243%207.66451%2014.8242%207.66436L14.8232%207.66338L14.8213%207.66045L14.8145%207.65069C14.8085%207.64215%2014.8%207.62981%2014.7891%207.61456C14.7669%207.58365%2014.7343%207.53915%2014.6924%207.4837C14.6085%207.37267%2014.4858%207.21573%2014.3271%207.02862C14.0104%206.65495%2013.5472%206.15683%2012.9619%205.65752C11.8003%204.66653%2010.106%203.6292%208.08203%203.6292C7.38933%203.6292%206.73067%203.75075%206.11587%203.95029L6.86093%204.69373C7.25481%204.60012%207.6629%204.54717%208.08203%204.54717C9.79158%204.54717%2011.2792%205.42838%2012.3662%206.35577C12.9053%206.81568%2013.3338%207.27662%2013.627%207.62237C13.7119%207.72259%2013.7835%207.81426%2013.8443%207.89203L13.8701%207.9251L13.8442%207.95828C13.7834%208.03604%2013.7119%208.12766%2013.627%208.22784C13.3338%208.57358%2012.9053%209.03453%2012.3662%209.49444C12.2436%209.599%2012.116%209.70298%2011.9835%209.80517L12.6382%2010.4584ZM5.58478%206.99004L9.09135%2010.4996C8.80023%2010.6051%208.48611%2010.6626%208.15857%2010.6626C6.64663%2010.6626%205.42096%209.43698%205.42096%207.92504C5.42096%207.59666%205.47878%207.28179%205.58478%206.99004ZM10.371%2011.7804L9.65051%2011.0593C9.15436%2011.2126%208.62958%2011.303%208.08203%2011.303C6.37015%2011.303%204.84249%2010.4199%203.71484%209.48956C3.15622%209.02867%202.70899%208.56651%202.40137%208.22002C2.31556%208.12337%202.24231%208.03438%202.17972%207.95834L2.15234%207.9251L2.17972%207.89186C2.24231%207.81582%202.31553%207.72686%202.40137%207.63018C2.70898%207.2837%203.15621%206.82154%203.71484%206.36065C3.93564%206.17849%204.17177%205.99815%204.42162%205.82588L3.76309%205.16679C3.53867%205.32681%203.32756%205.49036%203.13086%205.65264C2.52717%206.15069%202.04582%206.648%201.71484%207.02081C1.54908%207.20752%201.42004%207.36422%201.33203%207.47491C1.28811%207.53015%201.25376%207.57406%201.23047%207.60479C1.22314%207.61446%201.21704%207.62297%201.21196%207.63006L1.2041%207.64092C1.20236%207.64328%201.20069%207.64527%201.19925%207.647L1.19629%207.65069L1.19434%207.65362L1.19336%207.65557L0.99707%207.9251L1.19336%208.19561L1.19434%208.19659L1.19629%208.19952L1.19926%208.20322C1.20071%208.20496%201.20238%208.20695%201.2041%208.20928L1.21195%208.22013C1.21704%208.22723%201.22314%208.23575%201.23047%208.24541C1.25377%208.27615%201.28809%208.32002%201.33203%208.3753C1.42004%208.48599%201.54908%208.64268%201.71484%208.8294C2.04583%209.20221%202.52718%209.69952%203.13086%2010.1976C4.3286%2011.1857%206.06033%2012.221%208.08203%2012.221C8.90391%2012.221%209.67144%2012.0499%2010.371%2011.7804ZM10.8048%208.62904C10.8644%208.40441%2010.8962%208.16843%2010.8962%207.92504C10.8962%206.4131%209.6705%205.18743%208.15857%205.18743C7.91309%205.18743%207.67517%205.21974%207.44881%205.28034L10.8048%208.62904ZM9.79315%2010.1213L5.96371%206.28858C6.16435%206.01991%206.41317%205.78931%206.69735%205.60959L10.4772%209.38122C10.2966%209.66817%2010.0642%209.91923%209.79315%2010.1213Z'%20fill='currentColor'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","@import \"../../1-root/component-metrics.css\";\n\n/* ds-input.css */\n/* Input component styles */\n\n:host {\n display: block;\n width: 100%;\n}\n\n.input-wrapper {\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n}\n\nlabel {\n font-family: var(--ds-typeface-regular);\n font-size: var(--ds-type-size-default);\n line-height: var(--ds-row-height);\n color: var(--ds-text-color);\n}\n\n.input-container {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n}\n\n:is(input, textarea) {\n background: var(--base-light-grey, #e8e8e8);\n border: none;\n padding: 0 calc(2px * var(--ds-sf, 1));\n font-size: var(--ds-type-size-default);\n font-family: var(--ds-typeface-regular);\n color: var(--base-darker-grey, #797979);\n line-height: calc(16px * var(--ds-sf, 1));\n letter-spacing: calc(-0.4px * var(--ds-sf, 1));\n opacity: 0.5;\n height: var(--ds-input-height, calc(16px * var(--ds-sf, 1)));\n width: 100%;\n box-sizing: border-box;\n outline: none;\n}\n\n:is(input, textarea):focus {\n outline: none;\n opacity: 1;\n color: var(--base-slate, #1e1e1e);\n}\n\ninput {\n border-radius: var(--ds-input-radius, var(--ds-radius));\n corner-shape: var(--ds-corner-shape, round);\n}\n\n:is(input, textarea)::placeholder {\n color: var(--base-darker-grey, #797979);\n opacity: 0.5;\n}\n\n:is(input, textarea):disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n:is(input, textarea):read-only {\n background-color: var(--input-readonly-background, #fafafa);\n}\n\n:host([variant=\"filled\"]) :is(input, textarea) {\n background-color: var(--input-filled-background, var(--surface-color-secondary, #f5f5f5));\n border: none;\n border-bottom: 2px solid var(--border-color, #ccc);\n border-radius: calc(var(--025) * var(--ds-sf, 1)) calc(var(--025) * var(--ds-sf, 1)) 0 0;\n}\n\n:host([variant=\"filled\"]) :is(input, textarea):focus {\n border-bottom-color: var(--accent-color, #007aff);\n box-shadow: none;\n}\n\n:host([variant=\"outlined\"]) :is(input, textarea) {\n background-color: transparent;\n border: 2px solid var(--border-color, #ccc);\n}\n\n:host([variant=\"outlined\"]) :is(input, textarea):focus {\n border-color: var(--accent-color, #007aff);\n}\n\n.error-message {\n font-family: var(--ds-typeface-regular);\n font-size: var(--ds-type-size-default);\n line-height: var(--ds-row-height);\n color: var(--error-color, #ff3b30);\n margin-top: calc(var(--025) * var(--ds-sf, 1));\n}\n\n:host([required]) label::after {\n content: \" *\";\n color: var(--error-color, #ff3b30);\n}\n\n/* Error state */\n:is(input, textarea).has-error {\n border-color: var(--error-color, #ff3b30);\n}\n\n:is(input, textarea).has-error:focus {\n box-shadow: 0 0 0 2px rgba(255, 59, 48, 0.2);\n}\n\n/* A field drawn 18px high inside a 20px form row. */\n:host([variant=\"row\"]) {\n box-sizing: border-box;\n padding-top: calc(2px * var(--ds-sf, 1));\n}\n:host([variant=\"row\"]) .input-container,\n:host([variant=\"row\"]) :is(input, textarea) {\n box-sizing: border-box;\n height: calc(18px * var(--ds-sf, 1));\n min-height: calc(18px * var(--ds-sf, 1));\n max-height: calc(18px * var(--ds-sf, 1));\n}\n:host([variant=\"row\"]) :is(input, textarea) {\n margin: 0;\n padding-block: 0;\n line-height: calc(16px * var(--ds-sf, 1));\n border-radius: 0;\n background: var(--ds-input-background);\n color: var(--ds-input-color);\n opacity: 1;\n}\n:host([variant=\"row\"]) :is(input, textarea)::placeholder {\n color: var(--ds-input-placeholder-color);\n opacity: 1;\n}\n:host([variant=\"row\"]) :is(input, textarea):focus {\n background: var(--ds-input-background);\n color: var(--ds-input-color);\n box-shadow: inset 0 0 0 1px var(--ds-accent-color);\n opacity: 1;\n}\n:host([variant=\"row\"]) :is(input, textarea):disabled {\n opacity: 1;\n background: var(--ds-input-background);\n color: var(--ds-input-disabled-color);\n -webkit-text-fill-color: var(--ds-input-disabled-color);\n}\n:host([quiet-focus]) :is(input, textarea):focus,\n:host([quiet-focus]) :is(input, textarea):focus-visible,\n:host([quiet-focus]) .input-container:focus-within {\n outline: none !important;\n box-shadow: none !important;\n}\n:is(input, textarea).has-reveal {\n padding-inline-end: calc(24px * var(--ds-sf, 1));\n}\n.password-visibility {\n position: absolute;\n inset-inline-end: 0;\n top: 0;\n height: 100%;\n width: calc(24px * var(--ds-sf, 1));\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--ds-input-reveal-color);\n cursor: pointer;\n display: grid;\n place-items: center;\n}\n.password-visibility:focus-visible {\n outline: 1px solid currentColor;\n outline-offset: -1px;\n}\n.password-visibility:disabled {\n cursor: default;\n opacity: 0.5;\n}\n.password-visibility span {\n display: block;\n width: calc(16px * var(--ds-sf, 1));\n height: calc(16px * var(--ds-sf, 1));\n background: currentColor;\n mask: var(--eye-icon) center / 100% 100% no-repeat;\n}\n@supports (corner-shape: squircle) {\n :is(input, textarea) {\n corner-shape: var(--ds-corner-shape, squircle);\n }\n}\n\n/* Standard standalone form field and text-only inline editor. */\n:host([variant=\"field\"]) :is(input, textarea),\n:host([variant=\"plain\"]) :is(input, textarea) {\n height: var(--ds-input-height, var(--ds-row-height));\n padding: var(--ds-input-padding, 0 calc(4px * var(--ds-sf)));\n border: var(--ds-input-border, 1px solid var(--ds-border-color));\n border-radius: var(--ds-input-radius, var(--ds-radius));\n background: var(--ds-input-field-background, var(--ds-fill));\n color: var(--ds-text-color);\n opacity: 1;\n font-size: var(--ds-type-size-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n}\n:host([variant=\"plain\"]) :is(input, textarea) {\n padding: var(--ds-input-padding, 0);\n border: 0;\n border-radius: 0;\n background: transparent;\n}\n:host([variant=\"field\"]) :is(input, textarea)::placeholder,\n:host([variant=\"plain\"]) :is(input, textarea)::placeholder {\n color: var(--ds-text-color-muted);\n opacity: 1;\n}\n:host([variant=\"field\"]) :is(input, textarea):focus {\n outline: 1px solid var(--ds-focus-ring);\n outline-offset: -1px;\n}\n:host([variant=\"field\"]) :is(input, textarea):disabled,\n:host([variant=\"plain\"]) :is(input, textarea):disabled {\n opacity: 0.5;\n}\n:host([variant=\"field\"]) :is(input, textarea).has-reveal,\n:host([variant=\"plain\"]) :is(input, textarea).has-reveal {\n padding-inline-end: calc(24px * var(--ds-sf));\n}\n","// ds-input.ts\n// Input component for text and other input types\n\nimport { LitElement, html, unsafeCSS, type CSSResultGroup, type PropertyDeclarations } from \"lit\";\nimport { live } from \"lit/directives/live.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { define } from \"../0-face/define\";\nimport seeIcon from \"../x-icon/ezo-password-visibility-see.svg?url\";\nimport unseeIcon from \"../x-icon/ezo-password-visibility-unsee.svg?url\";\nimport { getText, currentLanguage } from \"../0-face/i18n\";\nimport \"./ds-text\";\nimport styles from \"./styles/ds-input.css?inline\";\n\nexport class Input extends LitElement {\n static formAssociated = true;\n private readonly focusFromLabel = (event: MouseEvent) => {\n if (event.composedPath()[0] === this && !this.disabled && !this._formDisabled) this.focus();\n };\n private internals = typeof this.attachInternals === \"function\" ? this.attachInternals() : null;\n private initialValue: string | undefined;\n static properties: PropertyDeclarations = {\n type: { type: String, reflect: true },\n inputMode: { type: String, attribute: \"inputmode\" },\n ariaLabel: { type: String, attribute: \"aria-label\" },\n ariaLabelledBy: { type: String, attribute: \"aria-labelledby\" },\n ariaDescribedBy: { type: String, attribute: \"aria-describedby\" },\n spellcheckHint: { type: String, attribute: \"spellcheck\" },\n ariaInvalid: { type: String, attribute: \"aria-invalid\" },\n revealable: { type: Boolean, reflect: true },\n quietFocus: { type: Boolean, attribute: \"quiet-focus\", reflect: true },\n _passwordVisible: { type: Boolean, state: true },\n _formDisabled: { type: Boolean, state: true },\n name: { type: String, reflect: true },\n value: { type: String },\n placeholder: { type: String },\n placeholderKey: { type: String, attribute: \"placeholder-key\" },\n label: { type: String },\n labelText: { type: String, attribute: \"label-text\" },\n disabled: { type: Boolean, reflect: true },\n readonly: { type: Boolean, reflect: true },\n required: { type: Boolean, reflect: true },\n autofocus: { type: Boolean },\n autocomplete: { type: String },\n pattern: { type: String },\n minlength: { type: Number },\n maxlength: { type: Number },\n min: { type: String },\n max: { type: String },\n step: { type: String },\n variant: { type: String, reflect: true },\n error: { type: String },\n errorText: { type: String, attribute: \"error-text\" },\n _focused: { type: Boolean, state: true },\n _placeholder: { type: String, state: true },\n _currentLanguage: { type: String, state: true },\n };\n\n declare type:\n | \"text\"\n | \"password\"\n | \"email\"\n | \"number\"\n | \"tel\"\n | \"url\"\n | \"search\"\n | \"date\"\n | \"time\"\n | \"datetime-local\";\n declare inputMode: string;\n declare ariaLabel: string;\n declare ariaLabelledBy: string;\n declare ariaDescribedBy: string;\n declare spellcheckHint: string;\n declare ariaInvalid: string;\n declare revealable: boolean;\n declare quietFocus: boolean;\n declare _passwordVisible: boolean;\n declare _formDisabled: boolean;\n declare name: string;\n declare value: string;\n declare placeholder: string;\n declare placeholderKey: string;\n declare label: string;\n declare labelText: string;\n declare disabled: boolean;\n declare readonly: boolean;\n declare required: boolean;\n declare autofocus: boolean;\n declare autocomplete: string;\n declare pattern: string;\n declare minlength: number;\n declare maxlength: number;\n declare min: string;\n declare max: string;\n declare step: string;\n declare variant: \"default\" | \"filled\" | \"outlined\" | \"row\" | \"field\" | \"plain\";\n declare error: string;\n declare errorText: string;\n declare _focused: boolean;\n declare _placeholder: string;\n declare _currentLanguage: string;\n private boundHandlers: { languageChanged: EventListener };\n\n constructor() {\n super();\n this.type = \"text\";\n this.inputMode = \"\";\n this.ariaLabel = \"\";\n this.ariaLabelledBy = \"\";\n this.ariaDescribedBy = \"\";\n this.spellcheckHint = \"\";\n this.ariaInvalid = \"\";\n this.revealable = false;\n this.quietFocus = false;\n this._passwordVisible = false;\n this._formDisabled = false;\n this.name = \"\";\n this.value = \"\";\n this.placeholder = \"\";\n this.placeholderKey = \"\";\n this.label = \"\";\n this.labelText = \"\";\n this.disabled = false;\n this.readonly = false;\n this.required = false;\n this.autofocus = false;\n this.autocomplete = \"off\";\n this.pattern = \"\";\n this.minlength = 0;\n this.maxlength = -1;\n this.min = \"\";\n this.max = \"\";\n this.step = \"\";\n this.variant = \"default\";\n this.error = \"\";\n this.errorText = \"\";\n this._focused = false;\n this._placeholder = \"\";\n this._currentLanguage = currentLanguage.value;\n\n // Create bound event handlers for proper cleanup\n this.boundHandlers = {\n languageChanged: (() => {\n this._currentLanguage = currentLanguage.value;\n this._loadPlaceholder();\n this.requestUpdate();\n }) as EventListener,\n };\n }\n\n static styles: CSSResultGroup = unsafeCSS(styles);\n\n connectedCallback() {\n super.connectedCallback();\n this._currentLanguage = currentLanguage.value;\n this._loadPlaceholder();\n this.addEventListener(\"click\", this.focusFromLabel);\n\n // Listen for language changes\n window.addEventListener(\"language-changed\", this.boundHandlers.languageChanged);\n\n // Also listen for translations loaded event\n window.addEventListener(\"translations-loaded\", this.boundHandlers.languageChanged);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.focusFromLabel);\n window.removeEventListener(\"language-changed\", this.boundHandlers.languageChanged);\n window.removeEventListener(\"translations-loaded\", this.boundHandlers.languageChanged);\n }\n\n firstUpdated(): void {\n if (this.autofocus) this.focus();\n }\n\n updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"placeholder\") || changedProperties.has(\"placeholderKey\")) {\n this._loadPlaceholder();\n }\n if (this.initialValue === undefined) this.initialValue = this.value;\n if (changedProperties.has(\"type\") && this.type !== \"password\") this._passwordVisible = false;\n this.syncForm();\n }\n\n protected get input(): HTMLInputElement | HTMLTextAreaElement | null {\n return this.shadowRoot?.querySelector(\"input, textarea\") ?? null;\n }\n protected get isMultiline(): boolean {\n return false;\n }\n get selectionStart(): number | null {\n return this.input?.selectionStart ?? null;\n }\n get selectionEnd(): number | null {\n return this.input?.selectionEnd ?? null;\n }\n setSelectionRange(start: number, end: number, direction?: \"forward\" | \"backward\" | \"none\"): void {\n this.input?.setSelectionRange(start, end, direction);\n }\n get valueAsNumber(): number {\n const input = this.input;\n return input instanceof HTMLInputElement ? input.valueAsNumber : NaN;\n }\n get labels(): NodeList | undefined {\n return this.internals?.labels;\n }\n get form(): HTMLFormElement | null {\n return this.internals?.form ?? null;\n }\n get validity(): ValidityState | undefined {\n return this.input?.validity;\n }\n get validationMessage(): string {\n return this.input?.validationMessage ?? \"\";\n }\n get willValidate(): boolean {\n return this.input?.willValidate ?? false;\n }\n\n private syncForm(): void {\n const input = this.input;\n if (!input) return;\n this.internals?.setFormValue(this.disabled || this._formDisabled ? null : this.value);\n const message = this.errorText ? getText(this.errorText) : this.error;\n input.setCustomValidity(message || \"\");\n this.internals?.setValidity(input.validity, input.validationMessage, input);\n }\n\n checkValidity(): boolean {\n this.syncForm();\n return this.input?.checkValidity() ?? true;\n }\n reportValidity(): boolean {\n this.syncForm();\n return this.input?.reportValidity() ?? true;\n }\n formDisabledCallback(disabled: boolean): void {\n this._formDisabled = disabled;\n // The browser can deliver this reaction while Lit reflects `disabled`,\n // after render has already read the old state. Schedule a fresh render\n // after that update so native inputs and inherited textareas re-enable.\n queueMicrotask(() => { if (this.isConnected) this.requestUpdate(); });\n }\n formResetCallback(): void {\n this.value = this.getAttribute(\"value\") ?? this.initialValue ?? \"\";\n this._passwordVisible = false;\n this.internals?.setFormValue(this.value);\n this.dispatchEvent(new Event(\"input-reset\", { bubbles: true, composed: true }));\n }\n formStateRestoreCallback(state: string | File | FormData): void {\n if (typeof state === \"string\") {\n this.value = state;\n this.internals?.setFormValue(state);\n }\n }\n\n protected accessibleLabel(): string | undefined {\n if (this.ariaLabel) return this.ariaLabel;\n const root = this.getRootNode() as Document | ShadowRoot;\n const label = (this.ariaLabelledBy ?? \"\")\n .split(/\\s+/)\n .filter(Boolean)\n .map((id) => {\n const element = root.getElementById?.(id);\n const key = element?.getAttribute(\"text\");\n return key ? getText(key) : (element?.textContent?.trim() ?? \"\");\n })\n .join(\" \")\n .trim();\n if (label) return label;\n return (\n Array.from(this.internals?.labels ?? [])\n .map((label) => label.textContent?.trim() ?? \"\")\n .join(\" \")\n .trim() || undefined\n );\n }\n\n private togglePassword(): void {\n const input = this.input;\n if (!(input instanceof HTMLInputElement) || this.disabled || this._formDisabled) return;\n const start = input.selectionStart,\n end = input.selectionEnd;\n this._passwordVisible = !this._passwordVisible;\n // Change only display. The field's public type stays password for forms and adapters.\n input.type = this._passwordVisible ? \"text\" : \"password\";\n if (start !== null && end !== null) input.setSelectionRange(start, end);\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n if (\n event.key !== \"Enter\" ||\n event.isComposing ||\n event.keyCode === 229 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n return;\n // Trusted browser events may run a microtask checkpoint between listeners.\n // Wait until the complete dispatch so an outer application handler can cancel.\n setTimeout(() => {\n const form = this.form;\n if (event.defaultPrevented || !form || this.disabled || this._formDisabled) return;\n const controls = Array.from(form.elements);\n const submit = controls.find(\n (element) =>\n (element instanceof HTMLButtonElement && element.type === \"submit\") ||\n (element instanceof HTMLInputElement && element.type === \"submit\"),\n ) as HTMLButtonElement | HTMLInputElement | undefined;\n if (submit) {\n if (!submit.disabled) submit.click();\n return;\n }\n const blockingTypes = new Set([\n \"text\",\n \"search\",\n \"url\",\n \"tel\",\n \"email\",\n \"password\",\n \"date\",\n \"month\",\n \"week\",\n \"time\",\n \"datetime-local\",\n \"number\",\n ]);\n const fields = controls.filter(\n (element) =>\n (element instanceof HTMLInputElement || element instanceof Input) &&\n blockingTypes.has(element.type),\n );\n if (fields.length === 1) form.requestSubmit();\n }, 0);\n }\n\n protected handleChange(event: Event): void {\n event.stopPropagation();\n this.value = (event.target as HTMLInputElement).value;\n this.syncForm();\n this.dispatchEvent(new Event(\"change\", { bubbles: true, composed: true }));\n }\n\n private _loadPlaceholder() {\n const placeholderText = this.placeholderKey || this.placeholder;\n if (!placeholderText) {\n this._placeholder = \"\";\n this.requestUpdate();\n return;\n }\n\n try {\n const translatedText = getText(placeholderText);\n this._placeholder = translatedText || placeholderText;\n } catch (error) {\n // Fallback to original text if translation fails\n this._placeholder = placeholderText;\n }\n this.requestUpdate();\n }\n\n protected _handleInput(e: Event): void {\n const target = e.target as HTMLInputElement;\n this.value = target.value;\n this.syncForm();\n this.dispatchEvent(\n new CustomEvent(\"input-change\", {\n detail: { value: this.value, name: this.name },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n protected _handleFocus(): void {\n this._focused = true;\n this.dispatchEvent(new CustomEvent(\"input-focus\", { bubbles: true }));\n }\n\n protected _handleBlur(): void {\n this._focused = false;\n this.dispatchEvent(new CustomEvent(\"input-blur\", { bubbles: true }));\n }\n\n /**\n * Focus the input element\n */\n /** Render the native field within the tap that opens a phone keyboard. */\n renderNow(): void { this.performUpdate(); }\n\n focus(options?: FocusOptions): void {\n this.input?.focus(options);\n }\n\n /**\n * Blur the input element\n */\n blur(): void {\n this.input?.blur();\n }\n\n /**\n * Select all text in the input\n */\n select(): void {\n this.input?.select();\n }\n\n protected renderControl(hasError: boolean, description: string) {\n return html`<input\n id=\"input\"\n part=\"input\"\n .type=${this.type === \"password\" && this._passwordVisible ? \"text\" : this.type}\n aria-label=${ifDefined(this.accessibleLabel())}\n aria-invalid=${ifDefined(this.ariaInvalid || (hasError ? \"true\" : undefined))}\n aria-describedby=${ifDefined([description ? \"description\" : \"\", hasError ? \"error\" : \"\"].filter(Boolean).join(\" \") || undefined)}\n inputmode=${ifDefined(this.inputMode || undefined)}\n spellcheck=${ifDefined(this.spellcheckHint || undefined)}\n .name=${this.name}\n .value=${live(this.value)}\n .placeholder=${this._placeholder || this.placeholder}\n ?disabled=${this.disabled || this._formDisabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n autocomplete=${this.autocomplete}\n pattern=${ifDefined(this.pattern || undefined)}\n minlength=${ifDefined(this.minlength || undefined)}\n maxlength=${ifDefined(this.maxlength >= 0 ? this.maxlength : undefined)}\n min=${ifDefined(this.min || undefined)}\n max=${ifDefined(this.max || undefined)}\n step=${ifDefined(this.step || undefined)}\n class=${[hasError ? \"has-error\" : \"\", this.revealable && this.type === \"password\" ? \"has-reveal\" : \"\"].join(\" \")}\n @input=${this._handleInput}\n @change=${this.handleChange}\n @keydown=${this.handleKeyDown}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n />`;\n }\n\n render() {\n const hasError = Boolean(this.error || this.errorText);\n const root = this.getRootNode() as Document | ShadowRoot;\n const description = (this.ariaDescribedBy ?? \"\")\n .split(/\\s+/)\n .filter(Boolean)\n .map((id) => root.getElementById?.(id)?.textContent?.trim() ?? \"\")\n .filter(Boolean)\n .join(\" \");\n\n return html`\n <div class=\"input-wrapper\">\n ${\n this.label || this.labelText\n ? html`\n <label for=\"input\">\n ${this.labelText ? html`<ds-text .text=${this.labelText}></ds-text>` : this.label}\n </label>\n `\n : null\n }\n\n <div class=\"input-container\">\n ${this.renderControl(hasError, description)}\n ${\n !this.isMultiline && this.revealable && this.type === \"password\"\n ? html`\n <button\n class=\"password-visibility\"\n part=\"reveal\"\n type=\"button\"\n aria-label=${getText(this._passwordVisible ? \"Hide password\" : \"Show password\")}\n aria-pressed=${String(this._passwordVisible)}\n ?disabled=${this.disabled || this._formDisabled}\n @pointerdown=${(event: PointerEvent) => event.preventDefault()}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") event.stopPropagation();\n }}\n @click=${this.togglePassword}\n >\n <span\n aria-hidden=\"true\"\n style=${`--eye-icon: url(\"${this._passwordVisible ? unseeIcon : seeIcon}\")`}\n ></span>\n </button>\n `\n : null\n }\n </div>\n\n ${description ? html`<span id=\"description\" hidden>${description}</span>` : null}\n ${\n hasError\n ? html`\n <div id=\"error\" class=\"error-message\" role=\"status\">\n ${this.errorText ? html`<ds-text .text=${this.errorText}></ds-text>` : this.error}\n </div>\n `\n : null\n }\n </div>\n `;\n }\n}\n\ndefine(\"ds-input\", Input);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-input\": Input;\n }\n}\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n width: max-content;\n max-width: 100%;\n min-width: 0;\n height: var(--ds-row-height);\n border-radius: var(--ds-radius);\n corner-shape: var(--ds-corner-shape, round);\n}\n:host([hidden]) { display: none !important; }\nds-button {\n --ds-button-height: var(--ds-row-height);\n pointer-events: none;\n max-width: 100%;\n overflow: hidden;\n}\n:host([icon]) { width: var(--ds-row-height); }\n:host([preview]) { width: calc(4 * var(--ds-unit)); height: calc(4 * var(--ds-unit)); }\n:host([preview]) ds-button { --ds-button-height: calc(4 * var(--ds-unit)); }\n:host([preview][compact]) { width: calc(2 * var(--ds-unit)); height: calc(2 * var(--ds-unit)); }\n:host([preview][compact]) ds-button { --ds-button-height: calc(2 * var(--ds-unit)); }\n::slotted([slot=\"content\"]) { display: inline-flex; align-items: center; justify-content: center; gap: calc(var(--ds-unit) / 2); pointer-events: none; }\n:host([preview]) ::slotted([slot=\"content\"]) { width: 100%; height: 100%; }\n:host([area]) { width: 100%; height: calc(8 * var(--ds-unit)); }\n:host([area]) ds-button { width: 100%; --ds-button-height: calc(8 * var(--ds-unit)); }\n:host([area][compact]) { height: calc(4 * var(--ds-unit)); }\n:host([area][compact]) ds-button { --ds-button-height: calc(4 * var(--ds-unit)); }\n:host([area]) slot[name=\"content\"] { display: block; width: 100%; text-align: center; white-space: normal; }\n:host([area]) ::slotted([slot=\"content\"]) { box-sizing: border-box; width: 100%; padding: var(--ds-unit); white-space: normal; }\n/* The native control is the only focusable hit target. It is not display:none:\n labels, keyboard activation, required validation and file drops stay native. */\n::slotted(input[type=\"file\"]) {\n position: absolute !important;\n inset: 0 !important;\n box-sizing: border-box !important;\n display: block !important;\n width: 100% !important;\n height: 100% !important;\n min-width: 0 !important;\n min-height: 0 !important;\n max-width: none !important;\n max-height: none !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 0 !important;\n opacity: 0 !important;\n clip: auto !important;\n clip-path: none !important;\n overflow: hidden !important;\n cursor: pointer !important;\n}\n::slotted(input[type=\"file\"]:disabled) { cursor: default !important; }\n::slotted(input[hidden]) { display: none !important; }\n:host(:focus-within) { outline: 2px solid var(--ds-focus-ring); outline-offset: 1px; }\n:host(:is([secondary], [area]):hover:not([data-disabled])) ds-button { --ds-button-background: var(--ds-fill-hover); }\n:host(:is([data-dragging], [dragging]):not([data-disabled])) { outline: 2px solid var(--ds-focus-ring); outline-offset: 1px; }\n:host(:is([data-dragging], [dragging]):not([data-disabled])) ds-button { --ds-button-background: var(--ds-fill-hover); }\n\n/* A native file input can be an action in Menu without a second click target. */\n:host([data-menu-item]) { width: 100%; }\n:host([data-menu-item]) ds-button { width: 100%; --ds-button-padding: 0 calc(4px * var(--ds-sf)); }\n:host([data-menu-item]:is(:hover, :focus-within):not([data-disabled])) ds-button { --ds-button-background: var(--ds-fill); }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport \"./ds-button\";\nimport styles from \"./styles/ds-file-picker.css?inline\";\n\n/** Native file selection, forms and focus, with one shared Button face. */\nexport class FilePicker extends LitElement {\n static properties = {\n label: { type: String },\n icon: { type: Boolean, reflect: true },\n preview: { type: Boolean, reflect: true },\n area: { type: Boolean, reflect: true },\n dragging: { type: Boolean, reflect: true },\n compact: { type: Boolean, reflect: true },\n primary: { type: Boolean, reflect: true },\n secondary: { type: Boolean, reflect: true },\n };\n static styles = unsafeCSS(styles);\n declare label: string;\n declare icon: boolean;\n declare preview: boolean;\n declare area: boolean;\n declare dragging: boolean;\n declare compact: boolean;\n declare primary: boolean;\n declare secondary: boolean;\n private controlDisabled = false;\n private observer = new MutationObserver(() => this.syncDisabled());\n constructor() {\n super();\n this.label = \"\";\n this.icon = this.preview = this.area = this.dragging = this.compact = this.primary = this.secondary = false;\n }\n private control() { return this.querySelector<HTMLInputElement>(\":scope > input[type=file]\"); }\n private syncDisabled() {\n if (!this.isConnected) return;\n const control = this.control();\n this.toggleAttribute(\"data-menu-item\", control?.getAttribute(\"role\") === \"menuitem\");\n this.controlDisabled = !control || control.matches(\":disabled\");\n this.toggleAttribute(\"data-disabled\", this.controlDisabled);\n if (this.controlDisabled) this.clearDrag();\n this.requestUpdate();\n }\n private showDrag = (event: DragEvent) => {\n const control = this.control();\n if (control && !control.matches(\":disabled\") && event.dataTransfer?.types.includes(\"Files\")) {\n this.setAttribute(\"data-dragging\", \"\");\n }\n };\n private clearDrag = () => { this.removeAttribute(\"data-dragging\"); };\n private observeControl() {\n this.observer.disconnect();\n if (!this.isConnected) return;\n const control = this.control();\n if (control) this.observer.observe(control, { attributes: true, attributeFilter: [\"disabled\", \"role\"] });\n for (let parent = this.parentElement; parent; parent = parent.parentElement) {\n if (parent.localName === \"fieldset\") this.observer.observe(parent, { attributes: true, attributeFilter: [\"disabled\"] });\n }\n this.syncDisabled();\n }\n connectedCallback() {\n super.connectedCallback(); this.observeControl();\n this.addEventListener(\"dragenter\", this.showDrag);\n this.addEventListener(\"dragleave\", this.clearDrag);\n this.addEventListener(\"drop\", this.clearDrag);\n }\n disconnectedCallback() {\n this.observer.disconnect(); this.clearDrag();\n this.removeEventListener(\"dragenter\", this.showDrag);\n this.removeEventListener(\"dragleave\", this.clearDrag);\n this.removeEventListener(\"drop\", this.clearDrag);\n super.disconnectedCallback();\n }\n focus(options?: FocusOptions) { this.control()?.focus(options); }\n render() {\n return html`<ds-button control=\"host\" inert aria-hidden=\"true\" tabindex=\"-1\"\n .icon=${!this.area && (this.icon || this.preview)} .primary=${this.primary} .secondary=${this.secondary || this.area}\n .disabled=${this.controlDisabled}><slot name=\"content\">${this.label}</slot></ds-button>\n <slot @slotchange=${this.observeControl}></slot>`;\n }\n}\ndefine(\"ds-file-picker\", FilePicker);\ndeclare global { interface HTMLElementTagNameMap { \"ds-file-picker\": FilePicker } }\n","/* A text area spans whole rows; shared input styles own its field treatment. */\n.row-metric {\n position: absolute;\n width: 0;\n height: var(--ds-row-height);\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n}\n/* Pill-shaped corners would cut into multiline writing. A text area's field\n * corners stay small independently of the surrounding control preference. */\n:host([variant=\"field\"]) textarea {\n border-radius: var(--ds-textarea-radius, calc(4px * var(--ds-sf)));\n corner-shape: var(--ds-textarea-corner-shape, squircle);\n}\n:host([variant]) textarea {\n height: var(--ds-textarea-height, calc(var(--ds-textarea-rows, 3) * var(--ds-row-height)));\n min-height: var(--ds-row-height);\n padding: var(--ds-textarea-padding, calc(4px * var(--ds-sf)));\n resize: vertical;\n}\n:host([variant=\"plain\"]) textarea {\n padding: 0;\n}\n:host([auto-grow]) textarea {\n resize: none;\n}\n","import { html, unsafeCSS, type CSSResultGroup } from \"lit\";\nimport { live } from \"lit/directives/live.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { define } from \"../0-face/define\";\nimport { Input } from \"./ds-input\";\nimport styles from \"./styles/ds-textarea.css?inline\";\n\n/** Multiline text shares values, labels, validation and forms with ds-input. */\nexport class Textarea extends Input {\n static properties = {\n rows: { type: Number },\n maxRows: { type: Number, attribute: \"max-rows\" },\n autoGrow: { type: Boolean, attribute: \"auto-grow\", reflect: true },\n wrap: { type: String },\n };\n static styles: CSSResultGroup = [Input.styles, unsafeCSS(styles)];\n declare rows: number;\n declare maxRows: number;\n declare autoGrow: boolean;\n declare wrap: \"soft\" | \"hard\" | \"off\";\n private resizeFrame = 0;\n private measuredWidth = 0;\n private resizeObserver?: ResizeObserver;\n private readonly fontsChanged = () => this.resizeToContent();\n protected get isMultiline(): boolean {\n return true;\n }\n\n constructor() {\n super();\n this.variant = \"field\";\n this.rows = 3;\n this.maxRows = 10;\n this.autoGrow = false;\n this.wrap = \"soft\";\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n if (typeof ResizeObserver !== \"undefined\") {\n this.resizeObserver = new ResizeObserver((entries) => {\n if (this.clientWidth !== this.measuredWidth || entries.some(entry => entry.target !== this)) {\n this.measuredWidth = this.clientWidth;\n this.resizeToContent();\n }\n });\n this.resizeObserver.observe(this);\n const metric = this.shadowRoot?.querySelector(\".row-metric\");\n if (metric) this.resizeObserver.observe(metric);\n }\n document.fonts?.addEventListener(\"loadingdone\", this.fontsChanged);\n }\n\n firstUpdated(): void {\n super.firstUpdated();\n // A fixed-width field can change scale without changing its width. Measure\n // one shared row separately from the content height that we set ourselves.\n const metric = this.shadowRoot?.querySelector(\".row-metric\");\n if (metric) this.resizeObserver?.observe(metric);\n }\n\n disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n document.fonts?.removeEventListener(\"loadingdone\", this.fontsChanged);\n cancelAnimationFrame(this.resizeFrame);\n super.disconnectedCallback();\n }\n\n updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n this.resizeToContent();\n }\n\n /** Grow on the row grid, bounded by maxRows; the remainder scrolls. */\n private resizeToContent(): void {\n cancelAnimationFrame(this.resizeFrame);\n const control = this.input;\n if (!control) return;\n if (!this.autoGrow) {\n control.style.height = \"\";\n control.style.overflowY = \"\";\n return;\n }\n this.resizeFrame = requestAnimationFrame(() => {\n if (!this.isConnected) return;\n const computed = getComputedStyle(control);\n const row =\n parseFloat(computed.getPropertyValue(\"--ds-row-height\")) ||\n 20 * (parseFloat(computed.getPropertyValue(\"--ds-sf\")) || 1);\n const minimum = Math.max(1, Math.floor(this.rows || 1)) * row;\n const maximum = Math.max(minimum, Math.floor(this.maxRows || this.rows || 1) * row);\n control.style.height = \"0px\";\n const border = parseFloat(computed.borderTopWidth) + parseFloat(computed.borderBottomWidth);\n const needed = Math.ceil((control.scrollHeight + border) / row) * row;\n control.style.height = `${Math.max(minimum, Math.min(maximum, needed))}px`;\n control.style.overflowY = needed > maximum ? \"auto\" : \"hidden\";\n });\n }\n\n protected renderControl(hasError: boolean, description: string) {\n return html`<span class=\"row-metric\" aria-hidden=\"true\"></span><textarea\n id=\"input\"\n part=\"input\"\n aria-label=${ifDefined(this.accessibleLabel())}\n aria-invalid=${ifDefined(this.ariaInvalid || (hasError ? \"true\" : undefined))}\n aria-describedby=${ifDefined([description ? \"description\" : \"\", hasError ? \"error\" : \"\"].filter(Boolean).join(\" \") || undefined)}\n inputmode=${ifDefined(this.inputMode || undefined)}\n spellcheck=${ifDefined(this.spellcheckHint || undefined)}\n .name=${this.name}\n .value=${live(this.value)}\n .placeholder=${this._placeholder || this.placeholder}\n ?disabled=${this.disabled || this._formDisabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n autocomplete=${this.autocomplete}\n minlength=${ifDefined(this.minlength || undefined)}\n maxlength=${ifDefined(this.maxlength >= 0 ? this.maxlength : undefined)}\n rows=${Math.max(1, Math.floor(this.rows || 1))}\n wrap=${this.wrap || \"soft\"}\n style=${styleMap({ \"--ds-textarea-rows\": String(Math.max(1, Math.floor(this.rows || 1))) })}\n class=${hasError ? \"has-error\" : \"\"}\n @input=${this._handleInput}\n @change=${this.handleChange}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n ></textarea>`;\n }\n}\ndefine(\"ds-textarea\", Textarea);\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-textarea\": Textarea;\n }\n}\n","@import \"../../1-root/component-metrics.css\";\n\n:host { display: block; position: relative; width: 100%; min-width: 0; }\n:host([hidden]) { display: none !important; }\n.row-metric { position: absolute; width: 0; height: var(--ds-row-height); visibility: hidden; pointer-events: none; }\n::slotted(textarea), .mirror {\n box-sizing: border-box !important;\n margin: 0 !important;\n padding: calc(4px * var(--ds-sf)) !important;\n border: 1px solid var(--ds-border-color) !important;\n border-radius: calc(4px * var(--ds-sf)) !important;\n font-family: var(--ds-typeface-regular) !important;\n font-size: var(--ds-type-size-default) !important;\n font-weight: var(--ds-type-weight-default) !important;\n line-height: var(--ds-type-lineheight-default) !important;\n letter-spacing: var(--ds-type-letterspacing-default) !important;\n text-align: start !important;\n text-indent: 0 !important;\n text-transform: none !important;\n white-space: pre-wrap !important;\n overflow-wrap: break-word !important;\n word-break: normal !important;\n tab-size: 8 !important;\n color: var(--ds-text-color) !important;\n}\n::slotted(textarea) {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n min-width: 0 !important;\n max-width: 100% !important;\n height: var(--composer-height, calc(var(--composer-rows, 3) * var(--ds-row-height))) !important;\n min-height: var(--ds-row-height) !important;\n max-height: none !important;\n overflow-y: var(--composer-overflow, auto) !important;\n background: var(--ds-fill) !important;\n caret-color: var(--ds-text-color) !important;\n box-shadow: none !important;\n outline: none !important;\n resize: vertical !important;\n}\n::slotted(textarea:focus-visible) { outline: 1px solid var(--ds-focus-ring) !important; outline-offset: -1px !important; }\n::slotted(textarea:disabled) { opacity: .5 !important; cursor: not-allowed !important; resize: none !important; }\n.mirror { position: absolute; top: 0; left: 0; overflow: hidden; pointer-events: none; border-color: transparent !important; }\nmark { padding: 0; margin: 0; border: 0; font: inherit; letter-spacing: inherit; color: color-mix(in srgb, var(--composer-highlight-color, var(--ds-accent-color)) 30%, var(--ds-text-color)); background: transparent; }\n:host(:not([data-highlighted])) .mirror { display: none; }\n:host([data-highlighted]) ::slotted(textarea) { color: transparent !important; -webkit-text-fill-color: transparent !important; }\n:host(:has(> textarea:disabled)) .mirror { opacity: .5; }\n:host([variant=\"plain\"]) ::slotted(textarea), :host([variant=\"plain\"]) .mirror { padding: 0 !important; border: 0 !important; border-radius: 0 !important; background: transparent !important; }\n:host([auto-grow]) ::slotted(textarea) { resize: none !important; }\n:host([data-nowrap]) ::slotted(textarea), :host([data-nowrap]) .mirror { white-space: pre !important; overflow-wrap: normal !important; }\n@media (forced-colors: active) {\n .mirror { display: none !important; }\n :host([data-highlighted]) ::slotted(textarea) { color: CanvasText !important; -webkit-text-fill-color: CanvasText !important; caret-color: CanvasText !important; }\n}\n","/* Native pseudo-elements cannot be reached through ::slotted in every engine. */\nds-composer > textarea::placeholder {\n color: var(--ds-text-color-muted) !important;\n -webkit-text-fill-color: var(--ds-text-color-muted) !important;\n opacity: 1 !important;\n}\nds-composer > textarea::selection {\n background: var(--ds-accent-color);\n color: var(--ds-text-color);\n -webkit-text-fill-color: var(--ds-text-color);\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { define } from \"../0-face/define\";\nimport styles from \"./styles/ds-composer.css?inline\";\nimport \"./styles/ds-composer-frame.css\";\nimport frameStyles from \"./styles/ds-composer-frame.css?inline\";\n\nconst styledRoots = new WeakSet<ShadowRoot>();\nfunction styleRoot(root: Node) {\n if (!(root instanceof ShadowRoot) || styledRoots.has(root)) return;\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(frameStyles);\n root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];\n styledRoots.add(root);\n}\n\nexport type TextHighlight = { start: number; end: number; color?: string };\n\n/** A native writing field with metric-preserving highlights. Products own the\n * text and mention data; DS1 owns its face, growth and synchronized overlay.\n * Keeping the textarea in light DOM preserves native forms and ARIA ID refs.\n */\nexport class Composer extends LitElement {\n static properties = {\n highlights: { attribute: false },\n autoGrow: { type: Boolean, attribute: \"auto-grow\", reflect: true },\n maxRows: { type: Number, attribute: \"max-rows\" },\n variant: { type: String, reflect: true },\n text: { state: true },\n };\n static styles = unsafeCSS(styles);\n declare highlights: TextHighlight[];\n declare autoGrow: boolean;\n declare maxRows: number;\n declare variant: \"field\" | \"plain\";\n private declare text: string;\n private control: HTMLTextAreaElement | null = null;\n private form: HTMLFormElement | null = null;\n private frame = 0;\n private width = 0;\n private observer?: ResizeObserver;\n private mutations = new MutationObserver(() => this.refresh());\n private readonly edited = () => {\n this.refresh();\n // Controlled frameworks can restore a declined edit after input bubbles.\n queueMicrotask(() => { if (this.isConnected) this.refresh(); });\n };\n private readonly scrolled = () => this.syncScroll();\n private readonly reset = () => queueMicrotask(() => this.refresh());\n private readonly fontLoaded = () => this.refresh();\n\n constructor() {\n super();\n this.highlights = [];\n this.autoGrow = false;\n this.maxRows = 12;\n this.variant = \"field\";\n this.text = \"\";\n }\n\n connectedCallback() {\n super.connectedCallback();\n styleRoot(this.getRootNode());\n document.fonts?.addEventListener(\"loadingdone\", this.fontLoaded);\n this.bindControl();\n }\n firstUpdated() { this.bindControl(); }\n disconnectedCallback() {\n this.releaseControl();\n document.fonts?.removeEventListener(\"loadingdone\", this.fontLoaded);\n cancelAnimationFrame(this.frame);\n super.disconnectedCallback();\n }\n private releaseControl() {\n this.control?.removeEventListener(\"input\", this.edited);\n this.control?.removeEventListener(\"change\", this.edited);\n this.control?.removeEventListener(\"scroll\", this.scrolled);\n this.form?.removeEventListener(\"reset\", this.reset);\n this.form = null;\n this.observer?.disconnect();\n this.mutations.disconnect();\n }\n private bindControl() {\n this.releaseControl();\n this.control = Array.from(this.children).find(child => child.localName === \"textarea\") as HTMLTextAreaElement | undefined ?? null;\n const control = this.control;\n if (!control) { this.text = \"\"; return; }\n control.addEventListener(\"input\", this.edited);\n control.addEventListener(\"change\", this.edited);\n control.addEventListener(\"scroll\", this.scrolled);\n this.mutations.observe(control, { attributes: true, attributeFilter: [\"rows\", \"wrap\", \"dir\", \"form\"], childList: true, characterData: true, subtree: true });\n if (typeof ResizeObserver !== \"undefined\") {\n this.observer = new ResizeObserver(entries => {\n this.syncScroll();\n if (control.clientWidth !== this.width || entries.some(entry => entry.target !== control)) {\n this.width = control.clientWidth;\n this.refresh();\n }\n });\n this.observer.observe(control);\n const metric = this.shadowRoot?.querySelector(\".row-metric\");\n if (metric) this.observer.observe(metric);\n }\n this.refresh();\n }\n /** Call after programmatic native-value changes. React's adapter does this. */\n refresh() {\n const control = this.control;\n if (!control) return;\n if (this.form !== control.form) {\n this.form?.removeEventListener(\"reset\", this.reset);\n this.form = control.form;\n this.form?.addEventListener(\"reset\", this.reset);\n }\n this.text = control.value;\n this.style.setProperty(\"--composer-rows\", String(Math.max(1, control.rows || 1)));\n this.toggleAttribute(\"data-nowrap\", control.wrap === \"off\");\n this.requestUpdate();\n }\n updated() {\n this.toggleAttribute(\"data-highlighted\", this.validHighlights().length > 0);\n cancelAnimationFrame(this.frame);\n this.frame = requestAnimationFrame(() => {\n const control = this.control;\n if (!this.isConnected || !control) return;\n // Browsers may run microtasks between native and framework listeners.\n // Read the settled native value before painting a controlled edit.\n if (this.text !== control.value) { this.text = control.value; return; }\n if (this.autoGrow) {\n const row = this.shadowRoot!.querySelector(\".row-metric\")!.getBoundingClientRect().height || 20;\n const minimum = Math.max(1, control.rows || 1) * row;\n const maximum = Math.max(minimum, Math.floor(this.maxRows || 1) * row);\n const scrollTop = control.scrollTop;\n this.style.setProperty(\"--composer-height\", \"0px\");\n const css = getComputedStyle(control);\n const border = parseFloat(css.borderTopWidth) + parseFloat(css.borderBottomWidth);\n const needed = Math.ceil((control.scrollHeight + border) / row) * row;\n this.style.setProperty(\"--composer-height\", `${Math.max(minimum, Math.min(maximum, needed))}px`);\n this.style.setProperty(\"--composer-overflow\", needed > maximum ? \"auto\" : \"hidden\");\n control.scrollTop = scrollTop;\n } else {\n this.style.removeProperty(\"--composer-height\");\n this.style.removeProperty(\"--composer-overflow\");\n }\n this.syncScroll();\n });\n this.syncScroll();\n }\n private syncScroll() {\n const mirror = this.shadowRoot?.querySelector<HTMLElement>(\".mirror\");\n const control = this.control;\n if (!mirror || !control) return;\n // clientWidth excludes the scrollbar, so both layers wrap at the same x.\n const css = getComputedStyle(control);\n mirror.style.width = `${control.clientWidth + parseFloat(css.borderLeftWidth) + parseFloat(css.borderRightWidth)}px`;\n mirror.style.height = `${control.offsetHeight}px`;\n mirror.style.left = `${control.offsetLeft}px`;\n mirror.style.top = `${control.offsetTop}px`;\n mirror.dir = control.dir;\n mirror.scrollTop = control.scrollTop;\n mirror.scrollLeft = control.scrollLeft;\n }\n private validHighlights() {\n let end = 0;\n return [...(this.highlights ?? [])]\n .filter(range => Number.isInteger(range.start) && Number.isInteger(range.end) && range.start >= 0 && range.end > range.start && range.end <= this.text.length)\n .sort((a, b) => a.start - b.start || b.end - a.end)\n .filter(range => { if (range.start < end) return false; end = range.end; return true; });\n }\n focus(options?: FocusOptions) { this.control?.focus(options); }\n render() {\n let cursor = 0;\n const parts = this.validHighlights().map(range => {\n const before = this.text.slice(cursor, range.start);\n cursor = range.end;\n return html`${before}<mark style=${styleMap({ \"--composer-highlight-color\": range.color || undefined })}>${this.text.slice(range.start, range.end)}</mark>`;\n });\n return html`<span class=\"row-metric\" aria-hidden=\"true\"></span><slot @slotchange=${this.bindControl}></slot><div class=\"mirror\" aria-hidden=\"true\">${parts}${this.text.slice(cursor)}${\"\\n\"}</div>`;\n }\n}\ndefine(\"ds-composer\", Composer);\ndeclare global { interface HTMLElementTagNameMap { \"ds-composer\": Composer } }\n","/* ds-language.css */\n/* The language picker: one item, one square high, eight squares wide */\n@import \"../../1-root/component-metrics.css\";\n\n:host {\n display: inline-block;\n vertical-align: top;\n /* An item's pitch less the 1px correction, as every item is drawn */\n width: calc(160px * var(--ds-sf) - 1px);\n height: calc(var(--ds-unit) - 1px);\n max-width: 100%;\n min-width: 0;\n}\n\n/* Four squares, an ordinary item, when every label the product offers fits */\n:host([compact]) {\n width: calc(80px * var(--ds-sf) - 1px);\n}\n\n:host([chip]) {\n display: inline-flex;\n flex: 0 0 auto;\n width: max-content;\n height: var(--ds-control-height);\n}\n:host([chip]) ds-button {\n --ds-button-height: var(--ds-control-height);\n}\n\n:host(:not([chip])) button {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0 calc(4px * var(--ds-sf));\n border: 0;\n border-radius: 0;\n background-color: var(--ds-button-background-color-secondary);\n color: var(--ds-button-text-color-secondary, var(--ds-button-text-color));\n font-family: var(--ds-typeface-regular);\n font-size: var(--ds-type-size-default);\n font-weight: var(--ds-type-weight-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n\n:host(:not([chip])[primary]) button,\n:host(:not([chip])[variant=\"primary\"]) button {\n background-color: var(--ds-button-background-color-primary);\n color: var(--ds-button-text-color-on-accent);\n}\n\nbutton:focus-visible {\n outline: 1px solid currentColor;\n outline-offset: -1px;\n}\n\nbutton:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n/* Each name is set in its own language's typeface */\nbutton:lang(ja) {\n --ds-typeface-regular: var(--typeface-regular-jp, sans-serif);\n}\n\nbutton:lang(zh) {\n --ds-typeface-regular: var(--typeface-regular-zh, sans-serif);\n}\n","import { html, unsafeCSS } from \"lit\";\nimport {\n currentLanguage,\n getAvailableLanguagesSync,\n getLanguageDisplayName,\n translate,\n} from \"../0-face/i18n\";\nimport { LANGUAGE_METADATA, isLanguage, normalizeLanguage } from \"../0-face/languages\";\nimport { Cycle } from \"./ds-cycle\";\nimport { define } from \"../0-face/define\";\nimport styles from \"./styles/ds-language.css?inline\";\n\n/**\n * A language's name in the language itself (`Dansk`, `日本語`): from the\n * language list, else from the browser, else the code.\n */\nexport function nativeLanguageName(code: string): string {\n if (!code) {\n return \"\";\n }\n if (isLanguage(code)) {\n return LANGUAGE_METADATA[code].nativeLabel;\n }\n const member = normalizeLanguage(code, null);\n if (member) {\n return LANGUAGE_METADATA[member].nativeLabel;\n }\n return getLanguageDisplayName(code, { locale: code });\n}\n\n/**\n * The language picker: ds-cycle's language cycle, showing each language by\n * its own name. A press moves to the next of the product's languages\n * (`configureI18n({ languages })`), sets it and remembers it; when something\n * else changes the language, the picker follows.\n *\n * One square high and eight wide, an item drawn as every item is; `compact`\n * makes it four squares wide.\n *\n * @element ds-language\n * @attr {boolean} compact - Four squares wide instead of eight\n * @attr {string} variant - `primary` paints it in the accent colour\n *\n * @example\n * <ds-language></ds-language>\n */\nexport class LanguagePicker extends Cycle {\n static get properties() { return { ...Cycle.properties, chip: { type: Boolean, reflect: true } }; }\n declare chip: boolean;\n static styles = unsafeCSS(styles);\n\n constructor() {\n super();\n this.type = \"language\";\n this.chip = false;\n }\n\n // The product's languages can change after the picker is drawn\n async setupInitialValue() {\n this.values = getAvailableLanguagesSync();\n await super.setupInitialValue();\n }\n\n getValueDisplay(value: string): string {\n return nativeLanguageName(value);\n }\n\n focus(options?: FocusOptions) { this.shadowRoot?.querySelector(\"button\")?.focus(options); }\n\n render() {\n const code = this.currentValue || currentLanguage.value;\n const name = nativeLanguageName(code);\n const button = html`<button\n type=\"button\"\n lang=${code}\n aria-label=${`${translate(\"Language\")}: ${name}`}\n ?disabled=${this.disabled || this._fieldsetDisabled}\n @click=${(event: Event) => this.handleButtonClick(event)}\n >\n ${name}\n </button>`;\n return this.chip ? html`<ds-button fit control=\"slotted\"\n ?primary=${this.primary && !this.secondary} ?secondary=${this.secondary}\n ?disabled=${this.disabled || this._fieldsetDisabled}>${button}</ds-button>` : button;\n }\n}\n\ndefine(\"ds-language\", LanguagePicker);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-language\": LanguagePicker;\n }\n}\n",":host {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.bubble {\n box-sizing: border-box;\n position: absolute;\n left: 50%;\n bottom: calc(100% + 2px * var(--ds-sf, var(--sf, 1)));\n transform: translateX(-50%);\n z-index: var(--ds-tooltip-z-index, 1000);\n width: max-content;\n max-width: min(calc(320px * var(--ds-sf, var(--sf, 1))), calc(100vw - 20px));\n min-height: calc(16px * var(--ds-sf, var(--sf, 1)));\n padding: 0 calc(2.5px * var(--ds-sf, var(--sf, 1)));\n border-radius: calc(4px * var(--ds-sf, var(--sf, 1)));\n background: var(--ds-tooltip-background, light-dark(var(--ds-black, var(--black)), var(--ds-white, var(--white))));\n color: var(--ds-tooltip-color, light-dark(var(--ds-white, var(--white)), var(--ds-black, var(--black))));\n font-family: var(--ds-typeface-regular, var(--typeface-regular));\n font-size: calc(14px * var(--ds-sf, var(--sf, 1)));\n line-height: calc(16px * var(--ds-sf, var(--sf, 1)));\n font-weight: 400;\n letter-spacing: var(--ds-type-letterspacing-default, 0);\n text-align: center;\n white-space: normal;\n overflow-wrap: anywhere;\n pointer-events: none;\n}\n\n.bubble[hidden] { display: none; }\n\n:host([placement=\"bottom\"]) .bubble {\n bottom: auto;\n top: calc(100% + 2px * var(--ds-sf, var(--sf, 1)));\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { translate } from \"../0-face/i18n\";\nimport { define } from \"../0-face/define\";\nimport styles from \"./styles/ds-tooltip.css?inline\";\n\nlet nextDescription = 0;\n\n/** A translated or literal label for one slotted control. */\nexport class Tooltip extends LitElement {\n static properties = {\n text: { type: String },\n defaultValue: { type: String, attribute: \"default-value\" },\n literal: { type: Boolean },\n placement: { type: String, reflect: true },\n _visible: { state: true },\n };\n\n declare text: string;\n declare defaultValue: string;\n declare literal: boolean;\n declare placement: \"top\" | \"bottom\";\n declare private _visible: boolean;\n private hovered = false;\n private focused = false;\n private trigger?: HTMLElement;\n private description?: HTMLSpanElement;\n\n constructor() {\n super();\n this.text = \"\";\n this.defaultValue = \"\";\n this.literal = false;\n this.placement = \"top\";\n this._visible = false;\n this.addEventListener(\"mouseenter\", () => { this.hovered = true; this._visible = true; });\n this.addEventListener(\"mouseleave\", () => { this.hovered = false; this._visible = this.focused; });\n this.addEventListener(\"focusin\", () => { this.focused = true; this._visible = true; });\n this.addEventListener(\"focusout\", event => {\n if (event.relatedTarget instanceof Node && this.contains(event.relatedTarget)) return;\n this.focused = false;\n this._visible = this.hovered;\n });\n this.addEventListener(\"keydown\", event => {\n if (event.key === \"Escape\") this._visible = false;\n });\n }\n\n static styles = unsafeCSS(styles);\n\n private languageChanged = () => this.requestUpdate();\n\n connectedCallback(): void {\n super.connectedCallback();\n this.requestUpdate();\n window.addEventListener(\"language-changed\", this.languageChanged);\n window.addEventListener(\"translations-loaded\", this.languageChanged);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(\"language-changed\", this.languageChanged);\n window.removeEventListener(\"translations-loaded\", this.languageChanged);\n this.releaseDescription();\n this.hovered = this.focused = this._visible = false;\n }\n\n private get label(): string {\n if (this.literal) return this.text || this.defaultValue;\n if (!this.text) return this.defaultValue;\n const translated = translate(this.text);\n return translated !== this.text ? translated : this.defaultValue || this.text;\n }\n\n private releaseDescription(): void {\n if (!this.trigger || !this.description) return;\n const ids = (this.trigger.getAttribute(\"aria-describedby\") || \"\").split(/\\s+/)\n .filter(id => id && id !== this.description!.id);\n if (ids.length) this.trigger.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else this.trigger.removeAttribute(\"aria-describedby\");\n this.trigger = undefined;\n }\n\n // ID references cannot cross a shadow boundary. Keep a hidden description\n // beside the consumer's children, never replacing or moving those children.\n private describe = (): void => {\n const trigger = this.querySelector<HTMLElement>(\"button, a[href], input, select, textarea, [tabindex], [role=button], [role=tab]\")\n ?? [...this.children].find(child => child !== this.description) as HTMLElement | undefined;\n this.releaseDescription();\n if (!trigger || !this.label) return;\n if (!this.description) {\n this.description = document.createElement(\"span\");\n this.description.id = `ds-tooltip-${++nextDescription}`;\n this.description.slot = \"description\";\n this.description.hidden = true;\n }\n this.description.textContent = this.label;\n if (!this.description.isConnected) this.append(this.description);\n this.trigger = trigger;\n const ids = (trigger.getAttribute(\"aria-describedby\") || \"\").split(/\\s+/).filter(Boolean);\n trigger.setAttribute(\"aria-describedby\", [...ids, this.description.id].join(\" \"));\n };\n\n updated(): void { this.describe(); }\n\n render() {\n return html`<slot @slotchange=${this.describe}></slot>\n <span class=\"bubble\" role=\"tooltip\" aria-hidden=\"true\" ?hidden=${!this._visible || !this.label}>${this.label}</span>`;\n }\n}\n\ndefine(\"ds-tooltip\", Tooltip);\n\ndeclare global {\n interface HTMLElementTagNameMap { \"ds-tooltip\": Tooltip; }\n}\n","@import \"../../1-root/component-metrics.css\";\n\n/* ds-row.css */\n\n:host {\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n align-items: var(--ds-row-align, center);\n gap: var(--ds-row-gap, calc(4px * var(--ds-sf)));\n min-width: 0;\n height: var(--ds-row-default-height, var(--ds-row-height));\n}\n\n:host([auto]) {\n height: auto;\n}\n\n:host([fill]) {\n justify-content: space-between;\n width: 100%;\n}\n\n:host([centered]) {\n justify-content: center;\n}\n\n:host([end]) {\n justify-content: flex-end;\n}\n\n:host([fill]), :host([centered]), :host([end]) {\n height: var(--ds-row-height);\n}\n:host([centered]), :host([end]) {\n gap: var(--ds-row-packed-gap, var(--ds-row-gap, calc(4px * var(--ds-sf))));\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-row.css?inline\";\nimport { define } from \"../0-face/define\";\n\n/**\n * A horizontal run of elements one row (`--ds-row-height`) tall.\n *\n * @element ds-row\n * @attr fill - Spread the children from edge to edge.\n * @attr centered - Centre the children.\n * @attr end - Push the children to the end.\n * @attr auto - Size to the content instead of one row.\n */\nexport class Row extends LitElement {\n static properties = {\n fill: { type: Boolean, reflect: true },\n centered: { type: Boolean, reflect: true },\n end: { type: Boolean, reflect: true },\n auto: { type: Boolean, reflect: true },\n };\n\n declare fill: boolean;\n declare centered: boolean;\n declare end: boolean;\n declare auto: boolean;\n\n constructor() {\n super();\n this.fill = false;\n this.centered = false;\n this.end = false;\n this.auto = false;\n }\n\n static styles = unsafeCSS(styles);\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-row\", Row);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-row\": Row;\n }\n}\n","/* ds-accordion.css */\n/* Accordion component styles using native <details>/<summary> */\n@import \"../../1-root/component-metrics.css\";\n\n:host {\n display: block;\n width: var(--ds-accordion-width, calc(12 * var(--ds-unit)));\n max-width: 100%;\n color: var(--ds-text-color);\n}\n\ndetails {\n width: 100%;\n}\n\nsummary {\n cursor: pointer;\n user-select: none;\n list-style: none;\n outline: none;\n}\n\nsummary::-webkit-details-marker {\n display: none;\n}\n\n.summaryRow {\n width: 100%;\n}\n\nds-icon.chevron {\n transform: rotate(0deg);\n transition: transform 140ms ease;\n}\n\ndetails[open] ds-icon.chevron {\n transform: rotate(180deg);\n}\n\n.detailsBody {\n padding-top: calc(var(--half) * var(--sf));\n}\n\n.detailsText {\n display: block;\n white-space: normal;\n text-align: left;\n}\n\n:host([control=\"slotted\"]) { width: 100%; }\n.header { display: flex; flex-wrap: wrap; align-items: start; gap: calc(var(--ds-unit) / 2); }\n:host([control=\"slotted\"]) ::slotted([slot=\"trigger\"]) {\n flex: 1 1 0;\n min-width: min(calc(8 * var(--ds-unit)), 100%);\n --ds-button-height: var(--ds-row-height);\n}\n:host([control=\"slotted\"]) ::slotted([slot=\"actions\"]) {\n display: flex;\n flex-wrap: wrap;\n gap: calc(var(--ds-unit) / 2);\n max-width: 100%;\n}\n:host([control=\"slotted\"]) ::slotted([slot=\"details\"]) { display: block; }\n:host([control=\"slotted\"]) ::slotted([slot=\"details\"][hidden]) { display: none !important; }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport \"../2-core/ds-text\";\nimport \"../2-core/ds-icon\";\nimport \"../2-core/ds-button\";\nimport { define } from \"../0-face/define\";\nimport \"./ds-row\";\nimport styles from \"./styles/ds-accordion.css?inline\";\n\n/**\n * Native accordion using <details>/<summary> (no JS toggle logic).\n *\n * Usage (with translation text):\n * <ds-accordion summary=\"How it began\" details=\"Designed in Hokkaido\"></ds-accordion>\n *\n * Usage (with slotted details content):\n * <ds-accordion summary=\"How it began\">\n * <div slot=\"details\">Rich HTML content here</div>\n * </ds-accordion>\n */\nexport class Accordion extends LitElement {\n static properties = {\n summary: { type: String },\n details: { type: String },\n open: { type: Boolean, reflect: true },\n control: { type: String, reflect: true },\n _hasSlottedContent: { type: Boolean, state: true },\n };\n\n declare summary: string;\n declare details: string;\n declare open: boolean;\n declare control: string;\n declare _hasSlottedContent: boolean;\n\n constructor() {\n super();\n this.summary = \"\";\n this.details = \"\";\n this.open = false;\n this.control = \"native\";\n this._hasSlottedContent = false;\n this.addEventListener(\"click\", event => {\n if (this.control !== \"slotted\") return;\n const trigger = this.querySelector<HTMLButtonElement>(':scope > [slot=\"trigger\"] > button');\n if (!trigger || trigger.disabled || event.defaultPrevented || !event.composedPath().includes(trigger)) return;\n const request = new CustomEvent(\"ds-accordion-toggle\", {detail: {open: !this.open}, bubbles: true, composed: true, cancelable: true});\n if (this.dispatchEvent(request)) this.open = !this.open;\n });\n }\n\n private syncFrame = () => {\n if (this.control !== \"slotted\") return;\n const trigger = this.querySelector<HTMLButtonElement>(':scope > [slot=\"trigger\"] > button');\n const content = this.querySelector<HTMLElement>(':scope > [slot=\"details\"]');\n if (trigger) trigger.setAttribute(\"aria-expanded\", String(this.open));\n if (content) {\n if (!this.open && content.contains(this.ownerDocument.activeElement)) trigger?.focus({preventScroll: true});\n content.hidden = !this.open;\n }\n };\n updated() { this.syncFrame(); }\n\n static styles = unsafeCSS(styles);\n\n private _handleSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const assignedNodes = slot.assignedNodes({ flatten: true });\n // Filter out empty text nodes (whitespace only)\n const hasContent = assignedNodes.some(\n (node) =>\n node.nodeType === Node.ELEMENT_NODE ||\n (node.nodeType === Node.TEXT_NODE && node.textContent?.trim())\n );\n this._hasSlottedContent = hasContent;\n }\n\n render() {\n if (this.control === \"slotted\") return html`<div class=\"header\"><slot name=\"trigger\" @slotchange=${this.syncFrame}></slot><slot name=\"actions\"></slot></div><slot name=\"details\" @slotchange=${this.syncFrame}></slot>`;\n return html`\n <details ?open=${this.open}>\n <summary>\n <ds-row class=\"summaryRow\" centered>\n <ds-text .text=${this.summary}></ds-text>\n <ds-icon class=\"chevron\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 10.157 8.219\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M5.078 8.219L0 3.141L1.414 1.727L5.078 5.391L8.743 1.727L10.157 3.141L5.078 8.219Z\"\n fill=\"currentColor\"\n />\n </svg>\n </ds-icon>\n </ds-row>\n </summary>\n\n <div class=\"detailsBody\">\n <slot name=\"details\" @slotchange=${this._handleSlotChange}></slot>\n ${!this._hasSlottedContent\n ? html`<ds-text\n class=\"detailsText\"\n .text=${this.details}\n ></ds-text>`\n : \"\"}\n </div>\n </details>\n `;\n }\n}\n\ndefine(\"ds-accordion\", Accordion);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-accordion\": Accordion;\n }\n}\n","import{nothing as r}from\"../lit-html.js\";import{directive as t,Directive as e}from\"../directive.js\";import{setCommittedValue as s}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const i=t(class extends e{constructor(){super(...arguments),this.key=r}render(r,t){return this.key=r,t}update(r,[t,e]){return t!==this.key&&(s(r),this.key=t),e}});export{i as keyed};\n//# sourceMappingURL=keyed.js.map\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n --avatar-size: var(--ds-unit);\n --avatar-pair-type-size: var(--ds-type-size-small);\n display: inline-flex;\n position: relative;\n flex: 0 0 auto;\n vertical-align: middle;\n width: var(--avatar-size);\n height: var(--avatar-size);\n}\n:host([size=\"compact\"]) {\n --avatar-size: var(--ds-control-height);\n}\n:host([size=\"large\"]) {\n --avatar-size: calc(2 * var(--ds-unit));\n --avatar-pair-type-size: var(--ds-type-size-default);\n}\n:host([size=\"fill\"]) {\n width: 100%;\n height: 100%;\n min-width: 0;\n aspect-ratio: var(--ds-avatar-intrinsic-ratio, 1);\n}\n:host([hidden]) {\n display: none !important;\n}\n.frame {\n box-sizing: border-box;\n position: relative;\n display: grid;\n place-items: center;\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: 50%;\n corner-shape: round;\n background: var(--ds-avatar-background, var(--ds-fill));\n color: var(--ds-avatar-color, var(--ds-text-color));\n font: var(--ds-type-weight-default) var(--ds-type-size-default)/1 var(--ds-typeface-regular);\n letter-spacing: normal;\n user-select: none;\n -webkit-user-select: none;\n}\n:host([shape=\"square\"]) .frame {\n border-radius: 0;\n}\n:host([shape=\"rounded\"]) .frame {\n border-radius: var(--ds-radius);\n}\n:host([size=\"compact\"]) .frame {\n font-size: var(--ds-type-size-small);\n}\n:host([size=\"large\"]) .frame {\n font-size: var(--ds-unit);\n}\n.initial[data-pair] {\n /* Full-width initials must fit inside both hairline edges, even at compact\n and independent nested scales. Keep the normal type size when it fits. */\n font-size: min(\n var(--avatar-pair-type-size),\n calc((var(--avatar-size) - 2px) / var(--initial-count))\n );\n}\n:host([outlined]) .frame::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border: 1px solid var(--ds-avatar-outline, currentColor);\n border-radius: inherit;\n pointer-events: none;\n}\n:host([pending]) .frame {\n background: var(--ds-fill);\n color: var(--ds-text-color-muted);\n}\n:host([pending]) img {\n filter: grayscale(1);\n opacity: 0.5;\n}\n:host([plain]) .frame {\n background: transparent;\n color: var(--ds-avatar-color, inherit);\n}\nimg,\n.mask {\n position: absolute;\n inset: 0;\n display: block;\n width: 100%;\n height: 100%;\n}\nimg {\n object-fit: cover;\n visibility: hidden;\n}\nimg[data-visible] {\n visibility: visible;\n}\n:host([fit=\"contain\"]) img {\n object-fit: contain;\n padding: calc(2px * var(--ds-sf));\n box-sizing: border-box;\n}\n.mask {\n background: currentColor;\n mask-position: center;\n mask-size: contain;\n mask-repeat: no-repeat;\n}\n:host([fit=\"contain\"]:not([plain])) .mask {\n inset: 10%;\n width: 80%;\n height: 80%;\n}\n.initial {\n overflow: hidden;\n max-width: 100%;\n white-space: nowrap;\n text-align: center;\n}\nds-icon {\n flex: none;\n}\n","import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from \"lit\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { keyed } from \"lit/directives/keyed.js\";\nimport { define } from \"../0-face/define\";\nimport \"./ds-icon\";\nimport styles from \"./styles/ds-avatar.css?inline\";\n\n/** Saved identity colours are hex; their ink must stay legible in either theme. */\nexport function avatarInk(color: string): string | undefined {\n const match = /^#([a-f\\d]{6}|[a-f\\d]{3})$/i.exec(color);\n if (!match) return undefined;\n const hex = match[1].length === 3 ? [...match[1]].map((c) => c + c).join(\"\") : match[1];\n const rgb = [0, 2, 4]\n .map((i) => parseInt(hex.slice(i, i + 2), 16) / 255)\n .map((n) => (n <= 0.04045 ? n / 12.92 : ((n + 0.055) / 1.055) ** 2.4));\n const luminance = rgb[0] * 0.2126 + rgb[1] * 0.7152 + rgb[2] * 0.0722;\n return luminance > 0.22 ? \"var(--ds-black)\" : \"var(--ds-white)\";\n}\n\n/** A person's or workspace's mark. Identity selection and actions belong to the app. */\nexport class Avatar extends LitElement {\n static properties = {\n label: { type: String },\n initial: { type: String },\n src: { type: String },\n icon: { type: String },\n color: { type: String },\n shape: { type: String, reflect: true },\n size: { type: String, reflect: true },\n fit: { type: String, reflect: true },\n mask: { type: Boolean, reflect: true },\n outlined: { type: Boolean, reflect: true },\n pending: { type: Boolean, reflect: true },\n plain: { type: Boolean, reflect: true },\n loaded: { state: true },\n failed: { state: true },\n };\n declare label: string;\n declare initial: string;\n declare src: string;\n declare icon: string;\n declare color: string;\n declare shape: \"circle\" | \"square\" | \"rounded\";\n declare size: \"default\" | \"compact\" | \"large\" | \"fill\";\n declare fit: \"cover\" | \"contain\";\n declare mask: boolean;\n declare outlined: boolean;\n declare pending: boolean;\n declare plain: boolean;\n declare private loaded: boolean;\n declare private failed: boolean;\n static styles = unsafeCSS(styles);\n constructor() {\n super();\n this.label = \"\";\n this.initial = \"?\";\n this.src = \"\";\n this.icon = \"\";\n this.color = \"\";\n this.shape = \"circle\";\n this.size = \"default\";\n this.fit = \"cover\";\n this.mask = this.outlined = this.pending = this.plain = this.loaded = this.failed = false;\n }\n protected willUpdate(changed: PropertyValues<this>) {\n if (changed.has(\"src\")) {\n this.loaded = false;\n this.failed = false;\n this.style.removeProperty(\"--ds-avatar-intrinsic-ratio\");\n }\n }\n render() {\n const src = this.src;\n const fallback = this.icon\n ? html`<ds-icon type=${this.icon} aria-hidden=\"true\"></ds-icon>`\n : html`<span\n class=\"initial\"\n ?data-pair=${[...this.initial].length > 1}\n style=${styleMap({ \"--initial-count\": String([...this.initial].length || 1) })}\n >${this.initial}</span\n >`;\n return html`<span\n class=\"frame\"\n style=${styleMap({ backgroundColor: !this.pending && !this.plain ? this.color || undefined : undefined, color: !this.pending ? avatarInk(this.color) : undefined })}\n role=${this.label ? \"img\" : nothing}\n aria-label=${this.label || nothing}\n aria-hidden=${this.label ? nothing : \"true\"}\n >\n ${!this.loaded || this.failed ? fallback : nothing}\n ${\n src && !this.failed\n ? keyed(\n src,\n html`<img\n src=${src}\n alt=\"\"\n aria-hidden=\"true\"\n draggable=\"false\"\n ?data-visible=${this.loaded && !this.mask}\n @load=${(event: Event) => {\n if (this.src === src) {\n const image = event.currentTarget as HTMLImageElement;\n if (image.naturalWidth && image.naturalHeight)\n this.style.setProperty(\n \"--ds-avatar-intrinsic-ratio\",\n `${image.naturalWidth} / ${image.naturalHeight}`,\n );\n this.loaded = true;\n }\n }}\n @error=${() => {\n if (this.src === src) {\n this.failed = true;\n this.loaded = false;\n }\n }}\n />`,\n )\n : nothing\n }\n ${this.mask && this.loaded && !this.failed ? html`<span class=\"mask\" style=${styleMap({ maskImage: `url(${JSON.stringify(src)})` })}></span>` : nothing}\n </span>`;\n }\n}\ndefine(\"ds-avatar\", Avatar);\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-avatar\": Avatar;\n }\n}\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n --group-overlap: calc(4px * var(--ds-sf));\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n isolation: isolate;\n vertical-align: middle;\n}\n:host([size=\"compact\"]) {\n --group-overlap: calc(3px * var(--ds-sf));\n}\n:host([hidden]) {\n display: none !important;\n}\n.members {\n display: var(--ds-avatar-group-members-display, inline-flex);\n align-items: inherit;\n isolation: isolate;\n}\n.members.separated {\n margin-inline-start: calc(4px * var(--ds-sf));\n}\n::slotted(*) {\n /* Structural slots must survive a document-wide margin/flex reset. */\n display: inline-flex !important;\n flex: 0 0 auto !important;\n position: relative;\n vertical-align: middle;\n}\nslot:not([name])::slotted(*) {\n margin-inline-start: var(--ds-avatar-group-inset, 0px) !important;\n z-index: var(--ds-avatar-group-order, 0);\n}\n::slotted([hidden]) {\n display: none !important;\n}\n\n:host([vertical]),\n:host([vertical]) .members {\n flex-direction: column;\n}\n:host([vertical]) slot:not([name])::slotted(*) {\n margin-inline-start: 0 !important;\n margin-block-start: calc(-1 * var(--ds-avatar-group-inset, 0px)) !important;\n}\n:host([vertical]) .members.separated {\n margin-inline-start: 0;\n margin-block-start: calc(4px * var(--ds-sf));\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport styles from \"./styles/ds-avatar-group.css?inline\";\n\n/** Overlapping identity marks. The app chooses people, overflow and actions. */\nexport class AvatarGroup extends LitElement {\n static properties = {\n size: { type: String, reflect: true },\n vertical: { type: Boolean, reflect: true },\n hasLead: { state: true },\n hasMembers: { state: true },\n };\n declare size: \"default\" | \"compact\";\n declare vertical: boolean;\n declare private hasLead: boolean;\n declare private hasMembers: boolean;\n static styles = unsafeCSS(styles);\n private static owners = new WeakMap<HTMLElement, AvatarGroup>();\n private owned = new Map<HTMLElement, Map<string, [string, string]>>();\n private observer = new MutationObserver(() => this.arrange());\n constructor() {\n super();\n this.size = \"default\";\n this.hasLead = false;\n this.hasMembers = false;\n this.vertical = false;\n }\n connectedCallback() {\n super.connectedCallback();\n this.observer.observe(this, {\n childList: true,\n attributes: true,\n subtree: true,\n attributeFilter: [\"hidden\", \"slot\"],\n });\n void this.updateComplete.then(() => {\n if (this.isConnected) this.arrange();\n });\n }\n disconnectedCallback() {\n this.observer.disconnect();\n for (const element of this.owned.keys()) this.release(element);\n super.disconnectedCallback();\n }\n private release(element: HTMLElement) {\n for (const [name, [value, priority]] of this.owned.get(element) ?? []) {\n if (value) element.style.setProperty(name, value, priority);\n else element.style.removeProperty(name);\n }\n this.owned.delete(element);\n AvatarGroup.owners.delete(element);\n }\n private arrange = () => {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>(\"slot:not([name])\");\n const members = (slot?.assignedElements() ?? []).filter(\n (element): element is HTMLElement => element instanceof HTMLElement && !element.hidden,\n );\n this.hasMembers = members.length > 0;\n for (const element of this.owned.keys()) if (!members.includes(element)) this.release(element);\n members.forEach((element, index) => {\n const previous = AvatarGroup.owners.get(element);\n if (previous && previous !== this) previous.release(element);\n if (!this.owned.has(element))\n this.owned.set(\n element,\n new Map(\n [\"--ds-avatar-group-order\", \"--ds-avatar-group-inset\"].map((name) => [\n name,\n [element.style.getPropertyValue(name), element.style.getPropertyPriority(name)],\n ]),\n ),\n );\n AvatarGroup.owners.set(element, this);\n element.style.setProperty(\"--ds-avatar-group-order\", String(members.length - index));\n element.style.setProperty(\n \"--ds-avatar-group-inset\",\n index ? \"calc(-1 * var(--group-overlap))\" : \"0px\",\n );\n });\n this.hasLead = Boolean(\n this.shadowRoot\n ?.querySelector<HTMLSlotElement>('slot[name=\"lead\"]')\n ?.assignedElements()\n .some((element) => !(element instanceof HTMLElement) || !element.hidden),\n );\n };\n render() {\n return html`<slot name=\"lead\" @slotchange=${this.arrange}></slot\n ><span class=${this.hasLead && this.hasMembers ? \"members separated\" : \"members\"}\n ><slot @slotchange=${this.arrange}></slot\n ></span>`;\n }\n}\ndefine(\"ds-avatar-group\", AvatarGroup);\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-avatar-group\": AvatarGroup;\n }\n}\n","// ds-form.ts\n// Form component for handling form submissions and validation\n\nimport { LitElement, html, css } from \"lit\";\n\nexport interface FormData {\n [key: string]: string | number | boolean | null;\n}\n\nexport interface FormValidationResult {\n valid: boolean;\n errors: { [key: string]: string };\n}\n\nexport class Form extends LitElement {\n static properties = {\n action: { type: String },\n method: { type: String },\n name: { type: String },\n novalidate: { type: Boolean, reflect: true },\n autocomplete: { type: String },\n _isSubmitting: { type: Boolean, state: true },\n };\n\n declare action: string;\n declare method: \"get\" | \"post\";\n declare name: string;\n declare novalidate: boolean;\n declare autocomplete: \"on\" | \"off\";\n declare _isSubmitting: boolean;\n\n constructor() {\n super();\n this.action = \"\";\n this.method = \"post\";\n this.name = \"\";\n this.novalidate = false;\n this.autocomplete = \"on\";\n this._isSubmitting = false;\n }\n\n static styles = css`\n :host {\n display: block;\n width: 100%;\n }\n\n form {\n display: flex;\n flex-direction: column;\n gap: calc(var(--05) * var(--sf, 1));\n width: 100%;\n }\n\n ::slotted(*) {\n width: 100%;\n }\n\n :host([disabled]) {\n opacity: 0.6;\n pointer-events: none;\n }\n `;\n\n /**\n * Get all form data as an object\n */\n getFormData(): FormData {\n const data: FormData = {};\n const slot = this.shadowRoot?.querySelector(\"slot\");\n const elements = slot?.assignedElements({ flatten: true }) || [];\n\n for (const element of elements) {\n this._collectFormData(element as HTMLElement, data);\n }\n\n return data;\n }\n\n private _collectFormData(element: HTMLElement, data: FormData): void {\n // Check if element has name and value properties\n const name = element.getAttribute(\"name\") || (element as any).name;\n if (name) {\n const value = (element as any).value;\n if (value !== undefined) {\n // Handle checkboxes and radio buttons\n if (\n element instanceof HTMLInputElement &&\n (element.type === \"checkbox\" || element.type === \"radio\")\n ) {\n if (element.type === \"checkbox\") {\n data[name] = element.checked;\n } else if (element.type === \"radio\" && element.checked) {\n data[name] = value;\n }\n } else {\n data[name] = value;\n }\n }\n }\n\n // Recursively check children\n const children =\n element.shadowRoot?.querySelectorAll(\"*\") || element.querySelectorAll(\"*\");\n children.forEach((child) => {\n this._collectFormData(child as HTMLElement, data);\n });\n }\n\n /**\n * Validate the form\n */\n validate(): FormValidationResult {\n const result: FormValidationResult = {\n valid: true,\n errors: {},\n };\n\n if (this.novalidate) {\n return result;\n }\n\n const slot = this.shadowRoot?.querySelector(\"slot\");\n const elements = slot?.assignedElements({ flatten: true }) || [];\n\n for (const element of elements) {\n this._validateElement(element as HTMLElement, result);\n }\n\n return result;\n }\n\n private _validateElement(\n element: HTMLElement,\n result: FormValidationResult\n ): void {\n const name = element.getAttribute(\"name\") || (element as any).name;\n\n // Check for custom validation on ds-input elements\n if (element.tagName.toLowerCase() === \"ds-input\") {\n const input = element as any;\n if (input.required && !input.value) {\n result.valid = false;\n result.errors[name || \"unknown\"] = \"This field is required\";\n }\n }\n\n // Check native form elements\n if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLTextAreaElement ||\n element instanceof HTMLSelectElement\n ) {\n if (!element.checkValidity()) {\n result.valid = false;\n result.errors[name || \"unknown\"] = element.validationMessage;\n }\n }\n\n // Recursively check children\n const children =\n element.shadowRoot?.querySelectorAll(\"*\") || element.querySelectorAll(\"*\");\n children.forEach((child) => {\n this._validateElement(child as HTMLElement, result);\n });\n }\n\n /**\n * Reset the form\n */\n reset(): void {\n const slot = this.shadowRoot?.querySelector(\"slot\");\n const elements = slot?.assignedElements({ flatten: true }) || [];\n\n for (const element of elements) {\n this._resetElement(element as HTMLElement);\n }\n\n this.dispatchEvent(new CustomEvent(\"form-reset\", { bubbles: true }));\n }\n\n private _resetElement(element: HTMLElement): void {\n if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLTextAreaElement ||\n element instanceof HTMLSelectElement\n ) {\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\n element.checked = false;\n } else {\n element.value = \"\";\n }\n }\n\n // Handle ds-input elements\n if (element.tagName.toLowerCase() === \"ds-input\") {\n (element as any).value = \"\";\n }\n\n // Recursively reset children\n const children =\n element.shadowRoot?.querySelectorAll(\"*\") || element.querySelectorAll(\"*\");\n children.forEach((child) => {\n this._resetElement(child as HTMLElement);\n });\n }\n\n /**\n * Submit the form\n */\n async submit(): Promise<void> {\n if (this._isSubmitting) return;\n\n const validationResult = this.validate();\n if (!validationResult.valid) {\n this.dispatchEvent(\n new CustomEvent(\"form-invalid\", {\n detail: validationResult.errors,\n bubbles: true,\n })\n );\n return;\n }\n\n this._isSubmitting = true;\n const formData = this.getFormData();\n\n this.dispatchEvent(\n new CustomEvent(\"form-submit\", {\n detail: { data: formData },\n bubbles: true,\n })\n );\n\n // If action is provided, submit to the server\n if (this.action) {\n try {\n const response = await fetch(this.action, {\n method: this.method.toUpperCase(),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(formData),\n });\n\n this.dispatchEvent(\n new CustomEvent(\"form-response\", {\n detail: { response, data: formData },\n bubbles: true,\n })\n );\n } catch (error) {\n this.dispatchEvent(\n new CustomEvent(\"form-error\", {\n detail: { error, data: formData },\n bubbles: true,\n })\n );\n }\n }\n\n this._isSubmitting = false;\n }\n\n private _handleSubmit(e: Event): void {\n e.preventDefault();\n this.submit();\n }\n\n private _handleKeydown(e: KeyboardEvent): void {\n if (e.key === \"Enter\" && !e.shiftKey) {\n const target = e.target as HTMLElement;\n // Don't submit if in a textarea\n if (target.tagName.toLowerCase() !== \"textarea\") {\n e.preventDefault();\n this.submit();\n }\n }\n }\n\n render() {\n return html`\n <form\n .action=${this.action}\n .method=${this.method}\n .name=${this.name}\n ?novalidate=${this.novalidate}\n autocomplete=${this.autocomplete}\n @submit=${this._handleSubmit}\n @keydown=${this._handleKeydown}\n >\n <slot></slot>\n </form>\n `;\n }\n}\n\ncustomElements.define(\"ds-form\", Form);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-form\": Form;\n }\n}\n","@import \"../../1-root/component-metrics.css\";\n\n/* ds-list.css */\n\n:host {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--ds-list-gap, 0);\n width: 100%;\n min-width: 0;\n}\n\n:host([columns]) {\n display: grid;\n grid-template-columns: repeat(var(--ds-list-columns, 2), minmax(0, 1fr));\n column-gap: var(--ds-list-column-gap, calc(8px * var(--ds-sf)));\n}\n\n:host([columns=\"2\"]) {\n --ds-list-columns: 2;\n}\n\n:host([columns=\"3\"]) {\n --ds-list-columns: 3;\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-list.css?inline\";\nimport { define } from \"../0-face/define\";\n\n/**\n * A vertical stack of rows.\n *\n * @element ds-list\n * @attr columns - Lay the items out in this many equal columns.\n */\nexport class List extends LitElement {\n static properties = {\n columns: { type: Number, reflect: true },\n };\n\n declare columns: number | undefined;\n\n static styles = unsafeCSS(styles);\n\n updated(): void {\n if (typeof this.columns === \"number\" && Number.isInteger(this.columns) && this.columns > 0) this.style.setProperty(\"--ds-list-columns\", String(this.columns));\n else this.style.removeProperty(\"--ds-list-columns\");\n }\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-list\", List);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-list\": List;\n }\n}\n","/* ds-table.css */\n/* Data table component styles */\n\n:host {\n display: block;\n width: 100%;\n}\n\n.table-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.table-header {\n display: grid;\n grid-template-columns: 160px 80px 80px 80px;\n height: 20px;\n width: 400px;\n}\n\n.table-body {\n display: grid;\n grid-template-columns: 160px 80px 80px 80px;\n border: 1px solid var(--black);\n width: 400px;\n}\n\n.header-cell {\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: left;\n padding: 0 2px;\n font-family: var(--typeface-regular);\n font-size: var(--type-size-default);\n font-weight: var(--type-weight-default);\n line-height: var(--type-lineheight-default);\n color: var(--black);\n letter-spacing: -0.26px;\n}\n\n.data-cell {\n height: 20px;\n margin-top: -1px;\n display: flex;\n align-items: center;\n justify-content: left;\n outline: 1px solid var(--black);\n font-family: var(--typeface-regular);\n font-size: var(--type-size-default);\n font-weight: var(--type-weight-default);\n line-height: var(--type-lineheight-default);\n color: var(--black);\n letter-spacing: -0.26px;\n}\n\n.status-cell {\n background-color: transparent;\n text-align: center;\n}\n\n.product-cell {\n text-align: left;\n justify-content: flex-start;\n}\n\n.users-cell,\n.retention-cell {\n text-align: center;\n}\n\n/* Responsive adjustments */\n@media (max-width: 480px) {\n .table-header,\n .table-body {\n width: 100%;\n grid-template-columns: 1fr 60px 60px 60px;\n }\n}\n","// ds-table.ts\n// Data table component\n\nimport { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-table.css?inline\";\n\nexport interface TableRow {\n product: string;\n users: string;\n retention: string;\n status?: string;\n}\n\nexport class DsTable extends LitElement {\n static properties = {\n data: { type: Array },\n columns: { type: Array },\n showStatus: { type: Boolean, attribute: \"show-status\" },\n };\n\n declare data: TableRow[];\n declare columns: string[];\n declare showStatus: boolean;\n\n constructor() {\n super();\n this.data = [];\n this.columns = [\"Product\", \"Users\", \"Retention\"];\n this.showStatus = true;\n }\n\n static styles = unsafeCSS(styles);\n\n render() {\n return html`\n <div class=\"table-container\">\n <div class=\"table-header\">\n <div class=\"header-cell product-cell\">Product</div>\n <div class=\"header-cell users-cell\">Users</div>\n <div class=\"header-cell retention-cell\">Retention</div>\n ${this.showStatus ? html`<div class=\"header-cell\">Status</div>` : \"\"}\n </div>\n <div class=\"table-body\">\n ${this.data.map(\n (row, rowIndex) => html`\n <div class=\"data-cell product-cell\">${row.product}</div>\n <div class=\"data-cell users-cell\">${row.users}</div>\n <div class=\"data-cell retention-cell\">${row.retention}</div>\n ${this.showStatus\n ? html`<div class=\"data-cell status-cell\">\n ${row.status || \"Pending\"}\n </div>`\n : \"\"}\n `\n )}\n </div>\n </div>\n `;\n }\n}\n\ncustomElements.define(\"ds-table\", DsTable);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-table\": DsTable;\n }\n}\n","/* ds-container.css */\n/* Container component styles with responsive width constraints */\n\n:host {\n display: flex;\n width: 100%;\n max-width: 100%;\n flex-direction: column;\n background-color: var(--background-color);\n box-sizing: border-box;\n}\n\n/* Ensure children don't overflow */\n:host ::slotted(*) {\n max-width: 100%;\n box-sizing: border-box;\n}\n\n/* Mobile: 100% width */\n@media (max-width: 820px) {\n :host {\n width: 100%;\n max-width: 100%;\n }\n}\n\n/* Desktop: max-width 1000px, centered */\n@media (min-width: 821px) {\n :host {\n max-width: 1000px;\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n }\n}\n","// ds-container.ts\n// Container component with responsive width constraints\n\nimport { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-container.css?inline\";\n\ndeclare global {\n interface CustomElementRegistry {\n define(name: string, constructor: typeof LitElement): void;\n }\n var customElements: CustomElementRegistry;\n}\n\nexport class Container extends LitElement {\n static styles = unsafeCSS(styles);\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ncustomElements.define(\"ds-container\", Container);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-container\": Container;\n }\n}\n","/* ds-grid.css */\n/* Grid layout component styles */\n\n:host {\n margin-top: 0.5px !important;\n margin-left: 0.5px !important;\n display: grid;\n width: 1440px;\n height: 1280px;\n grid-template-columns: repeat(auto-fill, 19px);\n grid-template-rows: repeat(auto-fill, 19px);\n gap: 1px;\n row-rule: calc(1px * var(--sf)) solid var(--grid-color);\n column-rule: calc(1px * var(--sf)) solid var(--grid-color);\n outline: calc(1px * var(--sf)) solid light-dark(var(--sharp-blue), var(--yellow));\n position: fixed;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n pointer-events: none;\n z-index: 300;\n}\n\n/* DO NOT CHANGE THIS GRID CODE FOR MOBILE. ITS PERFECT FOR MOBILE. */\n:host(.mobile) {\n width: calc(100% - calc(1px * var(--sf)));\n max-width: 100vw;\n margin-left: 0.5px !important;\n margin-top: 0 !important;\n box-sizing: border-box;\n position: fixed;\n top: calc(0.5px * var(--sf));\n left: 50%;\n transform: translateX(-50%);\n pointer-events: none;\n z-index: 300;\n gap: calc(1px * var(--sf));\n grid-template-columns: repeat(14, calc(19px * var(--sf)));\n grid-template-rows: repeat(auto-fill, calc(19px * var(--sf)));\n}\n\n:host([align=\"left\"]) {\n left: 0;\n transform: none;\n}\n\n:host([align=\"center\"]) {\n left: 50%;\n transform: translateX(-50%);\n}\n\n:host([align=\"right\"]) {\n left: auto;\n right: 0;\n transform: none;\n}\n\n/* Visible 19px tracks when CSS Gap Decorations (`row-rule`) is unavailable */\n@supports not (row-rule: 1px solid black) {\n :host {\n background-image:\n repeating-linear-gradient(\n to right,\n transparent 0,\n transparent 19px,\n var(--grid-color) 19px,\n var(--grid-color) 20px\n ),\n repeating-linear-gradient(\n to bottom,\n transparent 0,\n transparent 19px,\n var(--grid-color) 19px,\n var(--grid-color) 20px\n );\n }\n\n :host(.mobile) {\n background-image:\n repeating-linear-gradient(\n to right,\n transparent 0,\n transparent calc(19px * var(--sf, 1)),\n var(--grid-color) calc(19px * var(--sf, 1)),\n var(--grid-color) calc(20px * var(--sf, 1))\n ),\n repeating-linear-gradient(\n to bottom,\n transparent 0,\n transparent calc(19px * var(--sf, 1)),\n var(--grid-color) calc(19px * var(--sf, 1)),\n var(--grid-color) calc(20px * var(--sf, 1))\n );\n }\n}\n","// ds-grid.ts\n// Simple grid layout component\n\nimport { LitElement, html, unsafeCSS } from \"lit\";\nimport { detectMobileDevice } from \"../0-face/device\";\nimport styles from \"./styles/ds-grid.css?inline\";\n\ndeclare global {\n interface CustomElementRegistry {\n define(name: string, constructor: typeof LitElement): void;\n }\n var customElements: CustomElementRegistry;\n}\n\nexport class Grid extends LitElement {\n static properties = {\n align: { type: String },\n };\n\n align?: string;\n private resizeObserver?: () => void;\n private resizeTimeout?: any;\n\n static styles = unsafeCSS(styles);\n\n connectedCallback() {\n super.connectedCallback();\n this.updateMobileClass();\n\n // Listen for resize events to update mobile class\n this.resizeObserver = () => {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n this.updateMobileClass();\n }, 100);\n };\n window.addEventListener(\"resize\", this.resizeObserver);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.resizeObserver) {\n window.removeEventListener(\"resize\", this.resizeObserver);\n }\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n }\n\n private updateMobileClass() {\n const isMobile = detectMobileDevice();\n if (isMobile) {\n this.classList.add(\"mobile\");\n this.classList.remove(\"desktop\");\n } else {\n this.classList.add(\"desktop\");\n this.classList.remove(\"mobile\");\n }\n }\n\n render() {\n return html``;\n }\n}\n\ncustomElements.define(\"ds-grid\", Grid);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-grid\": Grid;\n }\n}\n","/* ds-layout.css */\n/* Layout component styles with view mode */\n\n:host {\n display: grid;\n position: relative;\n width: 100%;\n}\n\nslot {\n display: contents;\n}\n\n/* Portfolio mode */\n:host([mode=\"portfolio\"]) {\n --portfolio-cols: 120px 480px 40px;\n --portfolio-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;\n --portfolio-areas: \"square . .\" \". title .\" \". header .\" \". projects .\"\n \". . .\" \". bio .\" \". . .\" \". nav .\" \". . .\" \". footer .\" \". . .\";\n --portfolio-overlay-cols: 120px 480px;\n --portfolio-overlay-areas: \"square .\" \". title\" \". header\" \". projects\" \". .\"\n \". bio\" \". .\" \". nav\" \". .\" \". footer\" \". .\";\n grid-template-columns: var(--portfolio-cols);\n grid-template-rows: var(--portfolio-rows);\n grid-template-areas: var(--portfolio-areas);\n min-height: 600px;\n background-color: rgba(165, 165, 165, 0.03);\n max-width: 640px;\n margin: 0;\n}\n\n:host([mode=\"portfolio\"]) .view-overlay {\n grid-template-columns: var(--portfolio-overlay-cols);\n grid-template-rows: var(--portfolio-rows);\n grid-template-areas: var(--portfolio-overlay-areas);\n}\n\n/* Company mode */\n:host([mode=\"company\"]) {\n --company-cols: auto 400px auto;\n --company-rows: 80px 20px 20px 120px 20px 120px;\n --company-areas: \". . .\" \". header .\" \". . .\" \". content .\" \". . .\"\n \". footer .\";\n grid-template-columns: var(--company-cols);\n grid-template-rows: var(--company-rows);\n grid-template-areas: var(--company-areas);\n gap: 0;\n max-width: 100%;\n}\n\n:host([mode=\"company\"]) .view-overlay {\n grid-template-columns: var(--company-cols);\n grid-template-rows: var(--company-rows);\n grid-template-areas: var(--company-areas);\n gap: 0;\n}\n\n/* Alignment modifiers */\n:host([align=\"left\"]),\n:host([mode=\"portfolio\"][align=\"left\"]),\n:host([mode=\"company\"][align=\"left\"]),\n:host([mode=\"app\"][align=\"left\"]) {\n margin: 0;\n justify-self: start;\n}\n\n:host([align=\"center\"]),\n:host([mode=\"portfolio\"][align=\"center\"]),\n:host([mode=\"company\"][align=\"center\"]),\n:host([mode=\"app\"][align=\"center\"]) {\n margin: 0 auto;\n justify-self: center;\n}\n\n:host([align=\"right\"]),\n:host([mode=\"portfolio\"][align=\"right\"]),\n:host([mode=\"company\"][align=\"right\"]),\n:host([mode=\"app\"][align=\"right\"]) {\n margin: 0 0 0 auto;\n justify-self: end;\n}\n\n/* App mode - Base */\n:host([mode=\"app\"]) {\n --app-cols: 100%;\n --app-rows: calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))\n calc(var(--unit) * var(--sf)) calc(var(--double) * var(--sf))\n calc(var(--dozen) * var(--sf)) calc(var(--unit) * var(--sf))\n calc(var(--quad) * var(--sf)) calc(var(--double) * var(--sf));\n --app-areas: \"banner\" \".\" \"header\" \".\" \"main\" \"page-dots\" \".\" \"footer\";\n --app-overlay-cols: 100%;\n --app-overlay-rows: calc(var(--unit) * var(--sf))\n calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))\n calc(var(--double) * var(--sf)) calc(var(--dozen) * var(--sf))\n calc(var(--unit) * var(--sf)) calc(var(--quad) * var(--sf))\n calc(var(--double) * var(--sf));\n --app-overlay-areas: \"banner\" \".\" \"header\" \".\" \"main\" \"page-dots\" \".\" \"footer\";\n grid-template-columns: var(--app-cols);\n grid-template-rows: var(--app-rows);\n grid-template-areas: var(--app-areas);\n min-height: 100vh;\n background-color: transparent;\n width: calc(240px * var(--sf, 1));\n max-width: calc(240px * var(--sf, 1));\n margin: 0 auto;\n}\n\n:host([mode=\"app\"]) .view-overlay {\n grid-template-columns: var(--app-overlay-cols);\n grid-template-rows: var(--app-overlay-rows);\n grid-template-areas: var(--app-overlay-areas);\n}\n\n/* View overlay */\n.view-overlay {\n position: absolute;\n margin-left: -1px;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 1000;\n display: grid;\n}\n\n.view-area {\n display: flex;\n width: calc(240px * var(--sf, 1));\n height: 100%;\n align-items: center;\n justify-content: center;\n font-family: var(--typeface-regular);\n font-size: calc(var(--type-size-default) * var(--05));\n color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n background-color: color-mix(in srgb, var(--accent-color) 25%, transparent);\n opacity: 1;\n}\n\n/* Portfolio mode view areas */\n:host([mode=\"portfolio\"]) .view-area:nth-of-type(1) {\n background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n}\n\n:host([mode=\"portfolio\"]) .view-area:nth-of-type(2) {\n border-color: var(--sharp-blue);\n}\n\n:host([mode=\"portfolio\"]) .view-area:nth-of-type(3) {\n border-color: var(--yellow);\n}\n\n:host([mode=\"portfolio\"]) .view-area:nth-of-type(4) {\n border-color: var(--apple-green);\n}\n\n:host([mode=\"portfolio\"]) .view-area:nth-of-type(5) {\n border-color: var(--pink);\n}\n\n:host([mode=\"portfolio\"]) .view-area:nth-of-type(6) {\n border-color: var(--orange);\n}\n\n:host([mode=\"portfolio\"]) .view-area:nth-of-type(7) {\n border-color: var(--zenith-blue);\n}\n\n/* Company mode view areas */\n:host([mode=\"company\"]) .view-area:nth-of-type(1) {\n border-color: var(--tuned-red);\n}\n\n:host([mode=\"company\"]) .view-area:nth-of-type(2) {\n border-color: var(--sharp-blue);\n}\n\n:host([mode=\"company\"]) .view-area:nth-of-type(3) {\n border-color: var(--yellow);\n}\n\n/* App mode view areas */\n:host([mode=\"app\"]) .view-area:nth-of-type(1) {\n background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n}\n\n:host([mode=\"app\"]) .view-area:nth-of-type(2) {\n background-color: color-mix(in srgb, var(--sharp-blue) 25%, transparent);\n}\n\n:host([mode=\"app\"]) .view-area:nth-of-type(3) {\n background-color: color-mix(in srgb, var(--yellow) 25%, transparent);\n}\n\n:host([mode=\"app\"]) .view-area:nth-of-type(4) {\n background-color: color-mix(in srgb, var(--apple-green) 25%, transparent);\n}\n\n:host([mode=\"app\"]) .view-area:nth-of-type(5) {\n background-color: color-mix(in srgb, var(--pink) 25%, transparent);\n}\n\n/* Grid area assignments */\n.view-square {\n grid-area: square;\n}\n\n.view-title {\n grid-area: title;\n}\n\n.view-header {\n grid-area: header;\n}\n\n.view-projects {\n grid-area: projects;\n}\n\n.view-bio {\n grid-area: bio;\n}\n\n.view-nav {\n grid-area: nav;\n}\n\n.view-footer {\n grid-area: footer;\n}\n\n.view-content {\n grid-area: content;\n}\n\n.view-banner {\n grid-area: banner;\n}\n\n.view-main {\n grid-area: main;\n}\n\n.view-page-dots {\n grid-area: page-dots;\n}\n","// ds-layout.ts\n// Simple grid layout component with view mode\n\nimport { LitElement, html, css, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-layout.css?inline\";\n\ndeclare global {\n interface CustomElementRegistry {\n define(name: string, constructor: typeof LitElement): void;\n }\n var customElements: CustomElementRegistry;\n}\n\nexport class Layout extends LitElement {\n static properties = {\n mode: { type: String },\n align: { type: String },\n view: { type: Boolean },\n };\n\n mode: string = \"portfolio\";\n align?: string;\n view?: boolean;\n\n static styles = [\n unsafeCSS(styles),\n css`\n :host {\n display: grid;\n position: relative;\n width: 100%;\n }\n\n slot {\n display: contents;\n }\n\n :host([mode=\"portfolio\"]) {\n --portfolio-cols: 120px 480px 40px;\n --portfolio-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px\n 120px;\n --portfolio-areas: \"square . .\" \". title .\" \". header .\" \". projects .\"\n \". . .\" \". bio .\" \". . .\" \". nav .\" \". . .\" \". footer .\" \". . .\";\n --portfolio-overlay-cols: 120px 480px;\n --portfolio-overlay-areas: \"square .\" \". title\" \". header\" \". projects\"\n \". .\" \". bio\" \". .\" \". nav\" \". .\" \". footer\" \". .\";\n grid-template-columns: var(--portfolio-cols);\n grid-template-rows: var(--portfolio-rows);\n grid-template-areas: var(--portfolio-areas);\n min-height: 600px;\n background-color: rgba(165, 165, 165, 0.03);\n max-width: 640px;\n margin: 0;\n }\n\n :host([mode=\"portfolio\"]) .view-overlay {\n grid-template-columns: var(--portfolio-overlay-cols);\n grid-template-rows: var(--portfolio-rows);\n grid-template-areas: var(--portfolio-overlay-areas);\n }\n\n :host([mode=\"company\"]) {\n --company-cols: auto 400px auto;\n --company-rows: 80px 20px 20px 120px 20px 120px;\n --company-areas: \". . .\" \". header .\" \". . .\" \". content .\" \". . .\"\n \". footer .\";\n grid-template-columns: var(--company-cols);\n grid-template-rows: var(--company-rows);\n grid-template-areas: var(--company-areas);\n gap: 0;\n max-width: 100%;\n }\n\n :host([mode=\"company\"]) .view-overlay {\n grid-template-columns: var(--company-cols);\n grid-template-rows: var(--company-rows);\n grid-template-areas: var(--company-areas);\n gap: 0;\n }\n\n :host([align=\"left\"]),\n :host([mode=\"portfolio\"][align=\"left\"]),\n :host([mode=\"company\"][align=\"left\"]),\n :host([mode=\"app\"][align=\"left\"]),\n :host([mode=\"list\"][align=\"left\"]),\n :host([mode=\"home\"][align=\"left\"]),\n :host([mode=\"settings\"][align=\"left\"]) {\n margin: 0;\n justify-self: start;\n }\n\n :host([align=\"center\"]),\n :host([mode=\"portfolio\"][align=\"center\"]),\n :host([mode=\"company\"][align=\"center\"]),\n :host([mode=\"app\"][align=\"center\"]),\n :host([mode=\"list\"][align=\"center\"]),\n :host([mode=\"home\"][align=\"center\"]),\n :host([mode=\"settings\"][align=\"center\"]) {\n margin: 0 auto;\n justify-self: center;\n }\n\n :host([align=\"right\"]),\n :host([mode=\"portfolio\"][align=\"right\"]),\n :host([mode=\"company\"][align=\"right\"]),\n :host([mode=\"app\"][align=\"right\"]),\n :host([mode=\"list\"][align=\"right\"]),\n :host([mode=\"home\"][align=\"right\"]),\n :host([mode=\"settings\"][align=\"right\"]) {\n margin: 0 0 0 auto;\n justify-self: end;\n }\n\n /* App mode - Base */\n :host([mode=\"app\"]) {\n --app-cols: 100%;\n --app-overlay-cols: 100%;\n grid-template-columns: var(--app-cols);\n grid-template-rows: var(--app-layout);\n grid-template-areas: var(--app-layout-areas);\n min-height: 100vh;\n background-color: transparent;\n width: calc(240px * var(--sf, 1));\n max-width: calc(240px * var(--sf, 1));\n margin: 0 auto;\n }\n\n :host([mode=\"app\"]) .view-overlay {\n grid-template-columns: var(--app-overlay-cols);\n grid-template-rows: var(--app-layout);\n grid-template-areas: var(--app-layout-areas);\n }\n\n /* List mode - Base */\n :host([mode=\"list\"]) {\n --list-cols: 100%;\n --list-rows: calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))\n calc(var(--unit) * var(--sf)) calc(var(--twenty) * var(--sf));\n --list-areas: \"banner\" \".\" \"header\" \"board\";\n --list-overlay-cols: 100%;\n --list-overlay-rows: calc(var(--unit) * var(--sf))\n calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))\n calc(var(--twenty) * var(--sf));\n --list-overlay-areas: \"banner\" \".\" \"header\" \"board\";\n grid-template-columns: var(--list-cols);\n grid-template-rows: var(--list-rows);\n grid-template-areas: var(--list-areas);\n min-height: 100vh;\n background-color: transparent;\n width: calc(240px * var(--sf, 1));\n max-width: calc(240px * var(--sf, 1));\n margin: 0 auto;\n }\n\n :host([mode=\"list\"]) .view-overlay {\n grid-template-columns: var(--list-overlay-cols);\n grid-template-rows: var(--list-overlay-rows);\n grid-template-areas: var(--list-overlay-areas);\n }\n\n /* Home mode - Base */\n :host([mode=\"home\"]) {\n --home-cols: 100%;\n --home-areas: \"banner\" \".\" \"header\" \".\" \"lists\";\n --home-overlay-cols: 100%;\n --home-overlay-areas: \"banner\" \".\" \"header\" \".\" \"lists\";\n grid-template-columns: var(--home-cols);\n grid-template-rows: var(--home-layout);\n grid-template-areas: var(--home-areas);\n min-height: 100vh;\n background-color: transparent;\n width: calc(240px * var(--sf, 1));\n max-width: calc(240px * var(--sf, 1));\n margin: 0 auto;\n }\n\n :host([mode=\"home\"]) .view-overlay {\n grid-template-columns: var(--home-overlay-cols);\n grid-template-rows: var(--home-layout);\n grid-template-areas: var(--home-overlay-areas);\n }\n\n /* Settings mode - Base */\n :host([mode=\"settings\"]) {\n --settings-cols: 100%;\n --settings-overlay-cols: 100%;\n grid-template-columns: var(--settings-cols);\n grid-template-rows: var(--settings-layout);\n grid-template-areas: var(--settings-layout-areas);\n min-height: 100vh;\n background-color: transparent;\n width: calc(240px * var(--sf, 1));\n max-width: calc(240px * var(--sf, 1));\n margin: 0 auto;\n }\n\n :host([mode=\"settings\"]) .view-overlay {\n grid-template-columns: var(--settings-overlay-cols);\n grid-template-rows: var(--settings-layout);\n grid-template-areas: var(--settings-layout-areas);\n }\n\n .view-overlay {\n position: absolute;\n margin-left: -1px;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 1000;\n display: grid;\n }\n\n .view-area {\n display: flex;\n width: calc(240px * var(--sf, 1));\n height: 100%;\n align-items: center;\n justify-content: center;\n font-family: var(--typeface-regular);\n font-size: calc(var(--type-size-default) * var(--05));\n color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n background-color: color-mix(\n in srgb,\n var(--accent-color) 25%,\n transparent\n );\n opacity: 1;\n position: relative;\n }\n\n .grid-area-label {\n position: absolute;\n top: calc(-20px * var(--sf, 1));\n left: 0;\n height: calc(20px * var(--sf, 1));\n width: fit-content;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 calc(4px * var(--sf, 1));\n border-radius: calc(2px * var(--sf, 1));\n z-index: 10000;\n pointer-events: none;\n white-space: nowrap;\n }\n\n /* Banner label stays inside the area (first item) */\n :host([mode=\"app\"]) .view-area.view-banner .grid-area-label,\n :host([mode=\"list\"]) .view-area.view-banner .grid-area-label,\n :host([mode=\"home\"]) .view-area.view-banner .grid-area-label,\n :host([mode=\"settings\"]) .view-area.view-banner .grid-area-label,\n :host([mode=\"company\"]) .view-area.view-header .grid-area-label,\n :host([mode=\"portfolio\"]) .view-area.view-square .grid-area-label {\n top: 0;\n }\n\n .grid-area-label ds-text {\n font-size: calc(11px * var(--sf, 1));\n line-height: 1;\n color: white;\n text-transform: lowercase;\n }\n\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(1) {\n background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(1) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--tuned-red) 70%, black) 0%,\n color-mix(in srgb, var(--tuned-red) 70%, black) 100%\n );\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(2) {\n border-color: var(--sharp-blue);\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(2) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 100%\n );\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(3) {\n border-color: var(--yellow);\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(3) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--yellow) 70%, black) 0%,\n color-mix(in srgb, var(--yellow) 70%, black) 100%\n );\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(4) {\n border-color: var(--apple-green);\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(4) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--apple-green) 70%, black) 0%,\n color-mix(in srgb, var(--apple-green) 70%, black) 100%\n );\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(5) {\n border-color: var(--pink);\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(5) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--pink) 70%, black) 0%,\n color-mix(in srgb, var(--pink) 70%, black) 100%\n );\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(6) {\n border-color: var(--orange);\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(6) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--orange) 70%, black) 0%,\n color-mix(in srgb, var(--orange) 70%, black) 100%\n );\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(7) {\n border-color: var(--zenith-blue);\n }\n :host([mode=\"portfolio\"]) .view-area:nth-of-type(7) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--zenith-blue) 70%, black) 0%,\n color-mix(in srgb, var(--zenith-blue) 70%, black) 100%\n );\n }\n\n :host([mode=\"company\"]) .view-area:nth-of-type(1) {\n border-color: var(--tuned-red);\n }\n :host([mode=\"company\"]) .view-area:nth-of-type(1) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--tuned-red) 70%, black) 0%,\n color-mix(in srgb, var(--tuned-red) 70%, black) 100%\n );\n }\n :host([mode=\"company\"]) .view-area:nth-of-type(2) {\n border-color: var(--sharp-blue);\n }\n :host([mode=\"company\"]) .view-area:nth-of-type(2) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 100%\n );\n }\n :host([mode=\"company\"]) .view-area:nth-of-type(3) {\n border-color: var(--yellow);\n }\n :host([mode=\"company\"]) .view-area:nth-of-type(3) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--yellow) 70%, black) 0%,\n color-mix(in srgb, var(--yellow) 70%, black) 100%\n );\n }\n\n :host([mode=\"app\"]) .view-area:nth-of-type(1) {\n background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(1) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--tuned-red) 70%, black) 0%,\n color-mix(in srgb, var(--tuned-red) 70%, black) 100%\n );\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(2) {\n background-color: color-mix(\n in srgb,\n var(--sharp-blue) 25%,\n transparent\n );\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(2) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 100%\n );\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(3) {\n background-color: color-mix(in srgb, var(--yellow) 25%, transparent);\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(3) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--yellow) 70%, black) 0%,\n color-mix(in srgb, var(--yellow) 70%, black) 100%\n );\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(4) {\n background-color: color-mix(\n in srgb,\n var(--apple-green) 25%,\n transparent\n );\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(4) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--apple-green) 70%, black) 0%,\n color-mix(in srgb, var(--apple-green) 70%, black) 100%\n );\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(5) {\n background-color: color-mix(in srgb, var(--pink) 25%, transparent);\n }\n :host([mode=\"app\"]) .view-area:nth-of-type(5) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--pink) 70%, black) 0%,\n color-mix(in srgb, var(--pink) 70%, black) 100%\n );\n }\n\n :host([mode=\"list\"]) .view-area:nth-of-type(1) {\n background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n }\n :host([mode=\"list\"]) .view-area:nth-of-type(1) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--tuned-red) 70%, black) 0%,\n color-mix(in srgb, var(--tuned-red) 70%, black) 100%\n );\n }\n :host([mode=\"list\"]) .view-area:nth-of-type(2) {\n background-color: color-mix(\n in srgb,\n var(--sharp-blue) 25%,\n transparent\n );\n }\n :host([mode=\"list\"]) .view-area:nth-of-type(2) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 100%\n );\n }\n :host([mode=\"list\"]) .view-area:nth-of-type(3) {\n background-color: color-mix(in srgb, var(--yellow) 25%, transparent);\n }\n :host([mode=\"list\"]) .view-area:nth-of-type(3) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--yellow) 70%, black) 0%,\n color-mix(in srgb, var(--yellow) 70%, black) 100%\n );\n }\n :host([mode=\"list\"]) .view-area:nth-of-type(4) {\n background-color: color-mix(\n in srgb,\n var(--apple-green) 25%,\n transparent\n );\n }\n :host([mode=\"list\"]) .view-area:nth-of-type(4) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--apple-green) 70%, black) 0%,\n color-mix(in srgb, var(--apple-green) 70%, black) 100%\n );\n }\n\n :host([mode=\"home\"]) .view-area:nth-of-type(1) {\n background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(1) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--tuned-red) 70%, black) 0%,\n color-mix(in srgb, var(--tuned-red) 70%, black) 100%\n );\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(2) {\n background-color: color-mix(\n in srgb,\n var(--sharp-blue) 25%,\n transparent\n );\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(2) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 100%\n );\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(3) {\n background-color: color-mix(in srgb, var(--yellow) 25%, transparent);\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(3) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--yellow) 70%, black) 0%,\n color-mix(in srgb, var(--yellow) 70%, black) 100%\n );\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(4) {\n background-color: color-mix(\n in srgb,\n var(--apple-green) 25%,\n transparent\n );\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(4) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--apple-green) 70%, black) 0%,\n color-mix(in srgb, var(--apple-green) 70%, black) 100%\n );\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(5) {\n background-color: color-mix(in srgb, var(--pink) 25%, transparent);\n }\n :host([mode=\"home\"]) .view-area:nth-of-type(5) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--pink) 70%, black) 0%,\n color-mix(in srgb, var(--pink) 70%, black) 100%\n );\n }\n\n .view-square {\n grid-area: square;\n }\n\n .view-title {\n grid-area: title;\n }\n\n .view-header {\n grid-area: header;\n }\n\n .view-projects {\n grid-area: projects;\n }\n\n .view-bio {\n grid-area: bio;\n }\n\n .view-nav {\n grid-area: nav;\n }\n\n .view-footer {\n grid-area: footer;\n }\n\n .view-content {\n grid-area: content;\n }\n\n .view-banner {\n grid-area: banner;\n }\n\n .view-main {\n grid-area: main;\n }\n\n .view-page-dots {\n grid-area: page-dots;\n }\n\n .view-board {\n grid-area: board;\n }\n\n .view-message {\n grid-area: message;\n }\n\n .view-lists {\n grid-area: lists;\n }\n\n .view-settings {\n grid-area: settings;\n }\n\n :host([mode=\"settings\"]) .view-area:nth-of-type(1) {\n background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);\n }\n :host([mode=\"settings\"]) .view-area:nth-of-type(1) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--tuned-red) 70%, black) 0%,\n color-mix(in srgb, var(--tuned-red) 70%, black) 100%\n );\n }\n :host([mode=\"settings\"]) .view-area:nth-of-type(2) {\n background-color: color-mix(\n in srgb,\n var(--sharp-blue) 25%,\n transparent\n );\n }\n :host([mode=\"settings\"]) .view-area:nth-of-type(2) .grid-area-label {\n background-image:\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0.2) 0%,\n rgba(0, 0, 0, 0.2) 100%\n ),\n linear-gradient(\n 90deg,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,\n color-mix(in srgb, var(--sharp-blue) 70%, black) 100%\n );\n }\n `,\n ];\n\n render() {\n const isView = this.view || this.mode === \"view\";\n const isPortfolio = this.mode === \"portfolio\";\n const isCompany = this.mode === \"company\";\n const isApp = this.mode === \"app\";\n const isList = this.mode === \"list\";\n const isHome = this.mode === \"home\";\n const isSettings = this.mode === \"settings\";\n\n return html`\n <slot></slot>\n ${isView\n ? html`\n <div class=\"view-overlay\">\n ${isSettings\n ? html`\n <div class=\"view-area view-banner\">\n <div class=\"grid-area-label\">\n <ds-text text=\"banner\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-settings\">\n <div class=\"grid-area-label\">\n <ds-text text=\"settings\"></ds-text>\n </div>\n </div>\n `\n : isHome\n ? html`\n <div class=\"view-area view-banner\">\n <div class=\"grid-area-label\">\n <ds-text text=\"banner\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-header\">\n <div class=\"grid-area-label\">\n <ds-text text=\"header\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-message\">\n <div class=\"grid-area-label\">\n <ds-text text=\"message\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-lists\">\n <div class=\"grid-area-label\">\n <ds-text text=\"lists\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-footer\">\n <div class=\"grid-area-label\">\n <ds-text text=\"footer\"></ds-text>\n </div>\n </div>\n `\n : isList\n ? html`\n <div class=\"view-area view-banner\">\n <div class=\"grid-area-label\">\n <ds-text text=\"banner\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-header\">\n <div class=\"grid-area-label\">\n <ds-text text=\"header\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-board\">\n <div class=\"grid-area-label\">\n <ds-text text=\"board\"></ds-text>\n </div>\n </div>\n `\n : isApp\n ? html`\n <div class=\"view-area view-banner\">\n <div class=\"grid-area-label\">\n <ds-text text=\"banner\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-header\">\n <div class=\"grid-area-label\">\n <ds-text text=\"header\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-main\">\n <div class=\"grid-area-label\">\n <ds-text text=\"main\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-page-dots\">\n <div class=\"grid-area-label\">\n <ds-text text=\"page-dots\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-footer\">\n <div class=\"grid-area-label\">\n <ds-text text=\"footer\"></ds-text>\n </div>\n </div>\n `\n : isCompany\n ? html`\n <div class=\"view-area view-header\">\n <div class=\"grid-area-label\">\n <ds-text text=\"header\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-content\">\n <div class=\"grid-area-label\">\n <ds-text text=\"content\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-footer\">\n <div class=\"grid-area-label\">\n <ds-text text=\"footer\"></ds-text>\n </div>\n </div>\n `\n : isPortfolio\n ? html`\n <div class=\"view-area view-square\">\n <div class=\"grid-area-label\">\n <ds-text text=\"square\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-title\">\n <div class=\"grid-area-label\">\n <ds-text text=\"title\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-header\">\n <div class=\"grid-area-label\">\n <ds-text text=\"header\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-projects\">\n <div class=\"grid-area-label\">\n <ds-text text=\"projects\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-bio\">\n <div class=\"grid-area-label\">\n <ds-text text=\"bio\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-nav\">\n <div class=\"grid-area-label\">\n <ds-text text=\"nav\"></ds-text>\n </div>\n </div>\n <div class=\"view-area view-footer\">\n <div class=\"grid-area-label\">\n <ds-text text=\"footer\"></ds-text>\n </div>\n </div>\n `\n : \"\"}\n </div>\n `\n : \"\"}\n `;\n }\n}\n\ncustomElements.define(\"ds-layout\", Layout);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-layout\": Layout;\n }\n}\n","@import \"../../1-root/component-metrics.css\";\n\n:host {\n box-sizing: border-box;\n display: block;\n min-width: calc(8 * var(--ds-unit));\n max-height: var(--ds-menu-max-height, calc(16 * var(--ds-unit)));\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n/* Keep the shared face inside the boundary: product resets can reach a host. */\n.frame {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n max-height: min(var(--ds-menu-max-height, calc(16 * var(--ds-unit))), var(--ds-menu-available-height, 100vh));\n overflow-y: auto;\n padding: calc(4px * var(--ds-sf));\n border: 1px solid var(--ds-border-color);\n border-radius: var(--ds-radius-card);\n background: var(--ds-paper);\n color: var(--ds-text-color);\n box-shadow: none;\n font-family: var(--ds-typeface-regular);\n font-feature-settings: var(--ds-font-features);\n font-size: var(--ds-type-size-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n}\nslot { display: contents; }\n\n:host([floating]:not([open])) { display: none; }\n:host([floating]) { position: fixed; inset: auto; margin: 0; min-width: 0; width: var(--ds-menu-width, var(--ds-menu-anchor-width)); z-index: 1; scroll-padding: calc(var(--ds-unit) / 2); }\n:host([floating]) ::slotted(:is(ds-button, ds-file-picker)) { flex: 0 0 auto; --ds-button-height: var(--ds-row-height); --ds-button-align: flex-start; --ds-button-padding: 0 calc(4px * var(--ds-sf)); width: 100%; }\n:host([data-grid]) { width: max-content; min-width: 0; }\n:host([data-grid]) .frame { display: grid; grid-template-columns: repeat(var(--ds-menu-columns), var(--ds-row-height)); width: max-content; max-width: 100%; }\n:host([data-grid]) ::slotted(:is(ds-button, ds-file-picker)) { --ds-button-height: var(--ds-row-height); --ds-button-min-width: 0px; --ds-button-padding: 0; --ds-button-align: center; }\n\n:host([compact]) {\n width: var(--ds-menu-width, calc(8 * var(--ds-unit)));\n min-width: calc(4 * var(--ds-unit));\n max-width: 100%;\n max-height: none;\n}\n:host([compact]) .frame {\n gap: 1px;\n padding: 0;\n border: 0;\n border-radius: 0;\n overflow: visible;\n background: transparent;\n}\n:host([compact]) ::slotted(:is(ds-button, ds-file-picker)) {\n --ds-button-height: var(--ds-row-height);\n --ds-button-padding: 0 calc(4px * var(--ds-sf));\n --ds-button-background: var(--ds-fill);\n --ds-button-color: var(--ds-text-color);\n --ds-radius: 0px;\n width: 100%;\n}\n\n:host([floating]) ::slotted(:is(ds-button, ds-file-picker):is(:hover, :focus-within):not([disabled], [data-disabled])) { --ds-button-background: var(--ds-fill); }\n\n:host([trigger-mode=\"context\"]), :host([trigger-mode=\"submenu\"]), :host([trigger-mode=\"manual\"]) {\n width: var(--ds-menu-width, calc(8 * var(--ds-unit)));\n}\n:host([data-grid]) {\n width: calc((var(--ds-menu-columns) + 1) * var(--ds-row-height));\n}\n:host([data-grid]) .frame {\n width: 100%;\n padding-inline: calc(var(--ds-unit) / 2 - 1px);\n}\n:host([data-grid]) ::slotted([data-ds-menu-start]) { grid-column-start: 1; }\n:host([data-grid]) ::slotted(:is([data-ds-menu-row], [data-ds-menu-separator], [data-ds-menu-label])) { grid-column: 1 / -1; }\n:host([data-grid]) ::slotted([data-ds-menu-row]) {\n --ds-button-align: flex-start;\n --ds-button-padding: 0 calc(4px * var(--ds-sf));\n}\n::slotted([data-ds-menu-label]) {\n display: block;\n box-sizing: border-box;\n height: var(--ds-row-height);\n padding: 0 calc(4px * var(--ds-sf));\n color: var(--ds-text-color-muted);\n}\n::slotted([data-ds-menu-separator]) {\n width: 100%;\n box-sizing: border-box;\n border: 0;\n border-top: 1px solid var(--ds-border-color);\n margin: calc(var(--ds-unit) / 2) 0;\n}\n","import \"./styles/context-trigger.css\";\n\nexport type ContextGesture = MouseEvent | PointerEvent | KeyboardEvent;\nexport type ContextPoint = { x: number; y: number };\ntype Options = {\n /** Return the actual row when one container delegates many controls. */\n resolve?: (event: ContextGesture) => HTMLElement | null;\n touch?: boolean;\n /** Titles can suppress native text selection/callout while keeping scrolling. */\n selection?: boolean;\n aria?: boolean;\n};\n\n/** The same native context gesture for Menu and other shared action surfaces.\n * Returning false leaves the gesture to the browser or an enclosing control. */\nexport function bindContextMenuTrigger(\n trigger: HTMLElement,\n open: (point: ContextPoint, control: HTMLElement, event: ContextGesture) => void | false,\n { resolve = () => trigger, touch = true, selection = false, aria = true }: Options = {},\n) {\n const doc = trigger.ownerDocument;\n const previousAria = trigger.getAttribute(\"aria-haspopup\");\n const hadClass = trigger.classList.contains(\"ds-context-trigger\");\n let timer: ReturnType<typeof setTimeout> | undefined;\n let point: ContextPoint | undefined;\n let suppressed: HTMLElement | null = null;\n let release: ReturnType<typeof setTimeout> | undefined;\n let disposed = false;\n if (aria) trigger.setAttribute(\"aria-haspopup\", \"menu\");\n if (selection) trigger.classList.add(\"ds-context-trigger\");\n const enabled = (control: HTMLElement) => control.isConnected &&\n !control.matches(':disabled, [disabled], [aria-disabled=\"true\"], [data-disabled]') && !control.closest('[hidden], [inert]');\n const clearSuppression = () => {\n clearTimeout(release); suppressed = null;\n doc.removeEventListener(\"click\", consumeClick, true);\n };\n const consumeClick = (event: MouseEvent) => {\n const consume = suppressed && event.composedPath().includes(suppressed);\n clearSuppression();\n if (consume) { event.preventDefault(); event.stopImmediatePropagation(); }\n };\n const arm = (control: HTMLElement) => {\n clearSuppression(); suppressed = control;\n doc.addEventListener(\"click\", consumeClick, true);\n release = setTimeout(clearSuppression, 1000);\n };\n const cancel = () => {\n clearTimeout(timer); timer = undefined; point = undefined;\n doc.removeEventListener(\"pointermove\", move);\n doc.removeEventListener(\"pointerup\", cancel);\n doc.removeEventListener(\"pointercancel\", cancel);\n if (suppressed) { clearTimeout(release); release = setTimeout(clearSuppression, 1000); }\n };\n const context = (event: MouseEvent) => {\n if (event.defaultPrevented) return;\n const control = resolve(event); if (!control || !enabled(control)) return;\n cancel();\n if (suppressed === control) { event.preventDefault(); return; }\n if (open({ x: event.clientX, y: event.clientY }, control, event) === false) return;\n event.preventDefault();\n if (selection && event.button === 0) arm(control);\n };\n const key = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey ||\n (event.key !== \"ContextMenu\" && !(event.key === \"F10\" && event.shiftKey))) return;\n const control = resolve(event); if (!control || !enabled(control)) return;\n const rect = control.getBoundingClientRect();\n if (open({ x: rect.left, y: rect.bottom }, control, event) === false) return;\n event.preventDefault(); event.stopPropagation();\n };\n const move = (event: PointerEvent) => {\n if (point && Math.hypot(event.clientX - point.x, event.clientY - point.y) > 10) cancel();\n };\n const press = (event: PointerEvent) => {\n if (!touch || event.defaultPrevented || event.pointerType !== \"touch\" || event.button !== 0) return;\n const control = resolve(event); if (!control || !enabled(control)) return;\n cancel(); clearSuppression();\n const at = { x: event.clientX, y: event.clientY }; point = at;\n doc.addEventListener(\"pointermove\", move);\n doc.addEventListener(\"pointerup\", cancel);\n doc.addEventListener(\"pointercancel\", cancel);\n timer = setTimeout(() => {\n timer = undefined; point = undefined;\n if (disposed || !enabled(control) || !trigger.contains(control)) { cancel(); return; }\n if (open(at, control, event) !== false) arm(control);\n }, 600);\n };\n trigger.addEventListener(\"contextmenu\", context);\n trigger.addEventListener(\"keydown\", key);\n trigger.addEventListener(\"pointerdown\", press);\n return {\n cancel,\n dispose() {\n disposed = true; cancel(); clearSuppression();\n trigger.removeEventListener(\"contextmenu\", context);\n trigger.removeEventListener(\"keydown\", key);\n trigger.removeEventListener(\"pointerdown\", press);\n if (aria) {\n if (previousAria === null) trigger.removeAttribute(\"aria-haspopup\"); else trigger.setAttribute(\"aria-haspopup\", previousAria);\n }\n if (selection && !hadClass) trigger.classList.remove(\"ds-context-trigger\");\n },\n };\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport \"../2-core/ds-button\";\nimport \"../2-core/ds-file-picker\";\nimport \"../2-core/ds-icon\";\nimport styles from \"./styles/ds-menu.css?inline\";\nimport { bindContextMenuTrigger } from \"./context-trigger\";\n\nconst ITEM = '[role=\"option\"], [role=\"menuitem\"], [role=\"menuitemradio\"], [role=\"menuitemcheckbox\"]';\nconst FOCUSABLE = 'button, a[href], input, select, textarea, [tabindex]';\nexport type MenuCloseReason = \"escape\" | \"outside\" | \"select\" | \"back\" | \"parent\";\nexport type MenuTriggerMode = \"click\" | \"context\" | \"submenu\" | \"manual\";\nexport type MenuToggleDetail = { open: boolean; trigger: HTMLElement | null; point?: { x: number; y: number } };\nexport type MenuAnchor = HTMLElement | Pick<DOMRectReadOnly, \"left\" | \"top\" | \"right\" | \"bottom\" | \"width\" | \"height\">;\n\nconst openMenus = new WeakMap<Document, Set<Menu>>();\n\n/** Shared option/action face and navigation. Floating menus use the native\n * popover layer; suggestions can keep focus on a light-DOM writing field. */\nexport class Menu extends LitElement {\n static styles = unsafeCSS(styles);\n static properties = {\n compact: { type: Boolean, reflect: true },\n floating: { type: Boolean, reflect: true },\n open: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n columns: { type: Number, reflect: true },\n anchor: { attribute: false },\n placement: { type: String },\n trigger: { attribute: false },\n triggerMode: { type: String, attribute: \"trigger-mode\", reflect: true },\n contextSelector: { type: String, attribute: \"context-selector\" },\n hover: { type: Boolean, reflect: true },\n controller: { attribute: false },\n activeId: { type: String, attribute: \"active-id\" },\n };\n declare compact: boolean;\n declare floating: boolean;\n declare open: boolean;\n /** Stop new trigger requests without closing an operation already shown. */\n declare disabled: boolean;\n declare columns: number;\n declare anchor: MenuAnchor | null;\n declare placement: \"top\" | \"bottom\" | \"right\" | \"left\";\n declare triggerMode: MenuTriggerMode;\n /** Delegate context gestures from trigger to matching descendants. */\n declare contextSelector: string;\n declare trigger: HTMLElement | null;\n declare hover: boolean;\n declare controller: HTMLElement | null;\n declare activeId: string;\n private listeningTo: HTMLElement | null = null;\n private listeningTrigger: HTMLElement | null = null;\n private listeningSelector = \"\";\n private listeningMode: MenuTriggerMode | null = null;\n private contextBinding?: ReturnType<typeof bindContextMenuTrigger>;\n private triggerAttributes = new Map<string, string | null>();\n private openingEdge: \"first\" | \"last\" = \"first\";\n private search = \"\";\n private searchAt = 0;\n private gridColumn = 0;\n private focusOnOpen = true;\n private hoverTimer?: ReturnType<typeof setTimeout>;\n private shown = false;\n private observer?: ResizeObserver;\n private choicesObserver?: MutationObserver;\n private opener: HTMLElement | null = null;\n private observedAnchor: HTMLElement | null = null;\n private restoreFocus = true;\n private heldFocus = false;\n private focusVersion = 0;\n private contextPoint: MenuAnchor | null = null;\n private invokingControl: HTMLElement | null = null;\n private get parentMenu(): Menu | null { return this.parentElement?.closest<Menu>(\"ds-menu\") ?? null; }\n private get rootMenu(): Menu { return this.parentMenu?.rootMenu ?? this; }\n\n constructor() {\n super();\n this.compact = false; this.floating = false; this.open = false; this.disabled = false;\n this.placement = \"bottom\"; this.triggerMode = \"click\"; this.contextSelector = \"\";\n this.columns = 1; this.anchor = null; this.trigger = null; this.hover = false; this.controller = null; this.activeId = \"\";\n this.addEventListener(\"keydown\", this.onKeyDown);\n this.addEventListener(\"pointerdown\", this.retainController);\n this.addEventListener(\"pointerover\", this.onPointerChoice);\n this.addEventListener(\"pointerenter\", this.onHoverEnter);\n this.addEventListener(\"pointerleave\", this.onHoverLeave);\n this.addEventListener(\"focusin\", () => { this.heldFocus = true; this.syncTabStops(); });\n this.addEventListener(\"focusout\", event => {\n if (event.relatedTarget instanceof Node && !this.contains(event.relatedTarget)) this.heldFocus = false;\n });\n }\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"listbox\");\n this.requestUpdate();\n }\n disconnectedCallback() {\n this.listeningTo?.removeEventListener(\"keydown\", this.onControllerKey);\n this.listeningTo = null;\n this.bindTrigger(null);\n clearTimeout(this.hoverTimer);\n this.hide(true);\n super.disconnectedCallback();\n }\n updated() {\n if (this.disabled) this.contextBinding?.cancel();\n this.bindTrigger(this.trigger);\n if (this.trigger && !this.contextSelector) {\n this.trigger.setAttribute(\"aria-haspopup\", this.getAttribute(\"role\") === \"menu\" ? \"menu\" : \"listbox\");\n this.trigger.setAttribute(\"aria-expanded\", String(this.open));\n if (this.id) this.trigger.setAttribute(\"aria-controls\", this.id);\n }\n this.style.setProperty(\"--ds-menu-columns\", String(Math.max(1, Math.floor(this.columns || 1))));\n this.toggleAttribute(\"data-grid\", this.columns > 1);\n if (this.listeningTo !== this.controller) {\n this.listeningTo?.removeEventListener(\"keydown\", this.onControllerKey);\n this.listeningTo = this.controller;\n this.listeningTo?.addEventListener(\"keydown\", this.onControllerKey);\n }\n if (this.floating && this.open) this.show(); else this.hide(true);\n this.syncTabStops();\n const element = this.anchor instanceof HTMLElement ? this.anchor : null;\n if (this.observer && this.observedAnchor !== element) {\n if (this.observedAnchor) this.observer.unobserve(this.observedAnchor);\n if (element) this.observer.observe(element);\n this.observedAnchor = element;\n }\n this.place();\n this.scrollActive();\n }\n /** Prepare a newly inserted menu before gesture-time focus. */\n renderNow() { this.performUpdate(); }\n private bindTrigger(trigger: HTMLElement | null) {\n if (this.listeningTrigger === trigger && this.listeningSelector === this.contextSelector && this.listeningMode === this.triggerMode) return;\n this.contextBinding?.dispose(); this.contextBinding = undefined;\n for (const [name, value] of this.triggerAttributes) {\n if (value === null) this.listeningTrigger?.removeAttribute(name); else this.listeningTrigger?.setAttribute(name, value);\n }\n this.triggerAttributes.clear();\n this.listeningTrigger?.removeEventListener(\"click\", this.onTriggerClick);\n this.listeningTrigger?.removeEventListener(\"keydown\", this.onTriggerKey);\n this.listeningTrigger?.removeEventListener(\"pointerenter\", this.onHoverEnter);\n this.listeningTrigger?.removeEventListener(\"pointerleave\", this.onHoverLeave);\n this.listeningTrigger = trigger;\n this.listeningSelector = this.contextSelector;\n this.listeningMode = this.triggerMode;\n if (trigger && this.triggerMode === \"context\") this.contextBinding = bindContextMenuTrigger(trigger, (point, control) => {\n if (this.disabled) return false;\n this.openAt(point, control);\n }, { resolve: event => this.contextControl(event), aria: false });\n if (trigger && !this.contextSelector) for (const name of [\"aria-haspopup\", \"aria-expanded\", \"aria-controls\"]) this.triggerAttributes.set(name, trigger.getAttribute(name));\n trigger?.addEventListener(\"click\", this.onTriggerClick);\n trigger?.addEventListener(\"keydown\", this.onTriggerKey);\n trigger?.addEventListener(\"pointerenter\", this.onHoverEnter);\n trigger?.addEventListener(\"pointerleave\", this.onHoverLeave);\n }\n private toggleFromTrigger(open: boolean, detail: Omit<MenuToggleDetail, \"open\"> = { trigger: this.trigger }) {\n if (this.disabled || (!this.trigger && this.triggerMode !== \"manual\") || (this.trigger && !this.enabled(this.trigger))) return;\n const event = new CustomEvent<MenuToggleDetail>(\"ds-menu-toggle\", {detail: {open, ...detail}, bubbles: true, composed: true, cancelable: true});\n if (this.dispatchEvent(event)) this.open = open;\n }\n /** Open a context menu from an actual viewport point or the trigger's keyboard position. */\n openAt(point: { x: number; y: number }, invokingControl = this.trigger) {\n if (this.disabled) return;\n if (this.trigger && !this.enabled(this.trigger)) return;\n if (invokingControl && (!invokingControl.isConnected || !this.enabled(invokingControl))) return;\n this.contextPoint = { left: point.x, right: point.x, top: point.y, bottom: point.y, width: 0, height: 0 };\n const focused = this.ownerDocument.activeElement;\n this.invokingControl = invokingControl?.matches(FOCUSABLE) ? invokingControl\n : invokingControl?.contains(focused) && focused instanceof HTMLElement ? focused\n : invokingControl?.querySelector<HTMLElement>(FOCUSABLE) ?? invokingControl;\n if (this.shown) this.opener = this.invokingControl;\n this.focusOnOpen = true; this.openingEdge = \"first\";\n this.toggleFromTrigger(true, { trigger: invokingControl, point });\n if (this.open) this.place();\n }\n /** A selected action dismisses its whole branch. Products can decline it. */\n select() { this.rootMenu.requestClose(\"select\"); }\n private contextControl(event: Event): HTMLElement | null {\n if (this.disabled || !this.trigger) return null;\n if (!this.contextSelector) return this.enabled(this.trigger) ? this.trigger : null;\n for (const node of event.composedPath()) {\n if (node === this.trigger) break;\n if (node instanceof Menu) return null;\n if (node instanceof HTMLElement && node.matches(this.contextSelector)) return this.enabled(node) && !node.closest('[hidden], [inert]') ? node : null;\n }\n return null;\n }\n private onTriggerClick = (event: MouseEvent) => {\n if (this.triggerMode === \"context\" || this.triggerMode === \"manual\" || event.defaultPrevented) return;\n if (this.hover && this.trigger?.matches(\"a[href]\")) return;\n this.focusOnOpen = true;\n this.openingEdge = \"first\";\n this.toggleFromTrigger(this.triggerMode === \"submenu\" || !this.open);\n };\n private onTriggerKey = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.isComposing || event.altKey || event.metaKey || event.ctrlKey || (event.shiftKey && !(this.triggerMode === \"context\" && event.key === \"F10\")) || !this.trigger || !this.enabled(this.trigger)) return;\n if (this.triggerMode === \"context\" || this.triggerMode === \"manual\") return;\n if (this.triggerMode === \"submenu\") {\n const forward = this.ownerDocument.defaultView?.getComputedStyle(this).direction === \"rtl\" ? \"ArrowLeft\" : \"ArrowRight\";\n if (event.key !== forward && event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault(); event.stopPropagation(); this.focusOnOpen = true;\n if (this.open) this.initialChoice()?.focus(); else this.toggleFromTrigger(true); return;\n }\n if (event.key !== \"ArrowDown\" && event.key !== \"ArrowUp\") return;\n event.preventDefault();\n this.focusOnOpen = true;\n this.openingEdge = event.key === \"ArrowUp\" ? \"last\" : \"first\";\n if (this.open) this.initialChoice()?.focus(); else this.toggleFromTrigger(true);\n };\n private onHoverEnter = (event: PointerEvent) => {\n if ((!this.hover && this.triggerMode !== \"submenu\") || event.pointerType === \"touch\") return;\n clearTimeout(this.hoverTimer);\n if (!this.open) { this.focusOnOpen = false; this.toggleFromTrigger(true); }\n };\n private onHoverLeave = (event: PointerEvent) => {\n if ((!this.hover && this.triggerMode !== \"submenu\") || event.pointerType === \"touch\") return;\n if (event.relatedTarget instanceof Node && (this.contains(event.relatedTarget) || this.trigger?.contains(event.relatedTarget))) return;\n clearTimeout(this.hoverTimer);\n // The half-square gap stays traversable without an invisible product overlay.\n this.hoverTimer = setTimeout(() => {\n if (this.open && !this.contains(this.ownerDocument.activeElement)) this.requestClose(\"outside\");\n }, 180);\n };\n private initialChoice() {\n const items = this.items();\n return items.find(item => item.getAttribute(\"aria-selected\") === \"true\" || item.getAttribute(\"aria-checked\") === \"true\") ?? (this.openingEdge === \"last\" ? items.at(-1) : items[0]);\n }\n private items(includeDisabled = false): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>(ITEM)).filter(item =>\n (includeDisabled || this.enabled(item)) &&\n !item.closest('[hidden], [inert]') && item.closest(\"ds-menu\") === this,\n );\n }\n private enabled(item: HTMLElement) {\n return !item.matches(\":disabled\") && !item.hasAttribute(\"disabled\") && item.getAttribute(\"aria-disabled\") !== \"true\";\n }\n private syncTabStops() {\n if (!this.floating) return;\n const items = this.items(true);\n const current = this.controller ? null : items.find(item => item === this.ownerDocument.activeElement) ?? items.find(item => this.enabled(item));\n for (const item of items) item.tabIndex = item === current ? 0 : -1;\n }\n private onChoicesChanged = () => {\n this.syncTabStops(); this.place(); this.scrollActive();\n // A confirmation can replace the focused row. Keep navigation in the menu\n // without stealing focus from a field or dialog opened by a product action.\n if (this.shown && this.heldFocus && this.ownerDocument.activeElement === this.ownerDocument.body) this.focusInitial(this.ownerDocument.body);\n };\n private focusInitial(openingFocus: Element | null) {\n const version = ++this.focusVersion;\n void Promise.all(Array.from(this.querySelectorAll<LitElement>(\"ds-button, ds-file-picker\"), element => element.updateComplete)).then(() => {\n const active = this.ownerDocument.activeElement;\n if (this.shown && this.isConnected && version === this.focusVersion && !this.controller &&\n (active === openingFocus || active === this.opener || active === this.ownerDocument.body || active === this)) {\n const choice = this.initialChoice();\n choice?.focus({ preventScroll: true });\n if (choice) this.scrollChoice(choice);\n }\n });\n }\n private isTop() { return [...(openMenus.get(this.ownerDocument) ?? [])].at(-1) === this; }\n private show() {\n if (this.shown || !this.isConnected) return;\n this.shown = true;\n const openingFocus = this.ownerDocument.activeElement;\n this.opener = this.invokingControl ?? this.controller ?? this.trigger ?? (this.anchor instanceof HTMLElement ? this.anchor : null) ?? (openingFocus instanceof HTMLElement ? openingFocus : null);\n this.search = \"\";\n this.restoreFocus = true;\n this.heldFocus = false;\n let stack = openMenus.get(this.ownerDocument);\n if (!stack) openMenus.set(this.ownerDocument, stack = new Set());\n stack.add(this);\n this.popover = \"manual\";\n this.showPopover?.();\n this.choicesObserver = new MutationObserver(this.onChoicesChanged);\n this.choicesObserver.observe(this, { childList: true, subtree: true, attributes: true, attributeFilter: [\"disabled\", \"hidden\", \"aria-disabled\"] });\n if (typeof ResizeObserver !== \"undefined\") {\n this.observer = new ResizeObserver(this.place);\n this.observer.observe(this);\n this.observedAnchor = this.anchor instanceof HTMLElement ? this.anchor : null;\n if (this.observedAnchor) this.observer.observe(this.observedAnchor);\n }\n this.ownerDocument.addEventListener(\"pointerdown\", this.onOutside, true);\n this.ownerDocument.addEventListener(\"focusin\", this.onOutside);\n this.ownerDocument.addEventListener(\"keydown\", this.onEscape, true);\n this.ownerDocument.addEventListener(\"scroll\", this.place, true);\n this.ownerDocument.defaultView?.addEventListener(\"resize\", this.place);\n this.ownerDocument.defaultView?.visualViewport?.addEventListener(\"resize\", this.place);\n this.ownerDocument.defaultView?.visualViewport?.addEventListener(\"scroll\", this.place);\n if (!this.controller && this.focusOnOpen) {\n // Native frames must be distributed through newly inserted Lit slots first.\n this.focusInitial(openingFocus);\n }\n }\n private hide(restore: boolean) {\n if (!this.shown) return;\n this.shown = false;\n for (const child of this.querySelectorAll<Menu>(\"ds-menu\")) if (child.open) child.requestClose(\"parent\");\n clearTimeout(this.hoverTimer);\n this.focusVersion++;\n const active = this.ownerDocument.activeElement;\n const within = active instanceof Node && this.contains(active);\n // Removal closes a native popover before disconnectedCallback runs.\n if (this.isConnected && this.matches(\":popover-open\")) this.hidePopover?.();\n openMenus.get(this.ownerDocument)?.delete(this);\n this.observer?.disconnect(); this.observer = undefined; this.observedAnchor = null;\n this.choicesObserver?.disconnect(); this.choicesObserver = undefined;\n this.ownerDocument.removeEventListener(\"pointerdown\", this.onOutside, true);\n this.ownerDocument.removeEventListener(\"focusin\", this.onOutside);\n this.ownerDocument.removeEventListener(\"keydown\", this.onEscape, true);\n this.ownerDocument.removeEventListener(\"scroll\", this.place, true);\n this.ownerDocument.defaultView?.removeEventListener(\"resize\", this.place);\n this.ownerDocument.defaultView?.visualViewport?.removeEventListener(\"resize\", this.place);\n this.ownerDocument.defaultView?.visualViewport?.removeEventListener(\"scroll\", this.place);\n const focusEvent = new CustomEvent(\"ds-menu-close-focus\", { bubbles: true, composed: true, cancelable: true });\n const mayRestore = this.dispatchEvent(focusEvent);\n if (mayRestore && restore && this.restoreFocus && (within || (this.heldFocus && active === this.ownerDocument.body)) && this.opener?.isConnected) this.opener.focus({preventScroll: true});\n this.opener = null; this.invokingControl = null;\n this.heldFocus = false;\n }\n requestClose(reason: MenuCloseReason) {\n this.restoreFocus = reason !== \"outside\" && reason !== \"parent\";\n for (const child of this.querySelectorAll<Menu>(\"ds-menu\")) child.restoreFocus = false;\n const event = new CustomEvent(\"ds-menu-close\", {detail: {reason}, bubbles: true, composed: true, cancelable: true});\n if (this.dispatchEvent(event)) this.open = false;\n }\n private onEscape = (event: KeyboardEvent) => {\n if (this.isTop() && event.key === \"Escape\" && !event.defaultPrevented && !event.isComposing) {\n event.preventDefault(); event.stopPropagation(); this.requestClose(\"escape\");\n }\n };\n private onOutside = (event: Event) => {\n const top = [...(openMenus.get(this.ownerDocument) ?? [])].at(-1);\n if (top !== this && (!top || !this.contains(top))) return;\n const path = event.composedPath();\n const trigger = this.contextSelector || this.triggerMode === \"manual\" ? this.invokingControl : this.trigger;\n if (!path.includes(this) && !(this.anchor instanceof HTMLElement && !this.controller && path.includes(this.anchor)) && !(trigger && path.includes(trigger)) && !(this.controller && path.includes(this.controller))) this.requestClose(\"outside\");\n };\n private onPointerChoice = (event: PointerEvent) => {\n if (this.controller || this.getAttribute(\"role\") !== \"menu\" || event.pointerType === \"touch\") return;\n const item = event.composedPath().find(node => node instanceof HTMLElement && node.matches(ITEM)) as HTMLElement | undefined;\n if (item && item.closest(\"ds-menu\") === this && this.enabled(item)) item.focus({ preventScroll: true });\n };\n private retainController = (event: PointerEvent) => {\n if (this.controller && event.button === 0 && event.composedPath().some(node => node instanceof HTMLElement && node.matches(ITEM))) event.preventDefault();\n };\n place = () => {\n const anchor = this.triggerMode === \"context\" || this.triggerMode === \"manual\" ? this.contextPoint ?? this.anchor : this.anchor;\n if (!this.shown || !anchor) return;\n const rect = anchor instanceof HTMLElement ? anchor.getBoundingClientRect() : anchor, view = this.ownerDocument.defaultView!;\n const viewport = view.visualViewport;\n const left = viewport?.offsetLeft ?? 0, top = viewport?.offsetTop ?? 0;\n const width = viewport?.width ?? view.innerWidth, height = viewport?.height ?? view.innerHeight;\n const gap = parseFloat(view.getComputedStyle(this).scrollPaddingTop) || 10, unit = gap * 2;\n const room = Math.max(0, width - 2 * gap);\n this.style.maxWidth = `${room}px`;\n this.style.setProperty(\"--ds-menu-anchor-width\", `${Math.min(room, Math.max(4 * unit, rect.width))}px`);\n if (this.placement === \"right\" || this.placement === \"left\" || this.triggerMode === \"submenu\") {\n this.style.setProperty(\"--ds-menu-available-height\", `${Math.max(0, height - 2 * gap)}px`);\n const box = this.getBoundingClientRect();\n const preferLeft = this.placement === \"left\" || view.getComputedStyle(this).direction === \"rtl\";\n const toRight = left + width - rect.right, toLeft = rect.left - left;\n const useLeft = preferLeft ? toLeft >= box.width || toLeft > toRight : toRight < box.width && toLeft > toRight;\n this.style.left = `${Math.max(left + gap, Math.min(useLeft ? rect.left - box.width : rect.right, left + width - gap - box.width))}px`;\n this.style.top = `${Math.max(top + gap, Math.min(rect.top, top + height - gap - box.height))}px`;\n return;\n }\n const below = top + height - rect.bottom - 2 * gap, above = rect.top - top - 2 * gap;\n const frame = this.shadowRoot?.querySelector<HTMLElement>(\".frame\");\n const needed = Math.min(frame?.scrollHeight ?? this.scrollHeight, 8 * unit);\n const up = this.placement === \"top\" ? above >= needed || above >= below : below < needed && above > below;\n this.style.setProperty(\"--ds-menu-available-height\", `${Math.max(0, Math.min(height - 2 * gap, up ? above : below))}px`);\n const box = this.getBoundingClientRect();\n this.style.left = `${Math.max(left + gap, Math.min(rect.left, left + width - gap - box.width))}px`;\n this.style.top = `${Math.max(top + gap, up ? rect.top - gap - box.height : rect.bottom + gap)}px`;\n };\n private activate(item: HTMLElement) {\n const event = new CustomEvent(\"ds-menu-active\", {detail: {id: item.id}, bubbles: true, composed: true, cancelable: true});\n if (this.dispatchEvent(event)) this.activeId = item.id;\n }\n private scrollActive() {\n if (!this.controller || !this.shown) return;\n const item = this.items().find(item => item.id === this.activeId);\n if (!item) return;\n this.scrollChoice(item);\n }\n private scrollChoice(item: HTMLElement) {\n // Scroll the accepted choice, never a controlled request the owner declined.\n const scroller = this.shadowRoot?.querySelector<HTMLElement>(\".frame\");\n if (!scroller) return;\n const box = item.getBoundingClientRect(), frame = scroller.getBoundingClientRect();\n if (box.top < frame.top) scroller.scrollTop -= frame.top - box.top;\n else if (box.bottom > frame.bottom) scroller.scrollTop += box.bottom - frame.bottom;\n }\n private navigate(event: KeyboardEvent, external: boolean) {\n if (event.defaultPrevented || event.isComposing || event.altKey || event.metaKey || event.ctrlKey || event.shiftKey) return;\n if (external && (!this.open || !this.floating || !this.isTop())) return;\n const items = this.items(true); if (!items.some(item => this.enabled(item))) return;\n const current = external ? items.findIndex(item => item.id === this.activeId) : items.findIndex(item => event.composedPath().includes(item));\n const columns = Math.max(1, Math.floor(this.columns || 1));\n let next: number;\n switch (event.key) {\n case \"ArrowDown\": next = columns > 1 ? this.gridStep(items, current, columns, 1) : this.step(items, current, 1, 1); break;\n case \"ArrowUp\": next = columns > 1 ? this.gridStep(items, current, columns, -1) : this.step(items, current, 1, -1); break;\n case \"ArrowRight\": if (columns === 1 || external) return; next = this.step(items, current, 1, 1); break;\n case \"ArrowLeft\": if (columns === 1 || external) return; next = this.step(items, current, 1, -1); break;\n case \"Home\": if (external) return; next = items.findIndex(item => this.enabled(item)); break;\n case \"End\": if (external) return; next = this.lastEnabled(items); break;\n case \"Enter\":\n if (external && current >= 0 && this.enabled(items[current]!)) { event.preventDefault(); items[current]!.click(); }\n return;\n default:\n if (external || event.key.length !== 1 || event.key === \" \") return;\n const now = Date.now();\n this.search = (now - this.searchAt < 700 ? this.search : \"\") + event.key.toLocaleLowerCase();\n this.searchAt = now;\n const repeated = [...this.search].every(char => char === this.search[0]);\n const query = repeated ? this.search[0]! : this.search;\n const start = repeated ? current + 1 : Math.max(0, current);\n next = -1;\n for (let offset = 0; offset < items.length; offset++) {\n const index = (start + offset + items.length) % items.length;\n const item = items[index]!;\n if (this.enabled(item) && (item.getAttribute(\"data-text-value\") ?? item.getAttribute(\"aria-label\") ?? item.textContent ?? \"\").trim().toLocaleLowerCase().startsWith(query)) { next = index; break; }\n }\n break;\n }\n if (next < 0) return;\n event.preventDefault();\n const item = items[next]!;\n if (external) this.activate(item); else { item.focus({preventScroll: true}); this.scrollChoice(item); }\n }\n private lastEnabled(items: HTMLElement[]) { return items.reduce((last, item, index) => this.enabled(item) ? index : last, -1); }\n /** Full-width actions and section starts occupy their actual visual rows. */\n private gridStep(items: HTMLElement[], current: number, columns: number, direction: number) {\n if (current < 0) return direction > 0 ? items.findIndex(item => this.enabled(item)) : this.lastEnabled(items);\n const rows: { indices: number[]; wide: boolean }[] = [];\n let row: number[] = [];\n const flush = () => { if (row.length) rows.push({ indices: row, wide: false }); row = []; };\n for (let index = 0; index < items.length; index++) {\n const item = items[index]!;\n if (item.closest('[data-ds-menu-row], [data-ds-menu-start]')) flush();\n if (item.closest('[data-ds-menu-row]')) rows.push({ indices: [index], wide: true });\n else { row.push(index); if (row.length === columns) flush(); }\n }\n flush();\n const at = rows.findIndex(row => row.indices.includes(current));\n if (at < 0) return current;\n if (!rows[at]!.wide) this.gridColumn = rows[at]!.indices.indexOf(current);\n for (let offset = 1; offset <= rows.length; offset++) {\n const target = rows[(at + direction * offset + rows.length * offset) % rows.length]!;\n const next = target.indices[Math.min(this.gridColumn, target.indices.length - 1)]!;\n if (this.enabled(items[next]!)) return next;\n }\n return current;\n }\n private step(items: HTMLElement[], current: number, columns: number, direction: number) {\n if (current < 0) return direction > 0 ? items.findIndex(item => this.enabled(item)) : this.lastEnabled(items);\n const rows = Math.ceil(items.length / columns), column = current % columns;\n for (let offset = 1; offset <= rows; offset++) {\n const row = (Math.floor(current / columns) + direction * offset + rows * offset) % rows;\n const next = Math.min(row * columns + column, items.length - 1);\n if (this.enabled(items[next]!)) return next;\n }\n return current;\n }\n private onControllerKey = (event: KeyboardEvent) => this.navigate(event, true);\n private onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Tab\" && this.floating && !this.controller && !event.defaultPrevented) { this.rootMenu.requestClose(\"outside\"); return; }\n if (event.composedPath().some(node => node instanceof HTMLElement && (node.isContentEditable || node.matches('input:not([type=\"file\"][role=\"menuitem\"]), textarea, select, [role=\"textbox\"], [role=\"combobox\"]')))) return;\n if (event.composedPath().find(node => node instanceof Menu) !== this) return;\n const back = this.ownerDocument.defaultView?.getComputedStyle(this).direction === \"rtl\" ? \"ArrowRight\" : \"ArrowLeft\";\n if (this.parentMenu && event.key === back && !event.defaultPrevented && !event.isComposing) {\n event.preventDefault(); event.stopPropagation(); this.requestClose(\"back\"); return;\n }\n this.navigate(event, false);\n };\n render() { return html`<div class=\"frame\"><slot @slotchange=${this.onChoicesChanged}></slot></div>`; }\n}\ndefine(\"ds-menu\", Menu);\ndeclare global { interface HTMLElementTagNameMap { \"ds-menu\": Menu } }\n","@import \"../../1-root/component-metrics.css\";\n\n/* ds-tabs.css */\n\n:host {\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--ds-tabs-gap, calc(10px * var(--ds-sf)));\n min-width: 0;\n height: var(--ds-row-height);\n}\n\n:host([wrap]) {\n flex-wrap: wrap;\n height: auto;\n min-height: var(--ds-row-height);\n}\n\n:host([fill]) ::slotted(*) {\n flex: 1 1 0;\n justify-content: center;\n}\n\n/*\n * An option group (role=\"group\"): grey choices, the chosen one in the accent,\n * as DS one's secondary and primary buttons.\n */\n:host([role=\"group\"]) ::slotted(ds-button) {\n --ds-button-height: var(--ds-row-height);\n --ds-button-padding: 0 calc(4px * var(--ds-sf));\n --ds-button-background: var(--ds-button-background-color-secondary);\n min-width: 0;\n}\n\n:host([role=\"group\"]) ::slotted(ds-button:hover) {\n --ds-button-background: var(--ds-fill-hover);\n}\n\n:host([role=\"group\"]) ::slotted(ds-button[active]) {\n --ds-button-background: var(--ds-button-background-color-primary);\n --ds-button-color: var(--ds-button-text-color-on-accent);\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-tabs.css?inline\";\nimport { define } from \"../0-face/define\";\n\n/**\n * A run of choices of which one is current: the panel's tabs, a subtab bar,\n * a segmented option group. The choices are `ds-button`s; the current one is\n * `active`.\n *\n * The element is a `tablist` unless it says otherwise, and its buttons take the\n * tab look. An option group that is not a set of tabs takes `role=\"group\"`, its\n * buttons `aria-pressed`, and they take DS one's button looks: grey, and the\n * accent for the chosen one.\n *\n * @element ds-tabs\n * @attr fill - Share the width equally between the choices.\n *\n * @example\n * <ds-tabs role=\"group\" fill>\n * <ds-button active aria-pressed=\"true\">Left</ds-button>\n * <ds-button aria-pressed=\"false\">Right</ds-button>\n * </ds-tabs>\n *\n * <ds-tabs aria-label=\"Build\">\n * <ds-button role=\"tab\" active aria-selected=\"true\">Blocks</ds-button>\n * <ds-button role=\"tab\" aria-selected=\"false\">Patterns</ds-button>\n * </ds-tabs>\n */\nexport class Tabs extends LitElement {\n static properties = {\n fill: { type: Boolean, reflect: true },\n wrap: { type: Boolean, reflect: true },\n };\n\n declare fill: boolean;\n declare wrap: boolean;\n\n constructor() {\n super();\n this.fill = false;\n this.wrap = false;\n this.addEventListener(\"keydown\", this.navigate);\n }\n\n static styles = unsafeCSS(styles);\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"tablist\");\n }\n\n private navigate = (event: KeyboardEvent): void => {\n if (this.getAttribute(\"role\") !== \"tablist\") return;\n const tabs = [...this.querySelectorAll<HTMLElement>('[role=\"tab\"]')]\n .filter(tab => tab.closest(\"ds-tabs\") === this && !tab.hasAttribute(\"disabled\") && tab.getAttribute(\"aria-disabled\") !== \"true\");\n const current = tabs.findIndex(tab => tab === event.target);\n if (current < 0 || ![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n event.preventDefault();\n const rtl = getComputedStyle(this).direction === \"rtl\";\n const step = (event.key === \"ArrowRight\" ? 1 : -1) * (rtl ? -1 : 1);\n const next = event.key === \"Home\" ? 0 : event.key === \"End\" ? tabs.length - 1 : (current + step + tabs.length) % tabs.length;\n tabs[next].focus();\n tabs[next].click();\n };\n\n render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-tabs\", Tabs);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-tabs\": Tabs;\n }\n}\n","@import \"../../1-root/component-metrics.css\";\n\n/* ds-panel.css */\n\n:host {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n background: var(--ds-paper);\n color: var(--ds-text-color);\n font-family: var(--ds-typeface-regular);\n font-feature-settings: var(--ds-font-features);\n font-size: var(--ds-type-size-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n}\n\nslot[name=\"header\"],\nslot[name=\"footer\"] {\n display: block;\n flex: 0 0 auto;\n}\n\n.body {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-height: 0;\n}\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport styles from \"./styles/ds-panel.css?inline\";\nimport { define } from \"../0-face/define\";\n\n/**\n * A panel of chrome on Design system 1 paper: a header, a body that scrolls, a footer.\n *\n * Content goes to the default slot; `slot=\"header\"` and `slot=\"footer\"` pin to\n * the top and bottom.\n *\n * @element ds-panel\n *\n * @example\n * <ds-panel>\n * <ds-row slot=\"header\" fill>…</ds-row>\n * …\n * <ds-row slot=\"footer\">…</ds-row>\n * </ds-panel>\n */\nexport class Panel extends LitElement {\n static styles = unsafeCSS(styles);\n\n render() {\n return html`\n <slot name=\"header\" part=\"header\"></slot>\n <div class=\"body\" part=\"body\"><slot></slot></div>\n <slot name=\"footer\" part=\"footer\"></slot>\n `;\n }\n}\n\ndefine(\"ds-panel\", Panel);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-panel\": Panel;\n }\n}\n","/* Light DOM preserves native forms, labels and React event targets. */\nds-dialog > dialog {\n box-sizing: border-box;\n position: var(--ds-dialog-position, fixed);\n inset: var(--ds-dialog-inset, 0);\n width: var(--ds-dialog-width, calc(20 * var(--ds-unit)));\n max-width: var(--ds-dialog-max-width, calc(100vw - 2 * var(--ds-unit)));\n max-height: var(--ds-dialog-max-height, calc(100dvh - 2 * var(--ds-unit)));\n height: var(--ds-dialog-height, fit-content);\n margin: var(--ds-dialog-margin, auto);\n padding: var(--ds-dialog-padding, var(--ds-unit));\n border: var(--ds-dialog-border, 1px solid var(--ds-border-color));\n border-radius: 0;\n background: var(--ds-dialog-paper, var(--ds-paper));\n color: var(--ds-text-color);\n z-index: var(--ds-dialog-layer, auto);\n box-shadow: none;\n overflow: var(--ds-dialog-overflow, auto);\n overscroll-behavior: contain;\n font-family: var(--ds-typeface-regular);\n font-feature-settings: var(--ds-font-features);\n font-size: var(--ds-type-size-default);\n font-weight: var(--ds-type-weight-default);\n line-height: var(--ds-type-lineheight-default);\n letter-spacing: var(--ds-type-letterspacing-default);\n}\nds-dialog > dialog[open] { display: flex; flex-direction: column; gap: var(--ds-unit); }\nds-dialog > dialog:not([open]) { display: none; }\nds-dialog > dialog[data-ds-dialog-anchored] {\n inset: auto;\n left: var(--ds-dialog-anchor-left, 0px);\n top: var(--ds-dialog-anchor-top, 0px);\n margin: calc(var(--ds-unit) / 2);\n width: var(--ds-dialog-width, max-content);\n max-width: var(--ds-dialog-available-width, calc(100vw - var(--ds-unit)));\n max-height: var(--ds-dialog-available-height, calc(100dvh - var(--ds-unit)));\n}\nds-dialog > dialog[data-ds-dialog-flush] { padding: 0; gap: 0; }\nds-dialog > dialog[data-ds-dialog-fullscreen] {\n width: 100vw;\n height: 100dvh;\n max-width: none;\n max-height: none;\n padding: var(--ds-dialog-padding, 0);\n gap: 0;\n border: 0;\n}\nds-dialog > dialog[data-ds-dialog-rotated] {\n inset: auto;\n left: 50%;\n top: 50%;\n margin: 0;\n width: calc(100dvh - 2 * var(--ds-unit));\n height: calc(100vw - 2 * var(--ds-unit));\n max-width: none;\n max-height: none;\n transform: translate(-50%, -50%) rotate(90deg);\n}\nds-dialog > dialog[data-ds-dialog-fullscreen][data-ds-dialog-rotated] { width: 100dvh; height: 100vw; }\nds-dialog > dialog::backdrop { background: color-mix(in srgb, var(--ds-black) 40%, transparent); }\nds-dialog [data-ds-dialog=\"header\"] { display: flex; flex-direction: column; padding-right: var(--ds-unit); }\nds-dialog [data-ds-dialog=\"title\"] {\n display: flex;\n align-items: center;\n min-height: var(--ds-row-height);\n margin: 0;\n color: var(--ds-text-color);\n font: inherit;\n font-weight: var(--ds-type-weight-bold);\n line-height: var(--ds-row-height);\n}\nds-dialog [data-ds-dialog=\"description\"] { margin: 0; color: var(--ds-text-color-muted); font: inherit; }\nds-dialog [data-ds-dialog=\"footer\"] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: calc(var(--ds-unit) / 2);\n min-height: var(--ds-row-height);\n}\nds-dialog [data-ds-dialog=\"close\"] { position: absolute; top: var(--ds-unit); right: var(--ds-unit); }\n\nds-dialog > dialog[data-ds-dialog-inline] {\n position: relative;\n inset: auto;\n width: 100%;\n max-width: none;\n max-height: none;\n margin: 0;\n padding: 0;\n gap: 0;\n border: 0;\n background: transparent;\n}\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport \"../2-core/ds-button\";\nimport \"../2-core/ds-icon\";\nimport \"./styles/ds-dialog.css\";\nimport dialogStyles from \"./styles/ds-dialog.css?inline\";\nimport metrics from \"../1-root/component-metrics.css?inline\";\n\nexport type DialogCloseReason = \"escape\" | \"backdrop\" | \"outside\" | \"button\" | \"native\";\nconst openDialogs = new WeakMap<Document, Set<Dialog>>();\ntype SavedStyle = { style: CSSStyleDeclaration; name: string; value: string; priority: string; locked: string };\nconst scrollStyles = new WeakMap<Document, { declarations: SavedStyle[]; x: number; y: number }>();\n\n/** One owner per declaration, including mixed modal and stationary panels. */\nfunction syncScroll(document: Document) {\n const stack = [...(openDialogs.get(document) ?? [])];\n const holding = stack.some(dialog => !dialog.nonModal || dialog.holdScroll);\n const fixed = stack.some(dialog => !dialog.nonModal);\n let saved = scrollStyles.get(document);\n if (!holding && !saved) return;\n if (!saved) {\n saved = { declarations: [], x: document.defaultView?.scrollX ?? 0, y: document.defaultView?.scrollY ?? 0 };\n scrollStyles.set(document, saved);\n }\n const root = document.documentElement.style, body = document.body.style;\n const desired: [CSSStyleDeclaration, string, string][] = holding ? [\n [root, \"overflow\", \"hidden\"], [root, \"overscroll-behavior\", \"none\"],\n [body, \"overscroll-behavior\", \"none\"], [body, \"touch-action\", \"none\"],\n ] : [];\n if (fixed) desired.push([body, \"position\", \"fixed\"], [body, \"top\", `${-saved.y}px`], [body, \"left\", `${-saved.x}px`], [body, \"width\", \"100%\"]);\n const wasFixed = saved.declarations.some(entry => entry.name === \"position\");\n for (const entry of [...saved.declarations]) {\n if (desired.some(([style, name]) => style === entry.style && name === entry.name)) continue;\n if (entry.style.getPropertyValue(entry.name) === entry.locked && entry.style.getPropertyPriority(entry.name) === \"important\") {\n if (entry.value) entry.style.setProperty(entry.name, entry.value, entry.priority);\n else entry.style.removeProperty(entry.name);\n }\n saved.declarations.splice(saved.declarations.indexOf(entry), 1);\n }\n for (const [style, name, locked] of desired) {\n if (saved.declarations.some(entry => entry.style === style && entry.name === name)) continue;\n saved.declarations.push({ style, name, locked, value: style.getPropertyValue(name), priority: style.getPropertyPriority(name) });\n style.setProperty(name, locked, \"important\");\n }\n if ((!holding || (wasFixed && !fixed)) && document.defaultView && (document.defaultView.scrollX !== saved.x || document.defaultView.scrollY !== saved.y)) {\n document.defaultView.scrollTo(saved.x, saved.y);\n }\n if (!holding) scrollStyles.delete(document);\n}\n\nconst styledRoots = new WeakSet<ShadowRoot>();\nfunction styleRoot(root: Node) {\n if (!(root instanceof ShadowRoot) || styledRoots.has(root)) return;\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(dialogStyles);\n root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];\n styledRoots.add(root);\n}\n\n/** A native light-DOM dialog keeps forms and accessible ID references together.\n * The browser owns the top layer, inert background and modal focus navigation.\n * Listen to ds-close-request and preventDefault to control whether it closes.\n */\nexport class Dialog extends LitElement {\n static properties = {\n open: { type: Boolean, reflect: true },\n nonModal: { type: Boolean, attribute: \"non-modal\", reflect: true },\n closeOnOutside: { type: Boolean, attribute: \"close-on-outside\" },\n blockOutside: { type: Boolean, attribute: \"block-outside\" },\n holdScroll: { type: Boolean, attribute: \"hold-scroll\" },\n closeOnEscape: { type: Boolean, attribute: \"close-on-escape\" },\n closeOnBackdrop: { type: Boolean, attribute: \"close-on-backdrop\" },\n anchor: { attribute: false },\n returnFocus: { attribute: false },\n };\n static styles = [unsafeCSS(metrics), css`:host { display: contents; }`];\n declare open: boolean;\n declare nonModal: boolean;\n declare closeOnOutside: boolean;\n declare blockOutside: boolean;\n declare holdScroll: boolean;\n declare closeOnEscape: boolean;\n declare closeOnBackdrop: boolean;\n /** A viewport point for a floating panel; null uses ordinary dialog layout. */\n declare anchor: { x: number; y: number } | null;\n /** Resolve a replacement opener after the product has rendered its closed state. */\n declare returnFocus: (() => HTMLElement | null) | null;\n private dialog: HTMLDialogElement | null = null;\n private opener: HTMLElement | null = null;\n private pointerStartedOutside = false;\n private pendingOpen: Promise<void> | null = null;\n private outsidePress: boolean | null = null;\n private observer = new MutationObserver(() => this.bindDialog());\n private sizeObserver: ResizeObserver | null = null;\n\n constructor() {\n super();\n this.open = false;\n this.nonModal = false;\n this.closeOnOutside = false;\n this.blockOutside = false;\n this.holdScroll = false;\n this.closeOnEscape = true;\n this.closeOnBackdrop = true;\n this.anchor = null;\n this.returnFocus = null;\n }\n\n connectedCallback() {\n super.connectedCallback();\n styleRoot(this.getRootNode());\n this.observer.observe(this, { childList: true });\n this.bindDialog();\n }\n\n disconnectedCallback() {\n this.observer.disconnect();\n this.detachDialog();\n super.disconnectedCallback();\n }\n\n protected updated() { this.syncOpen(); this.place(); }\n\n /** Keep an anchored panel inside the visible viewport as its content or keyboard changes. */\n place = () => {\n const dialog = this.dialog, view = this.ownerDocument.defaultView;\n if (!dialog || !view) return;\n dialog.toggleAttribute(\"data-ds-dialog-anchored\", !!this.anchor);\n if (!this.anchor || !dialog.open) return;\n const viewport = view.visualViewport;\n const left = viewport?.offsetLeft ?? 0, top = viewport?.offsetTop ?? 0;\n const width = viewport?.width ?? view.innerWidth, height = viewport?.height ?? view.innerHeight;\n const margin = parseFloat(view.getComputedStyle(dialog).marginLeft) || 0;\n dialog.style.setProperty(\"--ds-dialog-available-width\", `${Math.max(0, width - 2 * margin)}px`);\n dialog.style.setProperty(\"--ds-dialog-available-height\", `${Math.max(0, height - 2 * margin)}px`);\n const rect = dialog.getBoundingClientRect();\n dialog.style.setProperty(\"--ds-dialog-anchor-left\", `${Math.max(left, Math.min(this.anchor.x - margin, left + width - rect.width - 2 * margin))}px`);\n dialog.style.setProperty(\"--ds-dialog-anchor-top\", `${Math.max(top, Math.min(this.anchor.y - margin, top + height - rect.height - 2 * margin))}px`);\n };\n\n private bindDialog = () => {\n const dialog = this.querySelector<HTMLDialogElement>(\":scope > dialog\");\n if (dialog === this.dialog) { this.syncOpen(); return; }\n this.detachDialog();\n this.dialog = dialog;\n dialog?.addEventListener(\"cancel\", this.onCancel);\n dialog?.addEventListener(\"close\", this.onNativeClose);\n dialog?.addEventListener(\"pointerdown\", this.onPointerDown);\n dialog?.addEventListener(\"click\", this.onClick);\n this.syncOpen();\n };\n\n private detachDialog() {\n const dialog = this.dialog;\n dialog?.removeEventListener(\"cancel\", this.onCancel);\n dialog?.removeEventListener(\"close\", this.onNativeClose);\n dialog?.removeEventListener(\"pointerdown\", this.onPointerDown);\n dialog?.removeEventListener(\"click\", this.onClick);\n if (dialog?.open) dialog.close();\n this.release();\n this.dialog = null;\n }\n\n private syncOpen() {\n const dialog = this.dialog;\n if (!dialog || !this.isConnected) return;\n if (this.open && !dialog.open) {\n if (this.pendingOpen) return;\n // Let slotted Lit fields/buttons render before the browser chooses focus.\n // Otherwise their empty shadow roots can make the dialog itself receive it.\n const updates = [...dialog.querySelectorAll(\"*\")].map(element => (element as LitElement).updateComplete);\n this.pendingOpen = Promise.all(updates).then(() => {\n this.pendingOpen = null;\n if (this.dialog !== dialog || !this.open || !this.isConnected) { this.syncOpen(); return; }\n this.showDialog(dialog);\n });\n } else if (!this.open) {\n if (dialog.open) dialog.close();\n this.release();\n }\n }\n\n /** Immediate opening preserves a user gesture for mobile keyboard/media focus.\n * The caller then focuses its already-rendered control synchronously. */\n async show({ immediate = false }: { immediate?: boolean } = {}) {\n this.open = true;\n if (immediate) {\n // The native frame must be in the rendered tree within this gesture too.\n // A newly connected Lit host has not drawn its slot yet.\n this.performUpdate();\n // Nested menu slots and fields must also exist before gesture-time focus.\n for (const child of this.querySelectorAll('*')) {\n (child as HTMLElement & { renderNow?: () => void }).renderNow?.();\n }\n this.bindDialog();\n if (this.dialog && this.isConnected) this.showDialog(this.dialog);\n }\n await this.updateComplete;\n await this.pendingOpen;\n }\n\n close() { this.open = false; this.syncOpen(); }\n\n private showDialog(dialog: HTMLDialogElement) {\n if (dialog.open) return;\n let active = this.ownerDocument.activeElement;\n while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n this.opener ??= active instanceof HTMLElement ? active : null;\n const document = this.ownerDocument;\n let stack = openDialogs.get(document);\n if (!stack) openDialogs.set(document, stack = new Set());\n stack.add(this);\n syncScroll(document);\n try { if (this.nonModal) dialog.show(); else dialog.showModal(); }\n catch (error) { stack.delete(this); syncScroll(document); throw error; }\n this.place();\n if (typeof ResizeObserver !== \"undefined\") {\n this.sizeObserver = new ResizeObserver(this.place);\n this.sizeObserver.observe(dialog);\n }\n document.defaultView?.addEventListener(\"resize\", this.place);\n document.defaultView?.visualViewport?.addEventListener(\"resize\", this.place);\n document.defaultView?.visualViewport?.addEventListener(\"scroll\", this.place);\n document.addEventListener(\"keydown\", this.onDocumentKey);\n document.addEventListener(\"pointerdown\", this.onOutsidePress, true);\n document.addEventListener(\"click\", this.onOutsideClick, true);\n document.addEventListener(\"wheel\", this.onScrollGesture, { passive: false });\n document.addEventListener(\"touchmove\", this.onScrollGesture, { passive: false });\n }\n\n private release() {\n const document = this.ownerDocument;\n this.sizeObserver?.disconnect(); this.sizeObserver = null;\n document.defaultView?.removeEventListener(\"resize\", this.place);\n document.defaultView?.visualViewport?.removeEventListener(\"resize\", this.place);\n document.defaultView?.visualViewport?.removeEventListener(\"scroll\", this.place);\n const stack = openDialogs.get(document);\n const entries = stack ? [...stack] : [];\n const wasTop = entries[entries.length - 1] === this;\n if (!stack?.delete(this)) return;\n syncScroll(document);\n document.removeEventListener(\"keydown\", this.onDocumentKey);\n document.removeEventListener(\"pointerdown\", this.onOutsidePress, true);\n document.removeEventListener(\"click\", this.onOutsideClick, true);\n document.removeEventListener(\"wheel\", this.onScrollGesture);\n document.removeEventListener(\"touchmove\", this.onScrollGesture);\n this.outsidePress = null;\n // Modeless content must not steal focus from a control already used outside it.\n let active = document.activeElement;\n while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n let within = active;\n while (within && !this.dialog?.contains(within)) {\n const root = within.getRootNode();\n within = root instanceof ShadowRoot ? root.host : null;\n }\n if (wasTop && (!this.nonModal || active === document.body || active === this.dialog || within)) {\n const resolve = this.returnFocus;\n if (resolve) queueMicrotask(() => {\n const target = resolve();\n if (target?.isConnected) target.focus({ preventScroll: true });\n });\n else if (this.opener?.isConnected) this.opener.focus({ preventScroll: true });\n }\n this.opener = null;\n }\n\n requestClose(reason: DialogCloseReason = \"button\") {\n if (!this.open) return;\n const event = new CustomEvent(\"ds-close-request\", { detail: { reason }, bubbles: true, composed: true, cancelable: true });\n if (this.dispatchEvent(event)) this.close();\n }\n\n private isTop() {\n const stack = [...(openDialogs.get(this.ownerDocument) ?? [])];\n return stack[stack.length - 1] === this;\n }\n\n private onDocumentKey = (event: KeyboardEvent) => {\n if (!this.nonModal || !this.isTop() || event.defaultPrevented) return;\n if (event.key === \"Escape\" && this.closeOnEscape) {\n event.preventDefault(); event.stopImmediatePropagation(); this.requestClose(\"escape\");\n } else if (this.holdScroll && !event.composedPath().includes(this) && !event.composedPath().some(node => node instanceof HTMLElement && (node.isContentEditable || node.matches(\"input, textarea, select\"))) && [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"PageUp\", \"PageDown\", \"Home\", \"End\", \" \"].includes(event.key)) event.preventDefault();\n };\n private onScrollGesture = (event: Event) => {\n if (this.nonModal && this.holdScroll && this.isTop() && !event.composedPath().includes(this)) event.preventDefault();\n };\n private onOutsidePress = (event: Event) => {\n if (!this.nonModal || !this.isTop()) return;\n this.outsidePress = !event.composedPath().includes(this);\n if (this.outsidePress && this.blockOutside) { event.preventDefault(); event.stopImmediatePropagation(); }\n };\n private onOutsideClick = (event: Event) => {\n if (!this.nonModal || !this.isTop() || event.composedPath().includes(this)) return;\n if (this.blockOutside) { event.preventDefault(); event.stopImmediatePropagation(); }\n if (this.closeOnOutside && this.outsidePress !== false) this.requestClose(\"outside\");\n this.outsidePress = null;\n };\n\n private onCancel = (event: Event) => {\n event.preventDefault();\n if (this.closeOnEscape) this.requestClose(\"escape\");\n };\n\n private onNativeClose = () => {\n if (!this.open || this.dialog?.open || this.pendingOpen) return;\n this.requestClose(\"native\");\n this.syncOpen();\n };\n\n private outside(event: MouseEvent) {\n const dialog = this.dialog;\n if (!dialog || event.target !== dialog) return false;\n const rect = dialog.getBoundingClientRect();\n return event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom;\n }\n private onPointerDown = (event: PointerEvent) => {\n this.pointerStartedOutside = event.button === 0 && this.outside(event);\n };\n private onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) { this.pointerStartedOutside = false; return; }\n const dismiss = event.composedPath().find(node => node instanceof HTMLElement && node.hasAttribute(\"data-ds-dialog-dismiss\")) as HTMLElement | undefined;\n if (dismiss?.closest(\"dialog\") === this.dialog) this.requestClose(\"button\");\n else if (this.closeOnBackdrop && this.pointerStartedOutside && this.outside(event)) this.requestClose(\"backdrop\");\n this.pointerStartedOutside = false;\n };\n\n render() { return html`<slot @slotchange=${this.bindDialog}></slot>`; }\n}\n\ndefine(\"ds-dialog\", Dialog);\ndeclare global { interface HTMLElementTagNameMap { \"ds-dialog\": Dialog } }\n","@import \"../../1-root/component-metrics.css\";\n:host { display: inline-flex; max-width: 100%; min-width: 0; vertical-align: middle; }\n:host([hidden]) { display: none !important; }\n.frame { display: flex; align-items: center; box-sizing: border-box; max-width: 100%; min-width: 0; height: var(--ds-row-height); padding-inline-start: calc(4px * var(--ds-sf)); background: var(--ds-fill); color: var(--ds-text-color); border-radius: var(--ds-radius); font-family: var(--ds-typeface-regular); font-size: var(--ds-type-size-default); line-height: var(--ds-type-lineheight-default); letter-spacing: var(--ds-type-letterspacing-default); }\n.copy { display: flex; align-items: baseline; gap: calc(4px * var(--ds-sf)); min-width: 0; padding-inline: calc(4px * var(--ds-sf)); }\n.copy > span, small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\nsmall { font-size: var(--ds-type-size-small); color: var(--ds-text-color-muted); }\nds-button { flex: 0 0 auto; --ds-button-height: var(--ds-row-height); --ds-button-width: var(--ds-row-height); }\n::slotted([slot=\"leading\"]) { flex: 0 0 auto; }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport \"./ds-button\";\nimport \"./ds-icon\";\nimport styles from \"./styles/ds-token.css?inline\";\n\n/** A removable value. Products own its identity and decide whether to remove it. */\nexport class Token extends LitElement {\n static formAssociated = true;\n static properties = {\n value: { type: String }, label: { type: String }, detail: { type: String },\n removeLabel: { type: String, attribute: \"remove-label\" },\n disabled: { type: Boolean, reflect: true }, fieldDisabled: { state: true },\n };\n static styles = unsafeCSS(styles);\n declare value: string; declare label: string; declare detail: string;\n declare removeLabel: string; declare disabled: boolean; declare fieldDisabled: boolean;\n private fieldsetDisabled = false;\n constructor() {\n super(); this.attachInternals?.(); this.value = \"\"; this.label = \"\"; this.detail = \"\";\n this.removeLabel = \"\"; this.disabled = false; this.fieldDisabled = false;\n }\n formDisabledCallback(disabled: boolean) {\n this.fieldsetDisabled = disabled;\n // Attribute reflection can call this during Lit's update. Render once the\n // effective native state has settled, including re-enabling this token.\n queueMicrotask(() => { if (this.isConnected) this.requestUpdate(); });\n }\n get blocked() { return this.disabled || this.fieldDisabled || this.fieldsetDisabled; }\n requestRemove() {\n if (!this.blocked) this.dispatchEvent(new CustomEvent(\"ds-token-remove\", {\n detail: { value: this.value }, bubbles: true, composed: true, cancelable: true,\n }));\n }\n render() {\n return html`<span class=\"frame\" part=\"frame\"><slot name=\"leading\"></slot><span class=\"copy\"><span>${this.label}<slot></slot></span>${this.detail ? html`<small>${this.detail}</small>` : null}</span>${this.removeLabel ? html`<ds-button control=\"slotted\" icon .disabled=${this.blocked}><button type=\"button\" aria-label=${this.removeLabel} ?disabled=${this.blocked} @click=${() => this.requestRemove()}><ds-icon type=\"close\"></ds-icon></button></ds-button>` : null}</span>`;\n }\n}\ndefine(\"ds-token\", Token);\ndeclare global { interface HTMLElementTagNameMap { \"ds-token\": Token } }\n","@import \"../../1-root/component-metrics.css\";\n:host { display: block; min-width: 0; width: 100%; }\n:host([hidden]) { display: none !important; }\n.frame { box-sizing: border-box; display: flex; flex-wrap: wrap; align-items: center; width: 100%; min-height: var(--ds-row-height); gap: 0 calc(var(--ds-unit) / 2); border: 0; outline: 1px solid var(--ds-border-color); outline-offset: -1px; border-radius: var(--ds-radius); background: var(--ds-paper); padding: 0; }\n.frame:focus-within { outline: 1px solid var(--ds-focus-ring); outline-offset: -1px; }\nslot { display: contents; }\n.entry { display: flex; align-items: center; flex: 1 1 calc(8 * var(--ds-unit)); min-width: min(100%, calc(4 * var(--ds-unit))); max-width: 100%; height: var(--ds-row-height); }\n::slotted(input) { box-sizing: border-box !important; flex: 1 1 0 !important; width: 0 !important; min-width: 0 !important; max-width: 100% !important; height: var(--ds-row-height) !important; margin: 0 !important; padding: 0 calc(4px * var(--ds-sf)) !important; border: 0 !important; border-radius: 0 !important; background: transparent !important; color: var(--ds-text-color) !important; font-family: var(--ds-typeface-regular) !important; font-size: var(--ds-type-size-default) !important; line-height: var(--ds-type-lineheight-default) !important; letter-spacing: var(--ds-type-letterspacing-default) !important; outline: none !important; box-shadow: none !important; }\n::slotted(input:disabled) { opacity: .5; }\n::slotted(ds-token) { max-width: 100%; }\nds-button { flex: 0 0 auto; --ds-button-width: var(--ds-row-height); --ds-button-height: var(--ds-row-height); }\n","import { LitElement, html, unsafeCSS } from \"lit\";\nimport { define } from \"../0-face/define\";\nimport { Menu } from \"./ds-menu\";\nimport { Token } from \"../2-core/ds-token\";\nimport styles from \"./styles/ds-token-field.css?inline\";\n\nlet nextId = 0;\nexport type TokenCommit = { text: string; reason: \"enter\" | \"separator\" | \"input\" | \"blur\" };\n/** Native field and ARIA targets stay together in light DOM. This component\n * owns chip layout, editing gestures and suggestion navigation through Menu. */\nexport class TokenField extends LitElement {\n static formAssociated = true;\n static properties = {\n separators: { type: String }, chooseLabel: { type: String, attribute: \"choose-label\" },\n expanded: { state: true }, blocked: { state: true },\n };\n static styles = unsafeCSS(styles);\n declare separators: string; declare chooseLabel: string;\n private declare expanded: boolean; private declare blocked: boolean;\n private fieldsetDisabled = false;\n private control: HTMLInputElement | null = null;\n private menu: Menu | null = null;\n private savedAttributes = new Map<string, string | null>();\n private activeId = \"\";\n private optionId = 0;\n private idPrefix = `ds-token-field-${++nextId}`;\n private mutations = new MutationObserver(() => this.refresh());\n constructor() {\n super(); this.attachInternals?.(); this.separators = \",;\"; this.chooseLabel = \"\"; this.expanded = false; this.blocked = false;\n this.addEventListener(\"focusin\", event => { if (event.target === this.control) this.setOpen(true); });\n this.addEventListener(\"focusout\", this.onBlur);\n this.addEventListener(\"keydown\", this.onKey);\n this.addEventListener(\"input\", this.onInput);\n this.addEventListener(\"ds-menu-active\", this.onActive);\n this.addEventListener(\"ds-menu-close\", this.onClose);\n this.addEventListener(\"ds-menu-toggle\", this.onToggle);\n this.addEventListener(\"ds-token-remove\", this.onRemove);\n this.addEventListener(\"click\", event => {\n if (event.composedPath().some(node => node instanceof HTMLElement && node.getAttribute(\"role\") === \"option\")) this.focus();\n });\n }\n connectedCallback() { super.connectedCallback(); this.refresh(); }\n disconnectedCallback() { this.mutations.disconnect(); this.release(); super.disconnectedCallback(); }\n formDisabledCallback(disabled: boolean) { this.fieldsetDisabled = disabled; this.refresh(); }\n private release() {\n if (this.menu) { this.menu.open = false; this.menu.controller = null; this.menu.trigger = null; this.menu.anchor = null; }\n for (const [name, value] of this.savedAttributes) {\n if (value === null) this.control?.removeAttribute(name); else this.control?.setAttribute(name, value);\n }\n this.savedAttributes.clear(); this.control = null; this.menu = null; this.expanded = false;\n }\n /** Also called by the React binding after controlled values/options settle. */\n refresh() {\n if (!this.isConnected) return;\n const input = Array.from(this.children).find(child => child.localName === \"input\") as HTMLInputElement | undefined ?? null;\n const menu = Array.from(this.children).find(child => child instanceof Menu) as Menu | undefined ?? null;\n if (this.control !== input || this.menu !== menu) {\n this.release(); this.control = input; this.menu = menu; this.requestUpdate();\n for (const name of [\"role\", \"aria-autocomplete\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\", \"slot\"]) this.savedAttributes.set(name, input?.getAttribute(name) ?? null);\n }\n this.mutations.disconnect();\n this.mutations.observe(this, { childList: true, subtree: true, attributes: true, attributeFilter: [\"disabled\", \"readonly\", \"hidden\", \"inert\", \"aria-disabled\"] });\n if (input) input.slot = \"input\";\n this.blocked = this.fieldsetDisabled || !input || input.matches(\":disabled\") || input.readOnly;\n if (this.blocked) this.expanded = false;\n for (const token of this.tokens()) token.fieldDisabled = this.blocked;\n if (input && menu) {\n if (!menu.id) menu.id = `${this.idPrefix}-options`;\n menu.slot = \"suggestions\";\n menu.floating = true; menu.anchor = this; menu.controller = input;\n menu.trigger = this.shadowRoot?.querySelector<HTMLButtonElement>(\"button\") ?? null;\n menu.open = this.expanded;\n const choices = Array.from(menu.querySelectorAll<HTMLElement>('[role=\"option\"]')).filter(option => option.closest(\"ds-menu\") === menu);\n const options = choices.filter(option => !option.matches(':disabled, [disabled], [aria-disabled=\"true\"]') && !option.closest(\"[hidden], [inert]\"));\n for (const option of options) { if (!option.id) option.id = `${this.idPrefix}-option-${++this.optionId}`; option.tabIndex = -1; }\n if (!options.some(option => option.id === this.activeId)) this.activeId = options[0]?.id ?? \"\";\n for (const option of choices) option.setAttribute(\"aria-selected\", String(option.id === this.activeId));\n menu.activeId = this.activeId;\n input.setAttribute(\"role\", \"combobox\"); input.setAttribute(\"aria-autocomplete\", \"list\");\n input.setAttribute(\"aria-expanded\", String(this.expanded));\n input.setAttribute(\"aria-controls\", menu.id);\n if (this.expanded && this.activeId) input.setAttribute(\"aria-activedescendant\", this.activeId); else input.removeAttribute(\"aria-activedescendant\");\n }\n }\n updated() { this.refresh(); }\n private tokens() { return Array.from(this.children).filter(child => child instanceof Token) as Token[]; }\n private setOpen(open: boolean) { this.expanded = Boolean(open && this.menu && !this.blocked); this.refresh(); }\n private commit(reason: TokenCommit[\"reason\"], text = this.control?.value ?? \"\") {\n if (!this.blocked && text.trim()) this.dispatchEvent(new CustomEvent<TokenCommit>(\"ds-token-commit\", {detail: {text, reason}, bubbles: true, composed: true, cancelable: true}));\n }\n private onInput = (event: Event) => {\n if (event.target !== this.control || this.blocked || (event as InputEvent).isComposing) return;\n this.activeId = \"\"; this.setOpen(true);\n const text = this.control!.value, control = this.control;\n if ([...this.separators].some(separator => text.includes(separator))) queueMicrotask(() => {\n if (this.isConnected && this.control === control && control!.value === text && !event.defaultPrevented) this.commit(\"input\", text);\n });\n };\n private onKey = (event: KeyboardEvent) => {\n if (event.target !== this.control || this.blocked || event.defaultPrevented || event.isComposing || event.keyCode === 229 || event.altKey || event.metaKey || event.ctrlKey) return;\n if ((event.key === \"ArrowDown\" || event.key === \"ArrowUp\") && !this.expanded && this.menu) { event.preventDefault(); this.setOpen(true); }\n else if (event.key === \"Enter\" || this.separators.includes(event.key) && event.key.length === 1) {\n event.preventDefault(); this.commit(event.key === \"Enter\" ? \"enter\" : \"separator\");\n } else if (event.key === \"Backspace\" && !this.control!.value) {\n const token = this.tokens().at(-1);\n if (token?.removeLabel && !token.blocked) { event.preventDefault(); token.requestRemove(); }\n }\n };\n private onBlur = (event: FocusEvent) => {\n if (event.relatedTarget instanceof Node && (this.contains(event.relatedTarget) || this.shadowRoot?.contains(event.relatedTarget))) return;\n this.setOpen(false); this.commit(\"blur\");\n };\n private onActive = (event: Event) => { if (event.target !== this.menu) return; this.activeId = (event as CustomEvent<{id: string}>).detail.id; this.refresh(); };\n private onClose = (event: Event) => { if (event.target === this.menu) this.setOpen(false); };\n private onToggle = (event: Event) => {\n if (event.target !== this.menu) return;\n event.preventDefault(); const open = (event as CustomEvent<{open: boolean}>).detail.open;\n this.focus(); this.setOpen(open);\n };\n private onRemove = () => { queueMicrotask(() => { if (this.isConnected && !this.blocked) this.focus(); }); };\n focus(options?: FocusOptions) { if (!this.blocked) this.control?.focus(options); }\n render() {\n return html`<div class=\"frame\" part=\"frame\"><slot @slotchange=${this.refresh}></slot><div class=\"entry\"><slot name=\"input\" @slotchange=${this.refresh}></slot>${this.menu && this.chooseLabel ? html`<ds-button control=\"slotted\" icon .disabled=${this.blocked}><button type=\"button\" aria-label=${this.chooseLabel} ?disabled=${this.blocked}><ds-icon type=\"down\"></ds-icon></button></ds-button>` : null}</div></div><slot name=\"suggestions\" @slotchange=${this.refresh}></slot>`;\n }\n}\ndefine(\"ds-token-field\", TokenField);\ndeclare global { interface HTMLElementTagNameMap { \"ds-token-field\": TokenField } }\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,22,23,24,34,49,62,63,83],"mappings":"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"}
|