cm-admin 0.6.1 → 0.6.2
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/helpers/cm_admin/application_helper.rb +6 -0
- data/app/views/cm_admin/main/_table.html.slim +1 -1
- data/app/views/cm_admin/main/_top_navbar.html.slim +2 -2
- data/lib/cm_admin/model.rb +1 -19
- data/lib/cm_admin/models/action.rb +2 -4
- data/lib/cm_admin/models/controller_method.rb +4 -2
- data/lib/cm_admin/models/dsl_method.rb +10 -13
- data/lib/cm_admin/version.rb +1 -1
- data/lib/generators/cm_admin/install_generator.rb +1 -0
- data/lib/generators/cm_admin/policy_generator.rb +13 -0
- data/{app/policies → lib/generators/cm_admin/templates}/application_policy.rb +2 -2
- data/lib/generators/cm_admin/templates/policy.rb +8 -0
- data/tmp/cache/webpacker/last-compilation-digest-development +1 -1
- metadata +5 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: cb9d2bfcdbec704c6259f45f51e317e32ad05d5ca4990a52fca17af831f62566
         | 
| 4 | 
            +
              data.tar.gz: 6a357cfe4458e4da3409c8e95e51cda3e36d6d8ebbd00c4518a6928f1815926e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 242b5d01155399a9c9038b1a0811db95c82824ace0c9e4b592c98d9dae5a51b23cf28a80cb89db771f0d647685b5b5b9c83e0ac6774269eb0c88d4c90c792c83
         | 
| 7 | 
            +
              data.tar.gz: 17cd6516e61f6e3ff3aa6fc7515807c3a5fb423d0fa016992aba51bbe2b2f40b885aa6e200c8aefa71b713dd2477fcb3bbb7f63e0ba7de96ca6e2351ae058356
         | 
| @@ -7,5 +7,11 @@ module CmAdmin | |
| 7 7 | 
             
                def current_webpacker_instance
         | 
| 8 8 | 
             
                  CmAdmin.webpacker
         | 
| 9 9 | 
             
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                # Allow if policy is not defined.
         | 
| 12 | 
            +
                def has_valid_policy(model_name, action_name)
         | 
| 13 | 
            +
                  return true unless policy([:cm_admin, model_name.classify.constantize]).methods.include?(:"#{action_name}?")
         | 
| 14 | 
            +
                  policy([:cm_admin, model_name.classify.constantize]).send(:"#{action_name}?")
         | 
| 15 | 
            +
                end
         | 
| 10 16 | 
             
              end
         | 
| 11 17 | 
             
            end
         | 
| @@ -47,7 +47,7 @@ | |
| 47 47 | 
             
                                = link_to "#{page_url('edit', ar_object)}" do
         | 
| 48 48 | 
             
                                  .popup-option Edit
         | 
| 49 49 | 
             
                              - custom_actions.each do |custom_action|
         | 
| 50 | 
            -
                                - if custom_action.name.present? &&  | 
| 50 | 
            +
                                - if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
         | 
| 51 51 | 
             
                                  - if custom_action.display_if.call(ar_object)
         | 
| 52 52 | 
             
                                    = link_to custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb do
         | 
| 53 53 | 
             
                                      .popup-option = custom_action.name.titleize
         | 
| @@ -24,14 +24,14 @@ | |
| 24 24 | 
             
                  - if new_action.any? && policy([:cm_admin, @model.name.classify.constantize]).new?
         | 
| 25 25 | 
             
                    = link_to 'Add', "#{page_url('new')}", class: 'primary-btn ml-2'
         | 
| 26 26 | 
             
                  - @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
         | 
| 27 | 
            -
                    - if custom_action.name.present? &&  | 
| 27 | 
            +
                    - if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
         | 
| 28 28 | 
             
                      - if custom_action.display_type == :button
         | 
| 29 29 | 
             
                        = link_to custom_action.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
         | 
| 30 30 | 
             
                      - elsif custom_action.display_type == :modal
         | 
| 31 31 | 
             
                        = link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
         | 
| 32 32 | 
             
                - elsif @model.current_action.name == 'show'
         | 
| 33 33 | 
             
                  - @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
         | 
| 34 | 
            -
                    - if custom_action.name.present? &&  | 
| 34 | 
            +
                    - if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
         | 
| 35 35 | 
             
                      - if custom_action.display_type == :button && custom_action.display_if.call(@ar_object)
         | 
| 36 36 | 
             
                        = link_to custom_action.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
         | 
| 37 37 | 
             
                      - elsif custom_action.display_type == :modal && custom_action.display_if.call(@ar_object)
         | 
    
        data/lib/cm_admin/model.rb
    CHANGED
    
    | @@ -45,7 +45,6 @@ module CmAdmin | |
| 45 45 | 
             
                  actions unless @actions_set
         | 
| 46 46 | 
             
                  $available_actions = @available_actions.dup
         | 
| 47 47 | 
             
                  self.class.all_actions.push(@available_actions)
         | 
| 48 | 
            -
                  define_policy
         | 
| 49 48 | 
             
                  define_controller
         | 
| 50 49 | 
             
                end
         | 
| 51 50 |  | 
| @@ -101,23 +100,6 @@ module CmAdmin | |
| 101 100 |  | 
| 102 101 | 
             
                private
         | 
| 103 102 |  | 
| 104 | 
            -
                def define_policy
         | 
| 105 | 
            -
                  klass = Class.new(ApplicationPolicy) do
         | 
| 106 | 
            -
                    def initialize(user, record)
         | 
| 107 | 
            -
                      @user = user
         | 
| 108 | 
            -
                      @record = record
         | 
| 109 | 
            -
                    end
         | 
| 110 | 
            -
             | 
| 111 | 
            -
                    $available_actions.each do |action|
         | 
| 112 | 
            -
                      define_method :"#{action.name}?" do
         | 
| 113 | 
            -
                        accessible_by = action.accessible_by.map { |role| "user.#{role}" }.join(' || ')
         | 
| 114 | 
            -
                        eval(accessible_by)
         | 
| 115 | 
            -
                      end
         | 
| 116 | 
            -
                    end
         | 
| 117 | 
            -
                  end
         | 
| 118 | 
            -
                  CmAdmin.const_set "#{@name}Policy", klass
         | 
| 119 | 
            -
                end
         | 
| 120 | 
            -
             | 
| 121 103 | 
             
                # Controller defined for each model
         | 
| 122 104 | 
             
                # If model is User, controller will be UsersController
         | 
| 123 105 | 
             
                def define_controller
         | 
| @@ -135,7 +117,7 @@ module CmAdmin | |
| 135 117 | 
             
                        @model.current_action = @action
         | 
| 136 118 | 
             
                        @ar_object = @model.try(@action.parent || action_name, params)
         | 
| 137 119 | 
             
                        @ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
         | 
| 138 | 
            -
                        authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize
         | 
| 120 | 
            +
                        authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize if defined? "CmAdmin::#{controller_name.classify}Policy".constantize
         | 
| 139 121 | 
             
                        aar_model = request.url.split('/')[-2].classify.constantize  if params[:aar_id]
         | 
| 140 122 | 
             
                        @associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
         | 
| 141 123 | 
             
                        nested_tables = @model.available_fields[:new].except(:fields).keys
         | 
| @@ -6,7 +6,7 @@ module CmAdmin | |
| 6 6 | 
             
                  include Actions::Blocks
         | 
| 7 7 | 
             
                  attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
         | 
| 8 8 | 
             
                    :child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block,
         | 
| 9 | 
            -
                    :display_type, :action_type, :redirection_url, :sort_direction, :sort_column | 
| 9 | 
            +
                    :display_type, :action_type, :redirection_url, :sort_direction, :sort_column
         | 
| 10 10 |  | 
| 11 11 | 
             
                  VALID_SORT_DIRECTION = Set[:asc, :desc].freeze
         | 
| 12 12 |  | 
| @@ -34,14 +34,12 @@ module CmAdmin | |
| 34 34 | 
             
                    self.action_type = :default
         | 
| 35 35 | 
             
                    self.sort_column = :created_at
         | 
| 36 36 | 
             
                    self.sort_direction = :desc
         | 
| 37 | 
            -
                    self.accessible_by = CmAdmin.authorized_roles
         | 
| 38 37 | 
             
                  end
         | 
| 39 38 |  | 
| 40 | 
            -
                  def set_values(page_title, page_description, partial | 
| 39 | 
            +
                  def set_values(page_title, page_description, partial)
         | 
| 41 40 | 
             
                    self.page_title = page_title
         | 
| 42 41 | 
             
                    self.page_description = page_description
         | 
| 43 42 | 
             
                    self.partial = partial
         | 
| 44 | 
            -
                    self.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
         | 
| 45 43 | 
             
                  end
         | 
| 46 44 |  | 
| 47 45 | 
             
                  class << self
         | 
| @@ -5,7 +5,8 @@ module CmAdmin | |
| 5 5 |  | 
| 6 6 | 
             
                  def show(params)
         | 
| 7 7 | 
             
                    @current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
         | 
| 8 | 
            -
                     | 
| 8 | 
            +
                    scoped_model = "CmAdmin::#{self.name}Policy::Scope".constantize.new(Current.user, self.name.constantize).resolve
         | 
| 9 | 
            +
                    @ar_object = scoped_model.find(params[:id])
         | 
| 9 10 | 
             
                  end
         | 
| 10 11 |  | 
| 11 12 | 
             
                  def index(params)
         | 
| @@ -40,7 +41,8 @@ module CmAdmin | |
| 40 41 | 
             
                    sort_column = "created_at"
         | 
| 41 42 | 
             
                    sort_direction = %w[asc desc].include?(sort_params[:sort_direction]) ? sort_params[:sort_direction] : "asc"
         | 
| 42 43 | 
             
                    sort_params = {sort_column: sort_column, sort_direction: sort_direction}
         | 
| 43 | 
            -
                     | 
| 44 | 
            +
                    
         | 
| 45 | 
            +
                    records = "CmAdmin::#{self.name}Policy::Scope".constantize.new(Current.user, self.name.constantize).resolve if records.nil?
         | 
| 44 46 | 
             
                    records = records.order("#{current_action.sort_column} #{current_action.sort_direction}")
         | 
| 45 47 |  | 
| 46 48 | 
             
                    final_data = CmAdmin::Models::Filter.filtered_data(filter_params, records, @filters)
         | 
| @@ -10,28 +10,28 @@ module CmAdmin | |
| 10 10 | 
             
                    # @current_action = CmAdmin::Models::CustomAction.find_by(self, name: name)
         | 
| 11 11 | 
             
                  end
         | 
| 12 12 |  | 
| 13 | 
            -
                  def cm_index(page_title: nil, page_description: nil, partial: nil,  | 
| 13 | 
            +
                  def cm_index(page_title: nil, page_description: nil, partial: nil, &block)
         | 
| 14 14 | 
             
                    @current_action = CmAdmin::Models::Action.find_by(self, name: 'index')
         | 
| 15 | 
            -
                    @current_action.set_values(page_title, page_description, partial | 
| 15 | 
            +
                    @current_action.set_values(page_title, page_description, partial)
         | 
| 16 16 | 
             
                    yield
         | 
| 17 17 | 
             
                    # action.instance_eval(&block)
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 |  | 
| 20 | 
            -
                  def cm_show(page_title: nil, page_description: nil, partial: nil,  | 
| 20 | 
            +
                  def cm_show(page_title: nil, page_description: nil, partial: nil, &block)
         | 
| 21 21 | 
             
                    @current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
         | 
| 22 | 
            -
                    @current_action.set_values(page_title, page_description, partial | 
| 22 | 
            +
                    @current_action.set_values(page_title, page_description, partial)
         | 
| 23 23 | 
             
                    yield
         | 
| 24 24 | 
             
                  end
         | 
| 25 25 |  | 
| 26 | 
            -
                  def cm_edit(page_title: nil,page_description: nil, partial: nil,  | 
| 26 | 
            +
                  def cm_edit(page_title: nil,page_description: nil, partial: nil, &block)
         | 
| 27 27 | 
             
                    @current_action = CmAdmin::Models::Action.find_by(self, name: 'edit')
         | 
| 28 | 
            -
                    @current_action.set_values(page_title, page_description, partial | 
| 28 | 
            +
                    @current_action.set_values(page_title, page_description, partial)
         | 
| 29 29 | 
             
                    yield
         | 
| 30 30 | 
             
                  end
         | 
| 31 31 |  | 
| 32 | 
            -
                  def cm_new(page_title: nil,page_description: nil, partial: nil,  | 
| 32 | 
            +
                  def cm_new(page_title: nil,page_description: nil, partial: nil, &block)
         | 
| 33 33 | 
             
                    @current_action = CmAdmin::Models::Action.find_by(self, name: 'new')
         | 
| 34 | 
            -
                    @current_action.set_values(page_title, page_description, partial | 
| 34 | 
            +
                    @current_action.set_values(page_title, page_description, partial)
         | 
| 35 35 | 
             
                    yield
         | 
| 36 36 | 
             
                  end
         | 
| 37 37 |  | 
| @@ -47,16 +47,14 @@ module CmAdmin | |
| 47 47 | 
             
                    end
         | 
| 48 48 | 
             
                  end
         | 
| 49 49 |  | 
| 50 | 
            -
                  def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil,  | 
| 50 | 
            +
                  def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil, &block)
         | 
| 51 51 | 
             
                    if custom_action.to_s == ''
         | 
| 52 52 | 
             
                      @current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
         | 
| 53 | 
            -
                      @current_action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq  if accessible_by
         | 
| 54 53 | 
             
                      @available_tabs << CmAdmin::Models::Tab.new(tab_name, '', &block)
         | 
| 55 54 | 
             
                    else
         | 
| 56 55 | 
             
                      action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
         | 
| 57 56 | 
             
                                  layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model,
         | 
| 58 57 | 
             
                                  action_type: :custom, display_type: :page)
         | 
| 59 | 
            -
                      action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq  if accessible_by
         | 
| 60 58 | 
             
                      @available_actions << action
         | 
| 61 59 | 
             
                      @current_action = action
         | 
| 62 60 | 
             
                      @available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, &block)
         | 
| @@ -117,12 +115,11 @@ module CmAdmin | |
| 117 115 | 
             
                  #     end
         | 
| 118 116 | 
             
                  #   end
         | 
| 119 117 | 
             
                  # end
         | 
| 120 | 
            -
                  def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil,  | 
| 118 | 
            +
                  def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
         | 
| 121 119 | 
             
                    action = CmAdmin::Models::CustomAction.new(
         | 
| 122 120 | 
             
                                name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
         | 
| 123 121 | 
             
                                parent: self.current_action.name, display_type: display_type, display_if: display_if,
         | 
| 124 122 | 
             
                                action_type: :custom, route_type: route_type, &block)
         | 
| 125 | 
            -
                    action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq  if accessible_by
         | 
| 126 123 | 
             
                    @available_actions << action
         | 
| 127 124 | 
             
                    # self.class.class_eval(&block)
         | 
| 128 125 | 
             
                  end
         | 
    
        data/lib/cm_admin/version.rb
    CHANGED
    
    
| @@ -9,6 +9,7 @@ module CmAdmin | |
| 9 9 | 
             
                    copy_file 'cm_admin_initializer.rb', 'config/initializers/cm_admin.rb'
         | 
| 10 10 | 
             
                    copy_file 'custom.js', 'app/assets/javascripts/custom.js'
         | 
| 11 11 | 
             
                    copy_file 'custom.css', 'app/assets/stylesheets/custom.css'
         | 
| 12 | 
            +
                    copy_file 'application_policy.rb', 'app/policies/application_policy.rb'
         | 
| 12 13 | 
             
                    route 'mount CmAdmin::Engine => "/admin"'
         | 
| 13 14 | 
             
                  end
         | 
| 14 15 | 
             
                end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            require 'rails/generators'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module CmAdmin
         | 
| 4 | 
            +
              module Generators
         | 
| 5 | 
            +
                class PolicyGenerator < Rails::Generators::NamedBase
         | 
| 6 | 
            +
                  source_root File.expand_path('templates', __dir__)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def copy_policy_files
         | 
| 9 | 
            +
                    template "policy.rb", "app/policies/cm_admin/#{file_name}_policy.rb"
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -17,7 +17,7 @@ class ApplicationPolicy | |
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 19 | 
             
              def create?
         | 
| 20 | 
            -
                 | 
| 20 | 
            +
                true
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 23 | 
             
              def new?
         | 
| @@ -43,7 +43,7 @@ class ApplicationPolicy | |
| 43 43 | 
             
                end
         | 
| 44 44 |  | 
| 45 45 | 
             
                def resolve
         | 
| 46 | 
            -
                   | 
| 46 | 
            +
                  scope.all
         | 
| 47 47 | 
             
                end
         | 
| 48 48 |  | 
| 49 49 | 
             
                private
         | 
| @@ -0,0 +1,8 @@ | |
| 1 | 
            +
            class CmAdmin::<%= class_name %>Policy < ApplicationPolicy
         | 
| 2 | 
            +
              <%- available_action_names = (CmAdmin::Model.find_by({name: class_name}).available_actions.map{|action| action.name}.uniq - ['custom_action', 'new', 'edit']) %>
         | 
| 3 | 
            +
              <%- available_action_names.each do |action_name| %>
         | 
| 4 | 
            +
              def <%= action_name %>?
         | 
| 5 | 
            +
                <%= CmAdmin.authorized_roles.map {|role| "@user.#{role}" }.join(' && ') %>
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
              <% end %>
         | 
| 8 | 
            +
            end
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            07d558738c316293586496817b2bccbf6430b5bd
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cm-admin
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.6. | 
| 4 | 
            +
              version: 0.6.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - sajinmp
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire:
         | 
| 11 11 | 
             
            bindir: exe
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2022- | 
| 13 | 
            +
            date: 2022-04-01 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: pagy
         | 
| @@ -152,7 +152,6 @@ files: | |
| 152 152 | 
             
            - app/javascript/packs/cm_admin/quick_search.js
         | 
| 153 153 | 
             
            - app/javascript/packs/cm_admin/scaffolds.js
         | 
| 154 154 | 
             
            - app/javascript/stylesheets/cm_admin/application.scss
         | 
| 155 | 
            -
            - app/policies/application_policy.rb
         | 
| 156 155 | 
             
            - app/views/cm_admin/main/_associated_table.html.slim
         | 
| 157 156 | 
             
            - app/views/cm_admin/main/_cm_pagy_nav.html.slim
         | 
| 158 157 | 
             
            - app/views/cm_admin/main/_drawer.html.slim
         | 
| @@ -222,9 +221,12 @@ files: | |
| 222 221 | 
             
            - lib/cm_admin/view_helpers/navigation_helper.rb
         | 
| 223 222 | 
             
            - lib/cm_admin/view_helpers/page_info_helper.rb
         | 
| 224 223 | 
             
            - lib/generators/cm_admin/install_generator.rb
         | 
| 224 | 
            +
            - lib/generators/cm_admin/policy_generator.rb
         | 
| 225 | 
            +
            - lib/generators/cm_admin/templates/application_policy.rb
         | 
| 225 226 | 
             
            - lib/generators/cm_admin/templates/cm_admin_initializer.rb
         | 
| 226 227 | 
             
            - lib/generators/cm_admin/templates/custom.css
         | 
| 227 228 | 
             
            - lib/generators/cm_admin/templates/custom.js
         | 
| 229 | 
            +
            - lib/generators/cm_admin/templates/policy.rb
         | 
| 228 230 | 
             
            - lib/tasks/webpack_install.rake
         | 
| 229 231 | 
             
            - package.json
         | 
| 230 232 | 
             
            - postcss.config.js
         |