essence 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/essence/cli.rb +1 -1
- data/lib/essence/components/alert.rb +50 -0
- data/lib/essence/components/checkbox.rb +17 -0
- data/lib/essence/components/essence.rb +0 -2
- data/lib/essence/components/heading.rb +28 -0
- data/lib/essence/components/input.rb +14 -0
- data/lib/essence/components/label.rb +28 -0
- data/lib/essence/components/metric.rb +40 -0
- data/lib/essence/components/separator.rb +29 -0
- data/lib/essence/components/switch.rb +69 -0
- data/lib/essence/components/text.rb +21 -0
- data/lib/essence/configuration.rb +2 -0
- data/lib/essence/definitions.rb +89 -0
- data/lib/essence/stimulus/switch_controller.js +32 -0
- data/lib/essence/version.rb +1 -1
- data/lib/essence.rb +40 -12
- metadata +15 -5
- /data/{essence → lib/essence}/stimulus/tabs_controller.js +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f50eba3dff7653e3e65f0f1e2dabb114782f0e0bf09cb64995118d86427b65b1
         | 
| 4 | 
            +
              data.tar.gz: 21ce8e60063dc1930aa31eb4f3bb22be5045ffefd15fed55db823178dcc0d4da
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2a6738cd42f2504d0b96be1b711abba2a4788cc6a411e27f2d47d62716cf6051b3f3835e95a68d45103fc47da909f1d02c7fe2c1226fd661362c337d89df4e09
         | 
| 7 | 
            +
              data.tar.gz: ac414b095aa27a017b2438bcf9da0bfd2e8f638c21525b1bf3f749573fbb0771f3250ae418151f5175ef9f8ff44d25ef172d56317e7cc640836e3c25eeddb07d
         | 
    
        data/lib/essence/cli.rb
    CHANGED
    
    | @@ -17,7 +17,7 @@ module Essence | |
| 17 17 | 
             
                  extend Dry::CLI::Registry
         | 
| 18 18 |  | 
| 19 19 | 
             
                  # Constants
         | 
| 20 | 
            -
                  STIMULUS_CONTROLLERS_DIR = Pathname.new( | 
| 20 | 
            +
                  STIMULUS_CONTROLLERS_DIR = Pathname.new(File.expand_path("stimulus", __dir__))
         | 
| 21 21 | 
             
                  STIMULUS_CONTROLLERS_DESTINATION_DIR = Pathname.new(File.expand_path(Dir.pwd)).join(::Essence.configuration.stimulus_controller_path)
         | 
| 22 22 |  | 
| 23 23 | 
             
                  COMPONENTS_DIR = Pathname.new(File.expand_path("components", __dir__))
         | 
| @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Essence::Alert < Essence::Essence
         | 
| 4 | 
            +
              BASE = "bg-white border-l-2 flex flex-col p-3 sm:p-4 bg-gray-50/50"
         | 
| 5 | 
            +
              TITLE_BASE = "text-gray-900 text-sm sm:text-base font-medium w-full"
         | 
| 6 | 
            +
              DESCRIPTION_BASE = "text-gray-700 flex text-xs sm:text-sm w-full"
         | 
| 7 | 
            +
              ICON_BASE = "inline-flex items-center justify-center w-fit size-7 rounded-xs"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              KINDS = {
         | 
| 10 | 
            +
                primary: "border-blue-500",
         | 
| 11 | 
            +
                critical: "border-rose-600",
         | 
| 12 | 
            +
                warning: "border-orange-400",
         | 
| 13 | 
            +
                success: "border-emerald-500"
         | 
| 14 | 
            +
              }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              ICON_KINDS = {
         | 
| 17 | 
            +
                primary: "bg-blue-500 text-white",
         | 
| 18 | 
            +
                critical: "bg-rose-600 text-white",
         | 
| 19 | 
            +
                warning: "bg-orange-400 text-gray-900",
         | 
| 20 | 
            +
                success: "bg-emerald-500 text-white"
         | 
| 21 | 
            +
              }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              attr_reader :kind
         | 
| 24 | 
            +
              attr_reader :attributes
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def initialize(kind: :primary, **attributes)
         | 
| 27 | 
            +
                @kind = kind
         | 
| 28 | 
            +
                super(**attributes)
         | 
| 29 | 
            +
                @attributes[:class] = merge_classes([ BASE, KINDS[kind], attributes[:class] ])
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              def view_template(&)
         | 
| 33 | 
            +
                div(**attributes, &)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def title(**mattributes, &)
         | 
| 37 | 
            +
                mattributes[:class] = merge_classes([ TITLE_BASE, mattributes[:class] ])
         | 
| 38 | 
            +
                h5(**mattributes, &)
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              def description(**mattributes, &)
         | 
| 42 | 
            +
                mattributes[:class] = merge_classes([ DESCRIPTION_BASE, mattributes[:class] ])
         | 
| 43 | 
            +
                p(**mattributes, &)
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              def icon(**mattributes, &)
         | 
| 47 | 
            +
                mattributes[:class] = merge_classes([ ICON_BASE, ICON_KINDS[kind], mattributes[:class] ])
         | 
| 48 | 
            +
                div(**mattributes, &)
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Essence::Checkbox < Essence::Essence
         | 
| 4 | 
            +
              BASE = "appearance-none size-3.5 cursor-pointer transition duration-100 rounded-xs border border-gray-300 focus:ring-0 checked:border-indigo-600 checked:bg-indigo-500 indeterminate:border-indigo-600 indeterminate:bg-indigo-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              attr_reader :attributes
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def initialize(**attributes)
         | 
| 9 | 
            +
                super(**attributes)
         | 
| 10 | 
            +
                @attributes[:class] = merge_classes(BASE, attributes[:class])
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def view_template
         | 
| 14 | 
            +
                attributes[:type] = :checkbox
         | 
| 15 | 
            +
                input(**attributes)
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            class Essence::Heading < Essence::Essence
         | 
| 2 | 
            +
              ALLOWED_TAGS = [ :h1, :h2, :h3, :h4, :h5, :h6 ]
         | 
| 3 | 
            +
              BASE = "font-medium text-gray-900 leading-normal"
         | 
| 4 | 
            +
              SIZES = {
         | 
| 5 | 
            +
                xs: "text-base lg:text-lg",
         | 
| 6 | 
            +
                sm: "text-lg lg:text-xl",
         | 
| 7 | 
            +
                md: "text-xl lg:text-2xl",
         | 
| 8 | 
            +
                lg: "text-2xl lg:text-3xl",
         | 
| 9 | 
            +
                xl: "text-3xl lg:text-4xl",
         | 
| 10 | 
            +
                "2xl": "text-4xl lg:text-5xl",
         | 
| 11 | 
            +
                "3xl": "text-5xl lg:text-6xl"
         | 
| 12 | 
            +
              }
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              attr_reader :as
         | 
| 15 | 
            +
              attr_reader :size
         | 
| 16 | 
            +
              attr_reader :attributes
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def initialize(as: :h2, size: :xs, **attributes)
         | 
| 19 | 
            +
                super(**attributes)
         | 
| 20 | 
            +
                @as = ALLOWED_TAGS.include?(as.to_sym) ? as.to_sym : :h1
         | 
| 21 | 
            +
                @size = SIZES.keys.include?(size.to_sym) ? size.to_sym : :xs
         | 
| 22 | 
            +
                @attributes[:class] = merge_classes([ BASE, SIZES[size], attributes[:class] ])
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def view_template(&)
         | 
| 26 | 
            +
                tag(as, **attributes, &)
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Essence::Input < Essence::Essence
         | 
| 4 | 
            +
              BASE = "flex px-4 h-10 md:h-12 rounded-sm border border-gray-200/80 focus:outline-none focus:ring-offset-2 focus-visible:ring-2"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              def initialize(**attributes)
         | 
| 7 | 
            +
                super(**attributes)
         | 
| 8 | 
            +
                @attributes[:class] = merge_classes([ BASE, @attributes[:class] ])
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def view_template(&)
         | 
| 12 | 
            +
                input(**attributes)
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Essence::Label < Essence::Essence
         | 
| 4 | 
            +
              BASE = "flex text-sm font-medium text-gray-700"
         | 
| 5 | 
            +
              HELPER_BASE = "text-xs font-normal text-gray-500"
         | 
| 6 | 
            +
              ASTERISK_BASE = "text-rose-500 font-normal mx-0.5"
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              attr_reader :attributes
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def initialize(**attributes)
         | 
| 11 | 
            +
                super(**attributes)
         | 
| 12 | 
            +
                @attributes[:class] = merge_classes([ BASE, attributes[:class], !!attributes[:for] ? "cursor-pointer" : "" ])
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def view_template(&)
         | 
| 16 | 
            +
                label(**@attributes, &)
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def asterisk(**mattributes)
         | 
| 20 | 
            +
                mattributes[:class] = merge_classes([ ASTERISK_BASE, mattributes[:class] ])
         | 
| 21 | 
            +
                span(**mattributes) { "*" }
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              def helper_text(**mattributes, &)
         | 
| 25 | 
            +
                mattributes[:class] = merge_classes([ HELPER_BASE, mattributes[:class] ])
         | 
| 26 | 
            +
                p(**mattributes, &)
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Essence::Metric < Essence::Essence
         | 
| 4 | 
            +
              BASE = "p-4 border rounded-xs"
         | 
| 5 | 
            +
              HELPER_BASE = "text-xs uppercase font-medium text-gray-500"
         | 
| 6 | 
            +
              TITLE_BASE = "text-2xl text-gray-900 font-medium"
         | 
| 7 | 
            +
              BODY_BASE = "text-sm text-gray-700"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              KINDS = {
         | 
| 10 | 
            +
                primary: "",
         | 
| 11 | 
            +
                secondary: "border-transparent bg-gray-100"
         | 
| 12 | 
            +
              }
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              attr_reader :kind
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def initialize(kind: :primary, **attributes)
         | 
| 17 | 
            +
                @kind = kind
         | 
| 18 | 
            +
                super(**attributes)
         | 
| 19 | 
            +
                @attributes[:class] = merge_classes([ BASE, KINDS[kind], @attributes[:class] ])
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def view_template(&)
         | 
| 23 | 
            +
                div(**attributes, &)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def title(**mattributes, &)
         | 
| 27 | 
            +
                mattributes[:class] = merge_classes([ TITLE_BASE, mattributes[:class] ])
         | 
| 28 | 
            +
                h5(**mattributes, &)
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              def helper(**mattributes, &)
         | 
| 32 | 
            +
                mattributes[:class] = merge_classes([ HELPER_BASE, mattributes[:class] ])
         | 
| 33 | 
            +
                p(**mattributes, &)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def body(**mattributes, &)
         | 
| 37 | 
            +
                mattributes[:class] = merge_classes([ BODY_BASE, mattributes[:class] ])
         | 
| 38 | 
            +
                p(**mattributes, &)
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Essence::Separator < Essence::Essence
         | 
| 4 | 
            +
              BASE = "border-gray-200/50"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              KINDS = {
         | 
| 7 | 
            +
                horizontal: "border-t",
         | 
| 8 | 
            +
                vertical: "border-l h-full"
         | 
| 9 | 
            +
              }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              attr_reader :kind
         | 
| 12 | 
            +
              attr_reader :attributes
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def initialize(kind: :horizontal, **attributes)
         | 
| 15 | 
            +
                @kind = kind
         | 
| 16 | 
            +
                super(**attributes)
         | 
| 17 | 
            +
                @attributes[:class] = merge_classes([ BASE, KINDS[kind], @attributes[:class] ])
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def view_template
         | 
| 21 | 
            +
                element_tag(**attributes)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              private
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def element_tag(...)
         | 
| 27 | 
            +
                kind.to_sym == :horizontal ? hr(...) : div(...)
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,69 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # A switch component that can be toggled on and off.
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # ==== Examples
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            #    render Switch.new
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # ==== Documentation
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # https://essence.primevise.com/components/switch
         | 
| 12 | 
            +
            #
         | 
| 13 | 
            +
            class Essence::Switch < Essence::Essence
         | 
| 14 | 
            +
              BASE = "relative inline-flex h-6 w-12 shrink-0 cursor-pointer rounded-full border-2 border-transparent bg-gray-200 transition-colors duration-200 ease-in-out focus:ring-2 focus:ring-indigo-200 focus:ring-offset-2 focus:outline-hidden"
         | 
| 15 | 
            +
              LEVER_BASE = "pointer-events-none inline-block size-5 translate-x-0 transform rounded-full bg-white ring-0 transition duration-200 ease-in-out"
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              ACTIVE_CLASSES = "bg-indigo-600"
         | 
| 18 | 
            +
              INACTIVE_CLASSES = "bg-gray-200"
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              ACTIVE_LEVER_CLASSES = "translate-x-6"
         | 
| 21 | 
            +
              INACTIVE_LEVER_CLASSES = "translate-x-0"
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def initialize(**attributes)
         | 
| 24 | 
            +
                super(**attributes)
         | 
| 25 | 
            +
                @attributes[:class] = merge_classes([ BASE, @attributes[:class] ])
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def view_template(&)
         | 
| 29 | 
            +
                button(**attributes) do
         | 
| 30 | 
            +
                  span(class: "sr-only") { "Use setting" }
         | 
| 31 | 
            +
                  span(
         | 
| 32 | 
            +
                    aria_hidden: "true",
         | 
| 33 | 
            +
                    class: LEVER_BASE,
         | 
| 34 | 
            +
                    data: {
         | 
| 35 | 
            +
                      essence__switch_target: "lever"
         | 
| 36 | 
            +
                    },
         | 
| 37 | 
            +
                  )
         | 
| 38 | 
            +
                  yield if block_given?
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def hidden_input(**mattributes)
         | 
| 43 | 
            +
                mattributes[:type] = "hidden"
         | 
| 44 | 
            +
                mattributes[:name] = mattributes[:name] || "enabled"
         | 
| 45 | 
            +
                mattributes[:value] = mattributes[:value] || false
         | 
| 46 | 
            +
                mattributes[:data] = { essence__switch_target: "input" }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                input(**mattributes)
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              private
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              def default_attributes
         | 
| 54 | 
            +
                {
         | 
| 55 | 
            +
                  type: "button",
         | 
| 56 | 
            +
                  role: "switch",
         | 
| 57 | 
            +
                  aria_checked: false,
         | 
| 58 | 
            +
                  data: {
         | 
| 59 | 
            +
                    controller: "essence--switch",
         | 
| 60 | 
            +
                    action: "click->essence--switch#toggle",
         | 
| 61 | 
            +
                    essence__switch_active_class: ACTIVE_CLASSES,
         | 
| 62 | 
            +
                    essence__switch_inactive_class: INACTIVE_CLASSES,
         | 
| 63 | 
            +
                    essence__switch_active_lever_class: ACTIVE_LEVER_CLASSES,
         | 
| 64 | 
            +
                    essence__switch_inactive_lever_class: INACTIVE_LEVER_CLASSES
         | 
| 65 | 
            +
                  }
         | 
| 66 | 
            +
                }
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Essence::Text < Essence::Essence
         | 
| 4 | 
            +
              BASE = "text-base text-gray-500 dark:text-gray-400"
         | 
| 5 | 
            +
              SIZES = {
         | 
| 6 | 
            +
                sm: "text-sm",
         | 
| 7 | 
            +
                md: "text-base",
         | 
| 8 | 
            +
                lg: "text-lg"
         | 
| 9 | 
            +
              }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              attr_reader :size
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def initialize(size: :md, **attributes)
         | 
| 14 | 
            +
                super(**attributes)
         | 
| 15 | 
            +
                @attributes[:class] = merge_classes([ BASE, SIZES[size], attributes[:class] ])
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def view_template(&)
         | 
| 19 | 
            +
                p(**attributes, &)
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -1,9 +1,11 @@ | |
| 1 1 | 
             
            module Essence
         | 
| 2 2 | 
             
              class Configuration
         | 
| 3 | 
            +
                attr_accessor :api_key
         | 
| 3 4 | 
             
                attr_accessor :phlex_components_path
         | 
| 4 5 | 
             
                attr_accessor :stimulus_controller_path
         | 
| 5 6 |  | 
| 6 7 | 
             
                def initialize
         | 
| 8 | 
            +
                  @api_key = nil
         | 
| 7 9 | 
             
                  @phlex_components_path = "app/components"
         | 
| 8 10 | 
             
                  @stimulus_controller_path = "app/javascript/controllers/essence"
         | 
| 9 11 | 
             
                end
         | 
| @@ -0,0 +1,89 @@ | |
| 1 | 
            +
            module Essence
         | 
| 2 | 
            +
              DEFINITIONS = {
         | 
| 3 | 
            +
                accordion: {
         | 
| 4 | 
            +
                  name: "Accordion",
         | 
| 5 | 
            +
                  class_name: "Essence::Accordion",
         | 
| 6 | 
            +
                  stimulus: false
         | 
| 7 | 
            +
                },
         | 
| 8 | 
            +
                alert: {
         | 
| 9 | 
            +
                  name: "Alert",
         | 
| 10 | 
            +
                  class_name: "Essence::Alert",
         | 
| 11 | 
            +
                  stimulus: false
         | 
| 12 | 
            +
                },
         | 
| 13 | 
            +
                avatar: {
         | 
| 14 | 
            +
                  name: "Avatar",
         | 
| 15 | 
            +
                  class_name: "Essence::Avatar",
         | 
| 16 | 
            +
                  stimulus: false
         | 
| 17 | 
            +
                },
         | 
| 18 | 
            +
                badge: {
         | 
| 19 | 
            +
                  name: "Badge",
         | 
| 20 | 
            +
                  class_name: "Essence::Badge",
         | 
| 21 | 
            +
                  stimulus: false
         | 
| 22 | 
            +
                },
         | 
| 23 | 
            +
                button: {
         | 
| 24 | 
            +
                  name: "Button",
         | 
| 25 | 
            +
                  class_name: "Essence::Button",
         | 
| 26 | 
            +
                  stimulus: false
         | 
| 27 | 
            +
                },
         | 
| 28 | 
            +
                checkbox: {
         | 
| 29 | 
            +
                  name: "Checkbox",
         | 
| 30 | 
            +
                  class_name: "Essence::Checkbox",
         | 
| 31 | 
            +
                  stimulus: false
         | 
| 32 | 
            +
                },
         | 
| 33 | 
            +
                heading: {
         | 
| 34 | 
            +
                  name: "Heading",
         | 
| 35 | 
            +
                  class_name: "Essence::Heading",
         | 
| 36 | 
            +
                  stimulus: false
         | 
| 37 | 
            +
                },
         | 
| 38 | 
            +
                label: {
         | 
| 39 | 
            +
                  name: "Label",
         | 
| 40 | 
            +
                  class_name: "Essence::Label",
         | 
| 41 | 
            +
                  stimulus: false
         | 
| 42 | 
            +
                },
         | 
| 43 | 
            +
                input: {
         | 
| 44 | 
            +
                  name: "Input",
         | 
| 45 | 
            +
                  class_name: "Essence::Input",
         | 
| 46 | 
            +
                  stimulus: false
         | 
| 47 | 
            +
                },
         | 
| 48 | 
            +
                link: {
         | 
| 49 | 
            +
                  name: "Link",
         | 
| 50 | 
            +
                  class_name: "Essence::Link",
         | 
| 51 | 
            +
                  stimulus: false
         | 
| 52 | 
            +
                },
         | 
| 53 | 
            +
                metric: {
         | 
| 54 | 
            +
                  name: "Metric",
         | 
| 55 | 
            +
                  class_name: "Essence::Metric",
         | 
| 56 | 
            +
                  stimulus: false
         | 
| 57 | 
            +
                },
         | 
| 58 | 
            +
                row: {
         | 
| 59 | 
            +
                  name: "Row",
         | 
| 60 | 
            +
                  class_name: "Essence::Row",
         | 
| 61 | 
            +
                  stimulus: false
         | 
| 62 | 
            +
                },
         | 
| 63 | 
            +
                separator: {
         | 
| 64 | 
            +
                  name: "Separator",
         | 
| 65 | 
            +
                  class_name: "Essence::Separator",
         | 
| 66 | 
            +
                  stimulus: false
         | 
| 67 | 
            +
                },
         | 
| 68 | 
            +
                skeleton: {
         | 
| 69 | 
            +
                  name: "Skeleton",
         | 
| 70 | 
            +
                  class_name: "Essence::Skeleton",
         | 
| 71 | 
            +
                  stimulus: false
         | 
| 72 | 
            +
                },
         | 
| 73 | 
            +
                switch: {
         | 
| 74 | 
            +
                  name: "Switch",
         | 
| 75 | 
            +
                  class_name: "Essence::Switch",
         | 
| 76 | 
            +
                  stimulus: true
         | 
| 77 | 
            +
                },
         | 
| 78 | 
            +
                tabs: {
         | 
| 79 | 
            +
                  name: "Tabs",
         | 
| 80 | 
            +
                  class_name: "Essence::Tabs",
         | 
| 81 | 
            +
                  stimulus: true
         | 
| 82 | 
            +
                },
         | 
| 83 | 
            +
                text: {
         | 
| 84 | 
            +
                  name: "Text",
         | 
| 85 | 
            +
                  class_name: "Essence::Text",
         | 
| 86 | 
            +
                  stimulus: false
         | 
| 87 | 
            +
                }
         | 
| 88 | 
            +
              }
         | 
| 89 | 
            +
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            import { Controller } from "@hotwired/stimulus";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            export default class extends Controller {
         | 
| 4 | 
            +
              static targets = ["input", "lever"];
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              static classes = ["active", "inactive", "activeLever", "inactiveLever"];
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              static values = {
         | 
| 9 | 
            +
                checked: {
         | 
| 10 | 
            +
                  type: Boolean,
         | 
| 11 | 
            +
                  default: false,
         | 
| 12 | 
            +
                },
         | 
| 13 | 
            +
              };
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              connect() {
         | 
| 16 | 
            +
                if (this.checkedValue) this.toggle();
         | 
| 17 | 
            +
              }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              toggle(event) {
         | 
| 20 | 
            +
                this.element.ariaChecked =
         | 
| 21 | 
            +
                  this.element.ariaChecked == "true" ? false : true;
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                if (this.hasInputTarget)
         | 
| 24 | 
            +
                  this.inputTarget.value = this.element.ariaChecked == "true";
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                this.element.classList.toggle(...this.activeClasses);
         | 
| 27 | 
            +
                this.element.classList.toggle(...this.inactiveClasses);
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                this.leverTarget.classList.toggle(...this.activeLeverClasses);
         | 
| 30 | 
            +
                this.leverTarget.classList.toggle(...this.inactiveLeverClasses);
         | 
| 31 | 
            +
              }
         | 
| 32 | 
            +
            }
         | 
    
        data/lib/essence/version.rb
    CHANGED
    
    
    
        data/lib/essence.rb
    CHANGED
    
    | @@ -3,20 +3,9 @@ | |
| 3 3 | 
             
            require "tailwind_merge"
         | 
| 4 4 |  | 
| 5 5 | 
             
            require_relative "essence/configuration"
         | 
| 6 | 
            +
            require_relative "essence/definitions"
         | 
| 6 7 |  | 
| 7 8 | 
             
            module Essence
         | 
| 8 | 
            -
              # Autoloading
         | 
| 9 | 
            -
              # Components
         | 
| 10 | 
            -
              autoload :Accordion, "essence/components/accordion"
         | 
| 11 | 
            -
              autoload :Avatar, "essence/components/avatar"
         | 
| 12 | 
            -
              autoload :Badge, "essence/components/badge"
         | 
| 13 | 
            -
              autoload :Button, "essence/components/button"
         | 
| 14 | 
            -
              # autoload :Essence, "essence/components/essence" # Base component
         | 
| 15 | 
            -
              autoload :Link, "essence/components/link"
         | 
| 16 | 
            -
              autoload :Row, "essence/components/row"
         | 
| 17 | 
            -
              autoload :Skeleton, "essence/components/skeleton"
         | 
| 18 | 
            -
             | 
| 19 | 
            -
              # CLI
         | 
| 20 9 | 
             
              autoload :CLI, "essence/cli"
         | 
| 21 10 |  | 
| 22 11 | 
             
              class << self
         | 
| @@ -33,6 +22,10 @@ module Essence | |
| 33 22 | 
             
                  yield configuration
         | 
| 34 23 | 
             
                end
         | 
| 35 24 |  | 
| 25 | 
            +
                def definitions
         | 
| 26 | 
            +
                  @definitions ||= Essence::DEFINITIONS
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 36 29 | 
             
                # COMPONENTS
         | 
| 37 30 | 
             
                def components
         | 
| 38 31 | 
             
                  @components ||= {
         | 
| @@ -41,6 +34,11 @@ module Essence | |
| 41 34 | 
             
                      class_name: "Essence::Accordion",
         | 
| 42 35 | 
             
                      stimulus: false
         | 
| 43 36 | 
             
                    },
         | 
| 37 | 
            +
                    alert: {
         | 
| 38 | 
            +
                      name: "Alert",
         | 
| 39 | 
            +
                      class_name: "Essence::Alert",
         | 
| 40 | 
            +
                      stimulus: false
         | 
| 41 | 
            +
                    },
         | 
| 44 42 | 
             
                    avatar: {
         | 
| 45 43 | 
             
                      name: "Avatar",
         | 
| 46 44 | 
             
                      class_name: "Essence::Avatar",
         | 
| @@ -56,21 +54,51 @@ module Essence | |
| 56 54 | 
             
                      class_name: "Essence::Button",
         | 
| 57 55 | 
             
                      stimulus: false
         | 
| 58 56 | 
             
                    },
         | 
| 57 | 
            +
                    checkbox: {
         | 
| 58 | 
            +
                      name: "Checkbox",
         | 
| 59 | 
            +
                      class_name: "Essence::Checkbox",
         | 
| 60 | 
            +
                      stimulus: false
         | 
| 61 | 
            +
                    },
         | 
| 62 | 
            +
                    label: {
         | 
| 63 | 
            +
                      name: "Label",
         | 
| 64 | 
            +
                      class_name: "Essence::Label",
         | 
| 65 | 
            +
                      stimulus: false
         | 
| 66 | 
            +
                    },
         | 
| 67 | 
            +
                    input: {
         | 
| 68 | 
            +
                      name: "Input",
         | 
| 69 | 
            +
                      class_name: "Essence::Input",
         | 
| 70 | 
            +
                      stimulus: false
         | 
| 71 | 
            +
                    },
         | 
| 59 72 | 
             
                    link: {
         | 
| 60 73 | 
             
                      name: "Link",
         | 
| 61 74 | 
             
                      class_name: "Essence::Link",
         | 
| 62 75 | 
             
                      stimulus: false
         | 
| 63 76 | 
             
                    },
         | 
| 77 | 
            +
                    metric: {
         | 
| 78 | 
            +
                      name: "Metric",
         | 
| 79 | 
            +
                      class_name: "Essence::Metric",
         | 
| 80 | 
            +
                      stimulus: false
         | 
| 81 | 
            +
                    },
         | 
| 64 82 | 
             
                    row: {
         | 
| 65 83 | 
             
                      name: "Row",
         | 
| 66 84 | 
             
                      class_name: "Essence::Row",
         | 
| 67 85 | 
             
                      stimulus: false
         | 
| 68 86 | 
             
                    },
         | 
| 87 | 
            +
                    separator: {
         | 
| 88 | 
            +
                      name: "Separator",
         | 
| 89 | 
            +
                      class_name: "Essence::Separator",
         | 
| 90 | 
            +
                      stimulus: false
         | 
| 91 | 
            +
                    },
         | 
| 69 92 | 
             
                    skeleton: {
         | 
| 70 93 | 
             
                      name: "Skeleton",
         | 
| 71 94 | 
             
                      class_name: "Essence::Skeleton",
         | 
| 72 95 | 
             
                      stimulus: false
         | 
| 73 96 | 
             
                    },
         | 
| 97 | 
            +
                    switch: {
         | 
| 98 | 
            +
                      name: "Switch",
         | 
| 99 | 
            +
                      class_name: "Essence::Switch",
         | 
| 100 | 
            +
                      stimulus: true
         | 
| 101 | 
            +
                    },
         | 
| 74 102 | 
             
                    tabs: {
         | 
| 75 103 | 
             
                      name: "Tabs",
         | 
| 76 104 | 
             
                      class_name: "Essence::Tabs",
         | 
    
        metadata
    CHANGED
    
    | @@ -1,15 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: essence
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Elvinas Predkelis
         | 
| 8 | 
            -
            - Primevise
         | 
| 9 8 | 
             
            autorequire:
         | 
| 10 9 | 
             
            bindir: exe
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2025- | 
| 11 | 
            +
            date: 2025-04-15 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: dry-cli
         | 
| @@ -61,14 +60,13 @@ dependencies: | |
| 61 60 | 
             
                    version: 0.13.3
         | 
| 62 61 | 
             
            description: Component library for Ruby applications using Phlex
         | 
| 63 62 | 
             
            email:
         | 
| 64 | 
            -
            -  | 
| 63 | 
            +
            - elvinas@primevise.com
         | 
| 65 64 | 
             
            executables:
         | 
| 66 65 | 
             
            - essence
         | 
| 67 66 | 
             
            extensions: []
         | 
| 68 67 | 
             
            extra_rdoc_files: []
         | 
| 69 68 | 
             
            files:
         | 
| 70 69 | 
             
            - README.md
         | 
| 71 | 
            -
            - essence/stimulus/tabs_controller.js
         | 
| 72 70 | 
             
            - exe/essence
         | 
| 73 71 | 
             
            - lib/essence.rb
         | 
| 74 72 | 
             
            - lib/essence/cli.rb
         | 
| @@ -76,17 +74,29 @@ files: | |
| 76 74 | 
             
            - lib/essence/cli/install.rb
         | 
| 77 75 | 
             
            - lib/essence/cli/version.rb
         | 
| 78 76 | 
             
            - lib/essence/components/accordion.rb
         | 
| 77 | 
            +
            - lib/essence/components/alert.rb
         | 
| 79 78 | 
             
            - lib/essence/components/avatar.rb
         | 
| 80 79 | 
             
            - lib/essence/components/badge.rb
         | 
| 81 80 | 
             
            - lib/essence/components/button.rb
         | 
| 81 | 
            +
            - lib/essence/components/checkbox.rb
         | 
| 82 82 | 
             
            - lib/essence/components/dialog.rb
         | 
| 83 83 | 
             
            - lib/essence/components/dropdown.rb
         | 
| 84 84 | 
             
            - lib/essence/components/essence.rb
         | 
| 85 | 
            +
            - lib/essence/components/heading.rb
         | 
| 86 | 
            +
            - lib/essence/components/input.rb
         | 
| 87 | 
            +
            - lib/essence/components/label.rb
         | 
| 85 88 | 
             
            - lib/essence/components/link.rb
         | 
| 89 | 
            +
            - lib/essence/components/metric.rb
         | 
| 86 90 | 
             
            - lib/essence/components/row.rb
         | 
| 91 | 
            +
            - lib/essence/components/separator.rb
         | 
| 87 92 | 
             
            - lib/essence/components/skeleton.rb
         | 
| 93 | 
            +
            - lib/essence/components/switch.rb
         | 
| 88 94 | 
             
            - lib/essence/components/tabs.rb
         | 
| 95 | 
            +
            - lib/essence/components/text.rb
         | 
| 89 96 | 
             
            - lib/essence/configuration.rb
         | 
| 97 | 
            +
            - lib/essence/definitions.rb
         | 
| 98 | 
            +
            - lib/essence/stimulus/switch_controller.js
         | 
| 99 | 
            +
            - lib/essence/stimulus/tabs_controller.js
         | 
| 90 100 | 
             
            - lib/essence/version.rb
         | 
| 91 101 | 
             
            homepage: https://rubygems.org/gems/essence
         | 
| 92 102 | 
             
            licenses:
         | 
| 
            File without changes
         |