diff --git a/.env.example b/.env.example index 177cb7fc81926..26b1487ae7a8d 100644 --- a/.env.example +++ b/.env.example @@ -23,6 +23,9 @@ FORCE_SSL=false ENABLE_ACCOUNT_SIGNUP=false # Redis config +# specify the configs via single URL or individual variables +# ref: https://www.iana.org/assignments/uri-schemes/prov/redis +# You can also use the following format for the URL: redis://:password@host:port/db_number REDIS_URL=redis://redis:6379 # If you are using docker-compose, set this variable's value to be any string, # which will be the password for the redis service running inside the docker-compose @@ -180,8 +183,6 @@ ANDROID_SHA256_CERT_FINGERPRINT=AC:73:8E:DE:EB:56:EA:CC:10:87:02:A7:65:37:7B:38: ## Sentry # SENTRY_DSN= -## LogRocket -# LOG_ROCKET_PROJECT_ID=xxxxx/some-project # MICROSOFT CLARITY # MS_CLARITY_TOKEN=xxxxxxxxx @@ -251,9 +252,6 @@ AZURE_APP_SECRET= ## OpenAI key # OPENAI_API_KEY= -# Sentiment analysis model file path -SENTIMENT_FILE_PATH= - # Housekeeping/Performance related configurations # Set to true if you want to remove stale contact inboxes # contact_inboxes with no conversation older than 90 days will be removed diff --git a/Gemfile b/Gemfile index 0dac6e95f4284..bee9eddc10137 100644 --- a/Gemfile +++ b/Gemfile @@ -71,13 +71,13 @@ gem 'barnes' ##--- gems for authentication & authorization ---## gem 'devise', '>= 4.9.4' gem 'devise-secure_password', git: 'https://github.com/chatwoot/devise-secure_password', branch: 'chatwoot' -gem 'devise_token_auth' +gem 'devise_token_auth', '>= 1.2.3' # authorization gem 'jwt' gem 'pundit' # super admin gem 'administrate', '>= 0.20.1' -gem 'administrate-field-active_storage', '>= 1.0.1' +gem 'administrate-field-active_storage', '>= 1.0.2' gem 'administrate-field-belongs_to_search', '>= 0.9.0' ##--- gems for pubsub service ---## @@ -113,10 +113,10 @@ gem 'newrelic-sidekiq-metrics', '>= 1.6.2', require: false gem 'scout_apm', require: false gem 'sentry-rails', '>= 5.14.0', require: false gem 'sentry-ruby', require: false -gem 'sentry-sidekiq', '>= 5.14.0', require: false +gem 'sentry-sidekiq', '>= 5.15.0', require: false ##-- background job processing --## -gem 'sidekiq', '>= 7.2.1' +gem 'sidekiq', '>= 7.2.4' # We want cron jobs gem 'sidekiq-cron', '>= 1.12.0' @@ -166,7 +166,7 @@ gem 'audited', '~> 5.4', '>= 5.4.1' # need for google auth gem 'omniauth', '>= 2.1.2' gem 'omniauth-google-oauth2', '>= 1.1.2' -gem 'omniauth-rails_csrf_protection', '~> 1.0' +gem 'omniauth-rails_csrf_protection', '~> 1.0', '>= 1.0.2' ## Gems for reponse bot # adds cosine similarity to postgres using vector extension @@ -175,9 +175,6 @@ gem 'pgvector' # Convert Website HTML to Markdown gem 'reverse_markdown' -# Sentiment analysis -gem 'informers' - ### Gems required only in specific deployment environments ### ############################################################## diff --git a/Gemfile.lock b/Gemfile.lock index 55021a04b379a..2f890deaa28fd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -113,7 +113,7 @@ GEM kaminari (~> 1.2.2) sassc-rails (~> 2.1) selectize-rails (~> 0.6) - administrate-field-active_storage (1.0.1) + administrate-field-active_storage (1.0.2) administrate (>= 0.2.2) rails (>= 7.0) administrate-field-belongs_to_search (0.9.0) @@ -148,10 +148,10 @@ GEM barnes (0.0.9) multi_json (~> 1) statsd-ruby (~> 1.1) - base64 (0.1.1) + base64 (0.2.0) bcrypt (3.1.20) + bigdecimal (3.1.7) bindex (0.8.1) - blingfire (0.1.8) bootsnap (1.16.0) msgpack (~> 1.2) brakeman (5.4.1) @@ -200,10 +200,10 @@ GEM railties (>= 4.1.0) responders warden (~> 1.2.3) - devise_token_auth (1.2.1) + devise_token_auth (1.2.3) bcrypt (~> 3.0) devise (> 3.5.2, < 5) - rails (>= 4.2.0, < 7.1) + rails (>= 4.2.0, < 7.2) diff-lcs (1.5.0) digest-crc (0.6.4) rake (>= 12.0.0, < 14.0.0) @@ -316,15 +316,15 @@ GEM google-cloud-translate-v3 (0.6.0) gapic-common (>= 0.17.1, < 2.a) google-cloud-errors (~> 1.0) - google-protobuf (3.25.2) - google-protobuf (3.25.2-arm64-darwin) - google-protobuf (3.25.2-x86_64-darwin) - google-protobuf (3.25.2-x86_64-linux) + google-protobuf (3.25.3) + google-protobuf (3.25.3-arm64-darwin) + google-protobuf (3.25.3-x86_64-darwin) + google-protobuf (3.25.3-x86_64-linux) googleapis-common-protos (1.4.0) google-protobuf (~> 3.14) googleapis-common-protos-types (~> 1.2) grpc (~> 1.27) - googleapis-common-protos-types (1.11.0) + googleapis-common-protos-types (1.14.0) google-protobuf (~> 3.18) googleauth (1.5.2) faraday (>= 0.17.3, < 3.a) @@ -335,14 +335,17 @@ GEM signet (>= 0.16, < 2.a) groupdate (6.2.1) activesupport (>= 5.2) - grpc (1.54.3) - google-protobuf (~> 3.21) + grpc (1.62.0) + google-protobuf (~> 3.25) googleapis-common-protos-types (~> 1.0) - grpc (1.54.3-x86_64-darwin) - google-protobuf (~> 3.21) + grpc (1.62.0-arm64-darwin) + google-protobuf (~> 3.25) googleapis-common-protos-types (~> 1.0) - grpc (1.54.3-x86_64-linux) - google-protobuf (~> 3.21) + grpc (1.62.0-x86_64-darwin) + google-protobuf (~> 3.25) + googleapis-common-protos-types (~> 1.0) + grpc (1.62.0-x86_64-linux) + google-protobuf (~> 3.25) googleapis-common-protos-types (~> 1.0) haikunator (1.1.1) hairtrigger (1.0.0) @@ -366,15 +369,11 @@ GEM mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) httpclient (2.8.3) - i18n (1.14.4) + i18n (1.14.5) concurrent-ruby (~> 1.0) image_processing (1.12.2) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) - informers (0.2.0) - blingfire (>= 0.1.7) - numo-narray - onnxruntime (>= 0.5.1) io-console (0.6.0) irb (1.7.2) reline (>= 0.3.6) @@ -449,13 +448,13 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.4) maxminddb (0.1.22) memoist (0.16.2) meta_request (0.8.2) rack-contrib (>= 1.1, < 3) railties (>= 3.0.0, < 8) - method_source (1.0.0) + method_source (1.1.0) mime-types (3.4.1) mime-types-data (~> 3.2015) mime-types-data (3.2023.0218.1) @@ -475,7 +474,7 @@ GEM uri net-http-persistent (4.0.2) connection_pool (~> 2.2) - net-imap (0.4.9) + net-imap (0.4.11) date net-protocol net-pop (0.1.2) @@ -490,17 +489,16 @@ GEM sidekiq newrelic_rpm (9.6.0) base64 - nio4r (2.7.0) - nokogiri (1.16.4) + nio4r (2.7.3) + nokogiri (1.16.5) mini_portile2 (~> 2.8.2) racc (~> 1.4) - nokogiri (1.16.4-arm64-darwin) + nokogiri (1.16.5-arm64-darwin) racc (~> 1.4) - nokogiri (1.16.4-x86_64-darwin) + nokogiri (1.16.5-x86_64-darwin) racc (~> 1.4) - nokogiri (1.16.4-x86_64-linux) + nokogiri (1.16.5-x86_64-linux) racc (~> 1.4) - numo-narray (0.9.2.1) oauth (1.1.0) oauth-tty (~> 1.0, >= 1.0.1) snaky_hash (~> 2.0) @@ -526,17 +524,9 @@ GEM omniauth-oauth2 (1.8.0) oauth2 (>= 1.4, < 3) omniauth (~> 2.0) - omniauth-rails_csrf_protection (1.0.1) + omniauth-rails_csrf_protection (1.0.2) actionpack (>= 4.2) omniauth (~> 2.0) - onnxruntime (0.7.6) - ffi - onnxruntime (0.7.6-arm64-darwin) - ffi - onnxruntime (0.7.6-x86_64-darwin) - ffi - onnxruntime (0.7.6-x86_64-linux) - ffi openssl (3.1.0) orm_adapter (0.5.0) os (1.1.4) @@ -614,7 +604,7 @@ GEM ffi (~> 1.0) redis (5.0.6) redis-client (>= 0.9.0) - redis-client (0.19.1) + redis-client (0.22.1) connection_pool redis-namespace (1.10.0) redis (>= 4) @@ -713,18 +703,19 @@ GEM activesupport (>= 4) selectize-rails (0.12.6) semantic_range (3.0.0) - sentry-rails (5.14.0) + sentry-rails (5.17.3) railties (>= 5.0) - sentry-ruby (~> 5.14.0) - sentry-ruby (5.14.0) + sentry-ruby (~> 5.17.3) + sentry-ruby (5.17.3) + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) - sentry-sidekiq (5.14.0) - sentry-ruby (~> 5.14.0) + sentry-sidekiq (5.17.3) + sentry-ruby (~> 5.17.3) sidekiq (>= 3.0) sexp_processor (4.17.0) shoulda-matchers (5.3.0) activesupport (>= 5.2.0) - sidekiq (7.2.1) + sidekiq (7.2.4) concurrent-ruby (< 2) connection_pool (>= 2.3.0) rack (>= 2.2.4) @@ -828,7 +819,7 @@ GEM working_hours (1.4.1) activesupport (>= 3.2) tzinfo - zeitwerk (2.6.13) + zeitwerk (2.6.14) PLATFORMS arm64-darwin-20 @@ -846,7 +837,7 @@ DEPENDENCIES activerecord-import acts-as-taggable-on administrate (>= 0.20.1) - administrate-field-active_storage (>= 1.0.1) + administrate-field-active_storage (>= 1.0.2) administrate-field-belongs_to_search (>= 0.9.0) annotate attr_extras @@ -869,7 +860,7 @@ DEPENDENCIES debug (~> 1.8) devise (>= 4.9.4) devise-secure_password! - devise_token_auth + devise_token_auth (>= 1.2.3) dotenv-rails down elastic-apm @@ -892,7 +883,6 @@ DEPENDENCIES hashie html2text! image_processing - informers jbuilder json_refs json_schemer @@ -914,7 +904,7 @@ DEPENDENCIES omniauth (>= 2.1.2) omniauth-google-oauth2 (>= 1.1.2) omniauth-oauth2 - omniauth-rails_csrf_protection (~> 1.0) + omniauth-rails_csrf_protection (~> 1.0, >= 1.0.2) pg pg_search pgvector @@ -943,9 +933,9 @@ DEPENDENCIES seed_dump sentry-rails (>= 5.14.0) sentry-ruby - sentry-sidekiq (>= 5.14.0) + sentry-sidekiq (>= 5.15.0) shoulda-matchers - sidekiq (>= 7.2.1) + sidekiq (>= 7.2.4) sidekiq-cron (>= 1.12.0) simplecov (= 0.17.1) slack-ruby-client (~> 2.2.0) diff --git a/app.json b/app.json index 4ee025f06e3f1..d50040814205e 100644 --- a/app.json +++ b/app.json @@ -55,7 +55,7 @@ "plan": "heroku-redis:mini" }, { - "plan": "heroku-postgresql:mini" + "plan": "heroku-postgresql:essential-0" } ], "stack": "heroku-20", diff --git a/app/builders/contact_inbox_with_contact_builder.rb b/app/builders/contact_inbox_with_contact_builder.rb index 6e913eda83b63..2f30093dbf8a7 100644 --- a/app/builders/contact_inbox_with_contact_builder.rb +++ b/app/builders/contact_inbox_with_contact_builder.rb @@ -19,9 +19,9 @@ def find_or_create_contact_and_contact_inbox ActiveRecord::Base.transaction(requires_new: true) do build_contact_with_contact_inbox - update_contact_avatar(@contact) unless @contact.avatar.attached? - @contact_inbox end + update_contact_avatar(@contact) unless @contact.avatar.attached? + @contact_inbox end private diff --git a/app/controllers/api/v1/accounts/bulk_actions_controller.rb b/app/controllers/api/v1/accounts/bulk_actions_controller.rb index 832f5a49b1277..34db47861fe48 100644 --- a/app/controllers/api/v1/accounts/bulk_actions_controller.rb +++ b/app/controllers/api/v1/accounts/bulk_actions_controller.rb @@ -21,6 +21,6 @@ def type_matches? end def permitted_params - params.permit(:type, ids: [], fields: [:status, :assignee_id, :team_id], labels: [add: [], remove: []]) + params.permit(:type, :snoozed_until, ids: [], fields: [:status, :assignee_id, :team_id], labels: [add: [], remove: []]) end end diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index 729db34b5d7be..250c64a86105d 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -46,7 +46,8 @@ def import def export column_names = params['column_names'] - Account::ContactsExportJob.perform_later(Current.account.id, column_names, Current.user.email) + filter_params = { :payload => params.permit!['payload'], :label => params.permit!['label'] } + Account::ContactsExportJob.perform_later(Current.account.id, Current.user.id, column_names, filter_params) head :ok, message: I18n.t('errors.contacts.export.success') end @@ -61,7 +62,7 @@ def active def show; end def filter - result = ::Contacts::FilterService.new(params.permit!, current_user).perform + result = ::Contacts::FilterService.new(Current.account, Current.user, params.permit!).perform contacts = result[:contacts] @contacts_count = result[:count] @contacts = fetch_contacts(contacts) diff --git a/app/controllers/api/v1/accounts/conversations/draft_messages_controller.rb b/app/controllers/api/v1/accounts/conversations/draft_messages_controller.rb new file mode 100644 index 0000000000000..86b7ce5bbf5d5 --- /dev/null +++ b/app/controllers/api/v1/accounts/conversations/draft_messages_controller.rb @@ -0,0 +1,28 @@ +class Api::V1::Accounts::Conversations::DraftMessagesController < Api::V1::Accounts::Conversations::BaseController + def show + render json: { has_draft: false } and return unless Redis::Alfred.exists?(draft_redis_key) + + draft_message = Redis::Alfred.get(draft_redis_key) + render json: { has_draft: true, message: draft_message } + end + + def update + Redis::Alfred.set(draft_redis_key, draft_message_params) + head :ok + end + + def destroy + Redis::Alfred.delete(draft_redis_key) + head :ok + end + + private + + def draft_redis_key + format(Redis::Alfred::CONVERSATION_DRAFT_MESSAGE, id: @conversation.id) + end + + def draft_message_params + params.dig(:draft_message, :message) || '' + end +end diff --git a/app/controllers/public/api/v1/portals_controller.rb b/app/controllers/public/api/v1/portals_controller.rb index fe51ed161aa5c..e8fb867cb69b6 100644 --- a/app/controllers/public/api/v1/portals_controller.rb +++ b/app/controllers/public/api/v1/portals_controller.rb @@ -6,6 +6,12 @@ class Public::Api::V1::PortalsController < Public::Api::V1::Portals::BaseControl def show; end + def sitemap + @help_center_url = @portal.custom_domain || ChatwootApp.help_center_root + # if help_center_url does not contain a protocol, prepend it with https + @help_center_url = "https://#{@help_center_url}" unless @help_center_url.include?('://') + end + private def portal diff --git a/app/dispatchers/async_dispatcher.rb b/app/dispatchers/async_dispatcher.rb index f2f238cd49030..b582bc5dd993d 100644 --- a/app/dispatchers/async_dispatcher.rb +++ b/app/dispatchers/async_dispatcher.rb @@ -10,14 +10,15 @@ def publish_event(event_name, timestamp, data) def listeners [ + AutomationRuleListener.instance, CampaignListener.instance, CsatSurveyListener.instance, HookListener.instance, InstallationWebhookListener.instance, NotificationListener.instance, + ParticipationListener.instance, ReportingEventListener.instance, - WebhookListener.instance, - AutomationRuleListener.instance + WebhookListener.instance ] end end diff --git a/app/helpers/api/v2/accounts/reports_helper.rb b/app/helpers/api/v2/accounts/reports_helper.rb index 74c7af43e350a..4d5a6f115e0bf 100644 --- a/app/helpers/api/v2/accounts/reports_helper.rb +++ b/app/helpers/api/v2/accounts/reports_helper.rb @@ -1,7 +1,7 @@ module Api::V2::Accounts::ReportsHelper def generate_agents_report Current.account.users.map do |agent| - agent_report = generate_report({ type: :agent, id: agent.id }) + agent_report = report_builder({ type: :agent, id: agent.id }).summary [agent.name] + generate_readable_report_metrics(agent_report) end end @@ -15,7 +15,7 @@ def generate_inboxes_report def generate_teams_report Current.account.teams.map do |team| - team_report = generate_report({ type: :team, id: team.id }) + team_report = report_builder({ type: :team, id: team.id }).summary [team.name] + generate_readable_report_metrics(team_report) end end @@ -27,7 +27,7 @@ def generate_labels_report end end - def generate_report(report_params) + def report_builder(report_params) V2::ReportBuilder.new( Current.account, report_params.merge( @@ -37,7 +37,11 @@ def generate_report(report_params) business_hours: ActiveModel::Type::Boolean.new.cast(params[:business_hours]) } ) - ).short_summary + ) + end + + def generate_report(report_params) + report_builder(report_params).short_summary end private @@ -46,7 +50,9 @@ def generate_readable_report_metrics(report_metric) [ report_metric[:conversations_count], Reports::TimeFormatPresenter.new(report_metric[:avg_first_response_time]).format, - Reports::TimeFormatPresenter.new(report_metric[:avg_resolution_time]).format + Reports::TimeFormatPresenter.new(report_metric[:avg_resolution_time]).format, + Reports::TimeFormatPresenter.new(report_metric[:reply_time]).format, + report_metric[:resolutions_count] ] end end diff --git a/app/javascript/dashboard/api/contacts.js b/app/javascript/dashboard/api/contacts.js index 61312dd2417ab..85c4bba1d5e1a 100644 --- a/app/javascript/dashboard/api/contacts.js +++ b/app/javascript/dashboard/api/contacts.js @@ -77,8 +77,8 @@ class ContactAPI extends ApiClient { return axios.delete(`${this.url}/${contactId}/avatar`); } - exportContacts() { - return axios.get(`${this.url}/export`); + exportContacts(queryPayload) { + return axios.post(`${this.url}/export`, queryPayload); } } diff --git a/app/javascript/dashboard/assets/scss/_woot.scss b/app/javascript/dashboard/assets/scss/_woot.scss index 5728dd51b26df..4b33d5b10c240 100644 --- a/app/javascript/dashboard/assets/scss/_woot.scss +++ b/app/javascript/dashboard/assets/scss/_woot.scss @@ -40,3 +40,347 @@ .hide { @apply hidden; } + +@layer base { + // scss-lint:disable PropertySortOrder + :root { + --color-amber-25: 254 253 251; + --color-amber-50: 255 249 237; + --color-amber-75: 255 243 208; + --color-amber-100: 255 236 183; + --color-amber-200: 255 224 161; + --color-amber-300: 245 208 140; + --color-amber-400: 228 187 120; + --color-amber-500: 214 163 92; + --color-amber-600: 214 163 92; + --color-amber-700: 255 186 26; + --color-amber-800: 145 89 48; + --color-amber-900: 79 52 34; + + --color-ash-100: 235 235 239; + --color-ash-200: 228 228 233; + --color-ash-25: 252 252 253; + --color-ash-300: 221 221 227; + --color-ash-400: 211 212 219; + --color-ash-50: 249 249 251; + --color-ash-500: 185 187 198; + --color-ash-600: 139 141 152; + --color-ash-700: 126 128 138; + --color-ash-75: 242 242 245; + --color-ash-800: 96 100 108; + --color-ash-900: 28 32 36; + + --color-primary-25: 251 253 255; + --color-primary-50: 245 249 255; + --color-primary-75: 233 243 255; + --color-primary-100: 218 236 255; + --color-primary-200: 201 226 255; + --color-primary-300: 181 213 255; + --color-primary-400: 155 195 252; + --color-primary-500: 117 171 247; + --color-primary-600: 39 129 246; + --color-primary-700: 16 115 233; + --color-primary-800: 8 109 224; + --color-primary-900: 11 50 101; + + --color-ruby-100: 255 220 225; + --color-ruby-200: 255 206 214; + --color-ruby-25: 255 252 253; + --color-ruby-300: 248 191 200; + --color-ruby-400: 239 172 184; + --color-ruby-50: 255 247 248; + --color-ruby-500: 229 146 163; + --color-ruby-600: 229 70 102; + --color-ruby-700: 220 59 93; + --color-ruby-75: 254 234 237; + --color-ruby-800: 202 36 77; + --color-ruby-900: 100 23 43; + + --color-teal-100: 224 248 243; + --color-teal-200: 204 243 234; + --color-teal-25: 250 254 253; + --color-teal-300: 184 234 224; + --color-teal-400: 161 222 210; + --color-teal-50: 243 251 249; + --color-teal-500: 83 185 171; + --color-teal-600: 18 165 148; + --color-teal-700: 13 155 138; + --color-teal-75: 236 249 255; + --color-teal-800: 0 133 115; + --color-teal-900: 13 61 56; + + --color-green-25: 251 254 252; + --color-green-50: 244 251 246; + --color-green-75: 230 246 235; + --color-green-100: 214 241 223; + --color-green-200: 196 232 209; + --color-green-300: 173 221 192; + --color-green-400: 142 206 170; + --color-green-500: 91 185 139; + --color-green-600: 48 164 108; + --color-green-700: 43 154 102; + --color-green-800: 33 131 88; + --color-green-900: 25 59 45; + + --color-mint-25: 249 254 253; + --color-mint-50: 242 251 249; + --color-mint-75: 221 249 242; + --color-mint-100: 200 244 233; + --color-mint-200: 179 236 222; + --color-mint-300: 156 224 208; + --color-mint-400: 126 207 189; + --color-mint-500: 76 187 165; + --color-mint-600: 134 234 212; + --color-mint-700: 125 224 203; + --color-mint-800: 2 120 100; + --color-mint-900: 22 67 60; + + --color-sky-25: 249 254 255; + --color-sky-50: 241 250 253; + --color-sky-75: 225 246 253; + --color-sky-100: 209 240 250; + --color-sky-200: 190 231 245; + --color-sky-300: 169 218 237; + --color-sky-400: 141 202 227; + --color-sky-500: 96 179 215; + --color-sky-600: 124 226 254; + --color-sky-700: 116 218 248; + --color-sky-800: 0 116 158; + --color-sky-900: 29 62 86; + + --color-indigo-25: 253 253 254; + --color-indigo-50: 247 249 255; + --color-indigo-75: 237 242 254; + --color-indigo-100: 225 233 255; + --color-indigo-200: 210 222 255; + --color-indigo-300: 193 208 255; + --color-indigo-400: 171 189 249; + --color-indigo-500: 141 164 239; + --color-indigo-600: 62 99 221; + --color-indigo-700: 51 88 212; + --color-indigo-800: 58 91 199; + --color-indigo-900: 31 45 92; + + --color-iris-25: 253 253 255; + --color-iris-50: 248 248 255; + --color-iris-75: 240 241 254; + --color-iris-100: 230 231 255; + --color-iris-200: 218 220 255; + --color-iris-300: 203 205 255; + --color-iris-400: 184 186 248; + --color-iris-500: 155 158 240; + --color-iris-600: 91 91 214; + --color-iris-700: 81 81 205; + --color-iris-800: 87 83 198; + --color-iris-900: 39 41 98; + + --color-violet-25: 253 252 254; + --color-violet-50: 250 248 255; + --color-violet-75: 244 240 254; + --color-violet-100: 235 228 255; + --color-violet-200: 225 217 255; + --color-violet-300: 212 202 254; + --color-violet-400: 194 181 245; + --color-violet-500: 170 153 236; + --color-violet-600: 110 86 207; + --color-violet-700: 101 77 196; + --color-violet-800: 101 80 185; + --color-violet-900: 47 38 95; + + --color-pink-25: 255 252 254; + --color-pink-50: 254 247 251; + --color-pink-75: 254 233 245; + --color-pink-100: 251 220 239; + --color-pink-200: 246 206 231; + --color-pink-300: 239 191 221; + --color-pink-400: 231 172 208; + --color-pink-500: 221 147 194; + --color-pink-600: 214 64 159; + --color-pink-700: 207 56 151; + --color-pink-800: 194 41 138; + --color-pink-900: 101 18 73; + + --color-orange-25: 254 252 251; + --color-orange-50: 255 247 237; + --color-orange-75: 255 239 214; + --color-orange-100: 255 223 181; + --color-orange-200: 255 209 154; + --color-orange-300: 255 193 130; + --color-orange-400: 245 174 115; + --color-orange-500: 236 148 85; + --color-orange-600: 247 107 21; + --color-orange-700: 239 95 0; + --color-orange-800: 204 78 0; + --color-orange-900: 88 45 29; + } + // scss-lint:disable QualifyingElement + body.dark { + --color-amber-25: 31 19 0; + --color-amber-50: 37 24 4; + --color-amber-75: 48 32 11; + --color-amber-100: 57 39 15; + --color-amber-200: 67 46 18; + --color-amber-300: 83 57 22; + --color-amber-400: 111 77 29; + --color-amber-500: 169 118 42; + --color-amber-600: 169 118 42; + --color-amber-700: 255 203 71; + --color-amber-800: 255 204 77; + --color-amber-900: 255 231 179; + + --color-ash-100: 46 48 53; + --color-ash-200: 53 55 60; + --color-ash-25: 24 24 26; + --color-ash-300: 60 63 68; + --color-ash-400: 70 75 80; + --color-ash-50: 27 27 31; + --color-ash-500: 90 97 101; + --color-ash-600: 105 110 119; + --color-ash-700: 120 127 133; + --color-ash-75: 39 40 45; + --color-ash-800: 173 177 184; + --color-ash-900: 237 238 240; + + --color-primary-25: 10 17 28; + --color-primary-50: 15 24 38; + --color-primary-75: 15 39 72; + --color-primary-100: 10 49 99; + --color-primary-200: 18 61 117; + --color-primary-300: 29 74 134; + --color-primary-400: 40 89 156; + --color-primary-500: 48 106 186; + --color-primary-600: 39 129 246; + --color-primary-700: 21 116 231; + --color-primary-800: 126 182 255; + --color-primary-900: 205 227 255; + + --color-ruby-100: 78 19 37; + --color-ruby-200: 94 26 46; + --color-ruby-25: 25 17 19; + --color-ruby-300: 111 37 57; + --color-ruby-400: 136 52 71; + --color-ruby-50: 30 21 23; + --color-ruby-500: 179 68 90; + --color-ruby-600: 229 70 102; + --color-ruby-700: 236 90 114; + --color-ruby-75: 58 20 30; + --color-ruby-800: 255 148 157; + --color-ruby-900: 254 210 225; + + --color-teal-100: 2 59 55; + --color-teal-200: 8 72 67; + --color-teal-25: 13 21 20; + --color-teal-300: 28 105 97; + --color-teal-400: 28 105 97; + --color-teal-50: 17 28 27; + --color-teal-500: 32 126 115; + --color-teal-600: 41 163 131; + --color-teal-700: 14 179 158; + --color-teal-75: 13 45 42; + --color-teal-800: 11 216 182; + --color-teal-900: 173 240 221; + + --color-green-25: 14 21 18; + --color-green-50: 18 27 23; + --color-green-75: 19 45 33; + --color-green-100: 17 59 41; + --color-green-200: 23 73 51; + --color-green-300: 32 87 62; + --color-green-400: 40 104 74; + --color-green-500: 47 124 87; + --color-green-600: 48 164 108; + --color-green-700: 51 176 116; + --color-green-800: 61 214 140; + --color-green-900: 177 241 203; + + --color-mint-25: 14 21 21; + --color-mint-50: 15 27 27; + --color-mint-75: 9 44 43; + --color-mint-100: 0 58 56; + --color-mint-200: 0 71 68; + --color-mint-300: 16 86 80; + --color-mint-400: 30 104 95; + --color-mint-500: 39 127 112; + --color-mint-600: 134 234 212; + --color-mint-700: 168 245 229; + --color-mint-800: 88 213 186; + --color-mint-900: 196 245 225; + + --color-sky-25: 14 21 21; + --color-sky-50: 15 27 27; + --color-sky-75: 9 44 43; + --color-sky-100: 0 58 56; + --color-sky-200: 0 71 68; + --color-sky-300: 16 86 80; + --color-sky-400: 30 104 95; + --color-sky-500: 39 127 112; + --color-sky-600: 134 234 212; + --color-sky-700: 168 245 229; + --color-sky-800: 88 213 186; + --color-sky-900: 196 245 225; + + --color-indigo-25: 17 19 31; + --color-indigo-50: 20 23 38; + --color-indigo-75: 24 36 73; + --color-indigo-100: 29 46 98; + --color-indigo-200: 37 57 116; + --color-indigo-300: 48 67 132; + --color-indigo-400: 58 79 151; + --color-indigo-500: 67 93 177; + --color-indigo-600: 62 99 221; + --color-indigo-700: 84 114 228; + --color-indigo-800: 158 177 255; + --color-indigo-900: 214 225 255; + + --color-iris-25: 19 19 30; + --color-iris-50: 23 22 37; + --color-iris-75: 32 34 72; + --color-iris-100: 38 42 101; + --color-iris-200: 48 51 116; + --color-iris-300: 61 62 130; + --color-iris-400: 74 74 149; + --color-iris-500: 89 88 177; + --color-iris-600: 91 91 214; + --color-iris-700: 110 106 222; + --color-iris-800: 177 169 255; + --color-iris-900: 224 223 254; + + --color-violet-25: 20 18 31; + --color-violet-50: 27 21 37; + --color-violet-75: 41 31 67; + --color-violet-100: 51 37 91; + --color-violet-200: 60 46 105; + --color-violet-300: 71 56 118; + --color-violet-400: 86 70 139; + --color-violet-500: 105 88 173; + --color-violet-600: 110 86 207; + --color-violet-700: 125 102 217; + --color-violet-800: 186 167 255; + --color-violet-900: 226 221 254; + + --color-pink-25: 25 17 23; + --color-pink-50: 33 18 29; + --color-pink-75: 55 23 47; + --color-pink-100: 75 20 61; + --color-pink-200: 89 28 71; + --color-pink-300: 105 41 85; + --color-pink-400: 131 56 105; + --color-pink-500: 168 72 133; + --color-pink-600: 214 64 159; + --color-pink-700: 222 81 168; + --color-pink-800: 255 141 204; + --color-pink-900: 253 209 234; + --color-orange-25: 23 18 14; + --color-orange-50: 30 22 15; + --color-orange-75: 51 30 11; + --color-orange-100: 70 33 0; + --color-orange-200: 86 40 0; + --color-orange-300: 102 53 12; + --color-orange-400: 126 69 29; + --color-orange-500: 163 88 41; + --color-orange-600: 247 107 21; + --color-orange-700: 255 128 31; + --color-orange-800: 255 160 87; + --color-orange-900: 255 224 194; + } +} diff --git a/app/javascript/dashboard/assets/scss/widgets/_base.scss b/app/javascript/dashboard/assets/scss/widgets/_base.scss index 1ebcef53c806e..d5d2e227f6be8 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_base.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_base.scss @@ -12,7 +12,6 @@ h6 { p { text-rendering: optimizeLegibility; - word-spacing: 0.12em; @apply mb-2 leading-[1.65] text-sm; diff --git a/app/javascript/dashboard/components/ChannelSelector.vue b/app/javascript/dashboard/components/ChannelSelector.vue index 33877de945610..dd9513fb6ab08 100644 --- a/app/javascript/dashboard/components/ChannelSelector.vue +++ b/app/javascript/dashboard/components/ChannelSelector.vue @@ -1,9 +1,9 @@ diff --git a/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue b/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue index b7b1460405283..08f77be9a5fc7 100644 --- a/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue +++ b/app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue @@ -180,14 +180,8 @@ + diff --git a/app/javascript/dashboard/components/widgets/forms/PhoneInput.vue b/app/javascript/dashboard/components/widgets/forms/PhoneInput.vue index 78409fe65bdaf..6b09acbacf860 100644 --- a/app/javascript/dashboard/components/widgets/forms/PhoneInput.vue +++ b/app/javascript/dashboard/components/widgets/forms/PhoneInput.vue @@ -1,9 +1,16 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue index 47a1c59b5e54a..3de2a6f52bc93 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue @@ -47,13 +47,11 @@ - +async function deleteAvatar() { + state.logoUrl = ''; + state.avatarBlobId = ''; + emit('delete-logo'); +} + +async function uploadLogoToStorage(file) { + try { + const { fileUrl, blobId } = await uploadFile(file); + if (fileUrl) { + state.logoUrl = fileUrl; + state.avatarBlobId = blobId; + } + } catch (error) { + useAlert(t('HELP_CENTER.PORTAL.ADD.LOGO.IMAGE_UPLOAD_ERROR')); + } +} + +function onFileChange({ file }) { + if (checkFileSizeLimit(file, MAXIMUM_FILE_UPLOAD_SIZE)) { + uploadLogoToStorage(file); + } else { + const errorKey = + 'PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.IMAGE_UPLOAD_SIZE_ERROR'; + useAlert(t(errorKey, { size: MAXIMUM_FILE_UPLOAD_SIZE })); + } +} + + + diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSettingsCustomizationForm.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSettingsCustomizationForm.vue index c00ab9bebdc28..7572f5b802c55 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSettingsCustomizationForm.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSettingsCustomizationForm.vue @@ -1,68 +1,140 @@ + + - diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/NameEmojiInput.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/NameEmojiInput.vue index 5d6862758b3d9..b888a5440eef1 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/NameEmojiInput.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/NameEmojiInput.vue @@ -36,13 +36,10 @@ + - - diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalCustomization.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalCustomization.vue index d1c9341f1f66e..902dc3ca61dca 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalCustomization.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalCustomization.vue @@ -1,3 +1,48 @@ + + - - diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalLocales.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalLocales.vue index 3c1c4c87265bc..e6cee06a4da4d 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalLocales.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/EditPortalLocales.vue @@ -1,6 +1,117 @@ + + - - - diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/NewPortal.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/NewPortal.vue index e1472347683f6..0222044bc7b3d 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/NewPortal.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/NewPortal.vue @@ -1,5 +1,5 @@ + - - diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/PortalSettingsFinish.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/PortalSettingsFinish.vue index 690f058a462ec..3a3e77142d9d5 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/PortalSettingsFinish.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/portals/PortalSettingsFinish.vue @@ -1,6 +1,6 @@ - diff --git a/app/javascript/dashboard/routes/dashboard/inbox/components/InboxListHeader.vue b/app/javascript/dashboard/routes/dashboard/inbox/components/InboxListHeader.vue index 35411f546948f..556a22de0a9fc 100644 --- a/app/javascript/dashboard/routes/dashboard/inbox/components/InboxListHeader.vue +++ b/app/javascript/dashboard/routes/dashboard/inbox/components/InboxListHeader.vue @@ -57,7 +57,6 @@ diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertCondition.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertCondition.vue new file mode 100644 index 0000000000000..ead4b77f2dcd4 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertCondition.vue @@ -0,0 +1,42 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertEvent.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertEvent.vue new file mode 100644 index 0000000000000..41d25b5224eb3 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertEvent.vue @@ -0,0 +1,66 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertTone.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertTone.vue new file mode 100644 index 0000000000000..3246e12af6ecb --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertTone.vue @@ -0,0 +1,56 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/AudioNotifications.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioNotifications.vue new file mode 100644 index 0000000000000..84f369f5a3ba6 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioNotifications.vue @@ -0,0 +1,128 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue index 99cee03254ffa..0c2fa9e7863af 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue @@ -1,82 +1,73 @@ - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/HotKeyCard.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/HotKeyCard.vue new file mode 100644 index 0000000000000..35cbbeb7bea4d --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/HotKeyCard.vue @@ -0,0 +1,64 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue index f337b333bba41..45ec109aaabf6 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue @@ -1,152 +1,116 @@ - diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue index d2eb246d51f39..a86b4fa5c2d8f 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue @@ -1,110 +1,50 @@ - - +}); - +); + +const updateSignature = () => { + emit('update-signature', signature.value); +}; + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationCheckBox.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationCheckBox.vue new file mode 100644 index 0000000000000..feb180014f169 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationCheckBox.vue @@ -0,0 +1,53 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue new file mode 100644 index 0000000000000..986ff9aca21e4 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue @@ -0,0 +1,294 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue deleted file mode 100644 index cdbc40ec40bb6..0000000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue +++ /dev/null @@ -1,649 +0,0 @@ - - - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/UserBasicDetails.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/UserBasicDetails.vue new file mode 100644 index 0000000000000..1a0fb2eae7830 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/UserBasicDetails.vue @@ -0,0 +1,135 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/UserProfilePicture.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/UserProfilePicture.vue new file mode 100644 index 0000000000000..d4ab08bc1c90e --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/UserProfilePicture.vue @@ -0,0 +1,40 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/Wrapper.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/Wrapper.vue new file mode 100644 index 0000000000000..f0931afdc5c3f --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/Wrapper.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/constants.js b/app/javascript/dashboard/routes/dashboard/settings/profile/constants.js new file mode 100644 index 0000000000000..e25d5b52a9003 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/constants.js @@ -0,0 +1,52 @@ +export const NOTIFICATION_TYPES = [ + { + label: 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.CONVERSATION_CREATED', + value: 'conversation_creation', + }, + { + label: 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.CONVERSATION_ASSIGNED', + value: 'conversation_assignment', + }, + { + label: 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.CONVERSATION_MENTION', + value: 'conversation_mention', + }, + { + label: + 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.ASSIGNED_CONVERSATION_NEW_MESSAGE', + value: 'assigned_conversation_new_message', + }, + { + label: + 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.PARTICIPATING_CONVERSATION_NEW_MESSAGE', + value: 'participating_conversation_new_message', + }, + { + label: + 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.SLA_MISSED_FIRST_RESPONSE', + value: 'sla_missed_first_response', + }, + { + label: 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.SLA_MISSED_NEXT_RESPONSE', + value: 'sla_missed_next_response', + }, + { + label: 'PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPES.SLA_MISSED_RESOLUTION', + value: 'sla_missed_resolution', + }, +]; + +export const ALERT_EVENTS = [ + { + value: 'none', + label: 'none', + }, + { + value: 'mine', + label: 'mine', + }, + { + value: 'all', + label: 'all', + }, +]; diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js b/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js index 634d15491736f..357c20e85ff6a 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js @@ -1,6 +1,6 @@ import { frontendURL } from '../../../../helper/URLHelper'; -const SettingsContent = () => import('../Wrapper.vue'); +const SettingsContent = () => import('./Wrapper.vue'); const Index = () => import('./Index.vue'); export default { @@ -10,12 +10,6 @@ export default { name: 'profile_settings', roles: ['administrator', 'agent'], component: SettingsContent, - props: { - headerTitle: 'PROFILE_SETTINGS.TITLE', - icon: 'edit', - showNewButton: false, - showSidemenuIcon: false, - }, children: [ { path: 'settings', diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Heatmap.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Heatmap.vue index fb7e7b5eb1b3d..6f28dabb54b67 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Heatmap.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Heatmap.vue @@ -1,308 +1,173 @@ + + - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAReportFilters.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAReportFilters.vue index 123a921fc1554..16fbbcf40df11 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAReportFilters.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAReportFilters.vue @@ -1,24 +1,10 @@ diff --git a/app/javascript/v3/components/Form/CheckBox.vue b/app/javascript/v3/components/Form/CheckBox.vue new file mode 100644 index 0000000000000..c70a122e6798c --- /dev/null +++ b/app/javascript/v3/components/Form/CheckBox.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/javascript/v3/components/Form/InitialsAvatar.vue b/app/javascript/v3/components/Form/InitialsAvatar.vue new file mode 100644 index 0000000000000..2a489ee766fd7 --- /dev/null +++ b/app/javascript/v3/components/Form/InitialsAvatar.vue @@ -0,0 +1,43 @@ + + + diff --git a/app/javascript/v3/components/Form/ProfileAvatar.vue b/app/javascript/v3/components/Form/ProfileAvatar.vue new file mode 100644 index 0000000000000..fb802d35dea95 --- /dev/null +++ b/app/javascript/v3/components/Form/ProfileAvatar.vue @@ -0,0 +1,84 @@ + + diff --git a/app/javascript/v3/components/Form/Select.vue b/app/javascript/v3/components/Form/Select.vue index a7165b7f2a210..67a311b04caa8 100644 --- a/app/javascript/v3/components/Form/Select.vue +++ b/app/javascript/v3/components/Form/Select.vue @@ -11,11 +11,11 @@ :selected="value" :name="name" :class="{ - 'text-slate-400': !value, - 'text-slate-900 dark:text-slate-100': value, + 'text-ash-400': !value, + 'text-ash-900': value, 'pl-9': icon, }" - class="block w-full px-3 py-2 pr-6 mb-0 border-0 rounded-md shadow-sm outline-none appearance-none select-caret ring-1 ring-inset placeholder:text-slate-400 focus:ring-2 focus:ring-inset focus:ring-woot-500 sm:text-sm sm:leading-6 dark:bg-slate-700 dark:ring-slate-600 dark:focus:ring-woot-500 ring-slate-200" + class="block w-full px-3 py-2 pr-6 mb-0 border-0 shadow-sm outline-none appearance-none rounded-xl select-caret ring-ash-200 ring-1 ring-inset placeholder:text-ash-900 focus:ring-2 focus:ring-inset focus:ring-primary-500 sm:text-sm sm:leading-6" @input="onInput" >