brut 0.0.20 → 0.0.22

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 (728) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +24 -3
  3. data/.nvim.lua +1 -0
  4. data/Dockerfile.dx +12 -3
  5. data/Gemfile.lock +9 -7
  6. data/README.md +0 -7
  7. data/Rakefile +6 -4
  8. data/bin/dev +20 -0
  9. data/bin/docs +27 -0
  10. data/bin/setup +47 -1
  11. data/brut-css/.nvim.lua +1 -0
  12. data/brut-css/README.md +28 -0
  13. data/brut-css/bin/build +31 -0
  14. data/brut-css/bin/dev +1 -0
  15. data/brut-css/bin/docs +15 -0
  16. data/brut-css/bin/setup +5 -0
  17. data/brut-css/config/media-queries-all.css +15 -0
  18. data/brut-css/config/media-queries-minimal.css +5 -0
  19. data/brut-css/config/postcss.config.cjs +7 -0
  20. data/brut-css/config/pseudo-classes-all.css +9 -0
  21. data/brut-css/dx +1 -0
  22. data/brut-css/package-lock.json +3217 -0
  23. data/brut-css/package.json +36 -0
  24. data/brut-css/src/css/appearance.css +145 -0
  25. data/brut-css/src/css/border.css +522 -0
  26. data/brut-css/src/css/colors.css +3502 -0
  27. data/brut-css/src/css/dimensions.css +548 -0
  28. data/brut-css/src/css/flex.css +179 -0
  29. data/brut-css/src/css/index.css +13 -0
  30. data/brut-css/src/css/layout.css +120 -0
  31. data/brut-css/src/css/list.css +41 -0
  32. data/brut-css/src/css/positioning.css +354 -0
  33. data/brut-css/src/css/properties/colors.css +455 -0
  34. data/brut-css/src/css/properties/index.css +3 -0
  35. data/brut-css/src/css/properties/spacing.css +140 -0
  36. data/brut-css/src/css/properties/typography.css +224 -0
  37. data/brut-css/src/css/reset.css +107 -0
  38. data/brut-css/src/css/spacing.css +585 -0
  39. data/brut-css/src/css/typography.css +519 -0
  40. data/brut-css/src/css/utils.css +104 -0
  41. data/brut-css/src/docs/1_getting-started/1_overview.md +46 -0
  42. data/brut-css/src/docs/1_getting-started/2_installation.md +25 -0
  43. data/brut-css/src/docs/1_getting-started/3_core-concepts.md +75 -0
  44. data/brut-css/src/docs/1_getting-started/4_simple-example.md +132 -0
  45. data/brut-css/src/docs/1_getting-started/page.html.ejs +10 -0
  46. data/brut-css/src/docs/2_properties/page.html.ejs +71 -0
  47. data/brut-css/src/docs/3_classes/color-demo.html.ejs +31 -0
  48. data/brut-css/src/docs/3_classes/page.html.ejs +87 -0
  49. data/brut-css/src/docs/4_customization/1_design-system.md +36 -0
  50. data/brut-css/src/docs/4_customization/2_breakpoints.md +75 -0
  51. data/brut-css/src/docs/4_customization/3_pseudo-classes.md +74 -0
  52. data/brut-css/src/docs/4_customization/4_advanced-configuration.md +40 -0
  53. data/brut-css/src/docs/4_customization/page.html.ejs +10 -0
  54. data/brut-css/src/docs/docs.css +98 -0
  55. data/brut-css/src/docs/includes/body-and-header.html.ejs +30 -0
  56. data/brut-css/src/docs/includes/footer-and-rest.html.ejs +9 -0
  57. data/brut-css/src/docs/includes/head.html.ejs +5 -0
  58. data/brut-css/src/docs/includes/nav.html.ejs +10 -0
  59. data/brut-css/src/docs/index.html.ejs +32 -0
  60. data/brut-css/src/docs/prism-twilight.min.css +1 -0
  61. data/brut-css/src/js/Logger.js +71 -0
  62. data/brut-css/src/js/build.js +111 -0
  63. data/brut-css/src/js/cli/CLIArgError.js +7 -0
  64. data/brut-css/src/js/cli/Debug.js +27 -0
  65. data/brut-css/src/js/cli/DocsDir.js +16 -0
  66. data/brut-css/src/js/cli/DocsTemplateSourceDir.js +16 -0
  67. data/brut-css/src/js/cli/InputFile.js +31 -0
  68. data/brut-css/src/js/cli/MediaQueryConfigFile.js +10 -0
  69. data/brut-css/src/js/cli/OutputFile.js +22 -0
  70. data/brut-css/src/js/cli/ParsedArg.js +17 -0
  71. data/brut-css/src/js/cli/PathToBrutCSSRoot.js +19 -0
  72. data/brut-css/src/js/cli/PseudoClassConfigFile.js +11 -0
  73. data/brut-css/src/js/cli.js +108 -0
  74. data/brut-css/src/js/docGenerator.js +467 -0
  75. data/brut-css/src/js/mediaQueryConfigParser.js +98 -0
  76. data/brut-css/src/js/post-css-plugins/addMediaQueriesPlugin.js +49 -0
  77. data/brut-css/src/js/post-css-plugins/addPseudoClassesPlugin.js +42 -0
  78. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/Category.js +9 -0
  79. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/DocState.js +185 -0
  80. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/Documentable.js +8 -0
  81. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/Group.js +7 -0
  82. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/ParsedComment.js +73 -0
  83. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/Property.js +9 -0
  84. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/PropertyCategory.js +4 -0
  85. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/PropertyGroup.js +8 -0
  86. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/Rule.js +12 -0
  87. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/RuleCategory.js +4 -0
  88. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/RuleGroup.js +8 -0
  89. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/SeeRef.js +5 -0
  90. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin/SeeURL.js +9 -0
  91. data/brut-css/src/js/post-css-plugins/generateDocumentationPlugin.js +49 -0
  92. data/brut-css/src/js/post-css-plugins/generateRootCustomPropertiesPlugin.js +45 -0
  93. data/brut-css/src/js/pseudoClassConfigParser.js +145 -0
  94. data/brut-js/.projections.json +10 -0
  95. data/brut-js/README.md +118 -0
  96. data/brut-js/bin/build +10 -0
  97. data/brut-js/bin/ci +5 -0
  98. data/brut-js/bin/setup +5 -0
  99. data/brut-js/docs/README.md +8 -0
  100. data/brut-js/docs/jsdoc-plugins/customElementTag.js +8 -0
  101. data/brut-js/docs/jsdoc-theme/publish.js +692 -0
  102. data/brut-js/docs/jsdoc-theme/static/scripts/linenumber.js +25 -0
  103. data/brut-js/docs/jsdoc-theme/static/scripts/prettify/Apache-License-2.0.txt +202 -0
  104. data/brut-js/docs/jsdoc-theme/static/scripts/prettify/lang-css.js +2 -0
  105. data/brut-js/docs/jsdoc-theme/static/scripts/prettify/prettify.js +28 -0
  106. data/brut-js/docs/jsdoc-theme/static/styles/jsdoc-default.css +327 -0
  107. data/brut-js/docs/jsdoc-theme/static/styles/prettify-jsdoc.css +111 -0
  108. data/brut-js/docs/jsdoc-theme/static/styles/prettify-tomorrow.css +132 -0
  109. data/brut-js/docs/jsdoc-theme/tmpl/augments.tmpl +10 -0
  110. data/brut-js/docs/jsdoc-theme/tmpl/container.tmpl +199 -0
  111. data/brut-js/docs/jsdoc-theme/tmpl/details.tmpl +143 -0
  112. data/brut-js/docs/jsdoc-theme/tmpl/example.tmpl +2 -0
  113. data/brut-js/docs/jsdoc-theme/tmpl/examples.tmpl +13 -0
  114. data/brut-js/docs/jsdoc-theme/tmpl/exceptions.tmpl +32 -0
  115. data/brut-js/docs/jsdoc-theme/tmpl/layout.tmpl +38 -0
  116. data/brut-js/docs/jsdoc-theme/tmpl/mainpage.tmpl +14 -0
  117. data/brut-js/docs/jsdoc-theme/tmpl/members.tmpl +38 -0
  118. data/brut-js/docs/jsdoc-theme/tmpl/method.tmpl +131 -0
  119. data/brut-js/docs/jsdoc-theme/tmpl/modifies.tmpl +14 -0
  120. data/brut-js/docs/jsdoc-theme/tmpl/params.tmpl +131 -0
  121. data/brut-js/docs/jsdoc-theme/tmpl/properties.tmpl +108 -0
  122. data/brut-js/docs/jsdoc-theme/tmpl/returns.tmpl +19 -0
  123. data/brut-js/docs/jsdoc-theme/tmpl/source.tmpl +8 -0
  124. data/brut-js/docs/jsdoc-theme/tmpl/tutorial.tmpl +19 -0
  125. data/brut-js/docs/jsdoc-theme/tmpl/type.tmpl +7 -0
  126. data/brut-js/docs/jsdoc.config.json +23 -0
  127. data/brut-js/docs/package-lock.json +343 -0
  128. data/brut-js/docs/package.json +7 -0
  129. data/brut-js/package-lock.json +2171 -0
  130. data/brut-js/package.json +32 -0
  131. data/brut-js/specs/AjaxSubmit.spec.js +256 -0
  132. data/brut-js/specs/Autosubmit.spec.js +127 -0
  133. data/brut-js/specs/ConfirmSubmit.spec.js +193 -0
  134. data/brut-js/specs/ConstraintViolationMessage.spec.js +33 -0
  135. data/brut-js/specs/ConstraintViolationMessages.spec.js +29 -0
  136. data/brut-js/specs/CopyToClipboard.spec.js +35 -0
  137. data/brut-js/specs/Form.spec.js +181 -0
  138. data/brut-js/specs/I18nTranslation.spec.js +19 -0
  139. data/brut-js/specs/LocaleDetection.spec.js +22 -0
  140. data/brut-js/specs/Message.spec.js +15 -0
  141. data/brut-js/specs/SpecHelper.js +23 -0
  142. data/brut-js/specs/Tabs.spec.js +41 -0
  143. data/brut-js/specs/config/asset_metadata.json +7 -0
  144. data/brut-js/src/AjaxSubmit.js +384 -0
  145. data/brut-js/src/Autosubmit.js +63 -0
  146. data/brut-js/src/BaseCustomElement.js +261 -0
  147. data/brut-js/src/ConfirmSubmit.js +116 -0
  148. data/brut-js/src/ConfirmationDialog.js +143 -0
  149. data/brut-js/src/ConstraintViolationMessage.js +125 -0
  150. data/brut-js/src/ConstraintViolationMessages.js +98 -0
  151. data/brut-js/src/CopyToClipboard.js +96 -0
  152. data/brut-js/src/Form.js +151 -0
  153. data/brut-js/src/I18nTranslation.js +61 -0
  154. data/brut-js/src/LocaleDetection.js +117 -0
  155. data/brut-js/src/Logger.js +90 -0
  156. data/brut-js/src/Message.js +56 -0
  157. data/brut-js/src/RichString.js +113 -0
  158. data/brut-js/src/Tabs.js +168 -0
  159. data/brut-js/src/Tracing.js +247 -0
  160. data/brut-js/src/appForTestingOnly.js +15 -0
  161. data/brut-js/src/index.js +130 -0
  162. data/brut-js/src/testing/AssetMetadata.js +35 -0
  163. data/brut-js/src/testing/AssetMetadataLoader.js +25 -0
  164. data/brut-js/src/testing/CustomElementTest.js +235 -0
  165. data/brut-js/src/testing/DOMCreator.js +45 -0
  166. data/brut-js/src/testing/index.js +48 -0
  167. data/brutrb.com/.vitepress/config.mjs +106 -0
  168. data/brutrb.com/.vitepress/plugins/jsdocLinker.js +34 -0
  169. data/brutrb.com/.vitepress/plugins/rdocLinker.js +18 -0
  170. data/brutrb.com/.vitepress/theme/custom.css +7 -0
  171. data/brutrb.com/.vitepress/theme/index.js +18 -0
  172. data/brutrb.com/.vitepress/theme/style.css +149 -0
  173. data/brutrb.com/ai.md +68 -0
  174. data/brutrb.com/assets.md +138 -0
  175. data/brutrb.com/bin/build +5 -0
  176. data/brutrb.com/bin/deploy +7 -0
  177. data/brutrb.com/bin/dev +5 -0
  178. data/brutrb.com/bin/setup +5 -0
  179. data/brutrb.com/brut-js.md +117 -0
  180. data/brutrb.com/business-logic.md +55 -0
  181. data/brutrb.com/cli.md +278 -0
  182. data/brutrb.com/components.md +243 -0
  183. data/brutrb.com/configuration.md +257 -0
  184. data/brutrb.com/css.md +103 -0
  185. data/brutrb.com/custom-element-tests.md +149 -0
  186. data/brutrb.com/database-access.md +201 -0
  187. data/brutrb.com/database-schema.md +312 -0
  188. data/brutrb.com/deployment.md +66 -0
  189. data/brutrb.com/dev-environment.md +179 -0
  190. data/brutrb.com/doc-conventions.md +39 -0
  191. data/brutrb.com/end-to-end-tests.md +174 -0
  192. data/brutrb.com/flash-and-session.md +224 -0
  193. data/brutrb.com/forms.md +866 -0
  194. data/brutrb.com/getting-started.md +66 -0
  195. data/brutrb.com/handlers.md +153 -0
  196. data/brutrb.com/hooks.md +178 -0
  197. data/brutrb.com/i18n.md +188 -0
  198. data/brutrb.com/images/Makefile +10 -0
  199. data/brutrb.com/images/dev-env-overview.dot +54 -0
  200. data/brutrb.com/images/dev-env-overview.png +0 -0
  201. data/brutrb.com/images/dev-env-protocol.dot +37 -0
  202. data/brutrb.com/images/dev-env-protocol.png +0 -0
  203. data/brutrb.com/images/logo-300.png +0 -0
  204. data/brutrb.com/images/logo.png +0 -0
  205. data/brutrb.com/images/overview.graffle +0 -0
  206. data/brutrb.com/images/overview.png +0 -0
  207. data/brutrb.com/images/spa.dot +19 -0
  208. data/brutrb.com/images/spa.png +0 -0
  209. data/brutrb.com/images/workspace-protocol.dot +44 -0
  210. data/brutrb.com/images/workspace-protocol.png +0 -0
  211. data/brutrb.com/index.md +36 -0
  212. data/brutrb.com/instrumentation.md +183 -0
  213. data/brutrb.com/javascript.md +122 -0
  214. data/brutrb.com/jobs.md +14 -0
  215. data/{doc-src → brutrb.com}/keyword-injection.md +122 -68
  216. data/brutrb.com/markdown-examples.md +85 -0
  217. data/brutrb.com/middleware.md +80 -0
  218. data/brutrb.com/not-released.md +5 -0
  219. data/brutrb.com/overview.md +404 -0
  220. data/brutrb.com/package-lock.json +2404 -0
  221. data/brutrb.com/package.json +11 -0
  222. data/brutrb.com/pages.md +378 -0
  223. data/brutrb.com/public/images/logo-300.png +0 -0
  224. data/brutrb.com/public/images/logo.png +0 -0
  225. data/brutrb.com/routes.md +215 -0
  226. data/brutrb.com/security.md +105 -0
  227. data/brutrb.com/seed-data.md +63 -0
  228. data/brutrb.com/space-time-continuum.md +85 -0
  229. data/brutrb.com/tutorial.md +3 -0
  230. data/brutrb.com/unit-tests.md +148 -0
  231. data/docker-compose.dx.yml +6 -3
  232. data/docs/404.html +21 -0
  233. data/docs/CNAME +1 -0
  234. data/docs/ai.html +24 -0
  235. data/docs/api/Brut/BackEnd/SeedData.html +493 -0
  236. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +214 -0
  237. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +125 -0
  238. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +125 -0
  239. data/docs/api/Brut/BackEnd/Sidekiq.html +125 -0
  240. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +414 -0
  241. data/docs/api/Brut/BackEnd/Validators.html +128 -0
  242. data/docs/api/Brut/BackEnd.html +132 -0
  243. data/docs/api/Brut/CLI/App.html +1576 -0
  244. data/docs/api/Brut/CLI/AppRunner.html +491 -0
  245. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +264 -0
  246. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +306 -0
  247. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +262 -0
  248. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +314 -0
  249. data/docs/api/Brut/CLI/Apps/BuildAssets.html +183 -0
  250. data/docs/api/Brut/CLI/Apps/DB/Create.html +365 -0
  251. data/docs/api/Brut/CLI/Apps/DB/Drop.html +357 -0
  252. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +383 -0
  253. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +335 -0
  254. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +329 -0
  255. data/docs/api/Brut/CLI/Apps/DB/Seed.html +347 -0
  256. data/docs/api/Brut/CLI/Apps/DB/Status.html +383 -0
  257. data/docs/api/Brut/CLI/Apps/DB.html +183 -0
  258. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +303 -0
  259. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +512 -0
  260. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +398 -0
  261. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +374 -0
  262. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +410 -0
  263. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +262 -0
  264. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +303 -0
  265. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +480 -0
  266. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +450 -0
  267. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +380 -0
  268. data/docs/api/Brut/CLI/Apps/Scaffold.html +253 -0
  269. data/docs/api/Brut/CLI/Apps/Test/Audit.html +464 -0
  270. data/docs/api/Brut/CLI/Apps/Test/E2e.html +407 -0
  271. data/docs/api/Brut/CLI/Apps/Test/JS.html +262 -0
  272. data/docs/api/Brut/CLI/Apps/Test/Run.html +578 -0
  273. data/docs/api/Brut/CLI/Apps/Test.html +253 -0
  274. data/docs/api/Brut/CLI/Apps.html +125 -0
  275. data/docs/api/Brut/CLI/Command.html +2342 -0
  276. data/docs/api/Brut/CLI/Error.html +139 -0
  277. data/docs/api/Brut/CLI/ExecutionResults/Result.html +664 -0
  278. data/docs/api/Brut/CLI/ExecutionResults.html +675 -0
  279. data/docs/api/Brut/CLI/Executor.html +430 -0
  280. data/docs/api/Brut/CLI/InvalidOption.html +245 -0
  281. data/docs/api/Brut/CLI/Options.html +753 -0
  282. data/docs/api/Brut/CLI/Output.html +699 -0
  283. data/docs/api/Brut/CLI/SystemExecError.html +451 -0
  284. data/docs/api/Brut/CLI.html +263 -0
  285. data/docs/api/Brut/FactoryBot.html +225 -0
  286. data/docs/api/Brut/Framework/App.html +1097 -0
  287. data/docs/api/Brut/Framework/Config.html +1045 -0
  288. data/docs/api/Brut/Framework/Container.html +1379 -0
  289. data/docs/api/Brut/Framework/Error.html +140 -0
  290. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +144 -0
  291. data/docs/api/Brut/Framework/Errors/Bug.html +234 -0
  292. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +257 -0
  293. data/docs/api/Brut/Framework/Errors/MissingParameter.html +273 -0
  294. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +471 -0
  295. data/docs/api/Brut/Framework/Errors/NotFound.html +308 -0
  296. data/docs/api/Brut/Framework/Errors/NotImplemented.html +234 -0
  297. data/docs/api/Brut/Framework/Errors.html +328 -0
  298. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +392 -0
  299. data/docs/api/Brut/Framework/MCP.html +861 -0
  300. data/docs/api/Brut/Framework/ProjectEnvironment.html +648 -0
  301. data/docs/api/Brut/Framework.html +129 -0
  302. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +317 -0
  303. data/docs/api/Brut/FrontEnd/Component/Helpers.html +326 -0
  304. data/docs/api/Brut/FrontEnd/Component.html +365 -0
  305. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +470 -0
  306. data/docs/api/Brut/FrontEnd/Components/FormTag.html +518 -0
  307. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +317 -0
  308. data/docs/api/Brut/FrontEnd/Components/Input.html +195 -0
  309. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +339 -0
  310. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +660 -0
  311. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +417 -0
  312. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +918 -0
  313. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +651 -0
  314. data/docs/api/Brut/FrontEnd/Components/Inputs.html +125 -0
  315. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +367 -0
  316. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +336 -0
  317. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +655 -0
  318. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +352 -0
  319. data/docs/api/Brut/FrontEnd/Components.html +135 -0
  320. data/docs/api/Brut/FrontEnd/Download.html +467 -0
  321. data/docs/api/Brut/FrontEnd/Flash.html +1150 -0
  322. data/docs/api/Brut/FrontEnd/Form.html +1157 -0
  323. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +634 -0
  324. data/docs/api/Brut/FrontEnd/Forms/Input.html +615 -0
  325. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +547 -0
  326. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +1318 -0
  327. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +609 -0
  328. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +587 -0
  329. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +613 -0
  330. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +582 -0
  331. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +609 -0
  332. data/docs/api/Brut/FrontEnd/Forms.html +127 -0
  333. data/docs/api/Brut/FrontEnd/GenericResponse.html +377 -0
  334. data/docs/api/Brut/FrontEnd/Handler.html +442 -0
  335. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +318 -0
  336. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +336 -0
  337. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +399 -0
  338. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +354 -0
  339. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +151 -0
  340. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +315 -0
  341. data/docs/api/Brut/FrontEnd/Handlers.html +125 -0
  342. data/docs/api/Brut/FrontEnd/HandlingResults.html +339 -0
  343. data/docs/api/Brut/FrontEnd/HttpMethod.html +661 -0
  344. data/docs/api/Brut/FrontEnd/HttpStatus.html +496 -0
  345. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +284 -0
  346. data/docs/api/Brut/FrontEnd/Layout.html +318 -0
  347. data/docs/api/Brut/FrontEnd/Middleware.html +135 -0
  348. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +288 -0
  349. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +292 -0
  350. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +324 -0
  351. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +372 -0
  352. data/docs/api/Brut/FrontEnd/Middlewares.html +125 -0
  353. data/docs/api/Brut/FrontEnd/Page.html +773 -0
  354. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +797 -0
  355. data/docs/api/Brut/FrontEnd/Pages.html +125 -0
  356. data/docs/api/Brut/FrontEnd/RequestContext.html +1312 -0
  357. data/docs/api/Brut/FrontEnd/RouteHook.html +424 -0
  358. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +242 -0
  359. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +249 -0
  360. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +264 -0
  361. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +261 -0
  362. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +284 -0
  363. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +252 -0
  364. data/docs/api/Brut/FrontEnd/RouteHooks.html +115 -0
  365. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +227 -0
  366. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +305 -0
  367. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +324 -0
  368. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +319 -0
  369. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +315 -0
  370. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +315 -0
  371. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +327 -0
  372. data/docs/api/Brut/FrontEnd/Routing/Route.html +761 -0
  373. data/docs/api/Brut/FrontEnd/Routing.html +927 -0
  374. data/docs/api/Brut/FrontEnd/Session.html +1195 -0
  375. data/docs/api/Brut/FrontEnd.html +134 -0
  376. data/docs/api/Brut/I18n/BaseMethods.html +931 -0
  377. data/docs/api/Brut/I18n/ForBackEnd.html +302 -0
  378. data/docs/api/Brut/I18n/ForCLI.html +302 -0
  379. data/docs/api/Brut/I18n/ForHTML.html +296 -0
  380. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +316 -0
  381. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +930 -0
  382. data/docs/api/Brut/I18n.html +127 -0
  383. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +435 -0
  384. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +286 -0
  385. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +302 -0
  386. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +864 -0
  387. data/docs/api/Brut/Instrumentation.html +126 -0
  388. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +532 -0
  389. data/docs/api/Brut/SinatraHelpers.html +281 -0
  390. data/docs/api/Brut/SpecSupport/ClockSupport.html +383 -0
  391. data/docs/api/Brut/SpecSupport/ComponentSupport.html +502 -0
  392. data/docs/api/Brut/SpecSupport/E2ETestServer.html +503 -0
  393. data/docs/api/Brut/SpecSupport/E2eSupport.html +142 -0
  394. data/docs/api/Brut/SpecSupport/EnhancedNode.html +403 -0
  395. data/docs/api/Brut/SpecSupport/FlashSupport.html +278 -0
  396. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +401 -0
  397. data/docs/api/Brut/SpecSupport/GeneralSupport.html +195 -0
  398. data/docs/api/Brut/SpecSupport/HandlerSupport.html +160 -0
  399. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +553 -0
  400. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +439 -0
  401. data/docs/api/Brut/SpecSupport/Matchers.html +125 -0
  402. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +335 -0
  403. data/docs/api/Brut/SpecSupport/RSpecSetup.html +602 -0
  404. data/docs/api/Brut/SpecSupport/SessionSupport.html +196 -0
  405. data/docs/api/Brut/SpecSupport.html +129 -0
  406. data/docs/api/Brut.html +225 -0
  407. data/docs/api/Clock.html +603 -0
  408. data/docs/api/RichString.html +968 -0
  409. data/docs/api/SemanticLogger/Appender/Async.html +219 -0
  410. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +115 -0
  411. data/docs/api/Sequel/Extensions/BrutMigrations.html +533 -0
  412. data/docs/api/Sequel/Extensions.html +117 -0
  413. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +105 -0
  414. data/docs/api/Sequel/Plugins/CreatedAt.html +125 -0
  415. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +207 -0
  416. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +186 -0
  417. data/docs/api/Sequel/Plugins/ExternalId.html +218 -0
  418. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +202 -0
  419. data/docs/api/Sequel/Plugins/FindBang.html +125 -0
  420. data/docs/api/Sequel/Plugins.html +117 -0
  421. data/docs/api/Sequel.html +117 -0
  422. data/docs/api/_index.html +1553 -0
  423. data/docs/api/class_list.html +54 -0
  424. data/docs/api/css/common.css +1 -0
  425. data/docs/api/css/full_list.css +58 -0
  426. data/docs/api/css/style.css +503 -0
  427. data/docs/api/file.README.html +127 -0
  428. data/docs/api/file_list.html +59 -0
  429. data/docs/api/frames.html +22 -0
  430. data/docs/api/index.html +127 -0
  431. data/docs/api/js/app.js +344 -0
  432. data/docs/api/js/full_list.js +242 -0
  433. data/docs/api/js/jquery.js +4 -0
  434. data/docs/api/method_list.html +3998 -0
  435. data/docs/api/top-level-namespace.html +112 -0
  436. data/docs/assets/ai.md.tZrjP9im.js +1 -0
  437. data/docs/assets/ai.md.tZrjP9im.lean.js +1 -0
  438. data/docs/assets/app.D_yaTITQ.js +1 -0
  439. data/docs/assets/assets.md.D3wunzLx.js +19 -0
  440. data/docs/assets/assets.md.D3wunzLx.lean.js +1 -0
  441. data/docs/assets/brut-js.md.o2DAO2s2.js +12 -0
  442. data/docs/assets/brut-js.md.o2DAO2s2.lean.js +1 -0
  443. data/docs/assets/business-logic.md.BY4hGy0m.js +1 -0
  444. data/docs/assets/business-logic.md.BY4hGy0m.lean.js +1 -0
  445. data/docs/assets/chunks/@localSearchIndexroot.BsN5i0Fi.js +1 -0
  446. data/docs/assets/chunks/VPLocalSearchBox.B2-ZzyTY.js +8 -0
  447. data/docs/assets/chunks/framework.1L-BeKqY.js +18 -0
  448. data/docs/assets/chunks/theme.CfGFVRvE.js +2 -0
  449. data/docs/assets/cli.md.RmeA2b0i.js +127 -0
  450. data/docs/assets/cli.md.RmeA2b0i.lean.js +1 -0
  451. data/docs/assets/components.md.eCttGlN-.js +104 -0
  452. data/docs/assets/components.md.eCttGlN-.lean.js +1 -0
  453. data/docs/assets/configuration.md.BRriU0cL.js +78 -0
  454. data/docs/assets/configuration.md.BRriU0cL.lean.js +1 -0
  455. data/docs/assets/css.md.DJgj2clw.js +21 -0
  456. data/docs/assets/css.md.DJgj2clw.lean.js +1 -0
  457. data/docs/assets/custom-element-tests.md.BrYJQEl3.js +69 -0
  458. data/docs/assets/custom-element-tests.md.BrYJQEl3.lean.js +1 -0
  459. data/docs/assets/database-access.md.C7l-Vuvb.js +63 -0
  460. data/docs/assets/database-access.md.C7l-Vuvb.lean.js +1 -0
  461. data/docs/assets/database-schema.md.BUjR0VS1.js +63 -0
  462. data/docs/assets/database-schema.md.BUjR0VS1.lean.js +1 -0
  463. data/docs/assets/deployment.md.Dbka4OTr.js +1 -0
  464. data/docs/assets/deployment.md.Dbka4OTr.lean.js +1 -0
  465. data/docs/assets/dev-env-overview.Gj7NWM8-.png +0 -0
  466. data/docs/assets/dev-env-protocol.DysDAtnz.png +0 -0
  467. data/docs/assets/dev-environment.md.BNc8AYiK.js +11 -0
  468. data/docs/assets/dev-environment.md.BNc8AYiK.lean.js +1 -0
  469. data/docs/assets/doc-conventions.md.DCfRXXi-.js +1 -0
  470. data/docs/assets/doc-conventions.md.DCfRXXi-.lean.js +1 -0
  471. data/docs/assets/end-to-end-tests.md.yfQHC0b5.js +26 -0
  472. data/docs/assets/end-to-end-tests.md.yfQHC0b5.lean.js +1 -0
  473. data/docs/assets/flash-and-session.md.BXY8RvT0.js +93 -0
  474. data/docs/assets/flash-and-session.md.BXY8RvT0.lean.js +1 -0
  475. data/docs/assets/forms.md.CBTYQ_Cz.js +379 -0
  476. data/docs/assets/forms.md.CBTYQ_Cz.lean.js +1 -0
  477. data/docs/assets/getting-started.md.Bz2s1Vjb.js +2 -0
  478. data/docs/assets/getting-started.md.Bz2s1Vjb.lean.js +1 -0
  479. data/docs/assets/handlers.md.089DVD3v.js +69 -0
  480. data/docs/assets/handlers.md.089DVD3v.lean.js +1 -0
  481. data/docs/assets/hooks.md.C4-moMny.js +80 -0
  482. data/docs/assets/hooks.md.C4-moMny.lean.js +1 -0
  483. data/docs/assets/i18n.md.Do9i1qWl.js +23 -0
  484. data/docs/assets/i18n.md.Do9i1qWl.lean.js +1 -0
  485. data/docs/assets/index.md.B28EwVpq.js +1 -0
  486. data/docs/assets/index.md.B28EwVpq.lean.js +1 -0
  487. data/docs/assets/instrumentation.md.CL6ax7nT.js +35 -0
  488. data/docs/assets/instrumentation.md.CL6ax7nT.lean.js +1 -0
  489. data/docs/assets/javascript.md.GWbhRS51.js +31 -0
  490. data/docs/assets/javascript.md.GWbhRS51.lean.js +1 -0
  491. data/docs/assets/jobs.md.S-2amAYp.js +1 -0
  492. data/docs/assets/jobs.md.S-2amAYp.lean.js +1 -0
  493. data/docs/assets/keyword-injection.md.Dt2tKREs.js +25 -0
  494. data/docs/assets/keyword-injection.md.Dt2tKREs.lean.js +1 -0
  495. data/docs/assets/markdown-examples.md.CCFEQO44.js +33 -0
  496. data/docs/assets/markdown-examples.md.CCFEQO44.lean.js +1 -0
  497. data/docs/assets/middleware.md.Czz_UlJN.js +20 -0
  498. data/docs/assets/middleware.md.Czz_UlJN.lean.js +1 -0
  499. data/docs/assets/not-released.md.BBy28McC.js +1 -0
  500. data/docs/assets/not-released.md.BBy28McC.lean.js +1 -0
  501. data/docs/assets/overview.Da81cB9R.png +0 -0
  502. data/docs/assets/overview.md.CDalkuxV.js +133 -0
  503. data/docs/assets/overview.md.CDalkuxV.lean.js +1 -0
  504. data/docs/assets/pages.md.BE3kfOc5.js +122 -0
  505. data/docs/assets/pages.md.BE3kfOc5.lean.js +1 -0
  506. data/docs/assets/routes.md.BMM7peut.js +29 -0
  507. data/docs/assets/routes.md.BMM7peut.lean.js +1 -0
  508. data/docs/assets/security.md.C668yXCi.js +1 -0
  509. data/docs/assets/security.md.C668yXCi.lean.js +1 -0
  510. data/docs/assets/seed-data.md.BvFZlqIk.js +14 -0
  511. data/docs/assets/seed-data.md.BvFZlqIk.lean.js +1 -0
  512. data/docs/assets/spa.qejUdp-5.png +0 -0
  513. data/docs/assets/space-time-continuum.md.KPUIKysQ.js +1 -0
  514. data/docs/assets/space-time-continuum.md.KPUIKysQ.lean.js +1 -0
  515. data/docs/assets/style.D73IYGCX.css +1 -0
  516. data/docs/assets/tutorial.md.BnoGjrdK.js +1 -0
  517. data/docs/assets/tutorial.md.BnoGjrdK.lean.js +1 -0
  518. data/docs/assets/unit-tests.md.DUGrnLj5.js +13 -0
  519. data/docs/assets/unit-tests.md.DUGrnLj5.lean.js +1 -0
  520. data/docs/assets/workspace-protocol.C0gXsoDb.png +0 -0
  521. data/docs/assets.html +42 -0
  522. data/docs/brut-css/brut.css +1 -0
  523. data/docs/brut-css/brut.max.css +22372 -0
  524. data/docs/brut-css/classes/appearances.html +783 -0
  525. data/docs/brut-css/classes/background-colors.html +3529 -0
  526. data/docs/brut-css/classes/border-colors.html +3529 -0
  527. data/docs/brut-css/classes/borders.html +2293 -0
  528. data/docs/brut-css/classes/dimensions.html +2581 -0
  529. data/docs/brut-css/classes/flex.html +917 -0
  530. data/docs/brut-css/classes/foreground-colors.html +3261 -0
  531. data/docs/brut-css/classes/junk-drawer.html +431 -0
  532. data/docs/brut-css/classes/layout.html +668 -0
  533. data/docs/brut-css/classes/lists.html +331 -0
  534. data/docs/brut-css/classes/positioning.html +1751 -0
  535. data/docs/brut-css/classes/spacings.html +2633 -0
  536. data/docs/brut-css/classes/typography.html +2206 -0
  537. data/docs/brut-css/customization/advanced-configuration.html +204 -0
  538. data/docs/brut-css/customization/breakpoints.html +227 -0
  539. data/docs/brut-css/customization/design-system.html +197 -0
  540. data/docs/brut-css/customization/pseudo-classes.html +228 -0
  541. data/docs/brut-css/docs.css +98 -0
  542. data/docs/brut-css/getting-started/core-concepts.html +234 -0
  543. data/docs/brut-css/getting-started/installation.html +190 -0
  544. data/docs/brut-css/getting-started/overview.html +210 -0
  545. data/docs/brut-css/getting-started/simple-example.html +285 -0
  546. data/docs/brut-css/index.html +193 -0
  547. data/docs/brut-css/prism-twilight.min.css +1 -0
  548. data/docs/brut-css/properties/colors.html +1548 -0
  549. data/docs/brut-css/properties/spacings.html +614 -0
  550. data/docs/brut-css/properties/typography.html +777 -0
  551. data/docs/brut-js/api/AjaxSubmit.html +374 -0
  552. data/docs/brut-js/api/AjaxSubmit.js.html +435 -0
  553. data/docs/brut-js/api/Autosubmit.html +192 -0
  554. data/docs/brut-js/api/Autosubmit.js.html +114 -0
  555. data/docs/brut-js/api/BaseCustomElement.html +1091 -0
  556. data/docs/brut-js/api/BaseCustomElement.js.html +312 -0
  557. data/docs/brut-js/api/BrutCustomElements.html +172 -0
  558. data/docs/brut-js/api/BufferedLogger.html +173 -0
  559. data/docs/brut-js/api/ConfirmSubmit.html +278 -0
  560. data/docs/brut-js/api/ConfirmSubmit.js.html +167 -0
  561. data/docs/brut-js/api/ConfirmationDialog.html +425 -0
  562. data/docs/brut-js/api/ConfirmationDialog.js.html +194 -0
  563. data/docs/brut-js/api/ConstraintViolationMessage.html +448 -0
  564. data/docs/brut-js/api/ConstraintViolationMessage.js.html +176 -0
  565. data/docs/brut-js/api/ConstraintViolationMessages.html +590 -0
  566. data/docs/brut-js/api/ConstraintViolationMessages.js.html +149 -0
  567. data/docs/brut-js/api/CopyToClipboard.html +345 -0
  568. data/docs/brut-js/api/CopyToClipboard.js.html +147 -0
  569. data/docs/brut-js/api/Form.html +294 -0
  570. data/docs/brut-js/api/Form.js.html +202 -0
  571. data/docs/brut-js/api/I18nTranslation.html +409 -0
  572. data/docs/brut-js/api/I18nTranslation.js.html +112 -0
  573. data/docs/brut-js/api/LocaleDetection.html +312 -0
  574. data/docs/brut-js/api/LocaleDetection.js.html +168 -0
  575. data/docs/brut-js/api/Logger.html +702 -0
  576. data/docs/brut-js/api/Logger.js.html +141 -0
  577. data/docs/brut-js/api/Message.html +238 -0
  578. data/docs/brut-js/api/Message.js.html +107 -0
  579. data/docs/brut-js/api/PrefixedLogger.html +369 -0
  580. data/docs/brut-js/api/RichString.html +1049 -0
  581. data/docs/brut-js/api/RichString.js.html +164 -0
  582. data/docs/brut-js/api/Tabs.html +295 -0
  583. data/docs/brut-js/api/Tabs.js.html +219 -0
  584. data/docs/brut-js/api/Tracing.html +277 -0
  585. data/docs/brut-js/api/Tracing.js.html +298 -0
  586. data/docs/brut-js/api/external-CustomElementRegistry.html +140 -0
  587. data/docs/brut-js/api/external-Performance.html +138 -0
  588. data/docs/brut-js/api/external-Promise.html +138 -0
  589. data/docs/brut-js/api/external-ValidityState.html +138 -0
  590. data/docs/brut-js/api/external-Window.html +233 -0
  591. data/docs/brut-js/api/external-fetch.html +138 -0
  592. data/docs/brut-js/api/global.html +400 -0
  593. data/docs/brut-js/api/index.html +168 -0
  594. data/docs/brut-js/api/index.js.html +181 -0
  595. data/docs/brut-js/api/module-testing.html +383 -0
  596. data/docs/brut-js/api/scripts/linenumber.js +25 -0
  597. data/docs/brut-js/api/scripts/prettify/Apache-License-2.0.txt +202 -0
  598. data/docs/brut-js/api/scripts/prettify/lang-css.js +2 -0
  599. data/docs/brut-js/api/scripts/prettify/prettify.js +28 -0
  600. data/docs/brut-js/api/styles/jsdoc-default.css +327 -0
  601. data/docs/brut-js/api/styles/prettify-jsdoc.css +111 -0
  602. data/docs/brut-js/api/styles/prettify-tomorrow.css +132 -0
  603. data/docs/brut-js/api/testing.AssetMetadata.html +172 -0
  604. data/docs/brut-js/api/testing.AssetMetadataLoader.html +171 -0
  605. data/docs/brut-js/api/testing.CustomElementTest.html +679 -0
  606. data/docs/brut-js/api/testing.DOMCreator.html +171 -0
  607. data/docs/brut-js/api/testing_AssetMetadata.js.html +86 -0
  608. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +76 -0
  609. data/docs/brut-js/api/testing_CustomElementTest.js.html +286 -0
  610. data/docs/brut-js/api/testing_DOMCreator.js.html +96 -0
  611. data/docs/brut-js/api/testing_index.js.html +99 -0
  612. data/docs/brut-js.html +35 -0
  613. data/docs/business-logic.html +24 -0
  614. data/docs/cli.html +150 -0
  615. data/docs/components.html +127 -0
  616. data/docs/configuration.html +101 -0
  617. data/docs/css.html +44 -0
  618. data/docs/custom-element-tests.html +92 -0
  619. data/docs/database-access.html +86 -0
  620. data/docs/database-schema.html +86 -0
  621. data/docs/deployment.html +24 -0
  622. data/docs/dev-environment.html +34 -0
  623. data/docs/doc-conventions.html +24 -0
  624. data/docs/end-to-end-tests.html +49 -0
  625. data/docs/flash-and-session.html +116 -0
  626. data/docs/forms.html +402 -0
  627. data/docs/getting-started.html +25 -0
  628. data/docs/handlers.html +92 -0
  629. data/docs/hashmap.json +1 -0
  630. data/docs/hooks.html +103 -0
  631. data/docs/i18n.html +46 -0
  632. data/docs/images/logo-300.png +0 -0
  633. data/docs/images/logo.png +0 -0
  634. data/docs/index.html +24 -0
  635. data/docs/instrumentation.html +58 -0
  636. data/docs/javascript.html +54 -0
  637. data/docs/jobs.html +24 -0
  638. data/docs/keyword-injection.html +48 -0
  639. data/docs/markdown-examples.html +56 -0
  640. data/docs/middleware.html +43 -0
  641. data/docs/not-released.html +24 -0
  642. data/docs/overview.html +156 -0
  643. data/docs/pages.html +145 -0
  644. data/docs/routes.html +52 -0
  645. data/docs/security.html +24 -0
  646. data/docs/seed-data.html +37 -0
  647. data/docs/space-time-continuum.html +24 -0
  648. data/docs/tutorial.html +24 -0
  649. data/docs/unit-tests.html +36 -0
  650. data/docs/vp-icons.css +1 -0
  651. data/lib/brut/back_end/seed_data.rb +19 -2
  652. data/lib/brut/back_end/sidekiq/middlewares/server.rb +2 -1
  653. data/lib/brut/back_end/sidekiq/middlewares.rb +2 -1
  654. data/lib/brut/back_end/sidekiq.rb +2 -1
  655. data/lib/brut/back_end/validator.rb +5 -1
  656. data/lib/brut/back_end.rb +4 -2
  657. data/lib/brut/cli/app_runner.rb +1 -1
  658. data/lib/brut/cli/apps/test.rb +5 -0
  659. data/lib/brut/cli.rb +4 -3
  660. data/lib/brut/factory_bot.rb +0 -5
  661. data/lib/brut/framework/app.rb +70 -5
  662. data/lib/brut/framework/config.rb +5 -3
  663. data/lib/brut/framework/container.rb +3 -2
  664. data/lib/brut/framework/errors.rb +12 -4
  665. data/lib/brut/framework/mcp.rb +58 -1
  666. data/lib/brut/framework/project_environment.rb +6 -2
  667. data/lib/brut/framework.rb +1 -1
  668. data/lib/brut/front_end/component.rb +69 -71
  669. data/lib/brut/front_end/components/constraint_violations.rb +1 -4
  670. data/lib/brut/front_end/components/form_tag.rb +1 -1
  671. data/lib/brut/front_end/components/input.rb +3 -3
  672. data/lib/brut/front_end/components/inputs/csrf_token.rb +1 -1
  673. data/lib/brut/front_end/components/inputs/{text_field.rb → input_tag.rb} +7 -9
  674. data/lib/brut/front_end/components/inputs/radio_button.rb +1 -1
  675. data/lib/brut/front_end/components/inputs/select_tag_with_options.rb +187 -0
  676. data/lib/brut/front_end/components/inputs/{textarea.rb → textarea_tag.rb} +2 -2
  677. data/lib/brut/front_end/components/time_tag.rb +2 -1
  678. data/lib/brut/front_end/form.rb +4 -4
  679. data/lib/brut/front_end/forms/input.rb +2 -1
  680. data/lib/brut/front_end/forms/input_definition.rb +5 -2
  681. data/lib/brut/front_end/forms/radio_button_group_input.rb +2 -1
  682. data/lib/brut/front_end/forms/radio_button_group_input_definition.rb +2 -2
  683. data/lib/brut/front_end/forms/select_input.rb +2 -4
  684. data/lib/brut/front_end/forms/select_input_definition.rb +2 -2
  685. data/lib/brut/front_end/handler.rb +28 -26
  686. data/lib/brut/front_end/handlers/csp_reporting_handler.rb +5 -2
  687. data/lib/brut/front_end/handlers/instrumentation_handler.rb +8 -4
  688. data/lib/brut/front_end/handlers/locale_detection_handler.rb +9 -5
  689. data/lib/brut/front_end/handlers/missing_handler.rb +5 -2
  690. data/lib/brut/front_end/layout.rb +16 -0
  691. data/lib/brut/front_end/page.rb +52 -29
  692. data/lib/brut/front_end/request_context.rb +3 -2
  693. data/lib/brut/front_end/routing.rb +5 -1
  694. data/lib/brut/front_end.rb +4 -13
  695. data/lib/brut/i18n/base_methods.rb +167 -79
  696. data/lib/brut/i18n/for_back_end.rb +4 -0
  697. data/lib/brut/i18n/for_cli.rb +4 -0
  698. data/lib/brut/i18n/for_html.rb +32 -4
  699. data/lib/brut/i18n/http_accept_language.rb +47 -0
  700. data/lib/brut/instrumentation/open_telemetry.rb +36 -1
  701. data/lib/brut/instrumentation.rb +3 -5
  702. data/lib/brut/sinatra_helpers.rb +11 -3
  703. data/lib/brut/spec_support/component_support.rb +30 -16
  704. data/lib/brut/spec_support/e2e_support.rb +1 -1
  705. data/lib/brut/spec_support/e2e_test_server.rb +3 -0
  706. data/lib/brut/spec_support/general_support.rb +3 -0
  707. data/lib/brut/spec_support/handler_support.rb +6 -1
  708. data/lib/brut/spec_support/matcher.rb +1 -0
  709. data/lib/brut/spec_support/matchers/be_page_for.rb +1 -0
  710. data/lib/brut/spec_support/matchers/have_html_attribute.rb +1 -0
  711. data/lib/brut/spec_support/matchers/have_i18n_string.rb +2 -5
  712. data/lib/brut/spec_support/matchers/have_link_to.rb +1 -0
  713. data/lib/brut/spec_support/matchers/have_redirected_to.rb +1 -0
  714. data/lib/brut/spec_support/matchers/have_rendered.rb +1 -0
  715. data/lib/brut/spec_support/matchers/have_returned_rack_response.rb +44 -0
  716. data/lib/brut/spec_support.rb +1 -1
  717. data/lib/brut/version.rb +1 -1
  718. data/lib/brut.rb +5 -4
  719. data/lib/sequel/extensions/brut_migrations.rb +1 -1
  720. metadata +648 -13
  721. data/doc-src/architecture.md +0 -102
  722. data/doc-src/assets.md +0 -98
  723. data/doc-src/forms.md +0 -214
  724. data/doc-src/handlers.md +0 -83
  725. data/doc-src/javascript.md +0 -265
  726. data/doc-src/pages.md +0 -210
  727. data/doc-src/route-hooks.md +0 -59
  728. data/lib/brut/front_end/components/inputs/select.rb +0 -117
@@ -0,0 +1,783 @@
1
+ <!doctype html>
2
+ <html class="ma-0 pa-0 h-100" lang="en">
3
+ <head>
4
+ <link rel="stylesheet" href="/brut-css/brut.css">
5
+ <link rel="stylesheet" href="/brut-css/docs.css">
6
+ <link rel="stylesheet" href="/brut-css/prism-twilight.min.css">
7
+ </head>
8
+
9
+ <body class="flex flex-column ff-sans ma-0 pa-0 h-100">
10
+ <header class="pos-sticky top-0 bg-gray-700 pa-3 z-5 shadow-2">
11
+ <div class="flex gap-3 justify-between items-center">
12
+ <h1><a href="/brut-css" class="black tdn">BrutCSS Reference Documentation</a></h1>
13
+ <ul class="lst-none pl-0 flex gap-2 justify-end items-center">
14
+ <form class="flex items-center gap-1 mr-3">
15
+ <label>
16
+ <input type="search" placeholder="e.g. padding-left" class="pa-2 br-2 ba bc-gray-600 bg-white-ish gray-200">
17
+ <span class="sr-only">Search term</span>
18
+ </label>
19
+ <button class="ph-3 pv-2 bg-white gray-100 ba bc-gray-500 br-3 hover-bg-gray-800 pointer flex items-center justify-between">
20
+ <span class="mr-2">Search</span>
21
+ <kbd>&#8984;</kbd>
22
+ <kbd>/</kbd>
23
+ </button>
24
+ </form>
25
+ <li><a href="/" class="red-200 tdn hover-tdu">BrutRB</a></li>
26
+ <span aria-hidden="true">&middot;</span>
27
+ <li><a href="/brut-js" class="gray-200 tdn hover-tdu">BrutJS</a></li>
28
+ <span aria-hidden="true">&middot;</span>
29
+ <li><a href="https://github.com/thirdtank/brut/tree/main/brut-css" class="gray-200 tdn hover-tdu">Code</a></li>
30
+ </ul>
31
+ </div>
32
+ </header>
33
+ <main class="flex overflow-hidden flex-grow-1 flex-shrink-1 flex-basis-0 pos-relative">
34
+ <nav class="overflow-y-auto ph-3 pb-2 pt-4 w-20 bg-gray-800 gray-200 h-100">
35
+
36
+ <h3>Getting Started</h3>
37
+ <ul class="pl-3">
38
+
39
+ <li>
40
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/getting-started/overview.html">Overview</a>
41
+ </li>
42
+
43
+ <li>
44
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/getting-started/installation.html">Installation</a>
45
+ </li>
46
+
47
+ <li>
48
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/getting-started/core-concepts.html">Core Concepts</a>
49
+ </li>
50
+
51
+ <li>
52
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/getting-started/simple-example.html">Simple Example</a>
53
+ </li>
54
+
55
+ </ul>
56
+
57
+ <h3>Properties</h3>
58
+ <ul class="pl-3">
59
+
60
+ <li>
61
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/properties/colors.html">Colors</a>
62
+ </li>
63
+
64
+ <li>
65
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/properties/spacings.html">Spacings</a>
66
+ </li>
67
+
68
+ <li>
69
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/properties/typography.html">Typography</a>
70
+ </li>
71
+
72
+ </ul>
73
+
74
+ <h3>Classes</h3>
75
+ <ul class="pl-3">
76
+
77
+ <li>
78
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/appearances.html">Appearances</a>
79
+ </li>
80
+
81
+ <li>
82
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/borders.html">Borders</a>
83
+ </li>
84
+
85
+ <li>
86
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/foreground-colors.html">Foreground Colors</a>
87
+ </li>
88
+
89
+ <li>
90
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/background-colors.html">Background Colors</a>
91
+ </li>
92
+
93
+ <li>
94
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/border-colors.html">Border Colors</a>
95
+ </li>
96
+
97
+ <li>
98
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/dimensions.html">Dimensions</a>
99
+ </li>
100
+
101
+ <li>
102
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/flex.html">Flex</a>
103
+ </li>
104
+
105
+ <li>
106
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/layout.html">Layout</a>
107
+ </li>
108
+
109
+ <li>
110
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/lists.html">Lists</a>
111
+ </li>
112
+
113
+ <li>
114
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/positioning.html">Positioning</a>
115
+ </li>
116
+
117
+ <li>
118
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/spacings.html">Spacings</a>
119
+ </li>
120
+
121
+ <li>
122
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/typography.html">Typography</a>
123
+ </li>
124
+
125
+ <li>
126
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/classes/junk-drawer.html">Junk Drawer</a>
127
+ </li>
128
+
129
+ </ul>
130
+
131
+ <h3>Customization</h3>
132
+ <ul class="pl-3">
133
+
134
+ <li>
135
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/customization/design-system.html">Design System</a>
136
+ </li>
137
+
138
+ <li>
139
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/customization/breakpoints.html">Breakpoints</a>
140
+ </li>
141
+
142
+ <li>
143
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/customization/pseudo-classes.html">Pseudo Classes</a>
144
+ </li>
145
+
146
+ <li>
147
+ <a class="black-ish tdu tdn-ns hover-tdu-ns" href="/brut-css/customization/advanced-configuration.html">Advanced Configuration</a>
148
+ </li>
149
+
150
+ </ul>
151
+
152
+
153
+ </nav>
154
+ <section class="overflow-y-auto pt-4 h-100 flex-grow-1 flex-shrink-1 flex-basis-0 flex flex-column">
155
+ <div class="ph-3 pv-2 flex items-start gap-2 justify-between">
156
+
157
+ <article>
158
+ <h2 class="}-5">Appearances Classes</h2>
159
+
160
+ <p>Appearannce and decoration-type classes beyond what you’d have in typography, colors, or borders.</p>
161
+
162
+
163
+
164
+ <h3 class="f-2 b">See Also</h3>
165
+ <ul class="see-also">
166
+
167
+ <li><p><a href="/brut-css/classes/borders.html">Borders</a></p>
168
+ </li>
169
+
170
+ <li><p><a href="/brut-css/classes/foreground-colors.html">Foreground Colors</a></p>
171
+ </li>
172
+
173
+ <li><p><a href="/brut-css/classes/typography.html">Typography</a></p>
174
+ </li>
175
+
176
+ </ul>
177
+
178
+
179
+ <h3 class="f-5 mt-4" id="class-group:appearance">Appearance</h3>
180
+ <p class="p">
181
+ <p>The <code>apperance</code> property.</p>
182
+
183
+ </p>
184
+
185
+
186
+ <div class="mt-4 flex gap-3 items-center justify-between" id="appearance-none">
187
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.appearance-none</code></h4>
188
+ <pre class="f-3 highlighted-code"><span class="token selector">.appearance-none</span> <span class="token punctuation">{</span>
189
+ <span class="token property">appearance</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span>
190
+ <span class="token punctuation">}</span></pre>
191
+ </div>
192
+ <div class="ml-3">
193
+ <p class="p">
194
+
195
+ </p>
196
+
197
+
198
+ </div>
199
+
200
+ <div class="mt-4 flex gap-3 items-center justify-between" id="appearance-auto">
201
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.appearance-auto</code></h4>
202
+ <pre class="f-3 highlighted-code"><span class="token selector">.appearance-auto</span> <span class="token punctuation">{</span>
203
+ <span class="token property">appearance</span><span class="token punctuation">:</span> auto<span class="token punctuation">;</span>
204
+ <span class="token punctuation">}</span></pre>
205
+ </div>
206
+ <div class="ml-3">
207
+ <p class="p">
208
+
209
+ </p>
210
+
211
+
212
+ </div>
213
+
214
+
215
+ <h3 class="f-5 mt-4" id="class-scale:box-shadow">Box Shadow</h3>
216
+ <p class="p">
217
+ <p>Box shadows. This is a six-step scale with 1 being the “lowest” shadow and 6 being very high and very scattered. In theory something with <code>shadow-1</code> will look higher than something with <code>shadow-none</code>, but lower than something with <code>shadow-3</code>.</p>
218
+
219
+ </p>
220
+
221
+ <h4 class="f-2 b">See Also</h3>
222
+ <ul class="see-also">
223
+
224
+ <li><p><a href="/brut-css/classes/appearances.html#class-scale:inset-shadow">Inset Shadow</a></p>
225
+ </li>
226
+
227
+ </ul>
228
+
229
+
230
+ <div class="mt-4 flex gap-3 items-center justify-between" id="shadow-1">
231
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.shadow-1</code></h4>
232
+ <pre class="f-3 highlighted-code"><span class="token selector">.shadow-1</span> <span class="token punctuation">{</span>
233
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span> 1px 1px 4px 0px<span class="token punctuation">;</span>
234
+ <span class="token punctuation">}</span></pre>
235
+ </div>
236
+ <div class="ml-3">
237
+ <p class="p">
238
+
239
+ </p>
240
+
241
+
242
+ </div>
243
+
244
+ <div class="mt-4 flex gap-3 items-center justify-between" id="shadow-2">
245
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.shadow-2</code></h4>
246
+ <pre class="f-3 highlighted-code"><span class="token selector">.shadow-2</span> <span class="token punctuation">{</span>
247
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span> 1px 1px 10.64px 0px<span class="token punctuation">;</span>
248
+ <span class="token punctuation">}</span></pre>
249
+ </div>
250
+ <div class="ml-3">
251
+ <p class="p">
252
+
253
+ </p>
254
+
255
+
256
+ </div>
257
+
258
+ <div class="mt-4 flex gap-3 items-center justify-between" id="shadow-3">
259
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.shadow-3</code></h4>
260
+ <pre class="f-3 highlighted-code"><span class="token selector">.shadow-3</span> <span class="token punctuation">{</span>
261
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span> 1px 1px 15.022px 0px<span class="token punctuation">;</span>
262
+ <span class="token punctuation">}</span></pre>
263
+ </div>
264
+ <div class="ml-3">
265
+ <p class="p">
266
+
267
+ </p>
268
+
269
+
270
+ </div>
271
+
272
+ <div class="mt-4 flex gap-3 items-center justify-between" id="shadow-4">
273
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.shadow-4</code></h4>
274
+ <pre class="f-3 highlighted-code"><span class="token selector">.shadow-4</span> <span class="token punctuation">{</span>
275
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span> 1px 1px 22.297px 0px<span class="token punctuation">;</span>
276
+ <span class="token punctuation">}</span></pre>
277
+ </div>
278
+ <div class="ml-3">
279
+ <p class="p">
280
+
281
+ </p>
282
+
283
+
284
+ </div>
285
+
286
+ <div class="mt-4 flex gap-3 items-center justify-between" id="shadow-5">
287
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.shadow-5</code></h4>
288
+ <pre class="f-3 highlighted-code"><span class="token selector">.shadow-5</span> <span class="token punctuation">{</span>
289
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span> 1px 1px 34.373px 0px<span class="token punctuation">;</span>
290
+ <span class="token punctuation">}</span></pre>
291
+ </div>
292
+ <div class="ml-3">
293
+ <p class="p">
294
+
295
+ </p>
296
+
297
+
298
+ </div>
299
+
300
+ <div class="mt-4 flex gap-3 items-center justify-between" id="shadow-6">
301
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.shadow-6</code></h4>
302
+ <pre class="f-3 highlighted-code"><span class="token selector">.shadow-6</span> <span class="token punctuation">{</span>
303
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span> 1px 1px 54.419px 0px<span class="token punctuation">;</span>
304
+ <span class="token punctuation">}</span></pre>
305
+ </div>
306
+ <div class="ml-3">
307
+ <p class="p">
308
+
309
+ </p>
310
+
311
+
312
+ </div>
313
+
314
+ <div class="mt-4 flex gap-3 items-center justify-between" id="shadow-none">
315
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.shadow-none</code></h4>
316
+ <pre class="f-3 highlighted-code"><span class="token selector">.shadow-none</span> <span class="token punctuation">{</span>
317
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span>
318
+ <span class="token punctuation">}</span></pre>
319
+ </div>
320
+ <div class="ml-3">
321
+ <p class="p">
322
+
323
+ </p>
324
+
325
+
326
+ </div>
327
+
328
+
329
+ <h3 class="f-5 mt-4" id="class-scale:inset-shadow">Inset Shadow</h3>
330
+ <p class="p">
331
+ <p>Inset shadows. This is a six-step scale with 1 being the “shallowest” shadow and 6 being very deep and scattered. In theory something with <code>inset-shadow-1</code> will look deeper than something with <code>inset-shadow-none</code>, but more shallow than something with <code>inset-shadow-3</code>.</p>
332
+
333
+ </p>
334
+
335
+ <h4 class="f-2 b">See Also</h3>
336
+ <ul class="see-also">
337
+
338
+ <li><p><a href="/brut-css/classes/appearances.html#class-scale:box-shadow">Box Shadow</a></p>
339
+ </li>
340
+
341
+ </ul>
342
+
343
+
344
+ <div class="mt-4 flex gap-3 items-center justify-between" id="inset-shadow-1">
345
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.inset-shadow-1</code></h4>
346
+ <pre class="f-3 highlighted-code"><span class="token selector">.inset-shadow-1</span> <span class="token punctuation">{</span>
347
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>106<span class="token punctuation">,</span> 106<span class="token punctuation">,</span> 106<span class="token punctuation">)</span> 1px 1px 4px -1px inset<span class="token punctuation">;</span>
348
+ <span class="token punctuation">}</span></pre>
349
+ </div>
350
+ <div class="ml-3">
351
+ <p class="p">
352
+
353
+ </p>
354
+
355
+
356
+ </div>
357
+
358
+ <div class="mt-4 flex gap-3 items-center justify-between" id="inset-shadow-2">
359
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.inset-shadow-2</code></h4>
360
+ <pre class="f-3 highlighted-code"><span class="token selector">.inset-shadow-2</span> <span class="token punctuation">{</span>
361
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>106<span class="token punctuation">,</span> 106<span class="token punctuation">,</span> 106<span class="token punctuation">)</span> 1px 1px 5.52px -1.043px inset<span class="token punctuation">;</span>
362
+ <span class="token punctuation">}</span></pre>
363
+ </div>
364
+ <div class="ml-3">
365
+ <p class="p">
366
+
367
+ </p>
368
+
369
+
370
+ </div>
371
+
372
+ <div class="mt-4 flex gap-3 items-center justify-between" id="inset-shadow-3">
373
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.inset-shadow-3</code></h4>
374
+ <pre class="f-3 highlighted-code"><span class="token selector">.inset-shadow-3</span> <span class="token punctuation">{</span>
375
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>106<span class="token punctuation">,</span> 106<span class="token punctuation">,</span> 106<span class="token punctuation">)</span> 1px 1px 8.195px -1.193px inset<span class="token punctuation">;</span>
376
+ <span class="token punctuation">}</span></pre>
377
+ </div>
378
+ <div class="ml-3">
379
+ <p class="p">
380
+
381
+ </p>
382
+
383
+
384
+ </div>
385
+
386
+ <div class="mt-4 flex gap-3 items-center justify-between" id="inset-shadow-4">
387
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.inset-shadow-4</code></h4>
388
+ <pre class="f-3 highlighted-code"><span class="token selector">.inset-shadow-4</span> <span class="token punctuation">{</span>
389
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>106<span class="token punctuation">,</span> 106<span class="token punctuation">,</span> 106<span class="token punctuation">)</span> 1px 1px 12.903px -1.485px inset<span class="token punctuation">;</span>
390
+ <span class="token punctuation">}</span></pre>
391
+ </div>
392
+ <div class="ml-3">
393
+ <p class="p">
394
+
395
+ </p>
396
+
397
+
398
+ </div>
399
+
400
+ <div class="mt-4 flex gap-3 items-center justify-between" id="inset-shadow-5">
401
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.inset-shadow-5</code></h4>
402
+ <pre class="f-3 highlighted-code"><span class="token selector">.inset-shadow-5</span> <span class="token punctuation">{</span>
403
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>106<span class="token punctuation">,</span> 106<span class="token punctuation">,</span> 106<span class="token punctuation">)</span> 1px 1px 21.190px -1.986px inset<span class="token punctuation">;</span>
404
+ <span class="token punctuation">}</span></pre>
405
+ </div>
406
+ <div class="ml-3">
407
+ <p class="p">
408
+
409
+ </p>
410
+
411
+
412
+ </div>
413
+
414
+ <div class="mt-4 flex gap-3 items-center justify-between" id="inset-shadow-6">
415
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.inset-shadow-6</code></h4>
416
+ <pre class="f-3 highlighted-code"><span class="token selector">.inset-shadow-6</span> <span class="token punctuation">{</span>
417
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>106<span class="token punctuation">,</span> 106<span class="token punctuation">,</span> 106<span class="token punctuation">)</span> 1px 1px 35.774px -2.802px inset<span class="token punctuation">;</span>
418
+ <span class="token punctuation">}</span></pre>
419
+ </div>
420
+ <div class="ml-3">
421
+ <p class="p">
422
+
423
+ </p>
424
+
425
+
426
+ </div>
427
+
428
+ <div class="mt-4 flex gap-3 items-center justify-between" id="inset-shadow-none">
429
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.inset-shadow-none</code></h4>
430
+ <pre class="f-3 highlighted-code"><span class="token selector">.inset-shadow-none</span> <span class="token punctuation">{</span>
431
+ <span class="token property">box-shadow</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span>
432
+ <span class="token punctuation">}</span></pre>
433
+ </div>
434
+ <div class="ml-3">
435
+ <p class="p">
436
+
437
+ </p>
438
+
439
+
440
+ </div>
441
+
442
+
443
+ <h3 class="f-5 mt-4" id="class-group:cursors">Cursors</h3>
444
+ <p class="p">
445
+ <p>Cursors.</p>
446
+
447
+ </p>
448
+
449
+
450
+ <div class="mt-4 flex gap-3 items-center justify-between" id="cursor-default">
451
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.cursor-default</code></h4>
452
+ <pre class="f-3 highlighted-code"><span class="token selector">.cursor-default</span> <span class="token punctuation">{</span>
453
+ <span class="token property">cursor</span><span class="token punctuation">:</span> default<span class="token punctuation">;</span>
454
+ <span class="token punctuation">}</span></pre>
455
+ </div>
456
+ <div class="ml-3">
457
+ <p class="p">
458
+
459
+ </p>
460
+
461
+
462
+ </div>
463
+
464
+ <div class="mt-4 flex gap-3 items-center justify-between" id="pointer">
465
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.pointer</code></h4>
466
+ <pre class="f-3 highlighted-code"><span class="token selector">.pointer</span> <span class="token punctuation">{</span>
467
+ <span class="token property">cursor</span><span class="token punctuation">:</span> pointer<span class="token punctuation">;</span>
468
+ <span class="token punctuation">}</span></pre>
469
+ </div>
470
+ <div class="ml-3">
471
+ <p class="p">
472
+
473
+ </p>
474
+
475
+
476
+ </div>
477
+
478
+ <div class="mt-4 flex gap-3 items-center justify-between" id="cursor-pointer">
479
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.cursor-pointer</code></h4>
480
+ <pre class="f-3 highlighted-code"><span class="token selector">.cursor-pointer</span> <span class="token punctuation">{</span>
481
+ <span class="token property">cursor</span><span class="token punctuation">:</span> pointer<span class="token punctuation">;</span>
482
+ <span class="token punctuation">}</span></pre>
483
+ </div>
484
+ <div class="ml-3">
485
+ <p class="p">
486
+
487
+ </p>
488
+
489
+
490
+ </div>
491
+
492
+ <div class="mt-4 flex gap-3 items-center justify-between" id="cursor-progress">
493
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.cursor-progress</code></h4>
494
+ <pre class="f-3 highlighted-code"><span class="token selector">.cursor-progress</span> <span class="token punctuation">{</span>
495
+ <span class="token property">cursor</span><span class="token punctuation">:</span> progress<span class="token punctuation">;</span>
496
+ <span class="token punctuation">}</span></pre>
497
+ </div>
498
+ <div class="ml-3">
499
+ <p class="p">
500
+
501
+ </p>
502
+
503
+
504
+ </div>
505
+
506
+ <div class="mt-4 flex gap-3 items-center justify-between" id="cursor-move">
507
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.cursor-move</code></h4>
508
+ <pre class="f-3 highlighted-code"><span class="token selector">.cursor-move</span> <span class="token punctuation">{</span>
509
+ <span class="token property">cursor</span><span class="token punctuation">:</span> move<span class="token punctuation">;</span>
510
+ <span class="token punctuation">}</span></pre>
511
+ </div>
512
+ <div class="ml-3">
513
+ <p class="p">
514
+
515
+ </p>
516
+
517
+
518
+ </div>
519
+
520
+ <div class="mt-4 flex gap-3 items-center justify-between" id="cursor-grab">
521
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.cursor-grab</code></h4>
522
+ <pre class="f-3 highlighted-code"><span class="token selector">.cursor-grab</span> <span class="token punctuation">{</span>
523
+ <span class="token property">cursor</span><span class="token punctuation">:</span> grab<span class="token punctuation">;</span>
524
+ <span class="token punctuation">}</span></pre>
525
+ </div>
526
+ <div class="ml-3">
527
+ <p class="p">
528
+
529
+ </p>
530
+
531
+
532
+ </div>
533
+
534
+ <div class="mt-4 flex gap-3 items-center justify-between" id="cursor-not-allowed">
535
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.cursor-not-allowed</code></h4>
536
+ <pre class="f-3 highlighted-code"><span class="token selector">.cursor-not-allowed</span> <span class="token punctuation">{</span>
537
+ <span class="token property">cursor</span><span class="token punctuation">:</span> not-allowed<span class="token punctuation">;</span>
538
+ <span class="token punctuation">}</span></pre>
539
+ </div>
540
+ <div class="ml-3">
541
+ <p class="p">
542
+
543
+ </p>
544
+
545
+
546
+ </div>
547
+
548
+
549
+ <h3 class="f-5 mt-4" id="class-scale:opacity-percent">Opacity Percent</h3>
550
+ <p class="p">
551
+ <p>Opacity percentage-based scale, including <code>third</code> and <code>two-thirds</code>.</p>
552
+
553
+ </p>
554
+
555
+
556
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-10">
557
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-10</code></h4>
558
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-10</span> <span class="token punctuation">{</span>
559
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 10%<span class="token punctuation">;</span>
560
+ <span class="token punctuation">}</span></pre>
561
+ </div>
562
+ <div class="ml-3">
563
+ <p class="p">
564
+
565
+ </p>
566
+
567
+
568
+ </div>
569
+
570
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-20">
571
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-20</code></h4>
572
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-20</span> <span class="token punctuation">{</span>
573
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 20%<span class="token punctuation">;</span>
574
+ <span class="token punctuation">}</span></pre>
575
+ </div>
576
+ <div class="ml-3">
577
+ <p class="p">
578
+
579
+ </p>
580
+
581
+
582
+ </div>
583
+
584
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-25">
585
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-25</code></h4>
586
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-25</span> <span class="token punctuation">{</span>
587
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 25%<span class="token punctuation">;</span>
588
+ <span class="token punctuation">}</span></pre>
589
+ </div>
590
+ <div class="ml-3">
591
+ <p class="p">
592
+
593
+ </p>
594
+
595
+
596
+ </div>
597
+
598
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-30">
599
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-30</code></h4>
600
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-30</span> <span class="token punctuation">{</span>
601
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 30%<span class="token punctuation">;</span>
602
+ <span class="token punctuation">}</span></pre>
603
+ </div>
604
+ <div class="ml-3">
605
+ <p class="p">
606
+
607
+ </p>
608
+
609
+
610
+ </div>
611
+
612
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-40">
613
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-40</code></h4>
614
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-40</span> <span class="token punctuation">{</span>
615
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 40%<span class="token punctuation">;</span>
616
+ <span class="token punctuation">}</span></pre>
617
+ </div>
618
+ <div class="ml-3">
619
+ <p class="p">
620
+
621
+ </p>
622
+
623
+
624
+ </div>
625
+
626
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-50">
627
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-50</code></h4>
628
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-50</span> <span class="token punctuation">{</span>
629
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 50%<span class="token punctuation">;</span>
630
+ <span class="token punctuation">}</span></pre>
631
+ </div>
632
+ <div class="ml-3">
633
+ <p class="p">
634
+
635
+ </p>
636
+
637
+
638
+ </div>
639
+
640
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-60">
641
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-60</code></h4>
642
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-60</span> <span class="token punctuation">{</span>
643
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 60%<span class="token punctuation">;</span>
644
+ <span class="token punctuation">}</span></pre>
645
+ </div>
646
+ <div class="ml-3">
647
+ <p class="p">
648
+
649
+ </p>
650
+
651
+
652
+ </div>
653
+
654
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-70">
655
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-70</code></h4>
656
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-70</span> <span class="token punctuation">{</span>
657
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 70%<span class="token punctuation">;</span>
658
+ <span class="token punctuation">}</span></pre>
659
+ </div>
660
+ <div class="ml-3">
661
+ <p class="p">
662
+
663
+ </p>
664
+
665
+
666
+ </div>
667
+
668
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-75">
669
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-75</code></h4>
670
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-75</span> <span class="token punctuation">{</span>
671
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 75%<span class="token punctuation">;</span>
672
+ <span class="token punctuation">}</span></pre>
673
+ </div>
674
+ <div class="ml-3">
675
+ <p class="p">
676
+
677
+ </p>
678
+
679
+
680
+ </div>
681
+
682
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-80">
683
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-80</code></h4>
684
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-80</span> <span class="token punctuation">{</span>
685
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 80%<span class="token punctuation">;</span>
686
+ <span class="token punctuation">}</span></pre>
687
+ </div>
688
+ <div class="ml-3">
689
+ <p class="p">
690
+
691
+ </p>
692
+
693
+
694
+ </div>
695
+
696
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-90">
697
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-90</code></h4>
698
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-90</span> <span class="token punctuation">{</span>
699
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 90%<span class="token punctuation">;</span>
700
+ <span class="token punctuation">}</span></pre>
701
+ </div>
702
+ <div class="ml-3">
703
+ <p class="p">
704
+
705
+ </p>
706
+
707
+
708
+ </div>
709
+
710
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-100">
711
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-100</code></h4>
712
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-100</span> <span class="token punctuation">{</span>
713
+ <span class="token property">opacity</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span>
714
+ <span class="token punctuation">}</span></pre>
715
+ </div>
716
+ <div class="ml-3">
717
+ <p class="p">
718
+
719
+ </p>
720
+
721
+
722
+ </div>
723
+
724
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-third">
725
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-third</code></h4>
726
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-third</span> <span class="token punctuation">{</span>
727
+ <span class="token property">opacity</span><span class="token punctuation">:</span> <span class="token function">calc</span><span class="token punctuation">(</span>100% / 3<span class="token punctuation">)</span><span class="token punctuation">;</span>
728
+ <span class="token punctuation">}</span></pre>
729
+ </div>
730
+ <div class="ml-3">
731
+ <p class="p">
732
+
733
+ </p>
734
+
735
+
736
+ </div>
737
+
738
+ <div class="mt-4 flex gap-3 items-center justify-between" id="o-two-thirds">
739
+ <h4 class="f-4 fw-3 ws-nowrap"><code>.o-two-thirds</code></h4>
740
+ <pre class="f-3 highlighted-code"><span class="token selector">.o-two-thirds</span> <span class="token punctuation">{</span>
741
+ <span class="token property">opacity</span><span class="token punctuation">:</span> <span class="token function">calc</span><span class="token punctuation">(</span>100% / 1.5<span class="token punctuation">)</span><span class="token punctuation">;</span>
742
+ <span class="token punctuation">}</span></pre>
743
+ </div>
744
+ <div class="ml-3">
745
+ <p class="p">
746
+
747
+ </p>
748
+
749
+
750
+ </div>
751
+
752
+
753
+ </article>
754
+ <div class="z-5 ma-0 overflow-y-auto pa-2 w-20 h-100 pos-absolute top-0 right-2">
755
+ <div class="pa-3 ba bc-gray-700 bg-gray-900 br-3 shadow-1 ridiculous-liquid-glass-is-all-the-rage">
756
+ <h3>On this Page</h3>
757
+ <ul class="lst-none ma-0 pa-0">
758
+
759
+ <li class="lh-copy"><a href="#class-group:appearance">Appearance</a></li>
760
+
761
+ <li class="lh-copy"><a href="#class-scale:box-shadow">Box Shadow</a></li>
762
+
763
+ <li class="lh-copy"><a href="#class-scale:inset-shadow">Inset Shadow</a></li>
764
+
765
+ <li class="lh-copy"><a href="#class-group:cursors">Cursors</a></li>
766
+
767
+ <li class="lh-copy"><a href="#class-scale:opacity-percent">Opacity Percent</a></li>
768
+
769
+ </ul>
770
+ </div>
771
+ </div>
772
+ </div>
773
+ <footer class="bg-black white mt-auto">
774
+ <p class="tc">
775
+ Copyright &copy; 2025 David Bryant Copeland.
776
+ </p>
777
+ </footer>
778
+ </section>
779
+ </main>
780
+ </body>
781
+
782
+ </html>
783
+