From d3340a848c3a697e28eb2ac9f3893ed2182b54c8 Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Tue, 20 Jan 2026 14:15:35 +0000 Subject: [PATCH] Add MD3 framework tests and utility functions for component accessibility and interaction - Implemented tests for various MD3 components including buttons, text fields, dialogs, navigation, menus, progress indicators, and responsive design. - Created utility functions to interact with MD3 components, check their states, and validate accessibility attributes. - Added support for keyboard navigation testing and touch target size validation. - Introduced schema-based component definitions to streamline test implementations. --- eslint.config.mjs | 2 +- package-lock.json | 10 +- package.json | 2 +- playwright.config.ts | 6 +- src/app/PageLayout.tsx | 56 +- src/app/globals.scss | 622 +------ src/app/layout.tsx | 2 +- src/app/material-m3.scss | 12 + src/app/page.tsx | 2 +- .../features/snippet-display/EmptyState.tsx | 2 +- src/components/layout/AppStatusAlerts.tsx | 46 + src/components/layout/BackendIndicator.tsx | 10 +- .../layout/navigation/NavigationSidebar.tsx | 2 +- src/components/ui/alert-dialog.tsx | 157 -- src/components/ui/alert.tsx | 63 +- src/components/ui/badge.tsx | 139 -- src/components/ui/button.tsx | 158 +- src/components/ui/card.tsx | 162 +- src/components/ui/checkbox.tsx | 32 - src/components/ui/chip.tsx | 173 +- src/components/ui/dialog.tsx | 133 -- src/components/ui/input.tsx | 215 --- src/components/ui/label.tsx | 24 - src/components/ui/progress.tsx | 30 +- src/components/ui/radio-group.tsx | 45 - src/components/ui/slider.tsx | 75 +- src/components/ui/switch.tsx | 69 - src/components/ui/tabs.tsx | 70 +- src/components/ui/textarea.tsx | 18 - src/components/ui/tooltip.tsx | 59 - src/styles/abstracts/_functions.scss | 27 - src/styles/abstracts/_index.scss | 3 - src/styles/abstracts/_mixins.scss | 214 --- src/styles/abstracts/_variables.scss | 467 ----- src/styles/components/_buttons.scss | 360 ---- src/styles/components/_cards.scss | 64 - src/styles/components/_dialogs.scss | 464 ----- src/styles/components/_forms.scss | 84 - src/styles/components/_header.scss | 147 -- src/styles/components/_index.scss | 8 - src/styles/components/_typography.scss | 111 -- src/styles/m3-scss/@angular/cdk/_index.scss | 8 + .../m3-scss/@angular/cdk/a11y/_index.scss | 66 + .../@angular/cdk/a11y/a11y-prebuilt.scss | 3 + .../@angular/cdk/dialog/dialog-container.scss | 13 + .../@angular/cdk/drag-drop/resets.scss | 19 + .../m3-scss/@angular/cdk/overlay/_index.scss | 228 +++ .../cdk/overlay/overlay-prebuilt.scss | 3 + .../cdk/overlay/overlay-structure.scss | 7 + .../visually-hidden/visually-hidden.scss | 3 + .../scrolling/virtual-scroll-viewport.scss | 93 + .../m3-scss/@angular/cdk/table/table.scss | 3 + .../@angular/cdk/text-field/_index.scss | 89 + .../cdk/text-field/text-field-prebuilt.scss | 4 + src/styles/m3-scss/cdk/_index.scss | 8 + src/styles/m3-scss/cdk/a11y/_index.scss | 66 + .../m3-scss/cdk/a11y/a11y-prebuilt.scss | 3 + .../m3-scss/cdk/dialog/dialog-container.scss | 13 + src/styles/m3-scss/cdk/drag-drop/resets.scss | 19 + src/styles/m3-scss/cdk/overlay/_index.scss | 228 +++ .../m3-scss/cdk/overlay/overlay-prebuilt.scss | 3 + .../cdk/overlay/overlay-structure.scss | 7 + .../visually-hidden/visually-hidden.scss | 3 + .../scrolling/virtual-scroll-viewport.scss | 93 + src/styles/m3-scss/cdk/table/table.scss | 3 + src/styles/m3-scss/cdk/text-field/_index.scss | 89 + .../cdk/text-field/text-field-prebuilt.scss | 4 + .../autocomplete/autocomplete-demo.scss | 27 + .../m3-scss/dev-app/badge/badge-demo.scss | 12 + .../dev-app/baseline/baseline-demo.scss | 15 + .../bottom-sheet/bottom-sheet-demo.scss | 8 + .../button-toggle/button-toggle-demo.scss | 3 + .../m3-scss/dev-app/button/button-demo.scss | 24 + .../m3-scss/dev-app/card/card-demo.scss | 22 + .../dev-app/cdk-dialog/dialog-demo.scss | 17 + .../dev-app/checkbox/checkbox-demo.scss | 3 + .../m3-scss/dev-app/chips/chips-demo.scss | 31 + .../dev-app/clipboard/clipboard-demo.scss | 8 + .../connected-overlay-demo.scss | 35 + .../dev-app/datepicker/custom-header.scss | 12 + .../dev-app/datepicker/datepicker-demo.scss | 14 + .../dev-app/dev-app/dev-app-layout.scss | 82 + .../m3-scss/dev-app/dialog/dialog-demo.scss | 28 + .../dev-app/drag-drop/drag-drop-demo.scss | 119 ++ .../m3-scss/dev-app/drawer/drawer-demo.scss | 7 + .../dev-app/expansion/expansion-demo.scss | 17 + .../focus-origin/focus-origin-demo.scss | 23 + .../dev-app/focus-trap/focus-trap-demo.scss | 34 + .../focus-trap/focus-trap-dialog-demo.scss | 4 + .../dev-app/google-map/google-map-demo.scss | 5 + .../dev-app/grid-list/grid-list-demo.scss | 19 + .../m3-scss/dev-app/icon/icon-demo.scss | 3 + .../m3-scss/dev-app/input/input-demo.scss | 49 + .../m3-scss/dev-app/layout/layout-demo.scss | 0 .../m3-scss/dev-app/list/list-demo.scss | 22 + .../m3-scss/dev-app/menu/menu-demo.scss | 23 + .../dev-app/menubar/mat-menubar-demo.scss | 27 + .../dev-app/paginator/paginator-demo.scss | 15 + .../dev-app/performance/performance-demo.scss | 23 + .../m3-scss/dev-app/portal/portal-demo.scss | 11 + .../progress-bar/progress-bar-demo.scss | 16 + .../progress-spinner-demo.scss | 12 + .../m3-scss/dev-app/radio/radio-demo.scss | 13 + .../m3-scss/dev-app/ripple/ripple-demo.scss | 6 + .../dev-app/screen-type/screen-type-demo.scss | 24 + .../m3-scss/dev-app/select/select-demo.scss | 36 + .../m3-scss/dev-app/sidenav/sidenav-demo.scss | 25 + .../slide-toggle/slide-toggle-demo.scss | 9 + .../m3-scss/dev-app/slider/slider-demo.scss | 56 + .../dev-app/snack-bar/snack-bar-demo.scss | 17 + .../system-classes-demo.scss | 26 + .../m3-scss/dev-app/system/system-demo.scss | 29 + .../table-scroll-container-demo.scss | 40 + src/styles/m3-scss/dev-app/theme-m3.scss | 119 ++ src/styles/m3-scss/dev-app/theme.scss | 84 + .../m3-scss/dev-app/theme/theme-demo.scss | 196 +++ .../dev-app/timepicker/timepicker-demo.scss | 22 + .../m3-scss/dev-app/toolbar/toolbar-demo.scss | 15 + .../m3-scss/dev-app/tree/tree-demo.scss | 23 + .../dev-app/typography/typography-demo.scss | 3 + .../virtual-scroll/virtual-scroll-demo.scss | 66 + .../youtube-player/youtube-player-demo.scss | 7 + src/styles/m3-scss/e2e-app/theme.scss | 18 + .../m3-scss/material-experimental/_index.scss | 7 + .../column-resize/_column-resize-theme.scss | 177 ++ .../menubar/_menubar-theme.scss | 0 .../menubar/menubar-item.scss | 0 .../menubar/menubar.scss | 0 .../popover-edit/_popover-edit-theme.scss | 166 ++ .../selection/_selection.scss | 4 + .../selection/selection-column.scss | 5 + src/styles/m3-scss/material/_index.scss | 145 ++ .../autocomplete/_autocomplete-theme.scss | 76 + .../autocomplete/_m2-autocomplete.scss | 19 + .../autocomplete/_m3-autocomplete.scss | 26 + .../material/autocomplete/autocomplete.scss | 76 + .../m3-scss/material/badge/_badge-theme.scss | 106 ++ .../m3-scss/material/badge/_m2-badge.scss | 73 + .../m3-scss/material/badge/_m3-badge.scss | 52 + src/styles/m3-scss/material/badge/badge.scss | 139 ++ .../bottom-sheet/_bottom-sheet-theme.scss | 76 + .../bottom-sheet/_m2-bottom-sheet.scss | 24 + .../bottom-sheet/_m3-bottom-sheet.scss | 25 + .../bottom-sheet/bottom-sheet-container.scss | 97 + .../button-toggle/_button-toggle-theme.scss | 93 + .../button-toggle/_m2-button-toggle.scss | 68 + .../button-toggle/_m3-button-toggle.scss | 72 + .../material/button-toggle/button-toggle.scss | 381 ++++ .../m3-scss/material/button/_button-base.scss | 182 ++ .../material/button/_button-theme.scss | 113 ++ .../m3-scss/material/button/_fab-theme.scss | 111 ++ .../material/button/_icon-button-theme.scss | 136 ++ .../m3-scss/material/button/_m2-button.scss | 194 ++ .../m3-scss/material/button/_m2-fab.scss | 101 ++ .../material/button/_m2-icon-button.scss | 59 + .../m3-scss/material/button/_m3-button.scss | 170 ++ .../m3-scss/material/button/_m3-fab.scss | 92 + .../material/button/_m3-icon-button.scss | 54 + .../material/button/button-high-contrast.scss | 13 + .../m3-scss/material/button/button.scss | 329 ++++ src/styles/m3-scss/material/button/fab.scss | 231 +++ .../m3-scss/material/button/icon-button.scss | 92 + .../m3-scss/material/card/_card-theme.scss | 76 + .../m3-scss/material/card/_m2-card.scss | 39 + .../m3-scss/material/card/_m3-card.scss | 44 + src/styles/m3-scss/material/card/card.scss | 249 +++ .../material/checkbox/_checkbox-common.scss | 563 ++++++ .../material/checkbox/_checkbox-theme.scss | 105 ++ .../material/checkbox/_m2-checkbox.scss | 78 + .../material/checkbox/_m3-checkbox.scss | 68 + .../m3-scss/material/checkbox/checkbox.scss | 110 ++ .../m3-scss/material/chips/_chips-theme.scss | 115 ++ .../m3-scss/material/chips/_m2-chip.scss | 85 + .../m3-scss/material/chips/_m3-chip.scss | 81 + .../m3-scss/material/chips/chip-set.scss | 83 + src/styles/m3-scss/material/chips/chip.scss | 755 ++++++++ .../m3-scss/material/core/_core-theme.scss | 125 ++ src/styles/m3-scss/material/core/_core.scss | 50 + src/styles/m3-scss/material/core/_m2-app.scss | 24 + src/styles/m3-scss/material/core/_m3-app.scss | 44 + .../material/core/color/_all-color.scss | 17 + .../core/density/private/_all-density.scss | 78 + .../core/focus-indicators/_private.scss | 126 ++ .../focus-indicators/structural-styles.scss | 3 + .../internal-form-field.scss | 40 + .../m3-scss/material/core/m2/_index.scss | 52 + .../m3-scss/material/core/m2/_palette.scss | 748 ++++++++ .../m3-scss/material/core/m2/_theming.scss | 340 ++++ .../material/core/m2/_typography-utils.scss | 81 + .../m3-scss/material/core/m2/_typography.scss | 388 ++++ .../material/core/option/_m2-optgroup.scss | 21 + .../material/core/option/_m2-option.scss | 38 + .../material/core/option/_m3-optgroup.scss | 25 + .../material/core/option/_m3-option.scss | 37 + .../material/core/option/_optgroup-theme.scss | 76 + .../material/core/option/_option-theme.scss | 103 ++ .../material/core/option/optgroup.scss | 46 + .../m3-scss/material/core/option/option.scss | 197 +++ .../material/core/ripple/_m2-ripple.scss | 17 + .../material/core/ripple/_m3-ripple.scss | 17 + .../material/core/ripple/_ripple-theme.scss | 75 + .../m3-scss/material/core/ripple/_ripple.scss | 56 + .../core/ripple/ripple-structure.scss | 3 + .../pseudo-checkbox/_m2-pseudo-checkbox.scss | 32 + .../pseudo-checkbox/_m3-pseudo-checkbox.scss | 34 + .../_pseudo-checkbox-common.scss | 86 + .../_pseudo-checkbox-theme.scss | 110 ++ .../pseudo-checkbox/pseudo-checkbox.scss | 99 ++ .../material/core/style/_button-common.scss | 17 + .../material/core/style/_checkbox-common.scss | 11 + .../material/core/style/_elevation.scss | 208 +++ .../material/core/style/_layout-common.scss | 8 + .../material/core/style/_list-common.scss | 49 + .../material/core/style/_menu-common.scss | 94 + .../m3-scss/material/core/style/_private.scss | 27 + .../material/core/style/_sass-utils.scss | 57 + .../material/core/style/_validation.scss | 52 + .../material/core/style/_variables.scss | 44 + .../material/core/style/_vendor-prefixes.scss | 56 + .../material/core/theming/_all-theme.scss | 168 ++ .../_color-api-backwards-compatibility.scss | 159 ++ .../core/theming/_config-validation.scss | 174 ++ .../material/core/theming/_definition.scss | 141 ++ .../material/core/theming/_inspection.scss | 289 +++ .../material/core/theming/_m2-inspection.scss | 243 +++ .../core/theming/_palette-deprecated.scss | 76 + .../material/core/theming/_palettes.scss | 1036 +++++++++++ .../core/theming/_theming-deprecated.scss | 27 + .../material/core/theming/_theming.scss | 193 ++ .../material/core/theming/_validation.scss | 5 + .../core/theming/prebuilt/azure-blue.scss | 14 + .../core/theming/prebuilt/cyan-orange.scss | 14 + .../theming/prebuilt/deeppurple-amber.scss | 25 + .../core/theming/prebuilt/indigo-pink.scss | 25 + .../core/theming/prebuilt/magenta-violet.scss | 14 + .../core/theming/prebuilt/pink-bluegrey.scss | 25 + .../core/theming/prebuilt/purple-green.scss | 25 + .../core/theming/prebuilt/rose-red.scss | 14 + .../tests/test-css-variables-theme.scss | 39 + .../core/theming/tests/test-theming-api.scss | 282 +++ .../theming/tests/test-theming-bundle.scss | 226 +++ .../tests/test-typography-font-family.scss | 108 ++ .../material/core/tokens/_classes.scss | 398 +++++ .../material/core/tokens/_m2-utils.scss | 25 + .../material/core/tokens/_m3-tokens.scss | 126 ++ .../material/core/tokens/_m3-utils.scss | 36 + .../m3-scss/material/core/tokens/_system.scss | 398 +++++ .../material/core/tokens/_token-utils.scss | 119 ++ .../material/core/tokens/m2/_index.scss | 6 + .../tokens/m2/_md-sys-color-internal.scss | 11 + .../core/tokens/m2/_md-sys-color.scss | 123 ++ .../core/tokens/m2/_md-sys-elevation.scss | 10 + .../core/tokens/m2/_md-sys-motion.scss | 30 + .../core/tokens/m2/_md-sys-shape.scss | 16 + .../core/tokens/m2/_md-sys-state.scss | 8 + .../core/tokens/m2/_md-sys-typescale.scss | 68 + .../material/core/tokens/m3/_index.scss | 7 + .../tokens/m3/_md-sys-color-internal.scss | 11 + .../core/tokens/m3/_md-sys-color.scss | 118 ++ .../core/tokens/m3/_md-sys-elevation.scss | 15 + .../core/tokens/m3/_md-sys-motion.scss | 35 + .../core/tokens/m3/_md-sys-shape.scss | 21 + .../core/tokens/m3/_md-sys-state.scss | 13 + .../tokens/m3/_md-sys-typescale-internal.scss | 5 + .../core/tokens/m3/_md-sys-typescale.scss | 114 ++ .../material/core/tokens/m3/_theme.scss | 35 + .../core/typography/_all-typography.scss | 104 ++ .../_typography-utils-deprecated.scss | 6 + .../core/typography/_typography-utils.scss | 31 + .../material/core/typography/_typography.scss | 269 +++ .../material/core/typography/_versioning.scss | 90 + .../datepicker/_datepicker-legacy-compat.scss | 85 + .../datepicker/_datepicker-theme.scss | 132 ++ .../material/datepicker/_m2-datepicker.scss | 81 + .../material/datepicker/_m3-datepicker.scss | 74 + .../material/datepicker/calendar-body.scss | 409 +++++ .../m3-scss/material/datepicker/calendar.scss | 138 ++ .../material/datepicker/date-range-input.scss | 162 ++ .../datepicker/datepicker-actions.scss | 16 + .../datepicker/datepicker-content.scss | 161 ++ .../datepicker/datepicker-toggle.scss | 28 + .../dialog/_dialog-legacy-padding.scss | 31 + .../material/dialog/_dialog-theme.scss | 76 + .../m3-scss/material/dialog/_m2-dialog.scss | 43 + .../m3-scss/material/dialog/_m3-dialog.scss | 47 + .../m3-scss/material/dialog/dialog.scss | 263 +++ .../material/divider/_divider-offset.scss | 12 + .../material/divider/_divider-theme.scss | 75 + .../m3-scss/material/divider/_m2-divider.scss | 17 + .../m3-scss/material/divider/_m3-divider.scss | 19 + .../m3-scss/material/divider/divider.scss | 29 + .../material/expansion/_expansion-theme.scss | 76 + .../expansion/_expansion-variables.scss | 30 + .../material/expansion/_m2-expansion.scss | 64 + .../material/expansion/_m3-expansion.scss | 61 + .../expansion/expansion-panel-header.scss | 187 ++ .../material/expansion/expansion-panel.scss | 160 ++ .../form-field/_form-field-focus-overlay.scss | 31 + .../form-field/_form-field-high-contrast.scss | 39 + .../form-field/_form-field-native-select.scss | 91 + .../form-field/_form-field-subscript.scss | 90 + .../form-field/_form-field-theme.scss | 96 + .../material/form-field/_m2-form-field.scss | 226 +++ .../material/form-field/_m3-form-field.scss | 137 ++ .../_mdc-text-field-density-overrides.scss | 58 + .../_mdc-text-field-structure-overrides.scss | 185 ++ .../form-field/_mdc-text-field-structure.scss | 609 +++++++ .../_mdc-text-field-textarea-overrides.scss | 36 + .../form-field/_user-agent-overrides.scss | 24 + .../material/form-field/form-field.scss | 219 +++ .../material/grid-list/_grid-list-theme.scss | 76 + .../material/grid-list/_m2-grid-list.scss | 21 + .../material/grid-list/_m3-grid-list.scss | 20 + .../m3-scss/material/grid-list/grid-list.scss | 96 + .../m3-scss/material/icon/_icon-theme.scss | 109 ++ .../m3-scss/material/icon/_m2-icon.scss | 15 + .../m3-scss/material/icon/_m3-icon.scss | 21 + src/styles/m3-scss/material/icon/icon.scss | 64 + .../m3-scss/material/input/_input-theme.scss | 36 + .../list/_list-inherited-structure.scss | 477 +++++ .../list/_list-item-hcm-indicator.scss | 29 + .../m3-scss/material/list/_list-theme.scss | 201 +++ .../m3-scss/material/list/_m2-list.scss | 92 + .../m3-scss/material/list/_m3-list.scss | 93 + .../m3-scss/material/list/list-option.scss | 89 + src/styles/m3-scss/material/list/list.scss | 185 ++ .../m3-scss/material/menu/_m2-menu.scss | 44 + .../m3-scss/material/menu/_m3-menu.scss | 42 + .../m3-scss/material/menu/_menu-theme.scss | 76 + src/styles/m3-scss/material/menu/menu.scss | 236 +++ .../material/paginator/_m2-paginator.scss | 69 + .../material/paginator/_m3-paginator.scss | 46 + .../material/paginator/_paginator-theme.scss | 76 + .../m3-scss/material/paginator/paginator.scss | 137 ++ .../progress-bar/_m2-progress-bar.scss | 36 + .../progress-bar/_m3-progress-bar.scss | 29 + .../progress-bar/_progress-bar-theme.scss | 93 + .../material/progress-bar/progress-bar.scss | 311 ++++ .../_m2-progress-spinner.scss | 25 + .../_m3-progress-spinner.scss | 27 + .../_progress-spinner-theme.scss | 95 + .../progress-spinner/progress-spinner.scss | 232 +++ .../m3-scss/material/radio/_m2-radio.scss | 67 + .../m3-scss/material/radio/_m3-radio.scss | 65 + .../m3-scss/material/radio/_radio-common.scss | 277 +++ .../m3-scss/material/radio/_radio-theme.scss | 102 ++ src/styles/m3-scss/material/radio/radio.scss | 107 ++ .../m3-scss/material/select/_m2-select.scss | 49 + .../m3-scss/material/select/_m3-select.scss | 54 + .../material/select/_select-theme.scss | 99 ++ .../m3-scss/material/select/select.scss | 267 +++ .../m3-scss/material/sidenav/_m2-sidenav.scss | 48 + .../m3-scss/material/sidenav/_m3-sidenav.scss | 26 + .../material/sidenav/_sidenav-theme.scss | 75 + .../m3-scss/material/sidenav/drawer.scss | 252 +++ .../slide-toggle/_m2-slide-toggle.scss | 134 ++ .../slide-toggle/_m3-slide-toggle.scss | 133 ++ .../slide-toggle/_slide-toggle-theme.scss | 119 ++ .../material/slide-toggle/slide-toggle.scss | 575 ++++++ .../m3-scss/material/slider/_m2-slider.scss | 73 + .../m3-scss/material/slider/_m3-slider.scss | 69 + .../material/slider/_slider-theme.scss | 103 ++ .../m3-scss/material/slider/slider-thumb.scss | 13 + .../m3-scss/material/slider/slider.scss | 385 ++++ .../material/snack-bar/_m2-snack-bar.scss | 24 + .../material/snack-bar/_m3-snack-bar.scss | 26 + .../material/snack-bar/_snack-bar-theme.scss | 77 + .../material/snack-bar/simple-snack-bar.scss | 10 + .../snack-bar/snack-bar-container.scss | 153 ++ .../m3-scss/material/sort/_m2-sort.scss | 16 + .../m3-scss/material/sort/_m3-sort.scss | 20 + .../m3-scss/material/sort/_sort-theme.scss | 76 + .../m3-scss/material/sort/sort-header.scss | 140 ++ .../m3-scss/material/stepper/_m2-stepper.scss | 65 + .../m3-scss/material/stepper/_m3-stepper.scss | 66 + .../material/stepper/_stepper-theme.scss | 102 ++ .../material/stepper/_stepper-variables.scss | 29 + .../m3-scss/material/stepper/step-header.scss | 178 ++ .../m3-scss/material/stepper/stepper.scss | 301 ++++ .../m3-scss/material/table/_m2-table.scss | 63 + .../m3-scss/material/table/_m3-table.scss | 52 + .../material/table/_table-flex-styles.scss | 70 + .../m3-scss/material/table/_table-theme.scss | 76 + src/styles/m3-scss/material/table/table.scss | 167 ++ .../m3-scss/material/tabs/_m2-tabs.scss | 68 + .../m3-scss/material/tabs/_m3-tabs.scss | 58 + .../m3-scss/material/tabs/_tabs-common.scss | 427 +++++ .../m3-scss/material/tabs/_tabs-theme.scss | 131 ++ .../m3-scss/material/tabs/tab-body.scss | 67 + .../m3-scss/material/tabs/tab-group.scss | 42 + .../m3-scss/material/tabs/tab-header.scss | 28 + .../material/tabs/tab-nav-bar/tab-link.scss | 24 + .../tabs/tab-nav-bar/tab-nav-bar.scss | 17 + .../material/timepicker/_m2-timepicker.scss | 19 + .../material/timepicker/_m3-timepicker.scss | 21 + .../timepicker/_timepicker-theme.scss | 81 + .../material/timepicker/timepicker.scss | 80 + .../m3-scss/material/toolbar/_m2-toolbar.scss | 43 + .../m3-scss/material/toolbar/_m3-toolbar.scss | 41 + .../material/toolbar/_toolbar-theme.scss | 114 ++ .../material/toolbar/_toolbar-variables.scss | 28 + .../m3-scss/material/toolbar/toolbar.scss | 93 + .../m3-scss/material/tooltip/_m2-tooltip.scss | 24 + .../m3-scss/material/tooltip/_m3-tooltip.scss | 25 + .../material/tooltip/_tooltip-theme.scss | 76 + .../m3-scss/material/tooltip/tooltip.scss | 138 ++ .../m3-scss/material/tree/_m2-tree.scss | 30 + .../m3-scss/material/tree/_m3-tree.scss | 37 + .../m3-scss/material/tree/_tree-theme.scss | 76 + src/styles/m3-scss/material/tree/tree.scss | 32 + src/styles/m3-scss/universal-app/styles.scss | 36 + .../youtube-player-placeholder.scss | 45 + .../youtube-player/youtube-player.scss | 6 + src/styles/material-m3.css | 1556 +++++++++++++++++ src/styles/material-m3.css.map | 1 + src/styles/material-m3.scss | 10 + src/styles/utilities/_utilities.scss | 445 ----- test-results/.last-run.json | 4 + .../home-page-full-mobile-actual.png | Bin 0 -> 71202 bytes .../home-page-full-desktop-actual.png | Bin 0 -> 82071 bytes tests/e2e/components.spec.ts | 17 +- tests/e2e/cross-platform.spec.ts | 20 +- tests/e2e/css-styling.spec.ts | 2 +- tests/e2e/fixtures.ts | 51 + tests/e2e/functionality.spec.ts | 49 +- tests/e2e/home.spec.ts | 11 +- tests/e2e/mobile-responsive.spec.ts | 4 +- tests/e2e/setup/global-setup.ts | 52 + tests/e2e/visual-regression.spec.ts | 72 +- ...e-full-desktop-chromium-desktop-darwin.png | Bin 0 -> 82071 bytes ...age-full-mobile-chromium-mobile-darwin.png | Bin 0 -> 71202 bytes tests/md3/md3-schema.json | 573 ++++++ tests/md3/md3.spec.ts | 208 +++ tests/md3/md3.ts | 135 ++ 434 files changed, 35454 insertions(+), 4624 deletions(-) create mode 100644 src/app/material-m3.scss create mode 100644 src/components/layout/AppStatusAlerts.tsx delete mode 100644 src/components/ui/alert-dialog.tsx delete mode 100644 src/components/ui/badge.tsx delete mode 100644 src/components/ui/checkbox.tsx delete mode 100644 src/components/ui/dialog.tsx delete mode 100644 src/components/ui/input.tsx delete mode 100644 src/components/ui/label.tsx delete mode 100644 src/components/ui/radio-group.tsx delete mode 100644 src/components/ui/switch.tsx delete mode 100644 src/components/ui/textarea.tsx delete mode 100644 src/components/ui/tooltip.tsx delete mode 100644 src/styles/abstracts/_functions.scss delete mode 100644 src/styles/abstracts/_index.scss delete mode 100644 src/styles/abstracts/_mixins.scss delete mode 100644 src/styles/abstracts/_variables.scss delete mode 100644 src/styles/components/_buttons.scss delete mode 100644 src/styles/components/_cards.scss delete mode 100644 src/styles/components/_dialogs.scss delete mode 100644 src/styles/components/_forms.scss delete mode 100644 src/styles/components/_header.scss delete mode 100644 src/styles/components/_index.scss delete mode 100644 src/styles/components/_typography.scss create mode 100644 src/styles/m3-scss/@angular/cdk/_index.scss create mode 100644 src/styles/m3-scss/@angular/cdk/a11y/_index.scss create mode 100644 src/styles/m3-scss/@angular/cdk/a11y/a11y-prebuilt.scss create mode 100644 src/styles/m3-scss/@angular/cdk/dialog/dialog-container.scss create mode 100644 src/styles/m3-scss/@angular/cdk/drag-drop/resets.scss create mode 100644 src/styles/m3-scss/@angular/cdk/overlay/_index.scss create mode 100644 src/styles/m3-scss/@angular/cdk/overlay/overlay-prebuilt.scss create mode 100644 src/styles/m3-scss/@angular/cdk/overlay/overlay-structure.scss create mode 100644 src/styles/m3-scss/@angular/cdk/private/visually-hidden/visually-hidden.scss create mode 100644 src/styles/m3-scss/@angular/cdk/scrolling/virtual-scroll-viewport.scss create mode 100644 src/styles/m3-scss/@angular/cdk/table/table.scss create mode 100644 src/styles/m3-scss/@angular/cdk/text-field/_index.scss create mode 100644 src/styles/m3-scss/@angular/cdk/text-field/text-field-prebuilt.scss create mode 100644 src/styles/m3-scss/cdk/_index.scss create mode 100644 src/styles/m3-scss/cdk/a11y/_index.scss create mode 100644 src/styles/m3-scss/cdk/a11y/a11y-prebuilt.scss create mode 100644 src/styles/m3-scss/cdk/dialog/dialog-container.scss create mode 100644 src/styles/m3-scss/cdk/drag-drop/resets.scss create mode 100644 src/styles/m3-scss/cdk/overlay/_index.scss create mode 100644 src/styles/m3-scss/cdk/overlay/overlay-prebuilt.scss create mode 100644 src/styles/m3-scss/cdk/overlay/overlay-structure.scss create mode 100644 src/styles/m3-scss/cdk/private/visually-hidden/visually-hidden.scss create mode 100644 src/styles/m3-scss/cdk/scrolling/virtual-scroll-viewport.scss create mode 100644 src/styles/m3-scss/cdk/table/table.scss create mode 100644 src/styles/m3-scss/cdk/text-field/_index.scss create mode 100644 src/styles/m3-scss/cdk/text-field/text-field-prebuilt.scss create mode 100644 src/styles/m3-scss/dev-app/autocomplete/autocomplete-demo.scss create mode 100644 src/styles/m3-scss/dev-app/badge/badge-demo.scss create mode 100644 src/styles/m3-scss/dev-app/baseline/baseline-demo.scss create mode 100644 src/styles/m3-scss/dev-app/bottom-sheet/bottom-sheet-demo.scss create mode 100644 src/styles/m3-scss/dev-app/button-toggle/button-toggle-demo.scss create mode 100644 src/styles/m3-scss/dev-app/button/button-demo.scss create mode 100644 src/styles/m3-scss/dev-app/card/card-demo.scss create mode 100644 src/styles/m3-scss/dev-app/cdk-dialog/dialog-demo.scss create mode 100644 src/styles/m3-scss/dev-app/checkbox/checkbox-demo.scss create mode 100644 src/styles/m3-scss/dev-app/chips/chips-demo.scss create mode 100644 src/styles/m3-scss/dev-app/clipboard/clipboard-demo.scss create mode 100644 src/styles/m3-scss/dev-app/connected-overlay/connected-overlay-demo.scss create mode 100644 src/styles/m3-scss/dev-app/datepicker/custom-header.scss create mode 100644 src/styles/m3-scss/dev-app/datepicker/datepicker-demo.scss create mode 100644 src/styles/m3-scss/dev-app/dev-app/dev-app-layout.scss create mode 100644 src/styles/m3-scss/dev-app/dialog/dialog-demo.scss create mode 100644 src/styles/m3-scss/dev-app/drag-drop/drag-drop-demo.scss create mode 100644 src/styles/m3-scss/dev-app/drawer/drawer-demo.scss create mode 100644 src/styles/m3-scss/dev-app/expansion/expansion-demo.scss create mode 100644 src/styles/m3-scss/dev-app/focus-origin/focus-origin-demo.scss create mode 100644 src/styles/m3-scss/dev-app/focus-trap/focus-trap-demo.scss create mode 100644 src/styles/m3-scss/dev-app/focus-trap/focus-trap-dialog-demo.scss create mode 100644 src/styles/m3-scss/dev-app/google-map/google-map-demo.scss create mode 100644 src/styles/m3-scss/dev-app/grid-list/grid-list-demo.scss create mode 100644 src/styles/m3-scss/dev-app/icon/icon-demo.scss create mode 100644 src/styles/m3-scss/dev-app/input/input-demo.scss create mode 100644 src/styles/m3-scss/dev-app/layout/layout-demo.scss create mode 100644 src/styles/m3-scss/dev-app/list/list-demo.scss create mode 100644 src/styles/m3-scss/dev-app/menu/menu-demo.scss create mode 100644 src/styles/m3-scss/dev-app/menubar/mat-menubar-demo.scss create mode 100644 src/styles/m3-scss/dev-app/paginator/paginator-demo.scss create mode 100644 src/styles/m3-scss/dev-app/performance/performance-demo.scss create mode 100644 src/styles/m3-scss/dev-app/portal/portal-demo.scss create mode 100644 src/styles/m3-scss/dev-app/progress-bar/progress-bar-demo.scss create mode 100644 src/styles/m3-scss/dev-app/progress-spinner/progress-spinner-demo.scss create mode 100644 src/styles/m3-scss/dev-app/radio/radio-demo.scss create mode 100644 src/styles/m3-scss/dev-app/ripple/ripple-demo.scss create mode 100644 src/styles/m3-scss/dev-app/screen-type/screen-type-demo.scss create mode 100644 src/styles/m3-scss/dev-app/select/select-demo.scss create mode 100644 src/styles/m3-scss/dev-app/sidenav/sidenav-demo.scss create mode 100644 src/styles/m3-scss/dev-app/slide-toggle/slide-toggle-demo.scss create mode 100644 src/styles/m3-scss/dev-app/slider/slider-demo.scss create mode 100644 src/styles/m3-scss/dev-app/snack-bar/snack-bar-demo.scss create mode 100644 src/styles/m3-scss/dev-app/system-classes-demo/system-classes-demo.scss create mode 100644 src/styles/m3-scss/dev-app/system/system-demo.scss create mode 100644 src/styles/m3-scss/dev-app/table-scroll-container/table-scroll-container-demo.scss create mode 100644 src/styles/m3-scss/dev-app/theme-m3.scss create mode 100644 src/styles/m3-scss/dev-app/theme.scss create mode 100644 src/styles/m3-scss/dev-app/theme/theme-demo.scss create mode 100644 src/styles/m3-scss/dev-app/timepicker/timepicker-demo.scss create mode 100644 src/styles/m3-scss/dev-app/toolbar/toolbar-demo.scss create mode 100644 src/styles/m3-scss/dev-app/tree/tree-demo.scss create mode 100644 src/styles/m3-scss/dev-app/typography/typography-demo.scss create mode 100644 src/styles/m3-scss/dev-app/virtual-scroll/virtual-scroll-demo.scss create mode 100644 src/styles/m3-scss/dev-app/youtube-player/youtube-player-demo.scss create mode 100644 src/styles/m3-scss/e2e-app/theme.scss create mode 100644 src/styles/m3-scss/material-experimental/_index.scss create mode 100644 src/styles/m3-scss/material-experimental/column-resize/_column-resize-theme.scss create mode 100644 src/styles/m3-scss/material-experimental/menubar/_menubar-theme.scss create mode 100644 src/styles/m3-scss/material-experimental/menubar/menubar-item.scss create mode 100644 src/styles/m3-scss/material-experimental/menubar/menubar.scss create mode 100644 src/styles/m3-scss/material-experimental/popover-edit/_popover-edit-theme.scss create mode 100644 src/styles/m3-scss/material-experimental/selection/_selection.scss create mode 100644 src/styles/m3-scss/material-experimental/selection/selection-column.scss create mode 100644 src/styles/m3-scss/material/_index.scss create mode 100644 src/styles/m3-scss/material/autocomplete/_autocomplete-theme.scss create mode 100644 src/styles/m3-scss/material/autocomplete/_m2-autocomplete.scss create mode 100644 src/styles/m3-scss/material/autocomplete/_m3-autocomplete.scss create mode 100644 src/styles/m3-scss/material/autocomplete/autocomplete.scss create mode 100644 src/styles/m3-scss/material/badge/_badge-theme.scss create mode 100644 src/styles/m3-scss/material/badge/_m2-badge.scss create mode 100644 src/styles/m3-scss/material/badge/_m3-badge.scss create mode 100644 src/styles/m3-scss/material/badge/badge.scss create mode 100644 src/styles/m3-scss/material/bottom-sheet/_bottom-sheet-theme.scss create mode 100644 src/styles/m3-scss/material/bottom-sheet/_m2-bottom-sheet.scss create mode 100644 src/styles/m3-scss/material/bottom-sheet/_m3-bottom-sheet.scss create mode 100644 src/styles/m3-scss/material/bottom-sheet/bottom-sheet-container.scss create mode 100644 src/styles/m3-scss/material/button-toggle/_button-toggle-theme.scss create mode 100644 src/styles/m3-scss/material/button-toggle/_m2-button-toggle.scss create mode 100644 src/styles/m3-scss/material/button-toggle/_m3-button-toggle.scss create mode 100644 src/styles/m3-scss/material/button-toggle/button-toggle.scss create mode 100644 src/styles/m3-scss/material/button/_button-base.scss create mode 100644 src/styles/m3-scss/material/button/_button-theme.scss create mode 100644 src/styles/m3-scss/material/button/_fab-theme.scss create mode 100644 src/styles/m3-scss/material/button/_icon-button-theme.scss create mode 100644 src/styles/m3-scss/material/button/_m2-button.scss create mode 100644 src/styles/m3-scss/material/button/_m2-fab.scss create mode 100644 src/styles/m3-scss/material/button/_m2-icon-button.scss create mode 100644 src/styles/m3-scss/material/button/_m3-button.scss create mode 100644 src/styles/m3-scss/material/button/_m3-fab.scss create mode 100644 src/styles/m3-scss/material/button/_m3-icon-button.scss create mode 100644 src/styles/m3-scss/material/button/button-high-contrast.scss create mode 100644 src/styles/m3-scss/material/button/button.scss create mode 100644 src/styles/m3-scss/material/button/fab.scss create mode 100644 src/styles/m3-scss/material/button/icon-button.scss create mode 100644 src/styles/m3-scss/material/card/_card-theme.scss create mode 100644 src/styles/m3-scss/material/card/_m2-card.scss create mode 100644 src/styles/m3-scss/material/card/_m3-card.scss create mode 100644 src/styles/m3-scss/material/card/card.scss create mode 100644 src/styles/m3-scss/material/checkbox/_checkbox-common.scss create mode 100644 src/styles/m3-scss/material/checkbox/_checkbox-theme.scss create mode 100644 src/styles/m3-scss/material/checkbox/_m2-checkbox.scss create mode 100644 src/styles/m3-scss/material/checkbox/_m3-checkbox.scss create mode 100644 src/styles/m3-scss/material/checkbox/checkbox.scss create mode 100644 src/styles/m3-scss/material/chips/_chips-theme.scss create mode 100644 src/styles/m3-scss/material/chips/_m2-chip.scss create mode 100644 src/styles/m3-scss/material/chips/_m3-chip.scss create mode 100644 src/styles/m3-scss/material/chips/chip-set.scss create mode 100644 src/styles/m3-scss/material/chips/chip.scss create mode 100644 src/styles/m3-scss/material/core/_core-theme.scss create mode 100644 src/styles/m3-scss/material/core/_core.scss create mode 100644 src/styles/m3-scss/material/core/_m2-app.scss create mode 100644 src/styles/m3-scss/material/core/_m3-app.scss create mode 100644 src/styles/m3-scss/material/core/color/_all-color.scss create mode 100644 src/styles/m3-scss/material/core/density/private/_all-density.scss create mode 100644 src/styles/m3-scss/material/core/focus-indicators/_private.scss create mode 100644 src/styles/m3-scss/material/core/focus-indicators/structural-styles.scss create mode 100644 src/styles/m3-scss/material/core/internal-form-field/internal-form-field.scss create mode 100644 src/styles/m3-scss/material/core/m2/_index.scss create mode 100644 src/styles/m3-scss/material/core/m2/_palette.scss create mode 100644 src/styles/m3-scss/material/core/m2/_theming.scss create mode 100644 src/styles/m3-scss/material/core/m2/_typography-utils.scss create mode 100644 src/styles/m3-scss/material/core/m2/_typography.scss create mode 100644 src/styles/m3-scss/material/core/option/_m2-optgroup.scss create mode 100644 src/styles/m3-scss/material/core/option/_m2-option.scss create mode 100644 src/styles/m3-scss/material/core/option/_m3-optgroup.scss create mode 100644 src/styles/m3-scss/material/core/option/_m3-option.scss create mode 100644 src/styles/m3-scss/material/core/option/_optgroup-theme.scss create mode 100644 src/styles/m3-scss/material/core/option/_option-theme.scss create mode 100644 src/styles/m3-scss/material/core/option/optgroup.scss create mode 100644 src/styles/m3-scss/material/core/option/option.scss create mode 100644 src/styles/m3-scss/material/core/ripple/_m2-ripple.scss create mode 100644 src/styles/m3-scss/material/core/ripple/_m3-ripple.scss create mode 100644 src/styles/m3-scss/material/core/ripple/_ripple-theme.scss create mode 100644 src/styles/m3-scss/material/core/ripple/_ripple.scss create mode 100644 src/styles/m3-scss/material/core/ripple/ripple-structure.scss create mode 100644 src/styles/m3-scss/material/core/selection/pseudo-checkbox/_m2-pseudo-checkbox.scss create mode 100644 src/styles/m3-scss/material/core/selection/pseudo-checkbox/_m3-pseudo-checkbox.scss create mode 100644 src/styles/m3-scss/material/core/selection/pseudo-checkbox/_pseudo-checkbox-common.scss create mode 100644 src/styles/m3-scss/material/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss create mode 100644 src/styles/m3-scss/material/core/selection/pseudo-checkbox/pseudo-checkbox.scss create mode 100644 src/styles/m3-scss/material/core/style/_button-common.scss create mode 100644 src/styles/m3-scss/material/core/style/_checkbox-common.scss create mode 100644 src/styles/m3-scss/material/core/style/_elevation.scss create mode 100644 src/styles/m3-scss/material/core/style/_layout-common.scss create mode 100644 src/styles/m3-scss/material/core/style/_list-common.scss create mode 100644 src/styles/m3-scss/material/core/style/_menu-common.scss create mode 100644 src/styles/m3-scss/material/core/style/_private.scss create mode 100644 src/styles/m3-scss/material/core/style/_sass-utils.scss create mode 100644 src/styles/m3-scss/material/core/style/_validation.scss create mode 100644 src/styles/m3-scss/material/core/style/_variables.scss create mode 100644 src/styles/m3-scss/material/core/style/_vendor-prefixes.scss create mode 100644 src/styles/m3-scss/material/core/theming/_all-theme.scss create mode 100644 src/styles/m3-scss/material/core/theming/_color-api-backwards-compatibility.scss create mode 100644 src/styles/m3-scss/material/core/theming/_config-validation.scss create mode 100644 src/styles/m3-scss/material/core/theming/_definition.scss create mode 100644 src/styles/m3-scss/material/core/theming/_inspection.scss create mode 100644 src/styles/m3-scss/material/core/theming/_m2-inspection.scss create mode 100644 src/styles/m3-scss/material/core/theming/_palette-deprecated.scss create mode 100644 src/styles/m3-scss/material/core/theming/_palettes.scss create mode 100644 src/styles/m3-scss/material/core/theming/_theming-deprecated.scss create mode 100644 src/styles/m3-scss/material/core/theming/_theming.scss create mode 100644 src/styles/m3-scss/material/core/theming/_validation.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/azure-blue.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/cyan-orange.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/deeppurple-amber.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/indigo-pink.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/magenta-violet.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/pink-bluegrey.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/purple-green.scss create mode 100644 src/styles/m3-scss/material/core/theming/prebuilt/rose-red.scss create mode 100644 src/styles/m3-scss/material/core/theming/tests/test-css-variables-theme.scss create mode 100644 src/styles/m3-scss/material/core/theming/tests/test-theming-api.scss create mode 100644 src/styles/m3-scss/material/core/theming/tests/test-theming-bundle.scss create mode 100644 src/styles/m3-scss/material/core/theming/tests/test-typography-font-family.scss create mode 100644 src/styles/m3-scss/material/core/tokens/_classes.scss create mode 100644 src/styles/m3-scss/material/core/tokens/_m2-utils.scss create mode 100644 src/styles/m3-scss/material/core/tokens/_m3-tokens.scss create mode 100644 src/styles/m3-scss/material/core/tokens/_m3-utils.scss create mode 100644 src/styles/m3-scss/material/core/tokens/_system.scss create mode 100644 src/styles/m3-scss/material/core/tokens/_token-utils.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_index.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_md-sys-color-internal.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_md-sys-color.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_md-sys-elevation.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_md-sys-motion.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_md-sys-shape.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_md-sys-state.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m2/_md-sys-typescale.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_index.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-color-internal.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-color.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-elevation.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-motion.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-shape.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-state.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-typescale-internal.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_md-sys-typescale.scss create mode 100644 src/styles/m3-scss/material/core/tokens/m3/_theme.scss create mode 100644 src/styles/m3-scss/material/core/typography/_all-typography.scss create mode 100644 src/styles/m3-scss/material/core/typography/_typography-utils-deprecated.scss create mode 100644 src/styles/m3-scss/material/core/typography/_typography-utils.scss create mode 100644 src/styles/m3-scss/material/core/typography/_typography.scss create mode 100644 src/styles/m3-scss/material/core/typography/_versioning.scss create mode 100644 src/styles/m3-scss/material/datepicker/_datepicker-legacy-compat.scss create mode 100644 src/styles/m3-scss/material/datepicker/_datepicker-theme.scss create mode 100644 src/styles/m3-scss/material/datepicker/_m2-datepicker.scss create mode 100644 src/styles/m3-scss/material/datepicker/_m3-datepicker.scss create mode 100644 src/styles/m3-scss/material/datepicker/calendar-body.scss create mode 100644 src/styles/m3-scss/material/datepicker/calendar.scss create mode 100644 src/styles/m3-scss/material/datepicker/date-range-input.scss create mode 100644 src/styles/m3-scss/material/datepicker/datepicker-actions.scss create mode 100644 src/styles/m3-scss/material/datepicker/datepicker-content.scss create mode 100644 src/styles/m3-scss/material/datepicker/datepicker-toggle.scss create mode 100644 src/styles/m3-scss/material/dialog/_dialog-legacy-padding.scss create mode 100644 src/styles/m3-scss/material/dialog/_dialog-theme.scss create mode 100644 src/styles/m3-scss/material/dialog/_m2-dialog.scss create mode 100644 src/styles/m3-scss/material/dialog/_m3-dialog.scss create mode 100644 src/styles/m3-scss/material/dialog/dialog.scss create mode 100644 src/styles/m3-scss/material/divider/_divider-offset.scss create mode 100644 src/styles/m3-scss/material/divider/_divider-theme.scss create mode 100644 src/styles/m3-scss/material/divider/_m2-divider.scss create mode 100644 src/styles/m3-scss/material/divider/_m3-divider.scss create mode 100644 src/styles/m3-scss/material/divider/divider.scss create mode 100644 src/styles/m3-scss/material/expansion/_expansion-theme.scss create mode 100644 src/styles/m3-scss/material/expansion/_expansion-variables.scss create mode 100644 src/styles/m3-scss/material/expansion/_m2-expansion.scss create mode 100644 src/styles/m3-scss/material/expansion/_m3-expansion.scss create mode 100644 src/styles/m3-scss/material/expansion/expansion-panel-header.scss create mode 100644 src/styles/m3-scss/material/expansion/expansion-panel.scss create mode 100644 src/styles/m3-scss/material/form-field/_form-field-focus-overlay.scss create mode 100644 src/styles/m3-scss/material/form-field/_form-field-high-contrast.scss create mode 100644 src/styles/m3-scss/material/form-field/_form-field-native-select.scss create mode 100644 src/styles/m3-scss/material/form-field/_form-field-subscript.scss create mode 100644 src/styles/m3-scss/material/form-field/_form-field-theme.scss create mode 100644 src/styles/m3-scss/material/form-field/_m2-form-field.scss create mode 100644 src/styles/m3-scss/material/form-field/_m3-form-field.scss create mode 100644 src/styles/m3-scss/material/form-field/_mdc-text-field-density-overrides.scss create mode 100644 src/styles/m3-scss/material/form-field/_mdc-text-field-structure-overrides.scss create mode 100644 src/styles/m3-scss/material/form-field/_mdc-text-field-structure.scss create mode 100644 src/styles/m3-scss/material/form-field/_mdc-text-field-textarea-overrides.scss create mode 100644 src/styles/m3-scss/material/form-field/_user-agent-overrides.scss create mode 100644 src/styles/m3-scss/material/form-field/form-field.scss create mode 100644 src/styles/m3-scss/material/grid-list/_grid-list-theme.scss create mode 100644 src/styles/m3-scss/material/grid-list/_m2-grid-list.scss create mode 100644 src/styles/m3-scss/material/grid-list/_m3-grid-list.scss create mode 100644 src/styles/m3-scss/material/grid-list/grid-list.scss create mode 100644 src/styles/m3-scss/material/icon/_icon-theme.scss create mode 100644 src/styles/m3-scss/material/icon/_m2-icon.scss create mode 100644 src/styles/m3-scss/material/icon/_m3-icon.scss create mode 100644 src/styles/m3-scss/material/icon/icon.scss create mode 100644 src/styles/m3-scss/material/input/_input-theme.scss create mode 100644 src/styles/m3-scss/material/list/_list-inherited-structure.scss create mode 100644 src/styles/m3-scss/material/list/_list-item-hcm-indicator.scss create mode 100644 src/styles/m3-scss/material/list/_list-theme.scss create mode 100644 src/styles/m3-scss/material/list/_m2-list.scss create mode 100644 src/styles/m3-scss/material/list/_m3-list.scss create mode 100644 src/styles/m3-scss/material/list/list-option.scss create mode 100644 src/styles/m3-scss/material/list/list.scss create mode 100644 src/styles/m3-scss/material/menu/_m2-menu.scss create mode 100644 src/styles/m3-scss/material/menu/_m3-menu.scss create mode 100644 src/styles/m3-scss/material/menu/_menu-theme.scss create mode 100644 src/styles/m3-scss/material/menu/menu.scss create mode 100644 src/styles/m3-scss/material/paginator/_m2-paginator.scss create mode 100644 src/styles/m3-scss/material/paginator/_m3-paginator.scss create mode 100644 src/styles/m3-scss/material/paginator/_paginator-theme.scss create mode 100644 src/styles/m3-scss/material/paginator/paginator.scss create mode 100644 src/styles/m3-scss/material/progress-bar/_m2-progress-bar.scss create mode 100644 src/styles/m3-scss/material/progress-bar/_m3-progress-bar.scss create mode 100644 src/styles/m3-scss/material/progress-bar/_progress-bar-theme.scss create mode 100644 src/styles/m3-scss/material/progress-bar/progress-bar.scss create mode 100644 src/styles/m3-scss/material/progress-spinner/_m2-progress-spinner.scss create mode 100644 src/styles/m3-scss/material/progress-spinner/_m3-progress-spinner.scss create mode 100644 src/styles/m3-scss/material/progress-spinner/_progress-spinner-theme.scss create mode 100644 src/styles/m3-scss/material/progress-spinner/progress-spinner.scss create mode 100644 src/styles/m3-scss/material/radio/_m2-radio.scss create mode 100644 src/styles/m3-scss/material/radio/_m3-radio.scss create mode 100644 src/styles/m3-scss/material/radio/_radio-common.scss create mode 100644 src/styles/m3-scss/material/radio/_radio-theme.scss create mode 100644 src/styles/m3-scss/material/radio/radio.scss create mode 100644 src/styles/m3-scss/material/select/_m2-select.scss create mode 100644 src/styles/m3-scss/material/select/_m3-select.scss create mode 100644 src/styles/m3-scss/material/select/_select-theme.scss create mode 100644 src/styles/m3-scss/material/select/select.scss create mode 100644 src/styles/m3-scss/material/sidenav/_m2-sidenav.scss create mode 100644 src/styles/m3-scss/material/sidenav/_m3-sidenav.scss create mode 100644 src/styles/m3-scss/material/sidenav/_sidenav-theme.scss create mode 100644 src/styles/m3-scss/material/sidenav/drawer.scss create mode 100644 src/styles/m3-scss/material/slide-toggle/_m2-slide-toggle.scss create mode 100644 src/styles/m3-scss/material/slide-toggle/_m3-slide-toggle.scss create mode 100644 src/styles/m3-scss/material/slide-toggle/_slide-toggle-theme.scss create mode 100644 src/styles/m3-scss/material/slide-toggle/slide-toggle.scss create mode 100644 src/styles/m3-scss/material/slider/_m2-slider.scss create mode 100644 src/styles/m3-scss/material/slider/_m3-slider.scss create mode 100644 src/styles/m3-scss/material/slider/_slider-theme.scss create mode 100644 src/styles/m3-scss/material/slider/slider-thumb.scss create mode 100644 src/styles/m3-scss/material/slider/slider.scss create mode 100644 src/styles/m3-scss/material/snack-bar/_m2-snack-bar.scss create mode 100644 src/styles/m3-scss/material/snack-bar/_m3-snack-bar.scss create mode 100644 src/styles/m3-scss/material/snack-bar/_snack-bar-theme.scss create mode 100644 src/styles/m3-scss/material/snack-bar/simple-snack-bar.scss create mode 100644 src/styles/m3-scss/material/snack-bar/snack-bar-container.scss create mode 100644 src/styles/m3-scss/material/sort/_m2-sort.scss create mode 100644 src/styles/m3-scss/material/sort/_m3-sort.scss create mode 100644 src/styles/m3-scss/material/sort/_sort-theme.scss create mode 100644 src/styles/m3-scss/material/sort/sort-header.scss create mode 100644 src/styles/m3-scss/material/stepper/_m2-stepper.scss create mode 100644 src/styles/m3-scss/material/stepper/_m3-stepper.scss create mode 100644 src/styles/m3-scss/material/stepper/_stepper-theme.scss create mode 100644 src/styles/m3-scss/material/stepper/_stepper-variables.scss create mode 100644 src/styles/m3-scss/material/stepper/step-header.scss create mode 100644 src/styles/m3-scss/material/stepper/stepper.scss create mode 100644 src/styles/m3-scss/material/table/_m2-table.scss create mode 100644 src/styles/m3-scss/material/table/_m3-table.scss create mode 100644 src/styles/m3-scss/material/table/_table-flex-styles.scss create mode 100644 src/styles/m3-scss/material/table/_table-theme.scss create mode 100644 src/styles/m3-scss/material/table/table.scss create mode 100644 src/styles/m3-scss/material/tabs/_m2-tabs.scss create mode 100644 src/styles/m3-scss/material/tabs/_m3-tabs.scss create mode 100644 src/styles/m3-scss/material/tabs/_tabs-common.scss create mode 100644 src/styles/m3-scss/material/tabs/_tabs-theme.scss create mode 100644 src/styles/m3-scss/material/tabs/tab-body.scss create mode 100644 src/styles/m3-scss/material/tabs/tab-group.scss create mode 100644 src/styles/m3-scss/material/tabs/tab-header.scss create mode 100644 src/styles/m3-scss/material/tabs/tab-nav-bar/tab-link.scss create mode 100644 src/styles/m3-scss/material/tabs/tab-nav-bar/tab-nav-bar.scss create mode 100644 src/styles/m3-scss/material/timepicker/_m2-timepicker.scss create mode 100644 src/styles/m3-scss/material/timepicker/_m3-timepicker.scss create mode 100644 src/styles/m3-scss/material/timepicker/_timepicker-theme.scss create mode 100644 src/styles/m3-scss/material/timepicker/timepicker.scss create mode 100644 src/styles/m3-scss/material/toolbar/_m2-toolbar.scss create mode 100644 src/styles/m3-scss/material/toolbar/_m3-toolbar.scss create mode 100644 src/styles/m3-scss/material/toolbar/_toolbar-theme.scss create mode 100644 src/styles/m3-scss/material/toolbar/_toolbar-variables.scss create mode 100644 src/styles/m3-scss/material/toolbar/toolbar.scss create mode 100644 src/styles/m3-scss/material/tooltip/_m2-tooltip.scss create mode 100644 src/styles/m3-scss/material/tooltip/_m3-tooltip.scss create mode 100644 src/styles/m3-scss/material/tooltip/_tooltip-theme.scss create mode 100644 src/styles/m3-scss/material/tooltip/tooltip.scss create mode 100644 src/styles/m3-scss/material/tree/_m2-tree.scss create mode 100644 src/styles/m3-scss/material/tree/_m3-tree.scss create mode 100644 src/styles/m3-scss/material/tree/_tree-theme.scss create mode 100644 src/styles/m3-scss/material/tree/tree.scss create mode 100644 src/styles/m3-scss/universal-app/styles.scss create mode 100644 src/styles/m3-scss/youtube-player/youtube-player-placeholder.scss create mode 100644 src/styles/m3-scss/youtube-player/youtube-player.scss create mode 100644 src/styles/material-m3.css create mode 100644 src/styles/material-m3.css.map create mode 100644 src/styles/material-m3.scss delete mode 100644 src/styles/utilities/_utilities.scss create mode 100644 test-results/.last-run.json create mode 100644 test-results/e2e-visual-regression-Visu-1ae34-full-page-snapshot---mobile-chromium-mobile/home-page-full-mobile-actual.png create mode 100644 test-results/e2e-visual-regression-Visu-b0ce7-ull-page-snapshot---desktop-chromium-desktop/home-page-full-desktop-actual.png create mode 100644 tests/e2e/fixtures.ts create mode 100644 tests/e2e/setup/global-setup.ts create mode 100644 tests/e2e/visual-regression.spec.ts-snapshots/home-page-full-desktop-chromium-desktop-darwin.png create mode 100644 tests/e2e/visual-regression.spec.ts-snapshots/home-page-full-mobile-chromium-mobile-darwin.png create mode 100644 tests/md3/md3-schema.json create mode 100644 tests/md3/md3.spec.ts create mode 100644 tests/md3/md3.ts diff --git a/eslint.config.mjs b/eslint.config.mjs index 0f0b715..fc46073 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -6,7 +6,7 @@ import globals from 'globals' export default [ { - ignores: ['node_modules', '.next', 'dist', 'coverage'], + ignores: ['node_modules', '.next', 'dist', 'coverage', 'src/styles/m3-scss/**'], }, js.configs.recommended, ...tseslint.configs.recommended, diff --git a/package-lock.json b/package-lock.json index 8ad3d21..54f9793 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,7 +51,7 @@ "next-themes": "^0.4.6", "pyodide": "^0.27.0", "react": "^19.2.3", - "react-dom": "^19.0.0", + "react-dom": "^19.2.3", "react-error-boundary": "^6.0.0", "react-hook-form": "^7.54.2", "react-redux": "^9.2.0", @@ -8340,15 +8340,15 @@ } }, "node_modules/react-dom": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.0" + "react": "^19.2.3" } }, "node_modules/react-error-boundary": { diff --git a/package.json b/package.json index c277f16..dce8ed6 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "next-themes": "^0.4.6", "pyodide": "^0.27.0", "react": "^19.2.3", - "react-dom": "^19.0.0", + "react-dom": "^19.2.3", "react-error-boundary": "^6.0.0", "react-hook-form": "^7.54.2", "react-redux": "^9.2.0", diff --git a/playwright.config.ts b/playwright.config.ts index 27452ad..135a3e1 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,8 +1,10 @@ import { defineConfig, devices } from "@playwright/test" export default defineConfig({ - testDir: "./tests/e2e", + // Run both general e2e and MD3 conformance suites + testDir: "./tests", timeout: 60_000, + globalSetup: "./tests/e2e/setup/global-setup.ts", expect: { timeout: 10_000, }, @@ -30,7 +32,7 @@ export default defineConfig({ }, ], webServer: { - command: "PORT=3002 npm run dev -- --hostname 0.0.0.0", + command: "npm run dev -- -p 3002 -H 0.0.0.0", port: 3002, reuseExistingServer: !process.env.CI, timeout: 120_000, diff --git a/src/app/PageLayout.tsx b/src/app/PageLayout.tsx index 5c69154..6f4bd8a 100644 --- a/src/app/PageLayout.tsx +++ b/src/app/PageLayout.tsx @@ -6,10 +6,16 @@ import { Navigation } from '@/components/layout/navigation/Navigation'; import { NavigationSidebar } from '@/components/layout/navigation/NavigationSidebar'; import { useNavigation } from '@/components/layout/navigation/useNavigation'; import { BackendIndicator } from '@/components/layout/BackendIndicator'; +import { AppStatusAlerts } from '@/components/layout/AppStatusAlerts'; import { ReactNode } from 'react'; export function PageLayout({ children }: { children: ReactNode }) { const { menuOpen } = useNavigation(); + const safePad = '0.5rem'; + const safeAreaPadding = { + paddingLeft: `max(${safePad}, env(safe-area-inset-left, 0px))`, + paddingRight: `max(${safePad}, env(safe-area-inset-right, 0px))`, + }; return (
@@ -21,29 +27,35 @@ export function PageLayout({ children }: { children: ReactNode }) { initial={false} animate={{ marginLeft: menuOpen ? 320 : 0 }} transition={{ type: 'spring', damping: 30, stiffness: 300 }} - className="relative z-10" + className="relative z-10 flex flex-col min-h-screen" > -
-
-
+
+
+
-

+ CodeSnippet -

+
@@ -51,13 +63,25 @@ export function PageLayout({ children }: { children: ReactNode }) {
-
+
+
+ +
{children}
-