@golemui/gui-mcp 1.3.0 → 1.4.0
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 +21 -0
- package/cli.js +2 -2
- package/{get-concept-zrVPpS-8.js → get-concept-sCo1L4XA.js} +197 -126
- package/json.js +1 -1
- package/lib.js +2 -2
- package/{list-dx-factories-BHlwQnVh.js → list-dx-factories-B4gwqN7w.js} +40 -40
- package/package.json +5 -5
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-sCo1L4XA.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-B4gwqN7w.js";
|
|
3
3
|
export {
|
|
4
4
|
D as DX_CHECK_CODE_TOOL,
|
|
5
5
|
a2 as DX_GET_SPEC_TOOL,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { h as checkReactiveExpression, i as checkBooleanValidatorRules } from "./get-concept-
|
|
1
|
+
import { h as checkReactiveExpression, i as checkBooleanValidatorRules } from "./get-concept-sCo1L4XA.js";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
import { resolve, join, dirname } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { Decoder, err, ok, object, array, string, oneOf, boolean, optional, succeed, number, literal, lazy, discriminatedUnion, record } from "ts.data.json";
|
|
7
7
|
import "subscript/justin";
|
|
8
|
-
import { pipe, map, distinctUntilChanged
|
|
8
|
+
import { pipe, map, distinctUntilChanged } from "rxjs";
|
|
9
9
|
const BOOLEAN_FACTORIES = ["checkbox", "booleanInput"];
|
|
10
10
|
const CONFIG_FIELDS = ["include", "exclude", "disabled", "readonly"];
|
|
11
11
|
function lintDxSnippet(ts, sourceText, lineOffset) {
|
|
@@ -458,36 +458,6 @@ object({
|
|
|
458
458
|
const formEventNames = {
|
|
459
459
|
submit: "formSubmit"
|
|
460
460
|
};
|
|
461
|
-
pipe(
|
|
462
|
-
map((store) => store.data),
|
|
463
|
-
distinctUntilChanged()
|
|
464
|
-
);
|
|
465
|
-
pipe(
|
|
466
|
-
filter((store) => store.touched === true),
|
|
467
|
-
map((store) => store.validations),
|
|
468
|
-
distinctUntilChanged()
|
|
469
|
-
);
|
|
470
|
-
pipe(
|
|
471
|
-
filter((store) => store.touched === true),
|
|
472
|
-
map((store) => store.injectedValidations),
|
|
473
|
-
distinctUntilChanged()
|
|
474
|
-
);
|
|
475
|
-
pipe(
|
|
476
|
-
map((store) => store.lang),
|
|
477
|
-
distinctUntilChanged()
|
|
478
|
-
);
|
|
479
|
-
pipe(
|
|
480
|
-
map((store) => store.calculatedWidgets),
|
|
481
|
-
distinctUntilChanged()
|
|
482
|
-
);
|
|
483
|
-
pipe(
|
|
484
|
-
map((store) => store.widgetFlags),
|
|
485
|
-
distinctUntilChanged()
|
|
486
|
-
);
|
|
487
|
-
pipe(
|
|
488
|
-
map((store) => store.touchedControls),
|
|
489
|
-
distinctUntilChanged()
|
|
490
|
-
);
|
|
491
461
|
pipe(
|
|
492
462
|
map((store) => store.formHealth),
|
|
493
463
|
distinctUntilChanged((prev, current) => {
|
|
@@ -628,6 +598,17 @@ const INPUTS = [
|
|
|
628
598
|
"WART: choice widgets (`dropdown`, `radiogroup`, `select`) need a **typed** validator — `{ type: 'string', required: true }` — unlike text inputs which accept the loose `{ required: true }`. Add the `type`, or omit the validator."
|
|
629
599
|
]
|
|
630
600
|
},
|
|
601
|
+
{
|
|
602
|
+
factory: "multiDropdown",
|
|
603
|
+
namespace: "inputs",
|
|
604
|
+
docSlug: "multi-dropdown",
|
|
605
|
+
call: "gui.inputs.multiDropdown(path, { label, items, validator? })",
|
|
606
|
+
example: "gui.inputs.multiDropdown('countries', { label: 'Countries', items: [{ value: 'us', label: 'United States' }, { value: 'ca', label: 'Canada' }], validator: { type: 'array', required: true } })",
|
|
607
|
+
notes: [
|
|
608
|
+
"Multi-select dropdown: the value is an **array** of the selected item values; selections render as removable pills to the left of the filter input and the panel stays open while toggling.",
|
|
609
|
+
"The validator must be array-typed — `{ type: 'array', required: true, minItems?, maxItems? }`. Selection is never silently blocked; cap it with `maxItems` so the user is told why."
|
|
610
|
+
]
|
|
611
|
+
},
|
|
631
612
|
{
|
|
632
613
|
factory: "radiogroup",
|
|
633
614
|
namespace: "inputs",
|
|
@@ -792,6 +773,17 @@ const INPUTS = [
|
|
|
792
773
|
"`height` / `itemHeight` size the scroll viewport (pixels)."
|
|
793
774
|
]
|
|
794
775
|
},
|
|
776
|
+
{
|
|
777
|
+
factory: "multiList",
|
|
778
|
+
namespace: "inputs",
|
|
779
|
+
docSlug: "multi-list",
|
|
780
|
+
call: "gui.inputs.multiList(path, { label, items, height?, itemHeight?, validator? })",
|
|
781
|
+
example: "gui.inputs.multiList('toppings', { label: 'Toppings', items: ['Cheese', 'Bacon', 'Mushrooms'], height: 200 })",
|
|
782
|
+
notes: [
|
|
783
|
+
"Multi-select scrolling list: the value is an **array** of the selected item values; Enter/Space and clicks toggle rows on and off.",
|
|
784
|
+
"Selection is never silently blocked; cap it with an array validator — `{ type: 'array', maxItems }` — so the user is told why."
|
|
785
|
+
]
|
|
786
|
+
},
|
|
795
787
|
{
|
|
796
788
|
factory: "rangeCalendar",
|
|
797
789
|
namespace: "inputs",
|
|
@@ -799,7 +791,8 @@ const INPUTS = [
|
|
|
799
791
|
call: "gui.inputs.rangeCalendar(path, { label? })",
|
|
800
792
|
example: "gui.inputs.rangeCalendar('stayDates', { label: 'Stay dates' })",
|
|
801
793
|
notes: [
|
|
802
|
-
"Inline calendar for a start–end date **range** (the value is a date range). For a single date use `calendar`."
|
|
794
|
+
"Inline calendar for a start–end date **range** (the value is a date range). For a single date use `calendar`.",
|
|
795
|
+
"**`allowEdit: true`** enables in-place pill editing — see `rangeDateInput`. Here the calendar itself is the edit surface: selecting a pill dims the competing ranges in the day grid, editing parks the pill's span as the in-progress preview, and two-click re-picks reshape it without committing until the pill's check icon confirms (leaving the widget with a complete changed span also commits it)."
|
|
803
796
|
]
|
|
804
797
|
},
|
|
805
798
|
{
|
|
@@ -810,7 +803,8 @@ const INPUTS = [
|
|
|
810
803
|
example: "gui.inputs.rangeDateInput('stayDates', { label: 'Stay dates' })",
|
|
811
804
|
notes: [
|
|
812
805
|
"Typed start–end date **range** entry (the range sibling of `dateInput`).",
|
|
813
|
-
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint filled — see `datePicker`.'
|
|
806
|
+
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint filled — see `datePicker`.',
|
|
807
|
+
"**`allowEdit: true`** (default false, shared by all 8 range widgets) enables in-place pill editing: clicking or arrowing onto a pill selects it, revealing a pencil icon; the pencil — or F2 / E on the focused pill — loads the range back into the widget, where the pill's label live-previews the change and its check / cross icons (or Enter / Escape) commit or cancel the replacement. A confirmed range that overlaps a neighbor merges into it, and an unchanged confirm is a cancel. Tooltip labels and screen-reader announcements are localizable via `editLabel`, `editAriaLabel`, `confirmEditLabel`, `cancelEditLabel`, `editStartedMessage`, `editCommittedMessage`, `editCancelledMessage`."
|
|
814
808
|
]
|
|
815
809
|
},
|
|
816
810
|
{
|
|
@@ -821,7 +815,8 @@ const INPUTS = [
|
|
|
821
815
|
example: "gui.inputs.rangeTimeInput('shift', { label: 'Shift', minTime: '06:00:00', maxTime: '22:00:00' })",
|
|
822
816
|
notes: [
|
|
823
817
|
"Typed start–end time **range** entry (the range sibling of `timeInput`); value is `TimeRange[]`. End time must be after start time.",
|
|
824
|
-
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint filled — see `datePicker`.'
|
|
818
|
+
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint filled — see `datePicker`.',
|
|
819
|
+
"**`allowEdit: true`** enables in-place pill editing — see `rangeDateInput`."
|
|
825
820
|
]
|
|
826
821
|
},
|
|
827
822
|
{
|
|
@@ -833,7 +828,8 @@ const INPUTS = [
|
|
|
833
828
|
notes: [
|
|
834
829
|
"Typed start–end date-time **range** entry (the range sibling of `dateTimeInput`); value is `DateTimeRange[]`. A backward selection reorders (swaps) instead of erroring.",
|
|
835
830
|
"Each endpoint is an instant, so it is bounded by instants: use **`minDateTime`** / **`maxDateTime`** (ISO `YYYY-MM-DDTHH:mm:ss`), not `minDate`/`maxDate`. There is no `minTime`/`maxTime` here — a per-day time window is a different constraint from an instant bound.",
|
|
836
|
-
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint filled — see `datePicker`.'
|
|
831
|
+
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint filled — see `datePicker`.',
|
|
832
|
+
"**`allowEdit: true`** enables in-place pill editing — see `rangeDateInput`."
|
|
837
833
|
]
|
|
838
834
|
},
|
|
839
835
|
{
|
|
@@ -844,7 +840,8 @@ const INPUTS = [
|
|
|
844
840
|
example: "gui.inputs.rangeDateTimeCalendar('stay', { label: 'Stay', startTimeLabel: 'Check-in', endTimeLabel: 'Check-out' })",
|
|
845
841
|
notes: [
|
|
846
842
|
'INLINE range calendar with TWO embedded time pickers (start/end); value is `DateTimeRange[]`, rendered as pills. A day span and the two times can be chosen in ANY order — both time pickers are usable from the start — and the pill is committed once all four pieces are present. Starting a new day span keeps the times already chosen. A day holding more than one range shows a count badge. Leaving the widget with a half-finished selection surfaces an "incomplete" error over the untouched pills (`incompleteMessage` overrides its wording); leaving it emptied clears the error.',
|
|
847
|
-
"Everything is in instant-space: bounds are **`minDateTime`** / **`maxDateTime`** and **`disabledRanges`** are `DateTimeRange[]` instant spans (block a whole day with `00:00:00`–`23:59:59`). There is no `minDate`/`maxDate`/`minTime`/`maxTime`/`disabledTimeRanges` — a time-of-day constraint cannot bound a multi-day span."
|
|
843
|
+
"Everything is in instant-space: bounds are **`minDateTime`** / **`maxDateTime`** and **`disabledRanges`** are `DateTimeRange[]` instant spans (block a whole day with `00:00:00`–`23:59:59`). There is no `minDate`/`maxDate`/`minTime`/`maxTime`/`disabledTimeRanges` — a time-of-day constraint cannot bound a multi-day span.",
|
|
844
|
+
"**`allowEdit: true`** enables in-place pill editing — see `rangeDateInput`. Here the calendar itself is the edit surface: selecting a pill dims the competing ranges in the day grid, editing loads all four pieces (span + times) as the working selection, and day or time re-picks reshape it without the add flow's auto-commit — the pill's check icon confirms (leaving the widget with a complete changed selection also commits it)."
|
|
848
845
|
]
|
|
849
846
|
},
|
|
850
847
|
{
|
|
@@ -855,7 +852,8 @@ const INPUTS = [
|
|
|
855
852
|
example: "gui.inputs.rangeDateTimePicker('stay', { label: 'Stay', startTimeLabel: 'Check-in', endTimeLabel: 'Check-out' })",
|
|
856
853
|
notes: [
|
|
857
854
|
'POPOVER date-time range picker: the typed `rangeDateTimeInput` as the trigger (pills live there) with the `rangeDateTimeCalendar` in a dropdown. Value is `DateTimeRange[]`. Committing a pill keeps the popover open so several ranges can be added; it closes on outside-click, blur or Escape. A half-finished selection is held by the picker, so it survives closing and reopening the popover. Leaving it that way surfaces an "incomplete" error (`incompleteMessage` overrides its wording).',
|
|
858
|
-
"Everything is in instant-space: bounds are **`minDateTime`** / **`maxDateTime`** and **`disabledRanges`** are `DateTimeRange[]` instant spans (block a whole day with `00:00:00`–`23:59:59`). There is no `minDate`/`maxDate`/`minTime`/`maxTime`/`disabledTimeRanges`."
|
|
855
|
+
"Everything is in instant-space: bounds are **`minDateTime`** / **`maxDateTime`** and **`disabledRanges`** are `DateTimeRange[]` instant spans (block a whole day with `00:00:00`–`23:59:59`). There is no `minDate`/`maxDate`/`minTime`/`maxTime`/`disabledTimeRanges`.",
|
|
856
|
+
"**`allowEdit: true`** enables in-place pill editing — see `rangeDateInput`. Selecting a pill dims the competing ranges in the panel calendar; during an edit, panel picks reshape the range without committing — Enter in the segments or the pill's check icon confirms the replacement."
|
|
859
857
|
]
|
|
860
858
|
},
|
|
861
859
|
{
|
|
@@ -865,7 +863,8 @@ const INPUTS = [
|
|
|
865
863
|
call: "gui.inputs.rangeDatePicker(path, { label? })",
|
|
866
864
|
example: "gui.inputs.rangeDatePicker('stayDates', { label: 'Stay dates' })",
|
|
867
865
|
notes: [
|
|
868
|
-
'Popover calendar for a start–end date **range** (the range sibling of `datePicker`). A span with only its first day picked is held by the picker, so it survives closing and reopening the popover. Leaving it that way surfaces an "incomplete" error (`incompleteMessage` overrides its wording).'
|
|
866
|
+
'Popover calendar for a start–end date **range** (the range sibling of `datePicker`). A span with only its first day picked is held by the picker, so it survives closing and reopening the popover. Leaving it that way surfaces an "incomplete" error (`incompleteMessage` overrides its wording).',
|
|
867
|
+
"**`allowEdit: true`** enables in-place pill editing — see `rangeDateInput`. Selecting a pill dims the competing ranges in the panel calendar; during an edit, day picks reshape the range without committing — Enter in the segments or the pill's check icon confirms the replacement."
|
|
869
868
|
]
|
|
870
869
|
},
|
|
871
870
|
{
|
|
@@ -876,7 +875,8 @@ const INPUTS = [
|
|
|
876
875
|
example: "gui.inputs.rangeTimePicker('shift', { label: 'Shift', minTime: '06:00:00', maxTime: '22:00:00' })",
|
|
877
876
|
notes: [
|
|
878
877
|
"Two-list popover for a start–end time **range** (the range sibling of `timePicker`); value is `TimeRange[]`. Either list can be used first — an end picked before a start simply waits — and the range commits once both are set. Once an in is chosen the out list floors one slot after it so end is strictly after start.",
|
|
879
|
-
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint set — see `datePicker`.'
|
|
878
|
+
'`incompleteMessage` overrides the "incomplete" error surfaced when focus leaves with only one endpoint set — see `datePicker`.',
|
|
879
|
+
"**`allowEdit: true`** enables in-place pill editing — see `rangeDateInput`. During an edit, list picks reshape the range without committing — Enter in the segments or the pill's check icon confirms the replacement."
|
|
880
880
|
]
|
|
881
881
|
}
|
|
882
882
|
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@golemui/gui-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
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.
|
|
47
|
-
"@golemui/gui-shared": "1.
|
|
48
|
-
"@golemui/gui-validators": "1.
|
|
49
|
-
"@golemui/core": "1.
|
|
46
|
+
"@golemui/gui-schemas": "1.4.0",
|
|
47
|
+
"@golemui/gui-shared": "1.4.0",
|
|
48
|
+
"@golemui/gui-validators": "1.4.0",
|
|
49
|
+
"@golemui/core": "1.4.0",
|
|
50
50
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
51
51
|
"zod": "^4.0.0",
|
|
52
52
|
"@standard-schema/spec": "^1.0.0"
|