@dmitryvim/form-builder 0.2.32 → 0.2.34

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.
@@ -5,6 +5,7 @@ export interface ColourElement extends BaseElement {
5
5
  multiple?: boolean;
6
6
  minCount?: number;
7
7
  maxCount?: number;
8
+ addLabel?: string;
8
9
  }
9
10
  export declare function renderColourElement(element: ColourElement, ctx: RenderContext, wrapper: HTMLElement, pathKey: string): void;
10
11
  export declare function renderMultipleColourElement(element: ColourElement, ctx: RenderContext, wrapper: HTMLElement, pathKey: string): void;
@@ -27,5 +27,9 @@ export interface HandleFileSelectOptions {
27
27
  maxSizeMB?: number;
28
28
  }
29
29
  export declare function handleFileSelect(opts: HandleFileSelectOptions): Promise<void>;
30
+ export interface UploadBatchFailure {
31
+ file: File;
32
+ error: Error;
33
+ }
30
34
  export declare function setupFilesDropHandler(filesContainer: HTMLElement, resourceIds: string[], state: State, updateCallback: () => void, constraints: FileUploadConstraints, pathKey?: string, instance?: FormBuilderInstance | null): void;
31
35
  export declare function setupFilesPickerHandler(filesPicker: HTMLInputElement, resourceIds: string[], state: State, updateCallback: () => void, constraints: FileUploadConstraints, pathKey?: string, instance?: FormBuilderInstance | null): void;
@@ -1,6 +1,6 @@
1
1
  import type { FileElement, FilesElement, RenderContext, ComponentContext, Element } from "../types/index.js";
2
- export { getAllowedExtensions, isFileExtensionAllowed, isFileSizeAllowed } from "./file/constraints.js";
3
- export { renderFilePreview, renderFilePreviewReadonly } from "./file/preview.js";
2
+ export { getAllowedExtensions, isFileExtensionAllowed, isFileSizeAllowed, } from "./file/constraints.js";
3
+ export { renderFilePreview, renderFilePreviewReadonly, } from "./file/preview.js";
4
4
  export { renderResourcePills } from "./file/render-edit.js";
5
5
  export { validateFileElement } from "./file/validate.js";
6
6
  export declare function renderFileElement(element: FileElement, ctx: RenderContext, wrapper: HTMLElement, pathKey: string): void;
@@ -65,6 +65,7 @@ export interface Translations {
65
65
  invalidFileExtension: string;
66
66
  invalidFileMime: string;
67
67
  fileTooLarge: string;
68
+ uploadFailed: string;
68
69
  filesLimitExceeded: string;
69
70
  unsupportedFieldType: string;
70
71
  invalidOption: string;
@@ -44,6 +44,7 @@ export interface TextElement extends BaseElement {
44
44
  multiple?: boolean;
45
45
  minCount?: number;
46
46
  maxCount?: number;
47
+ addLabel?: string;
47
48
  }
48
49
  export interface TextareaElement extends BaseElement {
49
50
  type: "textarea";
@@ -56,6 +57,7 @@ export interface TextareaElement extends BaseElement {
56
57
  minCount?: number;
57
58
  maxCount?: number;
58
59
  autoExpand?: boolean;
60
+ addLabel?: string;
59
61
  }
60
62
  export interface NumberElement extends BaseElement {
61
63
  type: "number";
@@ -67,6 +69,7 @@ export interface NumberElement extends BaseElement {
67
69
  multiple?: boolean;
68
70
  minCount?: number;
69
71
  maxCount?: number;
72
+ addLabel?: string;
70
73
  }
71
74
  export interface SelectElement extends BaseElement {
72
75
  type: "select";
@@ -75,6 +78,7 @@ export interface SelectElement extends BaseElement {
75
78
  multiple?: boolean;
76
79
  minCount?: number;
77
80
  maxCount?: number;
81
+ addLabel?: string;
78
82
  }
79
83
  /**
80
84
  * File accept constraint — either a legacy comma-separated string (e.g. ".jpg,.png")
@@ -118,6 +122,7 @@ export interface ContainerElement extends BaseElement {
118
122
  * Ignored when `multiple: false`.
119
123
  */
120
124
  displayMode?: "stack" | "slides";
125
+ addLabel?: string;
121
126
  }
122
127
  export interface ColourElement extends BaseElement {
123
128
  type: "colour";
@@ -125,6 +130,7 @@ export interface ColourElement extends BaseElement {
125
130
  multiple?: boolean;
126
131
  minCount?: number;
127
132
  maxCount?: number;
133
+ addLabel?: string;
128
134
  }
129
135
  export interface SliderElement extends BaseElement {
130
136
  type: "slider";
@@ -135,6 +141,7 @@ export interface SliderElement extends BaseElement {
135
141
  multiple?: boolean;
136
142
  minCount?: number;
137
143
  maxCount?: number;
144
+ addLabel?: string;
138
145
  }
139
146
  export interface SwitcherElement extends BaseElement {
140
147
  type: "switcher";
@@ -142,6 +149,7 @@ export interface SwitcherElement extends BaseElement {
142
149
  multiple?: boolean;
143
150
  minCount?: number;
144
151
  maxCount?: number;
152
+ addLabel?: string;
145
153
  }
146
154
  export interface GroupElement extends BaseElement {
147
155
  type: "group";
@@ -7,6 +7,48 @@ export declare function applyInputStyles(element: HTMLInputElement | HTMLTextAre
7
7
  * Apply themed hint/description styles to a paragraph element
8
8
  */
9
9
  export declare function applyHintStyles(element: HTMLParagraphElement): void;
10
+ /**
11
+ * Mount a counter element into the field's label row so it sits inline with
12
+ * the heading (e.g. `Tags 3/5`) instead of below the field. The label row is
13
+ * marked with `[data-fb-label-row]` by `createLabelContainer` — the data
14
+ * attribute is the stable hook; layout utility classes may change.
15
+ *
16
+ * No-op when the wrapper has no label row (e.g. nested anonymous wrappers).
17
+ */
18
+ export declare function mountCounterInLabel(wrapper: HTMLElement, counter: HTMLElement): void;
19
+ /**
20
+ * Visual: full-width dashed pill button, optional `+ {label}` centered.
21
+ * Used by every multi-value field type.
22
+ *
23
+ * The counter is returned separately so callers can place it inline with the
24
+ * field label (saving a row). At maxCount both the button and the row are
25
+ * hidden — the counter stays visible wherever the caller mounted it.
26
+ *
27
+ * `classNameSuffix` becomes `add-{suffix}-btn` to preserve test-targetable
28
+ * class names that the existing test suite already queries.
29
+ */
30
+ export interface AddItemRowHandle {
31
+ row: HTMLDivElement;
32
+ button: HTMLButtonElement;
33
+ counter: HTMLSpanElement;
34
+ update: (current: number, max: number) => void;
35
+ }
36
+ export declare function createAddItemRow(classNameSuffix: string, onClick: () => void, options?: {
37
+ label?: string;
38
+ showCounter?: boolean;
39
+ }): AddItemRowHandle;
40
+ /**
41
+ * Slide-sized add tile rendered inside a slides-displayMode container grid.
42
+ * Sits as another grid cell next to existing slides at the same dimensions.
43
+ */
44
+ export interface SlideAddTileHandle {
45
+ tile: HTMLButtonElement;
46
+ counter: HTMLSpanElement;
47
+ update: (current: number, max: number) => void;
48
+ }
49
+ export declare function createSlideAddTile(onClick: () => void, options?: {
50
+ label?: string;
51
+ }): SlideAddTileHandle;
10
52
  /**
11
53
  * Create a styled add button with theme support
12
54
  */
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.2.32",
6
+ "version": "0.2.34",
7
7
  "description": "A reusable JSON schema form builder library",
8
8
  "main": "./dist/cjs/index.cjs",
9
9
  "module": "./dist/esm/index.js",