@a11y-hud/vue 0.3.0 → 0.5.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/dist/index.cjs CHANGED
@@ -84,7 +84,30 @@ function useA11yHud(options = {}) {
84
84
  function setRunOnly(tags) {
85
85
  instanceRef.value?.setRunOnly(tags);
86
86
  }
87
- return { runScan, setTheme, setRunOnly };
87
+ function exportResults() {
88
+ return instanceRef.value?.exportResults() ?? null;
89
+ }
90
+ const ignores = {
91
+ add(ruleId, selector) {
92
+ instanceRef.value?.ignores.add(ruleId, selector);
93
+ },
94
+ remove(ruleId, selector) {
95
+ instanceRef.value?.ignores.remove(ruleId, selector);
96
+ },
97
+ clear() {
98
+ instanceRef.value?.ignores.clear();
99
+ },
100
+ list() {
101
+ return instanceRef.value?.ignores.list() ?? [];
102
+ },
103
+ exportJson() {
104
+ return instanceRef.value?.ignores.exportJson() ?? "[]";
105
+ },
106
+ importJson(json) {
107
+ instanceRef.value?.ignores.importJson(json);
108
+ }
109
+ };
110
+ return { runScan, setTheme, setRunOnly, exportResults, ignores };
88
111
  }
89
112
 
90
113
  // src/component.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composable.ts","../src/component.ts"],"names":["shallowRef","onMounted","mount","onUnmounted","watch","defineComponent"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { A11yHudElement, A11yHudInstance, AxeResults, Theme } from \"a11y-hud\";\nimport { mount } from \"a11y-hud\";\nimport { onMounted, onUnmounted, shallowRef, watch } from \"vue\";\nimport type { UseA11yHudOptions, UseA11yHudReturn } from \"./types.js\";\n\nexport function useA11yHud(options: UseA11yHudOptions = {}): UseA11yHudReturn {\n const instanceRef = shallowRef<A11yHudInstance | null>(null);\n const elementRef = shallowRef<A11yHudElement | null>(null);\n\n onMounted(() => {\n const { theme, autoScan, debounce, runOnly } = options;\n const instance = mount({\n ...(theme !== undefined && { theme }),\n ...(autoScan !== undefined && { autoScan }),\n ...(debounce !== undefined && { debounce }),\n ...(runOnly !== undefined && { runOnly }),\n });\n instanceRef.value = instance;\n elementRef.value = document.querySelector<A11yHudElement>(\"a11y-hud\");\n const el = elementRef.value;\n if (el) {\n el.scopeElement = options.scope ?? undefined;\n }\n void instance.runScan();\n });\n\n onUnmounted(() => {\n instanceRef.value?.unmount();\n instanceRef.value = null;\n elementRef.value = null;\n });\n\n // Render-settled signal: fires after the scope prop changes, syncing the CE's\n // scopeElement and triggering a rescan. Route changes and general DOM mutations\n // are handled by the core's MutationObserver; this watch covers the prop-change\n // path (e.g. enabling/disabling scope, passing a different ref).\n watch(\n () => options.scope,\n () => {\n const instance = instanceRef.value;\n const el = elementRef.value;\n if (!instance || !el) return;\n el.scopeElement = options.scope ?? undefined;\n void instance.runScan();\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.theme,\n (newTheme) => {\n if (newTheme !== undefined) instanceRef.value?.setTheme(newTheme);\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.autoScan,\n (newAutoScan) => {\n const el = elementRef.value;\n if (!el) return;\n if (newAutoScan === false) {\n el.removeAttribute(\"auto-scan\");\n } else {\n el.setAttribute(\"auto-scan\", \"\");\n }\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.debounce,\n (newDebounce) => {\n const el = elementRef.value;\n if (!el || newDebounce === undefined) return;\n el.setAttribute(\"debounce\", String(newDebounce));\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.runOnly,\n (newRunOnly) => {\n if (newRunOnly !== undefined) instanceRef.value?.setRunOnly(newRunOnly);\n },\n { flush: \"post\" }\n );\n\n function runScan(): Promise<AxeResults> {\n return instanceRef.value?.runScan() ?? Promise.resolve(null as unknown as AxeResults);\n }\n\n function setTheme(theme: Theme): void {\n instanceRef.value?.setTheme(theme);\n }\n\n function setRunOnly(tags: string[]): void {\n instanceRef.value?.setRunOnly(tags);\n }\n\n return { runScan, setTheme, setRunOnly };\n}\n","import type { Theme } from \"a11y-hud\";\nimport type { PropType } from \"vue\";\nimport { defineComponent } from \"vue\";\nimport { useA11yHud } from \"./composable.js\";\nimport type { A11yHudProps } from \"./types.js\";\n\nexport const A11yHud = defineComponent({\n name: \"A11yHud\",\n props: {\n theme: {\n type: String as PropType<Theme>,\n default: undefined,\n },\n scope: {\n type: Object as PropType<Element | null>,\n default: undefined,\n },\n autoScan: {\n type: Boolean as PropType<boolean>,\n default: undefined,\n },\n debounce: {\n type: Number as PropType<number>,\n default: undefined,\n },\n },\n setup(props) {\n useA11yHud(props as A11yHudProps);\n return () => null;\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/composable.ts","../src/component.ts"],"names":["shallowRef","onMounted","mount","onUnmounted","watch","defineComponent"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { A11yHudElement, A11yHudInstance, AxeResults, Theme } from \"a11y-hud\";\nimport { mount } from \"a11y-hud\";\nimport { onMounted, onUnmounted, shallowRef, watch } from \"vue\";\nimport type { UseA11yHudOptions, UseA11yHudReturn } from \"./types.js\";\n\nexport function useA11yHud(options: UseA11yHudOptions = {}): UseA11yHudReturn {\n const instanceRef = shallowRef<A11yHudInstance | null>(null);\n const elementRef = shallowRef<A11yHudElement | null>(null);\n\n onMounted(() => {\n const { theme, autoScan, debounce, runOnly } = options;\n const instance = mount({\n ...(theme !== undefined && { theme }),\n ...(autoScan !== undefined && { autoScan }),\n ...(debounce !== undefined && { debounce }),\n ...(runOnly !== undefined && { runOnly }),\n });\n instanceRef.value = instance;\n elementRef.value = document.querySelector<A11yHudElement>(\"a11y-hud\");\n const el = elementRef.value;\n if (el) {\n el.scopeElement = options.scope ?? undefined;\n }\n void instance.runScan();\n });\n\n onUnmounted(() => {\n instanceRef.value?.unmount();\n instanceRef.value = null;\n elementRef.value = null;\n });\n\n // Render-settled signal: fires after the scope prop changes, syncing the CE's\n // scopeElement and triggering a rescan. Route changes and general DOM mutations\n // are handled by the core's MutationObserver; this watch covers the prop-change\n // path (e.g. enabling/disabling scope, passing a different ref).\n watch(\n () => options.scope,\n () => {\n const instance = instanceRef.value;\n const el = elementRef.value;\n if (!instance || !el) return;\n el.scopeElement = options.scope ?? undefined;\n void instance.runScan();\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.theme,\n (newTheme) => {\n if (newTheme !== undefined) instanceRef.value?.setTheme(newTheme);\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.autoScan,\n (newAutoScan) => {\n const el = elementRef.value;\n if (!el) return;\n if (newAutoScan === false) {\n el.removeAttribute(\"auto-scan\");\n } else {\n el.setAttribute(\"auto-scan\", \"\");\n }\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.debounce,\n (newDebounce) => {\n const el = elementRef.value;\n if (!el || newDebounce === undefined) return;\n el.setAttribute(\"debounce\", String(newDebounce));\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.runOnly,\n (newRunOnly) => {\n if (newRunOnly !== undefined) instanceRef.value?.setRunOnly(newRunOnly);\n },\n { flush: \"post\" }\n );\n\n function runScan(): Promise<AxeResults> {\n return instanceRef.value?.runScan() ?? Promise.resolve(null as unknown as AxeResults);\n }\n\n function setTheme(theme: Theme): void {\n instanceRef.value?.setTheme(theme);\n }\n\n function setRunOnly(tags: string[]): void {\n instanceRef.value?.setRunOnly(tags);\n }\n\n function exportResults(): string | null {\n return instanceRef.value?.exportResults() ?? null;\n }\n\n const ignores = {\n add(ruleId: string, selector?: string): void {\n instanceRef.value?.ignores.add(ruleId, selector);\n },\n remove(ruleId: string, selector?: string): void {\n instanceRef.value?.ignores.remove(ruleId, selector);\n },\n clear(): void {\n instanceRef.value?.ignores.clear();\n },\n list() {\n return instanceRef.value?.ignores.list() ?? [];\n },\n exportJson(): string {\n return instanceRef.value?.ignores.exportJson() ?? \"[]\";\n },\n importJson(json: string): void {\n instanceRef.value?.ignores.importJson(json);\n },\n };\n\n return { runScan, setTheme, setRunOnly, exportResults, ignores };\n}\n","import type { Theme } from \"a11y-hud\";\nimport type { PropType } from \"vue\";\nimport { defineComponent } from \"vue\";\nimport { useA11yHud } from \"./composable.js\";\nimport type { A11yHudProps } from \"./types.js\";\n\nexport const A11yHud = defineComponent({\n name: \"A11yHud\",\n props: {\n theme: {\n type: String as PropType<Theme>,\n default: undefined,\n },\n scope: {\n type: Object as PropType<Element | null>,\n default: undefined,\n },\n autoScan: {\n type: Boolean as PropType<boolean>,\n default: undefined,\n },\n debounce: {\n type: Number as PropType<number>,\n default: undefined,\n },\n },\n setup(props) {\n useA11yHud(props as A11yHudProps);\n return () => null;\n },\n});\n"]}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as vue from 'vue';
2
2
  import { PropType } from 'vue';
3
- import { Theme, AxeResults } from 'a11y-hud';
3
+ import { Theme, AxeResults, IgnoreEntry } from 'a11y-hud';
4
4
 
5
5
  declare const A11yHud: vue.DefineComponent<vue.ExtractPropTypes<{
6
6
  theme: {
@@ -55,6 +55,15 @@ interface UseA11yHudReturn {
55
55
  runScan(): Promise<AxeResults>;
56
56
  setTheme(theme: Theme): void;
57
57
  setRunOnly(tags: string[]): void;
58
+ exportResults(): string | null;
59
+ ignores: {
60
+ add(ruleId: string, selector?: string): void;
61
+ remove(ruleId: string, selector?: string): void;
62
+ clear(): void;
63
+ list(): IgnoreEntry[];
64
+ exportJson(): string;
65
+ importJson(json: string): void;
66
+ };
58
67
  }
59
68
 
60
69
  declare function useA11yHud(options?: UseA11yHudOptions): UseA11yHudReturn;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as vue from 'vue';
2
2
  import { PropType } from 'vue';
3
- import { Theme, AxeResults } from 'a11y-hud';
3
+ import { Theme, AxeResults, IgnoreEntry } from 'a11y-hud';
4
4
 
5
5
  declare const A11yHud: vue.DefineComponent<vue.ExtractPropTypes<{
6
6
  theme: {
@@ -55,6 +55,15 @@ interface UseA11yHudReturn {
55
55
  runScan(): Promise<AxeResults>;
56
56
  setTheme(theme: Theme): void;
57
57
  setRunOnly(tags: string[]): void;
58
+ exportResults(): string | null;
59
+ ignores: {
60
+ add(ruleId: string, selector?: string): void;
61
+ remove(ruleId: string, selector?: string): void;
62
+ clear(): void;
63
+ list(): IgnoreEntry[];
64
+ exportJson(): string;
65
+ importJson(json: string): void;
66
+ };
58
67
  }
59
68
 
60
69
  declare function useA11yHud(options?: UseA11yHudOptions): UseA11yHudReturn;
package/dist/index.js CHANGED
@@ -82,7 +82,30 @@ function useA11yHud(options = {}) {
82
82
  function setRunOnly(tags) {
83
83
  instanceRef.value?.setRunOnly(tags);
84
84
  }
85
- return { runScan, setTheme, setRunOnly };
85
+ function exportResults() {
86
+ return instanceRef.value?.exportResults() ?? null;
87
+ }
88
+ const ignores = {
89
+ add(ruleId, selector) {
90
+ instanceRef.value?.ignores.add(ruleId, selector);
91
+ },
92
+ remove(ruleId, selector) {
93
+ instanceRef.value?.ignores.remove(ruleId, selector);
94
+ },
95
+ clear() {
96
+ instanceRef.value?.ignores.clear();
97
+ },
98
+ list() {
99
+ return instanceRef.value?.ignores.list() ?? [];
100
+ },
101
+ exportJson() {
102
+ return instanceRef.value?.ignores.exportJson() ?? "[]";
103
+ },
104
+ importJson(json) {
105
+ instanceRef.value?.ignores.importJson(json);
106
+ }
107
+ };
108
+ return { runScan, setTheme, setRunOnly, exportResults, ignores };
86
109
  }
87
110
 
88
111
  // src/component.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composable.ts","../src/component.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { A11yHudElement, A11yHudInstance, AxeResults, Theme } from \"a11y-hud\";\nimport { mount } from \"a11y-hud\";\nimport { onMounted, onUnmounted, shallowRef, watch } from \"vue\";\nimport type { UseA11yHudOptions, UseA11yHudReturn } from \"./types.js\";\n\nexport function useA11yHud(options: UseA11yHudOptions = {}): UseA11yHudReturn {\n const instanceRef = shallowRef<A11yHudInstance | null>(null);\n const elementRef = shallowRef<A11yHudElement | null>(null);\n\n onMounted(() => {\n const { theme, autoScan, debounce, runOnly } = options;\n const instance = mount({\n ...(theme !== undefined && { theme }),\n ...(autoScan !== undefined && { autoScan }),\n ...(debounce !== undefined && { debounce }),\n ...(runOnly !== undefined && { runOnly }),\n });\n instanceRef.value = instance;\n elementRef.value = document.querySelector<A11yHudElement>(\"a11y-hud\");\n const el = elementRef.value;\n if (el) {\n el.scopeElement = options.scope ?? undefined;\n }\n void instance.runScan();\n });\n\n onUnmounted(() => {\n instanceRef.value?.unmount();\n instanceRef.value = null;\n elementRef.value = null;\n });\n\n // Render-settled signal: fires after the scope prop changes, syncing the CE's\n // scopeElement and triggering a rescan. Route changes and general DOM mutations\n // are handled by the core's MutationObserver; this watch covers the prop-change\n // path (e.g. enabling/disabling scope, passing a different ref).\n watch(\n () => options.scope,\n () => {\n const instance = instanceRef.value;\n const el = elementRef.value;\n if (!instance || !el) return;\n el.scopeElement = options.scope ?? undefined;\n void instance.runScan();\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.theme,\n (newTheme) => {\n if (newTheme !== undefined) instanceRef.value?.setTheme(newTheme);\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.autoScan,\n (newAutoScan) => {\n const el = elementRef.value;\n if (!el) return;\n if (newAutoScan === false) {\n el.removeAttribute(\"auto-scan\");\n } else {\n el.setAttribute(\"auto-scan\", \"\");\n }\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.debounce,\n (newDebounce) => {\n const el = elementRef.value;\n if (!el || newDebounce === undefined) return;\n el.setAttribute(\"debounce\", String(newDebounce));\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.runOnly,\n (newRunOnly) => {\n if (newRunOnly !== undefined) instanceRef.value?.setRunOnly(newRunOnly);\n },\n { flush: \"post\" }\n );\n\n function runScan(): Promise<AxeResults> {\n return instanceRef.value?.runScan() ?? Promise.resolve(null as unknown as AxeResults);\n }\n\n function setTheme(theme: Theme): void {\n instanceRef.value?.setTheme(theme);\n }\n\n function setRunOnly(tags: string[]): void {\n instanceRef.value?.setRunOnly(tags);\n }\n\n return { runScan, setTheme, setRunOnly };\n}\n","import type { Theme } from \"a11y-hud\";\nimport type { PropType } from \"vue\";\nimport { defineComponent } from \"vue\";\nimport { useA11yHud } from \"./composable.js\";\nimport type { A11yHudProps } from \"./types.js\";\n\nexport const A11yHud = defineComponent({\n name: \"A11yHud\",\n props: {\n theme: {\n type: String as PropType<Theme>,\n default: undefined,\n },\n scope: {\n type: Object as PropType<Element | null>,\n default: undefined,\n },\n autoScan: {\n type: Boolean as PropType<boolean>,\n default: undefined,\n },\n debounce: {\n type: Number as PropType<number>,\n default: undefined,\n },\n },\n setup(props) {\n useA11yHud(props as A11yHudProps);\n return () => null;\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/composable.ts","../src/component.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { A11yHudElement, A11yHudInstance, AxeResults, Theme } from \"a11y-hud\";\nimport { mount } from \"a11y-hud\";\nimport { onMounted, onUnmounted, shallowRef, watch } from \"vue\";\nimport type { UseA11yHudOptions, UseA11yHudReturn } from \"./types.js\";\n\nexport function useA11yHud(options: UseA11yHudOptions = {}): UseA11yHudReturn {\n const instanceRef = shallowRef<A11yHudInstance | null>(null);\n const elementRef = shallowRef<A11yHudElement | null>(null);\n\n onMounted(() => {\n const { theme, autoScan, debounce, runOnly } = options;\n const instance = mount({\n ...(theme !== undefined && { theme }),\n ...(autoScan !== undefined && { autoScan }),\n ...(debounce !== undefined && { debounce }),\n ...(runOnly !== undefined && { runOnly }),\n });\n instanceRef.value = instance;\n elementRef.value = document.querySelector<A11yHudElement>(\"a11y-hud\");\n const el = elementRef.value;\n if (el) {\n el.scopeElement = options.scope ?? undefined;\n }\n void instance.runScan();\n });\n\n onUnmounted(() => {\n instanceRef.value?.unmount();\n instanceRef.value = null;\n elementRef.value = null;\n });\n\n // Render-settled signal: fires after the scope prop changes, syncing the CE's\n // scopeElement and triggering a rescan. Route changes and general DOM mutations\n // are handled by the core's MutationObserver; this watch covers the prop-change\n // path (e.g. enabling/disabling scope, passing a different ref).\n watch(\n () => options.scope,\n () => {\n const instance = instanceRef.value;\n const el = elementRef.value;\n if (!instance || !el) return;\n el.scopeElement = options.scope ?? undefined;\n void instance.runScan();\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.theme,\n (newTheme) => {\n if (newTheme !== undefined) instanceRef.value?.setTheme(newTheme);\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.autoScan,\n (newAutoScan) => {\n const el = elementRef.value;\n if (!el) return;\n if (newAutoScan === false) {\n el.removeAttribute(\"auto-scan\");\n } else {\n el.setAttribute(\"auto-scan\", \"\");\n }\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.debounce,\n (newDebounce) => {\n const el = elementRef.value;\n if (!el || newDebounce === undefined) return;\n el.setAttribute(\"debounce\", String(newDebounce));\n },\n { flush: \"post\" }\n );\n\n watch(\n () => options.runOnly,\n (newRunOnly) => {\n if (newRunOnly !== undefined) instanceRef.value?.setRunOnly(newRunOnly);\n },\n { flush: \"post\" }\n );\n\n function runScan(): Promise<AxeResults> {\n return instanceRef.value?.runScan() ?? Promise.resolve(null as unknown as AxeResults);\n }\n\n function setTheme(theme: Theme): void {\n instanceRef.value?.setTheme(theme);\n }\n\n function setRunOnly(tags: string[]): void {\n instanceRef.value?.setRunOnly(tags);\n }\n\n function exportResults(): string | null {\n return instanceRef.value?.exportResults() ?? null;\n }\n\n const ignores = {\n add(ruleId: string, selector?: string): void {\n instanceRef.value?.ignores.add(ruleId, selector);\n },\n remove(ruleId: string, selector?: string): void {\n instanceRef.value?.ignores.remove(ruleId, selector);\n },\n clear(): void {\n instanceRef.value?.ignores.clear();\n },\n list() {\n return instanceRef.value?.ignores.list() ?? [];\n },\n exportJson(): string {\n return instanceRef.value?.ignores.exportJson() ?? \"[]\";\n },\n importJson(json: string): void {\n instanceRef.value?.ignores.importJson(json);\n },\n };\n\n return { runScan, setTheme, setRunOnly, exportResults, ignores };\n}\n","import type { Theme } from \"a11y-hud\";\nimport type { PropType } from \"vue\";\nimport { defineComponent } from \"vue\";\nimport { useA11yHud } from \"./composable.js\";\nimport type { A11yHudProps } from \"./types.js\";\n\nexport const A11yHud = defineComponent({\n name: \"A11yHud\",\n props: {\n theme: {\n type: String as PropType<Theme>,\n default: undefined,\n },\n scope: {\n type: Object as PropType<Element | null>,\n default: undefined,\n },\n autoScan: {\n type: Boolean as PropType<boolean>,\n default: undefined,\n },\n debounce: {\n type: Number as PropType<number>,\n default: undefined,\n },\n },\n setup(props) {\n useA11yHud(props as A11yHudProps);\n return () => null;\n },\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a11y-hud/vue",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Vue adapter for a11y-hud — run axe-core accessibility audits in your Vue app with no DevTools required.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -19,7 +19,7 @@
19
19
  "README.md"
20
20
  ],
21
21
  "dependencies": {
22
- "a11y-hud": "0.2.0"
22
+ "a11y-hud": "0.4.0"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "vue": ">=3.4"