@synopackageland/ui 0.17.10 → 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 +14 -0
- package/README.md +17 -0
- package/dist/components/composite/form/FormItem.vue.d.ts +1 -1
- package/dist/components/composite/form-note/FormNote.vue.d.ts +6 -2
- package/dist/components/composite/stat-tile/StatTile.vue.d.ts +1 -1
- package/dist/components/composite/upload-queue/UploadQueue.vue.d.ts +2 -0
- package/dist/components/containers/fieldset/Fieldset.vue.d.ts +6 -2
- package/dist/components/primitives/input/Input.vue.d.ts +13 -1
- package/dist/index.js +3022 -2978
- package/dist/json-preview/preview.js +768 -753
- package/dist/lib/uploadQueue.d.ts +5 -1
- package/dist/reka-runtime.json +1 -1
- package/dist/theme.css +1 -1
- package/dist/themes/dsm7-embedded-theme.css +1 -1
- package/dist/themes/dsm7-embedded.css +1 -1
- package/dist/themes/dsm7.css +1 -1
- package/docs/layout-rules.md +7 -3
- package/docs/theme-hooks.md +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
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
|
+
|
|
7
|
+
## 0.17.11 (2026-10-30)
|
|
8
|
+
|
|
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.
|
|
10
|
+
|
|
11
|
+
- `Fieldset` takes `description` (or `#description`): one line under the title across the whole section width (`data-fieldset-description`).
|
|
12
|
+
- `Input` takes `unit` (or `#unit`): text such as s, MB or characters right after the field, a number's too, dimmed while disabled (`data-ui-input-unit`).
|
|
13
|
+
- A `text-only` `FormItem` sets its value level with the label, so a read-only value and an `#after` button (Edit) line up with the rows around it.
|
|
14
|
+
- `FormNote` with one remark reads "Note: …" on one line; two or more `items` keep the heading over a list. `inset` starts it on the field column (inside a `FormGroup` too), one field gap under the field it is about (`data-inset`).
|
|
15
|
+
- docs/layout-rules.md describes the whole settings page: section description, read-only value with Edit, dependent options in a `FormGroup`, section buttons inside the group, units, notes and one Apply in the footer. The Control Panel story adds Network > General.
|
|
16
|
+
|
|
3
17
|
## 0.17.10 (2026-10-30)
|
|
4
18
|
|
|
5
19
|
Breaking, with no compatibility layer: the comment Markdown functions are renamed, `MentionTextarea` is gone, and comment bodies read a little differently. A stored body that relied on the old reading needs a one-time conversion; the library keeps no old names or fallback.
|
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" />
|
|
@@ -40,7 +40,7 @@ type __VLS_Props = {
|
|
|
40
40
|
defaultValidateTrigger?: ValidateTrigger;
|
|
41
41
|
/** Validates once on mount. */
|
|
42
42
|
immediateValidate?: boolean;
|
|
43
|
-
/** The slot content is plain text, not a control. */
|
|
43
|
+
/** The slot content is plain text, not a control: a read-only value, set level with the label. An `#after` button follows the field column. */
|
|
44
44
|
textOnly?: boolean;
|
|
45
45
|
/** Indentation level (multiples of 28px) or any CSS length. */
|
|
46
46
|
indent?: string | number;
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
/** Replaces the "Note:" heading. */
|
|
3
3
|
title?: string;
|
|
4
|
-
/** One bullet each; the default slot follows them. */
|
|
4
|
+
/** One bullet each; a single item reads inline after the heading. The default slot follows them. */
|
|
5
5
|
items?: string[];
|
|
6
|
+
/** Starts the note on the field column, past the label column (inside a FormGroup too). */
|
|
7
|
+
inset?: boolean;
|
|
6
8
|
};
|
|
7
|
-
declare var __VLS_1: {};
|
|
9
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
8
10
|
type __VLS_Slots = {} & {
|
|
9
11
|
default?: (props: typeof __VLS_1) => any;
|
|
12
|
+
} & {
|
|
13
|
+
default?: (props: typeof __VLS_3) => any;
|
|
10
14
|
};
|
|
11
15
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
12
16
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -28,8 +28,8 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
28
28
|
disabled: boolean;
|
|
29
29
|
value: string | number;
|
|
30
30
|
modelValue: boolean;
|
|
31
|
-
tone: StatTileTone;
|
|
32
31
|
unit: string;
|
|
32
|
+
tone: StatTileTone;
|
|
33
33
|
note: string;
|
|
34
34
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
35
35
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -5,6 +5,8 @@ export type FieldsetTitle = string | {
|
|
|
5
5
|
export type FieldsetCollapseTrigger = 'click' | 'dblclick' | 'none';
|
|
6
6
|
type __VLS_Props = {
|
|
7
7
|
title?: FieldsetTitle;
|
|
8
|
+
/** One line under the title, across the whole width (DSM's "Enter the server name, ..."). */
|
|
9
|
+
description?: string;
|
|
8
10
|
collapsible?: boolean;
|
|
9
11
|
/** Mouse gesture that toggles; Enter/Space always works on the header. */
|
|
10
12
|
collapseTriggerEvent?: FieldsetCollapseTrigger;
|
|
@@ -12,7 +14,7 @@ type __VLS_Props = {
|
|
|
12
14
|
/** Bound with `v-model:collapsed`; defaults to expanded when left unbound. */
|
|
13
15
|
collapsed?: boolean;
|
|
14
16
|
};
|
|
15
|
-
declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {};
|
|
17
|
+
declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {};
|
|
16
18
|
type __VLS_Slots = {} & {
|
|
17
19
|
'collapse-icon'?: (props: typeof __VLS_1) => any;
|
|
18
20
|
} & {
|
|
@@ -20,7 +22,9 @@ type __VLS_Slots = {} & {
|
|
|
20
22
|
} & {
|
|
21
23
|
title?: (props: typeof __VLS_10) => any;
|
|
22
24
|
} & {
|
|
23
|
-
|
|
25
|
+
description?: (props: typeof __VLS_12) => any;
|
|
26
|
+
} & {
|
|
27
|
+
default?: (props: typeof __VLS_14) => any;
|
|
24
28
|
};
|
|
25
29
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
26
30
|
isCollapsed: import('vue').ComputedRef<boolean>;
|
|
@@ -10,8 +10,14 @@ type __VLS_Props = {
|
|
|
10
10
|
name?: string;
|
|
11
11
|
ariaLabel?: string;
|
|
12
12
|
ariaLabelledby?: string;
|
|
13
|
+
/** Text right after the field, such as s, MB or characters; the `#unit` slot replaces it. */
|
|
14
|
+
unit?: string;
|
|
13
15
|
};
|
|
14
|
-
declare
|
|
16
|
+
declare var __VLS_11: {};
|
|
17
|
+
type __VLS_Slots = {} & {
|
|
18
|
+
unit?: (props: typeof __VLS_11) => any;
|
|
19
|
+
};
|
|
20
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
15
21
|
"update:modelValue": (value: string) => any;
|
|
16
22
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
23
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
@@ -23,5 +29,11 @@ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {
|
|
|
23
29
|
readonly: boolean;
|
|
24
30
|
invalid: boolean;
|
|
25
31
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
32
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
26
33
|
declare const _default: typeof __VLS_export;
|
|
27
34
|
export default _default;
|
|
35
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
36
|
+
new (): {
|
|
37
|
+
$slots: S;
|
|
38
|
+
};
|
|
39
|
+
};
|