brut 0.12.1 → 0.14.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 (365) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/Gemfile.lock +1 -1
  4. data/brut-css/package-lock.json +57 -106
  5. data/brut-css/package.json +1 -1
  6. data/brut-js/package-lock.json +61 -331
  7. data/brut-js/package.json +2 -2
  8. data/brut-js/specs/AjaxSubmit.spec.js +48 -0
  9. data/brut-js/src/AjaxSubmit.js +77 -18
  10. data/brutrb.com/.vitepress/config.mjs +0 -1
  11. data/brutrb.com/layouts.md +70 -12
  12. data/brutrb.com/package-lock.json +428 -381
  13. data/brutrb.com/recipes/authentication.md +6 -6
  14. data/docs/404.html +2 -2
  15. data/docs/adrs.html +3 -3
  16. data/docs/ai.html +3 -3
  17. data/docs/api/Brut/BackEnd/SeedData.html +1 -1
  18. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
  19. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
  20. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
  21. data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
  22. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
  23. data/docs/api/Brut/BackEnd/Validators.html +1 -1
  24. data/docs/api/Brut/BackEnd.html +1 -1
  25. data/docs/api/Brut/CLI/App.html +1 -1
  26. data/docs/api/Brut/CLI/AppRunner.html +1 -1
  27. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
  28. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
  29. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
  30. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
  31. data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
  32. data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
  33. data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
  34. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
  35. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
  36. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
  37. data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
  38. data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
  39. data/docs/api/Brut/CLI/Apps/DB.html +1 -1
  40. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
  41. data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
  42. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
  43. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
  44. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
  45. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
  46. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
  47. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
  48. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +1 -1
  49. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
  50. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
  51. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
  52. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
  53. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
  54. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
  55. data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
  56. data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
  57. data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
  58. data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
  59. data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
  60. data/docs/api/Brut/CLI/Apps/Test.html +1 -1
  61. data/docs/api/Brut/CLI/Apps.html +1 -1
  62. data/docs/api/Brut/CLI/Command.html +1 -1
  63. data/docs/api/Brut/CLI/Error.html +1 -1
  64. data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
  65. data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
  66. data/docs/api/Brut/CLI/Executor.html +1 -1
  67. data/docs/api/Brut/CLI/InvalidOption.html +1 -1
  68. data/docs/api/Brut/CLI/Options.html +1 -1
  69. data/docs/api/Brut/CLI/Output.html +1 -1
  70. data/docs/api/Brut/CLI/SystemExecError.html +1 -1
  71. data/docs/api/Brut/CLI.html +1 -1
  72. data/docs/api/Brut/FactoryBot.html +1 -1
  73. data/docs/api/Brut/Framework/App.html +1 -1
  74. data/docs/api/Brut/Framework/Config.html +1 -1
  75. data/docs/api/Brut/Framework/Container.html +1 -1
  76. data/docs/api/Brut/Framework/Error.html +1 -1
  77. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
  78. data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
  79. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
  80. data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
  81. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
  82. data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
  83. data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
  84. data/docs/api/Brut/Framework/Errors.html +1 -1
  85. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +1 -1
  86. data/docs/api/Brut/Framework/MCP.html +1 -1
  87. data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
  88. data/docs/api/Brut/Framework.html +1 -1
  89. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
  90. data/docs/api/Brut/FrontEnd/Component/Helpers.html +1 -1
  91. data/docs/api/Brut/FrontEnd/Component.html +1 -1
  92. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +1 -1
  93. data/docs/api/Brut/FrontEnd/Components/FormTag.html +1 -1
  94. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
  95. data/docs/api/Brut/FrontEnd/Components/Input.html +1 -1
  96. data/docs/api/Brut/FrontEnd/Components/Inputs/ButtonTag.html +1 -1
  97. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
  98. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +1 -1
  99. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +1 -1
  100. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +1 -1
  101. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +1 -1
  102. data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
  103. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
  104. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +1 -1
  105. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
  106. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
  107. data/docs/api/Brut/FrontEnd/Components.html +1 -1
  108. data/docs/api/Brut/FrontEnd/CsrfProtector.html +1 -1
  109. data/docs/api/Brut/FrontEnd/Download.html +1 -1
  110. data/docs/api/Brut/FrontEnd/Flash.html +1 -1
  111. data/docs/api/Brut/FrontEnd/Form.html +1 -1
  112. data/docs/api/Brut/FrontEnd/Forms/Button.html +1 -1
  113. data/docs/api/Brut/FrontEnd/Forms/ButtonInputDefinition.html +1 -1
  114. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
  115. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
  116. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
  117. data/docs/api/Brut/FrontEnd/Forms/Input.html +1 -1
  118. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +1 -1
  119. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +1 -1
  120. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
  121. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
  122. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
  123. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
  124. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
  125. data/docs/api/Brut/FrontEnd/Forms.html +1 -1
  126. data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
  127. data/docs/api/Brut/FrontEnd/Handler.html +1 -1
  128. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
  129. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
  130. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
  131. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
  132. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +1 -1
  133. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
  134. data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
  135. data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
  136. data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
  137. data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
  138. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
  139. data/docs/api/Brut/FrontEnd/Layout.html +1 -1
  140. data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
  141. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
  142. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
  143. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
  144. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
  145. data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
  146. data/docs/api/Brut/FrontEnd/Page.html +1 -1
  147. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
  148. data/docs/api/Brut/FrontEnd/Pages.html +1 -1
  149. data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
  150. data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
  151. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
  152. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
  153. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
  154. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
  155. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
  156. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
  157. data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
  158. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
  159. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
  160. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
  161. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
  162. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
  163. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
  164. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
  165. data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
  166. data/docs/api/Brut/FrontEnd/Routing.html +1 -1
  167. data/docs/api/Brut/FrontEnd/Session.html +1 -1
  168. data/docs/api/Brut/FrontEnd.html +1 -1
  169. data/docs/api/Brut/I18n/BaseMethods.html +1 -1
  170. data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
  171. data/docs/api/Brut/I18n/ForCLI.html +1 -1
  172. data/docs/api/Brut/I18n/ForHTML.html +1 -1
  173. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
  174. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
  175. data/docs/api/Brut/I18n.html +1 -1
  176. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
  177. data/docs/api/Brut/Instrumentation/Methods/ClassMethods.html +1 -1
  178. data/docs/api/Brut/Instrumentation/Methods.html +1 -1
  179. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +1 -1
  180. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +1 -1
  181. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +1 -1
  182. data/docs/api/Brut/Instrumentation.html +1 -1
  183. data/docs/api/Brut/RubocopConfig.html +1 -1
  184. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +1 -1
  185. data/docs/api/Brut/SinatraHelpers.html +1 -1
  186. data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
  187. data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
  188. data/docs/api/Brut/SpecSupport/E2ETestServer.html +1 -1
  189. data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
  190. data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
  191. data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
  192. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
  193. data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
  194. data/docs/api/Brut/SpecSupport/HandlerSupport.html +1 -1
  195. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +1 -1
  196. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +1 -1
  197. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +1 -1
  198. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +1 -1
  199. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +1 -1
  200. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +1 -1
  201. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +1 -1
  202. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +1 -1
  203. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +1 -1
  204. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +1 -1
  205. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +1 -1
  206. data/docs/api/Brut/SpecSupport/Matchers.html +1 -1
  207. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +1 -1
  208. data/docs/api/Brut/SpecSupport/RSpecSetup.html +1 -1
  209. data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
  210. data/docs/api/Brut/SpecSupport.html +1 -1
  211. data/docs/api/Brut.html +1 -1
  212. data/docs/api/Clock.html +1 -1
  213. data/docs/api/ModuleName.html +1 -1
  214. data/docs/api/RichString.html +1 -1
  215. data/docs/api/SemanticLogger/Appender/Async.html +1 -1
  216. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +1 -1
  217. data/docs/api/Sequel/Extensions/BrutMigrations.html +1 -1
  218. data/docs/api/Sequel/Extensions.html +1 -1
  219. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
  220. data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
  221. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
  222. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
  223. data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
  224. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
  225. data/docs/api/Sequel/Plugins/FindBang.html +1 -1
  226. data/docs/api/Sequel/Plugins.html +1 -1
  227. data/docs/api/Sequel.html +1 -1
  228. data/docs/api/_index.html +1 -1
  229. data/docs/api/file.README.html +1 -1
  230. data/docs/api/index.html +1 -1
  231. data/docs/api/top-level-namespace.html +1 -1
  232. data/docs/assets/{app.CGHFI-MA.js → app.BDtsVxyd.js} +1 -1
  233. data/docs/assets/chunks/@localSearchIndexroot.BWVzhs5N.js +1 -0
  234. data/docs/assets/chunks/{VPLocalSearchBox.-c-Kihwo.js → VPLocalSearchBox.DCJk5nAW.js} +1 -1
  235. data/docs/assets/chunks/{theme.DpqrgXG8.js → theme.DZKmijwi.js} +2 -2
  236. data/docs/assets/{components.md.X4h_TEG-.js → components.md.rMhQ0WdZ.js} +3 -3
  237. data/docs/assets/{configuration.md.CPCyUo5A.js → configuration.md.BK42Yjp_.js} +1 -1
  238. data/docs/assets/{forms.md.BwmfAZ6Z.js → forms.md.v9qIbmUM.js} +2 -2
  239. data/docs/assets/{forms.md.BwmfAZ6Z.lean.js → forms.md.v9qIbmUM.lean.js} +1 -1
  240. data/docs/assets/{getting-started.md.mPgbkbBv.js → getting-started.md.DTOl4c2g.js} +2 -2
  241. data/docs/assets/{recipes_authentication.md.BAISoxmN.js → recipes_authentication.md.nwO6F7Ou.js} +6 -6
  242. data/docs/assets/{tutorials_02-dialog.md.DOonTBrE.js → tutorials_02-dialog.md.CPNK1SC_.js} +2 -2
  243. data/docs/assets/{tutorials_02-dialog.md.DOonTBrE.lean.js → tutorials_02-dialog.md.CPNK1SC_.lean.js} +1 -1
  244. data/docs/assets.html +3 -3
  245. data/docs/brut-js/api/AjaxSubmit.html +29 -10
  246. data/docs/brut-js/api/AjaxSubmit.js.html +78 -19
  247. data/docs/brut-js/api/Autosubmit.html +1 -1
  248. data/docs/brut-js/api/Autosubmit.js.html +1 -1
  249. data/docs/brut-js/api/BaseCustomElement.html +1 -1
  250. data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
  251. data/docs/brut-js/api/BrutCustomElements.html +1 -1
  252. data/docs/brut-js/api/BufferedLogger.html +1 -1
  253. data/docs/brut-js/api/ConfirmSubmit.html +1 -1
  254. data/docs/brut-js/api/ConfirmSubmit.js.html +1 -1
  255. data/docs/brut-js/api/ConfirmationDialog.html +1 -1
  256. data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
  257. data/docs/brut-js/api/ConstraintViolationMessage.html +1 -1
  258. data/docs/brut-js/api/ConstraintViolationMessage.js.html +1 -1
  259. data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
  260. data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
  261. data/docs/brut-js/api/CopyToClipboard.html +1 -1
  262. data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
  263. data/docs/brut-js/api/Form.html +1 -1
  264. data/docs/brut-js/api/Form.js.html +1 -1
  265. data/docs/brut-js/api/I18nTranslation.html +1 -1
  266. data/docs/brut-js/api/I18nTranslation.js.html +1 -1
  267. data/docs/brut-js/api/LocaleDetection.html +1 -1
  268. data/docs/brut-js/api/LocaleDetection.js.html +1 -1
  269. data/docs/brut-js/api/Logger.html +1 -1
  270. data/docs/brut-js/api/Logger.js.html +1 -1
  271. data/docs/brut-js/api/Message.html +1 -1
  272. data/docs/brut-js/api/Message.js.html +1 -1
  273. data/docs/brut-js/api/PrefixedLogger.html +1 -1
  274. data/docs/brut-js/api/RichString.html +1 -1
  275. data/docs/brut-js/api/RichString.js.html +1 -1
  276. data/docs/brut-js/api/Tabs.html +1 -1
  277. data/docs/brut-js/api/Tabs.js.html +1 -1
  278. data/docs/brut-js/api/Tracing.html +1 -1
  279. data/docs/brut-js/api/Tracing.js.html +1 -1
  280. data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
  281. data/docs/brut-js/api/external-Performance.html +1 -1
  282. data/docs/brut-js/api/external-Promise.html +1 -1
  283. data/docs/brut-js/api/external-ValidityState.html +1 -1
  284. data/docs/brut-js/api/external-Window.html +1 -1
  285. data/docs/brut-js/api/external-fetch.html +1 -1
  286. data/docs/brut-js/api/global.html +1 -1
  287. data/docs/brut-js/api/index.html +1 -1
  288. data/docs/brut-js/api/index.js.html +1 -1
  289. data/docs/brut-js/api/module-testing.html +1 -1
  290. data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
  291. data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
  292. data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
  293. data/docs/brut-js/api/testing.DOMCreator.html +1 -1
  294. data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
  295. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
  296. data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
  297. data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
  298. data/docs/brut-js/api/testing_index.js.html +1 -1
  299. data/docs/brut-js.html +3 -3
  300. data/docs/business-logic.html +3 -3
  301. data/docs/cli.html +3 -3
  302. data/docs/components.html +7 -7
  303. data/docs/configuration.html +5 -5
  304. data/docs/css.html +3 -3
  305. data/docs/custom-element-tests.html +3 -3
  306. data/docs/database-access.html +3 -3
  307. data/docs/database-schema.html +3 -3
  308. data/docs/deployment.html +3 -3
  309. data/docs/dev-environment.html +3 -3
  310. data/docs/dir-structure.html +3 -3
  311. data/docs/doc-conventions.html +3 -3
  312. data/docs/end-to-end-tests.html +3 -3
  313. data/docs/features.html +3 -3
  314. data/docs/flash-and-session.html +3 -3
  315. data/docs/form-constraints.html +3 -3
  316. data/docs/forms.html +5 -5
  317. data/docs/getting-started.html +6 -6
  318. data/docs/handlers.html +3 -3
  319. data/docs/hashmap.json +1 -1
  320. data/docs/hooks.html +3 -3
  321. data/docs/i18n.html +3 -3
  322. data/docs/index.html +3 -3
  323. data/docs/instrumentation.html +3 -3
  324. data/docs/javascript.html +3 -3
  325. data/docs/jobs.html +3 -3
  326. data/docs/keyword-injection.html +3 -3
  327. data/docs/layouts.html +3 -3
  328. data/docs/lsp.html +3 -3
  329. data/docs/markdown-examples.html +3 -3
  330. data/docs/middleware.html +3 -3
  331. data/docs/overview.html +3 -3
  332. data/docs/pages.html +3 -3
  333. data/docs/recipes/alternate-layouts.html +3 -3
  334. data/docs/recipes/authentication.html +10 -10
  335. data/docs/recipes/blank-layouts.html +3 -3
  336. data/docs/recipes/custom-flash.html +3 -3
  337. data/docs/recipes/form-errors.html +3 -3
  338. data/docs/recipes/indexed-forms.html +3 -3
  339. data/docs/recipes/migrations.html +3 -3
  340. data/docs/recipes/text-field-component.html +3 -3
  341. data/docs/roadmap.html +3 -3
  342. data/docs/routes.html +3 -3
  343. data/docs/security.html +3 -3
  344. data/docs/seed-data.html +3 -3
  345. data/docs/space-time-continuum.html +3 -3
  346. data/docs/tutorial.html +3 -3
  347. data/docs/tutorials/01-intro.html +3 -3
  348. data/docs/tutorials/02-dialog.html +5 -5
  349. data/docs/unit-tests.html +3 -3
  350. data/docs/why.html +3 -3
  351. data/lib/brut/front_end/components/page_identifier.rb +7 -4
  352. data/lib/brut/front_end/layout.rb +11 -0
  353. data/lib/brut/front_end/page.rb +1 -1
  354. data/lib/brut/version.rb +1 -1
  355. data/mkbrut/Gemfile.lock +1 -1
  356. data/mkbrut/lib/mkbrut/version.rb +1 -1
  357. data/mkbrut/templates/Base/app/src/front_end/layouts/blank_layout.rb +11 -0
  358. data/mkbrut/templates/Base/app/src/front_end/layouts/default_layout.rb.erb +3 -6
  359. metadata +18 -18
  360. data/brutrb.com/recipes/blank-layouts.md +0 -22
  361. data/docs/assets/chunks/@localSearchIndexroot.DcMsFVrO.js +0 -1
  362. /data/docs/assets/{components.md.X4h_TEG-.lean.js → components.md.rMhQ0WdZ.lean.js} +0 -0
  363. /data/docs/assets/{configuration.md.CPCyUo5A.lean.js → configuration.md.BK42Yjp_.lean.js} +0 -0
  364. /data/docs/assets/{getting-started.md.mPgbkbBv.lean.js → getting-started.md.DTOl4c2g.lean.js} +0 -0
  365. /data/docs/assets/{recipes_authentication.md.BAISoxmN.lean.js → recipes_authentication.md.nwO6F7Ou.lean.js} +0 -0
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "brut-js",
3
- "version": "0.12.1",
3
+ "version": "0.14.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "brut-js",
9
- "version": "0.12.1",
9
+ "version": "0.14.0",
10
10
  "license": "Hippocratic-2.1",
11
11
  "devDependencies": {
12
12
  "esbuild": "^0.24.2",
13
- "jsdom": "^25.0.1",
13
+ "jsdom": "^26.1.0",
14
14
  "mocha": "^10.8.2"
15
15
  }
16
16
  },
@@ -29,9 +29,9 @@
29
29
  }
30
30
  },
31
31
  "node_modules/@csstools/color-helpers": {
32
- "version": "5.0.2",
33
- "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
34
- "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
32
+ "version": "5.1.0",
33
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
34
+ "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
35
35
  "dev": true,
36
36
  "funding": [
37
37
  {
@@ -73,9 +73,9 @@
73
73
  }
74
74
  },
75
75
  "node_modules/@csstools/css-color-parser": {
76
- "version": "3.0.10",
77
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz",
78
- "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==",
76
+ "version": "3.1.0",
77
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
78
+ "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
79
79
  "dev": true,
80
80
  "funding": [
81
81
  {
@@ -89,7 +89,7 @@
89
89
  ],
90
90
  "license": "MIT",
91
91
  "dependencies": {
92
- "@csstools/color-helpers": "^5.0.2",
92
+ "@csstools/color-helpers": "^5.1.0",
93
93
  "@csstools/css-calc": "^2.1.4"
94
94
  },
95
95
  "engines": {
@@ -569,9 +569,9 @@
569
569
  }
570
570
  },
571
571
  "node_modules/agent-base": {
572
- "version": "7.1.3",
573
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
574
- "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
572
+ "version": "7.1.4",
573
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
574
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
575
575
  "dev": true,
576
576
  "license": "MIT",
577
577
  "engines": {
@@ -635,13 +635,6 @@
635
635
  "dev": true,
636
636
  "license": "Python-2.0"
637
637
  },
638
- "node_modules/asynckit": {
639
- "version": "0.4.0",
640
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
641
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
642
- "dev": true,
643
- "license": "MIT"
644
- },
645
638
  "node_modules/balanced-match": {
646
639
  "version": "1.0.2",
647
640
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -692,20 +685,6 @@
692
685
  "dev": true,
693
686
  "license": "ISC"
694
687
  },
695
- "node_modules/call-bind-apply-helpers": {
696
- "version": "1.0.2",
697
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
698
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
699
- "dev": true,
700
- "license": "MIT",
701
- "dependencies": {
702
- "es-errors": "^1.3.0",
703
- "function-bind": "^1.1.2"
704
- },
705
- "engines": {
706
- "node": ">= 0.4"
707
- }
708
- },
709
688
  "node_modules/camelcase": {
710
689
  "version": "6.3.0",
711
690
  "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
@@ -806,23 +785,10 @@
806
785
  "dev": true,
807
786
  "license": "MIT"
808
787
  },
809
- "node_modules/combined-stream": {
810
- "version": "1.0.8",
811
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
812
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
813
- "dev": true,
814
- "license": "MIT",
815
- "dependencies": {
816
- "delayed-stream": "~1.0.0"
817
- },
818
- "engines": {
819
- "node": ">= 0.8"
820
- }
821
- },
822
788
  "node_modules/cssstyle": {
823
- "version": "4.4.0",
824
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.4.0.tgz",
825
- "integrity": "sha512-W0Y2HOXlPkb2yaKrCVRjinYKciu/qSLEmK0K9mcfDei3zwlnHFEHAs/Du3cIRwPqY+J4JsiBzUjoHyc8RsJ03A==",
789
+ "version": "4.6.0",
790
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz",
791
+ "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==",
826
792
  "dev": true,
827
793
  "license": "MIT",
828
794
  "dependencies": {
@@ -833,13 +799,6 @@
833
799
  "node": ">=18"
834
800
  }
835
801
  },
836
- "node_modules/cssstyle/node_modules/rrweb-cssom": {
837
- "version": "0.8.0",
838
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
839
- "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
840
- "dev": true,
841
- "license": "MIT"
842
- },
843
802
  "node_modules/data-urls": {
844
803
  "version": "5.0.0",
845
804
  "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
@@ -886,22 +845,12 @@
886
845
  }
887
846
  },
888
847
  "node_modules/decimal.js": {
889
- "version": "10.5.0",
890
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
891
- "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
848
+ "version": "10.6.0",
849
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
850
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
892
851
  "dev": true,
893
852
  "license": "MIT"
894
853
  },
895
- "node_modules/delayed-stream": {
896
- "version": "1.0.0",
897
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
898
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
899
- "dev": true,
900
- "license": "MIT",
901
- "engines": {
902
- "node": ">=0.4.0"
903
- }
904
- },
905
854
  "node_modules/diff": {
906
855
  "version": "5.2.0",
907
856
  "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
@@ -912,21 +861,6 @@
912
861
  "node": ">=0.3.1"
913
862
  }
914
863
  },
915
- "node_modules/dunder-proto": {
916
- "version": "1.0.1",
917
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
918
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
919
- "dev": true,
920
- "license": "MIT",
921
- "dependencies": {
922
- "call-bind-apply-helpers": "^1.0.1",
923
- "es-errors": "^1.3.0",
924
- "gopd": "^1.2.0"
925
- },
926
- "engines": {
927
- "node": ">= 0.4"
928
- }
929
- },
930
864
  "node_modules/emoji-regex": {
931
865
  "version": "8.0.0",
932
866
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -934,53 +868,17 @@
934
868
  "dev": true,
935
869
  "license": "MIT"
936
870
  },
937
- "node_modules/es-define-property": {
938
- "version": "1.0.1",
939
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
940
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
941
- "dev": true,
942
- "license": "MIT",
943
- "engines": {
944
- "node": ">= 0.4"
945
- }
946
- },
947
- "node_modules/es-errors": {
948
- "version": "1.3.0",
949
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
950
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
951
- "dev": true,
952
- "license": "MIT",
953
- "engines": {
954
- "node": ">= 0.4"
955
- }
956
- },
957
- "node_modules/es-object-atoms": {
958
- "version": "1.1.1",
959
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
960
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
871
+ "node_modules/entities": {
872
+ "version": "6.0.1",
873
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
874
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
961
875
  "dev": true,
962
- "license": "MIT",
963
- "dependencies": {
964
- "es-errors": "^1.3.0"
965
- },
876
+ "license": "BSD-2-Clause",
966
877
  "engines": {
967
- "node": ">= 0.4"
968
- }
969
- },
970
- "node_modules/es-set-tostringtag": {
971
- "version": "2.1.0",
972
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
973
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
974
- "dev": true,
975
- "license": "MIT",
976
- "dependencies": {
977
- "es-errors": "^1.3.0",
978
- "get-intrinsic": "^1.2.6",
979
- "has-tostringtag": "^1.0.2",
980
- "hasown": "^2.0.2"
878
+ "node": ">=0.12"
981
879
  },
982
- "engines": {
983
- "node": ">= 0.4"
880
+ "funding": {
881
+ "url": "https://github.com/fb55/entities?sponsor=1"
984
882
  }
985
883
  },
986
884
  "node_modules/esbuild": {
@@ -1034,6 +932,19 @@
1034
932
  "node": ">=6"
1035
933
  }
1036
934
  },
935
+ "node_modules/escape-string-regexp": {
936
+ "version": "4.0.0",
937
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
938
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
939
+ "dev": true,
940
+ "license": "MIT",
941
+ "engines": {
942
+ "node": ">=10"
943
+ },
944
+ "funding": {
945
+ "url": "https://github.com/sponsors/sindresorhus"
946
+ }
947
+ },
1037
948
  "node_modules/fill-range": {
1038
949
  "version": "7.1.1",
1039
950
  "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -1074,23 +985,6 @@
1074
985
  "flat": "cli.js"
1075
986
  }
1076
987
  },
1077
- "node_modules/form-data": {
1078
- "version": "4.0.3",
1079
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
1080
- "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
1081
- "dev": true,
1082
- "license": "MIT",
1083
- "dependencies": {
1084
- "asynckit": "^0.4.0",
1085
- "combined-stream": "^1.0.8",
1086
- "es-set-tostringtag": "^2.1.0",
1087
- "hasown": "^2.0.2",
1088
- "mime-types": "^2.1.12"
1089
- },
1090
- "engines": {
1091
- "node": ">= 6"
1092
- }
1093
- },
1094
988
  "node_modules/fs.realpath": {
1095
989
  "version": "1.0.0",
1096
990
  "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -1113,16 +1007,6 @@
1113
1007
  "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1114
1008
  }
1115
1009
  },
1116
- "node_modules/function-bind": {
1117
- "version": "1.1.2",
1118
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1119
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1120
- "dev": true,
1121
- "license": "MIT",
1122
- "funding": {
1123
- "url": "https://github.com/sponsors/ljharb"
1124
- }
1125
- },
1126
1010
  "node_modules/get-caller-file": {
1127
1011
  "version": "2.0.5",
1128
1012
  "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -1133,45 +1017,6 @@
1133
1017
  "node": "6.* || 8.* || >= 10.*"
1134
1018
  }
1135
1019
  },
1136
- "node_modules/get-intrinsic": {
1137
- "version": "1.3.0",
1138
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
1139
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
1140
- "dev": true,
1141
- "license": "MIT",
1142
- "dependencies": {
1143
- "call-bind-apply-helpers": "^1.0.2",
1144
- "es-define-property": "^1.0.1",
1145
- "es-errors": "^1.3.0",
1146
- "es-object-atoms": "^1.1.1",
1147
- "function-bind": "^1.1.2",
1148
- "get-proto": "^1.0.1",
1149
- "gopd": "^1.2.0",
1150
- "has-symbols": "^1.1.0",
1151
- "hasown": "^2.0.2",
1152
- "math-intrinsics": "^1.1.0"
1153
- },
1154
- "engines": {
1155
- "node": ">= 0.4"
1156
- },
1157
- "funding": {
1158
- "url": "https://github.com/sponsors/ljharb"
1159
- }
1160
- },
1161
- "node_modules/get-proto": {
1162
- "version": "1.0.1",
1163
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
1164
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
1165
- "dev": true,
1166
- "license": "MIT",
1167
- "dependencies": {
1168
- "dunder-proto": "^1.0.1",
1169
- "es-object-atoms": "^1.0.0"
1170
- },
1171
- "engines": {
1172
- "node": ">= 0.4"
1173
- }
1174
- },
1175
1020
  "node_modules/glob": {
1176
1021
  "version": "8.1.0",
1177
1022
  "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
@@ -1206,19 +1051,6 @@
1206
1051
  "node": ">= 6"
1207
1052
  }
1208
1053
  },
1209
- "node_modules/gopd": {
1210
- "version": "1.2.0",
1211
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
1212
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
1213
- "dev": true,
1214
- "license": "MIT",
1215
- "engines": {
1216
- "node": ">= 0.4"
1217
- },
1218
- "funding": {
1219
- "url": "https://github.com/sponsors/ljharb"
1220
- }
1221
- },
1222
1054
  "node_modules/has-flag": {
1223
1055
  "version": "4.0.0",
1224
1056
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -1229,48 +1061,6 @@
1229
1061
  "node": ">=8"
1230
1062
  }
1231
1063
  },
1232
- "node_modules/has-symbols": {
1233
- "version": "1.1.0",
1234
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
1235
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
1236
- "dev": true,
1237
- "license": "MIT",
1238
- "engines": {
1239
- "node": ">= 0.4"
1240
- },
1241
- "funding": {
1242
- "url": "https://github.com/sponsors/ljharb"
1243
- }
1244
- },
1245
- "node_modules/has-tostringtag": {
1246
- "version": "1.0.2",
1247
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
1248
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
1249
- "dev": true,
1250
- "license": "MIT",
1251
- "dependencies": {
1252
- "has-symbols": "^1.0.3"
1253
- },
1254
- "engines": {
1255
- "node": ">= 0.4"
1256
- },
1257
- "funding": {
1258
- "url": "https://github.com/sponsors/ljharb"
1259
- }
1260
- },
1261
- "node_modules/hasown": {
1262
- "version": "2.0.2",
1263
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1264
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1265
- "dev": true,
1266
- "license": "MIT",
1267
- "dependencies": {
1268
- "function-bind": "^1.1.2"
1269
- },
1270
- "engines": {
1271
- "node": ">= 0.4"
1272
- }
1273
- },
1274
1064
  "node_modules/he": {
1275
1065
  "version": "1.2.0",
1276
1066
  "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -1454,31 +1244,30 @@
1454
1244
  }
1455
1245
  },
1456
1246
  "node_modules/jsdom": {
1457
- "version": "25.0.1",
1458
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
1459
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
1247
+ "version": "26.1.0",
1248
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
1249
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
1460
1250
  "dev": true,
1461
1251
  "license": "MIT",
1462
1252
  "dependencies": {
1463
- "cssstyle": "^4.1.0",
1253
+ "cssstyle": "^4.2.1",
1464
1254
  "data-urls": "^5.0.0",
1465
- "decimal.js": "^10.4.3",
1466
- "form-data": "^4.0.0",
1255
+ "decimal.js": "^10.5.0",
1467
1256
  "html-encoding-sniffer": "^4.0.0",
1468
1257
  "http-proxy-agent": "^7.0.2",
1469
- "https-proxy-agent": "^7.0.5",
1258
+ "https-proxy-agent": "^7.0.6",
1470
1259
  "is-potential-custom-element-name": "^1.0.1",
1471
- "nwsapi": "^2.2.12",
1472
- "parse5": "^7.1.2",
1473
- "rrweb-cssom": "^0.7.1",
1260
+ "nwsapi": "^2.2.16",
1261
+ "parse5": "^7.2.1",
1262
+ "rrweb-cssom": "^0.8.0",
1474
1263
  "saxes": "^6.0.0",
1475
1264
  "symbol-tree": "^3.2.4",
1476
- "tough-cookie": "^5.0.0",
1265
+ "tough-cookie": "^5.1.1",
1477
1266
  "w3c-xmlserializer": "^5.0.0",
1478
1267
  "webidl-conversions": "^7.0.0",
1479
1268
  "whatwg-encoding": "^3.1.1",
1480
1269
  "whatwg-mimetype": "^4.0.0",
1481
- "whatwg-url": "^14.0.0",
1270
+ "whatwg-url": "^14.1.1",
1482
1271
  "ws": "^8.18.0",
1483
1272
  "xml-name-validator": "^5.0.0"
1484
1273
  },
@@ -1486,7 +1275,7 @@
1486
1275
  "node": ">=18"
1487
1276
  },
1488
1277
  "peerDependencies": {
1489
- "canvas": "^2.11.2"
1278
+ "canvas": "^3.0.0"
1490
1279
  },
1491
1280
  "peerDependenciesMeta": {
1492
1281
  "canvas": {
@@ -1534,39 +1323,6 @@
1534
1323
  "dev": true,
1535
1324
  "license": "ISC"
1536
1325
  },
1537
- "node_modules/math-intrinsics": {
1538
- "version": "1.1.0",
1539
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
1540
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
1541
- "dev": true,
1542
- "license": "MIT",
1543
- "engines": {
1544
- "node": ">= 0.4"
1545
- }
1546
- },
1547
- "node_modules/mime-db": {
1548
- "version": "1.52.0",
1549
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1550
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1551
- "dev": true,
1552
- "license": "MIT",
1553
- "engines": {
1554
- "node": ">= 0.6"
1555
- }
1556
- },
1557
- "node_modules/mime-types": {
1558
- "version": "2.1.35",
1559
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1560
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1561
- "dev": true,
1562
- "license": "MIT",
1563
- "dependencies": {
1564
- "mime-db": "1.52.0"
1565
- },
1566
- "engines": {
1567
- "node": ">= 0.6"
1568
- }
1569
- },
1570
1326
  "node_modules/minimatch": {
1571
1327
  "version": "5.1.6",
1572
1328
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
@@ -1616,19 +1372,6 @@
1616
1372
  "node": ">= 14.0.0"
1617
1373
  }
1618
1374
  },
1619
- "node_modules/mocha/node_modules/escape-string-regexp": {
1620
- "version": "4.0.0",
1621
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1622
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1623
- "dev": true,
1624
- "license": "MIT",
1625
- "engines": {
1626
- "node": ">=10"
1627
- },
1628
- "funding": {
1629
- "url": "https://github.com/sponsors/sindresorhus"
1630
- }
1631
- },
1632
1375
  "node_modules/ms": {
1633
1376
  "version": "2.1.3",
1634
1377
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -1647,9 +1390,9 @@
1647
1390
  }
1648
1391
  },
1649
1392
  "node_modules/nwsapi": {
1650
- "version": "2.2.20",
1651
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
1652
- "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
1393
+ "version": "2.2.22",
1394
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz",
1395
+ "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==",
1653
1396
  "dev": true,
1654
1397
  "license": "MIT"
1655
1398
  },
@@ -1708,19 +1451,6 @@
1708
1451
  "url": "https://github.com/inikulin/parse5?sponsor=1"
1709
1452
  }
1710
1453
  },
1711
- "node_modules/parse5/node_modules/entities": {
1712
- "version": "6.0.1",
1713
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
1714
- "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
1715
- "dev": true,
1716
- "license": "BSD-2-Clause",
1717
- "engines": {
1718
- "node": ">=0.12"
1719
- },
1720
- "funding": {
1721
- "url": "https://github.com/fb55/entities?sponsor=1"
1722
- }
1723
- },
1724
1454
  "node_modules/path-exists": {
1725
1455
  "version": "4.0.0",
1726
1456
  "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -1788,9 +1518,9 @@
1788
1518
  }
1789
1519
  },
1790
1520
  "node_modules/rrweb-cssom": {
1791
- "version": "0.7.1",
1792
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
1793
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
1521
+ "version": "0.8.0",
1522
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
1523
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
1794
1524
  "dev": true,
1795
1525
  "license": "MIT"
1796
1526
  },
@@ -2061,9 +1791,9 @@
2061
1791
  "license": "ISC"
2062
1792
  },
2063
1793
  "node_modules/ws": {
2064
- "version": "8.18.2",
2065
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
2066
- "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
1794
+ "version": "8.18.3",
1795
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
1796
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
2067
1797
  "dev": true,
2068
1798
  "license": "MIT",
2069
1799
  "engines": {
data/brut-js/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brut-js",
3
- "version": "0.12.1",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "keywords": [
6
6
  "WebComponents",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "devDependencies": {
31
31
  "esbuild": "^0.24.2",
32
- "jsdom": "^25.0.1",
32
+ "jsdom": "^26.1.0",
33
33
  "mocha": "^10.8.2"
34
34
  }
35
35
  }
@@ -75,6 +75,54 @@ describe("<brut-ajax-submit>", () => {
75
75
  assert.equal(fetchRequests.length,0)
76
76
  assert(!okReceived)
77
77
  })
78
+
79
+ withHTML(`
80
+ <form action="http://example.net/foo" method="GET">
81
+ <input required type="text" name="some-text">
82
+ <input required type="number" name="some-number">
83
+ <brut-ajax-submit submitted-lifetime="10">
84
+ <button name="button-name" value="button-value">Submit</button>
85
+ </brut-ajax-submit>
86
+ </form>
87
+ `).onFetch( "/foo?some-text=Some+Text&some-number=11&button-name=button-value", [
88
+ { then: { status: 200, text: "<div>some html</div>" }},
89
+ ]
90
+ ).test("submits the form via GET, setting various attributes during the lifecycle",
91
+ ({document,assert,fetchRequests,waitForSetTimeout,readRequestBodyIntoString}) => {
92
+
93
+ const element = document.querySelector("brut-ajax-submit")
94
+ const button = element.querySelector("button")
95
+ const text = document.querySelector("input[name=some-text]")
96
+ const number = document.querySelector("input[name=some-number]")
97
+
98
+ let okReceived = false
99
+ let detailReceived = null
100
+ element.addEventListener("brut:submitok", (event) => {
101
+ okReceived = true
102
+ detailReceived = event.detail
103
+ })
104
+
105
+ text.value = "Some Text"
106
+ number.value = "11"
107
+
108
+ button.click()
109
+ assert(element.getAttribute("requesting") != null)
110
+
111
+ const promises = fetchRequests.
112
+ filter( (fetchRequest) => fetchRequest.promiseReturned ).
113
+ map( (fetchRequest) => fetchRequest.promiseReturned )
114
+
115
+ return Promise.all(promises).then( () => {
116
+ assert(okReceived)
117
+ assert(detailReceived)
118
+ assert.equal(detailReceived.body.innerHTML,"<div>some html</div>")
119
+ assert(element.getAttribute("requesting") == null)
120
+ assert(element.getAttribute("submitted") != null)
121
+ return waitForSetTimeout(11).then( () => {
122
+ assert(element.getAttribute("submitted") == null)
123
+ })
124
+ })
125
+ })
78
126
  withHTML(`
79
127
  <form action="http://example.net/foo" method="POST">
80
128
  <input required type="text" name="some-text">