stimeo-ui 0.16.0 → 0.18.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 +136 -0
- package/README.md +27 -11
- package/dist/cable/index.d.ts +88 -31
- package/dist/cable/index.js +384 -449
- package/dist/cable/index.js.map +1 -1
- package/dist/coerce-JtZVNG5h.d.ts +20 -0
- package/dist/controllers/accordion_controller.d.ts +4 -2
- package/dist/controllers/accordion_controller.js +174 -55
- package/dist/controllers/accordion_controller.js.map +1 -1
- package/dist/controllers/alert_dialog_controller.d.ts +12 -2
- package/dist/controllers/alert_dialog_controller.js +903 -235
- package/dist/controllers/alert_dialog_controller.js.map +1 -1
- package/dist/controllers/announcer_controller.d.ts +37 -5
- package/dist/controllers/announcer_controller.js +238 -205
- package/dist/controllers/announcer_controller.js.map +1 -1
- package/dist/controllers/aspect_ratio_controller.js +0 -10
- package/dist/controllers/aspect_ratio_controller.js.map +1 -1
- package/dist/controllers/auto_submit_controller.d.ts +30 -6
- package/dist/controllers/auto_submit_controller.js +414 -145
- package/dist/controllers/auto_submit_controller.js.map +1 -1
- package/dist/controllers/avatar_controller.js +185 -107
- package/dist/controllers/avatar_controller.js.map +1 -1
- package/dist/controllers/breadcrumb_controller.js +0 -130
- package/dist/controllers/breadcrumb_controller.js.map +1 -1
- package/dist/controllers/bulk_select_controller.d.ts +21 -3
- package/dist/controllers/bulk_select_controller.js +282 -58
- package/dist/controllers/bulk_select_controller.js.map +1 -1
- package/dist/controllers/calendar_controller.d.ts +38 -16
- package/dist/controllers/calendar_controller.js +228 -260
- package/dist/controllers/calendar_controller.js.map +1 -1
- package/dist/controllers/carousel_controller.d.ts +43 -12
- package/dist/controllers/carousel_controller.js +536 -436
- package/dist/controllers/carousel_controller.js.map +1 -1
- package/dist/controllers/character_counter_controller.d.ts +44 -7
- package/dist/controllers/character_counter_controller.js +493 -207
- package/dist/controllers/character_counter_controller.js.map +1 -1
- package/dist/controllers/checkbox_controller.d.ts +7 -2
- package/dist/controllers/checkbox_controller.js +38 -74
- package/dist/controllers/checkbox_controller.js.map +1 -1
- package/dist/controllers/clipboard_controller.d.ts +16 -5
- package/dist/controllers/clipboard_controller.js +261 -149
- package/dist/controllers/clipboard_controller.js.map +1 -1
- package/dist/controllers/collapsible_controller.d.ts +17 -5
- package/dist/controllers/collapsible_controller.js +304 -120
- package/dist/controllers/collapsible_controller.js.map +1 -1
- package/dist/controllers/color_picker_controller.d.ts +18 -6
- package/dist/controllers/color_picker_controller.js +178 -146
- package/dist/controllers/color_picker_controller.js.map +1 -1
- package/dist/controllers/combobox_controller.d.ts +24 -6
- package/dist/controllers/combobox_controller.js +522 -156
- package/dist/controllers/combobox_controller.js.map +1 -1
- package/dist/controllers/command_palette_controller.d.ts +51 -20
- package/dist/controllers/command_palette_controller.js +1156 -395
- package/dist/controllers/command_palette_controller.js.map +1 -1
- package/dist/controllers/conditional_fields_controller.d.ts +15 -2
- package/dist/controllers/conditional_fields_controller.js +300 -171
- package/dist/controllers/conditional_fields_controller.js.map +1 -1
- package/dist/controllers/confirm_controller.d.ts +49 -12
- package/dist/controllers/confirm_controller.js +980 -262
- package/dist/controllers/confirm_controller.js.map +1 -1
- package/dist/controllers/context_menu_controller.d.ts +80 -18
- package/dist/controllers/context_menu_controller.js +346 -153
- package/dist/controllers/context_menu_controller.js.map +1 -1
- package/dist/controllers/count_up_controller.d.ts +13 -1
- package/dist/controllers/count_up_controller.js +73 -21
- package/dist/controllers/count_up_controller.js.map +1 -1
- package/dist/controllers/countdown_controller.d.ts +47 -3
- package/dist/controllers/countdown_controller.js +281 -158
- package/dist/controllers/countdown_controller.js.map +1 -1
- package/dist/controllers/currency_input_controller.d.ts +93 -10
- package/dist/controllers/currency_input_controller.js +575 -225
- package/dist/controllers/currency_input_controller.js.map +1 -1
- package/dist/controllers/data_grid_controller.d.ts +25 -12
- package/dist/controllers/data_grid_controller.js +248 -214
- package/dist/controllers/data_grid_controller.js.map +1 -1
- package/dist/controllers/date_range_picker_controller.d.ts +42 -14
- package/dist/controllers/date_range_picker_controller.js +338 -235
- package/dist/controllers/date_range_picker_controller.js.map +1 -1
- package/dist/controllers/dialog_controller.d.ts +17 -6
- package/dist/controllers/dialog_controller.js +899 -237
- package/dist/controllers/dialog_controller.js.map +1 -1
- package/dist/controllers/direct_upload_controller.d.ts +25 -8
- package/dist/controllers/direct_upload_controller.js +97 -167
- package/dist/controllers/direct_upload_controller.js.map +1 -1
- package/dist/controllers/dirty_form_controller.d.ts +6 -1
- package/dist/controllers/dirty_form_controller.js +72 -69
- package/dist/controllers/dirty_form_controller.js.map +1 -1
- package/dist/controllers/dismissible_controller.d.ts +19 -0
- package/dist/controllers/dismissible_controller.js +196 -24
- package/dist/controllers/dismissible_controller.js.map +1 -1
- package/dist/controllers/drawer_controller.d.ts +39 -11
- package/dist/controllers/drawer_controller.js +974 -355
- package/dist/controllers/drawer_controller.js.map +1 -1
- package/dist/controllers/dropdown_controller.d.ts +31 -1
- package/dist/controllers/dropdown_controller.js +339 -96
- package/dist/controllers/dropdown_controller.js.map +1 -1
- package/dist/controllers/editable_controller.d.ts +12 -1
- package/dist/controllers/editable_controller.js +315 -88
- package/dist/controllers/editable_controller.js.map +1 -1
- package/dist/controllers/empty_state_controller.js +79 -58
- package/dist/controllers/empty_state_controller.js.map +1 -1
- package/dist/controllers/file_dropzone_controller.d.ts +63 -18
- package/dist/controllers/file_dropzone_controller.js +322 -211
- package/dist/controllers/file_dropzone_controller.js.map +1 -1
- package/dist/controllers/filter_controller.js +77 -42
- package/dist/controllers/filter_controller.js.map +1 -1
- package/dist/controllers/flash_controller.d.ts +35 -12
- package/dist/controllers/flash_controller.js +238 -347
- package/dist/controllers/flash_controller.js.map +1 -1
- package/dist/controllers/focus_controller.d.ts +15 -6
- package/dist/controllers/focus_controller.js +679 -240
- package/dist/controllers/focus_controller.js.map +1 -1
- package/dist/controllers/form_field_controller.js +156 -132
- package/dist/controllers/form_field_controller.js.map +1 -1
- package/dist/controllers/form_validation_controller.d.ts +3 -3
- package/dist/controllers/form_validation_controller.js +31 -97
- package/dist/controllers/form_validation_controller.js.map +1 -1
- package/dist/controllers/frame_loading_controller.d.ts +47 -14
- package/dist/controllers/frame_loading_controller.js +275 -217
- package/dist/controllers/frame_loading_controller.js.map +1 -1
- package/dist/controllers/highlight_controller.d.ts +27 -6
- package/dist/controllers/highlight_controller.js +107 -75
- package/dist/controllers/highlight_controller.js.map +1 -1
- package/dist/controllers/hover_card_controller.d.ts +60 -4
- package/dist/controllers/hover_card_controller.js +327 -130
- package/dist/controllers/hover_card_controller.js.map +1 -1
- package/dist/controllers/idle_controller.d.ts +48 -6
- package/dist/controllers/idle_controller.js +271 -101
- package/dist/controllers/idle_controller.js.map +1 -1
- package/dist/controllers/input_mask_controller.d.ts +30 -13
- package/dist/controllers/input_mask_controller.js +483 -97
- package/dist/controllers/input_mask_controller.js.map +1 -1
- package/dist/controllers/intersection_controller.d.ts +32 -13
- package/dist/controllers/intersection_controller.js +150 -106
- package/dist/controllers/intersection_controller.js.map +1 -1
- package/dist/controllers/lazy_frame_controller.d.ts +19 -2
- package/dist/controllers/lazy_frame_controller.js +24 -68
- package/dist/controllers/lazy_frame_controller.js.map +1 -1
- package/dist/controllers/listbox_controller.d.ts +44 -9
- package/dist/controllers/listbox_controller.js +523 -240
- package/dist/controllers/listbox_controller.js.map +1 -1
- package/dist/controllers/local_time_controller.d.ts +9 -7
- package/dist/controllers/local_time_controller.js +102 -77
- package/dist/controllers/local_time_controller.js.map +1 -1
- package/dist/controllers/masonry_controller.d.ts +11 -3
- package/dist/controllers/masonry_controller.js +80 -96
- package/dist/controllers/masonry_controller.js.map +1 -1
- package/dist/controllers/menu_controller.d.ts +55 -11
- package/dist/controllers/menu_controller.js +302 -188
- package/dist/controllers/menu_controller.js.map +1 -1
- package/dist/controllers/menubar_controller.d.ts +51 -9
- package/dist/controllers/menubar_controller.js +232 -345
- package/dist/controllers/menubar_controller.js.map +1 -1
- package/dist/controllers/meter_controller.d.ts +33 -20
- package/dist/controllers/meter_controller.js +417 -87
- package/dist/controllers/meter_controller.js.map +1 -1
- package/dist/controllers/multi_select_controller.d.ts +48 -18
- package/dist/controllers/multi_select_controller.js +785 -393
- package/dist/controllers/multi_select_controller.js.map +1 -1
- package/dist/controllers/navigation_menu_controller.d.ts +27 -6
- package/dist/controllers/navigation_menu_controller.js +190 -250
- package/dist/controllers/navigation_menu_controller.js.map +1 -1
- package/dist/controllers/nested_form_controller.d.ts +10 -0
- package/dist/controllers/nested_form_controller.js +396 -192
- package/dist/controllers/nested_form_controller.js.map +1 -1
- package/dist/controllers/network_status_controller.d.ts +23 -0
- package/dist/controllers/network_status_controller.js +268 -62
- package/dist/controllers/network_status_controller.js.map +1 -1
- package/dist/controllers/number_input_controller.d.ts +50 -8
- package/dist/controllers/number_input_controller.js +610 -303
- package/dist/controllers/number_input_controller.js.map +1 -1
- package/dist/controllers/optimistic_controller.d.ts +8 -5
- package/dist/controllers/optimistic_controller.js +45 -87
- package/dist/controllers/optimistic_controller.js.map +1 -1
- package/dist/controllers/otp_controller.d.ts +55 -8
- package/dist/controllers/otp_controller.js +658 -255
- package/dist/controllers/otp_controller.js.map +1 -1
- package/dist/controllers/overflow_indicator_controller.d.ts +5 -0
- package/dist/controllers/overflow_indicator_controller.js +122 -113
- package/dist/controllers/overflow_indicator_controller.js.map +1 -1
- package/dist/controllers/overflow_menu_controller.d.ts +58 -20
- package/dist/controllers/overflow_menu_controller.js +470 -295
- package/dist/controllers/overflow_menu_controller.js.map +1 -1
- package/dist/controllers/pagination_controller.d.ts +37 -7
- package/dist/controllers/pagination_controller.js +332 -123
- package/dist/controllers/pagination_controller.js.map +1 -1
- package/dist/controllers/password_reveal_controller.d.ts +46 -8
- package/dist/controllers/password_reveal_controller.js +392 -121
- package/dist/controllers/password_reveal_controller.js.map +1 -1
- package/dist/controllers/password_strength_controller.d.ts +15 -6
- package/dist/controllers/password_strength_controller.js +111 -158
- package/dist/controllers/password_strength_controller.js.map +1 -1
- package/dist/controllers/persist_controller.d.ts +11 -4
- package/dist/controllers/persist_controller.js +165 -111
- package/dist/controllers/persist_controller.js.map +1 -1
- package/dist/controllers/pointer_drag_controller.d.ts +35 -12
- package/dist/controllers/pointer_drag_controller.js +434 -188
- package/dist/controllers/pointer_drag_controller.js.map +1 -1
- package/dist/controllers/popover_controller.d.ts +41 -5
- package/dist/controllers/popover_controller.js +269 -113
- package/dist/controllers/popover_controller.js.map +1 -1
- package/dist/controllers/portal_controller.d.ts +44 -4
- package/dist/controllers/portal_controller.js +215 -76
- package/dist/controllers/portal_controller.js.map +1 -1
- package/dist/controllers/preview_guard_controller.d.ts +10 -4
- package/dist/controllers/preview_guard_controller.js +243 -116
- package/dist/controllers/preview_guard_controller.js.map +1 -1
- package/dist/controllers/progress_controller.d.ts +20 -19
- package/dist/controllers/progress_controller.js +391 -78
- package/dist/controllers/progress_controller.js.map +1 -1
- package/dist/controllers/radio_group_controller.d.ts +21 -9
- package/dist/controllers/radio_group_controller.js +278 -211
- package/dist/controllers/radio_group_controller.js.map +1 -1
- package/dist/controllers/range_slider_controller.d.ts +47 -6
- package/dist/controllers/range_slider_controller.js +220 -113
- package/dist/controllers/range_slider_controller.js.map +1 -1
- package/dist/controllers/rating_controller.d.ts +20 -4
- package/dist/controllers/rating_controller.js +458 -211
- package/dist/controllers/rating_controller.js.map +1 -1
- package/dist/controllers/read_more_controller.d.ts +2 -0
- package/dist/controllers/read_more_controller.js +138 -63
- package/dist/controllers/read_more_controller.js.map +1 -1
- package/dist/controllers/reading_progress_controller.d.ts +1 -1
- package/dist/controllers/reading_progress_controller.js +166 -137
- package/dist/controllers/reading_progress_controller.js.map +1 -1
- package/dist/controllers/relative_time_controller.d.ts +20 -6
- package/dist/controllers/relative_time_controller.js +211 -112
- package/dist/controllers/relative_time_controller.js.map +1 -1
- package/dist/controllers/reset_on_restore_controller.d.ts +85 -0
- package/dist/controllers/{reset_before_cache_controller.js → reset_on_restore_controller.js} +103 -38
- package/dist/controllers/reset_on_restore_controller.js.map +1 -0
- package/dist/controllers/resizable_controller.d.ts +31 -2
- package/dist/controllers/resizable_controller.js +299 -150
- package/dist/controllers/resizable_controller.js.map +1 -1
- package/dist/controllers/roving_controller.d.ts +3 -3
- package/dist/controllers/roving_controller.js +49 -88
- package/dist/controllers/roving_controller.js.map +1 -1
- package/dist/controllers/scroll_area_controller.d.ts +7 -3
- package/dist/controllers/scroll_area_controller.js +490 -246
- package/dist/controllers/scroll_area_controller.js.map +1 -1
- package/dist/controllers/scroll_restore_controller.d.ts +3 -3
- package/dist/controllers/scroll_restore_controller.js +14 -55
- package/dist/controllers/scroll_restore_controller.js.map +1 -1
- package/dist/controllers/scroll_visibility_controller.d.ts +28 -12
- package/dist/controllers/scroll_visibility_controller.js +432 -149
- package/dist/controllers/scroll_visibility_controller.js.map +1 -1
- package/dist/controllers/scrollspy_controller.d.ts +6 -1
- package/dist/controllers/scrollspy_controller.js +193 -248
- package/dist/controllers/scrollspy_controller.js.map +1 -1
- package/dist/controllers/separator_controller.d.ts +20 -5
- package/dist/controllers/separator_controller.js +285 -142
- package/dist/controllers/separator_controller.js.map +1 -1
- package/dist/controllers/sidebar_controller.d.ts +65 -8
- package/dist/controllers/sidebar_controller.js +1069 -404
- package/dist/controllers/sidebar_controller.js.map +1 -1
- package/dist/controllers/skeleton_controller.d.ts +23 -0
- package/dist/controllers/skeleton_controller.js +259 -101
- package/dist/controllers/skeleton_controller.js.map +1 -1
- package/dist/controllers/slider_controller.d.ts +29 -2
- package/dist/controllers/slider_controller.js +187 -86
- package/dist/controllers/slider_controller.js.map +1 -1
- package/dist/controllers/smart_sticky_header_controller.d.ts +22 -4
- package/dist/controllers/smart_sticky_header_controller.js +173 -66
- package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
- package/dist/controllers/sortable_controller.d.ts +4 -4
- package/dist/controllers/sortable_controller.js +26 -125
- package/dist/controllers/sortable_controller.js.map +1 -1
- package/dist/controllers/spinner_controller.d.ts +39 -4
- package/dist/controllers/spinner_controller.js +288 -173
- package/dist/controllers/spinner_controller.js.map +1 -1
- package/dist/controllers/step_indicator_controller.d.ts +9 -4
- package/dist/controllers/step_indicator_controller.js +105 -46
- package/dist/controllers/step_indicator_controller.js.map +1 -1
- package/dist/controllers/stepper_controller.d.ts +14 -6
- package/dist/controllers/stepper_controller.js +120 -73
- package/dist/controllers/stepper_controller.js.map +1 -1
- package/dist/controllers/stick_to_bottom_controller.d.ts +9 -1
- package/dist/controllers/stick_to_bottom_controller.js +275 -140
- package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
- package/dist/controllers/sticky_observer_controller.d.ts +11 -0
- package/dist/controllers/sticky_observer_controller.js +220 -49
- package/dist/controllers/sticky_observer_controller.js.map +1 -1
- package/dist/controllers/submit_once_controller.d.ts +24 -8
- package/dist/controllers/submit_once_controller.js +376 -227
- package/dist/controllers/submit_once_controller.js.map +1 -1
- package/dist/controllers/switch_controller.d.ts +18 -4
- package/dist/controllers/switch_controller.js +201 -84
- package/dist/controllers/switch_controller.js.map +1 -1
- package/dist/controllers/tabs_controller.d.ts +9 -6
- package/dist/controllers/tabs_controller.js +41 -30
- package/dist/controllers/tabs_controller.js.map +1 -1
- package/dist/controllers/tags_input_controller.d.ts +16 -3
- package/dist/controllers/tags_input_controller.js +293 -173
- package/dist/controllers/tags_input_controller.js.map +1 -1
- package/dist/controllers/textarea_autosize_controller.d.ts +11 -1
- package/dist/controllers/textarea_autosize_controller.js +108 -74
- package/dist/controllers/textarea_autosize_controller.js.map +1 -1
- package/dist/controllers/theme_controller.d.ts +24 -11
- package/dist/controllers/theme_controller.js +140 -116
- package/dist/controllers/theme_controller.js.map +1 -1
- package/dist/controllers/time_picker_controller.d.ts +55 -5
- package/dist/controllers/time_picker_controller.js +331 -127
- package/dist/controllers/time_picker_controller.js.map +1 -1
- package/dist/controllers/toast_controller.d.ts +40 -16
- package/dist/controllers/toast_controller.js +244 -324
- package/dist/controllers/toast_controller.js.map +1 -1
- package/dist/controllers/toggle_group_controller.d.ts +14 -6
- package/dist/controllers/toggle_group_controller.js +252 -191
- package/dist/controllers/toggle_group_controller.js.map +1 -1
- package/dist/controllers/toolbar_controller.d.ts +8 -6
- package/dist/controllers/toolbar_controller.js +219 -120
- package/dist/controllers/toolbar_controller.js.map +1 -1
- package/dist/controllers/tooltip_controller.d.ts +49 -4
- package/dist/controllers/tooltip_controller.js +158 -124
- package/dist/controllers/tooltip_controller.js.map +1 -1
- package/dist/controllers/transition_controller.d.ts +22 -4
- package/dist/controllers/transition_controller.js +123 -119
- package/dist/controllers/transition_controller.js.map +1 -1
- package/dist/controllers/tree_view_controller.d.ts +22 -12
- package/dist/controllers/tree_view_controller.js +283 -369
- package/dist/controllers/tree_view_controller.js.map +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.js +8573 -10410
- package/dist/index.js.map +1 -1
- package/dist/inspector/cli.d.ts +38 -14
- package/dist/inspector/cli.js +108 -40
- package/dist/inspector/cli.js.map +1 -1
- package/dist/inspector/cli_bin.js +145 -64
- package/dist/inspector/cli_bin.js.map +1 -1
- package/dist/inspector/examples.json +20 -20
- package/dist/inspector/manifest.json +802 -101
- package/dist/positioning/index.d.ts +15 -7
- package/dist/positioning/index.js +154 -47
- package/dist/positioning/index.js.map +1 -1
- package/package.json +11 -10
- package/dist/controllers/reset_before_cache_controller.d.ts +0 -76
- package/dist/controllers/reset_before_cache_controller.js.map +0 -1
|
@@ -5,9 +5,6 @@ import { relative, join, dirname, extname } from 'path';
|
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
import { createInterface } from 'readline';
|
|
7
7
|
|
|
8
|
-
// src/inspector/cli_bin.ts
|
|
9
|
-
|
|
10
|
-
// src/inspector/announcer_rules.ts
|
|
11
8
|
var ANNOUNCER_IDENTIFIER = "stimeo--announcer";
|
|
12
9
|
var ANNOUNCING_CONTROLLERS = [
|
|
13
10
|
"stimeo--auto-submit",
|
|
@@ -21,17 +18,20 @@ var ANNOUNCING_CONTROLLERS = [
|
|
|
21
18
|
"stimeo--flash",
|
|
22
19
|
"stimeo--form-field",
|
|
23
20
|
"stimeo--frame-loading",
|
|
21
|
+
"stimeo--live-counter",
|
|
24
22
|
"stimeo--meter",
|
|
25
23
|
"stimeo--multi-select",
|
|
26
24
|
"stimeo--nested-form",
|
|
27
25
|
"stimeo--network-status",
|
|
28
26
|
"stimeo--password-strength",
|
|
27
|
+
"stimeo--presence",
|
|
29
28
|
"stimeo--progress",
|
|
30
29
|
"stimeo--skeleton",
|
|
31
30
|
"stimeo--sortable",
|
|
32
31
|
"stimeo--spinner",
|
|
33
32
|
"stimeo--submit-once",
|
|
34
|
-
"stimeo--tags-input"
|
|
33
|
+
"stimeo--tags-input",
|
|
34
|
+
"stimeo--typing-indicator"
|
|
35
35
|
];
|
|
36
36
|
function positionAt(source, index) {
|
|
37
37
|
const before = source.slice(0, index);
|
|
@@ -71,7 +71,30 @@ function announcerSeatingDiagnostic(sources) {
|
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
function matchesNumberBounds(value, bounds) {
|
|
75
|
+
if (!Number.isFinite(value)) {
|
|
76
|
+
const direction = value === Infinity ? "positive" : value === -Infinity ? "negative" : null;
|
|
77
|
+
if (direction === null) return false;
|
|
78
|
+
if (bounds.allowInfinity !== "both" && bounds.allowInfinity !== direction) return false;
|
|
79
|
+
}
|
|
80
|
+
if (bounds.min !== void 0 && value < bounds.min) return false;
|
|
81
|
+
if (bounds.max !== void 0 && value > bounds.max) return false;
|
|
82
|
+
if (bounds.exclusiveMin !== void 0 && value <= bounds.exclusiveMin) return false;
|
|
83
|
+
if (bounds.integer && !Number.isInteger(value)) return false;
|
|
84
|
+
if (bounds.allowedValues !== void 0 && !bounds.allowedValues.includes(value)) return false;
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
function decodeNumberValue(raw) {
|
|
88
|
+
return Number(raw.replace(/_/g, ""));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function toFiniteNumber(raw) {
|
|
92
|
+
if (typeof raw !== "number" && typeof raw !== "string") return null;
|
|
93
|
+
if (typeof raw === "string" && raw.trim().length === 0) return null;
|
|
94
|
+
const value = Number(raw);
|
|
95
|
+
return Number.isFinite(value) ? value : null;
|
|
96
|
+
}
|
|
97
|
+
|
|
75
98
|
function parseDeclared(raw, parse, fallback) {
|
|
76
99
|
try {
|
|
77
100
|
return parse(raw);
|
|
@@ -95,7 +118,6 @@ function parseJsonObject(raw) {
|
|
|
95
118
|
return parsed;
|
|
96
119
|
}
|
|
97
120
|
|
|
98
|
-
// src/inspector/html_parser.ts
|
|
99
121
|
var ERB_ELEMENT_TAG = "#erb";
|
|
100
122
|
var VOID_ELEMENTS = /* @__PURE__ */ new Set([
|
|
101
123
|
"area",
|
|
@@ -344,7 +366,6 @@ function walk(root, visit) {
|
|
|
344
366
|
}
|
|
345
367
|
}
|
|
346
368
|
|
|
347
|
-
// src/inspector/ruby_scan.ts
|
|
348
369
|
var SPACE = /* @__PURE__ */ new Set([" ", " ", "\n", "\r", "\f"]);
|
|
349
370
|
var IDENT_START = /[A-Za-z_]/;
|
|
350
371
|
var IDENT_CHAR = /[A-Za-z0-9_]/;
|
|
@@ -583,7 +604,6 @@ function heredocEnd(code, bodyStart, identifier) {
|
|
|
583
604
|
return code.length;
|
|
584
605
|
}
|
|
585
606
|
|
|
586
|
-
// src/inspector/ruby_hash.ts
|
|
587
607
|
function readDataOption(source, base) {
|
|
588
608
|
const code = maskHeredocs(source);
|
|
589
609
|
const attrs = [];
|
|
@@ -788,7 +808,6 @@ function skipValue(code, start) {
|
|
|
788
808
|
return code.length;
|
|
789
809
|
}
|
|
790
810
|
|
|
791
|
-
// src/inspector/erb.ts
|
|
792
811
|
var ERB_TAG = /<%[\s\S]*?%>/g;
|
|
793
812
|
function neutralizeErb(source) {
|
|
794
813
|
return source.replace(ERB_TAG, (match) => match.replace(/[^\n]/g, " "));
|
|
@@ -812,7 +831,6 @@ function erbElements(source) {
|
|
|
812
831
|
tag: ERB_ELEMENT_TAG,
|
|
813
832
|
attrs: option.attrs.map((attr) => toParsedAttr(attr, index)),
|
|
814
833
|
start: tag.start,
|
|
815
|
-
// The token a reader can act on is the delimiter that opens the call.
|
|
816
834
|
sourceLength: tag.codeStart - tag.start,
|
|
817
835
|
end,
|
|
818
836
|
container: end > tag.end,
|
|
@@ -851,7 +869,6 @@ function readErbTags(source) {
|
|
|
851
869
|
}
|
|
852
870
|
let close = raw.length - 2;
|
|
853
871
|
if (raw[close - 1] === "-") close--;
|
|
854
|
-
if (close < open) close = open;
|
|
855
872
|
tags.push({
|
|
856
873
|
start,
|
|
857
874
|
end: start + raw.length,
|
|
@@ -977,7 +994,6 @@ function identifierEnd(code, start) {
|
|
|
977
994
|
return end;
|
|
978
995
|
}
|
|
979
996
|
|
|
980
|
-
// src/inspector/extract.ts
|
|
981
997
|
var NAMESPACE_PREFIX = "stimeo--";
|
|
982
998
|
function dasherize(value) {
|
|
983
999
|
return value.replace(/([A-Z])/g, (_match, char) => `-${char.toLowerCase()}`);
|
|
@@ -1072,7 +1088,6 @@ function isStimeoDataAttr(attrName) {
|
|
|
1072
1088
|
return attrName.startsWith(`data-${NAMESPACE_PREFIX}`);
|
|
1073
1089
|
}
|
|
1074
1090
|
|
|
1075
|
-
// src/inspector/types.ts
|
|
1076
1091
|
var DIAGNOSTIC_CODES = [
|
|
1077
1092
|
"unknown-controller",
|
|
1078
1093
|
"unknown-target",
|
|
@@ -1106,7 +1121,6 @@ var DIAGNOSTIC_CODES = [
|
|
|
1106
1121
|
"unknown-ignore-code"
|
|
1107
1122
|
];
|
|
1108
1123
|
|
|
1109
|
-
// src/inspector/check.ts
|
|
1110
1124
|
function isDescendantOf(node, ancestor) {
|
|
1111
1125
|
for (let current = node.parent; current; current = current.parent) {
|
|
1112
1126
|
if (current === ancestor) return true;
|
|
@@ -1559,7 +1573,19 @@ function checkSource(source, manifest) {
|
|
|
1559
1573
|
if (isDynamicValue(written)) continue;
|
|
1560
1574
|
const value = written.value;
|
|
1561
1575
|
if (value.length === 0) {
|
|
1562
|
-
if (!
|
|
1576
|
+
if (!readable) continue;
|
|
1577
|
+
if (rule.numeric && !rule.required) {
|
|
1578
|
+
report(
|
|
1579
|
+
element,
|
|
1580
|
+
"invalid-action-param",
|
|
1581
|
+
"error",
|
|
1582
|
+
`"${value}" is not a finite "${rule.param}" this action reads.`,
|
|
1583
|
+
written,
|
|
1584
|
+
rule.suggestion
|
|
1585
|
+
);
|
|
1586
|
+
continue;
|
|
1587
|
+
}
|
|
1588
|
+
if (!rule.required) continue;
|
|
1563
1589
|
report(
|
|
1564
1590
|
element,
|
|
1565
1591
|
"missing-action-param",
|
|
@@ -1570,16 +1596,19 @@ function checkSource(source, manifest) {
|
|
|
1570
1596
|
);
|
|
1571
1597
|
continue;
|
|
1572
1598
|
}
|
|
1573
|
-
if (rule.
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1599
|
+
if (rule.numeric || rule.integer) {
|
|
1600
|
+
const numeric = toFiniteNumber(decodeActionParamLiteral(value));
|
|
1601
|
+
if (numeric === null || rule.integer && !Number.isInteger(numeric)) {
|
|
1602
|
+
report(
|
|
1603
|
+
element,
|
|
1604
|
+
"invalid-action-param",
|
|
1605
|
+
"error",
|
|
1606
|
+
`"${value}" is not an "${rule.param}" this action reads. It accepts ${rule.integer ? "a whole number" : "a finite number"}.`,
|
|
1607
|
+
written,
|
|
1608
|
+
rule.suggestion
|
|
1609
|
+
);
|
|
1610
|
+
continue;
|
|
1611
|
+
}
|
|
1583
1612
|
}
|
|
1584
1613
|
if (!rule.allowedValues || rule.allowedValues.includes(value)) continue;
|
|
1585
1614
|
const best = nearestName(value, rule.allowedValues);
|
|
@@ -1871,8 +1900,9 @@ function checkSource(source, manifest) {
|
|
|
1871
1900
|
for (const element of elements) {
|
|
1872
1901
|
if (!hasReadableMarkup(element)) continue;
|
|
1873
1902
|
if (hostIsAllowed(element, rule) !== false) continue;
|
|
1874
|
-
const
|
|
1875
|
-
const
|
|
1903
|
+
const byType = element.tag === "button" && rule.mode !== "non-interactive";
|
|
1904
|
+
const type = byType ? element.attrs.find((attr) => attr.name === "type") : void 0;
|
|
1905
|
+
const detail = byType ? `the unsupported ${type ? `type="${type.value}"` : 'implicit type="submit"'}` : `an unsupported interactive <${element.tag}>`;
|
|
1876
1906
|
report(
|
|
1877
1907
|
element,
|
|
1878
1908
|
"invalid-host",
|
|
@@ -1997,8 +2027,6 @@ function checkSource(source, manifest) {
|
|
|
1997
2027
|
`The ${where} of "${identifier}" must also declare "${rule.controller}" in data-controller.`,
|
|
1998
2028
|
declared ?? el,
|
|
1999
2029
|
rule.suggestion,
|
|
2000
|
-
// Appending to an existing list is unambiguous; creating the
|
|
2001
|
-
// attribute from nothing is an insertion the anchor cannot express.
|
|
2002
2030
|
declared ? valueFix(
|
|
2003
2031
|
declared,
|
|
2004
2032
|
`${declared.value.trim()} ${rule.controller}`.trim(),
|
|
@@ -2048,9 +2076,11 @@ function checkSource(source, manifest) {
|
|
|
2048
2076
|
const what = describeCounted(rule.target, rule.attr, rule.values);
|
|
2049
2077
|
const where = rule.within === "" ? "controller scope" : `"${rule.within}" target`;
|
|
2050
2078
|
for (const container of containers) {
|
|
2079
|
+
if (rule.excludeTemplateContents && crossesTemplateContent(container, node)) continue;
|
|
2051
2080
|
const matched = [];
|
|
2052
2081
|
for (const el of counted) {
|
|
2053
2082
|
if (!isSelfOrDescendantOf(el, container)) continue;
|
|
2083
|
+
if (rule.excludeTemplateContents && crossesTemplateContent(el, node)) continue;
|
|
2054
2084
|
if (rule.attr === void 0) {
|
|
2055
2085
|
matched.push({ el, at: el });
|
|
2056
2086
|
continue;
|
|
@@ -2067,7 +2097,7 @@ function checkSource(source, manifest) {
|
|
|
2067
2097
|
report(
|
|
2068
2098
|
el,
|
|
2069
2099
|
"cardinality-violation",
|
|
2070
|
-
"error",
|
|
2100
|
+
rule.severity ?? "error",
|
|
2071
2101
|
`"${identifier}" allows at most ${rule.max} ${what} per ${where}, but found ${matched.length}.`,
|
|
2072
2102
|
at,
|
|
2073
2103
|
rule.suggestion
|
|
@@ -2079,7 +2109,7 @@ function checkSource(source, manifest) {
|
|
|
2079
2109
|
report(
|
|
2080
2110
|
container,
|
|
2081
2111
|
"cardinality-violation",
|
|
2082
|
-
complete ? "error" : "warning",
|
|
2112
|
+
complete ? rule.severity ?? "error" : "warning",
|
|
2083
2113
|
`"${identifier}" requires at least ${rule.min} ${what} per ${where}, but found ${matched.length}.`,
|
|
2084
2114
|
container,
|
|
2085
2115
|
complete ? rule.suggestion : UNRESOLVED_TARGET_HINT
|
|
@@ -2133,14 +2163,20 @@ function declaredConstraint(controller, valueToken) {
|
|
|
2133
2163
|
function valueSatisfiesConstraint(raw, constraint) {
|
|
2134
2164
|
if (constraint.type === "string") return stringValueSatisfies(raw, constraint);
|
|
2135
2165
|
const value = decodeNumericValue(raw);
|
|
2136
|
-
if (
|
|
2137
|
-
|
|
2166
|
+
if (constraint.finite === true && !matchesNumberBounds(value, { ...constraint}))
|
|
2167
|
+
return false;
|
|
2168
|
+
if (constraint.finite !== true) {
|
|
2169
|
+
const bounds = {
|
|
2170
|
+
...constraint,
|
|
2171
|
+
allowInfinity: constraint.allowInfinity ?? "both"
|
|
2172
|
+
};
|
|
2173
|
+
if (!matchesNumberBounds(value, bounds)) return false;
|
|
2174
|
+
}
|
|
2138
2175
|
if (constraint.greaterThan !== void 0 && !(value > constraint.greaterThan)) return false;
|
|
2139
|
-
if (constraint.integer && !Number.isInteger(value)) return false;
|
|
2140
2176
|
return true;
|
|
2141
2177
|
}
|
|
2142
2178
|
function decodeNumericValue(raw) {
|
|
2143
|
-
return
|
|
2179
|
+
return decodeNumberValue(raw);
|
|
2144
2180
|
}
|
|
2145
2181
|
function stringValueSatisfies(raw, constraint) {
|
|
2146
2182
|
if (!("syntax" in constraint)) return constraint.allowedValues.includes(raw);
|
|
@@ -2154,10 +2190,15 @@ function stringValueSatisfies(raw, constraint) {
|
|
|
2154
2190
|
}
|
|
2155
2191
|
function describeValueConstraint(constraint) {
|
|
2156
2192
|
if (constraint.type === "string") return describeStringConstraint(constraint);
|
|
2157
|
-
const parts = [constraint.finite ? "a finite number" : "a number"];
|
|
2193
|
+
const parts = [constraint.finite || constraint.allowInfinity ? "a finite number" : "a number"];
|
|
2158
2194
|
if (constraint.greaterThan !== void 0) {
|
|
2159
2195
|
parts.push(`greater than ${constraint.greaterThan}`);
|
|
2160
2196
|
}
|
|
2197
|
+
if (constraint.exclusiveMin !== void 0) parts.push(`greater than ${constraint.exclusiveMin}`);
|
|
2198
|
+
if (constraint.min !== void 0) parts.push(`at least ${constraint.min}`);
|
|
2199
|
+
if (constraint.max !== void 0) parts.push(`at most ${constraint.max}`);
|
|
2200
|
+
if (constraint.allowedValues) parts.push(`among ${constraint.allowedValues.join(", ")}`);
|
|
2201
|
+
if (constraint.allowInfinity) parts.push(`or ${constraint.allowInfinity} infinity`);
|
|
2161
2202
|
if (constraint.integer) parts.push("with no fractional part");
|
|
2162
2203
|
return parts.join(" ");
|
|
2163
2204
|
}
|
|
@@ -2296,6 +2337,14 @@ var IDREF_ATTRS = /* @__PURE__ */ new Set([
|
|
|
2296
2337
|
"aria-owns"
|
|
2297
2338
|
]);
|
|
2298
2339
|
var IGNORE_ATTR = "data-stimeo-ignore";
|
|
2340
|
+
function crossesTemplateContent(node, scope) {
|
|
2341
|
+
if (node === scope) return false;
|
|
2342
|
+
for (let parent = node.parent; parent; parent = parent.parent) {
|
|
2343
|
+
if (parent.tag === "template") return true;
|
|
2344
|
+
if (parent === scope) return false;
|
|
2345
|
+
}
|
|
2346
|
+
return false;
|
|
2347
|
+
}
|
|
2299
2348
|
function findOwner(node, identifier) {
|
|
2300
2349
|
let current = node;
|
|
2301
2350
|
while (current && current.tag !== "#root") {
|
|
@@ -2353,7 +2402,7 @@ function list(names) {
|
|
|
2353
2402
|
return names.length > 0 ? names.map((n) => `"${n}"`).join(", ") : "(none)";
|
|
2354
2403
|
}
|
|
2355
2404
|
function describeAttrs(attrs) {
|
|
2356
|
-
return attrs.
|
|
2405
|
+
return attrs.join(" or ");
|
|
2357
2406
|
}
|
|
2358
2407
|
function nearestName(name, candidates) {
|
|
2359
2408
|
if (name.length === 0) return void 0;
|
|
@@ -2395,8 +2444,14 @@ function levenshtein(a, b) {
|
|
|
2395
2444
|
}
|
|
2396
2445
|
return prev[cols];
|
|
2397
2446
|
}
|
|
2447
|
+
function decodeActionParamLiteral(raw) {
|
|
2448
|
+
try {
|
|
2449
|
+
return JSON.parse(raw);
|
|
2450
|
+
} catch {
|
|
2451
|
+
return raw;
|
|
2452
|
+
}
|
|
2453
|
+
}
|
|
2398
2454
|
|
|
2399
|
-
// src/inspector/examples.ts
|
|
2400
2455
|
var EXAMPLES_SCHEMA_VERSION = 1;
|
|
2401
2456
|
var CHECKABLE_FILE_EXTENSIONS = /* @__PURE__ */ new Set([".erb", ".html", ".htm"]);
|
|
2402
2457
|
function isCheckableFile(path) {
|
|
@@ -2440,6 +2495,21 @@ function isCompatibleManifest(value) {
|
|
|
2440
2495
|
for (const field of CONTROLLER_ARRAY_FIELDS) {
|
|
2441
2496
|
if (!Array.isArray(entry[field])) return false;
|
|
2442
2497
|
}
|
|
2498
|
+
const constraints = entry.valueConstraints;
|
|
2499
|
+
for (const constraint of constraints) {
|
|
2500
|
+
if (typeof constraint !== "object" || constraint === null) return false;
|
|
2501
|
+
const numeric = constraint;
|
|
2502
|
+
if (numeric.type !== "number") continue;
|
|
2503
|
+
for (const field of ["min", "max", "exclusiveMin"]) {
|
|
2504
|
+
const bound = numeric[field];
|
|
2505
|
+
if (bound !== void 0 && (typeof bound !== "number" || !Number.isFinite(bound)))
|
|
2506
|
+
return false;
|
|
2507
|
+
}
|
|
2508
|
+
if (numeric.allowedValues !== void 0 && (!Array.isArray(numeric.allowedValues) || !numeric.allowedValues.every((item) => typeof item === "number" && Number.isFinite(item))))
|
|
2509
|
+
return false;
|
|
2510
|
+
if (numeric.allowInfinity !== void 0 && !["negative", "positive", "both"].includes(String(numeric.allowInfinity)))
|
|
2511
|
+
return false;
|
|
2512
|
+
}
|
|
2443
2513
|
}
|
|
2444
2514
|
return true;
|
|
2445
2515
|
}
|
|
@@ -2451,7 +2521,6 @@ function readManifestFile(path) {
|
|
|
2451
2521
|
return parsed;
|
|
2452
2522
|
}
|
|
2453
2523
|
|
|
2454
|
-
// src/inspector/cli.ts
|
|
2455
2524
|
function bundledPath(name) {
|
|
2456
2525
|
return join(dirname(fileURLToPath(import.meta.url)), name);
|
|
2457
2526
|
}
|
|
@@ -2653,7 +2722,6 @@ ${USAGE}`);
|
|
|
2653
2722
|
return summary.errorCount > 0 ? 1 : 0;
|
|
2654
2723
|
}
|
|
2655
2724
|
|
|
2656
|
-
// src/inspector/mcp/prompts.ts
|
|
2657
2725
|
var InvalidPromptRequestError = class extends Error {
|
|
2658
2726
|
};
|
|
2659
2727
|
function asPromptArgs(args, allowed) {
|
|
@@ -2782,7 +2850,6 @@ function getPrompt(name, args) {
|
|
|
2782
2850
|
return prompt.build(record);
|
|
2783
2851
|
}
|
|
2784
2852
|
|
|
2785
|
-
// src/inspector/mcp/tools.ts
|
|
2786
2853
|
var READ_ONLY_ANNOTATIONS = { readOnlyHint: true, openWorldHint: false };
|
|
2787
2854
|
var STRING_ARRAY = { type: "array", items: { type: "string" } };
|
|
2788
2855
|
var DIAGNOSTIC_SCHEMA = {
|
|
@@ -3239,6 +3306,11 @@ var CONTROLLER_CONTRACT_SCHEMA = {
|
|
|
3239
3306
|
values: { ...STRING_ARRAY, description: "Restrict the attribute to these values." },
|
|
3240
3307
|
min: { type: "integer", description: "Smallest permitted count (inclusive)." },
|
|
3241
3308
|
max: { type: "integer", description: "Largest permitted count (inclusive)." },
|
|
3309
|
+
severity: { type: "string", enum: ["error", "warning"] },
|
|
3310
|
+
excludeTemplateContents: {
|
|
3311
|
+
type: "boolean",
|
|
3312
|
+
description: "Exclude targets and containers across template contents from the scope."
|
|
3313
|
+
},
|
|
3242
3314
|
when: VALUE_CONDITION_SCHEMA,
|
|
3243
3315
|
suggestion: { type: "string" }
|
|
3244
3316
|
},
|
|
@@ -3458,13 +3530,13 @@ function callTool(context, name, args) {
|
|
|
3458
3530
|
}
|
|
3459
3531
|
}
|
|
3460
3532
|
|
|
3461
|
-
// src/inspector/mcp/server.ts
|
|
3462
3533
|
var LATEST_PROTOCOL_VERSION = "2025-06-18";
|
|
3463
3534
|
var SUPPORTED_PROTOCOL_VERSIONS = [
|
|
3464
3535
|
LATEST_PROTOCOL_VERSION,
|
|
3465
3536
|
"2025-03-26",
|
|
3466
3537
|
"2024-11-05"
|
|
3467
3538
|
];
|
|
3539
|
+
var BATCH_PROTOCOL_VERSION = "2025-03-26";
|
|
3468
3540
|
var JSONRPC_PARSE_ERROR = -32700;
|
|
3469
3541
|
var JSONRPC_INVALID_REQUEST = -32600;
|
|
3470
3542
|
var JSONRPC_METHOD_NOT_FOUND = -32601;
|
|
@@ -3488,16 +3560,10 @@ function asRecord(value) {
|
|
|
3488
3560
|
}
|
|
3489
3561
|
var McpSession = class {
|
|
3490
3562
|
#context;
|
|
3491
|
-
#
|
|
3563
|
+
#protocolVersion = null;
|
|
3492
3564
|
constructor(context) {
|
|
3493
3565
|
this.#context = context;
|
|
3494
3566
|
}
|
|
3495
|
-
/**
|
|
3496
|
-
* Handles one newline-delimited message.
|
|
3497
|
-
*
|
|
3498
|
-
* @returns The serialized response line, or null when no response is due
|
|
3499
|
-
* (blank lines and notifications).
|
|
3500
|
-
*/
|
|
3501
3567
|
handleLine(line) {
|
|
3502
3568
|
const trimmed = line.trim();
|
|
3503
3569
|
if (trimmed === "") return null;
|
|
@@ -3507,9 +3573,28 @@ var McpSession = class {
|
|
|
3507
3573
|
} catch {
|
|
3508
3574
|
return failure(null, JSONRPC_PARSE_ERROR, "Parse error");
|
|
3509
3575
|
}
|
|
3510
|
-
return this.#
|
|
3576
|
+
if (Array.isArray(message)) return this.#handleBatch(message);
|
|
3577
|
+
return this.#handleMessage(message, false);
|
|
3511
3578
|
}
|
|
3512
|
-
#
|
|
3579
|
+
#handleBatch(messages) {
|
|
3580
|
+
if (this.#protocolVersion !== BATCH_PROTOCOL_VERSION) {
|
|
3581
|
+
return failure(
|
|
3582
|
+
null,
|
|
3583
|
+
JSONRPC_INVALID_REQUEST,
|
|
3584
|
+
`Invalid request: JSON-RPC batches are accepted only in a session that negotiated protocol version ${BATCH_PROTOCOL_VERSION}.`
|
|
3585
|
+
);
|
|
3586
|
+
}
|
|
3587
|
+
if (messages.length === 0) {
|
|
3588
|
+
return failure(null, JSONRPC_INVALID_REQUEST, "Invalid request: empty batch");
|
|
3589
|
+
}
|
|
3590
|
+
const responses = [];
|
|
3591
|
+
for (const message of messages) {
|
|
3592
|
+
const response = this.#handleMessage(message, true);
|
|
3593
|
+
if (response !== null) responses.push(response);
|
|
3594
|
+
}
|
|
3595
|
+
return responses.length === 0 ? null : `[${responses.join(",")}]`;
|
|
3596
|
+
}
|
|
3597
|
+
#handleMessage(message, inBatch) {
|
|
3513
3598
|
const record = asRecord(message);
|
|
3514
3599
|
if (record === null || record.jsonrpc !== "2.0" || typeof record.method !== "string") {
|
|
3515
3600
|
return failure(null, JSONRPC_INVALID_REQUEST, "Invalid request");
|
|
@@ -3523,12 +3608,19 @@ var McpSession = class {
|
|
|
3523
3608
|
if (typeof id !== "string" && typeof id !== "number") {
|
|
3524
3609
|
return failure(null, JSONRPC_INVALID_REQUEST, "Invalid request id");
|
|
3525
3610
|
}
|
|
3611
|
+
if (inBatch && method === "initialize") {
|
|
3612
|
+
return failure(
|
|
3613
|
+
id,
|
|
3614
|
+
JSONRPC_INVALID_REQUEST,
|
|
3615
|
+
"Invalid request: initialize must not be part of a JSON-RPC batch."
|
|
3616
|
+
);
|
|
3617
|
+
}
|
|
3526
3618
|
return this.#handleRequest(id, method, record.params);
|
|
3527
3619
|
}
|
|
3528
3620
|
#handleRequest(id, method, params) {
|
|
3529
3621
|
if (method === "initialize") return this.#initialize(id, params);
|
|
3530
3622
|
if (method === "ping") return success(id, {});
|
|
3531
|
-
if (
|
|
3623
|
+
if (this.#protocolVersion === null) {
|
|
3532
3624
|
return failure(
|
|
3533
3625
|
id,
|
|
3534
3626
|
JSONRPC_SERVER_NOT_INITIALIZED,
|
|
@@ -3547,7 +3639,7 @@ var McpSession = class {
|
|
|
3547
3639
|
const record = asRecord(params) ?? {};
|
|
3548
3640
|
const requested = typeof record.protocolVersion === "string" ? record.protocolVersion : "";
|
|
3549
3641
|
const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(requested) ? requested : LATEST_PROTOCOL_VERSION;
|
|
3550
|
-
this.#
|
|
3642
|
+
this.#protocolVersion = protocolVersion;
|
|
3551
3643
|
return success(id, {
|
|
3552
3644
|
protocolVersion,
|
|
3553
3645
|
capabilities: {
|
|
@@ -3560,12 +3652,6 @@ var McpSession = class {
|
|
|
3560
3652
|
title: "Stimeo UI Inspector",
|
|
3561
3653
|
version: this.#context.manifest.packageVersion
|
|
3562
3654
|
},
|
|
3563
|
-
// The server's own account of itself. Per the MCP schema this is a hint
|
|
3564
|
-
// a client MAY put in front of the model, which makes it the earliest
|
|
3565
|
-
// point this server can be routed to — clients that defer tool
|
|
3566
|
-
// definitions still tend to load it alongside the tool names. Hence the
|
|
3567
|
-
// trigger condition first, in the words a request would use, and a
|
|
3568
|
-
// length that survives truncation.
|
|
3569
3655
|
instructions: "Search for these tools whenever a task involves building, editing, or reviewing an accessible UI component in a Rails view \u2014 dialog/modal, drawer, dropdown menu, tabs, accordion, combobox, toast, and the rest of the catalog \u2014 or whenever HTML/ERB carrying stimeo--* attributes is in play. Stimeo UI is a headless Stimulus UI framework for Rails. Use stimeo_catalog to discover controllers, stimeo_controller for one controller's usage and accessibility contract, stimeo_example for verified reference markup, and stimeo_check to validate generated HTML/ERB before presenting it. The full manifest and every example are also exposed as resources (stimeo:// URIs), and the stimeo_build_ui / stimeo_fix_markup prompts bake this workflow into user-invokable templates."
|
|
3570
3656
|
});
|
|
3571
3657
|
}
|
|
@@ -3585,7 +3671,6 @@ var McpSession = class {
|
|
|
3585
3671
|
return failure(id, JSONRPC_INTERNAL_ERROR, `Internal error: ${message}`);
|
|
3586
3672
|
}
|
|
3587
3673
|
}
|
|
3588
|
-
/** Static resource listing: the manifest plus one example per controller. */
|
|
3589
3674
|
#listResources() {
|
|
3590
3675
|
const resources = [
|
|
3591
3676
|
{
|
|
@@ -3678,7 +3763,6 @@ async function runMcpServer(io) {
|
|
|
3678
3763
|
});
|
|
3679
3764
|
}
|
|
3680
3765
|
|
|
3681
|
-
// src/inspector/cli_bin.ts
|
|
3682
3766
|
var argv = process2.argv.slice(2);
|
|
3683
3767
|
process2.stdout.on("error", (error) => {
|
|
3684
3768
|
process2.exit(error.code === "EPIPE" ? 0 : 1);
|
|
@@ -3699,8 +3783,6 @@ if (argv[0] === "mcp") {
|
|
|
3699
3783
|
`);
|
|
3700
3784
|
}
|
|
3701
3785
|
}).then(
|
|
3702
|
-
// Set the exit code instead of calling process.exit so any buffered
|
|
3703
|
-
// stdout responses are flushed before the process ends.
|
|
3704
3786
|
() => {
|
|
3705
3787
|
process2.exitCode = 0;
|
|
3706
3788
|
},
|
|
@@ -3716,5 +3798,4 @@ if (argv[0] === "mcp") {
|
|
|
3716
3798
|
} else {
|
|
3717
3799
|
process2.exitCode = runCli(argv);
|
|
3718
3800
|
}
|
|
3719
|
-
//# sourceMappingURL=cli_bin.js.map
|
|
3720
3801
|
//# sourceMappingURL=cli_bin.js.map
|