@golemui/gui-mcp 1.5.0-rc.0 → 1.5.0-rc.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.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
## 1.5.0-rc.1 (2026-09-07)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **gui-components:** surface upload errors via validation injection and icon retry button ([#357](https://github.com/golemui/golemui/pull/357))
|
|
6
|
+
|
|
7
|
+
### 🩹 Fixes
|
|
8
|
+
|
|
9
|
+
- **gui-components:** add interrupted message and reconcile file upload queue ([#359](https://github.com/golemui/golemui/pull/359))
|
|
10
|
+
|
|
11
|
+
### ❤️ Thank You
|
|
12
|
+
|
|
13
|
+
- Raúl Jiménez @Elecash
|
|
14
|
+
|
|
15
|
+
## 1.5.0-rc.0 (2026-09-04)
|
|
16
|
+
|
|
17
|
+
### 🚀 Features
|
|
18
|
+
|
|
19
|
+
- **lit:** shim querySelector and export safeDefine for SSR ([#351](https://github.com/golemui/golemui/pull/351))
|
|
20
|
+
- **vue:** nuxt support ([#335](https://github.com/golemui/golemui/pull/335))
|
|
21
|
+
- **gui-components:** add file upload widgets ([#332](https://github.com/golemui/golemui/pull/332))
|
|
22
|
+
|
|
23
|
+
### ❤️ Thank You
|
|
24
|
+
|
|
25
|
+
- Raúl Jiménez @Elecash
|
|
26
|
+
|
|
1
27
|
## 1.4.0 (2026-08-26)
|
|
2
28
|
|
|
3
29
|
### 🚀 Features
|
package/cli.js
CHANGED
|
@@ -5,8 +5,8 @@ import { fileURLToPath } from "node:url";
|
|
|
5
5
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
6
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
7
|
import { ListToolsRequestSchema, CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
-
import { d as checkDxCode, r as resolveDxFramework, f as listDxFactoriesCatalog, b as DX_LIST_FACTORIES_TOOL, g as getDxSpec, a as DX_GET_SPEC_TOOL, D as DX_CHECK_CODE_TOOL } from "./list-dx-factories-
|
|
9
|
-
import { v as validateFormDefinition, c as JSON_VALIDATE_FORM_DEFINITION_TOOL, g as generateFromJsonSchema, a as JSON_GENERATE_FROM_SCHEMA_TOOL, d as generateFromOpenapi, J as JSON_GENERATE_FROM_OPENAPI_TOOL, f as getWidgetSpec, b as JSON_GET_WIDGET_SPEC_TOOL, e as getConcept, G as GET_CONCEPT_TOOL } from "./get-concept-
|
|
8
|
+
import { d as checkDxCode, r as resolveDxFramework, f as listDxFactoriesCatalog, b as DX_LIST_FACTORIES_TOOL, g as getDxSpec, a as DX_GET_SPEC_TOOL, D as DX_CHECK_CODE_TOOL } from "./list-dx-factories-hQNWmAmY.js";
|
|
9
|
+
import { v as validateFormDefinition, c as JSON_VALIDATE_FORM_DEFINITION_TOOL, g as generateFromJsonSchema, a as JSON_GENERATE_FROM_SCHEMA_TOOL, d as generateFromOpenapi, J as JSON_GENERATE_FROM_OPENAPI_TOOL, f as getWidgetSpec, b as JSON_GET_WIDGET_SPEC_TOOL, e as getConcept, G as GET_CONCEPT_TOOL } from "./get-concept-CsLx7Y5b.js";
|
|
10
10
|
const USAGE = `Usage: golemui-mcp [command]
|
|
11
11
|
|
|
12
12
|
Validate GolemUI forms from the command line (no MCP client needed).
|
|
@@ -502,9 +502,9 @@ const $schema$w = "https://json-schema.org/draft/2020-12/schema";
|
|
|
502
502
|
const $id$w = "https://golemui.com/schemas/gui/components/fileupload.schema.json";
|
|
503
503
|
const title$w = "File Upload Widget";
|
|
504
504
|
const type$w = "object";
|
|
505
|
-
const $defs$w = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "
|
|
505
|
+
const $defs$w = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "retryAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeIconProp": { "type": "string" }, "retryIconProp": { "type": "string" }, "maxSizeMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "acceptMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "interruptedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "missingServiceMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "uploadedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "failedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" } };
|
|
506
506
|
const allOf$w = [{ "$ref": "../core/common.schema.json#/$defs/baseWidget" }];
|
|
507
|
-
const properties$v = { "kind": { "const": "input" }, "type": { "const": "fileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "oneOf": [{ "$ref": "#/$defs/fileItem" }, { "type": "null" }] }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "
|
|
507
|
+
const properties$v = { "kind": { "const": "input" }, "type": { "const": "fileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "oneOf": [{ "$ref": "#/$defs/fileItem" }, { "type": "null" }] }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "retryAriaLabel": { "$ref": "#/$defs/retryAriaLabelProp" }, "removeIcon": { "$ref": "#/$defs/removeIconProp" }, "retryIcon": { "$ref": "#/$defs/retryIconProp" }, "maxSizeMessage": { "$ref": "#/$defs/maxSizeMessageProp" }, "acceptMessage": { "$ref": "#/$defs/acceptMessageProp" }, "interruptedMessage": { "$ref": "#/$defs/interruptedMessageProp" }, "missingServiceMessage": { "$ref": "#/$defs/missingServiceMessageProp" }, "uploadedMessage": { "$ref": "#/$defs/uploadedMessageProp" }, "removedMessage": { "$ref": "#/$defs/removedMessageProp" }, "failedMessage": { "$ref": "#/$defs/failedMessageProp" } }, "patternProperties": { "^hint\\.[^.]+$": { "$ref": "#/$defs/hintProp" }, "^icon\\.[^.]+$": { "$ref": "#/$defs/iconProp" }, "^accept\\.[^.]+$": { "$ref": "#/$defs/acceptProp" }, "^maxSize\\.[^.]+$": { "$ref": "#/$defs/maxSizeProp" }, "^buttonLabel\\.[^.]+$": { "$ref": "#/$defs/buttonLabelProp" }, "^removeAriaLabel\\.[^.]+$": { "$ref": "#/$defs/removeAriaLabelProp" }, "^cancelAriaLabel\\.[^.]+$": { "$ref": "#/$defs/cancelAriaLabelProp" }, "^retryAriaLabel\\.[^.]+$": { "$ref": "#/$defs/retryAriaLabelProp" }, "^removeIcon\\.[^.]+$": { "$ref": "#/$defs/removeIconProp" }, "^retryIcon\\.[^.]+$": { "$ref": "#/$defs/retryIconProp" }, "^maxSizeMessage\\.[^.]+$": { "$ref": "#/$defs/maxSizeMessageProp" }, "^acceptMessage\\.[^.]+$": { "$ref": "#/$defs/acceptMessageProp" }, "^interruptedMessage\\.[^.]+$": { "$ref": "#/$defs/interruptedMessageProp" }, "^missingServiceMessage\\.[^.]+$": { "$ref": "#/$defs/missingServiceMessageProp" }, "^uploadedMessage\\.[^.]+$": { "$ref": "#/$defs/uploadedMessageProp" }, "^removedMessage\\.[^.]+$": { "$ref": "#/$defs/removedMessageProp" }, "^failedMessage\\.[^.]+$": { "$ref": "#/$defs/failedMessageProp" } }, "additionalProperties": false } };
|
|
508
508
|
const patternProperties$p = { "^disabled\\.[^.]+$": { "$ref": "#/$defs/disabledDef" }, "^readonly\\.[^.]+$": { "$ref": "#/$defs/readonlyDef" }, "^label\\.[^.]+$": { "$ref": "#/$defs/labelDef" }, "^validator\\.[^.]+$": { "$ref": "../validators.schema.json#/$defs/validator" } };
|
|
509
509
|
const required$v = ["kind", "type", "path"];
|
|
510
510
|
const unevaluatedProperties$w = false;
|
|
@@ -590,9 +590,9 @@ const $schema$s = "https://json-schema.org/draft/2020-12/schema";
|
|
|
590
590
|
const $id$s = "https://golemui.com/schemas/gui/components/multifileupload.schema.json";
|
|
591
591
|
const title$s = "Multi File Upload Widget";
|
|
592
592
|
const type$s = "object";
|
|
593
|
-
const $defs$s = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "
|
|
593
|
+
const $defs$s = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "retryAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeIconProp": { "type": "string" }, "retryIconProp": { "type": "string" }, "maxSizeMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "acceptMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "interruptedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "missingServiceMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "uploadedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "failedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" } };
|
|
594
594
|
const allOf$s = [{ "$ref": "../core/common.schema.json#/$defs/baseWidget" }];
|
|
595
|
-
const properties$r = { "kind": { "const": "input" }, "type": { "const": "multiFileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "type": "array", "items": { "$ref": "#/$defs/fileItem" } }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "
|
|
595
|
+
const properties$r = { "kind": { "const": "input" }, "type": { "const": "multiFileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "type": "array", "items": { "$ref": "#/$defs/fileItem" } }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "retryAriaLabel": { "$ref": "#/$defs/retryAriaLabelProp" }, "removeIcon": { "$ref": "#/$defs/removeIconProp" }, "retryIcon": { "$ref": "#/$defs/retryIconProp" }, "maxSizeMessage": { "$ref": "#/$defs/maxSizeMessageProp" }, "acceptMessage": { "$ref": "#/$defs/acceptMessageProp" }, "interruptedMessage": { "$ref": "#/$defs/interruptedMessageProp" }, "missingServiceMessage": { "$ref": "#/$defs/missingServiceMessageProp" }, "uploadedMessage": { "$ref": "#/$defs/uploadedMessageProp" }, "removedMessage": { "$ref": "#/$defs/removedMessageProp" }, "failedMessage": { "$ref": "#/$defs/failedMessageProp" } }, "patternProperties": { "^hint\\.[^.]+$": { "$ref": "#/$defs/hintProp" }, "^icon\\.[^.]+$": { "$ref": "#/$defs/iconProp" }, "^accept\\.[^.]+$": { "$ref": "#/$defs/acceptProp" }, "^maxSize\\.[^.]+$": { "$ref": "#/$defs/maxSizeProp" }, "^buttonLabel\\.[^.]+$": { "$ref": "#/$defs/buttonLabelProp" }, "^removeAriaLabel\\.[^.]+$": { "$ref": "#/$defs/removeAriaLabelProp" }, "^cancelAriaLabel\\.[^.]+$": { "$ref": "#/$defs/cancelAriaLabelProp" }, "^retryAriaLabel\\.[^.]+$": { "$ref": "#/$defs/retryAriaLabelProp" }, "^removeIcon\\.[^.]+$": { "$ref": "#/$defs/removeIconProp" }, "^retryIcon\\.[^.]+$": { "$ref": "#/$defs/retryIconProp" }, "^maxSizeMessage\\.[^.]+$": { "$ref": "#/$defs/maxSizeMessageProp" }, "^acceptMessage\\.[^.]+$": { "$ref": "#/$defs/acceptMessageProp" }, "^interruptedMessage\\.[^.]+$": { "$ref": "#/$defs/interruptedMessageProp" }, "^missingServiceMessage\\.[^.]+$": { "$ref": "#/$defs/missingServiceMessageProp" }, "^uploadedMessage\\.[^.]+$": { "$ref": "#/$defs/uploadedMessageProp" }, "^removedMessage\\.[^.]+$": { "$ref": "#/$defs/removedMessageProp" }, "^failedMessage\\.[^.]+$": { "$ref": "#/$defs/failedMessageProp" } }, "additionalProperties": false } };
|
|
596
596
|
const patternProperties$l = { "^disabled\\.[^.]+$": { "$ref": "#/$defs/disabledDef" }, "^readonly\\.[^.]+$": { "$ref": "#/$defs/readonlyDef" }, "^label\\.[^.]+$": { "$ref": "#/$defs/labelDef" }, "^validator\\.[^.]+$": { "$ref": "../validators.schema.json#/$defs/validator" } };
|
|
597
597
|
const required$r = ["kind", "type", "path"];
|
|
598
598
|
const unevaluatedProperties$s = false;
|
|
@@ -2888,9 +2888,9 @@ const NOTES = {
|
|
|
2888
2888
|
fileUpload: [
|
|
2889
2889
|
"Single-file upload rendered as a one-line input: the box is the drop target and holds the upload button; while the file uploads the box itself becomes the progress bar; once done it shows the file name with a remove button.",
|
|
2890
2890
|
'REQUIRES a host transport in the form init config: `dependencies: { uploadService: { upload(file, { id, path, onProgress, signal }) => Promise<unknown>, remove?(item) => Promise<void> } }` (a sibling of `dependencies.markdown`). Keep the object reference stable — a new config identity re-initializes the form. Without it the widget renders disabled with an inline error. Call `get_concept({ concept: "host-services" })`.',
|
|
2891
|
-
'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing.',
|
|
2891
|
+
'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing. An item restored with `status: "uploading"` cannot resume — the `File` only existed in the session that picked it — so the widget commits it back as `"error"` with `props.interruptedMessage` (default: `{name} was not uploaded. Remove it and pick the file again.`).',
|
|
2892
2892
|
'Validate with a `fileValidator`: `{ type: "file", required, blockPendingUploads }`. `blockPendingUploads` defaults to true and fails while the file is uploading or failed, so an unfinished upload cannot be submitted. Message keys: `invalid`, `required`, `pendingUploads`.',
|
|
2893
|
-
'`props.accept` (`[".pdf", "image/*"]`) and `props.maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with
|
|
2893
|
+
'`props.accept` (`[".pdf", "image/*"]`) and `props.maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with retry/remove icon buttons — never dropped silently. The reason (server `reject(new Error(...))` message, or the default) surfaces in the standard error area below the input, like a date widget\'s invalid-date error. Text props: `buttonLabel`, `acceptMessage`, `maxSizeMessage`, `missingServiceMessage`, `removeAriaLabel`, `cancelAriaLabel`, `retryAriaLabel`, `uploadedMessage`, `removedMessage`, `failedMessage` (`{name}` token); icon overrides: `removeIcon`, `retryIcon`.'
|
|
2894
2894
|
],
|
|
2895
2895
|
multiFileUpload: [
|
|
2896
2896
|
"The array variant of `fileUpload`: same box, button, progress bar and `uploadService`. Files upload ONE AT A TIME; every finished file becomes a pill inside the box and the value is an array of envelopes.",
|
package/json.js
CHANGED
package/lib.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { G, J, a, b, c, g, d, e, f, v } from "./get-concept-
|
|
2
|
-
import { D, a as a2, b as b2, c as c2, d as d2, e as e2, g as g2, l, f as f2, t } from "./list-dx-factories-
|
|
1
|
+
import { G, J, a, b, c, g, d, e, f, v } from "./get-concept-CsLx7Y5b.js";
|
|
2
|
+
import { D, a as a2, b as b2, c as c2, d as d2, e as e2, g as g2, l, f as f2, t } from "./list-dx-factories-hQNWmAmY.js";
|
|
3
3
|
export {
|
|
4
4
|
D as DX_CHECK_CODE_TOOL,
|
|
5
5
|
a2 as DX_GET_SPEC_TOOL,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h as checkReactiveExpression, i as checkBooleanValidatorRules } from "./get-concept-
|
|
1
|
+
import { h as checkReactiveExpression, i as checkBooleanValidatorRules } from "./get-concept-CsLx7Y5b.js";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
import { resolve, join, dirname } from "node:path";
|
|
@@ -478,10 +478,10 @@ function resolveDxFramework() {
|
|
|
478
478
|
return DX_FRAMEWORKS.includes(raw ?? "") ? raw : "react";
|
|
479
479
|
}
|
|
480
480
|
const FRAMEWORK_SETUP = {
|
|
481
|
-
react: "RENDER (React) — `import { gui } from '@golemui/gui-shared'; import { GuiForm } from '@golemui/gui-react'; import type { FormSubmitEvent } from '@golemui/core';`, then render `<GuiForm config={{ formDef: form }} formSubmit={(e: FormSubmitEvent) => { /* e.data is the form data */ }} />`. A `gui.displays.display(() => <h2>…</h2>)` returns React JSX. For SSR (Next.js App Router) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before the first render on both server and client (a `'use client'` provider that `use()`s a module-scope promise); `widgetLoaders` comes from `@golemui/gui-react`. Set `formName`.",
|
|
481
|
+
react: "RENDER (React) — `import { gui } from '@golemui/gui-shared'; import { GuiForm } from '@golemui/gui-react'; import type { FormSubmitEvent } from '@golemui/core';`, then render `<GuiForm config={{ formDef: form }} formSubmit={(e: FormSubmitEvent) => { /* e.data is the form data */ }} />`. A `gui.displays.display(() => <h2>…</h2>)` returns React JSX. For SSR (Next.js App Router) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before the first render on both server and client (a `'use client'` provider that `use()`s a module-scope promise); `widgetLoaders` comes from `@golemui/gui-react`. Set an explicit `formName`. Handlers run in the browser only.",
|
|
482
482
|
angular: "RENDER (Angular) — `import { gui } from '@golemui/gui-shared'; import { FormComponent } from '@golemui/gui-angular';`, add `FormComponent` to the standalone component's `imports`, then in the template `<gui-form [config]=\"{ formDef: form }\" (formSubmit)=\"onSubmit($event)\"></gui-form>` — `$event` is a `FormSubmitEvent` (type from `@golemui/core`), `$event.data` is the form data. For SSR (`@angular/platform-server`) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before bootstrap on both server and client; `widgetLoaders` comes from `@golemui/gui-angular`. An explicit `formName` is required and handlers run in the browser only.",
|
|
483
483
|
vue: "RENDER (Vue) — `import { gui } from '@golemui/gui-shared'; import { GuiForm } from '@golemui/gui-vue';`, then `<GuiForm :config=\"{ formDef: form }\" @form-submit=\"onSubmit\" />` — the handler receives a `FormSubmitEvent` (`.data` is the form data). The event is `form-submit` (kebab-case), not `formSubmit`. For SSR (Nuxt) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before the first render on both server and client (a Nuxt plugin); `widgetLoaders` comes from `@golemui/gui-vue`.",
|
|
484
|
-
lit: "RENDER (Lit) — `import { gui } from '@golemui/gui-shared'; import '@golemui/gui-lit';` (registers the `<gui-form>` custom element), then `<gui-form .config=${{ formDef: form }} @" + formEventNames.submit + "=${(e: CustomEvent) => { /* e.detail is the FormSubmitEvent; e.detail.data */ }}></gui-form>`. The event name is `" + formEventNames.submit + "` (camelCase) — Lit dispatches a raw CustomEvent, so there is no kebab-case alias. For SSR (Astro, plain Node) the server renders the whole form with `renderGuiHtml` from `@golemui/lit/ssr` (needs `@lit-labs/ssr`) after `preloadFormWidgets({ widgetLoaders })`; the client preloads again and calls `resumeServerRenderedForm` from `@golemui/lit`. `formName` is mandatory; custom widgets register with `safeDefine` from `@golemui/lit`, not `@customElement`.",
|
|
484
|
+
lit: "RENDER (Lit) — `import { gui } from '@golemui/gui-shared'; import '@golemui/gui-lit';` (registers the `<gui-form>` custom element), then `<gui-form .config=${{ formDef: form }} @" + formEventNames.submit + "=${(e: CustomEvent) => { /* e.detail is the FormSubmitEvent; e.detail.data */ }}></gui-form>`. The event name is `" + formEventNames.submit + "` (camelCase) — Lit dispatches a raw CustomEvent, so there is no kebab-case alias. For SSR (Astro, plain Node) the server renders the whole form with `renderGuiHtml` from `@golemui/lit/ssr` (needs `@lit-labs/ssr` >= 4.1.0) after `preloadFormWidgets({ widgetLoaders })`; the client preloads again and calls `resumeServerRenderedForm` from `@golemui/lit`. `formName` is mandatory; custom widgets register with `safeDefine` from `@golemui/lit`, not `@customElement`.",
|
|
485
485
|
vanilla: "RENDER (vanilla JS) — `import { gui } from '@golemui/gui-shared'; import '@golemui/gui-lit';` (registers `<gui-form>`), then `const el = document.querySelector('gui-form'); el.config = { formDef: form }; el.addEventListener('" + formEventNames.submit + "', (e) => { /* e.detail.data */ });`. In TypeScript, type the element — `import type { FormElement } from '@golemui/gui-lit'; const el = document.querySelector<FormElement>('gui-form');` — the published types do not register `gui-form` in `HTMLElementTagNameMap`, so an untyped `querySelector` yields `Element` and `el.config` fails to compile."
|
|
486
486
|
};
|
|
487
487
|
function commonNote(fw = "react") {
|
|
@@ -795,9 +795,9 @@ const INPUTS = [
|
|
|
795
795
|
notes: [
|
|
796
796
|
"Single-file upload rendered as a one-line input: the box is the drop target and holds the upload button; while the file uploads the box itself becomes the progress bar, and once done it shows the file name with a remove button.",
|
|
797
797
|
"REQUIRES a host transport: pass `dependencies: { uploadService: { upload(file, { id, path, onProgress, signal }) => Promise<unknown>, remove?(item) => Promise<void> } }` in the init config (next to `markdown`). Keep the object reference stable (module level) — a new `config` identity re-initializes the form. Without it the widget renders disabled with an inline error.",
|
|
798
|
-
'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload a value from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing.',
|
|
798
|
+
'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload a value from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing. An item restored with `status: "uploading"` cannot resume — the `File` only existed in the session that picked it — so the widget commits it back as `"error"` with `interruptedMessage` (default: `{name} was not uploaded. Remove it and pick the file again.`).',
|
|
799
799
|
"The validator auto-supplies `type: 'file'`. `blockPendingUploads` (default true) fails while the file is still uploading or failed, so a half-finished upload can never be submitted; message keys: `invalid`, `required`, `pendingUploads`.",
|
|
800
|
-
'`accept` (`[".pdf", "image/*", "application/pdf"]`) and `maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with
|
|
800
|
+
'`accept` (`[".pdf", "image/*", "application/pdf"]`) and `maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with retry/remove icon buttons — it is never dropped silently. The reason (server `reject(new Error(...))` message, or the default) surfaces in the standard error area below the input, like a date widget\'s invalid-date error. Messages: `acceptMessage`, `maxSizeMessage`; accessible names: `removeAriaLabel`, `cancelAriaLabel`, `retryAriaLabel` (`{name}` token); icon overrides: `removeIcon`, `retryIcon`.'
|
|
801
801
|
]
|
|
802
802
|
},
|
|
803
803
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@golemui/gui-mcp",
|
|
3
|
-
"version": "1.5.0-rc.
|
|
3
|
+
"version": "1.5.0-rc.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"ajv": "^8.17.1",
|
|
44
44
|
"ajv-formats": "^3.0.1",
|
|
45
45
|
"typescript": "^5.9.2",
|
|
46
|
-
"@golemui/gui-schemas": "1.5.0-rc.
|
|
47
|
-
"@golemui/gui-shared": "1.5.0-rc.
|
|
48
|
-
"@golemui/gui-validators": "1.5.0-rc.
|
|
49
|
-
"@golemui/core": "1.5.0-rc.
|
|
46
|
+
"@golemui/gui-schemas": "1.5.0-rc.2",
|
|
47
|
+
"@golemui/gui-shared": "1.5.0-rc.2",
|
|
48
|
+
"@golemui/gui-validators": "1.5.0-rc.2",
|
|
49
|
+
"@golemui/core": "1.5.0-rc.2",
|
|
50
50
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
51
51
|
"zod": "^4.0.0",
|
|
52
52
|
"@standard-schema/spec": "^1.0.0"
|