@dmitryvim/form-builder 0.2.16 → 0.2.18

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.
@@ -3,6 +3,7 @@ import { renderTextElement, renderMultipleTextElement } from "./text.js";
3
3
  import { renderTextareaElement, renderMultipleTextareaElement } from "./textarea.js";
4
4
  import { renderNumberElement, renderMultipleNumberElement } from "./number.js";
5
5
  import { renderSelectElement, renderMultipleSelectElement } from "./select.js";
6
+ import { renderSwitcherElement, renderMultipleSwitcherElement } from "./switcher.js";
6
7
  import { renderFileElement, renderFilesElement, renderMultipleFileElement } from "./file.js";
7
8
  import { renderColourElement, renderMultipleColourElement } from "./colour.js";
8
9
  import { renderSliderElement, renderMultipleSliderElement } from "./slider.js";
@@ -10,4 +11,4 @@ import { renderSingleContainerElement, renderMultipleContainerElement, setValida
10
11
  import { renderGroupElement } from "./group.js";
11
12
  export declare function renderElement(element: Element, ctx: RenderContext): HTMLElement;
12
13
  export { setContainerValidateElement };
13
- export { renderTextElement, renderMultipleTextElement, renderTextareaElement, renderMultipleTextareaElement, renderNumberElement, renderMultipleNumberElement, renderSelectElement, renderMultipleSelectElement, renderFileElement, renderFilesElement, renderMultipleFileElement, renderColourElement, renderMultipleColourElement, renderSliderElement, renderMultipleSliderElement, renderSingleContainerElement, renderMultipleContainerElement, renderGroupElement, };
14
+ export { renderTextElement, renderMultipleTextElement, renderTextareaElement, renderMultipleTextareaElement, renderNumberElement, renderMultipleNumberElement, renderSelectElement, renderMultipleSelectElement, renderSwitcherElement, renderMultipleSwitcherElement, renderFileElement, renderFilesElement, renderMultipleFileElement, renderColourElement, renderMultipleColourElement, renderSliderElement, renderMultipleSliderElement, renderSingleContainerElement, renderMultipleContainerElement, renderGroupElement, };
@@ -0,0 +1,13 @@
1
+ import type { SwitcherElement, RenderContext, ComponentContext, ValidationResult, Element } from "../types/index.js";
2
+ export declare function renderSwitcherElement(element: SwitcherElement, ctx: RenderContext, wrapper: HTMLElement, pathKey: string): void;
3
+ export declare function renderMultipleSwitcherElement(element: SwitcherElement, ctx: RenderContext, wrapper: HTMLElement, pathKey: string): void;
4
+ /**
5
+ * Validate switcher field and return extracted value with errors.
6
+ * Mirrors select validation logic — reads from hidden <input> elements.
7
+ */
8
+ export declare function validateSwitcherElement(element: Element, key: string, context: ComponentContext): ValidationResult;
9
+ /**
10
+ * Update switcher field value in the DOM without re-render.
11
+ * Updates the hidden input value and refreshes button visual states.
12
+ */
13
+ export declare function updateSwitcherField(element: Element, fieldPath: string, value: any, context: ComponentContext): void;
@@ -6,6 +6,7 @@ export declare function renderMultipleTextareaElement(element: TextareaElement,
6
6
  */
7
7
  export declare function validateTextareaElement(element: TextareaElement, key: string, context: ComponentContext): ValidationResult;
8
8
  /**
9
- * Update textarea field - delegates to text updater since they share update logic
9
+ * Update textarea field - delegates to text updater since they share update logic,
10
+ * then triggers resize on autoExpand textareas.
10
11
  */
11
12
  export declare function updateTextareaField(element: TextareaElement, fieldPath: string, value: any, context: ComponentContext): void;
@@ -40,6 +40,7 @@ export interface Translations {
40
40
  minFiles: string;
41
41
  maxFiles: string;
42
42
  unsupportedFieldType: string;
43
+ invalidOption: string;
43
44
  }
44
45
  export type Locale = "en" | "ru" | (string & {});
45
46
  export interface Config {
@@ -1,4 +1,4 @@
1
- export type { SelectOption, ElementAction, EnableCondition, BaseElement, TextElement, TextareaElement, NumberElement, SelectElement, FileElement, FilesElement, ColourElement, SliderElement, ContainerElement, GroupElement, Element, Schema, ExternalAction, FormData, RenderContext, } from "./schema.js";
1
+ export type { SelectOption, ElementAction, EnableCondition, BaseElement, TextElement, TextareaElement, NumberElement, SelectElement, SwitcherElement, FileElement, FilesElement, ColourElement, SliderElement, ContainerElement, GroupElement, Element, Schema, ExternalAction, FormData, RenderContext, } from "./schema.js";
2
2
  export type { Translations, Locale, Config, ResourceMetadata, } from "./config.js";
3
3
  export type { State } from "./state.js";
4
4
  export type { ComponentContext, ValidationResult, ComponentValidator, ComponentUpdater, ComponentOperations, } from "./component-operations.js";
@@ -54,6 +54,7 @@ export interface TextareaElement extends BaseElement {
54
54
  multiple?: boolean;
55
55
  minCount?: number;
56
56
  maxCount?: number;
57
+ autoExpand?: boolean;
57
58
  }
58
59
  export interface NumberElement extends BaseElement {
59
60
  type: "number";
@@ -119,6 +120,13 @@ export interface SliderElement extends BaseElement {
119
120
  minCount?: number;
120
121
  maxCount?: number;
121
122
  }
123
+ export interface SwitcherElement extends BaseElement {
124
+ type: "switcher";
125
+ options: SelectOption[];
126
+ multiple?: boolean;
127
+ minCount?: number;
128
+ maxCount?: number;
129
+ }
122
130
  export interface GroupElement extends BaseElement {
123
131
  type: "group";
124
132
  elements: Element[];
@@ -127,7 +135,7 @@ export interface GroupElement extends BaseElement {
127
135
  max?: number;
128
136
  };
129
137
  }
130
- export type Element = TextElement | TextareaElement | NumberElement | SelectElement | FileElement | FilesElement | ColourElement | SliderElement | ContainerElement | GroupElement;
138
+ export type Element = TextElement | TextareaElement | NumberElement | SelectElement | SwitcherElement | FileElement | FilesElement | ColourElement | SliderElement | ContainerElement | GroupElement;
131
139
  export interface Schema {
132
140
  version?: string;
133
141
  elements: Element[];
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.2.16",
6
+ "version": "0.2.18",
7
7
  "description": "A reusable JSON schema form builder library",
8
8
  "main": "./dist/cjs/index.cjs",
9
9
  "module": "./dist/esm/index.js",
@@ -31,7 +31,7 @@
31
31
  "build:demo": "rm -rf dist/demo && mkdir -p dist/demo && cp -R public/. dist/demo && cp dist/browser/formbuilder.min.js dist/demo/form-builder.js",
32
32
  "build:artifacts": "npm run clean && npm run build:lib && npm run build:types && npm run build:browser",
33
33
  "build": "npm run build:artifacts && npm run build:demo",
34
- "dev": "npm run build && serve dist/demo --single",
34
+ "dev": "npm run build && serve dist/demo",
35
35
  "pretest": "npm run build",
36
36
  "test": "jest",
37
37
  "format": "prettier --write .",