plutonium 0.15.12 → 0.15.14
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/app/assets/plutonium.css +1 -1
 - data/app/assets/plutonium.js +155 -4
 - data/app/assets/plutonium.js.map +4 -4
 - data/app/assets/plutonium.min.js +8 -8
 - data/app/assets/plutonium.min.js.map +4 -4
 - data/app/views/components/resource_header/resource_header_component.rb +1 -1
 - data/app/views/components/resource_layout/resource_layout_component.html.erb +6 -2
 - data/app/views/layouts/resource.html.erb +1 -14
 - data/app/views/layouts/rodauth.html.erb +2 -18
 - data/app/views/plutonium/_resource_header.html.erb +4 -2
 - data/app/views/plutonium/_resource_sidebar.html.erb +1 -1
 - data/docs/public/templates/plutonium.rb +6 -12
 - data/lib/generators/pu/gem/standard/standard_generator.rb +14 -1
 - data/lib/generators/pu/lib/plutonium_generators/concerns/actions.rb +1 -1
 - data/lib/generators/pu/rodauth/concerns/configuration.rb +1 -0
 - data/lib/plutonium/ui/color_mode_selector.rb +86 -0
 - data/lib/plutonium/ui/component/kit.rb +2 -0
 - data/lib/plutonium/ui/component/methods.rb +2 -0
 - data/lib/plutonium/ui/dyna_frame/host.rb +2 -2
 - data/lib/plutonium/ui/layout/base.rb +135 -0
 - data/lib/plutonium/ui/layout/header.rb +121 -0
 - data/lib/plutonium/ui/layout/resource_layout.rb +26 -0
 - data/lib/plutonium/ui/layout/rodauth_layout.rb +34 -0
 - data/lib/plutonium/ui/layout/sidebar.rb +56 -0
 - data/lib/plutonium/ui/table/resource.rb +1 -1
 - data/lib/plutonium/version.rb +1 -1
 - data/lib/plutonium.rb +2 -0
 - data/lib/rodauth/features/case_insensitive_login.rb +21 -0
 - data/lib/rodauth/plugins.rb +1 -0
 - data/package-lock.json +2 -2
 - data/package.json +1 -1
 - data/src/js/controllers/header_controller.js +184 -0
 - data/src/js/controllers/register_controllers.js +4 -2
 - data/src/js/controllers/{resource_header_controller.js → sidebar_controller.js} +2 -2
 - metadata +26 -3
 
| 
         @@ -94,7 +94,7 @@ module Plutonium 
     | 
|
| 
       94 
94 
     | 
    
         
             
                    end
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
       96 
96 
     | 
    
         
             
                    def render_footer
         
     | 
| 
       97 
     | 
    
         
            -
                      div(class: "sticky dyna:static bottom-[-2px] mt-1 p-4 pb-6 w-full z- 
     | 
| 
      
 97 
     | 
    
         
            +
                      div(class: "lg:sticky lg:dyna:static bottom-[-2px] mt-1 p-4 pb-6 w-full z-30 bg-gray-50 dark:bg-gray-900") {
         
     | 
| 
       98 
98 
     | 
    
         
             
                        TableInfo(pagy_instance)
         
     | 
| 
       99 
99 
     | 
    
         
             
                        TablePagination(pagy_instance)
         
     | 
| 
       100 
100 
     | 
    
         
             
                      }
         
     | 
    
        data/lib/plutonium/version.rb
    CHANGED
    
    
    
        data/lib/plutonium.rb
    CHANGED
    
    | 
         @@ -10,6 +10,7 @@ require "phlexi-form" 
     | 
|
| 
       10 
10 
     | 
    
         
             
            require "phlexi-table"
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            require_relative "plutonium/configuration"
         
     | 
| 
      
 13 
     | 
    
         
            +
            require_relative "rodauth/plugins" if defined?(Rodauth)
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
            # Plutonium module
         
     | 
| 
       15 
16 
     | 
    
         
             
            #
         
     | 
| 
         @@ -25,6 +26,7 @@ module Plutonium 
     | 
|
| 
       25 
26 
     | 
    
         
             
              Loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false).tap do |loader|
         
     | 
| 
       26 
27 
     | 
    
         
             
                loader.ignore("#{__dir__}/generators")
         
     | 
| 
       27 
28 
     | 
    
         
             
                loader.ignore("#{__dir__}/plutonium/railtie.rb")
         
     | 
| 
      
 29 
     | 
    
         
            +
                loader.ignore("#{__dir__}/rodauth")
         
     | 
| 
       28 
30 
     | 
    
         
             
                loader.inflector.inflect("ui" => "UI")
         
     | 
| 
       29 
31 
     | 
    
         
             
                loader.inflector.inflect("workflow_dsl" => "WorkflowDSL")
         
     | 
| 
       30 
32 
     | 
    
         
             
                loader.enable_reloading if defined?(Rails.env) && Rails.env.development?
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "rodauth"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # A plugin to enable case insensitive logins on Rodauth.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # It does that by downcasing any login inputs.
         
     | 
| 
      
 5 
     | 
    
         
            +
            # Should not be enabled on existing installations unless logins are downcased in the database.
         
     | 
| 
      
 6 
     | 
    
         
            +
            # See https://github.com/jeremyevans/rodauth/discussions/451
         
     | 
| 
      
 7 
     | 
    
         
            +
            module Rodauth
         
     | 
| 
      
 8 
     | 
    
         
            +
              Feature.define(:case_insensitive_login, :CaseInsensitiveLogin) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                def param(key)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  if [login_param, login_confirm_param].include?(key)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    super.downcase
         
     | 
| 
      
 12 
     | 
    
         
            +
                  else
         
     | 
| 
      
 13 
     | 
    
         
            +
                    super
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def account_from_login(login)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  super(login.downcase)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative "features/case_insensitive_login"
         
     | 
    
        data/package-lock.json
    CHANGED
    
    | 
         @@ -1,12 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@radioactive-labs/plutonium",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "0.1. 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "0.1.8",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "lockfileVersion": 3,
         
     | 
| 
       5 
5 
     | 
    
         
             
              "requires": true,
         
     | 
| 
       6 
6 
     | 
    
         
             
              "packages": {
         
     | 
| 
       7 
7 
     | 
    
         
             
                "": {
         
     | 
| 
       8 
8 
     | 
    
         
             
                  "name": "@radioactive-labs/plutonium",
         
     | 
| 
       9 
     | 
    
         
            -
                  "version": "0.1. 
     | 
| 
      
 9 
     | 
    
         
            +
                  "version": "0.1.8",
         
     | 
| 
       10 
10 
     | 
    
         
             
                  "license": "MIT",
         
     | 
| 
       11 
11 
     | 
    
         
             
                  "dependencies": {
         
     | 
| 
       12 
12 
     | 
    
         
             
                    "@hotwired/stimulus": "^3.2.2",
         
     | 
    
        data/package.json
    CHANGED
    
    
| 
         @@ -0,0 +1,184 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { Controller } from "@hotwired/stimulus"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            export default class extends Controller {
         
     | 
| 
      
 4 
     | 
    
         
            +
              static targets = ["open", "close"]
         
     | 
| 
      
 5 
     | 
    
         
            +
              static outlets = ["sidebar"]
         
     | 
| 
      
 6 
     | 
    
         
            +
              static values = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                placement: { type: String, default: "left" },
         
     | 
| 
      
 8 
     | 
    
         
            +
                bodyScrolling: { type: Boolean, default: false },
         
     | 
| 
      
 9 
     | 
    
         
            +
                backdrop: { type: Boolean, default: true },
         
     | 
| 
      
 10 
     | 
    
         
            +
                edge: { type: Boolean, default: false },
         
     | 
| 
      
 11 
     | 
    
         
            +
                edgeOffset: { type: String, default: "bottom-[60px]" }
         
     | 
| 
      
 12 
     | 
    
         
            +
              }
         
     | 
| 
      
 13 
     | 
    
         
            +
              static classes = {
         
     | 
| 
      
 14 
     | 
    
         
            +
                backdrop: "bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-30"
         
     | 
| 
      
 15 
     | 
    
         
            +
              }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              initialize() {
         
     | 
| 
      
 18 
     | 
    
         
            +
                this.visible = false
         
     | 
| 
      
 19 
     | 
    
         
            +
                this.handleEscapeKey = this.handleEscapeKey.bind(this)
         
     | 
| 
      
 20 
     | 
    
         
            +
              }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              connect() {
         
     | 
| 
      
 23 
     | 
    
         
            +
                document.addEventListener("keydown", this.handleEscapeKey)
         
     | 
| 
      
 24 
     | 
    
         
            +
              }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              sidebarOutletConnected() {
         
     | 
| 
      
 27 
     | 
    
         
            +
                this.#setupDrawer(this.sidebarOutlet.element)
         
     | 
| 
      
 28 
     | 
    
         
            +
              }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              disconnect() {
         
     | 
| 
      
 31 
     | 
    
         
            +
                this.#removeBackdrop()
         
     | 
| 
      
 32 
     | 
    
         
            +
                document.removeEventListener("keydown", this.handleEscapeKey)
         
     | 
| 
      
 33 
     | 
    
         
            +
                if (!this.bodyScrollingValue) {
         
     | 
| 
      
 34 
     | 
    
         
            +
                  document.body.classList.remove("overflow-hidden")
         
     | 
| 
      
 35 
     | 
    
         
            +
                }
         
     | 
| 
      
 36 
     | 
    
         
            +
              }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              #setupDrawer(drawerElement) {
         
     | 
| 
      
 39 
     | 
    
         
            +
                drawerElement.setAttribute("aria-hidden", "true")
         
     | 
| 
      
 40 
     | 
    
         
            +
                drawerElement.classList.add("transition-transform")
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                // Add base placement classes
         
     | 
| 
      
 43 
     | 
    
         
            +
                this.#getPlacementClasses(this.placementValue).base.forEach(className => {
         
     | 
| 
      
 44 
     | 
    
         
            +
                  drawerElement.classList.add(className)
         
     | 
| 
      
 45 
     | 
    
         
            +
                })
         
     | 
| 
      
 46 
     | 
    
         
            +
              }
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              toggleDrawer() {
         
     | 
| 
      
 49 
     | 
    
         
            +
                this.visible ? this.hideDrawer() : this.showDrawer()
         
     | 
| 
      
 50 
     | 
    
         
            +
              }
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              showDrawer() {
         
     | 
| 
      
 53 
     | 
    
         
            +
                if (this.edgeValue) {
         
     | 
| 
      
 54 
     | 
    
         
            +
                  this.#toggleEdgePlacementClasses(`${this.placementValue}-edge`, true)
         
     | 
| 
      
 55 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 56 
     | 
    
         
            +
                  this.#togglePlacementClasses(this.placementValue, true)
         
     | 
| 
      
 57 
     | 
    
         
            +
                }
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                // Toggle visibility and ARIA attributes of icons
         
     | 
| 
      
 60 
     | 
    
         
            +
                this.openTarget.classList.add("hidden")
         
     | 
| 
      
 61 
     | 
    
         
            +
                this.openTarget.setAttribute("aria-hidden", "true")
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                this.closeTarget.classList.remove("hidden")
         
     | 
| 
      
 64 
     | 
    
         
            +
                this.closeTarget.setAttribute("aria-hidden", "false")
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                // Rest of the method stays same...
         
     | 
| 
      
 67 
     | 
    
         
            +
                this.sidebarOutlet.element.setAttribute("aria-modal", "true")
         
     | 
| 
      
 68 
     | 
    
         
            +
                this.sidebarOutlet.element.setAttribute("role", "dialog")
         
     | 
| 
      
 69 
     | 
    
         
            +
                this.sidebarOutlet.element.removeAttribute("aria-hidden")
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                if (!this.bodyScrollingValue) {
         
     | 
| 
      
 72 
     | 
    
         
            +
                  document.body.classList.add("overflow-hidden")
         
     | 
| 
      
 73 
     | 
    
         
            +
                }
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                if (this.backdropValue) {
         
     | 
| 
      
 76 
     | 
    
         
            +
                  this.#createBackdrop()
         
     | 
| 
      
 77 
     | 
    
         
            +
                }
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                this.visible = true
         
     | 
| 
      
 80 
     | 
    
         
            +
                this.dispatch("show")
         
     | 
| 
      
 81 
     | 
    
         
            +
              }
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
              hideDrawer() {
         
     | 
| 
      
 84 
     | 
    
         
            +
                if (this.edgeValue) {
         
     | 
| 
      
 85 
     | 
    
         
            +
                  this.#toggleEdgePlacementClasses(`${this.placementValue}-edge`, false)
         
     | 
| 
      
 86 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 87 
     | 
    
         
            +
                  this.#togglePlacementClasses(this.placementValue, false)
         
     | 
| 
      
 88 
     | 
    
         
            +
                }
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                // Toggle visibility and ARIA attributes of icons
         
     | 
| 
      
 91 
     | 
    
         
            +
                this.openTarget.classList.remove("hidden")
         
     | 
| 
      
 92 
     | 
    
         
            +
                this.openTarget.setAttribute("aria-hidden", "false")
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                this.closeTarget.classList.add("hidden")
         
     | 
| 
      
 95 
     | 
    
         
            +
                this.closeTarget.setAttribute("aria-hidden", "true")
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                // Rest of the method stays same...
         
     | 
| 
      
 98 
     | 
    
         
            +
                this.sidebarOutlet.element.setAttribute("aria-hidden", "true")
         
     | 
| 
      
 99 
     | 
    
         
            +
                this.sidebarOutlet.element.removeAttribute("aria-modal")
         
     | 
| 
      
 100 
     | 
    
         
            +
                this.sidebarOutlet.element.removeAttribute("role")
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                if (!this.bodyScrollingValue) {
         
     | 
| 
      
 103 
     | 
    
         
            +
                  document.body.classList.remove("overflow-hidden")
         
     | 
| 
      
 104 
     | 
    
         
            +
                }
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                if (this.backdropValue) {
         
     | 
| 
      
 107 
     | 
    
         
            +
                  this.#removeBackdrop()
         
     | 
| 
      
 108 
     | 
    
         
            +
                }
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                this.visible = false
         
     | 
| 
      
 111 
     | 
    
         
            +
                this.dispatch("hide")
         
     | 
| 
      
 112 
     | 
    
         
            +
              }
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
              handleEscapeKey(event) {
         
     | 
| 
      
 115 
     | 
    
         
            +
                if (event.key === "Escape" && this.visible) {
         
     | 
| 
      
 116 
     | 
    
         
            +
                  this.hideDrawer()
         
     | 
| 
      
 117 
     | 
    
         
            +
                }
         
     | 
| 
      
 118 
     | 
    
         
            +
              }
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
              #createBackdrop() {
         
     | 
| 
      
 121 
     | 
    
         
            +
                if (!this.visible) {
         
     | 
| 
      
 122 
     | 
    
         
            +
                  const backdrop = document.createElement("div")
         
     | 
| 
      
 123 
     | 
    
         
            +
                  backdrop.setAttribute("data-drawer-backdrop", "")
         
     | 
| 
      
 124 
     | 
    
         
            +
                  backdrop.classList.add(...this.constructor.classes.backdrop.split(" "))
         
     | 
| 
      
 125 
     | 
    
         
            +
                  backdrop.addEventListener("click", () => this.hideDrawer())
         
     | 
| 
      
 126 
     | 
    
         
            +
                  document.body.appendChild(backdrop)
         
     | 
| 
      
 127 
     | 
    
         
            +
                }
         
     | 
| 
      
 128 
     | 
    
         
            +
              }
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
              #removeBackdrop() {
         
     | 
| 
      
 131 
     | 
    
         
            +
                const backdrop = document.querySelector("[data-drawer-backdrop]")
         
     | 
| 
      
 132 
     | 
    
         
            +
                if (backdrop) {
         
     | 
| 
      
 133 
     | 
    
         
            +
                  backdrop.remove()
         
     | 
| 
      
 134 
     | 
    
         
            +
                }
         
     | 
| 
      
 135 
     | 
    
         
            +
              }
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
              #getPlacementClasses(placement) {
         
     | 
| 
      
 138 
     | 
    
         
            +
                const placements = {
         
     | 
| 
      
 139 
     | 
    
         
            +
                  top: {
         
     | 
| 
      
 140 
     | 
    
         
            +
                    base: ["top-0", "left-0", "right-0"],
         
     | 
| 
      
 141 
     | 
    
         
            +
                    active: ["transform-none"],
         
     | 
| 
      
 142 
     | 
    
         
            +
                    inactive: ["-translate-y-full"]
         
     | 
| 
      
 143 
     | 
    
         
            +
                  },
         
     | 
| 
      
 144 
     | 
    
         
            +
                  right: {
         
     | 
| 
      
 145 
     | 
    
         
            +
                    base: ["right-0", "top-0"],
         
     | 
| 
      
 146 
     | 
    
         
            +
                    active: ["transform-none"],
         
     | 
| 
      
 147 
     | 
    
         
            +
                    inactive: ["translate-x-full"]
         
     | 
| 
      
 148 
     | 
    
         
            +
                  },
         
     | 
| 
      
 149 
     | 
    
         
            +
                  bottom: {
         
     | 
| 
      
 150 
     | 
    
         
            +
                    base: ["bottom-0", "left-0", "right-0"],
         
     | 
| 
      
 151 
     | 
    
         
            +
                    active: ["transform-none"],
         
     | 
| 
      
 152 
     | 
    
         
            +
                    inactive: ["translate-y-full"]
         
     | 
| 
      
 153 
     | 
    
         
            +
                  },
         
     | 
| 
      
 154 
     | 
    
         
            +
                  left: {
         
     | 
| 
      
 155 
     | 
    
         
            +
                    base: ["left-0", "top-0"],
         
     | 
| 
      
 156 
     | 
    
         
            +
                    active: ["transform-none"],
         
     | 
| 
      
 157 
     | 
    
         
            +
                    inactive: ["-translate-x-full"]
         
     | 
| 
      
 158 
     | 
    
         
            +
                  },
         
     | 
| 
      
 159 
     | 
    
         
            +
                  "bottom-edge": {
         
     | 
| 
      
 160 
     | 
    
         
            +
                    base: ["left-0", "top-0"],
         
     | 
| 
      
 161 
     | 
    
         
            +
                    active: ["transform-none"],
         
     | 
| 
      
 162 
     | 
    
         
            +
                    inactive: ["translate-y-full", this.edgeOffsetValue]
         
     | 
| 
      
 163 
     | 
    
         
            +
                  }
         
     | 
| 
      
 164 
     | 
    
         
            +
                }
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                return placements[placement] || placements.left
         
     | 
| 
      
 167 
     | 
    
         
            +
              }
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
              #togglePlacementClasses(placement, show) {
         
     | 
| 
      
 170 
     | 
    
         
            +
                const classes = this.#getPlacementClasses(placement)
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                if (show) {
         
     | 
| 
      
 173 
     | 
    
         
            +
                  classes.active.forEach(c => this.sidebarOutlet.element.classList.add(c))
         
     | 
| 
      
 174 
     | 
    
         
            +
                  classes.inactive.forEach(c => this.sidebarOutlet.element.classList.remove(c))
         
     | 
| 
      
 175 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 176 
     | 
    
         
            +
                  classes.active.forEach(c => this.sidebarOutlet.element.classList.remove(c))
         
     | 
| 
      
 177 
     | 
    
         
            +
                  classes.inactive.forEach(c => this.sidebarOutlet.element.classList.add(c))
         
     | 
| 
      
 178 
     | 
    
         
            +
                }
         
     | 
| 
      
 179 
     | 
    
         
            +
              }
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
              #toggleEdgePlacementClasses(placement, show) {
         
     | 
| 
      
 182 
     | 
    
         
            +
                this.#togglePlacementClasses(placement, show)
         
     | 
| 
      
 183 
     | 
    
         
            +
              }
         
     | 
| 
      
 184 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -5,9 +5,10 @@ import NavGridMenuController from "./nav_grid_menu_controller.js" 
     | 
|
| 
       5 
5 
     | 
    
         
             
            import NavUserSectionController from "./nav_user_section_controller.js"
         
     | 
| 
       6 
6 
     | 
    
         
             
            import NavUserLinkController from "./nav_user_link_controller.js"
         
     | 
| 
       7 
7 
     | 
    
         
             
            import NavUserController from "./nav_user_controller.js"
         
     | 
| 
       8 
     | 
    
         
            -
            import  
     | 
| 
      
 8 
     | 
    
         
            +
            import HeaderController from "./header_controller.js"
         
     | 
| 
       9 
9 
     | 
    
         
             
            import SidebarMenuItemController from "./sidebar_menu_item_controller.js"
         
     | 
| 
       10 
10 
     | 
    
         
             
            import SidebarMenuController from "./sidebar_menu_controller.js"
         
     | 
| 
      
 11 
     | 
    
         
            +
            import SidebarController from "./sidebar_controller.js"
         
     | 
| 
       11 
12 
     | 
    
         
             
            import HasManyPanelController from "./has_many_panel_controller.js"
         
     | 
| 
       12 
13 
     | 
    
         
             
            import NestedResourceFormFieldsController from "./nested_resource_form_fields_controller.js"
         
     | 
| 
       13 
14 
     | 
    
         
             
            import ToolbarController from "./toolbar_controller.js"
         
     | 
| 
         @@ -29,9 +30,10 @@ export default function (application) { 
     | 
|
| 
       29 
30 
     | 
    
         
             
              application.register("nav-user-section", NavUserSectionController)
         
     | 
| 
       30 
31 
     | 
    
         
             
              application.register("nav-user-link", NavUserLinkController)
         
     | 
| 
       31 
32 
     | 
    
         
             
              application.register("nav-user", NavUserController)
         
     | 
| 
       32 
     | 
    
         
            -
              application.register(" 
     | 
| 
      
 33 
     | 
    
         
            +
              application.register("header", HeaderController)
         
     | 
| 
       33 
34 
     | 
    
         
             
              application.register("sidebar-menu-item", SidebarMenuItemController)
         
     | 
| 
       34 
35 
     | 
    
         
             
              application.register("sidebar-menu", SidebarMenuController)
         
     | 
| 
      
 36 
     | 
    
         
            +
              application.register("sidebar", SidebarController)
         
     | 
| 
       35 
37 
     | 
    
         
             
              application.register("has-many-panel", HasManyPanelController)
         
     | 
| 
       36 
38 
     | 
    
         
             
              application.register("nested-resource-form-fields", NestedResourceFormFieldsController)
         
     | 
| 
       37 
39 
     | 
    
         
             
              application.register("toolbar", ToolbarController)
         
     | 
| 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { Controller } from "@hotwired/stimulus"
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            // Connects to data-controller=" 
     | 
| 
      
 3 
     | 
    
         
            +
            // Connects to data-controller="sidebar"
         
     | 
| 
       4 
4 
     | 
    
         
             
            export default class extends Controller {
         
     | 
| 
       5 
5 
     | 
    
         
             
              connect() {
         
     | 
| 
       6 
     | 
    
         
            -
                console.log(` 
     | 
| 
      
 6 
     | 
    
         
            +
                console.log(`sidebar connected: ${this.element}`)
         
     | 
| 
       7 
7 
     | 
    
         
             
              }
         
     | 
| 
       8 
8 
     | 
    
         
             
            }
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: plutonium
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.15. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.15.14
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Stefan Froelich
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024-11- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-11-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: zeitwerk
         
     | 
| 
         @@ -268,6 +268,20 @@ dependencies: 
     | 
|
| 
       268 
268 
     | 
    
         
             
                - - ">="
         
     | 
| 
       269 
269 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       270 
270 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 271 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 272 
     | 
    
         
            +
              name: phlex-slotable
         
     | 
| 
      
 273 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 274 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 275 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 276 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 277 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 278 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 279 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 280 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 281 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 282 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 283 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 284 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       271 
285 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       272 
286 
     | 
    
         
             
              name: rake
         
     | 
| 
       273 
287 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -1364,6 +1378,7 @@ files: 
     | 
|
| 
       1364 
1378 
     | 
    
         
             
            - lib/plutonium/ui/action_button.rb
         
     | 
| 
       1365 
1379 
     | 
    
         
             
            - lib/plutonium/ui/block.rb
         
     | 
| 
       1366 
1380 
     | 
    
         
             
            - lib/plutonium/ui/breadcrumbs.rb
         
     | 
| 
      
 1381 
     | 
    
         
            +
            - lib/plutonium/ui/color_mode_selector.rb
         
     | 
| 
       1367 
1382 
     | 
    
         
             
            - lib/plutonium/ui/component/base.rb
         
     | 
| 
       1368 
1383 
     | 
    
         
             
            - lib/plutonium/ui/component/behaviour.rb
         
     | 
| 
       1369 
1384 
     | 
    
         
             
            - lib/plutonium/ui/component/kit.rb
         
     | 
| 
         @@ -1382,6 +1397,11 @@ files: 
     | 
|
| 
       1382 
1397 
     | 
    
         
             
            - lib/plutonium/ui/form/resource.rb
         
     | 
| 
       1383 
1398 
     | 
    
         
             
            - lib/plutonium/ui/form/theme.rb
         
     | 
| 
       1384 
1399 
     | 
    
         
             
            - lib/plutonium/ui/frame_navigator_panel.rb
         
     | 
| 
      
 1400 
     | 
    
         
            +
            - lib/plutonium/ui/layout/base.rb
         
     | 
| 
      
 1401 
     | 
    
         
            +
            - lib/plutonium/ui/layout/header.rb
         
     | 
| 
      
 1402 
     | 
    
         
            +
            - lib/plutonium/ui/layout/resource_layout.rb
         
     | 
| 
      
 1403 
     | 
    
         
            +
            - lib/plutonium/ui/layout/rodauth_layout.rb
         
     | 
| 
      
 1404 
     | 
    
         
            +
            - lib/plutonium/ui/layout/sidebar.rb
         
     | 
| 
       1385 
1405 
     | 
    
         
             
            - lib/plutonium/ui/page/base.rb
         
     | 
| 
       1386 
1406 
     | 
    
         
             
            - lib/plutonium/ui/page/edit.rb
         
     | 
| 
       1387 
1407 
     | 
    
         
             
            - lib/plutonium/ui/page/index.rb
         
     | 
| 
         @@ -1401,6 +1421,8 @@ files: 
     | 
|
| 
       1401 
1421 
     | 
    
         
             
            - lib/plutonium/ui/table/resource.rb
         
     | 
| 
       1402 
1422 
     | 
    
         
             
            - lib/plutonium/ui/table/theme.rb
         
     | 
| 
       1403 
1423 
     | 
    
         
             
            - lib/plutonium/version.rb
         
     | 
| 
      
 1424 
     | 
    
         
            +
            - lib/rodauth/features/case_insensitive_login.rb
         
     | 
| 
      
 1425 
     | 
    
         
            +
            - lib/rodauth/plugins.rb
         
     | 
| 
       1404 
1426 
     | 
    
         
             
            - lib/tasks/create_rodauth_admin.rake
         
     | 
| 
       1405 
1427 
     | 
    
         
             
            - package-lock.json
         
     | 
| 
       1406 
1428 
     | 
    
         
             
            - package.json
         
     | 
| 
         @@ -1418,6 +1440,7 @@ files: 
     | 
|
| 
       1418 
1440 
     | 
    
         
             
            - src/js/controllers/form_controller.js
         
     | 
| 
       1419 
1441 
     | 
    
         
             
            - src/js/controllers/frame_navigator_controller.js
         
     | 
| 
       1420 
1442 
     | 
    
         
             
            - src/js/controllers/has_many_panel_controller.js
         
     | 
| 
      
 1443 
     | 
    
         
            +
            - src/js/controllers/header_controller.js
         
     | 
| 
       1421 
1444 
     | 
    
         
             
            - src/js/controllers/interactive_action_form_controller.js
         
     | 
| 
       1422 
1445 
     | 
    
         
             
            - src/js/controllers/nav_grid_menu_controller.js
         
     | 
| 
       1423 
1446 
     | 
    
         
             
            - src/js/controllers/nav_grid_menu_item_controller.js
         
     | 
| 
         @@ -1429,8 +1452,8 @@ files: 
     | 
|
| 
       1429 
1452 
     | 
    
         
             
            - src/js/controllers/resource_collapse_controller.js
         
     | 
| 
       1430 
1453 
     | 
    
         
             
            - src/js/controllers/resource_dismiss_controller.js
         
     | 
| 
       1431 
1454 
     | 
    
         
             
            - src/js/controllers/resource_drop_down_controller.js
         
     | 
| 
       1432 
     | 
    
         
            -
            - src/js/controllers/resource_header_controller.js
         
     | 
| 
       1433 
1455 
     | 
    
         
             
            - src/js/controllers/resource_layout_controller.js
         
     | 
| 
      
 1456 
     | 
    
         
            +
            - src/js/controllers/sidebar_controller.js
         
     | 
| 
       1434 
1457 
     | 
    
         
             
            - src/js/controllers/sidebar_menu_controller.js
         
     | 
| 
       1435 
1458 
     | 
    
         
             
            - src/js/controllers/sidebar_menu_item_controller.js
         
     | 
| 
       1436 
1459 
     | 
    
         
             
            - src/js/controllers/table_controller.js
         
     |