@nac3/forge-cli 0.2.0-alpha.1
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/LICENSE +45 -0
- package/README.md +371 -0
- package/dist/bin/yf.d.ts +5 -0
- package/dist/bin/yf.d.ts.map +1 -0
- package/dist/bin/yf.js +86 -0
- package/dist/bin/yf.js.map +1 -0
- package/dist/chat/claude.d.ts +100 -0
- package/dist/chat/claude.d.ts.map +1 -0
- package/dist/chat/claude.js +228 -0
- package/dist/chat/claude.js.map +1 -0
- package/dist/chat/ingest_session.d.ts +97 -0
- package/dist/chat/ingest_session.d.ts.map +1 -0
- package/dist/chat/ingest_session.js +99 -0
- package/dist/chat/ingest_session.js.map +1 -0
- package/dist/chat/panel.d.ts +15 -0
- package/dist/chat/panel.d.ts.map +1 -0
- package/dist/chat/panel.js +1526 -0
- package/dist/chat/panel.js.map +1 -0
- package/dist/chat/persistence.d.ts +37 -0
- package/dist/chat/persistence.d.ts.map +1 -0
- package/dist/chat/persistence.js +91 -0
- package/dist/chat/persistence.js.map +1 -0
- package/dist/chat/server.d.ts +34 -0
- package/dist/chat/server.d.ts.map +1 -0
- package/dist/chat/server.js +1540 -0
- package/dist/chat/server.js.map +1 -0
- package/dist/chat/spec_extract.d.ts +35 -0
- package/dist/chat/spec_extract.d.ts.map +1 -0
- package/dist/chat/spec_extract.js +152 -0
- package/dist/chat/spec_extract.js.map +1 -0
- package/dist/chat/spec_plan.d.ts +65 -0
- package/dist/chat/spec_plan.d.ts.map +1 -0
- package/dist/chat/spec_plan.js +160 -0
- package/dist/chat/spec_plan.js.map +1 -0
- package/dist/chat/spec_scaffold.d.ts +95 -0
- package/dist/chat/spec_scaffold.d.ts.map +1 -0
- package/dist/chat/spec_scaffold.js +220 -0
- package/dist/chat/spec_scaffold.js.map +1 -0
- package/dist/chat/tools/git.d.ts +59 -0
- package/dist/chat/tools/git.d.ts.map +1 -0
- package/dist/chat/tools/git.js +313 -0
- package/dist/chat/tools/git.js.map +1 -0
- package/dist/chat/tools/github.d.ts +59 -0
- package/dist/chat/tools/github.d.ts.map +1 -0
- package/dist/chat/tools/github.js +310 -0
- package/dist/chat/tools/github.js.map +1 -0
- package/dist/chat/tools/lifecycle.d.ts +82 -0
- package/dist/chat/tools/lifecycle.d.ts.map +1 -0
- package/dist/chat/tools/lifecycle.js +295 -0
- package/dist/chat/tools/lifecycle.js.map +1 -0
- package/dist/chat/tools/manual.d.ts +26 -0
- package/dist/chat/tools/manual.d.ts.map +1 -0
- package/dist/chat/tools/manual.js +164 -0
- package/dist/chat/tools/manual.js.map +1 -0
- package/dist/chat/tools/reader.d.ts +80 -0
- package/dist/chat/tools/reader.d.ts.map +1 -0
- package/dist/chat/tools/reader.js +471 -0
- package/dist/chat/tools/reader.js.map +1 -0
- package/dist/chat/tools.d.ts +106 -0
- package/dist/chat/tools.d.ts.map +1 -0
- package/dist/chat/tools.js +587 -0
- package/dist/chat/tools.js.map +1 -0
- package/dist/codegen/e2e.d.ts +106 -0
- package/dist/codegen/e2e.d.ts.map +1 -0
- package/dist/codegen/e2e.js +931 -0
- package/dist/codegen/e2e.js.map +1 -0
- package/dist/codegen/v3_flow_emit.d.ts +70 -0
- package/dist/codegen/v3_flow_emit.d.ts.map +1 -0
- package/dist/codegen/v3_flow_emit.js +225 -0
- package/dist/codegen/v3_flow_emit.js.map +1 -0
- package/dist/commands/_stub.d.ts +2 -0
- package/dist/commands/_stub.d.ts.map +1 -0
- package/dist/commands/_stub.js +21 -0
- package/dist/commands/_stub.js.map +1 -0
- package/dist/commands/app.d.ts +31 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +331 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/chat.d.ts +18 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +76 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/deploy.d.ts +21 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +121 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/doctor.d.ts +14 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +280 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/figma.d.ts +32 -0
- package/dist/commands/figma.d.ts.map +1 -0
- package/dist/commands/figma.js +141 -0
- package/dist/commands/figma.js.map +1 -0
- package/dist/commands/gen-flow-tests.d.ts +8 -0
- package/dist/commands/gen-flow-tests.d.ts.map +1 -0
- package/dist/commands/gen-flow-tests.js +78 -0
- package/dist/commands/gen-flow-tests.js.map +1 -0
- package/dist/commands/gen-tests.d.ts +9 -0
- package/dist/commands/gen-tests.d.ts.map +1 -0
- package/dist/commands/gen-tests.js +118 -0
- package/dist/commands/gen-tests.js.map +1 -0
- package/dist/commands/license.d.ts +14 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +182 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/commands/log.d.ts +19 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +101 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/migrate.d.ts +118 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +1410 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/mobile.d.ts +27 -0
- package/dist/commands/mobile.d.ts.map +1 -0
- package/dist/commands/mobile.js +90 -0
- package/dist/commands/mobile.js.map +1 -0
- package/dist/commands/new.d.ts +32 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +107 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pilot.d.ts +8 -0
- package/dist/commands/pilot.d.ts.map +1 -0
- package/dist/commands/pilot.js +104 -0
- package/dist/commands/pilot.js.map +1 -0
- package/dist/commands/projects.d.ts +21 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +238 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/publish.d.ts +35 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +194 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/repo.d.ts +59 -0
- package/dist/commands/repo.d.ts.map +1 -0
- package/dist/commands/repo.js +178 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/commands/review-screens.d.ts +28 -0
- package/dist/commands/review-screens.d.ts.map +1 -0
- package/dist/commands/review-screens.js +345 -0
- package/dist/commands/review-screens.js.map +1 -0
- package/dist/commands/scenarios.d.ts +23 -0
- package/dist/commands/scenarios.d.ts.map +1 -0
- package/dist/commands/scenarios.js +304 -0
- package/dist/commands/scenarios.js.map +1 -0
- package/dist/commands/ship.d.ts +18 -0
- package/dist/commands/ship.d.ts.map +1 -0
- package/dist/commands/ship.js +41 -0
- package/dist/commands/ship.js.map +1 -0
- package/dist/commands/test.d.ts +29 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +62 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/tunnel.d.ts +22 -0
- package/dist/commands/tunnel.d.ts.map +1 -0
- package/dist/commands/tunnel.js +77 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/commands/validate.d.ts +14 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +51 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/vault.d.ts +32 -0
- package/dist/commands/vault.d.ts.map +1 -0
- package/dist/commands/vault.js +489 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/commands/voice.d.ts +16 -0
- package/dist/commands/voice.d.ts.map +1 -0
- package/dist/commands/voice.js +69 -0
- package/dist/commands/voice.js.map +1 -0
- package/dist/core/cascade_router.d.ts +90 -0
- package/dist/core/cascade_router.d.ts.map +1 -0
- package/dist/core/cascade_router.js +131 -0
- package/dist/core/cascade_router.js.map +1 -0
- package/dist/core/cf_tunnel.d.ts +52 -0
- package/dist/core/cf_tunnel.d.ts.map +1 -0
- package/dist/core/cf_tunnel.js +134 -0
- package/dist/core/cf_tunnel.js.map +1 -0
- package/dist/core/gha_dispatcher.d.ts +48 -0
- package/dist/core/gha_dispatcher.d.ts.map +1 -0
- package/dist/core/gha_dispatcher.js +198 -0
- package/dist/core/gha_dispatcher.js.map +1 -0
- package/dist/core/logger.d.ts +89 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +245 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/mode.d.ts +26 -0
- package/dist/core/mode.d.ts.map +1 -0
- package/dist/core/mode.js +122 -0
- package/dist/core/mode.js.map +1 -0
- package/dist/core/pairing.d.ts +40 -0
- package/dist/core/pairing.d.ts.map +1 -0
- package/dist/core/pairing.js +145 -0
- package/dist/core/pairing.js.map +1 -0
- package/dist/core/pilot_setup.d.ts +29 -0
- package/dist/core/pilot_setup.d.ts.map +1 -0
- package/dist/core/pilot_setup.js +119 -0
- package/dist/core/pilot_setup.js.map +1 -0
- package/dist/core/polar.d.ts +81 -0
- package/dist/core/polar.d.ts.map +1 -0
- package/dist/core/polar.js +175 -0
- package/dist/core/polar.js.map +1 -0
- package/dist/core/project_picker.d.ts +56 -0
- package/dist/core/project_picker.d.ts.map +1 -0
- package/dist/core/project_picker.js +86 -0
- package/dist/core/project_picker.js.map +1 -0
- package/dist/core/projects.d.ts +58 -0
- package/dist/core/projects.d.ts.map +1 -0
- package/dist/core/projects.js +146 -0
- package/dist/core/projects.js.map +1 -0
- package/dist/core/projects_sync.d.ts +80 -0
- package/dist/core/projects_sync.d.ts.map +1 -0
- package/dist/core/projects_sync.js +278 -0
- package/dist/core/projects_sync.js.map +1 -0
- package/dist/core/remote_runner.d.ts +70 -0
- package/dist/core/remote_runner.d.ts.map +1 -0
- package/dist/core/remote_runner.js +133 -0
- package/dist/core/remote_runner.js.map +1 -0
- package/dist/core/repo_state.d.ts +24 -0
- package/dist/core/repo_state.d.ts.map +1 -0
- package/dist/core/repo_state.js +109 -0
- package/dist/core/repo_state.js.map +1 -0
- package/dist/core/target.d.ts +31 -0
- package/dist/core/target.d.ts.map +1 -0
- package/dist/core/target.js +121 -0
- package/dist/core/target.js.map +1 -0
- package/dist/deploy/aws.d.ts +43 -0
- package/dist/deploy/aws.d.ts.map +1 -0
- package/dist/deploy/aws.js +173 -0
- package/dist/deploy/aws.js.map +1 -0
- package/dist/figma/api.d.ts +35 -0
- package/dist/figma/api.d.ts.map +1 -0
- package/dist/figma/api.js +40 -0
- package/dist/figma/api.js.map +1 -0
- package/dist/figma/decorator.d.ts +74 -0
- package/dist/figma/decorator.d.ts.map +1 -0
- package/dist/figma/decorator.js +210 -0
- package/dist/figma/decorator.js.map +1 -0
- package/dist/figma/heuristics.d.ts +29 -0
- package/dist/figma/heuristics.d.ts.map +1 -0
- package/dist/figma/heuristics.js +110 -0
- package/dist/figma/heuristics.js.map +1 -0
- package/dist/figma/normalize.d.ts +33 -0
- package/dist/figma/normalize.d.ts.map +1 -0
- package/dist/figma/normalize.js +101 -0
- package/dist/figma/normalize.js.map +1 -0
- package/dist/figma/tokens.d.ts +23 -0
- package/dist/figma/tokens.d.ts.map +1 -0
- package/dist/figma/tokens.js +111 -0
- package/dist/figma/tokens.js.map +1 -0
- package/dist/figma/types.d.ts +118 -0
- package/dist/figma/types.d.ts.map +1 -0
- package/dist/figma/types.js +12 -0
- package/dist/figma/types.js.map +1 -0
- package/dist/i18n/index.d.ts +48 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +135 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +52 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +85 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/lan/mdns_packet.d.ts +74 -0
- package/dist/lan/mdns_packet.d.ts.map +1 -0
- package/dist/lan/mdns_packet.js +247 -0
- package/dist/lan/mdns_packet.js.map +1 -0
- package/dist/lan/mdns_service.d.ts +102 -0
- package/dist/lan/mdns_service.d.ts.map +1 -0
- package/dist/lan/mdns_service.js +206 -0
- package/dist/lan/mdns_service.js.map +1 -0
- package/dist/license/activate.d.ts +33 -0
- package/dist/license/activate.d.ts.map +1 -0
- package/dist/license/activate.js +135 -0
- package/dist/license/activate.js.map +1 -0
- package/dist/license/fingerprint.d.ts +2 -0
- package/dist/license/fingerprint.d.ts.map +1 -0
- package/dist/license/fingerprint.js +29 -0
- package/dist/license/fingerprint.js.map +1 -0
- package/dist/license/hito4_client.d.ts +24 -0
- package/dist/license/hito4_client.d.ts.map +1 -0
- package/dist/license/hito4_client.js +103 -0
- package/dist/license/hito4_client.js.map +1 -0
- package/dist/license/index.d.ts +22 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +125 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/types.d.ts +38 -0
- package/dist/license/types.d.ts.map +1 -0
- package/dist/license/types.js +9 -0
- package/dist/license/types.js.map +1 -0
- package/dist/migrate/ai-apply.d.ts +198 -0
- package/dist/migrate/ai-apply.d.ts.map +1 -0
- package/dist/migrate/ai-apply.js +833 -0
- package/dist/migrate/ai-apply.js.map +1 -0
- package/dist/migrate/ai-decorator.d.ts +87 -0
- package/dist/migrate/ai-decorator.d.ts.map +1 -0
- package/dist/migrate/ai-decorator.js +203 -0
- package/dist/migrate/ai-decorator.js.map +1 -0
- package/dist/migrate/apply.d.ts +28 -0
- package/dist/migrate/apply.d.ts.map +1 -0
- package/dist/migrate/apply.js +119 -0
- package/dist/migrate/apply.js.map +1 -0
- package/dist/migrate/audit.d.ts +9 -0
- package/dist/migrate/audit.d.ts.map +1 -0
- package/dist/migrate/audit.js +197 -0
- package/dist/migrate/audit.js.map +1 -0
- package/dist/migrate/diff.d.ts +28 -0
- package/dist/migrate/diff.d.ts.map +1 -0
- package/dist/migrate/diff.js +154 -0
- package/dist/migrate/diff.js.map +1 -0
- package/dist/migrate/html-orchestrator.d.ts +81 -0
- package/dist/migrate/html-orchestrator.d.ts.map +1 -0
- package/dist/migrate/html-orchestrator.js +233 -0
- package/dist/migrate/html-orchestrator.js.map +1 -0
- package/dist/migrate/html-walker.d.ts +93 -0
- package/dist/migrate/html-walker.d.ts.map +1 -0
- package/dist/migrate/html-walker.js +288 -0
- package/dist/migrate/html-walker.js.map +1 -0
- package/dist/migrate/js-template-walker.d.ts +118 -0
- package/dist/migrate/js-template-walker.d.ts.map +1 -0
- package/dist/migrate/js-template-walker.js +644 -0
- package/dist/migrate/js-template-walker.js.map +1 -0
- package/dist/migrate/manifest-validator.d.ts +30 -0
- package/dist/migrate/manifest-validator.d.ts.map +1 -0
- package/dist/migrate/manifest-validator.js +261 -0
- package/dist/migrate/manifest-validator.js.map +1 -0
- package/dist/migrate/overrides.d.ts +58 -0
- package/dist/migrate/overrides.d.ts.map +1 -0
- package/dist/migrate/overrides.js +193 -0
- package/dist/migrate/overrides.js.map +1 -0
- package/dist/migrate/plugin-scope.d.ts +42 -0
- package/dist/migrate/plugin-scope.d.ts.map +1 -0
- package/dist/migrate/plugin-scope.js +94 -0
- package/dist/migrate/plugin-scope.js.map +1 -0
- package/dist/migrate/types.d.ts +45 -0
- package/dist/migrate/types.d.ts.map +1 -0
- package/dist/migrate/types.js +9 -0
- package/dist/migrate/types.js.map +1 -0
- package/dist/migrate/verb-inference.d.ts +37 -0
- package/dist/migrate/verb-inference.d.ts.map +1 -0
- package/dist/migrate/verb-inference.js +274 -0
- package/dist/migrate/verb-inference.js.map +1 -0
- package/dist/nac3/attrs.d.ts +87 -0
- package/dist/nac3/attrs.d.ts.map +1 -0
- package/dist/nac3/attrs.js +134 -0
- package/dist/nac3/attrs.js.map +1 -0
- package/dist/nac3/scenario_dsl.d.ts +71 -0
- package/dist/nac3/scenario_dsl.d.ts.map +1 -0
- package/dist/nac3/scenario_dsl.js +191 -0
- package/dist/nac3/scenario_dsl.js.map +1 -0
- package/dist/nac3/tokens.d.ts +126 -0
- package/dist/nac3/tokens.d.ts.map +1 -0
- package/dist/nac3/tokens.js +138 -0
- package/dist/nac3/tokens.js.map +1 -0
- package/dist/reader/parsers/csv.d.ts +42 -0
- package/dist/reader/parsers/csv.d.ts.map +1 -0
- package/dist/reader/parsers/csv.js +221 -0
- package/dist/reader/parsers/csv.js.map +1 -0
- package/dist/reader/parsers/docx.d.ts +31 -0
- package/dist/reader/parsers/docx.d.ts.map +1 -0
- package/dist/reader/parsers/docx.js +51 -0
- package/dist/reader/parsers/docx.js.map +1 -0
- package/dist/reader/parsers/epub.d.ts +39 -0
- package/dist/reader/parsers/epub.d.ts.map +1 -0
- package/dist/reader/parsers/epub.js +265 -0
- package/dist/reader/parsers/epub.js.map +1 -0
- package/dist/reader/parsers/html.d.ts +40 -0
- package/dist/reader/parsers/html.d.ts.map +1 -0
- package/dist/reader/parsers/html.js +386 -0
- package/dist/reader/parsers/html.js.map +1 -0
- package/dist/reader/parsers/md.d.ts +30 -0
- package/dist/reader/parsers/md.d.ts.map +1 -0
- package/dist/reader/parsers/md.js +199 -0
- package/dist/reader/parsers/md.js.map +1 -0
- package/dist/reader/parsers/pdf.d.ts +39 -0
- package/dist/reader/parsers/pdf.d.ts.map +1 -0
- package/dist/reader/parsers/pdf.js +220 -0
- package/dist/reader/parsers/pdf.js.map +1 -0
- package/dist/reader/parsers/rtf.d.ts +37 -0
- package/dist/reader/parsers/rtf.d.ts.map +1 -0
- package/dist/reader/parsers/rtf.js +347 -0
- package/dist/reader/parsers/rtf.js.map +1 -0
- package/dist/reader/parsers/source.d.ts +32 -0
- package/dist/reader/parsers/source.d.ts.map +1 -0
- package/dist/reader/parsers/source.js +122 -0
- package/dist/reader/parsers/source.js.map +1 -0
- package/dist/reader/parsers/txt.d.ts +25 -0
- package/dist/reader/parsers/txt.d.ts.map +1 -0
- package/dist/reader/parsers/txt.js +56 -0
- package/dist/reader/parsers/txt.js.map +1 -0
- package/dist/reader/parsers/xlsx.d.ts +33 -0
- package/dist/reader/parsers/xlsx.d.ts.map +1 -0
- package/dist/reader/parsers/xlsx.js +143 -0
- package/dist/reader/parsers/xlsx.js.map +1 -0
- package/dist/reader/registry.d.ts +39 -0
- package/dist/reader/registry.d.ts.map +1 -0
- package/dist/reader/registry.js +172 -0
- package/dist/reader/registry.js.map +1 -0
- package/dist/reader/search.d.ts +27 -0
- package/dist/reader/search.d.ts.map +1 -0
- package/dist/reader/search.js +77 -0
- package/dist/reader/search.js.map +1 -0
- package/dist/reader/state.d.ts +56 -0
- package/dist/reader/state.d.ts.map +1 -0
- package/dist/reader/state.js +179 -0
- package/dist/reader/state.js.map +1 -0
- package/dist/reader/types.d.ts +119 -0
- package/dist/reader/types.d.ts.map +1 -0
- package/dist/reader/types.js +23 -0
- package/dist/reader/types.js.map +1 -0
- package/dist/ship/run.d.ts +26 -0
- package/dist/ship/run.d.ts.map +1 -0
- package/dist/ship/run.js +123 -0
- package/dist/ship/run.js.map +1 -0
- package/dist/template/index.d.ts +50 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +140 -0
- package/dist/template/index.js.map +1 -0
- package/dist/ui/colors.d.ts +13 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +26 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/validate/index.d.ts +19 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +181 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/vault/catalog.d.ts +55 -0
- package/dist/vault/catalog.d.ts.map +1 -0
- package/dist/vault/catalog.js +424 -0
- package/dist/vault/catalog.js.map +1 -0
- package/dist/vault/crypto.d.ts +82 -0
- package/dist/vault/crypto.d.ts.map +1 -0
- package/dist/vault/crypto.js +173 -0
- package/dist/vault/crypto.js.map +1 -0
- package/dist/vault/git_askpass.d.ts +26 -0
- package/dist/vault/git_askpass.d.ts.map +1 -0
- package/dist/vault/git_askpass.js +104 -0
- package/dist/vault/git_askpass.js.map +1 -0
- package/dist/vault/migrator.d.ts +57 -0
- package/dist/vault/migrator.d.ts.map +1 -0
- package/dist/vault/migrator.js +204 -0
- package/dist/vault/migrator.js.map +1 -0
- package/dist/vault/redactor.d.ts +73 -0
- package/dist/vault/redactor.d.ts.map +1 -0
- package/dist/vault/redactor.js +182 -0
- package/dist/vault/redactor.js.map +1 -0
- package/dist/vault/store.d.ts +132 -0
- package/dist/vault/store.d.ts.map +1 -0
- package/dist/vault/store.js +335 -0
- package/dist/vault/store.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/voice/chunker.d.ts +43 -0
- package/dist/voice/chunker.d.ts.map +1 -0
- package/dist/voice/chunker.js +133 -0
- package/dist/voice/chunker.js.map +1 -0
- package/dist/voice/config.d.ts +14 -0
- package/dist/voice/config.d.ts.map +1 -0
- package/dist/voice/config.js +51 -0
- package/dist/voice/config.js.map +1 -0
- package/dist/voice/intents.d.ts +71 -0
- package/dist/voice/intents.d.ts.map +1 -0
- package/dist/voice/intents.js +0 -0
- package/dist/voice/intents.js.map +1 -0
- package/dist/voice/providers/elevenlabs.d.ts +53 -0
- package/dist/voice/providers/elevenlabs.d.ts.map +1 -0
- package/dist/voice/providers/elevenlabs.js +159 -0
- package/dist/voice/providers/elevenlabs.js.map +1 -0
- package/dist/voice/providers/google.d.ts +56 -0
- package/dist/voice/providers/google.d.ts.map +1 -0
- package/dist/voice/providers/google.js +253 -0
- package/dist/voice/providers/google.js.map +1 -0
- package/dist/voice/providers/whisper.d.ts +44 -0
- package/dist/voice/providers/whisper.d.ts.map +1 -0
- package/dist/voice/providers/whisper.js +179 -0
- package/dist/voice/providers/whisper.js.map +1 -0
- package/dist/voice/registry.d.ts +35 -0
- package/dist/voice/registry.d.ts.map +1 -0
- package/dist/voice/registry.js +48 -0
- package/dist/voice/registry.js.map +1 -0
- package/dist/voice/router.d.ts +62 -0
- package/dist/voice/router.d.ts.map +1 -0
- package/dist/voice/router.js +175 -0
- package/dist/voice/router.js.map +1 -0
- package/dist/voice/types.d.ts +116 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +22 -0
- package/dist/voice/types.js.map +1 -0
- package/dist/voice/voiceprint/enrollment.d.ts +36 -0
- package/dist/voice/voiceprint/enrollment.d.ts.map +1 -0
- package/dist/voice/voiceprint/enrollment.js +71 -0
- package/dist/voice/voiceprint/enrollment.js.map +1 -0
- package/dist/voice/voiceprint/identify.d.ts +16 -0
- package/dist/voice/voiceprint/identify.d.ts.map +1 -0
- package/dist/voice/voiceprint/identify.js +20 -0
- package/dist/voice/voiceprint/identify.js.map +1 -0
- package/dist/voice/voiceprint/liveness.d.ts +90 -0
- package/dist/voice/voiceprint/liveness.d.ts.map +1 -0
- package/dist/voice/voiceprint/liveness.js +251 -0
- package/dist/voice/voiceprint/liveness.js.map +1 -0
- package/dist/voice/voiceprint/match.d.ts +54 -0
- package/dist/voice/voiceprint/match.d.ts.map +1 -0
- package/dist/voice/voiceprint/match.js +88 -0
- package/dist/voice/voiceprint/match.js.map +1 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts +44 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts.map +1 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.js +92 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.js.map +1 -0
- package/dist/voice/voiceprint/store.d.ts +60 -0
- package/dist/voice/voiceprint/store.d.ts.map +1 -0
- package/dist/voice/voiceprint/store.js +155 -0
- package/dist/voice/voiceprint/store.js.map +1 -0
- package/dist/voice/voiceprint/trust.d.ts +90 -0
- package/dist/voice/voiceprint/trust.d.ts.map +1 -0
- package/dist/voice/voiceprint/trust.js +150 -0
- package/dist/voice/voiceprint/trust.js.map +1 -0
- package/dist/voice/voiceprint/types.d.ts +100 -0
- package/dist/voice/voiceprint/types.d.ts.map +1 -0
- package/dist/voice/voiceprint/types.js +23 -0
- package/dist/voice/voiceprint/types.js.map +1 -0
- package/dist/voice/wake.d.ts +64 -0
- package/dist/voice/wake.d.ts.map +1 -0
- package/dist/voice/wake.js +143 -0
- package/dist/voice/wake.js.map +1 -0
- package/docs/manuals/manual.ar.html +91 -0
- package/docs/manuals/manual.de.html +100 -0
- package/docs/manuals/manual.en.html +118 -0
- package/docs/manuals/manual.es.html +120 -0
- package/docs/manuals/manual.fr.html +102 -0
- package/docs/manuals/manual.hi.html +93 -0
- package/docs/manuals/manual.it.html +93 -0
- package/docs/manuals/manual.ja.html +97 -0
- package/docs/manuals/manual.pt.html +103 -0
- package/docs/manuals/manual.zh.html +89 -0
- package/package.json +94 -0
- package/src/i18n/catalogs/ar.json +86 -0
- package/src/i18n/catalogs/de.json +86 -0
- package/src/i18n/catalogs/en.json +86 -0
- package/src/i18n/catalogs/es.json +86 -0
- package/src/i18n/catalogs/fr.json +86 -0
- package/src/i18n/catalogs/hi.json +86 -0
- package/src/i18n/catalogs/it.json +86 -0
- package/src/i18n/catalogs/ja.json +86 -0
- package/src/i18n/catalogs/pt.json +86 -0
- package/src/i18n/catalogs/zh.json +86 -0
- package/templates/react-app/README.md +43 -0
- package/templates/react-app/index.html +12 -0
- package/templates/react-app/package.json +35 -0
- package/templates/react-app/src/App.tsx +106 -0
- package/templates/react-app/src/main.tsx +21 -0
- package/templates/react-app/src/nac/manifest.ts +46 -0
- package/templates/react-app/src/styles.css +68 -0
- package/templates/react-app/tsconfig.json +19 -0
- package/templates/react-app/vite.config.ts +12 -0
- package/templates/react-app/yujin.forge.json +15 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- plugin scope inference.
|
|
3
|
+
*
|
|
4
|
+
* A NAC-3 manifest groups elements under a `data-nac-plugin` root.
|
|
5
|
+
* When auto-decorating an undecorated HTML page, the walker needs to
|
|
6
|
+
* decide which ancestor element to declare as the plugin root for
|
|
7
|
+
* each candidate.
|
|
8
|
+
*
|
|
9
|
+
* Strategy (cheap-to-expensive):
|
|
10
|
+
* 1. Existing root: if an ancestor already carries data-nac-plugin,
|
|
11
|
+
* inherit it. No new root.
|
|
12
|
+
* 2. Semantic landmark: <main>, <section id=...>, <aside id=...>,
|
|
13
|
+
* <nav id=...> with a non-trivial id are strong root candidates.
|
|
14
|
+
* 3. Document-stem fallback: if no landmark exists, the whole
|
|
15
|
+
* <body> becomes the plugin root with slug derived from the
|
|
16
|
+
* page path or title.
|
|
17
|
+
*
|
|
18
|
+
* Per-page output: a set of root assignments + their proposed slugs.
|
|
19
|
+
*
|
|
20
|
+
* ASCII-only.
|
|
21
|
+
*/
|
|
22
|
+
import type { HTMLElement } from 'node-html-parser';
|
|
23
|
+
export interface PluginRoot {
|
|
24
|
+
el: HTMLElement;
|
|
25
|
+
slug: string;
|
|
26
|
+
source: 'existing' | 'landmark' | 'fallback';
|
|
27
|
+
confidence: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Find or propose the plugin root for an element. Walks ancestors.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolvePluginRoot(el: HTMLElement, pageSlug: string): PluginRoot;
|
|
33
|
+
/**
|
|
34
|
+
* Derive a default page slug from a path. Used as the fallback
|
|
35
|
+
* plugin slug.
|
|
36
|
+
*
|
|
37
|
+
* 'pages/invoice.tsx' -> 'pages_invoice'
|
|
38
|
+
* 'src/index.html' -> 'index'
|
|
39
|
+
* 'public/dashboard.html' -> 'public_dashboard'
|
|
40
|
+
*/
|
|
41
|
+
export declare function derivePageSlug(filePath: string): string;
|
|
42
|
+
//# sourceMappingURL=plugin-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-scope.d.ts","sourceRoot":"","sources":["../../src/migrate/plugin-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,GACf,UAAU,CAsCZ;AAYD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWvD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- plugin scope inference.
|
|
3
|
+
*
|
|
4
|
+
* A NAC-3 manifest groups elements under a `data-nac-plugin` root.
|
|
5
|
+
* When auto-decorating an undecorated HTML page, the walker needs to
|
|
6
|
+
* decide which ancestor element to declare as the plugin root for
|
|
7
|
+
* each candidate.
|
|
8
|
+
*
|
|
9
|
+
* Strategy (cheap-to-expensive):
|
|
10
|
+
* 1. Existing root: if an ancestor already carries data-nac-plugin,
|
|
11
|
+
* inherit it. No new root.
|
|
12
|
+
* 2. Semantic landmark: <main>, <section id=...>, <aside id=...>,
|
|
13
|
+
* <nav id=...> with a non-trivial id are strong root candidates.
|
|
14
|
+
* 3. Document-stem fallback: if no landmark exists, the whole
|
|
15
|
+
* <body> becomes the plugin root with slug derived from the
|
|
16
|
+
* page path or title.
|
|
17
|
+
*
|
|
18
|
+
* Per-page output: a set of root assignments + their proposed slugs.
|
|
19
|
+
*
|
|
20
|
+
* ASCII-only.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Find or propose the plugin root for an element. Walks ancestors.
|
|
24
|
+
*/
|
|
25
|
+
export function resolvePluginRoot(el, pageSlug) {
|
|
26
|
+
/* 1. Existing plugin attribute on any ancestor */
|
|
27
|
+
let cur = el;
|
|
28
|
+
while (cur) {
|
|
29
|
+
const existing = cur.getAttribute('data-nac-plugin');
|
|
30
|
+
if (existing) {
|
|
31
|
+
return { el: cur, slug: existing, source: 'existing', confidence: 1.0 };
|
|
32
|
+
}
|
|
33
|
+
cur = cur.parentNode;
|
|
34
|
+
}
|
|
35
|
+
/* 2. Semantic landmark with id */
|
|
36
|
+
cur = el;
|
|
37
|
+
const landmarkTags = new Set(['main', 'section', 'aside', 'nav', 'article', 'header', 'footer']);
|
|
38
|
+
while (cur) {
|
|
39
|
+
const tag = (cur.tagName || '').toLowerCase();
|
|
40
|
+
if (landmarkTags.has(tag)) {
|
|
41
|
+
const id = cur.getAttribute('id') || '';
|
|
42
|
+
if (id && id.length > 0) {
|
|
43
|
+
return { el: cur, slug: normaliseSlug(id), source: 'landmark', confidence: 0.78 };
|
|
44
|
+
}
|
|
45
|
+
/* No id -- use the tag as a weak landmark IF it is <main>
|
|
46
|
+
(singleton by HTML spec). */
|
|
47
|
+
if (tag === 'main') {
|
|
48
|
+
return { el: cur, slug: pageSlug, source: 'landmark', confidence: 0.65 };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
cur = cur.parentNode;
|
|
52
|
+
}
|
|
53
|
+
/* 3. Fallback: document-stem. Use the body itself. */
|
|
54
|
+
let body = el;
|
|
55
|
+
while (body && (body.tagName || '').toLowerCase() !== 'body') {
|
|
56
|
+
body = body.parentNode;
|
|
57
|
+
}
|
|
58
|
+
if (body) {
|
|
59
|
+
return { el: body, slug: pageSlug, source: 'fallback', confidence: 0.5 };
|
|
60
|
+
}
|
|
61
|
+
/* Last-ditch: return the input as its own root. */
|
|
62
|
+
return { el, slug: pageSlug, source: 'fallback', confidence: 0.3 };
|
|
63
|
+
}
|
|
64
|
+
/** Make a slug agent-friendly: lowercase, [a-z0-9_], no leading digit. */
|
|
65
|
+
function normaliseSlug(raw) {
|
|
66
|
+
const cleaned = raw
|
|
67
|
+
.toLowerCase()
|
|
68
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
69
|
+
.replace(/^_+|_+$/g, '');
|
|
70
|
+
if (/^[0-9]/.test(cleaned))
|
|
71
|
+
return 'p_' + cleaned;
|
|
72
|
+
return cleaned || 'plugin';
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Derive a default page slug from a path. Used as the fallback
|
|
76
|
+
* plugin slug.
|
|
77
|
+
*
|
|
78
|
+
* 'pages/invoice.tsx' -> 'pages_invoice'
|
|
79
|
+
* 'src/index.html' -> 'index'
|
|
80
|
+
* 'public/dashboard.html' -> 'public_dashboard'
|
|
81
|
+
*/
|
|
82
|
+
export function derivePageSlug(filePath) {
|
|
83
|
+
const noExt = filePath.replace(/\.(tsx?|jsx?|html?)$/i, '');
|
|
84
|
+
const cleaned = noExt
|
|
85
|
+
.replace(/^[\\/]+/, '')
|
|
86
|
+
.replace(/^src[\\/]/, '')
|
|
87
|
+
.replace(/^public[\\/]/, '')
|
|
88
|
+
.toLowerCase()
|
|
89
|
+
.replace(/[\\/]+/g, '_')
|
|
90
|
+
.replace(/[^a-z0-9_]+/g, '_')
|
|
91
|
+
.replace(/^_+|_+$/g, '');
|
|
92
|
+
return cleaned || 'page';
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=plugin-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-scope.js","sourceRoot":"","sources":["../../src/migrate/plugin-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- migration types.
|
|
3
|
+
*
|
|
4
|
+
* AuditReport is the JSON shape emitted by `yf migrate --audit`.
|
|
5
|
+
* Stable across versions: the apply step (later milestone) reads
|
|
6
|
+
* the same structure and renders diffs against it.
|
|
7
|
+
*/
|
|
8
|
+
export type CandidateKind = 'action' | 'field' | 'region';
|
|
9
|
+
export interface Candidate {
|
|
10
|
+
/** Path relative to the project root, posix-style. */
|
|
11
|
+
file: string;
|
|
12
|
+
/** 1-based line number where the JSX element opens. */
|
|
13
|
+
line: number;
|
|
14
|
+
/** Role NAC-3 would assign. */
|
|
15
|
+
kind: CandidateKind;
|
|
16
|
+
/** Tag name (e.g. 'button', 'input', 'a'). */
|
|
17
|
+
element: string;
|
|
18
|
+
/** Suggested data-nac-id, derived from file path + role. */
|
|
19
|
+
proposed_id: string;
|
|
20
|
+
/**
|
|
21
|
+
* True when the element already carries a data-nac-id attribute.
|
|
22
|
+
* The audit lists these so the apply step knows what to skip.
|
|
23
|
+
*/
|
|
24
|
+
already_tagged: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface AuditSummary {
|
|
27
|
+
actions: number;
|
|
28
|
+
fields: number;
|
|
29
|
+
regions: number;
|
|
30
|
+
already_tagged: number;
|
|
31
|
+
total: number;
|
|
32
|
+
}
|
|
33
|
+
export interface AuditReport {
|
|
34
|
+
/** Scan timestamp. */
|
|
35
|
+
generated_at: string;
|
|
36
|
+
/** Project root, absolute path. */
|
|
37
|
+
project_root: string;
|
|
38
|
+
/** How many .tsx/.jsx files were walked. */
|
|
39
|
+
scanned_files: number;
|
|
40
|
+
/** Per-file candidate counts. */
|
|
41
|
+
candidates: Candidate[];
|
|
42
|
+
/** Aggregate counters. */
|
|
43
|
+
summary: AuditSummary;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAS,MAAM,CAAC;IACvB,MAAM,EAAU,MAAM,CAAC;IACvB,OAAO,EAAS,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAW,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,0BAA0B;IAC1B,OAAO,EAAE,YAAY,CAAC;CACvB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- migration types.
|
|
3
|
+
*
|
|
4
|
+
* AuditReport is the JSON shape emitted by `yf migrate --audit`.
|
|
5
|
+
* Stable across versions: the apply step (later milestone) reads
|
|
6
|
+
* the same structure and renders diffs against it.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- verb inference pipeline (L1-L5, no AI).
|
|
3
|
+
*
|
|
4
|
+
* Classifies a candidate DOM element into the canonical NAC verb
|
|
5
|
+
* vocabulary (save, cancel, delete, edit, approve, reject, send,
|
|
6
|
+
* download, upload, refresh, add, remove, expand, collapse, open,
|
|
7
|
+
* close, etc.) using a layered cascade of cheap signals.
|
|
8
|
+
*
|
|
9
|
+
* Layers in priority order (first hit wins):
|
|
10
|
+
* L1 semantic HTML <input type="submit">, <button type="reset">
|
|
11
|
+
* L2 ARIA role + aria-label + aria-pressed
|
|
12
|
+
* L3 text + verb dict visible text matched against multi-locale verbs
|
|
13
|
+
* L4 class names + data .btn-delete, data-action="approve"
|
|
14
|
+
* L5 structural position confirm-dialog descendants imply confirm/reject
|
|
15
|
+
*
|
|
16
|
+
* Each layer returns { verb, confidence } where confidence in [0, 1].
|
|
17
|
+
* The pipeline keeps the strongest signal; layers below ~0.55 surface
|
|
18
|
+
* the element as "needs-review" for the assisted walker UI.
|
|
19
|
+
*
|
|
20
|
+
* ASCII-only.
|
|
21
|
+
*/
|
|
22
|
+
import type { HTMLElement } from 'node-html-parser';
|
|
23
|
+
export type Verb = 'save' | 'cancel' | 'submit' | 'reset' | 'delete' | 'remove' | 'add' | 'create' | 'edit' | 'approve' | 'reject' | 'confirm' | 'send' | 'download' | 'upload' | 'refresh' | 'reload' | 'open' | 'close' | 'expand' | 'collapse' | 'next' | 'prev' | 'first' | 'last' | 'search' | 'filter' | 'sort' | 'reorder' | 'login' | 'logout' | 'signup' | 'print' | 'export' | 'import' | 'copy' | 'paste' | 'select' | 'unselect' | 'toggle' | 'navigate' | 'back' | 'forward' | 'home' | 'play' | 'pause' | 'stop' | 'record' | 'unknown';
|
|
24
|
+
export interface VerbHit {
|
|
25
|
+
verb: Verb;
|
|
26
|
+
confidence: number;
|
|
27
|
+
layer: 'L1' | 'L2' | 'L3' | 'L4' | 'L5';
|
|
28
|
+
signal: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Run the L1-L5 cascade against an element. Returns the strongest
|
|
32
|
+
* verb hit (highest confidence) or `null` if no signal is strong
|
|
33
|
+
* enough to be reportable.
|
|
34
|
+
*/
|
|
35
|
+
export declare function inferVerb(el: HTMLElement): VerbHit | null;
|
|
36
|
+
export declare function isVerbLowConfidence(hit: VerbHit | null, threshold?: number): boolean;
|
|
37
|
+
//# sourceMappingURL=verb-inference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verb-inference.d.ts","sourceRoot":"","sources":["../../src/migrate/verb-inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,IAAI,GACZ,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GACtC,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAC/C,SAAS,GAAG,QAAQ,GAAG,SAAS,GAChC,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GACrD,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GACxC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAClC,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GACxC,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAC7B,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAChD,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAChC,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GACxC,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GACpC,SAAS,CAAC;AAEd,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAsOD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CASzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,SAAM,GAAG,OAAO,CAGjF"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- verb inference pipeline (L1-L5, no AI).
|
|
3
|
+
*
|
|
4
|
+
* Classifies a candidate DOM element into the canonical NAC verb
|
|
5
|
+
* vocabulary (save, cancel, delete, edit, approve, reject, send,
|
|
6
|
+
* download, upload, refresh, add, remove, expand, collapse, open,
|
|
7
|
+
* close, etc.) using a layered cascade of cheap signals.
|
|
8
|
+
*
|
|
9
|
+
* Layers in priority order (first hit wins):
|
|
10
|
+
* L1 semantic HTML <input type="submit">, <button type="reset">
|
|
11
|
+
* L2 ARIA role + aria-label + aria-pressed
|
|
12
|
+
* L3 text + verb dict visible text matched against multi-locale verbs
|
|
13
|
+
* L4 class names + data .btn-delete, data-action="approve"
|
|
14
|
+
* L5 structural position confirm-dialog descendants imply confirm/reject
|
|
15
|
+
*
|
|
16
|
+
* Each layer returns { verb, confidence } where confidence in [0, 1].
|
|
17
|
+
* The pipeline keeps the strongest signal; layers below ~0.55 surface
|
|
18
|
+
* the element as "needs-review" for the assisted walker UI.
|
|
19
|
+
*
|
|
20
|
+
* ASCII-only.
|
|
21
|
+
*/
|
|
22
|
+
/* ---- L3 verb dictionary: text snippets in multiple locales ---- */
|
|
23
|
+
/* Keys are normalised lowercase, no diacritics. The matcher does the
|
|
24
|
+
normalisation on the input side. Add entries here freely; the
|
|
25
|
+
dictionary is the canonical bridge between human language + NAC
|
|
26
|
+
verbs. */
|
|
27
|
+
const VERB_DICT = {
|
|
28
|
+
// Save / Submit
|
|
29
|
+
'save': 'save', 'guardar': 'save', 'salvar': 'save', 'speichern': 'save',
|
|
30
|
+
'salva': 'save', 'sauvegarder': 'save', 'enregistrer': 'save',
|
|
31
|
+
'保存': 'save', '保存する': 'save',
|
|
32
|
+
'submit': 'submit', 'enviar': 'submit', 'envoyer': 'submit', 'absenden': 'submit',
|
|
33
|
+
// Cancel
|
|
34
|
+
'cancel': 'cancel', 'cancelar': 'cancel', 'cancellare': 'cancel',
|
|
35
|
+
'annuler': 'cancel', 'abbrechen': 'cancel', 'cancela': 'cancel',
|
|
36
|
+
'キャンセル': 'cancel',
|
|
37
|
+
// Reset
|
|
38
|
+
'reset': 'reset', 'restablecer': 'reset', 'reiniciar': 'reset',
|
|
39
|
+
'reinitialiser': 'reset', 'zuruecksetzen': 'reset',
|
|
40
|
+
// Delete / Remove
|
|
41
|
+
'delete': 'delete', 'eliminar': 'delete', 'borrar': 'delete', 'suprimir': 'delete',
|
|
42
|
+
'loeschen': 'delete', 'supprimer': 'delete', 'eliminare': 'delete',
|
|
43
|
+
'削除': 'delete', '削除する': 'delete',
|
|
44
|
+
'remove': 'remove', 'quitar': 'remove', 'remover': 'remove', 'rimuovere': 'remove',
|
|
45
|
+
'entfernen': 'remove', 'retirer': 'remove',
|
|
46
|
+
// Add / Create
|
|
47
|
+
'add': 'add', 'agregar': 'add', 'aniadir': 'add', 'anadir': 'add',
|
|
48
|
+
'aggiungere': 'add', 'hinzufuegen': 'add', 'ajouter': 'add',
|
|
49
|
+
'追加': 'add', '追加する': 'add',
|
|
50
|
+
'create': 'create', 'crear': 'create', 'creare': 'create',
|
|
51
|
+
'erstellen': 'create', 'creer': 'create',
|
|
52
|
+
'作成': 'create', '作る': 'create',
|
|
53
|
+
// Edit
|
|
54
|
+
'edit': 'edit', 'editar': 'edit', 'modificar': 'edit', 'editare': 'edit',
|
|
55
|
+
'bearbeiten': 'edit', 'modifier': 'edit', 'editer': 'edit',
|
|
56
|
+
'編集': 'edit', '編集する': 'edit',
|
|
57
|
+
// Approve / Confirm / Reject
|
|
58
|
+
'approve': 'approve', 'aprobar': 'approve', 'approvare': 'approve',
|
|
59
|
+
'genehmigen': 'approve', 'approuver': 'approve',
|
|
60
|
+
'承認': 'approve',
|
|
61
|
+
'confirm': 'confirm', 'confirmar': 'confirm', 'confermare': 'confirm',
|
|
62
|
+
'bestaetigen': 'confirm', 'confirmer': 'confirm',
|
|
63
|
+
'si': 'confirm', 'yes': 'confirm', 'ok': 'confirm', 'oui': 'confirm', 'ja': 'confirm',
|
|
64
|
+
'確認': 'confirm', 'はい': 'confirm',
|
|
65
|
+
'reject': 'reject', 'rechazar': 'reject', 'rifiutare': 'reject',
|
|
66
|
+
'ablehnen': 'reject', 'rejeter': 'reject',
|
|
67
|
+
'no': 'reject', 'non': 'reject', 'nein': 'reject',
|
|
68
|
+
// Send
|
|
69
|
+
'send': 'send', 'enviar mensaje': 'send', 'inviare': 'send',
|
|
70
|
+
'senden': 'send',
|
|
71
|
+
// Download / Upload
|
|
72
|
+
'download': 'download', 'descargar': 'download', 'scaricare': 'download',
|
|
73
|
+
'herunterladen': 'download', 'telecharger': 'download',
|
|
74
|
+
'upload': 'upload', 'subir': 'upload', 'caricare': 'upload',
|
|
75
|
+
'hochladen': 'upload', 'televerser': 'upload',
|
|
76
|
+
// Refresh / Reload
|
|
77
|
+
'refresh': 'refresh', 'actualizar': 'refresh', 'aggiornare': 'refresh',
|
|
78
|
+
'aktualisieren': 'refresh', 'actualiser': 'refresh',
|
|
79
|
+
'reload': 'reload', 'recargar': 'reload', 'ricaricare': 'reload',
|
|
80
|
+
'neu laden': 'reload', 'recharger': 'reload',
|
|
81
|
+
// Open / Close
|
|
82
|
+
'open': 'open', 'abrir': 'open', 'aprire': 'open', 'oeffnen': 'open',
|
|
83
|
+
'ouvrir': 'open',
|
|
84
|
+
'close': 'close', 'cerrar': 'close', 'chiudere': 'close', 'schliessen': 'close',
|
|
85
|
+
'fermer': 'close',
|
|
86
|
+
// Expand / Collapse
|
|
87
|
+
'expand': 'expand', 'expandir': 'expand', 'espandere': 'expand',
|
|
88
|
+
'erweitern': 'expand', 'developper': 'expand',
|
|
89
|
+
'collapse': 'collapse', 'colapsar': 'collapse', 'contrarre': 'collapse',
|
|
90
|
+
'einklappen': 'collapse', 'reduire': 'collapse',
|
|
91
|
+
// Navigation
|
|
92
|
+
'next': 'next', 'siguiente': 'next', 'successivo': 'next', 'weiter': 'next',
|
|
93
|
+
'suivant': 'next',
|
|
94
|
+
'prev': 'prev', 'previous': 'prev', 'anterior': 'prev', 'precedente': 'prev',
|
|
95
|
+
'zurueck': 'prev', 'precedent': 'prev',
|
|
96
|
+
'back': 'back', 'volver': 'back', 'tornare': 'back', 'retour': 'back',
|
|
97
|
+
'home': 'home', 'inicio': 'home', 'casa': 'home', 'startseite': 'home',
|
|
98
|
+
'accueil': 'home',
|
|
99
|
+
// Search / Filter / Sort
|
|
100
|
+
'search': 'search', 'buscar': 'search', 'cercare': 'search',
|
|
101
|
+
'suchen': 'search', 'rechercher': 'search',
|
|
102
|
+
'filter': 'filter', 'filtrar': 'filter', 'filtrare': 'filter',
|
|
103
|
+
'filtern': 'filter', 'filtrer': 'filter',
|
|
104
|
+
'sort': 'sort', 'ordenar': 'sort', 'ordinare': 'sort',
|
|
105
|
+
'sortieren': 'sort', 'trier': 'sort',
|
|
106
|
+
// Login / Logout
|
|
107
|
+
'login': 'login', 'iniciar sesion': 'login', 'accedere': 'login',
|
|
108
|
+
'anmelden': 'login', 'se connecter': 'login',
|
|
109
|
+
'logout': 'logout', 'cerrar sesion': 'logout', 'uscire': 'logout',
|
|
110
|
+
'abmelden': 'logout', 'se deconnecter': 'logout',
|
|
111
|
+
'sign in': 'login', 'sign out': 'logout', 'sign up': 'signup',
|
|
112
|
+
// Other
|
|
113
|
+
'print': 'print', 'imprimir': 'print', 'stampare': 'print',
|
|
114
|
+
'drucken': 'print', 'imprimer': 'print',
|
|
115
|
+
'export': 'export', 'exportar': 'export', 'esportare': 'export',
|
|
116
|
+
'exportieren': 'export', 'exporter': 'export',
|
|
117
|
+
'import': 'import', 'importar': 'import', 'importare': 'import',
|
|
118
|
+
'importieren': 'import', 'importer': 'import',
|
|
119
|
+
'copy': 'copy', 'copiar': 'copy', 'copiare': 'copy', 'kopieren': 'copy', 'copier': 'copy',
|
|
120
|
+
};
|
|
121
|
+
/* ---- helpers ---- */
|
|
122
|
+
function normaliseText(s) {
|
|
123
|
+
if (!s)
|
|
124
|
+
return '';
|
|
125
|
+
return s
|
|
126
|
+
.normalize('NFD')
|
|
127
|
+
.replace(/[̀-ͯ]/g, '') // strip diacritics
|
|
128
|
+
.toLowerCase()
|
|
129
|
+
.replace(/[^a-z0-9一-鿿-ヿ\s]/g, ' ')
|
|
130
|
+
.replace(/\s+/g, ' ')
|
|
131
|
+
.trim();
|
|
132
|
+
}
|
|
133
|
+
function attr(el, name) {
|
|
134
|
+
return el.getAttribute(name) || '';
|
|
135
|
+
}
|
|
136
|
+
/* ---- L1: semantic HTML ---- */
|
|
137
|
+
function inferL1(el) {
|
|
138
|
+
const tag = (el.tagName || '').toLowerCase();
|
|
139
|
+
if (tag === 'input') {
|
|
140
|
+
const type = attr(el, 'type').toLowerCase();
|
|
141
|
+
if (type === 'submit')
|
|
142
|
+
return { verb: 'submit', confidence: 0.95, layer: 'L1', signal: '<input type="submit">' };
|
|
143
|
+
if (type === 'reset')
|
|
144
|
+
return { verb: 'reset', confidence: 0.95, layer: 'L1', signal: '<input type="reset">' };
|
|
145
|
+
if (type === 'button') {
|
|
146
|
+
// fall through -- need text/aria to disambiguate
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (tag === 'button' && attr(el, 'type').toLowerCase() === 'submit') {
|
|
150
|
+
return { verb: 'submit', confidence: 0.92, layer: 'L1', signal: '<button type="submit">' };
|
|
151
|
+
}
|
|
152
|
+
if (tag === 'button' && attr(el, 'type').toLowerCase() === 'reset') {
|
|
153
|
+
return { verb: 'reset', confidence: 0.92, layer: 'L1', signal: '<button type="reset">' };
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
/* ---- L2: ARIA ---- */
|
|
158
|
+
function inferL2(el) {
|
|
159
|
+
const ariaLabel = attr(el, 'aria-label');
|
|
160
|
+
if (ariaLabel) {
|
|
161
|
+
const fromDict = lookupInDict(ariaLabel);
|
|
162
|
+
if (fromDict) {
|
|
163
|
+
return { verb: fromDict.verb, confidence: 0.88, layer: 'L2', signal: 'aria-label: ' + ariaLabel };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const role = attr(el, 'role').toLowerCase();
|
|
167
|
+
if (role === 'switch' || role === 'checkbox') {
|
|
168
|
+
return { verb: 'toggle', confidence: 0.82, layer: 'L2', signal: 'role=' + role };
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
/* ---- L3: visible text + verb dictionary ---- */
|
|
173
|
+
function inferL3(el) {
|
|
174
|
+
const text = (el.text || '').trim();
|
|
175
|
+
if (!text)
|
|
176
|
+
return null;
|
|
177
|
+
const lookup = lookupInDict(text);
|
|
178
|
+
if (lookup) {
|
|
179
|
+
/* short texts (one-or-two word labels) are typically command
|
|
180
|
+
buttons; long texts are paragraphs and the matched verb may be
|
|
181
|
+
incidental. Discount confidence proportionally. */
|
|
182
|
+
const wordCount = text.split(/\s+/).length;
|
|
183
|
+
const conf = wordCount <= 3 ? 0.78 : Math.max(0.55, 0.78 - (wordCount - 3) * 0.04);
|
|
184
|
+
return { verb: lookup.verb, confidence: conf, layer: 'L3', signal: 'text: "' + text.slice(0, 40) + '"' };
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
function lookupInDict(s) {
|
|
189
|
+
const n = normaliseText(s);
|
|
190
|
+
if (!n)
|
|
191
|
+
return null;
|
|
192
|
+
if (VERB_DICT[n])
|
|
193
|
+
return { verb: VERB_DICT[n] };
|
|
194
|
+
/* word-level: check each word against the dict */
|
|
195
|
+
for (const word of n.split(/\s+/)) {
|
|
196
|
+
if (VERB_DICT[word])
|
|
197
|
+
return { verb: VERB_DICT[word] };
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
/* ---- L4: class names + data attrs ---- */
|
|
202
|
+
function inferL4(el) {
|
|
203
|
+
const cls = attr(el, 'class').toLowerCase();
|
|
204
|
+
const dataAction = attr(el, 'data-action').toLowerCase();
|
|
205
|
+
if (dataAction) {
|
|
206
|
+
const lookup = lookupInDict(dataAction);
|
|
207
|
+
if (lookup)
|
|
208
|
+
return { verb: lookup.verb, confidence: 0.72, layer: 'L4', signal: 'data-action=' + dataAction };
|
|
209
|
+
}
|
|
210
|
+
/* class-name conventions: .btn-delete, .save-btn, .cancel-action */
|
|
211
|
+
const patterns = [
|
|
212
|
+
[/\b(btn|action)?-?delete\b|\bdelete-?(btn|action)\b/, 'delete'],
|
|
213
|
+
[/\b(btn|action)?-?remove\b|\bremove-?(btn|action)\b/, 'remove'],
|
|
214
|
+
[/\b(btn|action)?-?save\b|\bsave-?(btn|action)\b/, 'save'],
|
|
215
|
+
[/\b(btn|action)?-?cancel\b|\bcancel-?(btn|action)\b/, 'cancel'],
|
|
216
|
+
[/\b(btn|action)?-?add\b|\badd-?(btn|action|row)\b/, 'add'],
|
|
217
|
+
[/\b(btn|action)?-?edit\b|\bedit-?(btn|action)\b/, 'edit'],
|
|
218
|
+
[/\b(btn|action)?-?close\b|\bclose-?(btn|action)\b/, 'close'],
|
|
219
|
+
[/\b(btn|action)?-?confirm\b/, 'confirm'],
|
|
220
|
+
[/\bcta-?danger\b/, 'delete'], // common convention
|
|
221
|
+
];
|
|
222
|
+
for (const [re, verb] of patterns) {
|
|
223
|
+
if (re.test(cls))
|
|
224
|
+
return { verb, confidence: 0.68, layer: 'L4', signal: 'class: ' + cls.split(/\s+/).find(c => re.test(c)) };
|
|
225
|
+
}
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
/* ---- L5: structural position ---- */
|
|
229
|
+
function inferL5(el) {
|
|
230
|
+
/* Inside a confirm-dialog ancestor, the two buttons typically map
|
|
231
|
+
to confirm + reject. Disambiguate by `cta-danger` or `primary`
|
|
232
|
+
class or by position (last button often = confirm). */
|
|
233
|
+
let cur = el.parentNode;
|
|
234
|
+
let inDialog = false;
|
|
235
|
+
while (cur) {
|
|
236
|
+
const role = attr(cur, 'role').toLowerCase();
|
|
237
|
+
if (role === 'dialog' || role === 'alertdialog') {
|
|
238
|
+
inDialog = true;
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
cur = cur.parentNode;
|
|
242
|
+
}
|
|
243
|
+
if (!inDialog)
|
|
244
|
+
return null;
|
|
245
|
+
const cls = attr(el, 'class').toLowerCase();
|
|
246
|
+
if (/danger|primary|cta-confirm/.test(cls)) {
|
|
247
|
+
return { verb: 'confirm', confidence: 0.62, layer: 'L5', signal: 'inside dialog, class=primary/danger' };
|
|
248
|
+
}
|
|
249
|
+
return { verb: 'reject', confidence: 0.55, layer: 'L5', signal: 'inside dialog, secondary button' };
|
|
250
|
+
}
|
|
251
|
+
/* ---- public API ---- */
|
|
252
|
+
/**
|
|
253
|
+
* Run the L1-L5 cascade against an element. Returns the strongest
|
|
254
|
+
* verb hit (highest confidence) or `null` if no signal is strong
|
|
255
|
+
* enough to be reportable.
|
|
256
|
+
*/
|
|
257
|
+
export function inferVerb(el) {
|
|
258
|
+
const hits = [];
|
|
259
|
+
for (const fn of [inferL1, inferL2, inferL3, inferL4, inferL5]) {
|
|
260
|
+
const h = fn(el);
|
|
261
|
+
if (h)
|
|
262
|
+
hits.push(h);
|
|
263
|
+
}
|
|
264
|
+
if (hits.length === 0)
|
|
265
|
+
return null;
|
|
266
|
+
hits.sort((a, b) => b.confidence - a.confidence);
|
|
267
|
+
return hits[0] ?? null;
|
|
268
|
+
}
|
|
269
|
+
export function isVerbLowConfidence(hit, threshold = 0.7) {
|
|
270
|
+
if (!hit)
|
|
271
|
+
return true;
|
|
272
|
+
return hit.confidence < threshold;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=verb-inference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verb-inference.js","sourceRoot":"","sources":["../../src/migrate/verb-inference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NAC-3 cross-target a11y / E2E attribute helper (PLAN sec
|
|
3
|
+
* D2, NAC3.2).
|
|
4
|
+
*
|
|
5
|
+
* Single namespace `yujin.<scenario>.<element>` that maps to
|
|
6
|
+
* either web HTML `data-nac-id` (+ aria-* mirrors) or RN
|
|
7
|
+
* `testID` (+ accessibility* mirrors). The same scenario YAML
|
|
8
|
+
* (NAC3.4) can drive both Playwright and Maestro because the
|
|
9
|
+
* selectors are identical.
|
|
10
|
+
*
|
|
11
|
+
* Public API:
|
|
12
|
+
* nacId('login.submit') -> 'yujin.login.submit'
|
|
13
|
+
* webAttrs(nacId, role?, action?) -> object with data-nac-*
|
|
14
|
+
* rnAttrs(nacId, role?, action?) -> object with testID +
|
|
15
|
+
* accessibility* mirrors
|
|
16
|
+
*
|
|
17
|
+
* On the web side, `webAttrs` returns an object Hugo / React /
|
|
18
|
+
* vanilla can spread into a JSX/HTML element. The helper does
|
|
19
|
+
* NOT emit raw HTML attributes; the caller decides how to
|
|
20
|
+
* apply (e.g. via a string template `data-nac-id="${id}"`).
|
|
21
|
+
*
|
|
22
|
+
* Roles are aligned with WAI-ARIA roles where possible
|
|
23
|
+
* (button, link, navigation, dialog, etc). Actions are
|
|
24
|
+
* verbs that NAC-3 dispatch can interpret (submit, open,
|
|
25
|
+
* close, toggle, navigate, etc).
|
|
26
|
+
*
|
|
27
|
+
* ASCII-only.
|
|
28
|
+
*/
|
|
29
|
+
export declare const NAC_ATTR_ID = "data-nac-id";
|
|
30
|
+
export declare const NAC_ATTR_ROLE = "data-nac-role";
|
|
31
|
+
export declare const NAC_ATTR_ACTION = "data-nac-action";
|
|
32
|
+
/**
|
|
33
|
+
* Normalise a NAC ID. Accepts the long form
|
|
34
|
+
* `yujin.scenario.element` or the short `scenario.element`;
|
|
35
|
+
* always returns the long form with the `yujin.` prefix.
|
|
36
|
+
*
|
|
37
|
+
* Validates the shape loudly so callers see typos early.
|
|
38
|
+
*/
|
|
39
|
+
export declare function nacId(id: string): string;
|
|
40
|
+
export interface NacOptions {
|
|
41
|
+
/** Optional NAC-3 role -- e.g. button, link, nav, dialog. */
|
|
42
|
+
role?: string;
|
|
43
|
+
/** Optional NAC-3 action verb -- submit, open, close, etc. */
|
|
44
|
+
action?: string;
|
|
45
|
+
/** Optional ARIA label / RN accessibilityLabel. */
|
|
46
|
+
label?: string;
|
|
47
|
+
/** Optional hint (extra context for screen readers). */
|
|
48
|
+
hint?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build a web attribute object that can be flattened into an
|
|
52
|
+
* HTML element. Example:
|
|
53
|
+
*
|
|
54
|
+
* const a = webAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
|
|
55
|
+
* => {
|
|
56
|
+
* 'data-nac-id': 'yujin.login.submit',
|
|
57
|
+
* 'data-nac-role': 'button',
|
|
58
|
+
* 'data-nac-action': 'submit',
|
|
59
|
+
* 'aria-label': 'Sign in',
|
|
60
|
+
* }
|
|
61
|
+
*/
|
|
62
|
+
export declare function webAttrs(id: string, opts?: NacOptions): Record<string, string>;
|
|
63
|
+
/**
|
|
64
|
+
* Render a web attribute object as an HTML attribute string,
|
|
65
|
+
* ready to interpolate into a template. Each value is
|
|
66
|
+
* HTML-escaped (the same escapeHtml the panel uses).
|
|
67
|
+
*
|
|
68
|
+
* `<button ${webAttrsHtml('login.submit', {role:'button'})}>`
|
|
69
|
+
* => '<button data-nac-id="yujin.login.submit" data-nac-role="button">'
|
|
70
|
+
*/
|
|
71
|
+
export declare function webAttrsHtml(id: string, opts?: NacOptions): string;
|
|
72
|
+
/**
|
|
73
|
+
* Build an RN attribute object. RN uses different prop names
|
|
74
|
+
* for the same concepts:
|
|
75
|
+
*
|
|
76
|
+
* const a = rnAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
|
|
77
|
+
* => {
|
|
78
|
+
* testID: 'yujin.login.submit',
|
|
79
|
+
* accessibilityRole: 'button',
|
|
80
|
+
* accessibilityHint: 'submit',
|
|
81
|
+
* accessibilityLabel: 'Sign in',
|
|
82
|
+
* }
|
|
83
|
+
*
|
|
84
|
+
* Spread into the JSX of a `<Pressable>`, `<TextInput>`, etc.
|
|
85
|
+
*/
|
|
86
|
+
export declare function rnAttrs(id: string, opts?: NacOptions): Record<string, string>;
|
|
87
|
+
//# sourceMappingURL=attrs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attrs.d.ts","sourceRoot":"","sources":["../../src/nac3/attrs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,eAAO,MAAM,WAAW,gBAAoB,CAAC;AAC7C,eAAO,MAAM,aAAa,kBAAoB,CAAC;AAC/C,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAOjD;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAcxC;AAED,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASlF;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAKtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQjF"}
|