stimeo-ui 0.16.0 → 0.17.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.
Files changed (328) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +8 -1
  3. package/dist/cable/index.d.ts +79 -23
  4. package/dist/cable/index.js +363 -436
  5. package/dist/cable/index.js.map +1 -1
  6. package/dist/controllers/accordion_controller.d.ts +4 -2
  7. package/dist/controllers/accordion_controller.js +166 -55
  8. package/dist/controllers/accordion_controller.js.map +1 -1
  9. package/dist/controllers/alert_dialog_controller.d.ts +12 -2
  10. package/dist/controllers/alert_dialog_controller.js +862 -221
  11. package/dist/controllers/alert_dialog_controller.js.map +1 -1
  12. package/dist/controllers/announcer_controller.d.ts +35 -5
  13. package/dist/controllers/announcer_controller.js +135 -198
  14. package/dist/controllers/announcer_controller.js.map +1 -1
  15. package/dist/controllers/aspect_ratio_controller.js +0 -10
  16. package/dist/controllers/aspect_ratio_controller.js.map +1 -1
  17. package/dist/controllers/auto_submit_controller.d.ts +30 -6
  18. package/dist/controllers/auto_submit_controller.js +271 -127
  19. package/dist/controllers/auto_submit_controller.js.map +1 -1
  20. package/dist/controllers/avatar_controller.js +171 -105
  21. package/dist/controllers/avatar_controller.js.map +1 -1
  22. package/dist/controllers/breadcrumb_controller.js +0 -130
  23. package/dist/controllers/breadcrumb_controller.js.map +1 -1
  24. package/dist/controllers/bulk_select_controller.d.ts +18 -0
  25. package/dist/controllers/bulk_select_controller.js +262 -52
  26. package/dist/controllers/bulk_select_controller.js.map +1 -1
  27. package/dist/controllers/calendar_controller.d.ts +24 -5
  28. package/dist/controllers/calendar_controller.js +175 -209
  29. package/dist/controllers/calendar_controller.js.map +1 -1
  30. package/dist/controllers/carousel_controller.d.ts +34 -7
  31. package/dist/controllers/carousel_controller.js +461 -399
  32. package/dist/controllers/carousel_controller.js.map +1 -1
  33. package/dist/controllers/character_counter_controller.d.ts +17 -1
  34. package/dist/controllers/character_counter_controller.js +246 -156
  35. package/dist/controllers/character_counter_controller.js.map +1 -1
  36. package/dist/controllers/checkbox_controller.d.ts +7 -2
  37. package/dist/controllers/checkbox_controller.js +32 -74
  38. package/dist/controllers/checkbox_controller.js.map +1 -1
  39. package/dist/controllers/clipboard_controller.d.ts +16 -5
  40. package/dist/controllers/clipboard_controller.js +168 -147
  41. package/dist/controllers/clipboard_controller.js.map +1 -1
  42. package/dist/controllers/collapsible_controller.d.ts +16 -4
  43. package/dist/controllers/collapsible_controller.js +301 -120
  44. package/dist/controllers/collapsible_controller.js.map +1 -1
  45. package/dist/controllers/color_picker_controller.d.ts +18 -6
  46. package/dist/controllers/color_picker_controller.js +149 -139
  47. package/dist/controllers/color_picker_controller.js.map +1 -1
  48. package/dist/controllers/combobox_controller.d.ts +23 -5
  49. package/dist/controllers/combobox_controller.js +360 -133
  50. package/dist/controllers/combobox_controller.js.map +1 -1
  51. package/dist/controllers/command_palette_controller.d.ts +45 -14
  52. package/dist/controllers/command_palette_controller.js +970 -358
  53. package/dist/controllers/command_palette_controller.js.map +1 -1
  54. package/dist/controllers/conditional_fields_controller.d.ts +15 -2
  55. package/dist/controllers/conditional_fields_controller.js +166 -124
  56. package/dist/controllers/conditional_fields_controller.js.map +1 -1
  57. package/dist/controllers/confirm_controller.d.ts +49 -12
  58. package/dist/controllers/confirm_controller.js +939 -248
  59. package/dist/controllers/confirm_controller.js.map +1 -1
  60. package/dist/controllers/context_menu_controller.d.ts +31 -4
  61. package/dist/controllers/context_menu_controller.js +256 -128
  62. package/dist/controllers/context_menu_controller.js.map +1 -1
  63. package/dist/controllers/count_up_controller.d.ts +13 -1
  64. package/dist/controllers/count_up_controller.js +73 -21
  65. package/dist/controllers/count_up_controller.js.map +1 -1
  66. package/dist/controllers/countdown_controller.d.ts +45 -1
  67. package/dist/controllers/countdown_controller.js +183 -148
  68. package/dist/controllers/countdown_controller.js.map +1 -1
  69. package/dist/controllers/currency_input_controller.d.ts +21 -2
  70. package/dist/controllers/currency_input_controller.js +134 -158
  71. package/dist/controllers/currency_input_controller.js.map +1 -1
  72. package/dist/controllers/data_grid_controller.d.ts +15 -4
  73. package/dist/controllers/data_grid_controller.js +114 -186
  74. package/dist/controllers/data_grid_controller.js.map +1 -1
  75. package/dist/controllers/date_range_picker_controller.d.ts +30 -5
  76. package/dist/controllers/date_range_picker_controller.js +288 -206
  77. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  78. package/dist/controllers/dialog_controller.d.ts +13 -1
  79. package/dist/controllers/dialog_controller.js +858 -223
  80. package/dist/controllers/dialog_controller.js.map +1 -1
  81. package/dist/controllers/direct_upload_controller.d.ts +24 -7
  82. package/dist/controllers/direct_upload_controller.js +73 -153
  83. package/dist/controllers/direct_upload_controller.js.map +1 -1
  84. package/dist/controllers/dirty_form_controller.js +14 -48
  85. package/dist/controllers/dirty_form_controller.js.map +1 -1
  86. package/dist/controllers/dismissible_controller.d.ts +19 -0
  87. package/dist/controllers/dismissible_controller.js +175 -21
  88. package/dist/controllers/dismissible_controller.js.map +1 -1
  89. package/dist/controllers/drawer_controller.d.ts +39 -11
  90. package/dist/controllers/drawer_controller.js +933 -341
  91. package/dist/controllers/drawer_controller.js.map +1 -1
  92. package/dist/controllers/dropdown_controller.d.ts +31 -1
  93. package/dist/controllers/dropdown_controller.js +312 -82
  94. package/dist/controllers/dropdown_controller.js.map +1 -1
  95. package/dist/controllers/editable_controller.d.ts +12 -1
  96. package/dist/controllers/editable_controller.js +158 -68
  97. package/dist/controllers/editable_controller.js.map +1 -1
  98. package/dist/controllers/empty_state_controller.js +67 -53
  99. package/dist/controllers/empty_state_controller.js.map +1 -1
  100. package/dist/controllers/file_dropzone_controller.d.ts +60 -18
  101. package/dist/controllers/file_dropzone_controller.js +311 -207
  102. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  103. package/dist/controllers/filter_controller.js +67 -39
  104. package/dist/controllers/filter_controller.js.map +1 -1
  105. package/dist/controllers/flash_controller.d.ts +31 -8
  106. package/dist/controllers/flash_controller.js +172 -314
  107. package/dist/controllers/flash_controller.js.map +1 -1
  108. package/dist/controllers/focus_controller.d.ts +12 -3
  109. package/dist/controllers/focus_controller.js +654 -240
  110. package/dist/controllers/focus_controller.js.map +1 -1
  111. package/dist/controllers/form_field_controller.js +147 -132
  112. package/dist/controllers/form_field_controller.js.map +1 -1
  113. package/dist/controllers/form_validation_controller.js +13 -86
  114. package/dist/controllers/form_validation_controller.js.map +1 -1
  115. package/dist/controllers/frame_loading_controller.d.ts +41 -9
  116. package/dist/controllers/frame_loading_controller.js +264 -213
  117. package/dist/controllers/frame_loading_controller.js.map +1 -1
  118. package/dist/controllers/highlight_controller.d.ts +22 -2
  119. package/dist/controllers/highlight_controller.js +107 -75
  120. package/dist/controllers/highlight_controller.js.map +1 -1
  121. package/dist/controllers/hover_card_controller.d.ts +56 -3
  122. package/dist/controllers/hover_card_controller.js +309 -118
  123. package/dist/controllers/hover_card_controller.js.map +1 -1
  124. package/dist/controllers/idle_controller.d.ts +42 -1
  125. package/dist/controllers/idle_controller.js +267 -101
  126. package/dist/controllers/idle_controller.js.map +1 -1
  127. package/dist/controllers/input_mask_controller.js +71 -72
  128. package/dist/controllers/input_mask_controller.js.map +1 -1
  129. package/dist/controllers/intersection_controller.d.ts +32 -13
  130. package/dist/controllers/intersection_controller.js +147 -106
  131. package/dist/controllers/intersection_controller.js.map +1 -1
  132. package/dist/controllers/lazy_frame_controller.d.ts +16 -0
  133. package/dist/controllers/lazy_frame_controller.js +9 -65
  134. package/dist/controllers/lazy_frame_controller.js.map +1 -1
  135. package/dist/controllers/listbox_controller.d.ts +34 -2
  136. package/dist/controllers/listbox_controller.js +306 -204
  137. package/dist/controllers/listbox_controller.js.map +1 -1
  138. package/dist/controllers/local_time_controller.d.ts +1 -1
  139. package/dist/controllers/local_time_controller.js +54 -64
  140. package/dist/controllers/local_time_controller.js.map +1 -1
  141. package/dist/controllers/masonry_controller.d.ts +11 -3
  142. package/dist/controllers/masonry_controller.js +70 -93
  143. package/dist/controllers/masonry_controller.js.map +1 -1
  144. package/dist/controllers/menu_controller.d.ts +32 -7
  145. package/dist/controllers/menu_controller.js +214 -156
  146. package/dist/controllers/menu_controller.js.map +1 -1
  147. package/dist/controllers/menubar_controller.d.ts +4 -4
  148. package/dist/controllers/menubar_controller.js +170 -329
  149. package/dist/controllers/menubar_controller.js.map +1 -1
  150. package/dist/controllers/meter_controller.d.ts +20 -0
  151. package/dist/controllers/meter_controller.js +151 -67
  152. package/dist/controllers/meter_controller.js.map +1 -1
  153. package/dist/controllers/multi_select_controller.d.ts +32 -4
  154. package/dist/controllers/multi_select_controller.js +593 -358
  155. package/dist/controllers/multi_select_controller.js.map +1 -1
  156. package/dist/controllers/navigation_menu_controller.d.ts +8 -1
  157. package/dist/controllers/navigation_menu_controller.js +124 -232
  158. package/dist/controllers/navigation_menu_controller.js.map +1 -1
  159. package/dist/controllers/nested_form_controller.d.ts +10 -0
  160. package/dist/controllers/nested_form_controller.js +352 -182
  161. package/dist/controllers/nested_form_controller.js.map +1 -1
  162. package/dist/controllers/network_status_controller.d.ts +23 -0
  163. package/dist/controllers/network_status_controller.js +242 -54
  164. package/dist/controllers/network_status_controller.js.map +1 -1
  165. package/dist/controllers/number_input_controller.d.ts +26 -2
  166. package/dist/controllers/number_input_controller.js +320 -263
  167. package/dist/controllers/number_input_controller.js.map +1 -1
  168. package/dist/controllers/optimistic_controller.js +16 -76
  169. package/dist/controllers/optimistic_controller.js.map +1 -1
  170. package/dist/controllers/otp_controller.d.ts +20 -4
  171. package/dist/controllers/otp_controller.js +198 -193
  172. package/dist/controllers/otp_controller.js.map +1 -1
  173. package/dist/controllers/overflow_indicator_controller.d.ts +5 -0
  174. package/dist/controllers/overflow_indicator_controller.js +116 -113
  175. package/dist/controllers/overflow_indicator_controller.js.map +1 -1
  176. package/dist/controllers/overflow_menu_controller.d.ts +48 -11
  177. package/dist/controllers/overflow_menu_controller.js +343 -283
  178. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  179. package/dist/controllers/pagination_controller.d.ts +35 -6
  180. package/dist/controllers/pagination_controller.js +295 -119
  181. package/dist/controllers/pagination_controller.js.map +1 -1
  182. package/dist/controllers/password_reveal_controller.d.ts +45 -8
  183. package/dist/controllers/password_reveal_controller.js +389 -121
  184. package/dist/controllers/password_reveal_controller.js.map +1 -1
  185. package/dist/controllers/password_strength_controller.d.ts +14 -5
  186. package/dist/controllers/password_strength_controller.js +99 -153
  187. package/dist/controllers/password_strength_controller.js.map +1 -1
  188. package/dist/controllers/persist_controller.d.ts +11 -4
  189. package/dist/controllers/persist_controller.js +237 -103
  190. package/dist/controllers/persist_controller.js.map +1 -1
  191. package/dist/controllers/pointer_drag_controller.d.ts +19 -7
  192. package/dist/controllers/pointer_drag_controller.js +185 -165
  193. package/dist/controllers/pointer_drag_controller.js.map +1 -1
  194. package/dist/controllers/popover_controller.d.ts +38 -2
  195. package/dist/controllers/popover_controller.js +236 -97
  196. package/dist/controllers/popover_controller.js.map +1 -1
  197. package/dist/controllers/portal_controller.d.ts +44 -4
  198. package/dist/controllers/portal_controller.js +209 -76
  199. package/dist/controllers/portal_controller.js.map +1 -1
  200. package/dist/controllers/preview_guard_controller.d.ts +10 -4
  201. package/dist/controllers/preview_guard_controller.js +232 -116
  202. package/dist/controllers/preview_guard_controller.js.map +1 -1
  203. package/dist/controllers/progress_controller.d.ts +11 -0
  204. package/dist/controllers/progress_controller.js +125 -56
  205. package/dist/controllers/progress_controller.js.map +1 -1
  206. package/dist/controllers/radio_group_controller.d.ts +14 -5
  207. package/dist/controllers/radio_group_controller.js +117 -137
  208. package/dist/controllers/radio_group_controller.js.map +1 -1
  209. package/dist/controllers/range_slider_controller.d.ts +43 -3
  210. package/dist/controllers/range_slider_controller.js +192 -105
  211. package/dist/controllers/range_slider_controller.js.map +1 -1
  212. package/dist/controllers/rating_controller.d.ts +20 -4
  213. package/dist/controllers/rating_controller.js +418 -207
  214. package/dist/controllers/rating_controller.js.map +1 -1
  215. package/dist/controllers/read_more_controller.d.ts +2 -0
  216. package/dist/controllers/read_more_controller.js +134 -63
  217. package/dist/controllers/read_more_controller.js.map +1 -1
  218. package/dist/controllers/reading_progress_controller.d.ts +1 -1
  219. package/dist/controllers/reading_progress_controller.js +147 -135
  220. package/dist/controllers/reading_progress_controller.js.map +1 -1
  221. package/dist/controllers/relative_time_controller.d.ts +18 -4
  222. package/dist/controllers/relative_time_controller.js +145 -110
  223. package/dist/controllers/relative_time_controller.js.map +1 -1
  224. package/dist/controllers/reset_on_restore_controller.d.ts +85 -0
  225. package/dist/controllers/{reset_before_cache_controller.js → reset_on_restore_controller.js} +97 -38
  226. package/dist/controllers/reset_on_restore_controller.js.map +1 -0
  227. package/dist/controllers/resizable_controller.d.ts +28 -2
  228. package/dist/controllers/resizable_controller.js +255 -139
  229. package/dist/controllers/resizable_controller.js.map +1 -1
  230. package/dist/controllers/roving_controller.js +39 -84
  231. package/dist/controllers/roving_controller.js.map +1 -1
  232. package/dist/controllers/scroll_area_controller.d.ts +7 -3
  233. package/dist/controllers/scroll_area_controller.js +428 -225
  234. package/dist/controllers/scroll_area_controller.js.map +1 -1
  235. package/dist/controllers/scroll_restore_controller.js +0 -53
  236. package/dist/controllers/scroll_restore_controller.js.map +1 -1
  237. package/dist/controllers/scroll_visibility_controller.d.ts +28 -12
  238. package/dist/controllers/scroll_visibility_controller.js +395 -145
  239. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  240. package/dist/controllers/scrollspy_controller.d.ts +6 -1
  241. package/dist/controllers/scrollspy_controller.js +181 -242
  242. package/dist/controllers/scrollspy_controller.js.map +1 -1
  243. package/dist/controllers/separator_controller.d.ts +19 -4
  244. package/dist/controllers/separator_controller.js +267 -140
  245. package/dist/controllers/separator_controller.js.map +1 -1
  246. package/dist/controllers/sidebar_controller.d.ts +64 -7
  247. package/dist/controllers/sidebar_controller.js +1023 -386
  248. package/dist/controllers/sidebar_controller.js.map +1 -1
  249. package/dist/controllers/skeleton_controller.d.ts +23 -0
  250. package/dist/controllers/skeleton_controller.js +248 -97
  251. package/dist/controllers/skeleton_controller.js.map +1 -1
  252. package/dist/controllers/slider_controller.d.ts +27 -1
  253. package/dist/controllers/slider_controller.js +159 -79
  254. package/dist/controllers/slider_controller.js.map +1 -1
  255. package/dist/controllers/smart_sticky_header_controller.d.ts +21 -3
  256. package/dist/controllers/smart_sticky_header_controller.js +162 -63
  257. package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
  258. package/dist/controllers/sortable_controller.js +0 -112
  259. package/dist/controllers/sortable_controller.js.map +1 -1
  260. package/dist/controllers/spinner_controller.d.ts +39 -4
  261. package/dist/controllers/spinner_controller.js +277 -169
  262. package/dist/controllers/spinner_controller.js.map +1 -1
  263. package/dist/controllers/step_indicator_controller.d.ts +5 -0
  264. package/dist/controllers/step_indicator_controller.js +99 -46
  265. package/dist/controllers/step_indicator_controller.js.map +1 -1
  266. package/dist/controllers/stepper_controller.d.ts +12 -3
  267. package/dist/controllers/stepper_controller.js +114 -73
  268. package/dist/controllers/stepper_controller.js.map +1 -1
  269. package/dist/controllers/stick_to_bottom_controller.d.ts +6 -0
  270. package/dist/controllers/stick_to_bottom_controller.js +262 -138
  271. package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
  272. package/dist/controllers/sticky_observer_controller.d.ts +11 -0
  273. package/dist/controllers/sticky_observer_controller.js +214 -49
  274. package/dist/controllers/sticky_observer_controller.js.map +1 -1
  275. package/dist/controllers/submit_once_controller.d.ts +23 -8
  276. package/dist/controllers/submit_once_controller.js +294 -205
  277. package/dist/controllers/submit_once_controller.js.map +1 -1
  278. package/dist/controllers/switch_controller.d.ts +12 -1
  279. package/dist/controllers/switch_controller.js +33 -60
  280. package/dist/controllers/switch_controller.js.map +1 -1
  281. package/dist/controllers/tabs_controller.d.ts +2 -2
  282. package/dist/controllers/tabs_controller.js +35 -29
  283. package/dist/controllers/tabs_controller.js.map +1 -1
  284. package/dist/controllers/tags_input_controller.d.ts +12 -0
  285. package/dist/controllers/tags_input_controller.js +136 -145
  286. package/dist/controllers/tags_input_controller.js.map +1 -1
  287. package/dist/controllers/textarea_autosize_controller.d.ts +10 -0
  288. package/dist/controllers/textarea_autosize_controller.js +71 -58
  289. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  290. package/dist/controllers/theme_controller.d.ts +21 -9
  291. package/dist/controllers/theme_controller.js +130 -112
  292. package/dist/controllers/theme_controller.js.map +1 -1
  293. package/dist/controllers/time_picker_controller.d.ts +18 -1
  294. package/dist/controllers/time_picker_controller.js +146 -80
  295. package/dist/controllers/time_picker_controller.js.map +1 -1
  296. package/dist/controllers/toast_controller.d.ts +36 -11
  297. package/dist/controllers/toast_controller.js +186 -297
  298. package/dist/controllers/toast_controller.js.map +1 -1
  299. package/dist/controllers/toggle_group_controller.d.ts +12 -3
  300. package/dist/controllers/toggle_group_controller.js +95 -136
  301. package/dist/controllers/toggle_group_controller.js.map +1 -1
  302. package/dist/controllers/toolbar_controller.js +68 -98
  303. package/dist/controllers/toolbar_controller.js.map +1 -1
  304. package/dist/controllers/tooltip_controller.d.ts +45 -3
  305. package/dist/controllers/tooltip_controller.js +158 -124
  306. package/dist/controllers/tooltip_controller.js.map +1 -1
  307. package/dist/controllers/transition_controller.d.ts +22 -4
  308. package/dist/controllers/transition_controller.js +123 -119
  309. package/dist/controllers/transition_controller.js.map +1 -1
  310. package/dist/controllers/tree_view_controller.d.ts +21 -11
  311. package/dist/controllers/tree_view_controller.js +150 -345
  312. package/dist/controllers/tree_view_controller.js.map +1 -1
  313. package/dist/index.d.ts +8 -5
  314. package/dist/index.js +6370 -9346
  315. package/dist/index.js.map +1 -1
  316. package/dist/inspector/cli.d.ts +23 -3
  317. package/dist/inspector/cli.js +92 -37
  318. package/dist/inspector/cli.js.map +1 -1
  319. package/dist/inspector/cli_bin.js +92 -56
  320. package/dist/inspector/cli_bin.js.map +1 -1
  321. package/dist/inspector/examples.json +8 -8
  322. package/dist/inspector/manifest.json +787 -100
  323. package/dist/positioning/index.d.ts +8 -0
  324. package/dist/positioning/index.js +148 -47
  325. package/dist/positioning/index.js.map +1 -1
  326. package/package.json +6 -6
  327. package/dist/controllers/reset_before_cache_controller.d.ts +0 -76
  328. 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",
@@ -71,7 +68,30 @@ function announcerSeatingDiagnostic(sources) {
71
68
  };
72
69
  }
73
70
 
74
- // src/utils/declared_value.ts
71
+ function matchesNumberBounds(value, bounds) {
72
+ if (!Number.isFinite(value)) {
73
+ const direction = value === Infinity ? "positive" : value === -Infinity ? "negative" : null;
74
+ if (direction === null) return false;
75
+ if (bounds.allowInfinity !== "both" && bounds.allowInfinity !== direction) return false;
76
+ }
77
+ if (bounds.min !== void 0 && value < bounds.min) return false;
78
+ if (bounds.max !== void 0 && value > bounds.max) return false;
79
+ if (bounds.exclusiveMin !== void 0 && value <= bounds.exclusiveMin) return false;
80
+ if (bounds.integer && !Number.isInteger(value)) return false;
81
+ if (bounds.allowedValues !== void 0 && !bounds.allowedValues.includes(value)) return false;
82
+ return true;
83
+ }
84
+ function decodeNumberValue(raw) {
85
+ return Number(raw.replace(/_/g, ""));
86
+ }
87
+
88
+ function toFiniteNumber(raw) {
89
+ if (typeof raw !== "number" && typeof raw !== "string") return null;
90
+ if (typeof raw === "string" && raw.trim().length === 0) return null;
91
+ const value = Number(raw);
92
+ return Number.isFinite(value) ? value : null;
93
+ }
94
+
75
95
  function parseDeclared(raw, parse, fallback) {
76
96
  try {
77
97
  return parse(raw);
@@ -95,7 +115,6 @@ function parseJsonObject(raw) {
95
115
  return parsed;
96
116
  }
97
117
 
98
- // src/inspector/html_parser.ts
99
118
  var ERB_ELEMENT_TAG = "#erb";
100
119
  var VOID_ELEMENTS = /* @__PURE__ */ new Set([
101
120
  "area",
@@ -344,7 +363,6 @@ function walk(root, visit) {
344
363
  }
345
364
  }
346
365
 
347
- // src/inspector/ruby_scan.ts
348
366
  var SPACE = /* @__PURE__ */ new Set([" ", " ", "\n", "\r", "\f"]);
349
367
  var IDENT_START = /[A-Za-z_]/;
350
368
  var IDENT_CHAR = /[A-Za-z0-9_]/;
@@ -583,7 +601,6 @@ function heredocEnd(code, bodyStart, identifier) {
583
601
  return code.length;
584
602
  }
585
603
 
586
- // src/inspector/ruby_hash.ts
587
604
  function readDataOption(source, base) {
588
605
  const code = maskHeredocs(source);
589
606
  const attrs = [];
@@ -788,7 +805,6 @@ function skipValue(code, start) {
788
805
  return code.length;
789
806
  }
790
807
 
791
- // src/inspector/erb.ts
792
808
  var ERB_TAG = /<%[\s\S]*?%>/g;
793
809
  function neutralizeErb(source) {
794
810
  return source.replace(ERB_TAG, (match) => match.replace(/[^\n]/g, " "));
@@ -812,7 +828,6 @@ function erbElements(source) {
812
828
  tag: ERB_ELEMENT_TAG,
813
829
  attrs: option.attrs.map((attr) => toParsedAttr(attr, index)),
814
830
  start: tag.start,
815
- // The token a reader can act on is the delimiter that opens the call.
816
831
  sourceLength: tag.codeStart - tag.start,
817
832
  end,
818
833
  container: end > tag.end,
@@ -851,7 +866,6 @@ function readErbTags(source) {
851
866
  }
852
867
  let close = raw.length - 2;
853
868
  if (raw[close - 1] === "-") close--;
854
- if (close < open) close = open;
855
869
  tags.push({
856
870
  start,
857
871
  end: start + raw.length,
@@ -977,7 +991,6 @@ function identifierEnd(code, start) {
977
991
  return end;
978
992
  }
979
993
 
980
- // src/inspector/extract.ts
981
994
  var NAMESPACE_PREFIX = "stimeo--";
982
995
  function dasherize(value) {
983
996
  return value.replace(/([A-Z])/g, (_match, char) => `-${char.toLowerCase()}`);
@@ -1072,7 +1085,6 @@ function isStimeoDataAttr(attrName) {
1072
1085
  return attrName.startsWith(`data-${NAMESPACE_PREFIX}`);
1073
1086
  }
1074
1087
 
1075
- // src/inspector/types.ts
1076
1088
  var DIAGNOSTIC_CODES = [
1077
1089
  "unknown-controller",
1078
1090
  "unknown-target",
@@ -1106,7 +1118,6 @@ var DIAGNOSTIC_CODES = [
1106
1118
  "unknown-ignore-code"
1107
1119
  ];
1108
1120
 
1109
- // src/inspector/check.ts
1110
1121
  function isDescendantOf(node, ancestor) {
1111
1122
  for (let current = node.parent; current; current = current.parent) {
1112
1123
  if (current === ancestor) return true;
@@ -1559,7 +1570,19 @@ function checkSource(source, manifest) {
1559
1570
  if (isDynamicValue(written)) continue;
1560
1571
  const value = written.value;
1561
1572
  if (value.length === 0) {
1562
- if (!rule.required || !readable) continue;
1573
+ if (!readable) continue;
1574
+ if (rule.numeric && !rule.required) {
1575
+ report(
1576
+ element,
1577
+ "invalid-action-param",
1578
+ "error",
1579
+ `"${value}" is not a finite "${rule.param}" this action reads.`,
1580
+ written,
1581
+ rule.suggestion
1582
+ );
1583
+ continue;
1584
+ }
1585
+ if (!rule.required) continue;
1563
1586
  report(
1564
1587
  element,
1565
1588
  "missing-action-param",
@@ -1570,16 +1593,19 @@ function checkSource(source, manifest) {
1570
1593
  );
1571
1594
  continue;
1572
1595
  }
1573
- if (rule.integer && !Number.isInteger(Number(value))) {
1574
- report(
1575
- element,
1576
- "invalid-action-param",
1577
- "error",
1578
- `"${value}" is not an "${rule.param}" this action reads. It accepts a whole number.`,
1579
- written,
1580
- rule.suggestion
1581
- );
1582
- continue;
1596
+ if (rule.numeric || rule.integer) {
1597
+ const numeric = toFiniteNumber(decodeActionParamLiteral(value));
1598
+ if (numeric === null || rule.integer && !Number.isInteger(numeric)) {
1599
+ report(
1600
+ element,
1601
+ "invalid-action-param",
1602
+ "error",
1603
+ `"${value}" is not an "${rule.param}" this action reads. It accepts ${rule.integer ? "a whole number" : "a finite number"}.`,
1604
+ written,
1605
+ rule.suggestion
1606
+ );
1607
+ continue;
1608
+ }
1583
1609
  }
1584
1610
  if (!rule.allowedValues || rule.allowedValues.includes(value)) continue;
1585
1611
  const best = nearestName(value, rule.allowedValues);
@@ -1871,8 +1897,9 @@ function checkSource(source, manifest) {
1871
1897
  for (const element of elements) {
1872
1898
  if (!hasReadableMarkup(element)) continue;
1873
1899
  if (hostIsAllowed(element, rule) !== false) continue;
1874
- const type = element.attrs.find((attr) => attr.name === "type");
1875
- const detail = element.tag === "button" ? `the unsupported ${type ? `type="${type.value}"` : 'implicit type="submit"'}` : `an unsupported interactive <${element.tag}>`;
1900
+ const byType = element.tag === "button" && rule.mode !== "non-interactive";
1901
+ const type = byType ? element.attrs.find((attr) => attr.name === "type") : void 0;
1902
+ const detail = byType ? `the unsupported ${type ? `type="${type.value}"` : 'implicit type="submit"'}` : `an unsupported interactive <${element.tag}>`;
1876
1903
  report(
1877
1904
  element,
1878
1905
  "invalid-host",
@@ -1997,8 +2024,6 @@ function checkSource(source, manifest) {
1997
2024
  `The ${where} of "${identifier}" must also declare "${rule.controller}" in data-controller.`,
1998
2025
  declared ?? el,
1999
2026
  rule.suggestion,
2000
- // Appending to an existing list is unambiguous; creating the
2001
- // attribute from nothing is an insertion the anchor cannot express.
2002
2027
  declared ? valueFix(
2003
2028
  declared,
2004
2029
  `${declared.value.trim()} ${rule.controller}`.trim(),
@@ -2133,14 +2158,20 @@ function declaredConstraint(controller, valueToken) {
2133
2158
  function valueSatisfiesConstraint(raw, constraint) {
2134
2159
  if (constraint.type === "string") return stringValueSatisfies(raw, constraint);
2135
2160
  const value = decodeNumericValue(raw);
2136
- if (Number.isNaN(value)) return false;
2137
- if (constraint.finite && !Number.isFinite(value)) return false;
2161
+ if (constraint.finite === true && !matchesNumberBounds(value, { ...constraint}))
2162
+ return false;
2163
+ if (constraint.finite !== true) {
2164
+ const bounds = {
2165
+ ...constraint,
2166
+ allowInfinity: constraint.allowInfinity ?? "both"
2167
+ };
2168
+ if (!matchesNumberBounds(value, bounds)) return false;
2169
+ }
2138
2170
  if (constraint.greaterThan !== void 0 && !(value > constraint.greaterThan)) return false;
2139
- if (constraint.integer && !Number.isInteger(value)) return false;
2140
2171
  return true;
2141
2172
  }
2142
2173
  function decodeNumericValue(raw) {
2143
- return Number(raw.replace(/_/g, ""));
2174
+ return decodeNumberValue(raw);
2144
2175
  }
2145
2176
  function stringValueSatisfies(raw, constraint) {
2146
2177
  if (!("syntax" in constraint)) return constraint.allowedValues.includes(raw);
@@ -2154,10 +2185,15 @@ function stringValueSatisfies(raw, constraint) {
2154
2185
  }
2155
2186
  function describeValueConstraint(constraint) {
2156
2187
  if (constraint.type === "string") return describeStringConstraint(constraint);
2157
- const parts = [constraint.finite ? "a finite number" : "a number"];
2188
+ const parts = [constraint.finite || constraint.allowInfinity ? "a finite number" : "a number"];
2158
2189
  if (constraint.greaterThan !== void 0) {
2159
2190
  parts.push(`greater than ${constraint.greaterThan}`);
2160
2191
  }
2192
+ if (constraint.exclusiveMin !== void 0) parts.push(`greater than ${constraint.exclusiveMin}`);
2193
+ if (constraint.min !== void 0) parts.push(`at least ${constraint.min}`);
2194
+ if (constraint.max !== void 0) parts.push(`at most ${constraint.max}`);
2195
+ if (constraint.allowedValues) parts.push(`among ${constraint.allowedValues.join(", ")}`);
2196
+ if (constraint.allowInfinity) parts.push(`or ${constraint.allowInfinity} infinity`);
2161
2197
  if (constraint.integer) parts.push("with no fractional part");
2162
2198
  return parts.join(" ");
2163
2199
  }
@@ -2353,7 +2389,7 @@ function list(names) {
2353
2389
  return names.length > 0 ? names.map((n) => `"${n}"`).join(", ") : "(none)";
2354
2390
  }
2355
2391
  function describeAttrs(attrs) {
2356
- return attrs.length === 1 ? attrs[0] : attrs.join(" or ");
2392
+ return attrs.join(" or ");
2357
2393
  }
2358
2394
  function nearestName(name, candidates) {
2359
2395
  if (name.length === 0) return void 0;
@@ -2395,8 +2431,14 @@ function levenshtein(a, b) {
2395
2431
  }
2396
2432
  return prev[cols];
2397
2433
  }
2434
+ function decodeActionParamLiteral(raw) {
2435
+ try {
2436
+ return JSON.parse(raw);
2437
+ } catch {
2438
+ return raw;
2439
+ }
2440
+ }
2398
2441
 
2399
- // src/inspector/examples.ts
2400
2442
  var EXAMPLES_SCHEMA_VERSION = 1;
2401
2443
  var CHECKABLE_FILE_EXTENSIONS = /* @__PURE__ */ new Set([".erb", ".html", ".htm"]);
2402
2444
  function isCheckableFile(path) {
@@ -2440,6 +2482,21 @@ function isCompatibleManifest(value) {
2440
2482
  for (const field of CONTROLLER_ARRAY_FIELDS) {
2441
2483
  if (!Array.isArray(entry[field])) return false;
2442
2484
  }
2485
+ const constraints = entry.valueConstraints;
2486
+ for (const constraint of constraints) {
2487
+ if (typeof constraint !== "object" || constraint === null) return false;
2488
+ const numeric = constraint;
2489
+ if (numeric.type !== "number") continue;
2490
+ for (const field of ["min", "max", "exclusiveMin"]) {
2491
+ const bound = numeric[field];
2492
+ if (bound !== void 0 && (typeof bound !== "number" || !Number.isFinite(bound)))
2493
+ return false;
2494
+ }
2495
+ if (numeric.allowedValues !== void 0 && (!Array.isArray(numeric.allowedValues) || !numeric.allowedValues.every((item) => typeof item === "number" && Number.isFinite(item))))
2496
+ return false;
2497
+ if (numeric.allowInfinity !== void 0 && !["negative", "positive", "both"].includes(String(numeric.allowInfinity)))
2498
+ return false;
2499
+ }
2443
2500
  }
2444
2501
  return true;
2445
2502
  }
@@ -2451,7 +2508,6 @@ function readManifestFile(path) {
2451
2508
  return parsed;
2452
2509
  }
2453
2510
 
2454
- // src/inspector/cli.ts
2455
2511
  function bundledPath(name) {
2456
2512
  return join(dirname(fileURLToPath(import.meta.url)), name);
2457
2513
  }
@@ -2653,7 +2709,6 @@ ${USAGE}`);
2653
2709
  return summary.errorCount > 0 ? 1 : 0;
2654
2710
  }
2655
2711
 
2656
- // src/inspector/mcp/prompts.ts
2657
2712
  var InvalidPromptRequestError = class extends Error {
2658
2713
  };
2659
2714
  function asPromptArgs(args, allowed) {
@@ -2782,7 +2837,6 @@ function getPrompt(name, args) {
2782
2837
  return prompt.build(record);
2783
2838
  }
2784
2839
 
2785
- // src/inspector/mcp/tools.ts
2786
2840
  var READ_ONLY_ANNOTATIONS = { readOnlyHint: true, openWorldHint: false };
2787
2841
  var STRING_ARRAY = { type: "array", items: { type: "string" } };
2788
2842
  var DIAGNOSTIC_SCHEMA = {
@@ -3458,7 +3512,6 @@ function callTool(context, name, args) {
3458
3512
  }
3459
3513
  }
3460
3514
 
3461
- // src/inspector/mcp/server.ts
3462
3515
  var LATEST_PROTOCOL_VERSION = "2025-06-18";
3463
3516
  var SUPPORTED_PROTOCOL_VERSIONS = [
3464
3517
  LATEST_PROTOCOL_VERSION,
@@ -3492,12 +3545,6 @@ var McpSession = class {
3492
3545
  constructor(context) {
3493
3546
  this.#context = context;
3494
3547
  }
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
3548
  handleLine(line) {
3502
3549
  const trimmed = line.trim();
3503
3550
  if (trimmed === "") return null;
@@ -3560,12 +3607,6 @@ var McpSession = class {
3560
3607
  title: "Stimeo UI Inspector",
3561
3608
  version: this.#context.manifest.packageVersion
3562
3609
  },
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
3610
  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
3611
  });
3571
3612
  }
@@ -3585,7 +3626,6 @@ var McpSession = class {
3585
3626
  return failure(id, JSONRPC_INTERNAL_ERROR, `Internal error: ${message}`);
3586
3627
  }
3587
3628
  }
3588
- /** Static resource listing: the manifest plus one example per controller. */
3589
3629
  #listResources() {
3590
3630
  const resources = [
3591
3631
  {
@@ -3678,7 +3718,6 @@ async function runMcpServer(io) {
3678
3718
  });
3679
3719
  }
3680
3720
 
3681
- // src/inspector/cli_bin.ts
3682
3721
  var argv = process2.argv.slice(2);
3683
3722
  process2.stdout.on("error", (error) => {
3684
3723
  process2.exit(error.code === "EPIPE" ? 0 : 1);
@@ -3699,8 +3738,6 @@ if (argv[0] === "mcp") {
3699
3738
  `);
3700
3739
  }
3701
3740
  }).then(
3702
- // Set the exit code instead of calling process.exit so any buffered
3703
- // stdout responses are flushed before the process ends.
3704
3741
  () => {
3705
3742
  process2.exitCode = 0;
3706
3743
  },
@@ -3716,5 +3753,4 @@ if (argv[0] === "mcp") {
3716
3753
  } else {
3717
3754
  process2.exitCode = runCli(argv);
3718
3755
  }
3719
- //# sourceMappingURL=cli_bin.js.map
3720
3756
  //# sourceMappingURL=cli_bin.js.map