stimeo-ui 0.17.0 → 0.18.1

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.
Files changed (299) hide show
  1. package/CHANGELOG.md +136 -2
  2. package/README.md +19 -10
  3. package/dist/cable/index.d.ts +11 -9
  4. package/dist/cable/index.js +22 -14
  5. package/dist/cable/index.js.map +1 -1
  6. package/dist/coerce-JtZVNG5h.d.ts +20 -0
  7. package/dist/controllers/accordion_controller.js +14 -6
  8. package/dist/controllers/accordion_controller.js.map +1 -1
  9. package/dist/controllers/alert_dialog_controller.js +145 -118
  10. package/dist/controllers/alert_dialog_controller.js.map +1 -1
  11. package/dist/controllers/announcer_controller.d.ts +5 -3
  12. package/dist/controllers/announcer_controller.js +113 -17
  13. package/dist/controllers/announcer_controller.js.map +1 -1
  14. package/dist/controllers/auto_submit_controller.js +185 -60
  15. package/dist/controllers/auto_submit_controller.js.map +1 -1
  16. package/dist/controllers/avatar_controller.js +55 -43
  17. package/dist/controllers/avatar_controller.js.map +1 -1
  18. package/dist/controllers/breadcrumb_controller.js.map +1 -1
  19. package/dist/controllers/bulk_select_controller.d.ts +3 -3
  20. package/dist/controllers/bulk_select_controller.js +64 -50
  21. package/dist/controllers/bulk_select_controller.js.map +1 -1
  22. package/dist/controllers/calendar_controller.d.ts +15 -12
  23. package/dist/controllers/calendar_controller.js +55 -53
  24. package/dist/controllers/calendar_controller.js.map +1 -1
  25. package/dist/controllers/carousel_controller.d.ts +9 -5
  26. package/dist/controllers/carousel_controller.js +124 -86
  27. package/dist/controllers/carousel_controller.js.map +1 -1
  28. package/dist/controllers/character_counter_controller.d.ts +27 -6
  29. package/dist/controllers/character_counter_controller.js +291 -95
  30. package/dist/controllers/character_counter_controller.js.map +1 -1
  31. package/dist/controllers/checkbox_controller.js +6 -0
  32. package/dist/controllers/checkbox_controller.js.map +1 -1
  33. package/dist/controllers/clipboard_controller.js +118 -27
  34. package/dist/controllers/clipboard_controller.js.map +1 -1
  35. package/dist/controllers/collapsible_controller.d.ts +1 -1
  36. package/dist/controllers/collapsible_controller.js +52 -49
  37. package/dist/controllers/collapsible_controller.js.map +1 -1
  38. package/dist/controllers/color_picker_controller.js +29 -7
  39. package/dist/controllers/color_picker_controller.js.map +1 -1
  40. package/dist/controllers/combobox_controller.d.ts +1 -1
  41. package/dist/controllers/combobox_controller.js +210 -71
  42. package/dist/controllers/combobox_controller.js.map +1 -1
  43. package/dist/controllers/command_palette_controller.d.ts +9 -9
  44. package/dist/controllers/command_palette_controller.js +290 -140
  45. package/dist/controllers/command_palette_controller.js.map +1 -1
  46. package/dist/controllers/conditional_fields_controller.js +145 -58
  47. package/dist/controllers/conditional_fields_controller.js.map +1 -1
  48. package/dist/controllers/confirm_controller.js +145 -118
  49. package/dist/controllers/confirm_controller.js.map +1 -1
  50. package/dist/controllers/context_menu_controller.d.ts +49 -14
  51. package/dist/controllers/context_menu_controller.js +138 -73
  52. package/dist/controllers/context_menu_controller.js.map +1 -1
  53. package/dist/controllers/count_up_controller.js.map +1 -1
  54. package/dist/controllers/countdown_controller.d.ts +2 -2
  55. package/dist/controllers/countdown_controller.js +109 -21
  56. package/dist/controllers/countdown_controller.js.map +1 -1
  57. package/dist/controllers/currency_input_controller.d.ts +75 -11
  58. package/dist/controllers/currency_input_controller.js +446 -72
  59. package/dist/controllers/currency_input_controller.js.map +1 -1
  60. package/dist/controllers/data_grid_controller.d.ts +10 -8
  61. package/dist/controllers/data_grid_controller.js +134 -28
  62. package/dist/controllers/data_grid_controller.js.map +1 -1
  63. package/dist/controllers/date_range_picker_controller.d.ts +12 -9
  64. package/dist/controllers/date_range_picker_controller.js +93 -72
  65. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  66. package/dist/controllers/dialog_controller.d.ts +4 -5
  67. package/dist/controllers/dialog_controller.js +145 -118
  68. package/dist/controllers/dialog_controller.js.map +1 -1
  69. package/dist/controllers/direct_upload_controller.d.ts +1 -1
  70. package/dist/controllers/direct_upload_controller.js +24 -14
  71. package/dist/controllers/direct_upload_controller.js.map +1 -1
  72. package/dist/controllers/dirty_form_controller.d.ts +6 -1
  73. package/dist/controllers/dirty_form_controller.js +68 -31
  74. package/dist/controllers/dirty_form_controller.js.map +1 -1
  75. package/dist/controllers/dismissible_controller.js +66 -46
  76. package/dist/controllers/dismissible_controller.js.map +1 -1
  77. package/dist/controllers/drawer_controller.js +145 -118
  78. package/dist/controllers/drawer_controller.js.map +1 -1
  79. package/dist/controllers/dropdown_controller.js +76 -63
  80. package/dist/controllers/dropdown_controller.js.map +1 -1
  81. package/dist/controllers/editable_controller.js +200 -62
  82. package/dist/controllers/editable_controller.js.map +1 -1
  83. package/dist/controllers/empty_state_controller.js +13 -6
  84. package/dist/controllers/empty_state_controller.js.map +1 -1
  85. package/dist/controllers/file_dropzone_controller.d.ts +3 -0
  86. package/dist/controllers/file_dropzone_controller.js +55 -48
  87. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  88. package/dist/controllers/filter_controller.js +9 -2
  89. package/dist/controllers/filter_controller.js.map +1 -1
  90. package/dist/controllers/flash_controller.d.ts +4 -4
  91. package/dist/controllers/flash_controller.js +66 -33
  92. package/dist/controllers/flash_controller.js.map +1 -1
  93. package/dist/controllers/focus_controller.d.ts +3 -3
  94. package/dist/controllers/focus_controller.js +39 -14
  95. package/dist/controllers/focus_controller.js.map +1 -1
  96. package/dist/controllers/form_field_controller.d.ts +2 -1
  97. package/dist/controllers/form_field_controller.js +52 -43
  98. package/dist/controllers/form_field_controller.js.map +1 -1
  99. package/dist/controllers/form_validation_controller.d.ts +3 -3
  100. package/dist/controllers/form_validation_controller.js +18 -11
  101. package/dist/controllers/form_validation_controller.js.map +1 -1
  102. package/dist/controllers/frame_loading_controller.d.ts +13 -12
  103. package/dist/controllers/frame_loading_controller.js +55 -48
  104. package/dist/controllers/frame_loading_controller.js.map +1 -1
  105. package/dist/controllers/highlight_controller.d.ts +5 -4
  106. package/dist/controllers/highlight_controller.js.map +1 -1
  107. package/dist/controllers/hover_card_controller.d.ts +4 -1
  108. package/dist/controllers/hover_card_controller.js +67 -61
  109. package/dist/controllers/hover_card_controller.js.map +1 -1
  110. package/dist/controllers/idle_controller.d.ts +6 -5
  111. package/dist/controllers/idle_controller.js +10 -6
  112. package/dist/controllers/idle_controller.js.map +1 -1
  113. package/dist/controllers/input_mask_controller.d.ts +31 -13
  114. package/dist/controllers/input_mask_controller.js +434 -24
  115. package/dist/controllers/input_mask_controller.js.map +1 -1
  116. package/dist/controllers/intersection_controller.js +3 -0
  117. package/dist/controllers/intersection_controller.js.map +1 -1
  118. package/dist/controllers/lazy_frame_controller.d.ts +3 -2
  119. package/dist/controllers/lazy_frame_controller.js +15 -3
  120. package/dist/controllers/lazy_frame_controller.js.map +1 -1
  121. package/dist/controllers/listbox_controller.d.ts +10 -7
  122. package/dist/controllers/listbox_controller.js +260 -79
  123. package/dist/controllers/listbox_controller.js.map +1 -1
  124. package/dist/controllers/local_time_controller.d.ts +8 -6
  125. package/dist/controllers/local_time_controller.js +48 -13
  126. package/dist/controllers/local_time_controller.js.map +1 -1
  127. package/dist/controllers/masonry_controller.js +11 -4
  128. package/dist/controllers/masonry_controller.js.map +1 -1
  129. package/dist/controllers/menu_controller.d.ts +24 -5
  130. package/dist/controllers/menu_controller.js +138 -82
  131. package/dist/controllers/menu_controller.js.map +1 -1
  132. package/dist/controllers/menubar_controller.d.ts +49 -7
  133. package/dist/controllers/menubar_controller.js +65 -19
  134. package/dist/controllers/menubar_controller.js.map +1 -1
  135. package/dist/controllers/meter_controller.d.ts +13 -20
  136. package/dist/controllers/meter_controller.js +270 -24
  137. package/dist/controllers/meter_controller.js.map +1 -1
  138. package/dist/controllers/multi_select_controller.d.ts +19 -16
  139. package/dist/controllers/multi_select_controller.js +272 -95
  140. package/dist/controllers/multi_select_controller.js.map +1 -1
  141. package/dist/controllers/navigation_menu_controller.d.ts +19 -5
  142. package/dist/controllers/navigation_menu_controller.js +67 -19
  143. package/dist/controllers/navigation_menu_controller.js.map +1 -1
  144. package/dist/controllers/nested_form_controller.js +98 -64
  145. package/dist/controllers/nested_form_controller.js.map +1 -1
  146. package/dist/controllers/network_status_controller.js +70 -52
  147. package/dist/controllers/network_status_controller.js.map +1 -1
  148. package/dist/controllers/number_input_controller.d.ts +24 -6
  149. package/dist/controllers/number_input_controller.js +344 -94
  150. package/dist/controllers/number_input_controller.js.map +1 -1
  151. package/dist/controllers/optimistic_controller.d.ts +8 -5
  152. package/dist/controllers/optimistic_controller.js +29 -11
  153. package/dist/controllers/optimistic_controller.js.map +1 -1
  154. package/dist/controllers/otp_controller.d.ts +35 -4
  155. package/dist/controllers/otp_controller.js +502 -104
  156. package/dist/controllers/otp_controller.js.map +1 -1
  157. package/dist/controllers/overflow_indicator_controller.js +6 -0
  158. package/dist/controllers/overflow_indicator_controller.js.map +1 -1
  159. package/dist/controllers/overflow_menu_controller.d.ts +10 -9
  160. package/dist/controllers/overflow_menu_controller.js +136 -21
  161. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  162. package/dist/controllers/pagination_controller.d.ts +3 -2
  163. package/dist/controllers/pagination_controller.js +47 -14
  164. package/dist/controllers/pagination_controller.js.map +1 -1
  165. package/dist/controllers/password_reveal_controller.d.ts +5 -4
  166. package/dist/controllers/password_reveal_controller.js +52 -49
  167. package/dist/controllers/password_reveal_controller.js.map +1 -1
  168. package/dist/controllers/password_strength_controller.d.ts +1 -1
  169. package/dist/controllers/password_strength_controller.js +13 -6
  170. package/dist/controllers/password_strength_controller.js.map +1 -1
  171. package/dist/controllers/persist_controller.js +48 -128
  172. package/dist/controllers/persist_controller.js.map +1 -1
  173. package/dist/controllers/pointer_drag_controller.d.ts +20 -8
  174. package/dist/controllers/pointer_drag_controller.js +255 -24
  175. package/dist/controllers/pointer_drag_controller.js.map +1 -1
  176. package/dist/controllers/popover_controller.d.ts +9 -5
  177. package/dist/controllers/popover_controller.js +91 -65
  178. package/dist/controllers/popover_controller.js.map +1 -1
  179. package/dist/controllers/portal_controller.js +6 -0
  180. package/dist/controllers/portal_controller.js.map +1 -1
  181. package/dist/controllers/preview_guard_controller.js +14 -3
  182. package/dist/controllers/preview_guard_controller.js.map +1 -1
  183. package/dist/controllers/progress_controller.d.ts +9 -19
  184. package/dist/controllers/progress_controller.js +271 -27
  185. package/dist/controllers/progress_controller.js.map +1 -1
  186. package/dist/controllers/radio_group_controller.d.ts +11 -8
  187. package/dist/controllers/radio_group_controller.js +167 -80
  188. package/dist/controllers/radio_group_controller.js.map +1 -1
  189. package/dist/controllers/range_slider_controller.d.ts +4 -3
  190. package/dist/controllers/range_slider_controller.js +27 -7
  191. package/dist/controllers/range_slider_controller.js.map +1 -1
  192. package/dist/controllers/rating_controller.js +93 -57
  193. package/dist/controllers/rating_controller.js.map +1 -1
  194. package/dist/controllers/read_more_controller.js +10 -6
  195. package/dist/controllers/read_more_controller.js.map +1 -1
  196. package/dist/controllers/reading_progress_controller.js +22 -5
  197. package/dist/controllers/reading_progress_controller.js.map +1 -1
  198. package/dist/controllers/relative_time_controller.d.ts +4 -4
  199. package/dist/controllers/relative_time_controller.js +75 -11
  200. package/dist/controllers/relative_time_controller.js.map +1 -1
  201. package/dist/controllers/reset_on_restore_controller.d.ts +3 -3
  202. package/dist/controllers/reset_on_restore_controller.js +6 -0
  203. package/dist/controllers/reset_on_restore_controller.js.map +1 -1
  204. package/dist/controllers/resizable_controller.d.ts +3 -0
  205. package/dist/controllers/resizable_controller.js +55 -22
  206. package/dist/controllers/resizable_controller.js.map +1 -1
  207. package/dist/controllers/roving_controller.d.ts +3 -3
  208. package/dist/controllers/roving_controller.js +10 -4
  209. package/dist/controllers/roving_controller.js.map +1 -1
  210. package/dist/controllers/scroll_area_controller.js +129 -88
  211. package/dist/controllers/scroll_area_controller.js.map +1 -1
  212. package/dist/controllers/scroll_restore_controller.d.ts +3 -3
  213. package/dist/controllers/scroll_restore_controller.js +14 -2
  214. package/dist/controllers/scroll_restore_controller.js.map +1 -1
  215. package/dist/controllers/scroll_visibility_controller.js +93 -60
  216. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  217. package/dist/controllers/scrollspy_controller.js +11 -5
  218. package/dist/controllers/scrollspy_controller.js.map +1 -1
  219. package/dist/controllers/separator_controller.d.ts +1 -1
  220. package/dist/controllers/separator_controller.js +59 -43
  221. package/dist/controllers/separator_controller.js.map +1 -1
  222. package/dist/controllers/sidebar_controller.d.ts +1 -1
  223. package/dist/controllers/sidebar_controller.js +150 -122
  224. package/dist/controllers/sidebar_controller.js.map +1 -1
  225. package/dist/controllers/skeleton_controller.js +55 -48
  226. package/dist/controllers/skeleton_controller.js.map +1 -1
  227. package/dist/controllers/slider_controller.d.ts +2 -1
  228. package/dist/controllers/slider_controller.js +27 -6
  229. package/dist/controllers/slider_controller.js.map +1 -1
  230. package/dist/controllers/smart_sticky_header_controller.d.ts +1 -1
  231. package/dist/controllers/smart_sticky_header_controller.js +13 -5
  232. package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
  233. package/dist/controllers/sortable_controller.d.ts +4 -4
  234. package/dist/controllers/sortable_controller.js +27 -14
  235. package/dist/controllers/sortable_controller.js.map +1 -1
  236. package/dist/controllers/spinner_controller.js +55 -48
  237. package/dist/controllers/spinner_controller.js.map +1 -1
  238. package/dist/controllers/step_indicator_controller.d.ts +4 -4
  239. package/dist/controllers/step_indicator_controller.js +6 -0
  240. package/dist/controllers/step_indicator_controller.js.map +1 -1
  241. package/dist/controllers/stepper_controller.d.ts +2 -3
  242. package/dist/controllers/stepper_controller.js +6 -0
  243. package/dist/controllers/stepper_controller.js.map +1 -1
  244. package/dist/controllers/stick_to_bottom_controller.d.ts +3 -1
  245. package/dist/controllers/stick_to_bottom_controller.js +19 -8
  246. package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
  247. package/dist/controllers/sticky_observer_controller.js +49 -43
  248. package/dist/controllers/sticky_observer_controller.js.map +1 -1
  249. package/dist/controllers/submit_once_controller.d.ts +2 -1
  250. package/dist/controllers/submit_once_controller.js +145 -85
  251. package/dist/controllers/submit_once_controller.js.map +1 -1
  252. package/dist/controllers/switch_controller.d.ts +7 -4
  253. package/dist/controllers/switch_controller.js +172 -28
  254. package/dist/controllers/switch_controller.js.map +1 -1
  255. package/dist/controllers/tabs_controller.d.ts +7 -4
  256. package/dist/controllers/tabs_controller.js +6 -1
  257. package/dist/controllers/tabs_controller.js.map +1 -1
  258. package/dist/controllers/tags_input_controller.d.ts +4 -3
  259. package/dist/controllers/tags_input_controller.js +157 -28
  260. package/dist/controllers/tags_input_controller.js.map +1 -1
  261. package/dist/controllers/textarea_autosize_controller.d.ts +1 -1
  262. package/dist/controllers/textarea_autosize_controller.js +40 -19
  263. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  264. package/dist/controllers/theme_controller.d.ts +3 -2
  265. package/dist/controllers/theme_controller.js +10 -4
  266. package/dist/controllers/theme_controller.js.map +1 -1
  267. package/dist/controllers/time_picker_controller.d.ts +38 -5
  268. package/dist/controllers/time_picker_controller.js +192 -54
  269. package/dist/controllers/time_picker_controller.js.map +1 -1
  270. package/dist/controllers/toast_controller.d.ts +4 -5
  271. package/dist/controllers/toast_controller.js +58 -27
  272. package/dist/controllers/toast_controller.js.map +1 -1
  273. package/dist/controllers/toggle_group_controller.d.ts +2 -3
  274. package/dist/controllers/toggle_group_controller.js +158 -56
  275. package/dist/controllers/toggle_group_controller.js.map +1 -1
  276. package/dist/controllers/toolbar_controller.d.ts +8 -6
  277. package/dist/controllers/toolbar_controller.js +150 -21
  278. package/dist/controllers/toolbar_controller.js.map +1 -1
  279. package/dist/controllers/tooltip_controller.d.ts +4 -1
  280. package/dist/controllers/tooltip_controller.js.map +1 -1
  281. package/dist/controllers/transition_controller.js.map +1 -1
  282. package/dist/controllers/tree_view_controller.d.ts +1 -1
  283. package/dist/controllers/tree_view_controller.js +134 -25
  284. package/dist/controllers/tree_view_controller.js.map +1 -1
  285. package/dist/index.d.ts +4 -1
  286. package/dist/index.js +2515 -1315
  287. package/dist/index.js.map +1 -1
  288. package/dist/inspector/cli.d.ts +25 -12
  289. package/dist/inspector/cli.js +21 -3
  290. package/dist/inspector/cli.js.map +1 -1
  291. package/dist/inspector/cli_bin.d.ts +1 -1
  292. package/dist/inspector/cli_bin.js +62 -8
  293. package/dist/inspector/cli_bin.js.map +1 -1
  294. package/dist/inspector/examples.json +13 -13
  295. package/dist/inspector/manifest.json +19 -5
  296. package/dist/positioning/index.d.ts +9 -8
  297. package/dist/positioning/index.js +6 -0
  298. package/dist/positioning/index.js.map +1 -1
  299. package/package.json +11 -10
@@ -1,2 +1,2 @@
1
1
 
2
- export { }
2
+ export { };
@@ -18,17 +18,20 @@ var ANNOUNCING_CONTROLLERS = [
18
18
  "stimeo--flash",
19
19
  "stimeo--form-field",
20
20
  "stimeo--frame-loading",
21
+ "stimeo--live-counter",
21
22
  "stimeo--meter",
22
23
  "stimeo--multi-select",
23
24
  "stimeo--nested-form",
24
25
  "stimeo--network-status",
25
26
  "stimeo--password-strength",
27
+ "stimeo--presence",
26
28
  "stimeo--progress",
27
29
  "stimeo--skeleton",
28
30
  "stimeo--sortable",
29
31
  "stimeo--spinner",
30
32
  "stimeo--submit-once",
31
- "stimeo--tags-input"
33
+ "stimeo--tags-input",
34
+ "stimeo--typing-indicator"
32
35
  ];
33
36
  function positionAt(source, index) {
34
37
  const before = source.slice(0, index);
@@ -1181,6 +1184,11 @@ function checkSource(source, manifest) {
1181
1184
  const effectiveType = type?.value.trim().toLowerCase() || "submit";
1182
1185
  return (rule.buttonTypes ?? []).includes(effectiveType);
1183
1186
  }
1187
+ if (element.tag === "input" && rule.inputTypes) {
1188
+ const type = element.attrs.find((attr) => attr.name === "type");
1189
+ if (type && isDynamicValue(type)) return null;
1190
+ return rule.inputTypes.includes(type?.value.toLowerCase() || "text");
1191
+ }
1184
1192
  if (ALWAYS_INTERACTIVE_HOSTS.has(element.tag)) return false;
1185
1193
  if ((element.tag === "a" || element.tag === "area") && hasAttr(element, "href")) return false;
1186
1194
  if ((element.tag === "audio" || element.tag === "video") && hasAttr(element, "controls")) {
@@ -2073,9 +2081,11 @@ function checkSource(source, manifest) {
2073
2081
  const what = describeCounted(rule.target, rule.attr, rule.values);
2074
2082
  const where = rule.within === "" ? "controller scope" : `"${rule.within}" target`;
2075
2083
  for (const container of containers) {
2084
+ if (rule.excludeTemplateContents && crossesTemplateContent(container, node)) continue;
2076
2085
  const matched = [];
2077
2086
  for (const el of counted) {
2078
2087
  if (!isSelfOrDescendantOf(el, container)) continue;
2088
+ if (rule.excludeTemplateContents && crossesTemplateContent(el, node)) continue;
2079
2089
  if (rule.attr === void 0) {
2080
2090
  matched.push({ el, at: el });
2081
2091
  continue;
@@ -2092,7 +2102,7 @@ function checkSource(source, manifest) {
2092
2102
  report(
2093
2103
  el,
2094
2104
  "cardinality-violation",
2095
- "error",
2105
+ rule.severity ?? "error",
2096
2106
  `"${identifier}" allows at most ${rule.max} ${what} per ${where}, but found ${matched.length}.`,
2097
2107
  at,
2098
2108
  rule.suggestion
@@ -2104,7 +2114,7 @@ function checkSource(source, manifest) {
2104
2114
  report(
2105
2115
  container,
2106
2116
  "cardinality-violation",
2107
- complete ? "error" : "warning",
2117
+ complete ? rule.severity ?? "error" : "warning",
2108
2118
  `"${identifier}" requires at least ${rule.min} ${what} per ${where}, but found ${matched.length}.`,
2109
2119
  container,
2110
2120
  complete ? rule.suggestion : UNRESOLVED_TARGET_HINT
@@ -2332,6 +2342,14 @@ var IDREF_ATTRS = /* @__PURE__ */ new Set([
2332
2342
  "aria-owns"
2333
2343
  ]);
2334
2344
  var IGNORE_ATTR = "data-stimeo-ignore";
2345
+ function crossesTemplateContent(node, scope) {
2346
+ if (node === scope) return false;
2347
+ for (let parent = node.parent; parent; parent = parent.parent) {
2348
+ if (parent.tag === "template") return true;
2349
+ if (parent === scope) return false;
2350
+ }
2351
+ return false;
2352
+ }
2335
2353
  function findOwner(node, identifier) {
2336
2354
  let current = node;
2337
2355
  while (current && current.tag !== "#root") {
@@ -3196,6 +3214,10 @@ var CONTROLLER_CONTRACT_SCHEMA = {
3196
3214
  ...STRING_ARRAY,
3197
3215
  description: "Literal button types admitted by non-interactive-or-button."
3198
3216
  },
3217
+ inputTypes: {
3218
+ ...STRING_ARRAY,
3219
+ description: "Literal input types admitted in either mode (a native control the controller composes with)."
3220
+ },
3199
3221
  suggestion: { type: "string" }
3200
3222
  },
3201
3223
  required: ["target", "mode", "suggestion"]
@@ -3293,6 +3315,11 @@ var CONTROLLER_CONTRACT_SCHEMA = {
3293
3315
  values: { ...STRING_ARRAY, description: "Restrict the attribute to these values." },
3294
3316
  min: { type: "integer", description: "Smallest permitted count (inclusive)." },
3295
3317
  max: { type: "integer", description: "Largest permitted count (inclusive)." },
3318
+ severity: { type: "string", enum: ["error", "warning"] },
3319
+ excludeTemplateContents: {
3320
+ type: "boolean",
3321
+ description: "Exclude targets and containers across template contents from the scope."
3322
+ },
3296
3323
  when: VALUE_CONDITION_SCHEMA,
3297
3324
  suggestion: { type: "string" }
3298
3325
  },
@@ -3518,6 +3545,7 @@ var SUPPORTED_PROTOCOL_VERSIONS = [
3518
3545
  "2025-03-26",
3519
3546
  "2024-11-05"
3520
3547
  ];
3548
+ var BATCH_PROTOCOL_VERSION = "2025-03-26";
3521
3549
  var JSONRPC_PARSE_ERROR = -32700;
3522
3550
  var JSONRPC_INVALID_REQUEST = -32600;
3523
3551
  var JSONRPC_METHOD_NOT_FOUND = -32601;
@@ -3541,7 +3569,7 @@ function asRecord(value) {
3541
3569
  }
3542
3570
  var McpSession = class {
3543
3571
  #context;
3544
- #initialized = false;
3572
+ #protocolVersion = null;
3545
3573
  constructor(context) {
3546
3574
  this.#context = context;
3547
3575
  }
@@ -3554,9 +3582,28 @@ var McpSession = class {
3554
3582
  } catch {
3555
3583
  return failure(null, JSONRPC_PARSE_ERROR, "Parse error");
3556
3584
  }
3557
- return this.#handleMessage(message);
3585
+ if (Array.isArray(message)) return this.#handleBatch(message);
3586
+ return this.#handleMessage(message, false);
3558
3587
  }
3559
- #handleMessage(message) {
3588
+ #handleBatch(messages) {
3589
+ if (this.#protocolVersion !== BATCH_PROTOCOL_VERSION) {
3590
+ return failure(
3591
+ null,
3592
+ JSONRPC_INVALID_REQUEST,
3593
+ `Invalid request: JSON-RPC batches are accepted only in a session that negotiated protocol version ${BATCH_PROTOCOL_VERSION}.`
3594
+ );
3595
+ }
3596
+ if (messages.length === 0) {
3597
+ return failure(null, JSONRPC_INVALID_REQUEST, "Invalid request: empty batch");
3598
+ }
3599
+ const responses = [];
3600
+ for (const message of messages) {
3601
+ const response = this.#handleMessage(message, true);
3602
+ if (response !== null) responses.push(response);
3603
+ }
3604
+ return responses.length === 0 ? null : `[${responses.join(",")}]`;
3605
+ }
3606
+ #handleMessage(message, inBatch) {
3560
3607
  const record = asRecord(message);
3561
3608
  if (record === null || record.jsonrpc !== "2.0" || typeof record.method !== "string") {
3562
3609
  return failure(null, JSONRPC_INVALID_REQUEST, "Invalid request");
@@ -3570,12 +3617,19 @@ var McpSession = class {
3570
3617
  if (typeof id !== "string" && typeof id !== "number") {
3571
3618
  return failure(null, JSONRPC_INVALID_REQUEST, "Invalid request id");
3572
3619
  }
3620
+ if (inBatch && method === "initialize") {
3621
+ return failure(
3622
+ id,
3623
+ JSONRPC_INVALID_REQUEST,
3624
+ "Invalid request: initialize must not be part of a JSON-RPC batch."
3625
+ );
3626
+ }
3573
3627
  return this.#handleRequest(id, method, record.params);
3574
3628
  }
3575
3629
  #handleRequest(id, method, params) {
3576
3630
  if (method === "initialize") return this.#initialize(id, params);
3577
3631
  if (method === "ping") return success(id, {});
3578
- if (!this.#initialized) {
3632
+ if (this.#protocolVersion === null) {
3579
3633
  return failure(
3580
3634
  id,
3581
3635
  JSONRPC_SERVER_NOT_INITIALIZED,
@@ -3594,7 +3648,7 @@ var McpSession = class {
3594
3648
  const record = asRecord(params) ?? {};
3595
3649
  const requested = typeof record.protocolVersion === "string" ? record.protocolVersion : "";
3596
3650
  const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(requested) ? requested : LATEST_PROTOCOL_VERSION;
3597
- this.#initialized = true;
3651
+ this.#protocolVersion = protocolVersion;
3598
3652
  return success(id, {
3599
3653
  protocolVersion,
3600
3654
  capabilities: {