@ng-prism/core 21.0.0
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/README.md +170 -0
- package/builders.json +14 -0
- package/dist/app/component-header/prism-component-header.component.d.ts +8 -0
- package/dist/app/component-header/prism-component-header.component.d.ts.map +1 -0
- package/dist/app/component-header/prism-component-header.component.js +77 -0
- package/dist/app/controls/boolean-control.component.d.ts +10 -0
- package/dist/app/controls/boolean-control.component.d.ts.map +1 -0
- package/dist/app/controls/boolean-control.component.js +58 -0
- package/dist/app/controls/json-control.component.d.ts +19 -0
- package/dist/app/controls/json-control.component.d.ts.map +1 -0
- package/dist/app/controls/json-control.component.js +136 -0
- package/dist/app/controls/number-control.component.d.ts +10 -0
- package/dist/app/controls/number-control.component.d.ts.map +1 -0
- package/dist/app/controls/number-control.component.js +55 -0
- package/dist/app/controls/string-control.component.d.ts +10 -0
- package/dist/app/controls/string-control.component.d.ts.map +1 -0
- package/dist/app/controls/string-control.component.js +55 -0
- package/dist/app/controls/union-control.component.d.ts +11 -0
- package/dist/app/controls/union-control.component.d.ts.map +1 -0
- package/dist/app/controls/union-control.component.js +72 -0
- package/dist/app/header/prism-header.component.d.ts +10 -0
- package/dist/app/header/prism-header.component.d.ts.map +1 -0
- package/dist/app/header/prism-header.component.js +241 -0
- package/dist/app/hmr.d.ts +4 -0
- package/dist/app/hmr.d.ts.map +1 -0
- package/dist/app/hmr.js +5 -0
- package/dist/app/index.d.ts +18 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +21 -0
- package/dist/app/layout-menu/prism-layout-menu.component.d.ts +10 -0
- package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -0
- package/dist/app/layout-menu/prism-layout-menu.component.js +190 -0
- package/dist/app/page-renderer/prism-icon-page.component.d.ts +8 -0
- package/dist/app/page-renderer/prism-icon-page.component.d.ts.map +1 -0
- package/dist/app/page-renderer/prism-icon-page.component.js +42 -0
- package/dist/app/page-renderer/prism-page-renderer.component.d.ts +8 -0
- package/dist/app/page-renderer/prism-page-renderer.component.d.ts.map +1 -0
- package/dist/app/page-renderer/prism-page-renderer.component.js +72 -0
- package/dist/app/page-renderer/prism-token-page.component.d.ts +8 -0
- package/dist/app/page-renderer/prism-token-page.component.d.ts.map +1 -0
- package/dist/app/page-renderer/prism-token-page.component.js +164 -0
- package/dist/app/panels/a11y/a11y-audit.service.d.ts +17 -0
- package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-audit.service.js +71 -0
- package/dist/app/panels/a11y/a11y-core.plugin.d.ts +3 -0
- package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-core.plugin.js +8 -0
- package/dist/app/panels/a11y/a11y-dom-utils.d.ts +11 -0
- package/dist/app/panels/a11y/a11y-dom-utils.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-dom-utils.js +149 -0
- package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts +24 -0
- package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +104 -0
- package/dist/app/panels/a11y/a11y-keyboard.component.d.ts +12 -0
- package/dist/app/panels/a11y/a11y-keyboard.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-keyboard.component.js +150 -0
- package/dist/app/panels/a11y/a11y-keyboard.service.d.ts +8 -0
- package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-keyboard.service.js +71 -0
- package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +6 -0
- package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-overlay-host.component.js +18 -0
- package/dist/app/panels/a11y/a11y-panel-state.service.d.ts +8 -0
- package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-panel-state.service.js +11 -0
- package/dist/app/panels/a11y/a11y-panel.component.d.ts +14 -0
- package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-panel.component.js +183 -0
- package/dist/app/panels/a11y/a11y-perspective.service.d.ts +8 -0
- package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-perspective.service.js +11 -0
- package/dist/app/panels/a11y/a11y-score.component.d.ts +11 -0
- package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-score.component.js +72 -0
- package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts +27 -0
- package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-sr-overlay.component.js +127 -0
- package/dist/app/panels/a11y/a11y-sr.component.d.ts +19 -0
- package/dist/app/panels/a11y/a11y-sr.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-sr.component.js +257 -0
- package/dist/app/panels/a11y/a11y-sr.service.d.ts +8 -0
- package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-sr.service.js +102 -0
- package/dist/app/panels/a11y/a11y-tree.component.d.ts +27 -0
- package/dist/app/panels/a11y/a11y-tree.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-tree.component.js +229 -0
- package/dist/app/panels/a11y/a11y-tree.service.d.ts +8 -0
- package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-tree.service.js +47 -0
- package/dist/app/panels/a11y/a11y-violations.component.d.ts +15 -0
- package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y-violations.component.js +457 -0
- package/dist/app/panels/a11y/a11y.types.d.ts +44 -0
- package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -0
- package/dist/app/panels/a11y/a11y.types.js +1 -0
- package/dist/app/panels/builtin-panels.d.ts +3 -0
- package/dist/app/panels/builtin-panels.d.ts.map +1 -0
- package/dist/app/panels/builtin-panels.js +8 -0
- package/dist/app/panels/controls/controls-plugin.d.ts +3 -0
- package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -0
- package/dist/app/panels/controls/controls-plugin.js +12 -0
- package/dist/app/panels/controls/prism-controls-panel.component.d.ts +13 -0
- package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -0
- package/dist/app/panels/controls/prism-controls-panel.component.js +178 -0
- package/dist/app/panels/events/events-plugin.d.ts +3 -0
- package/dist/app/panels/events/events-plugin.d.ts.map +1 -0
- package/dist/app/panels/events/events-plugin.js +12 -0
- package/dist/app/panels/events/prism-events-panel.component.d.ts +9 -0
- package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -0
- package/dist/app/panels/events/prism-events-panel.component.js +83 -0
- package/dist/app/panels/events/prism-json-node.component.d.ts +22 -0
- package/dist/app/panels/events/prism-json-node.component.d.ts.map +1 -0
- package/dist/app/panels/events/prism-json-node.component.js +350 -0
- package/dist/app/panels/events/prism-json-node.utils.d.ts +2 -0
- package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -0
- package/dist/app/panels/events/prism-json-node.utils.js +40 -0
- package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +26 -0
- package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -0
- package/dist/app/panels/panel-host/prism-panel-host.component.js +157 -0
- package/dist/app/provide-prism.d.ts +8 -0
- package/dist/app/provide-prism.d.ts.map +1 -0
- package/dist/app/provide-prism.js +21 -0
- package/dist/app/renderer/highlight-xml.d.ts +2 -0
- package/dist/app/renderer/highlight-xml.d.ts.map +1 -0
- package/dist/app/renderer/highlight-xml.js +27 -0
- package/dist/app/renderer/prism-renderer.component.d.ts +32 -0
- package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -0
- package/dist/app/renderer/prism-renderer.component.js +346 -0
- package/dist/app/renderer/snippet-generator.d.ts +7 -0
- package/dist/app/renderer/snippet-generator.d.ts.map +1 -0
- package/dist/app/renderer/snippet-generator.js +162 -0
- package/dist/app/services/navigation-item.types.d.ts +10 -0
- package/dist/app/services/navigation-item.types.d.ts.map +1 -0
- package/dist/app/services/navigation-item.types.js +1 -0
- package/dist/app/services/prism-event-log.service.d.ts +16 -0
- package/dist/app/services/prism-event-log.service.d.ts.map +1 -0
- package/dist/app/services/prism-event-log.service.js +21 -0
- package/dist/app/services/prism-layout.service.d.ts +23 -0
- package/dist/app/services/prism-layout.service.d.ts.map +1 -0
- package/dist/app/services/prism-layout.service.js +85 -0
- package/dist/app/services/prism-manifest.service.d.ts +15 -0
- package/dist/app/services/prism-manifest.service.d.ts.map +1 -0
- package/dist/app/services/prism-manifest.service.js +53 -0
- package/dist/app/services/prism-navigation.service.d.ts +18 -0
- package/dist/app/services/prism-navigation.service.d.ts.map +1 -0
- package/dist/app/services/prism-navigation.service.js +94 -0
- package/dist/app/services/prism-panel.service.d.ts +8 -0
- package/dist/app/services/prism-panel.service.d.ts.map +1 -0
- package/dist/app/services/prism-panel.service.js +12 -0
- package/dist/app/services/prism-plugin.service.d.ts +12 -0
- package/dist/app/services/prism-plugin.service.d.ts.map +1 -0
- package/dist/app/services/prism-plugin.service.js +32 -0
- package/dist/app/services/prism-renderer.service.d.ts +18 -0
- package/dist/app/services/prism-renderer.service.d.ts.map +1 -0
- package/dist/app/services/prism-renderer.service.js +84 -0
- package/dist/app/services/prism-search.service.d.ts +13 -0
- package/dist/app/services/prism-search.service.d.ts.map +1 -0
- package/dist/app/services/prism-search.service.js +39 -0
- package/dist/app/services/prism-theme.service.d.ts +9 -0
- package/dist/app/services/prism-theme.service.d.ts.map +1 -0
- package/dist/app/services/prism-theme.service.js +23 -0
- package/dist/app/services/prism-url-state.service.d.ts +16 -0
- package/dist/app/services/prism-url-state.service.d.ts.map +1 -0
- package/dist/app/services/prism-url-state.service.js +108 -0
- package/dist/app/shell/prism-shell.component.d.ts +22 -0
- package/dist/app/shell/prism-shell.component.d.ts.map +1 -0
- package/dist/app/shell/prism-shell.component.js +283 -0
- package/dist/app/sidebar/prism-sidebar.component.d.ts +14 -0
- package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -0
- package/dist/app/sidebar/prism-sidebar.component.js +105 -0
- package/dist/app/theme/prism-default-theme.d.ts +4 -0
- package/dist/app/theme/prism-default-theme.d.ts.map +1 -0
- package/dist/app/theme/prism-default-theme.js +57 -0
- package/dist/app/tokens/prism-tokens.d.ts +11 -0
- package/dist/app/tokens/prism-tokens.d.ts.map +1 -0
- package/dist/app/tokens/prism-tokens.js +7 -0
- package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +22 -0
- package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -0
- package/dist/app/view-tab-bar/prism-view-panel-host.component.js +90 -0
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +10 -0
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -0
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +65 -0
- package/dist/builder/build/index.d.ts +6 -0
- package/dist/builder/build/index.d.ts.map +1 -0
- package/dist/builder/build/index.js +15 -0
- package/dist/builder/build/schema.d.ts +9 -0
- package/dist/builder/build/schema.d.ts.map +1 -0
- package/dist/builder/build/schema.js +1 -0
- package/dist/builder/config-loader/config-loader.d.ts +8 -0
- package/dist/builder/config-loader/config-loader.d.ts.map +1 -0
- package/dist/builder/config-loader/config-loader.js +33 -0
- package/dist/builder/config-loader/index.d.ts +3 -0
- package/dist/builder/config-loader/index.d.ts.map +1 -0
- package/dist/builder/config-loader/index.js +1 -0
- package/dist/builder/icon-resolver/icon-resolver.d.ts +7 -0
- package/dist/builder/icon-resolver/icon-resolver.d.ts.map +1 -0
- package/dist/builder/icon-resolver/icon-resolver.js +12 -0
- package/dist/builder/icon-resolver/index.d.ts +2 -0
- package/dist/builder/icon-resolver/index.d.ts.map +1 -0
- package/dist/builder/icon-resolver/index.js +1 -0
- package/dist/builder/manifest/host-parser.d.ts +6 -0
- package/dist/builder/manifest/host-parser.d.ts.map +1 -0
- package/dist/builder/manifest/host-parser.js +9 -0
- package/dist/builder/manifest/index.d.ts +3 -0
- package/dist/builder/manifest/index.d.ts.map +1 -0
- package/dist/builder/manifest/index.js +1 -0
- package/dist/builder/manifest/runtime-manifest.generator.d.ts +9 -0
- package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -0
- package/dist/builder/manifest/runtime-manifest.generator.js +216 -0
- package/dist/builder/plugin-runner/index.d.ts +2 -0
- package/dist/builder/plugin-runner/index.d.ts.map +1 -0
- package/dist/builder/plugin-runner/index.js +1 -0
- package/dist/builder/plugin-runner/plugin-runner.d.ts +3 -0
- package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -0
- package/dist/builder/plugin-runner/plugin-runner.js +38 -0
- package/dist/builder/scanner/ast-utils.d.ts +20 -0
- package/dist/builder/scanner/ast-utils.d.ts.map +1 -0
- package/dist/builder/scanner/ast-utils.js +100 -0
- package/dist/builder/scanner/component.scanner.d.ts +7 -0
- package/dist/builder/scanner/component.scanner.d.ts.map +1 -0
- package/dist/builder/scanner/component.scanner.js +113 -0
- package/dist/builder/scanner/entry-point-discovery.d.ts +6 -0
- package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -0
- package/dist/builder/scanner/entry-point-discovery.js +38 -0
- package/dist/builder/scanner/entry-point.scanner.d.ts +11 -0
- package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -0
- package/dist/builder/scanner/entry-point.scanner.js +19 -0
- package/dist/builder/scanner/index.d.ts +8 -0
- package/dist/builder/scanner/index.d.ts.map +1 -0
- package/dist/builder/scanner/index.js +6 -0
- package/dist/builder/scanner/input.extractor.d.ts +11 -0
- package/dist/builder/scanner/input.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/input.extractor.js +169 -0
- package/dist/builder/scanner/manifest.generator.d.ts +6 -0
- package/dist/builder/scanner/manifest.generator.d.ts.map +1 -0
- package/dist/builder/scanner/manifest.generator.js +59 -0
- package/dist/builder/scanner/scanner.d.ts +16 -0
- package/dist/builder/scanner/scanner.d.ts.map +1 -0
- package/dist/builder/scanner/scanner.js +28 -0
- package/dist/builder/serve/index.d.ts +6 -0
- package/dist/builder/serve/index.d.ts.map +1 -0
- package/dist/builder/serve/index.js +48 -0
- package/dist/builder/serve/schema.d.ts +9 -0
- package/dist/builder/serve/schema.d.ts.map +1 -0
- package/dist/builder/serve/schema.js +1 -0
- package/dist/builder/shared/index.d.ts +3 -0
- package/dist/builder/shared/index.d.ts.map +1 -0
- package/dist/builder/shared/index.js +1 -0
- package/dist/builder/shared/prism-pipeline.d.ts +21 -0
- package/dist/builder/shared/prism-pipeline.d.ts.map +1 -0
- package/dist/builder/shared/prism-pipeline.js +95 -0
- package/dist/builder/token-scanner/index.d.ts +2 -0
- package/dist/builder/token-scanner/index.d.ts.map +1 -0
- package/dist/builder/token-scanner/index.js +1 -0
- package/dist/builder/token-scanner/token-scanner.d.ts +9 -0
- package/dist/builder/token-scanner/token-scanner.d.ts.map +1 -0
- package/dist/builder/token-scanner/token-scanner.js +95 -0
- package/dist/builder/watcher/index.d.ts +3 -0
- package/dist/builder/watcher/index.d.ts.map +1 -0
- package/dist/builder/watcher/index.js +1 -0
- package/dist/builder/watcher/prism-watcher.d.ts +29 -0
- package/dist/builder/watcher/prism-watcher.d.ts.map +1 -0
- package/dist/builder/watcher/prism-watcher.js +79 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/decorator/index.d.ts +3 -0
- package/dist/decorator/index.d.ts.map +1 -0
- package/dist/decorator/index.js +1 -0
- package/dist/decorator/showcase.decorator.d.ts +5 -0
- package/dist/decorator/showcase.decorator.d.ts.map +1 -0
- package/dist/decorator/showcase.decorator.js +7 -0
- package/dist/decorator/showcase.types.d.ts +54 -0
- package/dist/decorator/showcase.types.d.ts.map +1 -0
- package/dist/decorator/showcase.types.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/plugin/define-config.d.ts +4 -0
- package/dist/plugin/define-config.d.ts.map +1 -0
- package/dist/plugin/define-config.js +4 -0
- package/dist/plugin/index.d.ts +8 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +3 -0
- package/dist/plugin/page-helpers.d.ts +19 -0
- package/dist/plugin/page-helpers.d.ts.map +1 -0
- package/dist/plugin/page-helpers.js +20 -0
- package/dist/plugin/page.types.d.ts +19 -0
- package/dist/plugin/page.types.d.ts.map +1 -0
- package/dist/plugin/page.types.js +1 -0
- package/dist/plugin/plugin.types.d.ts +98 -0
- package/dist/plugin/plugin.types.d.ts.map +1 -0
- package/dist/plugin/plugin.types.js +1 -0
- package/dist/schematics/ng-add/index.d.ts +4 -0
- package/dist/schematics/ng-add/index.d.ts.map +1 -0
- package/dist/schematics/ng-add/index.js +179 -0
- package/dist/schematics/ng-add/schema.d.ts +5 -0
- package/dist/schematics/ng-add/schema.d.ts.map +1 -0
- package/dist/schematics/ng-add/schema.js +1 -0
- package/dist/test-setup-browser.d.ts +2 -0
- package/dist/test-setup-browser.d.ts.map +1 -0
- package/dist/test-setup-browser.js +4 -0
- package/package.json +73 -0
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/schema.json +20 -0
- package/src/builder/build/schema.json +35 -0
- package/src/builder/serve/schema.json +36 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input, signal, } from '@angular/core';
|
|
2
|
+
import { A11ySrService } from './a11y-sr.service.js';
|
|
3
|
+
import { A11yPerspectiveService } from './a11y-perspective.service.js';
|
|
4
|
+
import { PrismRendererService } from '../../services/prism-renderer.service.js';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const _forTrack0 = ($index, $item) => $item.index;
|
|
7
|
+
function A11ySrComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
8
|
+
i0.ɵɵdomElementStart(0, "div", 4);
|
|
9
|
+
i0.ɵɵtext(1, "Select a component to simulate screen reader output.");
|
|
10
|
+
i0.ɵɵdomElementEnd();
|
|
11
|
+
} }
|
|
12
|
+
function A11ySrComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
13
|
+
i0.ɵɵdomElementStart(0, "div", 4);
|
|
14
|
+
i0.ɵɵtext(1, "No announced elements found.");
|
|
15
|
+
i0.ɵɵdomElementEnd();
|
|
16
|
+
} }
|
|
17
|
+
function A11ySrComponent_Conditional_8_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
+
i0.ɵɵtext(0);
|
|
19
|
+
} if (rf & 2) {
|
|
20
|
+
let tmp_2_0;
|
|
21
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
22
|
+
i0.ɵɵtextInterpolate1(" \"", (tmp_2_0 = ctx_r1.active()) == null ? null : tmp_2_0.name, "\" ");
|
|
23
|
+
} }
|
|
24
|
+
function A11ySrComponent_Conditional_8_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵdomElementStart(0, "span");
|
|
26
|
+
i0.ɵɵtext(1);
|
|
27
|
+
i0.ɵɵdomElementEnd();
|
|
28
|
+
} if (rf & 2) {
|
|
29
|
+
const s_r3 = ctx.$implicit;
|
|
30
|
+
i0.ɵɵadvance();
|
|
31
|
+
i0.ɵɵtextInterpolate(s_r3);
|
|
32
|
+
} }
|
|
33
|
+
function A11ySrComponent_Conditional_8_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵdomElementStart(0, "div", 10);
|
|
35
|
+
i0.ɵɵrepeaterCreate(1, A11ySrComponent_Conditional_8_Conditional_8_For_2_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
36
|
+
i0.ɵɵdomElementEnd();
|
|
37
|
+
} if (rf & 2) {
|
|
38
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
39
|
+
i0.ɵɵadvance();
|
|
40
|
+
i0.ɵɵrepeater(ctx_r1.activeStates());
|
|
41
|
+
} }
|
|
42
|
+
function A11ySrComponent_Conditional_8_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵdomElementStart(0, "div", 15);
|
|
45
|
+
i0.ɵɵdomListener("click", function A11ySrComponent_Conditional_8_For_16_Template_div_click_0_listener() { const ɵ$index_51_r5 = i0.ɵɵrestoreView(_r4).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.activeIndex.set(ɵ$index_51_r5)); });
|
|
46
|
+
i0.ɵɵdomElementEnd();
|
|
47
|
+
} if (rf & 2) {
|
|
48
|
+
const ɵ$index_51_r5 = ctx.$index;
|
|
49
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
50
|
+
i0.ɵɵclassProp("prism-a11y-sr__dot--active", ɵ$index_51_r5 === ctx_r1.activeIndex());
|
|
51
|
+
} }
|
|
52
|
+
function A11ySrComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
54
|
+
i0.ɵɵdomElementStart(0, "div", 5)(1, "div", 6)(2, "div", 7);
|
|
55
|
+
i0.ɵɵtext(3);
|
|
56
|
+
i0.ɵɵdomElementEnd();
|
|
57
|
+
i0.ɵɵdomElementStart(4, "div", 8);
|
|
58
|
+
i0.ɵɵconditionalCreate(5, A11ySrComponent_Conditional_8_Conditional_5_Template, 1, 1);
|
|
59
|
+
i0.ɵɵdomElementEnd();
|
|
60
|
+
i0.ɵɵdomElementStart(6, "div", 9);
|
|
61
|
+
i0.ɵɵtext(7);
|
|
62
|
+
i0.ɵɵdomElementEnd();
|
|
63
|
+
i0.ɵɵconditionalCreate(8, A11ySrComponent_Conditional_8_Conditional_8_Template, 3, 0, "div", 10);
|
|
64
|
+
i0.ɵɵdomElementEnd();
|
|
65
|
+
i0.ɵɵdomElementStart(9, "div", 11)(10, "button", 12);
|
|
66
|
+
i0.ɵɵdomListener("click", function A11ySrComponent_Conditional_8_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.prev()); });
|
|
67
|
+
i0.ɵɵtext(11, "\u25C0");
|
|
68
|
+
i0.ɵɵdomElementEnd();
|
|
69
|
+
i0.ɵɵdomElementStart(12, "button", 12);
|
|
70
|
+
i0.ɵɵdomListener("click", function A11ySrComponent_Conditional_8_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.next()); });
|
|
71
|
+
i0.ɵɵtext(13, "\u25B6");
|
|
72
|
+
i0.ɵɵdomElementEnd()();
|
|
73
|
+
i0.ɵɵdomElementStart(14, "div", 13);
|
|
74
|
+
i0.ɵɵrepeaterCreate(15, A11ySrComponent_Conditional_8_For_16_Template, 1, 2, "div", 14, _forTrack0);
|
|
75
|
+
i0.ɵɵdomElementEnd()();
|
|
76
|
+
} if (rf & 2) {
|
|
77
|
+
let tmp_2_0;
|
|
78
|
+
let tmp_3_0;
|
|
79
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
80
|
+
i0.ɵɵadvance(3);
|
|
81
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.activeIndex() + 1, " / ", ctx_r1.announcements().length, " ");
|
|
82
|
+
i0.ɵɵadvance(2);
|
|
83
|
+
i0.ɵɵconditional(((tmp_2_0 = ctx_r1.active()) == null ? null : tmp_2_0.name) ? 5 : -1);
|
|
84
|
+
i0.ɵɵadvance(2);
|
|
85
|
+
i0.ɵɵtextInterpolate((tmp_3_0 = ctx_r1.active()) == null ? null : tmp_3_0.role);
|
|
86
|
+
i0.ɵɵadvance();
|
|
87
|
+
i0.ɵɵconditional(ctx_r1.activeStates().length ? 8 : -1);
|
|
88
|
+
i0.ɵɵadvance(2);
|
|
89
|
+
i0.ɵɵdomProperty("disabled", ctx_r1.activeIndex() === 0);
|
|
90
|
+
i0.ɵɵadvance(2);
|
|
91
|
+
i0.ɵɵdomProperty("disabled", ctx_r1.activeIndex() === ctx_r1.announcements().length - 1);
|
|
92
|
+
i0.ɵɵadvance(3);
|
|
93
|
+
i0.ɵɵrepeater(ctx_r1.announcements());
|
|
94
|
+
} }
|
|
95
|
+
function A11ySrComponent_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
97
|
+
i0.ɵɵdomElementStart(0, "div", 19);
|
|
98
|
+
i0.ɵɵdomListener("click", function A11ySrComponent_Conditional_9_For_5_Template_div_click_0_listener() { const a_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.activeIndex.set(a_r7.index - 1)); });
|
|
99
|
+
i0.ɵɵdomElementStart(1, "div", 20);
|
|
100
|
+
i0.ɵɵtext(2);
|
|
101
|
+
i0.ɵɵdomElementEnd();
|
|
102
|
+
i0.ɵɵdomElementStart(3, "div", 21)(4, "span", 22);
|
|
103
|
+
i0.ɵɵtext(5);
|
|
104
|
+
i0.ɵɵdomElementEnd();
|
|
105
|
+
i0.ɵɵdomElementStart(6, "span", 23);
|
|
106
|
+
i0.ɵɵtext(7);
|
|
107
|
+
i0.ɵɵdomElementEnd()()();
|
|
108
|
+
} if (rf & 2) {
|
|
109
|
+
const a_r7 = ctx.$implicit;
|
|
110
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
111
|
+
i0.ɵɵclassProp("prism-a11y-sr__item--active", a_r7.index === ctx_r1.activeIndex() + 1);
|
|
112
|
+
i0.ɵɵadvance(2);
|
|
113
|
+
i0.ɵɵtextInterpolate(a_r7.index);
|
|
114
|
+
i0.ɵɵadvance(3);
|
|
115
|
+
i0.ɵɵtextInterpolate(a_r7.text);
|
|
116
|
+
i0.ɵɵadvance(2);
|
|
117
|
+
i0.ɵɵtextInterpolate(a_r7.role);
|
|
118
|
+
} }
|
|
119
|
+
function A11ySrComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
i0.ɵɵdomElementStart(0, "div", 16)(1, "span");
|
|
121
|
+
i0.ɵɵtext(2);
|
|
122
|
+
i0.ɵɵdomElementEnd()();
|
|
123
|
+
i0.ɵɵdomElementStart(3, "div", 17);
|
|
124
|
+
i0.ɵɵrepeaterCreate(4, A11ySrComponent_Conditional_9_For_5_Template, 8, 5, "div", 18, _forTrack0);
|
|
125
|
+
i0.ɵɵdomElementEnd();
|
|
126
|
+
} if (rf & 2) {
|
|
127
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
128
|
+
i0.ɵɵadvance(2);
|
|
129
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.announcements().length, " Announcements");
|
|
130
|
+
i0.ɵɵadvance(2);
|
|
131
|
+
i0.ɵɵrepeater(ctx_r1.announcements());
|
|
132
|
+
} }
|
|
133
|
+
export class A11ySrComponent {
|
|
134
|
+
rendererService = inject(PrismRendererService);
|
|
135
|
+
srService = inject(A11ySrService);
|
|
136
|
+
perspective = inject(A11yPerspectiveService);
|
|
137
|
+
activeComponent = input(null, ...(ngDevMode ? [{ debugName: "activeComponent" }] : []));
|
|
138
|
+
activeIndex = signal(0, ...(ngDevMode ? [{ debugName: "activeIndex" }] : []));
|
|
139
|
+
announcements = computed(() => {
|
|
140
|
+
const root = this.rendererService.renderedElement();
|
|
141
|
+
if (!root)
|
|
142
|
+
return [];
|
|
143
|
+
const doc = root.ownerDocument;
|
|
144
|
+
return this.srService.buildAnnouncementList(root, doc ? (id) => doc.getElementById(id) : undefined);
|
|
145
|
+
}, ...(ngDevMode ? [{ debugName: "announcements" }] : []));
|
|
146
|
+
active = computed(() => {
|
|
147
|
+
const list = this.announcements();
|
|
148
|
+
const idx = this.activeIndex();
|
|
149
|
+
return list[idx] ?? null;
|
|
150
|
+
}, ...(ngDevMode ? [{ debugName: "active" }] : []));
|
|
151
|
+
activeStates = computed(() => this.active()?.states.filter((s) => !s.startsWith('level')) ?? [], ...(ngDevMode ? [{ debugName: "activeStates" }] : []));
|
|
152
|
+
next() {
|
|
153
|
+
this.activeIndex.update((i) => Math.min(i + 1, this.announcements().length - 1));
|
|
154
|
+
}
|
|
155
|
+
prev() {
|
|
156
|
+
this.activeIndex.update((i) => Math.max(i - 1, 0));
|
|
157
|
+
}
|
|
158
|
+
static ɵfac = function A11ySrComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || A11ySrComponent)(); };
|
|
159
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: A11ySrComponent, selectors: [["prism-a11y-sr"]], inputs: { activeComponent: [1, "activeComponent"] }, decls: 10, vars: 5, consts: [[1, "prism-a11y-sr"], [1, "prism-a11y-sr__perspective"], [1, "prism-a11y-sr__persp-btn", 3, "click"], [1, "prism-a11y-sr__persp-btn", "prism-a11y-sr__persp-btn--sr", 3, "click"], [1, "prism-a11y-sr__empty"], [1, "prism-a11y-sr__player"], [1, "prism-a11y-sr__player-card"], [1, "prism-a11y-sr__player-counter"], [1, "prism-a11y-sr__player-name"], [1, "prism-a11y-sr__player-role"], [1, "prism-a11y-sr__player-states"], [1, "prism-a11y-sr__nav-btns"], [1, "prism-a11y-sr__nav-btn", 3, "click", "disabled"], [1, "prism-a11y-sr__dots"], [1, "prism-a11y-sr__dot", 3, "prism-a11y-sr__dot--active"], [1, "prism-a11y-sr__dot", 3, "click"], [1, "prism-a11y-sr__header"], [1, "prism-a11y-sr__list"], [1, "prism-a11y-sr__item", 3, "prism-a11y-sr__item--active"], [1, "prism-a11y-sr__item", 3, "click"], [1, "prism-a11y-sr__idx"], [1, "prism-a11y-sr__text-wrap"], [1, "prism-a11y-sr__announcement"], [1, "prism-a11y-sr__role-label"]], template: function A11ySrComponent_Template(rf, ctx) { if (rf & 1) {
|
|
160
|
+
i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 1)(2, "button", 2);
|
|
161
|
+
i0.ɵɵdomListener("click", function A11ySrComponent_Template_button_click_2_listener() { return ctx.perspective.mode.set("visual"); });
|
|
162
|
+
i0.ɵɵtext(3, " \uD83D\uDC41 Visual ");
|
|
163
|
+
i0.ɵɵdomElementEnd();
|
|
164
|
+
i0.ɵɵdomElementStart(4, "button", 3);
|
|
165
|
+
i0.ɵɵdomListener("click", function A11ySrComponent_Template_button_click_4_listener() { return ctx.perspective.mode.set("screen-reader"); });
|
|
166
|
+
i0.ɵɵtext(5, " \uD83C\uDFA7 Screen Reader ");
|
|
167
|
+
i0.ɵɵdomElementEnd()();
|
|
168
|
+
i0.ɵɵconditionalCreate(6, A11ySrComponent_Conditional_6_Template, 2, 0, "div", 4)(7, A11ySrComponent_Conditional_7_Template, 2, 0, "div", 4)(8, A11ySrComponent_Conditional_8_Template, 17, 7, "div", 5)(9, A11ySrComponent_Conditional_9_Template, 6, 1);
|
|
169
|
+
i0.ɵɵdomElementEnd();
|
|
170
|
+
} if (rf & 2) {
|
|
171
|
+
i0.ɵɵadvance(2);
|
|
172
|
+
i0.ɵɵclassProp("prism-a11y-sr__persp-btn--active", ctx.perspective.mode() === "visual");
|
|
173
|
+
i0.ɵɵadvance(2);
|
|
174
|
+
i0.ɵɵclassProp("prism-a11y-sr__persp-btn--active", ctx.perspective.mode() === "screen-reader");
|
|
175
|
+
i0.ɵɵadvance(2);
|
|
176
|
+
i0.ɵɵconditional(!ctx.rendererService.renderedElement() ? 6 : !ctx.announcements().length ? 7 : ctx.perspective.mode() === "screen-reader" ? 8 : 9);
|
|
177
|
+
} }, styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; height: 100%; }\n\n .prism-a11y-sr[_ngcontent-%COMP%] { display: flex; flex-direction: column; height: 100%; }\n\n .prism-a11y-sr__perspective[_ngcontent-%COMP%] {\n display: flex;\n gap: 2px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--prism-border);\n flex-shrink: 0;\n }\n .prism-a11y-sr__persp-btn[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 12px;\n font-family: var(--prism-font-sans, system-ui, sans-serif);\n border: 1px solid var(--prism-border);\n background: none;\n color: var(--prism-text-muted);\n cursor: pointer;\n border-radius: 5px;\n transition: all 0.12s;\n }\n .prism-a11y-sr__persp-btn[_ngcontent-%COMP%]:hover { color: var(--prism-text-2); }\n .prism-a11y-sr__persp-btn--active[_ngcontent-%COMP%] {\n background: rgba(124, 159, 236, 0.1);\n border-color: rgba(124, 159, 236, 0.3);\n color: var(--prism-primary);\n }\n .prism-a11y-sr__persp-btn--sr.prism-a11y-sr__persp-btn--active[_ngcontent-%COMP%] {\n background: rgba(167, 139, 250, 0.1);\n border-color: rgba(167, 139, 250, 0.3);\n color: #a78bfa;\n }\n\n .prism-a11y-sr__empty[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: center;\n min-height: 100px; color: var(--prism-text-muted); font-size: 13px;\n }\n\n \n\n .prism-a11y-sr__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n border-bottom: 1px solid var(--prism-border);\n font-size: 12px;\n color: var(--prism-text-muted);\n flex-shrink: 0;\n }\n\n .prism-a11y-sr__hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #a78bfa;\n cursor: default;\n }\n\n .prism-a11y-sr__list[_ngcontent-%COMP%] { flex: 1; overflow: auto; }\n\n .prism-a11y-sr__item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 8px 16px;\n border-bottom: 1px solid var(--prism-border);\n cursor: pointer;\n transition: background 0.1s;\n }\n .prism-a11y-sr__item[_ngcontent-%COMP%]:hover { background: rgba(167, 139, 250, 0.04); }\n .prism-a11y-sr__item--active[_ngcontent-%COMP%] { background: rgba(167, 139, 250, 0.08); }\n\n .prism-a11y-sr__idx[_ngcontent-%COMP%] {\n width: 18px; height: 18px;\n background: #a78bfa;\n color: white;\n border-radius: 9px;\n font-size: 10px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0; margin-top: 2px;\n font-family: var(--prism-font-sans, system-ui, sans-serif);\n }\n .prism-a11y-sr__item--active[_ngcontent-%COMP%] .prism-a11y-sr__idx[_ngcontent-%COMP%] {\n box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.3);\n }\n\n .prism-a11y-sr__text-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1px;\n }\n .prism-a11y-sr__announcement[_ngcontent-%COMP%] {\n font-size: 12.5px;\n color: var(--prism-text);\n font-style: italic;\n line-height: 1.4;\n }\n .prism-a11y-sr__role-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: var(--prism-font-mono, monospace);\n color: var(--prism-text-muted);\n }\n\n \n\n .prism-a11y-sr__player[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n flex: 1;\n padding: 20px;\n }\n\n .prism-a11y-sr__player-card[_ngcontent-%COMP%] {\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-top: 2px solid #a78bfa;\n border-radius: 10px;\n padding: 20px 28px;\n text-align: center;\n min-width: 180px;\n }\n .prism-a11y-sr__player-counter[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--prism-text-muted);\n margin-bottom: 8px;\n font-family: var(--prism-font-mono, monospace);\n }\n .prism-a11y-sr__player-name[_ngcontent-%COMP%] {\n font-size: 17px;\n font-weight: 600;\n color: var(--prism-text);\n margin-bottom: 4px;\n min-height: 24px;\n }\n .prism-a11y-sr__player-role[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #a78bfa;\n }\n .prism-a11y-sr__player-states[_ngcontent-%COMP%] {\n display: flex;\n gap: 5px;\n justify-content: center;\n flex-wrap: wrap;\n margin-top: 6px;\n }\n .prism-a11y-sr__player-states[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 1px 6px;\n border-radius: 3px;\n font-size: 11px;\n font-weight: 600;\n background: color-mix(in srgb, #fbbf24 12%, transparent);\n color: #fbbf24;\n font-family: var(--prism-font-sans, system-ui, sans-serif);\n }\n\n .prism-a11y-sr__nav-btns[_ngcontent-%COMP%] { display: flex; gap: 8px; }\n .prism-a11y-sr__nav-btn[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n background: rgba(167, 139, 250, 0.1);\n border: 1px solid rgba(167, 139, 250, 0.2);\n border-radius: 6px;\n color: #a78bfa;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.1s;\n }\n .prism-a11y-sr__nav-btn[_ngcontent-%COMP%]:hover:not(:disabled) { background: rgba(167, 139, 250, 0.18); }\n .prism-a11y-sr__nav-btn[_ngcontent-%COMP%]:disabled { opacity: 0.3; cursor: default; }\n\n .prism-a11y-sr__dots[_ngcontent-%COMP%] {\n display: flex;\n gap: 5px;\n flex-wrap: wrap;\n justify-content: center;\n max-width: 200px;\n }\n .prism-a11y-sr__dot[_ngcontent-%COMP%] {\n width: 6px; height: 6px;\n border-radius: 50%;\n background: var(--prism-text-muted);\n cursor: pointer;\n transition: all 0.15s;\n }\n .prism-a11y-sr__dot--active[_ngcontent-%COMP%] {\n background: #a78bfa;\n width: 14px;\n border-radius: 3px;\n }"], changeDetection: 0 });
|
|
178
|
+
}
|
|
179
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11ySrComponent, [{
|
|
180
|
+
type: Component,
|
|
181
|
+
args: [{ selector: 'prism-a11y-sr', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
182
|
+
<div class="prism-a11y-sr">
|
|
183
|
+
<div class="prism-a11y-sr__perspective">
|
|
184
|
+
<button
|
|
185
|
+
class="prism-a11y-sr__persp-btn"
|
|
186
|
+
[class.prism-a11y-sr__persp-btn--active]="perspective.mode() === 'visual'"
|
|
187
|
+
(click)="perspective.mode.set('visual')"
|
|
188
|
+
>
|
|
189
|
+
👁 Visual
|
|
190
|
+
</button>
|
|
191
|
+
<button
|
|
192
|
+
class="prism-a11y-sr__persp-btn prism-a11y-sr__persp-btn--sr"
|
|
193
|
+
[class.prism-a11y-sr__persp-btn--active]="perspective.mode() === 'screen-reader'"
|
|
194
|
+
(click)="perspective.mode.set('screen-reader')"
|
|
195
|
+
>
|
|
196
|
+
🎧 Screen Reader
|
|
197
|
+
</button>
|
|
198
|
+
</div>
|
|
199
|
+
|
|
200
|
+
@if (!rendererService.renderedElement()) {
|
|
201
|
+
<div class="prism-a11y-sr__empty">Select a component to simulate screen reader output.</div>
|
|
202
|
+
} @else if (!announcements().length) {
|
|
203
|
+
<div class="prism-a11y-sr__empty">No announced elements found.</div>
|
|
204
|
+
} @else if (perspective.mode() === 'screen-reader') {
|
|
205
|
+
<div class="prism-a11y-sr__player">
|
|
206
|
+
<div class="prism-a11y-sr__player-card">
|
|
207
|
+
<div class="prism-a11y-sr__player-counter">
|
|
208
|
+
{{ activeIndex() + 1 }} / {{ announcements().length }}
|
|
209
|
+
</div>
|
|
210
|
+
<div class="prism-a11y-sr__player-name">
|
|
211
|
+
@if (active()?.name) { "{{ active()?.name }}" }
|
|
212
|
+
</div>
|
|
213
|
+
<div class="prism-a11y-sr__player-role">{{ active()?.role }}</div>
|
|
214
|
+
@if (activeStates().length) {
|
|
215
|
+
<div class="prism-a11y-sr__player-states">
|
|
216
|
+
@for (s of activeStates(); track s) { <span>{{ s }}</span> }
|
|
217
|
+
</div>
|
|
218
|
+
}
|
|
219
|
+
</div>
|
|
220
|
+
<div class="prism-a11y-sr__nav-btns">
|
|
221
|
+
<button class="prism-a11y-sr__nav-btn" (click)="prev()" [disabled]="activeIndex() === 0">◀</button>
|
|
222
|
+
<button class="prism-a11y-sr__nav-btn" (click)="next()" [disabled]="activeIndex() === announcements().length - 1">▶</button>
|
|
223
|
+
</div>
|
|
224
|
+
<div class="prism-a11y-sr__dots">
|
|
225
|
+
@for (a of announcements(); track a.index; let i = $index) {
|
|
226
|
+
<div
|
|
227
|
+
class="prism-a11y-sr__dot"
|
|
228
|
+
[class.prism-a11y-sr__dot--active]="i === activeIndex()"
|
|
229
|
+
(click)="activeIndex.set(i)"
|
|
230
|
+
></div>
|
|
231
|
+
}
|
|
232
|
+
</div>
|
|
233
|
+
</div>
|
|
234
|
+
} @else {
|
|
235
|
+
<div class="prism-a11y-sr__header">
|
|
236
|
+
<span>{{ announcements().length }} Announcements</span>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="prism-a11y-sr__list">
|
|
239
|
+
@for (a of announcements(); track a.index) {
|
|
240
|
+
<div
|
|
241
|
+
class="prism-a11y-sr__item"
|
|
242
|
+
[class.prism-a11y-sr__item--active]="a.index === activeIndex() + 1"
|
|
243
|
+
(click)="activeIndex.set(a.index - 1)"
|
|
244
|
+
>
|
|
245
|
+
<div class="prism-a11y-sr__idx">{{ a.index }}</div>
|
|
246
|
+
<div class="prism-a11y-sr__text-wrap">
|
|
247
|
+
<span class="prism-a11y-sr__announcement">{{ a.text }}</span>
|
|
248
|
+
<span class="prism-a11y-sr__role-label">{{ a.role }}</span>
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
}
|
|
252
|
+
</div>
|
|
253
|
+
}
|
|
254
|
+
</div>
|
|
255
|
+
`, styles: ["\n :host { display: flex; flex-direction: column; height: 100%; }\n\n .prism-a11y-sr { display: flex; flex-direction: column; height: 100%; }\n\n .prism-a11y-sr__perspective {\n display: flex;\n gap: 2px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--prism-border);\n flex-shrink: 0;\n }\n .prism-a11y-sr__persp-btn {\n padding: 4px 12px;\n font-size: 12px;\n font-family: var(--prism-font-sans, system-ui, sans-serif);\n border: 1px solid var(--prism-border);\n background: none;\n color: var(--prism-text-muted);\n cursor: pointer;\n border-radius: 5px;\n transition: all 0.12s;\n }\n .prism-a11y-sr__persp-btn:hover { color: var(--prism-text-2); }\n .prism-a11y-sr__persp-btn--active {\n background: rgba(124, 159, 236, 0.1);\n border-color: rgba(124, 159, 236, 0.3);\n color: var(--prism-primary);\n }\n .prism-a11y-sr__persp-btn--sr.prism-a11y-sr__persp-btn--active {\n background: rgba(167, 139, 250, 0.1);\n border-color: rgba(167, 139, 250, 0.3);\n color: #a78bfa;\n }\n\n .prism-a11y-sr__empty {\n display: flex; align-items: center; justify-content: center;\n min-height: 100px; color: var(--prism-text-muted); font-size: 13px;\n }\n\n /* \u2500\u2500 List mode \u2500\u2500 */\n .prism-a11y-sr__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n border-bottom: 1px solid var(--prism-border);\n font-size: 12px;\n color: var(--prism-text-muted);\n flex-shrink: 0;\n }\n\n .prism-a11y-sr__hint {\n font-size: 11px;\n color: #a78bfa;\n cursor: default;\n }\n\n .prism-a11y-sr__list { flex: 1; overflow: auto; }\n\n .prism-a11y-sr__item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 8px 16px;\n border-bottom: 1px solid var(--prism-border);\n cursor: pointer;\n transition: background 0.1s;\n }\n .prism-a11y-sr__item:hover { background: rgba(167, 139, 250, 0.04); }\n .prism-a11y-sr__item--active { background: rgba(167, 139, 250, 0.08); }\n\n .prism-a11y-sr__idx {\n width: 18px; height: 18px;\n background: #a78bfa;\n color: white;\n border-radius: 9px;\n font-size: 10px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0; margin-top: 2px;\n font-family: var(--prism-font-sans, system-ui, sans-serif);\n }\n .prism-a11y-sr__item--active .prism-a11y-sr__idx {\n box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.3);\n }\n\n .prism-a11y-sr__text-wrap {\n display: flex;\n flex-direction: column;\n gap: 1px;\n }\n .prism-a11y-sr__announcement {\n font-size: 12.5px;\n color: var(--prism-text);\n font-style: italic;\n line-height: 1.4;\n }\n .prism-a11y-sr__role-label {\n font-size: 11px;\n font-family: var(--prism-font-mono, monospace);\n color: var(--prism-text-muted);\n }\n\n /* \u2500\u2500 Player mode \u2500\u2500 */\n .prism-a11y-sr__player {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n flex: 1;\n padding: 20px;\n }\n\n .prism-a11y-sr__player-card {\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-top: 2px solid #a78bfa;\n border-radius: 10px;\n padding: 20px 28px;\n text-align: center;\n min-width: 180px;\n }\n .prism-a11y-sr__player-counter {\n font-size: 11px;\n color: var(--prism-text-muted);\n margin-bottom: 8px;\n font-family: var(--prism-font-mono, monospace);\n }\n .prism-a11y-sr__player-name {\n font-size: 17px;\n font-weight: 600;\n color: var(--prism-text);\n margin-bottom: 4px;\n min-height: 24px;\n }\n .prism-a11y-sr__player-role {\n font-size: 13px;\n color: #a78bfa;\n }\n .prism-a11y-sr__player-states {\n display: flex;\n gap: 5px;\n justify-content: center;\n flex-wrap: wrap;\n margin-top: 6px;\n }\n .prism-a11y-sr__player-states span {\n padding: 1px 6px;\n border-radius: 3px;\n font-size: 11px;\n font-weight: 600;\n background: color-mix(in srgb, #fbbf24 12%, transparent);\n color: #fbbf24;\n font-family: var(--prism-font-sans, system-ui, sans-serif);\n }\n\n .prism-a11y-sr__nav-btns { display: flex; gap: 8px; }\n .prism-a11y-sr__nav-btn {\n width: 36px; height: 36px;\n background: rgba(167, 139, 250, 0.1);\n border: 1px solid rgba(167, 139, 250, 0.2);\n border-radius: 6px;\n color: #a78bfa;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.1s;\n }\n .prism-a11y-sr__nav-btn:hover:not(:disabled) { background: rgba(167, 139, 250, 0.18); }\n .prism-a11y-sr__nav-btn:disabled { opacity: 0.3; cursor: default; }\n\n .prism-a11y-sr__dots {\n display: flex;\n gap: 5px;\n flex-wrap: wrap;\n justify-content: center;\n max-width: 200px;\n }\n .prism-a11y-sr__dot {\n width: 6px; height: 6px;\n border-radius: 50%;\n background: var(--prism-text-muted);\n cursor: pointer;\n transition: all 0.15s;\n }\n .prism-a11y-sr__dot--active {\n background: #a78bfa;\n width: 14px;\n border-radius: 3px;\n }\n "] }]
|
|
256
|
+
}], null, { activeComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeComponent", required: false }] }] }); })();
|
|
257
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(A11ySrComponent, { className: "A11ySrComponent", filePath: "app/panels/a11y/a11y-sr.component.ts", lineNumber: 288 }); })();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SrAnnouncement } from './a11y.types.js';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class A11ySrService {
|
|
4
|
+
buildAnnouncementList(root: Element, getById?: (id: string) => Element | null): SrAnnouncement[];
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<A11ySrService, never>;
|
|
6
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<A11ySrService>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=a11y-sr.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a11y-sr.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-sr.service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;;AAwCtD,qBACa,aAAa;IACxB,qBAAqB,CACnB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GACvC,cAAc,EAAE;yCAJR,aAAa;6CAAb,aAAa;CAYzB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { computeAccessibleName, extractStates, getRole, isHidden, statesToList, } from './a11y-dom-utils.js';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
const ROLE_LABELS = {
|
|
5
|
+
button: 'button',
|
|
6
|
+
link: 'link',
|
|
7
|
+
textbox: 'text field',
|
|
8
|
+
searchbox: 'search field',
|
|
9
|
+
checkbox: 'checkbox',
|
|
10
|
+
radio: 'radio button',
|
|
11
|
+
listbox: 'list box',
|
|
12
|
+
slider: 'slider',
|
|
13
|
+
spinbutton: 'spin button',
|
|
14
|
+
combobox: 'combo box',
|
|
15
|
+
heading: 'heading',
|
|
16
|
+
list: 'list',
|
|
17
|
+
listitem: 'list item',
|
|
18
|
+
navigation: 'navigation',
|
|
19
|
+
main: 'main',
|
|
20
|
+
banner: 'banner',
|
|
21
|
+
contentinfo: 'content info',
|
|
22
|
+
complementary: 'complementary',
|
|
23
|
+
form: 'form',
|
|
24
|
+
dialog: 'dialog',
|
|
25
|
+
table: 'table',
|
|
26
|
+
row: 'row',
|
|
27
|
+
columnheader: 'column header',
|
|
28
|
+
cell: 'cell',
|
|
29
|
+
img: 'image',
|
|
30
|
+
region: 'region',
|
|
31
|
+
article: 'article',
|
|
32
|
+
group: 'group',
|
|
33
|
+
};
|
|
34
|
+
const ANNOUNCED_ROLES = new Set(Object.keys(ROLE_LABELS));
|
|
35
|
+
const STRUCTURAL_TAGS = new Set([
|
|
36
|
+
'SCRIPT', 'STYLE', 'NOSCRIPT', 'META', 'LINK', 'TITLE', 'HEAD',
|
|
37
|
+
'DIV', 'SPAN',
|
|
38
|
+
]);
|
|
39
|
+
export class A11ySrService {
|
|
40
|
+
buildAnnouncementList(root, getById) {
|
|
41
|
+
const announcements = [];
|
|
42
|
+
walk(root, announcements, getById);
|
|
43
|
+
announcements.forEach((a, i) => {
|
|
44
|
+
a.index = i + 1;
|
|
45
|
+
});
|
|
46
|
+
return announcements;
|
|
47
|
+
}
|
|
48
|
+
static ɵfac = function A11ySrService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || A11ySrService)(); };
|
|
49
|
+
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: A11ySrService, factory: A11ySrService.ɵfac, providedIn: 'root' });
|
|
50
|
+
}
|
|
51
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11ySrService, [{
|
|
52
|
+
type: Injectable,
|
|
53
|
+
args: [{ providedIn: 'root' }]
|
|
54
|
+
}], null, null); })();
|
|
55
|
+
function walk(element, out, getById) {
|
|
56
|
+
if (isHidden(element))
|
|
57
|
+
return;
|
|
58
|
+
const tag = element.tagName?.toUpperCase() ?? '';
|
|
59
|
+
if (STRUCTURAL_TAGS.has(tag) && !element.getAttribute('role')) {
|
|
60
|
+
for (const child of Array.from(element.childNodes)) {
|
|
61
|
+
if (child.nodeType === 1)
|
|
62
|
+
walk(child, out, getById);
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const role = getRole(element);
|
|
67
|
+
if (ANNOUNCED_ROLES.has(role)) {
|
|
68
|
+
const { name } = computeAccessibleName(element, getById);
|
|
69
|
+
const states = extractStates(element);
|
|
70
|
+
const stateList = statesToList(states);
|
|
71
|
+
const roleLabel = ROLE_LABELS[role] ?? role;
|
|
72
|
+
let levelSuffix = '';
|
|
73
|
+
if (role === 'heading' && states['level']) {
|
|
74
|
+
levelSuffix = ` level ${states['level']}`;
|
|
75
|
+
}
|
|
76
|
+
const parts = [];
|
|
77
|
+
if (name)
|
|
78
|
+
parts.push(`"${name}"`);
|
|
79
|
+
parts.push(`${roleLabel}${levelSuffix}`);
|
|
80
|
+
parts.push(...stateList.filter((s) => s !== 'level'));
|
|
81
|
+
out.push({
|
|
82
|
+
index: 0,
|
|
83
|
+
text: parts.join(' '),
|
|
84
|
+
name,
|
|
85
|
+
role: roleLabel,
|
|
86
|
+
states: stateList,
|
|
87
|
+
element,
|
|
88
|
+
});
|
|
89
|
+
if (role === 'list') {
|
|
90
|
+
for (const child of Array.from(element.childNodes)) {
|
|
91
|
+
if (child.nodeType === 1)
|
|
92
|
+
walk(child, out, getById);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
for (const child of Array.from(element.childNodes)) {
|
|
98
|
+
if (child.nodeType === 1)
|
|
99
|
+
walk(child, out, getById);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PrismRendererService } from '../../services/prism-renderer.service.js';
|
|
2
|
+
import type { A11yNode } from './a11y.types.js';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class A11yTreeNodeComponent {
|
|
5
|
+
readonly node: import("@angular/core").InputSignal<A11yNode>;
|
|
6
|
+
readonly depth: import("@angular/core").InputSignal<number>;
|
|
7
|
+
protected readonly expanded: import("@angular/core").WritableSignal<boolean>;
|
|
8
|
+
protected readonly visibleChildren: import("@angular/core").Signal<A11yNode[]>;
|
|
9
|
+
protected readonly hiddenChildren: import("@angular/core").Signal<A11yNode[]>;
|
|
10
|
+
protected readonly stateEntries: import("@angular/core").Signal<{
|
|
11
|
+
key: string;
|
|
12
|
+
label: string;
|
|
13
|
+
}[]>;
|
|
14
|
+
protected toggleExpanded(): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<A11yTreeNodeComponent, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<A11yTreeNodeComponent, "prism-a11y-tree-node", never, { "node": { "alias": "node"; "required": true; "isSignal": true; }; "depth": { "alias": "depth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
17
|
+
}
|
|
18
|
+
export declare class A11yTreeComponent {
|
|
19
|
+
protected readonly rendererService: PrismRendererService;
|
|
20
|
+
private readonly treeService;
|
|
21
|
+
readonly activeComponent: import("@angular/core").InputSignal<unknown>;
|
|
22
|
+
protected readonly expandAll: import("@angular/core").WritableSignal<boolean>;
|
|
23
|
+
protected readonly tree: import("@angular/core").Signal<A11yNode | null>;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<A11yTreeComponent, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<A11yTreeComponent, "prism-a11y-tree", never, { "activeComponent": { "alias": "activeComponent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=a11y-tree.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a11y-tree.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-tree.component.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;;AAEhD,qBAmHa,qBAAqB;IAChC,QAAQ,CAAC,IAAI,gDAA8B;IAC3C,QAAQ,CAAC,KAAK,8CAAY;IAE1B,SAAS,CAAC,QAAQ,CAAC,QAAQ,kDAAgB;IAE3C,SAAS,CAAC,QAAQ,CAAC,eAAe,6CAEhC;IAEF,SAAS,CAAC,QAAQ,CAAC,cAAc,6CAE/B;IAEF,SAAS,CAAC,QAAQ,CAAC,YAAY;;;SAQ5B;IAEH,SAAS,CAAC,cAAc,IAAI,IAAI;yCAxBrB,qBAAqB;2CAArB,qBAAqB;CA6BjC;AAED,qBAuEa,iBAAiB;IAC5B,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IAEvD,QAAQ,CAAC,eAAe,+CAAwB;IAEhD,SAAS,CAAC,QAAQ,CAAC,SAAS,kDAAgB;IAE5C,SAAS,CAAC,QAAQ,CAAC,IAAI,kDAQpB;yCAhBQ,iBAAiB;2CAAjB,iBAAiB;CAiB7B"}
|