diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 1321e56..f0987d0 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,3 +1,3 @@ # Make sure RUBY_VERSION matches the Ruby version in .ruby-version -ARG RUBY_VERSION=3.3.0 +ARG RUBY_VERSION=3.3.4 FROM ghcr.io/rails/devcontainer/images/ruby:$RUBY_VERSION diff --git a/.devcontainer/compose.yaml b/.devcontainer/compose.yaml index 02debc1..ceb0f15 100644 --- a/.devcontainer/compose.yaml +++ b/.devcontainer/compose.yaml @@ -24,34 +24,9 @@ services: - 45678:45678 depends_on: - selenium - - redis - - postgres selenium: image: seleniarm/standalone-chromium restart: unless-stopped networks: - default - - redis: - image: redis:7.2 - restart: unless-stopped - networks: - - default - volumes: - - redis-data:/data - - postgres: - image: postgres:16.1 - restart: unless-stopped - networks: - - default - volumes: - - postgres-data:/var/lib/postgresql/data - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - -volumes: - redis-data: - postgres-data: diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 02f3dc2..bb3c27d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,19 +10,17 @@ "features": { "ghcr.io/devcontainers/features/github-cli:1": {}, "ghcr.io/rails/devcontainer/features/activestorage": {}, - "ghcr.io/rails/devcontainer/features/postgres-client": {}, - "ghcr.io/devcontainers/features/node:1": { "version": 20 } + "ghcr.io/devcontainers/features/node:1": { "version": 20 }, + "ghcr.io/rails/devcontainer/features/sqlite3": {} }, "containerEnv": { "CAPYBARA_SERVER_PORT": "45678", - "SELENIUM_HOST": "selenium", - "REDIS_URL": "redis://redis:6379/1", - "DB_HOST": "postgres" + "SELENIUM_HOST": "selenium" }, // Use 'forwardPorts' to make a list of ports inside the container available locally. - "forwardPorts": [3000, 5432, 6379], + "forwardPorts": [3000, 6379], // Configure tool-specific properties. // "customizations": {}, diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9612375 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,37 @@ +# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files. + +# Ignore git directory. +/.git/ + +# Ignore bundler config. +/.bundle + +# Ignore all environment files (except templates). +/.env* +!/.env*.erb + +# Ignore all default key files. +/config/master.key +/config/credentials/*.key + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +# Ignore pidfiles, but keep the directory. +/tmp/pids/* +!/tmp/pids/.keep + +# Ignore storage (uploaded files in development and any SQLite databases). +/storage/* +!/storage/.keep +/tmp/storage/* +!/tmp/storage/.keep + +# Ignore assets. +/node_modules/ +/app/assets/builds/* +!/app/assets/builds/.keep +/public/assets diff --git a/.github/workflows/fly-deploy.yml b/.github/workflows/fly-deploy.yml new file mode 100644 index 0000000..b0c246e --- /dev/null +++ b/.github/workflows/fly-deploy.yml @@ -0,0 +1,18 @@ +# See https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/ + +name: Fly Deploy +on: + push: + branches: + - main +jobs: + deploy: + name: Deploy app + runs-on: ubuntu-latest + concurrency: deploy-group # optional: ensure only one action runs at a time + steps: + - uses: actions/checkout@v4 + - uses: superfly/flyctl-actions/setup-flyctl@master + - run: flyctl deploy --remote-only + env: + FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ccc9e54..8a7bea0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -40,28 +40,6 @@ jobs: test: timeout-minutes: 10 runs-on: ubuntu-latest - services: - postgres: - image: postgres:latest - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: password - POSTGRES_DB: test - ports: ["5432:5432"] - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - redis: - image: redis - ports: ["6379:6379"] - options: >- - --health-cmd "redis-cli ping" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - steps: - uses: actions/checkout@v4 @@ -73,7 +51,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version-file: ".tool-versions" + node-version-file: ".node-version" cache: yarn - name: Install dependencies @@ -84,8 +62,6 @@ jobs: - name: Run tests env: - DATABASE_URL: postgres://postgres:password@localhost:5432/test - REDIS_URL: redis://localhost:6379/0 RAILS_ENV: test # RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} run: | diff --git a/.gitignore b/.gitignore index d3e6bcb..17a36cb 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ /node_modules .env* + +/.yarn/* +.yarnrc \ No newline at end of file diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..d5a1596 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +20.10.0 diff --git a/.ruby-version b/.ruby-version index 15a2799..a0891f5 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.0 +3.3.4 diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index 02c5ae8..0000000 --- a/.tool-versions +++ /dev/null @@ -1,2 +0,0 @@ -ruby 3.3.0 -nodejs 20.10.0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a50a339 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,88 @@ +# syntax = docker/dockerfile:1 + +# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile +ARG RUBY_VERSION=3.3.4 +FROM quay.io/evl.ms/fullstaq-ruby:${RUBY_VERSION}-jemalloc-slim as base + +LABEL fly_launch_runtime="rails" + +# Rails app lives here +WORKDIR /rails + +# Set production environment +ENV BUNDLE_DEPLOYMENT="1" \ + BUNDLE_PATH="/usr/local/bundle" \ + BUNDLE_WITHOUT="development:test" \ + RAILS_ENV="production" + +# Update gems and bundler +RUN gem update --system --no-document && \ + gem install -N bundler + + +# Throw-away build stage to reduce size of final image +FROM base as build + +# Install packages needed to build gems and node modules +RUN apt-get update -qq && \ + apt-get install --no-install-recommends -y build-essential curl git libyaml-dev node-gyp pkg-config python-is-python3 + +# Install JavaScript dependencies +ARG NODE_VERSION=20.10.0 +ARG YARN_VERSION=1.22.19 +ENV PATH=/usr/local/node/bin:$PATH +RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \ + /tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node && \ + npm install -g yarn@$YARN_VERSION && \ + rm -rf /tmp/node-build-master + +# Install application gems +COPY --link Gemfile Gemfile.lock ./ +RUN bundle install && \ + bundle exec bootsnap precompile --gemfile && \ + rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git + +# Install node modules +COPY --link .yarnrc package.json package-lock.json yarn.lock ./ +COPY --link .yarn/releases/* .yarn/releases/ +RUN yarn install --frozen-lockfile + +# Copy application code +COPY --link . . + +# Precompile bootsnap code for faster boot times +RUN bundle exec bootsnap precompile app/ lib/ + +# Precompiling assets for production without requiring secret RAILS_MASTER_KEY +RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile + + +# Final stage for app image +FROM base + +# Install packages needed for deployment +RUN apt-get update -qq && \ + apt-get install --no-install-recommends -y curl libsqlite3-0 && \ + rm -rf /var/lib/apt/lists /var/cache/apt/archives + +# Copy built artifacts: gems, application +COPY --from=build "${BUNDLE_PATH}" "${BUNDLE_PATH}" +COPY --from=build /rails /rails + +# Run and own only the runtime files as a non-root user for security +RUN groupadd --system --gid 1000 rails && \ + useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash && \ + mkdir /data && \ + chown -R 1000:1000 db log storage tmp /data +USER 1000:1000 + +# Deployment options +ENV DATABASE_URL="sqlite3:///data/production.sqlite3" + +# Entrypoint prepares the database. +ENTRYPOINT ["/rails/bin/docker-entrypoint"] + +# Start the server by default, this can be overwritten at runtime +EXPOSE 3000 +VOLUME /data +CMD ["./bin/rails", "server"] diff --git a/Gemfile b/Gemfile index fdaea47..a3624f1 100644 --- a/Gemfile +++ b/Gemfile @@ -1,37 +1,30 @@ source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } -ruby "3.3.0" +ruby "3.3.4" # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" -gem "rails", "~> 7.0.8" - -# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails] -gem "sprockets-rails" - -# Use postgresql as the database for Active Record -gem "pg", "~> 1.1" - +gem "rails", "~> 7.2.0.beta3" +# The modern asset pipeline for Rails [https://github.com/rails/propshaft] +gem "propshaft", "0.9.0" +# Use sqlite3 as the database for Active Record +gem "sqlite3", ">= 1.4" # Use the Puma web server [https://github.com/puma/puma] -gem "puma", "~> 5.0" - +gem "puma", "6.4.2" # Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails] -gem "jsbundling-rails" - +gem "jsbundling-rails", "1.3.0" # Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev] -gem "turbo-rails" - +gem "turbo-rails", "2.0.6" # Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev] -gem "stimulus-rails" - +gem "stimulus-rails", "1.3.3" # Bundle and process CSS [https://github.com/rails/cssbundling-rails] -gem "cssbundling-rails" +gem "cssbundling-rails", "1.4.0" # Build JSON APIs with ease [https://github.com/rails/jbuilder] -gem "jbuilder" +# gem "jbuilder" # Use Redis adapter to run Action Cable in production -gem "redis", "~> 4.0" +# gem "redis", "~> 4.0" # Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis] # gem "kredis" @@ -51,12 +44,11 @@ gem "bootsnap", require: false # Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images] # gem "image_processing", "~> 1.2" -gem "dotenv-rails", groups: [:development, :test] +# gem "dotenv-rails", groups: [:development, :test] group :development, :test do # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem gem "debug", platforms: %i[mri mingw x64_mingw] - gem "pry" end group :development do @@ -77,14 +69,8 @@ group :test do gem "selenium-webdriver" end -gem "stripe" -gem "letter_opener", group: :development -gem "postmark-rails" # used in production -gem "octokit", "~> 5.0" -gem "faraday-retry", "~> 2.0" # used for API calls that were failing in octokit gem -gem "rack-www" # used to redirect www to non-www subdomain -gem "rollbar" - gem "phlex-rails" gem "phlex_ui", github: "PhlexUI/phlex_ui", branch: "main" # gem "phlex_ui", path: "../phlex_ui" + +gem "dockerfile-rails", ">= 1.6", group: :development diff --git a/Gemfile.lock b/Gemfile.lock index 43ec5d7..8c68d2f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,140 +1,131 @@ GIT remote: https://github.com/PhlexUI/phlex_ui.git - revision: 73ea7175cdd53a9f5005baf3d1d410240518f151 + revision: ba2cc503725ea8a9dd25648201dbd79a27a44691 branch: main specs: phlex_ui (0.1.10) activesupport (>= 6.0) - phlex (~> 1.10) + phlex (~> 1.11) rouge (~> 4.2.0) zeitwerk (~> 2.6) GEM remote: https://rubygems.org/ specs: - actioncable (7.0.8) - actionpack (= 7.0.8) - activesupport (= 7.0.8) + actioncable (7.2.0.beta3) + actionpack (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8) - actionpack (= 7.0.8) - activejob (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) - mail (>= 2.7.1) - net-imap - net-pop - net-smtp - actionmailer (7.0.8) - actionpack (= 7.0.8) - actionview (= 7.0.8) - activejob (= 7.0.8) - activesupport (= 7.0.8) - mail (~> 2.5, >= 2.5.4) - net-imap - net-pop - net-smtp - rails-dom-testing (~> 2.0) - actionpack (7.0.8) - actionview (= 7.0.8) - activesupport (= 7.0.8) - rack (~> 2.0, >= 2.2.4) + zeitwerk (~> 2.6) + actionmailbox (7.2.0.beta3) + actionpack (= 7.2.0.beta3) + activejob (= 7.2.0.beta3) + activerecord (= 7.2.0.beta3) + activestorage (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) + mail (>= 2.8.0) + actionmailer (7.2.0.beta3) + actionpack (= 7.2.0.beta3) + actionview (= 7.2.0.beta3) + activejob (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) + mail (>= 2.8.0) + rails-dom-testing (~> 2.2) + actionpack (7.2.0.beta3) + actionview (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8) - actionpack (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + useragent (~> 0.16) + actiontext (7.2.0.beta3) + actionpack (= 7.2.0.beta3) + activerecord (= 7.2.0.beta3) + activestorage (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8) - activesupport (= 7.0.8) + actionview (7.2.0.beta3) + activesupport (= 7.2.0.beta3) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.8) - activesupport (= 7.0.8) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.2.0.beta3) + activesupport (= 7.2.0.beta3) globalid (>= 0.3.6) - activemodel (7.0.8) - activesupport (= 7.0.8) - activerecord (7.0.8) - activemodel (= 7.0.8) - activesupport (= 7.0.8) - activestorage (7.0.8) - actionpack (= 7.0.8) - activejob (= 7.0.8) - activerecord (= 7.0.8) - activesupport (= 7.0.8) + activemodel (7.2.0.beta3) + activesupport (= 7.2.0.beta3) + activerecord (7.2.0.beta3) + activemodel (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) + timeout (>= 0.4.0) + activestorage (7.2.0.beta3) + actionpack (= 7.2.0.beta3) + activejob (= 7.2.0.beta3) + activerecord (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) marcel (~> 1.0) - mini_mime (>= 1.1.0) - activesupport (7.0.8) - concurrent-ruby (~> 1.0, >= 1.0.2) + activesupport (7.2.0.beta3) + base64 + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - tzinfo (~> 2.0) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) ast (2.4.2) base64 (0.2.0) + bigdecimal (3.1.8) bindex (0.8.1) - bootsnap (1.17.0) + bootsnap (1.18.3) msgpack (~> 1.2) builder (3.3.0) - capybara (3.39.2) + capybara (3.40.0) addressable matrix mini_mime (>= 0.1.3) - nokogiri (~> 1.8) + nokogiri (~> 1.11) rack (>= 1.6.0) rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - coderay (1.1.3) concurrent-ruby (1.3.3) + connection_pool (2.4.1) crass (1.0.6) - cssbundling-rails (1.3.3) + cssbundling-rails (1.4.0) railties (>= 6.0.0) date (3.3.4) - debug (1.9.1) + debug (1.9.2) irb (~> 1.10) reline (>= 0.3.8) - dotenv (2.8.1) - dotenv-rails (2.8.1) - dotenv (= 2.8.1) - railties (>= 3.2) + dockerfile-rails (1.6.17) + rails (>= 3.0.0) + drb (2.2.1) erubi (1.13.0) - faraday (2.8.1) - base64 - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) - faraday-net_http (3.0.2) - faraday-retry (2.2.0) - faraday (~> 2.0) globalid (1.2.1) activesupport (>= 6.1) i18n (1.14.5) concurrent-ruby (~> 1.0) - io-console (0.7.1) - irb (1.11.0) - rdoc - reline (>= 0.3.8) - jbuilder (2.11.5) - actionview (>= 5.0.0) - activesupport (>= 5.0.0) - jsbundling-rails (1.2.1) + io-console (0.7.2) + irb (1.14.0) + rdoc (>= 4.0.0) + reline (>= 0.4.2) + jsbundling-rails (1.3.0) railties (>= 6.0.0) - json (2.7.1) + json (2.7.2) language_server-protocol (3.17.0.3) - launchy (2.5.2) - addressable (~> 2.8) - letter_opener (1.8.1) - launchy (>= 2.2, < 3) lint_roller (1.1.0) + logger (1.6.0) loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) @@ -143,22 +134,21 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.4) matrix (0.4.2) - method_source (1.1.0) mini_mime (1.1.5) minitest (5.24.1) msgpack (1.7.2) - net-imap (0.4.9) + net-imap (0.4.14) date net-protocol net-pop (0.1.2) net-protocol net-protocol (0.2.2) timeout - net-smtp (0.4.0) + net-smtp (0.5.0) net-protocol - nio4r (2.7.0) + nio4r (2.7.3) nokogiri (1.16.6-aarch64-linux) racc (~> 1.4) nokogiri (1.16.6-arm-linux) @@ -171,51 +161,48 @@ GEM racc (~> 1.4) nokogiri (1.16.6-x86_64-linux) racc (~> 1.4) - octokit (5.6.1) - faraday (>= 1, < 3) - sawyer (~> 0.9) - parallel (1.24.0) - parser (3.3.0.5) + parallel (1.25.1) + parser (3.3.4.0) ast (~> 2.4.1) racc - pg (1.5.4) - phlex (1.10.0) - phlex-rails (1.2.1) - phlex (~> 1.10.0) + phlex (1.11.0) + phlex-rails (1.1.1) + phlex (~> 1.9) railties (>= 6.1, < 8) - postmark (1.25.0) - json - postmark-rails (0.22.1) - actionmailer (>= 3.0.0) - postmark (>= 1.21.3, < 2.0) - pry (0.14.2) - coderay (~> 1.1) - method_source (~> 1.0) + zeitwerk (~> 2.6) + propshaft (0.9.0) + actionpack (>= 7.0.0) + activesupport (>= 7.0.0) + rack + railties (>= 7.0.0) psych (5.1.2) stringio - public_suffix (5.0.4) - puma (5.6.7) + public_suffix (6.0.1) + puma (6.4.2) nio4r (~> 2.0) racc (1.8.0) - rack (2.2.9) + rack (3.1.7) + rack-session (2.0.0) + rack (>= 3.0.0) rack-test (2.1.0) rack (>= 1.3) - rack-www (2.3.0) - rack (< 3.0) - rails (7.0.8) - actioncable (= 7.0.8) - actionmailbox (= 7.0.8) - actionmailer (= 7.0.8) - actionpack (= 7.0.8) - actiontext (= 7.0.8) - actionview (= 7.0.8) - activejob (= 7.0.8) - activemodel (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) + rackup (2.1.0) + rack (>= 3) + webrick (~> 1.8) + rails (7.2.0.beta3) + actioncable (= 7.2.0.beta3) + actionmailbox (= 7.2.0.beta3) + actionmailer (= 7.2.0.beta3) + actionpack (= 7.2.0.beta3) + actiontext (= 7.2.0.beta3) + actionview (= 7.2.0.beta3) + activejob (= 7.2.0.beta3) + activemodel (= 7.2.0.beta3) + activerecord (= 7.2.0.beta3) + activestorage (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) bundler (>= 1.15.0) - railties (= 7.0.8) + railties (= 7.2.0.beta3) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -223,25 +210,25 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.8) - actionpack (= 7.0.8) - activesupport (= 7.0.8) - method_source + railties (7.2.0.beta3) + actionpack (= 7.2.0.beta3) + activesupport (= 7.2.0.beta3) + irb (~> 1.13) + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) rainbow (3.1.1) rake (13.2.1) - rdoc (6.6.2) + rdoc (6.7.0) psych (>= 4.0.0) - redis (4.8.1) - regexp_parser (2.8.3) - reline (0.4.1) + regexp_parser (2.9.2) + reline (0.5.9) io-console (~> 0.5) - rexml (3.2.6) - rollbar (3.4.2) + rexml (3.3.2) + strscan rouge (4.2.1) - rubocop (1.61.0) + rubocop (1.64.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -249,62 +236,61 @@ GEM rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.30.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.31.1) - parser (>= 3.3.0.4) - rubocop-performance (1.20.2) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.21.1) rubocop (>= 1.48.1, < 2.0) - rubocop-ast (>= 1.30.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (1.13.0) - ruby2_keywords (0.0.5) rubyzip (2.3.2) - sawyer (0.9.2) - addressable (>= 2.3.5) - faraday (>= 0.17.3, < 3) - selenium-webdriver (4.16.0) + selenium-webdriver (4.23.0) + base64 (~> 0.2) + logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) - sprockets (4.2.1) - concurrent-ruby (~> 1.0) - rack (>= 2.2.4, < 4) - sprockets-rails (3.4.2) - actionpack (>= 5.2) - activesupport (>= 5.2) - sprockets (>= 3.0.0) - standard (1.34.0) + sqlite3 (2.0.2-aarch64-linux-gnu) + sqlite3 (2.0.2-arm-linux-gnu) + sqlite3 (2.0.2-arm64-darwin) + sqlite3 (2.0.2-x86-linux-gnu) + sqlite3 (2.0.2-x86_64-darwin) + sqlite3 (2.0.2-x86_64-linux-gnu) + standard (1.39.2) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) - rubocop (~> 1.60) + rubocop (~> 1.64.0) standard-custom (~> 1.0.0) - standard-performance (~> 1.3) + standard-performance (~> 1.4) standard-custom (1.0.2) lint_roller (~> 1.0) rubocop (~> 1.50) - standard-performance (1.3.1) + standard-performance (1.4.0) lint_roller (~> 1.1) - rubocop-performance (~> 1.20.2) + rubocop-performance (~> 1.21.0) stimulus-rails (1.3.3) railties (>= 6.0.0) - stringio (3.1.0) - stripe (10.4.0) + stringio (3.1.1) + strscan (3.1.0) thor (1.3.1) timeout (0.4.1) - turbo-rails (2.0.5) + turbo-rails (2.0.6) actionpack (>= 6.0.0) activejob (>= 6.0.0) railties (>= 6.0.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.5.0) + useragent (0.16.10) web-console (4.2.1) actionview (>= 6.0.0) activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) - websocket (1.2.10) + webrick (1.8.1) + websocket (1.2.11) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) @@ -323,35 +309,25 @@ PLATFORMS DEPENDENCIES bootsnap capybara - cssbundling-rails + cssbundling-rails (= 1.4.0) debug - dotenv-rails - faraday-retry (~> 2.0) - jbuilder - jsbundling-rails - letter_opener - octokit (~> 5.0) - pg (~> 1.1) + dockerfile-rails (>= 1.6) + jsbundling-rails (= 1.3.0) phlex-rails phlex_ui! - postmark-rails - pry - puma (~> 5.0) - rack-www - rails (~> 7.0.8) - redis (~> 4.0) - rollbar + propshaft (= 0.9.0) + puma (= 6.4.2) + rails (~> 7.2.0.beta3) selenium-webdriver - sprockets-rails + sqlite3 (>= 1.4) standard - stimulus-rails - stripe - turbo-rails + stimulus-rails (= 1.3.3) + turbo-rails (= 2.0.6) tzinfo-data web-console RUBY VERSION - ruby 3.3.0p0 + ruby 3.3.4p94 BUNDLED WITH - 2.5.3 + 2.3.25 diff --git a/bin/docker-entrypoint b/bin/docker-entrypoint new file mode 100755 index 0000000..67ef493 --- /dev/null +++ b/bin/docker-entrypoint @@ -0,0 +1,8 @@ +#!/bin/bash -e + +# If running the rails server then create or migrate existing database +if [ "${1}" == "./bin/rails" ] && [ "${2}" == "server" ]; then + ./bin/rails db:prepare +fi + +exec "${@}" diff --git a/config/application.rb b/config/application.rb index 9c81b48..f576ed6 100644 --- a/config/application.rb +++ b/config/application.rb @@ -14,7 +14,12 @@ class Application < Rails::Application config.autoload_paths << "#{root}/lib" # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 7.0 + config.load_defaults 7.2 + + # Please, add to the `ignore` list any other `lib` subdirectories that do + # not contain `.rb` files, or that should not be reloaded or eager loaded. + # Common ones are `templates`, `generators`, or `middleware`, for example. + config.autoload_lib(ignore: %w[assets tasks]) # Configuration for the application, engines, and railties goes here. # @@ -24,8 +29,6 @@ class Application < Rails::Application # config.time_zone = "Central Time (US & Canada)" # config.eager_load_paths << Rails.root.join("extras") - config.middleware.use Rack::WWW, www: false # redirects all requests to naked domain - config.exceptions_app = routes # redirects all exceptions to custom error pages (See routes) end end diff --git a/config/database.yml b/config/database.yml index 99fffbf..427959d 100644 --- a/config/database.yml +++ b/config/database.yml @@ -15,21 +15,13 @@ # gem "pg" # default: &default - adapter: postgresql - encoding: unicode - # For details on connection pooling, see Rails configuration guide - # https://guides.rubyonrails.org/configuring.html#database-pooling + adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> - <% if ENV["DB_HOST"] %> - host: <%= ENV["DB_HOST"] %> - username: postgres - password: postgres - <% end %> - + timeout: 5000 development: <<: *default - database: phlex_components_library_development + database: storage/development.sqlite3 # The specified database role being used to connect to postgres. # To create additional roles in postgres see `$ createuser --help`. @@ -63,7 +55,7 @@ development: # Do not set this db to the same as development or production. test: <<: *default - database: phlex_components_library_test + database: storage/test.sqlite3 # As with config/credentials.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is @@ -87,6 +79,4 @@ test: # production: <<: *default - database: phlex_components_library_production - username: phlex_components_library - password: <%= ENV["PHLEX_COMPONENTS_LIBRARY_DATABASE_PASSWORD"] %> + database: storage/production.sqlite3 diff --git a/config/dockerfile.yml b/config/dockerfile.yml new file mode 100644 index 0000000..998da30 --- /dev/null +++ b/config/dockerfile.yml @@ -0,0 +1,8 @@ +# generated by dockerfile-rails + +--- +options: + fullstaq: true + jemalloc: true + label: + fly_launch_runtime: rails diff --git a/config/environments/production.rb b/config/environments/production.rb index 22ddd20..938d48b 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -71,8 +71,8 @@ config.action_mailer.default_url_options = {host: ENV["HOST"]} config.action_mailer.asset_host = ENV["HOST"] - config.action_mailer.delivery_method = :postmark - config.action_mailer.postmark_settings = {api_token: ENV["POSTMARK_API_KEY"]} + # config.action_mailer.delivery_method = :postmark + # config.action_mailer.postmark_settings = {api_token: ENV["POSTMARK_API_KEY"]} # Enable locale fallbacks for I18n (makes lookups for any locale fall back to # the I18n.default_locale when a translation cannot be found). diff --git a/config/initializers/github.rb b/config/initializers/github.rb deleted file mode 100644 index 0761338..0000000 --- a/config/initializers/github.rb +++ /dev/null @@ -1 +0,0 @@ -GITHUB_CLIENT = Octokit::Client.new(access_token: ENV["GITHUB_ACCESS_TOKEN"]) diff --git a/config/initializers/rollbar.rb b/config/initializers/rollbar.rb deleted file mode 100644 index c739be9..0000000 --- a/config/initializers/rollbar.rb +++ /dev/null @@ -1,71 +0,0 @@ -Rollbar.configure do |config| - # Without configuration, Rollbar is enabled in all environments. - # To disable in specific environments, set config.enabled=false. - - config.access_token = ENV["ROLLBAR_ACCESS_TOKEN"] - - # Here we'll disable in 'test' and 'development'. - if Rails.env.test? || Rails.env.development? - config.enabled = false - end - - # By default, Rollbar will try to call the `current_user` controller method - # to fetch the logged-in user object, and then call that object's `id` - # method to fetch this property. To customize: - # config.person_method = "my_current_user" - # config.person_id_method = "my_id" - - # Additionally, you may specify the following: - # config.person_username_method = "username" - # config.person_email_method = "email" - - # If you want to attach custom data to all exception and message reports, - # provide a lambda like the following. It should return a hash. - # config.custom_data_method = lambda { {:some_key => "some_value" } } - - # Add exception class names to the exception_level_filters hash to - # change the level that exception is reported at. Note that if an exception - # has already been reported and logged the level will need to be changed - # via the rollbar interface. - # Valid levels: 'critical', 'error', 'warning', 'info', 'debug', 'ignore' - # 'ignore' will cause the exception to not be reported at all. - # config.exception_level_filters.merge!('MyCriticalException' => 'critical') - # - # You can also specify a callable, which will be called with the exception instance. - # config.exception_level_filters.merge!('MyCriticalException' => lambda { |e| 'critical' }) - - # Enable asynchronous reporting (uses girl_friday or Threading if girl_friday - # is not installed) - # config.use_async = true - # Supply your own async handler: - # config.async_handler = Proc.new { |payload| - # Thread.new { Rollbar.process_from_async_handler(payload) } - # } - - # Enable asynchronous reporting (using sucker_punch) - # config.use_sucker_punch - - # Enable delayed reporting (using Sidekiq) - # config.use_sidekiq - # You can supply custom Sidekiq options: - # config.use_sidekiq 'queue' => 'default' - - # If your application runs behind a proxy server, you can set proxy parameters here. - # If https_proxy is set in your environment, that will be used. Settings here have precedence. - # The :host key is mandatory and must include the URL scheme (e.g. 'http://'), all other fields - # are optional. - # - # config.proxy = { - # host: 'http://some.proxy.server', - # port: 80, - # user: 'username_if_auth_required', - # password: 'password_if_auth_required' - # } - - # If you run your staging application instance in production environment then - # you'll want to override the environment reported by `Rails.env` with an - # environment variable like this: `ROLLBAR_ENV=staging`. This is a recommended - # setup for Heroku. See: - # https://devcenter.heroku.com/articles/deploying-to-a-custom-rails-environment - config.environment = ENV["ROLLBAR_ENV"].presence || Rails.env -end diff --git a/config/initializers/stripe.rb b/config/initializers/stripe.rb deleted file mode 100644 index 96b979e..0000000 --- a/config/initializers/stripe.rb +++ /dev/null @@ -1 +0,0 @@ -Stripe.api_key = ENV["STRIPE_SECRET_KEY"] diff --git a/db/migrate/20231123053447_create_users.rb b/db/migrate/20231123053447_create_users.rb deleted file mode 100644 index 896e0ae..0000000 --- a/db/migrate/20231123053447_create_users.rb +++ /dev/null @@ -1,11 +0,0 @@ -class CreateUsers < ActiveRecord::Migration[7.0] - def change - create_table :users do |t| - t.string :email - t.string :auth_token - t.datetime :auth_token_expires_at - - t.timestamps - end - end -end diff --git a/db/migrate/20231127040224_add_plan_to_users.rb b/db/migrate/20231127040224_add_plan_to_users.rb deleted file mode 100644 index 1796909..0000000 --- a/db/migrate/20231127040224_add_plan_to_users.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddPlanToUsers < ActiveRecord::Migration[7.0] - def change - add_column :users, :plan, :integer, default: 0 - end -end diff --git a/db/migrate/20231129033908_create_team_members.rb b/db/migrate/20231129033908_create_team_members.rb deleted file mode 100644 index f502fe2..0000000 --- a/db/migrate/20231129033908_create_team_members.rb +++ /dev/null @@ -1,10 +0,0 @@ -class CreateTeamMembers < ActiveRecord::Migration[7.0] - def change - create_table :team_members do |t| - t.string :email - t.references :user, null: false, foreign_key: true - - t.timestamps - end - end -end diff --git a/db/migrate/20231204055609_add_github_username_to_user.rb b/db/migrate/20231204055609_add_github_username_to_user.rb deleted file mode 100644 index 6c7a8ad..0000000 --- a/db/migrate/20231204055609_add_github_username_to_user.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddGithubUsernameToUser < ActiveRecord::Migration[7.0] - def change - add_column :users, :github_username, :string - end -end diff --git a/db/migrate/20240102084405_create_votes.rb b/db/migrate/20240102084405_create_votes.rb deleted file mode 100644 index 301e83f..0000000 --- a/db/migrate/20240102084405_create_votes.rb +++ /dev/null @@ -1,10 +0,0 @@ -class CreateVotes < ActiveRecord::Migration[7.0] - def change - create_table :votes do |t| - t.string :component_slug - t.references :user, null: false, foreign_key: true - - t.timestamps - end - end -end diff --git a/db/schema.rb b/db/schema.rb index ff19153..b134683 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,36 +10,5 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_01_02_084405) do - # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" - - create_table "team_members", force: :cascade do |t| - t.string "email" - t.bigint "user_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["user_id"], name: "index_team_members_on_user_id" - end - - create_table "users", force: :cascade do |t| - t.string "email" - t.string "auth_token" - t.datetime "auth_token_expires_at" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "plan", default: 0 - t.string "github_username" - end - - create_table "votes", force: :cascade do |t| - t.string "component_slug" - t.bigint "user_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["user_id"], name: "index_votes_on_user_id" - end - - add_foreign_key "team_members", "users" - add_foreign_key "votes", "users" +ActiveRecord::Schema[7.2].define(version: 2024_01_02_084405) do end diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..3bd5e7a --- /dev/null +++ b/fly.toml @@ -0,0 +1,31 @@ +# fly.toml app configuration file generated for rbui on 2024-07-28T09:41:04-03:00 +# +# See https://fly.io/docs/reference/configuration/ for information about how to use this file. +# + +app = 'rbui' +primary_region = 'iad' +console_command = '/rails/bin/rails console' + +[build] + +[[mounts]] + source = 'data' + destination = '/data' + +[http_service] + internal_port = 3000 + force_https = true + auto_stop_machines = 'stop' + auto_start_machines = true + min_machines_running = 0 + processes = ['app'] + +[[vm]] + memory = '512mb' + cpu_kind = 'shared' + cpus = 1 + +[[statics]] + guest_path = '/rails/public' + url_prefix = '/' diff --git a/lib/email_auth/delivers_email.rb b/lib/email_auth/delivers_email.rb deleted file mode 100644 index 7c1ccb3..0000000 --- a/lib/email_auth/delivers_email.rb +++ /dev/null @@ -1,17 +0,0 @@ -module EmailAuth - class DeliversEmail - def initialize(user:, token:, redirect_path:) - @user = user - @token = token - @redirect_path = redirect_path - end - - def call - SigninLinkMailer.with( - user: @user, - token: @token, - redirect_path: @redirect_path - ).signin_link.deliver_now # change to deliver_later if you want to send it asynchronously - end - end -end diff --git a/lib/email_auth/emails_link.rb b/lib/email_auth/emails_link.rb deleted file mode 100644 index ea6db40..0000000 --- a/lib/email_auth/emails_link.rb +++ /dev/null @@ -1,18 +0,0 @@ -module EmailAuth - class EmailsLink - def initialize(email:, redirect_path:) - @email = email - @redirect_path = redirect_path - end - - def call - return unless (user = FindsOrCreatesUser.new(email: @email).call) - - DeliversEmail.new( - user: user, - token: GeneratesToken.new(user: user).call, - redirect_path: @redirect_path - ).call - end - end -end diff --git a/lib/email_auth/finds_or_creates_user.rb b/lib/email_auth/finds_or_creates_user.rb deleted file mode 100644 index 4434b54..0000000 --- a/lib/email_auth/finds_or_creates_user.rb +++ /dev/null @@ -1,16 +0,0 @@ -module EmailAuth - class FindsOrCreatesUser - def initialize(email:) - @email = email - end - - def call - user = User.find_or_create_by( - email: @email.strip.downcase - ) - if user.persisted? - user - end - end - end -end diff --git a/lib/email_auth/generates_token.rb b/lib/email_auth/generates_token.rb deleted file mode 100644 index a06cc32..0000000 --- a/lib/email_auth/generates_token.rb +++ /dev/null @@ -1,19 +0,0 @@ -module EmailAuth - class GeneratesToken - TOKEN_SHELF_LIFE = 30 - - def initialize(user:) - @user = user - end - - def call - unless @user.auth_token.present? && @user.auth_token_expires_at.future? - @user.update!( - auth_token: SecureRandom.urlsafe_base64, - auth_token_expires_at: TOKEN_SHELF_LIFE.minutes.from_now.utc - ) - end - @user.auth_token - end - end -end diff --git a/lib/email_auth/validates_login_attempt.rb b/lib/email_auth/validates_login_attempt.rb deleted file mode 100644 index 2aa092a..0000000 --- a/lib/email_auth/validates_login_attempt.rb +++ /dev/null @@ -1,17 +0,0 @@ -module EmailAuth - class ValidatesLoginAttempt - Result = Struct.new(:success?, :user, keyword_init: true) - - def validate(token) - user = User.where(auth_token: token) - .where("auth_token_expires_at > ?", Time.now.utc) - .first - - if user.present? - Result.new(success?: true, user: user) - else - Result.new(success?: false) - end - end - end -end diff --git a/lib/github/invite_user_to_pro_team.rb b/lib/github/invite_user_to_pro_team.rb deleted file mode 100644 index 2a5e86b..0000000 --- a/lib/github/invite_user_to_pro_team.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Github - class InviteUserToProTeam - BASE_URL = "https://api.github.com" - TEAM_SLUG = "Pro" - ORG = "PhlexUI" - - def initialize(username) - @username = username - @client = GITHUB_CLIENT - end - - def call - response = connection.put do |req| - req.url membership_url - req.body = {role: "member"}.to_json - end - - handle_response(response) - end - - private - - def connection - Faraday.new(url: BASE_URL) do |faraday| - faraday.request :url_encoded - faraday.response :logger - faraday.adapter Faraday.default_adapter - faraday.headers["Authorization"] = "Bearer #{@client.access_token}" - faraday.headers["Accept"] = "application/vnd.github+json" - end - end - - def membership_url - "/orgs/#{ORG}/teams/#{TEAM_SLUG}/memberships/#{@username}" - end - - def handle_response(response) - if response.success? - puts "Successfully added #{@username} to #{TEAM_SLUG} team" - else - puts "Failed to add #{@username} to #{TEAM_SLUG} team: #{response.body}" - end - rescue Faraday::Error => e - puts "An error occurred: #{e.message}" - end - end -end diff --git a/lib/github/revoke_access_from_pro_team.rb b/lib/github/revoke_access_from_pro_team.rb deleted file mode 100644 index 80a932e..0000000 --- a/lib/github/revoke_access_from_pro_team.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Github - class RevokeAccessFromProTeam - TEAM_SLUG = "Pro" - ORG = "PhlexUI" - - def initialize(username) - @username = username - @client = GITHUB_CLIENT - end - - def call - if @client.remove_team_membership(get_team_id, @username) - puts "Successfully removed #{@username} from #{TEAM_SLUG} team" - end - rescue => e - puts "Failed to remove #{@username} from #{TEAM_SLUG} team: #{e.message}" - end - - private - - def get_team_id - team = @client.org_teams(ORG).find { |t| t.name == TEAM_SLUG } - team.id - rescue - raise "Team #{TEAM_SLUG} not found in organization #{ORG}" - end - end -end diff --git a/lib/payment/sync_checkout_session_with_user.rb b/lib/payment/sync_checkout_session_with_user.rb deleted file mode 100644 index 187139a..0000000 --- a/lib/payment/sync_checkout_session_with_user.rb +++ /dev/null @@ -1,65 +0,0 @@ -module Payment - class SyncCheckoutSessionWithUser - PLAN_TYPES = { - ENV["STRIPE_PERSONAL_PRODUCT_ID"] => "personal", - ENV["STRIPE_TEAM_PRODUCT_ID"] => "team" - } - - def initialize(id) - @id = id - end - - def call - checkout_session = retrieve_checkout_session - return if invalid_checkout_session?(checkout_session) - - user = find_or_create_user(checkout_session.customer_details&.email) - update_user_plan(user, checkout_session.line_items) - puts "Successfully synced checkout session #{@id} with user #{user.email}" - rescue Stripe::StripeError => e - log_error("Stripe error: #{e.message}") - rescue => e - log_error("Unexpected error: #{e.message}") - end - - private - - def retrieve_checkout_session - Stripe::Checkout::Session.retrieve({ - id: @id, - expand: ["line_items"] - }) - end - - def invalid_checkout_session?(checkout_session) - if not_paid?(checkout_session) - puts "Skipping checkout session #{@id} because it's not paid" - return true - elsif checkout_session.customer_details&.email.nil? - puts "Skipping checkout session #{@id} because it has no email" - return true - end - false - end - - def not_paid?(checkout_session) - checkout_session.payment_status != "paid" - end - - def find_or_create_user(email) - EmailAuth::FindsOrCreatesUser.new(email: email).call - end - - def update_user_plan(user, purchased_items) - purchased_items.each do |item| - plan_type = PLAN_TYPES[item.price.product] - user.update(plan: plan_type) if plan_type - end - end - - def log_error(message) - # Replace this with your preferred error logging method - puts message - end - end -end diff --git a/lib/tasks/stripe.rake b/lib/tasks/stripe.rake deleted file mode 100644 index 0e70efa..0000000 --- a/lib/tasks/stripe.rake +++ /dev/null @@ -1,18 +0,0 @@ -namespace :stripe do - desc "Sync all Stripe Checkout Sessions with users" - task sync_checkout_sessions: :environment do - # Retrieve all checkout sessions (modify as needed for pagination) - sessions = Stripe::Checkout::Session.list({limit: 1000, status: :complete}).data - - sessions.each do |session| - # Sync each checkout session with the user - Payment::SyncCheckoutSessionWithUser.new(session.id).call - end - - puts "All sessions synced successfully." - rescue Stripe::StripeError => e - puts "Stripe error: #{e.message}" - rescue => e - puts "Unexpected error: #{e.message}" - end -end diff --git a/lib/tasks/user.rake b/lib/tasks/user.rake deleted file mode 100644 index 9ffa723..0000000 --- a/lib/tasks/user.rake +++ /dev/null @@ -1,15 +0,0 @@ -namespace :user do - desc "Send future of PhlexUI email to all users" - task send_future_of_phlexui_email: :environment do - # Retrieve all users (modify as needed for pagination) - users = User.all - - users.each do |user| - # Send email to each user - UserMailer.with(user: user).future_of_phlexui.deliver_now - puts "Email sent successfully to #{user.email}." - rescue => e - puts "Failed to send email to #{user.email}. Unexpected error: #{e.message}" - end - end -end diff --git a/package.json b/package.json index ebe9108..495b678 100644 --- a/package.json +++ b/package.json @@ -2,21 +2,22 @@ "name": "app", "private": "true", "dependencies": { - "@hotwired/stimulus": "^3.2.2", - "@hotwired/turbo-rails": "^8.0.4", - "autoprefixer": "^10.4.16", - "chart.js": "^4.4.1", - "class-variance-authority": "^0.7.0", - "clsx": "^2.0.0", - "esbuild": "^0.19.4", - "lottie-web": "^5.12.2", - "phlex_ui": "^0.1.2", - "postcss": "^8.4.31", - "tailwindcss": "^3.3.3", - "tailwindcss-animate": "^1.0.7" + "@hotwired/stimulus": "3.2.2", + "@hotwired/turbo-rails": "8.0.5", + "autoprefixer": "10.4.19", + "chart.js": "4.4.3", + "class-variance-authority": "0.7.0", + "clsx": "2.1.1", + "esbuild": "0.23.0", + "lottie-web": "5.12.2", + "phlex_ui": "0.1.5", + "postcss": "8.4.40", + "tailwindcss": "3.4.7", + "tailwindcss-animate": "1.0.7" }, "scripts": { - "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds --public-path=/assets", + "build": "esbuild app/javascript/*.* --bundle --sourcemap --format=esm --outdir=app/assets/builds --public-path=/assets", "build:css": "tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --minify" - } -} + }, + "packageManager": "yarn@1.22.19" +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 51b7f02..736d0ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,133 +14,143 @@ dependencies: regenerator-runtime "^0.14.0" -"@esbuild/android-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.7.tgz#646156aea43e8e6723de6e94a4ac07c5aed41be1" - integrity sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w== - -"@esbuild/android-arm@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.7.tgz#0827b49aed813c33ea18ee257c1728cdc4a01030" - integrity sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww== - -"@esbuild/android-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.7.tgz#fa294ed5214d88219d519e0ab1bbb0253a89b864" - integrity sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw== - -"@esbuild/darwin-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.7.tgz" - integrity sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw== - -"@esbuild/darwin-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.7.tgz#02d1f8a572874c90d8f55dde8a859e5145bd06f6" - integrity sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ== - -"@esbuild/freebsd-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.7.tgz#bc6a69b9a7915da278f0a5ebaec069c813982c22" - integrity sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ== - -"@esbuild/freebsd-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.7.tgz#ec3708488625d70e565968ceea1355e7c8613865" - integrity sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA== - -"@esbuild/linux-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.7.tgz#8e04b66c306858f92d4f90f8222775270755e88a" - integrity sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g== - -"@esbuild/linux-arm@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.7.tgz#12d5b65e089029ee1fe4c591b60969c9b1a85355" - integrity sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww== - -"@esbuild/linux-ia32@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.7.tgz#01eabc2a3ad9039e115db650268e4f48f910dbe2" - integrity sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g== - -"@esbuild/linux-loong64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.7.tgz#70681113632970e6a5766607bbdb98aa18cf4d5f" - integrity sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw== - -"@esbuild/linux-mips64el@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.7.tgz#f63c022a71a3d70c482d1943a27cb8997021e230" - integrity sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w== - -"@esbuild/linux-ppc64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.7.tgz#614eafd08b0c50212f287b948b3c08d6e60f221f" - integrity sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ== - -"@esbuild/linux-riscv64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.7.tgz#31d3b63f92f65968268a8e61ba59872538e80e88" - integrity sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw== - -"@esbuild/linux-s390x@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.7.tgz#be94974e0caa0783ae05f9477fd7170b9ac29cb0" - integrity sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg== - -"@esbuild/linux-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.7.tgz#84e8018a913dd4ecee954623e395984aef3d0007" - integrity sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ== - -"@esbuild/netbsd-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.7.tgz#98898ba8800374c9df9bb182ca4f69fcecaf4411" - integrity sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ== - -"@esbuild/openbsd-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.7.tgz#46dc4eda2adb51f16361b1ad10e9b3f4938c4573" - integrity sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ== - -"@esbuild/sunos-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.7.tgz#1650d40dd88412ecc11490119cd23cbaf661a591" - integrity sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw== - -"@esbuild/win32-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.7.tgz#e61de6c4eb204d83fd912f3ae6812cc8c7d32d25" - integrity sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw== - -"@esbuild/win32-ia32@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.7.tgz#3d9c159d42c67e37a433e44ef8217c661cb6f6d0" - integrity sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A== - -"@esbuild/win32-x64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.7.tgz#02c4446f802706098d8e6ee70cf2b7aba96ded0b" - integrity sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ== - -"@hotwired/stimulus@^3.2.2": +"@esbuild/aix-ppc64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz#145b74d5e4a5223489cabdc238d8dad902df5259" + integrity sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ== + +"@esbuild/android-arm64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz#453bbe079fc8d364d4c5545069e8260228559832" + integrity sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ== + +"@esbuild/android-arm@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.0.tgz#26c806853aa4a4f7e683e519cd9d68e201ebcf99" + integrity sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g== + +"@esbuild/android-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.0.tgz#1e51af9a6ac1f7143769f7ee58df5b274ed202e6" + integrity sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ== + +"@esbuild/darwin-arm64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz#d996187a606c9534173ebd78c58098a44dd7ef9e" + integrity sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow== + +"@esbuild/darwin-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz#30c8f28a7ef4e32fe46501434ebe6b0912e9e86c" + integrity sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ== + +"@esbuild/freebsd-arm64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz#30f4fcec8167c08a6e8af9fc14b66152232e7fb4" + integrity sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw== + +"@esbuild/freebsd-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz#1003a6668fe1f5d4439e6813e5b09a92981bc79d" + integrity sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ== + +"@esbuild/linux-arm64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz#3b9a56abfb1410bb6c9138790f062587df3e6e3a" + integrity sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw== + +"@esbuild/linux-arm@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz#237a8548e3da2c48cd79ae339a588f03d1889aad" + integrity sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw== + +"@esbuild/linux-ia32@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz#4269cd19cb2de5de03a7ccfc8855dde3d284a238" + integrity sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA== + +"@esbuild/linux-loong64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz#82b568f5658a52580827cc891cb69d2cb4f86280" + integrity sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A== + +"@esbuild/linux-mips64el@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz#9a57386c926262ae9861c929a6023ed9d43f73e5" + integrity sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w== + +"@esbuild/linux-ppc64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz#f3a79fd636ba0c82285d227eb20ed8e31b4444f6" + integrity sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw== + +"@esbuild/linux-riscv64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz#f9d2ef8356ce6ce140f76029680558126b74c780" + integrity sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw== + +"@esbuild/linux-s390x@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz#45390f12e802201f38a0229e216a6aed4351dfe8" + integrity sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg== + +"@esbuild/linux-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz#c8409761996e3f6db29abcf9b05bee8d7d80e910" + integrity sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ== + +"@esbuild/netbsd-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz#ba70db0114380d5f6cfb9003f1d378ce989cd65c" + integrity sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw== + +"@esbuild/openbsd-arm64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz#72fc55f0b189f7a882e3cf23f332370d69dfd5db" + integrity sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ== + +"@esbuild/openbsd-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz#b6ae7a0911c18fe30da3db1d6d17a497a550e5d8" + integrity sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg== + +"@esbuild/sunos-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz#58f0d5e55b9b21a086bfafaa29f62a3eb3470ad8" + integrity sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA== + +"@esbuild/win32-arm64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz#b858b2432edfad62e945d5c7c9e5ddd0f528ca6d" + integrity sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ== + +"@esbuild/win32-ia32@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz#167ef6ca22a476c6c0c014a58b4f43ae4b80dec7" + integrity sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA== + +"@esbuild/win32-x64@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz#db44a6a08520b5f25bbe409f34a59f2d4bcc7ced" + integrity sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g== + +"@hotwired/stimulus@3.2.2", "@hotwired/stimulus@^3.2.2": version "3.2.2" - resolved "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.2.2.tgz#071aab59c600fed95b97939e605ff261a4251608" integrity sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A== -"@hotwired/turbo-rails@^8.0.4": - version "8.0.4" - resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-8.0.4.tgz#d224f524a9e33fe687cec5d706054eb6fe13fa5b" - integrity sha512-GHCv5+B2VzYZZvMFpg/g9JLx/8pl/8chcubSB7T+Xn1zYOMqAKB6cT80vvWUzxdwfm/2KfaRysfDz+BmvtjFaw== +"@hotwired/turbo-rails@8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-8.0.5.tgz#18c2f0e4f7f952307650308590edf5eb9544b0d3" + integrity sha512-1A9G9u28IRAl0C57z8Ka3AhNPyJdwfOrbjr+ABZk2ZEUw2QO7cJ0pgs77asUj2E/tzn1PgrxrSVu24W+1Q5uBA== dependencies: - "@hotwired/turbo" "^8.0.4" + "@hotwired/turbo" "^8.0.5" "@rails/actioncable" "^7.0" -"@hotwired/turbo@^8.0.4": - version "8.0.4" - resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.4.tgz#5c5361c06a37cdf10dcba4223f1afd0ca1c75091" - integrity sha512-mlZEFUZrJnpfj+g/XeCWWuokvQyN68WvM78JM+0jfSFc98wegm259vCbC1zSllcspRwbgXK31ibehCy5PA78/Q== +"@hotwired/turbo@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.5.tgz#abae6dad018a891e4286e87fa0959217e3866d5a" + integrity sha512-TdZDA7fxVQ2ZycygvpnzjGPmFq4sO/E2QVg+2em/sJ3YTSsIWVEis8HmWlumz+c9DjWcUkcCuB+muF08TInpAQ== "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" @@ -281,14 +291,14 @@ arg@^5.0.2: resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -autoprefixer@^10.4.16: - version "10.4.16" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== +autoprefixer@10.4.19: + version "10.4.19" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001599" + fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" @@ -318,25 +328,32 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.21.10: - version "4.22.1" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== +browserslist@^4.23.0: + version "4.23.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" + integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001640" + electron-to-chromium "^1.4.820" + node-releases "^2.0.14" + update-browserslist-db "^1.1.0" camelcase-css@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001564" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz" - integrity sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg== +caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001640: + version "1.0.30001643" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz#9c004caef315de9452ab970c3da71085f8241dbd" + integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg== + +chart.js@4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.3.tgz#3b2e11e7010fefa99b07d0349236f5098e5226ad" + integrity sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw== + dependencies: + "@kurkle/color" "^0.3.0" chart.js@^4.4.1: version "4.4.1" @@ -360,18 +377,23 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -class-variance-authority@^0.7.0: +class-variance-authority@0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz" + resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz#1c3134d634d80271b1837452b06d821915954522" integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A== dependencies: clsx "2.0.0" -clsx@2.0.0, clsx@^2.0.0: +clsx@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz" integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== +clsx@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + commander@^4.0.0: version "4.1.1" resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" @@ -404,43 +426,45 @@ dlv@^1.1.3: resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -electron-to-chromium@^1.4.535: - version "1.4.590" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.590.tgz" - integrity sha512-hohItzsQcG7/FBsviCYMtQwUSWvVF7NVqPOnJCErWsAshsP/CR2LAXdmq276RbESNdhxiAq5/vRo1g2pxGXVww== +electron-to-chromium@^1.4.820: + version "1.5.2" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.2.tgz#6126ad229ce45e781ec54ca40db0504787f23d19" + integrity sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ== -esbuild@^0.19.4: - version "0.19.7" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.7.tgz" - integrity sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ== +esbuild@0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.0.tgz#de06002d48424d9fdb7eb52dbe8e95927f852599" + integrity sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA== optionalDependencies: - "@esbuild/android-arm" "0.19.7" - "@esbuild/android-arm64" "0.19.7" - "@esbuild/android-x64" "0.19.7" - "@esbuild/darwin-arm64" "0.19.7" - "@esbuild/darwin-x64" "0.19.7" - "@esbuild/freebsd-arm64" "0.19.7" - "@esbuild/freebsd-x64" "0.19.7" - "@esbuild/linux-arm" "0.19.7" - "@esbuild/linux-arm64" "0.19.7" - "@esbuild/linux-ia32" "0.19.7" - "@esbuild/linux-loong64" "0.19.7" - "@esbuild/linux-mips64el" "0.19.7" - "@esbuild/linux-ppc64" "0.19.7" - "@esbuild/linux-riscv64" "0.19.7" - "@esbuild/linux-s390x" "0.19.7" - "@esbuild/linux-x64" "0.19.7" - "@esbuild/netbsd-x64" "0.19.7" - "@esbuild/openbsd-x64" "0.19.7" - "@esbuild/sunos-x64" "0.19.7" - "@esbuild/win32-arm64" "0.19.7" - "@esbuild/win32-ia32" "0.19.7" - "@esbuild/win32-x64" "0.19.7" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + "@esbuild/aix-ppc64" "0.23.0" + "@esbuild/android-arm" "0.23.0" + "@esbuild/android-arm64" "0.23.0" + "@esbuild/android-x64" "0.23.0" + "@esbuild/darwin-arm64" "0.23.0" + "@esbuild/darwin-x64" "0.23.0" + "@esbuild/freebsd-arm64" "0.23.0" + "@esbuild/freebsd-x64" "0.23.0" + "@esbuild/linux-arm" "0.23.0" + "@esbuild/linux-arm64" "0.23.0" + "@esbuild/linux-ia32" "0.23.0" + "@esbuild/linux-loong64" "0.23.0" + "@esbuild/linux-mips64el" "0.23.0" + "@esbuild/linux-ppc64" "0.23.0" + "@esbuild/linux-riscv64" "0.23.0" + "@esbuild/linux-s390x" "0.23.0" + "@esbuild/linux-x64" "0.23.0" + "@esbuild/netbsd-x64" "0.23.0" + "@esbuild/openbsd-arm64" "0.23.0" + "@esbuild/openbsd-x64" "0.23.0" + "@esbuild/sunos-x64" "0.23.0" + "@esbuild/win32-arm64" "0.23.0" + "@esbuild/win32-ia32" "0.23.0" + "@esbuild/win32-x64" "0.23.0" + +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== fast-glob@^3.3.0: version "3.3.2" @@ -467,9 +491,9 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -fraction.js@^4.3.6: +fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fs.realpath@^1.0.0: @@ -574,10 +598,10 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -jiti@^1.19.1: - version "1.21.0" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@^1.21.0: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== lilconfig@^2.1.0: version "2.1.0" @@ -594,9 +618,9 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lottie-web@^5.12.2: +lottie-web@5.12.2: version "5.12.2" - resolved "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5" integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== merge2@^1.3.0: @@ -643,15 +667,15 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.3.6: +nanoid@^3.3.6, nanoid@^3.3.7: version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -690,10 +714,10 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -phlex_ui@^0.1.2: - version "0.1.4" - resolved "https://registry.npmjs.org/phlex_ui/-/phlex_ui-0.1.4.tgz#9fd87eab9846f060f7cbb68c1fd5f975426780ee" - integrity sha512-N/AyTuyk3O4CH45OLgZKubcc4BPdyEtxRtKVNWPLXvo9nWoSvf8WVrGMLKPzK9/8N49rYBHDr9ukF0hrJ56GPg== +phlex_ui@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/phlex_ui/-/phlex_ui-0.1.5.tgz#004b838849cc2433229e0e7a46fc0ce6e7cdae47" + integrity sha512-9Ea2mH/ukg8D8K6toAe9oMmgJvUss2wPawa+roz1y/5eHeVD3+Mqg8qGif0RWt4PWQnT79iONNLXetwiQ3zOxA== dependencies: "@hotwired/stimulus" "^3.2.2" chart.js "^4.4.1" @@ -708,6 +732,11 @@ picocolors@^1.0.0: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" @@ -767,7 +796,16 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.23, postcss@^8.4.31: +postcss@8.4.40: + version "8.4.40" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.40.tgz#eb81f2a4dd7668ed869a6db25999e02e9ad909d8" + integrity sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" + +postcss@^8.4.23: version "8.4.31" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -826,6 +864,11 @@ source-map-js@^1.0.2: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + sucrase@^3.32.0: version "3.34.0" resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz" @@ -844,15 +887,15 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tailwindcss-animate@^1.0.7: +tailwindcss-animate@1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== -tailwindcss@^3.3.3: - version "3.3.5" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz" - integrity sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA== +tailwindcss@3.4.7: + version "3.4.7" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.7.tgz#6092f18767f5933f59375b9afe558e592fc77201" + integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -862,7 +905,7 @@ tailwindcss@^3.3.3: fast-glob "^3.3.0" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.19.1" + jiti "^1.21.0" lilconfig "^2.1.0" micromatch "^4.0.5" normalize-path "^3.0.0" @@ -915,13 +958,13 @@ tslib@^2.3.1: resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" util-deprecate@^1.0.2: version "1.0.2"