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.
Files changed (337) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +27 -11
  3. package/dist/cable/index.d.ts +88 -31
  4. package/dist/cable/index.js +384 -449
  5. package/dist/cable/index.js.map +1 -1
  6. package/dist/coerce-JtZVNG5h.d.ts +20 -0
  7. package/dist/controllers/accordion_controller.d.ts +4 -2
  8. package/dist/controllers/accordion_controller.js +174 -55
  9. package/dist/controllers/accordion_controller.js.map +1 -1
  10. package/dist/controllers/alert_dialog_controller.d.ts +12 -2
  11. package/dist/controllers/alert_dialog_controller.js +903 -235
  12. package/dist/controllers/alert_dialog_controller.js.map +1 -1
  13. package/dist/controllers/announcer_controller.d.ts +37 -5
  14. package/dist/controllers/announcer_controller.js +238 -205
  15. package/dist/controllers/announcer_controller.js.map +1 -1
  16. package/dist/controllers/aspect_ratio_controller.js +0 -10
  17. package/dist/controllers/aspect_ratio_controller.js.map +1 -1
  18. package/dist/controllers/auto_submit_controller.d.ts +30 -6
  19. package/dist/controllers/auto_submit_controller.js +414 -145
  20. package/dist/controllers/auto_submit_controller.js.map +1 -1
  21. package/dist/controllers/avatar_controller.js +185 -107
  22. package/dist/controllers/avatar_controller.js.map +1 -1
  23. package/dist/controllers/breadcrumb_controller.js +0 -130
  24. package/dist/controllers/breadcrumb_controller.js.map +1 -1
  25. package/dist/controllers/bulk_select_controller.d.ts +21 -3
  26. package/dist/controllers/bulk_select_controller.js +282 -58
  27. package/dist/controllers/bulk_select_controller.js.map +1 -1
  28. package/dist/controllers/calendar_controller.d.ts +38 -16
  29. package/dist/controllers/calendar_controller.js +228 -260
  30. package/dist/controllers/calendar_controller.js.map +1 -1
  31. package/dist/controllers/carousel_controller.d.ts +43 -12
  32. package/dist/controllers/carousel_controller.js +536 -436
  33. package/dist/controllers/carousel_controller.js.map +1 -1
  34. package/dist/controllers/character_counter_controller.d.ts +44 -7
  35. package/dist/controllers/character_counter_controller.js +493 -207
  36. package/dist/controllers/character_counter_controller.js.map +1 -1
  37. package/dist/controllers/checkbox_controller.d.ts +7 -2
  38. package/dist/controllers/checkbox_controller.js +38 -74
  39. package/dist/controllers/checkbox_controller.js.map +1 -1
  40. package/dist/controllers/clipboard_controller.d.ts +16 -5
  41. package/dist/controllers/clipboard_controller.js +261 -149
  42. package/dist/controllers/clipboard_controller.js.map +1 -1
  43. package/dist/controllers/collapsible_controller.d.ts +17 -5
  44. package/dist/controllers/collapsible_controller.js +304 -120
  45. package/dist/controllers/collapsible_controller.js.map +1 -1
  46. package/dist/controllers/color_picker_controller.d.ts +18 -6
  47. package/dist/controllers/color_picker_controller.js +178 -146
  48. package/dist/controllers/color_picker_controller.js.map +1 -1
  49. package/dist/controllers/combobox_controller.d.ts +24 -6
  50. package/dist/controllers/combobox_controller.js +522 -156
  51. package/dist/controllers/combobox_controller.js.map +1 -1
  52. package/dist/controllers/command_palette_controller.d.ts +51 -20
  53. package/dist/controllers/command_palette_controller.js +1156 -395
  54. package/dist/controllers/command_palette_controller.js.map +1 -1
  55. package/dist/controllers/conditional_fields_controller.d.ts +15 -2
  56. package/dist/controllers/conditional_fields_controller.js +300 -171
  57. package/dist/controllers/conditional_fields_controller.js.map +1 -1
  58. package/dist/controllers/confirm_controller.d.ts +49 -12
  59. package/dist/controllers/confirm_controller.js +980 -262
  60. package/dist/controllers/confirm_controller.js.map +1 -1
  61. package/dist/controllers/context_menu_controller.d.ts +80 -18
  62. package/dist/controllers/context_menu_controller.js +346 -153
  63. package/dist/controllers/context_menu_controller.js.map +1 -1
  64. package/dist/controllers/count_up_controller.d.ts +13 -1
  65. package/dist/controllers/count_up_controller.js +73 -21
  66. package/dist/controllers/count_up_controller.js.map +1 -1
  67. package/dist/controllers/countdown_controller.d.ts +47 -3
  68. package/dist/controllers/countdown_controller.js +281 -158
  69. package/dist/controllers/countdown_controller.js.map +1 -1
  70. package/dist/controllers/currency_input_controller.d.ts +93 -10
  71. package/dist/controllers/currency_input_controller.js +575 -225
  72. package/dist/controllers/currency_input_controller.js.map +1 -1
  73. package/dist/controllers/data_grid_controller.d.ts +25 -12
  74. package/dist/controllers/data_grid_controller.js +248 -214
  75. package/dist/controllers/data_grid_controller.js.map +1 -1
  76. package/dist/controllers/date_range_picker_controller.d.ts +42 -14
  77. package/dist/controllers/date_range_picker_controller.js +338 -235
  78. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  79. package/dist/controllers/dialog_controller.d.ts +17 -6
  80. package/dist/controllers/dialog_controller.js +899 -237
  81. package/dist/controllers/dialog_controller.js.map +1 -1
  82. package/dist/controllers/direct_upload_controller.d.ts +25 -8
  83. package/dist/controllers/direct_upload_controller.js +97 -167
  84. package/dist/controllers/direct_upload_controller.js.map +1 -1
  85. package/dist/controllers/dirty_form_controller.d.ts +6 -1
  86. package/dist/controllers/dirty_form_controller.js +72 -69
  87. package/dist/controllers/dirty_form_controller.js.map +1 -1
  88. package/dist/controllers/dismissible_controller.d.ts +19 -0
  89. package/dist/controllers/dismissible_controller.js +196 -24
  90. package/dist/controllers/dismissible_controller.js.map +1 -1
  91. package/dist/controllers/drawer_controller.d.ts +39 -11
  92. package/dist/controllers/drawer_controller.js +974 -355
  93. package/dist/controllers/drawer_controller.js.map +1 -1
  94. package/dist/controllers/dropdown_controller.d.ts +31 -1
  95. package/dist/controllers/dropdown_controller.js +339 -96
  96. package/dist/controllers/dropdown_controller.js.map +1 -1
  97. package/dist/controllers/editable_controller.d.ts +12 -1
  98. package/dist/controllers/editable_controller.js +315 -88
  99. package/dist/controllers/editable_controller.js.map +1 -1
  100. package/dist/controllers/empty_state_controller.js +79 -58
  101. package/dist/controllers/empty_state_controller.js.map +1 -1
  102. package/dist/controllers/file_dropzone_controller.d.ts +63 -18
  103. package/dist/controllers/file_dropzone_controller.js +322 -211
  104. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  105. package/dist/controllers/filter_controller.js +77 -42
  106. package/dist/controllers/filter_controller.js.map +1 -1
  107. package/dist/controllers/flash_controller.d.ts +35 -12
  108. package/dist/controllers/flash_controller.js +238 -347
  109. package/dist/controllers/flash_controller.js.map +1 -1
  110. package/dist/controllers/focus_controller.d.ts +15 -6
  111. package/dist/controllers/focus_controller.js +679 -240
  112. package/dist/controllers/focus_controller.js.map +1 -1
  113. package/dist/controllers/form_field_controller.js +156 -132
  114. package/dist/controllers/form_field_controller.js.map +1 -1
  115. package/dist/controllers/form_validation_controller.d.ts +3 -3
  116. package/dist/controllers/form_validation_controller.js +31 -97
  117. package/dist/controllers/form_validation_controller.js.map +1 -1
  118. package/dist/controllers/frame_loading_controller.d.ts +47 -14
  119. package/dist/controllers/frame_loading_controller.js +275 -217
  120. package/dist/controllers/frame_loading_controller.js.map +1 -1
  121. package/dist/controllers/highlight_controller.d.ts +27 -6
  122. package/dist/controllers/highlight_controller.js +107 -75
  123. package/dist/controllers/highlight_controller.js.map +1 -1
  124. package/dist/controllers/hover_card_controller.d.ts +60 -4
  125. package/dist/controllers/hover_card_controller.js +327 -130
  126. package/dist/controllers/hover_card_controller.js.map +1 -1
  127. package/dist/controllers/idle_controller.d.ts +48 -6
  128. package/dist/controllers/idle_controller.js +271 -101
  129. package/dist/controllers/idle_controller.js.map +1 -1
  130. package/dist/controllers/input_mask_controller.d.ts +30 -13
  131. package/dist/controllers/input_mask_controller.js +483 -97
  132. package/dist/controllers/input_mask_controller.js.map +1 -1
  133. package/dist/controllers/intersection_controller.d.ts +32 -13
  134. package/dist/controllers/intersection_controller.js +150 -106
  135. package/dist/controllers/intersection_controller.js.map +1 -1
  136. package/dist/controllers/lazy_frame_controller.d.ts +19 -2
  137. package/dist/controllers/lazy_frame_controller.js +24 -68
  138. package/dist/controllers/lazy_frame_controller.js.map +1 -1
  139. package/dist/controllers/listbox_controller.d.ts +44 -9
  140. package/dist/controllers/listbox_controller.js +523 -240
  141. package/dist/controllers/listbox_controller.js.map +1 -1
  142. package/dist/controllers/local_time_controller.d.ts +9 -7
  143. package/dist/controllers/local_time_controller.js +102 -77
  144. package/dist/controllers/local_time_controller.js.map +1 -1
  145. package/dist/controllers/masonry_controller.d.ts +11 -3
  146. package/dist/controllers/masonry_controller.js +80 -96
  147. package/dist/controllers/masonry_controller.js.map +1 -1
  148. package/dist/controllers/menu_controller.d.ts +55 -11
  149. package/dist/controllers/menu_controller.js +302 -188
  150. package/dist/controllers/menu_controller.js.map +1 -1
  151. package/dist/controllers/menubar_controller.d.ts +51 -9
  152. package/dist/controllers/menubar_controller.js +232 -345
  153. package/dist/controllers/menubar_controller.js.map +1 -1
  154. package/dist/controllers/meter_controller.d.ts +33 -20
  155. package/dist/controllers/meter_controller.js +417 -87
  156. package/dist/controllers/meter_controller.js.map +1 -1
  157. package/dist/controllers/multi_select_controller.d.ts +48 -18
  158. package/dist/controllers/multi_select_controller.js +785 -393
  159. package/dist/controllers/multi_select_controller.js.map +1 -1
  160. package/dist/controllers/navigation_menu_controller.d.ts +27 -6
  161. package/dist/controllers/navigation_menu_controller.js +190 -250
  162. package/dist/controllers/navigation_menu_controller.js.map +1 -1
  163. package/dist/controllers/nested_form_controller.d.ts +10 -0
  164. package/dist/controllers/nested_form_controller.js +396 -192
  165. package/dist/controllers/nested_form_controller.js.map +1 -1
  166. package/dist/controllers/network_status_controller.d.ts +23 -0
  167. package/dist/controllers/network_status_controller.js +268 -62
  168. package/dist/controllers/network_status_controller.js.map +1 -1
  169. package/dist/controllers/number_input_controller.d.ts +50 -8
  170. package/dist/controllers/number_input_controller.js +610 -303
  171. package/dist/controllers/number_input_controller.js.map +1 -1
  172. package/dist/controllers/optimistic_controller.d.ts +8 -5
  173. package/dist/controllers/optimistic_controller.js +45 -87
  174. package/dist/controllers/optimistic_controller.js.map +1 -1
  175. package/dist/controllers/otp_controller.d.ts +55 -8
  176. package/dist/controllers/otp_controller.js +658 -255
  177. package/dist/controllers/otp_controller.js.map +1 -1
  178. package/dist/controllers/overflow_indicator_controller.d.ts +5 -0
  179. package/dist/controllers/overflow_indicator_controller.js +122 -113
  180. package/dist/controllers/overflow_indicator_controller.js.map +1 -1
  181. package/dist/controllers/overflow_menu_controller.d.ts +58 -20
  182. package/dist/controllers/overflow_menu_controller.js +470 -295
  183. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  184. package/dist/controllers/pagination_controller.d.ts +37 -7
  185. package/dist/controllers/pagination_controller.js +332 -123
  186. package/dist/controllers/pagination_controller.js.map +1 -1
  187. package/dist/controllers/password_reveal_controller.d.ts +46 -8
  188. package/dist/controllers/password_reveal_controller.js +392 -121
  189. package/dist/controllers/password_reveal_controller.js.map +1 -1
  190. package/dist/controllers/password_strength_controller.d.ts +15 -6
  191. package/dist/controllers/password_strength_controller.js +111 -158
  192. package/dist/controllers/password_strength_controller.js.map +1 -1
  193. package/dist/controllers/persist_controller.d.ts +11 -4
  194. package/dist/controllers/persist_controller.js +165 -111
  195. package/dist/controllers/persist_controller.js.map +1 -1
  196. package/dist/controllers/pointer_drag_controller.d.ts +35 -12
  197. package/dist/controllers/pointer_drag_controller.js +434 -188
  198. package/dist/controllers/pointer_drag_controller.js.map +1 -1
  199. package/dist/controllers/popover_controller.d.ts +41 -5
  200. package/dist/controllers/popover_controller.js +269 -113
  201. package/dist/controllers/popover_controller.js.map +1 -1
  202. package/dist/controllers/portal_controller.d.ts +44 -4
  203. package/dist/controllers/portal_controller.js +215 -76
  204. package/dist/controllers/portal_controller.js.map +1 -1
  205. package/dist/controllers/preview_guard_controller.d.ts +10 -4
  206. package/dist/controllers/preview_guard_controller.js +243 -116
  207. package/dist/controllers/preview_guard_controller.js.map +1 -1
  208. package/dist/controllers/progress_controller.d.ts +20 -19
  209. package/dist/controllers/progress_controller.js +391 -78
  210. package/dist/controllers/progress_controller.js.map +1 -1
  211. package/dist/controllers/radio_group_controller.d.ts +21 -9
  212. package/dist/controllers/radio_group_controller.js +278 -211
  213. package/dist/controllers/radio_group_controller.js.map +1 -1
  214. package/dist/controllers/range_slider_controller.d.ts +47 -6
  215. package/dist/controllers/range_slider_controller.js +220 -113
  216. package/dist/controllers/range_slider_controller.js.map +1 -1
  217. package/dist/controllers/rating_controller.d.ts +20 -4
  218. package/dist/controllers/rating_controller.js +458 -211
  219. package/dist/controllers/rating_controller.js.map +1 -1
  220. package/dist/controllers/read_more_controller.d.ts +2 -0
  221. package/dist/controllers/read_more_controller.js +138 -63
  222. package/dist/controllers/read_more_controller.js.map +1 -1
  223. package/dist/controllers/reading_progress_controller.d.ts +1 -1
  224. package/dist/controllers/reading_progress_controller.js +166 -137
  225. package/dist/controllers/reading_progress_controller.js.map +1 -1
  226. package/dist/controllers/relative_time_controller.d.ts +20 -6
  227. package/dist/controllers/relative_time_controller.js +211 -112
  228. package/dist/controllers/relative_time_controller.js.map +1 -1
  229. package/dist/controllers/reset_on_restore_controller.d.ts +85 -0
  230. package/dist/controllers/{reset_before_cache_controller.js → reset_on_restore_controller.js} +103 -38
  231. package/dist/controllers/reset_on_restore_controller.js.map +1 -0
  232. package/dist/controllers/resizable_controller.d.ts +31 -2
  233. package/dist/controllers/resizable_controller.js +299 -150
  234. package/dist/controllers/resizable_controller.js.map +1 -1
  235. package/dist/controllers/roving_controller.d.ts +3 -3
  236. package/dist/controllers/roving_controller.js +49 -88
  237. package/dist/controllers/roving_controller.js.map +1 -1
  238. package/dist/controllers/scroll_area_controller.d.ts +7 -3
  239. package/dist/controllers/scroll_area_controller.js +490 -246
  240. package/dist/controllers/scroll_area_controller.js.map +1 -1
  241. package/dist/controllers/scroll_restore_controller.d.ts +3 -3
  242. package/dist/controllers/scroll_restore_controller.js +14 -55
  243. package/dist/controllers/scroll_restore_controller.js.map +1 -1
  244. package/dist/controllers/scroll_visibility_controller.d.ts +28 -12
  245. package/dist/controllers/scroll_visibility_controller.js +432 -149
  246. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  247. package/dist/controllers/scrollspy_controller.d.ts +6 -1
  248. package/dist/controllers/scrollspy_controller.js +193 -248
  249. package/dist/controllers/scrollspy_controller.js.map +1 -1
  250. package/dist/controllers/separator_controller.d.ts +20 -5
  251. package/dist/controllers/separator_controller.js +285 -142
  252. package/dist/controllers/separator_controller.js.map +1 -1
  253. package/dist/controllers/sidebar_controller.d.ts +65 -8
  254. package/dist/controllers/sidebar_controller.js +1069 -404
  255. package/dist/controllers/sidebar_controller.js.map +1 -1
  256. package/dist/controllers/skeleton_controller.d.ts +23 -0
  257. package/dist/controllers/skeleton_controller.js +259 -101
  258. package/dist/controllers/skeleton_controller.js.map +1 -1
  259. package/dist/controllers/slider_controller.d.ts +29 -2
  260. package/dist/controllers/slider_controller.js +187 -86
  261. package/dist/controllers/slider_controller.js.map +1 -1
  262. package/dist/controllers/smart_sticky_header_controller.d.ts +22 -4
  263. package/dist/controllers/smart_sticky_header_controller.js +173 -66
  264. package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
  265. package/dist/controllers/sortable_controller.d.ts +4 -4
  266. package/dist/controllers/sortable_controller.js +26 -125
  267. package/dist/controllers/sortable_controller.js.map +1 -1
  268. package/dist/controllers/spinner_controller.d.ts +39 -4
  269. package/dist/controllers/spinner_controller.js +288 -173
  270. package/dist/controllers/spinner_controller.js.map +1 -1
  271. package/dist/controllers/step_indicator_controller.d.ts +9 -4
  272. package/dist/controllers/step_indicator_controller.js +105 -46
  273. package/dist/controllers/step_indicator_controller.js.map +1 -1
  274. package/dist/controllers/stepper_controller.d.ts +14 -6
  275. package/dist/controllers/stepper_controller.js +120 -73
  276. package/dist/controllers/stepper_controller.js.map +1 -1
  277. package/dist/controllers/stick_to_bottom_controller.d.ts +9 -1
  278. package/dist/controllers/stick_to_bottom_controller.js +275 -140
  279. package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
  280. package/dist/controllers/sticky_observer_controller.d.ts +11 -0
  281. package/dist/controllers/sticky_observer_controller.js +220 -49
  282. package/dist/controllers/sticky_observer_controller.js.map +1 -1
  283. package/dist/controllers/submit_once_controller.d.ts +24 -8
  284. package/dist/controllers/submit_once_controller.js +376 -227
  285. package/dist/controllers/submit_once_controller.js.map +1 -1
  286. package/dist/controllers/switch_controller.d.ts +18 -4
  287. package/dist/controllers/switch_controller.js +201 -84
  288. package/dist/controllers/switch_controller.js.map +1 -1
  289. package/dist/controllers/tabs_controller.d.ts +9 -6
  290. package/dist/controllers/tabs_controller.js +41 -30
  291. package/dist/controllers/tabs_controller.js.map +1 -1
  292. package/dist/controllers/tags_input_controller.d.ts +16 -3
  293. package/dist/controllers/tags_input_controller.js +293 -173
  294. package/dist/controllers/tags_input_controller.js.map +1 -1
  295. package/dist/controllers/textarea_autosize_controller.d.ts +11 -1
  296. package/dist/controllers/textarea_autosize_controller.js +108 -74
  297. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  298. package/dist/controllers/theme_controller.d.ts +24 -11
  299. package/dist/controllers/theme_controller.js +140 -116
  300. package/dist/controllers/theme_controller.js.map +1 -1
  301. package/dist/controllers/time_picker_controller.d.ts +55 -5
  302. package/dist/controllers/time_picker_controller.js +331 -127
  303. package/dist/controllers/time_picker_controller.js.map +1 -1
  304. package/dist/controllers/toast_controller.d.ts +40 -16
  305. package/dist/controllers/toast_controller.js +244 -324
  306. package/dist/controllers/toast_controller.js.map +1 -1
  307. package/dist/controllers/toggle_group_controller.d.ts +14 -6
  308. package/dist/controllers/toggle_group_controller.js +252 -191
  309. package/dist/controllers/toggle_group_controller.js.map +1 -1
  310. package/dist/controllers/toolbar_controller.d.ts +8 -6
  311. package/dist/controllers/toolbar_controller.js +219 -120
  312. package/dist/controllers/toolbar_controller.js.map +1 -1
  313. package/dist/controllers/tooltip_controller.d.ts +49 -4
  314. package/dist/controllers/tooltip_controller.js +158 -124
  315. package/dist/controllers/tooltip_controller.js.map +1 -1
  316. package/dist/controllers/transition_controller.d.ts +22 -4
  317. package/dist/controllers/transition_controller.js +123 -119
  318. package/dist/controllers/transition_controller.js.map +1 -1
  319. package/dist/controllers/tree_view_controller.d.ts +22 -12
  320. package/dist/controllers/tree_view_controller.js +283 -369
  321. package/dist/controllers/tree_view_controller.js.map +1 -1
  322. package/dist/index.d.ts +10 -5
  323. package/dist/index.js +8573 -10410
  324. package/dist/index.js.map +1 -1
  325. package/dist/inspector/cli.d.ts +38 -14
  326. package/dist/inspector/cli.js +108 -40
  327. package/dist/inspector/cli.js.map +1 -1
  328. package/dist/inspector/cli_bin.js +145 -64
  329. package/dist/inspector/cli_bin.js.map +1 -1
  330. package/dist/inspector/examples.json +20 -20
  331. package/dist/inspector/manifest.json +802 -101
  332. package/dist/positioning/index.d.ts +15 -7
  333. package/dist/positioning/index.js +154 -47
  334. package/dist/positioning/index.js.map +1 -1
  335. package/package.json +11 -10
  336. package/dist/controllers/reset_before_cache_controller.d.ts +0 -76
  337. 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
- // src/utils/declared_value.ts
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 (!rule.required || !readable) continue;
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.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;
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 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}>`;
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 (Number.isNaN(value)) return false;
2137
- if (constraint.finite && !Number.isFinite(value)) return false;
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 Number(raw.replace(/_/g, ""));
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.length === 1 ? attrs[0] : attrs.join(" or ");
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
- #initialized = false;
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.#handleMessage(message);
3576
+ if (Array.isArray(message)) return this.#handleBatch(message);
3577
+ return this.#handleMessage(message, false);
3511
3578
  }
3512
- #handleMessage(message) {
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 (!this.#initialized) {
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.#initialized = true;
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