@ticatec/uniface-element 0.2.0 → 0.2.2

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.
Files changed (209) hide show
  1. package/README.md +320 -1
  2. package/README_CN.md +392 -0
  3. package/dist/accordion/Accordion.svelte +1 -1
  4. package/dist/action-bar/ActionBar.svelte +7 -1
  5. package/dist/attachment-files/FileRender.svelte +1 -1
  6. package/dist/attachment-files/FileUploadBar.svelte +7 -6
  7. package/dist/attachment-files/FileUploadPanel.svelte +2 -2
  8. package/dist/base-calendar/DateContext.js +5 -4
  9. package/dist/base-calendar/YearPickupPanel.svelte +4 -4
  10. package/dist/card/Card.svelte +1 -1
  11. package/dist/card/Card.svelte.d.ts +1 -1
  12. package/dist/cascade-options-select/CascadeOptionSelect.svelte +2 -3
  13. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +46 -1
  14. package/dist/cascade-options-select/CascadePanel.svelte +1 -1
  15. package/dist/checkbox/CheckBox.svelte +1 -1
  16. package/dist/color-picker/ColorPicker.svelte +9 -9
  17. package/dist/color-picker/ColorPicker.svelte.d.ts +0 -2
  18. package/dist/color-picker/ColorPickerPanel.svelte +11 -15
  19. package/dist/color-picker/ColorPickerPanel.svelte.d.ts +1 -1
  20. package/dist/common/CommonPicker.svelte +2 -2
  21. package/dist/common/CommonPicker.svelte.d.ts +1 -1
  22. package/dist/common/MouseClickHandler.d.ts +1 -1
  23. package/dist/common/Popover.svelte +28 -6
  24. package/dist/common/Popover.svelte.d.ts +9 -3
  25. package/dist/common/uniface-utils.js +6 -4
  26. package/dist/common-editor/CommonEditor.svelte +1 -1
  27. package/dist/common-editor/CommonEditor.svelte.d.ts +1 -1
  28. package/dist/common-editor/NumberInput.svelte +1 -1
  29. package/dist/common-editor/NumberInput.svelte.d.ts +1 -1
  30. package/dist/concise-data-table/ConciseListTable.svelte +7 -2
  31. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +1 -0
  32. package/dist/concise-data-table/DataRow.svelte +1 -1
  33. package/dist/concise-data-table/TableOptions.d.ts +1 -1
  34. package/dist/data-table/DataTable.svelte +1 -1
  35. package/dist/data-table/parts/ActionsPanel.svelte +4 -3
  36. package/dist/data-table/parts/ActionsRow.svelte +3 -3
  37. package/dist/data-table/parts/ContentPanel.svelte +3 -2
  38. package/dist/data-table/parts/FixedColumnsPanel.svelte +0 -1
  39. package/dist/data-table/parts/FixedColumnsPanel.svelte.d.ts +1 -2
  40. package/dist/data-table/parts/FixedHeaderPanel.svelte +2 -2
  41. package/dist/data-table/parts/FixedRow.svelte +2 -1
  42. package/dist/data-table/parts/FixedRow.svelte.d.ts +1 -1
  43. package/dist/data-table/parts/HrefCell.svelte +23 -2
  44. package/dist/data-table/parts/PopupMenu.svelte +25 -2
  45. package/dist/data-table/parts/PopupMenu.svelte.d.ts +8 -1
  46. package/dist/date-picker/DatePicker.svelte +0 -1
  47. package/dist/date-picker/DateTimePicker.svelte +3 -3
  48. package/dist/date-picker/ScrollBar.svelte +4 -7
  49. package/dist/date-range/DateRangeEditor.svelte +1 -1
  50. package/dist/dialog/CommonDialog.svelte +8 -5
  51. package/dist/dialog/CommonDialog.svelte.d.ts +2 -1
  52. package/dist/dialog/Dialog.svelte +37 -12
  53. package/dist/dialog/Dialog.svelte.d.ts +4 -3
  54. package/dist/dialog/DialogBoard.svelte +11 -8
  55. package/dist/dialog/DialogWrapper.svelte +10 -0
  56. package/dist/{common-editor/DateInput.svelte.d.ts → dialog/DialogWrapper.svelte.d.ts} +6 -13
  57. package/dist/dialog/Dialogs.js +1 -1
  58. package/dist/dialog/ModalResult.d.ts +5 -0
  59. package/dist/dialog/ModalResult.js +5 -0
  60. package/dist/drawer/Drawer.svelte +1 -1
  61. package/dist/form-field/FormField.svelte +2 -1
  62. package/dist/form-field/FormField.svelte.d.ts +1 -0
  63. package/dist/form-panel/flex-row-form/FormContainer.svelte +1 -1
  64. package/dist/form-panel/grid-form/EmptyCell.svelte +8 -7
  65. package/dist/form-panel/grid-form/EmptyCell.svelte.d.ts +2 -2
  66. package/dist/form-panel/grid-form/GridField.svelte +1 -1
  67. package/dist/i18nRes/i18nRes.d.ts +2 -0
  68. package/dist/i18nRes/i18nRes.js +44 -0
  69. package/dist/i18nRes/index.d.ts +2 -0
  70. package/dist/i18nRes/index.js +2 -0
  71. package/dist/image-files/ImageFilesField.svelte +1 -1
  72. package/dist/indicator/IndicatorBoard.svelte +1 -1
  73. package/dist/inline-cell-editor/InvalidEditor.svelte +1 -0
  74. package/dist/input-options-select/InputOptionsSelect.svelte +6 -6
  75. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +1 -1
  76. package/dist/layout/flex/FlexBlock.svelte +1 -1
  77. package/dist/lookup-editor/LookupEditor.svelte +1 -1
  78. package/dist/memo-editor/MemoEditor.svelte +2 -2
  79. package/dist/message-box/IMessageBox.d.ts +2 -4
  80. package/dist/message-box/IMessageBox.js +4 -6
  81. package/dist/message-box/MessageBoxBoard.svelte +1 -3
  82. package/dist/options-multi-select/OptionsMultiSelect.svelte +1 -1
  83. package/dist/prompts-text-editor/PromptsTextEditor.svelte +2 -2
  84. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +1 -1
  85. package/dist/property-editor/PropertyEditor.svelte +3 -3
  86. package/dist/text-editor/PasswordEditor.svelte +1 -1
  87. package/dist/transfer/Transfer.svelte +17 -12
  88. package/dist/transfer/Transfer.svelte.d.ts +0 -1
  89. package/dist/unit-number-editor/UnitNumberEditor.svelte +2 -2
  90. package/docs/buttons/cn/ActionBar.md +459 -0
  91. package/docs/buttons/cn/Button.md +228 -0
  92. package/docs/buttons/cn/IconButton.md +294 -0
  93. package/docs/buttons/cn/README.md +600 -0
  94. package/docs/buttons/cn/TextButton.md +163 -0
  95. package/docs/buttons/en/ActionBar.md +459 -0
  96. package/docs/buttons/en/Button.md +228 -0
  97. package/docs/buttons/en/IconButton.md +294 -0
  98. package/docs/buttons/en/README.md +600 -0
  99. package/docs/buttons/en/TextButton.md +163 -0
  100. package/docs/containers/cn/accordion.md +622 -0
  101. package/docs/containers/cn/box.md +445 -0
  102. package/docs/containers/cn/card.md +404 -0
  103. package/docs/containers/cn/page.md +576 -0
  104. package/docs/containers/cn/tabs.md +686 -0
  105. package/docs/containers/en/accordion.md +622 -0
  106. package/docs/containers/en/box.md +445 -0
  107. package/docs/containers/en/card.md +404 -0
  108. package/docs/containers/en/page.md +576 -0
  109. package/docs/containers/en/tabs.md +686 -0
  110. package/docs/data-display/cn/concise-data-table.md +731 -0
  111. package/docs/data-display/cn/listbox.md +786 -0
  112. package/docs/data-display/cn/treeview.md +863 -0
  113. package/docs/data-display/en/concise-data-table.md +732 -0
  114. package/docs/data-display/en/listbox.md +786 -0
  115. package/docs/data-display/en/treeview.md +863 -0
  116. package/docs/data-table/cn/README.md +596 -0
  117. package/docs/data-table/en/README.md +596 -0
  118. package/docs/dialog/cn/README.md +767 -0
  119. package/docs/dialog/en/README.md +767 -0
  120. package/docs/form/cn/README.md +847 -0
  121. package/docs/form/en/README.md +847 -0
  122. package/docs/form-components/cn/README.md +495 -0
  123. package/docs/form-components/cn/attachmentfilesfield.md +757 -0
  124. package/docs/form-components/cn/cascade-options-select.md +374 -0
  125. package/docs/form-components/cn/checkbox.md +58 -0
  126. package/docs/form-components/cn/date-picker.md +138 -0
  127. package/docs/form-components/cn/datetime-picker.md +228 -0
  128. package/docs/form-components/cn/group-checkbox.md +405 -0
  129. package/docs/form-components/cn/group-radiobox.md +525 -0
  130. package/docs/form-components/cn/imagefilesfield.md +651 -0
  131. package/docs/form-components/cn/input-options-select.md +250 -0
  132. package/docs/form-components/cn/lookup-editor.md +406 -0
  133. package/docs/form-components/cn/memoeditor.md +409 -0
  134. package/docs/form-components/cn/number-editor.md +261 -0
  135. package/docs/form-components/cn/options-multi-select.md +177 -0
  136. package/docs/form-components/cn/options-select.md +83 -0
  137. package/docs/form-components/cn/passwordeditor.md +538 -0
  138. package/docs/form-components/cn/prompts-text-editor.md +241 -0
  139. package/docs/form-components/cn/radiobutton.md +84 -0
  140. package/docs/form-components/cn/switch.md +178 -0
  141. package/docs/form-components/cn/text-editor.md +142 -0
  142. package/docs/form-components/cn/time-editor.md +159 -0
  143. package/docs/form-components/cn/unit-number-editor.md +164 -0
  144. package/docs/form-components/en/README.md +463 -0
  145. package/docs/form-components/en/attachmentfilesfield.md +757 -0
  146. package/docs/form-components/en/cascade-options-select.md +358 -0
  147. package/docs/form-components/en/checkbox.md +59 -0
  148. package/docs/form-components/en/date-picker.md +138 -0
  149. package/docs/form-components/en/datetime-picker.md +228 -0
  150. package/docs/form-components/en/group-checkbox.md +395 -0
  151. package/docs/form-components/en/group-radiobox.md +498 -0
  152. package/docs/form-components/en/imagefilesfield.md +651 -0
  153. package/docs/form-components/en/input-options-select.md +239 -0
  154. package/docs/form-components/en/lookup-editor.md +389 -0
  155. package/docs/form-components/en/memoeditor.md +409 -0
  156. package/docs/form-components/en/number-editor.md +249 -0
  157. package/docs/form-components/en/options-multi-select.md +177 -0
  158. package/docs/form-components/en/options-select.md +83 -0
  159. package/docs/form-components/en/passwordeditor.md +538 -0
  160. package/docs/form-components/en/prompts-text-editor.md +241 -0
  161. package/docs/form-components/en/radiobutton.md +84 -0
  162. package/docs/form-components/en/switch.md +180 -0
  163. package/docs/form-components/en/text-editor.md +142 -0
  164. package/docs/form-components/en/time-editor.md +159 -0
  165. package/docs/form-components/en/unit-number-editor.md +164 -0
  166. package/docs/form-layout/cn/criteria-field.md +652 -0
  167. package/docs/form-layout/cn/flex-form.md +454 -0
  168. package/docs/form-layout/cn/flex-row-form.md +542 -0
  169. package/docs/form-layout/cn/form-field.md +923 -0
  170. package/docs/form-layout/cn/grid-form.md +676 -0
  171. package/docs/form-layout/en/criteria-field.md +652 -0
  172. package/docs/form-layout/en/flex-form.md +454 -0
  173. package/docs/form-layout/en/flex-row-form.md +542 -0
  174. package/docs/form-layout/en/form-field.md +923 -0
  175. package/docs/form-layout/en/grid-form.md +676 -0
  176. package/docs/global/cn/README.md +534 -0
  177. package/docs/global/en/README.md +534 -0
  178. package/docs/layout/cn/classiclayout.md +460 -0
  179. package/docs/layout/cn/headerlayout.md +524 -0
  180. package/docs/layout/cn/sidebarlayout.md +263 -0
  181. package/docs/layout/en/classiclayout.md +951 -0
  182. package/docs/layout/en/headerlayout.md +524 -0
  183. package/docs/layout/en/sidebarlayout.md +262 -0
  184. package/docs/misc/cn/README.md +1217 -0
  185. package/docs/misc/en/README.md +1217 -0
  186. package/docs/navigation/cn/breadcrumb.md +291 -0
  187. package/docs/navigation/cn/navigator.md +322 -0
  188. package/docs/navigation/cn/navigatormenu.md +512 -0
  189. package/docs/navigation/cn/progressbar.md +199 -0
  190. package/docs/navigation/cn/progressstepbar.md +299 -0
  191. package/docs/navigation/en/breadcrumb.md +291 -0
  192. package/docs/navigation/en/navigator.md +322 -0
  193. package/docs/navigation/en/navigatormenu.md +512 -0
  194. package/docs/navigation/en/progressbar.md +199 -0
  195. package/docs/navigation/en/progressstepbar.md +299 -0
  196. package/docs/search-filters/cn/daterange.md +1156 -0
  197. package/docs/search-filters/cn/numberrange.md +688 -0
  198. package/docs/search-filters/cn/searchbox.md +1582 -0
  199. package/docs/search-filters/en/daterange.md +1156 -0
  200. package/docs/search-filters/en/numberrange.md +688 -0
  201. package/docs/search-filters/en/searchbox.md +1582 -0
  202. package/package.json +53 -13
  203. package/dist/common-editor/DateInput.svelte +0 -27
  204. package/dist/i18n_resources/index.d.ts +0 -3
  205. package/dist/i18n_resources/index.js +0 -3
  206. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.d.ts +0 -0
  207. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.js +0 -0
  208. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.d.ts +0 -0
  209. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.js +0 -0
@@ -0,0 +1,299 @@
1
+ # ProgressStepBar Component
2
+
3
+ The ProgressStepBar component provides a visual representation of multi-step processes, showing the current status and progress through each step.
4
+
5
+ ## Features
6
+
7
+ - **Multi-Step Visualization**: Display progress through multiple sequential steps
8
+ - **Status Indicators**: Pending, processing, and completed states for each step
9
+ - **Flexible Layout**: Both horizontal and vertical orientations
10
+ - **Customizable Styling**: Configurable background colors and styles
11
+ - **Step Information**: Support for titles and optional comments
12
+
13
+ ## Import
14
+
15
+ ```typescript
16
+ import { ProgressStepBar, ProgressStep, ProgressStepStatus } from '@ticatec/uniface-element/ProgressStepBar';
17
+ ```
18
+
19
+ ## Basic Usage
20
+
21
+ ### Horizontal Step Bar
22
+
23
+ ```svelte
24
+ <script>
25
+ import { ProgressStepBar, ProgressStepStatus } from '@ticatec/uniface-element/ProgressStepBar';
26
+
27
+ const steps = [
28
+ {
29
+ topic: "Account Setup",
30
+ comment: "Create your profile",
31
+ status: ProgressStepStatus.Completed
32
+ },
33
+ {
34
+ topic: "Verification",
35
+ comment: "Verify your email",
36
+ status: ProgressStepStatus.Processing
37
+ },
38
+ {
39
+ topic: "Complete Profile",
40
+ comment: "Add personal details",
41
+ status: ProgressStepStatus.Pending
42
+ }
43
+ ];
44
+ </script>
45
+
46
+ <ProgressStepBar
47
+ {steps}
48
+ direction="horizontal"
49
+ />
50
+ ```
51
+
52
+ ### Vertical Step Bar
53
+
54
+ ```svelte
55
+ <script>
56
+ import { ProgressStepBar, ProgressStepStatus } from '@ticatec/uniface-element/ProgressStepBar';
57
+
58
+ const workflowSteps = [
59
+ {
60
+ topic: "Review Document",
61
+ status: ProgressStepStatus.Completed
62
+ },
63
+ {
64
+ topic: "Manager Approval",
65
+ status: ProgressStepStatus.Processing
66
+ },
67
+ {
68
+ topic: "Final Processing",
69
+ status: ProgressStepStatus.Pending
70
+ }
71
+ ];
72
+ </script>
73
+
74
+ <ProgressStepBar
75
+ steps={workflowSteps}
76
+ direction="vertical"
77
+ backgroundColor="#f8f9fa"
78
+ />
79
+ ```
80
+
81
+ ## API Reference
82
+
83
+ ### Props
84
+
85
+ | Property | Type | Default | Description |
86
+ |----------|------|---------|-------------|
87
+ | `steps` | `Array<ProgressStep>` | required | Array of step objects |
88
+ | `direction` | `'vertical' \| 'horizontal'` | `'horizontal'` | Layout direction |
89
+ | `backgroundColor` | `string` | `'var(--uniface-progress-step-bar-bg, #ffffff)'` | Background color |
90
+ | `style` | `string` | `''` | Additional CSS styles |
91
+
92
+ ### ProgressStep Interface
93
+
94
+ ```typescript
95
+ interface ProgressStep {
96
+ topic: string; // Step title
97
+ comment?: string; // Optional step description
98
+ status: ProgressStepStatus; // Current status
99
+ }
100
+ ```
101
+
102
+ ### ProgressStepStatus Enum
103
+
104
+ ```typescript
105
+ enum ProgressStepStatus {
106
+ Pending = 'pending', // Not started
107
+ Processing = 'processing', // Currently active
108
+ Completed = 'completed' // Finished
109
+ }
110
+ ```
111
+
112
+ ## Detailed Examples
113
+
114
+ ### E-commerce Checkout Process
115
+
116
+ ```svelte
117
+ <script>
118
+ import { ProgressStepBar, ProgressStepStatus } from '@ticatec/uniface-element/ProgressStepBar';
119
+
120
+ let checkoutSteps = [
121
+ {
122
+ topic: "Shopping Cart",
123
+ comment: "Review your items",
124
+ status: ProgressStepStatus.Completed
125
+ },
126
+ {
127
+ topic: "Shipping Info",
128
+ comment: "Enter delivery details",
129
+ status: ProgressStepStatus.Completed
130
+ },
131
+ {
132
+ topic: "Payment",
133
+ comment: "Choose payment method",
134
+ status: ProgressStepStatus.Processing
135
+ },
136
+ {
137
+ topic: "Confirmation",
138
+ comment: "Review and complete",
139
+ status: ProgressStepStatus.Pending
140
+ }
141
+ ];
142
+
143
+ const nextStep = () => {
144
+ const currentIndex = checkoutSteps.findIndex(step =>
145
+ step.status === ProgressStepStatus.Processing
146
+ );
147
+
148
+ if (currentIndex >= 0 && currentIndex < checkoutSteps.length - 1) {
149
+ checkoutSteps[currentIndex].status = ProgressStepStatus.Completed;
150
+ checkoutSteps[currentIndex + 1].status = ProgressStepStatus.Processing;
151
+ checkoutSteps = [...checkoutSteps]; // Trigger reactivity
152
+ }
153
+ };
154
+ </script>
155
+
156
+ <div class="checkout-container">
157
+ <ProgressStepBar steps={checkoutSteps} />
158
+ <button on:click={nextStep}>Next Step</button>
159
+ </div>
160
+ ```
161
+
162
+ ### Form Wizard with Validation
163
+
164
+ ```svelte
165
+ <script>
166
+ import { ProgressStepBar, ProgressStepStatus } from '@ticatec/uniface-element/ProgressStepBar';
167
+
168
+ let formSteps = [
169
+ {
170
+ topic: "Personal Information",
171
+ comment: "Name, email, phone",
172
+ status: ProgressStepStatus.Processing
173
+ },
174
+ {
175
+ topic: "Address Details",
176
+ comment: "Shipping and billing",
177
+ status: ProgressStepStatus.Pending
178
+ },
179
+ {
180
+ topic: "Preferences",
181
+ comment: "Communication settings",
182
+ status: ProgressStepStatus.Pending
183
+ }
184
+ ];
185
+
186
+ let currentStepIndex = 0;
187
+
188
+ const completeCurrentStep = () => {
189
+ if (currentStepIndex < formSteps.length) {
190
+ formSteps[currentStepIndex].status = ProgressStepStatus.Completed;
191
+
192
+ if (currentStepIndex < formSteps.length - 1) {
193
+ currentStepIndex++;
194
+ formSteps[currentStepIndex].status = ProgressStepStatus.Processing;
195
+ }
196
+
197
+ formSteps = [...formSteps];
198
+ }
199
+ };
200
+ </script>
201
+
202
+ <div class="form-wizard">
203
+ <ProgressStepBar
204
+ steps={formSteps}
205
+ direction="horizontal"
206
+ style="margin-bottom: 20px;"
207
+ />
208
+
209
+ <div class="step-content">
210
+ <h3>{formSteps[currentStepIndex]?.topic}</h3>
211
+ <p>{formSteps[currentStepIndex]?.comment}</p>
212
+
213
+ {#if currentStepIndex < formSteps.length}
214
+ <button on:click={completeCurrentStep}>
215
+ Complete Step
216
+ </button>
217
+ {/if}
218
+ </div>
219
+ </div>
220
+ ```
221
+
222
+ ### File Upload Process
223
+
224
+ ```svelte
225
+ <script>
226
+ import { ProgressStepBar, ProgressStepStatus } from '@ticatec/uniface-element/ProgressStepBar';
227
+
228
+ let uploadSteps = [
229
+ {
230
+ topic: "Select Files",
231
+ status: ProgressStepStatus.Completed
232
+ },
233
+ {
234
+ topic: "Upload",
235
+ comment: "Transferring files...",
236
+ status: ProgressStepStatus.Processing
237
+ },
238
+ {
239
+ topic: "Processing",
240
+ comment: "Analyzing content",
241
+ status: ProgressStepStatus.Pending
242
+ },
243
+ {
244
+ topic: "Complete",
245
+ comment: "Files ready",
246
+ status: ProgressStepStatus.Pending
247
+ }
248
+ ];
249
+
250
+ const simulateUpload = async () => {
251
+ // Simulate upload process
252
+ await new Promise(resolve => setTimeout(resolve, 2000));
253
+ uploadSteps[1].status = ProgressStepStatus.Completed;
254
+ uploadSteps[2].status = ProgressStepStatus.Processing;
255
+ uploadSteps = [...uploadSteps];
256
+
257
+ // Simulate processing
258
+ await new Promise(resolve => setTimeout(resolve, 1500));
259
+ uploadSteps[2].status = ProgressStepStatus.Completed;
260
+ uploadSteps[3].status = ProgressStepStatus.Processing;
261
+ uploadSteps = [...uploadSteps];
262
+
263
+ // Complete
264
+ await new Promise(resolve => setTimeout(resolve, 1000));
265
+ uploadSteps[3].status = ProgressStepStatus.Completed;
266
+ uploadSteps = [...uploadSteps];
267
+ };
268
+ </script>
269
+
270
+ <ProgressStepBar
271
+ steps={uploadSteps}
272
+ direction="vertical"
273
+ />
274
+ <button on:click={simulateUpload}>Start Upload</button>
275
+ ```
276
+
277
+ ## Best Practices
278
+
279
+ 1. **Clear Step Names**: Use descriptive, action-oriented step titles
280
+ 2. **Helpful Comments**: Provide context for what happens in each step
281
+ 3. **Logical Progression**: Ensure steps follow a natural sequence
282
+ 4. **Status Management**: Keep status updates synchronized with actual progress
283
+ 5. **User Guidance**: Show users what's expected in each step
284
+ 6. **Error Handling**: Consider how to handle step failures or validation errors
285
+ 7. **Responsive Design**: Test both orientations on different screen sizes
286
+
287
+ ## Styling Tips
288
+
289
+ - Use consistent spacing and typography across steps
290
+ - Consider using custom CSS variables for theme integration
291
+ - Test visibility and contrast for status indicators
292
+ - Ensure adequate touch targets for mobile interfaces
293
+
294
+ ## Accessibility Notes
295
+
296
+ - Step progression provides clear visual feedback
297
+ - Status changes are indicated through styling and positioning
298
+ - Consider adding ARIA labels for screen readers when implementing custom interactions
299
+ - Ensure sufficient color contrast for status indicators