brut 0.14.0 → 0.16.0.pre

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 (569) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +10 -0
  4. data/Dockerfile.dx +3 -6
  5. data/Gemfile.lock +1 -1
  6. data/brut-css/package-lock.json +2 -2
  7. data/brut-css/package.json +1 -1
  8. data/brut-js/package-lock.json +2 -2
  9. data/brut-js/package.json +1 -1
  10. data/brut-js/specs/Toast.spec.js +34 -0
  11. data/brut-js/src/I18nTranslation.js +3 -0
  12. data/brut-js/src/Message.js +9 -3
  13. data/brut-js/src/RichString.js +4 -1
  14. data/brut-js/src/Toast.js +102 -0
  15. data/brut-js/src/index.js +3 -0
  16. data/brutrb.com/.vitepress/config.mjs +4 -3
  17. data/brutrb.com/brut-js.md +1 -0
  18. data/brutrb.com/deployment.md +23 -9
  19. data/brutrb.com/jobs.md +107 -7
  20. data/brutrb.com/recipes/dev-env-secrets.md +87 -0
  21. data/brutrb.com/roadmap.md +2 -7
  22. data/docs/404.html +3 -3
  23. data/docs/adrs.html +7 -7
  24. data/docs/ai.html +7 -7
  25. data/docs/api/Brut/BackEnd/SeedData.html +1 -1
  26. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
  27. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
  28. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
  29. data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
  30. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
  31. data/docs/api/Brut/BackEnd/Validators.html +1 -1
  32. data/docs/api/Brut/BackEnd.html +1 -1
  33. data/docs/api/Brut/CLI/App.html +1 -1
  34. data/docs/api/Brut/CLI/AppRunner.html +1 -1
  35. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
  36. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
  37. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
  38. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
  39. data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
  40. data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
  41. data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
  42. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
  43. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
  44. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
  45. data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
  46. data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
  47. data/docs/api/Brut/CLI/Apps/DB.html +1 -1
  48. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
  49. data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
  50. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
  51. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
  52. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
  53. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
  54. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
  55. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
  56. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +1 -1
  57. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
  58. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
  59. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
  60. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
  61. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
  62. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
  63. data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
  64. data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
  65. data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
  66. data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
  67. data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
  68. data/docs/api/Brut/CLI/Apps/Test.html +1 -1
  69. data/docs/api/Brut/CLI/Apps.html +1 -1
  70. data/docs/api/Brut/CLI/Command.html +1 -1
  71. data/docs/api/Brut/CLI/Error.html +1 -1
  72. data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
  73. data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
  74. data/docs/api/Brut/CLI/Executor.html +1 -1
  75. data/docs/api/Brut/CLI/InvalidOption.html +1 -1
  76. data/docs/api/Brut/CLI/Options.html +1 -1
  77. data/docs/api/Brut/CLI/Output.html +1 -1
  78. data/docs/api/Brut/CLI/SystemExecError.html +1 -1
  79. data/docs/api/Brut/CLI.html +1 -1
  80. data/docs/api/Brut/FactoryBot.html +1 -1
  81. data/docs/api/Brut/Framework/App.html +1 -1
  82. data/docs/api/Brut/Framework/Config.html +1 -1
  83. data/docs/api/Brut/Framework/Container.html +1 -1
  84. data/docs/api/Brut/Framework/Error.html +1 -1
  85. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
  86. data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
  87. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
  88. data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
  89. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
  90. data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
  91. data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
  92. data/docs/api/Brut/Framework/Errors.html +1 -1
  93. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +1 -1
  94. data/docs/api/Brut/Framework/MCP.html +1 -1
  95. data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
  96. data/docs/api/Brut/Framework.html +1 -1
  97. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
  98. data/docs/api/Brut/FrontEnd/Component/Helpers.html +1 -1
  99. data/docs/api/Brut/FrontEnd/Component.html +1 -1
  100. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +1 -1
  101. data/docs/api/Brut/FrontEnd/Components/FormTag.html +1 -1
  102. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
  103. data/docs/api/Brut/FrontEnd/Components/Input.html +1 -1
  104. data/docs/api/Brut/FrontEnd/Components/Inputs/ButtonTag.html +1 -1
  105. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
  106. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +1 -1
  107. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +1 -1
  108. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +1 -1
  109. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +1 -1
  110. data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
  111. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
  112. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +37 -18
  113. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
  114. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
  115. data/docs/api/Brut/FrontEnd/Components.html +1 -1
  116. data/docs/api/Brut/FrontEnd/CsrfProtector.html +1 -1
  117. data/docs/api/Brut/FrontEnd/Download.html +1 -1
  118. data/docs/api/Brut/FrontEnd/Flash.html +1 -1
  119. data/docs/api/Brut/FrontEnd/Form.html +1 -1
  120. data/docs/api/Brut/FrontEnd/Forms/Button.html +1 -1
  121. data/docs/api/Brut/FrontEnd/Forms/ButtonInputDefinition.html +1 -1
  122. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
  123. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
  124. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
  125. data/docs/api/Brut/FrontEnd/Forms/Input.html +1 -1
  126. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +1 -1
  127. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +1 -1
  128. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
  129. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
  130. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
  131. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
  132. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
  133. data/docs/api/Brut/FrontEnd/Forms.html +1 -1
  134. data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
  135. data/docs/api/Brut/FrontEnd/Handler.html +1 -1
  136. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
  137. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
  138. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
  139. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
  140. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +1 -1
  141. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
  142. data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
  143. data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
  144. data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
  145. data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
  146. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
  147. data/docs/api/Brut/FrontEnd/Layout.html +171 -3
  148. data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
  149. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
  150. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
  151. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
  152. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
  153. data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
  154. data/docs/api/Brut/FrontEnd/Page.html +1 -1
  155. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
  156. data/docs/api/Brut/FrontEnd/Pages.html +1 -1
  157. data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
  158. data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
  159. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
  160. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
  161. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
  162. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
  163. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
  164. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
  165. data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
  166. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
  167. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
  168. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
  169. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
  170. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
  171. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
  172. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
  173. data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
  174. data/docs/api/Brut/FrontEnd/Routing.html +1 -1
  175. data/docs/api/Brut/FrontEnd/Session.html +1 -1
  176. data/docs/api/Brut/FrontEnd.html +1 -1
  177. data/docs/api/Brut/I18n/BaseMethods.html +1 -1
  178. data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
  179. data/docs/api/Brut/I18n/ForCLI.html +1 -1
  180. data/docs/api/Brut/I18n/ForHTML.html +1 -1
  181. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
  182. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
  183. data/docs/api/Brut/I18n.html +1 -1
  184. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
  185. data/docs/api/Brut/Instrumentation/Methods/ClassMethods.html +1 -1
  186. data/docs/api/Brut/Instrumentation/Methods.html +1 -1
  187. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +1 -1
  188. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +1 -1
  189. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +1 -1
  190. data/docs/api/Brut/Instrumentation.html +1 -1
  191. data/docs/api/Brut/RubocopConfig.html +1 -1
  192. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +1 -1
  193. data/docs/api/Brut/SinatraHelpers.html +1 -1
  194. data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
  195. data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
  196. data/docs/api/Brut/SpecSupport/E2ETestServer.html +1 -1
  197. data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
  198. data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
  199. data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
  200. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
  201. data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
  202. data/docs/api/Brut/SpecSupport/HandlerSupport.html +1 -1
  203. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +1 -1
  204. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +1 -1
  205. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +1 -1
  206. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +1 -1
  207. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +1 -1
  208. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +1 -1
  209. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +1 -1
  210. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +1 -1
  211. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +1 -1
  212. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +1 -1
  213. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +1 -1
  214. data/docs/api/Brut/SpecSupport/Matchers.html +1 -1
  215. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +1 -1
  216. data/docs/api/Brut/SpecSupport/RSpecSetup.html +1 -1
  217. data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
  218. data/docs/api/Brut/SpecSupport.html +1 -1
  219. data/docs/api/Brut.html +1 -1
  220. data/docs/api/Clock.html +1 -1
  221. data/docs/api/ModuleName.html +1 -1
  222. data/docs/api/RichString.html +1 -1
  223. data/docs/api/SemanticLogger/Appender/Async.html +1 -1
  224. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +1 -1
  225. data/docs/api/Sequel/Extensions/BrutMigrations.html +1 -1
  226. data/docs/api/Sequel/Extensions.html +1 -1
  227. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
  228. data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
  229. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
  230. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
  231. data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
  232. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
  233. data/docs/api/Sequel/Plugins/FindBang.html +1 -1
  234. data/docs/api/Sequel/Plugins.html +1 -1
  235. data/docs/api/Sequel.html +1 -1
  236. data/docs/api/_index.html +1 -1
  237. data/docs/api/file.README.html +1 -1
  238. data/docs/api/index.html +1 -1
  239. data/docs/api/method_list.html +157 -141
  240. data/docs/api/top-level-namespace.html +1 -1
  241. data/docs/assets/adrs.md.YglbWtQe.js +1 -0
  242. data/docs/assets/adrs.md.YglbWtQe.lean.js +1 -0
  243. data/docs/assets/ai.md.ChLnvDAX.js +1 -0
  244. data/docs/assets/ai.md.ChLnvDAX.lean.js +1 -0
  245. data/docs/assets/{app.BDtsVxyd.js → app.Dm7v_ouO.js} +1 -1
  246. data/docs/assets/{assets.md.7C3HWkga.js → assets.md.BEF6Oz6K.js} +2 -2
  247. data/docs/assets/assets.md.BEF6Oz6K.lean.js +1 -0
  248. data/docs/assets/{brut-js.md.B4GYxQVw.js → brut-js.md.BMz0X1Rz.js} +2 -2
  249. data/docs/assets/brut-js.md.BMz0X1Rz.lean.js +1 -0
  250. data/docs/assets/business-logic.md.DbuaOYGU.js +1 -0
  251. data/docs/assets/business-logic.md.DbuaOYGU.lean.js +1 -0
  252. data/docs/assets/chunks/@localSearchIndexroot.BiNFswvo.js +1 -0
  253. data/docs/assets/chunks/VPLocalSearchBox.DQK6jQou.js +8 -0
  254. data/docs/assets/chunks/framework.C4nOkCZI.js +18 -0
  255. data/docs/assets/chunks/{theme.DZKmijwi.js → theme.BuExsdM9.js} +2 -2
  256. data/docs/assets/{cli.md.CjsktgFz.js → cli.md.DDMar_51.js} +2 -2
  257. data/docs/assets/cli.md.DDMar_51.lean.js +1 -0
  258. data/docs/assets/{components.md.rMhQ0WdZ.js → components.md.Dfd3w6UW.js} +5 -5
  259. data/docs/assets/components.md.Dfd3w6UW.lean.js +1 -0
  260. data/docs/assets/{configuration.md.BK42Yjp_.js → configuration.md.DTYoV2Ea.js} +2 -2
  261. data/docs/assets/configuration.md.DTYoV2Ea.lean.js +1 -0
  262. data/docs/assets/{css.md.CltvJqAa.js → css.md.K5rOCOQY.js} +2 -2
  263. data/docs/assets/css.md.K5rOCOQY.lean.js +1 -0
  264. data/docs/assets/{custom-element-tests.md.B_rbta32.js → custom-element-tests.md.DiLe-eFw.js} +2 -2
  265. data/docs/assets/custom-element-tests.md.DiLe-eFw.lean.js +1 -0
  266. data/docs/assets/{database-access.md.gnluu54N.js → database-access.md.Dc8l2Plf.js} +2 -2
  267. data/docs/assets/database-access.md.Dc8l2Plf.lean.js +1 -0
  268. data/docs/assets/{database-schema.md.LpmBPVEU.js → database-schema.md.BJ_JhXmO.js} +2 -2
  269. data/docs/assets/database-schema.md.BJ_JhXmO.lean.js +1 -0
  270. data/docs/assets/{deployment.md.BLseERGV.js → deployment.md.C1u5ep0g.js} +2 -2
  271. data/docs/assets/deployment.md.C1u5ep0g.lean.js +1 -0
  272. data/docs/assets/{dev-environment.md.DRH2D2-O.js → dev-environment.md.B1S9p5ZK.js} +2 -2
  273. data/docs/assets/{dev-environment.md.DRH2D2-O.lean.js → dev-environment.md.B1S9p5ZK.lean.js} +1 -1
  274. data/docs/assets/{dir-structure.md.CWir1pic.js → dir-structure.md.D1T2kGwj.js} +2 -2
  275. data/docs/assets/dir-structure.md.D1T2kGwj.lean.js +1 -0
  276. data/docs/assets/doc-conventions.md.CDnWaEFg.js +1 -0
  277. data/docs/assets/doc-conventions.md.CDnWaEFg.lean.js +1 -0
  278. data/docs/assets/{end-to-end-tests.md.DzqRpZ43.js → end-to-end-tests.md.BJJdNDYL.js} +2 -2
  279. data/docs/assets/end-to-end-tests.md.BJJdNDYL.lean.js +1 -0
  280. data/docs/assets/{features.md.DPFXsy0z.js → features.md.BDWxnyNO.js} +2 -2
  281. data/docs/assets/features.md.BDWxnyNO.lean.js +1 -0
  282. data/docs/assets/{flash-and-session.md.nPvUpnUx.js → flash-and-session.md.CUsMxoNl.js} +2 -2
  283. data/docs/assets/flash-and-session.md.CUsMxoNl.lean.js +1 -0
  284. data/docs/assets/{form-constraints.md.KTv5cdR4.js → form-constraints.md.KlfXSKm2.js} +2 -2
  285. data/docs/assets/form-constraints.md.KlfXSKm2.lean.js +1 -0
  286. data/docs/assets/{forms.md.v9qIbmUM.js → forms.md.DEkmJUvb.js} +3 -3
  287. data/docs/assets/forms.md.DEkmJUvb.lean.js +1 -0
  288. data/docs/assets/{getting-started.md.DTOl4c2g.js → getting-started.md.DO-4eoGW.js} +4 -4
  289. data/docs/assets/getting-started.md.DO-4eoGW.lean.js +1 -0
  290. data/docs/assets/{handlers.md.h84MMB1R.js → handlers.md.C5tUwmmo.js} +2 -2
  291. data/docs/assets/handlers.md.C5tUwmmo.lean.js +1 -0
  292. data/docs/assets/{hooks.md.Jmb5VOLA.js → hooks.md.CoiYCKRc.js} +2 -2
  293. data/docs/assets/hooks.md.CoiYCKRc.lean.js +1 -0
  294. data/docs/assets/{i18n.md.BAm9t9JJ.js → i18n.md.DxkCKhUw.js} +2 -2
  295. data/docs/assets/i18n.md.DxkCKhUw.lean.js +1 -0
  296. data/docs/assets/{index.md.Bn9e0sRJ.js → index.md.DnphWyQd.js} +1 -1
  297. data/docs/assets/{index.md.Bn9e0sRJ.lean.js → index.md.DnphWyQd.lean.js} +1 -1
  298. data/docs/assets/{instrumentation.md._lNSriEZ.js → instrumentation.md.BcxjC4jd.js} +2 -2
  299. data/docs/assets/instrumentation.md.BcxjC4jd.lean.js +1 -0
  300. data/docs/assets/{javascript.md.DzrMxUmI.js → javascript.md.D6fxhaQb.js} +2 -2
  301. data/docs/assets/javascript.md.D6fxhaQb.lean.js +1 -0
  302. data/docs/assets/jobs.md.Bc7Y1YpK.js +1 -0
  303. data/docs/assets/jobs.md.Bc7Y1YpK.lean.js +1 -0
  304. data/docs/assets/{keyword-injection.md.95Zgh2eN.js → keyword-injection.md.CqLnnzIz.js} +2 -2
  305. data/docs/assets/keyword-injection.md.CqLnnzIz.lean.js +1 -0
  306. data/docs/assets/layouts.md.HEbeK7Jr.js +68 -0
  307. data/docs/assets/layouts.md.HEbeK7Jr.lean.js +1 -0
  308. data/docs/assets/lsp.md.bE9dW8n9.js +1 -0
  309. data/docs/assets/lsp.md.bE9dW8n9.lean.js +1 -0
  310. data/docs/assets/{markdown-examples.md.CCFEQO44.js → markdown-examples.md.BPmtHlc-.js} +2 -2
  311. data/docs/assets/markdown-examples.md.BPmtHlc-.lean.js +1 -0
  312. data/docs/assets/{middleware.md.Czz_UlJN.js → middleware.md.BhOIsg59.js} +2 -2
  313. data/docs/assets/middleware.md.BhOIsg59.lean.js +1 -0
  314. data/docs/assets/overview.md.BpWAgPFH.js +1 -0
  315. data/docs/assets/overview.md.BpWAgPFH.lean.js +1 -0
  316. data/docs/assets/{pages.md.B7Hc-i6H.js → pages.md.B3sQXpEd.js} +2 -2
  317. data/docs/assets/pages.md.B3sQXpEd.lean.js +1 -0
  318. data/docs/assets/{recipes_alternate-layouts.md.BwEytl59.js → recipes_alternate-layouts.md.C1QzVkA7.js} +2 -2
  319. data/docs/assets/recipes_alternate-layouts.md.C1QzVkA7.lean.js +1 -0
  320. data/docs/assets/{recipes_authentication.md.nwO6F7Ou.js → recipes_authentication.md.CyvoIW82.js} +2 -2
  321. data/docs/assets/recipes_authentication.md.CyvoIW82.lean.js +1 -0
  322. data/docs/assets/{recipes_custom-flash.md.CrQbI5eH.js → recipes_custom-flash.md.6gFqf2uL.js} +2 -2
  323. data/docs/assets/recipes_custom-flash.md.6gFqf2uL.lean.js +1 -0
  324. data/docs/assets/{recipes_form-errors.md.Bv5RCKqH.js → recipes_form-errors.md.B5ptSzMO.js} +2 -2
  325. data/docs/assets/recipes_form-errors.md.B5ptSzMO.lean.js +1 -0
  326. data/docs/assets/{recipes_indexed-forms.md.CstYyOSo.js → recipes_indexed-forms.md.BYYQGW2C.js} +2 -2
  327. data/docs/assets/recipes_indexed-forms.md.BYYQGW2C.lean.js +1 -0
  328. data/docs/assets/{recipes_migrations.md.CTcnWDJF.js → recipes_migrations.md.Cid7-3cu.js} +2 -2
  329. data/docs/assets/recipes_migrations.md.Cid7-3cu.lean.js +1 -0
  330. data/docs/assets/{recipes_text-field-component.md.H4wLAK0Z.js → recipes_text-field-component.md.VhOsCtKI.js} +2 -2
  331. data/docs/assets/recipes_text-field-component.md.VhOsCtKI.lean.js +1 -0
  332. data/docs/assets/roadmap.md.CJsbUmK_.js +1 -0
  333. data/docs/assets/roadmap.md.CJsbUmK_.lean.js +1 -0
  334. data/docs/assets/{routes.md.BD6y2i-f.js → routes.md.C1dgIBtD.js} +2 -2
  335. data/docs/assets/routes.md.C1dgIBtD.lean.js +1 -0
  336. data/docs/assets/security.md.Jn4SY1uK.js +1 -0
  337. data/docs/assets/security.md.Jn4SY1uK.lean.js +1 -0
  338. data/docs/assets/{seed-data.md.BvFZlqIk.js → seed-data.md.UZW0WxYN.js} +2 -2
  339. data/docs/assets/seed-data.md.UZW0WxYN.lean.js +1 -0
  340. data/docs/assets/space-time-continuum.md.D9rYGDFH.js +1 -0
  341. data/docs/assets/space-time-continuum.md.D9rYGDFH.lean.js +1 -0
  342. data/docs/assets/{tutorial.md.BM40jnoq.js → tutorial.md.BX6f6l00.js} +2 -2
  343. data/docs/assets/tutorial.md.BX6f6l00.lean.js +1 -0
  344. data/docs/assets/{tutorials_01-intro.md.B4sUBY3X.js → tutorials_01-intro.md.CzZ3kpF_.js} +2 -2
  345. data/docs/assets/{tutorials_01-intro.md.B4sUBY3X.lean.js → tutorials_01-intro.md.CzZ3kpF_.lean.js} +1 -1
  346. data/docs/assets/{tutorials_02-dialog.md.CPNK1SC_.js → tutorials_02-dialog.md.D2vSjDVf.js} +2 -2
  347. data/docs/assets/{tutorials_02-dialog.md.CPNK1SC_.lean.js → tutorials_02-dialog.md.D2vSjDVf.lean.js} +1 -1
  348. data/docs/assets/{unit-tests.md.DUGrnLj5.js → unit-tests.md.vDsdBbO_.js} +2 -2
  349. data/docs/assets/unit-tests.md.vDsdBbO_.lean.js +1 -0
  350. data/docs/assets/why.md.4WpxdrQ2.js +1 -0
  351. data/docs/assets/why.md.4WpxdrQ2.lean.js +1 -0
  352. data/docs/assets.html +7 -7
  353. data/docs/brut-js/api/AjaxSubmit.html +2 -2
  354. data/docs/brut-js/api/AjaxSubmit.js.html +2 -2
  355. data/docs/brut-js/api/Autosubmit.html +2 -2
  356. data/docs/brut-js/api/Autosubmit.js.html +2 -2
  357. data/docs/brut-js/api/BaseCustomElement.html +2 -2
  358. data/docs/brut-js/api/BaseCustomElement.js.html +2 -2
  359. data/docs/brut-js/api/BrutCustomElements.html +3 -3
  360. data/docs/brut-js/api/BufferedLogger.html +2 -2
  361. data/docs/brut-js/api/ConfirmSubmit.html +2 -2
  362. data/docs/brut-js/api/ConfirmSubmit.js.html +2 -2
  363. data/docs/brut-js/api/ConfirmationDialog.html +2 -2
  364. data/docs/brut-js/api/ConfirmationDialog.js.html +2 -2
  365. data/docs/brut-js/api/ConstraintViolationMessage.html +2 -2
  366. data/docs/brut-js/api/ConstraintViolationMessage.js.html +2 -2
  367. data/docs/brut-js/api/ConstraintViolationMessages.html +2 -2
  368. data/docs/brut-js/api/ConstraintViolationMessages.js.html +2 -2
  369. data/docs/brut-js/api/CopyToClipboard.html +2 -2
  370. data/docs/brut-js/api/CopyToClipboard.js.html +2 -2
  371. data/docs/brut-js/api/Form.html +2 -2
  372. data/docs/brut-js/api/Form.js.html +2 -2
  373. data/docs/brut-js/api/I18nTranslation.html +2 -2
  374. data/docs/brut-js/api/I18nTranslation.js.html +5 -2
  375. data/docs/brut-js/api/LocaleDetection.html +2 -2
  376. data/docs/brut-js/api/LocaleDetection.js.html +2 -2
  377. data/docs/brut-js/api/Logger.html +2 -2
  378. data/docs/brut-js/api/Logger.js.html +2 -2
  379. data/docs/brut-js/api/Message.html +2 -2
  380. data/docs/brut-js/api/Message.js.html +11 -5
  381. data/docs/brut-js/api/PrefixedLogger.html +2 -2
  382. data/docs/brut-js/api/RichString.html +9 -9
  383. data/docs/brut-js/api/RichString.js.html +6 -3
  384. data/docs/brut-js/api/Tabs.html +2 -2
  385. data/docs/brut-js/api/Tabs.js.html +2 -2
  386. data/docs/brut-js/api/Toast.html +270 -0
  387. data/docs/brut-js/api/Toast.js.html +153 -0
  388. data/docs/brut-js/api/Tracing.html +2 -2
  389. data/docs/brut-js/api/Tracing.js.html +2 -2
  390. data/docs/brut-js/api/external-CustomElementRegistry.html +3 -3
  391. data/docs/brut-js/api/external-Performance.html +3 -3
  392. data/docs/brut-js/api/external-Promise.html +3 -3
  393. data/docs/brut-js/api/external-ValidityState.html +3 -3
  394. data/docs/brut-js/api/external-Window.html +4 -4
  395. data/docs/brut-js/api/external-fetch.html +3 -3
  396. data/docs/brut-js/api/global.html +3 -3
  397. data/docs/brut-js/api/index.html +2 -2
  398. data/docs/brut-js/api/index.js.html +5 -2
  399. data/docs/brut-js/api/module-testing.html +2 -2
  400. data/docs/brut-js/api/testing.AssetMetadata.html +2 -2
  401. data/docs/brut-js/api/testing.AssetMetadataLoader.html +2 -2
  402. data/docs/brut-js/api/testing.CustomElementTest.html +2 -2
  403. data/docs/brut-js/api/testing.DOMCreator.html +2 -2
  404. data/docs/brut-js/api/testing_AssetMetadata.js.html +2 -2
  405. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +2 -2
  406. data/docs/brut-js/api/testing_CustomElementTest.js.html +2 -2
  407. data/docs/brut-js/api/testing_DOMCreator.js.html +2 -2
  408. data/docs/brut-js/api/testing_index.js.html +2 -2
  409. data/docs/brut-js.html +8 -8
  410. data/docs/business-logic.html +7 -7
  411. data/docs/cli.html +7 -7
  412. data/docs/components.html +10 -10
  413. data/docs/configuration.html +7 -7
  414. data/docs/css.html +7 -7
  415. data/docs/custom-element-tests.html +7 -7
  416. data/docs/database-access.html +7 -7
  417. data/docs/database-schema.html +7 -7
  418. data/docs/deployment.html +7 -7
  419. data/docs/dev-environment.html +7 -7
  420. data/docs/dir-structure.html +7 -7
  421. data/docs/doc-conventions.html +7 -7
  422. data/docs/end-to-end-tests.html +7 -7
  423. data/docs/features.html +7 -7
  424. data/docs/flash-and-session.html +7 -7
  425. data/docs/form-constraints.html +7 -7
  426. data/docs/forms.html +8 -8
  427. data/docs/getting-started.html +9 -9
  428. data/docs/handlers.html +7 -7
  429. data/docs/hashmap.json +1 -1
  430. data/docs/hooks.html +7 -7
  431. data/docs/i18n.html +7 -7
  432. data/docs/index.html +6 -6
  433. data/docs/instrumentation.html +7 -7
  434. data/docs/javascript.html +7 -7
  435. data/docs/jobs.html +7 -7
  436. data/docs/keyword-injection.html +7 -7
  437. data/docs/layouts.html +42 -12
  438. data/docs/lsp.html +7 -7
  439. data/docs/markdown-examples.html +7 -7
  440. data/docs/middleware.html +7 -7
  441. data/docs/overview.html +7 -7
  442. data/docs/pages.html +7 -7
  443. data/docs/recipes/alternate-layouts.html +8 -8
  444. data/docs/recipes/authentication.html +7 -7
  445. data/docs/recipes/custom-flash.html +8 -8
  446. data/docs/recipes/form-errors.html +7 -7
  447. data/docs/recipes/indexed-forms.html +7 -7
  448. data/docs/recipes/migrations.html +7 -7
  449. data/docs/recipes/text-field-component.html +7 -7
  450. data/docs/roadmap.html +7 -7
  451. data/docs/routes.html +7 -7
  452. data/docs/security.html +7 -7
  453. data/docs/seed-data.html +7 -7
  454. data/docs/space-time-continuum.html +7 -7
  455. data/docs/tutorial.html +7 -7
  456. data/docs/tutorials/01-intro.html +7 -7
  457. data/docs/tutorials/02-dialog.html +7 -7
  458. data/docs/unit-tests.html +7 -7
  459. data/docs/why.html +7 -7
  460. data/dx/bash_customizations +3 -4
  461. data/dx/build.pre +15 -0
  462. data/lib/brut/cli/apps/heroku_container_based_deploy.rb +41 -15
  463. data/lib/brut/cli/apps/test.rb +2 -0
  464. data/lib/brut/framework/container.rb +6 -4
  465. data/lib/brut/framework/mcp.rb +1 -1
  466. data/lib/brut/version.rb +1 -1
  467. data/mkbrut/Gemfile.lock +2 -2
  468. data/mkbrut/lib/mkbrut/add_segment.rb +38 -0
  469. data/mkbrut/lib/mkbrut/add_segment_options.rb +22 -0
  470. data/mkbrut/lib/mkbrut/app.rb +7 -2
  471. data/mkbrut/lib/mkbrut/base.rb +1 -0
  472. data/mkbrut/lib/mkbrut/cli.rb +90 -8
  473. data/mkbrut/lib/mkbrut/ops/insert_code_in_method.rb +19 -7
  474. data/mkbrut/lib/mkbrut/ops/insert_into_file.rb +36 -0
  475. data/mkbrut/lib/mkbrut/ops/prism_parsing_op.rb +14 -2
  476. data/mkbrut/lib/mkbrut/ops.rb +1 -0
  477. data/mkbrut/lib/mkbrut/segments/bare_bones.rb +8 -0
  478. data/mkbrut/lib/mkbrut/segments/demo.rb +8 -0
  479. data/mkbrut/lib/mkbrut/segments/heroku.rb +23 -3
  480. data/mkbrut/lib/mkbrut/segments/sidekiq.rb +136 -1
  481. data/mkbrut/lib/mkbrut/segments.rb +1 -1
  482. data/mkbrut/lib/mkbrut/version.rb +1 -1
  483. data/mkbrut/lib/mkbrut.rb +2 -0
  484. data/mkbrut/templates/Base/.gitignore +3 -0
  485. data/mkbrut/templates/Base/Dockerfile.dx +18 -21
  486. data/mkbrut/templates/Base/Gemfile.erb +1 -1
  487. data/mkbrut/templates/Base/bin/run +107 -67
  488. data/mkbrut/templates/Base/bin/run.run +4 -0
  489. data/mkbrut/templates/Base/bin/setup +32 -1
  490. data/mkbrut/templates/Base/dx/bash_customizations +0 -4
  491. data/mkbrut/templates/Base/package.json.erb +1 -1
  492. data/mkbrut/templates/segments/Heroku/deploy/Dockerfile +15 -15
  493. data/mkbrut/templates/segments/Heroku/deploy/heroku_config.rb +5 -4
  494. data/mkbrut/templates/segments/Sidekiq/app/boot_sidekiq.rb +2 -0
  495. data/mkbrut/templates/segments/Sidekiq/app/config/sidekiq.yml +4 -0
  496. data/mkbrut/templates/segments/Sidekiq/app/src/back_end/jobs/app_job.rb +3 -0
  497. data/mkbrut/templates/segments/Sidekiq/app/src/back_end/jobs/example_job.rb +12 -0
  498. data/mkbrut/templates/segments/Sidekiq/app/src/back_end/segments/sidekiq_segment.rb +56 -0
  499. data/mkbrut/templates/segments/Sidekiq/bin/run.sidekiq +4 -0
  500. data/mkbrut/templates/segments/Sidekiq/specs/back_end/jobs/example_job.spec.rb +5 -0
  501. data/mkbrut/templates/segments/Sidekiq/specs/integration/sidekiq_works.spec.rb +38 -0
  502. metadata +131 -116
  503. data/docs/assets/adrs.md.BxjHi9-8.js +0 -1
  504. data/docs/assets/adrs.md.BxjHi9-8.lean.js +0 -1
  505. data/docs/assets/ai.md.Cy9GWnER.js +0 -1
  506. data/docs/assets/ai.md.Cy9GWnER.lean.js +0 -1
  507. data/docs/assets/assets.md.7C3HWkga.lean.js +0 -1
  508. data/docs/assets/brut-js.md.B4GYxQVw.lean.js +0 -1
  509. data/docs/assets/business-logic.md.BY4hGy0m.js +0 -1
  510. data/docs/assets/business-logic.md.BY4hGy0m.lean.js +0 -1
  511. data/docs/assets/chunks/@localSearchIndexroot.BWVzhs5N.js +0 -1
  512. data/docs/assets/chunks/VPLocalSearchBox.DCJk5nAW.js +0 -8
  513. data/docs/assets/chunks/framework.1L-BeKqY.js +0 -18
  514. data/docs/assets/cli.md.CjsktgFz.lean.js +0 -1
  515. data/docs/assets/components.md.rMhQ0WdZ.lean.js +0 -1
  516. data/docs/assets/configuration.md.BK42Yjp_.lean.js +0 -1
  517. data/docs/assets/css.md.CltvJqAa.lean.js +0 -1
  518. data/docs/assets/custom-element-tests.md.B_rbta32.lean.js +0 -1
  519. data/docs/assets/database-access.md.gnluu54N.lean.js +0 -1
  520. data/docs/assets/database-schema.md.LpmBPVEU.lean.js +0 -1
  521. data/docs/assets/deployment.md.BLseERGV.lean.js +0 -1
  522. data/docs/assets/dir-structure.md.CWir1pic.lean.js +0 -1
  523. data/docs/assets/doc-conventions.md.DOkAuXlt.js +0 -1
  524. data/docs/assets/doc-conventions.md.DOkAuXlt.lean.js +0 -1
  525. data/docs/assets/end-to-end-tests.md.DzqRpZ43.lean.js +0 -1
  526. data/docs/assets/features.md.DPFXsy0z.lean.js +0 -1
  527. data/docs/assets/flash-and-session.md.nPvUpnUx.lean.js +0 -1
  528. data/docs/assets/form-constraints.md.KTv5cdR4.lean.js +0 -1
  529. data/docs/assets/forms.md.v9qIbmUM.lean.js +0 -1
  530. data/docs/assets/getting-started.md.DTOl4c2g.lean.js +0 -1
  531. data/docs/assets/handlers.md.h84MMB1R.lean.js +0 -1
  532. data/docs/assets/hooks.md.Jmb5VOLA.lean.js +0 -1
  533. data/docs/assets/i18n.md.BAm9t9JJ.lean.js +0 -1
  534. data/docs/assets/instrumentation.md._lNSriEZ.lean.js +0 -1
  535. data/docs/assets/javascript.md.DzrMxUmI.lean.js +0 -1
  536. data/docs/assets/jobs.md.S-2amAYp.js +0 -1
  537. data/docs/assets/jobs.md.S-2amAYp.lean.js +0 -1
  538. data/docs/assets/keyword-injection.md.95Zgh2eN.lean.js +0 -1
  539. data/docs/assets/layouts.md.CVGl9xIO.js +0 -38
  540. data/docs/assets/layouts.md.CVGl9xIO.lean.js +0 -1
  541. data/docs/assets/lsp.md.Dn1rIiW0.js +0 -1
  542. data/docs/assets/lsp.md.Dn1rIiW0.lean.js +0 -1
  543. data/docs/assets/markdown-examples.md.CCFEQO44.lean.js +0 -1
  544. data/docs/assets/middleware.md.Czz_UlJN.lean.js +0 -1
  545. data/docs/assets/overview.md.DlKiRRG_.js +0 -1
  546. data/docs/assets/overview.md.DlKiRRG_.lean.js +0 -1
  547. data/docs/assets/pages.md.B7Hc-i6H.lean.js +0 -1
  548. data/docs/assets/recipes_alternate-layouts.md.BwEytl59.lean.js +0 -1
  549. data/docs/assets/recipes_authentication.md.nwO6F7Ou.lean.js +0 -1
  550. data/docs/assets/recipes_blank-layouts.md.fyAUJyJR.js +0 -15
  551. data/docs/assets/recipes_blank-layouts.md.fyAUJyJR.lean.js +0 -1
  552. data/docs/assets/recipes_custom-flash.md.CrQbI5eH.lean.js +0 -1
  553. data/docs/assets/recipes_form-errors.md.Bv5RCKqH.lean.js +0 -1
  554. data/docs/assets/recipes_indexed-forms.md.CstYyOSo.lean.js +0 -1
  555. data/docs/assets/recipes_migrations.md.CTcnWDJF.lean.js +0 -1
  556. data/docs/assets/recipes_text-field-component.md.H4wLAK0Z.lean.js +0 -1
  557. data/docs/assets/roadmap.md.C6PRi0DX.js +0 -1
  558. data/docs/assets/roadmap.md.C6PRi0DX.lean.js +0 -1
  559. data/docs/assets/routes.md.BD6y2i-f.lean.js +0 -1
  560. data/docs/assets/security.md.C0G_AZR-.js +0 -1
  561. data/docs/assets/security.md.C0G_AZR-.lean.js +0 -1
  562. data/docs/assets/seed-data.md.BvFZlqIk.lean.js +0 -1
  563. data/docs/assets/space-time-continuum.md.xl44xDos.js +0 -1
  564. data/docs/assets/space-time-continuum.md.xl44xDos.lean.js +0 -1
  565. data/docs/assets/tutorial.md.BM40jnoq.lean.js +0 -1
  566. data/docs/assets/unit-tests.md.DUGrnLj5.lean.js +0 -1
  567. data/docs/assets/why.md.C-hk5xgJ.js +0 -1
  568. data/docs/assets/why.md.C-hk5xgJ.lean.js +0 -1
  569. data/docs/recipes/blank-layouts.html +0 -43
@@ -687,13 +687,13 @@ in the console to help debug.</p></div>
687
687
  </div>
688
688
 
689
689
  <nav>
690
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
690
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
691
691
  </nav>
692
692
 
693
693
  <br class="clear">
694
694
 
695
695
  <footer>
696
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
696
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
697
697
  </footer>
698
698
 
699
699
  <script> prettyPrint(); </script>
@@ -126,13 +126,13 @@ export default Logger
126
126
  </div>
127
127
 
128
128
  <nav>
129
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
129
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
130
130
  </nav>
131
131
 
132
132
  <br class="clear">
133
133
 
134
134
  <footer>
135
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
135
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
136
136
  </footer>
137
137
 
138
138
  <script> prettyPrint(); </script>
@@ -223,13 +223,13 @@ the element will not render any text.</p></td>
223
223
  </div>
224
224
 
225
225
  <nav>
226
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
226
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
227
227
  </nav>
228
228
 
229
229
  <br class="clear">
230
230
 
231
231
  <footer>
232
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
232
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
233
233
  </footer>
234
234
 
235
235
  <script> prettyPrint(); </script>
@@ -51,10 +51,16 @@ class Message extends BaseCustomElement {
51
51
  "key",
52
52
  ]
53
53
 
54
+ /*
55
+ * Creates a new `&lt;brut-message>` element with the given attributes.
56
+ */
54
57
  static createElement(document,attributes) {
55
58
  const element = document.createElement(Message.tagName)
56
- element.setAttribute("key",attributes.key)
57
- element.setAttribute("show-warnings",attributes["show-warnings"])
59
+ Object.entries(attributes).forEach(([name,value]) => {
60
+ if (value !== null &amp;&amp; value !== undefined) {
61
+ element.setAttribute(name,value)
62
+ }
63
+ })
58
64
  return element
59
65
  }
60
66
 
@@ -77,7 +83,7 @@ class Message extends BaseCustomElement {
77
83
  return
78
84
  }
79
85
 
80
- this.textContent = RichString.fromString(translation.translation()).capitalize().toString()
86
+ this.textContent = RichString.fromString(translation.translation(), {allowBlank: true }).capitalize().toString()
81
87
  }
82
88
  }
83
89
 
@@ -92,13 +98,13 @@ export default Message
92
98
  </div>
93
99
 
94
100
  <nav>
95
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
101
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
96
102
  </nav>
97
103
 
98
104
  <br class="clear">
99
105
 
100
106
  <footer>
101
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
107
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
102
108
  </footer>
103
109
 
104
110
  <script> prettyPrint(); </script>
@@ -354,13 +354,13 @@ messages output.</p></td>
354
354
  </div>
355
355
 
356
356
  <nav>
357
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
357
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
358
358
  </nav>
359
359
 
360
360
  <br class="clear">
361
361
 
362
362
  <footer>
363
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
363
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
364
364
  </footer>
365
365
 
366
366
  <script> prettyPrint(); </script>
@@ -213,7 +213,7 @@ element.textContent = string.humanize().toString()</code></pre>
213
213
 
214
214
  <dt class="tag-source">Source:</dt>
215
215
  <dd class="tag-source"><ul class="dummy"><li>
216
- <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line45">line 45</a>
216
+ <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line48">line 48</a>
217
217
  </li></ul></dd>
218
218
 
219
219
 
@@ -301,7 +301,7 @@ element.textContent = string.humanize().toString()</code></pre>
301
301
 
302
302
  <dt class="tag-source">Source:</dt>
303
303
  <dd class="tag-source"><ul class="dummy"><li>
304
- <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line35">line 35</a>
304
+ <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line38">line 38</a>
305
305
  </li></ul></dd>
306
306
 
307
307
 
@@ -487,7 +487,7 @@ element.textContent = string.humanize().toString()</code></pre>
487
487
 
488
488
  <dt class="tag-source">Source:</dt>
489
489
  <dd class="tag-source"><ul class="dummy"><li>
490
- <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line65">line 65</a>
490
+ <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line68">line 68</a>
491
491
  </li></ul></dd>
492
492
 
493
493
 
@@ -575,7 +575,7 @@ element.textContent = string.humanize().toString()</code></pre>
575
575
 
576
576
  <dt class="tag-source">Source:</dt>
577
577
  <dd class="tag-source"><ul class="dummy"><li>
578
- <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line40">line 40</a>
578
+ <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line43">line 43</a>
579
579
  </li></ul></dd>
580
580
 
581
581
 
@@ -664,7 +664,7 @@ capitalized.</p>
664
664
 
665
665
  <dt class="tag-source">Source:</dt>
666
666
  <dd class="tag-source"><ul class="dummy"><li>
667
- <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line55">line 55</a>
667
+ <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line58">line 58</a>
668
668
  </li></ul></dd>
669
669
 
670
670
 
@@ -752,7 +752,7 @@ capitalized.</p>
752
752
 
753
753
  <dt class="tag-source">Source:</dt>
754
754
  <dd class="tag-source"><ul class="dummy"><li>
755
- <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line95">line 95</a>
755
+ <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line98">line 98</a>
756
756
  </li></ul></dd>
757
757
 
758
758
 
@@ -840,7 +840,7 @@ capitalized.</p>
840
840
 
841
841
  <dt class="tag-source">Source:</dt>
842
842
  <dd class="tag-source"><ul class="dummy"><li>
843
- <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line98">line 98</a>
843
+ <a href="RichString.js.html">RichString.js</a>, <a href="RichString.js.html#line101">line 101</a>
844
844
  </li></ul></dd>
845
845
 
846
846
 
@@ -1034,13 +1034,13 @@ as well as handle <code>null</code>.</p>
1034
1034
  </div>
1035
1035
 
1036
1036
  <nav>
1037
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
1037
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
1038
1038
  </nav>
1039
1039
 
1040
1040
  <br class="clear">
1041
1041
 
1042
1042
  <footer>
1043
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
1043
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
1044
1044
  </footer>
1045
1045
 
1046
1046
  <script> prettyPrint(); </script>
@@ -41,10 +41,13 @@ class RichString {
41
41
  *
42
42
  * @param {null|undefined|String|RichString} possiblyDefinedStringOrRichString - if `null`, `undefined`, or otherwise falsey, this method returns `null`. If a String, returns a new `RichString` wrapping it. If a `RichString`, returns the `RichString` unchanged.
43
43
  */
44
- static fromString(possiblyDefinedStringOrRichString) {
44
+ static fromString(possiblyDefinedStringOrRichString, {allowBlank=false} = {}) {
45
45
  if (possiblyDefinedStringOrRichString instanceof RichString) {
46
46
  return possiblyDefinedStringOrRichString
47
47
  }
48
+ if (allowBlank &amp;&amp; possiblyDefinedStringOrRichString === "") {
49
+ return new RichString("")
50
+ }
48
51
  if (!possiblyDefinedStringOrRichString) {
49
52
  return null
50
53
  }
@@ -149,13 +152,13 @@ export default RichString
149
152
  </div>
150
153
 
151
154
  <nav>
152
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
155
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
153
156
  </nav>
154
157
 
155
158
  <br class="clear">
156
159
 
157
160
  <footer>
158
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
161
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
159
162
  </footer>
160
163
 
161
164
  <script> prettyPrint(); </script>
@@ -280,13 +280,13 @@ style UI.</p></td>
280
280
  </div>
281
281
 
282
282
  <nav>
283
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
283
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
284
284
  </nav>
285
285
 
286
286
  <br class="clear">
287
287
 
288
288
  <footer>
289
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
289
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
290
290
  </footer>
291
291
 
292
292
  <script> prettyPrint(); </script>
@@ -204,13 +204,13 @@ export default Tabs
204
204
  </div>
205
205
 
206
206
  <nav>
207
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
207
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-testing.html">testing</a></li></ul><h3>Externals</h3><ul><li><a href="external-CustomElementRegistry.html">CustomElementRegistry</a></li><li><a href="external-Performance.html">Performance</a></li><li><a href="external-Promise.html">Promise</a></li><li><a href="external-ValidityState.html">ValidityState</a></li><li><a href="external-Window.html">Window</a></li><li><a href="external-fetch.html">fetch</a></li></ul><h3>Classes</h3><ul><li><a href="AjaxSubmit.html">AjaxSubmit</a></li><li><a href="Autosubmit.html">Autosubmit</a></li><li><a href="BaseCustomElement.html">BaseCustomElement</a></li><li><a href="BrutCustomElements.html">BrutCustomElements</a></li><li><a href="BufferedLogger.html">BufferedLogger</a></li><li><a href="ConfirmSubmit.html">ConfirmSubmit</a></li><li><a href="ConfirmationDialog.html">ConfirmationDialog</a></li><li><a href="ConstraintViolationMessage.html">ConstraintViolationMessage</a></li><li><a href="ConstraintViolationMessages.html">ConstraintViolationMessages</a></li><li><a href="CopyToClipboard.html">CopyToClipboard</a></li><li><a href="Form.html">Form</a></li><li><a href="I18nTranslation.html">I18nTranslation</a></li><li><a href="LocaleDetection.html">LocaleDetection</a></li><li><a href="Logger.html">Logger</a></li><li><a href="Message.html">Message</a></li><li><a href="PrefixedLogger.html">PrefixedLogger</a></li><li><a href="RichString.html">RichString</a></li><li><a href="Tabs.html">Tabs</a></li><li><a href="Toast.html">Toast</a></li><li><a href="Tracing.html">Tracing</a></li><li><a href="testing.AssetMetadata.html">AssetMetadata</a></li><li><a href="testing.AssetMetadataLoader.html">AssetMetadataLoader</a></li><li><a href="testing.CustomElementTest.html">CustomElementTest</a></li><li><a href="testing.DOMCreator.html">DOMCreator</a></li></ul><h3><a href="global.html">Global</a></h3>
208
208
  </nav>
209
209
 
210
210
  <br class="clear">
211
211
 
212
212
  <footer>
213
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Mon Sep 08 2025 22:18:07 GMT+0000 (Coordinated Universal Time)
213
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Tue Sep 16 2025 13:24:01 GMT+0000 (Coordinated Universal Time)
214
214
  </footer>
215
215
 
216
216
  <script> prettyPrint(); </script>