11<script setup>
22import {computed , reactive } from ' vue' ;
33import store from ' ./store' ;
4+ import IconSearch from ' ./components/icons/IconSearch.vue' ;
5+ import IconTrash from ' ./components/icons/IconTrash.vue' ;
6+ import IconEye from ' ./components/icons/IconEye.vue' ;
7+ import IconCopy from ' ./components/icons/IconCopy.vue' ;
8+ import IconPreview from ' ./components/icons/IconPreview.vue' ;
9+ import IconCheck from ' ./components/icons/IconCheck.vue' ;
10+ import IconReset from ' ./components/icons/IconReset.vue' ;
11+ import IconArrowLeft from ' ./components/icons/IconArrowLeft.vue' ;
12+ import IconArrowRight from ' ./components/icons/IconArrowRight.vue' ;
13+ import IconRefresh from ' ./components/icons/IconRefresh.vue' ;
14+ import IconListChecks from ' ./components/icons/IconListChecks.vue' ;
415
516/**
617 * @typedef {ReturnType<typeof store.getKnownStructureMatches>[number]} KnownStructureMatch
@@ -57,21 +68,7 @@ const filteredStructures = computed(() => {
5768const visibleStructureIdsForScan = computed (() => filteredStructures .value .map ((structure ) => structure .id ));
5869const canScanSelected = computed (() => store .hasPendingKnownStructureScan ());
5970const canScanVisible = computed (() => store .canRunKnownStructureMatching (visibleStructureIdsForScan .value ));
60- const scanSelectedTitle = computed (() => {
61- if (! store .arb ? .ast ? .length ) {
62- return ' Parse a script before scanning structures' ;
63- }
64-
65- if (! store .canRunKnownStructureMatching ()) {
66- return ' Select at least one runnable structure to scan' ;
67- }
68-
69- if (canScanSelected .value ) {
70- return ' Scan the selected structures against the current parsed script' ;
71- }
72-
73- return ' Selected structure matches are already up to date' ;
74- });
71+ const scanSelectedTitle = ' Scan the selected structures against the current parsed script' ;
7572
7673const selectedStructureCount = computed (() => store .selectedKnownStructureIds .length );
7774const activeStructure = computed (() => store .getKnownStructureById (store .activeKnownStructureId ));
@@ -245,6 +242,10 @@ function applyTransform(structureId) {
245242 store .applyKnownStructureTransform (structureId);
246243}
247244
245+ function hasStructureMatches (structureId ) {
246+ return store .getKnownStructureMatches (structureId).length > 0 ;
247+ }
248+
248249/**
249250 * Selects a normalized structure match in the store.
250251 *
@@ -412,23 +413,25 @@ function createDeterministicRandom(match, seed) {
412413 </div>
413414 <div class="toolbar-group">
414415 <button
415- class="btn btn-run"
416+ class="btn btn-run icon-btn "
416417 :disabled="!canScanSelected"
417418 :title="scanSelectedTitle"
419+ aria-label="Scan selected structures"
418420 @click="runStructures()"
419421 >
420- Scan selected
422+ <icon-search />
421423 </button>
422424 <button
423- class="btn"
425+ class="btn icon-btn "
424426 :disabled="!canScanVisible"
425427 title="Scan the currently visible structures against the current parsed script"
428+ aria-label="Scan visible structures"
426429 @click="runStructures(visibleStructureIdsForScan)"
427430 >
428- Scan visible
431+ <icon-eye />
429432 </button>
430- <button class="btn" @click="store.clearKnownStructureResults()">
431- Clear all
433+ <button class="btn icon-btn" title="Clear all known structure results" aria-label="Clear all structure results " @click="store.clearKnownStructureResults()">
434+ <icon-trash />
432435 </button>
433436 <span class="toolbar-meta">{{ selectedStructureCount }} selected</span>
434437 <span class="toolbar-meta" v-if="store.knownStructureExecutionStatus.blockedStructures">
@@ -479,18 +482,21 @@ function createDeterministicRandom(match, seed) {
479482 </span>
480483 </div>
481484 <div class="structure-actions" @click.stop>
482- <button class="btn btn-inline btn-run" :disabled="!structure.browserRunnable" @click="runStructures([structure.id])">Scan </button>
483- <button class="btn btn-inline" @click="showStructure(structure.id)">Show </button>
484- <button class="btn btn-inline" @click="store.clearKnownStructureMatches(structure.id)">Clear </button>
485- <button class="btn btn-inline" @click="copyRuleSeed(structure.id)">Copy seed </button>
485+ <button class="btn btn-inline btn-run icon-btn icon-btn-sm " :disabled="!structure.browserRunnable" title="Scan this structure" aria-label="Scan structure" @click="runStructures([structure.id])"><icon-search /> </button>
486+ <button class="btn btn-inline icon-btn icon-btn-sm" :disabled="!hasStructureMatches(structure.id)" title="Show matches for this structure" aria-label="Show structure matches" @click="showStructure(structure.id)"><icon-list-checks /> </button>
487+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Clear this structure's matches" aria-label="Clear structure matches" @click="store.clearKnownStructureMatches(structure.id)"><icon-trash /> </button>
488+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Copy this structure's rule seed" aria-label="Copy rule seed" @click="copyRuleSeed(structure.id)"><icon-copy /> </button>
486489 <button
487490 v-if="structure.transformEnabled"
488- class="btn btn-inline"
491+ class="btn btn-inline icon-btn icon-btn-sm preview-icon-btn"
492+ :disabled="!hasStructureMatches(structure.id)"
493+ title="Preview this structure's transform"
494+ aria-label="Preview transform"
489495 @click="previewTransform(structure.id)"
490496 >
491- Preview
497+ <icon-preview />
492498 </button>
493- <button class="btn btn-inline" @click="store.setInspectedKnownStructure(structure.id)">Inspect </button>
499+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Inspect this structure" aria-label="Inspect structure" @click="store.setInspectedKnownStructure(structure.id)"><icon-eye /> </button>
494500 </div>
495501 </article>
496502 </div>
@@ -502,21 +508,11 @@ function createDeterministicRandom(match, seed) {
502508 <span v-if="activeMatches.length"> {{ activeMatchPosition.current }} / {{ activeMatchPosition.total }}</span>
503509 </legend>
504510 <div class="results-toolbar">
505- <button class="btn btn-inline" @click="store.selectKnownStructureMatchStep(-1)" :disabled="!activeMatches.length">
506- Prev match
507- </button>
508- <button class="btn btn-inline" @click="store.selectKnownStructureMatchStep(1)" :disabled="!activeMatches.length">
509- Next match
510- </button>
511- <button class="btn btn-inline" @click="store.selectKnownStructureStep(-1)" :disabled="!availableStructureFilterOptions.length">
512- Prev structure
513- </button>
514- <button class="btn btn-inline" @click="store.selectKnownStructureStep(1)" :disabled="!availableStructureFilterOptions.length">
515- Next structure
516- </button>
517- <button class="btn btn-inline" @click="store.rerunKnownStructureMatching()" :disabled="!store.lastKnownStructureRunIds.length">
518- Scan last run
519- </button>
511+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Previous match" aria-label="Previous match" @click="store.selectKnownStructureMatchStep(-1)" :disabled="!activeMatches.length"><icon-arrow-left /></button>
512+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Next match" aria-label="Next match" @click="store.selectKnownStructureMatchStep(1)" :disabled="!activeMatches.length"><icon-arrow-right /></button>
513+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Previous structure" aria-label="Previous structure" @click="store.selectKnownStructureStep(-1)" :disabled="!availableStructureFilterOptions.length"><icon-arrow-left /></button>
514+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Next structure" aria-label="Next structure" @click="store.selectKnownStructureStep(1)" :disabled="!availableStructureFilterOptions.length"><icon-arrow-right /></button>
515+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Scan the last run set again" aria-label="Scan last run again" @click="store.rerunKnownStructureMatching()" :disabled="!store.lastKnownStructureRunIds.length"><icon-refresh /></button>
520516 <label class="toggle-inline">
521517 <input
522518 :checked="store.scrollKnownStructureSelectionIntoView"
@@ -562,10 +558,12 @@ function createDeterministicRandom(match, seed) {
562558 >
563559 <button
564560 v-if="exploration.samplingMode === 'random'"
565- class="btn btn-inline"
561+ class="btn btn-inline icon-btn icon-btn-sm"
562+ title="Reroll the random sample"
563+ aria-label="Reroll sample"
566564 @click="rerollSample()"
567565 >
568- Reroll sample
566+ <icon-refresh />
569567 </button>
570568 <span class="toolbar-meta">{{ sampledResults.length }} visible matches</span>
571569 </div>
@@ -667,7 +665,7 @@ function createDeterministicRandom(match, seed) {
667665 <strong>Intent</strong> {{ inspectedStructure.description }}
668666 </div>
669667 <pre class="rule-seed">{{ activeRuleSeed }}</pre>
670- <button class="btn btn-inline" @click="copyRuleSeed(inspectedStructure.id)">Copy seed </button>
668+ <button class="btn btn-inline icon-btn icon-btn-sm" title="Copy this structure's rule seed" aria-label="Copy rule seed" @click="copyRuleSeed(inspectedStructure.id)"><icon-copy /> </button>
671669 </div>
672670 <div class="detail-card">
673671 <div class="detail-heading">Safe transform</div>
@@ -700,25 +698,31 @@ function createDeterministicRandom(match, seed) {
700698 </div>
701699 <div class="structure-actions">
702700 <button
703- class="btn btn-inline"
704- :disabled="!inspectedStructure.transformEnabled"
701+ class="btn btn-inline icon-btn icon-btn-sm preview-icon-btn"
702+ :disabled="!inspectedStructure.transformEnabled || !hasStructureMatches(inspectedStructure.id)"
703+ title="Preview this structure's transform"
704+ aria-label="Preview transform"
705705 @click="previewTransform(inspectedStructure.id)"
706706 >
707- Preview transform
707+ <icon-preview />
708708 </button>
709709 <button
710- class="btn btn-inline btn-run"
710+ class="btn btn-inline btn-run icon-btn icon-btn-sm "
711711 :disabled="!inspectedStructure.transformEnabled || !activeTransformPreview || !!activeTransformPreview.error || !activeTransformPreview.hasChanges"
712+ title="Apply the previewed transform"
713+ aria-label="Apply transform"
712714 @click="applyTransform(inspectedStructure.id)"
713715 >
714- Apply transform
716+ <icon-check />
715717 </button>
716718 <button
717- class="btn btn-inline"
719+ class="btn btn-inline icon-btn icon-btn-sm "
718720 :disabled="!activeTransformPreview"
721+ title="Clear the current transform preview"
722+ aria-label="Clear preview"
719723 @click="store.clearKnownStructureTransformPreview(inspectedStructure.id)"
720724 >
721- Clear preview
725+ <icon-reset />
722726 </button>
723727 </div>
724728 </div>
0 commit comments