brut 0.11.0 → 0.12.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +8 -8
- data/brut-css/package-lock.json +94 -97
- data/brut-css/package.json +2 -2
- data/brut-js/package-lock.json +3 -3
- data/brut-js/package.json +6 -3
- data/brut-js/specs/AjaxSubmit.spec.js +62 -6
- data/brut-js/src/AjaxSubmit.js +26 -6
- data/brutrb.com/forms.md +1 -0
- data/brutrb.com/recipes/authentication.md +1 -0
- data/brutrb.com/tutorials/01-intro.md +26 -2
- data/docs/404.html +2 -2
- data/docs/adrs.html +3 -3
- data/docs/ai.html +3 -3
- data/docs/api/Brut/BackEnd/SeedData.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
- data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
- data/docs/api/Brut/BackEnd/Validators.html +1 -1
- data/docs/api/Brut/BackEnd.html +1 -1
- data/docs/api/Brut/CLI/App.html +1 -1
- data/docs/api/Brut/CLI/AppRunner.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB.html +1 -1
- data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
- data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test.html +1 -1
- data/docs/api/Brut/CLI/Apps.html +1 -1
- data/docs/api/Brut/CLI/Command.html +1 -1
- data/docs/api/Brut/CLI/Error.html +1 -1
- data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
- data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
- data/docs/api/Brut/CLI/Executor.html +1 -1
- data/docs/api/Brut/CLI/InvalidOption.html +1 -1
- data/docs/api/Brut/CLI/Options.html +1 -1
- data/docs/api/Brut/CLI/Output.html +1 -1
- data/docs/api/Brut/CLI/SystemExecError.html +1 -1
- data/docs/api/Brut/CLI.html +1 -1
- data/docs/api/Brut/FactoryBot.html +1 -1
- data/docs/api/Brut/Framework/App.html +1 -1
- data/docs/api/Brut/Framework/Config.html +1 -1
- data/docs/api/Brut/Framework/Container.html +1 -1
- data/docs/api/Brut/Framework/Error.html +1 -1
- data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
- data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
- data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
- data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
- data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
- data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
- data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
- data/docs/api/Brut/Framework/Errors.html +1 -1
- data/docs/api/Brut/Framework/FussyTypeEnforcement.html +2 -2
- data/docs/api/Brut/Framework/MCP.html +1 -1
- data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
- data/docs/api/Brut/Framework.html +1 -1
- data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
- data/docs/api/Brut/FrontEnd/Component/Helpers.html +1 -1
- data/docs/api/Brut/FrontEnd/Component.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/FormTag.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Input.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Inputs/ButtonTag.html +447 -0
- data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +14 -9
- data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +8 -9
- data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +10 -11
- data/docs/api/Brut/FrontEnd/Components/Inputs.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
- data/docs/api/Brut/FrontEnd/Components.html +1 -1
- data/docs/api/Brut/FrontEnd/CsrfProtector.html +1 -1
- data/docs/api/Brut/FrontEnd/Download.html +1 -1
- data/docs/api/Brut/FrontEnd/Flash.html +1 -1
- data/docs/api/Brut/FrontEnd/Form.html +39 -39
- data/docs/api/Brut/FrontEnd/Forms/Button.html +331 -0
- data/docs/api/Brut/FrontEnd/Forms/ButtonInputDefinition.html +537 -0
- data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/Input.html +6 -2
- data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +111 -23
- data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +20 -12
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms.html +2 -2
- data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
- data/docs/api/Brut/FrontEnd/Handler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
- data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
- data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
- data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
- data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
- data/docs/api/Brut/FrontEnd/Layout.html +1 -1
- data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
- data/docs/api/Brut/FrontEnd/Page.html +1 -1
- data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
- data/docs/api/Brut/FrontEnd/Pages.html +1 -1
- data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing.html +1 -1
- data/docs/api/Brut/FrontEnd/Session.html +1 -1
- data/docs/api/Brut/FrontEnd.html +1 -1
- data/docs/api/Brut/I18n/BaseMethods.html +1 -1
- data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
- data/docs/api/Brut/I18n/ForCLI.html +1 -1
- data/docs/api/Brut/I18n/ForHTML.html +1 -1
- data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
- data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
- data/docs/api/Brut/I18n.html +1 -1
- data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
- data/docs/api/Brut/Instrumentation/Methods/ClassMethods.html +596 -0
- data/docs/api/Brut/Instrumentation/Methods.html +173 -0
- data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +7 -7
- data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +7 -7
- data/docs/api/Brut/Instrumentation/OpenTelemetry.html +19 -17
- data/docs/api/Brut/Instrumentation.html +3 -1
- data/docs/api/Brut/RubocopConfig.html +1 -1
- data/docs/api/Brut/SinatraHelpers/ClassMethods.html +1 -1
- data/docs/api/Brut/SinatraHelpers.html +1 -1
- data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/E2ETestServer.html +1 -1
- data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
- data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
- data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/HandlerSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers.html +1 -1
- data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/RSpecSetup.html +1 -1
- data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
- data/docs/api/Brut/SpecSupport.html +1 -1
- data/docs/api/Brut.html +1 -1
- data/docs/api/Clock.html +1 -1
- data/docs/api/ModuleName.html +1 -1
- data/docs/api/RichString.html +1 -1
- data/docs/api/SemanticLogger/Appender/Async.html +1 -1
- data/docs/api/Sequel/Extensions/BrutInstrumentation.html +1 -1
- data/docs/api/Sequel/Extensions/BrutMigrations.html +1 -1
- data/docs/api/Sequel/Extensions.html +1 -1
- data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
- data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
- data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
- data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
- data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
- data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
- data/docs/api/Sequel/Plugins/FindBang.html +1 -1
- data/docs/api/Sequel/Plugins.html +1 -1
- data/docs/api/Sequel.html +1 -1
- data/docs/api/_index.html +36 -1
- data/docs/api/class_list.html +1 -1
- data/docs/api/file.README.html +1 -1
- data/docs/api/index.html +1 -1
- data/docs/api/method_list.html +364 -252
- data/docs/api/top-level-namespace.html +1 -1
- data/docs/assets/{app.0-aKXKdt.js → app.CGHFI-MA.js} +1 -1
- data/docs/assets/chunks/@localSearchIndexroot.DcMsFVrO.js +1 -0
- data/docs/assets/chunks/{VPLocalSearchBox.CW-UBkNA.js → VPLocalSearchBox.-c-Kihwo.js} +1 -1
- data/docs/assets/chunks/{theme.a6feKWJO.js → theme.DpqrgXG8.js} +2 -2
- data/docs/assets/{components.md.BzVRwegp.js → components.md.X4h_TEG-.js} +3 -3
- data/docs/assets/{configuration.md.eM5wFVi5.js → configuration.md.CPCyUo5A.js} +1 -1
- data/docs/assets/{forms.md.B3BHvCV3.js → forms.md.BwmfAZ6Z.js} +2 -2
- data/docs/assets/{getting-started.md.BgR0ZHsl.js → getting-started.md.mPgbkbBv.js} +2 -2
- data/docs/assets/instrumentation.md._lNSriEZ.js +90 -0
- data/docs/assets/instrumentation.md._lNSriEZ.lean.js +1 -0
- data/docs/assets/{recipes_authentication.md.Dzvi_g69.js → recipes_authentication.md.BAISoxmN.js} +1 -0
- data/docs/assets/{tutorials_01-intro.md.BXvYWcO9.js → tutorials_01-intro.md.B4sUBY3X.js} +10 -10
- data/docs/assets/{tutorials_01-intro.md.BXvYWcO9.lean.js → tutorials_01-intro.md.B4sUBY3X.lean.js} +1 -1
- data/docs/assets/{tutorials_02-dialog.md.CIeg8R--.js → tutorials_02-dialog.md.DOonTBrE.js} +1 -1
- data/docs/assets.html +3 -3
- data/docs/brut-js/api/AjaxSubmit.html +16 -6
- data/docs/brut-js/api/AjaxSubmit.js.html +27 -7
- data/docs/brut-js/api/Autosubmit.html +1 -1
- data/docs/brut-js/api/Autosubmit.js.html +1 -1
- data/docs/brut-js/api/BaseCustomElement.html +1 -1
- data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
- data/docs/brut-js/api/BrutCustomElements.html +1 -1
- data/docs/brut-js/api/BufferedLogger.html +1 -1
- data/docs/brut-js/api/ConfirmSubmit.html +1 -1
- data/docs/brut-js/api/ConfirmSubmit.js.html +1 -1
- data/docs/brut-js/api/ConfirmationDialog.html +1 -1
- data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessage.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessage.js.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
- data/docs/brut-js/api/CopyToClipboard.html +1 -1
- data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
- data/docs/brut-js/api/Form.html +1 -1
- data/docs/brut-js/api/Form.js.html +1 -1
- data/docs/brut-js/api/I18nTranslation.html +1 -1
- data/docs/brut-js/api/I18nTranslation.js.html +1 -1
- data/docs/brut-js/api/LocaleDetection.html +1 -1
- data/docs/brut-js/api/LocaleDetection.js.html +1 -1
- data/docs/brut-js/api/Logger.html +1 -1
- data/docs/brut-js/api/Logger.js.html +1 -1
- data/docs/brut-js/api/Message.html +1 -1
- data/docs/brut-js/api/Message.js.html +1 -1
- data/docs/brut-js/api/PrefixedLogger.html +1 -1
- data/docs/brut-js/api/RichString.html +1 -1
- data/docs/brut-js/api/RichString.js.html +1 -1
- data/docs/brut-js/api/Tabs.html +1 -1
- data/docs/brut-js/api/Tabs.js.html +1 -1
- data/docs/brut-js/api/Tracing.html +1 -1
- data/docs/brut-js/api/Tracing.js.html +1 -1
- data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
- data/docs/brut-js/api/external-Performance.html +1 -1
- data/docs/brut-js/api/external-Promise.html +1 -1
- data/docs/brut-js/api/external-ValidityState.html +1 -1
- data/docs/brut-js/api/external-Window.html +1 -1
- data/docs/brut-js/api/external-fetch.html +1 -1
- data/docs/brut-js/api/global.html +1 -1
- data/docs/brut-js/api/index.html +1 -1
- data/docs/brut-js/api/index.js.html +1 -1
- data/docs/brut-js/api/module-testing.html +1 -1
- data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
- data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
- data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
- data/docs/brut-js/api/testing.DOMCreator.html +1 -1
- data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
- data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
- data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
- data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
- data/docs/brut-js/api/testing_index.js.html +1 -1
- data/docs/brut-js.html +3 -3
- data/docs/business-logic.html +3 -3
- data/docs/cli.html +3 -3
- data/docs/components.html +7 -7
- data/docs/configuration.html +5 -5
- data/docs/css.html +3 -3
- data/docs/custom-element-tests.html +3 -3
- data/docs/database-access.html +3 -3
- data/docs/database-schema.html +3 -3
- data/docs/deployment.html +3 -3
- data/docs/dev-environment.html +3 -3
- data/docs/dir-structure.html +3 -3
- data/docs/doc-conventions.html +3 -3
- data/docs/end-to-end-tests.html +3 -3
- data/docs/features.html +3 -3
- data/docs/flash-and-session.html +3 -3
- data/docs/form-constraints.html +3 -3
- data/docs/forms.html +6 -6
- data/docs/getting-started.html +6 -6
- data/docs/handlers.html +3 -3
- data/docs/hashmap.json +1 -1
- data/docs/hooks.html +3 -3
- data/docs/i18n.html +3 -3
- data/docs/index.html +3 -3
- data/docs/instrumentation.html +61 -6
- data/docs/javascript.html +3 -3
- data/docs/jobs.html +3 -3
- data/docs/keyword-injection.html +3 -3
- data/docs/layouts.html +3 -3
- data/docs/lsp.html +3 -3
- data/docs/markdown-examples.html +3 -3
- data/docs/middleware.html +3 -3
- data/docs/overview.html +3 -3
- data/docs/pages.html +3 -3
- data/docs/recipes/alternate-layouts.html +3 -3
- data/docs/recipes/authentication.html +5 -4
- data/docs/recipes/blank-layouts.html +3 -3
- data/docs/recipes/custom-flash.html +3 -3
- data/docs/recipes/form-errors.html +3 -3
- data/docs/recipes/indexed-forms.html +3 -3
- data/docs/recipes/migrations.html +3 -3
- data/docs/recipes/text-field-component.html +3 -3
- data/docs/roadmap.html +3 -3
- data/docs/routes.html +3 -3
- data/docs/security.html +3 -3
- data/docs/seed-data.html +3 -3
- data/docs/space-time-continuum.html +3 -3
- data/docs/tutorial.html +3 -3
- data/docs/tutorials/01-intro.html +12 -12
- data/docs/tutorials/02-dialog.html +5 -5
- data/docs/unit-tests.html +3 -3
- data/docs/why.html +3 -3
- data/lib/brut/front_end/components/input.rb +1 -0
- data/lib/brut/front_end/components/inputs/button_tag.rb +43 -0
- data/lib/brut/front_end/components/inputs/input_tag.rb +3 -1
- data/lib/brut/front_end/components/inputs/select_tag_with_options.rb +0 -1
- data/lib/brut/front_end/components/inputs/textarea_tag.rb +0 -1
- data/lib/brut/front_end/form.rb +7 -5
- data/lib/brut/front_end/forms/button.rb +21 -0
- data/lib/brut/front_end/forms/button_input_definition.rb +33 -0
- data/lib/brut/front_end/forms/input_declarations.rb +10 -0
- data/lib/brut/front_end/forms/input_definition.rb +7 -2
- data/lib/brut/version.rb +1 -1
- data/mkbrut/Gemfile.lock +1 -1
- data/mkbrut/lib/mkbrut/version.rb +1 -1
- metadata +29 -21
- data/docs/assets/chunks/@localSearchIndexroot.DPhqaz1b.js +0 -1
- data/docs/assets/instrumentation.md.BgcaGVYH.js +0 -35
- data/docs/assets/instrumentation.md.BgcaGVYH.lean.js +0 -1
- /data/docs/assets/{components.md.BzVRwegp.lean.js → components.md.X4h_TEG-.lean.js} +0 -0
- /data/docs/assets/{configuration.md.eM5wFVi5.lean.js → configuration.md.CPCyUo5A.lean.js} +0 -0
- /data/docs/assets/{forms.md.B3BHvCV3.lean.js → forms.md.BwmfAZ6Z.lean.js} +0 -0
- /data/docs/assets/{getting-started.md.BgR0ZHsl.lean.js → getting-started.md.mPgbkbBv.lean.js} +0 -0
- /data/docs/assets/{recipes_authentication.md.Dzvi_g69.lean.js → recipes_authentication.md.BAISoxmN.lean.js} +0 -0
- /data/docs/assets/{tutorials_02-dialog.md.CIeg8R--.lean.js → tutorials_02-dialog.md.DOonTBrE.lean.js} +0 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
# Creates a button tag to be used inside a form. This is only
|
2
|
+
# needed if your form declared a `button` and you wish the value
|
3
|
+
# to be included whern the form is submitted (for example, if you have
|
4
|
+
# more than one submit button and wish to know which one was clicked on the
|
5
|
+
# back end).
|
6
|
+
class Brut::FrontEnd::Components::Inputs::ButtonTag < Brut::FrontEnd::Components::Input
|
7
|
+
|
8
|
+
# Creates the appropriate button for the given {Brut::FrontEnd::Form} and input name. Note that if the
|
9
|
+
# form has no value for this input, the value `"true"` will be used, as this allows you to create
|
10
|
+
# buttons without worrying about an often irrelevant value.
|
11
|
+
#
|
12
|
+
# @param [Brut::FrontEnd::Form} form The form that is being rendered. This method will consult this class to understand the requirements on this input so its HTML is generated correctly.
|
13
|
+
# @param [String] input_name the name of the input, which should be a member of `form`
|
14
|
+
# @param [Integer] index if this input is part of an array, this is the index into that array. This is used to get the input's value.
|
15
|
+
# @param [Hash] html_attributes any additional HTML attributes to include on the `<input>` element. Note
|
16
|
+
# that if you set `type` here to be `reset` or `button`, this button will not submit
|
17
|
+
# the form (as per the HTML spec). Also note that the various
|
18
|
+
# `form*` attributes *will* take effect and work as desired.
|
19
|
+
def initialize(form:, input_name:, index: nil, **html_attributes)
|
20
|
+
input = form.input(input_name, index:)
|
21
|
+
if input.class.name != "Brut::FrontEnd::Forms::Button"
|
22
|
+
raise ArgumentError, "#{self.class} can only be used with `button` elements, not #{input.class.name} form elements"
|
23
|
+
end
|
24
|
+
default_html_attributes = {}
|
25
|
+
html_attributes = html_attributes.map { |key,value| [ key.to_sym, value ] }.to_h
|
26
|
+
|
27
|
+
default_html_attributes[:name] = if input.array?
|
28
|
+
"#{input.name}[]"
|
29
|
+
else
|
30
|
+
input.name
|
31
|
+
end
|
32
|
+
value = RichString.from_string(input.value)
|
33
|
+
default_html_attributes[:value] = (value || "true").to_s
|
34
|
+
|
35
|
+
@attributes = default_html_attributes.merge(html_attributes)
|
36
|
+
end
|
37
|
+
|
38
|
+
def view_template
|
39
|
+
button(**@attributes) do
|
40
|
+
yield
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -3,7 +3,6 @@ class Brut::FrontEnd::Components::Inputs::InputTag < Brut::FrontEnd::Components:
|
|
3
3
|
def invalid? = @attributes["data-invalid"] == true
|
4
4
|
|
5
5
|
# Creates the appropriate input for the given {Brut::FrontEnd::Form} and input name.
|
6
|
-
# Generally, you want to use this method over the initializer.
|
7
6
|
#
|
8
7
|
# @param [Brut::FrontEnd::Form} form The form that is being rendered. This method will consult this class to understand the requirements on this input so its HTML is generated correctly.
|
9
8
|
# @param [String] input_name the name of the input, which should be a member of `form`
|
@@ -11,6 +10,9 @@ class Brut::FrontEnd::Components::Inputs::InputTag < Brut::FrontEnd::Components:
|
|
11
10
|
# @param [Hash] html_attributes any additional HTML attributes to include on the `<input>` element.
|
12
11
|
def initialize(form:, input_name:, index: nil, **html_attributes)
|
13
12
|
input = form.input(input_name, index:)
|
13
|
+
if input.class.name != "Brut::FrontEnd::Forms::Input"
|
14
|
+
raise ArgumentError, "#{self.class} can only be used with `input` elements, not #{input.class.name} form elements"
|
15
|
+
end
|
14
16
|
default_html_attributes = {}
|
15
17
|
html_attributes = html_attributes.map { |key,value| [ key.to_sym, value ] }.to_h
|
16
18
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# Renders an HTML `<select>`.
|
2
2
|
class Brut::FrontEnd::Components::Inputs::SelectTagWithOptions < Brut::FrontEnd::Components::Input
|
3
3
|
# Creates the appropriate select input for the given {Brut::FrontEnd::Form} and input name.
|
4
|
-
# Generally, you want to use this method over the initializer.
|
5
4
|
#
|
6
5
|
# @param [Brut::FrontEnd::Form} form The form that is being rendered.
|
7
6
|
# This method will consult this class to understand the requirements
|
@@ -2,7 +2,6 @@
|
|
2
2
|
class Brut::FrontEnd::Components::Inputs::TextareaTag < Brut::FrontEnd::Components::Input
|
3
3
|
|
4
4
|
# Creates the appropriate textarea for the given {Brut::FrontEnd::Form} and input name.
|
5
|
-
# Generally, you want to use this method over the initializer.
|
6
5
|
#
|
7
6
|
# @param [Brut::FrontEnd::Form} form The form that is being rendered. This method will consult this class to understand the requirements on this textarea so its HTML is generated correctly.
|
8
7
|
# @param [String] input_name the name of the input, which should be a member of `form`
|
data/lib/brut/front_end/form.rb
CHANGED
@@ -5,10 +5,12 @@ module Brut::FrontEnd::Forms
|
|
5
5
|
autoload(:InputDeclarations, "brut/front_end/forms/input_declarations")
|
6
6
|
autoload(:InputDefinition, "brut/front_end/forms/input_definition")
|
7
7
|
autoload(:SelectInputDefinition, "brut/front_end/forms/select_input_definition")
|
8
|
+
autoload(:ButtonInputDefinition, "brut/front_end/forms/button_input_definition")
|
8
9
|
autoload(:RadioButtonGroupInputDefinition, "brut/front_end/forms/radio_button_group_input_definition")
|
9
10
|
autoload(:ConstraintViolation, "brut/front_end/forms/constraint_violation")
|
10
11
|
autoload(:ValidityState, "brut/front_end/forms/validity_state")
|
11
12
|
autoload(:Input, "brut/front_end/forms/input")
|
13
|
+
autoload(:Button, "brut/front_end/forms/button")
|
12
14
|
autoload(:SelectInput, "brut/front_end/forms/select_input")
|
13
15
|
autoload(:RadioButtonGroupInput, "brut/front_end/forms/radio_button_group_input")
|
14
16
|
end
|
@@ -38,11 +40,11 @@ class Brut::FrontEnd::Form
|
|
38
40
|
Brut.container.instrumentation.add_attributes(prefix: :brut, ignored_unknown_params: unknown_params.join(","))
|
39
41
|
end
|
40
42
|
@params = params.except(*unknown_params).map { |name,value|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
input_definition = begin
|
44
|
+
self.class.input_definitions[name] || self.class.input_definitions.fetch(name.to_s)
|
45
|
+
rescue KeyError
|
46
|
+
raise "cannot find input definition for '#{name}'. Have these: #{self.class.input_definitions.keys.inspect}"
|
47
|
+
end
|
46
48
|
if value.kind_of?(Array)
|
47
49
|
input_definition = begin
|
48
50
|
self.class.input_definitions[name] || self.class.input_definitions.fetch(name.to_s)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Represents the current state of a particular button that is part of a form.
|
2
|
+
# Button's in this context don't really have state, but this allows the button to be
|
3
|
+
# modeled like any other form element.
|
4
|
+
class Brut::FrontEnd::Forms::Button < Brut::FrontEnd::Forms::Input
|
5
|
+
# Create the input with the given definition and value
|
6
|
+
# @param [Brut::FrontEnd::Forms::InputDefinition] input_definition
|
7
|
+
# @param [String] value Value of the button, which would be submitted with the form. Note
|
8
|
+
# that {Brut::FrontEnd::Forms::ButtonInputDefinition#make_input} will
|
9
|
+
# default this value to `"true"`.
|
10
|
+
def initialize(input_definition:, value:, index:)
|
11
|
+
@input_definition = input_definition
|
12
|
+
@validity_state = Brut::FrontEnd::Forms::ValidityState.new
|
13
|
+
@index = index
|
14
|
+
self.value=(value)
|
15
|
+
end
|
16
|
+
|
17
|
+
def value=(new_value)
|
18
|
+
@value = new_value.to_s
|
19
|
+
@typed_value = @value
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Defines a button to be used to submit a form (as opposed to an `<input type="submit">`).
|
2
|
+
# This is needed when the name/value of the button should be submitted witih the form.
|
3
|
+
class Brut::FrontEnd::Forms::ButtonInputDefinition
|
4
|
+
include Brut::Framework::FussyTypeEnforcement
|
5
|
+
|
6
|
+
attr_reader :name
|
7
|
+
|
8
|
+
# Create a ButtonInputDefinition.
|
9
|
+
#
|
10
|
+
# @param [String] name Name of the button (required)
|
11
|
+
# @param [true|false] array If true, the form will expect multiple values for this input. The values will be available as an array. Any values omitted by the user will be present as empty strings.
|
12
|
+
#
|
13
|
+
# @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button BUTTON Element
|
14
|
+
def initialize(
|
15
|
+
name:,
|
16
|
+
array: false
|
17
|
+
)
|
18
|
+
name = name.to_s
|
19
|
+
@name = type!(name, String, "name", required: true)
|
20
|
+
@array = type!(array, [true, false], "array", required: true)
|
21
|
+
end
|
22
|
+
|
23
|
+
def array? = @array
|
24
|
+
|
25
|
+
|
26
|
+
# Create an Input based on this definition, initializing it with the given value.
|
27
|
+
# @param [String] value the value to give this input initially.
|
28
|
+
# @param [Integer] index the index of this input, if it is part of an array of
|
29
|
+
# inputs. `nil` is allowed only if the input definition is not for an array.
|
30
|
+
def make_input(value:, index:)
|
31
|
+
Brut::FrontEnd::Forms::Button.new(input_definition: self, value:, index:)
|
32
|
+
end
|
33
|
+
end
|
@@ -11,6 +11,16 @@ module Brut::FrontEnd::Forms::InputDeclarations
|
|
11
11
|
)
|
12
12
|
end
|
13
13
|
|
14
|
+
# Declares a named button for this form, which is required in order to have this button's name and
|
15
|
+
# value sent to the back. This will generate a `<button>` tag. To use `<input type="submit">`, {.input} should
|
16
|
+
# be used instead.
|
17
|
+
# @param [String] name The name of the button (used in the `name` attribute)
|
18
|
+
def button(name)
|
19
|
+
self.add_input_definition(
|
20
|
+
Brut::FrontEnd::Forms::ButtonInputDefinition.new(name:)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
14
24
|
# Declares a select for this form, to be modeled via an HTML `<SELECT>` tag. Note that this will not define the values that appear
|
15
25
|
# in the select. That is done when the select is rendered, which you might do with a
|
16
26
|
# {Brut::FrontEnd::Components::Inputs::Select}
|
@@ -32,6 +32,7 @@ class Brut::FrontEnd::Forms::InputDefinition
|
|
32
32
|
"radio" => String,
|
33
33
|
"range" => String,
|
34
34
|
"search" => String,
|
35
|
+
"submit" => String,
|
35
36
|
"tel" => String,
|
36
37
|
"text" => String,
|
37
38
|
"time" => Time, # XXX
|
@@ -49,7 +50,7 @@ class Brut::FrontEnd::Forms::InputDefinition
|
|
49
50
|
# @param [Integer] maxlength Maximum length of the value allowed.
|
50
51
|
# @param [String] name Name of the input (required)
|
51
52
|
# @param [Regexp] pattern that the value must match. Note that this technically must be a regular expression that works for both Ruby and JavaScript, so don't get fancy.
|
52
|
-
# @param [true|false] required true if this field is required, false otherwise. Default is `true` unless `type` is `"checkbox"`.
|
53
|
+
# @param [true|false] required true if this field is required, false otherwise. Default is `true` unless `type` is `"checkbox"` or `"submit"`.
|
53
54
|
# @param [Integer] step Step value for ranged inputs. A value that is not on a step is considered invalid.
|
54
55
|
# @param [String] type the type of input to create. Should be a value from the HTML spec. Default is based on the value of `name`. If `email`, `type` is `email`. If `password` or `password_confirmation`, type is `password`. Otherwise `text`.
|
55
56
|
# @param [true|false] array If true, the form will expect multiple values for this input. The values will be available as an array. Any values omitted by the user will be present as empty strings.
|
@@ -84,7 +85,11 @@ class Brut::FrontEnd::Forms::InputDefinition
|
|
84
85
|
|
85
86
|
type = type.to_s
|
86
87
|
if required == :based_on_type
|
87
|
-
required = type
|
88
|
+
required = case type
|
89
|
+
when "checkbox" then false
|
90
|
+
when "submit" then false
|
91
|
+
else true
|
92
|
+
end
|
88
93
|
end
|
89
94
|
|
90
95
|
@max = max
|
data/lib/brut/version.rb
CHANGED
data/mkbrut/Gemfile.lock
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Bryant Copeland
|
@@ -809,6 +809,7 @@ files:
|
|
809
809
|
- docs/api/Brut/FrontEnd/Components/I18nTranslations.html
|
810
810
|
- docs/api/Brut/FrontEnd/Components/Input.html
|
811
811
|
- docs/api/Brut/FrontEnd/Components/Inputs.html
|
812
|
+
- docs/api/Brut/FrontEnd/Components/Inputs/ButtonTag.html
|
812
813
|
- docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html
|
813
814
|
- docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html
|
814
815
|
- docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html
|
@@ -823,6 +824,8 @@ files:
|
|
823
824
|
- docs/api/Brut/FrontEnd/Flash.html
|
824
825
|
- docs/api/Brut/FrontEnd/Form.html
|
825
826
|
- docs/api/Brut/FrontEnd/Forms.html
|
827
|
+
- docs/api/Brut/FrontEnd/Forms/Button.html
|
828
|
+
- docs/api/Brut/FrontEnd/Forms/ButtonInputDefinition.html
|
826
829
|
- docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html
|
827
830
|
- docs/api/Brut/FrontEnd/Forms/Input.html
|
828
831
|
- docs/api/Brut/FrontEnd/Forms/Input/Color.html
|
@@ -885,6 +888,8 @@ files:
|
|
885
888
|
- docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html
|
886
889
|
- docs/api/Brut/Instrumentation.html
|
887
890
|
- docs/api/Brut/Instrumentation/LoggerSpanExporter.html
|
891
|
+
- docs/api/Brut/Instrumentation/Methods.html
|
892
|
+
- docs/api/Brut/Instrumentation/Methods/ClassMethods.html
|
888
893
|
- docs/api/Brut/Instrumentation/OpenTelemetry.html
|
889
894
|
- docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html
|
890
895
|
- docs/api/Brut/Instrumentation/OpenTelemetry/Span.html
|
@@ -959,7 +964,7 @@ files:
|
|
959
964
|
- docs/assets/adrs.md.BxjHi9-8.lean.js
|
960
965
|
- docs/assets/ai.md.Cy9GWnER.js
|
961
966
|
- docs/assets/ai.md.Cy9GWnER.lean.js
|
962
|
-
- docs/assets/app.
|
967
|
+
- docs/assets/app.CGHFI-MA.js
|
963
968
|
- docs/assets/assets.md.7C3HWkga.js
|
964
969
|
- docs/assets/assets.md.7C3HWkga.lean.js
|
965
970
|
- docs/assets/basic-form-with-violations.Cv6Y9-Q_.png
|
@@ -968,16 +973,16 @@ files:
|
|
968
973
|
- docs/assets/brut-js.md.B4GYxQVw.lean.js
|
969
974
|
- docs/assets/business-logic.md.BY4hGy0m.js
|
970
975
|
- docs/assets/business-logic.md.BY4hGy0m.lean.js
|
971
|
-
- docs/assets/chunks/@localSearchIndexroot.
|
972
|
-
- docs/assets/chunks/VPLocalSearchBox
|
976
|
+
- docs/assets/chunks/@localSearchIndexroot.DcMsFVrO.js
|
977
|
+
- docs/assets/chunks/VPLocalSearchBox.-c-Kihwo.js
|
973
978
|
- docs/assets/chunks/framework.1L-BeKqY.js
|
974
|
-
- docs/assets/chunks/theme.
|
979
|
+
- docs/assets/chunks/theme.DpqrgXG8.js
|
975
980
|
- docs/assets/cli.md.CjsktgFz.js
|
976
981
|
- docs/assets/cli.md.CjsktgFz.lean.js
|
977
|
-
- docs/assets/components.md.
|
978
|
-
- docs/assets/components.md.
|
979
|
-
- docs/assets/configuration.md.
|
980
|
-
- docs/assets/configuration.md.
|
982
|
+
- docs/assets/components.md.X4h_TEG-.js
|
983
|
+
- docs/assets/components.md.X4h_TEG-.lean.js
|
984
|
+
- docs/assets/configuration.md.CPCyUo5A.js
|
985
|
+
- docs/assets/configuration.md.CPCyUo5A.lean.js
|
981
986
|
- docs/assets/css.md.CltvJqAa.js
|
982
987
|
- docs/assets/css.md.CltvJqAa.lean.js
|
983
988
|
- docs/assets/custom-element-tests.md.B_rbta32.js
|
@@ -1003,10 +1008,10 @@ files:
|
|
1003
1008
|
- docs/assets/flash-and-session.md.nPvUpnUx.lean.js
|
1004
1009
|
- docs/assets/form-constraints.md.KTv5cdR4.js
|
1005
1010
|
- docs/assets/form-constraints.md.KTv5cdR4.lean.js
|
1006
|
-
- docs/assets/forms.md.
|
1007
|
-
- docs/assets/forms.md.
|
1008
|
-
- docs/assets/getting-started.md.
|
1009
|
-
- docs/assets/getting-started.md.
|
1011
|
+
- docs/assets/forms.md.BwmfAZ6Z.js
|
1012
|
+
- docs/assets/forms.md.BwmfAZ6Z.lean.js
|
1013
|
+
- docs/assets/getting-started.md.mPgbkbBv.js
|
1014
|
+
- docs/assets/getting-started.md.mPgbkbBv.lean.js
|
1010
1015
|
- docs/assets/handlers.md.h84MMB1R.js
|
1011
1016
|
- docs/assets/handlers.md.h84MMB1R.lean.js
|
1012
1017
|
- docs/assets/hooks.md.Jmb5VOLA.js
|
@@ -1016,8 +1021,8 @@ files:
|
|
1016
1021
|
- docs/assets/index.md.Bn9e0sRJ.js
|
1017
1022
|
- docs/assets/index.md.Bn9e0sRJ.lean.js
|
1018
1023
|
- docs/assets/initial-home-page.DNIaYmgP.png
|
1019
|
-
- docs/assets/instrumentation.md.
|
1020
|
-
- docs/assets/instrumentation.md.
|
1024
|
+
- docs/assets/instrumentation.md._lNSriEZ.js
|
1025
|
+
- docs/assets/instrumentation.md._lNSriEZ.lean.js
|
1021
1026
|
- docs/assets/javascript.md.DzrMxUmI.js
|
1022
1027
|
- docs/assets/javascript.md.DzrMxUmI.lean.js
|
1023
1028
|
- docs/assets/jobs.md.S-2amAYp.js
|
@@ -1040,8 +1045,8 @@ files:
|
|
1040
1045
|
- docs/assets/pages.md.B7Hc-i6H.lean.js
|
1041
1046
|
- docs/assets/recipes_alternate-layouts.md.BwEytl59.js
|
1042
1047
|
- docs/assets/recipes_alternate-layouts.md.BwEytl59.lean.js
|
1043
|
-
- docs/assets/recipes_authentication.md.
|
1044
|
-
- docs/assets/recipes_authentication.md.
|
1048
|
+
- docs/assets/recipes_authentication.md.BAISoxmN.js
|
1049
|
+
- docs/assets/recipes_authentication.md.BAISoxmN.lean.js
|
1045
1050
|
- docs/assets/recipes_blank-layouts.md.fyAUJyJR.js
|
1046
1051
|
- docs/assets/recipes_blank-layouts.md.fyAUJyJR.lean.js
|
1047
1052
|
- docs/assets/recipes_custom-flash.md.CrQbI5eH.js
|
@@ -1072,10 +1077,10 @@ files:
|
|
1072
1077
|
- docs/assets/styled-home-page.BzdI7dWz.png
|
1073
1078
|
- docs/assets/tutorial.md.BM40jnoq.js
|
1074
1079
|
- docs/assets/tutorial.md.BM40jnoq.lean.js
|
1075
|
-
- docs/assets/tutorials_01-intro.md.
|
1076
|
-
- docs/assets/tutorials_01-intro.md.
|
1077
|
-
- docs/assets/tutorials_02-dialog.md.
|
1078
|
-
- docs/assets/tutorials_02-dialog.md.
|
1080
|
+
- docs/assets/tutorials_01-intro.md.B4sUBY3X.js
|
1081
|
+
- docs/assets/tutorials_01-intro.md.B4sUBY3X.lean.js
|
1082
|
+
- docs/assets/tutorials_02-dialog.md.DOonTBrE.js
|
1083
|
+
- docs/assets/tutorials_02-dialog.md.DOonTBrE.lean.js
|
1079
1084
|
- docs/assets/unit-tests.md.DUGrnLj5.js
|
1080
1085
|
- docs/assets/unit-tests.md.DUGrnLj5.lean.js
|
1081
1086
|
- docs/assets/welcome-to-brut.VSWzl17-.png
|
@@ -1285,6 +1290,7 @@ files:
|
|
1285
1290
|
- lib/brut/front_end/components/form_tag.rb
|
1286
1291
|
- lib/brut/front_end/components/i18n_translations.rb
|
1287
1292
|
- lib/brut/front_end/components/input.rb
|
1293
|
+
- lib/brut/front_end/components/inputs/button_tag.rb
|
1288
1294
|
- lib/brut/front_end/components/inputs/csrf_token.rb
|
1289
1295
|
- lib/brut/front_end/components/inputs/input_tag.rb
|
1290
1296
|
- lib/brut/front_end/components/inputs/radio_button.rb
|
@@ -1298,6 +1304,8 @@ files:
|
|
1298
1304
|
- lib/brut/front_end/download.rb
|
1299
1305
|
- lib/brut/front_end/flash.rb
|
1300
1306
|
- lib/brut/front_end/form.rb
|
1307
|
+
- lib/brut/front_end/forms/button.rb
|
1308
|
+
- lib/brut/front_end/forms/button_input_definition.rb
|
1301
1309
|
- lib/brut/front_end/forms/constraint_violation.rb
|
1302
1310
|
- lib/brut/front_end/forms/input.rb
|
1303
1311
|
- lib/brut/front_end/forms/input_declarations.rb
|