brut 0.10.0 → 0.12.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 (403) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/Gemfile.lock +21 -21
  4. data/assets/YouTubeThumb.pxd +0 -0
  5. data/bin/new-version +3 -3
  6. data/brut-css/package-lock.json +94 -97
  7. data/brut-css/package.json +2 -2
  8. data/brut-js/package-lock.json +3 -3
  9. data/brut-js/package.json +6 -3
  10. data/brut-js/specs/AjaxSubmit.spec.js +62 -6
  11. data/brut-js/src/AjaxSubmit.js +26 -6
  12. data/brutrb.com/forms.md +1 -0
  13. data/brutrb.com/getting-started.md +3 -0
  14. data/brutrb.com/images/tutorial/02-confirmation-dialog-browser-element-styled.png +0 -0
  15. data/brutrb.com/images/tutorial/02-confirmation-dialog-browser-element.png +0 -0
  16. data/brutrb.com/images/tutorial/02-confirmation-dialog-browser.png +0 -0
  17. data/brutrb.com/images/tutorial/02-confirmation-flow.graffle +0 -0
  18. data/brutrb.com/images/tutorial/02-confirmation-flow.png +0 -0
  19. data/brutrb.com/instrumentation.md +142 -3
  20. data/brutrb.com/recipes/authentication.md +1 -0
  21. data/brutrb.com/tutorial.md +29 -1627
  22. data/brutrb.com/tutorials/01-intro.md +1654 -0
  23. data/brutrb.com/tutorials/02-dialog.md +569 -0
  24. data/docs/404.html +2 -2
  25. data/docs/adrs.html +4 -4
  26. data/docs/ai.html +4 -4
  27. data/docs/api/Brut/BackEnd/SeedData.html +1 -1
  28. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
  29. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
  30. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
  31. data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
  32. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
  33. data/docs/api/Brut/BackEnd/Validators.html +1 -1
  34. data/docs/api/Brut/BackEnd.html +1 -1
  35. data/docs/api/Brut/CLI/App.html +1 -1
  36. data/docs/api/Brut/CLI/AppRunner.html +1 -1
  37. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
  38. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
  39. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
  40. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
  41. data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
  42. data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
  43. data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
  44. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
  45. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
  46. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
  47. data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
  48. data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
  49. data/docs/api/Brut/CLI/Apps/DB.html +1 -1
  50. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
  51. data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
  52. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
  53. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
  54. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
  55. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
  56. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
  57. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
  58. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +1 -1
  59. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
  60. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
  61. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
  62. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
  63. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
  64. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
  65. data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
  66. data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
  67. data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
  68. data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
  69. data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
  70. data/docs/api/Brut/CLI/Apps/Test.html +1 -1
  71. data/docs/api/Brut/CLI/Apps.html +1 -1
  72. data/docs/api/Brut/CLI/Command.html +1 -1
  73. data/docs/api/Brut/CLI/Error.html +1 -1
  74. data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
  75. data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
  76. data/docs/api/Brut/CLI/Executor.html +1 -1
  77. data/docs/api/Brut/CLI/InvalidOption.html +1 -1
  78. data/docs/api/Brut/CLI/Options.html +1 -1
  79. data/docs/api/Brut/CLI/Output.html +1 -1
  80. data/docs/api/Brut/CLI/SystemExecError.html +1 -1
  81. data/docs/api/Brut/CLI.html +1 -1
  82. data/docs/api/Brut/FactoryBot.html +1 -1
  83. data/docs/api/Brut/Framework/App.html +1 -1
  84. data/docs/api/Brut/Framework/Config.html +1 -1
  85. data/docs/api/Brut/Framework/Container.html +1 -1
  86. data/docs/api/Brut/Framework/Error.html +1 -1
  87. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
  88. data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
  89. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
  90. data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
  91. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
  92. data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
  93. data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
  94. data/docs/api/Brut/Framework/Errors.html +1 -1
  95. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +2 -2
  96. data/docs/api/Brut/Framework/MCP.html +1 -1
  97. data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
  98. data/docs/api/Brut/Framework.html +1 -1
  99. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
  100. data/docs/api/Brut/FrontEnd/Component/Helpers.html +1 -1
  101. data/docs/api/Brut/FrontEnd/Component.html +1 -1
  102. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +48 -27
  103. data/docs/api/Brut/FrontEnd/Components/FormTag.html +1 -1
  104. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
  105. data/docs/api/Brut/FrontEnd/Components/Input.html +2 -2
  106. data/docs/api/Brut/FrontEnd/Components/Inputs/ButtonTag.html +443 -0
  107. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
  108. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +14 -9
  109. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +1 -1
  110. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +8 -9
  111. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +10 -11
  112. data/docs/api/Brut/FrontEnd/Components/Inputs.html +2 -2
  113. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
  114. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +1 -1
  115. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
  116. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
  117. data/docs/api/Brut/FrontEnd/Components.html +1 -1
  118. data/docs/api/Brut/FrontEnd/CsrfProtector.html +1 -1
  119. data/docs/api/Brut/FrontEnd/Download.html +1 -1
  120. data/docs/api/Brut/FrontEnd/Flash.html +1 -1
  121. data/docs/api/Brut/FrontEnd/Form.html +39 -39
  122. data/docs/api/Brut/FrontEnd/Forms/Button.html +331 -0
  123. data/docs/api/Brut/FrontEnd/Forms/ButtonInputDefinition.html +544 -0
  124. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
  125. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
  126. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
  127. data/docs/api/Brut/FrontEnd/Forms/Input.html +6 -2
  128. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +111 -23
  129. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +20 -12
  130. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
  131. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
  132. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
  133. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
  134. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
  135. data/docs/api/Brut/FrontEnd/Forms.html +2 -2
  136. data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
  137. data/docs/api/Brut/FrontEnd/Handler.html +1 -1
  138. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
  139. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
  140. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
  141. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
  142. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +2 -2
  143. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
  144. data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
  145. data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
  146. data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
  147. data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
  148. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
  149. data/docs/api/Brut/FrontEnd/Layout.html +1 -1
  150. data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
  151. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
  152. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
  153. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
  154. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
  155. data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
  156. data/docs/api/Brut/FrontEnd/Page.html +1 -1
  157. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
  158. data/docs/api/Brut/FrontEnd/Pages.html +1 -1
  159. data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
  160. data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
  161. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
  162. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
  163. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
  164. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
  165. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
  166. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
  167. data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
  168. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
  169. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
  170. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
  171. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
  172. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
  173. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
  174. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
  175. data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
  176. data/docs/api/Brut/FrontEnd/Routing.html +1 -1
  177. data/docs/api/Brut/FrontEnd/Session.html +1 -1
  178. data/docs/api/Brut/FrontEnd.html +1 -1
  179. data/docs/api/Brut/I18n/BaseMethods.html +1 -1
  180. data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
  181. data/docs/api/Brut/I18n/ForCLI.html +1 -1
  182. data/docs/api/Brut/I18n/ForHTML.html +1 -1
  183. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
  184. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
  185. data/docs/api/Brut/I18n.html +1 -1
  186. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
  187. data/docs/api/Brut/Instrumentation/Methods/ClassMethods.html +596 -0
  188. data/docs/api/Brut/Instrumentation/Methods.html +173 -0
  189. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +7 -7
  190. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +7 -7
  191. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +19 -17
  192. data/docs/api/Brut/Instrumentation.html +3 -1
  193. data/docs/api/Brut/RubocopConfig.html +1 -1
  194. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +1 -1
  195. data/docs/api/Brut/SinatraHelpers.html +1 -1
  196. data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
  197. data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
  198. data/docs/api/Brut/SpecSupport/E2ETestServer.html +1 -1
  199. data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
  200. data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
  201. data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
  202. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
  203. data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
  204. data/docs/api/Brut/SpecSupport/HandlerSupport.html +1 -1
  205. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +1 -1
  206. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +1 -1
  207. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +1 -1
  208. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +1 -1
  209. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +1 -1
  210. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +1 -1
  211. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +1 -1
  212. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +1 -1
  213. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +1 -1
  214. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +1 -1
  215. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +1 -1
  216. data/docs/api/Brut/SpecSupport/Matchers.html +1 -1
  217. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +1 -1
  218. data/docs/api/Brut/SpecSupport/RSpecSetup.html +1 -1
  219. data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
  220. data/docs/api/Brut/SpecSupport.html +1 -1
  221. data/docs/api/Brut.html +1 -1
  222. data/docs/api/Clock.html +1 -1
  223. data/docs/api/ModuleName.html +1 -1
  224. data/docs/api/RichString.html +1 -1
  225. data/docs/api/SemanticLogger/Appender/Async.html +1 -1
  226. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +1 -1
  227. data/docs/api/Sequel/Extensions/BrutMigrations.html +1 -1
  228. data/docs/api/Sequel/Extensions.html +1 -1
  229. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
  230. data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
  231. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
  232. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
  233. data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
  234. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
  235. data/docs/api/Sequel/Plugins/FindBang.html +1 -1
  236. data/docs/api/Sequel/Plugins.html +1 -1
  237. data/docs/api/Sequel.html +1 -1
  238. data/docs/api/_index.html +36 -1
  239. data/docs/api/class_list.html +1 -1
  240. data/docs/api/file.README.html +1 -1
  241. data/docs/api/index.html +1 -1
  242. data/docs/api/method_list.html +364 -252
  243. data/docs/api/top-level-namespace.html +1 -1
  244. data/docs/assets/02-confirmation-dialog-browser-element-styled.3NEGM20-.png +0 -0
  245. data/docs/assets/02-confirmation-dialog-browser-element.DPsf0xUW.png +0 -0
  246. data/docs/assets/02-confirmation-dialog-browser.DH8ALFO4.png +0 -0
  247. data/docs/assets/02-confirmation-flow.D9gZ0S5U.png +0 -0
  248. data/docs/assets/{app.vjGWMSnJ.js → app.V2GOcOrg.js} +1 -1
  249. data/docs/assets/chunks/@localSearchIndexroot.3Lsq4QTb.js +1 -0
  250. data/docs/assets/chunks/{VPLocalSearchBox.C-ymMW2k.js → VPLocalSearchBox.CZTadcAy.js} +1 -1
  251. data/docs/assets/chunks/{theme.pJUosGlI.js → theme.FeuYNxyp.js} +2 -2
  252. data/docs/assets/{components.md.B543a3Lm.js → components.md.f4cdTyvV.js} +3 -3
  253. data/docs/assets/{configuration.md.-foE_iVv.js → configuration.md.Bs4-rxnS.js} +1 -1
  254. data/docs/assets/{form-constraints.md.DK5adCgM.js → form-constraints.md.KTv5cdR4.js} +6 -6
  255. data/docs/assets/{forms.md.D5-2rgHh.js → forms.md.Sys-XxVf.js} +3 -3
  256. data/docs/assets/{forms.md.D5-2rgHh.lean.js → forms.md.Sys-XxVf.lean.js} +1 -1
  257. data/docs/assets/{getting-started.md.Cd4XSZb_.js → getting-started.md.CFIW0bcE.js} +6 -3
  258. data/docs/assets/{getting-started.md.Cd4XSZb_.lean.js → getting-started.md.CFIW0bcE.lean.js} +1 -1
  259. data/docs/assets/instrumentation.md._lNSriEZ.js +90 -0
  260. data/docs/assets/instrumentation.md._lNSriEZ.lean.js +1 -0
  261. data/docs/assets/{recipes_authentication.md.Dzvi_g69.js → recipes_authentication.md.BAISoxmN.js} +1 -0
  262. data/docs/assets/recipes_form-errors.md.Bv5RCKqH.js +66 -0
  263. data/docs/assets/recipes_form-errors.md.Bv5RCKqH.lean.js +1 -0
  264. data/docs/assets/tutorial.md.BM40jnoq.js +27 -0
  265. data/docs/assets/tutorial.md.BM40jnoq.lean.js +1 -0
  266. data/docs/assets/{tutorial.md.C4zR5XPG.js → tutorials_01-intro.md.B4sUBY3X.js} +13 -33
  267. data/docs/assets/tutorials_01-intro.md.B4sUBY3X.lean.js +1 -0
  268. data/docs/assets/tutorials_02-dialog.md.QTFeHdiA.js +274 -0
  269. data/docs/assets/tutorials_02-dialog.md.QTFeHdiA.lean.js +1 -0
  270. data/docs/assets.html +4 -4
  271. data/docs/brut-js/api/AjaxSubmit.html +16 -6
  272. data/docs/brut-js/api/AjaxSubmit.js.html +27 -7
  273. data/docs/brut-js/api/Autosubmit.html +1 -1
  274. data/docs/brut-js/api/Autosubmit.js.html +1 -1
  275. data/docs/brut-js/api/BaseCustomElement.html +1 -1
  276. data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
  277. data/docs/brut-js/api/BrutCustomElements.html +1 -1
  278. data/docs/brut-js/api/BufferedLogger.html +1 -1
  279. data/docs/brut-js/api/ConfirmSubmit.html +1 -1
  280. data/docs/brut-js/api/ConfirmSubmit.js.html +1 -1
  281. data/docs/brut-js/api/ConfirmationDialog.html +1 -1
  282. data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
  283. data/docs/brut-js/api/ConstraintViolationMessage.html +55 -5
  284. data/docs/brut-js/api/ConstraintViolationMessage.js.html +18 -3
  285. data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
  286. data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
  287. data/docs/brut-js/api/CopyToClipboard.html +1 -1
  288. data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
  289. data/docs/brut-js/api/Form.html +7 -10
  290. data/docs/brut-js/api/Form.js.html +20 -24
  291. data/docs/brut-js/api/I18nTranslation.html +1 -1
  292. data/docs/brut-js/api/I18nTranslation.js.html +1 -1
  293. data/docs/brut-js/api/LocaleDetection.html +1 -1
  294. data/docs/brut-js/api/LocaleDetection.js.html +1 -1
  295. data/docs/brut-js/api/Logger.html +1 -1
  296. data/docs/brut-js/api/Logger.js.html +1 -1
  297. data/docs/brut-js/api/Message.html +1 -1
  298. data/docs/brut-js/api/Message.js.html +1 -1
  299. data/docs/brut-js/api/PrefixedLogger.html +1 -1
  300. data/docs/brut-js/api/RichString.html +1 -1
  301. data/docs/brut-js/api/RichString.js.html +1 -1
  302. data/docs/brut-js/api/Tabs.html +1 -1
  303. data/docs/brut-js/api/Tabs.js.html +1 -1
  304. data/docs/brut-js/api/Tracing.html +1 -1
  305. data/docs/brut-js/api/Tracing.js.html +1 -1
  306. data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
  307. data/docs/brut-js/api/external-Performance.html +1 -1
  308. data/docs/brut-js/api/external-Promise.html +1 -1
  309. data/docs/brut-js/api/external-ValidityState.html +1 -1
  310. data/docs/brut-js/api/external-Window.html +1 -1
  311. data/docs/brut-js/api/external-fetch.html +1 -1
  312. data/docs/brut-js/api/global.html +1 -1
  313. data/docs/brut-js/api/index.html +1 -1
  314. data/docs/brut-js/api/index.js.html +1 -1
  315. data/docs/brut-js/api/module-testing.html +1 -1
  316. data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
  317. data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
  318. data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
  319. data/docs/brut-js/api/testing.DOMCreator.html +1 -1
  320. data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
  321. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
  322. data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
  323. data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
  324. data/docs/brut-js/api/testing_index.js.html +1 -1
  325. data/docs/brut-js.html +4 -4
  326. data/docs/business-logic.html +4 -4
  327. data/docs/cli.html +4 -4
  328. data/docs/components.html +8 -8
  329. data/docs/configuration.html +5 -5
  330. data/docs/css.html +4 -4
  331. data/docs/custom-element-tests.html +4 -4
  332. data/docs/database-access.html +4 -4
  333. data/docs/database-schema.html +4 -4
  334. data/docs/deployment.html +4 -4
  335. data/docs/dev-environment.html +4 -4
  336. data/docs/dir-structure.html +4 -4
  337. data/docs/doc-conventions.html +4 -4
  338. data/docs/end-to-end-tests.html +4 -4
  339. data/docs/features.html +4 -4
  340. data/docs/flash-and-session.html +4 -4
  341. data/docs/form-constraints.html +11 -11
  342. data/docs/forms.html +7 -7
  343. data/docs/getting-started.html +10 -7
  344. data/docs/handlers.html +4 -4
  345. data/docs/hashmap.json +1 -1
  346. data/docs/hooks.html +4 -4
  347. data/docs/i18n.html +4 -4
  348. data/docs/index.html +3 -3
  349. data/docs/instrumentation.html +61 -6
  350. data/docs/javascript.html +4 -4
  351. data/docs/jobs.html +4 -4
  352. data/docs/keyword-injection.html +4 -4
  353. data/docs/layouts.html +4 -4
  354. data/docs/lsp.html +4 -4
  355. data/docs/markdown-examples.html +4 -4
  356. data/docs/middleware.html +4 -4
  357. data/docs/overview.html +4 -4
  358. data/docs/pages.html +4 -4
  359. data/docs/recipes/alternate-layouts.html +4 -4
  360. data/docs/recipes/authentication.html +7 -6
  361. data/docs/recipes/blank-layouts.html +4 -4
  362. data/docs/recipes/custom-flash.html +4 -4
  363. data/docs/recipes/form-errors.html +94 -0
  364. data/docs/recipes/indexed-forms.html +4 -4
  365. data/docs/recipes/migrations.html +5 -5
  366. data/docs/recipes/text-field-component.html +4 -4
  367. data/docs/roadmap.html +4 -4
  368. data/docs/routes.html +4 -4
  369. data/docs/security.html +4 -4
  370. data/docs/seed-data.html +4 -4
  371. data/docs/space-time-continuum.html +4 -4
  372. data/docs/tutorial.html +12 -713
  373. data/docs/tutorials/01-intro.html +736 -0
  374. data/docs/tutorials/02-dialog.html +302 -0
  375. data/docs/unit-tests.html +4 -4
  376. data/docs/why.html +4 -4
  377. data/lib/brut/front_end/components/input.rb +1 -0
  378. data/lib/brut/front_end/components/inputs/button_tag.rb +40 -0
  379. data/lib/brut/front_end/components/inputs/input_tag.rb +3 -1
  380. data/lib/brut/front_end/components/inputs/select_tag_with_options.rb +0 -1
  381. data/lib/brut/front_end/components/inputs/textarea_tag.rb +0 -1
  382. data/lib/brut/front_end/form.rb +7 -5
  383. data/lib/brut/front_end/forms/button.rb +21 -0
  384. data/lib/brut/front_end/forms/button_input_definition.rb +37 -0
  385. data/lib/brut/front_end/forms/input_declarations.rb +10 -0
  386. data/lib/brut/front_end/forms/input_definition.rb +7 -2
  387. data/lib/brut/instrumentation/methods.rb +153 -0
  388. data/lib/brut/instrumentation/open_telemetry.rb +1 -0
  389. data/lib/brut/instrumentation.rb +1 -0
  390. data/lib/brut/version.rb +1 -1
  391. data/mkbrut/Gemfile.lock +1 -1
  392. data/mkbrut/bin/publish +1 -1
  393. data/mkbrut/lib/mkbrut/version.rb +1 -1
  394. data/specs/brut/instrumentation/methods.spec.rb +399 -0
  395. metadata +51 -21
  396. data/docs/assets/chunks/@localSearchIndexroot.Dn1xGMv_.js +0 -1
  397. data/docs/assets/instrumentation.md.BgcaGVYH.js +0 -35
  398. data/docs/assets/instrumentation.md.BgcaGVYH.lean.js +0 -1
  399. data/docs/assets/tutorial.md.C4zR5XPG.lean.js +0 -1
  400. /data/docs/assets/{components.md.B543a3Lm.lean.js → components.md.f4cdTyvV.lean.js} +0 -0
  401. /data/docs/assets/{configuration.md.-foE_iVv.lean.js → configuration.md.Bs4-rxnS.lean.js} +0 -0
  402. /data/docs/assets/{form-constraints.md.DK5adCgM.lean.js → form-constraints.md.KTv5cdR4.lean.js} +0 -0
  403. /data/docs/assets/{recipes_authentication.md.Dzvi_g69.lean.js → recipes_authentication.md.BAISoxmN.lean.js} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb034356c94bcb184b5ded4c4d6d07d46d85e28371cbe7fd17ea999c78e1932e
4
- data.tar.gz: 90339e125f3b8b9bde9bda634f4934d0c0a09955141cda41969c9347b7b86877
3
+ metadata.gz: a12417228951df4c5e9b56bb9235b64fe2e2659168961308f1ebcfc05c6e2b5c
4
+ data.tar.gz: 64617e821125f23c1efd56ff54a74f2581311713ddc199b5df77d162283a1cc8
5
5
  SHA512:
6
- metadata.gz: 1ad76fb17f0247373ded5eb4df807eab9f32db39633082afb647b6b268d6d74f1529b433f3a3a06c5cd101e79d841f3533bef589940de3d629af3c7c400096d0
7
- data.tar.gz: 50acf68486d2bbcb6600fb2cf0e21f62ec879ba1a3f0767557d29f9e2260229cc4bdad4b869d800cfdc7101723eca7afb4498577f44b22095a24526ec9526a45
6
+ metadata.gz: 4fdc2cf3f3a352809224d6f78ec0ce81e6497990056b935c0d7aa4f04eee96511b0be66106ee015faf27dfe4938b1e539a90faaf1e86780b27d6b7b506c0a22a
7
+ data.tar.gz: 32e17fc4ac2c94fbae6facc71cea5897db64a46f262aa9352ef4fffb4e09b142d4a18bd651d78826224101e33b807cd841fa6503ee50f5fccdbbf2e5410e56b2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Brut CHANGELOG
2
2
 
3
+ ## v0.12.0 - Sep 5, 2025
4
+
5
+ * Added explicit support for buttons in forms, so that button name/values are submitted with the form and managed like any other form element.
6
+ * `<brut-ajax-submit>` now works with `<input type="submit">`
7
+ * Added notes to to the Blog Tutorial that you must re-run `bin/setup` if you've stopped your dev environment
8
+
9
+ ## v0.11.0 - Aug 27, 2025
10
+
11
+ * Added `Brut::Instrumentation::Methods` to allow instrumenting existing methods via `instrument`:
12
+ ```ruby
13
+ class Widget
14
+ include Brut::Instrumentation::Methods
15
+
16
+ instrument def save
17
+ end
18
+ end
19
+ ```
20
+ See docs for more options and details.
21
+ * When an exception is caught in a span, the span's status is set to an error.
22
+
3
23
  ## v0.10.0 - Aug 15, 2025
4
24
 
5
25
  * Changed `ConstraintViolations` HTML to indicate if a `<brut-cv>` is server-generated, even if it's generating client-side constraint. See #56.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- brut (0.10.0)
4
+ brut (0.12.0)
5
5
  concurrent-ruby
6
6
  i18n
7
7
  irb
@@ -23,7 +23,7 @@ PATH
23
23
  GEM
24
24
  remote: https://rubygems.org/
25
25
  specs:
26
- activesupport (8.0.2)
26
+ activesupport (8.0.2.1)
27
27
  base64
28
28
  benchmark (>= 0.3)
29
29
  bigdecimal
@@ -39,38 +39,38 @@ GEM
39
39
  ast (2.4.3)
40
40
  base64 (0.3.0)
41
41
  benchmark (0.4.1)
42
- bigdecimal (3.2.2)
42
+ bigdecimal (3.2.3)
43
43
  concurrent-ruby (1.3.5)
44
- connection_pool (2.5.3)
44
+ connection_pool (2.5.4)
45
45
  date (3.4.1)
46
46
  diff-lcs (1.6.2)
47
47
  dotenv (3.1.8)
48
48
  drb (2.2.3)
49
49
  erb (5.0.2)
50
- factory_bot (6.5.4)
50
+ factory_bot (6.5.5)
51
51
  activesupport (>= 6.1.0)
52
52
  faker (3.5.2)
53
53
  i18n (>= 1.8.11, < 2)
54
- google-protobuf (4.31.1)
54
+ google-protobuf (4.32.0)
55
55
  bigdecimal
56
56
  rake (>= 13)
57
- google-protobuf (4.31.1-aarch64-linux-gnu)
57
+ google-protobuf (4.32.0-aarch64-linux-gnu)
58
58
  bigdecimal
59
59
  rake (>= 13)
60
- google-protobuf (4.31.1-arm64-darwin)
60
+ google-protobuf (4.32.0-arm64-darwin)
61
61
  bigdecimal
62
62
  rake (>= 13)
63
- google-protobuf (4.31.1-x86-linux-gnu)
63
+ google-protobuf (4.32.0-x86-linux-gnu)
64
64
  bigdecimal
65
65
  rake (>= 13)
66
- google-protobuf (4.31.1-x86_64-darwin)
66
+ google-protobuf (4.32.0-x86_64-darwin)
67
67
  bigdecimal
68
68
  rake (>= 13)
69
- google-protobuf (4.31.1-x86_64-linux-gnu)
69
+ google-protobuf (4.32.0-x86_64-linux-gnu)
70
70
  bigdecimal
71
71
  rake (>= 13)
72
- googleapis-common-protos-types (1.20.0)
73
- google-protobuf (>= 3.18, < 5.a)
72
+ googleapis-common-protos-types (1.21.0)
73
+ google-protobuf (~> 4.26)
74
74
  i18n (1.14.7)
75
75
  concurrent-ruby (~> 1.0)
76
76
  io-console (0.8.1)
@@ -99,7 +99,7 @@ GEM
99
99
  racc (~> 1.4)
100
100
  nokogiri (1.18.9-x86_64-linux-gnu)
101
101
  racc (~> 1.4)
102
- opentelemetry-api (1.5.0)
102
+ opentelemetry-api (1.6.0)
103
103
  opentelemetry-common (0.22.0)
104
104
  opentelemetry-api (~> 1.0)
105
105
  opentelemetry-exporter-otlp (0.30.0)
@@ -111,7 +111,7 @@ GEM
111
111
  opentelemetry-semantic_conventions
112
112
  opentelemetry-registry (0.4.0)
113
113
  opentelemetry-api (~> 1.1)
114
- opentelemetry-sdk (1.8.0)
114
+ opentelemetry-sdk (1.8.1)
115
115
  opentelemetry-api (~> 1.1)
116
116
  opentelemetry-common (~> 0.20)
117
117
  opentelemetry-registry (~> 0.2)
@@ -133,7 +133,7 @@ GEM
133
133
  date
134
134
  stringio
135
135
  racc (1.8.1)
136
- rack (3.2.0)
136
+ rack (3.2.1)
137
137
  rack-protection (4.1.1)
138
138
  base64 (>= 0.1.0)
139
139
  logger (>= 1.6.0)
@@ -149,7 +149,7 @@ GEM
149
149
  rdoc (6.14.2)
150
150
  erb
151
151
  psych (>= 4.0.0)
152
- regexp_parser (2.11.1)
152
+ regexp_parser (2.11.2)
153
153
  reline (0.6.2)
154
154
  io-console (~> 0.5)
155
155
  rspec (3.13.1)
@@ -164,8 +164,8 @@ GEM
164
164
  rspec-mocks (3.13.5)
165
165
  diff-lcs (>= 1.2.0, < 2.0)
166
166
  rspec-support (~> 3.13.0)
167
- rspec-support (3.13.4)
168
- rubocop (1.79.2)
167
+ rspec-support (3.13.5)
168
+ rubocop (1.80.2)
169
169
  json (~> 2.3)
170
170
  language_server-protocol (~> 3.17.0.2)
171
171
  lint_roller (~> 1.1.0)
@@ -187,7 +187,7 @@ GEM
187
187
  securerandom (0.4.1)
188
188
  semantic_logger (4.17.0)
189
189
  concurrent-ruby (~> 1.0)
190
- sequel (5.95.1)
190
+ sequel (5.96.0)
191
191
  bigdecimal
192
192
  sinatra (4.1.1)
193
193
  logger (>= 1.6.0)
@@ -202,7 +202,7 @@ GEM
202
202
  concurrent-ruby (~> 1.0)
203
203
  tzinfo-data (1.2025.2)
204
204
  tzinfo (>= 1.0.0)
205
- unicode-display_width (3.1.4)
205
+ unicode-display_width (3.1.5)
206
206
  unicode-emoji (~> 4.0, >= 4.0.4)
207
207
  unicode-emoji (4.0.4)
208
208
  uri (1.0.3)
Binary file
data/bin/new-version CHANGED
@@ -1,8 +1,8 @@
1
1
  set -e
2
2
 
3
+ VIM=nvim
3
4
  if [ -f /.dockerenv ]; then
4
- echo "Do not run this inside Docker"
5
- exit 1
5
+ VIM=vim
6
6
  fi
7
7
 
8
- nvim -o lib/brut/version.rb mkbrut/lib/mkbrut/version.rb brut-js/package.json brut-css/package.json CHANGELOG.md
8
+ $VIM -o lib/brut/version.rb mkbrut/lib/mkbrut/version.rb brut-js/package.json brut-css/package.json CHANGELOG.md
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "brut-css",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "brut-css",
9
- "version": "0.10.0",
9
+ "version": "0.12.0",
10
10
  "license": "Hippocratic-2.1",
11
11
  "devDependencies": {
12
12
  "comment-parser": "^1.4.1",
13
- "cssnano": "^7.0.7",
13
+ "cssnano": "^7.1.1",
14
14
  "ejs": "^3.1.10",
15
15
  "http-server": "^14.1.1",
16
16
  "js-beautify": "^1.15.4",
@@ -58,16 +58,6 @@
58
58
  "node": ">=14"
59
59
  }
60
60
  },
61
- "node_modules/@trysound/sax": {
62
- "version": "0.2.0",
63
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
64
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
65
- "dev": true,
66
- "license": "ISC",
67
- "engines": {
68
- "node": ">=10.13.0"
69
- }
70
- },
71
61
  "node_modules/abbrev": {
72
62
  "version": "2.0.0",
73
63
  "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
@@ -200,9 +190,9 @@
200
190
  }
201
191
  },
202
192
  "node_modules/browserslist": {
203
- "version": "4.25.1",
204
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
205
- "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
193
+ "version": "4.25.4",
194
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz",
195
+ "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==",
206
196
  "dev": true,
207
197
  "funding": [
208
198
  {
@@ -220,8 +210,8 @@
220
210
  ],
221
211
  "license": "MIT",
222
212
  "dependencies": {
223
- "caniuse-lite": "^1.0.30001726",
224
- "electron-to-chromium": "^1.5.173",
213
+ "caniuse-lite": "^1.0.30001737",
214
+ "electron-to-chromium": "^1.5.211",
225
215
  "node-releases": "^2.0.19",
226
216
  "update-browserslist-db": "^1.1.3"
227
217
  },
@@ -277,9 +267,9 @@
277
267
  }
278
268
  },
279
269
  "node_modules/caniuse-lite": {
280
- "version": "1.0.30001726",
281
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz",
282
- "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==",
270
+ "version": "1.0.30001741",
271
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz",
272
+ "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==",
283
273
  "dev": true,
284
274
  "funding": [
285
275
  {
@@ -521,9 +511,9 @@
521
511
  }
522
512
  },
523
513
  "node_modules/css-select": {
524
- "version": "5.1.0",
525
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
526
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
514
+ "version": "5.2.2",
515
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
516
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
527
517
  "dev": true,
528
518
  "license": "BSD-2-Clause",
529
519
  "dependencies": {
@@ -538,13 +528,13 @@
538
528
  }
539
529
  },
540
530
  "node_modules/css-tree": {
541
- "version": "2.3.1",
542
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
543
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
531
+ "version": "3.1.0",
532
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
533
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
544
534
  "dev": true,
545
535
  "license": "MIT",
546
536
  "dependencies": {
547
- "mdn-data": "2.0.30",
537
+ "mdn-data": "2.12.2",
548
538
  "source-map-js": "^1.0.1"
549
539
  },
550
540
  "engines": {
@@ -552,9 +542,9 @@
552
542
  }
553
543
  },
554
544
  "node_modules/css-what": {
555
- "version": "6.1.0",
556
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
557
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
545
+ "version": "6.2.2",
546
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
547
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
558
548
  "dev": true,
559
549
  "license": "BSD-2-Clause",
560
550
  "engines": {
@@ -578,13 +568,13 @@
578
568
  }
579
569
  },
580
570
  "node_modules/cssnano": {
581
- "version": "7.0.7",
582
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.7.tgz",
583
- "integrity": "sha512-evKu7yiDIF7oS+EIpwFlMF730ijRyLFaM2o5cTxRGJR9OKHKkc+qP443ZEVR9kZG0syaAJJCPJyfv5pbrxlSng==",
571
+ "version": "7.1.1",
572
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.1.tgz",
573
+ "integrity": "sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==",
584
574
  "dev": true,
585
575
  "license": "MIT",
586
576
  "dependencies": {
587
- "cssnano-preset-default": "^7.0.7",
577
+ "cssnano-preset-default": "^7.0.9",
588
578
  "lilconfig": "^3.1.3"
589
579
  },
590
580
  "engines": {
@@ -599,27 +589,27 @@
599
589
  }
600
590
  },
601
591
  "node_modules/cssnano-preset-default": {
602
- "version": "7.0.7",
603
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.7.tgz",
604
- "integrity": "sha512-jW6CG/7PNB6MufOrlovs1TvBTEVmhY45yz+bd0h6nw3h6d+1e+/TX+0fflZ+LzvZombbT5f+KC063w9VoHeHow==",
592
+ "version": "7.0.9",
593
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.9.tgz",
594
+ "integrity": "sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==",
605
595
  "dev": true,
606
596
  "license": "MIT",
607
597
  "dependencies": {
608
- "browserslist": "^4.24.5",
598
+ "browserslist": "^4.25.1",
609
599
  "css-declaration-sorter": "^7.2.0",
610
600
  "cssnano-utils": "^5.0.1",
611
601
  "postcss-calc": "^10.1.1",
612
- "postcss-colormin": "^7.0.3",
613
- "postcss-convert-values": "^7.0.5",
602
+ "postcss-colormin": "^7.0.4",
603
+ "postcss-convert-values": "^7.0.7",
614
604
  "postcss-discard-comments": "^7.0.4",
615
605
  "postcss-discard-duplicates": "^7.0.2",
616
606
  "postcss-discard-empty": "^7.0.1",
617
607
  "postcss-discard-overridden": "^7.0.1",
618
608
  "postcss-merge-longhand": "^7.0.5",
619
- "postcss-merge-rules": "^7.0.5",
609
+ "postcss-merge-rules": "^7.0.6",
620
610
  "postcss-minify-font-values": "^7.0.1",
621
611
  "postcss-minify-gradients": "^7.0.1",
622
- "postcss-minify-params": "^7.0.3",
612
+ "postcss-minify-params": "^7.0.4",
623
613
  "postcss-minify-selectors": "^7.0.5",
624
614
  "postcss-normalize-charset": "^7.0.1",
625
615
  "postcss-normalize-display-values": "^7.0.1",
@@ -627,13 +617,13 @@
627
617
  "postcss-normalize-repeat-style": "^7.0.1",
628
618
  "postcss-normalize-string": "^7.0.1",
629
619
  "postcss-normalize-timing-functions": "^7.0.1",
630
- "postcss-normalize-unicode": "^7.0.3",
620
+ "postcss-normalize-unicode": "^7.0.4",
631
621
  "postcss-normalize-url": "^7.0.1",
632
622
  "postcss-normalize-whitespace": "^7.0.1",
633
623
  "postcss-ordered-values": "^7.0.2",
634
- "postcss-reduce-initial": "^7.0.3",
624
+ "postcss-reduce-initial": "^7.0.4",
635
625
  "postcss-reduce-transforms": "^7.0.1",
636
- "postcss-svgo": "^7.0.2",
626
+ "postcss-svgo": "^7.1.0",
637
627
  "postcss-unique-selectors": "^7.0.4"
638
628
  },
639
629
  "engines": {
@@ -863,9 +853,9 @@
863
853
  }
864
854
  },
865
855
  "node_modules/electron-to-chromium": {
866
- "version": "1.5.174",
867
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.174.tgz",
868
- "integrity": "sha512-HE43yYdUUiJVjewV2A9EP8o89Kb4AqMKplMQP2IxEPUws1Etu/ZkdsgUDabUZ/WmbP4ZbvJDOcunvbBUPPIfmw==",
856
+ "version": "1.5.214",
857
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.214.tgz",
858
+ "integrity": "sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==",
869
859
  "dev": true,
870
860
  "license": "ISC"
871
861
  },
@@ -1546,9 +1536,9 @@
1546
1536
  }
1547
1537
  },
1548
1538
  "node_modules/mdn-data": {
1549
- "version": "2.0.30",
1550
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
1551
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
1539
+ "version": "2.12.2",
1540
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
1541
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
1552
1542
  "dev": true,
1553
1543
  "license": "CC0-1.0"
1554
1544
  },
@@ -1861,13 +1851,13 @@
1861
1851
  }
1862
1852
  },
1863
1853
  "node_modules/postcss-colormin": {
1864
- "version": "7.0.3",
1865
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.3.tgz",
1866
- "integrity": "sha512-xZxQcSyIVZbSsl1vjoqZAcMYYdnJsIyG8OvqShuuqf12S88qQboxxEy0ohNCOLwVPXTU+hFHvJPACRL2B5ohTA==",
1854
+ "version": "7.0.4",
1855
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.4.tgz",
1856
+ "integrity": "sha512-ziQuVzQZBROpKpfeDwmrG+Vvlr0YWmY/ZAk99XD+mGEBuEojoFekL41NCsdhyNUtZI7DPOoIWIR7vQQK9xwluw==",
1867
1857
  "dev": true,
1868
1858
  "license": "MIT",
1869
1859
  "dependencies": {
1870
- "browserslist": "^4.24.5",
1860
+ "browserslist": "^4.25.1",
1871
1861
  "caniuse-api": "^3.0.0",
1872
1862
  "colord": "^2.9.3",
1873
1863
  "postcss-value-parser": "^4.2.0"
@@ -1880,13 +1870,13 @@
1880
1870
  }
1881
1871
  },
1882
1872
  "node_modules/postcss-convert-values": {
1883
- "version": "7.0.5",
1884
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.5.tgz",
1885
- "integrity": "sha512-0VFhH8nElpIs3uXKnVtotDJJNX0OGYSZmdt4XfSfvOMrFw1jKfpwpZxfC4iN73CTM/MWakDEmsHQXkISYj4BXw==",
1873
+ "version": "7.0.7",
1874
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.7.tgz",
1875
+ "integrity": "sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==",
1886
1876
  "dev": true,
1887
1877
  "license": "MIT",
1888
1878
  "dependencies": {
1889
- "browserslist": "^4.24.5",
1879
+ "browserslist": "^4.25.1",
1890
1880
  "postcss-value-parser": "^4.2.0"
1891
1881
  },
1892
1882
  "engines": {
@@ -2027,13 +2017,13 @@
2027
2017
  }
2028
2018
  },
2029
2019
  "node_modules/postcss-merge-rules": {
2030
- "version": "7.0.5",
2031
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.5.tgz",
2032
- "integrity": "sha512-ZonhuSwEaWA3+xYbOdJoEReKIBs5eDiBVLAGpYZpNFPzXZcEE5VKR7/qBEQvTZpiwjqhhqEQ+ax5O3VShBj9Wg==",
2020
+ "version": "7.0.6",
2021
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.6.tgz",
2022
+ "integrity": "sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==",
2033
2023
  "dev": true,
2034
2024
  "license": "MIT",
2035
2025
  "dependencies": {
2036
- "browserslist": "^4.24.5",
2026
+ "browserslist": "^4.25.1",
2037
2027
  "caniuse-api": "^3.0.0",
2038
2028
  "cssnano-utils": "^5.0.1",
2039
2029
  "postcss-selector-parser": "^7.1.0"
@@ -2080,13 +2070,13 @@
2080
2070
  }
2081
2071
  },
2082
2072
  "node_modules/postcss-minify-params": {
2083
- "version": "7.0.3",
2084
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.3.tgz",
2085
- "integrity": "sha512-vUKV2+f5mtjewYieanLX0xemxIp1t0W0H/D11u+kQV/MWdygOO7xPMkbK+r9P6Lhms8MgzKARF/g5OPXhb8tgg==",
2073
+ "version": "7.0.4",
2074
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.4.tgz",
2075
+ "integrity": "sha512-3OqqUddfH8c2e7M35W6zIwv7jssM/3miF9cbCSb1iJiWvtguQjlxZGIHK9JRmc8XAKmE2PFGtHSM7g/VcW97sw==",
2086
2076
  "dev": true,
2087
2077
  "license": "MIT",
2088
2078
  "dependencies": {
2089
- "browserslist": "^4.24.5",
2079
+ "browserslist": "^4.25.1",
2090
2080
  "cssnano-utils": "^5.0.1",
2091
2081
  "postcss-value-parser": "^4.2.0"
2092
2082
  },
@@ -2208,13 +2198,13 @@
2208
2198
  }
2209
2199
  },
2210
2200
  "node_modules/postcss-normalize-unicode": {
2211
- "version": "7.0.3",
2212
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.3.tgz",
2213
- "integrity": "sha512-EcoA29LvG3F+EpOh03iqu+tJY3uYYKzArqKJHxDhUYLa2u58aqGq16K6/AOsXD9yqLN8O6y9mmePKN5cx6krOw==",
2201
+ "version": "7.0.4",
2202
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.4.tgz",
2203
+ "integrity": "sha512-LvIURTi1sQoZqj8mEIE8R15yvM+OhbR1avynMtI9bUzj5gGKR/gfZFd8O7VMj0QgJaIFzxDwxGl/ASMYAkqO8g==",
2214
2204
  "dev": true,
2215
2205
  "license": "MIT",
2216
2206
  "dependencies": {
2217
- "browserslist": "^4.24.5",
2207
+ "browserslist": "^4.25.1",
2218
2208
  "postcss-value-parser": "^4.2.0"
2219
2209
  },
2220
2210
  "engines": {
@@ -2274,13 +2264,13 @@
2274
2264
  }
2275
2265
  },
2276
2266
  "node_modules/postcss-reduce-initial": {
2277
- "version": "7.0.3",
2278
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.3.tgz",
2279
- "integrity": "sha512-RFvkZaqiWtGMlVjlUHpaxGqEL27lgt+Q2Ixjf83CRAzqdo+TsDyGPtJUbPx2MuYIJ+sCQc2TrOvRnhcXQfgIVA==",
2267
+ "version": "7.0.4",
2268
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.4.tgz",
2269
+ "integrity": "sha512-rdIC9IlMBn7zJo6puim58Xd++0HdbvHeHaPgXsimMfG1ijC5A9ULvNLSE0rUKVJOvNMcwewW4Ga21ngyJjY/+Q==",
2280
2270
  "dev": true,
2281
2271
  "license": "MIT",
2282
2272
  "dependencies": {
2283
- "browserslist": "^4.24.5",
2273
+ "browserslist": "^4.25.1",
2284
2274
  "caniuse-api": "^3.0.0"
2285
2275
  },
2286
2276
  "engines": {
@@ -2348,14 +2338,14 @@
2348
2338
  }
2349
2339
  },
2350
2340
  "node_modules/postcss-svgo": {
2351
- "version": "7.0.2",
2352
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.2.tgz",
2353
- "integrity": "sha512-5Dzy66JlnRM6pkdOTF8+cGsB1fnERTE8Nc+Eed++fOWo1hdsBptCsbG8UuJkgtZt75bRtMJIrPeZmtfANixdFA==",
2341
+ "version": "7.1.0",
2342
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz",
2343
+ "integrity": "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==",
2354
2344
  "dev": true,
2355
2345
  "license": "MIT",
2356
2346
  "dependencies": {
2357
2347
  "postcss-value-parser": "^4.2.0",
2358
- "svgo": "^3.3.2"
2348
+ "svgo": "^4.0.0"
2359
2349
  },
2360
2350
  "engines": {
2361
2351
  "node": "^18.12.0 || ^20.9.0 || >= 18"
@@ -2515,6 +2505,13 @@
2515
2505
  "dev": true,
2516
2506
  "license": "MIT"
2517
2507
  },
2508
+ "node_modules/sax": {
2509
+ "version": "1.4.1",
2510
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
2511
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
2512
+ "dev": true,
2513
+ "license": "ISC"
2514
+ },
2518
2515
  "node_modules/secure-compare": {
2519
2516
  "version": "3.0.1",
2520
2517
  "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
@@ -2775,13 +2772,13 @@
2775
2772
  }
2776
2773
  },
2777
2774
  "node_modules/stylehacks": {
2778
- "version": "7.0.5",
2779
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.5.tgz",
2780
- "integrity": "sha512-5kNb7V37BNf0Q3w+1pxfa+oiNPS++/b4Jil9e/kPDgrk1zjEd6uR7SZeJiYaLYH6RRSC1XX2/37OTeU/4FvuIA==",
2775
+ "version": "7.0.6",
2776
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.6.tgz",
2777
+ "integrity": "sha512-iitguKivmsueOmTO0wmxURXBP8uqOO+zikLGZ7Mm9e/94R4w5T999Js2taS/KBOnQ/wdC3jN3vNSrkGDrlnqQg==",
2781
2778
  "dev": true,
2782
2779
  "license": "MIT",
2783
2780
  "dependencies": {
2784
- "browserslist": "^4.24.5",
2781
+ "browserslist": "^4.25.1",
2785
2782
  "postcss-selector-parser": "^7.1.0"
2786
2783
  },
2787
2784
  "engines": {
@@ -2818,25 +2815,25 @@
2818
2815
  }
2819
2816
  },
2820
2817
  "node_modules/svgo": {
2821
- "version": "3.3.2",
2822
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
2823
- "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
2818
+ "version": "4.0.0",
2819
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz",
2820
+ "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==",
2824
2821
  "dev": true,
2825
2822
  "license": "MIT",
2826
2823
  "dependencies": {
2827
- "@trysound/sax": "0.2.0",
2828
- "commander": "^7.2.0",
2824
+ "commander": "^11.1.0",
2829
2825
  "css-select": "^5.1.0",
2830
- "css-tree": "^2.3.1",
2826
+ "css-tree": "^3.0.1",
2831
2827
  "css-what": "^6.1.0",
2832
2828
  "csso": "^5.0.5",
2833
- "picocolors": "^1.0.0"
2829
+ "picocolors": "^1.1.1",
2830
+ "sax": "^1.4.1"
2834
2831
  },
2835
2832
  "bin": {
2836
- "svgo": "bin/svgo"
2833
+ "svgo": "bin/svgo.js"
2837
2834
  },
2838
2835
  "engines": {
2839
- "node": ">=14.0.0"
2836
+ "node": ">=16"
2840
2837
  },
2841
2838
  "funding": {
2842
2839
  "type": "opencollective",
@@ -2844,13 +2841,13 @@
2844
2841
  }
2845
2842
  },
2846
2843
  "node_modules/svgo/node_modules/commander": {
2847
- "version": "7.2.0",
2848
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
2849
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
2844
+ "version": "11.1.0",
2845
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
2846
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
2850
2847
  "dev": true,
2851
2848
  "license": "MIT",
2852
2849
  "engines": {
2853
- "node": ">= 10"
2850
+ "node": ">=16"
2854
2851
  }
2855
2852
  },
2856
2853
  "node_modules/thenby": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brut-css",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "Utility CSS Library for Full Stack Developers",
5
5
  "keywords": [
6
6
  "css"
@@ -16,7 +16,7 @@
16
16
  "type": "module",
17
17
  "devDependencies": {
18
18
  "comment-parser": "^1.4.1",
19
- "cssnano": "^7.0.7",
19
+ "cssnano": "^7.1.1",
20
20
  "ejs": "^3.1.10",
21
21
  "http-server": "^14.1.1",
22
22
  "js-beautify": "^1.15.4",
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "brut-js",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "brut-js",
9
- "version": "0.10.0",
9
+ "version": "0.12.0",
10
10
  "license": "Hippocratic-2.1",
11
11
  "devDependencies": {
12
- "esbuild": "^0.24.0",
12
+ "esbuild": "^0.24.2",
13
13
  "jsdom": "^25.0.1",
14
14
  "mocha": "^10.8.2"
15
15
  }