@synopackageland/ui 0.17.11 → 0.17.12

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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.12 (2026-10-30)
4
+
5
+ - Upload callbacks can throw an error with `final: true` to fail immediately, disable manual retry and hide retry controls for permanent failures; other errors still retry twice by default.
6
+
3
7
  ## 0.17.11 (2026-10-30)
4
8
 
5
9
  Settings forms follow DSM's own Control Panel layout by default. Two DOM changes: `Fieldset`'s chevron points up while open and down while collapsed (it was down and right), and a `password` `Input` is now an outer `<span>` (layout attrs) around an inner one holding the field and its toggle.
package/README.md CHANGED
@@ -674,6 +674,23 @@ size (arrow keys and swipes), and `UploadQueue` lists uploads with progress,
674
674
  retry and cancel. `useUploadQueue(upload, { concurrency, retries })` runs the
675
675
  uploads it shows. `FilePicker` takes pasted files with `paste`.
676
676
 
677
+ An upload failure is retried twice by default, after 1 second and 3 seconds.
678
+ For permanent errors such as a refused file type, an oversized file or denied
679
+ permission, throw an `Error` with `final: true`:
680
+
681
+ ```ts
682
+ throw Object.assign(new Error('This file type is not allowed'), { final: true })
683
+ ```
684
+
685
+ The queue immediately marks that task `failed`, keeps the error message and
686
+ calls `onFailed` once. Its `final` flag disables `queue.retry(key)` and hides
687
+ the task's retry button in `UploadQueue`; "Retry all" appears only when at
688
+ least two failed tasks can be retried. Other errors keep the usual retry
689
+ behavior. This also applies to `RichTextEditor`'s `upload` callback. Apps
690
+ providing their own `UploadQueueItem[]` can set `final: true` on failed items
691
+ and should skip them in their `retryAll` handler; the queue's `retry` method
692
+ already does so.
693
+
677
694
  ```vue
678
695
  <CommentItem v-for="c in comments" :key="c.id" :author="c.author.name" :time="c.when" :body="c.body" :mentions="people" :files="fileById" :edited="!!c.editedAt" :deleted="c.deleted" />
679
696
  <RichTextEditor v-model="text" variant="compact" :candidates="people" :filter="false" :maxlength="4000" :upload="sendFile" :files="fileById" @search="findPeople" @submit="post" />
@@ -6,6 +6,8 @@ export type UploadQueueItem = {
6
6
  loaded: number;
7
7
  status: UploadStatus;
8
8
  error?: string;
9
+ /** A permanent failure; hides this task's retry button and excludes it from Retry all. */
10
+ final?: boolean;
9
11
  };
10
12
  type __VLS_Props = {
11
13
  tasks: UploadQueueItem[];