|
1 | 1 | <template> |
2 | | - <article |
| 2 | + <div |
3 | 3 | class="stage-node card border shadow-sm position-relative" |
4 | 4 | :class="{ 'shadow': isSelected, 'hover-shadow': !isSelected }" |
5 | 5 | :style="stageStyle" |
6 | 6 | tabindex="0" |
7 | 7 | :data-stage-id="stage?.id" |
8 | | - role="button" |
9 | | - :aria-label="`Stage: ${stage?.title}. ${stage?.published ? 'Published' : 'Unpublished'}${stage?.default ? ', Default stage' : ''}`" |
10 | | - :aria-selected="isSelected" |
11 | 8 | :aria-describedby="`stage-${stage?.id}-description`" |
12 | 9 | @mouseenter="onNodeEnter" |
13 | 10 | @mouseleave="onNodeLeave" |
|
56 | 53 | class="btn btn-sm btn-secondary text-start text-white fw-semibold text-truncate" |
57 | 54 | role="menuitem" |
58 | 55 | tabindex="0" |
59 | | - :aria-label="`Edit stage ${stage?.title}`" |
60 | 56 | :title="`Edit stage ${stage?.title}`" |
61 | 57 | @click.stop="handleEdit" |
62 | 58 | @keydown.enter.stop="handleEdit" |
|
76 | 72 | class="btn btn-sm btn-danger mt-1 text-start text-white fw-semibold text-truncate" |
77 | 73 | role="menuitem" |
78 | 74 | tabindex="0" |
79 | | - :aria-label="`Delete stage ${stage?.title}`" |
80 | 75 | :title="`Delete stage ${stage?.title}`" |
81 | 76 | @click.stop="handleDelete" |
82 | 77 | @keydown.enter.stop="handleDelete" |
|
101 | 96 | class="edge-handler bg-success position-absolute top-0 start-50 translate-middle-x rounded-circle" |
102 | 97 | :class="{ 'invisible': !isHoveredOrFocused || showActions }" |
103 | 98 | :position="Position.Top" |
104 | | - :aria-label="`Connect to top of ${stage?.title}`" |
| 99 | + aria-hidden="true" |
105 | 100 | /> |
106 | 101 | <Handle |
107 | 102 | type="source" |
108 | 103 | class="edge-handler bg-success position-absolute bottom-0 start-50 translate-middle-x rounded-circle" |
109 | 104 | :class="{ 'invisible': !isHoveredOrFocused || showActions }" |
110 | 105 | :position="Position.Bottom" |
111 | | - :aria-label="`Connect from bottom of ${stage?.title}`" |
| 106 | + aria-hidden="true" |
112 | 107 | /> |
113 | 108 | <Handle |
114 | 109 | type="target" |
115 | 110 | class="edge-handler bg-success position-absolute top-50 start-0 translate-middle-y rounded-circle" |
116 | 111 | :class="{ 'invisible': !isHoveredOrFocused || showActions }" |
117 | 112 | :position="Position.Left" |
118 | | - :aria-label="`Connect to left of ${stage?.title}`" |
| 113 | + aria-hidden="true" |
119 | 114 | /> |
120 | 115 | <Handle |
121 | 116 | type="source" |
122 | 117 | class="edge-handler bg-success position-absolute top-50 end-0 translate-middle-y rounded-circle" |
123 | 118 | :position="Position.Right" |
124 | 119 | :class="{ 'invisible': !isHoveredOrFocused || showActions }" |
125 | | - :aria-label="`Connect from right of ${stage?.title}`" |
| 120 | + aria-hidden="true" |
126 | 121 | /> |
127 | 122 | </div> |
128 | 123 |
|
129 | 124 | <!-- Header --> |
130 | | - <header class="card-header d-flex justify-content-between align-items-start p-1 pe-0 z-1 position-relative"> |
| 125 | + <div class="card-header d-flex justify-content-between align-items-start p-1 pe-0 z-1 position-relative"> |
131 | 126 | <div class="flex-fill w-75 me-3 min-width-0"> |
132 | | - <h3 |
| 127 | + <span |
133 | 128 | class="h3 d-block card-title mb-1 text-white fw-semibold text-truncate" |
134 | 129 | :title="stage?.title" |
| 130 | + aria-level="3" |
135 | 131 | > |
136 | 132 | {{ stage.title }} |
137 | | - </h3> |
138 | | - <p |
139 | | - class="card-text text-white-50 mb-0 text-truncate" |
| 133 | + </span> |
| 134 | + <span |
| 135 | + class="card-text text-white-50 mb-0 text-truncate d-block" |
140 | 136 | :title="stage?.description" |
141 | 137 | > |
142 | 138 | {{ stage.description }} |
143 | | - </p> |
| 139 | + </span> |
144 | 140 | </div> |
145 | 141 |
|
146 | 142 | <!-- Actions Button --> |
|
155 | 151 | class="btn btn-sm btn-light px-1 py-0" |
156 | 152 | :class="{ 'invisible': !isHoveredOrFocused && !showActions }" |
157 | 153 | style="transition: opacity 0.2s ease;" |
158 | | - :aria-label="showActions ? `Close actions menu for ${stage?.title}` : `Open actions menu for ${stage?.title}`" |
159 | 154 | :title="showActions ? `Close actions menu for ${stage?.title}` : `Open actions menu for ${stage?.title}`" |
160 | 155 | aria-haspopup="true" |
161 | 156 | :aria-expanded="showActions" |
|
173 | 168 | </span> |
174 | 169 | </button> |
175 | 170 | </div> |
176 | | - </header> |
| 171 | + </div> |
177 | 172 |
|
178 | 173 | <!-- Body --> |
179 | 174 | <div class="card-body px-1 py-0 z-1 position-relative"> |
180 | 175 | <div class="d-flex justify-content-between align-items-center"> |
181 | 176 | <span |
182 | 177 | :class="stage.published ? 'bg-success' : 'bg-danger'" |
183 | 178 | class="badge rounded-pill p-1" |
184 | | - role="status" |
185 | | - :aria-label="`Status: ${stage.published ? 'Published' : 'Unpublished'}`" |
186 | 179 | > |
187 | 180 | {{ stage.published ? translate('COM_WORKFLOW_GRAPH_ENABLED') : translate('COM_WORKFLOW_GRAPH_DISABLED') }} |
188 | 181 | </span> |
189 | 182 | <div class="d-flex gap-1"> |
190 | 183 | <span |
191 | 184 | v-if="stage.default" |
192 | 185 | class="badge bg-warning bg-opacity-10 rounded-pill p-1" |
193 | | - role="status" |
194 | | - aria-label="Default stage" |
195 | 186 | > |
196 | 187 | {{ translate('COM_WORKFLOW_GRAPH_DEFAULT') }} |
197 | 188 | </span> |
|
203 | 194 | <span |
204 | 195 | class="position-absolute top-0 end-0 mt-2 me-2 rounded-circle d-block w-10 h-10" |
205 | 196 | :style="badgeStyle" |
206 | | - :aria-label="`Stage color indicator: ${stage?.title}`" |
207 | | - role="img" |
| 197 | + aria-hidden="true" |
208 | 198 | /> |
209 | | - </article> |
| 199 | + </div> |
210 | 200 | </template> |
211 | 201 |
|
212 | 202 | <script> |
|
0 commit comments